@useago/sdk 1.0.9 → 1.0.11

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