@makefully/notefully 0.1.37 → 0.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/notefully.js CHANGED
@@ -1,14 +1,14 @@
1
- function He(t, e) {
1
+ function Xe(t, e) {
2
2
  if (t.match(/^[a-z]+:\/\//i))
3
3
  return t;
4
4
  if (t.match(/^\/\//))
5
5
  return window.location.protocol + t;
6
6
  if (t.match(/^[a-z]+:/i))
7
7
  return t;
8
- const n = document.implementation.createHTMLDocument(), r = n.createElement("base"), a = n.createElement("a");
9
- return n.head.appendChild(r), n.body.appendChild(a), e && (r.href = e), a.href = t, a.href;
8
+ const n = document.implementation.createHTMLDocument(), r = n.createElement("base"), i = n.createElement("a");
9
+ return n.head.appendChild(r), n.body.appendChild(i), e && (r.href = e), i.href = t, i.href;
10
10
  }
11
- const De = /* @__PURE__ */ (() => {
11
+ const Ye = /* @__PURE__ */ (() => {
12
12
  let t = 0;
13
13
  const e = () => (
14
14
  // eslint-disable-next-line no-bitwise
@@ -16,33 +16,33 @@ const De = /* @__PURE__ */ (() => {
16
16
  );
17
17
  return () => (t += 1, `u${e()}${t}`);
18
18
  })();
19
- function H(t) {
19
+ function F(t) {
20
20
  const e = [];
21
21
  for (let n = 0, r = t.length; n < r; n++)
22
22
  e.push(t[n]);
23
23
  return e;
24
24
  }
25
- let q = null;
26
- function ae(t = {}) {
27
- return q || (t.includeStyleProperties ? (q = t.includeStyleProperties, q) : (q = H(window.getComputedStyle(document.documentElement)), q));
25
+ let G = null;
26
+ function fe(t = {}) {
27
+ return G || (t.includeStyleProperties ? (G = t.includeStyleProperties, G) : (G = F(window.getComputedStyle(document.documentElement)), G));
28
28
  }
29
- function rt(t, e) {
29
+ function st(t, e) {
30
30
  const r = (t.ownerDocument.defaultView || window).getComputedStyle(t).getPropertyValue(e);
31
31
  return r ? parseFloat(r.replace("px", "")) : 0;
32
32
  }
33
- function Fe(t) {
34
- const e = rt(t, "border-left-width"), n = rt(t, "border-right-width");
33
+ function Ge(t) {
34
+ const e = st(t, "border-left-width"), n = st(t, "border-right-width");
35
35
  return t.clientWidth + e + n;
36
36
  }
37
- function Ue(t) {
38
- const e = rt(t, "border-top-width"), n = rt(t, "border-bottom-width");
37
+ function Je(t) {
38
+ const e = st(t, "border-top-width"), n = st(t, "border-bottom-width");
39
39
  return t.clientHeight + e + n;
40
40
  }
41
- function oe(t, e = {}) {
42
- const n = e.width || Fe(t), r = e.height || Ue(t);
41
+ function he(t, e = {}) {
42
+ const n = e.width || Ge(t), r = e.height || Je(t);
43
43
  return { width: n, height: r };
44
44
  }
45
- function Ne() {
45
+ function Qe() {
46
46
  let t, e;
47
47
  try {
48
48
  e = process;
@@ -52,10 +52,10 @@ function Ne() {
52
52
  return n && (t = parseInt(n, 10), Number.isNaN(t) && (t = 1)), t || window.devicePixelRatio || 1;
53
53
  }
54
54
  const E = 16384;
55
- function je(t) {
55
+ function Ze(t) {
56
56
  (t.width > E || t.height > E) && (t.width > E && t.height > E ? t.width > t.height ? (t.height *= E / t.width, t.width = E) : (t.width *= E / t.height, t.height = E) : t.width > E ? (t.height *= E / t.width, t.width = E) : (t.width *= E / t.height, t.height = E));
57
57
  }
58
- function it(t) {
58
+ function ct(t) {
59
59
  return new Promise((e, n) => {
60
60
  const r = new Image();
61
61
  r.onload = () => {
@@ -65,12 +65,12 @@ function it(t) {
65
65
  }, r.onerror = n, r.crossOrigin = "anonymous", r.decoding = "async", r.src = t;
66
66
  });
67
67
  }
68
- async function _e(t) {
68
+ async function tn(t) {
69
69
  return Promise.resolve().then(() => new XMLSerializer().serializeToString(t)).then(encodeURIComponent).then((e) => `data:image/svg+xml;charset=utf-8,${e}`);
70
70
  }
71
- async function Ve(t, e, n) {
72
- const r = "http://www.w3.org/2000/svg", a = document.createElementNS(r, "svg"), i = document.createElementNS(r, "foreignObject");
73
- return a.setAttribute("width", `${e}`), a.setAttribute("height", `${n}`), a.setAttribute("viewBox", `0 0 ${e} ${n}`), i.setAttribute("width", "100%"), i.setAttribute("height", "100%"), i.setAttribute("x", "0"), i.setAttribute("y", "0"), i.setAttribute("externalResourcesRequired", "true"), a.appendChild(i), i.appendChild(t), _e(a);
71
+ async function en(t, e, n) {
72
+ const r = "http://www.w3.org/2000/svg", i = document.createElementNS(r, "svg"), a = document.createElementNS(r, "foreignObject");
73
+ return i.setAttribute("width", `${e}`), i.setAttribute("height", `${n}`), i.setAttribute("viewBox", `0 0 ${e} ${n}`), a.setAttribute("width", "100%"), a.setAttribute("height", "100%"), a.setAttribute("x", "0"), a.setAttribute("y", "0"), a.setAttribute("externalResourcesRequired", "true"), i.appendChild(a), a.appendChild(t), tn(i);
74
74
  }
75
75
  const x = (t, e) => {
76
76
  if (t instanceof e)
@@ -78,327 +78,327 @@ const x = (t, e) => {
78
78
  const n = Object.getPrototypeOf(t);
79
79
  return n === null ? !1 : n.constructor.name === e.name || x(n, e);
80
80
  };
81
- function We(t) {
81
+ function nn(t) {
82
82
  const e = t.getPropertyValue("content");
83
83
  return `${t.cssText} content: '${e.replace(/'|"/g, "")}';`;
84
84
  }
85
- function ze(t, e) {
86
- return ae(e).map((n) => {
87
- const r = t.getPropertyValue(n), a = t.getPropertyPriority(n);
88
- return `${n}: ${r}${a ? " !important" : ""};`;
85
+ function rn(t, e) {
86
+ return fe(e).map((n) => {
87
+ const r = t.getPropertyValue(n), i = t.getPropertyPriority(n);
88
+ return `${n}: ${r}${i ? " !important" : ""};`;
89
89
  }).join(" ");
90
90
  }
91
- function qe(t, e, n, r) {
92
- const a = `.${t}:${e}`, i = n.cssText ? We(n) : ze(n, r);
93
- return document.createTextNode(`${a}{${i}}`);
91
+ function an(t, e, n, r) {
92
+ const i = `.${t}:${e}`, a = n.cssText ? nn(n) : rn(n, r);
93
+ return document.createTextNode(`${i}{${a}}`);
94
94
  }
95
- function Nt(t, e, n, r) {
96
- const a = window.getComputedStyle(t, n), i = a.getPropertyValue("content");
97
- if (i === "" || i === "none")
95
+ function zt(t, e, n, r) {
96
+ const i = window.getComputedStyle(t, n), a = i.getPropertyValue("content");
97
+ if (a === "" || a === "none")
98
98
  return;
99
- const o = De();
99
+ const o = Ye();
100
100
  try {
101
101
  e.className = `${e.className} ${o}`;
102
102
  } catch {
103
103
  return;
104
104
  }
105
105
  const c = document.createElement("style");
106
- c.appendChild(qe(o, n, a, r)), e.appendChild(c);
106
+ c.appendChild(an(o, n, i, r)), e.appendChild(c);
107
107
  }
108
- function Ke(t, e, n) {
109
- Nt(t, e, ":before", n), Nt(t, e, ":after", n);
108
+ function on(t, e, n) {
109
+ zt(t, e, ":before", n), zt(t, e, ":after", n);
110
110
  }
111
- const jt = "application/font-woff", _t = "image/jpeg", Xe = {
112
- woff: jt,
113
- woff2: jt,
111
+ const qt = "application/font-woff", Kt = "image/jpeg", sn = {
112
+ woff: qt,
113
+ woff2: qt,
114
114
  ttf: "application/font-truetype",
115
115
  eot: "application/vnd.ms-fontobject",
116
116
  png: "image/png",
117
- jpg: _t,
118
- jpeg: _t,
117
+ jpg: Kt,
118
+ jpeg: Kt,
119
119
  gif: "image/gif",
120
120
  tiff: "image/tiff",
121
121
  svg: "image/svg+xml",
122
122
  webp: "image/webp"
123
123
  };
124
- function Ye(t) {
124
+ function cn(t) {
125
125
  const e = /\.([^./]*?)$/g.exec(t);
126
126
  return e ? e[1] : "";
127
127
  }
128
- function $t(t) {
129
- const e = Ye(t).toLowerCase();
130
- return Xe[e] || "";
128
+ function Ot(t) {
129
+ const e = cn(t).toLowerCase();
130
+ return sn[e] || "";
131
131
  }
132
- function Ge(t) {
132
+ function ln(t) {
133
133
  return t.split(/,/)[1];
134
134
  }
135
- function vt(t) {
135
+ function At(t) {
136
136
  return t.search(/^(data:)/) !== -1;
137
137
  }
138
- function Je(t, e) {
138
+ function un(t, e) {
139
139
  return `data:${e};base64,${t}`;
140
140
  }
141
- async function se(t, e, n) {
141
+ async function pe(t, e, n) {
142
142
  const r = await fetch(t, e);
143
143
  if (r.status === 404)
144
144
  throw new Error(`Resource "${r.url}" not found`);
145
- const a = await r.blob();
146
- return new Promise((i, o) => {
145
+ const i = await r.blob();
146
+ return new Promise((a, o) => {
147
147
  const c = new FileReader();
148
148
  c.onerror = o, c.onloadend = () => {
149
149
  try {
150
- i(n({ res: r, result: c.result }));
150
+ a(n({ res: r, result: c.result }));
151
151
  } catch (l) {
152
152
  o(l);
153
153
  }
154
- }, c.readAsDataURL(a);
154
+ }, c.readAsDataURL(i);
155
155
  });
156
156
  }
157
- const mt = {};
158
- function Qe(t, e, n) {
157
+ const vt = {};
158
+ function dn(t, e, n) {
159
159
  let r = t.replace(/\?.*/, "");
160
160
  return n && (r = t), /ttf|otf|eot|woff2?/i.test(r) && (r = r.replace(/.*\//, "")), e ? `[${e}]${r}` : r;
161
161
  }
162
- async function Tt(t, e, n) {
163
- const r = Qe(t, e, n.includeQueryParams);
164
- if (mt[r] != null)
165
- return mt[r];
162
+ async function Ht(t, e, n) {
163
+ const r = dn(t, e, n.includeQueryParams);
164
+ if (vt[r] != null)
165
+ return vt[r];
166
166
  n.cacheBust && (t += (/\?/.test(t) ? "&" : "?") + (/* @__PURE__ */ new Date()).getTime());
167
- let a;
167
+ let i;
168
168
  try {
169
- const i = await se(t, n.fetchRequestInit, ({ res: o, result: c }) => (e || (e = o.headers.get("Content-Type") || ""), Ge(c)));
170
- a = Je(i, e);
171
- } catch (i) {
172
- a = n.imagePlaceholder || "";
169
+ const a = await pe(t, n.fetchRequestInit, ({ res: o, result: c }) => (e || (e = o.headers.get("Content-Type") || ""), ln(c)));
170
+ i = un(a, e);
171
+ } catch (a) {
172
+ i = n.imagePlaceholder || "";
173
173
  let o = `Failed to fetch resource: ${t}`;
174
- i && (o = typeof i == "string" ? i : i.message), o && console.warn(o);
174
+ a && (o = typeof a == "string" ? a : a.message), o && console.warn(o);
175
175
  }
176
- return mt[r] = a, a;
176
+ return vt[r] = i, i;
177
177
  }
178
- async function Ze(t) {
178
+ async function fn(t) {
179
179
  const e = t.toDataURL();
180
- return e === "data:," ? t.cloneNode(!1) : it(e);
180
+ return e === "data:," ? t.cloneNode(!1) : ct(e);
181
181
  }
182
- async function tn(t, e) {
182
+ async function hn(t, e) {
183
183
  if (t.currentSrc) {
184
- const i = document.createElement("canvas"), o = i.getContext("2d");
185
- i.width = t.clientWidth, i.height = t.clientHeight, o == null || o.drawImage(t, 0, 0, i.width, i.height);
186
- const c = i.toDataURL();
187
- return it(c);
184
+ const a = document.createElement("canvas"), o = a.getContext("2d");
185
+ a.width = t.clientWidth, a.height = t.clientHeight, o == null || o.drawImage(t, 0, 0, a.width, a.height);
186
+ const c = a.toDataURL();
187
+ return ct(c);
188
188
  }
189
- const n = t.poster, r = $t(n), a = await Tt(n, r, e);
190
- return it(a);
189
+ const n = t.poster, r = Ot(n), i = await Ht(n, r, e);
190
+ return ct(i);
191
191
  }
192
- async function en(t, e) {
192
+ async function pn(t, e) {
193
193
  var n;
194
194
  try {
195
195
  if (!((n = t == null ? void 0 : t.contentDocument) === null || n === void 0) && n.body)
196
- return await ut(t.contentDocument.body, e, !0);
196
+ return await mt(t.contentDocument.body, e, !0);
197
197
  } catch {
198
198
  }
199
199
  return t.cloneNode(!1);
200
200
  }
201
- async function nn(t, e) {
202
- return x(t, HTMLCanvasElement) ? Ze(t) : x(t, HTMLVideoElement) ? tn(t, e) : x(t, HTMLIFrameElement) ? en(t, e) : t.cloneNode(ce(t));
201
+ async function mn(t, e) {
202
+ return x(t, HTMLCanvasElement) ? fn(t) : x(t, HTMLVideoElement) ? hn(t, e) : x(t, HTMLIFrameElement) ? pn(t, e) : t.cloneNode(me(t));
203
203
  }
204
- const rn = (t) => t.tagName != null && t.tagName.toUpperCase() === "SLOT", ce = (t) => t.tagName != null && t.tagName.toUpperCase() === "SVG";
205
- async function an(t, e, n) {
206
- var r, a;
207
- if (ce(e))
204
+ const yn = (t) => t.tagName != null && t.tagName.toUpperCase() === "SLOT", me = (t) => t.tagName != null && t.tagName.toUpperCase() === "SVG";
205
+ async function gn(t, e, n) {
206
+ var r, i;
207
+ if (me(e))
208
208
  return e;
209
- let i = [];
210
- return rn(t) && t.assignedNodes ? i = H(t.assignedNodes()) : x(t, HTMLIFrameElement) && (!((r = t.contentDocument) === null || r === void 0) && r.body) ? i = H(t.contentDocument.body.childNodes) : i = H(((a = t.shadowRoot) !== null && a !== void 0 ? a : t).childNodes), i.length === 0 || x(t, HTMLVideoElement) || await i.reduce((o, c) => o.then(() => ut(c, n)).then((l) => {
209
+ let a = [];
210
+ return yn(t) && t.assignedNodes ? a = F(t.assignedNodes()) : x(t, HTMLIFrameElement) && (!((r = t.contentDocument) === null || r === void 0) && r.body) ? a = F(t.contentDocument.body.childNodes) : a = F(((i = t.shadowRoot) !== null && i !== void 0 ? i : t).childNodes), a.length === 0 || x(t, HTMLVideoElement) || await a.reduce((o, c) => o.then(() => mt(c, n)).then((l) => {
211
211
  l && e.appendChild(l);
212
212
  }), Promise.resolve()), e;
213
213
  }
214
- function on(t, e, n) {
214
+ function wn(t, e, n) {
215
215
  const r = e.style;
216
216
  if (!r)
217
217
  return;
218
- const a = window.getComputedStyle(t);
219
- a.cssText ? (r.cssText = a.cssText, r.transformOrigin = a.transformOrigin) : ae(n).forEach((i) => {
220
- let o = a.getPropertyValue(i);
221
- i === "font-size" && o.endsWith("px") && (o = `${Math.floor(parseFloat(o.substring(0, o.length - 2))) - 0.1}px`), x(t, HTMLIFrameElement) && i === "display" && o === "inline" && (o = "block"), i === "d" && e.getAttribute("d") && (o = `path(${e.getAttribute("d")})`), r.setProperty(i, o, a.getPropertyPriority(i));
218
+ const i = window.getComputedStyle(t);
219
+ i.cssText ? (r.cssText = i.cssText, r.transformOrigin = i.transformOrigin) : fe(n).forEach((a) => {
220
+ let o = i.getPropertyValue(a);
221
+ a === "font-size" && o.endsWith("px") && (o = `${Math.floor(parseFloat(o.substring(0, o.length - 2))) - 0.1}px`), x(t, HTMLIFrameElement) && a === "display" && o === "inline" && (o = "block"), a === "d" && e.getAttribute("d") && (o = `path(${e.getAttribute("d")})`), r.setProperty(a, o, i.getPropertyPriority(a));
222
222
  });
223
223
  }
224
- function sn(t, e) {
224
+ function bn(t, e) {
225
225
  x(t, HTMLTextAreaElement) && (e.innerHTML = t.value), x(t, HTMLInputElement) && e.setAttribute("value", t.value);
226
226
  }
227
- function cn(t, e) {
227
+ function vn(t, e) {
228
228
  if (x(t, HTMLSelectElement)) {
229
- const r = Array.from(e.children).find((a) => t.value === a.getAttribute("value"));
229
+ const r = Array.from(e.children).find((i) => t.value === i.getAttribute("value"));
230
230
  r && r.setAttribute("selected", "");
231
231
  }
232
232
  }
233
- function ln(t, e, n) {
234
- return x(e, Element) && (on(t, e, n), Ke(t, e, n), sn(t, e), cn(t, e)), e;
233
+ function Sn(t, e, n) {
234
+ return x(e, Element) && (wn(t, e, n), on(t, e, n), bn(t, e), vn(t, e)), e;
235
235
  }
236
- async function un(t, e) {
236
+ async function xn(t, e) {
237
237
  const n = t.querySelectorAll ? t.querySelectorAll("use") : [];
238
238
  if (n.length === 0)
239
239
  return t;
240
240
  const r = {};
241
- for (let i = 0; i < n.length; i++) {
242
- const c = n[i].getAttribute("xlink:href");
241
+ for (let a = 0; a < n.length; a++) {
242
+ const c = n[a].getAttribute("xlink:href");
243
243
  if (c) {
244
244
  const l = t.querySelector(c), u = document.querySelector(c);
245
- !l && u && !r[c] && (r[c] = await ut(u, e, !0));
245
+ !l && u && !r[c] && (r[c] = await mt(u, e, !0));
246
246
  }
247
247
  }
248
- const a = Object.values(r);
249
- if (a.length) {
250
- const i = "http://www.w3.org/1999/xhtml", o = document.createElementNS(i, "svg");
251
- o.setAttribute("xmlns", i), o.style.position = "absolute", o.style.width = "0", o.style.height = "0", o.style.overflow = "hidden", o.style.display = "none";
252
- const c = document.createElementNS(i, "defs");
248
+ const i = Object.values(r);
249
+ if (i.length) {
250
+ const a = "http://www.w3.org/1999/xhtml", o = document.createElementNS(a, "svg");
251
+ o.setAttribute("xmlns", a), o.style.position = "absolute", o.style.width = "0", o.style.height = "0", o.style.overflow = "hidden", o.style.display = "none";
252
+ const c = document.createElementNS(a, "defs");
253
253
  o.appendChild(c);
254
- for (let l = 0; l < a.length; l++)
255
- c.appendChild(a[l]);
254
+ for (let l = 0; l < i.length; l++)
255
+ c.appendChild(i[l]);
256
256
  t.appendChild(o);
257
257
  }
258
258
  return t;
259
259
  }
260
- async function ut(t, e, n) {
261
- return !n && e.filter && !e.filter(t) ? null : Promise.resolve(t).then((r) => nn(r, e)).then((r) => an(t, r, e)).then((r) => ln(t, r, e)).then((r) => un(r, e));
260
+ async function mt(t, e, n) {
261
+ return !n && e.filter && !e.filter(t) ? null : Promise.resolve(t).then((r) => mn(r, e)).then((r) => gn(t, r, e)).then((r) => Sn(t, r, e)).then((r) => xn(r, e));
262
262
  }
263
- const le = /url\((['"]?)([^'"]+?)\1\)/g, dn = /url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g, fn = /src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;
264
- function hn(t) {
263
+ const ye = /url\((['"]?)([^'"]+?)\1\)/g, En = /url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g, Cn = /src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;
264
+ function Mn(t) {
265
265
  const e = t.replace(/([.*+?^${}()|\[\]\/\\])/g, "\\$1");
266
266
  return new RegExp(`(url\\(['"]?)(${e})(['"]?\\))`, "g");
267
267
  }
268
- function pn(t) {
268
+ function An(t) {
269
269
  const e = [];
270
- return t.replace(le, (n, r, a) => (e.push(a), n)), e.filter((n) => !vt(n));
270
+ return t.replace(ye, (n, r, i) => (e.push(i), n)), e.filter((n) => !At(n));
271
271
  }
272
- async function mn(t, e, n, r, a) {
272
+ async function Ln(t, e, n, r, i) {
273
273
  try {
274
- const i = n ? He(e, n) : e, o = $t(e);
274
+ const a = n ? Xe(e, n) : e, o = Ot(e);
275
275
  let c;
276
- return a || (c = await Tt(i, o, r)), t.replace(hn(e), `$1${c}$3`);
276
+ return i || (c = await Ht(a, o, r)), t.replace(Mn(e), `$1${c}$3`);
277
277
  } catch {
278
278
  }
279
279
  return t;
280
280
  }
281
- function yn(t, { preferredFontFormat: e }) {
282
- return e ? t.replace(fn, (n) => {
281
+ function Rn(t, { preferredFontFormat: e }) {
282
+ return e ? t.replace(Cn, (n) => {
283
283
  for (; ; ) {
284
- const [r, , a] = dn.exec(n) || [];
285
- if (!a)
284
+ const [r, , i] = En.exec(n) || [];
285
+ if (!i)
286
286
  return "";
287
- if (a === e)
287
+ if (i === e)
288
288
  return `src: ${r};`;
289
289
  }
290
290
  }) : t;
291
291
  }
292
- function ue(t) {
293
- return t.search(le) !== -1;
292
+ function ge(t) {
293
+ return t.search(ye) !== -1;
294
294
  }
295
- async function de(t, e, n) {
296
- if (!ue(t))
295
+ async function we(t, e, n) {
296
+ if (!ge(t))
297
297
  return t;
298
- const r = yn(t, n);
299
- return pn(r).reduce((i, o) => i.then((c) => mn(c, o, e, n)), Promise.resolve(r));
298
+ const r = Rn(t, n);
299
+ return An(r).reduce((a, o) => a.then((c) => Ln(c, o, e, n)), Promise.resolve(r));
300
300
  }
301
- async function K(t, e, n) {
301
+ async function J(t, e, n) {
302
302
  var r;
303
- const a = (r = e.style) === null || r === void 0 ? void 0 : r.getPropertyValue(t);
304
- if (a) {
305
- const i = await de(a, null, n);
306
- return e.style.setProperty(t, i, e.style.getPropertyPriority(t)), !0;
303
+ const i = (r = e.style) === null || r === void 0 ? void 0 : r.getPropertyValue(t);
304
+ if (i) {
305
+ const a = await we(i, null, n);
306
+ return e.style.setProperty(t, a, e.style.getPropertyPriority(t)), !0;
307
307
  }
308
308
  return !1;
309
309
  }
310
- async function gn(t, e) {
311
- await K("background", t, e) || await K("background-image", t, e), await K("mask", t, e) || await K("-webkit-mask", t, e) || await K("mask-image", t, e) || await K("-webkit-mask-image", t, e);
310
+ async function $n(t, e) {
311
+ await J("background", t, e) || await J("background-image", t, e), await J("mask", t, e) || await J("-webkit-mask", t, e) || await J("mask-image", t, e) || await J("-webkit-mask-image", t, e);
312
312
  }
313
- async function wn(t, e) {
313
+ async function kn(t, e) {
314
314
  const n = x(t, HTMLImageElement);
315
- if (!(n && !vt(t.src)) && !(x(t, SVGImageElement) && !vt(t.href.baseVal)))
315
+ if (!(n && !At(t.src)) && !(x(t, SVGImageElement) && !At(t.href.baseVal)))
316
316
  return;
317
- const r = n ? t.src : t.href.baseVal, a = await Tt(r, $t(r), e);
318
- await new Promise((i, o) => {
319
- t.onload = i, t.onerror = e.onImageErrorHandler ? (...l) => {
317
+ const r = n ? t.src : t.href.baseVal, i = await Ht(r, Ot(r), e);
318
+ await new Promise((a, o) => {
319
+ t.onload = a, t.onerror = e.onImageErrorHandler ? (...l) => {
320
320
  try {
321
- i(e.onImageErrorHandler(...l));
321
+ a(e.onImageErrorHandler(...l));
322
322
  } catch (u) {
323
323
  o(u);
324
324
  }
325
325
  } : o;
326
326
  const c = t;
327
- c.decode && (c.decode = i), c.loading === "lazy" && (c.loading = "eager"), n ? (t.srcset = "", t.src = a) : t.href.baseVal = a;
327
+ c.decode && (c.decode = a), c.loading === "lazy" && (c.loading = "eager"), n ? (t.srcset = "", t.src = i) : t.href.baseVal = i;
328
328
  });
329
329
  }
330
- async function bn(t, e) {
331
- const r = H(t.childNodes).map((a) => fe(a, e));
330
+ async function Tn(t, e) {
331
+ const r = F(t.childNodes).map((i) => be(i, e));
332
332
  await Promise.all(r).then(() => t);
333
333
  }
334
- async function fe(t, e) {
335
- x(t, Element) && (await gn(t, e), await wn(t, e), await bn(t, e));
334
+ async function be(t, e) {
335
+ x(t, Element) && (await $n(t, e), await kn(t, e), await Tn(t, e));
336
336
  }
337
- function Sn(t, e) {
337
+ function Pn(t, e) {
338
338
  const { style: n } = t;
339
339
  e.backgroundColor && (n.backgroundColor = e.backgroundColor), e.width && (n.width = `${e.width}px`), e.height && (n.height = `${e.height}px`);
340
340
  const r = e.style;
341
- return r != null && Object.keys(r).forEach((a) => {
342
- n[a] = r[a];
341
+ return r != null && Object.keys(r).forEach((i) => {
342
+ n[i] = r[i];
343
343
  }), t;
344
344
  }
345
- const Vt = {};
346
- async function Wt(t) {
347
- let e = Vt[t];
345
+ const Xt = {};
346
+ async function Yt(t) {
347
+ let e = Xt[t];
348
348
  if (e != null)
349
349
  return e;
350
350
  const r = await (await fetch(t)).text();
351
- return e = { url: t, cssText: r }, Vt[t] = e, e;
351
+ return e = { url: t, cssText: r }, Xt[t] = e, e;
352
352
  }
353
- async function zt(t, e) {
353
+ async function Gt(t, e) {
354
354
  let n = t.cssText;
355
- const r = /url\(["']?([^"')]+)["']?\)/g, i = (n.match(/url\([^)]+\)/g) || []).map(async (o) => {
355
+ const r = /url\(["']?([^"')]+)["']?\)/g, a = (n.match(/url\([^)]+\)/g) || []).map(async (o) => {
356
356
  let c = o.replace(r, "$1");
357
- return c.startsWith("https://") || (c = new URL(c, t.url).href), se(c, e.fetchRequestInit, ({ result: l }) => (n = n.replace(o, `url(${l})`), [o, l]));
357
+ return c.startsWith("https://") || (c = new URL(c, t.url).href), pe(c, e.fetchRequestInit, ({ result: l }) => (n = n.replace(o, `url(${l})`), [o, l]));
358
358
  });
359
- return Promise.all(i).then(() => n);
359
+ return Promise.all(a).then(() => n);
360
360
  }
361
- function qt(t) {
361
+ function Jt(t) {
362
362
  if (t == null)
363
363
  return [];
364
364
  const e = [], n = /(\/\*[\s\S]*?\*\/)/gi;
365
365
  let r = t.replace(n, "");
366
- const a = new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})", "gi");
366
+ const i = new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})", "gi");
367
367
  for (; ; ) {
368
- const l = a.exec(r);
368
+ const l = i.exec(r);
369
369
  if (l === null)
370
370
  break;
371
371
  e.push(l[0]);
372
372
  }
373
- r = r.replace(a, "");
374
- const i = /@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi, o = "((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})", c = new RegExp(o, "gi");
373
+ r = r.replace(i, "");
374
+ const a = /@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi, o = "((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})", c = new RegExp(o, "gi");
375
375
  for (; ; ) {
376
- let l = i.exec(r);
376
+ let l = a.exec(r);
377
377
  if (l === null) {
378
378
  if (l = c.exec(r), l === null)
379
379
  break;
380
- i.lastIndex = c.lastIndex;
380
+ a.lastIndex = c.lastIndex;
381
381
  } else
382
- c.lastIndex = i.lastIndex;
382
+ c.lastIndex = a.lastIndex;
383
383
  e.push(l[0]);
384
384
  }
385
385
  return e;
386
386
  }
387
- async function vn(t, e) {
387
+ async function In(t, e) {
388
388
  const n = [], r = [];
389
- return t.forEach((a) => {
390
- if ("cssRules" in a)
389
+ return t.forEach((i) => {
390
+ if ("cssRules" in i)
391
391
  try {
392
- H(a.cssRules || []).forEach((i, o) => {
393
- if (i.type === CSSRule.IMPORT_RULE) {
392
+ F(i.cssRules || []).forEach((a, o) => {
393
+ if (a.type === CSSRule.IMPORT_RULE) {
394
394
  let c = o + 1;
395
- const l = i.href, u = Wt(l).then((f) => zt(f, e)).then((f) => qt(f).forEach((p) => {
395
+ const l = a.href, u = Yt(l).then((f) => Gt(f, e)).then((f) => Jt(f).forEach((m) => {
396
396
  try {
397
- a.insertRule(p, p.startsWith("@import") ? c += 1 : a.cssRules.length);
398
- } catch (y) {
397
+ i.insertRule(m, m.startsWith("@import") ? c += 1 : i.cssRules.length);
398
+ } catch (g) {
399
399
  console.error("Error inserting rule from remote css", {
400
- rule: p,
401
- error: y
400
+ rule: m,
401
+ error: g
402
402
  });
403
403
  }
404
404
  })).catch((f) => {
@@ -407,79 +407,79 @@ async function vn(t, e) {
407
407
  r.push(u);
408
408
  }
409
409
  });
410
- } catch (i) {
410
+ } catch (a) {
411
411
  const o = t.find((c) => c.href == null) || document.styleSheets[0];
412
- a.href != null && r.push(Wt(a.href).then((c) => zt(c, e)).then((c) => qt(c).forEach((l) => {
412
+ i.href != null && r.push(Yt(i.href).then((c) => Gt(c, e)).then((c) => Jt(c).forEach((l) => {
413
413
  o.insertRule(l, o.cssRules.length);
414
414
  })).catch((c) => {
415
415
  console.error("Error loading remote stylesheet", c);
416
- })), console.error("Error inlining remote css file", i);
416
+ })), console.error("Error inlining remote css file", a);
417
417
  }
418
- }), Promise.all(r).then(() => (t.forEach((a) => {
419
- if ("cssRules" in a)
418
+ }), Promise.all(r).then(() => (t.forEach((i) => {
419
+ if ("cssRules" in i)
420
420
  try {
421
- H(a.cssRules || []).forEach((i) => {
422
- n.push(i);
421
+ F(i.cssRules || []).forEach((a) => {
422
+ n.push(a);
423
423
  });
424
- } catch (i) {
425
- console.error(`Error while reading CSS rules from ${a.href}`, i);
424
+ } catch (a) {
425
+ console.error(`Error while reading CSS rules from ${i.href}`, a);
426
426
  }
427
427
  }), n));
428
428
  }
429
- function xn(t) {
430
- return t.filter((e) => e.type === CSSRule.FONT_FACE_RULE).filter((e) => ue(e.style.getPropertyValue("src")));
429
+ function On(t) {
430
+ return t.filter((e) => e.type === CSSRule.FONT_FACE_RULE).filter((e) => ge(e.style.getPropertyValue("src")));
431
431
  }
432
- async function En(t, e) {
432
+ async function Hn(t, e) {
433
433
  if (t.ownerDocument == null)
434
434
  throw new Error("Provided element is not within a Document");
435
- const n = H(t.ownerDocument.styleSheets), r = await vn(n, e);
436
- return xn(r);
435
+ const n = F(t.ownerDocument.styleSheets), r = await In(n, e);
436
+ return On(r);
437
437
  }
438
- function he(t) {
438
+ function ve(t) {
439
439
  return t.trim().replace(/["']/g, "");
440
440
  }
441
- function Cn(t) {
441
+ function Dn(t) {
442
442
  const e = /* @__PURE__ */ new Set();
443
443
  function n(r) {
444
- (r.style.fontFamily || getComputedStyle(r).fontFamily).split(",").forEach((i) => {
445
- e.add(he(i));
446
- }), Array.from(r.children).forEach((i) => {
447
- i instanceof HTMLElement && n(i);
444
+ (r.style.fontFamily || getComputedStyle(r).fontFamily).split(",").forEach((a) => {
445
+ e.add(ve(a));
446
+ }), Array.from(r.children).forEach((a) => {
447
+ a instanceof HTMLElement && n(a);
448
448
  });
449
449
  }
450
450
  return n(t), e;
451
451
  }
452
- async function Mn(t, e) {
453
- const n = await En(t, e), r = Cn(t);
454
- return (await Promise.all(n.filter((i) => r.has(he(i.style.fontFamily))).map((i) => {
455
- const o = i.parentStyleSheet ? i.parentStyleSheet.href : null;
456
- return de(i.cssText, o, e);
452
+ async function Bn(t, e) {
453
+ const n = await Hn(t, e), r = Dn(t);
454
+ return (await Promise.all(n.filter((a) => r.has(ve(a.style.fontFamily))).map((a) => {
455
+ const o = a.parentStyleSheet ? a.parentStyleSheet.href : null;
456
+ return we(a.cssText, o, e);
457
457
  }))).join(`
458
458
  `);
459
459
  }
460
- async function An(t, e) {
461
- const n = e.fontEmbedCSS != null ? e.fontEmbedCSS : e.skipFonts ? null : await Mn(t, e);
460
+ async function Fn(t, e) {
461
+ const n = e.fontEmbedCSS != null ? e.fontEmbedCSS : e.skipFonts ? null : await Bn(t, e);
462
462
  if (n) {
463
- const r = document.createElement("style"), a = document.createTextNode(n);
464
- r.appendChild(a), t.firstChild ? t.insertBefore(r, t.firstChild) : t.appendChild(r);
463
+ const r = document.createElement("style"), i = document.createTextNode(n);
464
+ r.appendChild(i), t.firstChild ? t.insertBefore(r, t.firstChild) : t.appendChild(r);
465
465
  }
466
466
  }
467
- async function Ln(t, e = {}) {
468
- const { width: n, height: r } = oe(t, e), a = await ut(t, e, !0);
469
- return await An(a, e), await fe(a, e), Sn(a, e), await Ve(a, n, r);
467
+ async function Un(t, e = {}) {
468
+ const { width: n, height: r } = he(t, e), i = await mt(t, e, !0);
469
+ return await Fn(i, e), await be(i, e), Pn(i, e), await en(i, n, r);
470
470
  }
471
- async function Rn(t, e = {}) {
472
- const { width: n, height: r } = oe(t, e), a = await Ln(t, e), i = await it(a), o = document.createElement("canvas"), c = o.getContext("2d"), l = e.pixelRatio || Ne(), u = e.canvasWidth || n, f = e.canvasHeight || r;
473
- return o.width = u * l, o.height = f * l, e.skipAutoScale || je(o), o.style.width = `${u}`, o.style.height = `${f}`, e.backgroundColor && (c.fillStyle = e.backgroundColor, c.fillRect(0, 0, o.width, o.height)), c.drawImage(i, 0, 0, o.width, o.height), o;
471
+ async function Nn(t, e = {}) {
472
+ const { width: n, height: r } = he(t, e), i = await Un(t, e), a = await ct(i), o = document.createElement("canvas"), c = o.getContext("2d"), l = e.pixelRatio || Qe(), u = e.canvasWidth || n, f = e.canvasHeight || r;
473
+ return o.width = u * l, o.height = f * l, e.skipAutoScale || Ze(o), o.style.width = `${u}`, o.style.height = `${f}`, e.backgroundColor && (c.fillStyle = e.backgroundColor, c.fillRect(0, 0, o.width, o.height)), c.drawImage(a, 0, 0, o.width, o.height), o;
474
474
  }
475
- async function Kt(t, e = {}) {
476
- return (await Rn(t, e)).toDataURL();
475
+ async function Qt(t, e = {}) {
476
+ return (await Nn(t, e)).toDataURL();
477
477
  }
478
- const at = "data-nf-capture-chrome", $n = "data-nf-canvas-snap", Tn = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==";
479
- function pe(t) {
480
- return t instanceof Element && (t.hasAttribute(at) || t.hasAttribute("data-nf-mask-cover") || t.id === "notefully");
478
+ const lt = "data-nf-capture-chrome", jn = "data-nf-canvas-snap", _n = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==";
479
+ function Se(t) {
480
+ return t instanceof Element && (t.hasAttribute(lt) || t.hasAttribute("data-nf-mask-cover") || t.id === "notefully");
481
481
  }
482
- function Pn() {
482
+ function Vn() {
483
483
  const t = [];
484
484
  return Array.from(document.styleSheets).forEach((e) => {
485
485
  try {
@@ -503,11 +503,11 @@ function Pn() {
503
503
  });
504
504
  };
505
505
  }
506
- function kn() {
506
+ function Wn() {
507
507
  const t = [];
508
508
  return document.querySelectorAll('input[type="password"], [data-notefully-mask]').forEach((n) => {
509
- const r = n.getBoundingClientRect(), a = document.createElement("div");
510
- a.setAttribute("data-nf-mask-cover", "1"), a.style.cssText = [
509
+ const r = n.getBoundingClientRect(), i = document.createElement("div");
510
+ i.setAttribute("data-nf-mask-cover", "1"), i.style.cssText = [
511
511
  "position:fixed",
512
512
  `left:${r.left}px`,
513
513
  `top:${r.top}px`,
@@ -516,31 +516,31 @@ function kn() {
516
516
  "background:#111",
517
517
  "z-index:2147483646",
518
518
  "pointer-events:none"
519
- ].join(";"), document.body.appendChild(a), t.push(a);
519
+ ].join(";"), document.body.appendChild(i), t.push(i);
520
520
  }), () => t.forEach((n) => n.remove());
521
521
  }
522
- function In() {
523
- const t = document.querySelector(`[${at}]`);
522
+ function zn() {
523
+ const t = document.querySelector(`[${lt}]`);
524
524
  if (t)
525
525
  return t;
526
526
  const e = document.createElement("div");
527
- return e.setAttribute(at, "1"), e.className = "nf-capture-chrome", e.setAttribute("role", "status"), e.setAttribute("aria-live", "polite"), e.innerHTML = '<span class="nf-capture-chrome-pill">Capturing…</span>', document.body.appendChild(e), e;
527
+ return e.setAttribute(lt, "1"), e.className = "nf-capture-chrome", e.setAttribute("role", "status"), e.setAttribute("aria-live", "polite"), e.innerHTML = '<span class="nf-capture-chrome-pill">Capturing…</span>', document.body.appendChild(e), e;
528
528
  }
529
- function On() {
530
- document.querySelectorAll(`[${at}]`).forEach((t) => t.remove());
529
+ function qn() {
530
+ document.querySelectorAll(`[${lt}]`).forEach((t) => t.remove());
531
531
  }
532
- function xt() {
532
+ function Lt() {
533
533
  return new Promise((t) => {
534
534
  requestAnimationFrame(() => requestAnimationFrame(t));
535
535
  });
536
536
  }
537
- function D(t) {
537
+ function U(t) {
538
538
  if (typeof t != "string" || !t.startsWith("data:image/"))
539
539
  return !1;
540
540
  const e = t.indexOf(",");
541
541
  return e > 0 && e < t.length - 1;
542
542
  }
543
- function Bn() {
543
+ function Kn() {
544
544
  const t = document.documentElement, e = document.body, n = Math.max(
545
545
  window.innerWidth || 0,
546
546
  (t == null ? void 0 : t.clientWidth) || 0,
@@ -556,10 +556,10 @@ function Bn() {
556
556
  );
557
557
  return { width: n, height: r };
558
558
  }
559
- async function Hn() {
559
+ async function Xn() {
560
560
  const t = [], e = Array.from(document.querySelectorAll("canvas"));
561
561
  for (const n of e) {
562
- if (n.closest("#notefully") || pe(n))
562
+ if (n.closest("#notefully") || Se(n))
563
563
  continue;
564
564
  let r = "";
565
565
  try {
@@ -569,8 +569,8 @@ async function Hn() {
569
569
  }
570
570
  if (!r || r === "data:,")
571
571
  continue;
572
- const a = document.createElement("img"), i = getComputedStyle(n);
573
- a.setAttribute($n, "1"), a.alt = "", a.src = r, a.className = n.className, a.style.cssText = n.style.cssText, a.style.width = i.width, a.style.height = i.height, a.style.maxWidth = i.maxWidth, a.style.maxHeight = i.maxHeight, a.style.objectFit = "fill", a.style.display = i.display === "inline" ? "inline-block" : i.display, n.replaceWith(a), t.push({ canvas: n, img: a });
572
+ const i = document.createElement("img"), a = getComputedStyle(n);
573
+ i.setAttribute(jn, "1"), i.alt = "", i.src = r, i.className = n.className, i.style.cssText = n.style.cssText, i.style.width = a.width, i.style.height = a.height, i.style.maxWidth = a.maxWidth, i.style.maxHeight = a.maxHeight, i.style.objectFit = "fill", i.style.display = a.display === "inline" ? "inline-block" : a.display, n.replaceWith(i), t.push({ canvas: n, img: i });
574
574
  }
575
575
  return await Promise.all(t.map(({ img: n }) => {
576
576
  if (!n.complete)
@@ -586,34 +586,34 @@ async function Hn() {
586
586
  });
587
587
  };
588
588
  }
589
- async function Dn(t) {
589
+ async function Yn(t) {
590
590
  if (!t)
591
591
  return null;
592
592
  if (typeof t == "string")
593
- return D(t) ? t : null;
593
+ return U(t) ? t : null;
594
594
  if (typeof HTMLCanvasElement < "u" && t instanceof HTMLCanvasElement)
595
595
  try {
596
596
  const e = t.toDataURL("image/png");
597
- return D(e) ? e : null;
597
+ return U(e) ? e : null;
598
598
  } catch {
599
599
  return null;
600
600
  }
601
601
  if (typeof Blob < "u" && t instanceof Blob) {
602
- const e = await Fn(t);
603
- return D(e) ? e : null;
602
+ const e = await Gn(t);
603
+ return U(e) ? e : null;
604
604
  }
605
605
  return null;
606
606
  }
607
- async function Fn(t) {
607
+ async function Gn(t) {
608
608
  if (typeof FileReader == "function")
609
- return new Promise((r, a) => {
610
- const i = new FileReader();
611
- i.onload = () => r(String(i.result || "")), i.onerror = () => a(i.error || new Error("Could not read capture blob")), i.readAsDataURL(t);
609
+ return new Promise((r, i) => {
610
+ const a = new FileReader();
611
+ a.onload = () => r(String(a.result || "")), a.onerror = () => i(a.error || new Error("Could not read capture blob")), a.readAsDataURL(t);
612
612
  });
613
613
  const e = Buffer.from(await t.arrayBuffer());
614
614
  return `data:${t.type || "application/octet-stream"};base64,${e.toString("base64")}`;
615
615
  }
616
- async function Un() {
616
+ async function Jn() {
617
617
  var e;
618
618
  if (!((e = navigator.mediaDevices) != null && e.getDisplayMedia))
619
619
  throw new Error("Screen capture is not supported in this browser.");
@@ -627,74 +627,74 @@ async function Un() {
627
627
  const n = document.createElement("video");
628
628
  n.muted = !0, n.playsInline = !0, n.srcObject = t, await n.play(), n.videoWidth || await new Promise((c) => {
629
629
  n.onloadedmetadata = () => c();
630
- }), await xt();
631
- const r = n.videoWidth || 1, a = n.videoHeight || 1, i = document.createElement("canvas");
632
- i.width = r, i.height = a, i.getContext("2d").drawImage(n, 0, 0, r, a);
633
- const o = i.toDataURL("image/png");
634
- if (!D(o))
630
+ }), await Lt();
631
+ const r = n.videoWidth || 1, i = n.videoHeight || 1, a = document.createElement("canvas");
632
+ a.width = r, a.height = i, a.getContext("2d").drawImage(n, 0, 0, r, i);
633
+ const o = a.toDataURL("image/png");
634
+ if (!U(o))
635
635
  throw new Error("Screen capture produced an empty image.");
636
636
  return o;
637
637
  } finally {
638
638
  t.getTracks().forEach((n) => n.stop());
639
639
  }
640
640
  }
641
- async function me(t = {}) {
642
- const e = document.getElementById("notefully"), n = e ? e.style.display : "", r = In(), a = Pn();
643
- let i = () => {
641
+ async function xe(t = {}) {
642
+ const e = document.getElementById("notefully"), n = e ? e.style.display : "", r = zn(), i = Vn();
643
+ let a = () => {
644
644
  };
645
645
  e && (e.style.display = "none");
646
- const o = kn();
646
+ const o = Wn();
647
647
  try {
648
- if (typeof t.onBeforeCapture == "function" && await t.onBeforeCapture(), await xt(), typeof t.capture == "function") {
649
- const p = await Dn(await t.capture());
650
- if (p)
651
- return p;
648
+ if (typeof t.onBeforeCapture == "function" && await t.onBeforeCapture(), await Lt(), typeof t.capture == "function") {
649
+ const m = await Yn(await t.capture());
650
+ if (m)
651
+ return m;
652
652
  }
653
- i = await Hn(), await xt();
654
- const { width: c, height: l } = Bn(), u = {
653
+ a = await Xn(), await Lt();
654
+ const { width: c, height: l } = Kn(), u = {
655
655
  cacheBust: !0,
656
656
  width: c,
657
657
  height: l,
658
658
  pixelRatio: Math.min(window.devicePixelRatio || 1, 2),
659
- filter: (p) => !pe(p),
659
+ filter: (m) => !Se(m),
660
660
  // 404 / CORS images must not abort the whole capture.
661
- imagePlaceholder: Tn,
661
+ imagePlaceholder: _n,
662
662
  onImageErrorHandler: () => {
663
663
  }
664
664
  };
665
665
  let f = "";
666
666
  try {
667
- f = await Kt(document.body, u);
667
+ f = await Qt(document.body, u);
668
668
  } catch {
669
- f = await Kt(document.body, { ...u, skipFonts: !0 });
669
+ f = await Qt(document.body, { ...u, skipFonts: !0 });
670
670
  }
671
- if (!D(f))
671
+ if (!U(f))
672
672
  throw new Error("Screenshot capture produced an empty image.");
673
673
  return f;
674
674
  } finally {
675
675
  try {
676
- i();
676
+ a();
677
677
  } catch {
678
678
  }
679
- o(), a(), r.remove(), On(), e && (e.style.display = n);
679
+ o(), i(), r.remove(), qn(), e && (e.style.display = n);
680
680
  }
681
681
  }
682
- function Nn(t = "") {
682
+ function Qn(t = "") {
683
683
  const e = String(t || "");
684
684
  return e ? /Windows NT/i.test(e) ? "Windows" : /iPhone|iPad|iPod/i.test(e) ? "iOS" : /Mac OS X|Macintosh/i.test(e) ? "macOS" : /Android/i.test(e) ? "Android" : /CrOS/i.test(e) ? "ChromeOS" : /Linux/i.test(e) ? "Linux" : "Other" : "";
685
685
  }
686
- function jn(t = "") {
686
+ function Zn(t = "") {
687
687
  const e = String(t || "");
688
688
  return e ? /Edg\//i.test(e) ? "Edge" : /OPR\/|Opera/i.test(e) ? "Opera" : /Firefox\//i.test(e) ? "Firefox" : /Chrome\//i.test(e) || /CriOS\//i.test(e) ? "Chrome" : /Safari\//i.test(e) ? "Safari" : "Other" : "";
689
689
  }
690
- function _n(t = {}) {
690
+ function tr(t = {}) {
691
691
  const e = navigator.userAgent;
692
692
  return {
693
693
  url: location.href,
694
694
  title: document.title,
695
695
  userAgent: e,
696
- os: Nn(e),
697
- browser: jn(e),
696
+ os: Qn(e),
697
+ browser: Zn(e),
698
698
  language: navigator.language,
699
699
  timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
700
700
  viewport: {
@@ -709,11 +709,11 @@ function _n(t = {}) {
709
709
  }
710
710
  };
711
711
  }
712
- const Xt = /* @__PURE__ */ new Set(["userId", "email", "displayName"]), Yt = {
712
+ const Zt = /* @__PURE__ */ new Set(["userId", "email", "displayName"]), te = {
713
713
  id: "userId",
714
714
  username: "displayName",
715
715
  name: "displayName"
716
- }, Gt = /* @__PURE__ */ new Set([
716
+ }, ee = /* @__PURE__ */ new Set([
717
717
  "endpoint",
718
718
  "projectKey",
719
719
  "version",
@@ -726,7 +726,7 @@ const Xt = /* @__PURE__ */ new Set(["userId", "email", "displayName"]), Yt = {
726
726
  "kinds",
727
727
  "capture",
728
728
  "onBeforeCapture"
729
- ]), Jt = {
729
+ ]), ne = {
730
730
  slug: "Use init({ name }) for a per-app report prefix (same idea as package.json name). slug is not a widget option.",
731
731
  projectSlug: "Use init({ name }) for a per-app report prefix. projectSlug is not a widget option.",
732
732
  project: "Pass projectKey (nfk_…) from Showfully Notefully settings — there is no project option on the widget.",
@@ -735,43 +735,43 @@ const Xt = /* @__PURE__ */ new Set(["userId", "email", "displayName"]), Yt = {
735
735
  email: "Pass people via Notefully.identify({ userId, email, displayName }), not init().",
736
736
  displayName: "Pass people via Notefully.identify({ userId, email, displayName }), not init()."
737
737
  };
738
- function Vn(t = {}, e = {}) {
739
- const n = e.warn || ye, r = t && typeof t == "object" ? t : {}, a = {}, i = [];
740
- for (const o of Xt)
741
- Object.prototype.hasOwnProperty.call(r, o) && (a[o] = r[o]);
742
- for (const [o, c] of Object.entries(Yt))
743
- Object.prototype.hasOwnProperty.call(r, o) && (Object.prototype.hasOwnProperty.call(a, c) || (a[c] = r[o]));
738
+ function er(t = {}, e = {}) {
739
+ const n = e.warn || Ee, r = t && typeof t == "object" ? t : {}, i = {}, a = [];
740
+ for (const o of Zt)
741
+ Object.prototype.hasOwnProperty.call(r, o) && (i[o] = r[o]);
742
+ for (const [o, c] of Object.entries(te))
743
+ Object.prototype.hasOwnProperty.call(r, o) && (Object.prototype.hasOwnProperty.call(i, c) || (i[c] = r[o]));
744
744
  for (const o of Object.keys(r))
745
- Xt.has(o) || Object.prototype.hasOwnProperty.call(Yt, o) || i.push(o);
746
- if (i.length) {
747
- const o = i.some((c) => c === "name" || c === "slug" || c === "projectSlug") ? " Pass the package/report name via Notefully.init({ name }), not identify()." : "";
745
+ Zt.has(o) || Object.prototype.hasOwnProperty.call(te, o) || a.push(o);
746
+ if (a.length) {
747
+ const o = a.some((c) => c === "name" || c === "slug" || c === "projectSlug") ? " Pass the package/report name via Notefully.init({ name }), not identify()." : "";
748
748
  n(
749
- `Notefully.identify: ignoring unknown key(s): ${i.join(", ")}. Supported: userId, email, displayName (aliases: id → userId; username/name → displayName).` + o
749
+ `Notefully.identify: ignoring unknown key(s): ${a.join(", ")}. Supported: userId, email, displayName (aliases: id → userId; username/name → displayName).` + o
750
750
  );
751
751
  }
752
- return a;
753
- }
754
- function Wn(t = {}, e = {}) {
755
- const n = e.warn || ye, r = t && typeof t == "object" ? t : {}, a = Object.keys(r).filter((i) => !Gt.has(i));
756
- if (a.length)
757
- for (const i of a) {
758
- if (Jt[i]) {
759
- n(`Notefully.init: ignoring "${i}". ${Jt[i]}`);
752
+ return i;
753
+ }
754
+ function nr(t = {}, e = {}) {
755
+ const n = e.warn || Ee, r = t && typeof t == "object" ? t : {}, i = Object.keys(r).filter((a) => !ee.has(a));
756
+ if (i.length)
757
+ for (const a of i) {
758
+ if (ne[a]) {
759
+ n(`Notefully.init: ignoring "${a}". ${ne[a]}`);
760
760
  continue;
761
761
  }
762
762
  n(
763
- `Notefully.init: ignoring unknown key "${i}". Supported: ${[...Gt].join(", ")}.`
763
+ `Notefully.init: ignoring unknown key "${a}". Supported: ${[...ee].join(", ")}.`
764
764
  );
765
765
  }
766
766
  }
767
- function ye(t) {
767
+ function Ee(t) {
768
768
  typeof console < "u" && typeof console.warn == "function" && console.warn(t);
769
769
  }
770
- const zn = 80;
771
- function qn() {
770
+ const rr = 80;
771
+ function ir() {
772
772
  const t = [], e = {};
773
773
  let n = !1;
774
- const r = (i, o) => {
774
+ const r = (a, o) => {
775
775
  let c = "";
776
776
  try {
777
777
  c = o.map((l) => l instanceof Error ? l.stack || l.message : typeof l == "string" ? l : JSON.stringify(l)).join(" ");
@@ -779,21 +779,21 @@ function qn() {
779
779
  c = String(o[0]);
780
780
  }
781
781
  t.push({
782
- level: i,
782
+ level: a,
783
783
  text: c.slice(0, 2e3),
784
784
  at: Date.now()
785
- }), t.length > zn && t.shift();
785
+ }), t.length > rr && t.shift();
786
786
  };
787
787
  return {
788
788
  hook: () => {
789
- n || typeof window > "u" || (n = !0, ["log", "info", "warn", "error"].forEach((i) => {
790
- e[i] = console[i].bind(console), console[i] = (...o) => {
791
- r(i, o), e[i](...o);
789
+ n || typeof window > "u" || (n = !0, ["log", "info", "warn", "error"].forEach((a) => {
790
+ e[a] = console[a].bind(console), console[a] = (...o) => {
791
+ r(a, o), e[a](...o);
792
792
  };
793
- }), window.addEventListener("error", (i) => {
794
- r("error", [i.message || "window.error"]);
795
- }), window.addEventListener("unhandledrejection", (i) => {
796
- r("error", [i.reason || "unhandledrejection"]);
793
+ }), window.addEventListener("error", (a) => {
794
+ r("error", [a.message || "window.error"]);
795
+ }), window.addEventListener("unhandledrejection", (a) => {
796
+ r("error", [a.reason || "unhandledrejection"]);
797
797
  }));
798
798
  },
799
799
  snapshot() {
@@ -801,10 +801,10 @@ function qn() {
801
801
  }
802
802
  };
803
803
  }
804
- function Kn(t) {
804
+ function ar(t) {
805
805
  const e = window.SpeechRecognition || window.webkitSpeechRecognition;
806
806
  let n = null, r = !1;
807
- const a = () => {
807
+ const i = () => {
808
808
  if (r = !1, n)
809
809
  try {
810
810
  n.stop();
@@ -815,7 +815,7 @@ function Kn(t) {
815
815
  start: () => {
816
816
  if (!e)
817
817
  throw new Error("Speech recognition is not supported in this browser.");
818
- return r ? (a(), !1) : (n = new e(), n.continuous = !0, n.interimResults = !0, n.lang = navigator.language || "en-US", n.onresult = (o) => {
818
+ return r ? (i(), !1) : (n = new e(), n.continuous = !0, n.interimResults = !0, n.lang = navigator.language || "en-US", n.onresult = (o) => {
819
819
  let c = "";
820
820
  for (let l = o.resultIndex; l < o.results.length; l += 1)
821
821
  o.results[l].isFinal && (c += o.results[l][0].transcript);
@@ -826,30 +826,30 @@ function Kn(t) {
826
826
  r = !1;
827
827
  }, n.start(), r = !0, !0);
828
828
  },
829
- stop: a,
829
+ stop: i,
830
830
  isSupported: () => !!e,
831
831
  isActive: () => r
832
832
  };
833
833
  }
834
- const Xn = 60 * 1e3;
835
- function Yn({ onStart: t, onStop: e, onError: n }) {
836
- let r = null, a = null, i = [], o = null;
834
+ const or = 60 * 1e3;
835
+ function sr({ onStart: t, onStop: e, onError: n }) {
836
+ let r = null, i = null, a = [], o = null;
837
837
  const c = () => {
838
- if (o && (clearTimeout(o), o = null), a && a.state !== "inactive")
838
+ if (o && (clearTimeout(o), o = null), i && i.state !== "inactive")
839
839
  try {
840
- a.stop();
840
+ i.stop();
841
841
  } catch {
842
842
  }
843
843
  r && (r.getTracks().forEach((f) => f.stop()), r = null);
844
844
  }, l = () => {
845
- if (a && a.state === "recording") {
846
- a.stop();
845
+ if (i && i.state === "recording") {
846
+ i.stop();
847
847
  return;
848
848
  }
849
849
  c(), e(null);
850
850
  };
851
851
  return { start: async () => {
852
- var f, p;
852
+ var f, m;
853
853
  if (!((f = navigator.mediaDevices) != null && f.getDisplayMedia))
854
854
  throw new Error("Screen recording is not supported in this browser.");
855
855
  r = await navigator.mediaDevices.getDisplayMedia({
@@ -857,17 +857,17 @@ function Yn({ onStart: t, onStop: e, onError: n }) {
857
857
  audio: !1,
858
858
  preferCurrentTab: !0,
859
859
  selfBrowserSurface: "include"
860
- }), i = [], a = new MediaRecorder(r, {
860
+ }), a = [], i = new MediaRecorder(r, {
861
861
  mimeType: MediaRecorder.isTypeSupported("video/webm;codecs=vp9") ? "video/webm;codecs=vp9" : "video/webm"
862
- }), a.ondataavailable = (y) => {
863
- y.data && y.data.size && i.push(y.data);
864
- }, a.onstop = () => {
865
- const y = i.length ? new Blob(i, { type: a.mimeType || "video/webm" }) : null;
866
- c(), e(y);
867
- }, (p = r.getVideoTracks()[0]) == null || p.addEventListener("ended", () => l()), a.start(), o = setTimeout(l, Xn);
862
+ }), i.ondataavailable = (g) => {
863
+ g.data && g.data.size && a.push(g.data);
864
+ }, i.onstop = () => {
865
+ const g = a.length ? new Blob(a, { type: i.mimeType || "video/webm" }) : null;
866
+ c(), e(g);
867
+ }, (m = r.getVideoTracks()[0]) == null || m.addEventListener("ended", () => l()), i.start(), o = setTimeout(l, or);
868
868
  }, stop: l };
869
869
  }
870
- function Gn() {
870
+ function cr() {
871
871
  const t = /* @__PURE__ */ new Set();
872
872
  return {
873
873
  alloc() {
@@ -885,64 +885,64 @@ function Gn() {
885
885
  }
886
886
  };
887
887
  }
888
- const yt = { x: 0, y: 0, w: 1, h: 1 };
889
- function Pt() {
890
- const t = Gn();
891
- let e = [], n = { ...yt }, r = 1;
888
+ const St = { x: 0, y: 0, w: 1, h: 1 };
889
+ function Dt() {
890
+ const t = cr();
891
+ let e = [], n = { ...St }, r = 1;
892
892
  return {
893
- list: () => e.filter((i) => Qn(i, n)),
893
+ list: () => e.filter((a) => ur(a, n)),
894
894
  all: () => e.slice(),
895
895
  crop: () => ({ ...n }),
896
- setCrop(i) {
897
- return n = Jn(i), n;
896
+ setCrop(a) {
897
+ return n = lr(a), n;
898
898
  },
899
899
  resetCrop() {
900
- return n = { ...yt }, n;
900
+ return n = { ...St }, n;
901
901
  },
902
902
  isCropped() {
903
903
  return n.x > 1e-6 || n.y > 1e-6 || n.w < 1 - 1e-6 || n.h < 1 - 1e-6;
904
904
  },
905
- add(i, o) {
905
+ add(a, o) {
906
906
  const c = {
907
907
  id: `s${r++}`,
908
- type: i,
908
+ type: a,
909
909
  number: t.alloc(),
910
910
  x: 0.2,
911
911
  y: 0.2,
912
- w: i === "arrow" ? 0.2 : 0.22,
913
- h: i === "arrow" ? 0.05 : 0.16,
912
+ w: a === "arrow" ? 0.2 : 0.22,
913
+ h: a === "arrow" ? 0.05 : 0.16,
914
914
  x2: 0.4,
915
915
  y2: 0.28,
916
916
  ...o
917
917
  };
918
918
  return e.push(c), c;
919
919
  },
920
- update(i, o) {
921
- const c = e.find((l) => l.id === i);
920
+ update(a, o) {
921
+ const c = e.find((l) => l.id === a);
922
922
  return c ? (Object.assign(c, o), c) : null;
923
923
  },
924
- remove(i) {
925
- const o = e.findIndex((l) => l.id === i);
924
+ remove(a) {
925
+ const o = e.findIndex((l) => l.id === a);
926
926
  if (o < 0)
927
927
  return null;
928
928
  const [c] = e.splice(o, 1);
929
929
  return t.free(c.number), c;
930
930
  },
931
931
  reset() {
932
- for (e = [], n = { ...yt }, r = 1; t.peekUsed().length; )
932
+ for (e = [], n = { ...St }, r = 1; t.peekUsed().length; )
933
933
  t.free(t.peekUsed()[0]);
934
934
  }
935
935
  };
936
936
  }
937
- function Jn(t) {
938
- const e = Math.min(Math.max(t.x, 0), 0.95), n = Math.min(Math.max(t.y, 0), 0.95), r = Math.min(Math.max(t.w, 0.05), 1 - e), a = Math.min(Math.max(t.h, 0.05), 1 - n);
939
- return { x: e, y: n, w: r, h: a };
937
+ function lr(t) {
938
+ const e = Math.min(Math.max(t.x, 0), 0.95), n = Math.min(Math.max(t.y, 0), 0.95), r = Math.min(Math.max(t.w, 0.05), 1 - e), i = Math.min(Math.max(t.h, 0.05), 1 - n);
939
+ return { x: e, y: n, w: r, h: i };
940
940
  }
941
- function Qn(t, e) {
941
+ function ur(t, e) {
942
942
  const n = t.type === "arrow" ? (t.x + (t.x2 ?? t.x)) / 2 : t.x + (t.w || 0) / 2, r = t.type === "arrow" ? (t.y + (t.y2 ?? t.y)) / 2 : t.y + (t.h || 0) / 2;
943
943
  return n >= e.x && r >= e.y && n <= e.x + e.w && r <= e.y + e.h;
944
944
  }
945
- function kt(t) {
945
+ function Bt(t) {
946
946
  const e = Math.max(1, Number(t) || 1);
947
947
  return {
948
948
  stroke: Math.max(2, e * 75e-4),
@@ -952,148 +952,223 @@ function kt(t) {
952
952
  arrowHeadAngle: 0.4
953
953
  };
954
954
  }
955
- function Zn(t, {
955
+ function dr(t, {
956
956
  stickers: e = [],
957
957
  crop: n = { x: 0, y: 0, w: 1, h: 1 },
958
958
  width: r,
959
- height: a,
960
- colors: i = {}
959
+ height: i,
960
+ colors: a = {}
961
961
  }) {
962
- const o = i.mark || "#fdd341", c = i.markText || "#2a2140", l = kt(r);
962
+ const o = a.mark || "#fdd341", c = a.markText || "#2a2140", l = Bt(r);
963
963
  t.save(), t.lineWidth = l.stroke, t.lineCap = "round", t.lineJoin = "round", t.strokeStyle = o, t.fillStyle = o, t.font = `700 ${Math.round(l.fontSize)}px ui-sans-serif, system-ui, sans-serif`, e.forEach((u) => {
964
- const f = Et(u.x, n, r), p = Ct(u.y, n, a), y = u.w / n.w * r, v = u.h / n.h * a, A = l.stroke / 2;
964
+ const f = Rt(u.x, n, r), m = $t(u.y, n, i), g = u.w / n.w * r, S = u.h / n.h * i, L = l.stroke / 2;
965
965
  if (u.type === "rect")
966
966
  t.strokeRect(
967
- f + A,
968
- p + A,
969
- Math.max(0, y - l.stroke),
970
- Math.max(0, v - l.stroke)
967
+ f + L,
968
+ m + L,
969
+ Math.max(0, g - l.stroke),
970
+ Math.max(0, S - l.stroke)
971
971
  );
972
972
  else if (u.type === "circle")
973
973
  t.beginPath(), t.ellipse(
974
- f + y / 2,
975
- p + v / 2,
976
- Math.max(0.5, y / 2 - A),
977
- Math.max(0.5, v / 2 - A),
974
+ f + g / 2,
975
+ m + S / 2,
976
+ Math.max(0.5, g / 2 - L),
977
+ Math.max(0.5, S / 2 - L),
978
978
  0,
979
979
  0,
980
980
  Math.PI * 2
981
981
  ), t.stroke();
982
982
  else if (u.type === "arrow") {
983
- const V = Et(u.x2 ?? u.x + u.w, n, r), W = Ct(u.y2 ?? u.y, n, a);
984
- er(t, f, p, V, W, l);
983
+ const K = Rt(u.x2 ?? u.x + u.w, n, r), X = $t(u.y2 ?? u.y, n, i);
984
+ hr(t, f, m, K, X, l);
985
985
  }
986
986
  if (u.number == null || u.number === "")
987
987
  return;
988
- const I = tr(u, n, r, a, f, p, y), Y = String(u.number);
989
- t.beginPath(), t.arc(I.x, I.y, l.badgeRadius, 0, Math.PI * 2), t.fillStyle = o, t.fill(), t.fillStyle = c, t.textAlign = "center", t.textBaseline = "middle", t.fillText(Y, I.x, I.y + 0.5), t.fillStyle = o;
988
+ const H = fr(u, n, r, i, f, m, g), Z = String(u.number);
989
+ t.beginPath(), t.arc(H.x, H.y, l.badgeRadius, 0, Math.PI * 2), t.fillStyle = o, t.fill(), t.fillStyle = c, t.textAlign = "center", t.textBaseline = "middle", t.fillText(Z, H.x, H.y + 0.5), t.fillStyle = o;
990
990
  }), t.restore();
991
991
  }
992
- function Et(t, e, n) {
992
+ function Rt(t, e, n) {
993
993
  return (t - e.x) / e.w * n;
994
994
  }
995
- function Ct(t, e, n) {
995
+ function $t(t, e, n) {
996
996
  return (t - e.y) / e.h * n;
997
997
  }
998
- function tr(t, e, n, r, a, i, o) {
998
+ function fr(t, e, n, r, i, a, o) {
999
999
  if (t.type === "arrow") {
1000
- const c = Et(t.x2 ?? t.x + t.w, e, n), l = Ct(t.y2 ?? t.y, e, r);
1000
+ const c = Rt(t.x2 ?? t.x + t.w, e, n), l = $t(t.y2 ?? t.y, e, r);
1001
1001
  return {
1002
- x: (a + c) / 2,
1003
- y: (i + l) / 2
1002
+ x: (i + c) / 2,
1003
+ y: (a + l) / 2
1004
1004
  };
1005
1005
  }
1006
- return { x: a + o / 2, y: i };
1007
- }
1008
- function ge(t, e, n, r, a) {
1009
- const i = Math.atan2(r - e, n - t), o = a.arrowHead, c = Math.min(a.stroke, o * 0.2), l = n, u = r, f = n - Math.cos(i) * o, p = r - Math.sin(i) * o, y = {
1010
- x: l - o * Math.cos(i - a.arrowHeadAngle),
1011
- y: u - o * Math.sin(i - a.arrowHeadAngle)
1012
- }, v = {
1013
- x: l - o * Math.cos(i + a.arrowHeadAngle),
1014
- y: u - o * Math.sin(i + a.arrowHeadAngle)
1015
- }, A = {
1016
- x: n - Math.cos(i) * c,
1017
- y: r - Math.sin(i) * c
1006
+ return { x: i + o / 2, y: a };
1007
+ }
1008
+ function Ce(t, e, n, r, i) {
1009
+ const a = Math.atan2(r - e, n - t), o = i.arrowHead, c = Math.min(i.stroke, o * 0.2), l = n, u = r, f = n - Math.cos(a) * o, m = r - Math.sin(a) * o, g = {
1010
+ x: l - o * Math.cos(a - i.arrowHeadAngle),
1011
+ y: u - o * Math.sin(a - i.arrowHeadAngle)
1012
+ }, S = {
1013
+ x: l - o * Math.cos(a + i.arrowHeadAngle),
1014
+ y: u - o * Math.sin(a + i.arrowHeadAngle)
1015
+ }, L = {
1016
+ x: n - Math.cos(a) * c,
1017
+ y: r - Math.sin(a) * c
1018
1018
  };
1019
- return { angle: i, tipX: l, tipY: u, baseX: f, baseY: p, left: y, right: v, shaftEnd: A };
1019
+ return { angle: a, tipX: l, tipY: u, baseX: f, baseY: m, left: g, right: S, shaftEnd: L };
1020
1020
  }
1021
- function er(t, e, n, r, a, i) {
1022
- const o = ge(e, n, r, a, i);
1021
+ function hr(t, e, n, r, i, a) {
1022
+ const o = Ce(e, n, r, i, a);
1023
1023
  t.beginPath(), t.moveTo(e, n), t.lineTo(o.shaftEnd.x, o.shaftEnd.y), t.stroke(), t.beginPath(), t.moveTo(o.tipX, o.tipY), t.lineTo(o.left.x, o.left.y), t.lineTo(o.right.x, o.right.y), t.closePath(), t.fill();
1024
1024
  }
1025
- function nr(t, e, n, r = {}) {
1026
- return new Promise((a, i) => {
1025
+ function pr(t, e, n, r = {}) {
1026
+ return new Promise((i, a) => {
1027
1027
  const o = new Image();
1028
1028
  o.onload = () => {
1029
- const c = Math.round(e.x * o.width), l = Math.round(e.y * o.height), u = Math.max(1, Math.round(e.w * o.width)), f = Math.max(1, Math.round(e.h * o.height)), p = document.createElement("canvas");
1030
- p.width = u, p.height = f;
1031
- const y = p.getContext("2d");
1032
- y.drawImage(o, c, l, u, f, 0, 0, u, f), Zn(y, {
1029
+ const c = Math.round(e.x * o.width), l = Math.round(e.y * o.height), u = Math.max(1, Math.round(e.w * o.width)), f = Math.max(1, Math.round(e.h * o.height)), m = document.createElement("canvas");
1030
+ m.width = u, m.height = f;
1031
+ const g = m.getContext("2d");
1032
+ g.drawImage(o, c, l, u, f, 0, 0, u, f), dr(g, {
1033
1033
  stickers: n,
1034
1034
  crop: e,
1035
1035
  width: u,
1036
1036
  height: f,
1037
1037
  colors: r
1038
- }), p.toBlob((v) => {
1039
- if (!v) {
1040
- i(new Error("Could not encode screenshot"));
1038
+ }), m.toBlob((S) => {
1039
+ if (!S) {
1040
+ a(new Error("Could not encode screenshot"));
1041
1041
  return;
1042
1042
  }
1043
- a(v);
1043
+ i(S);
1044
1044
  }, "image/png");
1045
- }, o.onerror = () => i(new Error("Could not load screenshot")), o.src = t;
1045
+ }, o.onerror = () => a(new Error("Could not load screenshot")), o.src = t;
1046
1046
  });
1047
1047
  }
1048
- const N = [
1048
+ const mr = [
1049
+ { key: "url", label: "URL" },
1050
+ { key: "title", label: "Title" },
1051
+ { key: "userAgent", label: "User agent" },
1052
+ { key: "os", label: "OS" },
1053
+ { key: "browser", label: "Browser" },
1054
+ { key: "language", label: "Language" },
1055
+ { key: "timezone", label: "Timezone" },
1056
+ { key: "viewport", label: "Viewport" },
1057
+ { key: "user", label: "User" }
1058
+ ];
1059
+ function yr(t) {
1060
+ return !t || typeof t != "object" ? !1 : !!(t.userId || t.email || t.displayName);
1061
+ }
1062
+ function gr(t = {}) {
1063
+ const e = [];
1064
+ for (const n of mr) {
1065
+ const r = t[n.key];
1066
+ r == null || r === "" || n.key === "user" && !yr(r) || e.push({
1067
+ key: n.key,
1068
+ label: n.label,
1069
+ value: r,
1070
+ redacted: !1
1071
+ });
1072
+ }
1073
+ return e;
1074
+ }
1075
+ function wr(t = []) {
1076
+ return t.map((e, n) => ({
1077
+ id: `log-${n}-${e.at || 0}`,
1078
+ level: e.level || "log",
1079
+ text: String(e.text || ""),
1080
+ at: e.at || 0,
1081
+ redacted: !1
1082
+ }));
1083
+ }
1084
+ function br(t = []) {
1085
+ if (!t.length)
1086
+ return { checked: !1, indeterminate: !1 };
1087
+ const e = t.filter((n) => n.redacted).length;
1088
+ return e === 0 ? { checked: !1, indeterminate: !1 } : e === t.length ? { checked: !0, indeterminate: !1 } : { checked: !1, indeterminate: !0 };
1089
+ }
1090
+ function re(t, e) {
1091
+ t.forEach((n) => {
1092
+ n.redacted = !!e;
1093
+ });
1094
+ }
1095
+ function vr(t = {}) {
1096
+ const e = t.diagnostics || [], n = t.logs || [], r = e.some((a) => !a.redacted), i = n.length > 0 && n.some((a) => !a.redacted);
1097
+ return r && i ? "Also sending logs and diagnostic information" : r ? "Also sending diagnostic information" : i ? "Also sending logs" : "";
1098
+ }
1099
+ function Sr(t) {
1100
+ if (t == null)
1101
+ return "";
1102
+ if (typeof t == "string" || typeof t == "number" || typeof t == "boolean")
1103
+ return String(t);
1104
+ try {
1105
+ return JSON.stringify(t);
1106
+ } catch {
1107
+ return String(t);
1108
+ }
1109
+ }
1110
+ function xr(t = {}) {
1111
+ const e = {};
1112
+ t.author != null && t.author !== "" && (e.author = t.author);
1113
+ for (const r of t.diagnostics || [])
1114
+ r.redacted || (e[r.key] = r.value);
1115
+ const n = (t.logs || []).filter((r) => !r.redacted).map((r) => ({
1116
+ level: r.level,
1117
+ text: r.text,
1118
+ at: r.at
1119
+ }));
1120
+ return e.console = n, e;
1121
+ }
1122
+ const W = [
1049
1123
  { id: "bug", label: "Bug" },
1050
1124
  { id: "idea", label: "Idea" },
1051
1125
  { id: "other", label: "Other" }
1052
1126
  ];
1053
- function Qt(t) {
1127
+ function ie(t) {
1054
1128
  return String(t || "").trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 32);
1055
1129
  }
1056
- function gt(t) {
1130
+ function xt(t) {
1057
1131
  const e = String(t || "").trim();
1058
1132
  return e ? e.split(/[-_\s]+/).filter(Boolean).map((n) => n.charAt(0).toUpperCase() + n.slice(1)).join(" ") : "";
1059
1133
  }
1060
- function rr(t) {
1134
+ function Er(t) {
1061
1135
  if (!Array.isArray(t) || !t.length)
1062
- return N.map((r) => ({ ...r }));
1136
+ return W.map((r) => ({ ...r }));
1063
1137
  const e = /* @__PURE__ */ new Set(), n = [];
1064
1138
  for (const r of t) {
1065
- let a = "", i = "";
1066
- typeof r == "string" || typeof r == "number" ? (a = Qt(r), i = gt(a)) : r && typeof r == "object" && (a = Qt(r.id ?? r.value ?? r.kind), i = String(r.label || r.name || gt(a)).trim() || gt(a)), !(!a || e.has(a)) && (e.add(a), n.push({ id: a, label: i }));
1139
+ let i = "", a = "";
1140
+ typeof r == "string" || typeof r == "number" ? (i = ie(r), a = xt(i)) : r && typeof r == "object" && (i = ie(r.id ?? r.value ?? r.kind), a = String(r.label || r.name || xt(i)).trim() || xt(i)), !(!i || e.has(i)) && (e.add(i), n.push({ id: i, label: a }));
1067
1141
  }
1068
- return n.length ? n : N.map((r) => ({ ...r }));
1142
+ return n.length ? n : W.map((r) => ({ ...r }));
1069
1143
  }
1070
- function dt(t) {
1144
+ function yt(t) {
1071
1145
  var n;
1072
- const e = Array.isArray(t) && t.length ? t : N;
1146
+ const e = Array.isArray(t) && t.length ? t : W;
1073
1147
  return e.some((r) => r.id === "bug") ? "bug" : ((n = e[0]) == null ? void 0 : n.id) || "other";
1074
1148
  }
1075
- const ir = ["maker", "all-business", "brighter-day", "quiet-night"], we = "maker", ar = /* @__PURE__ */ new Set(["crop", "arrow", "rect", "circle"]), Mt = 0.02, Zt = 0.05, or = `
1149
+ const Cr = ["maker", "all-business", "brighter-day", "quiet-night"], Me = "maker", Mr = /* @__PURE__ */ new Set(["crop", "arrow", "rect", "circle"]), kt = 0.02, ae = 0.05, Ar = `
1076
1150
  <svg class="nf-launcher-icon" viewBox="0 0 24 24" aria-hidden="true">
1077
1151
  <path fill="currentColor" d="M5.2 2.8h9.1A2.7 2.7 0 0 1 17 5.5v8.2c0 .4-.3.7-.7.7h-.1a.7.7 0 0 1-.7-.7V5.5c0-.7-.6-1.3-1.3-1.3H5.2c-.7 0-1.3.6-1.3 1.3v12.2c0 .7.6 1.3 1.3 1.3h6.4a.7.7 0 0 1 0 1.4H5.2A2.7 2.7 0 0 1 2.5 17.7V5.5A2.7 2.7 0 0 1 5.2 2.8zm1.6 4.2a.7.7 0 0 0 0 1.4h6.2a.7.7 0 0 0 0-1.4H6.8zm0 3.2a.7.7 0 0 0 0 1.4h6.2a.7.7 0 0 0 0-1.4H6.8zm0 3.2a.7.7 0 0 0 0 1.4h3.6a.7.7 0 0 0 0-1.4H6.8z"/>
1078
1152
  <path fill="currentColor" d="M14.7 13.05 20.2 7.55a1.55 1.55 0 0 1 2.2 2.2l-5.5 5.5-.45 1.9a.6.6 0 0 1-.72.45l-1.9-.45.87-1.9z"/>
1079
1153
  </svg>
1080
1154
  `;
1081
- function P(t) {
1155
+ function R(t) {
1082
1156
  return `<svg class="nf-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${t}</svg>`;
1083
1157
  }
1084
- const L = {
1085
- crop: P('<path d="M6 3v5H1M18 21v-5h5M8 5h8a2 2 0 0 1 2 2v8M16 19H8a2 2 0 0 1-2-2V8"/>'),
1086
- resetCrop: P('<path d="M3 12a9 9 0 1 0 3-6.7L3 8"/><path d="M3 3v5h5"/>'),
1087
- arrow: P('<path d="M5 19 19 5"/><path d="M9 5h10v10"/>'),
1088
- rect: P('<rect x="4" y="6" width="16" height="12" rx="1.5"/>'),
1089
- circle: P('<circle cx="12" cy="12" r="8"/>'),
1090
- discard: P('<path d="M4 7h16"/><path d="M9 7V5h6v2"/><path d="M6 7l1 13h10l1-13"/>'),
1091
- recapture: P('<path d="M4 8h3l2-2h6l2 2h3v11H4z"/><circle cx="12" cy="13" r="3.5"/>'),
1092
- audio: P('<rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5 11a7 7 0 0 0 14 0"/><path d="M12 18v3"/>'),
1093
- video: P('<rect x="3" y="7" width="13" height="10" rx="2"/><path d="M16 10.5 21 8v8l-5-2.5z"/>')
1094
- }, be = qn();
1095
- be.hook();
1096
- const Se = 10, sr = 80, ve = "notefully.author", At = "Anonymous";
1158
+ const M = {
1159
+ crop: R('<path d="M6 3v5H1M18 21v-5h5M8 5h8a2 2 0 0 1 2 2v8M16 19H8a2 2 0 0 1-2-2V8"/>'),
1160
+ resetCrop: R('<path d="M3 12a9 9 0 1 0 3-6.7L3 8"/><path d="M3 3v5h5"/>'),
1161
+ arrow: R('<path d="M5 19 19 5"/><path d="M9 5h10v10"/>'),
1162
+ rect: R('<rect x="4" y="6" width="16" height="12" rx="1.5"/>'),
1163
+ circle: R('<circle cx="12" cy="12" r="8"/>'),
1164
+ discard: R('<path d="M4 7h16"/><path d="M9 7V5h6v2"/><path d="M6 7l1 13h10l1-13"/>'),
1165
+ recapture: R('<path d="M4 8h3l2-2h6l2 2h3v11H4z"/><circle cx="12" cy="13" r="3.5"/>'),
1166
+ privacy: R('<path d="M8 6h13M8 12h13M8 18h13"/><path d="M3 6h.01M3 12h.01M3 18h.01"/>'),
1167
+ audio: R('<rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5 11a7 7 0 0 0 14 0"/><path d="M12 18v3"/>'),
1168
+ video: R('<rect x="3" y="7" width="13" height="10" rx="2"/><path d="M16 10.5 21 8v8l-5-2.5z"/>')
1169
+ }, Ae = ir();
1170
+ Ae.hook();
1171
+ const Le = 10, Lr = 80, Re = "notefully.author", Tt = "Anonymous";
1097
1172
  let d = {
1098
1173
  endpoint: "",
1099
1174
  projectKey: "",
@@ -1101,56 +1176,68 @@ let d = {
1101
1176
  name: "",
1102
1177
  targets: null,
1103
1178
  hideLauncher: !1,
1104
- theme: we,
1179
+ theme: Me,
1105
1180
  video: !1,
1106
- consoleLogLimit: Se,
1107
- kinds: N.map((t) => ({ ...t })),
1181
+ consoleLogLimit: Le,
1182
+ kinds: W.map((t) => ({ ...t })),
1108
1183
  capture: null,
1109
1184
  onBeforeCapture: null
1110
- }, wt = !1, R = {}, h = null, s = {}, m = Pt(), T = "", X = "", $ = null, j = dt(N), B = null, M = null, b = null, w = null, nt = null, U = null, G = null, k = { w: 0, h: 0 }, bt = !1, It = !1;
1111
- function g(t) {
1185
+ }, Et = !1, $ = {}, h = null, s = {}, y = Dt(), T = "", Q = "", k = null, z = yt(W), B = null, A = null, b = null, w = null, ot = null, V = null, tt = null, P = { w: 0, h: 0 }, Ct = !1, Ft = !1, N = [], O = [], _ = !1;
1186
+ function p(t) {
1112
1187
  return h.querySelector(t);
1113
1188
  }
1114
- function xe(t) {
1189
+ function $e(t) {
1115
1190
  const e = String(t || "").trim().toLowerCase().replace(/\s+/g, "-");
1116
- return ir.includes(e) ? e : we;
1191
+ return Cr.includes(e) ? e : Me;
1117
1192
  }
1118
- function te(t, e) {
1193
+ function oe(t, e) {
1119
1194
  return h && getComputedStyle(h).getPropertyValue(t).trim() || e;
1120
1195
  }
1121
- async function cr(t) {
1196
+ async function Rr(t) {
1122
1197
  return (await fetch(t)).blob();
1123
1198
  }
1124
- function S(t, e = !1) {
1125
- s.status && (s.status.textContent = t || "", nt && (clearTimeout(nt), nt = null), t && !e && (nt = setTimeout(() => {
1199
+ function v(t, e = !1) {
1200
+ s.status && (s.status.textContent = t || "", ot && (clearTimeout(ot), ot = null), t && !e && (ot = setTimeout(() => {
1126
1201
  s.status.textContent = "";
1127
1202
  }, 4e3)));
1128
1203
  }
1129
- function Ot() {
1204
+ function Ut() {
1130
1205
  return h && document.body.contains(h) || (h = document.createElement("div"), h.id = "notefully", h.innerHTML = `
1131
- <button class="nf-launcher" type="button" title="Leave a note…" aria-label="Leave a note…">${or}</button>
1206
+ <button class="nf-launcher" type="button" title="Leave a note…" aria-label="Leave a note…">${Ar}</button>
1132
1207
  <div class="nf-dialog" hidden>
1133
1208
  <div class="nf-panel">
1134
1209
  <div class="nf-panel-body">
1135
1210
  <div class="nf-stage" hidden>
1136
1211
  <div class="nf-palette">
1137
- <button class="nf-tool nf-icon-btn" type="button" data-tool="crop" title="Crop" aria-label="Crop">${L.crop}</button>
1138
- <button class="nf-reset-crop nf-icon-btn" type="button" title="Reset crop" aria-label="Reset crop" hidden>${L.resetCrop}</button>
1139
- <button class="nf-tool nf-icon-btn" type="button" data-tool="arrow" title="Arrow" aria-label="Arrow">${L.arrow}</button>
1140
- <button class="nf-tool nf-icon-btn" type="button" data-tool="rect" title="Rectangle" aria-label="Rectangle">${L.rect}</button>
1141
- <button class="nf-tool nf-icon-btn" type="button" data-tool="circle" title="Circle" aria-label="Circle">${L.circle}</button>
1142
- <button class="nf-discard-shot nf-icon-btn" type="button" title="Discard screenshot" aria-label="Discard screenshot">${L.discard}</button>
1143
- <button class="nf-recapture nf-icon-btn" type="button" title="Recapture screenshot" aria-label="Recapture screenshot">${L.recapture}</button>
1212
+ <button class="nf-tool nf-icon-btn" type="button" data-tool="crop" title="Crop" aria-label="Crop">${M.crop}</button>
1213
+ <button class="nf-reset-crop nf-icon-btn" type="button" title="Reset crop" aria-label="Reset crop" hidden>${M.resetCrop}</button>
1214
+ <button class="nf-tool nf-icon-btn" type="button" data-tool="arrow" title="Arrow" aria-label="Arrow">${M.arrow}</button>
1215
+ <button class="nf-tool nf-icon-btn" type="button" data-tool="rect" title="Rectangle" aria-label="Rectangle">${M.rect}</button>
1216
+ <button class="nf-tool nf-icon-btn" type="button" data-tool="circle" title="Circle" aria-label="Circle">${M.circle}</button>
1217
+ <button class="nf-discard-shot nf-icon-btn" type="button" title="Discard screenshot" aria-label="Discard screenshot">${M.discard}</button>
1218
+ <button class="nf-recapture nf-icon-btn" type="button" title="Recapture screenshot" aria-label="Recapture screenshot">${M.recapture}</button>
1144
1219
  </div>
1145
1220
  <div class="nf-canvas"></div>
1146
1221
  </div>
1147
1222
  <textarea class="nf-text" placeholder="Describe the bug or the change you want…"></textarea>
1148
1223
  <input class="nf-author" type="text" name="author" autocomplete="nickname" placeholder="Anonymous" aria-label="Author">
1149
- <div class="nf-kind"></div>
1224
+ <div class="nf-kind-row">
1225
+ <div class="nf-kind"></div>
1226
+ <div class="nf-privacy-summary">
1227
+ <span class="nf-privacy-text"></span>
1228
+ <button class="nf-privacy-change nf-icon-btn" type="button" title="Change what is sent" aria-label="Change what is sent" aria-expanded="false">${M.privacy}</button>
1229
+ </div>
1230
+ </div>
1231
+ <div class="nf-privacy">
1232
+ <div class="nf-privacy-panel" hidden>
1233
+ <div class="nf-privacy-scroll"></div>
1234
+ <button class="nf-privacy-done" type="button">Done</button>
1235
+ </div>
1236
+ </div>
1150
1237
  <div class="nf-actions">
1151
- <button class="nf-restore nf-icon-btn" type="button" title="Restore screenshot" aria-label="Restore screenshot" hidden>${L.resetCrop}</button>
1152
- <button class="nf-audio nf-icon-btn" type="button" title="Record audio" aria-label="Record audio">${L.audio}</button>
1153
- <button class="nf-video nf-icon-btn" type="button" title="Record video" aria-label="Record video">${L.video}</button>
1238
+ <button class="nf-restore nf-icon-btn" type="button" title="Restore screenshot" aria-label="Restore screenshot" hidden>${M.resetCrop}</button>
1239
+ <button class="nf-audio nf-icon-btn" type="button" title="Record audio" aria-label="Record audio">${M.audio}</button>
1240
+ <button class="nf-video nf-icon-btn" type="button" title="Record video" aria-label="Record video">${M.video}</button>
1154
1241
  <button class="nf-submit" type="button">Submit</button>
1155
1242
  </div>
1156
1243
  <div class="nf-status"></div>
@@ -1160,165 +1247,174 @@ function Ot() {
1160
1247
  </div>
1161
1248
  <button class="nf-stop-video" type="button" hidden>Stop</button>
1162
1249
  `, document.body.appendChild(h), s = {
1163
- launcher: g(".nf-launcher"),
1164
- dialog: g(".nf-dialog"),
1165
- panel: g(".nf-panel"),
1166
- panelBody: g(".nf-panel-body"),
1167
- successMsg: g(".nf-success-msg"),
1168
- stage: g(".nf-stage"),
1169
- palette: g(".nf-palette"),
1170
- canvas: g(".nf-canvas"),
1171
- text: g(".nf-text"),
1172
- author: g(".nf-author"),
1173
- actions: g(".nf-actions"),
1174
- restore: g(".nf-restore"),
1175
- status: g(".nf-status"),
1176
- audio: g(".nf-audio"),
1177
- video: g(".nf-video"),
1178
- discard: g(".nf-discard-shot"),
1179
- recapture: g(".nf-recapture"),
1180
- stop: g(".nf-stop-video"),
1181
- resetCrop: g(".nf-reset-crop"),
1182
- submit: g(".nf-submit"),
1250
+ launcher: p(".nf-launcher"),
1251
+ dialog: p(".nf-dialog"),
1252
+ panel: p(".nf-panel"),
1253
+ panelBody: p(".nf-panel-body"),
1254
+ successMsg: p(".nf-success-msg"),
1255
+ stage: p(".nf-stage"),
1256
+ palette: p(".nf-palette"),
1257
+ canvas: p(".nf-canvas"),
1258
+ text: p(".nf-text"),
1259
+ author: p(".nf-author"),
1260
+ kindRow: p(".nf-kind-row"),
1261
+ kind: p(".nf-kind"),
1262
+ privacy: p(".nf-privacy"),
1263
+ privacySummary: p(".nf-privacy-summary"),
1264
+ privacyText: p(".nf-privacy-text"),
1265
+ privacyChange: p(".nf-privacy-change"),
1266
+ privacyPanel: p(".nf-privacy-panel"),
1267
+ privacyScroll: p(".nf-privacy-scroll"),
1268
+ privacyDone: p(".nf-privacy-done"),
1269
+ actions: p(".nf-actions"),
1270
+ restore: p(".nf-restore"),
1271
+ status: p(".nf-status"),
1272
+ audio: p(".nf-audio"),
1273
+ video: p(".nf-video"),
1274
+ discard: p(".nf-discard-shot"),
1275
+ recapture: p(".nf-recapture"),
1276
+ stop: p(".nf-stop-video"),
1277
+ resetCrop: p(".nf-reset-crop"),
1278
+ submit: p(".nf-submit"),
1183
1279
  shot: null
1184
- }, lr(), Q()), h;
1280
+ }, $r(), nt()), h;
1185
1281
  }
1186
- function Q() {
1282
+ function nt() {
1187
1283
  var t;
1188
- h && (h.dataset.theme = xe(d.theme), d.hideLauncher ? h.setAttribute("data-nf-hidden-launcher", "") : h.removeAttribute("data-nf-hidden-launcher"), s.video && (s.video.hidden = !d.video), Ee(), (t = s.dialog) != null && t.hidden && ot());
1284
+ h && (h.dataset.theme = $e(d.theme), d.hideLauncher ? h.setAttribute("data-nf-hidden-launcher", "") : h.removeAttribute("data-nf-hidden-launcher"), s.video && (s.video.hidden = !d.video), ke(), (t = s.dialog) != null && t.hidden && ut());
1189
1285
  }
1190
- function ot() {
1286
+ function ut() {
1191
1287
  s.launcher && (s.launcher.hidden = !!d.hideLauncher);
1192
1288
  }
1193
- function lr() {
1194
- s.launcher.addEventListener("click", () => Ie()), g(".nf-dialog").addEventListener("click", (e) => {
1195
- It || e.target === s.dialog && et();
1289
+ function $r() {
1290
+ s.launcher.addEventListener("click", () => ze()), p(".nf-dialog").addEventListener("click", (e) => {
1291
+ Ft || e.target === s.dialog && at();
1196
1292
  }), h.querySelectorAll(".nf-tool").forEach((e) => {
1197
- e.addEventListener("click", () => J(e.dataset.tool));
1198
- }), s.resetCrop.addEventListener("click", yr), s.canvas.addEventListener("pointerdown", dr), s.canvas.addEventListener("dragstart", (e) => e.preventDefault());
1199
- const t = g(".nf-kind");
1293
+ e.addEventListener("click", () => et(e.dataset.tool));
1294
+ }), s.resetCrop.addEventListener("click", Dr), s.canvas.addEventListener("pointerdown", Tr), s.canvas.addEventListener("dragstart", (e) => e.preventDefault());
1295
+ const t = p(".nf-kind");
1200
1296
  t && t.addEventListener("click", (e) => {
1201
1297
  const n = e.target.closest("[data-kind]");
1202
- n && Bt(n.dataset.kind);
1203
- }), s.discard.addEventListener("click", gr), s.recapture.addEventListener("click", () => {
1204
- br().catch((e) => S(e.message || "Recapture failed."));
1205
- }), s.restore.addEventListener("click", wr), s.audio.addEventListener("click", Sr), s.video.addEventListener("click", vr), s.stop.addEventListener("click", () => G == null ? void 0 : G.stop()), g(".nf-submit").addEventListener("click", () => {
1206
- Be().catch((e) => S(e.message || "Submit failed."));
1207
- }), Ee(), J(null);
1208
- }
1209
- function ee(t) {
1298
+ n && Nt(n.dataset.kind);
1299
+ }), s.discard.addEventListener("click", Br), s.recapture.addEventListener("click", () => {
1300
+ Ur().catch((e) => v(e.message || "Recapture failed."));
1301
+ }), s.restore.addEventListener("click", Fr), s.audio.addEventListener("click", Nr), s.video.addEventListener("click", jr), s.stop.addEventListener("click", () => tt == null ? void 0 : tt.stop()), s.privacyChange.addEventListener("click", () => pt(!_)), s.privacyDone.addEventListener("click", () => pt(!1)), s.privacyScroll.addEventListener("change", Jr), p(".nf-submit").addEventListener("click", () => {
1302
+ Ke().catch((e) => v(e.message || "Submit failed."));
1303
+ }), ke(), et(null);
1304
+ }
1305
+ function I(t) {
1210
1306
  return String(t || "").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
1211
1307
  }
1212
- function Ee() {
1308
+ function ke() {
1213
1309
  const t = h == null ? void 0 : h.querySelector(".nf-kind");
1214
1310
  if (!t)
1215
1311
  return;
1216
- const e = Array.isArray(d.kinds) && d.kinds.length ? d.kinds : N;
1217
- t.innerHTML = e.map((a) => `<button type="button" data-kind="${ee(a.id)}">${ee(a.label)}</button>`).join("");
1218
- const r = e.map((a) => a.id).includes(j) ? j : dt(e);
1219
- Bt(r);
1220
- }
1221
- function Bt(t) {
1222
- j = (d.kinds || N).map((n) => n.id).includes(t) ? t : dt(d.kinds), h == null || h.querySelectorAll("[data-kind]").forEach((n) => {
1223
- n.dataset.active = String(n.dataset.kind === j);
1312
+ const e = Array.isArray(d.kinds) && d.kinds.length ? d.kinds : W;
1313
+ t.innerHTML = e.map((i) => `<button type="button" data-kind="${I(i.id)}">${I(i.label)}</button>`).join("");
1314
+ const r = e.map((i) => i.id).includes(z) ? z : yt(e);
1315
+ Nt(r);
1316
+ }
1317
+ function Nt(t) {
1318
+ z = (d.kinds || W).map((n) => n.id).includes(t) ? t : yt(d.kinds), h == null || h.querySelectorAll("[data-kind]").forEach((n) => {
1319
+ n.dataset.active = String(n.dataset.kind === z);
1224
1320
  });
1225
1321
  }
1226
- function J(t) {
1227
- B = ar.has(t) ? t : null, M = null, h.querySelectorAll(".nf-tool").forEach((e) => {
1322
+ function et(t) {
1323
+ B = Mr.has(t) ? t : null, A = null, h.querySelectorAll(".nf-tool").forEach((e) => {
1228
1324
  e.dataset.active = String(e.dataset.tool === B);
1229
- }), s.canvas && (s.canvas.dataset.draw = B ? "true" : "false"), F() && C();
1325
+ }), s.canvas && (s.canvas.dataset.draw = B ? "true" : "false"), j() && C();
1230
1326
  }
1231
- function ne(t) {
1327
+ function se(t) {
1232
1328
  return Math.min(1, Math.max(0, t));
1233
1329
  }
1234
- function Z() {
1330
+ function rt() {
1235
1331
  return s.shot || s.canvas;
1236
1332
  }
1237
- function st(t) {
1238
- const e = Z().getBoundingClientRect();
1333
+ function dt(t) {
1334
+ const e = rt().getBoundingClientRect();
1239
1335
  return {
1240
- x: ne((t.clientX - e.left) / Math.max(e.width, 1)),
1241
- y: ne((t.clientY - e.top) / Math.max(e.height, 1))
1336
+ x: se((t.clientX - e.left) / Math.max(e.width, 1)),
1337
+ y: se((t.clientY - e.top) / Math.max(e.height, 1))
1242
1338
  };
1243
1339
  }
1244
- function ur(t) {
1245
- const e = Z().getBoundingClientRect();
1340
+ function kr(t) {
1341
+ const e = rt().getBoundingClientRect();
1246
1342
  return t.clientX >= e.left && t.clientX <= e.right && t.clientY >= e.top && t.clientY <= e.bottom;
1247
1343
  }
1248
- function Ce(t) {
1249
- const e = st(t), n = m.crop();
1344
+ function Te(t) {
1345
+ const e = dt(t), n = y.crop();
1250
1346
  return {
1251
1347
  x: n.x + e.x * n.w,
1252
1348
  y: n.y + e.y * n.h
1253
1349
  };
1254
1350
  }
1255
- function ft(t, e) {
1351
+ function gt(t, e) {
1256
1352
  const n = Math.min(t.x, e.x), r = Math.min(t.y, e.y);
1257
1353
  return {
1258
1354
  x: n,
1259
1355
  y: r,
1260
- w: Math.max(Mt, Math.abs(e.x - t.x)),
1261
- h: Math.max(Mt, Math.abs(e.y - t.y))
1356
+ w: Math.max(kt, Math.abs(e.x - t.x)),
1357
+ h: Math.max(kt, Math.abs(e.y - t.y))
1262
1358
  };
1263
1359
  }
1264
- function Ht(t) {
1360
+ function jt(t) {
1265
1361
  h && (t ? h.dataset.grabbing = "true" : delete h.dataset.grabbing);
1266
1362
  }
1267
- function St(t) {
1363
+ function Mt(t) {
1268
1364
  try {
1269
1365
  s.canvas.setPointerCapture(t.pointerId);
1270
1366
  } catch {
1271
1367
  }
1272
1368
  }
1273
- function Lt() {
1274
- window.addEventListener("pointermove", Ae), window.addEventListener("pointerup", ct), window.addEventListener("pointercancel", ct);
1369
+ function Pt() {
1370
+ window.addEventListener("pointermove", Ie), window.addEventListener("pointerup", ft), window.addEventListener("pointercancel", ft);
1275
1371
  }
1276
- function Me() {
1277
- window.removeEventListener("pointermove", Ae), window.removeEventListener("pointerup", ct), window.removeEventListener("pointercancel", ct);
1372
+ function Pe() {
1373
+ window.removeEventListener("pointermove", Ie), window.removeEventListener("pointerup", ft), window.removeEventListener("pointercancel", ft);
1278
1374
  }
1279
- function dr(t) {
1280
- if (t.button !== 0 || !F())
1375
+ function Tr(t) {
1376
+ if (t.button !== 0 || !j())
1281
1377
  return;
1282
- if (!t.target.closest(".nf-sticker") && !ur(t)) {
1283
- M = null, C();
1378
+ if (!t.target.closest(".nf-sticker") && !kr(t)) {
1379
+ A = null, C();
1284
1380
  return;
1285
1381
  }
1286
1382
  const e = t.target.closest(".nf-handle"), n = t.target.closest(".nf-sticker");
1287
1383
  if (n && n.dataset.preview !== "true") {
1288
- t.preventDefault(), t.stopPropagation(), M = n.dataset.id, St(t), fr({
1384
+ t.preventDefault(), t.stopPropagation(), A = n.dataset.id, Mt(t), Pr({
1289
1385
  kind: "sticker",
1290
- id: M,
1386
+ id: A,
1291
1387
  dir: (e == null ? void 0 : e.dataset.dir) || "move"
1292
1388
  }, t), C();
1293
1389
  return;
1294
1390
  }
1295
- if (M = null, B === "crop") {
1296
- t.preventDefault(), St(t), b = { kind: "crop", start: st(t), current: st(t) }, Lt(), C();
1391
+ if (A = null, B === "crop") {
1392
+ t.preventDefault(), Mt(t), b = { kind: "crop", start: dt(t), current: dt(t) }, Pt(), C();
1297
1393
  return;
1298
1394
  }
1299
1395
  if (B === "arrow" || B === "rect" || B === "circle") {
1300
- t.preventDefault(), St(t);
1301
- const r = Ce(t);
1302
- b = { kind: "sticker", type: B, start: r, current: r }, Lt(), C();
1396
+ t.preventDefault(), Mt(t);
1397
+ const r = Te(t);
1398
+ b = { kind: "sticker", type: B, start: r, current: r }, Pt(), C();
1303
1399
  return;
1304
1400
  }
1305
1401
  C();
1306
1402
  }
1307
- function fr(t, e) {
1403
+ function Pr(t, e) {
1308
1404
  e.preventDefault(), e.stopPropagation();
1309
- const n = Z().getBoundingClientRect(), r = m.list().find((a) => a.id === t.id);
1405
+ const n = rt().getBoundingClientRect(), r = y.list().find((i) => i.id === t.id);
1310
1406
  w = {
1311
1407
  ...t,
1312
1408
  startX: e.clientX,
1313
1409
  startY: e.clientY,
1314
- crop: m.crop(),
1410
+ crop: y.crop(),
1315
1411
  sticker: r ? { ...r } : null,
1316
1412
  rect: n
1317
- }, Ht(t.dir === "move" || t.dir === "start" || t.dir === "end"), Lt();
1413
+ }, jt(t.dir === "move" || t.dir === "start" || t.dir === "end"), Pt();
1318
1414
  }
1319
- function Ae(t) {
1415
+ function Ie(t) {
1320
1416
  if (b) {
1321
- b.current = b.kind === "crop" ? st(t) : Ce(t), C();
1417
+ b.current = b.kind === "crop" ? dt(t) : Te(t), C();
1322
1418
  return;
1323
1419
  }
1324
1420
  if (!w)
@@ -1326,85 +1422,85 @@ function Ae(t) {
1326
1422
  const e = (t.clientX - w.startX) / w.rect.width * w.crop.w, n = (t.clientY - w.startY) / w.rect.height * w.crop.h, r = w.sticker;
1327
1423
  if (r) {
1328
1424
  if (w.dir === "end")
1329
- m.update(r.id, {
1425
+ y.update(r.id, {
1330
1426
  x2: r.x2 + e,
1331
1427
  y2: r.y2 + n
1332
1428
  });
1333
1429
  else if (w.dir === "start")
1334
- m.update(r.id, {
1430
+ y.update(r.id, {
1335
1431
  x: r.x + e,
1336
1432
  y: r.y + n
1337
1433
  });
1338
1434
  else if (w.dir === "move")
1339
- m.update(r.id, {
1435
+ y.update(r.id, {
1340
1436
  x: r.x + e,
1341
1437
  y: r.y + n,
1342
1438
  x2: (r.x2 || r.x) + e,
1343
1439
  y2: (r.y2 || r.y) + n
1344
1440
  });
1345
1441
  else {
1346
- const a = { x: r.x, y: r.y, w: r.w, h: r.h };
1347
- hr(a, w.dir, e, n), m.update(r.id, a);
1442
+ const i = { x: r.x, y: r.y, w: r.w, h: r.h };
1443
+ Ir(i, w.dir, e, n), y.update(r.id, i);
1348
1444
  }
1349
1445
  C();
1350
1446
  }
1351
1447
  }
1352
- function hr(t, e, n, r) {
1448
+ function Ir(t, e, n, r) {
1353
1449
  if (e.includes("e") && (t.w = Math.max(0.04, t.w + n)), e.includes("s") && (t.h = Math.max(0.04, t.h + r)), e.includes("w")) {
1354
- const a = Math.max(0.04, t.w - n);
1355
- t.x += t.w - a, t.w = a;
1450
+ const i = Math.max(0.04, t.w - n);
1451
+ t.x += t.w - i, t.w = i;
1356
1452
  }
1357
1453
  if (e.includes("n")) {
1358
- const a = Math.max(0.04, t.h - r);
1359
- t.y += t.h - a, t.h = a;
1454
+ const i = Math.max(0.04, t.h - r);
1455
+ t.y += t.h - i, t.h = i;
1360
1456
  }
1361
1457
  }
1362
- function ct(t) {
1363
- if (Me(), Ht(!1), b) {
1364
- pr();
1458
+ function ft(t) {
1459
+ if (Pe(), jt(!1), b) {
1460
+ Or();
1365
1461
  return;
1366
1462
  }
1367
1463
  if (w) {
1368
1464
  if (w.kind === "sticker") {
1369
1465
  const e = s.canvas.getBoundingClientRect();
1370
- (t.clientX < e.left - 24 || t.clientX > e.right + 24 || t.clientY < e.top - 24 || t.clientY > e.bottom + 24) && (m.remove(w.id), M = null);
1466
+ (t.clientX < e.left - 24 || t.clientX > e.right + 24 || t.clientY < e.top - 24 || t.clientY > e.bottom + 24) && (y.remove(w.id), A = null);
1371
1467
  }
1372
1468
  w = null, C();
1373
1469
  }
1374
1470
  }
1375
- function pr() {
1471
+ function Or() {
1376
1472
  const t = b;
1377
1473
  if (b = null, !t)
1378
1474
  return;
1379
1475
  if (t.kind === "crop") {
1380
- const n = ft(t.start, t.current);
1381
- if (Math.abs(t.current.x - t.start.x) < Zt || Math.abs(t.current.y - t.start.y) < Zt) {
1476
+ const n = gt(t.start, t.current);
1477
+ if (Math.abs(t.current.x - t.start.x) < ae || Math.abs(t.current.y - t.start.y) < ae) {
1382
1478
  C();
1383
1479
  return;
1384
1480
  }
1385
- const a = m.crop();
1386
- m.setCrop({
1387
- x: a.x + n.x * a.w,
1388
- y: a.y + n.y * a.h,
1389
- w: n.w * a.w,
1390
- h: n.h * a.h
1391
- }), _();
1481
+ const i = y.crop();
1482
+ y.setCrop({
1483
+ x: i.x + n.x * i.w,
1484
+ y: i.y + n.y * i.h,
1485
+ w: n.w * i.w,
1486
+ h: n.h * i.h
1487
+ }), q();
1392
1488
  return;
1393
1489
  }
1394
- const e = mr(t);
1395
- e && (M = e.id), C();
1490
+ const e = Hr(t);
1491
+ e && (A = e.id), C();
1396
1492
  }
1397
- function mr(t) {
1493
+ function Hr(t) {
1398
1494
  if (t.type === "arrow") {
1399
1495
  const e = t.current.x - t.start.x, n = t.current.y - t.start.y;
1400
- return Math.hypot(e, n) < Mt ? m.add("arrow", {
1496
+ return Math.hypot(e, n) < kt ? y.add("arrow", {
1401
1497
  x: t.start.x,
1402
1498
  y: t.start.y,
1403
1499
  x2: t.start.x + 0.12,
1404
1500
  y2: t.start.y,
1405
1501
  w: 0.12,
1406
1502
  h: 0.02
1407
- }) : m.add("arrow", {
1503
+ }) : y.add("arrow", {
1408
1504
  x: t.start.x,
1409
1505
  y: t.start.y,
1410
1506
  x2: t.current.x,
@@ -1413,121 +1509,121 @@ function mr(t) {
1413
1509
  h: Math.abs(n)
1414
1510
  });
1415
1511
  }
1416
- return m.add(t.type, ft(t.start, t.current));
1512
+ return y.add(t.type, gt(t.start, t.current));
1417
1513
  }
1418
- function yr() {
1419
- m.resetCrop(), M = null, _();
1514
+ function Dr() {
1515
+ y.resetCrop(), A = null, q();
1420
1516
  }
1421
- function lt() {
1422
- s.resetCrop && (s.resetCrop.hidden = !m.isCropped());
1517
+ function ht() {
1518
+ s.resetCrop && (s.resetCrop.hidden = !y.isCropped());
1423
1519
  }
1424
- function Dt(t) {
1520
+ function _t(t) {
1425
1521
  if (!s.audio)
1426
1522
  return;
1427
1523
  const e = t ? "Stop audio" : "Record audio";
1428
1524
  s.audio.title = e, s.audio.setAttribute("aria-label", e), s.audio.dataset.active = String(!!t);
1429
1525
  }
1430
- function F() {
1431
- return D(T);
1526
+ function j() {
1527
+ return U(T);
1432
1528
  }
1433
- function tt() {
1529
+ function it() {
1434
1530
  if (!s.stage || !s.palette || !s.actions || !s.recapture)
1435
1531
  return;
1436
- const t = F();
1437
- s.stage.hidden = !t && !$, s.palette.hidden = !t, s.discard && (s.discard.hidden = !t), s.restore && (s.restore.hidden = t || !X), t ? (s.palette.appendChild(s.discard), s.palette.appendChild(s.recapture)) : s.audio ? s.audio.after(s.recapture) : s.actions.insertBefore(s.recapture, s.submit || null), s.recapture.hidden = !1;
1532
+ const t = j();
1533
+ s.stage.hidden = !t && !k, s.palette.hidden = !t, s.discard && (s.discard.hidden = !t), s.restore && (s.restore.hidden = t || !Q), t ? (s.palette.appendChild(s.discard), s.palette.appendChild(s.recapture)) : s.audio ? s.audio.after(s.recapture) : s.actions.insertBefore(s.recapture, s.submit || null), s.recapture.hidden = !1;
1438
1534
  }
1439
- function gr() {
1440
- F() && (X = T), T = "", J(null), tt(), _();
1535
+ function Br() {
1536
+ j() && (Q = T), T = "", et(null), it(), q();
1441
1537
  }
1442
- function wr() {
1443
- D(X) && (T = X, tt(), _());
1538
+ function Fr() {
1539
+ U(Q) && (T = Q, it(), q());
1444
1540
  }
1445
- function Le() {
1541
+ function Oe() {
1446
1542
  return {
1447
1543
  capture: typeof d.capture == "function" ? d.capture : void 0,
1448
1544
  onBeforeCapture: typeof d.onBeforeCapture == "function" ? d.onBeforeCapture : void 0
1449
1545
  };
1450
1546
  }
1451
- function Re(t) {
1452
- if (!D(t))
1547
+ function He(t) {
1548
+ if (!U(t))
1453
1549
  throw new Error("Screenshot failed; you can still send text.");
1454
- T = t, X = t, m = Pt(), k = { w: 0, h: 0 }, M = null, b = null, w = null, J(null);
1550
+ T = t, Q = t, y = Dt(), P = { w: 0, h: 0 }, A = null, b = null, w = null, et(null);
1455
1551
  }
1456
- async function br() {
1457
- if (!(wt || !s.dialog || s.dialog.hidden)) {
1458
- wt = !0, s.recapture.disabled = !0, S("Capturing…", !0), s.dialog.hidden = !0;
1552
+ async function Ur() {
1553
+ if (!(Et || !s.dialog || s.dialog.hidden)) {
1554
+ Et = !0, s.recapture.disabled = !0, v("Capturing…", !0), s.dialog.hidden = !0;
1459
1555
  try {
1460
1556
  let t = "";
1461
1557
  try {
1462
- t = await Un();
1558
+ t = await Jn();
1463
1559
  } catch {
1464
- t = await me(Le());
1560
+ t = await xe(Oe());
1465
1561
  }
1466
- Re(t), S("");
1562
+ He(t), v("");
1467
1563
  } catch (t) {
1468
- S((t == null ? void 0 : t.message) || "Screenshot failed; you can still send text.");
1564
+ v((t == null ? void 0 : t.message) || "Screenshot failed; you can still send text.");
1469
1565
  } finally {
1470
- s.dialog.hidden = !1, s.recapture.disabled = !1, wt = !1, tt(), _();
1566
+ s.dialog.hidden = !1, s.recapture.disabled = !1, Et = !1, it(), q();
1471
1567
  }
1472
1568
  }
1473
1569
  }
1474
- function Sr() {
1570
+ function Nr() {
1475
1571
  try {
1476
- if (U || (U = Kn((e) => {
1572
+ if (V || (V = ar((e) => {
1477
1573
  const n = s.text.value.trim();
1478
1574
  s.text.value = n ? `${n} ${e}` : e;
1479
- })), !U.isSupported()) {
1480
- S("Audio-to-text is not supported in this browser.");
1575
+ })), !V.isSupported()) {
1576
+ v("Audio-to-text is not supported in this browser.");
1481
1577
  return;
1482
1578
  }
1483
- const t = U.start();
1484
- Dt(t), S(t ? "Listening…" : "");
1579
+ const t = V.start();
1580
+ _t(t), v(t ? "Listening…" : "");
1485
1581
  } catch (t) {
1486
- S(t.message);
1582
+ v(t.message);
1487
1583
  }
1488
1584
  }
1489
- async function vr() {
1585
+ async function jr() {
1490
1586
  if (!d.video) {
1491
- S("Video is disabled on this host.");
1587
+ v("Video is disabled on this host.");
1492
1588
  return;
1493
1589
  }
1494
- s.dialog.hidden = !0, s.stop.hidden = !1, Q(), s.launcher.hidden = !0, G = Yn({
1590
+ s.dialog.hidden = !0, s.stop.hidden = !1, nt(), s.launcher.hidden = !0, tt = sr({
1495
1591
  onStart() {
1496
1592
  },
1497
1593
  onStop(t) {
1498
- $ = t, s.stop.hidden = !0, ot(), s.dialog.hidden = !1, tt(), _(), S(t ? "Video attached." : "Recording cancelled.");
1594
+ k = t, s.stop.hidden = !0, ut(), s.dialog.hidden = !1, it(), q(), v(t ? "Video attached." : "Recording cancelled.");
1499
1595
  },
1500
1596
  onError(t) {
1501
- S(t.message);
1597
+ v(t.message);
1502
1598
  }
1503
1599
  });
1504
1600
  try {
1505
- await G.start();
1601
+ await tt.start();
1506
1602
  } catch (t) {
1507
- s.stop.hidden = !0, ot(), s.dialog.hidden = !1, S(t.message);
1603
+ s.stop.hidden = !0, ut(), s.dialog.hidden = !1, v(t.message);
1508
1604
  }
1509
1605
  }
1510
- function _() {
1511
- if (s.shot = null, !F()) {
1512
- s.canvas.style.removeProperty("--nf-shot-aspect"), s.canvas.style.removeProperty("aspect-ratio"), s.canvas.innerHTML = $ ? `<video class="nf-recording-preview" controls src="${URL.createObjectURL($)}"></video>` : "", lt();
1606
+ function q() {
1607
+ if (s.shot = null, !j()) {
1608
+ s.canvas.style.removeProperty("--nf-shot-aspect"), s.canvas.style.removeProperty("aspect-ratio"), s.canvas.innerHTML = k ? `<video class="nf-recording-preview" controls src="${URL.createObjectURL(k)}"></video>` : "", ht();
1513
1609
  return;
1514
1610
  }
1515
1611
  s.canvas.innerHTML = `<div class="nf-shot"><img alt="Screenshot" src="${T}" draggable="false"></div>`, s.shot = s.canvas.querySelector(".nf-shot");
1516
1612
  const t = s.shot.querySelector("img");
1517
1613
  t.draggable = !1, t.addEventListener("dragstart", (n) => n.preventDefault());
1518
1614
  const e = () => {
1519
- xr(t), C();
1615
+ _r(t), C();
1520
1616
  };
1521
- t.addEventListener("load", e), t.complete && t.naturalWidth && e(), lt();
1617
+ t.addEventListener("load", e), t.complete && t.naturalWidth && e(), ht();
1522
1618
  }
1523
- function xr(t) {
1524
- const e = t.naturalWidth || k.w, n = t.naturalHeight || k.h;
1525
- if (e && n && (k = { w: e, h: n }, s.canvas.style.setProperty("--nf-shot-aspect", String(e / n)), s.canvas.style.aspectRatio = `${e} / ${n}`), !s.shot || !k.w || !k.h)
1619
+ function _r(t) {
1620
+ const e = t.naturalWidth || P.w, n = t.naturalHeight || P.h;
1621
+ if (e && n && (P = { w: e, h: n }, s.canvas.style.setProperty("--nf-shot-aspect", String(e / n)), s.canvas.style.aspectRatio = `${e} / ${n}`), !s.shot || !P.w || !P.h)
1526
1622
  return;
1527
- const r = m.crop(), a = k.w / k.h, i = r.w / r.h * a, o = Math.min(1, i / a), c = Math.min(1, a / i);
1623
+ const r = y.crop(), i = P.w / P.h, a = r.w / r.h * i, o = Math.min(1, a / i), c = Math.min(1, i / a);
1528
1624
  s.shot.style.left = `${(1 - o) / 2 * 100}%`, s.shot.style.top = `${(1 - c) / 2 * 100}%`, s.shot.style.width = `${o * 100}%`, s.shot.style.height = `${c * 100}%`, t.style.width = `${100 / r.w}%`, t.style.height = `${100 / r.h}%`, t.style.left = `${-r.x / r.w * 100}%`, t.style.top = `${-r.y / r.h * 100}%`;
1529
1625
  }
1530
- function Er(t) {
1626
+ function Vr(t) {
1531
1627
  return t.type === "arrow" ? {
1532
1628
  id: "preview",
1533
1629
  type: "arrow",
@@ -1542,94 +1638,94 @@ function Er(t) {
1542
1638
  id: "preview",
1543
1639
  type: t.type,
1544
1640
  number: "",
1545
- ...ft(t.start, t.current)
1641
+ ...gt(t.start, t.current)
1546
1642
  };
1547
1643
  }
1548
1644
  function C() {
1549
- if ((s.shot || s.canvas).querySelectorAll(".nf-sticker, .nf-crop").forEach((i) => i.remove()), !F() || !s.shot) {
1550
- lt();
1645
+ if ((s.shot || s.canvas).querySelectorAll(".nf-sticker, .nf-crop").forEach((a) => a.remove()), !j() || !s.shot) {
1646
+ ht();
1551
1647
  return;
1552
1648
  }
1553
- const e = m.crop(), n = Z(), r = kt(n.clientWidth || 400);
1649
+ const e = y.crop(), n = rt(), r = Bt(n.clientWidth || 400);
1554
1650
  if (s.shot.style.setProperty("--nf-anno-stroke", `${r.stroke}px`), s.shot.style.setProperty("--nf-anno-badge", `${r.badgeRadius * 2}px`), s.shot.style.setProperty("--nf-anno-badge-font", `${r.fontSize}px`), s.shot.style.setProperty("--nf-anno-handle", `${Math.max(8, r.stroke * 2.5)}px`), (b == null ? void 0 : b.kind) === "crop") {
1555
- const i = document.createElement("div");
1556
- i.className = "nf-crop", re(i, ft(b.start, b.current), { x: 0, y: 0, w: 1, h: 1 }), s.shot.appendChild(i);
1651
+ const a = document.createElement("div");
1652
+ a.className = "nf-crop", ce(a, gt(b.start, b.current), { x: 0, y: 0, w: 1, h: 1 }), s.shot.appendChild(a);
1557
1653
  }
1558
- const a = m.list().slice();
1559
- if ((b == null ? void 0 : b.kind) === "sticker" && a.push(Er(b)), a.forEach((i) => {
1560
- const o = i.id === "preview", c = !o && i.id === M, l = document.createElement("div");
1561
- if (l.className = `nf-sticker nf-${i.type}`, l.dataset.id = i.id, c && (l.dataset.selected = "true"), o && (l.dataset.preview = "true"), i.type === "arrow" ? Cr(l, i, e, c, r) : (re(l, i, e), c && ["nw", "ne", "sw", "se"].forEach((u) => Rt(l, u))), !o && i.number) {
1654
+ const i = y.list().slice();
1655
+ if ((b == null ? void 0 : b.kind) === "sticker" && i.push(Vr(b)), i.forEach((a) => {
1656
+ const o = a.id === "preview", c = !o && a.id === A, l = document.createElement("div");
1657
+ if (l.className = `nf-sticker nf-${a.type}`, l.dataset.id = a.id, c && (l.dataset.selected = "true"), o && (l.dataset.preview = "true"), a.type === "arrow" ? Wr(l, a, e, c, r) : (ce(l, a, e), c && ["nw", "ne", "sw", "se"].forEach((u) => It(l, u))), !o && a.number) {
1562
1658
  const u = document.createElement("span");
1563
- u.className = "nf-badge", u.textContent = String(i.number), l.appendChild(u);
1659
+ u.className = "nf-badge", u.textContent = String(a.number), l.appendChild(u);
1564
1660
  }
1565
1661
  s.shot.appendChild(l);
1566
- }), s.canvas.querySelectorAll(":scope > .nf-recording-preview").forEach((i) => i.remove()), $) {
1567
- const i = document.createElement("video");
1568
- i.className = "nf-recording-preview", i.controls = !0, i.src = URL.createObjectURL($), i.style.position = "absolute", i.style.right = "8px", i.style.bottom = "8px", i.style.width = "160px", s.canvas.appendChild(i);
1662
+ }), s.canvas.querySelectorAll(":scope > .nf-recording-preview").forEach((a) => a.remove()), k) {
1663
+ const a = document.createElement("video");
1664
+ a.className = "nf-recording-preview", a.controls = !0, a.src = URL.createObjectURL(k), a.style.position = "absolute", a.style.right = "8px", a.style.bottom = "8px", a.style.width = "160px", s.canvas.appendChild(a);
1569
1665
  }
1570
- lt();
1666
+ ht();
1571
1667
  }
1572
- function Cr(t, e, n, r, a = kt(400)) {
1573
- const i = Z(), o = i.clientWidth, c = i.clientHeight, l = (e.x - n.x) / n.w * o, u = (e.y - n.y) / n.h * c, f = ((e.x2 ?? e.x + e.w) - n.x) / n.w * o, p = ((e.y2 ?? e.y) - n.y) / n.h * c, y = Math.max(18, a.arrowHead + a.stroke * 2), v = Math.min(l, f) - y, A = Math.min(u, p) - y, I = Math.max(2, Math.abs(f - l)) + y * 2, Y = Math.max(2, Math.abs(p - u)) + y * 2, V = l - v, W = u - A, ht = f - v, pt = p - A, O = ge(V, W, ht, pt, a), z = document.createElementNS("http://www.w3.org/2000/svg", "svg");
1574
- t.style.left = `${v}px`, t.style.top = `${A}px`, t.style.width = `${I}px`, t.style.height = `${Y}px`, z.setAttribute("class", "nf-arrow-svg"), z.setAttribute("viewBox", `0 0 ${I} ${Y}`), z.setAttribute("width", String(I)), z.setAttribute("height", String(Y)), z.innerHTML = `
1575
- <line class="nf-arrow-hit" x1="${V}" y1="${W}" x2="${ht}" y2="${pt}" />
1576
- <line class="nf-arrow-shaft" x1="${V}" y1="${W}" x2="${O.shaftEnd.x}" y2="${O.shaftEnd.y}" />
1577
- <polygon class="nf-arrow-head" points="${O.tipX},${O.tipY} ${O.left.x},${O.left.y} ${O.right.x},${O.right.y}" />
1578
- `, t.appendChild(z), r && (Rt(t, "start", { left: V - 5, top: W - 5 }), Rt(t, "end", { left: ht - 5, top: pt - 5 }));
1668
+ function Wr(t, e, n, r, i = Bt(400)) {
1669
+ const a = rt(), o = a.clientWidth, c = a.clientHeight, l = (e.x - n.x) / n.w * o, u = (e.y - n.y) / n.h * c, f = ((e.x2 ?? e.x + e.w) - n.x) / n.w * o, m = ((e.y2 ?? e.y) - n.y) / n.h * c, g = Math.max(18, i.arrowHead + i.stroke * 2), S = Math.min(l, f) - g, L = Math.min(u, m) - g, H = Math.max(2, Math.abs(f - l)) + g * 2, Z = Math.max(2, Math.abs(m - u)) + g * 2, K = l - S, X = u - L, wt = f - S, bt = m - L, D = Ce(K, X, wt, bt, i), Y = document.createElementNS("http://www.w3.org/2000/svg", "svg");
1670
+ t.style.left = `${S}px`, t.style.top = `${L}px`, t.style.width = `${H}px`, t.style.height = `${Z}px`, Y.setAttribute("class", "nf-arrow-svg"), Y.setAttribute("viewBox", `0 0 ${H} ${Z}`), Y.setAttribute("width", String(H)), Y.setAttribute("height", String(Z)), Y.innerHTML = `
1671
+ <line class="nf-arrow-hit" x1="${K}" y1="${X}" x2="${wt}" y2="${bt}" />
1672
+ <line class="nf-arrow-shaft" x1="${K}" y1="${X}" x2="${D.shaftEnd.x}" y2="${D.shaftEnd.y}" />
1673
+ <polygon class="nf-arrow-head" points="${D.tipX},${D.tipY} ${D.left.x},${D.left.y} ${D.right.x},${D.right.y}" />
1674
+ `, t.appendChild(Y), r && (It(t, "start", { left: K - 5, top: X - 5 }), It(t, "end", { left: wt - 5, top: bt - 5 }));
1579
1675
  }
1580
- function Rt(t, e, n) {
1676
+ function It(t, e, n) {
1581
1677
  const r = document.createElement("span");
1582
1678
  r.className = "nf-handle", r.dataset.dir = e, n && (r.style.left = `${n.left}px`, r.style.top = `${n.top}px`), t.appendChild(r);
1583
1679
  }
1584
- function re(t, e, n) {
1680
+ function ce(t, e, n) {
1585
1681
  t.style.left = `${(e.x - n.x) / n.w * 100}%`, t.style.top = `${(e.y - n.y) / n.h * 100}%`, t.style.width = `${e.w / n.w * 100}%`, t.style.height = `${e.h / n.h * 100}%`;
1586
1682
  }
1587
- function Mr() {
1683
+ function De() {
1588
1684
  try {
1589
- return String(localStorage.getItem(ve) || "").trim();
1685
+ return String(localStorage.getItem(Re) || "").trim();
1590
1686
  } catch {
1591
1687
  return "";
1592
1688
  }
1593
1689
  }
1594
- function Ar(t) {
1690
+ function zr(t) {
1595
1691
  const e = String(t || "").trim();
1596
- if (!(!e || e === At))
1692
+ if (!(!e || e === Tt))
1597
1693
  try {
1598
- localStorage.setItem(ve, e);
1694
+ localStorage.setItem(Re, e);
1599
1695
  } catch {
1600
1696
  }
1601
1697
  }
1602
- function $e() {
1603
- return !!(String(R.userId || "").trim() || String(R.email || "").trim() || String(R.displayName || "").trim());
1698
+ function Be() {
1699
+ return !!(String($.userId || "").trim() || String($.email || "").trim() || String($.displayName || "").trim());
1604
1700
  }
1605
- function Lr() {
1701
+ function Fe() {
1606
1702
  return String(
1607
- R.displayName || R.email || R.userId || ""
1703
+ $.displayName || $.email || $.userId || ""
1608
1704
  ).trim();
1609
1705
  }
1610
- function Rr() {
1706
+ function qr() {
1611
1707
  var e;
1612
- if ($e())
1613
- return Lr() || At;
1708
+ if (Be())
1709
+ return Fe() || Tt;
1614
1710
  const t = String(((e = s.author) == null ? void 0 : e.value) || "").trim();
1615
- return t ? (Ar(t), t) : At;
1711
+ return t ? (zr(t), t) : Tt;
1616
1712
  }
1617
- function Te() {
1713
+ function Ue() {
1618
1714
  if (!s.author)
1619
1715
  return;
1620
- const t = $e();
1716
+ const t = Be();
1621
1717
  if (s.author.hidden = t, t) {
1622
1718
  s.author.value = "";
1623
1719
  return;
1624
1720
  }
1625
- s.author.value = Mr();
1721
+ s.author.value = De();
1626
1722
  }
1627
- function Pe(t, e = Se) {
1723
+ function Ne(t, e = Le) {
1628
1724
  const n = Number(t);
1629
- return Number.isFinite(n) ? Math.min(sr, Math.max(0, Math.floor(n))) : e;
1725
+ return Number.isFinite(n) ? Math.min(Lr, Math.max(0, Math.floor(n))) : e;
1630
1726
  }
1631
- function ke(t = {}) {
1632
- Wn(t);
1727
+ function je(t = {}) {
1728
+ nr(t);
1633
1729
  const e = Object.prototype.hasOwnProperty.call(t, "kinds");
1634
1730
  d = {
1635
1731
  ...d,
@@ -1639,104 +1735,195 @@ function ke(t = {}) {
1639
1735
  name: t.name == null ? d.name : String(t.name || ""),
1640
1736
  targets: t.targets === void 0 ? d.targets : t.targets,
1641
1737
  hideLauncher: t.hideLauncher == null ? d.hideLauncher : !!t.hideLauncher,
1642
- theme: xe(t.theme ?? d.theme),
1738
+ theme: $e(t.theme ?? d.theme),
1643
1739
  video: t.video == null ? d.video : !!t.video,
1644
- consoleLogLimit: t.consoleLogLimit == null ? d.consoleLogLimit : Pe(t.consoleLogLimit, d.consoleLogLimit),
1645
- kinds: e ? rr(t.kinds) : d.kinds,
1740
+ consoleLogLimit: t.consoleLogLimit == null ? d.consoleLogLimit : Ne(t.consoleLogLimit, d.consoleLogLimit),
1741
+ kinds: e ? Er(t.kinds) : d.kinds,
1646
1742
  capture: t.capture === void 0 ? d.capture : t.capture,
1647
1743
  onBeforeCapture: t.onBeforeCapture === void 0 ? d.onBeforeCapture : t.onBeforeCapture
1648
1744
  };
1649
1745
  }
1650
- function Ft(t = {}) {
1651
- return ke(t), h && Q(), Ut;
1746
+ function Vt(t = {}) {
1747
+ return je(t), h && nt(), Wt;
1652
1748
  }
1653
- function $r(t = {}) {
1654
- return ke(t), Ot(), Q(), Ut;
1749
+ function Kr(t = {}) {
1750
+ return je(t), Ut(), nt(), Wt;
1655
1751
  }
1656
- function Tr(t) {
1657
- return Ft({ theme: t });
1752
+ function Xr(t) {
1753
+ return Vt({ theme: t });
1658
1754
  }
1659
- function Pr(t) {
1755
+ function Yr(t) {
1660
1756
  const e = !!t;
1661
- return !e && h && s.dialog && !s.dialog.hidden && et(), Ft({ hideLauncher: !e });
1757
+ return !e && h && s.dialog && !s.dialog.hidden && at(), Vt({ hideLauncher: !e });
1758
+ }
1759
+ function Gr() {
1760
+ const t = Fe() || De() || void 0, e = tr({
1761
+ ...$,
1762
+ displayName: $.displayName || t
1763
+ });
1764
+ N = gr(e), O = wr(
1765
+ Ae.snapshot().slice(-Ne(d.consoleLogLimit))
1766
+ ), _ = !1;
1662
1767
  }
1663
- async function Ie() {
1664
- Ot(), Oe(), Q(), s.launcher.hidden = !0, m = Pt(), k = { w: 0, h: 0 }, $ = null, T = "", X = "", M = null, b = null, w = null, j = dt(d.kinds), Bt(j), J(null), Dt(!1), s.text.value = "", Te(), S("");
1768
+ function pt(t) {
1769
+ _ = !!t, s.privacyPanel && (s.privacyPanel.hidden = !_), s.privacyChange && (s.privacyChange.setAttribute("aria-expanded", _ ? "true" : "false"), s.privacyChange.dataset.active = String(_)), _ && We();
1770
+ }
1771
+ function _e() {
1772
+ if (!s.privacy || !s.privacyText || !s.privacyChange)
1773
+ return;
1774
+ const t = vr({
1775
+ diagnostics: N,
1776
+ logs: O
1777
+ });
1778
+ s.privacyText.textContent = t, s.privacyText.hidden = !t;
1779
+ const e = N.length === 0 && O.length === 0;
1780
+ s.privacySummary && (s.privacySummary.hidden = e), s.privacy.hidden = e, s.privacyChange.hidden = !1;
1781
+ }
1782
+ function Ve(t, e, n) {
1783
+ return `<label class="nf-privacy-toggle">
1784
+ <span class="nf-privacy-toggle-label">Redact</span>
1785
+ <input type="checkbox" ${t ? "checked" : ""} ${e ? 'data-indeterminate="true"' : ""} aria-label="${I(n)}">
1786
+ </label>`;
1787
+ }
1788
+ function le(t, e, n, r, i) {
1789
+ return `<div class="nf-privacy-row" data-kind="${I(t)}" data-id="${I(e)}">
1790
+ <div class="nf-privacy-row-text">
1791
+ <div class="nf-privacy-row-title">${I(n)}</div>
1792
+ <div class="nf-privacy-row-detail">${I(r)}</div>
1793
+ </div>
1794
+ ${Ve(i, !1, `Redact ${n}`)}
1795
+ </div>`;
1796
+ }
1797
+ function ue(t, e, n, r) {
1798
+ if (!n.length)
1799
+ return "";
1800
+ const i = br(n);
1801
+ return `<section class="nf-privacy-section" data-section="${I(t)}">
1802
+ <div class="nf-privacy-section-head">
1803
+ <h3 class="nf-privacy-section-title">${I(e)}</h3>
1804
+ ${Ve(i.checked, i.indeterminate, `Redact all ${e.toLowerCase()}`)}
1805
+ </div>
1806
+ <div class="nf-privacy-rows">${r}</div>
1807
+ </section>`;
1808
+ }
1809
+ function We() {
1810
+ if (!s.privacyScroll)
1811
+ return;
1812
+ const t = N.map((n) => le(
1813
+ "diagnostic",
1814
+ n.key,
1815
+ n.label,
1816
+ Sr(n.value),
1817
+ n.redacted
1818
+ )).join(""), e = O.map((n) => le(
1819
+ "log",
1820
+ n.id,
1821
+ n.level,
1822
+ n.text,
1823
+ n.redacted
1824
+ )).join("");
1825
+ s.privacyScroll.innerHTML = [
1826
+ ue("diagnostics", "Diagnostics", N, t),
1827
+ O.length ? ue("logs", "Logs", O, e) : ""
1828
+ ].join(""), s.privacyScroll.querySelectorAll('input[data-indeterminate="true"]').forEach((n) => {
1829
+ n.indeterminate = !0, n.removeAttribute("data-indeterminate");
1830
+ }), _e();
1831
+ }
1832
+ function Jr(t) {
1833
+ const e = t.target;
1834
+ if (!(e instanceof HTMLInputElement) || e.type !== "checkbox")
1835
+ return;
1836
+ const n = e.closest("[data-section]"), r = e.closest(".nf-privacy-row"), i = e.checked;
1837
+ if (r) {
1838
+ const a = r.dataset.kind, o = r.dataset.id;
1839
+ if (a === "diagnostic") {
1840
+ const c = N.find((l) => l.key === o);
1841
+ c && (c.redacted = i);
1842
+ } else if (a === "log") {
1843
+ const c = O.find((l) => l.id === o);
1844
+ c && (c.redacted = i);
1845
+ }
1846
+ } else if (n) {
1847
+ const a = n.dataset.section;
1848
+ a === "diagnostics" ? re(N, i) : a === "logs" && re(O, i);
1849
+ } else
1850
+ return;
1851
+ We();
1852
+ }
1853
+ async function ze() {
1854
+ Ut(), qe(), nt(), s.launcher.hidden = !0, y = Dt(), P = { w: 0, h: 0 }, k = null, T = "", Q = "", A = null, b = null, w = null, z = yt(d.kinds), Nt(z), et(null), _t(!1), s.text.value = "", Ue(), v(""), Gr();
1665
1855
  try {
1666
- Re(await me(Le())), S("");
1856
+ He(await xe(Oe())), v("");
1667
1857
  } catch (t) {
1668
- T = "", S((t == null ? void 0 : t.message) || "Screenshot failed; you can still send text.");
1858
+ T = "", v((t == null ? void 0 : t.message) || "Screenshot failed; you can still send text.");
1669
1859
  }
1670
- tt(), s.dialog.hidden = !1, _(), s.text.focus();
1860
+ it(), pt(!1), _e(), s.dialog.hidden = !1, q(), s.text.focus();
1671
1861
  }
1672
- function et() {
1673
- h && (U == null || U.stop(), Dt(!1), Me(), b = null, w = null, Ht(!1), Oe(), s.dialog.hidden = !0, s.stop.hidden = !0, ot());
1862
+ function at() {
1863
+ h && (V == null || V.stop(), _t(!1), Pe(), b = null, w = null, jt(!1), qe(), pt(!1), s.dialog.hidden = !0, s.stop.hidden = !0, ut());
1674
1864
  }
1675
- function kr() {
1865
+ function Qr() {
1676
1866
  const t = s.dialog, e = s.panel, n = s.panelBody, r = s.successMsg;
1677
1867
  if (!t || !e || !n || !r)
1678
1868
  return Promise.resolve();
1679
- It = !0, S("");
1680
- const a = typeof matchMedia == "function" && matchMedia("(prefers-reduced-motion: reduce)").matches, i = e.getBoundingClientRect();
1681
- if (n.hidden = !0, r.hidden = !1, t.classList.add("nf-success"), t.style.opacity = "1", a)
1869
+ Ft = !0, v("");
1870
+ const i = typeof matchMedia == "function" && matchMedia("(prefers-reduced-motion: reduce)").matches, a = e.getBoundingClientRect();
1871
+ if (n.hidden = !0, r.hidden = !1, t.classList.add("nf-success"), t.style.opacity = "1", i)
1682
1872
  return new Promise((u) => {
1683
1873
  window.setTimeout(() => u(), 1e3);
1684
1874
  });
1685
- const o = e.getBoundingClientRect(), c = o.width > 0 ? i.width / o.width : 1, l = o.height > 0 ? i.height / o.height : 1;
1875
+ const o = e.getBoundingClientRect(), c = o.width > 0 ? a.width / o.width : 1, l = o.height > 0 ? a.height / o.height : 1;
1686
1876
  return e.style.transformOrigin = "center center", e.style.transition = "none", e.style.transform = `scale(${c}, ${l})`, e.getBoundingClientRect(), new Promise((u) => {
1687
1877
  let f = !1;
1688
- const p = () => {
1689
- f || (f = !0, e.removeEventListener("transitionend", y), window.setTimeout(() => {
1878
+ const m = () => {
1879
+ f || (f = !0, e.removeEventListener("transitionend", g), window.setTimeout(() => {
1690
1880
  t.style.transition = "opacity 0.28s ease", t.style.opacity = "0", window.setTimeout(() => u(), 280);
1691
1881
  }, 1e3));
1692
- }, y = (v) => {
1693
- v.target !== e || v.propertyName !== "transform" || p();
1882
+ }, g = (S) => {
1883
+ S.target !== e || S.propertyName !== "transform" || m();
1694
1884
  };
1695
- e.addEventListener("transitionend", y), requestAnimationFrame(() => {
1885
+ e.addEventListener("transitionend", g), requestAnimationFrame(() => {
1696
1886
  e.style.transition = "transform 0.48s cubic-bezier(0.22, 1, 0.36, 1)", e.style.transform = "scale(1)";
1697
- }), window.setTimeout(p, 700);
1887
+ }), window.setTimeout(m, 700);
1698
1888
  });
1699
1889
  }
1700
- function Oe() {
1701
- It = !1, s.dialog && (s.dialog.classList.remove("nf-success"), s.dialog.style.opacity = "", s.dialog.style.transition = "", s.panel && (s.panel.style.transform = "", s.panel.style.transition = "", s.panel.style.transformOrigin = ""), s.panelBody && (s.panelBody.hidden = !1), s.successMsg && (s.successMsg.hidden = !0));
1890
+ function qe() {
1891
+ Ft = !1, s.dialog && (s.dialog.classList.remove("nf-success"), s.dialog.style.opacity = "", s.dialog.style.transition = "", s.panel && (s.panel.style.transform = "", s.panel.style.transition = "", s.panel.style.transformOrigin = ""), s.panelBody && (s.panelBody.hidden = !1), s.successMsg && (s.successMsg.hidden = !0));
1702
1892
  }
1703
- function Ir(t = {}) {
1704
- R = { ...R, ...Vn(t) }, Te();
1893
+ function Zr(t = {}) {
1894
+ $ = { ...$, ...er(t) }, Ue();
1705
1895
  }
1706
- async function Be() {
1707
- if (Ot(), bt)
1896
+ async function Ke() {
1897
+ if (Ut(), Ct)
1708
1898
  return null;
1709
1899
  const t = s.text.value.trim();
1710
- if (!t && !F() && !$)
1711
- return S("Add a note, screenshot, or video first."), null;
1900
+ if (!t && !j() && !k)
1901
+ return v("Add a note, screenshot, or video first."), null;
1712
1902
  if (!d.endpoint || !d.projectKey)
1713
- return S("Notefully is missing endpoint or projectKey."), null;
1714
- bt = !0, ie(!0), S("Submitting…", !0);
1903
+ return v("Notefully is missing endpoint or projectKey."), null;
1904
+ Ct = !0, de(!0), v("Submitting…", !0);
1715
1905
  try {
1716
- const e = Rr(), n = new FormData();
1717
- if (n.append("message", t), n.append("kind", j), n.append("version", d.version || "0.0.0"), n.append("author", e), d.name && n.append("name", d.name), n.append("context", JSON.stringify({
1718
- ..._n({
1719
- ...R,
1720
- displayName: R.displayName || e
1721
- }),
1906
+ const e = qr(), n = new FormData();
1907
+ if (n.append("message", t), n.append("kind", z), n.append("version", d.version || "0.0.0"), n.append("author", e), d.name && n.append("name", d.name), n.append("context", JSON.stringify(xr({
1722
1908
  author: e,
1723
- console: be.snapshot().slice(-Pe(d.consoleLogLimit))
1724
- })), n.append("annotations", JSON.stringify(m.list())), n.append("crop", JSON.stringify(m.crop())), Array.isArray(d.targets) && n.append("targets", JSON.stringify(d.targets)), F()) {
1725
- const i = await cr(T);
1726
- if (n.append("screenshot", i, "screenshot.png"), m.list().length || m.isCropped()) {
1727
- const o = await nr(
1909
+ diagnostics: N,
1910
+ logs: O
1911
+ }))), n.append("annotations", JSON.stringify(y.list())), n.append("crop", JSON.stringify(y.crop())), Array.isArray(d.targets) && n.append("targets", JSON.stringify(d.targets)), j()) {
1912
+ const a = await Rr(T);
1913
+ if (n.append("screenshot", a, "screenshot.png"), y.list().length || y.isCropped()) {
1914
+ const o = await pr(
1728
1915
  T,
1729
- m.crop(),
1730
- m.list(),
1916
+ y.crop(),
1917
+ y.list(),
1731
1918
  {
1732
- mark: te("--nf-mark", "#fdd341"),
1733
- markText: te("--nf-mark-text", "#2a2140")
1919
+ mark: oe("--nf-mark", "#fdd341"),
1920
+ markText: oe("--nf-mark-text", "#2a2140")
1734
1921
  }
1735
1922
  );
1736
1923
  n.append("screenshotBaked", o, "screenshot.baked.png");
1737
1924
  }
1738
1925
  }
1739
- $ && n.append("recording", $, "recording.webm");
1926
+ k && n.append("recording", k, "recording.webm");
1740
1927
  const r = await fetch(`${d.endpoint}/v1/reports`, {
1741
1928
  method: "POST",
1742
1929
  headers: {
@@ -1744,36 +1931,36 @@ async function Be() {
1744
1931
  },
1745
1932
  body: n
1746
1933
  });
1747
- let a = null;
1934
+ let i = null;
1748
1935
  try {
1749
- a = await r.json();
1936
+ i = await r.json();
1750
1937
  } catch {
1751
- a = null;
1938
+ i = null;
1752
1939
  }
1753
1940
  if (!r.ok)
1754
- throw S((a == null ? void 0 : a.error) || "Submit failed."), new Error((a == null ? void 0 : a.error) || `Submit failed (${r.status})`);
1755
- return await kr(), et(), a;
1941
+ throw v((i == null ? void 0 : i.error) || "Submit failed."), new Error((i == null ? void 0 : i.error) || `Submit failed (${r.status})`);
1942
+ return await Qr(), at(), i;
1756
1943
  } finally {
1757
- bt = !1, ie(!1);
1944
+ Ct = !1, de(!1);
1758
1945
  }
1759
1946
  }
1760
- function ie(t) {
1947
+ function de(t) {
1761
1948
  s.submit && (s.submit.disabled = !!t, s.submit.setAttribute("aria-busy", t ? "true" : "false"));
1762
1949
  }
1763
- function Or() {
1764
- et(), h == null || h.remove(), h = null, s = {};
1950
+ function ti() {
1951
+ at(), h == null || h.remove(), h = null, s = {};
1765
1952
  }
1766
- const Ut = { init: $r, configure: Ft, setTheme: Tr, setVisible: Pr, open: Ie, close: et, identify: Ir, submit: Be, destroy: Or };
1767
- typeof window < "u" && (window.Notefully = Ut);
1953
+ const Wt = { init: Kr, configure: Vt, setTheme: Xr, setVisible: Yr, open: ze, close: at, identify: Zr, submit: Ke, destroy: ti };
1954
+ typeof window < "u" && (window.Notefully = Wt);
1768
1955
  export {
1769
- et as close,
1770
- Ft as configure,
1771
- Ut as default,
1772
- Or as destroy,
1773
- Ir as identify,
1774
- $r as init,
1775
- Ie as open,
1776
- Tr as setTheme,
1777
- Pr as setVisible,
1778
- Be as submit
1956
+ at as close,
1957
+ Vt as configure,
1958
+ Wt as default,
1959
+ ti as destroy,
1960
+ Zr as identify,
1961
+ Kr as init,
1962
+ ze as open,
1963
+ Xr as setTheme,
1964
+ Yr as setVisible,
1965
+ Ke as submit
1779
1966
  };