@contember/echo 0.0.28 → 0.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/echo.es.js CHANGED
@@ -1,6 +1,6 @@
1
- import { sharedConfig as P, createRoot as Te, createRenderEffect as w, getOwner as pe, createEffect as oe, runWithOwner as Xe, createMemo as p, createSignal as M, onCleanup as K, untrack as Ie, onMount as fe, $PROXY as A, $TRACK as xe, getListener as ce, batch as Ge, createContext as Je, createComponent as g, useContext as qe, For as re, mergeProps as Z, Show as j } from "solid-js";
2
- import Qe from "html2canvas";
3
- const Ze = [
1
+ import { sharedConfig as L, createRoot as Ue, createRenderEffect as b, untrack as Ye, getOwner as De, createEffect as Y, runWithOwner as lt, createMemo as k, createSignal as A, onCleanup as ee, $PROXY as R, $TRACK as Fe, getListener as Ce, batch as ct, onMount as ye, createContext as dt, createComponent as f, useContext as ut, For as _, Show as D, mergeProps as ge, Switch as ht, Match as te } from "solid-js";
2
+ import ft from "html2canvas";
3
+ const gt = [
4
4
  "allowfullscreen",
5
5
  "async",
6
6
  "autofocus",
@@ -26,7 +26,7 @@ const Ze = [
26
26
  "reversed",
27
27
  "seamless",
28
28
  "selected"
29
- ], et = /* @__PURE__ */ new Set([
29
+ ], mt = /* @__PURE__ */ new Set([
30
30
  "className",
31
31
  "value",
32
32
  "readOnly",
@@ -34,16 +34,16 @@ const Ze = [
34
34
  "isMap",
35
35
  "noModule",
36
36
  "playsInline",
37
- ...Ze
38
- ]), tt = /* @__PURE__ */ new Set([
37
+ ...gt
38
+ ]), vt = /* @__PURE__ */ new Set([
39
39
  "innerHTML",
40
40
  "textContent",
41
41
  "innerText",
42
42
  "children"
43
- ]), nt = /* @__PURE__ */ Object.assign(/* @__PURE__ */ Object.create(null), {
43
+ ]), bt = /* @__PURE__ */ Object.assign(/* @__PURE__ */ Object.create(null), {
44
44
  className: "class",
45
45
  htmlFor: "for"
46
- }), ot = /* @__PURE__ */ Object.assign(/* @__PURE__ */ Object.create(null), {
46
+ }), wt = /* @__PURE__ */ Object.assign(/* @__PURE__ */ Object.create(null), {
47
47
  class: "className",
48
48
  formnovalidate: {
49
49
  $: "formNoValidate",
@@ -68,11 +68,11 @@ const Ze = [
68
68
  TEXTAREA: 1
69
69
  }
70
70
  });
71
- function rt(e, t) {
72
- const n = ot[e];
73
- return typeof n == "object" ? n[t] ? n.$ : void 0 : n;
71
+ function yt(e, n) {
72
+ const t = wt[e];
73
+ return typeof t == "object" ? t[n] ? t.$ : void 0 : t;
74
74
  }
75
- const it = /* @__PURE__ */ new Set([
75
+ const pt = /* @__PURE__ */ new Set([
76
76
  "beforeinput",
77
77
  "click",
78
78
  "dblclick",
@@ -96,532 +96,545 @@ const it = /* @__PURE__ */ new Set([
96
96
  "touchmove",
97
97
  "touchstart"
98
98
  ]);
99
- function at(e, t, n) {
100
- let o = n.length, i = t.length, r = o, a = 0, l = 0, s = t[i - 1].nextSibling, c = null;
101
- for (; a < i || l < r; ) {
102
- if (t[a] === n[l]) {
103
- a++, l++;
99
+ function xt(e, n, t) {
100
+ let r = t.length, a = n.length, o = r, i = 0, l = 0, s = n[a - 1].nextSibling, c = null;
101
+ for (; i < a || l < o; ) {
102
+ if (n[i] === t[l]) {
103
+ i++, l++;
104
104
  continue;
105
105
  }
106
- for (; t[i - 1] === n[r - 1]; )
107
- i--, r--;
108
- if (i === a) {
109
- const d = r < o ? l ? n[l - 1].nextSibling : n[r - l] : s;
110
- for (; l < r; ) e.insertBefore(n[l++], d);
111
- } else if (r === l)
112
- for (; a < i; )
113
- (!c || !c.has(t[a])) && t[a].remove(), a++;
114
- else if (t[a] === n[r - 1] && n[l] === t[i - 1]) {
115
- const d = t[--i].nextSibling;
116
- e.insertBefore(n[l++], t[a++].nextSibling), e.insertBefore(n[--r], d), t[i] = n[r];
106
+ for (; n[a - 1] === t[o - 1]; )
107
+ a--, o--;
108
+ if (a === i) {
109
+ const d = o < r ? l ? t[l - 1].nextSibling : t[o - l] : s;
110
+ for (; l < o; ) e.insertBefore(t[l++], d);
111
+ } else if (o === l)
112
+ for (; i < a; )
113
+ (!c || !c.has(n[i])) && n[i].remove(), i++;
114
+ else if (n[i] === t[o - 1] && t[l] === n[a - 1]) {
115
+ const d = n[--a].nextSibling;
116
+ e.insertBefore(t[l++], n[i++].nextSibling), e.insertBefore(t[--o], d), n[a] = t[o];
117
117
  } else {
118
118
  if (!c) {
119
119
  c = /* @__PURE__ */ new Map();
120
- let u = l;
121
- for (; u < r; ) c.set(n[u], u++);
120
+ let h = l;
121
+ for (; h < o; ) c.set(t[h], h++);
122
122
  }
123
- const d = c.get(t[a]);
123
+ const d = c.get(n[i]);
124
124
  if (d != null)
125
- if (l < d && d < r) {
126
- let u = a, f = 1, v;
127
- for (; ++u < i && u < r && !((v = c.get(t[u])) == null || v !== d + f); )
128
- f++;
129
- if (f > d - l) {
130
- const y = t[a];
131
- for (; l < d; ) e.insertBefore(n[l++], y);
132
- } else e.replaceChild(n[l++], t[a++]);
133
- } else a++;
134
- else t[a++].remove();
125
+ if (l < d && d < o) {
126
+ let h = i, g = 1, m;
127
+ for (; ++h < a && h < o && !((m = c.get(n[h])) == null || m !== d + g); )
128
+ g++;
129
+ if (g > d - l) {
130
+ const y = n[i];
131
+ for (; l < d; ) e.insertBefore(t[l++], y);
132
+ } else e.replaceChild(t[l++], n[i++]);
133
+ } else i++;
134
+ else n[i++].remove();
135
135
  }
136
136
  }
137
137
  }
138
- const ke = "_$DX_DELEGATE";
139
- function st(e, t, n, o = {}) {
140
- let i;
141
- return Te((r) => {
142
- i = r, t === document ? e() : m(t, e(), t.firstChild ? null : void 0, n);
143
- }, o.owner), () => {
144
- i(), t.textContent = "";
138
+ const Le = "_$DX_DELEGATE";
139
+ function kt(e, n, t, r = {}) {
140
+ let a;
141
+ return Ue((o) => {
142
+ a = o, n === document ? e() : v(n, e(), n.firstChild ? null : void 0, t);
143
+ }, r.owner), () => {
144
+ a(), n.textContent = "";
145
145
  };
146
146
  }
147
- function b(e, t, n) {
148
- let o;
149
- const i = () => {
150
- const a = document.createElement("template");
151
- return a.innerHTML = e, n ? a.content.firstChild.firstChild : a.content.firstChild;
152
- }, r = t ? () => Ie(() => document.importNode(o || (o = i()), !0)) : () => (o || (o = i())).cloneNode(!0);
153
- return r.cloneNode = r, r;
147
+ function w(e, n, t) {
148
+ let r;
149
+ const a = () => {
150
+ const i = document.createElement("template");
151
+ return i.innerHTML = e, t ? i.content.firstChild.firstChild : i.content.firstChild;
152
+ }, o = n ? () => Ye(() => document.importNode(r || (r = a()), !0)) : () => (r || (r = a())).cloneNode(!0);
153
+ return o.cloneNode = o, o;
154
154
  }
155
- function T(e, t = window.document) {
156
- const n = t[ke] || (t[ke] = /* @__PURE__ */ new Set());
157
- for (let o = 0, i = e.length; o < i; o++) {
158
- const r = e[o];
159
- n.has(r) || (n.add(r), t.addEventListener(r, ft));
155
+ function T(e, n = window.document) {
156
+ const t = n[Le] || (n[Le] = /* @__PURE__ */ new Set());
157
+ for (let r = 0, a = e.length; r < a; r++) {
158
+ const o = e[r];
159
+ t.has(o) || (t.add(o), n.addEventListener(o, zt));
160
160
  }
161
161
  }
162
- function h(e, t, n) {
163
- J(e) || (n == null ? e.removeAttribute(t) : e.setAttribute(t, n));
162
+ function u(e, n, t) {
163
+ ce(e) || (t == null ? e.removeAttribute(n) : e.setAttribute(n, t));
164
164
  }
165
- function lt(e, t, n) {
166
- J(e) || (n ? e.setAttribute(t, "") : e.removeAttribute(t));
165
+ function St(e, n, t) {
166
+ ce(e) || (t ? e.setAttribute(n, "") : e.removeAttribute(n));
167
167
  }
168
- function De(e, t) {
169
- J(e) || (t == null ? e.removeAttribute("class") : e.className = t);
168
+ function Re(e, n) {
169
+ ce(e) || (n == null ? e.removeAttribute("class") : e.className = n);
170
170
  }
171
- function _(e, t, n, o) {
172
- if (o)
173
- Array.isArray(n) ? (e[`$$${t}`] = n[0], e[`$$${t}Data`] = n[1]) : e[`$$${t}`] = n;
174
- else if (Array.isArray(n)) {
175
- const i = n[0];
176
- e.addEventListener(t, n[0] = (r) => i.call(e, n[1], r));
177
- } else e.addEventListener(t, n, typeof n != "function" && n);
171
+ function U(e, n, t, r) {
172
+ if (r)
173
+ Array.isArray(t) ? (e[`$$${n}`] = t[0], e[`$$${n}Data`] = t[1]) : e[`$$${n}`] = t;
174
+ else if (Array.isArray(t)) {
175
+ const a = t[0];
176
+ e.addEventListener(n, t[0] = (o) => a.call(e, t[1], o));
177
+ } else e.addEventListener(n, t, typeof t != "function" && t);
178
178
  }
179
- function ct(e, t, n = {}) {
180
- const o = Object.keys(t || {}), i = Object.keys(n);
181
- let r, a;
182
- for (r = 0, a = i.length; r < a; r++) {
183
- const l = i[r];
184
- !l || l === "undefined" || t[l] || (Se(e, l, !1), delete n[l]);
179
+ function Ct(e, n, t = {}) {
180
+ const r = Object.keys(n || {}), a = Object.keys(t);
181
+ let o, i;
182
+ for (o = 0, i = a.length; o < i; o++) {
183
+ const l = a[o];
184
+ !l || l === "undefined" || n[l] || (je(e, l, !1), delete t[l]);
185
185
  }
186
- for (r = 0, a = o.length; r < a; r++) {
187
- const l = o[r], s = !!t[l];
188
- !l || l === "undefined" || n[l] === s || !s || (Se(e, l, !0), n[l] = s);
186
+ for (o = 0, i = r.length; o < i; o++) {
187
+ const l = r[o], s = !!n[l];
188
+ !l || l === "undefined" || t[l] === s || !s || (je(e, l, !0), t[l] = s);
189
189
  }
190
- return n;
190
+ return t;
191
191
  }
192
- function C(e, t, n) {
193
- if (!t) return n ? h(e, "style") : t;
194
- const o = e.style;
195
- if (typeof t == "string") return o.cssText = t;
196
- typeof n == "string" && (o.cssText = n = void 0), n || (n = {}), t || (t = {});
197
- let i, r;
198
- for (r in n)
199
- t[r] == null && o.removeProperty(r), delete n[r];
200
- for (r in t)
201
- i = t[r], i !== n[r] && (o.setProperty(r, i), n[r] = i);
202
- return n;
192
+ function F(e, n, t) {
193
+ if (!n) return t ? u(e, "style") : n;
194
+ const r = e.style;
195
+ if (typeof n == "string") return r.cssText = n;
196
+ typeof t == "string" && (r.cssText = t = void 0), t || (t = {}), n || (n = {});
197
+ let a, o;
198
+ for (o in t)
199
+ n[o] == null && r.removeProperty(o), delete t[o];
200
+ for (o in n)
201
+ a = n[o], a !== t[o] && (r.setProperty(o, a), t[o] = a);
202
+ return t;
203
203
  }
204
- function dt(e, t = {}, n, o) {
205
- const i = {};
206
- return w(
207
- () => i.children = V(e, t.children, i.children)
208
- ), w(() => typeof t.ref == "function" && G(t.ref, e)), w(() => ht(e, t, n, !0, i, !0)), i;
204
+ function $t(e, n = {}, t, r) {
205
+ const a = {};
206
+ return b(
207
+ () => a.children = ae(e, n.children, a.children)
208
+ ), b(() => typeof n.ref == "function" && V(n.ref, e)), b(() => Et(e, n, t, !0, a, !0)), a;
209
209
  }
210
- function G(e, t, n) {
211
- return Ie(() => e(t, n));
210
+ function V(e, n, t) {
211
+ return Ye(() => e(n, t));
212
212
  }
213
- function m(e, t, n, o) {
214
- if (n !== void 0 && !o && (o = []), typeof t != "function") return V(e, t, o, n);
215
- w((i) => V(e, t(), i, n), o);
213
+ function v(e, n, t, r) {
214
+ if (t !== void 0 && !r && (r = []), typeof n != "function") return ae(e, n, r, t);
215
+ b((a) => ae(e, n(), a, t), r);
216
216
  }
217
- function ht(e, t, n, o, i = {}, r = !1) {
218
- t || (t = {});
219
- for (const a in i)
220
- if (!(a in t)) {
221
- if (a === "children") continue;
222
- i[a] = Ce(e, a, null, i[a], n, r, t);
217
+ function Et(e, n, t, r, a = {}, o = !1) {
218
+ n || (n = {});
219
+ for (const i in a)
220
+ if (!(i in n)) {
221
+ if (i === "children") continue;
222
+ a[i] = Ne(e, i, null, a[i], t, o, n);
223
223
  }
224
- for (const a in t) {
225
- if (a === "children")
224
+ for (const i in n) {
225
+ if (i === "children")
226
226
  continue;
227
- const l = t[a];
228
- i[a] = Ce(e, a, l, i[a], n, r, t);
227
+ const l = n[i];
228
+ a[i] = Ne(e, i, l, a[i], t, o, n);
229
229
  }
230
230
  }
231
- function J(e) {
232
- return !!P.context && !P.done && (!e || e.isConnected);
231
+ function ce(e) {
232
+ return !!L.context && !L.done && (!e || e.isConnected);
233
233
  }
234
- function ut(e) {
235
- return e.toLowerCase().replace(/-([a-z])/g, (t, n) => n.toUpperCase());
234
+ function Pt(e) {
235
+ return e.toLowerCase().replace(/-([a-z])/g, (n, t) => t.toUpperCase());
236
236
  }
237
- function Se(e, t, n) {
238
- const o = t.trim().split(/\s+/);
239
- for (let i = 0, r = o.length; i < r; i++)
240
- e.classList.toggle(o[i], n);
237
+ function je(e, n, t) {
238
+ const r = n.trim().split(/\s+/);
239
+ for (let a = 0, o = r.length; a < o; a++)
240
+ e.classList.toggle(r[a], t);
241
241
  }
242
- function Ce(e, t, n, o, i, r, a) {
243
- let l, s, c, d, u;
244
- if (t === "style") return C(e, n, o);
245
- if (t === "classList") return ct(e, n, o);
246
- if (n === o) return o;
247
- if (t === "ref")
248
- r || n(e);
249
- else if (t.slice(0, 3) === "on:") {
250
- const f = t.slice(3);
251
- o && e.removeEventListener(f, o, typeof o != "function" && o), n && e.addEventListener(f, n, typeof n != "function" && n);
252
- } else if (t.slice(0, 10) === "oncapture:") {
253
- const f = t.slice(10);
254
- o && e.removeEventListener(f, o, !0), n && e.addEventListener(f, n, !0);
255
- } else if (t.slice(0, 2) === "on") {
256
- const f = t.slice(2).toLowerCase(), v = it.has(f);
257
- if (!v && o) {
258
- const y = Array.isArray(o) ? o[0] : o;
259
- e.removeEventListener(f, y);
242
+ function Ne(e, n, t, r, a, o, i) {
243
+ let l, s, c, d, h;
244
+ if (n === "style") return F(e, t, r);
245
+ if (n === "classList") return Ct(e, t, r);
246
+ if (t === r) return r;
247
+ if (n === "ref")
248
+ o || t(e);
249
+ else if (n.slice(0, 3) === "on:") {
250
+ const g = n.slice(3);
251
+ r && e.removeEventListener(g, r, typeof r != "function" && r), t && e.addEventListener(g, t, typeof t != "function" && t);
252
+ } else if (n.slice(0, 10) === "oncapture:") {
253
+ const g = n.slice(10);
254
+ r && e.removeEventListener(g, r, !0), t && e.addEventListener(g, t, !0);
255
+ } else if (n.slice(0, 2) === "on") {
256
+ const g = n.slice(2).toLowerCase(), m = pt.has(g);
257
+ if (!m && r) {
258
+ const y = Array.isArray(r) ? r[0] : r;
259
+ e.removeEventListener(g, y);
260
260
  }
261
- (v || n) && (_(e, f, n, v), v && T([f]));
262
- } else if (t.slice(0, 5) === "attr:")
263
- h(e, t.slice(5), n);
264
- else if (t.slice(0, 5) === "bool:")
265
- lt(e, t.slice(5), n);
266
- else if ((u = t.slice(0, 5) === "prop:") || (c = tt.has(t)) || (d = rt(t, e.tagName)) || (s = et.has(t)) || (l = e.nodeName.includes("-") || "is" in a)) {
267
- if (u)
268
- t = t.slice(5), s = !0;
269
- else if (J(e)) return n;
270
- t === "class" || t === "className" ? De(e, n) : l && !s && !c ? e[ut(t)] = n : e[d || t] = n;
261
+ (m || t) && (U(e, g, t, m), m && T([g]));
262
+ } else if (n.slice(0, 5) === "attr:")
263
+ u(e, n.slice(5), t);
264
+ else if (n.slice(0, 5) === "bool:")
265
+ St(e, n.slice(5), t);
266
+ else if ((h = n.slice(0, 5) === "prop:") || (c = vt.has(n)) || (d = yt(n, e.tagName)) || (s = mt.has(n)) || (l = e.nodeName.includes("-") || "is" in i)) {
267
+ if (h)
268
+ n = n.slice(5), s = !0;
269
+ else if (ce(e)) return t;
270
+ n === "class" || n === "className" ? Re(e, t) : l && !s && !c ? e[Pt(n)] = t : e[d || n] = t;
271
271
  } else
272
- h(e, nt[t] || t, n);
273
- return n;
272
+ u(e, bt[n] || n, t);
273
+ return t;
274
274
  }
275
- function ft(e) {
276
- if (P.registry && P.events && P.events.find(([s, c]) => c === e))
275
+ function zt(e) {
276
+ if (L.registry && L.events && L.events.find(([s, c]) => c === e))
277
277
  return;
278
- let t = e.target;
279
- const n = `$$${e.type}`, o = e.target, i = e.currentTarget, r = (s) => Object.defineProperty(e, "target", {
278
+ let n = e.target;
279
+ const t = `$$${e.type}`, r = e.target, a = e.currentTarget, o = (s) => Object.defineProperty(e, "target", {
280
280
  configurable: !0,
281
281
  value: s
282
- }), a = () => {
283
- const s = t[n];
284
- if (s && !t.disabled) {
285
- const c = t[`${n}Data`];
286
- if (c !== void 0 ? s.call(t, c, e) : s.call(t, e), e.cancelBubble) return;
282
+ }), i = () => {
283
+ const s = n[t];
284
+ if (s && !n.disabled) {
285
+ const c = n[`${t}Data`];
286
+ if (c !== void 0 ? s.call(n, c, e) : s.call(n, e), e.cancelBubble) return;
287
287
  }
288
- return t.host && typeof t.host != "string" && !t.host._$host && t.contains(e.target) && r(t.host), !0;
288
+ return n.host && typeof n.host != "string" && !n.host._$host && n.contains(e.target) && o(n.host), !0;
289
289
  }, l = () => {
290
- for (; a() && (t = t._$host || t.parentNode || t.host); ) ;
290
+ for (; i() && (n = n._$host || n.parentNode || n.host); ) ;
291
291
  };
292
292
  if (Object.defineProperty(e, "currentTarget", {
293
293
  configurable: !0,
294
294
  get() {
295
- return t || document;
295
+ return n || document;
296
296
  }
297
- }), P.registry && !P.done && (P.done = _$HY.done = !0), e.composedPath) {
297
+ }), L.registry && !L.done && (L.done = _$HY.done = !0), e.composedPath) {
298
298
  const s = e.composedPath();
299
- r(s[0]);
300
- for (let c = 0; c < s.length - 2 && (t = s[c], !!a()); c++) {
301
- if (t._$host) {
302
- t = t._$host, l();
299
+ o(s[0]);
300
+ for (let c = 0; c < s.length - 2 && (n = s[c], !!i()); c++) {
301
+ if (n._$host) {
302
+ n = n._$host, l();
303
303
  break;
304
304
  }
305
- if (t.parentNode === i)
305
+ if (n.parentNode === a)
306
306
  break;
307
307
  }
308
308
  } else l();
309
- r(o);
309
+ o(r);
310
310
  }
311
- function V(e, t, n, o, i) {
312
- const r = J(e);
313
- if (r) {
314
- !n && (n = [...e.childNodes]);
311
+ function ae(e, n, t, r, a) {
312
+ const o = ce(e);
313
+ if (o) {
314
+ !t && (t = [...e.childNodes]);
315
315
  let s = [];
316
- for (let c = 0; c < n.length; c++) {
317
- const d = n[c];
316
+ for (let c = 0; c < t.length; c++) {
317
+ const d = t[c];
318
318
  d.nodeType === 8 && d.data.slice(0, 2) === "!$" ? d.remove() : s.push(d);
319
319
  }
320
- n = s;
320
+ t = s;
321
321
  }
322
- for (; typeof n == "function"; ) n = n();
323
- if (t === n) return n;
324
- const a = typeof t, l = o !== void 0;
325
- if (e = l && n[0] && n[0].parentNode || e, a === "string" || a === "number") {
326
- if (r || a === "number" && (t = t.toString(), t === n))
327
- return n;
322
+ for (; typeof t == "function"; ) t = t();
323
+ if (n === t) return t;
324
+ const i = typeof n, l = r !== void 0;
325
+ if (e = l && t[0] && t[0].parentNode || e, i === "string" || i === "number") {
326
+ if (o || i === "number" && (n = n.toString(), n === t))
327
+ return t;
328
328
  if (l) {
329
- let s = n[0];
330
- s && s.nodeType === 3 ? s.data !== t && (s.data = t) : s = document.createTextNode(t), n = N(e, n, o, s);
329
+ let s = t[0];
330
+ s && s.nodeType === 3 ? s.data !== n && (s.data = n) : s = document.createTextNode(n), t = X(e, t, r, s);
331
331
  } else
332
- n !== "" && typeof n == "string" ? n = e.firstChild.data = t : n = e.textContent = t;
333
- } else if (t == null || a === "boolean") {
334
- if (r) return n;
335
- n = N(e, n, o);
332
+ t !== "" && typeof t == "string" ? t = e.firstChild.data = n : t = e.textContent = n;
333
+ } else if (n == null || i === "boolean") {
334
+ if (o) return t;
335
+ t = X(e, t, r);
336
336
  } else {
337
- if (a === "function")
338
- return w(() => {
339
- let s = t();
337
+ if (i === "function")
338
+ return b(() => {
339
+ let s = n();
340
340
  for (; typeof s == "function"; ) s = s();
341
- n = V(e, s, n, o);
342
- }), () => n;
343
- if (Array.isArray(t)) {
344
- const s = [], c = n && Array.isArray(n);
345
- if (de(s, t, n, i))
346
- return w(() => n = V(e, s, n, o, !0)), () => n;
347
- if (r) {
348
- if (!s.length) return n;
349
- if (o === void 0) return n = [...e.childNodes];
341
+ t = ae(e, s, t, r);
342
+ }), () => t;
343
+ if (Array.isArray(n)) {
344
+ const s = [], c = t && Array.isArray(t);
345
+ if ($e(s, n, t, a))
346
+ return b(() => t = ae(e, s, t, r, !0)), () => t;
347
+ if (o) {
348
+ if (!s.length) return t;
349
+ if (r === void 0) return t = [...e.childNodes];
350
350
  let d = s[0];
351
- if (d.parentNode !== e) return n;
352
- const u = [d];
353
- for (; (d = d.nextSibling) !== o; ) u.push(d);
354
- return n = u;
351
+ if (d.parentNode !== e) return t;
352
+ const h = [d];
353
+ for (; (d = d.nextSibling) !== r; ) h.push(d);
354
+ return t = h;
355
355
  }
356
356
  if (s.length === 0) {
357
- if (n = N(e, n, o), l) return n;
358
- } else c ? n.length === 0 ? Pe(e, s, o) : at(e, n, s) : (n && N(e), Pe(e, s));
359
- n = s;
360
- } else if (t.nodeType) {
361
- if (r && t.parentNode) return n = l ? [t] : t;
362
- if (Array.isArray(n)) {
363
- if (l) return n = N(e, n, o, t);
364
- N(e, n, null, t);
365
- } else n == null || n === "" || !e.firstChild ? e.appendChild(t) : e.replaceChild(t, e.firstChild);
366
- n = t;
357
+ if (t = X(e, t, r), l) return t;
358
+ } else c ? t.length === 0 ? qe(e, s, r) : xt(e, t, s) : (t && X(e), qe(e, s));
359
+ t = s;
360
+ } else if (n.nodeType) {
361
+ if (o && n.parentNode) return t = l ? [n] : n;
362
+ if (Array.isArray(t)) {
363
+ if (l) return t = X(e, t, r, n);
364
+ X(e, t, null, n);
365
+ } else t == null || t === "" || !e.firstChild ? e.appendChild(n) : e.replaceChild(n, e.firstChild);
366
+ t = n;
367
367
  }
368
368
  }
369
- return n;
369
+ return t;
370
370
  }
371
- function de(e, t, n, o) {
372
- let i = !1;
373
- for (let r = 0, a = t.length; r < a; r++) {
374
- let l = t[r], s = n && n[e.length], c;
371
+ function $e(e, n, t, r) {
372
+ let a = !1;
373
+ for (let o = 0, i = n.length; o < i; o++) {
374
+ let l = n[o], s = t && t[e.length], c;
375
375
  if (!(l == null || l === !0 || l === !1)) if ((c = typeof l) == "object" && l.nodeType)
376
376
  e.push(l);
377
377
  else if (Array.isArray(l))
378
- i = de(e, l, s) || i;
378
+ a = $e(e, l, s) || a;
379
379
  else if (c === "function")
380
- if (o) {
380
+ if (r) {
381
381
  for (; typeof l == "function"; ) l = l();
382
- i = de(
382
+ a = $e(
383
383
  e,
384
384
  Array.isArray(l) ? l : [l],
385
385
  Array.isArray(s) ? s : [s]
386
- ) || i;
386
+ ) || a;
387
387
  } else
388
- e.push(l), i = !0;
388
+ e.push(l), a = !0;
389
389
  else {
390
390
  const d = String(l);
391
391
  s && s.nodeType === 3 && s.data === d ? e.push(s) : e.push(document.createTextNode(d));
392
392
  }
393
393
  }
394
- return i;
394
+ return a;
395
395
  }
396
- function Pe(e, t, n = null) {
397
- for (let o = 0, i = t.length; o < i; o++) e.insertBefore(t[o], n);
396
+ function qe(e, n, t = null) {
397
+ for (let r = 0, a = n.length; r < a; r++) e.insertBefore(n[r], t);
398
398
  }
399
- function N(e, t, n, o) {
400
- if (n === void 0) return e.textContent = "";
401
- const i = o || document.createTextNode("");
402
- if (t.length) {
403
- let r = !1;
404
- for (let a = t.length - 1; a >= 0; a--) {
405
- const l = t[a];
406
- if (i !== l) {
399
+ function X(e, n, t, r) {
400
+ if (t === void 0) return e.textContent = "";
401
+ const a = r || document.createTextNode("");
402
+ if (n.length) {
403
+ let o = !1;
404
+ for (let i = n.length - 1; i >= 0; i--) {
405
+ const l = n[i];
406
+ if (a !== l) {
407
407
  const s = l.parentNode === e;
408
- !r && !a ? s ? e.replaceChild(i, l) : e.insertBefore(i, n) : s && l.remove();
409
- } else r = !0;
408
+ !o && !i ? s ? e.replaceChild(a, l) : e.insertBefore(a, t) : s && l.remove();
409
+ } else o = !0;
410
410
  }
411
- } else e.insertBefore(i, n);
412
- return [i];
411
+ } else e.insertBefore(a, t);
412
+ return [a];
413
413
  }
414
- const gt = "http://www.w3.org/2000/svg";
415
- function mt(e, t = !1) {
416
- return t ? document.createElementNS(gt, e) : document.createElement(e);
414
+ const Tt = "http://www.w3.org/2000/svg";
415
+ function It(e, n = !1) {
416
+ return n ? document.createElementNS(Tt, e) : document.createElement(e);
417
417
  }
418
- function vt(e) {
419
- const { useShadow: t } = e, n = document.createTextNode(""), o = () => e.mount || document.body, i = pe();
420
- let r, a = !!P.context;
421
- return oe(
418
+ function Ot(e) {
419
+ const { useShadow: n } = e, t = document.createTextNode(""), r = () => e.mount || document.body, a = De();
420
+ let o, i = !!L.context;
421
+ return Y(
422
422
  () => {
423
- a && (pe().user = a = !1), r || (r = Xe(i, () => p(() => e.children)));
424
- const l = o();
423
+ i && (De().user = i = !1), o || (o = lt(a, () => k(() => e.children)));
424
+ const l = r();
425
425
  if (l instanceof HTMLHeadElement) {
426
- const [s, c] = M(!1), d = () => c(!0);
427
- Te((u) => m(l, () => s() ? u() : r(), null)), K(d);
426
+ const [s, c] = A(!1), d = () => c(!0);
427
+ Ue((h) => v(l, () => s() ? h() : o(), null)), ee(d);
428
428
  } else {
429
- const s = mt(e.isSVG ? "g" : "div", e.isSVG), c = t && s.attachShadow ? s.attachShadow({
429
+ const s = It(e.isSVG ? "g" : "div", e.isSVG), c = n && s.attachShadow ? s.attachShadow({
430
430
  mode: "open"
431
431
  }) : s;
432
432
  Object.defineProperty(s, "_$host", {
433
433
  get() {
434
- return n.parentNode;
434
+ return t.parentNode;
435
435
  },
436
436
  configurable: !0
437
- }), m(c, r), l.appendChild(s), e.ref && e.ref(s), K(() => l.removeChild(s));
437
+ }), v(c, o), l.appendChild(s), e.ref && e.ref(s), ee(() => l.removeChild(s));
438
438
  }
439
439
  },
440
440
  void 0,
441
441
  {
442
- render: !a
442
+ render: !i
443
443
  }
444
- ), n;
444
+ ), t;
445
445
  }
446
- const wt = (e, t) => {
447
- let n;
448
- return (...o) => {
449
- clearTimeout(n), n = window.setTimeout(() => e(...o), t);
446
+ const Mt = 5e3, At = (e) => {
447
+ let n = null;
448
+ const t = () => {
449
+ n !== null && (window.clearTimeout(n), n = null);
450
450
  };
451
- }, bt = (e, t) => {
452
- W({
453
- event: "keydown",
454
- callback: (n) => {
455
- n.key === e && t(n);
451
+ return {
452
+ show: (r) => {
453
+ t(), e.setState({
454
+ notification: {
455
+ ...r,
456
+ show: !0
457
+ }
458
+ }), n = window.setTimeout(() => {
459
+ e.setState({
460
+ notification: {
461
+ ...r,
462
+ show: !1
463
+ }
464
+ }), n = null;
465
+ }, Mt);
466
+ },
467
+ clear: () => {
468
+ t(), e.setState({
469
+ notification: {
470
+ show: !1,
471
+ type: null,
472
+ message: null
473
+ }
474
+ });
456
475
  }
457
- });
458
- }, W = (e) => {
459
- const { event: t, callback: n, onMount: o, onCleanup: i } = e, r = (a) => {
460
- n(a);
461
476
  };
462
- fe(() => {
463
- o == null || o(), window.addEventListener(t, r);
464
- }), K(() => {
465
- i == null || i(), window.removeEventListener(t, r);
466
- });
467
- }, ge = (e) => {
468
- const { target: t, options: n, callback: o, onMount: i, onCleanup: r } = e, a = new MutationObserver(o);
469
- fe(() => {
470
- i == null || i(), a.observe(t, n);
471
- }), K(() => {
472
- r == null || r(), a.disconnect();
473
- });
474
- }, yt = "echo_", F = "echo_page_state", Me = () => {
475
- window.dispatchEvent(new CustomEvent("echo-storage-change"));
476
- }, Ae = (e) => `${yt}${e}`, je = (e, t) => {
477
+ }, Ke = (e, n) => {
478
+ if (!n) return e;
479
+ const t = { ...e };
480
+ for (const r in n)
481
+ n[r] && typeof n[r] == "object" && !Array.isArray(n[r]) ? t[r] = Ke(e[r], n[r]) : t[r] = n[r];
482
+ return t;
483
+ }, Dt = (e, n) => {
484
+ let t;
485
+ return (...r) => {
486
+ clearTimeout(t), t = window.setTimeout(() => e(...r), n);
487
+ };
488
+ }, Ft = "echo_", K = "echo-pages", Ge = (e) => {
489
+ if (!e || e === "/") return "/";
490
+ const n = e.split("/");
491
+ return n.length <= 4 ? e : `/${n[1]}/.../${n[n.length - 1]}`;
492
+ }, Xe = () => {
493
+ window.dispatchEvent(new Event("echo-storage-change"));
494
+ }, Je = (e) => `${Ft}${e}`, G = (e, n) => {
477
495
  try {
478
- const n = localStorage.getItem(Ae(e));
479
- return n ? JSON.parse(n) : t;
496
+ const t = localStorage.getItem(Je(e));
497
+ return t ? JSON.parse(t) : n;
480
498
  } catch {
481
- return t;
499
+ return n;
482
500
  }
483
- }, he = (e, t) => {
501
+ }, ie = (e, n) => {
484
502
  try {
485
- localStorage.setItem(Ae(e), JSON.stringify(t));
486
- } catch (n) {
487
- console.warn("Failed to save to localStorage:", n);
503
+ localStorage.setItem(Je(e), JSON.stringify(n));
504
+ } catch (t) {
505
+ console.warn("Failed to save to localStorage:", t);
488
506
  }
489
- }, ae = () => window.location.pathname, pt = (e, t) => {
507
+ }, Ee = () => {
508
+ const e = window.location.pathname || "/", n = window.location.search;
509
+ return `${e}${n}`;
510
+ }, Lt = (e, n) => {
490
511
  try {
491
- const n = localStorage.getItem(F), o = n ? JSON.parse(n) : {};
492
- if (!t.feedback.comment && (!t.drawing.shapes || t.drawing.shapes.length === 0))
493
- delete o[e];
494
- else {
495
- const i = window.location.search || void 0, r = {
496
- feedback: {
497
- comment: t.feedback.comment
498
- },
499
- drawing: {
500
- shapes: t.drawing.shapes
501
- },
502
- latestQuery: i
503
- };
504
- o[e] = r;
505
- }
506
- localStorage.setItem(F, JSON.stringify(o)), Me();
507
- } catch (n) {
508
- console.error("Failed to save page state:", n);
512
+ if (!n.feedback.hasUserInteracted && n.drawing.shapes.length < 1) return;
513
+ const t = {
514
+ message: n.feedback.message,
515
+ customInputValues: n.feedback.customInputValues
516
+ }, r = G(K, {}), a = Ge(e);
517
+ (t || n.drawing.shapes.length > 0) && (r[a] = {
518
+ ...r[a] || {},
519
+ ...t ? { feedback: t } : {},
520
+ drawing: {
521
+ shapes: n.drawing.shapes
522
+ }
523
+ }), ie(K, r), Xe();
524
+ } catch (t) {
525
+ console.warn("Failed to save page state:", t);
509
526
  }
510
- }, me = (e) => {
527
+ }, ze = (e) => {
511
528
  try {
512
- const t = localStorage.getItem(F);
513
- return t && JSON.parse(t)[e] || null;
514
- } catch (t) {
515
- return console.error("Failed to load page state:", t), null;
529
+ return G(K, {})[e];
530
+ } catch (n) {
531
+ console.error("Failed to load page state:", n);
532
+ return;
516
533
  }
517
- }, Fe = (e) => {
534
+ }, Ze = (e) => {
518
535
  try {
519
- const t = localStorage.getItem(F);
520
- if (!t) return;
521
- const n = JSON.parse(t);
522
- delete n[e], localStorage.setItem(F, JSON.stringify(n)), Me();
523
- } catch (t) {
524
- console.error("Failed to clear page state:", t);
536
+ const n = G(K, {});
537
+ delete n[e], ie(K, n), Xe();
538
+ } catch (n) {
539
+ console.error("Failed to clear page state:", n);
525
540
  }
526
- }, Le = () => {
541
+ }, Qe = () => {
527
542
  try {
528
- const e = localStorage.getItem(F);
529
- if (!e) return 0;
530
- const t = JSON.parse(e);
531
- return Object.keys(t).length;
543
+ const e = G(K, {});
544
+ return Object.keys(e).length;
532
545
  } catch (e) {
533
546
  return console.error("Failed to get stored pages count:", e), 0;
534
547
  }
535
- }, se = () => {
548
+ }, xe = () => {
536
549
  try {
537
- const e = localStorage.getItem(F);
538
- if (!e) return [];
539
- const t = JSON.parse(e);
540
- return Object.entries(t).map(([n, o]) => ({
541
- path: n,
542
- state: o
550
+ const e = G(K, {});
551
+ return Object.entries(e).map(([n, t]) => ({
552
+ path: Ge(n),
553
+ state: t
543
554
  }));
544
555
  } catch (e) {
545
556
  return console.error("Failed to get stored pages:", e), [];
546
557
  }
547
- }, ue = Symbol("store-raw"), B = Symbol("store-node"), $ = Symbol("store-has"), Ne = Symbol("store-self");
548
- function Be(e) {
549
- let t = e[A];
550
- if (!t && (Object.defineProperty(e, A, {
551
- value: t = new Proxy(e, St)
558
+ }, jt = (e) => Dt((n, t, r = !1) => {
559
+ (!r || t.feedback.message.trim().length > 0 || t.drawing.shapes.length > 0) && (Lt(n, t), e.setState({ pagesCount: Qe() }));
560
+ }, 1e3), Pe = Symbol("store-raw"), J = Symbol("store-node"), j = Symbol("store-has"), et = Symbol("store-self");
561
+ function tt(e) {
562
+ let n = e[R];
563
+ if (!n && (Object.defineProperty(e, R, {
564
+ value: n = new Proxy(e, Vt)
552
565
  }), !Array.isArray(e))) {
553
- const n = Object.keys(e), o = Object.getOwnPropertyDescriptors(e);
554
- for (let i = 0, r = n.length; i < r; i++) {
555
- const a = n[i];
556
- o[a].get && Object.defineProperty(e, a, {
557
- enumerable: o[a].enumerable,
558
- get: o[a].get.bind(t)
566
+ const t = Object.keys(e), r = Object.getOwnPropertyDescriptors(e);
567
+ for (let a = 0, o = t.length; a < o; a++) {
568
+ const i = t[a];
569
+ r[i].get && Object.defineProperty(e, i, {
570
+ enumerable: r[i].enumerable,
571
+ get: r[i].get.bind(n)
559
572
  });
560
573
  }
561
574
  }
562
- return t;
575
+ return n;
563
576
  }
564
- function ee(e) {
565
- let t;
566
- return e != null && typeof e == "object" && (e[A] || !(t = Object.getPrototypeOf(e)) || t === Object.prototype || Array.isArray(e));
577
+ function me(e) {
578
+ let n;
579
+ return e != null && typeof e == "object" && (e[R] || !(n = Object.getPrototypeOf(e)) || n === Object.prototype || Array.isArray(e));
567
580
  }
568
- function R(e, t = /* @__PURE__ */ new Set()) {
569
- let n, o, i, r;
570
- if (n = e != null && e[ue]) return n;
571
- if (!ee(e) || t.has(e)) return e;
581
+ function se(e, n = /* @__PURE__ */ new Set()) {
582
+ let t, r, a, o;
583
+ if (t = e != null && e[Pe]) return t;
584
+ if (!me(e) || n.has(e)) return e;
572
585
  if (Array.isArray(e)) {
573
- Object.isFrozen(e) ? e = e.slice(0) : t.add(e);
574
- for (let a = 0, l = e.length; a < l; a++)
575
- i = e[a], (o = R(i, t)) !== i && (e[a] = o);
586
+ Object.isFrozen(e) ? e = e.slice(0) : n.add(e);
587
+ for (let i = 0, l = e.length; i < l; i++)
588
+ a = e[i], (r = se(a, n)) !== a && (e[i] = r);
576
589
  } else {
577
- Object.isFrozen(e) ? e = Object.assign({}, e) : t.add(e);
578
- const a = Object.keys(e), l = Object.getOwnPropertyDescriptors(e);
579
- for (let s = 0, c = a.length; s < c; s++)
580
- r = a[s], !l[r].get && (i = e[r], (o = R(i, t)) !== i && (e[r] = o));
590
+ Object.isFrozen(e) ? e = Object.assign({}, e) : n.add(e);
591
+ const i = Object.keys(e), l = Object.getOwnPropertyDescriptors(e);
592
+ for (let s = 0, c = i.length; s < c; s++)
593
+ o = i[s], !l[o].get && (a = e[o], (r = se(a, n)) !== a && (e[o] = r));
581
594
  }
582
595
  return e;
583
596
  }
584
- function te(e, t) {
585
- let n = e[t];
586
- return n || Object.defineProperty(e, t, {
587
- value: n = /* @__PURE__ */ Object.create(null)
588
- }), n;
597
+ function ve(e, n) {
598
+ let t = e[n];
599
+ return t || Object.defineProperty(e, n, {
600
+ value: t = /* @__PURE__ */ Object.create(null)
601
+ }), t;
589
602
  }
590
- function X(e, t, n) {
591
- if (e[t]) return e[t];
592
- const [o, i] = M(n, {
603
+ function le(e, n, t) {
604
+ if (e[n]) return e[n];
605
+ const [r, a] = A(t, {
593
606
  equals: !1,
594
607
  internal: !0
595
608
  });
596
- return o.$ = i, e[t] = o;
609
+ return r.$ = a, e[n] = r;
597
610
  }
598
- function xt(e, t) {
599
- const n = Reflect.getOwnPropertyDescriptor(e, t);
600
- return !n || n.get || !n.configurable || t === A || t === B || (delete n.value, delete n.writable, n.get = () => e[A][t]), n;
611
+ function Nt(e, n) {
612
+ const t = Reflect.getOwnPropertyDescriptor(e, n);
613
+ return !t || t.get || !t.configurable || n === R || n === J || (delete t.value, delete t.writable, t.get = () => e[R][n]), t;
601
614
  }
602
- function Ye(e) {
603
- ce() && X(te(e, B), Ne)();
615
+ function nt(e) {
616
+ Ce() && le(ve(e, J), et)();
604
617
  }
605
- function kt(e) {
606
- return Ye(e), Reflect.ownKeys(e);
618
+ function qt(e) {
619
+ return nt(e), Reflect.ownKeys(e);
607
620
  }
608
- const St = {
609
- get(e, t, n) {
610
- if (t === ue) return e;
611
- if (t === A) return n;
612
- if (t === xe)
613
- return Ye(e), n;
614
- const o = te(e, B), i = o[t];
615
- let r = i ? i() : e[t];
616
- if (t === B || t === $ || t === "__proto__") return r;
617
- if (!i) {
618
- const a = Object.getOwnPropertyDescriptor(e, t);
619
- ce() && (typeof r != "function" || e.hasOwnProperty(t)) && !(a && a.get) && (r = X(o, t, r)());
621
+ const Vt = {
622
+ get(e, n, t) {
623
+ if (n === Pe) return e;
624
+ if (n === R) return t;
625
+ if (n === Fe)
626
+ return nt(e), t;
627
+ const r = ve(e, J), a = r[n];
628
+ let o = a ? a() : e[n];
629
+ if (n === J || n === j || n === "__proto__") return o;
630
+ if (!a) {
631
+ const i = Object.getOwnPropertyDescriptor(e, n);
632
+ Ce() && (typeof o != "function" || e.hasOwnProperty(n)) && !(i && i.get) && (o = le(r, n, o)());
620
633
  }
621
- return ee(r) ? Be(r) : r;
634
+ return me(o) ? tt(o) : o;
622
635
  },
623
- has(e, t) {
624
- return t === ue || t === A || t === xe || t === B || t === $ || t === "__proto__" ? !0 : (ce() && X(te(e, $), t)(), t in e);
636
+ has(e, n) {
637
+ return n === Pe || n === R || n === Fe || n === J || n === j || n === "__proto__" ? !0 : (Ce() && le(ve(e, j), n)(), n in e);
625
638
  },
626
639
  set() {
627
640
  return !0;
@@ -629,75 +642,75 @@ const St = {
629
642
  deleteProperty() {
630
643
  return !0;
631
644
  },
632
- ownKeys: kt,
633
- getOwnPropertyDescriptor: xt
645
+ ownKeys: qt,
646
+ getOwnPropertyDescriptor: Nt
634
647
  };
635
- function ne(e, t, n, o = !1) {
636
- if (!o && e[t] === n) return;
637
- const i = e[t], r = e.length;
638
- n === void 0 ? (delete e[t], e[$] && e[$][t] && i !== void 0 && e[$][t].$()) : (e[t] = n, e[$] && e[$][t] && i === void 0 && e[$][t].$());
639
- let a = te(e, B), l;
640
- if ((l = X(a, t, i)) && l.$(() => n), Array.isArray(e) && e.length !== r) {
641
- for (let s = e.length; s < r; s++) (l = a[s]) && l.$();
642
- (l = X(a, "length", r)) && l.$(e.length);
648
+ function be(e, n, t, r = !1) {
649
+ if (!r && e[n] === t) return;
650
+ const a = e[n], o = e.length;
651
+ t === void 0 ? (delete e[n], e[j] && e[j][n] && a !== void 0 && e[j][n].$()) : (e[n] = t, e[j] && e[j][n] && a === void 0 && e[j][n].$());
652
+ let i = ve(e, J), l;
653
+ if ((l = le(i, n, a)) && l.$(() => t), Array.isArray(e) && e.length !== o) {
654
+ for (let s = e.length; s < o; s++) (l = i[s]) && l.$();
655
+ (l = le(i, "length", o)) && l.$(e.length);
643
656
  }
644
- (l = a[Ne]) && l.$();
657
+ (l = i[et]) && l.$();
645
658
  }
646
- function He(e, t) {
647
- const n = Object.keys(t);
648
- for (let o = 0; o < n.length; o += 1) {
649
- const i = n[o];
650
- ne(e, i, t[i]);
659
+ function rt(e, n) {
660
+ const t = Object.keys(n);
661
+ for (let r = 0; r < t.length; r += 1) {
662
+ const a = t[r];
663
+ be(e, a, n[a]);
651
664
  }
652
665
  }
653
- function Ct(e, t) {
654
- if (typeof t == "function" && (t = t(e)), t = R(t), Array.isArray(t)) {
655
- if (e === t) return;
656
- let n = 0, o = t.length;
657
- for (; n < o; n++) {
658
- const i = t[n];
659
- e[n] !== i && ne(e, n, i);
666
+ function Bt(e, n) {
667
+ if (typeof n == "function" && (n = n(e)), n = se(n), Array.isArray(n)) {
668
+ if (e === n) return;
669
+ let t = 0, r = n.length;
670
+ for (; t < r; t++) {
671
+ const a = n[t];
672
+ e[t] !== a && be(e, t, a);
660
673
  }
661
- ne(e, "length", o);
662
- } else He(e, t);
674
+ be(e, "length", r);
675
+ } else rt(e, n);
663
676
  }
664
- function U(e, t, n = []) {
665
- let o, i = e;
666
- if (t.length > 1) {
667
- o = t.shift();
668
- const a = typeof o, l = Array.isArray(e);
669
- if (Array.isArray(o)) {
670
- for (let s = 0; s < o.length; s++)
671
- U(e, [o[s]].concat(t), n);
677
+ function re(e, n, t = []) {
678
+ let r, a = e;
679
+ if (n.length > 1) {
680
+ r = n.shift();
681
+ const i = typeof r, l = Array.isArray(e);
682
+ if (Array.isArray(r)) {
683
+ for (let s = 0; s < r.length; s++)
684
+ re(e, [r[s]].concat(n), t);
672
685
  return;
673
- } else if (l && a === "function") {
686
+ } else if (l && i === "function") {
674
687
  for (let s = 0; s < e.length; s++)
675
- o(e[s], s) && U(e, [s].concat(t), n);
688
+ r(e[s], s) && re(e, [s].concat(n), t);
676
689
  return;
677
- } else if (l && a === "object") {
678
- const { from: s = 0, to: c = e.length - 1, by: d = 1 } = o;
679
- for (let u = s; u <= c; u += d)
680
- U(e, [u].concat(t), n);
690
+ } else if (l && i === "object") {
691
+ const { from: s = 0, to: c = e.length - 1, by: d = 1 } = r;
692
+ for (let h = s; h <= c; h += d)
693
+ re(e, [h].concat(n), t);
681
694
  return;
682
- } else if (t.length > 1) {
683
- U(e[o], t, [o].concat(n));
695
+ } else if (n.length > 1) {
696
+ re(e[r], n, [r].concat(t));
684
697
  return;
685
698
  }
686
- i = e[o], n = [o].concat(n);
699
+ a = e[r], t = [r].concat(t);
687
700
  }
688
- let r = t[0];
689
- typeof r == "function" && (r = r(i, n), r === i) || o === void 0 && r == null || (r = R(r), o === void 0 || ee(i) && ee(r) && !Array.isArray(r) ? He(i, r) : ne(e, o, r));
701
+ let o = n[0];
702
+ typeof o == "function" && (o = o(a, t), o === a) || r === void 0 && o == null || (o = se(o), r === void 0 || me(a) && me(o) && !Array.isArray(o) ? rt(a, o) : be(e, r, o));
690
703
  }
691
- function ve(...[e, t]) {
692
- const n = R(e || {}), o = Array.isArray(n), i = Be(n);
693
- function r(...a) {
694
- Ge(() => {
695
- o && a.length === 1 ? Ct(n, a[0]) : U(n, a);
704
+ function Te(...[e, n]) {
705
+ const t = se(e || {}), r = Array.isArray(t), a = tt(t);
706
+ function o(...i) {
707
+ ct(() => {
708
+ r && i.length === 1 ? Bt(t, i[0]) : re(t, i);
696
709
  });
697
710
  }
698
- return [i, r];
711
+ return [a, o];
699
712
  }
700
- const z = {
713
+ const B = {
701
714
  rectangle: {
702
715
  id: "rectangle",
703
716
  label: "Highlight",
@@ -718,120 +731,165 @@ const z = {
718
731
  default: 1
719
732
  }
720
733
  }
721
- }, Pt = (e) => {
722
- const t = e.replace("#", ""), n = Number.parseInt(t.slice(0, 2), 16) / 255, o = Number.parseInt(t.slice(2, 2), 16) / 255, i = Number.parseInt(t.slice(4, 2), 16) / 255;
723
- return 0.2126 * n + 0.7152 * o + 0.0722 * i;
724
- }, $t = (e) => Pt(e) < 0.5 ? "#FFFFFF" : "#000000", We = (e, t) => {
725
- if (!t) return e;
726
- const n = { ...e };
727
- for (const o in t)
728
- t[o] && typeof t[o] == "object" && !Array.isArray(t[o]) ? n[o] = We(e[o], t[o]) : n[o] = t[o];
729
- return n;
730
- };
731
- let E = [], S = null, Y = null, H = null;
732
- const le = (e, t) => (...n) => {
733
- const o = n.map((i) => typeof i == "string" ? i : i instanceof Error ? i.stack || i.message : JSON.stringify(i)).join(" ");
734
- E.push({
734
+ }, Wt = (e) => {
735
+ const n = e.replace("#", ""), t = Number.parseInt(n.slice(0, 2), 16) / 255, r = Number.parseInt(n.slice(2, 2), 16) / 255, a = Number.parseInt(n.slice(4, 2), 16) / 255;
736
+ return 0.2126 * t + 0.7152 * r + 0.0722 * a;
737
+ }, _t = (e) => Wt(e) < 0.5 ? "#FFFFFF" : "#000000";
738
+ let N = [], O = null, Z = null, Q = null;
739
+ const ke = (e, n) => (...t) => {
740
+ const r = (o) => {
741
+ if (typeof o == "string") return o;
742
+ if (o instanceof Error) return o.stack || o.message;
743
+ try {
744
+ const i = /* @__PURE__ */ new WeakSet();
745
+ return JSON.stringify(o, (s, c) => {
746
+ if (typeof c == "object" && c !== null) {
747
+ if (c instanceof Node) return `[${c.nodeName} Element]`;
748
+ if (i.has(c)) return "[Circular Reference]";
749
+ i.add(c);
750
+ }
751
+ return c;
752
+ });
753
+ } catch {
754
+ return "[Unable to stringify value]";
755
+ }
756
+ }, a = t.map(r).join(" ");
757
+ N.push({
735
758
  type: e,
736
- message: o,
759
+ message: a,
737
760
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
738
- }), E.length > 1e3 && (E = E.slice(-1e3)), t.apply(console, n);
739
- }, Et = () => {
740
- S || (S = {
761
+ }), N.length > 1e3 && (N = N.slice(-1e3)), n.apply(console, t);
762
+ }, Ht = () => {
763
+ O || (O = {
741
764
  log: console.log,
742
765
  warn: console.warn,
743
766
  error: console.error
744
- }, Y = window.onerror, H = window.onunhandledrejection, window.onerror = (e, t, n, o, i) => {
745
- const r = (i == null ? void 0 : i.stack) || (i == null ? void 0 : i.message) || e;
746
- return E.push({
767
+ }, Z = window.onerror, Q = window.onunhandledrejection, window.onerror = (e, n, t, r, a) => {
768
+ const o = (a == null ? void 0 : a.stack) || (a == null ? void 0 : a.message) || e;
769
+ return N.push({
747
770
  type: "error",
748
- message: `Uncaught Error: ${r}
749
- Location: ${t}:${n}:${o}`,
771
+ message: `Uncaught Error: ${o}
772
+ Location: ${n}:${t}:${r}`,
750
773
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
751
- }), Y ? Y(e, t, n, o, i) : !1;
774
+ }), Z ? Z(e, n, t, r, a) : !1;
752
775
  }, window.onunhandledrejection = (e) => {
753
- const t = e.reason;
754
- E.push({
776
+ const n = e.reason;
777
+ N.push({
755
778
  type: "error",
756
- message: `Unhandled Promise Rejection: ${(t == null ? void 0 : t.stack) || (t == null ? void 0 : t.message) || t}`,
779
+ message: `Unhandled Promise Rejection: ${(n == null ? void 0 : n.stack) || (n == null ? void 0 : n.message) || n}`,
757
780
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
758
- }), H && H(e);
759
- }, console.log = le("log", S.log), console.warn = le("warn", S.warn), console.error = le("error", S.error), window.addEventListener("error", (e) => {
760
- const { message: t, filename: n, lineno: o, colno: i, error: r } = e, a = (r == null ? void 0 : r.stack) || (r == null ? void 0 : r.message) || t;
761
- E.push({
781
+ }), Q && Q(e);
782
+ }, console.log = ke("log", O.log), console.warn = ke("warn", O.warn), console.error = ke("error", O.error), window.addEventListener("error", (e) => {
783
+ const { message: n, filename: t, lineno: r, colno: a, error: o } = e, i = (o == null ? void 0 : o.stack) || (o == null ? void 0 : o.message) || n;
784
+ N.push({
762
785
  type: "error",
763
- message: `Uncaught Error: ${a}
764
- Location: ${n}:${o}:${i}`,
786
+ message: `Uncaught Error: ${i}
787
+ Location: ${t}:${r}:${a}`,
765
788
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
766
789
  });
767
790
  }));
768
- }, zt = () => {
769
- S && (console.log = S.log, console.warn = S.warn, console.error = S.error, S = null), Y && (window.onerror = Y, Y = null), H && (window.onunhandledrejection = H, H = null), window.removeEventListener("error", () => {
770
- }), E = [];
771
- }, _e = () => [...E], Ot = () => {
791
+ }, Ut = () => {
792
+ O && (console.log = O.log, console.warn = O.warn, console.error = O.error, O = null), Z && (window.onerror = Z, Z = null), Q && (window.onunhandledrejection = Q, Q = null), window.removeEventListener("error", () => {
793
+ }), N = [];
794
+ }, Yt = () => [...N], Rt = () => {
772
795
  var e;
773
796
  return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || ((e = window.matchMedia) == null ? void 0 : e.call(window, "(max-width: 768px)").matches);
774
- }, q = (e, { useClientCoords: t = !1 } = {}) => {
775
- const o = typeof TouchEvent < "u" && e instanceof TouchEvent ? e.touches[0] : null;
797
+ }, he = (e, { useClientCoords: n = !1 } = {}) => {
798
+ const r = typeof TouchEvent < "u" && e instanceof TouchEvent ? e.touches[0] : null;
776
799
  return {
777
- x: o ? t ? o.clientX : o.pageX : t ? e.clientX : e.pageX,
778
- y: o ? t ? o.clientY : o.pageY : t ? e.clientY : e.pageY
800
+ x: r ? n ? r.clientX : r.pageX : n ? e.clientX : e.pageX,
801
+ y: r ? n ? r.clientY : r.pageY : n ? e.clientY : e.pageY
779
802
  };
780
- }, $e = (e, t) => {
781
- const n = t.x - e.x, o = t.y - e.y;
782
- return Math.sqrt(n * n + o * o);
783
- }, Ue = (e) => {
803
+ }, Ve = (e, n) => {
804
+ const t = n.x - e.x, r = n.y - e.y;
805
+ return Math.sqrt(t * t + r * r);
806
+ }, ot = (e) => {
784
807
  if (e.length !== 2) return null;
785
- const [t, n] = e;
808
+ const [n, t] = e;
786
809
  return {
787
- x: Math.min(t.x, n.x),
788
- y: Math.min(t.y, n.y),
789
- width: Math.abs(n.x - t.x),
790
- height: Math.abs(n.y - t.y)
810
+ x: Math.min(n.x, t.x),
811
+ y: Math.min(n.y, t.y),
812
+ width: Math.abs(t.x - n.x),
813
+ height: Math.abs(t.y - n.y)
791
814
  };
792
- }, Tt = (e) => e.length < 2 ? null : `M ${e[0].x} ${e[0].y} ${e.slice(1).map((t) => `L ${t.x} ${t.y}`).join(" ")}`, It = (e, t) => {
793
- const n = document.createElement("canvas");
794
- return n.width = e, n.height = t, n;
795
- }, Dt = (e) => e.hasAttribute("data-hide-when-drawing"), Mt = async () => {
815
+ }, Kt = (e) => e.length < 2 ? null : `M ${e[0].x} ${e[0].y} ${e.slice(1).map((n) => `L ${n.x} ${n.y}`).join(" ")}`, Ie = window.EventTarget.prototype.addEventListener, oe = window.EventTarget.prototype.removeEventListener;
816
+ let we = !1;
817
+ const Gt = (e, n, t, r) => {
818
+ Ie.call(e, n, t, r);
819
+ }, Xt = (e, n, t, r) => {
820
+ oe.call(e, n, t, r);
821
+ }, ne = /* @__PURE__ */ new WeakMap(), Jt = (e) => {
822
+ we || (we = !0, window.EventTarget.prototype.addEventListener = function(n, t, r) {
823
+ const a = Qt(t, e);
824
+ ne.has(this) || ne.set(this, /* @__PURE__ */ new Map());
825
+ const o = { listener: t }, i = ne.get(this);
826
+ i && i.set(t, o), Ie.call(this, n, a, r);
827
+ }, window.EventTarget.prototype.removeEventListener = function(n, t, r) {
828
+ const a = ne.get(this);
829
+ if (!a) {
830
+ oe.call(this, n, t, r);
831
+ return;
832
+ }
833
+ const o = a.get(t);
834
+ o ? (oe.call(this, n, o.listener, r), a.delete(t), a.size === 0 && ne.delete(this)) : oe.call(this, n, t, r);
835
+ });
836
+ }, Zt = () => {
837
+ we && (window.EventTarget.prototype.addEventListener = Ie, window.EventTarget.prototype.removeEventListener = oe, we = !1);
838
+ }, M = (e) => {
839
+ const { event: n, callback: t, onMount: r, onCleanup: a, useOriginal: o = !0 } = e;
840
+ ye(() => {
841
+ r == null || r(), o ? Gt(window, n, t) : window.addEventListener(n, t);
842
+ }), ee(() => {
843
+ a == null || a(), o ? Xt(window, n, t) : window.removeEventListener(n, t);
844
+ });
845
+ }, Oe = (e) => {
846
+ const { target: n, options: t, callback: r, onMount: a, onCleanup: o } = e, i = new MutationObserver(r);
847
+ ye(() => {
848
+ a == null || a(), i.observe(n, t);
849
+ }), ee(() => {
850
+ o == null || o(), i.disconnect();
851
+ });
852
+ }, Qt = (e, n) => function(t) {
853
+ n(t), typeof e == "function" ? e.call(this, t) : e.handleEvent(t);
854
+ }, en = (e) => e.hasAttribute("data-hide-when-drawing"), tn = async () => {
855
+ var e;
796
856
  try {
797
- const e = await Qe(document.body, {
798
- backgroundColor: null,
857
+ const n = document.createElement("style");
858
+ document.head.appendChild(n), (e = n.sheet) == null || e.insertRule("body > div:last-child img { display: inline-block; }");
859
+ const t = await ft(document.body, {
799
860
  logging: !1,
800
861
  useCORS: !0,
801
- scale: 1,
862
+ scale: window.devicePixelRatio,
802
863
  allowTaint: !0,
803
- foreignObjectRendering: !0,
804
- ignoreElements: Dt
805
- }), t = It(e.width, e.height), n = t.getContext("2d");
806
- if (!n)
807
- throw new Error("Failed to get canvas context");
808
- return n.drawImage(e, 0, 0), t.toDataURL();
809
- } catch (e) {
810
- console.error("Failed to capture screenshot:", e);
864
+ ignoreElements: (r) => en(r)
865
+ });
866
+ return n.remove(), t.toDataURL("image/png");
867
+ } catch (n) {
868
+ console.error("Failed to capture screenshot:", n);
811
869
  return;
812
870
  }
813
- }, At = (e, t, n) => {
814
- let o = `M0 0 H${e.width} V${e.height} H0 Z`;
815
- if (t.length === 2) {
816
- const [i, r] = t;
817
- o += ` M${i.x} ${i.y} h${r.x - i.x} v${r.y - i.y} h${i.x - r.x} v${i.y - r.y}`;
871
+ }, nn = (e, n, t) => {
872
+ let r = `M0 0 H${e.width} V${e.height} H0 Z`;
873
+ if (n.length === 2) {
874
+ const [a, o] = n;
875
+ r += ` M${a.x} ${a.y} h${o.x - a.x} v${o.y - a.y} h${a.x - o.x} v${a.y - o.y}`;
818
876
  }
819
- for (const i of n)
820
- if (i.type === "rectangle") {
821
- const [r, a] = i.points;
822
- o += ` M${r.x} ${r.y} h${a.x - r.x} v${a.y - r.y} h${r.x - a.x} v${r.y - a.y}`;
877
+ for (const a of t)
878
+ if (a.type === "rectangle") {
879
+ const [o, i] = a.points;
880
+ r += ` M${o.x} ${o.y} h${i.x - o.x} v${i.y - o.y} h${o.x - i.x} v${o.y - i.y}`;
823
881
  }
824
- return o;
825
- }, jt = (e) => {
882
+ return r;
883
+ }, rn = (e) => {
826
884
  if (typeof e != "object" || e === null)
827
885
  throw new Error("Echo initialization failed: options must be an object");
828
886
  if (typeof e.onSubmit != "function")
829
887
  throw new Error("Echo initialization failed: onSubmit must be a function");
830
888
  if (e.primaryColor && !/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(e.primaryColor))
831
889
  throw new Error("Echo initialization failed: primaryColor must be a valid hex color");
832
- }, Ee = 5, ze = (e, t) => z[e].getCursor(t), Ft = (e, t, n) => {
890
+ }, Be = 5, We = (e, n) => B[e].getCursor(n), on = (e, n, t) => {
833
891
  var l, s;
834
- const [o, i] = ve({
892
+ const [r, a] = Te({
835
893
  isDrawing: !1,
836
894
  currentPoints: [],
837
895
  selectedShapeId: null,
@@ -839,124 +897,124 @@ Location: ${n}:${o}:${i}`,
839
897
  showTooltip: !0,
840
898
  mousePosition: { x: 0, y: 0 },
841
899
  selectedColor: e.primaryColor,
842
- shapes: ((s = (l = me(t)) == null ? void 0 : l.drawing) == null ? void 0 : s.shapes) || [],
900
+ shapes: ((s = (l = ze(n)) == null ? void 0 : l.drawing) == null ? void 0 : s.shapes) || [],
843
901
  hasDrawn: !1,
844
902
  isDragging: !1,
845
903
  dragStartPos: null,
846
904
  initialClickPos: null,
847
905
  dragOffset: null,
848
- cursor: ze("rectangle", e.primaryColor)
849
- }), r = (c, d = !1) => {
906
+ cursor: We("rectangle", e.primaryColor)
907
+ }), o = (c, d = !1) => {
850
908
  if (c.selectedTool || c.selectedColor) {
851
- const u = c.selectedTool || o.selectedTool, f = c.selectedColor || o.selectedColor;
852
- c.cursor = ze(u, f);
909
+ const h = c.selectedTool || r.selectedTool, g = c.selectedColor || r.selectedColor;
910
+ c.cursor = We(h, g);
853
911
  }
854
- i(c), n == null || n(c, d);
855
- }, a = {
912
+ a(c), t == null || t(c, d);
913
+ }, i = {
856
914
  startDrawing: (c) => {
857
- r({
915
+ o({
858
916
  isDrawing: !0,
859
917
  currentPoints: [c],
860
918
  selectedShapeId: null
861
919
  });
862
920
  },
863
921
  updateDrawing: (c) => {
864
- o.selectedTool === "rectangle" ? r({ currentPoints: [o.currentPoints[0], c] }) : o.selectedTool === "path" && r({
865
- currentPoints: [...o.currentPoints, c]
922
+ r.selectedTool === "rectangle" ? o({ currentPoints: [r.currentPoints[0], c] }) : r.selectedTool === "path" && o({
923
+ currentPoints: [...r.currentPoints, c]
866
924
  });
867
925
  },
868
926
  finishDrawing: () => {
869
- if (o.currentPoints.length >= 2) {
927
+ if (r.currentPoints.length >= 2) {
870
928
  const c = {
871
929
  id: Math.random().toString(36).substring(2),
872
- type: o.selectedTool,
873
- color: o.selectedColor,
874
- points: o.currentPoints
930
+ type: r.selectedTool,
931
+ color: r.selectedColor,
932
+ points: r.currentPoints
875
933
  };
876
- r({ shapes: [...o.shapes, c] });
934
+ o({ shapes: [...r.shapes, c] });
877
935
  }
878
- r({ isDrawing: !1, currentPoints: [] });
936
+ o({ isDrawing: !1, currentPoints: [] });
879
937
  },
880
938
  handleShapeClick: (c) => {
881
939
  },
882
940
  handleStart: (c) => {
883
941
  if (c instanceof MouseEvent) {
884
- const u = c.target;
885
- if (!u.classList.contains("echo-drawing-layer-mask") && !u.classList.contains("echo-shape"))
942
+ const h = c.target;
943
+ if (!h.classList.contains("echo-drawing-layer-mask") && !h.classList.contains("echo-shape"))
886
944
  return;
887
945
  }
888
- const d = q(c);
946
+ const d = he(c);
889
947
  if (c.target instanceof SVGElement && c.target.classList.contains("echo-shape")) {
890
- const u = c.target.dataset.shapeId;
891
- if (u && o.selectedShapeId === u) {
892
- const f = o.shapes.find((v) => v.id === u);
893
- if (f) {
894
- a.startDrag(d), a.updateDragOffset(f, d);
948
+ const h = c.target.dataset.shapeId;
949
+ if (h && r.selectedShapeId === h) {
950
+ const g = r.shapes.find((m) => m.id === h);
951
+ if (g) {
952
+ i.startDrag(d), i.updateDragOffset(g, d);
895
953
  return;
896
954
  }
897
955
  }
898
956
  }
899
- a.setInitialClick(d);
957
+ i.setInitialClick(d);
900
958
  },
901
959
  handleMove: (c) => {
902
- const d = q(c, { useClientCoords: !0 }), u = q(c);
903
- if (r({ mousePosition: d }), o.isDragging && o.selectedShapeId && o.dragStartPos && o.shapes.find((v) => v.id === o.selectedShapeId)) {
904
- const v = u.x - o.dragStartPos.x, y = u.y - o.dragStartPos.y, k = o.shapes.map((I) => I.id === o.selectedShapeId ? {
905
- ...I,
906
- points: I.points.map((L) => ({
907
- x: L.x + v,
908
- y: L.y + y
960
+ const d = he(c, { useClientCoords: !0 }), h = he(c);
961
+ if (o({ mousePosition: d }), r.isDragging && r.selectedShapeId && r.dragStartPos && r.shapes.find((m) => m.id === r.selectedShapeId)) {
962
+ const m = h.x - r.dragStartPos.x, y = h.y - r.dragStartPos.y, E = r.shapes.map((S) => S.id === r.selectedShapeId ? {
963
+ ...S,
964
+ points: S.points.map((C) => ({
965
+ x: C.x + m,
966
+ y: C.y + y
909
967
  }))
910
- } : I);
911
- r({ shapes: k }), a.startDrag(u);
968
+ } : S);
969
+ o({ shapes: E }), i.startDrag(h);
912
970
  return;
913
971
  }
914
- if (o.initialClickPos && !o.isDrawing) {
915
- $e(o.initialClickPos, u) >= Ee && a.startDrawing(o.initialClickPos);
972
+ if (r.initialClickPos && !r.isDrawing) {
973
+ Ve(r.initialClickPos, h) >= Be && i.startDrawing(r.initialClickPos);
916
974
  return;
917
975
  }
918
- o.isDrawing && a.updateDrawing(u);
976
+ r.isDrawing && i.updateDrawing(h);
919
977
  },
920
978
  handleEnd: (c) => {
921
- if (o.isDragging) {
922
- a.stopDrag();
979
+ if (r.isDragging) {
980
+ i.stopDrag();
923
981
  return;
924
982
  }
925
- if (o.initialClickPos && !o.isDrawing) {
926
- const d = q(c);
927
- if ($e(o.initialClickPos, d) < Ee && c.target instanceof SVGElement && c.target.classList.contains("echo-shape")) {
928
- const f = c.target.dataset.shapeId;
929
- f && r({ selectedShapeId: f });
983
+ if (r.initialClickPos && !r.isDrawing) {
984
+ const d = he(c);
985
+ if (Ve(r.initialClickPos, d) < Be && c.target instanceof SVGElement && c.target.classList.contains("echo-shape")) {
986
+ const g = c.target.dataset.shapeId;
987
+ g && o({ selectedShapeId: g });
930
988
  }
931
989
  }
932
- a.setInitialClick(null), a.finishDrawing();
990
+ i.setInitialClick(null), i.finishDrawing();
933
991
  },
934
992
  handleEnter: (c) => {
935
- c.target === c.currentTarget && !o.hasDrawn && r({ showTooltip: !0 });
993
+ c.target === c.currentTarget && !r.hasDrawn && o({ showTooltip: !0 });
936
994
  },
937
995
  handleLeave: (c) => {
938
- c.target === c.currentTarget && r({ showTooltip: !1 });
996
+ c.target === c.currentTarget && o({ showTooltip: !1 });
939
997
  },
940
998
  startDrag: (c) => {
941
- r({
999
+ o({
942
1000
  isDragging: !0,
943
1001
  dragStartPos: c
944
1002
  });
945
1003
  },
946
1004
  stopDrag: () => {
947
- r({
1005
+ o({
948
1006
  isDragging: !1,
949
1007
  dragStartPos: null,
950
1008
  dragOffset: null
951
1009
  });
952
1010
  },
953
1011
  setInitialClick: (c) => {
954
- r({
1012
+ o({
955
1013
  initialClickPos: c
956
1014
  });
957
1015
  },
958
1016
  updateDragOffset: (c, d) => {
959
- r({
1017
+ o({
960
1018
  dragOffset: {
961
1019
  x: d.x - c.points[0].x,
962
1020
  y: d.y - c.points[0].y
@@ -965,26 +1023,35 @@ Location: ${n}:${o}:${i}`,
965
1023
  }
966
1024
  };
967
1025
  return {
968
- state: o,
969
- setState: r,
970
- methods: a
1026
+ state: r,
1027
+ setState: o,
1028
+ methods: i
971
1029
  };
972
- }, Lt = (e, t, n) => {
973
- var a, l;
974
- const [o, i] = ve({
975
- comment: ((l = (a = me(t)) == null ? void 0 : a.feedback) == null ? void 0 : l.comment) || "",
1030
+ }, an = (e, n, t, r) => {
1031
+ var h;
1032
+ const a = (r == null ? void 0 : r.reduce(
1033
+ (g, m) => (g[m.id] = m.defaultValue ?? (m.type === "checkbox" ? [] : ""), g),
1034
+ {}
1035
+ )) || {}, o = ze(n), i = (o == null ? void 0 : o.feedback.customInputValues) || {}, l = {
1036
+ ...a,
1037
+ ...i
1038
+ }, [s, c] = Te({
1039
+ message: ((h = o == null ? void 0 : o.feedback) == null ? void 0 : h.message) || "",
976
1040
  screenshot: void 0,
977
1041
  isCapturing: !1,
978
- isMinimized: !1
1042
+ isMinimized: !1,
1043
+ customInputValues: l,
1044
+ hasUserInteracted: !1
979
1045
  });
980
1046
  return {
981
- state: o,
982
- setState: (s, c = !1) => {
983
- i(s), n == null || n(s, c);
1047
+ state: s,
1048
+ setState: (g, m = !1) => {
1049
+ const y = "isCapturing" in g || "isMinimized" in g || m;
1050
+ !y && !s.hasUserInteracted && c({ hasUserInteracted: !0 }), c(g), (s.hasUserInteracted || y) && (t == null || t(g, m));
984
1051
  }
985
1052
  };
986
- }, Nt = (e, t) => {
987
- const [n, o] = ve({
1053
+ }, sn = (e, n) => {
1054
+ const [t, r] = Te({
988
1055
  text: e.textConfig,
989
1056
  isOpen: !1,
990
1057
  primaryColor: e.primaryColor,
@@ -998,125 +1065,235 @@ Location: ${n}:${o}:${i}`,
998
1065
  height: document.documentElement.scrollHeight
999
1066
  },
1000
1067
  isStoredFeedbackOpen: !1,
1001
- pagesCount: Le(),
1002
- welcomeMessageIsClosing: !1
1068
+ pagesCount: Qe(),
1069
+ welcomeMessageIsClosing: !1,
1070
+ position: e.position,
1071
+ customInputs: e.customInputs
1003
1072
  });
1004
1073
  return {
1005
- state: n,
1006
- setState: o
1074
+ state: t,
1075
+ setState: r
1007
1076
  };
1008
- }, Bt = (e) => {
1009
- let t = ae();
1010
- const n = wt((c, d = !1) => {
1011
- (d || o.state.comment.trim().length > 0 || i.state.shapes.length > 0) && (pt(c, {
1012
- feedback: o.state,
1013
- drawing: i.state
1014
- }), r.setState({ pagesCount: Le() }));
1015
- }, 1e3), o = Lt(e, t, (c, d) => {
1016
- n(t, d);
1017
- }), i = Ft(e, t, (c, d) => {
1018
- n(t, d);
1019
- }), r = Nt(e), a = () => {
1020
- const c = ae();
1021
- if (c !== t) {
1022
- t = c;
1023
- const d = me(t);
1024
- o.setState({
1025
- comment: (d == null ? void 0 : d.feedback.comment) || ""
1026
- }), i.setState({
1027
- shapes: (d == null ? void 0 : d.drawing.shapes) || []
1028
- });
1029
- }
1030
- };
1031
- W({
1032
- event: "popstate",
1033
- callback: a
1034
- }), ge({
1035
- target: document.documentElement,
1036
- options: {
1037
- childList: !0,
1038
- subtree: !0
1077
+ }, _e = (e) => {
1078
+ var n;
1079
+ return ((n = e.customInputs) == null ? void 0 : n.reduce(
1080
+ (t, r) => (t[r.id] = r.defaultValue ?? (r.type === "checkbox" ? [] : ""), t),
1081
+ {}
1082
+ )) || {};
1083
+ }, ln = (e) => {
1084
+ let n = Ee();
1085
+ const t = sn(e), r = jt(t), a = At(t), o = an(
1086
+ e,
1087
+ n,
1088
+ (c, d) => {
1089
+ r(
1090
+ n,
1091
+ {
1092
+ feedback: { ...o.state, ...c },
1093
+ drawing: i.state
1094
+ },
1095
+ d
1096
+ );
1039
1097
  },
1040
- callback: () => {
1041
- ae() !== t && a();
1042
- }
1043
- });
1044
- const l = () => {
1045
- Fe(t), o.setState(
1098
+ e.customInputs
1099
+ ), i = on(e, n, (c, d) => {
1100
+ r(
1101
+ n,
1046
1102
  {
1047
- comment: "",
1103
+ feedback: o.state,
1104
+ drawing: { ...i.state, ...c }
1105
+ },
1106
+ d
1107
+ );
1108
+ }), l = (c) => {
1109
+ n = c;
1110
+ const d = ze(n), h = {
1111
+ ..._e(e),
1112
+ ...d == null ? void 0 : d.feedback.customInputValues
1113
+ };
1114
+ o.setState({
1115
+ message: (d == null ? void 0 : d.feedback.message) || "",
1116
+ customInputValues: h,
1117
+ hasUserInteracted: !1
1118
+ }), i.setState({
1119
+ shapes: (d == null ? void 0 : d.drawing.shapes) || []
1120
+ });
1121
+ }, s = () => {
1122
+ Ze(n);
1123
+ const c = {
1124
+ feedback: {
1125
+ message: "",
1048
1126
  screenshot: void 0,
1049
1127
  isCapturing: !1,
1050
- isMinimized: !1
1128
+ isMinimized: !1,
1129
+ hasUserInteracted: !1,
1130
+ customInputValues: _e(e)
1051
1131
  },
1052
- !0
1053
- ), i.setState(
1054
- {
1132
+ drawing: {
1055
1133
  isDrawing: !1,
1056
1134
  currentPoints: [],
1057
1135
  shapes: [],
1058
1136
  selectedShapeId: null,
1059
1137
  selectedTool: "rectangle",
1138
+ selectedColor: e.primaryColor,
1060
1139
  showTooltip: !0,
1061
1140
  mousePosition: { x: 0, y: 0 },
1062
1141
  hasDrawn: !1,
1063
- selectedColor: e.primaryColor,
1064
1142
  isDragging: !1,
1065
1143
  dragStartPos: null,
1066
1144
  initialClickPos: null,
1067
- dragOffset: null
1145
+ dragOffset: null,
1146
+ cursor: i.state.cursor
1068
1147
  },
1069
- !0
1070
- ), r.setState({
1071
- isOpen: !1
1072
- });
1073
- }, s = (c) => {
1074
- r.setState({ notification: { show: !0, type: c.type, message: c.message } }), setTimeout(() => {
1075
- r.setState({ notification: { show: !1, type: c.type, message: c.message } });
1076
- }, 5e3);
1148
+ widget: {
1149
+ isOpen: !1
1150
+ }
1151
+ };
1152
+ o.setState(c.feedback, !0), i.setState(c.drawing, !0), t.setState(c.widget);
1077
1153
  };
1078
1154
  return {
1079
1155
  feedback: o,
1080
1156
  drawing: i,
1081
- widget: r,
1157
+ widget: t,
1082
1158
  methods: {
1083
- reset: l,
1159
+ reset: s,
1160
+ handlePageChange: l,
1084
1161
  submit: async (c) => {
1085
- r.setState({ isOpen: !1 });
1162
+ t.setState({ isOpen: !1 });
1086
1163
  try {
1087
1164
  const d = await e.onSubmit(c);
1088
- return d instanceof Response && !d.ok ? (s({ show: !0, type: "error", message: "Submission failed" }), d) : (l(), s({ show: !0, type: "success", message: "Feedback submitted" }), d);
1165
+ return d instanceof Response && !d.ok ? (a.show({ type: "error", message: "Submission failed" }), d) : (s(), a.show({ type: "success", message: "Feedback submitted" }), d);
1089
1166
  } catch {
1090
- s({ show: !0, type: "error", message: "Submission failed" });
1167
+ a.show({ type: "error", message: "Submission failed" });
1091
1168
  }
1092
1169
  }
1093
1170
  }
1094
1171
  };
1095
- }, Ke = Je(), Yt = (e) => {
1096
- const t = Bt({
1172
+ }, at = dt(), cn = (e) => {
1173
+ const n = ln({
1097
1174
  primaryColor: e.primaryColor,
1098
1175
  onSubmit: e.onSubmit,
1099
1176
  textConfig: e.textConfig,
1100
- position: e.position
1177
+ position: e.position,
1178
+ customInputs: e.customInputs
1101
1179
  });
1102
- return g(Ke.Provider, {
1103
- value: t,
1180
+ return f(at.Provider, {
1181
+ value: n,
1104
1182
  get children() {
1105
1183
  return e.children;
1106
1184
  }
1107
1185
  });
1108
- }, x = () => {
1109
- const e = qe(Ke);
1186
+ }, $ = () => {
1187
+ const e = ut(at);
1110
1188
  if (!e)
1111
1189
  throw new Error("useEchoStore must be used within EchoProvider");
1112
1190
  return e;
1113
- }, Ht = '*,*:before,*:after{box-sizing:border-box}.echo-root{position:absolute;top:0;left:0;z-index:var(--z-root);isolation:isolate;pointer-events:none;--z-root: 999999;--z-launcher: 2;--z-overlay: 1;--z-drawing-toolbar: 3;--z-drawing-tooltip: 3;--z-shape-actions: 3;--z-notification: 2;--z-welcome-message: 2;--z-widget-button: 2;--z-feedback-form: 4;--primary-color: #000;--primary-text-color: #fff;--error-color: #f44336;--success-color: var(--primary-color);--text-dark: #1a1a1a;--text-medium: #333;--text-light: #666;--text-lighter: #999;--border-color: rgba(0, 0, 0, .1);--border-color-light: rgba(0, 0, 0, .05);--border-color-medium: rgba(0, 0, 0, .08);--primary-color-lighter: color-mix(in srgb, var(--primary-color) 100%, white 40%);--primary-color-lightest: color-mix(in srgb, var(--primary-color) 7%, white 100%);--hover-color: color-mix(in srgb, var(--primary-color) 80%, #fff);--shadow-color-dark: rgba(0, 0, 0, .6);--shadow-color-light: rgba(255, 255, 255, .1);--shadow-color-medium: rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px;--shadow-md: 0 4px 10px;--shadow-lg: 0 10px 20px;--shadow-black-sm: var(--shadow-sm) rgba(0, 0, 0, .5);--shadow-black-md: var(--shadow-md) rgba(0, 0, 0, .5);--shadow-black-lg: var(--shadow-lg) rgba(0, 0, 0, .5);--shadow-black-lightened-sm: var(--shadow-sm) var(--shadow-color-medium);--shadow-black-lightened-md: var(--shadow-md) var(--shadow-color-medium);--shadow-black-lightened-lg: var(--shadow-lg) var(--shadow-color-medium);--shadow-primary-sm: var(--shadow-sm) color-mix(in srgb, var(--primary-color) 60%, transparent 80%);--shadow-primary-md: var(--shadow-md) color-mix(in srgb, var(--primary-color) 50%, transparent 80%);--shadow-primary-lg: var(--shadow-lg) color-mix(in srgb, var(--primary-color) 40%, transparent 80%);--shadow-primary-lighter-sm: var(--shadow-sm) color-mix(in srgb, var(--primary-color-lighter) 70%, transparent 80%);--shadow-primary-lighter-md: var(--shadow-md) color-mix(in srgb, var(--primary-color-lighter) 60%, transparent 80%);--shadow-primary-lighter-lg: var(--shadow-lg) color-mix(in srgb, var(--primary-color-lighter) 50%, transparent 80%);--shadow-primary-lightest-sm: var(--shadow-sm) color-mix(in srgb, var(--primary-color-lightest) 70%, transparent 80%);--shadow-primary-lightest-md: var(--shadow-md) color-mix(in srgb, var(--primary-color-lightest) 60%, transparent 80%);--shadow-primary-lightest-lg: var(--shadow-lg) color-mix(in srgb, var(--primary-color-lightest) 50%, transparent 80%);--shadow-combined-sm: var(--shadow-primary-sm), var(--shadow-black-lightened-sm);--shadow-combined-md: var(--shadow-primary-md), var(--shadow-black-lightened-md);--shadow-combined-lg: var(--shadow-primary-lg), var(--shadow-black-lightened-lg);--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-lg: 16px;--spacing-xl: 20px;--spacing-2xl: 24px;--spacing-3xl: 32px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--font-xs: .8125rem;--font-sm: .875rem;--font-base: .9375rem;--font-md: 1rem;--font-lg: 1.125rem;--duration-fast: .1s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .4s;--duration-slowest: .6s;--ease-default: ease;--ease-in-out: ease-in-out;--ease-bounce: cubic-bezier(.34, 1.56, .64, 1);--ease-smooth: cubic-bezier(.4, 0, .2, 1);--ease-spring: cubic-bezier(.16, 1, .3, 1)}.echo-stored-feedback{position:absolute;display:flex;flex-direction:column;bottom:calc(100% + var(--spacing-lg));right:0;width:320px;background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-black-lightened-lg);animation:slideUpFade var(--duration-base) var(--ease-smooth);z-index:calc(var(--z-widget-button) + 1);transform-origin:bottom right;transition:all var(--duration-base) var(--ease-smooth)}.echo-stored-feedback-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg)}.echo-stored-feedback-header h3{margin:0;font-size:var(--font-md);font-weight:600}.echo-stored-feedback-list{max-height:400px;overflow-y:auto;border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.echo-stored-feedback-item{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color-light);transition:all var(--duration-base) var(--ease-smooth);background:#fff;position:relative}.echo-stored-feedback-item:hover{background:var(--primary-color-lightest)}.echo-stored-feedback-item-current{background:var(--primary-color-lightest);padding-left:calc(var(--spacing-lg) - 3px)}.echo-stored-feedback-item-current:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--primary-color);border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.echo-stored-feedback-item:last-child{border-bottom:none;border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.echo-stored-feedback-item:last-child.echo-stored-feedback-item-current:before{border-bottom-left-radius:var(--radius-lg)}.echo-stored-feedback-content{flex:1;min-width:0;margin-right:var(--spacing-md)}.echo-stored-feedback-path{font-size:var(--font-sm);font-weight:500;color:var(--text-medium);margin-bottom:var(--spacing-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.echo-stored-feedback-preview{font-size:var(--font-xs);color:var(--text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.echo-stored-feedback-actions{display:flex;align-items:center;gap:var(--spacing-sm)}.echo-stored-feedback-link{color:var(--text-light)}.echo-stored-feedback-link:hover{color:var(--primary-color)}.echo-stored-feedback-delete{color:var(--text-light);font-size:var(--font-xs);padding:var(--spacing-xs) var(--spacing-md)}.echo-stored-feedback-delete:hover{color:var(--error-color);background:color-mix(in srgb,var(--error-color) 10%,transparent)}.echo-stored-feedback-empty{padding:var(--spacing-3xl) var(--spacing-lg);text-align:center;color:var(--text-light);font-size:var(--font-sm);border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.echo-launcher{position:fixed;z-index:var(--z-launcher);bottom:var(--spacing-xl);right:var(--spacing-xl)}.echo-overlay{position:absolute;z-index:var(--z-overlay);top:0;left:0;right:0;bottom:0;border:3px solid var(--primary-color)}[data-hidden=true],[data-hidden=false]{transition:opacity var(--duration-slow) var(--ease-in-out),visibility var(--duration-slow) var(--ease-in-out)}[data-hidden=true]{opacity:0;visibility:hidden;pointer-events:none}[data-hidden=false]{opacity:1;visibility:visible;pointer-events:auto;user-select:none;-webkit-user-select:none}.echo-launcher-button{z-index:var(--z-widget-button);position:relative;display:flex;align-items:center;justify-content:center;cursor:pointer;background:radial-gradient(circle at 40% 40%,var(--primary-color) 0%,var(--primary-color-lighter) 65%,var(--primary-color-lighter) 100%);border:none;border-radius:var(--radius-full);width:48px;height:48px;box-shadow:var(--shadow-black-md);transition:all var(--duration-slow) var(--ease-default),left var(--duration-slower) var(--ease-smooth),opacity var(--duration-slow) var(--ease-in-out)}.echo-launcher-button:hover{box-shadow:var(--shadow-black-lg);transform:translateY(-2px)}.echo-launcher-button:active{transform:scale(.95)}.echo-launcher-button-count{position:absolute;top:calc(-1 * var(--spacing-xs));right:calc(-1 * var(--spacing-xs));background:var(--primary-color-lightest);color:var(--primary-color-lighter);border-radius:var(--radius-md);min-width:20px;height:20px;display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-black-sm);padding:0 var(--spacing-xs);font-weight:600;pointer-events:auto;cursor:pointer;transform-origin:center center;animation:popIn var(--duration-slow) var(--ease-bounce);transition:transform var(--duration-base) var(--ease-default)}.echo-launcher-button-count:hover{transform:scale(1.1)}.echo-feedback{position:fixed;bottom:var(--spacing-xl);right:var(--spacing-xl);width:min(calc(100vw - var(--spacing-2xl)),24rem);z-index:var(--z-feedback-form);box-shadow:var(--shadow-black-lightened-lg);display:flex;flex-direction:column;gap:var(--spacing-lg);background:#fff;border-radius:var(--radius-lg);will-change:transform;padding:var(--spacing-lg)}.echo-feedback[data-minimized=true]{transition:transform .4s var(--ease-default),box-shadow .4s var(--ease-default);transform:translate(calc(100% - 48px),calc(100% - 48px));box-shadow:0 8px 16px #0003}.echo-feedback[data-minimized=true]:hover{cursor:pointer;transform:translate(calc(100% - 48px),calc(100% - 48px)) rotate(-2deg) scale(1.1);box-shadow:0 12px 24px #00000040}.echo-feedback[data-minimized=false]{transition:transform .4s var(--ease-smooth),box-shadow .4s var(--ease-smooth);transform:translate(0)}.echo-feedback[style*=transition]{pointer-events:none}.echo-feedback-content{display:flex;flex-direction:column;gap:var(--spacing-lg)}.echo-feedback-header{display:flex;justify-content:space-between;align-items:center}.echo-feedback-title{font-size:var(--font-lg);font-weight:600;color:var(--text-dark);margin:0}.echo-feedback-header-actions{display:flex;gap:var(--spacing-xs);margin:calc(-1 * var(--spacing-sm)) calc(-1 * var(--spacing-sm)) calc(-1 * var(--spacing-sm)) 0}.echo-feedback-form-textarea{width:100%;min-height:120px;border-radius:var(--radius-md);border:1px solid var(--border-color);padding:var(--spacing-md);font-size:var(--font-base);resize:vertical;background:#fffc;font-family:inherit}.echo-feedback-form-textarea:focus{outline:none;border-color:var(--primary-color);background:#fff;box-shadow:0 0 0 3px color-mix(in srgb,var(--primary-color) 15%,transparent)}.echo-feedback-form-textarea::placeholder{color:var(--text-lighter)}[data-hide-when-drawing=true]{opacity:1;visibility:visible;transition:opacity .3s ease-in-out,visibility .3s ease-in-out}[data-drawing=true] [data-hide-when-drawing=true]{opacity:0;visibility:hidden;pointer-events:none;user-select:none;-webkit-user-select:none}.echo-drawing-layer,.echo-drawing-layer-container{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;user-select:none;-webkit-user-select:none}.echo-drawing-layer-container svg{pointer-events:auto}.echo-drawing-toolbar{position:fixed;top:var(--spacing-xl);left:var(--spacing-xl);display:flex;flex-direction:column;gap:var(--spacing-sm);z-index:var(--z-drawing-toolbar);opacity:1;transition:opacity var(--duration-base) var(--ease-default)}.echo-drawing-toolbar-button{width:50px;height:50px;border-radius:var(--radius-full);border:2px solid #ddd;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;transition:all var(--duration-base) var(--ease-default);box-shadow:var(--shadow-black-sm);position:relative}.echo-drawing-toolbar-icon{width:25px;height:25px;color:var(--primary-color);transition:color var(--duration-base) var(--ease-default)}.echo-drawing-toolbar-button:hover{transform:scale(1.05);border-color:var(--hover-color)}.echo-drawing-toolbar-button[data-selected=true]{background:var(--primary-color-lightest);border-color:var(--primary-color)}.echo-color-selector{position:relative}.echo-color-selector:hover .echo-drawing-toolbar-button{border-top-right-radius:0;border-bottom-right-radius:0;transform:scale(1.05);border-right-color:transparent;background:rgba(var(--primary-color),.9);border-color:var(--hover-color)}.echo-color-swatch-wrapper{position:absolute;left:calc(100% - 2px);top:50%;transform:translateY(-50%);height:52.5px;padding-right:var(--spacing-sm);display:none}.echo-color-selector:hover .echo-color-swatch-wrapper{display:block}.echo-color-swatch{height:100%;background:#fff;border-radius:var(--radius-md);border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--spacing-sm);padding-left:var(--spacing-md);box-shadow:var(--shadow-black-sm);display:flex;align-items:center;gap:var(--spacing-sm);border:2px solid #ddd;border-left:none}.echo-color-selector:hover .echo-color-swatch{border-color:var(--hover-color)}.echo-color-swatch-button{width:24px;height:24px;border-radius:var(--radius-full);border:2px solid transparent;cursor:pointer;padding:0;transition:transform var(--duration-base) var(--ease-default)}.echo-color-swatch-button:hover{transform:scale(1.1)}.echo-color-swatch-button[data-selected=true]{border-color:var(--primary-color)}.echo-drawing-tooltip{display:flex;text-wrap:nowrap;position:fixed;background:#fff;padding:var(--spacing-sm) var(--spacing-lg);border-radius:var(--radius-lg);box-shadow:var(--shadow-combined-sm);font-size:var(--font-sm);color:var(--primary-color);z-index:var(--z-drawing-tooltip);pointer-events:none;animation:slideDownFade var(--duration-slow) var(--ease-default);border:1px solid var(--primary-color);background:var(--primary-color-lightest)}.echo-shape-actions{position:fixed;z-index:var(--z-shape-actions);display:flex;gap:var(--spacing-xs);background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-combined-md);transform:translate(-50%,-100%) translateY(calc(-1 * var(--spacing-sm)));animation:popInSlideDown var(--duration-fast) var(--ease-default);cursor:default;pointer-events:auto;padding:var(--spacing-xs);border:1px solid var(--primary-color)}.echo-shape-actions-divider{width:1px;margin:var(--spacing-sm) 0;background:var(--border-color);pointer-events:none}.echo-shape-actions[hidden]{display:none}.echo-notification{position:absolute;z-index:var(--z-notification);bottom:70px;right:0;width:300px;padding:var(--spacing-2xl);border-radius:var(--radius-lg);font-size:var(--font-md);font-weight:500;box-shadow:var(--shadow-combined-md);background:#fff;border:1px solid var(--primary-color);transform-origin:bottom right;display:flex;flex-direction:column;align-items:center;gap:var(--spacing-xl);opacity:1;pointer-events:auto;transition:all var(--duration-base) var(--ease-smooth)}.echo-notification:not([data-empty=true]){animation:popInSlideUp var(--duration-slower) var(--ease-spring)}.echo-notification[data-empty=true]{opacity:0;pointer-events:none;transform:translateY(var(--spacing-sm)) scale(.95);transition:none}.echo-notification-hide{position:absolute;top:var(--spacing-lg);right:var(--spacing-lg);width:24px;height:24px;padding:var(--spacing-xs);border:none;background:transparent;color:var(--text-light);opacity:.7;cursor:pointer;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;transition:all var(--duration-base) var(--ease-bounce);flex-shrink:0}.echo-notification-hide:hover{opacity:1;background:var(--primary-color-lightest);transform:scale(1.1);color:var(--primary-color)}.echo-notification-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;transform:scale(1.5);background:var(--primary-color-lightest);padding:var(--spacing-md);border-radius:var(--radius-full);margin-top:var(--spacing-md);transition:all var(--duration-base) var(--ease-bounce)}.echo-notification[data-type=success]{border-color:var(--success-color)}.echo-notification[data-type=success] .echo-notification-icon{color:var(--success-color)}.echo-notification[data-type=error]{border-color:var(--error-color)}.echo-notification[data-type=error] .echo-notification-icon{color:var(--error-color);background:color-mix(in srgb,var(--error-color) 10%,white)}.echo-notification-content{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;padding:0 12px}.echo-notification-title{font-size:1rem;font-weight:600;color:#1a1a1a}.echo-notification-message{font-size:.875rem;font-weight:400;color:#666;line-height:1.4;max-width:100%}@media (max-width: 768px){.echo-notification{right:0;width:calc(100vw - 40px);height:auto;min-height:180px;-webkit-backdrop-filter:none;backdrop-filter:none;font-size:.9375rem;padding:20px;gap:16px;bottom:calc(100% + 20px)}.echo-notification-icon{transform:scale(1.3);padding:10px;margin-top:8px}.echo-notification-title{font-size:.9375rem}.echo-notification-message{font-size:.8125rem}}.echo-welcome-message{display:flex;align-items:center;gap:var(--spacing-xs);position:fixed;z-index:var(--z-welcome-message);background:var(--primary-color-lightest);border:1px solid var(--primary-color);color:var(--primary-color);padding:var(--spacing-md) var(--spacing-lg);border-radius:var(--radius-lg);font-size:var(--font-sm);font-weight:500;box-shadow:var(--shadow-combined-md);opacity:1;transform:translateY(0) scale(1);transition:all var(--duration-slow) var(--ease-smooth);animation:bounceIn var(--duration-slowest) var(--ease-bounce);user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;cursor:pointer;text-align:left}.echo-welcome-message:hover{transform:translateY(-2px) scale(1.02);background:var(--primary-color-lightest);box-shadow:var(--shadow-combined-lg)}.echo-welcome-message:active{transform:translateY(0) scale(.98)}.echo-welcome-message-close{width:20px;height:20px;padding:2px;margin-left:var(--spacing-xs);border:none;background:transparent;opacity:.7;cursor:pointer;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;transition:all var(--duration-base) var(--ease-default)}.echo-welcome-message-close:hover{opacity:1;background:var(--shadow-color-light);transform:scale(1.1)}.echo-welcome-message-close:active{transform:scale(.95)}.echo-welcome-message:after{content:"";position:absolute;bottom:-4px;right:17px;width:16px;height:16px;background:inherit;transform:rotate(45deg);border-radius:var(--radius-xs);border:1px solid var(--primary-color);z-index:-2}.echo-welcome-message:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:var(--primary-color-lightest);z-index:-1;border-radius:var(--radius-lg)}.echo-welcome-message-pulsar{content:"";display:inline-block;width:6px;height:6px;background:var(--primary-color);border-radius:50%;margin-right:8px;animation:pulse 1.5s var(--ease-in-out) infinite}.echo-button{display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:var(--radius-md);font-weight:500;cursor:pointer;transition:all var(--duration-base) var(--ease-default);line-height:1}.echo-button:focus-visible{outline:2px solid var(--primary-color);outline-offset:2px}.echo-button-primary{background:var(--primary-color);color:#fff}.echo-button-primary:hover{background:var(--hover-color);transform:translateY(-1px)}.echo-button-primary:active{transform:translateY(0)}.echo-button-secondary{background:transparent;color:var(--text-light)}.echo-button-secondary:hover{background-color:var(--primary-color-lightest);color:var(--primary-color)}.echo-button-xs{padding:var(--spacing-xs);font-size:var(--font-xs)}.echo-button-sm{padding:var(--spacing-xs);font-size:var(--font-sm)}.echo-button-md{padding:var(--spacing-md) var(--spacing-2xl);font-size:var(--font-base)}.echo-button-lg{padding:var(--spacing-md) var(--spacing-3xl);font-size:var(--font-md)}@keyframes slideUpFade{0%{opacity:0;transform:translateY(var(--spacing-sm))}to{opacity:1;transform:translateY(0)}}@keyframes slideDownFade{0%{opacity:0;transform:translateY(calc(-1 * var(--spacing-sm)))}to{opacity:1;transform:translateY(0)}}@keyframes popIn{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes popInSlideUp{0%{opacity:0;transform:translateY(var(--spacing-sm)) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes popInSlideDown{0%{opacity:0;transform:translate(-50%,-100%) translateY(calc(-1 * var(--spacing-xs))) scale(.95)}to{opacity:1;transform:translate(-50%,-100%) translateY(calc(-1 * var(--spacing-sm))) scale(1)}}@keyframes bounceIn{0%{opacity:0;transform:translateY(var(--spacing-xl)) scale(.9)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.5}to{transform:scale(1);opacity:1}}';
1114
- var Wt = /* @__PURE__ */ b('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="m9 18 6-6-6-6">');
1115
- const _t = (e) => (() => {
1116
- var t = Wt();
1117
- return w((n) => {
1118
- var o = e.size ?? 24, i = e.size ?? 24, r = e.fill ?? "none", a = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1119
- return o !== n.e && h(t, "width", n.e = o), i !== n.t && h(t, "height", n.t = i), r !== n.a && h(t, "fill", n.a = r), a !== n.o && h(t, "stroke", n.o = a), l !== n.i && h(t, "stroke-width", n.i = l), s !== n.n && h(t, "class", n.n = s), n.s = C(t, c, n.s), n;
1191
+ }, dn = (e) => {
1192
+ const [n, t] = A({
1193
+ width: document.documentElement.clientWidth,
1194
+ height: document.documentElement.scrollHeight
1195
+ }), r = () => {
1196
+ requestAnimationFrame(() => {
1197
+ const a = e();
1198
+ a && (a.style.height = "0px", a.style.height = `${document.documentElement.scrollHeight}px`, t({
1199
+ width: document.documentElement.clientWidth,
1200
+ height: document.documentElement.scrollHeight
1201
+ }));
1202
+ });
1203
+ };
1204
+ return M({
1205
+ event: "resize",
1206
+ callback: r,
1207
+ onMount: r
1208
+ }), Oe({
1209
+ target: document.documentElement,
1210
+ options: {
1211
+ childList: !0,
1212
+ subtree: !0,
1213
+ attributes: !0
1214
+ },
1215
+ callback: r
1216
+ }), n;
1217
+ }, un = ({ onUrlChange: e }) => {
1218
+ let n = Ee();
1219
+ const t = () => {
1220
+ const r = Ee();
1221
+ r !== n && (n = r, e(r));
1222
+ };
1223
+ M({ event: "popstate", callback: t }), M({ event: "pushstate", callback: t }), M({ event: "replacestate", callback: t }), Oe({
1224
+ target: document.documentElement,
1225
+ options: {
1226
+ childList: !0,
1227
+ subtree: !0
1228
+ },
1229
+ callback: t
1230
+ });
1231
+ }, hn = `*,*:before,*:after{box-sizing:border-box}.echo-root{position:absolute;top:0;left:0;z-index:var(--z-root);isolation:isolate;pointer-events:none;--z-root: 999999;--z-launcher: 2;--z-overlay: 1;--z-drawing-toolbar: 3;--z-drawing-tooltip: 3;--z-shape-actions: 3;--z-notification: 2;--z-welcome-message: 2;--z-widget-button: 2;--z-feedback-form: 4;--primary-color: #000;--primary-text-color: #fff;--error-color: #f44336;--success-color: var(--primary-color);--text-dark: #1a1a1a;--text-medium: #333;--text-light: #666;--text-lighter: #999;--border-color: rgba(0, 0, 0, .1);--border-color-light: rgba(0, 0, 0, .05);--border-color-medium: rgba(0, 0, 0, .08);--primary-color-lighter: color-mix(in srgb, var(--primary-color) 100%, white 40%);--primary-color-lightest: color-mix(in srgb, var(--primary-color) 7%, white 100%);--hover-color: color-mix(in srgb, var(--primary-color) 80%, #fff);--shadow-color-dark: rgba(0, 0, 0, .6);--shadow-color-light: rgba(255, 255, 255, .1);--shadow-color-medium: rgba(0, 0, 0, .2);--shadow-sm: 0 1px 3px;--shadow-md: 0 4px 10px;--shadow-lg: 0 10px 20px;--shadow-black-sm: var(--shadow-sm) rgba(0, 0, 0, .5);--shadow-black-md: var(--shadow-md) rgba(0, 0, 0, .5);--shadow-black-lg: var(--shadow-lg) rgba(0, 0, 0, .5);--shadow-black-lightened-sm: var(--shadow-sm) var(--shadow-color-medium);--shadow-black-lightened-md: var(--shadow-md) var(--shadow-color-medium);--shadow-black-lightened-lg: var(--shadow-lg) var(--shadow-color-medium);--shadow-primary-sm: var(--shadow-sm) color-mix(in srgb, var(--primary-color) 60%, transparent 80%);--shadow-primary-md: var(--shadow-md) color-mix(in srgb, var(--primary-color) 50%, transparent 80%);--shadow-primary-lg: var(--shadow-lg) color-mix(in srgb, var(--primary-color) 40%, transparent 80%);--shadow-primary-lighter-sm: var(--shadow-sm) color-mix(in srgb, var(--primary-color-lighter) 70%, transparent 80%);--shadow-primary-lighter-md: var(--shadow-md) color-mix(in srgb, var(--primary-color-lighter) 60%, transparent 80%);--shadow-primary-lighter-lg: var(--shadow-lg) color-mix(in srgb, var(--primary-color-lighter) 50%, transparent 80%);--shadow-primary-lightest-sm: var(--shadow-sm) color-mix(in srgb, var(--primary-color-lightest) 70%, transparent 80%);--shadow-primary-lightest-md: var(--shadow-md) color-mix(in srgb, var(--primary-color-lightest) 60%, transparent 80%);--shadow-primary-lightest-lg: var(--shadow-lg) color-mix(in srgb, var(--primary-color-lightest) 50%, transparent 80%);--shadow-combined-sm: var(--shadow-primary-sm), var(--shadow-black-lightened-sm);--shadow-combined-md: var(--shadow-primary-md), var(--shadow-black-lightened-md);--shadow-combined-lg: var(--shadow-primary-lg), var(--shadow-black-lightened-lg);--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-lg: 16px;--spacing-xl: 20px;--spacing-2xl: 24px;--spacing-3xl: 32px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--font-xs: .8125rem;--font-sm: .875rem;--font-base: .9375rem;--font-md: 1rem;--font-lg: 1.125rem;--duration-fast: .1s;--duration-base: .2s;--duration-slow: .3s;--duration-slower: .4s;--duration-slowest: .6s;--ease-default: ease;--ease-in-out: ease-in-out;--ease-bounce: cubic-bezier(.34, 1.56, .64, 1);--ease-smooth: cubic-bezier(.4, 0, .2, 1);--ease-spring: cubic-bezier(.16, 1, .3, 1)}.echo-stored-feedback{position:absolute;display:flex;flex-direction:column;bottom:calc(100% + var(--spacing-lg));right:0;width:320px;background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-black-lightened-lg);animation:slideUpFade var(--duration-base) var(--ease-smooth);z-index:calc(var(--z-widget-button) + 1);transform-origin:bottom right;transition:all var(--duration-base) var(--ease-smooth)}.echo-stored-feedback-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg)}.echo-stored-feedback-header h3{margin:0;font-size:var(--font-md);font-weight:600}.echo-stored-feedback-list{max-height:400px;overflow-y:auto;border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.echo-stored-feedback-item{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border-color-light);transition:all var(--duration-base) var(--ease-smooth);background:#fff;position:relative}.echo-stored-feedback-item:hover{background:var(--primary-color-lightest)}.echo-stored-feedback-item-current{background:var(--primary-color-lightest);padding-left:calc(var(--spacing-lg) - 3px)}.echo-stored-feedback-item-current:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--primary-color);border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.echo-stored-feedback-item:last-child{border-bottom:none;border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.echo-stored-feedback-item:last-child.echo-stored-feedback-item-current:before{border-bottom-left-radius:var(--radius-lg)}.echo-stored-feedback-content{flex:1;min-width:0;margin-right:var(--spacing-md)}.echo-stored-feedback-path{font-size:var(--font-sm);font-weight:500;color:var(--text-medium);margin-bottom:var(--spacing-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.echo-stored-feedback-preview{font-size:var(--font-xs);color:var(--text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.echo-stored-feedback-actions{display:flex;align-items:center;gap:var(--spacing-sm)}.echo-stored-feedback-link{color:var(--text-light)}.echo-stored-feedback-link:hover{color:var(--primary-color)}.echo-stored-feedback-delete{color:var(--text-light);font-size:var(--font-xs);padding:var(--spacing-xs) var(--spacing-md)}.echo-stored-feedback-delete:hover{color:var(--error-color);background:color-mix(in srgb,var(--error-color) 10%,transparent)}.echo-stored-feedback-empty{padding:var(--spacing-3xl) var(--spacing-lg);text-align:center;color:var(--text-light);font-size:var(--font-sm);border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.echo-launcher{position:fixed;z-index:var(--z-launcher);bottom:var(--spacing-xl);right:var(--spacing-xl);pointer-events:none}.echo-overlay{position:absolute;top:0;left:0;margin:0;padding:0;max-width:none;max-height:none;border:3px solid var(--primary-color);background:transparent}.echo-overlay::backdrop{background:transparent}[data-hidden=true],[data-hidden=false]{transition:opacity var(--duration-slow) var(--ease-in-out),visibility var(--duration-slow) var(--ease-in-out)}[data-hidden=true]{opacity:0;visibility:hidden;pointer-events:none}[data-hidden=false]{opacity:1;visibility:visible;pointer-events:auto;user-select:none;-webkit-user-select:none}.echo-launcher-button{z-index:var(--z-widget-button);position:relative;display:flex;align-items:center;justify-content:center;cursor:pointer;background:radial-gradient(circle at 40% 40%,var(--primary-color) 0%,var(--primary-color-lighter) 65%,var(--primary-color-lighter) 100%);border:none;border-radius:var(--radius-full);width:48px;height:48px;box-shadow:var(--shadow-black-md);transition:all var(--duration-slow) var(--ease-default),transform var(--duration-slower) var(--ease-smooth),opacity var(--duration-slow) var(--ease-in-out);will-change:transform}.echo-launcher-button:hover{box-shadow:var(--shadow-black-lg);transform:translateY(-2px)}.echo-launcher-button:active{transform:scale(.95)}.echo-launcher-button-count{position:absolute;top:calc(-1 * var(--spacing-xs));right:calc(-1 * var(--spacing-xs));background:var(--primary-color-lightest);color:var(--primary-color-lighter);border-radius:var(--radius-md);min-width:20px;height:20px;display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-black-sm);padding:0 var(--spacing-xs);font-weight:600;pointer-events:auto;cursor:pointer;transform-origin:center center;animation:popIn var(--duration-slow) var(--ease-bounce);transition:transform var(--duration-base) var(--ease-default)}.echo-launcher-button-count:hover{transform:scale(1.1)}.echo-feedback{position:fixed;bottom:var(--spacing-xl);right:var(--spacing-xl);width:min(calc(100vw - var(--spacing-2xl)),24rem);z-index:var(--z-feedback-form);box-shadow:var(--shadow-black-lightened-lg);display:flex;flex-direction:column;gap:var(--spacing-lg);background:#fff;border-radius:var(--radius-lg);will-change:transform;padding:var(--spacing-lg)}.echo-feedback[data-minimized=true]{transition:transform .4s var(--ease-default),box-shadow .4s var(--ease-default);transform:translate(calc(100% - 48px),calc(100% - 48px));box-shadow:0 8px 16px #0003}.echo-feedback[data-minimized=true]:hover{cursor:pointer;transform:translate(calc(100% - 48px),calc(100% - 48px)) rotate(-2deg) scale(1.1);box-shadow:0 12px 24px #00000040}.echo-feedback[data-minimized=false]{transition:transform .4s var(--ease-smooth),box-shadow .4s var(--ease-smooth);transform:translate(0)}.echo-feedback[style*=transition]{pointer-events:none}.echo-feedback-content{display:flex;flex-direction:column;gap:var(--spacing-lg)}.echo-feedback-header{display:flex;justify-content:space-between;align-items:center}.echo-feedback-title{font-size:var(--font-lg);font-weight:600;color:var(--text-dark);margin:0}.echo-feedback-header-actions{display:flex;gap:var(--spacing-xs);margin:calc(-1 * var(--spacing-sm)) calc(-1 * var(--spacing-sm)) calc(-1 * var(--spacing-sm)) 0}.echo-feedback-form-textarea{width:100%;padding:.5rem;border:1px solid var(--border-color);border-radius:var(--radius-md);background-color:#fff;color:var(--text-medium);font-size:var(--font-sm);transition:all var(--duration-base) var(--ease-default);min-height:120px;resize:vertical;font-family:inherit}.echo-feedback-form-textarea:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary-color) 15%,transparent)}.echo-feedback-form-textarea::placeholder{color:var(--text-lighter)}[data-hide-when-drawing=true]{opacity:1;visibility:visible;transition:opacity .3s ease-in-out,visibility .3s ease-in-out}[data-drawing=true] [data-hide-when-drawing=true]{opacity:0;visibility:hidden;pointer-events:none;user-select:none;-webkit-user-select:none}.echo-drawing-layer,.echo-drawing-layer-container{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;user-select:none;-webkit-user-select:none}.echo-drawing-layer-container svg{pointer-events:auto}.echo-drawing-toolbar{position:fixed;top:var(--spacing-xl);left:var(--spacing-xl);display:flex;flex-direction:column;gap:var(--spacing-sm);z-index:var(--z-drawing-toolbar);opacity:1;transition:opacity var(--duration-base) var(--ease-default)}.echo-drawing-toolbar-button{width:50px;height:50px;border-radius:var(--radius-full);border:2px solid #ddd;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;transition:all var(--duration-base) var(--ease-default);box-shadow:var(--shadow-black-sm);position:relative}.echo-drawing-toolbar-icon{width:25px;height:25px;color:var(--primary-color);transition:color var(--duration-base) var(--ease-default)}.echo-drawing-toolbar-button:hover{transform:scale(1.05);border-color:var(--hover-color)}.echo-drawing-toolbar-button[data-selected=true]{background:var(--primary-color-lightest);border-color:var(--primary-color)}.echo-color-selector{position:relative}.echo-color-selector:hover .echo-drawing-toolbar-button{border-top-right-radius:0;border-bottom-right-radius:0;transform:scale(1.05);border-right-color:transparent;background:rgba(var(--primary-color),.9);border-color:var(--hover-color)}.echo-color-swatch-wrapper{position:absolute;left:calc(100% - 2px);top:50%;transform:translateY(-50%);height:52.5px;padding-right:var(--spacing-sm);display:none}.echo-color-selector:hover .echo-color-swatch-wrapper{display:block}.echo-color-swatch{height:100%;background:#fff;border-radius:var(--radius-md);border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--spacing-sm);padding-left:var(--spacing-md);box-shadow:var(--shadow-black-sm);display:flex;align-items:center;gap:var(--spacing-sm);border:2px solid #ddd;border-left:none}.echo-color-selector:hover .echo-color-swatch{border-color:var(--hover-color)}.echo-color-swatch-button{width:24px;height:24px;border-radius:var(--radius-full);border:2px solid transparent;cursor:pointer;padding:0;transition:transform var(--duration-base) var(--ease-default)}.echo-color-swatch-button:hover{transform:scale(1.1)}.echo-color-swatch-button[data-selected=true]{border-color:var(--primary-color)}.echo-drawing-tooltip{display:flex;text-wrap:nowrap;position:fixed;background:#fff;padding:var(--spacing-sm) var(--spacing-lg);border-radius:var(--radius-lg);box-shadow:var(--shadow-combined-sm);font-size:var(--font-sm);color:var(--primary-color);z-index:var(--z-drawing-tooltip);pointer-events:none;animation:slideDownFade var(--duration-slow) var(--ease-default);border:1px solid var(--primary-color);background:var(--primary-color-lightest)}.echo-shape-actions{position:fixed;z-index:var(--z-shape-actions);display:flex;gap:var(--spacing-xs);background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-combined-md);transform:translate(-50%,-100%) translateY(calc(-1 * var(--spacing-sm)));animation:popInSlideDown var(--duration-fast) var(--ease-default);cursor:default;pointer-events:auto;padding:var(--spacing-xs);border:1px solid var(--primary-color)}.echo-shape-actions-divider{width:1px;margin:var(--spacing-sm) 0;background:var(--border-color);pointer-events:none}.echo-shape-actions[hidden]{display:none}.echo-notification{position:absolute;z-index:var(--z-notification);bottom:70px;right:0;width:300px;padding:var(--spacing-2xl);border-radius:var(--radius-lg);font-size:var(--font-md);font-weight:500;box-shadow:var(--shadow-combined-md);background:#fff;border:1px solid var(--primary-color);transform-origin:bottom right;display:flex;flex-direction:column;align-items:center;gap:var(--spacing-xl);opacity:1;pointer-events:auto;transition:all var(--duration-base) var(--ease-smooth)}.echo-notification:not([data-empty=true]){animation:popInSlideUp var(--duration-slower) var(--ease-spring)}.echo-notification[data-empty=true]{opacity:0;pointer-events:none;transform:translateY(var(--spacing-sm)) scale(.95);transition:none}.echo-notification-hide{position:absolute;top:var(--spacing-lg);right:var(--spacing-lg);width:24px;height:24px;padding:var(--spacing-xs);border:none;background:transparent;color:var(--text-light);opacity:.7;cursor:pointer;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;transition:all var(--duration-base) var(--ease-bounce);flex-shrink:0}.echo-notification-hide:hover{opacity:1;background:var(--primary-color-lightest);transform:scale(1.1);color:var(--primary-color)}.echo-notification-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;transform:scale(1.5);background:var(--primary-color-lightest);padding:var(--spacing-md);border-radius:var(--radius-full);margin-top:var(--spacing-md);transition:all var(--duration-base) var(--ease-bounce)}.echo-notification[data-type=success]{border-color:var(--success-color)}.echo-notification[data-type=success] .echo-notification-icon{color:var(--success-color)}.echo-notification[data-type=error]{border-color:var(--error-color)}.echo-notification[data-type=error] .echo-notification-icon{color:var(--error-color);background:color-mix(in srgb,var(--error-color) 10%,white)}.echo-notification-content{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;padding:0 12px}.echo-notification-title{font-size:1rem;font-weight:600;color:#1a1a1a}.echo-notification-message{font-size:.875rem;font-weight:400;color:#666;line-height:1.4;max-width:100%}@media (max-width: 768px){.echo-notification{right:0;width:calc(100vw - 40px);height:auto;min-height:180px;-webkit-backdrop-filter:none;backdrop-filter:none;font-size:.9375rem;padding:20px;gap:16px;bottom:calc(100% + 20px)}.echo-notification-icon{transform:scale(1.3);padding:10px;margin-top:8px}.echo-notification-title{font-size:.9375rem}.echo-notification-message{font-size:.8125rem}}.echo-welcome-message{display:flex;align-items:center;gap:var(--spacing-xs);position:fixed;z-index:var(--z-welcome-message);background:var(--primary-color-lightest);border:1px solid var(--primary-color);color:var(--primary-color);padding:var(--spacing-md) var(--spacing-lg);border-radius:var(--radius-lg);font-size:var(--font-sm);font-weight:500;box-shadow:var(--shadow-combined-md);opacity:1;transform:translateY(0) scale(1);transition:all var(--duration-slow) var(--ease-smooth);animation:bounceIn var(--duration-slowest) var(--ease-bounce);user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;cursor:pointer;text-align:left}.echo-welcome-message:hover{transform:translateY(-2px) scale(1.02);background:var(--primary-color-lightest);box-shadow:var(--shadow-combined-lg)}.echo-welcome-message:active{transform:translateY(0) scale(.98)}.echo-welcome-message-close{width:20px;height:20px;padding:2px;margin-left:var(--spacing-xs);border:none;background:transparent;opacity:.7;cursor:pointer;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;transition:all var(--duration-base) var(--ease-default)}.echo-welcome-message-close:hover{opacity:1;background:var(--shadow-color-light);transform:scale(1.1)}.echo-welcome-message-close:active{transform:scale(.95)}.echo-welcome-message:after{content:"";position:absolute;bottom:-4px;right:17px;width:16px;height:16px;background:inherit;transform:rotate(45deg);border-radius:var(--radius-xs);border:1px solid var(--primary-color);z-index:-2}.echo-welcome-message:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background:var(--primary-color-lightest);z-index:-1;border-radius:var(--radius-lg)}.echo-welcome-message-pulsar{content:"";display:inline-block;width:6px;height:6px;background:var(--primary-color);border-radius:50%;margin-right:8px;animation:pulse 1.5s var(--ease-in-out) infinite}.echo-button{display:inline-flex;align-items:center;justify-content:center;border:none;border-radius:var(--radius-md);font-weight:500;cursor:pointer;transition:all var(--duration-base) var(--ease-default);line-height:1}.echo-button:focus-visible{outline:2px solid var(--primary-color);outline-offset:2px}.echo-button-primary{background:var(--primary-color);color:#fff}.echo-button-primary:hover{background:var(--hover-color);transform:translateY(-1px)}.echo-button-primary:active{transform:translateY(0)}.echo-button-secondary{background:transparent;color:var(--text-light)}.echo-button-secondary:hover{background-color:var(--primary-color-lightest);color:var(--primary-color)}.echo-button-xs{padding:var(--spacing-xs);font-size:var(--font-xs)}.echo-button-sm{padding:var(--spacing-xs);font-size:var(--font-sm)}.echo-button-md{padding:var(--spacing-md) var(--spacing-2xl);font-size:var(--font-base)}.echo-button-lg{padding:var(--spacing-md) var(--spacing-3xl);font-size:var(--font-md)}@keyframes slideUpFade{0%{opacity:0;transform:translateY(var(--spacing-sm))}to{opacity:1;transform:translateY(0)}}@keyframes slideDownFade{0%{opacity:0;transform:translateY(calc(-1 * var(--spacing-sm)))}to{opacity:1;transform:translateY(0)}}@keyframes popIn{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes popInSlideUp{0%{opacity:0;transform:translateY(var(--spacing-sm)) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes popInSlideDown{0%{opacity:0;transform:translate(-50%,-100%) translateY(calc(-1 * var(--spacing-xs))) scale(.95)}to{opacity:1;transform:translate(-50%,-100%) translateY(calc(-1 * var(--spacing-sm))) scale(1)}}@keyframes bounceIn{0%{opacity:0;transform:translateY(var(--spacing-xl)) scale(.9)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.5}to{transform:scale(1);opacity:1}}.echo-inputs{display:flex;flex-direction:column;gap:1rem;margin-bottom:1rem}.echo-input{display:flex;flex-direction:column;gap:.5rem}.echo-input-label{font-size:.875rem;font-weight:500;color:var(--text-color)}.echo-input-required{color:#dc2626;margin-left:.25rem}.echo-input-field{width:100%;padding:.5rem;border:1px solid var(--border-color);border-radius:var(--radius-md);background-color:#fff;color:var(--text-medium);font-size:var(--font-sm);transition:all var(--duration-base) var(--ease-default)}.echo-input-field:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary-color) 15%,transparent)}.echo-input-field::placeholder{color:var(--text-lighter)}select.echo-input-field{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23666' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;padding-right:2.5rem;cursor:pointer}.echo-input-options{display:flex;flex-direction:column;gap:var(--spacing-sm);border:none;margin:0;padding:0}.echo-input-option{display:flex;align-items:center;gap:.5rem;cursor:pointer;padding:var(--spacing-xs);border-radius:var(--radius-sm);transition:all var(--duration-base) var(--ease-default)}.echo-input-option:hover{background:var(--primary-color-lightest)}.echo-input-option input[type=radio],.echo-input-option input[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0;width:18px;height:18px;border:1px solid var(--border-color);background-color:#fff;display:grid;place-content:center;cursor:pointer;transition:all var(--duration-base) var(--ease-default)}.echo-input-option input[type=radio]{border-radius:50%}.echo-input-option input[type=radio]:before{content:"";width:10px;height:10px;border-radius:50%;transform:scale(0);transition:transform var(--duration-base) var(--ease-default);background-color:var(--primary-color)}.echo-input-option input[type=radio]:checked:before{transform:scale(1)}.echo-input-option input[type=checkbox]{border-radius:var(--radius-sm)}.echo-input-option input[type=checkbox]:before{content:"";width:12px;height:12px;transform:scale(0);transition:all var(--duration-base) var(--ease-default);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");background-size:contain;background-repeat:no-repeat;background-position:center}.echo-input-option input[type=checkbox]:checked{background-color:var(--primary-color-lighter);border-color:var(--primary-color-lighter)}.echo-input-option input[type=checkbox]:checked:before{transform:scale(1)}.echo-input-option input[type=radio]:hover,.echo-input-option input[type=checkbox]:hover{border-color:var(--primary-color-lighter)}.echo-input-option input[type=radio]:focus,.echo-input-option input[type=checkbox]:focus{outline:none;border-color:var(--primary-color-lighter);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary-color) 15%,transparent)}.echo-input-option input[type=radio]:checked,.echo-input-option input[type=checkbox]:checked{border-color:var(--primary-color-lighter)}.echo-input-option span{font-size:var(--font-sm);color:var(--text-medium);-webkit-user-select:none;user-select:none}.echo-select{position:relative;width:100%}.echo-select-trigger{width:100%;padding:.5rem;border:1px solid var(--border-color);border-radius:var(--radius-md);background-color:#fff;color:var(--text-medium);font-size:var(--font-sm);transition:all var(--duration-base) var(--ease-default);cursor:pointer;text-align:left;display:flex;align-items:center;justify-content:space-between;gap:.5rem;outline:none}.echo-select-trigger[data-placeholder=true]{color:var(--text-lighter)}.echo-select-trigger:hover{border-color:var(--border-color-medium)}.echo-select-trigger:focus,.echo-select-trigger[data-open=true]{border-color:var(--primary-color);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary-color) 15%,transparent)}.echo-select-arrow{flex-shrink:0;transition:transform var(--duration-base) var(--ease-default)}.echo-select-trigger[data-open=true] .echo-select-arrow{transform:rotate(180deg)}.echo-select-dropdown{position:absolute;top:calc(100% + .25rem);left:0;right:0;background:#fff;border:1px solid var(--border-color-medium);border-radius:var(--radius-md);box-shadow:var(--shadow-black-lightened-md);max-height:15rem;overflow-y:auto;z-index:10;animation:slideDownFade var(--duration-base) var(--ease-default);padding:var(--spacing-xs)}.echo-select-option{width:100%;padding:.5rem .75rem;background:none;border:none;text-align:left;color:var(--text-medium);font-size:var(--font-sm);cursor:pointer;transition:all var(--duration-base) var(--ease-default);outline:none;border-radius:var(--radius-sm)}.echo-select-option:hover{background:var(--primary-color-lightest)}.echo-select-option:focus{background:var(--primary-color-lightest);box-shadow:0 0 0 1px var(--primary-color) inset}.echo-select-option[data-selected=true]{background:var(--primary-color-lightest);color:var(--primary-color);font-weight:500}select.echo-input-field{display:none}.visually-hidden{position:absolute;left:50%;bottom:0;transform:translate(-50%);width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}`;
1232
+ var fn = /* @__PURE__ */ w('<div class=echo-color-selector role=group aria-label="Color Selection"><button class=echo-drawing-toolbar-button title="Current Color"></button><div class=echo-color-swatch-wrapper role=listbox aria-label="Available Colors"><div class=echo-color-swatch>'), gn = /* @__PURE__ */ w("<button class=echo-color-swatch-button role=option>");
1233
+ const mn = [
1234
+ "#ff6b6b",
1235
+ // Soft Red
1236
+ "#69db7c",
1237
+ // Soft Green
1238
+ "#74c0fc",
1239
+ // Soft Blue
1240
+ "#ffd43b",
1241
+ // Soft Yellow
1242
+ "#da77f2",
1243
+ // Soft Purple
1244
+ "#66d9e8",
1245
+ // Soft Cyan
1246
+ "#ffa94d",
1247
+ // Soft Orange
1248
+ "#e599f7"
1249
+ // Soft Pink
1250
+ ], vn = {
1251
+ "#ff6b6b": "Soft Red",
1252
+ "#69db7c": "Soft Green",
1253
+ "#74c0fc": "Soft Blue",
1254
+ "#ffd43b": "Soft Yellow",
1255
+ "#da77f2": "Soft Purple",
1256
+ "#66d9e8": "Soft Cyan",
1257
+ "#ffa94d": "Soft Orange",
1258
+ "#e599f7": "Soft Pink"
1259
+ }, Se = (e) => vn[e] || "Primary", bn = () => {
1260
+ const e = $();
1261
+ return (() => {
1262
+ var n = fn(), t = n.firstChild, r = t.nextSibling, a = r.firstChild;
1263
+ return u(t, "aria-expanded", !1), v(a, f(_, {
1264
+ get each() {
1265
+ return [e.widget.state.primaryColor, ...mn];
1266
+ },
1267
+ children: (o) => (() => {
1268
+ var i = gn();
1269
+ return i.$$click = () => e.drawing.setState({
1270
+ selectedColor: o
1271
+ }), o != null ? i.style.setProperty("background-color", o) : i.style.removeProperty("background-color"), b((l) => {
1272
+ var s = `Select ${Se(o)} color`, c = e.drawing.state.selectedColor === o, d = `${Se(o)} color`, h = e.drawing.state.selectedColor === o;
1273
+ return s !== l.e && u(i, "title", l.e = s), c !== l.t && u(i, "data-selected", l.t = c), d !== l.a && u(i, "aria-label", l.a = d), h !== l.o && u(i, "aria-selected", l.o = h), l;
1274
+ }, {
1275
+ e: void 0,
1276
+ t: void 0,
1277
+ a: void 0,
1278
+ o: void 0
1279
+ }), i;
1280
+ })()
1281
+ })), b((o) => {
1282
+ var i = `Current color: ${Se(e.drawing.state.selectedColor)}`, l = e.drawing.state.selectedColor;
1283
+ return i !== o.e && u(t, "aria-label", o.e = i), l !== o.t && ((o.t = l) != null ? t.style.setProperty("background-color", l) : t.style.removeProperty("background-color")), o;
1284
+ }, {
1285
+ e: void 0,
1286
+ t: void 0
1287
+ }), n;
1288
+ })();
1289
+ };
1290
+ T(["click"]);
1291
+ var wn = /* @__PURE__ */ w('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="m9 18 6-6-6-6">');
1292
+ const yn = (e) => (() => {
1293
+ var n = wn();
1294
+ return b((t) => {
1295
+ var r = e.size ?? 24, a = e.size ?? 24, o = e.fill ?? "none", i = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1296
+ return r !== t.e && u(n, "width", t.e = r), a !== t.t && u(n, "height", t.t = a), o !== t.a && u(n, "fill", t.a = o), i !== t.o && u(n, "stroke", t.o = i), l !== t.i && u(n, "stroke-width", t.i = l), s !== t.n && u(n, "class", t.n = s), t.s = F(n, c, t.s), t;
1120
1297
  }, {
1121
1298
  e: void 0,
1122
1299
  t: void 0,
@@ -1125,28 +1302,28 @@ const _t = (e) => (() => {
1125
1302
  i: void 0,
1126
1303
  n: void 0,
1127
1304
  s: void 0
1128
- }), t;
1305
+ }), n;
1129
1306
  })();
1130
- var Ut = /* @__PURE__ */ b('<svg viewBox="0 0 64 66"fill=none><path d="M59.716 36.936L54.9 33l-6.17 5.108a77.278 77.278 0 00-12.744 13.469l-3.637 4.914-3.778-5.017a83.719 83.719 0 00-13.956-14.538L9.799 33l2.86-2.332A104.39 104.39 0 0030.1 12.5l2.24-2.98 1.736 2.298a111.905 111.905 0 0018.608 19.384l2.206 1.81 2.861-2.333a104.13 104.13 0 005.297-4.641C59.978 11.294 47.409.26 32.349.26 14.997.26.92 14.923.92 33c0 18.076 14.077 32.74 31.43 32.74 15.102 0 27.715-11.103 30.73-25.892a75.808 75.808 0 00-3.375-2.912h.011z">');
1131
- const Kt = (e) => (() => {
1132
- var t = Ut(), n = t.firstChild;
1133
- return w((o) => {
1134
- var i = e.size ?? 24, r = e.size ?? 24, a = e.class, l = e.style, s = e.fill ?? "currentColor";
1135
- return i !== o.e && h(t, "width", o.e = i), r !== o.t && h(t, "height", o.t = r), a !== o.a && h(t, "class", o.a = a), o.o = C(t, l, o.o), s !== o.i && h(n, "fill", o.i = s), o;
1307
+ var pn = /* @__PURE__ */ w('<svg viewBox="0 0 64 66"fill=none><path d="M59.716 36.936L54.9 33l-6.17 5.108a77.278 77.278 0 00-12.744 13.469l-3.637 4.914-3.778-5.017a83.719 83.719 0 00-13.956-14.538L9.799 33l2.86-2.332A104.39 104.39 0 0030.1 12.5l2.24-2.98 1.736 2.298a111.905 111.905 0 0018.608 19.384l2.206 1.81 2.861-2.333a104.13 104.13 0 005.297-4.641C59.978 11.294 47.409.26 32.349.26 14.997.26.92 14.923.92 33c0 18.076 14.077 32.74 31.43 32.74 15.102 0 27.715-11.103 30.73-25.892a75.808 75.808 0 00-3.375-2.912h.011z">');
1308
+ const xn = (e) => (() => {
1309
+ var n = pn(), t = n.firstChild;
1310
+ return b((r) => {
1311
+ var a = e.size ?? 24, o = e.size ?? 24, i = e.class, l = e.style, s = e.fill ?? "currentColor";
1312
+ return a !== r.e && u(n, "width", r.e = a), o !== r.t && u(n, "height", r.t = o), i !== r.a && u(n, "class", r.a = i), r.o = F(n, l, r.o), s !== r.i && u(t, "fill", r.i = s), r;
1136
1313
  }, {
1137
1314
  e: void 0,
1138
1315
  t: void 0,
1139
1316
  a: void 0,
1140
1317
  o: void 0,
1141
1318
  i: void 0
1142
- }), t;
1319
+ }), n;
1143
1320
  })();
1144
- var Vt = /* @__PURE__ */ b('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="M3 7V5a2 2 0 0 1 2-2h2"></path><path d="M17 3h2a2 2 0 0 1 2 2v2"></path><path d="M21 17v2a2 2 0 0 1-2 2h-2"></path><path d="M7 21H5a2 2 0 0 1-2-2v-2">');
1145
- const Rt = (e) => (() => {
1146
- var t = Vt();
1147
- return w((n) => {
1148
- var o = e.size ?? 24, i = e.size ?? 24, r = e.fill ?? "none", a = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1149
- return o !== n.e && h(t, "width", n.e = o), i !== n.t && h(t, "height", n.t = i), r !== n.a && h(t, "fill", n.a = r), a !== n.o && h(t, "stroke", n.o = a), l !== n.i && h(t, "stroke-width", n.i = l), s !== n.n && h(t, "class", n.n = s), n.s = C(t, c, n.s), n;
1321
+ var kn = /* @__PURE__ */ w('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="M3 7V5a2 2 0 0 1 2-2h2"></path><path d="M17 3h2a2 2 0 0 1 2 2v2"></path><path d="M21 17v2a2 2 0 0 1-2 2h-2"></path><path d="M7 21H5a2 2 0 0 1-2-2v-2">');
1322
+ const Sn = (e) => (() => {
1323
+ var n = kn();
1324
+ return b((t) => {
1325
+ var r = e.size ?? 24, a = e.size ?? 24, o = e.fill ?? "none", i = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1326
+ return r !== t.e && u(n, "width", t.e = r), a !== t.t && u(n, "height", t.t = a), o !== t.a && u(n, "fill", t.a = o), i !== t.o && u(n, "stroke", t.o = i), l !== t.i && u(n, "stroke-width", t.i = l), s !== t.n && u(n, "class", t.n = s), t.s = F(n, c, t.s), t;
1150
1327
  }, {
1151
1328
  e: void 0,
1152
1329
  t: void 0,
@@ -1155,14 +1332,14 @@ const Rt = (e) => (() => {
1155
1332
  i: void 0,
1156
1333
  n: void 0,
1157
1334
  s: void 0
1158
- }), t;
1335
+ }), n;
1159
1336
  })();
1160
- var Xt = /* @__PURE__ */ b('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z">');
1161
- const Gt = (e) => (() => {
1162
- var t = Xt();
1163
- return w((n) => {
1164
- var o = e.size ?? 24, i = e.size ?? 24, r = e.fill ?? "none", a = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1165
- return o !== n.e && h(t, "width", n.e = o), i !== n.t && h(t, "height", n.t = i), r !== n.a && h(t, "fill", n.a = r), a !== n.o && h(t, "stroke", n.o = a), l !== n.i && h(t, "stroke-width", n.i = l), s !== n.n && h(t, "class", n.n = s), n.s = C(t, c, n.s), n;
1337
+ var Cn = /* @__PURE__ */ w('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z">');
1338
+ const $n = (e) => (() => {
1339
+ var n = Cn();
1340
+ return b((t) => {
1341
+ var r = e.size ?? 24, a = e.size ?? 24, o = e.fill ?? "none", i = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1342
+ return r !== t.e && u(n, "width", t.e = r), a !== t.t && u(n, "height", t.t = a), o !== t.a && u(n, "fill", t.a = o), i !== t.o && u(n, "stroke", t.o = i), l !== t.i && u(n, "stroke-width", t.i = l), s !== t.n && u(n, "class", t.n = s), t.s = F(n, c, t.s), t;
1166
1343
  }, {
1167
1344
  e: void 0,
1168
1345
  t: void 0,
@@ -1171,14 +1348,14 @@ const Gt = (e) => (() => {
1171
1348
  i: void 0,
1172
1349
  n: void 0,
1173
1350
  s: void 0
1174
- }), t;
1351
+ }), n;
1175
1352
  })();
1176
- var Jt = /* @__PURE__ */ b('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="M3 6h18"></path><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"></path><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"></path><line x1=10 x2=10 y1=11 y2=17></line><line x1=14 x2=14 y1=11 y2=17>');
1177
- const Ve = (e) => (() => {
1178
- var t = Jt();
1179
- return w((n) => {
1180
- var o = e.size ?? 24, i = e.size ?? 24, r = e.fill ?? "none", a = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1181
- return o !== n.e && h(t, "width", n.e = o), i !== n.t && h(t, "height", n.t = i), r !== n.a && h(t, "fill", n.a = r), a !== n.o && h(t, "stroke", n.o = a), l !== n.i && h(t, "stroke-width", n.i = l), s !== n.n && h(t, "class", n.n = s), n.s = C(t, c, n.s), n;
1353
+ var En = /* @__PURE__ */ w('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="M3 6h18"></path><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"></path><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"></path><line x1=10 x2=10 y1=11 y2=17></line><line x1=14 x2=14 y1=11 y2=17>');
1354
+ const it = (e) => (() => {
1355
+ var n = En();
1356
+ return b((t) => {
1357
+ var r = e.size ?? 24, a = e.size ?? 24, o = e.fill ?? "none", i = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1358
+ return r !== t.e && u(n, "width", t.e = r), a !== t.t && u(n, "height", t.t = a), o !== t.a && u(n, "fill", t.a = o), i !== t.o && u(n, "stroke", t.o = i), l !== t.i && u(n, "stroke-width", t.i = l), s !== t.n && u(n, "class", t.n = s), t.s = F(n, c, t.s), t;
1182
1359
  }, {
1183
1360
  e: void 0,
1184
1361
  t: void 0,
@@ -1187,14 +1364,14 @@ const Ve = (e) => (() => {
1187
1364
  i: void 0,
1188
1365
  n: void 0,
1189
1366
  s: void 0
1190
- }), t;
1367
+ }), n;
1191
1368
  })();
1192
- var qt = /* @__PURE__ */ b('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><circle cx=12 cy=12 r=10></circle><path d="m9 12 2 2 4-4">');
1193
- const Qt = (e) => (() => {
1194
- var t = qt();
1195
- return w((n) => {
1196
- var o = e.size ?? 24, i = e.size ?? 24, r = e.fill ?? "none", a = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1197
- return o !== n.e && h(t, "width", n.e = o), i !== n.t && h(t, "height", n.t = i), r !== n.a && h(t, "fill", n.a = r), a !== n.o && h(t, "stroke", n.o = a), l !== n.i && h(t, "stroke-width", n.i = l), s !== n.n && h(t, "class", n.n = s), n.s = C(t, c, n.s), n;
1369
+ var Pn = /* @__PURE__ */ w('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><circle cx=12 cy=12 r=10></circle><path d="m9 12 2 2 4-4">');
1370
+ const zn = (e) => (() => {
1371
+ var n = Pn();
1372
+ return b((t) => {
1373
+ var r = e.size ?? 24, a = e.size ?? 24, o = e.fill ?? "none", i = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1374
+ return r !== t.e && u(n, "width", t.e = r), a !== t.t && u(n, "height", t.t = a), o !== t.a && u(n, "fill", t.a = o), i !== t.o && u(n, "stroke", t.o = i), l !== t.i && u(n, "stroke-width", t.i = l), s !== t.n && u(n, "class", t.n = s), t.s = F(n, c, t.s), t;
1198
1375
  }, {
1199
1376
  e: void 0,
1200
1377
  t: void 0,
@@ -1203,14 +1380,14 @@ const Qt = (e) => (() => {
1203
1380
  i: void 0,
1204
1381
  n: void 0,
1205
1382
  s: void 0
1206
- }), t;
1383
+ }), n;
1207
1384
  })();
1208
- var Zt = /* @__PURE__ */ b('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><circle cx=12 cy=12 r=10></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6">');
1209
- const en = (e) => (() => {
1210
- var t = Zt();
1211
- return w((n) => {
1212
- var o = e.size ?? 24, i = e.size ?? 24, r = e.fill ?? "none", a = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1213
- return o !== n.e && h(t, "width", n.e = o), i !== n.t && h(t, "height", n.t = i), r !== n.a && h(t, "fill", n.a = r), a !== n.o && h(t, "stroke", n.o = a), l !== n.i && h(t, "stroke-width", n.i = l), s !== n.n && h(t, "class", n.n = s), n.s = C(t, c, n.s), n;
1385
+ var Tn = /* @__PURE__ */ w('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><circle cx=12 cy=12 r=10></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6">');
1386
+ const In = (e) => (() => {
1387
+ var n = Tn();
1388
+ return b((t) => {
1389
+ var r = e.size ?? 24, a = e.size ?? 24, o = e.fill ?? "none", i = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1390
+ return r !== t.e && u(n, "width", t.e = r), a !== t.t && u(n, "height", t.t = a), o !== t.a && u(n, "fill", t.a = o), i !== t.o && u(n, "stroke", t.o = i), l !== t.i && u(n, "stroke-width", t.i = l), s !== t.n && u(n, "class", t.n = s), t.s = F(n, c, t.s), t;
1214
1391
  }, {
1215
1392
  e: void 0,
1216
1393
  t: void 0,
@@ -1219,14 +1396,14 @@ const en = (e) => (() => {
1219
1396
  i: void 0,
1220
1397
  n: void 0,
1221
1398
  s: void 0
1222
- }), t;
1399
+ }), n;
1223
1400
  })();
1224
- var tn = /* @__PURE__ */ b('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="M18 6 6 18"></path><path d="m6 6 12 12">');
1225
- const ie = (e) => (() => {
1226
- var t = tn();
1227
- return w((n) => {
1228
- var o = e.size ?? 24, i = e.size ?? 24, r = e.fill ?? "none", a = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1229
- return o !== n.e && h(t, "width", n.e = o), i !== n.t && h(t, "height", n.t = i), r !== n.a && h(t, "fill", n.a = r), a !== n.o && h(t, "stroke", n.o = a), l !== n.i && h(t, "stroke-width", n.i = l), s !== n.n && h(t, "class", n.n = s), n.s = C(t, c, n.s), n;
1401
+ var On = /* @__PURE__ */ w('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="M18 6 6 18"></path><path d="m6 6 12 12">');
1402
+ const pe = (e) => (() => {
1403
+ var n = On();
1404
+ return b((t) => {
1405
+ var r = e.size ?? 24, a = e.size ?? 24, o = e.fill ?? "none", i = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1406
+ return r !== t.e && u(n, "width", t.e = r), a !== t.t && u(n, "height", t.t = a), o !== t.a && u(n, "fill", t.a = o), i !== t.o && u(n, "stroke", t.o = i), l !== t.i && u(n, "stroke-width", t.i = l), s !== t.n && u(n, "class", t.n = s), t.s = F(n, c, t.s), t;
1230
1407
  }, {
1231
1408
  e: void 0,
1232
1409
  t: void 0,
@@ -1235,97 +1412,84 @@ const ie = (e) => (() => {
1235
1412
  i: void 0,
1236
1413
  n: void 0,
1237
1414
  s: void 0
1238
- }), t;
1415
+ }), n;
1239
1416
  })();
1240
- var nn = /* @__PURE__ */ b("<div class=echo-color-selector><button class=echo-drawing-toolbar-button title=Color></button><div class=echo-color-swatch-wrapper><div class=echo-color-swatch>"), on = /* @__PURE__ */ b("<button class=echo-color-swatch-button>");
1241
- const rn = [
1242
- "#ff6b6b",
1243
- // Soft Red
1244
- "#69db7c",
1245
- // Soft Green
1246
- "#74c0fc",
1247
- // Soft Blue
1248
- "#ffd43b",
1249
- // Soft Yellow
1250
- "#da77f2",
1251
- // Soft Purple
1252
- "#66d9e8",
1253
- // Soft Cyan
1254
- "#ffa94d",
1255
- // Soft Orange
1256
- "#e599f7"
1257
- // Soft Pink
1258
- ], an = () => {
1259
- const e = x();
1417
+ var Mn = /* @__PURE__ */ w('<div class=echo-drawing-toolbar data-hide-when-drawing=true role=toolbar aria-label="Drawing Tools"><button class=echo-drawing-toolbar-button title="Clear drawings"aria-label="Clear all drawings"role=button>'), An = /* @__PURE__ */ w("<button class=echo-drawing-toolbar-button role=button>");
1418
+ const Dn = {
1419
+ rectangle: Sn,
1420
+ path: $n
1421
+ }, Fn = () => {
1422
+ const e = $(), n = Object.values(B);
1260
1423
  return (() => {
1261
- var t = nn(), n = t.firstChild, o = n.nextSibling, i = o.firstChild;
1262
- return m(i, g(re, {
1263
- get each() {
1264
- return [e.widget.state.primaryColor, ...rn];
1265
- },
1266
- children: (r) => (() => {
1267
- var a = on();
1268
- return a.$$click = () => e.drawing.setState({
1269
- selectedColor: r
1270
- }), h(a, "title", `Select ${r} color`), r != null ? a.style.setProperty("background-color", r) : a.style.removeProperty("background-color"), w(() => h(a, "data-selected", e.drawing.state.selectedColor === r)), a;
1271
- })()
1272
- })), w((r) => (r = e.drawing.state.selectedColor) != null ? n.style.setProperty("background-color", r) : n.style.removeProperty("background-color")), t;
1273
- })();
1274
- };
1275
- T(["click"]);
1276
- var sn = /* @__PURE__ */ b('<div class=echo-drawing-toolbar data-hide-when-drawing=true><button class=echo-drawing-toolbar-button title="Clear drawings">'), ln = /* @__PURE__ */ b("<button class=echo-drawing-toolbar-button>");
1277
- const cn = {
1278
- rectangle: Rt,
1279
- path: Gt
1280
- }, dn = () => {
1281
- const e = x(), t = Object.values(z);
1282
- return (() => {
1283
- var n = sn(), o = n.firstChild;
1284
- return m(n, g(re, {
1285
- each: t,
1286
- children: (i) => {
1287
- const r = cn[i.id];
1424
+ var t = Mn(), r = t.firstChild;
1425
+ return v(t, f(_, {
1426
+ each: n,
1427
+ children: (a) => {
1428
+ const o = Dn[a.id];
1288
1429
  return (() => {
1289
- var a = ln();
1290
- return a.$$click = () => e.drawing.setState({
1291
- selectedTool: i.id
1292
- }), m(a, g(r, {
1293
- class: "echo-drawing-toolbar-icon"
1294
- })), w((l) => {
1295
- var s = i.label, c = e.drawing.state.selectedTool === i.id;
1296
- return s !== l.e && h(a, "title", l.e = s), c !== l.t && h(a, "data-selected", l.t = c), l;
1430
+ var i = An();
1431
+ return i.$$click = () => e.drawing.setState({
1432
+ selectedTool: a.id
1433
+ }), v(i, f(o, {
1434
+ class: "echo-drawing-toolbar-icon",
1435
+ "aria-hidden": "true"
1436
+ })), b((l) => {
1437
+ var s = a.label, c = e.drawing.state.selectedTool === a.id, d = a.label, h = e.drawing.state.selectedTool === a.id;
1438
+ return s !== l.e && u(i, "title", l.e = s), c !== l.t && u(i, "data-selected", l.t = c), d !== l.a && u(i, "aria-label", l.a = d), h !== l.o && u(i, "aria-pressed", l.o = h), l;
1297
1439
  }, {
1298
1440
  e: void 0,
1299
- t: void 0
1300
- }), a;
1441
+ t: void 0,
1442
+ a: void 0,
1443
+ o: void 0
1444
+ }), i;
1301
1445
  })();
1302
1446
  }
1303
- }), o), m(n, g(an, {}), o), o.$$click = () => e.drawing.setState({
1447
+ }), r), v(t, f(bn, {}), r), r.$$click = () => e.drawing.setState({
1304
1448
  shapes: []
1305
- }, !0), m(o, g(Ve, {
1306
- class: "echo-drawing-toolbar-icon"
1307
- })), n;
1449
+ }, !0), v(r, f(it, {
1450
+ class: "echo-drawing-toolbar-icon",
1451
+ "aria-hidden": "true"
1452
+ })), t;
1308
1453
  })();
1309
1454
  };
1310
1455
  T(["click"]);
1311
- var hn = /* @__PURE__ */ b("<button>");
1312
- const O = (e) => {
1313
- const t = () => e.variant || "primary", n = () => e.size || "md";
1456
+ var Ln = /* @__PURE__ */ w("<div class=echo-drawing-tooltip data-hide-when-drawing=true>");
1457
+ const jn = () => {
1458
+ const e = $(), n = k(() => e.drawing.state.showTooltip && e.drawing.state.mousePosition.y && e.drawing.state.mousePosition.x && e.widget.state.isOpen && !Rt());
1459
+ return f(D, {
1460
+ get when() {
1461
+ return n();
1462
+ },
1463
+ get children() {
1464
+ var t = Ln();
1465
+ return v(t, () => e.widget.state.text.drawingTooltip.text), b((r) => {
1466
+ var a = `${e.drawing.state.mousePosition.y + 20}px`, o = `${e.drawing.state.mousePosition.x + 10}px`;
1467
+ return a !== r.e && ((r.e = a) != null ? t.style.setProperty("top", a) : t.style.removeProperty("top")), o !== r.t && ((r.t = o) != null ? t.style.setProperty("left", o) : t.style.removeProperty("left")), r;
1468
+ }, {
1469
+ e: void 0,
1470
+ t: void 0
1471
+ }), t;
1472
+ }
1473
+ });
1474
+ };
1475
+ var Nn = /* @__PURE__ */ w("<button>");
1476
+ const W = (e) => {
1477
+ const n = () => e.variant || "primary", t = () => e.size || "md";
1314
1478
  return (() => {
1315
- var o = hn();
1316
- return dt(o, Z(e, {
1479
+ var r = Nn();
1480
+ return $t(r, ge(e, {
1317
1481
  get class() {
1318
- return `echo-button echo-button-${t()} echo-button-${n()} ${e.class}`;
1482
+ return `echo-button echo-button-${n()} echo-button-${t()} ${e.class}`;
1319
1483
  }
1320
- }), !1), o;
1484
+ }), !1), r;
1321
1485
  })();
1322
1486
  };
1323
- var un = /* @__PURE__ */ b('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1=10 y1=14 x2=21 y2=3>');
1324
- const fn = (e) => (() => {
1325
- var t = un();
1326
- return w((n) => {
1327
- var o = e.size ?? 24, i = e.size ?? 24, r = e.fill ?? "none", a = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1328
- return o !== n.e && h(t, "width", n.e = o), i !== n.t && h(t, "height", n.t = i), r !== n.a && h(t, "fill", n.a = r), a !== n.o && h(t, "stroke", n.o = a), l !== n.i && h(t, "stroke-width", n.i = l), s !== n.n && h(t, "class", n.n = s), n.s = C(t, c, n.s), n;
1487
+ var qn = /* @__PURE__ */ w('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"stroke-linecap=round stroke-linejoin=round><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1=10 y1=14 x2=21 y2=3>');
1488
+ const Vn = (e) => (() => {
1489
+ var n = qn();
1490
+ return b((t) => {
1491
+ var r = e.size ?? 24, a = e.size ?? 24, o = e.fill ?? "none", i = e.stroke ?? "currentColor", l = e.strokeWidth ?? 2, s = e.class, c = e.style;
1492
+ return r !== t.e && u(n, "width", t.e = r), a !== t.t && u(n, "height", t.t = a), o !== t.a && u(n, "fill", t.a = o), i !== t.o && u(n, "stroke", t.o = i), l !== t.i && u(n, "stroke-width", t.i = l), s !== t.n && u(n, "class", t.n = s), t.s = F(n, c, t.s), t;
1329
1493
  }, {
1330
1494
  e: void 0,
1331
1495
  t: void 0,
@@ -1334,173 +1498,192 @@ const fn = (e) => (() => {
1334
1498
  i: void 0,
1335
1499
  n: void 0,
1336
1500
  s: void 0
1337
- }), t;
1501
+ }), n;
1338
1502
  })();
1339
- var gn = /* @__PURE__ */ b("<div class=echo-stored-feedback-empty>No unsubmitted feedback"), mn = /* @__PURE__ */ b("<div class=echo-stored-feedback><div class=echo-stored-feedback-header><h3>Unsubmitted Feedback</h3></div><div class=echo-stored-feedback-list>"), vn = /* @__PURE__ */ b("<div><div class=echo-stored-feedback-content><div class=echo-stored-feedback-path></div><div class=echo-stored-feedback-preview></div></div><div class=echo-stored-feedback-actions>");
1340
- const wn = () => {
1341
- const e = x(), [t, n] = M(se()), [o, i] = M(window.location.pathname), r = () => {
1342
- const d = se();
1343
- n(d), e.widget.setState({
1344
- pagesCount: d.length
1503
+ var Bn = /* @__PURE__ */ w("<div class=echo-stored-feedback-empty>No unsubmitted feedback"), Wn = /* @__PURE__ */ w("<div class=echo-stored-feedback><div class=echo-stored-feedback-header><h3>Unsubmitted Feedback</h3></div><div class=echo-stored-feedback-list>"), _n = /* @__PURE__ */ w("<div><div class=echo-stored-feedback-content><div class=echo-stored-feedback-path></div><div class=echo-stored-feedback-preview></div></div><div class=echo-stored-feedback-actions>");
1504
+ const Hn = () => {
1505
+ const e = $();
1506
+ let n;
1507
+ const [t, r] = A(xe()), [a, o] = A(window.location.pathname), i = (m) => {
1508
+ m.key === "Escape" && e.widget.state.isStoredFeedbackOpen && e.widget.setState({
1509
+ isStoredFeedbackOpen: !1
1510
+ });
1511
+ }, l = (m) => {
1512
+ if (!e.widget.state.isStoredFeedbackOpen || !n) return;
1513
+ m.composedPath().includes(n) || e.widget.setState({
1514
+ isStoredFeedbackOpen: !1
1515
+ });
1516
+ }, s = () => {
1517
+ const m = xe();
1518
+ r(m), e.widget.setState({
1519
+ pagesCount: m.length
1345
1520
  });
1346
- }, a = () => {
1347
- i(window.location.pathname);
1521
+ }, c = () => {
1522
+ o(window.location.pathname);
1348
1523
  };
1349
- W({
1524
+ M({
1350
1525
  event: "echo-storage-change",
1351
- callback: r
1352
- }), W({
1526
+ callback: s
1527
+ }), M({
1353
1528
  event: "popstate",
1354
- callback: a
1355
- }), ge({
1529
+ callback: c
1530
+ }), Oe({
1356
1531
  target: document.documentElement,
1357
1532
  options: {
1358
1533
  childList: !0,
1359
1534
  subtree: !0
1360
1535
  },
1361
1536
  callback: () => {
1362
- i(window.location.pathname);
1537
+ o(window.location.pathname);
1363
1538
  }
1539
+ }), M({
1540
+ event: "keydown",
1541
+ callback: i
1542
+ }), M({
1543
+ event: "click",
1544
+ callback: l
1364
1545
  });
1365
- const l = (d, u) => {
1366
- const f = u ? `${d}${u}` : d;
1367
- window.location.href = f, e.widget.setState({
1546
+ const d = (m, y) => {
1547
+ const E = y ? `${m}${y}` : m;
1548
+ window.location.href = E, e.widget.setState({
1368
1549
  isStoredFeedbackOpen: !1
1369
1550
  });
1370
- }, s = (d) => {
1371
- o() === d && e.methods.reset(), Fe(d);
1372
- const u = se();
1373
- n(u), e.widget.setState({
1374
- pagesCount: u.length
1551
+ }, h = (m) => {
1552
+ a() === m && e.methods.reset(), Ze(m);
1553
+ const y = xe();
1554
+ r(y), e.widget.setState({
1555
+ pagesCount: y.length
1375
1556
  });
1376
- }, c = (d) => {
1377
- if (d === "/") return "/";
1378
- const u = d.split("/");
1379
- return u.length <= 4 ? d : `/${u[1]}/.../${u[u.length - 1]}`;
1557
+ }, g = (m) => {
1558
+ if (m === "/") return "/";
1559
+ const y = m.split("/");
1560
+ return y.length <= 4 ? m : `/${y[1]}/.../${y[y.length - 1]}`;
1380
1561
  };
1381
- return g(j, {
1562
+ return f(D, {
1382
1563
  get when() {
1383
1564
  return e.widget.state.isStoredFeedbackOpen;
1384
1565
  },
1385
1566
  get children() {
1386
- var d = mn(), u = d.firstChild;
1387
- u.firstChild;
1388
- var f = u.nextSibling;
1389
- return m(u, g(O, {
1567
+ var m = Wn(), y = m.firstChild;
1568
+ y.firstChild;
1569
+ var E = y.nextSibling, S = n;
1570
+ return typeof S == "function" ? V(S, m) : n = m, v(y, f(W, {
1390
1571
  variant: "secondary",
1391
1572
  size: "sm",
1392
1573
  onClick: () => e.widget.setState({
1393
1574
  isStoredFeedbackOpen: !1
1394
1575
  }),
1395
1576
  get children() {
1396
- return g(ie, {
1577
+ return f(pe, {
1397
1578
  size: 20
1398
1579
  });
1399
1580
  }
1400
- }), null), m(f, g(re, {
1581
+ }), null), v(E, f(_, {
1401
1582
  get each() {
1402
1583
  return t();
1403
1584
  },
1404
- children: (v) => {
1405
- const y = p(() => v.path === o());
1585
+ children: (C) => {
1586
+ const p = k(() => C.path === a());
1406
1587
  return (() => {
1407
- var k = vn(), I = k.firstChild, L = I.firstChild, Re = L.nextSibling, we = I.nextSibling;
1408
- return m(L, () => c(v.path)), m(Re, () => v.state.feedback.comment), m(we, (() => {
1409
- var D = p(() => !y());
1410
- return () => D() && g(O, {
1588
+ var P = _n(), z = P.firstChild, x = z.firstChild, H = x.nextSibling, q = z.nextSibling;
1589
+ return v(x, () => g(C.path)), v(H, () => C.state.feedback.message), v(q, (() => {
1590
+ var I = k(() => !p());
1591
+ return () => I() && f(W, {
1411
1592
  class: "echo-stored-feedback-link",
1412
1593
  variant: "secondary",
1413
1594
  size: "sm",
1414
- onClick: () => l(v.path, v.state.latestQuery),
1595
+ onClick: () => d(C.path, C.state.latestQuery),
1415
1596
  get children() {
1416
- return g(fn, {});
1597
+ return f(Vn, {});
1417
1598
  }
1418
1599
  });
1419
- })(), null), m(we, g(O, {
1600
+ })(), null), v(q, f(W, {
1420
1601
  class: "echo-stored-feedback-delete",
1421
1602
  variant: "secondary",
1422
1603
  size: "sm",
1423
- onClick: () => s(v.path),
1604
+ onClick: () => h(C.path),
1424
1605
  children: "Delete"
1425
- }), null), w((D) => {
1426
- var be = `echo-stored-feedback-item ${y() ? "echo-stored-feedback-item-current" : ""}`, ye = v.path;
1427
- return be !== D.e && De(k, D.e = be), ye !== D.t && h(L, "title", D.t = ye), D;
1606
+ }), null), b((I) => {
1607
+ var Me = `echo-stored-feedback-item ${p() ? "echo-stored-feedback-item-current" : ""}`, Ae = C.path;
1608
+ return Me !== I.e && Re(P, I.e = Me), Ae !== I.t && u(x, "title", I.t = Ae), I;
1428
1609
  }, {
1429
1610
  e: void 0,
1430
1611
  t: void 0
1431
- }), k;
1612
+ }), P;
1432
1613
  })();
1433
1614
  }
1434
- }), null), m(f, g(j, {
1615
+ }), null), v(E, f(D, {
1435
1616
  get when() {
1436
1617
  return t().length === 0;
1437
1618
  },
1438
1619
  get children() {
1439
- return gn();
1620
+ return Bn();
1440
1621
  }
1441
- }), null), d;
1622
+ }), null), m;
1442
1623
  }
1443
1624
  });
1444
1625
  };
1445
- var bn = /* @__PURE__ */ b("<button class=echo-launcher-button>"), yn = /* @__PURE__ */ b("<span class=echo-launcher-button-count>");
1446
- const pn = () => {
1447
- const e = x(), [t, n] = M(!1);
1448
- let o;
1449
- const i = () => {
1450
- o && window.clearTimeout(o), o = window.setTimeout(() => {
1451
- const c = je("welcome_message_shown", !1);
1452
- !e.widget.state.isOpen && !e.widget.state.isStoredFeedbackOpen && c && n(!0);
1626
+ var Un = /* @__PURE__ */ w('<button class=echo-launcher-button aria-label="Open feedback form"role=button>'), Yn = /* @__PURE__ */ w("<span class=echo-launcher-button-count role=button tabindex=0>");
1627
+ const Rn = () => {
1628
+ const e = $(), [n, t] = A(!1);
1629
+ let r;
1630
+ const a = () => {
1631
+ r && window.clearTimeout(r), r = window.setTimeout(() => {
1632
+ const c = G("welcome_message_shown", !1);
1633
+ !e.widget.state.isOpen && !e.widget.state.isStoredFeedbackOpen && c && t(!0);
1453
1634
  }, 4e3);
1454
- }, r = () => {
1455
- n(!1);
1456
- }, a = () => {
1457
- i();
1635
+ }, o = () => {
1636
+ t(!1);
1637
+ }, i = () => {
1638
+ a();
1458
1639
  }, l = () => {
1459
1640
  e.widget.setState({
1460
1641
  isOpen: !e.widget.state.isOpen
1461
1642
  }), e.widget.setState({
1462
1643
  welcomeMessageIsClosing: !0
1463
- }), he("welcome_message_shown", !0);
1644
+ }), ie("welcome_message_shown", !0);
1464
1645
  };
1465
- oe(() => {
1466
- e.widget.state.isOpen || (n(!1), i()), e.widget.state.isStoredFeedbackOpen && n(!1);
1646
+ Y(() => {
1647
+ e.widget.state.isOpen || (t(!1), a()), e.widget.state.isStoredFeedbackOpen && t(!1);
1467
1648
  });
1468
1649
  const s = (c) => {
1469
1650
  c.stopPropagation(), e.widget.setState({
1470
1651
  isStoredFeedbackOpen: !e.widget.state.isStoredFeedbackOpen
1471
- }), n(!1);
1652
+ }), t(!1);
1472
1653
  };
1473
1654
  return [(() => {
1474
- var c = bn();
1475
- return c.addEventListener("pointerleave", a), c.addEventListener("pointerenter", r), c.$$click = l, m(c, g(Kt, {
1655
+ var c = Un();
1656
+ return c.addEventListener("pointerleave", i), c.addEventListener("pointerenter", o), c.$$click = l, v(c, f(xn, {
1476
1657
  stroke: "white",
1477
- fill: "#ffffff"
1478
- }), null), m(c, (() => {
1479
- var d = p(() => e.widget.state.pagesCount > 0);
1658
+ fill: "#ffffff",
1659
+ "aria-hidden": "true"
1660
+ }), null), v(c, (() => {
1661
+ var d = k(() => e.widget.state.pagesCount > 0);
1480
1662
  return () => d() && (() => {
1481
- var u = yn();
1482
- return u.$$click = s, m(u, () => e.widget.state.pagesCount), u;
1663
+ var h = Yn();
1664
+ return h.$$click = s, v(h, () => e.widget.state.pagesCount), b(() => u(h, "aria-label", `View ${e.widget.state.pagesCount} stored feedback items`)), h;
1483
1665
  })();
1484
- })(), null), w((d) => {
1485
- var u = e.widget.state.isOpen, f = t() ? "45px" : "0";
1486
- return u !== d.e && h(c, "data-hidden", d.e = u), f !== d.t && ((d.t = f) != null ? c.style.setProperty("left", f) : c.style.removeProperty("left")), d;
1666
+ })(), null), b((d) => {
1667
+ var h = e.widget.state.isOpen, g = `translateX(${n() ? "45px" : "0"})`, m = e.widget.state.isOpen;
1668
+ return h !== d.e && u(c, "data-hidden", d.e = h), g !== d.t && ((d.t = g) != null ? c.style.setProperty("transform", g) : c.style.removeProperty("transform")), m !== d.a && u(c, "aria-expanded", d.a = m), d;
1487
1669
  }, {
1488
1670
  e: void 0,
1489
- t: void 0
1671
+ t: void 0,
1672
+ a: void 0
1490
1673
  }), c;
1491
- })(), g(wn, {})];
1674
+ })(), f(Hn, {})];
1492
1675
  };
1493
1676
  T(["click"]);
1494
- var xn = /* @__PURE__ */ b("<div class=echo-notification><div class=echo-notification-icon></div><div class=echo-notification-content><div class=echo-notification-title></div><div class=echo-notification-message>");
1495
- const kn = () => {
1496
- const e = x(), t = () => {
1677
+ var Kn = /* @__PURE__ */ w("<div class=echo-notification><div class=echo-notification-icon></div><div class=echo-notification-content><div class=echo-notification-title></div><div class=echo-notification-message>");
1678
+ const Gn = () => {
1679
+ const e = $(), n = () => {
1497
1680
  e.widget.setState({
1498
1681
  notification: {
1499
1682
  ...e.widget.state.notification,
1500
1683
  show: !1
1501
1684
  }
1502
1685
  });
1503
- }, n = () => {
1686
+ }, t = () => {
1504
1687
  switch (e.widget.state.notification.type) {
1505
1688
  case "success":
1506
1689
  return e.widget.state.text.notification.successTitle;
@@ -1511,111 +1694,182 @@ const kn = () => {
1511
1694
  }
1512
1695
  };
1513
1696
  return (() => {
1514
- var o = xn(), i = o.firstChild, r = i.nextSibling, a = r.firstChild, l = a.nextSibling;
1515
- return m(o, g(O, {
1697
+ var r = Kn(), a = r.firstChild, o = a.nextSibling, i = o.firstChild, l = i.nextSibling;
1698
+ return v(r, f(W, {
1516
1699
  class: "echo-notification-hide",
1517
1700
  variant: "secondary",
1518
1701
  size: "sm",
1519
- onClick: t,
1702
+ onClick: n,
1520
1703
  get title() {
1521
1704
  return e.widget.state.text.notification.hideTitle;
1522
1705
  },
1523
1706
  get children() {
1524
- return g(ie, {
1707
+ return f(pe, {
1525
1708
  size: 20
1526
1709
  });
1527
1710
  }
1528
- }), i), m(i, (() => {
1529
- var s = p(() => e.widget.state.notification.type === "success");
1530
- return () => s() ? g(Qt, {
1711
+ }), a), v(a, (() => {
1712
+ var s = k(() => e.widget.state.notification.type === "success");
1713
+ return () => s() ? f(zn, {
1531
1714
  size: 32
1532
1715
  }) : (() => {
1533
- var c = p(() => e.widget.state.notification.type === "error");
1534
- return () => c() ? g(en, {
1716
+ var c = k(() => e.widget.state.notification.type === "error");
1717
+ return () => c() ? f(In, {
1535
1718
  size: 32
1536
1719
  }) : null;
1537
1720
  })();
1538
- })()), m(a, n), m(l, () => {
1721
+ })()), v(i, t), v(l, () => {
1539
1722
  var s;
1540
1723
  return (s = e.widget.state.notification) == null ? void 0 : s.message;
1541
- }), w((s) => {
1542
- var c = e.widget.state.notification.type, d = !e.widget.state.notification.type, u = !e.widget.state.notification.show;
1543
- return c !== s.e && h(o, "data-type", s.e = c), d !== s.t && h(o, "data-empty", s.t = d), u !== s.a && h(o, "data-hidden", s.a = u), s;
1724
+ }), b((s) => {
1725
+ var c = e.widget.state.notification.type, d = !e.widget.state.notification.type, h = !e.widget.state.notification.show;
1726
+ return c !== s.e && u(r, "data-type", s.e = c), d !== s.t && u(r, "data-empty", s.t = d), h !== s.a && u(r, "data-hidden", s.a = h), s;
1544
1727
  }, {
1545
1728
  e: void 0,
1546
1729
  t: void 0,
1547
1730
  a: void 0
1548
- }), o;
1731
+ }), r;
1549
1732
  })();
1550
1733
  };
1551
- var Sn = /* @__PURE__ */ b("<button class=echo-welcome-message><span class=echo-welcome-message-pulsar></span><div class=echo-welcome-message-close role=button tabindex=0>");
1552
- const Cn = () => {
1553
- const e = x(), t = je("welcome_message_shown", !1), n = (i) => {
1554
- i.stopPropagation(), e.widget.setState({
1734
+ var Xn = /* @__PURE__ */ w("<div class=echo-shape-actions data-hide-when-drawing=true>");
1735
+ const Jn = () => {
1736
+ const e = $();
1737
+ let n;
1738
+ const [t, r] = A({
1739
+ x: window.scrollX,
1740
+ y: window.scrollY
1741
+ });
1742
+ M({
1743
+ event: "scroll",
1744
+ callback: () => {
1745
+ r({
1746
+ x: window.scrollX,
1747
+ y: window.scrollY
1748
+ });
1749
+ }
1750
+ });
1751
+ const o = () => {
1752
+ e.drawing.state.selectedShapeId && e.drawing.setState({
1753
+ shapes: e.drawing.state.shapes.filter((s) => s.id !== e.drawing.state.selectedShapeId),
1754
+ selectedShapeId: null
1755
+ });
1756
+ }, i = k(() => e.drawing.state.selectedShapeId ? e.drawing.state.shapes.find((s) => s.id === e.drawing.state.selectedShapeId) : null), l = k(() => {
1757
+ const s = i(), c = n == null ? void 0 : n.getBoundingClientRect();
1758
+ if (!s || !c) return null;
1759
+ let d = null;
1760
+ if (s.type === "rectangle") {
1761
+ const m = ot(s.points);
1762
+ if (!m) return null;
1763
+ d = {
1764
+ x: m.x + m.width / 2,
1765
+ y: m.y
1766
+ };
1767
+ } else if (s.type === "path" && s.points.length > 0)
1768
+ d = {
1769
+ x: s.points[0].x,
1770
+ y: s.points[0].y
1771
+ };
1772
+ else
1773
+ return null;
1774
+ const h = 8, g = t();
1775
+ return {
1776
+ x: Math.max(c.width / 2 + h, Math.min(window.innerWidth - c.width / 2 - h, d.x - g.x)),
1777
+ y: Math.max(c.height + h, Math.min(window.innerHeight - h, d.y - g.y))
1778
+ };
1779
+ });
1780
+ return (() => {
1781
+ var s = Xn(), c = n;
1782
+ return typeof c == "function" ? V(c, s) : n = s, s.style.setProperty("top", "0"), s.style.setProperty("left", "0"), v(s, f(W, {
1783
+ onClick: o,
1784
+ size: "sm",
1785
+ variant: "secondary",
1786
+ title: "Delete shape",
1787
+ get children() {
1788
+ return f(it, {
1789
+ size: 20
1790
+ });
1791
+ }
1792
+ })), b((d) => {
1793
+ var m, y;
1794
+ var h = !l(), g = `translate(calc(${(m = l()) == null ? void 0 : m.x}px - 50%), calc(${(y = l()) == null ? void 0 : y.y}px - 125%))`;
1795
+ return h !== d.e && (s.hidden = d.e = h), g !== d.t && ((d.t = g) != null ? s.style.setProperty("transform", g) : s.style.removeProperty("transform")), d;
1796
+ }, {
1797
+ e: void 0,
1798
+ t: void 0
1799
+ }), s;
1800
+ })();
1801
+ };
1802
+ var Zn = /* @__PURE__ */ w("<button class=echo-welcome-message><span class=echo-welcome-message-pulsar></span><div class=echo-welcome-message-close role=button tabindex=0>");
1803
+ const Qn = () => {
1804
+ const e = $(), n = G("welcome_message_shown", !1), t = (a) => {
1805
+ a.stopPropagation(), e.widget.setState({
1555
1806
  welcomeMessageIsClosing: !0
1556
- }), he("welcome_message_shown", !0);
1557
- }, o = () => {
1807
+ }), ie("welcome_message_shown", !0);
1808
+ }, r = () => {
1558
1809
  e.widget.setState({
1559
1810
  isOpen: !0
1560
1811
  }), e.widget.setState({
1561
1812
  welcomeMessageIsClosing: !0
1562
- }), he("welcome_message_shown", !0);
1813
+ }), ie("welcome_message_shown", !0);
1563
1814
  };
1564
- return t ? null : (() => {
1565
- var i = Sn(), r = i.firstChild, a = r.nextSibling;
1566
- return i.$$click = o, i.style.setProperty("bottom", "80px"), i.style.setProperty("right", "20px"), m(i, () => e.widget.state.text.welcomeMessage.text, a), a.$$keydown = (l) => l.key === "Enter" && n(l), a.$$click = n, m(a, g(ie, {
1815
+ return n ? null : (() => {
1816
+ var a = Zn(), o = a.firstChild, i = o.nextSibling;
1817
+ return a.$$click = r, a.style.setProperty("bottom", "80px"), a.style.setProperty("right", "20px"), v(a, () => e.widget.state.text.welcomeMessage.text, i), i.$$keydown = (l) => l.key === "Enter" && t(l), i.$$click = t, v(i, f(pe, {
1567
1818
  size: 16,
1568
1819
  strokeWidth: 3
1569
- })), w((l) => {
1820
+ })), b((l) => {
1570
1821
  var s = e.widget.state.welcomeMessageIsClosing, c = e.widget.state.text.welcomeMessage.closeAriaLabel;
1571
- return s !== l.e && h(i, "data-hidden", l.e = s), c !== l.t && h(a, "aria-label", l.t = c), l;
1822
+ return s !== l.e && u(a, "data-hidden", l.e = s), c !== l.t && u(i, "aria-label", l.t = c), l;
1572
1823
  }, {
1573
1824
  e: void 0,
1574
1825
  t: void 0
1575
- }), i;
1826
+ }), a;
1576
1827
  })();
1577
1828
  };
1578
1829
  T(["click", "keydown"]);
1579
- var Pn = /* @__PURE__ */ b("<svg><rect class=echo-shape fill=transparent vector-effect=non-scaling-stroke></svg>", !1, !0), $n = /* @__PURE__ */ b("<svg><path class=echo-shape fill=none vector-effect=non-scaling-stroke stroke-linecap=round></svg>", !1, !0);
1580
- const Oe = (e) => {
1581
- const t = p(() => e.id === e.selectedShapeId);
1582
- return [g(j, {
1830
+ var er = /* @__PURE__ */ w("<svg><rect class=echo-shape fill=transparent vector-effect=non-scaling-stroke role=img></svg>", !1, !0), tr = /* @__PURE__ */ w("<svg><path class=echo-shape fill=none vector-effect=non-scaling-stroke stroke-linecap=round role=img></svg>", !1, !0);
1831
+ const He = (e) => {
1832
+ const n = k(() => e.id === e.selectedShapeId);
1833
+ return [f(D, {
1583
1834
  get when() {
1584
1835
  return e.type === "rectangle";
1585
1836
  },
1586
1837
  get children() {
1587
- return g(En, Z(e, {
1838
+ return f(nr, ge(e, {
1588
1839
  get isSelected() {
1589
- return t();
1840
+ return n();
1590
1841
  }
1591
1842
  }));
1592
1843
  }
1593
- }), g(j, {
1844
+ }), f(D, {
1594
1845
  get when() {
1595
1846
  return e.type === "path";
1596
1847
  },
1597
1848
  get children() {
1598
- return g(zn, Z(e, {
1849
+ return f(rr, ge(e, {
1599
1850
  get isSelected() {
1600
- return t();
1851
+ return n();
1601
1852
  }
1602
1853
  }));
1603
1854
  }
1604
1855
  })];
1605
- }, En = (e) => {
1606
- const t = p(() => Ue(e.points));
1607
- return g(j, {
1856
+ }, nr = (e) => {
1857
+ const n = k(() => ot(e.points));
1858
+ return f(D, {
1608
1859
  get when() {
1609
- return t();
1860
+ return n();
1610
1861
  },
1611
1862
  get children() {
1612
- var n = Pn();
1613
- return n.$$click = () => {
1614
- var o;
1615
- return (o = e.onShapeClick) == null ? void 0 : o.call(e, e.id);
1616
- }, w((o) => {
1617
- var i = e.id, r = e.isSelected, a = t().x, l = t().y, s = t().width, c = t().height, d = e.color, u = z.rectangle.strokeWidth, f = e.isSelected ? z.rectangle.opacity.selected : z.rectangle.opacity.default, v = e.isSelected ? "5,5" : "none", y = e.isSelected ? "move" : "pointer";
1618
- return i !== o.e && h(n, "data-shape-id", o.e = i), r !== o.t && h(n, "data-selected", o.t = r), a !== o.a && h(n, "x", o.a = a), l !== o.o && h(n, "y", o.o = l), s !== o.i && h(n, "width", o.i = s), c !== o.n && h(n, "height", o.n = c), d !== o.s && h(n, "stroke", o.s = d), u !== o.h && h(n, "stroke-width", o.h = u), f !== o.r && h(n, "opacity", o.r = f), v !== o.d && h(n, "stroke-dasharray", o.d = v), y !== o.l && h(n, "cursor", o.l = y), o;
1863
+ var t = er();
1864
+ return t.$$keydown = (r) => {
1865
+ var a;
1866
+ return r.key === "Enter" && ((a = e.onShapeClick) == null ? void 0 : a.call(e, e.id));
1867
+ }, t.$$click = () => {
1868
+ var r;
1869
+ return (r = e.onShapeClick) == null ? void 0 : r.call(e, e.id);
1870
+ }, b((r) => {
1871
+ var a = e.id, o = e.isSelected, i = n().x, l = n().y, s = n().width, c = n().height, d = e.color, h = B.rectangle.strokeWidth, g = e.isSelected ? B.rectangle.opacity.selected : B.rectangle.opacity.default, m = e.isSelected ? "5,5" : "none", y = e.isSelected ? "move" : "pointer", E = `Rectangle shape ${e.isSelected ? "(selected)" : ""}`, S = e.onShapeClick ? 0 : -1;
1872
+ return a !== r.e && u(t, "data-shape-id", r.e = a), o !== r.t && u(t, "data-selected", r.t = o), i !== r.a && u(t, "x", r.a = i), l !== r.o && u(t, "y", r.o = l), s !== r.i && u(t, "width", r.i = s), c !== r.n && u(t, "height", r.n = c), d !== r.s && u(t, "stroke", r.s = d), h !== r.h && u(t, "stroke-width", r.h = h), g !== r.r && u(t, "opacity", r.r = g), m !== r.d && u(t, "stroke-dasharray", r.d = m), y !== r.l && u(t, "cursor", r.l = y), E !== r.u && u(t, "aria-label", r.u = E), S !== r.c && u(t, "tabindex", r.c = S), r;
1619
1873
  }, {
1620
1874
  e: void 0,
1621
1875
  t: void 0,
@@ -1627,24 +1881,29 @@ const Oe = (e) => {
1627
1881
  h: void 0,
1628
1882
  r: void 0,
1629
1883
  d: void 0,
1630
- l: void 0
1631
- }), n;
1884
+ l: void 0,
1885
+ u: void 0,
1886
+ c: void 0
1887
+ }), t;
1632
1888
  }
1633
1889
  });
1634
- }, zn = (e) => {
1635
- const t = p(() => Tt(e.points));
1636
- return g(j, {
1890
+ }, rr = (e) => {
1891
+ const n = k(() => Kt(e.points));
1892
+ return f(D, {
1637
1893
  get when() {
1638
- return t();
1894
+ return n();
1639
1895
  },
1640
1896
  get children() {
1641
- var n = $n();
1642
- return n.$$click = () => {
1643
- var o;
1644
- return (o = e.onShapeClick) == null ? void 0 : o.call(e, e.id);
1645
- }, w((o) => {
1646
- var i = e.id, r = e.isSelected, a = t(), l = e.color, s = z.path.strokeWidth, c = e.isSelected ? z.path.opacity.selected : z.path.opacity.default, d = e.isSelected ? "move" : "pointer";
1647
- return i !== o.e && h(n, "data-shape-id", o.e = i), r !== o.t && h(n, "data-selected", o.t = r), a !== o.a && h(n, "d", o.a = a), l !== o.o && h(n, "stroke", o.o = l), s !== o.i && h(n, "stroke-width", o.i = s), c !== o.n && h(n, "opacity", o.n = c), d !== o.s && h(n, "cursor", o.s = d), o;
1897
+ var t = tr();
1898
+ return t.$$keydown = (r) => {
1899
+ var a;
1900
+ return r.key === "Enter" && ((a = e.onShapeClick) == null ? void 0 : a.call(e, e.id));
1901
+ }, t.$$click = () => {
1902
+ var r;
1903
+ return (r = e.onShapeClick) == null ? void 0 : r.call(e, e.id);
1904
+ }, b((r) => {
1905
+ var a = e.id, o = e.isSelected, i = n(), l = e.color, s = B.path.strokeWidth, c = e.isSelected ? B.path.opacity.selected : B.path.opacity.default, d = e.isSelected ? "move" : "pointer", h = `Freehand shape ${e.isSelected ? "(selected)" : ""}`, g = e.onShapeClick ? 0 : -1;
1906
+ return a !== r.e && u(t, "data-shape-id", r.e = a), o !== r.t && u(t, "data-selected", r.t = o), i !== r.a && u(t, "d", r.a = i), l !== r.o && u(t, "stroke", r.o = l), s !== r.i && u(t, "stroke-width", r.i = s), c !== r.n && u(t, "opacity", r.n = c), d !== r.s && u(t, "cursor", r.s = d), h !== r.h && u(t, "aria-label", r.h = h), g !== r.r && u(t, "tabindex", r.r = g), r;
1648
1907
  }, {
1649
1908
  e: void 0,
1650
1909
  t: void 0,
@@ -1652,140 +1911,54 @@ const Oe = (e) => {
1652
1911
  o: void 0,
1653
1912
  i: void 0,
1654
1913
  n: void 0,
1655
- s: void 0
1656
- }), n;
1657
- }
1658
- });
1659
- };
1660
- T(["click"]);
1661
- var On = /* @__PURE__ */ b("<div class=echo-drawing-tooltip data-hide-when-drawing=true>");
1662
- const Tn = () => {
1663
- const e = x(), t = p(() => e.drawing.state.showTooltip && e.drawing.state.mousePosition.y && e.drawing.state.mousePosition.x && e.widget.state.isOpen && !Ot());
1664
- return g(j, {
1665
- get when() {
1666
- return t();
1667
- },
1668
- get children() {
1669
- var n = On();
1670
- return m(n, () => e.widget.state.text.drawingTooltip.text), w((o) => {
1671
- var i = `${e.drawing.state.mousePosition.y + 20}px`, r = `${e.drawing.state.mousePosition.x + 10}px`;
1672
- return i !== o.e && ((o.e = i) != null ? n.style.setProperty("top", i) : n.style.removeProperty("top")), r !== o.t && ((o.t = r) != null ? n.style.setProperty("left", r) : n.style.removeProperty("left")), o;
1673
- }, {
1674
- e: void 0,
1675
- t: void 0
1676
- }), n;
1914
+ s: void 0,
1915
+ h: void 0,
1916
+ r: void 0
1917
+ }), t;
1677
1918
  }
1678
1919
  });
1679
1920
  };
1680
- var In = /* @__PURE__ */ b("<div class=echo-shape-actions data-hide-when-drawing=true>");
1681
- const Dn = () => {
1682
- const e = x();
1683
- let t;
1684
- const [n, o] = M({
1685
- x: window.scrollX,
1686
- y: window.scrollY
1687
- });
1688
- W({
1689
- event: "scroll",
1690
- callback: () => {
1691
- o({
1692
- x: window.scrollX,
1693
- y: window.scrollY
1694
- });
1695
- }
1696
- });
1697
- const r = () => {
1698
- e.drawing.state.selectedShapeId && e.drawing.setState({
1699
- shapes: e.drawing.state.shapes.filter((s) => s.id !== e.drawing.state.selectedShapeId),
1700
- selectedShapeId: null
1701
- });
1702
- }, a = p(() => e.drawing.state.selectedShapeId ? e.drawing.state.shapes.find((s) => s.id === e.drawing.state.selectedShapeId) : null), l = p(() => {
1703
- const s = a(), c = t == null ? void 0 : t.getBoundingClientRect();
1704
- if (!s || !c) return null;
1705
- let d = null;
1706
- if (s.type === "rectangle") {
1707
- const v = Ue(s.points);
1708
- if (!v) return null;
1709
- d = {
1710
- x: v.x + v.width / 2,
1711
- y: v.y
1712
- };
1713
- } else if (s.type === "path" && s.points.length > 0)
1714
- d = {
1715
- x: s.points[0].x,
1716
- y: s.points[0].y
1717
- };
1718
- else
1719
- return null;
1720
- const u = 8, f = n();
1721
- return {
1722
- x: Math.max(c.width / 2 + u, Math.min(window.innerWidth - c.width / 2 - u, d.x - f.x)),
1723
- y: Math.max(c.height + u, Math.min(window.innerHeight - u, d.y - f.y))
1724
- };
1725
- });
1726
- return (() => {
1727
- var s = In(), c = t;
1728
- return typeof c == "function" ? G(c, s) : t = s, m(s, g(O, {
1729
- onClick: r,
1730
- size: "sm",
1731
- variant: "secondary",
1732
- title: "Delete shape",
1733
- get children() {
1734
- return g(Ve, {
1735
- size: 20
1736
- });
1737
- }
1738
- })), w((d) => {
1739
- var y, k;
1740
- var u = !l(), f = l() ? `${(y = l()) == null ? void 0 : y.x}px` : "0", v = l() ? `${(k = l()) == null ? void 0 : k.y}px` : "0";
1741
- return u !== d.e && (s.hidden = d.e = u), f !== d.t && ((d.t = f) != null ? s.style.setProperty("left", f) : s.style.removeProperty("left")), v !== d.a && ((d.a = v) != null ? s.style.setProperty("top", v) : s.style.removeProperty("top")), d;
1742
- }, {
1743
- e: void 0,
1744
- t: void 0,
1745
- a: void 0
1746
- }), s;
1747
- })();
1748
- };
1749
- var Mn = /* @__PURE__ */ b('<div class=echo-drawing-layer-container><svg width=100% height=100% class=echo-drawing-layer preserveAspectRatio=none><path class=echo-drawing-layer-mask fill="rgba(33, 43, 55, 1)"fill-opacity=0.2 fill-rule=evenodd>');
1750
- const An = () => {
1751
- const e = x();
1752
- let t;
1753
- return fe(() => {
1754
- t == null || t.addEventListener("mousemove", e.drawing.methods.handleMove), t == null || t.addEventListener("mouseup", e.drawing.methods.handleEnd), t == null || t.addEventListener("touchmove", e.drawing.methods.handleMove, {
1921
+ T(["click", "keydown"]);
1922
+ var or = /* @__PURE__ */ w('<div class=echo-drawing-layer-container role=application aria-label="Drawing Canvas"><svg width=100% height=100% class=echo-drawing-layer preserveAspectRatio=none role=img aria-label="Drawing Area"><path class=echo-drawing-layer-mask fill="rgba(33, 43, 55, 1)"fill-opacity=0.2 fill-rule=evenodd aria-hidden=true>');
1923
+ const ar = () => {
1924
+ const e = $();
1925
+ let n;
1926
+ return ye(() => {
1927
+ n == null || n.addEventListener("mousemove", e.drawing.methods.handleMove), n == null || n.addEventListener("mouseup", e.drawing.methods.handleEnd), n == null || n.addEventListener("touchmove", e.drawing.methods.handleMove, {
1755
1928
  passive: !1
1756
- }), t == null || t.addEventListener("touchend", e.drawing.methods.handleEnd);
1757
- }), K(() => {
1758
- t == null || t.removeEventListener("mousemove", e.drawing.methods.handleMove), t == null || t.removeEventListener("mouseup", e.drawing.methods.handleEnd), t == null || t.removeEventListener("touchmove", e.drawing.methods.handleMove), t == null || t.removeEventListener("touchend", e.drawing.methods.handleEnd);
1929
+ }), n == null || n.addEventListener("touchend", e.drawing.methods.handleEnd);
1930
+ }), ee(() => {
1931
+ n == null || n.removeEventListener("mousemove", e.drawing.methods.handleMove), n == null || n.removeEventListener("mouseup", e.drawing.methods.handleEnd), n == null || n.removeEventListener("touchmove", e.drawing.methods.handleMove), n == null || n.removeEventListener("touchend", e.drawing.methods.handleEnd);
1759
1932
  }), (() => {
1760
- var n = Mn(), o = n.firstChild, i = o.firstChild, r = t;
1761
- return typeof r == "function" ? G(r, n) : t = n, m(n, g(Tn, {}), o), m(n, g(Dn, {}), o), _(o, "touchend", e.drawing.methods.handleLeave, !0), _(o, "mouseleave", e.drawing.methods.handleLeave), _(o, "mouseenter", e.drawing.methods.handleEnter), o.$$touchmove = (a) => {
1762
- a.preventDefault(), e.drawing.methods.handleMove(a);
1763
- }, _(o, "mousemove", e.drawing.methods.handleMove, !0), o.$$touchstart = (a) => {
1764
- a.preventDefault(), e.drawing.methods.handleStart(a), e.drawing.methods.handleEnter(a), e.drawing.setState({
1933
+ var t = or(), r = t.firstChild, a = r.firstChild, o = n;
1934
+ return typeof o == "function" ? V(o, t) : n = t, v(t, f(jn, {}), r), v(t, f(Jn, {}), r), U(r, "touchend", e.drawing.methods.handleLeave, !0), U(r, "mouseleave", e.drawing.methods.handleLeave), U(r, "mouseenter", e.drawing.methods.handleEnter), r.$$touchmove = (i) => {
1935
+ i.preventDefault(), e.drawing.methods.handleMove(i);
1936
+ }, U(r, "mousemove", e.drawing.methods.handleMove, !0), r.$$touchstart = (i) => {
1937
+ i.preventDefault(), e.drawing.methods.handleStart(i), e.drawing.methods.handleEnter(i), e.drawing.setState({
1765
1938
  showTooltip: !1,
1766
1939
  hasDrawn: !0
1767
1940
  });
1768
- }, o.$$mousedown = (a) => {
1769
- e.drawing.methods.handleStart(a), e.drawing.setState({
1941
+ }, r.$$mousedown = (i) => {
1942
+ e.drawing.methods.handleStart(i), e.drawing.setState({
1770
1943
  showTooltip: !1,
1771
1944
  hasDrawn: !0
1772
1945
  });
1773
- }, m(o, g(re, {
1946
+ }, v(r, f(_, {
1774
1947
  get each() {
1775
1948
  return e.drawing.state.shapes;
1776
1949
  },
1777
- children: (a) => g(Oe, {
1950
+ children: (i) => f(He, {
1778
1951
  get id() {
1779
- return a.id;
1952
+ return i.id;
1780
1953
  },
1781
1954
  get type() {
1782
- return a.type;
1955
+ return i.type;
1783
1956
  },
1784
1957
  get color() {
1785
- return a.color;
1958
+ return i.color;
1786
1959
  },
1787
1960
  get points() {
1788
- return a.points;
1961
+ return i.points;
1789
1962
  },
1790
1963
  get selectedShapeId() {
1791
1964
  return e.drawing.state.selectedShapeId;
@@ -1794,7 +1967,7 @@ const An = () => {
1794
1967
  return e.drawing.methods.handleShapeClick;
1795
1968
  }
1796
1969
  })
1797
- }), null), m(o, g(Oe, {
1970
+ }), null), v(r, f(He, {
1798
1971
  id: "temp",
1799
1972
  get type() {
1800
1973
  return e.drawing.state.selectedTool;
@@ -1808,191 +1981,594 @@ const An = () => {
1808
1981
  get selectedShapeId() {
1809
1982
  return e.drawing.state.selectedShapeId;
1810
1983
  }
1811
- }), null), w((a) => {
1812
- var l = e.drawing.state.cursor, s = At({
1984
+ }), null), b((i) => {
1985
+ var l = e.drawing.state.cursor, s = nn({
1813
1986
  width: e.widget.state.dimensions.width,
1814
1987
  height: e.widget.state.dimensions.height
1815
1988
  }, e.drawing.state.currentPoints, e.drawing.state.shapes);
1816
- return l !== a.e && ((a.e = l) != null ? n.style.setProperty("cursor", l) : n.style.removeProperty("cursor")), s !== a.t && h(i, "d", a.t = s), a;
1989
+ return l !== i.e && ((i.e = l) != null ? t.style.setProperty("cursor", l) : t.style.removeProperty("cursor")), s !== i.t && u(a, "d", i.t = s), i;
1817
1990
  }, {
1818
1991
  e: void 0,
1819
1992
  t: void 0
1820
- }), n;
1993
+ }), t;
1821
1994
  })();
1822
1995
  };
1823
1996
  T(["mousedown", "touchstart", "mousemove", "touchmove", "touchend"]);
1824
- var jn = /* @__PURE__ */ b("<div class=echo-feedback data-hide-when-drawing=true><form class=echo-feedback-content><div class=echo-feedback-header><h3 class=echo-feedback-title></h3><div class=echo-feedback-header-actions></div></div><textarea class=echo-feedback-form-textarea required>");
1825
- const Fn = () => {
1826
- let e;
1827
- const t = x(), n = async (r) => {
1828
- r.preventDefault();
1829
- const a = await Mt(), l = {
1830
- comment: t.feedback.state.comment,
1831
- screenshot: a,
1832
- metadata: {
1833
- url: window.location.href,
1834
- userAgent: navigator.userAgent,
1835
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1836
- browserInfo: {
1837
- width: window.innerWidth,
1838
- height: window.innerHeight,
1839
- screenWidth: window.screen.width,
1840
- screenHeight: window.screen.height
1997
+ const de = (e) => ({
1998
+ handleTextChange: (o) => {
1999
+ const i = o.target;
2000
+ e(i.value);
2001
+ },
2002
+ handleSelectChange: (o) => {
2003
+ e(o);
2004
+ },
2005
+ handleCheckboxChange: (o, i, l) => {
2006
+ const s = l ? [...o, i] : o.filter((c) => c !== i);
2007
+ e(s);
2008
+ },
2009
+ getCheckboxValue: (o) => Array.isArray(o) ? o : []
2010
+ });
2011
+ var ir = /* @__PURE__ */ w("<div class=echo-input role=group>"), sr = /* @__PURE__ */ w("<label class=echo-input-label><span>"), lr = /* @__PURE__ */ w('<span class=echo-input-required aria-label="Required field">*');
2012
+ const ue = (e) => (() => {
2013
+ var n = ir();
2014
+ return v(n, (() => {
2015
+ var t = k(() => !!e.label);
2016
+ return () => t() && (() => {
2017
+ var r = sr(), a = r.firstChild;
2018
+ return v(a, () => e.label), v(r, (() => {
2019
+ var o = k(() => !!e.required);
2020
+ return () => o() && lr();
2021
+ })(), null), r;
2022
+ })();
2023
+ })(), null), v(n, () => e.children, null), n;
2024
+ })();
2025
+ var cr = /* @__PURE__ */ w("<textarea class=echo-input-field rows=5>"), dr = /* @__PURE__ */ w("<div class=visually-hidden>");
2026
+ const st = (e) => {
2027
+ const {
2028
+ handleTextChange: n
2029
+ } = de(e.onChange);
2030
+ return f(ue, {
2031
+ get label() {
2032
+ return e.config.label;
2033
+ },
2034
+ get required() {
2035
+ return e.config.required;
2036
+ },
2037
+ get children() {
2038
+ return [(() => {
2039
+ var t = cr();
2040
+ return U(t, "input", n, !0), b((r) => {
2041
+ var a = e.config.id, o = e.config.placeholder, i = e.config.required, l = e.config.label || e.config.placeholder, s = e.config.required, c = e.value === "", d = `${e.config.id}-description`;
2042
+ return a !== r.e && u(t, "id", r.e = a), o !== r.t && u(t, "placeholder", r.t = o), i !== r.a && (t.required = r.a = i), l !== r.o && u(t, "aria-label", r.o = l), s !== r.i && u(t, "aria-required", r.i = s), c !== r.n && u(t, "aria-invalid", r.n = c), d !== r.s && u(t, "aria-describedby", r.s = d), r;
2043
+ }, {
2044
+ e: void 0,
2045
+ t: void 0,
2046
+ a: void 0,
2047
+ o: void 0,
2048
+ i: void 0,
2049
+ n: void 0,
2050
+ s: void 0
2051
+ }), b(() => t.value = e.value === void 0 ? "" : e.value), t;
2052
+ })(), (() => {
2053
+ var t = dr();
2054
+ return v(t, () => e.config.placeholder), b(() => u(t, "id", `${e.config.id}-description`)), t;
2055
+ })()];
2056
+ }
2057
+ });
2058
+ };
2059
+ T(["input"]);
2060
+ var ur = /* @__PURE__ */ w("<fieldset class=echo-input-options role=group>"), hr = /* @__PURE__ */ w("<label class=echo-input-option><input type=checkbox><span>");
2061
+ const fr = (e) => {
2062
+ const {
2063
+ handleCheckboxChange: n,
2064
+ getCheckboxValue: t
2065
+ } = de(e.onChange), r = () => t(e.value), a = () => r().length > 0;
2066
+ return f(ue, {
2067
+ get label() {
2068
+ return e.config.label;
2069
+ },
2070
+ get required() {
2071
+ return e.config.required;
2072
+ },
2073
+ get children() {
2074
+ var o = ur();
2075
+ return v(o, f(_, {
2076
+ get each() {
2077
+ return e.config.options;
2078
+ },
2079
+ children: (i, l) => (() => {
2080
+ var s = hr(), c = s.firstChild, d = c.nextSibling;
2081
+ return c.addEventListener("change", (h) => n(r(), i.value, h.currentTarget.checked)), v(d, () => i.label), b(() => c.required = e.config.required && !a() && l() === 0), b(() => c.value = i.value), b(() => c.checked = r().includes(i.value)), s;
2082
+ })()
2083
+ })), b(() => u(o, "aria-required", e.config.required)), o;
2084
+ }
2085
+ });
2086
+ };
2087
+ var gr = /* @__PURE__ */ w("<fieldset class=echo-input-options role=radiogroup>"), mr = /* @__PURE__ */ w("<label class=echo-input-option><input type=radio><span>");
2088
+ const vr = (e) => {
2089
+ const {
2090
+ handleSelectChange: n
2091
+ } = de(e.onChange);
2092
+ return f(ue, {
2093
+ get label() {
2094
+ return e.config.label;
2095
+ },
2096
+ get required() {
2097
+ return e.config.required;
2098
+ },
2099
+ get children() {
2100
+ var t = gr();
2101
+ return v(t, f(_, {
2102
+ get each() {
2103
+ return e.config.options;
2104
+ },
2105
+ children: (r) => (() => {
2106
+ var a = mr(), o = a.firstChild, i = o.nextSibling;
2107
+ return o.addEventListener("change", () => n(r.value)), v(i, () => r.label), b((l) => {
2108
+ var s = e.config.id, c = e.config.required;
2109
+ return s !== l.e && u(o, "name", l.e = s), c !== l.t && (o.required = l.t = c), l;
2110
+ }, {
2111
+ e: void 0,
2112
+ t: void 0
2113
+ }), b(() => o.value = r.value), b(() => o.checked = e.value === r.value), a;
2114
+ })()
2115
+ })), b(() => u(t, "aria-required", e.config.required)), t;
2116
+ }
2117
+ });
2118
+ };
2119
+ var br = /* @__PURE__ */ w("<div class=echo-select-dropdown role=listbox>"), wr = /* @__PURE__ */ w('<div class=echo-select><button type=button class=echo-select-trigger aria-haspopup=listbox><span></span><svg class=echo-select-arrow width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round><path d="m6 9 6 6 6-6"></path></svg></button><input type=text class=visually-hidden aria-hidden=true>'), yr = /* @__PURE__ */ w("<button type=button class=echo-select-option role=option>");
2120
+ const pr = (e) => {
2121
+ const {
2122
+ handleSelectChange: n
2123
+ } = de(e.onChange), [t, r] = A(!1);
2124
+ let a, o, i;
2125
+ const l = () => e.config.options.find((h) => h.value === (e.value === void 0 ? "" : e.value)), s = (h, g) => {
2126
+ g.stopPropagation(), h.value === e.value ? e.config.required || n("") : n(h.value), r(!1);
2127
+ }, c = () => {
2128
+ r(!t());
2129
+ };
2130
+ return M({
2131
+ event: "mousedown",
2132
+ callback: (h) => {
2133
+ if (!t() || !a) return;
2134
+ h.composedPath().includes(a) || r(!1);
2135
+ }
2136
+ }), f(ue, {
2137
+ get label() {
2138
+ return e.config.label;
2139
+ },
2140
+ get required() {
2141
+ return e.config.required;
2142
+ },
2143
+ get children() {
2144
+ var h = wr(), g = h.firstChild, m = g.firstChild, y = g.nextSibling, E = a;
2145
+ typeof E == "function" ? V(E, h) : a = h, g.$$click = (p) => {
2146
+ p.stopPropagation(), c();
2147
+ };
2148
+ var S = o;
2149
+ typeof S == "function" ? V(S, g) : o = g, v(m, () => {
2150
+ var p;
2151
+ return ((p = l()) == null ? void 0 : p.label) || e.config.placeholder;
2152
+ }), v(h, f(D, {
2153
+ get when() {
2154
+ return t();
2155
+ },
2156
+ get children() {
2157
+ var p = br();
2158
+ return v(p, f(_, {
2159
+ get each() {
2160
+ return e.config.options;
2161
+ },
2162
+ children: (P) => (() => {
2163
+ var z = yr();
2164
+ return z.$$click = (x) => s(P, x), v(z, () => P.label), b((x) => {
2165
+ var H = P.value === e.value, q = P.value === e.value;
2166
+ return H !== x.e && u(z, "aria-selected", x.e = H), q !== x.t && u(z, "data-selected", x.t = q), x;
2167
+ }, {
2168
+ e: void 0,
2169
+ t: void 0
2170
+ }), z;
2171
+ })()
2172
+ })), p;
1841
2173
  }
2174
+ }), y);
2175
+ var C = i;
2176
+ return typeof C == "function" ? V(C, y) : i = y, b((p) => {
2177
+ var P = t(), z = !e.value, x = e.config.required, H = t(), q = e.config.required, I = e.config.required;
2178
+ return P !== p.e && u(g, "data-open", p.e = P), z !== p.t && u(g, "data-placeholder", p.t = z), x !== p.a && u(g, "data-required", p.a = x), H !== p.o && u(g, "aria-expanded", p.o = H), q !== p.i && u(g, "aria-required", p.i = q), I !== p.n && (y.required = p.n = I), p;
2179
+ }, {
2180
+ e: void 0,
2181
+ t: void 0,
2182
+ a: void 0,
2183
+ o: void 0,
2184
+ i: void 0,
2185
+ n: void 0
2186
+ }), b(() => y.value = e.value === void 0 ? "" : e.value), h;
2187
+ }
2188
+ });
2189
+ };
2190
+ T(["click"]);
2191
+ var xr = /* @__PURE__ */ w("<input type=text class=echo-input-field>");
2192
+ const kr = (e) => {
2193
+ const {
2194
+ handleTextChange: n
2195
+ } = de(e.onChange);
2196
+ return f(ue, {
2197
+ get label() {
2198
+ return e.config.label;
2199
+ },
2200
+ get required() {
2201
+ return e.config.required;
2202
+ },
2203
+ get children() {
2204
+ var t = xr();
2205
+ return U(t, "input", n, !0), b((r) => {
2206
+ var a = e.config.placeholder, o = e.config.required;
2207
+ return a !== r.e && u(t, "placeholder", r.e = a), o !== r.t && (t.required = r.t = o), r;
2208
+ }, {
2209
+ e: void 0,
2210
+ t: void 0
2211
+ }), b(() => t.value = e.value === void 0 ? "" : e.value), t;
2212
+ }
2213
+ });
2214
+ };
2215
+ T(["input"]);
2216
+ var Sr = /* @__PURE__ */ w("<div class=echo-input-error>Invalid input type"), Cr = /* @__PURE__ */ w("<div class=echo-input-error>Unsupported input type: ");
2217
+ const $r = (e) => f(D, {
2218
+ get when() {
2219
+ return e.config.type;
2220
+ },
2221
+ keyed: !0,
2222
+ get fallback() {
2223
+ return Sr();
2224
+ },
2225
+ get children() {
2226
+ return f(ht, {
2227
+ get fallback() {
2228
+ return (() => {
2229
+ var n = Cr();
2230
+ return n.firstChild, v(n, () => e.config.type, null), n;
2231
+ })();
1842
2232
  },
1843
- console: _e()
1844
- };
1845
- t.methods.submit(l);
2233
+ get children() {
2234
+ return [f(te, {
2235
+ get when() {
2236
+ return e.config.type === "text";
2237
+ },
2238
+ get children() {
2239
+ return f(kr, {
2240
+ get config() {
2241
+ return e.config;
2242
+ },
2243
+ get value() {
2244
+ return e.value;
2245
+ },
2246
+ get onChange() {
2247
+ return e.onChange;
2248
+ }
2249
+ });
2250
+ }
2251
+ }), f(te, {
2252
+ get when() {
2253
+ return e.config.type === "textarea";
2254
+ },
2255
+ get children() {
2256
+ return f(st, {
2257
+ get config() {
2258
+ return e.config;
2259
+ },
2260
+ get value() {
2261
+ return e.value;
2262
+ },
2263
+ get onChange() {
2264
+ return e.onChange;
2265
+ }
2266
+ });
2267
+ }
2268
+ }), f(te, {
2269
+ get when() {
2270
+ return e.config.type === "radio";
2271
+ },
2272
+ get children() {
2273
+ return f(vr, {
2274
+ get config() {
2275
+ return e.config;
2276
+ },
2277
+ get value() {
2278
+ return e.value;
2279
+ },
2280
+ get onChange() {
2281
+ return e.onChange;
2282
+ }
2283
+ });
2284
+ }
2285
+ }), f(te, {
2286
+ get when() {
2287
+ return e.config.type === "checkbox";
2288
+ },
2289
+ get children() {
2290
+ return f(fr, {
2291
+ get config() {
2292
+ return e.config;
2293
+ },
2294
+ get value() {
2295
+ return e.value;
2296
+ },
2297
+ get onChange() {
2298
+ return e.onChange;
2299
+ }
2300
+ });
2301
+ }
2302
+ }), f(te, {
2303
+ get when() {
2304
+ return e.config.type === "select";
2305
+ },
2306
+ get children() {
2307
+ return f(pr, {
2308
+ get config() {
2309
+ return e.config;
2310
+ },
2311
+ get value() {
2312
+ return e.value;
2313
+ },
2314
+ get onChange() {
2315
+ return e.onChange;
2316
+ }
2317
+ });
2318
+ }
2319
+ })];
2320
+ }
2321
+ });
2322
+ }
2323
+ }), Er = () => {
2324
+ const e = navigator.connection;
2325
+ return {
2326
+ effectiveType: e == null ? void 0 : e.effectiveType,
2327
+ downlink: e == null ? void 0 : e.downlink,
2328
+ rtt: e == null ? void 0 : e.rtt,
2329
+ saveData: e == null ? void 0 : e.saveData
1846
2330
  };
1847
- oe(() => {
1848
- e && t.widget.state.isOpen && e.focus();
1849
- });
1850
- const o = (r) => {
1851
- r.stopPropagation(), t.feedback.setState({
2331
+ }, Pr = () => ({
2332
+ width: window.innerWidth,
2333
+ height: window.innerHeight,
2334
+ screenWidth: window.screen.width,
2335
+ screenHeight: window.screen.height,
2336
+ language: navigator.language,
2337
+ languages: navigator.languages,
2338
+ doNotTrack: navigator.doNotTrack,
2339
+ cookiesEnabled: navigator.cookieEnabled,
2340
+ hardwareConcurrency: navigator.hardwareConcurrency,
2341
+ maxTouchPoints: navigator.maxTouchPoints,
2342
+ colorDepth: window.screen.colorDepth,
2343
+ pixelRatio: window.devicePixelRatio,
2344
+ availableWidth: window.screen.availWidth,
2345
+ availableHeight: window.screen.availHeight
2346
+ }), zr = () => {
2347
+ const e = new URL(window.location.href), n = {};
2348
+ return e.searchParams.forEach((t, r) => {
2349
+ n[r] = t;
2350
+ }), {
2351
+ url: e.href,
2352
+ origin: e.origin,
2353
+ pathname: e.pathname,
2354
+ searchParams: n,
2355
+ referrer: document.referrer
2356
+ };
2357
+ }, Tr = () => ({
2358
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
2359
+ localDateTime: (/* @__PURE__ */ new Date()).toISOString()
2360
+ }), Ir = () => ({
2361
+ userAgent: navigator.userAgent,
2362
+ browserInfo: Pr(),
2363
+ networkInfo: Er(),
2364
+ locationInfo: zr(),
2365
+ timeInfo: Tr(),
2366
+ console: Yt()
2367
+ });
2368
+ var Or = /* @__PURE__ */ w("<fieldset class=echo-input-options><legend class=visually-hidden>Additional Information"), Mr = /* @__PURE__ */ w('<section class=echo-feedback data-hide-when-drawing=true role=dialog aria-label="Feedback Form"><form class=echo-feedback-content aria-label="Submit Feedback"><header class=echo-feedback-header><h3 class=echo-feedback-title id=feedback-form-title></h3><div class=echo-feedback-header-actions role=toolbar aria-label="Form controls"></div></header><fieldset class=echo-input-options><legend class=visually-hidden>Feedback Message');
2369
+ const Ar = () => {
2370
+ const e = $(), n = async (a) => {
2371
+ a.preventDefault();
2372
+ const o = await tn(), i = {
2373
+ message: e.feedback.state.message,
2374
+ screenshot: o,
2375
+ metadata: Ir(),
2376
+ customInputs: e.feedback.state.customInputValues
2377
+ };
2378
+ e.methods.submit(i);
2379
+ }, t = (a) => {
2380
+ a.stopPropagation(), e.feedback.setState({
1852
2381
  isMinimized: !0
1853
2382
  });
1854
- }, i = () => {
1855
- t.feedback.setState({
2383
+ }, r = () => {
2384
+ e.feedback.setState({
1856
2385
  isMinimized: !1
1857
2386
  });
1858
2387
  };
1859
- return (() => {
1860
- var r = jn(), a = r.firstChild, l = a.firstChild, s = l.firstChild, c = s.nextSibling, d = l.nextSibling;
1861
- r.$$click = () => t.feedback.state.isMinimized && i(), a.addEventListener("submit", n), m(s, () => t.widget.state.text.feedbackForm.title), m(c, g(O, {
2388
+ return Y(() => {
2389
+ e.widget.state.isOpen && requestAnimationFrame(() => {
2390
+ var a;
2391
+ (a = document.querySelector(".echo-input-field")) == null || a.focus();
2392
+ });
2393
+ }), (() => {
2394
+ var a = Mr(), o = a.firstChild, i = o.firstChild, l = i.firstChild, s = l.nextSibling, c = i.nextSibling;
2395
+ return c.firstChild, a.$$click = () => e.feedback.state.isMinimized && r(), o.addEventListener("submit", n), v(l, () => e.widget.state.text.feedbackForm.title), v(s, f(W, {
1862
2396
  type: "button",
1863
2397
  title: "Hide form",
1864
2398
  variant: "secondary",
1865
2399
  size: "sm",
1866
- onClick: o,
2400
+ onClick: t,
2401
+ "aria-label": "Minimize feedback form",
1867
2402
  get children() {
1868
- return g(_t, {
2403
+ return f(yn, {
1869
2404
  size: 20
1870
2405
  });
1871
2406
  }
1872
- }), null), m(c, g(O, {
2407
+ }), null), v(s, f(W, {
1873
2408
  type: "button",
1874
2409
  title: "Close form",
1875
2410
  variant: "secondary",
1876
2411
  size: "sm",
1877
- onClick: () => t.widget.setState({
2412
+ onClick: () => e.widget.setState({
1878
2413
  isOpen: !1
1879
2414
  }),
2415
+ "aria-label": "Close feedback form",
1880
2416
  get children() {
1881
- return g(ie, {
2417
+ return f(pe, {
1882
2418
  size: 20
1883
2419
  });
1884
2420
  }
1885
- }), null), d.$$input = (f) => t.feedback.setState({
1886
- comment: f.currentTarget.value
1887
- });
1888
- var u = e;
1889
- return typeof u == "function" ? G(u, d) : e = d, m(a, g(O, {
2421
+ }), null), v(c, f(st, {
2422
+ get config() {
2423
+ return {
2424
+ type: "textarea",
2425
+ id: "message",
2426
+ placeholder: e.widget.state.text.feedbackForm.placeholder,
2427
+ label: "Feedback Message",
2428
+ required: !0
2429
+ };
2430
+ },
2431
+ get value() {
2432
+ return e.feedback.state.message;
2433
+ },
2434
+ onChange: (d) => e.feedback.setState({
2435
+ message: d
2436
+ })
2437
+ }), null), v(o, f(D, {
2438
+ get when() {
2439
+ var d;
2440
+ return (d = e.widget.state.customInputs) == null ? void 0 : d.length;
2441
+ },
2442
+ get children() {
2443
+ var d = Or();
2444
+ return d.firstChild, v(d, f(_, {
2445
+ get each() {
2446
+ return e.widget.state.customInputs;
2447
+ },
2448
+ children: (h) => f($r, {
2449
+ config: h,
2450
+ get value() {
2451
+ return e.feedback.state.customInputValues[h.id];
2452
+ },
2453
+ onChange: (g) => e.feedback.setState({
2454
+ customInputValues: {
2455
+ ...e.feedback.state.customInputValues,
2456
+ [h.id]: g
2457
+ }
2458
+ })
2459
+ })
2460
+ }), null), d;
2461
+ }
2462
+ }), null), v(o, f(W, {
1890
2463
  type: "submit",
1891
2464
  variant: "primary",
1892
2465
  size: "lg",
1893
2466
  style: {
1894
2467
  width: "100%"
1895
2468
  },
2469
+ "aria-label": "Submit feedback",
1896
2470
  get children() {
1897
- return t.widget.state.text.feedbackForm.submitButton;
2471
+ return e.widget.state.text.feedbackForm.submitButton;
1898
2472
  }
1899
- }), null), w((f) => {
1900
- var v = t.feedback.state.isMinimized, y = t.feedback.state.isMinimized ? "pointer" : "default", k = t.widget.state.text.feedbackForm.placeholder;
1901
- return v !== f.e && h(r, "data-minimized", f.e = v), y !== f.t && ((f.t = y) != null ? r.style.setProperty("cursor", y) : r.style.removeProperty("cursor")), k !== f.a && h(d, "placeholder", f.a = k), f;
2473
+ }), null), b((d) => {
2474
+ var h = e.feedback.state.isMinimized, g = e.feedback.state.isMinimized ? "pointer" : "default", m = !e.feedback.state.isMinimized;
2475
+ return h !== d.e && u(a, "data-minimized", d.e = h), g !== d.t && ((d.t = g) != null ? a.style.setProperty("cursor", g) : a.style.removeProperty("cursor")), m !== d.a && u(a, "aria-expanded", d.a = m), d;
1902
2476
  }, {
1903
2477
  e: void 0,
1904
2478
  t: void 0,
1905
2479
  a: void 0
1906
- }), w(() => d.value = t.feedback.state.comment), r;
2480
+ }), a;
1907
2481
  })();
1908
2482
  };
1909
- T(["click", "input"]);
1910
- var Ln = /* @__PURE__ */ b("<style>"), Nn = /* @__PURE__ */ b("<div class=echo-launcher>"), Bn = /* @__PURE__ */ b("<div class=echo-overlay>"), Yn = /* @__PURE__ */ b("<div class=echo-root>");
1911
- const Hn = (e) => g(vt, {
2483
+ T(["click"]);
2484
+ var Dr = /* @__PURE__ */ w("<style>"), Fr = /* @__PURE__ */ w("<div class=echo-launcher>"), Lr = /* @__PURE__ */ w("<dialog class=echo-overlay>"), jr = /* @__PURE__ */ w("<div class=echo-root>");
2485
+ const Nr = (e) => f(Ot, {
1912
2486
  useShadow: !0,
1913
2487
  get mount() {
1914
2488
  return document.body;
1915
2489
  },
1916
2490
  get children() {
1917
- return g(Yt, Z(e, {
2491
+ return f(cn, ge(e, {
1918
2492
  get children() {
1919
- return g(Un, {
2493
+ return f(Wr, {
1920
2494
  get children() {
1921
- return [g(Wn, {
2495
+ return [f(qr, {
1922
2496
  get primaryColor() {
1923
2497
  return e.primaryColor;
1924
2498
  }
1925
- }), g(_n, {})];
2499
+ }), f(Vr, {})];
1926
2500
  }
1927
2501
  });
1928
2502
  }
1929
2503
  }));
1930
2504
  }
1931
- }), Wn = (e) => {
1932
- const [t, n] = M("");
1933
- return oe(() => {
1934
- const o = `
1935
- .echo-root {
1936
- --primary-color: ${e.primaryColor};
1937
- --primary-text-color: ${$t(e.primaryColor)};
1938
- }
1939
- `;
1940
- n(o);
2505
+ }), qr = (e) => {
2506
+ const [n, t] = A("");
2507
+ return Y(() => {
2508
+ const r = `
2509
+ .echo-root {
2510
+ --primary-color: ${e.primaryColor};
2511
+ --primary-text-color: ${_t(e.primaryColor)};
2512
+ }
2513
+ `;
2514
+ t(r);
1941
2515
  }), (() => {
1942
- var o = Ln();
1943
- return m(o, Ht, null), m(o, t, null), o;
2516
+ var r = Dr();
2517
+ return v(r, hn, null), v(r, n, null), r;
1944
2518
  })();
1945
- }, _n = () => {
1946
- const e = x();
1947
- return [(() => {
1948
- var t = Nn();
1949
- return m(t, g(pn, {}), null), m(t, g(Cn, {}), null), m(t, g(kn, {}), null), w(() => h(t, "data-hidden", e.widget.state.isOpen)), t;
1950
- })(), (() => {
1951
- var t = Bn();
1952
- return m(t, g(Fn, {}), null), m(t, g(dn, {}), null), m(t, g(An, {}), null), w(() => h(t, "data-hidden", !e.widget.state.isOpen)), t;
1953
- })()];
1954
- }, Un = (e) => {
1955
- let t;
1956
- const n = x(), o = () => {
1957
- requestAnimationFrame(() => {
1958
- t && (t.style.height = "0px", t.style.height = `${document.documentElement.scrollHeight}px`, n.widget.setState({
1959
- dimensions: {
1960
- width: document.documentElement.clientWidth,
1961
- height: document.documentElement.scrollHeight
1962
- }
1963
- }));
1964
- });
1965
- };
1966
- return W({
1967
- event: "resize",
1968
- callback: o,
1969
- onMount: o
1970
- }), bt("Escape", () => {
1971
- n.widget.setState({
1972
- isOpen: !1
1973
- });
1974
- }), ge({
1975
- target: document.documentElement,
1976
- options: {
1977
- childList: !0,
1978
- subtree: !0,
1979
- attributes: !0
1980
- },
1981
- callback: () => {
1982
- o();
2519
+ }, Vr = () => {
2520
+ const e = $();
2521
+ return Y(() => {
2522
+ }), [(() => {
2523
+ var n = Fr();
2524
+ return v(n, f(Rn, {}), null), v(n, f(Qn, {}), null), v(n, f(Gn, {}), null), b(() => u(n, "data-hidden", e.widget.state.isOpen)), n;
2525
+ })(), f(Br, {
2526
+ get children() {
2527
+ return [f(Ar, {}), f(Fn, {}), f(ar, {})];
1983
2528
  }
2529
+ })];
2530
+ }, Br = (e) => {
2531
+ const [n, t] = A(), r = $(), a = dn(() => n());
2532
+ return Y(() => {
2533
+ n() && r.widget.setState({
2534
+ dimensions: a()
2535
+ });
2536
+ }), Y(() => {
2537
+ var o, i;
2538
+ r.widget.state.isOpen ? (o = n()) == null || o.showModal() : (i = n()) == null || i.close();
1984
2539
  }), (() => {
1985
- var i = Yn(), r = t;
1986
- return typeof r == "function" ? G(r, i) : t = i, m(i, () => e.children), w((a) => {
1987
- var l = n.drawing.state.isDrawing, s = `${n.widget.state.dimensions.height}px`, c = `${n.widget.state.dimensions.width}px`;
1988
- return l !== a.e && h(i, "data-drawing", a.e = l), s !== a.t && ((a.t = s) != null ? i.style.setProperty("height", s) : i.style.removeProperty("height")), c !== a.a && ((a.a = c) != null ? i.style.setProperty("width", c) : i.style.removeProperty("width")), a;
2540
+ var o = Lr();
2541
+ return o.addEventListener("close", () => r.widget.setState({
2542
+ isOpen: !1
2543
+ })), V(t, o), v(o, () => e.children), b((i) => {
2544
+ var l = `${a().height}px`, s = `${a().width}px`, c = !r.widget.state.isOpen;
2545
+ return l !== i.e && ((i.e = l) != null ? o.style.setProperty("height", l) : o.style.removeProperty("height")), s !== i.t && ((i.t = s) != null ? o.style.setProperty("width", s) : o.style.removeProperty("width")), c !== i.a && u(o, "data-hidden", i.a = c), i;
1989
2546
  }, {
1990
2547
  e: void 0,
1991
2548
  t: void 0,
1992
2549
  a: void 0
1993
- }), i;
2550
+ }), o;
1994
2551
  })();
1995
- }, Kn = {
2552
+ }, Wr = (e) => {
2553
+ const n = $();
2554
+ return un({
2555
+ onUrlChange: (t) => n.methods.handlePageChange(t)
2556
+ }), ye(() => {
2557
+ Ht(), Jt((t) => {
2558
+ if (n.widget.state.isOpen && t.type === "keydown")
2559
+ switch (t.key) {
2560
+ case "Escape":
2561
+ t.stopImmediatePropagation();
2562
+ break;
2563
+ }
2564
+ });
2565
+ }), ee(() => {
2566
+ Ut(), Zt();
2567
+ }), (() => {
2568
+ var t = jr();
2569
+ return v(t, () => e.children), b(() => u(t, "data-drawing", n.drawing.state.isDrawing)), t;
2570
+ })();
2571
+ }, _r = {
1996
2572
  welcomeMessage: {
1997
2573
  text: "Click here to leave feedback",
1998
2574
  closeAriaLabel: "Close welcome message"
@@ -2017,36 +2593,35 @@ const Hn = (e) => g(vt, {
2017
2593
  text: "Click & drag to draw"
2018
2594
  }
2019
2595
  };
2020
- let Q = null;
2021
- function Xn(e) {
2022
- Q && (console.warn("Echo widget is already initialized. Cleaning up previous instance..."), Q());
2596
+ let fe = null;
2597
+ function Yr(e) {
2598
+ fe && (console.warn("Echo widget is already initialized. Cleaning up previous instance..."), fe());
2023
2599
  try {
2024
- jt(e), Et();
2600
+ rn(e);
2025
2601
  const {
2026
- position: t = "bottom-right",
2027
- primaryColor: n = "#6227dc",
2028
- onSubmit: o,
2029
- textConfig: i = {}
2030
- } = e, r = We(Kn, i), a = document.createElement("div");
2031
- a.id = "echo-container", document.body.appendChild(a);
2032
- const l = st(() => g(Hn, {
2033
- position: t,
2034
- primaryColor: n,
2035
- textConfig: r,
2036
- onSubmit: async (c) => await o({
2037
- ...c,
2038
- console: _e()
2039
- })
2040
- }), a), s = () => {
2041
- l(), a.remove(), zt(), Q = null;
2602
+ position: n = "bottom-right",
2603
+ primaryColor: t = "#6227dc",
2604
+ onSubmit: r,
2605
+ textConfig: a = {},
2606
+ customInputs: o = []
2607
+ } = e, i = Ke(_r, a), l = document.createElement("div");
2608
+ l.id = "echo-container", document.body.appendChild(l);
2609
+ const s = kt(() => f(Nr, {
2610
+ position: n,
2611
+ primaryColor: t,
2612
+ textConfig: i,
2613
+ onSubmit: r,
2614
+ customInputs: o
2615
+ }), l), c = () => {
2616
+ s(), l.remove(), fe = null;
2042
2617
  };
2043
- return window.addEventListener("unload", s, {
2618
+ return window.addEventListener("unload", c, {
2044
2619
  once: !0
2045
- }), Q = s, s;
2046
- } catch (t) {
2047
- throw console.error("Echo initialization failed:", t), t;
2620
+ }), fe = c, c;
2621
+ } catch (n) {
2622
+ throw console.error("Echo initialization failed:", n), n;
2048
2623
  }
2049
2624
  }
2050
2625
  export {
2051
- Xn as initEcho
2626
+ Yr as initEcho
2052
2627
  };