@8wave/ai-elements 0.98.0-beta.5 → 0.99.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +24 -5
  2. package/dist/_chunks/{PkToolShowForm-BNV4Ja6g.js → PkToolShowForm-dFuoqTPs.js} +84 -80
  3. package/dist/_chunks/PkToolShowForm-dFuoqTPs.js.map +1 -0
  4. package/dist/ai-elements.es.js +3153 -2982
  5. package/dist/ai-elements.es.js.map +1 -1
  6. package/dist-vue/PkChatbot.js +1 -1
  7. package/dist-vue/PkChatbotMessages.js +1 -1
  8. package/dist-vue/PkChatbotStepToolDetail.js +1 -1
  9. package/dist-vue/PkChatbotSteps.js +1 -1
  10. package/dist-vue/PkChatbotViewChat.js +1 -1
  11. package/dist-vue/PkChatbotViewConversations.js +1 -1
  12. package/dist-vue/PkChatbotViewFiles.js +1 -1
  13. package/dist-vue/PkChatbotViewProfile.js +1 -1
  14. package/dist-vue/_chunks/{PkChatbot-DHkhT0Jf.js → PkChatbot-BlG1WlAO.js} +7 -7
  15. package/dist-vue/_chunks/{PkChatbot-DHkhT0Jf.js.map → PkChatbot-BlG1WlAO.js.map} +1 -1
  16. package/dist-vue/_chunks/PkChatbotMessages-BrufA7o1.js +752 -0
  17. package/dist-vue/_chunks/PkChatbotMessages-BrufA7o1.js.map +1 -0
  18. package/dist-vue/_chunks/{PkChatbotStepToolDetail-ldThv0t5.js → PkChatbotStepToolDetail-BVI72gyx.js} +2 -2
  19. package/dist-vue/_chunks/{PkChatbotStepToolDetail-ldThv0t5.js.map → PkChatbotStepToolDetail-BVI72gyx.js.map} +1 -1
  20. package/dist-vue/_chunks/PkChatbotSteps-Dv9NkYER.js +172 -0
  21. package/dist-vue/_chunks/{PkChatbotSteps-BpqdFhsG.js.map → PkChatbotSteps-Dv9NkYER.js.map} +1 -1
  22. package/dist-vue/_chunks/{PkChatbotViewChat-C08TsXiL.js → PkChatbotViewChat-CAqvbbfN.js} +66 -66
  23. package/dist-vue/_chunks/PkChatbotViewChat-CAqvbbfN.js.map +1 -0
  24. package/dist-vue/_chunks/{PkChatbotViewConversations-BQZi5kSC.js → PkChatbotViewConversations-Cq41H-tc.js} +2 -2
  25. package/dist-vue/_chunks/{PkChatbotViewConversations-BQZi5kSC.js.map → PkChatbotViewConversations-Cq41H-tc.js.map} +1 -1
  26. package/dist-vue/_chunks/{PkChatbotViewFiles-TLKE_tRw.js → PkChatbotViewFiles-DNuzmBJc.js} +2 -2
  27. package/dist-vue/_chunks/{PkChatbotViewFiles-TLKE_tRw.js.map → PkChatbotViewFiles-DNuzmBJc.js.map} +1 -1
  28. package/dist-vue/_chunks/{PkChatbotViewProfile-B6ANZY96.js → PkChatbotViewProfile-C0BXIY2N.js} +2 -2
  29. package/dist-vue/_chunks/{PkChatbotViewProfile-B6ANZY96.js.map → PkChatbotViewProfile-C0BXIY2N.js.map} +1 -1
  30. package/dist-vue/_chunks/{PkToolShowForm-C-mWyeka.js → PkToolShowForm-CQuX08lk.js} +62 -58
  31. package/dist-vue/_chunks/PkToolShowForm-CQuX08lk.js.map +1 -0
  32. package/dist-vue/_chunks/{createChatbotApiClient-BOBdBxmf.js → createChatbotApiClient-BMZltBLh.js} +367 -363
  33. package/dist-vue/_chunks/createChatbotApiClient-BMZltBLh.js.map +1 -0
  34. package/dist-vue/_chunks/{useChatbotStore-BJ-EDmND.js → useChatbotStore-DZiorgLW.js} +113 -103
  35. package/dist-vue/_chunks/{useChatbotStore-BJ-EDmND.js.map → useChatbotStore-DZiorgLW.js.map} +1 -1
  36. package/dist-vue/_chunks/{utils-BMa8jwJS.js → utils-Cru8TJxe.js} +48 -30
  37. package/dist-vue/_chunks/utils-Cru8TJxe.js.map +1 -0
  38. package/dist-vue/api.js +1 -1
  39. package/dist-vue/composables.js +3 -3
  40. package/dist-vue/index.js +4351 -4041
  41. package/dist-vue/index.js.map +1 -1
  42. package/dist-vue/locales.js +16 -0
  43. package/dist-vue/packages/components/src/PkCheckboxField.d.ts +45 -0
  44. package/dist-vue/packages/components/src/PkEditorRepeater.d.ts +2 -2
  45. package/dist-vue/packages/components/src/PkPwaInstallPrompt.d.ts +4 -0
  46. package/dist-vue/packages/components/src/PkPwaOfflineNotice.d.ts +4 -0
  47. package/dist-vue/packages/components/src/chat/PkAgentSettingsPanel.d.ts +11 -2
  48. package/dist-vue/packages/components/src/chat/PkChatbotMessages.d.ts +24 -2
  49. package/dist-vue/packages/components/src/chat/PkToolApprovalBadge.d.ts +4 -0
  50. package/dist-vue/packages/components/src/chat/PkToolApprovalCard.d.ts +35 -0
  51. package/dist-vue/packages/components/src/chat/PkToolApprovalPreviewMessage.d.ts +11 -0
  52. package/dist-vue/packages/components/src/chat/index.d.ts +2 -1
  53. package/dist-vue/packages/components/src/chat/toolApprovalPreviews.d.ts +12 -0
  54. package/dist-vue/packages/components/src/chat/toolComponentMap.d.ts +5 -3
  55. package/dist-vue/packages/components/src/chat/useChatScroll.d.ts +6 -0
  56. package/dist-vue/packages/components/src/chat/utils.d.ts +13 -0
  57. package/dist-vue/packages/components/src/index.d.ts +4 -1
  58. package/dist-vue/packages/composable/src/chatbot/useChatbotStore.d.ts +34 -1
  59. package/dist-vue/packages/models/src/schema/Agent.d.ts +48 -0
  60. package/dist-vue/packages/models/src/schema/ReasoningChat.d.ts +6 -0
  61. package/dist-vue/packages/models/src/schema/SubAgent.d.ts +6 -0
  62. package/dist-vue/style.css +1 -1
  63. package/package.json +1 -1
  64. package/dist/_chunks/PkToolRequestConfirm-FQ9nDFXy.js +0 -48
  65. package/dist/_chunks/PkToolRequestConfirm-FQ9nDFXy.js.map +0 -1
  66. package/dist/_chunks/PkToolShowForm-BNV4Ja6g.js.map +0 -1
  67. package/dist-vue/_chunks/PkChatbotMessages-B4qfTNOJ.js +0 -630
  68. package/dist-vue/_chunks/PkChatbotMessages-B4qfTNOJ.js.map +0 -1
  69. package/dist-vue/_chunks/PkChatbotSteps-BpqdFhsG.js +0 -172
  70. package/dist-vue/_chunks/PkChatbotViewChat-C08TsXiL.js.map +0 -1
  71. package/dist-vue/_chunks/PkToolRequestConfirm-CQNa3seA.js +0 -48
  72. package/dist-vue/_chunks/PkToolRequestConfirm-CQNa3seA.js.map +0 -1
  73. package/dist-vue/_chunks/PkToolShowForm-C-mWyeka.js.map +0 -1
  74. package/dist-vue/_chunks/createChatbotApiClient-BOBdBxmf.js.map +0 -1
  75. package/dist-vue/_chunks/utils-BMa8jwJS.js.map +0 -1
  76. package/dist-vue/packages/components/src/chat/PkToolRequestConfirm.d.ts +0 -11
@@ -0,0 +1,752 @@
1
+ import { t as e } from "./PkChatbotError-B2iob9cQ.js";
2
+ import "./src-8QXYVWIx.js";
3
+ import { a as t, c as n, o as r, r as i, s as a, t as o } from "./message-RohfrdWS.js";
4
+ import { r as s } from "./text-CeT0hpJK.js";
5
+ import { t as c } from "./PkRelativeTime-C9zd1ffO.js";
6
+ import { t as l } from "./PkStreamingMarkdown-DEhbK-3c.js";
7
+ import { t as u } from "./PkChatbotFeedbackForm-BSe40qlc.js";
8
+ import { t as d } from "./PkChatbotMessageFeedback-BYmrVaCE.js";
9
+ import { t as f } from "./PkChatbotFilePreview-DyrszALJ.js";
10
+ import { a as p, f as m, h, i as g, m as _, o as v, p as ee, r as te, s as y, t as b, u as ne } from "./utils-Cru8TJxe.js";
11
+ import { n as re, t as ie } from "./PkChatbotSteps-Dv9NkYER.js";
12
+ import { t as x } from "./PkChatbotOutlineRail-np4g6vsz.js";
13
+ import { VvButton as S, VvButtonGroup as C, VvIcon as ae } from "@volverjs/ui-vue/components";
14
+ import { Fragment as w, Transition as T, computed as E, createBlock as D, createCommentVNode as O, createElementBlock as k, createElementVNode as A, createTextVNode as oe, createVNode as j, defineAsyncComponent as M, defineComponent as N, mergeProps as se, nextTick as P, normalizeClass as F, normalizeStyle as ce, onBeforeUnmount as I, onMounted as le, openBlock as L, ref as R, renderList as ue, renderSlot as de, resolveDynamicComponent as fe, toDisplayString as z, unref as B, useSlots as pe, useTemplateRef as me, watch as V, withCtx as H, withModifiers as U } from "vue";
15
+ import { useI18n as he } from "vue-i18n";
16
+ //#region ../../packages/components/src/chat/toolComponentMap.ts
17
+ var ge = {
18
+ requestOAuthConnection: M(() => import("./PkToolRequestOAuthConnection-lo7hCSBC.js")),
19
+ showArtifact: M(() => import("./PkToolShowArtifact-CTBwt4DN.js").then((e) => e.n)),
20
+ showCalendarEvent: M(() => import("./PkToolShowCalendarEvent-BmheHwOM.js").then((e) => e.n)),
21
+ showComparison: M(() => import("./PkToolShowComparison-XJuKPuK2.js").then((e) => e.n)),
22
+ showContactForm: M(() => import("./PkToolShowContactForm-B6-MsExL.js").then((e) => e.n)),
23
+ showDiagram: M(() => import("./PkToolShowDiagram-G0hdi_Vf.js")),
24
+ showEmail: M(() => import("./PkToolShowEmail-C591LR5N.js").then((e) => e.n)),
25
+ showImageGallery: M(() => import("./PkToolShowImageGallery-Bj7YlqbP.js").then((e) => e.n)),
26
+ showLocation: M(() => import("./PkToolShowLocation-5G8p9mED.js").then((e) => e.n)),
27
+ showMessage: M(() => import("./PkToolShowMessage-CbXERPHI.js").then((e) => e.n)),
28
+ showForm: M(() => import("./PkToolShowForm-CQuX08lk.js").then((e) => e.n)),
29
+ showMultipleChoice: M(() => import("./PkToolShowForm-CQuX08lk.js").then((e) => e.n)),
30
+ showProductList: M(() => import("./PkToolShowProductList-DXMN2UuE.js").then((e) => e.n)),
31
+ showQrCode: M(() => import("./PkToolShowQrCode-DEAvfLFu.js").then((e) => e.n)),
32
+ showSources: M(() => import("./PkToolShowSources-CFh-i60o.js").then((e) => e.n)),
33
+ showSuggestedReply: M(() => import("./PkToolShowSuggestedReply-DoCHIEzz.js").then((e) => e.n)),
34
+ showVideo: M(() => import("./PkToolShowVideo-Ox8rFd7j.js")),
35
+ showWeather: M(() => import("./PkToolShowWeather-CxDO_5ni.js")),
36
+ showWebPages: M(() => import("./PkToolShowWebPages-CsACREOH.js").then((e) => e.n))
37
+ }, W = {
38
+ key: 0,
39
+ class: "text-12 text-word-3 m-0 mb-xs"
40
+ }, G = /* @__PURE__ */ N({
41
+ __name: "PkToolApprovalPreviewMessage",
42
+ props: { input: {} },
43
+ setup(e) {
44
+ let t = e, n = E(() => {
45
+ let e = t.input;
46
+ return typeof e?.message == "string" ? e.message : "";
47
+ });
48
+ return (e, t) => n.value ? (L(), k("p", W, z(n.value), 1)) : O("", !0);
49
+ }
50
+ }), _e = { [b]: G }, ve = {
51
+ key: 0,
52
+ class: "text-12 text-word-3 m-0 mb-xs"
53
+ }, ye = /* @__PURE__ */ N({
54
+ __name: "PkToolApprovalCard",
55
+ props: {
56
+ part: {},
57
+ actionable: { type: Boolean }
58
+ },
59
+ emits: ["respond"],
60
+ setup(e, { emit: t }) {
61
+ let n = e, r = t, { t: a } = he({ useScope: "global" }), o = E(() => n.part), s = E(() => i(n.part)), c = E(() => s.value === b), l = E(() => c.value ? o.value.state === "input-available" : o.value.state === "approval-requested"), u = E(() => l.value && n.actionable === !0), d = E(() => l.value && n.actionable !== !0), f = E(() => c.value ? o.value.output === "confirmed" : o.value.approval?.approved === !0), p = E(() => c.value ? o.value.output === "cancelled" : o.value.approval?.approved === !1 || o.value.state === "output-denied"), m = E(() => _e[s.value]), h = E(() => {
62
+ if (d.value) return {
63
+ icon: "ri:time-line",
64
+ message: a("toolApproval.expired")
65
+ };
66
+ if (f.value) return {
67
+ icon: "ri:check-line",
68
+ message: a(c.value ? "toolApproval.confirmed" : "toolApproval.approved")
69
+ };
70
+ if (p.value) return {
71
+ icon: "ri:close-line",
72
+ message: a(c.value ? "toolApproval.cancelled" : "toolApproval.denied")
73
+ };
74
+ }), g = E(() => !!h.value && !m.value);
75
+ return (t, n) => {
76
+ let i = S, s = C, d = ae;
77
+ return L(), k("div", { class: F(["w-full overflow-hidden transition-all duration-300", { "bg-surface p-sm rounded-xl border border-surface-3": !g.value }]) }, [
78
+ j(T, null, {
79
+ default: H(() => [!c.value && l.value ? (L(), k("p", ve, z(B(a)("toolApproval.prompt")), 1)) : O("", !0)]),
80
+ _: 1
81
+ }),
82
+ m.value ? (L(), D(fe(m.value), {
83
+ key: 0,
84
+ part: e.part,
85
+ input: o.value.input
86
+ }, null, 8, ["part", "input"])) : O("", !0),
87
+ j(T, { mode: "out-in" }, {
88
+ default: H(() => [h.value ? (L(), k("p", {
89
+ key: 1,
90
+ class: F(["flex items-center gap-4 text-12 text-word-3 m-0", { "mt-xs": m.value }])
91
+ }, [j(d, {
92
+ name: h.value.icon,
93
+ class: "shrink-0"
94
+ }, null, 8, ["name"]), oe(" " + z(h.value.message), 1)], 2)) : (L(), D(s, { key: 0 }, {
95
+ default: H(() => [j(i, {
96
+ modifiers: "primary-small",
97
+ disabled: !u.value,
98
+ icon: "ri:check-line",
99
+ label: B(a)("action.proceed"),
100
+ onClick: n[0] ||= U((e) => r("respond", !0), ["stop"])
101
+ }, null, 8, ["disabled", "label"]), j(i, {
102
+ modifiers: "action-quiet-small",
103
+ disabled: !u.value,
104
+ icon: "ri:close-line",
105
+ label: B(a)("action.cancel"),
106
+ onClick: n[1] ||= U((e) => r("respond", !1), ["stop"])
107
+ }, null, 8, ["disabled", "label"])]),
108
+ _: 1
109
+ }))]),
110
+ _: 1
111
+ })
112
+ ], 2);
113
+ };
114
+ }
115
+ }), be = 30, K = 500;
116
+ function xe(e) {
117
+ let { scrollEl: t, status: n, messagesLength: r, lastMessageRole: i, contentEl: a, beforeNewMessageScroll: o, onScrollUp: s, onScrollDown: c } = e, l = R(!1), u = R(!0), d = !1, f = null, p = null, m = null, h = null, g = 0, _ = (e = "smooth") => {
118
+ if (!t.value || l.value) {
119
+ d = !1;
120
+ return;
121
+ }
122
+ d = !0, t.value.scrollTo({
123
+ top: t.value.scrollHeight,
124
+ behavior: e
125
+ }), setTimeout(() => {
126
+ d = !1;
127
+ }, e === "instant" ? 0 : K);
128
+ }, v = (e) => {
129
+ e.deltaY < 0 && (l.value = !0);
130
+ }, ee = 0, te = (e) => {
131
+ ee = e.touches[0]?.clientY ?? 0;
132
+ }, y = (e) => {
133
+ let t = e.touches[0]?.clientY ?? 0;
134
+ t > ee && (l.value = !0), ee = t;
135
+ }, b = () => {
136
+ if (!t.value) return;
137
+ let { scrollTop: e, scrollHeight: n, clientHeight: r } = t.value;
138
+ if (u.value = n - r - e < be, d) {
139
+ g = e;
140
+ return;
141
+ }
142
+ e < g && s?.(), e > g && (u.value && (l.value = !1), c?.()), g = e;
143
+ }, ne = () => {
144
+ if (d || l.value || !t.value) return;
145
+ let e = t.value, n = e.scrollHeight - e.clientHeight;
146
+ n <= e.scrollTop || (u.value = !0, d = !0, e.scrollTop = n, requestAnimationFrame(() => {
147
+ d = !1;
148
+ }));
149
+ }, re = () => {
150
+ f || !t.value || (f = new MutationObserver(ne), f.observe(t.value, {
151
+ childList: !0,
152
+ subtree: !0,
153
+ characterData: !0
154
+ }));
155
+ }, ie = () => {
156
+ f?.disconnect(), f = null;
157
+ };
158
+ V(n, (e, t) => {
159
+ if (e === "streaming" || e === "submitted") {
160
+ re();
161
+ return;
162
+ }
163
+ e === "ready" && t === "streaming" || ie();
164
+ }), V(r, async () => {
165
+ if (r() && i() !== "assistant") {
166
+ C(), l.value = !1, d = !0;
167
+ try {
168
+ await P(), await o?.(), await P();
169
+ } finally {
170
+ _();
171
+ }
172
+ }
173
+ });
174
+ let x = null, S = () => {
175
+ t.value && (t.value.scrollHeight <= t.value.clientHeight || (t.value.scrollTop = t.value.scrollHeight, x && clearTimeout(x), x = setTimeout(C, 300)));
176
+ }, C = () => {
177
+ p?.disconnect(), p = null, m?.disconnect(), m = null, x &&= (clearTimeout(x), null);
178
+ };
179
+ return le(() => {
180
+ if (!t.value) return;
181
+ t.value.addEventListener("wheel", v, { passive: !0 }), t.value.addEventListener("touchstart", te, { passive: !0 }), t.value.addEventListener("touchmove", y, { passive: !0 });
182
+ let e = n() === "submitted" || n() === "streaming";
183
+ e ? re() : (p = new ResizeObserver(S), p.observe(t.value), m = new MutationObserver(S), m.observe(t.value, {
184
+ childList: !0,
185
+ subtree: !0
186
+ }));
187
+ let r = a?.() ?? t.value.firstElementChild;
188
+ r && (h = new ResizeObserver(ne), h.observe(r)), e || S();
189
+ }), I(() => {
190
+ t.value?.removeEventListener("wheel", v), t.value?.removeEventListener("touchstart", te), t.value?.removeEventListener("touchmove", y), h?.disconnect(), h = null, ie(), C();
191
+ }), {
192
+ handleScroll: b,
193
+ scrollToBottom: _,
194
+ userScrolledUp: l,
195
+ isAtBottom: u
196
+ };
197
+ }
198
+ //#endregion
199
+ //#region ../../packages/components/src/chat/PkChatbotMessages.vue?vue&type=script&setup=true&lang.ts
200
+ var Se = ["aria-busy"], Ce = {
201
+ key: 0,
202
+ class: "pk-chatbot-messages__outline"
203
+ }, we = {
204
+ key: 0,
205
+ class: "pk-chatbot-divider"
206
+ }, Te = { class: "pk-chatbot-divider__label" }, Ee = { class: "pk-chatbot-message__text" }, De = ["title"], Oe = {
207
+ key: 0,
208
+ class: "pk-chatbot-message__reaction-emoji"
209
+ }, ke = {
210
+ key: 0,
211
+ class: "pk-chatbot-message__loading-info"
212
+ }, Ae = { class: "flex gap-8 items-center" }, je = { class: "font-mono rounded text-12" }, Me = { class: "flex gap-8 items-center" }, Ne = {
213
+ key: 0,
214
+ class: "pk-chatbot-message__footer"
215
+ }, Pe = {
216
+ key: 0,
217
+ class: "pk-chatbot-message__hover-meta"
218
+ }, Fe = ["datetime", "title"], Ie = { class: "truncate" }, Le = {
219
+ key: 0,
220
+ class: "flex items-center gap-4 min-w-0"
221
+ }, Re = { class: "truncate" }, ze = {
222
+ key: 1,
223
+ class: "flex items-center gap-4 text-12 text-word-3"
224
+ }, Be = { class: "truncate" }, Ve = ["datetime"], He = { class: "truncate" }, Ue = {
225
+ key: 3,
226
+ class: "flex items-center gap-4 text-12 text-word-3"
227
+ }, We = ["title", "aria-label"], q = /* @__PURE__ */ N({
228
+ __name: "PkChatbotMessages",
229
+ props: {
230
+ status: {},
231
+ messages: {},
232
+ error: {},
233
+ actions: {},
234
+ mainColor: {},
235
+ textColor: {},
236
+ revisedAnswers: {},
237
+ messageFeedbacks: {},
238
+ readonlyFeedback: { type: Boolean },
239
+ disableHeightAdjustment: { type: Boolean },
240
+ showMessageDateTime: { type: Boolean },
241
+ showMessageTokensCount: { type: Boolean },
242
+ showAllMessageParts: { type: Boolean },
243
+ interactive: { type: Boolean },
244
+ showExtendedSteps: { type: Boolean },
245
+ isDark: { type: Boolean },
246
+ showScrollToBottom: { type: Boolean },
247
+ feedbackMessageId: {},
248
+ feedbackLoading: { type: Boolean },
249
+ feedbackSubmitted: { type: Boolean },
250
+ feedbackError: {}
251
+ },
252
+ emits: [
253
+ "show-info",
254
+ "regenerate",
255
+ "revise",
256
+ "upvote",
257
+ "downvote",
258
+ "feedback",
259
+ "feedback-submit",
260
+ "feedback-close",
261
+ "scroll-up",
262
+ "scroll-down",
263
+ "auto-retry",
264
+ "reset-chat",
265
+ "approval-respond",
266
+ "confirm-respond"
267
+ ],
268
+ setup(b, { emit: M }) {
269
+ let N = b, I = M, { t: W, d: G, n: _e } = he({ useScope: "global" }), ve = pe(), be = (e, t) => {
270
+ if (ee(e)) {
271
+ let n = e.toolCallId;
272
+ n && I("confirm-respond", {
273
+ toolCallId: n,
274
+ confirmed: t
275
+ });
276
+ return;
277
+ }
278
+ let n = v(e);
279
+ n && I("approval-respond", {
280
+ id: n,
281
+ approved: t
282
+ });
283
+ }, K = me("scrollEl"), q = me("wrapperEl"), Ge = E(() => h(N.textColor, N.mainColor)), { handleScroll: Ke, scrollToBottom: qe, userScrolledUp: Je, isAtBottom: Ye } = xe({
284
+ scrollEl: K,
285
+ status: () => N.status,
286
+ messagesLength: () => N.messages?.length,
287
+ lastMessageRole: () => N.messages?.[N.messages.length - 1]?.role,
288
+ contentEl: () => q.value,
289
+ beforeNewMessageScroll: () => it(),
290
+ onScrollUp: () => I("scroll-up"),
291
+ onScrollDown: () => I("scroll-down")
292
+ }), Xe = () => {
293
+ Je.value = !1, qe();
294
+ }, J = E(() => (N.messages ?? []).filter((e) => e.role === "user").map((e) => ({
295
+ id: e.id,
296
+ preview: e.parts.find(a)?.text.trim().slice(0, 120) || "…"
297
+ }))), Ze = R(), Qe = () => K.value?.querySelectorAll(".pk-chatbot-message--user") ?? [], $e = () => {
298
+ let e = K.value;
299
+ if (!e || !N.showScrollToBottom) return;
300
+ let t = e.getBoundingClientRect().top + e.clientHeight / 2, n = J.value[0]?.id;
301
+ Qe().forEach((e, r) => {
302
+ e.getBoundingClientRect().top <= t && (n = J.value[r]?.id);
303
+ }), Ze.value = n;
304
+ };
305
+ V(J, async () => {
306
+ await P(), $e();
307
+ });
308
+ let et = () => {
309
+ Ke(), $e();
310
+ }, tt = (e) => {
311
+ let t = K.value, n = J.value.findIndex((t) => t.id === e), r = Qe()[n];
312
+ !t || !r || (Je.value = !0, t.scrollTo({
313
+ top: t.scrollTop + r.getBoundingClientRect().top - t.getBoundingClientRect().top - Number.parseFloat(getComputedStyle(t).paddingTop),
314
+ behavior: "smooth"
315
+ }));
316
+ }, nt = R(0), rt = R(!1), it = async () => {
317
+ let e = N.messages;
318
+ if (!e?.length || N.disableHeightAdjustment || !(e[e.length - 1].role === "user" || N.status === "submitted" || N.status === "streaming") || (rt.value = !1, await P(), !K.value)) return;
319
+ let { paddingTop: t, paddingBottom: n } = getComputedStyle(K.value), r = K.value.clientHeight - Number.parseFloat(t) - Number.parseFloat(n), i = q.value && Number.parseFloat(getComputedStyle(q.value).rowGap) || 0, a = Qe(), o = r - (a[a.length - 1]?.clientHeight ?? 0) - i;
320
+ o > 0 && (nt.value = o), await P();
321
+ };
322
+ V(() => [N.messages?.length, N.messages?.[N.messages.length - 1]?.id], () => it()), le(() => {
323
+ (N.status === "submitted" || N.status === "streaming") && it();
324
+ }), V(() => N.status, (e) => {
325
+ (e === "ready" || e === "error") && (rt.value = !0, nt.value = 0);
326
+ });
327
+ let at = (e) => N.revisedAnswers?.some((t) => t.messageId === e), Y = (e) => N.messageFeedbacks?.find((t) => t.messageId === e), ot = (e, t) => !N.readonlyFeedback && St(e, t), st = (e) => N.readonlyFeedback ? Y(e) : void 0, ct = (e) => st(e)?.vote, lt = (e) => {
328
+ let t = st(e);
329
+ if (t?.vote) return;
330
+ let n = t?.metadata?.reactionEmoji;
331
+ return typeof n == "string" && /\p{Extended_Pictographic}/u.test(n) ? n : void 0;
332
+ }, ut = (e) => !!(ct(e) || lt(e)), dt = (e) => {
333
+ if (lt(e)) return "pk-chatbot-message__reaction--neutral";
334
+ let t = ct(e);
335
+ return t === "upvote" ? "pk-chatbot-message__reaction--positive" : t === "downvote" ? "pk-chatbot-message__reaction--negative" : "pk-chatbot-message__reaction--neutral";
336
+ }, ft = (e) => {
337
+ let t = ct(e);
338
+ return W(t === "upvote" ? "hint.userFeedbackPositive" : t === "downvote" ? "hint.userFeedbackNegative" : "hint.userFeedbackReaction");
339
+ }, pt = (e) => {
340
+ let t = gt(e);
341
+ for (let e = t.length - 1; e >= 0; --e) if (a(t[e])) return e;
342
+ return -1;
343
+ }, mt = E(() => N.messages?.[N.messages.length - 1]), X = E(() => {
344
+ let e = mt.value;
345
+ return e ? e.parts[e.parts.length - 1] : null;
346
+ }), ht = E(() => {
347
+ let e = /* @__PURE__ */ new Map();
348
+ for (let t of N.messages ?? []) t.role === "assistant" && e.set(t.id, _(t.parts));
349
+ return e;
350
+ }), gt = (e) => ht.value.get(e.id) ?? e.parts, Z = E(() => N.status === "submitted" || N.status === "streaming"), _t = E(() => N.status === "error"), vt = E(() => {
351
+ let e = X.value;
352
+ return y(W, e);
353
+ }), yt = E(() => {
354
+ let e = X.value;
355
+ return g(e);
356
+ }), bt = (e) => N.messages?.findIndex((t) => t.id === e), Q = (e) => e === void 0 || !N.messages ? !1 : e === N.messages.length - 1, xt = (e) => Q(e) && N.status === "ready" && !!N.actions?.includes("regenerate"), St = (e, t) => (!Q(t) || N.status === "ready") && !!N.actions?.includes(e), Ct = (e) => {
357
+ let t = e.parts[e.parts.length - 1];
358
+ return a(t);
359
+ }, wt = (e) => e.parts.some((e) => r(e) || n(e)), Tt = (e) => !!N.showExtendedSteps && $(e) && wt(e), $ = (e) => e.role === "assistant", Et = (e) => e.role === "user", Dt = (e) => N.messages?.slice(0, e).reverse().find((e) => $(e)), Ot = (e) => N.messages?.slice(e + 1).find((e) => $(e)), kt = (e) => {
360
+ let t = Dt(e)?.metadata?.createdAt, n = Ot(e)?.metadata?.createdAt;
361
+ if (!t || !n) return;
362
+ let r = new Date(t), i = new Date(n);
363
+ return r.toDateString() === i.toDateString() ? void 0 : i;
364
+ }, At = (e, t) => t === 0 || e.role !== "assistant" ? !1 : !!(N.actions?.length || N.showMessageDateTime && e.metadata?.createdAt !== void 0 || e.metadata?.completedAt !== void 0 || N.showMessageTokensCount && e.metadata?.totalTokens !== void 0), jt = (e) => {
365
+ let t = new Date(e), n = t.toDateString() === (/* @__PURE__ */ new Date()).toDateString();
366
+ return G(t, n ? "time" : "date-time");
367
+ }, Mt = (e) => {
368
+ let { createdAt: t, completedAt: n } = e.metadata ?? {};
369
+ if (!(!t || !n)) return te(_e, n - t);
370
+ }, Nt = me("feedbackMessageEl");
371
+ return V(() => N.feedbackMessageId, async () => {
372
+ if (await P(), !N.feedbackMessageId) return;
373
+ let e = Nt.value?.[0]?.$el;
374
+ if (e) {
375
+ if (Q(bt(N.feedbackMessageId))) {
376
+ qe();
377
+ return;
378
+ }
379
+ e.scrollIntoView({
380
+ behavior: "smooth",
381
+ block: "center"
382
+ });
383
+ }
384
+ }), (r, h) => {
385
+ let _ = ae, v = S, te = C;
386
+ return L(), k("div", {
387
+ ref_key: "scrollEl",
388
+ ref: K,
389
+ class: F(["pk-chatbot-messages", { "pk-chatbot-messages--settling": rt.value }]),
390
+ role: "log",
391
+ "aria-live": "polite",
392
+ "aria-relevant": "additions text",
393
+ "aria-busy": Z.value,
394
+ style: ce({
395
+ "--chatbot-main-color": b.mainColor,
396
+ "--chatbot-contrast-color": Ge.value
397
+ }),
398
+ onScroll: et
399
+ }, [
400
+ b.showScrollToBottom && J.value.length > 1 ? (L(), k("div", Ce, [j(x, {
401
+ items: J.value,
402
+ "active-id": Ze.value,
403
+ onSelect: tt
404
+ }, null, 8, ["items", "active-id"])])) : O("", !0),
405
+ A("div", {
406
+ ref_key: "wrapperEl",
407
+ ref: q,
408
+ class: "pk-chatbot-messages__wrapper"
409
+ }, [
410
+ (L(!0), k(w, null, ue(b.messages, (e, y) => (L(), k(w, { key: e.id }, [Et(e) && kt(y) ? (L(), k("div", we, [A("span", Te, z(B(G)(kt(y), "short")), 1)])) : O("", !0), e.parts.length || Q(y) && Z.value && $(e) ? (L(), k("div", {
411
+ key: 1,
412
+ class: F(["pk-chatbot-message", [`pk-chatbot-message--${e.role}`, { "pk-chatbot-message--loading": Z.value && Q(y) && $(e) }]]),
413
+ style: ce({ minHeight: Q(y) && $(e) && !_t.value ? `${nt.value}px` : void 0 })
414
+ }, [
415
+ j(T, {
416
+ appear: "",
417
+ name: "pk-chatbot-part"
418
+ }, {
419
+ default: H(() => [Tt(e) ? (L(), D(ie, {
420
+ key: 0,
421
+ message: e,
422
+ "is-streaming": Z.value && Q(y),
423
+ "is-dark": b.isDark
424
+ }, null, 8, [
425
+ "message",
426
+ "is-streaming",
427
+ "is-dark"
428
+ ])) : O("", !0)]),
429
+ _: 2
430
+ }, 1024),
431
+ (L(!0), k(w, null, ue(gt(e), (c, u) => (L(), k(w, { key: u }, [B(a)(c) && c.text.trim() ? (L(), D(T, {
432
+ key: 0,
433
+ appear: "",
434
+ name: "pk-chatbot-part"
435
+ }, {
436
+ default: H(() => [A("div", Ee, [de(r.$slots, "text", se({ ref_for: !0 }, {
437
+ message: e,
438
+ part: c,
439
+ index: y,
440
+ isLoading: Z.value
441
+ }), () => [$(e) ? (L(), D(l, {
442
+ key: 0,
443
+ class: "wysiwyg",
444
+ markdown: c.text,
445
+ "is-dark": b.isDark,
446
+ loading: Q(y) && b.status === "streaming"
447
+ }, null, 8, [
448
+ "markdown",
449
+ "is-dark",
450
+ "loading"
451
+ ])) : (L(), k(w, { key: 1 }, [oe(z(c.text), 1)], 64))]), ut(e.id) && !Y(e.id)?.comment && u === pt(e) ? (L(), k("span", {
452
+ key: 0,
453
+ class: F(["pk-chatbot-message__reaction", dt(e.id)]),
454
+ title: ft(e.id)
455
+ }, [lt(e.id) ? (L(), k("span", Oe, z(lt(e.id)), 1)) : (L(), D(_, {
456
+ key: 1,
457
+ name: ct(e.id) === "downvote" ? "ri:thumb-down-fill" : "ri:thumb-up-fill"
458
+ }, null, 8, ["name"]))], 10, De)) : O("", !0)])]),
459
+ _: 2
460
+ }, 1024)) : B(t)(c) ? (L(), D(T, {
461
+ key: 1,
462
+ appear: "",
463
+ name: "pk-chatbot-part"
464
+ }, {
465
+ default: H(() => [j(f, {
466
+ "media-type": c.mediaType,
467
+ url: c.url,
468
+ filename: c.filename,
469
+ size: B(o)(c)?.bytesCount
470
+ }, null, 8, [
471
+ "media-type",
472
+ "url",
473
+ "filename",
474
+ "size"
475
+ ])]),
476
+ _: 2
477
+ }, 1024)) : B(ne)(c) && !B(m)(c) ? (L(), D(T, {
478
+ key: 2,
479
+ appear: "",
480
+ name: "pk-chatbot-part"
481
+ }, {
482
+ default: H(() => [(L(), D(ye, {
483
+ key: `approval-${u}`,
484
+ part: c,
485
+ actionable: b.interactive === !0 && (B(ee)(c) || Q(y)),
486
+ onRespond: (e) => be(c, e)
487
+ }, null, 8, [
488
+ "part",
489
+ "actionable",
490
+ "onRespond"
491
+ ]))]),
492
+ _: 2
493
+ }, 1024)) : B(n)(c) && !B(m)(c) && (B(ge)[B(i)(c)] || B(ve)[c.type] || b.showAllMessageParts) ? (L(), D(T, {
494
+ key: 3,
495
+ appear: "",
496
+ name: "pk-chatbot-part"
497
+ }, {
498
+ default: H(() => [!B(ve)[c.type] && B(ge)[B(i)(c)] ? (L(), D(fe(B(ge)[B(i)(c)]), {
499
+ key: `component-${u}-${B(p)(c)}`,
500
+ part: c
501
+ }, null, 8, ["part"])) : de(r.$slots, c.type, se({ ref_for: !0 }, {
502
+ message: e,
503
+ part: c,
504
+ index: y,
505
+ isLoading: Z.value
506
+ }), () => [b.showAllMessageParts ? (L(), k("div", ke, [A("div", Ae, [B(g)(c) ? (L(), D(_, {
507
+ key: 0,
508
+ name: B(g)(c),
509
+ class: "shrink-0"
510
+ }, null, 8, ["name"])) : O("", !0), A("code", je, z(B(s)(c.type)), 1)])])) : O("", !0)], void 0, 1)]),
511
+ _: 2
512
+ }, 1024)) : O("", !0), j(T, { mode: "out-in" }, {
513
+ default: H(() => [u === pt(e) && b.readonlyFeedback && Y(e.id)?.comment ? (L(), D(d, {
514
+ key: 0,
515
+ feedback: Y(e.id)
516
+ }, null, 8, ["feedback"])) : O("", !0)]),
517
+ _: 2
518
+ }, 1024)], 64))), 128)),
519
+ j(T, {
520
+ name: "fade-in",
521
+ mode: "out-in"
522
+ }, {
523
+ default: H(() => [Z.value && Q(y) && !Ct(e) && $(e) && !Tt(e) ? (L(), k("div", {
524
+ key: `loading-info-${e.id}`,
525
+ class: "pk-chatbot-message__loading-info"
526
+ }, [A("div", Me, [
527
+ j(_, {
528
+ name: "line-md:loading-loop",
529
+ class: "shrink-0"
530
+ }),
531
+ j(T, { mode: "out-in" }, {
532
+ default: H(() => [yt.value ? (L(), D(_, {
533
+ key: yt.value,
534
+ class: "shrink-0",
535
+ name: yt.value
536
+ }, null, 8, ["name"])) : O("", !0)]),
537
+ _: 1
538
+ }),
539
+ j(T, { mode: "out-in" }, {
540
+ default: H(() => [vt.value ? (L(), k("span", {
541
+ key: vt.value,
542
+ class: "text-12"
543
+ }, z(vt.value), 1)) : O("", !0)]),
544
+ _: 1
545
+ })
546
+ ]), j(T, {
547
+ name: "fade-in",
548
+ mode: "out-in"
549
+ }, {
550
+ default: H(() => [X.value && "text" in X.value && X.value.text.trim() ? (L(), D(re, {
551
+ key: 0,
552
+ markdown: X.value.text,
553
+ "is-dark": b.isDark,
554
+ "inner-class": "wysiwyg",
555
+ class: "border border-surface-4 rounded p-4 mt-8 bg-surface-1 max-h-64 text-12 w-full"
556
+ }, null, 8, ["markdown", "is-dark"])) : O("", !0)]),
557
+ _: 1
558
+ })])) : O("", !0)]),
559
+ _: 2
560
+ }, 1024),
561
+ j(T, { mode: "out-in" }, {
562
+ default: H(() => [At(e, y) ? (L(), k("div", Ne, [
563
+ j(te, {
564
+ modifiers: "compact",
565
+ class: "mr-auto shrink-0"
566
+ }, {
567
+ default: H(() => [
568
+ j(T, { mode: "out-in" }, {
569
+ default: H(() => [xt(y) ? (L(), D(v, {
570
+ key: 0,
571
+ icon: "ri:reset-right-line",
572
+ modifiers: "action-quiet-small",
573
+ title: B(W)("action.regenerate"),
574
+ "aria-label": B(W)("action.regenerate"),
575
+ onClick: h[0] ||= U((e) => r.$emit("regenerate"), ["stop"])
576
+ }, null, 8, ["title", "aria-label"])) : O("", !0)]),
577
+ _: 2
578
+ }, 1024),
579
+ j(T, { mode: "out-in" }, {
580
+ default: H(() => [St("show-info", y) ? (L(), D(v, {
581
+ key: 0,
582
+ icon: "ri:information-line",
583
+ title: B(W)("action.getMoreInfo"),
584
+ "aria-label": B(W)("action.getMoreInfo"),
585
+ modifiers: "action-quiet-small",
586
+ onClick: U((t) => r.$emit("show-info", e), ["stop"])
587
+ }, null, 8, [
588
+ "title",
589
+ "aria-label",
590
+ "onClick"
591
+ ])) : O("", !0)]),
592
+ _: 2
593
+ }, 1024),
594
+ j(T, { mode: "out-in" }, {
595
+ default: H(() => [St("revise", y) ? (L(), D(v, {
596
+ key: 0,
597
+ icon: at(e.id) ? "ri:file-edit-fill" : "ri:file-edit-line",
598
+ title: at(e.id) ? B(W)("action.editRevise") : B(W)("action.createRevise"),
599
+ "aria-label": at(e.id) ? B(W)("action.editRevise") : B(W)("action.createRevise"),
600
+ modifiers: "action-quiet-small",
601
+ class: F({ "text-brand": at(e.id) }),
602
+ onClick: U((t) => r.$emit("revise", e), ["stop"])
603
+ }, null, 8, [
604
+ "icon",
605
+ "title",
606
+ "aria-label",
607
+ "class",
608
+ "onClick"
609
+ ])) : O("", !0)]),
610
+ _: 2
611
+ }, 1024),
612
+ j(T, { mode: "out-in" }, {
613
+ default: H(() => [ot("upvote", y) ? (L(), D(v, {
614
+ key: 0,
615
+ icon: Y(e.id)?.vote === "upvote" ? "ri:thumb-up-fill" : "ri:thumb-up-line",
616
+ title: B(W)("action.upvote"),
617
+ "aria-label": B(W)("action.upvote"),
618
+ modifiers: "action-quiet-small",
619
+ onClick: U((t) => r.$emit("upvote", e), ["stop"])
620
+ }, null, 8, [
621
+ "icon",
622
+ "title",
623
+ "aria-label",
624
+ "onClick"
625
+ ])) : O("", !0)]),
626
+ _: 2
627
+ }, 1024),
628
+ j(T, { mode: "out-in" }, {
629
+ default: H(() => [ot("downvote", y) ? (L(), D(v, {
630
+ key: 0,
631
+ icon: Y(e.id)?.vote === "downvote" ? "ri:thumb-down-fill" : "ri:thumb-down-line",
632
+ title: B(W)("action.downvote"),
633
+ "aria-label": B(W)("action.downvote"),
634
+ modifiers: "action-quiet-small",
635
+ onClick: U((t) => r.$emit("downvote", e), ["stop"])
636
+ }, null, 8, [
637
+ "icon",
638
+ "title",
639
+ "aria-label",
640
+ "onClick"
641
+ ])) : O("", !0)]),
642
+ _: 2
643
+ }, 1024),
644
+ j(T, { mode: "out-in" }, {
645
+ default: H(() => [ot("feedback", y) ? (L(), D(v, {
646
+ key: 0,
647
+ icon: Y(e.id)?.comment ? "ri:feedback-fill" : "ri:feedback-line",
648
+ title: B(W)("action.feedback"),
649
+ "aria-label": B(W)("action.feedback"),
650
+ modifiers: "action-quiet-small",
651
+ onClick: U((t) => r.$emit("feedback", e), ["stop"])
652
+ }, null, 8, [
653
+ "icon",
654
+ "title",
655
+ "aria-label",
656
+ "onClick"
657
+ ])) : O("", !0)]),
658
+ _: 2
659
+ }, 1024)
660
+ ]),
661
+ _: 2
662
+ }, 1024),
663
+ !b.showMessageDateTime && e.metadata?.createdAt && e.metadata?.completedAt ? (L(), k("div", Pe, [A("time", {
664
+ datetime: new Date(e.metadata.createdAt).toISOString(),
665
+ title: B(G)(new Date(e.metadata.createdAt), "date-time"),
666
+ class: "flex items-center gap-4 min-w-0"
667
+ }, [j(_, {
668
+ name: "ri:time-line",
669
+ class: "shrink-0"
670
+ }), A("span", Ie, z(jt(e.metadata.createdAt)), 1)], 8, Fe), Mt(e) ? (L(), k("span", Le, [j(_, {
671
+ name: "ri:hourglass-line",
672
+ class: "shrink-0"
673
+ }), A("span", Re, z(Mt(e)), 1)])) : O("", !0)])) : O("", !0),
674
+ b.showMessageTokensCount && e.metadata?.totalTokens ? (L(), k("span", ze, [j(_, {
675
+ name: "ri:ai-generate-2-line",
676
+ class: "shrink-0"
677
+ }), A("span", Be, z(B(_e)(e.metadata.totalTokens, "integer")) + " " + z(B(W)("label.tokens")), 1)])) : O("", !0),
678
+ b.showMessageDateTime && e.metadata?.createdAt ? (L(), k("time", {
679
+ key: 2,
680
+ datetime: new Date(e.metadata?.createdAt).toISOString(),
681
+ class: "flex items-center gap-4 text-12 text-word-3"
682
+ }, [j(_, {
683
+ name: "ri:time-line",
684
+ class: "shrink-0"
685
+ }), A("span", He, z(B(G)(new Date(e.metadata?.createdAt), "date-time")), 1)], 8, Ve)) : O("", !0),
686
+ b.showMessageDateTime && e?.metadata?.completedAt && e?.metadata?.createdAt ? (L(), k("div", Ue, [j(_, {
687
+ name: "ri:hourglass-line",
688
+ class: "shrink-0"
689
+ }), j(c, {
690
+ class: "truncate",
691
+ date: e.metadata?.createdAt,
692
+ "end-date": e.metadata?.completedAt
693
+ }, null, 8, ["date", "end-date"])])) : O("", !0)
694
+ ])) : O("", !0)]),
695
+ _: 2
696
+ }, 1024),
697
+ j(T, { mode: "out-in" }, {
698
+ default: H(() => [e.id === b.feedbackMessageId ? (L(), D(u, {
699
+ key: 0,
700
+ ref_for: !0,
701
+ ref_key: "feedbackMessageEl",
702
+ ref: Nt,
703
+ loading: b.feedbackLoading,
704
+ submitted: b.feedbackSubmitted,
705
+ error: b.feedbackError,
706
+ onSubmit: h[1] ||= (e) => r.$emit("feedback-submit", e),
707
+ onClose: h[2] ||= (e) => r.$emit("feedback-close")
708
+ }, null, 8, [
709
+ "loading",
710
+ "submitted",
711
+ "error"
712
+ ])) : O("", !0)]),
713
+ _: 2
714
+ }, 1024)
715
+ ], 6)) : O("", !0)], 64))), 128)),
716
+ j(T, {
717
+ appear: "",
718
+ name: "pk-chatbot-part"
719
+ }, {
720
+ default: H(() => [_t.value ? (L(), D(e, {
721
+ key: 0,
722
+ error: b.error,
723
+ onRetry: h[3] ||= (e) => r.$emit("auto-retry"),
724
+ onReset: h[4] ||= (e) => r.$emit("reset-chat")
725
+ }, null, 8, ["error"])) : O("", !0)]),
726
+ _: 1
727
+ }),
728
+ mt.value?.role === "user" || _t.value ? (L(), k("div", {
729
+ key: 0,
730
+ class: "pk-chatbot-messages__spacer",
731
+ style: ce({ minHeight: `${nt.value}px` })
732
+ }, null, 4)) : O("", !0)
733
+ ], 512),
734
+ j(T, { name: "pk-chatbot-messages-fab" }, {
735
+ default: H(() => [b.showScrollToBottom && (B(Je) || !B(Ye)) ? (L(), k("button", {
736
+ key: 0,
737
+ type: "button",
738
+ class: "pk-chatbot-messages__scroll-to-bottom",
739
+ title: B(W)("action.scrollToBottom"),
740
+ "aria-label": B(W)("action.scrollToBottom"),
741
+ onClick: Xe
742
+ }, [j(_, { name: "ri:arrow-down-line" })], 8, We)) : O("", !0)]),
743
+ _: 1
744
+ })
745
+ ], 46, Se);
746
+ };
747
+ }
748
+ });
749
+ //#endregion
750
+ export { q as t };
751
+
752
+ //# sourceMappingURL=PkChatbotMessages-BrufA7o1.js.map