@dxos/plugin-client 0.8.2-staging.7ac8446 → 0.8.2

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 (156) hide show
  1. package/dist/lib/browser/{app-graph-builder-WAS4YZNA.mjs → app-graph-builder-CBRN2DMK.mjs} +36 -32
  2. package/dist/lib/browser/app-graph-builder-CBRN2DMK.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-DCUIJY75.mjs +694 -0
  4. package/dist/lib/browser/chunk-DCUIJY75.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-IA3AVM4I.mjs +111 -0
  6. package/dist/lib/browser/chunk-IA3AVM4I.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-BGY6BSUC.mjs → chunk-PSSNS4C6.mjs} +2 -2
  8. package/dist/lib/{node-esm/chunk-K3KGGSJZ.mjs.map → browser/chunk-PSSNS4C6.mjs.map} +1 -1
  9. package/dist/lib/browser/{chunk-4PLF3BEB.mjs → chunk-UCVFWBKT.mjs} +2 -2
  10. package/dist/lib/{node-esm/chunk-BP56BGZR.mjs.map → browser/chunk-UCVFWBKT.mjs.map} +1 -1
  11. package/dist/lib/browser/{client-LV67Q3R7.mjs → client-NMS3MSFP.mjs} +5 -4
  12. package/dist/lib/browser/client-NMS3MSFP.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +12 -12
  14. package/dist/lib/browser/index.mjs.map +3 -3
  15. package/dist/lib/browser/{intent-resolver-NCISOZW4.mjs → intent-resolver-KGM6A3BF.mjs} +14 -14
  16. package/dist/lib/browser/intent-resolver-KGM6A3BF.mjs.map +7 -0
  17. package/dist/lib/browser/meta.json +1 -1
  18. package/dist/lib/browser/migrations-QRQV6ZAM.mjs +23 -0
  19. package/dist/lib/browser/migrations-QRQV6ZAM.mjs.map +7 -0
  20. package/dist/lib/browser/{react-context-WEH7SL4I.mjs → react-context-IE2O2OYK.mjs} +2 -2
  21. package/dist/lib/browser/{react-surface-J7SZR2J6.mjs → react-surface-CKZHHWY3.mjs} +3 -3
  22. package/dist/lib/browser/schema-defs-DNRDVQQJ.mjs +25 -0
  23. package/dist/lib/browser/schema-defs-DNRDVQQJ.mjs.map +7 -0
  24. package/dist/lib/browser/types.mjs +1 -1
  25. package/dist/lib/node/{app-graph-builder-PXOJZJO5.cjs → app-graph-builder-BEEYM3A5.cjs} +45 -41
  26. package/dist/lib/node/app-graph-builder-BEEYM3A5.cjs.map +7 -0
  27. package/dist/lib/node/chunk-73HHNJMV.cjs +719 -0
  28. package/dist/lib/node/chunk-73HHNJMV.cjs.map +7 -0
  29. package/dist/lib/node/chunk-BL6EBWOS.cjs +131 -0
  30. package/dist/lib/node/chunk-BL6EBWOS.cjs.map +7 -0
  31. package/dist/lib/node/{chunk-ZVQIICEN.cjs → chunk-CIYUKY3J.cjs} +5 -5
  32. package/dist/lib/node/{chunk-ZVQIICEN.cjs.map → chunk-CIYUKY3J.cjs.map} +1 -1
  33. package/dist/lib/node/{chunk-W64EOF2B.cjs → chunk-DNKJCPU7.cjs} +5 -5
  34. package/dist/lib/node/{chunk-W64EOF2B.cjs.map → chunk-DNKJCPU7.cjs.map} +1 -1
  35. package/dist/lib/node/{client-BKTGRBYM.cjs → client-Q3EQS4HA.cjs} +10 -9
  36. package/dist/lib/node/client-Q3EQS4HA.cjs.map +7 -0
  37. package/dist/lib/node/index.cjs +19 -19
  38. package/dist/lib/node/index.cjs.map +3 -3
  39. package/dist/lib/node/{intent-resolver-U2576ALY.cjs → intent-resolver-Q4QBA5B2.cjs} +34 -34
  40. package/dist/lib/node/intent-resolver-Q4QBA5B2.cjs.map +7 -0
  41. package/dist/lib/node/meta.json +1 -1
  42. package/dist/lib/node/{migrations-TGNI4FVL.cjs → migrations-6FEWMF7U.cjs} +12 -10
  43. package/dist/lib/node/migrations-6FEWMF7U.cjs.map +7 -0
  44. package/dist/lib/node/{react-context-SF3M3YLR.cjs → react-context-JS7Y5ZOK.cjs} +6 -6
  45. package/dist/lib/node/{react-surface-BSTIXMER.cjs → react-surface-GHKLUOKW.cjs} +24 -24
  46. package/dist/lib/node/{schema-INQ72F54.cjs → schema-defs-TA52ARBO.cjs} +14 -12
  47. package/dist/lib/node/schema-defs-TA52ARBO.cjs.map +7 -0
  48. package/dist/lib/node/types.cjs +3 -3
  49. package/dist/lib/node/types.cjs.map +1 -1
  50. package/dist/lib/node-esm/{app-graph-builder-KIN6NWFI.mjs → app-graph-builder-OZEAAKNT.mjs} +36 -32
  51. package/dist/lib/node-esm/app-graph-builder-OZEAAKNT.mjs.map +7 -0
  52. package/dist/lib/node-esm/{chunk-K3KGGSJZ.mjs → chunk-37E3EI46.mjs} +2 -2
  53. package/dist/lib/{browser/chunk-BGY6BSUC.mjs.map → node-esm/chunk-37E3EI46.mjs.map} +1 -1
  54. package/dist/lib/node-esm/{chunk-BP56BGZR.mjs → chunk-FJYSQRBO.mjs} +2 -2
  55. package/dist/lib/{browser/chunk-4PLF3BEB.mjs.map → node-esm/chunk-FJYSQRBO.mjs.map} +1 -1
  56. package/dist/lib/node-esm/chunk-STGGUFV2.mjs +112 -0
  57. package/dist/lib/node-esm/chunk-STGGUFV2.mjs.map +7 -0
  58. package/dist/lib/node-esm/chunk-ULXZABZ4.mjs +695 -0
  59. package/dist/lib/node-esm/chunk-ULXZABZ4.mjs.map +7 -0
  60. package/dist/lib/node-esm/{client-QQD6WFOB.mjs → client-EBFQZRSF.mjs} +5 -4
  61. package/dist/lib/node-esm/client-EBFQZRSF.mjs.map +7 -0
  62. package/dist/lib/node-esm/index.mjs +12 -12
  63. package/dist/lib/node-esm/index.mjs.map +3 -3
  64. package/dist/lib/node-esm/{intent-resolver-G25U4UGI.mjs → intent-resolver-2GCG4LCE.mjs} +14 -14
  65. package/dist/lib/node-esm/intent-resolver-2GCG4LCE.mjs.map +7 -0
  66. package/dist/lib/node-esm/meta.json +1 -1
  67. package/dist/lib/node-esm/{migrations-IVGATGZR.mjs → migrations-AK43ZE6G.mjs} +9 -7
  68. package/dist/lib/node-esm/migrations-AK43ZE6G.mjs.map +7 -0
  69. package/dist/lib/node-esm/{react-context-EAKKTE5A.mjs → react-context-6N7NMUJE.mjs} +2 -2
  70. package/dist/lib/node-esm/{react-surface-ZPI7T4EM.mjs → react-surface-UCUL26AF.mjs} +3 -3
  71. package/dist/lib/node-esm/schema-defs-O2KQQXJH.mjs +26 -0
  72. package/dist/lib/node-esm/schema-defs-O2KQQXJH.mjs.map +7 -0
  73. package/dist/lib/node-esm/types.mjs +1 -1
  74. package/dist/types/src/ClientPlugin.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  76. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/client.d.ts +3 -3
  78. package/dist/types/src/capabilities/client.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/index.d.ts +5 -181
  80. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  82. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/migrations.d.ts +2 -2
  84. package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/schema-defs.d.ts +4 -0
  87. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -0
  88. package/dist/types/src/components/DevicesContainer.d.ts +4 -3
  89. package/dist/types/src/components/DevicesContainer.d.ts.map +1 -1
  90. package/dist/types/src/components/DevicesContainer.stories.d.ts.map +1 -1
  91. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  92. package/dist/types/src/components/ProfileContainer.d.ts.map +1 -1
  93. package/dist/types/src/components/RecoveryCodeDialog.d.ts.map +1 -1
  94. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts.map +1 -1
  95. package/dist/types/src/components/ResetDialog.d.ts.map +1 -1
  96. package/dist/types/src/components/ResetDialog.stories.d.ts.map +1 -1
  97. package/dist/types/src/types.d.ts +59 -53
  98. package/dist/types/src/types.d.ts.map +1 -1
  99. package/dist/types/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +33 -26
  101. package/src/ClientPlugin.ts +2 -2
  102. package/src/capabilities/app-graph-builder.ts +94 -76
  103. package/src/capabilities/client.ts +4 -3
  104. package/src/capabilities/index.ts +1 -1
  105. package/src/capabilities/intent-resolver.ts +11 -11
  106. package/src/capabilities/migrations.ts +14 -11
  107. package/src/capabilities/schema-defs.ts +29 -0
  108. package/src/components/DevicesContainer.stories.tsx +7 -3
  109. package/src/components/DevicesContainer.tsx +85 -61
  110. package/src/components/ProfileContainer.stories.tsx +1 -1
  111. package/src/components/ProfileContainer.tsx +30 -21
  112. package/src/components/RecoveryCodeDialog.stories.tsx +1 -1
  113. package/src/components/RecoveryCredentialsContainer.stories.tsx +2 -2
  114. package/src/components/RecoveryCredentialsContainer.tsx +48 -46
  115. package/src/components/ResetDialog.stories.tsx +7 -1
  116. package/src/translations.ts +2 -2
  117. package/src/types.ts +60 -47
  118. package/dist/lib/browser/app-graph-builder-WAS4YZNA.mjs.map +0 -7
  119. package/dist/lib/browser/chunk-AN7FJKIJ.mjs +0 -105
  120. package/dist/lib/browser/chunk-AN7FJKIJ.mjs.map +0 -7
  121. package/dist/lib/browser/chunk-XZ4TQC56.mjs +0 -619
  122. package/dist/lib/browser/chunk-XZ4TQC56.mjs.map +0 -7
  123. package/dist/lib/browser/client-LV67Q3R7.mjs.map +0 -7
  124. package/dist/lib/browser/intent-resolver-NCISOZW4.mjs.map +0 -7
  125. package/dist/lib/browser/migrations-3DWFOL5Q.mjs +0 -21
  126. package/dist/lib/browser/migrations-3DWFOL5Q.mjs.map +0 -7
  127. package/dist/lib/browser/schema-JQAT6Q7S.mjs +0 -23
  128. package/dist/lib/browser/schema-JQAT6Q7S.mjs.map +0 -7
  129. package/dist/lib/node/app-graph-builder-PXOJZJO5.cjs.map +0 -7
  130. package/dist/lib/node/chunk-3JE5BFCT.cjs +0 -644
  131. package/dist/lib/node/chunk-3JE5BFCT.cjs.map +0 -7
  132. package/dist/lib/node/chunk-FROKBEVH.cjs +0 -125
  133. package/dist/lib/node/chunk-FROKBEVH.cjs.map +0 -7
  134. package/dist/lib/node/client-BKTGRBYM.cjs.map +0 -7
  135. package/dist/lib/node/intent-resolver-U2576ALY.cjs.map +0 -7
  136. package/dist/lib/node/migrations-TGNI4FVL.cjs.map +0 -7
  137. package/dist/lib/node/schema-INQ72F54.cjs.map +0 -7
  138. package/dist/lib/node-esm/app-graph-builder-KIN6NWFI.mjs.map +0 -7
  139. package/dist/lib/node-esm/chunk-AD5W5QCQ.mjs +0 -106
  140. package/dist/lib/node-esm/chunk-AD5W5QCQ.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-LZN2UNN7.mjs +0 -620
  142. package/dist/lib/node-esm/chunk-LZN2UNN7.mjs.map +0 -7
  143. package/dist/lib/node-esm/client-QQD6WFOB.mjs.map +0 -7
  144. package/dist/lib/node-esm/intent-resolver-G25U4UGI.mjs.map +0 -7
  145. package/dist/lib/node-esm/migrations-IVGATGZR.mjs.map +0 -7
  146. package/dist/lib/node-esm/schema-OK7HY3JJ.mjs +0 -24
  147. package/dist/lib/node-esm/schema-OK7HY3JJ.mjs.map +0 -7
  148. package/dist/types/src/capabilities/schema.d.ts +0 -4
  149. package/dist/types/src/capabilities/schema.d.ts.map +0 -1
  150. package/src/capabilities/schema.ts +0 -26
  151. /package/dist/lib/browser/{react-context-WEH7SL4I.mjs.map → react-context-IE2O2OYK.mjs.map} +0 -0
  152. /package/dist/lib/browser/{react-surface-J7SZR2J6.mjs.map → react-surface-CKZHHWY3.mjs.map} +0 -0
  153. /package/dist/lib/node/{react-context-SF3M3YLR.cjs.map → react-context-JS7Y5ZOK.cjs.map} +0 -0
  154. /package/dist/lib/node/{react-surface-BSTIXMER.cjs.map → react-surface-GHKLUOKW.cjs.map} +0 -0
  155. /package/dist/lib/node-esm/{react-context-EAKKTE5A.mjs.map → react-context-6N7NMUJE.mjs.map} +0 -0
  156. /package/dist/lib/node-esm/{react-surface-ZPI7T4EM.mjs.map → react-surface-UCUL26AF.mjs.map} +0 -0
@@ -0,0 +1,719 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var chunk_73HHNJMV_exports = {};
30
+ __export(chunk_73HHNJMV_exports, {
31
+ DevicesContainer: () => DevicesContainer,
32
+ JOIN_DIALOG: () => JOIN_DIALOG,
33
+ JoinDialog: () => JoinDialog,
34
+ ProfileContainer: () => ProfileContainer,
35
+ RECOVERY_CODE_DIALOG: () => RECOVERY_CODE_DIALOG,
36
+ RESET_DIALOG: () => RESET_DIALOG,
37
+ RecoveryCodeDialog: () => RecoveryCodeDialog,
38
+ RecoveryCredentialsContainer: () => RecoveryCredentialsContainer,
39
+ ResetDialog: () => ResetDialog
40
+ });
41
+ module.exports = __toCommonJS(chunk_73HHNJMV_exports);
42
+ var import_chunk_BL6EBWOS = require("./chunk-BL6EBWOS.cjs");
43
+ var import_chunk_DJKWB5L6 = require("./chunk-DJKWB5L6.cjs");
44
+ var import_tracking = require("@preact-signals/safe-react/tracking");
45
+ var import_react = require("@phosphor-icons/react");
46
+ var import_react2 = __toESM(require("react"));
47
+ var import_react_qr_rounded = require("react-qr-rounded");
48
+ var import_app_framework = require("@dxos/app-framework");
49
+ var import_log = require("@dxos/log");
50
+ var import_react_client = require("@dxos/react-client");
51
+ var import_halo = require("@dxos/react-client/halo");
52
+ var import_invitations = require("@dxos/react-client/invitations");
53
+ var import_mesh = require("@dxos/react-client/mesh");
54
+ var import_react_ui = require("@dxos/react-ui");
55
+ var import_react_ui_form = require("@dxos/react-ui-form");
56
+ var import_react_ui_stack = require("@dxos/react-ui-stack");
57
+ var import_react_ui_theme = require("@dxos/react-ui-theme");
58
+ var import_react3 = require("@dxos/shell/react");
59
+ var import_util = require("@dxos/util");
60
+ var import_tracking2 = require("@preact-signals/safe-react/tracking");
61
+ var import_react4 = __toESM(require("react"));
62
+ var import_app_framework2 = require("@dxos/app-framework");
63
+ var import_types = require("@dxos/plugin-observability/types");
64
+ var import_react_ui2 = require("@dxos/react-ui");
65
+ var import_react5 = require("@dxos/shell/react");
66
+ var import_tracking3 = require("@preact-signals/safe-react/tracking");
67
+ var import_effect = require("effect");
68
+ var import_react6 = __toESM(require("react"));
69
+ var import_async = require("@dxos/async");
70
+ var import_react_client2 = require("@dxos/react-client");
71
+ var import_halo2 = require("@dxos/react-client/halo");
72
+ var import_react_ui3 = require("@dxos/react-ui");
73
+ var import_react_ui_form2 = require("@dxos/react-ui-form");
74
+ var import_react_ui_pickers = require("@dxos/react-ui-pickers");
75
+ var import_react_ui_stack2 = require("@dxos/react-ui-stack");
76
+ var import_util2 = require("@dxos/util");
77
+ var import_tracking4 = require("@preact-signals/safe-react/tracking");
78
+ var import_react7 = __toESM(require("react"));
79
+ var import_react_ui4 = require("@dxos/react-ui");
80
+ var import_tracking5 = require("@preact-signals/safe-react/tracking");
81
+ var import_react8 = __toESM(require("react"));
82
+ var import_app_framework3 = require("@dxos/app-framework");
83
+ var import_halo3 = require("@dxos/react-client/halo");
84
+ var import_react_ui5 = require("@dxos/react-ui");
85
+ var import_react_ui_form3 = require("@dxos/react-ui-form");
86
+ var import_react_ui_stack3 = require("@dxos/react-ui-stack");
87
+ var import_tracking6 = require("@preact-signals/safe-react/tracking");
88
+ var import_react9 = __toESM(require("react"));
89
+ var import_app_framework4 = require("@dxos/app-framework");
90
+ var import_react_client3 = require("@dxos/react-client");
91
+ var import_react_ui6 = require("@dxos/react-ui");
92
+ var import_react10 = require("@dxos/shell/react");
93
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-client/src/components/DevicesContainer.tsx";
94
+ var DevicesContainer = ({ createInvitationUrl }) => {
95
+ var _effect = (0, import_tracking.useSignals)();
96
+ try {
97
+ const { t } = (0, import_react_ui.useTranslation)("os");
98
+ const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
99
+ const devices = (0, import_halo.useDevices)();
100
+ const { swarm: connectionState } = (0, import_mesh.useNetworkStatus)();
101
+ const handleResetStorage = (0, import_react2.useCallback)(() => dispatch((0, import_app_framework.createIntent)(import_chunk_BL6EBWOS.ClientAction.ResetStorage)), [
102
+ dispatch
103
+ ]);
104
+ const handleRecover = (0, import_react2.useCallback)(() => dispatch((0, import_app_framework.createIntent)(import_chunk_BL6EBWOS.ClientAction.ResetStorage, {
105
+ mode: "recover"
106
+ })), [
107
+ dispatch
108
+ ]);
109
+ const handleJoinNewIdentity = (0, import_react2.useCallback)(() => dispatch((0, import_app_framework.createIntent)(import_chunk_BL6EBWOS.ClientAction.ResetStorage, {
110
+ mode: "join new identity"
111
+ })), [
112
+ dispatch
113
+ ]);
114
+ return /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Clipboard.Provider, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_stack.StackItem.Content, {
115
+ classNames: "block overflow-y-auto"
116
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.ControlPage, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.ControlSection, {
117
+ title: t("devices verbose label", {
118
+ ns: import_chunk_DJKWB5L6.CLIENT_PLUGIN
119
+ }),
120
+ description: t("devices description", {
121
+ ns: import_chunk_DJKWB5L6.CLIENT_PLUGIN
122
+ })
123
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.ControlFrame, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.ControlFrameItem, {
124
+ title: t("devices label", {
125
+ ns: import_chunk_DJKWB5L6.CLIENT_PLUGIN
126
+ })
127
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.List, null, devices.map((device) => {
128
+ return /* @__PURE__ */ import_react2.default.createElement(import_react3.DeviceListItem, {
129
+ key: device.deviceKey.toHex(),
130
+ device,
131
+ connectionState
132
+ });
133
+ }))), createInvitationUrl && /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.ControlFrameItem, {
134
+ title: "Add device"
135
+ }, /* @__PURE__ */ import_react2.default.createElement(DeviceInvitation, {
136
+ createInvitationUrl
137
+ })))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.ControlSection, {
138
+ title: t("danger zone title", {
139
+ ns: import_chunk_DJKWB5L6.CLIENT_PLUGIN
140
+ }),
141
+ description: t("danger zone description", {
142
+ ns: import_chunk_DJKWB5L6.CLIENT_PLUGIN
143
+ })
144
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.ControlGroup, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.ControlItem, {
145
+ title: t("reset device label"),
146
+ description: t("reset device description", {
147
+ ns: import_chunk_DJKWB5L6.CLIENT_PLUGIN
148
+ })
149
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Button, {
150
+ variant: "destructive",
151
+ onClick: handleResetStorage,
152
+ "data-testid": "devicesContainer.reset"
153
+ }, t("reset device label"))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.ControlItem, {
154
+ title: t("recover identity label"),
155
+ description: t("recover identity description", {
156
+ ns: import_chunk_DJKWB5L6.CLIENT_PLUGIN
157
+ })
158
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Button, {
159
+ variant: "destructive",
160
+ onClick: handleRecover,
161
+ "data-testid": "devicesContainer.recover"
162
+ }, t("recover identity label"))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui_form.ControlItem, {
163
+ title: t("join new identity label"),
164
+ description: t("join new identity description", {
165
+ ns: import_chunk_DJKWB5L6.CLIENT_PLUGIN
166
+ })
167
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Button, {
168
+ variant: "destructive",
169
+ onClick: handleJoinNewIdentity,
170
+ "data-testid": "devicesContainer.joinExisting"
171
+ }, t("join new identity label"))))))));
172
+ } finally {
173
+ _effect.f();
174
+ }
175
+ };
176
+ var DeviceInvitation = (props) => {
177
+ var _effect = (0, import_tracking.useSignals)();
178
+ try {
179
+ const client = (0, import_react_client.useClient)();
180
+ const [invitation, setInvitation] = (0, import_react2.useState)();
181
+ const onInvitationCreate = (0, import_react2.useCallback)(() => {
182
+ const invitation2 = client.halo.share();
183
+ if (client.config.values.runtime?.app?.env?.DX_ENVIRONMENT !== "production") {
184
+ const subscription = invitation2.subscribe((invitation3) => {
185
+ const invitationCode = import_invitations.InvitationEncoder.encode(invitation3);
186
+ if (invitation3.state === import_invitations.Invitation.State.CONNECTING) {
187
+ import_log.log.info(JSON.stringify({
188
+ invitationCode,
189
+ authCode: invitation3.authCode
190
+ }), void 0, {
191
+ F: __dxlog_file,
192
+ L: 141,
193
+ S: void 0,
194
+ C: (f, a) => f(...a)
195
+ });
196
+ subscription.unsubscribe();
197
+ }
198
+ });
199
+ }
200
+ setInvitation(invitation2);
201
+ }, [
202
+ client
203
+ ]);
204
+ const onInvitationDone = (0, import_react2.useCallback)(() => {
205
+ setInvitation(void 0);
206
+ }, []);
207
+ if (invitation) {
208
+ return /* @__PURE__ */ import_react2.default.createElement(DeviceInvitationImpl, {
209
+ ...props,
210
+ invitation,
211
+ onInvitationCreate,
212
+ onInvitationDone
213
+ });
214
+ } else {
215
+ return /* @__PURE__ */ import_react2.default.createElement(InvitationSection, {
216
+ ...props,
217
+ onInvitationCreate,
218
+ onInvitationDone
219
+ });
220
+ }
221
+ } finally {
222
+ _effect.f();
223
+ }
224
+ };
225
+ var DeviceInvitationImpl = ({ invitation: invitationObservable, createInvitationUrl, onInvitationDone, onInvitationCreate }) => {
226
+ var _effect = (0, import_tracking.useSignals)();
227
+ try {
228
+ const invitation = (0, import_react_client.useMulticastObservable)(invitationObservable);
229
+ const url = createInvitationUrl(import_invitations.InvitationEncoder.encode(invitation));
230
+ (0, import_react2.useEffect)(() => {
231
+ if (invitation.state >= import_invitations.Invitation.State.SUCCESS) {
232
+ onInvitationDone();
233
+ }
234
+ }, [
235
+ invitation.state
236
+ ]);
237
+ return /* @__PURE__ */ import_react2.default.createElement(InvitationSection, {
238
+ ...invitation,
239
+ url,
240
+ onInvitationDone,
241
+ onInvitationCreate
242
+ });
243
+ } finally {
244
+ _effect.f();
245
+ }
246
+ };
247
+ var InvitationSection = ({ state = -1, authCode, invitationId = "never", url = "never", onInvitationDone = () => {
248
+ }, onInvitationCreate = () => {
249
+ } }) => {
250
+ var _effect = (0, import_tracking.useSignals)();
251
+ try {
252
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_DJKWB5L6.CLIENT_PLUGIN);
253
+ const activeView = state < 0 ? "init" : state >= import_invitations.Invitation.State.CANCELLED ? "complete" : state >= import_invitations.Invitation.State.READY_FOR_AUTHENTICATION && authCode ? "auth-code" : "qr-code";
254
+ return activeView === "init" ? /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement("p", {
255
+ className: "text-description mbe-2"
256
+ }, t("add device description")), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.IconButton, {
257
+ icon: "ph--plus--regular",
258
+ label: t("create device invitation label"),
259
+ disabled: state >= 0,
260
+ classNames: "is-full",
261
+ "data-testid": "devicesContainer.createInvitation",
262
+ onClick: onInvitationCreate
263
+ })) : /* @__PURE__ */ import_react2.default.createElement(import_react3.Viewport.Root, {
264
+ activeView
265
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react3.Viewport.Views, null, /* @__PURE__ */ import_react2.default.createElement(import_react3.Viewport.View, {
266
+ id: "init"
267
+ }), /* @__PURE__ */ import_react2.default.createElement(import_react3.Viewport.View, {
268
+ id: "complete"
269
+ }, /* @__PURE__ */ import_react2.default.createElement(InvitationComplete, {
270
+ statusValue: state
271
+ })), /* @__PURE__ */ import_react2.default.createElement(import_react3.Viewport.View, {
272
+ id: "auth-code"
273
+ }, /* @__PURE__ */ import_react2.default.createElement(InvitationAuthCode, {
274
+ id: invitationId,
275
+ code: authCode ?? "never",
276
+ onCancel: onInvitationDone
277
+ })), /* @__PURE__ */ import_react2.default.createElement(import_react3.Viewport.View, {
278
+ id: "qr-code"
279
+ }, /* @__PURE__ */ import_react2.default.createElement(InvitationQR, {
280
+ id: invitationId,
281
+ url,
282
+ onCancel: onInvitationDone
283
+ }))));
284
+ } finally {
285
+ _effect.f();
286
+ }
287
+ };
288
+ var InvitationQR = ({ id, url, onCancel }) => {
289
+ var _effect = (0, import_tracking.useSignals)();
290
+ try {
291
+ const { t } = (0, import_react_ui.useTranslation)("os");
292
+ const qrLabel = (0, import_react_ui.useId)("devices-container__qr-code");
293
+ const emoji = (0, import_util.hexToEmoji)(id);
294
+ return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement("p", {
295
+ className: "text-description"
296
+ }, t("qr code description", {
297
+ ns: import_chunk_DJKWB5L6.CLIENT_PLUGIN
298
+ })), /* @__PURE__ */ import_react2.default.createElement("div", {
299
+ role: "group",
300
+ className: "grid grid-cols-[1fr_min-content] mlb-2 gap-2"
301
+ }, /* @__PURE__ */ import_react2.default.createElement("div", {
302
+ role: "none",
303
+ className: "is-full aspect-square relative text-description"
304
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_qr_rounded.QR, {
305
+ rounding: 100,
306
+ backgroundColor: "transparent",
307
+ color: "currentColor",
308
+ "aria-labelledby": qrLabel,
309
+ errorCorrectionLevel: "Q",
310
+ cutout: true
311
+ }, url ?? "never"), /* @__PURE__ */ import_react2.default.createElement(import_react3.Centered, null, /* @__PURE__ */ import_react2.default.createElement(import_react3.Emoji, {
312
+ text: emoji
313
+ }))), /* @__PURE__ */ import_react2.default.createElement("span", {
314
+ id: qrLabel,
315
+ className: "sr-only"
316
+ }, t("qr label"))), /* @__PURE__ */ import_react2.default.createElement("div", {
317
+ className: "flex justify-center"
318
+ }, /* @__PURE__ */ import_react2.default.createElement("div", {
319
+ className: "flex gap-2"
320
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Clipboard.Button, {
321
+ value: url ?? "never"
322
+ }), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Button, {
323
+ variant: "ghost",
324
+ onClick: onCancel
325
+ }, t("cancel label")))));
326
+ } finally {
327
+ _effect.f();
328
+ }
329
+ };
330
+ var InvitationAuthCode = ({ id, code, onCancel }) => {
331
+ var _effect = (0, import_tracking.useSignals)();
332
+ try {
333
+ const { t } = (0, import_react_ui.useTranslation)("os");
334
+ const emoji = (0, import_util.hexToEmoji)(id);
335
+ return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement("p", {
336
+ className: "text-description"
337
+ }, t("auth other device emoji message")), emoji && /* @__PURE__ */ import_react2.default.createElement(import_react3.Emoji, {
338
+ text: emoji,
339
+ className: "mli-auto mlb-2 text-center"
340
+ }), /* @__PURE__ */ import_react2.default.createElement("p", {
341
+ className: "text-description"
342
+ }, t("auth code message")), /* @__PURE__ */ import_react2.default.createElement(import_react3.AuthCode, {
343
+ code,
344
+ large: true,
345
+ classNames: "mli-auto mlb-2 text-center grow"
346
+ }), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Button, {
347
+ variant: "ghost",
348
+ onClick: onCancel
349
+ }, t("cancel label")));
350
+ } finally {
351
+ _effect.f();
352
+ }
353
+ };
354
+ var InvitationComplete = ({ statusValue }) => {
355
+ var _effect = (0, import_tracking.useSignals)();
356
+ try {
357
+ return statusValue > 0 ? /* @__PURE__ */ import_react2.default.createElement(import_react.Check, {
358
+ className: (0, import_react_ui_theme.mx)("m-1.5", (0, import_react_ui_theme.getSize)(6))
359
+ }) : /* @__PURE__ */ import_react2.default.createElement(import_react.X, {
360
+ className: (0, import_react_ui_theme.mx)("m-1.5", (0, import_react_ui_theme.getSize)(6))
361
+ });
362
+ } finally {
363
+ _effect.f();
364
+ }
365
+ };
366
+ var JOIN_DIALOG = `${import_chunk_DJKWB5L6.CLIENT_PLUGIN}/JoinDialog`;
367
+ var JoinDialog = (props) => {
368
+ var _effect = (0, import_tracking2.useSignals)();
369
+ try {
370
+ const { dispatchPromise: dispatch } = (0, import_app_framework2.useIntentDispatcher)();
371
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_DJKWB5L6.CLIENT_PLUGIN);
372
+ const handleCancelResetStorage = (0, import_react4.useCallback)(() => dispatch((0, import_app_framework2.createIntent)(import_chunk_BL6EBWOS.ClientAction.ShareIdentity)), [
373
+ dispatch
374
+ ]);
375
+ const handleDone = (0, import_react4.useCallback)(async (result) => {
376
+ if (result?.identityKey) {
377
+ await Promise.all([
378
+ dispatch((0, import_app_framework2.createIntent)(import_app_framework2.LayoutAction.UpdateDialog, {
379
+ part: "dialog",
380
+ options: {
381
+ state: false
382
+ }
383
+ })),
384
+ dispatch((0, import_app_framework2.createIntent)(import_types.ObservabilityAction.SendEvent, {
385
+ name: props.initialDisposition === "recover-identity" ? "identity.recover" : "identity.join"
386
+ }))
387
+ ]);
388
+ }
389
+ }, [
390
+ dispatch
391
+ ]);
392
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Dialog.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Dialog.Title, {
393
+ classNames: "sr-only"
394
+ }, t("join space label", {
395
+ ns: "os"
396
+ })), /* @__PURE__ */ import_react4.default.createElement(import_react5.JoinPanel, {
397
+ mode: "halo-only",
398
+ ...props,
399
+ exitActionParent: /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Dialog.Close, {
400
+ asChild: true
401
+ }),
402
+ doneActionParent: /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Dialog.Close, {
403
+ asChild: true
404
+ }),
405
+ onCancelResetStorage: handleCancelResetStorage,
406
+ onDone: handleDone
407
+ }));
408
+ } finally {
409
+ _effect.f();
410
+ }
411
+ };
412
+ var getDefaultHueValue = (identity) => (0, import_util2.hexToHue)(identity?.identityKey.toHex() ?? "0");
413
+ var getDefaultEmojiValue = (identity) => (0, import_util2.hexToEmoji)(identity?.identityKey.toHex() ?? "0");
414
+ var getHueValue = (identity) => identity?.profile?.data?.hue || getDefaultHueValue(identity);
415
+ var getEmojiValue = (identity) => identity?.profile?.data?.emoji || getDefaultEmojiValue(identity);
416
+ var ProfileContainer = () => {
417
+ var _effect = (0, import_tracking3.useSignals)();
418
+ try {
419
+ const { t } = (0, import_react_ui3.useTranslation)(import_chunk_DJKWB5L6.CLIENT_PLUGIN);
420
+ const client = (0, import_react_client2.useClient)();
421
+ const identity = (0, import_halo2.useIdentity)();
422
+ const [displayName, setDisplayNameDirectly] = (0, import_react6.useState)(identity?.profile?.displayName ?? "");
423
+ const [emoji, setEmojiDirectly] = (0, import_react6.useState)(getEmojiValue(identity));
424
+ const [hue, setHueDirectly] = (0, import_react6.useState)(getHueValue(identity));
425
+ const updateProfile = (0, import_react6.useMemo)(() => (0, import_async.debounce)((profile) => client.halo.updateProfile({
426
+ displayName: profile.displayName,
427
+ data: {
428
+ emoji: profile.emoji,
429
+ hue: profile.hue
430
+ }
431
+ }), 2e3), []);
432
+ const handleSave = (0, import_react6.useCallback)((profile) => {
433
+ setDisplayNameDirectly(profile.displayName);
434
+ setEmojiDirectly(profile.emoji);
435
+ setHueDirectly(profile.hue);
436
+ updateProfile(profile);
437
+ }, [
438
+ identity
439
+ ]);
440
+ const values = (0, import_react6.useMemo)(() => ({
441
+ displayName,
442
+ emoji,
443
+ hue,
444
+ did: identity?.did
445
+ }), [
446
+ identity,
447
+ displayName,
448
+ emoji,
449
+ hue
450
+ ]);
451
+ const customElements = (0, import_react6.useMemo)(() => ({
452
+ displayName: ({ type, label, getValue, onValueChange }) => {
453
+ const handleChange = (0, import_react6.useCallback)(({ target: { value } }) => onValueChange(type, value), [
454
+ onValueChange,
455
+ type
456
+ ]);
457
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_ui_form2.ControlItemInput, {
458
+ title: label,
459
+ description: t("display name description")
460
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui3.Input.TextInput, {
461
+ value: getValue(),
462
+ onChange: handleChange,
463
+ placeholder: t("display name input placeholder"),
464
+ classNames: "min-is-64"
465
+ }));
466
+ },
467
+ emoji: ({ type, label, getValue, onValueChange }) => {
468
+ const handleChange = (0, import_react6.useCallback)((nextEmoji) => onValueChange(type, nextEmoji), [
469
+ onValueChange,
470
+ type
471
+ ]);
472
+ const handleEmojiReset = (0, import_react6.useCallback)(() => onValueChange(type, getDefaultEmojiValue(identity)), [
473
+ onValueChange,
474
+ type
475
+ ]);
476
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_ui_form2.ControlItem, {
477
+ title: label,
478
+ description: t("icon description")
479
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_pickers.EmojiPickerBlock, {
480
+ triggerVariant: "default",
481
+ emoji: getValue(),
482
+ onChangeEmoji: handleChange,
483
+ onClickClear: handleEmojiReset,
484
+ classNames: "justify-self-end"
485
+ }));
486
+ },
487
+ hue: ({ type, label, getValue, onValueChange }) => {
488
+ const handleChange = (0, import_react6.useCallback)((nextHue) => onValueChange(type, nextHue), [
489
+ onValueChange,
490
+ type
491
+ ]);
492
+ const handleHueReset = (0, import_react6.useCallback)(() => onValueChange(type, getDefaultHueValue(identity)), [
493
+ onValueChange,
494
+ type
495
+ ]);
496
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_ui_form2.ControlItem, {
497
+ title: label,
498
+ description: t("hue description")
499
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_pickers.HuePicker, {
500
+ value: getValue(),
501
+ onChange: handleChange,
502
+ onReset: handleHueReset,
503
+ classNames: "[--hue-preview-size:1.5rem] justify-self-end"
504
+ }));
505
+ },
506
+ // TODO(wittjosiah): We need text input annotations for disabled and copyable.
507
+ did: ({ label, getValue }) => {
508
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_ui_form2.ControlItemInput, {
509
+ title: label,
510
+ description: t("did description")
511
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui3.ButtonGroup, null, /* @__PURE__ */ import_react6.default.createElement(import_react_ui3.Input.TextInput, {
512
+ value: getValue(),
513
+ disabled: true,
514
+ classNames: "min-is-64"
515
+ }), /* @__PURE__ */ import_react6.default.createElement(import_react_ui3.Clipboard.IconButton, {
516
+ value: getValue() ?? ""
517
+ })));
518
+ }
519
+ }), [
520
+ t
521
+ ]);
522
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_ui_stack2.StackItem.Content, {
523
+ classNames: "block overflow-y-auto"
524
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_form2.ControlPage, null, /* @__PURE__ */ import_react6.default.createElement(import_react_ui3.Clipboard.Provider, null, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_form2.ControlSection, {
525
+ title: t("profile label"),
526
+ description: t("profile description")
527
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_form2.Form, {
528
+ schema: ProfileSchema,
529
+ values,
530
+ autoSave: true,
531
+ onSave: handleSave,
532
+ Custom: customElements,
533
+ classNames: 'p-0 container-max-width [&_[role="form"]]:grid [&_[role="form"]]:grid-cols-1 md:[&_[role="form"]]:grid-cols-[1fr_min-content] [&_[role="form"]]:gap-4'
534
+ })))));
535
+ } finally {
536
+ _effect.f();
537
+ }
538
+ };
539
+ var ProfileSchema = import_effect.Schema.Struct({
540
+ displayName: import_effect.Schema.String.annotations({
541
+ title: "Display name"
542
+ }),
543
+ emoji: import_effect.Schema.String.annotations({
544
+ title: "Avatar"
545
+ }),
546
+ hue: import_effect.Schema.String.annotations({
547
+ title: "Color"
548
+ }),
549
+ did: import_effect.Schema.String.annotations({
550
+ title: "DID"
551
+ })
552
+ });
553
+ var RECOVERY_CODE_DIALOG = `${import_chunk_DJKWB5L6.CLIENT_PLUGIN}/RecoveryCodeDialog`;
554
+ var RecoveryCodeDialog = ({ code }) => {
555
+ var _effect = (0, import_tracking4.useSignals)();
556
+ try {
557
+ const { t } = (0, import_react_ui4.useTranslation)(import_chunk_DJKWB5L6.CLIENT_PLUGIN);
558
+ const [confirmation, setConfirmation] = (0, import_react7.useState)(false);
559
+ const handleConfirmation = (0, import_react7.useCallback)((checked) => setConfirmation(checked), []);
560
+ return /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.AlertDialog.Content, {
561
+ classNames: "bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden"
562
+ }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.AlertDialog.Title, null, t("recovery code dialog title")), /* @__PURE__ */ import_react7.default.createElement("p", {
563
+ className: "py-4"
564
+ }, t("recovery code dialog description")), /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Clipboard.Provider, null, /* @__PURE__ */ import_react7.default.createElement(Code, {
565
+ code
566
+ })), /* @__PURE__ */ import_react7.default.createElement("div", {
567
+ className: "flex flex-col py-4 gap-2"
568
+ }, /* @__PURE__ */ import_react7.default.createElement("p", null, t("recovery code dialog warning 1")), /* @__PURE__ */ import_react7.default.createElement("p", null, t("recovery code dialog warning 2"))), /* @__PURE__ */ import_react7.default.createElement("div", {
569
+ className: "flex items-center gap-2 pbe-4"
570
+ }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Input.Root, null, /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Input.Checkbox, {
571
+ "data-testid": "recoveryCode.confirm",
572
+ checked: confirmation,
573
+ onCheckedChange: handleConfirmation
574
+ }), /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Input.Label, null, t("recovery code confirmation label")))), /* @__PURE__ */ import_react7.default.createElement("div", {
575
+ className: "flex justify-end"
576
+ }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.AlertDialog.Action, {
577
+ asChild: true
578
+ }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Button, {
579
+ "data-testid": "recoveryCode.continue",
580
+ variant: "primary",
581
+ disabled: !confirmation
582
+ }, t("continue label")))));
583
+ } finally {
584
+ _effect.f();
585
+ }
586
+ };
587
+ var Code = ({ code }) => {
588
+ var _effect = (0, import_tracking4.useSignals)();
589
+ try {
590
+ const words = code.split(" ");
591
+ return /* @__PURE__ */ import_react7.default.createElement("div", {
592
+ className: "relative p-2 border border-separator rounded group"
593
+ }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Clipboard.IconButton, {
594
+ value: code,
595
+ classNames: "absolute top-2 right-2 invisible group-hover:visible"
596
+ }), /* @__PURE__ */ import_react7.default.createElement("div", {
597
+ className: "grid grid-cols-4"
598
+ }, words.map((word, i) => /* @__PURE__ */ import_react7.default.createElement("div", {
599
+ key: i,
600
+ className: "flex items-center p-2 gap-2"
601
+ }, /* @__PURE__ */ import_react7.default.createElement("div", {
602
+ className: "w-4 text-xs text-center text-subdued"
603
+ }, i + 1), /* @__PURE__ */ import_react7.default.createElement("div", {
604
+ className: "text-sm"
605
+ }, word)))));
606
+ } finally {
607
+ _effect.f();
608
+ }
609
+ };
610
+ var MANAGE_CREDENTIALS_DIALOG = `${import_chunk_DJKWB5L6.CLIENT_PLUGIN}/ManageCredentialsDialog`;
611
+ var RecoveryCredentialsContainer = () => {
612
+ var _effect = (0, import_tracking5.useSignals)();
613
+ try {
614
+ const { t } = (0, import_react_ui5.useTranslation)(import_chunk_DJKWB5L6.CLIENT_PLUGIN);
615
+ const { dispatchPromise: dispatch } = (0, import_app_framework3.useIntentDispatcher)();
616
+ const credentials = (0, import_halo3.useCredentials)();
617
+ const recoveryCredentials = credentials.filter((credential) => credential.subject.assertion["@type"] === "dxos.halo.credentials.IdentityRecovery");
618
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_ui_stack3.StackItem.Content, {
619
+ classNames: "block overflow-y-auto"
620
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui_form3.ControlPage, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui_form3.ControlSection, {
621
+ title: t("recovery setup dialog title"),
622
+ description: t("recovery setup dialog description")
623
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui_form3.ControlGroup, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui_form3.ControlItem, {
624
+ title: t("create passkey label"),
625
+ description: t("create passkey description")
626
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.IconButton, {
627
+ label: t("create passkey label"),
628
+ icon: "ph--key--duotone",
629
+ variant: "primary",
630
+ size: 5,
631
+ onClick: () => dispatch((0, import_app_framework3.createIntent)(import_chunk_BL6EBWOS.ClientAction.CreatePasskey))
632
+ })), /* @__PURE__ */ import_react8.default.createElement(import_react_ui_form3.ControlItem, {
633
+ title: t("create recovery code label"),
634
+ description: t("create recovery code description")
635
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.IconButton, {
636
+ label: t("create recovery code label"),
637
+ icon: "ph--receipt--duotone",
638
+ variant: "default",
639
+ size: 5,
640
+ onClick: () => dispatch((0, import_app_framework3.createIntent)(import_chunk_BL6EBWOS.ClientAction.CreateRecoveryCode))
641
+ })))), /* @__PURE__ */ import_react8.default.createElement(import_react_ui_form3.ControlSection, {
642
+ title: t("credentials list label")
643
+ }, recoveryCredentials.length < 1 ? /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Message.Root, {
644
+ valence: "error",
645
+ className: "container-max-width"
646
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Message.Title, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Icon, {
647
+ icon: "ph--shield-warning--duotone",
648
+ size: 5,
649
+ classNames: "inline-block align-top mbs-px mie-1"
650
+ }), t("no credentials title")), /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Message.Body, null, t("no credentials message"))) : /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.List, {
651
+ classNames: "container-max-width pli-2"
652
+ }, recoveryCredentials.map((credential) => /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.ListItem.Root, {
653
+ key: credential.id?.toHex()
654
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.ListItem.Endcap, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Icon, {
655
+ icon: "ph--key--regular",
656
+ size: 5
657
+ })), /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.ListItem.Heading, null, credential.issuanceDate.toLocaleString())))))));
658
+ } finally {
659
+ _effect.f();
660
+ }
661
+ };
662
+ var RESET_DIALOG = `${import_chunk_DJKWB5L6.CLIENT_PLUGIN}/ResetDialog`;
663
+ var ResetDialog = ({ mode, onReset }) => {
664
+ var _effect = (0, import_tracking6.useSignals)();
665
+ try {
666
+ const { t } = (0, import_react_ui6.useTranslation)(import_chunk_DJKWB5L6.CLIENT_PLUGIN);
667
+ const { dispatchPromise: dispatch } = (0, import_app_framework4.useIntentDispatcher)();
668
+ const client = (0, import_react_client3.useClient)();
669
+ const handleReset = (0, import_react9.useCallback)(async () => {
670
+ await client.reset();
671
+ const target = mode === "join new identity" ? "deviceInvitation" : mode === "recover" ? "recoverIdentity" : void 0;
672
+ await onReset?.({
673
+ target
674
+ });
675
+ }, [
676
+ dispatch,
677
+ client,
678
+ mode,
679
+ onReset
680
+ ]);
681
+ const handleCancel = (0, import_react9.useCallback)(() => {
682
+ void dispatch((0, import_app_framework4.createIntent)(import_app_framework4.LayoutAction.UpdateDialog, {
683
+ part: "dialog",
684
+ options: {
685
+ state: false
686
+ }
687
+ }));
688
+ }, [
689
+ dispatch
690
+ ]);
691
+ return /* @__PURE__ */ import_react9.default.createElement(import_react_ui6.Dialog.Content, {
692
+ classNames: "bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden"
693
+ }, /* @__PURE__ */ import_react9.default.createElement(import_react_ui6.Dialog.Title, {
694
+ classNames: "sr-only"
695
+ }, t("reset dialog title")), /* @__PURE__ */ import_react9.default.createElement(import_react_ui6.Dialog.Description, {
696
+ classNames: "sr-only"
697
+ }, t("reset dialog description")), /* @__PURE__ */ import_react9.default.createElement(import_react10.ConfirmReset, {
698
+ active: true,
699
+ mode,
700
+ onConfirm: handleReset,
701
+ onCancel: handleCancel
702
+ }));
703
+ } finally {
704
+ _effect.f();
705
+ }
706
+ };
707
+ // Annotate the CommonJS export names for ESM import in node:
708
+ 0 && (module.exports = {
709
+ DevicesContainer,
710
+ JOIN_DIALOG,
711
+ JoinDialog,
712
+ ProfileContainer,
713
+ RECOVERY_CODE_DIALOG,
714
+ RESET_DIALOG,
715
+ RecoveryCodeDialog,
716
+ RecoveryCredentialsContainer,
717
+ ResetDialog
718
+ });
719
+ //# sourceMappingURL=chunk-73HHNJMV.cjs.map