@strands.gg/accui 1.9.0 → 1.10.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 (49) hide show
  1. package/dist/accui.css +1 -5802
  2. package/dist/nuxt/module.cjs.js +1 -109
  3. package/dist/nuxt/module.cjs.js.map +1 -1
  4. package/dist/nuxt/module.es.js +0 -1
  5. package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js +1 -57
  6. package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js.map +1 -1
  7. package/dist/nuxt/runtime/composables/useStrandsAuth.es.js +1 -2
  8. package/dist/nuxt/runtime/middleware/auth.global.cjs.js +1 -42
  9. package/dist/nuxt/runtime/middleware/auth.global.cjs.js.map +1 -1
  10. package/dist/nuxt/runtime/middleware/auth.global.es.js +0 -1
  11. package/dist/nuxt/runtime/plugin.client.cjs.js +1 -26
  12. package/dist/nuxt/runtime/plugin.client.cjs.js.map +1 -1
  13. package/dist/nuxt/runtime/plugin.client.es.js +2 -1
  14. package/dist/nuxt/runtime/plugin.client.es.js.map +1 -1
  15. package/dist/nuxt/runtime/plugin.server.cjs.js +1 -17
  16. package/dist/nuxt/runtime/plugin.server.cjs.js.map +1 -1
  17. package/dist/nuxt/runtime/plugin.server.es.js +0 -1
  18. package/dist/nuxt-v4/module.cjs.js +1 -119
  19. package/dist/nuxt-v4/module.cjs.js.map +1 -1
  20. package/dist/nuxt-v4/module.es.js +0 -1
  21. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.cjs.js +1 -70
  22. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.cjs.js.map +1 -1
  23. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.es.js +1 -2
  24. package/dist/nuxt-v4/runtime/middleware/auth.global.cjs.js +1 -42
  25. package/dist/nuxt-v4/runtime/middleware/auth.global.cjs.js.map +1 -1
  26. package/dist/nuxt-v4/runtime/middleware/auth.global.es.js +0 -1
  27. package/dist/nuxt-v4/runtime/plugin.client.cjs.js +1 -26
  28. package/dist/nuxt-v4/runtime/plugin.client.cjs.js.map +1 -1
  29. package/dist/nuxt-v4/runtime/plugin.client.es.js +2 -1
  30. package/dist/nuxt-v4/runtime/plugin.client.es.js.map +1 -1
  31. package/dist/nuxt-v4/runtime/plugin.server.cjs.js +1 -22
  32. package/dist/nuxt-v4/runtime/plugin.server.cjs.js.map +1 -1
  33. package/dist/nuxt-v4/runtime/plugin.server.es.js +0 -1
  34. package/dist/strands-auth-ui.cjs.js +1 -9840
  35. package/dist/strands-auth-ui.cjs.js.map +1 -1
  36. package/dist/strands-auth-ui.es.js +1398 -808
  37. package/dist/strands-auth-ui.es.js.map +1 -1
  38. package/dist/useStrandsAuth-Co9ekmXB.cjs +1 -0
  39. package/dist/useStrandsAuth-Co9ekmXB.cjs.map +1 -0
  40. package/dist/{useStrandsAuth-BA8qEUcp.js → useStrandsAuth-kWUOoMm-.js} +288 -127
  41. package/dist/useStrandsAuth-kWUOoMm-.js.map +1 -0
  42. package/dist/useStrandsConfig-Cxb360Os.js +0 -1
  43. package/dist/useStrandsConfig-Z9_36OcV.cjs +1 -0
  44. package/dist/{useStrandsConfig-Dms13Zd0.cjs.map → useStrandsConfig-Z9_36OcV.cjs.map} +1 -1
  45. package/package.json +1 -1
  46. package/dist/useStrandsAuth-BA8qEUcp.js.map +0 -1
  47. package/dist/useStrandsAuth-Co2lLH4X.cjs +0 -736
  48. package/dist/useStrandsAuth-Co2lLH4X.cjs.map +0 -1
  49. package/dist/useStrandsConfig-Dms13Zd0.cjs +0 -179
@@ -1,8 +1,9 @@
1
- import { defineComponent, computed, createElementBlock, openBlock, createElementVNode, normalizeClass, createCommentVNode, toDisplayString, renderSlot, createTextVNode, normalizeStyle, useSlots, ref, createBlock, resolveDynamicComponent, mergeProps, withCtx, onMounted, nextTick, toRefs, watch, Fragment, renderList, unref, reactive, withModifiers, createStaticVNode, withDirectives, vModelText, Teleport, onBeforeUnmount, createVNode, withKeys, Transition, resolveComponent, h, onUnmounted } from "vue";
1
+ import { defineComponent, computed, createElementBlock, openBlock, createElementVNode, normalizeClass, createCommentVNode, toDisplayString, renderSlot, createTextVNode, normalizeStyle, useSlots, ref, createBlock, resolveDynamicComponent, mergeProps, withCtx, onMounted, nextTick, toRefs, watch, Fragment, renderList, unref, reactive, withModifiers, createStaticVNode, withDirectives, vModelText, Teleport, onBeforeUnmount, createVNode, withKeys, h, Transition, isMemoSame, onUnmounted } from "vue";
2
+ /* empty css */
2
3
  import { u as useStrandsConfig, p as provideStrandsConfig } from "./useStrandsConfig-Cxb360Os.js";
3
4
  import { s } from "./useStrandsConfig-Cxb360Os.js";
4
- import { u as useStrandsAuth } from "./useStrandsAuth-BA8qEUcp.js";
5
- const _hoisted_1$v = { class: "accui-component-scope" };
5
+ import { u as useStrandsAuth } from "./useStrandsAuth-kWUOoMm-.js";
6
+ const _hoisted_1$y = { class: "accui-component-scope" };
6
7
  const _hoisted_2$s = { class: "alert-content" };
7
8
  const _hoisted_3$s = { class: "alert-icon-container" };
8
9
  const _hoisted_4$o = {
@@ -17,7 +18,7 @@ const _hoisted_7$i = {
17
18
  key: 0,
18
19
  class: "alert-dismiss-container"
19
20
  };
20
- const _sfc_main$x = /* @__PURE__ */ defineComponent({
21
+ const _sfc_main$A = /* @__PURE__ */ defineComponent({
21
22
  __name: "UiAlert",
22
23
  props: {
23
24
  variant: { default: "info" },
@@ -53,7 +54,7 @@ const _sfc_main$x = /* @__PURE__ */ defineComponent({
53
54
  return icons[props.variant];
54
55
  });
55
56
  return (_ctx, _cache) => {
56
- return openBlock(), createElementBlock("div", _hoisted_1$v, [
57
+ return openBlock(), createElementBlock("div", _hoisted_1$y, [
57
58
  createElementVNode("div", {
58
59
  class: normalizeClass(alertClasses.value),
59
60
  role: "alert"
@@ -114,7 +115,7 @@ const _export_sfc = (sfc, props) => {
114
115
  }
115
116
  return target;
116
117
  };
117
- const StrandsUiAlert = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["__scopeId", "data-v-a396f50a"]]);
118
+ const StrandsUiAlert = /* @__PURE__ */ _export_sfc(_sfc_main$A, [["__scopeId", "data-v-a396f50a"]]);
118
119
  const mainTRC = 2.4;
119
120
  const sRco = 0.2126729, sGco = 0.7151522, sBco = 0.072175;
120
121
  const normBG = 0.56, normTXT = 0.57, revTXT = 0.62, revBG = 0.65;
@@ -269,7 +270,7 @@ const getColorValue = (color) => {
269
270
  }
270
271
  return colorMap[color] || `var(--color-${color}, ${color})`;
271
272
  };
272
- const _hoisted_1$u = ["type", "disabled"];
273
+ const _hoisted_1$x = ["type", "disabled"];
273
274
  const _hoisted_2$r = {
274
275
  key: 0,
275
276
  class: "button-loading-content"
@@ -278,7 +279,7 @@ const _hoisted_3$r = {
278
279
  key: 1,
279
280
  class: "button-content"
280
281
  };
281
- const _sfc_main$w = /* @__PURE__ */ defineComponent({
282
+ const _sfc_main$z = /* @__PURE__ */ defineComponent({
282
283
  __name: "UiButton",
283
284
  props: {
284
285
  variant: { default: "primary" },
@@ -424,12 +425,12 @@ const _sfc_main$w = /* @__PURE__ */ defineComponent({
424
425
  renderSlot(_ctx.$slots, "icon", {}, void 0, true),
425
426
  renderSlot(_ctx.$slots, "default", {}, void 0, true)
426
427
  ]))
427
- ], 14, _hoisted_1$u);
428
+ ], 14, _hoisted_1$x);
428
429
  };
429
430
  }
430
431
  });
431
- const StrandsUiButton = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["__scopeId", "data-v-9eb74e0b"]]);
432
- const _hoisted_1$t = {
432
+ const StrandsUiButton = /* @__PURE__ */ _export_sfc(_sfc_main$z, [["__scopeId", "data-v-7f9ac656"]]);
433
+ const _hoisted_1$w = {
433
434
  key: 0,
434
435
  class: "ui-card-header"
435
436
  };
@@ -438,7 +439,7 @@ const _hoisted_3$q = {
438
439
  key: 1,
439
440
  class: "ui-card-footer"
440
441
  };
441
- const _sfc_main$v = /* @__PURE__ */ defineComponent({
442
+ const _sfc_main$y = /* @__PURE__ */ defineComponent({
442
443
  __name: "UiCard",
443
444
  props: {
444
445
  variant: { default: "default" },
@@ -454,7 +455,7 @@ const _sfc_main$v = /* @__PURE__ */ defineComponent({
454
455
  `ui-card-shadow-${_ctx.shadow}`
455
456
  ]])
456
457
  }, [
457
- _ctx.$slots["header"] ? (openBlock(), createElementBlock("div", _hoisted_1$t, [
458
+ _ctx.$slots["header"] ? (openBlock(), createElementBlock("div", _hoisted_1$w, [
458
459
  renderSlot(_ctx.$slots, "header", {}, void 0, true)
459
460
  ])) : createCommentVNode("", true),
460
461
  createElementVNode("div", _hoisted_2$q, [
@@ -467,8 +468,8 @@ const _sfc_main$v = /* @__PURE__ */ defineComponent({
467
468
  };
468
469
  }
469
470
  });
470
- const StrandsUiCard = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["__scopeId", "data-v-c8b506ee"]]);
471
- const _hoisted_1$s = { class: "accui-component-scope" };
471
+ const StrandsUiCard = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["__scopeId", "data-v-c8b506ee"]]);
472
+ const _hoisted_1$v = { class: "accui-component-scope" };
472
473
  const _hoisted_2$p = { class: "input-container" };
473
474
  const _hoisted_3$p = ["for"];
474
475
  const _hoisted_4$n = {
@@ -503,7 +504,7 @@ const _hoisted_11$f = {
503
504
  key: 2,
504
505
  class: "input-help-text"
505
506
  };
506
- const _sfc_main$u = /* @__PURE__ */ defineComponent({
507
+ const _sfc_main$x = /* @__PURE__ */ defineComponent({
507
508
  __name: "UiInput",
508
509
  props: {
509
510
  modelValue: {},
@@ -562,7 +563,7 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
562
563
  showPassword.value = !showPassword.value;
563
564
  };
564
565
  return (_ctx, _cache) => {
565
- return openBlock(), createElementBlock("div", _hoisted_1$s, [
566
+ return openBlock(), createElementBlock("div", _hoisted_1$v, [
566
567
  createElementVNode("div", _hoisted_2$p, [
567
568
  _ctx.label ? (openBlock(), createElementBlock("label", {
568
569
  key: 0,
@@ -628,8 +629,8 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
628
629
  };
629
630
  }
630
631
  });
631
- const StrandsUiInput = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["__scopeId", "data-v-1fccfe97"]]);
632
- const _sfc_main$t = /* @__PURE__ */ defineComponent({
632
+ const StrandsUiInput = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["__scopeId", "data-v-e2c3cc83"]]);
633
+ const _sfc_main$w = /* @__PURE__ */ defineComponent({
633
634
  __name: "UiLink",
634
635
  props: {
635
636
  href: {},
@@ -712,15 +713,15 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
712
713
  };
713
714
  }
714
715
  });
715
- const StrandsUiLink = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["__scopeId", "data-v-878f97a6"]]);
716
- const _hoisted_1$r = { class: "tabs-container" };
716
+ const StrandsUiLink = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["__scopeId", "data-v-878f97a6"]]);
717
+ const _hoisted_1$u = { class: "tabs-container" };
717
718
  const _hoisted_2$o = { class: "tabs-wrapper" };
718
719
  const _hoisted_3$o = {
719
720
  class: "tabs-list",
720
721
  role: "tablist"
721
722
  };
722
723
  const _hoisted_4$m = ["aria-selected", "aria-controls", "id", "onClick"];
723
- const _sfc_main$s = /* @__PURE__ */ defineComponent({
724
+ const _sfc_main$v = /* @__PURE__ */ defineComponent({
724
725
  __name: "UiTabs",
725
726
  props: {
726
727
  modelValue: {},
@@ -807,7 +808,7 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
807
808
  }
808
809
  });
809
810
  return (_ctx, _cache) => {
810
- return openBlock(), createElementBlock("div", _hoisted_1$r, [
811
+ return openBlock(), createElementBlock("div", _hoisted_1$u, [
811
812
  createElementVNode("div", _hoisted_2$o, [
812
813
  createElementVNode("div", _hoisted_3$o, [
813
814
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.tabs, (tab, index) => {
@@ -834,13 +835,13 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
834
835
  };
835
836
  }
836
837
  });
837
- const StrandsUiTabs = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["__scopeId", "data-v-c14b9ef2"]]);
838
+ const StrandsUiTabs = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["__scopeId", "data-v-c14b9ef2"]]);
838
839
  const logo = '<svg width="302" height="438" viewBox="0 0 302 438" fill="none" xmlns="http://www.w3.org/2000/svg">\n<path d="M71.5001 96C71.5001 96 132 106 137 61.5C142 17 117.5 3.50005 94.5001 1.50003C71.5001 -0.499996 16.0001 8.5 2.00014 72.5C-6.5 130.5 71.5003 227.5 165 218C258.5 208.5 280.758 148.5 283.5 121C286.242 93.5 277.5 61.5 238.5 61.5C153 61.5 150.501 185 170.5 235C190.5 285 199 279 213 314C227.001 349 217.296 411.458 183 427C129.456 450.65 92 426 78.5 407.5C65 389 68.0003 357 94.5001 344.5C121 332 212.41 393.5 301.5 361" stroke="black"/>\n</svg>\n';
839
- const _hoisted_1$q = { class: "loader-icon" };
840
+ const _hoisted_1$t = { class: "loader-icon" };
840
841
  const _hoisted_2$n = ["width", "height"];
841
842
  const _hoisted_3$n = ["d", "stroke", "stroke-width"];
842
843
  const _hoisted_4$l = ["d", "stroke", "stroke-width"];
843
- const _sfc_main$r = /* @__PURE__ */ defineComponent({
844
+ const _sfc_main$u = /* @__PURE__ */ defineComponent({
844
845
  __name: "UiLoader",
845
846
  props: {
846
847
  size: { default: 80 },
@@ -863,7 +864,7 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
863
864
  return openBlock(), createElementBlock("div", {
864
865
  class: normalizeClass(["loader-container", { "loader-centered": _ctx.centered }])
865
866
  }, [
866
- createElementVNode("div", _hoisted_1$q, [
867
+ createElementVNode("div", _hoisted_1$t, [
867
868
  (openBlock(), createElementBlock("svg", {
868
869
  width: _ctx.size,
869
870
  height: _ctx.size,
@@ -898,9 +899,9 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
898
899
  };
899
900
  }
900
901
  });
901
- const StrandsUiLoader = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["__scopeId", "data-v-1e521ef1"]]);
902
- const _hoisted_1$p = ["aria-pressed", "aria-labelledby"];
903
- const _sfc_main$q = /* @__PURE__ */ defineComponent({
902
+ const StrandsUiLoader = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["__scopeId", "data-v-1e521ef1"]]);
903
+ const _hoisted_1$s = ["aria-pressed", "aria-labelledby"];
904
+ const _sfc_main$t = /* @__PURE__ */ defineComponent({
904
905
  __name: "UiToggle",
905
906
  props: {
906
907
  modelValue: { type: Boolean, default: false },
@@ -940,12 +941,12 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
940
941
  createElementVNode("span", {
941
942
  class: normalizeClass(["ui-toggle-thumb", thumbClasses.value])
942
943
  }, null, 2)
943
- ], 10, _hoisted_1$p);
944
+ ], 10, _hoisted_1$s);
944
945
  };
945
946
  }
946
947
  });
947
- const UiToggle = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["__scopeId", "data-v-b790ecf9"]]);
948
- const _hoisted_1$o = { class: "accui-component-scope" };
948
+ const UiToggle = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["__scopeId", "data-v-f9c38813"]]);
949
+ const _hoisted_1$r = { class: "accui-component-scope" };
949
950
  const _hoisted_2$m = { class: "avatar-editor-simple" };
950
951
  const _hoisted_3$m = {
951
952
  key: 1,
@@ -955,21 +956,23 @@ const _hoisted_4$k = { class: "editor-main" };
955
956
  const _hoisted_5$j = { class: "canvas-container" };
956
957
  const _hoisted_6$g = ["width", "height"];
957
958
  const _hoisted_7$g = { class: "crop-overlay" };
958
- const _hoisted_8$g = { class: "crop-svg" };
959
- const _hoisted_9$f = { id: "circle-mask" };
960
- const _hoisted_10$e = ["width", "height"];
961
- const _hoisted_11$e = ["cx", "cy", "r"];
962
- const _hoisted_12$e = ["width", "height"];
963
- const _hoisted_13$d = ["cx", "cy", "r"];
964
- const _hoisted_14$d = { class: "controls" };
965
- const _hoisted_15$c = { class: "zoom-control" };
966
- const _hoisted_16$c = ["min", "max"];
967
- const _hoisted_17$b = { class: "action-buttons" };
968
- const _hoisted_18$b = ["disabled"];
969
- const _hoisted_19$8 = { class: "preview-section" };
970
- const _hoisted_20$7 = { class: "preview-container" };
971
- const _hoisted_21$6 = ["width", "height"];
972
- const _sfc_main$p = /* @__PURE__ */ defineComponent({
959
+ const _hoisted_8$g = { class: "crop-backdrop" };
960
+ const _hoisted_9$f = { class: "crop-svg" };
961
+ const _hoisted_10$e = { id: "backdrop-mask" };
962
+ const _hoisted_11$e = ["width", "height"];
963
+ const _hoisted_12$e = ["cx", "cy", "r"];
964
+ const _hoisted_13$d = ["width", "height"];
965
+ const _hoisted_14$d = { class: "crop-svg" };
966
+ const _hoisted_15$c = ["cx", "cy", "r"];
967
+ const _hoisted_16$c = { class: "controls" };
968
+ const _hoisted_17$b = { class: "zoom-control" };
969
+ const _hoisted_18$a = ["min", "max"];
970
+ const _hoisted_19$7 = { class: "action-buttons" };
971
+ const _hoisted_20$7 = ["disabled"];
972
+ const _hoisted_21$6 = { class: "preview-section" };
973
+ const _hoisted_22$6 = { class: "preview-container" };
974
+ const _hoisted_23$5 = ["width", "height"];
975
+ const _sfc_main$s = /* @__PURE__ */ defineComponent({
973
976
  __name: "UiAvatarEditor",
974
977
  props: {
975
978
  size: { default: 300 },
@@ -996,6 +999,7 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
996
999
  const maxZoom = ref(3);
997
1000
  const isDragging = ref(false);
998
1001
  const isResetting = ref(false);
1002
+ const isWheelZooming = ref(false);
999
1003
  const dragStart = reactive({ x: 0, y: 0, imageX: 0, imageY: 0 });
1000
1004
  onMounted(() => {
1001
1005
  if (canvas.value) {
@@ -1049,8 +1053,9 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1049
1053
  cropRadius.value * 2 / img.width,
1050
1054
  cropRadius.value * 2 / img.height
1051
1055
  );
1052
- const initialZoom = scale * 1.2;
1056
+ const initialZoom = scale;
1053
1057
  minZoom.value = scale;
1058
+ maxZoom.value = Math.max(1, scale);
1054
1059
  const scaledWidth = img.width * initialZoom;
1055
1060
  const scaledHeight = img.height * initialZoom;
1056
1061
  imagePos.x = (canvasSize.value - scaledWidth) / 2;
@@ -1149,18 +1154,26 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1149
1154
  const delta = event.deltaY > 0 ? -0.05 : 0.05;
1150
1155
  const newZoom = Math.max(minZoom.value, Math.min(maxZoom.value, zoom.value + delta));
1151
1156
  if (newZoom !== zoom.value && originalImage.value) {
1157
+ isWheelZooming.value = true;
1152
1158
  const img = originalImage.value;
1159
+ const canvasCenter = canvasSize.value / 2;
1153
1160
  const currentWidth = img.width * zoom.value;
1154
1161
  const currentHeight = img.height * zoom.value;
1155
- const imageCenterX = imagePos.x + currentWidth / 2;
1156
- const imageCenterY = imagePos.y + currentHeight / 2;
1157
1162
  const newWidth = img.width * newZoom;
1158
1163
  const newHeight = img.height * newZoom;
1159
- imagePos.x = imageCenterX - newWidth / 2;
1160
- imagePos.y = imageCenterY - newHeight / 2;
1164
+ const currentCenterOffsetX = imagePos.x + currentWidth / 2 - canvasCenter;
1165
+ const currentCenterOffsetY = imagePos.y + currentHeight / 2 - canvasCenter;
1166
+ const zoomRatio = newZoom / zoom.value;
1167
+ const newCenterOffsetX = currentCenterOffsetX * zoomRatio;
1168
+ const newCenterOffsetY = currentCenterOffsetY * zoomRatio;
1169
+ imagePos.x = canvasCenter + newCenterOffsetX - newWidth / 2;
1170
+ imagePos.y = canvasCenter + newCenterOffsetY - newHeight / 2;
1161
1171
  zoom.value = newZoom;
1162
1172
  constrainImagePosition();
1163
1173
  updateCanvas();
1174
+ setTimeout(() => {
1175
+ isWheelZooming.value = false;
1176
+ }, 16);
1164
1177
  }
1165
1178
  };
1166
1179
  const resetImage = () => {
@@ -1171,7 +1184,9 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1171
1184
  cropRadius.value * 2 / img.width,
1172
1185
  cropRadius.value * 2 / img.height
1173
1186
  );
1174
- const targetZoom = scale * 1.2;
1187
+ const targetZoom = scale;
1188
+ minZoom.value = scale;
1189
+ maxZoom.value = Math.max(1, scale);
1175
1190
  const scaledWidth = img.width * targetZoom;
1176
1191
  const scaledHeight = img.height * targetZoom;
1177
1192
  imagePos.x = (canvasSize.value - scaledWidth) / 2;
@@ -1218,31 +1233,27 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1218
1233
  }
1219
1234
  }, "image/jpeg", 0.9);
1220
1235
  };
1221
- const clearImage = () => {
1222
- imageData.value = "";
1223
- originalImage.value = void 0;
1224
- zoom.value = 1;
1225
- minZoom.value = 0.1;
1226
- imagePos.x = 0;
1227
- imagePos.y = 0;
1228
- if (fileInput.value) {
1229
- fileInput.value.value = "";
1230
- }
1236
+ const changePhoto = () => {
1237
+ triggerFileUpload();
1231
1238
  };
1232
1239
  watch(zoom, (newZoom, oldZoom) => {
1233
- if (isResetting.value) {
1240
+ if (isResetting.value || isWheelZooming.value) {
1234
1241
  return;
1235
1242
  }
1236
1243
  if (newZoom !== oldZoom && originalImage.value && oldZoom > 0 && oldZoom !== 1) {
1237
1244
  const img = originalImage.value;
1245
+ const canvasCenter = canvasSize.value / 2;
1238
1246
  const oldWidth = img.width * oldZoom;
1239
1247
  const oldHeight = img.height * oldZoom;
1240
- const imageCenterX = imagePos.x + oldWidth / 2;
1241
- const imageCenterY = imagePos.y + oldHeight / 2;
1242
1248
  const newWidth = img.width * newZoom;
1243
1249
  const newHeight = img.height * newZoom;
1244
- imagePos.x = imageCenterX - newWidth / 2;
1245
- imagePos.y = imageCenterY - newHeight / 2;
1250
+ const currentCenterOffsetX = imagePos.x + oldWidth / 2 - canvasCenter;
1251
+ const currentCenterOffsetY = imagePos.y + oldHeight / 2 - canvasCenter;
1252
+ const zoomRatio = newZoom / oldZoom;
1253
+ const newCenterOffsetX = currentCenterOffsetX * zoomRatio;
1254
+ const newCenterOffsetY = currentCenterOffsetY * zoomRatio;
1255
+ imagePos.x = canvasCenter + newCenterOffsetX - newWidth / 2;
1256
+ imagePos.y = canvasCenter + newCenterOffsetY - newHeight / 2;
1246
1257
  }
1247
1258
  updateCanvas();
1248
1259
  });
@@ -1252,8 +1263,16 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1252
1263
  }
1253
1264
  }, { immediate: true });
1254
1265
  return (_ctx, _cache) => {
1255
- return openBlock(), createElementBlock("div", _hoisted_1$o, [
1266
+ return openBlock(), createElementBlock("div", _hoisted_1$r, [
1256
1267
  createElementVNode("div", _hoisted_2$m, [
1268
+ createElementVNode("input", {
1269
+ ref_key: "fileInput",
1270
+ ref: fileInput,
1271
+ type: "file",
1272
+ accept: "image/*",
1273
+ class: "hidden-input",
1274
+ onChange: handleFileSelect
1275
+ }, null, 544),
1257
1276
  !imageData.value ? (openBlock(), createElementBlock("div", {
1258
1277
  key: 0,
1259
1278
  class: "upload-area",
@@ -1263,17 +1282,9 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1263
1282
  }, ["prevent"])),
1264
1283
  onDragenter: _cache[1] || (_cache[1] = withModifiers(() => {
1265
1284
  }, ["prevent"]))
1266
- }, [
1267
- _cache[6] || (_cache[6] = createStaticVNode('<div class="upload-content"><svg class="upload-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"></path></svg><h3 class="upload-title">Upload your photo</h3><p class="upload-subtitle">Drag and drop or click to browse</p><div class="upload-formats"><span class="format-tag">JPG</span><span class="format-tag">PNG</span><span class="format-tag">GIF</span></div></div>', 1)),
1268
- createElementVNode("input", {
1269
- ref_key: "fileInput",
1270
- ref: fileInput,
1271
- type: "file",
1272
- accept: "image/*",
1273
- class: "hidden-input",
1274
- onChange: handleFileSelect
1275
- }, null, 544)
1276
- ], 32)) : (openBlock(), createElementBlock("div", _hoisted_3$m, [
1285
+ }, _cache[6] || (_cache[6] = [
1286
+ createStaticVNode('<div class="upload-content"><svg class="upload-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"></path></svg><h3 class="upload-title">Upload your photo</h3><p class="upload-subtitle">Drag and drop or click to browse</p><div class="upload-formats"><span class="format-tag">JPG</span><span class="format-tag">PNG</span><span class="format-tag">GIF</span></div></div>', 1)
1287
+ ]), 32)) : (openBlock(), createElementBlock("div", _hoisted_3$m, [
1277
1288
  createElementVNode("div", _hoisted_4$k, [
1278
1289
  createElementVNode("div", _hoisted_5$j, [
1279
1290
  createElementVNode("canvas", {
@@ -1286,33 +1297,37 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1286
1297
  onWheel: handleWheel
1287
1298
  }, null, 40, _hoisted_6$g),
1288
1299
  createElementVNode("div", _hoisted_7$g, [
1289
- (openBlock(), createElementBlock("svg", _hoisted_8$g, [
1290
- createElementVNode("defs", null, [
1291
- createElementVNode("mask", _hoisted_9$f, [
1292
- createElementVNode("rect", {
1293
- x: "0",
1294
- y: "0",
1295
- width: canvasSize.value,
1296
- height: canvasSize.value,
1297
- fill: "white"
1298
- }, null, 8, _hoisted_10$e),
1299
- createElementVNode("circle", {
1300
- cx: canvasSize.value / 2,
1301
- cy: canvasSize.value / 2,
1302
- r: cropRadius.value,
1303
- fill: "black"
1304
- }, null, 8, _hoisted_11$e)
1305
- ])
1306
- ]),
1307
- createElementVNode("rect", {
1308
- x: "0",
1309
- y: "0",
1310
- width: canvasSize.value,
1311
- height: canvasSize.value,
1312
- fill: "black",
1313
- opacity: "0.5",
1314
- mask: "url(#circle-mask)"
1315
- }, null, 8, _hoisted_12$e),
1300
+ createElementVNode("div", _hoisted_8$g, [
1301
+ (openBlock(), createElementBlock("svg", _hoisted_9$f, [
1302
+ createElementVNode("defs", null, [
1303
+ createElementVNode("mask", _hoisted_10$e, [
1304
+ createElementVNode("rect", {
1305
+ x: "0",
1306
+ y: "0",
1307
+ width: canvasSize.value,
1308
+ height: canvasSize.value,
1309
+ fill: "white"
1310
+ }, null, 8, _hoisted_11$e),
1311
+ createElementVNode("circle", {
1312
+ cx: canvasSize.value / 2,
1313
+ cy: canvasSize.value / 2,
1314
+ r: cropRadius.value,
1315
+ fill: "black"
1316
+ }, null, 8, _hoisted_12$e)
1317
+ ])
1318
+ ]),
1319
+ createElementVNode("rect", {
1320
+ x: "0",
1321
+ y: "0",
1322
+ width: canvasSize.value,
1323
+ height: canvasSize.value,
1324
+ fill: "black",
1325
+ opacity: "0.5",
1326
+ mask: "url(#backdrop-mask)"
1327
+ }, null, 8, _hoisted_13$d)
1328
+ ]))
1329
+ ]),
1330
+ (openBlock(), createElementBlock("svg", _hoisted_14$d, [
1316
1331
  createElementVNode("circle", {
1317
1332
  cx: canvasSize.value / 2,
1318
1333
  cy: canvasSize.value / 2,
@@ -1321,12 +1336,12 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1321
1336
  stroke: "white",
1322
1337
  "stroke-width": "2",
1323
1338
  class: "crop-circle"
1324
- }, null, 8, _hoisted_13$d)
1339
+ }, null, 8, _hoisted_15$c)
1325
1340
  ]))
1326
1341
  ])
1327
1342
  ]),
1328
- createElementVNode("div", _hoisted_14$d, [
1329
- createElementVNode("div", _hoisted_15$c, [
1343
+ createElementVNode("div", _hoisted_16$c, [
1344
+ createElementVNode("div", _hoisted_17$b, [
1330
1345
  createElementVNode("button", {
1331
1346
  onClick: _cache[2] || (_cache[2] = ($event) => {
1332
1347
  zoom.value = Math.max(minZoom.value, zoom.value - 0.1);
@@ -1360,7 +1375,7 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1360
1375
  constrainImagePosition();
1361
1376
  updateCanvas();
1362
1377
  })
1363
- }, null, 40, _hoisted_16$c), [
1378
+ }, null, 40, _hoisted_18$a), [
1364
1379
  [
1365
1380
  vModelText,
1366
1381
  zoom.value,
@@ -1391,33 +1406,33 @@ const _sfc_main$p = /* @__PURE__ */ defineComponent({
1391
1406
  ], -1)
1392
1407
  ]))
1393
1408
  ]),
1394
- createElementVNode("div", _hoisted_17$b, [
1409
+ createElementVNode("div", _hoisted_19$7, [
1395
1410
  createElementVNode("button", {
1396
1411
  onClick: resetImage,
1397
1412
  class: "btn-secondary"
1398
1413
  }, " Reset "),
1399
1414
  createElementVNode("button", {
1400
- onClick: clearImage,
1415
+ onClick: changePhoto,
1401
1416
  class: "btn-secondary"
1402
1417
  }, " Change Photo "),
1403
1418
  createElementVNode("button", {
1404
1419
  onClick: cropAndUpload,
1405
1420
  disabled: _ctx.uploading,
1406
1421
  class: "btn-primary"
1407
- }, toDisplayString(_ctx.uploading ? "Saving..." : "Save Avatar"), 9, _hoisted_18$b)
1422
+ }, toDisplayString(_ctx.uploading ? "Saving..." : "Save Avatar"), 9, _hoisted_20$7)
1408
1423
  ])
1409
1424
  ])
1410
1425
  ]),
1411
- createElementVNode("div", _hoisted_19$8, [
1426
+ createElementVNode("div", _hoisted_21$6, [
1412
1427
  _cache[9] || (_cache[9] = createElementVNode("h3", { class: "preview-title" }, "Preview", -1)),
1413
- createElementVNode("div", _hoisted_20$7, [
1428
+ createElementVNode("div", _hoisted_22$6, [
1414
1429
  createElementVNode("canvas", {
1415
1430
  ref_key: "previewCanvas",
1416
1431
  ref: previewCanvas,
1417
1432
  width: previewSize.value,
1418
1433
  height: previewSize.value,
1419
1434
  class: "preview-canvas"
1420
- }, null, 8, _hoisted_21$6)
1435
+ }, null, 8, _hoisted_23$5)
1421
1436
  ]),
1422
1437
  _cache[10] || (_cache[10] = createElementVNode("p", { class: "preview-instructions" }, [
1423
1438
  createTextVNode(" Drag image to reposition"),
@@ -1690,7 +1705,7 @@ class SoundEffects {
1690
1705
  }
1691
1706
  }
1692
1707
  const playLevelUp = (level, userSettings) => SoundEffects.playLevelUp(level, userSettings);
1693
- const _hoisted_1$n = { class: "level-progress-container" };
1708
+ const _hoisted_1$q = { class: "level-progress-container" };
1694
1709
  const _hoisted_2$l = ["width", "height", "viewBox"];
1695
1710
  const _hoisted_3$l = { key: 0 };
1696
1711
  const _hoisted_4$j = ["r"];
@@ -1720,7 +1735,7 @@ const INNER_GAP = 18;
1720
1735
  const ANIMATION_DURATION = 600;
1721
1736
  const LABEL_EXTRA_DEGREES = 12;
1722
1737
  const LABEL_CHAR_DEGREES = 8;
1723
- const _sfc_main$o = /* @__PURE__ */ defineComponent({
1738
+ const _sfc_main$r = /* @__PURE__ */ defineComponent({
1724
1739
  __name: "UiLevelProgress",
1725
1740
  props: {
1726
1741
  value: {},
@@ -1871,7 +1886,7 @@ const _sfc_main$o = /* @__PURE__ */ defineComponent({
1871
1886
  prevLevel = newLevel;
1872
1887
  });
1873
1888
  return (_ctx, _cache) => {
1874
- return openBlock(), createElementBlock("div", _hoisted_1$n, [
1889
+ return openBlock(), createElementBlock("div", _hoisted_1$q, [
1875
1890
  (openBlock(), createElementBlock("svg", {
1876
1891
  width: unref(size),
1877
1892
  height: unref(size),
@@ -1969,8 +1984,8 @@ const _sfc_main$o = /* @__PURE__ */ defineComponent({
1969
1984
  };
1970
1985
  }
1971
1986
  });
1972
- const StrandsUiLevelProgress = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["__scopeId", "data-v-09b7355c"]]);
1973
- const _hoisted_1$m = { class: "accui-component-scope" };
1987
+ const StrandsUiLevelProgress = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["__scopeId", "data-v-09b7355c"]]);
1988
+ const _hoisted_1$p = { class: "accui-component-scope" };
1974
1989
  const _hoisted_2$k = { class: "modal-card" };
1975
1990
  const _hoisted_3$k = {
1976
1991
  key: 0,
@@ -1981,7 +1996,7 @@ const _hoisted_5$h = {
1981
1996
  key: 1,
1982
1997
  class: "modal-footer"
1983
1998
  };
1984
- const _sfc_main$n = /* @__PURE__ */ defineComponent({
1999
+ const _sfc_main$q = /* @__PURE__ */ defineComponent({
1985
2000
  __name: "UiModal",
1986
2001
  props: {
1987
2002
  open: { type: Boolean, default: false },
@@ -1998,7 +2013,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
1998
2013
  }
1999
2014
  };
2000
2015
  return (_ctx, _cache) => {
2001
- return openBlock(), createElementBlock("div", _hoisted_1$m, [
2016
+ return openBlock(), createElementBlock("div", _hoisted_1$p, [
2002
2017
  (openBlock(), createBlock(Teleport, { to: "body" }, [
2003
2018
  _ctx.open ? (openBlock(), createElementBlock("div", {
2004
2019
  key: 0,
@@ -2028,7 +2043,7 @@ const _sfc_main$n = /* @__PURE__ */ defineComponent({
2028
2043
  };
2029
2044
  }
2030
2045
  });
2031
- const StrandsUiModal = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["__scopeId", "data-v-8a7cf999"]]);
2046
+ const UiModal = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["__scopeId", "data-v-8a7cf999"]]);
2032
2047
  const slotHasContent = (slotName, slots) => {
2033
2048
  const slot = slots[slotName];
2034
2049
  if (!slot) return false;
@@ -2039,13 +2054,13 @@ const slotHasContent = (slotName, slots) => {
2039
2054
  return Array.isArray(slot) && slot.length > 0;
2040
2055
  };
2041
2056
  const securedByLogo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABVgAAAHgCAYAAABQLAbaAAAEt2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNDgwIgogICB0aWZmOkltYWdlV2lkdGg9IjEzNjgiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLzEiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLzEiCiAgIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMzY4IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNDgwIgogICBleGlmOkNvbG9yU3BhY2U9IjEiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIw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rYdCFBEBYXQHawB8r7uGOCph1YlP9yoKH2PS1V0EEREREREREZlFW8B6BZN5xLgbTELOcR5rdATEp7prOIeru4A4qiAxjZh0rwYAxwMQERERERER0Xu0BawAUIWc0vn4nZIQ66UY7G7fDSSk0R2sYMDasnr36ozuOpqVhNzQXQMRERERERERmUdrwFpfbrv4/7N3P8lNJGvb/79Z5l/E+/ziyBEHA6MuVoBYAWIF2JPGGiFWgFmBzQqAFWBGkj2xWYHFClCvgOoRjdwd0om3z/NiZFX+BlUC4baxZEvKzKrrE8HpPnRj3w1SqerKO+90WcMlVQaYPR16tRCx6wJ+5gomcV1DaAaYN65rmEI/77oXEREREREREfmB04AV4CrXt4C+6zouoTrg6KXrIkogdl3Az1jSkF/DC9el2QBqjsuYhrpXRURERERERORUzgPWZdb6KYR84BVAQ4delduxRgRMrEczNpigFiUizDvXNYiIiIiIiIiIn4zrAka6tA4Iq6PtH1J4fpv1V67rKJpPNOMlzEfXdfzMCuvevJd816X1Aai6rmMK/RXWl10XISIiIiIiIiJ+ct7BOmKwoXexEsHLQ5o113UUzRXPxwMQ9oiLhco7vUMKV0HjAURERERERETkJ7wJWPMDZEI+8AoAi9nr0Yxd1yELlbguIASHNGsWu+W6jmkZ7FvXNYiIiIiIiIiIv7wJWKEQB14BVAaYA4Wss2OIKq5rOEfor9m569GMLeaN6zouIMkXf0RERERERERETuVVwLrMWj/CPHVdxwzECllnJyX1OmBN4T+ua/BZj73KAHOA/6MeThH+6BIRERERERERmS+vAlaAf/N4H2i7rmMG8pB1z+twMAQG4/XvYQQ91zX47JivbwgyXIVhMa5FIiIiIiIiIjJH3gWsAEPsU4qx7ToecKSQ9ZJSrNe/fxb7u+safHXIzkuLXXVdxwVt36GeuC5CRERERERERPzmZcB6h3qSQlG25lYVskoZHbKzabEbruu4qKHGA4iIiIiIiIjIBLwMWAFus/6K4mzPVch6Cb6PCLCYInRbz1Qerm65ruMS2upeFREREREREZFJeBuwQqFGBYBC1guzno8IiLBFeY3ORAHCVYy6V0VERERERERkQl4HrAUbFQAKWaXgihCuAu2b1NuuixARERERERGRMHgdsEI2KsBg9l3XMUPV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";
2042
- const _hoisted_1$l = { class: "accui-component-scope" };
2057
+ const _hoisted_1$o = { class: "accui-component-scope" };
2043
2058
  const _hoisted_2$j = {
2044
2059
  key: 0,
2045
2060
  class: "secured-logo"
2046
2061
  };
2047
2062
  const _hoisted_3$j = ["src"];
2048
- const _sfc_main$m = /* @__PURE__ */ defineComponent({
2063
+ const _sfc_main$p = /* @__PURE__ */ defineComponent({
2049
2064
  __name: "StrandsSecuredFooter",
2050
2065
  props: {
2051
2066
  config: {}
@@ -2060,7 +2075,7 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
2060
2075
  const slots = useSlots();
2061
2076
  const hasDefaultSlot = computed(() => slotHasContent("default", slots));
2062
2077
  return (_ctx, _cache) => {
2063
- return openBlock(), createElementBlock("div", _hoisted_1$l, [
2078
+ return openBlock(), createElementBlock("div", _hoisted_1$o, [
2064
2079
  shouldShowSecuredBy.value ? (openBlock(), createElementBlock("div", {
2065
2080
  key: 0,
2066
2081
  class: normalizeClass(["secured-footer", { "secured-footer-with-content": hasDefaultSlot.value, "secured-footer-centered": !hasDefaultSlot.value }])
@@ -2077,7 +2092,7 @@ const _sfc_main$m = /* @__PURE__ */ defineComponent({
2077
2092
  };
2078
2093
  }
2079
2094
  });
2080
- const StrandsSecuredFooter = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["__scopeId", "data-v-6dfcdb8c"]]);
2095
+ const StrandsSecuredFooter = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["__scopeId", "data-v-6dfcdb8c"]]);
2081
2096
  const mfaDevices = ref([]);
2082
2097
  const mfaEnabled = ref(false);
2083
2098
  const loading = ref(false);
@@ -2286,7 +2301,7 @@ function useStrandsMfa() {
2286
2301
  formatLastUsed
2287
2302
  };
2288
2303
  }
2289
- const _hoisted_1$k = { class: "accui-component-scope" };
2304
+ const _hoisted_1$n = { class: "accui-component-scope" };
2290
2305
  const _hoisted_2$i = { class: "mfa-verification-content" };
2291
2306
  const _hoisted_3$i = {
2292
2307
  key: 0,
@@ -2321,11 +2336,11 @@ const _hoisted_17$a = {
2321
2336
  key: 2,
2322
2337
  class: "mfa-email-request"
2323
2338
  };
2324
- const _hoisted_18$a = {
2339
+ const _hoisted_18$9 = {
2325
2340
  key: 3,
2326
2341
  class: "mfa-hardware-section"
2327
2342
  };
2328
- const _hoisted_19$7 = { class: "mfa-hardware-prompt" };
2343
+ const _hoisted_19$6 = { class: "mfa-hardware-prompt" };
2329
2344
  const _hoisted_20$6 = { class: "mfa-hardware-prompt-content" };
2330
2345
  const _hoisted_21$5 = { class: "mfa-hardware-prompt-icon" };
2331
2346
  const _hoisted_22$5 = { class: "mfa-hardware-prompt-text" };
@@ -2338,31 +2353,28 @@ const _hoisted_26$3 = {
2338
2353
  };
2339
2354
  const _hoisted_27$3 = { class: "mfa-backup-warning" };
2340
2355
  const _hoisted_28$3 = {
2341
- key: 4,
2342
- class: "mfa-code-section"
2343
- };
2344
- const _hoisted_29$2 = {
2345
2356
  key: 0,
2346
2357
  class: "mfa-email-confirmation"
2347
2358
  };
2348
- const _hoisted_30$2 = { class: "mfa-email-confirmation-content" };
2349
- const _hoisted_31$2 = {
2359
+ const _hoisted_29$2 = { class: "mfa-email-confirmation-content" };
2360
+ const _hoisted_30$2 = {
2350
2361
  key: 1,
2351
- class: "mfa-totp-help"
2362
+ class: "mfa-totp-help",
2363
+ id: "totp-description"
2352
2364
  };
2353
- const _hoisted_32$2 = { class: "mfa-device-name-text" };
2354
- const _hoisted_33$2 = {
2365
+ const _hoisted_31$2 = { class: "mfa-device-name-text" };
2366
+ const _hoisted_32$2 = {
2355
2367
  key: 2,
2356
2368
  class: "mfa-email-resend"
2357
2369
  };
2358
- const _hoisted_34$2 = { class: "mfa-backup-option" };
2359
- const _hoisted_35$2 = {
2370
+ const _hoisted_33$2 = { class: "mfa-backup-option" };
2371
+ const _hoisted_34$2 = {
2360
2372
  key: 3,
2361
2373
  class: "mfa-backup-input-section"
2362
2374
  };
2363
- const _hoisted_36$2 = { class: "mfa-backup-warning" };
2364
- const _hoisted_37$2 = { class: "mfa-verification-footer" };
2365
- const _sfc_main$l = /* @__PURE__ */ defineComponent({
2375
+ const _hoisted_35$2 = { class: "mfa-backup-warning" };
2376
+ const _hoisted_36$2 = { class: "mfa-verification-footer" };
2377
+ const _sfc_main$o = /* @__PURE__ */ defineComponent({
2366
2378
  __name: "StrandsMfaVerification",
2367
2379
  props: {
2368
2380
  show: { type: Boolean },
@@ -2372,28 +2384,95 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2372
2384
  emits: ["close", "success", "error"],
2373
2385
  setup(__props, { emit: __emit }) {
2374
2386
  const IconSmartphone = {
2375
- template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg>`,
2376
- props: ["size"]
2387
+ props: ["size"],
2388
+ render() {
2389
+ return h("svg", {
2390
+ width: this.size,
2391
+ height: this.size,
2392
+ fill: "none",
2393
+ stroke: "currentColor",
2394
+ viewBox: "0 0 24 24"
2395
+ }, [
2396
+ h("rect", { x: "5", y: "2", width: "14", height: "20", rx: "2", ry: "2" }),
2397
+ h("line", { x1: "12", y1: "18", x2: "12.01", y2: "18" })
2398
+ ]);
2399
+ }
2377
2400
  };
2378
2401
  const IconMail = {
2379
- template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="m4 4 16 0 0 16 -16 0 z"/><path d="m22 6-10 7L2 6"/></svg>`,
2380
- props: ["size"]
2402
+ props: ["size"],
2403
+ render() {
2404
+ return h("svg", {
2405
+ width: this.size,
2406
+ height: this.size,
2407
+ fill: "none",
2408
+ stroke: "currentColor",
2409
+ viewBox: "0 0 24 24"
2410
+ }, [
2411
+ h("path", { d: "m4 4 16 0 0 16 -16 0 z" }),
2412
+ h("path", { d: "m22 6-10 7L2 6" })
2413
+ ]);
2414
+ }
2381
2415
  };
2382
2416
  const IconKeyRound = {
2383
- template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><circle cx="7.5" cy="15.5" r="5.5"/><path d="m21 2-9.6 9.6"/><path d="m15.5 7.5 3 3L22 7l-3-3"/></svg>`,
2384
- props: ["size"]
2417
+ props: ["size"],
2418
+ render() {
2419
+ return h("svg", {
2420
+ width: this.size,
2421
+ height: this.size,
2422
+ fill: "none",
2423
+ stroke: "currentColor",
2424
+ viewBox: "0 0 24 24"
2425
+ }, [
2426
+ h("circle", { cx: "7.5", cy: "15.5", r: "5.5" }),
2427
+ h("path", { d: "m21 2-9.6 9.6" }),
2428
+ h("path", { d: "m15.5 7.5 3 3L22 7l-3-3" })
2429
+ ]);
2430
+ }
2385
2431
  };
2386
2432
  const IconShield = {
2387
- template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>`,
2388
- props: ["size"]
2433
+ props: ["size"],
2434
+ render() {
2435
+ return h("svg", {
2436
+ width: this.size,
2437
+ height: this.size,
2438
+ fill: "none",
2439
+ stroke: "currentColor",
2440
+ viewBox: "0 0 24 24"
2441
+ }, [
2442
+ h("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" })
2443
+ ]);
2444
+ }
2389
2445
  };
2390
2446
  const IconCheckCircle = {
2391
- template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22,4 12,14.01 9,11.01"/></svg>`,
2392
- props: ["size"]
2447
+ props: ["size"],
2448
+ render() {
2449
+ return h("svg", {
2450
+ width: this.size,
2451
+ height: this.size,
2452
+ fill: "none",
2453
+ stroke: "currentColor",
2454
+ viewBox: "0 0 24 24"
2455
+ }, [
2456
+ h("path", { d: "M22 11.08V12a10 10 0 1 1-5.93-9.14" }),
2457
+ h("polyline", { points: "22,4 12,14.01 9,11.01" })
2458
+ ]);
2459
+ }
2393
2460
  };
2394
2461
  const IconAlertTriangle = {
2395
- template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4"/><path d="m12 17 .01 0"/></svg>`,
2396
- props: ["size"]
2462
+ props: ["size"],
2463
+ render() {
2464
+ return h("svg", {
2465
+ width: this.size,
2466
+ height: this.size,
2467
+ fill: "none",
2468
+ stroke: "currentColor",
2469
+ viewBox: "0 0 24 24"
2470
+ }, [
2471
+ h("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z" }),
2472
+ h("path", { d: "M12 9v4" }),
2473
+ h("path", { d: "m12 17 .01 0" })
2474
+ ]);
2475
+ }
2397
2476
  };
2398
2477
  const props = __props;
2399
2478
  const emit = __emit;
@@ -2486,6 +2565,13 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2486
2565
  verificationCode.value = value.replace(/\D/g, "").slice(0, 6);
2487
2566
  verificationError.value = "";
2488
2567
  };
2568
+ const onCodePaste = (event) => {
2569
+ event.preventDefault();
2570
+ const pastedData = event.clipboardData?.getData("text/plain") || "";
2571
+ const cleanedData = pastedData.replace(/\D/g, "").slice(0, 6);
2572
+ verificationCode.value = cleanedData;
2573
+ verificationError.value = "";
2574
+ };
2489
2575
  const onBackupCodeInput = (value) => {
2490
2576
  let cleaned = value.replace(/[^a-zA-Z0-9-]/g, "").toLowerCase();
2491
2577
  if (!/[-]/.test(cleaned) && cleaned.length > 4) {
@@ -2498,6 +2584,20 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2498
2584
  }
2499
2585
  backupCodeError.value = "";
2500
2586
  };
2587
+ const onBackupCodePaste = (event) => {
2588
+ event.preventDefault();
2589
+ const pastedData = event.clipboardData?.getData("text/plain") || "";
2590
+ let cleaned = pastedData.replace(/[^a-zA-Z0-9-]/g, "").toLowerCase();
2591
+ if (!/[-]/.test(cleaned) && cleaned.length > 4) {
2592
+ const part1 = cleaned.substring(0, 4);
2593
+ const part2 = cleaned.substring(4, 8);
2594
+ cleaned = part2 ? `${part1}-${part2}` : part1;
2595
+ }
2596
+ if (cleaned.replace(/-/g, "").length <= 8) {
2597
+ backupCode.value = cleaned;
2598
+ }
2599
+ backupCodeError.value = "";
2600
+ };
2501
2601
  const sendEmailCode = async () => {
2502
2602
  if (!selectedMethod.value || selectedMethod.value.device_type !== "email") return;
2503
2603
  try {
@@ -2639,8 +2739,8 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2639
2739
  }
2640
2740
  };
2641
2741
  return (_ctx, _cache) => {
2642
- return openBlock(), createElementBlock("div", _hoisted_1$k, [
2643
- createVNode(StrandsUiModal, {
2742
+ return openBlock(), createElementBlock("div", _hoisted_1$n, [
2743
+ createVNode(UiModal, {
2644
2744
  open: _ctx.show,
2645
2745
  "card-class": "mfa-verification-modal",
2646
2746
  class: "mfa-verification-modal-wrapper"
@@ -2652,7 +2752,7 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2652
2752
  ], -1)
2653
2753
  ])),
2654
2754
  footer: withCtx(() => [
2655
- createElementVNode("div", _hoisted_37$2, [
2755
+ createElementVNode("div", _hoisted_36$2, [
2656
2756
  createVNode(unref(StrandsUiButton), {
2657
2757
  variant: "secondary",
2658
2758
  onClick: closeModal,
@@ -2737,8 +2837,8 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2737
2837
  __: [8]
2738
2838
  }, 8, ["disabled", "loading"])
2739
2839
  ])) : createCommentVNode("", true),
2740
- selectedMethod.value?.device_type === "hardware" || selectedMethod.value?.device_type === "passkey" ? (openBlock(), createElementBlock("div", _hoisted_18$a, [
2741
- createElementVNode("div", _hoisted_19$7, [
2840
+ selectedMethod.value?.device_type === "hardware" || selectedMethod.value?.device_type === "passkey" ? (openBlock(), createElementBlock("div", _hoisted_18$9, [
2841
+ createElementVNode("div", _hoisted_19$6, [
2742
2842
  createElementVNode("div", _hoisted_20$6, [
2743
2843
  createElementVNode("div", _hoisted_21$5, [
2744
2844
  (openBlock(), createBlock(resolveDynamicComponent(selectedMethod.value.device_type === "passkey" ? IconShield : IconKeyRound), {
@@ -2799,14 +2899,27 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2799
2899
  error: backupCodeError.value,
2800
2900
  disabled: loading2.value,
2801
2901
  onInput: onBackupCodeInput,
2902
+ onPaste: onBackupCodePaste,
2802
2903
  onKeydown: withKeys(verifyBackupCode, ["enter"]),
2803
- class: "mfa-backup-input"
2904
+ class: "mfa-backup-input",
2905
+ name: "backup-code-1",
2906
+ autocomplete: "off",
2907
+ inputmode: "text",
2908
+ "data-lpignore": "false",
2909
+ "data-form-type": "other",
2910
+ spellcheck: "false"
2804
2911
  }, null, 8, ["modelValue", "error", "disabled"])
2805
2912
  ])) : createCommentVNode("", true)
2806
2913
  ])) : createCommentVNode("", true),
2807
- selectedMethod.value && selectedMethod.value.device_type !== "hardware" && selectedMethod.value.device_type !== "passkey" && (selectedMethod.value.device_type !== "email" || emailCodeSent.value) ? (openBlock(), createElementBlock("div", _hoisted_28$3, [
2808
- selectedMethod.value.device_type === "email" && emailCodeSent.value ? (openBlock(), createElementBlock("div", _hoisted_29$2, [
2809
- createElementVNode("div", _hoisted_30$2, [
2914
+ selectedMethod.value && selectedMethod.value.device_type !== "hardware" && selectedMethod.value.device_type !== "passkey" && (selectedMethod.value.device_type !== "email" || emailCodeSent.value) ? (openBlock(), createElementBlock("form", {
2915
+ key: 4,
2916
+ class: "mfa-code-section",
2917
+ onSubmit: withModifiers(verify, ["prevent"]),
2918
+ novalidate: "",
2919
+ autocomplete: "off"
2920
+ }, [
2921
+ selectedMethod.value.device_type === "email" && emailCodeSent.value ? (openBlock(), createElementBlock("div", _hoisted_28$3, [
2922
+ createElementVNode("div", _hoisted_29$2, [
2810
2923
  createVNode(IconCheckCircle, {
2811
2924
  size: 20,
2812
2925
  class: "mfa-email-confirmation-icon"
@@ -2827,16 +2940,31 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2827
2940
  disabled: loading2.value,
2828
2941
  onInput: onCodeInput,
2829
2942
  onKeydown: withKeys(verify, ["enter"]),
2943
+ onPaste: onCodePaste,
2830
2944
  autofocus: "",
2831
- name: selectedMethod.value.device_type === "totp" ? "totp" : "mfa-code",
2832
- autocomplete: selectedMethod.value.device_type === "totp" ? "one-time-code" : "one-time-code",
2833
- inputmode: "numeric"
2834
- }, null, 8, ["modelValue", "placeholder", "error", "disabled", "name", "autocomplete"]),
2835
- selectedMethod.value.device_type === "totp" ? (openBlock(), createElementBlock("div", _hoisted_31$2, [
2945
+ name: "totp",
2946
+ id: "totp-input",
2947
+ autocomplete: "one-time-code",
2948
+ inputmode: "numeric",
2949
+ "data-lpignore": "false",
2950
+ "data-form-type": "other",
2951
+ "data-bwignore": "false",
2952
+ "data-1p-ignore": "false",
2953
+ "data-testid": "totp-input",
2954
+ spellcheck: "false",
2955
+ "aria-label": "Enter your verification code",
2956
+ "aria-describedby": "totp-description",
2957
+ role: "textbox",
2958
+ tabindex: "0",
2959
+ pattern: "[0-9]{6}",
2960
+ minlength: "6",
2961
+ title: "Enter 6-digit verification code"
2962
+ }, null, 8, ["modelValue", "placeholder", "error", "disabled"]),
2963
+ selectedMethod.value.device_type === "totp" ? (openBlock(), createElementBlock("div", _hoisted_30$2, [
2836
2964
  _cache[12] || (_cache[12] = createTextVNode(" Open your authenticator app and enter the 6-digit code for ", -1)),
2837
- createElementVNode("span", _hoisted_32$2, '"' + toDisplayString(selectedMethod.value.device_name) + '"', 1)
2965
+ createElementVNode("span", _hoisted_31$2, '"' + toDisplayString(selectedMethod.value.device_name) + '"', 1)
2838
2966
  ])) : createCommentVNode("", true),
2839
- selectedMethod.value.device_type === "email" ? (openBlock(), createElementBlock("div", _hoisted_33$2, [
2967
+ selectedMethod.value.device_type === "email" ? (openBlock(), createElementBlock("div", _hoisted_32$2, [
2840
2968
  createVNode(unref(StrandsUiButton), {
2841
2969
  variant: "ghost",
2842
2970
  size: "sm",
@@ -2850,7 +2978,7 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2850
2978
  _: 1
2851
2979
  }, 8, ["disabled"])
2852
2980
  ])) : createCommentVNode("", true),
2853
- createElementVNode("div", _hoisted_34$2, [
2981
+ createElementVNode("div", _hoisted_33$2, [
2854
2982
  createVNode(unref(StrandsUiButton), {
2855
2983
  variant: "ghost",
2856
2984
  size: "sm",
@@ -2867,8 +2995,8 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2867
2995
  _: 1
2868
2996
  })
2869
2997
  ]),
2870
- showBackupCodeInput.value ? (openBlock(), createElementBlock("div", _hoisted_35$2, [
2871
- createElementVNode("div", _hoisted_36$2, [
2998
+ showBackupCodeInput.value ? (openBlock(), createElementBlock("div", _hoisted_34$2, [
2999
+ createElementVNode("div", _hoisted_35$2, [
2872
3000
  createVNode(IconAlertTriangle, {
2873
3001
  size: 20,
2874
3002
  class: "mfa-backup-warning-icon"
@@ -2886,11 +3014,18 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2886
3014
  error: backupCodeError.value,
2887
3015
  disabled: loading2.value,
2888
3016
  onInput: onBackupCodeInput,
3017
+ onPaste: onBackupCodePaste,
2889
3018
  onKeydown: withKeys(verifyBackupCode, ["enter"]),
2890
- class: "mfa-backup-input"
3019
+ class: "mfa-backup-input",
3020
+ name: "backup-code-2",
3021
+ autocomplete: "off",
3022
+ inputmode: "text",
3023
+ "data-lpignore": "false",
3024
+ "data-form-type": "other",
3025
+ spellcheck: "false"
2891
3026
  }, null, 8, ["modelValue", "error", "disabled"])
2892
3027
  ])) : createCommentVNode("", true)
2893
- ])) : createCommentVNode("", true)
3028
+ ], 32)) : createCommentVNode("", true)
2894
3029
  ]))
2895
3030
  ])
2896
3031
  ]),
@@ -2900,7 +3035,7 @@ const _sfc_main$l = /* @__PURE__ */ defineComponent({
2900
3035
  };
2901
3036
  }
2902
3037
  });
2903
- const StrandsMfaVerification = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["__scopeId", "data-v-d95e0731"]]);
3038
+ const StrandsMfaVerification = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["__scopeId", "data-v-8023293b"]]);
2904
3039
  function useOAuthProviders(options = {}) {
2905
3040
  const { getUrl, config } = useStrandsConfig();
2906
3041
  const providers = ref([]);
@@ -3030,7 +3165,7 @@ function useOAuthProviders(options = {}) {
3030
3165
  getProviderIcon
3031
3166
  };
3032
3167
  }
3033
- const _hoisted_1$j = { class: "accui-component-scope" };
3168
+ const _hoisted_1$m = { class: "accui-component-scope" };
3034
3169
  const _hoisted_2$h = { class: "auth-header" };
3035
3170
  const _hoisted_3$h = {
3036
3171
  key: 0,
@@ -3076,8 +3211,8 @@ const _hoisted_17$9 = {
3076
3211
  key: 0,
3077
3212
  class: "auth-back-link-container"
3078
3213
  };
3079
- const _hoisted_18$9 = { class: "auth-support-text" };
3080
- const _sfc_main$k = /* @__PURE__ */ defineComponent({
3214
+ const _hoisted_18$8 = { class: "auth-support-text" };
3215
+ const _sfc_main$n = /* @__PURE__ */ defineComponent({
3081
3216
  __name: "StrandsAuth",
3082
3217
  props: {
3083
3218
  mode: { default: "signin" },
@@ -3338,7 +3473,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
3338
3473
  element.style.overflow = "";
3339
3474
  };
3340
3475
  return (_ctx, _cache) => {
3341
- return openBlock(), createElementBlock("div", _hoisted_1$j, [
3476
+ return openBlock(), createElementBlock("div", _hoisted_1$m, [
3342
3477
  createElementVNode("div", {
3343
3478
  class: normalizeClass(props.inModal ? "auth-container-modal auth-full-width auth-min-width" : "auth-container auth-full-width auth-min-width auth-max-width auth-center auth-slide-up")
3344
3479
  }, [
@@ -3606,7 +3741,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
3606
3741
  name: "support-fade"
3607
3742
  }, {
3608
3743
  default: withCtx(() => [
3609
- createElementVNode("p", _hoisted_18$9, [
3744
+ createElementVNode("p", _hoisted_18$8, [
3610
3745
  _cache[12] || (_cache[12] = createTextVNode(" Need help? ", -1)),
3611
3746
  createVNode(unref(StrandsUiLink), {
3612
3747
  variant: "primary",
@@ -3638,8 +3773,51 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
3638
3773
  };
3639
3774
  }
3640
3775
  });
3641
- const StrandsAuth = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-ba0feb8a"]]);
3642
- const _hoisted_1$i = { class: "accui-component-scope" };
3776
+ const StrandsAuth = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["__scopeId", "data-v-ba0feb8a"]]);
3777
+ const _hoisted_1$l = {
3778
+ viewBox: "0 0 24 24",
3779
+ class: "accui-w-5 accui-h-5"
3780
+ };
3781
+ const _sfc_main$m = /* @__PURE__ */ defineComponent({
3782
+ __name: "IconGoogle",
3783
+ setup(__props) {
3784
+ return (_ctx, _cache) => {
3785
+ return openBlock(), createElementBlock("svg", _hoisted_1$l, _cache[0] || (_cache[0] = [
3786
+ createElementVNode("path", {
3787
+ fill: "#4285F4",
3788
+ d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
3789
+ }, null, -1),
3790
+ createElementVNode("path", {
3791
+ fill: "#34A853",
3792
+ d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
3793
+ }, null, -1),
3794
+ createElementVNode("path", {
3795
+ fill: "#FBBC05",
3796
+ d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
3797
+ }, null, -1),
3798
+ createElementVNode("path", {
3799
+ fill: "#EA4335",
3800
+ d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
3801
+ }, null, -1)
3802
+ ]));
3803
+ };
3804
+ }
3805
+ });
3806
+ const _hoisted_1$k = {
3807
+ class: "accui-w-5 accui-h-5 accui-fill-current",
3808
+ viewBox: "0 0 24 24"
3809
+ };
3810
+ const _sfc_main$l = /* @__PURE__ */ defineComponent({
3811
+ __name: "IconGithub",
3812
+ setup(__props) {
3813
+ return (_ctx, _cache) => {
3814
+ return openBlock(), createElementBlock("svg", _hoisted_1$k, _cache[0] || (_cache[0] = [
3815
+ createElementVNode("path", { d: "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" }, null, -1)
3816
+ ]));
3817
+ };
3818
+ }
3819
+ });
3820
+ const _hoisted_1$j = { class: "accui-component-scope" };
3643
3821
  const _hoisted_2$g = { class: "accui-w-full accui-min-w-100 accui-max-w-md accui-mx-auto accui-animate-slide-up" };
3644
3822
  const _hoisted_3$g = {
3645
3823
  key: 0,
@@ -3652,33 +3830,23 @@ const _hoisted_5$e = {
3652
3830
  };
3653
3831
  const _hoisted_6$c = ["src", "alt"];
3654
3832
  const _hoisted_7$c = {
3655
- key: 1,
3656
- viewBox: "0 0 24 24",
3657
- class: "accui-w-5 accui-h-5"
3658
- };
3659
- const _hoisted_8$c = {
3660
- key: 2,
3661
- class: "accui-w-5 accui-h-5 accui-fill-current",
3662
- viewBox: "0 0 24 24"
3663
- };
3664
- const _hoisted_9$b = {
3665
3833
  key: 3,
3666
3834
  class: "accui-w-5 accui-h-5 accui-rounded-full accui-bg-neutral-300 accui-flex accui-items-center accui-justify-center"
3667
3835
  };
3668
- const _hoisted_10$a = { class: "accui-text-xs accui-font-semibold accui-text-neutral-600" };
3669
- const _hoisted_11$a = { class: "accui-font-medium" };
3670
- const _hoisted_12$a = {
3836
+ const _hoisted_8$c = { class: "accui-text-xs accui-font-semibold accui-text-neutral-600" };
3837
+ const _hoisted_9$b = { class: "accui-font-medium" };
3838
+ const _hoisted_10$a = {
3671
3839
  key: 1,
3672
3840
  class: "divider-with-text"
3673
3841
  };
3674
- const _hoisted_13$a = { class: "email-field-spacing has-password" };
3675
- const _hoisted_14$a = { class: "accui-mb-4" };
3676
- const _hoisted_15$9 = { class: "accui-text-center accui-mt-4" };
3677
- const _hoisted_16$9 = { class: "accui-mt-8 accui-text-center" };
3678
- const _hoisted_17$8 = { class: "accui-text-sm accui-text-neutral-600" };
3679
- const _hoisted_18$8 = { key: 0 };
3680
- const _hoisted_19$6 = { class: "accui-text-neutral-400 accui-text-sm" };
3681
- const _sfc_main$j = /* @__PURE__ */ defineComponent({
3842
+ const _hoisted_11$a = { class: "email-field-spacing has-password" };
3843
+ const _hoisted_12$a = { class: "accui-mb-4" };
3844
+ const _hoisted_13$a = { class: "accui-text-center accui-mt-4" };
3845
+ const _hoisted_14$a = { class: "accui-mt-8 accui-text-center" };
3846
+ const _hoisted_15$9 = { class: "accui-text-sm accui-text-neutral-600" };
3847
+ const _hoisted_16$9 = { key: 0 };
3848
+ const _hoisted_17$8 = { class: "accui-text-neutral-400 accui-text-sm" };
3849
+ const _sfc_main$k = /* @__PURE__ */ defineComponent({
3682
3850
  __name: "StrandsSignIn",
3683
3851
  props: {
3684
3852
  redirectUrl: {},
@@ -3766,7 +3934,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
3766
3934
  }
3767
3935
  };
3768
3936
  return (_ctx, _cache) => {
3769
- return openBlock(), createElementBlock("div", _hoisted_1$i, [
3937
+ return openBlock(), createElementBlock("div", _hoisted_1$j, [
3770
3938
  createElementVNode("div", _hoisted_2$g, [
3771
3939
  createVNode(unref(StrandsUiCard), { variant: "modern" }, {
3772
3940
  default: withCtx(() => [
@@ -3775,8 +3943,10 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
3775
3943
  createElementVNode("p", { class: "accui-text-neutral-600" }, "Sign in to your account to continue")
3776
3944
  ], -1)),
3777
3945
  unref(enabledProviders)?.length ? (openBlock(), createElementBlock("div", _hoisted_3$g, [
3778
- (openBlock(true), createElementBlock(Fragment, null, renderList(unref(enabledProviders), (provider) => {
3779
- return openBlock(), createBlock(unref(StrandsUiButton), {
3946
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(enabledProviders), (provider, __, ___, _cached) => {
3947
+ const _memo = [provider.id, provider.name, provider.displayName, unref(oauthLoading)];
3948
+ if (_cached && _cached.key === provider.id && isMemoSame(_cached, _memo)) return _cached;
3949
+ const _item = (openBlock(), createBlock(unref(StrandsUiButton), {
3780
3950
  key: provider.id,
3781
3951
  variant: "outline",
3782
3952
  "full-width": "",
@@ -3792,36 +3962,19 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
3792
3962
  alt: `${provider.displayName || provider.name} icon`,
3793
3963
  class: "accui-w-5 accui-h-5"
3794
3964
  }, null, 8, _hoisted_6$c)
3795
- ])) : provider.id === "google" ? (openBlock(), createElementBlock("svg", _hoisted_7$c, _cache[5] || (_cache[5] = [
3796
- createElementVNode("path", {
3797
- fill: "#4285F4",
3798
- d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
3799
- }, null, -1),
3800
- createElementVNode("path", {
3801
- fill: "#34A853",
3802
- d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
3803
- }, null, -1),
3804
- createElementVNode("path", {
3805
- fill: "#FBBC05",
3806
- d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
3807
- }, null, -1),
3808
- createElementVNode("path", {
3809
- fill: "#EA4335",
3810
- d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
3811
- }, null, -1)
3812
- ]))) : provider.id === "github" ? (openBlock(), createElementBlock("svg", _hoisted_8$c, _cache[6] || (_cache[6] = [
3813
- createElementVNode("path", { d: "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" }, null, -1)
3814
- ]))) : (openBlock(), createElementBlock("div", _hoisted_9$b, [
3815
- createElementVNode("span", _hoisted_10$a, toDisplayString((provider.displayName || provider.name).charAt(0).toUpperCase()), 1)
3965
+ ])) : provider.id === "google" ? (openBlock(), createBlock(unref(_sfc_main$m), { key: 1 })) : provider.id === "github" ? (openBlock(), createBlock(unref(_sfc_main$l), { key: 2 })) : (openBlock(), createElementBlock("div", _hoisted_7$c, [
3966
+ createElementVNode("span", _hoisted_8$c, toDisplayString((provider.displayName || provider.name).charAt(0).toUpperCase()), 1)
3816
3967
  ]))
3817
3968
  ]),
3818
- createElementVNode("span", _hoisted_11$a, "Continue with " + toDisplayString(provider.displayName || provider.name), 1)
3969
+ createElementVNode("span", _hoisted_9$b, "Continue with " + toDisplayString(provider.displayName || provider.name), 1)
3819
3970
  ]),
3820
3971
  _: 2
3821
- }, 1032, ["disabled", "onClick"]);
3822
- }), 128))
3972
+ }, 1032, ["disabled", "onClick"]));
3973
+ _item.memo = _memo;
3974
+ return _item;
3975
+ }, _cache, 0), 128))
3823
3976
  ])) : createCommentVNode("", true),
3824
- unref(enabledProviders)?.length ? (openBlock(), createElementBlock("div", _hoisted_12$a, _cache[7] || (_cache[7] = [
3977
+ unref(enabledProviders)?.length ? (openBlock(), createElementBlock("div", _hoisted_10$a, _cache[7] || (_cache[7] = [
3825
3978
  createElementVNode("span", { class: "divider-text" }, "Or sign in with email", -1)
3826
3979
  ]))) : createCommentVNode("", true),
3827
3980
  createElementVNode("form", {
@@ -3829,11 +3982,11 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
3829
3982
  class: "accui-gap-6 accui-flex accui-flex-col"
3830
3983
  }, [
3831
3984
  createElementVNode("div", null, [
3832
- createElementVNode("div", _hoisted_13$a, [
3985
+ createElementVNode("div", _hoisted_11$a, [
3833
3986
  createVNode(unref(StrandsUiInput), {
3834
3987
  id: "email",
3835
3988
  modelValue: form.email,
3836
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => form.email = $event),
3989
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => form.email = $event),
3837
3990
  type: "email",
3838
3991
  label: "Email address",
3839
3992
  placeholder: "Enter your email address",
@@ -3842,12 +3995,12 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
3842
3995
  error: error.value ? "Invalid email or password" : void 0
3843
3996
  }, null, 8, ["modelValue", "error"])
3844
3997
  ]),
3845
- createElementVNode("div", _hoisted_14$a, [
3998
+ createElementVNode("div", _hoisted_12$a, [
3846
3999
  _cache[8] || (_cache[8] = createElementVNode("span", { class: "accui-text-sm accui-font-medium accui-text-neutral-700 accui-block accui-mb-2" }, "Password", -1)),
3847
4000
  createVNode(unref(StrandsUiInput), {
3848
4001
  id: "password",
3849
4002
  modelValue: form.password,
3850
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => form.password = $event),
4003
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => form.password = $event),
3851
4004
  type: "password",
3852
4005
  placeholder: "Enter your password",
3853
4006
  autocomplete: "current-password",
@@ -3871,9 +4024,9 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
3871
4024
  __: [9]
3872
4025
  }, 8, ["disabled", "loading"])
3873
4026
  ], 32),
3874
- createElementVNode("div", _hoisted_15$9, [
4027
+ createElementVNode("div", _hoisted_13$a, [
3875
4028
  createVNode(unref(StrandsUiLink), {
3876
- onClick: _cache[2] || (_cache[2] = ($event) => _ctx.$emit("forgot-password")),
4029
+ onClick: _cache[4] || (_cache[4] = ($event) => _ctx.$emit("forgot-password")),
3877
4030
  class: "accui-text-sm"
3878
4031
  }, {
3879
4032
  default: withCtx(() => _cache[10] || (_cache[10] = [
@@ -3889,13 +4042,13 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
3889
4042
  message: error.value,
3890
4043
  class: "accui-mt-6 accui-animate-fade-in",
3891
4044
  dismissible: "",
3892
- onDismiss: _cache[3] || (_cache[3] = ($event) => error.value = "")
4045
+ onDismiss: _cache[5] || (_cache[5] = ($event) => error.value = "")
3893
4046
  }, null, 8, ["message"])) : createCommentVNode("", true),
3894
- createElementVNode("div", _hoisted_16$9, [
3895
- createElementVNode("p", _hoisted_17$8, [
4047
+ createElementVNode("div", _hoisted_14$a, [
4048
+ createElementVNode("p", _hoisted_15$9, [
3896
4049
  _cache[12] || (_cache[12] = createTextVNode(" Don't have an account? ", -1)),
3897
4050
  createVNode(unref(StrandsUiLink), {
3898
- onClick: _cache[4] || (_cache[4] = ($event) => _ctx.$emit("switch-to-signup"))
4051
+ onClick: _cache[6] || (_cache[6] = ($event) => _ctx.$emit("switch-to-signup"))
3899
4052
  }, {
3900
4053
  default: withCtx(() => _cache[11] || (_cache[11] = [
3901
4054
  createTextVNode(" Sign up ", -1)
@@ -3909,8 +4062,8 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
3909
4062
  config: props.config
3910
4063
  }, {
3911
4064
  default: withCtx(() => [
3912
- unref(getSupportEmail)() ? (openBlock(), createElementBlock("div", _hoisted_18$8, [
3913
- createElementVNode("p", _hoisted_19$6, [
4065
+ unref(getSupportEmail)() ? (openBlock(), createElementBlock("div", _hoisted_16$9, [
4066
+ createElementVNode("p", _hoisted_17$8, [
3914
4067
  _cache[14] || (_cache[14] = createTextVNode(" Need help? ", -1)),
3915
4068
  createVNode(unref(StrandsUiLink), {
3916
4069
  variant: "primary",
@@ -3944,8 +4097,8 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
3944
4097
  };
3945
4098
  }
3946
4099
  });
3947
- const StrandsSignIn = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-87adc9ee"]]);
3948
- const _hoisted_1$h = { class: "accui-component-scope" };
4100
+ const StrandsSignIn = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-e48ce4b7"]]);
4101
+ const _hoisted_1$i = { class: "accui-component-scope" };
3949
4102
  const _hoisted_2$f = { class: "signup-container" };
3950
4103
  const _hoisted_3$f = { class: "signup-success" };
3951
4104
  const _hoisted_4$e = { class: "signup-success-title" };
@@ -3995,7 +4148,7 @@ const _hoisted_21$4 = { class: "signup-signin-link" };
3995
4148
  const _hoisted_22$4 = { class: "signup-signin-text" };
3996
4149
  const _hoisted_23$3 = { key: 0 };
3997
4150
  const _hoisted_24$3 = { class: "signup-support-text" };
3998
- const _sfc_main$i = /* @__PURE__ */ defineComponent({
4151
+ const _sfc_main$j = /* @__PURE__ */ defineComponent({
3999
4152
  __name: "StrandsSignUp",
4000
4153
  props: {
4001
4154
  redirectUrl: {},
@@ -4121,7 +4274,7 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
4121
4274
  }
4122
4275
  };
4123
4276
  return (_ctx, _cache) => {
4124
- return openBlock(), createElementBlock("div", _hoisted_1$h, [
4277
+ return openBlock(), createElementBlock("div", _hoisted_1$i, [
4125
4278
  createElementVNode("div", _hoisted_2$f, [
4126
4279
  signupSuccess.value ? (openBlock(), createBlock(unref(StrandsUiCard), {
4127
4280
  key: 0,
@@ -4300,8 +4453,8 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
4300
4453
  };
4301
4454
  }
4302
4455
  });
4303
- const StrandsSignUp = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-ab42f1ba"]]);
4304
- const _hoisted_1$g = { class: "accui-component-scope" };
4456
+ const StrandsSignUp = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-ab42f1ba"]]);
4457
+ const _hoisted_1$h = { class: "accui-component-scope" };
4305
4458
  const _hoisted_2$e = {
4306
4459
  key: 0,
4307
4460
  class: "complete-signup-container"
@@ -4333,7 +4486,7 @@ const _hoisted_13$8 = {
4333
4486
  class: "complete-signup-container"
4334
4487
  };
4335
4488
  const _hoisted_14$8 = { class: "complete-signup-warning" };
4336
- const _sfc_main$h = /* @__PURE__ */ defineComponent({
4489
+ const _sfc_main$i = /* @__PURE__ */ defineComponent({
4337
4490
  __name: "StrandsCompleteSignUp",
4338
4491
  props: {
4339
4492
  token: {},
@@ -4414,11 +4567,15 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
4414
4567
  }
4415
4568
  loading2.value = true;
4416
4569
  try {
4570
+ const headers = {
4571
+ "Content-Type": "application/json"
4572
+ };
4573
+ if (typeof window !== "undefined" && window.location) {
4574
+ headers["Origin"] = window.location.origin;
4575
+ }
4417
4576
  const response = await fetch(getUrl("completeRegistration"), {
4418
4577
  method: "POST",
4419
- headers: {
4420
- "Content-Type": "application/json"
4421
- },
4578
+ headers,
4422
4579
  body: JSON.stringify({
4423
4580
  token: props.token,
4424
4581
  password: form.password,
@@ -4463,7 +4620,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
4463
4620
  }
4464
4621
  };
4465
4622
  return (_ctx, _cache) => {
4466
- return openBlock(), createElementBlock("div", _hoisted_1$g, [
4623
+ return openBlock(), createElementBlock("div", _hoisted_1$h, [
4467
4624
  registrationComplete.value ? (openBlock(), createElementBlock("div", _hoisted_2$e, [
4468
4625
  createVNode(unref(StrandsUiCard), { variant: "modern" }, {
4469
4626
  default: withCtx(() => [
@@ -4645,8 +4802,8 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
4645
4802
  };
4646
4803
  }
4647
4804
  });
4648
- const StrandsCompleteSignUp = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-b08a9ea5"]]);
4649
- const _hoisted_1$f = { class: "accui-component-scope" };
4805
+ const StrandsCompleteSignUp = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-558285a4"]]);
4806
+ const _hoisted_1$g = { class: "accui-component-scope" };
4650
4807
  const _hoisted_2$d = {
4651
4808
  key: 0,
4652
4809
  class: "step-container"
@@ -4687,7 +4844,7 @@ const _hoisted_17$6 = { class: "totp-setup-backup-grid-wrapper" };
4687
4844
  const _hoisted_18$6 = { class: "totp-setup-backup-grid" };
4688
4845
  const _hoisted_19$4 = { class: "totp-setup-backup-actions" };
4689
4846
  const _hoisted_20$4 = { class: "totp-setup-final-actions" };
4690
- const _sfc_main$g = /* @__PURE__ */ defineComponent({
4847
+ const _sfc_main$h = /* @__PURE__ */ defineComponent({
4691
4848
  __name: "StrandsTotpSetupModal",
4692
4849
  props: {
4693
4850
  show: { type: Boolean }
@@ -4772,8 +4929,8 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
4772
4929
  emit("success");
4773
4930
  };
4774
4931
  return (_ctx, _cache) => {
4775
- return openBlock(), createElementBlock("div", _hoisted_1$f, [
4776
- createVNode(StrandsUiModal, {
4932
+ return openBlock(), createElementBlock("div", _hoisted_1$g, [
4933
+ createVNode(UiModal, {
4777
4934
  open: _ctx.show,
4778
4935
  onClose: closeModal,
4779
4936
  "card-class": "modal-card"
@@ -5028,8 +5185,8 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
5028
5185
  };
5029
5186
  }
5030
5187
  });
5031
- const StrandsTotpSetupModal = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-d3ba73e3"]]);
5032
- const _hoisted_1$e = { class: "accui-component-scope" };
5188
+ const StrandsTotpSetupModal = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-d3ba73e3"]]);
5189
+ const _hoisted_1$f = { class: "accui-component-scope" };
5033
5190
  const _hoisted_2$c = {
5034
5191
  key: 0,
5035
5192
  class: "email-mfa-setup-step"
@@ -5046,7 +5203,7 @@ const _hoisted_7$8 = {
5046
5203
  class: "email-mfa-setup-step"
5047
5204
  };
5048
5205
  const _hoisted_8$8 = { class: "email-mfa-setup-final-actions" };
5049
- const _sfc_main$f = /* @__PURE__ */ defineComponent({
5206
+ const _sfc_main$g = /* @__PURE__ */ defineComponent({
5050
5207
  __name: "StrandsEmailMfaSetupModal",
5051
5208
  props: {
5052
5209
  show: { type: Boolean }
@@ -5154,8 +5311,8 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
5154
5311
  emit("success");
5155
5312
  };
5156
5313
  return (_ctx, _cache) => {
5157
- return openBlock(), createElementBlock("div", _hoisted_1$e, [
5158
- createVNode(StrandsUiModal, {
5314
+ return openBlock(), createElementBlock("div", _hoisted_1$f, [
5315
+ createVNode(UiModal, {
5159
5316
  open: _ctx.show,
5160
5317
  onClose: closeModal,
5161
5318
  "card-class": "email-mfa-setup-modal"
@@ -5374,8 +5531,8 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
5374
5531
  };
5375
5532
  }
5376
5533
  });
5377
- const StrandsEmailMfaSetupModal = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-188dcefe"]]);
5378
- const _hoisted_1$d = { class: "accui-component-scope" };
5534
+ const StrandsEmailMfaSetupModal = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-188dcefe"]]);
5535
+ const _hoisted_1$e = { class: "accui-component-scope" };
5379
5536
  const _hoisted_2$b = {
5380
5537
  key: 0,
5381
5538
  class: "hardware-key-setup-step"
@@ -5412,7 +5569,7 @@ const _hoisted_19$3 = {
5412
5569
  const _hoisted_20$3 = { class: "hardware-key-setup-error" };
5413
5570
  const _hoisted_21$3 = { class: "hardware-key-setup-error-message" };
5414
5571
  const _hoisted_22$3 = { class: "hardware-key-setup-actions" };
5415
- const _sfc_main$e = /* @__PURE__ */ defineComponent({
5572
+ const _sfc_main$f = /* @__PURE__ */ defineComponent({
5416
5573
  __name: "StrandsHardwareKeySetupModal",
5417
5574
  props: {
5418
5575
  show: { type: Boolean },
@@ -5677,8 +5834,8 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
5677
5834
  emit("success");
5678
5835
  };
5679
5836
  return (_ctx, _cache) => {
5680
- return openBlock(), createElementBlock("div", _hoisted_1$d, [
5681
- createVNode(StrandsUiModal, {
5837
+ return openBlock(), createElementBlock("div", _hoisted_1$e, [
5838
+ createVNode(UiModal, {
5682
5839
  open: _ctx.show,
5683
5840
  onClose: closeModal,
5684
5841
  "card-class": "hardware-key-setup-modal"
@@ -5986,8 +6143,8 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
5986
6143
  };
5987
6144
  }
5988
6145
  });
5989
- const StrandsHardwareKeySetupModal = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-4bb5b430"]]);
5990
- const _hoisted_1$c = { class: "accui-component-scope" };
6146
+ const StrandsHardwareKeySetupModal = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-4bb5b430"]]);
6147
+ const _hoisted_1$d = { class: "accui-component-scope" };
5991
6148
  const _hoisted_2$a = {
5992
6149
  key: 0,
5993
6150
  class: "backup-codes-loading"
@@ -6015,7 +6172,7 @@ const _hoisted_14$5 = {
6015
6172
  };
6016
6173
  const _hoisted_15$5 = { class: "backup-codes-regenerate-content" };
6017
6174
  const _hoisted_16$5 = { class: "backup-codes-regenerate-actions" };
6018
- const _sfc_main$d = /* @__PURE__ */ defineComponent({
6175
+ const _sfc_main$e = /* @__PURE__ */ defineComponent({
6019
6176
  __name: "StrandsBackupCodesModal",
6020
6177
  props: {
6021
6178
  show: { type: Boolean },
@@ -6098,8 +6255,8 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
6098
6255
  URL.revokeObjectURL(url);
6099
6256
  };
6100
6257
  return (_ctx, _cache) => {
6101
- return openBlock(), createElementBlock("div", _hoisted_1$c, [
6102
- createVNode(StrandsUiModal, {
6258
+ return openBlock(), createElementBlock("div", _hoisted_1$d, [
6259
+ createVNode(UiModal, {
6103
6260
  open: _ctx.show,
6104
6261
  onClose: closeModal,
6105
6262
  "card-class": "backup-codes-modal"
@@ -6281,12 +6438,12 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
6281
6438
  };
6282
6439
  }
6283
6440
  });
6284
- const StrandsBackupCodesModal = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-ab2930f9"]]);
6285
- const _hoisted_1$b = { class: "accui-component-scope" };
6441
+ const StrandsBackupCodesModal = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-ab2930f9"]]);
6442
+ const _hoisted_1$c = { class: "accui-component-scope" };
6286
6443
  const _hoisted_2$9 = { class: "confirm-modal-title" };
6287
6444
  const _hoisted_3$9 = { class: "confirm-modal-message" };
6288
6445
  const _hoisted_4$8 = { class: "confirm-modal-actions" };
6289
- const _sfc_main$c = /* @__PURE__ */ defineComponent({
6446
+ const _sfc_main$d = /* @__PURE__ */ defineComponent({
6290
6447
  __name: "StrandsConfirmModal",
6291
6448
  props: {
6292
6449
  show: { type: Boolean },
@@ -6308,8 +6465,8 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
6308
6465
  emit("cancel");
6309
6466
  };
6310
6467
  return (_ctx, _cache) => {
6311
- return openBlock(), createElementBlock("div", _hoisted_1$b, [
6312
- createVNode(StrandsUiModal, {
6468
+ return openBlock(), createElementBlock("div", _hoisted_1$c, [
6469
+ createVNode(UiModal, {
6313
6470
  open: _ctx.show,
6314
6471
  "card-class": "confirm-modal"
6315
6472
  }, {
@@ -6348,8 +6505,8 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
6348
6505
  };
6349
6506
  }
6350
6507
  });
6351
- const StrandsConfirmModal = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-22fcdfc7"]]);
6352
- const _hoisted_1$a = { class: "accui-component-scope" };
6508
+ const StrandsConfirmModal = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-22fcdfc7"]]);
6509
+ const _hoisted_1$b = { class: "accui-component-scope" };
6353
6510
  const _hoisted_2$8 = {
6354
6511
  key: 0,
6355
6512
  class: "mfa-loading"
@@ -6398,18 +6555,90 @@ const _hoisted_25$2 = { class: "mfa-device-card-name" };
6398
6555
  const _hoisted_26$2 = { class: "mfa-device-card-type" };
6399
6556
  const _hoisted_27$2 = { class: "mfa-device-card-last-used" };
6400
6557
  const _hoisted_28$2 = { class: "mfa-device-card-actions" };
6401
- const _sfc_main$b = /* @__PURE__ */ defineComponent({
6558
+ const _sfc_main$c = /* @__PURE__ */ defineComponent({
6402
6559
  __name: "StrandsMfaModal",
6403
6560
  props: {
6404
6561
  show: { type: Boolean }
6405
6562
  },
6406
6563
  emits: ["close", "mfa-updated"],
6407
6564
  setup(__props, { emit: __emit }) {
6408
- const Smartphone = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg>`, props: ["size"] };
6409
- const Mail = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="m4 4 16 0c1.1 0 2 .9 2 2l0 12c0 1.1-.9 2-2 2l-16 0c-1.1 0-2-.9-2-2l0-12c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>`, props: ["size"] };
6410
- const KeyRound = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"/><circle cx="16.5" cy="7.5" r=".5" fill="currentColor"/></svg>`, props: ["size"] };
6411
- const Shield = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/></svg>`, props: ["size"] };
6412
- const Trash2 = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="m3 6 18 0"/><path d="m19 6-1 14c0 1-1 2-2 2l-8 0c-1 0-2-1-2-2l-1-14"/><path d="m8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"/><line x1="10" x2="10" y1="11" y2="17"/><line x1="14" x2="14" y1="11" y2="17"/></svg>`, props: ["size"] };
6565
+ const Smartphone = {
6566
+ props: { size: { type: [String, Number], default: 24 } },
6567
+ render() {
6568
+ return h("svg", {
6569
+ width: this.size,
6570
+ height: this.size,
6571
+ fill: "none",
6572
+ stroke: "currentColor",
6573
+ viewBox: "0 0 24 24"
6574
+ }, [
6575
+ h("rect", { x: "5", y: "2", width: "14", height: "20", rx: "2", ry: "2" }),
6576
+ h("line", { x1: "12", y1: "18", x2: "12.01", y2: "18" })
6577
+ ]);
6578
+ }
6579
+ };
6580
+ const Mail = {
6581
+ props: { size: { type: [String, Number], default: 24 } },
6582
+ render() {
6583
+ return h("svg", {
6584
+ width: this.size,
6585
+ height: this.size,
6586
+ fill: "none",
6587
+ stroke: "currentColor",
6588
+ viewBox: "0 0 24 24"
6589
+ }, [
6590
+ h("path", { d: "m4 4 16 0c1.1 0 2 .9 2 2l0 12c0 1.1-.9 2-2 2l-16 0c-1.1 0-2-.9-2-2l0-12c0-1.1.9-2 2-2z" }),
6591
+ h("polyline", { points: "22,6 12,13 2,6" })
6592
+ ]);
6593
+ }
6594
+ };
6595
+ const KeyRound = {
6596
+ props: { size: { type: [String, Number], default: 24 } },
6597
+ render() {
6598
+ return h("svg", {
6599
+ width: this.size,
6600
+ height: this.size,
6601
+ fill: "none",
6602
+ stroke: "currentColor",
6603
+ viewBox: "0 0 24 24"
6604
+ }, [
6605
+ h("path", { d: "M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z" }),
6606
+ h("circle", { cx: "16.5", cy: "7.5", r: ".5", fill: "currentColor" })
6607
+ ]);
6608
+ }
6609
+ };
6610
+ const Shield = {
6611
+ props: { size: { type: [String, Number], default: 24 } },
6612
+ render() {
6613
+ return h("svg", {
6614
+ width: this.size,
6615
+ height: this.size,
6616
+ fill: "none",
6617
+ stroke: "currentColor",
6618
+ viewBox: "0 0 24 24"
6619
+ }, [
6620
+ h("path", { d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" })
6621
+ ]);
6622
+ }
6623
+ };
6624
+ const Trash2 = {
6625
+ props: { size: { type: [String, Number], default: 24 } },
6626
+ render() {
6627
+ return h("svg", {
6628
+ width: this.size,
6629
+ height: this.size,
6630
+ fill: "none",
6631
+ stroke: "currentColor",
6632
+ viewBox: "0 0 24 24"
6633
+ }, [
6634
+ h("path", { d: "m3 6 18 0" }),
6635
+ h("path", { d: "m19 6-1 14c0 1-1 2-2 2l-8 0c-1 0-2-1-2-2l-1-14" }),
6636
+ h("path", { d: "m8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" }),
6637
+ h("line", { x1: "10", x2: "10", y1: "11", y2: "17" }),
6638
+ h("line", { x1: "14", x2: "14", y1: "11", y2: "17" })
6639
+ ]);
6640
+ }
6641
+ };
6413
6642
  const props = __props;
6414
6643
  const emit = __emit;
6415
6644
  const {
@@ -6531,8 +6760,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
6531
6760
  }
6532
6761
  };
6533
6762
  return (_ctx, _cache) => {
6534
- return openBlock(), createElementBlock("div", _hoisted_1$a, [
6535
- createVNode(StrandsUiModal, {
6763
+ return openBlock(), createElementBlock("div", _hoisted_1$b, [
6764
+ createVNode(UiModal, {
6536
6765
  open: showModal.value,
6537
6766
  onClose: closeModal,
6538
6767
  "card-class": "mfa-modal-card"
@@ -6808,8 +7037,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
6808
7037
  };
6809
7038
  }
6810
7039
  });
6811
- const StrandsMfaModal = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-7b615ace"]]);
6812
- const _hoisted_1$9 = { class: "accui-component-scope" };
7040
+ const StrandsMfaModal = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-d3be8e53"]]);
7041
+ const _hoisted_1$a = { class: "accui-component-scope" };
6813
7042
  const _hoisted_2$7 = { class: "settings-header" };
6814
7043
  const _hoisted_3$7 = { class: "settings-content" };
6815
7044
  const _hoisted_4$6 = { class: "settings-section" };
@@ -6818,7 +7047,7 @@ const _hoisted_6$4 = { class: "settings-option-content" };
6818
7047
  const _hoisted_7$4 = { class: "settings-option" };
6819
7048
  const _hoisted_8$4 = { class: "settings-option-content" };
6820
7049
  const _hoisted_9$4 = { class: "settings-footer" };
6821
- const _sfc_main$a = /* @__PURE__ */ defineComponent({
7050
+ const _sfc_main$b = /* @__PURE__ */ defineComponent({
6822
7051
  __name: "StrandsSettingsModal",
6823
7052
  props: {
6824
7053
  open: { type: Boolean, default: false }
@@ -6858,8 +7087,8 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
6858
7087
  }
6859
7088
  };
6860
7089
  return (_ctx, _cache) => {
6861
- return openBlock(), createElementBlock("div", _hoisted_1$9, [
6862
- createVNode(StrandsUiModal, {
7090
+ return openBlock(), createElementBlock("div", _hoisted_1$a, [
7091
+ createVNode(UiModal, {
6863
7092
  open: true,
6864
7093
  onClose: _cache[6] || (_cache[6] = ($event) => _ctx.$emit("close")),
6865
7094
  "card-class": "max-w-lg"
@@ -6963,8 +7192,8 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
6963
7192
  };
6964
7193
  }
6965
7194
  });
6966
- const StrandsSettingsModal = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-f0e4ff21"]]);
6967
- const _hoisted_1$8 = { class: "modal-header-content" };
7195
+ const StrandsSettingsModal = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-f0e4ff21"]]);
7196
+ const _hoisted_1$9 = { class: "modal-header-content" };
6968
7197
  const _hoisted_2$6 = { class: "modal-subtitle" };
6969
7198
  const _hoisted_3$6 = { class: "strands-sessions-modal" };
6970
7199
  const _hoisted_4$5 = {
@@ -7026,34 +7255,136 @@ const _hoisted_37$1 = {
7026
7255
  class: "bulk-actions"
7027
7256
  };
7028
7257
  const _hoisted_38$1 = { key: 1 };
7029
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
7258
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
7030
7259
  __name: "StrandsSessionsModal",
7031
7260
  props: {
7032
7261
  modelValue: { type: Boolean }
7033
7262
  },
7034
7263
  emits: ["update:modelValue", "sessionsUpdated", "currentSessionRevoked"],
7035
7264
  setup(__props, { emit: __emit }) {
7036
- const Monitor = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><rect x="2" y="7" width="20" height="10" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>`, props: ["size"] };
7037
- const Smartphone = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg>`, props: ["size"] };
7038
- const Tablet = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg>`, props: ["size"] };
7039
- const MapPin = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>`, props: ["size"] };
7040
- const Globe = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z"/></svg>`, props: ["size"] };
7041
- const Clock = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>`, props: ["size"] };
7042
- const Calendar = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg>`, props: ["size"] };
7043
- const props = __props;
7044
- const emit = __emit;
7045
- const { getUserSessions, getSessionStats, revokeSession, revokeAllOtherSessions, signOut } = useStrandsAuth();
7046
- const visible = ref(props.modelValue);
7047
- const loading2 = ref(false);
7048
- const sessions = ref([]);
7049
- const stats = ref(null);
7050
- const revokingSession = ref(null);
7051
- const revokingAll = ref(false);
7052
- const error = ref(null);
7053
- watch(() => props.modelValue, (newVal) => {
7054
- visible.value = newVal;
7055
- if (newVal) {
7056
- loadSessions();
7265
+ const Monitor = {
7266
+ props: ["size"],
7267
+ render() {
7268
+ return h("svg", {
7269
+ width: this.size,
7270
+ height: this.size,
7271
+ fill: "none",
7272
+ stroke: "currentColor",
7273
+ viewBox: "0 0 24 24"
7274
+ }, [
7275
+ h("rect", { x: "2", y: "7", width: "20", height: "10", rx: "2", ry: "2" }),
7276
+ h("line", { x1: "8", y1: "21", x2: "16", y2: "21" }),
7277
+ h("line", { x1: "12", y1: "17", x2: "12", y2: "21" })
7278
+ ]);
7279
+ }
7280
+ };
7281
+ const Smartphone = {
7282
+ props: ["size"],
7283
+ render() {
7284
+ return h("svg", {
7285
+ width: this.size,
7286
+ height: this.size,
7287
+ fill: "none",
7288
+ stroke: "currentColor",
7289
+ viewBox: "0 0 24 24"
7290
+ }, [
7291
+ h("rect", { x: "5", y: "2", width: "14", height: "20", rx: "2", ry: "2" }),
7292
+ h("line", { x1: "12", y1: "18", x2: "12.01", y2: "18" })
7293
+ ]);
7294
+ }
7295
+ };
7296
+ const Tablet = {
7297
+ props: ["size"],
7298
+ render() {
7299
+ return h("svg", {
7300
+ width: this.size,
7301
+ height: this.size,
7302
+ fill: "none",
7303
+ stroke: "currentColor",
7304
+ viewBox: "0 0 24 24"
7305
+ }, [
7306
+ h("rect", { x: "4", y: "2", width: "16", height: "20", rx: "2", ry: "2" }),
7307
+ h("line", { x1: "12", y1: "18", x2: "12.01", y2: "18" })
7308
+ ]);
7309
+ }
7310
+ };
7311
+ const MapPin = {
7312
+ props: ["size"],
7313
+ render() {
7314
+ return h("svg", {
7315
+ width: this.size,
7316
+ height: this.size,
7317
+ fill: "none",
7318
+ stroke: "currentColor",
7319
+ viewBox: "0 0 24 24"
7320
+ }, [
7321
+ h("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }),
7322
+ h("circle", { cx: "12", cy: "10", r: "3" })
7323
+ ]);
7324
+ }
7325
+ };
7326
+ const Globe = {
7327
+ props: ["size"],
7328
+ render() {
7329
+ return h("svg", {
7330
+ width: this.size,
7331
+ height: this.size,
7332
+ fill: "none",
7333
+ stroke: "currentColor",
7334
+ viewBox: "0 0 24 24"
7335
+ }, [
7336
+ h("circle", { cx: "12", cy: "12", r: "10" }),
7337
+ h("line", { x1: "2", y1: "12", x2: "22", y2: "12" }),
7338
+ h("path", { d: "M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z" })
7339
+ ]);
7340
+ }
7341
+ };
7342
+ const Clock = {
7343
+ props: ["size"],
7344
+ render() {
7345
+ return h("svg", {
7346
+ width: this.size,
7347
+ height: this.size,
7348
+ fill: "none",
7349
+ stroke: "currentColor",
7350
+ viewBox: "0 0 24 24"
7351
+ }, [
7352
+ h("circle", { cx: "12", cy: "12", r: "10" }),
7353
+ h("polyline", { points: "12 6 12 12 16 14" })
7354
+ ]);
7355
+ }
7356
+ };
7357
+ const Calendar = {
7358
+ props: ["size"],
7359
+ render() {
7360
+ return h("svg", {
7361
+ width: this.size,
7362
+ height: this.size,
7363
+ fill: "none",
7364
+ stroke: "currentColor",
7365
+ viewBox: "0 0 24 24"
7366
+ }, [
7367
+ h("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2", ry: "2" }),
7368
+ h("line", { x1: "16", y1: "2", x2: "16", y2: "6" }),
7369
+ h("line", { x1: "8", y1: "2", x2: "8", y2: "6" }),
7370
+ h("line", { x1: "3", y1: "10", x2: "21", y2: "10" })
7371
+ ]);
7372
+ }
7373
+ };
7374
+ const props = __props;
7375
+ const emit = __emit;
7376
+ const { getUserSessions, getSessionStats, revokeSession, revokeAllOtherSessions, signOut } = useStrandsAuth();
7377
+ const visible = ref(props.modelValue);
7378
+ const loading2 = ref(false);
7379
+ const sessions = ref([]);
7380
+ const stats = ref(null);
7381
+ const revokingSession = ref(null);
7382
+ const revokingAll = ref(false);
7383
+ const error = ref(null);
7384
+ watch(() => props.modelValue, (newVal) => {
7385
+ visible.value = newVal;
7386
+ if (newVal) {
7387
+ loadSessions();
7057
7388
  }
7058
7389
  });
7059
7390
  const loadSessions = async () => {
@@ -7164,12 +7495,12 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
7164
7495
  loadSessions();
7165
7496
  }
7166
7497
  return (_ctx, _cache) => {
7167
- return openBlock(), createBlock(unref(StrandsUiModal), {
7498
+ return openBlock(), createBlock(unref(UiModal), {
7168
7499
  open: visible.value,
7169
7500
  onClose: handleClose
7170
7501
  }, {
7171
7502
  header: withCtx(() => [
7172
- createElementVNode("div", _hoisted_1$8, [
7503
+ createElementVNode("div", _hoisted_1$9, [
7173
7504
  _cache[0] || (_cache[0] = createElementVNode("h2", { class: "modal-title" }, "Active Sessions", -1)),
7174
7505
  createElementVNode("p", _hoisted_2$6, "Manage your " + toDisplayString(sessions.value.length) + " active device" + toDisplayString(sessions.value.length !== 1 ? "s" : ""), 1)
7175
7506
  ])
@@ -7338,8 +7669,8 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
7338
7669
  };
7339
7670
  }
7340
7671
  });
7341
- const StrandsSessionsModal = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-60345e8c"]]);
7342
- const _hoisted_1$7 = { class: "accui-component-scope" };
7672
+ const StrandsSessionsModal = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-37b09615"]]);
7673
+ const _hoisted_1$8 = { class: "accui-component-scope" };
7343
7674
  const _hoisted_2$5 = { class: "profile-image-section" };
7344
7675
  const _hoisted_3$5 = { class: "profile-image-container" };
7345
7676
  const _hoisted_4$4 = { class: "profile-image-wrapper" };
@@ -7397,34 +7728,35 @@ const _hoisted_31 = { class: "profile-field-header" };
7397
7728
  const _hoisted_32 = { class: "profile-field-subtitle" };
7398
7729
  const _hoisted_33 = { key: 0 };
7399
7730
  const _hoisted_34 = { key: 1 };
7400
- const _hoisted_35 = {
7731
+ const _hoisted_35 = { class: "profile-field-actions" };
7732
+ const _hoisted_36 = {
7401
7733
  key: 0,
7402
7734
  class: "profile-actions-section"
7403
7735
  };
7404
- const _hoisted_36 = {
7736
+ const _hoisted_37 = {
7405
7737
  key: 0,
7406
7738
  class: "animate-fade-in"
7407
7739
  };
7408
- const _hoisted_37 = { class: "alert-success" };
7409
- const _hoisted_38 = { class: "profile-help-item" };
7410
- const _hoisted_39 = { class: "profile-alert-message" };
7411
- const _hoisted_40 = {
7740
+ const _hoisted_38 = { class: "alert-success" };
7741
+ const _hoisted_39 = { class: "profile-help-item" };
7742
+ const _hoisted_40 = { class: "profile-alert-message" };
7743
+ const _hoisted_41 = {
7412
7744
  key: 1,
7413
7745
  class: "animate-fade-in"
7414
7746
  };
7415
- const _hoisted_41 = { class: "alert-error" };
7416
- const _hoisted_42 = { class: "profile-help-item" };
7417
- const _hoisted_43 = { class: "profile-alert-message" };
7418
- const _hoisted_44 = { class: "profile-footer-actions" };
7419
- const _hoisted_45 = { key: 0 };
7420
- const _hoisted_46 = { class: "profile-footer-text" };
7421
- const _hoisted_47 = {
7747
+ const _hoisted_42 = { class: "alert-error" };
7748
+ const _hoisted_43 = { class: "profile-help-item" };
7749
+ const _hoisted_44 = { class: "profile-alert-message" };
7750
+ const _hoisted_45 = { class: "profile-footer-actions" };
7751
+ const _hoisted_46 = { key: 0 };
7752
+ const _hoisted_47 = { class: "profile-footer-text" };
7753
+ const _hoisted_48 = {
7422
7754
  key: 1,
7423
7755
  class: "profile-avatar-modal-overlay"
7424
7756
  };
7425
- const _hoisted_48 = { class: "profile-avatar-modal" };
7426
- const _hoisted_49 = { class: "profile-avatar-modal-content" };
7427
- const _sfc_main$8 = /* @__PURE__ */ defineComponent({
7757
+ const _hoisted_49 = { class: "profile-avatar-modal" };
7758
+ const _hoisted_50 = { class: "profile-avatar-modal-content" };
7759
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
7428
7760
  __name: "StrandsUserProfile",
7429
7761
  props: {
7430
7762
  user: {},
@@ -7434,9 +7766,51 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
7434
7766
  },
7435
7767
  emits: ["profile-updated", "error", "manage-sessions", "mfa-toggle"],
7436
7768
  setup(__props, { emit: __emit }) {
7437
- const Smartphone = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg>`, props: ["size"] };
7438
- const Mail = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="m4 4 16 0c1.1 0 2 .9 2 2l0 12c0 1.1-.9 2-2 2l-16 0c-1.1 0-2-.9-2-2l0-12c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>`, props: ["size"] };
7439
- const KeyRound = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"/><circle cx="16.5" cy="7.5" r=".5" fill="currentColor"/></svg>`, props: ["size"] };
7769
+ const Smartphone = {
7770
+ props: ["size"],
7771
+ render() {
7772
+ return h("svg", {
7773
+ width: this.size,
7774
+ height: this.size,
7775
+ fill: "none",
7776
+ stroke: "currentColor",
7777
+ viewBox: "0 0 24 24"
7778
+ }, [
7779
+ h("rect", { x: "5", y: "2", width: "14", height: "20", rx: "2", ry: "2" }),
7780
+ h("line", { x1: "12", y1: "18", x2: "12.01", y2: "18" })
7781
+ ]);
7782
+ }
7783
+ };
7784
+ const Mail = {
7785
+ props: ["size"],
7786
+ render() {
7787
+ return h("svg", {
7788
+ width: this.size,
7789
+ height: this.size,
7790
+ fill: "none",
7791
+ stroke: "currentColor",
7792
+ viewBox: "0 0 24 24"
7793
+ }, [
7794
+ h("path", { d: "m4 4 16 0c1.1 0 2 .9 2 2l0 12c0 1.1-.9 2-2 2l-16 0c-1.1 0-2-.9-2-2l0-12c0-1.1.9-2 2-2z" }),
7795
+ h("polyline", { points: "22,6 12,13 2,6" })
7796
+ ]);
7797
+ }
7798
+ };
7799
+ const KeyRound = {
7800
+ props: ["size"],
7801
+ render() {
7802
+ return h("svg", {
7803
+ width: this.size,
7804
+ height: this.size,
7805
+ fill: "none",
7806
+ stroke: "currentColor",
7807
+ viewBox: "0 0 24 24"
7808
+ }, [
7809
+ h("path", { d: "M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z" }),
7810
+ h("circle", { cx: "16.5", cy: "7.5", r: ".5", fill: "currentColor" })
7811
+ ]);
7812
+ }
7813
+ };
7440
7814
  const props = __props;
7441
7815
  const emit = __emit;
7442
7816
  const { getSupportEmail, getUrl } = useStrandsConfig(props.config);
@@ -7665,10 +8039,16 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
7665
8039
  }
7666
8040
  };
7667
8041
  const loadUserSessions = async () => {
7668
- if (!isAuthenticated.value) return;
8042
+ console.log("loadUserSessions called, isAuthenticated:", isAuthenticated.value);
8043
+ if (!isAuthenticated.value) {
8044
+ console.log("Not authenticated, skipping session load");
8045
+ return;
8046
+ }
7669
8047
  loadingSessions.value = true;
7670
8048
  try {
8049
+ console.log("Calling getUserSessions...");
7671
8050
  const sessions = await getUserSessions();
8051
+ console.log("Sessions loaded:", sessions);
7672
8052
  activeSessions.value = sessions || [];
7673
8053
  } catch (err) {
7674
8054
  console.error("Failed to load sessions:", err);
@@ -7683,7 +8063,28 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
7683
8063
  form.email = user.email;
7684
8064
  }
7685
8065
  }, { immediate: true });
8066
+ watch(() => isAuthenticated.value, (authenticated, wasAuthenticated) => {
8067
+ console.log("Authentication state changed from", wasAuthenticated, "to", authenticated);
8068
+ if (authenticated && !wasAuthenticated) {
8069
+ console.log("User just signed in, loading sessions...");
8070
+ setTimeout(() => {
8071
+ loadUserSessions();
8072
+ }, 500);
8073
+ } else if (!authenticated) {
8074
+ console.log("User signed out, clearing sessions");
8075
+ activeSessions.value = [];
8076
+ }
8077
+ }, { immediate: false });
8078
+ watch(() => currentSession.value, (session) => {
8079
+ console.log("Session changed:", session);
8080
+ if (session && isAuthenticated.value) {
8081
+ setTimeout(() => {
8082
+ loadUserSessions();
8083
+ }, 100);
8084
+ }
8085
+ });
7686
8086
  onMounted(() => {
8087
+ console.log("StrandsUserProfile mounted");
7687
8088
  fetchUserProfile();
7688
8089
  loadUserSessions();
7689
8090
  });
@@ -8033,8 +8434,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8033
8434
  }
8034
8435
  });
8035
8436
  return (_ctx, _cache) => {
8036
- const _component_StrandsUiAvatarEditor = resolveComponent("StrandsUiAvatarEditor");
8037
- return openBlock(), createElementBlock("div", _hoisted_1$7, [
8437
+ return openBlock(), createElementBlock("div", _hoisted_1$8, [
8038
8438
  createElementVNode("div", {
8039
8439
  class: normalizeClass(_ctx.inModal ? "profile-container-modal profile-container-width" : "profile-container profile-container-width profile-max-width profile-centered profile-animated")
8040
8440
  }, [
@@ -8334,23 +8734,25 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8334
8734
  loadingSessions.value ? (openBlock(), createElementBlock("span", _hoisted_33, "Loading sessions...")) : (openBlock(), createElementBlock("span", _hoisted_34, toDisplayString(activeSessions.value.length) + " active device" + toDisplayString(activeSessions.value.length !== 1 ? "s" : ""), 1))
8335
8735
  ])
8336
8736
  ]),
8337
- createVNode(unref(StrandsUiButton), {
8338
- variant: "secondary",
8339
- size: "sm",
8340
- onClick: _cache[11] || (_cache[11] = ($event) => showSessionsModal.value = true),
8341
- disabled: loadingSessions.value
8342
- }, {
8343
- default: withCtx(() => _cache[24] || (_cache[24] = [
8344
- createTextVNode(" Manage ", -1)
8345
- ])),
8346
- _: 1,
8347
- __: [24]
8348
- }, 8, ["disabled"])
8737
+ createElementVNode("div", _hoisted_35, [
8738
+ createVNode(unref(StrandsUiButton), {
8739
+ variant: "secondary",
8740
+ size: "sm",
8741
+ onClick: _cache[11] || (_cache[11] = ($event) => showSessionsModal.value = true),
8742
+ disabled: loadingSessions.value
8743
+ }, {
8744
+ default: withCtx(() => _cache[24] || (_cache[24] = [
8745
+ createTextVNode(" Manage ", -1)
8746
+ ])),
8747
+ _: 1,
8748
+ __: [24]
8749
+ }, 8, ["disabled"])
8750
+ ])
8349
8751
  ])
8350
8752
  ])
8351
8753
  ])
8352
8754
  ]),
8353
- hasChanges.value ? (openBlock(), createElementBlock("div", _hoisted_35, [
8755
+ hasChanges.value ? (openBlock(), createElementBlock("div", _hoisted_36, [
8354
8756
  createVNode(unref(StrandsUiButton), {
8355
8757
  type: "submit",
8356
8758
  variant: "primary",
@@ -8375,9 +8777,9 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8375
8777
  }, 8, ["disabled"])
8376
8778
  ])) : createCommentVNode("", true)
8377
8779
  ], 32),
8378
- successMessage.value ? (openBlock(), createElementBlock("div", _hoisted_36, [
8379
- createElementVNode("div", _hoisted_37, [
8380
- createElementVNode("div", _hoisted_38, [
8780
+ successMessage.value ? (openBlock(), createElementBlock("div", _hoisted_37, [
8781
+ createElementVNode("div", _hoisted_38, [
8782
+ createElementVNode("div", _hoisted_39, [
8381
8783
  _cache[27] || (_cache[27] = createElementVNode("svg", {
8382
8784
  class: "profile-help-icon",
8383
8785
  fill: "currentColor",
@@ -8389,13 +8791,13 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8389
8791
  "clip-rule": "evenodd"
8390
8792
  })
8391
8793
  ], -1)),
8392
- createElementVNode("p", _hoisted_39, toDisplayString(successMessage.value), 1)
8794
+ createElementVNode("p", _hoisted_40, toDisplayString(successMessage.value), 1)
8393
8795
  ])
8394
8796
  ])
8395
8797
  ])) : createCommentVNode("", true),
8396
- errorMessage.value ? (openBlock(), createElementBlock("div", _hoisted_40, [
8397
- createElementVNode("div", _hoisted_41, [
8398
- createElementVNode("div", _hoisted_42, [
8798
+ errorMessage.value ? (openBlock(), createElementBlock("div", _hoisted_41, [
8799
+ createElementVNode("div", _hoisted_42, [
8800
+ createElementVNode("div", _hoisted_43, [
8399
8801
  _cache[28] || (_cache[28] = createElementVNode("svg", {
8400
8802
  class: "profile-help-icon",
8401
8803
  fill: "currentColor",
@@ -8407,7 +8809,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8407
8809
  "clip-rule": "evenodd"
8408
8810
  })
8409
8811
  ], -1)),
8410
- createElementVNode("p", _hoisted_43, toDisplayString(errorMessage.value), 1)
8812
+ createElementVNode("p", _hoisted_44, toDisplayString(errorMessage.value), 1)
8411
8813
  ])
8412
8814
  ])
8413
8815
  ])) : createCommentVNode("", true),
@@ -8415,7 +8817,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8415
8817
  config: props.config
8416
8818
  }, {
8417
8819
  default: withCtx(() => [
8418
- createElementVNode("div", _hoisted_44, [
8820
+ createElementVNode("div", _hoisted_45, [
8419
8821
  createVNode(unref(StrandsUiButton), {
8420
8822
  color: "red",
8421
8823
  onClick: handleSignOut,
@@ -8457,8 +8859,8 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8457
8859
  __: [29]
8458
8860
  })
8459
8861
  ]),
8460
- unref(getSupportEmail)() ? (openBlock(), createElementBlock("div", _hoisted_45, [
8461
- createElementVNode("p", _hoisted_46, [
8862
+ unref(getSupportEmail)() ? (openBlock(), createElementBlock("div", _hoisted_46, [
8863
+ createElementVNode("p", _hoisted_47, [
8462
8864
  _cache[31] || (_cache[31] = createTextVNode(" Need help? ", -1)),
8463
8865
  createVNode(unref(StrandsUiLink), {
8464
8866
  variant: "primary",
@@ -8491,9 +8893,9 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8491
8893
  "onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => showSessionsModal.value = $event),
8492
8894
  onSessionsUpdated: handleSessionsUpdated
8493
8895
  }, null, 8, ["modelValue"]),
8494
- showAvatarEditor.value ? (openBlock(), createElementBlock("div", _hoisted_47, [
8495
- createElementVNode("div", _hoisted_48, [
8496
- createElementVNode("div", _hoisted_49, [
8896
+ showAvatarEditor.value ? (openBlock(), createElementBlock("div", _hoisted_48, [
8897
+ createElementVNode("div", _hoisted_49, [
8898
+ createElementVNode("div", _hoisted_50, [
8497
8899
  createElementVNode("div", { class: "profile-avatar-modal-header" }, [
8498
8900
  _cache[34] || (_cache[34] = createElementVNode("h2", { class: "profile-modal-title" }, "Edit Avatar", -1)),
8499
8901
  createElementVNode("button", {
@@ -8515,7 +8917,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8515
8917
  ], -1)
8516
8918
  ]))
8517
8919
  ]),
8518
- createVNode(_component_StrandsUiAvatarEditor, {
8920
+ createVNode(unref(_sfc_main$s), {
8519
8921
  uploading: uploading.value,
8520
8922
  "preselected-file": selectedImageFile.value,
8521
8923
  onUpload: handleAvatarUpload,
@@ -8529,8 +8931,8 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8529
8931
  };
8530
8932
  }
8531
8933
  });
8532
- const StrandsUserProfile = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-dcc0db9b"]]);
8533
- const _hoisted_1$6 = { class: "accui-component-scope" };
8934
+ const StrandsUserProfile = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-c0a279c1"]]);
8935
+ const _hoisted_1$7 = { class: "accui-component-scope" };
8534
8936
  const _hoisted_2$4 = { class: "accui-w-full accui-min-w-100 accui-max-w-md accui-mx-auto accui-animate-slide-up" };
8535
8937
  const _hoisted_3$4 = { class: "accui-mt-8 accui-text-center" };
8536
8938
  const _hoisted_4$3 = {
@@ -8538,7 +8940,7 @@ const _hoisted_4$3 = {
8538
8940
  class: "accui-mt-6 accui-text-center"
8539
8941
  };
8540
8942
  const _hoisted_5$3 = { class: "accui-text-neutral-400 accui-text-sm" };
8541
- const _sfc_main$7 = /* @__PURE__ */ defineComponent({
8943
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
8542
8944
  __name: "StrandsPasswordReset",
8543
8945
  props: {
8544
8946
  config: {}
@@ -8570,7 +8972,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
8570
8972
  }
8571
8973
  };
8572
8974
  return (_ctx, _cache) => {
8573
- return openBlock(), createElementBlock("div", _hoisted_1$6, [
8975
+ return openBlock(), createElementBlock("div", _hoisted_1$7, [
8574
8976
  createElementVNode("div", _hoisted_2$4, [
8575
8977
  createVNode(unref(StrandsUiCard), { variant: "modern" }, {
8576
8978
  default: withCtx(() => [
@@ -8678,395 +9080,132 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
8678
9080
  };
8679
9081
  }
8680
9082
  });
8681
- const StrandsPasswordReset = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-0943ff6b"]]);
8682
- const _hoisted_1$5 = { class: "accui-component-scope" };
8683
- const _hoisted_2$3 = { class: "mfa-setup-header" };
8684
- const _hoisted_3$3 = { class: "mfa-setup-status-container" };
8685
- const _hoisted_4$2 = { class: "mfa-setup-content" };
8686
- const _hoisted_5$2 = {
9083
+ const StrandsPasswordReset = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-0943ff6b"]]);
9084
+ const _hoisted_1$6 = {
8687
9085
  key: 0,
8688
- class: "mfa-setup-loading"
9086
+ class: "animate-fade-in"
8689
9087
  };
8690
- const _hoisted_6$1 = {
9088
+ const _hoisted_2$3 = {
8691
9089
  key: 1,
8692
- class: "mfa-setup-sections"
8693
- };
8694
- const _hoisted_7$1 = {
8695
- key: 0,
8696
- class: "mfa-setup-status-alert"
9090
+ class: "animate-fade-in"
8697
9091
  };
8698
- const _hoisted_8$1 = { class: "mfa-setup-status-content" };
8699
- const _hoisted_9$1 = { class: "mfa-setup-status-icon" };
8700
- const _hoisted_10$1 = { class: "mfa-setup-methods-grid" };
8701
- const _hoisted_11$1 = { class: "mfa-setup-method-content" };
8702
- const _hoisted_12$1 = { class: "mfa-setup-method-icon mfa-setup-totp-icon" };
8703
- const _hoisted_13$1 = { class: "mfa-setup-method-content" };
8704
- const _hoisted_14$1 = { class: "mfa-setup-method-icon mfa-setup-email-icon" };
8705
- const _hoisted_15$1 = {
8706
- key: 1,
8707
- class: "mfa-setup-manage-section"
9092
+ const _hoisted_3$3 = {
9093
+ key: 2,
9094
+ class: "animate-fade-in"
8708
9095
  };
8709
- const _hoisted_16$1 = { class: "mfa-setup-manage-header" };
8710
- const _hoisted_17$1 = { class: "mfa-setup-manage-description" };
8711
- const _hoisted_18$1 = { class: "mfa-setup-footer" };
8712
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
8713
- __name: "StrandsMFASetup",
9096
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
9097
+ __name: "SignedIn",
8714
9098
  props: {
8715
- show: { type: Boolean, default: false }
9099
+ showFallback: { type: Boolean, default: true },
9100
+ invert: { type: Boolean, default: false }
8716
9101
  },
8717
- emits: ["success", "error", "close"],
9102
+ emits: ["sign-in-required"],
8718
9103
  setup(__props, { emit: __emit }) {
8719
- const Smartphone = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg>`, props: ["size"] };
8720
- const Mail = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="m4 4 16 0c1.1 0 2 .9 2 2l0 12c0 1.1-.9 2-2 2l-16 0c-1.1 0-2-.9-2-2l0-12c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>`, props: ["size"] };
8721
- const Shield = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/></svg>`, props: ["size"] };
8722
- const Settings = { template: `<svg :width="size" :height="size" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></svg>`, props: ["size"] };
8723
9104
  const props = __props;
9105
+ const invert = props.invert ?? false;
9106
+ const signedInOrInverted = computed(() => (isAuthenticated.value && !invert || !isAuthenticated.value && invert) && !showLoading.value);
9107
+ const signedOutOrInverted = computed(() => (isAuthenticated.value && invert || !isAuthenticated.value && !invert) && props.showFallback && !showLoading.value);
8724
9108
  const emit = __emit;
8725
- const {
8726
- mfaEnabled: mfaEnabled2,
8727
- loading: loading2,
8728
- activeMfaDevices,
8729
- fetchMfaDevices
8730
- } = useStrandsMfa();
8731
- const showTotpSetup = ref(false);
8732
- const showEmailMfaSetup = ref(false);
8733
- const showHardwareKeySetup = ref(false);
8734
- const showMfaModal = ref(false);
8735
- watch(() => props.show, async (newShow) => {
8736
- if (newShow) {
8737
- await fetchMfaDevices();
8738
- }
8739
- });
8740
- onMounted(async () => {
8741
- if (props.show) {
8742
- await fetchMfaDevices();
8743
- }
9109
+ const isComponentReady = ref(false);
9110
+ const { isAuthenticated, isInitializing, isSigningIn, user, signOut } = useStrandsAuth();
9111
+ const showLoading = computed(() => isInitializing.value && !isSigningIn.value || !isComponentReady.value);
9112
+ onMounted(() => {
9113
+ setTimeout(() => {
9114
+ isComponentReady.value = true;
9115
+ }, 100);
8744
9116
  });
8745
- const closeModal = () => {
8746
- emit("close");
8747
- };
8748
- const startTotpSetup = () => {
8749
- showTotpSetup.value = true;
8750
- };
8751
- const startEmailMfaSetup = () => {
8752
- showEmailMfaSetup.value = true;
9117
+ const signIn = () => {
9118
+ emit("sign-in-required");
8753
9119
  };
8754
- const openMfaModal = () => {
8755
- showMfaModal.value = true;
9120
+ return (_ctx, _cache) => {
9121
+ return signedInOrInverted.value ? (openBlock(), createElementBlock("div", _hoisted_1$6, [
9122
+ renderSlot(_ctx.$slots, "default", {
9123
+ user: unref(user),
9124
+ signOut: unref(signOut),
9125
+ invert: unref(invert)
9126
+ }, void 0, true)
9127
+ ])) : signedOutOrInverted.value ? (openBlock(), createElementBlock("div", _hoisted_2$3, [
9128
+ renderSlot(_ctx.$slots, "fallback", { signIn }, () => [
9129
+ createElementVNode("div", { class: "signed-in-fallback" }, [
9130
+ _cache[0] || (_cache[0] = createStaticVNode('<div class="signed-in-icon-container" data-v-669fa3b4><svg class="signed-in-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-669fa3b4><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" data-v-669fa3b4></path></svg></div><h3 class="signed-in-title" data-v-669fa3b4>Sign in required</h3><p class="signed-in-subtitle" data-v-669fa3b4>You need to be signed in to access this content.</p>', 3)),
9131
+ createElementVNode("button", {
9132
+ onClick: signIn,
9133
+ class: "signed-in-button"
9134
+ }, " Sign in ")
9135
+ ])
9136
+ ], true)
9137
+ ])) : showLoading.value ? (openBlock(), createElementBlock("div", _hoisted_3$3, [
9138
+ renderSlot(_ctx.$slots, "loading", {}, () => [
9139
+ createVNode(unref(StrandsUiLoader), {
9140
+ size: 64,
9141
+ text: "Checking authentication...",
9142
+ variant: "auto",
9143
+ "show-particles": true
9144
+ })
9145
+ ], true)
9146
+ ])) : createCommentVNode("", true);
8756
9147
  };
8757
- const handleSetupSuccess = async () => {
8758
- showTotpSetup.value = false;
8759
- showEmailMfaSetup.value = false;
8760
- showHardwareKeySetup.value = false;
8761
- await fetchMfaDevices();
8762
- emit("success");
9148
+ }
9149
+ });
9150
+ const SignedIn = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-669fa3b4"]]);
9151
+ const _hoisted_1$5 = {
9152
+ key: 0,
9153
+ class: "animate-fade-in"
9154
+ };
9155
+ const _hoisted_2$2 = {
9156
+ key: 1,
9157
+ class: "animate-fade-in"
9158
+ };
9159
+ const _hoisted_3$2 = { class: "signed-out-fallback" };
9160
+ const _hoisted_4$2 = { class: "signed-out-subtitle" };
9161
+ const _hoisted_5$2 = {
9162
+ key: 2,
9163
+ class: "animate-fade-in"
9164
+ };
9165
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
9166
+ __name: "SignedOut",
9167
+ props: {
9168
+ showFallback: { type: Boolean, default: true }
9169
+ },
9170
+ emits: ["sign-in-clicked", "sign-up-clicked"],
9171
+ setup(__props, { emit: __emit }) {
9172
+ const emit = __emit;
9173
+ const { isAuthenticated, isLoading, user, signOut } = useStrandsAuth();
9174
+ const signIn = () => {
9175
+ emit("sign-in-clicked");
8763
9176
  };
8764
- const handleMfaUpdated = async () => {
8765
- await fetchMfaDevices();
9177
+ const signUp = () => {
9178
+ emit("sign-up-clicked");
8766
9179
  };
8767
9180
  return (_ctx, _cache) => {
8768
- return openBlock(), createElementBlock("div", _hoisted_1$5, [
8769
- createVNode(StrandsUiModal, {
8770
- open: _ctx.show,
8771
- onClose: closeModal,
8772
- "card-class": "mfa-setup-modal"
8773
- }, {
8774
- header: withCtx(() => [
8775
- createElementVNode("div", _hoisted_2$3, [
8776
- _cache[4] || (_cache[4] = createElementVNode("div", null, [
8777
- createElementVNode("h2", { class: "mfa-setup-title" }, "Two-Factor Authentication"),
8778
- createElementVNode("p", { class: "mfa-setup-subtitle" }, "Add extra security to your account")
8779
- ], -1)),
8780
- createElementVNode("div", _hoisted_3$3, [
8781
- createElementVNode("span", {
8782
- class: normalizeClass(["mfa-setup-status-badge", unref(mfaEnabled2) || unref(activeMfaDevices).length > 0 ? "mfa-setup-status-enabled" : "mfa-setup-status-disabled"])
8783
- }, toDisplayString(unref(mfaEnabled2) || unref(activeMfaDevices).length > 0 ? "Enabled" : "Not Enabled"), 3)
8784
- ])
8785
- ])
8786
- ]),
8787
- footer: withCtx(() => [
8788
- createElementVNode("div", _hoisted_18$1, [
8789
- createVNode(unref(StrandsUiButton), {
8790
- variant: "secondary",
8791
- onClick: closeModal,
8792
- disabled: unref(loading2)
8793
- }, {
8794
- default: withCtx(() => _cache[14] || (_cache[14] = [
8795
- createTextVNode(" Cancel ", -1)
8796
- ])),
8797
- _: 1,
8798
- __: [14]
8799
- }, 8, ["disabled"])
8800
- ])
8801
- ]),
8802
- default: withCtx(() => [
8803
- createElementVNode("div", _hoisted_4$2, [
8804
- unref(loading2) ? (openBlock(), createElementBlock("div", _hoisted_5$2, [
8805
- createVNode(unref(StrandsUiLoader), { size: 32 }),
8806
- _cache[5] || (_cache[5] = createElementVNode("span", { class: "mfa-setup-loading-text" }, "Loading MFA settings...", -1))
8807
- ])) : (openBlock(), createElementBlock("div", _hoisted_6$1, [
8808
- unref(mfaEnabled2) || unref(activeMfaDevices).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_7$1, [
8809
- createElementVNode("div", _hoisted_8$1, [
8810
- createElementVNode("div", _hoisted_9$1, [
8811
- createVNode(Shield, {
8812
- size: 20,
8813
- class: "mfa-setup-shield-icon"
8814
- })
8815
- ]),
8816
- _cache[6] || (_cache[6] = createElementVNode("div", null, [
8817
- createElementVNode("span", { class: "mfa-setup-status-title" }, "2FA is currently enabled on your account"),
8818
- createElementVNode("p", { class: "mfa-setup-status-description" }, "Your account has additional security protection")
8819
- ], -1))
8820
- ])
8821
- ])) : createCommentVNode("", true),
8822
- createElementVNode("div", null, [
8823
- _cache[11] || (_cache[11] = createElementVNode("h3", { class: "mfa-setup-methods-title" }, "Choose Your Authentication Method", -1)),
8824
- createElementVNode("div", _hoisted_10$1, [
8825
- createElementVNode("div", {
8826
- class: "mfa-setup-method-card",
8827
- onClick: startTotpSetup
8828
- }, [
8829
- createElementVNode("div", _hoisted_11$1, [
8830
- createElementVNode("div", _hoisted_12$1, [
8831
- createVNode(Smartphone, {
8832
- size: 28,
8833
- class: "mfa-setup-icon-svg"
8834
- })
8835
- ]),
8836
- _cache[8] || (_cache[8] = createElementVNode("div", { class: "mfa-setup-method-info" }, [
8837
- createElementVNode("h4", { class: "mfa-setup-method-title" }, "Authenticator App"),
8838
- createElementVNode("p", { class: "mfa-setup-method-description" }, "Use Google Authenticator, Authy, or any TOTP-compatible app to generate secure codes")
8839
- ], -1)),
8840
- createVNode(unref(StrandsUiButton), {
8841
- variant: "primary",
8842
- size: "md",
8843
- onClick: withModifiers(startTotpSetup, ["stop"]),
8844
- disabled: unref(loading2),
8845
- class: "mfa-setup-method-button"
8846
- }, {
8847
- default: withCtx(() => _cache[7] || (_cache[7] = [
8848
- createTextVNode(" Setup Authenticator ", -1)
8849
- ])),
8850
- _: 1,
8851
- __: [7]
8852
- }, 8, ["disabled"])
8853
- ])
8854
- ]),
8855
- createElementVNode("div", {
8856
- class: "mfa-setup-method-card",
8857
- onClick: startEmailMfaSetup
8858
- }, [
8859
- createElementVNode("div", _hoisted_13$1, [
8860
- createElementVNode("div", _hoisted_14$1, [
8861
- createVNode(Mail, {
8862
- size: 28,
8863
- class: "mfa-setup-icon-svg"
8864
- })
8865
- ]),
8866
- _cache[10] || (_cache[10] = createElementVNode("div", { class: "mfa-setup-method-info" }, [
8867
- createElementVNode("h4", { class: "mfa-setup-method-title" }, "Email Verification"),
8868
- createElementVNode("p", { class: "mfa-setup-method-description" }, "Receive verification codes directly in your email inbox for easy access")
8869
- ], -1)),
8870
- createVNode(unref(StrandsUiButton), {
8871
- variant: "primary",
8872
- size: "md",
8873
- onClick: withModifiers(startEmailMfaSetup, ["stop"]),
8874
- disabled: unref(loading2),
8875
- class: "mfa-setup-method-button"
8876
- }, {
8877
- default: withCtx(() => _cache[9] || (_cache[9] = [
8878
- createTextVNode(" Setup Email 2FA ", -1)
8879
- ])),
8880
- _: 1,
8881
- __: [9]
8882
- }, 8, ["disabled"])
8883
- ])
8884
- ])
8885
- ])
8886
- ]),
8887
- unref(activeMfaDevices).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_15$1, [
8888
- createElementVNode("div", _hoisted_16$1, [
8889
- createElementVNode("div", null, [
8890
- _cache[12] || (_cache[12] = createElementVNode("h3", { class: "mfa-setup-manage-title" }, "Manage Existing Methods", -1)),
8891
- createElementVNode("p", _hoisted_17$1, toDisplayString(unref(activeMfaDevices).length) + " device(s) currently active", 1)
8892
- ]),
8893
- createVNode(unref(StrandsUiButton), {
8894
- variant: "secondary",
8895
- size: "md",
8896
- onClick: openMfaModal,
8897
- disabled: unref(loading2)
8898
- }, {
8899
- default: withCtx(() => [
8900
- createVNode(Settings, {
8901
- size: 16,
8902
- class: "mfa-setup-manage-icon"
8903
- }),
8904
- _cache[13] || (_cache[13] = createTextVNode(" Manage Devices ", -1))
8905
- ]),
8906
- _: 1,
8907
- __: [13]
8908
- }, 8, ["disabled"])
8909
- ])
8910
- ])) : createCommentVNode("", true)
8911
- ]))
8912
- ])
8913
- ]),
8914
- _: 1
8915
- }, 8, ["open"]),
8916
- showTotpSetup.value ? (openBlock(), createBlock(StrandsTotpSetupModal, {
8917
- key: 0,
8918
- show: showTotpSetup.value,
8919
- onClose: _cache[0] || (_cache[0] = ($event) => showTotpSetup.value = false),
8920
- onSuccess: handleSetupSuccess
8921
- }, null, 8, ["show"])) : createCommentVNode("", true),
8922
- showEmailMfaSetup.value ? (openBlock(), createBlock(StrandsEmailMfaSetupModal, {
8923
- key: 1,
8924
- show: showEmailMfaSetup.value,
8925
- onClose: _cache[1] || (_cache[1] = ($event) => showEmailMfaSetup.value = false),
8926
- onSuccess: handleSetupSuccess
8927
- }, null, 8, ["show"])) : createCommentVNode("", true),
8928
- showHardwareKeySetup.value ? (openBlock(), createBlock(StrandsHardwareKeySetupModal, {
8929
- key: 2,
8930
- show: showHardwareKeySetup.value,
8931
- onClose: _cache[2] || (_cache[2] = ($event) => showHardwareKeySetup.value = false),
8932
- onSuccess: handleSetupSuccess
8933
- }, null, 8, ["show"])) : createCommentVNode("", true),
8934
- showMfaModal.value ? (openBlock(), createBlock(StrandsMfaModal, {
8935
- key: 3,
8936
- show: showMfaModal.value,
8937
- onClose: _cache[3] || (_cache[3] = ($event) => showMfaModal.value = false),
8938
- onMfaUpdated: handleMfaUpdated
8939
- }, null, 8, ["show"])) : createCommentVNode("", true)
8940
- ]);
8941
- };
8942
- }
8943
- });
8944
- const StrandsMFASetup = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-0da3eb3b"]]);
8945
- const _hoisted_1$4 = {
8946
- key: 0,
8947
- class: "animate-fade-in"
8948
- };
8949
- const _hoisted_2$2 = {
8950
- key: 1,
8951
- class: "animate-fade-in"
8952
- };
8953
- const _hoisted_3$2 = {
8954
- key: 2,
8955
- class: "animate-fade-in"
8956
- };
8957
- const _sfc_main$5 = /* @__PURE__ */ defineComponent({
8958
- __name: "SignedIn",
8959
- props: {
8960
- showFallback: { type: Boolean, default: true },
8961
- invert: { type: Boolean, default: false }
8962
- },
8963
- emits: ["sign-in-required"],
8964
- setup(__props, { emit: __emit }) {
8965
- const props = __props;
8966
- const invert = props.invert ?? false;
8967
- const signedInOrInverted = computed(() => (isAuthenticated.value && !invert || !isAuthenticated.value && invert) && !showLoading.value);
8968
- const signedOutOrInverted = computed(() => (isAuthenticated.value && invert || !isAuthenticated.value && !invert) && props.showFallback && !showLoading.value);
8969
- const emit = __emit;
8970
- const isComponentReady = ref(false);
8971
- const { isAuthenticated, isInitializing, isSigningIn, user, signOut } = useStrandsAuth();
8972
- const showLoading = computed(() => isInitializing.value && !isSigningIn.value || !isComponentReady.value);
8973
- onMounted(() => {
8974
- setTimeout(() => {
8975
- isComponentReady.value = true;
8976
- }, 100);
8977
- });
8978
- const signIn = () => {
8979
- emit("sign-in-required");
8980
- };
8981
- return (_ctx, _cache) => {
8982
- return signedInOrInverted.value ? (openBlock(), createElementBlock("div", _hoisted_1$4, [
8983
- renderSlot(_ctx.$slots, "default", {
8984
- user: unref(user),
8985
- signOut: unref(signOut),
8986
- invert: unref(invert)
8987
- }, void 0, true)
8988
- ])) : signedOutOrInverted.value ? (openBlock(), createElementBlock("div", _hoisted_2$2, [
8989
- renderSlot(_ctx.$slots, "fallback", { signIn }, () => [
8990
- createElementVNode("div", { class: "signed-in-fallback" }, [
8991
- _cache[0] || (_cache[0] = createStaticVNode('<div class="signed-in-icon-container" data-v-669fa3b4><svg class="signed-in-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24" data-v-669fa3b4><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" data-v-669fa3b4></path></svg></div><h3 class="signed-in-title" data-v-669fa3b4>Sign in required</h3><p class="signed-in-subtitle" data-v-669fa3b4>You need to be signed in to access this content.</p>', 3)),
8992
- createElementVNode("button", {
8993
- onClick: signIn,
8994
- class: "signed-in-button"
8995
- }, " Sign in ")
8996
- ])
8997
- ], true)
8998
- ])) : showLoading.value ? (openBlock(), createElementBlock("div", _hoisted_3$2, [
8999
- renderSlot(_ctx.$slots, "loading", {}, () => [
9000
- createVNode(unref(StrandsUiLoader), {
9001
- size: 64,
9002
- text: "Checking authentication...",
9003
- variant: "auto",
9004
- "show-particles": true
9005
- })
9006
- ], true)
9007
- ])) : createCommentVNode("", true);
9008
- };
9009
- }
9010
- });
9011
- const SignedIn = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-669fa3b4"]]);
9012
- const _hoisted_1$3 = {
9013
- key: 0,
9014
- class: "animate-fade-in"
9015
- };
9016
- const _hoisted_2$1 = {
9017
- key: 1,
9018
- class: "animate-fade-in"
9019
- };
9020
- const _hoisted_3$1 = { class: "signed-out-fallback" };
9021
- const _hoisted_4$1 = { class: "signed-out-subtitle" };
9022
- const _hoisted_5$1 = {
9023
- key: 2,
9024
- class: "animate-fade-in"
9025
- };
9026
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
9027
- __name: "SignedOut",
9028
- props: {
9029
- showFallback: { type: Boolean, default: true }
9030
- },
9031
- emits: ["sign-in-clicked", "sign-up-clicked"],
9032
- setup(__props, { emit: __emit }) {
9033
- const emit = __emit;
9034
- const { isAuthenticated, isLoading, user, signOut } = useStrandsAuth();
9035
- const signIn = () => {
9036
- emit("sign-in-clicked");
9037
- };
9038
- const signUp = () => {
9039
- emit("sign-up-clicked");
9040
- };
9041
- return (_ctx, _cache) => {
9042
- return !unref(isAuthenticated) && !unref(isLoading) ? (openBlock(), createElementBlock("div", _hoisted_1$3, [
9043
- renderSlot(_ctx.$slots, "default", {
9044
- signIn,
9045
- signUp
9046
- }, void 0, true)
9047
- ])) : _ctx.showFallback && unref(isAuthenticated) && !unref(isLoading) ? (openBlock(), createElementBlock("div", _hoisted_2$1, [
9048
- renderSlot(_ctx.$slots, "fallback", {
9049
- user: unref(user),
9050
- signOut: unref(signOut)
9051
- }, () => [
9052
- createElementVNode("div", _hoisted_3$1, [
9053
- _cache[1] || (_cache[1] = createElementVNode("div", { class: "signed-out-icon-container" }, [
9054
- createElementVNode("svg", {
9055
- class: "signed-out-icon",
9056
- fill: "none",
9057
- stroke: "currentColor",
9058
- viewBox: "0 0 24 24"
9059
- }, [
9060
- createElementVNode("path", {
9061
- "stroke-linecap": "round",
9062
- "stroke-linejoin": "round",
9063
- "stroke-width": "2",
9064
- d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"
9065
- })
9181
+ return !unref(isAuthenticated) && !unref(isLoading) ? (openBlock(), createElementBlock("div", _hoisted_1$5, [
9182
+ renderSlot(_ctx.$slots, "default", {
9183
+ signIn,
9184
+ signUp
9185
+ }, void 0, true)
9186
+ ])) : _ctx.showFallback && unref(isAuthenticated) && !unref(isLoading) ? (openBlock(), createElementBlock("div", _hoisted_2$2, [
9187
+ renderSlot(_ctx.$slots, "fallback", {
9188
+ user: unref(user),
9189
+ signOut: unref(signOut)
9190
+ }, () => [
9191
+ createElementVNode("div", _hoisted_3$2, [
9192
+ _cache[1] || (_cache[1] = createElementVNode("div", { class: "signed-out-icon-container" }, [
9193
+ createElementVNode("svg", {
9194
+ class: "signed-out-icon",
9195
+ fill: "none",
9196
+ stroke: "currentColor",
9197
+ viewBox: "0 0 24 24"
9198
+ }, [
9199
+ createElementVNode("path", {
9200
+ "stroke-linecap": "round",
9201
+ "stroke-linejoin": "round",
9202
+ "stroke-width": "2",
9203
+ d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"
9204
+ })
9066
9205
  ])
9067
9206
  ], -1)),
9068
9207
  _cache[2] || (_cache[2] = createElementVNode("h3", { class: "signed-out-title" }, "Already signed in", -1)),
9069
- createElementVNode("p", _hoisted_4$1, "You're currently signed in as " + toDisplayString(unref(user)?.email) + ".", 1),
9208
+ createElementVNode("p", _hoisted_4$2, "You're currently signed in as " + toDisplayString(unref(user)?.email) + ".", 1),
9070
9209
  createElementVNode("button", {
9071
9210
  onClick: _cache[0] || (_cache[0] = //@ts-ignore
9072
9211
  (...args) => unref(signOut) && unref(signOut)(...args)),
@@ -9074,7 +9213,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
9074
9213
  }, " Sign out ")
9075
9214
  ])
9076
9215
  ], true)
9077
- ])) : unref(isLoading) ? (openBlock(), createElementBlock("div", _hoisted_5$1, [
9216
+ ])) : unref(isLoading) ? (openBlock(), createElementBlock("div", _hoisted_5$2, [
9078
9217
  renderSlot(_ctx.$slots, "loading", {}, () => [
9079
9218
  createVNode(unref(StrandsUiLoader), {
9080
9219
  size: 64,
@@ -9087,16 +9226,16 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
9087
9226
  };
9088
9227
  }
9089
9228
  });
9090
- const SignedOut = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-9b5919fc"]]);
9091
- const _hoisted_1$2 = { class: "accui-component-scope" };
9092
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
9229
+ const SignedOut = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-9b5919fc"]]);
9230
+ const _hoisted_1$4 = { class: "accui-component-scope" };
9231
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
9093
9232
  __name: "StrandsLogo",
9094
9233
  props: {
9095
9234
  class: { default: "" }
9096
9235
  },
9097
9236
  setup(__props) {
9098
9237
  return (_ctx, _cache) => {
9099
- return openBlock(), createElementBlock("div", _hoisted_1$2, [
9238
+ return openBlock(), createElementBlock("div", _hoisted_1$4, [
9100
9239
  (openBlock(), createElementBlock("svg", {
9101
9240
  viewBox: "0 0 22571 9413",
9102
9241
  xmlns: "http://www.w3.org/2000/svg",
@@ -9122,7 +9261,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
9122
9261
  };
9123
9262
  }
9124
9263
  });
9125
- const _sfc_main$2 = /* @__PURE__ */ defineComponent({
9264
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
9126
9265
  __name: "StrandsConfigProvider",
9127
9266
  props: {
9128
9267
  config: {}
@@ -9138,8 +9277,8 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
9138
9277
  };
9139
9278
  }
9140
9279
  });
9141
- const _hoisted_1$1 = ["fill", "stroke", "viewBox", "aria-hidden"];
9142
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
9280
+ const _hoisted_1$3 = ["fill", "stroke", "viewBox", "aria-hidden"];
9281
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
9143
9282
  __name: "SvgIcon",
9144
9283
  props: {
9145
9284
  name: {},
@@ -9269,41 +9408,41 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
9269
9408
  "aria-hidden": _ctx.ariaHidden
9270
9409
  }, [
9271
9410
  (openBlock(), createBlock(resolveDynamicComponent(iconComponent.value)))
9272
- ], 10, _hoisted_1$1);
9411
+ ], 10, _hoisted_1$3);
9273
9412
  };
9274
9413
  }
9275
9414
  });
9276
- const _hoisted_1 = ["onKeydown", "aria-expanded"];
9277
- const _hoisted_2 = { class: "user-button-content" };
9278
- const _hoisted_3 = {
9415
+ const _hoisted_1$2 = ["onKeydown", "aria-expanded"];
9416
+ const _hoisted_2$1 = { class: "user-button-content" };
9417
+ const _hoisted_3$1 = {
9279
9418
  key: 0,
9280
9419
  class: "user-info"
9281
9420
  };
9282
- const _hoisted_4 = { class: "user-name" };
9283
- const _hoisted_5 = { class: "avatar-container" };
9284
- const _hoisted_6 = { class: "avatar-wrapper" };
9285
- const _hoisted_7 = ["src", "alt"];
9286
- const _hoisted_8 = {
9421
+ const _hoisted_4$1 = { class: "user-name" };
9422
+ const _hoisted_5$1 = { class: "avatar-container" };
9423
+ const _hoisted_6$1 = { class: "avatar-wrapper" };
9424
+ const _hoisted_7$1 = ["src", "alt"];
9425
+ const _hoisted_8$1 = {
9287
9426
  key: 1,
9288
9427
  class: "avatar-default"
9289
9428
  };
9290
- const _hoisted_9 = ["onKeydown"];
9291
- const _hoisted_10 = { class: "dropdown-content" };
9292
- const _hoisted_11 = { class: "dropdown-header" };
9293
- const _hoisted_12 = {
9429
+ const _hoisted_9$1 = ["onKeydown"];
9430
+ const _hoisted_10$1 = { class: "dropdown-content" };
9431
+ const _hoisted_11$1 = { class: "dropdown-header" };
9432
+ const _hoisted_12$1 = {
9294
9433
  key: 0,
9295
9434
  class: "dropdown-avatar-container"
9296
9435
  };
9297
- const _hoisted_13 = ["src", "alt"];
9298
- const _hoisted_14 = {
9436
+ const _hoisted_13$1 = ["src", "alt"];
9437
+ const _hoisted_14$1 = {
9299
9438
  key: 1,
9300
9439
  class: "dropdown-avatar-default"
9301
9440
  };
9302
- const _hoisted_15 = { class: "dropdown-user-details" };
9303
- const _hoisted_16 = { class: "dropdown-user-name" };
9304
- const _hoisted_17 = { class: "dropdown-user-email" };
9305
- const _hoisted_18 = { class: "dropdown-menu-items" };
9306
- const _sfc_main = /* @__PURE__ */ defineComponent({
9441
+ const _hoisted_15$1 = { class: "dropdown-user-details" };
9442
+ const _hoisted_16$1 = { class: "dropdown-user-name" };
9443
+ const _hoisted_17$1 = { class: "dropdown-user-email" };
9444
+ const _hoisted_18$1 = { class: "dropdown-menu-items" };
9445
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
9307
9446
  __name: "StrandsUserButton",
9308
9447
  props: {
9309
9448
  hideUser: { type: Boolean, default: false },
@@ -9439,7 +9578,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9439
9578
  ], -1),
9440
9579
  createElementVNode("span", null, "Sign In", -1)
9441
9580
  ])),
9442
- createVNode(unref(StrandsUiModal), {
9581
+ createVNode(unref(UiModal), {
9443
9582
  open: showSignInModal.value,
9444
9583
  onClose: closeSignIn,
9445
9584
  "fullscreen-on-mobile": false
@@ -9493,18 +9632,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9493
9632
  "aria-expanded": showDropdown.value,
9494
9633
  "aria-label": "User menu"
9495
9634
  }, [
9496
- createElementVNode("div", _hoisted_2, [
9497
- !_ctx.hideUser ? (openBlock(), createElementBlock("div", _hoisted_3, [
9498
- createElementVNode("div", _hoisted_4, toDisplayString(displayName.value), 1)
9635
+ createElementVNode("div", _hoisted_2$1, [
9636
+ !_ctx.hideUser ? (openBlock(), createElementBlock("div", _hoisted_3$1, [
9637
+ createElementVNode("div", _hoisted_4$1, toDisplayString(displayName.value), 1)
9499
9638
  ])) : createCommentVNode("", true),
9500
- createElementVNode("div", _hoisted_5, [
9501
- createElementVNode("div", _hoisted_6, [
9639
+ createElementVNode("div", _hoisted_5$1, [
9640
+ createElementVNode("div", _hoisted_6$1, [
9502
9641
  user.value?.avatar ? (openBlock(), createElementBlock("img", {
9503
9642
  key: 0,
9504
9643
  src: user.value.avatar,
9505
9644
  alt: `${user.value.firstName || user.value.email}'s avatar`,
9506
9645
  class: "avatar-image"
9507
- }, null, 8, _hoisted_7)) : (openBlock(), createElementBlock("div", _hoisted_8, _cache[0] || (_cache[0] = [
9646
+ }, null, 8, _hoisted_7$1)) : (openBlock(), createElementBlock("div", _hoisted_8$1, _cache[0] || (_cache[0] = [
9508
9647
  createElementVNode("svg", {
9509
9648
  class: "avatar-icon",
9510
9649
  fill: "currentColor",
@@ -9552,9 +9691,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9552
9691
  withKeys(withModifiers(focusLast, ["prevent"]), ["end"])
9553
9692
  ]
9554
9693
  }, [
9555
- createElementVNode("div", _hoisted_10, [
9556
- createElementVNode("div", _hoisted_11, [
9557
- user.value ? (openBlock(), createElementBlock("div", _hoisted_12, [
9694
+ createElementVNode("div", _hoisted_10$1, [
9695
+ createElementVNode("div", _hoisted_11$1, [
9696
+ user.value ? (openBlock(), createElementBlock("div", _hoisted_12$1, [
9558
9697
  createVNode(unref(StrandsUiLevelProgress), {
9559
9698
  size: 80,
9560
9699
  value: user.value.xp,
@@ -9569,7 +9708,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9569
9708
  src: user.value.avatar,
9570
9709
  alt: `${user.value.firstName || user.value.email}'s avatar`,
9571
9710
  class: "dropdown-avatar-image"
9572
- }, null, 8, _hoisted_13)) : (openBlock(), createElementBlock("div", _hoisted_14, _cache[2] || (_cache[2] = [
9711
+ }, null, 8, _hoisted_13$1)) : (openBlock(), createElementBlock("div", _hoisted_14$1, _cache[2] || (_cache[2] = [
9573
9712
  createElementVNode("svg", {
9574
9713
  class: "dropdown-avatar-icon",
9575
9714
  fill: "currentColor",
@@ -9583,13 +9722,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9583
9722
  ], -1)
9584
9723
  ])))
9585
9724
  ])) : createCommentVNode("", true),
9586
- createElementVNode("div", _hoisted_15, [
9587
- createElementVNode("div", _hoisted_16, toDisplayString(displayName.value), 1),
9588
- createElementVNode("div", _hoisted_17, toDisplayString(user.value?.email), 1)
9725
+ createElementVNode("div", _hoisted_15$1, [
9726
+ createElementVNode("div", _hoisted_16$1, toDisplayString(displayName.value), 1),
9727
+ createElementVNode("div", _hoisted_17$1, toDisplayString(user.value?.email), 1)
9589
9728
  ])
9590
9729
  ]),
9591
9730
  _cache[5] || (_cache[5] = createElementVNode("div", { class: "dropdown-divider" }, null, -1)),
9592
- createElementVNode("div", _hoisted_18, [
9731
+ createElementVNode("div", _hoisted_18$1, [
9593
9732
  createElementVNode("button", {
9594
9733
  ref_key: "profileButtonRef",
9595
9734
  ref: profileButtonRef,
@@ -9636,12 +9775,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9636
9775
  ]))
9637
9776
  ])
9638
9777
  ])
9639
- ], 42, _hoisted_9)) : createCommentVNode("", true)
9778
+ ], 42, _hoisted_9$1)) : createCommentVNode("", true)
9640
9779
  ]),
9641
9780
  _: 1
9642
9781
  })
9643
- ], 40, _hoisted_1),
9644
- createVNode(unref(StrandsUiModal), {
9782
+ ], 40, _hoisted_1$2),
9783
+ createVNode(unref(UiModal), {
9645
9784
  open: showProfileModal.value,
9646
9785
  onClose: closeProfile,
9647
9786
  "fullscreen-on-mobile": false
@@ -9687,7 +9826,455 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9687
9826
  };
9688
9827
  }
9689
9828
  });
9690
- const StrandsUserButton = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-9e187d2c"]]);
9829
+ const StrandsUserButton = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-9e187d2c"]]);
9830
+ const _hoisted_1$1 = { class: "accui-p-2 accui-border-b" };
9831
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
9832
+ __name: "VirtualList",
9833
+ props: {
9834
+ items: {},
9835
+ itemHeight: {},
9836
+ containerHeight: {},
9837
+ itemKey: { type: [String, Function], default: "id" },
9838
+ overscan: { default: 5 }
9839
+ },
9840
+ setup(__props, { expose: __expose }) {
9841
+ const props = __props;
9842
+ const scrollContainer = ref();
9843
+ const scrollTop = ref(0);
9844
+ const visibleRange = computed(() => {
9845
+ const start = Math.floor(scrollTop.value / props.itemHeight);
9846
+ const end = Math.min(
9847
+ start + Math.ceil(props.containerHeight / props.itemHeight),
9848
+ props.items.length - 1
9849
+ );
9850
+ return {
9851
+ start: Math.max(0, start - props.overscan),
9852
+ end: Math.min(props.items.length - 1, end + props.overscan)
9853
+ };
9854
+ });
9855
+ const visibleItems = computed(() => {
9856
+ const { start, end } = visibleRange.value;
9857
+ const items = [];
9858
+ for (let i = start; i <= end; i++) {
9859
+ items.push({
9860
+ index: i,
9861
+ data: props.items[i],
9862
+ top: i * props.itemHeight
9863
+ });
9864
+ }
9865
+ return items;
9866
+ });
9867
+ const totalHeight = computed(() => props.items.length * props.itemHeight);
9868
+ const getItemKey = (item) => {
9869
+ if (typeof props.itemKey === "function") {
9870
+ return props.itemKey(item);
9871
+ }
9872
+ return item[props.itemKey] || item.id || Math.random();
9873
+ };
9874
+ let scrollTimer = null;
9875
+ const handleScroll = (event) => {
9876
+ if (scrollTimer) {
9877
+ clearTimeout(scrollTimer);
9878
+ }
9879
+ scrollTimer = setTimeout(() => {
9880
+ const target = event.target;
9881
+ scrollTop.value = target.scrollTop;
9882
+ }, 16);
9883
+ };
9884
+ onUnmounted(() => {
9885
+ if (scrollTimer) {
9886
+ clearTimeout(scrollTimer);
9887
+ }
9888
+ });
9889
+ const scrollToItem = (index, align = "start") => {
9890
+ if (!scrollContainer.value) return;
9891
+ let scrollTo = index * props.itemHeight;
9892
+ if (align === "center") {
9893
+ scrollTo -= props.containerHeight / 2 - props.itemHeight / 2;
9894
+ } else if (align === "end") {
9895
+ scrollTo -= props.containerHeight - props.itemHeight;
9896
+ }
9897
+ scrollContainer.value.scrollTop = Math.max(0, scrollTo);
9898
+ };
9899
+ __expose({
9900
+ scrollToItem
9901
+ });
9902
+ return (_ctx, _cache) => {
9903
+ return openBlock(), createElementBlock("div", {
9904
+ ref_key: "scrollContainer",
9905
+ ref: scrollContainer,
9906
+ style: normalizeStyle({ height: _ctx.containerHeight + "px", overflowY: "auto" }),
9907
+ onScroll: handleScroll,
9908
+ class: "accui-virtual-list"
9909
+ }, [
9910
+ createElementVNode("div", {
9911
+ style: normalizeStyle({ height: totalHeight.value + "px", position: "relative" })
9912
+ }, [
9913
+ (openBlock(true), createElementBlock(Fragment, null, renderList(visibleItems.value, (item) => {
9914
+ return openBlock(), createElementBlock("div", {
9915
+ key: getItemKey(item.data),
9916
+ style: normalizeStyle({
9917
+ position: "absolute",
9918
+ top: item.top + "px",
9919
+ left: 0,
9920
+ right: 0,
9921
+ height: _ctx.itemHeight + "px"
9922
+ })
9923
+ }, [
9924
+ renderSlot(_ctx.$slots, "default", {
9925
+ item: item.data,
9926
+ index: item.index
9927
+ }, () => [
9928
+ createElementVNode("div", _hoisted_1$1, toDisplayString(JSON.stringify(item.data)), 1)
9929
+ ], true)
9930
+ ], 4);
9931
+ }), 128))
9932
+ ], 4)
9933
+ ], 36);
9934
+ };
9935
+ }
9936
+ });
9937
+ const VirtualList = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-e8bb0414"]]);
9938
+ const preloadCriticalComponents = () => {
9939
+ };
9940
+ const _hoisted_1 = { class: "accui-component-scope" };
9941
+ const _hoisted_2 = { class: "mfa-setup-header" };
9942
+ const _hoisted_3 = { class: "mfa-setup-status-container" };
9943
+ const _hoisted_4 = { class: "mfa-setup-content" };
9944
+ const _hoisted_5 = {
9945
+ key: 0,
9946
+ class: "mfa-setup-loading"
9947
+ };
9948
+ const _hoisted_6 = {
9949
+ key: 1,
9950
+ class: "mfa-setup-sections"
9951
+ };
9952
+ const _hoisted_7 = {
9953
+ key: 0,
9954
+ class: "mfa-setup-status-alert"
9955
+ };
9956
+ const _hoisted_8 = { class: "mfa-setup-status-content" };
9957
+ const _hoisted_9 = { class: "mfa-setup-status-icon" };
9958
+ const _hoisted_10 = { class: "mfa-setup-methods-grid" };
9959
+ const _hoisted_11 = { class: "mfa-setup-method-content" };
9960
+ const _hoisted_12 = { class: "mfa-setup-method-icon mfa-setup-totp-icon" };
9961
+ const _hoisted_13 = { class: "mfa-setup-method-content" };
9962
+ const _hoisted_14 = { class: "mfa-setup-method-icon mfa-setup-email-icon" };
9963
+ const _hoisted_15 = {
9964
+ key: 1,
9965
+ class: "mfa-setup-manage-section"
9966
+ };
9967
+ const _hoisted_16 = { class: "mfa-setup-manage-header" };
9968
+ const _hoisted_17 = { class: "mfa-setup-manage-description" };
9969
+ const _hoisted_18 = { class: "mfa-setup-footer" };
9970
+ const _sfc_main = /* @__PURE__ */ defineComponent({
9971
+ __name: "StrandsMFASetup",
9972
+ props: {
9973
+ show: { type: Boolean, default: false }
9974
+ },
9975
+ emits: ["success", "error", "close"],
9976
+ setup(__props, { emit: __emit }) {
9977
+ const Smartphone = {
9978
+ props: {
9979
+ size: {
9980
+ type: [String, Number],
9981
+ default: 24
9982
+ }
9983
+ },
9984
+ render() {
9985
+ return h("svg", {
9986
+ width: this.size,
9987
+ height: this.size,
9988
+ fill: "none",
9989
+ stroke: "currentColor",
9990
+ viewBox: "0 0 24 24"
9991
+ }, [
9992
+ h("rect", { x: "5", y: "2", width: "14", height: "20", rx: "2", ry: "2" }),
9993
+ h("line", { x1: "12", y1: "18", x2: "12.01", y2: "18" })
9994
+ ]);
9995
+ }
9996
+ };
9997
+ const Mail = {
9998
+ props: {
9999
+ size: {
10000
+ type: [String, Number],
10001
+ default: 24
10002
+ }
10003
+ },
10004
+ render() {
10005
+ return h("svg", {
10006
+ width: this.size,
10007
+ height: this.size,
10008
+ fill: "none",
10009
+ stroke: "currentColor",
10010
+ viewBox: "0 0 24 24"
10011
+ }, [
10012
+ h("path", { d: "m4 4 16 0c1.1 0 2 .9 2 2l0 12c0 1.1-.9 2-2 2l-16 0c-1.1 0-2-.9-2-2l0-12c0-1.1.9-2 2-2z" }),
10013
+ h("polyline", { points: "22,6 12,13 2,6" })
10014
+ ]);
10015
+ }
10016
+ };
10017
+ const Shield = {
10018
+ props: {
10019
+ size: {
10020
+ type: [String, Number],
10021
+ default: 24
10022
+ }
10023
+ },
10024
+ render() {
10025
+ return h("svg", {
10026
+ width: this.size,
10027
+ height: this.size,
10028
+ fill: "none",
10029
+ stroke: "currentColor",
10030
+ viewBox: "0 0 24 24"
10031
+ }, [
10032
+ h("path", { d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z" })
10033
+ ]);
10034
+ }
10035
+ };
10036
+ const Settings = {
10037
+ props: {
10038
+ size: {
10039
+ type: [String, Number],
10040
+ default: 24
10041
+ }
10042
+ },
10043
+ render() {
10044
+ return h("svg", {
10045
+ width: this.size,
10046
+ height: this.size,
10047
+ fill: "none",
10048
+ stroke: "currentColor",
10049
+ viewBox: "0 0 24 24"
10050
+ }, [
10051
+ h("path", { d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" }),
10052
+ h("circle", { cx: "12", cy: "12", r: "3" })
10053
+ ]);
10054
+ }
10055
+ };
10056
+ const props = __props;
10057
+ const emit = __emit;
10058
+ const {
10059
+ mfaEnabled: mfaEnabled2,
10060
+ loading: loading2,
10061
+ activeMfaDevices,
10062
+ fetchMfaDevices
10063
+ } = useStrandsMfa();
10064
+ const showTotpSetup = ref(false);
10065
+ const showEmailMfaSetup = ref(false);
10066
+ const showHardwareKeySetup = ref(false);
10067
+ const showMfaModal = ref(false);
10068
+ watch(() => props.show, async (newShow) => {
10069
+ if (newShow) {
10070
+ await fetchMfaDevices();
10071
+ }
10072
+ });
10073
+ onMounted(async () => {
10074
+ if (props.show) {
10075
+ await fetchMfaDevices();
10076
+ }
10077
+ });
10078
+ const closeModal = () => {
10079
+ emit("close");
10080
+ };
10081
+ const startTotpSetup = () => {
10082
+ showTotpSetup.value = true;
10083
+ };
10084
+ const startEmailMfaSetup = () => {
10085
+ showEmailMfaSetup.value = true;
10086
+ };
10087
+ const openMfaModal = () => {
10088
+ showMfaModal.value = true;
10089
+ };
10090
+ const handleSetupSuccess = async () => {
10091
+ showTotpSetup.value = false;
10092
+ showEmailMfaSetup.value = false;
10093
+ showHardwareKeySetup.value = false;
10094
+ await fetchMfaDevices();
10095
+ emit("success");
10096
+ };
10097
+ const handleMfaUpdated = async () => {
10098
+ await fetchMfaDevices();
10099
+ };
10100
+ return (_ctx, _cache) => {
10101
+ return openBlock(), createElementBlock("div", _hoisted_1, [
10102
+ createVNode(UiModal, {
10103
+ open: _ctx.show,
10104
+ onClose: closeModal,
10105
+ "card-class": "mfa-setup-modal"
10106
+ }, {
10107
+ header: withCtx(() => [
10108
+ createElementVNode("div", _hoisted_2, [
10109
+ _cache[4] || (_cache[4] = createElementVNode("div", null, [
10110
+ createElementVNode("h2", { class: "mfa-setup-title" }, "Two-Factor Authentication"),
10111
+ createElementVNode("p", { class: "mfa-setup-subtitle" }, "Add extra security to your account")
10112
+ ], -1)),
10113
+ createElementVNode("div", _hoisted_3, [
10114
+ createElementVNode("span", {
10115
+ class: normalizeClass(["mfa-setup-status-badge", unref(mfaEnabled2) || unref(activeMfaDevices).length > 0 ? "mfa-setup-status-enabled" : "mfa-setup-status-disabled"])
10116
+ }, toDisplayString(unref(mfaEnabled2) || unref(activeMfaDevices).length > 0 ? "Enabled" : "Not Enabled"), 3)
10117
+ ])
10118
+ ])
10119
+ ]),
10120
+ footer: withCtx(() => [
10121
+ createElementVNode("div", _hoisted_18, [
10122
+ createVNode(unref(StrandsUiButton), {
10123
+ variant: "secondary",
10124
+ onClick: closeModal,
10125
+ disabled: unref(loading2)
10126
+ }, {
10127
+ default: withCtx(() => _cache[14] || (_cache[14] = [
10128
+ createTextVNode(" Cancel ", -1)
10129
+ ])),
10130
+ _: 1,
10131
+ __: [14]
10132
+ }, 8, ["disabled"])
10133
+ ])
10134
+ ]),
10135
+ default: withCtx(() => [
10136
+ createElementVNode("div", _hoisted_4, [
10137
+ unref(loading2) ? (openBlock(), createElementBlock("div", _hoisted_5, [
10138
+ createVNode(unref(StrandsUiLoader), { size: 32 }),
10139
+ _cache[5] || (_cache[5] = createElementVNode("span", { class: "mfa-setup-loading-text" }, "Loading MFA settings...", -1))
10140
+ ])) : (openBlock(), createElementBlock("div", _hoisted_6, [
10141
+ unref(mfaEnabled2) || unref(activeMfaDevices).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_7, [
10142
+ createElementVNode("div", _hoisted_8, [
10143
+ createElementVNode("div", _hoisted_9, [
10144
+ createVNode(Shield, {
10145
+ size: 20,
10146
+ class: "mfa-setup-shield-icon"
10147
+ })
10148
+ ]),
10149
+ _cache[6] || (_cache[6] = createElementVNode("div", null, [
10150
+ createElementVNode("span", { class: "mfa-setup-status-title" }, "2FA is currently enabled on your account"),
10151
+ createElementVNode("p", { class: "mfa-setup-status-description" }, "Your account has additional security protection")
10152
+ ], -1))
10153
+ ])
10154
+ ])) : createCommentVNode("", true),
10155
+ createElementVNode("div", null, [
10156
+ _cache[11] || (_cache[11] = createElementVNode("h3", { class: "mfa-setup-methods-title" }, "Choose Your Authentication Method", -1)),
10157
+ createElementVNode("div", _hoisted_10, [
10158
+ createElementVNode("div", {
10159
+ class: "mfa-setup-method-card",
10160
+ onClick: startTotpSetup
10161
+ }, [
10162
+ createElementVNode("div", _hoisted_11, [
10163
+ createElementVNode("div", _hoisted_12, [
10164
+ createVNode(Smartphone, {
10165
+ size: 28,
10166
+ class: "mfa-setup-icon-svg"
10167
+ })
10168
+ ]),
10169
+ _cache[8] || (_cache[8] = createElementVNode("div", { class: "mfa-setup-method-info" }, [
10170
+ createElementVNode("h4", { class: "mfa-setup-method-title" }, "Authenticator App"),
10171
+ createElementVNode("p", { class: "mfa-setup-method-description" }, "Use Google Authenticator, Authy, or any TOTP-compatible app to generate secure codes")
10172
+ ], -1)),
10173
+ createVNode(unref(StrandsUiButton), {
10174
+ variant: "primary",
10175
+ size: "md",
10176
+ onClick: withModifiers(startTotpSetup, ["stop"]),
10177
+ disabled: unref(loading2),
10178
+ class: "mfa-setup-method-button"
10179
+ }, {
10180
+ default: withCtx(() => _cache[7] || (_cache[7] = [
10181
+ createTextVNode(" Setup Authenticator ", -1)
10182
+ ])),
10183
+ _: 1,
10184
+ __: [7]
10185
+ }, 8, ["disabled"])
10186
+ ])
10187
+ ]),
10188
+ createElementVNode("div", {
10189
+ class: "mfa-setup-method-card",
10190
+ onClick: startEmailMfaSetup
10191
+ }, [
10192
+ createElementVNode("div", _hoisted_13, [
10193
+ createElementVNode("div", _hoisted_14, [
10194
+ createVNode(Mail, {
10195
+ size: 28,
10196
+ class: "mfa-setup-icon-svg"
10197
+ })
10198
+ ]),
10199
+ _cache[10] || (_cache[10] = createElementVNode("div", { class: "mfa-setup-method-info" }, [
10200
+ createElementVNode("h4", { class: "mfa-setup-method-title" }, "Email Verification"),
10201
+ createElementVNode("p", { class: "mfa-setup-method-description" }, "Receive verification codes directly in your email inbox for easy access")
10202
+ ], -1)),
10203
+ createVNode(unref(StrandsUiButton), {
10204
+ variant: "primary",
10205
+ size: "md",
10206
+ onClick: withModifiers(startEmailMfaSetup, ["stop"]),
10207
+ disabled: unref(loading2),
10208
+ class: "mfa-setup-method-button"
10209
+ }, {
10210
+ default: withCtx(() => _cache[9] || (_cache[9] = [
10211
+ createTextVNode(" Setup Email 2FA ", -1)
10212
+ ])),
10213
+ _: 1,
10214
+ __: [9]
10215
+ }, 8, ["disabled"])
10216
+ ])
10217
+ ])
10218
+ ])
10219
+ ]),
10220
+ unref(activeMfaDevices).length > 0 ? (openBlock(), createElementBlock("div", _hoisted_15, [
10221
+ createElementVNode("div", _hoisted_16, [
10222
+ createElementVNode("div", null, [
10223
+ _cache[12] || (_cache[12] = createElementVNode("h3", { class: "mfa-setup-manage-title" }, "Manage Existing Methods", -1)),
10224
+ createElementVNode("p", _hoisted_17, toDisplayString(unref(activeMfaDevices).length) + " device(s) currently active", 1)
10225
+ ]),
10226
+ createVNode(unref(StrandsUiButton), {
10227
+ variant: "secondary",
10228
+ size: "md",
10229
+ onClick: openMfaModal,
10230
+ disabled: unref(loading2)
10231
+ }, {
10232
+ default: withCtx(() => [
10233
+ createVNode(Settings, {
10234
+ size: 16,
10235
+ class: "mfa-setup-manage-icon"
10236
+ }),
10237
+ _cache[13] || (_cache[13] = createTextVNode(" Manage Devices ", -1))
10238
+ ]),
10239
+ _: 1,
10240
+ __: [13]
10241
+ }, 8, ["disabled"])
10242
+ ])
10243
+ ])) : createCommentVNode("", true)
10244
+ ]))
10245
+ ])
10246
+ ]),
10247
+ _: 1
10248
+ }, 8, ["open"]),
10249
+ showTotpSetup.value ? (openBlock(), createBlock(StrandsTotpSetupModal, {
10250
+ key: 0,
10251
+ show: showTotpSetup.value,
10252
+ onClose: _cache[0] || (_cache[0] = ($event) => showTotpSetup.value = false),
10253
+ onSuccess: handleSetupSuccess
10254
+ }, null, 8, ["show"])) : createCommentVNode("", true),
10255
+ showEmailMfaSetup.value ? (openBlock(), createBlock(StrandsEmailMfaSetupModal, {
10256
+ key: 1,
10257
+ show: showEmailMfaSetup.value,
10258
+ onClose: _cache[1] || (_cache[1] = ($event) => showEmailMfaSetup.value = false),
10259
+ onSuccess: handleSetupSuccess
10260
+ }, null, 8, ["show"])) : createCommentVNode("", true),
10261
+ showHardwareKeySetup.value ? (openBlock(), createBlock(StrandsHardwareKeySetupModal, {
10262
+ key: 2,
10263
+ show: showHardwareKeySetup.value,
10264
+ onClose: _cache[2] || (_cache[2] = ($event) => showHardwareKeySetup.value = false),
10265
+ onSuccess: handleSetupSuccess
10266
+ }, null, 8, ["show"])) : createCommentVNode("", true),
10267
+ showMfaModal.value ? (openBlock(), createBlock(StrandsMfaModal, {
10268
+ key: 3,
10269
+ show: showMfaModal.value,
10270
+ onClose: _cache[3] || (_cache[3] = ($event) => showMfaModal.value = false),
10271
+ onMfaUpdated: handleMfaUpdated
10272
+ }, null, 8, ["show"])) : createCommentVNode("", true)
10273
+ ]);
10274
+ };
10275
+ }
10276
+ });
10277
+ const StrandsMFASetup = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-745d3b53"]]);
9691
10278
  const components = {
9692
10279
  StrandsUiAlert,
9693
10280
  StrandsUiButton,
@@ -9777,16 +10364,18 @@ const debounce = (func, wait) => {
9777
10364
  };
9778
10365
  };
9779
10366
  export {
10367
+ _sfc_main$l as IconGithub,
10368
+ _sfc_main$m as IconGoogle,
9780
10369
  SignedIn,
9781
10370
  SignedOut,
9782
10371
  StrandsAuth,
9783
10372
  StrandsBackupCodesModal,
9784
10373
  StrandsCompleteSignUp,
9785
- _sfc_main$2 as StrandsConfigProvider,
10374
+ _sfc_main$4 as StrandsConfigProvider,
9786
10375
  StrandsConfirmModal,
9787
10376
  StrandsEmailMfaSetupModal,
9788
10377
  StrandsHardwareKeySetupModal,
9789
- _sfc_main$3 as StrandsLogo,
10378
+ _sfc_main$5 as StrandsLogo,
9790
10379
  StrandsMFASetup,
9791
10380
  StrandsMfaModal,
9792
10381
  StrandsMfaVerification,
@@ -9799,31 +10388,32 @@ export {
9799
10388
  StrandsTotpSetupModal,
9800
10389
  StrandsUIPlugin,
9801
10390
  StrandsUiAlert,
9802
- _sfc_main$p as StrandsUiAvatarEditor,
10391
+ _sfc_main$s as StrandsUiAvatarEditor,
9803
10392
  StrandsUiButton,
9804
10393
  StrandsUiCard,
9805
10394
  StrandsUiInput,
9806
10395
  StrandsUiLevelProgress,
9807
10396
  StrandsUiLink,
9808
10397
  StrandsUiLoader,
9809
- StrandsUiModal,
10398
+ UiModal as StrandsUiModal,
9810
10399
  StrandsUiTabs,
9811
10400
  UiToggle as StrandsUiToggle,
9812
10401
  StrandsUserButton,
9813
10402
  StrandsUserProfile,
9814
- _sfc_main$1 as SvgIcon,
10403
+ _sfc_main$3 as SvgIcon,
9815
10404
  StrandsUiAlert as UiAlert,
9816
- _sfc_main$p as UiAvatarEditor,
9817
- _sfc_main$p as UiAvatarEditorSimple,
10405
+ _sfc_main$s as UiAvatarEditor,
10406
+ _sfc_main$s as UiAvatarEditorSimple,
9818
10407
  StrandsUiButton as UiButton,
9819
10408
  StrandsUiCard as UiCard,
9820
10409
  StrandsUiInput as UiInput,
9821
10410
  StrandsUiLevelProgress as UiLevelProgress,
9822
10411
  StrandsUiLink as UiLink,
9823
10412
  StrandsUiLoader as UiLoader,
9824
- StrandsUiModal as UiModal,
10413
+ UiModal,
9825
10414
  StrandsUiTabs as UiTabs,
9826
10415
  UiToggle,
10416
+ VirtualList,
9827
10417
  debounce,
9828
10418
  formatDate,
9829
10419
  getInitials,
@@ -9831,6 +10421,7 @@ export {
9831
10421
  isValidEmail,
9832
10422
  isValidName,
9833
10423
  passwordsMatch,
10424
+ preloadCriticalComponents,
9834
10425
  provideStrandsConfig,
9835
10426
  s as setStrandsConfig,
9836
10427
  useOAuthProviders,
@@ -9838,4 +10429,3 @@ export {
9838
10429
  useStrandsConfig,
9839
10430
  validatePassword
9840
10431
  };
9841
- //# sourceMappingURL=strands-auth-ui.es.js.map