@8wave/ai-elements 0.114.0-beta.8 → 0.115.0-beta.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.
Files changed (164) hide show
  1. package/dist/_chunks/Agent-DK76k05_.js +566 -0
  2. package/dist/_chunks/Agent-DK76k05_.js.map +1 -0
  3. package/dist/_chunks/{PkStreamingMarkdown-C1sANAr5.js → PkStreamingMarkdown-BKxA6Ntl.js} +688 -672
  4. package/dist/_chunks/PkStreamingMarkdown-BKxA6Ntl.js.map +1 -0
  5. package/dist/_chunks/{PkToolRequestGeolocation-BbxYKt-9.js → PkToolRequestGeolocation-OF1PWhMw.js} +2 -2
  6. package/{dist-vue/_chunks/PkToolRequestGeolocation-9vfYNaQo.js.map → dist/_chunks/PkToolRequestGeolocation-OF1PWhMw.js.map} +1 -1
  7. package/dist/_chunks/{PkToolRequestOAuthConnection-CTp2w60F.js → PkToolRequestOAuthConnection-CgQePKKb.js} +4 -4
  8. package/dist/_chunks/PkToolRequestOAuthConnection-CgQePKKb.js.map +1 -0
  9. package/dist/_chunks/{PkToolShowArtifact-BfTjxGOT.js → PkToolShowArtifact-CHxeuKEU.js} +2 -2
  10. package/dist/_chunks/{PkToolShowArtifact-BfTjxGOT.js.map → PkToolShowArtifact-CHxeuKEU.js.map} +1 -1
  11. package/dist/_chunks/PkToolShowComparison-8d6fAhRp.js +72 -0
  12. package/dist/_chunks/PkToolShowComparison-8d6fAhRp.js.map +1 -0
  13. package/dist/_chunks/{PkToolShowContactForm-PFpY9dIp.js → PkToolShowContactForm-DqVLVwqJ.js} +2 -2
  14. package/dist/_chunks/{PkToolShowContactForm-PFpY9dIp.js.map → PkToolShowContactForm-DqVLVwqJ.js.map} +1 -1
  15. package/dist/_chunks/{PkToolShowForm-CMtSN0oX.js → PkToolShowForm-YJQPYfEe.js} +5 -5
  16. package/dist/_chunks/{PkToolShowForm-CMtSN0oX.js.map → PkToolShowForm-YJQPYfEe.js.map} +1 -1
  17. package/dist/_chunks/{PkToolShowSources-C6cu66Ts.js → PkToolShowSources-kGQlIKaN.js} +3 -3
  18. package/dist/_chunks/{PkToolShowSources-C6cu66Ts.js.map → PkToolShowSources-kGQlIKaN.js.map} +1 -1
  19. package/dist/_chunks/{PkToolShowSuggestedReply-CFO8wV1b.js → PkToolShowSuggestedReply-Dl4x_nEJ.js} +2 -2
  20. package/dist/_chunks/{PkToolShowSuggestedReply-CFO8wV1b.js.map → PkToolShowSuggestedReply-Dl4x_nEJ.js.map} +1 -1
  21. package/dist/_chunks/{markdown-BRD-hDrH.js → markdown-B4cYQGBo.js} +37 -21
  22. package/dist/_chunks/markdown-B4cYQGBo.js.map +1 -0
  23. package/dist/ai-elements.es.js +3177 -2748
  24. package/dist/ai-elements.es.js.map +1 -1
  25. package/dist-vue/PkChatbot.js +1 -1
  26. package/dist-vue/PkChatbotAuth.js +1 -1
  27. package/dist-vue/PkChatbotEmptyState.js +1 -1
  28. package/dist-vue/PkChatbotInput.js +1 -1
  29. package/dist-vue/PkChatbotMessages.js +1 -1
  30. package/dist-vue/PkChatbotStepPayload.js +1 -1
  31. package/dist-vue/PkChatbotStepToolDetail.js +1 -1
  32. package/dist-vue/PkChatbotSteps.js +1 -1
  33. package/dist-vue/PkChatbotViewChat.js +1 -1
  34. package/dist-vue/PkChatbotViewConversations.js +1 -1
  35. package/dist-vue/PkChatbotViewFiles.js +1 -1
  36. package/dist-vue/PkChatbotViewProfile.js +1 -1
  37. package/dist-vue/_chunks/{Agent-BNlmK-uJ.js → Agent-tbKw8Mdt.js} +2 -2
  38. package/dist-vue/_chunks/{Agent-BNlmK-uJ.js.map → Agent-tbKw8Mdt.js.map} +1 -1
  39. package/dist-vue/_chunks/{Document-2X01-F4Z.js → Document-BWz2HySu.js} +37 -21
  40. package/dist-vue/_chunks/Document-BWz2HySu.js.map +1 -0
  41. package/dist-vue/_chunks/Media-_HfFLHGD.js.map +1 -1
  42. package/dist-vue/_chunks/{PkChatbot-HRayDr2d.js → PkChatbot-DtyZYAzj.js} +8 -8
  43. package/dist-vue/_chunks/{PkChatbot-HRayDr2d.js.map → PkChatbot-DtyZYAzj.js.map} +1 -1
  44. package/dist-vue/_chunks/PkChatbotAuth-jzoNJkmH.js +421 -0
  45. package/dist-vue/_chunks/PkChatbotAuth-jzoNJkmH.js.map +1 -0
  46. package/dist-vue/_chunks/{PkChatbotEmptyState-CPOcfoRC.js → PkChatbotEmptyState-Dicjr_Fv.js} +2 -2
  47. package/dist-vue/_chunks/{PkChatbotEmptyState-CPOcfoRC.js.map → PkChatbotEmptyState-Dicjr_Fv.js.map} +1 -1
  48. package/dist-vue/_chunks/{PkChatbotInput-pLJQIu7v.js → PkChatbotInput-DcLmOqA1.js} +2 -2
  49. package/dist-vue/_chunks/{PkChatbotInput-pLJQIu7v.js.map → PkChatbotInput-DcLmOqA1.js.map} +1 -1
  50. package/dist-vue/_chunks/{PkChatbotMessages-GZStJbx_.js → PkChatbotMessages-CrhRrcBs.js} +258 -256
  51. package/dist-vue/_chunks/PkChatbotMessages-CrhRrcBs.js.map +1 -0
  52. package/dist-vue/_chunks/{PkChatbotStepPayload-DU0W-eUp.js → PkChatbotStepPayload-rKaeDQDj.js} +2 -2
  53. package/dist-vue/_chunks/{PkChatbotStepPayload-DU0W-eUp.js.map → PkChatbotStepPayload-rKaeDQDj.js.map} +1 -1
  54. package/dist-vue/_chunks/{PkChatbotStepToolDetail-etlBryOg.js → PkChatbotStepToolDetail-5HdSV8Im.js} +3 -3
  55. package/dist-vue/_chunks/{PkChatbotStepToolDetail-etlBryOg.js.map → PkChatbotStepToolDetail-5HdSV8Im.js.map} +1 -1
  56. package/dist-vue/_chunks/PkChatbotSteps-CPPjwTJN.js +191 -0
  57. package/dist-vue/_chunks/PkChatbotSteps-CPPjwTJN.js.map +1 -0
  58. package/dist-vue/_chunks/{PkChatbotViewChat-DIfBWFoG.js → PkChatbotViewChat-B13nCznB.js} +7 -7
  59. package/dist-vue/_chunks/{PkChatbotViewChat-DIfBWFoG.js.map → PkChatbotViewChat-B13nCznB.js.map} +1 -1
  60. package/dist-vue/_chunks/{PkChatbotViewConversations-BCdolW0R.js → PkChatbotViewConversations-CHpN4vhm.js} +2 -2
  61. package/dist-vue/_chunks/{PkChatbotViewConversations-BCdolW0R.js.map → PkChatbotViewConversations-CHpN4vhm.js.map} +1 -1
  62. package/dist-vue/_chunks/{PkChatbotViewFiles-Cudao8ew.js → PkChatbotViewFiles-cRyG5X3P.js} +3 -3
  63. package/dist-vue/_chunks/{PkChatbotViewFiles-Cudao8ew.js.map → PkChatbotViewFiles-cRyG5X3P.js.map} +1 -1
  64. package/dist-vue/_chunks/{PkChatbotViewProfile-DDsKOkcC.js → PkChatbotViewProfile-CosaHA-g.js} +2 -2
  65. package/dist-vue/_chunks/{PkChatbotViewProfile-DDsKOkcC.js.map → PkChatbotViewProfile-CosaHA-g.js.map} +1 -1
  66. package/dist-vue/_chunks/{PkStreamingMarkdown-BloMJaIW.js → PkStreamingMarkdown-DYy79C1P.js} +214 -205
  67. package/dist-vue/_chunks/{PkStreamingMarkdown-BloMJaIW.js.map → PkStreamingMarkdown-DYy79C1P.js.map} +1 -1
  68. package/dist-vue/_chunks/{PkToolRequestGeolocation-9vfYNaQo.js → PkToolRequestGeolocation-BOVbaCzQ.js} +2 -2
  69. package/{dist/_chunks/PkToolRequestGeolocation-BbxYKt-9.js.map → dist-vue/_chunks/PkToolRequestGeolocation-BOVbaCzQ.js.map} +1 -1
  70. package/dist-vue/_chunks/{PkToolRequestOAuthConnection-BorR5NmZ.js → PkToolRequestOAuthConnection-a2LegFoE.js} +4 -4
  71. package/dist-vue/_chunks/PkToolRequestOAuthConnection-a2LegFoE.js.map +1 -0
  72. package/dist-vue/_chunks/{PkToolShowArtifact-BuMY7GNj.js → PkToolShowArtifact-DUOnFdfa.js} +2 -2
  73. package/dist-vue/_chunks/{PkToolShowArtifact-BuMY7GNj.js.map → PkToolShowArtifact-DUOnFdfa.js.map} +1 -1
  74. package/dist-vue/_chunks/PkToolShowComparison-DQs3E6-k.js +72 -0
  75. package/dist-vue/_chunks/PkToolShowComparison-DQs3E6-k.js.map +1 -0
  76. package/dist-vue/_chunks/{PkToolShowContactForm-0OQRqT8m.js → PkToolShowContactForm-1TFKvG_s.js} +2 -2
  77. package/dist-vue/_chunks/{PkToolShowContactForm-0OQRqT8m.js.map → PkToolShowContactForm-1TFKvG_s.js.map} +1 -1
  78. package/dist-vue/_chunks/{PkToolShowDiagram-BGL27iHG.js → PkToolShowDiagram-BnbkymPD.js} +2 -2
  79. package/dist-vue/_chunks/{PkToolShowDiagram-BGL27iHG.js.map → PkToolShowDiagram-BnbkymPD.js.map} +1 -1
  80. package/dist-vue/_chunks/{PkToolShowEmail-BJJpS69F.js → PkToolShowEmail-BDsBoETQ.js} +2 -2
  81. package/dist-vue/_chunks/{PkToolShowEmail-BJJpS69F.js.map → PkToolShowEmail-BDsBoETQ.js.map} +1 -1
  82. package/dist-vue/_chunks/{PkToolShowForm-DDcPpOZ8.js → PkToolShowForm-DwFKxMJd.js} +4 -4
  83. package/dist-vue/_chunks/{PkToolShowForm-DDcPpOZ8.js.map → PkToolShowForm-DwFKxMJd.js.map} +1 -1
  84. package/dist-vue/_chunks/{PkToolShowMessage-BFGynf3p.js → PkToolShowMessage-Dau3agUy.js} +2 -2
  85. package/dist-vue/_chunks/{PkToolShowMessage-BFGynf3p.js.map → PkToolShowMessage-Dau3agUy.js.map} +1 -1
  86. package/dist-vue/_chunks/{PkToolShowProductList-6t1Ir5CW.js → PkToolShowProductList-CsupMsuy.js} +2 -2
  87. package/dist-vue/_chunks/{PkToolShowProductList-6t1Ir5CW.js.map → PkToolShowProductList-CsupMsuy.js.map} +1 -1
  88. package/dist-vue/_chunks/{PkToolShowSources-cOF0ZxOj.js → PkToolShowSources-C8r1vKJk.js} +4 -4
  89. package/dist-vue/_chunks/{PkToolShowSources-cOF0ZxOj.js.map → PkToolShowSources-C8r1vKJk.js.map} +1 -1
  90. package/dist-vue/_chunks/{PkToolShowSuggestedReply-DA4NEjHB.js → PkToolShowSuggestedReply-qAWdCUhr.js} +2 -2
  91. package/dist-vue/_chunks/{PkToolShowSuggestedReply-DA4NEjHB.js.map → PkToolShowSuggestedReply-qAWdCUhr.js.map} +1 -1
  92. package/dist-vue/_chunks/{PkToolShowWebPages-OgaT1vYJ.js → PkToolShowWebPages-D4E3Xzg1.js} +2 -2
  93. package/dist-vue/_chunks/{PkToolShowWebPages-OgaT1vYJ.js.map → PkToolShowWebPages-D4E3Xzg1.js.map} +1 -1
  94. package/dist-vue/_chunks/{PkUrl-Cd69XP5z.js → PkUrl-Cu3qKl4G.js} +2 -2
  95. package/dist-vue/_chunks/{PkUrl-Cd69XP5z.js.map → PkUrl-Cu3qKl4G.js.map} +1 -1
  96. package/dist-vue/_chunks/{createChatbotApiClient-CaVLm5W9.js → createChatbotApiClient-BlWs282E.js} +137 -168
  97. package/dist-vue/_chunks/createChatbotApiClient-BlWs282E.js.map +1 -0
  98. package/dist-vue/_chunks/{useChatbotStore-BwrBZJCq.js → useChatbotStore-CMo47fnS.js} +3 -3
  99. package/dist-vue/_chunks/{useChatbotStore-BwrBZJCq.js.map → useChatbotStore-CMo47fnS.js.map} +1 -1
  100. package/dist-vue/_chunks/utils-B45A2ONa.js +184 -0
  101. package/dist-vue/_chunks/utils-B45A2ONa.js.map +1 -0
  102. package/dist-vue/api.js +1 -1
  103. package/dist-vue/apps/web-component/src/components/EmbeddedChatWidget.ce.d.ts +4 -4
  104. package/dist-vue/apps/web-component/src/composables/useChatbotAuth.d.ts +53 -5
  105. package/dist-vue/apps/web-component/src/composables/useChatbotAuthForm.d.ts +14 -0
  106. package/dist-vue/composables.js +524 -39
  107. package/dist-vue/composables.js.map +1 -1
  108. package/dist-vue/index.js +3366 -3240
  109. package/dist-vue/index.js.map +1 -1
  110. package/dist-vue/locales.js +46 -0
  111. package/dist-vue/packages/ability/src/index.d.ts +10 -14
  112. package/dist-vue/packages/auth/src/active-membership.d.ts +36 -0
  113. package/dist-vue/packages/auth/src/add-member-to-organization.d.ts +12 -2
  114. package/dist-vue/packages/auth/src/additional-fields.d.ts +48 -0
  115. package/dist-vue/packages/auth/src/organization-member-limit.d.ts +12 -0
  116. package/dist-vue/packages/auth/src/passkey-policy-client-plugin.d.ts +31 -0
  117. package/dist-vue/packages/auth/src/passkey-policy-plugin.d.ts +22 -0
  118. package/dist-vue/packages/auth/src/two-factor-admin-plugin.d.ts +2 -0
  119. package/dist-vue/packages/auth/src/two-factor-policy-client-plugin.d.ts +163 -0
  120. package/dist-vue/packages/auth/src/two-factor-policy-plugin.d.ts +106 -0
  121. package/dist-vue/packages/components/src/PkQrCode.d.ts +14 -0
  122. package/dist-vue/packages/components/src/chat/PkChatbotAuth.d.ts +19 -0
  123. package/dist-vue/packages/components/src/chat/PkChatbotMessages.d.ts +8 -4
  124. package/dist-vue/packages/components/src/chat/PkChatbotSteps.d.ts +1 -0
  125. package/dist-vue/packages/components/src/chat/PkTurnEvaluation.d.ts +8 -0
  126. package/dist-vue/packages/components/src/chat/utils.d.ts +9 -0
  127. package/dist-vue/packages/components/src/index.d.ts +2 -1
  128. package/dist-vue/packages/composable/src/chatbot/useChatbotStore.d.ts +60 -0
  129. package/dist-vue/packages/models/src/schema/Chat.d.ts +42 -0
  130. package/dist-vue/packages/models/src/schema/Document.d.ts +494 -0
  131. package/dist-vue/packages/models/src/schema/DocumentFolder.d.ts +10 -0
  132. package/dist-vue/packages/models/src/schema/DocumentSyncSource.d.ts +71 -1
  133. package/dist-vue/packages/models/src/schema/Lead.d.ts +1 -1
  134. package/dist-vue/packages/models/src/schema/McpServer.d.ts +13 -0
  135. package/dist-vue/packages/models/src/schema/Media.d.ts +0 -1
  136. package/dist-vue/packages/models/src/schema/Member.d.ts +10 -0
  137. package/dist-vue/packages/models/src/schema/Notification.d.ts +31 -0
  138. package/dist-vue/packages/models/src/schema/Organization.d.ts +20 -0
  139. package/dist-vue/packages/models/src/schema/SignInSecurity.d.ts +168 -0
  140. package/dist-vue/packages/models/src/schema/User.d.ts +1 -0
  141. package/dist-vue/packages/models/src/schema/index.d.ts +1 -0
  142. package/dist-vue/style.css +1 -1
  143. package/package.json +1 -1
  144. package/dist/_chunks/Agent-DTLrWpzX.js +0 -460
  145. package/dist/_chunks/Agent-DTLrWpzX.js.map +0 -1
  146. package/dist/_chunks/Media-Cft7Pwrh.js +0 -108
  147. package/dist/_chunks/Media-Cft7Pwrh.js.map +0 -1
  148. package/dist/_chunks/PkStreamingMarkdown-C1sANAr5.js.map +0 -1
  149. package/dist/_chunks/PkToolRequestOAuthConnection-CTp2w60F.js.map +0 -1
  150. package/dist/_chunks/PkToolShowComparison-BJ7QBXtf.js +0 -60
  151. package/dist/_chunks/PkToolShowComparison-BJ7QBXtf.js.map +0 -1
  152. package/dist/_chunks/markdown-BRD-hDrH.js.map +0 -1
  153. package/dist-vue/_chunks/Document-2X01-F4Z.js.map +0 -1
  154. package/dist-vue/_chunks/PkChatbotAuth-Bi508F1u.js +0 -349
  155. package/dist-vue/_chunks/PkChatbotAuth-Bi508F1u.js.map +0 -1
  156. package/dist-vue/_chunks/PkChatbotMessages-GZStJbx_.js.map +0 -1
  157. package/dist-vue/_chunks/PkChatbotSteps-Cl4pVtPJ.js +0 -190
  158. package/dist-vue/_chunks/PkChatbotSteps-Cl4pVtPJ.js.map +0 -1
  159. package/dist-vue/_chunks/PkToolRequestOAuthConnection-BorR5NmZ.js.map +0 -1
  160. package/dist-vue/_chunks/PkToolShowComparison-BLn4pkno.js +0 -61
  161. package/dist-vue/_chunks/PkToolShowComparison-BLn4pkno.js.map +0 -1
  162. package/dist-vue/_chunks/createChatbotApiClient-CaVLm5W9.js.map +0 -1
  163. package/dist-vue/_chunks/utils-h4C7rRcu.js +0 -177
  164. package/dist-vue/_chunks/utils-h4C7rRcu.js.map +0 -1
@@ -1,349 +0,0 @@
1
- import { _ as e, b as t, n, o as r, u as i } from "./schemas-DxbHVg3r.js";
2
- import { i as a, n as o } from "./Media-_HfFLHGD.js";
3
- import { t as s } from "./useImageFallback-5vQIO0pC.js";
4
- import { t as c } from "./index.es-D0EI_F6p.js";
5
- import { VvAlert as ee, VvButton as l, VvButtonGroup as te, VvIcon as ne } from "@volverjs/ui-vue/components";
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
- import { useI18n as ie } from "vue-i18n";
8
- //#region ../../packages/models/src/schema/User.ts
9
- var O = n(["user", "admin"]), k = t().min(8).max(64);
10
- e({
11
- id: t(),
12
- name: t(),
13
- email: t(),
14
- emailVerified: r(),
15
- image: t().nullable(),
16
- media: o.optional().nullable(),
17
- createdAt: a(),
18
- updatedAt: a(),
19
- banned: r().nullable(),
20
- banReason: t().nullable(),
21
- banExpires: a().nullable(),
22
- isAnonymous: r().nullable(),
23
- role: O
24
- }), e({
25
- id: t(),
26
- name: t(),
27
- email: t().nullable(),
28
- image: t().nullable(),
29
- isAnonymous: r().nullable(),
30
- banned: r().nullable()
31
- });
32
- var A = e({
33
- password: k,
34
- passwordConfirmation: k
35
- }).refine((e) => e.password === e.passwordConfirmation, {
36
- params: { i18n: "errors.passwordsDoNotMatch" },
37
- path: ["passwordConfirmation"]
38
- });
39
- A.extend({ currentPassword: k }), A.extend({
40
- name: t().min(1),
41
- email: i(),
42
- media: o.optional(),
43
- role: O.optional().default("user")
44
- }), e({
45
- id: t(),
46
- name: t(),
47
- email: t(),
48
- emailVerified: r().optional(),
49
- image: t().nullish(),
50
- role: O,
51
- media: o.optional().nullable(),
52
- banned: r().nullish(),
53
- banReason: t().nullish(),
54
- banExpires: t().nullish(),
55
- isAnonymous: r().nullish()
56
- });
57
- var j = A.extend({
58
- name: t().min(1),
59
- email: i(),
60
- rememberMe: r().optional()
61
- }), M = { class: "pk-chatbot-auth flex flex-col items-center justify-center w-full min-h-full p-lg overflow-y-auto" }, N = { class: "pk-chatbot-auth__flip w-full max-w-384 mx-auto my-auto" }, P = { 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" }, F = { class: "font-bold text-18 mb-xs" }, I = { class: "mb-lg text-16 text-word-3" }, L = {
62
- key: "form",
63
- class: "pk-chatbot-auth__flip-card flex flex-col"
64
- }, R = { class: "flex flex-col" }, z = {
65
- key: 0,
66
- class: "flex justify-center mb-md"
67
- }, B = ["src", "alt"], V = { class: "text-center leading-normal mb-lg" }, H = {
68
- key: 0,
69
- class: "font-bold text-20 m-0"
70
- }, U = { class: "mb-md" }, W = { class: "mb-md" }, G = { class: "mb-md" }, ae = { class: "hr mt-xs" }, K = { class: "pt-lg text-center text-word-3" }, q = /* @__PURE__ */ y({
71
- __name: "PkChatbotAuth",
72
- props: /*@__PURE__*/ b({
73
- branding: { default: void 0 },
74
- authMethods: { default: void 0 },
75
- loading: {
76
- type: Boolean,
77
- default: !1
78
- }
79
- }, {
80
- errorMessage: { default: void 0 },
81
- errorMessageModifiers: {},
82
- success: { default: void 0 },
83
- successModifiers: {}
84
- }),
85
- emits: /*@__PURE__*/ b([
86
- "sign-in",
87
- "sign-up",
88
- "request-reset",
89
- "social",
90
- "update:errorMessage",
91
- "update:success"
92
- ], ["update:errorMessage", "update:success"]),
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
- E(J, () => {
96
- O.value = void 0, A.value = void 0;
97
- });
98
- function oe() {
99
- A.value = void 0, J.value = "sign-in";
100
- }
101
- let se = f(() => o.authMethods?.google || o.authMethods?.microsoft), ce = e({
102
- email: i(),
103
- password: k,
104
- rememberMe: r().default(!1)
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
- E(A, (e) => {
107
- e && (fe(), he());
108
- });
109
- let Z = S();
110
- function ge() {
111
- A.value && Z.value?.focus();
112
- }
113
- function _e(e) {
114
- q("sign-in", {
115
- email: e.email,
116
- password: e.password,
117
- rememberMe: e.rememberMe ?? !1
118
- });
119
- }
120
- function Q(e) {
121
- q("sign-up", {
122
- name: e.name.trim(),
123
- email: e.email,
124
- password: e.password
125
- });
126
- }
127
- function ve(e) {
128
- q("request-reset", { email: e.email });
129
- }
130
- function $(e) {
131
- q("social", e);
132
- }
133
- return (e, n) => {
134
- let r = ne, i = l, o = ee, s = te;
135
- return x(), h("div", M, [g("div", N, [v(d, {
136
- name: "pk-flip",
137
- mode: "out-in",
138
- onAfterEnter: ge
139
- }, {
140
- default: D(() => [A.value ? (x(), h("div", {
141
- ref_key: "successCard",
142
- ref: Z,
143
- key: "success",
144
- tabindex: "-1",
145
- class: "pk-chatbot-auth__flip-card outline-none flex flex-col text-center leading-normal"
146
- }, [
147
- g("div", P, [v(r, {
148
- name: "ri:mail-check-line",
149
- "aria-hidden": "true",
150
- class: "text-success w-32 h-32"
151
- })]),
152
- g("h1", F, C(A.value.title), 1),
153
- g("p", I, C(A.value.message), 1),
154
- v(i, {
155
- type: "button",
156
- modifiers: "link",
157
- icon: "chevron-left",
158
- label: w(a)("action.backToSignIn"),
159
- onClick: oe
160
- }, null, 8, ["label"])
161
- ], 512)) : (x(), h("div", L, [g("div", R, [
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
- class: "w-64 h-64 border border-surface-3 rounded-full bg-surface-0 overflow-hidden bg-surface object-contain",
166
- onError: n[0] ||= (e) => w(b)(t.branding?.interface.logo)
167
- }, null, 40, B)])) : 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
- _: 1
171
- }))]),
172
- O.value ? (x(), p(o, {
173
- key: 1,
174
- modifiers: "danger",
175
- class: "mb-md",
176
- content: O.value
177
- }, null, 8, ["content"])) : m("", !0),
178
- J.value === "sign-in" ? (x(), p(w(ue), {
179
- key: 2,
180
- class: "flex flex-col",
181
- readonly: t.loading,
182
- onSubmit: _e
183
- }, {
184
- default: D(() => [g("div", U, [
185
- v(w(Y), {
186
- name: "email",
187
- type: "email",
188
- autocomplete: "username",
189
- label: w(a)("label.email"),
190
- floating: ""
191
- }, null, 8, ["label"]),
192
- v(w(Y), {
193
- name: "password",
194
- type: "password",
195
- autocomplete: "current-password",
196
- label: w(a)("label.password"),
197
- floating: ""
198
- }, null, 8, ["label"]),
199
- g("div", W, [v(i, {
200
- type: "button",
201
- modifiers: "link",
202
- label: w(a)("action.forgetPassword"),
203
- onClick: n[1] ||= (e) => J.value = "reset"
204
- }, null, 8, ["label"])]),
205
- v(w(Y), {
206
- name: "rememberMe",
207
- type: "checkbox",
208
- label: w(a)("label.rememberMe"),
209
- switch: ""
210
- }, null, 8, ["label"])
211
- ]), v(i, {
212
- type: "submit",
213
- modifiers: "primary",
214
- loading: t.loading,
215
- disabled: t.loading,
216
- label: w(a)("action.signIn")
217
- }, null, 8, [
218
- "loading",
219
- "disabled",
220
- "label"
221
- ])]),
222
- _: 1
223
- }, 8, ["readonly"])) : J.value === "sign-up" ? (x(), p(w(de), {
224
- key: 3,
225
- class: "flex flex-col",
226
- readonly: t.loading,
227
- onSubmit: Q
228
- }, {
229
- default: D(() => [g("div", G, [
230
- v(w(X), {
231
- name: "name",
232
- type: "text",
233
- autocomplete: "name",
234
- label: w(a)("label.name"),
235
- floating: ""
236
- }, null, 8, ["label"]),
237
- v(w(X), {
238
- name: "email",
239
- type: "email",
240
- autocomplete: "username",
241
- label: w(a)("label.email"),
242
- floating: ""
243
- }, null, 8, ["label"]),
244
- v(w(X), {
245
- name: "password",
246
- type: "password",
247
- autocomplete: "new-password",
248
- label: w(a)("label.password"),
249
- floating: ""
250
- }, null, 8, ["label"]),
251
- v(w(X), {
252
- name: "passwordConfirmation",
253
- type: "password",
254
- autocomplete: "new-password",
255
- label: w(a)("label.confirmPassword"),
256
- floating: ""
257
- }, null, 8, ["label"])
258
- ]), v(i, {
259
- type: "submit",
260
- modifiers: "primary",
261
- loading: t.loading,
262
- disabled: t.loading,
263
- label: w(a)("action.continue")
264
- }, null, 8, [
265
- "loading",
266
- "disabled",
267
- "label"
268
- ])]),
269
- _: 1
270
- }, 8, ["readonly"])) : J.value === "reset" ? (x(), p(w(pe), {
271
- key: 4,
272
- class: "flex flex-col",
273
- readonly: t.loading,
274
- onSubmit: ve
275
- }, {
276
- default: D(() => [v(w(me), {
277
- name: "email",
278
- type: "email",
279
- autocomplete: "username",
280
- label: w(a)("label.email"),
281
- floating: ""
282
- }, null, 8, ["label"]), v(s, { modifiers: "vertical" }, {
283
- default: D(() => [v(i, {
284
- type: "submit",
285
- modifiers: "primary",
286
- loading: t.loading,
287
- disabled: t.loading,
288
- label: w(a)("action.submit")
289
- }, null, 8, [
290
- "loading",
291
- "disabled",
292
- "label"
293
- ])]),
294
- _: 1
295
- })]),
296
- _: 1
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(a)("label.or")), 1)]), v(s, {
299
- modifiers: "vertical",
300
- class: "gap-xs mt-xs"
301
- }, {
302
- default: D(() => [t.authMethods?.google ? (x(), p(i, {
303
- key: 0,
304
- type: "button",
305
- modifiers: "secondary",
306
- icon: "logos:google-icon",
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
- key: 1,
312
- type: "button",
313
- modifiers: "secondary",
314
- icon: "logos:microsoft-icon",
315
- disabled: t.loading,
316
- label: w(a)("action.signInWithSocialProvider", { provider: "Microsoft" }),
317
- onClick: n[3] ||= (e) => $("microsoft")
318
- }, null, 8, ["disabled", "label"])) : m("", !0)]),
319
- _: 1
320
- })], 64)) : m("", !0)
321
- ]), g("div", K, [J.value === "sign-in" ? (x(), h(u, { key: 0 }, [_(C(w(a)("auth.noAccount")) + " ", 1), v(i, {
322
- type: "button",
323
- modifiers: "link",
324
- class: "font-semibold",
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
- type: "button",
329
- modifiers: "link",
330
- class: "font-semibold",
331
- label: w(a)("action.signIn"),
332
- onClick: n[5] ||= (e) => J.value = "sign-in"
333
- }, null, 8, ["label"])], 64)) : (x(), p(i, {
334
- key: 2,
335
- type: "button",
336
- modifiers: "link",
337
- icon: "chevron-left",
338
- label: w(a)("action.backToSignIn"),
339
- onClick: n[6] ||= (e) => J.value = "sign-in"
340
- }, null, 8, ["label"]))])]))]),
341
- _: 1
342
- })])]);
343
- };
344
- }
345
- });
346
- //#endregion
347
- export { q as t };
348
-
349
- //# sourceMappingURL=PkChatbotAuth-Bi508F1u.js.map
@@ -1 +0,0 @@
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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"}