@strands.gg/accui 1.3.3 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/accui.css CHANGED
@@ -605,6 +605,9 @@
605
605
  .animate-spin {
606
606
  animation: var(--animate-spin);
607
607
  }
608
+ .cursor-not-allowed {
609
+ cursor: not-allowed;
610
+ }
608
611
  .cursor-pointer {
609
612
  cursor: pointer;
610
613
  }
@@ -1237,6 +1240,9 @@
1237
1240
  .opacity-25 {
1238
1241
  opacity: 25%;
1239
1242
  }
1243
+ .opacity-60 {
1244
+ opacity: 60%;
1245
+ }
1240
1246
  .opacity-75 {
1241
1247
  opacity: 75%;
1242
1248
  }
@@ -1031,7 +1031,11 @@ function useStrandsMfa() {
1031
1031
  const { getUrl } = useStrandsConfig.useStrandsConfig();
1032
1032
  const { currentSession } = useStrandsAuth.useStrandsAuth();
1033
1033
  const hasMfaDevices = vue.computed(() => mfaDevices.value.length > 0);
1034
- const activeMfaDevices = vue.computed(() => mfaDevices.value.filter((d) => d.is_active));
1034
+ const activeMfaDevices = vue.computed(
1035
+ () => mfaDevices.value.filter(
1036
+ (d) => d.is_active && d.device_type !== "hardware" && d.device_type !== "passkey"
1037
+ )
1038
+ );
1035
1039
  const makeAuthenticatedRequest = async (url, options = {}) => {
1036
1040
  if (!currentSession.value?.accessToken) {
1037
1041
  throw new Error("No access token available");
@@ -1266,7 +1270,12 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
1266
1270
  const cooldownActive = vue.ref(false);
1267
1271
  const cooldownSeconds = vue.ref(0);
1268
1272
  let cooldownInterval = null;
1269
- const availableMethods = vue.computed(() => props.availableMfaMethods || []);
1273
+ const availableMethods = vue.computed(() => {
1274
+ const methods = props.availableMfaMethods || [];
1275
+ return methods.filter(
1276
+ (method) => method.device_type !== "hardware" && method.device_type !== "passkey"
1277
+ );
1278
+ });
1270
1279
  vue.watch(() => availableMethods.value, (methods) => {
1271
1280
  if (methods.length === 1) {
1272
1281
  selectedMethod.value = methods[0];
@@ -1512,7 +1521,7 @@ const _hoisted_19$6 = {
1512
1521
  key: 3,
1513
1522
  class: "text-center space-y-4"
1514
1523
  };
1515
- const _hoisted_20$4 = { class: "bg-blue-50 border border-blue-200 rounded-lg p-4" };
1524
+ const _hoisted_20$5 = { class: "bg-blue-50 border border-blue-200 rounded-lg p-4" };
1516
1525
  const _hoisted_21$4 = { class: "flex items-center space-x-3" };
1517
1526
  const _hoisted_22$3 = { class: "text-left" };
1518
1527
  const _hoisted_23$2 = { class: "font-medium text-blue-900" };
@@ -1526,21 +1535,21 @@ const _hoisted_27$2 = {
1526
1535
  key: 4,
1527
1536
  class: "space-y-4"
1528
1537
  };
1529
- const _hoisted_28$2 = {
1538
+ const _hoisted_28$1 = {
1530
1539
  key: 0,
1531
1540
  class: "bg-green-50 border border-green-200 rounded-lg p-4"
1532
1541
  };
1533
- const _hoisted_29$2 = {
1542
+ const _hoisted_29$1 = {
1534
1543
  key: 1,
1535
1544
  class: "text-sm text-gray-600"
1536
1545
  };
1537
- const _hoisted_30$2 = {
1546
+ const _hoisted_30$1 = {
1538
1547
  key: 2,
1539
1548
  class: "flex justify-between text-sm"
1540
1549
  };
1541
- const _hoisted_31$2 = ["disabled"];
1542
- const _hoisted_32$2 = { class: "pt-4 border-t border-gray-200" };
1543
- const _hoisted_33$2 = {
1550
+ const _hoisted_31$1 = ["disabled"];
1551
+ const _hoisted_32$1 = { class: "pt-4 border-t border-gray-200" };
1552
+ const _hoisted_33$1 = {
1544
1553
  key: 3,
1545
1554
  class: "space-y-4 bg-amber-50 border border-amber-200 rounded-lg p-4"
1546
1555
  };
@@ -1749,7 +1758,7 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
1749
1758
  ])) : vue.createCommentVNode("v-if", true),
1750
1759
  vue.createCommentVNode(" Hardware Key & Passkey Authentication "),
1751
1760
  $setup.selectedMethod?.device_type === "hardware" || $setup.selectedMethod?.device_type === "passkey" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_19$6, [
1752
- vue.createElementVNode("div", _hoisted_20$4, [
1761
+ vue.createElementVNode("div", _hoisted_20$5, [
1753
1762
  vue.createElementVNode("div", _hoisted_21$4, [
1754
1763
  _cache[11] || (_cache[11] = vue.createElementVNode(
1755
1764
  "div",
@@ -1879,7 +1888,7 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
1879
1888
  vue.createCommentVNode(" Code Input "),
1880
1889
  $setup.selectedMethod && $setup.selectedMethod.device_type !== "hardware" && $setup.selectedMethod.device_type !== "passkey" && ($setup.selectedMethod.device_type !== "email" || $setup.emailCodeSent) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_27$2, [
1881
1890
  vue.createCommentVNode(" Email confirmation "),
1882
- $setup.selectedMethod.device_type === "email" && $setup.emailCodeSent ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_28$2, _cache[14] || (_cache[14] = [
1891
+ $setup.selectedMethod.device_type === "email" && $setup.emailCodeSent ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_28$1, _cache[14] || (_cache[14] = [
1883
1892
  vue.createElementVNode(
1884
1893
  "div",
1885
1894
  { class: "flex items-start space-x-2" },
@@ -1920,21 +1929,21 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
1920
1929
  vue.createCommentVNode(" TOTP Help "),
1921
1930
  $setup.selectedMethod.device_type === "totp" ? (vue.openBlock(), vue.createElementBlock(
1922
1931
  "div",
1923
- _hoisted_29$2,
1932
+ _hoisted_29$1,
1924
1933
  ' Open your authenticator app and enter the 6-digit code for "' + vue.toDisplayString($setup.selectedMethod.device_name) + '" ',
1925
1934
  1
1926
1935
  /* TEXT */
1927
1936
  )) : vue.createCommentVNode("v-if", true),
1928
1937
  vue.createCommentVNode(" Email Resend "),
1929
- $setup.selectedMethod.device_type === "email" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_30$2, [
1938
+ $setup.selectedMethod.device_type === "email" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_30$1, [
1930
1939
  vue.createElementVNode("button", {
1931
1940
  onClick: $setup.sendEmailCode,
1932
1941
  disabled: $setup.loading || $setup.cooldownActive,
1933
1942
  class: "text-strands-600 hover:text-strands-800 disabled:text-gray-400 disabled:cursor-not-allowed"
1934
- }, vue.toDisplayString($setup.cooldownActive ? `Resend in ${$setup.cooldownSeconds}s` : "Resend Code"), 9, _hoisted_31$2)
1943
+ }, vue.toDisplayString($setup.cooldownActive ? `Resend in ${$setup.cooldownSeconds}s` : "Resend Code"), 9, _hoisted_31$1)
1935
1944
  ])) : vue.createCommentVNode("v-if", true),
1936
1945
  vue.createCommentVNode(" Backup Codes Option "),
1937
- vue.createElementVNode("div", _hoisted_32$2, [
1946
+ vue.createElementVNode("div", _hoisted_32$1, [
1938
1947
  vue.createElementVNode("button", {
1939
1948
  onClick: _cache[3] || (_cache[3] = ($event) => $setup.showBackupCodeInput = !$setup.showBackupCodeInput),
1940
1949
  class: "flex items-center text-sm text-gray-600 hover:text-gray-800 transition-colors"
@@ -1966,7 +1975,7 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
1966
1975
  ])
1967
1976
  ]),
1968
1977
  vue.createCommentVNode(" Backup Code Input "),
1969
- $setup.showBackupCodeInput ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_33$2, [
1978
+ $setup.showBackupCodeInput ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_33$1, [
1970
1979
  _cache[16] || (_cache[16] = vue.createElementVNode(
1971
1980
  "div",
1972
1981
  { class: "flex items-start space-x-2 mb-3" },
@@ -3408,7 +3417,7 @@ const _hoisted_16$5 = { class: "alert-error" };
3408
3417
  const _hoisted_17$5 = { class: "flex items-start gap-3" };
3409
3418
  const _hoisted_18$5 = { class: "font-medium" };
3410
3419
  const _hoisted_19$5 = { class: "mt-8 text-center" };
3411
- const _hoisted_20$3 = { class: "text-sm text-neutral-600" };
3420
+ const _hoisted_20$4 = { class: "text-sm text-neutral-600" };
3412
3421
  const _hoisted_21$3 = { key: 0 };
3413
3422
  const _hoisted_22$2 = { class: "text-neutral-400 text-sm" };
3414
3423
  function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
@@ -3673,7 +3682,7 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
3673
3682
  ])) : vue.createCommentVNode("v-if", true),
3674
3683
  vue.createCommentVNode(" Sign in link "),
3675
3684
  vue.createElementVNode("div", _hoisted_19$5, [
3676
- vue.createElementVNode("p", _hoisted_20$3, [
3685
+ vue.createElementVNode("p", _hoisted_20$4, [
3677
3686
  _cache[10] || (_cache[10] = vue.createTextVNode(
3678
3687
  " Already have an account? ",
3679
3688
  -1
@@ -7823,7 +7832,7 @@ const _hoisted_18$3 = {
7823
7832
  class: "space-y-4"
7824
7833
  };
7825
7834
  const _hoisted_19$3 = { class: "text-center" };
7826
- const _hoisted_20$2 = { class: "text-sm text-gray-600 mb-6" };
7835
+ const _hoisted_20$3 = { class: "text-sm text-gray-600 mb-6" };
7827
7836
  const _hoisted_21$2 = { class: "flex justify-end space-x-3 pt-4" };
7828
7837
  function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
7829
7838
  return vue.openBlock(), vue.createBlock($setup["UiModal"], {
@@ -8276,7 +8285,7 @@ function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
8276
8285
  )),
8277
8286
  vue.createElementVNode(
8278
8287
  "p",
8279
- _hoisted_20$2,
8288
+ _hoisted_20$3,
8280
8289
  vue.toDisplayString($setup.errorMessage),
8281
8290
  1
8282
8291
  /* TEXT */
@@ -9009,21 +9018,15 @@ const _hoisted_15$2 = { class: "flex flex-col space-y-2 ml-4" };
9009
9018
  const _hoisted_16$2 = { class: "flex items-center justify-between" };
9010
9019
  const _hoisted_17$2 = { class: "flex-shrink-0 w-14 h-14 bg-[var(--strands-primary)] bg-opacity-10 rounded-xl flex items-center justify-center group-hover:bg-[var(--strands-primary)] group-hover:bg-opacity-15 transition-colors" };
9011
9020
  const _hoisted_18$2 = { class: "flex flex-col space-y-2 ml-4" };
9012
- const _hoisted_19$2 = { class: "flex items-center justify-between" };
9013
- const _hoisted_20$1 = { class: "flex-shrink-0 w-14 h-14 bg-[var(--strands-primary)] bg-opacity-10 rounded-xl flex items-center justify-center group-hover:bg-[var(--strands-primary)] group-hover:bg-opacity-15 transition-colors" };
9014
- const _hoisted_21$1 = { class: "flex flex-col space-y-2 ml-4" };
9015
- const _hoisted_22$1 = { class: "flex items-center justify-between" };
9016
- const _hoisted_23$1 = { class: "flex-shrink-0 w-14 h-14 bg-[var(--strands-primary)] bg-opacity-10 rounded-xl flex items-center justify-center group-hover:bg-[var(--strands-primary)] group-hover:bg-opacity-15 transition-colors" };
9017
- const _hoisted_24$1 = { class: "flex flex-col space-y-2 ml-4" };
9018
- const _hoisted_25$1 = { class: "space-y-6" };
9019
- const _hoisted_26$1 = { class: "max-h-96 overflow-y-auto space-y-4 pr-2" };
9020
- const _hoisted_27$1 = { class: "flex items-start justify-between" };
9021
- const _hoisted_28$1 = { class: "flex items-start space-x-4" };
9022
- const _hoisted_29$1 = { class: "min-w-0 flex-1" };
9023
- const _hoisted_30$1 = { class: "font-semibold text-gray-900 text-lg" };
9024
- const _hoisted_31$1 = { class: "text-sm text-gray-600 mt-1" };
9025
- const _hoisted_32$1 = { class: "text-xs text-gray-500 mt-2" };
9026
- const _hoisted_33$1 = { class: "flex flex-col space-y-2 ml-4" };
9021
+ const _hoisted_19$2 = { class: "space-y-6" };
9022
+ const _hoisted_20$2 = { class: "max-h-96 overflow-y-auto space-y-4 pr-2" };
9023
+ const _hoisted_21$1 = { class: "flex items-start justify-between" };
9024
+ const _hoisted_22$1 = { class: "flex items-start space-x-4" };
9025
+ const _hoisted_23$1 = { class: "min-w-0 flex-1" };
9026
+ const _hoisted_24$1 = { class: "font-semibold text-gray-900 text-lg" };
9027
+ const _hoisted_25$1 = { class: "text-sm text-gray-600 mt-1" };
9028
+ const _hoisted_26$1 = { class: "text-xs text-gray-500 mt-2" };
9029
+ const _hoisted_27$1 = { class: "flex flex-col space-y-2 ml-4" };
9027
9030
  function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
9028
9031
  return vue.openBlock(), vue.createElementBlock(
9029
9032
  vue.Fragment,
@@ -9154,7 +9157,7 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
9154
9157
  vue.createCommentVNode(" Tab Content: Add New Device "),
9155
9158
  $setup.activeTab === "add" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_11$2, [
9156
9159
  vue.createElementVNode("div", null, [
9157
- _cache[21] || (_cache[21] = vue.createElementVNode(
9160
+ _cache[17] || (_cache[17] = vue.createElementVNode(
9158
9161
  "h3",
9159
9162
  { class: "text-xl font-semibold text-gray-900 mb-6" },
9160
9163
  "Choose Your Authentication Method",
@@ -9250,94 +9253,35 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
9250
9253
  ])
9251
9254
  ])
9252
9255
  ]),
9253
- vue.createCommentVNode(" Hardware Key Setup "),
9254
- vue.createElementVNode("div", {
9255
- class: "group p-6 bg-white border border-gray-200 rounded-xl hover:border-gray-300 hover:shadow-md transition-all duration-200 cursor-pointer",
9256
- onClick: $setup.startHardwareKeySetup
9257
- }, [
9258
- vue.createElementVNode("div", _hoisted_19$2, [
9259
- vue.createElementVNode("div", _hoisted_20$1, [
9260
- vue.createVNode($setup["KeyRound"], {
9261
- size: 24,
9262
- class: "text-[var(--strands-primary)]"
9263
- })
9264
- ]),
9265
- _cache[18] || (_cache[18] = vue.createElementVNode(
9266
- "div",
9267
- { class: "flex items-start space-x-4" },
9268
- [
9269
- vue.createElementVNode("div", { class: "min-w-0 flex-1" }, [
9270
- vue.createElementVNode("h4", { class: "font-semibold text-gray-900 text-lg" }, "Hardware Security Key"),
9271
- vue.createElementVNode("p", { class: "text-xs text-gray-500 mt-2" }, " Use YubiKey, FIDO2, or other physical security keys for ultimate protection ")
9272
- ])
9273
- ],
9274
- -1
9275
- /* CACHED */
9276
- )),
9277
- vue.createElementVNode("div", _hoisted_21$1, [
9278
- vue.createVNode($setup["StrandsUiButton"], {
9279
- variant: "primary",
9280
- size: "md",
9281
- onClick: vue.withModifiers($setup.startHardwareKeySetup, ["stop"]),
9282
- disabled: $setup.mfaLoading
9283
- }, {
9284
- default: vue.withCtx(() => _cache[17] || (_cache[17] = [
9285
- vue.createTextVNode(
9286
- " Setup ",
9287
- -1
9288
- /* CACHED */
9289
- )
9290
- ])),
9291
- _: 1,
9292
- __: [17]
9293
- }, 8, ["disabled"])
9294
- ])
9295
- ])
9296
- ]),
9297
- vue.createCommentVNode(" Passkey Setup "),
9298
- vue.createElementVNode("div", {
9299
- class: "group p-6 bg-white border border-gray-200 rounded-xl hover:border-gray-300 hover:shadow-md transition-all duration-200 cursor-pointer",
9300
- onClick: $setup.startPasskeySetup
9301
- }, [
9302
- vue.createElementVNode("div", _hoisted_22$1, [
9303
- vue.createElementVNode("div", _hoisted_23$1, [
9304
- vue.createVNode($setup["Shield"], {
9305
- size: 24,
9306
- class: "text-[var(--strands-primary)]"
9307
- })
9308
- ]),
9309
- _cache[20] || (_cache[20] = vue.createElementVNode(
9310
- "div",
9311
- { class: "flex items-start space-x-4" },
9312
- [
9313
- vue.createElementVNode("div", { class: "min-w-0 flex-1" }, [
9314
- vue.createElementVNode("h4", { class: "font-semibold text-gray-900 text-lg" }, "Passkey"),
9315
- vue.createElementVNode("p", { class: "text-xs text-gray-500 mt-2" }, " Use your device's built-in biometrics, PIN, or cross-device passkeys ")
9316
- ])
9317
- ],
9318
- -1
9319
- /* CACHED */
9320
- )),
9321
- vue.createElementVNode("div", _hoisted_24$1, [
9322
- vue.createVNode($setup["StrandsUiButton"], {
9323
- variant: "primary",
9324
- size: "md",
9325
- onClick: vue.withModifiers($setup.startPasskeySetup, ["stop"]),
9326
- disabled: $setup.mfaLoading
9327
- }, {
9328
- default: vue.withCtx(() => _cache[19] || (_cache[19] = [
9329
- vue.createTextVNode(
9330
- " Setup ",
9331
- -1
9332
- /* CACHED */
9333
- )
9334
- ])),
9335
- _: 1,
9336
- __: [19]
9337
- }, 8, ["disabled"])
9338
- ])
9339
- ])
9340
- ])
9256
+ vue.createCommentVNode(" Hardware Key Setup - Temporarily Disabled "),
9257
+ vue.createCommentVNode(' \n <div class="group p-6 bg-white border border-gray-200 rounded-xl hover:border-gray-300 hover:shadow-md transition-all duration-200 cursor-pointer" @click="startHardwareKeySetup">\n <div class="flex items-center justify-between">\n <div class="flex-shrink-0 w-14 h-14 bg-[var(--strands-primary)] bg-opacity-10 rounded-xl flex items-center justify-center group-hover:bg-[var(--strands-primary)] group-hover:bg-opacity-15 transition-colors">\n <KeyRound :size="24" class="text-[var(--strands-primary)]" />\n </div>\n <div class="flex items-start space-x-4">\n <div class="min-w-0 flex-1">\n <h4 class="font-semibold text-gray-900 text-lg">Hardware Security Key</h4>\n <p class="text-xs text-gray-500 mt-2">\n Use YubiKey, FIDO2, or other physical security keys for ultimate protection\n </p>\n </div>\n </div>\n <div class="flex flex-col space-y-2 ml-4">\n <StrandsUiButton\n variant="primary"\n size="md"\n @click.stop="startHardwareKeySetup"\n :disabled="mfaLoading"\n >\n Setup\n </StrandsUiButton>\n </div>\n </div>\n </div>\n\n <-- Passkey Setup - Temporarily Disabled '),
9258
+ vue.createCommentVNode(`
9259
+ <div class="group p-6 bg-white border border-gray-200 rounded-xl hover:border-gray-300 hover:shadow-md transition-all duration-200 cursor-pointer" @click="startPasskeySetup">
9260
+ <div class="flex items-center justify-between">
9261
+ <div class="flex-shrink-0 w-14 h-14 bg-[var(--strands-primary)] bg-opacity-10 rounded-xl flex items-center justify-center group-hover:bg-[var(--strands-primary)] group-hover:bg-opacity-15 transition-colors">
9262
+ <Shield :size="24" class="text-[var(--strands-primary)]" />
9263
+ </div>
9264
+ <div class="flex items-start space-x-4">
9265
+ <div class="min-w-0 flex-1">
9266
+ <h4 class="font-semibold text-gray-900 text-lg">Passkey</h4>
9267
+ <p class="text-xs text-gray-500 mt-2">
9268
+ Use your device's built-in biometrics, PIN, or cross-device passkeys
9269
+ </p>
9270
+ </div>
9271
+ </div>
9272
+ <div class="flex flex-col space-y-2 ml-4">
9273
+ <StrandsUiButton
9274
+ variant="primary"
9275
+ size="md"
9276
+ @click.stop="startPasskeySetup"
9277
+ :disabled="mfaLoading"
9278
+ >
9279
+ Setup
9280
+ </StrandsUiButton>
9281
+ </div>
9282
+ </div>
9283
+ </div>
9284
+ `)
9341
9285
  ])
9342
9286
  ])
9343
9287
  ])) : $setup.activeTab === "manage" && $setup.activeMfaDevices.length > 0 ? (vue.openBlock(), vue.createElementBlock(
@@ -9345,16 +9289,16 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
9345
9289
  { key: 1 },
9346
9290
  [
9347
9291
  vue.createCommentVNode(" Tab Content: Active Devices "),
9348
- vue.createElementVNode("div", _hoisted_25$1, [
9292
+ vue.createElementVNode("div", _hoisted_19$2, [
9349
9293
  vue.createElementVNode("div", null, [
9350
- _cache[25] || (_cache[25] = vue.createElementVNode(
9294
+ _cache[21] || (_cache[21] = vue.createElementVNode(
9351
9295
  "h3",
9352
9296
  { class: "text-xl font-semibold text-gray-900 mb-6" },
9353
9297
  "Manage Your Active Devices",
9354
9298
  -1
9355
9299
  /* CACHED */
9356
9300
  )),
9357
- vue.createElementVNode("div", _hoisted_26$1, [
9301
+ vue.createElementVNode("div", _hoisted_20$2, [
9358
9302
  (vue.openBlock(true), vue.createElementBlock(
9359
9303
  vue.Fragment,
9360
9304
  null,
@@ -9363,8 +9307,8 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
9363
9307
  key: device.id,
9364
9308
  class: "group p-6 bg-white border border-gray-200 rounded-xl hover:border-gray-300 hover:shadow-md transition-all duration-200"
9365
9309
  }, [
9366
- vue.createElementVNode("div", _hoisted_27$1, [
9367
- vue.createElementVNode("div", _hoisted_28$1, [
9310
+ vue.createElementVNode("div", _hoisted_21$1, [
9311
+ vue.createElementVNode("div", _hoisted_22$1, [
9368
9312
  vue.createElementVNode(
9369
9313
  "div",
9370
9314
  {
@@ -9379,31 +9323,31 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
9379
9323
  2
9380
9324
  /* CLASS */
9381
9325
  ),
9382
- vue.createElementVNode("div", _hoisted_29$1, [
9326
+ vue.createElementVNode("div", _hoisted_23$1, [
9383
9327
  vue.createElementVNode(
9384
9328
  "h4",
9385
- _hoisted_30$1,
9329
+ _hoisted_24$1,
9386
9330
  vue.toDisplayString(device.device_name),
9387
9331
  1
9388
9332
  /* TEXT */
9389
9333
  ),
9390
9334
  vue.createElementVNode(
9391
9335
  "p",
9392
- _hoisted_31$1,
9336
+ _hoisted_25$1,
9393
9337
  vue.toDisplayString($setup.getDeviceTypeName(device.device_type)),
9394
9338
  1
9395
9339
  /* TEXT */
9396
9340
  ),
9397
9341
  vue.createElementVNode(
9398
9342
  "p",
9399
- _hoisted_32$1,
9343
+ _hoisted_26$1,
9400
9344
  " Last used " + vue.toDisplayString($setup.formatLastUsed(device.last_used_at)),
9401
9345
  1
9402
9346
  /* TEXT */
9403
9347
  )
9404
9348
  ])
9405
9349
  ]),
9406
- vue.createElementVNode("div", _hoisted_33$1, [
9350
+ vue.createElementVNode("div", _hoisted_27$1, [
9407
9351
  vue.createCommentVNode(" Backup codes button for TOTP, Hardware Key, and Passkey devices "),
9408
9352
  device.device_type === "totp" || device.device_type === "hardware" || device.device_type === "passkey" ? (vue.openBlock(), vue.createBlock($setup["StrandsUiButton"], {
9409
9353
  key: 0,
@@ -9417,14 +9361,14 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
9417
9361
  size: 14,
9418
9362
  class: "mr-2"
9419
9363
  }),
9420
- _cache[22] || (_cache[22] = vue.createTextVNode(
9364
+ _cache[18] || (_cache[18] = vue.createTextVNode(
9421
9365
  " Backup Codes ",
9422
9366
  -1
9423
9367
  /* CACHED */
9424
9368
  ))
9425
9369
  ]),
9426
9370
  _: 2,
9427
- __: [22]
9371
+ __: [18]
9428
9372
  }, 1032, ["onClick", "disabled"])) : vue.createCommentVNode("v-if", true),
9429
9373
  vue.createCommentVNode(" Test email MFA "),
9430
9374
  device.device_type === "email" ? (vue.openBlock(), vue.createBlock($setup["StrandsUiButton"], {
@@ -9439,14 +9383,14 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
9439
9383
  size: 14,
9440
9384
  class: "mr-2"
9441
9385
  }),
9442
- _cache[23] || (_cache[23] = vue.createTextVNode(
9386
+ _cache[19] || (_cache[19] = vue.createTextVNode(
9443
9387
  " Send Test Code ",
9444
9388
  -1
9445
9389
  /* CACHED */
9446
9390
  ))
9447
9391
  ]),
9448
9392
  _: 2,
9449
- __: [23]
9393
+ __: [19]
9450
9394
  }, 1032, ["onClick", "disabled"])) : vue.createCommentVNode("v-if", true),
9451
9395
  vue.createCommentVNode(" Remove device "),
9452
9396
  vue.createVNode($setup["StrandsUiButton"], {
@@ -9461,14 +9405,14 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
9461
9405
  size: 14,
9462
9406
  class: "mr-2"
9463
9407
  }),
9464
- _cache[24] || (_cache[24] = vue.createTextVNode(
9408
+ _cache[20] || (_cache[20] = vue.createTextVNode(
9465
9409
  " Remove ",
9466
9410
  -1
9467
9411
  /* CACHED */
9468
9412
  ))
9469
9413
  ]),
9470
9414
  _: 2,
9471
- __: [24]
9415
+ __: [20]
9472
9416
  }, 1032, ["onClick", "disabled"])
9473
9417
  ])
9474
9418
  ])
@@ -9994,7 +9938,7 @@ const _hoisted_16$1 = {
9994
9938
  const _hoisted_17$1 = { class: "space-y-3 md:space-y-4" };
9995
9939
  const _hoisted_18$1 = { class: "space-y-4 p-4 bg-gray-50 rounded-xl" };
9996
9940
  const _hoisted_19$1 = { class: "flex items-center justify-between gap-2" };
9997
- const _hoisted_20 = { class: "text-sm text-gray-600" };
9941
+ const _hoisted_20$1 = { class: "text-sm text-gray-600" };
9998
9942
  const _hoisted_21 = {
9999
9943
  key: 0,
10000
9944
  class: "space-y-3 overflow-hidden"
@@ -10256,7 +10200,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
10256
10200
  )),
10257
10201
  vue.createElementVNode(
10258
10202
  "p",
10259
- _hoisted_20,
10203
+ _hoisted_20$1,
10260
10204
  "Last updated " + vue.toDisplayString($setup.passwordLastUpdated),
10261
10205
  1
10262
10206
  /* TEXT */
@@ -10899,15 +10843,16 @@ const _hoisted_10 = { class: "flex flex-col items-center text-center space-y-4"
10899
10843
  const _hoisted_11 = { class: "w-16 h-16 bg-[var(--strands-primary)] bg-opacity-10 rounded-xl flex items-center justify-center group-hover:bg-[var(--strands-primary)] group-hover:bg-opacity-15 transition-colors" };
10900
10844
  const _hoisted_12 = { class: "flex flex-col items-center text-center space-y-4" };
10901
10845
  const _hoisted_13 = { class: "w-16 h-16 bg-[var(--strands-primary)] bg-opacity-10 rounded-xl flex items-center justify-center group-hover:bg-[var(--strands-primary)] group-hover:bg-opacity-15 transition-colors" };
10902
- const _hoisted_14 = { class: "flex flex-col items-center text-center space-y-4" };
10903
- const _hoisted_15 = { class: "w-16 h-16 bg-[var(--strands-primary)] bg-opacity-10 rounded-xl flex items-center justify-center group-hover:bg-[var(--strands-primary)] group-hover:bg-opacity-15 transition-colors" };
10904
- const _hoisted_16 = {
10846
+ const _hoisted_14 = { class: "group p-8 border border-gray-300 rounded-xl bg-gray-50 opacity-60 cursor-not-allowed" };
10847
+ const _hoisted_15 = { class: "flex flex-col items-center text-center space-y-4" };
10848
+ const _hoisted_16 = { class: "w-16 h-16 bg-gray-200 rounded-xl flex items-center justify-center" };
10849
+ const _hoisted_17 = {
10905
10850
  key: 1,
10906
10851
  class: "border-t border-gray-200 pt-8"
10907
10852
  };
10908
- const _hoisted_17 = { class: "flex items-center justify-between" };
10909
- const _hoisted_18 = { class: "text-gray-600 text-sm mt-1" };
10910
- const _hoisted_19 = { class: "flex justify-end space-x-3" };
10853
+ const _hoisted_18 = { class: "flex items-center justify-between" };
10854
+ const _hoisted_19 = { class: "text-gray-600 text-sm mt-1" };
10855
+ const _hoisted_20 = { class: "flex justify-end space-x-3" };
10911
10856
  function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
10912
10857
  return vue.openBlock(), vue.createElementBlock(
10913
10858
  vue.Fragment,
@@ -10944,7 +10889,7 @@ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
10944
10889
  ])
10945
10890
  ]),
10946
10891
  footer: vue.withCtx(() => [
10947
- vue.createElementVNode("div", _hoisted_19, [
10892
+ vue.createElementVNode("div", _hoisted_20, [
10948
10893
  vue.createVNode($setup["StrandsUiButton"], {
10949
10894
  variant: "secondary",
10950
10895
  onClick: $setup.closeModal,
@@ -11093,52 +11038,48 @@ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
11093
11038
  }, 8, ["disabled"])
11094
11039
  ])
11095
11040
  ]),
11096
- vue.createCommentVNode(" Hardware Key Setup "),
11097
- vue.createElementVNode("div", {
11098
- class: "group p-8 border border-gray-200 rounded-xl hover:shadow-lg hover:border-[var(--strands-primary)] transition-all duration-200 cursor-pointer",
11099
- onClick: $setup.startHardwareKeySetup
11100
- }, [
11101
- vue.createElementVNode("div", _hoisted_14, [
11102
- vue.createElementVNode("div", _hoisted_15, [
11041
+ vue.createCommentVNode(" Hardware Key Setup - Temporarily Disabled "),
11042
+ vue.createElementVNode("div", _hoisted_14, [
11043
+ vue.createElementVNode("div", _hoisted_15, [
11044
+ vue.createElementVNode("div", _hoisted_16, [
11103
11045
  vue.createVNode($setup["KeyRound"], {
11104
11046
  size: 28,
11105
- class: "text-[var(--strands-primary)]"
11047
+ class: "text-gray-400"
11106
11048
  })
11107
11049
  ]),
11108
11050
  _cache[12] || (_cache[12] = vue.createElementVNode(
11109
11051
  "div",
11110
11052
  { class: "space-y-2" },
11111
11053
  [
11112
- vue.createElementVNode("h4", { class: "font-semibold text-gray-900 text-lg" }, "Hardware Key & Passkeys"),
11113
- vue.createElementVNode("p", { class: "text-sm text-gray-500 leading-relaxed" }, "Use YubiKey, FIDO2 devices, WebAuthn, or built-in passkeys for maximum security")
11054
+ vue.createElementVNode("h4", { class: "font-semibold text-gray-500 text-lg" }, "Hardware Key & Passkeys"),
11055
+ vue.createElementVNode("p", { class: "text-sm text-gray-400 leading-relaxed" }, "Temporarily unavailable - cross-domain support coming soon")
11114
11056
  ],
11115
11057
  -1
11116
11058
  /* CACHED */
11117
11059
  )),
11118
11060
  vue.createVNode($setup["StrandsUiButton"], {
11119
- variant: "primary",
11061
+ variant: "secondary",
11120
11062
  size: "md",
11121
- onClick: vue.withModifiers($setup.startHardwareKeySetup, ["stop"]),
11122
- disabled: $setup.loading,
11063
+ disabled: "",
11123
11064
  class: "w-full mt-4"
11124
11065
  }, {
11125
11066
  default: vue.withCtx(() => _cache[11] || (_cache[11] = [
11126
11067
  vue.createTextVNode(
11127
- " Setup Hardware Key ",
11068
+ " Coming Soon ",
11128
11069
  -1
11129
11070
  /* CACHED */
11130
11071
  )
11131
11072
  ])),
11132
11073
  _: 1,
11133
11074
  __: [11]
11134
- }, 8, ["disabled"])
11075
+ })
11135
11076
  ])
11136
11077
  ])
11137
11078
  ])
11138
11079
  ]),
11139
11080
  vue.createCommentVNode(" Manage Existing "),
11140
- $setup.activeMfaDevices.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_16, [
11141
- vue.createElementVNode("div", _hoisted_17, [
11081
+ $setup.activeMfaDevices.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_17, [
11082
+ vue.createElementVNode("div", _hoisted_18, [
11142
11083
  vue.createElementVNode("div", null, [
11143
11084
  _cache[14] || (_cache[14] = vue.createElementVNode(
11144
11085
  "h3",
@@ -11149,7 +11090,7 @@ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
11149
11090
  )),
11150
11091
  vue.createElementVNode(
11151
11092
  "p",
11152
- _hoisted_18,
11093
+ _hoisted_19,
11153
11094
  vue.toDisplayString($setup.activeMfaDevices.length) + " device(s) currently active",
11154
11095
  1
11155
11096
  /* TEXT */