@strands.gg/accui 0.2.12 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accui.css +1 -1
- package/dist/nuxt/runtime/composables/useStrandsAuth.cjs.js +1 -1
- package/dist/nuxt/runtime/composables/useStrandsAuth.d.ts +4 -3
- package/dist/nuxt/runtime/composables/useStrandsAuth.d.ts.map +1 -1
- package/dist/nuxt/runtime/composables/useStrandsAuth.es.js +1 -1
- package/dist/nuxt/runtime/plugin.client.cjs.js +1 -1
- package/dist/nuxt/runtime/plugin.client.es.js +1 -1
- package/dist/nuxt/runtime/plugin.server.cjs.js +1 -1
- package/dist/nuxt/runtime/plugin.server.es.js +1 -1
- package/dist/nuxt/types.d.ts +0 -1
- package/dist/nuxt/types.d.ts.map +1 -1
- package/dist/nuxt-v4/runtime/composables/useStrandsAuth.cjs.js +1 -1
- package/dist/nuxt-v4/runtime/composables/useStrandsAuth.es.js +1 -1
- package/dist/nuxt-v4/runtime/plugin.client.cjs.js +1 -1
- package/dist/nuxt-v4/runtime/plugin.client.es.js +1 -1
- package/dist/nuxt-v4/runtime/plugin.server.cjs.js +1 -1
- package/dist/nuxt-v4/runtime/plugin.server.es.js +1 -1
- package/dist/nuxt-v4/types.d.ts +0 -1
- package/dist/nuxt-v4/types.d.ts.map +1 -1
- package/dist/strands-auth-ui.cjs.js +4 -11
- package/dist/strands-auth-ui.cjs.js.map +1 -1
- package/dist/strands-auth-ui.es.js +1222 -1131
- package/dist/strands-auth-ui.es.js.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/useStrandsAuth-CJsQ5cew.cjs +2 -0
- package/dist/useStrandsAuth-CJsQ5cew.cjs.map +1 -0
- package/dist/{useStrandsAuth-CPyy4tH6.js → useStrandsAuth-OsoGbmZh.js} +102 -67
- package/dist/useStrandsAuth-OsoGbmZh.js.map +1 -0
- package/dist/useStrandsConfig-BDUymyIP.cjs +2 -0
- package/dist/useStrandsConfig-BDUymyIP.cjs.map +1 -0
- package/dist/useStrandsConfig-DMkkLRCA.js +102 -0
- package/dist/useStrandsConfig-DMkkLRCA.js.map +1 -0
- package/dist/utils/validation.d.ts +0 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/vue/components/SignedIn.vue.d.ts +1 -1
- package/dist/vue/components/SignedOut.vue.d.ts +1 -1
- package/dist/vue/components/StrandsUserProfile.vue.d.ts +4 -12
- package/dist/vue/components/StrandsUserProfile.vue.d.ts.map +1 -1
- package/dist/vue/composables/useStrandsAuth.d.ts +4 -3
- package/dist/vue/composables/useStrandsAuth.d.ts.map +1 -1
- package/dist/vue/composables/useStrandsConfig.d.ts.map +1 -1
- package/dist/vue/ui/UiLoader.vue.d.ts +2 -2
- package/dist/vue/ui/UiLoader.vue.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/useStrandsAuth-CPyy4tH6.js.map +0 -1
- package/dist/useStrandsAuth-C_MiRZbU.cjs +0 -2
- package/dist/useStrandsAuth-C_MiRZbU.cjs.map +0 -1
- package/dist/useStrandsConfig-R8O__glt.cjs +0 -2
- package/dist/useStrandsConfig-R8O__glt.cjs.map +0 -1
- package/dist/useStrandsConfig-j-Bfv_s7.js +0 -98
- package/dist/useStrandsConfig-j-Bfv_s7.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { u as
|
|
3
|
-
import { s as
|
|
4
|
-
import { u as
|
|
5
|
-
const
|
|
1
|
+
import { defineComponent as Z, computed as x, createElementBlock as A, openBlock as l, normalizeClass as J, createElementVNode as r, createCommentVNode as n, toDisplayString as U, renderSlot as R, createTextVNode as V, useSlots as Ie, ref as q, createBlock as $, resolveDynamicComponent as ke, mergeProps as Xe, withCtx as v, onMounted as re, nextTick as Ce, toRefs as De, watch as me, Fragment as _, renderList as be, normalizeStyle as je, reactive as te, createVNode as d, Transition as ee, withModifiers as fe, createStaticVNode as Ne, h as T } from "vue";
|
|
2
|
+
import { u as se, p as We } from "./useStrandsConfig-DMkkLRCA.js";
|
|
3
|
+
import { s as Ga } from "./useStrandsConfig-DMkkLRCA.js";
|
|
4
|
+
import { u as ge } from "./useStrandsAuth-OsoGbmZh.js";
|
|
5
|
+
const Te = /* @__PURE__ */ Z({
|
|
6
6
|
__name: "UiAlert",
|
|
7
7
|
props: {
|
|
8
8
|
variant: { type: String, required: !1, default: "info" },
|
|
@@ -13,18 +13,18 @@ const Ce = /* @__PURE__ */ X({
|
|
|
13
13
|
emits: ["dismiss"],
|
|
14
14
|
setup(o, { expose: t }) {
|
|
15
15
|
t();
|
|
16
|
-
const a = o, e =
|
|
17
|
-
const
|
|
16
|
+
const a = o, e = x(() => {
|
|
17
|
+
const S = ["rounded-lg border p-4"], C = {
|
|
18
18
|
success: "bg-green-50 border-green-200 text-green-800",
|
|
19
19
|
error: "bg-red-50 border-red-200 text-red-800",
|
|
20
20
|
warning: "bg-yellow-50 border-yellow-200 text-yellow-800",
|
|
21
21
|
info: "bg-blue-50 border-blue-200 text-blue-800"
|
|
22
22
|
};
|
|
23
23
|
return [
|
|
24
|
-
...
|
|
25
|
-
|
|
24
|
+
...S,
|
|
25
|
+
C[a.variant]
|
|
26
26
|
].join(" ");
|
|
27
|
-
}),
|
|
27
|
+
}), i = x(() => [
|
|
28
28
|
"text-sm font-medium mb-1",
|
|
29
29
|
{
|
|
30
30
|
success: "text-green-800",
|
|
@@ -32,7 +32,7 @@ const Ce = /* @__PURE__ */ X({
|
|
|
32
32
|
warning: "text-yellow-800",
|
|
33
33
|
info: "text-blue-800"
|
|
34
34
|
}[a.variant]
|
|
35
|
-
].join(" ")), u =
|
|
35
|
+
].join(" ")), u = x(() => [
|
|
36
36
|
"text-sm",
|
|
37
37
|
{
|
|
38
38
|
success: "text-green-700",
|
|
@@ -40,7 +40,7 @@ const Ce = /* @__PURE__ */ X({
|
|
|
40
40
|
warning: "text-yellow-700",
|
|
41
41
|
info: "text-blue-700"
|
|
42
42
|
}[a.variant]
|
|
43
|
-
].join(" ")), s =
|
|
43
|
+
].join(" ")), s = x(() => [
|
|
44
44
|
"inline-flex rounded-md p-1.5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
45
45
|
{
|
|
46
46
|
success: "text-green-400 hover:text-green-500",
|
|
@@ -48,66 +48,66 @@ const Ce = /* @__PURE__ */ X({
|
|
|
48
48
|
warning: "text-yellow-400 hover:text-yellow-500",
|
|
49
49
|
info: "text-blue-400 hover:text-blue-500"
|
|
50
50
|
}[a.variant]
|
|
51
|
-
].join(" ")), g =
|
|
51
|
+
].join(" ")), g = x(() => ({
|
|
52
52
|
success: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z",
|
|
53
53
|
error: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",
|
|
54
54
|
warning: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",
|
|
55
55
|
info: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z"
|
|
56
|
-
})[a.variant]),
|
|
57
|
-
return Object.defineProperty(
|
|
56
|
+
})[a.variant]), h = { props: a, alertClasses: e, titleClasses: i, messageClasses: u, dismissClasses: s, iconPath: g };
|
|
57
|
+
return Object.defineProperty(h, "__isScriptSetup", { enumerable: !1, value: !0 }), h;
|
|
58
58
|
}
|
|
59
|
-
}),
|
|
59
|
+
}), E = (o, t) => {
|
|
60
60
|
const a = o.__vccOpts || o;
|
|
61
|
-
for (const [e,
|
|
62
|
-
a[e] =
|
|
61
|
+
for (const [e, i] of t)
|
|
62
|
+
a[e] = i;
|
|
63
63
|
return a;
|
|
64
|
-
},
|
|
64
|
+
}, Ze = { class: "flex items-start" }, Ee = { class: "flex-shrink-0" }, Ye = {
|
|
65
65
|
class: "h-5 w-5",
|
|
66
66
|
fill: "currentColor",
|
|
67
67
|
viewBox: "0 0 20 20",
|
|
68
68
|
"aria-hidden": "true"
|
|
69
|
-
},
|
|
69
|
+
}, Oe = ["d"], Ke = { class: "ml-3 flex-1" }, Qe = {
|
|
70
70
|
key: 0,
|
|
71
71
|
class: "ml-auto pl-3"
|
|
72
72
|
};
|
|
73
|
-
function
|
|
74
|
-
return
|
|
73
|
+
function He(o, t, a, e, i, u) {
|
|
74
|
+
return l(), A(
|
|
75
75
|
"div",
|
|
76
76
|
{
|
|
77
|
-
class:
|
|
77
|
+
class: J(e.alertClasses),
|
|
78
78
|
role: "alert"
|
|
79
79
|
},
|
|
80
80
|
[
|
|
81
|
-
r("div",
|
|
82
|
-
r("div",
|
|
83
|
-
(
|
|
81
|
+
r("div", Ze, [
|
|
82
|
+
r("div", Ee, [
|
|
83
|
+
(l(), A("svg", Ye, [
|
|
84
84
|
r("path", {
|
|
85
85
|
"fill-rule": "evenodd",
|
|
86
86
|
d: e.iconPath,
|
|
87
87
|
"clip-rule": "evenodd"
|
|
88
|
-
}, null, 8,
|
|
88
|
+
}, null, 8, Oe)
|
|
89
89
|
]))
|
|
90
90
|
]),
|
|
91
|
-
r("div",
|
|
92
|
-
a.title ? (
|
|
91
|
+
r("div", Ke, [
|
|
92
|
+
a.title ? (l(), A(
|
|
93
93
|
"h3",
|
|
94
94
|
{
|
|
95
95
|
key: 0,
|
|
96
|
-
class:
|
|
96
|
+
class: J(e.titleClasses)
|
|
97
97
|
},
|
|
98
|
-
|
|
98
|
+
U(a.title),
|
|
99
99
|
3
|
|
100
100
|
/* TEXT, CLASS */
|
|
101
101
|
)) : n("v-if", !0),
|
|
102
102
|
r(
|
|
103
103
|
"div",
|
|
104
104
|
{
|
|
105
|
-
class:
|
|
105
|
+
class: J(e.messageClasses)
|
|
106
106
|
},
|
|
107
107
|
[
|
|
108
|
-
|
|
108
|
+
R(o.$slots, "default", {}, () => [
|
|
109
109
|
V(
|
|
110
|
-
|
|
110
|
+
U(a.message),
|
|
111
111
|
1
|
|
112
112
|
/* TEXT */
|
|
113
113
|
)
|
|
@@ -117,12 +117,12 @@ function Me(o, t, a, e, l, u) {
|
|
|
117
117
|
/* CLASS */
|
|
118
118
|
)
|
|
119
119
|
]),
|
|
120
|
-
a.dismissible ? (
|
|
120
|
+
a.dismissible ? (l(), A("div", Qe, [
|
|
121
121
|
r(
|
|
122
122
|
"button",
|
|
123
123
|
{
|
|
124
124
|
type: "button",
|
|
125
|
-
class:
|
|
125
|
+
class: J(e.dismissClasses),
|
|
126
126
|
onClick: t[0] || (t[0] = (s) => o.$emit("dismiss"))
|
|
127
127
|
},
|
|
128
128
|
t[1] || (t[1] = [
|
|
@@ -161,7 +161,7 @@ function Me(o, t, a, e, l, u) {
|
|
|
161
161
|
/* CLASS */
|
|
162
162
|
);
|
|
163
163
|
}
|
|
164
|
-
const
|
|
164
|
+
const he = /* @__PURE__ */ E(Te, [["render", He], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/ui/UiAlert.vue"]]), Re = /* @__PURE__ */ Z({
|
|
165
165
|
__name: "UiButton",
|
|
166
166
|
props: {
|
|
167
167
|
variant: { type: String, required: !1, default: "primary" },
|
|
@@ -175,7 +175,7 @@ const de = /* @__PURE__ */ D(Ce, [["render", Me], ["__file", "/home/runner/work/
|
|
|
175
175
|
emits: ["click"],
|
|
176
176
|
setup(o, { expose: t }) {
|
|
177
177
|
t();
|
|
178
|
-
const a = o, e =
|
|
178
|
+
const a = o, e = x(() => {
|
|
179
179
|
const u = [
|
|
180
180
|
"inline-flex items-center justify-center font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-strands-500 focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed"
|
|
181
181
|
], s = {
|
|
@@ -187,31 +187,31 @@ const de = /* @__PURE__ */ D(Ce, [["render", Me], ["__file", "/home/runner/work/
|
|
|
187
187
|
secondary: "bg-gray-200 text-gray-800 hover:bg-gray-300",
|
|
188
188
|
ghost: "text-strands-500 hover:text-strands-600 hover:bg-strands-50",
|
|
189
189
|
outline: "border border-strands-500 text-strands-500 hover:bg-strands-500 hover:text-white"
|
|
190
|
-
},
|
|
190
|
+
}, h = a.fullWidth ? "w-full" : "";
|
|
191
191
|
return [
|
|
192
192
|
...u,
|
|
193
193
|
s[a.size],
|
|
194
194
|
g[a.variant],
|
|
195
|
-
|
|
195
|
+
h
|
|
196
196
|
].filter(Boolean).join(" ");
|
|
197
|
-
}),
|
|
198
|
-
return Object.defineProperty(
|
|
197
|
+
}), i = { props: a, buttonClasses: e };
|
|
198
|
+
return Object.defineProperty(i, "__isScriptSetup", { enumerable: !1, value: !0 }), i;
|
|
199
199
|
}
|
|
200
|
-
}),
|
|
200
|
+
}), Ge = ["type", "disabled"], Je = {
|
|
201
201
|
key: 0,
|
|
202
202
|
class: "flex items-center justify-center gap-2"
|
|
203
|
-
},
|
|
203
|
+
}, _e = {
|
|
204
204
|
key: 1,
|
|
205
205
|
class: "flex items-center justify-center gap-2"
|
|
206
206
|
};
|
|
207
|
-
function
|
|
208
|
-
return
|
|
207
|
+
function $e(o, t, a, e, i, u) {
|
|
208
|
+
return l(), A("button", {
|
|
209
209
|
type: a.type,
|
|
210
210
|
disabled: a.disabled || a.loading,
|
|
211
|
-
class:
|
|
211
|
+
class: J(e.buttonClasses),
|
|
212
212
|
onClick: t[0] || (t[0] = (s) => o.$emit("click", s))
|
|
213
213
|
}, [
|
|
214
|
-
a.loading ? (
|
|
214
|
+
a.loading ? (l(), A("span", Je, [
|
|
215
215
|
t[1] || (t[1] = r(
|
|
216
216
|
"svg",
|
|
217
217
|
{
|
|
@@ -240,17 +240,17 @@ function Fe(o, t, a, e, l, u) {
|
|
|
240
240
|
r(
|
|
241
241
|
"span",
|
|
242
242
|
null,
|
|
243
|
-
|
|
243
|
+
U(a.loadingText || "Loading..."),
|
|
244
244
|
1
|
|
245
245
|
/* TEXT */
|
|
246
246
|
)
|
|
247
|
-
])) : (
|
|
248
|
-
|
|
249
|
-
|
|
247
|
+
])) : (l(), A("span", _e, [
|
|
248
|
+
R(o.$slots, "icon"),
|
|
249
|
+
R(o.$slots, "default")
|
|
250
250
|
]))
|
|
251
|
-
], 10,
|
|
251
|
+
], 10, Ge);
|
|
252
252
|
}
|
|
253
|
-
const
|
|
253
|
+
const le = /* @__PURE__ */ E(Re, [["render", $e], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/ui/UiButton.vue"]]), et = /* @__PURE__ */ Z({
|
|
254
254
|
__name: "UiCard",
|
|
255
255
|
props: {
|
|
256
256
|
variant: { type: String, required: !1, default: "default" },
|
|
@@ -259,7 +259,7 @@ const $ = /* @__PURE__ */ D(Pe, [["render", Fe], ["__file", "/home/runner/work/s
|
|
|
259
259
|
},
|
|
260
260
|
setup(o, { expose: t }) {
|
|
261
261
|
t();
|
|
262
|
-
const a = o, e =
|
|
262
|
+
const a = o, e = x(() => {
|
|
263
263
|
const u = ["bg-white border border-gray-200"], s = {
|
|
264
264
|
default: "rounded-lg",
|
|
265
265
|
modern: "rounded-2xl backdrop-blur-lg",
|
|
@@ -268,7 +268,7 @@ const $ = /* @__PURE__ */ D(Pe, [["render", Fe], ["__file", "/home/runner/work/s
|
|
|
268
268
|
sm: "p-4",
|
|
269
269
|
md: "p-6",
|
|
270
270
|
lg: "p-8"
|
|
271
|
-
},
|
|
271
|
+
}, h = {
|
|
272
272
|
none: "",
|
|
273
273
|
sm: "shadow-sm",
|
|
274
274
|
md: "shadow-md",
|
|
@@ -278,40 +278,40 @@ const $ = /* @__PURE__ */ D(Pe, [["render", Fe], ["__file", "/home/runner/work/s
|
|
|
278
278
|
...u,
|
|
279
279
|
s[a.variant],
|
|
280
280
|
g[a.padding],
|
|
281
|
-
|
|
281
|
+
h[a.shadow]
|
|
282
282
|
].filter(Boolean).join(" ");
|
|
283
|
-
}),
|
|
284
|
-
return Object.defineProperty(
|
|
283
|
+
}), i = { props: a, cardClasses: e };
|
|
284
|
+
return Object.defineProperty(i, "__isScriptSetup", { enumerable: !1, value: !0 }), i;
|
|
285
285
|
}
|
|
286
|
-
}),
|
|
286
|
+
}), tt = {
|
|
287
287
|
key: 0,
|
|
288
288
|
class: "border-b border-gray-200 pb-4 mb-6"
|
|
289
|
-
},
|
|
289
|
+
}, rt = { class: "space-y-6" }, st = {
|
|
290
290
|
key: 1,
|
|
291
291
|
class: "border-t border-gray-200 pt-4 mt-6"
|
|
292
292
|
};
|
|
293
|
-
function
|
|
294
|
-
return
|
|
293
|
+
function at(o, t, a, e, i, u) {
|
|
294
|
+
return l(), A(
|
|
295
295
|
"div",
|
|
296
296
|
{
|
|
297
|
-
class:
|
|
297
|
+
class: J(e.cardClasses)
|
|
298
298
|
},
|
|
299
299
|
[
|
|
300
|
-
o.$slots.header ? (
|
|
301
|
-
|
|
300
|
+
o.$slots.header ? (l(), A("div", tt, [
|
|
301
|
+
R(o.$slots, "header")
|
|
302
302
|
])) : n("v-if", !0),
|
|
303
|
-
r("div",
|
|
304
|
-
|
|
303
|
+
r("div", rt, [
|
|
304
|
+
R(o.$slots, "default")
|
|
305
305
|
]),
|
|
306
|
-
o.$slots.footer ? (
|
|
307
|
-
|
|
306
|
+
o.$slots.footer ? (l(), A("div", st, [
|
|
307
|
+
R(o.$slots, "footer")
|
|
308
308
|
])) : n("v-if", !0)
|
|
309
309
|
],
|
|
310
310
|
2
|
|
311
311
|
/* CLASS */
|
|
312
312
|
);
|
|
313
313
|
}
|
|
314
|
-
const
|
|
314
|
+
const ve = /* @__PURE__ */ E(et, [["render", at], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/ui/UiCard.vue"]]), nt = /* @__PURE__ */ Z({
|
|
315
315
|
__name: "UiInput",
|
|
316
316
|
props: {
|
|
317
317
|
modelValue: { type: [String, Number], required: !1 },
|
|
@@ -328,69 +328,69 @@ const oe = /* @__PURE__ */ D(Xe, [["render", Te], ["__file", "/home/runner/work/
|
|
|
328
328
|
emits: ["update:modelValue", "blur", "focus"],
|
|
329
329
|
setup(o, { expose: t, emit: a }) {
|
|
330
330
|
t();
|
|
331
|
-
const e = o,
|
|
331
|
+
const e = o, i = a, u = Ie(), s = q(!1), g = q(`input-${Math.random().toString(36).substr(2, 9)}`), h = x(() => e.type === "password" ? s.value ? "text" : "password" : e.type), S = x(() => {
|
|
332
332
|
const p = [
|
|
333
333
|
"block w-full border-gray-300 text-black rounded-lg shadow-sm focus-visible:ring-strands-500 focus-visible:border-strands-500 transition-colors duration-200 disabled:bg-gray-50 disabled:text-gray-500"
|
|
334
334
|
], f = {
|
|
335
335
|
sm: "px-3 py-2 text-sm",
|
|
336
336
|
md: "px-3 py-2.5 text-sm",
|
|
337
337
|
lg: "px-4 py-3 text-base"
|
|
338
|
-
}, W = e.error ? "border-red-300 focus-visible:ring-red-500 focus-visible:border-red-500" : "",
|
|
338
|
+
}, W = e.error ? "border-red-300 focus-visible:ring-red-500 focus-visible:border-red-500" : "", M = u.icon ? "pl-10" : "", N = e.type === "password" ? "pr-10" : "";
|
|
339
339
|
return [
|
|
340
340
|
...p,
|
|
341
341
|
f[e.size],
|
|
342
342
|
W,
|
|
343
|
-
|
|
344
|
-
|
|
343
|
+
M,
|
|
344
|
+
N
|
|
345
345
|
].filter(Boolean).join(" ");
|
|
346
|
-
}),
|
|
346
|
+
}), y = { props: e, emit: i, slots: u, showPassword: s, inputId: g, computedType: h, inputClasses: S, handleInput: (p) => {
|
|
347
347
|
const f = p.target;
|
|
348
|
-
|
|
348
|
+
i("update:modelValue", f.value);
|
|
349
349
|
}, togglePasswordVisibility: () => {
|
|
350
350
|
s.value = !s.value;
|
|
351
351
|
} };
|
|
352
|
-
return Object.defineProperty(
|
|
352
|
+
return Object.defineProperty(y, "__isScriptSetup", { enumerable: !1, value: !0 }), y;
|
|
353
353
|
}
|
|
354
|
-
}),
|
|
354
|
+
}), ot = { class: "space-y-1" }, it = ["for"], lt = {
|
|
355
355
|
key: 0,
|
|
356
356
|
class: "text-red-500"
|
|
357
|
-
},
|
|
357
|
+
}, At = { class: "relative" }, dt = ["id", "type", "value", "placeholder", "disabled", "required", "autocomplete"], ut = {
|
|
358
358
|
key: 0,
|
|
359
359
|
class: "h-5 w-5",
|
|
360
360
|
fill: "none",
|
|
361
361
|
stroke: "currentColor",
|
|
362
362
|
viewBox: "0 0 24 24"
|
|
363
|
-
},
|
|
363
|
+
}, ct = {
|
|
364
364
|
key: 1,
|
|
365
365
|
class: "h-5 w-5",
|
|
366
366
|
fill: "none",
|
|
367
367
|
stroke: "currentColor",
|
|
368
368
|
viewBox: "0 0 24 24"
|
|
369
|
-
},
|
|
369
|
+
}, mt = {
|
|
370
370
|
key: 1,
|
|
371
371
|
class: "absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"
|
|
372
|
-
},
|
|
372
|
+
}, ft = {
|
|
373
373
|
key: 1,
|
|
374
374
|
class: "text-sm text-red-600"
|
|
375
|
-
},
|
|
375
|
+
}, gt = {
|
|
376
376
|
key: 2,
|
|
377
377
|
class: "text-sm text-gray-500"
|
|
378
378
|
};
|
|
379
|
-
function
|
|
380
|
-
return
|
|
381
|
-
a.label ? (
|
|
379
|
+
function vt(o, t, a, e, i, u) {
|
|
380
|
+
return l(), A("div", ot, [
|
|
381
|
+
a.label ? (l(), A("label", {
|
|
382
382
|
key: 0,
|
|
383
383
|
for: e.inputId,
|
|
384
384
|
class: "block text-sm font-medium text-gray-700"
|
|
385
385
|
}, [
|
|
386
386
|
V(
|
|
387
|
-
|
|
387
|
+
U(a.label) + " ",
|
|
388
388
|
1
|
|
389
389
|
/* TEXT */
|
|
390
390
|
),
|
|
391
|
-
a.required ? (
|
|
392
|
-
], 8,
|
|
393
|
-
r("div",
|
|
391
|
+
a.required ? (l(), A("span", lt, "*")) : n("v-if", !0)
|
|
392
|
+
], 8, it)) : n("v-if", !0),
|
|
393
|
+
r("div", At, [
|
|
394
394
|
r("input", {
|
|
395
395
|
id: e.inputId,
|
|
396
396
|
type: e.computedType,
|
|
@@ -399,19 +399,19 @@ function et(o, t, a, e, l, u) {
|
|
|
399
399
|
disabled: a.disabled,
|
|
400
400
|
required: a.required,
|
|
401
401
|
autocomplete: a.autocomplete,
|
|
402
|
-
class:
|
|
402
|
+
class: J(e.inputClasses),
|
|
403
403
|
onInput: e.handleInput,
|
|
404
404
|
onBlur: t[0] || (t[0] = (s) => o.$emit("blur", s)),
|
|
405
405
|
onFocus: t[1] || (t[1] = (s) => o.$emit("focus", s))
|
|
406
|
-
}, null, 42,
|
|
406
|
+
}, null, 42, dt),
|
|
407
407
|
n(" Password visibility toggle "),
|
|
408
|
-
a.type === "password" ? (
|
|
408
|
+
a.type === "password" ? (l(), A("button", {
|
|
409
409
|
key: 0,
|
|
410
410
|
type: "button",
|
|
411
411
|
class: "absolute inset-y-0 right-0 pr-3 flex items-center text-gray-400 hover:text-gray-600 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-strands-500 focus-visible:ring-offset-2 rounded-md",
|
|
412
412
|
onClick: e.togglePasswordVisibility
|
|
413
413
|
}, [
|
|
414
|
-
e.showPassword ? (
|
|
414
|
+
e.showPassword ? (l(), A("svg", ut, t[2] || (t[2] = [
|
|
415
415
|
r(
|
|
416
416
|
"path",
|
|
417
417
|
{
|
|
@@ -424,7 +424,7 @@ function et(o, t, a, e, l, u) {
|
|
|
424
424
|
-1
|
|
425
425
|
/* CACHED */
|
|
426
426
|
)
|
|
427
|
-
]))) : (
|
|
427
|
+
]))) : (l(), A("svg", ct, t[3] || (t[3] = [
|
|
428
428
|
r(
|
|
429
429
|
"path",
|
|
430
430
|
{
|
|
@@ -452,27 +452,27 @@ function et(o, t, a, e, l, u) {
|
|
|
452
452
|
])))
|
|
453
453
|
])) : n("v-if", !0),
|
|
454
454
|
n(" Icon slot "),
|
|
455
|
-
o.$slots.icon ? (
|
|
456
|
-
|
|
455
|
+
o.$slots.icon ? (l(), A("div", mt, [
|
|
456
|
+
R(o.$slots, "icon", {}, void 0, !0)
|
|
457
457
|
])) : n("v-if", !0)
|
|
458
458
|
]),
|
|
459
459
|
n(" Help text or error message "),
|
|
460
|
-
a.error ? (
|
|
460
|
+
a.error ? (l(), A(
|
|
461
461
|
"p",
|
|
462
|
-
|
|
463
|
-
|
|
462
|
+
ft,
|
|
463
|
+
U(a.error),
|
|
464
464
|
1
|
|
465
465
|
/* TEXT */
|
|
466
|
-
)) : a.helpText ? (
|
|
466
|
+
)) : a.helpText ? (l(), A(
|
|
467
467
|
"p",
|
|
468
|
-
|
|
469
|
-
|
|
468
|
+
gt,
|
|
469
|
+
U(a.helpText),
|
|
470
470
|
1
|
|
471
471
|
/* TEXT */
|
|
472
472
|
)) : n("v-if", !0)
|
|
473
473
|
]);
|
|
474
474
|
}
|
|
475
|
-
const
|
|
475
|
+
const Ae = /* @__PURE__ */ E(nt, [["render", vt], ["__scopeId", "data-v-e87dc617"], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/ui/UiInput.vue"]]), pt = /* @__PURE__ */ Z({
|
|
476
476
|
__name: "UiLink",
|
|
477
477
|
props: {
|
|
478
478
|
href: { type: String, required: !1 },
|
|
@@ -485,43 +485,43 @@ const ee = /* @__PURE__ */ D(Ye, [["render", et], ["__scopeId", "data-v-e87dc617
|
|
|
485
485
|
emits: ["click"],
|
|
486
486
|
setup(o, { expose: t, emit: a }) {
|
|
487
487
|
t();
|
|
488
|
-
const e = o,
|
|
489
|
-
const
|
|
490
|
-
return e.to ?
|
|
491
|
-
}), g =
|
|
492
|
-
const
|
|
488
|
+
const e = o, i = a, u = x(() => e.to ? "router-link" : e.href ? "a" : "button"), s = x(() => {
|
|
489
|
+
const C = {};
|
|
490
|
+
return e.to ? C.to = e.to : e.href ? (C.href = e.href, e.external && (C.target = "_blank", C.rel = "noopener noreferrer")) : C.type = "button", e.disabled && (C.disabled = !0, C["aria-disabled"] = !0), C;
|
|
491
|
+
}), g = x(() => {
|
|
492
|
+
const C = [
|
|
493
493
|
"inline-flex items-center font-medium transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-strands-500 focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed"
|
|
494
494
|
], m = {
|
|
495
495
|
sm: "text-xs",
|
|
496
496
|
md: "text-sm",
|
|
497
497
|
lg: "text-base"
|
|
498
|
-
},
|
|
498
|
+
}, y = {
|
|
499
499
|
primary: "text-strands-500 hover:text-strands-600",
|
|
500
500
|
secondary: "text-gray-600 hover:text-gray-800",
|
|
501
501
|
ghost: "text-gray-500 hover:text-gray-700 hover:bg-gray-100 px-2 py-1 rounded",
|
|
502
502
|
underline: "text-strands-500 hover:text-strands-600 underline decoration-strands-500 underline-offset-2"
|
|
503
503
|
};
|
|
504
504
|
return [
|
|
505
|
-
...
|
|
505
|
+
...C,
|
|
506
506
|
m[e.size],
|
|
507
|
-
|
|
507
|
+
y[e.variant]
|
|
508
508
|
].filter(Boolean).join(" ");
|
|
509
|
-
}),
|
|
510
|
-
e.disabled ||
|
|
509
|
+
}), S = { props: e, emit: i, tag: u, linkProps: s, linkClasses: g, handleClick: (C) => {
|
|
510
|
+
e.disabled || i("click", C);
|
|
511
511
|
} };
|
|
512
|
-
return Object.defineProperty(
|
|
512
|
+
return Object.defineProperty(S, "__isScriptSetup", { enumerable: !1, value: !0 }), S;
|
|
513
513
|
}
|
|
514
514
|
});
|
|
515
|
-
function
|
|
516
|
-
return
|
|
517
|
-
default:
|
|
518
|
-
|
|
515
|
+
function wt(o, t, a, e, i, u) {
|
|
516
|
+
return l(), $(ke(e.tag), Xe({ class: e.linkClasses }, e.linkProps, { onClick: e.handleClick }), {
|
|
517
|
+
default: v(() => [
|
|
518
|
+
R(o.$slots, "default")
|
|
519
519
|
]),
|
|
520
520
|
_: 3
|
|
521
521
|
/* FORWARDED */
|
|
522
522
|
}, 16, ["class"]);
|
|
523
523
|
}
|
|
524
|
-
const
|
|
524
|
+
const de = /* @__PURE__ */ E(pt, [["render", wt], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/ui/UiLink.vue"]]), ht = /* @__PURE__ */ Z({
|
|
525
525
|
__name: "UiTabs",
|
|
526
526
|
props: {
|
|
527
527
|
modelValue: { type: String, required: !0 },
|
|
@@ -530,83 +530,83 @@ const te = /* @__PURE__ */ D(tt, [["render", rt], ["__file", "/home/runner/work/
|
|
|
530
530
|
emits: ["update:modelValue"],
|
|
531
531
|
setup(o, { expose: t, emit: a }) {
|
|
532
532
|
t();
|
|
533
|
-
const e = o,
|
|
533
|
+
const e = o, i = a, u = q([]), s = q({
|
|
534
534
|
width: "0px",
|
|
535
535
|
left: "0px",
|
|
536
536
|
opacity: "0"
|
|
537
537
|
});
|
|
538
|
-
let g = -1,
|
|
539
|
-
const
|
|
540
|
-
|
|
541
|
-
},
|
|
538
|
+
let g = -1, h = !1;
|
|
539
|
+
const S = async (f, W) => {
|
|
540
|
+
h || (i("update:modelValue", f), await Ce(), C(W));
|
|
541
|
+
}, C = async (f) => {
|
|
542
542
|
if (!u.value[f] || f === g) return;
|
|
543
|
-
|
|
544
|
-
const W = u.value[f],
|
|
545
|
-
if (!
|
|
546
|
-
const
|
|
543
|
+
h = !0;
|
|
544
|
+
const W = u.value[f], M = W.parentElement;
|
|
545
|
+
if (!M) return;
|
|
546
|
+
const N = W.getBoundingClientRect(), k = M.getBoundingClientRect(), b = N.left - k.left, c = N.width;
|
|
547
547
|
if (g === -1) {
|
|
548
548
|
s.value = {
|
|
549
549
|
width: `${c}px`,
|
|
550
|
-
left: `${
|
|
550
|
+
left: `${b}px`,
|
|
551
551
|
opacity: "1"
|
|
552
|
-
}, g = f,
|
|
552
|
+
}, g = f, h = !1;
|
|
553
553
|
return;
|
|
554
554
|
}
|
|
555
|
-
const
|
|
555
|
+
const H = u.value[g].getBoundingClientRect(), Y = H.left - k.left, P = H.width, z = f > g, I = z ? Y : b, D = z ? b + c - Y : Y + P - b;
|
|
556
556
|
s.value = {
|
|
557
|
-
width: `${
|
|
558
|
-
left: `${
|
|
557
|
+
width: `${D}px`,
|
|
558
|
+
left: `${I}px`,
|
|
559
559
|
opacity: "1"
|
|
560
560
|
}, setTimeout(() => {
|
|
561
561
|
s.value = {
|
|
562
562
|
width: `${c}px`,
|
|
563
|
-
left: `${
|
|
563
|
+
left: `${b}px`,
|
|
564
564
|
opacity: "1"
|
|
565
565
|
}, g = f, setTimeout(() => {
|
|
566
|
-
|
|
566
|
+
h = !1;
|
|
567
567
|
}, 150);
|
|
568
568
|
}, 120);
|
|
569
569
|
};
|
|
570
|
-
|
|
571
|
-
await
|
|
570
|
+
re(async () => {
|
|
571
|
+
await Ce();
|
|
572
572
|
const f = e.tabs.findIndex((W) => W.value === e.modelValue);
|
|
573
|
-
f !== -1 &&
|
|
573
|
+
f !== -1 && C(f);
|
|
574
574
|
});
|
|
575
|
-
const m =
|
|
575
|
+
const m = x(
|
|
576
576
|
() => e.tabs.findIndex((f) => f.value === e.modelValue)
|
|
577
|
-
), { modelValue:
|
|
578
|
-
|
|
579
|
-
await
|
|
577
|
+
), { modelValue: y } = De(e);
|
|
578
|
+
me(y, async () => {
|
|
579
|
+
await Ce();
|
|
580
580
|
const f = e.tabs.findIndex((W) => W.value === e.modelValue);
|
|
581
|
-
f !== -1 &&
|
|
581
|
+
f !== -1 && C(f);
|
|
582
582
|
});
|
|
583
|
-
const p = { props: e, emit:
|
|
583
|
+
const p = { props: e, emit: i, tabButtons: u, underlineStyle: s, get currentTabIndex() {
|
|
584
584
|
return g;
|
|
585
585
|
}, set currentTabIndex(f) {
|
|
586
586
|
g = f;
|
|
587
587
|
}, get isAnimating() {
|
|
588
|
-
return
|
|
588
|
+
return h;
|
|
589
589
|
}, set isAnimating(f) {
|
|
590
|
-
|
|
591
|
-
}, handleTabClick:
|
|
590
|
+
h = f;
|
|
591
|
+
}, handleTabClick: S, animateUnderlineStretch: C, activeTabIndex: m, modelValue: y };
|
|
592
592
|
return Object.defineProperty(p, "__isScriptSetup", { enumerable: !1, value: !0 }), p;
|
|
593
593
|
}
|
|
594
|
-
}),
|
|
594
|
+
}), yt = { class: "relative" }, bt = {
|
|
595
595
|
class: "relative flex border-b border-neutral-200",
|
|
596
596
|
role: "tablist"
|
|
597
|
-
},
|
|
598
|
-
function
|
|
599
|
-
return
|
|
597
|
+
}, St = ["aria-selected", "aria-controls", "id", "onClick"];
|
|
598
|
+
function Ct(o, t, a, e, i, u) {
|
|
599
|
+
return l(), A("div", yt, [
|
|
600
600
|
n(" Tab List "),
|
|
601
|
-
r("div",
|
|
602
|
-
(
|
|
603
|
-
|
|
601
|
+
r("div", bt, [
|
|
602
|
+
(l(!0), A(
|
|
603
|
+
_,
|
|
604
604
|
null,
|
|
605
|
-
|
|
605
|
+
be(a.tabs, (s, g) => (l(), A("button", {
|
|
606
606
|
key: s.value,
|
|
607
607
|
ref_for: !0,
|
|
608
608
|
ref: "tabButtons",
|
|
609
|
-
class:
|
|
609
|
+
class: J([
|
|
610
610
|
"relative flex-1 py-4 px-6 font-medium text-sm transition-colors duration-150",
|
|
611
611
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-strands-500 focus-visible:ring-offset-2 focus-visible:ring-offset-white",
|
|
612
612
|
"hover:text-strands-600",
|
|
@@ -616,8 +616,8 @@ function it(o, t, a, e, l, u) {
|
|
|
616
616
|
"aria-controls": `tabpanel-${s.value}`,
|
|
617
617
|
id: `tab-${s.value}`,
|
|
618
618
|
role: "tab",
|
|
619
|
-
onClick: (
|
|
620
|
-
},
|
|
619
|
+
onClick: (h) => e.handleTabClick(s.value, g)
|
|
620
|
+
}, U(s.label), 11, St))),
|
|
621
621
|
128
|
|
622
622
|
/* KEYED_FRAGMENT */
|
|
623
623
|
)),
|
|
@@ -626,7 +626,7 @@ function it(o, t, a, e, l, u) {
|
|
|
626
626
|
"div",
|
|
627
627
|
{
|
|
628
628
|
class: "absolute bottom-[-2px] h-[3px] bg-strands-500 rounded-full transition-all duration-150 ease-[cubic-bezier(0.25,0.46,0.45,0.94)]",
|
|
629
|
-
style:
|
|
629
|
+
style: je(e.underlineStyle)
|
|
630
630
|
},
|
|
631
631
|
null,
|
|
632
632
|
4
|
|
@@ -635,195 +635,78 @@ function it(o, t, a, e, l, u) {
|
|
|
635
635
|
])
|
|
636
636
|
]);
|
|
637
637
|
}
|
|
638
|
-
const
|
|
638
|
+
const Le = /* @__PURE__ */ E(ht, [["render", Ct], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/ui/UiTabs.vue"]]), qt = `<svg width="302" height="438" viewBox="0 0 302 438" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
639
|
+
<path d="M71.5001 96C71.5001 96 132 106 137 61.5C142 17 117.5 3.50005 94.5001 1.50003C71.5001 -0.499996 16.0001 8.5 2.00014 72.5C-6.5 130.5 71.5003 227.5 165 218C258.5 208.5 280.758 148.5 283.5 121C286.242 93.5 277.5 61.5 238.5 61.5C153 61.5 150.501 185 170.5 235C190.5 285 199 279 213 314C227.001 349 217.296 411.458 183 427C129.456 450.65 92 426 78.5 407.5C65 389 68.0003 357 94.5001 344.5C121 332 212.41 393.5 301.5 361" stroke="black"/>
|
|
640
|
+
</svg>
|
|
641
|
+
`, Vt = /* @__PURE__ */ Z({
|
|
639
642
|
__name: "UiLoader",
|
|
640
643
|
props: {
|
|
641
|
-
size: { type: Number, required: !1, default:
|
|
644
|
+
size: { type: Number, required: !1, default: 80 },
|
|
642
645
|
variant: { type: String, required: !1, default: "auto" },
|
|
643
646
|
text: { type: String, required: !1 },
|
|
644
|
-
|
|
645
|
-
|
|
647
|
+
centered: { type: Boolean, required: !1, default: !0 },
|
|
648
|
+
weight: { type: Number, required: !1, default: 30 }
|
|
646
649
|
},
|
|
647
650
|
setup(o, { expose: t }) {
|
|
648
651
|
t();
|
|
649
|
-
const a =
|
|
652
|
+
const a = qt.replace(/<svg[^>]*>/, "").replace(/<\/svg>/, "").trim(), e = a.match(/d="([^"]*)"/)?.[1] || "", i = o, u = x(() => [
|
|
650
653
|
"flex flex-col items-center gap-4",
|
|
651
|
-
|
|
652
|
-
].filter(Boolean).join(" ")), s =
|
|
653
|
-
"text-sm font-medium
|
|
654
|
-
|
|
655
|
-
].filter(Boolean).join(" ")), g =
|
|
656
|
-
"
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
654
|
+
i.centered ? "justify-center" : ""
|
|
655
|
+
].filter(Boolean).join(" ")), s = x(() => [
|
|
656
|
+
"text-sm font-medium",
|
|
657
|
+
i.variant === "light" ? "text-gray-600" : i.variant === "dark" ? "text-gray-300" : "text-gray-600 dark:text-gray-300"
|
|
658
|
+
].filter(Boolean).join(" ")), g = x(
|
|
659
|
+
() => i.variant === "light" ? "#EA00A810" : (i.variant === "dark", "#ffffff10")
|
|
660
|
+
), h = x(
|
|
661
|
+
() => i.variant === "light" ? "#EA00A8" : (i.variant === "dark", "#ffffff")
|
|
662
|
+
), S = { path: a, d: e, props: i, containerClasses: u, textClasses: s, semiColor: g, solidColor: h };
|
|
663
|
+
return Object.defineProperty(S, "__isScriptSetup", { enumerable: !1, value: !0 }), S;
|
|
660
664
|
}
|
|
661
|
-
}),
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
};
|
|
665
|
-
function ht(o, t, a, e, l, u) {
|
|
666
|
-
return i(), A(
|
|
665
|
+
}), xt = { class: "relative" }, Ut = ["width", "height"], Wt = ["d", "stroke", "stroke-width"], kt = ["d", "stroke", "stroke-width"];
|
|
666
|
+
function Nt(o, t, a, e, i, u) {
|
|
667
|
+
return l(), A(
|
|
667
668
|
"div",
|
|
668
669
|
{
|
|
669
|
-
class:
|
|
670
|
+
class: J(e.containerClasses)
|
|
670
671
|
},
|
|
671
672
|
[
|
|
672
|
-
r("div",
|
|
673
|
-
n("
|
|
674
|
-
(
|
|
673
|
+
r("div", xt, [
|
|
674
|
+
n(" Simple SVG with fun animated path "),
|
|
675
|
+
(l(), A("svg", {
|
|
675
676
|
width: a.size,
|
|
676
677
|
height: a.size,
|
|
677
|
-
viewBox: "0 0
|
|
678
|
-
class: "animate-spin-slow"
|
|
678
|
+
viewBox: "0 0 500 500"
|
|
679
679
|
}, [
|
|
680
|
-
n("
|
|
681
|
-
r("circle", {
|
|
682
|
-
cx: "50",
|
|
683
|
-
cy: "50",
|
|
684
|
-
r: "45",
|
|
685
|
-
fill: "none",
|
|
686
|
-
stroke: a.variant === "light" ? "rgba(234, 0, 168, 0.1)" : "rgba(255, 255, 255, 0.1)",
|
|
687
|
-
"stroke-width": "1",
|
|
688
|
-
class: "animate-pulse"
|
|
689
|
-
}, null, 8, ut),
|
|
690
|
-
n(' Main animated path - Strands "S" inspired curve '),
|
|
680
|
+
n(" Fun wavy path inspired by Strands "),
|
|
691
681
|
r("path", {
|
|
692
|
-
d:
|
|
693
|
-
Q 50 10, 75 20
|
|
694
|
-
Q 85 35, 75 50
|
|
695
|
-
Q 50 60, 25 50
|
|
696
|
-
Q 15 65, 25 80
|
|
697
|
-
Q 50 90, 75 80`,
|
|
682
|
+
d: e.d,
|
|
698
683
|
fill: "none",
|
|
699
|
-
stroke: e.
|
|
700
|
-
"stroke-width":
|
|
684
|
+
stroke: e.semiColor,
|
|
685
|
+
"stroke-width": a.weight,
|
|
701
686
|
"stroke-linecap": "round",
|
|
702
687
|
"stroke-linejoin": "round",
|
|
703
|
-
|
|
704
|
-
}, null, 8,
|
|
705
|
-
n(" Secondary path for extra visual interest "),
|
|
688
|
+
transform: "translate(81, 13) scale(1.0)"
|
|
689
|
+
}, null, 8, Wt),
|
|
706
690
|
r("path", {
|
|
707
|
-
d:
|
|
708
|
-
Q 50 15, 70 25
|
|
709
|
-
Q 75 40, 70 50
|
|
710
|
-
Q 50 55, 30 50
|
|
711
|
-
Q 25 60, 30 75
|
|
712
|
-
Q 50 85, 70 75`,
|
|
691
|
+
d: e.d,
|
|
713
692
|
fill: "none",
|
|
714
|
-
stroke:
|
|
715
|
-
"stroke-width":
|
|
693
|
+
stroke: e.solidColor,
|
|
694
|
+
"stroke-width": a.weight,
|
|
716
695
|
"stroke-linecap": "round",
|
|
717
696
|
"stroke-linejoin": "round",
|
|
718
|
-
class: "animate-draw-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
cx: "50",
|
|
723
|
-
cy: "50",
|
|
724
|
-
r: "3",
|
|
725
|
-
fill: a.variant === "light" ? "#EA00A8" : "#ffffff",
|
|
726
|
-
class: "animate-pulse-center"
|
|
727
|
-
}, null, 8, ft),
|
|
728
|
-
n(" Gradient definitions "),
|
|
729
|
-
r("defs", null, [
|
|
730
|
-
r("linearGradient", {
|
|
731
|
-
id: `gradient-${e.componentId}`,
|
|
732
|
-
x1: "0%",
|
|
733
|
-
y1: "0%",
|
|
734
|
-
x2: "100%",
|
|
735
|
-
y2: "100%"
|
|
736
|
-
}, [
|
|
737
|
-
r("stop", {
|
|
738
|
-
offset: "0%",
|
|
739
|
-
"stop-color": a.variant === "light" ? "#EA00A8" : "#ffffff",
|
|
740
|
-
"stop-opacity": "1"
|
|
741
|
-
}, t[0] || (t[0] = [
|
|
742
|
-
r(
|
|
743
|
-
"animate",
|
|
744
|
-
{
|
|
745
|
-
attributeName: "stop-opacity",
|
|
746
|
-
values: "1;0.5;1",
|
|
747
|
-
dur: "2s",
|
|
748
|
-
repeatCount: "indefinite"
|
|
749
|
-
},
|
|
750
|
-
null,
|
|
751
|
-
-1
|
|
752
|
-
/* CACHED */
|
|
753
|
-
)
|
|
754
|
-
]), 8, pt),
|
|
755
|
-
r("stop", {
|
|
756
|
-
offset: "50%",
|
|
757
|
-
"stop-color": a.variant === "light" ? "#FF6B9D" : "#ffffff",
|
|
758
|
-
"stop-opacity": "0.8"
|
|
759
|
-
}, t[1] || (t[1] = [
|
|
760
|
-
r(
|
|
761
|
-
"animate",
|
|
762
|
-
{
|
|
763
|
-
attributeName: "stop-opacity",
|
|
764
|
-
values: "0.8;0.3;0.8",
|
|
765
|
-
dur: "2s",
|
|
766
|
-
repeatCount: "indefinite"
|
|
767
|
-
},
|
|
768
|
-
null,
|
|
769
|
-
-1
|
|
770
|
-
/* CACHED */
|
|
771
|
-
)
|
|
772
|
-
]), 8, vt),
|
|
773
|
-
r("stop", {
|
|
774
|
-
offset: "100%",
|
|
775
|
-
"stop-color": a.variant === "light" ? "#FFB7D7" : "#ffffff",
|
|
776
|
-
"stop-opacity": "0.6"
|
|
777
|
-
}, t[2] || (t[2] = [
|
|
778
|
-
r(
|
|
779
|
-
"animate",
|
|
780
|
-
{
|
|
781
|
-
attributeName: "stop-opacity",
|
|
782
|
-
values: "0.6;0.2;0.6",
|
|
783
|
-
dur: "2s",
|
|
784
|
-
repeatCount: "indefinite"
|
|
785
|
-
},
|
|
786
|
-
null,
|
|
787
|
-
-1
|
|
788
|
-
/* CACHED */
|
|
789
|
-
)
|
|
790
|
-
]), 8, yt)
|
|
791
|
-
], 8, gt)
|
|
792
|
-
])
|
|
793
|
-
], 8, dt)),
|
|
794
|
-
n(" Floating particles for extra flair "),
|
|
795
|
-
a.showParticles ? (i(), A("div", bt, [
|
|
796
|
-
(i(), A(
|
|
797
|
-
O,
|
|
798
|
-
null,
|
|
799
|
-
Ae(3, (s) => r(
|
|
800
|
-
"div",
|
|
801
|
-
{
|
|
802
|
-
key: s,
|
|
803
|
-
class: Y(e.particleClasses),
|
|
804
|
-
style: ve({
|
|
805
|
-
animationDelay: `${s * 0.5}s`,
|
|
806
|
-
left: `${20 + s * 30}%`,
|
|
807
|
-
top: `${30 + s * 20}%`
|
|
808
|
-
})
|
|
809
|
-
},
|
|
810
|
-
null,
|
|
811
|
-
6
|
|
812
|
-
/* CLASS, STYLE */
|
|
813
|
-
)),
|
|
814
|
-
64
|
|
815
|
-
/* STABLE_FRAGMENT */
|
|
816
|
-
))
|
|
817
|
-
])) : n("v-if", !0)
|
|
697
|
+
class: "animate-draw-line",
|
|
698
|
+
transform: "translate(81, 13) scale(1.0)"
|
|
699
|
+
}, null, 8, kt)
|
|
700
|
+
], 8, Ut))
|
|
818
701
|
]),
|
|
819
702
|
n(" Optional text "),
|
|
820
|
-
a.text ? (
|
|
703
|
+
a.text ? (l(), A(
|
|
821
704
|
"p",
|
|
822
705
|
{
|
|
823
706
|
key: 0,
|
|
824
|
-
class:
|
|
707
|
+
class: J(e.textClasses)
|
|
825
708
|
},
|
|
826
|
-
|
|
709
|
+
U(a.text),
|
|
827
710
|
3
|
|
828
711
|
/* TEXT, CLASS */
|
|
829
712
|
)) : n("v-if", !0)
|
|
@@ -832,26 +715,26 @@ function ht(o, t, a, e, l, u) {
|
|
|
832
715
|
/* CLASS */
|
|
833
716
|
);
|
|
834
717
|
}
|
|
835
|
-
const
|
|
718
|
+
const Se = /* @__PURE__ */ E(Vt, [["render", Nt], ["__scopeId", "data-v-32cc7309"], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/ui/UiLoader.vue"]]), Lt = /* @__PURE__ */ Z({
|
|
836
719
|
__name: "StrandsSecuredFooter",
|
|
837
720
|
props: {
|
|
838
721
|
config: { type: Object, required: !1 }
|
|
839
722
|
},
|
|
840
723
|
setup(o, { expose: t }) {
|
|
841
724
|
t();
|
|
842
|
-
const a = o, { config: e } =
|
|
725
|
+
const a = o, { config: e } = se(a.config), i = x(() => e.value.baseUrl !== "https://accounts.strands.gg"), u = { props: a, config: e, shouldShowSecuredBy: i };
|
|
843
726
|
return Object.defineProperty(u, "__isScriptSetup", { enumerable: !1, value: !0 }), u;
|
|
844
727
|
}
|
|
845
|
-
}), St = "data:image/png;base64,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", qt = {
|
|
728
|
+
}), Mt = "data:image/png;base64,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", Pt = {
|
|
846
729
|
key: 0,
|
|
847
730
|
class: "flex items-center justify-center gap-2 mt-4 -mb-4 pt-4 border-t border-neutral-200"
|
|
848
731
|
};
|
|
849
|
-
function
|
|
850
|
-
return e.shouldShowSecuredBy ? (
|
|
732
|
+
function Ft(o, t, a, e, i, u) {
|
|
733
|
+
return e.shouldShowSecuredBy ? (l(), A("div", Pt, t[0] || (t[0] = [
|
|
851
734
|
r(
|
|
852
735
|
"img",
|
|
853
736
|
{
|
|
854
|
-
src:
|
|
737
|
+
src: Mt,
|
|
855
738
|
class: "h-12 w-auto"
|
|
856
739
|
},
|
|
857
740
|
null,
|
|
@@ -860,55 +743,55 @@ function Vt(o, t, a, e, l, u) {
|
|
|
860
743
|
)
|
|
861
744
|
]))) : n("v-if", !0);
|
|
862
745
|
}
|
|
863
|
-
const
|
|
864
|
-
function
|
|
865
|
-
const { getUrl: t } =
|
|
746
|
+
const pe = /* @__PURE__ */ E(Lt, [["render", Ft], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/StrandsSecuredFooter.vue"]]);
|
|
747
|
+
function qe(o = {}) {
|
|
748
|
+
const { getUrl: t } = se(), a = q([]), e = q(!1), i = q(null), u = x(
|
|
866
749
|
() => a.value.filter((m) => m.enabled)
|
|
867
750
|
), s = async () => {
|
|
868
|
-
e.value = !0,
|
|
751
|
+
e.value = !0, i.value = null;
|
|
869
752
|
try {
|
|
870
|
-
const m = t("oauthProviders"),
|
|
753
|
+
const m = t("oauthProviders"), y = await fetch(m, {
|
|
871
754
|
method: "GET",
|
|
872
755
|
headers: {
|
|
873
756
|
"Content-Type": "application/json"
|
|
874
757
|
}
|
|
875
758
|
});
|
|
876
|
-
if (!
|
|
877
|
-
const f = await
|
|
878
|
-
throw new Error(f.error?.message || `HTTP ${
|
|
759
|
+
if (!y.ok) {
|
|
760
|
+
const f = await y.json().catch(() => ({}));
|
|
761
|
+
throw new Error(f.error?.message || `HTTP ${y.status}: ${y.statusText}`);
|
|
879
762
|
}
|
|
880
|
-
const p = await
|
|
763
|
+
const p = await y.json();
|
|
881
764
|
a.value = p.providers || [];
|
|
882
765
|
} catch (m) {
|
|
883
|
-
const
|
|
884
|
-
|
|
766
|
+
const y = m instanceof Error ? m.message : "Failed to fetch OAuth providers";
|
|
767
|
+
i.value = y;
|
|
885
768
|
} finally {
|
|
886
769
|
e.value = !1;
|
|
887
770
|
}
|
|
888
|
-
}, g = async (m,
|
|
889
|
-
const p = { ...o, ...
|
|
771
|
+
}, g = async (m, y) => {
|
|
772
|
+
const p = { ...o, ...y }, f = new URLSearchParams();
|
|
890
773
|
p.redirectUrl && f.append("redirect_url", p.redirectUrl), p.scopes && p.scopes.length > 0 && f.append("scopes", p.scopes.join(","));
|
|
891
|
-
const W = f.toString(),
|
|
774
|
+
const W = f.toString(), M = t("oauthProvider").replace("{provider_id}", m), N = W ? `${M}?${W}` : M;
|
|
892
775
|
try {
|
|
893
|
-
const
|
|
776
|
+
const k = await fetch(N, {
|
|
894
777
|
method: "GET",
|
|
895
778
|
headers: {
|
|
896
779
|
"Content-Type": "application/json"
|
|
897
780
|
}
|
|
898
781
|
});
|
|
899
|
-
if (!
|
|
900
|
-
const c = await
|
|
901
|
-
throw new Error(c.error?.message || `HTTP ${
|
|
782
|
+
if (!k.ok) {
|
|
783
|
+
const c = await k.json().catch(() => ({}));
|
|
784
|
+
throw new Error(c.error?.message || `HTTP ${k.status}: ${k.statusText}`);
|
|
902
785
|
}
|
|
903
|
-
const
|
|
904
|
-
if (!
|
|
905
|
-
throw new Error(
|
|
906
|
-
return
|
|
907
|
-
} catch (
|
|
908
|
-
const
|
|
909
|
-
throw new Error(
|
|
786
|
+
const b = await k.json();
|
|
787
|
+
if (!b.success)
|
|
788
|
+
throw new Error(b.error?.message || "Failed to get OAuth auth URL");
|
|
789
|
+
return b.data.authUrl;
|
|
790
|
+
} catch (k) {
|
|
791
|
+
const b = k instanceof Error ? k.message : "Failed to get OAuth auth URL";
|
|
792
|
+
throw new Error(b);
|
|
910
793
|
}
|
|
911
|
-
},
|
|
794
|
+
}, h = async (m, y) => {
|
|
912
795
|
try {
|
|
913
796
|
const p = a.value.find((f) => f.id === m);
|
|
914
797
|
if (!p)
|
|
@@ -917,9 +800,9 @@ function fe(o = {}) {
|
|
|
917
800
|
throw new Error(`No auth URL configured for provider '${m}'`);
|
|
918
801
|
window.location.href = p.auth_url;
|
|
919
802
|
} catch (p) {
|
|
920
|
-
throw
|
|
803
|
+
throw i.value = p instanceof Error ? p.message : "Failed to redirect to OAuth provider", p;
|
|
921
804
|
}
|
|
922
|
-
},
|
|
805
|
+
}, S = (m) => a.value.find((y) => y.id === m), C = (m) => {
|
|
923
806
|
if (m.iconUrl)
|
|
924
807
|
return m.iconUrl;
|
|
925
808
|
switch (m.id.toLowerCase()) {
|
|
@@ -937,18 +820,18 @@ function fe(o = {}) {
|
|
|
937
820
|
}
|
|
938
821
|
};
|
|
939
822
|
return {
|
|
940
|
-
providers:
|
|
823
|
+
providers: x(() => a.value),
|
|
941
824
|
enabledProviders: u,
|
|
942
|
-
loading:
|
|
943
|
-
error:
|
|
825
|
+
loading: x(() => e.value),
|
|
826
|
+
error: x(() => i.value),
|
|
944
827
|
fetchProviders: s,
|
|
945
828
|
getProviderAuthUrl: g,
|
|
946
|
-
redirectToProvider:
|
|
947
|
-
getProviderById:
|
|
948
|
-
getProviderIcon:
|
|
829
|
+
redirectToProvider: h,
|
|
830
|
+
getProviderById: S,
|
|
831
|
+
getProviderIcon: C
|
|
949
832
|
};
|
|
950
833
|
}
|
|
951
|
-
const
|
|
834
|
+
const zt = /* @__PURE__ */ Z({
|
|
952
835
|
__name: "StrandsAuth",
|
|
953
836
|
props: {
|
|
954
837
|
mode: { type: String, required: !1, default: "signin" },
|
|
@@ -958,60 +841,60 @@ const Ct = /* @__PURE__ */ X({
|
|
|
958
841
|
emits: ["success", "error", "forgot-password", "password-reset-sent", "mode-changed"],
|
|
959
842
|
setup(o, { expose: t, emit: a }) {
|
|
960
843
|
t();
|
|
961
|
-
const e = o,
|
|
844
|
+
const e = o, i = a, { getUrl: u, getSupportEmail: s } = se(e.config);
|
|
962
845
|
console.log("support email:", s());
|
|
963
|
-
const { setAuthData: g } =
|
|
964
|
-
enabledProviders:
|
|
965
|
-
loading:
|
|
966
|
-
error:
|
|
846
|
+
const { setAuthData: g } = ge(), {
|
|
847
|
+
enabledProviders: h,
|
|
848
|
+
loading: S,
|
|
849
|
+
error: C,
|
|
967
850
|
fetchProviders: m,
|
|
968
|
-
redirectToProvider:
|
|
851
|
+
redirectToProvider: y,
|
|
969
852
|
getProviderIcon: p
|
|
970
|
-
} =
|
|
853
|
+
} = qe({
|
|
971
854
|
redirectUrl: e.redirectUrl
|
|
972
855
|
});
|
|
973
|
-
|
|
856
|
+
re(() => {
|
|
974
857
|
m().catch((L) => {
|
|
975
858
|
console.warn("Failed to fetch OAuth providers:", L);
|
|
976
859
|
});
|
|
977
860
|
});
|
|
978
|
-
const f =
|
|
979
|
-
async signIn(L,
|
|
980
|
-
const
|
|
861
|
+
const f = x(() => h.value), W = {
|
|
862
|
+
async signIn(L, j) {
|
|
863
|
+
const K = await fetch(u("signIn"), {
|
|
981
864
|
method: "POST",
|
|
982
865
|
headers: {
|
|
983
866
|
"Content-Type": "application/json"
|
|
984
867
|
},
|
|
985
|
-
body: JSON.stringify({ email: L, password:
|
|
868
|
+
body: JSON.stringify({ email: L, password: j })
|
|
986
869
|
});
|
|
987
|
-
if (!
|
|
988
|
-
throw
|
|
989
|
-
return await
|
|
870
|
+
if (!K.ok)
|
|
871
|
+
throw K.status === 401 ? new Error("Invalid email or password") : K.status === 403 ? new Error("Please verify your email address before signing in") : new Error(`Sign in failed: ${K.status} ${K.statusText}`);
|
|
872
|
+
return await K.json();
|
|
990
873
|
},
|
|
991
|
-
async signUp(L,
|
|
992
|
-
const
|
|
874
|
+
async signUp(L, j, K, we) {
|
|
875
|
+
const ae = await fetch(u("signUp"), {
|
|
993
876
|
method: "POST",
|
|
994
877
|
headers: {
|
|
995
878
|
"Content-Type": "application/json"
|
|
996
879
|
},
|
|
997
|
-
body: JSON.stringify({ email: L, password:
|
|
880
|
+
body: JSON.stringify({ email: L, password: j, firstName: K, lastName: we })
|
|
998
881
|
});
|
|
999
|
-
if (!
|
|
1000
|
-
const
|
|
1001
|
-
throw new Error(
|
|
882
|
+
if (!ae.ok) {
|
|
883
|
+
const ye = await ae.json().catch(() => ({}));
|
|
884
|
+
throw new Error(ye.error?.message || `HTTP ${ae.status}: ${ae.statusText}`);
|
|
1002
885
|
}
|
|
1003
|
-
return (await
|
|
886
|
+
return (await ae.json()).message;
|
|
1004
887
|
},
|
|
1005
888
|
async requestPasswordReset(L) {
|
|
1006
889
|
throw new Error("Password reset functionality is not yet implemented in the API. Please contact support.");
|
|
1007
890
|
}
|
|
1008
|
-
},
|
|
891
|
+
}, M = q(e.mode), N = q(!1), k = q(""), b = q(!1), c = te({
|
|
1009
892
|
firstName: "",
|
|
1010
893
|
lastName: "",
|
|
1011
894
|
email: "",
|
|
1012
895
|
password: "",
|
|
1013
896
|
confirmPassword: ""
|
|
1014
|
-
}),
|
|
897
|
+
}), F = x(() => M.value === "signup"), H = x(() => M.value === "reset-password"), Y = x(() => c.password === c.confirmPassword), P = x(() => H.value ? c.email.trim() && !b.value : F.value ? c.email.trim() : c.email.trim() && c.password), z = {
|
|
1015
898
|
weak: {
|
|
1016
899
|
label: "Weak",
|
|
1017
900
|
color: "border-red-300",
|
|
@@ -1033,108 +916,108 @@ const Ct = /* @__PURE__ */ X({
|
|
|
1033
916
|
textColor: "text-emerald-600",
|
|
1034
917
|
width: 100
|
|
1035
918
|
}
|
|
1036
|
-
},
|
|
1037
|
-
let
|
|
1038
|
-
L.length >= 8 && (
|
|
1039
|
-
const
|
|
1040
|
-
return { score:
|
|
1041
|
-
},
|
|
1042
|
-
|
|
919
|
+
}, I = (L) => {
|
|
920
|
+
let j = 0;
|
|
921
|
+
L.length >= 8 && (j += 1), L.length >= 12 && (j += 1), /[a-z]/.test(L) && (j += 1), /[A-Z]/.test(L) && (j += 1), /[0-9]/.test(L) && (j += 1), /[^A-Za-z0-9]/.test(L) && (j += 1);
|
|
922
|
+
const K = j <= 2 ? z.weak : j <= 4 ? z.medium : z.strong;
|
|
923
|
+
return { score: j, ...K };
|
|
924
|
+
}, D = async () => {
|
|
925
|
+
N.value = !0, k.value = "";
|
|
1043
926
|
try {
|
|
1044
|
-
if (
|
|
1045
|
-
await W.requestPasswordReset(c.email),
|
|
1046
|
-
else if (
|
|
927
|
+
if (H.value)
|
|
928
|
+
await W.requestPasswordReset(c.email), b.value = !0, i("password-reset-sent", c.email);
|
|
929
|
+
else if (F.value) {
|
|
1047
930
|
const L = await W.signUp(
|
|
1048
931
|
c.email,
|
|
1049
932
|
c.password,
|
|
1050
933
|
c.firstName,
|
|
1051
934
|
c.lastName
|
|
1052
935
|
);
|
|
1053
|
-
|
|
936
|
+
i("success", L.user);
|
|
1054
937
|
} else {
|
|
1055
938
|
const L = await W.signIn(c.email, c.password);
|
|
1056
|
-
g(L),
|
|
939
|
+
g(L), i("success", L.user);
|
|
1057
940
|
}
|
|
1058
941
|
} catch (L) {
|
|
1059
|
-
const
|
|
1060
|
-
|
|
942
|
+
const j = L instanceof Error ? L.message : "An unexpected error occurred";
|
|
943
|
+
k.value = j, i("error", j);
|
|
1061
944
|
} finally {
|
|
1062
|
-
|
|
945
|
+
N.value = !1;
|
|
1063
946
|
}
|
|
1064
|
-
},
|
|
947
|
+
}, X = async (L) => {
|
|
1065
948
|
try {
|
|
1066
|
-
await
|
|
949
|
+
await y(L, {
|
|
1067
950
|
redirectUrl: e.redirectUrl
|
|
1068
951
|
});
|
|
1069
|
-
} catch (
|
|
1070
|
-
const
|
|
1071
|
-
|
|
952
|
+
} catch (j) {
|
|
953
|
+
const K = j instanceof Error ? j.message : `Failed to ${F.value ? "sign up" : "sign in"} with ${L}`;
|
|
954
|
+
k.value = K, i("error", K);
|
|
1072
955
|
}
|
|
1073
956
|
};
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
}),
|
|
1077
|
-
|
|
957
|
+
me(() => e.mode, (L) => {
|
|
958
|
+
M.value = L;
|
|
959
|
+
}), me(M, (L) => {
|
|
960
|
+
k.value = "", b.value = !1, c.firstName = "", c.lastName = "", c.email = "", c.password = "", c.confirmPassword = "", i("mode-changed", L);
|
|
1078
961
|
});
|
|
1079
|
-
const
|
|
1080
|
-
return
|
|
962
|
+
const O = { props: e, emit: i, getUrl: u, getSupportEmail: s, setAuthData: g, enabledProviders: h, oauthLoading: S, oauthError: C, fetchProviders: m, redirectToProvider: y, getProviderIcon: p, displayProviders: f, authApi: W, currentMode: M, loading: N, error: k, isPasswordResetSubmitted: b, form: c, isSignUp: F, isPasswordReset: H, isPasswordMatch: Y, isFormValid: P, PASSWORD_STRENGTH_CONFIGS: z, getPasswordStrength: I, handleAuth: D, handleOAuthAuth: X, get StrandsUiCard() {
|
|
963
|
+
return ve;
|
|
1081
964
|
}, get StrandsUiButton() {
|
|
1082
|
-
return
|
|
965
|
+
return le;
|
|
1083
966
|
}, get StrandsUiInput() {
|
|
1084
|
-
return
|
|
967
|
+
return Ae;
|
|
1085
968
|
}, get StrandsUiAlert() {
|
|
1086
|
-
return
|
|
969
|
+
return he;
|
|
1087
970
|
}, get StrandsUiLink() {
|
|
1088
|
-
return
|
|
971
|
+
return de;
|
|
1089
972
|
}, get StrandsUiTabs() {
|
|
1090
|
-
return
|
|
1091
|
-
}, StrandsSecuredFooter:
|
|
1092
|
-
return Object.defineProperty(
|
|
973
|
+
return Le;
|
|
974
|
+
}, StrandsSecuredFooter: pe };
|
|
975
|
+
return Object.defineProperty(O, "__isScriptSetup", { enumerable: !1, value: !0 }), O;
|
|
1093
976
|
}
|
|
1094
|
-
}),
|
|
977
|
+
}), Bt = { class: "w-full min-w-100 max-w-md mx-auto animate-slide-up" }, It = { class: "text-center mb-8" }, Xt = {
|
|
1095
978
|
key: 0,
|
|
1096
979
|
class: "mb-8"
|
|
1097
|
-
},
|
|
980
|
+
}, Dt = {
|
|
1098
981
|
key: 0,
|
|
1099
982
|
class: "space-y-3 mb-6"
|
|
1100
|
-
},
|
|
983
|
+
}, jt = { class: "w-5 h-5 flex items-center justify-center" }, Tt = {
|
|
1101
984
|
key: 0,
|
|
1102
985
|
class: "w-5 h-5"
|
|
1103
|
-
},
|
|
986
|
+
}, Zt = ["src", "alt"], Et = {
|
|
1104
987
|
key: 2,
|
|
1105
988
|
class: "w-5 h-5 fill-current",
|
|
1106
989
|
viewBox: "0 0 24 24"
|
|
1107
|
-
},
|
|
990
|
+
}, Yt = { class: "w-5 h-5 rounded-full bg-neutral-300 flex items-center justify-center" }, Ot = { class: "text-xs font-semibold text-neutral-600" }, Kt = { class: "font-medium" }, Qt = {
|
|
1108
991
|
key: 0,
|
|
1109
992
|
class: "divider-with-text"
|
|
1110
|
-
},
|
|
993
|
+
}, Ht = { class: "divider-text" }, Rt = {
|
|
1111
994
|
key: 0,
|
|
1112
995
|
class: "mb-4"
|
|
1113
|
-
},
|
|
996
|
+
}, Gt = { class: "flex items-center justify-between mb-2" }, Jt = {
|
|
1114
997
|
key: 0,
|
|
1115
998
|
class: "mt-8 text-center"
|
|
1116
|
-
},
|
|
999
|
+
}, _t = {
|
|
1117
1000
|
key: 0,
|
|
1118
1001
|
class: "mt-6 text-center"
|
|
1119
|
-
},
|
|
1120
|
-
function
|
|
1121
|
-
return
|
|
1002
|
+
}, $t = { class: "text-neutral-400 text-sm" };
|
|
1003
|
+
function er(o, t, a, e, i, u) {
|
|
1004
|
+
return l(), A("div", Bt, [
|
|
1122
1005
|
d(e.StrandsUiCard, { variant: "modern" }, {
|
|
1123
|
-
default:
|
|
1006
|
+
default: v(() => [
|
|
1124
1007
|
n(" Header "),
|
|
1125
|
-
r("div",
|
|
1126
|
-
d(
|
|
1008
|
+
r("div", It, [
|
|
1009
|
+
d(ee, {
|
|
1127
1010
|
name: "fade",
|
|
1128
1011
|
mode: "out-in"
|
|
1129
1012
|
}, {
|
|
1130
|
-
default:
|
|
1131
|
-
(
|
|
1013
|
+
default: v(() => [
|
|
1014
|
+
(l(), A(
|
|
1132
1015
|
"h1",
|
|
1133
1016
|
{
|
|
1134
1017
|
key: e.currentMode,
|
|
1135
1018
|
class: "text-3xl font-bold text-gradient mb-2"
|
|
1136
1019
|
},
|
|
1137
|
-
|
|
1020
|
+
U(e.isPasswordReset ? "Reset password" : e.isSignUp ? "Create account" : "Welcome back"),
|
|
1138
1021
|
1
|
|
1139
1022
|
/* TEXT */
|
|
1140
1023
|
))
|
|
@@ -1142,18 +1025,18 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1142
1025
|
_: 1
|
|
1143
1026
|
/* STABLE */
|
|
1144
1027
|
}),
|
|
1145
|
-
d(
|
|
1028
|
+
d(ee, {
|
|
1146
1029
|
name: "fade",
|
|
1147
1030
|
mode: "out-in"
|
|
1148
1031
|
}, {
|
|
1149
|
-
default:
|
|
1150
|
-
(
|
|
1032
|
+
default: v(() => [
|
|
1033
|
+
(l(), A(
|
|
1151
1034
|
"p",
|
|
1152
1035
|
{
|
|
1153
1036
|
key: e.currentMode,
|
|
1154
1037
|
class: "text-neutral-600"
|
|
1155
1038
|
},
|
|
1156
|
-
|
|
1039
|
+
U(e.isPasswordReset ? "Enter your email address and we'll send you a link to reset your password" : e.isSignUp ? "We'll send you a magic link to get started" : "Sign in to your account to continue"),
|
|
1157
1040
|
1
|
|
1158
1041
|
/* TEXT */
|
|
1159
1042
|
))
|
|
@@ -1163,9 +1046,9 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1163
1046
|
})
|
|
1164
1047
|
]),
|
|
1165
1048
|
n(" Tab Switcher (only show for signin/signup) "),
|
|
1166
|
-
d(
|
|
1167
|
-
default:
|
|
1168
|
-
e.isPasswordReset ? n("v-if", !0) : (
|
|
1049
|
+
d(ee, { name: "height-fade" }, {
|
|
1050
|
+
default: v(() => [
|
|
1051
|
+
e.isPasswordReset ? n("v-if", !0) : (l(), A("div", Xt, [
|
|
1169
1052
|
d(e.StrandsUiTabs, {
|
|
1170
1053
|
modelValue: e.currentMode,
|
|
1171
1054
|
"onUpdate:modelValue": t[0] || (t[0] = (s) => e.currentMode = s),
|
|
@@ -1180,13 +1063,13 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1180
1063
|
/* STABLE */
|
|
1181
1064
|
}),
|
|
1182
1065
|
n(" OAuth Providers (not shown for password reset) "),
|
|
1183
|
-
d(
|
|
1184
|
-
default:
|
|
1185
|
-
!e.isPasswordReset && e.displayProviders?.length ? (
|
|
1186
|
-
(
|
|
1187
|
-
|
|
1066
|
+
d(ee, { name: "height-fade" }, {
|
|
1067
|
+
default: v(() => [
|
|
1068
|
+
!e.isPasswordReset && e.displayProviders?.length ? (l(), A("div", Dt, [
|
|
1069
|
+
(l(!0), A(
|
|
1070
|
+
_,
|
|
1188
1071
|
null,
|
|
1189
|
-
|
|
1072
|
+
be(e.displayProviders, (s) => (l(), $(e.StrandsUiButton, {
|
|
1190
1073
|
key: s.id,
|
|
1191
1074
|
variant: "outline",
|
|
1192
1075
|
"full-width": "",
|
|
@@ -1194,17 +1077,17 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1194
1077
|
onClick: (g) => e.handleOAuthAuth(s.id),
|
|
1195
1078
|
class: "btn-oauth group"
|
|
1196
1079
|
}, {
|
|
1197
|
-
default:
|
|
1198
|
-
r("div",
|
|
1080
|
+
default: v(() => [
|
|
1081
|
+
r("div", jt, [
|
|
1199
1082
|
n(" Dynamic provider icons "),
|
|
1200
|
-
s.icon || s.iconUrl ? (
|
|
1083
|
+
s.icon || s.iconUrl ? (l(), A("div", Tt, [
|
|
1201
1084
|
r("img", {
|
|
1202
1085
|
src: s.icon || s.iconUrl,
|
|
1203
1086
|
alt: `${s.displayName || s.name} icon`,
|
|
1204
1087
|
class: "w-5 h-5"
|
|
1205
|
-
}, null, 8,
|
|
1206
|
-
])) : s.id === "google" ? (
|
|
1207
|
-
|
|
1088
|
+
}, null, 8, Zt)
|
|
1089
|
+
])) : s.id === "google" ? (l(), A(
|
|
1090
|
+
_,
|
|
1208
1091
|
{ key: 1 },
|
|
1209
1092
|
[
|
|
1210
1093
|
n(" Built-in SVG icons for common providers "),
|
|
@@ -1238,7 +1121,7 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1238
1121
|
],
|
|
1239
1122
|
2112
|
|
1240
1123
|
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
|
|
1241
|
-
)) : s.id === "github" ? (
|
|
1124
|
+
)) : s.id === "github" ? (l(), A("svg", Et, [...t[7] || (t[7] = [
|
|
1242
1125
|
r(
|
|
1243
1126
|
"path",
|
|
1244
1127
|
{ d: "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" },
|
|
@@ -1246,16 +1129,16 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1246
1129
|
-1
|
|
1247
1130
|
/* CACHED */
|
|
1248
1131
|
)
|
|
1249
|
-
])])) : (
|
|
1250
|
-
|
|
1132
|
+
])])) : (l(), A(
|
|
1133
|
+
_,
|
|
1251
1134
|
{ key: 3 },
|
|
1252
1135
|
[
|
|
1253
1136
|
n(" Generic icon for other providers "),
|
|
1254
|
-
r("div",
|
|
1137
|
+
r("div", Yt, [
|
|
1255
1138
|
r(
|
|
1256
1139
|
"span",
|
|
1257
|
-
|
|
1258
|
-
|
|
1140
|
+
Ot,
|
|
1141
|
+
U((s.displayName || s.name).charAt(0).toUpperCase()),
|
|
1259
1142
|
1
|
|
1260
1143
|
/* TEXT */
|
|
1261
1144
|
)
|
|
@@ -1267,8 +1150,8 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1267
1150
|
]),
|
|
1268
1151
|
r(
|
|
1269
1152
|
"span",
|
|
1270
|
-
|
|
1271
|
-
" Continue with " +
|
|
1153
|
+
Kt,
|
|
1154
|
+
" Continue with " + U(s.displayName || s.name.charAt(0).toUpperCase() + s.name.slice(1)),
|
|
1272
1155
|
1
|
|
1273
1156
|
/* TEXT */
|
|
1274
1157
|
)
|
|
@@ -1285,13 +1168,13 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1285
1168
|
/* STABLE */
|
|
1286
1169
|
}),
|
|
1287
1170
|
n(" Divider (not shown for password reset) "),
|
|
1288
|
-
d(
|
|
1289
|
-
default:
|
|
1290
|
-
!e.isPasswordReset && e.displayProviders?.length ? (
|
|
1171
|
+
d(ee, { name: "height-fade" }, {
|
|
1172
|
+
default: v(() => [
|
|
1173
|
+
!e.isPasswordReset && e.displayProviders?.length ? (l(), A("div", Qt, [
|
|
1291
1174
|
r(
|
|
1292
1175
|
"span",
|
|
1293
|
-
|
|
1294
|
-
"Or " +
|
|
1176
|
+
Ht,
|
|
1177
|
+
"Or " + U(e.isSignUp ? "create account" : "sign in") + " with email",
|
|
1295
1178
|
1
|
|
1296
1179
|
/* TEXT */
|
|
1297
1180
|
)
|
|
@@ -1304,7 +1187,7 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1304
1187
|
r(
|
|
1305
1188
|
"form",
|
|
1306
1189
|
{
|
|
1307
|
-
onSubmit:
|
|
1190
|
+
onSubmit: fe(e.handleAuth, ["prevent"]),
|
|
1308
1191
|
class: "space-y-6"
|
|
1309
1192
|
},
|
|
1310
1193
|
[
|
|
@@ -1313,7 +1196,7 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1313
1196
|
r(
|
|
1314
1197
|
"div",
|
|
1315
1198
|
{
|
|
1316
|
-
class:
|
|
1199
|
+
class: J(["email-field-spacing", !e.isPasswordReset && !e.isSignUp ? "has-password" : "no-password"])
|
|
1317
1200
|
},
|
|
1318
1201
|
[
|
|
1319
1202
|
d(e.StrandsUiInput, {
|
|
@@ -1331,10 +1214,10 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1331
1214
|
/* CLASS */
|
|
1332
1215
|
),
|
|
1333
1216
|
n(" Password (Sign In Only) "),
|
|
1334
|
-
d(
|
|
1335
|
-
default:
|
|
1336
|
-
!e.isPasswordReset && !e.isSignUp ? (
|
|
1337
|
-
r("div",
|
|
1217
|
+
d(ee, { name: "password-fade" }, {
|
|
1218
|
+
default: v(() => [
|
|
1219
|
+
!e.isPasswordReset && !e.isSignUp ? (l(), A("div", Rt, [
|
|
1220
|
+
r("div", Gt, [
|
|
1338
1221
|
t[9] || (t[9] = r(
|
|
1339
1222
|
"span",
|
|
1340
1223
|
{ class: "text-sm font-medium text-gray-700" },
|
|
@@ -1347,7 +1230,7 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1347
1230
|
size: "sm",
|
|
1348
1231
|
onClick: t[2] || (t[2] = (s) => e.currentMode = "reset-password")
|
|
1349
1232
|
}, {
|
|
1350
|
-
default:
|
|
1233
|
+
default: v(() => t[8] || (t[8] = [
|
|
1351
1234
|
V(
|
|
1352
1235
|
" Forgot password? ",
|
|
1353
1236
|
-1
|
|
@@ -1381,9 +1264,9 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1381
1264
|
loading: e.loading,
|
|
1382
1265
|
"loading-text": e.isPasswordReset ? "Sending link..." : e.isSignUp ? "Sending magic link..." : "Signing in..."
|
|
1383
1266
|
}, {
|
|
1384
|
-
default:
|
|
1267
|
+
default: v(() => [
|
|
1385
1268
|
V(
|
|
1386
|
-
|
|
1269
|
+
U(e.isPasswordReset ? e.isPasswordResetSubmitted ? "Link sent!" : "Send reset link" : e.isSignUp ? "Send magic link" : "Sign in"),
|
|
1387
1270
|
1
|
|
1388
1271
|
/* TEXT */
|
|
1389
1272
|
)
|
|
@@ -1396,12 +1279,12 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1396
1279
|
/* NEED_HYDRATION */
|
|
1397
1280
|
),
|
|
1398
1281
|
n(" Success Message for Password Reset "),
|
|
1399
|
-
d(
|
|
1282
|
+
d(ee, {
|
|
1400
1283
|
name: "expand",
|
|
1401
1284
|
mode: "out-in"
|
|
1402
1285
|
}, {
|
|
1403
|
-
default:
|
|
1404
|
-
e.isPasswordReset && e.isPasswordResetSubmitted ? (
|
|
1286
|
+
default: v(() => [
|
|
1287
|
+
e.isPasswordReset && e.isPasswordResetSubmitted ? (l(), $(e.StrandsUiAlert, {
|
|
1405
1288
|
key: "reset-success",
|
|
1406
1289
|
variant: "success",
|
|
1407
1290
|
message: `Check your email - We've sent a password reset link to ${e.form.email}`,
|
|
@@ -1412,14 +1295,14 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1412
1295
|
/* STABLE */
|
|
1413
1296
|
}),
|
|
1414
1297
|
n(" Back to Sign In (Password Reset Only) "),
|
|
1415
|
-
d(
|
|
1416
|
-
default:
|
|
1417
|
-
e.isPasswordReset ? (
|
|
1298
|
+
d(ee, { name: "height-fade" }, {
|
|
1299
|
+
default: v(() => [
|
|
1300
|
+
e.isPasswordReset ? (l(), A("div", Jt, [
|
|
1418
1301
|
d(e.StrandsUiLink, {
|
|
1419
1302
|
onClick: t[4] || (t[4] = (s) => e.currentMode = "signin"),
|
|
1420
1303
|
class: "inline-flex items-center gap-2"
|
|
1421
1304
|
}, {
|
|
1422
|
-
default:
|
|
1305
|
+
default: v(() => t[10] || (t[10] = [
|
|
1423
1306
|
r(
|
|
1424
1307
|
"svg",
|
|
1425
1308
|
{
|
|
@@ -1454,7 +1337,7 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1454
1337
|
/* STABLE */
|
|
1455
1338
|
}),
|
|
1456
1339
|
n(" Error Alert "),
|
|
1457
|
-
e.error ? (
|
|
1340
|
+
e.error ? (l(), $(e.StrandsUiAlert, {
|
|
1458
1341
|
key: 0,
|
|
1459
1342
|
variant: "error",
|
|
1460
1343
|
message: e.error,
|
|
@@ -1463,10 +1346,10 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1463
1346
|
onDismiss: t[5] || (t[5] = (s) => e.error = "")
|
|
1464
1347
|
}, null, 8, ["message"])) : n("v-if", !0),
|
|
1465
1348
|
n(" Need help "),
|
|
1466
|
-
d(
|
|
1467
|
-
default:
|
|
1468
|
-
e.getSupportEmail() ? (
|
|
1469
|
-
r("p",
|
|
1349
|
+
d(ee, { name: "support-fade" }, {
|
|
1350
|
+
default: v(() => [
|
|
1351
|
+
e.getSupportEmail() ? (l(), A("div", _t, [
|
|
1352
|
+
r("p", $t, [
|
|
1470
1353
|
t[12] || (t[12] = V(
|
|
1471
1354
|
" Need help? ",
|
|
1472
1355
|
-1
|
|
@@ -1476,7 +1359,7 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1476
1359
|
variant: "primary",
|
|
1477
1360
|
href: `mailto:${e.getSupportEmail()}`
|
|
1478
1361
|
}, {
|
|
1479
|
-
default:
|
|
1362
|
+
default: v(() => t[11] || (t[11] = [
|
|
1480
1363
|
V(
|
|
1481
1364
|
" Contact Support ",
|
|
1482
1365
|
-1
|
|
@@ -1502,7 +1385,7 @@ function Ot(o, t, a, e, l, u) {
|
|
|
1502
1385
|
})
|
|
1503
1386
|
]);
|
|
1504
1387
|
}
|
|
1505
|
-
const
|
|
1388
|
+
const Ua = /* @__PURE__ */ E(zt, [["render", er], ["__scopeId", "data-v-4583e1b6"], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/StrandsAuth.vue"]]), tr = /* @__PURE__ */ Z({
|
|
1506
1389
|
__name: "StrandsSignIn",
|
|
1507
1390
|
props: {
|
|
1508
1391
|
redirectUrl: { type: String, required: !1, default: "/" },
|
|
@@ -1512,28 +1395,28 @@ const na = /* @__PURE__ */ D(Ct, [["render", Ot], ["__scopeId", "data-v-4583e1b6
|
|
|
1512
1395
|
emits: ["success", "error", "forgot-password", "switch-to-signup"],
|
|
1513
1396
|
setup(o, { expose: t, emit: a }) {
|
|
1514
1397
|
t();
|
|
1515
|
-
const e = o,
|
|
1516
|
-
enabledProviders:
|
|
1517
|
-
loading:
|
|
1518
|
-
error:
|
|
1398
|
+
const e = o, i = a, { getUrl: u, getSupportEmail: s } = se(e.config), { setAuthData: g } = ge(), {
|
|
1399
|
+
enabledProviders: h,
|
|
1400
|
+
loading: S,
|
|
1401
|
+
error: C,
|
|
1519
1402
|
fetchProviders: m,
|
|
1520
|
-
redirectToProvider:
|
|
1521
|
-
} =
|
|
1403
|
+
redirectToProvider: y
|
|
1404
|
+
} = qe({
|
|
1522
1405
|
redirectUrl: e.redirectUrl,
|
|
1523
1406
|
scopes: e.oauthScopes
|
|
1524
1407
|
});
|
|
1525
|
-
|
|
1526
|
-
m().catch((
|
|
1527
|
-
console.warn("Failed to fetch OAuth providers:",
|
|
1408
|
+
re(() => {
|
|
1409
|
+
m().catch((b) => {
|
|
1410
|
+
console.warn("Failed to fetch OAuth providers:", b);
|
|
1528
1411
|
});
|
|
1529
1412
|
});
|
|
1530
|
-
const p =
|
|
1413
|
+
const p = q(!1), f = q(""), W = te({
|
|
1531
1414
|
email: "",
|
|
1532
1415
|
password: ""
|
|
1533
|
-
}),
|
|
1416
|
+
}), k = { props: e, emit: i, getUrl: u, getSupportEmail: s, setAuthData: g, enabledProviders: h, oauthLoading: S, oauthError: C, fetchProviders: m, redirectToProvider: y, loading: p, error: f, form: W, handleSignIn: async () => {
|
|
1534
1417
|
p.value = !0, f.value = "";
|
|
1535
1418
|
try {
|
|
1536
|
-
const
|
|
1419
|
+
const b = await fetch(u("signIn"), {
|
|
1537
1420
|
method: "POST",
|
|
1538
1421
|
headers: {
|
|
1539
1422
|
"Content-Type": "application/json"
|
|
@@ -1543,63 +1426,63 @@ const na = /* @__PURE__ */ D(Ct, [["render", Ot], ["__scopeId", "data-v-4583e1b6
|
|
|
1543
1426
|
password: W.password
|
|
1544
1427
|
})
|
|
1545
1428
|
});
|
|
1546
|
-
if (!
|
|
1547
|
-
throw
|
|
1548
|
-
const c = await
|
|
1549
|
-
g(c),
|
|
1550
|
-
} catch (
|
|
1551
|
-
const c =
|
|
1552
|
-
f.value = c,
|
|
1429
|
+
if (!b.ok)
|
|
1430
|
+
throw b.status === 401 ? new Error("Invalid email or password") : b.status === 403 ? new Error("Please verify your email address before signing in") : new Error(`Sign in failed: ${b.status} ${b.statusText}`);
|
|
1431
|
+
const c = await b.json();
|
|
1432
|
+
g(c), i("success", c.user);
|
|
1433
|
+
} catch (b) {
|
|
1434
|
+
const c = b instanceof Error ? b.message : "Sign in failed";
|
|
1435
|
+
f.value = c, i("error", c);
|
|
1553
1436
|
} finally {
|
|
1554
1437
|
p.value = !1;
|
|
1555
1438
|
}
|
|
1556
|
-
}, handleOAuthSignIn: async (
|
|
1439
|
+
}, handleOAuthSignIn: async (b) => {
|
|
1557
1440
|
try {
|
|
1558
|
-
await
|
|
1441
|
+
await y(b, {
|
|
1559
1442
|
redirectUrl: e.redirectUrl,
|
|
1560
1443
|
scopes: e.oauthScopes
|
|
1561
1444
|
});
|
|
1562
1445
|
} catch (c) {
|
|
1563
|
-
const
|
|
1564
|
-
f.value =
|
|
1446
|
+
const F = c instanceof Error ? c.message : `Failed to sign in with ${b}`;
|
|
1447
|
+
f.value = F, i("error", F);
|
|
1565
1448
|
}
|
|
1566
1449
|
}, get StrandsUiCard() {
|
|
1567
|
-
return
|
|
1450
|
+
return ve;
|
|
1568
1451
|
}, get StrandsUiButton() {
|
|
1569
|
-
return
|
|
1452
|
+
return le;
|
|
1570
1453
|
}, get StrandsUiInput() {
|
|
1571
|
-
return
|
|
1454
|
+
return Ae;
|
|
1572
1455
|
}, get StrandsUiAlert() {
|
|
1573
|
-
return
|
|
1456
|
+
return he;
|
|
1574
1457
|
}, get StrandsUiLink() {
|
|
1575
|
-
return
|
|
1576
|
-
}, StrandsSecuredFooter:
|
|
1577
|
-
return Object.defineProperty(
|
|
1458
|
+
return de;
|
|
1459
|
+
}, StrandsSecuredFooter: pe };
|
|
1460
|
+
return Object.defineProperty(k, "__isScriptSetup", { enumerable: !1, value: !0 }), k;
|
|
1578
1461
|
}
|
|
1579
|
-
}),
|
|
1462
|
+
}), rr = { class: "w-full min-w-100 max-w-md mx-auto animate-slide-up" }, sr = {
|
|
1580
1463
|
key: 0,
|
|
1581
1464
|
class: "space-y-3 mb-6"
|
|
1582
|
-
},
|
|
1465
|
+
}, ar = { class: "w-5 h-5 flex items-center justify-center" }, nr = {
|
|
1583
1466
|
key: 0,
|
|
1584
1467
|
class: "w-5 h-5"
|
|
1585
|
-
},
|
|
1468
|
+
}, or = ["src", "alt"], ir = {
|
|
1586
1469
|
key: 2,
|
|
1587
1470
|
class: "w-5 h-5 fill-current",
|
|
1588
1471
|
viewBox: "0 0 24 24"
|
|
1589
|
-
},
|
|
1472
|
+
}, lr = {
|
|
1590
1473
|
key: 3,
|
|
1591
1474
|
class: "w-5 h-5 rounded-full bg-neutral-300 flex items-center justify-center"
|
|
1592
|
-
},
|
|
1475
|
+
}, Ar = { class: "text-xs font-semibold text-neutral-600" }, dr = { class: "font-medium" }, ur = {
|
|
1593
1476
|
key: 1,
|
|
1594
1477
|
class: "divider-with-text"
|
|
1595
|
-
},
|
|
1478
|
+
}, cr = { class: "space-y-4" }, mr = { class: "flex items-center justify-between mb-2" }, fr = { class: "mt-8 text-center" }, gr = { class: "text-sm text-neutral-600" }, vr = {
|
|
1596
1479
|
key: 3,
|
|
1597
1480
|
class: "mt-6 text-center"
|
|
1598
|
-
},
|
|
1599
|
-
function
|
|
1600
|
-
return
|
|
1481
|
+
}, pr = { class: "text-neutral-400 text-sm" };
|
|
1482
|
+
function wr(o, t, a, e, i, u) {
|
|
1483
|
+
return l(), A("div", rr, [
|
|
1601
1484
|
d(e.StrandsUiCard, { variant: "modern" }, {
|
|
1602
|
-
default:
|
|
1485
|
+
default: v(() => [
|
|
1603
1486
|
n(" Header "),
|
|
1604
1487
|
t[15] || (t[15] = r(
|
|
1605
1488
|
"div",
|
|
@@ -1612,11 +1495,11 @@ function lr(o, t, a, e, l, u) {
|
|
|
1612
1495
|
/* CACHED */
|
|
1613
1496
|
)),
|
|
1614
1497
|
n(" OAuth Providers "),
|
|
1615
|
-
e.enabledProviders?.length ? (
|
|
1616
|
-
(
|
|
1617
|
-
|
|
1498
|
+
e.enabledProviders?.length ? (l(), A("div", sr, [
|
|
1499
|
+
(l(!0), A(
|
|
1500
|
+
_,
|
|
1618
1501
|
null,
|
|
1619
|
-
|
|
1502
|
+
be(e.enabledProviders, (s) => (l(), $(e.StrandsUiButton, {
|
|
1620
1503
|
key: s.id,
|
|
1621
1504
|
variant: "outline",
|
|
1622
1505
|
"full-width": "",
|
|
@@ -1624,17 +1507,17 @@ function lr(o, t, a, e, l, u) {
|
|
|
1624
1507
|
onClick: (g) => e.handleOAuthSignIn(s.id),
|
|
1625
1508
|
class: "btn-oauth group"
|
|
1626
1509
|
}, {
|
|
1627
|
-
default:
|
|
1628
|
-
r("div",
|
|
1510
|
+
default: v(() => [
|
|
1511
|
+
r("div", ar, [
|
|
1629
1512
|
n(" Dynamic provider icons "),
|
|
1630
|
-
s.icon || s.iconUrl ? (
|
|
1513
|
+
s.icon || s.iconUrl ? (l(), A("div", nr, [
|
|
1631
1514
|
r("img", {
|
|
1632
1515
|
src: s.icon || s.iconUrl,
|
|
1633
1516
|
alt: `${s.displayName || s.name} icon`,
|
|
1634
1517
|
class: "w-5 h-5"
|
|
1635
|
-
}, null, 8,
|
|
1636
|
-
])) : s.id === "google" ? (
|
|
1637
|
-
|
|
1518
|
+
}, null, 8, or)
|
|
1519
|
+
])) : s.id === "google" ? (l(), A(
|
|
1520
|
+
_,
|
|
1638
1521
|
{ key: 1 },
|
|
1639
1522
|
[
|
|
1640
1523
|
n(" Built-in SVG icons for common providers "),
|
|
@@ -1668,7 +1551,7 @@ function lr(o, t, a, e, l, u) {
|
|
|
1668
1551
|
],
|
|
1669
1552
|
2112
|
|
1670
1553
|
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
|
|
1671
|
-
)) : s.id === "github" ? (
|
|
1554
|
+
)) : s.id === "github" ? (l(), A("svg", ir, [...t[6] || (t[6] = [
|
|
1672
1555
|
r(
|
|
1673
1556
|
"path",
|
|
1674
1557
|
{ d: "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" },
|
|
@@ -1676,11 +1559,11 @@ function lr(o, t, a, e, l, u) {
|
|
|
1676
1559
|
-1
|
|
1677
1560
|
/* CACHED */
|
|
1678
1561
|
)
|
|
1679
|
-
])])) : (
|
|
1562
|
+
])])) : (l(), A("div", lr, [
|
|
1680
1563
|
r(
|
|
1681
1564
|
"span",
|
|
1682
|
-
|
|
1683
|
-
|
|
1565
|
+
Ar,
|
|
1566
|
+
U((s.displayName || s.name).charAt(0).toUpperCase()),
|
|
1684
1567
|
1
|
|
1685
1568
|
/* TEXT */
|
|
1686
1569
|
)
|
|
@@ -1688,8 +1571,8 @@ function lr(o, t, a, e, l, u) {
|
|
|
1688
1571
|
]),
|
|
1689
1572
|
r(
|
|
1690
1573
|
"span",
|
|
1691
|
-
|
|
1692
|
-
"Continue with " +
|
|
1574
|
+
dr,
|
|
1575
|
+
"Continue with " + U(s.displayName || s.name),
|
|
1693
1576
|
1
|
|
1694
1577
|
/* TEXT */
|
|
1695
1578
|
)
|
|
@@ -1702,7 +1585,7 @@ function lr(o, t, a, e, l, u) {
|
|
|
1702
1585
|
))
|
|
1703
1586
|
])) : n("v-if", !0),
|
|
1704
1587
|
n(" Divider "),
|
|
1705
|
-
e.enabledProviders?.length ? (
|
|
1588
|
+
e.enabledProviders?.length ? (l(), A("div", ur, t[7] || (t[7] = [
|
|
1706
1589
|
r(
|
|
1707
1590
|
"span",
|
|
1708
1591
|
{ class: "divider-text" },
|
|
@@ -1715,11 +1598,11 @@ function lr(o, t, a, e, l, u) {
|
|
|
1715
1598
|
r(
|
|
1716
1599
|
"form",
|
|
1717
1600
|
{
|
|
1718
|
-
onSubmit:
|
|
1601
|
+
onSubmit: fe(e.handleSignIn, ["prevent"]),
|
|
1719
1602
|
class: "space-y-6"
|
|
1720
1603
|
},
|
|
1721
1604
|
[
|
|
1722
|
-
r("div",
|
|
1605
|
+
r("div", cr, [
|
|
1723
1606
|
d(e.StrandsUiInput, {
|
|
1724
1607
|
id: "email",
|
|
1725
1608
|
modelValue: e.form.email,
|
|
@@ -1732,7 +1615,7 @@ function lr(o, t, a, e, l, u) {
|
|
|
1732
1615
|
error: e.error ? "Invalid email or password" : void 0
|
|
1733
1616
|
}, null, 8, ["modelValue", "error"]),
|
|
1734
1617
|
r("div", null, [
|
|
1735
|
-
r("div",
|
|
1618
|
+
r("div", mr, [
|
|
1736
1619
|
t[9] || (t[9] = r(
|
|
1737
1620
|
"span",
|
|
1738
1621
|
{ class: "text-sm font-medium text-neutral-700" },
|
|
@@ -1744,7 +1627,7 @@ function lr(o, t, a, e, l, u) {
|
|
|
1744
1627
|
onClick: t[1] || (t[1] = (s) => o.$emit("forgot-password")),
|
|
1745
1628
|
class: "text-sm"
|
|
1746
1629
|
}, {
|
|
1747
|
-
default:
|
|
1630
|
+
default: v(() => t[8] || (t[8] = [
|
|
1748
1631
|
V(
|
|
1749
1632
|
" Forgot password? ",
|
|
1750
1633
|
-1
|
|
@@ -1775,7 +1658,7 @@ function lr(o, t, a, e, l, u) {
|
|
|
1775
1658
|
loading: e.loading,
|
|
1776
1659
|
"loading-text": "Signing in..."
|
|
1777
1660
|
}, {
|
|
1778
|
-
default:
|
|
1661
|
+
default: v(() => t[10] || (t[10] = [
|
|
1779
1662
|
V(
|
|
1780
1663
|
" Sign in ",
|
|
1781
1664
|
-1
|
|
@@ -1790,7 +1673,7 @@ function lr(o, t, a, e, l, u) {
|
|
|
1790
1673
|
/* NEED_HYDRATION */
|
|
1791
1674
|
),
|
|
1792
1675
|
n(" Error Alert "),
|
|
1793
|
-
e.error ? (
|
|
1676
|
+
e.error ? (l(), $(e.StrandsUiAlert, {
|
|
1794
1677
|
key: 2,
|
|
1795
1678
|
variant: "error",
|
|
1796
1679
|
message: e.error,
|
|
@@ -1799,8 +1682,8 @@ function lr(o, t, a, e, l, u) {
|
|
|
1799
1682
|
onDismiss: t[3] || (t[3] = (s) => e.error = "")
|
|
1800
1683
|
}, null, 8, ["message"])) : n("v-if", !0),
|
|
1801
1684
|
n(" Sign up link "),
|
|
1802
|
-
r("div",
|
|
1803
|
-
r("p",
|
|
1685
|
+
r("div", fr, [
|
|
1686
|
+
r("p", gr, [
|
|
1804
1687
|
t[12] || (t[12] = V(
|
|
1805
1688
|
" Don't have an account? ",
|
|
1806
1689
|
-1
|
|
@@ -1809,7 +1692,7 @@ function lr(o, t, a, e, l, u) {
|
|
|
1809
1692
|
d(e.StrandsUiLink, {
|
|
1810
1693
|
onClick: t[4] || (t[4] = (s) => o.$emit("switch-to-signup"))
|
|
1811
1694
|
}, {
|
|
1812
|
-
default:
|
|
1695
|
+
default: v(() => t[11] || (t[11] = [
|
|
1813
1696
|
V(
|
|
1814
1697
|
" Sign up ",
|
|
1815
1698
|
-1
|
|
@@ -1822,8 +1705,8 @@ function lr(o, t, a, e, l, u) {
|
|
|
1822
1705
|
])
|
|
1823
1706
|
]),
|
|
1824
1707
|
n(" Need help "),
|
|
1825
|
-
e.getSupportEmail() ? (
|
|
1826
|
-
r("p",
|
|
1708
|
+
e.getSupportEmail() ? (l(), A("div", vr, [
|
|
1709
|
+
r("p", pr, [
|
|
1827
1710
|
t[14] || (t[14] = V(
|
|
1828
1711
|
" Need help? ",
|
|
1829
1712
|
-1
|
|
@@ -1833,7 +1716,7 @@ function lr(o, t, a, e, l, u) {
|
|
|
1833
1716
|
variant: "primary",
|
|
1834
1717
|
href: `mailto:${e.getSupportEmail()}`
|
|
1835
1718
|
}, {
|
|
1836
|
-
default:
|
|
1719
|
+
default: v(() => t[13] || (t[13] = [
|
|
1837
1720
|
V(
|
|
1838
1721
|
" Contact Support ",
|
|
1839
1722
|
-1
|
|
@@ -1855,7 +1738,7 @@ function lr(o, t, a, e, l, u) {
|
|
|
1855
1738
|
})
|
|
1856
1739
|
]);
|
|
1857
1740
|
}
|
|
1858
|
-
const
|
|
1741
|
+
const Wa = /* @__PURE__ */ E(tr, [["render", wr], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/StrandsSignIn.vue"]]), hr = /* @__PURE__ */ Z({
|
|
1859
1742
|
__name: "StrandsSignUp",
|
|
1860
1743
|
props: {
|
|
1861
1744
|
redirectUrl: { type: String, required: !1, default: "/" },
|
|
@@ -1865,125 +1748,125 @@ const oa = /* @__PURE__ */ D(Et, [["render", lr], ["__file", "/home/runner/work/
|
|
|
1865
1748
|
emits: ["success", "error", "switch-to-signin"],
|
|
1866
1749
|
setup(o, { expose: t, emit: a }) {
|
|
1867
1750
|
t();
|
|
1868
|
-
const e = o,
|
|
1751
|
+
const e = o, i = a, { getUrl: u, getSupportEmail: s } = se(e.config), {
|
|
1869
1752
|
enabledProviders: g,
|
|
1870
|
-
loading:
|
|
1871
|
-
error:
|
|
1872
|
-
fetchProviders:
|
|
1753
|
+
loading: h,
|
|
1754
|
+
error: S,
|
|
1755
|
+
fetchProviders: C,
|
|
1873
1756
|
redirectToProvider: m
|
|
1874
|
-
} =
|
|
1757
|
+
} = qe({
|
|
1875
1758
|
redirectUrl: e.redirectUrl,
|
|
1876
1759
|
scopes: e.oauthScopes
|
|
1877
1760
|
});
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
console.warn("Failed to fetch OAuth providers:",
|
|
1761
|
+
re(() => {
|
|
1762
|
+
C().catch((P) => {
|
|
1763
|
+
console.warn("Failed to fetch OAuth providers:", P);
|
|
1881
1764
|
});
|
|
1882
1765
|
});
|
|
1883
|
-
const
|
|
1766
|
+
const y = q(!1), p = q(""), f = q(!1), W = q(""), M = q("Magic Link Sent!"), N = q(""), k = te({
|
|
1884
1767
|
email: ""
|
|
1885
|
-
}),
|
|
1886
|
-
|
|
1768
|
+
}), b = x(() => k.email.trim() && k.email.includes("@")), Y = { props: e, emit: i, getUrl: u, getSupportEmail: s, enabledProviders: g, oauthLoading: h, oauthError: S, fetchProviders: C, redirectToProvider: m, loading: y, error: p, signupSuccess: f, successMessage: W, successTitle: M, successEmail: N, form: k, isFormValid: b, handleSignUp: async () => {
|
|
1769
|
+
y.value = !0, p.value = "";
|
|
1887
1770
|
try {
|
|
1888
|
-
const
|
|
1889
|
-
console.log("Attempting sign up to URL:",
|
|
1890
|
-
const
|
|
1771
|
+
const P = u("signUp");
|
|
1772
|
+
console.log("Attempting sign up to URL:", P);
|
|
1773
|
+
const z = await fetch(P, {
|
|
1891
1774
|
method: "POST",
|
|
1892
1775
|
headers: {
|
|
1893
1776
|
"Content-Type": "application/json"
|
|
1894
1777
|
},
|
|
1895
1778
|
body: JSON.stringify({
|
|
1896
|
-
email:
|
|
1779
|
+
email: k.email
|
|
1897
1780
|
})
|
|
1898
1781
|
});
|
|
1899
|
-
if (process.env.NODE_ENV === "development" && console.log("Sign up response status:",
|
|
1900
|
-
let
|
|
1782
|
+
if (process.env.NODE_ENV === "development" && console.log("Sign up response status:", z.status), !z.ok) {
|
|
1783
|
+
let D = `Sign up failed (${z.status})`;
|
|
1901
1784
|
try {
|
|
1902
|
-
const
|
|
1903
|
-
|
|
1785
|
+
const X = await z.json();
|
|
1786
|
+
D = X.message || X.error || D;
|
|
1904
1787
|
} catch {
|
|
1905
|
-
|
|
1788
|
+
D = await z.text() || D;
|
|
1906
1789
|
}
|
|
1907
|
-
throw new Error(
|
|
1790
|
+
throw new Error(D);
|
|
1908
1791
|
}
|
|
1909
|
-
const
|
|
1910
|
-
console.log("Magic link sign up success:",
|
|
1911
|
-
email:
|
|
1912
|
-
message:
|
|
1792
|
+
const I = await z.json();
|
|
1793
|
+
console.log("Magic link sign up success:", I), f.value = !0, N.value = k.email, W.value = I.message || "Magic link sent! Check your email.", I.message && (I.message.includes("already have an account") || I.message.includes("Welcome back") ? M.value = "Welcome Back!" : I.message.includes("Magic link sent") || I.message.includes("Check your email") ? M.value = "Magic Link Sent!" : M.value = "Success!"), i("success", {
|
|
1794
|
+
email: k.email,
|
|
1795
|
+
message: I.message || "Magic link sent! Check your email."
|
|
1913
1796
|
});
|
|
1914
|
-
} catch (
|
|
1915
|
-
console.error("Sign up error:",
|
|
1916
|
-
let
|
|
1917
|
-
if (
|
|
1918
|
-
if (
|
|
1919
|
-
|
|
1920
|
-
else if (
|
|
1921
|
-
const
|
|
1922
|
-
|
|
1797
|
+
} catch (P) {
|
|
1798
|
+
console.error("Sign up error:", P);
|
|
1799
|
+
let z = "Unable to send magic link. Please try again.";
|
|
1800
|
+
if (P instanceof Error)
|
|
1801
|
+
if (P.message.includes("fetch"))
|
|
1802
|
+
z = "Unable to connect to authentication service. Please check your internet connection and try again.";
|
|
1803
|
+
else if (P.message.includes("CORS")) {
|
|
1804
|
+
const I = s();
|
|
1805
|
+
z = I ? `Authentication service configuration error. Please contact ${I}.` : "Authentication service configuration error.";
|
|
1923
1806
|
} else
|
|
1924
|
-
|
|
1925
|
-
p.value =
|
|
1807
|
+
z = P.message;
|
|
1808
|
+
p.value = z, i("error", z);
|
|
1926
1809
|
} finally {
|
|
1927
|
-
|
|
1810
|
+
y.value = !1;
|
|
1928
1811
|
}
|
|
1929
1812
|
}, resetToForm: () => {
|
|
1930
|
-
f.value = !1, W.value = "",
|
|
1931
|
-
}, handleOAuthSignUp: async (
|
|
1813
|
+
f.value = !1, W.value = "", M.value = "Magic Link Sent!", N.value = "", k.email = "", p.value = "";
|
|
1814
|
+
}, handleOAuthSignUp: async (P) => {
|
|
1932
1815
|
try {
|
|
1933
|
-
await m(
|
|
1816
|
+
await m(P, {
|
|
1934
1817
|
redirectUrl: e.redirectUrl,
|
|
1935
1818
|
scopes: e.oauthScopes
|
|
1936
1819
|
});
|
|
1937
|
-
} catch (
|
|
1938
|
-
const
|
|
1939
|
-
p.value =
|
|
1820
|
+
} catch (z) {
|
|
1821
|
+
const I = z instanceof Error ? z.message : `Failed to sign up with ${P}`;
|
|
1822
|
+
p.value = I, i("error", I);
|
|
1940
1823
|
}
|
|
1941
1824
|
}, get StrandsUiCard() {
|
|
1942
|
-
return
|
|
1825
|
+
return ve;
|
|
1943
1826
|
}, get StrandsUiButton() {
|
|
1944
|
-
return
|
|
1827
|
+
return le;
|
|
1945
1828
|
}, get StrandsUiInput() {
|
|
1946
|
-
return
|
|
1829
|
+
return Ae;
|
|
1947
1830
|
}, get StrandsUiLink() {
|
|
1948
|
-
return
|
|
1949
|
-
}, StrandsSecuredFooter:
|
|
1950
|
-
return Object.defineProperty(
|
|
1831
|
+
return de;
|
|
1832
|
+
}, StrandsSecuredFooter: pe };
|
|
1833
|
+
return Object.defineProperty(Y, "__isScriptSetup", { enumerable: !1, value: !0 }), Y;
|
|
1951
1834
|
}
|
|
1952
|
-
}),
|
|
1835
|
+
}), yr = { class: "w-full min-w-100 max-w-md mx-auto animate-slide-up" }, br = { class: "text-center" }, Sr = { class: "text-2xl font-bold text-gray-900 mb-2" }, Cr = { class: "text-gray-600 mb-4" }, qr = {
|
|
1953
1836
|
key: 0,
|
|
1954
1837
|
class: "text-sm text-gray-500 mb-4"
|
|
1955
|
-
},
|
|
1838
|
+
}, Vr = {
|
|
1956
1839
|
key: 0,
|
|
1957
1840
|
class: "space-y-3 mb-6"
|
|
1958
|
-
},
|
|
1841
|
+
}, xr = { class: "w-5 h-5 flex items-center justify-center" }, Ur = {
|
|
1959
1842
|
key: 0,
|
|
1960
1843
|
class: "w-5 h-5"
|
|
1961
|
-
},
|
|
1844
|
+
}, Wr = ["src", "alt"], kr = {
|
|
1962
1845
|
key: 2,
|
|
1963
1846
|
class: "w-5 h-5 fill-current",
|
|
1964
1847
|
viewBox: "0 0 24 24"
|
|
1965
|
-
},
|
|
1848
|
+
}, Nr = {
|
|
1966
1849
|
key: 3,
|
|
1967
1850
|
class: "w-5 h-5 rounded-full bg-neutral-300 flex items-center justify-center"
|
|
1968
|
-
},
|
|
1851
|
+
}, Lr = { class: "text-xs font-semibold text-neutral-600" }, Mr = { class: "font-medium" }, Pr = {
|
|
1969
1852
|
key: 1,
|
|
1970
1853
|
class: "divider-with-text"
|
|
1971
|
-
},
|
|
1854
|
+
}, Fr = {
|
|
1972
1855
|
key: 2,
|
|
1973
1856
|
class: "mt-6 animate-fade-in"
|
|
1974
|
-
},
|
|
1857
|
+
}, zr = { class: "alert-error" }, Br = { class: "flex items-start gap-3" }, Ir = { class: "font-medium" }, Xr = { class: "mt-8 text-center" }, Dr = { class: "text-sm text-neutral-600" }, jr = {
|
|
1975
1858
|
key: 3,
|
|
1976
1859
|
class: "mt-6 text-center"
|
|
1977
|
-
},
|
|
1978
|
-
function
|
|
1979
|
-
return
|
|
1860
|
+
}, Tr = { class: "text-neutral-400 text-sm" };
|
|
1861
|
+
function Zr(o, t, a, e, i, u) {
|
|
1862
|
+
return l(), A("div", yr, [
|
|
1980
1863
|
n(" Success State "),
|
|
1981
|
-
e.signupSuccess ? (
|
|
1864
|
+
e.signupSuccess ? (l(), $(e.StrandsUiCard, {
|
|
1982
1865
|
key: 0,
|
|
1983
1866
|
variant: "modern"
|
|
1984
1867
|
}, {
|
|
1985
|
-
default:
|
|
1986
|
-
r("div",
|
|
1868
|
+
default: v(() => [
|
|
1869
|
+
r("div", br, [
|
|
1987
1870
|
t[3] || (t[3] = r(
|
|
1988
1871
|
"div",
|
|
1989
1872
|
{ class: "text-green-500 text-6xl mb-4" },
|
|
@@ -1993,23 +1876,23 @@ function Mr(o, t, a, e, l, u) {
|
|
|
1993
1876
|
)),
|
|
1994
1877
|
r(
|
|
1995
1878
|
"h1",
|
|
1996
|
-
|
|
1997
|
-
|
|
1879
|
+
Sr,
|
|
1880
|
+
U(e.successTitle),
|
|
1998
1881
|
1
|
|
1999
1882
|
/* TEXT */
|
|
2000
1883
|
),
|
|
2001
1884
|
r(
|
|
2002
1885
|
"p",
|
|
2003
|
-
|
|
2004
|
-
|
|
1886
|
+
Cr,
|
|
1887
|
+
U(e.successMessage),
|
|
2005
1888
|
1
|
|
2006
1889
|
/* TEXT */
|
|
2007
1890
|
),
|
|
2008
|
-
e.successEmail ? (
|
|
1891
|
+
e.successEmail ? (l(), A("div", qr, [
|
|
2009
1892
|
r(
|
|
2010
1893
|
"strong",
|
|
2011
1894
|
null,
|
|
2012
|
-
|
|
1895
|
+
U(e.successEmail),
|
|
2013
1896
|
1
|
|
2014
1897
|
/* TEXT */
|
|
2015
1898
|
)
|
|
@@ -2026,7 +1909,7 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2026
1909
|
"full-width": "",
|
|
2027
1910
|
onClick: e.resetToForm
|
|
2028
1911
|
}, {
|
|
2029
|
-
default:
|
|
1912
|
+
default: v(() => t[2] || (t[2] = [
|
|
2030
1913
|
V(
|
|
2031
1914
|
" Send Another Link ",
|
|
2032
1915
|
-1
|
|
@@ -2040,13 +1923,13 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2040
1923
|
]),
|
|
2041
1924
|
_: 1
|
|
2042
1925
|
/* STABLE */
|
|
2043
|
-
})) : (
|
|
2044
|
-
|
|
1926
|
+
})) : (l(), A(
|
|
1927
|
+
_,
|
|
2045
1928
|
{ key: 1 },
|
|
2046
1929
|
[
|
|
2047
1930
|
n(" Signup Form "),
|
|
2048
1931
|
d(e.StrandsUiCard, { variant: "modern" }, {
|
|
2049
|
-
default:
|
|
1932
|
+
default: v(() => [
|
|
2050
1933
|
n(" Header "),
|
|
2051
1934
|
t[13] || (t[13] = r(
|
|
2052
1935
|
"div",
|
|
@@ -2059,11 +1942,11 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2059
1942
|
/* CACHED */
|
|
2060
1943
|
)),
|
|
2061
1944
|
n(" OAuth Providers "),
|
|
2062
|
-
e.enabledProviders?.length ? (
|
|
2063
|
-
(
|
|
2064
|
-
|
|
1945
|
+
e.enabledProviders?.length ? (l(), A("div", Vr, [
|
|
1946
|
+
(l(!0), A(
|
|
1947
|
+
_,
|
|
2065
1948
|
null,
|
|
2066
|
-
|
|
1949
|
+
be(e.enabledProviders, (s) => (l(), $(e.StrandsUiButton, {
|
|
2067
1950
|
key: s.id,
|
|
2068
1951
|
variant: "outline",
|
|
2069
1952
|
"full-width": "",
|
|
@@ -2071,17 +1954,17 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2071
1954
|
onClick: (g) => e.handleOAuthSignUp(s.id),
|
|
2072
1955
|
class: "btn-oauth group"
|
|
2073
1956
|
}, {
|
|
2074
|
-
default:
|
|
2075
|
-
r("div",
|
|
1957
|
+
default: v(() => [
|
|
1958
|
+
r("div", xr, [
|
|
2076
1959
|
n(" Dynamic provider icons "),
|
|
2077
|
-
s.icon || s.iconUrl ? (
|
|
1960
|
+
s.icon || s.iconUrl ? (l(), A("div", Ur, [
|
|
2078
1961
|
r("img", {
|
|
2079
1962
|
src: s.icon || s.iconUrl,
|
|
2080
1963
|
alt: `${s.displayName || s.name} icon`,
|
|
2081
1964
|
class: "w-5 h-5"
|
|
2082
|
-
}, null, 8,
|
|
2083
|
-
])) : s.id === "google" ? (
|
|
2084
|
-
|
|
1965
|
+
}, null, 8, Wr)
|
|
1966
|
+
])) : s.id === "google" ? (l(), A(
|
|
1967
|
+
_,
|
|
2085
1968
|
{ key: 1 },
|
|
2086
1969
|
[
|
|
2087
1970
|
n(" Built-in SVG icons for common providers "),
|
|
@@ -2115,7 +1998,7 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2115
1998
|
],
|
|
2116
1999
|
2112
|
|
2117
2000
|
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
|
|
2118
|
-
)) : s.id === "github" ? (
|
|
2001
|
+
)) : s.id === "github" ? (l(), A("svg", kr, [...t[6] || (t[6] = [
|
|
2119
2002
|
r(
|
|
2120
2003
|
"path",
|
|
2121
2004
|
{ d: "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" },
|
|
@@ -2123,11 +2006,11 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2123
2006
|
-1
|
|
2124
2007
|
/* CACHED */
|
|
2125
2008
|
)
|
|
2126
|
-
])])) : (
|
|
2009
|
+
])])) : (l(), A("div", Nr, [
|
|
2127
2010
|
r(
|
|
2128
2011
|
"span",
|
|
2129
|
-
|
|
2130
|
-
|
|
2012
|
+
Lr,
|
|
2013
|
+
U((s.displayName || s.name).charAt(0).toUpperCase()),
|
|
2131
2014
|
1
|
|
2132
2015
|
/* TEXT */
|
|
2133
2016
|
)
|
|
@@ -2135,8 +2018,8 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2135
2018
|
]),
|
|
2136
2019
|
r(
|
|
2137
2020
|
"span",
|
|
2138
|
-
|
|
2139
|
-
"Continue with " +
|
|
2021
|
+
Mr,
|
|
2022
|
+
"Continue with " + U(s.displayName || s.name),
|
|
2140
2023
|
1
|
|
2141
2024
|
/* TEXT */
|
|
2142
2025
|
)
|
|
@@ -2149,7 +2032,7 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2149
2032
|
))
|
|
2150
2033
|
])) : n("v-if", !0),
|
|
2151
2034
|
n(" Divider "),
|
|
2152
|
-
e.enabledProviders?.length ? (
|
|
2035
|
+
e.enabledProviders?.length ? (l(), A("div", Pr, t[7] || (t[7] = [
|
|
2153
2036
|
r(
|
|
2154
2037
|
"span",
|
|
2155
2038
|
{ class: "divider-text" },
|
|
@@ -2162,7 +2045,7 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2162
2045
|
r(
|
|
2163
2046
|
"form",
|
|
2164
2047
|
{
|
|
2165
|
-
onSubmit:
|
|
2048
|
+
onSubmit: fe(e.handleSignUp, ["prevent"]),
|
|
2166
2049
|
class: "space-y-6"
|
|
2167
2050
|
},
|
|
2168
2051
|
[
|
|
@@ -2188,7 +2071,7 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2188
2071
|
loading: e.loading,
|
|
2189
2072
|
"loading-text": "Sending magic link..."
|
|
2190
2073
|
}, {
|
|
2191
|
-
default:
|
|
2074
|
+
default: v(() => t[8] || (t[8] = [
|
|
2192
2075
|
V(
|
|
2193
2076
|
" Send magic link ",
|
|
2194
2077
|
-1
|
|
@@ -2203,9 +2086,9 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2203
2086
|
/* NEED_HYDRATION */
|
|
2204
2087
|
),
|
|
2205
2088
|
n(" Error Alert "),
|
|
2206
|
-
e.error ? (
|
|
2207
|
-
r("div",
|
|
2208
|
-
r("div",
|
|
2089
|
+
e.error ? (l(), A("div", Fr, [
|
|
2090
|
+
r("div", zr, [
|
|
2091
|
+
r("div", Br, [
|
|
2209
2092
|
t[9] || (t[9] = r(
|
|
2210
2093
|
"svg",
|
|
2211
2094
|
{
|
|
@@ -2225,8 +2108,8 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2225
2108
|
)),
|
|
2226
2109
|
r(
|
|
2227
2110
|
"p",
|
|
2228
|
-
|
|
2229
|
-
|
|
2111
|
+
Ir,
|
|
2112
|
+
U(e.error),
|
|
2230
2113
|
1
|
|
2231
2114
|
/* TEXT */
|
|
2232
2115
|
)
|
|
@@ -2234,8 +2117,8 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2234
2117
|
])
|
|
2235
2118
|
])) : n("v-if", !0),
|
|
2236
2119
|
n(" Sign in link "),
|
|
2237
|
-
r("div",
|
|
2238
|
-
r("p",
|
|
2120
|
+
r("div", Xr, [
|
|
2121
|
+
r("p", Dr, [
|
|
2239
2122
|
t[10] || (t[10] = V(
|
|
2240
2123
|
" Already have an account? ",
|
|
2241
2124
|
-1
|
|
@@ -2249,8 +2132,8 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2249
2132
|
])
|
|
2250
2133
|
]),
|
|
2251
2134
|
n(" Need help "),
|
|
2252
|
-
e.getSupportEmail() ? (
|
|
2253
|
-
r("p",
|
|
2135
|
+
e.getSupportEmail() ? (l(), A("div", jr, [
|
|
2136
|
+
r("p", Tr, [
|
|
2254
2137
|
t[12] || (t[12] = V(
|
|
2255
2138
|
" Need help? ",
|
|
2256
2139
|
-1
|
|
@@ -2260,7 +2143,7 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2260
2143
|
variant: "primary",
|
|
2261
2144
|
href: `mailto:${e.getSupportEmail()}`
|
|
2262
2145
|
}, {
|
|
2263
|
-
default:
|
|
2146
|
+
default: v(() => t[11] || (t[11] = [
|
|
2264
2147
|
V(
|
|
2265
2148
|
" Contact Support ",
|
|
2266
2149
|
-1
|
|
@@ -2286,7 +2169,7 @@ function Mr(o, t, a, e, l, u) {
|
|
|
2286
2169
|
))
|
|
2287
2170
|
]);
|
|
2288
2171
|
}
|
|
2289
|
-
const
|
|
2172
|
+
const ka = /* @__PURE__ */ E(hr, [["render", Zr], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/StrandsSignUp.vue"]]), Er = /* @__PURE__ */ Z({
|
|
2290
2173
|
__name: "StrandsCompleteSignUp",
|
|
2291
2174
|
props: {
|
|
2292
2175
|
token: { type: String, required: !1 },
|
|
@@ -2296,50 +2179,50 @@ const ia = /* @__PURE__ */ D(Ar, [["render", Mr], ["__file", "/home/runner/work/
|
|
|
2296
2179
|
emits: ["success", "error", "invalid-token", "request-new-link", "start-registration"],
|
|
2297
2180
|
setup(o, { expose: t, emit: a }) {
|
|
2298
2181
|
t();
|
|
2299
|
-
const e = o,
|
|
2182
|
+
const e = o, i = a, { getUrl: u, getSupportEmail: s } = se(e.config), { setAuthData: g } = ge(), h = q(!1), S = q(!1), C = q(!1), m = q(""), y = q(""), p = te({
|
|
2300
2183
|
username: "",
|
|
2301
2184
|
firstName: "",
|
|
2302
2185
|
lastName: "",
|
|
2303
2186
|
password: ""
|
|
2304
|
-
}), f =
|
|
2187
|
+
}), f = te({
|
|
2305
2188
|
username: "",
|
|
2306
2189
|
firstName: "",
|
|
2307
2190
|
lastName: "",
|
|
2308
2191
|
password: ""
|
|
2309
|
-
}), W =
|
|
2310
|
-
const c = p.username.trim() && p.password.trim(),
|
|
2311
|
-
return c &&
|
|
2192
|
+
}), W = x(() => {
|
|
2193
|
+
const c = p.username.trim() && p.password.trim(), F = p.password.length >= 8, H = !!e.token;
|
|
2194
|
+
return c && F && H;
|
|
2312
2195
|
});
|
|
2313
|
-
|
|
2196
|
+
me(
|
|
2314
2197
|
() => p.password,
|
|
2315
2198
|
(c) => {
|
|
2316
2199
|
c && c.length < 8 ? f.password = "Password must be at least 8 characters long" : f.password = "";
|
|
2317
2200
|
}
|
|
2318
|
-
),
|
|
2201
|
+
), me(
|
|
2319
2202
|
() => p.username,
|
|
2320
2203
|
(c) => {
|
|
2321
2204
|
c && c.length < 2 ? f.username = "Username must be at least 2 characters long" : f.username = "";
|
|
2322
2205
|
}
|
|
2323
2206
|
);
|
|
2324
|
-
const
|
|
2207
|
+
const M = x(() => ({
|
|
2325
2208
|
baseUrl: e.config?.baseUrl || "http://localhost:8000",
|
|
2326
2209
|
referrerUrl: e.redirectUrl || "http://localhost:3001"
|
|
2327
2210
|
}));
|
|
2328
|
-
|
|
2211
|
+
re(() => {
|
|
2329
2212
|
if (e.token)
|
|
2330
2213
|
try {
|
|
2331
2214
|
const c = e.token.split(".");
|
|
2332
2215
|
if (c.length === 3) {
|
|
2333
|
-
const
|
|
2334
|
-
|
|
2216
|
+
const F = JSON.parse(atob(c[1]));
|
|
2217
|
+
F.email && (y.value = F.email);
|
|
2335
2218
|
}
|
|
2336
2219
|
} catch (c) {
|
|
2337
2220
|
console.warn("Could not decode token for email display:", c);
|
|
2338
2221
|
}
|
|
2339
2222
|
});
|
|
2340
|
-
const
|
|
2341
|
-
|
|
2342
|
-
},
|
|
2223
|
+
const N = () => {
|
|
2224
|
+
M.value.referrerUrl && (console.log("Redirecting to referrer:", M.value.referrerUrl), window.location.href = M.value.referrerUrl);
|
|
2225
|
+
}, b = { props: e, emit: i, getUrl: u, getSupportEmail: s, setAuthData: g, registrationComplete: h, invalidToken: S, loading: C, error: m, email: y, form: p, fieldErrors: f, isFormValid: W, authConfig: M, redirectToReferrer: N, handleCompleteSignUp: async () => {
|
|
2343
2226
|
if (!e.token) {
|
|
2344
2227
|
m.value = "Registration token is required";
|
|
2345
2228
|
return;
|
|
@@ -2350,9 +2233,9 @@ const ia = /* @__PURE__ */ D(Ar, [["render", Mr], ["__file", "/home/runner/work/
|
|
|
2350
2233
|
m.value = "Please fill in all required fields correctly";
|
|
2351
2234
|
return;
|
|
2352
2235
|
}
|
|
2353
|
-
|
|
2236
|
+
C.value = !0;
|
|
2354
2237
|
try {
|
|
2355
|
-
const c = await fetch(`${
|
|
2238
|
+
const c = await fetch(`${M.value.baseUrl}/api/v1/auth/complete-registration`, {
|
|
2356
2239
|
method: "POST",
|
|
2357
2240
|
headers: {
|
|
2358
2241
|
"Content-Type": "application/json"
|
|
@@ -2366,51 +2249,51 @@ const ia = /* @__PURE__ */ D(Ar, [["render", Mr], ["__file", "/home/runner/work/
|
|
|
2366
2249
|
})
|
|
2367
2250
|
});
|
|
2368
2251
|
if (!c.ok) {
|
|
2369
|
-
const
|
|
2370
|
-
throw new Error(`Failed to complete registration: ${
|
|
2252
|
+
const H = await c.text();
|
|
2253
|
+
throw new Error(`Failed to complete registration: ${H}`);
|
|
2371
2254
|
}
|
|
2372
|
-
const
|
|
2373
|
-
console.log("Registration success:",
|
|
2374
|
-
|
|
2255
|
+
const F = await c.json();
|
|
2256
|
+
console.log("Registration success:", F), F.access_token && F.refresh_token && F.user ? (g(F), console.log("Auth tokens stored successfully for user:", F.user.email)) : console.warn("Registration response missing auth tokens or user data"), h.value = !0, i("success", F), setTimeout(() => {
|
|
2257
|
+
N();
|
|
2375
2258
|
}, 2e3);
|
|
2376
2259
|
} catch (c) {
|
|
2377
|
-
c instanceof Error ? c.message.includes("CONFLICT") || c.message.includes("409") ? m.value = "This account already exists. Please try signing in instead." : c.message.includes("BAD_REQUEST") || c.message.includes("400") ? (m.value = "Invalid or expired registration link. Please request a new one.",
|
|
2260
|
+
c instanceof Error ? c.message.includes("CONFLICT") || c.message.includes("409") ? m.value = "This account already exists. Please try signing in instead." : c.message.includes("BAD_REQUEST") || c.message.includes("400") ? (m.value = "Invalid or expired registration link. Please request a new one.", S.value = !0, i("invalid-token")) : m.value = c.message : m.value = "Failed to complete registration. Please try again.", i("error", m.value);
|
|
2378
2261
|
} finally {
|
|
2379
|
-
|
|
2262
|
+
C.value = !1;
|
|
2380
2263
|
}
|
|
2381
2264
|
}, get StrandsUiCard() {
|
|
2382
|
-
return
|
|
2265
|
+
return ve;
|
|
2383
2266
|
}, get StrandsUiButton() {
|
|
2384
|
-
return
|
|
2267
|
+
return le;
|
|
2385
2268
|
}, get StrandsUiInput() {
|
|
2386
|
-
return
|
|
2269
|
+
return Ae;
|
|
2387
2270
|
}, get StrandsUiAlert() {
|
|
2388
|
-
return
|
|
2271
|
+
return he;
|
|
2389
2272
|
}, get StrandsUiLink() {
|
|
2390
|
-
return
|
|
2391
|
-
}, StrandsSecuredFooter:
|
|
2392
|
-
return Object.defineProperty(
|
|
2273
|
+
return de;
|
|
2274
|
+
}, StrandsSecuredFooter: pe };
|
|
2275
|
+
return Object.defineProperty(b, "__isScriptSetup", { enumerable: !1, value: !0 }), b;
|
|
2393
2276
|
}
|
|
2394
|
-
}),
|
|
2277
|
+
}), Yr = {
|
|
2395
2278
|
key: 0,
|
|
2396
2279
|
class: "min-w-100 w-full max-w-md mx-auto animate-slide-up"
|
|
2397
|
-
},
|
|
2280
|
+
}, Or = { class: "text-center" }, Kr = { class: "min-w-100 w-full max-w-md mx-auto animate-slide-up" }, Qr = { class: "text-center" }, Hr = { class: "min-w-100 w-full max-w-md mx-auto animate-slide-up" }, Rr = { class: "text-center mb-8" }, Gr = {
|
|
2398
2281
|
key: 0,
|
|
2399
2282
|
class: "mt-2"
|
|
2400
|
-
},
|
|
2283
|
+
}, Jr = { class: "text-sm text-neutral-500" }, _r = { class: "font-medium text-neutral-700" }, $r = {
|
|
2401
2284
|
key: 1,
|
|
2402
2285
|
class: "mt-6 text-center"
|
|
2403
|
-
},
|
|
2404
|
-
function
|
|
2405
|
-
return
|
|
2406
|
-
|
|
2286
|
+
}, es = { class: "text-neutral-400 text-sm" }, ts = { class: "min-w-100 w-full max-w-md mx-auto animate-slide-up" }, rs = { class: "text-center" };
|
|
2287
|
+
function ss(o, t, a, e, i, u) {
|
|
2288
|
+
return l(), A(
|
|
2289
|
+
_,
|
|
2407
2290
|
null,
|
|
2408
2291
|
[
|
|
2409
2292
|
n(" Success State "),
|
|
2410
|
-
e.registrationComplete ? (
|
|
2293
|
+
e.registrationComplete ? (l(), A("div", Yr, [
|
|
2411
2294
|
d(e.StrandsUiCard, { variant: "modern" }, {
|
|
2412
|
-
default:
|
|
2413
|
-
r("div",
|
|
2295
|
+
default: v(() => [
|
|
2296
|
+
r("div", Or, [
|
|
2414
2297
|
t[8] || (t[8] = r(
|
|
2415
2298
|
"div",
|
|
2416
2299
|
{ class: "text-green-500 text-6xl mb-4" },
|
|
@@ -2444,7 +2327,7 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2444
2327
|
"full-width": "",
|
|
2445
2328
|
onClick: e.redirectToReferrer
|
|
2446
2329
|
}, {
|
|
2447
|
-
default:
|
|
2330
|
+
default: v(() => t[7] || (t[7] = [
|
|
2448
2331
|
V(
|
|
2449
2332
|
" Go to Dashboard ",
|
|
2450
2333
|
-1
|
|
@@ -2460,15 +2343,15 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2460
2343
|
_: 1
|
|
2461
2344
|
/* STABLE */
|
|
2462
2345
|
})
|
|
2463
|
-
])) : e.invalidToken ? (
|
|
2464
|
-
|
|
2346
|
+
])) : e.invalidToken ? (l(), A(
|
|
2347
|
+
_,
|
|
2465
2348
|
{ key: 1 },
|
|
2466
2349
|
[
|
|
2467
2350
|
n(" Invalid Token State "),
|
|
2468
|
-
r("div",
|
|
2351
|
+
r("div", Kr, [
|
|
2469
2352
|
d(e.StrandsUiCard, { variant: "modern" }, {
|
|
2470
|
-
default:
|
|
2471
|
-
r("div",
|
|
2353
|
+
default: v(() => [
|
|
2354
|
+
r("div", Qr, [
|
|
2472
2355
|
t[13] || (t[13] = r(
|
|
2473
2356
|
"div",
|
|
2474
2357
|
{ class: "text-red-500 text-6xl mb-4" },
|
|
@@ -2502,7 +2385,7 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2502
2385
|
"full-width": "",
|
|
2503
2386
|
onClick: t[0] || (t[0] = (s) => o.$emit("request-new-link"))
|
|
2504
2387
|
}, {
|
|
2505
|
-
default:
|
|
2388
|
+
default: v(() => t[12] || (t[12] = [
|
|
2506
2389
|
V(
|
|
2507
2390
|
" Request New Link ",
|
|
2508
2391
|
-1
|
|
@@ -2522,16 +2405,16 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2522
2405
|
],
|
|
2523
2406
|
2112
|
|
2524
2407
|
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
|
|
2525
|
-
)) : a.token ? (
|
|
2526
|
-
|
|
2408
|
+
)) : a.token ? (l(), A(
|
|
2409
|
+
_,
|
|
2527
2410
|
{ key: 2 },
|
|
2528
2411
|
[
|
|
2529
2412
|
n(" Registration Form "),
|
|
2530
|
-
r("div",
|
|
2413
|
+
r("div", Hr, [
|
|
2531
2414
|
d(e.StrandsUiCard, { variant: "modern" }, {
|
|
2532
|
-
default:
|
|
2415
|
+
default: v(() => [
|
|
2533
2416
|
n(" Header "),
|
|
2534
|
-
r("div",
|
|
2417
|
+
r("div", Rr, [
|
|
2535
2418
|
t[18] || (t[18] = r(
|
|
2536
2419
|
"h1",
|
|
2537
2420
|
{ class: "text-3xl font-bold text-gradient mb-2" },
|
|
@@ -2546,8 +2429,8 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2546
2429
|
-1
|
|
2547
2430
|
/* CACHED */
|
|
2548
2431
|
)),
|
|
2549
|
-
e.email ? (
|
|
2550
|
-
r("p",
|
|
2432
|
+
e.email ? (l(), A("div", Gr, [
|
|
2433
|
+
r("p", Jr, [
|
|
2551
2434
|
t[17] || (t[17] = V(
|
|
2552
2435
|
"Creating account for: ",
|
|
2553
2436
|
-1
|
|
@@ -2555,8 +2438,8 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2555
2438
|
)),
|
|
2556
2439
|
r(
|
|
2557
2440
|
"span",
|
|
2558
|
-
|
|
2559
|
-
|
|
2441
|
+
_r,
|
|
2442
|
+
U(e.email),
|
|
2560
2443
|
1
|
|
2561
2444
|
/* TEXT */
|
|
2562
2445
|
)
|
|
@@ -2567,7 +2450,7 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2567
2450
|
r(
|
|
2568
2451
|
"form",
|
|
2569
2452
|
{
|
|
2570
|
-
onSubmit:
|
|
2453
|
+
onSubmit: fe(e.handleCompleteSignUp, ["prevent"]),
|
|
2571
2454
|
class: "space-y-6"
|
|
2572
2455
|
},
|
|
2573
2456
|
[
|
|
@@ -2641,7 +2524,7 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2641
2524
|
loading: e.loading,
|
|
2642
2525
|
"loading-text": "Creating account..."
|
|
2643
2526
|
}, {
|
|
2644
|
-
default:
|
|
2527
|
+
default: v(() => t[21] || (t[21] = [
|
|
2645
2528
|
V(
|
|
2646
2529
|
" Complete Registration ",
|
|
2647
2530
|
-1
|
|
@@ -2656,7 +2539,7 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2656
2539
|
/* NEED_HYDRATION */
|
|
2657
2540
|
),
|
|
2658
2541
|
n(" Error Alert "),
|
|
2659
|
-
e.error ? (
|
|
2542
|
+
e.error ? (l(), $(e.StrandsUiAlert, {
|
|
2660
2543
|
key: 0,
|
|
2661
2544
|
variant: "error",
|
|
2662
2545
|
message: e.error,
|
|
@@ -2665,8 +2548,8 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2665
2548
|
onDismiss: t[5] || (t[5] = (s) => e.error = "")
|
|
2666
2549
|
}, null, 8, ["message"])) : n("v-if", !0),
|
|
2667
2550
|
n(" Need help "),
|
|
2668
|
-
e.getSupportEmail() ? (
|
|
2669
|
-
r("p",
|
|
2551
|
+
e.getSupportEmail() ? (l(), A("div", $r, [
|
|
2552
|
+
r("p", es, [
|
|
2670
2553
|
t[23] || (t[23] = V(
|
|
2671
2554
|
" Need help? ",
|
|
2672
2555
|
-1
|
|
@@ -2676,7 +2559,7 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2676
2559
|
variant: "primary",
|
|
2677
2560
|
href: `mailto:${e.getSupportEmail()}`
|
|
2678
2561
|
}, {
|
|
2679
|
-
default:
|
|
2562
|
+
default: v(() => t[22] || (t[22] = [
|
|
2680
2563
|
V(
|
|
2681
2564
|
" Contact Support ",
|
|
2682
2565
|
-1
|
|
@@ -2700,15 +2583,15 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2700
2583
|
],
|
|
2701
2584
|
2112
|
|
2702
2585
|
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
|
|
2703
|
-
)) : (
|
|
2704
|
-
|
|
2586
|
+
)) : (l(), A(
|
|
2587
|
+
_,
|
|
2705
2588
|
{ key: 3 },
|
|
2706
2589
|
[
|
|
2707
2590
|
n(" No Token State "),
|
|
2708
|
-
r("div",
|
|
2591
|
+
r("div", ts, [
|
|
2709
2592
|
d(e.StrandsUiCard, { variant: "modern" }, {
|
|
2710
|
-
default:
|
|
2711
|
-
r("div",
|
|
2593
|
+
default: v(() => [
|
|
2594
|
+
r("div", rs, [
|
|
2712
2595
|
t[25] || (t[25] = r(
|
|
2713
2596
|
"div",
|
|
2714
2597
|
{ class: "text-yellow-500 text-6xl mb-4" },
|
|
@@ -2742,7 +2625,7 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2742
2625
|
"full-width": "",
|
|
2743
2626
|
onClick: t[6] || (t[6] = (s) => o.$emit("start-registration"))
|
|
2744
2627
|
}, {
|
|
2745
|
-
default:
|
|
2628
|
+
default: v(() => t[24] || (t[24] = [
|
|
2746
2629
|
V(
|
|
2747
2630
|
" Start Registration ",
|
|
2748
2631
|
-1
|
|
@@ -2768,7 +2651,7 @@ function Kr(o, t, a, e, l, u) {
|
|
|
2768
2651
|
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
|
|
2769
2652
|
);
|
|
2770
2653
|
}
|
|
2771
|
-
const
|
|
2654
|
+
const Na = /* @__PURE__ */ E(Er, [["render", ss], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/StrandsCompleteSignUp.vue"]]), as = /* @__PURE__ */ Z({
|
|
2772
2655
|
__name: "StrandsUserProfile",
|
|
2773
2656
|
props: {
|
|
2774
2657
|
user: { type: Object, required: !1 },
|
|
@@ -2778,109 +2661,244 @@ const la = /* @__PURE__ */ D(Pr, [["render", Kr], ["__file", "/home/runner/work/
|
|
|
2778
2661
|
emits: ["profile-updated", "error", "manage-sessions", "mfa-toggle"],
|
|
2779
2662
|
setup(o, { expose: t, emit: a }) {
|
|
2780
2663
|
t();
|
|
2781
|
-
const e = o,
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2664
|
+
const e = o, i = a, { getSupportEmail: u, config: s, getUrl: g } = se(e.config), { fetchProfile: h, updateProfile: S, changeEmail: C, currentUser: m, currentSession: y, isAuthenticated: p, refreshToken: f } = ge(), W = q(null), M = q(!1), N = x(() => {
|
|
2665
|
+
const w = m.value || e.user || W.value;
|
|
2666
|
+
return console.log("Current user computed:", {
|
|
2667
|
+
hasAuthUser: !!m.value,
|
|
2668
|
+
hasPropUser: !!e.user,
|
|
2669
|
+
hasInternalUser: !!W.value,
|
|
2670
|
+
selectedUser: w,
|
|
2671
|
+
avatar: w?.avatar
|
|
2672
|
+
}), w;
|
|
2673
|
+
}), k = q(!1), b = q(!1), c = q(!1), F = q(!1), H = q(!1), Y = q(""), P = q(""), z = q([]), I = q(null), D = te({
|
|
2785
2674
|
firstName: "",
|
|
2786
2675
|
lastName: "",
|
|
2787
|
-
email: ""
|
|
2788
|
-
|
|
2789
|
-
|
|
2676
|
+
email: ""
|
|
2677
|
+
}), X = te({
|
|
2678
|
+
newEmail: "",
|
|
2679
|
+
password: "",
|
|
2680
|
+
errors: {
|
|
2681
|
+
newEmail: "",
|
|
2682
|
+
password: ""
|
|
2683
|
+
}
|
|
2684
|
+
}), O = te({
|
|
2790
2685
|
current: "",
|
|
2791
2686
|
new: "",
|
|
2792
2687
|
confirm: ""
|
|
2793
|
-
}),
|
|
2688
|
+
}), L = te({
|
|
2794
2689
|
firstName: "",
|
|
2795
2690
|
lastName: "",
|
|
2796
|
-
email: ""
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
if (!
|
|
2803
|
-
|
|
2691
|
+
email: ""
|
|
2692
|
+
}), j = x(() => {
|
|
2693
|
+
const w = N.value;
|
|
2694
|
+
return w ? D.firstName !== (w.firstName || "") || D.lastName !== (w.lastName || "") : !1;
|
|
2695
|
+
}), K = x(() => O.current && O.new && O.confirm && O.new === O.confirm && O.new.length >= 8), we = x(() => X.newEmail && X.password && X.newEmail !== N.value?.email && X.newEmail.includes("@")), ae = x(() => {
|
|
2696
|
+
const w = N.value;
|
|
2697
|
+
if (!w) return "Never";
|
|
2698
|
+
const B = w.passwordUpdatedAt || w.createdAt;
|
|
2699
|
+
if (!B) return "Never";
|
|
2700
|
+
const Q = new Date(B), oe = (/* @__PURE__ */ new Date()).getTime() - Q.getTime(), G = Math.floor(oe / (1e3 * 60 * 60 * 24));
|
|
2701
|
+
if (G === 0) return "Today";
|
|
2702
|
+
if (G === 1) return "Yesterday";
|
|
2703
|
+
if (G < 30) return `${G} days ago`;
|
|
2704
|
+
if (G < 365) {
|
|
2705
|
+
const ce = Math.floor(G / 30);
|
|
2706
|
+
return ce === 1 ? "1 month ago" : `${ce} months ago`;
|
|
2707
|
+
}
|
|
2708
|
+
const ie = Math.floor(G / 365);
|
|
2709
|
+
return ie === 1 ? "1 year ago" : `${ie} years ago`;
|
|
2710
|
+
}), Ve = (w, B) => !w && !B ? "U" : `${w?.[0] || ""}${B?.[0] || ""}`.toUpperCase(), ye = async () => {
|
|
2711
|
+
if (!(!e.autoFetch || e.user || !p.value)) {
|
|
2712
|
+
M.value = !0;
|
|
2804
2713
|
try {
|
|
2805
|
-
await
|
|
2806
|
-
} catch (
|
|
2807
|
-
const
|
|
2808
|
-
|
|
2714
|
+
await h();
|
|
2715
|
+
} catch (w) {
|
|
2716
|
+
const B = w instanceof Error ? w.message : "Failed to load profile";
|
|
2717
|
+
P.value = B, i("error", B);
|
|
2809
2718
|
} finally {
|
|
2810
|
-
|
|
2719
|
+
M.value = !1;
|
|
2811
2720
|
}
|
|
2812
2721
|
}
|
|
2813
2722
|
};
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
}, { immediate: !0 }),
|
|
2817
|
-
|
|
2723
|
+
me(() => N.value, (w) => {
|
|
2724
|
+
w && (D.firstName = w.firstName || "", D.lastName = w.lastName || "", D.email = w.email);
|
|
2725
|
+
}, { immediate: !0 }), re(() => {
|
|
2726
|
+
ye();
|
|
2818
2727
|
});
|
|
2819
|
-
const
|
|
2820
|
-
|
|
2821
|
-
|
|
2728
|
+
const ue = () => {
|
|
2729
|
+
Y.value = "", P.value = "", Object.keys(L).forEach((w) => {
|
|
2730
|
+
L[w] = "";
|
|
2822
2731
|
});
|
|
2823
|
-
},
|
|
2824
|
-
|
|
2732
|
+
}, Me = async () => {
|
|
2733
|
+
ue(), k.value = !0;
|
|
2825
2734
|
try {
|
|
2826
|
-
const
|
|
2827
|
-
firstName:
|
|
2828
|
-
lastName:
|
|
2829
|
-
email: h.email,
|
|
2830
|
-
phone: h.phone || void 0
|
|
2735
|
+
const w = await S({
|
|
2736
|
+
firstName: D.firstName,
|
|
2737
|
+
lastName: D.lastName
|
|
2831
2738
|
});
|
|
2832
|
-
|
|
2833
|
-
} catch (
|
|
2834
|
-
const
|
|
2835
|
-
|
|
2739
|
+
w && (Y.value = "Profile updated successfully", i("profile-updated", w));
|
|
2740
|
+
} catch (w) {
|
|
2741
|
+
const B = w instanceof Error ? w.message : "Failed to update profile";
|
|
2742
|
+
P.value = B, i("error", B);
|
|
2836
2743
|
} finally {
|
|
2837
|
-
|
|
2744
|
+
k.value = !1;
|
|
2838
2745
|
}
|
|
2839
|
-
},
|
|
2840
|
-
if (
|
|
2841
|
-
|
|
2746
|
+
}, Pe = async () => {
|
|
2747
|
+
if (K.value) {
|
|
2748
|
+
ue(), k.value = !0;
|
|
2842
2749
|
try {
|
|
2843
|
-
await new Promise((
|
|
2750
|
+
await new Promise((w) => setTimeout(w, 1e3)), Y.value = "Password updated successfully", c.value = !1, O.current = "", O.new = "", O.confirm = "";
|
|
2844
2751
|
} catch {
|
|
2845
|
-
|
|
2752
|
+
P.value = "Failed to update password";
|
|
2753
|
+
} finally {
|
|
2754
|
+
k.value = !1;
|
|
2755
|
+
}
|
|
2756
|
+
}
|
|
2757
|
+
}, Fe = async () => {
|
|
2758
|
+
if (we.value) {
|
|
2759
|
+
X.errors.newEmail = "", X.errors.password = "", ue(), H.value = !0;
|
|
2760
|
+
try {
|
|
2761
|
+
const w = await C(X.newEmail, X.password);
|
|
2762
|
+
Y.value = w.message || "Email updated successfully. Please verify your new email address.", F.value = !1, X.newEmail = "", X.password = "", N.value && i("profile-updated", N.value);
|
|
2763
|
+
} catch (w) {
|
|
2764
|
+
const B = w instanceof Error ? w.message : "Failed to update email";
|
|
2765
|
+
B.includes("password") ? X.errors.password = "Invalid password" : B.includes("email") ? X.errors.newEmail = B : P.value = B, i("error", B);
|
|
2846
2766
|
} finally {
|
|
2847
|
-
|
|
2767
|
+
H.value = !1;
|
|
2848
2768
|
}
|
|
2849
2769
|
}
|
|
2850
|
-
},
|
|
2851
|
-
|
|
2852
|
-
},
|
|
2853
|
-
|
|
2770
|
+
}, ze = () => {
|
|
2771
|
+
b.value || I.value?.click();
|
|
2772
|
+
}, Be = async (w) => {
|
|
2773
|
+
const Q = w.target.files?.[0];
|
|
2774
|
+
if (!Q) return;
|
|
2775
|
+
if (!Q.type.startsWith("image/")) {
|
|
2776
|
+
P.value = "Please select an image file";
|
|
2777
|
+
return;
|
|
2778
|
+
}
|
|
2779
|
+
const ne = 5 * 1024 * 1024;
|
|
2780
|
+
if (Q.size > ne) {
|
|
2781
|
+
P.value = "File size must be less than 5MB";
|
|
2782
|
+
return;
|
|
2783
|
+
}
|
|
2784
|
+
await xe(Q);
|
|
2785
|
+
}, xe = async (w) => {
|
|
2786
|
+
b.value = !0, ue();
|
|
2787
|
+
try {
|
|
2788
|
+
if (!y.value?.accessToken)
|
|
2789
|
+
throw new Error("No access token available. Please sign in again.");
|
|
2790
|
+
const B = new FormData();
|
|
2791
|
+
B.append("avatar", w);
|
|
2792
|
+
const Q = await fetch(g("avatar"), {
|
|
2793
|
+
method: "POST",
|
|
2794
|
+
body: B,
|
|
2795
|
+
headers: {
|
|
2796
|
+
Authorization: `Bearer ${y.value.accessToken}`
|
|
2797
|
+
}
|
|
2798
|
+
});
|
|
2799
|
+
if (!Q.ok)
|
|
2800
|
+
if (Q.status === 401)
|
|
2801
|
+
try {
|
|
2802
|
+
if (console.log("Access token expired, attempting to refresh..."), await f() && y.value?.accessToken) {
|
|
2803
|
+
console.log("Token refreshed successfully, retrying avatar upload...");
|
|
2804
|
+
const G = await fetch(g("avatar"), {
|
|
2805
|
+
method: "POST",
|
|
2806
|
+
body: B,
|
|
2807
|
+
headers: {
|
|
2808
|
+
Authorization: `Bearer ${y.value.accessToken}`
|
|
2809
|
+
}
|
|
2810
|
+
});
|
|
2811
|
+
if (!G.ok) {
|
|
2812
|
+
const ce = await G.json().catch(() => ({}));
|
|
2813
|
+
throw new Error(ce.message || `Upload failed: ${G.status} ${G.statusText}`);
|
|
2814
|
+
}
|
|
2815
|
+
const ie = await G.json();
|
|
2816
|
+
console.log("Avatar upload retry success:", ie), m.value && (console.log("Updating authUser avatar from:", m.value.avatar, "to:", ie.avatar_url), m.value.avatar = ie.avatar_url, typeof window < "u" && localStorage.setItem("strands_auth_user", JSON.stringify(m.value))), W.value && (W.value.avatar = ie.avatar_url);
|
|
2817
|
+
try {
|
|
2818
|
+
await h(), console.log("Profile refreshed after avatar upload retry");
|
|
2819
|
+
} catch (ce) {
|
|
2820
|
+
console.warn("Failed to refresh profile after avatar upload retry:", ce);
|
|
2821
|
+
}
|
|
2822
|
+
Y.value = "Avatar updated successfully", N.value && i("profile-updated", N.value);
|
|
2823
|
+
return;
|
|
2824
|
+
} else
|
|
2825
|
+
throw new Error("Authentication expired. Please sign in again.");
|
|
2826
|
+
} catch {
|
|
2827
|
+
throw new Error("Authentication expired. Please sign in again.");
|
|
2828
|
+
}
|
|
2829
|
+
else {
|
|
2830
|
+
const oe = await Q.json().catch(() => ({}));
|
|
2831
|
+
throw new Error(oe.message || `Upload failed: ${Q.status} ${Q.statusText}`);
|
|
2832
|
+
}
|
|
2833
|
+
const ne = await Q.json();
|
|
2834
|
+
console.log("Avatar upload success:", ne), m.value && (console.log("Updating authUser avatar from:", m.value.avatar, "to:", ne.avatar_url), m.value.avatar = ne.avatar_url, typeof window < "u" && localStorage.setItem("strands_auth_user", JSON.stringify(m.value))), W.value && (W.value.avatar = ne.avatar_url);
|
|
2835
|
+
try {
|
|
2836
|
+
await h(), console.log("Profile refreshed after avatar upload");
|
|
2837
|
+
} catch (oe) {
|
|
2838
|
+
console.warn("Failed to refresh profile after avatar upload:", oe);
|
|
2839
|
+
}
|
|
2840
|
+
Y.value = "Avatar updated successfully", N.value && i("profile-updated", N.value);
|
|
2841
|
+
} catch (B) {
|
|
2842
|
+
const Q = B instanceof Error ? B.message : "Failed to upload avatar";
|
|
2843
|
+
P.value = Q, i("error", Q);
|
|
2844
|
+
} finally {
|
|
2845
|
+
b.value = !1, I.value && (I.value.value = "");
|
|
2846
|
+
}
|
|
2847
|
+
}, Ue = { props: e, emit: i, getSupportEmail: u, strandsConfig: s, getUrl: g, fetchProfile: h, updateProfile: S, changeEmail: C, authUser: m, currentSession: y, isAuthenticated: p, refreshToken: f, internalUser: W, fetchingProfile: M, currentUser: N, loading: k, uploading: b, showPasswordChange: c, showEmailChange: F, emailChangeLoading: H, successMessage: Y, errorMessage: P, activeSessions: z, fileInputRef: I, form: D, emailChangeForm: X, passwordForm: O, errors: L, hasChanges: j, isPasswordFormValid: K, isEmailChangeFormValid: we, passwordLastUpdated: ae, getInitials: Ve, fetchUserProfile: ye, clearMessages: ue, handleUpdateProfile: Me, handlePasswordChange: Pe, handleEmailChange: Fe, triggerFileUpload: ze, handleFileSelect: Be, uploadAvatar: xe, handleMFAToggle: () => {
|
|
2848
|
+
i("mfa-toggle", !N.value?.mfaEnabled);
|
|
2854
2849
|
}, handleCancel: () => {
|
|
2855
|
-
const
|
|
2856
|
-
|
|
2850
|
+
const w = N.value;
|
|
2851
|
+
w && (D.firstName = w.firstName || "", D.lastName = w.lastName || "", D.email = w.email), ue(), c.value = !1, F.value = !1, O.current = "", O.new = "", O.confirm = "", X.newEmail = "", X.password = "", X.errors.newEmail = "", X.errors.password = "";
|
|
2857
2852
|
}, get StrandsUiButton() {
|
|
2858
|
-
return
|
|
2853
|
+
return le;
|
|
2859
2854
|
}, get StrandsUiInput() {
|
|
2860
|
-
return
|
|
2855
|
+
return Ae;
|
|
2861
2856
|
}, get StrandsUiLink() {
|
|
2862
|
-
return
|
|
2863
|
-
},
|
|
2864
|
-
|
|
2857
|
+
return de;
|
|
2858
|
+
}, get StrandsUiLoader() {
|
|
2859
|
+
return Se;
|
|
2860
|
+
}, StrandsSecuredFooter: pe };
|
|
2861
|
+
return Object.defineProperty(Ue, "__isScriptSetup", { enumerable: !1, value: !0 }), Ue;
|
|
2865
2862
|
}
|
|
2866
|
-
}),
|
|
2863
|
+
}), ns = { class: "w-full min-w-xl max-w-2xl mx-auto animate-slide-up" }, os = { class: "card-modern" }, is = { class: "flex flex-col items-center mb-8" }, ls = { class: "relative group" }, As = {
|
|
2867
2864
|
key: 0,
|
|
2868
|
-
class: "
|
|
2869
|
-
},
|
|
2865
|
+
class: "w-24 h-24 rounded-full shadow-large overflow-hidden"
|
|
2866
|
+
}, ds = ["src", "alt"], us = {
|
|
2867
|
+
key: 1,
|
|
2868
|
+
class: "w-24 h-24 rounded-full bg-gradient-to-r from-strands-400 to-strands-600 flex items-center justify-center text-white text-2xl font-bold shadow-large"
|
|
2869
|
+
}, cs = ["disabled"], ms = {
|
|
2870
|
+
key: 1,
|
|
2871
|
+
class: "w-6 h-6 text-white",
|
|
2872
|
+
fill: "none",
|
|
2873
|
+
stroke: "currentColor",
|
|
2874
|
+
viewBox: "0 0 24 24"
|
|
2875
|
+
}, fs = ["disabled"], gs = { class: "grid grid-cols-1 md:grid-cols-2 gap-6" }, vs = { class: "space-y-4" }, ps = { class: "space-y-4 p-4 bg-gray-50 rounded-xl" }, ws = { class: "flex items-center justify-between" }, hs = { class: "text-sm text-gray-600" }, ys = {
|
|
2876
|
+
key: 0,
|
|
2877
|
+
class: "text-sm text-amber-600 font-medium"
|
|
2878
|
+
}, bs = {
|
|
2879
|
+
key: 0,
|
|
2880
|
+
class: "space-y-3 overflow-hidden"
|
|
2881
|
+
}, Ss = { class: "space-y-4" }, Cs = { class: "space-y-4 p-4 bg-gray-50 rounded-xl" }, qs = { class: "flex items-center justify-between" }, Vs = { class: "text-sm text-gray-600" }, xs = {
|
|
2882
|
+
key: 0,
|
|
2883
|
+
class: "space-y-3 overflow-hidden"
|
|
2884
|
+
}, Us = { class: "p-4 bg-gray-50 rounded-xl" }, Ws = { class: "flex items-center justify-between" }, ks = { class: "text-sm text-gray-600" }, Ns = { class: "p-4 bg-gray-50 rounded-xl" }, Ls = { class: "flex items-center justify-between" }, Ms = { class: "text-sm text-gray-600" }, Ps = {
|
|
2885
|
+
key: 0,
|
|
2886
|
+
class: "flex flex-col sm:flex-row gap-3 pt-6 border-t border-gray-200 animate-slide-up"
|
|
2887
|
+
}, Fs = {
|
|
2870
2888
|
key: 0,
|
|
2871
2889
|
class: "mt-6 animate-fade-in"
|
|
2872
|
-
},
|
|
2890
|
+
}, zs = { class: "alert-success" }, Bs = { class: "flex items-start gap-3" }, Is = { class: "font-medium" }, Xs = {
|
|
2873
2891
|
key: 1,
|
|
2874
2892
|
class: "mt-6 animate-fade-in"
|
|
2875
|
-
},
|
|
2893
|
+
}, Ds = { class: "alert-error" }, js = { class: "flex items-start gap-3" }, Ts = { class: "font-medium" }, Zs = {
|
|
2876
2894
|
key: 2,
|
|
2877
2895
|
class: "mt-6 text-center"
|
|
2878
|
-
},
|
|
2879
|
-
function
|
|
2880
|
-
return
|
|
2881
|
-
r("div",
|
|
2896
|
+
}, Es = { class: "text-gray-400 text-sm" };
|
|
2897
|
+
function Ys(o, t, a, e, i, u) {
|
|
2898
|
+
return l(), A("div", ns, [
|
|
2899
|
+
r("div", os, [
|
|
2882
2900
|
n(" Header "),
|
|
2883
|
-
t[
|
|
2901
|
+
t[24] || (t[24] = r(
|
|
2884
2902
|
"div",
|
|
2885
2903
|
{ class: "text-center mb-8" },
|
|
2886
2904
|
[
|
|
@@ -2891,63 +2909,89 @@ function qs(o, t, a, e, l, u) {
|
|
|
2891
2909
|
/* CACHED */
|
|
2892
2910
|
)),
|
|
2893
2911
|
n(" Profile Image Section "),
|
|
2894
|
-
r("div",
|
|
2895
|
-
r("div",
|
|
2896
|
-
|
|
2912
|
+
r("div", is, [
|
|
2913
|
+
r("div", ls, [
|
|
2914
|
+
e.currentUser?.avatar ? (l(), A("div", As, [
|
|
2915
|
+
r("img", {
|
|
2916
|
+
src: e.currentUser.avatar,
|
|
2917
|
+
alt: `${e.currentUser.firstName} ${e.currentUser.lastName}`,
|
|
2918
|
+
class: "w-full h-full object-cover"
|
|
2919
|
+
}, null, 8, ds)
|
|
2920
|
+
])) : (l(), A(
|
|
2897
2921
|
"div",
|
|
2898
|
-
|
|
2899
|
-
|
|
2922
|
+
us,
|
|
2923
|
+
U(e.getInitials(e.currentUser?.firstName, e.currentUser?.lastName)),
|
|
2900
2924
|
1
|
|
2901
2925
|
/* TEXT */
|
|
2902
|
-
),
|
|
2926
|
+
)),
|
|
2903
2927
|
r("button", {
|
|
2904
2928
|
class: "absolute inset-0 rounded-full bg-black/40 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-200",
|
|
2905
|
-
onClick: e.
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
r("path", {
|
|
2929
|
+
onClick: e.triggerFileUpload,
|
|
2930
|
+
disabled: e.uploading
|
|
2931
|
+
}, [
|
|
2932
|
+
e.uploading ? (l(), $(e.StrandsUiLoader, {
|
|
2933
|
+
key: 0,
|
|
2934
|
+
size: 24,
|
|
2935
|
+
variant: "dark"
|
|
2936
|
+
})) : (l(), A("svg", ms, t[10] || (t[10] = [
|
|
2937
|
+
r(
|
|
2938
|
+
"path",
|
|
2939
|
+
{
|
|
2917
2940
|
"stroke-linecap": "round",
|
|
2918
2941
|
"stroke-linejoin": "round",
|
|
2919
2942
|
"stroke-width": "2",
|
|
2920
2943
|
d: "M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"
|
|
2921
|
-
}
|
|
2922
|
-
|
|
2944
|
+
},
|
|
2945
|
+
null,
|
|
2946
|
+
-1
|
|
2947
|
+
/* CACHED */
|
|
2948
|
+
),
|
|
2949
|
+
r(
|
|
2950
|
+
"path",
|
|
2951
|
+
{
|
|
2923
2952
|
"stroke-linecap": "round",
|
|
2924
2953
|
"stroke-linejoin": "round",
|
|
2925
2954
|
"stroke-width": "2",
|
|
2926
2955
|
d: "M15 13a3 3 0 11-6 0 3 3 0 016 0z"
|
|
2927
|
-
}
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2956
|
+
},
|
|
2957
|
+
null,
|
|
2958
|
+
-1
|
|
2959
|
+
/* CACHED */
|
|
2960
|
+
)
|
|
2961
|
+
])))
|
|
2962
|
+
], 8, cs)
|
|
2933
2963
|
]),
|
|
2934
2964
|
r("button", {
|
|
2935
|
-
class: "mt-3 text-sm text-strands-600 hover:text-strands-700 font-medium transition-colors duration-200",
|
|
2936
|
-
onClick: e.
|
|
2937
|
-
|
|
2965
|
+
class: "mt-3 text-sm text-strands-600 hover:text-strands-700 font-medium transition-colors duration-200 disabled:opacity-50",
|
|
2966
|
+
onClick: e.triggerFileUpload,
|
|
2967
|
+
disabled: e.uploading
|
|
2968
|
+
}, U(e.uploading ? "Uploading..." : "Change photo"), 9, fs),
|
|
2969
|
+
r(
|
|
2970
|
+
"input",
|
|
2971
|
+
{
|
|
2972
|
+
ref: "fileInputRef",
|
|
2973
|
+
type: "file",
|
|
2974
|
+
accept: "image/*",
|
|
2975
|
+
class: "hidden",
|
|
2976
|
+
onChange: e.handleFileSelect
|
|
2977
|
+
},
|
|
2978
|
+
null,
|
|
2979
|
+
544
|
|
2980
|
+
/* NEED_HYDRATION, NEED_PATCH */
|
|
2981
|
+
)
|
|
2938
2982
|
]),
|
|
2939
2983
|
n(" Profile Form "),
|
|
2940
2984
|
r(
|
|
2941
2985
|
"form",
|
|
2942
2986
|
{
|
|
2943
|
-
onSubmit:
|
|
2987
|
+
onSubmit: fe(e.handleUpdateProfile, ["prevent"]),
|
|
2944
2988
|
class: "space-y-6"
|
|
2945
2989
|
},
|
|
2946
2990
|
[
|
|
2947
|
-
r("div",
|
|
2991
|
+
r("div", gs, [
|
|
2948
2992
|
n(" Personal Information "),
|
|
2949
|
-
r("div",
|
|
2950
|
-
t[
|
|
2993
|
+
r("div", vs, [
|
|
2994
|
+
t[12] || (t[12] = r(
|
|
2951
2995
|
"h3",
|
|
2952
2996
|
{ class: "text-lg font-semibold text-gray-900 mb-4" },
|
|
2953
2997
|
"Personal Information",
|
|
@@ -2962,7 +3006,6 @@ function qs(o, t, a, e, l, u) {
|
|
|
2962
3006
|
label: "First name",
|
|
2963
3007
|
placeholder: "Enter your first name",
|
|
2964
3008
|
autocomplete: "given-name",
|
|
2965
|
-
required: "",
|
|
2966
3009
|
disabled: e.loading || e.fetchingProfile,
|
|
2967
3010
|
error: e.errors.firstName
|
|
2968
3011
|
}, null, 8, ["modelValue", "disabled", "error"]),
|
|
@@ -2974,54 +3017,90 @@ function qs(o, t, a, e, l, u) {
|
|
|
2974
3017
|
label: "Last name",
|
|
2975
3018
|
placeholder: "Enter your last name",
|
|
2976
3019
|
autocomplete: "family-name",
|
|
2977
|
-
required: "",
|
|
2978
3020
|
disabled: e.loading || e.fetchingProfile,
|
|
2979
3021
|
error: e.errors.lastName
|
|
2980
3022
|
}, null, 8, ["modelValue", "disabled", "error"]),
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2988
|
-
|
|
2989
|
-
required: "",
|
|
2990
|
-
disabled: e.loading || e.fetchingProfile,
|
|
2991
|
-
error: e.errors.email
|
|
2992
|
-
}, Ve({
|
|
2993
|
-
_: 2
|
|
2994
|
-
/* DYNAMIC */
|
|
2995
|
-
}, [
|
|
2996
|
-
e.form.email !== e.currentUser?.email ? {
|
|
2997
|
-
name: "help",
|
|
2998
|
-
fn: y(() => [
|
|
2999
|
-
t[10] || (t[10] = r(
|
|
3000
|
-
"p",
|
|
3001
|
-
{ class: "text-yellow-600" },
|
|
3002
|
-
"Changing your email will require verification",
|
|
3023
|
+
n(" Email Change Section "),
|
|
3024
|
+
r("div", ps, [
|
|
3025
|
+
r("div", ws, [
|
|
3026
|
+
r("div", null, [
|
|
3027
|
+
t[11] || (t[11] = r(
|
|
3028
|
+
"h4",
|
|
3029
|
+
{ class: "font-medium text-gray-900" },
|
|
3030
|
+
"Email Address",
|
|
3003
3031
|
-1
|
|
3004
3032
|
/* CACHED */
|
|
3005
|
-
))
|
|
3033
|
+
)),
|
|
3034
|
+
r(
|
|
3035
|
+
"p",
|
|
3036
|
+
hs,
|
|
3037
|
+
U(e.currentUser?.email),
|
|
3038
|
+
1
|
|
3039
|
+
/* TEXT */
|
|
3040
|
+
),
|
|
3041
|
+
e.currentUser?.emailVerified ? n("v-if", !0) : (l(), A("p", ys, "⚠️ Email not verified"))
|
|
3006
3042
|
]),
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3043
|
+
d(e.StrandsUiButton, {
|
|
3044
|
+
variant: "secondary",
|
|
3045
|
+
size: "sm",
|
|
3046
|
+
onClick: t[2] || (t[2] = (s) => e.showEmailChange = !e.showEmailChange)
|
|
3047
|
+
}, {
|
|
3048
|
+
default: v(() => [
|
|
3049
|
+
V(
|
|
3050
|
+
U(e.showEmailChange ? "Cancel" : "Change"),
|
|
3051
|
+
1
|
|
3052
|
+
/* TEXT */
|
|
3053
|
+
)
|
|
3054
|
+
]),
|
|
3055
|
+
_: 1
|
|
3056
|
+
/* STABLE */
|
|
3057
|
+
})
|
|
3058
|
+
]),
|
|
3059
|
+
d(ee, { name: "expand" }, {
|
|
3060
|
+
default: v(() => [
|
|
3061
|
+
e.showEmailChange ? (l(), A("div", bs, [
|
|
3062
|
+
d(e.StrandsUiInput, {
|
|
3063
|
+
modelValue: e.emailChangeForm.newEmail,
|
|
3064
|
+
"onUpdate:modelValue": t[3] || (t[3] = (s) => e.emailChangeForm.newEmail = s),
|
|
3065
|
+
type: "email",
|
|
3066
|
+
placeholder: "New email address",
|
|
3067
|
+
autocomplete: "email",
|
|
3068
|
+
error: e.emailChangeForm.errors.newEmail
|
|
3069
|
+
}, null, 8, ["modelValue", "error"]),
|
|
3070
|
+
d(e.StrandsUiInput, {
|
|
3071
|
+
modelValue: e.emailChangeForm.password,
|
|
3072
|
+
"onUpdate:modelValue": t[4] || (t[4] = (s) => e.emailChangeForm.password = s),
|
|
3073
|
+
type: "password",
|
|
3074
|
+
placeholder: "Current password",
|
|
3075
|
+
autocomplete: "current-password",
|
|
3076
|
+
error: e.emailChangeForm.errors.password
|
|
3077
|
+
}, null, 8, ["modelValue", "error"]),
|
|
3078
|
+
d(e.StrandsUiButton, {
|
|
3079
|
+
variant: "primary",
|
|
3080
|
+
size: "sm",
|
|
3081
|
+
onClick: e.handleEmailChange,
|
|
3082
|
+
disabled: !e.isEmailChangeFormValid || e.emailChangeLoading
|
|
3083
|
+
}, {
|
|
3084
|
+
default: v(() => [
|
|
3085
|
+
V(
|
|
3086
|
+
U(e.emailChangeLoading ? "Updating..." : "Update Email"),
|
|
3087
|
+
1
|
|
3088
|
+
/* TEXT */
|
|
3089
|
+
)
|
|
3090
|
+
]),
|
|
3091
|
+
_: 1
|
|
3092
|
+
/* STABLE */
|
|
3093
|
+
}, 8, ["disabled"])
|
|
3094
|
+
])) : n("v-if", !0)
|
|
3095
|
+
]),
|
|
3096
|
+
_: 1
|
|
3097
|
+
/* STABLE */
|
|
3098
|
+
})
|
|
3099
|
+
])
|
|
3021
3100
|
]),
|
|
3022
3101
|
n(" Security Settings "),
|
|
3023
|
-
r("div",
|
|
3024
|
-
t[
|
|
3102
|
+
r("div", Ss, [
|
|
3103
|
+
t[18] || (t[18] = r(
|
|
3025
3104
|
"h3",
|
|
3026
3105
|
{ class: "text-lg font-semibold text-gray-900 mb-4" },
|
|
3027
3106
|
"Security Settings",
|
|
@@ -3029,26 +3108,32 @@ function qs(o, t, a, e, l, u) {
|
|
|
3029
3108
|
/* CACHED */
|
|
3030
3109
|
)),
|
|
3031
3110
|
n(" Password Change "),
|
|
3032
|
-
r("div",
|
|
3033
|
-
r("div",
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3111
|
+
r("div", Cs, [
|
|
3112
|
+
r("div", qs, [
|
|
3113
|
+
r("div", null, [
|
|
3114
|
+
t[13] || (t[13] = r(
|
|
3115
|
+
"h4",
|
|
3116
|
+
{ class: "font-medium text-gray-900" },
|
|
3117
|
+
"Password",
|
|
3118
|
+
-1
|
|
3119
|
+
/* CACHED */
|
|
3120
|
+
)),
|
|
3121
|
+
r(
|
|
3122
|
+
"p",
|
|
3123
|
+
Vs,
|
|
3124
|
+
"Last updated " + U(e.passwordLastUpdated),
|
|
3125
|
+
1
|
|
3126
|
+
/* TEXT */
|
|
3127
|
+
)
|
|
3128
|
+
]),
|
|
3044
3129
|
d(e.StrandsUiButton, {
|
|
3045
3130
|
variant: "secondary",
|
|
3046
3131
|
size: "sm",
|
|
3047
|
-
onClick: t[
|
|
3132
|
+
onClick: t[5] || (t[5] = (s) => e.showPasswordChange = !e.showPasswordChange)
|
|
3048
3133
|
}, {
|
|
3049
|
-
default:
|
|
3134
|
+
default: v(() => [
|
|
3050
3135
|
V(
|
|
3051
|
-
|
|
3136
|
+
U(e.showPasswordChange ? "Cancel" : "Change"),
|
|
3052
3137
|
1
|
|
3053
3138
|
/* TEXT */
|
|
3054
3139
|
)
|
|
@@ -3057,51 +3142,57 @@ function qs(o, t, a, e, l, u) {
|
|
|
3057
3142
|
/* STABLE */
|
|
3058
3143
|
})
|
|
3059
3144
|
]),
|
|
3060
|
-
|
|
3061
|
-
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3098
|
-
|
|
3145
|
+
d(ee, { name: "expand" }, {
|
|
3146
|
+
default: v(() => [
|
|
3147
|
+
e.showPasswordChange ? (l(), A("div", xs, [
|
|
3148
|
+
d(e.StrandsUiInput, {
|
|
3149
|
+
modelValue: e.passwordForm.current,
|
|
3150
|
+
"onUpdate:modelValue": t[6] || (t[6] = (s) => e.passwordForm.current = s),
|
|
3151
|
+
type: "password",
|
|
3152
|
+
placeholder: "Current password",
|
|
3153
|
+
autocomplete: "current-password"
|
|
3154
|
+
}, null, 8, ["modelValue"]),
|
|
3155
|
+
d(e.StrandsUiInput, {
|
|
3156
|
+
modelValue: e.passwordForm.new,
|
|
3157
|
+
"onUpdate:modelValue": t[7] || (t[7] = (s) => e.passwordForm.new = s),
|
|
3158
|
+
type: "password",
|
|
3159
|
+
placeholder: "New password",
|
|
3160
|
+
autocomplete: "new-password"
|
|
3161
|
+
}, null, 8, ["modelValue"]),
|
|
3162
|
+
d(e.StrandsUiInput, {
|
|
3163
|
+
modelValue: e.passwordForm.confirm,
|
|
3164
|
+
"onUpdate:modelValue": t[8] || (t[8] = (s) => e.passwordForm.confirm = s),
|
|
3165
|
+
type: "password",
|
|
3166
|
+
placeholder: "Confirm new password",
|
|
3167
|
+
autocomplete: "new-password"
|
|
3168
|
+
}, null, 8, ["modelValue"]),
|
|
3169
|
+
d(e.StrandsUiButton, {
|
|
3170
|
+
variant: "primary",
|
|
3171
|
+
size: "sm",
|
|
3172
|
+
onClick: e.handlePasswordChange,
|
|
3173
|
+
disabled: !e.isPasswordFormValid
|
|
3174
|
+
}, {
|
|
3175
|
+
default: v(() => t[14] || (t[14] = [
|
|
3176
|
+
V(
|
|
3177
|
+
" Update Password ",
|
|
3178
|
+
-1
|
|
3179
|
+
/* CACHED */
|
|
3180
|
+
)
|
|
3181
|
+
])),
|
|
3182
|
+
_: 1,
|
|
3183
|
+
__: [14]
|
|
3184
|
+
}, 8, ["disabled"])
|
|
3185
|
+
])) : n("v-if", !0)
|
|
3186
|
+
]),
|
|
3187
|
+
_: 1
|
|
3188
|
+
/* STABLE */
|
|
3189
|
+
})
|
|
3099
3190
|
]),
|
|
3100
3191
|
n(" Two-Factor Authentication "),
|
|
3101
|
-
r("div",
|
|
3102
|
-
r("div",
|
|
3192
|
+
r("div", Us, [
|
|
3193
|
+
r("div", Ws, [
|
|
3103
3194
|
r("div", null, [
|
|
3104
|
-
t[
|
|
3195
|
+
t[15] || (t[15] = r(
|
|
3105
3196
|
"h4",
|
|
3106
3197
|
{ class: "font-medium text-gray-900" },
|
|
3107
3198
|
"Two-Factor Authentication",
|
|
@@ -3110,8 +3201,8 @@ function qs(o, t, a, e, l, u) {
|
|
|
3110
3201
|
)),
|
|
3111
3202
|
r(
|
|
3112
3203
|
"p",
|
|
3113
|
-
|
|
3114
|
-
|
|
3204
|
+
ks,
|
|
3205
|
+
U(e.currentUser?.mfaEnabled ? "Enabled" : "Add extra security to your account"),
|
|
3115
3206
|
1
|
|
3116
3207
|
/* TEXT */
|
|
3117
3208
|
)
|
|
@@ -3121,9 +3212,9 @@ function qs(o, t, a, e, l, u) {
|
|
|
3121
3212
|
size: "sm",
|
|
3122
3213
|
onClick: e.handleMFAToggle
|
|
3123
3214
|
}, {
|
|
3124
|
-
default:
|
|
3215
|
+
default: v(() => [
|
|
3125
3216
|
V(
|
|
3126
|
-
|
|
3217
|
+
U(e.currentUser?.mfaEnabled ? "Disable" : "Enable"),
|
|
3127
3218
|
1
|
|
3128
3219
|
/* TEXT */
|
|
3129
3220
|
)
|
|
@@ -3134,10 +3225,10 @@ function qs(o, t, a, e, l, u) {
|
|
|
3134
3225
|
])
|
|
3135
3226
|
]),
|
|
3136
3227
|
n(" Active Sessions "),
|
|
3137
|
-
r("div",
|
|
3138
|
-
r("div",
|
|
3228
|
+
r("div", Ns, [
|
|
3229
|
+
r("div", Ls, [
|
|
3139
3230
|
r("div", null, [
|
|
3140
|
-
t[
|
|
3231
|
+
t[16] || (t[16] = r(
|
|
3141
3232
|
"h4",
|
|
3142
3233
|
{ class: "font-medium text-gray-900" },
|
|
3143
3234
|
"Active Sessions",
|
|
@@ -3146,8 +3237,8 @@ function qs(o, t, a, e, l, u) {
|
|
|
3146
3237
|
)),
|
|
3147
3238
|
r(
|
|
3148
3239
|
"p",
|
|
3149
|
-
|
|
3150
|
-
|
|
3240
|
+
Ms,
|
|
3241
|
+
U(e.activeSessions.length) + " active device(s)",
|
|
3151
3242
|
1
|
|
3152
3243
|
/* TEXT */
|
|
3153
3244
|
)
|
|
@@ -3155,33 +3246,34 @@ function qs(o, t, a, e, l, u) {
|
|
|
3155
3246
|
d(e.StrandsUiButton, {
|
|
3156
3247
|
variant: "secondary",
|
|
3157
3248
|
size: "sm",
|
|
3158
|
-
onClick: t[
|
|
3249
|
+
onClick: t[9] || (t[9] = (s) => o.$emit("manage-sessions")),
|
|
3250
|
+
disabled: ""
|
|
3159
3251
|
}, {
|
|
3160
|
-
default:
|
|
3252
|
+
default: v(() => t[17] || (t[17] = [
|
|
3161
3253
|
V(
|
|
3162
|
-
"
|
|
3254
|
+
" Coming Soon ",
|
|
3163
3255
|
-1
|
|
3164
3256
|
/* CACHED */
|
|
3165
3257
|
)
|
|
3166
3258
|
])),
|
|
3167
3259
|
_: 1,
|
|
3168
|
-
__: [
|
|
3260
|
+
__: [17]
|
|
3169
3261
|
})
|
|
3170
3262
|
])
|
|
3171
3263
|
])
|
|
3172
3264
|
])
|
|
3173
3265
|
]),
|
|
3174
|
-
n(" Action Buttons "),
|
|
3175
|
-
|
|
3266
|
+
n(" Action Buttons - Only show when changes are made "),
|
|
3267
|
+
e.hasChanges ? (l(), A("div", Ps, [
|
|
3176
3268
|
d(e.StrandsUiButton, {
|
|
3177
3269
|
type: "submit",
|
|
3178
3270
|
variant: "primary",
|
|
3179
|
-
disabled: e.loading
|
|
3271
|
+
disabled: e.loading,
|
|
3180
3272
|
loading: e.loading
|
|
3181
3273
|
}, {
|
|
3182
|
-
default:
|
|
3274
|
+
default: v(() => [
|
|
3183
3275
|
V(
|
|
3184
|
-
|
|
3276
|
+
U(e.loading ? "Saving changes..." : "Save changes"),
|
|
3185
3277
|
1
|
|
3186
3278
|
/* TEXT */
|
|
3187
3279
|
)
|
|
@@ -3194,7 +3286,7 @@ function qs(o, t, a, e, l, u) {
|
|
|
3194
3286
|
onClick: e.handleCancel,
|
|
3195
3287
|
disabled: e.loading
|
|
3196
3288
|
}, {
|
|
3197
|
-
default:
|
|
3289
|
+
default: v(() => t[19] || (t[19] = [
|
|
3198
3290
|
V(
|
|
3199
3291
|
" Cancel ",
|
|
3200
3292
|
-1
|
|
@@ -3202,18 +3294,18 @@ function qs(o, t, a, e, l, u) {
|
|
|
3202
3294
|
)
|
|
3203
3295
|
])),
|
|
3204
3296
|
_: 1,
|
|
3205
|
-
__: [
|
|
3297
|
+
__: [19]
|
|
3206
3298
|
}, 8, ["disabled"])
|
|
3207
|
-
])
|
|
3299
|
+
])) : n("v-if", !0)
|
|
3208
3300
|
],
|
|
3209
3301
|
32
|
|
3210
3302
|
/* NEED_HYDRATION */
|
|
3211
3303
|
),
|
|
3212
3304
|
n(" Success/Error Messages "),
|
|
3213
|
-
e.successMessage ? (
|
|
3214
|
-
r("div",
|
|
3215
|
-
r("div",
|
|
3216
|
-
t[
|
|
3305
|
+
e.successMessage ? (l(), A("div", Fs, [
|
|
3306
|
+
r("div", zs, [
|
|
3307
|
+
r("div", Bs, [
|
|
3308
|
+
t[20] || (t[20] = r(
|
|
3217
3309
|
"svg",
|
|
3218
3310
|
{
|
|
3219
3311
|
class: "w-4 h-4 mt-0.5 flex-shrink-0",
|
|
@@ -3232,18 +3324,18 @@ function qs(o, t, a, e, l, u) {
|
|
|
3232
3324
|
)),
|
|
3233
3325
|
r(
|
|
3234
3326
|
"p",
|
|
3235
|
-
|
|
3236
|
-
|
|
3327
|
+
Is,
|
|
3328
|
+
U(e.successMessage),
|
|
3237
3329
|
1
|
|
3238
3330
|
/* TEXT */
|
|
3239
3331
|
)
|
|
3240
3332
|
])
|
|
3241
3333
|
])
|
|
3242
3334
|
])) : n("v-if", !0),
|
|
3243
|
-
e.errorMessage ? (
|
|
3244
|
-
r("div",
|
|
3245
|
-
r("div",
|
|
3246
|
-
t[
|
|
3335
|
+
e.errorMessage ? (l(), A("div", Xs, [
|
|
3336
|
+
r("div", Ds, [
|
|
3337
|
+
r("div", js, [
|
|
3338
|
+
t[21] || (t[21] = r(
|
|
3247
3339
|
"svg",
|
|
3248
3340
|
{
|
|
3249
3341
|
class: "w-4 h-4 mt-0.5 flex-shrink-0",
|
|
@@ -3262,8 +3354,8 @@ function qs(o, t, a, e, l, u) {
|
|
|
3262
3354
|
)),
|
|
3263
3355
|
r(
|
|
3264
3356
|
"p",
|
|
3265
|
-
|
|
3266
|
-
|
|
3357
|
+
Ts,
|
|
3358
|
+
U(e.errorMessage),
|
|
3267
3359
|
1
|
|
3268
3360
|
/* TEXT */
|
|
3269
3361
|
)
|
|
@@ -3271,9 +3363,9 @@ function qs(o, t, a, e, l, u) {
|
|
|
3271
3363
|
])
|
|
3272
3364
|
])) : n("v-if", !0),
|
|
3273
3365
|
n(" Need help "),
|
|
3274
|
-
e.getSupportEmail() ? (
|
|
3275
|
-
r("p",
|
|
3276
|
-
t[
|
|
3366
|
+
e.getSupportEmail() ? (l(), A("div", Zs, [
|
|
3367
|
+
r("p", Es, [
|
|
3368
|
+
t[23] || (t[23] = V(
|
|
3277
3369
|
" Need help? ",
|
|
3278
3370
|
-1
|
|
3279
3371
|
/* CACHED */
|
|
@@ -3282,7 +3374,7 @@ function qs(o, t, a, e, l, u) {
|
|
|
3282
3374
|
variant: "primary",
|
|
3283
3375
|
href: `mailto:${e.getSupportEmail()}`
|
|
3284
3376
|
}, {
|
|
3285
|
-
default:
|
|
3377
|
+
default: v(() => t[22] || (t[22] = [
|
|
3286
3378
|
V(
|
|
3287
3379
|
" Contact Support ",
|
|
3288
3380
|
-1
|
|
@@ -3290,7 +3382,7 @@ function qs(o, t, a, e, l, u) {
|
|
|
3290
3382
|
)
|
|
3291
3383
|
])),
|
|
3292
3384
|
_: 1,
|
|
3293
|
-
__: [
|
|
3385
|
+
__: [22]
|
|
3294
3386
|
}, 8, ["href"])
|
|
3295
3387
|
])
|
|
3296
3388
|
])) : n("v-if", !0),
|
|
@@ -3301,7 +3393,7 @@ function qs(o, t, a, e, l, u) {
|
|
|
3301
3393
|
])
|
|
3302
3394
|
]);
|
|
3303
3395
|
}
|
|
3304
|
-
const
|
|
3396
|
+
const La = /* @__PURE__ */ E(as, [["render", Ys], ["__scopeId", "data-v-9670e06b"], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/StrandsUserProfile.vue"]]), Os = /* @__PURE__ */ Z({
|
|
3305
3397
|
__name: "StrandsPasswordReset",
|
|
3306
3398
|
props: {
|
|
3307
3399
|
config: { type: Object, required: !1 }
|
|
@@ -3309,38 +3401,38 @@ const Aa = /* @__PURE__ */ D(Hr, [["render", qs], ["__file", "/home/runner/work/
|
|
|
3309
3401
|
emits: ["success", "error", "back-to-signin"],
|
|
3310
3402
|
setup(o, { expose: t, emit: a }) {
|
|
3311
3403
|
t();
|
|
3312
|
-
const e = o,
|
|
3404
|
+
const e = o, i = a, { getSupportEmail: u } = se(e.config), s = q(!1), g = q(""), h = q(!1), S = te({
|
|
3313
3405
|
email: ""
|
|
3314
|
-
}), m = { props: e, emit:
|
|
3406
|
+
}), m = { props: e, emit: i, getSupportEmail: u, loading: s, error: g, isSubmitted: h, form: S, handlePasswordReset: async () => {
|
|
3315
3407
|
s.value = !0, g.value = "";
|
|
3316
3408
|
try {
|
|
3317
|
-
console.log("Password reset request:", { email:
|
|
3409
|
+
console.log("Password reset request:", { email: S.email }), await new Promise((y) => setTimeout(y, 1e3)), h.value = !0, i("success", S.email);
|
|
3318
3410
|
} catch {
|
|
3319
|
-
g.value = "Failed to send password reset email. Please try again.",
|
|
3411
|
+
g.value = "Failed to send password reset email. Please try again.", i("error", g.value);
|
|
3320
3412
|
} finally {
|
|
3321
3413
|
s.value = !1;
|
|
3322
3414
|
}
|
|
3323
3415
|
}, get StrandsUiCard() {
|
|
3324
|
-
return
|
|
3416
|
+
return ve;
|
|
3325
3417
|
}, get StrandsUiButton() {
|
|
3326
|
-
return
|
|
3418
|
+
return le;
|
|
3327
3419
|
}, get StrandsUiInput() {
|
|
3328
|
-
return
|
|
3420
|
+
return Ae;
|
|
3329
3421
|
}, get StrandsUiAlert() {
|
|
3330
|
-
return
|
|
3422
|
+
return he;
|
|
3331
3423
|
}, get StrandsUiLink() {
|
|
3332
|
-
return
|
|
3333
|
-
}, StrandsSecuredFooter:
|
|
3424
|
+
return de;
|
|
3425
|
+
}, StrandsSecuredFooter: pe };
|
|
3334
3426
|
return Object.defineProperty(m, "__isScriptSetup", { enumerable: !1, value: !0 }), m;
|
|
3335
3427
|
}
|
|
3336
|
-
}),
|
|
3428
|
+
}), Ks = { class: "w-full min-w-100 max-w-md mx-auto animate-slide-up" }, Qs = { class: "mt-8 text-center" }, Hs = {
|
|
3337
3429
|
key: 2,
|
|
3338
3430
|
class: "mt-6 text-center"
|
|
3339
|
-
},
|
|
3340
|
-
function
|
|
3341
|
-
return
|
|
3431
|
+
}, Rs = { class: "text-neutral-400 text-sm" };
|
|
3432
|
+
function Gs(o, t, a, e, i, u) {
|
|
3433
|
+
return l(), A("div", Ks, [
|
|
3342
3434
|
d(e.StrandsUiCard, { variant: "modern" }, {
|
|
3343
|
-
default:
|
|
3435
|
+
default: v(() => [
|
|
3344
3436
|
n(" Header "),
|
|
3345
3437
|
t[6] || (t[6] = r(
|
|
3346
3438
|
"div",
|
|
@@ -3356,7 +3448,7 @@ function ks(o, t, a, e, l, u) {
|
|
|
3356
3448
|
r(
|
|
3357
3449
|
"form",
|
|
3358
3450
|
{
|
|
3359
|
-
onSubmit:
|
|
3451
|
+
onSubmit: fe(e.handlePasswordReset, ["prevent"]),
|
|
3360
3452
|
class: "space-y-6"
|
|
3361
3453
|
},
|
|
3362
3454
|
[
|
|
@@ -3380,9 +3472,9 @@ function ks(o, t, a, e, l, u) {
|
|
|
3380
3472
|
loading: e.loading,
|
|
3381
3473
|
"loading-text": "Sending link..."
|
|
3382
3474
|
}, {
|
|
3383
|
-
default:
|
|
3475
|
+
default: v(() => [
|
|
3384
3476
|
V(
|
|
3385
|
-
|
|
3477
|
+
U(e.isSubmitted ? "Link sent!" : "Send reset link"),
|
|
3386
3478
|
1
|
|
3387
3479
|
/* TEXT */
|
|
3388
3480
|
)
|
|
@@ -3395,14 +3487,14 @@ function ks(o, t, a, e, l, u) {
|
|
|
3395
3487
|
/* NEED_HYDRATION */
|
|
3396
3488
|
),
|
|
3397
3489
|
n(" Success Message "),
|
|
3398
|
-
e.isSubmitted ? (
|
|
3490
|
+
e.isSubmitted ? (l(), $(e.StrandsUiAlert, {
|
|
3399
3491
|
key: 0,
|
|
3400
3492
|
variant: "success",
|
|
3401
3493
|
message: `Check your email - We've sent a password reset link to ${e.form.email}`,
|
|
3402
3494
|
class: "mt-6 animate-fade-in"
|
|
3403
3495
|
}, null, 8, ["message"])) : n("v-if", !0),
|
|
3404
3496
|
n(" Error Message "),
|
|
3405
|
-
e.error ? (
|
|
3497
|
+
e.error ? (l(), $(e.StrandsUiAlert, {
|
|
3406
3498
|
key: 1,
|
|
3407
3499
|
variant: "error",
|
|
3408
3500
|
message: e.error,
|
|
@@ -3411,12 +3503,12 @@ function ks(o, t, a, e, l, u) {
|
|
|
3411
3503
|
onDismiss: t[1] || (t[1] = (s) => e.error = "")
|
|
3412
3504
|
}, null, 8, ["message"])) : n("v-if", !0),
|
|
3413
3505
|
n(" Back to Sign In "),
|
|
3414
|
-
r("div",
|
|
3506
|
+
r("div", Qs, [
|
|
3415
3507
|
d(e.StrandsUiLink, {
|
|
3416
3508
|
onClick: t[2] || (t[2] = (s) => o.$emit("back-to-signin")),
|
|
3417
3509
|
class: "inline-flex items-center gap-2"
|
|
3418
3510
|
}, {
|
|
3419
|
-
default:
|
|
3511
|
+
default: v(() => t[3] || (t[3] = [
|
|
3420
3512
|
r(
|
|
3421
3513
|
"svg",
|
|
3422
3514
|
{
|
|
@@ -3447,8 +3539,8 @@ function ks(o, t, a, e, l, u) {
|
|
|
3447
3539
|
})
|
|
3448
3540
|
]),
|
|
3449
3541
|
n(" Need help "),
|
|
3450
|
-
e.getSupportEmail() ? (
|
|
3451
|
-
r("p",
|
|
3542
|
+
e.getSupportEmail() ? (l(), A("div", Hs, [
|
|
3543
|
+
r("p", Rs, [
|
|
3452
3544
|
t[5] || (t[5] = V(
|
|
3453
3545
|
" Need help? ",
|
|
3454
3546
|
-1
|
|
@@ -3458,7 +3550,7 @@ function ks(o, t, a, e, l, u) {
|
|
|
3458
3550
|
variant: "primary",
|
|
3459
3551
|
href: `mailto:${e.getSupportEmail()}`
|
|
3460
3552
|
}, {
|
|
3461
|
-
default:
|
|
3553
|
+
default: v(() => t[4] || (t[4] = [
|
|
3462
3554
|
V(
|
|
3463
3555
|
" Contact Support ",
|
|
3464
3556
|
-1
|
|
@@ -3480,7 +3572,7 @@ function ks(o, t, a, e, l, u) {
|
|
|
3480
3572
|
})
|
|
3481
3573
|
]);
|
|
3482
3574
|
}
|
|
3483
|
-
const
|
|
3575
|
+
const Ma = /* @__PURE__ */ E(Os, [["render", Gs], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/StrandsPasswordReset.vue"]]), Js = /* @__PURE__ */ Z({
|
|
3484
3576
|
__name: "StrandsMFASetup",
|
|
3485
3577
|
emits: ["success", "error", "back"],
|
|
3486
3578
|
setup(o, { expose: t }) {
|
|
@@ -3488,9 +3580,9 @@ const da = /* @__PURE__ */ D(Vs, [["render", ks], ["__file", "/home/runner/work/
|
|
|
3488
3580
|
const a = {};
|
|
3489
3581
|
return Object.defineProperty(a, "__isScriptSetup", { enumerable: !1, value: !0 }), a;
|
|
3490
3582
|
}
|
|
3491
|
-
}),
|
|
3492
|
-
function
|
|
3493
|
-
return
|
|
3583
|
+
}), _s = { class: "max-w-md mx-auto bg-white rounded-lg shadow-lg p-6" }, $s = { class: "space-y-6" }, ea = { class: "flex gap-3 pt-4" };
|
|
3584
|
+
function ta(o, t, a, e, i, u) {
|
|
3585
|
+
return l(), A("div", _s, [
|
|
3494
3586
|
t[5] || (t[5] = r(
|
|
3495
3587
|
"div",
|
|
3496
3588
|
{ class: "text-center mb-6" },
|
|
@@ -3501,9 +3593,9 @@ function Is(o, t, a, e, l, u) {
|
|
|
3501
3593
|
-1
|
|
3502
3594
|
/* CACHED */
|
|
3503
3595
|
)),
|
|
3504
|
-
r("div",
|
|
3596
|
+
r("div", $s, [
|
|
3505
3597
|
n(" QR Code Section "),
|
|
3506
|
-
t[2] || (t[2] =
|
|
3598
|
+
t[2] || (t[2] = Ne('<div class="text-center"><div class="w-48 h-48 bg-gray-100 rounded-lg mx-auto mb-4 flex items-center justify-center"><div class="text-gray-400"><svg class="w-12 h-12" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M12 12h.01M12 12v4.01"></path></svg></div></div><p class="text-sm text-gray-600">Scan this QR code with your authenticator app</p></div>', 1)),
|
|
3507
3599
|
n(" Setup Key "),
|
|
3508
3600
|
t[3] || (t[3] = r(
|
|
3509
3601
|
"div",
|
|
@@ -3533,7 +3625,7 @@ function Is(o, t, a, e, l, u) {
|
|
|
3533
3625
|
/* CACHED */
|
|
3534
3626
|
)),
|
|
3535
3627
|
n(" Actions "),
|
|
3536
|
-
r("div",
|
|
3628
|
+
r("div", ea, [
|
|
3537
3629
|
t[1] || (t[1] = r(
|
|
3538
3630
|
"button",
|
|
3539
3631
|
{
|
|
@@ -3553,7 +3645,7 @@ function Is(o, t, a, e, l, u) {
|
|
|
3553
3645
|
])
|
|
3554
3646
|
]);
|
|
3555
3647
|
}
|
|
3556
|
-
const
|
|
3648
|
+
const Pa = /* @__PURE__ */ E(Js, [["render", ta], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/StrandsMFASetup.vue"]]), ra = /* @__PURE__ */ Z({
|
|
3557
3649
|
__name: "SignedIn",
|
|
3558
3650
|
props: {
|
|
3559
3651
|
showFallback: { type: Boolean, required: !1, default: !0 }
|
|
@@ -3561,48 +3653,48 @@ const ua = /* @__PURE__ */ D(Ns, [["render", Is], ["__file", "/home/runner/work/
|
|
|
3561
3653
|
emits: ["sign-in-required"],
|
|
3562
3654
|
setup(o, { expose: t, emit: a }) {
|
|
3563
3655
|
t();
|
|
3564
|
-
const e = a,
|
|
3565
|
-
|
|
3656
|
+
const e = a, i = q(!1), { isAuthenticated: u, isLoading: s, user: g, signOut: h } = ge(), S = x(() => s.value || !i.value);
|
|
3657
|
+
re(() => {
|
|
3566
3658
|
setTimeout(() => {
|
|
3567
|
-
|
|
3659
|
+
i.value = !0;
|
|
3568
3660
|
}, 100);
|
|
3569
3661
|
});
|
|
3570
|
-
const m = { emit: e, isComponentReady:
|
|
3662
|
+
const m = { emit: e, isComponentReady: i, isAuthenticated: u, isLoading: s, user: g, signOut: h, showLoading: S, signIn: () => {
|
|
3571
3663
|
e("sign-in-required");
|
|
3572
3664
|
}, get StrandsUiLoader() {
|
|
3573
|
-
return
|
|
3665
|
+
return Se;
|
|
3574
3666
|
} };
|
|
3575
3667
|
return Object.defineProperty(m, "__isScriptSetup", { enumerable: !1, value: !0 }), m;
|
|
3576
3668
|
}
|
|
3577
|
-
}),
|
|
3669
|
+
}), sa = {
|
|
3578
3670
|
key: 0,
|
|
3579
3671
|
class: "animate-fade-in"
|
|
3580
|
-
},
|
|
3672
|
+
}, aa = {
|
|
3581
3673
|
key: 1,
|
|
3582
3674
|
class: "animate-fade-in"
|
|
3583
|
-
},
|
|
3675
|
+
}, na = {
|
|
3584
3676
|
key: 2,
|
|
3585
3677
|
class: "animate-fade-in py-8"
|
|
3586
3678
|
};
|
|
3587
|
-
function
|
|
3588
|
-
return e.isAuthenticated && !e.showLoading ? (
|
|
3589
|
-
|
|
3679
|
+
function oa(o, t, a, e, i, u) {
|
|
3680
|
+
return e.isAuthenticated && !e.showLoading ? (l(), A("div", sa, [
|
|
3681
|
+
R(o.$slots, "default", {
|
|
3590
3682
|
user: e.user,
|
|
3591
3683
|
signOut: e.signOut
|
|
3592
3684
|
})
|
|
3593
|
-
])) : a.showFallback && !e.showLoading ? (
|
|
3594
|
-
|
|
3685
|
+
])) : a.showFallback && !e.showLoading ? (l(), A("div", aa, [
|
|
3686
|
+
R(o.$slots, "fallback", { signIn: e.signIn }, () => [
|
|
3595
3687
|
n(" Default fallback content "),
|
|
3596
3688
|
r("div", { class: "text-center py-8" }, [
|
|
3597
|
-
t[0] || (t[0] =
|
|
3689
|
+
t[0] || (t[0] = Ne('<div class="w-16 h-16 mx-auto mb-4 bg-neutral-100 rounded-full flex items-center justify-center"><svg class="w-8 h-8 text-neutral-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"></path></svg></div><h3 class="text-lg font-semibold text-neutral-900 mb-2">Sign in required</h3><p class="text-neutral-600 mb-4">You need to be signed in to access this content.</p>', 3)),
|
|
3598
3690
|
r("button", {
|
|
3599
3691
|
onClick: e.signIn,
|
|
3600
3692
|
class: "btn-primary !w-auto px-6 py-2"
|
|
3601
3693
|
}, " Sign in ")
|
|
3602
3694
|
])
|
|
3603
3695
|
])
|
|
3604
|
-
])) : e.showLoading ? (
|
|
3605
|
-
|
|
3696
|
+
])) : e.showLoading ? (l(), A("div", na, [
|
|
3697
|
+
R(o.$slots, "loading", {}, () => [
|
|
3606
3698
|
d(e.StrandsUiLoader, {
|
|
3607
3699
|
size: 64,
|
|
3608
3700
|
text: "Checking authentication...",
|
|
@@ -3612,7 +3704,7 @@ function Ds(o, t, a, e, l, u) {
|
|
|
3612
3704
|
])
|
|
3613
3705
|
])) : n("v-if", !0);
|
|
3614
3706
|
}
|
|
3615
|
-
const
|
|
3707
|
+
const Fa = /* @__PURE__ */ E(ra, [["render", oa], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/SignedIn.vue"]]), ia = /* @__PURE__ */ Z({
|
|
3616
3708
|
__name: "SignedOut",
|
|
3617
3709
|
props: {
|
|
3618
3710
|
showFallback: { type: Boolean, required: !1, default: !0 }
|
|
@@ -3620,38 +3712,38 @@ const ca = /* @__PURE__ */ D(zs, [["render", Ds], ["__file", "/home/runner/work/
|
|
|
3620
3712
|
emits: ["sign-in-clicked", "sign-up-clicked"],
|
|
3621
3713
|
setup(o, { expose: t, emit: a }) {
|
|
3622
3714
|
t();
|
|
3623
|
-
const e = o,
|
|
3624
|
-
|
|
3715
|
+
const e = o, i = a, { isAuthenticated: u, isLoading: s, user: g, signOut: h } = ge(), m = { props: e, emit: i, isAuthenticated: u, isLoading: s, user: g, signOut: h, signIn: () => {
|
|
3716
|
+
i("sign-in-clicked");
|
|
3625
3717
|
}, signUp: () => {
|
|
3626
|
-
|
|
3718
|
+
i("sign-up-clicked");
|
|
3627
3719
|
}, get StrandsUiLoader() {
|
|
3628
|
-
return
|
|
3720
|
+
return Se;
|
|
3629
3721
|
} };
|
|
3630
3722
|
return Object.defineProperty(m, "__isScriptSetup", { enumerable: !1, value: !0 }), m;
|
|
3631
3723
|
}
|
|
3632
|
-
}),
|
|
3724
|
+
}), la = {
|
|
3633
3725
|
key: 0,
|
|
3634
3726
|
class: "animate-fade-in"
|
|
3635
|
-
},
|
|
3727
|
+
}, Aa = {
|
|
3636
3728
|
key: 1,
|
|
3637
3729
|
class: "animate-fade-in"
|
|
3638
|
-
},
|
|
3730
|
+
}, da = { class: "text-center py-8" }, ua = { class: "text-neutral-600 mb-4" }, ca = {
|
|
3639
3731
|
key: 2,
|
|
3640
3732
|
class: "animate-fade-in py-8"
|
|
3641
3733
|
};
|
|
3642
|
-
function
|
|
3643
|
-
return !e.isAuthenticated && !e.isLoading ? (
|
|
3644
|
-
|
|
3734
|
+
function ma(o, t, a, e, i, u) {
|
|
3735
|
+
return !e.isAuthenticated && !e.isLoading ? (l(), A("div", la, [
|
|
3736
|
+
R(o.$slots, "default", {
|
|
3645
3737
|
signIn: e.signIn,
|
|
3646
3738
|
signUp: e.signUp
|
|
3647
3739
|
})
|
|
3648
|
-
])) : a.showFallback && e.isAuthenticated && !e.isLoading ? (
|
|
3649
|
-
|
|
3740
|
+
])) : a.showFallback && e.isAuthenticated && !e.isLoading ? (l(), A("div", Aa, [
|
|
3741
|
+
R(o.$slots, "fallback", {
|
|
3650
3742
|
user: e.user,
|
|
3651
3743
|
signOut: e.signOut
|
|
3652
3744
|
}, () => [
|
|
3653
3745
|
n(" Default fallback content for signed in users "),
|
|
3654
|
-
r("div",
|
|
3746
|
+
r("div", da, [
|
|
3655
3747
|
t[1] || (t[1] = r(
|
|
3656
3748
|
"div",
|
|
3657
3749
|
{ class: "w-16 h-16 mx-auto mb-4 bg-strands-100 rounded-full flex items-center justify-center" },
|
|
@@ -3682,8 +3774,8 @@ function Qs(o, t, a, e, l, u) {
|
|
|
3682
3774
|
)),
|
|
3683
3775
|
r(
|
|
3684
3776
|
"p",
|
|
3685
|
-
|
|
3686
|
-
"You're currently signed in as " +
|
|
3777
|
+
ua,
|
|
3778
|
+
"You're currently signed in as " + U(e.user?.email) + ".",
|
|
3687
3779
|
1
|
|
3688
3780
|
/* TEXT */
|
|
3689
3781
|
),
|
|
@@ -3693,8 +3785,8 @@ function Qs(o, t, a, e, l, u) {
|
|
|
3693
3785
|
}, " Sign out ")
|
|
3694
3786
|
])
|
|
3695
3787
|
])
|
|
3696
|
-
])) : e.isLoading ? (
|
|
3697
|
-
|
|
3788
|
+
])) : e.isLoading ? (l(), A("div", ca, [
|
|
3789
|
+
R(o.$slots, "loading", {}, () => [
|
|
3698
3790
|
d(e.StrandsUiLoader, {
|
|
3699
3791
|
size: 64,
|
|
3700
3792
|
text: "Checking authentication...",
|
|
@@ -3704,7 +3796,7 @@ function Qs(o, t, a, e, l, u) {
|
|
|
3704
3796
|
])
|
|
3705
3797
|
])) : n("v-if", !0);
|
|
3706
3798
|
}
|
|
3707
|
-
const
|
|
3799
|
+
const za = /* @__PURE__ */ E(ia, [["render", ma], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/SignedOut.vue"]]), fa = /* @__PURE__ */ Z({
|
|
3708
3800
|
__name: "StrandsLogo",
|
|
3709
3801
|
props: {
|
|
3710
3802
|
class: { type: String, required: !1, default: "" }
|
|
@@ -3715,13 +3807,13 @@ const ma = /* @__PURE__ */ D(js, [["render", Qs], ["__file", "/home/runner/work/
|
|
|
3715
3807
|
return Object.defineProperty(a, "__isScriptSetup", { enumerable: !1, value: !0 }), a;
|
|
3716
3808
|
}
|
|
3717
3809
|
});
|
|
3718
|
-
function
|
|
3719
|
-
return
|
|
3810
|
+
function ga(o, t, a, e, i, u) {
|
|
3811
|
+
return l(), A(
|
|
3720
3812
|
"svg",
|
|
3721
3813
|
{
|
|
3722
3814
|
viewBox: "0 0 22571 9413",
|
|
3723
3815
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3724
|
-
class:
|
|
3816
|
+
class: J(a.class),
|
|
3725
3817
|
role: "img",
|
|
3726
3818
|
"aria-label": "Strands Services Logo"
|
|
3727
3819
|
},
|
|
@@ -3756,7 +3848,7 @@ function Hs(o, t, a, e, l, u) {
|
|
|
3756
3848
|
/* CLASS */
|
|
3757
3849
|
);
|
|
3758
3850
|
}
|
|
3759
|
-
const
|
|
3851
|
+
const Ba = /* @__PURE__ */ E(fa, [["render", ga], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/StrandsLogo.vue"]]), va = /* @__PURE__ */ Z({
|
|
3760
3852
|
__name: "StrandsConfigProvider",
|
|
3761
3853
|
props: {
|
|
3762
3854
|
config: { type: Object, required: !0 }
|
|
@@ -3764,17 +3856,17 @@ const fa = /* @__PURE__ */ D(Ks, [["render", Hs], ["__file", "/home/runner/work/
|
|
|
3764
3856
|
setup(o, { expose: t }) {
|
|
3765
3857
|
t();
|
|
3766
3858
|
const a = o;
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
}),
|
|
3859
|
+
re(() => {
|
|
3860
|
+
We(a.config);
|
|
3861
|
+
}), We(a.config);
|
|
3770
3862
|
const e = { props: a };
|
|
3771
3863
|
return Object.defineProperty(e, "__isScriptSetup", { enumerable: !1, value: !0 }), e;
|
|
3772
3864
|
}
|
|
3773
3865
|
});
|
|
3774
|
-
function
|
|
3775
|
-
return
|
|
3866
|
+
function pa(o, t, a, e, i, u) {
|
|
3867
|
+
return R(o.$slots, "default");
|
|
3776
3868
|
}
|
|
3777
|
-
const
|
|
3869
|
+
const Ia = /* @__PURE__ */ E(va, [["render", pa], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/StrandsConfigProvider.vue"]]), wa = /* @__PURE__ */ Z({
|
|
3778
3870
|
__name: "SvgIcon",
|
|
3779
3871
|
props: {
|
|
3780
3872
|
name: { type: String, required: !0 },
|
|
@@ -3792,43 +3884,43 @@ const ga = /* @__PURE__ */ D(Rs, [["render", Gs], ["__file", "/home/runner/work/
|
|
|
3792
3884
|
md: "w-5 h-5",
|
|
3793
3885
|
lg: "w-6 h-6",
|
|
3794
3886
|
xl: "w-8 h-8"
|
|
3795
|
-
},
|
|
3796
|
-
eye: () =>
|
|
3797
|
-
|
|
3887
|
+
}, i = x(() => `${e[a.size]} ${a.class}`), u = x(() => "0 0 24 24"), s = {
|
|
3888
|
+
eye: () => T("g", [
|
|
3889
|
+
T("path", {
|
|
3798
3890
|
"stroke-linecap": "round",
|
|
3799
3891
|
"stroke-linejoin": "round",
|
|
3800
3892
|
"stroke-width": "2",
|
|
3801
3893
|
d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
|
|
3802
3894
|
}),
|
|
3803
|
-
|
|
3895
|
+
T("path", {
|
|
3804
3896
|
"stroke-linecap": "round",
|
|
3805
3897
|
"stroke-linejoin": "round",
|
|
3806
3898
|
"stroke-width": "2",
|
|
3807
3899
|
d: "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
|
|
3808
3900
|
})
|
|
3809
3901
|
]),
|
|
3810
|
-
"eye-slash": () =>
|
|
3811
|
-
|
|
3902
|
+
"eye-slash": () => T("g", [
|
|
3903
|
+
T("path", {
|
|
3812
3904
|
"stroke-linecap": "round",
|
|
3813
3905
|
"stroke-linejoin": "round",
|
|
3814
3906
|
"stroke-width": "2",
|
|
3815
3907
|
d: "M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L21 21"
|
|
3816
3908
|
})
|
|
3817
3909
|
]),
|
|
3818
|
-
camera: () =>
|
|
3910
|
+
camera: () => T("path", {
|
|
3819
3911
|
"stroke-linecap": "round",
|
|
3820
3912
|
"stroke-linejoin": "round",
|
|
3821
3913
|
"stroke-width": "2",
|
|
3822
3914
|
d: "M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"
|
|
3823
3915
|
}),
|
|
3824
|
-
"chevron-left": () =>
|
|
3916
|
+
"chevron-left": () => T("path", {
|
|
3825
3917
|
"stroke-linecap": "round",
|
|
3826
3918
|
"stroke-linejoin": "round",
|
|
3827
3919
|
"stroke-width": "2",
|
|
3828
3920
|
d: "M15 19l-7-7 7-7"
|
|
3829
3921
|
}),
|
|
3830
|
-
loading: () =>
|
|
3831
|
-
|
|
3922
|
+
loading: () => T("g", [
|
|
3923
|
+
T("circle", {
|
|
3832
3924
|
class: "opacity-25",
|
|
3833
3925
|
cx: "12",
|
|
3834
3926
|
cy: "12",
|
|
@@ -3836,146 +3928,145 @@ const ga = /* @__PURE__ */ D(Rs, [["render", Gs], ["__file", "/home/runner/work/
|
|
|
3836
3928
|
stroke: "currentColor",
|
|
3837
3929
|
"stroke-width": "4"
|
|
3838
3930
|
}),
|
|
3839
|
-
|
|
3931
|
+
T("path", {
|
|
3840
3932
|
class: "opacity-75",
|
|
3841
3933
|
fill: "currentColor",
|
|
3842
3934
|
d: "m4 12a8 8 0 0 1 8-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 0 1 4 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
|
3843
3935
|
})
|
|
3844
3936
|
]),
|
|
3845
|
-
"check-circle": () =>
|
|
3937
|
+
"check-circle": () => T("path", {
|
|
3846
3938
|
"fill-rule": "evenodd",
|
|
3847
3939
|
d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.236 4.53L7.53 10.173a.75.75 0 00-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",
|
|
3848
3940
|
"clip-rule": "evenodd"
|
|
3849
3941
|
}),
|
|
3850
|
-
"x-circle": () =>
|
|
3942
|
+
"x-circle": () => T("path", {
|
|
3851
3943
|
"fill-rule": "evenodd",
|
|
3852
3944
|
d: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z",
|
|
3853
3945
|
"clip-rule": "evenodd"
|
|
3854
3946
|
}),
|
|
3855
|
-
lock: () =>
|
|
3947
|
+
lock: () => T("path", {
|
|
3856
3948
|
"stroke-linecap": "round",
|
|
3857
3949
|
"stroke-linejoin": "round",
|
|
3858
3950
|
"stroke-width": "2",
|
|
3859
3951
|
d: "M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"
|
|
3860
3952
|
}),
|
|
3861
|
-
user: () =>
|
|
3953
|
+
user: () => T("path", {
|
|
3862
3954
|
"stroke-linecap": "round",
|
|
3863
3955
|
"stroke-linejoin": "round",
|
|
3864
3956
|
"stroke-width": "2",
|
|
3865
3957
|
d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"
|
|
3866
3958
|
}),
|
|
3867
|
-
google: () =>
|
|
3868
|
-
|
|
3959
|
+
google: () => T("g", { fill: "currentColor" }, [
|
|
3960
|
+
T("path", {
|
|
3869
3961
|
fill: "#4285F4",
|
|
3870
3962
|
d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"
|
|
3871
3963
|
}),
|
|
3872
|
-
|
|
3964
|
+
T("path", {
|
|
3873
3965
|
fill: "#34A853",
|
|
3874
3966
|
d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
|
|
3875
3967
|
}),
|
|
3876
|
-
|
|
3968
|
+
T("path", {
|
|
3877
3969
|
fill: "#FBBC05",
|
|
3878
3970
|
d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
|
|
3879
3971
|
}),
|
|
3880
|
-
|
|
3972
|
+
T("path", {
|
|
3881
3973
|
fill: "#EA4335",
|
|
3882
3974
|
d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
|
|
3883
3975
|
})
|
|
3884
3976
|
]),
|
|
3885
|
-
github: () =>
|
|
3977
|
+
github: () => T("path", {
|
|
3886
3978
|
"fill-rule": "evenodd",
|
|
3887
3979
|
d: "M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z",
|
|
3888
3980
|
"clip-rule": "evenodd"
|
|
3889
3981
|
})
|
|
3890
|
-
}, g =
|
|
3891
|
-
const
|
|
3892
|
-
return
|
|
3893
|
-
}),
|
|
3894
|
-
return Object.defineProperty(
|
|
3982
|
+
}, g = x(() => {
|
|
3983
|
+
const S = s[a.name];
|
|
3984
|
+
return S ? S() : T("path", { d: "" });
|
|
3985
|
+
}), h = { props: a, sizeClasses: e, iconClass: i, viewBox: u, icons: s, iconComponent: g };
|
|
3986
|
+
return Object.defineProperty(h, "__isScriptSetup", { enumerable: !1, value: !0 }), h;
|
|
3895
3987
|
}
|
|
3896
|
-
}),
|
|
3897
|
-
function
|
|
3898
|
-
return
|
|
3899
|
-
class:
|
|
3988
|
+
}), ha = ["fill", "stroke", "viewBox", "aria-hidden"];
|
|
3989
|
+
function ya(o, t, a, e, i, u) {
|
|
3990
|
+
return l(), A("svg", {
|
|
3991
|
+
class: J(e.iconClass),
|
|
3900
3992
|
fill: a.fill,
|
|
3901
3993
|
stroke: a.stroke,
|
|
3902
3994
|
viewBox: e.viewBox,
|
|
3903
3995
|
"aria-hidden": a.ariaHidden
|
|
3904
3996
|
}, [
|
|
3905
|
-
(
|
|
3906
|
-
], 10,
|
|
3997
|
+
(l(), $(ke(e.iconComponent)))
|
|
3998
|
+
], 10, ha);
|
|
3907
3999
|
}
|
|
3908
|
-
const
|
|
3909
|
-
StrandsUiAlert:
|
|
3910
|
-
StrandsUiButton:
|
|
3911
|
-
StrandsUiCard:
|
|
3912
|
-
StrandsUiInput:
|
|
3913
|
-
StrandsUiLink:
|
|
3914
|
-
StrandsUiTabs:
|
|
3915
|
-
StrandsUiLoader:
|
|
3916
|
-
},
|
|
4000
|
+
const Xa = /* @__PURE__ */ E(wa, [["render", ya], ["__file", "/home/runner/work/strands-accounts/strands-accounts/apps/accounts-ui/src/vue/components/SvgIcon.vue"]]), ba = {
|
|
4001
|
+
StrandsUiAlert: he,
|
|
4002
|
+
StrandsUiButton: le,
|
|
4003
|
+
StrandsUiCard: ve,
|
|
4004
|
+
StrandsUiInput: Ae,
|
|
4005
|
+
StrandsUiLink: de,
|
|
4006
|
+
StrandsUiTabs: Le,
|
|
4007
|
+
StrandsUiLoader: Se
|
|
4008
|
+
}, Da = {
|
|
3917
4009
|
install(o, t = {}) {
|
|
3918
4010
|
const { prefix: a = "" } = t;
|
|
3919
|
-
Object.entries(
|
|
4011
|
+
Object.entries(ba).forEach(([e, i]) => {
|
|
3920
4012
|
const u = a ? `${a}${e}` : e;
|
|
3921
|
-
o.component(u,
|
|
4013
|
+
o.component(u, i);
|
|
3922
4014
|
});
|
|
3923
4015
|
}
|
|
3924
|
-
},
|
|
4016
|
+
}, ja = (o) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(o), Ta = (o) => {
|
|
3925
4017
|
const t = [];
|
|
3926
4018
|
let a = 0;
|
|
3927
4019
|
o.length < 8 ? t.push("Password must be at least 8 characters long") : a += 1, /[A-Z]/.test(o) ? a += 1 : t.push("Password must contain at least one uppercase letter"), /[a-z]/.test(o) ? a += 1 : t.push("Password must contain at least one lowercase letter"), /\d/.test(o) ? a += 1 : t.push("Password must contain at least one number"), /[!@#$%^&*(),.?":{}|<>]/.test(o) ? a += 1 : t.push("Password must contain at least one special character");
|
|
3928
4020
|
const e = t.length === 0;
|
|
3929
|
-
let
|
|
3930
|
-
return a >= 4 ?
|
|
3931
|
-
},
|
|
4021
|
+
let i = "weak";
|
|
4022
|
+
return a >= 4 ? i = "strong" : a >= 3 && (i = "medium"), { isValid: e, strength: i, errors: t };
|
|
4023
|
+
}, Za = (o) => o.trim().length >= 2, Ea = (o) => o.trim().length > 0, Ya = (o, t) => o === t, Oa = (o, t) => {
|
|
3932
4024
|
const a = o?.charAt(0).toUpperCase() || "", e = t?.charAt(0).toUpperCase() || "";
|
|
3933
4025
|
return a + e || "U";
|
|
3934
|
-
},
|
|
4026
|
+
}, Ka = (o) => (typeof o == "string" ? new Date(o) : o).toLocaleDateString("en-US", {
|
|
3935
4027
|
year: "numeric",
|
|
3936
4028
|
month: "long",
|
|
3937
4029
|
day: "numeric"
|
|
3938
|
-
}),
|
|
4030
|
+
}), Qa = (o, t) => {
|
|
3939
4031
|
let a;
|
|
3940
4032
|
return (...e) => {
|
|
3941
4033
|
clearTimeout(a), a = setTimeout(() => o(...e), t);
|
|
3942
4034
|
};
|
|
3943
4035
|
};
|
|
3944
4036
|
export {
|
|
3945
|
-
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
|
|
3958
|
-
|
|
3959
|
-
|
|
3960
|
-
|
|
3961
|
-
|
|
3962
|
-
|
|
3963
|
-
|
|
3964
|
-
|
|
3965
|
-
|
|
3966
|
-
|
|
3967
|
-
|
|
3968
|
-
|
|
3969
|
-
|
|
3970
|
-
|
|
3971
|
-
|
|
3972
|
-
|
|
3973
|
-
|
|
3974
|
-
|
|
3975
|
-
|
|
3976
|
-
|
|
3977
|
-
|
|
3978
|
-
|
|
3979
|
-
ba as validatePassword
|
|
4037
|
+
Fa as SignedIn,
|
|
4038
|
+
za as SignedOut,
|
|
4039
|
+
Ua as StrandsAuth,
|
|
4040
|
+
Na as StrandsCompleteSignUp,
|
|
4041
|
+
Ia as StrandsConfigProvider,
|
|
4042
|
+
Ba as StrandsLogo,
|
|
4043
|
+
Pa as StrandsMFASetup,
|
|
4044
|
+
Ma as StrandsPasswordReset,
|
|
4045
|
+
pe as StrandsSecuredFooter,
|
|
4046
|
+
Wa as StrandsSignIn,
|
|
4047
|
+
ka as StrandsSignUp,
|
|
4048
|
+
Da as StrandsUIPlugin,
|
|
4049
|
+
he as StrandsUiAlert,
|
|
4050
|
+
le as StrandsUiButton,
|
|
4051
|
+
ve as StrandsUiCard,
|
|
4052
|
+
Ae as StrandsUiInput,
|
|
4053
|
+
de as StrandsUiLink,
|
|
4054
|
+
Se as StrandsUiLoader,
|
|
4055
|
+
Le as StrandsUiTabs,
|
|
4056
|
+
La as StrandsUserProfile,
|
|
4057
|
+
Xa as SvgIcon,
|
|
4058
|
+
Qa as debounce,
|
|
4059
|
+
Ka as formatDate,
|
|
4060
|
+
Oa as getInitials,
|
|
4061
|
+
Ea as isRequired,
|
|
4062
|
+
ja as isValidEmail,
|
|
4063
|
+
Za as isValidName,
|
|
4064
|
+
Ya as passwordsMatch,
|
|
4065
|
+
We as provideStrandsConfig,
|
|
4066
|
+
Ga as setStrandsConfig,
|
|
4067
|
+
qe as useOAuthProviders,
|
|
4068
|
+
ge as useStrandsAuth,
|
|
4069
|
+
se as useStrandsConfig,
|
|
4070
|
+
Ta as validatePassword
|
|
3980
4071
|
};
|
|
3981
4072
|
//# sourceMappingURL=strands-auth-ui.es.js.map
|