@strands.gg/accui 1.8.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.
- package/dist/accui.css +1 -5802
- package/dist/nuxt/module.cjs.js +1 -109
- package/dist/nuxt/module.cjs.js.map +1 -1
- package/dist/nuxt/module.es.js +0 -1
- package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js +1 -57
- package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js.map +1 -1
- package/dist/nuxt/runtime/composables/useStrandsAuth.es.js +1 -2
- package/dist/nuxt/runtime/middleware/auth.global.cjs.js +1 -42
- package/dist/nuxt/runtime/middleware/auth.global.cjs.js.map +1 -1
- package/dist/nuxt/runtime/middleware/auth.global.es.js +0 -1
- package/dist/nuxt/runtime/plugin.client.cjs.js +1 -26
- package/dist/nuxt/runtime/plugin.client.cjs.js.map +1 -1
- package/dist/nuxt/runtime/plugin.client.es.js +2 -1
- package/dist/nuxt/runtime/plugin.client.es.js.map +1 -1
- package/dist/nuxt/runtime/plugin.server.cjs.js +1 -17
- package/dist/nuxt/runtime/plugin.server.cjs.js.map +1 -1
- package/dist/nuxt/runtime/plugin.server.es.js +0 -1
- package/dist/nuxt-v4/module.cjs.js +1 -119
- package/dist/nuxt-v4/module.cjs.js.map +1 -1
- package/dist/nuxt-v4/module.es.js +0 -1
- package/dist/nuxt-v4/runtime/composables/useStrandsAuth.cjs.js +1 -70
- package/dist/nuxt-v4/runtime/composables/useStrandsAuth.cjs.js.map +1 -1
- package/dist/nuxt-v4/runtime/composables/useStrandsAuth.es.js +1 -2
- package/dist/nuxt-v4/runtime/middleware/auth.global.cjs.js +1 -42
- package/dist/nuxt-v4/runtime/middleware/auth.global.cjs.js.map +1 -1
- package/dist/nuxt-v4/runtime/middleware/auth.global.es.js +0 -1
- package/dist/nuxt-v4/runtime/plugin.client.cjs.js +1 -26
- package/dist/nuxt-v4/runtime/plugin.client.cjs.js.map +1 -1
- package/dist/nuxt-v4/runtime/plugin.client.es.js +2 -1
- package/dist/nuxt-v4/runtime/plugin.client.es.js.map +1 -1
- package/dist/nuxt-v4/runtime/plugin.server.cjs.js +1 -22
- package/dist/nuxt-v4/runtime/plugin.server.cjs.js.map +1 -1
- package/dist/nuxt-v4/runtime/plugin.server.es.js +0 -1
- package/dist/strands-auth-ui.cjs.js +1 -9840
- package/dist/strands-auth-ui.cjs.js.map +1 -1
- package/dist/strands-auth-ui.es.js +1398 -808
- package/dist/strands-auth-ui.es.js.map +1 -1
- package/dist/useStrandsAuth-Co9ekmXB.cjs +1 -0
- package/dist/useStrandsAuth-Co9ekmXB.cjs.map +1 -0
- package/dist/{useStrandsAuth-Beee__9G.js → useStrandsAuth-kWUOoMm-.js} +314 -172
- package/dist/useStrandsAuth-kWUOoMm-.js.map +1 -0
- package/dist/useStrandsConfig-Cxb360Os.js +0 -1
- package/dist/useStrandsConfig-Z9_36OcV.cjs +1 -0
- package/dist/{useStrandsConfig-Dms13Zd0.cjs.map → useStrandsConfig-Z9_36OcV.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/useStrandsAuth-Beee__9G.js.map +0 -1
- package/dist/useStrandsAuth-JfbGH2c-.cjs +0 -755
- package/dist/useStrandsAuth-JfbGH2c-.cjs.map +0 -1
- 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,
|
|
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-
|
|
5
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
428
|
+
], 14, _hoisted_1$x);
|
|
428
429
|
};
|
|
429
430
|
}
|
|
430
431
|
});
|
|
431
|
-
const StrandsUiButton = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
432
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
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$
|
|
471
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
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$
|
|
632
|
-
const _sfc_main$
|
|
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$
|
|
716
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
902
|
-
const _hoisted_1$
|
|
903
|
-
const _sfc_main$
|
|
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$
|
|
944
|
+
], 10, _hoisted_1$s);
|
|
944
945
|
};
|
|
945
946
|
}
|
|
946
947
|
});
|
|
947
|
-
const UiToggle = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
948
|
-
const _hoisted_1$
|
|
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-
|
|
959
|
-
const _hoisted_9$f = {
|
|
960
|
-
const _hoisted_10$e =
|
|
961
|
-
const _hoisted_11$e = ["
|
|
962
|
-
const _hoisted_12$e = ["
|
|
963
|
-
const _hoisted_13$d = ["
|
|
964
|
-
const _hoisted_14$d = { class: "
|
|
965
|
-
const _hoisted_15$c =
|
|
966
|
-
const _hoisted_16$c =
|
|
967
|
-
const _hoisted_17$b = { class: "
|
|
968
|
-
const _hoisted_18$
|
|
969
|
-
const _hoisted_19$
|
|
970
|
-
const _hoisted_20$7 =
|
|
971
|
-
const _hoisted_21$6 =
|
|
972
|
-
const
|
|
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
|
|
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
|
|
1160
|
-
imagePos.y
|
|
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
|
|
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
|
|
1222
|
-
|
|
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
|
|
1245
|
-
imagePos.y
|
|
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$
|
|
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
|
-
|
|
1268
|
-
|
|
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
|
-
(
|
|
1290
|
-
|
|
1291
|
-
createElementVNode("
|
|
1292
|
-
createElementVNode("
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
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,
|
|
1339
|
+
}, null, 8, _hoisted_15$c)
|
|
1325
1340
|
]))
|
|
1326
1341
|
])
|
|
1327
1342
|
]),
|
|
1328
|
-
createElementVNode("div",
|
|
1329
|
-
createElementVNode("div",
|
|
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,
|
|
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",
|
|
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:
|
|
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,
|
|
1422
|
+
}, toDisplayString(_ctx.uploading ? "Saving..." : "Save Avatar"), 9, _hoisted_20$7)
|
|
1408
1423
|
])
|
|
1409
1424
|
])
|
|
1410
1425
|
]),
|
|
1411
|
-
createElementVNode("div",
|
|
1426
|
+
createElementVNode("div", _hoisted_21$6, [
|
|
1412
1427
|
_cache[9] || (_cache[9] = createElementVNode("h3", { class: "preview-title" }, "Preview", -1)),
|
|
1413
|
-
createElementVNode("div",
|
|
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,
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
1973
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
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
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
2339
|
+
const _hoisted_18$9 = {
|
|
2325
2340
|
key: 3,
|
|
2326
2341
|
class: "mfa-hardware-section"
|
|
2327
2342
|
};
|
|
2328
|
-
const _hoisted_19$
|
|
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
|
|
2349
|
-
const
|
|
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
|
|
2354
|
-
const
|
|
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
|
|
2359
|
-
const
|
|
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
|
|
2364
|
-
const
|
|
2365
|
-
const _sfc_main$
|
|
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
|
-
|
|
2376
|
-
|
|
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
|
-
|
|
2380
|
-
|
|
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
|
-
|
|
2384
|
-
|
|
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
|
-
|
|
2388
|
-
|
|
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
|
-
|
|
2392
|
-
|
|
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
|
-
|
|
2396
|
-
|
|
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$
|
|
2643
|
-
createVNode(
|
|
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",
|
|
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$
|
|
2741
|
-
createElementVNode("div", _hoisted_19$
|
|
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("
|
|
2808
|
-
|
|
2809
|
-
|
|
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:
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
2871
|
-
createElementVNode("div",
|
|
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$
|
|
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$
|
|
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$
|
|
3080
|
-
const _sfc_main$
|
|
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$
|
|
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$
|
|
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$
|
|
3642
|
-
const _hoisted_1$
|
|
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
|
|
3669
|
-
const
|
|
3670
|
-
const
|
|
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
|
|
3675
|
-
const
|
|
3676
|
-
const
|
|
3677
|
-
const
|
|
3678
|
-
const
|
|
3679
|
-
const
|
|
3680
|
-
const
|
|
3681
|
-
const _sfc_main$
|
|
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$
|
|
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
|
-
|
|
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(),
|
|
3796
|
-
createElementVNode("
|
|
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",
|
|
3969
|
+
createElementVNode("span", _hoisted_9$b, "Continue with " + toDisplayString(provider.displayName || provider.name), 1)
|
|
3819
3970
|
]),
|
|
3820
3971
|
_: 2
|
|
3821
|
-
}, 1032, ["disabled", "onClick"]);
|
|
3822
|
-
|
|
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",
|
|
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",
|
|
3985
|
+
createElementVNode("div", _hoisted_11$a, [
|
|
3833
3986
|
createVNode(unref(StrandsUiInput), {
|
|
3834
3987
|
id: "email",
|
|
3835
3988
|
modelValue: form.email,
|
|
3836
|
-
"onUpdate:modelValue": _cache[
|
|
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",
|
|
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[
|
|
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",
|
|
4027
|
+
createElementVNode("div", _hoisted_13$a, [
|
|
3875
4028
|
createVNode(unref(StrandsUiLink), {
|
|
3876
|
-
onClick: _cache[
|
|
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[
|
|
4045
|
+
onDismiss: _cache[5] || (_cache[5] = ($event) => error.value = "")
|
|
3893
4046
|
}, null, 8, ["message"])) : createCommentVNode("", true),
|
|
3894
|
-
createElementVNode("div",
|
|
3895
|
-
createElementVNode("p",
|
|
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[
|
|
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",
|
|
3913
|
-
createElementVNode("p",
|
|
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$
|
|
3948
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
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$
|
|
4304
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
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$
|
|
4649
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
4776
|
-
createVNode(
|
|
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$
|
|
5032
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
5158
|
-
createVNode(
|
|
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$
|
|
5378
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
5681
|
-
createVNode(
|
|
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$
|
|
5990
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
6102
|
-
createVNode(
|
|
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$
|
|
6285
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
6312
|
-
createVNode(
|
|
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$
|
|
6352
|
-
const _hoisted_1$
|
|
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$
|
|
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 = {
|
|
6409
|
-
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
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$
|
|
6535
|
-
createVNode(
|
|
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$
|
|
6812
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
6862
|
-
createVNode(
|
|
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$
|
|
6967
|
-
const _hoisted_1$
|
|
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$
|
|
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 = {
|
|
7037
|
-
|
|
7038
|
-
|
|
7039
|
-
|
|
7040
|
-
|
|
7041
|
-
|
|
7042
|
-
|
|
7043
|
-
|
|
7044
|
-
|
|
7045
|
-
|
|
7046
|
-
|
|
7047
|
-
|
|
7048
|
-
|
|
7049
|
-
|
|
7050
|
-
|
|
7051
|
-
|
|
7052
|
-
const
|
|
7053
|
-
|
|
7054
|
-
|
|
7055
|
-
|
|
7056
|
-
|
|
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(
|
|
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$
|
|
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$
|
|
7342
|
-
const _hoisted_1$
|
|
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
|
|
7736
|
+
const _hoisted_37 = {
|
|
7405
7737
|
key: 0,
|
|
7406
7738
|
class: "animate-fade-in"
|
|
7407
7739
|
};
|
|
7408
|
-
const
|
|
7409
|
-
const
|
|
7410
|
-
const
|
|
7411
|
-
const
|
|
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
|
|
7416
|
-
const
|
|
7417
|
-
const
|
|
7418
|
-
const
|
|
7419
|
-
const
|
|
7420
|
-
const
|
|
7421
|
-
const
|
|
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
|
|
7426
|
-
const
|
|
7427
|
-
const _sfc_main$
|
|
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 = {
|
|
7438
|
-
|
|
7439
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
8338
|
-
|
|
8339
|
-
|
|
8340
|
-
|
|
8341
|
-
|
|
8342
|
-
|
|
8343
|
-
|
|
8344
|
-
|
|
8345
|
-
|
|
8346
|
-
|
|
8347
|
-
|
|
8348
|
-
|
|
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",
|
|
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",
|
|
8379
|
-
createElementVNode("div",
|
|
8380
|
-
createElementVNode("div",
|
|
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",
|
|
8794
|
+
createElementVNode("p", _hoisted_40, toDisplayString(successMessage.value), 1)
|
|
8393
8795
|
])
|
|
8394
8796
|
])
|
|
8395
8797
|
])) : createCommentVNode("", true),
|
|
8396
|
-
errorMessage.value ? (openBlock(), createElementBlock("div",
|
|
8397
|
-
createElementVNode("div",
|
|
8398
|
-
createElementVNode("div",
|
|
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",
|
|
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",
|
|
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",
|
|
8461
|
-
createElementVNode("p",
|
|
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",
|
|
8495
|
-
createElementVNode("div",
|
|
8496
|
-
createElementVNode("div",
|
|
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(
|
|
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$
|
|
8533
|
-
const _hoisted_1$
|
|
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$
|
|
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$
|
|
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$
|
|
8682
|
-
const _hoisted_1$
|
|
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: "
|
|
9086
|
+
class: "animate-fade-in"
|
|
8689
9087
|
};
|
|
8690
|
-
const
|
|
9088
|
+
const _hoisted_2$3 = {
|
|
8691
9089
|
key: 1,
|
|
8692
|
-
class: "
|
|
8693
|
-
};
|
|
8694
|
-
const _hoisted_7$1 = {
|
|
8695
|
-
key: 0,
|
|
8696
|
-
class: "mfa-setup-status-alert"
|
|
9090
|
+
class: "animate-fade-in"
|
|
8697
9091
|
};
|
|
8698
|
-
const
|
|
8699
|
-
|
|
8700
|
-
|
|
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
|
|
8710
|
-
|
|
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
|
-
|
|
9099
|
+
showFallback: { type: Boolean, default: true },
|
|
9100
|
+
invert: { type: Boolean, default: false }
|
|
8716
9101
|
},
|
|
8717
|
-
emits: ["
|
|
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
|
-
|
|
8727
|
-
|
|
8728
|
-
|
|
8729
|
-
|
|
8730
|
-
|
|
8731
|
-
|
|
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
|
|
8746
|
-
emit("
|
|
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
|
-
|
|
8755
|
-
|
|
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
|
-
|
|
8758
|
-
|
|
8759
|
-
|
|
8760
|
-
|
|
8761
|
-
|
|
8762
|
-
|
|
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
|
|
8765
|
-
|
|
9177
|
+
const signUp = () => {
|
|
9178
|
+
emit("sign-up-clicked");
|
|
8766
9179
|
};
|
|
8767
9180
|
return (_ctx, _cache) => {
|
|
8768
|
-
return openBlock(), createElementBlock("div", _hoisted_1$5, [
|
|
8769
|
-
|
|
8770
|
-
|
|
8771
|
-
|
|
8772
|
-
|
|
8773
|
-
|
|
8774
|
-
|
|
8775
|
-
|
|
8776
|
-
|
|
8777
|
-
|
|
8778
|
-
|
|
8779
|
-
|
|
8780
|
-
createElementVNode("
|
|
8781
|
-
|
|
8782
|
-
|
|
8783
|
-
|
|
8784
|
-
|
|
8785
|
-
|
|
8786
|
-
|
|
8787
|
-
|
|
8788
|
-
|
|
8789
|
-
|
|
8790
|
-
|
|
8791
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
9091
|
-
const _hoisted_1$
|
|
9092
|
-
const _sfc_main$
|
|
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$
|
|
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$
|
|
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$
|
|
9142
|
-
const _sfc_main$
|
|
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$
|
|
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(
|
|
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(
|
|
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$
|
|
10374
|
+
_sfc_main$4 as StrandsConfigProvider,
|
|
9786
10375
|
StrandsConfirmModal,
|
|
9787
10376
|
StrandsEmailMfaSetupModal,
|
|
9788
10377
|
StrandsHardwareKeySetupModal,
|
|
9789
|
-
_sfc_main$
|
|
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$
|
|
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$
|
|
10403
|
+
_sfc_main$3 as SvgIcon,
|
|
9815
10404
|
StrandsUiAlert as UiAlert,
|
|
9816
|
-
_sfc_main$
|
|
9817
|
-
_sfc_main$
|
|
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
|
-
|
|
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
|