@strands.gg/accui 1.4.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/accui.css +544 -14
  2. package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js +1 -1
  3. package/dist/nuxt/runtime/composables/useStrandsAuth.d.ts +21 -1
  4. package/dist/nuxt/runtime/composables/useStrandsAuth.d.ts.map +1 -1
  5. package/dist/nuxt/runtime/composables/useStrandsAuth.es.js +1 -1
  6. package/dist/nuxt/runtime/plugin.client.cjs.js +1 -1
  7. package/dist/nuxt/runtime/plugin.client.es.js +1 -1
  8. package/dist/nuxt/runtime/plugin.server.cjs.js +1 -1
  9. package/dist/nuxt/runtime/plugin.server.es.js +1 -1
  10. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.cjs.js +1 -1
  11. package/dist/nuxt-v4/runtime/composables/useStrandsAuth.es.js +1 -1
  12. package/dist/nuxt-v4/runtime/plugin.client.cjs.js +1 -1
  13. package/dist/nuxt-v4/runtime/plugin.client.es.js +1 -1
  14. package/dist/nuxt-v4/runtime/plugin.server.cjs.js +1 -1
  15. package/dist/nuxt-v4/runtime/plugin.server.es.js +1 -1
  16. package/dist/strands-auth-ui.cjs.js +3788 -660
  17. package/dist/strands-auth-ui.cjs.js.map +1 -1
  18. package/dist/strands-auth-ui.es.js +3798 -670
  19. package/dist/strands-auth-ui.es.js.map +1 -1
  20. package/dist/types/index.d.ts +3 -0
  21. package/dist/types/index.d.ts.map +1 -1
  22. package/dist/{useStrandsAuth-DQbwHB-6.js → useStrandsAuth-SdmBCyFS.js} +67 -7
  23. package/dist/useStrandsAuth-SdmBCyFS.js.map +1 -0
  24. package/dist/{useStrandsAuth-Bw5wrBA2.cjs → useStrandsAuth-zR8fRWme.cjs} +67 -7
  25. package/dist/useStrandsAuth-zR8fRWme.cjs.map +1 -0
  26. package/dist/{useStrandsConfig-V7XSMyQ5.js → useStrandsConfig-COEj6nFc.js} +3 -1
  27. package/dist/useStrandsConfig-COEj6nFc.js.map +1 -0
  28. package/dist/{useStrandsConfig-B9UkrP-c.cjs → useStrandsConfig-DW4ez8t4.cjs} +3 -1
  29. package/dist/useStrandsConfig-DW4ez8t4.cjs.map +1 -0
  30. package/dist/vue/components/SignedIn.vue.d.ts +2 -0
  31. package/dist/vue/components/SignedIn.vue.d.ts.map +1 -1
  32. package/dist/vue/components/SignedOut.vue.d.ts +2 -0
  33. package/dist/vue/components/SignedOut.vue.d.ts.map +1 -1
  34. package/dist/vue/components/StrandsCompleteSignUp.vue.d.ts.map +1 -1
  35. package/dist/vue/components/StrandsConfirmModal.vue.d.ts +2 -2
  36. package/dist/vue/components/StrandsHardwareKeySetupModal.vue.d.ts +4 -1
  37. package/dist/vue/components/StrandsHardwareKeySetupModal.vue.d.ts.map +1 -1
  38. package/dist/vue/components/StrandsMfaVerification.vue.d.ts.map +1 -1
  39. package/dist/vue/components/StrandsSettingsModal.vue.d.ts +18 -0
  40. package/dist/vue/components/StrandsSettingsModal.vue.d.ts.map +1 -0
  41. package/dist/vue/components/StrandsUserProfile.vue.d.ts +1 -1
  42. package/dist/vue/components/StrandsUserProfile.vue.d.ts.map +1 -1
  43. package/dist/vue/components/index.d.ts +1 -0
  44. package/dist/vue/components/index.d.ts.map +1 -1
  45. package/dist/vue/composables/useStrandsAuth.d.ts +21 -1
  46. package/dist/vue/composables/useStrandsAuth.d.ts.map +1 -1
  47. package/dist/vue/composables/useStrandsConfig.d.ts.map +1 -1
  48. package/dist/vue/ui/UiAvatarEditor.vue.d.ts +24 -0
  49. package/dist/vue/ui/UiAvatarEditor.vue.d.ts.map +1 -0
  50. package/dist/vue/ui/UiAvatarEditorSimple.vue.d.ts +25 -0
  51. package/dist/vue/ui/UiAvatarEditorSimple.vue.d.ts.map +1 -0
  52. package/dist/vue/ui/UiButton.vue.d.ts +1 -0
  53. package/dist/vue/ui/UiButton.vue.d.ts.map +1 -1
  54. package/dist/vue/ui/UiInput.vue.d.ts +6 -1
  55. package/dist/vue/ui/UiInput.vue.d.ts.map +1 -1
  56. package/dist/vue/ui/UiLevelProgress.vue.d.ts +19 -0
  57. package/dist/vue/ui/UiLevelProgress.vue.d.ts.map +1 -0
  58. package/dist/vue/ui/UiToggle.vue.d.ts +15 -0
  59. package/dist/vue/ui/UiToggle.vue.d.ts.map +1 -0
  60. package/dist/vue/ui/index.d.ts +4 -0
  61. package/dist/vue/ui/index.d.ts.map +1 -1
  62. package/dist/vue/utils/sounds.d.ts +57 -0
  63. package/dist/vue/utils/sounds.d.ts.map +1 -0
  64. package/package.json +3 -1
  65. package/dist/useStrandsAuth-Bw5wrBA2.cjs.map +0 -1
  66. package/dist/useStrandsAuth-DQbwHB-6.js.map +0 -1
  67. package/dist/useStrandsConfig-B9UkrP-c.cjs.map +0 -1
  68. package/dist/useStrandsConfig-V7XSMyQ5.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SignedOut.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/SignedOut.vue"],"names":[],"mappings":"AAmCA;AAqEA,UAAU,KAAK;IACb,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AA8BD,iBAAS,cAAc;WA0FT,OAAO,IAA6B;;;;;YAZrB,GAAG;;;;;;;;;;;;;;;YACF,GAAG;yBACJ,GAAG;;;;EAe/B;AAiBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;kBAhJJ,OAAO;6EAwJtB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"SignedOut.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/SignedOut.vue"],"names":[],"mappings":"AAmCA;AAqEA,UAAU,KAAK;IACb,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AA8BD,iBAAS,cAAc;WA0FT,OAAO,IAA6B;;;;;YAZrB,GAAG;;;;;;;;;;;;;;;;;YACF,GAAG;yBACJ,GAAG;;;;EAe/B;AAiBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;kBAhJJ,OAAO;6EAwJtB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsCompleteSignUp.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsCompleteSignUp.vue"],"names":[],"mappings":"AAuLA;AA2XA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAI1F,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;;;;;;;;;;;;;;AAkoBD,wBAOG"}
1
+ {"version":3,"file":"StrandsCompleteSignUp.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsCompleteSignUp.vue"],"names":[],"mappings":"AA0KA;AAgWA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAI1F,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;;;;;;;;;;;;;;AA2lBD,wBAOG"}
@@ -8,11 +8,11 @@ interface Props {
8
8
  variant?: ButtonVariant;
9
9
  }
10
10
  declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
11
- confirm: () => any;
12
11
  cancel: () => any;
12
+ confirm: () => any;
13
13
  }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
14
- onConfirm?: (() => any) | undefined;
15
14
  onCancel?: (() => any) | undefined;
15
+ onConfirm?: (() => any) | undefined;
16
16
  }>, {
17
17
  variant: ButtonVariant;
18
18
  confirmText: string;
@@ -1,5 +1,6 @@
1
1
  interface Props {
2
2
  show: boolean;
3
+ deviceType?: 'passkey' | 'hardware';
3
4
  }
4
5
  declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
5
6
  success: () => any;
@@ -7,6 +8,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
7
8
  }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
8
9
  onSuccess?: (() => any) | undefined;
9
10
  onClose?: (() => any) | undefined;
10
- }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
+ }>, {
12
+ deviceType: "passkey" | "hardware";
13
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
14
  export default _default;
12
15
  //# sourceMappingURL=StrandsHardwareKeySetupModal.vue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsHardwareKeySetupModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsHardwareKeySetupModal.vue"],"names":[],"mappings":"AA4OA;AAukBA,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;CACd;;;;;;;;AAu2BD,wBAQG"}
1
+ {"version":3,"file":"StrandsHardwareKeySetupModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsHardwareKeySetupModal.vue"],"names":[],"mappings":"AA4OA;AA0kBA,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;IACb,UAAU,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CACpC;;;;;;;;gBADc,SAAS,GAAG,UAAU;;AA82BrC,wBASG"}
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsMfaVerification.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsMfaVerification.vue"],"names":[],"mappings":"AAoPA;AAykBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;IACb,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;;;;;;;;;;AA24BD,wBAQG"}
1
+ {"version":3,"file":"StrandsMfaVerification.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsMfaVerification.vue"],"names":[],"mappings":"AAuPA;AA4kBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,UAAU,KAAK;IACb,IAAI,EAAE,OAAO,CAAA;IACb,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;;;;;;;;;;AAi5BD,wBAQG"}
@@ -0,0 +1,18 @@
1
+ interface AudioSettings {
2
+ levelUpSounds: boolean;
3
+ milestoneSounds: boolean;
4
+ }
5
+ interface Props {
6
+ open?: boolean;
7
+ }
8
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
9
+ close: () => any;
10
+ "settings-updated": (settings: AudioSettings) => any;
11
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
12
+ onClose?: (() => any) | undefined;
13
+ "onSettings-updated"?: ((settings: AudioSettings) => any) | undefined;
14
+ }>, {
15
+ open: boolean;
16
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
17
+ export default _default;
18
+ //# sourceMappingURL=StrandsSettingsModal.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StrandsSettingsModal.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsSettingsModal.vue"],"names":[],"mappings":"AAiFA;AAwKA,UAAU,aAAa;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,eAAe,EAAE,OAAO,CAAA;CACzB;AAED,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;;;;;;;;UADQ,OAAO;;AAuShB,wBASG"}
@@ -18,7 +18,7 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
18
18
  }>, {
19
19
  autoFetch: boolean;
20
20
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
21
- fileInputRef: HTMLInputElement;
21
+ avatarFileInput: HTMLInputElement;
22
22
  }, HTMLDivElement>;
23
23
  export default _default;
24
24
  //# sourceMappingURL=StrandsUserProfile.vue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StrandsUserProfile.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsUserProfile.vue"],"names":[],"mappings":"AA4TA;AAm5BA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAI1F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEvC,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;;;;;;;;;;;;eADa,OAAO;;;;AA4wCrB,wBAUG"}
1
+ {"version":3,"file":"StrandsUserProfile.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/StrandsUserProfile.vue"],"names":[],"mappings":"AAuXA;AAujCA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAK1F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAEvC,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;;;;;;;;;;;;eADa,OAAO;;;;AA8gDrB,wBAUG"}
@@ -11,6 +11,7 @@ export { default as StrandsTotpSetupModal } from './StrandsTotpSetupModal.vue';
11
11
  export { default as StrandsEmailMfaSetupModal } from './StrandsEmailMfaSetupModal.vue';
12
12
  export { default as StrandsHardwareKeySetupModal } from './StrandsHardwareKeySetupModal.vue';
13
13
  export { default as StrandsBackupCodesModal } from './StrandsBackupCodesModal.vue';
14
+ export { default as StrandsSettingsModal } from './StrandsSettingsModal.vue';
14
15
  export { default as StrandsConfirmModal } from './StrandsConfirmModal.vue';
15
16
  export { default as SignedIn } from './SignedIn.vue';
16
17
  export { default as SignedOut } from './SignedOut.vue';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAChF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AACtF,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AAC5F,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAClF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/components/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACxE,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAChF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AACtF,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AAC5F,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAClF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,eAAe,CAAA"}
@@ -9,6 +9,8 @@ export declare function useStrandsAuth(): {
9
9
  mfaEnabled: boolean;
10
10
  emailVerified: boolean;
11
11
  passwordUpdatedAt?: (string | Date) | undefined;
12
+ settings?: any;
13
+ xp: number;
12
14
  createdAt: string | Date;
13
15
  updatedAt: string | Date;
14
16
  } | null>;
@@ -21,6 +23,8 @@ export declare function useStrandsAuth(): {
21
23
  mfaEnabled: boolean;
22
24
  emailVerified: boolean;
23
25
  passwordUpdatedAt?: (string | Date) | undefined;
26
+ settings?: any;
27
+ xp: number;
24
28
  createdAt: string | Date;
25
29
  updatedAt: string | Date;
26
30
  } | null>;
@@ -67,12 +71,28 @@ export declare function useStrandsAuth(): {
67
71
  mfaEnabled: boolean;
68
72
  emailVerified: boolean;
69
73
  passwordUpdatedAt?: (string | Date) | undefined;
74
+ settings?: any;
75
+ xp: number;
76
+ createdAt: string | Date;
77
+ updatedAt: string | Date;
78
+ } | null>;
79
+ updateUserSettings: (settings: any) => Promise<{
80
+ id: string;
81
+ email: string;
82
+ firstName: string;
83
+ lastName: string;
84
+ avatar?: string | undefined;
85
+ mfaEnabled: boolean;
86
+ emailVerified: boolean;
87
+ passwordUpdatedAt?: (string | Date) | undefined;
88
+ settings?: any;
89
+ xp: number;
70
90
  createdAt: string | Date;
71
91
  updatedAt: string | Date;
72
92
  } | null>;
73
93
  changeEmail: (newEmail: string, password: string) => Promise<any>;
74
94
  initialize: () => Promise<void>;
75
- setAuthData: (authResponse: AuthResponse) => void;
95
+ setAuthData: (authResponse: AuthResponse, isTokenRefresh?: boolean) => void;
76
96
  verifyMfa: (deviceId: string, code: string, isBackupCode?: boolean) => Promise<AuthResponse>;
77
97
  sendMfaEmailCode: (deviceId: string) => Promise<any>;
78
98
  getMfaWebAuthnChallenge: (deviceId: string) => Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"useStrandsAuth.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/composables/useStrandsAuth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAW,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAA+B,MAAM,aAAa,CAAA;AA4C1H,wBAAgB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA0ES,iBAAiB;uBA+EtB,UAAU;;;wBA6EX,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;iCAkDT,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;4BAyDlB,MAAM,YAAY,MAAM;;gCAyK1B,YAAY;0BAtHZ,MAAM,QAAQ,MAAM;iCAiDb,MAAM;wCAsCC,MAAM;sCAnbR,MAAM,eAAe,MAAM,eAAc,UAAU,GAAG,SAAS;gDAnCrD,MAAM,cAAc,GAAG,eAAe,MAAM;;;;EAgqBtG"}
1
+ {"version":3,"file":"useStrandsAuth.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/composables/useStrandsAuth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAW,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAA+B,MAAM,aAAa,CAAA;AA4C1H,wBAAgB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA0ES,iBAAiB;uBA+EtB,UAAU;;;wBA6EX,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;iCAoDT,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;mCAyDX,GAAG;;;;;;;;;;;;;;4BAgDV,MAAM,YAAY,MAAM;;gCAyK1B,YAAY;0BAtHZ,MAAM,QAAQ,MAAM;iCAiDb,MAAM;wCAsCC,MAAM;sCAreR,MAAM,eAAe,MAAM,eAAc,UAAU,GAAG,SAAS;gDAnCrD,MAAM,cAAc,GAAG,eAAe,MAAM;;;;EAwuBtG"}
@@ -1 +1 @@
1
- {"version":3,"file":"useStrandsConfig.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/composables/useStrandsConfig.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAwC1E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,QAQ7D;AAED,wBAAgB,gBAAgB,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;;;uBAiFhD,MAAM,oBAAoB,GAAG,MAAM;;EAoC9D;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,QAEzD"}
1
+ {"version":3,"file":"useStrandsConfig.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/composables/useStrandsConfig.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAyC1E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,QAQ7D;AAED,wBAAgB,gBAAgB,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;;;uBAkFhD,MAAM,oBAAoB,GAAG,MAAM;;EAoC9D;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,QAEzD"}
@@ -0,0 +1,24 @@
1
+ interface Props {
2
+ size?: number;
3
+ previewSize?: number;
4
+ maxFileSize?: number;
5
+ uploading?: boolean;
6
+ preselectedFile?: File | null;
7
+ }
8
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
9
+ error: (error: string) => any;
10
+ upload: (file: File) => any;
11
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
12
+ onError?: ((error: string) => any) | undefined;
13
+ onUpload?: ((file: File) => any) | undefined;
14
+ }>, {
15
+ size: number;
16
+ previewSize: number;
17
+ maxFileSize: number;
18
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
19
+ fileInput: HTMLInputElement;
20
+ backgroundCanvas: HTMLCanvasElement;
21
+ previewCanvas: HTMLCanvasElement;
22
+ }, HTMLDivElement>;
23
+ export default _default;
24
+ //# sourceMappingURL=UiAvatarEditor.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UiAvatarEditor.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/UiAvatarEditor.vue"],"names":[],"mappings":"AAkLA;AA+3BA,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,eAAe,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAC9B;;;;;;;;UALQ,MAAM;iBACC,MAAM;iBACN,MAAM;;;;;;AA02BtB,wBAUG"}
@@ -0,0 +1,25 @@
1
+ interface Props {
2
+ size?: number;
3
+ previewSize?: number;
4
+ maxFileSize?: number;
5
+ uploading?: boolean;
6
+ preselectedFile?: File | null;
7
+ }
8
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
9
+ error: (error: string) => any;
10
+ upload: (file: File) => any;
11
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
12
+ onError?: ((error: string) => any) | undefined;
13
+ onUpload?: ((file: File) => any) | undefined;
14
+ }>, {
15
+ size: number;
16
+ previewSize: number;
17
+ maxFileSize: number;
18
+ uploading: boolean;
19
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
20
+ fileInput: HTMLInputElement;
21
+ canvas: HTMLCanvasElement;
22
+ previewCanvas: HTMLCanvasElement;
23
+ }, HTMLDivElement>;
24
+ export default _default;
25
+ //# sourceMappingURL=UiAvatarEditorSimple.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UiAvatarEditorSimple.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/UiAvatarEditorSimple.vue"],"names":[],"mappings":"AA6IA;AAguBA,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,eAAe,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAC9B;;;;;;;;UALQ,MAAM;iBACC,MAAM;iBACN,MAAM;eACR,OAAO;;;;;;AAypBrB,wBAUG"}
@@ -6,6 +6,7 @@ interface Props {
6
6
  loading?: boolean;
7
7
  loadingText?: string;
8
8
  fullWidth?: boolean;
9
+ color?: string | `${string}-${100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950}`;
9
10
  }
10
11
  declare function __VLS_template(): {
11
12
  attrs: Partial<{}>;
@@ -1 +1 @@
1
- {"version":3,"file":"UiButton.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/UiButton.vue"],"names":[],"mappings":"AAgBA;AA8EA,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAA;IACvD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AA0DD,iBAAS,cAAc;WA+DT,OAAO,IAA6B;;sBAXxB,GAAG;yBACA,GAAG;;;;EAe/B;AAWD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;aAjJT,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS;UAEhD,QAAQ,GAAG,QAAQ,GAAG,OAAO;UAD7B,IAAI,GAAG,IAAI,GAAG,IAAI;cAEd,OAAO;aACR,OAAO;eAEL,OAAO;2FAoJnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"UiButton.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/UiButton.vue"],"names":[],"mappings":"AAsBA;AA+NA,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAA;IACvD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAA;CAC1F;AAmLD,iBAAS,cAAc;WAsET,OAAO,IAA6B;;sBAXxB,GAAG;yBACA,GAAG;;;;EAe/B;AAYD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;aAnRT,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS;UAEhD,QAAQ,GAAG,QAAQ,GAAG,OAAO;UAD7B,IAAI,GAAG,IAAI,GAAG,IAAI;cAEd,OAAO;aACR,OAAO;eAEL,OAAO;2FAsRnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -5,11 +5,14 @@ interface Props {
5
5
  placeholder?: string;
6
6
  disabled?: boolean;
7
7
  required?: boolean;
8
- error?: {
8
+ error?: string | {
9
9
  message: string;
10
10
  };
11
11
  helpText?: string;
12
12
  autocomplete?: string;
13
+ name?: string;
14
+ inputmode?: 'text' | 'numeric' | 'decimal' | 'tel' | 'search' | 'email' | 'url';
15
+ maxlength?: number | string;
13
16
  size?: 'sm' | 'md' | 'lg';
14
17
  }
15
18
  declare function __VLS_template(): {
@@ -25,10 +28,12 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
25
28
  "update:modelValue": (value: string) => any;
26
29
  blur: (event: FocusEvent) => any;
27
30
  focus: (event: FocusEvent) => any;
31
+ keydown: (event: KeyboardEvent) => any;
28
32
  }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
29
33
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
30
34
  onBlur?: ((event: FocusEvent) => any) | undefined;
31
35
  onFocus?: ((event: FocusEvent) => any) | undefined;
36
+ onKeydown?: ((event: KeyboardEvent) => any) | undefined;
32
37
  }>, {
33
38
  type: "text" | "email" | "password" | "number" | "tel" | "url";
34
39
  size: "sm" | "md" | "lg";
@@ -1 +1 @@
1
- {"version":3,"file":"UiInput.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/UiInput.vue"],"names":[],"mappings":"AAsCA;AAgPA,UAAU,KAAK;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAA;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAC1B;AAuED,iBAAS,cAAc;WA4HT,OAAO,IAA6B;;sBAVxB,GAAG;;;;EAe5B;AAgBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;UAlOZ,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK;UAQxD,IAAI,GAAG,IAAI,GAAG,IAAI;wFAmOzB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"UiInput.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/UiInput.vue"],"names":[],"mappings":"AAsCA;AAoPA,UAAU,KAAK;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAA;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAA;IAC/E,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAC1B;AAwED,iBAAS,cAAc;WAkIT,OAAO,IAA6B;;sBAVxB,GAAG;;;;EAe5B;AAgBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;;;UA5OZ,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK;UAWxD,IAAI,GAAG,IAAI,GAAG,IAAI;wFA0OzB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -0,0 +1,19 @@
1
+ type __VLS_Props = {
2
+ value: number;
3
+ max: number;
4
+ level: number;
5
+ levelLabel?: string;
6
+ size?: number;
7
+ thickness?: number;
8
+ labelThickness?: number;
9
+ staticArcAngle?: number;
10
+ gapAngle?: number;
11
+ userSettings?: any;
12
+ };
13
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
14
+ levelup: (...args: any[]) => void;
15
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
16
+ onLevelup?: ((...args: any[]) => any) | undefined;
17
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
18
+ export default _default;
19
+ //# sourceMappingURL=UiLevelProgress.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UiLevelProgress.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/UiLevelProgress.vue"],"names":[],"mappings":"AAsGA;AAyWA,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB,CAAC;;;;;;AAkYF,wBAQG"}
@@ -0,0 +1,15 @@
1
+ interface Props {
2
+ modelValue?: boolean;
3
+ disabled?: boolean;
4
+ id?: string;
5
+ }
6
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
7
+ "update:modelValue": (value: boolean) => any;
8
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
9
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
10
+ }>, {
11
+ disabled: boolean;
12
+ modelValue: boolean;
13
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLButtonElement>;
14
+ export default _default;
15
+ //# sourceMappingURL=UiToggle.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UiToggle.vue.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/UiToggle.vue"],"names":[],"mappings":"AAWA;AAuHA,UAAU,KAAK;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;;;;;;cAFY,OAAO;gBADL,OAAO;;AAuGtB,wBASG"}
@@ -5,6 +5,10 @@ export { default as StrandsUiInput } from './UiInput.vue';
5
5
  export { default as StrandsUiLink } from './UiLink.vue';
6
6
  export { default as StrandsUiTabs } from './UiTabs.vue';
7
7
  export { default as StrandsUiLoader } from './UiLoader.vue';
8
+ export { default as StrandsUiToggle } from './UiToggle.vue';
9
+ export { default as StrandsUiAvatarEditor } from './UiAvatarEditor.vue';
10
+ export { default as StrandsUiAvatarEditorSimple } from './UiAvatarEditorSimple.vue';
11
+ export { default as StrandsUiLevelProgress } from './UiLevelProgress.vue';
8
12
  export type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'outline';
9
13
  export type ButtonSize = 'sm' | 'md' | 'lg';
10
14
  export type InputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG3D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAA;AACzE,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAC3C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAA;AAChF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAC1D,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,CAAA;AACzE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACvE,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AACnF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAGzE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAA;AACzE,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAC3C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAA;AAChF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;AAC1D,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,CAAA;AACzE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Sound effects utility functions using Web Audio API
3
+ * These generate sounds programmatically without needing external audio files
4
+ */
5
+ export declare class SoundEffects {
6
+ private static audioContext;
7
+ /**
8
+ * Get or create a shared AudioContext
9
+ */
10
+ private static getAudioContext;
11
+ /**
12
+ * Play a level up sound effect
13
+ * A pleasant major chord with arpeggio and bell overtones
14
+ */
15
+ static playLevelUp(level?: number, userSettings?: any): void;
16
+ /**
17
+ * Play regular level up sound for normal levels
18
+ */
19
+ private static playRegularLevelUp;
20
+ /**
21
+ * Play epic milestone level up sound for special levels (10, 25, 50, 100, 150, 200)
22
+ * A longer, more elaborate celebration with multiple chord progressions
23
+ */
24
+ private static playMilestoneLevelUp;
25
+ /**
26
+ * Play a success/completion sound
27
+ * A short, bright confirmation tone
28
+ */
29
+ static playSuccess(): void;
30
+ /**
31
+ * Play an error/failure sound
32
+ * A low, descending tone
33
+ */
34
+ static playError(): void;
35
+ /**
36
+ * Play a click/button press sound
37
+ * A very short, soft click
38
+ */
39
+ static playClick(): void;
40
+ /**
41
+ * Play a notification sound
42
+ * A gentle two-tone chime
43
+ */
44
+ static playNotification(): void;
45
+ /**
46
+ * Play an XP gain sound
47
+ * A quick, ascending glissando
48
+ */
49
+ static playXpGain(): void;
50
+ }
51
+ export declare const playLevelUp: (level?: number, userSettings?: any) => void;
52
+ export declare const playSuccess: () => void;
53
+ export declare const playError: () => void;
54
+ export declare const playClick: () => void;
55
+ export declare const playNotification: () => void;
56
+ export declare const playXpGain: () => void;
57
+ //# sourceMappingURL=sounds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sounds.d.ts","sourceRoot":"","sources":["../../../../../apps/accounts-ui/src/vue/utils/sounds.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,YAAY,CAA6B;IAExD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAgB9B;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,GAAG,GAAG,IAAI;IAuB5D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAqDjC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA4FnC;;;OAGG;IACH,MAAM,CAAC,WAAW,IAAI,IAAI;IA+B1B;;;OAGG;IACH,MAAM,CAAC,SAAS,IAAI,IAAI;IAsBxB;;;OAGG;IACH,MAAM,CAAC,SAAS,IAAI,IAAI;IAqBxB;;;OAGG;IACH,MAAM,CAAC,gBAAgB,IAAI,IAAI;IA2B/B;;;OAGG;IACH,MAAM,CAAC,UAAU,IAAI,IAAI;CAsB1B;AAGD,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,eAAe,GAAG,SAAkD,CAAC;AACjH,eAAO,MAAM,WAAW,YAAmC,CAAC;AAC5D,eAAO,MAAM,SAAS,YAAiC,CAAC;AACxD,eAAO,MAAM,SAAS,YAAiC,CAAC;AACxD,eAAO,MAAM,gBAAgB,YAAwC,CAAC;AACtE,eAAO,MAAM,UAAU,YAAkC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strands.gg/accui",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Strands Authentication UI Components",
5
5
  "type": "module",
6
6
  "main": "./dist/strands-auth-ui.cjs.js",
@@ -59,6 +59,7 @@
59
59
  },
60
60
  "dependencies": {
61
61
  "@types/qrcode": "^1.5.5",
62
+ "canvas-confetti": "^1.9.3",
62
63
  "lucide-vue-next": "^0.539.0",
63
64
  "qrcode": "^1.5.4",
64
65
  "vue": "^3.5.18"
@@ -67,6 +68,7 @@
67
68
  "@nuxt/kit": "^4.0.3",
68
69
  "@nuxt/schema": "^4.0.3",
69
70
  "@tailwindcss/postcss": "^4.1.11",
71
+ "@types/canvas-confetti": "^1.9.0",
70
72
  "@vitejs/plugin-vue": "^5.2.1",
71
73
  "autoprefixer": "^10.4.21",
72
74
  "nuxt": "^4.0.3",
@@ -1 +0,0 @@
1
- {"version":3,"file":"useStrandsAuth-Bw5wrBA2.cjs","sources":["../../../apps/accounts-ui/src/vue/composables/useStrandsAuth.ts"],"sourcesContent":["import { ref, computed } from 'vue'\nimport type { User, Session, SignInCredentials, SignUpData, AuthResponse, MfaDevice, MfaErrorResponse } from '../../types'\nimport { useStrandsConfig } from './useStrandsConfig'\n\nconst { getUrl } = useStrandsConfig()\n\nconst currentUser = ref<User | null>(null)\nconst currentSession = ref<Session | null>(null)\n\n// Specific loading states\nconst isInitializing = ref(true)\nconst isSigningIn = ref(false)\nconst isSigningUp = ref(false)\nconst isSigningOut = ref(false)\nconst isRefreshingToken = ref(false)\nconst isSendingMfaEmail = ref(false)\nconst isVerifyingMfa = ref(false)\nconst isLoadingProfile = ref(false)\n\n// Legacy loading states for backward compatibility\nconst loading = computed(() => isSigningIn.value || isSigningUp.value || isSigningOut.value || isRefreshingToken.value || isSendingMfaEmail.value || isVerifyingMfa.value || isLoadingProfile.value)\nconst isLoading = computed(() => isInitializing.value || loading.value)\n\n// Loading messages for better UX\nconst loadingMessage = computed(() => {\n if (isInitializing.value) return 'Checking authentication...'\n if (isSigningIn.value) return 'Signing you in...'\n if (isSigningUp.value) return 'Creating your account...'\n if (isSigningOut.value) return 'Signing you out...'\n if (isRefreshingToken.value) return 'Refreshing session...'\n if (isSendingMfaEmail.value) return 'Sending verification code...'\n if (isVerifyingMfa.value) return 'Verifying code...'\n return 'Loading...' // Fallback\n})\n\nconst isInitialized = ref(false)\n\n// MFA state\nconst mfaRequired = ref(false)\nconst mfaSessionId = ref<string | null>(null)\nconst availableMfaMethods = ref<MfaDevice[]>([])\n\n// Token refresh timer\nlet refreshTimer: NodeJS.Timeout | null = null\n\nexport function useStrandsAuth() {\n /**\n * Complete hardware key (WebAuthn) registration for MFA\n * Returns result with backup codes on success\n */\n const completeHardwareKeyRegistration = async (deviceId: string, credential: any, accessToken: string) => {\n if (!currentSession.value?.accessToken) {\n throw new Error('No access token available')\n }\n\n const response = await fetch(getUrl('mfaHardwareCompleteRegistration'), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${currentSession.value.accessToken}`\n },\n body: JSON.stringify({\n device_id: deviceId,\n credential: credential\n })\n })\n if (!response.ok) {\n const errorText = await response.text()\n let errorMessage = 'Failed to complete hardware key registration'\n \n try {\n const errorData = JSON.parse(errorText)\n errorMessage = errorData.message || errorData.error || errorText\n } catch {\n errorMessage = errorText || 'Failed to complete hardware key registration'\n }\n \n throw new Error(errorMessage)\n }\n return response.json()\n }\n /**\n * Register a hardware key (WebAuthn) for MFA\n * Returns { device_id, challenge } on success\n */\n const registerHardwareKey = async (deviceName: string, accessToken: string, deviceType: 'hardware' | 'passkey' = 'hardware') => {\n if (!currentSession.value?.accessToken) {\n throw new Error('No access token available')\n }\n \n const response = await fetch(getUrl('mfaHardwareStartRegistration'), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${currentSession.value.accessToken}`,\n },\n body: JSON.stringify({ \n device_name: deviceName,\n device_type: deviceType \n })\n })\n if (!response.ok) {\n const errorText = await response.text()\n let errorMessage = 'Failed to start hardware key registration'\n \n try {\n const errorData = JSON.parse(errorText)\n errorMessage = errorData.message || errorData.error || errorText\n } catch {\n errorMessage = errorText || 'Failed to start hardware key registration'\n }\n \n throw new Error(errorMessage)\n }\n return response.json()\n }\n\n const isAuthenticated = computed(() => currentUser.value !== null)\n\n const signIn = async (credentials: SignInCredentials) => {\n isSigningIn.value = true\n try {\n // Reset MFA state at start of new sign-in attempt\n mfaRequired.value = false\n mfaSessionId.value = null\n availableMfaMethods.value = []\n \n // Make API call to sign-in endpoint\n const response = await fetch(getUrl('signIn'), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(credentials),\n })\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new Error('Invalid email or password')\n } else if (response.status === 403) {\n throw new Error('Please verify your email address before signing in')\n } else {\n throw new Error(`Sign in failed: ${response.status} ${response.statusText}`)\n }\n }\n\n const authData: AuthResponse = await response.json()\n \n // Check if MFA is required\n if (authData.mfa_required) {\n mfaRequired.value = true\n mfaSessionId.value = authData.mfa_session_id || null\n \n // Convert API MFA methods to the expected format\n const methods = (authData.available_mfa_methods || []).map((method: any) => {\n // Create better fallback names for different device types\n let fallbackName = `${method.device_type.charAt(0).toUpperCase() + method.device_type.slice(1)} Authentication`\n \n if (method.device_type === 'hardware') {\n // Better names for hardware keys\n fallbackName = method.device_name || 'Security Key' // Could be YubiKey, FIDO2 Key, etc.\n } else if (method.device_type === 'totp') {\n fallbackName = method.device_name || 'Authenticator App'\n } else if (method.device_type === 'email') {\n fallbackName = method.device_name || 'Email Verification'\n }\n \n return {\n id: method.device_id,\n device_type: method.device_type,\n device_name: method.device_name || fallbackName,\n is_active: true,\n created_at: new Date().toISOString(),\n last_used_at: method.last_used_at,\n // Pass through additional metadata if available\n credential_id: method.credential_id,\n device_info: method.device_info\n }\n })\n availableMfaMethods.value = methods\n \n // Set signIn loading to false immediately so MFA modal can show\n isSigningIn.value = false\n \n return authData // Return without storing full auth data\n }\n \n // Store the authentication data if MFA not required\n setAuthData(authData)\n \n return authData\n } catch (error) {\n throw error\n } finally {\n isSigningIn.value = false\n }\n }\n\n const signUp = async (userData: SignUpData) => {\n isSigningUp.value = true\n try {\n // Integration point: Replace with actual auth SDK call\n // Example: const result = await authSDK.signUp(userData)\n \n throw new Error('Sign up not implemented - please integrate with auth SDK')\n } finally {\n isSigningUp.value = false\n }\n }\n\n const signOut = async () => {\n isSigningOut.value = true\n try {\n // Stop token refresh timer\n stopTokenRefreshTimer()\n \n // Clear user and session state\n currentUser.value = null\n currentSession.value = null\n \n // Clear MFA state\n mfaRequired.value = false\n mfaSessionId.value = null\n availableMfaMethods.value = []\n \n // Clear stored tokens\n if (typeof window !== 'undefined') {\n localStorage.removeItem('strands_auth_session')\n localStorage.removeItem('strands_auth_user')\n }\n } finally {\n isSigningOut.value = false\n }\n }\n\n const refreshToken = async () => {\n if (!currentSession.value?.refreshToken) {\n return false\n }\n \n \n isRefreshingToken.value = true\n try {\n const response = await fetch(getUrl('refresh'), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n refresh_token: currentSession.value.refreshToken,\n }),\n })\n\n if (!response.ok) { \n if (response.status === 401) {\n // Refresh token is invalid/expired, sign out user\n await signOut()\n return false\n }\n throw new Error(`Token refresh failed: ${response.status} ${response.statusText}`)\n }\n\n const authData: AuthResponse = await response.json()\n \n // Update auth data with new tokens\n setAuthData(authData)\n \n return true\n } catch (error) {\n // On refresh failure, sign out the user\n await signOut()\n return false\n }\n }\n\n const fetchProfile = async (): Promise<User | null> => {\n if (!currentSession.value?.accessToken) {\n throw new Error('No access token available')\n }\n \n isLoadingProfile.value = true\n try {\n const response = await fetch(getUrl('profile'), {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${currentSession.value.accessToken}`,\n },\n })\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new Error('Authentication expired. Please sign in again.')\n } else {\n throw new Error(`Failed to fetch profile: ${response.status} ${response.statusText}`)\n }\n }\n\n const userData = await response.json()\n \n // Update the current user state\n currentUser.value = {\n id: userData.id,\n email: userData.email,\n firstName: userData.first_name,\n lastName: userData.last_name,\n avatar: userData.avatar_url,\n mfaEnabled: userData.mfaEnabled || false,\n emailVerified: userData.email_verified,\n passwordUpdatedAt: userData.password_updated_at,\n createdAt: userData.created_at,\n updatedAt: userData.updated_at || new Date().toISOString(),\n }\n \n // Update localStorage\n if (typeof window !== 'undefined') {\n localStorage.setItem('strands_auth_user', JSON.stringify(currentUser.value))\n }\n \n return currentUser.value\n } finally {\n isLoadingProfile.value = false\n }\n }\n\n const updateProfile = async (profileData: Partial<User>) => {\n if (!currentSession.value?.accessToken) {\n throw new Error('No access token available')\n }\n \n isLoadingProfile.value = true\n try {\n const response = await fetch(getUrl('profile'), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${currentSession.value.accessToken}`,\n },\n body: JSON.stringify({\n first_name: profileData.firstName,\n last_name: profileData.lastName,\n }),\n })\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new Error('Authentication expired. Please sign in again.')\n } else {\n throw new Error(`Profile update failed: ${response.status} ${response.statusText}`)\n }\n }\n\n const updatedUserData = await response.json()\n \n // Update the current user state\n if (currentUser.value) {\n currentUser.value = {\n ...currentUser.value,\n id: updatedUserData.id,\n firstName: updatedUserData.first_name,\n lastName: updatedUserData.last_name,\n // Keep existing properties not returned by API\n avatar: updatedUserData.avatar_url || currentUser.value.avatar,\n mfaEnabled: currentUser.value.mfaEnabled,\n email: currentUser.value.email, // Keep existing email since we don't update it here\n emailVerified: currentUser.value.emailVerified,\n createdAt: updatedUserData.created_at || currentUser.value.createdAt,\n updatedAt: updatedUserData.updated_at || new Date().toISOString(),\n }\n \n // Update localStorage\n if (typeof window !== 'undefined') {\n localStorage.setItem('strands_auth_user', JSON.stringify(currentUser.value))\n }\n }\n \n return currentUser.value\n } finally {\n isLoadingProfile.value = false\n }\n }\n\n const changeEmail = async (newEmail: string, password: string) => {\n if (!currentSession.value?.accessToken) {\n throw new Error('No access token available')\n }\n \n isLoadingProfile.value = true\n try {\n const response = await fetch(getUrl('changeEmail'), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${currentSession.value.accessToken}`,\n },\n body: JSON.stringify({\n new_email: newEmail,\n password: password,\n }),\n })\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new Error('Authentication expired. Please sign in again.')\n } else {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.message || `Email change failed: ${response.status} ${response.statusText}`)\n }\n }\n\n const result = await response.json()\n \n // Update the current user state with new email\n if (currentUser.value) {\n currentUser.value = {\n ...currentUser.value,\n email: newEmail,\n emailVerified: false, // Email needs to be verified again\n updatedAt: new Date().toISOString(),\n }\n \n // Update localStorage\n if (typeof window !== 'undefined') {\n localStorage.setItem('strands_auth_user', JSON.stringify(currentUser.value))\n }\n }\n \n return result\n } finally {\n isLoadingProfile.value = false\n }\n }\n\n const verifyMfa = async (deviceId: string, code: string, isBackupCode = false) => {\n if (!mfaSessionId.value) {\n throw new Error('No MFA session available')\n }\n\n isVerifyingMfa.value = true\n try {\n const endpoint = isBackupCode ? getUrl('mfaBackupCodeVerify') : getUrl('mfaSigninVerify')\n const body = isBackupCode \n ? { mfa_session_id: mfaSessionId.value, backup_code: code }\n : { mfa_session_id: mfaSessionId.value, device_id: deviceId, code }\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n let errorMessage = 'MFA verification failed'\n \n try {\n const errorData = JSON.parse(errorText)\n errorMessage = errorData.message || errorData.error || errorText\n } catch {\n // If parsing fails, use the raw text but clean it up\n errorMessage = errorText || 'MFA verification failed'\n }\n \n throw new Error(errorMessage)\n }\n\n const authData: AuthResponse = await response.json()\n \n // Clear MFA state\n mfaRequired.value = false\n mfaSessionId.value = null\n availableMfaMethods.value = []\n \n // Store the authentication data\n setAuthData(authData)\n \n return authData\n } finally {\n isVerifyingMfa.value = false\n }\n }\n\n const sendMfaEmailCode = async (deviceId: string) => {\n if (!mfaSessionId.value) {\n throw new Error('No MFA session available')\n }\n\n isSendingMfaEmail.value = true\n try {\n const response = await fetch(getUrl('mfaSigninSendEmail'), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n mfa_session_id: mfaSessionId.value,\n device_id: deviceId,\n }),\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n let errorMessage = 'Failed to send MFA email code'\n \n try {\n const errorData = JSON.parse(errorText)\n errorMessage = errorData.message || errorData.error || errorText\n } catch {\n // If parsing fails, use the raw text but clean it up\n errorMessage = errorText || 'Failed to send MFA email code'\n }\n \n throw new Error(errorMessage)\n }\n\n const result = await response.json()\n return result\n } finally {\n isSendingMfaEmail.value = false\n }\n }\n\n const getMfaWebAuthnChallenge = async (deviceId: string) => {\n if (!mfaSessionId.value) {\n throw new Error('No MFA session available')\n }\n \n const response = await fetch(getUrl('mfaWebAuthnChallenge'), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n mfa_session_id: mfaSessionId.value,\n device_id: deviceId\n }),\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n let errorMessage = 'Failed to get WebAuthn challenge'\n \n try {\n const errorData = JSON.parse(errorText)\n errorMessage = errorData.message || errorData.error || errorText\n } catch {\n errorMessage = errorText || errorMessage\n }\n \n throw new Error(errorMessage)\n }\n\n return response.json()\n }\n\n const setAuthData = (authResponse: AuthResponse) => {\n try {\n // Set current user\n currentUser.value = authResponse.user\n \n // Create session object\n const session: Session = {\n accessToken: authResponse.access_token,\n refreshToken: authResponse.refresh_token,\n expiresAt: new Date(Date.now() + 5 * 60 * 1000), // 5 minutes from now (matching API token expiry)\n userId: authResponse.user.id,\n }\n \n currentSession.value = session\n \n // Store in localStorage for persistence\n if (typeof window !== 'undefined') {\n localStorage.setItem('strands_auth_session', JSON.stringify(session))\n localStorage.setItem('strands_auth_user', JSON.stringify(authResponse.user))\n }\n \n // Start automatic token refresh\n startTokenRefreshTimer()\n } catch (error) {\n // Silently handle auth data storage errors\n }\n }\n\n // Token refresh timer management\n const startTokenRefreshTimer = () => {\n // Clear existing timer\n if (refreshTimer) {\n clearTimeout(refreshTimer)\n }\n \n if (!currentSession.value) return\n \n // Calculate time until token expires (refresh 1 minute before expiry)\n const now = new Date()\n const expiresAt = currentSession.value.expiresAt\n const timeUntilRefresh = expiresAt.getTime() - now.getTime() - (1 * 60 * 1000) // 1 minute before expiry\n \n // If token is already expired or expires very soon, refresh immediately\n if (timeUntilRefresh <= 0) {\n refreshToken()\n return\n }\n \n // Set timer to refresh token\n refreshTimer = setTimeout(async () => {\n const success = await refreshToken()\n \n if (success) {\n // Schedule next refresh\n startTokenRefreshTimer()\n }\n }, timeUntilRefresh)\n }\n\n const stopTokenRefreshTimer = () => {\n if (refreshTimer) {\n clearTimeout(refreshTimer)\n refreshTimer = null\n }\n }\n\n const initialize = async () => {\n if (isInitialized.value) return\n \n isInitializing.value = true\n try {\n // Check for existing session/token in localStorage\n if (typeof window !== 'undefined') {\n const storedSession = localStorage.getItem('strands_auth_session')\n const storedUser = localStorage.getItem('strands_auth_user')\n \n if (storedSession && storedUser) {\n try {\n const session = JSON.parse(storedSession) as Session\n const user = JSON.parse(storedUser) as User\n \n // Convert expiresAt back to Date object\n session.expiresAt = new Date(session.expiresAt)\n \n // Check if session is still valid\n if (session.expiresAt > new Date()) {\n currentSession.value = session\n currentUser.value = user\n \n // Start token refresh timer for restored session\n startTokenRefreshTimer()\n } else {\n // Session expired, clear storage\n localStorage.removeItem('strands_auth_session')\n localStorage.removeItem('strands_auth_user')\n }\n } catch (error) {\n // Clear corrupted data\n localStorage.removeItem('strands_auth_session')\n localStorage.removeItem('strands_auth_user')\n }\n }\n }\n \n isInitialized.value = true\n \n // Add a small delay to ensure state is fully settled before hiding loading\n await new Promise(resolve => setTimeout(resolve, 50))\n } catch (error) {\n // Silently handle initialization errors\n } finally {\n isInitializing.value = false\n }\n }\n\n // Auto-initialize on first use\n if (!isInitialized.value) {\n initialize()\n }\n\n return {\n // State\n user: computed(() => currentUser.value),\n currentUser: computed(() => currentUser.value),\n currentSession: computed(() => currentSession.value),\n isAuthenticated,\n isLoading: computed(() => isLoading.value || !isInitialized.value),\n loading: computed(() => loading.value),\n loadingMessage,\n \n // Specific loading states\n isInitializing,\n isSigningIn,\n isSigningUp,\n isSigningOut,\n isRefreshingToken,\n isSendingMfaEmail,\n isVerifyingMfa,\n \n // MFA State\n mfaRequired: computed(() => mfaRequired.value),\n mfaSessionId: computed(() => mfaSessionId.value),\n availableMfaMethods: computed(() => availableMfaMethods.value),\n\n // Methods\n signIn,\n signUp,\n signOut,\n refreshToken,\n fetchProfile,\n updateProfile,\n changeEmail,\n initialize,\n setAuthData,\n verifyMfa,\n sendMfaEmailCode,\n getMfaWebAuthnChallenge,\n registerHardwareKey,\n completeHardwareKeyRegistration,\n \n // Token management\n startTokenRefreshTimer,\n stopTokenRefreshTimer,\n \n // Force re-initialization (useful for testing or navigation)\n forceReInit: () => {\n isInitialized.value = false\n isInitializing.value = true\n initialize()\n },\n }\n}"],"names":["useStrandsConfig","ref","computed"],"mappings":"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"}