@strands.gg/accui 2.18.1 → 2.19.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 (74) hide show
  1. package/dist/StrandsUIPlugin-5AOCDOcM.cjs.js +143 -0
  2. package/dist/StrandsUIPlugin-AI0SbvpH.es.js +20708 -0
  3. package/dist/StrandsUIPlugin-B0HUf-tm.es.js +20437 -0
  4. package/dist/StrandsUIPlugin-B98LOdrQ.cjs.js +143 -0
  5. package/dist/StrandsUIPlugin-BbeOau1G.cjs.js +143 -0
  6. package/dist/StrandsUIPlugin-BcARSDQF.cjs.js +143 -0
  7. package/dist/StrandsUIPlugin-CCRrewS9.es.js +20587 -0
  8. package/dist/StrandsUIPlugin-CQk56uZ2.es.js +19805 -0
  9. package/dist/StrandsUIPlugin-Cgmu6cTA.es.js +20440 -0
  10. package/dist/StrandsUIPlugin-CpBH0QFc.cjs.js +272 -0
  11. package/dist/StrandsUIPlugin-Ct91SLTy.es.js +20587 -0
  12. package/dist/StrandsUIPlugin-DHhawL07.cjs.js +143 -0
  13. package/dist/StrandsUIPlugin-DY7VCw7G.es.js +20437 -0
  14. package/dist/StrandsUIPlugin-DZU1IjwD.cjs.js +143 -0
  15. package/dist/StrandsUIPlugin-Tpi8IoJc.cjs.js +143 -0
  16. package/dist/StrandsUIPlugin-lRGsfjf5.es.js +20440 -0
  17. package/dist/index.cjs.js +5 -5
  18. package/dist/index.es.js +2902 -2806
  19. package/dist/nuxt/module.cjs.js +6 -6
  20. package/dist/nuxt/module.es.js +17 -17
  21. package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js +1 -1
  22. package/dist/nuxt/runtime/composables/useStrandsAuth.d.ts +7 -1
  23. package/dist/nuxt/runtime/composables/useStrandsAuth.es.js +24 -19
  24. package/dist/nuxt/runtime/plugin.client.cjs.js +1 -1
  25. package/dist/nuxt/runtime/plugin.client.es.js +9 -14
  26. package/dist/nuxt/runtime/plugin.server.cjs.js +1 -1
  27. package/dist/nuxt/runtime/plugin.server.es.js +1 -1
  28. package/dist/types/composables.d.ts +6 -2
  29. package/dist/types/index.d.ts +14 -0
  30. package/dist/useDarkMode-Cew-NWjS.cjs.js +1 -0
  31. package/dist/useDarkMode-CvinMR9O.es.js +102 -0
  32. package/dist/useDarkMode-OZ_A8-6H.es.js +102 -0
  33. package/dist/useStrandsAuth-B7Fqq-Qp.es.js +717 -0
  34. package/dist/useStrandsAuth-BDTnh_c_.es.js +702 -0
  35. package/dist/useStrandsAuth-CEQ4UsKz.cjs.js +1 -0
  36. package/dist/useStrandsAuth-CboHAkjH.es.js +717 -0
  37. package/dist/useStrandsAuth-CetpoBNk.cjs.js +1 -0
  38. package/dist/useStrandsAuth-D2HvStMt.es.js +787 -0
  39. package/dist/useStrandsAuth-DSLFMDTj.es.js +717 -0
  40. package/dist/useStrandsAuth-Db5ZGvxL.cjs.js +1 -0
  41. package/dist/useStrandsAuth-Dz3Grglt.cjs.js +1 -0
  42. package/dist/useStrandsAuth-FVoni53L.es.js +666 -0
  43. package/dist/useStrandsAuth-Yp5OpRHU.cjs.js +1 -0
  44. package/dist/useStrandsConfig-48gZP9xV.es.js +209 -0
  45. package/dist/useStrandsConfig-B8h5hDy7.es.js +219 -0
  46. package/dist/useStrandsConfig-BGJg1LlC.es.js +213 -0
  47. package/dist/useStrandsConfig-BY_IIwK8.cjs.js +1 -0
  48. package/dist/useStrandsConfig-DRGldIzy.cjs.js +1 -0
  49. package/dist/vite.cjs.js +1 -1
  50. package/dist/vite.es.js +1 -1
  51. package/dist/vue/components/SignedIn.vue.d.ts +3 -1
  52. package/dist/vue/components/VirtualList.vue.d.ts +36 -0
  53. package/dist/vue/composables/useKnownAccounts.d.ts +33 -0
  54. package/dist/vue/index.d.ts +1 -0
  55. package/dist/vue/ui/UiBunnyFontPicker.vue.d.ts +23 -0
  56. package/dist/vue/ui/UiInput/UiInput.Select.vue.d.ts +806 -0
  57. package/dist/webcomponents/entries/strands-alert.d.ts +2 -0
  58. package/dist/webcomponents/entries/strands-button.d.ts +2 -0
  59. package/dist/webcomponents/entries/strands-card.d.ts +2 -0
  60. package/dist/webcomponents/entries/strands-checkbox-group.d.ts +2 -0
  61. package/dist/webcomponents/entries/strands-divider.d.ts +2 -0
  62. package/dist/webcomponents/entries/strands-input.d.ts +2 -0
  63. package/dist/webcomponents/entries/strands-link.d.ts +2 -0
  64. package/dist/webcomponents/entries/strands-loader-spinner.d.ts +2 -0
  65. package/dist/webcomponents/entries/strands-modal.d.ts +2 -0
  66. package/dist/webcomponents/entries/strands-pill.d.ts +2 -0
  67. package/dist/webcomponents/entries/strands-radio-group.d.ts +2 -0
  68. package/dist/webcomponents/entries/strands-slider.d.ts +2 -0
  69. package/dist/webcomponents/entries/strands-table.d.ts +2 -0
  70. package/dist/webcomponents/entries/strands-tabs.d.ts +2 -0
  71. package/dist/webcomponents/entries/strands-theme-toggle.d.ts +2 -0
  72. package/dist/webcomponents/entries/strands-toggle.d.ts +2 -0
  73. package/dist/webcomponents/entries/strands-tooltip.d.ts +2 -0
  74. package/package.json +16 -16
@@ -1,4 +1,4 @@
1
- "use strict";const o=require("@nuxt/kit");var n=typeof document<"u"?document.currentScript:null;const h={mode:"direct",baseUrl:"https://your-api.example.com",accentColor:"#EA00A8",redirectUrl:"/",onSignOutUrl:"/",autoRefresh:!0,refreshInterval:4,protectedRoutes:[],guestOnlyRoutes:["/auth","/login","/register"],devMode:!1,styles:!0,supportEmail:"",oauth2RedirectUrl:"",theme:"system"},g=o.defineNuxtModule({meta:{name:"@strands.gg/accui/nuxt",configKey:"strandsAuth",compatibility:{nuxt:"^3.0.0 || ^4.0.0"}},defaults:h,async setup(a,t){const s=o.createResolver(typeof document>"u"?require("url").pathToFileURL(__filename).href:n&&n.tagName.toUpperCase()==="SCRIPT"&&n.src||new URL("nuxt/module.cjs.js",document.baseURI).href);t.options.runtimeConfig.public=t.options.runtimeConfig.public||{};const i={...a,styles:a.styles!==!1};if(t.options.runtimeConfig.public.strandsAuth=i,t.options.appConfig&&(t.options.appConfig.strandsAuth=i),a.styles!==!1&&t.options.css.push("@strands.gg/accui/style.css"),a.accentColor&&a.accentColor!=="#EA00A8"){const e=a.accentColor,p=`
1
+ "use strict";const o=require("@nuxt/kit");var n=typeof document<"u"?document.currentScript:null;const h={mode:"direct",baseUrl:"https://your-api.example.com",accentColor:"#EA00A8",redirectUrl:"/",onSignOutUrl:"/",autoRefresh:!0,refreshInterval:4,protectedRoutes:[],guestOnlyRoutes:["/auth","/login","/register"],devMode:!1,styles:!0,supportEmail:"",oauth2RedirectUrl:"",theme:"system"},g=o.defineNuxtModule({meta:{name:"@strands.gg/accui/nuxt",configKey:"strandsAuth",compatibility:{nuxt:"^3.0.0 || ^4.0.0"}},defaults:h,async setup(a,s){const t=o.createResolver(typeof document>"u"?require("url").pathToFileURL(__filename).href:n&&n.tagName.toUpperCase()==="SCRIPT"&&n.src||new URL("nuxt/module.cjs.js",document.baseURI).href);s.options.runtimeConfig.public=s.options.runtimeConfig.public||{};const i={...a,styles:a.styles!==!1};if(s.options.runtimeConfig.public.strandsAuth=i,s.options.appConfig&&(s.options.appConfig.strandsAuth=i),a.styles!==!1&&s.options.css.push(t.resolve("../accui.css")),a.accentColor&&a.accentColor!=="#EA00A8"){const e=a.accentColor,p=`
2
2
  :root {
3
3
  --strands-custom-accent: ${e};
4
4
  --strands-custom-50: color-mix(in srgb, ${e} 10%, white);
@@ -13,11 +13,11 @@
13
13
  --strands-custom-900: color-mix(in srgb, ${e} 40%, black);
14
14
  --strands-custom-950: color-mix(in srgb, ${e} 25%, black);
15
15
  }
16
- `;t.options.app.head=t.options.app.head||{},t.options.app.head.style=t.options.app.head.style||[],t.options.app.head.style.unshift({innerHTML:p,key:"strands-accent-override"})}const r="es.js",u=s.resolve(`./runtime/plugin.client.${r}`),d=s.resolve(`./runtime/plugin.server.${r}`),c=s.resolve(`./runtime/middleware/auth.global.${r}`),l=s.resolve(`./runtime/plugins/auth-interceptor.client.${r}`);o.addPlugin({src:u,mode:"client"}),o.addPlugin({src:d,mode:"server"}),a.mode!=="oauth2"&&(o.addPlugin({src:l,mode:"client"}),o.addRouteMiddleware({name:"auth",path:c,global:!0})),t.hook("pages:extend",()=>{}),o.addImports([{name:"useStrandsAuth",as:"useStrandsAuth",from:s.resolve(`./runtime/composables/useStrandsAuth.${r}`)},{name:"useAuthUser",as:"useAuthUser",from:s.resolve(`./runtime/composables/useStrandsAuth.${r}`)},{name:"useAuthState",as:"useAuthState",from:s.resolve(`./runtime/composables/useStrandsAuth.${r}`)},{name:"useAuthenticatedFetch",as:"useAuthenticatedFetch",from:s.resolve(`./runtime/composables/useAuthenticatedFetch.${r}`)},{name:"useStrandsOAuth",as:"useStrandsOAuth",from:s.resolve(`./runtime/composables/useStrandsOAuth.${r}`)}]);const m=["StrandsAuth","StrandsSignIn","StrandsSignUp","StrandsCompleteSignUp","StrandsUserProfile","StrandsUserButton","StrandsPasswordReset","StrandsMFASetup","StrandsMfaVerification","StrandsMfaModal","StrandsBackupCodesModal","StrandsConfirmModal","StrandsEmailMfaSetupModal","StrandsHardwareKeySetupModal","StrandsSessionsModal","StrandsSettingsModal","StrandsTotpSetupModal","StrandsConfigProvider","SignedIn","StrandsLogo","StrandsSecuredFooter","StrandsNav","StrandsNavItem","StrandsOAuthButton","StrandsOAuthCallback","UiAlert","UiApp","UiAvatarEditor","UiBunnyFontPicker","UiButton","UiCard","UiCheckboxGroup","UiColorPicker","UiDateTimePicker","UiDivider","UiHero","UiInput","UiLevelProgress","UiLink","UiLoader","UiMegaMenu","UiMegaMenuItem","UiMegaMenuPanel","UiMegaMenuGroup","UiModal","UiPill","UiRadioGroup","UiSlider","UiTable","UiTabs","UiThemeToggle","UiToggle","UiTooltip","VirtualList","SvgIcon","IconGithub","IconGoogle"];for(const e of m)o.addComponent({name:e,export:e,filePath:"@strands.gg/accui"});t.hook("prepare:types",e=>{e.references.push({types:"@strands.gg/auth-nuxt"}),e.declarations&&e.declarations.push(`
16
+ `;s.options.app.head=s.options.app.head||{},s.options.app.head.style=s.options.app.head.style||[],s.options.app.head.style.unshift({innerHTML:p,key:"strands-accent-override"})}const r="es.js",u=t.resolve(`./runtime/plugin.client.${r}`),d=t.resolve(`./runtime/plugin.server.${r}`),c=t.resolve(`./runtime/middleware/auth.global.${r}`),l=t.resolve(`./runtime/plugins/auth-interceptor.client.${r}`);o.addPlugin({src:u,mode:"client"}),o.addPlugin({src:d,mode:"server"}),a.mode!=="oauth2"&&(o.addPlugin({src:l,mode:"client"}),o.addRouteMiddleware({name:"auth",path:c,global:!0})),s.hook("pages:extend",()=>{}),o.addImports([{name:"useStrandsAuth",as:"useStrandsAuth",from:t.resolve(`./runtime/composables/useStrandsAuth.${r}`)},{name:"useAuthUser",as:"useAuthUser",from:t.resolve(`./runtime/composables/useStrandsAuth.${r}`)},{name:"useAuthState",as:"useAuthState",from:t.resolve(`./runtime/composables/useStrandsAuth.${r}`)},{name:"useAuthenticatedFetch",as:"useAuthenticatedFetch",from:t.resolve(`./runtime/composables/useAuthenticatedFetch.${r}`)},{name:"useStrandsOAuth",as:"useStrandsOAuth",from:t.resolve(`./runtime/composables/useStrandsOAuth.${r}`)}]);const m=["StrandsAuth","StrandsSignIn","StrandsSignUp","StrandsCompleteSignUp","StrandsUserProfile","StrandsUserButton","StrandsPasswordReset","StrandsMFASetup","StrandsMfaVerification","StrandsMfaModal","StrandsBackupCodesModal","StrandsConfirmModal","StrandsEmailMfaSetupModal","StrandsHardwareKeySetupModal","StrandsSessionsModal","StrandsSettingsModal","StrandsTotpSetupModal","StrandsConfigProvider","SignedIn","StrandsLogo","StrandsSecuredFooter","StrandsNav","StrandsNavItem","StrandsOAuthButton","StrandsOAuthCallback","UiAlert","UiApp","UiAvatarEditor","UiBunnyFontPicker","UiButton","UiCard","UiCheckboxGroup","UiColorPicker","UiDateTimePicker","UiDivider","UiHero","UiInput","UiLevelProgress","UiLink","UiLoader","UiMegaMenu","UiMegaMenuItem","UiMegaMenuPanel","UiMegaMenuGroup","UiModal","UiPill","UiRadioGroup","UiSlider","UiTable","UiTabs","UiThemeToggle","UiToggle","UiTooltip","VirtualList","SvgIcon","IconGithub","IconGoogle"];for(const e of m)o.addComponent({name:e,export:e,filePath:"@strands.gg/accui"});s.hook("prepare:types",e=>{e.references.push({types:"@strands.gg/auth-nuxt"}),e.declarations&&e.declarations.push(`
17
17
  declare global {
18
- const useStrandsAuth: typeof import('${s.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useStrandsAuth']
19
- const useAuthUser: typeof import('${s.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useAuthUser']
20
- const useAuthState: typeof import('${s.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useAuthState']
21
- const useAuthenticatedFetch: typeof import('${s.resolve("./runtime/composables/useAuthenticatedFetch.d.ts")}')['useAuthenticatedFetch']
18
+ const useStrandsAuth: typeof import('${t.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useStrandsAuth']
19
+ const useAuthUser: typeof import('${t.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useAuthUser']
20
+ const useAuthState: typeof import('${t.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useAuthState']
21
+ const useAuthenticatedFetch: typeof import('${t.resolve("./runtime/composables/useAuthenticatedFetch.d.ts")}')['useAuthenticatedFetch']
22
22
  }
23
23
  `)})}});module.exports=g;
@@ -23,14 +23,14 @@ const A = {
23
23
  }
24
24
  },
25
25
  defaults: A,
26
- async setup(r, t) {
27
- const s = h(import.meta.url);
28
- t.options.runtimeConfig.public = t.options.runtimeConfig.public || {};
26
+ async setup(r, s) {
27
+ const t = h(import.meta.url);
28
+ s.options.runtimeConfig.public = s.options.runtimeConfig.public || {};
29
29
  const n = {
30
30
  ...r,
31
31
  styles: r.styles !== !1
32
32
  };
33
- if (t.options.runtimeConfig.public.strandsAuth = n, t.options.appConfig && (t.options.appConfig.strandsAuth = n), r.styles !== !1 && t.options.css.push("@strands.gg/accui/style.css"), r.accentColor && r.accentColor !== "#EA00A8") {
33
+ if (s.options.runtimeConfig.public.strandsAuth = n, s.options.appConfig && (s.options.appConfig.strandsAuth = n), r.styles !== !1 && s.options.css.push(t.resolve("../accui.css")), r.accentColor && r.accentColor !== "#EA00A8") {
34
34
  const e = r.accentColor, m = `
35
35
  :root {
36
36
  --strands-custom-accent: ${e};
@@ -47,12 +47,12 @@ const A = {
47
47
  --strands-custom-950: color-mix(in srgb, ${e} 25%, black);
48
48
  }
49
49
  `;
50
- t.options.app.head = t.options.app.head || {}, t.options.app.head.style = t.options.app.head.style || [], t.options.app.head.style.unshift({
50
+ s.options.app.head = s.options.app.head || {}, s.options.app.head.style = s.options.app.head.style || [], s.options.app.head.style.unshift({
51
51
  innerHTML: m,
52
52
  key: "strands-accent-override"
53
53
  });
54
54
  }
55
- const o = "es.js", i = s.resolve(`./runtime/plugin.client.${o}`), u = s.resolve(`./runtime/plugin.server.${o}`), d = s.resolve(`./runtime/middleware/auth.global.${o}`), c = s.resolve(`./runtime/plugins/auth-interceptor.client.${o}`);
55
+ const o = "es.js", i = t.resolve(`./runtime/plugin.client.${o}`), u = t.resolve(`./runtime/plugin.server.${o}`), d = t.resolve(`./runtime/middleware/auth.global.${o}`), c = t.resolve(`./runtime/plugins/auth-interceptor.client.${o}`);
56
56
  a({
57
57
  src: i,
58
58
  mode: "client"
@@ -66,32 +66,32 @@ const A = {
66
66
  name: "auth",
67
67
  path: d,
68
68
  global: !0
69
- })), t.hook("pages:extend", () => {
69
+ })), s.hook("pages:extend", () => {
70
70
  }), S([
71
71
  {
72
72
  name: "useStrandsAuth",
73
73
  as: "useStrandsAuth",
74
- from: s.resolve(`./runtime/composables/useStrandsAuth.${o}`)
74
+ from: t.resolve(`./runtime/composables/useStrandsAuth.${o}`)
75
75
  },
76
76
  {
77
77
  name: "useAuthUser",
78
78
  as: "useAuthUser",
79
- from: s.resolve(`./runtime/composables/useStrandsAuth.${o}`)
79
+ from: t.resolve(`./runtime/composables/useStrandsAuth.${o}`)
80
80
  },
81
81
  {
82
82
  name: "useAuthState",
83
83
  as: "useAuthState",
84
- from: s.resolve(`./runtime/composables/useStrandsAuth.${o}`)
84
+ from: t.resolve(`./runtime/composables/useStrandsAuth.${o}`)
85
85
  },
86
86
  {
87
87
  name: "useAuthenticatedFetch",
88
88
  as: "useAuthenticatedFetch",
89
- from: s.resolve(`./runtime/composables/useAuthenticatedFetch.${o}`)
89
+ from: t.resolve(`./runtime/composables/useAuthenticatedFetch.${o}`)
90
90
  },
91
91
  {
92
92
  name: "useStrandsOAuth",
93
93
  as: "useStrandsOAuth",
94
- from: s.resolve(`./runtime/composables/useStrandsOAuth.${o}`)
94
+ from: t.resolve(`./runtime/composables/useStrandsOAuth.${o}`)
95
95
  }
96
96
  ]);
97
97
  const l = [
@@ -164,15 +164,15 @@ const A = {
164
164
  export: e,
165
165
  filePath: "@strands.gg/accui"
166
166
  });
167
- t.hook("prepare:types", (e) => {
167
+ s.hook("prepare:types", (e) => {
168
168
  e.references.push({
169
169
  types: "@strands.gg/auth-nuxt"
170
170
  }), e.declarations && e.declarations.push(`
171
171
  declare global {
172
- const useStrandsAuth: typeof import('${s.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useStrandsAuth']
173
- const useAuthUser: typeof import('${s.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useAuthUser']
174
- const useAuthState: typeof import('${s.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useAuthState']
175
- const useAuthenticatedFetch: typeof import('${s.resolve("./runtime/composables/useAuthenticatedFetch.d.ts")}')['useAuthenticatedFetch']
172
+ const useStrandsAuth: typeof import('${t.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useStrandsAuth']
173
+ const useAuthUser: typeof import('${t.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useAuthUser']
174
+ const useAuthState: typeof import('${t.resolve("./runtime/composables/useStrandsAuth.d.ts")}')['useAuthState']
175
+ const useAuthenticatedFetch: typeof import('${t.resolve("./runtime/composables/useAuthenticatedFetch.d.ts")}')['useAuthenticatedFetch']
176
176
  }
177
177
  `);
178
178
  });
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("vue"),a=require("nuxt/app"),u=require("../../../useStrandsAuth-B4p_U9vB.cjs.js");const i=()=>{let e;try{const s=a.useRuntimeConfig();s&&s.public&&(e=s.public.strandsAuth)}catch{}const n=u.useStrandsAuth();return{...n,initialize:async()=>{await n.initialize()},signIn:async s=>{const t=await n.signIn(s);return t&&e?.onSignInUrl&&!n.mfaRequired.value&&await a.navigateTo(e.onSignInUrl),t},signUp:async s=>await n.signUp({email:s.email,password:"",firstName:"",lastName:""}),signOut:async()=>{await n.signOut(),e?.onSignOutUrl&&await a.navigateTo(e.onSignOutUrl)}}},l=()=>{const{user:e}=i();return{user:e}},r=()=>{const{isAuthenticated:e,isLoading:n}=i();return{isAuthenticated:e,isLoading:n}};exports.useAuthState=r;exports.useAuthUser=l;exports.useStrandsAuth=i;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("vue"),a=require("nuxt/app"),u=require("../../../useStrandsAuth-Yp5OpRHU.cjs.js");const i=()=>{let e;try{const n=a.useRuntimeConfig();n&&n.public&&(e=n.public.strandsAuth)}catch{}const s=u.useStrandsAuth();return{...s,initialize:async()=>{await s.initialize()},signIn:async n=>{const t=await s.signIn(n);return t&&e?.onSignInUrl&&!s.mfaRequired.value&&await a.navigateTo(e.onSignInUrl),t},signUp:async n=>await s.signUp({email:n.email,password:"",firstName:"",lastName:""}),signOut:async n=>{await s.signOut(n),e?.onSignOutUrl&&await a.navigateTo(e.onSignOutUrl)}}},c=()=>{const{user:e}=i();return{user:e}},r=()=>{const{isAuthenticated:e,isLoading:s}=i();return{isAuthenticated:e,isLoading:s}};exports.useAuthState=r;exports.useAuthUser=c;exports.useStrandsAuth=i;
@@ -41,6 +41,8 @@ export declare const useStrandsAuth: () => {
41
41
  getMfaWebAuthnChallenge: () => Promise<null>;
42
42
  registerHardwareKey: () => Promise<null>;
43
43
  completeHardwareKeyRegistration: () => Promise<null>;
44
+ switchAccount: () => Promise<never>;
45
+ removeKnownAccount: () => Promise<void>;
44
46
  startTokenRefreshTimer: () => void;
45
47
  stopTokenRefreshTimer: () => void;
46
48
  getAuthHeaders: () => Record<string, string>;
@@ -54,7 +56,9 @@ export declare const useStrandsAuth: () => {
54
56
  signUp: (userData: {
55
57
  email: string;
56
58
  }) => Promise<void>;
57
- signOut: () => Promise<void>;
59
+ signOut: (options?: {
60
+ all?: boolean;
61
+ }) => Promise<void>;
58
62
  user: ComputedRef<User | null>;
59
63
  currentUser: ComputedRef<User | null>;
60
64
  currentSession: ComputedRef<import('../../..').Session | null>;
@@ -98,6 +102,8 @@ export declare const useStrandsAuth: () => {
98
102
  getMfaWebAuthnChallenge: (deviceId: string) => Promise<any>;
99
103
  registerHardwareKey: (deviceName: string, accessToken: string, deviceType?: "hardware" | "passkey") => Promise<any>;
100
104
  completeHardwareKeyRegistration: (deviceId: string, credential: any, accessToken: string) => Promise<any>;
105
+ switchAccount: (userId: string) => Promise<import('../../..').AuthResponse>;
106
+ removeKnownAccount: (userId: string) => Promise<void>;
101
107
  startTokenRefreshTimer: () => void;
102
108
  stopTokenRefreshTimer: () => void;
103
109
  getAuthHeaders: () => Record<string, string>;
@@ -1,6 +1,6 @@
1
1
  import { computed as n } from "vue";
2
- import { useRuntimeConfig as r, navigateTo as t } from "nuxt/app";
3
- import { u } from "../../../useStrandsAuth-BfQobCTK.es.js";
2
+ import { useRuntimeConfig as l, navigateTo as t } from "nuxt/app";
3
+ import { u } from "../../../useStrandsAuth-D2HvStMt.es.js";
4
4
  const o = () => ({
5
5
  user: n(() => null),
6
6
  currentUser: n(() => null),
@@ -45,6 +45,11 @@ const o = () => ({
45
45
  getMfaWebAuthnChallenge: async () => null,
46
46
  registerHardwareKey: async () => null,
47
47
  completeHardwareKeyRegistration: async () => null,
48
+ switchAccount: async () => {
49
+ throw new Error("SSR stub");
50
+ },
51
+ removeKnownAccount: async () => {
52
+ },
48
53
  startTokenRefreshTimer: () => {
49
54
  },
50
55
  stopTokenRefreshTimer: () => {
@@ -52,49 +57,49 @@ const o = () => ({
52
57
  getAuthHeaders: () => ({ "Content-Type": "application/json" }),
53
58
  forceReInit: () => {
54
59
  }
55
- }), l = () => {
60
+ }), r = () => {
56
61
  if (import.meta.server)
57
62
  return o();
58
63
  let e;
59
64
  try {
60
- const i = r();
61
- i && i.public && (e = i.public.strandsAuth);
65
+ const s = l();
66
+ s && s.public && (e = s.public.strandsAuth);
62
67
  } catch {
63
68
  }
64
- const s = u();
69
+ const a = u();
65
70
  return {
66
71
  // Re-export Vue composable state and methods
67
- ...s,
72
+ ...a,
68
73
  // Add initialize function
69
74
  initialize: async () => {
70
- await s.initialize();
75
+ await a.initialize();
71
76
  },
72
77
  // Override methods with Nuxt-specific navigation
73
- signIn: async (i) => {
74
- const a = await s.signIn(i);
75
- return a && e?.onSignInUrl && !s.mfaRequired.value && await t(e.onSignInUrl), a;
78
+ signIn: async (s) => {
79
+ const i = await a.signIn(s);
80
+ return i && e?.onSignInUrl && !a.mfaRequired.value && await t(e.onSignInUrl), i;
76
81
  },
77
- signUp: async (i) => await s.signUp({
78
- email: i.email,
82
+ signUp: async (s) => await a.signUp({
83
+ email: s.email,
79
84
  password: "",
80
85
  // Empty password for magic link
81
86
  firstName: "",
82
87
  // Will be filled later in the magic link flow
83
88
  lastName: ""
84
89
  }),
85
- signOut: async () => {
86
- await s.signOut(), e?.onSignOutUrl && await t(e.onSignOutUrl);
90
+ signOut: async (s) => {
91
+ await a.signOut(s), e?.onSignOutUrl && await t(e.onSignOutUrl);
87
92
  }
88
93
  };
89
94
  }, S = () => {
90
- const { user: e } = l();
95
+ const { user: e } = r();
91
96
  return { user: e };
92
97
  }, p = () => {
93
- const { isAuthenticated: e, isLoading: s } = l();
94
- return { isAuthenticated: e, isLoading: s };
98
+ const { isAuthenticated: e, isLoading: a } = r();
99
+ return { isAuthenticated: e, isLoading: a };
95
100
  };
96
101
  export {
97
102
  p as useAuthState,
98
103
  S as useAuthUser,
99
- l as useStrandsAuth
104
+ r as useStrandsAuth
100
105
  };
@@ -1 +1 @@
1
- "use strict";const o=require("nuxt/app"),s=require("../../useStrandsConfig-BYOAEt9d.cjs.js"),d=require("../../useDarkMode-Dd0Q5Nnz.cjs.js"),r=o.defineNuxtPlugin({name:"strands-auth-client",async setup(){const i=o.useRuntimeConfig().public.strandsAuth,e={...s.STRANDS_AUTH_DEFAULTS,...i};if(s.setStrandsConfig(e),typeof window<"u"&&(window.__STRANDS_CONFIG__=e),e?.accentColor&&typeof window<"u"&&document.documentElement.style.setProperty("--strands-accent",e.accentColor),typeof window<"u"){const n=e?.theme||"system";d.useGlobalDarkMode().setTheme(n)}if(e?.mode!=="oauth2"){const{useStrandsAuth:n}=await Promise.resolve().then(()=>require("./composables/useStrandsAuth.cjs.js")),{initialize:t}=n();await t()}}});module.exports=r;
1
+ "use strict";const e=require("nuxt/app"),t=require("../../useStrandsConfig-BY_IIwK8.cjs.js"),c=e.defineNuxtPlugin({name:"strands-auth-client",async setup(){const i=e.useRuntimeConfig().public.strandsAuth,n={...t.STRANDS_AUTH_DEFAULTS,...i};if(t.setStrandsConfig(n),typeof window<"u"&&(window.__STRANDS_CONFIG__=n),n?.accentColor&&typeof window<"u"&&document.documentElement.style.setProperty("--strands-accent",n.accentColor),n?.mode!=="oauth2"){const{useStrandsAuth:o}=await Promise.resolve().then(()=>require("./composables/useStrandsAuth.cjs.js")),{initialize:s}=o();await s()}}});module.exports=c;
@@ -1,23 +1,18 @@
1
1
  import { defineNuxtPlugin as i, useRuntimeConfig as s } from "nuxt/app";
2
- import { s as a, S as d } from "../../useStrandsConfig-B2UXxIbT.es.js";
3
- import { u as c } from "../../useDarkMode-BdG1G2mj.es.js";
4
- const l = i({
2
+ import { s as a, S as c } from "../../useStrandsConfig-B8h5hDy7.es.js";
3
+ const u = i({
5
4
  name: "strands-auth-client",
6
5
  async setup() {
7
- const o = s().public.strandsAuth, t = {
8
- ...d,
9
- ...o
6
+ const n = s().public.strandsAuth, t = {
7
+ ...c,
8
+ ...n
10
9
  };
11
- if (a(t), typeof window < "u" && (window.__STRANDS_CONFIG__ = t), t?.accentColor && typeof window < "u" && document.documentElement.style.setProperty("--strands-accent", t.accentColor), typeof window < "u") {
12
- const e = t?.theme || "system";
13
- c().setTheme(e);
14
- }
15
- if (t?.mode !== "oauth2") {
16
- const { useStrandsAuth: e } = await import("./composables/useStrandsAuth.es.js"), { initialize: n } = e();
17
- await n();
10
+ if (a(t), typeof window < "u" && (window.__STRANDS_CONFIG__ = t), t?.accentColor && typeof window < "u" && document.documentElement.style.setProperty("--strands-accent", t.accentColor), t?.mode !== "oauth2") {
11
+ const { useStrandsAuth: e } = await import("./composables/useStrandsAuth.es.js"), { initialize: o } = e();
12
+ await o();
18
13
  }
19
14
  }
20
15
  });
21
16
  export {
22
- l as default
17
+ u as default
23
18
  };
@@ -1 +1 @@
1
- "use strict";const n=require("nuxt/app"),s=require("../../useStrandsConfig-BYOAEt9d.cjs.js"),r=n.defineNuxtPlugin({name:"strands-auth-server",setup(){const e=n.useRuntimeConfig().public.strandsAuth,t={...s.STRANDS_AUTH_DEFAULTS,...e};s.setStrandsConfig(t)}});module.exports=r;
1
+ "use strict";const n=require("nuxt/app"),s=require("../../useStrandsConfig-BY_IIwK8.cjs.js"),r=n.defineNuxtPlugin({name:"strands-auth-server",setup(){const e=n.useRuntimeConfig().public.strandsAuth,t={...s.STRANDS_AUTH_DEFAULTS,...e};s.setStrandsConfig(t)}});module.exports=r;
@@ -1,5 +1,5 @@
1
1
  import { defineNuxtPlugin as t, useRuntimeConfig as e } from "nuxt/app";
2
- import { s as o, S as r } from "../../useStrandsConfig-B2UXxIbT.es.js";
2
+ import { s as o, S as r } from "../../useStrandsConfig-B8h5hDy7.es.js";
3
3
  const u = t({
4
4
  name: "strands-auth-server",
5
5
  setup() {
@@ -1,5 +1,5 @@
1
1
  import { ComputedRef, Ref } from 'vue';
2
- import { User, Session, SignInCredentials, SignUpData, SessionInfo, SessionStats, MfaDevice, StrandsAuthConfig, StrandsAuthEndpoints, AuthenticatedFetchOptions } from './index';
2
+ import { User, Session, SignInCredentials, SignUpData, SessionInfo, SessionStats, MfaDevice, AuthResponse, StrandsAuthConfig, StrandsAuthEndpoints, AuthenticatedFetchOptions } from './index';
3
3
  export interface UseStrandsAuthReturn {
4
4
  user: ComputedRef<User | null>;
5
5
  currentUser: ComputedRef<User | null>;
@@ -21,7 +21,9 @@ export interface UseStrandsAuthReturn {
21
21
  availableMfaMethods: ComputedRef<MfaDevice[]>;
22
22
  signIn: (credentials: SignInCredentials) => Promise<any>;
23
23
  signUp: (userData: SignUpData) => Promise<void>;
24
- signOut: () => Promise<void>;
24
+ signOut: (options?: {
25
+ all?: boolean;
26
+ }) => Promise<void>;
25
27
  refreshToken: () => Promise<boolean>;
26
28
  fetchProfile: () => Promise<User>;
27
29
  updateProfile: (updates: Partial<User>) => Promise<User>;
@@ -48,6 +50,8 @@ export interface UseStrandsAuthReturn {
48
50
  getMfaWebAuthnChallenge: (deviceId: string) => Promise<any>;
49
51
  registerHardwareKey: (deviceName: string, accessToken: string, deviceType?: 'hardware' | 'passkey') => Promise<any>;
50
52
  completeHardwareKeyRegistration: (deviceId: string, credential: any, accessToken: string) => Promise<any>;
53
+ switchAccount: (userId: string) => Promise<AuthResponse>;
54
+ removeKnownAccount: (userId: string) => Promise<void>;
51
55
  startTokenRefreshTimer: () => void;
52
56
  stopTokenRefreshTimer: () => void;
53
57
  getAuthHeaders: () => Record<string, string>;
@@ -223,6 +223,8 @@ export interface StrandsAuthEndpoints {
223
223
  sessionsStats: string;
224
224
  sessionRevoke: string;
225
225
  sessionsRevokeAll: string;
226
+ switchAccount: string;
227
+ removeKnownAccount: string;
226
228
  }
227
229
  export interface AuthResponse {
228
230
  access_token: string;
@@ -237,6 +239,18 @@ export interface AuthStatusResponse {
237
239
  user: User | null;
238
240
  /** Unix timestamp (seconds) when the access token expires */
239
241
  expires_at?: number;
242
+ /** Known accounts with session status (multi-account support) */
243
+ known_accounts?: KnownAccountStatus[];
244
+ }
245
+ export interface KnownAccount {
246
+ id: string;
247
+ email: string;
248
+ name: string;
249
+ avatar?: string;
250
+ active: boolean;
251
+ }
252
+ export interface KnownAccountStatus extends KnownAccount {
253
+ has_valid_session: boolean;
240
254
  }
241
255
  export type MfaDeviceType = 'totp' | 'email' | 'hardware' | 'passkey';
242
256
  export interface MfaDevice {
@@ -0,0 +1 @@
1
+ "use strict";const r=require("vue"),n=r.ref("system"),u=r.ref(!1),l="strands-ui-theme";function g(){return typeof window>"u"?!1:window.matchMedia("(prefers-color-scheme: dark)").matches}function k(){if(typeof window>"u")return"system";try{const e=localStorage.getItem(l);if(e&&["light","dark","system"].includes(e))return e}catch(e){console.warn("Failed to read theme preference from localStorage:",e)}return"system"}function v(e){if(!(typeof window>"u"))try{localStorage.setItem(l,e)}catch(s){console.warn("Failed to save theme preference to localStorage:",s)}}function m(e){typeof document>"u"||(e?(document.documentElement.setAttribute("data-theme","dark"),document.documentElement.classList.add("dark")):(document.documentElement.setAttribute("data-theme","light"),document.documentElement.classList.remove("dark")))}function w(){const e=r.computed(()=>n.value==="dark"?!0:n.value==="light"?!1:u.value),s=r.computed(()=>{switch(n.value){case"light":return"Light";case"dark":return"Dark";case"system":return"System";default:return"System"}});function a(t){n.value=t,v(t)}function f(){const t=e.value?"light":"dark";a(t)}function h(){switch(n.value){case"light":a("dark");break;case"dark":a("system");break;case"system":a("light");break;default:a("light");break}}function c(){if(typeof window>"u")return;u.value=g();const t=window.matchMedia("(prefers-color-scheme: dark)"),d=i=>{u.value=i.matches};t.addEventListener?t.addEventListener("change",d):t.addListener(d);const y=k();n.value=y,m(e.value),r.watch(e,i=>{m(i)},{immediate:!1})}return r.onMounted(()=>{c()}),{currentTheme:r.computed(()=>n.value),isDark:e,themeLabel:s,setTheme:a,toggle:f,cycleTheme:h,initialize:c,themeOptions:[{value:"light",label:"Light",icon:"sun"},{value:"dark",label:"Dark",icon:"moon"},{value:"system",label:"System",icon:"monitor"}]}}let o=null;function p(){return o||(o=w(),typeof window<"u"&&(localStorage.getItem(l)===null&&(n.value="system"),o.initialize())),o}exports.useGlobalDarkMode=p;
@@ -0,0 +1,102 @@
1
+ import { ref as f, computed as i, onMounted as k, watch as v } from "vue";
2
+ const n = f("system"), l = f(!1), u = "strands-ui-theme";
3
+ function w() {
4
+ return typeof window > "u" ? !1 : window.matchMedia("(prefers-color-scheme: dark)").matches;
5
+ }
6
+ function p() {
7
+ if (typeof window > "u") return "system";
8
+ try {
9
+ const e = localStorage.getItem(u);
10
+ if (e && ["light", "dark", "system"].includes(e))
11
+ return e;
12
+ } catch (e) {
13
+ console.warn("Failed to read theme preference from localStorage:", e);
14
+ }
15
+ return "system";
16
+ }
17
+ function S(e) {
18
+ if (!(typeof window > "u"))
19
+ try {
20
+ localStorage.setItem(u, e);
21
+ } catch (o) {
22
+ console.warn("Failed to save theme preference to localStorage:", o);
23
+ }
24
+ }
25
+ function m(e) {
26
+ typeof document > "u" || (e ? (document.documentElement.setAttribute("data-theme", "dark"), document.documentElement.classList.add("dark")) : (document.documentElement.setAttribute("data-theme", "light"), document.documentElement.classList.remove("dark")));
27
+ }
28
+ function b() {
29
+ const e = i(() => n.value === "dark" ? !0 : n.value === "light" ? !1 : l.value), o = i(() => {
30
+ switch (n.value) {
31
+ case "light":
32
+ return "Light";
33
+ case "dark":
34
+ return "Dark";
35
+ case "system":
36
+ return "System";
37
+ default:
38
+ return "System";
39
+ }
40
+ });
41
+ function r(t) {
42
+ n.value = t, S(t);
43
+ }
44
+ function h() {
45
+ const t = e.value ? "light" : "dark";
46
+ r(t);
47
+ }
48
+ function y() {
49
+ switch (n.value) {
50
+ case "light":
51
+ r("dark");
52
+ break;
53
+ case "dark":
54
+ r("system");
55
+ break;
56
+ case "system":
57
+ r("light");
58
+ break;
59
+ default:
60
+ r("light");
61
+ break;
62
+ }
63
+ }
64
+ function c() {
65
+ if (typeof window > "u") return;
66
+ l.value = w();
67
+ const t = window.matchMedia("(prefers-color-scheme: dark)"), d = (s) => {
68
+ l.value = s.matches;
69
+ };
70
+ t.addEventListener ? t.addEventListener("change", d) : t.addListener(d);
71
+ const g = p();
72
+ n.value = g, m(e.value), v(e, (s) => {
73
+ m(s);
74
+ }, { immediate: !1 });
75
+ }
76
+ return k(() => {
77
+ c();
78
+ }), {
79
+ // State
80
+ currentTheme: i(() => n.value),
81
+ isDark: e,
82
+ themeLabel: o,
83
+ // Actions
84
+ setTheme: r,
85
+ toggle: h,
86
+ cycleTheme: y,
87
+ initialize: c,
88
+ // Theme options for UI
89
+ themeOptions: [
90
+ { value: "light", label: "Light", icon: "sun" },
91
+ { value: "dark", label: "Dark", icon: "moon" },
92
+ { value: "system", label: "System", icon: "monitor" }
93
+ ]
94
+ };
95
+ }
96
+ let a = null;
97
+ function E() {
98
+ return a || (a = b(), typeof window < "u" && (localStorage.getItem(u) === null && (n.value = "system"), a.initialize())), a;
99
+ }
100
+ export {
101
+ E as u
102
+ };
@@ -0,0 +1,102 @@
1
+ import { ref as h, computed as u, getCurrentInstance as w, onMounted as p, watch as S } from "vue";
2
+ const n = h("system"), l = h(!1), c = "strands-ui-theme";
3
+ function b() {
4
+ return typeof window > "u" ? !1 : window.matchMedia("(prefers-color-scheme: dark)").matches;
5
+ }
6
+ function T() {
7
+ if (typeof window > "u") return "system";
8
+ try {
9
+ const e = localStorage.getItem(c);
10
+ if (e && ["light", "dark", "system"].includes(e))
11
+ return e;
12
+ } catch (e) {
13
+ console.warn("Failed to read theme preference from localStorage:", e);
14
+ }
15
+ return "system";
16
+ }
17
+ function E(e) {
18
+ if (!(typeof window > "u"))
19
+ try {
20
+ localStorage.setItem(c, e);
21
+ } catch (s) {
22
+ console.warn("Failed to save theme preference to localStorage:", s);
23
+ }
24
+ }
25
+ function f(e) {
26
+ typeof document > "u" || (e ? (document.documentElement.setAttribute("data-theme", "dark"), document.documentElement.classList.add("dark")) : (document.documentElement.setAttribute("data-theme", "light"), document.documentElement.classList.remove("dark")));
27
+ }
28
+ function L(e = {}) {
29
+ const { skipAutoInit: s = !1 } = e, a = u(() => n.value === "dark" ? !0 : n.value === "light" ? !1 : l.value), g = u(() => {
30
+ switch (n.value) {
31
+ case "light":
32
+ return "Light";
33
+ case "dark":
34
+ return "Dark";
35
+ case "system":
36
+ return "System";
37
+ default:
38
+ return "System";
39
+ }
40
+ });
41
+ function r(t) {
42
+ n.value = t, E(t);
43
+ }
44
+ function y() {
45
+ const t = a.value ? "light" : "dark";
46
+ r(t);
47
+ }
48
+ function k() {
49
+ switch (n.value) {
50
+ case "light":
51
+ r("dark");
52
+ break;
53
+ case "dark":
54
+ r("system");
55
+ break;
56
+ case "system":
57
+ r("light");
58
+ break;
59
+ default:
60
+ r("light");
61
+ break;
62
+ }
63
+ }
64
+ function d() {
65
+ if (typeof window > "u") return;
66
+ l.value = b();
67
+ const t = window.matchMedia("(prefers-color-scheme: dark)"), m = (i) => {
68
+ l.value = i.matches;
69
+ };
70
+ t.addEventListener ? t.addEventListener("change", m) : t.addListener(m);
71
+ const v = T();
72
+ n.value = v, f(a.value), S(a, (i) => {
73
+ f(i);
74
+ }, { immediate: !1 });
75
+ }
76
+ return !s && w() && p(() => {
77
+ d();
78
+ }), {
79
+ // State
80
+ currentTheme: u(() => n.value),
81
+ isDark: a,
82
+ themeLabel: g,
83
+ // Actions
84
+ setTheme: r,
85
+ toggle: y,
86
+ cycleTheme: k,
87
+ initialize: d,
88
+ // Theme options for UI
89
+ themeOptions: [
90
+ { value: "light", label: "Light", icon: "sun" },
91
+ { value: "dark", label: "Dark", icon: "moon" },
92
+ { value: "system", label: "System", icon: "monitor" }
93
+ ]
94
+ };
95
+ }
96
+ let o = null;
97
+ function D() {
98
+ return o || (o = L({ skipAutoInit: !0 }), typeof window < "u" && (localStorage.getItem(c) === null && (n.value = "system"), o.initialize())), o;
99
+ }
100
+ export {
101
+ D as u
102
+ };