@strands.gg/accui 2.15.16 → 2.17.9

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 (35) hide show
  1. package/dist/StrandsUIPlugin-Bwc7jBcb.cjs.js +143 -0
  2. package/dist/StrandsUIPlugin-RTFzvRED.es.js +20536 -0
  3. package/dist/accui.css +1 -1
  4. package/dist/index.cjs.js +5 -1
  5. package/dist/index.es.js +8805 -12557
  6. package/dist/nuxt/module.cjs.js +23 -1
  7. package/dist/nuxt/module.es.js +58 -82
  8. package/dist/nuxt/runtime/composables/useAuthenticatedFetch.cjs.js +1 -1
  9. package/dist/nuxt/runtime/composables/useAuthenticatedFetch.es.js +82 -111
  10. package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js +1 -1
  11. package/dist/nuxt/runtime/composables/useStrandsAuth.es.js +30 -46
  12. package/dist/nuxt/runtime/middleware/auth.global.cjs.js +1 -1
  13. package/dist/nuxt/runtime/middleware/auth.global.es.js +28 -44
  14. package/dist/nuxt/runtime/plugin.client.cjs.js +1 -1
  15. package/dist/nuxt/runtime/plugin.client.es.js +10 -19
  16. package/dist/nuxt/runtime/plugin.server.cjs.js +1 -1
  17. package/dist/nuxt/runtime/plugin.server.es.js +8 -10
  18. package/dist/nuxt/runtime/plugins/auth-interceptor.client.cjs.js +1 -1
  19. package/dist/nuxt/runtime/plugins/auth-interceptor.client.es.js +27 -48
  20. package/dist/nuxt.cjs.js +1 -1
  21. package/dist/nuxt.es.js +9 -9
  22. package/dist/useStrandsAuth-BVqpuhrO.cjs.js +1 -0
  23. package/dist/useStrandsAuth-Bv61_QkS.es.js +653 -0
  24. package/dist/useStrandsConfig-Cd22bj_E.es.js +209 -0
  25. package/dist/useStrandsConfig-D7a0QXz3.cjs.js +1 -0
  26. package/dist/vite.cjs.js +29 -1
  27. package/dist/vite.es.js +58 -75
  28. package/dist/vue/utils/modalStack.d.ts +3 -0
  29. package/package.json +2 -2
  30. package/dist/StrandsUIPlugin-BRGzLy44.cjs.js +0 -1
  31. package/dist/StrandsUIPlugin-DtGqMkbS.es.js +0 -26371
  32. package/dist/useStrandsAuth-BCnUxo-R.es.js +0 -915
  33. package/dist/useStrandsAuth-DoJxpNLb.cjs.js +0 -1
  34. package/dist/useStrandsConfig-Sr6NG90B.cjs.js +0 -1
  35. package/dist/useStrandsConfig-fRu-OG08.es.js +0 -248
@@ -0,0 +1,209 @@
1
+ import { ref as g, getCurrentInstance as h, inject as S, computed as f, provide as y } from "vue";
2
+ const d = {
3
+ baseUrl: "https://your-api.example.com",
4
+ accentColor: "#EA00A8",
5
+ redirectUrl: "/",
6
+ onSignInUrl: "/dashboard",
7
+ onSignOutUrl: "/",
8
+ autoRefresh: !0,
9
+ refreshInterval: 4,
10
+ protectedRoutes: [],
11
+ guestOnlyRoutes: ["/auth", "/login", "/register"],
12
+ devMode: !1,
13
+ styles: !0,
14
+ endpoints: {},
15
+ useSquircle: !0
16
+ }, a = {
17
+ signIn: "/api/v1/auth/sign-in",
18
+ signUp: "/api/v1/auth/sign-up",
19
+ signOut: "/api/v1/auth/sign-out",
20
+ refresh: "/api/v1/auth/refresh",
21
+ passwordReset: "/api/v1/auth/password-reset",
22
+ passwordResetConfirm: "/api/v1/auth/password-reset/confirm",
23
+ completeRegistration: "/api/v1/auth/complete-registration",
24
+ profile: "/api/v1/user/profile",
25
+ verifyEmail: "/api/v1/auth/verify-email",
26
+ oauthProviders: "/api/v1/oauth/providers",
27
+ oauthProvider: "/api/v1/oauth/providers/{provider_id}",
28
+ changeEmail: "/api/v1/user/change-email",
29
+ avatar: "/api/v1/user/avatar",
30
+ settings: "/api/v1/user/settings",
31
+ // Username endpoints
32
+ changeUsername: "/api/v1/user/username",
33
+ usernameCooldown: "/api/v1/user/username/cooldown",
34
+ checkUsernameAvailability: "/api/v1/username/{username}/available",
35
+ // MFA endpoints
36
+ mfaDevices: "/api/v1/mfa/devices",
37
+ mfaTotpSetup: "/api/v1/mfa/totp/setup",
38
+ mfaTotpVerify: "/api/v1/mfa/totp/verify",
39
+ mfaEmailSetup: "/api/v1/mfa/email/setup",
40
+ mfaEmailSend: "/api/v1/mfa/email/send",
41
+ mfaEmailVerify: "/api/v1/mfa/email/verify",
42
+ mfaDeviceDisable: "/api/v1/mfa/device/disable",
43
+ mfaBackupCodes: "/api/v1/mfa/backup-codes/regenerate",
44
+ // Hardware key endpoints
45
+ mfaHardwareStartRegistration: "/api/v1/mfa/hardware/start-registration",
46
+ mfaHardwareCompleteRegistration: "/api/v1/mfa/hardware/complete-registration",
47
+ // MFA sign-in specific endpoints
48
+ mfaSigninSendEmail: "/api/v1/auth/mfa/email/send",
49
+ mfaSigninVerify: "/api/v1/auth/mfa/verify",
50
+ mfaBackupCodeVerify: "/api/v1/auth/mfa/backup-code/verify",
51
+ mfaWebAuthnChallenge: "/api/v1/auth/mfa/webauthn/challenge",
52
+ // Session management endpoints
53
+ sessions: "/api/v1/sessions",
54
+ sessionsStats: "/api/v1/sessions/stats",
55
+ sessionRevoke: "/api/v1/sessions/{session_id}/revoke",
56
+ sessionsRevokeAll: "/api/v1/sessions/revoke-all"
57
+ }, p = /* @__PURE__ */ Symbol("strands-config"), l = g(null);
58
+ function v(s) {
59
+ if (typeof window > "u" || !document.documentElement) return;
60
+ if (typeof CSS < "u" && CSS.registerProperty)
61
+ try {
62
+ CSS.registerProperty({
63
+ name: "--strands-accent",
64
+ syntax: "<color>",
65
+ inherits: !0,
66
+ initialValue: s
67
+ });
68
+ } catch {
69
+ }
70
+ document.documentElement.style.setProperty("--strands-accent", s), document.documentElement.style.setProperty("--accui-strands-accent", s);
71
+ const t = {
72
+ "--accui-strands-50": `color-mix(in srgb, ${s} 10%, white)`,
73
+ "--accui-strands-100": `color-mix(in srgb, ${s} 20%, white)`,
74
+ "--accui-strands-200": `color-mix(in srgb, ${s} 30%, white)`,
75
+ "--accui-strands-300": `color-mix(in srgb, ${s} 40%, white)`,
76
+ "--accui-strands-400": `color-mix(in srgb, ${s} 70%, white)`,
77
+ "--accui-strands-500": s,
78
+ "--accui-strands-600": `color-mix(in srgb, ${s} 85%, black)`,
79
+ "--accui-strands-700": `color-mix(in srgb, ${s} 70%, black)`,
80
+ "--accui-strands-800": `color-mix(in srgb, ${s} 55%, black)`,
81
+ "--accui-strands-900": `color-mix(in srgb, ${s} 40%, black)`,
82
+ "--accui-strands-950": `color-mix(in srgb, ${s} 25%, black)`
83
+ };
84
+ for (const [r, n] of Object.entries(t))
85
+ document.documentElement.style.setProperty(r, n);
86
+ }
87
+ function w(s) {
88
+ if (l.value = s, typeof window < "u" && document.documentElement) {
89
+ const t = s.useSquircle !== void 0 ? s.useSquircle : !0;
90
+ document.documentElement.style.setProperty("--strands-allow-squircle", t ? "1" : "0"), s.accentColor && v(s.accentColor);
91
+ }
92
+ try {
93
+ y(p, s);
94
+ } catch (t) {
95
+ console.warn("[Strands Auth] Could not provide config via Vue provide/inject. Config available via global state only.", t);
96
+ }
97
+ }
98
+ function b(s) {
99
+ let t = null;
100
+ try {
101
+ h() && (t = S(p, null));
102
+ } catch {
103
+ t = null;
104
+ }
105
+ let r = null;
106
+ try {
107
+ if (typeof window < "u") {
108
+ if (window.__STRANDS_CONFIG__)
109
+ r = window.__STRANDS_CONFIG__;
110
+ else if (window.__NUXT__) {
111
+ const i = window.__NUXT__;
112
+ r = i?.config?.public?.strandsAuth || i?.public?.strandsAuth || i?.strandsAuth;
113
+ }
114
+ }
115
+ } catch (i) {
116
+ console.error("[Strands Auth] Error accessing runtime configuration:", i);
117
+ }
118
+ const n = f(() => {
119
+ const i = {
120
+ ...d,
121
+ ...s || {},
122
+ ...t || {},
123
+ ...l.value || {},
124
+ ...r || {}
125
+ };
126
+ if (i.baseUrl === d.baseUrl && typeof window > "u" && console.warn("[Strands Auth] No baseUrl configured for SSR. Please provide a baseUrl in your strandsAuth configuration."), typeof window < "u" && document.documentElement) {
127
+ const e = i.useSquircle !== void 0 ? i.useSquircle : !0;
128
+ document.documentElement.style.setProperty("--strands-allow-squircle", e ? "1" : "0"), i.accentColor && document.documentElement.style.setProperty("--strands-accent", i.accentColor);
129
+ }
130
+ return i;
131
+ }), u = f(() => {
132
+ const e = n.value.endpoints || {};
133
+ return {
134
+ signIn: e.signIn || a.signIn,
135
+ signUp: e.signUp || a.signUp,
136
+ signOut: e.signOut || a.signOut,
137
+ refresh: e.refresh || a.refresh,
138
+ passwordReset: e.passwordReset || a.passwordReset,
139
+ passwordResetConfirm: e.passwordResetConfirm || a.passwordResetConfirm,
140
+ completeRegistration: e.completeRegistration || a.completeRegistration,
141
+ profile: e.profile || a.profile,
142
+ verifyEmail: e.verifyEmail || a.verifyEmail,
143
+ oauthProviders: e.oauthProviders || a.oauthProviders,
144
+ oauthProvider: e.oauthProvider || a.oauthProvider,
145
+ changeEmail: e.changeEmail || a.changeEmail,
146
+ avatar: e.avatar || a.avatar,
147
+ settings: e.settings || a.settings,
148
+ // Username endpoints
149
+ changeUsername: e.changeUsername || a.changeUsername,
150
+ usernameCooldown: e.usernameCooldown || a.usernameCooldown,
151
+ checkUsernameAvailability: e.checkUsernameAvailability || a.checkUsernameAvailability,
152
+ // MFA endpoints
153
+ mfaDevices: e.mfaDevices || a.mfaDevices,
154
+ mfaTotpSetup: e.mfaTotpSetup || a.mfaTotpSetup,
155
+ mfaTotpVerify: e.mfaTotpVerify || a.mfaTotpVerify,
156
+ mfaEmailSetup: e.mfaEmailSetup || a.mfaEmailSetup,
157
+ mfaEmailSend: e.mfaEmailSend || a.mfaEmailSend,
158
+ mfaEmailVerify: e.mfaEmailVerify || a.mfaEmailVerify,
159
+ mfaDeviceDisable: e.mfaDeviceDisable || a.mfaDeviceDisable,
160
+ mfaBackupCodes: e.mfaBackupCodes || a.mfaBackupCodes,
161
+ // Hardware key endpoints
162
+ mfaHardwareStartRegistration: e.mfaHardwareStartRegistration || a.mfaHardwareStartRegistration,
163
+ mfaHardwareCompleteRegistration: e.mfaHardwareCompleteRegistration || a.mfaHardwareCompleteRegistration,
164
+ // MFA sign-in specific endpoints
165
+ mfaSigninSendEmail: e.mfaSigninSendEmail || a.mfaSigninSendEmail,
166
+ mfaSigninVerify: e.mfaSigninVerify || a.mfaSigninVerify,
167
+ mfaBackupCodeVerify: e.mfaBackupCodeVerify || a.mfaBackupCodeVerify,
168
+ mfaWebAuthnChallenge: e.mfaWebAuthnChallenge || a.mfaWebAuthnChallenge,
169
+ // Session management endpoints
170
+ sessions: e.sessions || a.sessions,
171
+ sessionsStats: e.sessionsStats || a.sessionsStats,
172
+ sessionRevoke: e.sessionRevoke || a.sessionRevoke,
173
+ sessionsRevokeAll: e.sessionsRevokeAll || a.sessionsRevokeAll
174
+ };
175
+ });
176
+ return {
177
+ config: n,
178
+ endpoints: u,
179
+ getUrl: (i) => {
180
+ const e = n.value;
181
+ if (!e.baseUrl)
182
+ throw new Error("Base URL is required in configuration");
183
+ let o;
184
+ typeof i == "string" && i in u.value ? o = u.value[i] : typeof i == "string" ? o = i : o = u.value[i];
185
+ const m = e.baseUrl.replace(/\/$/, ""), c = o.startsWith("/") ? o : `/${o}`;
186
+ return console.debug(`[Strands Auth] Constructing URL for endpoint "${i}": ${m}${c}`), `${m}${c}`;
187
+ },
188
+ getSupportEmail: () => n.value.supportEmail || null
189
+ };
190
+ }
191
+ function E(s) {
192
+ if (l.value = s, typeof window < "u" && document.documentElement) {
193
+ const t = s.useSquircle !== void 0 ? s.useSquircle : !0;
194
+ document.documentElement.style.setProperty("--strands-allow-squircle", t ? "1" : "0"), s.accentColor && v(s.accentColor);
195
+ }
196
+ }
197
+ const k = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
198
+ __proto__: null,
199
+ provideStrandsConfig: w,
200
+ setStrandsConfig: E,
201
+ useStrandsConfig: b
202
+ }, Symbol.toStringTag, { value: "Module" }));
203
+ export {
204
+ d as S,
205
+ k as a,
206
+ w as p,
207
+ E as s,
208
+ b as u
209
+ };
@@ -0,0 +1 @@
1
+ "use strict";const u=require("vue"),c={baseUrl:"https://your-api.example.com",accentColor:"#EA00A8",redirectUrl:"/",onSignInUrl:"/dashboard",onSignOutUrl:"/",autoRefresh:!0,refreshInterval:4,protectedRoutes:[],guestOnlyRoutes:["/auth","/login","/register"],devMode:!1,styles:!0,endpoints:{},useSquircle:!0},a={signIn:"/api/v1/auth/sign-in",signUp:"/api/v1/auth/sign-up",signOut:"/api/v1/auth/sign-out",refresh:"/api/v1/auth/refresh",passwordReset:"/api/v1/auth/password-reset",passwordResetConfirm:"/api/v1/auth/password-reset/confirm",completeRegistration:"/api/v1/auth/complete-registration",profile:"/api/v1/user/profile",verifyEmail:"/api/v1/auth/verify-email",oauthProviders:"/api/v1/oauth/providers",oauthProvider:"/api/v1/oauth/providers/{provider_id}",changeEmail:"/api/v1/user/change-email",avatar:"/api/v1/user/avatar",settings:"/api/v1/user/settings",changeUsername:"/api/v1/user/username",usernameCooldown:"/api/v1/user/username/cooldown",checkUsernameAvailability:"/api/v1/username/{username}/available",mfaDevices:"/api/v1/mfa/devices",mfaTotpSetup:"/api/v1/mfa/totp/setup",mfaTotpVerify:"/api/v1/mfa/totp/verify",mfaEmailSetup:"/api/v1/mfa/email/setup",mfaEmailSend:"/api/v1/mfa/email/send",mfaEmailVerify:"/api/v1/mfa/email/verify",mfaDeviceDisable:"/api/v1/mfa/device/disable",mfaBackupCodes:"/api/v1/mfa/backup-codes/regenerate",mfaHardwareStartRegistration:"/api/v1/mfa/hardware/start-registration",mfaHardwareCompleteRegistration:"/api/v1/mfa/hardware/complete-registration",mfaSigninSendEmail:"/api/v1/auth/mfa/email/send",mfaSigninVerify:"/api/v1/auth/mfa/verify",mfaBackupCodeVerify:"/api/v1/auth/mfa/backup-code/verify",mfaWebAuthnChallenge:"/api/v1/auth/mfa/webauthn/challenge",sessions:"/api/v1/sessions",sessionsStats:"/api/v1/sessions/stats",sessionRevoke:"/api/v1/sessions/{session_id}/revoke",sessionsRevokeAll:"/api/v1/sessions/revoke-all"},p=Symbol("strands-config"),m=u.ref(null);function v(s){if(typeof window>"u"||!document.documentElement)return;if(typeof CSS<"u"&&CSS.registerProperty)try{CSS.registerProperty({name:"--strands-accent",syntax:"<color>",inherits:!0,initialValue:s})}catch{}document.documentElement.style.setProperty("--strands-accent",s),document.documentElement.style.setProperty("--accui-strands-accent",s);const t={"--accui-strands-50":`color-mix(in srgb, ${s} 10%, white)`,"--accui-strands-100":`color-mix(in srgb, ${s} 20%, white)`,"--accui-strands-200":`color-mix(in srgb, ${s} 30%, white)`,"--accui-strands-300":`color-mix(in srgb, ${s} 40%, white)`,"--accui-strands-400":`color-mix(in srgb, ${s} 70%, white)`,"--accui-strands-500":s,"--accui-strands-600":`color-mix(in srgb, ${s} 85%, black)`,"--accui-strands-700":`color-mix(in srgb, ${s} 70%, black)`,"--accui-strands-800":`color-mix(in srgb, ${s} 55%, black)`,"--accui-strands-900":`color-mix(in srgb, ${s} 40%, black)`,"--accui-strands-950":`color-mix(in srgb, ${s} 25%, black)`};for(const[r,n]of Object.entries(t))document.documentElement.style.setProperty(r,n)}function g(s){if(m.value=s,typeof window<"u"&&document.documentElement){const t=s.useSquircle!==void 0?s.useSquircle:!0;document.documentElement.style.setProperty("--strands-allow-squircle",t?"1":"0"),s.accentColor&&v(s.accentColor)}try{u.provide(p,s)}catch(t){console.warn("[Strands Auth] Could not provide config via Vue provide/inject. Config available via global state only.",t)}}function S(s){let t=null;try{u.getCurrentInstance()&&(t=u.inject(p,null))}catch{t=null}let r=null;try{if(typeof window<"u"){if(window.__STRANDS_CONFIG__)r=window.__STRANDS_CONFIG__;else if(window.__NUXT__){const i=window.__NUXT__;r=i?.config?.public?.strandsAuth||i?.public?.strandsAuth||i?.strandsAuth}}}catch(i){console.error("[Strands Auth] Error accessing runtime configuration:",i)}const n=u.computed(()=>{const i={...c,...s||{},...t||{},...m.value||{},...r||{}};if(i.baseUrl===c.baseUrl&&typeof window>"u"&&console.warn("[Strands Auth] No baseUrl configured for SSR. Please provide a baseUrl in your strandsAuth configuration."),typeof window<"u"&&document.documentElement){const e=i.useSquircle!==void 0?i.useSquircle:!0;document.documentElement.style.setProperty("--strands-allow-squircle",e?"1":"0"),i.accentColor&&document.documentElement.style.setProperty("--strands-accent",i.accentColor)}return i}),l=u.computed(()=>{const e=n.value.endpoints||{};return{signIn:e.signIn||a.signIn,signUp:e.signUp||a.signUp,signOut:e.signOut||a.signOut,refresh:e.refresh||a.refresh,passwordReset:e.passwordReset||a.passwordReset,passwordResetConfirm:e.passwordResetConfirm||a.passwordResetConfirm,completeRegistration:e.completeRegistration||a.completeRegistration,profile:e.profile||a.profile,verifyEmail:e.verifyEmail||a.verifyEmail,oauthProviders:e.oauthProviders||a.oauthProviders,oauthProvider:e.oauthProvider||a.oauthProvider,changeEmail:e.changeEmail||a.changeEmail,avatar:e.avatar||a.avatar,settings:e.settings||a.settings,changeUsername:e.changeUsername||a.changeUsername,usernameCooldown:e.usernameCooldown||a.usernameCooldown,checkUsernameAvailability:e.checkUsernameAvailability||a.checkUsernameAvailability,mfaDevices:e.mfaDevices||a.mfaDevices,mfaTotpSetup:e.mfaTotpSetup||a.mfaTotpSetup,mfaTotpVerify:e.mfaTotpVerify||a.mfaTotpVerify,mfaEmailSetup:e.mfaEmailSetup||a.mfaEmailSetup,mfaEmailSend:e.mfaEmailSend||a.mfaEmailSend,mfaEmailVerify:e.mfaEmailVerify||a.mfaEmailVerify,mfaDeviceDisable:e.mfaDeviceDisable||a.mfaDeviceDisable,mfaBackupCodes:e.mfaBackupCodes||a.mfaBackupCodes,mfaHardwareStartRegistration:e.mfaHardwareStartRegistration||a.mfaHardwareStartRegistration,mfaHardwareCompleteRegistration:e.mfaHardwareCompleteRegistration||a.mfaHardwareCompleteRegistration,mfaSigninSendEmail:e.mfaSigninSendEmail||a.mfaSigninSendEmail,mfaSigninVerify:e.mfaSigninVerify||a.mfaSigninVerify,mfaBackupCodeVerify:e.mfaBackupCodeVerify||a.mfaBackupCodeVerify,mfaWebAuthnChallenge:e.mfaWebAuthnChallenge||a.mfaWebAuthnChallenge,sessions:e.sessions||a.sessions,sessionsStats:e.sessionsStats||a.sessionsStats,sessionRevoke:e.sessionRevoke||a.sessionRevoke,sessionsRevokeAll:e.sessionsRevokeAll||a.sessionsRevokeAll}});return{config:n,endpoints:l,getUrl:i=>{const e=n.value;if(!e.baseUrl)throw new Error("Base URL is required in configuration");let o;typeof i=="string"&&i in l.value?o=l.value[i]:typeof i=="string"?o=i:o=l.value[i];const f=e.baseUrl.replace(/\/$/,""),d=o.startsWith("/")?o:`/${o}`;return console.debug(`[Strands Auth] Constructing URL for endpoint "${i}": ${f}${d}`),`${f}${d}`},getSupportEmail:()=>n.value.supportEmail||null}}function h(s){if(m.value=s,typeof window<"u"&&document.documentElement){const t=s.useSquircle!==void 0?s.useSquircle:!0;document.documentElement.style.setProperty("--strands-allow-squircle",t?"1":"0"),s.accentColor&&v(s.accentColor)}}const y=Object.freeze(Object.defineProperty({__proto__:null,provideStrandsConfig:g,setStrandsConfig:h,useStrandsConfig:S},Symbol.toStringTag,{value:"Module"}));exports.STRANDS_AUTH_DEFAULTS=c;exports.provideStrandsConfig=g;exports.setStrandsConfig=h;exports.useStrandsConfig=S;exports.useStrandsConfig$1=y;
package/dist/vite.cjs.js CHANGED
@@ -1 +1,29 @@
1
- "use strict";function n(n={}){const{styles:s=1,accentColor:r="#EA00A8",useSquircle:t=1,...i}=n;let c;return{name:"@strands.gg/accui:vite-plugin",enforce:"pre",config:(n,{command:s})=>(c={accentColor:r,useSquircle:t,...i},{define:{t:JSON.stringify(c)}}),transformIndexHtml:{order:"pre",handler(n){if(r&&"#EA00A8"!==r){const s=`<style data-strands-accent>\n :root {\n --strands-accent: ${r};\n --accui-strands-accent: ${r};\n --accui-strands-50: color-mix(in srgb, ${r} 10%, white);\n --accui-strands-100: color-mix(in srgb, ${r} 20%, white);\n --accui-strands-200: color-mix(in srgb, ${r} 30%, white);\n --accui-strands-300: color-mix(in srgb, ${r} 40%, white);\n --accui-strands-400: color-mix(in srgb, ${r} 70%, white);\n --accui-strands-500: ${r};\n --accui-strands-600: color-mix(in srgb, ${r} 85%, black);\n --accui-strands-700: color-mix(in srgb, ${r} 70%, black);\n --accui-strands-800: color-mix(in srgb, ${r} 55%, black);\n --accui-strands-900: color-mix(in srgb, ${r} 40%, black);\n --accui-strands-950: color-mix(in srgb, ${r} 25%, black);\n }</style>`;return n.replace("</head>",` ${s}\n </head>`)}return n}},transform:async(n,r)=>(s&&r.endsWith("main.ts")||r.endsWith("main.js"))&&!n.includes("@strands.gg/accui/style.css")?{code:`import '@strands.gg/accui/style.css'\n${n}`,map:null}:!r.endsWith("main.ts")&&!r.endsWith("main.js")||n.includes("setStrandsConfig")||n.includes("__STRANDS_INJECTED__")?null:{code:`\n// Auto-injected by @strands.gg/accui Vite plugin\nimport { setStrandsConfig } from '@strands.gg/accui'\n\nif (typeof window !== 'undefined') {\n const strandsConfig = ${JSON.stringify(c)}\n setStrandsConfig(strandsConfig)\n window.__STRANDS_CONFIG__ = strandsConfig\n window.__STRANDS_INJECTED__ = true\n}\n\n${n}`,map:null}}}Object.defineProperties(exports,{i:{value:1},[Symbol.toStringTag]:{value:"Module"}}),exports.StrandsAuth=n,exports.StrandsAuthVitePlugin=n,exports.createStrandsAuth=function(n={}){return{install(s){Promise.resolve().then(()=>require("./StrandsUIPlugin-BRGzLy44.cjs.js")).then(n=>n.StrandsUIPlugin$1).then(n=>{const r=n.default;s.use(r)}),Promise.resolve().then(()=>require("./useStrandsConfig-Sr6NG90B.cjs.js")).then(n=>n.useStrandsConfig$1).then(s=>{const{setStrandsConfig:r}=s;r(n),"undefined"!=typeof window&&(window.t=n)})}}},exports.default=n,exports.strandsAuth=n;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function e(i={}){const{styles:a=!0,accentColor:n="#EA00A8",useSquircle:r=!0,...u}=i;let c;return{name:"@strands.gg/accui:vite-plugin",enforce:"pre",config(s,{command:t}){return c={accentColor:n,useSquircle:r,...u},{define:{__STRANDS_CONFIG__:JSON.stringify(c)}}},transformIndexHtml:{order:"pre",handler(s){if(n&&n!=="#EA00A8"){const o=`<style data-strands-accent>${`
2
+ :root {
3
+ --strands-accent: ${n};
4
+ --accui-strands-accent: ${n};
5
+ --accui-strands-50: color-mix(in srgb, ${n} 10%, white);
6
+ --accui-strands-100: color-mix(in srgb, ${n} 20%, white);
7
+ --accui-strands-200: color-mix(in srgb, ${n} 30%, white);
8
+ --accui-strands-300: color-mix(in srgb, ${n} 40%, white);
9
+ --accui-strands-400: color-mix(in srgb, ${n} 70%, white);
10
+ --accui-strands-500: ${n};
11
+ --accui-strands-600: color-mix(in srgb, ${n} 85%, black);
12
+ --accui-strands-700: color-mix(in srgb, ${n} 70%, black);
13
+ --accui-strands-800: color-mix(in srgb, ${n} 55%, black);
14
+ --accui-strands-900: color-mix(in srgb, ${n} 40%, black);
15
+ --accui-strands-950: color-mix(in srgb, ${n} 25%, black);
16
+ }`}</style>`;return s.replace("</head>",` ${o}
17
+ </head>`)}return s}},async transform(s,t){return(a&&t.endsWith("main.ts")||t.endsWith("main.js"))&&!s.includes("@strands.gg/accui/style.css")?{code:`import '@strands.gg/accui/style.css'
18
+ ${s}`,map:null}:(t.endsWith("main.ts")||t.endsWith("main.js"))&&!s.includes("setStrandsConfig")&&!s.includes("__STRANDS_INJECTED__")?{code:`${`
19
+ // Auto-injected by @strands.gg/accui Vite plugin
20
+ import { setStrandsConfig } from '@strands.gg/accui'
21
+
22
+ if (typeof window !== 'undefined') {
23
+ const strandsConfig = ${JSON.stringify(c)}
24
+ setStrandsConfig(strandsConfig)
25
+ window.__STRANDS_CONFIG__ = strandsConfig
26
+ window.__STRANDS_INJECTED__ = true
27
+ }
28
+ `}
29
+ ${s}`,map:null}:null}}}function d(i={}){return{install(a){Promise.resolve().then(()=>require("./StrandsUIPlugin-Bwc7jBcb.cjs.js")).then(n=>n.StrandsUIPlugin$1).then(n=>{const r=n.default;a.use(r)}),Promise.resolve().then(()=>require("./useStrandsConfig-D7a0QXz3.cjs.js")).then(n=>n.useStrandsConfig$1).then(n=>{const{setStrandsConfig:r}=n;r(i),typeof window<"u"&&(window.__STRANDS_CONFIG__=i)})}}}exports.StrandsAuth=e;exports.StrandsAuthVitePlugin=e;exports.createStrandsAuth=d;exports.default=e;exports.strandsAuth=e;
package/dist/vite.es.js CHANGED
@@ -1,109 +1,92 @@
1
- function StrandsAuthVitePlugin(options = {}) {
1
+ function u(r = {}) {
2
2
  const {
3
- styles = true,
4
- accentColor = "#EA00A8",
5
- useSquircle = true,
6
- ...authConfig
7
- } = options;
8
- let config;
3
+ styles: a = !0,
4
+ accentColor: n = "#EA00A8",
5
+ useSquircle: i = !0,
6
+ ...o
7
+ } = r;
8
+ let c;
9
9
  return {
10
10
  name: "@strands.gg/accui:vite-plugin",
11
11
  enforce: "pre",
12
- config(_, { command }) {
13
- config = {
14
- accentColor,
15
- useSquircle,
16
- ...authConfig
17
- };
18
- return {
12
+ config(s, { command: t }) {
13
+ return c = {
14
+ accentColor: n,
15
+ useSquircle: i,
16
+ ...o
17
+ }, {
19
18
  define: {
20
19
  // Make config available at build time
21
- "__STRANDS_CONFIG__": JSON.stringify(config)
20
+ __STRANDS_CONFIG__: JSON.stringify(c)
22
21
  }
23
22
  };
24
23
  },
25
24
  transformIndexHtml: {
26
25
  order: "pre",
27
- handler(html) {
28
- if (accentColor && accentColor !== "#EA00A8") {
29
- const cssVariables = `
26
+ handler(s) {
27
+ if (n && n !== "#EA00A8") {
28
+ const e = `<style data-strands-accent>${`
30
29
  :root {
31
- --strands-accent: ${accentColor};
32
- --accui-strands-accent: ${accentColor};
33
- --accui-strands-50: color-mix(in srgb, ${accentColor} 10%, white);
34
- --accui-strands-100: color-mix(in srgb, ${accentColor} 20%, white);
35
- --accui-strands-200: color-mix(in srgb, ${accentColor} 30%, white);
36
- --accui-strands-300: color-mix(in srgb, ${accentColor} 40%, white);
37
- --accui-strands-400: color-mix(in srgb, ${accentColor} 70%, white);
38
- --accui-strands-500: ${accentColor};
39
- --accui-strands-600: color-mix(in srgb, ${accentColor} 85%, black);
40
- --accui-strands-700: color-mix(in srgb, ${accentColor} 70%, black);
41
- --accui-strands-800: color-mix(in srgb, ${accentColor} 55%, black);
42
- --accui-strands-900: color-mix(in srgb, ${accentColor} 40%, black);
43
- --accui-strands-950: color-mix(in srgb, ${accentColor} 25%, black);
44
- }`;
45
- const styleTag = `<style data-strands-accent>${cssVariables}</style>`;
46
- return html.replace("</head>", ` ${styleTag}
30
+ --strands-accent: ${n};
31
+ --accui-strands-accent: ${n};
32
+ --accui-strands-50: color-mix(in srgb, ${n} 10%, white);
33
+ --accui-strands-100: color-mix(in srgb, ${n} 20%, white);
34
+ --accui-strands-200: color-mix(in srgb, ${n} 30%, white);
35
+ --accui-strands-300: color-mix(in srgb, ${n} 40%, white);
36
+ --accui-strands-400: color-mix(in srgb, ${n} 70%, white);
37
+ --accui-strands-500: ${n};
38
+ --accui-strands-600: color-mix(in srgb, ${n} 85%, black);
39
+ --accui-strands-700: color-mix(in srgb, ${n} 70%, black);
40
+ --accui-strands-800: color-mix(in srgb, ${n} 55%, black);
41
+ --accui-strands-900: color-mix(in srgb, ${n} 40%, black);
42
+ --accui-strands-950: color-mix(in srgb, ${n} 25%, black);
43
+ }`}</style>`;
44
+ return s.replace("</head>", ` ${e}
47
45
  </head>`);
48
46
  }
49
- return html;
47
+ return s;
50
48
  }
51
49
  },
52
- async transform(code, id) {
53
- if (styles && id.endsWith("main.ts") || id.endsWith("main.js")) {
54
- if (!code.includes("@strands.gg/accui/style.css")) {
55
- return {
56
- code: `import '@strands.gg/accui/style.css'
57
- ${code}`,
58
- map: null
59
- };
60
- }
61
- }
62
- if (id.endsWith("main.ts") || id.endsWith("main.js")) {
63
- if (!code.includes("setStrandsConfig") && !code.includes("__STRANDS_INJECTED__")) {
64
- const configSetup = `
50
+ async transform(s, t) {
51
+ return (a && t.endsWith("main.ts") || t.endsWith("main.js")) && !s.includes("@strands.gg/accui/style.css") ? {
52
+ code: `import '@strands.gg/accui/style.css'
53
+ ${s}`,
54
+ map: null
55
+ } : (t.endsWith("main.ts") || t.endsWith("main.js")) && !s.includes("setStrandsConfig") && !s.includes("__STRANDS_INJECTED__") ? {
56
+ code: `${`
65
57
  // Auto-injected by @strands.gg/accui Vite plugin
66
58
  import { setStrandsConfig } from '@strands.gg/accui'
67
59
 
68
60
  if (typeof window !== 'undefined') {
69
- const strandsConfig = ${JSON.stringify(config)}
61
+ const strandsConfig = ${JSON.stringify(c)}
70
62
  setStrandsConfig(strandsConfig)
71
63
  window.__STRANDS_CONFIG__ = strandsConfig
72
64
  window.__STRANDS_INJECTED__ = true
73
65
  }
74
- `;
75
- return {
76
- code: `${configSetup}
77
- ${code}`,
78
- map: null
79
- };
80
- }
81
- }
82
- return null;
66
+ `}
67
+ ${s}`,
68
+ map: null
69
+ } : null;
83
70
  }
84
71
  };
85
72
  }
86
- function createStrandsAuth(config = {}) {
73
+ function d(r = {}) {
87
74
  return {
88
- install(app) {
89
- import("./StrandsUIPlugin-DtGqMkbS.es.js").then((n) => n.n).then((module) => {
90
- const StrandsUIPlugin = module.default;
91
- app.use(StrandsUIPlugin);
92
- });
93
- import("./useStrandsConfig-fRu-OG08.es.js").then((n) => n.a).then((module) => {
94
- const { setStrandsConfig } = module;
95
- setStrandsConfig(config);
96
- if (typeof window !== "undefined") {
97
- window.__STRANDS_CONFIG__ = config;
98
- }
75
+ install(a) {
76
+ import("./StrandsUIPlugin-RTFzvRED.es.js").then((n) => n.n).then((n) => {
77
+ const i = n.default;
78
+ a.use(i);
79
+ }), import("./useStrandsConfig-Cd22bj_E.es.js").then((n) => n.a).then((n) => {
80
+ const { setStrandsConfig: i } = n;
81
+ i(r), typeof window < "u" && (window.__STRANDS_CONFIG__ = r);
99
82
  });
100
83
  }
101
84
  };
102
85
  }
103
86
  export {
104
- StrandsAuthVitePlugin as StrandsAuth,
105
- StrandsAuthVitePlugin,
106
- createStrandsAuth,
107
- StrandsAuthVitePlugin as default,
108
- StrandsAuthVitePlugin as strandsAuth
87
+ u as StrandsAuth,
88
+ u as StrandsAuthVitePlugin,
89
+ d as createStrandsAuth,
90
+ u as default,
91
+ u as strandsAuth
109
92
  };
@@ -17,8 +17,11 @@ declare class ModalStack {
17
17
  private escapeHandlerRegistered;
18
18
  private baseZIndex;
19
19
  private subscribers;
20
+ private originalBodyOverflow;
20
21
  private handleEscape;
21
22
  private calculateZIndex;
23
+ private lockBodyScroll;
24
+ private unlockBodyScroll;
22
25
  private notifySubscribers;
23
26
  add(modal: Omit<ModalInstance, 'zIndex'>): ModalInstance;
24
27
  remove(modalId: symbol): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strands.gg/accui",
3
- "version": "2.15.16",
3
+ "version": "2.17.9",
4
4
  "description": "Strands Authentication UI Components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs.js",
@@ -90,7 +90,7 @@
90
90
  "@fullhuman/postcss-purgecss": "^7.0.2",
91
91
  "@nuxt/kit": "^4.0.3",
92
92
  "@nuxt/schema": "^4.0.3",
93
- "@vitejs/plugin-vue": "^5.2.1",
93
+ "@vitejs/plugin-vue": "^6.0.0",
94
94
  "lightningcss": "^1.30.1",
95
95
  "nuxt": "^4.0.3",
96
96
  "postcss": "^8.5.6",