@strands.gg/accui 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accui.css +14 -0
- package/dist/strands-auth-ui.cjs.js +197 -42
- package/dist/strands-auth-ui.cjs.js.map +1 -1
- package/dist/strands-auth-ui.es.js +197 -42
- package/dist/strands-auth-ui.es.js.map +1 -1
- package/dist/vue/components/StrandsHardwareKeySetupModal.vue.d.ts.map +1 -1
- package/dist/vue/components/StrandsUserProfile.vue.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/accui.css
CHANGED
|
@@ -48,6 +48,8 @@
|
|
|
48
48
|
--color-blue-900: oklch(37.9% 0.146 265.522);
|
|
49
49
|
--color-purple-50: oklch(97.7% 0.014 308.299);
|
|
50
50
|
--color-purple-100: oklch(94.6% 0.033 307.174);
|
|
51
|
+
--color-purple-200: oklch(90.2% 0.063 306.703);
|
|
52
|
+
--color-purple-700: oklch(49.6% 0.265 301.924);
|
|
51
53
|
--color-gray-50: oklch(98.5% 0.002 247.839);
|
|
52
54
|
--color-gray-100: oklch(96.7% 0.003 264.542);
|
|
53
55
|
--color-gray-200: oklch(92.8% 0.006 264.531);
|
|
@@ -410,6 +412,9 @@
|
|
|
410
412
|
.mr-1 {
|
|
411
413
|
margin-right: calc(var(--spacing) * 1);
|
|
412
414
|
}
|
|
415
|
+
.mr-1\.5 {
|
|
416
|
+
margin-right: calc(var(--spacing) * 1.5);
|
|
417
|
+
}
|
|
413
418
|
.mr-2 {
|
|
414
419
|
margin-right: calc(var(--spacing) * 2);
|
|
415
420
|
}
|
|
@@ -440,6 +445,9 @@
|
|
|
440
445
|
.mb-12 {
|
|
441
446
|
margin-bottom: calc(var(--spacing) * 12);
|
|
442
447
|
}
|
|
448
|
+
.ml-1 {
|
|
449
|
+
margin-left: calc(var(--spacing) * 1);
|
|
450
|
+
}
|
|
443
451
|
.ml-2 {
|
|
444
452
|
margin-left: calc(var(--spacing) * 2);
|
|
445
453
|
}
|
|
@@ -770,6 +778,9 @@
|
|
|
770
778
|
.border-neutral-200 {
|
|
771
779
|
border-color: var(--color-neutral-200);
|
|
772
780
|
}
|
|
781
|
+
.border-purple-200 {
|
|
782
|
+
border-color: var(--color-purple-200);
|
|
783
|
+
}
|
|
773
784
|
.border-red-200 {
|
|
774
785
|
border-color: var(--color-red-200);
|
|
775
786
|
}
|
|
@@ -1135,6 +1146,9 @@
|
|
|
1135
1146
|
.text-neutral-900 {
|
|
1136
1147
|
color: var(--color-neutral-900);
|
|
1137
1148
|
}
|
|
1149
|
+
.text-purple-700 {
|
|
1150
|
+
color: var(--color-purple-700);
|
|
1151
|
+
}
|
|
1138
1152
|
.text-red-400 {
|
|
1139
1153
|
color: var(--color-red-400);
|
|
1140
1154
|
}
|
|
@@ -7427,15 +7427,38 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
|
7427
7427
|
challenge: safeBufferConvert(challenge.challenge),
|
|
7428
7428
|
pubKeyCredParams: challenge.pubKeyCredParams || [
|
|
7429
7429
|
{ type: "public-key", alg: -7 },
|
|
7430
|
-
// ES256
|
|
7431
|
-
{ type: "public-key", alg: -
|
|
7432
|
-
//
|
|
7430
|
+
// ES256 (ECDSA w/ SHA-256)
|
|
7431
|
+
{ type: "public-key", alg: -35 },
|
|
7432
|
+
// ES384 (ECDSA w/ SHA-384)
|
|
7433
|
+
{ type: "public-key", alg: -36 },
|
|
7434
|
+
// ES512 (ECDSA w/ SHA-512)
|
|
7435
|
+
{ type: "public-key", alg: -257 },
|
|
7436
|
+
// RS256 (RSASSA-PKCS1-v1_5 w/ SHA-256)
|
|
7437
|
+
{ type: "public-key", alg: -258 },
|
|
7438
|
+
// RS384 (RSASSA-PKCS1-v1_5 w/ SHA-384)
|
|
7439
|
+
{ type: "public-key", alg: -259 },
|
|
7440
|
+
// RS512 (RSASSA-PKCS1-v1_5 w/ SHA-512)
|
|
7441
|
+
{ type: "public-key", alg: -37 },
|
|
7442
|
+
// PS256 (RSASSA-PSS w/ SHA-256)
|
|
7443
|
+
{ type: "public-key", alg: -38 },
|
|
7444
|
+
// PS384 (RSASSA-PSS w/ SHA-384)
|
|
7445
|
+
{ type: "public-key", alg: -39 },
|
|
7446
|
+
// PS512 (RSASSA-PSS w/ SHA-512)
|
|
7447
|
+
{ type: "public-key", alg: -8 }
|
|
7448
|
+
// EdDSA (Ed25519)
|
|
7433
7449
|
],
|
|
7434
|
-
timeout: challenge.timeout ||
|
|
7450
|
+
timeout: challenge.timeout || 12e4,
|
|
7451
|
+
// Longer timeout for hardware keys
|
|
7435
7452
|
authenticatorSelection: challenge.authenticatorSelection || {
|
|
7436
|
-
|
|
7453
|
+
authenticatorAttachment: "cross-platform",
|
|
7454
|
+
// Prefer external authenticators like YubiKey
|
|
7455
|
+
requireResidentKey: false,
|
|
7456
|
+
residentKey: "discouraged",
|
|
7457
|
+
userVerification: "discouraged"
|
|
7458
|
+
// YubiKeys work better with discouraged
|
|
7437
7459
|
},
|
|
7438
|
-
attestation: challenge.attestation || "
|
|
7460
|
+
attestation: challenge.attestation || "direct"
|
|
7461
|
+
// Better compatibility with hardware keys
|
|
7439
7462
|
};
|
|
7440
7463
|
if (challenge.excludeCredentials && Array.isArray(challenge.excludeCredentials) && challenge.excludeCredentials.length > 0) {
|
|
7441
7464
|
cleanChallenge.excludeCredentials = challenge.excludeCredentials.map((cred) => ({
|
|
@@ -7465,6 +7488,16 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
|
7465
7488
|
if (!window.navigator.credentials || !window.PublicKeyCredential) {
|
|
7466
7489
|
throw new Error("WebAuthn is not supported in this browser");
|
|
7467
7490
|
}
|
|
7491
|
+
try {
|
|
7492
|
+
const available = await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable?.();
|
|
7493
|
+
console.log("Platform authenticator available:", available);
|
|
7494
|
+
if (PublicKeyCredential.isConditionalMediationAvailable) {
|
|
7495
|
+
const conditionalMediationAvailable = await PublicKeyCredential.isConditionalMediationAvailable();
|
|
7496
|
+
console.log("Conditional mediation available:", conditionalMediationAvailable);
|
|
7497
|
+
}
|
|
7498
|
+
} catch (checkError) {
|
|
7499
|
+
console.warn("Could not check authenticator availability:", checkError);
|
|
7500
|
+
}
|
|
7468
7501
|
if (!currentSession.value?.accessToken) {
|
|
7469
7502
|
throw new Error("Not authenticated. Please sign in again.");
|
|
7470
7503
|
}
|
|
@@ -7531,7 +7564,26 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
|
7531
7564
|
}
|
|
7532
7565
|
} catch (error) {
|
|
7533
7566
|
console.error("Hardware key registration error:", error);
|
|
7534
|
-
|
|
7567
|
+
let userErrorMessage = "Hardware key registration failed";
|
|
7568
|
+
if (error instanceof Error) {
|
|
7569
|
+
const errorMsg = error.message.toLowerCase();
|
|
7570
|
+
if (errorMsg.includes("not supported") || errorMsg.includes("webauthn")) {
|
|
7571
|
+
userErrorMessage = "WebAuthn is not supported in this browser. Please use Chrome, Firefox, Safari, or Edge.";
|
|
7572
|
+
} else if (errorMsg.includes("cancelled") || errorMsg.includes("aborted")) {
|
|
7573
|
+
userErrorMessage = "Hardware key registration was cancelled. Please try again and touch your key when prompted.";
|
|
7574
|
+
} else if (errorMsg.includes("timeout")) {
|
|
7575
|
+
userErrorMessage = "Hardware key registration timed out. Please ensure your key is connected and try again.";
|
|
7576
|
+
} else if (errorMsg.includes("not allowed") || errorMsg.includes("invalid state")) {
|
|
7577
|
+
userErrorMessage = "This hardware key may already be registered or cannot be used. Try a different key or contact support.";
|
|
7578
|
+
} else if (errorMsg.includes("can't be used") || errorMsg.includes("newer or different")) {
|
|
7579
|
+
userErrorMessage = "Your hardware key is not compatible. Please ensure you have a FIDO2/WebAuthn compatible key like YubiKey 5 Series, and that it's properly connected.";
|
|
7580
|
+
} else if (errorMsg.includes("user verification") || errorMsg.includes("pin")) {
|
|
7581
|
+
userErrorMessage = "Hardware key verification failed. If your key has a PIN, please enter it when prompted.";
|
|
7582
|
+
} else {
|
|
7583
|
+
userErrorMessage = error.message;
|
|
7584
|
+
}
|
|
7585
|
+
}
|
|
7586
|
+
errorMessage.value = userErrorMessage;
|
|
7535
7587
|
step.value = 5;
|
|
7536
7588
|
} finally {
|
|
7537
7589
|
internalLoading.value = false;
|
|
@@ -9199,6 +9251,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
9199
9251
|
const emit = __emit;
|
|
9200
9252
|
const { getSupportEmail, config: strandsConfig, getUrl } = useStrandsConfig.useStrandsConfig(props.config);
|
|
9201
9253
|
const { fetchProfile, updateProfile, changeEmail, currentUser: authUser, currentSession, isAuthenticated, refreshToken, signOut } = useStrandsAuth.useStrandsAuth();
|
|
9254
|
+
const { mfaDevices: mfaDevices2, mfaEnabled: mfaEnabled2, activeMfaDevices, fetchMfaDevices } = useStrandsMfa();
|
|
9202
9255
|
const internalUser = vue.ref(null);
|
|
9203
9256
|
const fetchingProfile = vue.ref(false);
|
|
9204
9257
|
const currentUser = vue.computed(() => {
|
|
@@ -9276,6 +9329,54 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
9276
9329
|
const years = Math.floor(diffDays / 365);
|
|
9277
9330
|
return years === 1 ? "1 year ago" : `${years} years ago`;
|
|
9278
9331
|
});
|
|
9332
|
+
const deviceTypeCounts = vue.computed(() => {
|
|
9333
|
+
const devices = activeMfaDevices.value || [];
|
|
9334
|
+
const counts = {
|
|
9335
|
+
totp: 0,
|
|
9336
|
+
email: 0,
|
|
9337
|
+
hardware: 0,
|
|
9338
|
+
passkey: 0
|
|
9339
|
+
};
|
|
9340
|
+
devices.forEach((device) => {
|
|
9341
|
+
if (device.device_type in counts) {
|
|
9342
|
+
counts[device.device_type]++;
|
|
9343
|
+
}
|
|
9344
|
+
});
|
|
9345
|
+
return counts;
|
|
9346
|
+
});
|
|
9347
|
+
const mfaDeviceChips = vue.computed(() => {
|
|
9348
|
+
const chips = [];
|
|
9349
|
+
const counts = deviceTypeCounts.value;
|
|
9350
|
+
if (counts.totp > 0) {
|
|
9351
|
+
chips.push({
|
|
9352
|
+
type: "totp",
|
|
9353
|
+
count: counts.totp,
|
|
9354
|
+
label: counts.totp === 1 ? "Auth app" : "Auth apps",
|
|
9355
|
+
icon: Smartphone,
|
|
9356
|
+
color: "bg-blue-50 text-blue-700 border-blue-200"
|
|
9357
|
+
});
|
|
9358
|
+
}
|
|
9359
|
+
if (counts.email > 0) {
|
|
9360
|
+
chips.push({
|
|
9361
|
+
type: "email",
|
|
9362
|
+
count: counts.email,
|
|
9363
|
+
label: "Email",
|
|
9364
|
+
icon: Mail,
|
|
9365
|
+
color: "bg-green-50 text-green-700 border-green-200"
|
|
9366
|
+
});
|
|
9367
|
+
}
|
|
9368
|
+
if (counts.hardware > 0 || counts.passkey > 0) {
|
|
9369
|
+
const totalHardware = counts.hardware + counts.passkey;
|
|
9370
|
+
chips.push({
|
|
9371
|
+
type: "hardware",
|
|
9372
|
+
count: totalHardware,
|
|
9373
|
+
label: totalHardware === 1 ? "Key" : "Keys",
|
|
9374
|
+
icon: KeyRound,
|
|
9375
|
+
color: "bg-purple-50 text-purple-700 border-purple-200"
|
|
9376
|
+
});
|
|
9377
|
+
}
|
|
9378
|
+
return chips;
|
|
9379
|
+
});
|
|
9279
9380
|
const getInitials2 = (firstName, lastName) => {
|
|
9280
9381
|
if (!firstName && !lastName) return "U";
|
|
9281
9382
|
return `${firstName?.[0] || ""}${lastName?.[0] || ""}`.toUpperCase();
|
|
@@ -9285,6 +9386,9 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
9285
9386
|
fetchingProfile.value = true;
|
|
9286
9387
|
try {
|
|
9287
9388
|
await fetchProfile();
|
|
9389
|
+
if (isAuthenticated.value) {
|
|
9390
|
+
await fetchMfaDevices();
|
|
9391
|
+
}
|
|
9288
9392
|
} catch (err) {
|
|
9289
9393
|
const errorMsg = err instanceof Error ? err.message : "Failed to load profile";
|
|
9290
9394
|
errorMessage.value = errorMsg;
|
|
@@ -9499,6 +9603,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
9499
9603
|
const handleMfaUpdated = async () => {
|
|
9500
9604
|
try {
|
|
9501
9605
|
await fetchProfile();
|
|
9606
|
+
await fetchMfaDevices();
|
|
9502
9607
|
successMessage.value = "MFA settings updated successfully";
|
|
9503
9608
|
emit("mfa-toggle", currentUser.value?.mfaEnabled || false);
|
|
9504
9609
|
} catch (err) {
|
|
@@ -9536,7 +9641,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
9536
9641
|
signingOut.value = false;
|
|
9537
9642
|
}
|
|
9538
9643
|
};
|
|
9539
|
-
const __returned__ = { props, emit, getSupportEmail, strandsConfig, getUrl, fetchProfile, updateProfile, changeEmail, authUser, currentSession, isAuthenticated, refreshToken, signOut, internalUser, fetchingProfile, currentUser, loading: loading2, uploading, signingOut, showPasswordChange, showEmailChange, emailChangeLoading, showMfaModal, successMessage, errorMessage, activeSessions, fileInputRef, form, emailChangeForm, passwordForm, errors, hasChanges, isPasswordFormValid, isEmailChangeFormValid, passwordLastUpdated, getInitials: getInitials2, fetchUserProfile, clearMessages, handleUpdateProfile, handlePasswordChange, handleEmailChange, triggerFileUpload, handleFileSelect, uploadAvatar, handleMfaUpdated, handleCancel, handleSignOut, get StrandsUiButton() {
|
|
9644
|
+
const __returned__ = { props, emit, getSupportEmail, strandsConfig, getUrl, fetchProfile, updateProfile, changeEmail, authUser, currentSession, isAuthenticated, refreshToken, signOut, mfaDevices: mfaDevices2, mfaEnabled: mfaEnabled2, activeMfaDevices, fetchMfaDevices, internalUser, fetchingProfile, currentUser, loading: loading2, uploading, signingOut, showPasswordChange, showEmailChange, emailChangeLoading, showMfaModal, successMessage, errorMessage, activeSessions, fileInputRef, form, emailChangeForm, passwordForm, errors, hasChanges, isPasswordFormValid, isEmailChangeFormValid, passwordLastUpdated, deviceTypeCounts, mfaDeviceChips, getInitials: getInitials2, fetchUserProfile, clearMessages, handleUpdateProfile, handlePasswordChange, handleEmailChange, triggerFileUpload, handleFileSelect, uploadAvatar, handleMfaUpdated, handleCancel, handleSignOut, get StrandsUiButton() {
|
|
9540
9645
|
return StrandsUiButton;
|
|
9541
9646
|
}, get StrandsUiInput() {
|
|
9542
9647
|
return StrandsUiInput;
|
|
@@ -9589,31 +9694,37 @@ const _hoisted_21 = {
|
|
|
9589
9694
|
class: "space-y-3 overflow-hidden"
|
|
9590
9695
|
};
|
|
9591
9696
|
const _hoisted_22 = { class: "p-4 bg-gray-50 rounded-xl" };
|
|
9592
|
-
const _hoisted_23 = { class: "flex items-
|
|
9593
|
-
const _hoisted_24 = { class: "
|
|
9594
|
-
const _hoisted_25 = { class: "
|
|
9595
|
-
const _hoisted_26 = {
|
|
9596
|
-
|
|
9597
|
-
|
|
9697
|
+
const _hoisted_23 = { class: "flex items-start justify-between gap-4" };
|
|
9698
|
+
const _hoisted_24 = { class: "flex-1" };
|
|
9699
|
+
const _hoisted_25 = { class: "text-sm text-gray-600 mt-1" };
|
|
9700
|
+
const _hoisted_26 = {
|
|
9701
|
+
key: 0,
|
|
9702
|
+
class: "flex flex-wrap gap-2 mt-3"
|
|
9703
|
+
};
|
|
9704
|
+
const _hoisted_27 = { class: "ml-1" };
|
|
9705
|
+
const _hoisted_28 = { class: "p-4 bg-gray-50 rounded-xl" };
|
|
9706
|
+
const _hoisted_29 = { class: "flex items-center justify-between gap-2" };
|
|
9707
|
+
const _hoisted_30 = { class: "text-sm text-gray-600" };
|
|
9708
|
+
const _hoisted_31 = {
|
|
9598
9709
|
key: 0,
|
|
9599
9710
|
class: "flex flex-col sm:flex-row gap-3 pt-6 border-t border-gray-200 animate-slide-up"
|
|
9600
9711
|
};
|
|
9601
|
-
const
|
|
9712
|
+
const _hoisted_32 = {
|
|
9602
9713
|
key: 0,
|
|
9603
9714
|
class: "mt-6 animate-fade-in"
|
|
9604
9715
|
};
|
|
9605
|
-
const
|
|
9606
|
-
const
|
|
9607
|
-
const
|
|
9608
|
-
const
|
|
9716
|
+
const _hoisted_33 = { class: "alert-success" };
|
|
9717
|
+
const _hoisted_34 = { class: "flex items-start gap-3" };
|
|
9718
|
+
const _hoisted_35 = { class: "font-medium" };
|
|
9719
|
+
const _hoisted_36 = {
|
|
9609
9720
|
key: 1,
|
|
9610
9721
|
class: "mt-6 animate-fade-in"
|
|
9611
9722
|
};
|
|
9612
|
-
const
|
|
9613
|
-
const
|
|
9614
|
-
const
|
|
9615
|
-
const
|
|
9616
|
-
const
|
|
9723
|
+
const _hoisted_37 = { class: "alert-error" };
|
|
9724
|
+
const _hoisted_38 = { class: "flex items-start gap-3" };
|
|
9725
|
+
const _hoisted_39 = { class: "font-medium" };
|
|
9726
|
+
const _hoisted_40 = { key: 0 };
|
|
9727
|
+
const _hoisted_41 = { class: "text-gray-400 text-sm" };
|
|
9617
9728
|
function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
9618
9729
|
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
|
|
9619
9730
|
vue.createElementVNode("div", _hoisted_2$4, [
|
|
@@ -9910,7 +10021,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
9910
10021
|
vue.createCommentVNode(" Two-Factor Authentication "),
|
|
9911
10022
|
vue.createElementVNode("div", _hoisted_22, [
|
|
9912
10023
|
vue.createElementVNode("div", _hoisted_23, [
|
|
9913
|
-
vue.createElementVNode("div",
|
|
10024
|
+
vue.createElementVNode("div", _hoisted_24, [
|
|
9914
10025
|
_cache[17] || (_cache[17] = vue.createElementVNode(
|
|
9915
10026
|
"h4",
|
|
9916
10027
|
{ class: "font-medium text-gray-900" },
|
|
@@ -9920,16 +10031,60 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
9920
10031
|
)),
|
|
9921
10032
|
vue.createElementVNode(
|
|
9922
10033
|
"p",
|
|
9923
|
-
|
|
10034
|
+
_hoisted_25,
|
|
9924
10035
|
vue.toDisplayString($setup.currentUser?.mfaEnabled ? "Enabled" : "Add extra security to your account"),
|
|
9925
10036
|
1
|
|
9926
10037
|
/* TEXT */
|
|
9927
|
-
)
|
|
10038
|
+
),
|
|
10039
|
+
vue.createCommentVNode(" Device Type Chips "),
|
|
10040
|
+
$setup.mfaDeviceChips.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_26, [
|
|
10041
|
+
(vue.openBlock(true), vue.createElementBlock(
|
|
10042
|
+
vue.Fragment,
|
|
10043
|
+
null,
|
|
10044
|
+
vue.renderList($setup.mfaDeviceChips, (chip) => {
|
|
10045
|
+
return vue.openBlock(), vue.createElementBlock(
|
|
10046
|
+
"div",
|
|
10047
|
+
{
|
|
10048
|
+
key: chip.type,
|
|
10049
|
+
class: vue.normalizeClass([
|
|
10050
|
+
"inline-flex items-center px-2.5 py-1 rounded-lg text-xs font-medium border transition-colors",
|
|
10051
|
+
chip.color
|
|
10052
|
+
])
|
|
10053
|
+
},
|
|
10054
|
+
[
|
|
10055
|
+
(vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(chip.icon), {
|
|
10056
|
+
size: 12,
|
|
10057
|
+
class: "mr-1.5"
|
|
10058
|
+
})),
|
|
10059
|
+
vue.createElementVNode(
|
|
10060
|
+
"span",
|
|
10061
|
+
null,
|
|
10062
|
+
vue.toDisplayString(chip.count),
|
|
10063
|
+
1
|
|
10064
|
+
/* TEXT */
|
|
10065
|
+
),
|
|
10066
|
+
vue.createElementVNode(
|
|
10067
|
+
"span",
|
|
10068
|
+
_hoisted_27,
|
|
10069
|
+
vue.toDisplayString(chip.label),
|
|
10070
|
+
1
|
|
10071
|
+
/* TEXT */
|
|
10072
|
+
)
|
|
10073
|
+
],
|
|
10074
|
+
2
|
|
10075
|
+
/* CLASS */
|
|
10076
|
+
);
|
|
10077
|
+
}),
|
|
10078
|
+
128
|
|
10079
|
+
/* KEYED_FRAGMENT */
|
|
10080
|
+
))
|
|
10081
|
+
])) : vue.createCommentVNode("v-if", true)
|
|
9928
10082
|
]),
|
|
9929
10083
|
vue.createVNode($setup["StrandsUiButton"], {
|
|
9930
10084
|
variant: $setup.currentUser?.mfaEnabled ? "secondary" : "primary",
|
|
9931
10085
|
size: "sm",
|
|
9932
|
-
onClick: _cache[9] || (_cache[9] = ($event) => $setup.showMfaModal = true)
|
|
10086
|
+
onClick: _cache[9] || (_cache[9] = ($event) => $setup.showMfaModal = true),
|
|
10087
|
+
class: "flex-shrink-0"
|
|
9933
10088
|
}, {
|
|
9934
10089
|
default: vue.withCtx(() => [
|
|
9935
10090
|
vue.createTextVNode(
|
|
@@ -9944,8 +10099,8 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
9944
10099
|
])
|
|
9945
10100
|
]),
|
|
9946
10101
|
vue.createCommentVNode(" Active Sessions "),
|
|
9947
|
-
vue.createElementVNode("div",
|
|
9948
|
-
vue.createElementVNode("div",
|
|
10102
|
+
vue.createElementVNode("div", _hoisted_28, [
|
|
10103
|
+
vue.createElementVNode("div", _hoisted_29, [
|
|
9949
10104
|
vue.createElementVNode("div", null, [
|
|
9950
10105
|
_cache[18] || (_cache[18] = vue.createElementVNode(
|
|
9951
10106
|
"h4",
|
|
@@ -9956,7 +10111,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
9956
10111
|
)),
|
|
9957
10112
|
vue.createElementVNode(
|
|
9958
10113
|
"p",
|
|
9959
|
-
|
|
10114
|
+
_hoisted_30,
|
|
9960
10115
|
vue.toDisplayString($setup.activeSessions.length) + " active device(s)",
|
|
9961
10116
|
1
|
|
9962
10117
|
/* TEXT */
|
|
@@ -9983,7 +10138,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
9983
10138
|
])
|
|
9984
10139
|
]),
|
|
9985
10140
|
vue.createCommentVNode(" Action Buttons - Only show when changes are made "),
|
|
9986
|
-
$setup.hasChanges ? (vue.openBlock(), vue.createElementBlock("div",
|
|
10141
|
+
$setup.hasChanges ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_31, [
|
|
9987
10142
|
vue.createVNode($setup["StrandsUiButton"], {
|
|
9988
10143
|
type: "submit",
|
|
9989
10144
|
variant: "primary",
|
|
@@ -10021,9 +10176,9 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
10021
10176
|
/* NEED_HYDRATION */
|
|
10022
10177
|
),
|
|
10023
10178
|
vue.createCommentVNode(" Success/Error Messages "),
|
|
10024
|
-
$setup.successMessage ? (vue.openBlock(), vue.createElementBlock("div",
|
|
10025
|
-
vue.createElementVNode("div",
|
|
10026
|
-
vue.createElementVNode("div",
|
|
10179
|
+
$setup.successMessage ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_32, [
|
|
10180
|
+
vue.createElementVNode("div", _hoisted_33, [
|
|
10181
|
+
vue.createElementVNode("div", _hoisted_34, [
|
|
10027
10182
|
_cache[22] || (_cache[22] = vue.createElementVNode(
|
|
10028
10183
|
"svg",
|
|
10029
10184
|
{
|
|
@@ -10043,7 +10198,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
10043
10198
|
)),
|
|
10044
10199
|
vue.createElementVNode(
|
|
10045
10200
|
"p",
|
|
10046
|
-
|
|
10201
|
+
_hoisted_35,
|
|
10047
10202
|
vue.toDisplayString($setup.successMessage),
|
|
10048
10203
|
1
|
|
10049
10204
|
/* TEXT */
|
|
@@ -10051,9 +10206,9 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
10051
10206
|
])
|
|
10052
10207
|
])
|
|
10053
10208
|
])) : vue.createCommentVNode("v-if", true),
|
|
10054
|
-
$setup.errorMessage ? (vue.openBlock(), vue.createElementBlock("div",
|
|
10055
|
-
vue.createElementVNode("div",
|
|
10056
|
-
vue.createElementVNode("div",
|
|
10209
|
+
$setup.errorMessage ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_36, [
|
|
10210
|
+
vue.createElementVNode("div", _hoisted_37, [
|
|
10211
|
+
vue.createElementVNode("div", _hoisted_38, [
|
|
10057
10212
|
_cache[23] || (_cache[23] = vue.createElementVNode(
|
|
10058
10213
|
"svg",
|
|
10059
10214
|
{
|
|
@@ -10073,7 +10228,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
10073
10228
|
)),
|
|
10074
10229
|
vue.createElementVNode(
|
|
10075
10230
|
"p",
|
|
10076
|
-
|
|
10231
|
+
_hoisted_39,
|
|
10077
10232
|
vue.toDisplayString($setup.errorMessage),
|
|
10078
10233
|
1
|
|
10079
10234
|
/* TEXT */
|
|
@@ -10104,8 +10259,8 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
10104
10259
|
/* STABLE */
|
|
10105
10260
|
}, 8, ["disabled"]),
|
|
10106
10261
|
vue.createCommentVNode(" Need help "),
|
|
10107
|
-
$setup.getSupportEmail() ? (vue.openBlock(), vue.createElementBlock("div",
|
|
10108
|
-
vue.createElementVNode("p",
|
|
10262
|
+
$setup.getSupportEmail() ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_40, [
|
|
10263
|
+
vue.createElementVNode("p", _hoisted_41, [
|
|
10109
10264
|
_cache[25] || (_cache[25] = vue.createTextVNode(
|
|
10110
10265
|
" Need help? ",
|
|
10111
10266
|
-1
|