@useago/sdk 1.0.10 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/widget.js CHANGED
@@ -1,190 +1,190 @@
1
- import { t as dt, u as ct } from "./AgoClient-QcTtrN7u.js";
2
- import { r as pt, t as ft } from "./createFormCollector-CFt1_QSL.js";
3
- import { t as ut } from "./createConversationSession-CR-71aLR.js";
4
- var gt = {
1
+ import { a as yt, i as wt, m as Et, o as St, s as Rt, t as _t } from "./AgoClient-Cwx_eYSu.js";
2
+ import { r as kt, t as At } from "./createFormCollector-CyWisAkI.js";
3
+ import { t as It } from "./createConversationSession-B3h567tt.js";
4
+ var Nt = {
5
5
  "&": "&",
6
6
  "<": "&lt;",
7
7
  ">": "&gt;",
8
8
  '"': "&quot;",
9
9
  "'": "&#39;"
10
10
  };
11
- function j(r) {
12
- return r.replace(/[&<>"']/g, (o) => gt[o]);
11
+ function Z(r) {
12
+ return r.replace(/[&<>"']/g, (o) => Nt[o]);
13
13
  }
14
- function Fe(r) {
14
+ function Ve(r) {
15
15
  const o = r.trim();
16
16
  return /^(https?:|mailto:|tel:|#|\/|\.\/|\.\.\/)/i.test(o) || !/^[a-z][a-z0-9+.-]*:/i.test(o) ? o : null;
17
17
  }
18
- var je = '"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace', ee = "";
19
- function H(r) {
20
- const o = [], a = (g) => (o.push(g), `${ee}${o.length - 1}${ee}`);
21
- let t = r;
22
- return t = t.replace(/`([^`]+)`/g, (g, s) => a(`<code style="background:#f0f2f5;padding:2px 5px;border-radius:4px;font-size:13px;font-family:${je}">${j(s)}</code>`)), t = t.replace(/!\[([^\]]*)\]\(([^)\s]+)\)/g, (g, s, u) => {
23
- const l = Fe(u);
24
- return l ? a(`<img alt="${j(s)}" src="${j(l)}" style="max-width:100%;border-radius:8px;margin:4px 0" />`) : g;
25
- }), t = t.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g, (g, s, u) => {
26
- const l = Fe(u);
27
- return l ? a(`<a href="${j(l)}" target="_blank" rel="noopener noreferrer" style="color:#1b5fc4;text-decoration:underline">${H(s)}</a>`) : g;
28
- }), t = j(t), t = t.replace(/\*\*([^*]+?)\*\*/g, "<strong>$1</strong>").replace(/__([^_]+?)__/g, "<strong>$1</strong>").replace(/~~([^~]+?)~~/g, "<del>$1</del>").replace(/(^|[^*])\*(?!\s)([^*]+?)\*/g, "$1<em>$2</em>").replace(/(^|[^\w_])_(?!\s)([^_]+?)_/g, "$1<em>$2</em>"), t = t.replace(new RegExp(`${ee}(\\d+)${ee}`, "g"), (g, s) => o[Number(s)]), t;
18
+ var ot = '"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace', ue = "";
19
+ function j(r) {
20
+ const o = [], a = (m) => (o.push(m), `${ue}${o.length - 1}${ue}`);
21
+ let n = r;
22
+ return n = n.replace(/`([^`]+)`/g, (m, i) => a(`<code style="background:#f0f2f5;padding:2px 5px;border-radius:4px;font-size:13px;font-family:${ot}">${Z(i)}</code>`)), n = n.replace(/!\[([^\]]*)\]\(([^)\s]+)\)/g, (m, i, E) => {
23
+ const p = Ve(E);
24
+ return p ? a(`<img alt="${Z(i)}" src="${Z(p)}" style="max-width:100%;border-radius:8px;margin:4px 0" />`) : m;
25
+ }), n = n.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g, (m, i, E) => {
26
+ const p = Ve(E);
27
+ return p ? a(`<a href="${Z(p)}" target="_blank" rel="noopener noreferrer" style="color:#1b5fc4;text-decoration:underline">${j(i)}</a>`) : m;
28
+ }), n = Z(n), n = n.replace(/\*\*([^*]+?)\*\*/g, "<strong>$1</strong>").replace(/__([^_]+?)__/g, "<strong>$1</strong>").replace(/~~([^~]+?)~~/g, "<del>$1</del>").replace(/(^|[^*])\*(?!\s)([^*]+?)\*/g, "$1<em>$2</em>").replace(/(^|[^\w_])_(?!\s)([^_]+?)_/g, "$1<em>$2</em>"), n = n.replace(new RegExp(`${ue}(\\d+)${ue}`, "g"), (m, i) => o[Number(i)]), n;
29
29
  }
30
- function k(r, o, a) {
31
- const t = document.createElement(r);
32
- return Object.assign(t.style, o), a !== void 0 && (t.innerHTML = a), t;
30
+ function L(r, o, a) {
31
+ const n = document.createElement(r);
32
+ return Object.assign(n.style, o), a !== void 0 && (n.innerHTML = a), n;
33
33
  }
34
- var Xe = /^ {0,3}([-*_])( *\1){2,} *$/, Ke = /^ {0,3}(#{1,6})\s+(.*?)\s*#*\s*$/, qe = /^ {0,3}(```+|~~~+)/, ne = /^ {0,3}>\s?/, X = /^(\s*)([-*+]|\d+[.)])\s+(.*)$/, mt = [
34
+ var rt = /^ {0,3}([-*_])( *\1){2,} *$/, at = /^ {0,3}(#{1,6})\s+(.*?)\s*#*\s*$/, it = /^ {0,3}(```+|~~~+)/, ge = /^ {0,3}>\s?/, J = /^(\s*)([-*+]|\d+[.)])\s+(.*)$/, $t = [
35
35
  "20px",
36
36
  "18px",
37
37
  "16px",
38
38
  "15px",
39
39
  "14px",
40
40
  "13px"
41
- ], ye = (r) => r.match(/^\s*/)?.[0].length ?? 0;
42
- function ht(r) {
43
- return r.trim() === "" || Xe.test(r) || Ke.test(r) || qe.test(r) || ne.test(r) || X.test(r);
41
+ ], Ne = (r) => r.match(/^\s*/)?.[0].length ?? 0;
42
+ function Lt(r) {
43
+ return r.trim() === "" || rt.test(r) || at.test(r) || it.test(r) || ge.test(r) || J.test(r);
44
44
  }
45
- function Ve(r) {
46
- const o = r[0].match(X), a = o[1].length, t = /\d/.test(o[2]), g = k(t ? "ol" : "ul", {
45
+ function st(r) {
46
+ const o = r[0].match(J), a = o[1].length, n = /\d/.test(o[2]), m = L(n ? "ol" : "ul", {
47
47
  margin: "0 0 8px 0",
48
48
  paddingLeft: "20px",
49
- listStyleType: t ? "decimal" : "disc",
49
+ listStyleType: n ? "decimal" : "disc",
50
50
  listStylePosition: "outside"
51
51
  });
52
- let s = 0;
53
- for (; s < r.length; ) {
54
- const u = r[s].match(X), l = [];
55
- for (s++; s < r.length && ye(r[s]) > a; )
56
- l.push(r[s]), s++;
57
- const p = k("li", {
52
+ let i = 0;
53
+ for (; i < r.length; ) {
54
+ const E = r[i].match(J), p = [];
55
+ for (i++; i < r.length && Ne(r[i]) > a; )
56
+ p.push(r[i]), i++;
57
+ const C = L("li", {
58
58
  display: "list-item",
59
59
  margin: "2px 0",
60
60
  lineHeight: "1.6"
61
- }), c = u[3].match(/^\[([ xX])\]\s+(.*)$/);
62
- c ? (p.style.listStyleType = "none", p.style.marginLeft = "-20px", p.innerHTML = `<span style="margin-right:6px">${c[1].toLowerCase() === "x" ? "☑" : "☐"}</span>${H(c[2])}`) : p.innerHTML = H(u[3]), l.filter((x) => X.test(x)).length > 0 && p.appendChild(Ve(l.filter((x) => x.trim() !== ""))), g.appendChild(p);
61
+ }), d = E[3].match(/^\[([ xX])\]\s+(.*)$/);
62
+ d ? (C.style.listStyleType = "none", C.style.marginLeft = "-20px", C.innerHTML = `<span style="margin-right:6px">${d[1].toLowerCase() === "x" ? "☑" : "☐"}</span>${j(d[2])}`) : C.innerHTML = j(E[3]), p.filter((x) => J.test(x)).length > 0 && C.appendChild(st(p.filter((x) => x.trim() !== ""))), m.appendChild(C);
63
63
  }
64
- return g;
64
+ return m;
65
65
  }
66
- function xt(r) {
67
- const o = (l) => l.replace(/^\s*\|?/, "").replace(/\|?\s*$/, "").split("|").map((p) => p.trim()), a = k("div", {
66
+ function Tt(r) {
67
+ const o = (p) => p.replace(/^\s*\|?/, "").replace(/\|?\s*$/, "").split("|").map((C) => C.trim()), a = L("div", {
68
68
  overflowX: "auto",
69
69
  margin: "0 0 8px 0"
70
- }), t = k("table", {
70
+ }), n = L("table", {
71
71
  borderCollapse: "collapse",
72
72
  width: "100%",
73
73
  fontSize: "13px"
74
- }), g = document.createElement("thead"), s = document.createElement("tr");
75
- for (const l of o(r[0])) s.appendChild(k("th", {
74
+ }), m = document.createElement("thead"), i = document.createElement("tr");
75
+ for (const p of o(r[0])) i.appendChild(L("th", {
76
76
  border: "1px solid #dee3e8",
77
77
  padding: "6px 10px",
78
78
  textAlign: "left",
79
79
  backgroundColor: "#f5f7fa",
80
80
  fontWeight: "600"
81
- }, H(l)));
82
- g.appendChild(s), t.appendChild(g);
83
- const u = document.createElement("tbody");
84
- for (const l of r.slice(2)) {
85
- const p = document.createElement("tr");
86
- for (const c of o(l)) p.appendChild(k("td", {
81
+ }, j(p)));
82
+ m.appendChild(i), n.appendChild(m);
83
+ const E = document.createElement("tbody");
84
+ for (const p of r.slice(2)) {
85
+ const C = document.createElement("tr");
86
+ for (const d of o(p)) C.appendChild(L("td", {
87
87
  border: "1px solid #dee3e8",
88
88
  padding: "6px 10px"
89
- }, H(c)));
90
- u.appendChild(p);
89
+ }, j(d)));
90
+ E.appendChild(C);
91
91
  }
92
- return t.appendChild(u), a.appendChild(t), a;
92
+ return n.appendChild(E), a.appendChild(n), a;
93
93
  }
94
- var bt = (r) => !!r && /^\s*\|?\s*:?-{1,}:?\s*(\|\s*:?-{1,}:?\s*)*\|?\s*$/.test(r);
95
- function Ce(r) {
94
+ var Ot = (r) => !!r && /^\s*\|?\s*:?-{1,}:?\s*(\|\s*:?-{1,}:?\s*)*\|?\s*$/.test(r);
95
+ function $e(r) {
96
96
  const o = document.createDocumentFragment(), a = r.replace(/\r\n?/g, `
97
97
  `).split(`
98
98
  `);
99
- let t = 0;
100
- for (; t < a.length; ) {
101
- const s = a[t];
102
- if (s.trim() === "") {
103
- t++;
99
+ let n = 0;
100
+ for (; n < a.length; ) {
101
+ const i = a[n];
102
+ if (i.trim() === "") {
103
+ n++;
104
104
  continue;
105
105
  }
106
- const u = s.match(qe);
107
- if (u) {
108
- const c = u[1][0], x = [];
109
- for (t++; t < a.length && !new RegExp(`^ {0,3}${c === "`" ? "`{3,}" : "~{3,}"}\\s*$`).test(a[t]); )
110
- x.push(a[t]), t++;
111
- t++;
112
- const B = k("pre", { margin: "0 0 8px 0" });
113
- B.appendChild(k("code", {
106
+ const E = i.match(it);
107
+ if (E) {
108
+ const d = E[1][0], x = [];
109
+ for (n++; n < a.length && !new RegExp(`^ {0,3}${d === "`" ? "`{3,}" : "~{3,}"}\\s*$`).test(a[n]); )
110
+ x.push(a[n]), n++;
111
+ n++;
112
+ const B = L("pre", { margin: "0 0 8px 0" });
113
+ B.appendChild(L("code", {
114
114
  display: "block",
115
115
  background: "#f5f5f5",
116
116
  padding: "8px 12px",
117
117
  borderRadius: "6px",
118
118
  fontSize: "13px",
119
119
  overflowX: "auto",
120
- fontFamily: je,
120
+ fontFamily: ot,
121
121
  whiteSpace: "pre"
122
- }, j(x.join(`
122
+ }, Z(x.join(`
123
123
  `)))), o.appendChild(B);
124
124
  continue;
125
125
  }
126
- if (Xe.test(s)) {
127
- o.appendChild(k("hr", {
126
+ if (rt.test(i)) {
127
+ o.appendChild(L("hr", {
128
128
  border: "none",
129
129
  borderTop: "1px solid #dee3e8",
130
130
  margin: "12px 0"
131
- })), t++;
131
+ })), n++;
132
132
  continue;
133
133
  }
134
- const l = s.match(Ke);
135
- if (l) {
136
- const c = l[1].length;
137
- o.appendChild(k(`h${c}`, {
134
+ const p = i.match(at);
135
+ if (p) {
136
+ const d = p[1].length;
137
+ o.appendChild(L(`h${d}`, {
138
138
  margin: "16px 0 8px 0",
139
- fontSize: mt[c - 1],
139
+ fontSize: $t[d - 1],
140
140
  fontWeight: "600",
141
141
  lineHeight: "1.3"
142
- }, H(l[2]))), t++;
142
+ }, j(p[2]))), n++;
143
143
  continue;
144
144
  }
145
- if (ne.test(s)) {
146
- const c = [];
147
- for (; t < a.length && ne.test(a[t]); )
148
- c.push(a[t].replace(ne, "")), t++;
149
- const x = k("blockquote", {
145
+ if (ge.test(i)) {
146
+ const d = [];
147
+ for (; n < a.length && ge.test(a[n]); )
148
+ d.push(a[n].replace(ge, "")), n++;
149
+ const x = L("blockquote", {
150
150
  borderLeft: "4px solid #dee3e8",
151
151
  paddingLeft: "12px",
152
152
  margin: "0 0 8px 0",
153
153
  fontStyle: "italic",
154
154
  color: "#6b6d6f"
155
155
  });
156
- x.appendChild(Ce(c.join(`
156
+ x.appendChild($e(d.join(`
157
157
  `))), o.appendChild(x);
158
158
  continue;
159
159
  }
160
- if (s.includes("|") && bt(a[t + 1])) {
161
- const c = [s, a[t + 1]];
162
- for (t += 2; t < a.length && a[t].includes("|") && a[t].trim(); )
163
- c.push(a[t]), t++;
164
- o.appendChild(xt(c));
160
+ if (i.includes("|") && Ot(a[n + 1])) {
161
+ const d = [i, a[n + 1]];
162
+ for (n += 2; n < a.length && a[n].includes("|") && a[n].trim(); )
163
+ d.push(a[n]), n++;
164
+ o.appendChild(Tt(d));
165
165
  continue;
166
166
  }
167
- if (X.test(s)) {
168
- const c = [], x = ye(s);
169
- for (; t < a.length && a[t].trim() !== ""; )
170
- if (X.test(a[t]) || ye(a[t]) > x)
171
- c.push(a[t]), t++;
167
+ if (J.test(i)) {
168
+ const d = [], x = Ne(i);
169
+ for (; n < a.length && a[n].trim() !== ""; )
170
+ if (J.test(a[n]) || Ne(a[n]) > x)
171
+ d.push(a[n]), n++;
172
172
  else break;
173
- o.appendChild(Ve(c));
173
+ o.appendChild(st(d));
174
174
  continue;
175
175
  }
176
- const p = [s];
177
- for (t++; t < a.length && !ht(a[t]); )
178
- p.push(a[t]), t++;
179
- o.appendChild(k("p", {
176
+ const C = [i];
177
+ for (n++; n < a.length && !Lt(a[n]); )
178
+ C.push(a[n]), n++;
179
+ o.appendChild(L("p", {
180
180
  margin: "0 0 8px 0",
181
181
  lineHeight: "1.6"
182
- }, p.map((c) => H(c)).join("<br>")));
182
+ }, C.map((d) => j(d)).join("<br>")));
183
183
  }
184
- const g = o.lastElementChild;
185
- return g && (g.style.marginBottom = "0"), o;
184
+ const m = o.lastElementChild;
185
+ return m && (m.style.marginBottom = "0"), o;
186
186
  }
187
- var ve = 'var(--ago-font, "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif)', ze = {
187
+ var Le = 'var(--ago-font, "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif)', Ye = {
188
188
  font: "--ago-font",
189
189
  radius: "--ago-radius",
190
190
  messageRadius: "--ago-message-radius",
@@ -199,23 +199,23 @@ var ve = 'var(--ago-font, "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "S
199
199
  border: "--ago-border-color",
200
200
  accent: "--ago-accent-color",
201
201
  agentBubbleBg: "--ago-agent-bubble-background"
202
- }, oe = "var(--ago-brand-color, #03182f)", Ee = "var(--ago-brand-text-color, #fff)", yt = "var(--ago-header-background, var(--ago-brand-color, #03182f))", He = "var(--ago-header-text-color, #e8f0fe)", q = "var(--ago-panel-background, #fff)", Ue = "var(--ago-messages-background, #fbfbfb)", te = "var(--ago-text-color, #30373e)", Ct = "var(--ago-muted-text-color, #6b6d6f)", N = "var(--ago-border-color, #dee3e8)", xe = "var(--ago-accent-color, #1b5fc4)", We = "var(--ago-agent-bubble-background, #f1f3f5)", vt = "var(--ago-radius, 16px)", be = "var(--ago-message-radius, 16px)";
203
- function Et(r, o) {
202
+ }, me = "var(--ago-brand-color, #03182f)", he = "var(--ago-brand-text-color, #fff)", Dt = "var(--ago-header-background, var(--ago-brand-color, #03182f))", Ze = "var(--ago-header-text-color, #e8f0fe)", Q = "var(--ago-panel-background, #fff)", Qe = "var(--ago-messages-background, #fbfbfb)", ae = "var(--ago-text-color, #30373e)", Je = "var(--ago-muted-text-color, #6b6d6f)", $ = "var(--ago-border-color, #dee3e8)", Ae = "var(--ago-accent-color, #1b5fc4)", et = "var(--ago-agent-bubble-background, #f1f3f5)", Bt = "var(--ago-radius, 16px)", Ie = "var(--ago-message-radius, 16px)", Mt = "var(--ago-message-radius, 20px)";
203
+ function zt(r, o) {
204
204
  if (o)
205
- for (const a of Object.keys(ze)) {
206
- const t = o[a];
207
- t != null && r.style.setProperty(ze[a], t);
205
+ for (const a of Object.keys(Ye)) {
206
+ const n = o[a];
207
+ n != null && r.style.setProperty(Ye[a], n);
208
208
  }
209
209
  }
210
- function v(r, o) {
210
+ function w(r, o) {
211
211
  Object.assign(r.style, o);
212
212
  }
213
- function h(r = {}) {
213
+ function f(r = {}) {
214
214
  const o = document.createElement("div");
215
- return v(o, r), o;
215
+ return w(o, r), o;
216
216
  }
217
- var Pe = "Form submitted.";
218
- function wt(r) {
217
+ var tt = "Form submitted.";
218
+ function Ft(r) {
219
219
  if (typeof r == "string") return r || null;
220
220
  if (!r || typeof r != "object") return null;
221
221
  const o = r;
@@ -223,173 +223,176 @@ function wt(r) {
223
223
  const a = o.result;
224
224
  if (typeof a == "string" && a) return a;
225
225
  if (a && typeof a == "object") {
226
- const t = a.message;
227
- if (typeof t == "string" && t) return t;
226
+ const n = a.message;
227
+ if (typeof n == "string" && n) return n;
228
228
  }
229
229
  return null;
230
230
  }
231
- var Ge = "ago-chat-widget-keyframes";
232
- function St() {
233
- if (typeof document > "u" || document.getElementById(Ge)) return;
231
+ var nt = "ago-chat-widget-keyframes";
232
+ function Ht() {
233
+ if (typeof document > "u" || document.getElementById(nt)) return;
234
234
  const r = document.createElement("style");
235
- r.id = Ge, r.textContent = "@keyframes ago-pulse { 0%, 80%, 100% { opacity: 0.3; transform: scale(0.8); } 40% { opacity: 1; transform: scale(1); } }", document.head.appendChild(r);
235
+ r.id = nt, r.textContent = "@keyframes ago-pulse { 0%, 80%, 100% { opacity: 0.3; transform: scale(0.8); } 40% { opacity: 1; transform: scale(1); } }@keyframes ago-spin { to { transform: rotate(360deg); } }", document.head.appendChild(r);
236
236
  }
237
- function Rt(r) {
237
+ function Wt(r) {
238
238
  const o = typeof r == "string" ? document.querySelector(r) : r;
239
239
  if (!o) throw new Error(`mountChatWidget: target "${String(r)}" not found.`);
240
240
  return o;
241
241
  }
242
- function $t(r, o) {
243
- const { title: a = "Chat", welcomeMessage: t = "Hello! How can I help you today?", placeholder: g = "Type a message...", allowFiles: s = !1, height: u = 500, placement: l = "inline", width: p = 400, defaultOpen: c = !1, logoUrl: x, showAgentName: B = !1, agentBubble: b = !1, bubbleStyle: L = "default", showHeader: V = !0, theme: Q, loadThreads: O = !1, forms: we, formSubmittedMessage: U = Pe, onFollowUpClick: re, onMessageSent: Qe, onMessageReceived: Ye, onFormSubmitted: ae, onFormError: se } = o;
244
- if (!o.client && !o.config?.baseUrl) throw new ct("mountChatWidget requires either `client` or `config` (with a baseUrl).", "config_missing_base_url");
245
- const m = o.client ?? new dt(o.config), Se = Rt(r), W = l === "left" || l === "right", Ze = W && (o.launcher ?? !0);
246
- let P = W ? c : !0;
247
- const ie = o.persistConversation, Y = ie ? ut(ie === !0 ? {} : ie) : void 0;
248
- let A = o.conversationId ?? Y?.getLastActiveThread() ?? void 0, d = [], D = !1, K = null;
249
- const Re = [];
250
- function Je(e) {
251
- if (typeof U == "function") {
252
- const i = U(e);
253
- if (typeof i == "string" && i) return i;
242
+ function Xt(r, o) {
243
+ const { title: a = "Chat", welcomeMessage: n = "Hello! How can I help you today?", placeholder: m = "Type a message...", allowFiles: i = !1, height: E = 500, placement: p = "inline", width: C = 400, defaultOpen: d = !1, logoUrl: x, showAgentName: B = !1, agentBubble: T = !1, bubbleStyle: O = "default", showHeader: ee = !0, theme: ie, loadThreads: te = !1, forms: b, formSubmittedMessage: S = tt, onFollowUpClick: X, onMessageSent: se, onMessageReceived: z, onFormSubmitted: le, onFormError: ne } = o, de = typeof n == "string" ? {
244
+ message: n,
245
+ mode: "static"
246
+ } : n, Te = de.message, Oe = de.mode ?? "static", lt = "speed" in de && de.speed || 45;
247
+ if (!o.client && !o.config?.baseUrl) throw new Et("mountChatWidget requires either `client` or `config` (with a baseUrl).", "config_missing_base_url");
248
+ const v = o.client ?? new _t(o.config), De = Wt(r), K = p === "left" || p === "right", dt = K && (o.launcher ?? !0);
249
+ let q = K ? d : !0;
250
+ const xe = o.persistConversation, ce = xe ? It(xe === !0 ? {} : xe) : void 0;
251
+ let D = o.conversationId ?? ce?.getLastActiveThread() ?? void 0, l = [], H = !1, oe = null, F;
252
+ const Be = [];
253
+ function ct(e) {
254
+ if (typeof S == "function") {
255
+ const s = S(e);
256
+ if (typeof s == "string" && s) return s;
254
257
  }
255
- const n = wt(e);
256
- return n || (typeof U == "string" ? U : Pe);
258
+ const t = Ft(e);
259
+ return t || (typeof S == "string" ? S : tt);
257
260
  }
258
- const Z = [], G = h({
261
+ const pe = [], V = f({
259
262
  display: "flex",
260
263
  flexDirection: "column",
261
- height: W ? "100%" : typeof u == "number" ? `${u}px` : u,
262
- border: `1px solid ${N}`,
263
- borderRadius: vt,
264
+ height: K ? "100%" : typeof E == "number" ? `${E}px` : E,
265
+ border: `1px solid ${$}`,
266
+ borderRadius: Bt,
264
267
  overflow: "hidden",
265
- backgroundColor: q,
266
- fontFamily: ve,
268
+ backgroundColor: Q,
269
+ fontFamily: Le,
267
270
  textAlign: "left",
268
271
  boxShadow: "rgba(15, 15, 15, 0.08) 0px 2px 16px 0px"
269
272
  });
270
- G.className = "ago-chat-widget", Et(G, Q);
271
- let M;
272
- if (V) {
273
- if (M = h({
273
+ V.className = "ago-chat-widget", zt(V, ie);
274
+ let W;
275
+ if (ee) {
276
+ if (W = f({
274
277
  padding: "14px 16px",
275
- borderBottom: `1px solid ${N}`,
276
- backgroundColor: yt,
277
- color: He,
278
+ borderBottom: `1px solid ${$}`,
279
+ backgroundColor: Dt,
280
+ color: Ze,
278
281
  display: "flex",
279
282
  alignItems: "center",
280
283
  gap: "10px"
281
- }), M.className = "ago-chat-widget__header", x) {
282
- const n = document.createElement("img");
283
- n.src = x, n.alt = "Logo", v(n, {
284
+ }), W.className = "ago-chat-widget__header", x) {
285
+ const t = document.createElement("img");
286
+ t.src = x, t.alt = "Logo", w(t, {
284
287
  height: "24px",
285
288
  width: "auto"
286
- }), M.appendChild(n);
289
+ }), W.appendChild(t);
287
290
  }
288
291
  const e = document.createElement("h3");
289
- if (e.textContent = a, v(e, {
292
+ if (e.textContent = a, w(e, {
290
293
  margin: "0",
291
294
  fontSize: "15px",
292
295
  fontWeight: "600"
293
- }), M.appendChild(e), W) {
294
- const n = document.createElement("button");
295
- n.type = "button", n.className = "ago-chat-widget__close", n.setAttribute("aria-label", "Close"), n.textContent = "×", v(n, {
296
+ }), W.appendChild(e), K) {
297
+ const t = document.createElement("button");
298
+ t.type = "button", t.className = "ago-chat-widget__close", t.setAttribute("aria-label", "Close"), t.textContent = "×", w(t, {
296
299
  marginLeft: "auto",
297
300
  background: "transparent",
298
301
  border: "none",
299
- color: He,
302
+ color: Ze,
300
303
  fontSize: "22px",
301
304
  lineHeight: "1",
302
305
  cursor: "pointer",
303
306
  padding: "0 2px"
304
- }), n.addEventListener("click", () => me()), M.appendChild(n);
307
+ }), t.addEventListener("click", () => Re()), W.appendChild(t);
305
308
  }
306
309
  }
307
- const T = h({
310
+ const k = f({
308
311
  flex: "1",
309
312
  overflow: "auto",
310
313
  padding: "16px",
311
- backgroundColor: Ue
314
+ backgroundColor: Qe
312
315
  });
313
- T.className = "ago-chat-widget__messages";
314
- const { inputRow: et, setDisabled: tt, focus: le } = _t({
315
- placeholder: g,
316
- allowFiles: s,
317
- onSend: (e, n) => {
318
- pe(e, n);
316
+ k.className = "ago-chat-widget__messages", k.setAttribute("role", "log"), k.setAttribute("aria-live", "polite"), k.setAttribute("aria-relevant", "additions text"), k.setAttribute("aria-atomic", "false");
317
+ const { inputRow: pt, setDisabled: ft, focus: be } = Ut({
318
+ placeholder: m,
319
+ allowFiles: i,
320
+ onSend: (e, t) => {
321
+ ye(e, t);
319
322
  }
320
323
  });
321
- St(), G.append(...M ? [M] : [], T, et);
322
- let J = G, F, w;
323
- const de = l === "left" ? "left" : "right";
324
- if (W && (F = h({
324
+ Ht(), V.append(...W ? [W] : [], k, pt);
325
+ let fe = V, U, A;
326
+ const ve = p === "left" ? "left" : "right";
327
+ if (K && (U = f({
325
328
  position: "fixed",
326
329
  top: "0",
327
330
  bottom: "0",
328
- [de]: "0",
329
- width: typeof p == "number" ? `${p}px` : p,
331
+ [ve]: "0",
332
+ width: typeof C == "number" ? `${C}px` : C,
330
333
  maxWidth: "100vw",
331
334
  display: "flex",
332
335
  zIndex: "2147483000",
333
336
  transition: "transform 0.3s ease",
334
337
  boxShadow: "rgba(15, 15, 15, 0.18) 0px 0px 24px 0px"
335
- }), F.className = "ago-chat-widget-panel", v(G, {
338
+ }), U.className = "ago-chat-widget-panel", w(V, {
336
339
  height: "100%",
337
340
  width: "100%",
338
341
  borderRadius: "0",
339
342
  border: "none",
340
343
  boxShadow: "none",
341
- [de === "left" ? "borderRight" : "borderLeft"]: `1px solid ${N}`
342
- }), F.appendChild(G), J = F), Ze) {
343
- if (w = document.createElement("button"), w.type = "button", w.className = "ago-chat-widget-launcher", w.setAttribute("aria-label", `Open ${a}`), v(w, {
344
+ [ve === "left" ? "borderRight" : "borderLeft"]: `1px solid ${$}`
345
+ }), U.appendChild(V), fe = U), dt) {
346
+ if (A = document.createElement("button"), A.type = "button", A.className = "ago-chat-widget-launcher", A.setAttribute("aria-label", `Open ${a}`), w(A, {
344
347
  position: "fixed",
345
348
  bottom: "20px",
346
- [de]: "20px",
349
+ [ve]: "20px",
347
350
  width: "56px",
348
351
  height: "56px",
349
352
  borderRadius: "50%",
350
353
  border: "none",
351
- backgroundColor: oe,
352
- color: Ee,
354
+ backgroundColor: me,
355
+ color: he,
353
356
  cursor: "pointer",
354
357
  display: "flex",
355
358
  alignItems: "center",
356
359
  justifyContent: "center",
357
360
  zIndex: "2147483000",
358
361
  boxShadow: "rgba(15, 15, 15, 0.2) 0px 4px 14px 0px",
359
- fontFamily: ve
362
+ fontFamily: Le
360
363
  }), x) {
361
364
  const e = document.createElement("img");
362
- e.src = x, e.alt = "", v(e, {
365
+ e.src = x, e.alt = "", w(e, {
363
366
  width: "26px",
364
367
  height: "26px",
365
368
  objectFit: "contain"
366
- }), w.appendChild(e);
367
- } else w.appendChild(it());
368
- w.addEventListener("click", () => ge());
369
+ }), A.appendChild(e);
370
+ } else A.appendChild(vt());
371
+ A.addEventListener("click", () => Se());
369
372
  }
370
- Se.appendChild(J), w && Se.appendChild(w), ue();
371
- const _e = re !== !1, ke = re === !1 ? void 0 : re ?? ((e) => {
372
- pe(e);
373
+ De.appendChild(fe), A && De.appendChild(A), Ee();
374
+ const Me = X !== !1, ze = X === !1 ? void 0 : X ?? ((e) => {
375
+ ye(e);
373
376
  });
374
- function nt(e, n, i = !0) {
375
- const f = e.role === "user", C = L === "imessage", _ = h({
377
+ function ut(e, t, s = !0) {
378
+ const c = e.role === "user", u = O === "imessage", R = f({
376
379
  display: "flex",
377
380
  flexDirection: "column",
378
- alignItems: f ? "flex-end" : "flex-start",
379
- marginBottom: C && !i ? "2px" : "16px"
381
+ alignItems: c ? "flex-end" : "flex-start",
382
+ marginBottom: u && !s ? "2px" : "16px"
380
383
  });
381
- if (_.className = `ago-message ago-message--${e.role}`, !f && B && e.agent) {
382
- const y = h({
384
+ if (R.className = `ago-message ago-message--${e.role}`, !c && B && e.agent) {
385
+ const g = f({
383
386
  fontSize: "13px",
384
387
  fontWeight: "500",
385
- color: te,
388
+ color: ae,
386
389
  marginBottom: "6px",
387
390
  padding: "0 4px"
388
391
  });
389
- y.className = "ago-message__agent", y.textContent = e.agent.displayName || e.agent.name, _.appendChild(y);
392
+ g.className = "ago-message__agent", g.textContent = e.agent.displayName || e.agent.name, R.appendChild(g);
390
393
  }
391
- if (!f && e.sources && e.sources.length > 0) {
392
- const y = h({
394
+ if (!c && e.sources && e.sources.length > 0) {
395
+ const g = f({
393
396
  display: "grid",
394
397
  gridTemplateColumns: "1fr 1fr",
395
398
  gap: "6px",
@@ -397,28 +400,28 @@ function $t(r, o) {
397
400
  width: "100%",
398
401
  maxWidth: "85%"
399
402
  });
400
- y.className = "ago-message__sources", e.sources.forEach((E, R) => {
401
- const z = E.url ? document.createElement("a") : document.createElement("div");
402
- E.url && z instanceof HTMLAnchorElement && (z.href = E.url, z.target = "_blank", z.rel = "noopener noreferrer"), v(z, {
403
+ g.className = "ago-message__sources", e.sources.forEach((h, y) => {
404
+ const _ = h.url ? document.createElement("a") : document.createElement("div");
405
+ h.url && _ instanceof HTMLAnchorElement && (_.href = h.url, _.target = "_blank", _.rel = "noopener noreferrer"), w(_, {
403
406
  display: "flex",
404
407
  alignItems: "center",
405
408
  gap: "8px",
406
409
  padding: "8px 10px",
407
- border: `1px solid ${N}`,
410
+ border: `1px solid ${$}`,
408
411
  borderRadius: "8px",
409
- backgroundColor: q,
412
+ backgroundColor: Q,
410
413
  textDecoration: "none",
411
- color: te,
414
+ color: ae,
412
415
  fontSize: "12px",
413
416
  overflow: "hidden"
414
417
  });
415
- const Me = h({
418
+ const G = f({
416
419
  flexShrink: "0",
417
420
  width: "18px",
418
421
  height: "18px",
419
422
  borderRadius: "3px",
420
- border: `1px solid ${xe}`,
421
- color: xe,
423
+ border: `1px solid ${Ae}`,
424
+ color: Ae,
422
425
  fontSize: "11px",
423
426
  fontWeight: "500",
424
427
  display: "flex",
@@ -426,111 +429,186 @@ function $t(r, o) {
426
429
  justifyContent: "center",
427
430
  backgroundColor: "#f0f4ff"
428
431
  });
429
- Me.textContent = String(R + 1);
430
- const he = h({
432
+ G.textContent = String(y + 1);
433
+ const P = f({
431
434
  overflow: "hidden",
432
435
  textOverflow: "ellipsis",
433
436
  whiteSpace: "nowrap"
434
437
  });
435
- he.textContent = E.title, he.title = E.title, z.append(Me, he), y.appendChild(z);
436
- }), _.appendChild(y);
438
+ P.textContent = h.title, P.title = h.title, _.append(G, P), g.appendChild(_);
439
+ }), R.appendChild(g);
440
+ }
441
+ if (e.attachments && e.attachments.length > 0) {
442
+ const g = f({
443
+ display: "flex",
444
+ flexWrap: "wrap",
445
+ gap: "6px",
446
+ marginBottom: "6px",
447
+ justifyContent: c ? "flex-end" : "flex-start",
448
+ maxWidth: "75%"
449
+ });
450
+ g.className = "ago-message__attachments";
451
+ for (const h of e.attachments) {
452
+ const y = Rt(h.url);
453
+ if (yt(h) && y) {
454
+ const M = document.createElement("a");
455
+ M.href = y, M.target = "_blank", M.rel = "noopener noreferrer", w(M, {
456
+ display: "inline-block",
457
+ textDecoration: "none"
458
+ });
459
+ const re = document.createElement("img");
460
+ re.src = y, re.alt = h.name, re.loading = "lazy", w(re, {
461
+ maxWidth: "180px",
462
+ maxHeight: "160px",
463
+ objectFit: "cover",
464
+ borderRadius: "10px",
465
+ border: `1px solid ${$}`,
466
+ display: "block"
467
+ }), M.appendChild(re), g.appendChild(M);
468
+ continue;
469
+ }
470
+ const _ = y ? document.createElement("a") : document.createElement("div");
471
+ y && _ instanceof HTMLAnchorElement && (_.href = y, _.target = "_blank", _.rel = "noopener noreferrer"), w(_, {
472
+ display: "inline-flex",
473
+ alignItems: "center",
474
+ gap: "8px",
475
+ padding: "8px 12px",
476
+ borderRadius: "10px",
477
+ border: `1px solid ${$}`,
478
+ backgroundColor: c ? "rgba(255,255,255,0.12)" : Q,
479
+ color: c ? he : ae,
480
+ fontSize: "13px",
481
+ textDecoration: "none",
482
+ maxWidth: "220px"
483
+ });
484
+ const G = document.createElement("span");
485
+ G.textContent = "📄", G.setAttribute("aria-hidden", "true"), w(G, {
486
+ fontSize: "16px",
487
+ lineHeight: "1",
488
+ flexShrink: "0"
489
+ });
490
+ const P = f({
491
+ display: "flex",
492
+ flexDirection: "column",
493
+ minWidth: "0"
494
+ }), ke = f({
495
+ overflow: "hidden",
496
+ textOverflow: "ellipsis",
497
+ whiteSpace: "nowrap",
498
+ maxWidth: "160px"
499
+ });
500
+ ke.textContent = h.name, ke.title = h.name, P.appendChild(ke);
501
+ const qe = St(h.fileSize);
502
+ if (qe) {
503
+ const M = f({
504
+ fontSize: "11px",
505
+ color: Je
506
+ });
507
+ M.textContent = qe, P.appendChild(M);
508
+ }
509
+ _.append(G, P), g.appendChild(_);
510
+ }
511
+ R.appendChild(g);
437
512
  }
438
- const S = f || b || C, $ = h({
439
- maxWidth: C || f ? "75%" : S ? "85%" : "100%",
440
- padding: S ? "10px 14px" : "2px 8px",
441
- borderRadius: S ? be : "0",
442
- backgroundColor: f ? oe : S ? We : "transparent",
443
- color: f ? Ee : te,
513
+ const N = c || T || u, _e = !!e.content || e.status === "IN_PROGRESS", Y = f({
514
+ maxWidth: u || c ? "75%" : N ? "85%" : "100%",
515
+ padding: N ? "10px 14px" : "2px 8px",
516
+ borderRadius: u ? Mt : N ? Ie : "0",
517
+ backgroundColor: c ? me : N ? et : "transparent",
518
+ color: c ? he : ae,
444
519
  wordBreak: "break-word",
445
520
  fontSize: "16px",
446
521
  lineHeight: "1.6"
447
522
  });
448
- if ($.className = "ago-message__content", C && i) {
449
- $.style.position = "relative", f ? $.style.borderBottomRightRadius = "4px" : $.style.borderBottomLeftRadius = "4px";
450
- const y = h({
523
+ if (Y.className = "ago-message__content", u && s) {
524
+ Y.style.position = "relative";
525
+ const g = f({
451
526
  position: "absolute",
452
527
  zIndex: "0",
453
- bottom: "0",
528
+ bottom: "-2px",
454
529
  width: "20px",
455
530
  height: "20px",
456
- background: f ? oe : We
531
+ background: c ? me : et
457
532
  });
458
- y.className = "ago-message__tail";
459
- const E = h({
533
+ g.className = "ago-message__tail";
534
+ const h = f({
460
535
  position: "absolute",
461
536
  zIndex: "1",
462
- bottom: "0",
537
+ bottom: "-2px",
463
538
  width: "10px",
464
539
  height: "20px",
465
- background: Ue
540
+ background: Qe
466
541
  });
467
- E.className = "ago-message__tail-mask", f ? (y.style.right = "-8px", y.style.borderBottomLeftRadius = "15px", E.style.right = "-10px", E.style.borderBottomLeftRadius = "10px") : (y.style.left = "-7px", y.style.borderBottomRightRadius = "15px", E.style.left = "-10px", E.style.borderBottomRightRadius = "10px"), $.append(y, E);
542
+ h.className = "ago-message__tail-mask", c ? (g.style.right = "-8px", g.style.borderBottomLeftRadius = "16px 14px", h.style.right = "-10px", h.style.borderBottomLeftRadius = "10px") : (g.style.left = "-7px", g.style.borderBottomRightRadius = "16px 14px", h.style.left = "-10px", h.style.borderBottomRightRadius = "10px"), Y.append(g, h);
468
543
  }
469
- if (e.content ? $.appendChild(Ce(e.content)) : e.status === "IN_PROGRESS" && $.appendChild(lt()), _.appendChild($), n && e.followUpReplies && e.followUpReplies.length > 0) {
470
- const y = h({
544
+ if (e.content ? Y.appendChild($e(e.content)) : e.status === "IN_PROGRESS" && Y.appendChild(Ct()), _e && R.appendChild(Y), t && e.followUpReplies && e.followUpReplies.length > 0) {
545
+ const g = f({
471
546
  display: "flex",
472
547
  flexWrap: "wrap",
473
548
  gap: "8px",
474
549
  marginTop: "10px"
475
550
  });
476
- y.className = "ago-message__followups";
477
- for (const E of e.followUpReplies) {
478
- const R = document.createElement("button");
479
- R.type = "button", R.className = "ago-message__followup-btn", R.textContent = E, R.disabled = !_e, v(R, {
551
+ g.className = "ago-message__followups";
552
+ for (const h of e.followUpReplies) {
553
+ const y = document.createElement("button");
554
+ y.type = "button", y.className = "ago-message__followup-btn", y.textContent = h, y.disabled = !Me, w(y, {
555
+ minHeight: "36px",
480
556
  padding: "6px 14px",
481
557
  fontSize: "14px",
482
- borderRadius: be,
483
- border: `1px solid ${N}`,
484
- backgroundColor: q,
485
- color: te,
486
- cursor: _e ? "pointer" : "default",
558
+ borderRadius: Ie,
559
+ border: `1px solid ${$}`,
560
+ backgroundColor: Q,
561
+ color: ae,
562
+ cursor: Me ? "pointer" : "default",
487
563
  transition: "border-color 0.15s"
488
- }), ke && R.addEventListener("click", () => ke(E)), R.addEventListener("mouseenter", () => {
489
- R.style.borderColor = xe;
490
- }), R.addEventListener("mouseleave", () => {
491
- R.style.borderColor = N;
492
- }), y.appendChild(R);
564
+ }), ze && y.addEventListener("click", () => ze(h)), y.addEventListener("mouseenter", () => {
565
+ y.style.borderColor = Ae;
566
+ }), y.addEventListener("mouseleave", () => {
567
+ y.style.borderColor = $;
568
+ }), g.appendChild(y);
493
569
  }
494
- _.appendChild(y);
570
+ R.appendChild(g);
495
571
  }
496
- return _;
572
+ return R;
497
573
  }
498
- function ot(e) {
499
- const n = h({
574
+ function gt(e) {
575
+ const t = f({
500
576
  display: "flex",
501
577
  alignItems: "center",
502
578
  gap: "8px",
503
579
  padding: "10px 14px",
504
580
  backgroundColor: "#f0fdf4",
505
581
  color: "#15803d",
506
- borderRadius: be,
582
+ borderRadius: Ie,
507
583
  marginTop: "8px",
508
584
  fontSize: "13px",
509
585
  border: "1px solid #bbf7d0"
510
586
  });
511
- n.className = "ago-form-notice", n.setAttribute("role", "status");
512
- const i = document.createElement("span");
513
- i.textContent = "✓", i.setAttribute("aria-hidden", "true"), v(i, { fontWeight: "700" });
514
- const f = document.createElement("span");
515
- return f.textContent = e, n.append(i, f), n;
587
+ t.className = "ago-form-notice", t.setAttribute("role", "status");
588
+ const s = document.createElement("span");
589
+ s.textContent = "✓", s.setAttribute("aria-hidden", "true"), w(s, { fontWeight: "700" });
590
+ const c = document.createElement("span");
591
+ return c.textContent = e, t.append(s, c), t;
516
592
  }
517
593
  function I() {
518
- if (T.replaceChildren(), d.length === 0) {
519
- const n = h({
520
- textAlign: "center",
521
- color: Ct,
522
- padding: "24px 16px",
523
- fontSize: "16px",
524
- lineHeight: "1.5"
525
- });
526
- n.appendChild(Ce(t)), T.appendChild(n);
527
- } else d.forEach((n, i) => {
528
- const f = i === d.length - 1 || d[i + 1].role !== n.role;
529
- T.appendChild(nt(n, i === d.length - 1, f));
594
+ if (k.replaceChildren(), l.length === 0) {
595
+ if (Oe === "static") {
596
+ const t = f({
597
+ textAlign: "center",
598
+ color: Je,
599
+ padding: "24px 16px",
600
+ fontSize: "16px",
601
+ lineHeight: "1.5"
602
+ });
603
+ t.appendChild($e(Te)), k.appendChild(t);
604
+ }
605
+ } else l.forEach((t, s) => {
606
+ const c = s === l.length - 1 || l[s + 1].role !== t.role;
607
+ k.appendChild(ut(t, s === l.length - 1, c));
530
608
  });
531
- for (const n of Re) T.appendChild(ot(n));
532
- if (K) {
533
- const n = h({
609
+ for (const t of Be) k.appendChild(gt(t));
610
+ if (oe) {
611
+ const t = f({
534
612
  padding: "10px 14px",
535
613
  backgroundColor: "#fef2f2",
536
614
  color: "#dc2626",
@@ -539,262 +617,305 @@ function $t(r, o) {
539
617
  fontSize: "13px",
540
618
  border: "1px solid #fecaca"
541
619
  });
542
- n.textContent = K, T.appendChild(n);
620
+ t.setAttribute("role", "alert"), t.textContent = oe, k.appendChild(t);
543
621
  }
544
- T.scrollTop = T.scrollHeight;
545
- const e = d[d.length - 1];
546
- tt(D && e?.role === "assistant" && e.status === "IN_PROGRESS");
622
+ k.scrollTop = k.scrollHeight;
623
+ const e = l[l.length - 1];
624
+ ft(H && e?.role === "assistant" && e.status === "IN_PROGRESS");
547
625
  }
548
- function rt() {
549
- for (let e = d.length - 1; e >= 0; e--) {
550
- const n = d[e];
551
- if (n.role === "assistant" && n.status === "IN_PROGRESS") return n;
626
+ function mt() {
627
+ for (let e = l.length - 1; e >= 0; e--) {
628
+ const t = l[e];
629
+ if (t.role === "assistant" && t.status === "IN_PROGRESS") return t;
552
630
  }
553
631
  }
554
- const Ae = (e) => {
555
- A || (A = e.conversationId);
556
- }, Ie = (e) => {
557
- const n = rt();
558
- n && (n.content += e.content, I());
559
- }, $e = (e) => {
560
- const n = d.findIndex((i) => i.id === e.id || i.role === "assistant" && i.status === "IN_PROGRESS");
561
- n >= 0 ? d[n] = e : d.push(e), I(), le();
562
- }, Ne = (e) => {
563
- const n = d.findIndex((i) => i.id === e.id || i.role === "assistant" && i.status === "IN_PROGRESS");
564
- n >= 0 ? d[n] = e : d.push(e), D = !1, I(), e.status === "DONE" && Ye?.({
632
+ const Fe = (e) => {
633
+ D || (D = e.conversationId);
634
+ }, He = (e) => {
635
+ const t = mt();
636
+ t && (t.content += e.content, I());
637
+ }, We = (e) => {
638
+ const t = l.findIndex((s) => s.id === e.id || s.role === "assistant" && s.status === "IN_PROGRESS");
639
+ t >= 0 ? l[t] = e : l.push(e), I(), be();
640
+ }, Ue = (e) => {
641
+ const t = l.findIndex((s) => s.id === e.id || s.role === "assistant" && s.status === "IN_PROGRESS");
642
+ t >= 0 ? l[t] = e : l.push(e), H = !1, I(), e.status === "DONE" && z?.({
565
643
  id: e.id,
566
644
  content: e.content
567
645
  });
568
- }, Le = (e) => {
569
- K = e.error, D = !1, d = d.filter((n) => !n.id.startsWith("temp-")), I();
646
+ }, Ge = (e) => {
647
+ oe = e.error, H = !1, l = l.filter((t) => !t.id.startsWith("temp-")), I();
570
648
  };
571
- m.on("message:start", Ae), m.on("message:chunk", Ie), m.on("message:answer-complete", $e), m.on("message:complete", Ne), m.on("message:error", Le);
572
- const Te = (e) => ae?.(e), Oe = (e) => se?.(e);
573
- ae && m.on("form:submitted", Te), se && m.on("form:error", Oe);
574
- const ce = [];
575
- let Be = !1;
576
- const De = (e) => {
577
- if (Be) return;
578
- ce.push(e.install(m));
579
- let n = e.store.get().submitted;
580
- const i = e.store.subscribe((f) => {
581
- f.submitted && !n && (Re.push(Je(f.submitResult)), I()), n = f.submitted;
649
+ function ht(e) {
650
+ const t = {
651
+ id: `ago-intro-${Date.now()}`,
652
+ conversationId: "",
653
+ content: "",
654
+ role: "assistant",
655
+ status: "IN_PROGRESS",
656
+ createdAt: /* @__PURE__ */ new Date()
657
+ };
658
+ l.push(t), I();
659
+ const s = e.match(/\S+\s*/g) ?? [e];
660
+ let c = 0;
661
+ F = setInterval(() => {
662
+ if (c >= s.length) {
663
+ clearInterval(F), F = void 0, t.status = "DONE", I();
664
+ return;
665
+ }
666
+ t.content += s[c], c++, I();
667
+ }, lt);
668
+ }
669
+ v.on("message:start", Fe), v.on("message:chunk", He), v.on("message:answer-complete", We), v.on("message:complete", Ue), v.on("message:error", Ge);
670
+ const Pe = (e) => le?.(e), je = (e) => ne?.(e);
671
+ le && v.on("form:submitted", Pe), ne && v.on("form:error", je);
672
+ const Ce = [];
673
+ let Xe = !1;
674
+ const Ke = (e) => {
675
+ if (Xe) return;
676
+ Ce.push(e.install(v));
677
+ let t = e.store.get().submitted;
678
+ const s = e.store.subscribe((c) => {
679
+ c.submitted && !t && (Be.push(ct(c.submitResult)), I()), t = c.submitted;
582
680
  });
583
- ce.push(i);
681
+ Ce.push(s);
584
682
  };
585
- for (const e of we ?? []) e.schema != null ? De(ft(e)) : pt(m, e).then((n) => De(n)).catch(() => {
683
+ for (const e of b ?? []) e.schema != null ? Ke(At(e)) : kt(v, e).then((t) => Ke(t)).catch(() => {
586
684
  });
587
- async function pe(e, n) {
588
- const i = e.trim();
589
- if (!i && !n?.length || D) return;
590
- Qe?.(i), D = !0, K = null;
591
- const f = Date.now();
592
- d.push({
593
- id: `temp-user-${f}`,
594
- conversationId: A || "",
595
- content: i,
685
+ async function ye(e, t) {
686
+ const s = e.trim();
687
+ if (!s && !t?.length || H) return;
688
+ if (se?.(s), H = !0, oe = null, F) {
689
+ clearInterval(F), F = void 0;
690
+ const u = l.find((R) => R.id.startsWith("ago-intro-"));
691
+ u && !u.content ? l = l.filter((R) => R !== u) : u && (u.status = "DONE");
692
+ }
693
+ const c = Date.now();
694
+ l.push({
695
+ id: `temp-user-${c}`,
696
+ conversationId: D || "",
697
+ content: s,
596
698
  role: "user",
597
699
  status: "DONE",
700
+ attachments: t && t.length > 0 ? wt(t) : void 0,
598
701
  createdAt: /* @__PURE__ */ new Date()
599
- }), d.push({
600
- id: `temp-assistant-${f}`,
601
- conversationId: A || "",
702
+ }), l.push({
703
+ id: `temp-assistant-${c}`,
704
+ conversationId: D || "",
602
705
  content: "",
603
706
  role: "assistant",
604
707
  status: "IN_PROGRESS",
605
708
  createdAt: /* @__PURE__ */ new Date()
606
709
  }), I();
607
710
  try {
608
- const C = await m.sendMessage(i, {
609
- conversationId: A,
610
- files: n
711
+ const u = await v.sendMessage(s, {
712
+ conversationId: D,
713
+ files: t
611
714
  });
612
- C.conversationId && (A || (A = C.conversationId), Y?.setActiveThread(C.conversationId, C.createdAt));
613
- const _ = d.find((S) => S.id === `temp-user-${f}`);
614
- if (_ && (_.id = `user-${f}`, _.conversationId = C.conversationId), !d.some((S) => S.id === C.id)) {
615
- const S = d.findIndex(($) => $.id === `temp-assistant-${f}`);
616
- S >= 0 ? d[S] = C : d.push(C);
715
+ u.conversationId && (D || (D = u.conversationId), ce?.setActiveThread(u.conversationId, u.createdAt));
716
+ const R = l.find((N) => N.id === `temp-user-${c}`);
717
+ if (R && (R.id = `user-${c}`, R.conversationId = u.conversationId), !l.some((N) => N.id === u.id)) {
718
+ const N = l.findIndex((_e) => _e.id === `temp-assistant-${c}`);
719
+ N >= 0 ? l[N] = u : l.push(u);
617
720
  }
618
- d = d.filter((S) => !S.id.startsWith("temp-")), D = !1, I(), O && fe();
619
- } catch (C) {
620
- K = C instanceof Error ? C.message : "Failed to send message", D = !1, d = d.filter((_) => !_.id.startsWith("temp-")), I();
721
+ l = l.filter((N) => !N.id.startsWith("temp-")), H = !1, I(), te && we();
722
+ } catch (u) {
723
+ oe = u instanceof Error ? u.message : "Failed to send message", H = !1, l = l.filter((R) => !R.id.startsWith("temp-")), I();
621
724
  }
622
725
  }
623
- async function fe() {
726
+ async function we() {
624
727
  try {
625
- const e = await m.getConversations();
626
- Z.splice(0, Z.length, ...e);
728
+ const e = await v.getConversations();
729
+ pe.splice(0, pe.length, ...e);
627
730
  } catch {
628
731
  }
629
- return Z;
732
+ return pe;
630
733
  }
631
- async function at(e) {
734
+ async function xt(e) {
632
735
  try {
633
- const n = (await m.getConversation(e))?.messages ?? [];
634
- n.length > 0 && d.length === 0 && (d = n, I());
736
+ const t = (await v.getConversation(e))?.messages ?? [];
737
+ t.length > 0 && l.length === 0 && (l = t, I());
635
738
  } catch {
636
- d.length === 0 && (Y?.clear(), A = void 0);
739
+ l.length === 0 && (ce?.clear(), D = void 0);
637
740
  }
638
741
  }
639
- return I(), le(), A && at(A), O && fe(), {
640
- client: m,
641
- element: J,
642
- sendMessage: pe,
643
- ...W ? {
644
- open: ge,
645
- close: me,
646
- toggle: st
742
+ return I(), be(), D ? xt(D) : Oe === "streaming" && ht(Te), te && we(), {
743
+ client: v,
744
+ element: fe,
745
+ sendMessage: ye,
746
+ ...K ? {
747
+ open: Se,
748
+ close: Re,
749
+ toggle: bt
647
750
  } : {},
648
- session: Y,
649
- threads: Z,
650
- refreshThreads: fe,
751
+ session: ce,
752
+ threads: pe,
753
+ refreshThreads: we,
651
754
  destroy() {
652
- m.off("message:start", Ae), m.off("message:chunk", Ie), m.off("message:answer-complete", $e), m.off("message:complete", Ne), m.off("message:error", Le), ae && m.off("form:submitted", Te), se && m.off("form:error", Oe), Be = !0, ce.forEach((e) => e()), J.remove(), w?.remove(), o.client || m.destroy();
755
+ F && clearInterval(F), v.off("message:start", Fe), v.off("message:chunk", He), v.off("message:answer-complete", We), v.off("message:complete", Ue), v.off("message:error", Ge), le && v.off("form:submitted", Pe), ne && v.off("form:error", je), Xe = !0, Ce.forEach((e) => e()), fe.remove(), A?.remove(), o.client || v.destroy();
653
756
  }
654
757
  };
655
- function ue() {
656
- if (!F) return;
657
- const e = l === "left" ? "translateX(-100%)" : "translateX(100%)";
658
- F.style.transform = P ? "translateX(0)" : e, F.setAttribute("aria-hidden", P ? "false" : "true"), w && (w.style.display = P ? "none" : "flex");
758
+ function Ee() {
759
+ if (!U) return;
760
+ const e = p === "left" ? "translateX(-100%)" : "translateX(100%)";
761
+ U.style.transform = q ? "translateX(0)" : e, U.setAttribute("aria-hidden", q ? "false" : "true"), A && (A.style.display = q ? "none" : "flex");
659
762
  }
660
- function ge() {
661
- P = !0, ue(), le();
763
+ function Se() {
764
+ q = !0, Ee(), be();
662
765
  }
663
- function me() {
664
- P = !1, ue();
766
+ function Re() {
767
+ q = !1, Ee();
665
768
  }
666
- function st() {
667
- P ? me() : ge();
769
+ function bt() {
770
+ q ? Re() : Se();
668
771
  }
669
- function it() {
670
- const e = "http://www.w3.org/2000/svg", n = document.createElementNS(e, "svg");
671
- n.setAttribute("width", "26"), n.setAttribute("height", "26"), n.setAttribute("viewBox", "0 0 24 24"), n.setAttribute("fill", "none");
672
- const i = document.createElementNS(e, "path");
673
- return i.setAttribute("d", "M21 11.5a8.38 8.38 0 0 1-8.5 8.5 8.5 8.5 0 0 1-3.8-.9L3 21l1.9-5.7a8.5 8.5 0 0 1-.9-3.8 8.38 8.38 0 0 1 8.5-8.5 8.38 8.38 0 0 1 8.5 8.5z"), i.setAttribute("stroke", "currentColor"), i.setAttribute("stroke-width", "2"), i.setAttribute("stroke-linecap", "round"), i.setAttribute("stroke-linejoin", "round"), n.appendChild(i), n;
772
+ function vt() {
773
+ const e = "http://www.w3.org/2000/svg", t = document.createElementNS(e, "svg");
774
+ t.setAttribute("width", "26"), t.setAttribute("height", "26"), t.setAttribute("viewBox", "0 0 24 24"), t.setAttribute("fill", "none");
775
+ const s = document.createElementNS(e, "path");
776
+ return s.setAttribute("d", "M21 11.5a8.38 8.38 0 0 1-8.5 8.5 8.5 8.5 0 0 1-3.8-.9L3 21l1.9-5.7a8.5 8.5 0 0 1-.9-3.8 8.38 8.38 0 0 1 8.5-8.5 8.38 8.38 0 0 1 8.5 8.5z"), s.setAttribute("stroke", "currentColor"), s.setAttribute("stroke-width", "2"), s.setAttribute("stroke-linecap", "round"), s.setAttribute("stroke-linejoin", "round"), t.appendChild(s), t;
674
777
  }
675
- function lt() {
676
- const e = h({
778
+ function Ct() {
779
+ const e = f({
677
780
  display: "flex",
678
781
  gap: "4px",
679
782
  padding: "4px 0"
680
783
  });
681
- for (let n = 0; n < 3; n++) {
682
- const i = h({
784
+ for (let t = 0; t < 3; t++) {
785
+ const s = f({
683
786
  width: "6px",
684
787
  height: "6px",
685
788
  borderRadius: "50%",
686
789
  backgroundColor: "#b5bfc8",
687
790
  animation: "ago-pulse 1.2s ease-in-out infinite",
688
- animationDelay: `${n * 0.2}s`
791
+ animationDelay: `${t * 0.2}s`
689
792
  });
690
- e.appendChild(i);
793
+ e.appendChild(s);
691
794
  }
692
795
  return e;
693
796
  }
694
797
  }
695
- function _t(r) {
798
+ function Ut(r) {
696
799
  let o = [];
697
800
  const a = document.createElement("form");
698
- v(a, {
801
+ w(a, {
699
802
  display: "flex",
700
803
  flexDirection: "column",
701
804
  gap: "8px",
702
805
  padding: "12px",
703
- borderTop: `1px solid ${N}`,
704
- backgroundColor: q
806
+ borderTop: `1px solid ${$}`,
807
+ backgroundColor: Q
705
808
  }), a.className = "ago-chat-input";
706
- const t = h({
809
+ const n = f({
707
810
  display: "flex",
708
811
  flexWrap: "wrap",
709
812
  gap: "6px"
710
- }), g = h({
813
+ }), m = f({
711
814
  display: "flex",
712
815
  gap: "8px",
713
816
  alignItems: "flex-end"
714
- }), s = document.createElement("textarea");
715
- s.placeholder = r.placeholder, s.rows = 1, v(s, {
817
+ }), i = document.createElement("textarea");
818
+ i.placeholder = r.placeholder, i.setAttribute("aria-label", r.placeholder), i.rows = 1, w(i, {
716
819
  flex: "1",
717
820
  resize: "none",
821
+ boxSizing: "border-box",
718
822
  padding: "10px 12px",
719
- border: `1px solid ${N}`,
823
+ border: `1px solid ${$}`,
720
824
  borderRadius: "12px",
721
825
  fontSize: "16px",
722
- fontFamily: ve,
826
+ fontFamily: Le,
723
827
  lineHeight: "1.4",
724
- maxHeight: "120px",
725
- outline: "none"
828
+ maxHeight: "110px",
829
+ overflowY: "hidden"
726
830
  });
727
- const u = document.createElement("button");
728
- u.type = "submit", u.textContent = "Send", v(u, {
729
- padding: "10px 16px",
831
+ const E = () => {
832
+ i.style.height = "auto";
833
+ const S = Math.min(i.scrollHeight + 2, 110);
834
+ i.style.height = `${S}px`, i.style.overflowY = i.scrollHeight + 2 > 110 ? "auto" : "hidden";
835
+ };
836
+ i.addEventListener("input", () => {
837
+ E(), B();
838
+ });
839
+ const p = '<svg width="18" height="18" viewBox="0 -960 960 960" fill="currentColor" aria-hidden="true"><path d="M440-160v-487L216-423l-56-57 320-320 320 320-56 57-224-224v487h-80Z"/></svg>', C = '<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" style="animation: ago-spin 0.8s linear infinite"><path d="M21 12a9 9 0 1 1-6.219-8.56"/></svg>', d = document.createElement("button");
840
+ d.type = "submit", d.setAttribute("aria-label", "Send"), d.innerHTML = p, w(d, {
841
+ flexShrink: "0",
842
+ width: "40px",
843
+ height: "40px",
844
+ padding: "0",
730
845
  border: "none",
731
- borderRadius: "12px",
732
- backgroundColor: oe,
733
- color: Ee,
734
- fontSize: "16px",
735
- fontWeight: "500",
846
+ borderRadius: "50%",
847
+ backgroundColor: me,
848
+ color: he,
849
+ display: "flex",
850
+ alignItems: "center",
851
+ justifyContent: "center",
736
852
  cursor: "pointer"
737
853
  });
738
- let l = null, p = null;
739
- r.allowFiles && (l = document.createElement("input"), l.type = "file", l.multiple = !0, v(l, { display: "none" }), p = document.createElement("button"), p.type = "button", p.textContent = "📎", v(p, {
854
+ let x = !1;
855
+ const B = () => {
856
+ const b = i.value.trim() !== "" || o.length > 0, S = x || !b;
857
+ d.disabled = S, d.innerHTML = x ? C : p, d.style.opacity = S && !x ? "0.5" : "1", d.style.cursor = S ? "default" : "pointer";
858
+ };
859
+ let T = null, O = null;
860
+ r.allowFiles && (T = document.createElement("input"), T.type = "file", T.multiple = !0, w(T, { display: "none" }), O = document.createElement("button"), O.type = "button", O.setAttribute("aria-label", "Attach file"), O.textContent = "📎", w(O, {
740
861
  padding: "10px 12px",
741
- border: `1px solid ${N}`,
862
+ border: `1px solid ${$}`,
742
863
  borderRadius: "12px",
743
- backgroundColor: q,
864
+ backgroundColor: Q,
744
865
  cursor: "pointer",
745
866
  fontSize: "14px"
746
- }), p.addEventListener("click", () => l?.click()), l.addEventListener("change", () => {
747
- o = [...o, ...Array.from(l?.files ?? [])], c();
867
+ }), O.addEventListener("click", () => T?.click()), T.addEventListener("change", () => {
868
+ o = [...o, ...Array.from(T?.files ?? [])], ee();
748
869
  }));
749
- function c() {
750
- t.replaceChildren(), o.forEach((b, L) => {
751
- const V = h({
870
+ function ee() {
871
+ n.replaceChildren(), o.forEach((b, S) => {
872
+ const X = f({
752
873
  display: "flex",
753
874
  alignItems: "center",
754
875
  gap: "4px",
755
876
  padding: "4px 8px",
756
877
  backgroundColor: "#f0f4ff",
757
- border: `1px solid ${N}`,
878
+ border: `1px solid ${$}`,
758
879
  borderRadius: "8px",
759
880
  fontSize: "12px"
760
- }), Q = document.createElement("span");
761
- Q.textContent = b.name;
762
- const O = document.createElement("button");
763
- O.type = "button", O.textContent = "×", v(O, {
881
+ }), se = document.createElement("span");
882
+ se.textContent = b.name;
883
+ const z = document.createElement("button");
884
+ z.type = "button", z.setAttribute("aria-label", `Remove ${b.name}`), z.textContent = "×", w(z, {
764
885
  border: "none",
765
886
  background: "transparent",
766
887
  cursor: "pointer",
767
888
  fontSize: "14px",
768
889
  lineHeight: "1"
769
- }), O.addEventListener("click", () => {
770
- o = o.filter((we, U) => U !== L), c();
771
- }), V.append(Q, O), t.appendChild(V);
772
- });
890
+ }), z.addEventListener("click", () => {
891
+ o = o.filter((le, ne) => ne !== S), ee();
892
+ }), X.append(se, z), n.appendChild(X);
893
+ }), B();
773
894
  }
774
- const x = () => {
775
- const b = s.value, L = o;
776
- return s.value = "", o = [], c(), {
895
+ const ie = () => {
896
+ const b = i.value, S = o;
897
+ return i.value = "", E(), o = [], ee(), {
777
898
  content: b,
778
- files: L
899
+ files: S
779
900
  };
780
- }, B = () => {
781
- const { content: b, files: L } = x();
782
- (b.trim() || L.length > 0) && r.onSend(b.trim(), L.length > 0 ? L : void 0);
901
+ }, te = () => {
902
+ const { content: b, files: S } = ie();
903
+ (b.trim() || S.length > 0) && r.onSend(b.trim(), S.length > 0 ? S : void 0);
783
904
  };
784
905
  return a.addEventListener("submit", (b) => {
785
- b.preventDefault(), B();
786
- }), s.addEventListener("keydown", (b) => {
787
- b.key === "Enter" && !b.shiftKey && (b.preventDefault(), B());
788
- }), p && g.appendChild(p), g.append(s, u), l && a.appendChild(l), a.append(t, g), {
906
+ b.preventDefault(), te();
907
+ }), i.addEventListener("keydown", (b) => {
908
+ b.key === "Enter" && !b.shiftKey && (b.preventDefault(), te());
909
+ }), O && m.appendChild(O), m.append(i, d), T && a.appendChild(T), a.append(n, m), B(), {
789
910
  inputRow: a,
790
- getValueAndClear: x,
911
+ getValueAndClear: ie,
791
912
  setDisabled: (b) => {
792
- s.disabled = b, u.disabled = b, u.style.opacity = b ? "0.6" : "1", u.style.cursor = b ? "not-allowed" : "pointer";
913
+ i.disabled = b, x = b, B();
793
914
  },
794
- focus: () => s.focus()
915
+ focus: () => i.focus()
795
916
  };
796
917
  }
797
918
  export {
798
- $t as mountChatWidget,
799
- Ce as renderMarkdown
919
+ Xt as mountChatWidget,
920
+ $e as renderMarkdown
800
921
  };