@datatechsolutions/ui 3.3.0 → 3.4.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.
Files changed (166) hide show
  1. package/dist/astrlabe/index.d.mts +22 -30
  2. package/dist/astrlabe/index.d.ts +22 -30
  3. package/dist/astrlabe/index.js +112 -112
  4. package/dist/astrlabe/index.mjs +5 -5
  5. package/dist/astrlabe/workflow-canvas.d.mts +6 -69
  6. package/dist/astrlabe/workflow-canvas.d.ts +6 -69
  7. package/dist/astrlabe/workflow-canvas.js +5 -5
  8. package/dist/astrlabe/workflow-canvas.mjs +4 -4
  9. package/dist/brand/index.d.mts +1 -15
  10. package/dist/brand/index.d.ts +1 -15
  11. package/dist/brand/index.js +0 -14
  12. package/dist/brand/index.js.map +1 -1
  13. package/dist/brand/index.mjs +0 -14
  14. package/dist/brand/index.mjs.map +1 -1
  15. package/dist/{chunk-FAGDZEKM.js → chunk-2OZZH2IO.js} +2 -2
  16. package/dist/chunk-2OZZH2IO.js.map +1 -0
  17. package/dist/{chunk-SYNVNTLJ.mjs → chunk-3AY5HIQ6.mjs} +2 -2
  18. package/dist/chunk-3AY5HIQ6.mjs.map +1 -0
  19. package/dist/{chunk-JSNRCYSO.js → chunk-45QAUEYT.js} +4 -4
  20. package/dist/{chunk-JSNRCYSO.js.map → chunk-45QAUEYT.js.map} +1 -1
  21. package/dist/{chunk-B67DP7MI.mjs → chunk-4GDWGWHY.mjs} +4 -4
  22. package/dist/{chunk-B67DP7MI.mjs.map → chunk-4GDWGWHY.mjs.map} +1 -1
  23. package/dist/{chunk-KR2X2WHJ.js → chunk-4ICEQJH4.js} +53 -53
  24. package/dist/{chunk-KR2X2WHJ.js.map → chunk-4ICEQJH4.js.map} +1 -1
  25. package/dist/{chunk-RXZNACMI.js → chunk-6MBWKOPF.js} +33 -33
  26. package/dist/{chunk-RXZNACMI.js.map → chunk-6MBWKOPF.js.map} +1 -1
  27. package/dist/{chunk-JN6IL6OH.mjs → chunk-AGGOHPMZ.mjs} +1054 -5229
  28. package/dist/chunk-AGGOHPMZ.mjs.map +1 -0
  29. package/dist/{chunk-5GDKCFM5.mjs → chunk-AL73YAV4.mjs} +3 -3
  30. package/dist/{chunk-5GDKCFM5.mjs.map → chunk-AL73YAV4.mjs.map} +1 -1
  31. package/dist/{chunk-ZJPNP2YW.mjs → chunk-BUDZNAKL.mjs} +2 -2
  32. package/dist/chunk-BUDZNAKL.mjs.map +1 -0
  33. package/dist/{chunk-OL73LBX5.mjs → chunk-BW67WFHT.mjs} +3 -4
  34. package/dist/chunk-BW67WFHT.mjs.map +1 -0
  35. package/dist/{chunk-W5OEBO6E.js → chunk-CF7GOUBQ.js} +13 -14
  36. package/dist/chunk-CF7GOUBQ.js.map +1 -0
  37. package/dist/{chunk-IRPS5UCS.mjs → chunk-CUWPLPVY.mjs} +3 -3
  38. package/dist/{chunk-IRPS5UCS.mjs.map → chunk-CUWPLPVY.mjs.map} +1 -1
  39. package/dist/{chunk-IJAKZHXX.js → chunk-ERCDMBRT.js} +683 -645
  40. package/dist/chunk-ERCDMBRT.js.map +1 -0
  41. package/dist/{chunk-I2NZGVBG.js → chunk-FSBR4RCK.js} +1101 -5313
  42. package/dist/chunk-FSBR4RCK.js.map +1 -0
  43. package/dist/{chunk-5RM6NGZ6.mjs → chunk-IDEM3DYF.mjs} +3 -3
  44. package/dist/{chunk-5RM6NGZ6.mjs.map → chunk-IDEM3DYF.mjs.map} +1 -1
  45. package/dist/{chunk-NJFRJ6YD.js → chunk-M7KSEUZR.js} +225 -384
  46. package/dist/chunk-M7KSEUZR.js.map +1 -0
  47. package/dist/{chunk-AOUUZ52N.js → chunk-MO5FBVV3.js} +85 -86
  48. package/dist/chunk-MO5FBVV3.js.map +1 -0
  49. package/dist/{chunk-BR2GAZKG.mjs → chunk-NAFWHJCM.mjs} +7 -7
  50. package/dist/{chunk-BR2GAZKG.mjs.map → chunk-NAFWHJCM.mjs.map} +1 -1
  51. package/dist/{chunk-3JJWPOK6.js → chunk-NCLZKVJK.js} +9 -10
  52. package/dist/chunk-NCLZKVJK.js.map +1 -0
  53. package/dist/{chunk-R4TQWXNG.mjs → chunk-NVQWHJQH.mjs} +6 -5
  54. package/dist/chunk-NVQWHJQH.mjs.map +1 -0
  55. package/dist/{chunk-ZL6C2ZAF.js → chunk-PGVZKMOA.js} +67 -67
  56. package/dist/{chunk-ZL6C2ZAF.js.map → chunk-PGVZKMOA.js.map} +1 -1
  57. package/dist/{chunk-UDDZTTLO.mjs → chunk-QBFE7ABE.mjs} +6 -7
  58. package/dist/chunk-QBFE7ABE.mjs.map +1 -0
  59. package/dist/{chunk-3ZUMJTDT.mjs → chunk-RFRXS4PC.mjs} +3 -4
  60. package/dist/{chunk-3JJWPOK6.js.map → chunk-RFRXS4PC.mjs.map} +1 -1
  61. package/dist/{chunk-ZV5EZXXO.mjs → chunk-RHRJXK5R.mjs} +3 -3
  62. package/dist/{chunk-ZV5EZXXO.mjs.map → chunk-RHRJXK5R.mjs.map} +1 -1
  63. package/dist/{chunk-MWPTSBAI.js → chunk-RLLP7VQJ.js} +26 -26
  64. package/dist/{chunk-MWPTSBAI.js.map → chunk-RLLP7VQJ.js.map} +1 -1
  65. package/dist/{chunk-GIQXB3BG.mjs → chunk-RLVOG5OQ.mjs} +3 -3
  66. package/dist/{chunk-GIQXB3BG.mjs.map → chunk-RLVOG5OQ.mjs.map} +1 -1
  67. package/dist/{chunk-2WXRRQM3.mjs → chunk-SEYUYGER.mjs} +553 -516
  68. package/dist/chunk-SEYUYGER.mjs.map +1 -0
  69. package/dist/{chunk-O6M3KDGT.mjs → chunk-SQ4KGLBZ.mjs} +4 -4
  70. package/dist/{chunk-O6M3KDGT.mjs.map → chunk-SQ4KGLBZ.mjs.map} +1 -1
  71. package/dist/{chunk-F54Q2YJY.js → chunk-SY4MUT5V.js} +7 -7
  72. package/dist/{chunk-F54Q2YJY.js.map → chunk-SY4MUT5V.js.map} +1 -1
  73. package/dist/{chunk-ZM5MVWIT.js → chunk-TUQLZ4QD.js} +5 -6
  74. package/dist/chunk-TUQLZ4QD.js.map +1 -0
  75. package/dist/{chunk-TVMLV675.js → chunk-UE2RDQIK.js} +98 -95
  76. package/dist/chunk-UE2RDQIK.js.map +1 -0
  77. package/dist/{chunk-HDCUWUNH.js → chunk-UJVDI66K.js} +28 -27
  78. package/dist/chunk-UJVDI66K.js.map +1 -0
  79. package/dist/{chunk-PCYL4MII.mjs → chunk-VV6SYMPM.mjs} +156 -314
  80. package/dist/chunk-VV6SYMPM.mjs.map +1 -0
  81. package/dist/{chunk-HZ4LOVHM.js → chunk-VY52Y5GC.js} +2 -2
  82. package/dist/chunk-VY52Y5GC.js.map +1 -0
  83. package/dist/{chunk-LEKZUS6N.mjs → chunk-X3GW7UPN.mjs} +4 -5
  84. package/dist/chunk-X3GW7UPN.mjs.map +1 -0
  85. package/dist/{chunk-OCELRSLO.js → chunk-Y2AYFG4E.js} +4 -4
  86. package/dist/{chunk-OCELRSLO.js.map → chunk-Y2AYFG4E.js.map} +1 -1
  87. package/dist/{chunk-TIJJHW2Z.js → chunk-YV7F7IXG.js} +36 -36
  88. package/dist/{chunk-TIJJHW2Z.js.map → chunk-YV7F7IXG.js.map} +1 -1
  89. package/dist/{chunk-MVBIAXVN.mjs → chunk-ZKSDDFHG.mjs} +14 -11
  90. package/dist/chunk-ZKSDDFHG.mjs.map +1 -0
  91. package/dist/{index-VI9gyJXl.d.mts → index-BNRGVAS5.d.mts} +9 -2
  92. package/dist/index-BoebbJ44.d.mts +49 -0
  93. package/dist/index-BoebbJ44.d.ts +49 -0
  94. package/dist/{index-CoB18TbG.d.ts → index-CnCY-b5V.d.ts} +9 -2
  95. package/dist/index.d.mts +399 -548
  96. package/dist/index.d.ts +399 -548
  97. package/dist/index.js +727 -887
  98. package/dist/index.mjs +3 -3
  99. package/dist/platform/admin/index.js +12 -12
  100. package/dist/platform/admin/index.mjs +6 -6
  101. package/dist/platform/agents-workspace.js +8 -8
  102. package/dist/platform/agents-workspace.mjs +7 -7
  103. package/dist/platform/app-shell.js +5 -5
  104. package/dist/platform/app-shell.mjs +4 -4
  105. package/dist/platform/auth/index.js +29 -29
  106. package/dist/platform/auth/index.mjs +6 -6
  107. package/dist/platform/billing/index.js +5 -5
  108. package/dist/platform/billing/index.mjs +4 -4
  109. package/dist/platform/impersonation/index.js +5 -5
  110. package/dist/platform/impersonation/index.mjs +4 -4
  111. package/dist/platform/index.d.mts +3 -39
  112. package/dist/platform/index.d.ts +3 -39
  113. package/dist/platform/index.js +95 -4805
  114. package/dist/platform/index.js.map +1 -1
  115. package/dist/platform/index.mjs +23 -4728
  116. package/dist/platform/index.mjs.map +1 -1
  117. package/dist/platform/pages/index.d.mts +4 -4
  118. package/dist/platform/pages/index.d.ts +4 -4
  119. package/dist/platform/pages/index.js +197 -197
  120. package/dist/platform/pages/index.mjs +9 -9
  121. package/dist/platform/rbac.d.mts +2 -1
  122. package/dist/platform/rbac.d.ts +2 -1
  123. package/dist/platform/rbac.js +2 -2
  124. package/dist/platform/rbac.mjs +1 -1
  125. package/dist/platform/settings/index.js +9 -9
  126. package/dist/platform/settings/index.mjs +8 -8
  127. package/dist/platform/utils/index.js +3 -3
  128. package/dist/platform/utils/index.js.map +1 -1
  129. package/dist/platform/utils/index.mjs +1 -1
  130. package/dist/platform/utils/index.mjs.map +1 -1
  131. package/dist/platform/workflow-api-client.d.mts +2 -2
  132. package/dist/platform/workflow-api-client.d.ts +2 -2
  133. package/dist/platform/workflow-api-client.js +62 -62
  134. package/dist/platform/workflow-api-client.mjs +2 -2
  135. package/dist/platform/workflow-canvas-shell.js +6 -6
  136. package/dist/platform/workflow-canvas-shell.mjs +5 -5
  137. package/dist/{workflow-api-client-DoYj7nHz.d.mts → workflow-api-client-CpFl3WcG.d.mts} +1 -1
  138. package/dist/{workflow-api-client-BKD8OfP_.d.ts → workflow-api-client-uLICOanv.d.ts} +1 -1
  139. package/dist/workflow-canvas--qaYKuMm.d.ts +113 -0
  140. package/dist/workflow-canvas-B80fmD_n.d.mts +113 -0
  141. package/package.json +15 -5
  142. package/src/styles/liquid-glass.css +283 -2
  143. package/dist/chunk-2WXRRQM3.mjs.map +0 -1
  144. package/dist/chunk-3ZUMJTDT.mjs.map +0 -1
  145. package/dist/chunk-AOUUZ52N.js.map +0 -1
  146. package/dist/chunk-FAGDZEKM.js.map +0 -1
  147. package/dist/chunk-HDCUWUNH.js.map +0 -1
  148. package/dist/chunk-HZ4LOVHM.js.map +0 -1
  149. package/dist/chunk-I2NZGVBG.js.map +0 -1
  150. package/dist/chunk-IJAKZHXX.js.map +0 -1
  151. package/dist/chunk-JN6IL6OH.mjs.map +0 -1
  152. package/dist/chunk-LEKZUS6N.mjs.map +0 -1
  153. package/dist/chunk-MVBIAXVN.mjs.map +0 -1
  154. package/dist/chunk-NJFRJ6YD.js.map +0 -1
  155. package/dist/chunk-OL73LBX5.mjs.map +0 -1
  156. package/dist/chunk-PCYL4MII.mjs.map +0 -1
  157. package/dist/chunk-R4TQWXNG.mjs.map +0 -1
  158. package/dist/chunk-SYNVNTLJ.mjs.map +0 -1
  159. package/dist/chunk-TVMLV675.js.map +0 -1
  160. package/dist/chunk-UDDZTTLO.mjs.map +0 -1
  161. package/dist/chunk-W5OEBO6E.js.map +0 -1
  162. package/dist/chunk-ZJPNP2YW.mjs.map +0 -1
  163. package/dist/chunk-ZM5MVWIT.js.map +0 -1
  164. package/src/brand/logos/kori-icon.svg +0 -45
  165. package/src/brand/logos/kori-logo-dark.svg +0 -40
  166. 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 chunkJSNRCYSO_js = require('./chunk-JSNRCYSO.js');
5
- var chunkI2NZGVBG_js = require('./chunk-I2NZGVBG.js');
4
+ var chunk45QAUEYT_js = require('./chunk-45QAUEYT.js');
5
+ var chunkFSBR4RCK_js = require('./chunk-FSBR4RCK.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: client$1 } = client.useAuth();
42
+ const { client } = chunkFSBR4RCK_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$1.generateMfaSecret();
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$1]
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$1.verifyMfaSetup(code);
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$1, t]
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
- chunkI2NZGVBG_js.StepFormPage,
164
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.OptionGrid,
181
+ chunkFSBR4RCK_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(chunkI2NZGVBG_js.Spinner, {}) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
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(chunkFSBR4RCK_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
- chunkJSNRCYSO_js.OtpInput,
213
+ chunk45QAUEYT_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(chunkI2NZGVBG_js.Spinner, {}) })
223
+ isLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.Spinner, {}) })
225
224
  ] }),
226
225
  currentStep === 3 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
227
226
  /* @__PURE__ */ jsxRuntime.jsx(
228
- chunkJSNRCYSO_js.BackupCodeGrid,
227
+ chunk45QAUEYT_js.BackupCodeGrid,
229
228
  {
230
229
  codes: backupCodes,
231
230
  revealed: true
232
231
  }
233
232
  ),
234
233
  /* @__PURE__ */ jsxRuntime.jsx(
235
- chunkI2NZGVBG_js.FormCheckbox,
234
+ chunkFSBR4RCK_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: client$1 } = client.useAuth();
255
+ const { client } = chunkFSBR4RCK_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$1.regenerateBackupCodes();
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$1]);
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$1.disableMfa(disablePassword);
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$1, t]);
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
- chunkI2NZGVBG_js.SectionCard,
327
+ chunkFSBR4RCK_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(chunkI2NZGVBG_js.StatusBadge, { status: "active", label: t("mfa.manage.statusEnabled"), size: "sm" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkI2NZGVBG_js.StatusBadge, { status: "inactive", label: t("mfa.manage.statusDisabled"), size: "sm" })
334
+ rightContent: mfaEnabled ? /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.StatusBadge, { status: "active", label: t("mfa.manage.statusEnabled"), size: "sm" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_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
- chunkI2NZGVBG_js.EmptyState,
340
+ chunkFSBR4RCK_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(chunkI2NZGVBG_js.ListCard, { children: enrolledMethods.map((method, index) => /* @__PURE__ */ jsxRuntime.jsxs(
357
- chunkI2NZGVBG_js.ListCardItem,
355
+ enrolledMethods.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_js.ListCard, { children: enrolledMethods.map((method, index) => /* @__PURE__ */ jsxRuntime.jsxs(
356
+ chunkFSBR4RCK_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(chunkI2NZGVBG_js.StatusBadge, { status: "active", label: t("mfa.manage.methodStatusActive"), size: "sm" }),
359
+ trailing: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Button,
375
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Button,
387
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Button,
401
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Sheet,
415
+ chunkFSBR4RCK_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
- chunkJSNRCYSO_js.BackupCodeGrid,
425
+ chunk45QAUEYT_js.BackupCodeGrid,
427
426
  {
428
427
  codes: newBackupCodes,
429
428
  revealed: true
430
429
  }
431
430
  ),
432
431
  /* @__PURE__ */ jsxRuntime.jsx(
433
- chunkI2NZGVBG_js.Button,
432
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Sheet,
444
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.PasswordInput,
457
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Button,
471
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Button,
481
+ chunkFSBR4RCK_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: client$1 } = client.useAuth();
501
+ const { user, client } = chunkFSBR4RCK_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$1.uploadFile(file, "avatars");
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$1.updateProfile({ image: uploadResult.key });
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$1, user, t]);
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$1.updateProfile({ name, locale: selectedLocale });
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$1, t]);
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
- chunkI2NZGVBG_js.SectionCard,
574
+ chunkFSBR4RCK_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(chunkI2NZGVBG_js.BaseForm, { onSubmit: handleSave, submitLabel: t("userProfile.profile.saveButton"), showFooter: false, children: [
582
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Avatar,
593
+ chunkFSBR4RCK_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(chunkI2NZGVBG_js.InlineSpinner, {}) : /* @__PURE__ */ jsxRuntime.jsx(outline.CameraIcon, { className: "h-6 w-6 text-white opacity-0 transition group-hover:opacity-100" }) })
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(chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Input,
618
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Input,
628
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Button,
641
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.SectionCard,
655
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Button,
686
+ chunkFSBR4RCK_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: client$1, user, refresh } = client.useAuth();
704
+ const { client, user, refresh } = chunkFSBR4RCK_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$1.changePassword(currentPassword, newPassword);
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$1, t]);
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
- chunkI2NZGVBG_js.SectionCard,
768
+ chunkFSBR4RCK_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(chunkI2NZGVBG_js.BaseForm, { onSubmit: handleChangePassword, submitLabel: t("userProfile.security.changePasswordButton"), showFooter: false, children: [
776
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkFSBR4RCK_js.BaseForm, { onSubmit: handleChangePassword, submitLabel: t("userProfile.security.changePasswordButton"), showFooter: false, children: [
778
777
  /* @__PURE__ */ jsxRuntime.jsx(
779
- chunkI2NZGVBG_js.PasswordInput,
778
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.PasswordInput,
788
+ chunkFSBR4RCK_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(chunkJSNRCYSO_js.PasswordStrengthMeter, { password: newPassword }),
797
+ /* @__PURE__ */ jsxRuntime.jsx(chunk45QAUEYT_js.PasswordStrengthMeter, { password: newPassword }),
799
798
  /* @__PURE__ */ jsxRuntime.jsx(
800
- chunkI2NZGVBG_js.PasswordInput,
799
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Button,
811
+ chunkFSBR4RCK_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: client$1 } = client.useAuth();
829
+ const { client } = chunkFSBR4RCK_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$1.getSessions();
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$1]);
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$1.revokeSession(sessionId);
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$1]);
870
+ }, [client]);
872
871
  return /* @__PURE__ */ jsxRuntime.jsx(
873
- chunkI2NZGVBG_js.SectionCard,
872
+ chunkFSBR4RCK_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(chunkI2NZGVBG_js.InlineSpinner, {}),
882
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_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(chunkI2NZGVBG_js.Badge, { color: "green", children: t("userProfile.sessions.currentBadge") })
894
+ session.current && /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Button,
899
+ chunkFSBR4RCK_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: client$1 } = client.useAuth();
916
+ const { client } = chunkFSBR4RCK_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$1.getLinkedAccounts();
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$1]);
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$1.disconnectProvider(provider);
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$1]);
955
+ }, [client]);
957
956
  const providerInitials = (provider) => provider.slice(0, 2).toUpperCase();
958
957
  return /* @__PURE__ */ jsxRuntime.jsx(
959
- chunkI2NZGVBG_js.SectionCard,
958
+ chunkFSBR4RCK_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(chunkI2NZGVBG_js.InlineSpinner, {}),
968
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_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(chunkI2NZGVBG_js.ListCard, { children: accounts.map((account) => /* @__PURE__ */ jsxRuntime.jsx(
972
- chunkI2NZGVBG_js.ListCardItem,
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(chunkFSBR4RCK_js.ListCard, { children: accounts.map((account) => /* @__PURE__ */ jsxRuntime.jsx(
971
+ chunkFSBR4RCK_js.ListCardItem,
973
972
  {
974
973
  leading: /* @__PURE__ */ jsxRuntime.jsx(
975
- chunkI2NZGVBG_js.Avatar,
974
+ chunkFSBR4RCK_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
- chunkI2NZGVBG_js.Button,
982
+ chunkFSBR4RCK_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 } = client.useAuth();
1009
+ const { status } = chunkFSBR4RCK_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(chunkI2NZGVBG_js.InlineSpinner, {}) });
1014
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsxRuntime.jsx(chunkFSBR4RCK_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
- chunkI2NZGVBG_js.SegmentedControl,
1025
+ chunkFSBR4RCK_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-AOUUZ52N.js.map
1049
- //# sourceMappingURL=chunk-AOUUZ52N.js.map
1047
+ //# sourceMappingURL=chunk-MO5FBVV3.js.map
1048
+ //# sourceMappingURL=chunk-MO5FBVV3.js.map