@datatechsolutions/ui 3.3.0 → 3.5.0
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.
- package/dist/astrlabe/index.js +113 -113
- package/dist/astrlabe/index.mjs +6 -6
- package/dist/astrlabe/workflow-canvas.js +6 -6
- package/dist/astrlabe/workflow-canvas.mjs +5 -5
- package/dist/brand/index.js +0 -14
- package/dist/brand/index.js.map +1 -1
- package/dist/brand/index.mjs +0 -14
- package/dist/brand/index.mjs.map +1 -1
- package/dist/{chunk-2WXRRQM3.mjs → chunk-2MJAHST4.mjs} +554 -516
- package/dist/chunk-2MJAHST4.mjs.map +1 -0
- package/dist/{chunk-FAGDZEKM.js → chunk-2OZZH2IO.js} +2 -2
- package/dist/chunk-2OZZH2IO.js.map +1 -0
- package/dist/{chunk-SYNVNTLJ.mjs → chunk-3AY5HIQ6.mjs} +2 -2
- package/dist/chunk-3AY5HIQ6.mjs.map +1 -0
- package/dist/{chunk-O6M3KDGT.mjs → chunk-3OLYSMI5.mjs} +41 -7
- package/dist/chunk-3OLYSMI5.mjs.map +1 -0
- package/dist/{chunk-GIQXB3BG.mjs → chunk-4PFU6A2B.mjs} +3 -3
- package/dist/{chunk-GIQXB3BG.mjs.map → chunk-4PFU6A2B.mjs.map} +1 -1
- package/dist/{chunk-3ZUMJTDT.mjs → chunk-5BEVTOZV.mjs} +4 -5
- package/dist/{chunk-3JJWPOK6.js.map → chunk-5BEVTOZV.mjs.map} +1 -1
- package/dist/{chunk-3JJWPOK6.js → chunk-5I7F7KZ6.js} +10 -11
- package/dist/chunk-5I7F7KZ6.js.map +1 -0
- package/dist/{chunk-BR2GAZKG.mjs → chunk-6V3DUBOZ.mjs} +7 -7
- package/dist/{chunk-BR2GAZKG.mjs.map → chunk-6V3DUBOZ.mjs.map} +1 -1
- package/dist/{chunk-5GDKCFM5.mjs → chunk-6W7VTZG6.mjs} +3 -3
- package/dist/{chunk-5GDKCFM5.mjs.map → chunk-6W7VTZG6.mjs.map} +1 -1
- package/dist/{chunk-IJAKZHXX.js → chunk-74MHWEDC.js} +684 -645
- package/dist/chunk-74MHWEDC.js.map +1 -0
- package/dist/{chunk-IRPS5UCS.mjs → chunk-7CEZB3ZD.mjs} +3 -3
- package/dist/{chunk-IRPS5UCS.mjs.map → chunk-7CEZB3ZD.mjs.map} +1 -1
- package/dist/{chunk-UDDZTTLO.mjs → chunk-7UHV6A4C.mjs} +6 -7
- package/dist/chunk-7UHV6A4C.mjs.map +1 -0
- package/dist/{chunk-ZM5MVWIT.js → chunk-A7FI4K7Z.js} +5 -6
- package/dist/chunk-A7FI4K7Z.js.map +1 -0
- package/dist/{chunk-MWPTSBAI.js → chunk-AVM53A3Y.js} +63 -29
- package/dist/chunk-AVM53A3Y.js.map +1 -0
- package/dist/{chunk-I2NZGVBG.js → chunk-AWDH6WNA.js} +1214 -5396
- package/dist/chunk-AWDH6WNA.js.map +1 -0
- package/dist/{chunk-ZJPNP2YW.mjs → chunk-BUDZNAKL.mjs} +2 -2
- package/dist/chunk-BUDZNAKL.mjs.map +1 -0
- package/dist/{chunk-OCELRSLO.js → chunk-BVXATTTA.js} +4 -4
- package/dist/{chunk-OCELRSLO.js.map → chunk-BVXATTTA.js.map} +1 -1
- package/dist/{chunk-W5OEBO6E.js → chunk-C4NRF2G2.js} +13 -14
- package/dist/chunk-C4NRF2G2.js.map +1 -0
- package/dist/{chunk-JSNRCYSO.js → chunk-CY2MBKVG.js} +4 -4
- package/dist/{chunk-JSNRCYSO.js.map → chunk-CY2MBKVG.js.map} +1 -1
- package/dist/{chunk-ZL6C2ZAF.js → chunk-FK3WDELF.js} +67 -67
- package/dist/{chunk-ZL6C2ZAF.js.map → chunk-FK3WDELF.js.map} +1 -1
- package/dist/{chunk-MVBIAXVN.mjs → chunk-IOEQ2GET.mjs} +14 -11
- package/dist/chunk-IOEQ2GET.mjs.map +1 -0
- package/dist/{chunk-AOUUZ52N.js → chunk-NCDBNGIB.js} +85 -86
- package/dist/chunk-NCDBNGIB.js.map +1 -0
- package/dist/{chunk-B67DP7MI.mjs → chunk-NJ5RVWLA.mjs} +4 -4
- package/dist/{chunk-B67DP7MI.mjs.map → chunk-NJ5RVWLA.mjs.map} +1 -1
- package/dist/{chunk-HDCUWUNH.js → chunk-NKXQYFS7.js} +28 -27
- package/dist/chunk-NKXQYFS7.js.map +1 -0
- package/dist/{chunk-JN6IL6OH.mjs → chunk-NOHHZ6FM.mjs} +1171 -5316
- package/dist/chunk-NOHHZ6FM.mjs.map +1 -0
- package/dist/{chunk-PCYL4MII.mjs → chunk-OASC7NYV.mjs} +156 -314
- package/dist/chunk-OASC7NYV.mjs.map +1 -0
- package/dist/{chunk-RXZNACMI.js → chunk-P43PX75J.js} +33 -33
- package/dist/{chunk-RXZNACMI.js.map → chunk-P43PX75J.js.map} +1 -1
- package/dist/{chunk-OL73LBX5.mjs → chunk-QLFSJ6HK.mjs} +3 -4
- package/dist/chunk-QLFSJ6HK.mjs.map +1 -0
- package/dist/{chunk-LEKZUS6N.mjs → chunk-QPSHM2JQ.mjs} +4 -5
- package/dist/chunk-QPSHM2JQ.mjs.map +1 -0
- package/dist/{chunk-NJFRJ6YD.js → chunk-QSMPKL27.js} +225 -384
- package/dist/chunk-QSMPKL27.js.map +1 -0
- package/dist/{chunk-ZV5EZXXO.mjs → chunk-RHRJXK5R.mjs} +3 -3
- package/dist/{chunk-ZV5EZXXO.mjs.map → chunk-RHRJXK5R.mjs.map} +1 -1
- package/dist/{chunk-F54Q2YJY.js → chunk-SY4MUT5V.js} +7 -7
- package/dist/{chunk-F54Q2YJY.js.map → chunk-SY4MUT5V.js.map} +1 -1
- package/dist/{chunk-5RM6NGZ6.mjs → chunk-UHMAKUON.mjs} +3 -3
- package/dist/{chunk-5RM6NGZ6.mjs.map → chunk-UHMAKUON.mjs.map} +1 -1
- package/dist/{chunk-TIJJHW2Z.js → chunk-V5VBYOF5.js} +36 -36
- package/dist/{chunk-TIJJHW2Z.js.map → chunk-V5VBYOF5.js.map} +1 -1
- package/dist/{chunk-KR2X2WHJ.js → chunk-VMGNQFRO.js} +53 -53
- package/dist/{chunk-KR2X2WHJ.js.map → chunk-VMGNQFRO.js.map} +1 -1
- package/dist/{chunk-HZ4LOVHM.js → chunk-VY52Y5GC.js} +2 -2
- package/dist/chunk-VY52Y5GC.js.map +1 -0
- package/dist/{chunk-TVMLV675.js → chunk-Z7VY5M4T.js} +98 -95
- package/dist/chunk-Z7VY5M4T.js.map +1 -0
- package/dist/{chunk-R4TQWXNG.mjs → chunk-ZM2Q2SMC.mjs} +6 -5
- package/dist/chunk-ZM2Q2SMC.mjs.map +1 -0
- package/dist/index.js +744 -904
- package/dist/index.mjs +4 -4
- package/dist/platform/admin/index.js +13 -13
- package/dist/platform/admin/index.mjs +7 -7
- package/dist/platform/agents-workspace.js +9 -9
- package/dist/platform/agents-workspace.mjs +8 -8
- package/dist/platform/app-shell.js +6 -6
- package/dist/platform/app-shell.mjs +5 -5
- package/dist/platform/auth/index.js +30 -30
- package/dist/platform/auth/index.mjs +7 -7
- package/dist/platform/billing/index.js +6 -6
- package/dist/platform/billing/index.mjs +5 -5
- package/dist/platform/impersonation/index.js +6 -6
- package/dist/platform/impersonation/index.mjs +5 -5
- package/dist/platform/index.js +102 -4812
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/index.mjs +24 -4729
- package/dist/platform/index.mjs.map +1 -1
- package/dist/platform/pages/index.js +320 -204
- package/dist/platform/pages/index.js.map +1 -1
- package/dist/platform/pages/index.mjs +146 -30
- package/dist/platform/pages/index.mjs.map +1 -1
- package/dist/platform/rbac.js +2 -2
- package/dist/platform/rbac.mjs +1 -1
- package/dist/platform/settings/index.js +10 -10
- package/dist/platform/settings/index.mjs +9 -9
- package/dist/platform/utils/index.js +3 -3
- package/dist/platform/utils/index.js.map +1 -1
- package/dist/platform/utils/index.mjs +1 -1
- package/dist/platform/utils/index.mjs.map +1 -1
- package/dist/platform/workflow-api-client.js +62 -62
- package/dist/platform/workflow-api-client.mjs +2 -2
- package/dist/platform/workflow-canvas-shell.js +7 -7
- package/dist/platform/workflow-canvas-shell.mjs +6 -6
- package/package.json +15 -5
- package/src/styles/liquid-glass.css +283 -2
- package/dist/astrlabe/contracts.d.mts +0 -517
- package/dist/astrlabe/contracts.d.ts +0 -517
- package/dist/astrlabe/graph-node.d.mts +0 -28
- package/dist/astrlabe/graph-node.d.ts +0 -28
- package/dist/astrlabe/index.d.mts +0 -751
- package/dist/astrlabe/index.d.ts +0 -751
- package/dist/astrlabe/utils.d.mts +0 -60
- package/dist/astrlabe/utils.d.ts +0 -60
- package/dist/astrlabe/workflow-canvas.d.mts +0 -69
- package/dist/astrlabe/workflow-canvas.d.ts +0 -69
- package/dist/astrlabe/workflow-preview-canvas.d.mts +0 -10
- package/dist/astrlabe/workflow-preview-canvas.d.ts +0 -10
- package/dist/billing-panel-DsHhhJqG.d.mts +0 -18
- package/dist/billing-panel-DsHhhJqG.d.ts +0 -18
- package/dist/brand/index.d.mts +0 -85
- package/dist/brand/index.d.ts +0 -85
- package/dist/chunk-2WXRRQM3.mjs.map +0 -1
- package/dist/chunk-3ZUMJTDT.mjs.map +0 -1
- package/dist/chunk-AOUUZ52N.js.map +0 -1
- package/dist/chunk-FAGDZEKM.js.map +0 -1
- package/dist/chunk-HDCUWUNH.js.map +0 -1
- package/dist/chunk-HZ4LOVHM.js.map +0 -1
- package/dist/chunk-I2NZGVBG.js.map +0 -1
- package/dist/chunk-IJAKZHXX.js.map +0 -1
- package/dist/chunk-JN6IL6OH.mjs.map +0 -1
- package/dist/chunk-LEKZUS6N.mjs.map +0 -1
- package/dist/chunk-MVBIAXVN.mjs.map +0 -1
- package/dist/chunk-MWPTSBAI.js.map +0 -1
- package/dist/chunk-NJFRJ6YD.js.map +0 -1
- package/dist/chunk-O6M3KDGT.mjs.map +0 -1
- package/dist/chunk-OL73LBX5.mjs.map +0 -1
- package/dist/chunk-PCYL4MII.mjs.map +0 -1
- package/dist/chunk-R4TQWXNG.mjs.map +0 -1
- package/dist/chunk-SYNVNTLJ.mjs.map +0 -1
- package/dist/chunk-TVMLV675.js.map +0 -1
- package/dist/chunk-UDDZTTLO.mjs.map +0 -1
- package/dist/chunk-W5OEBO6E.js.map +0 -1
- package/dist/chunk-ZJPNP2YW.mjs.map +0 -1
- package/dist/chunk-ZM5MVWIT.js.map +0 -1
- package/dist/dynamic-island-confirm-BKsZkAEP.d.mts +0 -17
- package/dist/dynamic-island-confirm-BKsZkAEP.d.ts +0 -17
- package/dist/index-CoB18TbG.d.ts +0 -215
- package/dist/index-VI9gyJXl.d.mts +0 -215
- package/dist/index.d.mts +0 -5412
- package/dist/index.d.ts +0 -5412
- package/dist/layout-engine-YZcVr20M.d.mts +0 -19
- package/dist/layout-engine-YZcVr20M.d.ts +0 -19
- package/dist/lib/i18n-context.d.mts +0 -36
- package/dist/lib/i18n-context.d.ts +0 -36
- package/dist/lib/router-context.d.mts +0 -35
- package/dist/lib/router-context.d.ts +0 -35
- package/dist/navigation-BiWVffAN.d.mts +0 -49
- package/dist/navigation-BiWVffAN.d.ts +0 -49
- package/dist/platform/admin/index.d.mts +0 -17
- package/dist/platform/admin/index.d.ts +0 -17
- package/dist/platform/agents-workspace.d.mts +0 -19
- package/dist/platform/agents-workspace.d.ts +0 -19
- package/dist/platform/app-shell.d.mts +0 -58
- package/dist/platform/app-shell.d.ts +0 -58
- package/dist/platform/auth/index.d.mts +0 -73
- package/dist/platform/auth/index.d.ts +0 -73
- package/dist/platform/billing/index.d.mts +0 -29
- package/dist/platform/billing/index.d.ts +0 -29
- package/dist/platform/impersonation/index.d.mts +0 -19
- package/dist/platform/impersonation/index.d.ts +0 -19
- package/dist/platform/index.d.mts +0 -224
- package/dist/platform/index.d.ts +0 -224
- package/dist/platform/pages/index.d.mts +0 -432
- package/dist/platform/pages/index.d.ts +0 -432
- package/dist/platform/rbac.d.mts +0 -41
- package/dist/platform/rbac.d.ts +0 -41
- package/dist/platform/settings/index.d.mts +0 -31
- package/dist/platform/settings/index.d.ts +0 -31
- package/dist/platform/telemetry/index.d.mts +0 -51
- package/dist/platform/telemetry/index.d.ts +0 -51
- package/dist/platform/utils/index.d.mts +0 -32
- package/dist/platform/utils/index.d.ts +0 -32
- package/dist/platform/windsock-admin-client.d.mts +0 -57
- package/dist/platform/windsock-admin-client.d.ts +0 -57
- package/dist/platform/workflow-api-client.d.mts +0 -6
- package/dist/platform/workflow-api-client.d.ts +0 -6
- package/dist/platform/workflow-canvas-shell.d.mts +0 -18
- package/dist/platform/workflow-canvas-shell.d.ts +0 -18
- package/dist/rule-form-BYJzyork.d.mts +0 -128
- package/dist/rule-form-BYJzyork.d.ts +0 -128
- package/dist/workflow-api-client-BKD8OfP_.d.ts +0 -468
- package/dist/workflow-api-client-DoYj7nHz.d.mts +0 -468
- package/dist/workflow-store-o17I6L6A.d.ts +0 -79
- package/dist/workflow-store-ppVHdMZi.d.mts +0 -79
- package/src/brand/logos/kori-icon.svg +0 -45
- package/src/brand/logos/kori-logo-dark.svg +0 -40
- package/src/brand/logos/kori-logo.svg +0 -43
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkCY2MBKVG_js = require('./chunk-CY2MBKVG.js');
|
|
5
|
+
var chunkAWDH6WNA_js = require('./chunk-AWDH6WNA.js');
|
|
6
6
|
var chunkUZ3CMNUJ_js = require('./chunk-UZ3CMNUJ.js');
|
|
7
7
|
var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
|
|
8
8
|
var react = require('react');
|
|
9
9
|
var outline = require('@heroicons/react/24/outline');
|
|
10
|
-
var client = require('@datatechsolutions/windsock/client');
|
|
11
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
12
11
|
var solid = require('@heroicons/react/20/solid');
|
|
13
12
|
var sharedI18n = require('@datatechsolutions/shared-domain/i18n');
|
|
@@ -40,7 +39,7 @@ function MfaSetup({
|
|
|
40
39
|
onVerifySetup
|
|
41
40
|
}) {
|
|
42
41
|
const t = chunkYXN2K77G_js.useTranslations("windsock");
|
|
43
|
-
const { client
|
|
42
|
+
const { client } = chunkAWDH6WNA_js.useAuth();
|
|
44
43
|
const setupSteps = [
|
|
45
44
|
{
|
|
46
45
|
id: "method",
|
|
@@ -82,7 +81,7 @@ function MfaSetup({
|
|
|
82
81
|
setSecret(result.secret);
|
|
83
82
|
setQrCodeUri(result.qrCodeUri);
|
|
84
83
|
} else {
|
|
85
|
-
const result = await client
|
|
84
|
+
const result = await client.generateMfaSecret();
|
|
86
85
|
setSecret(result.secret);
|
|
87
86
|
setQrCodeUri(result.qrCode);
|
|
88
87
|
setBackupCodes(result.backupCodes);
|
|
@@ -96,7 +95,7 @@ function MfaSetup({
|
|
|
96
95
|
chunkUZ3CMNUJ_js.triggerHaptic("light");
|
|
97
96
|
setCurrentStep(step);
|
|
98
97
|
},
|
|
99
|
-
[currentStep, onGenerateSecret, client
|
|
98
|
+
[currentStep, onGenerateSecret, client]
|
|
100
99
|
);
|
|
101
100
|
const handleMethodSelect = react.useCallback((method) => {
|
|
102
101
|
chunkUZ3CMNUJ_js.triggerHaptic("light");
|
|
@@ -120,7 +119,7 @@ function MfaSetup({
|
|
|
120
119
|
setVerifyError(t("mfa.setup.errorInvalidCode"));
|
|
121
120
|
}
|
|
122
121
|
} else {
|
|
123
|
-
const result = await client
|
|
122
|
+
const result = await client.verifyMfaSetup(code);
|
|
124
123
|
if (result.success) {
|
|
125
124
|
chunkUZ3CMNUJ_js.triggerHaptic("success");
|
|
126
125
|
setCurrentStep(3);
|
|
@@ -136,7 +135,7 @@ function MfaSetup({
|
|
|
136
135
|
setIsLoading(false);
|
|
137
136
|
}
|
|
138
137
|
},
|
|
139
|
-
[onVerifySetup, client
|
|
138
|
+
[onVerifySetup, client, t]
|
|
140
139
|
);
|
|
141
140
|
const handleSubmit = react.useCallback(() => {
|
|
142
141
|
chunkUZ3CMNUJ_js.triggerHaptic("success");
|
|
@@ -162,7 +161,7 @@ function MfaSetup({
|
|
|
162
161
|
}
|
|
163
162
|
})();
|
|
164
163
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
165
|
-
|
|
164
|
+
chunkAWDH6WNA_js.StepFormPage,
|
|
166
165
|
{
|
|
167
166
|
title: t("mfa.setup.title"),
|
|
168
167
|
subtitle: enforcement === "required" ? t("mfa.setup.subtitleRequired") : t("mfa.setup.subtitleOptional"),
|
|
@@ -179,7 +178,7 @@ function MfaSetup({
|
|
|
179
178
|
canAdvance,
|
|
180
179
|
children: [
|
|
181
180
|
currentStep === 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
182
|
-
|
|
181
|
+
chunkAWDH6WNA_js.OptionGrid,
|
|
183
182
|
{
|
|
184
183
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { className: "h-4 w-4" }),
|
|
185
184
|
title: t("mfa.setup.methodGridTitle"),
|
|
@@ -195,7 +194,7 @@ function MfaSetup({
|
|
|
195
194
|
columns: 2
|
|
196
195
|
}
|
|
197
196
|
),
|
|
198
|
-
currentStep === 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4", children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center py-8", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
197
|
+
currentStep === 1 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4", children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center py-8", children: /* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.Spinner, {}) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
199
198
|
qrCodeUri && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-xl bg-white p-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
200
199
|
"img",
|
|
201
200
|
{
|
|
@@ -211,7 +210,7 @@ function MfaSetup({
|
|
|
211
210
|
] }) }),
|
|
212
211
|
currentStep === 2 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
213
212
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
214
|
-
|
|
213
|
+
chunkCY2MBKVG_js.OtpInput,
|
|
215
214
|
{
|
|
216
215
|
value: verifyCode,
|
|
217
216
|
onChange: setVerifyCode,
|
|
@@ -221,18 +220,18 @@ function MfaSetup({
|
|
|
221
220
|
autoFocus: true
|
|
222
221
|
}
|
|
223
222
|
),
|
|
224
|
-
isLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
223
|
+
isLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.Spinner, {}) })
|
|
225
224
|
] }),
|
|
226
225
|
currentStep === 3 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
227
226
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
228
|
-
|
|
227
|
+
chunkCY2MBKVG_js.BackupCodeGrid,
|
|
229
228
|
{
|
|
230
229
|
codes: backupCodes,
|
|
231
230
|
revealed: true
|
|
232
231
|
}
|
|
233
232
|
),
|
|
234
233
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
235
|
-
|
|
234
|
+
chunkAWDH6WNA_js.FormCheckbox,
|
|
236
235
|
{
|
|
237
236
|
label: t("mfa.setup.backupCodesSavedConfirm"),
|
|
238
237
|
checked: savedBackupCodes,
|
|
@@ -253,7 +252,7 @@ function MfaManage({
|
|
|
253
252
|
}) {
|
|
254
253
|
const t = chunkYXN2K77G_js.useTranslations("windsock");
|
|
255
254
|
const format = chunkYXN2K77G_js.useFormatter();
|
|
256
|
-
const { client
|
|
255
|
+
const { client } = chunkAWDH6WNA_js.useAuth();
|
|
257
256
|
const [isBackupSheetOpen, setIsBackupSheetOpen] = react.useState(false);
|
|
258
257
|
const [newBackupCodes, setNewBackupCodes] = react.useState([]);
|
|
259
258
|
const [isRegenerating, setIsRegenerating] = react.useState(false);
|
|
@@ -265,14 +264,14 @@ function MfaManage({
|
|
|
265
264
|
chunkUZ3CMNUJ_js.triggerHaptic("medium");
|
|
266
265
|
setIsRegenerating(true);
|
|
267
266
|
try {
|
|
268
|
-
const codes = onRegenerateBackupCodes ? await onRegenerateBackupCodes() : await client
|
|
267
|
+
const codes = onRegenerateBackupCodes ? await onRegenerateBackupCodes() : await client.regenerateBackupCodes();
|
|
269
268
|
setNewBackupCodes(codes);
|
|
270
269
|
setIsBackupSheetOpen(true);
|
|
271
270
|
} catch {
|
|
272
271
|
} finally {
|
|
273
272
|
setIsRegenerating(false);
|
|
274
273
|
}
|
|
275
|
-
}, [onRegenerateBackupCodes, client
|
|
274
|
+
}, [onRegenerateBackupCodes, client]);
|
|
276
275
|
const handleCloseBackupSheet = react.useCallback(() => {
|
|
277
276
|
chunkUZ3CMNUJ_js.triggerHaptic("light");
|
|
278
277
|
setIsBackupSheetOpen(false);
|
|
@@ -297,7 +296,7 @@ function MfaManage({
|
|
|
297
296
|
if (onDisable) {
|
|
298
297
|
onDisable();
|
|
299
298
|
} else {
|
|
300
|
-
const result = await client
|
|
299
|
+
const result = await client.disableMfa(disablePassword);
|
|
301
300
|
if (!result.success) {
|
|
302
301
|
setDisableError(result.error ?? t("mfa.manage.disableError"));
|
|
303
302
|
chunkUZ3CMNUJ_js.triggerHaptic("error");
|
|
@@ -312,7 +311,7 @@ function MfaManage({
|
|
|
312
311
|
} finally {
|
|
313
312
|
setIsDisabling(false);
|
|
314
313
|
}
|
|
315
|
-
}, [disablePassword, onDisable, client
|
|
314
|
+
}, [disablePassword, onDisable, client, t]);
|
|
316
315
|
const handleCancelDisable = react.useCallback(() => {
|
|
317
316
|
chunkUZ3CMNUJ_js.triggerHaptic("light");
|
|
318
317
|
setIsConfirmDisableOpen(false);
|
|
@@ -325,20 +324,20 @@ function MfaManage({
|
|
|
325
324
|
}, [onEnroll]);
|
|
326
325
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
327
326
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
328
|
-
|
|
327
|
+
chunkAWDH6WNA_js.SectionCard,
|
|
329
328
|
{
|
|
330
329
|
header: {
|
|
331
330
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { className: "h-5 w-5 text-white" }),
|
|
332
331
|
title: t("mfa.manage.title"),
|
|
333
332
|
subtitle: t("mfa.manage.subtitle"),
|
|
334
333
|
gradient: "from-emerald-500 via-teal-500 to-cyan-500",
|
|
335
|
-
rightContent: mfaEnabled ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
334
|
+
rightContent: mfaEnabled ? /* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.StatusBadge, { status: "active", label: t("mfa.manage.statusEnabled"), size: "sm" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.StatusBadge, { status: "inactive", label: t("mfa.manage.statusDisabled"), size: "sm" })
|
|
336
335
|
},
|
|
337
336
|
padded: false,
|
|
338
337
|
children: !mfaEnabled ? (
|
|
339
338
|
/* MFA not enabled — show empty state with enable CTA */
|
|
340
339
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4 sm:p-6", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
341
|
-
|
|
340
|
+
chunkAWDH6WNA_js.EmptyState,
|
|
342
341
|
{
|
|
343
342
|
message: t("mfa.manage.emptyStateMessage"),
|
|
344
343
|
description: t("mfa.manage.emptyStateDescription"),
|
|
@@ -353,11 +352,11 @@ function MfaManage({
|
|
|
353
352
|
) : (
|
|
354
353
|
/* MFA enabled — show enrolled methods list + action buttons */
|
|
355
354
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 p-4 sm:p-6", children: [
|
|
356
|
-
enrolledMethods.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
357
|
-
|
|
355
|
+
enrolledMethods.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.ListCard, { children: enrolledMethods.map((method, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
356
|
+
chunkAWDH6WNA_js.ListCardItem,
|
|
358
357
|
{
|
|
359
358
|
leading: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-9 w-9 rounded-xl bg-gradient-to-br from-emerald-500 to-teal-600 flex items-center justify-center shadow-sm", children: /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { className: "h-5 w-5 text-white" }) }),
|
|
360
|
-
trailing: /* @__PURE__ */ jsxRuntime.jsx(
|
|
359
|
+
trailing: /* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.StatusBadge, { status: "active", label: t("mfa.manage.methodStatusActive"), size: "sm" }),
|
|
361
360
|
children: [
|
|
362
361
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-gray-900 dark:text-white", children: method.label }),
|
|
363
362
|
method.createdAt && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-0.5", children: t("mfa.manage.methodEnrolledAt", {
|
|
@@ -373,7 +372,7 @@ function MfaManage({
|
|
|
373
372
|
)) }),
|
|
374
373
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:gap-3", children: [
|
|
375
374
|
onEnroll && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
376
|
-
|
|
375
|
+
chunkAWDH6WNA_js.Button,
|
|
377
376
|
{
|
|
378
377
|
color: "ios-glass-blue",
|
|
379
378
|
onClick: handleEnroll,
|
|
@@ -385,7 +384,7 @@ function MfaManage({
|
|
|
385
384
|
}
|
|
386
385
|
),
|
|
387
386
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
388
|
-
|
|
387
|
+
chunkAWDH6WNA_js.Button,
|
|
389
388
|
{
|
|
390
389
|
outline: true,
|
|
391
390
|
onClick: handleOpenBackupSheet,
|
|
@@ -399,7 +398,7 @@ function MfaManage({
|
|
|
399
398
|
}
|
|
400
399
|
),
|
|
401
400
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
402
|
-
|
|
401
|
+
chunkAWDH6WNA_js.Button,
|
|
403
402
|
{
|
|
404
403
|
color: "ios-glass-red",
|
|
405
404
|
onClick: handleRequestDisable,
|
|
@@ -413,7 +412,7 @@ function MfaManage({
|
|
|
413
412
|
}
|
|
414
413
|
),
|
|
415
414
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
416
|
-
|
|
415
|
+
chunkAWDH6WNA_js.Sheet,
|
|
417
416
|
{
|
|
418
417
|
open: isBackupSheetOpen,
|
|
419
418
|
onClose: handleCloseBackupSheet,
|
|
@@ -423,14 +422,14 @@ function MfaManage({
|
|
|
423
422
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 p-4 sm:p-6", children: [
|
|
424
423
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: t("mfa.manage.backupCodesSheetDescription") }),
|
|
425
424
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
426
|
-
|
|
425
|
+
chunkCY2MBKVG_js.BackupCodeGrid,
|
|
427
426
|
{
|
|
428
427
|
codes: newBackupCodes,
|
|
429
428
|
revealed: true
|
|
430
429
|
}
|
|
431
430
|
),
|
|
432
431
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
433
|
-
|
|
432
|
+
chunkAWDH6WNA_js.Button,
|
|
434
433
|
{
|
|
435
434
|
color: "ios-glass-blue",
|
|
436
435
|
fullWidth: true,
|
|
@@ -442,7 +441,7 @@ function MfaManage({
|
|
|
442
441
|
}
|
|
443
442
|
),
|
|
444
443
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
445
|
-
|
|
444
|
+
chunkAWDH6WNA_js.Sheet,
|
|
446
445
|
{
|
|
447
446
|
open: isConfirmDisableOpen,
|
|
448
447
|
onClose: handleCancelDisable,
|
|
@@ -455,7 +454,7 @@ function MfaManage({
|
|
|
455
454
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: t("mfa.manage.confirmDisableDescription") })
|
|
456
455
|
] }),
|
|
457
456
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
458
|
-
|
|
457
|
+
chunkAWDH6WNA_js.PasswordInput,
|
|
459
458
|
{
|
|
460
459
|
label: t("mfa.manage.disablePasswordLabel"),
|
|
461
460
|
value: disablePassword,
|
|
@@ -469,7 +468,7 @@ function MfaManage({
|
|
|
469
468
|
disableError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-600 dark:text-red-400", role: "alert", children: disableError }),
|
|
470
469
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-3", children: [
|
|
471
470
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
472
|
-
|
|
471
|
+
chunkAWDH6WNA_js.Button,
|
|
473
472
|
{
|
|
474
473
|
outline: true,
|
|
475
474
|
onClick: handleCancelDisable,
|
|
@@ -479,7 +478,7 @@ function MfaManage({
|
|
|
479
478
|
}
|
|
480
479
|
),
|
|
481
480
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
482
|
-
|
|
481
|
+
chunkAWDH6WNA_js.Button,
|
|
483
482
|
{
|
|
484
483
|
color: "ios-glass-red",
|
|
485
484
|
onClick: handleConfirmDisable,
|
|
@@ -499,7 +498,7 @@ var ALL_TABS = ["profile", "security", "sessions", "linked-accounts"];
|
|
|
499
498
|
function ProfileTabContent({ onProfileUpdate }) {
|
|
500
499
|
const t = chunkYXN2K77G_js.useTranslations("windsock");
|
|
501
500
|
const currentLocale = chunkYXN2K77G_js.useLocale();
|
|
502
|
-
const { user, client
|
|
501
|
+
const { user, client } = chunkAWDH6WNA_js.useAuth();
|
|
503
502
|
const [name, setName] = react.useState(user?.name ?? "");
|
|
504
503
|
const [avatarPreview, setAvatarPreview] = react.useState(user?.image ?? null);
|
|
505
504
|
const [isUploadingAvatar, setIsUploadingAvatar] = react.useState(false);
|
|
@@ -525,11 +524,11 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
525
524
|
setIsUploadingAvatar(true);
|
|
526
525
|
chunkUZ3CMNUJ_js.triggerHaptic("light");
|
|
527
526
|
try {
|
|
528
|
-
const uploadResult = await client
|
|
527
|
+
const uploadResult = await client.uploadFile(file, "avatars");
|
|
529
528
|
if (!uploadResult.success || !uploadResult.key) {
|
|
530
529
|
throw new Error(uploadResult.error ?? "Upload failed");
|
|
531
530
|
}
|
|
532
|
-
const updateResult = await client
|
|
531
|
+
const updateResult = await client.updateProfile({ image: uploadResult.key });
|
|
533
532
|
if (!updateResult.success) {
|
|
534
533
|
throw new Error(updateResult.error ?? "Profile update failed");
|
|
535
534
|
}
|
|
@@ -542,7 +541,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
542
541
|
setIsUploadingAvatar(false);
|
|
543
542
|
if (fileInputRef.current) fileInputRef.current.value = "";
|
|
544
543
|
}
|
|
545
|
-
}, [client
|
|
544
|
+
}, [client, user, t]);
|
|
546
545
|
const handleSave = react.useCallback(async () => {
|
|
547
546
|
setSaveError(null);
|
|
548
547
|
setSaveSuccess(false);
|
|
@@ -552,7 +551,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
552
551
|
if (onProfileUpdate) {
|
|
553
552
|
await onProfileUpdate({ name, email: user?.email ?? "", locale: selectedLocale });
|
|
554
553
|
} else {
|
|
555
|
-
const result = await client
|
|
554
|
+
const result = await client.updateProfile({ name, locale: selectedLocale });
|
|
556
555
|
if (!result.success) {
|
|
557
556
|
throw new Error(result.error);
|
|
558
557
|
}
|
|
@@ -569,10 +568,10 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
569
568
|
} finally {
|
|
570
569
|
setIsSaving(false);
|
|
571
570
|
}
|
|
572
|
-
}, [name, selectedLocale, currentLocale, user, onProfileUpdate, client
|
|
571
|
+
}, [name, selectedLocale, currentLocale, user, onProfileUpdate, client, t]);
|
|
573
572
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
574
573
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
575
|
-
|
|
574
|
+
chunkAWDH6WNA_js.SectionCard,
|
|
576
575
|
{
|
|
577
576
|
header: {
|
|
578
577
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.UserIcon, { className: "h-5 w-5 text-white" }),
|
|
@@ -580,7 +579,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
580
579
|
subtitle: t("userProfile.profile.subtitle"),
|
|
581
580
|
gradient: "from-blue-500 via-indigo-500 to-violet-500"
|
|
582
581
|
},
|
|
583
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
582
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(chunkAWDH6WNA_js.BaseForm, { onSubmit: handleSave, submitLabel: t("userProfile.profile.saveButton"), showFooter: false, children: [
|
|
584
583
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-3 pb-4", children: [
|
|
585
584
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
586
585
|
"button",
|
|
@@ -591,7 +590,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
591
590
|
className: "group relative",
|
|
592
591
|
children: [
|
|
593
592
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
594
|
-
|
|
593
|
+
chunkAWDH6WNA_js.Avatar,
|
|
595
594
|
{
|
|
596
595
|
src: avatarPreview ?? void 0,
|
|
597
596
|
initials: user?.name?.slice(0, 2).toUpperCase() ?? user?.email?.slice(0, 2).toUpperCase(),
|
|
@@ -599,7 +598,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
599
598
|
className: "h-20 w-20 text-2xl"
|
|
600
599
|
}
|
|
601
600
|
),
|
|
602
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center rounded-full bg-black/0 transition group-hover:bg-black/40", children: isUploadingAvatar ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
601
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center rounded-full bg-black/0 transition group-hover:bg-black/40", children: isUploadingAvatar ? /* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.InlineSpinner, {}) : /* @__PURE__ */ jsxRuntime.jsx(outline.CameraIcon, { className: "h-6 w-6 text-white opacity-0 transition group-hover:opacity-100" }) })
|
|
603
602
|
]
|
|
604
603
|
}
|
|
605
604
|
),
|
|
@@ -616,7 +615,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
616
615
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: t("userProfile.profile.avatarHint") })
|
|
617
616
|
] }),
|
|
618
617
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
619
|
-
|
|
618
|
+
chunkAWDH6WNA_js.Input,
|
|
620
619
|
{
|
|
621
620
|
label: t("userProfile.profile.nameLabel"),
|
|
622
621
|
value: name,
|
|
@@ -626,7 +625,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
626
625
|
}
|
|
627
626
|
),
|
|
628
627
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
629
|
-
|
|
628
|
+
chunkAWDH6WNA_js.Input,
|
|
630
629
|
{
|
|
631
630
|
label: t("userProfile.profile.emailLabel"),
|
|
632
631
|
type: "email",
|
|
@@ -639,7 +638,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
639
638
|
saveError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-600 dark:text-red-400", children: saveError }),
|
|
640
639
|
saveSuccess && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-green-600 dark:text-green-400", children: t("userProfile.profile.saveSuccess") }),
|
|
641
640
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
642
|
-
|
|
641
|
+
chunkAWDH6WNA_js.Button,
|
|
643
642
|
{
|
|
644
643
|
type: "submit",
|
|
645
644
|
color: "ios-glass-blue",
|
|
@@ -653,7 +652,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
653
652
|
}
|
|
654
653
|
),
|
|
655
654
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
656
|
-
|
|
655
|
+
chunkAWDH6WNA_js.SectionCard,
|
|
657
656
|
{
|
|
658
657
|
header: {
|
|
659
658
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.GlobeAltIcon, { className: "h-5 w-5 text-white" }),
|
|
@@ -684,7 +683,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
684
683
|
);
|
|
685
684
|
}) }),
|
|
686
685
|
selectedLocale !== currentLocale && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
687
|
-
|
|
686
|
+
chunkAWDH6WNA_js.Button,
|
|
688
687
|
{
|
|
689
688
|
type: "button",
|
|
690
689
|
color: "ios-glass-blue",
|
|
@@ -702,7 +701,7 @@ function ProfileTabContent({ onProfileUpdate }) {
|
|
|
702
701
|
}
|
|
703
702
|
function SecurityTabContent() {
|
|
704
703
|
const t = chunkYXN2K77G_js.useTranslations("windsock");
|
|
705
|
-
const { client
|
|
704
|
+
const { client, user, refresh } = chunkAWDH6WNA_js.useAuth();
|
|
706
705
|
const [showMfaSetup, setShowMfaSetup] = react.useState(false);
|
|
707
706
|
const [currentPassword, setCurrentPassword] = react.useState("");
|
|
708
707
|
const [newPassword, setNewPassword] = react.useState("");
|
|
@@ -732,7 +731,7 @@ function SecurityTabContent() {
|
|
|
732
731
|
setIsSavingPassword(true);
|
|
733
732
|
chunkUZ3CMNUJ_js.triggerHaptic("light");
|
|
734
733
|
try {
|
|
735
|
-
const result = await client
|
|
734
|
+
const result = await client.changePassword(currentPassword, newPassword);
|
|
736
735
|
if (!result.success) {
|
|
737
736
|
setPasswordError(result.error ?? t("userProfile.security.errorSaveFailed"));
|
|
738
737
|
chunkUZ3CMNUJ_js.triggerHaptic("error");
|
|
@@ -749,7 +748,7 @@ function SecurityTabContent() {
|
|
|
749
748
|
} finally {
|
|
750
749
|
setIsSavingPassword(false);
|
|
751
750
|
}
|
|
752
|
-
}, [currentPassword, newPassword, confirmPassword, client
|
|
751
|
+
}, [currentPassword, newPassword, confirmPassword, client, t]);
|
|
753
752
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
754
753
|
showMfaSetup ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
755
754
|
MfaSetup,
|
|
@@ -766,7 +765,7 @@ function SecurityTabContent() {
|
|
|
766
765
|
}
|
|
767
766
|
),
|
|
768
767
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
769
|
-
|
|
768
|
+
chunkAWDH6WNA_js.SectionCard,
|
|
770
769
|
{
|
|
771
770
|
header: {
|
|
772
771
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.UserIcon, { className: "h-5 w-5 text-white" }),
|
|
@@ -774,9 +773,9 @@ function SecurityTabContent() {
|
|
|
774
773
|
subtitle: t("userProfile.security.changePasswordSubtitle"),
|
|
775
774
|
gradient: "from-blue-500 via-sky-500 to-cyan-500"
|
|
776
775
|
},
|
|
777
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
776
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(chunkAWDH6WNA_js.BaseForm, { onSubmit: handleChangePassword, submitLabel: t("userProfile.security.changePasswordButton"), showFooter: false, children: [
|
|
778
777
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
779
|
-
|
|
778
|
+
chunkAWDH6WNA_js.PasswordInput,
|
|
780
779
|
{
|
|
781
780
|
label: t("userProfile.security.currentPasswordLabel"),
|
|
782
781
|
value: currentPassword,
|
|
@@ -786,7 +785,7 @@ function SecurityTabContent() {
|
|
|
786
785
|
}
|
|
787
786
|
),
|
|
788
787
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
789
|
-
|
|
788
|
+
chunkAWDH6WNA_js.PasswordInput,
|
|
790
789
|
{
|
|
791
790
|
label: t("userProfile.security.newPasswordLabel"),
|
|
792
791
|
value: newPassword,
|
|
@@ -795,9 +794,9 @@ function SecurityTabContent() {
|
|
|
795
794
|
autoComplete: "new-password"
|
|
796
795
|
}
|
|
797
796
|
),
|
|
798
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
797
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkCY2MBKVG_js.PasswordStrengthMeter, { password: newPassword }),
|
|
799
798
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
800
|
-
|
|
799
|
+
chunkAWDH6WNA_js.PasswordInput,
|
|
801
800
|
{
|
|
802
801
|
label: t("userProfile.security.confirmPasswordLabel"),
|
|
803
802
|
value: confirmPassword,
|
|
@@ -809,7 +808,7 @@ function SecurityTabContent() {
|
|
|
809
808
|
passwordError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-600 dark:text-red-400", children: passwordError }),
|
|
810
809
|
passwordSuccess && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-green-600 dark:text-green-400", children: t("userProfile.security.changePasswordSuccess") }),
|
|
811
810
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
812
|
-
|
|
811
|
+
chunkAWDH6WNA_js.Button,
|
|
813
812
|
{
|
|
814
813
|
type: "submit",
|
|
815
814
|
color: "ios-glass-blue",
|
|
@@ -827,7 +826,7 @@ function SecurityTabContent() {
|
|
|
827
826
|
function SessionsTabContent() {
|
|
828
827
|
const t = chunkYXN2K77G_js.useTranslations("windsock");
|
|
829
828
|
const format = chunkYXN2K77G_js.useFormatter();
|
|
830
|
-
const { client
|
|
829
|
+
const { client } = chunkAWDH6WNA_js.useAuth();
|
|
831
830
|
const [sessions, setSessions] = react.useState([]);
|
|
832
831
|
const [isLoading, setIsLoading] = react.useState(true);
|
|
833
832
|
const [revokingId, setRevokingId] = react.useState(null);
|
|
@@ -836,7 +835,7 @@ function SessionsTabContent() {
|
|
|
836
835
|
const fetchSessions = async () => {
|
|
837
836
|
setIsLoading(true);
|
|
838
837
|
try {
|
|
839
|
-
const rawSessions = await client
|
|
838
|
+
const rawSessions = await client.getSessions();
|
|
840
839
|
if (!cancelled) {
|
|
841
840
|
setSessions(rawSessions.map((session) => ({
|
|
842
841
|
id: session.id,
|
|
@@ -855,12 +854,12 @@ function SessionsTabContent() {
|
|
|
855
854
|
return () => {
|
|
856
855
|
cancelled = true;
|
|
857
856
|
};
|
|
858
|
-
}, [client
|
|
857
|
+
}, [client]);
|
|
859
858
|
const handleRevoke = react.useCallback(async (sessionId) => {
|
|
860
859
|
setRevokingId(sessionId);
|
|
861
860
|
chunkUZ3CMNUJ_js.triggerHaptic("medium");
|
|
862
861
|
try {
|
|
863
|
-
await client
|
|
862
|
+
await client.revokeSession(sessionId);
|
|
864
863
|
setSessions((previous) => previous.filter((s) => s.id !== sessionId));
|
|
865
864
|
chunkUZ3CMNUJ_js.triggerHaptic("success");
|
|
866
865
|
} catch {
|
|
@@ -868,9 +867,9 @@ function SessionsTabContent() {
|
|
|
868
867
|
} finally {
|
|
869
868
|
setRevokingId(null);
|
|
870
869
|
}
|
|
871
|
-
}, [client
|
|
870
|
+
}, [client]);
|
|
872
871
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
873
|
-
|
|
872
|
+
chunkAWDH6WNA_js.SectionCard,
|
|
874
873
|
{
|
|
875
874
|
header: {
|
|
876
875
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ComputerDesktopIcon, { className: "h-5 w-5 text-white" }),
|
|
@@ -880,7 +879,7 @@ function SessionsTabContent() {
|
|
|
880
879
|
},
|
|
881
880
|
padded: false,
|
|
882
881
|
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400", children: [
|
|
883
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
882
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.InlineSpinner, {}),
|
|
884
883
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("userProfile.sessions.loading") })
|
|
885
884
|
] }) : sessions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "p-6 text-center text-sm text-gray-500 dark:text-gray-400", children: t("userProfile.sessions.empty") }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full text-sm", children: [
|
|
886
885
|
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-gray-200/60 dark:border-white/10", children: [
|
|
@@ -892,12 +891,12 @@ function SessionsTabContent() {
|
|
|
892
891
|
/* @__PURE__ */ jsxRuntime.jsx("tbody", { className: "divide-y divide-gray-200/60 dark:divide-white/10", children: sessions.map((session) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
893
892
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-3 text-gray-900 dark:text-white", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
894
893
|
session.device,
|
|
895
|
-
session.current && /* @__PURE__ */ jsxRuntime.jsx(
|
|
894
|
+
session.current && /* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.Badge, { color: "green", children: t("userProfile.sessions.currentBadge") })
|
|
896
895
|
] }) }),
|
|
897
896
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-3 text-gray-500 dark:text-gray-400", children: session.location }),
|
|
898
897
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-3 text-gray-500 dark:text-gray-400", children: format.relativeTime(new Date(session.lastActive)) }),
|
|
899
898
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-4 py-3 text-right", children: !session.current && /* @__PURE__ */ jsxRuntime.jsx(
|
|
900
|
-
|
|
899
|
+
chunkAWDH6WNA_js.Button,
|
|
901
900
|
{
|
|
902
901
|
size: "sm",
|
|
903
902
|
color: "ios-glass-red",
|
|
@@ -914,7 +913,7 @@ function SessionsTabContent() {
|
|
|
914
913
|
}
|
|
915
914
|
function LinkedAccountsTabContent() {
|
|
916
915
|
const t = chunkYXN2K77G_js.useTranslations("windsock");
|
|
917
|
-
const { client
|
|
916
|
+
const { client } = chunkAWDH6WNA_js.useAuth();
|
|
918
917
|
const [accounts, setAccounts] = react.useState([]);
|
|
919
918
|
const [isLoading, setIsLoading] = react.useState(true);
|
|
920
919
|
const [actioningProvider, setActioningProvider] = react.useState(null);
|
|
@@ -923,7 +922,7 @@ function LinkedAccountsTabContent() {
|
|
|
923
922
|
const fetchAccounts = async () => {
|
|
924
923
|
setIsLoading(true);
|
|
925
924
|
try {
|
|
926
|
-
const rawAccounts = await client
|
|
925
|
+
const rawAccounts = await client.getLinkedAccounts();
|
|
927
926
|
if (!cancelled) {
|
|
928
927
|
setAccounts(rawAccounts.map((account) => ({
|
|
929
928
|
provider: account.provider,
|
|
@@ -940,12 +939,12 @@ function LinkedAccountsTabContent() {
|
|
|
940
939
|
return () => {
|
|
941
940
|
cancelled = true;
|
|
942
941
|
};
|
|
943
|
-
}, [client
|
|
942
|
+
}, [client]);
|
|
944
943
|
const handleDisconnect = react.useCallback(async (provider) => {
|
|
945
944
|
setActioningProvider(provider);
|
|
946
945
|
chunkUZ3CMNUJ_js.triggerHaptic("medium");
|
|
947
946
|
try {
|
|
948
|
-
await client
|
|
947
|
+
await client.disconnectProvider(provider);
|
|
949
948
|
setAccounts((previous) => previous.filter((a) => a.provider !== provider));
|
|
950
949
|
chunkUZ3CMNUJ_js.triggerHaptic("success");
|
|
951
950
|
} catch {
|
|
@@ -953,10 +952,10 @@ function LinkedAccountsTabContent() {
|
|
|
953
952
|
} finally {
|
|
954
953
|
setActioningProvider(null);
|
|
955
954
|
}
|
|
956
|
-
}, [client
|
|
955
|
+
}, [client]);
|
|
957
956
|
const providerInitials = (provider) => provider.slice(0, 2).toUpperCase();
|
|
958
957
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
959
|
-
|
|
958
|
+
chunkAWDH6WNA_js.SectionCard,
|
|
960
959
|
{
|
|
961
960
|
header: {
|
|
962
961
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.LinkIcon, { className: "h-5 w-5 text-white" }),
|
|
@@ -966,13 +965,13 @@ function LinkedAccountsTabContent() {
|
|
|
966
965
|
},
|
|
967
966
|
padded: false,
|
|
968
967
|
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-gray-500 dark:text-gray-400", children: [
|
|
969
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
968
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.InlineSpinner, {}),
|
|
970
969
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("userProfile.linkedAccounts.loading") })
|
|
971
|
-
] }) : accounts.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "p-6 text-center text-sm text-gray-500 dark:text-gray-400", children: t("userProfile.linkedAccounts.empty") }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
972
|
-
|
|
970
|
+
] }) : accounts.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "p-6 text-center text-sm text-gray-500 dark:text-gray-400", children: t("userProfile.linkedAccounts.empty") }) : /* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.ListCard, { children: accounts.map((account) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
971
|
+
chunkAWDH6WNA_js.ListCardItem,
|
|
973
972
|
{
|
|
974
973
|
leading: /* @__PURE__ */ jsxRuntime.jsx(
|
|
975
|
-
|
|
974
|
+
chunkAWDH6WNA_js.Avatar,
|
|
976
975
|
{
|
|
977
976
|
src: account.logoUrl,
|
|
978
977
|
initials: providerInitials(account.provider),
|
|
@@ -980,7 +979,7 @@ function LinkedAccountsTabContent() {
|
|
|
980
979
|
}
|
|
981
980
|
),
|
|
982
981
|
trailing: /* @__PURE__ */ jsxRuntime.jsx(
|
|
983
|
-
|
|
982
|
+
chunkAWDH6WNA_js.Button,
|
|
984
983
|
{
|
|
985
984
|
size: "sm",
|
|
986
985
|
color: "ios-glass-red",
|
|
@@ -1007,12 +1006,12 @@ function UserProfile({
|
|
|
1007
1006
|
onProfileUpdate
|
|
1008
1007
|
}) {
|
|
1009
1008
|
const t = chunkYXN2K77G_js.useTranslations("windsock");
|
|
1010
|
-
const { status } =
|
|
1009
|
+
const { status } = chunkAWDH6WNA_js.useAuth();
|
|
1011
1010
|
const [activeTab, setActiveTab] = react.useState(
|
|
1012
1011
|
tabs.includes(defaultTab) ? defaultTab : tabs[0] ?? "profile"
|
|
1013
1012
|
);
|
|
1014
1013
|
if (status === "loading") {
|
|
1015
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1014
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsxRuntime.jsx(chunkAWDH6WNA_js.InlineSpinner, {}) });
|
|
1016
1015
|
}
|
|
1017
1016
|
if (status !== "authenticated") {
|
|
1018
1017
|
return null;
|
|
@@ -1023,7 +1022,7 @@ function UserProfile({
|
|
|
1023
1022
|
}));
|
|
1024
1023
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
1025
1024
|
tabs.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1026
|
-
|
|
1025
|
+
chunkAWDH6WNA_js.SegmentedControl,
|
|
1027
1026
|
{
|
|
1028
1027
|
segments,
|
|
1029
1028
|
value: activeTab,
|
|
@@ -1045,5 +1044,5 @@ exports.ProfileTabContent = ProfileTabContent;
|
|
|
1045
1044
|
exports.SecurityTabContent = SecurityTabContent;
|
|
1046
1045
|
exports.SessionsTabContent = SessionsTabContent;
|
|
1047
1046
|
exports.UserProfile = UserProfile;
|
|
1048
|
-
//# sourceMappingURL=chunk-
|
|
1049
|
-
//# sourceMappingURL=chunk-
|
|
1047
|
+
//# sourceMappingURL=chunk-NCDBNGIB.js.map
|
|
1048
|
+
//# sourceMappingURL=chunk-NCDBNGIB.js.map
|