@jumio/websdk
Version:
Jumio WebSDK is a powerful, flexible software development kit that simplifies the integration of Jumio's services into your web applications.
17,501 lines • 556 kB
JavaScript
var Vs = (d) => {
throw TypeError(d);
};
var rs = (d, t, e) => t.has(d) || Vs("Cannot " + e);
var X = (d, t, e) => (rs(d, t, "read from private field"), e ? e.call(d) : t.get(d)), Ct = (d, t, e) => t.has(d) ? Vs("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(d) : t.set(d, e), gt = (d, t, e, s) => (rs(d, t, "write to private field"), s ? s.call(d, e) : t.set(d, e), e), xt = (d, t, e) => (rs(d, t, "access private method"), e);
var Ws = (d, t, e, s) => ({
set _(i) {
gt(d, t, i, e);
},
get _() {
return X(d, t, s);
}
});
const ut = typeof process == "object" && process + "" == "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"), gs = [1e-3, 0, 0, 1e-3, 0, 0], as = 1.35, yt = {
ANY: 1,
DISPLAY: 2,
PRINT: 4,
ANNOTATIONS_FORMS: 16,
ANNOTATIONS_STORAGE: 32,
ANNOTATIONS_DISABLE: 64,
IS_EDITING: 128,
OPLIST: 256
}, Ut = {
DISABLE: 0,
ENABLE: 1,
ENABLE_FORMS: 2,
ENABLE_STORAGE: 3
}, _e = "pdfjs_internal_editor_", F = {
DISABLE: -1,
NONE: 0,
FREETEXT: 3,
HIGHLIGHT: 9,
STAMP: 13,
INK: 15,
POPUP: 16,
SIGNATURE: 101,
COMMENT: 102
}, O = {
RESIZE: 1,
CREATE: 2,
FREETEXT_SIZE: 11,
FREETEXT_COLOR: 12,
FREETEXT_OPACITY: 13,
INK_COLOR: 21,
INK_THICKNESS: 22,
INK_OPACITY: 23,
HIGHLIGHT_COLOR: 31,
HIGHLIGHT_THICKNESS: 32,
HIGHLIGHT_FREE: 33,
HIGHLIGHT_SHOW_ALL: 34,
DRAW_STEP: 41
}, tn = {
PRINT: 4,
MODIFY_CONTENTS: 8,
COPY: 16,
MODIFY_ANNOTATIONS: 32,
FILL_INTERACTIVE_FORMS: 256,
COPY_FOR_ACCESSIBILITY: 512,
ASSEMBLE: 1024,
PRINT_HIGH_QUALITY: 2048
}, ms = {
TRIANGLES: 1,
LATTICE: 2
}, at = {
FILL: 0,
STROKE: 1,
FILL_STROKE: 2,
INVISIBLE: 3,
FILL_STROKE_MASK: 3,
ADD_TO_PATH_FLAG: 4
}, je = {
GRAYSCALE_1BPP: 1,
RGB_24BPP: 2,
RGBA_32BPP: 3
}, st = {
TEXT: 1,
LINK: 2,
FREETEXT: 3,
LINE: 4,
SQUARE: 5,
CIRCLE: 6,
POLYGON: 7,
POLYLINE: 8,
HIGHLIGHT: 9,
UNDERLINE: 10,
SQUIGGLY: 11,
STRIKEOUT: 12,
STAMP: 13,
CARET: 14,
INK: 15,
POPUP: 16,
FILEATTACHMENT: 17,
SOUND: 18,
MOVIE: 19,
WIDGET: 20,
SCREEN: 21,
PRINTERMARK: 22,
TRAPNET: 23,
WATERMARK: 24,
THREED: 25,
REDACT: 26
}, Zt = {
SOLID: 1,
DASHED: 2,
BEVELED: 3,
INSET: 4,
UNDERLINE: 5
}, Ke = {
ERRORS: 0,
WARNINGS: 1,
INFOS: 5
}, Se = {
dependency: 1,
setLineWidth: 2,
setLineCap: 3,
setLineJoin: 4,
setMiterLimit: 5,
setDash: 6,
setRenderingIntent: 7,
setFlatness: 8,
setGState: 9,
save: 10,
restore: 11,
transform: 12,
moveTo: 13,
lineTo: 14,
curveTo: 15,
curveTo2: 16,
curveTo3: 17,
closePath: 18,
rectangle: 19,
stroke: 20,
closeStroke: 21,
fill: 22,
eoFill: 23,
fillStroke: 24,
eoFillStroke: 25,
closeFillStroke: 26,
closeEOFillStroke: 27,
endPath: 28,
clip: 29,
eoClip: 30,
beginText: 31,
endText: 32,
setCharSpacing: 33,
setWordSpacing: 34,
setHScale: 35,
setLeading: 36,
setFont: 37,
setTextRenderingMode: 38,
setTextRise: 39,
moveText: 40,
setLeadingMoveText: 41,
setTextMatrix: 42,
nextLine: 43,
showText: 44,
showSpacedText: 45,
nextLineShowText: 46,
nextLineSetSpacingShowText: 47,
setCharWidth: 48,
setCharWidthAndBounds: 49,
setStrokeColorSpace: 50,
setFillColorSpace: 51,
setStrokeColor: 52,
setStrokeColorN: 53,
setFillColor: 54,
setFillColorN: 55,
setStrokeGray: 56,
setFillGray: 57,
setStrokeRGBColor: 58,
setFillRGBColor: 59,
setStrokeCMYKColor: 60,
setFillCMYKColor: 61,
shadingFill: 62,
beginInlineImage: 63,
beginImageData: 64,
endInlineImage: 65,
paintXObject: 66,
markPoint: 67,
markPointProps: 68,
beginMarkedContent: 69,
beginMarkedContentProps: 70,
endMarkedContent: 71,
beginCompat: 72,
endCompat: 73,
paintFormXObjectBegin: 74,
paintFormXObjectEnd: 75,
beginGroup: 76,
endGroup: 77,
beginAnnotation: 80,
endAnnotation: 81,
paintImageMaskXObject: 83,
paintImageMaskXObjectGroup: 84,
paintImageXObject: 85,
paintInlineImageXObject: 86,
paintInlineImageXObjectGroup: 87,
paintImageXObjectRepeat: 88,
paintImageMaskXObjectRepeat: 89,
paintSolidColorImageMask: 90,
constructPath: 91,
setStrokeTransparent: 92,
setFillTransparent: 93,
rawFillPath: 94
}, ue = {
moveTo: 0,
lineTo: 1,
curveTo: 2,
quadraticCurveTo: 3,
closePath: 4
}, en = {
NEED_PASSWORD: 1,
INCORRECT_PASSWORD: 2
};
let Qe = Ke.WARNINGS;
function sn(d) {
Number.isInteger(d) && (Qe = d);
}
function nn() {
return Qe;
}
function Je(d) {
Qe >= Ke.INFOS && console.info(`Info: ${d}`);
}
function L(d) {
Qe >= Ke.WARNINGS && console.warn(`Warning: ${d}`);
}
function V(d) {
throw new Error(d);
}
function N(d, t) {
d || V(t);
}
function rn(d) {
switch (d?.protocol) {
case "http:":
case "https:":
case "ftp:":
case "mailto:":
case "tel:":
return !0;
default:
return !1;
}
}
function Ai(d, t = null, e = null) {
if (!d)
return null;
if (e && typeof d == "string" && (e.addDefaultProtocol && d.startsWith("www.") && d.match(/\./g)?.length >= 2 && (d = `http://${d}`), e.tryConvertEncoding))
try {
d = cn(d);
} catch {
}
const s = t ? URL.parse(d, t) : URL.parse(d);
return rn(s) ? s : null;
}
function wi(d, t, e = !1) {
const s = URL.parse(d);
return s ? (s.hash = t, s.href) : e && Ai(d, "http://example.com") ? d.split("#", 1)[0] + `${t ? `#${t}` : ""}` : "";
}
function I(d, t, e, s = !1) {
return Object.defineProperty(d, t, {
value: e,
enumerable: !s,
configurable: !0,
writable: !1
}), e;
}
const Kt = (function() {
function t(e, s) {
this.message = e, this.name = s;
}
return t.prototype = new Error(), t.constructor = t, t;
})();
class Xs extends Kt {
constructor(t, e) {
super(t, "PasswordException"), this.code = e;
}
}
class os extends Kt {
constructor(t, e) {
super(t, "UnknownErrorException"), this.details = e;
}
}
class bs extends Kt {
constructor(t) {
super(t, "InvalidPDFException");
}
}
class We extends Kt {
constructor(t, e, s) {
super(t, "ResponseException"), this.status = e, this.missing = s;
}
}
class an extends Kt {
constructor(t) {
super(t, "FormatError");
}
}
class $t extends Kt {
constructor(t) {
super(t, "AbortException");
}
}
function vi(d) {
(typeof d != "object" || d?.length === void 0) && V("Invalid argument for bytesToString");
const t = d.length, e = 8192;
if (t < e)
return String.fromCharCode.apply(null, d);
const s = [];
for (let i = 0; i < t; i += e) {
const n = Math.min(i + e, t), r = d.subarray(i, n);
s.push(String.fromCharCode.apply(null, r));
}
return s.join("");
}
function Te(d) {
typeof d != "string" && V("Invalid argument for stringToBytes");
const t = d.length, e = new Uint8Array(t);
for (let s = 0; s < t; ++s)
e[s] = d.charCodeAt(s) & 255;
return e;
}
function on(d) {
return String.fromCharCode(d >> 24 & 255, d >> 16 & 255, d >> 8 & 255, d & 255);
}
function ln() {
const d = new Uint8Array(4);
return d[0] = 1, new Uint32Array(d.buffer, 0, 1)[0] === 1;
}
function hn() {
try {
return new Function(""), !0;
} catch {
return !1;
}
}
class ht {
static get isLittleEndian() {
return I(this, "isLittleEndian", ln());
}
static get isEvalSupported() {
return I(this, "isEvalSupported", hn());
}
static get isOffscreenCanvasSupported() {
return I(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas < "u");
}
static get isImageDecoderSupported() {
return I(this, "isImageDecoderSupported", typeof ImageDecoder < "u");
}
static get isFloat16ArraySupported() {
return I(this, "isFloat16ArraySupported", typeof Float16Array < "u");
}
static get isSanitizerSupported() {
return I(this, "isSanitizerSupported", typeof Sanitizer < "u");
}
static get platform() {
const {
platform: t,
userAgent: e
} = navigator;
return I(this, "platform", {
isAndroid: e.includes("Android"),
isLinux: t.includes("Linux"),
isMac: t.includes("Mac"),
isWindows: t.includes("Win"),
isFirefox: e.includes("Firefox")
});
}
static get isCSSRoundSupported() {
return I(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)"));
}
}
const ls = Array.from(Array(256).keys(), (d) => d.toString(16).padStart(2, "0"));
class P {
static makeHexColor(t, e, s) {
return `#${ls[t]}${ls[e]}${ls[s]}`;
}
static domMatrixToTransform(t) {
return [t.a, t.b, t.c, t.d, t.e, t.f];
}
static scaleMinMax(t, e) {
let s;
t[0] ? (t[0] < 0 && (s = e[0], e[0] = e[2], e[2] = s), e[0] *= t[0], e[2] *= t[0], t[3] < 0 && (s = e[1], e[1] = e[3], e[3] = s), e[1] *= t[3], e[3] *= t[3]) : (s = e[0], e[0] = e[1], e[1] = s, s = e[2], e[2] = e[3], e[3] = s, t[1] < 0 && (s = e[1], e[1] = e[3], e[3] = s), e[1] *= t[1], e[3] *= t[1], t[2] < 0 && (s = e[0], e[0] = e[2], e[2] = s), e[0] *= t[2], e[2] *= t[2]), e[0] += t[4], e[1] += t[5], e[2] += t[4], e[3] += t[5];
}
static transform(t, e) {
return [t[0] * e[0] + t[2] * e[1], t[1] * e[0] + t[3] * e[1], t[0] * e[2] + t[2] * e[3], t[1] * e[2] + t[3] * e[3], t[0] * e[4] + t[2] * e[5] + t[4], t[1] * e[4] + t[3] * e[5] + t[5]];
}
static multiplyByDOMMatrix(t, e) {
return [t[0] * e.a + t[2] * e.b, t[1] * e.a + t[3] * e.b, t[0] * e.c + t[2] * e.d, t[1] * e.c + t[3] * e.d, t[0] * e.e + t[2] * e.f + t[4], t[1] * e.e + t[3] * e.f + t[5]];
}
static applyTransform(t, e, s = 0) {
const i = t[s], n = t[s + 1];
t[s] = i * e[0] + n * e[2] + e[4], t[s + 1] = i * e[1] + n * e[3] + e[5];
}
static applyTransformToBezier(t, e, s = 0) {
const i = e[0], n = e[1], r = e[2], a = e[3], o = e[4], l = e[5];
for (let h = 0; h < 6; h += 2) {
const c = t[s + h], u = t[s + h + 1];
t[s + h] = c * i + u * r + o, t[s + h + 1] = c * n + u * a + l;
}
}
static applyInverseTransform(t, e) {
const s = t[0], i = t[1], n = e[0] * e[3] - e[1] * e[2];
t[0] = (s * e[3] - i * e[2] + e[2] * e[5] - e[4] * e[3]) / n, t[1] = (-s * e[1] + i * e[0] + e[4] * e[1] - e[5] * e[0]) / n;
}
static axialAlignedBoundingBox(t, e, s) {
const i = e[0], n = e[1], r = e[2], a = e[3], o = e[4], l = e[5], h = t[0], c = t[1], u = t[2], f = t[3];
let g = i * h + o, p = g, b = i * u + o, m = b, A = a * c + l, y = A, _ = a * f + l, w = _;
if (n !== 0 || r !== 0) {
const v = n * h, S = n * u, E = r * c, C = r * f;
g += E, m += E, b += C, p += C, A += v, w += v, _ += S, y += S;
}
s[0] = Math.min(s[0], g, b, p, m), s[1] = Math.min(s[1], A, _, y, w), s[2] = Math.max(s[2], g, b, p, m), s[3] = Math.max(s[3], A, _, y, w);
}
static inverseTransform(t) {
const e = t[0] * t[3] - t[1] * t[2];
return [t[3] / e, -t[1] / e, -t[2] / e, t[0] / e, (t[2] * t[5] - t[4] * t[3]) / e, (t[4] * t[1] - t[5] * t[0]) / e];
}
static singularValueDecompose2dScale(t, e) {
const s = t[0], i = t[1], n = t[2], r = t[3], a = s ** 2 + i ** 2, o = s * n + i * r, l = n ** 2 + r ** 2, h = (a + l) / 2, c = Math.sqrt(h ** 2 - (a * l - o ** 2));
e[0] = Math.sqrt(h + c || 1), e[1] = Math.sqrt(h - c || 1);
}
static normalizeRect(t) {
const e = t.slice(0);
return t[0] > t[2] && (e[0] = t[2], e[2] = t[0]), t[1] > t[3] && (e[1] = t[3], e[3] = t[1]), e;
}
static intersect(t, e) {
const s = Math.max(Math.min(t[0], t[2]), Math.min(e[0], e[2])), i = Math.min(Math.max(t[0], t[2]), Math.max(e[0], e[2]));
if (s > i)
return null;
const n = Math.max(Math.min(t[1], t[3]), Math.min(e[1], e[3])), r = Math.min(Math.max(t[1], t[3]), Math.max(e[1], e[3]));
return n > r ? null : [s, n, i, r];
}
static pointBoundingBox(t, e, s) {
s[0] = Math.min(s[0], t), s[1] = Math.min(s[1], e), s[2] = Math.max(s[2], t), s[3] = Math.max(s[3], e);
}
static rectBoundingBox(t, e, s, i, n) {
n[0] = Math.min(n[0], t, s), n[1] = Math.min(n[1], e, i), n[2] = Math.max(n[2], t, s), n[3] = Math.max(n[3], e, i);
}
static #t(t, e, s, i, n, r, a, o, l, h) {
if (l <= 0 || l >= 1)
return;
const c = 1 - l, u = l * l, f = u * l, g = c * (c * (c * t + 3 * l * e) + 3 * u * s) + f * i, p = c * (c * (c * n + 3 * l * r) + 3 * u * a) + f * o;
h[0] = Math.min(h[0], g), h[1] = Math.min(h[1], p), h[2] = Math.max(h[2], g), h[3] = Math.max(h[3], p);
}
static #e(t, e, s, i, n, r, a, o, l, h, c, u) {
if (Math.abs(l) < 1e-12) {
Math.abs(h) >= 1e-12 && this.#t(t, e, s, i, n, r, a, o, -c / h, u);
return;
}
const f = h ** 2 - 4 * c * l;
if (f < 0)
return;
const g = Math.sqrt(f), p = 2 * l;
this.#t(t, e, s, i, n, r, a, o, (-h + g) / p, u), this.#t(t, e, s, i, n, r, a, o, (-h - g) / p, u);
}
static bezierBoundingBox(t, e, s, i, n, r, a, o, l) {
l[0] = Math.min(l[0], t, a), l[1] = Math.min(l[1], e, o), l[2] = Math.max(l[2], t, a), l[3] = Math.max(l[3], e, o), this.#e(t, s, n, a, e, i, r, o, 3 * (-t + 3 * (s - n) + a), 6 * (t - 2 * s + n), 3 * (s - t), l), this.#e(t, s, n, a, e, i, r, o, 3 * (-e + 3 * (i - r) + o), 6 * (e - 2 * i + r), 3 * (i - e), l);
}
}
function cn(d) {
return decodeURIComponent(escape(d));
}
let hs = null, qs = null;
function dn(d) {
return hs || (hs = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu, qs = /* @__PURE__ */ new Map([["ſt", "ſt"]])), d.replaceAll(hs, (t, e, s) => e ? e.normalize("NFKC") : qs.get(s));
}
function _i() {
if (typeof crypto.randomUUID == "function")
return crypto.randomUUID();
const d = new Uint8Array(32);
return crypto.getRandomValues(d), vi(d);
}
const se = "pdfjs_internal_id_";
function un(d, t, e) {
if (!Array.isArray(e) || e.length < 2)
return !1;
const [s, i, ...n] = e;
if (!d(s) && !Number.isInteger(s) || !t(i))
return !1;
const r = n.length;
let a = !0;
switch (i.name) {
case "XYZ":
if (r < 2 || r > 3)
return !1;
break;
case "Fit":
case "FitB":
return r === 0;
case "FitH":
case "FitBH":
case "FitV":
case "FitBV":
if (r > 1)
return !1;
break;
case "FitR":
if (r !== 4)
return !1;
a = !1;
break;
default:
return !1;
}
for (const o of n)
if (!(typeof o == "number" || a && o === null))
return !1;
return !0;
}
function ft(d, t, e) {
return Math.min(Math.max(d, t), e);
}
function Si(d) {
return Uint8Array.prototype.toBase64 ? d.toBase64() : btoa(vi(d));
}
function fn(d) {
return Uint8Array.fromBase64 ? Uint8Array.fromBase64(d) : Te(atob(d));
}
typeof Promise.try != "function" && (Promise.try = function(d, ...t) {
return new Promise((e) => {
e(d(...t));
});
});
typeof Math.sumPrecise != "function" && (Math.sumPrecise = function(d) {
return d.reduce((t, e) => t + e, 0);
});
class Ee {
static textContent(t) {
const e = [], s = {
items: e,
styles: /* @__PURE__ */ Object.create(null)
};
function i(n) {
if (!n)
return;
let r = null;
const a = n.name;
if (a === "#text")
r = n.value;
else if (Ee.shouldBuildText(a))
n?.attributes?.textContent ? r = n.attributes.textContent : n.value && (r = n.value);
else return;
if (r !== null && e.push({
str: r
}), !!n.children)
for (const o of n.children)
i(o);
}
return i(t), s;
}
static shouldBuildText(t) {
return !(t === "textarea" || t === "input" || t === "option" || t === "select");
}
}
class Ei {
static setupStorage(t, e, s, i, n) {
const r = i.getValue(e, {
value: null
});
switch (s.name) {
case "textarea":
if (r.value !== null && (t.textContent = r.value), n === "print")
break;
t.addEventListener("input", (a) => {
i.setValue(e, {
value: a.target.value
});
});
break;
case "input":
if (s.attributes.type === "radio" || s.attributes.type === "checkbox") {
if (r.value === s.attributes.xfaOn ? t.setAttribute("checked", !0) : r.value === s.attributes.xfaOff && t.removeAttribute("checked"), n === "print")
break;
t.addEventListener("change", (a) => {
i.setValue(e, {
value: a.target.checked ? a.target.getAttribute("xfaOn") : a.target.getAttribute("xfaOff")
});
});
} else {
if (r.value !== null && t.setAttribute("value", r.value), n === "print")
break;
t.addEventListener("input", (a) => {
i.setValue(e, {
value: a.target.value
});
});
}
break;
case "select":
if (r.value !== null) {
t.setAttribute("value", r.value);
for (const a of s.children)
a.attributes.value === r.value ? a.attributes.selected = !0 : a.attributes.hasOwnProperty("selected") && delete a.attributes.selected;
}
t.addEventListener("input", (a) => {
const o = a.target.options, l = o.selectedIndex === -1 ? "" : o[o.selectedIndex].value;
i.setValue(e, {
value: l
});
});
break;
}
}
static setAttributes({
html: t,
element: e,
storage: s = null,
intent: i,
linkService: n
}) {
const {
attributes: r
} = e, a = t instanceof HTMLAnchorElement;
r.type === "radio" && (r.name = `${r.name}-${i}`);
for (const [o, l] of Object.entries(r))
if (l != null)
switch (o) {
case "class":
l.length && t.setAttribute(o, l.join(" "));
break;
case "dataId":
break;
case "id":
t.setAttribute("data-element-id", l);
break;
case "style":
Object.assign(t.style, l);
break;
case "textContent":
t.textContent = l;
break;
default:
(!a || o !== "href" && o !== "newWindow") && t.setAttribute(o, l);
}
a && n.addLinkAttributes(t, r.href, r.newWindow), s && r.dataId && this.setupStorage(t, r.dataId, e, s);
}
static render(t) {
const e = t.annotationStorage, s = t.linkService, i = t.xfaHtml, n = t.intent || "display", r = document.createElement(i.name);
i.attributes && this.setAttributes({
html: r,
element: i,
intent: n,
linkService: s
});
const a = n !== "richText", o = t.div;
if (o.append(r), t.viewport) {
const c = `matrix(${t.viewport.transform.join(",")})`;
o.style.transform = c;
}
a && o.setAttribute("class", "xfaLayer xfaFont");
const l = [];
if (i.children.length === 0) {
if (i.value) {
const c = document.createTextNode(i.value);
r.append(c), a && Ee.shouldBuildText(i.name) && l.push(c);
}
return {
textDivs: l
};
}
const h = [[i, -1, r]];
for (; h.length > 0; ) {
const [c, u, f] = h.at(-1);
if (u + 1 === c.children.length) {
h.pop();
continue;
}
const g = c.children[++h.at(-1)[1]];
if (g === null)
continue;
const {
name: p
} = g;
if (p === "#text") {
const m = document.createTextNode(g.value);
l.push(m), f.append(m);
continue;
}
const b = g?.attributes?.xmlns ? document.createElementNS(g.attributes.xmlns, p) : document.createElement(p);
if (f.append(b), g.attributes && this.setAttributes({
html: b,
element: g,
storage: e,
intent: n,
linkService: s
}), g.children?.length > 0)
h.push([g, -1, b]);
else if (g.value) {
const m = document.createTextNode(g.value);
a && Ee.shouldBuildText(p) && l.push(m), b.append(m);
}
}
for (const c of o.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"))
c.setAttribute("readOnly", !0);
return {
textDivs: l
};
}
static update(t) {
const e = `matrix(${t.viewport.transform.join(",")})`;
t.div.style.transform = e, t.div.hidden = !1;
}
}
const Lt = "http://www.w3.org/2000/svg";
class he {
static CSS = 96;
static PDF = 72;
static PDF_TO_CSS_UNITS = this.CSS / this.PDF;
}
async function Pe(d, t = "text") {
if (be(d, document.baseURI)) {
const e = await fetch(d);
if (!e.ok)
throw new Error(e.statusText);
switch (t) {
case "arraybuffer":
return e.arrayBuffer();
case "blob":
return e.blob();
case "json":
return e.json();
}
return e.text();
}
return new Promise((e, s) => {
const i = new XMLHttpRequest();
i.open("GET", d, !0), i.responseType = t, i.onreadystatechange = () => {
if (i.readyState === XMLHttpRequest.DONE) {
if (i.status === 200 || i.status === 0) {
switch (t) {
case "arraybuffer":
case "blob":
case "json":
e(i.response);
return;
}
e(i.responseText);
return;
}
s(new Error(i.statusText));
}
}, i.send(null);
});
}
class ke {
constructor({
viewBox: t,
userUnit: e,
scale: s,
rotation: i,
offsetX: n = 0,
offsetY: r = 0,
dontFlip: a = !1
}) {
this.viewBox = t, this.userUnit = e, this.scale = s, this.rotation = i, this.offsetX = n, this.offsetY = r, s *= e;
const o = (t[2] + t[0]) / 2, l = (t[3] + t[1]) / 2;
let h, c, u, f;
switch (i %= 360, i < 0 && (i += 360), i) {
case 180:
h = -1, c = 0, u = 0, f = 1;
break;
case 90:
h = 0, c = 1, u = 1, f = 0;
break;
case 270:
h = 0, c = -1, u = -1, f = 0;
break;
case 0:
h = 1, c = 0, u = 0, f = -1;
break;
default:
throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.");
}
a && (u = -u, f = -f);
let g, p, b, m;
h === 0 ? (g = Math.abs(l - t[1]) * s + n, p = Math.abs(o - t[0]) * s + r, b = (t[3] - t[1]) * s, m = (t[2] - t[0]) * s) : (g = Math.abs(o - t[0]) * s + n, p = Math.abs(l - t[1]) * s + r, b = (t[2] - t[0]) * s, m = (t[3] - t[1]) * s), this.transform = [h * s, c * s, u * s, f * s, g - h * s * o - u * s * l, p - c * s * o - f * s * l], this.width = b, this.height = m;
}
get rawDims() {
const t = this.viewBox;
return I(this, "rawDims", {
pageWidth: t[2] - t[0],
pageHeight: t[3] - t[1],
pageX: t[0],
pageY: t[1]
});
}
clone({
scale: t = this.scale,
rotation: e = this.rotation,
offsetX: s = this.offsetX,
offsetY: i = this.offsetY,
dontFlip: n = !1
} = {}) {
return new ke({
viewBox: this.viewBox.slice(),
userUnit: this.userUnit,
scale: t,
rotation: e,
offsetX: s,
offsetY: i,
dontFlip: n
});
}
convertToViewportPoint(t, e) {
const s = [t, e];
return P.applyTransform(s, this.transform), s;
}
convertToViewportRectangle(t) {
const e = [t[0], t[1]];
P.applyTransform(e, this.transform);
const s = [t[2], t[3]];
return P.applyTransform(s, this.transform), [e[0], e[1], s[0], s[1]];
}
convertToPdfPoint(t, e) {
const s = [t, e];
return P.applyInverseTransform(s, this.transform), s;
}
}
class ks extends Kt {
constructor(t, e = 0) {
super(t, "RenderingCancelledException"), this.extraDelay = e;
}
}
function Ze(d) {
const t = d.length;
let e = 0;
for (; e < t && d[e].trim() === ""; )
e++;
return d.substring(e, e + 5).toLowerCase() === "data:";
}
function Ms(d) {
return typeof d == "string" && /\.pdf$/i.test(d);
}
function pn(d) {
return [d] = d.split(/[#?]/, 1), d.substring(d.lastIndexOf("/") + 1);
}
function gn(d, t = "document.pdf") {
if (typeof d != "string")
return t;
if (Ze(d))
return L('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'), t;
const s = ((a) => {
try {
return new URL(a);
} catch {
try {
return new URL(decodeURIComponent(a));
} catch {
try {
return new URL(a, "https://foo.bar");
} catch {
try {
return new URL(decodeURIComponent(a), "https://foo.bar");
} catch {
return null;
}
}
}
}
})(d);
if (!s)
return t;
const i = (a) => {
try {
let o = decodeURIComponent(a);
return o.includes("/") ? (o = o.split("/").at(-1), o.test(/^\.pdf$/i) ? o : a) : o;
} catch {
return a;
}
}, n = /\.pdf$/i, r = s.pathname.split("/").at(-1);
if (n.test(r))
return i(r);
if (s.searchParams.size > 0) {
const a = Array.from(s.searchParams.values()).reverse();
for (const l of a)
if (n.test(l))
return i(l);
const o = Array.from(s.searchParams.keys()).reverse();
for (const l of o)
if (n.test(l))
return i(l);
}
if (s.hash) {
const o = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i.exec(s.hash);
if (o)
return i(o[0]);
}
return t;
}
class Ys {
started = /* @__PURE__ */ Object.create(null);
times = [];
time(t) {
t in this.started && L(`Timer is already running for ${t}`), this.started[t] = Date.now();
}
timeEnd(t) {
t in this.started || L(`Timer has not been started for ${t}`), this.times.push({
name: t,
start: this.started[t],
end: Date.now()
}), delete this.started[t];
}
toString() {
const t = [];
let e = 0;
for (const {
name: s
} of this.times)
e = Math.max(s.length, e);
for (const {
name: s,
start: i,
end: n
} of this.times)
t.push(`${s.padEnd(e)} ${n - i}ms
`);
return t.join("");
}
}
function be(d, t) {
const e = t ? URL.parse(d, t) : URL.parse(d);
return e?.protocol === "http:" || e?.protocol === "https:";
}
function St(d) {
d.preventDefault();
}
function J(d) {
d.preventDefault(), d.stopPropagation();
}
function mn(d) {
console.log("Deprecated API usage: " + d);
}
class ys {
static #t;
static toDateObject(t) {
if (t instanceof Date)
return t;
if (!t || typeof t != "string")
return null;
this.#t ||= new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?");
const e = this.#t.exec(t);
if (!e)
return null;
const s = parseInt(e[1], 10);
let i = parseInt(e[2], 10);
i = i >= 1 && i <= 12 ? i - 1 : 0;
let n = parseInt(e[3], 10);
n = n >= 1 && n <= 31 ? n : 1;
let r = parseInt(e[4], 10);
r = r >= 0 && r <= 23 ? r : 0;
let a = parseInt(e[5], 10);
a = a >= 0 && a <= 59 ? a : 0;
let o = parseInt(e[6], 10);
o = o >= 0 && o <= 59 ? o : 0;
const l = e[7] || "Z";
let h = parseInt(e[8], 10);
h = h >= 0 && h <= 23 ? h : 0;
let c = parseInt(e[9], 10) || 0;
return c = c >= 0 && c <= 59 ? c : 0, l === "-" ? (r += h, a += c) : l === "+" && (r -= h, a -= c), new Date(Date.UTC(s, i, n, r, a, o));
}
}
function bn(d, {
scale: t = 1,
rotation: e = 0
}) {
const {
width: s,
height: i
} = d.attributes.style, n = [0, 0, parseInt(s), parseInt(i)];
return new ke({
viewBox: n,
userUnit: 1,
scale: t,
rotation: e
});
}
function Me(d) {
if (d.startsWith("#")) {
const t = parseInt(d.slice(1), 16);
return [(t & 16711680) >> 16, (t & 65280) >> 8, t & 255];
}
return d.startsWith("rgb(") ? d.slice(4, -1).split(",").map((t) => parseInt(t)) : d.startsWith("rgba(") ? d.slice(5, -1).split(",").map((t) => parseInt(t)).slice(0, 3) : (L(`Not a valid color format: "${d}"`), [0, 0, 0]);
}
function yn(d) {
const t = document.createElement("span");
t.style.visibility = "hidden", t.style.colorScheme = "only light", document.body.append(t);
for (const e of d.keys()) {
t.style.color = e;
const s = window.getComputedStyle(t).color;
d.set(e, Me(s));
}
t.remove();
}
function K(d) {
const {
a: t,
b: e,
c: s,
d: i,
e: n,
f: r
} = d.getTransform();
return [t, e, s, i, n, r];
}
function Tt(d) {
const {
a: t,
b: e,
c: s,
d: i,
e: n,
f: r
} = d.getTransform().invertSelf();
return [t, e, s, i, n, r];
}
function qt(d, t, e = !1, s = !0) {
if (t instanceof ke) {
const {
pageWidth: i,
pageHeight: n
} = t.rawDims, {
style: r
} = d, a = ht.isCSSRoundSupported, o = `var(--total-scale-factor) * ${i}px`, l = `var(--total-scale-factor) * ${n}px`, h = a ? `round(down, ${o}, var(--scale-round-x))` : `calc(${o})`, c = a ? `round(down, ${l}, var(--scale-round-y))` : `calc(${l})`;
!e || t.rotation % 180 === 0 ? (r.width = h, r.height = c) : (r.width = c, r.height = h);
}
s && d.setAttribute("data-main-rotation", t.rotation);
}
class Rt {
constructor() {
const {
pixelRatio: t
} = Rt;
this.sx = t, this.sy = t;
}
get scaled() {
return this.sx !== 1 || this.sy !== 1;
}
get symmetric() {
return this.sx === this.sy;
}
limitCanvas(t, e, s, i, n = -1) {
let r = 1 / 0, a = 1 / 0, o = 1 / 0;
s = Rt.capPixels(s, n), s > 0 && (r = Math.sqrt(s / (t * e))), i !== -1 && (a = i / t, o = i / e);
const l = Math.min(r, a, o);
return this.sx > l || this.sy > l ? (this.sx = l, this.sy = l, !0) : !1;
}
static get pixelRatio() {
return globalThis.devicePixelRatio || 1;
}
static capPixels(t, e) {
if (e >= 0) {
const s = Math.ceil(window.screen.availWidth * window.screen.availHeight * this.pixelRatio ** 2 * (1 + e / 100));
return t > 0 ? Math.min(t, s) : s;
}
return t;
}
}
const As = ["image/apng", "image/avif", "image/bmp", "image/gif", "image/jpeg", "image/png", "image/svg+xml", "image/webp", "image/x-icon"];
class An {
static get isDarkMode() {
return I(this, "isDarkMode", !!window?.matchMedia?.("(prefers-color-scheme: dark)").matches);
}
}
class wn {
static get commentForegroundColor() {
const t = document.createElement("span");
t.classList.add("comment", "sidebar");
const {
style: e
} = t;
e.width = e.height = "0", e.display = "none", e.color = "var(--comment-fg-color)", document.body.append(t);
const {
color: s
} = window.getComputedStyle(t);
return t.remove(), I(this, "commentForegroundColor", Me(s));
}
}
function vn(d, t, e, s) {
s = Math.min(Math.max(s ?? 1, 0), 1);
const i = 255 * (1 - s);
return d = Math.round(d * s + i), t = Math.round(t * s + i), e = Math.round(e * s + i), [d, t, e];
}
function Ks(d, t) {
const e = d[0] / 255, s = d[1] / 255, i = d[2] / 255, n = Math.max(e, s, i), r = Math.min(e, s, i), a = (n + r) / 2;
if (n === r)
t[0] = t[1] = 0;
else {
const o = n - r;
switch (t[1] = a < 0.5 ? o / (n + r) : o / (2 - n - r), n) {
case e:
t[0] = ((s - i) / o + (s < i ? 6 : 0)) * 60;
break;
case s:
t[0] = ((i - e) / o + 2) * 60;
break;
case i:
t[0] = ((e - s) / o + 4) * 60;
break;
}
}
t[2] = a;
}
function ws(d, t) {
const e = d[0], s = d[1], i = d[2], n = (1 - Math.abs(2 * i - 1)) * s, r = n * (1 - Math.abs(e / 60 % 2 - 1)), a = i - n / 2;
switch (Math.floor(e / 60)) {
case 0:
t[0] = n + a, t[1] = r + a, t[2] = a;
break;
case 1:
t[0] = r + a, t[1] = n + a, t[2] = a;
break;
case 2:
t[0] = a, t[1] = n + a, t[2] = r + a;
break;
case 3:
t[0] = a, t[1] = r + a, t[2] = n + a;
break;
case 4:
t[0] = r + a, t[1] = a, t[2] = n + a;
break;
case 5:
case 6:
t[0] = n + a, t[1] = a, t[2] = r + a;
break;
}
}
function Qs(d) {
return d <= 0.03928 ? d / 12.92 : ((d + 0.055) / 1.055) ** 2.4;
}
function Js(d, t, e) {
ws(d, e), e.map(Qs);
const s = 0.2126 * e[0] + 0.7152 * e[1] + 0.0722 * e[2];
ws(t, e), e.map(Qs);
const i = 0.2126 * e[0] + 0.7152 * e[1] + 0.0722 * e[2];
return s > i ? (s + 0.05) / (i + 0.05) : (i + 0.05) / (s + 0.05);
}
const Zs = /* @__PURE__ */ new Map();
function _n(d, t) {
const e = d[0] + d[1] * 256 + d[2] * 65536 + t[0] * 16777216 + t[1] * 4294967296 + t[2] * 1099511627776;
let s = Zs.get(e);
if (s)
return s;
const i = new Float32Array(9), n = i.subarray(0, 3), r = i.subarray(3, 6);
Ks(d, r);
const a = i.subarray(6, 9);
Ks(t, a);
const o = a[2] < 0.5, l = o ? 12 : 4.5;
if (r[2] = o ? Math.sqrt(r[2]) : 1 - Math.sqrt(1 - r[2]), Js(r, a, n) < l) {
let h, c;
o ? (h = r[2], c = 1) : (h = 0, c = r[2]);
const u = 5e-3;
for (; c - h > u; ) {
const f = r[2] = (h + c) / 2;
o === Js(r, a, n) < l ? h = f : c = f;
}
r[2] = o ? c : h;
}
return ws(r, n), s = P.makeHexColor(Math.round(n[0] * 255), Math.round(n[1] * 255), Math.round(n[2] * 255)), Zs.set(e, s), s;
}
function Ci({
html: d,
dir: t,
className: e
}, s) {
const i = document.createDocumentFragment();
if (typeof d == "string") {
const n = document.createElement("p");
n.dir = t || "auto";
const r = d.split(/(?:\r\n?|\n)/);
for (let a = 0, o = r.length; a < o; ++a) {
const l = r[a];
n.append(document.createTextNode(l)), a < o - 1 && n.append(document.createElement("br"));
}
i.append(n);
} else
Ei.render({
xfaHtml: d,
div: i,
intent: "richText"
});
i.firstElementChild.classList.add("richText", e), s.append(i);
}
function xi(d) {
const t = new Path2D();
if (!d)
return t;
for (let e = 0, s = d.length; e < s; )
switch (d[e++]) {
case ue.moveTo:
t.moveTo(d[e++], d[e++]);
break;
case ue.lineTo:
t.lineTo(d[e++], d[e++]);
break;
case ue.curveTo:
t.bezierCurveTo(d[e++], d[e++], d[e++], d[e++], d[e++], d[e++]);
break;
case ue.quadraticCurveTo:
t.quadraticCurveTo(d[e++], d[e++], d[e++], d[e++]);
break;
case ue.closePath:
t.closePath();
break;
default:
L(`Unrecognized drawing path operator: ${d[e - 1]}`);
break;
}
return t;
}
class we {
#t = null;
#e = null;
#i;
#s = null;
#a = null;
#r = null;
#n = null;
#o = null;
static #h = null;
constructor(t) {
this.#i = t, we.#h ||= Object.freeze({
freetext: "pdfjs-editor-remove-freetext-button",
highlight: "pdfjs-editor-remove-highlight-button",
ink: "pdfjs-editor-remove-ink-button",
stamp: "pdfjs-editor-remove-stamp-button",
signature: "pdfjs-editor-remove-signature-button"
});
}
render() {
const t = this.#t = document.createElement("div");
t.classList.add("editToolbar", "hidden"), t.setAttribute("role", "toolbar");
const e = this.#i._uiManager._signal;
e instanceof AbortSignal && !e.aborted && (t.addEventListener("contextmenu", St, {
signal: e
}), t.addEventListener("pointerdown", we.#l, {
signal: e
}));
const s = this.#s = document.createElement("div");
s.className = "buttons", t.append(s);
const i = this.#i.toolbarPosition;
if (i) {
const {
style: n
} = t, r = this.#i._uiManager.direction === "ltr" ? 1 - i[0] : i[0];
n.insetInlineEnd = `${100 * r}%`, n.top = `calc(${100 * i[1]}% + var(--editor-toolbar-vert-offset))`;
}
return t;
}
get div() {
return this.#t;
}
static #l(t) {
t.stopPropagation();
}
#u(t) {
this.#i._focusEventsAllowed = !1, J(t);
}
#d(t) {
this.#i._focusEventsAllowed = !0, J(t);
}
#f(t) {
const e = this.#i._uiManager._signal;
return !(e instanceof AbortSignal) || e.aborted ? !1 : (t.addEventListener("focusin", this.#u.bind(this), {
capture: !0,
signal: e
}), t.addEventListener("focusout", this.#d.bind(this), {
capture: !0,
signal: e
}), t.addEventListener("contextmenu", St, {
signal: e
}), !0);
}
hide() {
this.#t.classList.add("hidden"), this.#e?.hideDropdown();
}
show() {
this.#t.classList.remove("hidden"), this.#a?.shown(), this.#r?.shown();
}
addDeleteButton() {
const {
editorType: t,
_uiManager: e
} = this.#i, s = document.createElement("button");
s.classList.add("basic", "deleteButton"), s.tabIndex = 0, s.setAttribute("data-l10n-id", we.#h[t]), this.#f(s) && s.addEventListener("click", (i) => {
e.delete();
}, {
signal: e._signal
}), this.#s.append(s);
}
get #m() {
const t = document.createElement("div");
return t.className = "divider", t;
}
async addAltText(t) {
const e = await t.render();
this.#f(e), this.#s.append(e, this.#m), this.#a = t;
}
addComment(t, e = null) {
if (this.#r)
return;
const s = t.renderForToolbar();
if (!s)
return;
this.#f(s);
const i = this.#n = this.#m;
e ? (this.#s.insertBefore(s, e), this.#s.insertBefore(i, e)) : this.#s.append(s, i), this.#r = t, t.toolbar = this;
}
addColorPicker(t) {
if (this.#e)
return;
this.#e = t;
const e = t.renderButton();
this.#f(e), this.#s.append(e, this.#m);
}
async addEditSignatureButton(t) {
const e = this.#o = await t.renderEditButton(this.#i);
this.#f(e), this.#s.append(e, this.#m);
}
removeButton(t) {
t === "comment" && (this.#r?.removeToolbarCommentButton(), this.#r = null, this.#n?.remove(), this.#n = null);
}
async addButton(t, e) {
switch (t) {
case "colorPicker":
e && this.addColorPicker(e);
break;
case "altText":
e && await this.addAltText(e);
break;
case "editSignature":
e && await this.addEditSignatureButton(e);
break;
case "delete":
this.addDeleteButton();
break;
case "comment":
e && this.addComment(e);
break;
}
}
async addButtonBefore(t, e, s) {
if (!e && t === "comment")
return;
const i = this.#s.querySelector(s);
i && t === "comment" && this.addComment(e, i);
}
updateEditSignatureButton(t) {
this.#o && (this.#o.title = t);
}
remove() {
this.#t.remove(), this.#e?.destroy(), this.#e = null;
}
}
class Sn {
#t = null;
#e = null;
#i;
constructor(t) {
this.#i = t;
}
#s() {
const t = this.#e = document.createElement("div");
t.className = "editToolbar", t.setAttribute("role", "toolbar");
const e = this.#i._signal;
e instanceof AbortSignal && !e.aborted && t.addEventListener("contextmenu", St, {
signal: e
});
const s = this.#t = document.createElement("div");
return s.className = "buttons", t.append(s), this.#i.hasCommentManager() && this.#r("commentButton", "pdfjs-comment-floating-button", "pdfjs-comment-floating-button-label", () => {
this.#i.commentSelection("floating_button");
}), this.#r("highlightButton", "pdfjs-highlight-floating-button1", "pdfjs-highlight-floating-button-label", () => {
this.#i.highlightSelection("floating_button");
}), t;
}
#a(t, e) {
let s = 0, i = 0;
for (const n of t) {
const r = n.y + n.height;
if (r < s)
continue;
const a = n.x + (e ? n.width : 0);
if (r > s) {
i = a, s = r;
continue;
}
e ? a > i && (i = a) : a < i && (i = a);
}
return [e ? 1 - i : i, s];
}
show(t, e, s) {
const [i, n] = this.#a(e, s), {
style: r
} = this.#e ||= this.#s();
t.append(this.#e), r.insetInlineEnd = `${100 * i}%`, r.top = `calc(${100 * n}% + var(--editor-toolbar-vert-offset))`;
}
hide() {
this.#e.remove();
}
#r(t, e, s, i) {
const n = document.createElement("button");
n.classList.add("basic", t), n.tabIndex = 0, n.setAttribute("data-l10n-id", e);
const r = document.createElement("span");
n.append(r), r.className = "visuallyHidden", r.setAttribute("data-l10n-id", s);
const a = this.#i._signal;
a instanceof AbortSignal && !a.aborted && (n.addEventListener("contextmenu", St, {
signal: a
}), n.addEventListener("click", i, {
signal: a
})), this.#t.append(n);
}
}
function Ti(d, t, e) {
for (const s of e)
t.addEventListener(s, d[s].bind(d));
}
class H {
static #t = NaN;
static #e = null;
static #i = NaN;
static #s = null;
static initializeAndAddPointerId(t) {
(H.#e ||= /* @__PURE__ */ new Set()).add(t);
}
static setPointer(t, e) {
H.#t ||= e, H.#s ??= t;
}
static setTimeStamp(t) {
H.#i = t;
}
static isSamePointerId(t) {
return H.#t === t;
}
static isSamePointerIdOrRemove(t) {
return H.#t === t ? !0 : (H.#e?.delete(t), !1);
}
static isSamePointerType(t) {
return H.#s === t;
}
static isInitializedAndDifferentPointerType(t) {
return H.#s !== null && !H.isSamePointerType(t);
}
static isSameTimeStamp(t) {
return H.#i === t;
}
static isUsingMultiplePointers() {
return H.#e?.size >= 1;
}
static clearPointerType() {
H.#s = null;
}
static clearPointerIds() {
H.#t = NaN, H.#e = null;
}
static clearTimeStamp() {
H.#i = NaN;
}
}
class En {
#t = 0;
get id() {
return `${_e}${this.#t++}`;
}
}
class Rs {
#t = _i();
#e = 0;
#i = null;
static get _isSVGFittingCanvas() {
const t = 'data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 1 1" width="1" height="1" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" style="fill:red;"/></svg>', s = new OffscreenCanvas(1, 3).getContext("2d", {
willReadFrequently: !0
}), i = new Image();
i.src = t;
const n = i.decode().then(() => (s.drawImage(i, 0, 0, 1, 1, 0, 0, 1, 3), new Uint32Array(s.getImageData(0, 0, 1, 1).data.buffer)[0] === 0));
return I(this, "_isSVGFittingCanvas", n);
}
async #s(t, e) {
this.#i ||= /* @__PURE__ */ new Map();
let s = this.#i.get(t);
if (s === null)
return null;
if (s?.bitmap)
return s.refCounter += 1, s;
try {
s ||= {
bitmap: null,
id: `image_${this.#t}_${this.#e++}`,
refCounter: 0,
isSvg: !1
};
let i;
if (typeof e == "string" ? (s.url = e, i = await Pe(e, "blob")) : e instanceof File ? i = s.file = e : e instanceof Blob && (i = e), i.type === "image/svg+xml") {
const n = Rs._isSVGFittingCanvas, r = new FileReader(), a = new Image(), o = new Promise((l, h) => {
a.onload = () => {
s.bitmap = a, s.isSvg = !0, l();
}, r.onload = async () => {
const c = s.svgUrl = r.result;
a.src = await n ? `${c}#svgView(preserveAspectRatio(none))` : c;
}, a.onerror = r.onerror = h;
});
r.readAsDataURL(i), await o;
} else
s.bitmap = await createImageBitmap(i);
s.refCounter = 1;
} catch (i) {
L(i), s = null;
}
return this.#i.set(t, s), s && this.#i.set(s.id, s), s;
}
async getFromFile(t) {
const {
lastModified: e,
name: s,
size: i,
type: n
} = t;
return this.#s(`${e}_${s}_${i}_${n}`, t);
}
async getFromUrl(t) {
return this.#s(t, t);
}
async getFromBlob(t, e) {
const s = await e;
return this.#s(t, s);
}
async getFromId(t) {
this.#i ||= /* @__PURE__ */ new Map();
const e = this.#i.get(t);
if (!e)
return null;
if (e.bitmap)
return e.refCounter += 1, e;
if (e.file)
return this.getFromFile(e.file);
if (e.blobPromise) {
const {
blobPromise: s
} = e;
return delete e.blobPromise, this.getFromBlob(e.id, s);
}
return this.getFromUrl(e.url);
}
getFromCanvas(t, e) {
this.#i ||= /* @__PURE__ */ new Map();
let s = this.#i.get(t);
if (s?.bitmap)
return s.refCounter += 1, s;
const i = new OffscreenCanvas(e.width, e.height);
return i.getContext("2d").drawImage(e, 0, 0), s = {
bitmap: i.transferToImageBitmap(),
id: `image_${this.#t}_${this.#e++}`,
refCounter: 1,
isSvg: !1
}, this.#i.set(t, s), this.#i.set(s.id, s), s;
}
getSvgUrl(t) {
const e = this.#i.get(t);
return e?.isSvg ? e.svgUrl : null;
}
deleteId(t) {
this.#i ||= /* @__PURE__ */ new Map();
const e = this.#i.get(t);
if (!e || (e.refCounter -= 1, e.refCounter !== 0))
return;
const {
bitmap: s
} = e;
if (!e.url && !e.file) {
const i = new OffscreenCanvas(s.width, s.height);
i.getContext("bitmaprenderer").transferFromImageBitmap(s), e.blobPromise = i.convertToBlob();
}
s.close?.(), e.bitmap = null;
}
isValidId(t) {
return t.startsWith(`image_${this.#t}_`);
}
}
class Cn {
#t = [];
#e = !1;
#i;
#s = -1;
constructor(t = 128) {
this.#i = t;
}
add({
cmd: t,
undo: e,
post: s,
mustExec: i,
type: n = NaN,
overwriteIfSameType: r = !1,
keepUndo: a = !1
}) {
if (i && t(), this.#e)
return;
const o = {
cmd: t,
undo: e,
post: s,
type: n
};
if (this.#s === -1) {
this.#t.length > 0 && (this.#t.length = 0), this.#s = 0, this.#t.push(o);
return;
}
if (r && this.#t[this.#s].type === n) {
a && (o.undo = this.#t[this.#s].undo), this.#t[this.#s] = o;
return;
}
const l = this.#s + 1;
l === this.#i ? this.#t.splice(0, 1) : (this.#s = l, l < this.#t.length && this.#t.splice(l)), this.#t.push(o);
}
undo() {
if (this.#s === -1)
return;
this.#e = !0;
const {
undo: t,
post: e
} = this.#t[this.#s];
t(), e?.(), this.#e = !1, this.#s -= 1;
}
redo() {
if (this.#s < this.#t.length - 1) {
this.#s += 1, this.#e = !0;
const {
cmd: t,
post: e
} = this.#t[this.#s];
t(), e?.(), this.#e = !1;
}
}
hasSomethingToUndo() {
return this.#s !== -1;
}
hasSomethingToRedo() {
return this.#s < this.#t.length - 1;
}
cleanType(t) {
if (this.#s !== -1) {
for (let e = this.#s; e >= 0; e--)
if (this.#t[e].type !== t) {
this.#t.splice(e + 1, this.#s - e), this.#s = e;
return;
}
this.#t.length = 0, this.#s = -1;
}
}
destroy() {
this.#t = null;
}
}
class Re {
constructor(t) {
this.buffer = [], this.callbacks = /* @__PURE__ */ new Map(), this.allKeys = /* @__PURE__ */ new Set();
const {
isMac: e
} = ht.platform;
for (const [s, i, n = {}] of t)
for (const r of s) {
const a = r.startsWith("mac+");
e && a ? (this.callbacks.set(r.slice(4), {
callback: i,
options: n
}), this.allKeys.add(r.split("+").at(-1))) : !e && !a && (this.callbacks.set(r, {
callback: i,
options: n
}), this.allKeys.add(r.split("+").at(-1)));
}
}
#t(t) {
t.altKey && this.buffer.push("alt"), t.ctrlKey && this.buffer.push("ctrl"), t.metaKey && this.buffer.push("meta"), t.shiftKey && this.buffer.push("shift"), this.buffer.push(t.key);
const e = this.buffer.join("+");
return this.buffer.length = 0, e;
}
exec(t, e) {
if (!this.allKeys.has(e.key))
return;
const s = this.callbacks.get(this.#t(e));
if (!s)
return;
const {
callback: i,
options: {
bubbles: n = !1,
args: r = [],
checker: a = null
}
} = s;
a && !a(t, e) || (i.bind(t, ...r, e)(), n || J(e));
}
}
class Ds {
static _colorsMapping = /* @__PURE__ */ new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]);
get _colors() {
const t = /* @__PURE__ */ new Map([["CanvasText", null], ["Canvas", null]]);
return yn(t), I(this, "_colors", t);
}
convert(t) {
const e = Me(t);
if (!window.matchMedia("(forced-colors: active)").matches)
return e;
for (const [s, i] of this._colors)
if (i.every((n, r) => n === e[r]))
return Ds._colorsMapping.get(s);
return e;
}
getHexCode(t) {
const e = this._colors.get(t);
return e ? P.makeHexColor(...e) : t;
}
}
class zt {
#t = new AbortController();
#e = null;
#i = null;
#s = /* @__PURE__ */ new Map();
#a = /* @__PURE__ */ new Map();
#r = null;
#n = null;
#o = null;
#h = new Cn();
#l = null;
#u = null;
#d = null;
#f = 0;
#m = /* @__PURE__ */ new Set();
#g = null;
#c = null;
#p = /* @__PURE__ */ new Set();
_editorUndoBar = null;
#b = !1;
#A = !1;
#y = !1;
#C = null;
#S = null;
#v = null;
#T = null;
#w = !1;
#E = null;
#M = new En();
#P = !1;
#k = !1;
#N = !1;
#D = null;
#I = null;
#B = null;
#F = null;
#G = null;
#x = F.NONE;
#_ = /* @__PURE__ */ new Set();
#L = null;
#U = null;
#$ = null;
#X = null;
#W = null;
#q = {
isEditing: !1,
isEmpty: !0,
hasSomethingToUndo: !1,
hasSomethingToRedo: !1,
hasSelectedEditor: !1,
hasSelectedText: !1
};
#z = [0, 0];
#O = null;
#V = null;
#J = null;
#Z = null;
#H = null;
static TRANSLATE_SMALL = 1;
static TRANSLATE_BIG = 10;
static get _keyboardManager() {
const t = zt.prototype, e = (r) => r.#V.contains(document.activeElement) && document.activeElement.tagName !== "BUTTON" && r.hasSomethingToControl(), s = (r, {
target: a
}) => {
if (a instanceof HTMLInputElement) {
const {
type: o
} = a;
return o !== "text" && o !== "number";
}
return !0;
}, i = this.TRANSLATE_SMALL, n = this.TRANSLATE_BIG;
return I(this, "_keyboardManager", new Re([[["ctrl+a", "mac+meta+a"], t.selectAll, {
checker: s
}], [["ctrl+z", "mac+meta+z"], t.undo, {
checker: s
}], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], t.redo, {
checker: s
}], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], t.delete, {
checker: s
}], [["Enter", "mac+Enter"], t.addNewEditorFromKeyboard, {
checker: (r, {
target: a
}) => !(a instanceof HTMLButtonElement) && r.#V.contains(a) && !r.isEnterHandled
}], [[" ", "mac+ "], t.addNewEditorFromKeyboard, {
checker: (r, {
target: a
}) => !(a instanceof HTMLButtonElement) && r.#V.contains(document.activeElement)
}], [["Escape", "mac+Escape"], t.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], t.translateSelectedEditors, {
args: [-i, 0],
checker: e
}], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], t.translateSelectedEditors, {
args: [-n, 0],
checker: e
}], [["ArrowRight", "mac+ArrowRight"], t.translateSelectedEditors, {
args: [i, 0],
checker: e
}], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], t.translateSelectedEditors, {
args: [n, 0],
checker: e
}], [["ArrowUp", "mac+ArrowUp"], t.translateSelectedEditors, {
args: [0, -i],
checker: e
}], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], t.translateSelectedEditors, {
args: [0, -n],
checker: e
}], [["ArrowDown", "mac+ArrowDown"], t.translateSelectedEditors, {
args: [0, i],
checker: e
}], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], t.translateSelectedEditors, {
args: [0, n],
checker: e
}]]));
}
constructor(t, e, s, i, n, r, a, o, l, h, c, u, f, g, p, b) {
const m = this._signal = this.#t.signal;
this.#V = t, this.#J = e, this.#Z = s, this.#r = i, this.#l = n, this.#U = r, this.#W = o, this._eventBus = a, a._on("editingaction", this.onEditingAction.bind(this), {
signal: m
}), a._on("pagechanging", this.onPageChanging.bind(this), {
signal: m
}), a._on("scalechanging", this.onScaleChanging.bind(this), {
signal: m
}), a._on("rotationchanging", this.onRotationChanging.bind(this), {
signal: m
}), a._on("setpreference", this.onSetPreference.bind(this), {
signal: m
}), a._on("switchannotationeditorparams", (A) => this.updateParams(A.type, A.value), {
signal: m
}), window.addEventListener("pointerdown", () => {
this.#k = !0;
}, {
capture: !0,
signal: m
}), window.addEventListener("pointerup", () => {
this.#k = !1;
}, {
capture: !0,
signal: m
}), this.#at(), this.#ut(), this.#et(), this.#n = o.annotationStorage, this.#C = o.filterFactory, this.#$ = l, this.#T = h || null, this.#b = c, this.#A = u, this.#y = f, this.#G = g || null, this.viewParameters = {
realScale: he.PDF_TO_CSS_UNITS,
rotation: 0
}, this.isShiftKeyDown = !1, this._editorUndoBar = p || null, this._supportsPinchToZoom = b !== !1, n?.setSidebarUiManager(this);
}
destroy() {
this.#H?.resolve(), this.#H = null, this.#t?.abort(), this.#t = null, this._signal = null;
for (const t of this.#a.values())
t.destroy();
this.#a.clear(), this.#s.clear(), this.#p.clear(), this.#F?.clear(), this.#e = null, this.#_.clear(), this.#h.destroy(), this.#r?.destroy(), this.#l?.destroy(), this.#U?.destroy(), this.#E?.hide(), this.#E = null, this.#B?.destroy(), this.#B = null, this.#i = null, this.#S && (clearTimeout(this.#S), this.#S = null), this.#O && (clearTimeout(this.#O), this.#O = null), this._editorUndoBar?.destroy(), this.#W = null;
}
combinedSignal(t) {
return AbortSignal.any([this._signal, t.signal]);
}
get mlManager() {
return this.#G;
}
get useNewAltTextFlow() {
return this.#A;
}
get useNewAltTextWhenAddingImage() {
return this.#y;
}
get hcmFilter() {
return I(this, "hcmFilter", this.#$ ? this.#C.addHCMFilter(this.#$.foreground, this.#$.background) : "none");
}
get direction() {
return I(this, "direction", getComputedStyle(this.#V).direction);
}
get _highlightColors() {
return I(this, "_highlightColors", this.#T ? new Map(this.#T.split(",").map((t) => (t = t.split("=").map((e) => e.trim()), t[1] = t[1].toUpperCase(), t))) : null);
}
get highlightColors() {
const {
_highlightColors: t
} = this;
if (!t)
return I(this, "highlightColors", null);
const e = /* @__PURE__ */ new Map(), s = !!this.#$;
for (const [i, n] of t) {
const r = i.endsWith("_HCM");
if (s && r) {
e.set(i.replace("_HCM", ""), n);
continue;
}
!s && !r && e.set(i, n);
}
return I(this, "highlightColors", e);
}
get highlightColorNames() {
return I(this, "highlightColorNames", this.highlightColors ? new Map(Array.from(this.highlightColors, (t) => t.reverse())) : null);
}
getNonHCMColor(t) {
if (!this._highlightColors)
return t;
const e = this.highlightColorNames.get(t);
return this._highlightColors.get(e) || t;
}
getNonHCMColorName(t) {
return this.highlightColorNames.get(t) || t;
}
setCurrentDrawingSession(t) {
t ? (this.unselectAll(), this.disableUserSelect(!0)) : this.disableUserSelect(!1), this.#d = t;
}
setMainHighlightColorPicker(t) {
this.#B = t;
}
editAltText(t, e = !1) {
this.#r?.editAltText(this, t, e);
}
hasCommentManager() {
return !!this.#l;
}
editComment(t, e, s, i) {
this.#l?.showDialog(this, t, e, s, i);
}
selectComment(t, e) {
this.#a.get(t)?.getEditorByUID(e)?.toggleComment(!0, !0);
}
updateComment(t) {
this.#l?.updateComment(t.getData());
}
updatePopupColor(t) {
this.#l?.updatePopupColor(t);
}
removeComment(t) {
this.#l?.removeComments([t.uid]);
}
toggleComment(t, e, s = void 0) {
this.#l?.toggleCommentPopup(t, e, s);
}
makeCommentColor(t, e) {
return t && this.#l?.makeCommentColor(t, e) || null;
}
getCommentDialogElement() {
return this.#l?.dialogElement || null;
}
async waitForEditorsRendered(t) {
if (this.#a.has(t - 1))
return;
const {
resolve: e,
promise: s
} = Promise.withResolvers(), i = (n) => {
n.pageNumber === t && (this._eventBus._off("editorsrendered", i), e());
};
this._eventBus.on("editorsrendered", i), await s;
}
getSignature(t) {
this.#U?.getSignature({
uiManager: this,
editor: t
});
}
get signatureManager() {
return this.#U;
}
switchToMode(t, e) {
this._eventBus.on("annotationeditormodechanged", e, {
once: !0,
signal: this._signal
}), this._eventBus.dispatch("showannotationeditorui", {
source: this,
mode: t
});
}
setPreference(t, e) {
this._eventBus.dispatch("setpreference", {
source: this,
name: t,
value: e
});
}
onSetPreference({
name: t,
value: e
}) {
t === "enableNewAltTextWhenAddingImage" && (this.#y = e);
}
onPageChanging({
pageNumber: t
}) {
this.#f = t - 1;
}
focusMainContainer() {
this.#V.focus();
}
findParent(t, e) {
for (const s of this.#a.values()) {
const {
x: i,
y: n,
width: r,
height: a
} = s.div.getBoundingClientRect();
if (t >= i && t <= i + r && e >= n && e <= n + a)
return s;
}
return null;
}
disableUserSelect(t = !1) {
this.#J.classList.toggle("noUserSelect", t);
}
addShouldRescale(t) {
this.#p.add(t);
}
removeShouldRescale(t) {
this.#p.delete(t);
}
onScaleChanging({
scale: t
}) {
this.commitOrRemove(), this.viewParameters.realScale = t * he.PDF_TO_CSS_UNITS;
for (const e of this.#p)
e.onScaleChanging();
this.#d?.onScaleChanging();
}
onRotationChanging({
pagesRotation: t
}) {
this.commitOrRemove(), this.viewParameters.rotation = t;
}
#Q({
anchorNode: t
}) {
return t.nodeType === Node.TEXT_NODE ? t.parentElement : t;
}
#tt(t) {
const {
currentLayer: e
} = this;
if (e.hasTextLayer(t))
return e;
for (const s of this.#a.values())
if (s.hasTextLayer(t))
return s;
return null;
}
highlightSelection(t = "", e = !1) {
const s = document.getSelection();
if (!s || s.isCollapsed)
return;
const {
anchorNode: i,
anchorOffset: n,
focusNode: r,
focusOffset: a
} = s, o = s.toString(), h = this.#Q(s).closest(".textLayer"), c = this.getSelectionBoxes(h);
if (!c)
return;
s.empty();
const u = this.#tt(h), f = this.#x === F.NONE, g = () => {
const p = u?.createAndAddNewEditor({
x: 0,
y: 0
}, !1, {
methodOfCreation: t,
boxes: c,
anchorNode: i,
anchorOffset: n,
focusNode: r,
focusOffset: a,
text: o
});
f && this.showAllEditors("highlight", !0, !0), e && p?.editComment();
};
if (f) {
this.switchToMode(F.HIGHLIGHT, g);
return;
}
g();
}
commentSelection(t = "") {
this.highlightSelection(t, !0);
}
#nt() {
const t = document.getSelection();
if (!t || t.isCollapsed)
return;
const s = this.#Q(t).closest(".textLayer"), i = this.getSelectionBoxes(s);
i && (this.#E ||= new Sn(this), this.#E.show(s, i, this.direction === "ltr"));
}
getAndRemoveDataFromAnnotationStorage(t) {
if (!this.#n)
return null;
const e = `${_e}${t}`, s = this.#n.getRawValue(e);
return s && this.#n.remove(e), s;
}
addToAnnotationStorage(t) {
!t.isEmpty() && this.#n && !this.#n.has(t.id) && this.#n.setValue(t.id, t);
}
a11yAlert(t, e = null) {
const s = this.#Z;
s && (s.setAttribute("data-l10n-id", t), e ? s.setAttribute("data-l10n-args", JSON.stringify(e)) : s.removeAttribute("data-l10n-args"));
}
#rt() {
const t = document.getSelection();
if (!t || t.isCollapsed) {
this.#L && (this.#E?.hide(), this.#L = null, this.#R({
hasSelectedText: !1
}));
return;
}
const {
anchorNode: e
} = t;
if (e === this.#L)
return;
const i = this.#Q(t).closest(".textLayer");
if (!i) {
this.#L && (this.#E?.hide(), this.#L = null, this.#R({
hasSelectedText: !1
}));
return;
}
if (this.#E?.hide(), this.#L = e, this.#R({
hasSelectedText: !0
}), !(this.#x !== F.HIGHLIGHT && this.#x !== F.NONE) && (this.#x === F.HIGHLIGHT && this.showAllEditors("highlight", !0, !0), this.#w = this.isShiftKeyDown, !this.isShiftKeyDown)) {
const n = this.#x === F.HIGHLIGHT ? this.#tt(i) : null;
if (n?.toggleDrawing(), this.#k) {
const r = new AbortController(), a = this.combinedSignal(r), o = (l) => {
l.type === "pointerup" && l.button !== 0 || (r.abort(), n?.toggleDrawing(!0), l.type === "pointerup" && this.#Y("main_toolbar"));
};
window.addEventListener("pointerup", o, {
signal: a
}), window.addEventListener("blur", o, {
signal: a
});
} else
n?.toggleDrawing(!0), this.#Y("main_toolbar");
}
}
#Y(t = "") {
this.#x === F.HIGHLIGHT ? this.highlightSelection(t) : this.#b && this.#nt();
}
#at() {
document.addEventListener("selectionchange", this.#rt.bind(this), {
signal: this._signal
});
}
#ot() {
if (this.#v)
return;
this.#v = new AbortController();
const t = this.combinedSignal(this.#v);
window.addEventListener("focus", this.focus.bind(this), {
signal: t
}), window.addEventListener("blur", this.blur.bind(this), {
signal: t
});
}
#lt() {
this.#v?.abort(), this.#v = null;
}
blur() {
if (this.isShiftKeyDown = !1, this.#w && (this.#w = !1, this.#Y("main_toolbar")), !this.hasSelection)
return;
const {
activeElement: t
} = document;
for (const e of this.#_)
if (e.div.contains(t)) {
this.#I = [e, t], e._focusEventsAllowed = !1;
break;
}
}
focus() {
if (!this.#I)
return;
const [t, e] = this.#I;
this.#I = null, e.addEventListener("focusin", () => {
t._focusEventsAllowed = !0;
}, {
once: !0,
signal: this._signal
}), e.focus();
}
#et() {
if (this.#D)
return;
this.#D = new AbortController();
const t = this.combinedSignal(this.#D);
window.addEventListener("keydown", this.keydown.bind(this), {
signal: t
}), window.addEventListener("keyup", this.keyup.bind(this), {
signal: t
});
}
#ht() {
this.#D?.abort(), this.#D = null;
}
#ct() {
if (this.#u)
return;
this.#u = new AbortController();
const t = this.combinedSignal(this.#u);
document.addEventListener("copy", this.copy.bind(this), {
signal: t
}), document.addEventListener("cut", this.cut.bind(this), {
signal: t
}), document.addEventListener("paste", this.paste.bind(this), {
signal: t
});
}
#dt() {
this.#u?.abort(), this.#u = null;
}
#ut() {
const t = this._signal;
document.addEventListener("dragover", this.dragOver.bind(this), {
signal: t
}), document.addEventListener("drop", this.drop.bind(this), {
signal: t
});
}
addEditListeners() {
this.#et(), this.setEditingState(!0);
}
removeEditListeners() {
this.#ht(), this.setEditingState(!1);
}
dragOver(t) {
for (const {
type: e
} of t.dataTransfer.items)
for (const s of this.#c)
if (s.isHandlingMimeForPasting(e)) {
t.dataTransfer.dropEffect = "copy", t.preventDefault();
return;
}
}
drop(t) {
for (const e of t.dataTransfer.items)
for (const s of this.#c)
if (s.isHandlingMimeForPasting(e.type)) {
s.paste(e, this.currentLayer), t.preventDefault();
return;
}
}
copy(t) {
if (t.preventDefault(), this.#e?.commitOrRemove(), !this.hasSelection)
return;
const e = [];
for (const s of this.#_) {
const i = s.serialize(!0);
i && e.push(i);
}
e.length !== 0 && t.clipboardData.setData("application/pdfjs", JSON.stringify(e));
}
cut(t) {
this.copy(t), this.delete();
}
async paste(t) {
t.preventDefault();
const {
clipboardData: e
} = t;
for (const n of e.items)
for (const r of this.#c)
if (r.isHandlingMimeForPasting(n.type)) {
r.paste(n, this.currentLayer);
return;
}
let s = e.getData("application/pdfjs");
if (!s)
return;
try {
s = JSON.parse(s);
} catch (n) {
L(`paste: "${n.message}".`);
return;
}
if (!Array.isArray(s))
return;
this.unselectAll();
const i = this.currentLayer;
try {
const n = [];
for (const o of s) {
const l = await i.deserialize(o);
if (!l)
return;
n.push(l);
}
const r = () => {
for (const o of n)
this.#st(o);
this.#it(n);
}, a = () => {
for (const o of n)
o.remove();
};
this.addCommands({
cmd: r,
undo: a,
mustExec: !0
});
} catch (n) {
L(`paste: "${n.message}".`);
}
}
keydown(t) {
!this.isShiftKeyDown && t.key === "Shift" && (this.isShiftKeyDown = !0), this.#x !== F.NONE && !this.isEditorHandlingKeyboard && zt._keyboardManager.exec(this, t);
}
keyup(t) {
this.isShiftKeyDown && t.key === "Shift" && (this.isShiftKeyDown = !1, this.#w && (this.#w = !1, this.#Y("main_toolbar")));
}
onEditingAction({
name: t
}) {
switch (t) {
case "undo":
case "redo":
case "delete":
case "selectAll":
this[t]();
break;
case "highlightSelection":
this.highlightSelection("context_menu");
break;
case "commentSelection":
this.commentSelection("context_menu");
break;
}
}
#R(t) {
Object.entries(t).some(([s, i]) => this.#q[s] !== i) && (this._eventBus.dispatch("annotationeditorstateschanged", {
source: this,
details: Object.assign(this.#q, t)
}), this.#x === F.HIGHLIGHT && t.hasSelectedEditor === !1 && this.#j([[O.HIGHLIGHT_FREE, !0]]));
}
#j(t) {
this._eventBus.dispatch("annotationeditorparamschanged", {
source: this,
details: t
});
}
setEditingState(t) {
t ? (this.#ot(), this.#ct(), this.#R({
isEditing: this.#x !== F.NONE,
isEmpty: this.#K(),
hasSomethingToUndo: this.#h.hasSomethingToUndo(),
hasSomethingToRedo: this.#h.hasSomethingToRedo(),
hasSelectedEditor: !1
})) : (this.#lt(), this.#dt(), this.#R({
isEditing: !1
}), this.disableUserSelect(!1));
}
registerEditorTypes(t) {
if (!this.#c) {
this.#c = t;
for (const e of this.#c)
this.#j(e.defaultPropertiesToUpdate);
}
}
getId() {
return this.#M.id;
}
get currentLayer() {
return this.#a.get(this.#f);
}
getLayer(t) {
return this.#a.get(t);
}
get currentPageIndex() {
return this.#f;
}
addLayer(t) {
this.#a.set(t.pageIndex, t), this.#P ? t.enable() : t.disable();
}
removeLayer(t) {
this.#a.delete(t.pageIndex);
}
async updateMode(t, e = null, s = !1, i = !1, n = !1) {
if (this.#x !== t && !(this.#H && (await this.#H.promise, !this.#H))) {
if (this.#H = Promise.withResolvers(), this.#d?.commitOrRemove(), this.#x === F.POPUP && this.#l?.hideSidebar(), this.#l?.destroyPopup(), this.#x = t, t === F.NONE) {
this.setEditingState(!1), this.#pt();
for (const r of this.#s.values())
r.hideStandaloneCommentButton();
this._editorUndoBar?.hide(), this.toggleComment(null), this.#H.resolve();
return;
}
for (const r of this.#s.values())
r.addStandaloneCommentButton();
t === F.SIGNATURE && await this.#U?.loadSignatures(), this.setEditingState(!0), await this.#ft(), this.unselectAll();
for (const r of this.#a.values())
r.updateMode(t);
if (t === F.POPUP) {
this.#i ||= await this.#W.getAnnotationsByType(new Set(this.#c.map((o) => o._editorType)));
const r = /* @__PURE__ */ new Set(), a = [];
for (const o of this.#s.values()) {
const {
annotationElementId: l,
hasComment: h,
deleted: c
} = o;
l && r.add(l), h && !c && a.push(o.getData());
}
for (const o of this.#i) {
const {
id: l,
popupRef: h,
contentsObj: c
} = o;
h && c?.str && !r.has(l) && !this.#m.has(l) && a.push(o);
}
this.#l?.showSidebar(a);
}
if (!e) {
s && this.addNewEditorFromKeyboard(), this.#H.resolve();
return;
}
for (const r of this.#s.values())
r.uid === e ? (this.setSelected(r), n ? r.editComment() : i ? r.enterInEditMode() : r.focus()) : r.unselect();
this.#H.resolve();
}
}
addNewEditorFromKeyboard() {
this.currentLayer.canCreateNewEmptyEditor() && this.currentLayer.addNewEditor();
}
updateToolbar(t) {
t.mode !== this.#x && this._eventBus.dispatch("switchannotationeditormode", {
source: this,
...t
});
}
updateParams(t, e) {
if (this.#c) {
switch (t) {
case O.CREATE:
this.currentLayer.addNewEditor(e);
return;
case O.HIGHLIGHT_SHOW_ALL:
this._eventBus.dispatch("reporttelemetry", {
source: this,
details: {
type: "editing",
data: {
type: "highlight",
action: "toggle_visibility"
}
}
}), (this.#X ||= /* @__PURE__ */ new Map()).set(t, e), this.showAllEditors("highlight", e);
break;
}
if (this.hasSelection)
for (const s of this.#_)
s.updateParams(t, e);
else
for (const s of this.#c)
s.updateDefaultParams(t, e);
}
}
showAllEditors(t, e, s = !1) {
for (const n of this.#s.values())
n.editorType === t && n.show(e);
(this.#X?.get(O.HIGHLIGHT_SHOW_ALL) ?? !0) !== e && this.#j([[O.HIGHLIGHT_SHOW_ALL, e]]);
}
enableWaiting(t = !1) {
if (this.#N !== t) {
this.#N = t;
for (const e of this.#a.values())
t ? e.disableClick() : e.enableClick(), e.div.classList.toggle("waiting", t);
}
}
async #ft() {
if (!this.#P) {
this.#P = !0;
const t = [];
for (const e of this.#a.values())
t.push(e.enable());
await Promise.all(t);
for (const e of this.#s.values())
e.enable();
}
}
#pt() {
if (this.unselectAll(), this.#P) {
this.#P = !1;
for (const t of this.#a.values())
t.disable();
for (const t of this.#s.values())
t.disable();
}
}
*getEditors(t) {
for (const e of this.#s.values())
e.pageIndex === t && (yield e);
}
getEditor(t) {
return this.#s.get(t);
}
addEditor(t) {
this.#s.set(t.id, t);
}
removeEditor(t) {
t.div.contains(document.activeElement) && (this.#S && clearTimeout(this.#S), this.#S = setTimeout(() => {
this.focusMainContainer(), this.#S = null;
}, 0)), this.#s.delete(t.id), t.annotationElementId && this.#F?.delete(t.annotationElementId), this.unselect(t), (!t.annotationElementId || !this.#m.has(t.annotationElementId)) && this.#n?.remove(t.id);
}
addDeletedAnnotationElement(t) {
this.#m.add(t.annotationElementId), this.addChangedExistingAnnotation(t), t.deleted = !0;
}
isDeletedAnnotationElement(t) {
return this.#m.has(t);
}
removeDeletedAnnotationElement(t) {
this.#m.delete(t.annotationElementId), this.removeChangedExistingAnnotation(t), t.deleted = !1;
}
#st(t) {
const e = this.#a.get(t.pageIndex);
e ? e.addOrRebuild(t) : (this.addEditor(t), this.addToAnnotationStorage(t));
}
setActiveEditor(t) {
this.#e !== t && (this.#e = t, t && this.#j(t.propertiesToUpdate));
}
get #gt() {
let t = null;
for (t of this.#_)
;
return t;
}
updateUI(t) {
this.#gt === t && this.#j(t.propertiesToUpdate);
}
updateUIForDefaultProperties(t) {
this.#j(t.defaultPropertiesToUpdate);
}
toggleSelected(t) {
if (this.#_.has(t)) {
this.#_.delete(t), t.unselect(), this.#R({
hasSelectedEditor: this.hasSelection
});
return;
}
this.#_.add(t), t.select(), this.#j(t.propertiesToUpdate), this.#R({
hasSelectedEditor: !0
});
}
setSelected(t) {
this.updateToolbar({
mode: t.mode,
editId: t.uid
}), this.#d?.commitOrRemove();
for (const e of this.#_)
e !== t && e.unselect();
this.#_.clear(), this.#_.add(t), t.select(), this.#j(t.propertiesToUpdate), this.#R({
hasSelectedEditor: !0
});
}
isSelected(t) {
return this.#_.has(t);
}
get firstSelectedEditor() {
return this.#_.values().next().value;
}
unselect(t) {
t.unselect(), this.#_.delete(t), this.#R({
hasSelectedEditor: this.hasSelection
});
}
get hasSelection() {
return this.#_.size !== 0;
}
get isEnterHandled() {
return this.#_.size === 1 && this.firstSelectedEditor.isEnterHandled;
}
undo() {
this.#h.undo(), this.#R({
hasSomethingToUndo: this.#h.hasSomethingToUndo(),
hasSomethingToRedo: !0,
isEmpty: this.#K()
}), this._editorUndoBar?.hide();
}
redo() {
this.#h.redo(), this.#R({
hasSomethingToUndo: !0,
hasSomethingToRedo: this.#h.hasSomethingToRedo(),
isEmpty: this.#K()
});
}
addCommands(t) {
this.#h.add(t), this.#R({
hasSomethingToUndo: !0,
hasSomethingToRedo: !1,
isEmpty: this.#K()
});
}
cleanUndoStack(t) {
this.#h.cleanType(t);
}
#K() {
if (this.#s.size === 0)
return !0;
if (this.#s.size === 1)
for (const t of this.#s.values())
return t.isEmpty();
return !1;
}
delete() {
this.commitOrRemove();
const t = this.currentLayer?.endDrawingSession(!0);
if (!this.hasSelection && !t)
return;
const e = t ? [t] : [...this.#_], s = () => {
this._editorUndoBar?.show(i, e.length === 1 ? e[0].editorType : e.length);
for (const n of e)
n.remove();
}, i = () => {
for (const n of e)
this.#st(n);
};
this.addCommands({
cmd: s,
undo: i,
mustExec: !0
});
}
commitOrRemove() {
this.#e?.commitOrRemove();
}
hasSomethingToControl() {
return this.#e || this.hasSelection;
}
#it(t) {
for (const e of this.#_)
e.unselect();
this.#_.clear();
for (const e of t)
e.isEmpty() || (this.#_.add(e), e.select());
this.#R({
hasSelectedEditor: this.hasSelection
});
}
selectAll() {
for (const t of this.#_)
t.commit();
this.#it(this.#s.values());
}
unselectAll() {
if (!(this.#e && (this.#e.commitOrRemove(), this.#x !== F.NONE)) && !this.#d?.commitOrRemove() && this.hasSelection) {
for (const t of this.#_)
t.unselect();
this.#_.clear(), this.#R({
hasSelectedEditor: !1
});
}
}
translateSelectedEditors(t, e, s = !1) {
if (s || this.commitOrRemove(), !this.hasSelection)
return;
this.#z[0] += t, this.#z[1] += e;
const [i, n] = this.#z, r = [...this.#_], a = 1e3;
this.#O && clearTimeout(this.#O), this.#O = setTimeout(() => {
this.#O = null, this.#z[0] = this.#z[1] = 0, this.addCommands({
cmd: () => {
for (const o of r)
this.#s.has(o.id) && (o.translateInPage(i, n), o.translationDone());
},
undo: () => {
for (const o of r)
this.#s.has(o.id) && (o.translateInPage(-i, -n), o.translationDone());
},
mustExec: !1
});
}, a);
for (const o of r)
o.translateInPage(t, e), o.translationDone();
}
setUpDragSession() {
if (this.hasSelection) {
this.disableUserSelect(!0), this.#g = /* @__PURE__ */ new Map();
for (const t of this.#_)
this.#g.set(t, {
savedX: t.x,
savedY: t.y,
savedPageIndex: t.pageIndex,
newX: 0,
newY: 0,
newPageIndex: -1
});
}
}
endDragSession() {
if (!this.#g)
return !1;
this.disableUserSelect(!1);
const t = this.#g;
this.#g = null;
let e = !1;
for (const [{
x: i,
y: n,
pageIndex: r
}, a] of t)
a.newX = i, a.newY = n, a.newPageIndex = r, e ||= i !== a.savedX || n !== a.savedY || r !== a.savedPageIndex;
if (!e)
return !1;
const s = (i, n, r, a) => {
if (this.#s.has(i.id)) {
const o = this.#a.get(a);
o ? i._setParentAndPosition(o, n, r) : (i.pageIndex = a, i.x = n, i.y = r);
}
};
return this.addCommands({
cmd: () => {
for (const [i, {
newX: n,
newY: r,
newPageIndex: a
}] of t)
s(i, n, r, a);
},
undo: () => {
for (const [i, {
savedX: n,
savedY: r,
savedPageIndex: a
}] of t)
s(i, n, r, a);
},
mustExec: !0
}), !0;
}
dragSelectedEditors(t, e) {
if (this.#g)
for (const s of this.#g.keys())
s.drag(t, e);
}
rebuild(t) {
if (t.parent === null) {
const e = this.getLayer(t.pageIndex);
e ? (e.changeParent(t), e.addOrRebuild(t)) : (this.addEditor(t), this.addToAnnotationStorage(t), t.rebuild());
} else
t.parent.addOrRebuild(t);
}
get isEditorHandlingKeyboard() {
return this.getActive()?.shouldGetKeyboardEvents() || this.#_.size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents();
}
isActive(t) {
return this.#e === t;
}
getActive() {
return this.#e;
}
getMode() {
return this.#x;
}
isEditingMode() {
return this.#x !== F.NONE;
}
get imageManager() {
return I(this, "imageManager", new Rs());
}
getSelectionBoxes(t) {
if (!t)
return null;
const e = document.getSelection();
for (let l = 0, h = e.rangeCount; l < h; l++)
if (!t.contains(e.getRangeAt(l).commonAncestorContainer))
return null;
const {
x: s,
y: i,
width: n,
height: r
} = t.getBoundingClientRect();
let a;
switch (t.getAttribute("data-main-rotation")) {
case "90":
a = (l, h, c, u) => ({
x: (h - i) / r,
y: 1 - (l + c - s) / n,
width: u / r,
height: c / n
});
break;
case "180":
a = (l, h, c, u) => ({
x: 1 - (l + c - s) / n,
y: 1 - (h + u - i) / r,
width: c / n,
height: u / r
});
break;
case "270":
a = (l, h, c, u) => ({
x: 1 - (h + u - i) / r,
y: (l - s) / n,
width: u / r,
height: c / n
});
break;
default:
a = (l, h, c, u) => ({
x: (l - s) / n,
y: (h - i) / r,
width: c / n,
height: u / r
});
break;
}
const o = [];
for (let l = 0, h = e.rangeCount; l < h; l++) {
const c = e.getRangeAt(l);
if (!c.collapsed)
for (const {
x: u,
y: f,
width: g,
height: p
} of c.getClientRects())
g === 0 || p === 0 || o.push(a(u, f, g, p));
}
return o.length === 0 ? null : o;
}
addChangedExistingAnnotation({
annotationElementId: t,
id: e
}) {
(this.#o ||= /* @__PURE__ */ new Map()).set(t, e);
}
removeChangedExistingAnnotation({
annotationElementId: t
}) {
this.#o?.delete(t);
}
renderAnnotationElement(t) {
const e = this.#o?.get(t.data.id);
if (!e)
return;
const s = this.#n.getRawValue(e);
s && (this.#x === F.NONE && !s.hasBeenModified || s.renderAnnotationElement(t));
}
setMissingCanvas(t, e, s) {
const i = this.#F?.get(t);
i && (i.setCanvas(e, s), this.#F.delete(t));
}
addMissingCanvas(t, e) {
(this.#F ||= /* @__PURE__ */ new Map()).set(t, e);
}
}
class Mt {
#t = null;
#e = !1;
#i = null;
#s = null;
#a = null;
#r = null;
#n = !1;
#o = null;
#h = null;
#l = null;
#u = null;
#d = !1;
static #f = null;
static _l10n = null;
constructor(t) {
this.#h = t, this.#d = t._uiManager.useNewAltTextFlow, Mt.#f ||= Object.freeze({
added: "pdfjs-editor-new-alt-text-added-button",
"added-label": "pdfjs-editor-new-alt-text-added-button-label",
missing: "pdfjs-editor-new-alt-text-missing-button",
"missing-label": "pdfjs-editor-new-alt-text-missing-button-label",
review: "pdfjs-editor-new-alt-text-to-review-button",
"review-label": "pdfjs-editor-new-alt-text-to-review-button-label"
});
}
static initialize(t) {
Mt._l10n ??= t;
}
async render() {
const t = this.#i = document.createElement("button");
t.className = "altText", t.tabIndex = "0";
const e = this.#s = document.createElement("span");
t.append(e), this.#d ? (t.classList.add("new"), t.setAttribute("data-l10n-id", Mt.#f.missing), e.setAttribute("data-l10n-id", Mt.#f["missing-label"])) : (t.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-button"), e.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-button-label"));
const s = this.#h._uiManager._signal;
t.addEventListener("contextmenu", St, {
signal: s
}), t.addEventListener("pointerdown", (n) => n.stopPropagation(), {
signal: s
});
const i = (n) => {
n.preventDefault(), this.#h._uiManager.editAltText(this.#h), this.#d && this.#h._reportTelemetry({
action: "pdfjs.image.alt_text.image_status_label_clicked",
data: {
label: this.#m
}
});
};
return t.addEventListener("click", i, {
capture: !0,
signal: s
}), t.addEventListener("keydown", (n) => {
n.target === t && n.key === "Enter" && (this.#n = !0, i(n));
}, {
signal: s
}), await this.#g(), t;
}
get #m() {
return this.#t && "added" || this.#t === null && this.guessedText && "review" || "missing";
}
finish() {
this.#i && (this.#i.focus({
focusVisible: this.#n
}), this.#n = !1);
}
isEmpty() {
return this.#d ? this.#t === null : !this.#t && !this.#e;
}
hasData() {
return this.#d ? this.#t !== null || !!this.#l : this.isEmpty();
}
get guessedText() {
return this.#l;
}
async setGuessedText(t) {
this.#t === null && (this.#l = t, this.#u = await Mt._l10n.get("pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer", {
generatedAltText: t
}), this.#g());
}
toggleAltTextBadge(t = !1) {
if (!this.#d || this.#t) {
this.#o?.remove(), this.#o = null;
return;
}
if (!this.#o) {
const e = this.#o = document.createElement("div");
e.className = "noAltTextBadge", this.#h.div.append(e);
}
this.#o.classList.toggle("hidden", !t);
}
serialize(t) {
let e = this.#t;
return !t && this.#l === e && (e = this.#u), {
altText: e,
decorative: this.#e,
guessedText: this.#l,
textWithDisclaimer: this.#u
};
}
get data() {
return {
altText: this.#t,
decorative: this.#e
};
}
set data({
altText: t,
decorative: e,
guessedText: s,
textWithDisclaimer: i,
cancel: n = !1
}) {
s && (this.#l = s, this.#u = i), !(this.#t === t && this.#e === e) && (n || (this.#t = t, this.#e = e), this.#g());
}
toggle(t = !1) {
this.#i && (!t && this.#r && (clearTimeout(this.#r), this.#r = null), this.#i.disabled = !t);
}
shown() {
this.#h._reportTelemetry({
action: "pdfjs.image.alt_text.image_status_label_displayed",
data: {
label: this.#m
}
});
}
destroy() {
this.#i?.remove(), this.#i = null, this.#s = null, this.#a = null, this.#o?.remove(), this.#o = null;
}
async #g() {
const t = this.#i;
if (!t)
return;
if (this.#d) {
if (t.classList.toggle("done", !!this.#t), t.setAttribute("data-l10n-id", Mt.#f[this.#m]), this.#s?.setAttribute("data-l10n-id", Mt.#f[`${this.#m}-label`]), !this.#t) {
this.#a?.remove();
return;
}
} else {
if (!this.#t && !this.#e) {
t.classList.remove("done"), this.#a?.remove();
return;
}
t.classList.add("done"), t.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-edit-button");
}
let e = this.#a;
if (!e) {
this.#a = e = document.createElement("span"), e.className = "tooltip", e.setAttribute("role", "tooltip"), e.id = `alt-text-tooltip-${this.#h.id}`;
const i = 100, n = this.#h._uiManager._signal;
n.addEventListener("abort", () => {
clearTimeout(this.#r), this.#r = null;
}, {
once: !0
}), t.addEventListener("mouseenter", () => {
this.#r = setTimeout(() => {
this.#r = null, this.#a.classList.add("show"), this.#h._reportTelemetry({
action: "alt_text_tooltip"
});
}, i);
}, {
signal: n
}), t.addEventListener("mouseleave", () => {
this.#r && (clearTimeout(this.#r), this.#r = null), this.#a?.classList.remove("show");
}, {
signal: n
});
}
this.#e ? e.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-decorative-tooltip") : (e.removeAttribute("data-l10n-id"), e.textContent = this.#t), e.parentNode || t.append(e), this.#h.getElementForAltText()?.setAttribute("aria-describedby", e.id);
}
}
class Ie {
#t = null;
#e = null;
#i = !1;
#s = null;
#a = null;
#r = null;
#n = null;
#o = null;
#h = !1;
#l = null;
constructor(t) {
this.#s = t;
}
renderForToolbar() {
const t = this.#e = document.createElement("button");
return t.className = "comment", this.#u(t, !1);
}
renderForStandalone() {
const t = this.#t = document.createElement("button");
t.className = "annotationCommentButton";
const e = this.#s.commentButtonPosition;
if (e) {
const {
style: s
} = t;
s.insetInlineEnd = `calc(${100 * (this.#s._uiManager.direction === "ltr" ? 1 - e[0] : e[0])}% - var(--comment-button-dim))`, s.top = `calc(${100 * e[1]}% - var(--comment-button-dim))`;
const i = this.#s.commentButtonColor;
i && (s.backgroundColor = i);
}
return this.#u(t, !0);
}
focusButton() {
setTimeout(() => {
(this.#t ?? this.#e)?.focus();
}, 0);
}
onUpdatedColor() {
if (!this.#t)
return;
const t = this.#s.commentButtonColor;
t && (this.#t.style.backgroundColor = t), this.#s._uiManager.updatePopupColor(this.#s);
}
get commentButtonWidth() {
return (this.#t?.getBoundingClientRect().width ?? 0) / this.#s.parent.boundingClientRect.width;
}
get commentPopupPositionInLayer() {
if (this.#l)
return this.#l;
if (!this.#t)
return null;
const {
x: t,
y: e,
height: s
} = this.#t.getBoundingClientRect(), {
x: i,
y: n,
width: r,
height: a
} = this.#s.parent.boundingClientRect;
return [(t - i) / r, (e + s - n) / a];
}
set commentPopupPositionInLayer(t) {
this.#l = t;
}
hasDefaultPopupPosition() {
return this.#l === null;
}
removeStandaloneCommentButton() {
this.#t?.remove(), this.#t = null;
}
removeToolbarCommentButton() {
this.#e?.remove(), this.#e = null;
}
setCommentButtonStates({
selected: t,
hasPopup: e
}) {
this.#t && (this.#t.classList.toggle("selected", t), this.#t.ariaExpanded = e);
}
#u(t, e) {
if (!this.#s._uiManager.hasCommentManager())
return null;
t.tabIndex = "0", t.ariaHasPopup = "dialog", e ? (t.ariaControls = "commentPopup", t.setAttribute("data-l10n-id", "pdfjs-show-comment-button")) : (t.ariaControlsElements = [this.#s._uiManager.getCommentDialogElement()], t.setAttribute("data-l10n-id", "pdfjs-editor-add-comment-button"));
const s = this.#s._uiManager._signal;
if (!(s instanceof AbortSignal) || s.aborted)
return t;
t.addEventListener("contextmenu", St, {
signal: s
}), e && (t.addEventListener("focusin", (n) => {
this.#s._focusEventsAllowed = !1, J(n);
}, {
capture: !0,
signal: s
}), t.addEventListener("focusout", (n) => {
this.#s._focusEventsAllowed = !0, J(n);
}, {
capture: !0,
signal: s
})), t.addEventListener("pointerdown", (n) => n.stopPropagation(), {
signal: s
});
const i = (n) => {
n.preventDefault(), t === this.#e ? this.edit() : this.#s.toggleComment(!0);
};
return t.addEventListener("click", i, {
capture: !0,
signal: s
}), t.addEventListener("keydown", (n) => {
n.target === t && n.key === "Enter" && (this.#i = !0, i(n));
}, {
signal: s
}), t.addEventListener("pointerenter", () => {
this.#s.toggleComment(!1, !0);
}, {
signal: s
}), t.addEventListener("pointerleave", () => {
this.#s.toggleComment(!1, !1);
}, {
signal: s
}), t;
}
edit(t) {
const e = this.commentPopupPositionInLayer;
let s, i;
if (e)
[s, i] = e;
else {
[s, i] = this.#s.commentButtonPosition;
const {
width: h,
height: c,
x: u,
y: f
} = this.#s;
s = u + s * h, i = f + i * c;
}
const n = this.#s.parent.boundingClientRect, {
x: r,
y: a,
width: o,
height: l
} = n;
this.#s._uiManager.editComment(this.#s, r + s * o, a + i * l, {
...t,
parentDimensions: n
});
}
finish() {
this.#e && (this.#e.focus({
focusVisible: this.#i
}), this.#i = !1);
}
isDeleted() {
return this.#h || this.#n === "";
}
isEmpty() {
return this.#n === null;
}
hasBeenEdited() {
return this.isDeleted() || this.#n !== this.#a;
}
serialize() {
return this.data;
}
get data() {
return {
text: this.#n,
richText: this.#r,
date: this.#o,
deleted: this.isDeleted()
};
}
set data(t) {
if (t !== this.#n && (this.#r = null), t === null) {
this.#n = "", this.#h = !0;
return;
}
this.#n = t, this.#o = /* @__PURE__ */ new Date(), this.#h = !1;
}
setInitialText(t, e = null) {
this.#a = t, this.data = t, this.#o = null, this.#r = e;
}
shown() {
}
destroy() {
this.#e?.remove(), this.#e = null, this.#t?.remove(), this.#t = null, this.#n = "", this.#r = null, this.#o = null, this.#s = null, this.#i = !1, this.#h = !1;
}
}
class ts {
#t;
#e = !1;
#i = null;
#s;
#a;
#r;
#n;
#o = null;
#h;
#l = null;
#u;
#d = null;
constructor({
container: t,
isPinchingDisabled: e = null,
isPinchingStopped: s = null,
onPinchStart: i = null,
onPinching: n = null,
onPinchEnd: r = null,
signal: a
}) {
this.#t = t, this.#i = s, this.#s = e, this.#a = i, this.#r = n, this.#n = r, this.#u = new AbortController(), this.#h = AbortSignal.any([a, this.#u.signal]), t.addEventListener("touchstart", this.#f.bind(this), {
passive: !1,
signal: this.#h
});
}
get MIN_TOUCH_DISTANCE_TO_PINCH() {
return 35 / Rt.pixelRatio;
}
#f(t) {
if (this.#s?.())
return;
if (t.touches.length === 1) {
if (this.#o)
return;
const i = this.#o = new AbortController(), n = AbortSignal.any([this.#h, i.signal]), r = this.#t, a = {
capture: !0,
signal: n,
passive: !1
}, o = (l) => {
l.pointerType === "touch" && (this.#o?.abort(), this.#o = null);
};
r.addEventListener("pointerdown", (l) => {
l.pointerType === "touch" && (J(l), o(l));
}, a), r.addEventListener("pointerup", o, a), r.addEventListener("pointercancel", o, a);
return;
}
if (!this.#d) {
this.#d = new AbortController();
const i = AbortSignal.any([this.#h, this.#d.signal]), n = this.#t, r = {
signal: i,
capture: !1,
passive: !1
};
n.addEventListener("touchmove", this.#m.bind(this), r);
const a = this.#g.bind(this);
n.addEventListener("touchend", a, r), n.addEventListener("touchcancel", a, r), r.capture = !0, n.addEventListener("pointerdown", J, r), n.addEventListener("pointermove", J, r), n.addEventListener("pointercancel", J, r), n.addEventListener("pointerup", J, r), this.#a?.();
}
if (J(t), t.touches.length !== 2 || this.#i?.()) {
this.#l = null;
return;
}
let [e, s] = t.touches;
e.identifier > s.identifier && ([e, s] = [s, e]), this.#l = {
touch0X: e.screenX,
touch0Y: e.screenY,
touch1X: s.screenX,
touch1Y: s.screenY
};
}
#m(t) {
if (!this.#l || t.touches.length !== 2)
return;
J(t);
let [e, s] = t.touches;
e.identifier > s.identifier && ([e, s] = [s, e]);
const {
screenX: i,
screenY: n
} = e, {
screenX: r,
screenY: a
} = s, o = this.#l, {
touch0X: l,
touch0Y: h,
touch1X: c,
touch1Y: u
} = o, f = c - l, g = u - h, p = r - i, b = a - n, m = Math.hypot(p, b) || 1, A = Math.hypot(f, g) || 1;
if (!this.#e && Math.abs(A - m) <= ts.MIN_TOUCH_DISTANCE_TO_PINCH)
return;
if (o.touch0X = i, o.touch0Y = n, o.touch1X = r, o.touch1Y = a, !this.#e) {
this.#e = !0;
return;
}
const y = [(i + r) / 2, (n + a) / 2];
this.#r?.(y, A, m);
}
#g(t) {
t.touches.length >= 2 || (this.#d && (this.#d.abort(), this.#d = null, this.#n?.()), this.#l && (J(t), this.#l = null, this.#e = !1));
}
destroy() {
this.#u?.abort(), this.#u = null, this.#o?.abort(), this.#o = null;
}
}
class M {
#t = null;
#e = null;
#i = null;
#s = null;
#a = null;
#r = !1;
#n = null;
#o = "";
#h = null;
#l = null;
#u = null;
#d = null;
#f = null;
#m = "";
#g = !1;
#c = null;
#p = !1;
#b = !1;
#A = !1;
#y = null;
#C = 0;
#S = 0;
#v = null;
#T = null;
isSelected = !1;
_isCopy = !1;
_editToolbar = null;
_initialOptions = /* @__PURE__ */ Object.create(null);
_initialData = null;
_isVisible = !0;
_uiManager = null;
_focusEventsAllowed = !0;
static _l10n = null;
static _l10nResizer = null;
#w = !1;
#E = M._zIndex++;
static _borderLineWidth = -1;
static _colorManager = new Ds();
static _zIndex = 1;
static _telemetryTimeout = 1e3;
static get _resizerKeyboardManager() {
const t = M.prototype._resizeWithKeyboard, e = zt.TRANSLATE_SMALL, s = zt.TRANSLATE_BIG;
return I(this, "_resizerKeyboardManager", new Re([[["ArrowLeft", "mac+ArrowLeft"], t, {
args: [-e, 0]
}], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], t, {
args: [-s, 0]
}], [["ArrowRight", "mac+ArrowRight"], t, {
args: [e, 0]
}], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], t, {
args: [s, 0]
}], [["ArrowUp", "mac+ArrowUp"], t, {
args: [0, -e]
}], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], t, {
args: [0, -s]
}], [["ArrowDown", "mac+ArrowDown"], t, {
args: [0, e]
}], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], t, {
args: [0, s]
}], [["Escape", "mac+Escape"], M.prototype._stopResizingWithKeyboard]]));
}
constructor(t) {
this.parent = t.parent, this.id = t.id, this.width = this.height = null, this.pageIndex = t.parent.pageIndex, this.name = t.name, this.div = null, this._uiManager = t.uiManager, this.annotationElementId = null, this._willKeepAspectRatio = !1, this._initialOptions.isCentered = t.isCentered, this._structTreeParentId = null, this.annotationElementId = t.annotationElementId || null, this.creationDate = t.creationDate || /* @__PURE__ */ new Date(), this.modificationDate = t.modificationDate || null, this.canAddComment = !0;
const {
rotation: e,
rawDims: {
pageWidth: s,
pageHeight: i,
pageX: n,
pageY: r
}
} = this.parent.viewport;
this.rotation = e, this.pageRotation = (360 + e - this._uiManager.viewParameters.rotation) % 360, this.pageDimensions = [s, i], this.pageTranslation = [n, r];
const [a, o] = this.parentDimensions;
this.x = t.x / a, this.y = t.y / o, this.isAttachedToDOM = !1, this.deleted = !1;
}
get editorType() {
return Object.getPrototypeOf(this).constructor._type;
}
get mode() {
return Object.getPrototypeOf(this).constructor._editorType;
}
static get isDrawer() {
return !1;
}
static get _defaultLineColor() {
return I(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText"));
}
static deleteAnnotationElement(t) {
const e = new xn({
id: t.parent.getNextId(),
parent: t.parent,
uiManager: t._uiManager
});
e.annotationElementId = t.annotationElementId, e.deleted = !0, e._uiManager.addToAnnotationStorage(e);
}
static initialize(t, e) {
if (M._l10n ??= t, M._l10nResizer ||= Object.freeze({
topLeft: "pdfjs-editor-resizer-top-left",
topMiddle: "pdfjs-editor-resizer-top-middle",
topRight: "pdfjs-editor-resizer-top-right",
middleRight: "pdfjs-editor-resizer-middle-right",
bottomRight: "pdfjs-editor-resizer-bottom-right",
bottomMiddle: "pdfjs-editor-resizer-bottom-middle",
bottomLeft: "pdfjs-editor-resizer-bottom-left",
middleLeft: "pdfjs-editor-resizer-middle-left"
}), M._borderLineWidth !== -1)
return;
const s = getComputedStyle(document.documentElement);
M._borderLineWidth = parseFloat(s.getPropertyValue("--outline-width")) || 0;
}
static updateDefaultParams(t, e) {
}
static get defaultPropertiesToUpdate() {
return [];
}
static isHandlingMimeForPasting(t) {
return !1;
}
static paste(t, e) {
V("Not implemented");
}
get propertiesToUpdate() {
return [];
}
get _isDraggable() {
return this.#w;
}
set _isDraggable(t) {
this.#w = t, this.div?.classList.toggle("draggable", t);
}
get uid() {
return this.annotationElementId || this.id;
}
get isEnterHandled() {
return !0;
}
center() {
const [t, e] = this.pageDimensions;
switch (this.parentRotation) {
case 90:
this.x -= this.height * e / (t * 2), this.y += this.width * t / (e * 2);
break;
case 180:
this.x += this.width / 2, this.y += this.height / 2;
break;
case 270:
this.x += this.height * e / (t * 2), this.y -= this.width * t / (e * 2);
break;
default:
this.x -= this.width / 2, this.y -= this.height / 2;
break;
}
this.fixAndSetPosition();
}
addCommands(t) {
this._uiManager.addCommands(t);
}
get currentLayer() {
return this._uiManager.currentLayer;
}
setInBackground() {
this.div.style.zIndex = 0;
}
setInForeground() {
this.div.style.zIndex = this.#E;
}
setParent(t) {
t !== null ? (this.pageIndex = t.pageIndex, this.pageDimensions = t.pageDimensions) : (this.#O(), this.#d?.remove(), this.#d = null), this.parent = t;
}
focusin(t) {
this._focusEventsAllowed && (this.#g ? this.#g = !1 : this.parent.setSelected(this));
}
focusout(t) {
!this._focusEventsAllowed || !this.isAttachedToDOM || t.relatedTarget?.closest(`#${this.id}`) || (t.preventDefault(), this.parent?.isMultipleSelection || this.commitOrRemove());
}
commitOrRemove() {
this.isEmpty() ? this.remove() : this.commit();
}
commit() {
this.isInEditMode() && this.addToAnnotationStorage();
}
addToAnnotationStorage() {
this._uiManager.addToAnnotationStorage(this);
}
setAt(t, e, s, i) {
const [n, r] = this.parentDimensions;
[s, i] = this.screenToPageTranslation(s, i), this.x = (t + s) / n, this.y = (e + i) / r, this.fixAndSetPosition();
}
_moveAfterPaste(t, e) {
const [s, i] = this.parentDimensions;
this.setAt(t * s, e * i, this.width * s, this.height * i), this._onTranslated();
}
#M([t, e], s, i) {
[s, i] = this.screenToPageTranslation(s, i), this.x += s / t, this.y += i / e, this._onTranslating(this.x, this.y), this.fixAndSetPosition();
}
translate(t, e) {
this.#M(this.parentDimensions, t, e);
}
translateInPage(t, e) {
this.#c ||= [this.x, this.y, this.width, this.height], this.#M(this.pageDimensions, t, e), this.div.scrollIntoView({
block: "nearest"
});
}
translationDone() {
this._onTranslated(this.x, this.y);
}
drag(t, e) {
this.#c ||= [this.x, this.y, this.width, this.height];
const {
div: s,
parentDimensions: [i, n]
} = this;
if (this.x += t / i, this.y += e / n, this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {
const {
x: c,
y: u
} = this.div.getBoundingClientRect();
this.parent.findNewParent(this, c, u) && (this.x -= Math.floor(this.x), this.y -= Math.floor(this.y));
}
let {
x: r,
y: a
} = this;
const [o, l] = this.getBaseTranslation();
r += o, a += l;
const {
style: h
} = s;
h.left = `${(100 * r).toFixed(2)}%`, h.top = `${(100 * a).toFixed(2)}%`, this._onTranslating(r, a), s.scrollIntoView({
block: "nearest"
});
}
_onTranslating(t, e) {
}
_onTranslated(t, e) {
}
get _hasBeenMoved() {
return !!this.#c && (this.#c[0] !== this.x || this.#c[1] !== this.y);
}
get _hasBeenResized() {
return !!this.#c && (this.#c[2] !== this.width || this.#c[3] !== this.height);
}
getBaseTranslation() {
const [t, e] = this.parentDimensions, {
_borderLineWidth: s
} = M, i = s / t, n = s / e;
switch (this.rotation) {
case 90:
return [-i, n];
case 180:
return [i, n];
case 270:
return [i, -n];
default:
return [-i, -n];
}
}
get _mustFixPosition() {
return !0;
}
fixAndSetPosition(t = this.rotation) {
const {
div: {
style: e
},
pageDimensions: [s, i]
} = this;
let {
x: n,
y: r,
width: a,
height: o
} = this;
if (a *= s, o *= i, n *= s, r *= i, this._mustFixPosition)
switch (t) {
case 0:
n = ft(n, 0, s - a), r = ft(r, 0, i - o);
break;
case 90:
n = ft(n, 0, s - o), r = ft(r, a, i);
break;
case 180:
n = ft(n, a, s), r = ft(r, o, i);
break;
case 270:
n = ft(n, o, s), r = ft(r, 0, i - a);
break;
}
this.x = n /= s, this.y = r /= i;
const [l, h] = this.getBaseTranslation();
n += l, r += h, e.left = `${(100 * n).toFixed(2)}%`, e.top = `${(100 * r).toFixed(2)}%`, this.moveInDOM();
}
static #P(t, e, s) {
switch (s) {
case 90:
return [e, -t];
case 180:
return [-t, -e];
case 270:
return [-e, t];
default:
return [t, e];
}
}
screenToPageTranslation(t, e) {
return M.#P(t, e, this.parentRotation);
}
pageTranslationToScreen(t, e) {
return M.#P(t, e, 360 - this.parentRotation);
}
#k(t) {
switch (t) {
case 90: {
const [e, s] = this.pageDimensions;
return [0, -e / s, s / e, 0];
}
case 180:
return [-1, 0, 0, -1];
case 270: {
const [e, s] = this.pageDimensions;
return [0, e / s, -s / e, 0];
}
default:
return [1, 0, 0, 1];
}
}
get parentScale() {
return this._uiManager.viewParameters.realScale;
}
get parentRotation() {
return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;
}
get parentDimensions() {
const {
parentScale: t,
pageDimensions: [e, s]
} = this;
return [e * t, s * t];
}
setDims() {
const {
div: {
style: t
},
width: e,
height: s
} = this;
t.width = `${(100 * e).toFixed(2)}%`, t.height = `${(100 * s).toFixed(2)}%`;
}
getInitialTranslation() {
return [0, 0];
}
#N() {
if (this.#h)
return;
this.#h = document.createElement("div"), this.#h.classList.add("resizers");
const t = this._willKeepAspectRatio ? ["topLeft", "topRight", "bottomRight", "bottomLeft"] : ["topLeft", "topMiddle", "topRight", "middleRight", "bottomRight", "bottomMiddle", "bottomLeft", "middleLeft"], e = this._uiManager._signal;
for (const s of t) {
const i = document.createElement("div");
this.#h.append(i), i.classList.add("resizer", s), i.setAttribute("data-resizer-name", s), i.addEventListener("pointerdown", this.#D.bind(this, s), {
signal: e
}), i.addEventListener("contextmenu", St, {
signal: e
}), i.tabIndex = -1;
}
this.div.prepend(this.#h);
}
#D(t, e) {
e.preventDefault();
const {
isMac: s
} = ht.platform;
if (e.button !== 0 || e.ctrlKey && s)
return;
this.#i?.toggle(!1);
const i = this._isDraggable;
this._isDraggable = !1, this.#l = [e.screenX, e.screenY];
const n = new AbortController(), r = this._uiManager.combinedSignal(n);
this.parent.togglePointerEvents(!1), window.addEventListener("pointermove", this.#F.bind(this, t), {
passive: !0,
capture: !0,
signal: r
}), window.addEventListener("touchmove", J, {
passive: !1,
signal: r
}), window.addEventListener("contextmenu", St, {
signal: r
}), this.#u = {
savedX: this.x,
savedY: this.y,
savedWidth: this.width,
savedHeight: this.height
};
const a = this.parent.div.style.cursor, o = this.div.style.cursor;
this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(e.target).cursor;
const l = () => {
n.abort(), this.parent.togglePointerEvents(!0), this.#i?.toggle(!0), this._isDraggable = i, this.parent.div.style.cursor = a, this.div.style.cursor = o, this.#B();
};
window.addEventListener("pointerup", l, {
signal: r
}), window.addEventListener("blur", l, {
signal: r
});
}
#I(t, e, s, i) {
this.width = s, this.height = i, this.x = t, this.y = e, this.setDims(), this.fixAndSetPosition(), this._onResized();
}
_onResized() {
}
#B() {
if (!this.#u)
return;
const {
savedX: t,
savedY: e,
savedWidth: s,
savedHeight: i
} = this.#u;
this.#u = null;
const n = this.x, r = this.y, a = this.width, o = this.height;
n === t && r === e && a === s && o === i || this.addCommands({
cmd: this.#I.bind(this, n, r, a, o),
undo: this.#I.bind(this, t, e, s, i),
mustExec: !0
});
}
static _round(t) {
return Math.round(t * 1e4) / 1e4;
}
#F(t, e) {
const [s, i] = this.parentDimensions, n = this.x, r = this.y, a = this.width, o = this.height, l = M.MIN_SIZE / s, h = M.MIN_SIZE / i, c = this.#k(this.rotation), u = (R, D) => [c[0] * R + c[2] * D, c[1] * R + c[3] * D], f = this.#k(360 - this.rotation), g = (R, D) => [f[0] * R + f[2] * D, f[1] * R + f[3] * D];
let p, b, m = !1, A = !1;
switch (t) {
case "topLeft":
m = !0, p = (R, D) => [0, 0], b = (R, D) => [R, D];
break;
case "topMiddle":
p = (R, D) => [R / 2, 0], b = (R, D) => [R / 2, D];
break;
case "topRight":
m = !0, p = (R, D) => [R, 0], b = (R, D) => [0, D];
break;
case "middleRight":
A = !0, p = (R, D) => [R, D / 2], b = (R, D) => [0, D / 2];
break;
case "bottomRight":
m = !0, p = (R, D) => [R, D], b = (R, D) => [0, 0];
break;
case "bottomMiddle":
p = (R, D) => [R / 2, D], b = (R, D) => [R / 2, 0];
break;
case "bottomLeft":
m = !0, p = (R, D) => [0, D], b = (R, D) => [R, 0];
break;
case "middleLeft":
A = !0, p = (R, D) => [0, D / 2], b = (R, D) => [R, D / 2];
break;
}
const y = p(a, o), _ = b(a, o);
let w = u(..._);
const v = M._round(n + w[0]), S = M._round(r + w[1]);
let E = 1, C = 1, k, T;
if (e.fromKeyboard)
({
deltaX: k,
deltaY: T
} = e);
else {
const {
screenX: R,
screenY: D
} = e, [B, ct] = this.#l;
[k, T] = this.screenToPageTranslation(R - B, D - ct), this.#l[0] = R, this.#l[1] = D;
}
if ([k, T] = g(k / s, T / i), m) {
const R = Math.hypot(a, o);
E = C = Math.max(Math.min(Math.hypot(_[0] - y[0] - k, _[1] - y[1] - T) / R, 1 / a, 1 / o), l / a, h / o);
} else A ? E = ft(Math.abs(_[0] - y[0] - k), l, 1) / a : C = ft(Math.abs(_[1] - y[1] - T), h, 1) / o;
const $ = M._round(a * E), z = M._round(o * C);
w = u(...b($, z));
const j = v - w[0], W = S - w[1];
this.#c ||= [this.x, this.y, this.width, this.height], this.width = $, this.height = z, this.x = j, this.y = W, this.setDims(), this.fixAndSetPosition(), this._onResizing();
}
_onResizing() {
}
altTextFinish() {
this.#i?.finish();
}
get toolbarButtons() {
return null;
}
async addEditToolbar() {
if (this._editToolbar || this.#b)
return this._editToolbar;
this._editToolbar = new we(this), this.div.append(this._editToolbar.render());
const {
toolbarButtons: t
} = this;
if (t)
for (const [e, s] of t)
await this._editToolbar.addButton(e, s);
return this.hasComment || this._editToolbar.addButton("comment", this.addCommentButton()), this._editToolbar.addButton("delete"), this._editToolbar;
}
addCommentButtonInToolbar() {
this._editToolbar?.addButtonBefore("comment", this.addCommentButton(), ".deleteButton");
}
removeCommentButtonFromToolbar() {
this._editToolbar?.removeButton("comment");
}
removeEditToolbar() {
this._editToolbar?.remove(), this._editToolbar = null, this.#i?.destroy();
}
addContainer(t) {
const e = this._editToolbar?.div;
e ? e.before(t) : this.div.append(t);
}
getClientDimensions() {
return this.div.getBoundingClientRect();
}
createAltText() {
return this.#i || (Mt.initialize(M._l10n), this.#i = new Mt(this), this.#t && (this.#i.data = this.#t, this.#t = null)), this.#i;
}
get altTextData() {
return this.#i?.data;
}
set altTextData(t) {
this.#i && (this.#i.data = t);
}
get guessedAltText() {
return this.#i?.guessedText;
}
async setGuessedAltText(t) {
await this.#i?.setGuessedText(t);
}
serializeAltText(t) {
return this.#i?.serialize(t);
}
hasAltText() {
return !!this.#i && !this.#i.isEmpty();
}
hasAltTextData() {
return this.#i?.hasData() ?? !1;
}
focusCommentButton() {
this.#s?.focusButton();
}
addCommentButton() {
return this.canAddComment ? this.#s ||= new Ie(this) : null;
}
addStandaloneCommentButton() {
if (this._uiManager.hasCommentManager()) {
if (this.#a) {
this._uiManager.isEditingMode() && this.#a.classList.remove("hidden");
return;
}
this.hasComment && (this.#a = this.#s.renderForStandalone(), this.div.append(this.#a));
}
}
removeStandaloneCommentButton() {
this.#s.removeStandaloneCommentButton(), this.#a = null;
}
hideStandaloneCommentButton() {
this.#a?.classList.add("hidden");
}
get comment() {
const {
data: {
richText: t,
text: e,
date: s,
deleted: i
}
} = this.#s;
return {
text: e,
richText: t,
date: s,
deleted: i,
color: this.getNonHCMColor(),
opacity: this.opacity ?? 1
};
}
set comment(t) {
this.#s ||= new Ie(this), this.#s.data = t, this.hasComment ? (this.removeCommentButtonFromToolbar(), this.addStandaloneCommentButton(), this._uiManager.updateComment(this)) : (this.addCommentButtonInToolbar(), this.removeStandaloneCommentButton(), this._uiManager.removeComment(this));
}
setCommentData({
comment: t,
popupRef: e,
richText: s
}) {
if (!e || (this.#s ||= new Ie(this), this.#s.setInitialText(t, s), !this.annotationElementId))
return;
const i = this._uiManager.getAndRemoveDataFromAnnotationStorage(this.annotationElementId);
i && this.updateFromAnnotationLayer(i);
}
get hasEditedComment() {
return this.#s?.hasBeenEdited();
}
get hasDeletedComment() {
return this.#s?.isDeleted();
}
get hasComment() {
return !!this.#s && !this.#s.isEmpty() && !this.#s.isDeleted();
}
async editComment(t) {
this.#s ||= new Ie(this), this.#s.edit(t);
}
toggleComment(t, e = void 0) {
this.hasComment && this._uiManager.toggleComment(this, t, e);
}
setSelectedCommentButton(t) {
this.#s.setSelectedButton(t);
}
addComment(t) {
if (this.hasEditedComment) {
const [, , , i] = t.rect, [n] = this.pageDimensions, [r] = this.pageTranslation, a = r + n + 1, o = i - 100, l = a + 180;
t.popup = {
contents: this.comment.text,
deleted: this.comment.deleted,
rect: [a, o, l, i]
};
}
}
updateFromAnnotationLayer({
popup: {
contents: t,
deleted: e
}
}) {
this.#s.data = e ? null : t;
}
get parentBoundingClientRect() {
return this.parent.boundingClientRect;
}
render() {
const t = this.div = document.createElement("div");
t.setAttribute("data-editor-rotation", (360 - this.rotation) % 360), t.className = this.name, t.setAttribute("id", this.id), t.tabIndex = this.#r ? -1 : 0, t.setAttribute("role", "application"), this.defaultL10nId && t.setAttribute("data-l10n-id", this.defaultL10nId), this._isVisible || t.classList.add("hidden"), this.setInForeground(), this.#$();
const [e, s] = this.parentDimensions;
this.parentRotation % 180 !== 0 && (t.style.maxWidth = `${(100 * s / e).toFixed(2)}%`, t.style.maxHeight = `${(100 * e / s).toFixed(2)}%`);
const [i, n] = this.getInitialTranslation();
return this.translate(i, n), Ti(this, t, ["keydown", "pointerdown", "dblclick"]), this.isResizable && this._uiManager._supportsPinchToZoom && (this.#T ||= new ts({
container: t,
isPinchingDisabled: () => !this.isSelected,
onPinchStart: this.#G.bind(this),
onPinching: this.#x.bind(this),
onPinchEnd: this.#_.bind(this),
signal: this._uiManager._signal
})), this.addStandaloneCommentButton(), this._uiManager._editorUndoBar?.hide(), t;
}
#G() {
this.#u = {
savedX: this.x,
savedY: this.y,
savedWidth: this.width,
savedHeight: this.height
}, this.#i?.toggle(!1), this.parent.togglePointerEvents(!1);
}
#x(t, e, s) {
let n = 0.7 * (s / e) + 1 - 0.7;
if (n === 1)
return;
const r = this.#k(this.rotation), a = (v, S) => [r[0] * v + r[2] * S, r[1] * v + r[3] * S], [o, l] = this.parentDimensions, h = this.x, c = this.y, u = this.width, f = this.height, g = M.MIN_SIZE / o, p = M.MIN_SIZE / l;
n = Math.max(Math.min(n, 1 / u, 1 / f), g / u, p / f);
const b = M._round(u * n), m = M._round(f * n);
if (b === u && m === f)
return;
this.#c ||= [h, c, u, f];
const A = a(u / 2, f / 2), y = M._round(h + A[0]), _ = M._round(c + A[1]), w = a(b / 2, m / 2);
this.x = y - w[0], this.y = _ - w[1], this.width = b, this.height = m, this.setDims(), this.fixAndSetPosition(), this._onResizing();
}
#_() {
this.#i?.toggle(!0), this.parent.togglePointerEvents(!0), this.#B();
}
pointerdown(t) {
const {
isMac: e
} = ht.platform;
if (t.button !== 0 || t.ctrlKey && e) {
t.preventDefault();
return;
}
if (this.#g = !0, this._isDraggable) {
this.#U(t);
return;
}
this.#L(t);
}
#L(t) {
const {
isMac: e
} = ht.platform;
t.ctrlKey && !e || t.shiftKey || t.metaKey && e ? this.parent.toggleSelected(this) : this.parent.setSelected(this);
}
#U(t) {
const {
isSelected: e
} = this;
this._uiManager.setUpDragSession();
let s = !1;
const i = new AbortController(), n = this._uiManager.combinedSignal(i), r = {
capture: !0,
passive: !1,
signal: n
}, a = (l) => {
i.abort(), this.#n = null, this.#g = !1, this._uiManager.endDragSession() || this.#L(l), s && this._onStopDragging();
};
e && (this.#C = t.clientX, this.#S = t.clientY, this.#n = t.pointerId, this.#o = t.pointerType, window.addEventListener("pointermove", (l) => {
s || (s = !0, this._uiManager.toggleComment(this, !0, !1), this._onStartDragging());
const {
clientX: h,
clientY: c,
pointerId: u
} = l;
if (u !== this.#n) {
J(l);
return;
}
const [f, g] = this.screenToPageTranslation(h - this.#C, c - this.#S);
this.#C = h, this.#S = c, this._uiManager.dragSelectedEditors(f, g);
}, r), window.addEventListener("touchmove", J, r), window.addEventListener("pointerdown", (l) => {
l.pointerType === this.#o && (this.#T || l.isPrimary) && a(l), J(l);
}, r));
const o = (l) => {
if (!this.#n || this.#n === l.pointerId) {
a(l);
return;
}
J(l);
};
window.addEventListener("pointerup", o, {
signal: n
}), window.addEventListener("blur", o, {
signal: n
});
}
_onStartDragging() {
}
_onStopDragging() {
}
moveInDOM() {
this.#y && clearTimeout(this.#y), this.#y = setTimeout(() => {
this.#y = null, this.parent?.moveEditorInDOM(this);
}, 0);
}
_setParentAndPosition(t, e, s) {
t.changeParent(this), this.x = e, this.y = s, this.fixAndSetPosition(), this._onTranslated();
}
getRect(t, e, s = this.rotation) {
const i = this.parentScale, [n, r] = this.pageDimensions, [a, o] = this.pageTranslation, l = t / i, h = e / i, c = this.x * n, u = this.y * r, f = this.width * n, g = this.height * r;
switch (s) {
case 0:
return [c + l + a, r - u - h - g + o, c + l + f + a, r - u - h + o];
case 90:
return [c + h + a, r - u + l + o, c + h + g + a, r - u + l + f + o];
case 180:
return [c - l - f + a, r - u + h + o, c - l + a, r - u + h + g + o];
case 270:
return [c - h - g + a, r - u - l - f + o, c - h + a, r - u - l + o];
default:
throw new Error("Invalid rotation");
}
}
getRectInCurrentCoords(t, e) {
const [s, i, n, r] = t, a = n - s, o = r - i;
switch (this.rotation) {
case 0:
return [s, e - r, a, o];
case 90:
return [s, e - i, o, a];
case 180:
return [n, e - i, a, o];
case 270:
return [n, e - r, o, a];
default:
throw new Error("Invalid rotation");
}
}
getPDFRect() {
return this.getRect(0, 0);
}
getNonHCMColor() {
return this.color && M._colorManager.convert(this._uiManager.getNonHCMColor(this.color));
}
onUpdatedColor() {
this.#s?.onUpdatedColor();
}
getData() {
const {
comment: {
text: t,
color: e,
date: s,
opacity: i,
deleted: n,
richText: r
},
uid: a,
pageIndex: o,
creationDate: l,
modificationDate: h
} = this;
return {
id: a,
pageIndex: o,
rect: this.getPDFRect(),
richText: r,
contentsObj: {
str: t
},
creationDate: l,
modificationDate: s || h,
popupRef: !n,
color: e,
opacity: i
};
}
onceAdded(t) {
}
isEmpty() {
return !1;
}
enableEditMode() {
return this.isInEditMode() ? !1 : (this.parent.setEditingState(!1), this.#b = !0, !0);
}
disableEditMode() {
return this.isInEditMode() ? (this.parent.setEditingState(!0), this.#b = !1, !0) : !1;
}
isInEditMode() {
return this.#b;
}
shouldGetKeyboardEvents() {
return this.#A;
}
needsToBeRebuilt() {
return this.div && !this.isAttachedToDOM;
}
get isOnScreen() {
const {
top: t,
left: e,
bottom: s,
right: i
} = this.getClientDimensions(), {
innerHeight: n,
innerWidth: r
} = window;
return e < r && i > 0 && t < n && s > 0;
}
#$() {
if (this.#f || !this.div)
return;
this.#f = new AbortController();
const t = this._uiManager.combinedSignal(this.#f);
this.div.addEventListener("focusin", this.focusin.bind(this), {
signal: t
}), this.div.addEventListener("focusout", this.focusout.bind(this), {
signal: t
});
}
rebuild() {
this.#$();
}
rotate(t) {
}
resize() {
}
serializeDeleted() {
return {
id: this.annotationElementId,
deleted: !0,
pageIndex: this.pageIndex,
popupRef: this._initialData?.popupRef || ""
};
}
serialize(t = !1, e = null) {
return {
annotationType: this.mode,
pageIndex: this.pageIndex,
rect: this.getPDFRect(),
rotation: this.rotation,
structTreeParentId: this._structTreeParentId,
popupRef: this._initialData?.popupRef || ""
};
}
static async deserialize(t, e, s) {
const i = new this.prototype.constructor({
parent: e,
id: e.getNextId(),
uiManager: s,
annotationElementId: t.annotationElementId,
creationDate: t.creationDate,
modificationDate: t.modificationDate
});
i.rotation = t.rotation, i.#t = t.accessibilityData, i._isCopy = t.isCopy || !1;
const [n, r] = i.pageDimensions, [a, o, l, h] = i.getRectInCurrentCoords(t.rect, r);
return i.x = a / n, i.y = o / r, i.width = l / n, i.height = h / r, i;
}
get hasBeenModified() {
return !!this.annotationElementId && (this.deleted || this.serialize() !== null);
}
remove() {
if (this.#f?.abort(), this.#f = null, this.isEmpty() || this.commit(), this.parent ? this.parent.remove(this) : this._uiManager.removeEditor(this), this.hideCommentPopup(), this.#y && (clearTimeout(this.#y), this.#y = null), this.#O(), this.removeEditToolbar(), this.#v) {
for (const t of this.#v.values())
clearTimeout(t);
this.#v = null;
}
this.parent = null, this.#T?.destroy(), this.#T = null, this.#d?.remove(), this.#d = null;
}
get isResizable() {
return !1;
}
makeResizable() {
this.isResizable && (this.#N(), this.#h.classList.remove("hidden"));
}
get toolbarPosition() {
return null;
}
get commentButtonPosition() {
return this._uiManager.direction === "ltr" ? [1, 0] : [0, 0];
}
get commentButtonPositionInPage() {
const {
commentButtonPosition: [t, e]
} = this, [s, i, n, r] = this.getPDFRect();
return [M._round(s + (n - s) * t), M._round(i + (r - i) * (1 - e))];
}
get commentButtonColor() {
return this._uiManager.makeCommentColor(this.getNonHCMColor(), this.opacity);
}
get commentPopupPosition() {
return this.#s.commentPopupPositionInLayer;
}
set commentPopupPosition(t) {
this.#s.commentPopupPositionInLayer = t;
}
hasDefaultPopupPosition() {
return this.#s.hasDefaultPopupPosition();
}
get commentButtonWidth() {
return this.#s.commentButtonWidth;
}
get elementBeforePopup() {
return this.div;
}
setCommentButtonStates(t) {
this.#s?.setCommentButtonStates(t);
}
keydown(t) {
if (!this.isResizable || t.target !== this.div || t.key !== "Enter")
return;
this._uiManager.setSelected(this), this.#u = {
savedX: this.x,
savedY: this.y,
savedWidth: this.width,
savedHeight: this.height
};
const e = this.#h.children;
if (!this.#e) {
this.#e = Array.from(e);
const r = this.#X.bind(this), a = this.#W.bind(this), o = this._uiManager._signal;
for (const l of this.#e) {
const h = l.getAttribute("data-resizer-name");
l.setAttribute("role", "spinbutton"), l.addEventListener("keydown", r, {
signal: o
}), l.addEventListener("blur", a, {
signal: o
}), l.addEventListener("focus", this.#q.bind(this, h), {
signal: o
}), l.setAttribute("data-l10n-id", M._l10nResizer[h]);
}
}
const s = this.#e[0];
let i = 0;
for (const r of e) {
if (r === s)
break;
i++;
}
const n = (360 - this.rotation + this.parentRotation) % 360 / 90 * (this.#e.length / 4);
if (n !== i) {
if (n < i)
for (let a = 0; a < i - n; a++)
this.#h.append(this.#h.firstElementChild);
else if (n > i)
for (let a = 0; a < n - i; a++)
this.#h.firstElementChild.before(this.#h.lastElementChild);
let r = 0;
for (const a of e) {
const l = this.#e[r++].getAttribute("data-resizer-name");
a.setAttribute("data-l10n-id", M._l10nResizer[l]);
}
}
this.#z(0), this.#A = !0, this.#h.firstElementChild.focus({
focusVisible: !0
}), t.preventDefault(), t.stopImmediatePropagation();
}
#X(t) {
M._resizerKeyboardManager.exec(this, t);
}
#W(t) {
this.#A && t.relatedTarget?.parentNode !== this.#h && this.#O();
}
#q(t) {
this.#m = this.#A ? t : "";
}
#z(t) {
if (this.#e)
for (const e of this.#e)
e.tabIndex = t;
}
_resizeWithKeyboard(t, e) {
this.#A && this.#F(this.#m, {
deltaX: t,
deltaY: e,
fromKeyboard: !0
});
}
#O() {
this.#A = !1, this.#z(-1), this.#B();
}
_stopResizingWithKeyboard() {
this.#O(), this.div.focus();
}
select() {
if (this.isSelected && this._editToolbar) {
this._editToolbar.show();
return;
}
if (this.isSelected = !0, this.makeResizable(), this.div?.classList.add("selectedEditor"), !this._editToolbar) {
this.addEditToolbar().then(() => {
this.div?.classList.contains("selectedEditor") && this._editToolbar?.show();
});
return;
}
this._editToolbar?.show(), this.#i?.toggleAltTextBadge(!1);
}
focus() {
this.div && !this.div.contains(document.activeElement) && setTimeout(() => this.div?.focus({
preventScroll: !0
}), 0);
}
unselect() {
this.isSelected && (this.isSelected = !1, this.#h?.classList.add("hidden"), this.div?.classList.remove("selectedEditor"), this.div?.contains(document.activeElement) && this._uiManager.currentLayer.div.focus({
preventScroll: !0
}), this._editToolbar?.hide(), this.#i?.toggleAltTextBadge(!0), this.hideCommentPopup());
}
hideCommentPopup() {
this.hasComment && this._uiManager.toggleComment(null);
}
updateParams(t, e) {
}
disableEditing() {
}
enableEditing() {
}
get canChangeContent() {
return !1;
}
enterInEditMode() {
this.canChangeContent && (this.enableEditMode(), this.div.focus());
}
dblclick(t) {
t.target.nodeName !== "BUTTON" && (this.enterInEditMode(), this.parent.updateToolbar({
mode: this.constructor._editorType,
editId: this.uid
}));
}
getElementForAltText() {
return this.div;
}
get contentDiv() {
return this.div;
}
get isEditing() {
return this.#p;
}
set isEditing(t) {
this.#p = t, this.parent && (t ? (this.parent.setSelected(this), this.parent.setActiveEditor(this)) : this.parent.setActiveEditor(null));
}
static get MIN_SIZE() {
return 16;
}
static canCreateNewEmptyEditor() {
return !0;
}
get telemetryInitialData() {
return {
action: "added"
};
}
get telemetryFinalData() {
return null;
}
_reportTelemetry(t, e = !1) {
if (e) {
this.#v ||= /* @__PURE__ */ new Map();
const {
action: s
} = t;
let i = this.#v.get(s);
i && clearTimeout(i), i = setTimeout(() => {
this._reportTelemetry(t), this.#v.delete(s), this.#v.size === 0 && (this.#v = null);
}, M._telemetryTimeout), this.#v.set(s, i);
return;
}
t.type ||= this.editorType, this._uiManager._eventBus.dispatch("reporttelemetry", {
source: this,
details: {
type: "editing",
data: t
}
});
}
show(t = this._isVisible) {
this.div.classList.toggle("hidden", !t), this._isVisible = t;
}
enable() {
this.div && (this.div.tabIndex = 0), this.#r = !1;
}
disable() {
this.div && (this.div.tabIndex = -1), this.#r = !0;
}
updateFakeAnnotationElement(t) {
if (!this.#d && !this.deleted) {
this.#d = t.addFakeAnnotation(this);
return;
}
if (this.deleted) {
this.#d.remove(), this.#d = null;
return;
}
(this.hasEditedComment || this._hasBeenMoved || this._hasBeenResized) && this.#d.updateEdited({
rect: this.getPDFRect(),
popup: this.comment
});
}
renderAnnotationElement(t) {
if (this.deleted)
return t.hide(), null;
let e = t.container.querySelector(".annotationContent");
if (!e)
e = document.createElement("div"), e.classList.add("annotationContent", this.editorType), t.container.prepend(e);
else if (e.nodeName === "CANVAS") {
const s = e;
e = document.createElement("div"), e.classList.add("annotationContent", this.editorType), s.before(e);
}
return e;
}
resetAnnotationElement(t) {
const {
firstElementChild: e
} = t.container;
e?.nodeName === "DIV" && e.classList.contains("annotationContent") && e.remove();
}
}
class xn extends M {
constructor(t) {
super(t), this.annotationElementId = t.annotationElementId, this.deleted = !0;
}
serialize() {
return this.serializeDeleted();
}
}
const ti = 3285377520, wt = 4294901760, Pt = 65535;
class Pi {
constructor(t) {
this.h1 = t ? t & 4294967295 : ti, this.h2 = t ? t & 4294967295 : ti;
}
update(t) {
let e, s;
if (typeof t == "string") {
e = new Uint8Array(t.length * 2), s = 0;
for (let p = 0, b = t.length; p < b; p++) {
const m = t.charCodeAt(p);
m <= 255 ? e[s++] = m : (e[s++] = m >>> 8, e[s++] = m & 255);
}
} else if (ArrayBuffer.isView(t))
e = t.slice(), s = e.byteLength;
else
throw new Error("Invalid data format, must be a string or TypedArray.");
const i = s >> 2, n = s - i * 4, r = new Uint32Array(e.buffer, 0, i);
let a = 0, o = 0, l = this.h1, h = this.h2;
const c = 3432918353, u = 461845907, f = c & Pt, g = u & Pt;
for (let p = 0; p < i; p++)
p & 1 ? (a = r[p], a = a * c & wt | a * f & Pt, a = a << 15 | a >>> 17, a = a * u & wt | a * g & Pt, l ^= a, l = l << 13 | l >>> 19, l = l * 5 + 3864292196) : (o = r[p], o = o * c & wt | o * f & Pt, o = o << 15 | o >>> 17, o = o * u & wt | o * g & Pt, h ^= o, h = h << 13 | h >>> 19, h = h * 5 + 3864292196);
switch (a = 0, n) {
case 3:
a ^= e[i * 4 + 2] << 16;
case 2:
a ^= e[i * 4 + 1] << 8;
case 1:
a ^= e[i * 4], a = a * c & wt | a * f & Pt, a = a << 15 | a >>> 17, a = a * u & wt | a * g & Pt, i & 1 ? l ^= a : h ^= a;
}
this.h1 = l, this.h2 = h;
}
hexdigest() {
let t = this.h1, e = this.h2;
return t ^= e >>> 1, t = t * 3981806797 & wt | t * 36045 & Pt, e = e * 4283543511 & wt | ((e << 16 | t >>> 16) * 2950163797 & wt) >>> 16, t ^= e >>> 1, t = t * 444984403 & wt | t * 60499 & Pt, e = e * 3301882366 & wt | ((e << 16 | t >>> 16) * 3120437893 & wt) >>> 16, t ^= e >>> 1, (t >>> 0).toString(16).padStart(8, "0") + (e >>> 0).toString(16).padStart(8, "0");
}
}
const vs = Object.freeze({
map: null,
hash: "",
transfer: void 0
});
class Ls {
#t = !1;
#e = null;
#i = null;
#s = /* @__PURE__ */ new Map();
constructor() {
this.onSetModified = null, this.onResetModified = null, this.onAnnotationEditor = null;
}
getValue(t, e) {
const s = this.#s.get(t);
return s === void 0 ? e : Object.assign(e, s);
}
getRawValue(t) {
return this.#s.get(t);
}
remove(t) {
const e = this.#s.get(t);
if (e !== void 0 && (e instanceof M && this.#i.delete(e.annotationElementId), this.#s.delete(t), this.#s.size === 0 && this.resetModified(), typeof this.onAnnotationEditor == "function")) {
for (const s of this.#s.values())
if (s instanceof M)
return;
this.onAnnotationEditor(null);
}
}
setValue(t, e) {
const s = this.#s.get(t);
let i = !1;
if (s !== void 0)
for (const [n, r] of Object.entries(e))
s[n] !== r && (i = !0, s[n] = r);
else
i = !0, this.#s.set(t, e);
i && this.#a(), e instanceof M && ((this.#i ||= /* @__PURE__ */ new Map()).set(e.annotationElementId, e), typeof this.onAnnotationEditor == "function" && this.onAnnotationEditor(e.constructor._type));
}
has(t) {
return this.#s.has(t);
}
get size() {
return this.#s.size;
}
#a() {
this.#t || (this.#t = !0, typeof this.onSetModified == "function" && this.onSetModified());
}
resetModified() {
this.#t && (this.#t = !1, typeof this.onResetModified == "function" && this.onResetModified());
}
get print() {
return new ki(this);
}
get serializable() {
if (this.#s.size === 0)
return vs;
const t = /* @__PURE__ */ new Map(), e = new Pi(), s = [], i = /* @__PURE__ */ Object.create(null);
let n = !1;
for (const [r, a] of this.#s) {
const o = a instanceof M ? a.serialize(!1, i) : a;
o && (t.set(r, o), e.update(`${r}:${JSON.stringify(o)}`), n ||= !!o.bitmap);
}
if (n)
for (const r of t.values())
r.bitmap && s.push(r.bitmap);
return t.size > 0 ? {
map: t,
hash: e.hexdigest(),
transfer: s
} : vs;
}
get editorStats() {
let t = null;
const e = /* @__PURE__ */ new Map();
let s = 0, i = 0;
for (const n of this.#s.values()) {
if (!(n instanceof M)) {
n.popup && (n.popup.deleted ? i += 1 : s += 1);
continue;
}
n.isCommentDeleted ? i += 1 : n.hasEditedComment && (s += 1);
const r = n.telemetryFinalData;
if (!r)
continue;
const {
type: a
} = r;
e.has(a) || e.set(a, Object.getPrototypeOf(n).constructor), t ||= /* @__PURE__ */ Object.create(null);
const o = t[a] ||= /* @__PURE__ */ new Map();
for (const [l, h] of Object.entries(r)) {
if (l === "type")
continue;
let c = o.get(l);
c || (c = /* @__PURE__ */ new Map(), o.set(l, c));
const u = c.get(h) ?? 0;
c.set(h, u + 1);
}
}
if ((i > 0 || s > 0) && (t ||= /* @__PURE__ */ Object.create(null), t.comments = {
deleted: i,
edited: s
}), !t)
return null;
for (const [n, r] of e)
t[n] = r.computeTelemetryFinalData(t[n]);
return t;
}
resetModifiedIds() {
this.#e = null;
}
updateEditor(t, e) {
const s = this.#i?.get(t);
return s ? (s.updateFromAnnotationLayer(e), !0) : !1;
}
getEditor(t) {
return this.#i?.get(t) || null;
}
get modifiedIds() {
if (this.#e)
return this.#e;
const t = [];
if (this.#i)
for (const e of this.#i.values())
e.serialize() && t.push(e.annotationElementId);
return this.#e = {
ids: new Set(t),
hash: t.join(",")
};
}
[Symbol.iterator]() {
return this.#s.entries();
}
}
class ki extends Ls {
#t;
constructor(t) {
super();
const {
map: e,
hash: s,
transfer: i
} = t.serializable, n = structuredClone(e, i ? {
transfer: i
} : null);
this.#t = {
map: n,
hash: s,
transfer: i
};
}
get print() {
V("Should not call PrintAnnotationStorage.print");
}
get serializable() {
return this.#t;
}
get modifiedIds() {
return I(this, "modifiedIds", {
ids: /* @__PURE__ */ new Set(),
hash: ""
});
}
}
class Tn {
#t = /* @__PURE__ */ new Set();
constructor({
ownerDocument: t = globalThis.document,
styleElement: e = null
}) {
this._document = t, this.nativeFontFaces = /* @__PURE__ */ new Set(), this.styleElement = null, this.loadingRequests = [], this.loadTestFontId = 0;
}
addNativeFontFace(t) {
this.nativeFontFaces.add(t), this._document.fonts.add(t);
}
removeNativeFontFace(t) {
this.nativeFontFaces.delete(t), this._document.fonts.delete(t);
}
insertRule(t) {
this.styleElement || (this.styleElement = this._document.createElement("style"), this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement));
const e = this.styleElement.sheet;
e.insertRule(t, e.cssRules.length);
}
clear() {
for (const t of this.nativeFontFaces)
this._document.fonts.delete(t);
this.nativeFontFaces.clear(), this.#t.clear(), this.styleElement && (this.styleElement.remove(), this.styleElement = null);
}
async loadSystemFont({
systemFontInfo: t,
disableFontFace: e,
_inspectFont: s
}) {
if (!(!t || this.#t.has(t.loadedName))) {
if (N(!e, "loadSystemFont shouldn't be called when `disableFontFace` is set."), this.isFontLoadingAPISupported) {
const {
loadedName: i,
src: n,
style: r
} = t, a = new FontFace(i, n, r);
this.addNativeFontFace(a);
try {
await a.load(), this.#t.add(i), s?.(t);
} catch {
L(`Cannot load system font: ${t.baseFontName}, installing it could help to improve PDF rendering.`), this.removeNativeFontFace(a);
}
return;
}
V("Not implemented: loadSystemFont without the Font Loading API.");
}
}
async bind(t) {
if (t.attached || t.missingFile && !t.systemFontInfo)
return;
if (t.attached = !0, t.systemFontInfo) {
await this.loadSystemFont(t);
return;
}
if (this.isFontLoadingAPISupported) {
const s = t.createNativeFontFace();
if (s) {
this.addNativeFontFace(s);
try {
await s.loaded;
} catch (i) {
throw L(`Failed to load font '${s.family}': '${i}'.`), t.disableFontFace = !0, i;
}
}
return;
}
const e = t.createFontFaceRule();
if (e) {
if (this.insertRule(e), this.isSyncFontLoadingSupported)
return;
await new Promise((s) => {
const i = this._queueLoadingCallback(s);
this._prepareFontLoadEvent(t, i);
});
}
}
get isFontLoadingAPISupported() {
const t = !!this._document?.fonts;
return I(this, "isFontLoadingAPISupported", t);
}
get isSyncFontLoadingSupported() {
return I(this, "isSyncFontLoadingSupported", ut || ht.platform.isFirefox);
}
_queueLoadingCallback(t) {
function e() {
for (N(!i.done, "completeRequest() cannot be called twice."), i.done = !0; s.length > 0 && s[0].done; ) {
const n = s.shift();
setTimeout(n.callback, 0);
}
}
const {
loadingRequests: s
} = this, i = {
done: !1,
complete: e,
callback: t
};
return s.push(i), i;
}
get _loadTestFont() {
const t = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
return I(this, "_loadTestFont", t);
}
_prepareFontLoadEvent(t, e) {
function s(_, w) {
return _.charCodeAt(w) << 24 | _.charCodeAt(w + 1) << 16 | _.charCodeAt(w + 2) << 8 | _.charCodeAt(w + 3) & 255;
}
function i(_, w, v, S) {
const E = _.substring(0, w), C = _.substring(w + v);
return E + S + C;
}
let n, r;
const a = this._document.createElement("canvas");
a.width = 1, a.height = 1;
const o = a.getContext("2d");
let l = 0;
function h(_, w) {
if (++l > 30) {
L("Load test font never loaded."), w();
return;
}
if (o.font = "30px " + _, o.fillText(".", 0, 20), o.getImageData(0, 0, 1, 1).data[3] > 0) {
w();
return;
}
setTimeout(h.bind(null, _, w));
}
const c = `lt${Date.now()}${this.loadTestFontId++}`;
let u = this._loadTestFont;
u = i(u, 976, c.length, c);
const g = 16, p = 1482184792;
let b = s(u, g);
for (n = 0, r = c.length - 3; n < r; n += 4)
b = b - p + s(c, n) | 0;
n < c.length && (b = b - p + s(c + "XXX", n) | 0), u = i(u, g, 4, on(b));
const m = `url(data:font/opentype;base64,${btoa(u)});`, A = `@font-face {font-family:"${c}";src:${m}}`;
this.insertRule(A);
const y = this._document.createElement("div");
y.style.visibility = "hidden", y.style.width = y.style.height = "10px", y.style.position = "absolute", y.style.top = y.style.left = "0px";
for (const _ of [t.loadedName, c]) {
const w = this._document.createElement("span");
w.textContent = "Hi", w.style.fontFamily = _, y.append(w);
}
this._document.body.append(y), h(c, () => {
y.remove(), e.complete();
});
}
}
class Pn {
#t;
constructor(t, e = null, s, i) {
this.compiledGlyphs = /* @__PURE__ */ Object.create(null), this.#t = t, this._inspectFont = e, s && Object.assign(this, s), i && (this.charProcOperatorList = i);
}
createNativeFontFace() {
if (!this.data || this.disableFontFace)
return null;
let t;
if (!this.cssFontInfo)
t = new FontFace(this.loadedName, this.data, {});
else {
const e = {
weight: this.cssFontInfo.fontWeight
};
this.cssFontInfo.italicAngle && (e.style = `oblique ${this.cssFontInfo.italicAngle}deg`), t = new FontFace(this.cssFontInfo.fontFamily, this.data, e);
}
return this._inspectFont?.(this), t;
}
createFontFaceRule() {
if (!this.data || this.disableFontFace)
return null;
const t = `url(data:${this.mimetype};base64,${Si(this.data)});`;
let e;
if (!this.cssFontInfo)
e = `@font-face {font-family:"${this.loadedName}";src:${t}}`;
else {
let s = `font-weight: ${this.cssFontInfo.fontWeight};`;
this.cssFontInfo.italicAngle && (s += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`), e = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${s}src:${t}}`;
}
return this._inspectFont?.(this, t), e;
}
getPathGenerator(t, e) {
if (this.compiledGlyphs[e] !== void 0)
return this.compiledGlyphs[e];
const s = this.loadedName + "_path_" + e;
let i;
try {
i = t.get(s);
} catch (r) {
L(`getPathGenerator - ignoring character: "${r}".`);
}
const n = xi(i);
return this.fontExtraProperties || t.delete(s), this.compiledGlyphs[e] = n;
}
get black() {
return this.#t.black;
}
get bold() {
return this.#t.bold;
}
get disableFontFace() {
return this.#t.disableFontFace ?? !1;
}
set disableFontFace(t) {
I(this, "disableFontFace", !!t);
}
get fontExtraProperties() {
return this.#t.fontExtraProperties ?? !1;
}
get isInvalidPDFjsFont() {
return this.#t.isInvalidPDFjsFont;
}
get isType3Font() {
return this.#t.isType3Font;
}
get italic() {
return this.#t.italic;
}
get missingFile() {
return this.#t.missingFile;
}
get remeasure() {
return this.#t.remeasure;
}
get vertical() {
return this.#t.vertical;
}
get ascent() {
return this.#t.ascent;
}
get defaultWidth() {
return this.#t.defaultWidth;
}
get descent() {
return this.#t.descent;
}
get bbox() {
return this.#t.bbox;
}
set bbox(t) {
I(this, "bbox", t);
}
get fontMatrix() {
return this.#t.fontMatrix;
}
get fallbackName() {
return this.#t.fallbackName;
}
get loadedName() {
return this.#t.loadedName;
}
get mimetype() {
return this.#t.mimetype;
}
get name() {
return this.#t.name;
}
get data() {
return this.#t.data;
}
clearData() {
this.#t.clearData();
}
get cssFontInfo() {
return this.#t.cssFontInfo;
}
get systemFontInfo() {
return this.#t.systemFontInfo;
}
get defaultVMetrics() {
return this.#t.defaultVMetrics;
}
}
class re {
#t;
#e;
#i;
static strings = ["fontFamily", "fontWeight", "italicAngle"];
static write(t) {
const e = new TextEncoder(), s = {};
let i = 0;
for (const l of re.strings) {
const h = e.encode(t[l]);
s[l] = h, i += 4 + h.length;
}
const n = new ArrayBuffer(i), r = new Uint8Array(n), a = new DataView(n);
let o = 0;
for (const l of re.strings) {
const h = s[l], c = h.length;
a.setUint32(o, c), r.set(h, o + 4), o += 4 + c;
}
return N(o === n.byteLength, "CssFontInfo.write: Buffer overflow"), n;
}
constructor(t) {
this.#t = t, this.#e = new DataView(this.#t), this.#i = new TextDecoder();
}
#s(t) {
N(t < re.strings.length, "Invalid string index");
let e = 0;
for (let i = 0; i < t; i++)
e += this.#e.getUint32(e) + 4;
const s = this.#e.getUint32(e);
return this.#i.decode(new Uint8Array(this.#t, e + 4, s));
}
get fontFamily() {
return this.#s(0);
}
get fontWeight() {
return this.#s(1);
}
get italicAngle() {
return this.#s(2);
}
}
class ae {
#t;
#e;
#i;
static strings = ["css", "loadedName", "baseFontName", "src"];
static write(t) {
const e = new TextEncoder(), s = {};
let i = 0;
for (const u of ae.strings) {
const f = e.encode(t[u]);
s[u] = f, i += 4 + f.length;
}
i += 4;
let n, r, a = 1 + i;
t.style && (n = e.encode(t.style.style), r = e.encode(t.style.weight), a += 4 + n.length + 4 + r.length);
const o = new ArrayBuffer(a), l = new Uint8Array(o), h = new DataView(o);
let c = 0;
h.setUint8(c++, t.guessFallback ? 1 : 0), h.setUint32(c, 0), c += 4, i = 0;
for (const u of ae.strings) {
const f = s[u], g = f.length;
i += 4 + g, h.setUint32(c, g), l.set(f, c + 4), c += 4 + g;
}
return h.setUint32(c - i - 4, i), t.style && (h.setUint32(c, n.length), l.set(n, c + 4), c += 4 + n.length, h.setUint32(c, r.length), l.set(r, c + 4), c += 4 + r.length), N(c <= o.byteLength, "SubstitionInfo.write: Buffer overflow"), o.transferToFixedLength(c);
}
constructor(t) {
this.#t = t, this.#e = new DataView(this.#t), this.#i = new TextDecoder();
}
get guessFallback() {
return this.#e.getUint8(0) !== 0;
}
#s(t) {
N(t < ae.strings.length, "Invalid string index");
let e = 5;
for (let i = 0; i < t; i++)
e += this.#e.getUint32(e) + 4;
const s = this.#e.getUint32(e);
return this.#i.decode(new Uint8Array(this.#t, e + 4, s));
}
get css() {
return this.#s(0);
}
get loadedName() {
return this.#s(1);
}
get baseFontName() {
return this.#s(2);
}
get src() {
return this.#s(3);
}
get style() {
let t = 1;
t += 4 + this.#e.getUint32(t);
const e = this.#e.getUint32(t), s = this.#i.decode(new Uint8Array(this.#t, t + 4, e));
t += 4 + e;
const i = this.#e.getUint32(t), n = this.#i.decode(new Uint8Array(this.#t, t + 4, i));
return {
style: s,
weight: n
};
}
}
class G {
static bools = ["black", "bold", "disableFontFace", "fontExtraProperties", "isInvalidPDFjsFont", "isType3Font", "italic", "missingFile", "remeasure", "vertical"];
static numbers = ["ascent", "defaultWidth", "descent"];
static strings = ["fallbackName", "loadedName", "mimetype", "name"];
static #t = Math.ceil(this.bools.length * 2 / 8);
static #e = this.#t + this.numbers.length * 8;
static #i = this.#e + 1 + 8;
static #s = this.#i + 1 + 48;
static #a = this.#s + 1 + 6;
#r;
#n;
#o;
constructor({
data: t,
extra: e
}) {
this.#r = t, this.#n = new TextDecoder(), this.#o = new DataView(this.#r), e && Object.assign(this, e);
}
#h(t) {
N(t < G.bools.length, "Invalid boolean index");
const e = Math.floor(t / 4), s = t * 2 % 8, i = this.#o.getUint8(e) >> s & 3;
return i === 0 ? void 0 : i === 2;
}
get black() {
return this.#h(0);
}
get bold() {
return this.#h(1);
}
get disableFontFace() {
return this.#h(2);
}
get fontExtraProperties() {
return this.#h(3);
}
get isInvalidPDFjsFont() {
return this.#h(4);
}
get isType3Font() {
return this.#h(5);
}
get italic() {
return this.#h(6);
}
get missingFile() {
return this.#h(7);
}
get remeasure() {
return this.#h(8);
}
get vertical() {
return this.#h(9);
}
#l(t) {
return N(t < G.numbers.length, "Invalid number index"), this.#o.getFloat64(G.#t + t * 8);
}
get ascent() {
return this.#l(0);
}
get defaultWidth() {
return this.#l(1);
}
get descent() {
return this.#l(2);
}
get bbox() {
let t = G.#e;
if (this.#o.getUint8(t) === 0)
return;
t += 1;
const s = [];
for (let i = 0; i < 4; i++)
s.push(this.#o.getInt16(t, !0)), t += 2;
return s;
}
get fontMatrix() {
let t = G.#i;
if (this.#o.getUint8(t) === 0)
return;
t += 1;
const s = [];
for (let i = 0; i < 6; i++)
s.push(this.#o.getFloat64(t, !0)), t += 8;
return s;
}
get defaultVMetrics() {
let t = G.#s;
if (this.#o.getUint8(t) === 0)
return;
t += 1;
const s = [];
for (let i = 0; i < 3; i++)
s.push(this.#o.getInt16(t, !0)), t += 2;
return s;
}
#u(t) {
N(t < G.strings.length, "Invalid string index");
let e = G.#a + 4;
for (let n = 0; n < t; n++)
e += this.#o.getUint32(e) + 4;
const s = this.#o.getUint32(e), i = new Uint8Array(s);
return i.set(new Uint8Array(this.#r, e + 4, s)), this.#n.decode(i);
}
get fallbackName() {
return this.#u(0);
}
get loadedName() {
return this.#u(1);
}
get mimetype() {
return this.#u(2);
}
get name() {
return this.#u(3);
}
get data() {
let t = G.#a;
const e = this.#o.getUint32(t);
t += 4 + e;
const s = this.#o.getUint32(t);
t += 4 + s;
const i = this.#o.getUint32(t);
t += 4 + i;
const n = this.#o.getUint32(t);
if (n !== 0)
return new Uint8Array(this.#r, t + 4, n);
}
clearData() {
let t = G.#a;
const e = this.#o.getUint32(t);
t += 4 + e;
const s = this.#o.getUint32(t);
t += 4 + s;
const i = this.#o.getUint32(t);
t += 4 + i;
const n = this.#o.getUint32(t);
new Uint8Array(this.#r, t + 4, n).fill(0), this.#o.setUint32(t, 0);
}
get cssFontInfo() {
let t = G.#a;
const e = this.#o.getUint32(t);
t += 4 + e;
const s = this.#o.getUint32(t);
t += 4 + s;
const i = this.#o.getUint32(t);
if (i === 0)
return null;
const n = new Uint8Array(i);
return n.set(new Uint8Array(this.#r, t + 4, i)), new re(n.buffer);
}
get systemFontInfo() {
let t = G.#a;
const e = this.#o.getUint32(t);
t += 4 + e;
const s = this.#o.getUint32(t);
if (s === 0)
return null;
const i = new Uint8Array(s);
return i.set(new Uint8Array(this.#r, t + 4, s)), new ae(i.buffer);
}
static write(t) {
const e = t.systemFontInfo ? ae.write(t.systemFontInfo) : null, s = t.cssFontInfo ? re.write(t.cssFontInfo) : null, i = new TextEncoder(), n = {};
let r = 0;
for (const p of G.strings)
n[p] = i.encode(t[p]), r += 4 + n[p].length;
const a = G.#a + 4 + r + 4 + (e ? e.byteLength : 0) + 4 + (s ? s.byteLength : 0) + 4 + (t.data ? t.data.length : 0), o = new ArrayBuffer(a), l = new Uint8Array(o), h = new DataView(o);
let c = 0;
const u = G.bools.length;
let f = 0, g = 0;
for (let p = 0; p < u; p++) {
const b = t[G.bools[p]];
f |= (b === void 0 ? 0 : b ? 2 : 1) << g, g += 2, (g === 8 || p === u - 1) && (h.setUint8(c++, f), f = 0, g = 0);
}
N(c === G.#t, "FontInfo.write: Boolean properties offset mismatch");
for (const p of G.numbers)
h.setFloat64(c, t[p]), c += 8;
if (N(c === G.#e, "FontInfo.write: Number properties offset mismatch"), t.bbox) {
h.setUint8(c++, 4);
for (const p of t.bbox)
h.setInt16(c, p, !0), c += 2;
} else
h.setUint8(c++, 0), c += 8;
if (N(c === G.#i, "FontInfo.write: BBox properties offset mismatch"), t.fontMatrix) {
h.setUint8(c++, 6);
for (const p of t.fontMatrix)
h.setFloat64(c, p, !0), c += 8;
} else
h.setUint8(c++, 0), c += 48;
if (N(c === G.#s, "FontInfo.write: FontMatrix properties offset mismatch"), t.defaultVMetrics) {
h.setUint8(c++, 1);
for (const p of t.defaultVMetrics)
h.setInt16(c, p, !0), c += 2;
} else
h.setUint8(c++, 0), c += 6;
N(c === G.#a, "FontInfo.write: DefaultVMetrics properties offset mismatch"), h.setUint32(G.#a, 0), c += 4;
for (const p of G.strings) {
const b = n[p], m = b.length;
h.setUint32(c, m), l.set(b, c + 4), c += 4 + m;
}
if (h.setUint32(G.#a, c - G.#a - 4), !e)
h.setUint32(c, 0), c += 4;
else {
const p = e.byteLength;
h.setUint32(c, p), N(c + 4 + p <= o.byteLength, "FontInfo.write: Buffer overflow at systemFontInfo"), l.set(new Uint8Array(e), c + 4), c += 4 + p;
}
if (!s)
h.setUint32(c, 0), c += 4;
else {
const p = s.byteLength;
h.setUint32(c, p), N(c + 4 + p <= o.byteLength, "FontInfo.write: Buffer overflow at cssFontInfo"), l.set(new Uint8Array(s), c + 4), c += 4 + p;
}
return t.data === void 0 ? (h.setUint32(c, 0), c += 4) : (h.setUint32(c, t.data.length), l.set(t.data, c + 4), c += 4 + t.data.length), N(c <= o.byteLength, "FontInfo.write: Buffer overflow"), o.transferToFixedLength(c);
}
}
class nt {
static #t = 0;
static #e = 1;
static #i = 2;
static #s = 3;
static #a = 4;
static #r = 8;
static #n = 12;
static #o = 16;
constructor(t) {
this.buffer = t, this.view = new DataView(t), this.data = new Uint8Array(t);
}
static write(t) {
let e, s = null, i = [], n = [], r = [], a = [], o = null, l = null;
switch (t[0]) {
case "RadialAxial":
e = t[1] === "axial" ? 1 : 2, s = t[2], r = t[3], e === 1 ? i.push(...t[4], ...t[5]) : i.push(t[4][0], t[4][1], t[6], t[5][0], t[5][1], t[7]);
break;
case "Mesh":
e = 3, o = t[1], i = t[2], n = t[3], a = t[4] || [], s = t[6], l = t[7];
break;
default:
throw new Error(`Unsupported pattern type: ${t[0]}`);
}
const h = Math.floor(i.length / 2), c = Math.floor(n.length / 3), u = r.length, f = a.length;
let g = 0;
for (const w of a)
g += 1, g = Math.ceil(g / 4) * 4, g += 4 + w.coords.length * 4, g += 4 + w.colors.length * 4, w.verticesPerRow !== void 0 && (g += 4);
const p = 20 + h * 8 + c * 3 + u * 8 + (s ? 16 : 0) + (l ? 3 : 0) + g, b = new ArrayBuffer(p), m = new DataView(b), A = new Uint8Array(b);
m.setUint8(nt.#t, e), m.setUint8(nt.#e, s ? 1 : 0), m.setUint8(nt.#i, l ? 1 : 0), m.setUint8(nt.#s, o), m.setUint32(nt.#a, h, !0), m.setUint32(nt.#r, c, !0), m.setUint32(nt.#n, u, !0), m.setUint32(nt.#o, f, !0);
let y = 20;
new Float32Array(b, y, h * 2).set(i), y += h * 8, A.set(n, y), y += c * 3;
for (const [w, v] of r)
m.setFloat32(y, w, !0), y += 4, m.setUint32(y, parseInt(v.slice(1), 16), !0), y += 4;
if (s)
for (const w of s)
m.setFloat32(y, w, !0), y += 4;
l && (A.set(l, y), y += 3);
for (let w = 0; w < a.length; w++) {
const v = a[w];
m.setUint8(y, v.type), y += 1, y = Math.ceil(y / 4) * 4, m.setUint32(y, v.coords.length, !0), y += 4, new Int32Array(b, y, v.coords.length).set(v.coords), y += v.coords.length * 4, m.setUint32(y, v.colors.length, !0), y += 4, new Int32Array(b, y, v.colors.length).set(v.colors), y += v.colors.length * 4, v.verticesPerRow !== void 0 && (m.setUint32(y, v.verticesPerRow, !0), y += 4);
}
return b;
}
getIR() {
const t = this.view, e = this.data[nt.#t], s = !!this.data[nt.#e], i = !!this.data[nt.#i], n = t.getUint32(nt.#a, !0), r = t.getUint32(nt.#r, !0), a = t.getUint32(nt.#n, !0), o = t.getUint32(nt.#o, !0);
let l = 20;
const h = new Float32Array(this.buffer, l, n * 2);
l += n * 8;
const c = new Uint8Array(this.buffer, l, r * 3);
l += r * 3;
const u = [];
for (let b = 0; b < a; ++b) {
const m = t.getFloat32(l, !0);
l += 4;
const A = t.getUint32(l, !0);
l += 4, u.push([m, `#${A.toString(16).padStart(6, "0")}`]);
}
let f = null;
if (s) {
f = [];
for (let b = 0; b < 4; ++b)
f.push(t.getFloat32(l, !0)), l += 4;
}
let g = null;
i && (g = new Uint8Array(this.buffer, l, 3), l += 3);
const p = [];
for (let b = 0; b < o; ++b) {
const m = t.getUint8(l);
l += 1, l = Math.ceil(l / 4) * 4;
const A = t.getUint32(l, !0);
l += 4;
const y = new Int32Array(this.buffer, l, A);
l += A * 4;
const _ = t.getUint32(l, !0);
l += 4;
const w = new Int32Array(this.buffer, l, _);
l += _ * 4;
const v = {
type: m,
coords: y,
colors: w
};
m === ms.LATTICE && (v.verticesPerRow = t.getUint32(l, !0), l += 4), p.push(v);
}
if (e === 1)
return ["RadialAxial", "axial", f, u, Array.from(h.slice(0, 2)), Array.from(h.slice(2, 4)), null, null];
if (e === 2)
return ["RadialAxial", "radial", f, u, [h[0], h[1]], [h[3], h[4]], h[2], h[5]];
if (e === 3) {
const b = this.data[nt.#s];
let m = null;
if (h.length > 0) {
let A = h[0], y = h[0], _ = h[1], w = h[1];
for (let v = 0; v < h.length; v += 2) {
const S = h[v], E = h[v + 1];
A = A > S ? S : A, _ = _ > E ? E : _, y = y < S ? S : y, w = w < E ? E : w;
}
m = [A, _, y, w];
}
return ["Mesh", b, h, c, p, m, f, g];
}
throw new Error(`Unsupported pattern kind: ${e}`);
}
}
function kn(d) {
if (d instanceof URL)
return d.href;
if (typeof d == "string") {
if (ut)
return d;
const t = URL.parse(d, window.location);
if (t)
return t.href;
}
throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property.");
}
function Mn(d) {
if (ut && typeof Buffer < "u" && d instanceof Buffer)
throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`.");
if (d instanceof Uint8Array && d.byteLength === d.buffer.byteLength)
return d;
if (typeof d == "string")
return Te(d);
if (d instanceof ArrayBuffer || ArrayBuffer.isView(d) || typeof d == "object" && !isNaN(d?.length))
return new Uint8Array(d);
throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property.");
}
function Fe(d) {
if (typeof d != "string")
return null;
if (d.endsWith("/"))
return d;
throw new Error(`Invalid factory url: "${d}" must include trailing slash.`);
}
const _s = (d) => typeof d == "object" && Number.isInteger(d?.num) && d.num >= 0 && Number.isInteger(d?.gen) && d.gen >= 0, Rn = (d) => typeof d == "object" && typeof d?.name == "string", Dn = un.bind(null, _s, Rn);
class Ln {
#t = /* @__PURE__ */ new Map();
#e = Promise.resolve();
postMessage(t, e) {
const s = {
data: structuredClone(t, e ? {
transfer: e
} : null)
};
this.#e.then(() => {
for (const [i] of this.#t)
i.call(this, s);
});
}
addEventListener(t, e, s = null) {
let i = null;
if (s?.signal instanceof AbortSignal) {
const {
signal: n
} = s;
if (n.aborted) {
L("LoopbackPort - cannot use an `aborted` signal.");
return;
}
const r = () => this.removeEventListener(t, e);
i = () => n.removeEventListener("abort", r), n.addEventListener("abort", r);
}
this.#t.set(e, i);
}
removeEventListener(t, e) {
this.#t.get(e)?.(), this.#t.delete(e);
}
terminate() {
for (const [, t] of this.#t)
t?.();
this.#t.clear();
}
}
const Oe = {
DATA: 1,
ERROR: 2
}, et = {
CANCEL: 1,
CANCEL_COMPLETE: 2,
CLOSE: 3,
ENQUEUE: 4,
ERROR: 5,
PULL: 6,
PULL_COMPLETE: 7,
START_COMPLETE: 8
};
function ei() {
}
function mt(d) {
if (d instanceof $t || d instanceof bs || d instanceof Xs || d instanceof We || d instanceof os)
return d;
switch (d instanceof Error || typeof d == "object" && d !== null || V('wrapReason: Expected "reason" to be a (possibly cloned) Error.'), d.name) {
case "AbortException":
return new $t(d.message);
case "InvalidPDFException":
return new bs(d.message);
case "PasswordException":
return new Xs(d.message, d.code);
case "ResponseException":
return new We(d.message, d.status, d.missing);
case "UnknownErrorException":
return new os(d.message, d.details);
}
return new os(d.message, d.toString());
}
class ye {
#t = new AbortController();
constructor(t, e, s) {
this.sourceName = t, this.targetName = e, this.comObj = s, this.callbackId = 1, this.streamId = 1, this.streamSinks = /* @__PURE__ */ Object.create(null), this.streamControllers = /* @__PURE__ */ Object.create(null), this.callbackCapabilities = /* @__PURE__ */ Object.create(null), this.actionHandler = /* @__PURE__ */ Object.create(null), s.addEventListener("message", this.#e.bind(this), {
signal: this.#t.signal
});
}
#e({
data: t
}) {
if (t.targetName !== this.sourceName)
return;
if (t.stream) {
this.#s(t);
return;
}
if (t.callback) {
const s = t.callbackId, i = this.callbackCapabilities[s];
if (!i)
throw new Error(`Cannot resolve callback ${s}`);
if (delete this.callbackCapabilities[s], t.callback === Oe.DATA)
i.resolve(t.data);
else if (t.callback === Oe.ERROR)
i.reject(mt(t.reason));
else
throw new Error("Unexpected callback case");
return;
}
const e = this.actionHandler[t.action];
if (!e)
throw new Error(`Unknown action from worker: ${t.action}`);
if (t.callbackId) {
const s = this.sourceName, i = t.sourceName, n = this.comObj;
Promise.try(e, t.data).then(function(r) {
n.postMessage({
sourceName: s,
targetName: i,
callback: Oe.DATA,
callbackId: t.callbackId,
data: r
});
}, function(r) {
n.postMessage({
sourceName: s,
targetName: i,
callback: Oe.ERROR,
callbackId: t.callbackId,
reason: mt(r)
});
});
return;
}
if (t.streamId) {
this.#i(t);
return;
}
e(t.data);
}
on(t, e) {
const s = this.actionHandler;
if (s[t])
throw new Error(`There is already an actionName called "${t}"`);
s[t] = e;
}
send(t, e, s) {
this.comObj.postMessage({
sourceName: this.sourceName,
targetName: this.targetName,
action: t,
data: e
}, s);
}
sendWithPromise(t, e, s) {
const i = this.callbackId++, n = Promise.withResolvers();
this.callbackCapabilities[i] = n;
try {
this.comObj.postMessage({
sourceName: this.sourceName,
targetName: this.targetName,
action: t,
callbackId: i,
data: e
}, s);
} catch (r) {
n.reject(r);
}
return n.promise;
}
sendWithStream(t, e, s, i) {
const n = this.streamId++, r = this.sourceName, a = this.targetName, o = this.comObj;
return new ReadableStream({
start: (l) => {
const h = Promise.withResolvers();
return this.streamControllers[n] = {
controller: l,
startCall: h,
pullCall: null,
cancelCall: null,
isClosed: !1
}, o.postMessage({
sourceName: r,
targetName: a,
action: t,
streamId: n,
data: e,
desiredSize: l.desiredSize
}, i), h.promise;
},
pull: (l) => {
const h = Promise.withResolvers();
return this.streamControllers[n].pullCall = h, o.postMessage({
sourceName: r,
targetName: a,
stream: et.PULL,
streamId: n,
desiredSize: l.desiredSize
}), h.promise;
},
cancel: (l) => {
N(l instanceof Error, "cancel must have a valid reason");
const h = Promise.withResolvers();
return this.streamControllers[n].cancelCall = h, this.streamControllers[n].isClosed = !0, o.postMessage({
sourceName: r,
targetName: a,
stream: et.CANCEL,
streamId: n,
reason: mt(l)
}), h.promise;
}
}, s);
}
#i(t) {
const e = t.streamId, s = this.sourceName, i = t.sourceName, n = this.comObj, r = this, a = this.actionHandler[t.action], o = {
enqueue(l, h = 1, c) {
if (this.isCancelled)
return;
const u = this.desiredSize;
this.desiredSize -= h, u > 0 && this.desiredSize <= 0 && (this.sinkCapability = Promise.withResolvers(), this.ready = this.sinkCapability.promise), n.postMessage({
sourceName: s,
targetName: i,
stream: et.ENQUEUE,
streamId: e,
chunk: l
}, c);
},
close() {
this.isCancelled || (this.isCancelled = !0, n.postMessage({
sourceName: s,
targetName: i,
stream: et.CLOSE,
streamId: e
}), delete r.streamSinks[e]);
},
error(l) {
N(l instanceof Error, "error must have a valid reason"), !this.isCancelled && (this.isCancelled = !0, n.postMessage({
sourceName: s,
targetName: i,
stream: et.ERROR,
streamId: e,
reason: mt(l)
}));
},
sinkCapability: Promise.withResolvers(),
onPull: null,
onCancel: null,
isCancelled: !1,
desiredSize: t.desiredSize,
ready: null
};
o.sinkCapability.resolve(), o.ready = o.sinkCapability.promise, this.streamSinks[e] = o, Promise.try(a, t.data, o).then(function() {
n.postMessage({
sourceName: s,
targetName: i,
stream: et.START_COMPLETE,
streamId: e,
success: !0
});
}, function(l) {
n.postMessage({
sourceName: s,
targetName: i,
stream: et.START_COMPLETE,
streamId: e,
reason: mt(l)
});
});
}
#s(t) {
const e = t.streamId, s = this.sourceName, i = t.sourceName, n = this.comObj, r = this.streamControllers[e], a = this.streamSinks[e];
switch (t.stream) {
case et.START_COMPLETE:
t.success ? r.startCall.resolve() : r.startCall.reject(mt(t.reason));
break;
case et.PULL_COMPLETE:
t.success ? r.pullCall.resolve() : r.pullCall.reject(mt(t.reason));
break;
case et.PULL:
if (!a) {
n.postMessage({
sourceName: s,
targetName: i,
stream: et.PULL_COMPLETE,
streamId: e,
success: !0
});
break;
}
a.desiredSize <= 0 && t.desiredSize > 0 && a.sinkCapability.resolve(), a.desiredSize = t.desiredSize, Promise.try(a.onPull || ei).then(function() {
n.postMessage({
sourceName: s,
targetName: i,
stream: et.PULL_COMPLETE,
streamId: e,
success: !0
});
}, function(l) {
n.postMessage({
sourceName: s,
targetName: i,
stream: et.PULL_COMPLETE,
streamId: e,
reason: mt(l)
});
});
break;
case et.ENQUEUE:
if (N(r, "enqueue should have stream controller"), r.isClosed)
break;
r.controller.enqueue(t.chunk);
break;
case et.CLOSE:
if (N(r, "close should have stream controller"), r.isClosed)
break;
r.isClosed = !0, r.controller.close(), this.#a(r, e);
break;
case et.ERROR:
N(r, "error should have stream controller"), r.controller.error(mt(t.reason)), this.#a(r, e);
break;
case et.CANCEL_COMPLETE:
t.success ? r.cancelCall.resolve() : r.cancelCall.reject(mt(t.reason)), this.#a(r, e);
break;
case et.CANCEL:
if (!a)
break;
const o = mt(t.reason);
Promise.try(a.onCancel || ei, o).then(function() {
n.postMessage({
sourceName: s,
targetName: i,
stream: et.CANCEL_COMPLETE,
streamId: e,
success: !0
});
}, function(l) {
n.postMessage({
sourceName: s,
targetName: i,
stream: et.CANCEL_COMPLETE,
streamId: e,
reason: mt(l)
});
}), a.sinkCapability.reject(o), a.isCancelled = !0, delete this.streamSinks[e];
break;
default:
throw new Error("Unexpected stream case");
}
}
async #a(t, e) {
await Promise.allSettled([t.startCall?.promise, t.pullCall?.promise, t.cancelCall?.promise]), delete this.streamControllers[e];
}
destroy() {
this.#t?.abort(), this.#t = null;
}
}
class Mi {
#t = !1;
constructor({
enableHWA: t = !1
}) {
this.#t = t;
}
create(t, e) {
if (t <= 0 || e <= 0)
throw new Error("Invalid canvas size");
const s = this._createCanvas(t, e);
return {
canvas: s,
context: s.getContext("2d", {
willReadFrequently: !this.#t
})
};
}
reset(t, e, s) {
if (!t.canvas)
throw new Error("Canvas is not specified");
if (e <= 0 || s <= 0)
throw new Error("Invalid canvas size");
t.canvas.width = e, t.canvas.height = s;
}
destroy(t) {
if (!t.canvas)
throw new Error("Canvas is not specified");
t.canvas.width = 0, t.canvas.height = 0, t.canvas = null, t.context = null;
}
_createCanvas(t, e) {
V("Abstract method `_createCanvas` called.");
}
}
class In extends Mi {
constructor({
ownerDocument: t = globalThis.document,
enableHWA: e = !1
}) {
super({
enableHWA: e
}), this._document = t;
}
_createCanvas(t, e) {
const s = this._document.createElement("canvas");
return s.width = t, s.height = e, s;
}
}
class Ri {
constructor({
baseUrl: t = null,
isCompressed: e = !0
}) {
this.baseUrl = t, this.isCompressed = e;
}
async fetch({
name: t
}) {
if (!this.baseUrl)
throw new Error("Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided.");
if (!t)
throw new Error("CMap name must be specified.");
const e = this.baseUrl + t + (this.isCompressed ? ".bcmap" : "");
return this._fetch(e).then((s) => ({
cMapData: s,
isCompressed: this.isCompressed
})).catch((s) => {
throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${e}`);
});
}
async _fetch(t) {
V("Abstract method `_fetch` called.");
}
}
class si extends Ri {
async _fetch(t) {
const e = await Pe(t, this.isCompressed ? "arraybuffer" : "text");
return e instanceof ArrayBuffer ? new Uint8Array(e) : Te(e);
}
}
class Di {
addFilter(t) {
return "none";
}
addHCMFilter(t, e) {
return "none";
}
addAlphaFilter(t) {
return "none";
}
addLuminosityFilter(t) {
return "none";
}
addHighlightHCMFilter(t, e, s, i, n) {
return "none";
}
destroy(t = !1) {
}
}
class Fn extends Di {
#t;
#e;
#i;
#s;
#a;
#r;
#n = 0;
constructor({
docId: t,
ownerDocument: e = globalThis.document
}) {
super(), this.#s = t, this.#a = e;
}
get #o() {
return this.#e ||= /* @__PURE__ */ new Map();
}
get #h() {
return this.#r ||= /* @__PURE__ */ new Map();
}
get #l() {
if (!this.#i) {
const t = this.#a.createElement("div"), {
style: e
} = t;
e.visibility = "hidden", e.contain = "strict", e.width = e.height = 0, e.position = "absolute", e.top = e.left = 0, e.zIndex = -1;
const s = this.#a.createElementNS(Lt, "svg");
s.setAttribute("width", 0), s.setAttribute("height", 0), this.#i = this.#a.createElementNS(Lt, "defs"), t.append(s), s.append(this.#i), this.#a.body.append(t);
}
return this.#i;
}
#u(t) {
if (t.length === 1) {
const o = t[0], l = new Array(256);
for (let c = 0; c < 256; c++)
l[c] = o[c] / 255;
const h = l.join(",");
return [h, h, h];
}
const [e, s, i] = t, n = new Array(256), r = new Array(256), a = new Array(256);
for (let o = 0; o < 256; o++)
n[o] = e[o] / 255, r[o] = s[o] / 255, a[o] = i[o] / 255;
return [n.join(","), r.join(","), a.join(",")];
}
#d(t) {
if (this.#t === void 0) {
this.#t = "";
const e = this.#a.URL;
e !== this.#a.baseURI && (Ze(e) ? L('#createUrl: ignore "data:"-URL for performance reasons.') : this.#t = wi(e, ""));
}
return `url(${this.#t}#${t})`;
}
addFilter(t) {
if (!t)
return "none";
let e = this.#o.get(t);
if (e)
return e;
const [s, i, n] = this.#u(t), r = t.length === 1 ? s : `${s}${i}${n}`;
if (e = this.#o.get(r), e)
return this.#o.set(t, e), e;
const a = `g_${this.#s}_transfer_map_${this.#n++}`, o = this.#d(a);
this.#o.set(t, o), this.#o.set(r, o);
const l = this.#g(a);
return this.#p(s, i, n, l), o;
}
addHCMFilter(t, e) {
const s = `${t}-${e}`, i = "base";
let n = this.#h.get(i);
if (n?.key === s || (n ? (n.filter?.remove(), n.key = s, n.url = "none", n.filter = null) : (n = {
key: s,
url: "none",
filter: null
}, this.#h.set(i, n)), !t || !e))
return n.url;
const r = this.#A(t);
t = P.makeHexColor(...r);
const a = this.#A(e);
if (e = P.makeHexColor(...a), this.#l.style.color = "", t === "#000000" && e === "#ffffff" || t === e)
return n.url;
const o = new Array(256);
for (let f = 0; f <= 255; f++) {
const g = f / 255;
o[f] = g <= 0.03928 ? g / 12.92 : ((g + 0.055) / 1.055) ** 2.4;
}
const l = o.join(","), h = `g_${this.#s}_hcm_filter`, c = n.filter = this.#g(h);
this.#p(l, l, l, c), this.#m(c);
const u = (f, g) => {
const p = r[f] / 255, b = a[f] / 255, m = new Array(g + 1);
for (let A = 0; A <= g; A++)
m[A] = p + A / g * (b - p);
return m.join(",");
};
return this.#p(u(0, 5), u(1, 5), u(2, 5), c), n.url = this.#d(h), n.url;
}
addAlphaFilter(t) {
let e = this.#o.get(t);
if (e)
return e;
const [s] = this.#u([t]), i = `alpha_${s}`;
if (e = this.#o.get(i), e)
return this.#o.set(t, e), e;
const n = `g_${this.#s}_alpha_map_${this.#n++}`, r = this.#d(n);
this.#o.set(t, r), this.#o.set(i, r);
const a = this.#g(n);
return this.#b(s, a), r;
}
addLuminosityFilter(t) {
let e = this.#o.get(t || "luminosity");
if (e)
return e;
let s, i;
if (t ? ([s] = this.#u([t]), i = `luminosity_${s}`) : i = "luminosity", e = this.#o.get(i), e)
return this.#o.set(t, e), e;
const n = `g_${this.#s}_luminosity_map_${this.#n++}`, r = this.#d(n);
this.#o.set(t, r), this.#o.set(i, r);
const a = this.#g(n);
return this.#f(a), t && this.#b(s, a), r;
}
addHighlightHCMFilter(t, e, s, i, n) {
const r = `${e}-${s}-${i}-${n}`;
let a = this.#h.get(t);
if (a?.key === r || (a ? (a.filter?.remove(), a.key = r, a.url = "none", a.filter = null) : (a = {
key: r,
url: "none",
filter: null
}, this.#h.set(t, a)), !e || !s))
return a.url;
const [o, l] = [e, s].map(this.#A.bind(this));
let h = Math.round(0.2126 * o[0] + 0.7152 * o[1] + 0.0722 * o[2]), c = Math.round(0.2126 * l[0] + 0.7152 * l[1] + 0.0722 * l[2]), [u, f] = [i, n].map(this.#A.bind(this));
c < h && ([h, c, u, f] = [c, h, f, u]), this.#l.style.color = "";
const g = (m, A, y) => {
const _ = new Array(256), w = (c - h) / y, v = m / 255, S = (A - m) / (255 * y);
let E = 0;
for (let C = 0; C <= y; C++) {
const k = Math.round(h + C * w), T = v + C * S;
for (let $ = E; $ <= k; $++)
_[$] = T;
E = k + 1;
}
for (let C = E; C < 256; C++)
_[C] = _[E - 1];
return _.join(",");
}, p = `g_${this.#s}_hcm_${t}_filter`, b = a.filter = this.#g(p);
return this.#m(b), this.#p(g(u[0], f[0], 5), g(u[1], f[1], 5), g(u[2], f[2], 5), b), a.url = this.#d(p), a.url;
}
destroy(t = !1) {
t && this.#r?.size || (this.#i?.parentNode.parentNode.remove(), this.#i = null, this.#e?.clear(), this.#e = null, this.#r?.clear(), this.#r = null, this.#n = 0);
}
#f(t) {
const e = this.#a.createElementNS(Lt, "feColorMatrix");
e.setAttribute("type", "matrix"), e.setAttribute("values", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0"), t.append(e);
}
#m(t) {
const e = this.#a.createElementNS(Lt, "feColorMatrix");
e.setAttribute("type", "matrix"), e.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"), t.append(e);
}
#g(t) {
const e = this.#a.createElementNS(Lt, "filter");
return e.setAttribute("color-interpolation-filters", "sRGB"), e.setAttribute("id", t), this.#l.append(e), e;
}
#c(t, e, s) {
const i = this.#a.createElementNS(Lt, e);
i.setAttribute("type", "discrete"), i.setAttribute("tableValues", s), t.append(i);
}
#p(t, e, s, i) {
const n = this.#a.createElementNS(Lt, "feComponentTransfer");
i.append(n), this.#c(n, "feFuncR", t), this.#c(n, "feFuncG", e), this.#c(n, "feFuncB", s);
}
#b(t, e) {
const s = this.#a.createElementNS(Lt, "feComponentTransfer");
e.append(s), this.#c(s, "feFuncA", t);
}
#A(t) {
return this.#l.style.color = t, Me(getComputedStyle(this.#l).getPropertyValue("color"));
}
}
class Li {
constructor({
baseUrl: t = null
}) {
this.baseUrl = t;
}
async fetch({
filename: t
}) {
if (!this.baseUrl)
throw new Error("Ensure that the `standardFontDataUrl` API parameter is provided.");
if (!t)
throw new Error("Font filename must be specified.");
const e = `${this.baseUrl}${t}`;
return this._fetch(e).catch((s) => {
throw new Error(`Unable to load font data at: ${e}`);
});
}
async _fetch(t) {
V("Abstract method `_fetch` called.");
}
}
class ii extends Li {
async _fetch(t) {
const e = await Pe(t, "arraybuffer");
return new Uint8Array(e);
}
}
class Ii {
constructor({
baseUrl: t = null
}) {
this.baseUrl = t;
}
async fetch({
filename: t
}) {
if (!this.baseUrl)
throw new Error("Ensure that the `wasmUrl` API parameter is provided.");
if (!t)
throw new Error("Wasm filename must be specified.");
const e = `${this.baseUrl}${t}`;
return this._fetch(e).catch((s) => {
throw new Error(`Unable to load wasm data at: ${e}`);
});
}
async _fetch(t) {
V("Abstract method `_fetch` called.");
}
}
class ni extends Ii {
async _fetch(t) {
const e = await Pe(t, "arraybuffer");
return new Uint8Array(e);
}
}
ut && L("Please use the `legacy` build in Node.js environments.");
async function Is(d) {
const e = await process.getBuiltinModule("fs").promises.readFile(d);
return new Uint8Array(e);
}
class On extends Di {
}
class Nn extends Mi {
_createCanvas(t, e) {
return process.getBuiltinModule("module").createRequire(import.meta.url)("@napi-rs/canvas").createCanvas(t, e);
}
}
class Bn extends Ri {
async _fetch(t) {
return Is(t);
}
}
class Un extends Li {
async _fetch(t) {
return Is(t);
}
}
class Hn extends Ii {
async _fetch(t) {
return Is(t);
}
}
const Jt = "__forcedDependency", {
floor: ri,
ceil: ai
} = Math;
function Ne(d, t, e, s, i, n) {
d[t * 4 + 0] = Math.min(d[t * 4 + 0], e), d[t * 4 + 1] = Math.min(d[t * 4 + 1], s), d[t * 4 + 2] = Math.max(d[t * 4 + 2], i), d[t * 4 + 3] = Math.max(d[t * 4 + 3], n);
}
const Ss = new Uint32Array(new Uint8Array([255, 255, 0, 0]).buffer)[0];
class $n {
#t;
#e;
constructor(t, e) {
this.#t = t, this.#e = e;
}
get length() {
return this.#t.length;
}
isEmpty(t) {
return this.#t[t] === Ss;
}
minX(t) {
return this.#e[t * 4 + 0] / 256;
}
minY(t) {
return this.#e[t * 4 + 1] / 256;
}
maxX(t) {
return (this.#e[t * 4 + 2] + 1) / 256;
}
maxY(t) {
return (this.#e[t * 4 + 3] + 1) / 256;
}
}
const Be = (d, t) => {
if (!d)
return;
let e = d.get(t);
return e || (e = {
dependencies: /* @__PURE__ */ new Set(),
isRenderingOperation: !1
}, d.set(t, e)), e;
};
class zn {
#t = {
__proto__: null
};
#e = {
__proto__: null,
transform: [],
moveText: [],
sameLineText: [],
[Jt]: []
};
#i = /* @__PURE__ */ new Map();
#s = [];
#a = [];
#r = [[1, 0, 0, 1, 0, 0]];
#n = [-1 / 0, -1 / 0, 1 / 0, 1 / 0];
#o = new Float64Array([1 / 0, 1 / 0, -1 / 0, -1 / 0]);
#h = -1;
#l = /* @__PURE__ */ new Set();
#u = /* @__PURE__ */ new Map();
#d = /* @__PURE__ */ new Map();
#f;
#m;
#g;
#c;
#p;
constructor(t, e, s = !1) {
this.#f = t.width, this.#m = t.height, this.#b(e), s && (this.#p = /* @__PURE__ */ new Map());
}
growOperationsCount(t) {
t >= this.#c.length && this.#b(t, this.#c);
}
#b(t, e) {
const s = new ArrayBuffer(t * 4);
this.#g = new Uint8ClampedArray(s), this.#c = new Uint32Array(s), e && e.length > 0 ? (this.#c.set(e), this.#c.fill(Ss, e.length)) : this.#c.fill(Ss);
}
save(t) {
return this.#t = {
__proto__: this.#t
}, this.#e = {
__proto__: this.#e,
transform: {
__proto__: this.#e.transform
},
moveText: {
__proto__: this.#e.moveText
},
sameLineText: {
__proto__: this.#e.sameLineText
},
[Jt]: {
__proto__: this.#e[Jt]
}
}, this.#n = {
__proto__: this.#n
}, this.#s.push(t), this;
}
restore(t) {
const e = Object.getPrototypeOf(this.#t);
if (e === null)
return this;
this.#t = e, this.#e = Object.getPrototypeOf(this.#e), this.#n = Object.getPrototypeOf(this.#n);
const s = this.#s.pop();
return s !== void 0 && (Be(this.#p, t)?.dependencies.add(s), this.#c[t] = this.#c[s]), this;
}
recordOpenMarker(t) {
return this.#s.push(t), this;
}
getOpenMarker() {
return this.#s.length === 0 ? null : this.#s.at(-1);
}
recordCloseMarker(t) {
const e = this.#s.pop();
return e !== void 0 && (Be(this.#p, t)?.dependencies.add(e), this.#c[t] = this.#c[e]), this;
}
beginMarkedContent(t) {
return this.#a.push(t), this;
}
endMarkedContent(t) {
const e = this.#a.pop();
return e !== void 0 && (Be(this.#p, t)?.dependencies.add(e), this.#c[t] = this.#c[e]), this;
}
pushBaseTransform(t) {
return this.#r.push(P.multiplyByDOMMatrix(this.#r.at(-1), t.getTransform())), this;
}
popBaseTransform() {
return this.#r.length > 1 && this.#r.pop(), this;
}
recordSimpleData(t, e) {
return this.#t[t] = e, this;
}
recordIncrementalData(t, e) {
return this.#e[t].push(e), this;
}
resetIncrementalData(t, e) {
return this.#e[t].length = 0, this;
}
recordNamedData(t, e) {
return this.#i.set(t, e), this;
}
recordSimpleDataFromNamed(t, e, s) {
this.#t[t] = this.#i.get(e) ?? s;
}
recordFutureForcedDependency(t, e) {
return this.recordIncrementalData(Jt, e), this;
}
inheritSimpleDataAsFutureForcedDependencies(t) {
for (const e of t)
e in this.#t && this.recordFutureForcedDependency(e, this.#t[e]);
return this;
}
inheritPendingDependenciesAsFutureForcedDependencies() {
for (const t of this.#l)
this.recordFutureForcedDependency(Jt, t);
return this;
}
resetBBox(t) {
return this.#h !== t && (this.#h = t, this.#o[0] = 1 / 0, this.#o[1] = 1 / 0, this.#o[2] = -1 / 0, this.#o[3] = -1 / 0), this;
}
recordClipBox(t, e, s, i, n, r) {
const a = P.multiplyByDOMMatrix(this.#r.at(-1), e.getTransform()), o = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
P.axialAlignedBoundingBox([s, n, i, r], a, o);
const l = P.intersect(this.#n, o);
return l ? (this.#n[0] = l[0], this.#n[1] = l[1], this.#n[2] = l[2], this.#n[3] = l[3]) : (this.#n[0] = this.#n[1] = 1 / 0, this.#n[2] = this.#n[3] = -1 / 0), this;
}
recordBBox(t, e, s, i, n, r) {
const a = this.#n;
if (a[0] === 1 / 0)
return this;
const o = P.multiplyByDOMMatrix(this.#r.at(-1), e.getTransform());
if (a[0] === -1 / 0)
return P.axialAlignedBoundingBox([s, n, i, r], o, this.#o), this;
const l = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
return P.axialAlignedBoundingBox([s, n, i, r], o, l), this.#o[0] = Math.min(this.#o[0], Math.max(l[0], a[0])), this.#o[1] = Math.min(this.#o[1], Math.max(l[1], a[1])), this.#o[2] = Math.max(this.#o[2], Math.min(l[2], a[2])), this.#o[3] = Math.max(this.#o[3], Math.min(l[3], a[3])), this;
}
recordCharacterBBox(t, e, s, i = 1, n = 0, r = 0, a) {
const o = s.bbox;
let l, h;
if (o && (l = o[2] !== o[0] && o[3] !== o[1] && this.#d.get(s), l !== !1 && (h = [0, 0, 0, 0], P.axialAlignedBoundingBox(o, s.fontMatrix, h), (i !== 1 || n !== 0 || r !== 0) && P.scaleMinMax([i, 0, 0, -i, n, r], h), l)))
return this.recordBBox(t, e, h[0], h[2], h[1], h[3]);
if (!a)
return this.recordFullPageBBox(t);
const c = a();
return o && h && l === void 0 && (l = h[0] <= n - c.actualBoundingBoxLeft && h[2] >= n + c.actualBoundingBoxRight && h[1] <= r - c.actualBoundingBoxAscent && h[3] >= r + c.actualBoundingBoxDescent, this.#d.set(s, l), l) ? this.recordBBox(t, e, h[0], h[2], h[1], h[3]) : this.recordBBox(t, e, n - c.actualBoundingBoxLeft, n + c.actualBoundingBoxRight, r - c.actualBoundingBoxAscent, r + c.actualBoundingBoxDescent);
}
recordFullPageBBox(t) {
return this.#o[0] = Math.max(0, this.#n[0]), this.#o[1] = Math.max(0, this.#n[1]), this.#o[2] = Math.min(this.#f, this.#n[2]), this.#o[3] = Math.min(this.#m, this.#n[3]), this;
}
getSimpleIndex(t) {
return this.#t[t];
}
recordDependencies(t, e) {
const s = this.#l, i = this.#t, n = this.#e;
for (const r of e)
r in this.#t ? s.add(i[r]) : r in n && n[r].forEach(s.add, s);
return this;
}
recordNamedDependency(t, e) {
return this.#i.has(e) && this.#l.add(this.#i.get(e)), this;
}
recordOperation(t, e = !1) {
if (this.recordDependencies(t, [Jt]), this.#p) {
const s = Be(this.#p, t), {
dependencies: i
} = s;
this.#l.forEach(i.add, i), this.#s.forEach(i.add, i), this.#a.forEach(i.add, i), i.delete(t), s.isRenderingOperation = !0;
}
if (this.#h === t) {
const s = ri(this.#o[0] * 256 / this.#f), i = ri(this.#o[1] * 256 / this.#m), n = ai(this.#o[2] * 256 / this.#f), r = ai(this.#o[3] * 256 / this.#m);
Ne(this.#g, t, s, i, n, r);
for (const a of this.#l)
a !== t && Ne(this.#g, a, s, i, n, r);
for (const a of this.#s)
a !== t && Ne(this.#g, a, s, i, n, r);
for (const a of this.#a)
a !== t && Ne(this.#g, a, s, i, n, r);
e || (this.#l.clear(), this.#h = -1);
}
return this;
}
recordShowTextOperation(t, e = !1) {
const s = Array.from(this.#l);
this.recordOperation(t, e), this.recordIncrementalData("sameLineText", t);
for (const i of s)
this.recordIncrementalData("sameLineText", i);
return this;
}
bboxToClipBoxDropOperation(t, e = !1) {
return this.#h === t && (this.#h = -1, this.#n[0] = Math.max(this.#n[0], this.#o[0]), this.#n[1] = Math.max(this.#n[1], this.#o[1]), this.#n[2] = Math.min(this.#n[2], this.#o[2]), this.#n[3] = Math.min(this.#n[3], this.#o[3]), e || this.#l.clear()), this;
}
_takePendingDependencies() {
const t = this.#l;
return this.#l = /* @__PURE__ */ new Set(), t;
}
_extractOperation(t) {
const e = this.#u.get(t);
return this.#u.delete(t), e;
}
_pushPendingDependencies(t) {
for (const e of t)
this.#l.add(e);
}
take() {
return this.#d.clear(), new $n(this.#c, this.#g);
}
takeDebugMetadata() {
return this.#p;
}
}
class Xe {
#t;
#e;
#i;
#s = 0;
#a = 0;
constructor(t, e, s) {
if (t instanceof Xe && t.#i === !!s)
return t;
this.#t = t, this.#e = e, this.#i = !!s;
}
growOperationsCount() {
throw new Error("Unreachable");
}
save(t) {
return this.#a++, this.#t.save(this.#e), this;
}
restore(t) {
return this.#a > 0 && (this.#t.restore(this.#e), this.#a--), this;
}
recordOpenMarker(t) {
return this.#s++, this;
}
getOpenMarker() {
return this.#s > 0 ? this.#e : this.#t.getOpenMarker();
}
recordCloseMarker(t) {
return this.#s--, this;
}
beginMarkedContent(t) {
return this;
}
endMarkedContent(t) {
return this;
}
pushBaseTransform(t) {
return this.#t.pushBaseTransform(t), this;
}
popBaseTransform() {
return this.#t.popBaseTransform(), this;
}
recordSimpleData(t, e) {
return this.#t.recordSimpleData(t, this.#e), this;
}
recordIncrementalData(t, e) {
return this.#t.recordIncrementalData(t, this.#e), this;
}
resetIncrementalData(t, e) {
return this.#t.resetIncrementalData(t, this.#e), this;
}
recordNamedData(t, e) {
return this;
}
recordSimpleDataFromNamed(t, e, s) {
return this.#t.recordSimpleDataFromNamed(t, e, this.#e), this;
}
recordFutureForcedDependency(t, e) {
return this.#t.recordFutureForcedDependency(t, this.#e), this;
}
inheritSimpleDataAsFutureForcedDependencies(t) {
return this.#t.inheritSimpleDataAsFutureForcedDependencies(t), this;
}
inheritPendingDependenciesAsFutureForcedDependencies() {
return this.#t.inheritPendingDependenciesAsFutureForcedDependencies(), this;
}
resetBBox(t) {
return this.#i || this.#t.resetBBox(this.#e), this;
}
recordClipBox(t, e, s, i, n, r) {
return this.#i || this.#t.recordClipBox(this.#e, e, s, i, n, r), this;
}
recordBBox(t, e, s, i, n, r) {
return this.#i || this.#t.recordBBox(this.#e, e, s, i, n, r), this;
}
recordCharacterBBox(t, e, s, i, n, r, a) {
return this.#i || this.#t.recordCharacterBBox(this.#e, e, s, i, n, r, a), this;
}
recordFullPageBBox(t) {
return this.#i || this.#t.recordFullPageBBox(this.#e), this;
}
getSimpleIndex(t) {
return this.#t.getSimpleIndex(t);
}
recordDependencies(t, e) {
return this.#t.recordDependencies(this.#e, e), this;
}
recordNamedDependency(t, e) {
return this.#t.recordNamedDependency(this.#e, e), this;
}
recordOperation(t) {
return this.#t.recordOperation(this.#e, !0), this;
}
recordShowTextOperation(t) {
return this.#t.recordShowTextOperation(this.#e, !0), this;
}
bboxToClipBoxDropOperation(t) {
return this.#i || this.#t.bboxToClipBoxDropOperation(this.#e, !0), this;
}
take() {
throw new Error("Unreachable");
}
takeDebugMetadata() {
throw new Error("Unreachable");
}
}
const vt = {
stroke: ["path", "transform", "filter", "strokeColor", "strokeAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "dash"],
fill: ["path", "transform", "filter", "fillColor", "fillAlpha", "globalCompositeOperation", "SMask"],
imageXObject: ["transform", "SMask", "filter", "fillAlpha", "strokeAlpha", "globalCompositeOperation"],
rawFillPath: ["filter", "fillColor", "fillAlpha"],
showText: ["transform", "leading", "charSpacing", "wordSpacing", "hScale", "textRise", "moveText", "textMatrix", "font", "fontObj", "filter", "fillColor", "textRenderingMode", "SMask", "fillAlpha", "strokeAlpha", "globalCompositeOperation", "sameLineText"],
transform: ["transform"],
transformAndFill: ["transform", "fillColor"]
}, lt = {
FILL: "Fill",
STROKE: "Stroke",
SHADING: "Shading"
};
function Es(d, t) {
if (!t)
return;
const e = t[2] - t[0], s = t[3] - t[1], i = new Path2D();
i.rect(t[0], t[1], e, s), d.clip(i);
}
class Fs {
isModifyingCurrentTransform() {
return !1;
}
getPattern() {
V("Abstract method `getPattern` called.");
}
}
class jn extends Fs {
constructor(t) {
super(), this._type = t[1], this._bbox = t[2], this._colorStops = t[3], this._p0 = t[4], this._p1 = t[5], this._r0 = t[6], this._r1 = t[7], this.matrix = null;
}
_createGradient(t) {
let e;
this._type === "axial" ? e = t.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]) : this._type === "radial" && (e = t.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1));
for (const s of this._colorStops)
e.addColorStop(s[0], s[1]);
return e;
}
getPattern(t, e, s, i) {
let n;
if (i === lt.STROKE || i === lt.FILL) {
const r = e.current.getClippedPathBoundingBox(i, K(t)) || [0, 0, 0, 0], a = Math.ceil(r[2] - r[0]) || 1, o = Math.ceil(r[3] - r[1]) || 1, l = e.cachedCanvases.getCanvas("pattern", a, o), h = l.context;
h.clearRect(0, 0, h.canvas.width, h.canvas.height), h.beginPath(), h.rect(0, 0, h.canvas.width, h.canvas.height), h.translate(-r[0], -r[1]), s = P.transform(s, [1, 0, 0, 1, r[0], r[1]]), h.transform(...e.baseTransform), this.matrix && h.transform(...this.matrix), Es(h, this._bbox), h.fillStyle = this._createGradient(h), h.fill(), n = t.createPattern(l.canvas, "no-repeat");
const c = new DOMMatrix(s);
n.setTransform(c);
} else
Es(t, this._bbox), n = this._createGradient(t);
return n;
}
}
function cs(d, t, e, s, i, n, r, a) {
const o = t.coords, l = t.colors, h = d.data, c = d.width * 4;
let u;
o[e + 1] > o[s + 1] && (u = e, e = s, s = u, u = n, n = r, r = u), o[s + 1] > o[i + 1] && (u = s, s = i, i = u, u = r, r = a, a = u), o[e + 1] > o[s + 1] && (u = e, e = s, s = u, u = n, n = r, r = u);
const f = (o[e] + t.offsetX) * t.scaleX, g = (o[e + 1] + t.offsetY) * t.scaleY, p = (o[s] + t.offsetX) * t.scaleX, b = (o[s + 1] + t.offsetY) * t.scaleY, m = (o[i] + t.offsetX) * t.scaleX, A = (o[i + 1] + t.offsetY) * t.scaleY;
if (g >= A)
return;
const y = l[n], _ = l[n + 1], w = l[n + 2], v = l[r], S = l[r + 1], E = l[r + 2], C = l[a], k = l[a + 1], T = l[a + 2], $ = Math.round(g), z = Math.round(A);
let j, W, R, D, B, ct, Dt, Ot;
for (let it = $; it <= z; it++) {
if (it < b) {
const tt = it < g ? 0 : (g - it) / (g - b);
j = f - (f - p) * tt, W = y - (y - v) * tt, R = _ - (_ - S) * tt, D = w - (w - E) * tt;
} else {
let tt;
it > A ? tt = 1 : b === A ? tt = 0 : tt = (b - it) / (b - A), j = p - (p - m) * tt, W = v - (v - C) * tt, R = S - (S - k) * tt, D = E - (E - T) * tt;
}
let Y;
it < g ? Y = 0 : it > A ? Y = 1 : Y = (g - it) / (g - A), B = f - (f - m) * Y, ct = y - (y - C) * Y, Dt = _ - (_ - k) * Y, Ot = w - (w - T) * Y;
const jt = Math.round(Math.min(j, B)), Nt = Math.round(Math.max(j, B));
let Bt = c * it + jt * 4;
for (let tt = jt; tt <= Nt; tt++)
Y = (j - tt) / (j - B), Y < 0 ? Y = 0 : Y > 1 && (Y = 1), h[Bt++] = W - (W - ct) * Y | 0, h[Bt++] = R - (R - Dt) * Y | 0, h[Bt++] = D - (D - Ot) * Y | 0, h[Bt++] = 255;
}
}
function Gn(d, t, e) {
const s = t.coords, i = t.colors;
let n, r;
switch (t.type) {
case ms.LATTICE:
const a = t.verticesPerRow, o = Math.floor(s.length / a) - 1, l = a - 1;
for (n = 0; n < o; n++) {
let h = n * a;
for (let c = 0; c < l; c++, h++)
cs(d, e, s[h], s[h + 1], s[h + a], i[h], i[h + 1], i[h + a]), cs(d, e, s[h + a + 1], s[h + 1], s[h + a], i[h + a + 1], i[h + 1], i[h + a]);
}
break;
case ms.TRIANGLES:
for (n = 0, r = s.length; n < r; n += 3)
cs(d, e, s[n], s[n + 1], s[n + 2], i[n], i[n + 1], i[n + 2]);
break;
default:
throw new Error("illegal figure");
}
}
class Vn extends Fs {
constructor(t) {
super(), this._coords = t[2], this._colors = t[3], this._figures = t[4], this._bounds = t[5], this._bbox = t[6], this._background = t[7], this.matrix = null;
}
_createMeshCanvas(t, e, s) {
const a = Math.floor(this._bounds[0]), o = Math.floor(this._bounds[1]), l = Math.ceil(this._bounds[2]) - a, h = Math.ceil(this._bounds[3]) - o, c = Math.min(Math.ceil(Math.abs(l * t[0] * 1.1)), 3e3), u = Math.min(Math.ceil(Math.abs(h * t[1] * 1.1)), 3e3), f = l / c, g = h / u, p = {
coords: this._coords,
colors: this._colors,
offsetX: -a,
offsetY: -o,
scaleX: 1 / f,
scaleY: 1 / g
}, b = c + 4, m = u + 4, A = s.getCanvas("mesh", b, m), y = A.context, _ = y.createImageData(c, u);
if (e) {
const v = _.data;
for (let S = 0, E = v.length; S < E; S += 4)
v[S] = e[0], v[S + 1] = e[1], v[S + 2] = e[2], v[S + 3] = 255;
}
for (const v of this._figures)
Gn(_, v, p);
return y.putImageData(_, 2, 2), {
canvas: A.canvas,
offsetX: a - 2 * f,
offsetY: o - 2 * g,
scaleX: f,
scaleY: g
};
}
isModifyingCurrentTransform() {
return !0;
}
getPattern(t, e, s, i) {
Es(t, this._bbox);
const n = new Float32Array(2);
if (i === lt.SHADING)
P.singularValueDecompose2dScale(K(t), n);
else if (this.matrix) {
P.singularValueDecompose2dScale(this.matrix, n);
const [a, o] = n;
P.singularValueDecompose2dScale(e.baseTransform, n), n[0] *= a, n[1] *= o;
} else
P.singularValueDecompose2dScale(e.baseTransform, n);
const r = this._createMeshCanvas(n, i === lt.SHADING ? null : this._background, e.cachedCanvases);
return i !== lt.SHADING && (t.setTransform(...e.baseTransform), this.matrix && t.transform(...this.matrix)), t.translate(r.offsetX, r.offsetY), t.scale(r.scaleX, r.scaleY), t.createPattern(r.canvas, "no-repeat");
}
}
class Wn extends Fs {
getPattern() {
return "hotpink";
}
}
function Xn(d) {
switch (d[0]) {
case "RadialAxial":
return new jn(d);
case "Mesh":
return new Vn(d);
case "Dummy":
return new Wn();
}
throw new Error(`Unknown IR type: ${d[0]}`);
}
const oi = {
COLORED: 1,
UNCOLORED: 2
};
class Os {
static MAX_PATTERN_SIZE = 3e3;
constructor(t, e, s, i) {
this.color = t[1], this.operatorList = t[2], this.matrix = t[3], this.bbox = t[4], this.xstep = t[5], this.ystep = t[6], this.paintType = t[7], this.tilingType = t[8], this.ctx = e, this.canvasGraphicsFactory = s, this.baseTransform = i;
}
createPatternCanvas(t, e) {
const {
bbox: s,
operatorList: i,
paintType: n,
tilingType: r,
color: a,
canvasGraphicsFactory: o
} = this;
let {
xstep: l,
ystep: h
} = this;
l = Math.abs(l), h = Math.abs(h), Je("TilingType: " + r);
const c = s[0], u = s[1], f = s[2], g = s[3], p = f - c, b = g - u, m = new Float32Array(2);
P.singularValueDecompose2dScale(this.matrix, m);
const [A, y] = m;
P.singularValueDecompose2dScale(this.baseTransform, m);
const _ = A * m[0], w = y * m[1];
let v = p, S = b, E = !1, C = !1;
const k = Math.ceil(l * _), T = Math.ceil(h * w), $ = Math.ceil(p * _), z = Math.ceil(b * w);
k >= $ ? v = l : E = !0, T >= z ? S = h : C = !0;
const j = this.getSizeAndScale(v, this.ctx.canvas.width, _), W = this.getSizeAndScale(S, this.ctx.canvas.height, w), R = t.cachedCanvases.getCanvas("pattern", j.size, W.size), D = R.context, B = o.createCanvasGraphics(D, e);
if (B.groupLevel = t.groupLevel, this.setFillAndStrokeStyleToContext(B, n, a), D.translate(-j.scale * c, -W.scale * u), B.transform(0, j.scale, 0, 0, W.scale, 0, 0), D.save(), B.dependencyTracker?.save(), this.clipBbox(B, c, u, f, g), B.baseTransform = K(B.ctx), B.executeOperatorList(i), B.endDrawing(), B.dependencyTracker?.restore(), D.restore(), E || C) {
const ct = R.canvas;
E && (v = l), C && (S = h);
const Dt = this.getSizeAndScale(v, this.ctx.canvas.width, _), Ot = this.getSizeAndScale(S, this.ctx.canvas.height, w), it = Dt.size, Y = Ot.size, jt = t.cachedCanvases.getCanvas("pattern-workaround", it, Y), Nt = jt.context, Bt = E ? Math.floor(p / l) : 0, tt = C ? Math.floor(b / h) : 0;
for (let ce = 0; ce <= Bt; ce++)
for (let de = 0; de <= tt; de++)
Nt.drawImage(ct, it * ce, Y * de, it, Y, 0, 0, it, Y);
return {
canvas: jt.canvas,
scaleX: Dt.scale,
scaleY: Ot.scale,
offsetX: c,
offsetY: u
};
}
return {
canvas: R.canvas,
scaleX: j.scale,
scaleY: W.scale,
offsetX: c,
offsetY: u
};
}
getSizeAndScale(t, e, s) {
const i = Math.max(Os.MAX_PATTERN_SIZE, e);
let n = Math.ceil(t * s);
return n >= i ? n = i : s = n / t, {
scale: s,
size: n
};
}
clipBbox(t, e, s, i, n) {
const r = i - e, a = n - s;
t.ctx.rect(e, s, r, a), P.axialAlignedBoundingBox([e, s, i, n], K(t.ctx), t.current.minMax), t.clip(), t.endPath();
}
setFillAndStrokeStyleToContext(t, e, s) {
const i = t.ctx, n = t.current;
switch (e) {
case oi.COLORED:
const {
fillStyle: r,
strokeStyle: a
} = this.ctx;
i.fillStyle = n.fillColor = r, i.strokeStyle = n.strokeColor = a;
break;
case oi.UNCOLORED:
i.fillStyle = i.strokeStyle = s, n.fillColor = n.strokeColor = s;
break;
default:
throw new an(`Unsupported paint type: ${e}`);
}
}
isModifyingCurrentTransform() {
return !1;
}
getPattern(t, e, s, i, n) {
let r = s;
i !== lt.SHADING && (r = P.transform(r, e.baseTransform), this.matrix && (r = P.transform(r, this.matrix)));
const a = this.createPatternCanvas(e, n);
let o = new DOMMatrix(r);
o = o.translate(a.offsetX, a.offsetY), o = o.scale(1 / a.scaleX, 1 / a.scaleY);
const l = t.createPattern(a.canvas, "repeat");
return l.setTransform(o), l;
}
}
function qn({
src: d,
srcPos: t = 0,
dest: e,
width: s,
height: i,
nonBlackColor: n = 4294967295,
inverseDecode: r = !1
}) {
const a = ht.isLittleEndian ? 4278190080 : 255, [o, l] = r ? [n, a] : [a, n], h = s >> 3, c = s & 7, u = d.length;
e = new Uint32Array(e.buffer);
let f = 0;
for (let g = 0; g < i; g++) {
for (const b = t + h; t < b; t++) {
const m = t < u ? d[t] : 255;
e[f++] = m & 128 ? l : o, e[f++] = m & 64 ? l : o, e[f++] = m & 32 ? l : o, e[f++] = m & 16 ? l : o, e[f++] = m & 8 ? l : o, e[f++] = m & 4 ? l : o, e[f++] = m & 2 ? l : o, e[f++] = m & 1 ? l : o;
}
if (c === 0)
continue;
const p = t < u ? d[t++] : 255;
for (let b = 0; b < c; b++)
e[f++] = p & 1 << 7 - b ? l : o;
}
return {
srcPos: t,
destPos: f
};
}
const li = 16, hi = 100, Yn = 15, ci = 10, bt = 16, ds = new DOMMatrix(), At = new Float32Array(2), ie = new Float32Array([1 / 0, 1 / 0, -1 / 0, -1 / 0]);
function Kn(d, t) {
if (d._removeMirroring)
throw new Error("Context is already forwarding operations.");
d.__originalSave = d.save, d.__originalRestore = d.restore, d.__originalRotate = d.rotate, d.__originalScale = d.scale, d.__originalTranslate = d.translate, d.__originalTransform = d.transform, d.__originalSetTransform = d.setTransform, d.__originalResetTransform = d.resetTransform, d.__originalClip = d.clip, d.__originalMoveTo = d.moveTo, d.__originalLineTo = d.lineTo, d.__originalBezierCurveTo = d.bezierCurveTo, d.__originalRect = d.rect, d.__originalClosePath = d.closePath, d.__originalBeginPath = d.beginPath, d._removeMirroring = () => {
d.save = d.__originalSave, d.restore = d.__originalRestore, d.rotate = d.__originalRotate, d.scale = d.__originalScale, d.translate = d.__originalTranslate, d.transform = d.__originalTransform, d.setTransform = d.__originalSetTransform, d.resetTransform = d.__originalResetTransform, d.clip = d.__originalClip, d.moveTo = d.__originalMoveTo, d.lineTo = d.__originalLineTo, d.bezierCurveTo = d.__originalBezierCurveTo, d.rect = d.__originalRect, d.closePath = d.__originalClosePath, d.beginPath = d.__originalBeginPath, delete d._removeMirroring;
}, d.save = function() {
t.save(), this.__originalSave();
}, d.restore = function() {
t.restore(), this.__originalRestore();
}, d.translate = function(e, s) {
t.translate(e, s), this.__originalTranslate(e, s);
}, d.scale = function(e, s) {
t.scale(e, s), this.__originalScale(e, s);
}, d.transform = function(e, s, i, n, r, a) {
t.transform(e, s, i, n, r, a), this.__originalTransform(e, s, i, n, r, a);
}, d.setTransform = function(e, s, i, n, r, a) {
t.setTransform(e, s, i, n, r, a), this.__originalSetTransform(e, s, i, n, r, a);
}, d.resetTransform = function() {
t.resetTransform(), this.__originalResetTransform();
}, d.rotate = function(e) {
t.rotate(e), this.__originalRotate(e);
}, d.clip = function(e) {
t.clip(e), this.__originalClip(e);
}, d.moveTo = function(e, s) {
t.moveTo(e, s), this.__originalMoveTo(e, s);
}, d.lineTo = function(e, s) {
t.lineTo(e, s), this.__originalLineTo(e, s);
}, d.bezierCurveTo = function(e, s, i, n, r, a) {
t.bezierCurveTo(e, s, i, n, r, a), this.__originalBezierCurveTo(e, s, i, n, r, a);
}, d.rect = function(e, s, i, n) {
t.rect(e, s, i, n), this.__originalRect(e, s, i, n);
}, d.closePath = function() {
t.closePath(), this.__originalClosePath();
}, d.beginPath = function() {
t.beginPath(), this.__originalBeginPath();
};
}
class Qn {
constructor(t) {
this.canvasFactory = t, this.cache = /* @__PURE__ */ Object.create(null);
}
getCanvas(t, e, s) {
let i;
return this.cache[t] !== void 0 ? (i = this.cache[t], this.canvasFactory.reset(i, e, s)) : (i = this.canvasFactory.create(e, s), this.cache[t] = i), i;
}
delete(t) {
delete this.cache[t];
}
clear() {
for (const t in this.cache) {
const e = this.cache[t];
this.canvasFactory.destroy(e), delete this.cache[t];
}
}
}
function Ue(d, t, e, s, i, n, r, a, o, l) {
const [h, c, u, f, g, p] = K(d);
if (c === 0 && u === 0) {
const A = r * h + g, y = Math.round(A), _ = a * f + p, w = Math.round(_), v = (r + o) * h + g, S = Math.abs(Math.round(v) - y) || 1, E = (a + l) * f + p, C = Math.abs(Math.round(E) - w) || 1;
return d.setTransform(Math.sign(h), 0, 0, Math.sign(f), y, w), d.drawImage(t, e, s, i, n, 0, 0, S, C), d.setTransform(h, c, u, f, g, p), [S, C];
}
if (h === 0 && f === 0) {
const A = a * u + g, y = Math.round(A), _ = r * c + p, w = Math.round(_), v = (a + l) * u + g, S = Math.abs(Math.round(v) - y) || 1, E = (r + o) * c + p, C = Math.abs(Math.round(E) - w) || 1;
return d.setTransform(0, Math.sign(c), Math.sign(u), 0, y, w), d.drawImage(t, e, s, i, n, 0, 0, C, S), d.setTransform(h, c, u, f, g, p), [C, S];
}
d.drawImage(t, e, s, i, n, r, a, o, l);
const b = Math.hypot(h, c), m = Math.hypot(u, f);
return [b * o, m * l];
}
class di {
alphaIsShape = !1;
fontSize = 0;
fontSizeScale = 1;
textMatrix = null;
textMatrixScale = 1;
fontMatrix = gs;
leading = 0;
x = 0;
y = 0;
lineX = 0;
lineY = 0;
charSpacing = 0;
wordSpacing = 0;
textHScale = 1;
textRenderingMode = at.FILL;
textRise = 0;
fillColor = "#000000";
strokeColor = "#000000";
patternFill = !1;
patternStroke = !1;
fillAlpha = 1;
strokeAlpha = 1;
lineWidth = 1;
activeSMask = null;
transferMaps = "none";
constructor(t, e, s) {
s?.(this), this.clipBox = new Float32Array([0, 0, t, e]), this.minMax = ie.slice();
}
clone() {
const t = Object.create(this);
return t.clipBox = this.clipBox.slice(), t.minMax = this.minMax.slice(), t;
}
getPathBoundingBox(t = lt.FILL, e = null) {
const s = this.minMax.slice();
if (t === lt.STROKE) {
e || V("Stroke bounding box must include transform."), P.singularValueDecompose2dScale(e, At);
const i = At[0] * this.lineWidth / 2, n = At[1] * this.lineWidth / 2;
s[0] -= i, s[1] -= n, s[2] += i, s[3] += n;
}
return s;
}
updateClipFromPath() {
const t = P.intersect(this.clipBox, this.getPathBoundingBox());
this.startNewPathAndClipBox(t || [0, 0, 0, 0]);
}
isEmptyClip() {
return this.minMax[0] === 1 / 0;
}
startNewPathAndClipBox(t) {
this.clipBox.set(t, 0), this.minMax.set(ie, 0);
}
getClippedPathBoundingBox(t = lt.FILL, e = null) {
return P.intersect(this.clipBox, this.getPathBoundingBox(t, e));
}
}
function ui(d, t) {
if (t instanceof ImageData) {
d.putImageData(t, 0, 0);
return;
}
const e = t.height, s = t.width, i = e % bt, n = (e - i) / bt, r = i === 0 ? n : n + 1, a = d.createImageData(s, bt);
let o = 0, l;
const h = t.data, c = a.data;
let u, f, g, p;
if (t.kind === je.GRAYSCALE_1BPP) {
const b = h.byteLength, m = new Uint32Array(c.buffer, 0, c.byteLength >> 2), A = m.length, y = s + 7 >> 3, _ = 4294967295, w = ht.isLittleEndian ? 4278190080 : 255;
for (u = 0; u < r; u++) {
for (g = u < n ? bt : i, l = 0, f = 0; f < g; f++) {
const v = b - o;
let S = 0;
const E = v > y ? s : v * 8 - 7, C = E & -8;
let k = 0, T = 0;
for (; S < C; S += 8)
T = h[o++], m[l++] = T & 128 ? _ : w, m[l++] = T & 64 ? _ : w, m[l++] = T & 32 ? _ : w, m[l++] = T & 16 ? _ : w, m[l++] = T & 8 ? _ : w, m[l++] = T & 4 ? _ : w, m[l++] = T & 2 ? _ : w, m[l++] = T & 1 ? _ : w;
for (; S < E; S++)
k === 0 && (T = h[o++], k = 128), m[l++] = T & k ? _ : w, k >>= 1;
}
for (; l < A; )
m[l++] = 0;
d.putImageData(a, 0, u * bt);
}
} else if (t.kind === je.RGBA_32BPP) {
for (f = 0, p = s * bt * 4, u = 0; u < n; u++)
c.set(h.subarray(o, o + p)), o += p, d.putImageData(a, 0, f), f += bt;
u < r && (p = s * i * 4, c.set(h.subarray(o, o + p)), d.putImageData(a, 0, f));
} else if (t.kind === je.RGB_24BPP)
for (g = bt, p = s * g, u = 0; u < r; u++) {
for (u >= n && (g = i, p = s * g), l = 0, f = p; f--; )
c[l++] = h[o++], c[l++] = h[o++], c[l++] = h[o++], c[l++] = 255;
d.putImageData(a, 0, u * bt);
}
else
throw new Error(`bad image kind: ${t.kind}`);
}
function fi(d, t) {
if (t.bitmap) {
d.drawImage(t.bitmap, 0, 0);
return;
}
const e = t.height, s = t.width, i = e % bt, n = (e - i) / bt, r = i === 0 ? n : n + 1, a = d.createImageData(s, bt);
let o = 0;
const l = t.data, h = a.data;
for (let c = 0; c < r; c++) {
const u = c < n ? bt : i;
({
srcPos: o
} = qn({
src: l,
srcPos: o,
dest: h,
width: s,
height: u,
nonBlackColor: 0
})), d.putImageData(a, 0, c * bt);
}
}
function fe(d, t) {
const e = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"];
for (const s of e)
d[s] !== void 0 && (t[s] = d[s]);
d.setLineDash !== void 0 && (t.setLineDash(d.getLineDash()), t.lineDashOffset = d.lineDashOffset);
}
function He(d) {
d.strokeStyle = d.fillStyle = "#000000", d.fillRule = "nonzero", d.globalAlpha = 1, d.lineWidth = 1, d.lineCap = "butt", d.lineJoin = "miter", d.miterLimit = 10, d.globalCompositeOperation = "source-over", d.font = "10px sans-serif", d.setLineDash !== void 0 && (d.setLineDash([]), d.lineDashOffset = 0);
const {
filter: t
} = d;
t !== "none" && t !== "" && (d.filter = "none");
}
function pi(d, t) {
if (t)
return !0;
P.singularValueDecompose2dScale(d, At);
const e = Math.fround(Rt.pixelRatio * he.PDF_TO_CSS_UNITS);
return At[0] <= e && At[1] <= e;
}
const Jn = ["butt", "round", "square"], Zn = ["miter", "round", "bevel"], tr = {}, gi = {};
class oe {
constructor(t, e, s, i, n, {
optionalContentConfig: r,
markedContentStack: a = null
}, o, l, h) {
this.ctx = t, this.current = new di(this.ctx.canvas.width, this.ctx.canvas.height), this.stateStack = [], this.pendingClip = null, this.pendingEOFill = !1, this.res = null, this.xobjs = null, this.commonObjs = e, this.objs = s, this.canvasFactory = i, this.filterFactory = n, this.groupStack = [], this.baseTransform = null, this.baseTransformStack = [], this.groupLevel = 0, this.smaskStack = [], this.smaskCounter = 0, this.tempSMask = null, this.suspendedCtx = null, this.contentVisible = !0, this.markedContentStack = a || [], this.optionalContentConfig = r, this.cachedCanvases = new Qn(this.canvasFactory), this.cachedPatterns = /* @__PURE__ */ new Map(), this.annotationCanvasMap = o, this.viewportScale = 1, this.outputScaleX = 1, this.outputScaleY = 1, this.pageColors = l, this._cachedScaleForStroking = [-1, 0], this._cachedGetSinglePixelWidth = null, this._cachedBitmapsMap = /* @__PURE__ */ new Map(), this.dependencyTracker = h ?? null;
}
getObject(t, e, s = null) {
return typeof e == "string" ? (this.dependencyTracker?.recordNamedDependency(t, e), e.startsWith("g_") ? this.commonObjs.get(e) : this.objs.get(e)) : s;
}
beginDrawing({
transform: t,
viewport: e,
transparency: s = !1,
background: i = null
}) {
const n = this.ctx.canvas.width, r = this.ctx.canvas.height, a = this.ctx.fillStyle;
if (this.ctx.fillStyle = i || "#ffffff", this.ctx.fillRect(0, 0, n, r), this.ctx.fillStyle = a, s) {
const o = this.cachedCanvases.getCanvas("transparent", n, r);
this.compositeCtx = this.ctx, this.transparentCanvas = o.canvas, this.ctx = o.context, this.ctx.save(), this.ctx.transform(...K(this.compositeCtx));
}
this.ctx.save(), He(this.ctx), t && (this.ctx.transform(...t), this.outputScaleX = t[0], this.outputScaleY = t[0]), this.ctx.transform(...e.transform), this.viewportScale = e.scale, this.baseTransform = K(this.ctx);
}
executeOperatorList(t, e, s, i, n) {
const r = t.argsArray, a = t.fnArray;
let o = e || 0;
const l = r.length;
if (l === o)
return o;
const h = l - o > ci && typeof s == "function", c = h ? Date.now() + Yn : 0;
let u = 0;
const f = this.commonObjs, g = this.objs;
let p, b;
for (; ; ) {
if (i !== void 0 && o === i.nextBreakPoint)
return i.breakIt(o, s), o;
if (!n || n(o))
if (p = a[o], b = r[o] ?? null, p !== Se.dependency)
b === null ? this[p](o) : this[p](o, ...b);
else
for (const m of b) {
this.dependencyTracker?.recordNamedData(m, o);
const A = m.startsWith("g_") ? f : g;
if (!A.has(m))
return A.get(m, s), o;
}
if (o++, o === l)
return o;
if (h && ++u > ci) {
if (Date.now() > c)
return s(), o;
u = 0;
}
}
}
#t() {
for (; this.stateStack.length || this.inSMaskMode; )
this.restore();
this.current.activeSMask = null, this.ctx.restore(), this.transparentCanvas && (this.ctx = this.compositeCtx, this.ctx.save(), this.ctx.setTransform(1, 0, 0, 1, 0, 0), this.ctx.drawImage(this.transparentCanvas, 0, 0), this.ctx.restore(), this.transparentCanvas = null);
}
endDrawing() {
this.#t(), this.cachedCanvases.clear(), this.cachedPatterns.clear();
for (const t of this._cachedBitmapsMap.values()) {
for (const e of t.values())
typeof HTMLCanvasElement < "u" && e instanceof HTMLCanvasElement && (e.width = e.height = 0);
t.clear();
}
this._cachedBitmapsMap.clear(), this.#e();
}
#e() {
if (this.pageColors) {
const t = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background);
if (t !== "none") {
const e = this.ctx.filter;
this.ctx.filter = t, this.ctx.drawImage(this.ctx.canvas, 0, 0), this.ctx.filter = e;
}
}
}
_scaleImage(t, e) {
const s = t.width ?? t.displayWidth, i = t.height ?? t.displayHeight;
let n = Math.max(Math.hypot(e[0], e[1]), 1), r = Math.max(Math.hypot(e[2], e[3]), 1), a = s, o = i, l = "prescale1", h, c;
for (; n > 2 && a > 1 || r > 2 && o > 1; ) {
let u = a, f = o;
n > 2 && a > 1 && (u = a >= 16384 ? Math.floor(a / 2) - 1 || 1 : Math.ceil(a / 2), n /= a / u), r > 2 && o > 1 && (f = o >= 16384 ? Math.floor(o / 2) - 1 || 1 : Math.ceil(o) / 2, r /= o / f), h = this.cachedCanvases.getCanvas(l, u, f), c = h.context, c.clearRect(0, 0, u, f), c.drawImage(t, 0, 0, a, o, 0, 0, u, f), t = h.canvas, a = u, o = f, l = l === "prescale1" ? "prescale2" : "prescale1";
}
return {
img: t,
paintWidth: a,
paintHeight: o
};
}
_createMaskCanvas(t, e) {
const s = this.ctx, {
width: i,
height: n
} = e, r = this.current.fillColor, a = this.current.patternFill, o = K(s);
let l, h, c, u;
if ((e.bitmap || e.data) && e.count > 1) {
const k = e.bitmap || e.data.buffer;
h = JSON.stringify(a ? o : [o.slice(0, 4), r]), l = this._cachedBitmapsMap.get(k), l || (l = /* @__PURE__ */ new Map(), this._cachedBitmapsMap.set(k, l));
const T = l.get(h);
if (T && !a) {
const $ = Math.round(Math.min(o[0], o[2]) + o[4]), z = Math.round(Math.min(o[1], o[3]) + o[5]);
return this.dependencyTracker?.recordDependencies(t, vt.transformAndFill), {
canvas: T,
offsetX: $,
offsetY: z
};
}
c = T;
}
c || (u = this.cachedCanvases.getCanvas("maskCanvas", i, n), fi(u.context, e));
let f = P.transform(o, [1 / i, 0, 0, -1 / n, 0, 0]);
f = P.transform(f, [1, 0, 0, 1, 0, -n]);
const g = ie.slice();
P.axialAlignedBoundingBox([0, 0, i, n], f, g);
const [p, b, m, A] = g, y = Math.round(m - p) || 1, _ = Math.round(A - b) || 1, w = this.cachedCanvases.getCanvas("fillCanvas", y, _), v = w.context, S = p, E = b;
v.translate(-S, -E), v.transform(...f), c || (c = this._scaleImage(u.canvas, Tt(v)), c = c.img, l && a && l.set(h, c)), v.imageSmoothingEnabled = pi(K(v), e.interpolate), Ue(v, c, 0, 0, c.width, c.height, 0, 0, i, n), v.globalCompositeOperation = "source-in";
const C = P.transform(Tt(v), [1, 0, 0, 1, -S, -E]);
return v.fillStyle = a ? r.getPattern(s, this, C, lt.FILL, t) : r, v.fillRect(0, 0, i, n), l && !a && (this.cachedCanvases.delete("fillCanvas"), l.set(h, w.canvas)), this.dependencyTracker?.recordDependencies(t, vt.transformAndFill), {
canvas: w.canvas,
offsetX: Math.round(S),
offsetY: Math.round(E)
};
}
setLineWidth(t, e) {
this.dependencyTracker?.recordSimpleData("lineWidth", t), e !== this.current.lineWidth && (this._cachedScaleForStroking[0] = -1), this.current.lineWidth = e, this.ctx.lineWidth = e;
}
setLineCap(t, e) {
this.dependencyTracker?.recordSimpleData("lineCap", t), this.ctx.lineCap = Jn[e];
}
setLineJoin(t, e) {
this.dependencyTracker?.recordSimpleData("lineJoin", t), this.ctx.lineJoin = Zn[e];
}
setMiterLimit(t, e) {
this.dependencyTracker?.recordSimpleData("miterLimit", t), this.ctx.miterLimit = e;
}
setDash(t, e, s) {
this.dependencyTracker?.recordSimpleData("dash", t);
const i = this.ctx;
i.setLineDash !== void 0 && (i.setLineDash(e), i.lineDashOffset = s);
}
setRenderingIntent(t, e) {
}
setFlatness(t, e) {
}
setGState(t, e) {
for (const [s, i] of e)
switch (s) {
case "LW":
this.setLineWidth(t, i);
break;
case "LC":
this.setLineCap(t, i);
break;
case "LJ":
this.setLineJoin(t, i);
break;
case "ML":
this.setMiterLimit(t, i);
break;
case "D":
this.setDash(t, i[0], i[1]);
break;
case "RI":
this.setRenderingIntent(t, i);
break;
case "FL":
this.setFlatness(t, i);
break;
case "Font":
this.setFont(t, i[0], i[1]);
break;
case "CA":
this.dependencyTracker?.recordSimpleData("strokeAlpha", t), this.current.strokeAlpha = i;
break;
case "ca":
this.dependencyTracker?.recordSimpleData("fillAlpha", t), this.ctx.globalAlpha = this.current.fillAlpha = i;
break;
case "BM":
this.dependencyTracker?.recordSimpleData("globalCompositeOperation", t), this.ctx.globalCompositeOperation = i;
break;
case "SMask":
this.dependencyTracker?.recordSimpleData("SMask", t), this.current.activeSMask = i ? this.tempSMask : null, this.tempSMask = null, this.checkSMaskState();
break;
case "TR":
this.dependencyTracker?.recordSimpleData("filter", t), this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(i);
break;
}
}
get inSMaskMode() {
return !!this.suspendedCtx;
}
checkSMaskState() {
const t = this.inSMaskMode;
this.current.activeSMask && !t ? this.beginSMaskMode() : !this.current.activeSMask && t && this.endSMaskMode();
}
beginSMaskMode(t) {
if (this.inSMaskMode)
throw new Error("beginSMaskMode called while already in smask mode");
const e = this.ctx.canvas.width, s = this.ctx.canvas.height, i = "smaskGroupAt" + this.groupLevel, n = this.cachedCanvases.getCanvas(i, e, s);
this.suspendedCtx = this.ctx;
const r = this.ctx = n.context;
r.setTransform(this.suspendedCtx.getTransform()), fe(this.suspendedCtx, r), Kn(r, this.suspendedCtx), this.setGState(t, [["BM", "source-over"]]);
}
endSMaskMode() {
if (!this.inSMaskMode)
throw new Error("endSMaskMode called while not in smask mode");
this.ctx._removeMirroring(), fe(this.ctx, this.suspendedCtx), this.ctx = this.suspendedCtx, this.suspendedCtx = null;
}
compose(t) {
if (!this.current.activeSMask)
return;
t ? (t[0] = Math.floor(t[0]), t[1] = Math.floor(t[1]), t[2] = Math.ceil(t[2]), t[3] = Math.ceil(t[3])) : t = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];
const e = this.current.activeSMask, s = this.suspendedCtx;
this.composeSMask(s, e, this.ctx, t), this.ctx.save(), this.ctx.setTransform(1, 0, 0, 1, 0, 0), this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height), this.ctx.restore();
}
composeSMask(t, e, s, i) {
const n = i[0], r = i[1], a = i[2] - n, o = i[3] - r;
a === 0 || o === 0 || (this.genericComposeSMask(e.context, s, a, o, e.subtype, e.backdrop, e.transferMap, n, r, e.offsetX, e.offsetY), t.save(), t.globalAlpha = 1, t.globalCompositeOperation = "source-over", t.setTransform(1, 0, 0, 1, 0, 0), t.drawImage(s.canvas, 0, 0), t.restore());
}
genericComposeSMask(t, e, s, i, n, r, a, o, l, h, c) {
let u = t.canvas, f = o - h, g = l - c;
if (r)
if (f < 0 || g < 0 || f + s > u.width || g + i > u.height) {
const b = this.cachedCanvases.getCanvas("maskExtension", s, i), m = b.context;
m.drawImage(u, -f, -g), m.globalCompositeOperation = "destination-atop", m.fillStyle = r, m.fillRect(0, 0, s, i), m.globalCompositeOperation = "source-over", u = b.canvas, f = g = 0;
} else {
t.save(), t.globalAlpha = 1, t.setTransform(1, 0, 0, 1, 0, 0);
const b = new Path2D();
b.rect(f, g, s, i), t.clip(b), t.globalCompositeOperation = "destination-atop", t.fillStyle = r, t.fillRect(f, g, s, i), t.restore();
}
e.save(), e.globalAlpha = 1, e.setTransform(1, 0, 0, 1, 0, 0), n === "Alpha" && a ? e.filter = this.filterFactory.addAlphaFilter(a) : n === "Luminosity" && (e.filter = this.filterFactory.addLuminosityFilter(a));
const p = new Path2D();
p.rect(o, l, s, i), e.clip(p), e.globalCompositeOperation = "destination-in", e.drawImage(u, f, g, s, i, o, l, s, i), e.restore();
}
save(t) {
this.inSMaskMode && fe(this.ctx, this.suspendedCtx), this.ctx.save();
const e = this.current;
this.stateStack.push(e), this.current = e.clone(), this.dependencyTracker?.save(t);
}
restore(t) {
if (this.dependencyTracker?.restore(t), this.stateStack.length === 0) {
this.inSMaskMode && this.endSMaskMode();
return;
}
this.current = this.stateStack.pop(), this.ctx.restore(), this.inSMaskMode && fe(this.suspendedCtx, this.ctx), this.checkSMaskState(), this.pendingClip = null, this._cachedScaleForStroking[0] = -1, this._cachedGetSinglePixelWidth = null;
}
transform(t, e, s, i, n, r, a) {
this.dependencyTracker?.recordIncrementalData("transform", t), this.ctx.transform(e, s, i, n, r, a), this._cachedScaleForStroking[0] = -1, this._cachedGetSinglePixelWidth = null;
}
constructPath(t, e, s, i) {
let [n] = s;
if (!i) {
n ||= s[0] = new Path2D(), this[e](t, n);
return;
}
if (this.dependencyTracker !== null) {
const r = e === Se.stroke ? this.current.lineWidth / 2 : 0;
this.dependencyTracker.resetBBox(t).recordBBox(t, this.ctx, i[0] - r, i[2] + r, i[1] - r, i[3] + r).recordDependencies(t, ["transform"]);
}
n instanceof Path2D || (n = s[0] = xi(n)), P.axialAlignedBoundingBox(i, K(this.ctx), this.current.minMax), this[e](t, n), this._pathStartIdx = t;
}
closePath(t) {
this.ctx.closePath();
}
stroke(t, e, s = !0) {
const i = this.ctx, n = this.current.strokeColor;
if (i.globalAlpha = this.current.strokeAlpha, this.contentVisible)
if (typeof n == "object" && n?.getPattern) {
const r = n.isModifyingCurrentTransform() ? i.getTransform() : null;
if (i.save(), i.strokeStyle = n.getPattern(i, this, Tt(i), lt.STROKE, t), r) {
const a = new Path2D();
a.addPath(e, i.getTransform().invertSelf().multiplySelf(r)), e = a;
}
this.rescaleAndStroke(e, !1), i.restore();
} else
this.rescaleAndStroke(e, !0);
this.dependencyTracker?.recordDependencies(t, vt.stroke), s && this.consumePath(t, e, this.current.getClippedPathBoundingBox(lt.STROKE, K(this.ctx))), i.globalAlpha = this.current.fillAlpha;
}
closeStroke(t, e) {
this.stroke(t, e);
}
fill(t, e, s = !0) {
const i = this.ctx, n = this.current.fillColor, r = this.current.patternFill;
let a = !1;
if (r) {
const l = n.isModifyingCurrentTransform() ? i.getTransform() : null;
if (this.dependencyTracker?.save(t), i.save(), i.fillStyle = n.getPattern(i, this, Tt(i), lt.FILL, t), l) {
const h = new Path2D();
h.addPath(e, i.getTransform().invertSelf().multiplySelf(l)), e = h;
}
a = !0;
}
const o = this.current.getClippedPathBoundingBox();
this.contentVisible && o !== null && (this.pendingEOFill ? (i.fill(e, "evenodd"), this.pendingEOFill = !1) : i.fill(e)), this.dependencyTracker?.recordDependencies(t, vt.fill), a && (i.restore(), this.dependencyTracker?.restore(t)), s && this.consumePath(t, e, o);
}
eoFill(t, e) {
this.pendingEOFill = !0, this.fill(t, e);
}
fillStroke(t, e) {
this.fill(t, e, !1), this.stroke(t, e, !1), this.consumePath(t, e);
}
eoFillStroke(t, e) {
this.pendingEOFill = !0, this.fillStroke(t, e);
}
closeFillStroke(t, e) {
this.fillStroke(t, e);
}
closeEOFillStroke(t, e) {
this.pendingEOFill = !0, this.fillStroke(t, e);
}
endPath(t, e) {
this.consumePath(t, e);
}
rawFillPath(t, e) {
this.ctx.fill(e), this.dependencyTracker?.recordDependencies(t, vt.rawFillPath).recordOperation(t);
}
clip(t) {
this.dependencyTracker?.recordFutureForcedDependency("clipMode", t), this.pendingClip = tr;
}
eoClip(t) {
this.dependencyTracker?.recordFutureForcedDependency("clipMode", t), this.pendingClip = gi;
}
beginText(t) {
this.current.textMatrix = null, this.current.textMatrixScale = 1, this.current.x = this.current.lineX = 0, this.current.y = this.current.lineY = 0, this.dependencyTracker?.recordOpenMarker(t).resetIncrementalData("sameLineText").resetIncrementalData("moveText", t);
}
endText(t) {
const e = this.pendingTextPaths, s = this.ctx;
if (this.dependencyTracker) {
const {
dependencyTracker: i
} = this;
e !== void 0 && i.recordFutureForcedDependency("textClip", i.getOpenMarker()).recordFutureForcedDependency("textClip", t), i.recordCloseMarker(t);
}
if (e !== void 0) {
const i = new Path2D(), n = s.getTransform().invertSelf();
for (const {
transform: r,
x: a,
y: o,
fontSize: l,
path: h
} of e)
h && i.addPath(h, new DOMMatrix(r).preMultiplySelf(n).translate(a, o).scale(l, -l));
s.clip(i);
}
delete this.pendingTextPaths;
}
setCharSpacing(t, e) {
this.dependencyTracker?.recordSimpleData("charSpacing", t), this.current.charSpacing = e;
}
setWordSpacing(t, e) {
this.dependencyTracker?.recordSimpleData("wordSpacing", t), this.current.wordSpacing = e;
}
setHScale(t, e) {
this.dependencyTracker?.recordSimpleData("hScale", t), this.current.textHScale = e / 100;
}
setLeading(t, e) {
this.dependencyTracker?.recordSimpleData("leading", t), this.current.leading = -e;
}
setFont(t, e, s) {
this.dependencyTracker?.recordSimpleData("font", t).recordSimpleDataFromNamed("fontObj", e, t);
const i = this.commonObjs.get(e), n = this.current;
if (!i)
throw new Error(`Can't find font for ${e}`);
if (n.fontMatrix = i.fontMatrix || gs, (n.fontMatrix[0] === 0 || n.fontMatrix[3] === 0) && L("Invalid font matrix for font " + e), s < 0 ? (s = -s, n.fontDirection = -1) : n.fontDirection = 1, this.current.font = i, this.current.fontSize = s, i.isType3Font)
return;
const r = i.loadedName || "sans-serif", a = i.systemFontInfo?.css || `"${r}", ${i.fallbackName}`;
let o = "normal";
i.black ? o = "900" : i.bold && (o = "bold");
const l = i.italic ? "italic" : "normal";
let h = s;
s < li ? h = li : s > hi && (h = hi), this.current.fontSizeScale = s / h, this.ctx.font = `${l} ${o} ${h}px ${a}`;
}
setTextRenderingMode(t, e) {
this.dependencyTracker?.recordSimpleData("textRenderingMode", t), this.current.textRenderingMode = e;
}
setTextRise(t, e) {
this.dependencyTracker?.recordSimpleData("textRise", t), this.current.textRise = e;
}
moveText(t, e, s) {
this.dependencyTracker?.resetIncrementalData("sameLineText").recordIncrementalData("moveText", t), this.current.x = this.current.lineX += e, this.current.y = this.current.lineY += s;
}
setLeadingMoveText(t, e, s) {
this.setLeading(t, -s), this.moveText(t, e, s);
}
setTextMatrix(t, e) {
this.dependencyTracker?.resetIncrementalData("sameLineText").recordSimpleData("textMatrix", t);
const {
current: s
} = this;
s.textMatrix = e, s.textMatrixScale = Math.hypot(e[0], e[1]), s.x = s.lineX = 0, s.y = s.lineY = 0;
}
nextLine(t) {
this.moveText(t, 0, this.current.leading), this.dependencyTracker?.recordIncrementalData("moveText", this.dependencyTracker.getSimpleIndex("leading") ?? t);
}
#i(t, e, s) {
const i = new Path2D();
return i.addPath(t, new DOMMatrix(s).invertSelf().multiplySelf(e)), i;
}
paintChar(t, e, s, i, n, r) {
const a = this.ctx, o = this.current, l = o.font, h = o.textRenderingMode, c = o.fontSize / o.fontSizeScale, u = h & at.FILL_STROKE_MASK, f = !!(h & at.ADD_TO_PATH_FLAG), g = o.patternFill && !l.missingFile, p = o.patternStroke && !l.missingFile;
let b;
if ((l.disableFontFace || f || g || p) && !l.missingFile && (b = l.getPathGenerator(this.commonObjs, e)), b && (l.disableFontFace || g || p)) {
a.save(), a.translate(s, i), a.scale(c, -c), this.dependencyTracker?.recordCharacterBBox(t, a, l);
let m;
if (u === at.FILL || u === at.FILL_STROKE)
if (n) {
m = a.getTransform(), a.setTransform(...n);
const A = this.#i(b, m, n);
a.fill(A);
} else
a.fill(b);
if (u === at.STROKE || u === at.FILL_STROKE)
if (r) {
m ||= a.getTransform(), a.setTransform(...r);
const {
a: A,
b: y,
c: _,
d: w
} = m, v = P.inverseTransform(r), S = P.transform([A, y, _, w, 0, 0], v);
P.singularValueDecompose2dScale(S, At), a.lineWidth *= Math.max(At[0], At[1]) / c, a.stroke(this.#i(b, m, r));
} else
a.lineWidth /= c, a.stroke(b);
a.restore();
} else
(u === at.FILL || u === at.FILL_STROKE) && (a.fillText(e, s, i), this.dependencyTracker?.recordCharacterBBox(t, a, l, c, s, i, () => a.measureText(e))), (u === at.STROKE || u === at.FILL_STROKE) && (this.dependencyTracker && this.dependencyTracker?.recordCharacterBBox(t, a, l, c, s, i, () => a.measureText(e)).recordDependencies(t, vt.stroke), a.strokeText(e, s, i));
f && ((this.pendingTextPaths ||= []).push({
transform: K(a),
x: s,
y: i,
fontSize: c,
path: b
}), this.dependencyTracker?.recordCharacterBBox(t, a, l, c, s, i));
}
get isFontSubpixelAAEnabled() {
const {
context: t
} = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10);
t.scale(1.5, 1), t.fillText("I", 0, 10);
const e = t.getImageData(0, 0, 10, 10).data;
let s = !1;
for (let i = 3; i < e.length; i += 4)
if (e[i] > 0 && e[i] < 255) {
s = !0;
break;
}
return I(this, "isFontSubpixelAAEnabled", s);
}
showText(t, e) {
this.dependencyTracker && (this.dependencyTracker.recordDependencies(t, vt.showText).resetBBox(t), this.current.textRenderingMode & at.ADD_TO_PATH_FLAG && this.dependencyTracker.recordFutureForcedDependency("textClip", t).inheritPendingDependenciesAsFutureForcedDependencies());
const s = this.current, i = s.font;
if (i.isType3Font) {
this.showType3Text(t, e), this.dependencyTracker?.recordShowTextOperation(t);
return;
}
const n = s.fontSize;
if (n === 0) {
this.dependencyTracker?.recordOperation(t);
return;
}
const r = this.ctx, a = s.fontSizeScale, o = s.charSpacing, l = s.wordSpacing, h = s.fontDirection, c = s.textHScale * h, u = e.length, f = i.vertical, g = f ? 1 : -1, p = i.defaultVMetrics, b = n * s.fontMatrix[0], m = s.textRenderingMode === at.FILL && !i.disableFontFace && !s.patternFill;
r.save(), s.textMatrix && r.transform(...s.textMatrix), r.translate(s.x, s.y + s.textRise), h > 0 ? r.scale(c, -1) : r.scale(c, 1);
let A, y;
if (s.patternFill) {
r.save();
const E = s.fillColor.getPattern(r, this, Tt(r), lt.FILL, t);
A = K(r), r.restore(), r.fillStyle = E;
}
if (s.patternStroke) {
r.save();
const E = s.strokeColor.getPattern(r, this, Tt(r), lt.STROKE, t);
y = K(r), r.restore(), r.strokeStyle = E;
}
let _ = s.lineWidth;
const w = s.textMatrixScale;
if (w === 0 || _ === 0) {
const E = s.textRenderingMode & at.FILL_STROKE_MASK;
(E === at.STROKE || E === at.FILL_STROKE) && (_ = this.getSinglePixelWidth());
} else
_ /= w;
if (a !== 1 && (r.scale(a, a), _ /= a), r.lineWidth = _, i.isInvalidPDFjsFont) {
const E = [];
let C = 0;
for (const T of e)
E.push(T.unicode), C += T.width;
const k = E.join("");
if (r.fillText(k, 0, 0), this.dependencyTracker !== null) {
const T = r.measureText(k);
this.dependencyTracker.recordBBox(t, this.ctx, -T.actualBoundingBoxLeft, T.actualBoundingBoxRight, -T.actualBoundingBoxAscent, T.actualBoundingBoxDescent).recordShowTextOperation(t);
}
s.x += C * b * c, r.restore(), this.compose();
return;
}
let v = 0, S;
for (S = 0; S < u; ++S) {
const E = e[S];
if (typeof E == "number") {
v += g * E * n / 1e3;
continue;
}
let C = !1;
const k = (E.isSpace ? l : 0) + o, T = E.fontChar, $ = E.accent;
let z, j, W = E.width;
if (f) {
const B = E.vmetric || p, ct = -(E.vmetric ? B[1] : W * 0.5) * b, Dt = B[2] * b;
W = B ? -B[0] : W, z = ct / a, j = (v + Dt) / a;
} else
z = v / a, j = 0;
let R;
if (i.remeasure && W > 0) {
R = r.measureText(T);
const B = R.width * 1e3 / n * a;
if (W < B && this.isFontSubpixelAAEnabled) {
const ct = W / B;
C = !0, r.save(), r.scale(ct, 1), z /= ct;
} else W !== B && (z += (W - B) / 2e3 * n / a);
}
if (this.contentVisible && (E.isInFont || i.missingFile)) {
if (m && !$)
r.fillText(T, z, j), this.dependencyTracker?.recordCharacterBBox(t, r, R ? {
bbox: null
} : i, n / a, z, j, () => R ?? r.measureText(T));
else if (this.paintChar(t, T, z, j, A, y), $) {
const B = z + n * $.offset.x / a, ct = j - n * $.offset.y / a;
this.paintChar(t, $.fontChar, B, ct, A, y);
}
}
const D = f ? W * b - k * h : W * b + k * h;
v += D, C && r.restore();
}
f ? s.y -= v : s.x += v * c, r.restore(), this.compose(), this.dependencyTracker?.recordShowTextOperation(t);
}
showType3Text(t, e) {
const s = this.ctx, i = this.current, n = i.font, r = i.fontSize, a = i.fontDirection, o = n.vertical ? 1 : -1, l = i.charSpacing, h = i.wordSpacing, c = i.textHScale * a, u = i.fontMatrix || gs, f = e.length, g = i.textRenderingMode === at.INVISIBLE;
let p, b, m, A;
if (g || r === 0)
return;
this._cachedScaleForStroking[0] = -1, this._cachedGetSinglePixelWidth = null, s.save(), i.textMatrix && s.transform(...i.textMatrix), s.translate(i.x, i.y + i.textRise), s.scale(c, a);
const y = this.dependencyTracker;
for (this.dependencyTracker = y ? new Xe(y, t) : null, p = 0; p < f; ++p) {
if (b = e[p], typeof b == "number") {
A = o * b * r / 1e3, this.ctx.translate(A, 0), i.x += A * c;
continue;
}
const _ = (b.isSpace ? h : 0) + l, w = n.charProcOperatorList[b.operatorListId];
w ? this.contentVisible && (this.save(), s.scale(r, r), s.transform(...u), this.executeOperatorList(w), this.restore()) : L(`Type3 character "${b.operatorListId}" is not available.`);
const v = [b.width, 0];
P.applyTransform(v, u), m = v[0] * r + _, s.translate(m, 0), i.x += m * c;
}
s.restore(), y && (this.dependencyTracker = y);
}
setCharWidth(t, e, s) {
}
setCharWidthAndBounds(t, e, s, i, n, r, a) {
const o = new Path2D();
o.rect(i, n, r - i, a - n), this.ctx.clip(o), this.dependencyTracker?.recordBBox(t, this.ctx, i, r, n, a).recordClipBox(t, this.ctx, i, r, n, a), this.endPath(t);
}
getColorN_Pattern(t, e) {
let s;
if (e[0] === "TilingPattern") {
const i = this.baseTransform || K(this.ctx), n = {
createCanvasGraphics: (r, a) => new oe(r, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
optionalContentConfig: this.optionalContentConfig,
markedContentStack: this.markedContentStack
}, void 0, void 0, this.dependencyTracker ? new Xe(this.dependencyTracker, a, !0) : null)
};
s = new Os(e, this.ctx, n, i);
} else
s = this._getPattern(t, e[1], e[2]);
return s;
}
setStrokeColorN(t, ...e) {
this.dependencyTracker?.recordSimpleData("strokeColor", t), this.current.strokeColor = this.getColorN_Pattern(t, e), this.current.patternStroke = !0;
}
setFillColorN(t, ...e) {
this.dependencyTracker?.recordSimpleData("fillColor", t), this.current.fillColor = this.getColorN_Pattern(t, e), this.current.patternFill = !0;
}
setStrokeRGBColor(t, e) {
this.dependencyTracker?.recordSimpleData("strokeColor", t), this.ctx.strokeStyle = this.current.strokeColor = e, this.current.patternStroke = !1;
}
setStrokeTransparent(t) {
this.dependencyTracker?.recordSimpleData("strokeColor", t), this.ctx.strokeStyle = this.current.strokeColor = "transparent", this.current.patternStroke = !1;
}
setFillRGBColor(t, e) {
this.dependencyTracker?.recordSimpleData("fillColor", t), this.ctx.fillStyle = this.current.fillColor = e, this.current.patternFill = !1;
}
setFillTransparent(t) {
this.dependencyTracker?.recordSimpleData("fillColor", t), this.ctx.fillStyle = this.current.fillColor = "transparent", this.current.patternFill = !1;
}
_getPattern(t, e, s = null) {
let i;
return this.cachedPatterns.has(e) ? i = this.cachedPatterns.get(e) : (i = Xn(this.getObject(t, e)), this.cachedPatterns.set(e, i)), s && (i.matrix = s), i;
}
shadingFill(t, e) {
if (!this.contentVisible)
return;
const s = this.ctx;
this.save(t);
const i = this._getPattern(t, e);
s.fillStyle = i.getPattern(s, this, Tt(s), lt.SHADING, t);
const n = Tt(s);
if (n) {
const {
width: r,
height: a
} = s.canvas, o = ie.slice();
P.axialAlignedBoundingBox([0, 0, r, a], n, o);
const [l, h, c, u] = o;
this.ctx.fillRect(l, h, c - l, u - h);
} else
this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
this.dependencyTracker?.resetBBox(t).recordFullPageBBox(t).recordDependencies(t, vt.transform).recordDependencies(t, vt.fill).recordOperation(t), this.compose(this.current.getClippedPathBoundingBox()), this.restore(t);
}
beginInlineImage() {
V("Should not call beginInlineImage");
}
beginImageData() {
V("Should not call beginImageData");
}
paintFormXObjectBegin(t, e, s) {
if (this.contentVisible && (this.save(t), this.baseTransformStack.push(this.baseTransform), e && this.transform(t, ...e), this.baseTransform = K(this.ctx), s)) {
P.axialAlignedBoundingBox(s, this.baseTransform, this.current.minMax);
const [i, n, r, a] = s, o = new Path2D();
o.rect(i, n, r - i, a - n), this.ctx.clip(o), this.dependencyTracker?.recordClipBox(t, this.ctx, i, r, n, a), this.endPath(t);
}
}
paintFormXObjectEnd(t) {
this.contentVisible && (this.restore(t), this.baseTransform = this.baseTransformStack.pop());
}
beginGroup(t, e) {
if (!this.contentVisible)
return;
this.save(t), this.inSMaskMode && (this.endSMaskMode(), this.current.activeSMask = null);
const s = this.ctx;
e.isolated || Je("TODO: Support non-isolated groups."), e.knockout && L("Knockout groups not supported.");
const i = K(s);
if (e.matrix && s.transform(...e.matrix), !e.bbox)
throw new Error("Bounding box is required.");
let n = ie.slice();
P.axialAlignedBoundingBox(e.bbox, K(s), n);
const r = [0, 0, s.canvas.width, s.canvas.height];
n = P.intersect(n, r) || [0, 0, 0, 0];
const a = Math.floor(n[0]), o = Math.floor(n[1]), l = Math.max(Math.ceil(n[2]) - a, 1), h = Math.max(Math.ceil(n[3]) - o, 1);
this.current.startNewPathAndClipBox([0, 0, l, h]);
let c = "groupAt" + this.groupLevel;
e.smask && (c += "_smask_" + this.smaskCounter++ % 2);
const u = this.cachedCanvases.getCanvas(c, l, h), f = u.context;
f.translate(-a, -o), f.transform(...i);
let g = new Path2D();
const [p, b, m, A] = e.bbox;
if (g.rect(p, b, m - p, A - b), e.matrix) {
const y = new Path2D();
y.addPath(g, new DOMMatrix(e.matrix)), g = y;
}
f.clip(g), e.smask && this.smaskStack.push({
canvas: u.canvas,
context: f,
offsetX: a,
offsetY: o,
subtype: e.smask.subtype,
backdrop: e.smask.backdrop,
transferMap: e.smask.transferMap || null,
startTransformInverse: null
}), (!e.smask || this.dependencyTracker) && (s.setTransform(1, 0, 0, 1, 0, 0), s.translate(a, o), s.save()), fe(s, f), this.ctx = f, this.dependencyTracker?.inheritSimpleDataAsFutureForcedDependencies(["fillAlpha", "strokeAlpha", "globalCompositeOperation"]).pushBaseTransform(s), this.setGState(t, [["BM", "source-over"], ["ca", 1], ["CA", 1]]), this.groupStack.push(s), this.groupLevel++;
}
endGroup(t, e) {
if (!this.contentVisible)
return;
this.groupLevel--;
const s = this.ctx, i = this.groupStack.pop();
if (this.ctx = i, this.ctx.imageSmoothingEnabled = !1, this.dependencyTracker?.popBaseTransform(), e.smask)
this.tempSMask = this.smaskStack.pop(), this.restore(t), this.dependencyTracker && this.ctx.restore();
else {
this.ctx.restore();
const n = K(this.ctx);
this.restore(t), this.ctx.save(), this.ctx.setTransform(...n);
const r = ie.slice();
P.axialAlignedBoundingBox([0, 0, s.canvas.width, s.canvas.height], n, r), this.ctx.drawImage(s.canvas, 0, 0), this.ctx.restore(), this.compose(r);
}
}
beginAnnotation(t, e, s, i, n, r) {
if (this.#t(), He(this.ctx), this.ctx.save(), this.save(t), this.baseTransform && this.ctx.setTransform(...this.baseTransform), s) {
const a = s[2] - s[0], o = s[3] - s[1];
if (r && this.annotationCanvasMap) {
i = i.slice(), i[4] -= s[0], i[5] -= s[1], s = s.slice(), s[0] = s[1] = 0, s[2] = a, s[3] = o, P.singularValueDecompose2dScale(K(this.ctx), At);
const {
viewportScale: l
} = this, h = Math.ceil(a * this.outputScaleX * l), c = Math.ceil(o * this.outputScaleY * l);
this.annotationCanvas = this.canvasFactory.create(h, c);
const {
canvas: u,
context: f
} = this.annotationCanvas;
this.annotationCanvasMap.set(e, u), this.annotationCanvas.savedCtx = this.ctx, this.ctx = f, this.ctx.save(), this.ctx.setTransform(At[0], 0, 0, -At[1], 0, o * At[1]), He(this.ctx);
} else {
He(this.ctx), this.endPath(t);
const l = new Path2D();
l.rect(s[0], s[1], a, o), this.ctx.clip(l);
}
}
this.current = new di(this.ctx.canvas.width, this.ctx.canvas.height), this.transform(t, ...i), this.transform(t, ...n);
}
endAnnotation(t) {
this.annotationCanvas && (this.ctx.restore(), this.#e(), this.ctx = this.annotationCanvas.savedCtx, delete this.annotationCanvas.savedCtx, delete this.annotationCanvas);
}
paintImageMaskXObject(t, e) {
if (!this.contentVisible)
return;
const s = e.count;
e = this.getObject(t, e.data, e), e.count = s;
const i = this.ctx, n = this._createMaskCanvas(t, e), r = n.canvas;
i.save(), i.setTransform(1, 0, 0, 1, 0, 0), i.drawImage(r, n.offsetX, n.offsetY), this.dependencyTracker?.resetBBox(t).recordBBox(t, this.ctx, n.offsetX, n.offsetX + r.width, n.offsetY, n.offsetY + r.height).recordOperation(t), i.restore(), this.compose();
}
paintImageMaskXObjectRepeat(t, e, s, i = 0, n = 0, r, a) {
if (!this.contentVisible)
return;
e = this.getObject(t, e.data, e);
const o = this.ctx;
o.save();
const l = K(o);
o.transform(s, i, n, r, 0, 0);
const h = this._createMaskCanvas(t, e);
o.setTransform(1, 0, 0, 1, h.offsetX - l[4], h.offsetY - l[5]), this.dependencyTracker?.resetBBox(t);
for (let c = 0, u = a.length; c < u; c += 2) {
const f = P.transform(l, [s, i, n, r, a[c], a[c + 1]]);
o.drawImage(h.canvas, f[4], f[5]), this.dependencyTracker?.recordBBox(t, this.ctx, f[4], f[4] + h.canvas.width, f[5], f[5] + h.canvas.height);
}
o.restore(), this.compose(), this.dependencyTracker?.recordOperation(t);
}
paintImageMaskXObjectGroup(t, e) {
if (!this.contentVisible)
return;
const s = this.ctx, i = this.current.fillColor, n = this.current.patternFill;
this.dependencyTracker?.resetBBox(t).recordDependencies(t, vt.transformAndFill);
for (const r of e) {
const {
data: a,
width: o,
height: l,
transform: h
} = r, c = this.cachedCanvases.getCanvas("maskCanvas", o, l), u = c.context;
u.save();
const f = this.getObject(t, a, r);
fi(u, f), u.globalCompositeOperation = "source-in", u.fillStyle = n ? i.getPattern(u, this, Tt(s), lt.FILL, t) : i, u.fillRect(0, 0, o, l), u.restore(), s.save(), s.transform(...h), s.scale(1, -1), Ue(s, c.canvas, 0, 0, o, l, 0, -1, 1, 1), this.dependencyTracker?.recordBBox(t, s, 0, o, 0, l), s.restore();
}
this.compose(), this.dependencyTracker?.recordOperation(t);
}
paintImageXObject(t, e) {
if (!this.contentVisible)
return;
const s = this.getObject(t, e);
if (!s) {
L("Dependent image isn't ready yet");
return;
}
this.paintInlineImageXObject(t, s);
}
paintImageXObjectRepeat(t, e, s, i, n) {
if (!this.contentVisible)
return;
const r = this.getObject(t, e);
if (!r) {
L("Dependent image isn't ready yet");
return;
}
const a = r.width, o = r.height, l = [];
for (let h = 0, c = n.length; h < c; h += 2)
l.push({
transform: [s, 0, 0, i, n[h], n[h + 1]],
x: 0,
y: 0,
w: a,
h: o
});
this.paintInlineImageXObjectGroup(t, r, l);
}
applyTransferMapsToCanvas(t) {
return this.current.transferMaps !== "none" && (t.filter = this.current.transferMaps, t.drawImage(t.canvas, 0, 0), t.filter = "none"), t.canvas;
}
applyTransferMapsToBitmap(t) {
if (this.current.transferMaps === "none")
return t.bitmap;
const {
bitmap: e,
width: s,
height: i
} = t, n = this.cachedCanvases.getCanvas("inlineImage", s, i), r = n.context;
return r.filter = this.current.transferMaps, r.drawImage(e, 0, 0), r.filter = "none", n.canvas;
}
paintInlineImageXObject(t, e) {
if (!this.contentVisible)
return;
const s = e.width, i = e.height, n = this.ctx;
this.save(t);
const {
filter: r
} = n;
r !== "none" && r !== "" && (n.filter = "none"), n.scale(1 / s, -1 / i);
let a;
if (e.bitmap)
a = this.applyTransferMapsToBitmap(e);
else if (typeof HTMLElement == "function" && e instanceof HTMLElement || !e.data)
a = e;
else {
const h = this.cachedCanvases.getCanvas("inlineImage", s, i).context;
ui(h, e), a = this.applyTransferMapsToCanvas(h);
}
const o = this._scaleImage(a, Tt(n));
n.imageSmoothingEnabled = pi(K(n), e.interpolate), this.dependencyTracker?.resetBBox(t).recordBBox(t, n, 0, s, -i, 0).recordDependencies(t, vt.imageXObject).recordOperation(t), Ue(n, o.img, 0, 0, o.paintWidth, o.paintHeight, 0, -i, s, i), this.compose(), this.restore(t);
}
paintInlineImageXObjectGroup(t, e, s) {
if (!this.contentVisible)
return;
const i = this.ctx;
let n;
if (e.bitmap)
n = e.bitmap;
else {
const r = e.width, a = e.height, l = this.cachedCanvases.getCanvas("inlineImage", r, a).context;
ui(l, e), n = this.applyTransferMapsToCanvas(l);
}
this.dependencyTracker?.resetBBox(t);
for (const r of s)
i.save(), i.transform(...r.transform), i.scale(1, -1), Ue(i, n, r.x, r.y, r.w, r.h, 0, -1, 1, 1), this.dependencyTracker?.recordBBox(t, i, 0, 1, -1, 0), i.restore();
this.dependencyTracker?.recordOperation(t), this.compose();
}
paintSolidColorImageMask(t) {
this.contentVisible && (this.dependencyTracker?.resetBBox(t).recordBBox(t, this.ctx, 0, 1, 0, 1).recordDependencies(t, vt.fill).recordOperation(t), this.ctx.fillRect(0, 0, 1, 1), this.compose());
}
markPoint(t, e) {
}
markPointProps(t, e, s) {
}
beginMarkedContent(t, e) {
this.dependencyTracker?.beginMarkedContent(t), this.markedContentStack.push({
visible: !0
});
}
beginMarkedContentProps(t, e, s) {
this.dependencyTracker?.beginMarkedContent(t), e === "OC" ? this.markedContentStack.push({
visible: this.optionalContentConfig.isVisible(s)
}) : this.markedContentStack.push({
visible: !0
}), this.contentVisible = this.isContentVisible();
}
endMarkedContent(t) {
this.dependencyTracker?.endMarkedContent(t), this.markedContentStack.pop(), this.contentVisible = this.isContentVisible();
}
beginCompat(t) {
}
endCompat(t) {
}
consumePath(t, e, s) {
const i = this.current.isEmptyClip();
this.pendingClip && this.current.updateClipFromPath(), this.pendingClip || this.compose(s);
const n = this.ctx;
this.pendingClip ? (i || (this.pendingClip === gi ? n.clip(e, "evenodd") : n.clip(e)), this.pendingClip = null, this.dependencyTracker?.bboxToClipBoxDropOperation(t).recordFutureForcedDependency("clipPath", t)) : this.dependencyTracker?.recordOperation(t), this.current.startNewPathAndClipBox(this.current.clipBox);
}
getSinglePixelWidth() {
if (!this._cachedGetSinglePixelWidth) {
const t = K(this.ctx);
if (t[1] === 0 && t[2] === 0)
this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(t[0]), Math.abs(t[3]));
else {
const e = Math.abs(t[0] * t[3] - t[2] * t[1]), s = Math.hypot(t[0], t[2]), i = Math.hypot(t[1], t[3]);
this._cachedGetSinglePixelWidth = Math.max(s, i) / e;
}
}
return this._cachedGetSinglePixelWidth;
}
getScaleForStroking() {
if (this._cachedScaleForStroking[0] === -1) {
const {
lineWidth: t
} = this.current, {
a: e,
b: s,
c: i,
d: n
} = this.ctx.getTransform();
let r, a;
if (s === 0 && i === 0) {
const o = Math.abs(e), l = Math.abs(n);
if (o === l)
if (t === 0)
r = a = 1 / o;
else {
const h = o * t;
r = a = h < 1 ? 1 / h : 1;
}
else if (t === 0)
r = 1 / o, a = 1 / l;
else {
const h = o * t, c = l * t;
r = h < 1 ? 1 / h : 1, a = c < 1 ? 1 / c : 1;
}
} else {
const o = Math.abs(e * n - s * i), l = Math.hypot(e, s), h = Math.hypot(i, n);
if (t === 0)
r = h / o, a = l / o;
else {
const c = t * o;
r = h > c ? h / c : 1, a = l > c ? l / c : 1;
}
}
this._cachedScaleForStroking[0] = r, this._cachedScaleForStroking[1] = a;
}
return this._cachedScaleForStroking;
}
rescaleAndStroke(t, e) {
const {
ctx: s,
current: {
lineWidth: i
}
} = this, [n, r] = this.getScaleForStroking();
if (n === r) {
s.lineWidth = (i || 1) * n, s.stroke(t);
return;
}
const a = s.getLineDash();
e && s.save(), s.scale(n, r), ds.a = 1 / n, ds.d = 1 / r;
const o = new Path2D();
if (o.addPath(t, ds), a.length > 0) {
const l = Math.max(n, r);
s.setLineDash(a.map((h) => h / l)), s.lineDashOffset /= l;
}
s.lineWidth = i || 1, s.stroke(o), e && s.restore();
}
isContentVisible() {
for (let t = this.markedContentStack.length - 1; t >= 0; t--)
if (!this.markedContentStack[t].visible)
return !1;
return !0;
}
}
for (const d in Se)
oe.prototype[d] !== void 0 && (oe.prototype[Se[d]] = oe.prototype[d]);
class ve {
static #t = null;
static #e = "";
static get workerPort() {
return this.#t;
}
static set workerPort(t) {
if (!(typeof Worker < "u" && t instanceof Worker) && t !== null)
throw new Error("Invalid `workerPort` type.");
this.#t = t;
}
static get workerSrc() {
return this.#e;
}
static set workerSrc(t) {
if (typeof t != "string")
throw new Error("Invalid `workerSrc` type.");
this.#e = t;
}
}
class er {
#t;
#e;
constructor({
parsedData: t,
rawData: e
}) {
this.#t = t, this.#e = e;
}
getRaw() {
return this.#e;
}
get(t) {
return this.#t.get(t) ?? null;
}
[Symbol.iterator]() {
return this.#t.entries();
}
}
const te = /* @__PURE__ */ Symbol("INTERNAL");
class sr {
#t = !1;
#e = !1;
#i = !1;
#s = !0;
constructor(t, {
name: e,
intent: s,
usage: i,
rbGroups: n
}) {
this.#t = !!(t & yt.DISPLAY), this.#e = !!(t & yt.PRINT), this.name = e, this.intent = s, this.usage = i, this.rbGroups = n;
}
get visible() {
if (this.#i)
return this.#s;
if (!this.#s)
return !1;
const {
print: t,
view: e
} = this.usage;
return this.#t ? e?.viewState !== "OFF" : this.#e ? t?.printState !== "OFF" : !0;
}
_setVisible(t, e, s = !1) {
t !== te && V("Internal method `_setVisible` called."), this.#i = s, this.#s = e;
}
}
class ir {
#t = null;
#e = /* @__PURE__ */ new Map();
#i = null;
#s = null;
constructor(t, e = yt.DISPLAY) {
if (this.renderingIntent = e, this.name = null, this.creator = null, t !== null) {
this.name = t.name, this.creator = t.creator, this.#s = t.order;
for (const s of t.groups)
this.#e.set(s.id, new sr(e, s));
if (t.baseState === "OFF")
for (const s of this.#e.values())
s._setVisible(te, !1);
for (const s of t.on)
this.#e.get(s)._setVisible(te, !0);
for (const s of t.off)
this.#e.get(s)._setVisible(te, !1);
this.#i = this.getHash();
}
}
#a(t) {
const e = t.length;
if (e < 2)
return !0;
const s = t[0];
for (let i = 1; i < e; i++) {
const n = t[i];
let r;
if (Array.isArray(n))
r = this.#a(n);
else if (this.#e.has(n))
r = this.#e.get(n).visible;
else
return L(`Optional content group not found: ${n}`), !0;
switch (s) {
case "And":
if (!r)
return !1;
break;
case "Or":
if (r)
return !0;
break;
case "Not":
return !r;
default:
return !0;
}
}
return s === "And";
}
isVisible(t) {
if (this.#e.size === 0)
return !0;
if (!t)
return Je("Optional content group not defined."), !0;
if (t.type === "OCG")
return this.#e.has(t.id) ? this.#e.get(t.id).visible : (L(`Optional content group not found: ${t.id}`), !0);
if (t.type === "OCMD") {
if (t.expression)
return this.#a(t.expression);
if (!t.policy || t.policy === "AnyOn") {
for (const e of t.ids) {
if (!this.#e.has(e))
return L(`Optional content group not found: ${e}`), !0;
if (this.#e.get(e).visible)
return !0;
}
return !1;
} else if (t.policy === "AllOn") {
for (const e of t.ids) {
if (!this.#e.has(e))
return L(`Optional content group not found: ${e}`), !0;
if (!this.#e.get(e).visible)
return !1;
}
return !0;
} else if (t.policy === "AnyOff") {
for (const e of t.ids) {
if (!this.#e.has(e))
return L(`Optional content group not found: ${e}`), !0;
if (!this.#e.get(e).visible)
return !0;
}
return !1;
} else if (t.policy === "AllOff") {
for (const e of t.ids) {
if (!this.#e.has(e))
return L(`Optional content group not found: ${e}`), !0;
if (this.#e.get(e).visible)
return !1;
}
return !0;
}
return L(`Unknown optional content policy ${t.policy}.`), !0;
}
return L(`Unknown group type ${t.type}.`), !0;
}
setVisibility(t, e = !0, s = !0) {
const i = this.#e.get(t);
if (!i) {
L(`Optional content group not found: ${t}`);
return;
}
if (s && e && i.rbGroups.length)
for (const n of i.rbGroups)
for (const r of n)
r !== t && this.#e.get(r)?._setVisible(te, !1, !0);
i._setVisible(te, !!e, !0), this.#t = null;
}
setOCGState({
state: t,
preserveRB: e
}) {
let s;
for (const i of t) {
switch (i) {
case "ON":
case "OFF":
case "Toggle":
s = i;
continue;
}
const n = this.#e.get(i);
if (n)
switch (s) {
case "ON":
this.setVisibility(i, !0, e);
break;
case "OFF":
this.setVisibility(i, !1, e);
break;
case "Toggle":
this.setVisibility(i, !n.visible, e);
break;
}
}
this.#t = null;
}
get hasInitialVisibility() {
return this.#i === null || this.getHash() === this.#i;
}
getOrder() {
return this.#e.size ? this.#s ? this.#s.slice() : [...this.#e.keys()] : null;
}
getGroup(t) {
return this.#e.get(t) || null;
}
getHash() {
if (this.#t !== null)
return this.#t;
const t = new Pi();
for (const [e, s] of this.#e)
t.update(`${e}:${s.visible}`);
return this.#t = t.hexdigest();
}
[Symbol.iterator]() {
return this.#e.entries();
}
}
class nr {
constructor(t, {
disableRange: e = !1,
disableStream: s = !1
}) {
N(t, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
const {
length: i,
initialData: n,
progressiveDone: r,
contentDispositionFilename: a
} = t;
if (this._queuedChunks = [], this._progressiveDone = r, this._contentDispositionFilename = a, n?.length > 0) {
const o = n instanceof Uint8Array && n.byteLength === n.buffer.byteLength ? n.buffer : new Uint8Array(n).buffer;
this._queuedChunks.push(o);
}
this._pdfDataRangeTransport = t, this._isStreamingSupported = !s, this._isRangeSupported = !e, this._contentLength = i, this._fullRequestReader = null, this._rangeReaders = [], t.addRangeListener((o, l) => {
this._onReceiveData({
begin: o,
chunk: l
});
}), t.addProgressListener((o, l) => {
this._onProgress({
loaded: o,
total: l
});
}), t.addProgressiveReadListener((o) => {
this._onReceiveData({
chunk: o
});
}), t.addProgressiveDoneListener(() => {
this._onProgressiveDone();
}), t.transportReady();
}
_onReceiveData({
begin: t,
chunk: e
}) {
const s = e instanceof Uint8Array && e.byteLength === e.buffer.byteLength ? e.buffer : new Uint8Array(e).buffer;
if (t === void 0)
this._fullRequestReader ? this._fullRequestReader._enqueue(s) : this._queuedChunks.push(s);
else {
const i = this._rangeReaders.some(function(n) {
return n._begin !== t ? !1 : (n._enqueue(s), !0);
});
N(i, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
}
}
get _progressiveDataLength() {
return this._fullRequestReader?._loaded ?? 0;
}
_onProgress(t) {
t.total === void 0 ? this._rangeReaders[0]?.onProgress?.({
loaded: t.loaded
}) : this._fullRequestReader?.onProgress?.({
loaded: t.loaded,
total: t.total
});
}
_onProgressiveDone() {
this._fullRequestReader?.progressiveDone(), this._progressiveDone = !0;
}
_removeRangeReader(t) {
const e = this._rangeReaders.indexOf(t);
e >= 0 && this._rangeReaders.splice(e, 1);
}
getFullReader() {
N(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
const t = this._queuedChunks;
return this._queuedChunks = null, new rr(this, t, this._progressiveDone, this._contentDispositionFilename);
}
getRangeReader(t, e) {
if (e <= this._progressiveDataLength)
return null;
const s = new ar(this, t, e);
return this._pdfDataRangeTransport.requestDataRange(t, e), this._rangeReaders.push(s), s;
}
cancelAllRequests(t) {
this._fullRequestReader?.cancel(t);
for (const e of this._rangeReaders.slice(0))
e.cancel(t);
this._pdfDataRangeTransport.abort();
}
}
class rr {
constructor(t, e, s = !1, i = null) {
this._stream = t, this._done = s || !1, this._filename = Ms(i) ? i : null, this._queuedChunks = e || [], this._loaded = 0;
for (const n of this._queuedChunks)
this._loaded += n.byteLength;
this._requests = [], this._headersReady = Promise.resolve(), t._fullRequestReader = this, this.onProgress = null;
}
_enqueue(t) {
this._done || (this._requests.length > 0 ? this._requests.shift().resolve({
value: t,
done: !1
}) : this._queuedChunks.push(t), this._loaded += t.byteLength);
}
get headersReady() {
return this._headersReady;
}
get filename() {
return this._filename;
}
get isRangeSupported() {
return this._stream._isRangeSupported;
}
get isStreamingSupported() {
return this._stream._isStreamingSupported;
}
get contentLength() {
return this._stream._contentLength;
}
async read() {
if (this._queuedChunks.length > 0)
return {
value: this._queuedChunks.shift(),
done: !1
};
if (this._done)
return {
value: void 0,
done: !0
};
const t = Promise.withResolvers();
return this._requests.push(t), t.promise;
}
cancel(t) {
this._done = !0;
for (const e of this._requests)
e.resolve({
value: void 0,
done: !0
});
this._requests.length = 0;
}
progressiveDone() {
this._done || (this._done = !0);
}
}
class ar {
constructor(t, e, s) {
this._stream = t, this._begin = e, this._end = s, this._queuedChunk = null, this._requests = [], this._done = !1, this.onProgress = null;
}
_enqueue(t) {
if (!this._done) {
if (this._requests.length === 0)
this._queuedChunk = t;
else {
this._requests.shift().resolve({
value: t,
done: !1
});
for (const s of this._requests)
s.resolve({
value: void 0,
done: !0
});
this._requests.length = 0;
}
this._done = !0, this._stream._removeRangeReader(this);
}
}
get isStreamingSupported() {
return !1;
}
async read() {
if (this._queuedChunk) {
const e = this._queuedChunk;
return this._queuedChunk = null, {
value: e,
done: !1
};
}
if (this._done)
return {
value: void 0,
done: !0
};
const t = Promise.withResolvers();
return this._requests.push(t), t.promise;
}
cancel(t) {
this._done = !0;
for (const e of this._requests)
e.resolve({
value: void 0,
done: !0
});
this._requests.length = 0, this._stream._removeRangeReader(this);
}
}
function or(d) {
let t = !0, e = s("filename\\*", "i").exec(d);
if (e) {
e = e[1];
let h = a(e);
return h = unescape(h), h = o(h), h = l(h), n(h);
}
if (e = r(d), e) {
const h = l(e);
return n(h);
}
if (e = s("filename", "i").exec(d), e) {
e = e[1];
let h = a(e);
return h = l(h), n(h);
}
function s(h, c) {
return new RegExp("(?:^|;)\\s*" + h + '\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)', c);
}
function i(h, c) {
if (h) {
if (!/^[\x00-\xFF]+$/.test(c))
return c;
try {
const u = new TextDecoder(h, {
fatal: !0
}), f = Te(c);
c = u.decode(f), t = !1;
} catch {
}
}
return c;
}
function n(h) {
return t && /[\x80-\xff]/.test(h) && (h = i("utf-8", h), t && (h = i("iso-8859-1", h))), h;
}
function r(h) {
const c = [];
let u;
const f = s("filename\\*((?!0\\d)\\d+)(\\*?)", "ig");
for (; (u = f.exec(h)) !== null; ) {
let [, p, b, m] = u;
if (p = parseInt(p, 10), p in c) {
if (p === 0)
break;
continue;
}
c[p] = [b, m];
}
const g = [];
for (let p = 0; p < c.length && p in c; ++p) {
let [b, m] = c[p];
m = a(m), b && (m = unescape(m), p === 0 && (m = o(m))), g.push(m);
}
return g.join("");
}
function a(h) {
if (h.startsWith('"')) {
const c = h.slice(1).split('\\"');
for (let u = 0; u < c.length; ++u) {
const f = c[u].indexOf('"');
f !== -1 && (c[u] = c[u].slice(0, f), c.length = u + 1), c[u] = c[u].replaceAll(/\\(.)/g, "$1");
}
h = c.join('"');
}
return h;
}
function o(h) {
const c = h.indexOf("'");
if (c === -1)
return h;
const u = h.slice(0, c), g = h.slice(c + 1).replace(/^[^']*'/, "");
return i(u, g);
}
function l(h) {
return !h.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(h) ? h : h.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function(c, u, f, g) {
if (f === "q" || f === "Q")
return g = g.replaceAll("_", " "), g = g.replaceAll(/=([0-9a-fA-F]{2})/g, function(p, b) {
return String.fromCharCode(parseInt(b, 16));
}), i(u, g);
try {
g = atob(g);
} catch {
}
return i(u, g);
});
}
return "";
}
function Fi(d, t) {
const e = new Headers();
if (!d || !t || typeof t != "object")
return e;
for (const s in t) {
const i = t[s];
i !== void 0 && e.append(s, i);
}
return e;
}
function es(d) {
return URL.parse(d)?.origin ?? null;
}
function Oi({
responseHeaders: d,
isHttp: t,
rangeChunkSize: e,
disableRange: s
}) {
const i = {
allowRangeRequests: !1,
suggestedLength: void 0
}, n = parseInt(d.get("Content-Length"), 10);
return !Number.isInteger(n) || (i.suggestedLength = n, n <= 2 * e) || s || !t || d.get("Accept-Ranges") !== "bytes" || (d.get("Content-Encoding") || "identity") !== "identity" || (i.allowRangeRequests = !0), i;
}
function Ni(d) {
const t = d.get("Content-Disposition");
if (t) {
let e = or(t);
if (e.includes("%"))
try {
e = decodeURIComponent(e);
} catch {
}
if (Ms(e))
return e;
}
return null;
}
function De(d, t) {
return new We(`Unexpected server response (${d}) while retrieving PDF "${t}".`, d, d === 404 || d === 0 && t.startsWith("file:"));
}
function Bi(d) {
return d === 200 || d === 206;
}
function Ui(d, t, e) {
return {
method: "GET",
headers: d,
signal: e.signal,
mode: "cors",
credentials: t ? "include" : "same-origin",
redirect: "follow"
};
}
function Hi(d) {
return d instanceof Uint8Array ? d.buffer : d instanceof ArrayBuffer ? d : (L(`getArrayBuffer - unexpected data format: ${d}`), new Uint8Array(d).buffer);
}
class lr {
_responseOrigin = null;
constructor(t) {
this.source = t, this.isHttp = /^https?:/i.test(t.url), this.headers = Fi(this.isHttp, t.httpHeaders), this._fullRequestReader = null, this._rangeRequestReaders = [];
}
get _progressiveDataLength() {
return this._fullRequestReader?._loaded ?? 0;
}
getFullReader() {
return N(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."), this._fullRequestReader = new hr(this), this._fullRequestReader;
}
getRangeReader(t, e) {
if (e <= this._progressiveDataLength)
return null;
const s = new cr(this, t, e);
return this._rangeRequestReaders.push(s), s;
}
cancelAllRequests(t) {
this._fullRequestReader?.cancel(t);
for (const e of this._rangeRequestReaders.slice(0))
e.cancel(t);
}
}
class hr {
constructor(t) {
this._stream = t, this._reader = null, this._loaded = 0, this._filename = null;
const e = t.source;
this._withCredentials = e.withCredentials || !1, this._contentLength = e.length, this._headersCapability = Promise.withResolvers(), this._disableRange = e.disableRange || !1, this._rangeChunkSize = e.rangeChunkSize, !this._rangeChunkSize && !this._disableRange && (this._disableRange = !0), this._abortController = new AbortController(), this._isStreamingSupported = !e.disableStream, this._isRangeSupported = !e.disableRange;
const s = new Headers(t.headers), i = e.url;
fetch(i, Ui(s, this._withCredentials, this._abortController)).then((n) => {
if (t._responseOrigin = es(n.url), !Bi(n.status))
throw De(n.status, i);
this._reader = n.body.getReader(), this._headersCapability.resolve();
const r = n.headers, {
allowRangeRequests: a,
suggestedLength: o
} = Oi({
responseHeaders: r,
isHttp: t.isHttp,
rangeChunkSize: this._rangeChunkSize,
disableRange: this._disableRange
});
this._isRangeSupported = a, this._contentLength = o || this._contentLength, this._filename = Ni(r), !this._isStreamingSupported && this._isRangeSupported && this.cancel(new $t("Streaming is disabled."));
}).catch(this._headersCapability.reject), this.onProgress = null;
}
get headersReady() {
return this._headersCapability.promise;
}
get filename() {
return this._filename;
}
get contentLength() {
return this._contentLength;
}
get isRangeSupported() {
return this._isRangeSupported;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
await this._headersCapability.promise;
const {
value: t,
done: e
} = await this._reader.read();
return e ? {
value: t,
done: e
} : (this._loaded += t.byteLength, this.onProgress?.({
loaded: this._loaded,
total: this._contentLength
}), {
value: Hi(t),
done: !1
});
}
cancel(t) {
this._reader?.cancel(t), this._abortController.abort();
}
}
class cr {
constructor(t, e, s) {
this._stream = t, this._reader = null, this._loaded = 0;
const i = t.source;
this._withCredentials = i.withCredentials || !1, this._readCapability = Promise.withResolvers(), this._isStreamingSupported = !i.disableStream, this._abortController = new AbortController();
const n = new Headers(t.headers);
n.append("Range", `bytes=${e}-${s - 1}`);
const r = i.url;
fetch(r, Ui(n, this._withCredentials, this._abortController)).then((a) => {
const o = es(a.url);
if (o !== t._responseOrigin)
throw new Error(`Expected range response-origin "${o}" to match "${t._responseOrigin}".`);
if (!Bi(a.status))
throw De(a.status, r);
this._readCapability.resolve(), this._reader = a.body.getReader();
}).catch(this._readCapability.reject), this.onProgress = null;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
await this._readCapability.promise;
const {
value: t,
done: e
} = await this._reader.read();
return e ? {
value: t,
done: e
} : (this._loaded += t.byteLength, this.onProgress?.({
loaded: this._loaded
}), {
value: Hi(t),
done: !1
});
}
cancel(t) {
this._reader?.cancel(t), this._abortController.abort();
}
}
const us = 200, fs = 206;
function dr(d) {
const t = d.response;
return typeof t != "string" ? t : Te(t).buffer;
}
class ur {
_responseOrigin = null;
constructor({
url: t,
httpHeaders: e,
withCredentials: s
}) {
this.url = t, this.isHttp = /^https?:/i.test(t), this.headers = Fi(this.isHttp, e), this.withCredentials = s || !1, this.currXhrId = 0, this.pendingRequests = /* @__PURE__ */ Object.create(null);
}
request(t) {
const e = new XMLHttpRequest(), s = this.currXhrId++, i = this.pendingRequests[s] = {
xhr: e
};
e.open("GET", this.url), e.withCredentials = this.withCredentials;
for (const [n, r] of this.headers)
e.setRequestHeader(n, r);
return this.isHttp && "begin" in t && "end" in t ? (e.setRequestHeader("Range", `bytes=${t.begin}-${t.end - 1}`), i.expectedStatus = fs) : i.expectedStatus = us, e.responseType = "arraybuffer", N(t.onError, "Expected `onError` callback to be provided."), e.onerror = () => {
t.onError(e.status);
}, e.onreadystatechange = this.onStateChange.bind(this, s), e.onprogress = this.onProgress.bind(this, s), i.onHeadersReceived = t.onHeadersReceived, i.onDone = t.onDone, i.onError = t.onError, i.onProgress = t.onProgress, e.send(null), s;
}
onProgress(t, e) {
const s = this.pendingRequests[t];
s && s.onProgress?.(e);
}
onStateChange(t, e) {
const s = this.pendingRequests[t];
if (!s)
return;
const i = s.xhr;
if (i.readyState >= 2 && s.onHeadersReceived && (s.onHeadersReceived(), delete s.onHeadersReceived), i.readyState !== 4 || !(t in this.pendingRequests))
return;
if (delete this.pendingRequests[t], i.status === 0 && this.isHttp) {
s.onError(i.status);
return;
}
const n = i.status || us;
if (!(n === us && s.expectedStatus === fs) && n !== s.expectedStatus) {
s.onError(i.status);
return;
}
const a = dr(i);
if (n === fs) {
const o = i.getResponseHeader("Content-Range"), l = /bytes (\d+)-(\d+)\/(\d+)/.exec(o);
l ? s.onDone({
begin: parseInt(l[1], 10),
chunk: a
}) : (L('Missing or invalid "Content-Range" header.'), s.onError(0));
} else a ? s.onDone({
begin: 0,
chunk: a
}) : s.onError(i.status);
}
getRequestXhr(t) {
return this.pendingRequests[t].xhr;
}
isPendingRequest(t) {
return t in this.pendingRequests;
}
abortRequest(t) {
const e = this.pendingRequests[t].xhr;
delete this.pendingRequests[t], e.abort();
}
}
class fr {
constructor(t) {
this._source = t, this._manager = new ur(t), this._rangeChunkSize = t.rangeChunkSize, this._fullRequestReader = null, this._rangeRequestReaders = [];
}
_onRangeRequestReaderClosed(t) {
const e = this._rangeRequestReaders.indexOf(t);
e >= 0 && this._rangeRequestReaders.splice(e, 1);
}
getFullReader() {
return N(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."), this._fullRequestReader = new pr(this._manager, this._source), this._fullRequestReader;
}
getRangeReader(t, e) {
const s = new gr(this._manager, t, e);
return s.onClosed = this._onRangeRequestReaderClosed.bind(this), this._rangeRequestReaders.push(s), s;
}
cancelAllRequests(t) {
this._fullRequestReader?.cancel(t);
for (const e of this._rangeRequestReaders.slice(0))
e.cancel(t);
}
}
class pr {
constructor(t, e) {
this._manager = t, this._url = e.url, this._fullRequestId = t.request({
onHeadersReceived: this._onHeadersReceived.bind(this),
onDone: this._onDone.bind(this),
onError: this._onError.bind(this),
onProgress: this._onProgress.bind(this)
}), this._headersCapability = Promise.withResolvers(), this._disableRange = e.disableRange || !1, this._contentLength = e.length, this._rangeChunkSize = e.rangeChunkSize, !this._rangeChunkSize && !this._disableRange && (this._disableRange = !0), this._isStreamingSupported = !1, this._isRangeSupported = !1, this._cachedChunks = [], this._requests = [], this._done = !1, this._storedError = void 0, this._filename = null, this.onProgress = null;
}
_onHeadersReceived() {
const t = this._fullRequestId, e = this._manager.getRequestXhr(t);
this._manager._responseOrigin = es(e.responseURL);
const s = e.getAllResponseHeaders(), i = new Headers(s ? s.trimStart().replace(/[^\S ]+$/, "").split(/[\r\n]+/).map((a) => {
const [o, ...l] = a.split(": ");
return [o, l.join(": ")];
}) : []), {
allowRangeRequests: n,
suggestedLength: r
} = Oi({
responseHeaders: i,
isHttp: this._manager.isHttp,
rangeChunkSize: this._rangeChunkSize,
disableRange: this._disableRange
});
n && (this._isRangeSupported = !0), this._contentLength = r || this._contentLength, this._filename = Ni(i), this._isRangeSupported && this._manager.abortRequest(t), this._headersCapability.resolve();
}
_onDone(t) {
if (t && (this._requests.length > 0 ? this._requests.shift().resolve({
value: t.chunk,
done: !1
}) : this._cachedChunks.push(t.chunk)), this._done = !0, !(this._cachedChunks.length > 0)) {
for (const e of this._requests)
e.resolve({
value: void 0,
done: !0
});
this._requests.length = 0;
}
}
_onError(t) {
this._storedError = De(t, this._url), this._headersCapability.reject(this._storedError);
for (const e of this._requests)
e.reject(this._storedError);
this._requests.length = 0, this._cachedChunks.length = 0;
}
_onProgress(t) {
this.onProgress?.({
loaded: t.loaded,
total: t.lengthComputable ? t.total : this._contentLength
});
}
get filename() {
return this._filename;
}
get isRangeSupported() {
return this._isRangeSupported;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
get contentLength() {
return this._contentLength;
}
get headersReady() {
return this._headersCapability.promise;
}
async read() {
if (await this._headersCapability.promise, this._storedError)
throw this._storedError;
if (this._cachedChunks.length > 0)
return {
value: this._cachedChunks.shift(),
done: !1
};
if (this._done)
return {
value: void 0,
done: !0
};
const t = Promise.withResolvers();
return this._requests.push(t), t.promise;
}
cancel(t) {
this._done = !0, this._headersCapability.reject(t);
for (const e of this._requests)
e.resolve({
value: void 0,
done: !0
});
this._requests.length = 0, this._manager.isPendingRequest(this._fullRequestId) && this._manager.abortRequest(this._fullRequestId), this._fullRequestReader = null;
}
}
class gr {
constructor(t, e, s) {
this._manager = t, this._url = t.url, this._requestId = t.request({
begin: e,
end: s,
onHeadersReceived: this._onHeadersReceived.bind(this),
onDone: this._onDone.bind(this),
onError: this._onError.bind(this),
onProgress: this._onProgress.bind(this)
}), this._requests = [], this._queuedChunk = null, this._done = !1, this._storedError = void 0, this.onProgress = null, this.onClosed = null;
}
_onHeadersReceived() {
const t = es(this._manager.getRequestXhr(this._requestId)?.responseURL);
t !== this._manager._responseOrigin && (this._storedError = new Error(`Expected range response-origin "${t}" to match "${this._manager._responseOrigin}".`), this._onError(0));
}
_close() {
this.onClosed?.(this);
}
_onDone(t) {
const e = t.chunk;
this._requests.length > 0 ? this._requests.shift().resolve({
value: e,
done: !1
}) : this._queuedChunk = e, this._done = !0;
for (const s of this._requests)
s.resolve({
value: void 0,
done: !0
});
this._requests.length = 0, this._close();
}
_onError(t) {
this._storedError ??= De(t, this._url);
for (const e of this._requests)
e.reject(this._storedError);
this._requests.length = 0, this._queuedChunk = null;
}
_onProgress(t) {
this.isStreamingSupported || this.onProgress?.({
loaded: t.loaded
});
}
get isStreamingSupported() {
return !1;
}
async read() {
if (this._storedError)
throw this._storedError;
if (this._queuedChunk !== null) {
const e = this._queuedChunk;
return this._queuedChunk = null, {
value: e,
done: !1
};
}
if (this._done)
return {
value: void 0,
done: !0
};
const t = Promise.withResolvers();
return this._requests.push(t), t.promise;
}
cancel(t) {
this._done = !0;
for (const e of this._requests)
e.resolve({
value: void 0,
done: !0
});
this._requests.length = 0, this._manager.isPendingRequest(this._requestId) && this._manager.abortRequest(this._requestId), this._close();
}
}
const mr = /^[a-z][a-z0-9\-+.]+:/i;
function br(d) {
if (mr.test(d))
return new URL(d);
const t = process.getBuiltinModule("url");
return new URL(t.pathToFileURL(d));
}
class yr {
constructor(t) {
this.source = t, this.url = br(t.url), N(this.url.protocol === "file:", "PDFNodeStream only supports file:// URLs."), this._fullRequestReader = null, this._rangeRequestReaders = [];
}
get _progressiveDataLength() {
return this._fullRequestReader?._loaded ?? 0;
}
getFullReader() {
return N(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."), this._fullRequestReader = new Ar(this), this._fullRequestReader;
}
getRangeReader(t, e) {
if (e <= this._progressiveDataLength)
return null;
const s = new wr(this, t, e);
return this._rangeRequestReaders.push(s), s;
}
cancelAllRequests(t) {
this._fullRequestReader?.cancel(t);
for (const e of this._rangeRequestReaders.slice(0))
e.cancel(t);
}
}
class Ar {
constructor(t) {
this._url = t.url, this._done = !1, this._storedError = null, this.onProgress = null;
const e = t.source;
this._contentLength = e.length, this._loaded = 0, this._filename = null, this._disableRange = e.disableRange || !1, this._rangeChunkSize = e.rangeChunkSize, !this._rangeChunkSize && !this._disableRange && (this._disableRange = !0), this._isStreamingSupported = !e.disableStream, this._isRangeSupported = !e.disableRange, this._readableStream = null, this._readCapability = Promise.withResolvers(), this._headersCapability = Promise.withResolvers();
const s = process.getBuiltinModule("fs");
s.promises.lstat(this._url).then((i) => {
this._contentLength = i.size, this._setReadableStream(s.createReadStream(this._url)), this._headersCapability.resolve();
}, (i) => {
i.code === "ENOENT" && (i = De(0, this._url.href)), this._storedError = i, this._headersCapability.reject(i);
});
}
get headersReady() {
return this._headersCapability.promise;
}
get filename() {
return this._filename;
}
get contentLength() {
return this._contentLength;
}
get isRangeSupported() {
return this._isRangeSupported;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
if (await this._readCapability.promise, this._done)
return {
value: void 0,
done: !0
};
if (this._storedError)
throw this._storedError;
const t = this._readableStream.read();
return t === null ? (this._readCapability = Promise.withResolvers(), this.read()) : (this._loaded += t.length, this.onProgress?.({
loaded: this._loaded,
total: this._contentLength
}), {
value: new Uint8Array(t).buffer,
done: !1
});
}
cancel(t) {
if (!this._readableStream) {
this._error(t);
return;
}
this._readableStream.destroy(t);
}
_error(t) {
this._storedError = t, this._readCapability.resolve();
}
_setReadableStream(t) {
this._readableStream = t, t.on("readable", () => {
this._readCapability.resolve();
}), t.on("end", () => {
t.destroy(), this._done = !0, this._readCapability.resolve();
}), t.on("error", (e) => {
this._error(e);
}), !this._isStreamingSupported && this._isRangeSupported && this._error(new $t("streaming is disabled")), this._storedError && this._readableStream.destroy(this._storedError);
}
}
class wr {
constructor(t, e, s) {
this._url = t.url, this._done = !1, this._storedError = null, this.onProgress = null, this._loaded = 0, this._readableStream = null, this._readCapability = Promise.withResolvers();
const i = t.source;
this._isStreamingSupported = !i.disableStream;
const n = process.getBuiltinModule("fs");
this._setReadableStream(n.createReadStream(this._url, {
start: e,
end: s - 1
}));
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
if (await this._readCapability.promise, this._done)
return {
value: void 0,
done: !0
};
if (this._storedError)
throw this._storedError;
const t = this._readableStream.read();
return t === null ? (this._readCapability = Promise.withResolvers(), this.read()) : (this._loaded += t.length, this.onProgress?.({
loaded: this._loaded
}), {
value: new Uint8Array(t).buffer,
done: !1
});
}
cancel(t) {
if (!this._readableStream) {
this._error(t);
return;
}
this._readableStream.destroy(t);
}
_error(t) {
this._storedError = t, this._readCapability.resolve();
}
_setReadableStream(t) {
this._readableStream = t, t.on("readable", () => {
this._readCapability.resolve();
}), t.on("end", () => {
t.destroy(), this._done = !0, this._readCapability.resolve();
}), t.on("error", (e) => {
this._error(e);
}), this._storedError && this._readableStream.destroy(this._storedError);
}
}
const pe = /* @__PURE__ */ Symbol("INITIAL_DATA");
class $i {
#t = /* @__PURE__ */ Object.create(null);
#e(t) {
return this.#t[t] ||= {
...Promise.withResolvers(),
data: pe
};
}
get(t, e = null) {
if (e) {
const i = this.#e(t);
return i.promise.then(() => e(i.data)), null;
}
const s = this.#t[t];
if (!s || s.data === pe)
throw new Error(`Requesting object that isn't resolved yet ${t}.`);
return s.data;
}
has(t) {
const e = this.#t[t];
return !!e && e.data !== pe;
}
delete(t) {
const e = this.#t[t];
return !e || e.data === pe ? !1 : (delete this.#t[t], !0);
}
resolve(t, e = null) {
const s = this.#e(t);
s.data = e, s.resolve();
}
clear() {
for (const t in this.#t) {
const {
data: e
} = this.#t[t];
e?.bitmap?.close();
}
this.#t = /* @__PURE__ */ Object.create(null);
}
*[Symbol.iterator]() {
for (const t in this.#t) {
const {
data: e
} = this.#t[t];
e !== pe && (yield [t, e]);
}
}
}
const vr = 1e5, mi = 30;
class dt {
#t = Promise.withResolvers();
#e = null;
#i = !1;
#s = !!globalThis.FontInspector?.enabled;
#a = null;
#r = null;
#n = 0;
#o = 0;
#h = null;
#l = null;
#u = 0;
#d = 0;
#f = /* @__PURE__ */ Object.create(null);
#m = [];
#g = null;
#c = [];
#p = /* @__PURE__ */ new WeakMap();
#b = null;
static #A = /* @__PURE__ */ new Map();
static #y = /* @__PURE__ */ new Map();
static #C = /* @__PURE__ */ new WeakMap();
static #S = null;
static #v = /* @__PURE__ */ new Set();
constructor({
textContentSource: t,
container: e,
viewport: s
}) {
if (t instanceof ReadableStream)
this.#g = t;
else if (typeof t == "object")
this.#g = new ReadableStream({
start(o) {
o.enqueue(t), o.close();
}
});
else
throw new Error('No "textContentSource" parameter specified.');
this.#e = this.#l = e, this.#d = s.scale * Rt.pixelRatio, this.#u = s.rotation, this.#r = {
div: null,
properties: null,
ctx: null
};
const {
pageWidth: i,
pageHeight: n,
pageX: r,
pageY: a
} = s.rawDims;
this.#b = [1, 0, 0, -1, -r, a + n], this.#o = i, this.#n = n, dt.#k(), qt(e, s), this.#t.promise.finally(() => {
dt.#v.delete(this), this.#r = null, this.#f = null;
}).catch(() => {
});
}
static get fontFamilyMap() {
const {
isWindows: t,
isFirefox: e
} = ht.platform;
return I(this, "fontFamilyMap", /* @__PURE__ */ new Map([["sans-serif", `${t && e ? "Calibri, " : ""}sans-serif`], ["monospace", `${t && e ? "Lucida Console, " : ""}monospace`]]));
}
render() {
const t = () => {
this.#h.read().then(({
value: e,
done: s
}) => {
if (s) {
this.#t.resolve();
return;
}
this.#a ??= e.lang, Object.assign(this.#f, e.styles), this.#T(e.items), t();
}, this.#t.reject);
};
return this.#h = this.#g.getReader(), dt.#v.add(this), t(), this.#t.promise;
}
update({
viewport: t,
onBefore: e = null
}) {
const s = t.scale * Rt.pixelRatio, i = t.rotation;
if (i !== this.#u && (e?.(), this.#u = i, qt(this.#l, {
rotation: i
})), s !== this.#d) {
e?.(), this.#d = s;
const n = {
div: null,
properties: null,
ctx: dt.#M(this.#a)
};
for (const r of this.#c)
n.properties = this.#p.get(r), n.div = r, this.#E(n);
}
}
cancel() {
const t = new $t("TextLayer task cancelled.");
this.#h?.cancel(t).catch(() => {
}), this.#h = null, this.#t.reject(t);
}
get textDivs() {
return this.#c;
}
get textContentItemsStr() {
return this.#m;
}
#T(t) {
if (this.#i)
return;
this.#r.ctx ??= dt.#M(this.#a);
const e = this.#c, s = this.#m;
for (const i of t) {
if (e.length > vr) {
L("Ignoring additional textDivs for performance reasons."), this.#i = !0;
return;
}
if (i.str === void 0) {
if (i.type === "beginMarkedContentProps" || i.type === "beginMarkedContent") {
const n = this.#e;
this.#e = document.createElement("span"), this.#e.classList.add("markedContent"), i.id && this.#e.setAttribute("id", `${i.id}`), n.append(this.#e);
} else i.type === "endMarkedContent" && (this.#e = this.#e.parentNode);
continue;
}
s.push(i.str), this.#w(i);
}
}
#w(t) {
const e = document.createElement("span"), s = {
angle: 0,
canvasWidth: 0,
hasText: t.str !== "",
hasEOL: t.hasEOL,
fontSize: 0
};
this.#c.push(e);
const i = P.transform(this.#b, t.transform);
let n = Math.atan2(i[1], i[0]);
const r = this.#f[t.fontName];
r.vertical && (n += Math.PI / 2);
let a = this.#s && r.fontSubstitution || r.fontFamily;
a = dt.fontFamilyMap.get(a) || a;
const o = Math.hypot(i[2], i[3]), l = o * dt.#N(a, r, this.#a);
let h, c;
n === 0 ? (h = i[4], c = i[5] - l) : (h = i[4] + l * Math.sin(n), c = i[5] - l * Math.cos(n));
const u = "calc(var(--total-scale-factor) *", f = e.style;
this.#e === this.#l ? (f.left = `${(100 * h / this.#o).toFixed(2)}%`, f.top = `${(100 * c / this.#n).toFixed(2)}%`) : (f.left = `${u}${h.toFixed(2)}px)`, f.top = `${u}${c.toFixed(2)}px)`), f.fontSize = `${u}${(dt.#S * o).toFixed(2)}px)`, f.fontFamily = a, s.fontSize = o, e.setAttribute("role", "presentation"), e.textContent = t.str, e.dir = t.dir, this.#s && (e.dataset.fontName = r.fontSubstitutionLoadedName || t.fontName), n !== 0 && (s.angle = n * (180 / Math.PI));
let g = !1;
if (t.str.length > 1)
g = !0;
else if (t.str !== " " && t.transform[0] !== t.transform[3]) {
const p = Math.abs(t.transform[0]), b = Math.abs(t.transform[3]);
p !== b && Math.max(p, b) / Math.min(p, b) > 1.5 && (g = !0);
}
if (g && (s.canvasWidth = r.vertical ? t.height : t.width), this.#p.set(e, s), this.#r.div = e, this.#r.properties = s, this.#E(this.#r), s.hasText && this.#e.append(e), s.hasEOL) {
const p = document.createElement("br");
p.setAttribute("role", "presentation"), this.#e.append(p);
}
}
#E(t) {
const {
div: e,
properties: s,
ctx: i
} = t, {
style: n
} = e;
let r = "";
if (dt.#S > 1 && (r = `scale(${1 / dt.#S})`), s.canvasWidth !== 0 && s.hasText) {
const {
fontFamily: a
} = n, {
canvasWidth: o,
fontSize: l
} = s;
dt.#P(i, l * this.#d, a);
const {
width: h
} = i.measureText(e.textContent);
h > 0 && (r = `scaleX(${o * this.#d / h}) ${r}`);
}
s.angle !== 0 && (r = `rotate(${s.angle}deg) ${r}`), r.length > 0 && (n.transform = r);
}
static cleanup() {
if (!(this.#v.size > 0)) {
this.#A.clear();
for (const {
canvas: t
} of this.#y.values())
t.remove();
this.#y.clear();
}
}
static #M(t = null) {
let e = this.#y.get(t ||= "");
if (!e) {
const s = document.createElement("canvas");
s.className = "hiddenCanvasElement", s.lang = t, document.body.append(s), e = s.getContext("2d", {
alpha: !1,
willReadFrequently: !0
}), this.#y.set(t, e), this.#C.set(e, {
size: 0,
family: ""
});
}
return e;
}
static #P(t, e, s) {
const i = this.#C.get(t);
e === i.size && s === i.family || (t.font = `${e}px ${s}`, i.size = e, i.family = s);
}
static #k() {
if (this.#S !== null)
return;
const t = document.createElement("div");
t.style.opacity = 0, t.style.lineHeight = 1, t.style.fontSize = "1px", t.style.position = "absolute", t.textContent = "X", document.body.append(t), this.#S = t.getBoundingClientRect().height, t.remove();
}
static #N(t, e, s) {
const i = this.#A.get(t);
if (i)
return i;
const n = this.#M(s);
n.canvas.width = n.canvas.height = mi, this.#P(n, mi, t);
const r = n.measureText(""), a = r.fontBoundingBoxAscent, o = Math.abs(r.fontBoundingBoxDescent);
n.canvas.width = n.canvas.height = 0;
let l = 0.8;
return a ? l = a / (a + o) : (ht.platform.isFirefox && L("Enable the `dom.textMetrics.fontBoundingBox.enabled` preference in `about:config` to improve TextLayer rendering."), e.ascent ? l = e.ascent : e.descent && (l = 1 + e.descent)), this.#A.set(t, l), l;
}
}
const _r = 100;
function Sr(d = {}) {
typeof d == "string" || d instanceof URL ? d = {
url: d
} : (d instanceof ArrayBuffer || ArrayBuffer.isView(d)) && (d = {
data: d
});
const t = new Ns(), {
docId: e
} = t, s = d.url ? kn(d.url) : null, i = d.data ? Mn(d.data) : null, n = d.httpHeaders || null, r = d.withCredentials === !0, a = d.password ?? null, o = d.range instanceof zi ? d.range : null, l = Number.isInteger(d.rangeChunkSize) && d.rangeChunkSize > 0 ? d.rangeChunkSize : 2 ** 16;
let h = d.worker instanceof Ce ? d.worker : null;
const c = d.verbosity, u = typeof d.docBaseUrl == "string" && !Ze(d.docBaseUrl) ? d.docBaseUrl : null, f = Fe(d.cMapUrl), g = d.cMapPacked !== !1, p = d.CMapReaderFactory || (ut ? Bn : si), b = Fe(d.iccUrl), m = Fe(d.standardFontDataUrl), A = d.StandardFontDataFactory || (ut ? Un : ii), y = Fe(d.wasmUrl), _ = d.WasmFactory || (ut ? Hn : ni), w = d.stopAtErrors !== !0, v = Number.isInteger(d.maxImageSize) && d.maxImageSize > -1 ? d.maxImageSize : -1, S = d.isEvalSupported !== !1, E = typeof d.isOffscreenCanvasSupported == "boolean" ? d.isOffscreenCanvasSupported : !ut, C = typeof d.isImageDecoderSupported == "boolean" ? d.isImageDecoderSupported : !ut && (ht.platform.isFirefox || !globalThis.chrome), k = Number.isInteger(d.canvasMaxAreaInBytes) ? d.canvasMaxAreaInBytes : -1, T = typeof d.disableFontFace == "boolean" ? d.disableFontFace : ut, $ = d.fontExtraProperties === !0, z = d.enableXfa === !0, j = d.ownerDocument || globalThis.document, W = d.disableRange === !0, R = d.disableStream === !0, D = d.disableAutoFetch === !0, B = d.pdfBug === !0, ct = d.CanvasFactory || (ut ? Nn : In), Dt = d.FilterFactory || (ut ? On : Fn), Ot = d.enableHWA === !0, it = d.useWasm !== !1, Y = o ? o.length : d.length ?? NaN, jt = typeof d.useSystemFonts == "boolean" ? d.useSystemFonts : !ut && !T, Nt = typeof d.useWorkerFetch == "boolean" ? d.useWorkerFetch : !!(p === si && A === ii && _ === ni && f && m && y && be(f, document.baseURI) && be(m, document.baseURI) && be(y, document.baseURI)), Bt = null;
sn(c);
const tt = {
canvasFactory: new ct({
ownerDocument: j,
enableHWA: Ot
}),
filterFactory: new Dt({
docId: e,
ownerDocument: j
}),
cMapReaderFactory: Nt ? null : new p({
baseUrl: f,
isCompressed: g
}),
standardFontDataFactory: Nt ? null : new A({
baseUrl: m
}),
wasmFactory: Nt ? null : new _({
baseUrl: y
})
};
h || (h = Ce.create({
verbosity: c,
port: ve.workerPort
}), t._worker = h);
const ce = {
docId: e,
apiVersion: "5.4.449",
data: i,
password: a,
disableAutoFetch: D,
rangeChunkSize: l,
length: Y,
docBaseUrl: u,
enableXfa: z,
evaluatorOptions: {
maxImageSize: v,
disableFontFace: T,
ignoreErrors: w,
isEvalSupported: S,
isOffscreenCanvasSupported: E,
isImageDecoderSupported: C,
canvasMaxAreaInBytes: k,
fontExtraProperties: $,
useSystemFonts: jt,
useWasm: it,
useWorkerFetch: Nt,
cMapUrl: f,
iccUrl: b,
standardFontDataUrl: m,
wasmUrl: y
}
}, de = {
ownerDocument: j,
pdfBug: B,
styleElement: Bt,
loadingParams: {
disableAutoFetch: D,
enableXfa: z
}
};
return h.promise.then(function() {
if (t.destroyed)
throw new Error("Loading aborted");
if (h.destroyed)
throw new Error("Worker was destroyed");
const Ji = h.messageHandler.sendWithPromise("GetDocRequest", ce, i ? [i.buffer] : null);
let is;
if (o)
is = new nr(o, {
disableRange: W,
disableStream: R
});
else if (!i) {
if (!s)
throw new Error("getDocument - no `url` parameter provided.");
const ns = be(s) ? lr : ut ? yr : fr;
is = new ns({
url: s,
length: Y,
httpHeaders: n,
withCredentials: r,
rangeChunkSize: l,
disableRange: W,
disableStream: R
});
}
return Ji.then((ns) => {
if (t.destroyed)
throw new Error("Loading aborted");
if (h.destroyed)
throw new Error("Worker was destroyed");
const Gs = new ye(e, ns, h.port), Zi = new xr(Gs, t, is, de, tt, Ot);
t._transport = Zi, Gs.send("Ready", null);
});
}).catch(t._capability.reject), t;
}
class Ns {
static #t = 0;
_capability = Promise.withResolvers();
_transport = null;
_worker = null;
docId = `d${Ns.#t++}`;
destroyed = !1;
onPassword = null;
onProgress = null;
get promise() {
return this._capability.promise;
}
async destroy() {
this.destroyed = !0;
try {
this._worker?.port && (this._worker._pendingDestroy = !0), await this._transport?.destroy();
} catch (t) {
throw this._worker?.port && delete this._worker._pendingDestroy, t;
}
this._transport = null, this._worker?.destroy(), this._worker = null;
}
async getData() {
return this._transport.getData();
}
}
class zi {
#t = Promise.withResolvers();
#e = [];
#i = [];
#s = [];
#a = [];
constructor(t, e, s = !1, i = null) {
this.length = t, this.initialData = e, this.progressiveDone = s, this.contentDispositionFilename = i;
}
addRangeListener(t) {
this.#a.push(t);
}
addProgressListener(t) {
this.#s.push(t);
}
addProgressiveReadListener(t) {
this.#i.push(t);
}
addProgressiveDoneListener(t) {
this.#e.push(t);
}
onDataRange(t, e) {
for (const s of this.#a)
s(t, e);
}
onDataProgress(t, e) {
this.#t.promise.then(() => {
for (const s of this.#s)
s(t, e);
});
}
onDataProgressiveRead(t) {
this.#t.promise.then(() => {
for (const e of this.#i)
e(t);
});
}
onDataProgressiveDone() {
this.#t.promise.then(() => {
for (const t of this.#e)
t();
});
}
transportReady() {
this.#t.resolve();
}
requestDataRange(t, e) {
V("Abstract method PDFDataRangeTransport.requestDataRange");
}
abort() {
}
}
class Er {
constructor(t, e) {
this._pdfInfo = t, this._transport = e;
}
get annotationStorage() {
return this._transport.annotationStorage;
}
get canvasFactory() {
return this._transport.canvasFactory;
}
get filterFactory() {
return this._transport.filterFactory;
}
get numPages() {
return this._pdfInfo.numPages;
}
get fingerprints() {
return this._pdfInfo.fingerprints;
}
get isPureXfa() {
return I(this, "isPureXfa", !!this._transport._htmlForXfa);
}
get allXfaHtml() {
return this._transport._htmlForXfa;
}
getPage(t) {
return this._transport.getPage(t);
}
getPageIndex(t) {
return this._transport.getPageIndex(t);
}
getDestinations() {
return this._transport.getDestinations();
}
getDestination(t) {
return this._transport.getDestination(t);
}
getPageLabels() {
return this._transport.getPageLabels();
}
getPageLayout() {
return this._transport.getPageLayout();
}
getPageMode() {
return this._transport.getPageMode();
}
getViewerPreferences() {
return this._transport.getViewerPreferences();
}
getOpenAction() {
return this._transport.getOpenAction();
}
getAttachments() {
return this._transport.getAttachments();
}
getAnnotationsByType(t, e) {
return this._transport.getAnnotationsByType(t, e);
}
getJSActions() {
return this._transport.getDocJSActions();
}
getOutline() {
return this._transport.getOutline();
}
getOptionalContentConfig({
intent: t = "display"
} = {}) {
const {
renderingIntent: e
} = this._transport.getRenderingIntent(t);
return this._transport.getOptionalContentConfig(e);
}
getPermissions() {
return this._transport.getPermissions();
}
getMetadata() {
return this._transport.getMetadata();
}
getMarkInfo() {
return this._transport.getMarkInfo();
}
getData() {
return this._transport.getData();
}
saveDocument() {
return this._transport.saveDocument();
}
extractPages(t) {
return this._transport.extractPages(t);
}
getDownloadInfo() {
return this._transport.downloadInfoCapability.promise;
}
cleanup(t = !1) {
return this._transport.startCleanup(t || this.isPureXfa);
}
destroy() {
return this.loadingTask.destroy();
}
cachedPageNumber(t) {
return this._transport.cachedPageNumber(t);
}
get loadingParams() {
return this._transport.loadingParams;
}
get loadingTask() {
return this._transport.loadingTask;
}
getFieldObjects() {
return this._transport.getFieldObjects();
}
hasJSActions() {
return this._transport.hasJSActions();
}
getCalculationOrderIds() {
return this._transport.getCalculationOrderIds();
}
}
class Cr {
#t = !1;
constructor(t, e, s, i = !1) {
this._pageIndex = t, this._pageInfo = e, this._transport = s, this._stats = i ? new Ys() : null, this._pdfBug = i, this.commonObjs = s.commonObjs, this.objs = new $i(), this._intentStates = /* @__PURE__ */ new Map(), this.destroyed = !1, this.recordedBBoxes = null;
}
get pageNumber() {
return this._pageIndex + 1;
}
get rotate() {
return this._pageInfo.rotate;
}
get ref() {
return this._pageInfo.ref;
}
get userUnit() {
return this._pageInfo.userUnit;
}
get view() {
return this._pageInfo.view;
}
getViewport({
scale: t,
rotation: e = this.rotate,
offsetX: s = 0,
offsetY: i = 0,
dontFlip: n = !1
} = {}) {
return new ke({
viewBox: this.view,
userUnit: this.userUnit,
scale: t,
rotation: e,
offsetX: s,
offsetY: i,
dontFlip: n
});
}
getAnnotations({
intent: t = "display"
} = {}) {
const {
renderingIntent: e
} = this._transport.getRenderingIntent(t);
return this._transport.getAnnotations(this._pageIndex, e);
}
getJSActions() {
return this._transport.getPageJSActions(this._pageIndex);
}
get filterFactory() {
return this._transport.filterFactory;
}
get isPureXfa() {
return I(this, "isPureXfa", !!this._transport._htmlForXfa);
}
async getXfa() {
return this._transport._htmlForXfa?.children[this._pageIndex] || null;
}
render({
canvasContext: t,
canvas: e = t.canvas,
viewport: s,
intent: i = "display",
annotationMode: n = Ut.ENABLE,
transform: r = null,
background: a = null,
optionalContentConfigPromise: o = null,
annotationCanvasMap: l = null,
pageColors: h = null,
printAnnotationStorage: c = null,
isEditing: u = !1,
recordOperations: f = !1,
operationsFilter: g = null
}) {
this._stats?.time("Overall");
const p = this._transport.getRenderingIntent(i, n, c, u), {
renderingIntent: b,
cacheKey: m
} = p;
this.#t = !1, o ||= this._transport.getOptionalContentConfig(b);
let A = this._intentStates.get(m);
A || (A = /* @__PURE__ */ Object.create(null), this._intentStates.set(m, A)), A.streamReaderCancelTimeout && (clearTimeout(A.streamReaderCancelTimeout), A.streamReaderCancelTimeout = null);
const y = !!(b & yt.PRINT);
A.displayReadyCapability || (A.displayReadyCapability = Promise.withResolvers(), A.operatorList = {
fnArray: [],
argsArray: [],
lastChunk: !1,
separateAnnots: null
}, this._stats?.time("Page Request"), this._pumpOperatorList(p));
const _ = !!(this._pdfBug && globalThis.StepperManager?.enabled), w = !this.recordedBBoxes && (f || _), v = (C) => {
if (A.renderTasks.delete(S), w) {
const k = S.gfx?.dependencyTracker.take();
k && (S.stepper && S.stepper.setOperatorBBoxes(k, S.gfx.dependencyTracker.takeDebugMetadata()), f && (this.recordedBBoxes = k));
}
y && (this.#t = !0), this.#e(), C ? (S.capability.reject(C), this._abortOperatorList({
intentState: A,
reason: C instanceof Error ? C : new Error(C)
})) : S.capability.resolve(), this._stats && (this._stats.timeEnd("Rendering"), this._stats.timeEnd("Overall"), globalThis.Stats?.enabled && globalThis.Stats.add(this.pageNumber, this._stats));
}, S = new ne({
callback: v,
params: {
canvas: e,
canvasContext: t,
dependencyTracker: w ? new zn(e, A.operatorList.length, _) : null,
viewport: s,
transform: r,
background: a
},
objs: this.objs,
commonObjs: this.commonObjs,
annotationCanvasMap: l,
operatorList: A.operatorList,
pageIndex: this._pageIndex,
canvasFactory: this._transport.canvasFactory,
filterFactory: this._transport.filterFactory,
useRequestAnimationFrame: !y,
pdfBug: this._pdfBug,
pageColors: h,
enableHWA: this._transport.enableHWA,
operationsFilter: g
});
(A.renderTasks ||= /* @__PURE__ */ new Set()).add(S);
const E = S.task;
return Promise.all([A.displayReadyCapability.promise, o]).then(([C, k]) => {
if (this.destroyed) {
v();
return;
}
if (this._stats?.time("Rendering"), !(k.renderingIntent & b))
throw new Error("Must use the same `intent`-argument when calling the `PDFPageProxy.render` and `PDFDocumentProxy.getOptionalContentConfig` methods.");
S.initializeGraphics({
transparency: C,
optionalContentConfig: k
}), S.operatorListChanged();
}).catch(v), E;
}
getOperatorList({
intent: t = "display",
annotationMode: e = Ut.ENABLE,
printAnnotationStorage: s = null,
isEditing: i = !1
} = {}) {
function n() {
a.operatorList.lastChunk && (a.opListReadCapability.resolve(a.operatorList), a.renderTasks.delete(o));
}
const r = this._transport.getRenderingIntent(t, e, s, i, !0);
let a = this._intentStates.get(r.cacheKey);
a || (a = /* @__PURE__ */ Object.create(null), this._intentStates.set(r.cacheKey, a));
let o;
return a.opListReadCapability || (o = /* @__PURE__ */ Object.create(null), o.operatorListChanged = n, a.opListReadCapability = Promise.withResolvers(), (a.renderTasks ||= /* @__PURE__ */ new Set()).add(o), a.operatorList = {
fnArray: [],
argsArray: [],
lastChunk: !1,
separateAnnots: null
}, this._stats?.time("Page Request"), this._pumpOperatorList(r)), a.opListReadCapability.promise;
}
streamTextContent({
includeMarkedContent: t = !1,
disableNormalization: e = !1
} = {}) {
return this._transport.messageHandler.sendWithStream("GetTextContent", {
pageIndex: this._pageIndex,
includeMarkedContent: t === !0,
disableNormalization: e === !0
}, {
highWaterMark: 100,
size(i) {
return i.items.length;
}
});
}
getTextContent(t = {}) {
if (this._transport._htmlForXfa)
return this.getXfa().then((s) => Ee.textContent(s));
const e = this.streamTextContent(t);
return new Promise(function(s, i) {
function n() {
r.read().then(function({
value: o,
done: l
}) {
if (l) {
s(a);
return;
}
a.lang ??= o.lang, Object.assign(a.styles, o.styles), a.items.push(...o.items), n();
}, i);
}
const r = e.getReader(), a = {
items: [],
styles: /* @__PURE__ */ Object.create(null),
lang: null
};
n();
});
}
getStructTree() {
return this._transport.getStructTree(this._pageIndex);
}
_destroy() {
this.destroyed = !0;
const t = [];
for (const e of this._intentStates.values())
if (this._abortOperatorList({
intentState: e,
reason: new Error("Page was destroyed."),
force: !0
}), !e.opListReadCapability)
for (const s of e.renderTasks)
t.push(s.completed), s.cancel();
return this.objs.clear(), this.#t = !1, Promise.all(t);
}
cleanup(t = !1) {
this.#t = !0;
const e = this.#e();
return t && e && (this._stats &&= new Ys()), e;
}
#e() {
if (!this.#t || this.destroyed)
return !1;
for (const {
renderTasks: t,
operatorList: e
} of this._intentStates.values())
if (t.size > 0 || !e.lastChunk)
return !1;
return this._intentStates.clear(), this.objs.clear(), this.#t = !1, !0;
}
_startRenderPage(t, e) {
const s = this._intentStates.get(e);
s && (this._stats?.timeEnd("Page Request"), s.displayReadyCapability?.resolve(t));
}
_renderPageChunk(t, e) {
for (let s = 0, i = t.length; s < i; s++)
e.operatorList.fnArray.push(t.fnArray[s]), e.operatorList.argsArray.push(t.argsArray[s]);
e.operatorList.lastChunk = t.lastChunk, e.operatorList.separateAnnots = t.separateAnnots;
for (const s of e.renderTasks)
s.operatorListChanged();
t.lastChunk && this.#e();
}
_pumpOperatorList({
renderingIntent: t,
cacheKey: e,
annotationStorageSerializable: s,
modifiedIds: i
}) {
const {
map: n,
transfer: r
} = s, o = this._transport.messageHandler.sendWithStream("GetOperatorList", {
pageIndex: this._pageIndex,
intent: t,
cacheKey: e,
annotationStorage: n,
modifiedIds: i
}, r).getReader(), l = this._intentStates.get(e);
l.streamReader = o;
const h = () => {
o.read().then(({
value: c,
done: u
}) => {
if (u) {
l.streamReader = null;
return;
}
this._transport.destroyed || (this._renderPageChunk(c, l), h());
}, (c) => {
if (l.streamReader = null, !this._transport.destroyed) {
if (l.operatorList) {
l.operatorList.lastChunk = !0;
for (const u of l.renderTasks)
u.operatorListChanged();
this.#e();
}
if (l.displayReadyCapability)
l.displayReadyCapability.reject(c);
else if (l.opListReadCapability)
l.opListReadCapability.reject(c);
else
throw c;
}
});
};
h();
}
_abortOperatorList({
intentState: t,
reason: e,
force: s = !1
}) {
if (t.streamReader) {
if (t.streamReaderCancelTimeout && (clearTimeout(t.streamReaderCancelTimeout), t.streamReaderCancelTimeout = null), !s) {
if (t.renderTasks.size > 0)
return;
if (e instanceof ks) {
let i = _r;
e.extraDelay > 0 && e.extraDelay < 1e3 && (i += e.extraDelay), t.streamReaderCancelTimeout = setTimeout(() => {
t.streamReaderCancelTimeout = null, this._abortOperatorList({
intentState: t,
reason: e,
force: !0
});
}, i);
return;
}
}
if (t.streamReader.cancel(new $t(e.message)).catch(() => {
}), t.streamReader = null, !this._transport.destroyed) {
for (const [i, n] of this._intentStates)
if (n === t) {
this._intentStates.delete(i);
break;
}
this.cleanup();
}
}
}
get stats() {
return this._stats;
}
}
var Ht, Et, Ft, Vt, Ye, Wt, Xt, pt, Ge, ji, Gi, Ae, le, Ve;
const q = class q {
constructor({
name: t = null,
port: e = null,
verbosity: s = nn()
} = {}) {
Ct(this, pt);
Ct(this, Ht, Promise.withResolvers());
Ct(this, Et, null);
Ct(this, Ft, null);
Ct(this, Vt, null);
if (this.name = t, this.destroyed = !1, this.verbosity = s, e) {
if (X(q, Xt).has(e))
throw new Error("Cannot use more than one PDFWorker per port.");
X(q, Xt).set(e, this), xt(this, pt, ji).call(this, e);
} else
xt(this, pt, Gi).call(this);
}
get promise() {
return X(this, Ht).promise;
}
get port() {
return X(this, Ft);
}
get messageHandler() {
return X(this, Et);
}
destroy() {
this.destroyed = !0, X(this, Vt)?.terminate(), gt(this, Vt, null), X(q, Xt).delete(X(this, Ft)), gt(this, Ft, null), X(this, Et)?.destroy(), gt(this, Et, null);
}
static create(t) {
const e = X(this, Xt).get(t?.port);
if (e) {
if (e._pendingDestroy)
throw new Error("PDFWorker.create - the worker is being destroyed.\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls.");
return e;
}
return new q(t);
}
static get workerSrc() {
if (ve.workerSrc)
return ve.workerSrc;
throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
}
static get _setupFakeWorkerGlobal() {
return I(this, "_setupFakeWorkerGlobal", (async () => X(this, le, Ve) ? X(this, le, Ve) : (await import(
/*webpackIgnore: true*/
/*@vite-ignore*/
this.workerSrc
)).WorkerMessageHandler)());
}
};
Ht = new WeakMap(), Et = new WeakMap(), Ft = new WeakMap(), Vt = new WeakMap(), Ye = new WeakMap(), Wt = new WeakMap(), Xt = new WeakMap(), pt = new WeakSet(), Ge = function() {
X(this, Ht).resolve(), X(this, Et).send("configure", {
verbosity: this.verbosity
});
}, ji = function(t) {
gt(this, Ft, t), gt(this, Et, new ye("main", "worker", t)), X(this, Et).on("ready", () => {
}), xt(this, pt, Ge).call(this);
}, Gi = function() {
if (X(q, Wt) || X(q, le, Ve)) {
xt(this, pt, Ae).call(this);
return;
}
let {
workerSrc: t
} = q;
try {
q._isSameOrigin(window.location, t) || (t = q._createCDNWrapper(new URL(t, window.location).href));
const e = new Worker(t, {
type: "module"
}), s = new ye("main", "worker", e), i = () => {
n.abort(), s.destroy(), e.terminate(), this.destroyed ? X(this, Ht).reject(new Error("Worker was destroyed")) : xt(this, pt, Ae).call(this);
}, n = new AbortController();
e.addEventListener("error", () => {
X(this, Vt) || i();
}, {
signal: n.signal
}), s.on("test", (a) => {
if (n.abort(), this.destroyed || !a) {
i();
return;
}
gt(this, Et, s), gt(this, Ft, e), gt(this, Vt, e), xt(this, pt, Ge).call(this);
}), s.on("ready", (a) => {
if (n.abort(), this.destroyed) {
i();
return;
}
try {
r();
} catch {
xt(this, pt, Ae).call(this);
}
});
const r = () => {
const a = new Uint8Array();
s.send("test", a, [a.buffer]);
};
r();
return;
} catch {
Je("The worker has been disabled.");
}
xt(this, pt, Ae).call(this);
}, Ae = function() {
X(q, Wt) || (L("Setting up fake worker."), gt(q, Wt, !0)), q._setupFakeWorkerGlobal.then((t) => {
if (this.destroyed) {
X(this, Ht).reject(new Error("Worker was destroyed"));
return;
}
const e = new Ln();
gt(this, Ft, e);
const s = `fake${Ws(q, Ye)._++}`, i = new ye(s + "_worker", s, e);
t.setup(i, e), gt(this, Et, new ye(s, s + "_worker", e)), xt(this, pt, Ge).call(this);
}).catch((t) => {
X(this, Ht).reject(new Error(`Setting up fake worker failed: "${t.message}".`));
});
}, le = new WeakSet(), Ve = function() {
try {
return globalThis.pdfjsWorker?.WorkerMessageHandler || null;
} catch {
return null;
}
}, Ct(q, le), Ct(q, Ye, 0), Ct(q, Wt, !1), Ct(q, Xt, /* @__PURE__ */ new WeakMap()), ut && (gt(q, Wt, !0), ve.workerSrc ||= "./pdf.worker.mjs"), q._isSameOrigin = (t, e) => {
const s = URL.parse(t);
if (!s?.origin || s.origin === "null")
return !1;
const i = new URL(e, s);
return s.origin === i.origin;
}, q._createCDNWrapper = (t) => {
const e = `await import("${t}");`;
return URL.createObjectURL(new Blob([e], {
type: "text/javascript"
}));
}, q.fromPort = (t) => {
if (mn("`PDFWorker.fromPort` - please use `PDFWorker.create` instead."), !t?.port)
throw new Error("PDFWorker.fromPort - invalid method signature.");
return q.create(t);
};
let Ce = q;
class xr {
#t = /* @__PURE__ */ new Map();
#e = /* @__PURE__ */ new Map();
#i = /* @__PURE__ */ new Map();
#s = /* @__PURE__ */ new Map();
#a = null;
constructor(t, e, s, i, n, r) {
this.messageHandler = t, this.loadingTask = e, this.commonObjs = new $i(), this.fontLoader = new Tn({
ownerDocument: i.ownerDocument,
styleElement: i.styleElement
}), this.loadingParams = i.loadingParams, this._params = i, this.canvasFactory = n.canvasFactory, this.filterFactory = n.filterFactory, this.cMapReaderFactory = n.cMapReaderFactory, this.standardFontDataFactory = n.standardFontDataFactory, this.wasmFactory = n.wasmFactory, this.destroyed = !1, this.destroyCapability = null, this._networkStream = s, this._fullReader = null, this._lastProgress = null, this.downloadInfoCapability = Promise.withResolvers(), this.enableHWA = r, this.setupMessageHandler();
}
#r(t, e = null) {
const s = this.#t.get(t);
if (s)
return s;
const i = this.messageHandler.sendWithPromise(t, e);
return this.#t.set(t, i), i;
}
get annotationStorage() {
return I(this, "annotationStorage", new Ls());
}
getRenderingIntent(t, e = Ut.ENABLE, s = null, i = !1, n = !1) {
let r = yt.DISPLAY, a = vs;
switch (t) {
case "any":
r = yt.ANY;
break;
case "display":
break;
case "print":
r = yt.PRINT;
break;
default:
L(`getRenderingIntent - invalid intent: ${t}`);
}
const o = r & yt.PRINT && s instanceof ki ? s : this.annotationStorage;
switch (e) {
case Ut.DISABLE:
r += yt.ANNOTATIONS_DISABLE;
break;
case Ut.ENABLE:
break;
case Ut.ENABLE_FORMS:
r += yt.ANNOTATIONS_FORMS;
break;
case Ut.ENABLE_STORAGE:
r += yt.ANNOTATIONS_STORAGE, a = o.serializable;
break;
default:
L(`getRenderingIntent - invalid annotationMode: ${e}`);
}
i && (r += yt.IS_EDITING), n && (r += yt.OPLIST);
const {
ids: l,
hash: h
} = o.modifiedIds, c = [r, a.hash, h];
return {
renderingIntent: r,
cacheKey: c.join("_"),
annotationStorageSerializable: a,
modifiedIds: l
};
}
destroy() {
if (this.destroyCapability)
return this.destroyCapability.promise;
this.destroyed = !0, this.destroyCapability = Promise.withResolvers(), this.#a?.reject(new Error("Worker was destroyed during onPassword callback"));
const t = [];
for (const s of this.#e.values())
t.push(s._destroy());
this.#e.clear(), this.#i.clear(), this.#s.clear(), this.hasOwnProperty("annotationStorage") && this.annotationStorage.resetModified();
const e = this.messageHandler.sendWithPromise("Terminate", null);
return t.push(e), Promise.all(t).then(() => {
this.commonObjs.clear(), this.fontLoader.clear(), this.#t.clear(), this.filterFactory.destroy(), dt.cleanup(), this._networkStream?.cancelAllRequests(new $t("Worker was terminated.")), this.messageHandler?.destroy(), this.messageHandler = null, this.destroyCapability.resolve();
}, this.destroyCapability.reject), this.destroyCapability.promise;
}
setupMessageHandler() {
const {
messageHandler: t,
loadingTask: e
} = this;
t.on("GetReader", (s, i) => {
N(this._networkStream, "GetReader - no `IPDFStream` instance available."), this._fullReader = this._networkStream.getFullReader(), this._fullReader.onProgress = (n) => {
this._lastProgress = {
loaded: n.loaded,
total: n.total
};
}, i.onPull = () => {
this._fullReader.read().then(function({
value: n,
done: r
}) {
if (r) {
i.close();
return;
}
N(n instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."), i.enqueue(new Uint8Array(n), 1, [n]);
}).catch((n) => {
i.error(n);
});
}, i.onCancel = (n) => {
this._fullReader.cancel(n), i.ready.catch((r) => {
if (!this.destroyed)
throw r;
});
};
}), t.on("ReaderHeadersReady", async (s) => {
await this._fullReader.headersReady;
const {
isStreamingSupported: i,
isRangeSupported: n,
contentLength: r
} = this._fullReader;
return (!i || !n) && (this._lastProgress && e.onProgress?.(this._lastProgress), this._fullReader.onProgress = (a) => {
e.onProgress?.({
loaded: a.loaded,
total: a.total
});
}), {
isStreamingSupported: i,
isRangeSupported: n,
contentLength: r
};
}), t.on("GetRangeReader", (s, i) => {
N(this._networkStream, "GetRangeReader - no `IPDFStream` instance available.");
const n = this._networkStream.getRangeReader(s.begin, s.end);
if (!n) {
i.close();
return;
}
i.onPull = () => {
n.read().then(function({
value: r,
done: a
}) {
if (a) {
i.close();
return;
}
N(r instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."), i.enqueue(new Uint8Array(r), 1, [r]);
}).catch((r) => {
i.error(r);
});
}, i.onCancel = (r) => {
n.cancel(r), i.ready.catch((a) => {
if (!this.destroyed)
throw a;
});
};
}), t.on("GetDoc", ({
pdfInfo: s
}) => {
this._numPages = s.numPages, this._htmlForXfa = s.htmlForXfa, delete s.htmlForXfa, e._capability.resolve(new Er(s, this));
}), t.on("DocException", (s) => {
e._capability.reject(mt(s));
}), t.on("PasswordRequest", (s) => {
this.#a = Promise.withResolvers();
try {
if (!e.onPassword)
throw mt(s);
const i = (n) => {
n instanceof Error ? this.#a.reject(n) : this.#a.resolve({
password: n
});
};
e.onPassword(i, s.code);
} catch (i) {
this.#a.reject(i);
}
return this.#a.promise;
}), t.on("DataLoaded", (s) => {
e.onProgress?.({
loaded: s.length,
total: s.length
}), this.downloadInfoCapability.resolve(s);
}), t.on("StartRenderPage", (s) => {
if (this.destroyed)
return;
this.#e.get(s.pageIndex)._startRenderPage(s.transparency, s.cacheKey);
}), t.on("commonobj", ([s, i, n]) => {
if (this.destroyed || this.commonObjs.has(s))
return null;
switch (i) {
case "Font":
if ("error" in n) {
const c = n.error;
L(`Error during font loading: ${c}`), this.commonObjs.resolve(s, c);
break;
}
const r = new G(n), a = this._params.pdfBug && globalThis.FontInspector?.enabled ? (c, u) => globalThis.FontInspector.fontAdded(c, u) : null, o = new Pn(r, a, n.extra, n.charProcOperatorList);
this.fontLoader.bind(o).catch(() => t.sendWithPromise("FontFallback", {
id: s
})).finally(() => {
!o.fontExtraProperties && o.data && o.clearData(), this.commonObjs.resolve(s, o);
});
break;
case "CopyLocalImage":
const {
imageRef: l
} = n;
N(l, "The imageRef must be defined.");
for (const c of this.#e.values())
for (const [, u] of c.objs)
if (u?.ref === l)
return u.dataLen ? (this.commonObjs.resolve(s, structuredClone(u)), u.dataLen) : null;
break;
case "FontPath":
case "Image":
this.commonObjs.resolve(s, n);
break;
case "Pattern":
const h = new nt(n);
this.commonObjs.resolve(s, h.getIR());
break;
default:
throw new Error(`Got unknown common object type ${i}`);
}
return null;
}), t.on("obj", ([s, i, n, r]) => {
if (this.destroyed)
return;
const a = this.#e.get(i);
if (!a.objs.has(s)) {
if (a._intentStates.size === 0) {
r?.bitmap?.close();
return;
}
switch (n) {
case "Image":
case "Pattern":
a.objs.resolve(s, r);
break;
default:
throw new Error(`Got unknown object type ${n}`);
}
}
}), t.on("DocProgress", (s) => {
this.destroyed || e.onProgress?.({
loaded: s.loaded,
total: s.total
});
}), t.on("FetchBinaryData", async (s) => {
if (this.destroyed)
throw new Error("Worker was destroyed.");
const i = this[s.type];
if (!i)
throw new Error(`${s.type} not initialized, see the \`useWorkerFetch\` parameter.`);
return i.fetch(s);
});
}
getData() {
return this.messageHandler.sendWithPromise("GetData", null);
}
saveDocument() {
this.annotationStorage.size <= 0 && L("saveDocument called while `annotationStorage` is empty, please use the getData-method instead.");
const {
map: t,
transfer: e
} = this.annotationStorage.serializable;
return this.messageHandler.sendWithPromise("SaveDocument", {
isPureXfa: !!this._htmlForXfa,
numPages: this._numPages,
annotationStorage: t,
filename: this._fullReader?.filename ?? null
}, e).finally(() => {
this.annotationStorage.resetModified();
});
}
extractPages(t) {
return this.messageHandler.sendWithPromise("ExtractPages", {
pageInfos: t
});
}
getPage(t) {
if (!Number.isInteger(t) || t <= 0 || t > this._numPages)
return Promise.reject(new Error("Invalid page request."));
const e = t - 1, s = this.#i.get(e);
if (s)
return s;
const i = this.messageHandler.sendWithPromise("GetPage", {
pageIndex: e
}).then((n) => {
if (this.destroyed)
throw new Error("Transport destroyed");
n.refStr && this.#s.set(n.refStr, t);
const r = new Cr(e, n, this, this._params.pdfBug);
return this.#e.set(e, r), r;
});
return this.#i.set(e, i), i;
}
getPageIndex(t) {
return _s(t) ? this.messageHandler.sendWithPromise("GetPageIndex", {
num: t.num,
gen: t.gen
}) : Promise.reject(new Error("Invalid pageIndex request."));
}
getAnnotations(t, e) {
return this.messageHandler.sendWithPromise("GetAnnotations", {
pageIndex: t,
intent: e
});
}
getFieldObjects() {
return this.#r("GetFieldObjects");
}
hasJSActions() {
return this.#r("HasJSActions");
}
getCalculationOrderIds() {
return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null);
}
getDestinations() {
return this.messageHandler.sendWithPromise("GetDestinations", null);
}
getDestination(t) {
return typeof t != "string" ? Promise.reject(new Error("Invalid destination request.")) : this.messageHandler.sendWithPromise("GetDestination", {
id: t
});
}
getPageLabels() {
return this.messageHandler.sendWithPromise("GetPageLabels", null);
}
getPageLayout() {
return this.messageHandler.sendWithPromise("GetPageLayout", null);
}
getPageMode() {
return this.messageHandler.sendWithPromise("GetPageMode", null);
}
getViewerPreferences() {
return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
}
getOpenAction() {
return this.messageHandler.sendWithPromise("GetOpenAction", null);
}
getAttachments() {
return this.messageHandler.sendWithPromise("GetAttachments", null);
}
getAnnotationsByType(t, e) {
return this.messageHandler.sendWithPromise("GetAnnotationsByType", {
types: t,
pageIndexesToSkip: e
});
}
getDocJSActions() {
return this.#r("GetDocJSActions");
}
getPageJSActions(t) {
return this.messageHandler.sendWithPromise("GetPageJSActions", {
pageIndex: t
});
}
getStructTree(t) {
return this.messageHandler.sendWithPromise("GetStructTree", {
pageIndex: t
});
}
getOutline() {
return this.messageHandler.sendWithPromise("GetOutline", null);
}
getOptionalContentConfig(t) {
return this.#r("GetOptionalContentConfig").then((e) => new ir(e, t));
}
getPermissions() {
return this.messageHandler.sendWithPromise("GetPermissions", null);
}
getMetadata() {
const t = "GetMetadata", e = this.#t.get(t);
if (e)
return e;
const s = this.messageHandler.sendWithPromise(t, null).then((i) => ({
info: i[0],
metadata: i[1] ? new er(i[1]) : null,
contentDispositionFilename: this._fullReader?.filename ?? null,
contentLength: this._fullReader?.contentLength ?? null,
hasStructTree: i[2]
}));
return this.#t.set(t, s), s;
}
getMarkInfo() {
return this.messageHandler.sendWithPromise("GetMarkInfo", null);
}
async startCleanup(t = !1) {
if (!this.destroyed) {
await this.messageHandler.sendWithPromise("Cleanup", null);
for (const e of this.#e.values())
if (!e.cleanup())
throw new Error(`startCleanup: Page ${e.pageNumber} is currently rendering.`);
this.commonObjs.clear(), t || this.fontLoader.clear(), this.#t.clear(), this.filterFactory.destroy(!0), dt.cleanup();
}
}
cachedPageNumber(t) {
if (!_s(t))
return null;
const e = t.gen === 0 ? `${t.num}R` : `${t.num}R${t.gen}`;
return this.#s.get(e) ?? null;
}
}
class Tr {
#t = null;
onContinue = null;
onError = null;
constructor(t) {
this.#t = t;
}
get promise() {
return this.#t.capability.promise;
}
cancel(t = 0) {
this.#t.cancel(null, t);
}
get separateAnnots() {
const {
separateAnnots: t
} = this.#t.operatorList;
if (!t)
return !1;
const {
annotationCanvasMap: e
} = this.#t;
return t.form || t.canvas && e?.size > 0;
}
}
class ne {
#t = null;
static #e = /* @__PURE__ */ new WeakSet();
constructor({
callback: t,
params: e,
objs: s,
commonObjs: i,
annotationCanvasMap: n,
operatorList: r,
pageIndex: a,
canvasFactory: o,
filterFactory: l,
useRequestAnimationFrame: h = !1,
pdfBug: c = !1,
pageColors: u = null,
enableHWA: f = !1,
operationsFilter: g = null
}) {
this.callback = t, this.params = e, this.objs = s, this.commonObjs = i, this.annotationCanvasMap = n, this.operatorListIdx = null, this.operatorList = r, this._pageIndex = a, this.canvasFactory = o, this.filterFactory = l, this._pdfBug = c, this.pageColors = u, this.running = !1, this.graphicsReadyCallback = null, this.graphicsReady = !1, this._useRequestAnimationFrame = h === !0 && typeof window < "u", this.cancelled = !1, this.capability = Promise.withResolvers(), this.task = new Tr(this), this._cancelBound = this.cancel.bind(this), this._continueBound = this._continue.bind(this), this._scheduleNextBound = this._scheduleNext.bind(this), this._nextBound = this._next.bind(this), this._canvas = e.canvas, this._canvasContext = e.canvas ? null : e.canvasContext, this._enableHWA = f, this._dependencyTracker = e.dependencyTracker, this._operationsFilter = g;
}
get completed() {
return this.capability.promise.catch(function() {
});
}
initializeGraphics({
transparency: t = !1,
optionalContentConfig: e
}) {
if (this.cancelled)
return;
if (this._canvas) {
if (ne.#e.has(this._canvas))
throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.");
ne.#e.add(this._canvas);
}
this._pdfBug && globalThis.StepperManager?.enabled && (this.stepper = globalThis.StepperManager.create(this._pageIndex), this.stepper.init(this.operatorList), this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint());
const {
viewport: s,
transform: i,
background: n,
dependencyTracker: r
} = this.params, a = this._canvasContext || this._canvas.getContext("2d", {
alpha: !1,
willReadFrequently: !this._enableHWA
});
this.gfx = new oe(a, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
optionalContentConfig: e
}, this.annotationCanvasMap, this.pageColors, r), this.gfx.beginDrawing({
transform: i,
viewport: s,
transparency: t,
background: n
}), this.operatorListIdx = 0, this.graphicsReady = !0, this.graphicsReadyCallback?.();
}
cancel(t = null, e = 0) {
this.running = !1, this.cancelled = !0, this.gfx?.endDrawing(), this.#t && (window.cancelAnimationFrame(this.#t), this.#t = null), ne.#e.delete(this._canvas), t ||= new ks(`Rendering cancelled, page ${this._pageIndex + 1}`, e), this.callback(t), this.task.onError?.(t);
}
operatorListChanged() {
if (!this.graphicsReady) {
this.graphicsReadyCallback ||= this._continueBound;
return;
}
this.gfx.dependencyTracker?.growOperationsCount(this.operatorList.fnArray.length), this.stepper?.updateOperatorList(this.operatorList), !this.running && this._continue();
}
_continue() {
this.running = !0, !this.cancelled && (this.task.onContinue ? this.task.onContinue(this._scheduleNextBound) : this._scheduleNext());
}
_scheduleNext() {
this._useRequestAnimationFrame ? this.#t = window.requestAnimationFrame(() => {
this.#t = null, this._nextBound().catch(this._cancelBound);
}) : Promise.resolve().then(this._nextBound).catch(this._cancelBound);
}
async _next() {
this.cancelled || (this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper, this._operationsFilter), this.operatorListIdx === this.operatorList.argsArray.length && (this.running = !1, this.operatorList.lastChunk && (this.gfx.endDrawing(), ne.#e.delete(this._canvas), this.callback())));
}
}
const Pr = "5.4.449", kr = "f44e5f0e6";
class _t {
#t = null;
#e = null;
#i;
#s = null;
#a = !1;
#r = !1;
#n = null;
#o;
#h = null;
#l = null;
static #u = null;
static get _keyboardManager() {
return I(this, "_keyboardManager", new Re([[["Escape", "mac+Escape"], _t.prototype._hideDropdownFromKeyboard], [[" ", "mac+ "], _t.prototype._colorSelectFromKeyboard], [["ArrowDown", "ArrowRight", "mac+ArrowDown", "mac+ArrowRight"], _t.prototype._moveToNext], [["ArrowUp", "ArrowLeft", "mac+ArrowUp", "mac+ArrowLeft"], _t.prototype._moveToPrevious], [["Home", "mac+Home"], _t.prototype._moveToBeginning], [["End", "mac+End"], _t.prototype._moveToEnd]]));
}
constructor({
editor: t = null,
uiManager: e = null
}) {
t ? (this.#r = !1, this.#n = t) : this.#r = !0, this.#l = t?._uiManager || e, this.#o = this.#l._eventBus, this.#i = t?.color?.toUpperCase() || this.#l?.highlightColors.values().next().value || "#FFFF98", _t.#u ||= Object.freeze({
blue: "pdfjs-editor-colorpicker-blue",
green: "pdfjs-editor-colorpicker-green",
pink: "pdfjs-editor-colorpicker-pink",
red: "pdfjs-editor-colorpicker-red",
yellow: "pdfjs-editor-colorpicker-yellow"
});
}
renderButton() {
const t = this.#t = document.createElement("button");
t.className = "colorPicker", t.tabIndex = "0", t.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-button"), t.ariaHasPopup = "true", this.#n && (t.ariaControls = `${this.#n.id}_colorpicker_dropdown`);
const e = this.#l._signal;
t.addEventListener("click", this.#g.bind(this), {
signal: e
}), t.addEventListener("keydown", this.#m.bind(this), {
signal: e
});
const s = this.#e = document.createElement("span");
return s.className = "swatch", s.ariaHidden = "true", s.style.backgroundColor = this.#i, t.append(s), t;
}
renderMainDropdown() {
const t = this.#s = this.#d();
return t.ariaOrientation = "horizontal", t.ariaLabelledBy = "highlightColorPickerLabel", t;
}
#d() {
const t = document.createElement("div"), e = this.#l._signal;
t.addEventListener("contextmenu", St, {
signal: e
}), t.className = "dropdown", t.role = "listbox", t.ariaMultiSelectable = "false", t.ariaOrientation = "vertical", t.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-dropdown"), this.#n && (t.id = `${this.#n.id}_colorpicker_dropdown`);
for (const [s, i] of this.#l.highlightColors) {
const n = document.createElement("button");
n.tabIndex = "0", n.role = "option", n.setAttribute("data-color", i), n.title = s, n.setAttribute("data-l10n-id", _t.#u[s]);
const r = document.createElement("span");
n.append(r), r.className = "swatch", r.style.backgroundColor = i, n.ariaSelected = i === this.#i, n.addEventListener("click", this.#f.bind(this, i), {
signal: e
}), t.append(n);
}
return t.addEventListener("keydown", this.#m.bind(this), {
signal: e
}), t;
}
#f(t, e) {
e.stopPropagation(), this.#o.dispatch("switchannotationeditorparams", {
source: this,
type: O.HIGHLIGHT_COLOR,
value: t
}), this.updateColor(t);
}
_colorSelectFromKeyboard(t) {
if (t.target === this.#t) {
this.#g(t);
return;
}
const e = t.target.getAttribute("data-color");
e && this.#f(e, t);
}
_moveToNext(t) {
if (!this.#p) {
this.#g(t);
return;
}
if (t.target === this.#t) {
this.#s.firstElementChild?.focus();
return;
}
t.target.nextSibling?.focus();
}
_moveToPrevious(t) {
if (t.target === this.#s?.firstElementChild || t.target === this.#t) {
this.#p && this._hideDropdownFromKeyboard();
return;
}
this.#p || this.#g(t), t.target.previousSibling?.focus();
}
_moveToBeginning(t) {
if (!this.#p) {
this.#g(t);
return;
}
this.#s.firstElementChild?.focus();
}
_moveToEnd(t) {
if (!this.#p) {
this.#g(t);
return;
}
this.#s.lastElementChild?.focus();
}
#m(t) {
_t._keyboardManager.exec(this, t);
}
#g(t) {
if (this.#p) {
this.hideDropdown();
return;
}
if (this.#a = t.detail === 0, this.#h || (this.#h = new AbortController(), window.addEventListener("pointerdown", this.#c.bind(this), {
signal: this.#l.combinedSignal(this.#h)
})), this.#t.ariaExpanded = "true", this.#s) {
this.#s.classList.remove("hidden");
return;
}
const e = this.#s = this.#d();
this.#t.append(e);
}
#c(t) {
this.#s?.contains(t.target) || this.hideDropdown();
}
hideDropdown() {
this.#s?.classList.add("hidden"), this.#t.ariaExpanded = "false", this.#h?.abort(), this.#h = null;
}
get #p() {
return this.#s && !this.#s.classList.contains("hidden");
}
_hideDropdownFromKeyboard() {
if (!this.#r) {
if (!this.#p) {
this.#n?.unselect();
return;
}
this.hideDropdown(), this.#t.focus({
preventScroll: !0,
focusVisible: this.#a
});
}
}
updateColor(t) {
if (this.#e && (this.#e.style.backgroundColor = t), !this.#s)
return;
const e = this.#l.highlightColors.values();
for (const s of this.#s.children)
s.ariaSelected = e.next().value === t.toUpperCase();
}
destroy() {
this.#t?.remove(), this.#t = null, this.#e = null, this.#s?.remove(), this.#s = null;
}
}
class xe {
#t = null;
#e = null;
#i = null;
static #s = null;
constructor(t) {
this.#e = t, this.#i = t._uiManager, xe.#s ||= Object.freeze({
freetext: "pdfjs-editor-color-picker-free-text-input",
ink: "pdfjs-editor-color-picker-ink-input"
});
}
renderButton() {
if (this.#t)
return this.#t;
const {
editorType: t,
colorType: e,
color: s
} = this.#e, i = this.#t = document.createElement("input");
return i.type = "color", i.value = s || "#000000", i.className = "basicColorPicker", i.tabIndex = 0, i.setAttribute("data-l10n-id", xe.#s[t]), i.addEventListener("input", () => {
this.#i.updateParams(e, i.value);
}, {
signal: this.#i._signal
}), i;
}
update(t) {
this.#t && (this.#t.value = t);
}
destroy() {
this.#t?.remove(), this.#t = null;
}
hideDropdown() {
}
}
function bi(d) {
return Math.floor(Math.max(0, Math.min(1, d)) * 255).toString(16).padStart(2, "0");
}
function ge(d) {
return Math.max(0, Math.min(255, 255 * d));
}
class yi {
static CMYK_G([t, e, s, i]) {
return ["G", 1 - Math.min(1, 0.3 * t + 0.59 * s + 0.11 * e + i)];
}
static G_CMYK([t]) {
return ["CMYK", 0, 0, 0, 1 - t];
}
static G_RGB([t]) {
return ["RGB", t, t, t];
}
static G_rgb([t]) {
return t = ge(t), [t, t, t];
}
static G_HTML([t]) {
const e = bi(t);
return `#${e}${e}${e}`;
}
static RGB_G([t, e, s]) {
return ["G", 0.3 * t + 0.59 * e + 0.11 * s];
}
static RGB_rgb(t) {
return t.map(ge);
}
static RGB_HTML(t) {
return `#${t.map(bi).join("")}`;
}
static T_HTML() {
return "#00000000";
}
static T_rgb() {
return [null];
}
static CMYK_RGB([t, e, s, i]) {
return ["RGB", 1 - Math.min(1, t + i), 1 - Math.min(1, s + i), 1 - Math.min(1, e + i)];
}
static CMYK_rgb([t, e, s, i]) {
return [ge(1 - Math.min(1, t + i)), ge(1 - Math.min(1, s + i)), ge(1 - Math.min(1, e + i))];
}
static CMYK_HTML(t) {
const e = this.CMYK_RGB(t).slice(1);
return this.RGB_HTML(e);
}
static RGB_CMYK([t, e, s]) {
const i = 1 - t, n = 1 - e, r = 1 - s, a = Math.min(i, n, r);
return ["CMYK", i, n, r, a];
}
}
class Mr {
create(t, e, s = !1) {
if (t <= 0 || e <= 0)
throw new Error("Invalid SVG dimensions");
const i = this._createSVG("svg:svg");
return i.setAttribute("version", "1.1"), s || (i.setAttribute("width", `${t}px`), i.setAttribute("height", `${e}px`)), i.setAttribute("preserveAspectRatio", "none"), i.setAttribute("viewBox", `0 0 ${t} ${e}`), i;
}
createElement(t) {
if (typeof t != "string")
throw new Error("Invalid SVG element type");
return this._createSVG(t);
}
_createSVG(t) {
V("Abstract method `_createSVG` called.");
}
}
class qe extends Mr {
_createSVG(t) {
return document.createElementNS(Lt, t);
}
}
const Rr = 9, Yt = /* @__PURE__ */ new WeakSet(), Dr = (/* @__PURE__ */ new Date()).getTimezoneOffset() * 60 * 1e3;
class ps {
static create(t) {
switch (t.data.annotationType) {
case st.LINK:
return new Bs(t);
case st.TEXT:
return new Ir(t);
case st.WIDGET:
switch (t.data.fieldType) {
case "Tx":
return new Fr(t);
case "Btn":
return t.data.radioButton ? new Vi(t) : t.data.checkBox ? new Nr(t) : new Br(t);
case "Ch":
return new Ur(t);
case "Sig":
return new Or(t);
}
return new Qt(t);
case st.POPUP:
return new Cs(t);
case st.FREETEXT:
return new Wi(t);
case st.LINE:
return new $r(t);
case st.SQUARE:
return new zr(t);
case st.CIRCLE:
return new jr(t);
case st.POLYLINE:
return new Xi(t);
case st.CARET:
return new Vr(t);
case st.INK:
return new Us(t);
case st.POLYGON:
return new Gr(t);
case st.HIGHLIGHT:
return new qi(t);
case st.UNDERLINE:
return new Wr(t);
case st.SQUIGGLY:
return new Xr(t);
case st.STRIKEOUT:
return new qr(t);
case st.STAMP:
return new Yi(t);
case st.FILEATTACHMENT:
return new Yr(t);
default:
return new Q(t);
}
}
}
class Q {
#t = null;
#e = !1;
#i = null;
constructor(t, {
isRenderable: e = !1,
ignoreBorder: s = !1,
createQuadrilaterals: i = !1
} = {}) {
this.isRenderable = e, this.data = t.data, this.layer = t.layer, this.linkService = t.linkService, this.downloadManager = t.downloadManager, this.imageResourcesPath = t.imageResourcesPath, this.renderForms = t.renderForms, this.svgFactory = t.svgFactory, this.annotationStorage = t.annotationStorage, this.enableComment = t.enableComment, this.enableScripting = t.enableScripting, this.hasJSActions = t.hasJSActions, this._fieldObjects = t.fieldObjects, this.parent = t.parent, this.hasOwnCommentButton = !1, e && (this.contentElement = this.container = this._createContainer(s)), i && this._createQuadrilaterals();
}
static _hasPopupData({
contentsObj: t,
richText: e
}) {
return !!(t?.str || e?.str);
}
get _isEditable() {
return this.data.isEditable;
}
get hasPopupData() {
return Q._hasPopupData(this.data) || this.enableComment && !!this.commentText;
}
get commentData() {
const {
data: t
} = this, e = this.annotationStorage?.getEditor(t.id);
return e ? e.getData() : t;
}
get hasCommentButton() {
return this.enableComment && this.hasPopupElement;
}
get commentButtonPosition() {
const t = this.annotationStorage?.getEditor(this.data.id);
if (t)
return t.commentButtonPositionInPage;
const {
quadPoints: e,
inkLists: s,
rect: i
} = this.data;
let n = -1 / 0, r = -1 / 0;
if (e?.length >= 8) {
for (let a = 0; a < e.length; a += 8)
e[a + 1] > r ? (r = e[a + 1], n = e[a + 2]) : e[a + 1] === r && (n = Math.max(n, e[a + 2]));
return [n, r];
}
if (s?.length >= 1) {
for (const a of s)
for (let o = 0, l = a.length; o < l; o += 2)
a[o + 1] > r ? (r = a[o + 1], n = a[o]) : a[o + 1] === r && (n = Math.max(n, a[o]));
if (n !== 1 / 0)
return [n, r];
}
return i ? [i[2], i[3]] : null;
}
_normalizePoint(t) {
const {
page: {
view: e
},
viewport: {
rawDims: {
pageWidth: s,
pageHeight: i,
pageX: n,
pageY: r
}
}
} = this.parent;
return t[1] = e[3] - t[1] + e[1], t[0] = 100 * (t[0] - n) / s, t[1] = 100 * (t[1] - r) / i, t;
}
get commentText() {
const {
data: t
} = this;
return this.annotationStorage.getRawValue(`${_e}${t.id}`)?.popup?.contents || t.contentsObj?.str || "";
}
set commentText(t) {
const {
data: e
} = this, s = {
deleted: !t,
contents: t || ""
};
this.annotationStorage.updateEditor(e.id, {
popup: s
}) || this.annotationStorage.setValue(`${_e}${e.id}`, {
id: e.id,
annotationType: e.annotationType,
pageIndex: this.parent.page._pageIndex,
popup: s,
popupRef: e.popupRef,
modificationDate: /* @__PURE__ */ new Date()
}), t || this.removePopup();
}
removePopup() {
(this.#i?.popup || this.popup)?.remove(), this.#i = this.popup = null;
}
updateEdited(t) {
if (!this.container)
return;
t.rect && (this.#t ||= {
rect: this.data.rect.slice(0)
});
const {
rect: e,
popup: s
} = t;
e && this.#s(e);
let i = this.#i?.popup || this.popup;
!i && s?.text && (this._createPopup(s), i = this.#i.popup), i && (i.updateEdited(t), s?.deleted && (i.remove(), this.#i = null, this.popup = null));
}
resetEdited() {
this.#t && (this.#s(this.#t.rect), this.#i?.popup.resetEdited(), this.#t = null);
}
#s(t) {
const {
container: {
style: e
},
data: {
rect: s,
rotation: i
},
parent: {
viewport: {
rawDims: {
pageWidth: n,
pageHeight: r,
pageX: a,
pageY: o
}
}
}
} = this;
s?.splice(0, 4, ...t), e.left = `${100 * (t[0] - a) / n}%`, e.top = `${100 * (r - t[3] + o) / r}%`, i === 0 ? (e.width = `${100 * (t[2] - t[0]) / n}%`, e.height = `${100 * (t[3] - t[1]) / r}%`) : this.setRotation(i);
}
_createContainer(t) {
const {
data: e,
parent: {
page: s,
viewport: i
}
} = this, n = document.createElement("section");
n.setAttribute("data-annotation-id", e.id), !(this instanceof Qt) && !(this instanceof Bs) && (n.tabIndex = 0);
const {
style: r
} = n;
if (r.zIndex = this.parent.zIndex, this.parent.zIndex += 2, e.alternativeText && (n.title = e.alternativeText), e.noRotate && n.classList.add("norotate"), !e.rect || this instanceof Cs) {
const {
rotation: p
} = e;
return !e.hasOwnCanvas && p !== 0 && this.setRotation(p, n), n;
}
const {
width: a,
height: o
} = this;
if (!t && e.borderStyle.width > 0) {
r.borderWidth = `${e.borderStyle.width}px`;
const p = e.borderStyle.horizontalCornerRadius, b = e.borderStyle.verticalCornerRadius;
if (p > 0 || b > 0) {
const A = `calc(${p}px * var(--total-scale-factor)) / calc(${b}px * var(--total-scale-factor))`;
r.borderRadius = A;
} else if (this instanceof Vi) {
const A = `calc(${a}px * var(--total-scale-factor)) / calc(${o}px * var(--total-scale-factor))`;
r.borderRadius = A;
}
switch (e.borderStyle.style) {
case Zt.SOLID:
r.borderStyle = "solid";
break;
case Zt.DASHED:
r.borderStyle = "dashed";
break;
case Zt.BEVELED:
L("Unimplemented border style: beveled");
break;
case Zt.INSET:
L("Unimplemented border style: inset");
break;
case Zt.UNDERLINE:
r.borderBottomStyle = "solid";
break;
}
const m = e.borderColor || null;
m ? (this.#e = !0, r.borderColor = P.makeHexColor(m[0] | 0, m[1] | 0, m[2] | 0)) : r.borderWidth = 0;
}
const l = P.normalizeRect([e.rect[0], s.view[3] - e.rect[1] + s.view[1], e.rect[2], s.view[3] - e.rect[3] + s.view[1]]), {
pageWidth: h,
pageHeight: c,
pageX: u,
pageY: f
} = i.rawDims;
r.left = `${100 * (l[0] - u) / h}%`, r.top = `${100 * (l[1] - f) / c}%`;
const {
rotation: g
} = e;
return e.hasOwnCanvas || g === 0 ? (r.width = `${100 * a / h}%`, r.height = `${100 * o / c}%`) : this.setRotation(g, n), n;
}
setRotation(t, e = this.container) {
if (!this.data.rect)
return;
const {
pageWidth: s,
pageHeight: i
} = this.parent.viewport.rawDims;
let {
width: n,
height: r
} = this;
t % 180 !== 0 && ([n, r] = [r, n]), e.style.width = `${100 * n / s}%`, e.style.height = `${100 * r / i}%`, e.setAttribute("data-main-rotation", (360 - t) % 360);
}
get _commonActions() {
const t = (e, s, i) => {
const n = i.detail[e], r = n[0], a = n.slice(1);
i.target.style[s] = yi[`${r}_HTML`](a), this.annotationStorage.setValue(this.data.id, {
[s]: yi[`${r}_rgb`](a)
});
};
return I(this, "_commonActions", {
display: (e) => {
const {
display: s
} = e.detail, i = s % 2 === 1;
this.container.style.visibility = i ? "hidden" : "visible", this.annotationStorage.setValue(this.data.id, {
noView: i,
noPrint: s === 1 || s === 2
});
},
print: (e) => {
this.annotationStorage.setValue(this.data.id, {
noPrint: !e.detail.print
});
},
hidden: (e) => {
const {
hidden: s
} = e.detail;
this.container.style.visibility = s ? "hidden" : "visible", this.annotationStorage.setValue(this.data.id, {
noPrint: s,
noView: s
});
},
focus: (e) => {
setTimeout(() => e.target.focus({
preventScroll: !1
}), 0);
},
userName: (e) => {
e.target.title = e.detail.userName;
},
readonly: (e) => {
e.target.disabled = e.detail.readonly;
},
required: (e) => {
this._setRequired(e.target, e.detail.required);
},
bgColor: (e) => {
t("bgColor", "backgroundColor", e);
},
fillColor: (e) => {
t("fillColor", "backgroundColor", e);
},
fgColor: (e) => {
t("fgColor", "color", e);
},
textColor: (e) => {
t("textColor", "color", e);
},
borderColor: (e) => {
t("borderColor", "borderColor", e);
},
strokeColor: (e) => {
t("strokeColor", "borderColor", e);
},
rotation: (e) => {
const s = e.detail.rotation;
this.setRotation(s), this.annotationStorage.setValue(this.data.id, {
rotation: s
});
}
});
}
_dispatchEventFromSandbox(t, e) {
const s = this._commonActions;
for (const i of Object.keys(e.detail))
(t[i] || s[i])?.(e);
}
_setDefaultPropertiesFromJS(t) {
if (!this.enableScripting)
return;
const e = this.annotationStorage.getRawValue(this.data.id);
if (!e)
return;
const s = this._commonActions;
for (const [i, n] of Object.entries(e)) {
const r = s[i];
if (r) {
const a = {
detail: {
[i]: n
},
target: t
};
r(a), delete e[i];
}
}
}
_createQuadrilaterals() {
if (!this.container)
return;
const {
quadPoints: t
} = this.data;
if (!t)
return;
const [e, s, i, n] = this.data.rect.map((p) => Math.fround(p));
if (t.length === 8) {
const [p, b, m, A] = t.subarray(2, 6);
if (i === p && n === b && e === m && s === A)
return;
}
const {
style: r
} = this.container;
let a;
if (this.#e) {
const {
borderColor: p,
borderWidth: b
} = r;
r.borderWidth = 0, a = ["url('data:image/svg+xml;utf8,", '<svg xmlns="http://www.w3.org/2000/svg"', ' preserveAspectRatio="none" viewBox="0 0 1 1">', `<g fill="transparent" stroke="${p}" stroke-width="${b}">`], this.container.classList.add("hasBorder");
}
const o = i - e, l = n - s, {
svgFactory: h
} = this, c = h.createElement("svg");
c.classList.add("quadrilateralsContainer"), c.setAttribute("width", 0), c.setAttribute("height", 0), c.role = "none";
const u = h.createElement("defs");
c.append(u);
const f = h.createElement("clipPath"), g = `clippath_${this.data.id}`;
f.setAttribute("id", g), f.setAttribute("clipPathUnits", "objectBoundingBox"), u.append(f);
for (let p = 2, b = t.length; p < b; p += 8) {
const m = t[p], A = t[p + 1], y = t[p + 2], _ = t[p + 3], w = h.createElement("rect"), v = (y - e) / o, S = (n - A) / l, E = (m - y) / o, C = (A - _) / l;
w.setAttribute("x", v), w.setAttribute("y", S), w.setAttribute("width", E), w.setAttribute("height", C), f.append(w), a?.push(`<rect vector-effect="non-scaling-stroke" x="${v}" y="${S}" width="${E}" height="${C}"/>`);
}
this.#e && (a.push("</g></svg>')"), r.backgroundImage = a.join("")), this.container.append(c), this.container.style.clipPath = `url(#${g})`;
}
_createPopup(t = null) {
const {
data: e
} = this;
let s, i;
t ? (s = {
str: t.text
}, i = t.date) : (s = e.contentsObj, i = e.modificationDate), this.#i = new Cs({
data: {
color: e.color,
titleObj: e.titleObj,
modificationDate: i,
contentsObj: s,
richText: e.richText,
parentRect: e.rect,
borderStyle: 0,
id: `popup_${e.id}`,
rotation: e.rotation,
noRotate: !0
},
linkService: this.linkService,
parent: this.parent,
elements: [this]
});
}
get hasPopupElement() {
return !!(this.#i || this.popup || this.data.popupRef);
}
get extraPopupElement() {
return this.#i;
}
render() {
V("Abstract method `AnnotationElement.render` called");
}
_getElementsByName(t, e = null) {
const s = [];
if (this._fieldObjects) {
const i = this._fieldObjects[t];
if (i)
for (const {
page: n,
id: r,
exportValues: a
} of i) {
if (n === -1 || r === e)
continue;
const o = typeof a == "string" ? a : null, l = document.querySelector(`[data-element-id="${r}"]`);
if (l && !Yt.has(l)) {
L(`_getElementsByName - element not allowed: ${r}`);
continue;
}
s.push({
id: r,
exportValue: o,
domElement: l
});
}
return s;
}
for (const i of document.getElementsByName(t)) {
const {
exportValue: n
} = i, r = i.getAttribute("data-element-id");
r !== e && Yt.has(i) && s.push({
id: r,
exportValue: n,
domElement: i
});
}
return s;
}
show() {
this.container && (this.container.hidden = !1), this.popup?.maybeShow();
}
hide() {
this.container && (this.container.hidden = !0), this.popup?.forceHide();
}
getElementsToTriggerPopup() {
return this.container;
}
addHighlightArea() {
const t = this.getElementsToTriggerPopup();
if (Array.isArray(t))
for (const e of t)
e.classList.add("highlightArea");
else
t.classList.add("highlightArea");
}
_editOnDoubleClick() {
if (!this._isEditable)
return;
const {
annotationEditorType: t,
data: {
id: e
}
} = this;
this.container.addEventListener("dblclick", () => {
this.linkService.eventBus?.dispatch("switchannotationeditormode", {
source: this,
mode: t,
editId: e,
mustEnterInEditMode: !0
});
});
}
get width() {
return this.data.rect[2] - this.data.rect[0];
}
get height() {
return this.data.rect[3] - this.data.rect[1];
}
}
class Lr extends Q {
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0
}), this.editor = t.editor;
}
render() {
return this.container.className = "editorAnnotation", this.container;
}
createOrUpdatePopup() {
const {
editor: t
} = this;
t.hasComment && this._createPopup(t.comment);
}
get hasCommentButton() {
return this.enableComment && this.editor.hasComment;
}
get commentButtonPosition() {
return this.editor.commentButtonPositionInPage;
}
get commentText() {
return this.editor.comment.text;
}
set commentText(t) {
this.editor.comment = t, t || this.removePopup();
}
get commentData() {
return this.editor.getData();
}
remove() {
this.parent.removeAnnotation(this.data.id), this.container.remove(), this.container = null, this.removePopup();
}
}
class Bs extends Q {
constructor(t, e = null) {
super(t, {
isRenderable: !0,
ignoreBorder: !!e?.ignoreBorder,
createQuadrilaterals: !0
}), this.isTooltipOnly = t.data.isTooltipOnly;
}
render() {
const {
data: t,
linkService: e
} = this, s = document.createElement("a");
s.setAttribute("data-element-id", t.id);
let i = !1;
return t.url ? (e.addLinkAttributes(s, t.url, t.newWindow), i = !0) : t.action ? (this._bindNamedAction(s, t.action, t.overlaidText), i = !0) : t.attachment ? (this.#e(s, t.attachment, t.overlaidText, t.attachmentDest), i = !0) : t.setOCGState ? (this.#i(s, t.setOCGState, t.overlaidText), i = !0) : t.dest ? (this._bindLink(s, t.dest, t.overlaidText), i = !0) : (t.actions && (t.actions.Action || t.actions["Mouse Up"] || t.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions && (this._bindJSAction(s, t), i = !0), t.resetForm ? (this._bindResetFormAction(s, t.resetForm), i = !0) : this.isTooltipOnly && !i && (this._bindLink(s, ""), i = !0)), this.container.classList.add("linkAnnotation"), i && (this.contentElement = s, this.container.append(s)), this.container;
}
#t() {
this.container.setAttribute("data-internal-link", "");
}
_bindLink(t, e, s = "") {
t.href = this.linkService.getDestinationHash(e), t.onclick = () => (e && this.linkService.goToDestination(e), !1), (e || e === "") && this.#t(), s && (t.title = s);
}
_bindNamedAction(t, e, s = "") {
t.href = this.linkService.getAnchorUrl(""), t.onclick = () => (this.linkService.executeNamedAction(e), !1), s && (t.title = s), this.#t();
}
#e(t, e, s = "", i = null) {
t.href = this.linkService.getAnchorUrl(""), e.description ? t.title = e.description : s && (t.title = s), t.onclick = () => (this.downloadManager?.openOrDownloadData(e.content, e.filename, i), !1), this.#t();
}
#i(t, e, s = "") {
t.href = this.linkService.getAnchorUrl(""), t.onclick = () => (this.linkService.executeSetOCGState(e), !1), s && (t.title = s), this.#t();
}
_bindJSAction(t, e) {
t.href = this.linkService.getAnchorUrl("");
const s = /* @__PURE__ */ new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]);
for (const i of Object.keys(e.actions)) {
const n = s.get(i);
n && (t[n] = () => (this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: e.id,
name: i
}
}), !1));
}
e.overlaidText && (t.title = e.overlaidText), t.onclick || (t.onclick = () => !1), this.#t();
}
_bindResetFormAction(t, e) {
const s = t.onclick;
if (s || (t.href = this.linkService.getAnchorUrl("")), this.#t(), !this._fieldObjects) {
L('_bindResetFormAction - "resetForm" action not supported, ensure that the `fieldObjects` parameter is provided.'), s || (t.onclick = () => !1);
return;
}
t.onclick = () => {
s?.();
const {
fields: i,
refs: n,
include: r
} = e, a = [];
if (i.length !== 0 || n.length !== 0) {
const h = new Set(n);
for (const c of i) {
const u = this._fieldObjects[c] || [];
for (const {
id: f
} of u)
h.add(f);
}
for (const c of Object.values(this._fieldObjects))
for (const u of c)
h.has(u.id) === r && a.push(u);
} else
for (const h of Object.values(this._fieldObjects))
a.push(...h);
const o = this.annotationStorage, l = [];
for (const h of a) {
const {
id: c
} = h;
switch (l.push(c), h.type) {
case "text": {
const f = h.defaultValue || "";
o.setValue(c, {
value: f
});
break;
}
case "checkbox":
case "radiobutton": {
const f = h.defaultValue === h.exportValues;
o.setValue(c, {
value: f
});
break;
}
case "combobox":
case "listbox": {
const f = h.defaultValue || "";
o.setValue(c, {
value: f
});
break;
}
default:
continue;
}
const u = document.querySelector(`[data-element-id="${c}"]`);
if (u) {
if (!Yt.has(u)) {
L(`_bindResetFormAction - element not allowed: ${c}`);
continue;
}
} else continue;
u.dispatchEvent(new Event("resetform"));
}
return this.enableScripting && this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: "app",
ids: l,
name: "ResetForm"
}
}), !1;
};
}
}
class Ir extends Q {
constructor(t) {
super(t, {
isRenderable: !0
});
}
render() {
this.container.classList.add("textAnnotation");
const t = document.createElement("img");
return t.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg", t.setAttribute("data-l10n-id", "pdfjs-text-annotation-type"), t.setAttribute("data-l10n-args", JSON.stringify({
type: this.data.name
})), !this.data.popupRef && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container.append(t), this.container;
}
}
class Qt extends Q {
render() {
return this.container;
}
showElementAndHideCanvas(t) {
this.data.hasOwnCanvas && (t.previousSibling?.nodeName === "CANVAS" && (t.previousSibling.hidden = !0), t.hidden = !1);
}
_getKeyModifier(t) {
return ht.platform.isMac ? t.metaKey : t.ctrlKey;
}
_setEventListener(t, e, s, i, n) {
s.includes("mouse") ? t.addEventListener(s, (r) => {
this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: this.data.id,
name: i,
value: n(r),
shift: r.shiftKey,
modifier: this._getKeyModifier(r)
}
});
}) : t.addEventListener(s, (r) => {
if (s === "blur") {
if (!e.focused || !r.relatedTarget)
return;
e.focused = !1;
} else if (s === "focus") {
if (e.focused)
return;
e.focused = !0;
}
n && this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: this.data.id,
name: i,
value: n(r)
}
});
});
}
_setEventListeners(t, e, s, i) {
for (const [n, r] of s)
(r === "Action" || this.data.actions?.[r]) && ((r === "Focus" || r === "Blur") && (e ||= {
focused: !1
}), this._setEventListener(t, e, n, r, i), r === "Focus" && !this.data.actions?.Blur ? this._setEventListener(t, e, "blur", "Blur", null) : r === "Blur" && !this.data.actions?.Focus && this._setEventListener(t, e, "focus", "Focus", null));
}
_setBackgroundColor(t) {
const e = this.data.backgroundColor || null;
t.style.backgroundColor = e === null ? "transparent" : P.makeHexColor(e[0], e[1], e[2]);
}
_setTextStyle(t) {
const e = ["left", "center", "right"], {
fontColor: s
} = this.data.defaultAppearanceData, i = this.data.defaultAppearanceData.fontSize || Rr, n = t.style;
let r;
const a = 2, o = (l) => Math.round(10 * l) / 10;
if (this.data.multiLine) {
const l = Math.abs(this.data.rect[3] - this.data.rect[1] - a), h = Math.round(l / (as * i)) || 1, c = l / h;
r = Math.min(i, o(c / as));
} else {
const l = Math.abs(this.data.rect[3] - this.data.rect[1] - a);
r = Math.min(i, o(l / as));
}
n.fontSize = `calc(${r}px * var(--total-scale-factor))`, n.color = P.makeHexColor(s[0], s[1], s[2]), this.data.textAlignment !== null && (n.textAlign = e[this.data.textAlignment]);
}
_setRequired(t, e) {
e ? t.setAttribute("required", !0) : t.removeAttribute("required"), t.setAttribute("aria-required", e);
}
}
class Fr extends Qt {
constructor(t) {
const e = t.renderForms || t.data.hasOwnCanvas || !t.data.hasAppearance && !!t.data.fieldValue;
super(t, {
isRenderable: e
});
}
setPropertyOnSiblings(t, e, s, i) {
const n = this.annotationStorage;
for (const r of this._getElementsByName(t.name, t.id))
r.domElement && (r.domElement[e] = s), n.setValue(r.id, {
[i]: s
});
}
render() {
const t = this.annotationStorage, e = this.data.id;
this.container.classList.add("textWidgetAnnotation");
let s = null;
if (this.renderForms) {
const i = t.getValue(e, {
value: this.data.fieldValue
});
let n = i.value || "";
const r = t.getValue(e, {
charLimit: this.data.maxLen
}).charLimit;
r && n.length > r && (n = n.slice(0, r));
let a = i.formattedValue || this.data.textContent?.join(`
`) || null;
a && this.data.comb && (a = a.replaceAll(/\s+/g, ""));
const o = {
userValue: n,
formattedValue: a,
lastCommittedValue: null,
commitKey: 1,
focused: !1
};
this.data.multiLine ? (s = document.createElement("textarea"), s.textContent = a ?? n, this.data.doNotScroll && (s.style.overflowY = "hidden")) : (s = document.createElement("input"), s.type = this.data.password ? "password" : "text", s.setAttribute("value", a ?? n), this.data.doNotScroll && (s.style.overflowX = "hidden")), this.data.hasOwnCanvas && (s.hidden = !0), Yt.add(s), this.contentElement = s, s.setAttribute("data-element-id", e), s.disabled = this.data.readOnly, s.name = this.data.fieldName, s.tabIndex = 0;
const {
datetimeFormat: l,
datetimeType: h,
timeStep: c
} = this.data, u = !!h && this.enableScripting;
l && (s.title = l), this._setRequired(s, this.data.required), r && (s.maxLength = r), s.addEventListener("input", (g) => {
t.setValue(e, {
value: g.target.value
}), this.setPropertyOnSiblings(s, "value", g.target.value, "value"), o.formattedValue = null;
}), s.addEventListener("resetform", (g) => {
const p = this.data.defaultFieldValue ?? "";
s.value = o.userValue = p, o.formattedValue = null;
});
let f = (g) => {
const {
formattedValue: p
} = o;
p != null && (g.target.value = p), g.target.scrollLeft = 0;
};
if (this.enableScripting && this.hasJSActions) {
s.addEventListener("focus", (p) => {
if (o.focused)
return;
const {
target: b
} = p;
if (u && (b.type = h, c && (b.step = c)), o.userValue) {
const m = o.userValue;
if (u)
if (h === "time") {
const A = new Date(m), y = [A.getHours(), A.getMinutes(), A.getSeconds()];
b.value = y.map((_) => _.toString().padStart(2, "0")).join(":");
} else
b.value = new Date(m - Dr).toISOString().split(h === "date" ? "T" : ".", 1)[0];
else
b.value = m;
}
o.lastCommittedValue = b.value, o.commitKey = 1, this.data.actions?.Focus || (o.focused = !0);
}), s.addEventListener("updatefromsandbox", (p) => {
this.showElementAndHideCanvas(p.target);
const b = {
value(m) {
o.userValue = m.detail.value ?? "", u || t.setValue(e, {
value: o.userValue.toString()
}), m.target.value = o.userValue;
},
formattedValue(m) {
const {
formattedValue: A
} = m.detail;
o.formattedValue = A, A != null && m.target !== document.activeElement && (m.target.value = A);
const y = {
formattedValue: A
};
u && (y.value = A), t.setValue(e, y);
},
selRange(m) {
m.target.setSelectionRange(...m.detail.selRange);
},
charLimit: (m) => {
const {
charLimit: A
} = m.detail, {
target: y
} = m;
if (A === 0) {
y.removeAttribute("maxLength");
return;
}
y.setAttribute("maxLength", A);
let _ = o.userValue;
!_ || _.length <= A || (_ = _.slice(0, A), y.value = o.userValue = _, t.setValue(e, {
value: _
}), this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: e,
name: "Keystroke",
value: _,
willCommit: !0,
commitKey: 1,
selStart: y.selectionStart,
selEnd: y.selectionEnd
}
}));
}
};
this._dispatchEventFromSandbox(b, p);
}), s.addEventListener("keydown", (p) => {
o.commitKey = 1;
let b = -1;
if (p.key === "Escape" ? b = 0 : p.key === "Enter" && !this.data.multiLine ? b = 2 : p.key === "Tab" && (o.commitKey = 3), b === -1)
return;
const {
value: m
} = p.target;
o.lastCommittedValue !== m && (o.lastCommittedValue = m, o.userValue = m, this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: e,
name: "Keystroke",
value: m,
willCommit: !0,
commitKey: b,
selStart: p.target.selectionStart,
selEnd: p.target.selectionEnd
}
}));
});
const g = f;
f = null, s.addEventListener("blur", (p) => {
if (!o.focused || !p.relatedTarget)
return;
this.data.actions?.Blur || (o.focused = !1);
const {
target: b
} = p;
let {
value: m
} = b;
if (u) {
if (m && h === "time") {
const A = m.split(":").map((y) => parseInt(y, 10));
m = new Date(2e3, 0, 1, A[0], A[1], A[2] || 0).valueOf(), b.step = "";
} else
m.includes("T") || (m = `${m}T00:00`), m = new Date(m).valueOf();
b.type = "text";
}
o.userValue = m, o.lastCommittedValue !== m && this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: e,
name: "Keystroke",
value: m,
willCommit: !0,
commitKey: o.commitKey,
selStart: p.target.selectionStart,
selEnd: p.target.selectionEnd
}
}), g(p);
}), this.data.actions?.Keystroke && s.addEventListener("beforeinput", (p) => {
o.lastCommittedValue = null;
const {
data: b,
target: m
} = p, {
value: A,
selectionStart: y,
selectionEnd: _
} = m;
let w = y, v = _;
switch (p.inputType) {
case "deleteWordBackward": {
const S = A.substring(0, y).match(/\w*[^\w]*$/);
S && (w -= S[0].length);
break;
}
case "deleteWordForward": {
const S = A.substring(y).match(/^[^\w]*\w*/);
S && (v += S[0].length);
break;
}
case "deleteContentBackward":
y === _ && (w -= 1);
break;
case "deleteContentForward":
y === _ && (v += 1);
break;
}
p.preventDefault(), this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: e,
name: "Keystroke",
value: A,
change: b || "",
willCommit: !1,
selStart: w,
selEnd: v
}
});
}), this._setEventListeners(s, o, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (p) => p.target.value);
}
if (f && s.addEventListener("blur", f), this.data.comb) {
const p = (this.data.rect[2] - this.data.rect[0]) / r;
s.classList.add("comb"), s.style.letterSpacing = `calc(${p}px * var(--total-scale-factor) - 1ch)`;
}
} else
s = document.createElement("div"), s.textContent = this.data.fieldValue, s.style.verticalAlign = "middle", s.style.display = "table-cell", this.data.hasOwnCanvas && (s.hidden = !0);
return this._setTextStyle(s), this._setBackgroundColor(s), this._setDefaultPropertiesFromJS(s), this.container.append(s), this.container;
}
}
class Or extends Qt {
constructor(t) {
super(t, {
isRenderable: !!t.data.hasOwnCanvas
});
}
}
class Nr extends Qt {
constructor(t) {
super(t, {
isRenderable: t.renderForms
});
}
render() {
const t = this.annotationStorage, e = this.data, s = e.id;
let i = t.getValue(s, {
value: e.exportValue === e.fieldValue
}).value;
typeof i == "string" && (i = i !== "Off", t.setValue(s, {
value: i
})), this.container.classList.add("buttonWidgetAnnotation", "checkBox");
const n = document.createElement("input");
return Yt.add(n), n.setAttribute("data-element-id", s), n.disabled = e.readOnly, this._setRequired(n, this.data.required), n.type = "checkbox", n.name = e.fieldName, i && n.setAttribute("checked", !0), n.setAttribute("exportValue", e.exportValue), n.tabIndex = 0, n.addEventListener("change", (r) => {
const {
name: a,
checked: o
} = r.target;
for (const l of this._getElementsByName(a, s)) {
const h = o && l.exportValue === e.exportValue;
l.domElement && (l.domElement.checked = h), t.setValue(l.id, {
value: h
});
}
t.setValue(s, {
value: o
});
}), n.addEventListener("resetform", (r) => {
const a = e.defaultFieldValue || "Off";
r.target.checked = a === e.exportValue;
}), this.enableScripting && this.hasJSActions && (n.addEventListener("updatefromsandbox", (r) => {
const a = {
value(o) {
o.target.checked = o.detail.value !== "Off", t.setValue(s, {
value: o.target.checked
});
}
};
this._dispatchEventFromSandbox(a, r);
}), this._setEventListeners(n, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (r) => r.target.checked)), this._setBackgroundColor(n), this._setDefaultPropertiesFromJS(n), this.container.append(n), this.container;
}
}
class Vi extends Qt {
constructor(t) {
super(t, {
isRenderable: t.renderForms
});
}
render() {
this.container.classList.add("buttonWidgetAnnotation", "radioButton");
const t = this.annotationStorage, e = this.data, s = e.id;
let i = t.getValue(s, {
value: e.fieldValue === e.buttonValue
}).value;
if (typeof i == "string" && (i = i !== e.buttonValue, t.setValue(s, {
value: i
})), i)
for (const r of this._getElementsByName(e.fieldName, s))
t.setValue(r.id, {
value: !1
});
const n = document.createElement("input");
if (Yt.add(n), n.setAttribute("data-element-id", s), n.disabled = e.readOnly, this._setRequired(n, this.data.required), n.type = "radio", n.name = e.fieldName, i && n.setAttribute("checked", !0), n.tabIndex = 0, n.addEventListener("change", (r) => {
const {
name: a,
checked: o
} = r.target;
for (const l of this._getElementsByName(a, s))
t.setValue(l.id, {
value: !1
});
t.setValue(s, {
value: o
});
}), n.addEventListener("resetform", (r) => {
const a = e.defaultFieldValue;
r.target.checked = a != null && a === e.buttonValue;
}), this.enableScripting && this.hasJSActions) {
const r = e.buttonValue;
n.addEventListener("updatefromsandbox", (a) => {
const o = {
value: (l) => {
const h = r === l.detail.value;
for (const c of this._getElementsByName(l.target.name)) {
const u = h && c.id === s;
c.domElement && (c.domElement.checked = u), t.setValue(c.id, {
value: u
});
}
}
};
this._dispatchEventFromSandbox(o, a);
}), this._setEventListeners(n, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (a) => a.target.checked);
}
return this._setBackgroundColor(n), this._setDefaultPropertiesFromJS(n), this.container.append(n), this.container;
}
}
class Br extends Bs {
constructor(t) {
super(t, {
ignoreBorder: t.data.hasAppearance
});
}
render() {
const t = super.render();
t.classList.add("buttonWidgetAnnotation", "pushButton");
const e = t.lastChild;
return this.enableScripting && this.hasJSActions && e && (this._setDefaultPropertiesFromJS(e), e.addEventListener("updatefromsandbox", (s) => {
this._dispatchEventFromSandbox({}, s);
})), t;
}
}
class Ur extends Qt {
constructor(t) {
super(t, {
isRenderable: t.renderForms
});
}
render() {
this.container.classList.add("choiceWidgetAnnotation");
const t = this.annotationStorage, e = this.data.id, s = t.getValue(e, {
value: this.data.fieldValue
}), i = document.createElement("select");
Yt.add(i), i.setAttribute("data-element-id", e), i.disabled = this.data.readOnly, this._setRequired(i, this.data.required), i.name = this.data.fieldName, i.tabIndex = 0;
let n = this.data.combo && this.data.options.length > 0;
this.data.combo || (i.size = this.data.options.length, this.data.multiSelect && (i.multiple = !0)), i.addEventListener("resetform", (h) => {
const c = this.data.defaultFieldValue;
for (const u of i.options)
u.selected = u.value === c;
});
for (const h of this.data.options) {
const c = document.createElement("option");
c.textContent = h.displayValue, c.value = h.exportValue, s.value.includes(h.exportValue) && (c.setAttribute("selected", !0), n = !1), i.append(c);
}
let r = null;
if (n) {
const h = document.createElement("option");
h.value = " ", h.setAttribute("hidden", !0), h.setAttribute("selected", !0), i.prepend(h), r = () => {
h.remove(), i.removeEventListener("input", r), r = null;
}, i.addEventListener("input", r);
}
const a = (h) => {
const c = h ? "value" : "textContent", {
options: u,
multiple: f
} = i;
return f ? Array.prototype.filter.call(u, (g) => g.selected).map((g) => g[c]) : u.selectedIndex === -1 ? null : u[u.selectedIndex][c];
};
let o = a(!1);
const l = (h) => {
const c = h.target.options;
return Array.prototype.map.call(c, (u) => ({
displayValue: u.textContent,
exportValue: u.value
}));
};
return this.enableScripting && this.hasJSActions ? (i.addEventListener("updatefromsandbox", (h) => {
const c = {
value(u) {
r?.();
const f = u.detail.value, g = new Set(Array.isArray(f) ? f : [f]);
for (const p of i.options)
p.selected = g.has(p.value);
t.setValue(e, {
value: a(!0)
}), o = a(!1);
},
multipleSelection(u) {
i.multiple = !0;
},
remove(u) {
const f = i.options, g = u.detail.remove;
f[g].selected = !1, i.remove(g), f.length > 0 && Array.prototype.findIndex.call(f, (b) => b.selected) === -1 && (f[0].selected = !0), t.setValue(e, {
value: a(!0),
items: l(u)
}), o = a(!1);
},
clear(u) {
for (; i.length !== 0; )
i.remove(0);
t.setValue(e, {
value: null,
items: []
}), o = a(!1);
},
insert(u) {
const {
index: f,
displayValue: g,
exportValue: p
} = u.detail.insert, b = i.children[f], m = document.createElement("option");
m.textContent = g, m.value = p, b ? b.before(m) : i.append(m), t.setValue(e, {
value: a(!0),
items: l(u)
}), o = a(!1);
},
items(u) {
const {
items: f
} = u.detail;
for (; i.length !== 0; )
i.remove(0);
for (const g of f) {
const {
displayValue: p,
exportValue: b
} = g, m = document.createElement("option");
m.textContent = p, m.value = b, i.append(m);
}
i.options.length > 0 && (i.options[0].selected = !0), t.setValue(e, {
value: a(!0),
items: l(u)
}), o = a(!1);
},
indices(u) {
const f = new Set(u.detail.indices);
for (const g of u.target.options)
g.selected = f.has(g.index);
t.setValue(e, {
value: a(!0)
}), o = a(!1);
},
editable(u) {
u.target.disabled = !u.detail.editable;
}
};
this._dispatchEventFromSandbox(c, h);
}), i.addEventListener("input", (h) => {
const c = a(!0), u = a(!1);
t.setValue(e, {
value: c
}), h.preventDefault(), this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: e,
name: "Keystroke",
value: o,
change: u,
changeEx: c,
willCommit: !1,
commitKey: 1,
keyDown: !1
}
});
}), this._setEventListeners(i, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], (h) => h.target.value)) : i.addEventListener("input", function(h) {
t.setValue(e, {
value: a(!0)
});
}), this.data.combo && this._setTextStyle(i), this._setBackgroundColor(i), this._setDefaultPropertiesFromJS(i), this.container.append(i), this.container;
}
}
class Cs extends Q {
constructor(t) {
const {
data: e,
elements: s,
parent: i
} = t, n = !!i._commentManager;
if (super(t, {
isRenderable: !n && Q._hasPopupData(e)
}), this.elements = s, n && Q._hasPopupData(e)) {
const r = this.popup = this.#t();
for (const a of s)
a.popup = r;
} else
this.popup = null;
}
#t() {
return new Hr({
container: this.container,
color: this.data.color,
titleObj: this.data.titleObj,
modificationDate: this.data.modificationDate || this.data.creationDate,
contentsObj: this.data.contentsObj,
richText: this.data.richText,
rect: this.data.rect,
parentRect: this.data.parentRect || null,
parent: this.parent,
elements: this.elements,
open: this.data.open,
commentManager: this.parent._commentManager
});
}
render() {
const {
container: t
} = this;
t.classList.add("popupAnnotation"), t.role = "comment";
const e = this.popup = this.#t(), s = [];
for (const i of this.elements)
i.popup = e, i.container.ariaHasPopup = "dialog", s.push(i.data.id), i.addHighlightArea();
return this.container.setAttribute("aria-controls", s.map((i) => `${se}${i}`).join(",")), this.container;
}
}
class Hr {
#t = null;
#e = this.#G.bind(this);
#i = this.#U.bind(this);
#s = this.#L.bind(this);
#a = this.#_.bind(this);
#r = null;
#n = null;
#o = null;
#h = null;
#l = null;
#u = null;
#d = null;
#f = !1;
#m = null;
#g = null;
#c = null;
#p = null;
#b = null;
#A = null;
#y = null;
#C = null;
#S = null;
#v = null;
#T = !1;
#w = null;
#E = null;
constructor({
container: t,
color: e,
elements: s,
titleObj: i,
modificationDate: n,
contentsObj: r,
richText: a,
parent: o,
rect: l,
parentRect: h,
open: c,
commentManager: u = null
}) {
this.#n = t, this.#S = i, this.#o = r, this.#C = a, this.#u = o, this.#r = e, this.#y = l, this.#d = h, this.#l = s, this.#t = u, this.#w = s[0], this.#h = ys.toDateObject(n), this.trigger = s.flatMap((f) => f.getElementsToTriggerPopup()), u || (this.#M(), this.#n.hidden = !0, c && this.#_());
}
#M() {
if (this.#g)
return;
this.#g = new AbortController();
const {
signal: t
} = this.#g;
for (const e of this.trigger)
e.addEventListener("click", this.#a, {
signal: t
}), e.addEventListener("pointerenter", this.#s, {
signal: t
}), e.addEventListener("pointerleave", this.#i, {
signal: t
}), e.classList.add("popupTriggerArea");
for (const e of this.#l)
e.container?.addEventListener("keydown", this.#e, {
signal: t
});
}
#P() {
const t = this.#l.find((e) => e.hasCommentButton);
t && (this.#b = t._normalizePoint(t.commentButtonPosition));
}
renderCommentButton() {
if (this.#p) {
this.#p.parentNode || this.#w.container.after(this.#p);
return;
}
if (this.#b || this.#P(), !this.#b)
return;
const {
signal: t
} = this.#g = new AbortController(), e = this.#w.hasOwnCommentButton, s = () => {
this.#t.toggleCommentPopup(this, !0, void 0, !e);
}, i = () => {
this.#t.toggleCommentPopup(this, !1, !0, !e);
}, n = () => {
this.#t.toggleCommentPopup(this, !1, !1);
};
if (e) {
this.#p = this.#w.container;
for (const r of this.trigger)
r.ariaHasPopup = "dialog", r.ariaControls = "commentPopup", r.addEventListener("keydown", this.#e, {
signal: t
}), r.addEventListener("click", s, {
signal: t
}), r.addEventListener("pointerenter", i, {
signal: t
}), r.addEventListener("pointerleave", n, {
signal: t
}), r.classList.add("popupTriggerArea");
} else {
const r = this.#p = document.createElement("button");
r.className = "annotationCommentButton";
const a = this.#w.container;
r.style.zIndex = a.style.zIndex + 1, r.tabIndex = 0, r.ariaHasPopup = "dialog", r.ariaControls = "commentPopup", r.setAttribute("data-l10n-id", "pdfjs-show-comment-button"), this.#N(), this.#k(), r.addEventListener("keydown", this.#e, {
signal: t
}), r.addEventListener("click", s, {
signal: t
}), r.addEventListener("pointerenter", i, {
signal: t
}), r.addEventListener("pointerleave", n, {
signal: t
}), a.after(r);
}
}
#k() {
if (this.#w.extraPopupElement && !this.#w.editor)
return;
this.#p || this.renderCommentButton();
const [t, e] = this.#b, {
style: s
} = this.#p;
s.left = `calc(${t}%)`, s.top = `calc(${e}% - var(--comment-button-dim))`;
}
#N() {
this.#w.extraPopupElement || (this.#p || this.renderCommentButton(), this.#p.style.backgroundColor = this.commentButtonColor || "");
}
get commentButtonColor() {
const {
color: t,
opacity: e
} = this.#w.commentData;
return t ? this.#u._commentManager.makeCommentColor(t, e) : null;
}
focusCommentButton() {
setTimeout(() => {
this.#p?.focus();
}, 0);
}
getData() {
const {
richText: t,
color: e,
opacity: s,
creationDate: i,
modificationDate: n
} = this.#w.commentData;
return {
contentsObj: {
str: this.comment
},
richText: t,
color: e,
opacity: s,
creationDate: i,
modificationDate: n
};
}
get elementBeforePopup() {
return this.#p;
}
get comment() {
return this.#E ||= this.#w.commentText, this.#E;
}
set comment(t) {
t !== this.comment && (this.#w.commentText = this.#E = t);
}
focus() {
this.#w.container?.focus();
}
get parentBoundingClientRect() {
return this.#w.layer.getBoundingClientRect();
}
setCommentButtonStates({
selected: t,
hasPopup: e
}) {
this.#p && (this.#p.classList.toggle("selected", t), this.#p.ariaExpanded = e);
}
setSelectedCommentButton(t) {
this.#p.classList.toggle("selected", t);
}
get commentPopupPosition() {
if (this.#A)
return this.#A;
const {
x: t,
y: e,
height: s
} = this.#p.getBoundingClientRect(), {
x: i,
y: n,
width: r,
height: a
} = this.#w.layer.getBoundingClientRect();
return [(t - i) / r, (e + s - n) / a];
}
set commentPopupPosition(t) {
this.#A = t;
}
hasDefaultPopupPosition() {
return this.#A === null;
}
get commentButtonPosition() {
return this.#b;
}
get commentButtonWidth() {
return this.#p.getBoundingClientRect().width / this.parentBoundingClientRect.width;
}
editComment(t) {
const [e, s] = this.#A || this.commentButtonPosition.map((l) => l / 100), i = this.parentBoundingClientRect, {
x: n,
y: r,
width: a,
height: o
} = i;
this.#t.showDialog(null, this, n + e * a, r + s * o, {
...t,
parentDimensions: i
});
}
render() {
if (this.#m)
return;
const t = this.#m = document.createElement("div");
if (t.className = "popup", this.#r) {
const s = t.style.outlineColor = P.makeHexColor(...this.#r);
t.style.backgroundColor = `color-mix(in srgb, ${s} 30%, white)`;
}
const e = document.createElement("span");
if (e.className = "header", this.#S?.str) {
const s = document.createElement("span");
s.className = "title", e.append(s), {
dir: s.dir,
str: s.textContent
} = this.#S;
}
if (t.append(e), this.#h) {
const s = document.createElement("time");
s.className = "popupDate", s.setAttribute("data-l10n-id", "pdfjs-annotation-date-time-string"), s.setAttribute("data-l10n-args", JSON.stringify({
dateObj: this.#h.valueOf()
})), s.dateTime = this.#h.toISOString(), e.append(s);
}
Ci({
html: this.#D || this.#o.str,
dir: this.#o?.dir,
className: "popupContent"
}, t), this.#n.append(t);
}
get #D() {
const t = this.#C, e = this.#o;
return t?.str && (!e?.str || e.str === t.str) && this.#C.html || null;
}
get #I() {
return this.#D?.attributes?.style?.fontSize || 0;
}
get #B() {
return this.#D?.attributes?.style?.color || null;
}
#F(t) {
const e = [], s = {
str: t,
html: {
name: "div",
attributes: {
dir: "auto"
},
children: [{
name: "p",
children: e
}]
}
}, i = {
style: {
color: this.#B,
fontSize: this.#I ? `calc(${this.#I}px * var(--total-scale-factor))` : ""
}
};
for (const n of t.split(`
`))
e.push({
name: "span",
value: n,
attributes: i
});
return s;
}
#G(t) {
t.altKey || t.shiftKey || t.ctrlKey || t.metaKey || (t.key === "Enter" || t.key === "Escape" && this.#f) && this.#_();
}
updateEdited({
rect: t,
popup: e,
deleted: s
}) {
if (this.#t) {
s ? (this.remove(), this.#E = null) : e && (e.deleted ? this.remove() : (this.#N(), this.#E = e.text)), t && (this.#b = null, this.#P(), this.#k());
return;
}
if (s || e?.deleted) {
this.remove();
return;
}
this.#M(), this.#v ||= {
contentsObj: this.#o,
richText: this.#C
}, t && (this.#c = null), e && e.text && (this.#C = this.#F(e.text), this.#h = ys.toDateObject(e.date), this.#o = null), this.#m?.remove(), this.#m = null;
}
resetEdited() {
this.#v && ({
contentsObj: this.#o,
richText: this.#C
} = this.#v, this.#v = null, this.#m?.remove(), this.#m = null, this.#c = null);
}
remove() {
if (this.#g?.abort(), this.#g = null, this.#m?.remove(), this.#m = null, this.#T = !1, this.#f = !1, this.#p?.remove(), this.#p = null, this.trigger)
for (const t of this.trigger)
t.classList.remove("popupTriggerArea");
}
#x() {
if (this.#c !== null)
return;
const {
page: {
view: t
},
viewport: {
rawDims: {
pageWidth: e,
pageHeight: s,
pageX: i,
pageY: n
}
}
} = this.#u;
let r = !!this.#d, a = r ? this.#d : this.#y;
for (const g of this.#l)
if (!a || P.intersect(g.data.rect, a) !== null) {
a = g.data.rect, r = !0;
break;
}
const o = P.normalizeRect([a[0], t[3] - a[1] + t[1], a[2], t[3] - a[3] + t[1]]), h = r ? a[2] - a[0] + 5 : 0, c = o[0] + h, u = o[1];
this.#c = [100 * (c - i) / e, 100 * (u - n) / s];
const {
style: f
} = this.#n;
f.left = `${this.#c[0]}%`, f.top = `${this.#c[1]}%`;
}
#_() {
if (this.#t) {
this.#t.toggleCommentPopup(this, !1);
return;
}
this.#f = !this.#f, this.#f ? (this.#L(), this.#n.addEventListener("click", this.#a), this.#n.addEventListener("keydown", this.#e)) : (this.#U(), this.#n.removeEventListener("click", this.#a), this.#n.removeEventListener("keydown", this.#e));
}
#L() {
this.#m || this.render(), this.isVisible ? this.#f && this.#n.classList.add("focused") : (this.#x(), this.#n.hidden = !1, this.#n.style.zIndex = parseInt(this.#n.style.zIndex) + 1e3);
}
#U() {
this.#n.classList.remove("focused"), !(this.#f || !this.isVisible) && (this.#n.hidden = !0, this.#n.style.zIndex = parseInt(this.#n.style.zIndex) - 1e3);
}
forceHide() {
this.#T = this.isVisible, this.#T && (this.#n.hidden = !0);
}
maybeShow() {
this.#t || (this.#M(), this.#T && (this.#m || this.#L(), this.#T = !1, this.#n.hidden = !1));
}
get isVisible() {
return this.#t ? !1 : this.#n.hidden === !1;
}
}
class Wi extends Q {
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0
}), this.textContent = t.data.textContent, this.textPosition = t.data.textPosition, this.annotationEditorType = F.FREETEXT;
}
render() {
if (this.container.classList.add("freeTextAnnotation"), this.textContent) {
const t = this.contentElement = document.createElement("div");
t.classList.add("annotationTextContent"), t.setAttribute("role", "comment");
for (const e of this.textContent) {
const s = document.createElement("span");
s.textContent = e, t.append(s);
}
this.container.append(t);
}
return !this.data.popupRef && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this._editOnDoubleClick(), this.container;
}
}
class $r extends Q {
#t = null;
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0
});
}
render() {
this.container.classList.add("lineAnnotation");
const {
data: t,
width: e,
height: s
} = this, i = this.svgFactory.create(e, s, !0), n = this.#t = this.svgFactory.createElement("svg:line");
return n.setAttribute("x1", t.rect[2] - t.lineCoordinates[0]), n.setAttribute("y1", t.rect[3] - t.lineCoordinates[1]), n.setAttribute("x2", t.rect[2] - t.lineCoordinates[2]), n.setAttribute("y2", t.rect[3] - t.lineCoordinates[3]), n.setAttribute("stroke-width", t.borderStyle.width || 1), n.setAttribute("stroke", "transparent"), n.setAttribute("fill", "transparent"), i.append(n), this.container.append(i), !t.popupRef && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container;
}
getElementsToTriggerPopup() {
return this.#t;
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
class zr extends Q {
#t = null;
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0
});
}
render() {
this.container.classList.add("squareAnnotation");
const {
data: t,
width: e,
height: s
} = this, i = this.svgFactory.create(e, s, !0), n = t.borderStyle.width, r = this.#t = this.svgFactory.createElement("svg:rect");
return r.setAttribute("x", n / 2), r.setAttribute("y", n / 2), r.setAttribute("width", e - n), r.setAttribute("height", s - n), r.setAttribute("stroke-width", n || 1), r.setAttribute("stroke", "transparent"), r.setAttribute("fill", "transparent"), i.append(r), this.container.append(i), !t.popupRef && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container;
}
getElementsToTriggerPopup() {
return this.#t;
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
class jr extends Q {
#t = null;
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0
});
}
render() {
this.container.classList.add("circleAnnotation");
const {
data: t,
width: e,
height: s
} = this, i = this.svgFactory.create(e, s, !0), n = t.borderStyle.width, r = this.#t = this.svgFactory.createElement("svg:ellipse");
return r.setAttribute("cx", e / 2), r.setAttribute("cy", s / 2), r.setAttribute("rx", e / 2 - n / 2), r.setAttribute("ry", s / 2 - n / 2), r.setAttribute("stroke-width", n || 1), r.setAttribute("stroke", "transparent"), r.setAttribute("fill", "transparent"), i.append(r), this.container.append(i), !t.popupRef && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container;
}
getElementsToTriggerPopup() {
return this.#t;
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
class Xi extends Q {
#t = null;
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0
}), this.containerClassName = "polylineAnnotation", this.svgElementName = "svg:polyline";
}
render() {
this.container.classList.add(this.containerClassName);
const {
data: {
rect: t,
vertices: e,
borderStyle: s,
popupRef: i
},
width: n,
height: r
} = this;
if (!e)
return this.container;
const a = this.svgFactory.create(n, r, !0);
let o = [];
for (let h = 0, c = e.length; h < c; h += 2) {
const u = e[h] - t[0], f = t[3] - e[h + 1];
o.push(`${u},${f}`);
}
o = o.join(" ");
const l = this.#t = this.svgFactory.createElement(this.svgElementName);
return l.setAttribute("points", o), l.setAttribute("stroke-width", s.width || 1), l.setAttribute("stroke", "transparent"), l.setAttribute("fill", "transparent"), a.append(l), this.container.append(a), !i && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container;
}
getElementsToTriggerPopup() {
return this.#t;
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
class Gr extends Xi {
constructor(t) {
super(t), this.containerClassName = "polygonAnnotation", this.svgElementName = "svg:polygon";
}
}
class Vr extends Q {
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0
});
}
render() {
return this.container.classList.add("caretAnnotation"), !this.data.popupRef && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container;
}
}
class Us extends Q {
#t = null;
#e = [];
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0
}), this.containerClassName = "inkAnnotation", this.svgElementName = "svg:polyline", this.annotationEditorType = this.data.it === "InkHighlight" ? F.HIGHLIGHT : F.INK;
}
#i(t, e) {
switch (t) {
case 90:
return {
transform: `rotate(90) translate(${-e[0]},${e[1]}) scale(1,-1)`,
width: e[3] - e[1],
height: e[2] - e[0]
};
case 180:
return {
transform: `rotate(180) translate(${-e[2]},${e[1]}) scale(1,-1)`,
width: e[2] - e[0],
height: e[3] - e[1]
};
case 270:
return {
transform: `rotate(270) translate(${-e[2]},${e[3]}) scale(1,-1)`,
width: e[3] - e[1],
height: e[2] - e[0]
};
default:
return {
transform: `translate(${-e[0]},${e[3]}) scale(1,-1)`,
width: e[2] - e[0],
height: e[3] - e[1]
};
}
}
render() {
this.container.classList.add(this.containerClassName);
const {
data: {
rect: t,
rotation: e,
inkLists: s,
borderStyle: i,
popupRef: n
}
} = this, {
transform: r,
width: a,
height: o
} = this.#i(e, t), l = this.svgFactory.create(a, o, !0), h = this.#t = this.svgFactory.createElement("svg:g");
l.append(h), h.setAttribute("stroke-width", i.width || 1), h.setAttribute("stroke-linecap", "round"), h.setAttribute("stroke-linejoin", "round"), h.setAttribute("stroke-miterlimit", 10), h.setAttribute("stroke", "transparent"), h.setAttribute("fill", "transparent"), h.setAttribute("transform", r);
for (let c = 0, u = s.length; c < u; c++) {
const f = this.svgFactory.createElement(this.svgElementName);
this.#e.push(f), f.setAttribute("points", s[c].join(",")), h.append(f);
}
return !n && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container.append(l), this._editOnDoubleClick(), this.container;
}
updateEdited(t) {
super.updateEdited(t);
const {
thickness: e,
points: s,
rect: i
} = t, n = this.#t;
if (e >= 0 && n.setAttribute("stroke-width", e || 1), s)
for (let r = 0, a = this.#e.length; r < a; r++)
this.#e[r].setAttribute("points", s[r].join(","));
if (i) {
const {
transform: r,
width: a,
height: o
} = this.#i(this.data.rotation, i);
n.parentElement.setAttribute("viewBox", `0 0 ${a} ${o}`), n.setAttribute("transform", r);
}
}
getElementsToTriggerPopup() {
return this.#e;
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
class qi extends Q {
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0,
createQuadrilaterals: !0
}), this.annotationEditorType = F.HIGHLIGHT;
}
render() {
const {
data: {
overlaidText: t,
popupRef: e
}
} = this;
if (!e && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container.classList.add("highlightAnnotation"), this._editOnDoubleClick(), t) {
const s = document.createElement("mark");
s.classList.add("overlaidText"), s.textContent = t, this.container.append(s);
}
return this.container;
}
}
class Wr extends Q {
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0,
createQuadrilaterals: !0
});
}
render() {
const {
data: {
overlaidText: t,
popupRef: e
}
} = this;
if (!e && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container.classList.add("underlineAnnotation"), t) {
const s = document.createElement("u");
s.classList.add("overlaidText"), s.textContent = t, this.container.append(s);
}
return this.container;
}
}
class Xr extends Q {
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0,
createQuadrilaterals: !0
});
}
render() {
const {
data: {
overlaidText: t,
popupRef: e
}
} = this;
if (!e && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container.classList.add("squigglyAnnotation"), t) {
const s = document.createElement("u");
s.classList.add("overlaidText"), s.textContent = t, this.container.append(s);
}
return this.container;
}
}
class qr extends Q {
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0,
createQuadrilaterals: !0
});
}
render() {
const {
data: {
overlaidText: t,
popupRef: e
}
} = this;
if (!e && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this.container.classList.add("strikeoutAnnotation"), t) {
const s = document.createElement("s");
s.classList.add("overlaidText"), s.textContent = t, this.container.append(s);
}
return this.container;
}
}
class Yi extends Q {
constructor(t) {
super(t, {
isRenderable: !0,
ignoreBorder: !0
}), this.annotationEditorType = F.STAMP;
}
render() {
return this.container.classList.add("stampAnnotation"), this.container.setAttribute("role", "img"), !this.data.popupRef && this.hasPopupData && (this.hasOwnCommentButton = !0, this._createPopup()), this._editOnDoubleClick(), this.container;
}
}
class Yr extends Q {
#t = null;
constructor(t) {
super(t, {
isRenderable: !0
});
const {
file: e
} = this.data;
this.filename = e.filename, this.content = e.content, this.linkService.eventBus?.dispatch("fileattachmentannotation", {
source: this,
...e
});
}
render() {
this.container.classList.add("fileAttachmentAnnotation");
const {
container: t,
data: e
} = this;
let s;
e.hasAppearance || e.fillAlpha === 0 ? s = document.createElement("div") : (s = document.createElement("img"), s.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(e.name) ? "paperclip" : "pushpin"}.svg`, e.fillAlpha && e.fillAlpha < 1 && (s.style = `filter: opacity(${Math.round(e.fillAlpha * 100)}%);`)), s.addEventListener("dblclick", this.#e.bind(this)), this.#t = s;
const {
isMac: i
} = ht.platform;
return t.addEventListener("keydown", (n) => {
n.key === "Enter" && (i ? n.metaKey : n.ctrlKey) && this.#e();
}), !e.popupRef && this.hasPopupData ? (this.hasOwnCommentButton = !0, this._createPopup()) : s.classList.add("popupTriggerArea"), t.append(s), t;
}
getElementsToTriggerPopup() {
return this.#t;
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
#e() {
this.downloadManager?.openOrDownloadData(this.content, this.filename);
}
}
class Hs {
#t = null;
#e = null;
#i = null;
#s = /* @__PURE__ */ new Map();
#a = null;
#r = null;
#n = [];
#o = !1;
constructor({
div: t,
accessibilityManager: e,
annotationCanvasMap: s,
annotationEditorUIManager: i,
page: n,
viewport: r,
structTreeLayer: a,
commentManager: o,
linkService: l,
annotationStorage: h
}) {
this.div = t, this.#t = e, this.#e = s, this.#a = a || null, this.#r = l || null, this.#i = h || new Ls(), this.page = n, this.viewport = r, this.zIndex = 0, this._annotationEditorUIManager = i, this._commentManager = o || null;
}
hasEditableAnnotations() {
return this.#s.size > 0;
}
async render(t) {
const {
annotations: e
} = t, s = this.div;
qt(s, this.viewport);
const i = /* @__PURE__ */ new Map(), n = [], r = {
data: null,
layer: s,
linkService: this.#r,
downloadManager: t.downloadManager,
imageResourcesPath: t.imageResourcesPath || "",
renderForms: t.renderForms !== !1,
svgFactory: new qe(),
annotationStorage: this.#i,
enableComment: t.enableComment === !0,
enableScripting: t.enableScripting === !0,
hasJSActions: t.hasJSActions,
fieldObjects: t.fieldObjects,
parent: this,
elements: null
};
for (const a of e) {
if (a.noHTML)
continue;
const o = a.annotationType === st.POPUP;
if (o) {
const c = i.get(a.id);
if (!c)
continue;
if (!this._commentManager) {
n.push(a);
continue;
}
r.elements = c;
} else if (a.rect[2] === a.rect[0] || a.rect[3] === a.rect[1])
continue;
r.data = a;
const l = ps.create(r);
if (!l.isRenderable)
continue;
if (!o && (this.#n.push(l), a.popupRef)) {
const c = i.get(a.popupRef);
c ? c.push(l) : i.set(a.popupRef, [l]);
}
const h = l.render();
a.hidden && (h.style.visibility = "hidden"), l._isEditable && (this.#s.set(l.data.id, l), this._annotationEditorUIManager?.renderAnnotationElement(l));
}
await this.#h();
for (const a of n) {
const o = r.elements = i.get(a.id);
r.data = a;
const l = ps.create(r);
if (!l.isRenderable)
continue;
const h = l.render();
l.contentElement.id = `${se}${a.id}`, a.hidden && (h.style.visibility = "hidden"), o.at(-1).container.after(h);
}
this.#l();
}
async #h() {
if (this.#n.length === 0)
return;
this.div.replaceChildren();
const t = [];
if (!this.#o) {
this.#o = !0;
for (const {
contentElement: s,
data: {
id: i
}
} of this.#n) {
const n = s.id = `${se}${i}`;
t.push(this.#a?.getAriaAttributes(n).then((r) => {
if (r)
for (const [a, o] of r)
s.setAttribute(a, o);
}));
}
}
this.#n.sort(({
data: {
rect: [s, i, n, r]
}
}, {
data: {
rect: [a, o, l, h]
}
}) => {
if (s === n && i === r)
return 1;
if (a === l && o === h)
return -1;
const c = r, u = i, f = (i + r) / 2, g = h, p = o, b = (o + h) / 2;
if (f >= g && b <= u)
return -1;
if (b >= c && f <= p)
return 1;
const m = (s + n) / 2, A = (a + l) / 2;
return m - A;
});
const e = document.createDocumentFragment();
for (const s of this.#n)
e.append(s.container), this._commentManager ? (s.extraPopupElement?.popup || s.popup)?.renderCommentButton() : s.extraPopupElement && e.append(s.extraPopupElement.render());
if (this.div.append(e), await Promise.all(t), this.#t)
for (const s of this.#n)
this.#t.addPointerInTextLayer(s.contentElement, !1);
}
async addLinkAnnotations(t) {
const e = {
data: null,
layer: this.div,
linkService: this.#r,
svgFactory: new qe(),
parent: this
};
for (const s of t) {
s.borderStyle ||= Hs._defaultBorderStyle, e.data = s;
const i = ps.create(e);
i.isRenderable && (i.render(), i.contentElement.id = `${se}${s.id}`, this.#n.push(i));
}
await this.#h();
}
update({
viewport: t
}) {
const e = this.div;
this.viewport = t, qt(e, {
rotation: t.rotation
}), this.#l(), e.hidden = !1;
}
#l() {
if (!this.#e)
return;
const t = this.div;
for (const [e, s] of this.#e) {
const i = t.querySelector(`[data-annotation-id="${e}"]`);
if (!i)
continue;
s.className = "annotationContent";
const {
firstChild: n
} = i;
n ? n.nodeName === "CANVAS" ? n.replaceWith(s) : n.classList.contains("annotationContent") ? n.after(s) : n.before(s) : i.append(s);
const r = this.#s.get(e);
r && (r._hasNoCanvas ? (this._annotationEditorUIManager?.setMissingCanvas(e, i.id, s), r._hasNoCanvas = !1) : r.canvas = s);
}
this.#e.clear();
}
getEditableAnnotations() {
return Array.from(this.#s.values());
}
getEditableAnnotation(t) {
return this.#s.get(t);
}
addFakeAnnotation(t) {
const {
div: e
} = this, {
id: s,
rotation: i
} = t, n = new Lr({
data: {
id: s,
rect: t.getPDFRect(),
rotation: i
},
editor: t,
layer: e,
parent: this,
enableComment: !!this._commentManager,
linkService: this.#r,
annotationStorage: this.#i
});
return n.render(), n.contentElement.id = `${se}${s}`, n.createOrUpdatePopup(), this.#n.push(n), n;
}
removeAnnotation(t) {
const e = this.#n.findIndex((i) => i.data.id === t);
if (e < 0)
return;
const [s] = this.#n.splice(e, 1);
this.#t?.removePointerInTextLayer(s.contentElement);
}
updateFakeAnnotations(t) {
if (t.length !== 0) {
for (const e of t)
e.updateFakeAnnotationElement(this);
this.#h();
}
}
togglePointerEvents(t = !1) {
this.div.classList.toggle("disabled", !t);
}
static get _defaultBorderStyle() {
return I(this, "_defaultBorderStyle", Object.freeze({
width: 1,
rawWidth: 1,
style: Zt.SOLID,
dashArray: [3],
horizontalCornerRadius: 0,
verticalCornerRadius: 0
}));
}
}
const $e = /\r\n?|\n/g;
class rt extends M {
#t = "";
#e = `${this.id}-editor`;
#i = null;
#s;
_colorPicker = null;
static _freeTextDefaultContent = "";
static _internalPadding = 0;
static _defaultColor = null;
static _defaultFontSize = 10;
static get _keyboardManager() {
const t = rt.prototype, e = (n) => n.isEmpty(), s = zt.TRANSLATE_SMALL, i = zt.TRANSLATE_BIG;
return I(this, "_keyboardManager", new Re([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], t.commitOrRemove, {
bubbles: !0
}], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], t.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], t._translateEmpty, {
args: [-s, 0],
checker: e
}], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], t._translateEmpty, {
args: [-i, 0],
checker: e
}], [["ArrowRight", "mac+ArrowRight"], t._translateEmpty, {
args: [s, 0],
checker: e
}], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], t._translateEmpty, {
args: [i, 0],
checker: e
}], [["ArrowUp", "mac+ArrowUp"], t._translateEmpty, {
args: [0, -s],
checker: e
}], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], t._translateEmpty, {
args: [0, -i],
checker: e
}], [["ArrowDown", "mac+ArrowDown"], t._translateEmpty, {
args: [0, s],
checker: e
}], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], t._translateEmpty, {
args: [0, i],
checker: e
}]]));
}
static _type = "freetext";
static _editorType = F.FREETEXT;
constructor(t) {
super({
...t,
name: "freeTextEditor"
}), this.color = t.color || rt._defaultColor || M._defaultLineColor, this.#s = t.fontSize || rt._defaultFontSize, this.annotationElementId || this._uiManager.a11yAlert("pdfjs-editor-freetext-added-alert"), this.canAddComment = !1;
}
static initialize(t, e) {
M.initialize(t, e);
const s = getComputedStyle(document.documentElement);
this._internalPadding = parseFloat(s.getPropertyValue("--freetext-padding"));
}
static updateDefaultParams(t, e) {
switch (t) {
case O.FREETEXT_SIZE:
rt._defaultFontSize = e;
break;
case O.FREETEXT_COLOR:
rt._defaultColor = e;
break;
}
}
updateParams(t, e) {
switch (t) {
case O.FREETEXT_SIZE:
this.#a(e);
break;
case O.FREETEXT_COLOR:
this.#r(e);
break;
}
}
static get defaultPropertiesToUpdate() {
return [[O.FREETEXT_SIZE, rt._defaultFontSize], [O.FREETEXT_COLOR, rt._defaultColor || M._defaultLineColor]];
}
get propertiesToUpdate() {
return [[O.FREETEXT_SIZE, this.#s], [O.FREETEXT_COLOR, this.color]];
}
get toolbarButtons() {
return this._colorPicker ||= new xe(this), [["colorPicker", this._colorPicker]];
}
get colorType() {
return O.FREETEXT_COLOR;
}
#a(t) {
const e = (i) => {
this.editorDiv.style.fontSize = `calc(${i}px * var(--total-scale-factor))`, this.translate(0, -(i - this.#s) * this.parentScale), this.#s = i, this.#o();
}, s = this.#s;
this.addCommands({
cmd: e.bind(this, t),
undo: e.bind(this, s),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: !0,
type: O.FREETEXT_SIZE,
overwriteIfSameType: !0,
keepUndo: !0
});
}
onUpdatedColor() {
this.editorDiv.style.color = this.color, this._colorPicker?.update(this.color), super.onUpdatedColor();
}
#r(t) {
const e = (i) => {
this.color = i, this.onUpdatedColor();
}, s = this.color;
this.addCommands({
cmd: e.bind(this, t),
undo: e.bind(this, s),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: !0,
type: O.FREETEXT_COLOR,
overwriteIfSameType: !0,
keepUndo: !0
});
}
_translateEmpty(t, e) {
this._uiManager.translateSelectedEditors(t, e, !0);
}
getInitialTranslation() {
const t = this.parentScale;
return [-rt._internalPadding * t, -(rt._internalPadding + this.#s) * t];
}
rebuild() {
this.parent && (super.rebuild(), this.div !== null && (this.isAttachedToDOM || this.parent.add(this)));
}
enableEditMode() {
if (!super.enableEditMode())
return !1;
this.overlayDiv.classList.remove("enabled"), this.editorDiv.contentEditable = !0, this._isDraggable = !1, this.div.removeAttribute("aria-activedescendant"), this.#i = new AbortController();
const t = this._uiManager.combinedSignal(this.#i);
return this.editorDiv.addEventListener("keydown", this.editorDivKeydown.bind(this), {
signal: t
}), this.editorDiv.addEventListener("focus", this.editorDivFocus.bind(this), {
signal: t
}), this.editorDiv.addEventListener("blur", this.editorDivBlur.bind(this), {
signal: t
}), this.editorDiv.addEventListener("input", this.editorDivInput.bind(this), {
signal: t
}), this.editorDiv.addEventListener("paste", this.editorDivPaste.bind(this), {
signal: t
}), !0;
}
disableEditMode() {
return super.disableEditMode() ? (this.overlayDiv.classList.add("enabled"), this.editorDiv.contentEditable = !1, this.div.setAttribute("aria-activedescendant", this.#e), this._isDraggable = !0, this.#i?.abort(), this.#i = null, this.div.focus({
preventScroll: !0
}), this.isEditing = !1, this.parent.div.classList.add("freetextEditing"), !0) : !1;
}
focusin(t) {
this._focusEventsAllowed && (super.focusin(t), t.target !== this.editorDiv && this.editorDiv.focus());
}
onceAdded(t) {
this.width || (this.enableEditMode(), t && this.editorDiv.focus(), this._initialOptions?.isCentered && this.center(), this._initialOptions = null);
}
isEmpty() {
return !this.editorDiv || this.editorDiv.innerText.trim() === "";
}
remove() {
this.isEditing = !1, this.parent && (this.parent.setEditingState(!0), this.parent.div.classList.add("freetextEditing")), super.remove();
}
#n() {
const t = [];
this.editorDiv.normalize();
let e = null;
for (const s of this.editorDiv.childNodes)
e?.nodeType === Node.TEXT_NODE && s.nodeName === "BR" || (t.push(rt.#h(s)), e = s);
return t.join(`
`);
}
#o() {
const [t, e] = this.parentDimensions;
let s;
if (this.isAttachedToDOM)
s = this.div.getBoundingClientRect();
else {
const {
currentLayer: i,
div: n
} = this, r = n.style.display, a = n.classList.contains("hidden");
n.classList.remove("hidden"), n.style.display = "hidden", i.div.append(this.div), s = n.getBoundingClientRect(), n.remove(), n.style.display = r, n.classList.toggle("hidden", a);
}
this.rotation % 180 === this.parentRotation % 180 ? (this.width = s.width / t, this.height = s.height / e) : (this.width = s.height / t, this.height = s.width / e), this.fixAndSetPosition();
}
commit() {
if (!this.isInEditMode())
return;
super.commit(), this.disableEditMode();
const t = this.#t, e = this.#t = this.#n().trimEnd();
if (t === e)
return;
const s = (i) => {
if (this.#t = i, !i) {
this.remove();
return;
}
this.#l(), this._uiManager.rebuild(this), this.#o();
};
this.addCommands({
cmd: () => {
s(e);
},
undo: () => {
s(t);
},
mustExec: !1
}), this.#o();
}
shouldGetKeyboardEvents() {
return this.isInEditMode();
}
enterInEditMode() {
this.enableEditMode(), this.editorDiv.focus();
}
keydown(t) {
t.target === this.div && t.key === "Enter" && (this.enterInEditMode(), t.preventDefault());
}
editorDivKeydown(t) {
rt._keyboardManager.exec(this, t);
}
editorDivFocus(t) {
this.isEditing = !0;
}
editorDivBlur(t) {
this.isEditing = !1;
}
editorDivInput(t) {
this.parent.div.classList.toggle("freetextEditing", this.isEmpty());
}
disableEditing() {
this.editorDiv.setAttribute("role", "comment"), this.editorDiv.removeAttribute("aria-multiline");
}
enableEditing() {
this.editorDiv.setAttribute("role", "textbox"), this.editorDiv.setAttribute("aria-multiline", !0);
}
get canChangeContent() {
return !0;
}
render() {
if (this.div)
return this.div;
let t, e;
(this._isCopy || this.annotationElementId) && (t = this.x, e = this.y), super.render(), this.editorDiv = document.createElement("div"), this.editorDiv.className = "internal", this.editorDiv.setAttribute("id", this.#e), this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text2"), this.editorDiv.setAttribute("data-l10n-attrs", "default-content"), this.enableEditing(), this.editorDiv.contentEditable = !0;
const {
style: s
} = this.editorDiv;
if (s.fontSize = `calc(${this.#s}px * var(--total-scale-factor))`, s.color = this.color, this.div.append(this.editorDiv), this.overlayDiv = document.createElement("div"), this.overlayDiv.classList.add("overlay", "enabled"), this.div.append(this.overlayDiv), this._isCopy || this.annotationElementId) {
const [i, n] = this.parentDimensions;
if (this.annotationElementId) {
const {
position: r
} = this._initialData;
let [a, o] = this.getInitialTranslation();
[a, o] = this.pageTranslationToScreen(a, o);
const [l, h] = this.pageDimensions, [c, u] = this.pageTranslation;
let f, g;
switch (this.rotation) {
case 0:
f = t + (r[0] - c) / l, g = e + this.height - (r[1] - u) / h;
break;
case 90:
f = t + (r[0] - c) / l, g = e - (r[1] - u) / h, [a, o] = [o, -a];
break;
case 180:
f = t - this.width + (r[0] - c) / l, g = e - (r[1] - u) / h, [a, o] = [-a, -o];
break;
case 270:
f = t + (r[0] - c - this.height * h) / l, g = e + (r[1] - u - this.width * l) / h, [a, o] = [-o, a];
break;
}
this.setAt(f * i, g * n, a, o);
} else
this._moveAfterPaste(t, e);
this.#l(), this._isDraggable = !0, this.editorDiv.contentEditable = !1;
} else
this._isDraggable = !1, this.editorDiv.contentEditable = !0;
return this.div;
}
static #h(t) {
return (t.nodeType === Node.TEXT_NODE ? t.nodeValue : t.innerText).replaceAll($e, "");
}
editorDivPaste(t) {
const e = t.clipboardData || window.clipboardData, {
types: s
} = e;
if (s.length === 1 && s[0] === "text/plain")
return;
t.preventDefault();
const i = rt.#d(e.getData("text") || "").replaceAll($e, `
`);
if (!i)
return;
const n = window.getSelection();
if (!n.rangeCount)
return;
this.editorDiv.normalize(), n.deleteFromDocument();
const r = n.getRangeAt(0);
if (!i.includes(`
`)) {
r.insertNode(document.createTextNode(i)), this.editorDiv.normalize(), n.collapseToStart();
return;
}
const {
startContainer: a,
startOffset: o
} = r, l = [], h = [];
if (a.nodeType === Node.TEXT_NODE) {
const f = a.parentElement;
if (h.push(a.nodeValue.slice(o).replaceAll($e, "")), f !== this.editorDiv) {
let g = l;
for (const p of this.editorDiv.childNodes) {
if (p === f) {
g = h;
continue;
}
g.push(rt.#h(p));
}
}
l.push(a.nodeValue.slice(0, o).replaceAll($e, ""));
} else if (a === this.editorDiv) {
let f = l, g = 0;
for (const p of this.editorDiv.childNodes)
g++ === o && (f = h), f.push(rt.#h(p));
}
this.#t = `${l.join(`
`)}${i}${h.join(`
`)}`, this.#l();
const c = new Range();
let u = Math.sumPrecise(l.map((f) => f.length));
for (const {
firstChild: f
} of this.editorDiv.childNodes)
if (f.nodeType === Node.TEXT_NODE) {
const g = f.nodeValue.length;
if (u <= g) {
c.setStart(f, u), c.setEnd(f, u);
break;
}
u -= g;
}
n.removeAllRanges(), n.addRange(c);
}
#l() {
if (this.editorDiv.replaceChildren(), !!this.#t)
for (const t of this.#t.split(`
`)) {
const e = document.createElement("div");
e.append(t ? document.createTextNode(t) : document.createElement("br")), this.editorDiv.append(e);
}
}
#u() {
return this.#t.replaceAll(" ", " ");
}
static #d(t) {
return t.replaceAll(" ", " ");
}
get contentDiv() {
return this.editorDiv;
}
getPDFRect() {
const t = rt._internalPadding * this.parentScale;
return this.getRect(t, t);
}
static async deserialize(t, e, s) {
let i = null;
if (t instanceof Wi) {
const {
data: {
defaultAppearanceData: {
fontSize: r,
fontColor: a
},
rect: o,
rotation: l,
id: h,
popupRef: c,
richText: u,
contentsObj: f,
creationDate: g,
modificationDate: p
},
textContent: b,
textPosition: m,
parent: {
page: {
pageNumber: A
}
}
} = t;
if (!b || b.length === 0)
return null;
i = t = {
annotationType: F.FREETEXT,
color: Array.from(a),
fontSize: r,
value: b.join(`
`),
position: m,
pageIndex: A - 1,
rect: o.slice(0),
rotation: l,
annotationElementId: h,
id: h,
deleted: !1,
popupRef: c,
comment: f?.str || null,
richText: u,
creationDate: g,
modificationDate: p
};
}
const n = await super.deserialize(t, e, s);
return n.#s = t.fontSize, n.color = P.makeHexColor(...t.color), n.#t = rt.#d(t.value), n._initialData = i, t.comment && n.setCommentData(t), n;
}
serialize(t = !1) {
if (this.isEmpty())
return null;
if (this.deleted)
return this.serializeDeleted();
const e = M._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.color), s = Object.assign(super.serialize(t), {
color: e,
fontSize: this.#s,
value: this.#u()
});
return this.addComment(s), t ? (s.isCopy = !0, s) : this.annotationElementId && !this.#f(s) ? null : (s.id = this.annotationElementId, s);
}
#f(t) {
const {
value: e,
fontSize: s,
color: i,
pageIndex: n
} = this._initialData;
return this.hasEditedComment || this._hasBeenMoved || t.value !== e || t.fontSize !== s || t.color.some((r, a) => r !== i[a]) || t.pageIndex !== n;
}
renderAnnotationElement(t) {
const e = super.renderAnnotationElement(t);
if (!e)
return null;
const {
style: s
} = e;
s.fontSize = `calc(${this.#s}px * var(--total-scale-factor))`, s.color = this.color, e.replaceChildren();
for (const i of this.#t.split(`
`)) {
const n = document.createElement("div");
n.append(i ? document.createTextNode(i) : document.createElement("br")), e.append(n);
}
return t.updateEdited({
rect: this.getPDFRect(),
popup: this._uiManager.hasCommentManager() || this.hasEditedComment ? this.comment : {
text: this.#t
}
}), e;
}
resetAnnotationElement(t) {
super.resetAnnotationElement(t), t.resetEdited();
}
}
class x {
static PRECISION = 1e-4;
toSVGPath() {
V("Abstract method `toSVGPath` must be implemented.");
}
get box() {
V("Abstract getter `box` must be implemented.");
}
serialize(t, e) {
V("Abstract method `serialize` must be implemented.");
}
static _rescale(t, e, s, i, n, r) {
r ||= new Float32Array(t.length);
for (let a = 0, o = t.length; a < o; a += 2)
r[a] = e + t[a] * i, r[a + 1] = s + t[a + 1] * n;
return r;
}
static _rescaleAndSwap(t, e, s, i, n, r) {
r ||= new Float32Array(t.length);
for (let a = 0, o = t.length; a < o; a += 2)
r[a] = e + t[a + 1] * i, r[a + 1] = s + t[a] * n;
return r;
}
static _translate(t, e, s, i) {
i ||= new Float32Array(t.length);
for (let n = 0, r = t.length; n < r; n += 2)
i[n] = e + t[n], i[n + 1] = s + t[n + 1];
return i;
}
static svgRound(t) {
return Math.round(t * 1e4);
}
static _normalizePoint(t, e, s, i, n) {
switch (n) {
case 90:
return [1 - e / s, t / i];
case 180:
return [1 - t / s, 1 - e / i];
case 270:
return [e / s, 1 - t / i];
default:
return [t / s, e / i];
}
}
static _normalizePagePoint(t, e, s) {
switch (s) {
case 90:
return [1 - e, t];
case 180:
return [1 - t, 1 - e];
case 270:
return [e, 1 - t];
default:
return [t, e];
}
}
static createBezierPoints(t, e, s, i, n, r) {
return [(t + 5 * s) / 6, (e + 5 * i) / 6, (5 * s + n) / 6, (5 * i + r) / 6, (s + n) / 2, (i + r) / 2];
}
}
class Gt {
#t;
#e = [];
#i;
#s;
#a = [];
#r = new Float32Array(18);
#n;
#o;
#h;
#l;
#u;
#d;
#f = [];
static #m = 8;
static #g = 2;
static #c = Gt.#m + Gt.#g;
constructor({
x: t,
y: e
}, s, i, n, r, a = 0) {
this.#t = s, this.#d = n * i, this.#s = r, this.#r.set([NaN, NaN, NaN, NaN, t, e], 6), this.#i = a, this.#l = Gt.#m * i, this.#h = Gt.#c * i, this.#u = i, this.#f.push(t, e);
}
isEmpty() {
return isNaN(this.#r[8]);
}
#p() {
const t = this.#r.subarray(4, 6), e = this.#r.subarray(16, 18), [s, i, n, r] = this.#t;
return [(this.#n + (t[0] - e[0]) / 2 - s) / n, (this.#o + (t[1] - e[1]) / 2 - i) / r, (this.#n + (e[0] - t[0]) / 2 - s) / n, (this.#o + (e[1] - t[1]) / 2 - i) / r];
}
add({
x: t,
y: e
}) {
this.#n = t, this.#o = e;
const [s, i, n, r] = this.#t;
let [a, o, l, h] = this.#r.subarray(8, 12);
const c = t - l, u = e - h, f = Math.hypot(c, u);
if (f < this.#h)
return !1;
const g = f - this.#l, p = g / f, b = p * c, m = p * u;
let A = a, y = o;
a = l, o = h, l += b, h += m, this.#f?.push(t, e);
const _ = -m / g, w = b / g, v = _ * this.#d, S = w * this.#d;
return this.#r.set(this.#r.subarray(2, 8), 0), this.#r.set([l + v, h + S], 4), this.#r.set(this.#r.subarray(14, 18), 12), this.#r.set([l - v, h - S], 16), isNaN(this.#r[6]) ? (this.#a.length === 0 && (this.#r.set([a + v, o + S], 2), this.#a.push(NaN, NaN, NaN, NaN, (a + v - s) / n, (o + S - i) / r), this.#r.set([a - v, o - S], 14), this.#e.push(NaN, NaN, NaN, NaN, (a - v - s) / n, (o - S - i) / r)), this.#r.set([A, y, a, o, l, h], 6), !this.isEmpty()) : (this.#r.set([A, y, a, o, l, h], 6), Math.abs(Math.atan2(y - o, A - a) - Math.atan2(m, b)) < Math.PI / 2 ? ([a, o, l, h] = this.#r.subarray(2, 6), this.#a.push(NaN, NaN, NaN, NaN, ((a + l) / 2 - s) / n, ((o + h) / 2 - i) / r), [a, o, A, y] = this.#r.subarray(14, 18), this.#e.push(NaN, NaN, NaN, NaN, ((A + a) / 2 - s) / n, ((y + o) / 2 - i) / r), !0) : ([A, y, a, o, l, h] = this.#r.subarray(0, 6), this.#a.push(((A + 5 * a) / 6 - s) / n, ((y + 5 * o) / 6 - i) / r, ((5 * a + l) / 6 - s) / n, ((5 * o + h) / 6 - i) / r, ((a + l) / 2 - s) / n, ((o + h) / 2 - i) / r), [l, h, a, o, A, y] = this.#r.subarray(12, 18), this.#e.push(((A + 5 * a) / 6 - s) / n, ((y + 5 * o) / 6 - i) / r, ((5 * a + l) / 6 - s) / n, ((5 * o + h) / 6 - i) / r, ((a + l) / 2 - s) / n, ((o + h) / 2 - i) / r), !0));
}
toSVGPath() {
if (this.isEmpty())
return "";
const t = this.#a, e = this.#e;
if (isNaN(this.#r[6]) && !this.isEmpty())
return this.#b();
const s = [];
s.push(`M${t[4]} ${t[5]}`);
for (let i = 6; i < t.length; i += 6)
isNaN(t[i]) ? s.push(`L${t[i + 4]} ${t[i + 5]}`) : s.push(`C${t[i]} ${t[i + 1]} ${t[i + 2]} ${t[i + 3]} ${t[i + 4]} ${t[i + 5]}`);
this.#y(s);
for (let i = e.length - 6; i >= 6; i -= 6)
isNaN(e[i]) ? s.push(`L${e[i + 4]} ${e[i + 5]}`) : s.push(`C${e[i]} ${e[i + 1]} ${e[i + 2]} ${e[i + 3]} ${e[i + 4]} ${e[i + 5]}`);
return this.#A(s), s.join(" ");
}
#b() {
const [t, e, s, i] = this.#t, [n, r, a, o] = this.#p();
return `M${(this.#r[2] - t) / s} ${(this.#r[3] - e) / i} L${(this.#r[4] - t) / s} ${(this.#r[5] - e) / i} L${n} ${r} L${a} ${o} L${(this.#r[16] - t) / s} ${(this.#r[17] - e) / i} L${(this.#r[14] - t) / s} ${(this.#r[15] - e) / i} Z`;
}
#A(t) {
const e = this.#e;
t.push(`L${e[4]} ${e[5]} Z`);
}
#y(t) {
const [e, s, i, n] = this.#t, r = this.#r.subarray(4, 6), a = this.#r.subarray(16, 18), [o, l, h, c] = this.#p();
t.push(`L${(r[0] - e) / i} ${(r[1] - s) / n} L${o} ${l} L${h} ${c} L${(a[0] - e) / i} ${(a[1] - s) / n}`);
}
newFreeDrawOutline(t, e, s, i, n, r) {
return new Ki(t, e, s, i, n, r);
}
getOutlines() {
const t = this.#a, e = this.#e, s = this.#r, [i, n, r, a] = this.#t, o = new Float32Array((this.#f?.length ?? 0) + 2);
for (let c = 0, u = o.length - 2; c < u; c += 2)
o[c] = (this.#f[c] - i) / r, o[c + 1] = (this.#f[c + 1] - n) / a;
if (o[o.length - 2] = (this.#n - i) / r, o[o.length - 1] = (this.#o - n) / a, isNaN(s[6]) && !this.isEmpty())
return this.#C(o);
const l = new Float32Array(this.#a.length + 24 + this.#e.length);
let h = t.length;
for (let c = 0; c < h; c += 2) {
if (isNaN(t[c])) {
l[c] = l[c + 1] = NaN;
continue;
}
l[c] = t[c], l[c + 1] = t[c + 1];
}
h = this.#v(l, h);
for (let c = e.length - 6; c >= 6; c -= 6)
for (let u = 0; u < 6; u += 2) {
if (isNaN(e[c + u])) {
l[h] = l[h + 1] = NaN, h += 2;
continue;
}
l[h] = e[c + u], l[h + 1] = e[c + u + 1], h += 2;
}
return this.#S(l, h), this.newFreeDrawOutline(l, o, this.#t, this.#u, this.#i, this.#s);
}
#C(t) {
const e = this.#r, [s, i, n, r] = this.#t, [a, o, l, h] = this.#p(), c = new Float32Array(36);
return c.set([NaN, NaN, NaN, NaN, (e[2] - s) / n, (e[3] - i) / r, NaN, NaN, NaN, NaN, (e[4] - s) / n, (e[5] - i) / r, NaN, NaN, NaN, NaN, a, o, NaN, NaN, NaN, NaN, l, h, NaN, NaN, NaN, NaN, (e[16] - s) / n, (e[17] - i) / r, NaN, NaN, NaN, NaN, (e[14] - s) / n, (e[15] - i) / r], 0), this.newFreeDrawOutline(c, t, this.#t, this.#u, this.#i, this.#s);
}
#S(t, e) {
const s = this.#e;
return t.set([NaN, NaN, NaN, NaN, s[4], s[5]], e), e += 6;
}
#v(t, e) {
const s = this.#r.subarray(4, 6), i = this.#r.subarray(16, 18), [n, r, a, o] = this.#t, [l, h, c, u] = this.#p();
return t.set([NaN, NaN, NaN, NaN, (s[0] - n) / a, (s[1] - r) / o, NaN, NaN, NaN, NaN, l, h, NaN, NaN, NaN, NaN, c, u, NaN, NaN, NaN, NaN, (i[0] - n) / a, (i[1] - r) / o], e), e += 24;
}
}
class Ki extends x {
#t;
#e = new Float32Array(4);
#i;
#s;
#a;
#r;
#n;
constructor(t, e, s, i, n, r) {
super(), this.#n = t, this.#a = e, this.#t = s, this.#r = i, this.#i = n, this.#s = r, this.firstPoint = [NaN, NaN], this.lastPoint = [NaN, NaN], this.#o(r);
const [a, o, l, h] = this.#e;
for (let c = 0, u = t.length; c < u; c += 2)
t[c] = (t[c] - a) / l, t[c + 1] = (t[c + 1] - o) / h;
for (let c = 0, u = e.length; c < u; c += 2)
e[c] = (e[c] - a) / l, e[c + 1] = (e[c + 1] - o) / h;
}
toSVGPath() {
const t = [`M${this.#n[4]} ${this.#n[5]}`];
for (let e = 6, s = this.#n.length; e < s; e += 6) {
if (isNaN(this.#n[e])) {
t.push(`L${this.#n[e + 4]} ${this.#n[e + 5]}`);
continue;
}
t.push(`C${this.#n[e]} ${this.#n[e + 1]} ${this.#n[e + 2]} ${this.#n[e + 3]} ${this.#n[e + 4]} ${this.#n[e + 5]}`);
}
return t.push("Z"), t.join(" ");
}
serialize([t, e, s, i], n) {
const r = s - t, a = i - e;
let o, l;
switch (n) {
case 0:
o = x._rescale(this.#n, t, i, r, -a), l = x._rescale(this.#a, t, i, r, -a);
break;
case 90:
o = x._rescaleAndSwap(this.#n, t, e, r, a), l = x._rescaleAndSwap(this.#a, t, e, r, a);
break;
case 180:
o = x._rescale(this.#n, s, e, -r, a), l = x._rescale(this.#a, s, e, -r, a);
break;
case 270:
o = x._rescaleAndSwap(this.#n, s, i, -r, -a), l = x._rescaleAndSwap(this.#a, s, i, -r, -a);
break;
}
return {
outline: Array.from(o),
points: [Array.from(l)]
};
}
#o(t) {
const e = this.#n;
let s = e[4], i = e[5];
const n = [s, i, s, i];
let r = s, a = i, o = s, l = i;
const h = t ? Math.max : Math.min, c = new Float32Array(4);
for (let f = 6, g = e.length; f < g; f += 6) {
const p = e[f + 4], b = e[f + 5];
isNaN(e[f]) ? (P.pointBoundingBox(p, b, n), a > b ? (r = p, a = b) : a === b && (r = h(r, p)), l < b ? (o = p, l = b) : l === b && (o = h(o, p))) : (c[0] = c[1] = 1 / 0, c[2] = c[3] = -1 / 0, P.bezierBoundingBox(s, i, ...e.slice(f, f + 6), c), P.rectBoundingBox(c[0], c[1], c[2], c[3], n), a > c[1] ? (r = c[0], a = c[1]) : a === c[1] && (r = h(r, c[0])), l < c[3] ? (o = c[2], l = c[3]) : l === c[3] && (o = h(o, c[2]))), s = p, i = b;
}
const u = this.#e;
u[0] = n[0] - this.#i, u[1] = n[1] - this.#i, u[2] = n[2] - n[0] + 2 * this.#i, u[3] = n[3] - n[1] + 2 * this.#i, this.firstPoint = [r, a], this.lastPoint = [o, l];
}
get box() {
return this.#e;
}
newOutliner(t, e, s, i, n, r = 0) {
return new Gt(t, e, s, i, n, r);
}
getNewOutline(t, e) {
const [s, i, n, r] = this.#e, [a, o, l, h] = this.#t, c = n * l, u = r * h, f = s * l + a, g = i * h + o, p = this.newOutliner({
x: this.#a[0] * c + f,
y: this.#a[1] * u + g
}, this.#t, this.#r, t, this.#s, e ?? this.#i);
for (let b = 2; b < this.#a.length; b += 2)
p.add({
x: this.#a[b] * c + f,
y: this.#a[b + 1] * u + g
});
return p.getOutlines();
}
}
class xs {
#t;
#e;
#i;
#s = [];
#a = [];
constructor(t, e = 0, s = 0, i = !0) {
const n = [1 / 0, 1 / 0, -1 / 0, -1 / 0], r = 10 ** -4;
for (const {
x: p,
y: b,
width: m,
height: A
} of t) {
const y = Math.floor((p - e) / r) * r, _ = Math.ceil((p + m + e) / r) * r, w = Math.floor((b - e) / r) * r, v = Math.ceil((b + A + e) / r) * r, S = [y, w, v, !0], E = [_, w, v, !1];
this.#s.push(S, E), P.rectBoundingBox(y, w, _, v, n);
}
const a = n[2] - n[0] + 2 * s, o = n[3] - n[1] + 2 * s, l = n[0] - s, h = n[1] - s;
let c = i ? -1 / 0 : 1 / 0, u = 1 / 0;
const f = this.#s.at(i ? -1 : -2), g = [f[0], f[2]];
for (const p of this.#s) {
const [b, m, A, y] = p;
!y && i ? m < u ? (u = m, c = b) : m === u && (c = Math.max(c, b)) : y && !i && (m < u ? (u = m, c = b) : m === u && (c = Math.min(c, b))), p[0] = (b - l) / a, p[1] = (m - h) / o, p[2] = (A - h) / o;
}
this.#t = new Float32Array([l, h, a, o]), this.#e = [c, u], this.#i = g;
}
getOutlines() {
this.#s.sort((e, s) => e[0] - s[0] || e[1] - s[1] || e[2] - s[2]);
const t = [];
for (const e of this.#s)
e[3] ? (t.push(...this.#l(e)), this.#o(e)) : (this.#h(e), t.push(...this.#l(e)));
return this.#r(t);
}
#r(t) {
const e = [], s = /* @__PURE__ */ new Set();
for (const r of t) {
const [a, o, l] = r;
e.push([a, o, r], [a, l, r]);
}
e.sort((r, a) => r[1] - a[1] || r[0] - a[0]);
for (let r = 0, a = e.length; r < a; r += 2) {
const o = e[r][2], l = e[r + 1][2];
o.push(l), l.push(o), s.add(o), s.add(l);
}
const i = [];
let n;
for (; s.size > 0; ) {
const r = s.values().next().value;
let [a, o, l, h, c] = r;
s.delete(r);
let u = a, f = o;
for (n = [a, l], i.push(n); ; ) {
let g;
if (s.has(h))
g = h;
else if (s.has(c))
g = c;
else
break;
s.delete(g), [a, o, l, h, c] = g, u !== a && (n.push(u, f, a, f === o ? o : l), u = a), f = f === o ? l : o;
}
n.push(u, f);
}
return new Kr(i, this.#t, this.#e, this.#i);
}
#n(t) {
const e = this.#a;
let s = 0, i = e.length - 1;
for (; s <= i; ) {
const n = s + i >> 1, r = e[n][0];
if (r === t)
return n;
r < t ? s = n + 1 : i = n - 1;
}
return i + 1;
}
#o([, t, e]) {
const s = this.#n(t);
this.#a.splice(s, 0, [t, e]);
}
#h([, t, e]) {
const s = this.#n(t);
for (let i = s; i < this.#a.length; i++) {
const [n, r] = this.#a[i];
if (n !== t)
break;
if (n === t && r === e) {
this.#a.splice(i, 1);
return;
}
}
for (let i = s - 1; i >= 0; i--) {
const [n, r] = this.#a[i];
if (n !== t)
break;
if (n === t && r === e) {
this.#a.splice(i, 1);
return;
}
}
}
#l(t) {
const [e, s, i] = t, n = [[e, s, i]], r = this.#n(i);
for (let a = 0; a < r; a++) {
const [o, l] = this.#a[a];
for (let h = 0, c = n.length; h < c; h++) {
const [, u, f] = n[h];
if (!(l <= u || f <= o)) {
if (u >= o) {
if (f > l)
n[h][1] = l;
else {
if (c === 1)
return [];
n.splice(h, 1), h--, c--;
}
continue;
}
n[h][2] = o, f > l && n.push([e, l, f]);
}
}
}
return n;
}
}
class Kr extends x {
#t;
#e;
constructor(t, e, s, i) {
super(), this.#e = t, this.#t = e, this.firstPoint = s, this.lastPoint = i;
}
toSVGPath() {
const t = [];
for (const e of this.#e) {
let [s, i] = e;
t.push(`M${s} ${i}`);
for (let n = 2; n < e.length; n += 2) {
const r = e[n], a = e[n + 1];
r === s ? (t.push(`V${a}`), i = a) : a === i && (t.push(`H${r}`), s = r);
}
t.push("Z");
}
return t.join(" ");
}
serialize([t, e, s, i], n) {
const r = [], a = s - t, o = i - e;
for (const l of this.#e) {
const h = new Array(l.length);
for (let c = 0; c < l.length; c += 2)
h[c] = t + l[c] * a, h[c + 1] = i - l[c + 1] * o;
r.push(h);
}
return r;
}
get box() {
return this.#t;
}
get classNamesForOutlining() {
return ["highlightOutline"];
}
}
class Ts extends Gt {
newFreeDrawOutline(t, e, s, i, n, r) {
return new Qr(t, e, s, i, n, r);
}
}
class Qr extends Ki {
newOutliner(t, e, s, i, n, r = 0) {
return new Ts(t, e, s, i, n, r);
}
}
class Z extends M {
#t = null;
#e = 0;
#i;
#s = null;
#a = null;
#r = null;
#n = null;
#o = 0;
#h = null;
#l = null;
#u = null;
#d = !1;
#f = null;
#m = null;
#g = null;
#c = "";
#p;
#b = "";
static _defaultColor = null;
static _defaultOpacity = 1;
static _defaultThickness = 12;
static _type = "highlight";
static _editorType = F.HIGHLIGHT;
static _freeHighlightId = -1;
static _freeHighlight = null;
static _freeHighlightClipId = "";
static get _keyboardManager() {
const t = Z.prototype;
return I(this, "_keyboardManager", new Re([[["ArrowLeft", "mac+ArrowLeft"], t._moveCaret, {
args: [0]
}], [["ArrowRight", "mac+ArrowRight"], t._moveCaret, {
args: [1]
}], [["ArrowUp", "mac+ArrowUp"], t._moveCaret, {
args: [2]
}], [["ArrowDown", "mac+ArrowDown"], t._moveCaret, {
args: [3]
}]]));
}
constructor(t) {
super({
...t,
name: "highlightEditor"
}), this.color = t.color || Z._defaultColor, this.#p = t.thickness || Z._defaultThickness, this.opacity = t.opacity || Z._defaultOpacity, this.#i = t.boxes || null, this.#b = t.methodOfCreation || "", this.#c = t.text || "", this._isDraggable = !1, this.defaultL10nId = "pdfjs-editor-highlight-editor", t.highlightId > -1 ? (this.#d = !0, this.#y(t), this.#w()) : this.#i && (this.#t = t.anchorNode, this.#e = t.anchorOffset, this.#n = t.focusNode, this.#o = t.focusOffset, this.#A(), this.#w(), this.rotate(this.rotation)), this.annotationElementId || this._uiManager.a11yAlert("pdfjs-editor-highlight-added-alert");
}
get telemetryInitialData() {
return {
action: "added",
type: this.#d ? "free_highlight" : "highlight",
color: this._uiManager.getNonHCMColorName(this.color),
thickness: this.#p,
methodOfCreation: this.#b
};
}
get telemetryFinalData() {
return {
type: "highlight",
color: this._uiManager.getNonHCMColorName(this.color)
};
}
static computeTelemetryFinalData(t) {
return {
numberOfColors: t.get("color").size
};
}
#A() {
const t = new xs(this.#i, 1e-3);
this.#l = t.getOutlines(), [this.x, this.y, this.width, this.height] = this.#l.box;
const e = new xs(this.#i, 25e-4, 1e-3, this._uiManager.direction === "ltr");
this.#r = e.getOutlines();
const {
firstPoint: s
} = this.#l;
this.#f = [(s[0] - this.x) / this.width, (s[1] - this.y) / this.height];
const {
lastPoint: i
} = this.#r;
this.#m = [(i[0] - this.x) / this.width, (i[1] - this.y) / this.height];
}
#y({
highlightOutlines: t,
highlightId: e,
clipPathId: s
}) {
this.#l = t;
const i = 1.5;
if (this.#r = t.getNewOutline(this.#p / 2 + i, 25e-4), e >= 0)
this.#u = e, this.#s = s, this.parent.drawLayer.finalizeDraw(e, {
bbox: t.box,
path: {
d: t.toSVGPath()
}
}), this.#g = this.parent.drawLayer.drawOutline({
rootClass: {
highlightOutline: !0,
free: !0
},
bbox: this.#r.box,
path: {
d: this.#r.toSVGPath()
}
}, !0);
else if (this.parent) {
const c = this.parent.viewport.rotation;
this.parent.drawLayer.updateProperties(this.#u, {
bbox: Z.#E(this.#l.box, (c - this.rotation + 360) % 360),
path: {
d: t.toSVGPath()
}
}), this.parent.drawLayer.updateProperties(this.#g, {
bbox: Z.#E(this.#r.box, c),
path: {
d: this.#r.toSVGPath()
}
});
}
const [n, r, a, o] = t.box;
switch (this.rotation) {
case 0:
this.x = n, this.y = r, this.width = a, this.height = o;
break;
case 90: {
const [c, u] = this.parentDimensions;
this.x = r, this.y = 1 - n, this.width = a * u / c, this.height = o * c / u;
break;
}
case 180:
this.x = 1 - n, this.y = 1 - r, this.width = a, this.height = o;
break;
case 270: {
const [c, u] = this.parentDimensions;
this.x = 1 - r, this.y = n, this.width = a * u / c, this.height = o * c / u;
break;
}
}
const {
firstPoint: l
} = t;
this.#f = [(l[0] - n) / a, (l[1] - r) / o];
const {
lastPoint: h
} = this.#r;
this.#m = [(h[0] - n) / a, (h[1] - r) / o];
}
static initialize(t, e) {
M.initialize(t, e), Z._defaultColor ||= e.highlightColors?.values().next().value || "#fff066";
}
static updateDefaultParams(t, e) {
switch (t) {
case O.HIGHLIGHT_COLOR:
Z._defaultColor = e;
break;
case O.HIGHLIGHT_THICKNESS:
Z._defaultThickness = e;
break;
}
}
translateInPage(t, e) {
}
get toolbarPosition() {
return this.#m;
}
get commentButtonPosition() {
return this.#f;
}
updateParams(t, e) {
switch (t) {
case O.HIGHLIGHT_COLOR:
this.#C(e);
break;
case O.HIGHLIGHT_THICKNESS:
this.#S(e);
break;
}
}
static get defaultPropertiesToUpdate() {
return [[O.HIGHLIGHT_COLOR, Z._defaultColor], [O.HIGHLIGHT_THICKNESS, Z._defaultThickness]];
}
get propertiesToUpdate() {
return [[O.HIGHLIGHT_COLOR, this.color || Z._defaultColor], [O.HIGHLIGHT_THICKNESS, this.#p || Z._defaultThickness], [O.HIGHLIGHT_FREE, this.#d]];
}
onUpdatedColor() {
this.parent?.drawLayer.updateProperties(this.#u, {
root: {
fill: this.color,
"fill-opacity": this.opacity
}
}), this.#a?.updateColor(this.color), super.onUpdatedColor();
}
#C(t) {
const e = (n, r) => {
this.color = n, this.opacity = r, this.onUpdatedColor();
}, s = this.color, i = this.opacity;
this.addCommands({
cmd: e.bind(this, t, Z._defaultOpacity),
undo: e.bind(this, s, i),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: !0,
type: O.HIGHLIGHT_COLOR,
overwriteIfSameType: !0,
keepUndo: !0
}), this._reportTelemetry({
action: "color_changed",
color: this._uiManager.getNonHCMColorName(t)
}, !0);
}
#S(t) {
const e = this.#p, s = (i) => {
this.#p = i, this.#v(i);
};
this.addCommands({
cmd: s.bind(this, t),
undo: s.bind(this, e),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: !0,
type: O.INK_THICKNESS,
overwriteIfSameType: !0,
keepUndo: !0
}), this._reportTelemetry({
action: "thickness_changed",
thickness: t
}, !0);
}
get toolbarButtons() {
return this._uiManager.highlightColors ? [["colorPicker", this.#a = new _t({
editor: this
})]] : super.toolbarButtons;
}
disableEditing() {
super.disableEditing(), this.div.classList.toggle("disabled", !0);
}
enableEditing() {
super.enableEditing(), this.div.classList.toggle("disabled", !1);
}
fixAndSetPosition() {
return super.fixAndSetPosition(this.#k());
}
getBaseTranslation() {
return [0, 0];
}
getRect(t, e) {
return super.getRect(t, e, this.#k());
}
onceAdded(t) {
this.annotationElementId || this.parent.addUndoableEditor(this), t && this.div.focus();
}
remove() {
this.#T(), this._reportTelemetry({
action: "deleted"
}), super.remove();
}
rebuild() {
this.parent && (super.rebuild(), this.div !== null && (this.#w(), this.isAttachedToDOM || this.parent.add(this)));
}
setParent(t) {
let e = !1;
this.parent && !t ? this.#T() : t && (this.#w(t), e = !this.parent && this.div?.classList.contains("selectedEditor")), super.setParent(t), this.show(this._isVisible), e && this.select();
}
#v(t) {
this.#d && (this.#y({
highlightOutlines: this.#l.getNewOutline(t / 2)
}), this.fixAndSetPosition(), this.setDims());
}
#T() {
this.#u === null || !this.parent || (this.parent.drawLayer.remove(this.#u), this.#u = null, this.parent.drawLayer.remove(this.#g), this.#g = null);
}
#w(t = this.parent) {
this.#u === null && ({
id: this.#u,
clipPathId: this.#s
} = t.drawLayer.draw({
bbox: this.#l.box,
root: {
viewBox: "0 0 1 1",
fill: this.color,
"fill-opacity": this.opacity
},
rootClass: {
highlight: !0,
free: this.#d
},
path: {
d: this.#l.toSVGPath()
}
}, !1, !0), this.#g = t.drawLayer.drawOutline({
rootClass: {
highlightOutline: !0,
free: this.#d
},
bbox: this.#r.box,
path: {
d: this.#r.toSVGPath()
}
}, this.#d), this.#h && (this.#h.style.clipPath = this.#s));
}
static #E([t, e, s, i], n) {
switch (n) {
case 90:
return [1 - e - i, t, i, s];
case 180:
return [1 - t - s, 1 - e - i, s, i];
case 270:
return [e, 1 - t - s, i, s];
}
return [t, e, s, i];
}
rotate(t) {
const {
drawLayer: e
} = this.parent;
let s;
this.#d ? (t = (t - this.rotation + 360) % 360, s = Z.#E(this.#l.box, t)) : s = Z.#E([this.x, this.y, this.width, this.height], t), e.updateProperties(this.#u, {
bbox: s,
root: {
"data-main-rotation": t
}
}), e.updateProperties(this.#g, {
bbox: Z.#E(this.#r.box, t),
root: {
"data-main-rotation": t
}
});
}
render() {
if (this.div)
return this.div;
const t = super.render();
this.#c && (t.setAttribute("aria-label", this.#c), t.setAttribute("role", "mark")), this.#d ? t.classList.add("free") : this.div.addEventListener("keydown", this.#M.bind(this), {
signal: this._uiManager._signal
});
const e = this.#h = document.createElement("div");
return t.append(e), e.setAttribute("aria-hidden", "true"), e.className = "internal", e.style.clipPath = this.#s, this.setDims(), Ti(this, this.#h, ["pointerover", "pointerleave"]), this.enableEditing(), t;
}
pointerover() {
this.isSelected || this.parent?.drawLayer.updateProperties(this.#g, {
rootClass: {
hovered: !0
}
});
}
pointerleave() {
this.isSelected || this.parent?.drawLayer.updateProperties(this.#g, {
rootClass: {
hovered: !1
}
});
}
#M(t) {
Z._keyboardManager.exec(this, t);
}
_moveCaret(t) {
switch (this.parent.unselect(this), t) {
case 0:
case 2:
this.#P(!0);
break;
case 1:
case 3:
this.#P(!1);
break;
}
}
#P(t) {
if (!this.#t)
return;
const e = window.getSelection();
t ? e.setPosition(this.#t, this.#e) : e.setPosition(this.#n, this.#o);
}
select() {
super.select(), this.#g && this.parent?.drawLayer.updateProperties(this.#g, {
rootClass: {
hovered: !1,
selected: !0
}
});
}
unselect() {
super.unselect(), this.#g && (this.parent?.drawLayer.updateProperties(this.#g, {
rootClass: {
selected: !1
}
}), this.#d || this.#P(!1));
}
get _mustFixPosition() {
return !this.#d;
}
show(t = this._isVisible) {
super.show(t), this.parent && (this.parent.drawLayer.updateProperties(this.#u, {
rootClass: {
hidden: !t
}
}), this.parent.drawLayer.updateProperties(this.#g, {
rootClass: {
hidden: !t
}
}));
}
#k() {
return this.#d ? this.rotation : 0;
}
#N() {
if (this.#d)
return null;
const [t, e] = this.pageDimensions, [s, i] = this.pageTranslation, n = this.#i, r = new Float32Array(n.length * 8);
let a = 0;
for (const {
x: o,
y: l,
width: h,
height: c
} of n) {
const u = o * t + s, f = (1 - l) * e + i;
r[a] = r[a + 4] = u, r[a + 1] = r[a + 3] = f, r[a + 2] = r[a + 6] = u + h * t, r[a + 5] = r[a + 7] = f - c * e, a += 8;
}
return r;
}
#D(t) {
return this.#l.serialize(t, this.#k());
}
static startHighlighting(t, e, {
target: s,
x: i,
y: n
}) {
const {
x: r,
y: a,
width: o,
height: l
} = s.getBoundingClientRect(), h = new AbortController(), c = t.combinedSignal(h), u = (f) => {
h.abort(), this.#B(t, f);
};
window.addEventListener("blur", u, {
signal: c
}), window.addEventListener("pointerup", u, {
signal: c
}), window.addEventListener("pointerdown", J, {
capture: !0,
passive: !1,
signal: c
}), window.addEventListener("contextmenu", St, {
signal: c
}), s.addEventListener("pointermove", this.#I.bind(this, t), {
signal: c
}), this._freeHighlight = new Ts({
x: i,
y: n
}, [r, a, o, l], t.scale, this._defaultThickness / 2, e, 1e-3), {
id: this._freeHighlightId,
clipPathId: this._freeHighlightClipId
} = t.drawLayer.draw({
bbox: [0, 0, 1, 1],
root: {
viewBox: "0 0 1 1",
fill: this._defaultColor,
"fill-opacity": this._defaultOpacity
},
rootClass: {
highlight: !0,
free: !0
},
path: {
d: this._freeHighlight.toSVGPath()
}
}, !0, !0);
}
static #I(t, e) {
this._freeHighlight.add(e) && t.drawLayer.updateProperties(this._freeHighlightId, {
path: {
d: this._freeHighlight.toSVGPath()
}
});
}
static #B(t, e) {
this._freeHighlight.isEmpty() ? t.drawLayer.remove(this._freeHighlightId) : t.createAndAddNewEditor(e, !1, {
highlightId: this._freeHighlightId,
highlightOutlines: this._freeHighlight.getOutlines(),
clipPathId: this._freeHighlightClipId,
methodOfCreation: "main_toolbar"
}), this._freeHighlightId = -1, this._freeHighlight = null, this._freeHighlightClipId = "";
}
static async deserialize(t, e, s) {
let i = null;
if (t instanceof qi) {
const {
data: {
quadPoints: g,
rect: p,
rotation: b,
id: m,
color: A,
opacity: y,
popupRef: _,
richText: w,
contentsObj: v,
creationDate: S,
modificationDate: E
},
parent: {
page: {
pageNumber: C
}
}
} = t;
i = t = {
annotationType: F.HIGHLIGHT,
color: Array.from(A),
opacity: y,
quadPoints: g,
boxes: null,
pageIndex: C - 1,
rect: p.slice(0),
rotation: b,
annotationElementId: m,
id: m,
deleted: !1,
popupRef: _,
richText: w,
comment: v?.str || null,
creationDate: S,
modificationDate: E
};
} else if (t instanceof Us) {
const {
data: {
inkLists: g,
rect: p,
rotation: b,
id: m,
color: A,
borderStyle: {
rawWidth: y
},
popupRef: _,
richText: w,
contentsObj: v,
creationDate: S,
modificationDate: E
},
parent: {
page: {
pageNumber: C
}
}
} = t;
i = t = {
annotationType: F.HIGHLIGHT,
color: Array.from(A),
thickness: y,
inkLists: g,
boxes: null,
pageIndex: C - 1,
rect: p.slice(0),
rotation: b,
annotationElementId: m,
id: m,
deleted: !1,
popupRef: _,
richText: w,
comment: v?.str || null,
creationDate: S,
modificationDate: E
};
}
const {
color: n,
quadPoints: r,
inkLists: a,
opacity: o
} = t, l = await super.deserialize(t, e, s);
l.color = P.makeHexColor(...n), l.opacity = o || 1, a && (l.#p = t.thickness), l._initialData = i, t.comment && l.setCommentData(t);
const [h, c] = l.pageDimensions, [u, f] = l.pageTranslation;
if (r) {
const g = l.#i = [];
for (let p = 0; p < r.length; p += 8)
g.push({
x: (r[p] - u) / h,
y: 1 - (r[p + 1] - f) / c,
width: (r[p + 2] - r[p]) / h,
height: (r[p + 1] - r[p + 5]) / c
});
l.#A(), l.#w(), l.rotate(l.rotation);
} else if (a) {
l.#d = !0;
const g = a[0], p = {
x: g[0] - u,
y: c - (g[1] - f)
}, b = new Ts(p, [0, 0, h, c], 1, l.#p / 2, !0, 1e-3);
for (let y = 0, _ = g.length; y < _; y += 2)
p.x = g[y] - u, p.y = c - (g[y + 1] - f), b.add(p);
const {
id: m,
clipPathId: A
} = e.drawLayer.draw({
bbox: [0, 0, 1, 1],
root: {
viewBox: "0 0 1 1",
fill: l.color,
"fill-opacity": l._defaultOpacity
},
rootClass: {
highlight: !0,
free: !0
},
path: {
d: b.toSVGPath()
}
}, !0, !0);
l.#y({
highlightOutlines: b.getOutlines(),
highlightId: m,
clipPathId: A
}), l.#w(), l.rotate(l.parentRotation);
}
return l;
}
serialize(t = !1) {
if (this.isEmpty() || t)
return null;
if (this.deleted)
return this.serializeDeleted();
const e = M._colorManager.convert(this._uiManager.getNonHCMColor(this.color)), s = super.serialize(t);
return Object.assign(s, {
color: e,
opacity: this.opacity,
thickness: this.#p,
quadPoints: this.#N(),
outlines: this.#D(s.rect)
}), this.addComment(s), this.annotationElementId && !this.#F(s) ? null : (s.id = this.annotationElementId, s);
}
#F(t) {
const {
color: e
} = this._initialData;
return this.hasEditedComment || t.color.some((s, i) => s !== e[i]);
}
renderAnnotationElement(t) {
return this.deleted ? (t.hide(), null) : (t.updateEdited({
rect: this.getPDFRect(),
popup: this.comment
}), null);
}
static canCreateNewEmptyEditor() {
return !1;
}
}
class Qi {
#t = /* @__PURE__ */ Object.create(null);
updateProperty(t, e) {
this[t] = e, this.updateSVGProperty(t, e);
}
updateProperties(t) {
if (t)
for (const [e, s] of Object.entries(t))
e.startsWith("_") || this.updateProperty(e, s);
}
updateSVGProperty(t, e) {
this.#t[t] = e;
}
toSVGProperties() {
const t = this.#t;
return this.#t = /* @__PURE__ */ Object.create(null), {
root: t
};
}
reset() {
this.#t = /* @__PURE__ */ Object.create(null);
}
updateAll(t = this) {
this.updateProperties(t);
}
clone() {
V("Not implemented");
}
}
class U extends M {
#t = null;
#e;
_colorPicker = null;
_drawId = null;
static _currentDrawId = -1;
static _currentParent = null;
static #i = null;
static #s = null;
static #a = null;
static _INNER_MARGIN = 3;
constructor(t) {
super(t), this.#e = t.mustBeCommitted || !1, this._addOutlines(t);
}
onUpdatedColor() {
this._colorPicker?.update(this.color), super.onUpdatedColor();
}
_addOutlines(t) {
t.drawOutlines && (this.#r(t), this.#h());
}
#r({
drawOutlines: t,
drawId: e,
drawingOptions: s
}) {
this.#t = t, this._drawingOptions ||= s, this.annotationElementId || this._uiManager.a11yAlert(`pdfjs-editor-${this.editorType}-added-alert`), e >= 0 ? (this._drawId = e, this.parent.drawLayer.finalizeDraw(e, t.defaultProperties)) : this._drawId = this.#n(t, this.parent), this.#d(t.box);
}
#n(t, e) {
const {
id: s
} = e.drawLayer.draw(U._mergeSVGProperties(this._drawingOptions.toSVGProperties(), t.defaultSVGProperties), !1, !1);
return s;
}
static _mergeSVGProperties(t, e) {
const s = new Set(Object.keys(t));
for (const [i, n] of Object.entries(e))
s.has(i) ? Object.assign(t[i], n) : t[i] = n;
return t;
}
static getDefaultDrawingOptions(t) {
V("Not implemented");
}
static get typesMap() {
V("Not implemented");
}
static get isDrawer() {
return !0;
}
static get supportMultipleDrawings() {
return !1;
}
static updateDefaultParams(t, e) {
const s = this.typesMap.get(t);
s && this._defaultDrawingOptions.updateProperty(s, e), this._currentParent && (U.#i.updateProperty(s, e), this._currentParent.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties()));
}
updateParams(t, e) {
const s = this.constructor.typesMap.get(t);
s && this._updateProperty(t, s, e);
}
static get defaultPropertiesToUpdate() {
const t = [], e = this._defaultDrawingOptions;
for (const [s, i] of this.typesMap)
t.push([s, e[i]]);
return t;
}
get propertiesToUpdate() {
const t = [], {
_drawingOptions: e
} = this;
for (const [s, i] of this.constructor.typesMap)
t.push([s, e[i]]);
return t;
}
_updateProperty(t, e, s) {
const i = this._drawingOptions, n = i[e], r = (a) => {
i.updateProperty(e, a);
const o = this.#t.updateProperty(e, a);
o && this.#d(o), this.parent?.drawLayer.updateProperties(this._drawId, i.toSVGProperties()), t === this.colorType && this.onUpdatedColor();
};
this.addCommands({
cmd: r.bind(this, s),
undo: r.bind(this, n),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: !0,
type: t,
overwriteIfSameType: !0,
keepUndo: !0
});
}
_onResizing() {
this.parent?.drawLayer.updateProperties(this._drawId, U._mergeSVGProperties(this.#t.getPathResizingSVGProperties(this.#u()), {
bbox: this.#f()
}));
}
_onResized() {
this.parent?.drawLayer.updateProperties(this._drawId, U._mergeSVGProperties(this.#t.getPathResizedSVGProperties(this.#u()), {
bbox: this.#f()
}));
}
_onTranslating(t, e) {
this.parent?.drawLayer.updateProperties(this._drawId, {
bbox: this.#f()
});
}
_onTranslated() {
this.parent?.drawLayer.updateProperties(this._drawId, U._mergeSVGProperties(this.#t.getPathTranslatedSVGProperties(this.#u(), this.parentDimensions), {
bbox: this.#f()
}));
}
_onStartDragging() {
this.parent?.drawLayer.updateProperties(this._drawId, {
rootClass: {
moving: !0
}
});
}
_onStopDragging() {
this.parent?.drawLayer.updateProperties(this._drawId, {
rootClass: {
moving: !1
}
});
}
commit() {
super.commit(), this.disableEditMode(), this.disableEditing();
}
disableEditing() {
super.disableEditing(), this.div.classList.toggle("disabled", !0);
}
enableEditing() {
super.enableEditing(), this.div.classList.toggle("disabled", !1);
}
getBaseTranslation() {
return [0, 0];
}
get isResizable() {
return !0;
}
onceAdded(t) {
this.annotationElementId || this.parent.addUndoableEditor(this), this._isDraggable = !0, this.#e && (this.#e = !1, this.commit(), this.parent.setSelected(this), t && this.isOnScreen && this.div.focus());
}
remove() {
this.#o(), super.remove();
}
rebuild() {
this.parent && (super.rebuild(), this.div !== null && (this.#h(), this.#d(this.#t.box), this.isAttachedToDOM || this.parent.add(this)));
}
setParent(t) {
let e = !1;
this.parent && !t ? (this._uiManager.removeShouldRescale(this), this.#o()) : t && (this._uiManager.addShouldRescale(this), this.#h(t), e = !this.parent && this.div?.classList.contains("selectedEditor")), super.setParent(t), e && this.select();
}
#o() {
this._drawId === null || !this.parent || (this.parent.drawLayer.remove(this._drawId), this._drawId = null, this._drawingOptions.reset());
}
#h(t = this.parent) {
if (!(this._drawId !== null && this.parent === t)) {
if (this._drawId !== null) {
this.parent.drawLayer.updateParent(this._drawId, t.drawLayer);
return;
}
this._drawingOptions.updateAll(), this._drawId = this.#n(this.#t, t);
}
}
#l([t, e, s, i]) {
const {
parentDimensions: [n, r],
rotation: a
} = this;
switch (a) {
case 90:
return [e, 1 - t, s * (r / n), i * (n / r)];
case 180:
return [1 - t, 1 - e, s, i];
case 270:
return [1 - e, t, s * (r / n), i * (n / r)];
default:
return [t, e, s, i];
}
}
#u() {
const {
x: t,
y: e,
width: s,
height: i,
parentDimensions: [n, r],
rotation: a
} = this;
switch (a) {
case 90:
return [1 - e, t, s * (n / r), i * (r / n)];
case 180:
return [1 - t, 1 - e, s, i];
case 270:
return [e, 1 - t, s * (n / r), i * (r / n)];
default:
return [t, e, s, i];
}
}
#d(t) {
[this.x, this.y, this.width, this.height] = this.#l(t), this.div && (this.fixAndSetPosition(), this.setDims()), this._onResized();
}
#f() {
const {
x: t,
y: e,
width: s,
height: i,
rotation: n,
parentRotation: r,
parentDimensions: [a, o]
} = this;
switch ((n * 4 + r) / 90) {
case 1:
return [1 - e - i, t, i, s];
case 2:
return [1 - t - s, 1 - e - i, s, i];
case 3:
return [e, 1 - t - s, i, s];
case 4:
return [t, e - s * (a / o), i * (o / a), s * (a / o)];
case 5:
return [1 - e, t, s * (a / o), i * (o / a)];
case 6:
return [1 - t - i * (o / a), 1 - e, i * (o / a), s * (a / o)];
case 7:
return [e - s * (a / o), 1 - t - i * (o / a), s * (a / o), i * (o / a)];
case 8:
return [t - s, e - i, s, i];
case 9:
return [1 - e, t - s, i, s];
case 10:
return [1 - t, 1 - e, s, i];
case 11:
return [e - i, 1 - t, i, s];
case 12:
return [t - i * (o / a), e, i * (o / a), s * (a / o)];
case 13:
return [1 - e - s * (a / o), t - i * (o / a), s * (a / o), i * (o / a)];
case 14:
return [1 - t, 1 - e - s * (a / o), i * (o / a), s * (a / o)];
case 15:
return [e, 1 - t, s * (a / o), i * (o / a)];
default:
return [t, e, s, i];
}
}
rotate() {
this.parent && this.parent.drawLayer.updateProperties(this._drawId, U._mergeSVGProperties({
bbox: this.#f()
}, this.#t.updateRotation((this.parentRotation - this.rotation + 360) % 360)));
}
onScaleChanging() {
this.parent && this.#d(this.#t.updateParentDimensions(this.parentDimensions, this.parent.scale));
}
static onScaleChangingWhenDrawing() {
}
render() {
if (this.div)
return this.div;
let t, e;
this._isCopy && (t = this.x, e = this.y);
const s = super.render();
s.classList.add("draw");
const i = document.createElement("div");
return s.append(i), i.setAttribute("aria-hidden", "true"), i.className = "internal", this.setDims(), this._uiManager.addShouldRescale(this), this.disableEditing(), this._isCopy && this._moveAfterPaste(t, e), s;
}
static createDrawerInstance(t, e, s, i, n) {
V("Not implemented");
}
static startDrawing(t, e, s, i) {
const {
target: n,
offsetX: r,
offsetY: a,
pointerId: o,
pointerType: l
} = i;
if (H.isInitializedAndDifferentPointerType(l))
return;
const {
viewport: {
rotation: h
}
} = t, {
width: c,
height: u
} = n.getBoundingClientRect(), f = U.#s = new AbortController(), g = t.combinedSignal(f);
if (H.setPointer(l, o), window.addEventListener("pointerup", (p) => {
H.isSamePointerIdOrRemove(p.pointerId) && this._endDraw(p);
}, {
signal: g
}), window.addEventListener("pointercancel", (p) => {
H.isSamePointerIdOrRemove(p.pointerId) && this._currentParent.endDrawingSession();
}, {
signal: g
}), window.addEventListener("pointerdown", (p) => {
H.isSamePointerType(p.pointerType) && (H.initializeAndAddPointerId(p.pointerId), U.#i.isCancellable() && (U.#i.removeLastElement(), U.#i.isEmpty() ? this._currentParent.endDrawingSession(!0) : this._endDraw(null)));
}, {
capture: !0,
passive: !1,
signal: g
}), window.addEventListener("contextmenu", St, {
signal: g
}), n.addEventListener("pointermove", this._drawMove.bind(this), {
signal: g
}), n.addEventListener("touchmove", (p) => {
H.isSameTimeStamp(p.timeStamp) && J(p);
}, {
signal: g
}), t.toggleDrawing(), e._editorUndoBar?.hide(), U.#i) {
t.drawLayer.updateProperties(this._currentDrawId, U.#i.startNew(r, a, c, u, h));
return;
}
e.updateUIForDefaultProperties(this), U.#i = this.createDrawerInstance(r, a, c, u, h), U.#a = this.getDefaultDrawingOptions(), this._currentParent = t, {
id: this._currentDrawId
} = t.drawLayer.draw(this._mergeSVGProperties(U.#a.toSVGProperties(), U.#i.defaultSVGProperties), !0, !1);
}
static _drawMove(t) {
if (H.isSameTimeStamp(t.timeStamp), !U.#i)
return;
const {
offsetX: e,
offsetY: s,
pointerId: i
} = t;
if (H.isSamePointerId(i)) {
if (H.isUsingMultiplePointers()) {
this._endDraw(t);
return;
}
this._currentParent.drawLayer.updateProperties(this._currentDrawId, U.#i.add(e, s)), H.setTimeStamp(t.timeStamp), J(t);
}
}
static _cleanup(t) {
t && (this._currentDrawId = -1, this._currentParent = null, U.#i = null, U.#a = null, H.clearPointerType(), H.clearTimeStamp()), U.#s && (U.#s.abort(), U.#s = null, H.clearPointerIds());
}
static _endDraw(t) {
const e = this._currentParent;
if (e) {
if (e.toggleDrawing(!0), this._cleanup(!1), t?.target === e.div && e.drawLayer.updateProperties(this._currentDrawId, U.#i.end(t.offsetX, t.offsetY)), this.supportMultipleDrawings) {
const s = U.#i, i = this._currentDrawId, n = s.getLastElement();
e.addCommands({
cmd: () => {
e.drawLayer.updateProperties(i, s.setLastElement(n));
},
undo: () => {
e.drawLayer.updateProperties(i, s.removeLastElement());
},
mustExec: !1,
type: O.DRAW_STEP
});
return;
}
this.endDrawing(!1);
}
}
static endDrawing(t) {
const e = this._currentParent;
if (!e)
return null;
if (e.toggleDrawing(!0), e.cleanUndoStack(O.DRAW_STEP), !U.#i.isEmpty()) {
const {
pageDimensions: [s, i],
scale: n
} = e, r = e.createAndAddNewEditor({
offsetX: 0,
offsetY: 0
}, !1, {
drawId: this._currentDrawId,
drawOutlines: U.#i.getOutlines(s * n, i * n, n, this._INNER_MARGIN),
drawingOptions: U.#a,
mustBeCommitted: !t
});
return this._cleanup(!0), r;
}
return e.drawLayer.remove(this._currentDrawId), this._cleanup(!0), null;
}
createDrawingOptions(t) {
}
static deserializeDraw(t, e, s, i, n, r) {
V("Not implemented");
}
static async deserialize(t, e, s) {
const {
rawDims: {
pageWidth: i,
pageHeight: n,
pageX: r,
pageY: a
}
} = e.viewport, o = this.deserializeDraw(r, a, i, n, this._INNER_MARGIN, t), l = await super.deserialize(t, e, s);
return l.createDrawingOptions(t), l.#r({
drawOutlines: o
}), l.#h(), l.onScaleChanging(), l.rotate(), l;
}
serializeDraw(t) {
const [e, s] = this.pageTranslation, [i, n] = this.pageDimensions;
return this.#t.serialize([e, s, i, n], t);
}
renderAnnotationElement(t) {
return t.updateEdited({
rect: this.getPDFRect()
}), null;
}
static canCreateNewEmptyEditor() {
return !1;
}
}
class Jr {
#t = new Float64Array(6);
#e;
#i;
#s;
#a;
#r;
#n = "";
#o = 0;
#h = new Le();
#l;
#u;
constructor(t, e, s, i, n, r) {
this.#l = s, this.#u = i, this.#s = n, this.#a = r, [t, e] = this.#d(t, e);
const a = this.#e = [NaN, NaN, NaN, NaN, t, e];
this.#r = [t, e], this.#i = [{
line: a,
points: this.#r
}], this.#t.set(a, 0);
}
updateProperty(t, e) {
t === "stroke-width" && (this.#a = e);
}
#d(t, e) {
return x._normalizePoint(t, e, this.#l, this.#u, this.#s);
}
isEmpty() {
return !this.#i || this.#i.length === 0;
}
isCancellable() {
return this.#r.length <= 10;
}
add(t, e) {
[t, e] = this.#d(t, e);
const [s, i, n, r] = this.#t.subarray(2, 6), a = t - n, o = e - r;
return Math.hypot(this.#l * a, this.#u * o) <= 2 ? null : (this.#r.push(t, e), isNaN(s) ? (this.#t.set([n, r, t, e], 2), this.#e.push(NaN, NaN, NaN, NaN, t, e), {
path: {
d: this.toSVGPath()
}
}) : (isNaN(this.#t[0]) && this.#e.splice(6, 6), this.#t.set([s, i, n, r, t, e], 0), this.#e.push(...x.createBezierPoints(s, i, n, r, t, e)), {
path: {
d: this.toSVGPath()
}
}));
}
end(t, e) {
const s = this.add(t, e);
return s || (this.#r.length === 2 ? {
path: {
d: this.toSVGPath()
}
} : null);
}
startNew(t, e, s, i, n) {
this.#l = s, this.#u = i, this.#s = n, [t, e] = this.#d(t, e);
const r = this.#e = [NaN, NaN, NaN, NaN, t, e];
this.#r = [t, e];
const a = this.#i.at(-1);
return a && (a.line = new Float32Array(a.line), a.points = new Float32Array(a.points)), this.#i.push({
line: r,
points: this.#r
}), this.#t.set(r, 0), this.#o = 0, this.toSVGPath(), null;
}
getLastElement() {
return this.#i.at(-1);
}
setLastElement(t) {
return this.#i ? (this.#i.push(t), this.#e = t.line, this.#r = t.points, this.#o = 0, {
path: {
d: this.toSVGPath()
}
}) : this.#h.setLastElement(t);
}
removeLastElement() {
if (!this.#i)
return this.#h.removeLastElement();
this.#i.pop(), this.#n = "";
for (let t = 0, e = this.#i.length; t < e; t++) {
const {
line: s,
points: i
} = this.#i[t];
this.#e = s, this.#r = i, this.#o = 0, this.toSVGPath();
}
return {
path: {
d: this.#n
}
};
}
toSVGPath() {
const t = x.svgRound(this.#e[4]), e = x.svgRound(this.#e[5]);
if (this.#r.length === 2)
return this.#n = `${this.#n} M ${t} ${e} Z`, this.#n;
if (this.#r.length <= 6) {
const i = this.#n.lastIndexOf("M");
this.#n = `${this.#n.slice(0, i)} M ${t} ${e}`, this.#o = 6;
}
if (this.#r.length === 4) {
const i = x.svgRound(this.#e[10]), n = x.svgRound(this.#e[11]);
return this.#n = `${this.#n} L ${i} ${n}`, this.#o = 12, this.#n;
}
const s = [];
this.#o === 0 && (s.push(`M ${t} ${e}`), this.#o = 6);
for (let i = this.#o, n = this.#e.length; i < n; i += 6) {
const [r, a, o, l, h, c] = this.#e.slice(i, i + 6).map(x.svgRound);
s.push(`C${r} ${a} ${o} ${l} ${h} ${c}`);
}
return this.#n += s.join(" "), this.#o = this.#e.length, this.#n;
}
getOutlines(t, e, s, i) {
const n = this.#i.at(-1);
return n.line = new Float32Array(n.line), n.points = new Float32Array(n.points), this.#h.build(this.#i, t, e, s, this.#s, this.#a, i), this.#t = null, this.#e = null, this.#i = null, this.#n = null, this.#h;
}
get defaultSVGProperties() {
return {
root: {
viewBox: "0 0 10000 10000"
},
rootClass: {
draw: !0
},
bbox: [0, 0, 1, 1]
};
}
}
class Le extends x {
#t;
#e = 0;
#i;
#s;
#a;
#r;
#n;
#o;
#h;
build(t, e, s, i, n, r, a) {
this.#a = e, this.#r = s, this.#n = i, this.#o = n, this.#h = r, this.#i = a ?? 0, this.#s = t, this.#d();
}
get thickness() {
return this.#h;
}
setLastElement(t) {
return this.#s.push(t), {
path: {
d: this.toSVGPath()
}
};
}
removeLastElement() {
return this.#s.pop(), {
path: {
d: this.toSVGPath()
}
};
}
toSVGPath() {
const t = [];
for (const {
line: e
} of this.#s) {
if (t.push(`M${x.svgRound(e[4])} ${x.svgRound(e[5])}`), e.length === 6) {
t.push("Z");
continue;
}
if (e.length === 12 && isNaN(e[6])) {
t.push(`L${x.svgRound(e[10])} ${x.svgRound(e[11])}`);
continue;
}
for (let s = 6, i = e.length; s < i; s += 6) {
const [n, r, a, o, l, h] = e.subarray(s, s + 6).map(x.svgRound);
t.push(`C${n} ${r} ${a} ${o} ${l} ${h}`);
}
}
return t.join("");
}
serialize([t, e, s, i], n) {
const r = [], a = [], [o, l, h, c] = this.#u();
let u, f, g, p, b, m, A, y, _;
switch (this.#o) {
case 0:
_ = x._rescale, u = t, f = e + i, g = s, p = -i, b = t + o * s, m = e + (1 - l - c) * i, A = t + (o + h) * s, y = e + (1 - l) * i;
break;
case 90:
_ = x._rescaleAndSwap, u = t, f = e, g = s, p = i, b = t + l * s, m = e + o * i, A = t + (l + c) * s, y = e + (o + h) * i;
break;
case 180:
_ = x._rescale, u = t + s, f = e, g = -s, p = i, b = t + (1 - o - h) * s, m = e + l * i, A = t + (1 - o) * s, y = e + (l + c) * i;
break;
case 270:
_ = x._rescaleAndSwap, u = t + s, f = e + i, g = -s, p = -i, b = t + (1 - l - c) * s, m = e + (1 - o - h) * i, A = t + (1 - l) * s, y = e + (1 - o) * i;
break;
}
for (const {
line: w,
points: v
} of this.#s)
r.push(_(w, u, f, g, p, n ? new Array(w.length) : null)), a.push(_(v, u, f, g, p, n ? new Array(v.length) : null));
return {
lines: r,
points: a,
rect: [b, m, A, y]
};
}
static deserialize(t, e, s, i, n, {
paths: {
lines: r,
points: a
},
rotation: o,
thickness: l
}) {
const h = [];
let c, u, f, g, p;
switch (o) {
case 0:
p = x._rescale, c = -t / s, u = e / i + 1, f = 1 / s, g = -1 / i;
break;
case 90:
p = x._rescaleAndSwap, c = -e / i, u = -t / s, f = 1 / i, g = 1 / s;
break;
case 180:
p = x._rescale, c = t / s + 1, u = -e / i, f = -1 / s, g = 1 / i;
break;
case 270:
p = x._rescaleAndSwap, c = e / i + 1, u = t / s + 1, f = -1 / i, g = -1 / s;
break;
}
if (!r) {
r = [];
for (const m of a) {
const A = m.length;
if (A === 2) {
r.push(new Float32Array([NaN, NaN, NaN, NaN, m[0], m[1]]));
continue;
}
if (A === 4) {
r.push(new Float32Array([NaN, NaN, NaN, NaN, m[0], m[1], NaN, NaN, NaN, NaN, m[2], m[3]]));
continue;
}
const y = new Float32Array(3 * (A - 2));
r.push(y);
let [_, w, v, S] = m.subarray(0, 4);
y.set([NaN, NaN, NaN, NaN, _, w], 0);
for (let E = 4; E < A; E += 2) {
const C = m[E], k = m[E + 1];
y.set(x.createBezierPoints(_, w, v, S, C, k), (E - 2) * 3), [_, w, v, S] = [v, S, C, k];
}
}
}
for (let m = 0, A = r.length; m < A; m++)
h.push({
line: p(r[m].map((y) => y ?? NaN), c, u, f, g),
points: p(a[m].map((y) => y ?? NaN), c, u, f, g)
});
const b = new this.prototype.constructor();
return b.build(h, s, i, 1, o, l, n), b;
}
#l(t = this.#h) {
const e = this.#i + t / 2 * this.#n;
return this.#o % 180 === 0 ? [e / this.#a, e / this.#r] : [e / this.#r, e / this.#a];
}
#u() {
const [t, e, s, i] = this.#t, [n, r] = this.#l(0);
return [t + n, e + r, s - 2 * n, i - 2 * r];
}
#d() {
const t = this.#t = new Float32Array([1 / 0, 1 / 0, -1 / 0, -1 / 0]);
for (const {
line: i
} of this.#s) {
if (i.length <= 12) {
for (let a = 4, o = i.length; a < o; a += 6)
P.pointBoundingBox(i[a], i[a + 1], t);
continue;
}
let n = i[4], r = i[5];
for (let a = 6, o = i.length; a < o; a += 6) {
const [l, h, c, u, f, g] = i.subarray(a, a + 6);
P.bezierBoundingBox(n, r, l, h, c, u, f, g, t), n = f, r = g;
}
}
const [e, s] = this.#l();
t[0] = ft(t[0] - e, 0, 1), t[1] = ft(t[1] - s, 0, 1), t[2] = ft(t[2] + e, 0, 1), t[3] = ft(t[3] + s, 0, 1), t[2] -= t[0], t[3] -= t[1];
}
get box() {
return this.#t;
}
updateProperty(t, e) {
return t === "stroke-width" ? this.#f(e) : null;
}
#f(t) {
const [e, s] = this.#l();
this.#h = t;
const [i, n] = this.#l(), [r, a] = [i - e, n - s], o = this.#t;
return o[0] -= r, o[1] -= a, o[2] += 2 * r, o[3] += 2 * a, o;
}
updateParentDimensions([t, e], s) {
const [i, n] = this.#l();
this.#a = t, this.#r = e, this.#n = s;
const [r, a] = this.#l(), o = r - i, l = a - n, h = this.#t;
return h[0] -= o, h[1] -= l, h[2] += 2 * o, h[3] += 2 * l, h;
}
updateRotation(t) {
return this.#e = t, {
path: {
transform: this.rotationTransform
}
};
}
get viewBox() {
return this.#t.map(x.svgRound).join(" ");
}
get defaultProperties() {
const [t, e] = this.#t;
return {
root: {
viewBox: this.viewBox
},
path: {
"transform-origin": `${x.svgRound(t)} ${x.svgRound(e)}`
}
};
}
get rotationTransform() {
const [, , t, e] = this.#t;
let s = 0, i = 0, n = 0, r = 0, a = 0, o = 0;
switch (this.#e) {
case 90:
i = e / t, n = -t / e, a = t;
break;
case 180:
s = -1, r = -1, a = t, o = e;
break;
case 270:
i = -e / t, n = t / e, o = e;
break;
default:
return "";
}
return `matrix(${s} ${i} ${n} ${r} ${x.svgRound(a)} ${x.svgRound(o)})`;
}
getPathResizingSVGProperties([t, e, s, i]) {
const [n, r] = this.#l(), [a, o, l, h] = this.#t;
if (Math.abs(l - n) <= x.PRECISION || Math.abs(h - r) <= x.PRECISION) {
const p = t + s / 2 - (a + l / 2), b = e + i / 2 - (o + h / 2);
return {
path: {
"transform-origin": `${x.svgRound(t)} ${x.svgRound(e)}`,
transform: `${this.rotationTransform} translate(${p} ${b})`
}
};
}
const c = (s - 2 * n) / (l - 2 * n), u = (i - 2 * r) / (h - 2 * r), f = l / s, g = h / i;
return {
path: {
"transform-origin": `${x.svgRound(a)} ${x.svgRound(o)}`,
transform: `${this.rotationTransform} scale(${f} ${g}) translate(${x.svgRound(n)} ${x.svgRound(r)}) scale(${c} ${u}) translate(${x.svgRound(-n)} ${x.svgRound(-r)})`
}
};
}
getPathResizedSVGProperties([t, e, s, i]) {
const [n, r] = this.#l(), a = this.#t, [o, l, h, c] = a;
if (a[0] = t, a[1] = e, a[2] = s, a[3] = i, Math.abs(h - n) <= x.PRECISION || Math.abs(c - r) <= x.PRECISION) {
const b = t + s / 2 - (o + h / 2), m = e + i / 2 - (l + c / 2);
for (const {
line: A,
points: y
} of this.#s)
x._translate(A, b, m, A), x._translate(y, b, m, y);
return {
root: {
viewBox: this.viewBox
},
path: {
"transform-origin": `${x.svgRound(t)} ${x.svgRound(e)}`,
transform: this.rotationTransform || null,
d: this.toSVGPath()
}
};
}
const u = (s - 2 * n) / (h - 2 * n), f = (i - 2 * r) / (c - 2 * r), g = -u * (o + n) + t + n, p = -f * (l + r) + e + r;
if (u !== 1 || f !== 1 || g !== 0 || p !== 0)
for (const {
line: b,
points: m
} of this.#s)
x._rescale(b, g, p, u, f, b), x._rescale(m, g, p, u, f, m);
return {
root: {
viewBox: this.viewBox
},
path: {
"transform-origin": `${x.svgRound(t)} ${x.svgRound(e)}`,
transform: this.rotationTransform || null,
d: this.toSVGPath()
}
};
}
getPathTranslatedSVGProperties([t, e], s) {
const [i, n] = s, r = this.#t, a = t - r[0], o = e - r[1];
if (this.#a === i && this.#r === n)
for (const {
line: l,
points: h
} of this.#s)
x._translate(l, a, o, l), x._translate(h, a, o, h);
else {
const l = this.#a / i, h = this.#r / n;
this.#a = i, this.#r = n;
for (const {
line: c,
points: u
} of this.#s)
x._rescale(c, a, o, l, h, c), x._rescale(u, a, o, l, h, u);
r[2] *= l, r[3] *= h;
}
return r[0] = t, r[1] = e, {
root: {
viewBox: this.viewBox
},
path: {
d: this.toSVGPath(),
"transform-origin": `${x.svgRound(t)} ${x.svgRound(e)}`
}
};
}
get defaultSVGProperties() {
const t = this.#t;
return {
root: {
viewBox: this.viewBox
},
rootClass: {
draw: !0
},
path: {
d: this.toSVGPath(),
"transform-origin": `${x.svgRound(t[0])} ${x.svgRound(t[1])}`,
transform: this.rotationTransform || null
},
bbox: t
};
}
}
class ss extends Qi {
constructor(t) {
super(), this._viewParameters = t, super.updateProperties({
fill: "none",
stroke: M._defaultLineColor,
"stroke-opacity": 1,
"stroke-width": 1,
"stroke-linecap": "round",
"stroke-linejoin": "round",
"stroke-miterlimit": 10
});
}
updateSVGProperty(t, e) {
t === "stroke-width" && (e ??= this["stroke-width"], e *= this._viewParameters.realScale), super.updateSVGProperty(t, e);
}
clone() {
const t = new ss(this._viewParameters);
return t.updateAll(this), t;
}
}
class $s extends U {
static _type = "ink";
static _editorType = F.INK;
static _defaultDrawingOptions = null;
constructor(t) {
super({
...t,
name: "inkEditor"
}), this._willKeepAspectRatio = !0, this.defaultL10nId = "pdfjs-editor-ink-editor";
}
static initialize(t, e) {
M.initialize(t, e), this._defaultDrawingOptions = new ss(e.viewParameters);
}
static getDefaultDrawingOptions(t) {
const e = this._defaultDrawingOptions.clone();
return e.updateProperties(t), e;
}
static get supportMultipleDrawings() {
return !0;
}
static get typesMap() {
return I(this, "typesMap", /* @__PURE__ */ new Map([[O.INK_THICKNESS, "stroke-width"], [O.INK_COLOR, "stroke"], [O.INK_OPACITY, "stroke-opacity"]]));
}
static createDrawerInstance(t, e, s, i, n) {
return new Jr(t, e, s, i, n, this._defaultDrawingOptions["stroke-width"]);
}
static deserializeDraw(t, e, s, i, n, r) {
return Le.deserialize(t, e, s, i, n, r);
}
static async deserialize(t, e, s) {
let i = null;
if (t instanceof Us) {
const {
data: {
inkLists: r,
rect: a,
rotation: o,
id: l,
color: h,
opacity: c,
borderStyle: {
rawWidth: u
},
popupRef: f,
richText: g,
contentsObj: p,
creationDate: b,
modificationDate: m
},
parent: {
page: {
pageNumber: A
}
}
} = t;
i = t = {
annotationType: F.INK,
color: Array.from(h),
thickness: u,
opacity: c,
paths: {
points: r
},
boxes: null,
pageIndex: A - 1,
rect: a.slice(0),
rotation: o,
annotationElementId: l,
id: l,
deleted: !1,
popupRef: f,
richText: g,
comment: p?.str || null,
creationDate: b,
modificationDate: m
};
}
const n = await super.deserialize(t, e, s);
return n._initialData = i, t.comment && n.setCommentData(t), n;
}
get toolbarButtons() {
return this._colorPicker ||= new xe(this), [["colorPicker", this._colorPicker]];
}
get colorType() {
return O.INK_COLOR;
}
get color() {
return this._drawingOptions.stroke;
}
get opacity() {
return this._drawingOptions["stroke-opacity"];
}
onScaleChanging() {
if (!this.parent)
return;
super.onScaleChanging();
const {
_drawId: t,
_drawingOptions: e,
parent: s
} = this;
e.updateSVGProperty("stroke-width"), s.drawLayer.updateProperties(t, e.toSVGProperties());
}
static onScaleChangingWhenDrawing() {
const t = this._currentParent;
t && (super.onScaleChangingWhenDrawing(), this._defaultDrawingOptions.updateSVGProperty("stroke-width"), t.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties()));
}
createDrawingOptions({
color: t,
thickness: e,
opacity: s
}) {
this._drawingOptions = $s.getDefaultDrawingOptions({
stroke: P.makeHexColor(...t),
"stroke-width": e,
"stroke-opacity": s
});
}
serialize(t = !1) {
if (this.isEmpty())
return null;
if (this.deleted)
return this.serializeDeleted();
const {
lines: e,
points: s
} = this.serializeDraw(t), {
_drawingOptions: {
stroke: i,
"stroke-opacity": n,
"stroke-width": r
}
} = this, a = Object.assign(super.serialize(t), {
color: M._colorManager.convert(i),
opacity: n,
thickness: r,
paths: {
lines: e,
points: s
}
});
return this.addComment(a), t ? (a.isCopy = !0, a) : this.annotationElementId && !this.#t(a) ? null : (a.id = this.annotationElementId, a);
}
#t(t) {
const {
color: e,
thickness: s,
opacity: i,
pageIndex: n
} = this._initialData;
return this.hasEditedComment || this._hasBeenMoved || this._hasBeenResized || t.color.some((r, a) => r !== e[a]) || t.thickness !== s || t.opacity !== i || t.pageIndex !== n;
}
renderAnnotationElement(t) {
if (this.deleted)
return t.hide(), null;
const {
points: e,
rect: s
} = this.serializeDraw(!1);
return t.updateEdited({
rect: s,
thickness: this._drawingOptions["stroke-width"],
points: e,
popup: this.comment
}), null;
}
}
class Ps extends Le {
toSVGPath() {
let t = super.toSVGPath();
return t.endsWith("Z") || (t += "Z"), t;
}
}
const ze = 8, me = 3;
class ee {
static #t = {
maxDim: 512,
sigmaSFactor: 0.02,
sigmaR: 25,
kernelSize: 16
};
static #e(t, e, s, i) {
return s -= t, i -= e, s === 0 ? i > 0 ? 0 : 4 : s === 1 ? i + 6 : 2 - i;
}
static #i = new Int32Array([0, 1, -1, 1, -1, 0, -1, -1, 0, -1, 1, -1, 1, 0, 1, 1]);
static #s(t, e, s, i, n, r, a) {
const o = this.#e(s, i, n, r);
for (let l = 0; l < 8; l++) {
const h = (-l + o - a + 16) % 8, c = this.#i[2 * h], u = this.#i[2 * h + 1];
if (t[(s + c) * e + (i + u)] !== 0)
return h;
}
return -1;
}
static #a(t, e, s, i, n, r, a) {
const o = this.#e(s, i, n, r);
for (let l = 0; l < 8; l++) {
const h = (l + o + a + 16) % 8, c = this.#i[2 * h], u = this.#i[2 * h + 1];
if (t[(s + c) * e + (i + u)] !== 0)
return h;
}
return -1;
}
static #r(t, e, s, i) {
const n = t.length, r = new Int32Array(n);
for (let h = 0; h < n; h++)
r[h] = t[h] <= i ? 1 : 0;
for (let h = 1; h < s - 1; h++)
r[h * e] = r[h * e + e - 1] = 0;
for (let h = 0; h < e; h++)
r[h] = r[e * s - 1 - h] = 0;
let a = 1, o;
const l = [];
for (let h = 1; h < s - 1; h++) {
o = 1;
for (let c = 1; c < e - 1; c++) {
const u = h * e + c, f = r[u];
if (f === 0)
continue;
let g = h, p = c;
if (f === 1 && r[u - 1] === 0)
a += 1, p -= 1;
else if (f >= 1 && r[u + 1] === 0)
a += 1, p += 1, f > 1 && (o = f);
else {
f !== 1 && (o = Math.abs(f));
continue;
}
const b = [c, h], m = p === c + 1, A = {
isHole: m,
points: b,
id: a,
parent: 0
};
l.push(A);
let y;
for (const T of l)
if (T.id === o) {
y = T;
break;
}
y ? y.isHole ? A.parent = m ? y.parent : o : A.parent = m ? o : y.parent : A.parent = m ? o : 0;
const _ = this.#s(r, e, h, c, g, p, 0);
if (_ === -1) {
r[u] = -a, r[u] !== 1 && (o = Math.abs(r[u]));
continue;
}
let w = this.#i[2 * _], v = this.#i[2 * _ + 1];
const S = h + w, E = c + v;
g = S, p = E;
let C = h, k = c;
for (; ; ) {
const T = this.#a(r, e, C, k, g, p, 1);
w = this.#i[2 * T], v = this.#i[2 * T + 1];
const $ = C + w, z = k + v;
b.push(z, $);
const j = C * e + k;
if (r[j + 1] === 0 ? r[j] = -a : r[j] === 1 && (r[j] = a), $ === h && z === c && C === S && k === E) {
r[u] !== 1 && (o = Math.abs(r[u]));
break;
} else
g = C, p = k, C = $, k = z;
}
}
}
return l;
}
static #n(t, e, s, i) {
if (s - e <= 4) {
for (let S = e; S < s - 2; S += 2)
i.push(t[S], t[S + 1]);
return;
}
const n = t[e], r = t[e + 1], a = t[s - 4] - n, o = t[s - 3] - r, l = Math.hypot(a, o), h = a / l, c = o / l, u = h * r - c * n, f = o / a, g = 1 / l, p = Math.atan(f), b = Math.cos(p), m = Math.sin(p), A = g * (Math.abs(b) + Math.abs(m)), y = g * (1 - A + A ** 2), _ = Math.max(Math.atan(Math.abs(m + b) * y), Math.atan(Math.abs(m - b) * y));
let w = 0, v = e;
for (let S = e + 2; S < s - 2; S += 2) {
const E = Math.abs(u - h * t[S + 1] + c * t[S]);
E > w && (v = S, w = E);
}
w > (l * _) ** 2 ? (this.#n(t, e, v + 2, i), this.#n(t, v, s, i)) : i.push(n, r);
}
static #o(t) {
const e = [], s = t.length;
return this.#n(t, 0, s, e), e.push(t[s - 2], t[s - 1]), e.length <= 4 ? null : e;
}
static #h(t, e, s, i, n, r) {
const a = new Float32Array(r ** 2), o = -2 * i ** 2, l = r >> 1;
for (let p = 0; p < r; p++) {
const b = (p - l) ** 2;
for (let m = 0; m < r; m++)
a[p * r + m] = Math.exp((b + (m - l) ** 2) / o);
}
const h = new Float32Array(256), c = -2 * n ** 2;
for (let p = 0; p < 256; p++)
h[p] = Math.exp(p ** 2 / c);
const u = t.length, f = new Uint8Array(u), g = new Uint32Array(256);
for (let p = 0; p < s; p++)
for (let b = 0; b < e; b++) {
const m = p * e + b, A = t[m];
let y = 0, _ = 0;
for (let v = 0; v < r; v++) {
const S = p + v - l;
if (!(S < 0 || S >= s))
for (let E = 0; E < r; E++) {
const C = b + E - l;
if (C < 0 || C >= e)
continue;
const k = t[S * e + C], T = a[v * r + E] * h[Math.abs(k - A)];
y += k * T, _ += T;
}
}
const w = f[m] = Math.round(y / _);
g[w]++;
}
return [f, g];
}
static #l(t) {
const e = new Uint32Array(256);
for (const s of t)
e[s]++;
return e;
}
static #u(t) {
const e = t.length, s = new Uint8ClampedArray(e >> 2);
let i = -1 / 0, n = 1 / 0;
for (let a = 0, o = s.length; a < o; a++) {
const l = s[a] = t[a << 2];
i = Math.max(i, l), n = Math.min(n, l);
}
const r = 255 / (i - n);
for (let a = 0, o = s.length; a < o; a++)
s[a] = (s[a] - n) * r;
return s;
}
static #d(t) {
let e, s = -1 / 0, i = -1 / 0;
const n = t.findIndex((o) => o !== 0);
let r = n, a = n;
for (e = n; e < 256; e++) {
const o = t[e];
o > s && (e - r > i && (i = e - r, a = e - 1), s = o, r = e);
}
for (e = a - 1; e >= 0 && !(t[e] > t[e + 1]); e--)
;
return e;
}
static #f(t) {
const e = t, {
width: s,
height: i
} = t, {
maxDim: n
} = this.#t;
let r = s, a = i;
if (s > n || i > n) {
let u = s, f = i, g = Math.log2(Math.max(s, i) / n);
const p = Math.floor(g);
g = g === p ? p - 1 : p;
for (let m = 0; m < g; m++) {
r = Math.ceil(u / 2), a = Math.ceil(f / 2);
const A = new OffscreenCanvas(r, a);
A.getContext("2d").drawImage(t, 0, 0, u, f, 0, 0, r, a), u = r, f = a, t !== e && t.close(), t = A.transferToImageBitmap();
}
const b = Math.min(n / r, n / a);
r = Math.round(r * b), a = Math.round(a * b);
}
const l = new OffscreenCanvas(r, a).getContext("2d", {
willReadFrequently: !0
});
l.fillStyle = "white", l.fillRect(0, 0, r, a), l.filter = "grayscale(1)", l.drawImage(t, 0, 0, t.width, t.height, 0, 0, r, a);
const h = l.getImageData(0, 0, r, a).data;
return [this.#u(h), r, a];
}
static extractContoursFromText(t, {
fontFamily: e,
fontStyle: s,
fontWeight: i
}, n, r, a, o) {
let l = new OffscreenCanvas(1, 1), h = l.getContext("2d", {
alpha: !1
});
const c = 200, u = h.font = `${s} ${i} ${c}px ${e}`, {
actualBoundingBoxLeft: f,
actualBoundingBoxRight: g,
actualBoundingBoxAscent: p,
actualBoundingBoxDescent: b,
fontBoundingBoxAscent: m,
fontBoundingBoxDescent: A,
width: y
} = h.measureText(t), _ = 1.5, w = Math.ceil(Math.max(Math.abs(f) + Math.abs(g) || 0, y) * _), v = Math.ceil(Math.max(Math.abs(p) + Math.abs(b) || c, Math.abs(m) + Math.abs(A) || c) * _);
l = new OffscreenCanvas(w, v), h = l.getContext("2d", {
alpha: !0,
willReadFrequently: !0
}), h.font = u, h.filter = "grayscale(1)", h.fillStyle = "white", h.fillRect(0, 0, w, v), h.fillStyle = "black", h.fillText(t, w * (_ - 1) / 2, v * (3 - _) / 2);
const S = this.#u(h.getImageData(0, 0, w, v).data), E = this.#l(S), C = this.#d(E), k = this.#r(S, w, v, C);
return this.processDrawnLines({
lines: {
curves: k,
width: w,
height: v
},
pageWidth: n,
pageHeight: r,
rotation: a,
innerMargin: o,
mustSmooth: !0,
areContours: !0
});
}
static process(t, e, s, i, n) {
const [r, a, o] = this.#f(t), [l, h] = this.#h(r, a, o, Math.hypot(a, o) * this.#t.sigmaSFactor, this.#t.sigmaR, this.#t.kernelSize), c = this.#d(h), u = this.#r(l, a, o, c);
return this.processDrawnLines({
lines: {
curves: u,
width: a,
height: o
},
pageWidth: e,
pageHeight: s,
rotation: i,
innerMargin: n,
mustSmooth: !0,
areContours: !0
});
}
static processDrawnLines({
lines: t,
pageWidth: e,
pageHeight: s,
rotation: i,
innerMargin: n,
mustSmooth: r,
areContours: a
}) {
i % 180 !== 0 && ([e, s] = [s, e]);
const {
curves: o,
width: l,
height: h
} = t, c = t.thickness ?? 0, u = [], f = Math.min(e / l, s / h), g = f / e, p = f / s, b = [];
for (const {
points: A
} of o) {
const y = r ? this.#o(A) : A;
if (!y)
continue;
b.push(y);
const _ = y.length, w = new Float32Array(_), v = new Float32Array(3 * (_ === 2 ? 2 : _ - 2));
if (u.push({
line: v,
points: w
}), _ === 2) {
w[0] = y[0] * g, w[1] = y[1] * p, v.set([NaN, NaN, NaN, NaN, w[0], w[1]], 0);
continue;
}
let [S, E, C, k] = y;
S *= g, E *= p, C *= g, k *= p, w.set([S, E, C, k], 0), v.set([NaN, NaN, NaN, NaN, S, E], 0);
for (let T = 4; T < _; T += 2) {
const $ = w[T] = y[T] * g, z = w[T + 1] = y[T + 1] * p;
v.set(x.createBezierPoints(S, E, C, k, $, z), (T - 2) * 3), [S, E, C, k] = [C, k, $, z];
}
}
if (u.length === 0)
return null;
const m = a ? new Ps() : new Le();
return m.build(u, e, s, 1, i, a ? 0 : c, n), {
outline: m,
newCurves: b,
areContours: a,
thickness: c,
width: l,
height: h
};
}
static async compressSignature({
outlines: t,
areContours: e,
thickness: s,
width: i,
height: n
}) {
let r = 1 / 0, a = -1 / 0, o = 0;
for (const y of t) {
o += y.length;
for (let _ = 2, w = y.length; _ < w; _++) {
const v = y[_] - y[_ - 2];
r = Math.min(r, v), a = Math.max(a, v);
}
}
let l;
r >= -128 && a <= 127 ? l = Int8Array : r >= -32768 && a <= 32767 ? l = Int16Array : l = Int32Array;
const h = t.length, c = ze + me * h, u = new Uint32Array(c);
let f = 0;
u[f++] = c * Uint32Array.BYTES_PER_ELEMENT + (o - 2 * h) * l.BYTES_PER_ELEMENT, u[f++] = 0, u[f++] = i, u[f++] = n, u[f++] = e ? 0 : 1, u[f++] = Math.max(0, Math.floor(s ?? 0)), u[f++] = h, u[f++] = l.BYTES_PER_ELEMENT;
for (const y of t)
u[f++] = y.length - 2, u[f++] = y[0], u[f++] = y[1];
const g = new CompressionStream("deflate-raw"), p = g.writable.getWriter();
await p.ready, p.write(u);
const b = l.prototype.constructor;
for (const y of t) {
const _ = new b(y.length - 2);
for (let w = 2, v = y.length; w < v; w++)
_[w - 2] = y[w] - y[w - 2];
p.write(_);
}
p.close();
const m = await new Response(g.readable).arrayBuffer(), A = new Uint8Array(m);
return Si(A);
}
static async decompressSignature(t) {
try {
const e = fn(t), {
readable: s,
writable: i
} = new DecompressionStream("deflate-raw"), n = i.getWriter();
await n.ready, n.write(e).then(async () => {
await n.ready, await n.close();
}).catch(() => {
});
let r = null, a = 0;
for await (const y of s)
r ||= new Uint8Array(new Uint32Array(y.buffer, 0, 4)[0]), r.set(y, a), a += y.length;
const o = new Uint32Array(r.buffer, 0, r.length >> 2), l = o[1];
if (l !== 0)
throw new Error(`Invalid version: ${l}`);
const h = o[2], c = o[3], u = o[4] === 0, f = o[5], g = o[6], p = o[7], b = [], m = (ze + me * g) * Uint32Array.BYTES_PER_ELEMENT;
let A;
switch (p) {
case Int8Array.BYTES_PER_ELEMENT:
A = new Int8Array(r.buffer, m);
break;
case Int16Array.BYTES_PER_ELEMENT:
A = new Int16Array(r.buffer, m);
break;
case Int32Array.BYTES_PER_ELEMENT:
A = new Int32Array(r.buffer, m);
break;
}
a = 0;
for (let y = 0; y < g; y++) {
const _ = o[me * y + ze], w = new Float32Array(_ + 2);
b.push(w);
for (let v = 0; v < me - 1; v++)
w[v] = o[me * y + ze + v + 1];
for (let v = 0; v < _; v++)
w[v + 2] = w[v] + A[a++];
}
return {
areContours: u,
thickness: f,
outlines: b,
width: h,
height: c
};
} catch (e) {
return L(`decompressSignature: ${e}`), null;
}
}
}
class zs extends Qi {
constructor() {
super(), super.updateProperties({
fill: M._defaultLineColor,
"stroke-width": 0
});
}
clone() {
const t = new zs();
return t.updateAll(this), t;
}
}
class js extends ss {
constructor(t) {
super(t), super.updateProperties({
stroke: M._defaultLineColor,
"stroke-width": 1
});
}
clone() {
const t = new js(this._viewParameters);
return t.updateAll(this), t;
}
}
class kt extends U {
#t = !1;
#e = null;
#i = null;
#s = null;
static _type = "signature";
static _editorType = F.SIGNATURE;
static _defaultDrawingOptions = null;
constructor(t) {
super({
...t,
mustBeCommitted: !0,
name: "signatureEditor"
}), this._willKeepAspectRatio = !0, this.#i = t.signatureData || null, this.#e = null, this.defaultL10nId = "pdfjs-editor-signature-editor1";
}
static initialize(t, e) {
M.initialize(t, e), this._defaultDrawingOptions = new zs(), this._defaultDrawnSignatureOptions = new js(e.viewParameters);
}
static getDefaultDrawingOptions(t) {
const e = this._defaultDrawingOptions.clone();
return e.updateProperties(t), e;
}
static get supportMultipleDrawings() {
return !1;
}
static get typesMap() {
return I(this, "typesMap", /* @__PURE__ */ new Map());
}
static get isDrawer() {
return !1;
}
get telemetryFinalData() {
return {
type: "signature",
hasDescription: !!this.#e
};
}
static computeTelemetryFinalData(t) {
const e = t.get("hasDescription");
return {
hasAltText: e.get(!0) ?? 0,
hasNoAltText: e.get(!1) ?? 0
};
}
get isResizable() {
return !0;
}
onScaleChanging() {
this._drawId !== null && super.onScaleChanging();
}
render() {
if (this.div)
return this.div;
let t, e;
const {
_isCopy: s
} = this;
if (s && (this._isCopy = !1, t = this.x, e = this.y), super.render(), this._drawId === null)
if (this.#i) {
const {
lines: i,
mustSmooth: n,
areContours: r,
description: a,
uuid: o,
heightInPage: l
} = this.#i, {
rawDims: {
pageWidth: h,
pageHeight: c
},
rotation: u
} = this.parent.viewport, f = ee.processDrawnLines({
lines: i,
pageWidth: h,
pageHeight: c,
rotation: u,
innerMargin: kt._INNER_MARGIN,
mustSmooth: n,
areContours: r
});
this.addSignature(f, l, a, o);
} else
this.div.setAttribute("data-l10n-args", JSON.stringify({
description: ""
})), this.div.hidden = !0, this._uiManager.getSignature(this);
else
this.div.setAttribute("data-l10n-args", JSON.stringify({
description: this.#e || ""
}));
return s && (this._isCopy = !0, this._moveAfterPaste(t, e)), this.div;
}
setUuid(t) {
this.#s = t, this.addEditToolbar();
}
getUuid() {
return this.#s;
}
get description() {
return this.#e;
}
set description(t) {
this.#e = t, this.div && (this.div.setAttribute("data-l10n-args", JSON.stringify({
description: t
})), super.addEditToolbar().then((e) => {
e?.updateEditSignatureButton(t);
}));
}
getSignaturePreview() {
const {
newCurves: t,
areContours: e,
thickness: s,
width: i,
height: n
} = this.#i, r = Math.max(i, n), a = ee.processDrawnLines({
lines: {
curves: t.map((o) => ({
points: o
})),
thickness: s,
width: i,
height: n
},
pageWidth: r,
pageHeight: r,
rotation: 0,
innerMargin: 0,
mustSmooth: !1,
areContours: e
});
return {
areContours: e,
outline: a.outline
};
}
get toolbarButtons() {
return this._uiManager.signatureManager ? [["editSignature", this._uiManager.signatureManager]] : super.toolbarButtons;
}
addSignature(t, e, s, i) {
const {
x: n,
y: r
} = this, {
outline: a
} = this.#i = t;
this.#t = a instanceof Ps, this.description = s;
let o;
this.#t ? o = kt.getDefaultDrawingOptions() : (o = kt._defaultDrawnSignatureOptions.clone(), o.updateProperties({
"stroke-width": a.thickness
})), this._addOutlines({
drawOutlines: a,
drawingOptions: o
});
const [, l] = this.pageDimensions;
let h = e / l;
h = h >= 1 ? 0.5 : h, this.width *= h / this.height, this.width >= 1 && (h *= 0.9 / this.width, this.width = 0.9), this.height = h, this.setDims(), this.x = n, this.y = r, this.center(), this._onResized(), this.onScaleChanging(), this.rotate(), this._uiManager.addToAnnotationStorage(this), this.setUuid(i), this._reportTelemetry({
action: "pdfjs.signature.inserted",
data: {
hasBeenSaved: !!i,
hasDescription: !!s
}
}), this.div.hidden = !1;
}
getFromImage(t) {
const {
rawDims: {
pageWidth: e,
pageHeight: s
},
rotation: i
} = this.parent.viewport;
return ee.process(t, e, s, i, kt._INNER_MARGIN);
}
getFromText(t, e) {
const {
rawDims: {
pageWidth: s,
pageHeight: i
},
rotation: n
} = this.parent.viewport;
return ee.extractContoursFromText(t, e, s, i, n, kt._INNER_MARGIN);
}
getDrawnSignature(t) {
const {
rawDims: {
pageWidth: e,
pageHeight: s
},
rotation: i
} = this.parent.viewport;
return ee.processDrawnLines({
lines: t,
pageWidth: e,
pageHeight: s,
rotation: i,
innerMargin: kt._INNER_MARGIN,
mustSmooth: !1,
areContours: !1
});
}
createDrawingOptions({
areContours: t,
thickness: e
}) {
t ? this._drawingOptions = kt.getDefaultDrawingOptions() : (this._drawingOptions = kt._defaultDrawnSignatureOptions.clone(), this._drawingOptions.updateProperties({
"stroke-width": e
}));
}
serialize(t = !1) {
if (this.isEmpty())
return null;
const {
lines: e,
points: s
} = this.serializeDraw(t), {
_drawingOptions: {
"stroke-width": i
}
} = this, n = Object.assign(super.serialize(t), {
isSignature: !0,
areContours: this.#t,
color: [0, 0, 0],
thickness: this.#t ? 0 : i
});
return this.addComment(n), t ? (n.paths = {
lines: e,
points: s
}, n.uuid = this.#s, n.isCopy = !0) : n.lines = e, this.#e && (n.accessibilityData = {
type: "Figure",
alt: this.#e
}), n;
}
static deserializeDraw(t, e, s, i, n, r) {
return r.areContours ? Ps.deserialize(t, e, s, i, n, r) : Le.deserialize(t, e, s, i, n, r);
}
static async deserialize(t, e, s) {
const i = await super.deserialize(t, e, s);
return i.#t = t.areContours, i.description = t.accessibilityData?.alt || "", i.#s = t.uuid, i;
}
}
class Zr extends M {
#t = null;
#e = null;
#i = null;
#s = null;
#a = null;
#r = "";
#n = null;
#o = !1;
#h = null;
#l = !1;
#u = !1;
static _type = "stamp";
static _editorType = F.STAMP;
constructor(t) {
super({
...t,
name: "stampEditor"
}), this.#s = t.bitmapUrl, this.#a = t.bitmapFile, this.defaultL10nId = "pdfjs-editor-stamp-editor";
}
static initialize(t, e) {
M.initialize(t, e);
}
static isHandlingMimeForPasting(t) {
return As.includes(t);
}
static paste(t, e) {
e.pasteEditor({
mode: F.STAMP
}, {
bitmapFile: t.getAsFile()
});
}
altTextFinish() {
this._uiManager.useNewAltTextFlow && (this.div.hidden = !1), super.altTextFinish();
}
get telemetryFinalData() {
return {
type: "stamp",
hasAltText: !!this.altTextData?.altText
};
}
static computeTelemetryFinalData(t) {
const e = t.get("hasAltText");
return {
hasAltText: e.get(!0) ?? 0,
hasNoAltText: e.get(!1) ?? 0
};
}
#d(t, e = !1) {
if (!t) {
this.remove();
return;
}
this.#t = t.bitmap, e || (this.#e = t.id, this.#l = t.isSvg), t.file && (this.#r = t.file.name), this.#g();
}
#f() {
if (this.#i = null, this._uiManager.enableWaiting(!1), !!this.#n) {
if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && this.#t) {
this.addEditToolbar().then(() => {
this._editToolbar.hide(), this._uiManager.editAltText(this, !0);
});
return;
}
if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && this.#t) {
this._reportTelemetry({
action: "pdfjs.image.image_added",
data: {
alt_text_modal: !1,
alt_text_type: "empty"
}
});
try {
this.mlGuessAltText();
} catch {
}
}
this.div.focus();
}
}
async mlGuessAltText(t = null, e = !0) {
if (this.hasAltTextData())
return null;
const {
mlManager: s
} = this._uiManager;
if (!s)
throw new Error("No ML.");
if (!await s.isEnabledFor("altText"))
throw new Error("ML isn't enabled for alt text.");
const {
data: i,
width: n,
height: r
} = t || this.copyCanvas(null, null, !0).imageData, a = await s.guess({
name: "altText",
request: {
data: i,
width: n,
height: r,
channels: i.length / (n * r)
}
});
if (!a)
throw new Error("No response from the AI service.");
if (a.error)
throw new Error("Error from the AI service.");
if (a.cancel)
return null;
if (!a.output)
throw new Error("No valid response from the AI service.");
const o = a.output;
return await this.setGuessedAltText(o), e && !this.hasAltTextData() && (this.altTextData = {
alt: o,
decorative: !1
}), o;
}
#m() {
if (this.#e) {
this._uiManager.enableWaiting(!0), this._uiManager.imageManager.getFromId(this.#e).then((s) => this.#d(s, !0)).finally(() => this.#f());
return;
}
if (this.#s) {
const s = this.#s;
this.#s = null, this._uiManager.enableWaiting(!0), this.#i = this._uiManager.imageManager.getFromUrl(s).then((i) => this.#d(i)).finally(() => this.#f());
return;
}
if (this.#a) {
const s = this.#a;
this.#a = null, this._uiManager.enableWaiting(!0), this.#i = this._uiManager.imageManager.getFromFile(s).then((i) => this.#d(i)).finally(() => this.#f());
return;
}
const t = document.createElement("input");
t.type = "file", t.accept = As.join(",");
const e = this._uiManager._signal;
this.#i = new Promise((s) => {
t.addEventListener("change", async () => {
if (!t.files || t.files.length === 0)
this.remove();
else {
this._uiManager.enableWaiting(!0);
const i = await this._uiManager.imageManager.getFromFile(t.files[0]);
this._reportTelemetry({
action: "pdfjs.image.image_selected",
data: {
alt_text_modal: this._uiManager.useNewAltTextFlow
}
}), this.#d(i);
}
s();
}, {
signal: e
}), t.addEventListener("cancel", () => {
this.remove(), s();
}, {
signal: e
});
}).finally(() => this.#f()), t.click();
}
remove() {
this.#e && (this.#t = null, this._uiManager.imageManager.deleteId(this.#e), this.#n?.remove(), this.#n = null, this.#h && (clearTimeout(this.#h), this.#h = null)), super.remove();
}
rebuild() {
if (!this.parent) {
this.#e && this.#m();
return;
}
super.rebuild(), this.div !== null && (this.#e && this.#n === null && this.#m(), this.isAttachedToDOM || this.parent.add(this));
}
onceAdded(t) {
this._isDraggable = !0, t && this.div.focus();
}
isEmpty() {
return !(this.#i || this.#t || this.#s || this.#a || this.#e || this.#o);
}
get toolbarButtons() {
return [["altText", this.createAltText()]];
}
get isResizable() {
return !0;
}
render() {
if (this.div)
return this.div;
let t, e;
return this._isCopy && (t = this.x, e = this.y), super.render(), this.div.hidden = !0, this.createAltText(), this.#o || (this.#t ? this.#g() : this.#m()), this._isCopy && this._moveAfterPaste(t, e), this._uiManager.addShouldRescale(this), this.div;
}
setCanvas(t, e) {
const {
id: s,
bitmap: i
} = this._uiManager.imageManager.getFromCanvas(t, e);
e.remove(), s && this._uiManager.imageManager.isValidId(s) && (this.#e = s, i && (this.#t = i), this.#o = !1, this.#g());
}
_onResized() {
this.onScaleChanging();
}
onScaleChanging() {
if (!this.parent)
return;
this.#h !== null && clearTimeout(this.#h);
const t = 200;
this.#h = setTimeout(() => {
this.#h = null, this.#p();
}, t);
}
#g() {
const {
div: t
} = this;
let {
width: e,
height: s
} = this.#t;
const [i, n] = this.pageDimensions, r = 0.75;
if (this.width)
e = this.width * i, s = this.height * n;
else if (e > r * i || s > r * n) {
const o = Math.min(r * i / e, r * n / s);
e *= o, s *= o;
}
this._uiManager.enableWaiting(!1);
const a = this.#n = document.createElement("canvas");
a.setAttribute("role", "img"), this.addContainer(a), this.width = e / i, this.height = s / n, this.setDims(), this._initialOptions?.isCentered ? this.center() : this.fixAndSetPosition(), this._initialOptions = null, (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow || this.annotationElementId) && (t.hidden = !1), this.#p(), this.#u || (this.parent.addUndoableEditor(this), this.#u = !0), this._reportTelemetry({
action: "inserted_image"
}), this.#r && this.div.setAttribute("aria-description", this.#r), this.annotationElementId || this._uiManager.a11yAlert("pdfjs-editor-stamp-added-alert");
}
copyCanvas(t, e, s = !1) {
t || (t = 224);
const {
width: i,
height: n
} = this.#t, r = new Rt();
let a = this.#t, o = i, l = n, h = null;
if (e) {
if (i > e || n > e) {
const v = Math.min(e / i, e / n);
o = Math.floor(i * v), l = Math.floor(n * v);
}
h = document.createElement("canvas");
const u = h.width = Math.ceil(o * r.sx), f = h.height = Math.ceil(l * r.sy);
this.#l || (a = this.#c(u, f));
const g = h.getContext("2d");
g.filter = this._uiManager.hcmFilter;
let p = "white", b = "#cfcfd8";
this._uiManager.hcmFilter !== "none" ? b = "black" : An.isDarkMode && (p = "#8f8f9d", b = "#42414d");
const m = 15, A = m * r.sx, y = m * r.sy, _ = new OffscreenCanvas(A * 2, y * 2), w = _.getContext("2d");
w.fillStyle = p, w.fillRect(0, 0, A * 2, y * 2), w.fillStyle = b, w.fillRect(0, 0, A, y), w.fillRect(A, y, A, y), g.fillStyle = g.createPattern(_, "repeat"), g.fillRect(0, 0, u, f), g.drawImage(a, 0, 0, a.width, a.height, 0, 0, u, f);
}
let c = null;
if (s) {
let u, f;
if (r.symmetric && a.width < t && a.height < t)
u = a.width, f = a.height;
else if (a = this.#t, i > t || n > t) {
const b = Math.min(t / i, t / n);
u = Math.floor(i * b), f = Math.floor(n * b), this.#l || (a = this.#c(u, f));
}
const p = new OffscreenCanvas(u, f).getContext("2d", {
willReadFrequently: !0
});
p.drawImage(a, 0, 0, a.width, a.height, 0, 0, u, f), c = {
width: u,
height: f,
data: p.getImageData(0, 0, u, f).data
};
}
return {
canvas: h,
width: o,
height: l,
imageData: c
};
}
#c(t, e) {
const {
width: s,
height: i
} = this.#t;
let n = s, r = i, a = this.#t;
for (; n > 2 * t || r > 2 * e; ) {
const o = n, l = r;
n > 2 * t && (n = n >= 16384 ? Math.floor(n / 2) - 1 : Math.ceil(n / 2)), r > 2 * e && (r = r >= 16384 ? Math.floor(r / 2) - 1 : Math.ceil(r / 2));
const h = new OffscreenCanvas(n, r);
h.getContext("2d").drawImage(a, 0, 0, o, l, 0, 0, n, r), a = h.transferToImageBitmap();
}
return a;
}
#p() {
const [t, e] = this.parentDimensions, {
width: s,
height: i
} = this, n = new Rt(), r = Math.ceil(s * t * n.sx), a = Math.ceil(i * e * n.sy), o = this.#n;
if (!o || o.width === r && o.height === a)
return;
o.width = r, o.height = a;
const l = this.#l ? this.#t : this.#c(r, a), h = o.getContext("2d");
h.filter = this._uiManager.hcmFilter, h.drawImage(l, 0, 0, l.width, l.height, 0, 0, r, a);
}
#b(t) {
if (t) {
if (this.#l) {
const i = this._uiManager.imageManager.getSvgUrl(this.#e);
if (i)
return i;
}
const e = document.createElement("canvas");
return {
width: e.width,
height: e.height
} = this.#t, e.getContext("2d").drawImage(this.#t, 0, 0), e.toDataURL();
}
if (this.#l) {
const [e, s] = this.pageDimensions, i = Math.round(this.width * e * he.PDF_TO_CSS_UNITS), n = Math.round(this.height * s * he.PDF_TO_CSS_UNITS), r = new OffscreenCanvas(i, n);
return r.getContext("2d").drawImage(this.#t, 0, 0, this.#t.width, this.#t.height, 0, 0, i, n), r.transferToImageBitmap();
}
return structuredClone(this.#t);
}
static async deserialize(t, e, s) {
let i = null, n = !1;
if (t instanceof Yi) {
const {
data: {
rect: p,
rotation: b,
id: m,
structParent: A,
popupRef: y,
richText: _,
contentsObj: w,
creationDate: v,
modificationDate: S
},
container: E,
parent: {
page: {
pageNumber: C
}
},
canvas: k
} = t;
let T, $;
k ? (delete t.canvas, {
id: T,
bitmap: $
} = s.imageManager.getFromCanvas(E.id, k), k.remove()) : (n = !0, t._hasNoCanvas = !0);
const z = (await e._structTree.getAriaAttributes(`${se}${m}`))?.get("aria-label") || "";
i = t = {
annotationType: F.STAMP,
bitmapId: T,
bitmap: $,
pageIndex: C - 1,
rect: p.slice(0),
rotation: b,
annotationElementId: m,
id: m,
deleted: !1,
accessibilityData: {
decorative: !1,
altText: z
},
isSvg: !1,
structParent: A,
popupRef: y,
richText: _,
comment: w?.str || null,
creationDate: v,
modificationDate: S
};
}
const r = await super.deserialize(t, e, s), {
rect: a,
bitmap: o,
bitmapUrl: l,
bitmapId: h,
isSvg: c,
accessibilityData: u
} = t;
n ? (s.addMissingCanvas(t.id, r), r.#o = !0) : h && s.imageManager.isValidId(h) ? (r.#e = h, o && (r.#t = o)) : r.#s = l, r.#l = c;
const [f, g] = r.pageDimensions;
return r.width = (a[2] - a[0]) / f, r.height = (a[3] - a[1]) / g, u && (r.altTextData = u), r._initialData = i, t.comment && r.setCommentData(t), r.#u = !!i, r;
}
serialize(t = !1, e = null) {
if (this.isEmpty())
return null;
if (this.deleted)
return this.serializeDeleted();
const s = Object.assign(super.serialize(t), {
bitmapId: this.#e,
isSvg: this.#l
});
if (this.addComment(s), t)
return s.bitmapUrl = this.#b(!0), s.accessibilityData = this.serializeAltText(!0), s.isCopy = !0, s;
const {
decorative: i,
altText: n
} = this.serializeAltText(!1);
if (!i && n && (s.accessibilityData = {
type: "Figure",
alt: n
}), this.annotationElementId) {
const a = this.#A(s);
return a.isSame ? null : (a.isSameAltText ? delete s.accessibilityData : s.accessibilityData.structParent = this._initialData.structParent ?? -1, s.id = this.annotationElementId, delete s.bitmapId, s);
}
if (e === null)
return s;
e.stamps ||= /* @__PURE__ */ new Map();
const r = this.#l ? (s.rect[2] - s.rect[0]) * (s.rect[3] - s.rect[1]) : null;
if (!e.stamps.has(this.#e))
e.stamps.set(this.#e, {
area: r,
serialized: s
}), s.bitmap = this.#b(!1);
else if (this.#l) {
const a = e.stamps.get(this.#e);
r > a.area && (a.area = r, a.serialized.bitmap.close(), a.serialized.bitmap = this.#b(!1));
}
return s;
}
#A(t) {
const {
pageIndex: e,
accessibilityData: {
altText: s
}
} = this._initialData, i = t.pageIndex === e, n = (t.accessibilityData?.alt || "") === s;
return {
isSame: !this.hasEditedComment && !this._hasBeenMoved && !this._hasBeenResized && i && n,
isSameAltText: n
};
}
renderAnnotationElement(t) {
return this.deleted ? (t.hide(), null) : (t.updateEdited({
rect: this.getPDFRect(),
popup: this.comment
}), null);
}
}
class It {
#t;
#e = !1;
#i = null;
#s = null;
#a = null;
#r = /* @__PURE__ */ new Map();
#n = !1;
#o = !1;
#h = !1;
#l = null;
#u = null;
#d = null;
#f = null;
#m = null;
#g = -1;
#c;
static _initialized = !1;
static #p = new Map([rt, $s, Zr, Z, kt].map((t) => [t._editorType, t]));
constructor({
uiManager: t,
pageIndex: e,
div: s,
structTreeLayer: i,
accessibilityManager: n,
annotationLayer: r,
drawLayer: a,
textLayer: o,
viewport: l,
l10n: h
}) {
const c = [...It.#p.values()];
if (!It._initialized) {
It._initialized = !0;
for (const u of c)
u.initialize(h, t);
}
t.registerEditorTypes(c), this.#c = t, this.pageIndex = e, this.div = s, this.#t = n, this.#i = r, this.viewport = l, this.#d = o, this.drawLayer = a, this._structTree = i, this.#c.addLayer(this);
}
get isEmpty() {
return this.#r.size === 0;
}
get isInvisible() {
return this.isEmpty && this.#c.getMode() === F.NONE;
}
updateToolbar(t) {
this.#c.updateToolbar(t);
}
updateMode(t = this.#c.getMode()) {
switch (this.#v(), t) {
case F.NONE:
this.div.classList.toggle("nonEditing", !0), this.disableTextSelection(), this.togglePointerEvents(!1), this.toggleAnnotationLayerPointerEvents(!0), this.disableClick();
return;
case F.INK:
this.disableTextSelection(), this.togglePointerEvents(!0), this.enableClick();
break;
case F.HIGHLIGHT:
this.enableTextSelection(), this.togglePointerEvents(!1), this.disableClick();
break;
default:
this.disableTextSelection(), this.togglePointerEvents(!0), this.enableClick();
}
this.toggleAnnotationLayerPointerEvents(!1);
const {
classList: e
} = this.div;
if (e.toggle("nonEditing", !1), t === F.POPUP)
e.toggle("commentEditing", !0);
else {
e.toggle("commentEditing", !1);
for (const s of It.#p.values())
e.toggle(`${s._type}Editing`, t === s._editorType);
}
this.div.hidden = !1;
}
hasTextLayer(t) {
return t === this.#d?.div;
}
setEditingState(t) {
this.#c.setEditingState(t);
}
addCommands(t) {
this.#c.addCommands(t);
}
cleanUndoStack(t) {
this.#c.cleanUndoStack(t);
}
toggleDrawing(t = !1) {
this.div.classList.toggle("drawing", !t);
}
togglePointerEvents(t = !1) {
this.div.classList.toggle("disabled", !t);
}
toggleAnnotationLayerPointerEvents(t = !1) {
this.#i?.togglePointerEvents(t);
}
get #b() {
return this.#r.size !== 0 ? this.#r.values() : this.#c.getEditors(this.pageIndex);
}
async enable() {
this.#h = !0, this.div.tabIndex = 0, this.togglePointerEvents(!0), this.div.classList.toggle("nonEditing", !1), this.#m?.abort(), this.#m = null;
const t = /* @__PURE__ */ new Set();
for (const s of this.#b)
s.enableEditing(), s.show(!0), s.annotationElementId && (this.#c.removeChangedExistingAnnotation(s), t.add(s.annotationElementId));
const e = this.#i;
if (e)
for (const s of e.getEditableAnnotations()) {
if (s.hide(), this.#c.isDeletedAnnotationElement(s.data.id) || t.has(s.data.id))
continue;
const i = await this.deserialize(s);
i && (this.addOrRebuild(i), i.enableEditing());
}
this.#h = !1, this.#c._eventBus.dispatch("editorsrendered", {
source: this,
pageNumber: this.pageIndex + 1
});
}
disable() {
if (this.#o = !0, this.div.tabIndex = -1, this.togglePointerEvents(!1), this.div.classList.toggle("nonEditing", !0), this.#d && !this.#m) {
this.#m = new AbortController();
const i = this.#c.combinedSignal(this.#m);
this.#d.div.addEventListener("pointerdown", (n) => {
const {
clientX: a,
clientY: o,
timeStamp: l
} = n, h = this.#g;
if (l - h > 500) {
this.#g = l;
return;
}
this.#g = -1;
const {
classList: c
} = this.div;
c.toggle("getElements", !0);
const u = document.elementsFromPoint(a, o);
if (c.toggle("getElements", !1), !this.div.contains(u[0]))
return;
let f;
const g = new RegExp(`^${_e}[0-9]+$`);
for (const b of u)
if (g.test(b.id)) {
f = b.id;
break;
}
if (!f)
return;
const p = this.#r.get(f);
p?.annotationElementId === null && (n.stopPropagation(), n.preventDefault(), p.dblclick(n));
}, {
signal: i,
capture: !0
});
}
const t = this.#i, e = [];
if (t) {
const i = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
for (const a of this.#b) {
if (a.disableEditing(), !a.annotationElementId) {
e.push(a);
continue;
}
if (a.serialize() !== null) {
i.set(a.annotationElementId, a);
continue;
} else
n.set(a.annotationElementId, a);
this.getEditableAnnotation(a.annotationElementId)?.show(), a.remove();
}
const r = t.getEditableAnnotations();
for (const a of r) {
const {
id: o
} = a.data;
if (this.#c.isDeletedAnnotationElement(o)) {
a.updateEdited({
deleted: !0
});
continue;
}
let l = n.get(o);
if (l) {
l.resetAnnotationElement(a), l.show(!1), a.show();
continue;
}
l = i.get(o), l && (this.#c.addChangedExistingAnnotation(l), l.renderAnnotationElement(a) && l.show(!1)), a.show();
}
}
this.#v(), this.isEmpty && (this.div.hidden = !0);
const {
classList: s
} = this.div;
for (const i of It.#p.values())
s.remove(`${i._type}Editing`);
this.disableTextSelection(), this.toggleAnnotationLayerPointerEvents(!0), t?.updateFakeAnnotations(e), this.#o = !1;
}
getEditableAnnotation(t) {
return this.#i?.getEditableAnnotation(t) || null;
}
setActiveEditor(t) {
this.#c.getActive() !== t && this.#c.setActiveEditor(t);
}
enableTextSelection() {
if (this.div.tabIndex = -1, this.#d?.div && !this.#f) {
this.#f = new AbortController();
const t = this.#c.combinedSignal(this.#f);
this.#d.div.addEventListener("pointerdown", this.#A.bind(this), {
signal: t
}), this.#d.div.classList.add("highlighting");
}
}
disableTextSelection() {
this.div.tabIndex = 0, this.#d?.div && this.#f && (this.#f.abort(), this.#f = null, this.#d.div.classList.remove("highlighting"));
}
#A(t) {
this.#c.unselectAll();
const {
target: e
} = t;
if (e === this.#d.div || (e.getAttribute("role") === "img" || e.classList.contains("endOfContent")) && this.#d.div.contains(e)) {
const {
isMac: s
} = ht.platform;
if (t.button !== 0 || t.ctrlKey && s)
return;
this.#c.showAllEditors("highlight", !0, !0), this.#d.div.classList.add("free"), this.toggleDrawing(), Z.startHighlighting(this, this.#c.direction === "ltr", {
target: this.#d.div,
x: t.x,
y: t.y
}), this.#d.div.addEventListener("pointerup", () => {
this.#d.div.classList.remove("free"), this.toggleDrawing(!0);
}, {
once: !0,
signal: this.#c._signal
}), t.preventDefault();
}
}
enableClick() {
if (this.#s)
return;
this.#s = new AbortController();
const t = this.#c.combinedSignal(this.#s);
this.div.addEventListener("pointerdown", this.pointerdown.bind(this), {
signal: t
});
const e = this.pointerup.bind(this);
this.div.addEventListener("pointerup", e, {
signal: t
}), this.div.addEventListener("pointercancel", e, {
signal: t
});
}
disableClick() {
this.#s?.abort(), this.#s = null;
}
attach(t) {
this.#r.set(t.id, t);
const {
annotationElementId: e
} = t;
e && this.#c.isDeletedAnnotationElement(e) && this.#c.removeDeletedAnnotationElement(t);
}
detach(t) {
this.#r.delete(t.id), this.#t?.removePointerInTextLayer(t.contentDiv), !this.#o && t.annotationElementId && this.#c.addDeletedAnnotationElement(t);
}
remove(t) {
this.detach(t), this.#c.removeEditor(t), t.div.remove(), t.isAttachedToDOM = !1;
}
changeParent(t) {
t.parent !== this && (t.parent && t.annotationElementId && (this.#c.addDeletedAnnotationElement(t), M.deleteAnnotationElement(t), t.annotationElementId = null), this.attach(t), t.parent?.detach(t), t.setParent(this), t.div && t.isAttachedToDOM && (t.div.remove(), this.div.append(t.div)));
}
add(t) {
if (!(t.parent === this && t.isAttachedToDOM)) {
if (this.changeParent(t), this.#c.addEditor(t), this.attach(t), !t.isAttachedToDOM) {
const e = t.render();
this.div.append(e), t.isAttachedToDOM = !0;
}
t.fixAndSetPosition(), t.onceAdded(!this.#h), this.#c.addToAnnotationStorage(t), t._reportTelemetry(t.telemetryInitialData);
}
}
moveEditorInDOM(t) {
if (!t.isAttachedToDOM)
return;
const {
activeElement: e
} = document;
t.div.contains(e) && !this.#a && (t._focusEventsAllowed = !1, this.#a = setTimeout(() => {
this.#a = null, t.div.contains(document.activeElement) ? t._focusEventsAllowed = !0 : (t.div.addEventListener("focusin", () => {
t._focusEventsAllowed = !0;
}, {
once: !0,
signal: this.#c._signal
}), e.focus());
}, 0)), t._structTreeParentId = this.#t?.moveElementInDOM(this.div, t.div, t.contentDiv, !0);
}
addOrRebuild(t) {
t.needsToBeRebuilt() ? (t.parent ||= this, t.rebuild(), t.show()) : this.add(t);
}
addUndoableEditor(t) {
const e = () => t._uiManager.rebuild(t), s = () => {
t.remove();
};
this.addCommands({
cmd: e,
undo: s,
mustExec: !1
});
}
getEditorByUID(t) {
for (const e of this.#r.values())
if (e.uid === t)
return e;
return null;
}
getNextId() {
return this.#c.getId();
}
get #y() {
return It.#p.get(this.#c.getMode());
}
combinedSignal(t) {
return this.#c.combinedSignal(t);
}
#C(t) {
const e = this.#y;
return e ? new e.prototype.constructor(t) : null;
}
canCreateNewEmptyEditor() {
return this.#y?.canCreateNewEmptyEditor();
}
async pasteEditor(t, e) {
this.updateToolbar(t), await this.#c.updateMode(t.mode);
const {
offsetX: s,
offsetY: i
} = this.#S(), n = this.getNextId(), r = this.#C({
parent: this,
id: n,
x: s,
y: i,
uiManager: this.#c,
isCentered: !0,
...e
});
r && this.add(r);
}
async deserialize(t) {
return await It.#p.get(t.annotationType ?? t.annotationEditorType)?.deserialize(t, this, this.#c) || null;
}
createAndAddNewEditor(t, e, s = {}) {
const i = this.getNextId(), n = this.#C({
parent: this,
id: i,
x: t.offsetX,
y: t.offsetY,
uiManager: this.#c,
isCentered: e,
...s
});
return n && this.add(n), n;
}
get boundingClientRect() {
return this.div.getBoundingClientRect();
}
#S() {
const {
x: t,
y: e,
width: s,
height: i
} = this.boundingClientRect, n = Math.max(0, t), r = Math.max(0, e), a = Math.min(window.innerWidth, t + s), o = Math.min(window.innerHeight, e + i), l = (n + a) / 2 - t, h = (r + o) / 2 - e, [c, u] = this.viewport.rotation % 180 === 0 ? [l, h] : [h, l];
return {
offsetX: c,
offsetY: u
};
}
addNewEditor(t = {}) {
this.createAndAddNewEditor(this.#S(), !0, t);
}
setSelected(t) {
this.#c.setSelected(t);
}
toggleSelected(t) {
this.#c.toggleSelected(t);
}
unselect(t) {
this.#c.unselect(t);
}
pointerup(t) {
const {
isMac: e
} = ht.platform;
if (t.button !== 0 || t.ctrlKey && e || t.target !== this.div || !this.#n || (this.#n = !1, this.#y?.isDrawer && this.#y.supportMultipleDrawings))
return;
if (!this.#e) {
this.#e = !0;
return;
}
const s = this.#c.getMode();
if (s === F.STAMP || s === F.SIGNATURE) {
this.#c.unselectAll();
return;
}
this.createAndAddNewEditor(t, !1);
}
pointerdown(t) {
if (this.#c.getMode() === F.HIGHLIGHT && this.enableTextSelection(), this.#n) {
this.#n = !1;
return;
}
const {
isMac: e
} = ht.platform;
if (t.button !== 0 || t.ctrlKey && e || t.target !== this.div)
return;
if (this.#n = !0, this.#y?.isDrawer) {
this.startDrawingSession(t);
return;
}
const s = this.#c.getActive();
this.#e = !s || s.isEmpty();
}
startDrawingSession(t) {
if (this.div.focus({
preventScroll: !0
}), this.#l) {
this.#y.startDrawing(this, this.#c, !1, t);
return;
}
this.#c.setCurrentDrawingSession(this), this.#l = new AbortController();
const e = this.#c.combinedSignal(this.#l);
this.div.addEventListener("blur", ({
relatedTarget: s
}) => {
s && !this.div.contains(s) && (this.#u = null, this.commitOrRemove());
}, {
signal: e
}), this.#y.startDrawing(this, this.#c, !1, t);
}
pause(t) {
if (t) {
const {
activeElement: e
} = document;
this.div.contains(e) && (this.#u = e);
return;
}
this.#u && setTimeout(() => {
this.#u?.focus(), this.#u = null;
}, 0);
}
endDrawingSession(t = !1) {
return this.#l ? (this.#c.setCurrentDrawingSession(null), this.#l.abort(), this.#l = null, this.#u = null, this.#y.endDrawing(t)) : null;
}
findNewParent(t, e, s) {
const i = this.#c.findParent(e, s);
return i === null || i === this ? !1 : (i.changeParent(t), !0);
}
commitOrRemove() {
return this.#l ? (this.endDrawingSession(), !0) : !1;
}
onScaleChanging() {
this.#l && this.#y.onScaleChangingWhenDrawing(this);
}
destroy() {
this.commitOrRemove(), this.#c.getActive()?.parent === this && (this.#c.commitOrRemove(), this.#c.setActiveEditor(null)), this.#a && (clearTimeout(this.#a), this.#a = null);
for (const t of this.#r.values())
this.#t?.removePointerInTextLayer(t.contentDiv), t.setParent(null), t.isAttachedToDOM = !1, t.div.remove();
this.div = null, this.#r.clear(), this.#c.removeLayer(this);
}
#v() {
for (const t of this.#r.values())
t.isEmpty() && t.remove();
}
render({
viewport: t
}) {
this.viewport = t, qt(this.div, t);
for (const e of this.#c.getEditors(this.pageIndex))
this.add(e), e.rebuild();
this.updateMode();
}
update({
viewport: t
}) {
this.#c.commitOrRemove(), this.#v();
const e = this.viewport.rotation, s = t.rotation;
if (this.viewport = t, qt(this.div, {
rotation: s
}), e !== s)
for (const i of this.#r.values())
i.rotate(s);
}
get pageDimensions() {
const {
pageWidth: t,
pageHeight: e
} = this.viewport.rawDims;
return [t, e];
}
get scale() {
return this.#c.viewParameters.realScale;
}
}
class ot {
#t = null;
#e = /* @__PURE__ */ new Map();
#i = /* @__PURE__ */ new Map();
static #s = 0;
constructor({
pageIndex: t
}) {
this.pageIndex = t;
}
setParent(t) {
if (!this.#t) {
this.#t = t;
return;
}
if (this.#t !== t) {
if (this.#e.size > 0)
for (const e of this.#e.values())
e.remove(), t.append(e);
this.#t = t;
}
}
static get _svgFactory() {
return I(this, "_svgFactory", new qe());
}
static #a(t, [e, s, i, n]) {
const {
style: r
} = t;
r.top = `${100 * s}%`, r.left = `${100 * e}%`, r.width = `${100 * i}%`, r.height = `${100 * n}%`;
}
#r() {
const t = ot._svgFactory.create(1, 1, !0);
return this.#t.append(t), t.setAttribute("aria-hidden", !0), t;
}
#n(t, e) {
const s = ot._svgFactory.createElement("clipPath");
t.append(s);
const i = `clip_${e}`;
s.setAttribute("id", i), s.setAttribute("clipPathUnits", "objectBoundingBox");
const n = ot._svgFactory.createElement("use");
return s.append(n), n.setAttribute("href", `#${e}`), n.classList.add("clip"), i;
}
#o(t, e) {
for (const [s, i] of Object.entries(e))
i === null ? t.removeAttribute(s) : t.setAttribute(s, i);
}
draw(t, e = !1, s = !1) {
const i = ot.#s++, n = this.#r(), r = ot._svgFactory.createElement("defs");
n.append(r);
const a = ot._svgFactory.createElement("path");
r.append(a);
const o = `path_p${this.pageIndex}_${i}`;
a.setAttribute("id", o), a.setAttribute("vector-effect", "non-scaling-stroke"), e && this.#i.set(i, a);
const l = s ? this.#n(r, o) : null, h = ot._svgFactory.createElement("use");
return n.append(h), h.setAttribute("href", `#${o}`), this.updateProperties(n, t), this.#e.set(i, n), {
id: i,
clipPathId: `url(#${l})`
};
}
drawOutline(t, e) {
const s = ot.#s++, i = this.#r(), n = ot._svgFactory.createElement("defs");
i.append(n);
const r = ot._svgFactory.createElement("path");
n.append(r);
const a = `path_p${this.pageIndex}_${s}`;
r.setAttribute("id", a), r.setAttribute("vector-effect", "non-scaling-stroke");
let o;
if (e) {
const c = ot._svgFactory.createElement("mask");
n.append(c), o = `mask_p${this.pageIndex}_${s}`, c.setAttribute("id", o), c.setAttribute("maskUnits", "objectBoundingBox");
const u = ot._svgFactory.createElement("rect");
c.append(u), u.setAttribute("width", "1"), u.setAttribute("height", "1"), u.setAttribute("fill", "white");
const f = ot._svgFactory.createElement("use");
c.append(f), f.setAttribute("href", `#${a}`), f.setAttribute("stroke", "none"), f.setAttribute("fill", "black"), f.setAttribute("fill-rule", "nonzero"), f.classList.add("mask");
}
const l = ot._svgFactory.createElement("use");
i.append(l), l.setAttribute("href", `#${a}`), o && l.setAttribute("mask", `url(#${o})`);
const h = l.cloneNode();
return i.append(h), l.classList.add("mainOutline"), h.classList.add("secondaryOutline"), this.updateProperties(i, t), this.#e.set(s, i), s;
}
finalizeDraw(t, e) {
this.#i.delete(t), this.updateProperties(t, e);
}
updateProperties(t, e) {
if (!e)
return;
const {
root: s,
bbox: i,
rootClass: n,
path: r
} = e, a = typeof t == "number" ? this.#e.get(t) : t;
if (a) {
if (s && this.#o(a, s), i && ot.#a(a, i), n) {
const {
classList: o
} = a;
for (const [l, h] of Object.entries(n))
o.toggle(l, h);
}
if (r) {
const l = a.firstElementChild.firstElementChild;
this.#o(l, r);
}
}
}
updateParent(t, e) {
if (e === this)
return;
const s = this.#e.get(t);
s && (e.#t.append(s), this.#e.delete(t), e.#e.set(t, s));
}
remove(t) {
this.#i.delete(t), this.#t !== null && (this.#e.get(t).remove(), this.#e.delete(t));
}
destroy() {
this.#t = null;
for (const t of this.#e.values())
t.remove();
this.#e.clear(), this.#i.clear();
}
}
globalThis._pdfjsTestingUtils = {
HighlightOutliner: xs
};
globalThis.pdfjsLib = {
AbortException: $t,
AnnotationEditorLayer: It,
AnnotationEditorParamsType: O,
AnnotationEditorType: F,
AnnotationEditorUIManager: zt,
AnnotationLayer: Hs,
AnnotationMode: Ut,
AnnotationType: st,
applyOpacity: vn,
build: kr,
ColorPicker: _t,
createValidAbsoluteUrl: Ai,
CSSConstants: wn,
DOMSVGFactory: qe,
DrawLayer: ot,
FeatureTest: ht,
fetchData: Pe,
findContrastColor: _n,
getDocument: Sr,
getFilenameFromUrl: pn,
getPdfFilenameFromUrl: gn,
getRGB: Me,
getUuid: _i,
getXfaPageViewport: bn,
GlobalWorkerOptions: ve,
ImageKind: je,
InvalidPDFException: bs,
isDataScheme: Ze,
isPdfFile: Ms,
isValidExplicitDest: Dn,
MathClamp: ft,
noContextMenu: St,
normalizeUnicode: dn,
OPS: Se,
OutputScale: Rt,
PasswordResponses: en,
PDFDataRangeTransport: zi,
PDFDateString: ys,
PDFWorker: Ce,
PermissionFlag: tn,
PixelsPerInch: he,
RenderingCancelledException: ks,
renderRichText: Ci,
ResponseException: We,
setLayerDimensions: qt,
shadow: I,
SignatureExtractor: ee,
stopEvent: J,
SupportedImageMimeTypes: As,
TextLayer: dt,
TouchManager: ts,
updateUrlHash: wi,
Util: P,
VerbosityLevel: Ke,
version: Pr,
XfaLayer: Ei
};
export {
$t as AbortException,
It as AnnotationEditorLayer,
O as AnnotationEditorParamsType,
F as AnnotationEditorType,
zt as AnnotationEditorUIManager,
Hs as AnnotationLayer,
Ut as AnnotationMode,
st as AnnotationType,
wn as CSSConstants,
_t as ColorPicker,
qe as DOMSVGFactory,
ot as DrawLayer,
ht as FeatureTest,
ve as GlobalWorkerOptions,
je as ImageKind,
bs as InvalidPDFException,
ft as MathClamp,
Se as OPS,
Rt as OutputScale,
zi as PDFDataRangeTransport,
ys as PDFDateString,
Ce as PDFWorker,
en as PasswordResponses,
tn as PermissionFlag,
he as PixelsPerInch,
ks as RenderingCancelledException,
We as ResponseException,
ee as SignatureExtractor,
As as SupportedImageMimeTypes,
dt as TextLayer,
ts as TouchManager,
P as Util,
Ke as VerbosityLevel,
Ei as XfaLayer,
vn as applyOpacity,
kr as build,
Ai as createValidAbsoluteUrl,
Pe as fetchData,
_n as findContrastColor,
Sr as getDocument,
pn as getFilenameFromUrl,
gn as getPdfFilenameFromUrl,
Me as getRGB,
_i as getUuid,
bn as getXfaPageViewport,
Ze as isDataScheme,
Ms as isPdfFile,
Dn as isValidExplicitDest,
St as noContextMenu,
dn as normalizeUnicode,
Ci as renderRichText,
qt as setLayerDimensions,
I as shadow,
J as stopEvent,
wi as updateUrlHash,
Pr as version
};
//# sourceMappingURL=pdf-U_mH0bJO.js.map