@contember/echo 0.0.27 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/components/Echo.d.ts +3 -0
  2. package/dist/components/atoms/Button.d.ts +7 -0
  3. package/dist/components/atoms/Shape.d.ts +8 -0
  4. package/dist/components/atoms/index.d.ts +1 -0
  5. package/dist/components/atoms/inputs/CheckboxGroup.d.ts +9 -0
  6. package/dist/components/atoms/inputs/InputWrapper.d.ts +8 -0
  7. package/dist/components/atoms/inputs/RadioGroup.d.ts +9 -0
  8. package/dist/components/atoms/inputs/Select.d.ts +9 -0
  9. package/dist/components/atoms/inputs/TextArea.d.ts +9 -0
  10. package/dist/components/atoms/inputs/TextInput.d.ts +9 -0
  11. package/dist/components/icons/CheckCircleIcon.d.ts +3 -0
  12. package/dist/components/icons/ChevronRightIcon.d.ts +3 -0
  13. package/dist/components/icons/ContemberIcon.d.ts +3 -0
  14. package/dist/components/icons/ExternalLinkIcon.d.ts +3 -0
  15. package/dist/components/icons/HighlightIcon.d.ts +3 -0
  16. package/dist/components/icons/PenIcon.d.ts +3 -0
  17. package/dist/components/icons/TrashIcon.d.ts +3 -0
  18. package/dist/components/icons/XCircleIcon.d.ts +3 -0
  19. package/dist/components/icons/XIcon.d.ts +3 -0
  20. package/dist/components/icons/index.d.ts +8 -0
  21. package/dist/components/molecules/ColorSelector.d.ts +2 -0
  22. package/dist/components/molecules/CustomInput.d.ts +9 -0
  23. package/dist/components/molecules/DrawingToolbar.d.ts +2 -0
  24. package/dist/components/molecules/DrawingTooltip.d.ts +2 -0
  25. package/dist/components/molecules/LauncherButton.d.ts +2 -0
  26. package/dist/components/molecules/Notification.d.ts +2 -0
  27. package/dist/components/molecules/ShapeActions.d.ts +2 -0
  28. package/dist/components/molecules/StoredFeedback.d.ts +2 -0
  29. package/dist/components/molecules/WelcomeMessage.d.ts +2 -0
  30. package/dist/components/molecules/index.d.ts +8 -0
  31. package/dist/components/organisms/DrawingLayer.d.ts +2 -0
  32. package/dist/components/organisms/FeedbackForm.d.ts +2 -0
  33. package/dist/components/organisms/index.d.ts +2 -0
  34. package/dist/config/defaultText.d.ts +2 -0
  35. package/dist/config/drawingConfig.d.ts +13 -0
  36. package/dist/contexts/EchoContext.d.ts +9 -0
  37. package/dist/contexts/index.d.ts +1 -0
  38. package/dist/echo.es.js +1743 -1174
  39. package/dist/echo.umd.js +8 -9
  40. package/dist/hooks/useInputHandler.d.ts +7 -0
  41. package/dist/hooks/usePageHeight.d.ts +4 -0
  42. package/dist/hooks/usePageStateSync.d.ts +4 -0
  43. package/dist/index.d.ts +41 -2
  44. package/dist/stores/drawingStore.d.ts +39 -0
  45. package/dist/stores/echoStore.d.ts +15 -0
  46. package/dist/stores/feedbackStore.d.ts +17 -0
  47. package/dist/stores/index.d.ts +4 -0
  48. package/dist/stores/widgetStore.d.ts +21 -0
  49. package/dist/style.css +1 -1
  50. package/dist/types.d.ts +151 -0
  51. package/dist/utils/color.d.ts +2 -0
  52. package/dist/utils/common.d.ts +2 -0
  53. package/dist/utils/console.d.ts +4 -0
  54. package/dist/utils/device.d.ts +1 -0
  55. package/dist/utils/events.d.ts +5 -0
  56. package/dist/utils/format.d.ts +1 -0
  57. package/dist/utils/geometry.d.ts +8 -0
  58. package/dist/utils/index.d.ts +12 -0
  59. package/dist/utils/listeners.d.ts +24 -0
  60. package/dist/utils/metadata.d.ts +2 -0
  61. package/dist/utils/monkeyPatch.d.ts +4 -0
  62. package/dist/utils/notifications.d.ts +6 -0
  63. package/dist/utils/screenshot.d.ts +2 -0
  64. package/dist/utils/stateManagement.d.ts +8 -0
  65. package/dist/utils/storage.d.ts +30 -0
  66. package/dist/utils/svg.d.ts +13 -0
  67. package/dist/utils/validators.d.ts +2 -0
  68. package/package.json +1 -1
  69. package/dist/echo.es.js.map +0 -1
  70. package/dist/echo.umd.js.map +0 -1
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 S, 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 g, useContext as ut, For as _, Show as D, mergeProps as ge, Switch as ht, Match as te } from "solid-js";
2
+ import gt from "html2canvas";
3
+ const ft = [
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
+ ...ft
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); )
125
+ if (l < d && d < o) {
126
+ let h = i, f = 1, m;
127
+ for (; ++h < a && h < o && !((m = c.get(n[h])) == null || m !== d + f); )
128
128
  f++;
129
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();
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
+ le(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
+ le(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
+ le(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 = oe(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 oe(e, n, r, t);
215
+ b((a) => oe(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 le(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;
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 f = n.slice(3);
251
+ r && e.removeEventListener(f, r, typeof r != "function" && r), t && e.addEventListener(f, t, typeof t != "function" && t);
252
+ } else if (n.slice(0, 10) === "oncapture:") {
253
+ const f = n.slice(10);
254
+ r && e.removeEventListener(f, r, !0), t && e.addEventListener(f, t, !0);
255
+ } else if (n.slice(0, 2) === "on") {
256
+ const f = n.slice(2).toLowerCase(), m = pt.has(f);
257
+ if (!m && r) {
258
+ const y = Array.isArray(r) ? r[0] : r;
259
259
  e.removeEventListener(f, 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, f, t, m), m && T([f]));
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 (le(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 oe(e, n, t, r, a) {
312
+ const o = le(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 = oe(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 = oe(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, () => S(() => 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
+ }, ae = (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
+ }), ae(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], ae(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 fe(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 ie(e, n = /* @__PURE__ */ new Set()) {
582
+ let t, r, a, o;
583
+ if (t = e != null && e[Pe]) return t;
584
+ if (!fe(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 = ie(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 = ie(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 me(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 se(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() && se(me(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 = me(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 = se(r, n, o)());
620
633
  }
621
- return ee(r) ? Be(r) : r;
634
+ return fe(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() && se(me(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 ve(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 = me(e, J), l;
653
+ if ((l = se(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 = se(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
+ ve(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 = ie(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 && ve(e, t, a);
660
673
  }
661
- ne(e, "length", o);
662
- } else He(e, t);
674
+ ve(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 = ie(o), r === void 0 || fe(a) && fe(o) && !Array.isArray(o) ? rt(a, o) : ve(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 = ie(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,159 @@ 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
+ }, ue = (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, be = 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
+ be.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 WeakMap()), ne.get(this).set(t, a), Ie.call(this, n, a, r);
825
+ }, window.EventTarget.prototype.removeEventListener = function(n, t, r) {
826
+ var o, i;
827
+ const a = (o = ne.get(this)) == null ? void 0 : o.get(t);
828
+ a ? (be.call(this, n, a, r), (i = ne.get(this)) == null || i.delete(t)) : be.call(this, n, t, r);
829
+ });
830
+ }, Zt = () => {
831
+ we && (window.EventTarget.prototype.addEventListener = Ie, window.EventTarget.prototype.removeEventListener = be, we = !1);
832
+ }, M = (e) => {
833
+ const { event: n, callback: t, onMount: r, onCleanup: a, useOriginal: o = !0 } = e;
834
+ ye(() => {
835
+ r == null || r(), o ? Gt(window, n, t) : window.addEventListener(n, t);
836
+ }), ee(() => {
837
+ a == null || a(), o ? Xt(window, n, t) : window.removeEventListener(n, t);
838
+ });
839
+ }, Oe = (e) => {
840
+ const { target: n, options: t, callback: r, onMount: a, onCleanup: o } = e, i = new MutationObserver(r);
841
+ ye(() => {
842
+ a == null || a(), i.observe(n, t);
843
+ }), ee(() => {
844
+ o == null || o(), i.disconnect();
845
+ });
846
+ }, Qt = (e, n) => function(t) {
847
+ n(t), typeof e == "function" ? e.call(this, t) : e.handleEvent(t);
848
+ }, en = (e) => e.hasAttribute("data-hide-when-drawing"), tn = async () => {
849
+ var e;
796
850
  try {
797
- const e = await Qe(document.body, {
798
- backgroundColor: null,
851
+ const n = document.createElement("style");
852
+ document.head.appendChild(n), (e = n.sheet) == null || e.insertRule("body > div:last-child img { display: inline-block; }");
853
+ const t = await gt(document.body, {
799
854
  logging: !1,
800
855
  useCORS: !0,
801
- scale: 1,
856
+ scale: window.devicePixelRatio,
802
857
  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);
858
+ ignoreElements: (r) => en(r)
859
+ });
860
+ return n.remove(), t.toDataURL("image/png");
861
+ } catch (n) {
862
+ console.error("Failed to capture screenshot:", n);
811
863
  return;
812
864
  }
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}`;
865
+ }, nn = (e, n, t) => {
866
+ let r = `M0 0 H${e.width} V${e.height} H0 Z`;
867
+ if (n.length === 2) {
868
+ const [a, o] = n;
869
+ 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
870
  }
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}`;
871
+ for (const a of t)
872
+ if (a.type === "rectangle") {
873
+ const [o, i] = a.points;
874
+ 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
875
  }
824
- return o;
825
- }, jt = (e) => {
876
+ return r;
877
+ }, rn = (e) => {
826
878
  if (typeof e != "object" || e === null)
827
879
  throw new Error("Echo initialization failed: options must be an object");
828
880
  if (typeof e.onSubmit != "function")
829
881
  throw new Error("Echo initialization failed: onSubmit must be a function");
830
882
  if (e.primaryColor && !/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(e.primaryColor))
831
883
  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) => {
884
+ }, Be = 5, We = (e, n) => B[e].getCursor(n), on = (e, n, t) => {
833
885
  var l, s;
834
- const [o, i] = ve({
886
+ const [r, a] = Te({
835
887
  isDrawing: !1,
836
888
  currentPoints: [],
837
889
  selectedShapeId: null,
@@ -839,124 +891,124 @@ Location: ${n}:${o}:${i}`,
839
891
  showTooltip: !0,
840
892
  mousePosition: { x: 0, y: 0 },
841
893
  selectedColor: e.primaryColor,
842
- shapes: ((s = (l = me(t)) == null ? void 0 : l.drawing) == null ? void 0 : s.shapes) || [],
894
+ shapes: ((s = (l = ze(n)) == null ? void 0 : l.drawing) == null ? void 0 : s.shapes) || [],
843
895
  hasDrawn: !1,
844
896
  isDragging: !1,
845
897
  dragStartPos: null,
846
898
  initialClickPos: null,
847
899
  dragOffset: null,
848
- cursor: ze("rectangle", e.primaryColor)
849
- }), r = (c, d = !1) => {
900
+ cursor: We("rectangle", e.primaryColor)
901
+ }), o = (c, d = !1) => {
850
902
  if (c.selectedTool || c.selectedColor) {
851
- const u = c.selectedTool || o.selectedTool, f = c.selectedColor || o.selectedColor;
852
- c.cursor = ze(u, f);
903
+ const h = c.selectedTool || r.selectedTool, f = c.selectedColor || r.selectedColor;
904
+ c.cursor = We(h, f);
853
905
  }
854
- i(c), n == null || n(c, d);
855
- }, a = {
906
+ a(c), t == null || t(c, d);
907
+ }, i = {
856
908
  startDrawing: (c) => {
857
- r({
909
+ o({
858
910
  isDrawing: !0,
859
911
  currentPoints: [c],
860
912
  selectedShapeId: null
861
913
  });
862
914
  },
863
915
  updateDrawing: (c) => {
864
- o.selectedTool === "rectangle" ? r({ currentPoints: [o.currentPoints[0], c] }) : o.selectedTool === "path" && r({
865
- currentPoints: [...o.currentPoints, c]
916
+ r.selectedTool === "rectangle" ? o({ currentPoints: [r.currentPoints[0], c] }) : r.selectedTool === "path" && o({
917
+ currentPoints: [...r.currentPoints, c]
866
918
  });
867
919
  },
868
920
  finishDrawing: () => {
869
- if (o.currentPoints.length >= 2) {
921
+ if (r.currentPoints.length >= 2) {
870
922
  const c = {
871
923
  id: Math.random().toString(36).substring(2),
872
- type: o.selectedTool,
873
- color: o.selectedColor,
874
- points: o.currentPoints
924
+ type: r.selectedTool,
925
+ color: r.selectedColor,
926
+ points: r.currentPoints
875
927
  };
876
- r({ shapes: [...o.shapes, c] });
928
+ o({ shapes: [...r.shapes, c] });
877
929
  }
878
- r({ isDrawing: !1, currentPoints: [] });
930
+ o({ isDrawing: !1, currentPoints: [] });
879
931
  },
880
932
  handleShapeClick: (c) => {
881
933
  },
882
934
  handleStart: (c) => {
883
935
  if (c instanceof MouseEvent) {
884
- const u = c.target;
885
- if (!u.classList.contains("echo-drawing-layer-mask") && !u.classList.contains("echo-shape"))
936
+ const h = c.target;
937
+ if (!h.classList.contains("echo-drawing-layer-mask") && !h.classList.contains("echo-shape"))
886
938
  return;
887
939
  }
888
- const d = q(c);
940
+ const d = ue(c);
889
941
  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);
942
+ const h = c.target.dataset.shapeId;
943
+ if (h && r.selectedShapeId === h) {
944
+ const f = r.shapes.find((m) => m.id === h);
893
945
  if (f) {
894
- a.startDrag(d), a.updateDragOffset(f, d);
946
+ i.startDrag(d), i.updateDragOffset(f, d);
895
947
  return;
896
948
  }
897
949
  }
898
950
  }
899
- a.setInitialClick(d);
951
+ i.setInitialClick(d);
900
952
  },
901
953
  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
954
+ const d = ue(c, { useClientCoords: !0 }), h = ue(c);
955
+ if (o({ mousePosition: d }), r.isDragging && r.selectedShapeId && r.dragStartPos && r.shapes.find((m) => m.id === r.selectedShapeId)) {
956
+ const m = h.x - r.dragStartPos.x, y = h.y - r.dragStartPos.y, x = r.shapes.map((C) => C.id === r.selectedShapeId ? {
957
+ ...C,
958
+ points: C.points.map(($) => ({
959
+ x: $.x + m,
960
+ y: $.y + y
909
961
  }))
910
- } : I);
911
- r({ shapes: k }), a.startDrag(u);
962
+ } : C);
963
+ o({ shapes: x }), i.startDrag(h);
912
964
  return;
913
965
  }
914
- if (o.initialClickPos && !o.isDrawing) {
915
- $e(o.initialClickPos, u) >= Ee && a.startDrawing(o.initialClickPos);
966
+ if (r.initialClickPos && !r.isDrawing) {
967
+ Ve(r.initialClickPos, h) >= Be && i.startDrawing(r.initialClickPos);
916
968
  return;
917
969
  }
918
- o.isDrawing && a.updateDrawing(u);
970
+ r.isDrawing && i.updateDrawing(h);
919
971
  },
920
972
  handleEnd: (c) => {
921
- if (o.isDragging) {
922
- a.stopDrag();
973
+ if (r.isDragging) {
974
+ i.stopDrag();
923
975
  return;
924
976
  }
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")) {
977
+ if (r.initialClickPos && !r.isDrawing) {
978
+ const d = ue(c);
979
+ if (Ve(r.initialClickPos, d) < Be && c.target instanceof SVGElement && c.target.classList.contains("echo-shape")) {
928
980
  const f = c.target.dataset.shapeId;
929
- f && r({ selectedShapeId: f });
981
+ f && o({ selectedShapeId: f });
930
982
  }
931
983
  }
932
- a.setInitialClick(null), a.finishDrawing();
984
+ i.setInitialClick(null), i.finishDrawing();
933
985
  },
934
986
  handleEnter: (c) => {
935
- c.target === c.currentTarget && !o.hasDrawn && r({ showTooltip: !0 });
987
+ c.target === c.currentTarget && !r.hasDrawn && o({ showTooltip: !0 });
936
988
  },
937
989
  handleLeave: (c) => {
938
- c.target === c.currentTarget && r({ showTooltip: !1 });
990
+ c.target === c.currentTarget && o({ showTooltip: !1 });
939
991
  },
940
992
  startDrag: (c) => {
941
- r({
993
+ o({
942
994
  isDragging: !0,
943
995
  dragStartPos: c
944
996
  });
945
997
  },
946
998
  stopDrag: () => {
947
- r({
999
+ o({
948
1000
  isDragging: !1,
949
1001
  dragStartPos: null,
950
1002
  dragOffset: null
951
1003
  });
952
1004
  },
953
1005
  setInitialClick: (c) => {
954
- r({
1006
+ o({
955
1007
  initialClickPos: c
956
1008
  });
957
1009
  },
958
1010
  updateDragOffset: (c, d) => {
959
- r({
1011
+ o({
960
1012
  dragOffset: {
961
1013
  x: d.x - c.points[0].x,
962
1014
  y: d.y - c.points[0].y
@@ -965,26 +1017,35 @@ Location: ${n}:${o}:${i}`,
965
1017
  }
966
1018
  };
967
1019
  return {
968
- state: o,
969
- setState: r,
970
- methods: a
1020
+ state: r,
1021
+ setState: o,
1022
+ methods: i
971
1023
  };
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) || "",
1024
+ }, an = (e, n, t, r) => {
1025
+ var h;
1026
+ const a = (r == null ? void 0 : r.reduce(
1027
+ (f, m) => (f[m.id] = m.defaultValue ?? (m.type === "checkbox" ? [] : ""), f),
1028
+ {}
1029
+ )) || {}, o = ze(n), i = (o == null ? void 0 : o.feedback.customInputValues) || {}, l = {
1030
+ ...a,
1031
+ ...i
1032
+ }, [s, c] = Te({
1033
+ message: ((h = o == null ? void 0 : o.feedback) == null ? void 0 : h.message) || "",
976
1034
  screenshot: void 0,
977
1035
  isCapturing: !1,
978
- isMinimized: !1
1036
+ isMinimized: !1,
1037
+ customInputValues: l,
1038
+ hasUserInteracted: !1
979
1039
  });
980
1040
  return {
981
- state: o,
982
- setState: (s, c = !1) => {
983
- i(s), n == null || n(s, c);
1041
+ state: s,
1042
+ setState: (f, m = !1) => {
1043
+ const y = "isCapturing" in f || "isMinimized" in f || m;
1044
+ !y && !s.hasUserInteracted && c({ hasUserInteracted: !0 }), c(f), (s.hasUserInteracted || y) && (t == null || t(f, m));
984
1045
  }
985
1046
  };
986
- }, Nt = (e, t) => {
987
- const [n, o] = ve({
1047
+ }, sn = (e, n) => {
1048
+ const [t, r] = Te({
988
1049
  text: e.textConfig,
989
1050
  isOpen: !1,
990
1051
  primaryColor: e.primaryColor,
@@ -998,125 +1059,235 @@ Location: ${n}:${o}:${i}`,
998
1059
  height: document.documentElement.scrollHeight
999
1060
  },
1000
1061
  isStoredFeedbackOpen: !1,
1001
- pagesCount: Le(),
1002
- welcomeMessageIsClosing: !1
1062
+ pagesCount: Qe(),
1063
+ welcomeMessageIsClosing: !1,
1064
+ position: e.position,
1065
+ customInputs: e.customInputs
1003
1066
  });
1004
1067
  return {
1005
- state: n,
1006
- setState: o
1068
+ state: t,
1069
+ setState: r
1007
1070
  };
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
1071
+ }, _e = (e) => {
1072
+ var n;
1073
+ return ((n = e.customInputs) == null ? void 0 : n.reduce(
1074
+ (t, r) => (t[r.id] = r.defaultValue ?? (r.type === "checkbox" ? [] : ""), t),
1075
+ {}
1076
+ )) || {};
1077
+ }, ln = (e) => {
1078
+ let n = Ee();
1079
+ const t = sn(e), r = jt(t), a = At(t), o = an(
1080
+ e,
1081
+ n,
1082
+ (c, d) => {
1083
+ r(
1084
+ n,
1085
+ {
1086
+ feedback: { ...o.state, ...c },
1087
+ drawing: i.state
1088
+ },
1089
+ d
1090
+ );
1039
1091
  },
1040
- callback: () => {
1041
- ae() !== t && a();
1042
- }
1043
- });
1044
- const l = () => {
1045
- Fe(t), o.setState(
1092
+ e.customInputs
1093
+ ), i = on(e, n, (c, d) => {
1094
+ r(
1095
+ n,
1046
1096
  {
1047
- comment: "",
1097
+ feedback: o.state,
1098
+ drawing: { ...i.state, ...c }
1099
+ },
1100
+ d
1101
+ );
1102
+ }), l = (c) => {
1103
+ n = c;
1104
+ const d = ze(n), h = {
1105
+ ..._e(e),
1106
+ ...d == null ? void 0 : d.feedback.customInputValues
1107
+ };
1108
+ o.setState({
1109
+ message: (d == null ? void 0 : d.feedback.message) || "",
1110
+ customInputValues: h,
1111
+ hasUserInteracted: !1
1112
+ }), i.setState({
1113
+ shapes: (d == null ? void 0 : d.drawing.shapes) || []
1114
+ });
1115
+ }, s = () => {
1116
+ Ze(n);
1117
+ const c = {
1118
+ feedback: {
1119
+ message: "",
1048
1120
  screenshot: void 0,
1049
1121
  isCapturing: !1,
1050
- isMinimized: !1
1122
+ isMinimized: !1,
1123
+ hasUserInteracted: !1,
1124
+ customInputValues: _e(e)
1051
1125
  },
1052
- !0
1053
- ), i.setState(
1054
- {
1126
+ drawing: {
1055
1127
  isDrawing: !1,
1056
1128
  currentPoints: [],
1057
1129
  shapes: [],
1058
1130
  selectedShapeId: null,
1059
1131
  selectedTool: "rectangle",
1132
+ selectedColor: e.primaryColor,
1060
1133
  showTooltip: !0,
1061
1134
  mousePosition: { x: 0, y: 0 },
1062
1135
  hasDrawn: !1,
1063
- selectedColor: e.primaryColor,
1064
1136
  isDragging: !1,
1065
1137
  dragStartPos: null,
1066
1138
  initialClickPos: null,
1067
- dragOffset: null
1139
+ dragOffset: null,
1140
+ cursor: i.state.cursor
1068
1141
  },
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);
1142
+ widget: {
1143
+ isOpen: !1
1144
+ }
1145
+ };
1146
+ o.setState(c.feedback, !0), i.setState(c.drawing, !0), t.setState(c.widget);
1077
1147
  };
1078
1148
  return {
1079
1149
  feedback: o,
1080
1150
  drawing: i,
1081
- widget: r,
1151
+ widget: t,
1082
1152
  methods: {
1083
- reset: l,
1153
+ reset: s,
1154
+ handlePageChange: l,
1084
1155
  submit: async (c) => {
1085
- r.setState({ isOpen: !1 });
1156
+ t.setState({ isOpen: !1 });
1086
1157
  try {
1087
1158
  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);
1159
+ return d instanceof Response && !d.ok ? (a.show({ type: "error", message: "Submission failed" }), d) : (s(), a.show({ type: "success", message: "Feedback submitted" }), d);
1089
1160
  } catch {
1090
- s({ show: !0, type: "error", message: "Submission failed" });
1161
+ a.show({ type: "error", message: "Submission failed" });
1091
1162
  }
1092
1163
  }
1093
1164
  }
1094
1165
  };
1095
- }, Ke = Je(), Yt = (e) => {
1096
- const t = Bt({
1166
+ }, at = dt(), cn = (e) => {
1167
+ const n = ln({
1097
1168
  primaryColor: e.primaryColor,
1098
1169
  onSubmit: e.onSubmit,
1099
1170
  textConfig: e.textConfig,
1100
- position: e.position
1171
+ position: e.position,
1172
+ customInputs: e.customInputs
1101
1173
  });
1102
- return g(Ke.Provider, {
1103
- value: t,
1174
+ return g(at.Provider, {
1175
+ value: n,
1104
1176
  get children() {
1105
1177
  return e.children;
1106
1178
  }
1107
1179
  });
1108
- }, x = () => {
1109
- const e = qe(Ke);
1180
+ }, E = () => {
1181
+ const e = ut(at);
1110
1182
  if (!e)
1111
1183
  throw new Error("useEchoStore must be used within EchoProvider");
1112
1184
  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;
1185
+ }, dn = (e) => {
1186
+ const [n, t] = A({
1187
+ width: document.documentElement.clientWidth,
1188
+ height: document.documentElement.scrollHeight
1189
+ }), r = () => {
1190
+ requestAnimationFrame(() => {
1191
+ const a = e();
1192
+ a && (a.style.height = "0px", a.style.height = `${document.documentElement.scrollHeight}px`, t({
1193
+ width: document.documentElement.clientWidth,
1194
+ height: document.documentElement.scrollHeight
1195
+ }));
1196
+ });
1197
+ };
1198
+ return M({
1199
+ event: "resize",
1200
+ callback: r,
1201
+ onMount: r
1202
+ }), Oe({
1203
+ target: document.documentElement,
1204
+ options: {
1205
+ childList: !0,
1206
+ subtree: !0,
1207
+ attributes: !0
1208
+ },
1209
+ callback: r
1210
+ }), n;
1211
+ }, un = ({ onUrlChange: e }) => {
1212
+ let n = Ee();
1213
+ const t = () => {
1214
+ const r = Ee();
1215
+ r !== n && (n = r, e(r));
1216
+ };
1217
+ M({ event: "popstate", callback: t }), M({ event: "pushstate", callback: t }), M({ event: "replacestate", callback: t }), Oe({
1218
+ target: document.documentElement,
1219
+ options: {
1220
+ childList: !0,
1221
+ subtree: !0
1222
+ },
1223
+ callback: t
1224
+ });
1225
+ }, 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)}.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),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%;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}`;
1226
+ var gn = /* @__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>'), fn = /* @__PURE__ */ w("<button class=echo-color-swatch-button role=option>");
1227
+ const mn = [
1228
+ "#ff6b6b",
1229
+ // Soft Red
1230
+ "#69db7c",
1231
+ // Soft Green
1232
+ "#74c0fc",
1233
+ // Soft Blue
1234
+ "#ffd43b",
1235
+ // Soft Yellow
1236
+ "#da77f2",
1237
+ // Soft Purple
1238
+ "#66d9e8",
1239
+ // Soft Cyan
1240
+ "#ffa94d",
1241
+ // Soft Orange
1242
+ "#e599f7"
1243
+ // Soft Pink
1244
+ ], vn = {
1245
+ "#ff6b6b": "Soft Red",
1246
+ "#69db7c": "Soft Green",
1247
+ "#74c0fc": "Soft Blue",
1248
+ "#ffd43b": "Soft Yellow",
1249
+ "#da77f2": "Soft Purple",
1250
+ "#66d9e8": "Soft Cyan",
1251
+ "#ffa94d": "Soft Orange",
1252
+ "#e599f7": "Soft Pink"
1253
+ }, Se = (e) => vn[e] || "Primary", bn = () => {
1254
+ const e = E();
1255
+ return (() => {
1256
+ var n = gn(), t = n.firstChild, r = t.nextSibling, a = r.firstChild;
1257
+ return u(t, "aria-expanded", !1), v(a, g(_, {
1258
+ get each() {
1259
+ return [e.widget.state.primaryColor, ...mn];
1260
+ },
1261
+ children: (o) => (() => {
1262
+ var i = fn();
1263
+ return i.$$click = () => e.drawing.setState({
1264
+ selectedColor: o
1265
+ }), o != null ? i.style.setProperty("background-color", o) : i.style.removeProperty("background-color"), b((l) => {
1266
+ var s = `Select ${Se(o)} color`, c = e.drawing.state.selectedColor === o, d = `${Se(o)} color`, h = e.drawing.state.selectedColor === o;
1267
+ 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;
1268
+ }, {
1269
+ e: void 0,
1270
+ t: void 0,
1271
+ a: void 0,
1272
+ o: void 0
1273
+ }), i;
1274
+ })()
1275
+ })), b((o) => {
1276
+ var i = `Current color: ${Se(e.drawing.state.selectedColor)}`, l = e.drawing.state.selectedColor;
1277
+ 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;
1278
+ }, {
1279
+ e: void 0,
1280
+ t: void 0
1281
+ }), n;
1282
+ })();
1283
+ };
1284
+ T(["click"]);
1285
+ 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">');
1286
+ const yn = (e) => (() => {
1287
+ var n = wn();
1288
+ return b((t) => {
1289
+ 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;
1290
+ 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
1291
  }, {
1121
1292
  e: void 0,
1122
1293
  t: void 0,
@@ -1125,28 +1296,28 @@ const _t = (e) => (() => {
1125
1296
  i: void 0,
1126
1297
  n: void 0,
1127
1298
  s: void 0
1128
- }), t;
1299
+ }), n;
1129
1300
  })();
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;
1301
+ 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">');
1302
+ const xn = (e) => (() => {
1303
+ var n = pn(), t = n.firstChild;
1304
+ return b((r) => {
1305
+ var a = e.size ?? 24, o = e.size ?? 24, i = e.class, l = e.style, s = e.fill ?? "currentColor";
1306
+ 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
1307
  }, {
1137
1308
  e: void 0,
1138
1309
  t: void 0,
1139
1310
  a: void 0,
1140
1311
  o: void 0,
1141
1312
  i: void 0
1142
- }), t;
1313
+ }), n;
1143
1314
  })();
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;
1315
+ 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">');
1316
+ const Sn = (e) => (() => {
1317
+ var n = kn();
1318
+ return b((t) => {
1319
+ 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;
1320
+ 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
1321
  }, {
1151
1322
  e: void 0,
1152
1323
  t: void 0,
@@ -1155,14 +1326,14 @@ const Rt = (e) => (() => {
1155
1326
  i: void 0,
1156
1327
  n: void 0,
1157
1328
  s: void 0
1158
- }), t;
1329
+ }), n;
1159
1330
  })();
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;
1331
+ 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">');
1332
+ const $n = (e) => (() => {
1333
+ var n = Cn();
1334
+ return b((t) => {
1335
+ 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;
1336
+ 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
1337
  }, {
1167
1338
  e: void 0,
1168
1339
  t: void 0,
@@ -1171,14 +1342,14 @@ const Gt = (e) => (() => {
1171
1342
  i: void 0,
1172
1343
  n: void 0,
1173
1344
  s: void 0
1174
- }), t;
1345
+ }), n;
1175
1346
  })();
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;
1347
+ 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>');
1348
+ const it = (e) => (() => {
1349
+ var n = En();
1350
+ return b((t) => {
1351
+ 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;
1352
+ 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
1353
  }, {
1183
1354
  e: void 0,
1184
1355
  t: void 0,
@@ -1187,14 +1358,14 @@ const Ve = (e) => (() => {
1187
1358
  i: void 0,
1188
1359
  n: void 0,
1189
1360
  s: void 0
1190
- }), t;
1361
+ }), n;
1191
1362
  })();
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;
1363
+ 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">');
1364
+ const zn = (e) => (() => {
1365
+ var n = Pn();
1366
+ return b((t) => {
1367
+ 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;
1368
+ 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
1369
  }, {
1199
1370
  e: void 0,
1200
1371
  t: void 0,
@@ -1203,14 +1374,14 @@ const Qt = (e) => (() => {
1203
1374
  i: void 0,
1204
1375
  n: void 0,
1205
1376
  s: void 0
1206
- }), t;
1377
+ }), n;
1207
1378
  })();
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;
1379
+ 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">');
1380
+ const In = (e) => (() => {
1381
+ var n = Tn();
1382
+ return b((t) => {
1383
+ 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;
1384
+ 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
1385
  }, {
1215
1386
  e: void 0,
1216
1387
  t: void 0,
@@ -1219,14 +1390,14 @@ const en = (e) => (() => {
1219
1390
  i: void 0,
1220
1391
  n: void 0,
1221
1392
  s: void 0
1222
- }), t;
1393
+ }), n;
1223
1394
  })();
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;
1395
+ 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">');
1396
+ const pe = (e) => (() => {
1397
+ var n = On();
1398
+ return b((t) => {
1399
+ 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;
1400
+ 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
1401
  }, {
1231
1402
  e: void 0,
1232
1403
  t: void 0,
@@ -1235,97 +1406,84 @@ const ie = (e) => (() => {
1235
1406
  i: void 0,
1236
1407
  n: void 0,
1237
1408
  s: void 0
1238
- }), t;
1409
+ }), n;
1239
1410
  })();
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();
1411
+ 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>");
1412
+ const Dn = {
1413
+ rectangle: Sn,
1414
+ path: $n
1415
+ }, Fn = () => {
1416
+ const e = E(), n = Object.values(B);
1260
1417
  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];
1418
+ var t = Mn(), r = t.firstChild;
1419
+ return v(t, g(_, {
1420
+ each: n,
1421
+ children: (a) => {
1422
+ const o = Dn[a.id];
1288
1423
  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;
1424
+ var i = An();
1425
+ return i.$$click = () => e.drawing.setState({
1426
+ selectedTool: a.id
1427
+ }), v(i, g(o, {
1428
+ class: "echo-drawing-toolbar-icon",
1429
+ "aria-hidden": "true"
1430
+ })), b((l) => {
1431
+ var s = a.label, c = e.drawing.state.selectedTool === a.id, d = a.label, h = e.drawing.state.selectedTool === a.id;
1432
+ 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
1433
  }, {
1298
1434
  e: void 0,
1299
- t: void 0
1300
- }), a;
1435
+ t: void 0,
1436
+ a: void 0,
1437
+ o: void 0
1438
+ }), i;
1301
1439
  })();
1302
1440
  }
1303
- }), o), m(n, g(an, {}), o), o.$$click = () => e.drawing.setState({
1441
+ }), r), v(t, g(bn, {}), r), r.$$click = () => e.drawing.setState({
1304
1442
  shapes: []
1305
- }, !0), m(o, g(Ve, {
1306
- class: "echo-drawing-toolbar-icon"
1307
- })), n;
1443
+ }, !0), v(r, g(it, {
1444
+ class: "echo-drawing-toolbar-icon",
1445
+ "aria-hidden": "true"
1446
+ })), t;
1308
1447
  })();
1309
1448
  };
1310
1449
  T(["click"]);
1311
- var hn = /* @__PURE__ */ b("<button>");
1312
- const O = (e) => {
1313
- const t = () => e.variant || "primary", n = () => e.size || "md";
1450
+ var Ln = /* @__PURE__ */ w("<div class=echo-drawing-tooltip data-hide-when-drawing=true>");
1451
+ const jn = () => {
1452
+ const e = E(), n = S(() => e.drawing.state.showTooltip && e.drawing.state.mousePosition.y && e.drawing.state.mousePosition.x && e.widget.state.isOpen && !Rt());
1453
+ return g(D, {
1454
+ get when() {
1455
+ return n();
1456
+ },
1457
+ get children() {
1458
+ var t = Ln();
1459
+ return v(t, () => e.widget.state.text.drawingTooltip.text), b((r) => {
1460
+ var a = `${e.drawing.state.mousePosition.y + 20}px`, o = `${e.drawing.state.mousePosition.x + 10}px`;
1461
+ 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;
1462
+ }, {
1463
+ e: void 0,
1464
+ t: void 0
1465
+ }), t;
1466
+ }
1467
+ });
1468
+ };
1469
+ var Nn = /* @__PURE__ */ w("<button>");
1470
+ const W = (e) => {
1471
+ const n = () => e.variant || "primary", t = () => e.size || "md";
1314
1472
  return (() => {
1315
- var o = hn();
1316
- return dt(o, Z(e, {
1473
+ var r = Nn();
1474
+ return $t(r, ge(e, {
1317
1475
  get class() {
1318
- return `echo-button echo-button-${t()} echo-button-${n()} ${e.class}`;
1476
+ return `echo-button echo-button-${n()} echo-button-${t()} ${e.class}`;
1319
1477
  }
1320
- }), !1), o;
1478
+ }), !1), r;
1321
1479
  })();
1322
1480
  };
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;
1481
+ 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>');
1482
+ const Vn = (e) => (() => {
1483
+ var n = qn();
1484
+ return b((t) => {
1485
+ 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;
1486
+ 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
1487
  }, {
1330
1488
  e: void 0,
1331
1489
  t: void 0,
@@ -1334,173 +1492,192 @@ const fn = (e) => (() => {
1334
1492
  i: void 0,
1335
1493
  n: void 0,
1336
1494
  s: void 0
1337
- }), t;
1495
+ }), n;
1338
1496
  })();
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
1497
+ 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>");
1498
+ const Hn = () => {
1499
+ const e = E();
1500
+ let n;
1501
+ const [t, r] = A(xe()), [a, o] = A(window.location.pathname), i = (m) => {
1502
+ m.key === "Escape" && e.widget.state.isStoredFeedbackOpen && e.widget.setState({
1503
+ isStoredFeedbackOpen: !1
1504
+ });
1505
+ }, l = (m) => {
1506
+ if (!e.widget.state.isStoredFeedbackOpen || !n) return;
1507
+ m.composedPath().includes(n) || e.widget.setState({
1508
+ isStoredFeedbackOpen: !1
1345
1509
  });
1346
- }, a = () => {
1347
- i(window.location.pathname);
1510
+ }, s = () => {
1511
+ const m = xe();
1512
+ r(m), e.widget.setState({
1513
+ pagesCount: m.length
1514
+ });
1515
+ }, c = () => {
1516
+ o(window.location.pathname);
1348
1517
  };
1349
- W({
1518
+ M({
1350
1519
  event: "echo-storage-change",
1351
- callback: r
1352
- }), W({
1520
+ callback: s
1521
+ }), M({
1353
1522
  event: "popstate",
1354
- callback: a
1355
- }), ge({
1523
+ callback: c
1524
+ }), Oe({
1356
1525
  target: document.documentElement,
1357
1526
  options: {
1358
1527
  childList: !0,
1359
1528
  subtree: !0
1360
1529
  },
1361
1530
  callback: () => {
1362
- i(window.location.pathname);
1531
+ o(window.location.pathname);
1363
1532
  }
1533
+ }), M({
1534
+ event: "keydown",
1535
+ callback: i
1536
+ }), M({
1537
+ event: "click",
1538
+ callback: l
1364
1539
  });
1365
- const l = (d, u) => {
1366
- const f = u ? `${d}${u}` : d;
1367
- window.location.href = f, e.widget.setState({
1540
+ const d = (m, y) => {
1541
+ const x = y ? `${m}${y}` : m;
1542
+ window.location.href = x, e.widget.setState({
1368
1543
  isStoredFeedbackOpen: !1
1369
1544
  });
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
1545
+ }, h = (m) => {
1546
+ a() === m && e.methods.reset(), Ze(m);
1547
+ const y = xe();
1548
+ r(y), e.widget.setState({
1549
+ pagesCount: y.length
1375
1550
  });
1376
- }, c = (d) => {
1377
- if (d === "/") return "/";
1378
- const u = d.split("/");
1379
- return u.length <= 4 ? d : `/${u[1]}/.../${u[u.length - 1]}`;
1551
+ }, f = (m) => {
1552
+ if (m === "/") return "/";
1553
+ const y = m.split("/");
1554
+ return y.length <= 4 ? m : `/${y[1]}/.../${y[y.length - 1]}`;
1380
1555
  };
1381
- return g(j, {
1556
+ return g(D, {
1382
1557
  get when() {
1383
1558
  return e.widget.state.isStoredFeedbackOpen;
1384
1559
  },
1385
1560
  get children() {
1386
- var d = mn(), u = d.firstChild;
1387
- u.firstChild;
1388
- var f = u.nextSibling;
1389
- return m(u, g(O, {
1561
+ var m = Wn(), y = m.firstChild;
1562
+ y.firstChild;
1563
+ var x = y.nextSibling, C = n;
1564
+ return typeof C == "function" ? V(C, m) : n = m, v(y, g(W, {
1390
1565
  variant: "secondary",
1391
1566
  size: "sm",
1392
1567
  onClick: () => e.widget.setState({
1393
1568
  isStoredFeedbackOpen: !1
1394
1569
  }),
1395
1570
  get children() {
1396
- return g(ie, {
1571
+ return g(pe, {
1397
1572
  size: 20
1398
1573
  });
1399
1574
  }
1400
- }), null), m(f, g(re, {
1575
+ }), null), v(x, g(_, {
1401
1576
  get each() {
1402
1577
  return t();
1403
1578
  },
1404
- children: (v) => {
1405
- const y = p(() => v.path === o());
1579
+ children: ($) => {
1580
+ const p = S(() => $.path === a());
1406
1581
  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, {
1582
+ var P = _n(), z = P.firstChild, k = z.firstChild, H = k.nextSibling, q = z.nextSibling;
1583
+ return v(k, () => f($.path)), v(H, () => $.state.feedback.message), v(q, (() => {
1584
+ var I = S(() => !p());
1585
+ return () => I() && g(W, {
1411
1586
  class: "echo-stored-feedback-link",
1412
1587
  variant: "secondary",
1413
1588
  size: "sm",
1414
- onClick: () => l(v.path, v.state.latestQuery),
1589
+ onClick: () => d($.path, $.state.latestQuery),
1415
1590
  get children() {
1416
- return g(fn, {});
1591
+ return g(Vn, {});
1417
1592
  }
1418
1593
  });
1419
- })(), null), m(we, g(O, {
1594
+ })(), null), v(q, g(W, {
1420
1595
  class: "echo-stored-feedback-delete",
1421
1596
  variant: "secondary",
1422
1597
  size: "sm",
1423
- onClick: () => s(v.path),
1598
+ onClick: () => h($.path),
1424
1599
  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;
1600
+ }), null), b((I) => {
1601
+ var Me = `echo-stored-feedback-item ${p() ? "echo-stored-feedback-item-current" : ""}`, Ae = $.path;
1602
+ return Me !== I.e && Re(P, I.e = Me), Ae !== I.t && u(k, "title", I.t = Ae), I;
1428
1603
  }, {
1429
1604
  e: void 0,
1430
1605
  t: void 0
1431
- }), k;
1606
+ }), P;
1432
1607
  })();
1433
1608
  }
1434
- }), null), m(f, g(j, {
1609
+ }), null), v(x, g(D, {
1435
1610
  get when() {
1436
1611
  return t().length === 0;
1437
1612
  },
1438
1613
  get children() {
1439
- return gn();
1614
+ return Bn();
1440
1615
  }
1441
- }), null), d;
1616
+ }), null), m;
1442
1617
  }
1443
1618
  });
1444
1619
  };
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);
1620
+ 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>");
1621
+ const Rn = () => {
1622
+ const e = E(), [n, t] = A(!1);
1623
+ let r;
1624
+ const a = () => {
1625
+ r && window.clearTimeout(r), r = window.setTimeout(() => {
1626
+ const c = G("welcome_message_shown", !1);
1627
+ !e.widget.state.isOpen && !e.widget.state.isStoredFeedbackOpen && c && t(!0);
1453
1628
  }, 4e3);
1454
- }, r = () => {
1455
- n(!1);
1456
- }, a = () => {
1457
- i();
1629
+ }, o = () => {
1630
+ t(!1);
1631
+ }, i = () => {
1632
+ a();
1458
1633
  }, l = () => {
1459
1634
  e.widget.setState({
1460
1635
  isOpen: !e.widget.state.isOpen
1461
1636
  }), e.widget.setState({
1462
1637
  welcomeMessageIsClosing: !0
1463
- }), he("welcome_message_shown", !0);
1638
+ }), ae("welcome_message_shown", !0);
1464
1639
  };
1465
- oe(() => {
1466
- e.widget.state.isOpen || (n(!1), i()), e.widget.state.isStoredFeedbackOpen && n(!1);
1640
+ Y(() => {
1641
+ e.widget.state.isOpen || (t(!1), a()), e.widget.state.isStoredFeedbackOpen && t(!1);
1467
1642
  });
1468
1643
  const s = (c) => {
1469
1644
  c.stopPropagation(), e.widget.setState({
1470
1645
  isStoredFeedbackOpen: !e.widget.state.isStoredFeedbackOpen
1471
- }), n(!1);
1646
+ }), t(!1);
1472
1647
  };
1473
1648
  return [(() => {
1474
- var c = bn();
1475
- return c.addEventListener("pointerleave", a), c.addEventListener("pointerenter", r), c.$$click = l, m(c, g(Kt, {
1649
+ var c = Un();
1650
+ return c.addEventListener("pointerleave", i), c.addEventListener("pointerenter", o), c.$$click = l, v(c, g(xn, {
1476
1651
  stroke: "white",
1477
- fill: "#ffffff"
1478
- }), null), m(c, (() => {
1479
- var d = p(() => e.widget.state.pagesCount > 0);
1652
+ fill: "#ffffff",
1653
+ "aria-hidden": "true"
1654
+ }), null), v(c, (() => {
1655
+ var d = S(() => e.widget.state.pagesCount > 0);
1480
1656
  return () => d() && (() => {
1481
- var u = yn();
1482
- return u.$$click = s, m(u, () => e.widget.state.pagesCount), u;
1657
+ var h = Yn();
1658
+ 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
1659
  })();
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;
1660
+ })(), null), b((d) => {
1661
+ var h = e.widget.state.isOpen, f = n() ? "45px" : "0", m = e.widget.state.isOpen;
1662
+ return h !== d.e && u(c, "data-hidden", d.e = h), f !== d.t && ((d.t = f) != null ? c.style.setProperty("left", f) : c.style.removeProperty("left")), m !== d.a && u(c, "aria-expanded", d.a = m), d;
1487
1663
  }, {
1488
1664
  e: void 0,
1489
- t: void 0
1665
+ t: void 0,
1666
+ a: void 0
1490
1667
  }), c;
1491
- })(), g(wn, {})];
1668
+ })(), g(Hn, {})];
1492
1669
  };
1493
1670
  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 = () => {
1671
+ 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>");
1672
+ const Gn = () => {
1673
+ const e = E(), n = () => {
1497
1674
  e.widget.setState({
1498
1675
  notification: {
1499
1676
  ...e.widget.state.notification,
1500
1677
  show: !1
1501
1678
  }
1502
1679
  });
1503
- }, n = () => {
1680
+ }, t = () => {
1504
1681
  switch (e.widget.state.notification.type) {
1505
1682
  case "success":
1506
1683
  return e.widget.state.text.notification.successTitle;
@@ -1511,111 +1688,183 @@ const kn = () => {
1511
1688
  }
1512
1689
  };
1513
1690
  return (() => {
1514
- var o = xn(), i = o.firstChild, r = i.nextSibling, a = r.firstChild, l = a.nextSibling;
1515
- return m(o, g(O, {
1691
+ var r = Kn(), a = r.firstChild, o = a.nextSibling, i = o.firstChild, l = i.nextSibling;
1692
+ return v(r, g(W, {
1516
1693
  class: "echo-notification-hide",
1517
1694
  variant: "secondary",
1518
1695
  size: "sm",
1519
- onClick: t,
1696
+ onClick: n,
1520
1697
  get title() {
1521
1698
  return e.widget.state.text.notification.hideTitle;
1522
1699
  },
1523
1700
  get children() {
1524
- return g(ie, {
1701
+ return g(pe, {
1525
1702
  size: 20
1526
1703
  });
1527
1704
  }
1528
- }), i), m(i, (() => {
1529
- var s = p(() => e.widget.state.notification.type === "success");
1530
- return () => s() ? g(Qt, {
1705
+ }), a), v(a, (() => {
1706
+ var s = S(() => e.widget.state.notification.type === "success");
1707
+ return () => s() ? g(zn, {
1531
1708
  size: 32
1532
1709
  }) : (() => {
1533
- var c = p(() => e.widget.state.notification.type === "error");
1534
- return () => c() ? g(en, {
1710
+ var c = S(() => e.widget.state.notification.type === "error");
1711
+ return () => c() ? g(In, {
1535
1712
  size: 32
1536
1713
  }) : null;
1537
1714
  })();
1538
- })()), m(a, n), m(l, () => {
1715
+ })()), v(i, t), v(l, () => {
1539
1716
  var s;
1540
1717
  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;
1718
+ }), b((s) => {
1719
+ var c = e.widget.state.notification.type, d = !e.widget.state.notification.type, h = !e.widget.state.notification.show;
1720
+ 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
1721
  }, {
1545
1722
  e: void 0,
1546
1723
  t: void 0,
1547
1724
  a: void 0
1548
- }), o;
1725
+ }), r;
1726
+ })();
1727
+ };
1728
+ var Xn = /* @__PURE__ */ w("<div class=echo-shape-actions data-hide-when-drawing=true>");
1729
+ const Jn = () => {
1730
+ const e = E();
1731
+ let n;
1732
+ const [t, r] = A({
1733
+ x: window.scrollX,
1734
+ y: window.scrollY
1735
+ });
1736
+ M({
1737
+ event: "scroll",
1738
+ callback: () => {
1739
+ r({
1740
+ x: window.scrollX,
1741
+ y: window.scrollY
1742
+ });
1743
+ }
1744
+ });
1745
+ const o = () => {
1746
+ e.drawing.state.selectedShapeId && e.drawing.setState({
1747
+ shapes: e.drawing.state.shapes.filter((s) => s.id !== e.drawing.state.selectedShapeId),
1748
+ selectedShapeId: null
1749
+ });
1750
+ }, i = S(() => e.drawing.state.selectedShapeId ? e.drawing.state.shapes.find((s) => s.id === e.drawing.state.selectedShapeId) : null), l = S(() => {
1751
+ const s = i(), c = n == null ? void 0 : n.getBoundingClientRect();
1752
+ if (!s || !c) return null;
1753
+ let d = null;
1754
+ if (s.type === "rectangle") {
1755
+ const m = ot(s.points);
1756
+ if (!m) return null;
1757
+ d = {
1758
+ x: m.x + m.width / 2,
1759
+ y: m.y
1760
+ };
1761
+ } else if (s.type === "path" && s.points.length > 0)
1762
+ d = {
1763
+ x: s.points[0].x,
1764
+ y: s.points[0].y
1765
+ };
1766
+ else
1767
+ return null;
1768
+ const h = 8, f = t();
1769
+ return {
1770
+ x: Math.max(c.width / 2 + h, Math.min(window.innerWidth - c.width / 2 - h, d.x - f.x)),
1771
+ y: Math.max(c.height + h, Math.min(window.innerHeight - h, d.y - f.y))
1772
+ };
1773
+ });
1774
+ return (() => {
1775
+ var s = Xn(), c = n;
1776
+ return typeof c == "function" ? V(c, s) : n = s, v(s, g(W, {
1777
+ onClick: o,
1778
+ size: "sm",
1779
+ variant: "secondary",
1780
+ title: "Delete shape",
1781
+ get children() {
1782
+ return g(it, {
1783
+ size: 20
1784
+ });
1785
+ }
1786
+ })), b((d) => {
1787
+ var y, x;
1788
+ var h = !l(), f = l() ? `${(y = l()) == null ? void 0 : y.x}px` : "0", m = l() ? `${(x = l()) == null ? void 0 : x.y}px` : "0";
1789
+ return h !== d.e && (s.hidden = d.e = h), f !== d.t && ((d.t = f) != null ? s.style.setProperty("left", f) : s.style.removeProperty("left")), m !== d.a && ((d.a = m) != null ? s.style.setProperty("top", m) : s.style.removeProperty("top")), d;
1790
+ }, {
1791
+ e: void 0,
1792
+ t: void 0,
1793
+ a: void 0
1794
+ }), s;
1549
1795
  })();
1550
1796
  };
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({
1797
+ 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>");
1798
+ const Qn = () => {
1799
+ const e = E(), n = G("welcome_message_shown", !1), t = (a) => {
1800
+ a.stopPropagation(), e.widget.setState({
1555
1801
  welcomeMessageIsClosing: !0
1556
- }), he("welcome_message_shown", !0);
1557
- }, o = () => {
1802
+ }), ae("welcome_message_shown", !0);
1803
+ }, r = () => {
1558
1804
  e.widget.setState({
1559
1805
  isOpen: !0
1560
1806
  }), e.widget.setState({
1561
1807
  welcomeMessageIsClosing: !0
1562
- }), he("welcome_message_shown", !0);
1808
+ }), ae("welcome_message_shown", !0);
1563
1809
  };
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, {
1810
+ return n ? null : (() => {
1811
+ var a = Zn(), o = a.firstChild, i = o.nextSibling;
1812
+ 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, g(pe, {
1567
1813
  size: 16,
1568
1814
  strokeWidth: 3
1569
- })), w((l) => {
1815
+ })), b((l) => {
1570
1816
  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;
1817
+ return s !== l.e && u(a, "data-hidden", l.e = s), c !== l.t && u(i, "aria-label", l.t = c), l;
1572
1818
  }, {
1573
1819
  e: void 0,
1574
1820
  t: void 0
1575
- }), i;
1821
+ }), a;
1576
1822
  })();
1577
1823
  };
1578
1824
  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, {
1825
+ 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);
1826
+ const He = (e) => {
1827
+ const n = S(() => e.id === e.selectedShapeId);
1828
+ return [g(D, {
1583
1829
  get when() {
1584
1830
  return e.type === "rectangle";
1585
1831
  },
1586
1832
  get children() {
1587
- return g(En, Z(e, {
1833
+ return g(nr, ge(e, {
1588
1834
  get isSelected() {
1589
- return t();
1835
+ return n();
1590
1836
  }
1591
1837
  }));
1592
1838
  }
1593
- }), g(j, {
1839
+ }), g(D, {
1594
1840
  get when() {
1595
1841
  return e.type === "path";
1596
1842
  },
1597
1843
  get children() {
1598
- return g(zn, Z(e, {
1844
+ return g(rr, ge(e, {
1599
1845
  get isSelected() {
1600
- return t();
1846
+ return n();
1601
1847
  }
1602
1848
  }));
1603
1849
  }
1604
1850
  })];
1605
- }, En = (e) => {
1606
- const t = p(() => Ue(e.points));
1607
- return g(j, {
1851
+ }, nr = (e) => {
1852
+ const n = S(() => ot(e.points));
1853
+ return g(D, {
1608
1854
  get when() {
1609
- return t();
1855
+ return n();
1610
1856
  },
1611
1857
  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;
1858
+ var t = er();
1859
+ return t.$$keydown = (r) => {
1860
+ var a;
1861
+ return r.key === "Enter" && ((a = e.onShapeClick) == null ? void 0 : a.call(e, e.id));
1862
+ }, t.$$click = () => {
1863
+ var r;
1864
+ return (r = e.onShapeClick) == null ? void 0 : r.call(e, e.id);
1865
+ }, b((r) => {
1866
+ 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, f = e.isSelected ? B.rectangle.opacity.selected : B.rectangle.opacity.default, m = e.isSelected ? "5,5" : "none", y = e.isSelected ? "move" : "pointer", x = `Rectangle shape ${e.isSelected ? "(selected)" : ""}`, C = e.onShapeClick ? 0 : -1;
1867
+ 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), f !== r.r && u(t, "opacity", r.r = f), m !== r.d && u(t, "stroke-dasharray", r.d = m), y !== r.l && u(t, "cursor", r.l = y), x !== r.u && u(t, "aria-label", r.u = x), C !== r.c && u(t, "tabindex", r.c = C), r;
1619
1868
  }, {
1620
1869
  e: void 0,
1621
1870
  t: void 0,
@@ -1627,24 +1876,29 @@ const Oe = (e) => {
1627
1876
  h: void 0,
1628
1877
  r: void 0,
1629
1878
  d: void 0,
1630
- l: void 0
1631
- }), n;
1879
+ l: void 0,
1880
+ u: void 0,
1881
+ c: void 0
1882
+ }), t;
1632
1883
  }
1633
1884
  });
1634
- }, zn = (e) => {
1635
- const t = p(() => Tt(e.points));
1636
- return g(j, {
1885
+ }, rr = (e) => {
1886
+ const n = S(() => Kt(e.points));
1887
+ return g(D, {
1637
1888
  get when() {
1638
- return t();
1889
+ return n();
1639
1890
  },
1640
1891
  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;
1892
+ var t = tr();
1893
+ return t.$$keydown = (r) => {
1894
+ var a;
1895
+ return r.key === "Enter" && ((a = e.onShapeClick) == null ? void 0 : a.call(e, e.id));
1896
+ }, t.$$click = () => {
1897
+ var r;
1898
+ return (r = e.onShapeClick) == null ? void 0 : r.call(e, e.id);
1899
+ }, b((r) => {
1900
+ 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)" : ""}`, f = e.onShapeClick ? 0 : -1;
1901
+ 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), f !== r.r && u(t, "tabindex", r.r = f), r;
1648
1902
  }, {
1649
1903
  e: void 0,
1650
1904
  t: void 0,
@@ -1652,140 +1906,54 @@ const Oe = (e) => {
1652
1906
  o: void 0,
1653
1907
  i: void 0,
1654
1908
  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;
1909
+ s: void 0,
1910
+ h: void 0,
1911
+ r: void 0
1912
+ }), t;
1677
1913
  }
1678
1914
  });
1679
1915
  };
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, {
1916
+ T(["click", "keydown"]);
1917
+ 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>');
1918
+ const ar = () => {
1919
+ const e = E();
1920
+ let n;
1921
+ return ye(() => {
1922
+ 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
1923
  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);
1924
+ }), n == null || n.addEventListener("touchend", e.drawing.methods.handleEnd);
1925
+ }), ee(() => {
1926
+ 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
1927
  }), (() => {
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({
1928
+ var t = or(), r = t.firstChild, a = r.firstChild, o = n;
1929
+ return typeof o == "function" ? V(o, t) : n = t, v(t, g(jn, {}), r), v(t, g(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) => {
1930
+ i.preventDefault(), e.drawing.methods.handleMove(i);
1931
+ }, U(r, "mousemove", e.drawing.methods.handleMove, !0), r.$$touchstart = (i) => {
1932
+ i.preventDefault(), e.drawing.methods.handleStart(i), e.drawing.methods.handleEnter(i), e.drawing.setState({
1765
1933
  showTooltip: !1,
1766
1934
  hasDrawn: !0
1767
1935
  });
1768
- }, o.$$mousedown = (a) => {
1769
- e.drawing.methods.handleStart(a), e.drawing.setState({
1936
+ }, r.$$mousedown = (i) => {
1937
+ e.drawing.methods.handleStart(i), e.drawing.setState({
1770
1938
  showTooltip: !1,
1771
1939
  hasDrawn: !0
1772
1940
  });
1773
- }, m(o, g(re, {
1941
+ }, v(r, g(_, {
1774
1942
  get each() {
1775
1943
  return e.drawing.state.shapes;
1776
1944
  },
1777
- children: (a) => g(Oe, {
1945
+ children: (i) => g(He, {
1778
1946
  get id() {
1779
- return a.id;
1947
+ return i.id;
1780
1948
  },
1781
1949
  get type() {
1782
- return a.type;
1950
+ return i.type;
1783
1951
  },
1784
1952
  get color() {
1785
- return a.color;
1953
+ return i.color;
1786
1954
  },
1787
1955
  get points() {
1788
- return a.points;
1956
+ return i.points;
1789
1957
  },
1790
1958
  get selectedShapeId() {
1791
1959
  return e.drawing.state.selectedShapeId;
@@ -1794,7 +1962,7 @@ const An = () => {
1794
1962
  return e.drawing.methods.handleShapeClick;
1795
1963
  }
1796
1964
  })
1797
- }), null), m(o, g(Oe, {
1965
+ }), null), v(r, g(He, {
1798
1966
  id: "temp",
1799
1967
  get type() {
1800
1968
  return e.drawing.state.selectedTool;
@@ -1808,191 +1976,594 @@ const An = () => {
1808
1976
  get selectedShapeId() {
1809
1977
  return e.drawing.state.selectedShapeId;
1810
1978
  }
1811
- }), null), w((a) => {
1812
- var l = e.drawing.state.cursor, s = At({
1979
+ }), null), b((i) => {
1980
+ var l = e.drawing.state.cursor, s = nn({
1813
1981
  width: e.widget.state.dimensions.width,
1814
1982
  height: e.widget.state.dimensions.height
1815
1983
  }, 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;
1984
+ 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
1985
  }, {
1818
1986
  e: void 0,
1819
1987
  t: void 0
1820
- }), n;
1988
+ }), t;
1821
1989
  })();
1822
1990
  };
1823
1991
  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
1992
+ const ce = (e) => ({
1993
+ handleTextChange: (o) => {
1994
+ const i = o.target;
1995
+ e(i.value);
1996
+ },
1997
+ handleSelectChange: (o) => {
1998
+ e(o);
1999
+ },
2000
+ handleCheckboxChange: (o, i, l) => {
2001
+ const s = l ? [...o, i] : o.filter((c) => c !== i);
2002
+ e(s);
2003
+ },
2004
+ getCheckboxValue: (o) => Array.isArray(o) ? o : []
2005
+ });
2006
+ 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">*');
2007
+ const de = (e) => (() => {
2008
+ var n = ir();
2009
+ return v(n, (() => {
2010
+ var t = S(() => !!e.label);
2011
+ return () => t() && (() => {
2012
+ var r = sr(), a = r.firstChild;
2013
+ return v(a, () => e.label), v(r, (() => {
2014
+ var o = S(() => !!e.required);
2015
+ return () => o() && lr();
2016
+ })(), null), r;
2017
+ })();
2018
+ })(), null), v(n, () => e.children, null), n;
2019
+ })();
2020
+ var cr = /* @__PURE__ */ w("<textarea class=echo-input-field rows=5>"), dr = /* @__PURE__ */ w("<div class=visually-hidden>");
2021
+ const st = (e) => {
2022
+ const {
2023
+ handleTextChange: n
2024
+ } = ce(e.onChange);
2025
+ return g(de, {
2026
+ get label() {
2027
+ return e.config.label;
2028
+ },
2029
+ get required() {
2030
+ return e.config.required;
2031
+ },
2032
+ get children() {
2033
+ return [(() => {
2034
+ var t = cr();
2035
+ return U(t, "input", n, !0), b((r) => {
2036
+ 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`;
2037
+ 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;
2038
+ }, {
2039
+ e: void 0,
2040
+ t: void 0,
2041
+ a: void 0,
2042
+ o: void 0,
2043
+ i: void 0,
2044
+ n: void 0,
2045
+ s: void 0
2046
+ }), b(() => t.value = e.value === void 0 ? "" : e.value), t;
2047
+ })(), (() => {
2048
+ var t = dr();
2049
+ return v(t, () => e.config.placeholder), b(() => u(t, "id", `${e.config.id}-description`)), t;
2050
+ })()];
2051
+ }
2052
+ });
2053
+ };
2054
+ T(["input"]);
2055
+ var ur = /* @__PURE__ */ w("<fieldset class=echo-input-options role=group>"), hr = /* @__PURE__ */ w("<label class=echo-input-option><input type=checkbox><span>");
2056
+ const gr = (e) => {
2057
+ const {
2058
+ handleCheckboxChange: n,
2059
+ getCheckboxValue: t
2060
+ } = ce(e.onChange), r = () => t(e.value), a = () => r().length > 0;
2061
+ return g(de, {
2062
+ get label() {
2063
+ return e.config.label;
2064
+ },
2065
+ get required() {
2066
+ return e.config.required;
2067
+ },
2068
+ get children() {
2069
+ var o = ur();
2070
+ return v(o, g(_, {
2071
+ get each() {
2072
+ return e.config.options;
2073
+ },
2074
+ children: (i, l) => (() => {
2075
+ var s = hr(), c = s.firstChild, d = c.nextSibling;
2076
+ 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;
2077
+ })()
2078
+ })), b(() => u(o, "aria-required", e.config.required)), o;
2079
+ }
2080
+ });
2081
+ };
2082
+ var fr = /* @__PURE__ */ w("<fieldset class=echo-input-options role=radiogroup>"), mr = /* @__PURE__ */ w("<label class=echo-input-option><input type=radio><span>");
2083
+ const vr = (e) => {
2084
+ const {
2085
+ handleSelectChange: n
2086
+ } = ce(e.onChange);
2087
+ return g(de, {
2088
+ get label() {
2089
+ return e.config.label;
2090
+ },
2091
+ get required() {
2092
+ return e.config.required;
2093
+ },
2094
+ get children() {
2095
+ var t = fr();
2096
+ return v(t, g(_, {
2097
+ get each() {
2098
+ return e.config.options;
2099
+ },
2100
+ children: (r) => (() => {
2101
+ var a = mr(), o = a.firstChild, i = o.nextSibling;
2102
+ return o.addEventListener("change", () => n(r.value)), v(i, () => r.label), b((l) => {
2103
+ var s = e.config.id, c = e.config.required;
2104
+ return s !== l.e && u(o, "name", l.e = s), c !== l.t && (o.required = l.t = c), l;
2105
+ }, {
2106
+ e: void 0,
2107
+ t: void 0
2108
+ }), b(() => o.value = r.value), b(() => o.checked = e.value === r.value), a;
2109
+ })()
2110
+ })), b(() => u(t, "aria-required", e.config.required)), t;
2111
+ }
2112
+ });
2113
+ };
2114
+ 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>");
2115
+ const pr = (e) => {
2116
+ const {
2117
+ handleSelectChange: n
2118
+ } = ce(e.onChange), [t, r] = A(!1);
2119
+ let a, o, i;
2120
+ const l = () => e.config.options.find((h) => h.value === (e.value === void 0 ? "" : e.value)), s = (h, f) => {
2121
+ f.stopPropagation(), h.value === e.value ? e.config.required || n("") : n(h.value), r(!1);
2122
+ }, c = () => {
2123
+ r(!t());
2124
+ };
2125
+ return M({
2126
+ event: "mousedown",
2127
+ callback: (h) => {
2128
+ if (!t() || !a) return;
2129
+ h.composedPath().includes(a) || r(!1);
2130
+ }
2131
+ }), g(de, {
2132
+ get label() {
2133
+ return e.config.label;
2134
+ },
2135
+ get required() {
2136
+ return e.config.required;
2137
+ },
2138
+ get children() {
2139
+ var h = wr(), f = h.firstChild, m = f.firstChild, y = f.nextSibling, x = a;
2140
+ typeof x == "function" ? V(x, h) : a = h, f.$$click = (p) => {
2141
+ p.stopPropagation(), c();
2142
+ };
2143
+ var C = o;
2144
+ typeof C == "function" ? V(C, f) : o = f, v(m, () => {
2145
+ var p;
2146
+ return ((p = l()) == null ? void 0 : p.label) || e.config.placeholder;
2147
+ }), v(h, g(D, {
2148
+ get when() {
2149
+ return t();
2150
+ },
2151
+ get children() {
2152
+ var p = br();
2153
+ return v(p, g(_, {
2154
+ get each() {
2155
+ return e.config.options;
2156
+ },
2157
+ children: (P) => (() => {
2158
+ var z = yr();
2159
+ return z.$$click = (k) => s(P, k), v(z, () => P.label), b((k) => {
2160
+ var H = P.value === e.value, q = P.value === e.value;
2161
+ return H !== k.e && u(z, "aria-selected", k.e = H), q !== k.t && u(z, "data-selected", k.t = q), k;
2162
+ }, {
2163
+ e: void 0,
2164
+ t: void 0
2165
+ }), z;
2166
+ })()
2167
+ })), p;
1841
2168
  }
2169
+ }), y);
2170
+ var $ = i;
2171
+ return typeof $ == "function" ? V($, y) : i = y, b((p) => {
2172
+ var P = t(), z = !e.value, k = e.config.required, H = t(), q = e.config.required, I = e.config.required;
2173
+ return P !== p.e && u(f, "data-open", p.e = P), z !== p.t && u(f, "data-placeholder", p.t = z), k !== p.a && u(f, "data-required", p.a = k), H !== p.o && u(f, "aria-expanded", p.o = H), q !== p.i && u(f, "aria-required", p.i = q), I !== p.n && (y.required = p.n = I), p;
2174
+ }, {
2175
+ e: void 0,
2176
+ t: void 0,
2177
+ a: void 0,
2178
+ o: void 0,
2179
+ i: void 0,
2180
+ n: void 0
2181
+ }), b(() => y.value = e.value === void 0 ? "" : e.value), h;
2182
+ }
2183
+ });
2184
+ };
2185
+ T(["click"]);
2186
+ var xr = /* @__PURE__ */ w("<input type=text class=echo-input-field>");
2187
+ const kr = (e) => {
2188
+ const {
2189
+ handleTextChange: n
2190
+ } = ce(e.onChange);
2191
+ return g(de, {
2192
+ get label() {
2193
+ return e.config.label;
2194
+ },
2195
+ get required() {
2196
+ return e.config.required;
2197
+ },
2198
+ get children() {
2199
+ var t = xr();
2200
+ return U(t, "input", n, !0), b((r) => {
2201
+ var a = e.config.placeholder, o = e.config.required;
2202
+ return a !== r.e && u(t, "placeholder", r.e = a), o !== r.t && (t.required = r.t = o), r;
2203
+ }, {
2204
+ e: void 0,
2205
+ t: void 0
2206
+ }), b(() => t.value = e.value === void 0 ? "" : e.value), t;
2207
+ }
2208
+ });
2209
+ };
2210
+ T(["input"]);
2211
+ var Sr = /* @__PURE__ */ w("<div class=echo-input-error>Invalid input type"), Cr = /* @__PURE__ */ w("<div class=echo-input-error>Unsupported input type: ");
2212
+ const $r = (e) => g(D, {
2213
+ get when() {
2214
+ return e.config.type;
2215
+ },
2216
+ keyed: !0,
2217
+ get fallback() {
2218
+ return Sr();
2219
+ },
2220
+ get children() {
2221
+ return g(ht, {
2222
+ get fallback() {
2223
+ return (() => {
2224
+ var n = Cr();
2225
+ return n.firstChild, v(n, () => e.config.type, null), n;
2226
+ })();
1842
2227
  },
1843
- console: _e()
1844
- };
1845
- t.methods.submit(l);
2228
+ get children() {
2229
+ return [g(te, {
2230
+ get when() {
2231
+ return e.config.type === "text";
2232
+ },
2233
+ get children() {
2234
+ return g(kr, {
2235
+ get config() {
2236
+ return e.config;
2237
+ },
2238
+ get value() {
2239
+ return e.value;
2240
+ },
2241
+ get onChange() {
2242
+ return e.onChange;
2243
+ }
2244
+ });
2245
+ }
2246
+ }), g(te, {
2247
+ get when() {
2248
+ return e.config.type === "textarea";
2249
+ },
2250
+ get children() {
2251
+ return g(st, {
2252
+ get config() {
2253
+ return e.config;
2254
+ },
2255
+ get value() {
2256
+ return e.value;
2257
+ },
2258
+ get onChange() {
2259
+ return e.onChange;
2260
+ }
2261
+ });
2262
+ }
2263
+ }), g(te, {
2264
+ get when() {
2265
+ return e.config.type === "radio";
2266
+ },
2267
+ get children() {
2268
+ return g(vr, {
2269
+ get config() {
2270
+ return e.config;
2271
+ },
2272
+ get value() {
2273
+ return e.value;
2274
+ },
2275
+ get onChange() {
2276
+ return e.onChange;
2277
+ }
2278
+ });
2279
+ }
2280
+ }), g(te, {
2281
+ get when() {
2282
+ return e.config.type === "checkbox";
2283
+ },
2284
+ get children() {
2285
+ return g(gr, {
2286
+ get config() {
2287
+ return e.config;
2288
+ },
2289
+ get value() {
2290
+ return e.value;
2291
+ },
2292
+ get onChange() {
2293
+ return e.onChange;
2294
+ }
2295
+ });
2296
+ }
2297
+ }), g(te, {
2298
+ get when() {
2299
+ return e.config.type === "select";
2300
+ },
2301
+ get children() {
2302
+ return g(pr, {
2303
+ get config() {
2304
+ return e.config;
2305
+ },
2306
+ get value() {
2307
+ return e.value;
2308
+ },
2309
+ get onChange() {
2310
+ return e.onChange;
2311
+ }
2312
+ });
2313
+ }
2314
+ })];
2315
+ }
2316
+ });
2317
+ }
2318
+ }), Er = () => {
2319
+ const e = navigator.connection;
2320
+ return {
2321
+ effectiveType: e == null ? void 0 : e.effectiveType,
2322
+ downlink: e == null ? void 0 : e.downlink,
2323
+ rtt: e == null ? void 0 : e.rtt,
2324
+ saveData: e == null ? void 0 : e.saveData
1846
2325
  };
1847
- oe(() => {
1848
- e && t.widget.state.isOpen && e.focus();
1849
- });
1850
- const o = (r) => {
1851
- r.stopPropagation(), t.feedback.setState({
2326
+ }, Pr = () => ({
2327
+ width: window.innerWidth,
2328
+ height: window.innerHeight,
2329
+ screenWidth: window.screen.width,
2330
+ screenHeight: window.screen.height,
2331
+ language: navigator.language,
2332
+ languages: navigator.languages,
2333
+ doNotTrack: navigator.doNotTrack,
2334
+ cookiesEnabled: navigator.cookieEnabled,
2335
+ hardwareConcurrency: navigator.hardwareConcurrency,
2336
+ maxTouchPoints: navigator.maxTouchPoints,
2337
+ colorDepth: window.screen.colorDepth,
2338
+ pixelRatio: window.devicePixelRatio,
2339
+ availableWidth: window.screen.availWidth,
2340
+ availableHeight: window.screen.availHeight
2341
+ }), zr = () => {
2342
+ const e = new URL(window.location.href), n = {};
2343
+ return e.searchParams.forEach((t, r) => {
2344
+ n[r] = t;
2345
+ }), {
2346
+ url: e.href,
2347
+ origin: e.origin,
2348
+ pathname: e.pathname,
2349
+ searchParams: n,
2350
+ referrer: document.referrer
2351
+ };
2352
+ }, Tr = () => ({
2353
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
2354
+ localDateTime: (/* @__PURE__ */ new Date()).toISOString()
2355
+ }), Ir = () => ({
2356
+ userAgent: navigator.userAgent,
2357
+ browserInfo: Pr(),
2358
+ networkInfo: Er(),
2359
+ locationInfo: zr(),
2360
+ timeInfo: Tr(),
2361
+ console: Yt()
2362
+ });
2363
+ 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');
2364
+ const Ar = () => {
2365
+ const e = E(), n = async (a) => {
2366
+ a.preventDefault();
2367
+ const o = await tn(), i = {
2368
+ message: e.feedback.state.message,
2369
+ screenshot: o,
2370
+ metadata: Ir(),
2371
+ customInputs: e.feedback.state.customInputValues
2372
+ };
2373
+ e.methods.submit(i);
2374
+ }, t = (a) => {
2375
+ a.stopPropagation(), e.feedback.setState({
1852
2376
  isMinimized: !0
1853
2377
  });
1854
- }, i = () => {
1855
- t.feedback.setState({
2378
+ }, r = () => {
2379
+ e.feedback.setState({
1856
2380
  isMinimized: !1
1857
2381
  });
1858
2382
  };
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, {
2383
+ return Y(() => {
2384
+ e.widget.state.isOpen && requestAnimationFrame(() => {
2385
+ var a;
2386
+ (a = document.querySelector(".echo-input-field")) == null || a.focus();
2387
+ });
2388
+ }), (() => {
2389
+ var a = Mr(), o = a.firstChild, i = o.firstChild, l = i.firstChild, s = l.nextSibling, c = i.nextSibling;
2390
+ return c.firstChild, a.$$click = () => e.feedback.state.isMinimized && r(), o.addEventListener("submit", n), v(l, () => e.widget.state.text.feedbackForm.title), v(s, g(W, {
1862
2391
  type: "button",
1863
2392
  title: "Hide form",
1864
2393
  variant: "secondary",
1865
2394
  size: "sm",
1866
- onClick: o,
2395
+ onClick: t,
2396
+ "aria-label": "Minimize feedback form",
1867
2397
  get children() {
1868
- return g(_t, {
2398
+ return g(yn, {
1869
2399
  size: 20
1870
2400
  });
1871
2401
  }
1872
- }), null), m(c, g(O, {
2402
+ }), null), v(s, g(W, {
1873
2403
  type: "button",
1874
2404
  title: "Close form",
1875
2405
  variant: "secondary",
1876
2406
  size: "sm",
1877
- onClick: () => t.widget.setState({
2407
+ onClick: () => e.widget.setState({
1878
2408
  isOpen: !1
1879
2409
  }),
2410
+ "aria-label": "Close feedback form",
1880
2411
  get children() {
1881
- return g(ie, {
2412
+ return g(pe, {
1882
2413
  size: 20
1883
2414
  });
1884
2415
  }
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, {
2416
+ }), null), v(c, g(st, {
2417
+ get config() {
2418
+ return {
2419
+ type: "textarea",
2420
+ id: "message",
2421
+ placeholder: e.widget.state.text.feedbackForm.placeholder,
2422
+ label: "Feedback Message",
2423
+ required: !0
2424
+ };
2425
+ },
2426
+ get value() {
2427
+ return e.feedback.state.message;
2428
+ },
2429
+ onChange: (d) => e.feedback.setState({
2430
+ message: d
2431
+ })
2432
+ }), null), v(o, g(D, {
2433
+ get when() {
2434
+ var d;
2435
+ return (d = e.widget.state.customInputs) == null ? void 0 : d.length;
2436
+ },
2437
+ get children() {
2438
+ var d = Or();
2439
+ return d.firstChild, v(d, g(_, {
2440
+ get each() {
2441
+ return e.widget.state.customInputs;
2442
+ },
2443
+ children: (h) => g($r, {
2444
+ config: h,
2445
+ get value() {
2446
+ return e.feedback.state.customInputValues[h.id];
2447
+ },
2448
+ onChange: (f) => e.feedback.setState({
2449
+ customInputValues: {
2450
+ ...e.feedback.state.customInputValues,
2451
+ [h.id]: f
2452
+ }
2453
+ })
2454
+ })
2455
+ }), null), d;
2456
+ }
2457
+ }), null), v(o, g(W, {
1890
2458
  type: "submit",
1891
2459
  variant: "primary",
1892
2460
  size: "lg",
1893
2461
  style: {
1894
2462
  width: "100%"
1895
2463
  },
2464
+ "aria-label": "Submit feedback",
1896
2465
  get children() {
1897
- return t.widget.state.text.feedbackForm.submitButton;
2466
+ return e.widget.state.text.feedbackForm.submitButton;
1898
2467
  }
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;
2468
+ }), null), b((d) => {
2469
+ var h = e.feedback.state.isMinimized, f = e.feedback.state.isMinimized ? "pointer" : "default", m = !e.feedback.state.isMinimized;
2470
+ return h !== d.e && u(a, "data-minimized", d.e = h), f !== d.t && ((d.t = f) != null ? a.style.setProperty("cursor", f) : a.style.removeProperty("cursor")), m !== d.a && u(a, "aria-expanded", d.a = m), d;
1902
2471
  }, {
1903
2472
  e: void 0,
1904
2473
  t: void 0,
1905
2474
  a: void 0
1906
- }), w(() => d.value = t.feedback.state.comment), r;
2475
+ }), a;
1907
2476
  })();
1908
2477
  };
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, {
2478
+ T(["click"]);
2479
+ 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>");
2480
+ const Nr = (e) => g(Ot, {
1912
2481
  useShadow: !0,
1913
2482
  get mount() {
1914
2483
  return document.body;
1915
2484
  },
1916
2485
  get children() {
1917
- return g(Yt, Z(e, {
2486
+ return g(cn, ge(e, {
1918
2487
  get children() {
1919
- return g(Un, {
2488
+ return g(Wr, {
1920
2489
  get children() {
1921
- return [g(Wn, {
2490
+ return [g(qr, {
1922
2491
  get primaryColor() {
1923
2492
  return e.primaryColor;
1924
2493
  }
1925
- }), g(_n, {})];
2494
+ }), g(Vr, {})];
1926
2495
  }
1927
2496
  });
1928
2497
  }
1929
2498
  }));
1930
2499
  }
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);
2500
+ }), qr = (e) => {
2501
+ const [n, t] = A("");
2502
+ return Y(() => {
2503
+ const r = `
2504
+ .echo-root {
2505
+ --primary-color: ${e.primaryColor};
2506
+ --primary-text-color: ${_t(e.primaryColor)};
2507
+ }
2508
+ `;
2509
+ t(r);
1941
2510
  }), (() => {
1942
- var o = Ln();
1943
- return m(o, Ht, null), m(o, t, null), o;
2511
+ var r = Dr();
2512
+ return v(r, hn, null), v(r, n, null), r;
1944
2513
  })();
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();
2514
+ }, Vr = () => {
2515
+ const e = E();
2516
+ return Y(() => {
2517
+ }), [(() => {
2518
+ var n = Fr();
2519
+ return v(n, g(Rn, {}), null), v(n, g(Qn, {}), null), v(n, g(Gn, {}), null), b(() => u(n, "data-hidden", e.widget.state.isOpen)), n;
2520
+ })(), g(Br, {
2521
+ get children() {
2522
+ return [g(Ar, {}), g(Fn, {}), g(ar, {})];
1983
2523
  }
2524
+ })];
2525
+ }, Br = (e) => {
2526
+ const [n, t] = A(), r = E(), a = dn(() => n());
2527
+ return Y(() => {
2528
+ n() && r.widget.setState({
2529
+ dimensions: a()
2530
+ });
2531
+ }), Y(() => {
2532
+ var o, i;
2533
+ r.widget.state.isOpen ? (o = n()) == null || o.showModal() : (i = n()) == null || i.close();
1984
2534
  }), (() => {
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;
2535
+ var o = Lr();
2536
+ return o.addEventListener("close", () => r.widget.setState({
2537
+ isOpen: !1
2538
+ })), V(t, o), v(o, () => e.children), b((i) => {
2539
+ var l = `${a().height}px`, s = `${a().width}px`, c = !r.widget.state.isOpen;
2540
+ 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
2541
  }, {
1990
2542
  e: void 0,
1991
2543
  t: void 0,
1992
2544
  a: void 0
1993
- }), i;
2545
+ }), o;
1994
2546
  })();
1995
- }, Kn = {
2547
+ }, Wr = (e) => {
2548
+ const n = E();
2549
+ return un({
2550
+ onUrlChange: (t) => n.methods.handlePageChange(t)
2551
+ }), ye(() => {
2552
+ Ht(), Jt((t) => {
2553
+ if (n.widget.state.isOpen && t.type === "keydown")
2554
+ switch (t.key) {
2555
+ case "Escape":
2556
+ t.stopImmediatePropagation();
2557
+ break;
2558
+ }
2559
+ });
2560
+ }), ee(() => {
2561
+ Ut(), Zt();
2562
+ }), (() => {
2563
+ var t = jr();
2564
+ return v(t, () => e.children), b(() => u(t, "data-drawing", n.drawing.state.isDrawing)), t;
2565
+ })();
2566
+ }, _r = {
1996
2567
  welcomeMessage: {
1997
2568
  text: "Click here to leave feedback",
1998
2569
  closeAriaLabel: "Close welcome message"
@@ -2017,37 +2588,35 @@ const Hn = (e) => g(vt, {
2017
2588
  text: "Click & drag to draw"
2018
2589
  }
2019
2590
  };
2020
- let Q = null;
2021
- function Xn(e) {
2022
- Q && (console.warn("Echo widget is already initialized. Cleaning up previous instance..."), Q());
2591
+ let he = null;
2592
+ function Yr(e) {
2593
+ he && (console.warn("Echo widget is already initialized. Cleaning up previous instance..."), he());
2023
2594
  try {
2024
- jt(e), Et();
2595
+ rn(e);
2025
2596
  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;
2597
+ position: n = "bottom-right",
2598
+ primaryColor: t = "#6227dc",
2599
+ onSubmit: r,
2600
+ textConfig: a = {},
2601
+ customInputs: o = []
2602
+ } = e, i = Ke(_r, a), l = document.createElement("div");
2603
+ l.id = "echo-container", document.body.appendChild(l);
2604
+ const s = kt(() => g(Nr, {
2605
+ position: n,
2606
+ primaryColor: t,
2607
+ textConfig: i,
2608
+ onSubmit: r,
2609
+ customInputs: o
2610
+ }), l), c = () => {
2611
+ s(), l.remove(), he = null;
2042
2612
  };
2043
- return window.addEventListener("unload", s, {
2613
+ return window.addEventListener("unload", c, {
2044
2614
  once: !0
2045
- }), Q = s, s;
2046
- } catch (t) {
2047
- throw console.error("Echo initialization failed:", t), t;
2615
+ }), he = c, c;
2616
+ } catch (n) {
2617
+ throw console.error("Echo initialization failed:", n), n;
2048
2618
  }
2049
2619
  }
2050
2620
  export {
2051
- Xn as initEcho
2621
+ Yr as initEcho
2052
2622
  };
2053
- //# sourceMappingURL=echo.es.js.map