@8wave/ai-elements 0.112.0-beta.13 → 0.112.0-beta.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/_chunks/markdown-BRD-hDrH.js.map +1 -1
  2. package/dist/_chunks/{web-Dzr6HJ14.js → web-CEmtEYdH.js} +89 -65
  3. package/dist/_chunks/web-CEmtEYdH.js.map +1 -0
  4. package/dist/ai-elements.es.js +2816 -3040
  5. package/dist/ai-elements.es.js.map +1 -1
  6. package/dist-vue/PkChatbot.js +1 -1
  7. package/dist-vue/PkChatbotAuth.js +1 -1
  8. package/dist-vue/PkChatbotMessages.js +1 -1
  9. package/dist-vue/PkChatbotViewChat.js +1 -1
  10. package/dist-vue/PkChatbotViewConversations.js +1 -1
  11. package/dist-vue/PkChatbotViewFiles.js +1 -1
  12. package/dist-vue/PkChatbotViewProfile.js +1 -1
  13. package/dist-vue/_chunks/{Document-B6RpxFr9.js → Document-2X01-F4Z.js} +2 -2
  14. package/dist-vue/_chunks/Document-2X01-F4Z.js.map +1 -0
  15. package/dist-vue/_chunks/{PkChatbot-C0pf6xeZ.js → PkChatbot-C11EVHnI.js} +6 -6
  16. package/dist-vue/_chunks/{PkChatbot-C0pf6xeZ.js.map → PkChatbot-C11EVHnI.js.map} +1 -1
  17. package/dist-vue/_chunks/{PkChatbotAuth-AxAOI9t2.js → PkChatbotAuth-Bi508F1u.js} +57 -57
  18. package/dist-vue/_chunks/PkChatbotAuth-Bi508F1u.js.map +1 -0
  19. package/dist-vue/_chunks/{PkChatbotMessages-HbKhrhbg.js → PkChatbotMessages-BD-vUak6.js} +3 -3
  20. package/dist-vue/_chunks/{PkChatbotMessages-HbKhrhbg.js.map → PkChatbotMessages-BD-vUak6.js.map} +1 -1
  21. package/dist-vue/_chunks/{PkChatbotViewChat-DdxvITNb.js → PkChatbotViewChat-DJnjuhjt.js} +5 -5
  22. package/dist-vue/_chunks/{PkChatbotViewChat-DdxvITNb.js.map → PkChatbotViewChat-DJnjuhjt.js.map} +1 -1
  23. package/dist-vue/_chunks/{PkChatbotViewConversations-CWSrP36z.js → PkChatbotViewConversations-BCdolW0R.js} +2 -2
  24. package/dist-vue/_chunks/{PkChatbotViewConversations-CWSrP36z.js.map → PkChatbotViewConversations-BCdolW0R.js.map} +1 -1
  25. package/dist-vue/_chunks/{PkChatbotViewFiles-DzLp1WfU.js → PkChatbotViewFiles-Cudao8ew.js} +3 -3
  26. package/dist-vue/_chunks/{PkChatbotViewFiles-DzLp1WfU.js.map → PkChatbotViewFiles-Cudao8ew.js.map} +1 -1
  27. package/dist-vue/_chunks/{PkChatbotViewProfile-CHbn3W6F.js → PkChatbotViewProfile-DDsKOkcC.js} +2 -2
  28. package/dist-vue/_chunks/{PkChatbotViewProfile-CHbn3W6F.js.map → PkChatbotViewProfile-DDsKOkcC.js.map} +1 -1
  29. package/dist-vue/_chunks/{PkToolShowDiagram-BWCBuXH8.js → PkToolShowDiagram-RtkI_sKL.js} +2 -2
  30. package/dist-vue/_chunks/{PkToolShowDiagram-BWCBuXH8.js.map → PkToolShowDiagram-RtkI_sKL.js.map} +1 -1
  31. package/dist-vue/_chunks/{PkToolShowSources-Cc26LzRd.js → PkToolShowSources-gI947JOm.js} +2 -2
  32. package/dist-vue/_chunks/{PkToolShowSources-Cc26LzRd.js.map → PkToolShowSources-gI947JOm.js.map} +1 -1
  33. package/dist-vue/_chunks/{useChatbotStore-CMS2zFht.js → useChatbotStore-BwrBZJCq.js} +944 -1259
  34. package/dist-vue/_chunks/useChatbotStore-BwrBZJCq.js.map +1 -0
  35. package/dist-vue/_chunks/{web-Dzr6HJ14.js → web-CEmtEYdH.js} +89 -65
  36. package/dist-vue/_chunks/web-CEmtEYdH.js.map +1 -0
  37. package/dist-vue/apps/web-component/src/composables/useChatbotAuthForm.d.ts +0 -1
  38. package/dist-vue/composables.js +2809 -80
  39. package/dist-vue/composables.js.map +1 -1
  40. package/dist-vue/index.js +12 -12
  41. package/dist-vue/index.js.map +1 -1
  42. package/dist-vue/locales.js +1 -1
  43. package/dist-vue/packages/models/src/schema/User.d.ts +10 -0
  44. package/dist-vue/packages/models/src/schema/constants.d.ts +1 -1
  45. package/dist-vue/style.css +1 -1
  46. package/package.json +3 -3
  47. package/dist/_chunks/web-Dzr6HJ14.js.map +0 -1
  48. package/dist-vue/_chunks/Document-B6RpxFr9.js.map +0 -1
  49. package/dist-vue/_chunks/PkChatbotAuth-AxAOI9t2.js.map +0 -1
  50. package/dist-vue/_chunks/useChatbotStore-CMS2zFht.js.map +0 -1
  51. package/dist-vue/_chunks/web-Dzr6HJ14.js.map +0 -1
@@ -6,7 +6,7 @@ import { VvAlert as ee, VvButton as l, VvButtonGroup as te, VvIcon as ne } from
6
6
  import { Fragment as u, Transition as d, computed as f, createBlock as p, createCommentVNode as m, createElementBlock as h, createElementVNode as g, createTextVNode as _, createVNode as v, defineComponent as y, mergeModels as b, openBlock as x, ref as S, resolveDynamicComponent as re, toDisplayString as C, unref as w, useModel as T, watch as E, withCtx as D } from "vue";
7
7
  import { useI18n as ie } from "vue-i18n";
8
8
  //#region ../../packages/models/src/schema/User.ts
9
- var O = n(["user", "admin"]), k = t().min(8);
9
+ var O = n(["user", "admin"]), k = t().min(8).max(64);
10
10
  e({
11
11
  id: t(),
12
12
  name: t(),
@@ -90,17 +90,17 @@ var j = A.extend({
90
90
  "update:errorMessage",
91
91
  "update:success"
92
92
  ], ["update:errorMessage", "update:success"]),
93
- setup(n, { emit: a }) {
94
- let { t: o } = ie({ useScope: "global" }), y = n, { canShowImage: b, onImageError: O } = s(), k = T(n, "errorMessage"), A = T(n, "success"), q = a, J = S("sign-in");
93
+ setup(t, { emit: n }) {
94
+ let { t: a } = ie({ useScope: "global" }), o = t, { canShowImage: y, onImageError: b } = s(), O = T(t, "errorMessage"), A = T(t, "success"), q = n, J = S("sign-in");
95
95
  E(J, () => {
96
- k.value = void 0, A.value = void 0;
96
+ O.value = void 0, A.value = void 0;
97
97
  });
98
98
  function oe() {
99
99
  A.value = void 0, J.value = "sign-in";
100
100
  }
101
- let se = f(() => y.authMethods?.google || y.authMethods?.microsoft), ce = e({
101
+ let se = f(() => o.authMethods?.google || o.authMethods?.microsoft), ce = e({
102
102
  email: i(),
103
- password: t().min(8).max(64),
103
+ password: k,
104
104
  rememberMe: r().default(!1)
105
105
  }), le = e({ email: i() }), { VvForm: ue, VvFormField: Y } = c(ce, { lazyLoad: !0 }), { VvForm: de, VvFormField: X, clear: fe } = c(j, { lazyLoad: !0 }), { VvForm: pe, VvFormField: me, clear: he } = c(le, { lazyLoad: !0 });
106
106
  E(A, (e) => {
@@ -130,8 +130,8 @@ var j = A.extend({
130
130
  function $(e) {
131
131
  q("social", e);
132
132
  }
133
- return (e, t) => {
134
- let r = ne, i = l, a = ee, s = te;
133
+ return (e, n) => {
134
+ let r = ne, i = l, o = ee, s = te;
135
135
  return x(), h("div", M, [g("div", N, [v(d, {
136
136
  name: "pk-flip",
137
137
  mode: "out-in",
@@ -155,30 +155,30 @@ var j = A.extend({
155
155
  type: "button",
156
156
  modifiers: "link",
157
157
  icon: "chevron-left",
158
- label: w(o)("action.backToSignIn"),
158
+ label: w(a)("action.backToSignIn"),
159
159
  onClick: oe
160
160
  }, null, 8, ["label"])
161
161
  ], 512)) : (x(), h("div", L, [g("div", R, [
162
- w(b)(n.branding?.interface.logo) ? (x(), h("div", z, [g("img", {
163
- src: n.branding?.interface.logo,
164
- alt: n.branding?.name,
162
+ w(y)(t.branding?.interface.logo) ? (x(), h("div", z, [g("img", {
163
+ src: t.branding?.interface.logo,
164
+ alt: t.branding?.name,
165
165
  class: "w-64 h-64 border border-surface-3 rounded-full bg-surface-0 overflow-hidden bg-surface object-contain",
166
- onError: t[0] ||= (e) => w(O)(n.branding?.interface.logo)
166
+ onError: n[0] ||= (e) => w(b)(t.branding?.interface.logo)
167
167
  }, null, 40, B)])) : m("", !0),
168
- g("div", V, [n.branding?.name ? (x(), h("h1", H, C(n.branding.name), 1)) : m("", !0), (x(), p(re(n.branding?.name ? "h2" : "h1"), { class: "text-word-3 mb-0" }, {
169
- default: D(() => [J.value === "sign-in" ? (x(), h(u, { key: 0 }, [_(C(w(o)("auth.signInTitle")), 1)], 64)) : J.value === "sign-up" ? (x(), h(u, { key: 1 }, [_(C(w(o)("auth.signUpTitle")), 1)], 64)) : J.value === "reset" ? (x(), h(u, { key: 2 }, [_(C(w(o)("auth.resetTitle")), 1)], 64)) : m("", !0)]),
168
+ g("div", V, [t.branding?.name ? (x(), h("h1", H, C(t.branding.name), 1)) : m("", !0), (x(), p(re(t.branding?.name ? "h2" : "h1"), { class: "text-word-3 mb-0" }, {
169
+ default: D(() => [J.value === "sign-in" ? (x(), h(u, { key: 0 }, [_(C(w(a)("auth.signInTitle")), 1)], 64)) : J.value === "sign-up" ? (x(), h(u, { key: 1 }, [_(C(w(a)("auth.signUpTitle")), 1)], 64)) : J.value === "reset" ? (x(), h(u, { key: 2 }, [_(C(w(a)("auth.resetTitle")), 1)], 64)) : m("", !0)]),
170
170
  _: 1
171
171
  }))]),
172
- k.value ? (x(), p(a, {
172
+ O.value ? (x(), p(o, {
173
173
  key: 1,
174
174
  modifiers: "danger",
175
175
  class: "mb-md",
176
- content: k.value
176
+ content: O.value
177
177
  }, null, 8, ["content"])) : m("", !0),
178
178
  J.value === "sign-in" ? (x(), p(w(ue), {
179
179
  key: 2,
180
180
  class: "flex flex-col",
181
- readonly: n.loading,
181
+ readonly: t.loading,
182
182
  onSubmit: _e
183
183
  }, {
184
184
  default: D(() => [g("div", U, [
@@ -186,34 +186,34 @@ var j = A.extend({
186
186
  name: "email",
187
187
  type: "email",
188
188
  autocomplete: "username",
189
- label: w(o)("label.email"),
189
+ label: w(a)("label.email"),
190
190
  floating: ""
191
191
  }, null, 8, ["label"]),
192
192
  v(w(Y), {
193
193
  name: "password",
194
194
  type: "password",
195
195
  autocomplete: "current-password",
196
- label: w(o)("label.password"),
196
+ label: w(a)("label.password"),
197
197
  floating: ""
198
198
  }, null, 8, ["label"]),
199
199
  g("div", W, [v(i, {
200
200
  type: "button",
201
201
  modifiers: "link",
202
- label: w(o)("action.forgetPassword"),
203
- onClick: t[1] ||= (e) => J.value = "reset"
202
+ label: w(a)("action.forgetPassword"),
203
+ onClick: n[1] ||= (e) => J.value = "reset"
204
204
  }, null, 8, ["label"])]),
205
205
  v(w(Y), {
206
206
  name: "rememberMe",
207
207
  type: "checkbox",
208
- label: w(o)("label.rememberMe"),
208
+ label: w(a)("label.rememberMe"),
209
209
  switch: ""
210
210
  }, null, 8, ["label"])
211
211
  ]), v(i, {
212
212
  type: "submit",
213
213
  modifiers: "primary",
214
- loading: n.loading,
215
- disabled: n.loading,
216
- label: w(o)("action.signIn")
214
+ loading: t.loading,
215
+ disabled: t.loading,
216
+ label: w(a)("action.signIn")
217
217
  }, null, 8, [
218
218
  "loading",
219
219
  "disabled",
@@ -223,7 +223,7 @@ var j = A.extend({
223
223
  }, 8, ["readonly"])) : J.value === "sign-up" ? (x(), p(w(de), {
224
224
  key: 3,
225
225
  class: "flex flex-col",
226
- readonly: n.loading,
226
+ readonly: t.loading,
227
227
  onSubmit: Q
228
228
  }, {
229
229
  default: D(() => [g("div", G, [
@@ -231,36 +231,36 @@ var j = A.extend({
231
231
  name: "name",
232
232
  type: "text",
233
233
  autocomplete: "name",
234
- label: w(o)("label.name"),
234
+ label: w(a)("label.name"),
235
235
  floating: ""
236
236
  }, null, 8, ["label"]),
237
237
  v(w(X), {
238
238
  name: "email",
239
239
  type: "email",
240
240
  autocomplete: "username",
241
- label: w(o)("label.email"),
241
+ label: w(a)("label.email"),
242
242
  floating: ""
243
243
  }, null, 8, ["label"]),
244
244
  v(w(X), {
245
245
  name: "password",
246
246
  type: "password",
247
247
  autocomplete: "new-password",
248
- label: w(o)("label.password"),
248
+ label: w(a)("label.password"),
249
249
  floating: ""
250
250
  }, null, 8, ["label"]),
251
251
  v(w(X), {
252
252
  name: "passwordConfirmation",
253
253
  type: "password",
254
254
  autocomplete: "new-password",
255
- label: w(o)("label.confirmPassword"),
255
+ label: w(a)("label.confirmPassword"),
256
256
  floating: ""
257
257
  }, null, 8, ["label"])
258
258
  ]), v(i, {
259
259
  type: "submit",
260
260
  modifiers: "primary",
261
- loading: n.loading,
262
- disabled: n.loading,
263
- label: w(o)("action.continue")
261
+ loading: t.loading,
262
+ disabled: t.loading,
263
+ label: w(a)("action.continue")
264
264
  }, null, 8, [
265
265
  "loading",
266
266
  "disabled",
@@ -270,22 +270,22 @@ var j = A.extend({
270
270
  }, 8, ["readonly"])) : J.value === "reset" ? (x(), p(w(pe), {
271
271
  key: 4,
272
272
  class: "flex flex-col",
273
- readonly: n.loading,
273
+ readonly: t.loading,
274
274
  onSubmit: ve
275
275
  }, {
276
276
  default: D(() => [v(w(me), {
277
277
  name: "email",
278
278
  type: "email",
279
279
  autocomplete: "username",
280
- label: w(o)("label.email"),
280
+ label: w(a)("label.email"),
281
281
  floating: ""
282
282
  }, null, 8, ["label"]), v(s, { modifiers: "vertical" }, {
283
283
  default: D(() => [v(i, {
284
284
  type: "submit",
285
285
  modifiers: "primary",
286
- loading: n.loading,
287
- disabled: n.loading,
288
- label: w(o)("action.submit")
286
+ loading: t.loading,
287
+ disabled: t.loading,
288
+ label: w(a)("action.submit")
289
289
  }, null, 8, [
290
290
  "loading",
291
291
  "disabled",
@@ -295,48 +295,48 @@ var j = A.extend({
295
295
  })]),
296
296
  _: 1
297
297
  }, 8, ["readonly"])) : m("", !0),
298
- (J.value === "sign-in" || J.value === "sign-up") && se.value ? (x(), h(u, { key: 5 }, [g("div", ae, [g("span", null, C(w(o)("label.or")), 1)]), v(s, {
298
+ (J.value === "sign-in" || J.value === "sign-up") && se.value ? (x(), h(u, { key: 5 }, [g("div", ae, [g("span", null, C(w(a)("label.or")), 1)]), v(s, {
299
299
  modifiers: "vertical",
300
300
  class: "gap-xs mt-xs"
301
301
  }, {
302
- default: D(() => [n.authMethods?.google ? (x(), p(i, {
302
+ default: D(() => [t.authMethods?.google ? (x(), p(i, {
303
303
  key: 0,
304
304
  type: "button",
305
305
  modifiers: "secondary",
306
306
  icon: "logos:google-icon",
307
- disabled: n.loading,
308
- label: w(o)("action.signInWithSocialProvider", { provider: "Google" }),
309
- onClick: t[2] ||= (e) => $("google")
310
- }, null, 8, ["disabled", "label"])) : m("", !0), n.authMethods?.microsoft ? (x(), p(i, {
307
+ disabled: t.loading,
308
+ label: w(a)("action.signInWithSocialProvider", { provider: "Google" }),
309
+ onClick: n[2] ||= (e) => $("google")
310
+ }, null, 8, ["disabled", "label"])) : m("", !0), t.authMethods?.microsoft ? (x(), p(i, {
311
311
  key: 1,
312
312
  type: "button",
313
313
  modifiers: "secondary",
314
314
  icon: "logos:microsoft-icon",
315
- disabled: n.loading,
316
- label: w(o)("action.signInWithSocialProvider", { provider: "Microsoft" }),
317
- onClick: t[3] ||= (e) => $("microsoft")
315
+ disabled: t.loading,
316
+ label: w(a)("action.signInWithSocialProvider", { provider: "Microsoft" }),
317
+ onClick: n[3] ||= (e) => $("microsoft")
318
318
  }, null, 8, ["disabled", "label"])) : m("", !0)]),
319
319
  _: 1
320
320
  })], 64)) : m("", !0)
321
- ]), g("div", K, [J.value === "sign-in" ? (x(), h(u, { key: 0 }, [_(C(w(o)("auth.noAccount")) + " ", 1), v(i, {
321
+ ]), g("div", K, [J.value === "sign-in" ? (x(), h(u, { key: 0 }, [_(C(w(a)("auth.noAccount")) + " ", 1), v(i, {
322
322
  type: "button",
323
323
  modifiers: "link",
324
324
  class: "font-semibold",
325
- label: w(o)("action.signUp"),
326
- onClick: t[4] ||= (e) => J.value = "sign-up"
327
- }, null, 8, ["label"])], 64)) : J.value === "sign-up" ? (x(), h(u, { key: 1 }, [_(C(w(o)("auth.haveAccount")) + " ", 1), v(i, {
325
+ label: w(a)("action.signUp"),
326
+ onClick: n[4] ||= (e) => J.value = "sign-up"
327
+ }, null, 8, ["label"])], 64)) : J.value === "sign-up" ? (x(), h(u, { key: 1 }, [_(C(w(a)("auth.haveAccount")) + " ", 1), v(i, {
328
328
  type: "button",
329
329
  modifiers: "link",
330
330
  class: "font-semibold",
331
- label: w(o)("action.signIn"),
332
- onClick: t[5] ||= (e) => J.value = "sign-in"
331
+ label: w(a)("action.signIn"),
332
+ onClick: n[5] ||= (e) => J.value = "sign-in"
333
333
  }, null, 8, ["label"])], 64)) : (x(), p(i, {
334
334
  key: 2,
335
335
  type: "button",
336
336
  modifiers: "link",
337
337
  icon: "chevron-left",
338
- label: w(o)("action.backToSignIn"),
339
- onClick: t[6] ||= (e) => J.value = "sign-in"
338
+ label: w(a)("action.backToSignIn"),
339
+ onClick: n[6] ||= (e) => J.value = "sign-in"
340
340
  }, null, 8, ["label"]))])]))]),
341
341
  _: 1
342
342
  })])]);
@@ -346,4 +346,4 @@ var j = A.extend({
346
346
  //#endregion
347
347
  export { q as t };
348
348
 
349
- //# sourceMappingURL=PkChatbotAuth-AxAOI9t2.js.map
349
+ //# sourceMappingURL=PkChatbotAuth-Bi508F1u.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PkChatbotAuth-Bi508F1u.js","names":[],"sources":["../../../../packages/models/src/schema/User.ts","../../../../packages/components/src/chat/PkChatbotAuth.vue","../../../../packages/components/src/chat/PkChatbotAuth.vue"],"sourcesContent":["import * as z from 'zod'\nimport { MediaSchema } from './Media'\n\nconst RoleSchema = z.enum(['user', 'admin'])\n\n/** Shortest password better-auth accepts, see `packages/auth`. */\nexport const PASSWORD_MIN_LENGTH = 8\n\n/**\n * Longest password better-auth accepts. Since better-auth 1.7.6 a longer one\n * is refused on sign-in too (`PASSWORD_TOO_LONG`), so every form checks it\n * before sending and shows the translated validation error instead.\n */\nexport const PASSWORD_MAX_LENGTH = 64\n\n/** A password as better-auth accepts it, for every form that sends one. */\nexport const PasswordSchema = z\n .string()\n .min(PASSWORD_MIN_LENGTH)\n .max(PASSWORD_MAX_LENGTH)\n\nexport const UserSchema = z.object({\n id: z.string(),\n name: z.string(),\n email: z.string(),\n emailVerified: z.boolean(),\n image: z.string().nullable(),\n media: MediaSchema.optional().nullable(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n banned: z.boolean().nullable(),\n banReason: z.string().nullable(),\n banExpires: z.coerce.date().nullable(),\n isAnonymous: z.boolean().nullable(),\n role: RoleSchema,\n})\n\nexport type User = z.infer<typeof UserSchema>\n\n/**\n * Trimmed user shape for org-scoped lookups (avatars, chat logs, member\n * lists). Served by GET /:audience/users/:id, which only resolves users\n * visible to the caller's active organization.\n */\nexport const UserPreviewSchema = z.object({\n id: z.string(),\n name: z.string(),\n email: z.string().nullable(),\n image: z.string().nullable(),\n isAnonymous: z.boolean().nullable(),\n banned: z.boolean().nullable(),\n})\n\nexport type UserPreview = z.infer<typeof UserPreviewSchema>\n\nexport const PasswordChangeSchema = z\n .object({\n password: PasswordSchema,\n passwordConfirmation: PasswordSchema,\n })\n .refine((data) => data.password === data.passwordConfirmation, {\n params: {\n i18n: 'errors.passwordsDoNotMatch',\n },\n path: ['passwordConfirmation'],\n })\n\nexport type PasswordChange = z.infer<typeof PasswordChangeSchema>\n\nexport const PasswordChangeWithCurrentSchema = PasswordChangeSchema.extend({\n currentPassword: PasswordSchema,\n})\n\nexport type PasswordChangeWithCurrent = z.infer<\n typeof PasswordChangeWithCurrentSchema\n>\n\nexport const UserCreateSchema = PasswordChangeSchema.extend({\n name: z.string().min(1),\n email: z.email(),\n media: MediaSchema.optional(),\n role: RoleSchema.optional().default('user'),\n})\n\nexport type UserCreate = z.infer<typeof UserCreateSchema>\n\nexport const UserUpdateSchema = z.object({\n id: z.string(),\n name: z.string(),\n email: z.string(),\n emailVerified: z.boolean().optional(),\n image: z.string().nullish(),\n role: RoleSchema,\n media: MediaSchema.optional().nullable(),\n banned: z.boolean().nullish(),\n banReason: z.string().nullish(),\n banExpires: z.string().nullish(),\n isAnonymous: z.boolean().nullish(),\n})\n\nexport type UserUpdate = z.infer<typeof UserUpdateSchema>\n\nexport const SignUpSchema = PasswordChangeSchema.extend({\n name: z.string().min(1),\n email: z.email(),\n rememberMe: z.boolean().optional(),\n})\n\nexport type SignUp = z.infer<typeof SignUpSchema>\n","<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { useForm } from '@volverjs/form-vue'\n import * as z from 'zod'\n import { PasswordSchema, SignUpSchema } from 'models'\n import type { AgentBranding, AuthMethods } from 'models'\n import { useImageFallback } from 'composables'\n\n const { t: $t } = useI18n({\n useScope: 'global',\n })\n\n const props = withDefaults(\n defineProps<{\n branding?: AgentBranding\n authMethods?: AuthMethods\n loading?: boolean\n }>(),\n {\n branding: undefined,\n authMethods: undefined,\n loading: false,\n },\n )\n\n // A deleted agent logo would leave a broken glyph above the sign-in form:\n // drop the whole block instead, the agent name below already identifies it.\n const { canShowImage, onImageError } = useImageFallback()\n\n const errorMessage = defineModel<string | undefined>('errorMessage', {\n default: undefined,\n })\n /**\n * Non-error feedback (e.g. \"check your inbox\" after sign-up / reset).\n * When set, a dedicated success screen replaces the form.\n */\n const success = defineModel<{ title: string; message: string } | undefined>(\n 'success',\n { default: undefined },\n )\n\n const emit = defineEmits<{\n (\n e: 'sign-in',\n payload: {\n email: string\n password: string\n rememberMe: boolean\n },\n ): void\n (\n e: 'sign-up',\n payload: { email: string; password: string; name: string },\n ): void\n (e: 'request-reset', payload: { email: string }): void\n (e: 'social', provider: 'google' | 'microsoft'): void\n (e: 'update:errorMessage', message?: string): void\n (e: 'update:success', value?: { title: string; message: string }): void\n }>()\n\n type Mode = 'sign-in' | 'sign-up' | 'reset'\n const mode = ref<Mode>('sign-in')\n watch(mode, () => {\n errorMessage.value = undefined\n success.value = undefined\n })\n\n /** Returns to the sign-in form, clearing any success feedback. */\n function backToSignIn() {\n success.value = undefined\n mode.value = 'sign-in'\n }\n\n const showSocialButtons = computed(\n () => props.authMethods?.google || props.authMethods?.microsoft,\n )\n\n const signInSchema = z.object({\n email: z.email(),\n password: PasswordSchema,\n rememberMe: z.boolean().default(false),\n })\n\n const resetSchema = z.object({\n email: z.email(),\n })\n\n const { VvForm: VvSignInForm, VvFormField: VvSignInField } = useForm(\n signInSchema,\n { lazyLoad: true },\n )\n const {\n VvForm: VvSignUpForm,\n VvFormField: VvSignUpField,\n clear: clearSignUp,\n } = useForm(SignUpSchema, { lazyLoad: true })\n const {\n VvForm: VvResetForm,\n VvFormField: VvResetField,\n clear: clearReset,\n } = useForm(resetSchema, { lazyLoad: true })\n\n // Empty the sign-up / reset forms once their submission succeeds so a\n // later \"back to sign in\" doesn't reveal stale input.\n watch(success, (value) => {\n if (value) {\n clearSignUp()\n clearReset()\n }\n })\n\n // Move focus to the success card once the flip animation has finished\n // (the out-in transition mounts it only after the form leaves), so\n // screen-reader/keyboard users are announced the result.\n const successCard = ref<HTMLElement>()\n function focusSuccessCard() {\n if (success.value) {\n successCard.value?.focus()\n }\n }\n\n function onSignIn(data: {\n email: string\n password: string\n rememberMe?: boolean\n }) {\n emit('sign-in', {\n email: data.email,\n password: data.password,\n rememberMe: data.rememberMe ?? false,\n })\n }\n\n function onSignUp(data: { name: string; email: string; password: string }) {\n emit('sign-up', {\n name: data.name.trim(),\n email: data.email,\n password: data.password,\n })\n }\n\n function onReset(data: { email: string }) {\n emit('request-reset', { email: data.email })\n }\n\n function handleSocial(provider: 'google' | 'microsoft') {\n emit('social', provider)\n }\n</script>\n\n<template>\n <div\n class=\"pk-chatbot-auth flex flex-col items-center justify-center w-full min-h-full p-lg overflow-y-auto\">\n <div class=\"pk-chatbot-auth__flip w-full max-w-384 mx-auto my-auto\">\n <Transition\n name=\"pk-flip\"\n mode=\"out-in\"\n @after-enter=\"focusSuccessCard\">\n <!-- Success screen (sign-up / reset feedback) -->\n <div\n v-if=\"success\"\n ref=\"successCard\"\n key=\"success\"\n tabindex=\"-1\"\n class=\"pk-chatbot-auth__flip-card outline-none flex flex-col text-center leading-normal\">\n <div\n class=\"pk-chatbot-auth__success-icon w-64 h-64 border border-surface-3 rounded-full bg-surface-0 flex items-center justify-center overflow-hidden bg-surface mx-auto mb-md\">\n <VvIcon\n name=\"ri:mail-check-line\"\n aria-hidden=\"true\"\n class=\"text-success w-32 h-32\" />\n </div>\n <h1 class=\"font-bold text-18 mb-xs\">\n {{ success.title }}\n </h1>\n <p class=\"mb-lg text-16 text-word-3\">\n {{ success.message }}\n </p>\n <VvButton\n type=\"button\"\n modifiers=\"link\"\n icon=\"chevron-left\"\n :label=\"$t('action.backToSignIn')\"\n @click=\"backToSignIn\" />\n </div>\n\n <!-- Sign-in / sign-up / reset forms -->\n <div\n v-else\n key=\"form\"\n class=\"pk-chatbot-auth__flip-card flex flex-col\">\n <!-- Form Container -->\n <div class=\"flex flex-col\">\n <!-- Relative Header Logo -->\n <div\n v-if=\"canShowImage(branding?.interface.logo)\"\n class=\"flex justify-center mb-md\">\n <img\n :src=\"branding?.interface.logo\"\n :alt=\"branding?.name\"\n class=\"w-64 h-64 border border-surface-3 rounded-full bg-surface-0 overflow-hidden bg-surface object-contain\"\n @error=\"\n onImageError(branding?.interface.logo)\n \" />\n </div>\n\n <div class=\"text-center leading-normal mb-lg\">\n <h1\n v-if=\"branding?.name\"\n class=\"font-bold text-20 m-0\">\n {{ branding.name }}\n </h1>\n <component\n :is=\"branding?.name ? 'h2' : 'h1'\"\n class=\"text-word-3 mb-0\">\n <template v-if=\"mode === 'sign-in'\">\n {{ $t('auth.signInTitle') }}\n </template>\n <template v-else-if=\"mode === 'sign-up'\">\n {{ $t('auth.signUpTitle') }}\n </template>\n <template v-else-if=\"mode === 'reset'\">\n {{ $t('auth.resetTitle') }}\n </template>\n </component>\n </div>\n\n <!-- Error message -->\n <VvAlert\n v-if=\"errorMessage\"\n modifiers=\"danger\"\n class=\"mb-md\"\n :content=\"errorMessage\" />\n\n <!-- Sign In -->\n <VvSignInForm\n v-if=\"mode === 'sign-in'\"\n class=\"flex flex-col\"\n :readonly=\"loading\"\n @submit=\"onSignIn\">\n <div class=\"mb-md\">\n <VvSignInField\n name=\"email\"\n type=\"email\"\n autocomplete=\"username\"\n :label=\"$t('label.email')\"\n floating />\n <VvSignInField\n name=\"password\"\n type=\"password\"\n autocomplete=\"current-password\"\n :label=\"$t('label.password')\"\n floating />\n <div class=\"mb-md\">\n <VvButton\n type=\"button\"\n modifiers=\"link\"\n :label=\"$t('action.forgetPassword')\"\n @click=\"mode = 'reset'\" />\n </div>\n <VvSignInField\n name=\"rememberMe\"\n type=\"checkbox\"\n :label=\"$t('label.rememberMe')\"\n switch />\n </div>\n <VvButton\n type=\"submit\"\n modifiers=\"primary\"\n :loading=\"loading\"\n :disabled=\"loading\"\n :label=\"$t('action.signIn')\" />\n </VvSignInForm>\n\n <!-- Sign Up -->\n <VvSignUpForm\n v-else-if=\"mode === 'sign-up'\"\n class=\"flex flex-col\"\n :readonly=\"loading\"\n @submit=\"onSignUp\">\n <div class=\"mb-md\">\n <VvSignUpField\n name=\"name\"\n type=\"text\"\n autocomplete=\"name\"\n :label=\"$t('label.name')\"\n floating />\n <VvSignUpField\n name=\"email\"\n type=\"email\"\n autocomplete=\"username\"\n :label=\"$t('label.email')\"\n floating />\n <VvSignUpField\n name=\"password\"\n type=\"password\"\n autocomplete=\"new-password\"\n :label=\"$t('label.password')\"\n floating />\n <VvSignUpField\n name=\"passwordConfirmation\"\n type=\"password\"\n autocomplete=\"new-password\"\n :label=\"$t('label.confirmPassword')\"\n floating />\n </div>\n <VvButton\n type=\"submit\"\n modifiers=\"primary\"\n :loading=\"loading\"\n :disabled=\"loading\"\n :label=\"$t('action.continue')\" />\n </VvSignUpForm>\n\n <!-- Reset Password -->\n <VvResetForm\n v-else-if=\"mode === 'reset'\"\n class=\"flex flex-col\"\n :readonly=\"loading\"\n @submit=\"onReset\">\n <VvResetField\n name=\"email\"\n type=\"email\"\n autocomplete=\"username\"\n :label=\"$t('label.email')\"\n floating />\n <VvButtonGroup modifiers=\"vertical\">\n <VvButton\n type=\"submit\"\n modifiers=\"primary\"\n :loading=\"loading\"\n :disabled=\"loading\"\n :label=\"$t('action.submit')\" />\n </VvButtonGroup>\n </VvResetForm>\n\n <!-- Social providers (shared by sign-in and sign-up) -->\n <template\n v-if=\"\n (mode === 'sign-in' || mode === 'sign-up') &&\n showSocialButtons\n \">\n <div class=\"hr mt-xs\">\n <span>{{ $t('label.or') }}</span>\n </div>\n <VvButtonGroup\n modifiers=\"vertical\"\n class=\"gap-xs mt-xs\">\n <VvButton\n v-if=\"authMethods?.google\"\n type=\"button\"\n modifiers=\"secondary\"\n icon=\"logos:google-icon\"\n :disabled=\"loading\"\n :label=\"\n $t('action.signInWithSocialProvider', {\n provider: 'Google',\n })\n \"\n @click=\"handleSocial('google')\" />\n <VvButton\n v-if=\"authMethods?.microsoft\"\n type=\"button\"\n modifiers=\"secondary\"\n icon=\"logos:microsoft-icon\"\n :disabled=\"loading\"\n :label=\"\n $t('action.signInWithSocialProvider', {\n provider: 'Microsoft',\n })\n \"\n @click=\"handleSocial('microsoft')\" />\n </VvButtonGroup>\n </template>\n </div>\n\n <!-- Footer below Form -->\n <div class=\"pt-lg text-center text-word-3\">\n <template v-if=\"mode === 'sign-in'\">\n {{ $t('auth.noAccount') }}\n <VvButton\n type=\"button\"\n modifiers=\"link\"\n class=\"font-semibold\"\n :label=\"$t('action.signUp')\"\n @click=\"mode = 'sign-up'\" />\n </template>\n <template v-else-if=\"mode === 'sign-up'\">\n {{ $t('auth.haveAccount') }}\n <VvButton\n type=\"button\"\n modifiers=\"link\"\n class=\"font-semibold\"\n :label=\"$t('action.signIn')\"\n @click=\"mode = 'sign-in'\" />\n </template>\n <template v-else>\n <VvButton\n type=\"button\"\n modifiers=\"link\"\n icon=\"chevron-left\"\n :label=\"$t('action.backToSignIn')\"\n @click=\"mode = 'sign-in'\" />\n </template>\n </div>\n </div>\n </Transition>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n .pk-chatbot-auth {\n // Flip-card reveal between the form and the success screen, mirroring\n // the classic login in apps/frontend.\n &__flip {\n display: grid;\n transform-style: preserve-3d;\n perspective: 1000px;\n }\n\n &__flip-card {\n grid-area: 1 / 1;\n backface-visibility: hidden;\n transform-style: preserve-3d;\n }\n\n // Subtle pop on the success check icon once the card has flipped in.\n &__success-icon {\n animation: pk-chatbot-auth-check-pop 0.4s ease-out 0.3s backwards;\n }\n }\n\n .pk-flip-enter-active {\n animation: pk-chatbot-auth-flip-in 0.6s ease-out;\n }\n\n .pk-flip-leave-active {\n animation: pk-chatbot-auth-flip-out 0.6s ease-in;\n }\n\n @keyframes pk-chatbot-auth-flip-in {\n 0% {\n transform: rotateY(-180deg);\n opacity: 0;\n }\n\n 100% {\n transform: rotateY(0deg);\n opacity: 1;\n }\n }\n\n @keyframes pk-chatbot-auth-flip-out {\n 0% {\n transform: rotateY(0deg);\n opacity: 1;\n }\n\n 100% {\n transform: rotateY(180deg);\n opacity: 0;\n }\n }\n\n @keyframes pk-chatbot-auth-check-pop {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n\n 60% {\n transform: scale(1.15);\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n</style>\n","<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import { useI18n } from 'vue-i18n'\n import { useForm } from '@volverjs/form-vue'\n import * as z from 'zod'\n import { PasswordSchema, SignUpSchema } from 'models'\n import type { AgentBranding, AuthMethods } from 'models'\n import { useImageFallback } from 'composables'\n\n const { t: $t } = useI18n({\n useScope: 'global',\n })\n\n const props = withDefaults(\n defineProps<{\n branding?: AgentBranding\n authMethods?: AuthMethods\n loading?: boolean\n }>(),\n {\n branding: undefined,\n authMethods: undefined,\n loading: false,\n },\n )\n\n // A deleted agent logo would leave a broken glyph above the sign-in form:\n // drop the whole block instead, the agent name below already identifies it.\n const { canShowImage, onImageError } = useImageFallback()\n\n const errorMessage = defineModel<string | undefined>('errorMessage', {\n default: undefined,\n })\n /**\n * Non-error feedback (e.g. \"check your inbox\" after sign-up / reset).\n * When set, a dedicated success screen replaces the form.\n */\n const success = defineModel<{ title: string; message: string } | undefined>(\n 'success',\n { default: undefined },\n )\n\n const emit = defineEmits<{\n (\n e: 'sign-in',\n payload: {\n email: string\n password: string\n rememberMe: boolean\n },\n ): void\n (\n e: 'sign-up',\n payload: { email: string; password: string; name: string },\n ): void\n (e: 'request-reset', payload: { email: string }): void\n (e: 'social', provider: 'google' | 'microsoft'): void\n (e: 'update:errorMessage', message?: string): void\n (e: 'update:success', value?: { title: string; message: string }): void\n }>()\n\n type Mode = 'sign-in' | 'sign-up' | 'reset'\n const mode = ref<Mode>('sign-in')\n watch(mode, () => {\n errorMessage.value = undefined\n success.value = undefined\n })\n\n /** Returns to the sign-in form, clearing any success feedback. */\n function backToSignIn() {\n success.value = undefined\n mode.value = 'sign-in'\n }\n\n const showSocialButtons = computed(\n () => props.authMethods?.google || props.authMethods?.microsoft,\n )\n\n const signInSchema = z.object({\n email: z.email(),\n password: PasswordSchema,\n rememberMe: z.boolean().default(false),\n })\n\n const resetSchema = z.object({\n email: z.email(),\n })\n\n const { VvForm: VvSignInForm, VvFormField: VvSignInField } = useForm(\n signInSchema,\n { lazyLoad: true },\n )\n const {\n VvForm: VvSignUpForm,\n VvFormField: VvSignUpField,\n clear: clearSignUp,\n } = useForm(SignUpSchema, { lazyLoad: true })\n const {\n VvForm: VvResetForm,\n VvFormField: VvResetField,\n clear: clearReset,\n } = useForm(resetSchema, { lazyLoad: true })\n\n // Empty the sign-up / reset forms once their submission succeeds so a\n // later \"back to sign in\" doesn't reveal stale input.\n watch(success, (value) => {\n if (value) {\n clearSignUp()\n clearReset()\n }\n })\n\n // Move focus to the success card once the flip animation has finished\n // (the out-in transition mounts it only after the form leaves), so\n // screen-reader/keyboard users are announced the result.\n const successCard = ref<HTMLElement>()\n function focusSuccessCard() {\n if (success.value) {\n successCard.value?.focus()\n }\n }\n\n function onSignIn(data: {\n email: string\n password: string\n rememberMe?: boolean\n }) {\n emit('sign-in', {\n email: data.email,\n password: data.password,\n rememberMe: data.rememberMe ?? false,\n })\n }\n\n function onSignUp(data: { name: string; email: string; password: string }) {\n emit('sign-up', {\n name: data.name.trim(),\n email: data.email,\n password: data.password,\n })\n }\n\n function onReset(data: { email: string }) {\n emit('request-reset', { email: data.email })\n }\n\n function handleSocial(provider: 'google' | 'microsoft') {\n emit('social', provider)\n }\n</script>\n\n<template>\n <div\n class=\"pk-chatbot-auth flex flex-col items-center justify-center w-full min-h-full p-lg overflow-y-auto\">\n <div class=\"pk-chatbot-auth__flip w-full max-w-384 mx-auto my-auto\">\n <Transition\n name=\"pk-flip\"\n mode=\"out-in\"\n @after-enter=\"focusSuccessCard\">\n <!-- Success screen (sign-up / reset feedback) -->\n <div\n v-if=\"success\"\n ref=\"successCard\"\n key=\"success\"\n tabindex=\"-1\"\n class=\"pk-chatbot-auth__flip-card outline-none flex flex-col text-center leading-normal\">\n <div\n class=\"pk-chatbot-auth__success-icon w-64 h-64 border border-surface-3 rounded-full bg-surface-0 flex items-center justify-center overflow-hidden bg-surface mx-auto mb-md\">\n <VvIcon\n name=\"ri:mail-check-line\"\n aria-hidden=\"true\"\n class=\"text-success w-32 h-32\" />\n </div>\n <h1 class=\"font-bold text-18 mb-xs\">\n {{ success.title }}\n </h1>\n <p class=\"mb-lg text-16 text-word-3\">\n {{ success.message }}\n </p>\n <VvButton\n type=\"button\"\n modifiers=\"link\"\n icon=\"chevron-left\"\n :label=\"$t('action.backToSignIn')\"\n @click=\"backToSignIn\" />\n </div>\n\n <!-- Sign-in / sign-up / reset forms -->\n <div\n v-else\n key=\"form\"\n class=\"pk-chatbot-auth__flip-card flex flex-col\">\n <!-- Form Container -->\n <div class=\"flex flex-col\">\n <!-- Relative Header Logo -->\n <div\n v-if=\"canShowImage(branding?.interface.logo)\"\n class=\"flex justify-center mb-md\">\n <img\n :src=\"branding?.interface.logo\"\n :alt=\"branding?.name\"\n class=\"w-64 h-64 border border-surface-3 rounded-full bg-surface-0 overflow-hidden bg-surface object-contain\"\n @error=\"\n onImageError(branding?.interface.logo)\n \" />\n </div>\n\n <div class=\"text-center leading-normal mb-lg\">\n <h1\n v-if=\"branding?.name\"\n class=\"font-bold text-20 m-0\">\n {{ branding.name }}\n </h1>\n <component\n :is=\"branding?.name ? 'h2' : 'h1'\"\n class=\"text-word-3 mb-0\">\n <template v-if=\"mode === 'sign-in'\">\n {{ $t('auth.signInTitle') }}\n </template>\n <template v-else-if=\"mode === 'sign-up'\">\n {{ $t('auth.signUpTitle') }}\n </template>\n <template v-else-if=\"mode === 'reset'\">\n {{ $t('auth.resetTitle') }}\n </template>\n </component>\n </div>\n\n <!-- Error message -->\n <VvAlert\n v-if=\"errorMessage\"\n modifiers=\"danger\"\n class=\"mb-md\"\n :content=\"errorMessage\" />\n\n <!-- Sign In -->\n <VvSignInForm\n v-if=\"mode === 'sign-in'\"\n class=\"flex flex-col\"\n :readonly=\"loading\"\n @submit=\"onSignIn\">\n <div class=\"mb-md\">\n <VvSignInField\n name=\"email\"\n type=\"email\"\n autocomplete=\"username\"\n :label=\"$t('label.email')\"\n floating />\n <VvSignInField\n name=\"password\"\n type=\"password\"\n autocomplete=\"current-password\"\n :label=\"$t('label.password')\"\n floating />\n <div class=\"mb-md\">\n <VvButton\n type=\"button\"\n modifiers=\"link\"\n :label=\"$t('action.forgetPassword')\"\n @click=\"mode = 'reset'\" />\n </div>\n <VvSignInField\n name=\"rememberMe\"\n type=\"checkbox\"\n :label=\"$t('label.rememberMe')\"\n switch />\n </div>\n <VvButton\n type=\"submit\"\n modifiers=\"primary\"\n :loading=\"loading\"\n :disabled=\"loading\"\n :label=\"$t('action.signIn')\" />\n </VvSignInForm>\n\n <!-- Sign Up -->\n <VvSignUpForm\n v-else-if=\"mode === 'sign-up'\"\n class=\"flex flex-col\"\n :readonly=\"loading\"\n @submit=\"onSignUp\">\n <div class=\"mb-md\">\n <VvSignUpField\n name=\"name\"\n type=\"text\"\n autocomplete=\"name\"\n :label=\"$t('label.name')\"\n floating />\n <VvSignUpField\n name=\"email\"\n type=\"email\"\n autocomplete=\"username\"\n :label=\"$t('label.email')\"\n floating />\n <VvSignUpField\n name=\"password\"\n type=\"password\"\n autocomplete=\"new-password\"\n :label=\"$t('label.password')\"\n floating />\n <VvSignUpField\n name=\"passwordConfirmation\"\n type=\"password\"\n autocomplete=\"new-password\"\n :label=\"$t('label.confirmPassword')\"\n floating />\n </div>\n <VvButton\n type=\"submit\"\n modifiers=\"primary\"\n :loading=\"loading\"\n :disabled=\"loading\"\n :label=\"$t('action.continue')\" />\n </VvSignUpForm>\n\n <!-- Reset Password -->\n <VvResetForm\n v-else-if=\"mode === 'reset'\"\n class=\"flex flex-col\"\n :readonly=\"loading\"\n @submit=\"onReset\">\n <VvResetField\n name=\"email\"\n type=\"email\"\n autocomplete=\"username\"\n :label=\"$t('label.email')\"\n floating />\n <VvButtonGroup modifiers=\"vertical\">\n <VvButton\n type=\"submit\"\n modifiers=\"primary\"\n :loading=\"loading\"\n :disabled=\"loading\"\n :label=\"$t('action.submit')\" />\n </VvButtonGroup>\n </VvResetForm>\n\n <!-- Social providers (shared by sign-in and sign-up) -->\n <template\n v-if=\"\n (mode === 'sign-in' || mode === 'sign-up') &&\n showSocialButtons\n \">\n <div class=\"hr mt-xs\">\n <span>{{ $t('label.or') }}</span>\n </div>\n <VvButtonGroup\n modifiers=\"vertical\"\n class=\"gap-xs mt-xs\">\n <VvButton\n v-if=\"authMethods?.google\"\n type=\"button\"\n modifiers=\"secondary\"\n icon=\"logos:google-icon\"\n :disabled=\"loading\"\n :label=\"\n $t('action.signInWithSocialProvider', {\n provider: 'Google',\n })\n \"\n @click=\"handleSocial('google')\" />\n <VvButton\n v-if=\"authMethods?.microsoft\"\n type=\"button\"\n modifiers=\"secondary\"\n icon=\"logos:microsoft-icon\"\n :disabled=\"loading\"\n :label=\"\n $t('action.signInWithSocialProvider', {\n provider: 'Microsoft',\n })\n \"\n @click=\"handleSocial('microsoft')\" />\n </VvButtonGroup>\n </template>\n </div>\n\n <!-- Footer below Form -->\n <div class=\"pt-lg text-center text-word-3\">\n <template v-if=\"mode === 'sign-in'\">\n {{ $t('auth.noAccount') }}\n <VvButton\n type=\"button\"\n modifiers=\"link\"\n class=\"font-semibold\"\n :label=\"$t('action.signUp')\"\n @click=\"mode = 'sign-up'\" />\n </template>\n <template v-else-if=\"mode === 'sign-up'\">\n {{ $t('auth.haveAccount') }}\n <VvButton\n type=\"button\"\n modifiers=\"link\"\n class=\"font-semibold\"\n :label=\"$t('action.signIn')\"\n @click=\"mode = 'sign-in'\" />\n </template>\n <template v-else>\n <VvButton\n type=\"button\"\n modifiers=\"link\"\n icon=\"chevron-left\"\n :label=\"$t('action.backToSignIn')\"\n @click=\"mode = 'sign-in'\" />\n </template>\n </div>\n </div>\n </Transition>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n .pk-chatbot-auth {\n // Flip-card reveal between the form and the success screen, mirroring\n // the classic login in apps/frontend.\n &__flip {\n display: grid;\n transform-style: preserve-3d;\n perspective: 1000px;\n }\n\n &__flip-card {\n grid-area: 1 / 1;\n backface-visibility: hidden;\n transform-style: preserve-3d;\n }\n\n // Subtle pop on the success check icon once the card has flipped in.\n &__success-icon {\n animation: pk-chatbot-auth-check-pop 0.4s ease-out 0.3s backwards;\n }\n }\n\n .pk-flip-enter-active {\n animation: pk-chatbot-auth-flip-in 0.6s ease-out;\n }\n\n .pk-flip-leave-active {\n animation: pk-chatbot-auth-flip-out 0.6s ease-in;\n }\n\n @keyframes pk-chatbot-auth-flip-in {\n 0% {\n transform: rotateY(-180deg);\n opacity: 0;\n }\n\n 100% {\n transform: rotateY(0deg);\n opacity: 1;\n }\n }\n\n @keyframes pk-chatbot-auth-flip-out {\n 0% {\n transform: rotateY(0deg);\n opacity: 1;\n }\n\n 100% {\n transform: rotateY(180deg);\n opacity: 0;\n }\n }\n\n @keyframes pk-chatbot-auth-check-pop {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n\n 60% {\n transform: scale(1.15);\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n</style>\n"],"mappings":"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"}
@@ -20,7 +20,7 @@ var W = (e) => e.normalize("NFD").replace(/[\u0300-\u036f]/g, ""), _e = (e) => e
20
20
  showCalendarEvent: j(() => import("./PkToolShowCalendarEvent-BsBdsbV0.js").then((e) => e.n)),
21
21
  showComparison: j(() => import("./PkToolShowComparison-BLn4pkno.js").then((e) => e.n)),
22
22
  showContactForm: j(() => import("./PkToolShowContactForm-_x_dbiHn.js").then((e) => e.n)),
23
- showDiagram: j(() => import("./PkToolShowDiagram-BWCBuXH8.js")),
23
+ showDiagram: j(() => import("./PkToolShowDiagram-RtkI_sKL.js")),
24
24
  showEmail: j(() => import("./PkToolShowEmail-CRQjoJr1.js").then((e) => e.n)),
25
25
  showImageGallery: j(() => import("./PkToolShowImageGallery-DudQzBx4.js").then((e) => e.n)),
26
26
  showLocation: j(() => import("./PkToolShowLocation-Bv6sLN5P.js").then((e) => e.n)),
@@ -29,7 +29,7 @@ var W = (e) => e.normalize("NFD").replace(/[\u0300-\u036f]/g, ""), _e = (e) => e
29
29
  showMultipleChoice: j(() => import("./PkToolShowForm-IPAkJIXh.js").then((e) => e.n)),
30
30
  showProductList: j(() => import("./PkToolShowProductList-tOYjd2bq.js").then((e) => e.n)),
31
31
  showQrCode: j(() => import("./PkToolShowQrCode-DEAvfLFu.js").then((e) => e.n)),
32
- showSources: j(() => import("./PkToolShowSources-Cc26LzRd.js").then((e) => e.n)),
32
+ showSources: j(() => import("./PkToolShowSources-gI947JOm.js").then((e) => e.n)),
33
33
  showSuggestedReply: j(() => import("./PkToolShowSuggestedReply-DA4NEjHB.js").then((e) => e.n)),
34
34
  showVideo: j(() => import("./PkToolShowVideo-BZOTu2Qe.js")),
35
35
  showWeather: j(() => import("./PkToolShowWeather-Bzqalzh8.js")),
@@ -773,4 +773,4 @@ var Oe = ["aria-busy"], ke = {
773
773
  //#endregion
774
774
  export { ye as a, ve as i, be as n, _e as r, et as t };
775
775
 
776
- //# sourceMappingURL=PkChatbotMessages-HbKhrhbg.js.map
776
+ //# sourceMappingURL=PkChatbotMessages-BD-vUak6.js.map