UNPKG

@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
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