@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/README.md +2 -0
- package/dist/notefully.css +1 -1
- package/dist/notefully.iife.js +47 -20
- package/dist/notefully.js +916 -729
- package/package.json +1 -1
package/dist/notefully.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
function
|
|
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"),
|
|
9
|
-
return n.head.appendChild(r), n.body.appendChild(
|
|
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
|
|
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
|
|
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
|
|
26
|
-
function
|
|
27
|
-
return
|
|
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
|
|
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
|
|
34
|
-
const e =
|
|
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
|
|
38
|
-
const e =
|
|
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
|
|
42
|
-
const n = e.width ||
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
72
|
-
const r = "http://www.w3.org/2000/svg",
|
|
73
|
-
return
|
|
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
|
|
81
|
+
function nn(t) {
|
|
82
82
|
const e = t.getPropertyValue("content");
|
|
83
83
|
return `${t.cssText} content: '${e.replace(/'|"/g, "")}';`;
|
|
84
84
|
}
|
|
85
|
-
function
|
|
86
|
-
return
|
|
87
|
-
const r = t.getPropertyValue(n),
|
|
88
|
-
return `${n}: ${r}${
|
|
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
|
|
92
|
-
const
|
|
93
|
-
return document.createTextNode(`${
|
|
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
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
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 =
|
|
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(
|
|
106
|
+
c.appendChild(an(o, n, i, r)), e.appendChild(c);
|
|
107
107
|
}
|
|
108
|
-
function
|
|
109
|
-
|
|
108
|
+
function on(t, e, n) {
|
|
109
|
+
zt(t, e, ":before", n), zt(t, e, ":after", n);
|
|
110
110
|
}
|
|
111
|
-
const
|
|
112
|
-
woff:
|
|
113
|
-
woff2:
|
|
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:
|
|
118
|
-
jpeg:
|
|
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
|
|
124
|
+
function cn(t) {
|
|
125
125
|
const e = /\.([^./]*?)$/g.exec(t);
|
|
126
126
|
return e ? e[1] : "";
|
|
127
127
|
}
|
|
128
|
-
function
|
|
129
|
-
const e =
|
|
130
|
-
return
|
|
128
|
+
function Ot(t) {
|
|
129
|
+
const e = cn(t).toLowerCase();
|
|
130
|
+
return sn[e] || "";
|
|
131
131
|
}
|
|
132
|
-
function
|
|
132
|
+
function ln(t) {
|
|
133
133
|
return t.split(/,/)[1];
|
|
134
134
|
}
|
|
135
|
-
function
|
|
135
|
+
function At(t) {
|
|
136
136
|
return t.search(/^(data:)/) !== -1;
|
|
137
137
|
}
|
|
138
|
-
function
|
|
138
|
+
function un(t, e) {
|
|
139
139
|
return `data:${e};base64,${t}`;
|
|
140
140
|
}
|
|
141
|
-
async function
|
|
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
|
|
146
|
-
return new Promise((
|
|
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
|
-
|
|
150
|
+
a(n({ res: r, result: c.result }));
|
|
151
151
|
} catch (l) {
|
|
152
152
|
o(l);
|
|
153
153
|
}
|
|
154
|
-
}, c.readAsDataURL(
|
|
154
|
+
}, c.readAsDataURL(i);
|
|
155
155
|
});
|
|
156
156
|
}
|
|
157
|
-
const
|
|
158
|
-
function
|
|
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
|
|
163
|
-
const r =
|
|
164
|
-
if (
|
|
165
|
-
return
|
|
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
|
|
167
|
+
let i;
|
|
168
168
|
try {
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
} catch (
|
|
172
|
-
|
|
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
|
-
|
|
174
|
+
a && (o = typeof a == "string" ? a : a.message), o && console.warn(o);
|
|
175
175
|
}
|
|
176
|
-
return
|
|
176
|
+
return vt[r] = i, i;
|
|
177
177
|
}
|
|
178
|
-
async function
|
|
178
|
+
async function fn(t) {
|
|
179
179
|
const e = t.toDataURL();
|
|
180
|
-
return e === "data:," ? t.cloneNode(!1) :
|
|
180
|
+
return e === "data:," ? t.cloneNode(!1) : ct(e);
|
|
181
181
|
}
|
|
182
|
-
async function
|
|
182
|
+
async function hn(t, e) {
|
|
183
183
|
if (t.currentSrc) {
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
const c =
|
|
187
|
-
return
|
|
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 =
|
|
190
|
-
return
|
|
189
|
+
const n = t.poster, r = Ot(n), i = await Ht(n, r, e);
|
|
190
|
+
return ct(i);
|
|
191
191
|
}
|
|
192
|
-
async function
|
|
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
|
|
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
|
|
202
|
-
return x(t, HTMLCanvasElement) ?
|
|
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
|
|
205
|
-
async function
|
|
206
|
-
var r,
|
|
207
|
-
if (
|
|
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
|
|
210
|
-
return
|
|
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
|
|
214
|
+
function wn(t, e, n) {
|
|
215
215
|
const r = e.style;
|
|
216
216
|
if (!r)
|
|
217
217
|
return;
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
let o =
|
|
221
|
-
|
|
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
|
|
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
|
|
227
|
+
function vn(t, e) {
|
|
228
228
|
if (x(t, HTMLSelectElement)) {
|
|
229
|
-
const r = Array.from(e.children).find((
|
|
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
|
|
234
|
-
return x(e, Element) && (
|
|
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
|
|
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
|
|
242
|
-
const c = n[
|
|
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
|
|
245
|
+
!l && u && !r[c] && (r[c] = await mt(u, e, !0));
|
|
246
246
|
}
|
|
247
247
|
}
|
|
248
|
-
const
|
|
249
|
-
if (
|
|
250
|
-
const
|
|
251
|
-
o.setAttribute("xmlns",
|
|
252
|
-
const c = document.createElementNS(
|
|
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 <
|
|
255
|
-
c.appendChild(
|
|
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
|
|
261
|
-
return !n && e.filter && !e.filter(t) ? null : Promise.resolve(t).then((r) =>
|
|
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
|
|
264
|
-
function
|
|
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
|
|
268
|
+
function An(t) {
|
|
269
269
|
const e = [];
|
|
270
|
-
return t.replace(
|
|
270
|
+
return t.replace(ye, (n, r, i) => (e.push(i), n)), e.filter((n) => !At(n));
|
|
271
271
|
}
|
|
272
|
-
async function
|
|
272
|
+
async function Ln(t, e, n, r, i) {
|
|
273
273
|
try {
|
|
274
|
-
const
|
|
274
|
+
const a = n ? Xe(e, n) : e, o = Ot(e);
|
|
275
275
|
let c;
|
|
276
|
-
return
|
|
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
|
|
282
|
-
return e ? t.replace(
|
|
281
|
+
function Rn(t, { preferredFontFormat: e }) {
|
|
282
|
+
return e ? t.replace(Cn, (n) => {
|
|
283
283
|
for (; ; ) {
|
|
284
|
-
const [r, ,
|
|
285
|
-
if (!
|
|
284
|
+
const [r, , i] = En.exec(n) || [];
|
|
285
|
+
if (!i)
|
|
286
286
|
return "";
|
|
287
|
-
if (
|
|
287
|
+
if (i === e)
|
|
288
288
|
return `src: ${r};`;
|
|
289
289
|
}
|
|
290
290
|
}) : t;
|
|
291
291
|
}
|
|
292
|
-
function
|
|
293
|
-
return t.search(
|
|
292
|
+
function ge(t) {
|
|
293
|
+
return t.search(ye) !== -1;
|
|
294
294
|
}
|
|
295
|
-
async function
|
|
296
|
-
if (!
|
|
295
|
+
async function we(t, e, n) {
|
|
296
|
+
if (!ge(t))
|
|
297
297
|
return t;
|
|
298
|
-
const r =
|
|
299
|
-
return
|
|
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
|
|
301
|
+
async function J(t, e, n) {
|
|
302
302
|
var r;
|
|
303
|
-
const
|
|
304
|
-
if (
|
|
305
|
-
const
|
|
306
|
-
return e.style.setProperty(t,
|
|
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
|
|
311
|
-
await
|
|
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
|
|
313
|
+
async function kn(t, e) {
|
|
314
314
|
const n = x(t, HTMLImageElement);
|
|
315
|
-
if (!(n && !
|
|
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,
|
|
318
|
-
await new Promise((
|
|
319
|
-
t.onload =
|
|
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
|
-
|
|
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 =
|
|
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
|
|
331
|
-
const r =
|
|
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
|
|
335
|
-
x(t, Element) && (await
|
|
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
|
|
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((
|
|
342
|
-
n[
|
|
341
|
+
return r != null && Object.keys(r).forEach((i) => {
|
|
342
|
+
n[i] = r[i];
|
|
343
343
|
}), t;
|
|
344
344
|
}
|
|
345
|
-
const
|
|
346
|
-
async function
|
|
347
|
-
let e =
|
|
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 },
|
|
351
|
+
return e = { url: t, cssText: r }, Xt[t] = e, e;
|
|
352
352
|
}
|
|
353
|
-
async function
|
|
353
|
+
async function Gt(t, e) {
|
|
354
354
|
let n = t.cssText;
|
|
355
|
-
const r = /url\(["']?([^"')]+)["']?\)/g,
|
|
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),
|
|
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(
|
|
359
|
+
return Promise.all(a).then(() => n);
|
|
360
360
|
}
|
|
361
|
-
function
|
|
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
|
|
366
|
+
const i = new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})", "gi");
|
|
367
367
|
for (; ; ) {
|
|
368
|
-
const l =
|
|
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(
|
|
374
|
-
const
|
|
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 =
|
|
376
|
+
let l = a.exec(r);
|
|
377
377
|
if (l === null) {
|
|
378
378
|
if (l = c.exec(r), l === null)
|
|
379
379
|
break;
|
|
380
|
-
|
|
380
|
+
a.lastIndex = c.lastIndex;
|
|
381
381
|
} else
|
|
382
|
-
c.lastIndex =
|
|
382
|
+
c.lastIndex = a.lastIndex;
|
|
383
383
|
e.push(l[0]);
|
|
384
384
|
}
|
|
385
385
|
return e;
|
|
386
386
|
}
|
|
387
|
-
async function
|
|
387
|
+
async function In(t, e) {
|
|
388
388
|
const n = [], r = [];
|
|
389
|
-
return t.forEach((
|
|
390
|
-
if ("cssRules" in
|
|
389
|
+
return t.forEach((i) => {
|
|
390
|
+
if ("cssRules" in i)
|
|
391
391
|
try {
|
|
392
|
-
|
|
393
|
-
if (
|
|
392
|
+
F(i.cssRules || []).forEach((a, o) => {
|
|
393
|
+
if (a.type === CSSRule.IMPORT_RULE) {
|
|
394
394
|
let c = o + 1;
|
|
395
|
-
const l =
|
|
395
|
+
const l = a.href, u = Yt(l).then((f) => Gt(f, e)).then((f) => Jt(f).forEach((m) => {
|
|
396
396
|
try {
|
|
397
|
-
|
|
398
|
-
} catch (
|
|
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:
|
|
401
|
-
error:
|
|
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 (
|
|
410
|
+
} catch (a) {
|
|
411
411
|
const o = t.find((c) => c.href == null) || document.styleSheets[0];
|
|
412
|
-
|
|
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",
|
|
416
|
+
})), console.error("Error inlining remote css file", a);
|
|
417
417
|
}
|
|
418
|
-
}), Promise.all(r).then(() => (t.forEach((
|
|
419
|
-
if ("cssRules" in
|
|
418
|
+
}), Promise.all(r).then(() => (t.forEach((i) => {
|
|
419
|
+
if ("cssRules" in i)
|
|
420
420
|
try {
|
|
421
|
-
|
|
422
|
-
n.push(
|
|
421
|
+
F(i.cssRules || []).forEach((a) => {
|
|
422
|
+
n.push(a);
|
|
423
423
|
});
|
|
424
|
-
} catch (
|
|
425
|
-
console.error(`Error while reading CSS rules from ${
|
|
424
|
+
} catch (a) {
|
|
425
|
+
console.error(`Error while reading CSS rules from ${i.href}`, a);
|
|
426
426
|
}
|
|
427
427
|
}), n));
|
|
428
428
|
}
|
|
429
|
-
function
|
|
430
|
-
return t.filter((e) => e.type === CSSRule.FONT_FACE_RULE).filter((e) =>
|
|
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
|
|
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 =
|
|
436
|
-
return
|
|
435
|
+
const n = F(t.ownerDocument.styleSheets), r = await In(n, e);
|
|
436
|
+
return On(r);
|
|
437
437
|
}
|
|
438
|
-
function
|
|
438
|
+
function ve(t) {
|
|
439
439
|
return t.trim().replace(/["']/g, "");
|
|
440
440
|
}
|
|
441
|
-
function
|
|
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((
|
|
445
|
-
e.add(
|
|
446
|
-
}), Array.from(r.children).forEach((
|
|
447
|
-
|
|
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
|
|
453
|
-
const n = await
|
|
454
|
-
return (await Promise.all(n.filter((
|
|
455
|
-
const o =
|
|
456
|
-
return
|
|
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
|
|
461
|
-
const n = e.fontEmbedCSS != null ? e.fontEmbedCSS : e.skipFonts ? null : await
|
|
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"),
|
|
464
|
-
r.appendChild(
|
|
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
|
|
468
|
-
const { width: n, height: r } =
|
|
469
|
-
return await
|
|
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
|
|
472
|
-
const { width: n, height: r } =
|
|
473
|
-
return o.width = u * l, o.height = f * l, e.skipAutoScale ||
|
|
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
|
|
476
|
-
return (await
|
|
475
|
+
async function Qt(t, e = {}) {
|
|
476
|
+
return (await Nn(t, e)).toDataURL();
|
|
477
477
|
}
|
|
478
|
-
const
|
|
479
|
-
function
|
|
480
|
-
return t instanceof Element && (t.hasAttribute(
|
|
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
|
|
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
|
|
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(),
|
|
510
|
-
|
|
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(
|
|
519
|
+
].join(";"), document.body.appendChild(i), t.push(i);
|
|
520
520
|
}), () => t.forEach((n) => n.remove());
|
|
521
521
|
}
|
|
522
|
-
function
|
|
523
|
-
const t = document.querySelector(`[${
|
|
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(
|
|
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
|
|
530
|
-
document.querySelectorAll(`[${
|
|
529
|
+
function qn() {
|
|
530
|
+
document.querySelectorAll(`[${lt}]`).forEach((t) => t.remove());
|
|
531
531
|
}
|
|
532
|
-
function
|
|
532
|
+
function Lt() {
|
|
533
533
|
return new Promise((t) => {
|
|
534
534
|
requestAnimationFrame(() => requestAnimationFrame(t));
|
|
535
535
|
});
|
|
536
536
|
}
|
|
537
|
-
function
|
|
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
|
|
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
|
|
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") ||
|
|
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
|
|
573
|
-
|
|
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
|
|
589
|
+
async function Yn(t) {
|
|
590
590
|
if (!t)
|
|
591
591
|
return null;
|
|
592
592
|
if (typeof t == "string")
|
|
593
|
-
return
|
|
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
|
|
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
|
|
603
|
-
return
|
|
602
|
+
const e = await Gn(t);
|
|
603
|
+
return U(e) ? e : null;
|
|
604
604
|
}
|
|
605
605
|
return null;
|
|
606
606
|
}
|
|
607
|
-
async function
|
|
607
|
+
async function Gn(t) {
|
|
608
608
|
if (typeof FileReader == "function")
|
|
609
|
-
return new Promise((r,
|
|
610
|
-
const
|
|
611
|
-
|
|
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
|
|
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
|
|
631
|
-
const r = n.videoWidth || 1,
|
|
632
|
-
|
|
633
|
-
const o =
|
|
634
|
-
if (!
|
|
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
|
|
642
|
-
const e = document.getElementById("notefully"), n = e ? e.style.display : "", r =
|
|
643
|
-
let
|
|
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 =
|
|
646
|
+
const o = Wn();
|
|
647
647
|
try {
|
|
648
|
-
if (typeof t.onBeforeCapture == "function" && await t.onBeforeCapture(), await
|
|
649
|
-
const
|
|
650
|
-
if (
|
|
651
|
-
return
|
|
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
|
-
|
|
654
|
-
const { width: c, height: l } =
|
|
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: (
|
|
659
|
+
filter: (m) => !Se(m),
|
|
660
660
|
// 404 / CORS images must not abort the whole capture.
|
|
661
|
-
imagePlaceholder:
|
|
661
|
+
imagePlaceholder: _n,
|
|
662
662
|
onImageErrorHandler: () => {
|
|
663
663
|
}
|
|
664
664
|
};
|
|
665
665
|
let f = "";
|
|
666
666
|
try {
|
|
667
|
-
f = await
|
|
667
|
+
f = await Qt(document.body, u);
|
|
668
668
|
} catch {
|
|
669
|
-
f = await
|
|
669
|
+
f = await Qt(document.body, { ...u, skipFonts: !0 });
|
|
670
670
|
}
|
|
671
|
-
if (!
|
|
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
|
-
|
|
676
|
+
a();
|
|
677
677
|
} catch {
|
|
678
678
|
}
|
|
679
|
-
o(),
|
|
679
|
+
o(), i(), r.remove(), qn(), e && (e.style.display = n);
|
|
680
680
|
}
|
|
681
681
|
}
|
|
682
|
-
function
|
|
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
|
|
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
|
|
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:
|
|
697
|
-
browser:
|
|
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
|
|
712
|
+
const Zt = /* @__PURE__ */ new Set(["userId", "email", "displayName"]), te = {
|
|
713
713
|
id: "userId",
|
|
714
714
|
username: "displayName",
|
|
715
715
|
name: "displayName"
|
|
716
|
-
},
|
|
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
|
-
]),
|
|
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
|
|
739
|
-
const n = e.warn ||
|
|
740
|
-
for (const o of
|
|
741
|
-
Object.prototype.hasOwnProperty.call(r, o) && (
|
|
742
|
-
for (const [o, c] of Object.entries(
|
|
743
|
-
Object.prototype.hasOwnProperty.call(r, o) && (Object.prototype.hasOwnProperty.call(
|
|
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
|
-
|
|
746
|
-
if (
|
|
747
|
-
const o =
|
|
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): ${
|
|
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
|
|
753
|
-
}
|
|
754
|
-
function
|
|
755
|
-
const n = e.warn ||
|
|
756
|
-
if (
|
|
757
|
-
for (const
|
|
758
|
-
if (
|
|
759
|
-
n(`Notefully.init: ignoring "${
|
|
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 "${
|
|
763
|
+
`Notefully.init: ignoring unknown key "${a}". Supported: ${[...ee].join(", ")}.`
|
|
764
764
|
);
|
|
765
765
|
}
|
|
766
766
|
}
|
|
767
|
-
function
|
|
767
|
+
function Ee(t) {
|
|
768
768
|
typeof console < "u" && typeof console.warn == "function" && console.warn(t);
|
|
769
769
|
}
|
|
770
|
-
const
|
|
771
|
-
function
|
|
770
|
+
const rr = 80;
|
|
771
|
+
function ir() {
|
|
772
772
|
const t = [], e = {};
|
|
773
773
|
let n = !1;
|
|
774
|
-
const r = (
|
|
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:
|
|
782
|
+
level: a,
|
|
783
783
|
text: c.slice(0, 2e3),
|
|
784
784
|
at: Date.now()
|
|
785
|
-
}), t.length >
|
|
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((
|
|
790
|
-
e[
|
|
791
|
-
r(
|
|
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", (
|
|
794
|
-
r("error", [
|
|
795
|
-
}), window.addEventListener("unhandledrejection", (
|
|
796
|
-
r("error", [
|
|
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
|
|
804
|
+
function ar(t) {
|
|
805
805
|
const e = window.SpeechRecognition || window.webkitSpeechRecognition;
|
|
806
806
|
let n = null, r = !1;
|
|
807
|
-
const
|
|
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 ? (
|
|
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:
|
|
829
|
+
stop: i,
|
|
830
830
|
isSupported: () => !!e,
|
|
831
831
|
isActive: () => r
|
|
832
832
|
};
|
|
833
833
|
}
|
|
834
|
-
const
|
|
835
|
-
function
|
|
836
|
-
let r = 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),
|
|
838
|
+
if (o && (clearTimeout(o), o = null), i && i.state !== "inactive")
|
|
839
839
|
try {
|
|
840
|
-
|
|
840
|
+
i.stop();
|
|
841
841
|
} catch {
|
|
842
842
|
}
|
|
843
843
|
r && (r.getTracks().forEach((f) => f.stop()), r = null);
|
|
844
844
|
}, l = () => {
|
|
845
|
-
if (
|
|
846
|
-
|
|
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,
|
|
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
|
-
}),
|
|
860
|
+
}), a = [], i = new MediaRecorder(r, {
|
|
861
861
|
mimeType: MediaRecorder.isTypeSupported("video/webm;codecs=vp9") ? "video/webm;codecs=vp9" : "video/webm"
|
|
862
|
-
}),
|
|
863
|
-
|
|
864
|
-
},
|
|
865
|
-
const
|
|
866
|
-
c(), e(
|
|
867
|
-
}, (
|
|
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
|
|
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
|
|
889
|
-
function
|
|
890
|
-
const t =
|
|
891
|
-
let e = [], n = { ...
|
|
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((
|
|
893
|
+
list: () => e.filter((a) => ur(a, n)),
|
|
894
894
|
all: () => e.slice(),
|
|
895
895
|
crop: () => ({ ...n }),
|
|
896
|
-
setCrop(
|
|
897
|
-
return n =
|
|
896
|
+
setCrop(a) {
|
|
897
|
+
return n = lr(a), n;
|
|
898
898
|
},
|
|
899
899
|
resetCrop() {
|
|
900
|
-
return 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(
|
|
905
|
+
add(a, o) {
|
|
906
906
|
const c = {
|
|
907
907
|
id: `s${r++}`,
|
|
908
|
-
type:
|
|
908
|
+
type: a,
|
|
909
909
|
number: t.alloc(),
|
|
910
910
|
x: 0.2,
|
|
911
911
|
y: 0.2,
|
|
912
|
-
w:
|
|
913
|
-
h:
|
|
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(
|
|
921
|
-
const c = e.find((l) => l.id ===
|
|
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(
|
|
925
|
-
const o = e.findIndex((l) => l.id ===
|
|
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 = { ...
|
|
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
|
|
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),
|
|
939
|
-
return { x: e, y: n, w: r, h:
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
960
|
-
colors:
|
|
959
|
+
height: i,
|
|
960
|
+
colors: a = {}
|
|
961
961
|
}) {
|
|
962
|
-
const o =
|
|
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 =
|
|
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 +
|
|
968
|
-
|
|
969
|
-
Math.max(0,
|
|
970
|
-
Math.max(0,
|
|
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 +
|
|
975
|
-
|
|
976
|
-
Math.max(0.5,
|
|
977
|
-
Math.max(0.5,
|
|
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
|
|
984
|
-
|
|
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
|
|
989
|
-
t.beginPath(), t.arc(
|
|
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
|
|
992
|
+
function Rt(t, e, n) {
|
|
993
993
|
return (t - e.x) / e.w * n;
|
|
994
994
|
}
|
|
995
|
-
function
|
|
995
|
+
function $t(t, e, n) {
|
|
996
996
|
return (t - e.y) / e.h * n;
|
|
997
997
|
}
|
|
998
|
-
function
|
|
998
|
+
function fr(t, e, n, r, i, a, o) {
|
|
999
999
|
if (t.type === "arrow") {
|
|
1000
|
-
const c =
|
|
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: (
|
|
1003
|
-
y: (
|
|
1002
|
+
x: (i + c) / 2,
|
|
1003
|
+
y: (a + l) / 2
|
|
1004
1004
|
};
|
|
1005
1005
|
}
|
|
1006
|
-
return { x:
|
|
1007
|
-
}
|
|
1008
|
-
function
|
|
1009
|
-
const
|
|
1010
|
-
x: l - o * Math.cos(
|
|
1011
|
-
y: u - o * Math.sin(
|
|
1012
|
-
},
|
|
1013
|
-
x: l - o * Math.cos(
|
|
1014
|
-
y: u - o * Math.sin(
|
|
1015
|
-
},
|
|
1016
|
-
x: n - Math.cos(
|
|
1017
|
-
y: r - Math.sin(
|
|
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:
|
|
1019
|
+
return { angle: a, tipX: l, tipY: u, baseX: f, baseY: m, left: g, right: S, shaftEnd: L };
|
|
1020
1020
|
}
|
|
1021
|
-
function
|
|
1022
|
-
const o =
|
|
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
|
|
1026
|
-
return new Promise((
|
|
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)),
|
|
1030
|
-
|
|
1031
|
-
const
|
|
1032
|
-
|
|
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
|
-
}),
|
|
1039
|
-
if (!
|
|
1040
|
-
|
|
1038
|
+
}), m.toBlob((S) => {
|
|
1039
|
+
if (!S) {
|
|
1040
|
+
a(new Error("Could not encode screenshot"));
|
|
1041
1041
|
return;
|
|
1042
1042
|
}
|
|
1043
|
-
|
|
1043
|
+
i(S);
|
|
1044
1044
|
}, "image/png");
|
|
1045
|
-
}, o.onerror = () =>
|
|
1045
|
+
}, o.onerror = () => a(new Error("Could not load screenshot")), o.src = t;
|
|
1046
1046
|
});
|
|
1047
1047
|
}
|
|
1048
|
-
const
|
|
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
|
|
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
|
|
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
|
|
1134
|
+
function Er(t) {
|
|
1061
1135
|
if (!Array.isArray(t) || !t.length)
|
|
1062
|
-
return
|
|
1136
|
+
return W.map((r) => ({ ...r }));
|
|
1063
1137
|
const e = /* @__PURE__ */ new Set(), n = [];
|
|
1064
1138
|
for (const r of t) {
|
|
1065
|
-
let
|
|
1066
|
-
typeof r == "string" || typeof r == "number" ? (
|
|
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 :
|
|
1142
|
+
return n.length ? n : W.map((r) => ({ ...r }));
|
|
1069
1143
|
}
|
|
1070
|
-
function
|
|
1144
|
+
function yt(t) {
|
|
1071
1145
|
var n;
|
|
1072
|
-
const e = Array.isArray(t) && t.length ? t :
|
|
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
|
|
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
|
|
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
|
|
1085
|
-
crop:
|
|
1086
|
-
resetCrop:
|
|
1087
|
-
arrow:
|
|
1088
|
-
rect:
|
|
1089
|
-
circle:
|
|
1090
|
-
discard:
|
|
1091
|
-
recapture:
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
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:
|
|
1179
|
+
theme: Me,
|
|
1105
1180
|
video: !1,
|
|
1106
|
-
consoleLogLimit:
|
|
1107
|
-
kinds:
|
|
1181
|
+
consoleLogLimit: Le,
|
|
1182
|
+
kinds: W.map((t) => ({ ...t })),
|
|
1108
1183
|
capture: null,
|
|
1109
1184
|
onBeforeCapture: null
|
|
1110
|
-
},
|
|
1111
|
-
function
|
|
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
|
|
1189
|
+
function $e(t) {
|
|
1115
1190
|
const e = String(t || "").trim().toLowerCase().replace(/\s+/g, "-");
|
|
1116
|
-
return
|
|
1191
|
+
return Cr.includes(e) ? e : Me;
|
|
1117
1192
|
}
|
|
1118
|
-
function
|
|
1193
|
+
function oe(t, e) {
|
|
1119
1194
|
return h && getComputedStyle(h).getPropertyValue(t).trim() || e;
|
|
1120
1195
|
}
|
|
1121
|
-
async function
|
|
1196
|
+
async function Rr(t) {
|
|
1122
1197
|
return (await fetch(t)).blob();
|
|
1123
1198
|
}
|
|
1124
|
-
function
|
|
1125
|
-
s.status && (s.status.textContent = t || "",
|
|
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
|
|
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…">${
|
|
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">${
|
|
1138
|
-
<button class="nf-reset-crop nf-icon-btn" type="button" title="Reset crop" aria-label="Reset crop" hidden>${
|
|
1139
|
-
<button class="nf-tool nf-icon-btn" type="button" data-tool="arrow" title="Arrow" aria-label="Arrow">${
|
|
1140
|
-
<button class="nf-tool nf-icon-btn" type="button" data-tool="rect" title="Rectangle" aria-label="Rectangle">${
|
|
1141
|
-
<button class="nf-tool nf-icon-btn" type="button" data-tool="circle" title="Circle" aria-label="Circle">${
|
|
1142
|
-
<button class="nf-discard-shot nf-icon-btn" type="button" title="Discard screenshot" aria-label="Discard screenshot">${
|
|
1143
|
-
<button class="nf-recapture nf-icon-btn" type="button" title="Recapture screenshot" aria-label="Recapture screenshot">${
|
|
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"
|
|
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>${
|
|
1152
|
-
<button class="nf-audio nf-icon-btn" type="button" title="Record audio" aria-label="Record audio">${
|
|
1153
|
-
<button class="nf-video nf-icon-btn" type="button" title="Record video" aria-label="Record video">${
|
|
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:
|
|
1164
|
-
dialog:
|
|
1165
|
-
panel:
|
|
1166
|
-
panelBody:
|
|
1167
|
-
successMsg:
|
|
1168
|
-
stage:
|
|
1169
|
-
palette:
|
|
1170
|
-
canvas:
|
|
1171
|
-
text:
|
|
1172
|
-
author:
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
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
|
-
},
|
|
1280
|
+
}, $r(), nt()), h;
|
|
1185
1281
|
}
|
|
1186
|
-
function
|
|
1282
|
+
function nt() {
|
|
1187
1283
|
var t;
|
|
1188
|
-
h && (h.dataset.theme =
|
|
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
|
|
1286
|
+
function ut() {
|
|
1191
1287
|
s.launcher && (s.launcher.hidden = !!d.hideLauncher);
|
|
1192
1288
|
}
|
|
1193
|
-
function
|
|
1194
|
-
s.launcher.addEventListener("click", () =>
|
|
1195
|
-
|
|
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", () =>
|
|
1198
|
-
}), s.resetCrop.addEventListener("click",
|
|
1199
|
-
const t =
|
|
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 &&
|
|
1203
|
-
}), s.discard.addEventListener("click",
|
|
1204
|
-
|
|
1205
|
-
}), s.restore.addEventListener("click",
|
|
1206
|
-
|
|
1207
|
-
}),
|
|
1208
|
-
}
|
|
1209
|
-
function
|
|
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, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
1211
1307
|
}
|
|
1212
|
-
function
|
|
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 :
|
|
1217
|
-
t.innerHTML = e.map((
|
|
1218
|
-
const r = e.map((
|
|
1219
|
-
|
|
1220
|
-
}
|
|
1221
|
-
function
|
|
1222
|
-
|
|
1223
|
-
n.dataset.active = String(n.dataset.kind ===
|
|
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
|
|
1227
|
-
B =
|
|
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"),
|
|
1325
|
+
}), s.canvas && (s.canvas.dataset.draw = B ? "true" : "false"), j() && C();
|
|
1230
1326
|
}
|
|
1231
|
-
function
|
|
1327
|
+
function se(t) {
|
|
1232
1328
|
return Math.min(1, Math.max(0, t));
|
|
1233
1329
|
}
|
|
1234
|
-
function
|
|
1330
|
+
function rt() {
|
|
1235
1331
|
return s.shot || s.canvas;
|
|
1236
1332
|
}
|
|
1237
|
-
function
|
|
1238
|
-
const e =
|
|
1333
|
+
function dt(t) {
|
|
1334
|
+
const e = rt().getBoundingClientRect();
|
|
1239
1335
|
return {
|
|
1240
|
-
x:
|
|
1241
|
-
y:
|
|
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
|
|
1245
|
-
const e =
|
|
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
|
|
1249
|
-
const e =
|
|
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
|
|
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(
|
|
1261
|
-
h: Math.max(
|
|
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
|
|
1360
|
+
function jt(t) {
|
|
1265
1361
|
h && (t ? h.dataset.grabbing = "true" : delete h.dataset.grabbing);
|
|
1266
1362
|
}
|
|
1267
|
-
function
|
|
1363
|
+
function Mt(t) {
|
|
1268
1364
|
try {
|
|
1269
1365
|
s.canvas.setPointerCapture(t.pointerId);
|
|
1270
1366
|
} catch {
|
|
1271
1367
|
}
|
|
1272
1368
|
}
|
|
1273
|
-
function
|
|
1274
|
-
window.addEventListener("pointermove",
|
|
1369
|
+
function Pt() {
|
|
1370
|
+
window.addEventListener("pointermove", Ie), window.addEventListener("pointerup", ft), window.addEventListener("pointercancel", ft);
|
|
1275
1371
|
}
|
|
1276
|
-
function
|
|
1277
|
-
window.removeEventListener("pointermove",
|
|
1372
|
+
function Pe() {
|
|
1373
|
+
window.removeEventListener("pointermove", Ie), window.removeEventListener("pointerup", ft), window.removeEventListener("pointercancel", ft);
|
|
1278
1374
|
}
|
|
1279
|
-
function
|
|
1280
|
-
if (t.button !== 0 || !
|
|
1375
|
+
function Tr(t) {
|
|
1376
|
+
if (t.button !== 0 || !j())
|
|
1281
1377
|
return;
|
|
1282
|
-
if (!t.target.closest(".nf-sticker") && !
|
|
1283
|
-
|
|
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(),
|
|
1384
|
+
t.preventDefault(), t.stopPropagation(), A = n.dataset.id, Mt(t), Pr({
|
|
1289
1385
|
kind: "sticker",
|
|
1290
|
-
id:
|
|
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 (
|
|
1296
|
-
t.preventDefault(),
|
|
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(),
|
|
1301
|
-
const r =
|
|
1302
|
-
b = { kind: "sticker", type: B, start: r, current: r },
|
|
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
|
|
1403
|
+
function Pr(t, e) {
|
|
1308
1404
|
e.preventDefault(), e.stopPropagation();
|
|
1309
|
-
const n =
|
|
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:
|
|
1410
|
+
crop: y.crop(),
|
|
1315
1411
|
sticker: r ? { ...r } : null,
|
|
1316
1412
|
rect: n
|
|
1317
|
-
},
|
|
1413
|
+
}, jt(t.dir === "move" || t.dir === "start" || t.dir === "end"), Pt();
|
|
1318
1414
|
}
|
|
1319
|
-
function
|
|
1415
|
+
function Ie(t) {
|
|
1320
1416
|
if (b) {
|
|
1321
|
-
b.current = b.kind === "crop" ?
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
1347
|
-
|
|
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
|
|
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
|
|
1355
|
-
t.x += t.w -
|
|
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
|
|
1359
|
-
t.y += t.h -
|
|
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
|
|
1363
|
-
if (
|
|
1364
|
-
|
|
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) && (
|
|
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
|
|
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 =
|
|
1381
|
-
if (Math.abs(t.current.x - t.start.x) <
|
|
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
|
|
1386
|
-
|
|
1387
|
-
x:
|
|
1388
|
-
y:
|
|
1389
|
-
w: n.w *
|
|
1390
|
-
h: n.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 =
|
|
1395
|
-
e && (
|
|
1490
|
+
const e = Hr(t);
|
|
1491
|
+
e && (A = e.id), C();
|
|
1396
1492
|
}
|
|
1397
|
-
function
|
|
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) <
|
|
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
|
-
}) :
|
|
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
|
|
1512
|
+
return y.add(t.type, gt(t.start, t.current));
|
|
1417
1513
|
}
|
|
1418
|
-
function
|
|
1419
|
-
|
|
1514
|
+
function Dr() {
|
|
1515
|
+
y.resetCrop(), A = null, q();
|
|
1420
1516
|
}
|
|
1421
|
-
function
|
|
1422
|
-
s.resetCrop && (s.resetCrop.hidden = !
|
|
1517
|
+
function ht() {
|
|
1518
|
+
s.resetCrop && (s.resetCrop.hidden = !y.isCropped());
|
|
1423
1519
|
}
|
|
1424
|
-
function
|
|
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
|
|
1431
|
-
return
|
|
1526
|
+
function j() {
|
|
1527
|
+
return U(T);
|
|
1432
1528
|
}
|
|
1433
|
-
function
|
|
1529
|
+
function it() {
|
|
1434
1530
|
if (!s.stage || !s.palette || !s.actions || !s.recapture)
|
|
1435
1531
|
return;
|
|
1436
|
-
const t =
|
|
1437
|
-
s.stage.hidden = !t &&
|
|
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
|
|
1440
|
-
|
|
1535
|
+
function Br() {
|
|
1536
|
+
j() && (Q = T), T = "", et(null), it(), q();
|
|
1441
1537
|
}
|
|
1442
|
-
function
|
|
1443
|
-
|
|
1538
|
+
function Fr() {
|
|
1539
|
+
U(Q) && (T = Q, it(), q());
|
|
1444
1540
|
}
|
|
1445
|
-
function
|
|
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
|
|
1452
|
-
if (!
|
|
1547
|
+
function He(t) {
|
|
1548
|
+
if (!U(t))
|
|
1453
1549
|
throw new Error("Screenshot failed; you can still send text.");
|
|
1454
|
-
T = t,
|
|
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
|
|
1457
|
-
if (!(
|
|
1458
|
-
|
|
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
|
|
1558
|
+
t = await Jn();
|
|
1463
1559
|
} catch {
|
|
1464
|
-
t = await
|
|
1560
|
+
t = await xe(Oe());
|
|
1465
1561
|
}
|
|
1466
|
-
|
|
1562
|
+
He(t), v("");
|
|
1467
1563
|
} catch (t) {
|
|
1468
|
-
|
|
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,
|
|
1566
|
+
s.dialog.hidden = !1, s.recapture.disabled = !1, Et = !1, it(), q();
|
|
1471
1567
|
}
|
|
1472
1568
|
}
|
|
1473
1569
|
}
|
|
1474
|
-
function
|
|
1570
|
+
function Nr() {
|
|
1475
1571
|
try {
|
|
1476
|
-
if (
|
|
1572
|
+
if (V || (V = ar((e) => {
|
|
1477
1573
|
const n = s.text.value.trim();
|
|
1478
1574
|
s.text.value = n ? `${n} ${e}` : e;
|
|
1479
|
-
})), !
|
|
1480
|
-
|
|
1575
|
+
})), !V.isSupported()) {
|
|
1576
|
+
v("Audio-to-text is not supported in this browser.");
|
|
1481
1577
|
return;
|
|
1482
1578
|
}
|
|
1483
|
-
const t =
|
|
1484
|
-
|
|
1579
|
+
const t = V.start();
|
|
1580
|
+
_t(t), v(t ? "Listening…" : "");
|
|
1485
1581
|
} catch (t) {
|
|
1486
|
-
|
|
1582
|
+
v(t.message);
|
|
1487
1583
|
}
|
|
1488
1584
|
}
|
|
1489
|
-
async function
|
|
1585
|
+
async function jr() {
|
|
1490
1586
|
if (!d.video) {
|
|
1491
|
-
|
|
1587
|
+
v("Video is disabled on this host.");
|
|
1492
1588
|
return;
|
|
1493
1589
|
}
|
|
1494
|
-
s.dialog.hidden = !0, s.stop.hidden = !1,
|
|
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
|
-
|
|
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
|
-
|
|
1597
|
+
v(t.message);
|
|
1502
1598
|
}
|
|
1503
1599
|
});
|
|
1504
1600
|
try {
|
|
1505
|
-
await
|
|
1601
|
+
await tt.start();
|
|
1506
1602
|
} catch (t) {
|
|
1507
|
-
s.stop.hidden = !0,
|
|
1603
|
+
s.stop.hidden = !0, ut(), s.dialog.hidden = !1, v(t.message);
|
|
1508
1604
|
}
|
|
1509
1605
|
}
|
|
1510
|
-
function
|
|
1511
|
-
if (s.shot = null, !
|
|
1512
|
-
s.canvas.style.removeProperty("--nf-shot-aspect"), s.canvas.style.removeProperty("aspect-ratio"), s.canvas.innerHTML =
|
|
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
|
-
|
|
1615
|
+
_r(t), C();
|
|
1520
1616
|
};
|
|
1521
|
-
t.addEventListener("load", e), t.complete && t.naturalWidth && e(),
|
|
1617
|
+
t.addEventListener("load", e), t.complete && t.naturalWidth && e(), ht();
|
|
1522
1618
|
}
|
|
1523
|
-
function
|
|
1524
|
-
const e = t.naturalWidth ||
|
|
1525
|
-
if (e && n && (
|
|
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 =
|
|
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
|
|
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
|
-
...
|
|
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((
|
|
1550
|
-
|
|
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 =
|
|
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
|
|
1556
|
-
|
|
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
|
|
1559
|
-
if ((b == null ? void 0 : b.kind) === "sticker" &&
|
|
1560
|
-
const o =
|
|
1561
|
-
if (l.className = `nf-sticker nf-${
|
|
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(
|
|
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((
|
|
1567
|
-
const
|
|
1568
|
-
|
|
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
|
-
|
|
1666
|
+
ht();
|
|
1571
1667
|
}
|
|
1572
|
-
function
|
|
1573
|
-
const
|
|
1574
|
-
t.style.left = `${
|
|
1575
|
-
<line class="nf-arrow-hit" x1="${
|
|
1576
|
-
<line class="nf-arrow-shaft" x1="${
|
|
1577
|
-
<polygon class="nf-arrow-head" points="${
|
|
1578
|
-
`, t.appendChild(
|
|
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
|
|
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
|
|
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
|
|
1683
|
+
function De() {
|
|
1588
1684
|
try {
|
|
1589
|
-
return String(localStorage.getItem(
|
|
1685
|
+
return String(localStorage.getItem(Re) || "").trim();
|
|
1590
1686
|
} catch {
|
|
1591
1687
|
return "";
|
|
1592
1688
|
}
|
|
1593
1689
|
}
|
|
1594
|
-
function
|
|
1690
|
+
function zr(t) {
|
|
1595
1691
|
const e = String(t || "").trim();
|
|
1596
|
-
if (!(!e || e ===
|
|
1692
|
+
if (!(!e || e === Tt))
|
|
1597
1693
|
try {
|
|
1598
|
-
localStorage.setItem(
|
|
1694
|
+
localStorage.setItem(Re, e);
|
|
1599
1695
|
} catch {
|
|
1600
1696
|
}
|
|
1601
1697
|
}
|
|
1602
|
-
function
|
|
1603
|
-
return !!(String(
|
|
1698
|
+
function Be() {
|
|
1699
|
+
return !!(String($.userId || "").trim() || String($.email || "").trim() || String($.displayName || "").trim());
|
|
1604
1700
|
}
|
|
1605
|
-
function
|
|
1701
|
+
function Fe() {
|
|
1606
1702
|
return String(
|
|
1607
|
-
|
|
1703
|
+
$.displayName || $.email || $.userId || ""
|
|
1608
1704
|
).trim();
|
|
1609
1705
|
}
|
|
1610
|
-
function
|
|
1706
|
+
function qr() {
|
|
1611
1707
|
var e;
|
|
1612
|
-
if (
|
|
1613
|
-
return
|
|
1708
|
+
if (Be())
|
|
1709
|
+
return Fe() || Tt;
|
|
1614
1710
|
const t = String(((e = s.author) == null ? void 0 : e.value) || "").trim();
|
|
1615
|
-
return t ? (
|
|
1711
|
+
return t ? (zr(t), t) : Tt;
|
|
1616
1712
|
}
|
|
1617
|
-
function
|
|
1713
|
+
function Ue() {
|
|
1618
1714
|
if (!s.author)
|
|
1619
1715
|
return;
|
|
1620
|
-
const t =
|
|
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 =
|
|
1721
|
+
s.author.value = De();
|
|
1626
1722
|
}
|
|
1627
|
-
function
|
|
1723
|
+
function Ne(t, e = Le) {
|
|
1628
1724
|
const n = Number(t);
|
|
1629
|
-
return Number.isFinite(n) ? Math.min(
|
|
1725
|
+
return Number.isFinite(n) ? Math.min(Lr, Math.max(0, Math.floor(n))) : e;
|
|
1630
1726
|
}
|
|
1631
|
-
function
|
|
1632
|
-
|
|
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:
|
|
1738
|
+
theme: $e(t.theme ?? d.theme),
|
|
1643
1739
|
video: t.video == null ? d.video : !!t.video,
|
|
1644
|
-
consoleLogLimit: t.consoleLogLimit == null ? d.consoleLogLimit :
|
|
1645
|
-
kinds: e ?
|
|
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
|
|
1651
|
-
return
|
|
1746
|
+
function Vt(t = {}) {
|
|
1747
|
+
return je(t), h && nt(), Wt;
|
|
1652
1748
|
}
|
|
1653
|
-
function
|
|
1654
|
-
return
|
|
1749
|
+
function Kr(t = {}) {
|
|
1750
|
+
return je(t), Ut(), nt(), Wt;
|
|
1655
1751
|
}
|
|
1656
|
-
function
|
|
1657
|
-
return
|
|
1752
|
+
function Xr(t) {
|
|
1753
|
+
return Vt({ theme: t });
|
|
1658
1754
|
}
|
|
1659
|
-
function
|
|
1755
|
+
function Yr(t) {
|
|
1660
1756
|
const e = !!t;
|
|
1661
|
-
return !e && h && s.dialog && !s.dialog.hidden &&
|
|
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
|
-
|
|
1664
|
-
|
|
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
|
-
|
|
1856
|
+
He(await xe(Oe())), v("");
|
|
1667
1857
|
} catch (t) {
|
|
1668
|
-
T = "",
|
|
1858
|
+
T = "", v((t == null ? void 0 : t.message) || "Screenshot failed; you can still send text.");
|
|
1669
1859
|
}
|
|
1670
|
-
|
|
1860
|
+
it(), pt(!1), _e(), s.dialog.hidden = !1, q(), s.text.focus();
|
|
1671
1861
|
}
|
|
1672
|
-
function
|
|
1673
|
-
h && (
|
|
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
|
|
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
|
-
|
|
1680
|
-
const
|
|
1681
|
-
if (n.hidden = !0, r.hidden = !1, t.classList.add("nf-success"), t.style.opacity = "1",
|
|
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 ?
|
|
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
|
|
1689
|
-
f || (f = !0, e.removeEventListener("transitionend",
|
|
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
|
-
},
|
|
1693
|
-
|
|
1882
|
+
}, g = (S) => {
|
|
1883
|
+
S.target !== e || S.propertyName !== "transform" || m();
|
|
1694
1884
|
};
|
|
1695
|
-
e.addEventListener("transitionend",
|
|
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(
|
|
1887
|
+
}), window.setTimeout(m, 700);
|
|
1698
1888
|
});
|
|
1699
1889
|
}
|
|
1700
|
-
function
|
|
1701
|
-
|
|
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
|
|
1704
|
-
|
|
1893
|
+
function Zr(t = {}) {
|
|
1894
|
+
$ = { ...$, ...er(t) }, Ue();
|
|
1705
1895
|
}
|
|
1706
|
-
async function
|
|
1707
|
-
if (
|
|
1896
|
+
async function Ke() {
|
|
1897
|
+
if (Ut(), Ct)
|
|
1708
1898
|
return null;
|
|
1709
1899
|
const t = s.text.value.trim();
|
|
1710
|
-
if (!t && !
|
|
1711
|
-
return
|
|
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
|
|
1714
|
-
|
|
1903
|
+
return v("Notefully is missing endpoint or projectKey."), null;
|
|
1904
|
+
Ct = !0, de(!0), v("Submitting…", !0);
|
|
1715
1905
|
try {
|
|
1716
|
-
const e =
|
|
1717
|
-
if (n.append("message", t), n.append("kind",
|
|
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
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
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
|
-
|
|
1730
|
-
|
|
1916
|
+
y.crop(),
|
|
1917
|
+
y.list(),
|
|
1731
1918
|
{
|
|
1732
|
-
mark:
|
|
1733
|
-
markText:
|
|
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
|
-
|
|
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
|
|
1934
|
+
let i = null;
|
|
1748
1935
|
try {
|
|
1749
|
-
|
|
1936
|
+
i = await r.json();
|
|
1750
1937
|
} catch {
|
|
1751
|
-
|
|
1938
|
+
i = null;
|
|
1752
1939
|
}
|
|
1753
1940
|
if (!r.ok)
|
|
1754
|
-
throw
|
|
1755
|
-
return await
|
|
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
|
-
|
|
1944
|
+
Ct = !1, de(!1);
|
|
1758
1945
|
}
|
|
1759
1946
|
}
|
|
1760
|
-
function
|
|
1947
|
+
function de(t) {
|
|
1761
1948
|
s.submit && (s.submit.disabled = !!t, s.submit.setAttribute("aria-busy", t ? "true" : "false"));
|
|
1762
1949
|
}
|
|
1763
|
-
function
|
|
1764
|
-
|
|
1950
|
+
function ti() {
|
|
1951
|
+
at(), h == null || h.remove(), h = null, s = {};
|
|
1765
1952
|
}
|
|
1766
|
-
const
|
|
1767
|
-
typeof window < "u" && (window.Notefully =
|
|
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
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
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
|
};
|