@pluno/product-agent-web 0.1.24 → 0.1.26

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.
@@ -1,25 +1,25 @@
1
- import { PlunoProductAgent as Ot } from "./product-agent-sdk.js";
2
- const Bt = "#7c3aed";
3
- function Ft(t) {
4
- const e = Ht(t);
1
+ import { PlunoProductAgent as jt } from "./product-agent-sdk.js";
2
+ const qt = "#7c3aed";
3
+ function Kt(e) {
4
+ const t = Qt(e);
5
5
  return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254" role="img" aria-label="Pluno">
6
6
  <defs>
7
7
  <linearGradient id="boltFill" x1="420" y1="180" x2="790" y2="1040" gradientUnits="userSpaceOnUse">
8
- <stop offset="0" stop-color="${e.top}"/>
9
- <stop offset="0.36" stop-color="${e.middle}"/>
10
- <stop offset="0.72" stop-color="${e.bottom}"/>
11
- <stop offset="1" stop-color="${e.bottom}"/>
8
+ <stop offset="0" stop-color="${t.top}"/>
9
+ <stop offset="0.36" stop-color="${t.middle}"/>
10
+ <stop offset="0.72" stop-color="${t.bottom}"/>
11
+ <stop offset="1" stop-color="${t.bottom}"/>
12
12
  </linearGradient>
13
13
  <linearGradient id="boltEdge" x1="470" y1="145" x2="900" y2="980" gradientUnits="userSpaceOnUse">
14
- <stop offset="0" stop-color="${e.edgeStart}"/>
15
- <stop offset="0.32" stop-color="${e.edgeMiddle}"/>
16
- <stop offset="0.78" stop-color="${e.edgeEnd}"/>
17
- <stop offset="1" stop-color="${e.edgeEnd}"/>
14
+ <stop offset="0" stop-color="${t.edgeStart}"/>
15
+ <stop offset="0.32" stop-color="${t.edgeMiddle}"/>
16
+ <stop offset="0.78" stop-color="${t.edgeEnd}"/>
17
+ <stop offset="1" stop-color="${t.edgeEnd}"/>
18
18
  </linearGradient>
19
19
  <radialGradient id="boltGlow" cx="50%" cy="22%" r="82%">
20
- <stop offset="0" stop-color="${e.glow}" stop-opacity="0.72"/>
21
- <stop offset="0.5" stop-color="${e.middle}" stop-opacity="0.44"/>
22
- <stop offset="1" stop-color="${e.bottom}" stop-opacity="0"/>
20
+ <stop offset="0" stop-color="${t.glow}" stop-opacity="0.72"/>
21
+ <stop offset="0.5" stop-color="${t.middle}" stop-opacity="0.44"/>
22
+ <stop offset="1" stop-color="${t.bottom}" stop-opacity="0"/>
23
23
  </radialGradient>
24
24
  <radialGradient id="eyeWhite" cx="35%" cy="25%" r="70%">
25
25
  <stop offset="0" stop-color="#ffffff"/>
@@ -32,7 +32,7 @@ function Ft(t) {
32
32
  <stop offset="1" stop-color="#000000"/>
33
33
  </radialGradient>
34
34
  <filter id="softDropShadow" x="-18%" y="-12%" width="136%" height="136%" color-interpolation-filters="sRGB">
35
- <feDropShadow dx="0" dy="12" stdDeviation="18" flood-color="${e.shadow}" flood-opacity="0.24"/>
35
+ <feDropShadow dx="0" dy="12" stdDeviation="18" flood-color="${t.shadow}" flood-opacity="0.24"/>
36
36
  </filter>
37
37
  <filter id="innerDepth" x="-8%" y="-8%" width="116%" height="116%" color-interpolation-filters="sRGB">
38
38
  <feGaussianBlur in="SourceAlpha" stdDeviation="8" result="blur"/>
@@ -42,7 +42,7 @@ function Ft(t) {
42
42
  <feBlend in="SourceGraphic" in2="innerLight" mode="screen"/>
43
43
  </filter>
44
44
  <filter id="eyeShadow" x="-24%" y="-20%" width="148%" height="148%" color-interpolation-filters="sRGB">
45
- <feDropShadow dx="0" dy="8" stdDeviation="5" flood-color="${e.shadow}" flood-opacity="0.3"/>
45
+ <feDropShadow dx="0" dy="8" stdDeviation="5" flood-color="${t.shadow}" flood-opacity="0.3"/>
46
46
  </filter>
47
47
  <filter id="pupilGloss" x="-15%" y="-15%" width="130%" height="130%" color-interpolation-filters="sRGB">
48
48
  <feDropShadow dx="0" dy="3" stdDeviation="3" flood-color="#000000" flood-opacity="0.22"/>
@@ -56,9 +56,9 @@ function Ft(t) {
56
56
  <path d="M546 166 C522 166 505 180 499 204 L397 606 C390 630 406 646 432 646 L526 646 C568 646 590 672 581 712 L512 1001 C510 1010 518 1014 524 1006 L875 475 C886 458 878 449 855 449 L814 449 C764 449 745 415 769 374 L884 200 C894 181 883 161 858 161 Z" fill="url(#boltFill)" filter="url(#innerDepth)"/>
57
57
  <path d="M546 166 C522 166 505 180 499 204 L397 606 C390 630 406 646 432 646 L526 646 C568 646 590 672 581 712 L512 1001 C510 1010 518 1014 524 1006 L875 475 C886 458 878 449 855 449 L814 449 C764 449 745 415 769 374 L884 200 C894 181 883 161 858 161 Z" fill="url(#boltGlow)" opacity="0.74"/>
58
58
  <g clip-path="url(#boltClip)" opacity="0.42">
59
- <path d="M523 181 C505 189 496 206 489 232 L400 594 C397 606 400 619 411 626" fill="none" stroke="${e.highlight}" stroke-width="22" stroke-linecap="round" opacity="0.65"/>
60
- <path d="M556 685 L501 994" fill="none" stroke="${e.highlight}" stroke-width="20" stroke-linecap="round" opacity="0.55"/>
61
- <path d="M858 160 C882 166 893 181 883 204" fill="none" stroke="${e.inner}" stroke-width="18" stroke-linecap="round" opacity="0.48"/>
59
+ <path d="M523 181 C505 189 496 206 489 232 L400 594 C397 606 400 619 411 626" fill="none" stroke="${t.highlight}" stroke-width="22" stroke-linecap="round" opacity="0.65"/>
60
+ <path d="M556 685 L501 994" fill="none" stroke="${t.highlight}" stroke-width="20" stroke-linecap="round" opacity="0.55"/>
61
+ <path d="M858 160 C882 166 893 181 883 204" fill="none" stroke="${t.inner}" stroke-width="18" stroke-linecap="round" opacity="0.48"/>
62
62
  </g>
63
63
  </g>
64
64
  <g filter="url(#eyeShadow)">
@@ -75,23 +75,23 @@ function Ft(t) {
75
75
  </g>
76
76
  </svg>`;
77
77
  }
78
- function zt(t) {
79
- return `data:image/svg+xml,${encodeURIComponent(Ft(t))}`;
78
+ function Yt(e) {
79
+ return `data:image/svg+xml,${encodeURIComponent(Kt(e))}`;
80
80
  }
81
- const j = "#2c2a1e", $e = [253, 250, 241], He = 3.5;
82
- function dt(t) {
83
- const e = ct(t);
84
- if (We(te(e), $e) >= He)
85
- return e;
86
- let o = te(e);
87
- const a = te(j);
81
+ const X = "#2c2a1e", je = [253, 250, 241], qe = 3.5;
82
+ function ft(e) {
83
+ const t = bt(e);
84
+ if (Ke(ae(t), je) >= qe)
85
+ return t;
86
+ let o = ae(t);
87
+ const a = ae(X);
88
88
  for (let i = 0; i < 6; i += 1)
89
- if (o = Wt(o, a, 0.22), We(o, $e) >= He)
90
- return Ce(o);
91
- return Ce(o);
89
+ if (o = en(o, a, 0.22), Ke(o, je) >= qe)
90
+ return Le(o);
91
+ return Le(o);
92
92
  }
93
- function Gt(t) {
94
- const e = dt(t), n = "M547 151 C516 151 493 169 485 199 L382 606 C373 641 396 666 431 666 L523 666 C552 666 568 684 563 713 L491 1028 C486 1054 510 1067 527 1044 L894 487 C915 455 894 432 856 432 L815 432 C784 432 773 411 789 382 L904 205 C922 171 901 145 859 145 Z";
93
+ function Xt(e) {
94
+ const t = ft(e), n = "M547 151 C516 151 493 169 485 199 L382 606 C373 641 396 666 431 666 L523 666 C552 666 568 684 563 713 L491 1028 C486 1054 510 1067 527 1044 L894 487 C915 455 894 432 856 432 L815 432 C784 432 773 411 789 382 L904 205 C922 171 901 145 859 145 Z";
95
95
  return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1254 1254" role="img" aria-label="Pluno">
96
96
  <defs>
97
97
  <clipPath id="scribbleBoltClip">
@@ -104,26 +104,26 @@ function Gt(t) {
104
104
  </defs>
105
105
  <g filter="url(#scribbleBoltWobble)">
106
106
  <g clip-path="url(#scribbleBoltClip)">
107
- <path d="${$t()}" fill="none" stroke="${e}" stroke-width="56" stroke-linecap="round" stroke-linejoin="round" opacity="0.9" transform="rotate(-14 627 600)"/>
107
+ <path d="${Jt()}" fill="none" stroke="${t}" stroke-width="56" stroke-linecap="round" stroke-linejoin="round" opacity="0.9" transform="rotate(-14 627 600)"/>
108
108
  </g>
109
- <path d="${n}" fill="none" stroke="${j}" stroke-width="18" stroke-linejoin="round"/>
109
+ <path d="${n}" fill="none" stroke="${X}" stroke-width="18" stroke-linejoin="round"/>
110
110
  <g transform="rotate(-2 528 463)">
111
- <ellipse cx="528" cy="463" rx="73" ry="80" fill="#ffffff" stroke="${j}" stroke-width="13"/>
112
- <ellipse cx="533" cy="473" rx="45" ry="53" fill="${j}"/>
111
+ <ellipse cx="528" cy="463" rx="73" ry="80" fill="#ffffff" stroke="${X}" stroke-width="13"/>
112
+ <ellipse cx="533" cy="473" rx="45" ry="53" fill="${X}"/>
113
113
  <circle cx="557" cy="447" r="16" fill="#ffffff"/>
114
114
  </g>
115
115
  <g transform="rotate(2 717 462)">
116
- <ellipse cx="717" cy="462" rx="73" ry="80" fill="#ffffff" stroke="${j}" stroke-width="13"/>
117
- <ellipse cx="712" cy="473" rx="45" ry="53" fill="${j}"/>
116
+ <ellipse cx="717" cy="462" rx="73" ry="80" fill="#ffffff" stroke="${X}" stroke-width="13"/>
117
+ <ellipse cx="712" cy="473" rx="45" ry="53" fill="${X}"/>
118
118
  <circle cx="728" cy="447" r="16" fill="#ffffff"/>
119
119
  </g>
120
120
  </g>
121
121
  </svg>`;
122
122
  }
123
- function Ut(t) {
124
- return `data:image/svg+xml,${encodeURIComponent(Gt(t))}`;
123
+ function Zt(e) {
124
+ return `data:image/svg+xml,${encodeURIComponent(Xt(e))}`;
125
125
  }
126
- function $t() {
126
+ function Jt() {
127
127
  let n = "M 280 120", o = !1, a = 0;
128
128
  for (let i = 150; i <= 1170; i += 62) {
129
129
  const l = (a % 3 - 1) * 18, p = o ? 280 - l : 1020 + l;
@@ -131,8 +131,8 @@ function $t() {
131
131
  }
132
132
  return n;
133
133
  }
134
- function Ht(t) {
135
- const e = ct(t), n = Ee(te(e));
134
+ function Qt(e) {
135
+ const t = bt(e), n = Pe(ae(t));
136
136
  return n > 0.86 ? {
137
137
  top: "#ffffff",
138
138
  middle: "#f6f6f6",
@@ -156,90 +156,90 @@ function Ht(t) {
156
156
  inner: "#4b4b4b",
157
157
  shadow: "#000000"
158
158
  } : {
159
- top: I(e, 0.28, -0.03),
160
- middle: I(e, 0.08, 0.04),
161
- bottom: I(e, -0.1, 0.02),
162
- edgeStart: I(e, 0.08, 0.08),
163
- edgeMiddle: I(e, -0.08, 0.08),
164
- edgeEnd: I(e, -0.18, 0.05),
165
- glow: I(e, 0.32, -0.12),
166
- highlight: I(e, 0.38, -0.18),
167
- inner: I(e, 0.24, -0.1),
168
- shadow: I(e, -0.25, -0.08)
159
+ top: R(t, 0.28, -0.03),
160
+ middle: R(t, 0.08, 0.04),
161
+ bottom: R(t, -0.1, 0.02),
162
+ edgeStart: R(t, 0.08, 0.08),
163
+ edgeMiddle: R(t, -0.08, 0.08),
164
+ edgeEnd: R(t, -0.18, 0.05),
165
+ glow: R(t, 0.32, -0.12),
166
+ highlight: R(t, 0.38, -0.18),
167
+ inner: R(t, 0.24, -0.1),
168
+ shadow: R(t, -0.25, -0.08)
169
169
  };
170
170
  }
171
- function ct(t) {
172
- const e = t.trim();
173
- return /^#[0-9a-f]{6}$/i.test(e) ? e.toLowerCase() : /^#[0-9a-f]{3}$/i.test(e) ? `#${e.slice(1).split("").map((n) => n + n).join("").toLowerCase()}` : Bt;
171
+ function bt(e) {
172
+ const t = e.trim();
173
+ return /^#[0-9a-f]{6}$/i.test(t) ? t.toLowerCase() : /^#[0-9a-f]{3}$/i.test(t) ? `#${t.slice(1).split("").map((n) => n + n).join("").toLowerCase()}` : qt;
174
174
  }
175
- function te(t) {
175
+ function ae(e) {
176
176
  return [
177
- Number.parseInt(t.slice(1, 3), 16),
178
- Number.parseInt(t.slice(3, 5), 16),
179
- Number.parseInt(t.slice(5, 7), 16)
177
+ Number.parseInt(e.slice(1, 3), 16),
178
+ Number.parseInt(e.slice(3, 5), 16),
179
+ Number.parseInt(e.slice(5, 7), 16)
180
180
  ];
181
181
  }
182
- function Ce([t, e, n]) {
182
+ function Le([e, t, n]) {
183
183
  const o = (a) => Math.max(0, Math.min(255, Math.round(a))).toString(16).padStart(2, "0");
184
- return `#${o(t)}${o(e)}${o(n)}`;
184
+ return `#${o(e)}${o(t)}${o(n)}`;
185
185
  }
186
- function Ee([t, e, n]) {
186
+ function Pe([e, t, n]) {
187
187
  const o = (a) => {
188
188
  const i = a / 255;
189
189
  return i <= 0.04045 ? i / 12.92 : ((i + 0.055) / 1.055) ** 2.4;
190
190
  };
191
- return 0.2126 * o(t) + 0.7152 * o(e) + 0.0722 * o(n);
191
+ return 0.2126 * o(e) + 0.7152 * o(t) + 0.0722 * o(n);
192
192
  }
193
- function We(t, e) {
194
- const n = Ee(t), o = Ee(e), [a, i] = n > o ? [n, o] : [o, n];
193
+ function Ke(e, t) {
194
+ const n = Pe(e), o = Pe(t), [a, i] = n > o ? [n, o] : [o, n];
195
195
  return (a + 0.05) / (i + 0.05);
196
196
  }
197
- function Wt(t, e, n) {
198
- const o = ke(n);
197
+ function en(e, t, n) {
198
+ const o = Ae(n);
199
199
  return [
200
- t[0] + (e[0] - t[0]) * o,
201
- t[1] + (e[1] - t[1]) * o,
202
- t[2] + (e[2] - t[2]) * o
200
+ e[0] + (t[0] - e[0]) * o,
201
+ e[1] + (t[1] - e[1]) * o,
202
+ e[2] + (t[2] - e[2]) * o
203
203
  ];
204
204
  }
205
- function I(t, e, n) {
206
- const [o, a, i] = Vt(te(t));
207
- return Ce(qt(o, ke(a + n), ke(i + e)));
205
+ function R(e, t, n) {
206
+ const [o, a, i] = tn(ae(e));
207
+ return Le(nn(o, Ae(a + n), Ae(i + t)));
208
208
  }
209
- function Vt([t, e, n]) {
210
- const o = t / 255, a = e / 255, i = n / 255, l = Math.max(o, a, i), p = Math.min(o, a, i), s = (l + p) / 2;
209
+ function tn([e, t, n]) {
210
+ const o = e / 255, a = t / 255, i = n / 255, l = Math.max(o, a, i), p = Math.min(o, a, i), g = (l + p) / 2;
211
211
  if (l === p)
212
- return [0, 0, s];
213
- const g = l - p, u = s > 0.5 ? g / (2 - l - p) : g / (l + p);
214
- return [(l === o ? (a - i) / g + (a < i ? 6 : 0) : l === a ? (i - o) / g + 2 : (o - a) / g + 4) / 6, u, s];
212
+ return [0, 0, g];
213
+ const c = l - p, d = g > 0.5 ? c / (2 - l - p) : c / (l + p);
214
+ return [(l === o ? (a - i) / c + (a < i ? 6 : 0) : l === a ? (i - o) / c + 2 : (o - a) / c + 4) / 6, d, g];
215
215
  }
216
- function qt(t, e, n) {
217
- if (e === 0)
216
+ function nn(e, t, n) {
217
+ if (t === 0)
218
218
  return [n * 255, n * 255, n * 255];
219
- const o = n < 0.5 ? n * (1 + e) : n + e - n * e, a = 2 * n - o;
219
+ const o = n < 0.5 ? n * (1 + t) : n + t - n * t, a = 2 * n - o;
220
220
  return [
221
- we(a, o, t + 1 / 3) * 255,
222
- we(a, o, t) * 255,
223
- we(a, o, t - 1 / 3) * 255
221
+ ye(a, o, e + 1 / 3) * 255,
222
+ ye(a, o, e) * 255,
223
+ ye(a, o, e - 1 / 3) * 255
224
224
  ];
225
225
  }
226
- function we(t, e, n) {
226
+ function ye(e, t, n) {
227
227
  let o = n;
228
- return o < 0 && (o += 1), o > 1 && (o -= 1), o < 1 / 6 ? t + (e - t) * 6 * o : o < 1 / 2 ? e : o < 2 / 3 ? t + (e - t) * (2 / 3 - o) * 6 : t;
228
+ return o < 0 && (o += 1), o > 1 && (o -= 1), o < 1 / 6 ? e + (t - e) * 6 * o : o < 1 / 2 ? t : o < 2 / 3 ? e + (t - e) * (2 / 3 - o) * 6 : e;
229
229
  }
230
- function ke(t) {
231
- return Math.max(0, Math.min(1, t));
230
+ function Ae(e) {
231
+ return Math.max(0, Math.min(1, e));
232
232
  }
233
- const ut = "suggest_share_on_socials";
234
- function jt(t) {
235
- for (let e = t.length - 1; e >= 0; e -= 1) {
236
- const n = t[e];
237
- if (n.role !== "tool" || n.toolName !== ut)
233
+ const wt = "suggest_share_on_socials";
234
+ function on(e) {
235
+ for (let t = e.length - 1; t >= 0; t -= 1) {
236
+ const n = e[t];
237
+ if (n.role !== "tool" || n.toolName !== wt)
238
238
  continue;
239
- const o = Ve(t, e, "assistant");
239
+ const o = Ye(e, t, "assistant");
240
240
  if (!o)
241
241
  return null;
242
- const a = Ve(t, o.index, "user");
242
+ const a = Ye(e, o.index, "user");
243
243
  return a ? {
244
244
  id: `share:${n.callId ?? n.id}`,
245
245
  userPrompt: a.content,
@@ -248,24 +248,87 @@ function jt(t) {
248
248
  }
249
249
  return null;
250
250
  }
251
- async function Kt(t) {
252
- const e = await Yt(t);
251
+ async function an(e) {
252
+ const t = await rn(e);
253
253
  if (!navigator.clipboard || typeof ClipboardItem > "u")
254
254
  throw new Error("Image copy is not supported in this browser. Download the screenshot instead.");
255
- await navigator.clipboard.write([new ClipboardItem({ [e.type || "image/png"]: e })]);
255
+ await navigator.clipboard.write([new ClipboardItem({ [t.type || "image/png"]: t })]);
256
256
  }
257
- function Ve(t, e, n) {
258
- for (let o = e - 1; o >= 0; o -= 1) {
259
- const a = t[o];
257
+ function Ye(e, t, n) {
258
+ for (let o = t - 1; o >= 0; o -= 1) {
259
+ const a = e[o];
260
260
  if (a.role === n && a.content.trim())
261
261
  return { index: o, content: a.content.trim() };
262
262
  }
263
263
  return null;
264
264
  }
265
- async function Yt(t) {
266
- return await (await fetch(t)).blob();
265
+ async function rn(e) {
266
+ return await (await fetch(e)).blob();
267
+ }
268
+ const ln = "https://app.pluno.ai", pn = "/api/product-agent/embed/active-users", sn = 1800, dn = 15e3, cn = 250, un = 1e3, gn = 3e4;
269
+ function hn(e, t = {}) {
270
+ let n = !1, o = null, a = null, i = null;
271
+ const l = () => {
272
+ i !== null && (window.clearInterval(i), i = null);
273
+ }, p = (d) => {
274
+ n || (a !== null && window.clearTimeout(a), a = window.setTimeout(() => {
275
+ c();
276
+ }, bn(d)));
277
+ }, g = (d) => {
278
+ if (l(), o === null) {
279
+ o = d, e(d);
280
+ return;
281
+ }
282
+ const f = o, y = performance.now();
283
+ i = window.setInterval(() => {
284
+ if (n) {
285
+ l();
286
+ return;
287
+ }
288
+ const x = Math.min(1, (performance.now() - y) / sn);
289
+ o = Math.round(f + (d - f) * wn(x)), e(o), x >= 1 && (o = d, e(d), l());
290
+ }, cn);
291
+ }, c = async () => {
292
+ try {
293
+ const d = await mn(t);
294
+ if (n)
295
+ return;
296
+ g(d.count), p(d.refreshAfterMs);
297
+ } catch {
298
+ p(dn);
299
+ }
300
+ };
301
+ return c(), () => {
302
+ n = !0, a !== null && window.clearTimeout(a), l();
303
+ };
304
+ }
305
+ async function mn(e) {
306
+ if (e.loader)
307
+ return e.loader();
308
+ const n = await (e.fetcher ?? fetch)(new URL(pn, fn(e.backendUrl ?? ln)).toString(), {
309
+ cache: "no-store",
310
+ credentials: "omit"
311
+ });
312
+ if (!n.ok)
313
+ throw new Error("Failed to load active users");
314
+ const o = await n.json(), a = Xe(o.count), i = Xe(o.refreshAfterMs ?? o.refresh_after_ms);
315
+ if (a === null || i === null)
316
+ throw new Error("Invalid active users response");
317
+ return { count: a, refreshAfterMs: i };
318
+ }
319
+ function Xe(e) {
320
+ return typeof e != "number" || !Number.isFinite(e) || e < 0 ? null : Math.round(e);
267
321
  }
268
- const gt = 100, Xt = "product-agent:sdk-preview-socket-connect", Zt = "product-agent:sdk-preview-socket-send", Jt = "product-agent:sdk-preview-socket-close", Qt = "product-agent:sdk-preview-socket-open", en = "product-agent:sdk-preview-socket-message", tn = "product-agent:sdk-preview-socket-error", nn = "product-agent:sdk-preview-socket-closed", qe = "product-agent:sdk-preview-socket-id", on = "product-agent:preview-diagnostic", ht = "pluno.productAgent.sharePromptsDisabled", de = 10, an = 10 * 1024 * 1024, rn = /* @__PURE__ */ new Set(["image/png", "image/jpeg", "image/webp", "image/gif", "application/pdf"]), M = {
322
+ function fn(e) {
323
+ return e.endsWith("/") ? e : `${e}/`;
324
+ }
325
+ function bn(e) {
326
+ return Math.min(gn, Math.max(un, e));
327
+ }
328
+ function wn(e) {
329
+ return e < 0.5 ? 4 * e * e * e : 1 - Math.pow(-2 * e + 2, 3) / 2;
330
+ }
331
+ const _t = 100, _n = "product-agent:sdk-preview-socket-connect", xn = "product-agent:sdk-preview-socket-send", vn = "product-agent:sdk-preview-socket-close", yn = "product-agent:sdk-preview-socket-open", Cn = "product-agent:sdk-preview-socket-message", En = "product-agent:sdk-preview-socket-error", Sn = "product-agent:sdk-preview-socket-closed", Ze = "product-agent:sdk-preview-socket-id", kn = "product-agent:preview-diagnostic", xt = "pluno.productAgent.sharePromptsDisabled", ue = 10, Ln = 10 * 1024 * 1024, Pn = /* @__PURE__ */ new Set(["image/png", "image/jpeg", "image/webp", "image/gif", "application/pdf"]), B = {
269
332
  launcherLabel: "Ask for anything...",
270
333
  accentColor: "#7c3aed",
271
334
  colorScheme: "light",
@@ -273,83 +336,84 @@ const gt = 100, Xt = "product-agent:sdk-preview-socket-connect", Zt = "product-a
273
336
  scribbleStyle: !1,
274
337
  position: "bottom-right",
275
338
  movableLauncher: !1
276
- }, je = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 104 36"><g><ellipse cx="17.5" cy="24.5" rx="2.4" ry="3" fill="none" stroke="%232c2a1e" stroke-width="1.6" opacity="0.8"/><path d="M18.5 27 C20.5 12, 7.5 2.5, 6 18.5" fill="none" stroke="%232c2a1e" stroke-width="2.5" stroke-linecap="round"/></g><g transform="translate(26 0)"><ellipse cx="17.9" cy="24.1" rx="2.5" ry="2.8" fill="none" stroke="%232c2a1e" stroke-width="1.5" opacity="0.8"/><path d="M18.9 26.4 C21.2 13, 8.6 3.6, 6.9 17.4" fill="none" stroke="%232c2a1e" stroke-width="2.35" stroke-linecap="round"/></g><g transform="translate(52 0)"><ellipse cx="17.1" cy="24.9" rx="2.2" ry="3.1" fill="none" stroke="%232c2a1e" stroke-width="1.7" opacity="0.8"/><path d="M18.1 27.5 C19.9 10.4, 6.4 2, 5.6 19.2" fill="none" stroke="%232c2a1e" stroke-width="2.6" stroke-linecap="round"/></g><g transform="translate(78 0)"><ellipse cx="17.6" cy="24.4" rx="2.4" ry="2.9" fill="none" stroke="%232c2a1e" stroke-width="1.6" opacity="0.8"/><path d="M18.7 26.8 C21 11.2, 7.1 1.6, 6.3 18.1" fill="none" stroke="%232c2a1e" stroke-width="2.45" stroke-linecap="round"/></g></svg>', ln = '"Architects Daughter", "Bradley Hand", "Chalkboard SE", "Comic Sans MS", "Comic Sans", "Segoe Print", cursive', Ke = "pluno-pa-scribble-font", mt = 190, ft = 41, pn = 48, sn = 420, dn = 520, cn = 0.24, un = 680, gn = 800, hn = 0.76, A = 8, Se = 50, mn = "http://www.w3.org/2000/svg", fn = 11, bn = 13, wn = 4, _n = 10, xn = 40, vn = "movable-launcher-position-v2";
277
- function yn(t) {
278
- return (e) => new O(e, t);
279
- }
280
- async function Cn(t = {}) {
281
- const e = {
282
- launcherLabel: t.launcherLabel ?? M.launcherLabel,
283
- accentColor: t.accentColor ?? M.accentColor,
284
- colorScheme: t.colorScheme ?? M.colorScheme,
285
- fontFamily: t.fontFamily ?? M.fontFamily,
286
- scribbleStyle: t.scribbleStyle ?? M.scribbleStyle,
287
- position: t.position ?? M.position,
288
- movableLauncher: t.movableLauncher ?? M.movableLauncher,
289
- token: t.token,
290
- tokenProvider: t.tokenProvider,
291
- tokenEndpoint: t.tokenEndpoint,
292
- backendUrl: t.backendUrl,
293
- metadata: t.metadata,
294
- initialStarterPrompts: t.initialStarterPrompts,
295
- clientId: t.clientId,
296
- restorePersistedState: t.restorePersistedState,
297
- expectedPersistedSessionId: t.expectedPersistedSessionId,
298
- webSocketFactory: t.webSocketFactory,
299
- loginRequired: t.loginRequired === !0,
300
- loginButtonLabel: t.loginButtonLabel ?? "Log in to Pluno",
301
- onLoginClick: t.onLoginClick,
302
- socialPostDraftHandler: t.socialPostDraftHandler,
303
- billingStatus: t.billingStatus ?? null,
304
- billingStatusLoader: t.billingStatusLoader,
305
- socialPostRewardsUrl: t.socialPostRewardsUrl,
306
- loadSharePromptsDisabled: t.loadSharePromptsDisabled,
307
- persistSharePromptsDisabled: t.persistSharePromptsDisabled
308
- };
309
- U("web-sdk.widget", "Mounting widget with merged options", {
310
- accentColor: e.accentColor,
311
- colorScheme: e.colorScheme,
312
- fontFamily: e.fontFamily,
339
+ }, Je = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 104 36"><g><ellipse cx="17.5" cy="24.5" rx="2.4" ry="3" fill="none" stroke="%232c2a1e" stroke-width="1.6" opacity="0.8"/><path d="M18.5 27 C20.5 12, 7.5 2.5, 6 18.5" fill="none" stroke="%232c2a1e" stroke-width="2.5" stroke-linecap="round"/></g><g transform="translate(26 0)"><ellipse cx="17.9" cy="24.1" rx="2.5" ry="2.8" fill="none" stroke="%232c2a1e" stroke-width="1.5" opacity="0.8"/><path d="M18.9 26.4 C21.2 13, 8.6 3.6, 6.9 17.4" fill="none" stroke="%232c2a1e" stroke-width="2.35" stroke-linecap="round"/></g><g transform="translate(52 0)"><ellipse cx="17.1" cy="24.9" rx="2.2" ry="3.1" fill="none" stroke="%232c2a1e" stroke-width="1.7" opacity="0.8"/><path d="M18.1 27.5 C19.9 10.4, 6.4 2, 5.6 19.2" fill="none" stroke="%232c2a1e" stroke-width="2.6" stroke-linecap="round"/></g><g transform="translate(78 0)"><ellipse cx="17.6" cy="24.4" rx="2.4" ry="2.9" fill="none" stroke="%232c2a1e" stroke-width="1.6" opacity="0.8"/><path d="M18.7 26.8 C21 11.2, 7.1 1.6, 6.3 18.1" fill="none" stroke="%232c2a1e" stroke-width="2.45" stroke-linecap="round"/></g></svg>', An = '"Architects Daughter", "Bradley Hand", "Chalkboard SE", "Comic Sans MS", "Comic Sans", "Segoe Print", cursive', Qe = "pluno-pa-scribble-font", vt = 190, yt = 41, Nn = 48, Tn = 420, In = 520, Dn = 0.24, Mn = 680, Rn = 800, On = 0.76, N = 8, Ne = 50, Bn = "http://www.w3.org/2000/svg", Fn = 11, Un = 13, zn = 4, Gn = 10, $n = 40, Hn = "movable-launcher-position-v2", Ct = "pluno-pa-widget-styles", Et = "data-pluno-pa-widget-styles";
340
+ function Wn(e) {
341
+ return (t) => new F(t, e);
342
+ }
343
+ async function Vn(e = {}) {
344
+ const t = {
345
+ launcherLabel: e.launcherLabel ?? B.launcherLabel,
346
+ accentColor: e.accentColor ?? B.accentColor,
347
+ colorScheme: e.colorScheme ?? B.colorScheme,
348
+ fontFamily: e.fontFamily ?? B.fontFamily,
349
+ scribbleStyle: e.scribbleStyle ?? B.scribbleStyle,
350
+ position: e.position ?? B.position,
351
+ movableLauncher: e.movableLauncher ?? B.movableLauncher,
352
+ token: e.token,
353
+ tokenProvider: e.tokenProvider,
354
+ tokenEndpoint: e.tokenEndpoint,
313
355
  backendUrl: e.backendUrl,
314
- hasToken: !!e.token,
315
- hasTokenProvider: !!e.tokenProvider,
316
- hasTokenEndpoint: !!e.tokenEndpoint,
317
- hasWebSocketFactory: !!e.webSocketFactory,
318
- initialStarterPromptCount: e.initialStarterPrompts?.length ?? 0
356
+ metadata: e.metadata,
357
+ initialStarterPrompts: e.initialStarterPrompts,
358
+ clientId: e.clientId,
359
+ restorePersistedState: e.restorePersistedState,
360
+ expectedPersistedSessionId: e.expectedPersistedSessionId,
361
+ webSocketFactory: e.webSocketFactory,
362
+ loginRequired: e.loginRequired === !0,
363
+ loginButtonLabel: e.loginButtonLabel ?? "Log in to Pluno",
364
+ onLoginClick: e.onLoginClick,
365
+ socialPostDraftHandler: e.socialPostDraftHandler,
366
+ billingStatus: e.billingStatus ?? null,
367
+ billingStatusLoader: e.billingStatusLoader,
368
+ activeUsersLoader: e.activeUsersLoader,
369
+ socialPostRewardsUrl: e.socialPostRewardsUrl,
370
+ loadSharePromptsDisabled: e.loadSharePromptsDisabled,
371
+ persistSharePromptsDisabled: e.persistSharePromptsDisabled
372
+ };
373
+ V("web-sdk.widget", "Mounting widget with merged options", {
374
+ accentColor: t.accentColor,
375
+ colorScheme: t.colorScheme,
376
+ fontFamily: t.fontFamily,
377
+ backendUrl: t.backendUrl,
378
+ hasToken: !!t.token,
379
+ hasTokenProvider: !!t.tokenProvider,
380
+ hasTokenEndpoint: !!t.tokenEndpoint,
381
+ hasWebSocketFactory: !!t.webSocketFactory,
382
+ initialStarterPromptCount: t.initialStarterPrompts?.length ?? 0
319
383
  });
320
384
  const n = document.createElement("div");
321
385
  n.className = "pluno-pa-widget-host", n.setAttribute("data-pluno-product-agent-ui", "widget");
322
386
  const o = n.attachShadow({ mode: "open" }), a = document.createElement("div");
323
- a.className = `pluno-pa-widget pluno-pa-widget--${e.position}`, a.setAttribute("data-pluno-product-agent-ui-root", "widget");
324
- let i = Ye(e.accentColor, e.scribbleStyle);
325
- Tn(a, e.launcherLabel, i, e.movableLauncher), o.appendChild(a);
326
- const l = await xo(), p = l.ownerDocument;
327
- l.appendChild(n), a.classList.add(`pluno-pa-widget--${e.colorScheme}`), rt(o, e.accentColor), Xe(a, i, {
328
- accentColor: e.accentColor,
329
- colorScheme: e.colorScheme,
330
- fontFamily: e.fontFamily,
331
- scribbleStyle: e.scribbleStyle
332
- }), U("web-sdk.widget", "Applied initial widget appearance", {
333
- accentColor: e.accentColor,
334
- colorScheme: e.colorScheme,
335
- fontFamily: e.fontFamily,
387
+ a.className = `pluno-pa-widget pluno-pa-widget--${t.position}`, a.setAttribute("data-pluno-product-agent-ui-root", "widget");
388
+ let i = et(t.accentColor, t.scribbleStyle);
389
+ eo(a, t.launcherLabel, i, t.movableLauncher), o.appendChild(a);
390
+ const l = await Wo(), p = l.ownerDocument;
391
+ l.appendChild(n), a.classList.add(`pluno-pa-widget--${t.colorScheme}`), ut(o, t.accentColor), tt(a, i, {
392
+ accentColor: t.accentColor,
393
+ colorScheme: t.colorScheme,
394
+ fontFamily: t.fontFamily,
395
+ scribbleStyle: t.scribbleStyle
396
+ }), V("web-sdk.widget", "Applied initial widget appearance", {
397
+ accentColor: t.accentColor,
398
+ colorScheme: t.colorScheme,
399
+ fontFamily: t.fontFamily,
336
400
  cssAccent: a.style.getPropertyValue("--pluno-pa-accent")
337
401
  });
338
- const s = a.querySelector(".pluno-pa-widget__launcher"), g = a.querySelector(".pluno-pa-widget__launcher-drag-handle"), u = a.querySelector(".pluno-pa-widget__launcher-input"), b = a.querySelector(".pluno-pa-widget__panel"), w = a.querySelector(".pluno-pa-widget__close"), x = a.querySelector(".pluno-pa-widget__composer"), C = a.querySelector(".pluno-pa-widget__attachment-error"), m = a.querySelector(".pluno-pa-widget__billing-status"), f = a.querySelector(".pluno-pa-widget__attachments"), d = a.querySelector(".pluno-pa-widget__input"), h = a.querySelector(".pluno-pa-widget__send"), _ = a.querySelector(".pluno-pa-widget__new-chat"), k = a.querySelector(".pluno-pa-widget__timeline");
339
- if (!s || !u || !b || !w || !x || !C || !m || !f || !d || !h || !_ || !k)
402
+ const g = a.querySelector(".pluno-pa-widget__launcher"), c = a.querySelector(".pluno-pa-widget__launcher-drag-handle"), d = a.querySelector(".pluno-pa-widget__launcher-input"), f = a.querySelector(".pluno-pa-widget__panel"), y = a.querySelector(".pluno-pa-widget__close"), x = a.querySelector(".pluno-pa-widget__composer"), E = a.querySelector(".pluno-pa-widget__attachment-error"), h = a.querySelector(".pluno-pa-widget__billing-status"), b = a.querySelector(".pluno-pa-widget__attachments"), s = a.querySelector(".pluno-pa-widget__input"), v = a.querySelector(".pluno-pa-widget__send"), $ = a.querySelector(".pluno-pa-widget__new-chat"), U = a.querySelector(".pluno-pa-widget__active-users-counter"), m = a.querySelector(".pluno-pa-widget__timeline");
403
+ if (!g || !d || !f || !y || !x || !E || !h || !b || !s || !v || !$ || !U || !m)
340
404
  throw new Error("Failed to mount Pluno widget");
341
- if (e.movableLauncher && !g)
405
+ if (t.movableLauncher && !c)
342
406
  throw new Error("Failed to mount Pluno widget drag handle");
343
- Qe(u), Qe(d);
344
- let v = [], y = null;
345
- const T = () => {
346
- Hn(f, v, (r) => {
347
- v = v.filter((c, L) => L !== r), T(), D();
407
+ at(d), at(s);
408
+ let w = [], C = null;
409
+ const S = () => {
410
+ go(b, w, (r) => {
411
+ w = w.filter((u, L) => L !== r), S(), A(_.getState()), M();
348
412
  });
349
- }, ne = e.loginRequired || e.token || e.webSocketFactory ? void 0 : e.tokenProvider ?? (async () => {
350
- if (!e.tokenEndpoint)
413
+ }, T = t.loginRequired || t.token || t.webSocketFactory ? void 0 : t.tokenProvider ?? (async () => {
414
+ if (!t.tokenEndpoint)
351
415
  throw new Error("Pluno widget requires token or tokenEndpoint");
352
- const r = await fetch(e.tokenEndpoint, {
416
+ const r = await fetch(t.tokenEndpoint, {
353
417
  method: "POST",
354
418
  credentials: "include",
355
419
  headers: { "content-type": "application/json" },
@@ -357,53 +421,53 @@ async function Cn(t = {}) {
357
421
  });
358
422
  if (!r.ok)
359
423
  throw new Error("Failed to load Pluno token");
360
- const c = await r.json();
361
- if (!c.token)
424
+ const u = await r.json();
425
+ if (!u.token)
362
426
  throw new Error("Pluno token endpoint did not return a token");
363
- return c.token;
364
- });
365
- let E;
366
- E = await Ot.init({
367
- token: e.token,
368
- tokenProvider: ne,
369
- backendUrl: e.backendUrl,
427
+ return u.token;
428
+ }), D = window.fetch.bind(window);
429
+ let _;
430
+ _ = await jt.init({
431
+ token: t.token,
432
+ tokenProvider: T,
433
+ backendUrl: t.backendUrl,
370
434
  metadata: () => ({
371
- ...e.metadata ?? {},
372
- ...!E.getState().sessionId && e.scribbleStyle ? { scribbleStyleStarted: !0 } : {}
435
+ ...t.metadata ?? {},
436
+ ...!_.getState().sessionId && t.scribbleStyle ? { scribbleStyleStarted: !0 } : {}
373
437
  }),
374
- initialStarterPrompts: e.initialStarterPrompts,
375
- clientId: e.clientId,
376
- restorePersistedState: e.restorePersistedState,
377
- expectedPersistedSessionId: e.expectedPersistedSessionId,
378
- webSocketFactory: e.webSocketFactory,
379
- autoConnect: e.loginRequired ? !1 : void 0
438
+ initialStarterPrompts: t.initialStarterPrompts,
439
+ clientId: t.clientId,
440
+ restorePersistedState: t.restorePersistedState,
441
+ expectedPersistedSessionId: t.expectedPersistedSessionId,
442
+ webSocketFactory: t.webSocketFactory,
443
+ autoConnect: t.loginRequired ? !1 : void 0
380
444
  });
381
- const z = vo(e), ce = new Set(z.openToolGroupKeys), $ = new Set(z.seenShareCandidateIds), oe = new Set($);
382
- let ue = z.sharePromptsDisabled || await yo(e), R = e.movableLauncher ? z.launcherPosition : null, Te = R !== null, B = null, Ie = !1;
383
- const Pt = () => {
384
- Ie || typeof document > "u" || (rt(o, e.accentColor), n.isConnected || p.body?.appendChild(n));
385
- }, Re = new MutationObserver(Pt);
386
- Re.observe(p.documentElement, { childList: !0, subtree: !0 });
387
- const ge = (r = !0) => {
388
- const c = Le(a, r);
389
- return Ze(
445
+ const H = Vo(t), ge = new Set(H.openToolGroupKeys), j = new Set(H.seenShareCandidateIds), ie = new Set(j);
446
+ let he = H.sharePromptsDisabled || await jo(t), O = t.movableLauncher ? H.launcherPosition : null, Oe = O !== null, z = null, me = !1;
447
+ const Ft = () => {
448
+ me || typeof document > "u" || (ut(o, t.accentColor), n.isConnected || p.body?.appendChild(n));
449
+ }, Be = new MutationObserver(Ft);
450
+ Be.observe(p.documentElement, { childList: !0, subtree: !0 });
451
+ const fe = (r = !0) => {
452
+ const u = Te(a, r);
453
+ return nt(
390
454
  a,
391
- R ?? Sn(a, e.position, c),
392
- c
455
+ O ?? Kn(a, t.position, u),
456
+ u
393
457
  );
394
- }, N = () => {
395
- Eo(e, {
458
+ }, I = () => {
459
+ Ko(t, {
396
460
  isOpen: a.classList.contains("pluno-pa-widget--open"),
397
- composerValue: d.value,
398
- openToolGroupKeys: [...ce],
399
- launcherPosition: Te ? R : null,
400
- seenShareCandidateIds: [...$].slice(-gt),
401
- sharePromptsDisabled: ue
461
+ composerValue: s.value,
462
+ openToolGroupKeys: [...ge],
463
+ launcherPosition: Oe ? O : null,
464
+ seenShareCandidateIds: [...j].slice(-_t),
465
+ sharePromptsDisabled: he
402
466
  });
403
- }, G = (r, c = {}) => {
404
- Dn(r, {
405
- debugVersion: vn,
406
- launcherPosition: R,
467
+ }, W = (r, u = {}) => {
468
+ Qn(r, {
469
+ debugVersion: Hn,
470
+ launcherPosition: O,
407
471
  rootClasses: a.className,
408
472
  rootStyle: {
409
473
  left: a.style.left,
@@ -411,515 +475,528 @@ async function Cn(t = {}) {
411
475
  right: a.style.right,
412
476
  bottom: a.style.bottom
413
477
  },
414
- rootRect: _e(a),
415
- launcherRect: _e(s),
416
- panelRect: _e(b),
417
- viewport: Y(),
418
- panelHidden: b.hidden,
419
- closeHidden: w.hidden,
420
- ...c
478
+ rootRect: Ce(a),
479
+ launcherRect: Ce(g),
480
+ panelRect: Ce(f),
481
+ viewport: J(),
482
+ panelHidden: f.hidden,
483
+ closeHidden: y.hidden,
484
+ ...u
421
485
  });
422
- }, ae = (r = !0) => {
423
- if (!R)
424
- return re(a, null), ge(r);
425
- const c = ge(r);
426
- return re(a, c), G("Applied stored closed launcher position", { visibleLauncherPosition: c }), c;
427
- }, Me = (r, c) => {
428
- if (!r || !c) {
429
- Nn(a);
486
+ }, re = (r = !0) => {
487
+ if (!O)
488
+ return pe(a, null), fe(r);
489
+ const u = fe(r);
490
+ return pe(a, u), W("Applied stored closed launcher position", { visibleLauncherPosition: u }), u;
491
+ }, Fe = (r, u) => {
492
+ if (!r || !u) {
493
+ Jn(a);
430
494
  return;
431
495
  }
432
- An(a, {
433
- x: r.x - c.x,
434
- y: r.y - c.y
496
+ Zn(a, {
497
+ x: r.x - u.x,
498
+ y: r.y - u.y
435
499
  });
436
- }, Oe = () => {
437
- const r = ae();
500
+ }, Ue = () => {
501
+ const r = re();
438
502
  if (a.classList.contains("pluno-pa-widget--open") || a.classList.contains("pluno-pa-widget--closing")) {
439
- const c = Je(a, r, e.position);
440
- Me(c, r), G("Applied open panel position after viewport resize", { openPanelPosition: c });
441
- } else R && G("Applied visible launcher position after viewport resize", { visibleLauncherPosition: r });
503
+ const u = ot(a, r, t.position);
504
+ Fe(u, r), W("Applied open panel position after viewport resize", { openPanelPosition: u });
505
+ } else O && W("Applied visible launcher position after viewport resize", { visibleLauncherPosition: r });
442
506
  };
443
- let Be = () => {
507
+ let ze = () => {
444
508
  };
445
- window.addEventListener("resize", Oe), e.movableLauncher && g ? (ae(), Be = kn({
509
+ window.addEventListener("resize", Ue), t.movableLauncher && c ? (re(), ze = qn({
446
510
  root: a,
447
- launcherDragHandle: g,
448
- getPosition: () => ge(),
511
+ launcherDragHandle: c,
512
+ getPosition: () => fe(),
449
513
  setPosition: (r) => {
450
- const c = r;
451
- R = Ze(a, r, Le(a)), re(a, R), G("Dragging closed launcher", { requestedPosition: c });
514
+ const u = r;
515
+ O = nt(a, r, Te(a)), pe(a, O), W("Dragging closed launcher", { requestedPosition: u });
452
516
  },
453
517
  persist: () => {
454
- Te = !0, N(), G("Persisted closed launcher drag position");
518
+ Oe = !0, I(), W("Persisted closed launcher drag position");
455
519
  }
456
- })) : re(a, null);
457
- let he = !1;
458
- const Fe = async () => {
459
- if (!(!e.billingStatusLoader || he)) {
460
- he = !0;
520
+ })) : pe(a, null);
521
+ let be = !1;
522
+ const Ge = async () => {
523
+ if (!(!t.billingStatusLoader || be)) {
524
+ be = !0;
461
525
  try {
462
- const r = await e.billingStatusLoader();
463
- tt(e.billingStatus, r, E.getState().lastErrorCode) && (e.billingStatus = r, ye(m, e.billingStatus, E.getState().lastErrorCode), D());
526
+ const r = await t.billingStatusLoader();
527
+ rt(t.billingStatus, r, _.getState().lastErrorCode) && (t.billingStatus = r, ke(h, t.billingStatus, _.getState().lastErrorCode), M());
464
528
  } finally {
465
- he = !1;
529
+ be = !1;
466
530
  }
467
531
  }
468
- }, H = (r = "", c = !0) => {
469
- Fe(), B !== null && (window.clearTimeout(B), B = null), b.hidden = !1, w.hidden = !1, a.classList.remove("pluno-pa-widget--closing");
470
- const L = ae(), Q = Je(a, L, e.position);
471
- if (Me(Q, L), G("Opening launcher at clamped open panel position", { openPanelPosition: Q, visibleLauncherPosition: L }), !c) {
472
- a.classList.add("pluno-pa-widget--open"), s.hidden = !0, r && (d.value = r, ee(d)), k.scrollTop = k.scrollHeight, d.focus(), d.setSelectionRange(d.value.length, d.value.length), N();
532
+ }, q = (r = "", u = !0) => {
533
+ Ge(), z !== null && (window.clearTimeout(z), z = null), f.hidden = !1, y.hidden = !1, a.classList.remove("pluno-pa-widget--closing");
534
+ const L = re(), ne = ot(a, L, t.position);
535
+ if (Fe(ne, L), W("Opening launcher at clamped open panel position", { openPanelPosition: ne, visibleLauncherPosition: L }), !u) {
536
+ a.classList.add("pluno-pa-widget--open"), g.hidden = !0, r && (s.value = r, oe(s)), m.scrollTop = m.scrollHeight, s.focus(), s.setSelectionRange(s.value.length, s.value.length), I();
473
537
  return;
474
538
  }
475
539
  window.requestAnimationFrame(() => {
476
- a.classList.add("pluno-pa-widget--open"), r && (d.value = r, ee(d)), k.scrollTop = k.scrollHeight, d.focus(), d.setSelectionRange(d.value.length, d.value.length), N(), B = window.setTimeout(() => {
477
- s.hidden = !0, k.scrollTop = k.scrollHeight;
540
+ a.classList.add("pluno-pa-widget--open"), r && (s.value = r, oe(s)), m.scrollTop = m.scrollHeight, s.focus(), s.setSelectionRange(s.value.length, s.value.length), I(), z = window.setTimeout(() => {
541
+ g.hidden = !0, m.scrollTop = m.scrollHeight;
478
542
  }, 220);
479
543
  });
480
- }, At = () => {
481
- B !== null && (window.clearTimeout(B), B = null), s.hidden = !1, R && (ae(!1), G("Closing launcher at stored position")), a.classList.remove("pluno-pa-widget--open"), a.classList.add("pluno-pa-widget--closing"), N(), B = window.setTimeout(() => {
482
- b.hidden = !0, w.hidden = !0, a.classList.remove("pluno-pa-widget--closing");
544
+ }, Ut = () => {
545
+ z !== null && (window.clearTimeout(z), z = null), g.hidden = !1, O && (re(!1), W("Closing launcher at stored position")), a.classList.remove("pluno-pa-widget--open"), a.classList.add("pluno-pa-widget--closing"), I(), z = window.setTimeout(() => {
546
+ f.hidden = !0, y.hidden = !0, a.classList.remove("pluno-pa-widget--closing");
483
547
  }, 220);
484
548
  };
485
- s.addEventListener("submit", (r) => {
486
- r.preventDefault(), H(u.value), u.value = "";
487
- }), g?.addEventListener("click", (r) => {
549
+ g.addEventListener("submit", (r) => {
550
+ r.preventDefault(), q(d.value), d.value = "";
551
+ }), c?.addEventListener("click", (r) => {
488
552
  r.preventDefault(), r.stopPropagation();
489
- }), s.addEventListener("click", (r) => {
490
- r.target !== u && (H(u.value), u.value = "");
491
- }), u.addEventListener("focus", () => {
492
- H(u.value), u.value = "";
493
- }), u.addEventListener("input", () => {
494
- if (!u.value)
553
+ }), g.addEventListener("click", (r) => {
554
+ r.target !== d && (q(d.value), d.value = "");
555
+ }), d.addEventListener("focus", () => {
556
+ q(d.value), d.value = "";
557
+ }), d.addEventListener("input", () => {
558
+ if (!d.value)
495
559
  return;
496
- const r = u.value;
497
- H(r), u.value = "";
498
- }), w.addEventListener("click", At);
499
- const D = () => {
500
- h.disabled = F(e.billingStatus) || !E.getState().isThinking && d.value.trim().length === 0 && v.length === 0;
560
+ const r = d.value;
561
+ q(r), d.value = "";
562
+ }), y.addEventListener("click", Ut);
563
+ const M = () => {
564
+ v.disabled = G(t.billingStatus) || !_.getState().isThinking && s.value.trim().length === 0 && w.length === 0;
501
565
  };
502
- e.loginRequired && (u.readOnly = !0, u.placeholder = e.loginButtonLabel, d.placeholder = e.loginButtonLabel, x.hidden = !0), x.addEventListener("submit", (r) => {
503
- if (r.preventDefault(), e.loginRequired) {
504
- e.onLoginClick?.();
566
+ t.loginRequired && (d.readOnly = !0, d.placeholder = t.loginButtonLabel, s.placeholder = t.loginButtonLabel, x.hidden = !0), x.addEventListener("submit", (r) => {
567
+ if (r.preventDefault(), t.loginRequired) {
568
+ t.onLoginClick?.();
505
569
  return;
506
570
  }
507
- F(e.billingStatus) || (v = xe(E, d, v), T(), D());
571
+ G(t.billingStatus) || (w = Ee(_, s, w), S(), M());
508
572
  });
509
- let Z = 0;
510
- const Nt = () => {
511
- Z = 0, a.classList.remove("pluno-pa-widget--drag-over");
512
- }, Dt = (r) => {
513
- y !== null && window.clearTimeout(y), C.textContent = r, C.hidden = !1, y = window.setTimeout(() => {
514
- C.textContent = "", C.hidden = !0, y = null;
573
+ let ee = 0;
574
+ const zt = () => {
575
+ ee = 0, a.classList.remove("pluno-pa-widget--drag-over");
576
+ }, Gt = (r) => {
577
+ C !== null && window.clearTimeout(C), E.textContent = r, E.hidden = !1, C = window.setTimeout(() => {
578
+ E.textContent = "", E.hidden = !0, C = null;
515
579
  }, 3e3);
516
- }, Tt = () => {
517
- y !== null && (window.clearTimeout(y), y = null), C.textContent = "", C.hidden = !0;
518
- }, It = async (r) => {
580
+ }, $t = () => {
581
+ C !== null && (window.clearTimeout(C), C = null), E.textContent = "", E.hidden = !0;
582
+ }, Ht = async (r) => {
519
583
  if (r.length === 0)
520
584
  return;
521
- const c = await jn(r);
522
- if (v.length + c.length > de)
523
- throw new Error(`Attach up to ${de} files per message.`);
524
- v = [...v, ...c], T(), Tt(), D();
585
+ const u = await bo(r);
586
+ if (w.length + u.length > ue)
587
+ throw new Error(`Attach up to ${ue} files per message.`);
588
+ w = [...w, ...u], S(), $t(), M(), A(_.getState());
525
589
  };
526
590
  a.addEventListener("dragenter", (r) => {
527
- !le(r.dataTransfer) || e.loginRequired || (r.preventDefault(), r.stopPropagation(), Z += 1, a.classList.add("pluno-pa-widget--drag-over"));
591
+ !se(r.dataTransfer) || t.loginRequired || (r.preventDefault(), r.stopPropagation(), ee += 1, a.classList.add("pluno-pa-widget--drag-over"));
528
592
  }), a.addEventListener("dragover", (r) => {
529
- const c = r.dataTransfer;
530
- !le(c) || e.loginRequired || (r.preventDefault(), r.stopPropagation(), c.dropEffect = "copy");
593
+ const u = r.dataTransfer;
594
+ !se(u) || t.loginRequired || (r.preventDefault(), r.stopPropagation(), u.dropEffect = "copy");
531
595
  }), a.addEventListener("dragleave", (r) => {
532
- le(r.dataTransfer) && (r.stopPropagation(), Z = Math.max(0, Z - 1), Z === 0 && a.classList.remove("pluno-pa-widget--drag-over"));
596
+ se(r.dataTransfer) && (r.stopPropagation(), ee = Math.max(0, ee - 1), ee === 0 && a.classList.remove("pluno-pa-widget--drag-over"));
533
597
  }), a.addEventListener("drop", (r) => {
534
- const c = r.dataTransfer;
535
- !le(c) || e.loginRequired || (r.preventDefault(), r.stopPropagation(), Nt(), It(c.files).catch((L) => {
536
- Dt(L instanceof Error ? L.message : "Failed to attach file"), U("web-sdk.widget", "Attachment failed", {
598
+ const u = r.dataTransfer;
599
+ !se(u) || t.loginRequired || (r.preventDefault(), r.stopPropagation(), zt(), Ht(u.files).catch((L) => {
600
+ Gt(L instanceof Error ? L.message : "Failed to attach file"), V("web-sdk.widget", "Attachment failed", {
537
601
  message: L instanceof Error ? L.message : String(L)
538
602
  });
539
603
  }));
540
- }), h.addEventListener("click", () => {
541
- if (e.loginRequired) {
542
- e.onLoginClick?.();
604
+ }), v.addEventListener("click", () => {
605
+ if (t.loginRequired) {
606
+ t.onLoginClick?.();
543
607
  return;
544
608
  }
545
- if (E.getState().isThinking) {
546
- E.stop();
609
+ if (_.getState().isThinking) {
610
+ _.stop();
547
611
  return;
548
612
  }
549
- v = xe(E, d, v), T(), D();
550
- }), _.addEventListener("click", () => {
551
- E.startNewSession(), ce.clear(), d.value = "", v = [], T(), ee(d), N(), D(), d.focus();
552
- }), d.addEventListener("input", () => {
553
- ee(d), N(), D();
554
- }), d.addEventListener("keydown", (r) => {
613
+ w = Ee(_, s, w), S(), M(), A(_.getState());
614
+ }), $.addEventListener("click", () => {
615
+ _.startNewSession(), ge.clear(), s.value = "", w = [], S(), oe(s), I(), M(), s.focus(), A(_.getState());
616
+ }), s.addEventListener("input", () => {
617
+ oe(s), I(), M(), A(_.getState());
618
+ }), s.addEventListener("keydown", (r) => {
555
619
  if (!(r.key !== "Enter" || r.shiftKey)) {
556
- if (r.preventDefault(), e.loginRequired) {
557
- e.onLoginClick?.();
620
+ if (r.preventDefault(), t.loginRequired) {
621
+ t.onLoginClick?.();
558
622
  return;
559
623
  }
560
- v = xe(E, d, v), T(), D();
624
+ w = Ee(_, s, w), S(), M(), A(_.getState());
561
625
  }
562
626
  }), a.addEventListener("click", (r) => {
563
- (r.target instanceof Element ? r.target : null)?.closest("a[href]") && N();
564
- }), z.composerValue && (d.value = z.composerValue, ee(d)), z.isOpen && H(d.value, !1);
565
- const ze = () => i;
566
- let me = E.getState().appearance !== null, ie = null, J = null, W = null, Ge = E.getState().isThinking, V = null;
567
- const Rt = !!e.socialPostDraftHandler, q = (r) => {
568
- if (De(r.lastErrorCode) ? V = r.lastErrorCode : e.billingStatus?.creditsUsed !== null && !F(e.billingStatus) && (V = null), ye(m, e.billingStatus, V), e.loginRequired) {
569
- ro(k, h, _, ze, e.loginButtonLabel, e.onLoginClick);
627
+ (r.target instanceof Element ? r.target : null)?.closest("a[href]") && I();
628
+ }), H.composerValue && (s.value = H.composerValue, oe(s)), H.isOpen && q(s.value, !1);
629
+ const $e = () => i;
630
+ let we = _.getState().appearance !== null, le = null, te = null, K = null, He = _.getState().isThinking, Y = null, _e = null, We = () => {
631
+ };
632
+ const Wt = !!t.socialPostDraftHandler, A = (r) => {
633
+ if (Re(r.lastErrorCode) ? Y = r.lastErrorCode : t.billingStatus?.creditsUsed !== null && !G(t.billingStatus) && (Y = null), ke(h, t.billingStatus, Y), t.loginRequired) {
634
+ No(m, v, $, $e, t.loginButtonLabel, t.onLoginClick);
570
635
  return;
571
636
  }
572
- io(
573
- k,
574
- h,
575
- _,
637
+ Ao(
638
+ m,
639
+ v,
640
+ $,
641
+ U,
576
642
  r,
577
- ce,
578
- N,
579
- ze,
580
- (c) => {
581
- E.sendMessage(c);
643
+ _e,
644
+ _e !== null && pt(r, s.value.trim().length > 0 || w.length > 0),
645
+ ge,
646
+ I,
647
+ $e,
648
+ (u) => {
649
+ _.sendMessage(u);
582
650
  },
583
- Rt && !ue ? {
584
- dismissedCandidateIds: oe,
585
- draftingCandidateId: ie,
586
- error: J,
587
- onSeen: (c) => {
588
- $.add(c.id), N();
651
+ Wt && !he ? {
652
+ dismissedCandidateIds: ie,
653
+ draftingCandidateId: le,
654
+ error: te,
655
+ onSeen: (u) => {
656
+ j.add(u.id), I();
589
657
  },
590
- onDraft: (c) => {
591
- Mt(c);
658
+ onDraft: (u) => {
659
+ Vt(u);
592
660
  },
593
- onDismiss: (c) => {
594
- $.add(c.id), oe.add(c.id), N(), J = null, q(E.getState());
661
+ onDismiss: (u) => {
662
+ j.add(u.id), ie.add(u.id), I(), te = null, A(_.getState());
595
663
  },
596
- onDisable: (c) => {
597
- ue = !0, $.add(c.id), oe.add(c.id), N(), Co(e, !0), J = null, q(E.getState());
664
+ onDisable: (u) => {
665
+ he = !0, j.add(u.id), ie.add(u.id), I(), qo(t, !0), te = null, A(_.getState());
598
666
  }
599
667
  } : void 0
600
668
  );
601
669
  };
602
- return E.on("state", (r) => {
603
- const c = Ge && !r.isThinking;
604
- Ge = r.isThinking, r.appearance ? (me = !0, U("web-sdk.widget", "Agent state supplied appearance", {
670
+ return We = hn((r) => {
671
+ _e = r, !me && pt(_.getState(), s.value.trim().length > 0 || w.length > 0) && A(_.getState());
672
+ }, { backendUrl: t.backendUrl, fetcher: D, loader: t.activeUsersLoader }), _.on("state", (r) => {
673
+ const u = He && !r.isThinking;
674
+ He = r.isThinking, r.appearance ? (we = !0, V("web-sdk.widget", "Agent state supplied appearance", {
605
675
  appearance: r.appearance
606
- }), fe(r.appearance, "agent.state.appearance")) : me && (me = !1, U("web-sdk.widget", "Agent state cleared appearance; reverting to configured widget options", {
607
- fallbackAccentColor: e.accentColor,
608
- fallbackColorScheme: e.colorScheme,
609
- fallbackFontFamily: e.fontFamily
610
- }), fe({}, "agent.state.appearance-cleared")), q(r), D(), c && Fe();
611
- }), q(E.getState()), D(), {
612
- agent: E,
676
+ }), xe(r.appearance, "agent.state.appearance")) : we && (we = !1, V("web-sdk.widget", "Agent state cleared appearance; reverting to configured widget options", {
677
+ fallbackAccentColor: t.accentColor,
678
+ fallbackColorScheme: t.colorScheme,
679
+ fallbackFontFamily: t.fontFamily
680
+ }), xe({}, "agent.state.appearance-cleared")), A(r), M(), u && Ge();
681
+ }), A(_.getState()), M(), {
682
+ agent: _,
613
683
  updateAppearance: (r) => {
614
- r.scribbleStyle !== void 0 && (e.scribbleStyle = r.scribbleStyle), fe(r, "widgetHandle.updateAppearance");
684
+ r.scribbleStyle !== void 0 && (t.scribbleStyle = r.scribbleStyle), xe(r, "widgetHandle.updateAppearance");
615
685
  },
616
686
  updateBillingStatus: (r) => {
617
- const c = r ?? null;
618
- tt(e.billingStatus, c, V) && (e.billingStatus = c, e.billingStatus?.creditsUsed !== null && !F(e.billingStatus) && (V = null), ye(
687
+ const u = r ?? null;
688
+ rt(t.billingStatus, u, Y) && (t.billingStatus = u, t.billingStatus?.creditsUsed !== null && !G(t.billingStatus) && (Y = null), ke(
619
689
  a.querySelector(".pluno-pa-widget__billing-status"),
620
- e.billingStatus,
621
- V
622
- ), D());
690
+ t.billingStatus,
691
+ Y
692
+ ), M());
623
693
  },
624
694
  openPanel: () => {
625
- H(d.value, !1);
695
+ q(s.value, !1);
626
696
  },
627
697
  destroy: () => {
628
- Ie = !0, Re.disconnect(), window.removeEventListener("resize", Oe), Be(), y !== null && window.clearTimeout(y), W?.remove(), E.destroy(), n.remove();
698
+ me = !0, Be.disconnect(), window.removeEventListener("resize", Ue), ze(), C !== null && window.clearTimeout(C), We(), K?.remove(), _.destroy(), n.remove();
629
699
  }
630
700
  };
631
- async function Mt(r) {
632
- if (!ie) {
633
- ie = r.id, J = null, q(E.getState());
701
+ async function Vt(r) {
702
+ if (!le) {
703
+ le = r.id, te = null, A(_.getState());
634
704
  try {
635
- if (!e.socialPostDraftHandler)
705
+ if (!t.socialPostDraftHandler)
636
706
  throw new Error("Social post drafting is not available here.");
637
- const c = await e.socialPostDraftHandler(r);
638
- if (!c.linkedinPost || !c.xPost)
707
+ const u = await t.socialPostDraftHandler(r);
708
+ if (!u.linkedinPost || !u.xPost)
639
709
  throw new Error("Pluno did not return a complete social post draft.");
640
- $.add(r.id), oe.add(r.id), N(), W?.remove(), W = so(c, {
641
- socialPostRewardsUrl: e.socialPostRewardsUrl,
710
+ j.add(r.id), ie.add(r.id), I(), K?.remove(), K = Do(u, {
711
+ socialPostRewardsUrl: t.socialPostRewardsUrl,
642
712
  onClose: () => {
643
- W?.remove(), W = null;
713
+ K?.remove(), K = null;
644
714
  }
645
- }), a.appendChild(W);
646
- } catch (c) {
647
- J = c instanceof Error ? c.message : "Could not draft social post.";
715
+ }), a.appendChild(K);
716
+ } catch (u) {
717
+ te = u instanceof Error ? u.message : "Could not draft social post.";
648
718
  } finally {
649
- ie = null, q(E.getState());
719
+ le = null, A(_.getState());
650
720
  }
651
721
  }
652
722
  }
653
- function fe(r, c) {
654
- const L = r.accentColor ?? e.accentColor, Q = r.colorScheme ?? e.colorScheme, Ue = r.fontFamily ?? e.fontFamily, be = r.scribbleStyle ?? e.scribbleStyle;
655
- i = Ye(L, be), Xe(a, i, {
723
+ function xe(r, u) {
724
+ const L = r.accentColor ?? t.accentColor, ne = r.colorScheme ?? t.colorScheme, Ve = r.fontFamily ?? t.fontFamily, ve = r.scribbleStyle ?? t.scribbleStyle;
725
+ i = et(L, ve), tt(a, i, {
656
726
  accentColor: L,
657
- colorScheme: Q,
658
- fontFamily: Ue,
659
- scribbleStyle: be
660
- }), U("web-sdk.widget", "Updated widget appearance", {
661
- source: c,
727
+ colorScheme: ne,
728
+ fontFamily: Ve,
729
+ scribbleStyle: ve
730
+ }), V("web-sdk.widget", "Updated widget appearance", {
731
+ source: u,
662
732
  inputAppearance: r,
663
733
  appliedAccentColor: L,
664
- appliedColorScheme: Q,
665
- appliedFontFamily: Ue,
666
- appliedScribbleStyle: be,
734
+ appliedColorScheme: ne,
735
+ appliedFontFamily: Ve,
736
+ appliedScribbleStyle: ve,
667
737
  cssAccent: a.style.getPropertyValue("--pluno-pa-accent")
668
738
  });
669
739
  }
670
740
  }
671
- function Ye(t, e) {
672
- return e ? Ut(t) : zt(t);
741
+ function et(e, t) {
742
+ return t ? Zt(e) : Yt(e);
673
743
  }
674
- function Xe(t, e, n) {
675
- t.classList.toggle("pluno-pa-widget--dark", n.colorScheme === "dark"), t.classList.toggle("pluno-pa-widget--light", n.colorScheme !== "dark"), t.classList.toggle("pluno-pa-widget--scribble", n.scribbleStyle);
676
- const o = n.scribbleStyle ? dt(n.accentColor) : n.accentColor;
677
- t.style.setProperty("--pluno-pa-accent", o), t.style.fontFamily = n.scribbleStyle ? ln : n.fontFamily, n.scribbleStyle && En(t.ownerDocument);
678
- const a = Array.from(t.querySelectorAll(".pluno-pa-widget__character"));
744
+ function tt(e, t, n) {
745
+ e.classList.toggle("pluno-pa-widget--dark", n.colorScheme === "dark"), e.classList.toggle("pluno-pa-widget--light", n.colorScheme !== "dark"), e.classList.toggle("pluno-pa-widget--scribble", n.scribbleStyle);
746
+ const o = n.scribbleStyle ? ft(n.accentColor) : n.accentColor;
747
+ e.style.setProperty("--pluno-pa-accent", o), e.style.fontFamily = n.scribbleStyle ? An : n.fontFamily, n.scribbleStyle && jn(e.ownerDocument);
748
+ const a = Array.from(e.querySelectorAll(".pluno-pa-widget__character"));
679
749
  for (const i of a)
680
- i.src = e;
750
+ i.src = t;
681
751
  }
682
- function En(t) {
683
- if (t.getElementById(Ke))
752
+ function jn(e) {
753
+ if (e.getElementById(Qe))
684
754
  return;
685
- const e = t.createElement("style");
686
- e.id = Ke, e.textContent = `@font-face {
755
+ const t = e.createElement("style");
756
+ t.id = Qe, t.textContent = `@font-face {
687
757
  font-family: "Architects Daughter";
688
758
  font-style: normal;
689
759
  font-weight: 400;
690
760
  font-display: swap;
691
761
  src: url("https://fonts.gstatic.com/s/architectsdaughter/v20/KtkxAKiDZI_td1Lkx62xHZHDtgO_Y-bvTYlg4-7jA-U.woff2") format("woff2");
692
- }`, t.head.appendChild(e), t.fonts?.load('16px "Architects Daughter"');
762
+ }`, e.head.appendChild(t), e.fonts?.load('16px "Architects Daughter"');
693
763
  }
694
- function kn({
695
- root: t,
696
- launcherDragHandle: e,
764
+ function qn({
765
+ root: e,
766
+ launcherDragHandle: t,
697
767
  getPosition: n,
698
768
  setPosition: o,
699
769
  persist: a
700
770
  }) {
701
- let i = null, l = null, p = null, s = !1;
702
- const g = () => {
703
- i = null, l = null, p = null, s = !1, t.classList.remove("pluno-pa-widget--dragging");
704
- }, u = (m) => {
705
- t.classList.contains("pluno-pa-widget--open") || t.classList.contains("pluno-pa-widget--closing") || (m.preventDefault(), m.stopPropagation(), i = m.pointerId, l = { x: m.clientX, y: m.clientY }, p = n(), s = !1, e.setPointerCapture?.(m.pointerId));
706
- }, b = (m) => {
707
- if (i !== m.pointerId || !l || !p)
771
+ let i = null, l = null, p = null, g = !1;
772
+ const c = () => {
773
+ i = null, l = null, p = null, g = !1, e.classList.remove("pluno-pa-widget--dragging");
774
+ }, d = (h) => {
775
+ e.classList.contains("pluno-pa-widget--open") || e.classList.contains("pluno-pa-widget--closing") || (h.preventDefault(), h.stopPropagation(), i = h.pointerId, l = { x: h.clientX, y: h.clientY }, p = n(), g = !1, t.setPointerCapture?.(h.pointerId));
776
+ }, f = (h) => {
777
+ if (i !== h.pointerId || !l || !p)
708
778
  return;
709
- m.preventDefault();
710
- const f = m.clientX - l.x, d = m.clientY - l.y;
711
- !s && Math.hypot(f, d) < wn || (s = !0, t.classList.add("pluno-pa-widget--dragging"), o({ x: p.x + f, y: p.y + d }));
712
- }, w = (m) => {
713
- i === m.pointerId && (m.preventDefault(), m.stopPropagation(), s && a(), g());
714
- }, x = (m) => {
715
- i === m.pointerId && (m.preventDefault(), g());
716
- }, C = (m) => {
717
- if (t.classList.contains("pluno-pa-widget--open") || t.classList.contains("pluno-pa-widget--closing"))
779
+ h.preventDefault();
780
+ const b = h.clientX - l.x, s = h.clientY - l.y;
781
+ !g && Math.hypot(b, s) < zn || (g = !0, e.classList.add("pluno-pa-widget--dragging"), o({ x: p.x + b, y: p.y + s }));
782
+ }, y = (h) => {
783
+ i === h.pointerId && (h.preventDefault(), h.stopPropagation(), g && a(), c());
784
+ }, x = (h) => {
785
+ i === h.pointerId && (h.preventDefault(), c());
786
+ }, E = (h) => {
787
+ if (e.classList.contains("pluno-pa-widget--open") || e.classList.contains("pluno-pa-widget--closing"))
718
788
  return;
719
- const f = m.shiftKey ? xn : _n, d = n();
720
- let h = null;
721
- m.key === "ArrowUp" ? h = { x: d.x, y: d.y - f } : m.key === "ArrowDown" ? h = { x: d.x, y: d.y + f } : m.key === "ArrowLeft" ? h = { x: d.x - f, y: d.y } : m.key === "ArrowRight" && (h = { x: d.x + f, y: d.y }), h && (m.preventDefault(), m.stopPropagation(), o(h), a());
789
+ const b = h.shiftKey ? $n : Gn, s = n();
790
+ let v = null;
791
+ h.key === "ArrowUp" ? v = { x: s.x, y: s.y - b } : h.key === "ArrowDown" ? v = { x: s.x, y: s.y + b } : h.key === "ArrowLeft" ? v = { x: s.x - b, y: s.y } : h.key === "ArrowRight" && (v = { x: s.x + b, y: s.y }), v && (h.preventDefault(), h.stopPropagation(), o(v), a());
722
792
  };
723
- return e.addEventListener("pointerdown", u), e.addEventListener("pointermove", b), e.addEventListener("pointerup", w), e.addEventListener("pointercancel", x), e.addEventListener("keydown", C), () => {
724
- e.removeEventListener("pointerdown", u), e.removeEventListener("pointermove", b), e.removeEventListener("pointerup", w), e.removeEventListener("pointercancel", x), e.removeEventListener("keydown", C);
793
+ return t.addEventListener("pointerdown", d), t.addEventListener("pointermove", f), t.addEventListener("pointerup", y), t.addEventListener("pointercancel", x), t.addEventListener("keydown", E), () => {
794
+ t.removeEventListener("pointerdown", d), t.removeEventListener("pointermove", f), t.removeEventListener("pointerup", y), t.removeEventListener("pointercancel", x), t.removeEventListener("keydown", E);
725
795
  };
726
796
  }
727
- function Le(t, e = !0) {
728
- const n = Y(), o = t.getBoundingClientRect(), a = !t.classList.contains("pluno-pa-widget--open") && !t.classList.contains("pluno-pa-widget--closing");
797
+ function Te(e, t = !0) {
798
+ const n = J(), o = e.getBoundingClientRect(), a = !e.classList.contains("pluno-pa-widget--open") && !e.classList.contains("pluno-pa-widget--closing");
729
799
  return {
730
- width: e && a && o.width > 0 ? o.width : Math.min(mt, n.width - 36),
731
- height: e && a && o.height > 0 ? o.height : t.classList.contains("pluno-pa-widget--scribble") ? pn : ft
800
+ width: t && a && o.width > 0 ? o.width : Math.min(vt, n.width - 36),
801
+ height: t && a && o.height > 0 ? o.height : e.classList.contains("pluno-pa-widget--scribble") ? Nn : yt
732
802
  };
733
803
  }
734
- function bt() {
735
- const t = Y();
804
+ function St() {
805
+ const e = J();
736
806
  return {
737
807
  width: Math.min(
738
- K(t.width * cn, sn, dn),
739
- t.width - A * 2
808
+ Z(e.width * Dn, Tn, In),
809
+ e.width - N * 2
740
810
  ),
741
811
  height: Math.min(
742
- K(t.height * hn, un, gn),
743
- t.height - Se - A
812
+ Z(e.height * On, Mn, Rn),
813
+ e.height - Ne - N
744
814
  )
745
815
  };
746
816
  }
747
- function Sn(t, e, n) {
748
- const o = Number.parseFloat(t.style.left), a = Number.parseFloat(t.style.top);
817
+ function Kn(e, t, n) {
818
+ const o = Number.parseFloat(e.style.left), a = Number.parseFloat(e.style.top);
749
819
  if (Number.isFinite(o) && Number.isFinite(a))
750
820
  return { x: o, y: a };
751
- const i = t.getBoundingClientRect();
821
+ const i = e.getBoundingClientRect();
752
822
  if (i.width > 0 || i.height > 0)
753
823
  return { x: i.left, y: i.top };
754
- const l = Y();
824
+ const l = J();
755
825
  return {
756
- x: e === "bottom-left" ? 26 : l.width - 26 - n.width,
826
+ x: t === "bottom-left" ? 26 : l.width - 26 - n.width,
757
827
  y: l.height - 24 - n.height
758
828
  };
759
829
  }
760
- function Ze(t, e, n) {
761
- const o = Y(), a = A + Ln(t);
830
+ function nt(e, t, n) {
831
+ const o = J(), a = N + Yn(e);
762
832
  return {
763
- x: K(e.x, A, Math.max(A, o.width - n.width - A)),
764
- y: K(e.y, a, Math.max(a, o.height - n.height - A))
833
+ x: Z(t.x, N, Math.max(N, o.width - n.width - N)),
834
+ y: Z(t.y, a, Math.max(a, o.height - n.height - N))
765
835
  };
766
836
  }
767
- function Ln(t) {
768
- return t.classList.contains("pluno-pa-widget--scribble") ? bn : fn;
837
+ function Yn(e) {
838
+ return e.classList.contains("pluno-pa-widget--scribble") ? Un : Fn;
769
839
  }
770
- function Je(t, e, n) {
771
- const o = Le(t), a = bt(), i = {
772
- x: n === "bottom-left" ? e.x : e.x + o.width - a.width,
773
- y: e.y + o.height - a.height
840
+ function ot(e, t, n) {
841
+ const o = Te(e), a = St(), i = {
842
+ x: n === "bottom-left" ? t.x : t.x + o.width - a.width,
843
+ y: t.y + o.height - a.height
774
844
  };
775
- return Pn(i);
845
+ return Xn(i);
776
846
  }
777
- function Pn(t) {
778
- const e = Y(), n = bt();
847
+ function Xn(e) {
848
+ const t = J(), n = St();
779
849
  return {
780
- x: K(t.x, A, Math.max(A, e.width - n.width - A)),
781
- y: K(
782
- t.y,
783
- Se,
784
- Math.max(Se, e.height - n.height - A)
850
+ x: Z(e.x, N, Math.max(N, t.width - n.width - N)),
851
+ y: Z(
852
+ e.y,
853
+ Ne,
854
+ Math.max(Ne, t.height - n.height - N)
785
855
  )
786
856
  };
787
857
  }
788
- function re(t, e) {
789
- if (t.classList.toggle("pluno-pa-widget--custom-position", e !== null), !e) {
790
- t.style.removeProperty("left"), t.style.removeProperty("top"), t.style.removeProperty("right"), t.style.removeProperty("bottom");
858
+ function pe(e, t) {
859
+ if (e.classList.toggle("pluno-pa-widget--custom-position", t !== null), !t) {
860
+ e.style.removeProperty("left"), e.style.removeProperty("top"), e.style.removeProperty("right"), e.style.removeProperty("bottom");
791
861
  return;
792
862
  }
793
- t.style.left = `${e.x}px`, t.style.top = `${e.y}px`, t.style.right = "auto", t.style.bottom = "auto";
863
+ e.style.left = `${t.x}px`, e.style.top = `${t.y}px`, e.style.right = "auto", e.style.bottom = "auto";
794
864
  }
795
- function An(t, e) {
796
- t.style.setProperty("--pluno-pa-panel-offset-x", `${e.x}px`), t.style.setProperty("--pluno-pa-panel-offset-y", `${e.y}px`);
865
+ function Zn(e, t) {
866
+ e.style.setProperty("--pluno-pa-panel-offset-x", `${t.x}px`), e.style.setProperty("--pluno-pa-panel-offset-y", `${t.y}px`);
797
867
  }
798
- function Nn(t) {
799
- t.style.removeProperty("--pluno-pa-panel-offset-x"), t.style.removeProperty("--pluno-pa-panel-offset-y");
868
+ function Jn(e) {
869
+ e.style.removeProperty("--pluno-pa-panel-offset-x"), e.style.removeProperty("--pluno-pa-panel-offset-y");
800
870
  }
801
- function Y() {
871
+ function J() {
802
872
  return {
803
- width: window.innerWidth || document.documentElement.clientWidth || mt + A * 2,
804
- height: window.innerHeight || document.documentElement.clientHeight || ft + A * 2
873
+ width: window.innerWidth || document.documentElement.clientWidth || vt + N * 2,
874
+ height: window.innerHeight || document.documentElement.clientHeight || yt + N * 2
805
875
  };
806
876
  }
807
- function _e(t) {
808
- const e = t.getBoundingClientRect();
877
+ function Ce(e) {
878
+ const t = e.getBoundingClientRect();
809
879
  return {
810
- x: Math.round(e.x),
811
- y: Math.round(e.y),
812
- width: Math.round(e.width),
813
- height: Math.round(e.height)
880
+ x: Math.round(t.x),
881
+ y: Math.round(t.y),
882
+ width: Math.round(t.width),
883
+ height: Math.round(t.height)
814
884
  };
815
885
  }
816
- function K(t, e, n) {
817
- return Math.min(Math.max(t, e), n);
886
+ function Z(e, t, n) {
887
+ return Math.min(Math.max(e, t), n);
818
888
  }
819
- function U(t, e, n) {
889
+ function V(e, t, n) {
820
890
  if (typeof window > "u")
821
891
  return;
822
892
  const o = window, a = {
823
893
  at: (/* @__PURE__ */ new Date()).toISOString(),
824
- source: t,
825
- message: e,
894
+ source: e,
895
+ message: t,
826
896
  details: n
827
897
  }, i = o.__plunoProductAgentDiagnostics__ ?? [];
828
- i.push(a), i.length > 120 && i.splice(0, i.length - 120), o.__plunoProductAgentDiagnostics__ = i, o.__PLUNO_PRODUCT_AGENT_DIAGNOSTICS__ = () => [...i], window.dispatchEvent(new CustomEvent(on, { detail: a }));
898
+ i.push(a), i.length > 120 && i.splice(0, i.length - 120), o.__plunoProductAgentDiagnostics__ = i, o.__PLUNO_PRODUCT_AGENT_DIAGNOSTICS__ = () => [...i], window.dispatchEvent(new CustomEvent(kn, { detail: a }));
829
899
  }
830
- function Dn(t, e) {
831
- U("web-sdk.widget.position", t, e);
900
+ function Qn(e, t) {
901
+ V("web-sdk.widget.position", e, t);
832
902
  }
833
- function xe(t, e, n) {
834
- const o = e.value.trim();
835
- return !o && n.length === 0 ? n : (e.value = "", e.style.height = "22px", e.style.overflowY = "hidden", t.sendMessage(o, { attachments: n.length > 0 ? n : void 0 }), e.dispatchEvent(new Event("input", { bubbles: !0 })), []);
903
+ function Ee(e, t, n) {
904
+ const o = t.value.trim();
905
+ return !o && n.length === 0 ? n : (t.value = "", t.style.height = "22px", t.style.overflowY = "hidden", e.sendMessage(o, { attachments: n.length > 0 ? n : void 0 }), t.dispatchEvent(new Event("input", { bubbles: !0 })), []);
836
906
  }
837
- function ee(t) {
838
- t.style.height = "0px";
839
- const e = Math.max(22, Math.min(t.scrollHeight, 140));
840
- t.style.height = `${e}px`, t.style.overflowY = t.scrollHeight > 140 ? "auto" : "hidden";
907
+ function oe(e) {
908
+ e.style.height = "0px";
909
+ const t = Math.max(22, Math.min(e.scrollHeight, 140));
910
+ e.style.height = `${t}px`, e.style.overflowY = e.scrollHeight > 140 ? "auto" : "hidden";
841
911
  }
842
- function Tn(t, e, n, o) {
843
- t.appendChild(Bn()), t.appendChild(In(e, n, o)), t.appendChild(xt("pluno-pa-widget__close", "Close", Fn(16), !0)), t.appendChild(Rn(n));
912
+ function eo(e, t, n, o) {
913
+ e.appendChild(ro()), e.appendChild(to(t, n, o)), e.appendChild(Pt("pluno-pa-widget__close", "Close", lo(16), !0)), e.appendChild(no(n));
844
914
  }
845
- function In(t, e, n) {
915
+ function to(e, t, n) {
846
916
  const o = document.createElement("form");
847
917
  if (o.className = "pluno-pa-widget__launcher", n) {
848
918
  const i = document.createElement("button");
849
919
  i.type = "button", i.className = "pluno-pa-widget__launcher-drag-handle", i.setAttribute("aria-label", "Move Pluno launcher"), i.title = "Move Pluno launcher", o.appendChild(i);
850
920
  }
851
- o.appendChild(_t("pluno-pa-widget__character--launcher", e));
921
+ o.appendChild(Lt("pluno-pa-widget__character--launcher", t));
852
922
  const a = document.createElement("input");
853
- return a.className = "pluno-pa-widget__launcher-input", a.type = "text", a.placeholder = t, a.setAttribute("aria-label", t), o.appendChild(a), o;
923
+ return a.className = "pluno-pa-widget__launcher-input", a.type = "text", a.placeholder = e, a.setAttribute("aria-label", e), o.appendChild(a), o;
854
924
  }
855
- function Rn(t) {
856
- const e = document.createElement("section");
857
- e.className = "pluno-pa-widget__panel", e.hidden = !0;
925
+ function no(e) {
926
+ const t = document.createElement("section");
927
+ t.className = "pluno-pa-widget__panel", t.hidden = !0;
858
928
  const n = document.createElement("div");
859
929
  n.className = "pluno-pa-widget__timeline-wrap";
860
930
  const o = document.createElement("main");
861
- return o.className = "pluno-pa-widget__timeline", o.appendChild(On(t)), n.appendChild(o), n.appendChild(xt("pluno-pa-widget__new-chat", "New chat", zn(), !0)), e.appendChild(n), e.appendChild(Mn()), e;
931
+ o.className = "pluno-pa-widget__timeline", o.appendChild(ao(e)), n.appendChild(o);
932
+ const a = document.createElement("div");
933
+ return a.className = "pluno-pa-widget__active-users-counter", a.hidden = !0, n.appendChild(a), n.appendChild(Pt("pluno-pa-widget__new-chat", "New chat", po(), !0)), t.appendChild(n), t.appendChild(oo()), t;
862
934
  }
863
- function Mn() {
864
- const t = document.createElement("form");
865
- t.className = "pluno-pa-widget__composer";
866
- const e = document.createElement("div");
867
- e.className = "pluno-pa-widget__billing-status", e.hidden = !0, t.appendChild(e);
935
+ function oo() {
936
+ const e = document.createElement("form");
937
+ e.className = "pluno-pa-widget__composer";
938
+ const t = document.createElement("div");
939
+ t.className = "pluno-pa-widget__billing-status", t.hidden = !0, e.appendChild(t);
868
940
  const n = document.createElement("div");
869
- n.className = "pluno-pa-widget__attachment-error", n.hidden = !0, t.appendChild(n);
941
+ n.className = "pluno-pa-widget__attachment-error", n.hidden = !0, e.appendChild(n);
870
942
  const o = document.createElement("div");
871
- o.className = "pluno-pa-widget__attachments", o.hidden = !0, t.appendChild(o);
943
+ o.className = "pluno-pa-widget__attachments", o.hidden = !0, e.appendChild(o);
872
944
  const a = document.createElement("div");
873
945
  a.className = "pluno-pa-widget__composer-inner";
874
946
  const i = document.createElement("textarea");
875
947
  i.className = "pluno-pa-widget__input", i.rows = 1, i.placeholder = "Ask for anything...", a.appendChild(i);
876
948
  const l = document.createElement("button");
877
- l.type = "button", l.className = "pluno-pa-widget__send", l.setAttribute("aria-label", "Send"), l.appendChild(vt()), a.appendChild(l), t.appendChild(a);
949
+ l.type = "button", l.className = "pluno-pa-widget__send", l.setAttribute("aria-label", "Send"), l.appendChild(At()), a.appendChild(l), e.appendChild(a);
878
950
  const p = document.createElement("div");
879
951
  p.className = "pluno-pa-widget__composer-meta";
880
- const s = document.createElement("a");
881
- s.className = "pluno-pa-widget__powered-by", s.href = "https://pluno.ai", s.target = "_blank", s.rel = "noopener noreferrer", s.textContent = "Powered by Pluno.ai.", p.appendChild(s);
882
- const g = document.createElement("span");
883
- return g.className = "pluno-pa-widget__ai-disclaimer", g.textContent = "AI can make mistakes. Verify outputs.", p.appendChild(g), t.appendChild(p), t;
952
+ const g = document.createElement("a");
953
+ g.className = "pluno-pa-widget__powered-by", g.href = "https://pluno.ai", g.target = "_blank", g.rel = "noopener noreferrer", g.textContent = "Powered by Pluno.ai.", p.appendChild(g);
954
+ const c = document.createElement("span");
955
+ return c.className = "pluno-pa-widget__ai-disclaimer", c.textContent = "AI can make mistakes. Verify outputs.", p.appendChild(c), e.appendChild(p), e;
884
956
  }
885
- function On(t) {
957
+ function ao(e) {
958
+ const t = document.createElement("div");
959
+ return t.className = "pluno-pa-widget__empty-state", t.appendChild(Lt("pluno-pa-widget__character--empty", e)), t.appendChild(kt()), t;
960
+ }
961
+ function kt() {
886
962
  const e = document.createElement("div");
887
- return e.className = "pluno-pa-widget__empty-state", e.appendChild(_t("pluno-pa-widget__character--empty", t)), e.appendChild(wt()), e;
963
+ return e.className = "pluno-pa-widget__empty", e.appendChild(document.createTextNode("Hey there, I'm Pluno 👋")), e.appendChild(document.createElement("br")), e.appendChild(document.createTextNode("What do you want to do today?")), e;
888
964
  }
889
- function wt() {
890
- const t = document.createElement("div");
891
- return t.className = "pluno-pa-widget__empty", t.appendChild(document.createTextNode("Hey there, I'm Pluno 👋")), t.appendChild(document.createElement("br")), t.appendChild(document.createTextNode("What do you want to do today?")), t;
965
+ function io(e, t) {
966
+ e.replaceChildren(), e.setAttribute("aria-label", `${t.toLocaleString("en-US")} users currently active`);
967
+ const n = document.createElement("span");
968
+ n.className = "pluno-pa-widget__active-users-counter-dot", n.setAttribute("aria-hidden", "true"), e.appendChild(n), e.appendChild(document.createTextNode(`${t.toLocaleString("en-US")} users currently active`));
892
969
  }
893
- function _t(t, e) {
970
+ function Lt(e, t) {
894
971
  const n = document.createElement("img");
895
- return n.className = `pluno-pa-widget__character ${t}`, n.src = e, n.alt = "", n.setAttribute("aria-hidden", "true"), n;
972
+ return n.className = `pluno-pa-widget__character ${e}`, n.src = t, n.alt = "", n.setAttribute("aria-hidden", "true"), n;
896
973
  }
897
- function xt(t, e, n, o) {
974
+ function Pt(e, t, n, o) {
898
975
  const a = document.createElement("button");
899
- return a.type = "button", a.className = t, a.setAttribute("aria-label", e), a.title = e, a.hidden = o, a.appendChild(n), a;
976
+ return a.type = "button", a.className = e, a.setAttribute("aria-label", t), a.title = t, a.hidden = o, a.appendChild(n), a;
900
977
  }
901
- function Bn() {
902
- const t = S("svg", {
978
+ function ro() {
979
+ const e = k("svg", {
903
980
  class: "pluno-pa-widget__scribble-defs",
904
981
  "aria-hidden": "true",
905
982
  focusable: "false",
906
983
  width: "0",
907
984
  height: "0"
908
- }), e = S("defs");
909
- return e.appendChild(ve("pluno-pa-scribble-wobble", "2", "12")), e.appendChild(ve("pluno-pa-scribble-wobble-2", "5", "15")), e.appendChild(ve("pluno-pa-scribble-wobble-3", "9", "19")), t.appendChild(e), t;
985
+ }), t = k("defs");
986
+ return t.appendChild(Se("pluno-pa-scribble-wobble", "2", "12")), t.appendChild(Se("pluno-pa-scribble-wobble-2", "5", "15")), t.appendChild(Se("pluno-pa-scribble-wobble-3", "9", "19")), e.appendChild(t), e;
910
987
  }
911
- function ve(t, e, n) {
912
- const o = S("filter", { id: t, x: "-8%", y: "-8%", width: "116%", height: "116%" });
988
+ function Se(e, t, n) {
989
+ const o = k("filter", { id: e, x: "-8%", y: "-8%", width: "116%", height: "116%" });
913
990
  return o.appendChild(
914
- S("feTurbulence", {
991
+ k("feTurbulence", {
915
992
  type: "fractalNoise",
916
993
  baseFrequency: "0.012 0.028",
917
994
  numOctaves: "3",
918
- seed: e,
995
+ seed: t,
919
996
  result: "stroke-noise"
920
997
  })
921
998
  ), o.appendChild(
922
- S("feDisplacementMap", {
999
+ k("feDisplacementMap", {
923
1000
  in: "SourceGraphic",
924
1001
  in2: "stroke-noise",
925
1002
  scale: "3.5",
@@ -928,7 +1005,7 @@ function ve(t, e, n) {
928
1005
  result: "warped"
929
1006
  })
930
1007
  ), o.appendChild(
931
- S("feTurbulence", {
1008
+ k("feTurbulence", {
932
1009
  type: "fractalNoise",
933
1010
  baseFrequency: "0.7",
934
1011
  numOctaves: "1",
@@ -936,7 +1013,7 @@ function ve(t, e, n) {
936
1013
  result: "ink-noise"
937
1014
  })
938
1015
  ), o.appendChild(
939
- S("feDisplacementMap", {
1016
+ k("feDisplacementMap", {
940
1017
  in: "warped",
941
1018
  in2: "ink-noise",
942
1019
  scale: "0.9",
@@ -945,362 +1022,367 @@ function ve(t, e, n) {
945
1022
  })
946
1023
  ), o;
947
1024
  }
948
- function Fn(t) {
949
- const e = X("0 0 24 24", t, t, "none", "currentColor", "2.25");
950
- return e.appendChild(S("path", { d: "m6 9 6 6 6-6" })), e;
1025
+ function lo(e) {
1026
+ const t = Q("0 0 24 24", e, e, "none", "currentColor", "2.25");
1027
+ return t.appendChild(k("path", { d: "m6 9 6 6 6-6" })), t;
951
1028
  }
952
- function zn() {
953
- const t = X("0 0 24 24", 17, 17, "none", "currentColor", "2.25");
954
- return t.appendChild(S("path", { d: "M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" })), t.appendChild(S("path", { d: "M18.4 2.6a2.1 2.1 0 0 1 3 3L12 15l-4 1 1-4Z" })), t;
1029
+ function po() {
1030
+ const e = Q("0 0 24 24", 17, 17, "none", "currentColor", "2.25");
1031
+ return e.appendChild(k("path", { d: "M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" })), e.appendChild(k("path", { d: "M18.4 2.6a2.1 2.1 0 0 1 3 3L12 15l-4 1 1-4Z" })), e;
955
1032
  }
956
- function vt() {
957
- const t = X("0 0 24 24", 14, 14, "none", "currentColor", "2.75");
958
- return t.appendChild(S("line", { x1: "12", y1: "19", x2: "12", y2: "5" })), t.appendChild(S("polyline", { points: "5 12 12 5 19 12" })), t;
1033
+ function At() {
1034
+ const e = Q("0 0 24 24", 14, 14, "none", "currentColor", "2.75");
1035
+ return e.appendChild(k("line", { x1: "12", y1: "19", x2: "12", y2: "5" })), e.appendChild(k("polyline", { points: "5 12 12 5 19 12" })), e;
959
1036
  }
960
- function Gn() {
961
- const t = X("0 0 24 24", 18, 18, "currentColor");
962
- return t.appendChild(S("rect", { x: "6", y: "6", width: "12", height: "12", rx: "2" })), t;
1037
+ function so() {
1038
+ const e = Q("0 0 24 24", 18, 18, "currentColor");
1039
+ return e.appendChild(k("rect", { x: "6", y: "6", width: "12", height: "12", rx: "2" })), e;
963
1040
  }
964
- function Un() {
965
- const t = X("0 0 24 24", 12, 12, "none", "currentColor", "2.4");
966
- return t.appendChild(S("path", { d: "M18 6 6 18" })), t.appendChild(S("path", { d: "m6 6 12 12" })), t;
1041
+ function co() {
1042
+ const e = Q("0 0 24 24", 12, 12, "none", "currentColor", "2.4");
1043
+ return e.appendChild(k("path", { d: "M18 6 6 18" })), e.appendChild(k("path", { d: "m6 6 12 12" })), e;
967
1044
  }
968
- function $n() {
969
- const t = X("0 0 24 24", 13, 13, "none", "currentColor", "2.25");
970
- return t.appendChild(S("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" })), t.appendChild(S("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })), t;
1045
+ function uo() {
1046
+ const e = Q("0 0 24 24", 13, 13, "none", "currentColor", "2.25");
1047
+ return e.appendChild(k("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" })), e.appendChild(k("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })), e;
971
1048
  }
972
- function X(t, e, n, o, a, i) {
1049
+ function Q(e, t, n, o, a, i) {
973
1050
  const l = {
974
- viewBox: t,
975
- width: String(e),
1051
+ viewBox: e,
1052
+ width: String(t),
976
1053
  height: String(n),
977
1054
  fill: o,
978
1055
  "aria-hidden": "true"
979
1056
  };
980
- return a && (l.stroke = a, l["stroke-linecap"] = "round", l["stroke-linejoin"] = "round"), i && (l["stroke-width"] = i), S("svg", l);
1057
+ return a && (l.stroke = a, l["stroke-linecap"] = "round", l["stroke-linejoin"] = "round"), i && (l["stroke-width"] = i), k("svg", l);
981
1058
  }
982
- function S(t, e = {}) {
983
- const n = document.createElementNS(mn, t);
984
- for (const [o, a] of Object.entries(e))
1059
+ function k(e, t = {}) {
1060
+ const n = document.createElementNS(Bn, e);
1061
+ for (const [o, a] of Object.entries(t))
985
1062
  n.setAttribute(o, a);
986
1063
  return n;
987
1064
  }
988
- function Qe(t) {
989
- for (const e of ["keydown", "keypress", "keyup"])
990
- t.addEventListener(e, (n) => {
1065
+ function at(e) {
1066
+ for (const t of ["keydown", "keypress", "keyup"])
1067
+ e.addEventListener(t, (n) => {
991
1068
  n.stopPropagation();
992
1069
  });
993
1070
  }
994
- function Hn(t, e, n) {
995
- t.replaceChildren(), t.hidden = e.length === 0;
996
- for (const [o, a] of e.entries()) {
1071
+ function go(e, t, n) {
1072
+ e.replaceChildren(), e.hidden = t.length === 0;
1073
+ for (const [o, a] of t.entries()) {
997
1074
  const i = document.createElement("div");
998
- i.className = "pluno-pa-widget__attachment", i.appendChild(Wn(a));
1075
+ i.className = "pluno-pa-widget__attachment", i.appendChild(ho(a));
999
1076
  const l = document.createElement("span");
1000
1077
  l.textContent = a.name, i.appendChild(l);
1001
1078
  const p = document.createElement("button");
1002
- p.type = "button", p.setAttribute("aria-label", `Remove ${a.name}`), p.appendChild(Un()), p.addEventListener("click", () => n(o)), i.appendChild(p), t.appendChild(i);
1079
+ p.type = "button", p.setAttribute("aria-label", `Remove ${a.name}`), p.appendChild(co()), p.addEventListener("click", () => n(o)), i.appendChild(p), e.appendChild(i);
1003
1080
  }
1004
1081
  }
1005
- function Wn(t) {
1006
- if (yt(t)) {
1082
+ function ho(e) {
1083
+ if (Nt(e)) {
1007
1084
  const n = document.createElement("img");
1008
- return n.src = t.dataUrl, n.alt = "", n.setAttribute("aria-hidden", "true"), n;
1085
+ return n.src = e.dataUrl, n.alt = "", n.setAttribute("aria-hidden", "true"), n;
1009
1086
  }
1010
- const e = document.createElement("span");
1011
- return e.className = "pluno-pa-widget__attachment-file", e.textContent = "PDF", e;
1087
+ const t = document.createElement("span");
1088
+ return t.className = "pluno-pa-widget__attachment-file", t.textContent = "PDF", t;
1012
1089
  }
1013
- function Vn(t) {
1014
- if (yt(t)) {
1090
+ function mo(e) {
1091
+ if (Nt(e)) {
1015
1092
  const a = document.createElement("img");
1016
- return a.src = t.dataUrl, a.alt = t.name, a;
1093
+ return a.src = e.dataUrl, a.alt = e.name, a;
1017
1094
  }
1018
- const e = document.createElement("div");
1019
- e.className = "pluno-pa-widget__message-attachment-file";
1095
+ const t = document.createElement("div");
1096
+ t.className = "pluno-pa-widget__message-attachment-file";
1020
1097
  const n = document.createElement("span");
1021
1098
  n.textContent = "PDF";
1022
1099
  const o = document.createElement("strong");
1023
- return o.textContent = t.name, e.append(n, o), e;
1100
+ return o.textContent = e.name, t.append(n, o), t;
1024
1101
  }
1025
- function yt(t) {
1026
- return t.mimeType.startsWith("image/");
1102
+ function Nt(e) {
1103
+ return e.mimeType.startsWith("image/");
1027
1104
  }
1028
- function qn(t) {
1029
- return t === "application/pdf" ? "document.pdf" : "image";
1105
+ function fo(e) {
1106
+ return e === "application/pdf" ? "document.pdf" : "image";
1030
1107
  }
1031
- async function jn(t) {
1032
- if (!t)
1108
+ async function bo(e) {
1109
+ if (!e)
1033
1110
  return [];
1034
- const e = Array.from(t);
1035
- if (e.length > de)
1036
- throw new Error(`Attach up to ${de} files per message.`);
1111
+ const t = Array.from(e);
1112
+ if (t.length > ue)
1113
+ throw new Error(`Attach up to ${ue} files per message.`);
1037
1114
  return Promise.all(
1038
- e.map(async (n) => {
1039
- const o = Kn(n);
1115
+ t.map(async (n) => {
1116
+ const o = wo(n);
1040
1117
  if (!o)
1041
1118
  throw new Error("Pluno supports PNG, JPEG, WebP, non-animated GIF, and PDF files.");
1042
- if (n.size > an)
1119
+ if (n.size > Ln)
1043
1120
  throw new Error("Each Pluno attachment can be up to 10 MB.");
1044
1121
  if (o === "image/gif") {
1045
- const a = new Uint8Array(await oo(n));
1046
- if (Xn(a))
1122
+ const a = new Uint8Array(await Lo(n));
1123
+ if (xo(a))
1047
1124
  throw new Error("Pluno supports non-animated GIF images.");
1048
1125
  }
1049
1126
  return {
1050
- name: n.name || qn(o),
1127
+ name: n.name || fo(o),
1051
1128
  mimeType: o,
1052
1129
  sizeBytes: n.size,
1053
- dataUrl: Yn(await ao(n), o)
1130
+ dataUrl: _o(await Po(n), o)
1054
1131
  };
1055
1132
  })
1056
1133
  );
1057
1134
  }
1058
- function Kn(t) {
1059
- if (rn.has(t.type))
1060
- return t.type;
1061
- const e = t.name.toLowerCase();
1062
- return e.endsWith(".png") ? "image/png" : e.endsWith(".jpg") || e.endsWith(".jpeg") ? "image/jpeg" : e.endsWith(".webp") ? "image/webp" : e.endsWith(".gif") ? "image/gif" : e.endsWith(".pdf") ? "application/pdf" : null;
1135
+ function wo(e) {
1136
+ if (Pn.has(e.type))
1137
+ return e.type;
1138
+ const t = e.name.toLowerCase();
1139
+ return t.endsWith(".png") ? "image/png" : t.endsWith(".jpg") || t.endsWith(".jpeg") ? "image/jpeg" : t.endsWith(".webp") ? "image/webp" : t.endsWith(".gif") ? "image/gif" : t.endsWith(".pdf") ? "application/pdf" : null;
1063
1140
  }
1064
- function Yn(t, e) {
1065
- const n = `data:${e};base64,`;
1066
- return t.startsWith(n) ? t : t.replace(/^data:[^;]*;base64,/, n);
1141
+ function _o(e, t) {
1142
+ const n = `data:${t};base64,`;
1143
+ return e.startsWith(n) ? e : e.replace(/^data:[^;]*;base64,/, n);
1067
1144
  }
1068
- function Xn(t) {
1069
- if (t.length < 14 || !Zn(t))
1145
+ function xo(e) {
1146
+ if (e.length < 14 || !vo(e))
1070
1147
  return !1;
1071
- const e = t[10];
1148
+ const t = e[10];
1072
1149
  let n = 13;
1073
- e & 128 && (n += 3 * 2 ** ((e & 7) + 1));
1150
+ t & 128 && (n += 3 * 2 ** ((t & 7) + 1));
1074
1151
  let o = 0;
1075
- for (; n < t.length; ) {
1076
- const a = t[n];
1152
+ for (; n < e.length; ) {
1153
+ const a = e[n];
1077
1154
  if (n += 1, a === 59)
1078
1155
  return !1;
1079
1156
  if (a === 33) {
1080
- n += 1, n = et(t, n);
1157
+ n += 1, n = it(e, n);
1081
1158
  continue;
1082
1159
  }
1083
1160
  if (a !== 44)
1084
1161
  return !1;
1085
1162
  if (o += 1, o > 1)
1086
1163
  return !0;
1087
- if (n + 9 >= t.length)
1164
+ if (n + 9 >= e.length)
1088
1165
  return !1;
1089
- const i = t[n + 8];
1090
- if (n += 9, i & 128 && (n += 3 * 2 ** ((i & 7) + 1)), n >= t.length)
1166
+ const i = e[n + 8];
1167
+ if (n += 9, i & 128 && (n += 3 * 2 ** ((i & 7) + 1)), n >= e.length)
1091
1168
  return !1;
1092
- n += 1, n = et(t, n);
1169
+ n += 1, n = it(e, n);
1093
1170
  }
1094
1171
  return !1;
1095
1172
  }
1096
- function Zn(t) {
1097
- return t[0] === 71 && t[1] === 73 && t[2] === 70 && t[3] === 56 && (t[4] === 55 || t[4] === 57) && t[5] === 97;
1173
+ function vo(e) {
1174
+ return e[0] === 71 && e[1] === 73 && e[2] === 70 && e[3] === 56 && (e[4] === 55 || e[4] === 57) && e[5] === 97;
1098
1175
  }
1099
- function et(t, e) {
1100
- for (; e < t.length; ) {
1101
- const n = t[e];
1102
- if (e += 1, n === 0)
1103
- return e;
1104
- e += n;
1176
+ function it(e, t) {
1177
+ for (; t < e.length; ) {
1178
+ const n = e[t];
1179
+ if (t += 1, n === 0)
1180
+ return t;
1181
+ t += n;
1105
1182
  }
1106
- return e;
1183
+ return t;
1107
1184
  }
1108
- function le(t) {
1109
- return !!(t && Array.from(t.types).includes("Files"));
1185
+ function se(e) {
1186
+ return !!(e && Array.from(e.types).includes("Files"));
1110
1187
  }
1111
- function ye(t, e, n = null) {
1112
- if (!t || !Pe(e, n)) {
1113
- t && (t.hidden = !0, t.replaceChildren());
1188
+ function ke(e, t, n = null) {
1189
+ if (!e || !Ie(t, n)) {
1190
+ e && (e.hidden = !0, e.replaceChildren());
1114
1191
  return;
1115
1192
  }
1116
- t.hidden = !1, t.replaceChildren(), t.className = "pluno-pa-widget__billing-status", F(e) || De(n) ? t.appendChild(Jn(e, n)) : Ct(e) && t.appendChild(Qn(e));
1193
+ e.hidden = !1, e.replaceChildren(), e.className = "pluno-pa-widget__billing-status", G(t) || Re(n) ? e.appendChild(yo(t, n)) : Tt(t) && e.appendChild(Co(t));
1117
1194
  }
1118
- function Jn(t, e) {
1195
+ function yo(e, t) {
1119
1196
  const n = document.createElement("div");
1120
1197
  n.className = "pluno-pa-widget__billing-action-card";
1121
- const o = t.limitExceeded || e === "limit_exceeded", a = document.createElement("strong");
1198
+ const o = e.limitExceeded || t === "limit_exceeded", a = document.createElement("strong");
1122
1199
  a.textContent = o ? "Credits used up" : "Billing needs attention", n.appendChild(a);
1123
1200
  const i = document.createElement("span");
1124
- return i.textContent = o ? "Earn bonus credits or upgrade to keep using Pluno on this product." : t.paymentIssue ?? "Open billing to keep using Pluno.", n.appendChild(i), n.appendChild(Et(t, "Upgrade plan", "pluno-pa-widget__billing-action-card-actions")), n;
1201
+ return i.textContent = o ? "Earn bonus credits or upgrade to keep using Pluno on this product." : e.paymentIssue ?? "Open billing to keep using Pluno.", n.appendChild(i), n.appendChild(It(e, "Upgrade plan", "pluno-pa-widget__billing-action-card-actions")), n;
1125
1202
  }
1126
- function Qn(t) {
1127
- const e = document.createElement("div");
1128
- e.className = "pluno-pa-widget__billing-action-card pluno-pa-widget__billing-action-card--low";
1203
+ function Co(e) {
1204
+ const t = document.createElement("div");
1205
+ t.className = "pluno-pa-widget__billing-action-card pluno-pa-widget__billing-action-card--low";
1129
1206
  const n = document.createElement("strong");
1130
- n.textContent = "Credits running low", e.appendChild(n);
1207
+ n.textContent = "Credits running low", t.appendChild(n);
1131
1208
  const o = document.createElement("span");
1132
- return o.textContent = to(t) ?? "Credits are running low for this period.", e.appendChild(o), e.appendChild(Et(t, "Upgrade", "pluno-pa-widget__billing-action-card-actions")), e;
1209
+ return o.textContent = So(e) ?? "Credits are running low for this period.", t.appendChild(o), t.appendChild(It(e, "Upgrade", "pluno-pa-widget__billing-action-card-actions")), t;
1133
1210
  }
1134
- function Pe(t, e) {
1135
- return t !== null && (F(t) || Ct(t) || De(e));
1211
+ function Ie(e, t) {
1212
+ return e !== null && (G(e) || Tt(e) || Re(t));
1136
1213
  }
1137
- function tt(t, e, n) {
1138
- return Pe(e, n) || eo(e) ? !0 : !Pe(t, n);
1214
+ function rt(e, t, n) {
1215
+ return Ie(t, n) || Eo(t) ? !0 : !Ie(e, n);
1139
1216
  }
1140
- function eo(t) {
1141
- return t != null && (t.creditsUsed !== null || t.creditLimit !== null || t.creditsRemaining !== null || F(t));
1217
+ function Eo(e) {
1218
+ return e != null && (e.creditsUsed !== null || e.creditLimit !== null || e.creditsRemaining !== null || G(e));
1142
1219
  }
1143
- function F(t) {
1144
- return t?.limitExceeded === !0 || !!t?.paymentIssue;
1220
+ function G(e) {
1221
+ return e?.limitExceeded === !0 || !!e?.paymentIssue;
1145
1222
  }
1146
- function De(t) {
1147
- return t === "limit_exceeded" || t === "subscription_required" || t === "subscription_inactive" || t === "payment_issue" || t === "subscription_invalid" || t === "payment_required";
1223
+ function Re(e) {
1224
+ return e === "limit_exceeded" || e === "subscription_required" || e === "subscription_inactive" || e === "payment_issue" || e === "subscription_invalid" || e === "payment_required";
1148
1225
  }
1149
- function Ct(t) {
1150
- return !F(t) && t.creditLimit !== null && t.creditLimit > 0 && t.creditsRemaining !== null && t.creditsRemaining > 0 && t.creditsRemaining / t.creditLimit <= 0.2;
1226
+ function Tt(e) {
1227
+ return !G(e) && e.creditLimit !== null && e.creditLimit > 0 && e.creditsRemaining !== null && e.creditsRemaining > 0 && e.creditsRemaining / e.creditLimit <= 0.2;
1151
1228
  }
1152
- function to(t) {
1153
- return t.creditsRemaining === null ? null : `${no(t.creditsRemaining)} credits left`;
1229
+ function So(e) {
1230
+ return e.creditsRemaining === null ? null : `${ko(e.creditsRemaining)} credits left`;
1154
1231
  }
1155
- function no(t) {
1232
+ function ko(e) {
1156
1233
  return new Intl.NumberFormat("en-US", {
1157
1234
  maximumFractionDigits: 0
1158
- }).format(Math.ceil(t));
1235
+ }).format(Math.ceil(e));
1159
1236
  }
1160
- function Et(t, e, n) {
1237
+ function It(e, t, n) {
1161
1238
  const o = document.createElement("div");
1162
- return o.className = n, o.appendChild(nt(e, t.pricingUrl)), o.appendChild(nt("Earn credits", t.earnCreditsUrl)), o;
1239
+ return o.className = n, o.appendChild(lt(t, e.pricingUrl)), o.appendChild(lt("Earn credits", e.earnCreditsUrl)), o;
1163
1240
  }
1164
- function nt(t, e) {
1241
+ function lt(e, t) {
1165
1242
  const n = document.createElement("button");
1166
- return n.type = "button", n.textContent = t, n.disabled = e.trim().length === 0, n.addEventListener("click", () => {
1167
- e.trim().length !== 0 && window.open(e, "_blank", "noopener,noreferrer");
1243
+ return n.type = "button", n.textContent = e, n.disabled = t.trim().length === 0, n.addEventListener("click", () => {
1244
+ t.trim().length !== 0 && window.open(t, "_blank", "noopener,noreferrer");
1168
1245
  }), n;
1169
1246
  }
1170
- function oo(t) {
1171
- return new Promise((e, n) => {
1247
+ function Lo(e) {
1248
+ return new Promise((t, n) => {
1172
1249
  const o = new FileReader();
1173
1250
  o.addEventListener("load", () => {
1174
1251
  if (o.result instanceof ArrayBuffer) {
1175
- e(o.result);
1252
+ t(o.result);
1176
1253
  return;
1177
1254
  }
1178
1255
  n(new Error("Failed to read file"));
1179
1256
  }), o.addEventListener("error", () => {
1180
1257
  n(o.error ?? new Error("Failed to read file"));
1181
- }), o.readAsArrayBuffer(t);
1258
+ }), o.readAsArrayBuffer(e);
1182
1259
  });
1183
1260
  }
1184
- function ao(t) {
1185
- return new Promise((e, n) => {
1261
+ function Po(e) {
1262
+ return new Promise((t, n) => {
1186
1263
  const o = new FileReader();
1187
1264
  o.addEventListener("load", () => {
1188
1265
  if (typeof o.result == "string") {
1189
- e(o.result);
1266
+ t(o.result);
1190
1267
  return;
1191
1268
  }
1192
1269
  n(new Error("Failed to read file"));
1193
1270
  }), o.addEventListener("error", () => {
1194
1271
  n(o.error ?? new Error("Failed to read file"));
1195
- }), o.readAsDataURL(t);
1272
+ }), o.readAsDataURL(e);
1196
1273
  });
1197
1274
  }
1198
- function io(t, e, n, o, a, i, l, p, s) {
1199
- const g = [...o.messages], u = g.filter((h) => !mo(h));
1200
- t.replaceChildren(), St(e, o.isThinking);
1201
- const b = u.length > 0 || !!o.assistantDraft || o.isThinking;
1202
- if (n.hidden = !b, u.length === 0 && !o.assistantDraft && !o.lastError && !o.isThinking) {
1203
- const h = document.createElement("div");
1204
- h.className = "pluno-pa-widget__empty-state pluno-pa-widget__empty-state--starter";
1205
- const _ = document.createElement("img");
1206
- _.className = "pluno-pa-widget__character pluno-pa-widget__character--empty", _.src = l(), _.alt = "", _.setAttribute("aria-hidden", "true"), h.appendChild(_), h.appendChild(wt());
1207
- const k = document.createElement("div");
1208
- k.className = o.starterPrompts.length > 0 ? "pluno-pa-widget__starter-prompts" : "pluno-pa-widget__starter-prompts pluno-pa-widget__starter-prompts--empty", o.starterPrompts.length === 0 && k.setAttribute("aria-hidden", "true");
1209
- for (const v of o.starterPrompts) {
1210
- const y = document.createElement("button");
1211
- y.type = "button", y.className = "pluno-pa-widget__starter-prompt", y.textContent = `"${v}"`, y.addEventListener("click", () => {
1212
- p(v);
1213
- }), k.appendChild(y);
1214
- }
1215
- h.appendChild(k), t.appendChild(h);
1275
+ function pt(e, t) {
1276
+ return e.messages.filter((o) => !Dt(o)).length === 0 && !e.assistantDraft && !e.lastError && !e.isThinking && !t;
1277
+ }
1278
+ function Ao(e, t, n, o, a, i, l, p, g, c, d, f) {
1279
+ const y = [...a.messages], x = y.filter((m) => !Dt(m));
1280
+ e.replaceChildren(), Rt(t, a.isThinking), o.hidden = !l, l && i !== null && io(o, i);
1281
+ const E = x.length > 0 || !!a.assistantDraft || a.isThinking;
1282
+ if (n.hidden = !E, x.length === 0 && !a.assistantDraft && !a.lastError && !a.isThinking) {
1283
+ const m = document.createElement("div");
1284
+ m.className = "pluno-pa-widget__empty-state pluno-pa-widget__empty-state--starter";
1285
+ const w = document.createElement("div");
1286
+ w.className = "pluno-pa-widget__empty-hero";
1287
+ const C = document.createElement("img");
1288
+ C.className = "pluno-pa-widget__character pluno-pa-widget__character--empty", C.src = c(), C.alt = "", C.setAttribute("aria-hidden", "true"), w.appendChild(C), m.appendChild(w), m.appendChild(kt());
1289
+ const S = document.createElement("div");
1290
+ S.className = a.starterPrompts.length > 0 ? "pluno-pa-widget__starter-prompts" : "pluno-pa-widget__starter-prompts pluno-pa-widget__starter-prompts--empty", a.starterPrompts.length === 0 && S.setAttribute("aria-hidden", "true");
1291
+ for (const T of a.starterPrompts) {
1292
+ const D = document.createElement("button");
1293
+ D.type = "button", D.className = "pluno-pa-widget__starter-prompt", D.textContent = `"${T}"`, D.addEventListener("click", () => {
1294
+ d(T);
1295
+ }), S.appendChild(D);
1296
+ }
1297
+ m.appendChild(S), e.appendChild(m);
1216
1298
  return;
1217
1299
  }
1218
- let w = null, x = null, C = [];
1219
- const m = () => {
1220
- if (C.length === 0)
1300
+ let h = null, b = null, s = [];
1301
+ const v = () => {
1302
+ if (s.length === 0)
1221
1303
  return !1;
1222
- const h = fo(C, a, i, l());
1223
- return t.appendChild(h), w = null, x = h, C = [], !0;
1304
+ const m = Fo(s, p, g, c());
1305
+ return e.appendChild(m), h = null, b = m, s = [], !0;
1224
1306
  };
1225
- for (let h = 0; h < u.length; h += 1) {
1226
- const _ = u[h];
1227
- if (_.role === "tool") {
1228
- C.push(_);
1307
+ for (let m = 0; m < x.length; m += 1) {
1308
+ const w = x[m];
1309
+ if (w.role === "tool") {
1310
+ s.push(w);
1229
1311
  continue;
1230
1312
  }
1231
- if (_.role === "system")
1313
+ if (w.role === "system")
1232
1314
  continue;
1233
- const k = m(), v = at(_.content);
1234
- if (_.role === "assistant" && !k) {
1235
- const ne = Ae(l());
1236
- t.appendChild(ne), w = null, x = ne;
1315
+ const C = v(), S = dt(w.content);
1316
+ if (w.role === "assistant" && !C) {
1317
+ const _ = De(c());
1318
+ e.appendChild(_), h = null, b = _;
1237
1319
  }
1238
- const y = document.createElement("div");
1239
- y.className = `pluno-pa-widget__message pluno-pa-widget__message--${_.role}`, _.role === "assistant" ? it(y, v) : y.textContent = v, _.role === "user" && _.attachments?.length && y.appendChild(lo(_.attachments));
1240
1320
  const T = document.createElement("div");
1241
- T.className = "pluno-pa-widget__message-actions", T.appendChild(ot(v)), y.appendChild(T), t.appendChild(y), w = y, x = null;
1321
+ T.className = `pluno-pa-widget__message pluno-pa-widget__message--${w.role}`, w.role === "assistant" ? ct(T, S) : T.textContent = S, w.role === "user" && w.attachments?.length && T.appendChild(To(w.attachments));
1322
+ const D = document.createElement("div");
1323
+ D.className = "pluno-pa-widget__message-actions", D.appendChild(st(S)), T.appendChild(D), e.appendChild(T), h = T, b = null;
1242
1324
  }
1243
- const f = m();
1244
- if (o.assistantDraft) {
1245
- if (!f) {
1246
- const v = Ae(l());
1247
- t.appendChild(v), w = null, x = v;
1248
- }
1249
- const h = at(o.assistantDraft), _ = document.createElement("div");
1250
- _.className = "pluno-pa-widget__message pluno-pa-widget__message--assistant", it(_, h);
1251
- const k = document.createElement("div");
1252
- k.className = "pluno-pa-widget__message-actions", k.appendChild(ot(h)), _.appendChild(k), t.appendChild(_), w = _, x = null;
1325
+ const $ = v();
1326
+ if (a.assistantDraft) {
1327
+ if (!$) {
1328
+ const S = De(c());
1329
+ e.appendChild(S), h = null, b = S;
1330
+ }
1331
+ const m = dt(a.assistantDraft), w = document.createElement("div");
1332
+ w.className = "pluno-pa-widget__message pluno-pa-widget__message--assistant", ct(w, m);
1333
+ const C = document.createElement("div");
1334
+ C.className = "pluno-pa-widget__message-actions", C.appendChild(st(m)), w.appendChild(C), e.appendChild(w), h = w, b = null;
1253
1335
  }
1254
- if (o.isThinking && !o.assistantDraft)
1255
- if (f) {
1256
- const h = kt();
1257
- t.appendChild(h), w = null, x = h;
1336
+ if (a.isThinking && !a.assistantDraft)
1337
+ if ($) {
1338
+ const m = Mt();
1339
+ e.appendChild(m), h = null, b = m;
1258
1340
  } else {
1259
- const h = bo(l());
1260
- t.appendChild(h), w = null, x = h;
1341
+ const m = Uo(c());
1342
+ e.appendChild(m), h = null, b = m;
1261
1343
  }
1262
- if (o.lastError) {
1263
- const h = document.createElement("div");
1264
- h.className = "pluno-pa-widget__error", h.textContent = o.lastError, t.appendChild(h), w = h, x = null;
1344
+ if (a.lastError) {
1345
+ const m = document.createElement("div");
1346
+ m.className = "pluno-pa-widget__error", m.textContent = a.lastError, e.appendChild(m), h = m, b = null;
1265
1347
  }
1266
- const d = s && !o.isThinking ? jt(g) : null;
1267
- if (s && d && !s.dismissedCandidateIds.has(d.id)) {
1268
- const h = po(d, {
1269
- isDrafting: s.draftingCandidateId === d.id,
1270
- error: s.error,
1271
- onDraft: s.onDraft,
1272
- onDismiss: s.onDismiss,
1273
- onDisable: s.onDisable
1348
+ const U = f && !a.isThinking ? on(y) : null;
1349
+ if (f && U && !f.dismissedCandidateIds.has(U.id)) {
1350
+ const m = Io(U, {
1351
+ isDrafting: f.draftingCandidateId === U.id,
1352
+ error: f.error,
1353
+ onDraft: f.onDraft,
1354
+ onDismiss: f.onDismiss,
1355
+ onDisable: f.onDisable
1274
1356
  });
1275
- t.appendChild(h), s.onSeen(d), w = null, x = h;
1357
+ e.appendChild(m), f.onSeen(U), h = null, b = m;
1276
1358
  }
1277
- w?.classList.add("pluno-pa-widget__message--bottom-reserve"), x?.classList.add("pluno-pa-widget__bottom-reserve-compact"), t.scrollTop = t.scrollHeight;
1359
+ h?.classList.add("pluno-pa-widget__message--bottom-reserve"), b?.classList.add("pluno-pa-widget__bottom-reserve-compact"), e.scrollTop = e.scrollHeight;
1278
1360
  }
1279
- function ro(t, e, n, o, a, i) {
1280
- t.replaceChildren(), St(e, !1), e.disabled = !0, n.hidden = !0;
1361
+ function No(e, t, n, o, a, i) {
1362
+ e.replaceChildren(), Rt(t, !1), t.disabled = !0, n.hidden = !0;
1281
1363
  const l = document.createElement("div");
1282
1364
  l.className = "pluno-pa-widget__empty-state pluno-pa-widget__empty-state--starter";
1283
1365
  const p = document.createElement("img");
1284
1366
  p.className = "pluno-pa-widget__character pluno-pa-widget__character--empty", p.src = o(), p.alt = "", p.setAttribute("aria-hidden", "true"), l.appendChild(p);
1285
- const s = document.createElement("div");
1286
- s.className = "pluno-pa-widget__empty", s.textContent = "Log in to use Pluno on this page.", l.appendChild(s);
1287
- const g = document.createElement("button");
1288
- g.type = "button", g.className = "pluno-pa-widget__login", g.textContent = a, g.addEventListener("click", () => i?.()), l.appendChild(g), t.appendChild(l);
1367
+ const g = document.createElement("div");
1368
+ g.className = "pluno-pa-widget__empty", g.textContent = "Log in to use Pluno on this page.", l.appendChild(g);
1369
+ const c = document.createElement("button");
1370
+ c.type = "button", c.className = "pluno-pa-widget__login", c.textContent = a, c.addEventListener("click", () => i?.()), l.appendChild(c), e.appendChild(l);
1289
1371
  }
1290
- function lo(t) {
1291
- const e = document.createElement("div");
1292
- e.className = "pluno-pa-widget__message-attachments";
1293
- for (const n of t)
1294
- e.appendChild(Vn(n));
1295
- return e;
1296
- }
1297
- function ot(t) {
1298
- const e = document.createElement("button");
1299
- return e.type = "button", e.className = "pluno-pa-widget__message-copy", e.setAttribute("aria-label", "Copy message"), e.title = "Copy message", e.appendChild($n()), e.addEventListener("click", (n) => {
1300
- n.preventDefault(), n.stopPropagation(), navigator.clipboard.writeText(t);
1301
- }), e;
1302
- }
1303
- function po(t, e) {
1372
+ function To(e) {
1373
+ const t = document.createElement("div");
1374
+ t.className = "pluno-pa-widget__message-attachments";
1375
+ for (const n of e)
1376
+ t.appendChild(mo(n));
1377
+ return t;
1378
+ }
1379
+ function st(e) {
1380
+ const t = document.createElement("button");
1381
+ return t.type = "button", t.className = "pluno-pa-widget__message-copy", t.setAttribute("aria-label", "Copy message"), t.title = "Copy message", t.appendChild(uo()), t.addEventListener("click", (n) => {
1382
+ n.preventDefault(), n.stopPropagation(), navigator.clipboard.writeText(e);
1383
+ }), t;
1384
+ }
1385
+ function Io(e, t) {
1304
1386
  const n = document.createElement("article");
1305
1387
  n.className = "pluno-pa-widget__share-prompt";
1306
1388
  const o = document.createElement("div");
@@ -1310,100 +1392,100 @@ function po(t, e) {
1310
1392
  const i = document.createElement("strong");
1311
1393
  i.textContent = "Share this win?", a.appendChild(i);
1312
1394
  const l = document.createElement("span");
1313
- if (l.textContent = e.isDrafting ? "Drafting social post..." : "Create a screenshot and generate a draft for a social post.", a.appendChild(l), e.error) {
1314
- const u = document.createElement("span");
1315
- u.className = "pluno-pa-widget__share-prompt-error", u.textContent = e.error, a.appendChild(u);
1395
+ if (l.textContent = t.isDrafting ? "Drafting social post..." : "Create a screenshot and generate a draft for a social post.", a.appendChild(l), t.error) {
1396
+ const d = document.createElement("span");
1397
+ d.className = "pluno-pa-widget__share-prompt-error", d.textContent = t.error, a.appendChild(d);
1316
1398
  }
1317
1399
  o.appendChild(a);
1318
1400
  const p = document.createElement("div");
1319
1401
  p.className = "pluno-pa-widget__share-prompt-actions";
1320
- const s = document.createElement("div");
1321
- s.className = "pluno-pa-widget__share-prompt-primary-actions";
1322
- const g = document.createElement("button");
1323
- if (g.type = "button", g.disabled = e.isDrafting, g.addEventListener("click", () => {
1324
- e.onDraft(t);
1325
- }), e.isDrafting ? (g.appendChild(Ne()), g.appendChild(document.createTextNode("Drafting..."))) : g.textContent = "Draft a social post", s.appendChild(g), e.isDrafting)
1326
- p.appendChild(s);
1402
+ const g = document.createElement("div");
1403
+ g.className = "pluno-pa-widget__share-prompt-primary-actions";
1404
+ const c = document.createElement("button");
1405
+ if (c.type = "button", c.disabled = t.isDrafting, c.addEventListener("click", () => {
1406
+ t.onDraft(e);
1407
+ }), t.isDrafting ? (c.appendChild(Me()), c.appendChild(document.createTextNode("Drafting..."))) : c.textContent = "Draft a social post", g.appendChild(c), t.isDrafting)
1408
+ p.appendChild(g);
1327
1409
  else {
1328
- const u = document.createElement("button");
1329
- u.type = "button", u.className = "pluno-pa-widget__share-prompt-dismiss", u.setAttribute("aria-label", "Dismiss share prompt"), u.title = "Dismiss", u.textContent = "Dismiss", u.addEventListener("click", () => {
1330
- e.onDismiss(t);
1331
- }), s.appendChild(u), p.appendChild(s);
1332
- const b = document.createElement("button");
1333
- b.type = "button", b.className = "pluno-pa-widget__share-prompt-disable", b.textContent = "Don't ask again", b.addEventListener("click", () => {
1334
- e.onDisable(t);
1335
- }), p.appendChild(b);
1410
+ const d = document.createElement("button");
1411
+ d.type = "button", d.className = "pluno-pa-widget__share-prompt-dismiss", d.setAttribute("aria-label", "Dismiss share prompt"), d.title = "Dismiss", d.textContent = "Dismiss", d.addEventListener("click", () => {
1412
+ t.onDismiss(e);
1413
+ }), g.appendChild(d), p.appendChild(g);
1414
+ const f = document.createElement("button");
1415
+ f.type = "button", f.className = "pluno-pa-widget__share-prompt-disable", f.textContent = "Don't ask again", f.addEventListener("click", () => {
1416
+ t.onDisable(e);
1417
+ }), p.appendChild(f);
1336
1418
  }
1337
1419
  return o.appendChild(p), n.appendChild(o), n;
1338
1420
  }
1339
- function so(t, e) {
1421
+ function Do(e, t) {
1340
1422
  const n = document.createElement("div");
1341
- n.className = "pluno-pa-widget__share-dialog-backdrop", n.addEventListener("click", (f) => {
1342
- f.target === n && e.onClose();
1423
+ n.className = "pluno-pa-widget__share-dialog-backdrop", n.addEventListener("click", (b) => {
1424
+ b.target === n && t.onClose();
1343
1425
  });
1344
1426
  const o = document.createElement("section");
1345
1427
  o.className = "pluno-pa-widget__share-dialog", o.setAttribute("role", "dialog"), o.setAttribute("aria-modal", "true"), o.setAttribute("aria-label", "Draft a social post");
1346
1428
  const a = document.createElement("header"), i = document.createElement("strong");
1347
1429
  i.textContent = "Share this win", a.appendChild(i);
1348
1430
  const l = document.createElement("button");
1349
- l.type = "button", l.setAttribute("aria-label", "Close"), l.textContent = "×", l.addEventListener("click", e.onClose), a.appendChild(l), o.appendChild(a);
1431
+ l.type = "button", l.setAttribute("aria-label", "Close"), l.textContent = "×", l.addEventListener("click", t.onClose), a.appendChild(l), o.appendChild(a);
1350
1432
  const p = document.createElement("p");
1351
1433
  p.className = "pluno-pa-widget__share-dialog-status", p.hidden = !0;
1352
- const s = document.createElement("div");
1353
- s.className = "pluno-pa-widget__share-dialog-step";
1354
1434
  const g = document.createElement("div");
1355
- g.className = "pluno-pa-widget__share-dialog-step-header";
1356
- const u = document.createElement("strong");
1357
- u.textContent = "1) Copy Screenshot", g.appendChild(u);
1358
- const b = co("Copy Screenshot", async () => {
1435
+ g.className = "pluno-pa-widget__share-dialog-step";
1436
+ const c = document.createElement("div");
1437
+ c.className = "pluno-pa-widget__share-dialog-step-header";
1438
+ const d = document.createElement("strong");
1439
+ d.textContent = "1) Copy Screenshot", c.appendChild(d);
1440
+ const f = Mo("Copy Screenshot", async () => {
1359
1441
  try {
1360
- return await Kt(t.screenshotDataUrl ?? ""), p.textContent = "", p.hidden = !0, !0;
1442
+ return await an(e.screenshotDataUrl ?? ""), p.textContent = "", p.hidden = !0, !0;
1361
1443
  } catch {
1362
1444
  return p.textContent = "Could not copy screenshot.", p.hidden = !1, !1;
1363
1445
  }
1364
1446
  });
1365
- if (g.appendChild(b), s.appendChild(g), t.screenshotDataUrl) {
1366
- const f = document.createElement("div");
1367
- f.className = "pluno-pa-widget__share-dialog-screenshot";
1368
- const d = document.createElement("img");
1369
- d.src = t.screenshotDataUrl, d.alt = "Product page with Pluno open", f.appendChild(d), s.appendChild(f);
1447
+ if (c.appendChild(f), g.appendChild(c), e.screenshotDataUrl) {
1448
+ const b = document.createElement("div");
1449
+ b.className = "pluno-pa-widget__share-dialog-screenshot";
1450
+ const s = document.createElement("img");
1451
+ s.src = e.screenshotDataUrl, s.alt = "Product page with Pluno open", b.appendChild(s), g.appendChild(b);
1370
1452
  }
1371
- o.appendChild(s), o.appendChild(p);
1372
- const w = document.createElement("div");
1373
- w.className = "pluno-pa-widget__share-dialog-step";
1453
+ o.appendChild(g), o.appendChild(p);
1454
+ const y = document.createElement("div");
1455
+ y.className = "pluno-pa-widget__share-dialog-step";
1374
1456
  const x = document.createElement("strong");
1375
- x.className = "pluno-pa-widget__share-dialog-step-title", x.textContent = "2) Share on", w.appendChild(x);
1376
- const C = document.createElement("p");
1377
- C.className = "pluno-pa-widget__share-dialog-hint", C.textContent = "Post draft opens prefilled on supported platforms.", w.appendChild(C);
1378
- const m = document.createElement("footer");
1379
- m.className = "pluno-pa-widget__share-dialog-platforms";
1380
- for (const f of uo(t)) {
1381
- const d = document.createElement("a");
1382
- d.href = f.href, d.target = "_blank", d.rel = "noopener noreferrer", d.title = f.label, d.setAttribute("aria-label", `Open ${f.label}`), d.appendChild(go(f.id)), m.appendChild(d);
1457
+ x.className = "pluno-pa-widget__share-dialog-step-title", x.textContent = "2) Share on", y.appendChild(x);
1458
+ const E = document.createElement("p");
1459
+ E.className = "pluno-pa-widget__share-dialog-hint", E.textContent = "Post draft opens prefilled on supported platforms.", y.appendChild(E);
1460
+ const h = document.createElement("footer");
1461
+ h.className = "pluno-pa-widget__share-dialog-platforms";
1462
+ for (const b of Ro(e)) {
1463
+ const s = document.createElement("a");
1464
+ s.href = b.href, s.target = "_blank", s.rel = "noopener noreferrer", s.title = b.label, s.setAttribute("aria-label", `Open ${b.label}`), s.appendChild(Oo(b.id)), h.appendChild(s);
1383
1465
  }
1384
- if (w.appendChild(m), o.appendChild(w), e.socialPostRewardsUrl) {
1385
- const f = document.createElement("div");
1386
- f.className = "pluno-pa-widget__share-dialog-step";
1387
- const d = document.createElement("strong");
1388
- d.className = "pluno-pa-widget__share-dialog-step-title", d.textContent = "3) Submit post to get 2000 free credits!", f.appendChild(d);
1389
- const h = document.createElement("a");
1390
- h.className = "pluno-pa-widget__share-dialog-reward-link", h.href = e.socialPostRewardsUrl, h.target = "_blank", h.rel = "noopener noreferrer", h.appendChild(document.createTextNode("Submit post URL")), h.appendChild(ho()), f.appendChild(h), o.appendChild(f);
1466
+ if (y.appendChild(h), o.appendChild(y), t.socialPostRewardsUrl) {
1467
+ const b = document.createElement("div");
1468
+ b.className = "pluno-pa-widget__share-dialog-step";
1469
+ const s = document.createElement("strong");
1470
+ s.className = "pluno-pa-widget__share-dialog-step-title", s.textContent = "3) Submit post to get 2000 free credits!", b.appendChild(s);
1471
+ const v = document.createElement("a");
1472
+ v.className = "pluno-pa-widget__share-dialog-reward-link", v.href = t.socialPostRewardsUrl, v.target = "_blank", v.rel = "noopener noreferrer", v.appendChild(document.createTextNode("Submit post URL")), v.appendChild(Bo()), b.appendChild(v), o.appendChild(b);
1391
1473
  }
1392
1474
  return n.appendChild(o), n;
1393
1475
  }
1394
- function co(t, e) {
1476
+ function Mo(e, t) {
1395
1477
  const n = document.createElement("button");
1396
- return n.type = "button", n.className = "pluno-pa-widget__share-dialog-copy", n.textContent = t, n.addEventListener("click", async (o) => {
1397
- o.preventDefault(), o.stopPropagation(), await e() && (n.textContent = "Copied ✓");
1478
+ return n.type = "button", n.className = "pluno-pa-widget__share-dialog-copy", n.textContent = e, n.addEventListener("click", async (o) => {
1479
+ o.preventDefault(), o.stopPropagation(), await t() && (n.textContent = "Copied ✓");
1398
1480
  }), n;
1399
1481
  }
1400
- function uo(t) {
1401
- const e = t.linkedinPost.trim(), n = t.xPost.trim();
1482
+ function Ro(e) {
1483
+ const t = e.linkedinPost.trim(), n = e.xPost.trim();
1402
1484
  return [
1403
1485
  {
1404
1486
  id: "linkedin",
1405
1487
  label: "LinkedIn",
1406
- href: `https://www.linkedin.com/feed/?shareActive=true&text=${encodeURIComponent(e)}`
1488
+ href: `https://www.linkedin.com/feed/?shareActive=true&text=${encodeURIComponent(t)}`
1407
1489
  },
1408
1490
  {
1409
1491
  id: "x",
@@ -1417,79 +1499,79 @@ function uo(t) {
1417
1499
  }
1418
1500
  ];
1419
1501
  }
1420
- function go(t) {
1421
- const e = document.createElementNS("http://www.w3.org/2000/svg", "svg");
1422
- return e.setAttribute("class", "pluno-pa-widget__share-dialog-platform-logo"), e.setAttribute("viewBox", "0 0 32 32"), e.setAttribute("aria-hidden", "true"), t === "linkedin" ? (P(e, "M6.7 13.2c.4 4.1.2 8.1.1 12.3"), P(e, "M6.4 6.9c.6-.5 1.6-.5 2.1.1.7.7.5 1.8-.2 2.3-.8.5-1.9.2-2.3-.6-.2-.6 0-1.3.4-1.8Z"), P(e, "M14.4 13.3c.1 3.8.1 7.8 0 11.9"), P(e, "M14.8 16.2c1.2-2 3-3.1 5.1-2.9 3.4.3 4.8 2.7 4.8 6.2 0 1.9-.1 3.8-.1 5.8"), P(e, "M20 18c.1 2.2.1 4.7 0 7.2"), e) : t === "x" ? (P(e, "M7.2 7.4c5.6 6.4 10.9 12.2 17.7 17.2"), P(e, "M24.4 7.2c-5.1 6.3-10.6 11.8-17 17.8"), P(e, "M9.1 8.2c5.1 5.6 9.7 10.8 15 15.5", "0.55"), e) : (P(e, "M10.2 6.4c3.8-.3 8-.3 11.6.1 2.5.3 3.8 1.8 4 4 .4 3.3.4 7.4 0 10.9-.3 2.4-1.7 3.8-4 4.1-3.8.4-8.2.4-11.8 0-2.3-.3-3.7-1.8-4-4.1-.4-3.5-.3-7.8.1-11.1.2-2.2 1.8-3.6 4.1-3.9Z"), P(e, "M11 7.3c3.4-.4 7.1-.4 10.2.1 2 .3 3.1 1.4 3.4 3.2.4 3 .4 6.6.1 9.9-.3 2.2-1.3 3.3-3.3 3.7-3.2.5-7.2.5-10.5.1", "0.48"), P(e, "M12.1 16.1c.1-2.4 1.8-4.1 4-4.2 2.4-.1 4.2 1.6 4.3 4 .1 2.3-1.6 4.1-3.9 4.2-2.6.2-4.3-1.5-4.4-4Z"), P(e, "M22 10.7c.3-.1.7 0 .9.3.2.4.1.8-.2 1-.4.2-.8.1-1-.2-.2-.4-.1-.8.3-1.1Z"), e);
1502
+ function Oo(e) {
1503
+ const t = document.createElementNS("http://www.w3.org/2000/svg", "svg");
1504
+ return t.setAttribute("class", "pluno-pa-widget__share-dialog-platform-logo"), t.setAttribute("viewBox", "0 0 32 32"), t.setAttribute("aria-hidden", "true"), e === "linkedin" ? (P(t, "M6.7 13.2c.4 4.1.2 8.1.1 12.3"), P(t, "M6.4 6.9c.6-.5 1.6-.5 2.1.1.7.7.5 1.8-.2 2.3-.8.5-1.9.2-2.3-.6-.2-.6 0-1.3.4-1.8Z"), P(t, "M14.4 13.3c.1 3.8.1 7.8 0 11.9"), P(t, "M14.8 16.2c1.2-2 3-3.1 5.1-2.9 3.4.3 4.8 2.7 4.8 6.2 0 1.9-.1 3.8-.1 5.8"), P(t, "M20 18c.1 2.2.1 4.7 0 7.2"), t) : e === "x" ? (P(t, "M7.2 7.4c5.6 6.4 10.9 12.2 17.7 17.2"), P(t, "M24.4 7.2c-5.1 6.3-10.6 11.8-17 17.8"), P(t, "M9.1 8.2c5.1 5.6 9.7 10.8 15 15.5", "0.55"), t) : (P(t, "M10.2 6.4c3.8-.3 8-.3 11.6.1 2.5.3 3.8 1.8 4 4 .4 3.3.4 7.4 0 10.9-.3 2.4-1.7 3.8-4 4.1-3.8.4-8.2.4-11.8 0-2.3-.3-3.7-1.8-4-4.1-.4-3.5-.3-7.8.1-11.1.2-2.2 1.8-3.6 4.1-3.9Z"), P(t, "M11 7.3c3.4-.4 7.1-.4 10.2.1 2 .3 3.1 1.4 3.4 3.2.4 3 .4 6.6.1 9.9-.3 2.2-1.3 3.3-3.3 3.7-3.2.5-7.2.5-10.5.1", "0.48"), P(t, "M12.1 16.1c.1-2.4 1.8-4.1 4-4.2 2.4-.1 4.2 1.6 4.3 4 .1 2.3-1.6 4.1-3.9 4.2-2.6.2-4.3-1.5-4.4-4Z"), P(t, "M22 10.7c.3-.1.7 0 .9.3.2.4.1.8-.2 1-.4.2-.8.1-1-.2-.2-.4-.1-.8.3-1.1Z"), t);
1423
1505
  }
1424
- function P(t, e, n) {
1506
+ function P(e, t, n) {
1425
1507
  const o = document.createElementNS("http://www.w3.org/2000/svg", "path");
1426
- o.setAttribute("d", e), n && o.setAttribute("opacity", n), t.appendChild(o);
1508
+ o.setAttribute("d", t), n && o.setAttribute("opacity", n), e.appendChild(o);
1427
1509
  }
1428
- function ho() {
1429
- const t = document.createElementNS("http://www.w3.org/2000/svg", "svg");
1430
- return t.setAttribute("class", "pluno-pa-widget__share-dialog-external-icon"), t.setAttribute("viewBox", "0 0 24 24"), t.setAttribute("aria-hidden", "true"), P(t, "M14 5h5v5"), P(t, "M19 5l-8 8"), P(t, "M18 13v5a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h5"), t;
1510
+ function Bo() {
1511
+ const e = document.createElementNS("http://www.w3.org/2000/svg", "svg");
1512
+ return e.setAttribute("class", "pluno-pa-widget__share-dialog-external-icon"), e.setAttribute("viewBox", "0 0 24 24"), e.setAttribute("aria-hidden", "true"), P(e, "M14 5h5v5"), P(e, "M19 5l-8 8"), P(e, "M18 13v5a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h5"), e;
1431
1513
  }
1432
- function mo(t) {
1433
- return t.role === "tool" && t.toolName === ut;
1514
+ function Dt(e) {
1515
+ return e.role === "tool" && e.toolName === wt;
1434
1516
  }
1435
- function at(t) {
1436
- return t.replace(/\uE200[^\uE201]*(?:\uE201|$)/g, "");
1517
+ function dt(e) {
1518
+ return e.replace(/\uE200[^\uE201]*(?:\uE201|$)/g, "");
1437
1519
  }
1438
- function fo(t, e, n, o) {
1520
+ function Fo(e, t, n, o) {
1439
1521
  const a = document.createElement("article");
1440
- a.className = "pluno-pa-widget__tool-group", a.title = new Date(t[t.length - 1].createdAt).toLocaleString();
1522
+ a.className = "pluno-pa-widget__tool-group", a.title = new Date(e[e.length - 1].createdAt).toLocaleString();
1441
1523
  const i = document.createElement("img");
1442
1524
  i.className = "pluno-pa-widget__character pluno-pa-widget__character--tool-group", i.src = o, i.alt = "", i.setAttribute("aria-hidden", "true"), a.appendChild(i);
1443
- const l = document.createElement("details"), p = wo(t);
1444
- l.open = e.has(p), l.addEventListener("toggle", () => {
1445
- l.open ? e.add(p) : e.delete(p), n();
1525
+ const l = document.createElement("details"), p = zo(e);
1526
+ l.open = t.has(p), l.addEventListener("toggle", () => {
1527
+ l.open ? t.add(p) : t.delete(p), n();
1446
1528
  });
1447
- const s = document.createElement("summary");
1448
- s.className = "pluno-pa-widget__tool-summary", t.some((b) => b.loading) && s.appendChild(Ne());
1449
- const u = document.createElement("span");
1450
- if (u.className = "pluno-pa-widget__tool-summary-title", u.textContent = t[t.length - 1].content || "Run tool", s.appendChild(u), l.appendChild(s), t.length > 0) {
1451
- const b = document.createElement("div");
1452
- b.className = "pluno-pa-widget__tool-lines";
1453
- for (const w of t) {
1529
+ const g = document.createElement("summary");
1530
+ g.className = "pluno-pa-widget__tool-summary", e.some((f) => f.loading) && g.appendChild(Me());
1531
+ const d = document.createElement("span");
1532
+ if (d.className = "pluno-pa-widget__tool-summary-title", d.textContent = e[e.length - 1].content || "Run tool", g.appendChild(d), l.appendChild(g), e.length > 0) {
1533
+ const f = document.createElement("div");
1534
+ f.className = "pluno-pa-widget__tool-lines";
1535
+ for (const y of e) {
1454
1536
  const x = document.createElement("div");
1455
- x.className = "pluno-pa-widget__tool-line", w.loading && x.appendChild(Ne());
1456
- const C = document.createElement("span");
1457
- C.textContent = w.content || "Run tool", x.appendChild(C), b.appendChild(x);
1537
+ x.className = "pluno-pa-widget__tool-line", y.loading && x.appendChild(Me());
1538
+ const E = document.createElement("span");
1539
+ E.textContent = y.content || "Run tool", x.appendChild(E), f.appendChild(x);
1458
1540
  }
1459
- l.appendChild(b);
1541
+ l.appendChild(f);
1460
1542
  }
1461
1543
  return a.appendChild(l), a;
1462
1544
  }
1463
- function Ae(t) {
1464
- const e = document.createElement("article");
1465
- e.className = "pluno-pa-widget__tool-group pluno-pa-widget__assistant-marker";
1545
+ function De(e) {
1546
+ const t = document.createElement("article");
1547
+ t.className = "pluno-pa-widget__tool-group pluno-pa-widget__assistant-marker";
1466
1548
  const n = document.createElement("img");
1467
- return n.className = "pluno-pa-widget__character pluno-pa-widget__character--tool-group", n.src = t, n.alt = "", n.setAttribute("aria-hidden", "true"), e.appendChild(n), e;
1549
+ return n.className = "pluno-pa-widget__character pluno-pa-widget__character--tool-group", n.src = e, n.alt = "", n.setAttribute("aria-hidden", "true"), t.appendChild(n), t;
1468
1550
  }
1469
- function bo(t) {
1470
- const e = Ae(t);
1471
- return e.classList.add("pluno-pa-widget__thinking-marker"), e.appendChild(kt()), e;
1551
+ function Uo(e) {
1552
+ const t = De(e);
1553
+ return t.classList.add("pluno-pa-widget__thinking-marker"), t.appendChild(Mt()), t;
1472
1554
  }
1473
- function kt() {
1474
- const t = document.createElement("div");
1475
- t.className = "pluno-pa-widget__status";
1476
- const e = document.createElement("span");
1477
- e.className = "pluno-pa-widget__thinking-dot", e.setAttribute("aria-hidden", "true"), t.appendChild(e);
1555
+ function Mt() {
1556
+ const e = document.createElement("div");
1557
+ e.className = "pluno-pa-widget__status";
1558
+ const t = document.createElement("span");
1559
+ t.className = "pluno-pa-widget__thinking-dot", t.setAttribute("aria-hidden", "true"), e.appendChild(t);
1478
1560
  const n = document.createElement("span");
1479
- return n.textContent = "Thinking...", t.appendChild(n), t;
1561
+ return n.textContent = "Thinking...", e.appendChild(n), e;
1480
1562
  }
1481
- function wo(t) {
1482
- return `tools:${t.map((e) => e.id).join("|")}`;
1563
+ function zo(e) {
1564
+ return `tools:${e.map((t) => t.id).join("|")}`;
1483
1565
  }
1484
- function Ne() {
1485
- const t = document.createElement("span");
1486
- return t.className = "pluno-pa-widget__spinner", t.setAttribute("aria-hidden", "true"), t;
1566
+ function Me() {
1567
+ const e = document.createElement("span");
1568
+ return e.className = "pluno-pa-widget__spinner", e.setAttribute("aria-hidden", "true"), e;
1487
1569
  }
1488
- function St(t, e) {
1489
- t.setAttribute("aria-label", e ? "Stop" : "Send"), t.classList.toggle("pluno-pa-widget__send--stop", e), t.replaceChildren(e ? Gn() : vt());
1570
+ function Rt(e, t) {
1571
+ e.setAttribute("aria-label", t ? "Stop" : "Send"), e.classList.toggle("pluno-pa-widget__send--stop", t), e.replaceChildren(t ? so() : At());
1490
1572
  }
1491
- function it(t, e) {
1492
- const n = e.replace(/\r\n/g, `
1573
+ function ct(e, t) {
1574
+ const n = t.replace(/\r\n/g, `
1493
1575
  `).split(`
1494
1576
  `);
1495
1577
  let o = 0;
@@ -1500,91 +1582,90 @@ function it(t, e) {
1500
1582
  continue;
1501
1583
  }
1502
1584
  if (a.match(/^```(\w+)?\s*$/)) {
1503
- const g = [];
1585
+ const c = [];
1504
1586
  for (o += 1; o < n.length && !/^```\s*$/.test(n[o]); )
1505
- g.push(n[o]), o += 1;
1587
+ c.push(n[o]), o += 1;
1506
1588
  o += o < n.length ? 1 : 0;
1507
- const u = document.createElement("pre"), b = document.createElement("code");
1508
- b.textContent = g.join(`
1509
- `), u.appendChild(b), t.appendChild(u);
1589
+ const d = document.createElement("pre"), f = document.createElement("code");
1590
+ f.textContent = c.join(`
1591
+ `), d.appendChild(f), e.appendChild(d);
1510
1592
  continue;
1511
1593
  }
1512
1594
  const l = a.match(/^(#{1,3})\s+(.+)$/);
1513
1595
  if (l) {
1514
- const g = document.createElement(`h${l[1].length + 2}`);
1515
- pe(g, l[2]), t.appendChild(g), o += 1;
1596
+ const c = document.createElement(`h${l[1].length + 2}`);
1597
+ de(c, l[2]), e.appendChild(c), o += 1;
1516
1598
  continue;
1517
1599
  }
1518
1600
  if (/^\s*[-*+]\s+/.test(a)) {
1519
- const g = document.createElement("ul");
1601
+ const c = document.createElement("ul");
1520
1602
  for (; o < n.length && /^\s*[-*+]\s+/.test(n[o]); ) {
1521
- const u = document.createElement("li");
1522
- pe(u, n[o].replace(/^\s*[-*+]\s+/, "")), g.appendChild(u), o += 1;
1603
+ const d = document.createElement("li");
1604
+ de(d, n[o].replace(/^\s*[-*+]\s+/, "")), c.appendChild(d), o += 1;
1523
1605
  }
1524
- t.appendChild(g);
1606
+ e.appendChild(c);
1525
1607
  continue;
1526
1608
  }
1527
1609
  if (/^\s*\d+\.\s+/.test(a)) {
1528
- const g = document.createElement("ol");
1610
+ const c = document.createElement("ol");
1529
1611
  for (; o < n.length && /^\s*\d+\.\s+/.test(n[o]); ) {
1530
- const u = document.createElement("li");
1531
- pe(u, n[o].replace(/^\s*\d+\.\s+/, "")), g.appendChild(u), o += 1;
1612
+ const d = document.createElement("li");
1613
+ de(d, n[o].replace(/^\s*\d+\.\s+/, "")), c.appendChild(d), o += 1;
1532
1614
  }
1533
- t.appendChild(g);
1615
+ e.appendChild(c);
1534
1616
  continue;
1535
1617
  }
1536
1618
  const p = [a];
1537
1619
  for (o += 1; o < n.length && n[o].trim() && !/^```/.test(n[o]) && !/^(#{1,3})\s+/.test(n[o]) && !/^\s*[-*+]\s+/.test(n[o]) && !/^\s*\d+\.\s+/.test(n[o]); )
1538
1620
  p.push(n[o]), o += 1;
1539
- const s = document.createElement("p");
1540
- p.forEach((g, u) => {
1541
- u > 0 && s.appendChild(document.createElement("br")), pe(s, g);
1542
- }), t.appendChild(s);
1621
+ const g = document.createElement("p");
1622
+ p.forEach((c, d) => {
1623
+ d > 0 && g.appendChild(document.createElement("br")), de(g, c);
1624
+ }), e.appendChild(g);
1543
1625
  }
1544
1626
  }
1545
- function pe(t, e) {
1627
+ function de(e, t) {
1546
1628
  const n = /(`[^`]+`|\*\*[^*]+\*\*|\*[^*]+\*|\[[^\]]+\]\(([^)\s]+)\))/g;
1547
1629
  let o = 0;
1548
- for (const a of e.matchAll(n)) {
1630
+ for (const a of t.matchAll(n)) {
1549
1631
  const i = a.index ?? 0;
1550
- i > o && t.appendChild(document.createTextNode(e.slice(o, i)));
1632
+ i > o && e.appendChild(document.createTextNode(t.slice(o, i)));
1551
1633
  const l = a[0];
1552
1634
  if (l.startsWith("`")) {
1553
1635
  const p = document.createElement("code");
1554
- p.textContent = l.slice(1, -1), t.appendChild(p);
1636
+ p.textContent = l.slice(1, -1), e.appendChild(p);
1555
1637
  } else if (l.startsWith("**")) {
1556
1638
  const p = document.createElement("strong");
1557
- p.textContent = l.slice(2, -2), t.appendChild(p);
1639
+ p.textContent = l.slice(2, -2), e.appendChild(p);
1558
1640
  } else if (l.startsWith("*")) {
1559
1641
  const p = document.createElement("em");
1560
- p.textContent = l.slice(1, -1), t.appendChild(p);
1642
+ p.textContent = l.slice(1, -1), e.appendChild(p);
1561
1643
  } else {
1562
1644
  const p = l.match(/^\[([^\]]+)\]\(([^)\s]+)\)$/);
1563
- if (p && _o(p[2])) {
1564
- const s = document.createElement("a");
1565
- s.href = p[2], s.target = "_top", s.rel = "noreferrer", s.textContent = p[1], t.appendChild(s);
1645
+ if (p && Go(p[2])) {
1646
+ const g = document.createElement("a");
1647
+ g.href = p[2], g.target = "_top", g.rel = "noreferrer", g.textContent = p[1], e.appendChild(g);
1566
1648
  } else
1567
- t.appendChild(document.createTextNode(l));
1649
+ e.appendChild(document.createTextNode(l));
1568
1650
  }
1569
1651
  o = i + l.length;
1570
1652
  }
1571
- o < e.length && t.appendChild(document.createTextNode(e.slice(o)));
1653
+ o < t.length && e.appendChild(document.createTextNode(t.slice(o)));
1572
1654
  }
1573
- function _o(t) {
1574
- if (t.startsWith("/") || t.startsWith("#"))
1655
+ function Go(e) {
1656
+ if (e.startsWith("/") || e.startsWith("#"))
1575
1657
  return !0;
1576
1658
  try {
1577
- const e = new URL(t);
1578
- return ["http:", "https:", "mailto:"].includes(e.protocol);
1659
+ const t = new URL(e);
1660
+ return ["http:", "https:", "mailto:"].includes(t.protocol);
1579
1661
  } catch {
1580
1662
  return !1;
1581
1663
  }
1582
1664
  }
1583
- function rt(t, e) {
1584
- if (t.getElementById("pluno-pa-widget-styles"))
1665
+ function ut(e, t) {
1666
+ if ($o(e))
1585
1667
  return;
1586
- const n = t.ownerDocument.createElement("style");
1587
- n.id = "pluno-pa-widget-styles", n.textContent = `
1668
+ const n = `
1588
1669
  :host {
1589
1670
  all: initial;
1590
1671
  color-scheme: light;
@@ -1616,7 +1697,7 @@ function rt(t, e) {
1616
1697
  flex: 0 0 auto;
1617
1698
  }
1618
1699
  .pluno-pa-widget {
1619
- --pluno-pa-accent: ${e};
1700
+ --pluno-pa-accent: ${t};
1620
1701
  --pluno-pa-bg: #fafaf9;
1621
1702
  --pluno-pa-surface: #f4f4f2;
1622
1703
  --pluno-pa-bubble: #eeeded;
@@ -1635,7 +1716,7 @@ function rt(t, e) {
1635
1716
  --pluno-pa-accent-contrast: #fafafa;
1636
1717
  position: fixed;
1637
1718
  z-index: 2147483645;
1638
- font-family: ${M.fontFamily};
1719
+ font-family: ${B.fontFamily};
1639
1720
  font-size: 14px;
1640
1721
  color: var(--pluno-pa-text);
1641
1722
  width: var(--pluno-pa-launcher-width);
@@ -2337,7 +2418,7 @@ function rt(t, e) {
2337
2418
  place-items: center;
2338
2419
  padding: 18px;
2339
2420
  background: rgba(24, 24, 27, 0.28);
2340
- font-family: var(--pluno-pa-font, ${M.fontFamily});
2421
+ font-family: var(--pluno-pa-font, ${B.fontFamily});
2341
2422
  color: var(--pluno-pa-text);
2342
2423
  }
2343
2424
  .pluno-pa-widget__share-dialog {
@@ -2833,6 +2914,39 @@ function rt(t, e) {
2833
2914
  line-height: 1.34;
2834
2915
  text-align: left;
2835
2916
  }
2917
+ .pluno-pa-widget__empty-hero {
2918
+ display: inline-flex;
2919
+ align-items: center;
2920
+ gap: 16px;
2921
+ }
2922
+ .pluno-pa-widget__empty-hero .pluno-pa-widget__character--empty {
2923
+ margin-bottom: 0;
2924
+ }
2925
+ .pluno-pa-widget__active-users-counter {
2926
+ position: absolute;
2927
+ top: 18px;
2928
+ left: 50%;
2929
+ z-index: 2;
2930
+ display: inline-flex;
2931
+ align-items: center;
2932
+ justify-content: center;
2933
+ gap: 7px;
2934
+ transform: translateX(-50%);
2935
+ color: color-mix(in srgb, var(--pluno-pa-text) 62%, transparent);
2936
+ font-size: 13px;
2937
+ font-weight: 600;
2938
+ line-height: 1.3;
2939
+ font-variant-numeric: tabular-nums;
2940
+ text-align: center;
2941
+ text-transform: lowercase;
2942
+ }
2943
+ .pluno-pa-widget__active-users-counter-dot {
2944
+ width: 7px;
2945
+ height: 7px;
2946
+ border-radius: 999px;
2947
+ background: #22c55e;
2948
+ box-shadow: 0 0 0 4px rgb(34 197 94 / 10%);
2949
+ }
2836
2950
  .pluno-pa-widget__empty-state--starter .pluno-pa-widget__character--empty {
2837
2951
  margin-bottom: -24px;
2838
2952
  }
@@ -2973,7 +3087,7 @@ function rt(t, e) {
2973
3087
  right: 16px;
2974
3088
  height: 36px;
2975
3089
  z-index: 3;
2976
- background-image: url('${je}');
3090
+ background-image: url('${Je}');
2977
3091
  background-repeat: repeat-x;
2978
3092
  background-size: 104px 36px;
2979
3093
  filter: url(#pluno-pa-scribble-wobble-2);
@@ -3015,7 +3129,7 @@ function rt(t, e) {
3015
3129
  height: 160px;
3016
3130
  }
3017
3131
  .pluno-pa-widget--scribble .pluno-pa-widget__empty-state--starter .pluno-pa-widget__character--empty {
3018
- margin-bottom: -42px;
3132
+ margin-bottom: 0;
3019
3133
  }
3020
3134
  .pluno-pa-widget--scribble .pluno-pa-widget__character--tool-group {
3021
3135
  width: 60px;
@@ -3220,7 +3334,7 @@ function rt(t, e) {
3220
3334
  right: 12px;
3221
3335
  height: 22px;
3222
3336
  z-index: 1;
3223
- background-image: url('${je}');
3337
+ background-image: url('${Je}');
3224
3338
  background-repeat: repeat-x;
3225
3339
  background-size: 62px 21.5px;
3226
3340
  filter: url(#pluno-pa-scribble-wobble-2);
@@ -3232,59 +3346,79 @@ function rt(t, e) {
3232
3346
  .pluno-pa-widget--scribble .pluno-pa-widget__close svg {
3233
3347
  filter: url(#pluno-pa-scribble-wobble-2);
3234
3348
  }
3235
- `, t.appendChild(n);
3349
+ `;
3350
+ if (Ho(e, n))
3351
+ return;
3352
+ const o = e.ownerDocument.createElement("style");
3353
+ o.id = Ct, o.textContent = n, e.appendChild(o), Ot(e);
3354
+ }
3355
+ function $o(e) {
3356
+ return e.getElementById(Ct) !== null || e.host instanceof HTMLElement && e.host.getAttribute(Et) === "true";
3357
+ }
3358
+ function Ot(e) {
3359
+ e.host instanceof HTMLElement && e.host.setAttribute(Et, "true");
3360
+ }
3361
+ function Ho(e, t) {
3362
+ if (typeof CSSStyleSheet > "u" || typeof CSSStyleSheet.prototype.replaceSync != "function" || !("adoptedStyleSheets" in e))
3363
+ return !1;
3364
+ try {
3365
+ const n = new CSSStyleSheet();
3366
+ return n.replaceSync(t), e.adoptedStyleSheets = [...e.adoptedStyleSheets, n], Ot(e), !0;
3367
+ } catch {
3368
+ return !1;
3369
+ }
3236
3370
  }
3237
- async function xo() {
3238
- return document.body ? document.body : await new Promise((t) => {
3239
- const e = new MutationObserver(() => {
3240
- document.body && (e.disconnect(), t(document.body));
3371
+ async function Wo() {
3372
+ return document.body ? document.body : await new Promise((e) => {
3373
+ const t = new MutationObserver(() => {
3374
+ document.body && (t.disconnect(), e(document.body));
3241
3375
  });
3242
- e.observe(document.documentElement, { childList: !0 });
3376
+ t.observe(document.documentElement, { childList: !0 });
3243
3377
  });
3244
3378
  }
3245
- function Lt(t) {
3246
- return `pluno.productAgent.widgetState.${location.origin}.${t.backendUrl ?? ""}.${t.tokenEndpoint ?? ""}.${t.position ?? ""}`;
3379
+ function Bt(e) {
3380
+ return `pluno.productAgent.widgetState.${location.origin}.${e.backendUrl ?? ""}.${e.tokenEndpoint ?? ""}.${e.position ?? ""}`;
3247
3381
  }
3248
- function vo(t) {
3382
+ function Vo(e) {
3249
3383
  try {
3250
- const e = window.localStorage.getItem(Lt(t));
3251
- if (!e)
3252
- return lt();
3253
- const n = JSON.parse(e);
3384
+ const t = window.localStorage.getItem(Bt(e));
3385
+ if (!t)
3386
+ return gt();
3387
+ const n = JSON.parse(t);
3254
3388
  return {
3255
3389
  isOpen: n.isOpen === !0,
3256
3390
  composerValue: typeof n.composerValue == "string" ? n.composerValue : "",
3257
3391
  openToolGroupKeys: Array.isArray(n.openToolGroupKeys) ? n.openToolGroupKeys.filter((o) => typeof o == "string") : [],
3258
- launcherPosition: ko(n.launcherPosition) ? n.launcherPosition : null,
3259
- seenShareCandidateIds: Array.isArray(n.seenShareCandidateIds) ? n.seenShareCandidateIds.filter((o) => typeof o == "string").slice(-gt) : [],
3392
+ launcherPosition: Yo(n.launcherPosition) ? n.launcherPosition : null,
3393
+ seenShareCandidateIds: Array.isArray(n.seenShareCandidateIds) ? n.seenShareCandidateIds.filter((o) => typeof o == "string").slice(-_t) : [],
3260
3394
  sharePromptsDisabled: n.sharePromptsDisabled === !0
3261
3395
  };
3262
3396
  } catch {
3263
- return lt();
3397
+ return gt();
3264
3398
  }
3265
3399
  }
3266
- async function yo(t) {
3267
- if (t.loadSharePromptsDisabled)
3268
- return t.loadSharePromptsDisabled();
3400
+ async function jo(e) {
3401
+ if (e.loadSharePromptsDisabled)
3402
+ return e.loadSharePromptsDisabled();
3269
3403
  try {
3270
- return window.localStorage.getItem(ht) === "true";
3404
+ return window.localStorage.getItem(xt) === "true";
3271
3405
  } catch {
3272
3406
  return !1;
3273
3407
  }
3274
3408
  }
3275
- function Co(t, e) {
3276
- if (t.persistSharePromptsDisabled) {
3277
- Promise.resolve(t.persistSharePromptsDisabled(e)).catch(() => {
3409
+ function qo(e, t) {
3410
+ if (e.persistSharePromptsDisabled) {
3411
+ Promise.resolve(e.persistSharePromptsDisabled(t)).catch(() => {
3278
3412
  });
3279
3413
  return;
3280
3414
  }
3281
3415
  try {
3282
- e && window.localStorage.setItem(ht, "true");
3416
+ t && window.localStorage.setItem(xt, "true");
3283
3417
  } catch {
3284
3418
  return;
3285
3419
  }
3286
3420
  }
3287
- function lt() {
3421
+ function gt() {
3288
3422
  return {
3289
3423
  isOpen: !1,
3290
3424
  composerValue: "",
@@ -3294,43 +3428,43 @@ function lt() {
3294
3428
  sharePromptsDisabled: !1
3295
3429
  };
3296
3430
  }
3297
- function Eo(t, e) {
3431
+ function Ko(e, t) {
3298
3432
  try {
3299
- window.localStorage.setItem(Lt(t), JSON.stringify(e));
3433
+ window.localStorage.setItem(Bt(e), JSON.stringify(t));
3300
3434
  } catch {
3301
3435
  return;
3302
3436
  }
3303
3437
  }
3304
- function ko(t) {
3305
- if (!t || typeof t != "object")
3438
+ function Yo(e) {
3439
+ if (!e || typeof e != "object")
3306
3440
  return !1;
3307
- const e = t;
3308
- return Number.isFinite(e.x) && Number.isFinite(e.y);
3309
- }
3310
- const pt = /* @__PURE__ */ new WeakSet();
3311
- function So(t) {
3312
- return Object.keys(t.dataset).some((e) => e.startsWith("pluno"));
3313
- }
3314
- function st(t) {
3315
- const e = t.pathname.split("/");
3316
- return e[e.length - 1] ?? "";
3317
- }
3318
- function Lo(t, e) {
3319
- const n = new URL(t.src, document.baseURI);
3320
- return n.href === e.href || n.pathname === e.pathname ? !0 : st(n) === st(e);
3321
- }
3322
- class O extends EventTarget {
3323
- constructor(e, n) {
3324
- super(), this.channelId = n, this.url = e, this.addPreviewListener(Qt, () => {
3325
- this.readyState = O.OPEN, this.dispatchEvent(new Event("open"));
3326
- }), this.addPreviewListener(en, (o) => {
3441
+ const t = e;
3442
+ return Number.isFinite(t.x) && Number.isFinite(t.y);
3443
+ }
3444
+ const ht = /* @__PURE__ */ new WeakSet();
3445
+ function Xo(e) {
3446
+ return Object.keys(e.dataset).some((t) => t.startsWith("pluno"));
3447
+ }
3448
+ function mt(e) {
3449
+ const t = e.pathname.split("/");
3450
+ return t[t.length - 1] ?? "";
3451
+ }
3452
+ function Zo(e, t) {
3453
+ const n = new URL(e.src, document.baseURI);
3454
+ return n.href === t.href || n.pathname === t.pathname ? !0 : mt(n) === mt(t);
3455
+ }
3456
+ class F extends EventTarget {
3457
+ constructor(t, n) {
3458
+ super(), this.channelId = n, this.url = t, this.addPreviewListener(yn, () => {
3459
+ this.readyState = F.OPEN, this.dispatchEvent(new Event("open"));
3460
+ }), this.addPreviewListener(Cn, (o) => {
3327
3461
  const a = o;
3328
3462
  this.dispatchEvent(new MessageEvent("message", { data: a.detail?.data ?? "" }));
3329
- }), this.addPreviewListener(tn, () => {
3330
- this.readyState = O.CLOSED, this.dispatchEvent(new Event("error")), this.cleanup();
3331
- }), this.addPreviewListener(nn, (o) => {
3463
+ }), this.addPreviewListener(En, () => {
3464
+ this.readyState = F.CLOSED, this.dispatchEvent(new Event("error")), this.cleanup();
3465
+ }), this.addPreviewListener(Sn, (o) => {
3332
3466
  const a = o;
3333
- this.readyState = O.CLOSED, this.dispatchEvent(
3467
+ this.readyState = F.CLOSED, this.dispatchEvent(
3334
3468
  new CloseEvent("close", {
3335
3469
  code: a.detail?.code ?? 1e3,
3336
3470
  reason: a.detail?.reason ?? "",
@@ -3338,8 +3472,8 @@ class O extends EventTarget {
3338
3472
  })
3339
3473
  ), this.cleanup();
3340
3474
  }), window.dispatchEvent(
3341
- new CustomEvent(se(Xt, this.channelId), {
3342
- detail: { socketId: this.socketId, url: e }
3475
+ new CustomEvent(ce(_n, this.channelId), {
3476
+ detail: { socketId: this.socketId, url: t }
3343
3477
  })
3344
3478
  );
3345
3479
  }
@@ -3353,80 +3487,80 @@ class O extends EventTarget {
3353
3487
  extensions = "";
3354
3488
  binaryType = "blob";
3355
3489
  bufferedAmount = 0;
3356
- readyState = O.CONNECTING;
3357
- socketId = Po();
3490
+ readyState = F.CONNECTING;
3491
+ socketId = Jo();
3358
3492
  listeners = /* @__PURE__ */ new Map();
3359
- send(e) {
3360
- if (this.readyState !== O.OPEN)
3493
+ send(t) {
3494
+ if (this.readyState !== F.OPEN)
3361
3495
  throw new DOMException("Pluno preview websocket is not open", "InvalidStateError");
3362
3496
  window.dispatchEvent(
3363
- new CustomEvent(se(Zt, this.channelId), {
3364
- detail: { socketId: this.socketId, data: typeof e == "string" ? e : String(e) }
3497
+ new CustomEvent(ce(xn, this.channelId), {
3498
+ detail: { socketId: this.socketId, data: typeof t == "string" ? t : String(t) }
3365
3499
  })
3366
3500
  );
3367
3501
  }
3368
- close(e, n) {
3369
- this.readyState !== O.CLOSED && (this.readyState = O.CLOSING, window.dispatchEvent(
3370
- new CustomEvent(se(Jt, this.channelId), {
3371
- detail: { socketId: this.socketId, code: e, reason: n }
3502
+ close(t, n) {
3503
+ this.readyState !== F.CLOSED && (this.readyState = F.CLOSING, window.dispatchEvent(
3504
+ new CustomEvent(ce(vn, this.channelId), {
3505
+ detail: { socketId: this.socketId, code: t, reason: n }
3372
3506
  })
3373
3507
  ), this.cleanup());
3374
3508
  }
3375
- addPreviewListener(e, n) {
3376
- const o = se(e, this.channelId), a = (i) => {
3509
+ addPreviewListener(t, n) {
3510
+ const o = ce(t, this.channelId), a = (i) => {
3377
3511
  i.detail?.socketId === this.socketId && n(i);
3378
3512
  };
3379
3513
  this.listeners.set(o, a), window.addEventListener(o, a);
3380
3514
  }
3381
3515
  cleanup() {
3382
- for (const [e, n] of this.listeners.entries())
3383
- window.removeEventListener(e, n);
3516
+ for (const [t, n] of this.listeners.entries())
3517
+ window.removeEventListener(t, n);
3384
3518
  this.listeners.clear();
3385
3519
  }
3386
3520
  }
3387
- function Po() {
3388
- const t = window.sessionStorage.getItem(qe);
3389
- if (t)
3390
- return t;
3391
- const e = crypto.randomUUID();
3392
- return window.sessionStorage.setItem(qe, e), e;
3521
+ function Jo() {
3522
+ const e = window.sessionStorage.getItem(Ze);
3523
+ if (e)
3524
+ return e;
3525
+ const t = crypto.randomUUID();
3526
+ return window.sessionStorage.setItem(Ze, t), t;
3393
3527
  }
3394
- function se(t, e) {
3395
- return `${t}:${e}`;
3528
+ function ce(e, t) {
3529
+ return `${e}:${t}`;
3396
3530
  }
3397
- function Ao(t) {
3398
- const e = document.currentScript;
3399
- if (e instanceof HTMLScriptElement)
3400
- return [e];
3401
- const n = new URL(t, document.baseURI).href, o = new URL(n);
3531
+ function Qo(e) {
3532
+ const t = document.currentScript;
3533
+ if (t instanceof HTMLScriptElement)
3534
+ return [t];
3535
+ const n = new URL(e, document.baseURI).href, o = new URL(n);
3402
3536
  return Array.from(document.querySelectorAll("script[type='module'][src]")).filter(
3403
- (a) => a instanceof HTMLScriptElement && So(a) && Lo(a, o)
3537
+ (a) => a instanceof HTMLScriptElement && Xo(a) && Zo(a, o)
3404
3538
  );
3405
3539
  }
3406
- function No(t) {
3407
- for (const e of Ao(t)) {
3408
- if (pt.has(e) || e.dataset.plunoAutoMount === "false")
3540
+ function ea(e) {
3541
+ for (const t of Qo(e)) {
3542
+ if (ht.has(t) || t.dataset.plunoAutoMount === "false")
3409
3543
  continue;
3410
- pt.add(e);
3411
- const n = e.dataset.plunoPreviewChannel;
3412
- Cn({
3413
- token: e.dataset.plunoToken,
3414
- tokenEndpoint: e.dataset.plunoTokenEndpoint,
3415
- backendUrl: e.dataset.plunoBackendUrl,
3416
- webSocketFactory: n ? yn(n) : void 0,
3417
- launcherLabel: e.dataset.plunoLauncherLabel,
3418
- accentColor: e.dataset.plunoAccentColor,
3419
- colorScheme: e.dataset.plunoColorScheme === "dark" ? "dark" : "light",
3420
- fontFamily: e.dataset.plunoFontFamily,
3421
- scribbleStyle: e.dataset.plunoScribbleStyle === "true",
3422
- position: e.dataset.plunoPosition === "bottom-left" ? "bottom-left" : "bottom-right"
3544
+ ht.add(t);
3545
+ const n = t.dataset.plunoPreviewChannel;
3546
+ Vn({
3547
+ token: t.dataset.plunoToken,
3548
+ tokenEndpoint: t.dataset.plunoTokenEndpoint,
3549
+ backendUrl: t.dataset.plunoBackendUrl,
3550
+ webSocketFactory: n ? Wn(n) : void 0,
3551
+ launcherLabel: t.dataset.plunoLauncherLabel,
3552
+ accentColor: t.dataset.plunoAccentColor,
3553
+ colorScheme: t.dataset.plunoColorScheme === "dark" ? "dark" : "light",
3554
+ fontFamily: t.dataset.plunoFontFamily,
3555
+ scribbleStyle: t.dataset.plunoScribbleStyle === "true",
3556
+ position: t.dataset.plunoPosition === "bottom-left" ? "bottom-left" : "bottom-right"
3423
3557
  }).catch((o) => {
3424
3558
  console.error("Failed to mount Pluno widget", o);
3425
3559
  });
3426
3560
  }
3427
3561
  }
3428
- No(import.meta.url);
3562
+ ea(import.meta.url);
3429
3563
  export {
3430
- yn as createProductAgentPreviewBridgeWebSocketFactory,
3431
- Cn as mountPlunoProductAgentWidget
3564
+ Wn as createProductAgentPreviewBridgeWebSocketFactory,
3565
+ Vn as mountPlunoProductAgentWidget
3432
3566
  };