{"version":3,"file":"debugger.mjs","mappings":"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","sources":["webpack://pdf.js/./web/pdfjs.js","webpack://pdf.js/./src/shared/util.js","webpack://pdf.js/./src/display/display_utils.js","webpack://pdf.js/./web/internal/multiline_view.js","webpack://pdf.js/./web/internal/draw_ops_view.js","webpack://pdf.js/./web/internal/canvas_context_details_view.js","webpack://pdf.js/./src/display/canvas_factory.js","webpack://pdf.js/./src/display/dom_canvas_factory.js","webpack://pdf.js/./web/internal/font_view.js","webpack://pdf.js/./web/internal/split_view.js","webpack://pdf.js/./web/internal/page_view.js","webpack://pdf.js/./web/internal/tree_view.js","webpack://pdf.js/./web/internal/debugger.js"],"sourcesContent":["/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst {\n  AbortException,\n  AnnotationEditorLayer,\n  AnnotationEditorParamsType,\n  AnnotationEditorType,\n  AnnotationEditorUIManager,\n  AnnotationLayer,\n  AnnotationMode,\n  AnnotationType,\n  applyOpacity,\n  build,\n  ColorPicker,\n  createValidAbsoluteUrl,\n  CSSConstants,\n  DOMSVGFactory,\n  DrawLayer,\n  FeatureTest,\n  fetchData,\n  findContrastColor,\n  getDocument,\n  getFilenameFromUrl,\n  getPdfFilenameFromUrl,\n  getRGB,\n  getRGBA,\n  getUuid,\n  GlobalWorkerOptions,\n  ImageKind,\n  InvalidPDFException,\n  isDataScheme,\n  isPdfFile,\n  isValidExplicitDest,\n  makeArr,\n  makeMap,\n  makeObj,\n  makeSet,\n  MathClamp,\n  noContextMenu,\n  normalizeUnicode,\n  OPS,\n  OutputScale,\n  PasswordException,\n  PasswordResponses,\n  PDFDataRangeTransport,\n  PDFDateString,\n  PDFWorker,\n  PermissionFlag,\n  PixelsPerInch,\n  RenderingCancelledException,\n  renderRichText,\n  ResponseException,\n  setLayerDimensions,\n  shadow,\n  SignatureExtractor,\n  stopEvent,\n  SupportedImageMimeTypes,\n  TextLayer,\n  TextLayerImages,\n  TouchManager,\n  updateUrlHash,\n  Util,\n  VerbosityLevel,\n  version,\n  XfaLayer,\n} = globalThis.pdfjsLib;\n\nexport {\n  AbortException,\n  AnnotationEditorLayer,\n  AnnotationEditorParamsType,\n  AnnotationEditorType,\n  AnnotationEditorUIManager,\n  AnnotationLayer,\n  AnnotationMode,\n  AnnotationType,\n  applyOpacity,\n  build,\n  ColorPicker,\n  createValidAbsoluteUrl,\n  CSSConstants,\n  DOMSVGFactory,\n  DrawLayer,\n  FeatureTest,\n  fetchData,\n  findContrastColor,\n  getDocument,\n  getFilenameFromUrl,\n  getPdfFilenameFromUrl,\n  getRGB,\n  getRGBA,\n  getUuid,\n  GlobalWorkerOptions,\n  ImageKind,\n  InvalidPDFException,\n  isDataScheme,\n  isPdfFile,\n  isValidExplicitDest,\n  makeArr,\n  makeMap,\n  makeObj,\n  makeSet,\n  MathClamp,\n  noContextMenu,\n  normalizeUnicode,\n  OPS,\n  OutputScale,\n  PasswordException,\n  PasswordResponses,\n  PDFDataRangeTransport,\n  PDFDateString,\n  PDFWorker,\n  PermissionFlag,\n  PixelsPerInch,\n  RenderingCancelledException,\n  renderRichText,\n  ResponseException,\n  setLayerDimensions,\n  shadow,\n  SignatureExtractor,\n  stopEvent,\n  SupportedImageMimeTypes,\n  TextLayer,\n  TextLayerImages,\n  TouchManager,\n  updateUrlHash,\n  Util,\n  VerbosityLevel,\n  version,\n  XfaLayer,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n  (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n  typeof process === \"object\" &&\n  process + \"\" === \"[object process]\" &&\n  !process.versions.nw &&\n  !(process.versions.electron && process.type && process.type !== \"browser\");\n\nconst BBOX_INIT = [Infinity, Infinity, -Infinity, -Infinity];\nconst F32_BBOX_INIT = new Float32Array(BBOX_INIT);\n\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\n// Default CIDFont /DW2: [vertical origin y, vertical displacement y].\n// PDF 1.7, Table 5.14 specifies [880 -1000].\nconst DEFAULT_VERTICAL_ORIGIN_Y = 880;\nconst DEFAULT_VERTICAL_ADVANCE = 1000;\n\n// Represent the percentage of the height of a single-line field over\n// the font size. Acrobat seems to use this value.\nconst LINE_FACTOR = 1.35;\nconst LINE_DESCENT_FACTOR = 0.35;\nconst BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR;\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\n/**\n * Refer to the `WorkerTransport.getRenderingIntent`-method in the API, to see\n * how these flags are being used:\n *  - ANY, DISPLAY, and PRINT are the normal rendering intents, note the\n *    `PDFPageProxy.{render, getOperatorList, getAnnotations}`-methods.\n *  - SAVE is used, on the worker-thread, when saving modified annotations.\n *  - ANNOTATIONS_FORMS, ANNOTATIONS_STORAGE, ANNOTATIONS_DISABLE control which\n *    annotations are rendered onto the canvas (i.e. by being included in the\n *    operatorList), note the `PDFPageProxy.{render, getOperatorList}`-methods\n *    and their `annotationMode`-option.\n *  - IS_EDITING is used when editing is active in the viewer.\n *  - OPLIST is used with the `PDFPageProxy.getOperatorList`-method, note the\n *    `OperatorList`-constructor (on the worker-thread).\n */\nconst RenderingIntentFlag = {\n  ANY: 0x01,\n  DISPLAY: 0x02,\n  PRINT: 0x04,\n  SAVE: 0x08,\n  ANNOTATIONS_FORMS: 0x10,\n  ANNOTATIONS_STORAGE: 0x20,\n  ANNOTATIONS_DISABLE: 0x40,\n  IS_EDITING: 0x80,\n  OPLIST: 0x100,\n};\n\nconst AnnotationMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_FORMS: 2,\n  ENABLE_STORAGE: 3,\n};\n\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\n\nconst AnnotationEditorType = {\n  DISABLE: -1,\n  NONE: 0,\n  FREETEXT: 3,\n  HIGHLIGHT: 9,\n  STAMP: 13,\n  INK: 15,\n  POPUP: 16,\n  SIGNATURE: 101,\n  COMMENT: 102,\n};\n\nconst AnnotationEditorParamsType = {\n  RESIZE: 1,\n  CREATE: 2,\n  FREETEXT_SIZE: 11,\n  FREETEXT_COLOR: 12,\n  FREETEXT_OPACITY: 13,\n  INK_COLOR: 21,\n  INK_THICKNESS: 22,\n  INK_OPACITY: 23,\n  INK_COLOR_AND_OPACITY: 24,\n  HIGHLIGHT_COLOR: 31,\n  HIGHLIGHT_THICKNESS: 32,\n  HIGHLIGHT_FREE: 33,\n  HIGHLIGHT_SHOW_ALL: 34,\n  DRAW_STEP: 41,\n};\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\nconst PermissionFlag = {\n  PRINT: 0x04,\n  MODIFY_CONTENTS: 0x08,\n  COPY: 0x10,\n  MODIFY_ANNOTATIONS: 0x20,\n  FILL_INTERACTIVE_FORMS: 0x100,\n  COPY_FOR_ACCESSIBILITY: 0x200,\n  ASSEMBLE: 0x400,\n  PRINT_HIGH_QUALITY: 0x800,\n};\n\nconst MeshFigureType = {\n  TRIANGLES: 1,\n  LATTICE: 2,\n  PATCH: 3,\n};\n\nconst TextRenderingMode = {\n  FILL: 0,\n  STROKE: 1,\n  FILL_STROKE: 2,\n  INVISIBLE: 3,\n  FILL_ADD_TO_PATH: 4,\n  STROKE_ADD_TO_PATH: 5,\n  FILL_STROKE_ADD_TO_PATH: 6,\n  ADD_TO_PATH: 7,\n  FILL_STROKE_MASK: 3,\n  ADD_TO_PATH_FLAG: 4,\n};\n\nconst ImageKind = {\n  GRAYSCALE_1BPP: 1,\n  RGB_24BPP: 2,\n  RGBA_32BPP: 3,\n};\n\nconst AnnotationType = {\n  TEXT: 1,\n  LINK: 2,\n  FREETEXT: 3,\n  LINE: 4,\n  SQUARE: 5,\n  CIRCLE: 6,\n  POLYGON: 7,\n  POLYLINE: 8,\n  HIGHLIGHT: 9,\n  UNDERLINE: 10,\n  SQUIGGLY: 11,\n  STRIKEOUT: 12,\n  STAMP: 13,\n  CARET: 14,\n  INK: 15,\n  POPUP: 16,\n  FILEATTACHMENT: 17,\n  SOUND: 18,\n  MOVIE: 19,\n  WIDGET: 20,\n  SCREEN: 21,\n  PRINTERMARK: 22,\n  TRAPNET: 23,\n  WATERMARK: 24,\n  THREED: 25,\n  REDACT: 26,\n  RICHMEDIA: 27,\n};\n\nconst AnnotationReplyType = {\n  GROUP: \"Group\",\n  REPLY: \"R\",\n};\n\n// Rendition action operations from Table 214, Section 12.6.4.13 of the PDF\n// specification (ISO 32000-1).\nconst AnnotationRenditionOperation = {\n  PLAY_OR_RESUME: 0,\n  STOP: 1,\n  PAUSE: 2,\n  RESUME: 3,\n  PLAY: 4,\n};\n\nconst AnnotationFlag = {\n  INVISIBLE: 0x01,\n  HIDDEN: 0x02,\n  PRINT: 0x04,\n  NOZOOM: 0x08,\n  NOROTATE: 0x10,\n  NOVIEW: 0x20,\n  READONLY: 0x40,\n  LOCKED: 0x80,\n  TOGGLENOVIEW: 0x100,\n  LOCKEDCONTENTS: 0x200,\n};\n\nconst AnnotationFieldFlag = {\n  READONLY: 0x0000001,\n  REQUIRED: 0x0000002,\n  NOEXPORT: 0x0000004,\n  MULTILINE: 0x0001000,\n  PASSWORD: 0x0002000,\n  NOTOGGLETOOFF: 0x0004000,\n  RADIO: 0x0008000,\n  PUSHBUTTON: 0x0010000,\n  COMBO: 0x0020000,\n  EDIT: 0x0040000,\n  SORT: 0x0080000,\n  FILESELECT: 0x0100000,\n  MULTISELECT: 0x0200000,\n  DONOTSPELLCHECK: 0x0400000,\n  DONOTSCROLL: 0x0800000,\n  COMB: 0x1000000,\n  RICHTEXT: 0x2000000,\n  RADIOSINUNISON: 0x2000000,\n  COMMITONSELCHANGE: 0x4000000,\n};\n\nconst AnnotationBorderStyleType = {\n  SOLID: 1,\n  DASHED: 2,\n  BEVELED: 3,\n  INSET: 4,\n  UNDERLINE: 5,\n};\n\nconst AnnotationActionEventType = {\n  E: \"Mouse Enter\",\n  X: \"Mouse Exit\",\n  D: \"Mouse Down\",\n  U: \"Mouse Up\",\n  Fo: \"Focus\",\n  Bl: \"Blur\",\n  PO: \"PageOpen\",\n  PC: \"PageClose\",\n  PV: \"PageVisible\",\n  PI: \"PageInvisible\",\n  K: \"Keystroke\",\n  F: \"Format\",\n  V: \"Validate\",\n  C: \"Calculate\",\n};\n\nconst DocumentActionEventType = {\n  WC: \"WillClose\",\n  WS: \"WillSave\",\n  DS: \"DidSave\",\n  WP: \"WillPrint\",\n  DP: \"DidPrint\",\n};\n\nconst PageActionEventType = {\n  O: \"PageOpen\",\n  C: \"PageClose\",\n};\n\nconst VerbosityLevel = {\n  ERRORS: 0,\n  WARNINGS: 1,\n  INFOS: 5,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n  // Intentionally start from 1 so it is easy to spot bad operators that will be\n  // 0's.\n  // PLEASE NOTE: We purposely keep any removed operators commented out, since\n  //              re-numbering the list would risk breaking third-party users.\n  dependency: 1,\n  setLineWidth: 2,\n  setLineCap: 3,\n  setLineJoin: 4,\n  setMiterLimit: 5,\n  setDash: 6,\n  setRenderingIntent: 7,\n  setFlatness: 8,\n  setGState: 9,\n  save: 10,\n  restore: 11,\n  transform: 12,\n  moveTo: 13,\n  lineTo: 14,\n  curveTo: 15,\n  curveTo2: 16,\n  curveTo3: 17,\n  closePath: 18,\n  rectangle: 19,\n  stroke: 20,\n  closeStroke: 21,\n  fill: 22,\n  eoFill: 23,\n  fillStroke: 24,\n  eoFillStroke: 25,\n  closeFillStroke: 26,\n  closeEOFillStroke: 27,\n  endPath: 28,\n  clip: 29,\n  eoClip: 30,\n  beginText: 31,\n  endText: 32,\n  setCharSpacing: 33,\n  setWordSpacing: 34,\n  setHScale: 35,\n  setLeading: 36,\n  setFont: 37,\n  setTextRenderingMode: 38,\n  setTextRise: 39,\n  moveText: 40,\n  setLeadingMoveText: 41,\n  setTextMatrix: 42,\n  nextLine: 43,\n  showText: 44,\n  showSpacedText: 45,\n  nextLineShowText: 46,\n  nextLineSetSpacingShowText: 47,\n  setCharWidth: 48,\n  setCharWidthAndBounds: 49,\n  setStrokeColorSpace: 50,\n  setFillColorSpace: 51,\n  setStrokeColor: 52,\n  setStrokeColorN: 53,\n  setFillColor: 54,\n  setFillColorN: 55,\n  setStrokeGray: 56,\n  setFillGray: 57,\n  setStrokeRGBColor: 58,\n  setFillRGBColor: 59,\n  setStrokeCMYKColor: 60,\n  setFillCMYKColor: 61,\n  shadingFill: 62,\n  beginInlineImage: 63,\n  beginImageData: 64,\n  endInlineImage: 65,\n  paintXObject: 66,\n  markPoint: 67,\n  markPointProps: 68,\n  beginMarkedContent: 69,\n  beginMarkedContentProps: 70,\n  endMarkedContent: 71,\n  beginCompat: 72,\n  endCompat: 73,\n  paintFormXObjectBegin: 74,\n  paintFormXObjectEnd: 75,\n  beginGroup: 76,\n  endGroup: 77,\n  // beginAnnotations: 78,\n  // endAnnotations: 79,\n  beginAnnotation: 80,\n  endAnnotation: 81,\n  // paintJpegXObject: 82,\n  paintImageMaskXObject: 83,\n  paintImageMaskXObjectGroup: 84,\n  paintImageXObject: 85,\n  paintInlineImageXObject: 86,\n  paintInlineImageXObjectGroup: 87,\n  paintImageXObjectRepeat: 88,\n  paintImageMaskXObjectRepeat: 89,\n  paintSolidColorImageMask: 90,\n  constructPath: 91,\n  setStrokeTransparent: 92,\n  setFillTransparent: 93,\n  rawFillPath: 94,\n};\n\n// In order to have a switch statement that is fast (i.e. which use a jump\n// table), we need to have the OPS in a contiguous range.\nconst DrawOPS = {\n  moveTo: 0,\n  lineTo: 1,\n  curveTo: 2,\n  quadraticCurveTo: 3,\n  closePath: 4,\n};\n\nconst PasswordResponses = {\n  NEED_PASSWORD: 1,\n  INCORRECT_PASSWORD: 2,\n};\n\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n  if (Number.isInteger(level)) {\n    verbosity = level;\n  }\n}\n\nfunction getVerbosityLevel() {\n  return verbosity;\n}\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n  if (verbosity >= VerbosityLevel.INFOS) {\n    // eslint-disable-next-line no-console\n    console.info(`Info: ${msg}`);\n  }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n  if (verbosity >= VerbosityLevel.WARNINGS) {\n    // eslint-disable-next-line no-console\n    console.warn(`Warning: ${msg}`);\n  }\n}\n\n/**\n * @param {string} msg\n * @returns {never}\n */\nfunction unreachable(msg) {\n  throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n  if (!cond) {\n    unreachable(msg);\n  }\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n  switch (url?.protocol) {\n    case \"http:\":\n    case \"https:\":\n    case \"ftp:\":\n    case \"mailto:\":\n    case \"tel:\":\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} [baseUrl] - An absolute URL.\n * @param {object} [options]\n * @returns {URL | null} Either a valid {@link URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n  if (!url) {\n    return null;\n  }\n  if (options && typeof url === \"string\") {\n    // Let URLs beginning with \"www.\" default to using the \"http://\" protocol.\n    if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n      const dots = url.match(/\\./g);\n      // Avoid accidentally matching a *relative* URL pointing to a file named\n      // e.g. \"www.pdf\" or similar.\n      if (dots?.length >= 2) {\n        url = `http://${url}`;\n      }\n    }\n\n    // According to ISO 32000-1:2008, section 12.6.4.7, URIs should be encoded\n    // in 7-bit ASCII. Some bad PDFs use UTF-8 encoding; see bug 1122280.\n    if (options.tryConvertEncoding) {\n      try {\n        url = stringToUTF8String(url);\n      } catch {}\n    }\n  }\n\n  const absoluteUrl = baseUrl ? URL.parse(url, baseUrl) : URL.parse(url);\n  return _isValidProtocol(absoluteUrl) ? absoluteUrl : null;\n}\n\n/**\n * Remove, or replace, the hash property of the URL.\n * @param {URL|string} url - The absolute, or relative, URL.\n * @param {string} hash - The hash property (use an empty string to remove it).\n * @param {boolean} [allowRel] - Allow relative URLs.\n * @returns {string} The resulting URL string.\n */\nfunction updateUrlHash(url, hash, allowRel = false) {\n  const res = URL.parse(url);\n  if (res) {\n    res.hash = hash;\n    return res.href;\n  }\n  // Support well-formed relative URLs, necessary for `web/app.js` in GENERIC\n  // builds, by optionally falling back to string parsing.\n  if (allowRel && createValidAbsoluteUrl(url, \"http://example.com\")) {\n    return url.split(\"#\", 1)[0] + `${hash ? `#${hash}` : \"\"}`;\n  }\n  return \"\";\n}\n\n// Extract the final component from a path string.\nfunction stripPath(str) {\n  return str.substring(str.lastIndexOf(\"/\") + 1);\n}\n\nfunction shadow(obj, prop, value, nonSerializable = false) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    assert(\n      prop in obj,\n      `shadow: Property \"${prop && prop.toString()}\" not found in object.`\n    );\n  }\n  Object.defineProperty(obj, prop, {\n    value,\n    enumerable: !nonSerializable,\n    configurable: true,\n    writable: false,\n  });\n  return value;\n}\n\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n  // eslint-disable-next-line no-shadow\n  function BaseException(message, name) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseException\n    ) {\n      unreachable(\"Cannot initialize BaseException.\");\n    }\n    this.message = message;\n    this.name = name;\n  }\n  BaseException.prototype = new Error();\n  BaseException.constructor = BaseException;\n\n  return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n  constructor(msg, code) {\n    super(msg, \"PasswordException\");\n    this.code = code;\n  }\n}\n\nclass UnknownErrorException extends BaseException {\n  constructor(msg, details) {\n    super(msg, \"UnknownErrorException\");\n    this.details = details;\n  }\n}\n\nclass InvalidPDFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"InvalidPDFException\");\n  }\n}\n\nclass ResponseException extends BaseException {\n  constructor(msg, status, missing) {\n    super(msg, \"ResponseException\");\n    this.status = status;\n    this.missing = missing;\n  }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {\n  constructor(msg) {\n    super(msg, \"FormatError\");\n  }\n}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {\n  constructor(msg) {\n    super(msg, \"AbortException\");\n  }\n}\n\nfunction bytesToString(bytes) {\n  if (typeof bytes !== \"object\" || bytes?.length === undefined) {\n    unreachable(\"Invalid argument for bytesToString\");\n  }\n  const length = bytes.length;\n  const MAX_ARGUMENT_COUNT = 8192;\n  if (length < MAX_ARGUMENT_COUNT) {\n    return String.fromCharCode.apply(null, bytes);\n  }\n  const strBuf = [];\n  for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n    const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n    const chunk = bytes.subarray(i, chunkEnd);\n    strBuf.push(String.fromCharCode.apply(null, chunk));\n  }\n  return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n  if (typeof str !== \"string\") {\n    unreachable(\"Invalid argument for stringToBytes\");\n  }\n  const length = str.length;\n  const bytes = new Uint8Array(length);\n  for (let i = 0; i < length; ++i) {\n    bytes[i] = str.charCodeAt(i) & 0xff;\n  }\n  return bytes;\n}\n\nclass FeatureTest {\n  static get isLittleEndian() {\n    const buffer8 = new Uint8Array(4);\n    buffer8[0] = 1;\n    const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n\n    return shadow(this, \"isLittleEndian\", view32[0] === 1);\n  }\n\n  static get isOffscreenCanvasSupported() {\n    return shadow(\n      this,\n      \"isOffscreenCanvasSupported\",\n      typeof OffscreenCanvas !== \"undefined\"\n    );\n  }\n\n  static get isImageDecoderSupported() {\n    return shadow(\n      this,\n      \"isImageDecoderSupported\",\n      typeof ImageDecoder !== \"undefined\"\n    );\n  }\n\n  static get isVideoFrameSupported() {\n    return shadow(\n      this,\n      \"isVideoFrameSupported\",\n      typeof VideoFrame !== \"undefined\"\n    );\n  }\n\n  static get isFloat16ArraySupported() {\n    return shadow(\n      this,\n      \"isFloat16ArraySupported\",\n      typeof Float16Array !== \"undefined\"\n    );\n  }\n\n  static get isSanitizerSupported() {\n    return shadow(\n      this,\n      \"isSanitizerSupported\",\n      typeof Sanitizer !== \"undefined\"\n    );\n  }\n\n  static get platform() {\n    const { platform, userAgent } = navigator;\n\n    return shadow(this, \"platform\", {\n      isAndroid: userAgent.includes(\"Android\"),\n      isLinux: platform.includes(\"Linux\"),\n      isMac: platform.includes(\"Mac\"),\n      isWindows: platform.includes(\"Win\"),\n      isFirefox:\n        (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n        userAgent.includes(\"Firefox\"),\n    });\n  }\n\n  static get isCanvasFilterSupported() {\n    let ctx;\n    if (this.isOffscreenCanvasSupported) {\n      ctx = new OffscreenCanvas(1, 1).getContext(\"2d\");\n    } else if (\n      (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"WORKER_THREAD\")) &&\n      typeof document !== \"undefined\"\n    ) {\n      ctx = document.createElement(\"canvas\").getContext(\"2d\");\n    }\n    // Spec-compliant Canvas2D defaults `ctx.filter` to \"none\". On\n    // browsers without filter support (Safari) the property is absent\n    // until you assign to it, after which it behaves like an ordinary\n    // JS property and stores whatever string you set without applying\n    // it. Probing the default lets us detect the difference reliably.\n    return shadow(this, \"isCanvasFilterSupported\", ctx?.filter !== undefined);\n  }\n\n  static get isAlphaColorInputSupported() {\n    if (\n      (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"WORKER_THREAD\")) ||\n      typeof document === \"undefined\"\n    ) {\n      return shadow(this, \"isAlphaColorInputSupported\", false);\n    }\n    const input = document.createElement(\"input\");\n    input.type = \"color\";\n    input.setAttribute(\"alpha\", \"\");\n    input.value = \"#ff000080\";\n    // If alpha is supported the color picker retains the alpha channel, so\n    // the value won't be a plain opaque color (7-char #rrggbb).\n    return shadow(\n      this,\n      \"isAlphaColorInputSupported\",\n      input.value !== \"#ff0000\"\n    );\n  }\n\n  static get isBackdropFilterSupported() {\n    return shadow(\n      this,\n      \"isBackdropFilterSupported\",\n      typeof CSS !== \"undefined\" && CSS.supports(\"backdrop-filter\", \"blur(1px)\")\n    );\n  }\n}\n\nclass Util {\n  static get hexNums() {\n    return shadow(\n      this,\n      \"hexNums\",\n      Array.from({ length: 256 }, (_, n) => n.toString(16).padStart(2, \"0\"))\n    );\n  }\n\n  static makeHexColor(r, g, b) {\n    return `#${this.hexNums[r]}${this.hexNums[g]}${this.hexNums[b]}`;\n  }\n\n  static get identity0to256Map() {\n    return shadow(\n      this,\n      \"identity0to256Map\",\n      Uint8Array.from({ length: 256 }, (_, i) => i)\n    );\n  }\n\n  // Concatenates two transformation matrices together and returns the result.\n  static transform(m1, m2) {\n    return [\n      m1[0] * m2[0] + m1[2] * m2[1],\n      m1[1] * m2[0] + m1[3] * m2[1],\n      m1[0] * m2[2] + m1[2] * m2[3],\n      m1[1] * m2[2] + m1[3] * m2[3],\n      m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n      m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n    ];\n  }\n\n  // Multiplies m (an array-based transform) by md (a DOMMatrix transform).\n  static multiplyByDOMMatrix(m, md) {\n    return [\n      m[0] * md.a + m[2] * md.b,\n      m[1] * md.a + m[3] * md.b,\n      m[0] * md.c + m[2] * md.d,\n      m[1] * md.c + m[3] * md.d,\n      m[0] * md.e + m[2] * md.f + m[4],\n      m[1] * md.e + m[3] * md.f + m[5],\n    ];\n  }\n\n  // For 2d affine transforms\n  static applyTransform(p, m, pos = 0) {\n    const p0 = p[pos];\n    const p1 = p[pos + 1];\n    p[pos] = p0 * m[0] + p1 * m[2] + m[4];\n    p[pos + 1] = p0 * m[1] + p1 * m[3] + m[5];\n  }\n\n  static applyTransformToBezier(p, transform, pos = 0) {\n    const m0 = transform[0];\n    const m1 = transform[1];\n    const m2 = transform[2];\n    const m3 = transform[3];\n    const m4 = transform[4];\n    const m5 = transform[5];\n    for (let i = 0; i < 6; i += 2) {\n      const pI = p[pos + i];\n      const pI1 = p[pos + i + 1];\n      p[pos + i] = pI * m0 + pI1 * m2 + m4;\n      p[pos + i + 1] = pI * m1 + pI1 * m3 + m5;\n    }\n  }\n\n  static applyInverseTransform(p, m) {\n    const p0 = p[0];\n    const p1 = p[1];\n    const d = m[0] * m[3] - m[1] * m[2];\n    p[0] = (p0 * m[3] - p1 * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n    p[1] = (-p0 * m[1] + p1 * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n  }\n\n  // Applies the transform to the rectangle and finds the minimum axially\n  // aligned bounding box.\n  static axialAlignedBoundingBox(rect, transform, output) {\n    const m0 = transform[0];\n    const m1 = transform[1];\n    const m2 = transform[2];\n    const m3 = transform[3];\n    const m4 = transform[4];\n    const m5 = transform[5];\n    const r0 = rect[0];\n    const r1 = rect[1];\n    const r2 = rect[2];\n    const r3 = rect[3];\n\n    let a0 = m0 * r0 + m4;\n    let a2 = a0;\n    let a1 = m0 * r2 + m4;\n    let a3 = a1;\n    let b0 = m3 * r1 + m5;\n    let b2 = b0;\n    let b1 = m3 * r3 + m5;\n    let b3 = b1;\n\n    if (m1 !== 0 || m2 !== 0) {\n      // Non-scaling matrix: shouldn't be frequent.\n      const m1r0 = m1 * r0;\n      const m1r2 = m1 * r2;\n      const m2r1 = m2 * r1;\n      const m2r3 = m2 * r3;\n      a0 += m2r1;\n      a3 += m2r1;\n      a1 += m2r3;\n      a2 += m2r3;\n      b0 += m1r0;\n      b3 += m1r0;\n      b1 += m1r2;\n      b2 += m1r2;\n    }\n\n    output[0] = Math.min(output[0], a0, a1, Math.min(a2, a3));\n    output[1] = Math.min(output[1], b0, b1, Math.min(b2, b3));\n    output[2] = Math.max(output[2], a0, a1, Math.max(a2, a3));\n    output[3] = Math.max(output[3], b0, b1, Math.max(b2, b3));\n  }\n\n  static inverseTransform(m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    return [\n      m[3] / d,\n      -m[1] / d,\n      -m[2] / d,\n      m[0] / d,\n      (m[2] * m[5] - m[4] * m[3]) / d,\n      (m[4] * m[1] - m[5] * m[0]) / d,\n    ];\n  }\n\n  // This calculation uses Singular Value Decomposition.\n  // The SVD can be represented with formula A = USV. We are interested in the\n  // matrix S here because it represents the scale values.\n  static singularValueDecompose2dScale(matrix, output) {\n    const m0 = matrix[0];\n    const m1 = matrix[1];\n    const m2 = matrix[2];\n    const m3 = matrix[3];\n    // Multiply matrix m with its transpose.\n    const a = m0 ** 2 + m1 ** 2;\n    const b = m0 * m2 + m1 * m3;\n    const c = m2 ** 2 + m3 ** 2;\n\n    // Solve the second degree polynomial to get roots.\n    const first = (a + c) / 2;\n    const second = Math.sqrt(first ** 2 - (a * c - b ** 2));\n    output[0] = Math.sqrt(first + second || 1);\n    output[1] = Math.sqrt(first - second || 1);\n  }\n\n  // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n  // For coordinate systems whose origin lies in the bottom-left, this\n  // means normalization to (BL,TR) ordering. For systems with origin in the\n  // top-left, this means (TL,BR) ordering.\n  static normalizeRect(rect) {\n    const r = rect.slice(0); // clone rect\n    if (rect[0] > rect[2]) {\n      r[0] = rect[2];\n      r[2] = rect[0];\n    }\n    if (rect[1] > rect[3]) {\n      r[1] = rect[3];\n      r[3] = rect[1];\n    }\n    return r;\n  }\n\n  // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n  // intersection of rect1 and rect2. If no intersection, returns 'null'\n  // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n  static intersect(rect1, rect2) {\n    const xLow = Math.max(\n      Math.min(rect1[0], rect1[2]),\n      Math.min(rect2[0], rect2[2])\n    );\n    const xHigh = Math.min(\n      Math.max(rect1[0], rect1[2]),\n      Math.max(rect2[0], rect2[2])\n    );\n    if (xLow > xHigh) {\n      return null;\n    }\n    const yLow = Math.max(\n      Math.min(rect1[1], rect1[3]),\n      Math.min(rect2[1], rect2[3])\n    );\n    const yHigh = Math.min(\n      Math.max(rect1[1], rect1[3]),\n      Math.max(rect2[1], rect2[3])\n    );\n    return yLow > yHigh ? null : [xLow, yLow, xHigh, yHigh];\n  }\n\n  static pointBoundingBox(x, y, minMax) {\n    minMax[0] = Math.min(minMax[0], x);\n    minMax[1] = Math.min(minMax[1], y);\n    minMax[2] = Math.max(minMax[2], x);\n    minMax[3] = Math.max(minMax[3], y);\n  }\n\n  static rectBoundingBox(x0, y0, x1, y1, minMax) {\n    minMax[0] = Math.min(minMax[0], x0, x1);\n    minMax[1] = Math.min(minMax[1], y0, y1);\n    minMax[2] = Math.max(minMax[2], x0, x1);\n    minMax[3] = Math.max(minMax[3], y0, y1);\n  }\n\n  static #getExtremumOnCurve(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) {\n    if (t <= 0 || t >= 1) {\n      return;\n    }\n    const mt = 1 - t;\n    const tt = t * t;\n    const ttt = tt * t;\n    const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3;\n    const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3;\n    minMax[0] = Math.min(minMax[0], x);\n    minMax[1] = Math.min(minMax[1], y);\n    minMax[2] = Math.max(minMax[2], x);\n    minMax[3] = Math.max(minMax[3], y);\n  }\n\n  static #getExtremum(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) {\n    if (Math.abs(a) < 1e-12) {\n      if (Math.abs(b) >= 1e-12) {\n        this.#getExtremumOnCurve(\n          x0,\n          x1,\n          x2,\n          x3,\n          y0,\n          y1,\n          y2,\n          y3,\n          -c / b,\n          minMax\n        );\n      }\n      return;\n    }\n\n    const delta = b ** 2 - 4 * c * a;\n    if (delta < 0) {\n      return;\n    }\n    const sqrtDelta = Math.sqrt(delta);\n    const a2 = 2 * a;\n    this.#getExtremumOnCurve(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      (-b + sqrtDelta) / a2,\n      minMax\n    );\n    this.#getExtremumOnCurve(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      (-b - sqrtDelta) / a2,\n      minMax\n    );\n  }\n\n  // From https://github.com/adobe-webplatform/Snap.svg/blob/b365287722a72526000ac4bfcf0ce4cac2faa015/src/path.js#L852\n  static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) {\n    minMax[0] = Math.min(minMax[0], x0, x3);\n    minMax[1] = Math.min(minMax[1], y0, y3);\n    minMax[2] = Math.max(minMax[2], x0, x3);\n    minMax[3] = Math.max(minMax[3], y0, y3);\n\n    this.#getExtremum(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      3 * (-x0 + 3 * (x1 - x2) + x3),\n      6 * (x0 - 2 * x1 + x2),\n      3 * (x1 - x0),\n      minMax\n    );\n    this.#getExtremum(\n      x0,\n      x1,\n      x2,\n      x3,\n      y0,\n      y1,\n      y2,\n      y3,\n      3 * (-y0 + 3 * (y1 - y2) + y3),\n      6 * (y0 - 2 * y1 + y2),\n      3 * (y1 - y0),\n      minMax\n    );\n  }\n}\n\nfunction stringToUTF8String(str) {\n  return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n  return unescape(encodeURIComponent(str));\n}\n\nfunction isArrayEqual(arr1, arr2) {\n  if (arr1.length !== arr2.length) {\n    return false;\n  }\n  for (let i = 0, ii = arr1.length; i < ii; i++) {\n    if (arr1[i] !== arr2[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\nlet NormalizeRegex = null;\nlet NormalizationMap = null;\nfunction normalizeUnicode(str) {\n  if (!NormalizeRegex) {\n    // In order to generate the following regex:\n    //  - create a PDF containing all the chars in the range 0000-FFFF with\n    //    a NFKC which is different of the char.\n    //  - copy and paste all those chars and get the ones where NFKC is\n    //    required.\n    // It appears that most the chars here contain some ligatures.\n    NormalizeRegex =\n      /([\\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;\n    NormalizationMap = new Map([[\"ﬅ\", \"ſt\"]]);\n  }\n  return str.replaceAll(NormalizeRegex, (_, p1, p2) =>\n    p1 ? p1.normalize(\"NFKC\") : NormalizationMap.get(p2)\n  );\n}\n\nfunction getUuid() {\n  if (typeof crypto.randomUUID === \"function\") {\n    return crypto.randomUUID();\n  }\n  const buf = new Uint8Array(32);\n  crypto.getRandomValues(buf);\n  return bytesToString(buf);\n}\n\nfunction _isValidExplicitDest(validRef, validName, dest) {\n  if (!Array.isArray(dest) || dest.length < 2) {\n    return false;\n  }\n  const [page, zoom, ...args] = dest;\n  if (!validRef(page) && !Number.isInteger(page)) {\n    return false;\n  }\n  if (!validName(zoom)) {\n    return false;\n  }\n  const argsLen = args.length;\n  let allowNull = true;\n  switch (zoom.name) {\n    case \"XYZ\":\n      if (argsLen < 2 || argsLen > 3) {\n        return false;\n      }\n      break;\n    case \"Fit\":\n    case \"FitB\":\n      return argsLen === 0;\n    case \"FitH\":\n    case \"FitBH\":\n    case \"FitV\":\n    case \"FitBV\":\n      if (argsLen > 1) {\n        return false;\n      }\n      break;\n    case \"FitR\":\n      if (argsLen !== 4) {\n        return false;\n      }\n      allowNull = false;\n      break;\n    default:\n      return false;\n  }\n  for (const arg of args) {\n    if (typeof arg === \"number\" || (allowNull && arg === null)) {\n      continue;\n    }\n    return false;\n  }\n  return true;\n}\n\n// Helpers for simple `Map.prototype.getOrInsertComputed()` invocations,\n// to avoid duplicate function creation.\nconst makeArr = () => [];\nconst makeMap = () => new Map();\nconst makeObj = () => Object.create(null);\nconst makeSet = () => new Set();\n\n// See https://developer.mozilla.org/en-US/docs/Web/API/Blob/bytes#browser_compatibility\nif (\n  typeof PDFJSDev !== \"undefined\" &&\n  !PDFJSDev.test(\"SKIP_BABEL\") &&\n  typeof Blob.prototype.bytes !== \"function\"\n) {\n  Blob.prototype.bytes = async function () {\n    return new Uint8Array(await this.arrayBuffer());\n  };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/API/Response/bytes#browser_compatibility\nif (\n  typeof PDFJSDev !== \"undefined\" &&\n  !PDFJSDev.test(\"SKIP_BABEL\") &&\n  typeof Response.prototype.bytes !== \"function\"\n) {\n  Response.prototype.bytes = async function () {\n    return new Uint8Array(await this.arrayBuffer());\n  };\n}\n\n// TODO: Remove this once `Iterator.prototype.join` is generally available.\nif (typeof Iterator.prototype.join !== \"function\") {\n  // eslint-disable-next-line no-extend-native\n  Iterator.prototype.join = function (separator) {\n    return [...this].join(separator);\n  };\n}\n\nexport {\n  _isValidExplicitDest,\n  AbortException,\n  AnnotationActionEventType,\n  AnnotationBorderStyleType,\n  AnnotationEditorParamsType,\n  AnnotationEditorPrefix,\n  AnnotationEditorType,\n  AnnotationFieldFlag,\n  AnnotationFlag,\n  AnnotationMode,\n  AnnotationPrefix,\n  AnnotationRenditionOperation,\n  AnnotationReplyType,\n  AnnotationType,\n  assert,\n  BaseException,\n  BASELINE_FACTOR,\n  BBOX_INIT,\n  bytesToString,\n  createValidAbsoluteUrl,\n  DEFAULT_VERTICAL_ADVANCE,\n  DEFAULT_VERTICAL_ORIGIN_Y,\n  DocumentActionEventType,\n  DrawOPS,\n  F32_BBOX_INIT,\n  FeatureTest,\n  FONT_IDENTITY_MATRIX,\n  FormatError,\n  getUuid,\n  getVerbosityLevel,\n  ImageKind,\n  info,\n  InvalidPDFException,\n  isArrayEqual,\n  isNodeJS,\n  LINE_DESCENT_FACTOR,\n  LINE_FACTOR,\n  makeArr,\n  makeMap,\n  makeObj,\n  makeSet,\n  MeshFigureType,\n  normalizeUnicode,\n  OPS,\n  PageActionEventType,\n  PasswordException,\n  PasswordResponses,\n  PermissionFlag,\n  RenderingIntentFlag,\n  ResponseException,\n  setVerbosityLevel,\n  shadow,\n  stringToBytes,\n  stringToUTF8String,\n  stripPath,\n  SVG_NS,\n  TextRenderingMode,\n  UnknownErrorException,\n  unreachable,\n  updateUrlHash,\n  utf8StringToString,\n  Util,\n  VerbosityLevel,\n  warn,\n};\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseException, DrawOPS, Util, warn } from \"../shared/util.js\";\nimport { MathClamp } from \"../shared/math_clamp.js\";\n\nclass PixelsPerInch {\n  static CSS = 96.0;\n\n  static PDF = 72.0;\n\n  static PDF_TO_CSS_UNITS = this.CSS / this.PDF;\n}\n\nclass RenderingCancelledException extends BaseException {\n  constructor(msg, extraDelay = 0) {\n    super(msg, \"RenderingCancelledException\");\n    this.extraDelay = extraDelay;\n  }\n}\n\nfunction getRGBA(color) {\n  if (color.startsWith(\"#\")) {\n    // #RRGGBB or #RRGGBBAA\n    const hex = color.slice(1);\n    return [\n      parseInt(hex.slice(0, 2), 16),\n      parseInt(hex.slice(2, 4), 16),\n      parseInt(hex.slice(4, 6), 16),\n      hex.length >= 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1,\n    ];\n  }\n\n  if (color.startsWith(\"rgb(\")) {\n    // getComputedStyle(...).color returns a `rgb(R, G, B)` color.\n    const [r, g, b] = color\n      .slice(/* \"rgb(\".length */ 4, -1) // Strip out \"rgb(\" and \")\".\n      .split(\",\")\n      .map(x => parseInt(x, 10));\n    return [r, g, b, 1];\n  }\n\n  if (color.startsWith(\"rgba(\")) {\n    const parts = color\n      .slice(/* \"rgba(\".length */ 5, -1) // Strip out \"rgba(\" and \")\".\n      .split(\",\");\n    return [\n      parseInt(parts[0], 10),\n      parseInt(parts[1], 10),\n      parseInt(parts[2], 10),\n      parseFloat(parts[3]),\n    ];\n  }\n\n  // color(srgb r g b / a) — CSS Color 4, used e.g. by Firefox alpha inputs.\n  // Components are in [0, 1]; alpha may be \"none\" (treated as fully opaque).\n  const m = color.match(\n    /^color\\(srgb\\s+([\\d.]+)\\s+([\\d.]+)\\s+([\\d.]+)(?:\\s*\\/\\s*([\\d.]+|none))?\\)$/\n  );\n  if (m) {\n    return [\n      Math.round(parseFloat(m[1]) * 255),\n      Math.round(parseFloat(m[2]) * 255),\n      Math.round(parseFloat(m[3]) * 255),\n      m[4] !== undefined && m[4] !== \"none\" ? parseFloat(m[4]) : 1,\n    ];\n  }\n\n  return null;\n}\n\nfunction getRGB(color) {\n  const rgba = getRGBA(color);\n  if (!rgba) {\n    warn(`Not a valid color format: \"${color}\"`);\n    return [0, 0, 0];\n  }\n  return rgba.slice(0, 3);\n}\n\nfunction getCurrentTransform(ctx) {\n  const { a, b, c, d, e, f } = ctx.getTransform();\n  return [a, b, c, d, e, f];\n}\n\nfunction getCurrentTransformInverse(ctx) {\n  const { a, b, c, d, e, f } = ctx.getTransform().invertSelf();\n  return [a, b, c, d, e, f];\n}\n\n/**\n * Scale factors for the canvas, necessary with HiDPI displays.\n */\nclass OutputScale {\n  constructor() {\n    const { pixelRatio } = OutputScale;\n\n    /**\n     * @type {number} Horizontal scale.\n     */\n    this.sx = pixelRatio;\n\n    /**\n     * @type {number} Vertical scale.\n     */\n    this.sy = pixelRatio;\n  }\n\n  /**\n   * @type {boolean} Returns `true` when scaling is required, `false` otherwise.\n   */\n  get scaled() {\n    return this.sx !== 1 || this.sy !== 1;\n  }\n\n  /**\n   * @type {boolean} Returns `true` when scaling is symmetric,\n   *   `false` otherwise.\n   */\n  get symmetric() {\n    return this.sx === this.sy;\n  }\n\n  /**\n   * @returns {boolean} Returns `true` if scaling was limited,\n   *   `false` otherwise.\n   */\n  limitCanvas(width, height, maxPixels, maxDim, capAreaFactor = -1) {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"WORKER_THREAD\")) {\n      return false;\n    }\n    let maxAreaScale = Infinity,\n      maxWidthScale = Infinity,\n      maxHeightScale = Infinity;\n\n    maxPixels = OutputScale.capPixels(maxPixels, capAreaFactor);\n    if (maxPixels > 0) {\n      maxAreaScale = Math.sqrt(maxPixels / (width * height));\n    }\n    if (maxDim !== -1) {\n      maxWidthScale = maxDim / width;\n      maxHeightScale = maxDim / height;\n    }\n    const maxScale = Math.min(maxAreaScale, maxWidthScale, maxHeightScale);\n\n    if (this.sx > maxScale || this.sy > maxScale) {\n      this.sx = maxScale;\n      this.sy = maxScale;\n      return true;\n    }\n    return false;\n  }\n\n  static get pixelRatio() {\n    return globalThis.devicePixelRatio || 1;\n  }\n\n  static capPixels(maxPixels, capAreaFactor) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"WORKER_THREAD\")) &&\n      capAreaFactor >= 0\n    ) {\n      const winPixels = Math.ceil(\n        (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")\n          ? window.innerWidth * window.innerHeight\n          : window.screen.availWidth * window.screen.availHeight) *\n          this.pixelRatio ** 2 *\n          (1 + capAreaFactor / 100)\n      );\n      return maxPixels > 0 ? Math.min(maxPixels, winPixels) : winPixels;\n    }\n    return maxPixels;\n  }\n}\n\nfunction applyOpacity(color, opacity) {\n  opacity = MathClamp(opacity ?? 1, 0, 1);\n  const white = 255 * (1 - opacity);\n  return color.map(c => Math.round(c * opacity + white));\n}\n\nfunction RGBToHSL(rgb, output) {\n  const r = rgb[0] / 255;\n  const g = rgb[1] / 255;\n  const b = rgb[2] / 255;\n\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n\n  if (max === min) {\n    // achromatic\n    output[0] = output[1] = 0; // hue and saturation are 0\n  } else {\n    const d = max - min;\n    output[1] = l < 0.5 ? d / (max + min) : d / (2 - max - min);\n    // hue\n    switch (max) {\n      case r:\n        output[0] = ((g - b) / d + (g < b ? 6 : 0)) * 60;\n        break;\n      case g:\n        output[0] = ((b - r) / d + 2) * 60;\n        break;\n      case b:\n        output[0] = ((r - g) / d + 4) * 60;\n        break;\n    }\n  }\n  output[2] = l;\n}\n\nfunction HSLToRGB(hsl, output) {\n  const h = hsl[0];\n  const s = hsl[1];\n  const l = hsl[2];\n  const c = (1 - Math.abs(2 * l - 1)) * s; // chroma\n  const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n  const m = l - c / 2;\n\n  switch (Math.floor(h / 60)) {\n    case 0:\n      output[0] = c + m;\n      output[1] = x + m;\n      output[2] = m;\n      break;\n    case 1:\n      output[0] = x + m;\n      output[1] = c + m;\n      output[2] = m;\n      break;\n    case 2:\n      output[0] = m;\n      output[1] = c + m;\n      output[2] = x + m;\n      break;\n    case 3:\n      output[0] = m;\n      output[1] = x + m;\n      output[2] = c + m;\n      break;\n    case 4:\n      output[0] = x + m;\n      output[1] = m;\n      output[2] = c + m;\n      break;\n    case 5:\n    case 6:\n      output[0] = c + m;\n      output[1] = m;\n      output[2] = x + m;\n      break;\n  }\n}\n\nfunction computeLuminance(x) {\n  return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n}\n\nfunction contrastRatio(hsl1, hsl2, output) {\n  HSLToRGB(hsl1, output);\n  output.map(computeLuminance);\n  const lum1 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2];\n  HSLToRGB(hsl2, output);\n  output.map(computeLuminance);\n  const lum2 = 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2];\n  return lum1 > lum2\n    ? (lum1 + 0.05) / (lum2 + 0.05)\n    : (lum2 + 0.05) / (lum1 + 0.05);\n}\n\n// Cache for the findContrastColor function, to improve performance.\nconst contrastCache = new Map();\n\n/**\n * Find a color that has sufficient contrast against a fixed color.\n * The luminance (in HSL color space) of the base color is adjusted\n * until the contrast ratio between the base color and the fixed color\n * is at least the minimum contrast ratio required by WCAG 2.1.\n * @param {Array<number>} baseColor\n * @param {Array<number>} fixedColor\n * @returns {string}\n */\nfunction findContrastColor(baseColor, fixedColor) {\n  const key =\n    baseColor[0] +\n    baseColor[1] * 0x100 +\n    baseColor[2] * 0x10000 +\n    fixedColor[0] * 0x1000000 +\n    fixedColor[1] * 0x100000000 +\n    fixedColor[2] * 0x10000000000;\n  let cachedValue = contrastCache.get(key);\n  if (cachedValue) {\n    return cachedValue;\n  }\n  const array = new Float32Array(9);\n  const output = array.subarray(0, 3);\n  const baseHSL = array.subarray(3, 6);\n  RGBToHSL(baseColor, baseHSL);\n  const fixedHSL = array.subarray(6, 9);\n  RGBToHSL(fixedColor, fixedHSL);\n  const isFixedColorDark = fixedHSL[2] < 0.5;\n\n  // Use the contrast ratio requirements from WCAG 2.1.\n  // https://www.w3.org/TR/WCAG21/#contrast-minimum\n  // https://www.w3.org/TR/WCAG21/#contrast-enhanced\n  const minContrast = isFixedColorDark ? 12 : 4.5;\n\n  baseHSL[2] = isFixedColorDark\n    ? Math.sqrt(baseHSL[2])\n    : 1 - Math.sqrt(1 - baseHSL[2]);\n\n  if (contrastRatio(baseHSL, fixedHSL, output) < minContrast) {\n    let start, end;\n    if (isFixedColorDark) {\n      start = baseHSL[2];\n      end = 1;\n    } else {\n      start = 0;\n      end = baseHSL[2];\n    }\n    const PRECISION = 0.005;\n    while (end - start > PRECISION) {\n      const mid = (baseHSL[2] = (start + end) / 2);\n      if (\n        isFixedColorDark ===\n        contrastRatio(baseHSL, fixedHSL, output) < minContrast\n      ) {\n        start = mid;\n      } else {\n        end = mid;\n      }\n    }\n    baseHSL[2] = isFixedColorDark ? end : start;\n  }\n\n  HSLToRGB(baseHSL, output);\n  cachedValue = Util.makeHexColor(\n    Math.round(output[0] * 255),\n    Math.round(output[1] * 255),\n    Math.round(output[2] * 255)\n  );\n  contrastCache.set(key, cachedValue);\n  return cachedValue;\n}\n\nfunction makePathFromDrawOPS(data) {\n  // Using a SVG string is slightly slower than using the following loop.\n  const path = new Path2D();\n  if (!data) {\n    return path;\n  }\n  for (let i = 0, ii = data.length; i < ii;) {\n    switch (data[i++]) {\n      case DrawOPS.moveTo:\n        path.moveTo(data[i++], data[i++]);\n        break;\n      case DrawOPS.lineTo:\n        path.lineTo(data[i++], data[i++]);\n        break;\n      case DrawOPS.curveTo:\n        path.bezierCurveTo(\n          data[i++],\n          data[i++],\n          data[i++],\n          data[i++],\n          data[i++],\n          data[i++]\n        );\n        break;\n      case DrawOPS.quadraticCurveTo:\n        path.quadraticCurveTo(data[i++], data[i++], data[i++], data[i++]);\n        break;\n      case DrawOPS.closePath:\n        path.closePath();\n        break;\n      default:\n        warn(`Unrecognized drawing path operator: ${data[i - 1]}`);\n        break;\n    }\n  }\n  return path;\n}\n\nexport {\n  applyOpacity,\n  computeLuminance,\n  findContrastColor,\n  getCurrentTransform,\n  getCurrentTransformInverse,\n  getRGB,\n  getRGBA,\n  makePathFromDrawOPS,\n  OutputScale,\n  PixelsPerInch,\n  RenderingCancelledException,\n};\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Number of rows rendered per batch (IntersectionObserver batching).\nconst BATCH_SIZE = 500;\n// Maximum rows kept in the DOM at once (two batches).\nconst MAX_RENDERED = BATCH_SIZE * 2;\n\nlet _idCounter = 0;\n\n/**\n * A scrollable multi-line panel combining:\n *   – a frozen line-number column on the left,\n *   – a scrollable content column on the right,\n *   – a search / go-to-line toolbar at the top,\n *   – IntersectionObserver-based virtual scroll.\n *\n * Usage:\n *   const mc = new MultilineView({ total, getText, makeLineEl });\n *   container.append(mc.element);\n */\nclass MultilineView {\n  // -- DOM elements --\n  #element;\n\n  #numCol;\n\n  #innerEl;\n\n  #pre;\n\n  #topSentinel;\n\n  #bottomSentinel;\n\n  #observer = null;\n\n  #onScroll = null;\n\n  #total;\n\n  #getText;\n\n  #makeLineEl;\n\n  #startIndex = 0;\n\n  #endIndex = 0;\n\n  #highlightedIndex = -1;\n\n  #searchMatches = [];\n\n  #currentMatchIdx = -1;\n\n  #searchInput;\n\n  #searchError;\n\n  #prevButton;\n\n  #nextButton;\n\n  #matchInfo;\n\n  #ignoreCaseBtn;\n\n  #regexBtn;\n\n  /**\n   * @param {object}      opts\n   * @param {number}      opts.total       Total number of lines.\n   * @param {Function}    opts.getText     (i) => string used for search.\n   * @param {Function}    opts.makeLineEl  (i, isHighlighted) => HTMLElement.\n   * @param {string}      [opts.lineClass] CSS class for the lines container.\n   * @param {HTMLElement} [opts.actions]   Element prepended in the toolbar.\n   */\n  constructor({ total, getText, makeLineEl, lineClass = \"\", actions = null }) {\n    this.#total = total;\n    this.#getText = getText;\n    this.#makeLineEl = makeLineEl;\n\n    // Root element.\n    this.#element = document.createElement(\"div\");\n    this.#element.className = \"mlc-scroll\";\n\n    // Line-number column (frozen; scrollTop synced with the scroll pane).\n    this.#numCol = document.createElement(\"div\");\n    this.#numCol.className = \"mlc-line-nums-col\";\n    this.#numCol.style.setProperty(\n      \"--line-num-width\",\n      `${String(total).length}ch`\n    );\n\n    // Scrollable content column.\n    this.#innerEl = document.createElement(\"div\");\n    this.#innerEl.className = \"mlc-inner\";\n    this.#onScroll = () => {\n      this.#numCol.scrollTop = this.#innerEl.scrollTop;\n    };\n    this.#innerEl.addEventListener(\"scroll\", this.#onScroll);\n\n    // Item container inside the scroll column.\n    this.#pre = document.createElement(\"div\");\n    if (lineClass) {\n      this.#pre.className = lineClass;\n    }\n    this.#innerEl.append(this.#pre);\n\n    const body = document.createElement(\"div\");\n    body.className = \"mlc-body\";\n    body.append(this.#numCol, this.#innerEl);\n\n    this.#element.append(this.#buildToolbar(actions), body);\n\n    // Sentinels bracket the rendered window inside #pre:\n    //   topSentinel  [startIndex .. endIndex)  bottomSentinel\n    this.#topSentinel = document.createElement(\"div\");\n    this.#topSentinel.className = \"mlc-load-sentinel\";\n    this.#bottomSentinel = document.createElement(\"div\");\n    this.#bottomSentinel.className = \"mlc-load-sentinel\";\n\n    this.#endIndex = Math.min(BATCH_SIZE, total);\n    this.#pre.append(\n      this.#topSentinel,\n      this.#renderRange(0, this.#endIndex),\n      this.#bottomSentinel\n    );\n    this.#numCol.append(this.#renderNumRange(0, this.#endIndex));\n\n    if (total > BATCH_SIZE) {\n      this.#setupObserver();\n    }\n  }\n\n  /** The root element — append to the DOM to display the component. */\n  get element() {\n    return this.#element;\n  }\n\n  /**\n   * The inner content container (between the sentinels). Useful for setting\n   *  ARIA attributes and attaching keyboard listeners.\n   */\n  get inner() {\n    return this.#pre;\n  }\n\n  /**\n   * Scroll to ensure line i (0-based) is visible without changing the current\n   * search highlight. Useful for programmatic navigation (e.g. a debugger).\n   */\n  scrollToLine(i) {\n    if (i < 0 || i >= this.#total) {\n      return;\n    }\n    if (i >= this.#startIndex && i < this.#endIndex) {\n      this.#scrollRenderedTargetIntoView(i);\n    } else {\n      this.#jumpToTarget(i);\n    }\n  }\n\n  destroy() {\n    this.#observer?.disconnect();\n    this.#observer = null;\n\n    if (this.#onScroll) {\n      this.#innerEl.removeEventListener(\"scroll\", this.#onScroll);\n      this.#onScroll = null;\n    }\n  }\n\n  /**\n   * Scroll to line i (0-based) and mark it as the current search highlight.\n   * Pass i = -1 to clear the highlight.\n   */\n  jumpToLine(i) {\n    this.#pre.querySelector(\".mlc-match\")?.classList.remove(\"mlc-match\");\n    this.#numCol.querySelector(\".mlc-match\")?.classList.remove(\"mlc-match\");\n    if (i < 0) {\n      this.#highlightedIndex = -1;\n      return;\n    }\n    if (i >= this.#total) {\n      return;\n    }\n    this.#highlightedIndex = i;\n    if (i >= this.#startIndex && i < this.#endIndex) {\n      this.#scrollRenderedTargetIntoView(i);\n    } else {\n      this.#jumpToTarget(i);\n    }\n    this.#pre.children[i - this.#startIndex + 1]?.classList.add(\"mlc-match\");\n    this.#numCol.children[i - this.#startIndex]?.classList.add(\"mlc-match\");\n  }\n\n  #renderRange(from, to) {\n    const frag = document.createDocumentFragment();\n    for (let i = from; i < to; i++) {\n      frag.append(this.#makeLineEl(i, i === this.#highlightedIndex));\n    }\n    return frag;\n  }\n\n  #renderNumRange(from, to) {\n    const frag = document.createDocumentFragment();\n    for (let i = from; i < to; i++) {\n      const item = document.createElement(\"div\");\n      item.className = \"mlc-num-item\";\n      if (i === this.#highlightedIndex) {\n        item.classList.add(\"mlc-match\");\n      }\n      item.textContent = String(i + 1);\n      frag.append(item);\n    }\n    return frag;\n  }\n\n  // Re-render a window centred on targetIndex and scroll to it.\n  #jumpToTarget(targetIndex) {\n    // Remove all rendered rows between the sentinels.\n    const firstRow = this.#topSentinel.nextSibling;\n    const lastRow = this.#bottomSentinel.previousSibling;\n    if (firstRow && lastRow && firstRow !== this.#bottomSentinel) {\n      const range = document.createRange();\n      range.setStartBefore(firstRow);\n      range.setEndAfter(lastRow);\n      range.deleteContents();\n    }\n\n    const half = Math.floor(MAX_RENDERED / 2);\n    this.#startIndex = Math.max(0, targetIndex - half);\n    this.#endIndex = Math.min(this.#total, this.#startIndex + MAX_RENDERED);\n    this.#startIndex = Math.max(0, this.#endIndex - MAX_RENDERED);\n\n    this.#topSentinel.after(\n      this.#renderRange(this.#startIndex, this.#endIndex)\n    );\n    this.#numCol.replaceChildren(\n      this.#renderNumRange(this.#startIndex, this.#endIndex)\n    );\n\n    this.#scrollRenderedTargetIntoView(targetIndex);\n  }\n\n  #scrollRenderedTargetIntoView(targetIndex) {\n    // #pre.children: [0]=topSentinel, [1..n]=rows, [n+1]=bottomSentinel\n    const targetEl = this.#pre.children[targetIndex - this.#startIndex + 1];\n    if (!targetEl) {\n      return;\n    }\n    const targetRect = targetEl.getBoundingClientRect();\n    const innerRect = this.#innerEl.getBoundingClientRect();\n    this.#innerEl.scrollTop +=\n      targetRect.top -\n      innerRect.top -\n      this.#innerEl.clientHeight / 2 +\n      targetEl.clientHeight / 2;\n  }\n\n  #setupObserver() {\n    const observer = (this.#observer = new IntersectionObserver(\n      entries => {\n        for (const entry of entries) {\n          if (!entry.isIntersecting) {\n            continue;\n          }\n          if (entry.target === this.#bottomSentinel) {\n            this.#loadBottom();\n          } else {\n            this.#loadTop();\n          }\n        }\n      },\n      { root: this.#innerEl, rootMargin: \"200px\" }\n    ));\n    observer.observe(this.#topSentinel);\n    observer.observe(this.#bottomSentinel);\n  }\n\n  // Remove `count` children from `parent` starting at `firstChild`, in one\n  // Range operation instead of N individual remove() calls.\n  #removeChildren(parent, firstChild, count, fromEnd = false) {\n    if (count <= 0 || !firstChild) {\n      return;\n    }\n    const range = document.createRange();\n    if (fromEnd) {\n      // Remove the last `count` children ending at firstChild\n      // (=lastChild here).\n      let startChild = firstChild;\n      for (let i = 1; i < count; i++) {\n        startChild = startChild.previousElementSibling;\n        if (!startChild) {\n          return;\n        }\n      }\n      range.setStartBefore(startChild);\n      range.setEndAfter(firstChild);\n    } else {\n      let endChild = firstChild;\n      for (let i = 1; i < count; i++) {\n        endChild = endChild.nextElementSibling;\n        if (!endChild) {\n          return;\n        }\n      }\n      range.setStartBefore(firstChild);\n      range.setEndAfter(endChild);\n    }\n    range.deleteContents();\n  }\n\n  #loadBottom() {\n    const newEnd = Math.min(this.#endIndex + BATCH_SIZE, this.#total);\n    if (newEnd === this.#endIndex) {\n      return;\n    }\n    this.#bottomSentinel.before(this.#renderRange(this.#endIndex, newEnd));\n    this.#numCol.append(this.#renderNumRange(this.#endIndex, newEnd));\n    this.#endIndex = newEnd;\n\n    // Trim from top if the window exceeds MAX_RENDERED.\n    if (this.#endIndex - this.#startIndex > MAX_RENDERED) {\n      const removeCount = this.#endIndex - this.#startIndex - MAX_RENDERED;\n      const heightBefore = this.#pre.scrollHeight;\n      this.#removeChildren(\n        this.#pre,\n        this.#topSentinel.nextElementSibling,\n        removeCount\n      );\n      this.#removeChildren(\n        this.#numCol,\n        this.#numCol.firstElementChild,\n        removeCount\n      );\n      this.#startIndex += removeCount;\n      // Compensate so visible content doesn't jump upward.\n      this.#innerEl.scrollTop -= heightBefore - this.#pre.scrollHeight;\n    }\n  }\n\n  #loadTop() {\n    if (this.#startIndex === 0) {\n      return;\n    }\n    const newStart = Math.max(0, this.#startIndex - BATCH_SIZE);\n    const scrollBefore = this.#innerEl.scrollTop;\n    const heightBefore = this.#pre.scrollHeight;\n    this.#topSentinel.after(this.#renderRange(newStart, this.#startIndex));\n    this.#numCol.prepend(this.#renderNumRange(newStart, this.#startIndex));\n    // Compensate so visible content doesn't jump downward.\n    this.#innerEl.scrollTop =\n      scrollBefore + (this.#pre.scrollHeight - heightBefore);\n    this.#startIndex = newStart;\n\n    // Trim from bottom if the window exceeds MAX_RENDERED.\n    if (this.#endIndex - this.#startIndex > MAX_RENDERED) {\n      const removeCount = this.#endIndex - this.#startIndex - MAX_RENDERED;\n      this.#removeChildren(\n        this.#pre,\n        this.#bottomSentinel.previousElementSibling,\n        removeCount,\n        true\n      );\n      this.#removeChildren(\n        this.#numCol,\n        this.#numCol.lastElementChild,\n        removeCount,\n        true\n      );\n      this.#endIndex -= removeCount;\n    }\n  }\n\n  #buildToolbar(actions) {\n    const id = ++_idCounter;\n    const bar = document.createElement(\"div\");\n    bar.className = \"mlc-goto-bar\";\n\n    const searchGroup = document.createElement(\"div\");\n    searchGroup.className = \"mlc-search-group\";\n\n    const searchErrorId = `mlc-err-${id}`;\n\n    const searchInput = (this.#searchInput = document.createElement(\"input\"));\n    searchInput.type = \"search\";\n    searchInput.className = \"mlc-search-input\";\n    searchInput.placeholder = \"Search for\\u2026\";\n    searchInput.ariaLabel = \"Search\";\n    searchInput.setAttribute(\"aria-describedby\", searchErrorId);\n\n    const searchError = (this.#searchError = document.createElement(\"span\"));\n    searchError.id = searchErrorId;\n    searchError.className = \"sr-only\";\n    searchError.role = \"alert\";\n\n    const prevButton = (this.#prevButton = document.createElement(\"button\"));\n    prevButton.className = \"mlc-nav-button\";\n    prevButton.textContent = \"↑\";\n    prevButton.title = \"Previous match\";\n    prevButton.disabled = true;\n\n    const nextButton = (this.#nextButton = document.createElement(\"button\"));\n    nextButton.className = \"mlc-nav-button\";\n    nextButton.textContent = \"↓\";\n    nextButton.title = \"Next match\";\n    nextButton.disabled = true;\n\n    const matchInfo = (this.#matchInfo = document.createElement(\"span\"));\n    matchInfo.className = \"mlc-match-info\";\n\n    const ignoreCaseBtn = (this.#ignoreCaseBtn = this.#makeToggleButton(\n      \"Aa\",\n      \"Ignore case\"\n    ));\n    const regexBtn = (this.#regexBtn = this.#makeToggleButton(\".*\", \"Regex\"));\n\n    searchGroup.append(\n      searchInput,\n      searchError,\n      prevButton,\n      nextButton,\n      ignoreCaseBtn,\n      regexBtn,\n      matchInfo\n    );\n\n    const gotoInput = document.createElement(\"input\");\n    gotoInput.type = \"number\";\n    gotoInput.className = \"mlc-goto\";\n    gotoInput.placeholder = \"Go to line\\u2026\";\n    gotoInput.min = \"1\";\n    gotoInput.max = String(this.#total);\n    gotoInput.step = \"1\";\n    gotoInput.ariaLabel = \"Go to line\";\n\n    if (actions) {\n      bar.append(actions);\n    }\n    bar.append(searchGroup, gotoInput);\n\n    searchInput.addEventListener(\"input\", () => this.#runSearch());\n    searchInput.addEventListener(\"keydown\", ({ key, shiftKey }) => {\n      if (key === \"Enter\") {\n        this.#navigateMatch(shiftKey ? -1 : 1);\n      }\n    });\n    prevButton.addEventListener(\"click\", () => this.#navigateMatch(-1));\n    nextButton.addEventListener(\"click\", () => this.#navigateMatch(1));\n    this.#ignoreCaseBtn.addEventListener(\"click\", () => {\n      this.#ignoreCaseBtn.ariaPressed =\n        this.#ignoreCaseBtn.ariaPressed === \"true\" ? \"false\" : \"true\";\n      this.#runSearch();\n    });\n    this.#regexBtn.addEventListener(\"click\", () => {\n      this.#regexBtn.ariaPressed =\n        this.#regexBtn.ariaPressed === \"true\" ? \"false\" : \"true\";\n      this.#runSearch();\n    });\n\n    gotoInput.addEventListener(\"keydown\", ({ key }) => {\n      if (key !== \"Enter\") {\n        return;\n      }\n      const value = gotoInput.value.trim();\n      const n = Number(value);\n      if (!value || !Number.isInteger(n) || n < 1 || n > this.#total) {\n        gotoInput.setAttribute(\"aria-invalid\", \"true\");\n        return;\n      }\n      gotoInput.removeAttribute(\"aria-invalid\");\n      this.jumpToLine(n - 1);\n    });\n\n    return bar;\n  }\n\n  #makeToggleButton(text, title) {\n    const btn = document.createElement(\"button\");\n    btn.className = \"mlc-nav-button\";\n    btn.textContent = text;\n    btn.title = title;\n    btn.ariaPressed = \"false\";\n    return btn;\n  }\n\n  #updateMatchInfo() {\n    if (!this.#searchInput.value) {\n      this.#matchInfo.textContent = \"\";\n      this.#prevButton.disabled = this.#nextButton.disabled = true;\n    } else if (this.#searchMatches.length === 0) {\n      this.#matchInfo.textContent = \"No results\";\n      this.#prevButton.disabled = this.#nextButton.disabled = true;\n    } else {\n      this.#matchInfo.textContent = `${this.#currentMatchIdx + 1} / ${this.#searchMatches.length}`;\n      this.#prevButton.disabled = this.#nextButton.disabled = false;\n    }\n  }\n\n  #computeMatches() {\n    this.jumpToLine(-1);\n    this.#searchMatches = [];\n    this.#currentMatchIdx = -1;\n\n    const query = this.#searchInput.value;\n    if (!query) {\n      this.#updateMatchInfo();\n      return false;\n    }\n\n    let test;\n    if (this.#regexBtn.ariaPressed === \"true\") {\n      try {\n        const re = new RegExp(\n          query,\n          this.#ignoreCaseBtn.ariaPressed === \"true\" ? \"i\" : \"\"\n        );\n        test = str => re.test(str);\n        this.#searchInput.removeAttribute(\"aria-invalid\");\n        this.#searchError.textContent = \"\";\n      } catch {\n        this.#searchInput.setAttribute(\"aria-invalid\", \"true\");\n        this.#searchError.textContent = \"Invalid regular expression\";\n        this.#updateMatchInfo();\n        return false;\n      }\n    } else {\n      const ignoreCase = this.#ignoreCaseBtn.ariaPressed === \"true\";\n      const needle = ignoreCase ? query.toLowerCase() : query;\n      test = str => (ignoreCase ? str.toLowerCase() : str).includes(needle);\n    }\n    this.#searchInput.removeAttribute(\"aria-invalid\");\n    this.#searchError.textContent = \"\";\n\n    for (let i = 0, ii = this.#total; i < ii; i++) {\n      if (test(this.#getText(i))) {\n        this.#searchMatches.push(i);\n      }\n    }\n    return this.#searchMatches.length > 0;\n  }\n\n  #navigateMatch(delta) {\n    if (!this.#searchMatches.length) {\n      return;\n    }\n    this.#currentMatchIdx =\n      (this.#currentMatchIdx + delta + this.#searchMatches.length) %\n      this.#searchMatches.length;\n    this.jumpToLine(this.#searchMatches[this.#currentMatchIdx]);\n    this.#updateMatchInfo();\n  }\n\n  #runSearch() {\n    if (this.#computeMatches() && this.#searchMatches.length) {\n      this.#currentMatchIdx = 0;\n      this.jumpToLine(this.#searchMatches[0]);\n    }\n    this.#updateMatchInfo();\n  }\n}\n\nexport { MultilineView };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ImageKind, OPS } from \"pdfjs-lib\";\nimport { makePathFromDrawOPS } from \"pdfjs/display/display_utils.js\";\nimport { MultilineView } from \"./multiline_view.js\";\n\n// Reverse map: OPS numeric id → string name, built once from the OPS object.\nconst OPS_TO_NAME = Object.create(null);\nfor (const [name, id] of Object.entries(OPS)) {\n  OPS_TO_NAME[id] = name;\n}\n\n// Ops from the getTextContent() switch in evaluator.js — shown in the draw ops\n// view when text-only filter is active, and used to determine step targets.\nconst TEXT_OP_IDS = new Set([\n  OPS.setFont,\n  OPS.setTextRise,\n  OPS.setHScale,\n  OPS.setLeading,\n  OPS.moveText,\n  OPS.setLeadingMoveText,\n  OPS.nextLine,\n  OPS.setTextMatrix,\n  OPS.setCharSpacing,\n  OPS.setWordSpacing,\n  OPS.beginText,\n  OPS.endText,\n  OPS.showSpacedText,\n  OPS.showText,\n  OPS.nextLineShowText,\n  OPS.nextLineSetSpacingShowText,\n  OPS.beginMarkedContent,\n  OPS.beginMarkedContentProps,\n  OPS.endMarkedContent,\n]);\n\n// Superset of TEXT_OP_IDS — all ops that must be executed (not skipped) during\n// text-only rendering. The extra ops here are infrastructure (save/restore,\n// transforms, XObject wrappers) that affect the graphics state but are not\n// shown in the filtered op list.\nconst TEXT_EXEC_OP_IDS = new Set([\n  ...TEXT_OP_IDS,\n  OPS.restore,\n  OPS.save,\n  OPS.dependency,\n  OPS.transform,\n  OPS.paintFormXObjectBegin,\n  OPS.paintFormXObjectEnd,\n  OPS.beginGroup,\n  OPS.endGroup,\n  OPS.setGState,\n]);\n\nconst BreakpointType = {\n  PAUSE: 0,\n  SKIP: 1,\n};\n\n// Single hidden color input reused for all swatch pickers.\nconst colorPickerInput = document.createElement(\"input\");\ncolorPickerInput.type = \"color\";\ncolorPickerInput.className = \"color-picker-input\";\n\n// AbortController for the currently open color-picker session (if any).\nlet _colorPickerAc = null;\n\nfunction ensureColorPickerInput() {\n  if (!colorPickerInput.isConnected) {\n    document.body.append(colorPickerInput);\n  }\n}\n\nfunction openColorPicker(hex, onPick) {\n  // Cancel any previous session that was dismissed without a change event.\n  _colorPickerAc?.abort();\n  ensureColorPickerInput();\n  colorPickerInput.value = hex;\n\n  const ac = new AbortController();\n  _colorPickerAc = ac;\n  colorPickerInput.addEventListener(\n    \"input\",\n    () => {\n      onPick(colorPickerInput.value);\n    },\n    { signal: ac.signal }\n  );\n  colorPickerInput.addEventListener(\n    \"change\",\n    () => {\n      ac.abort();\n    },\n    { once: true, signal: ac.signal }\n  );\n  colorPickerInput.click();\n}\n\n// Creates a color swatch. If `onPick` is provided the swatch is clickable and\n// opens the browser color picker; onPick(newHex) is called on each change.\nfunction makeColorSwatch(hex, onPick) {\n  const swatch = document.createElement(\"span\");\n  swatch.className = \"color-swatch\";\n  swatch.style.background = hex;\n  if (onPick) {\n    swatch.role = \"button\";\n    swatch.tabIndex = 0;\n    swatch.ariaLabel = \"Change color\";\n    swatch.title = \"Click to change color\";\n    const activate = e => {\n      e.stopPropagation();\n      openColorPicker(hex, newHex => {\n        hex = newHex;\n        swatch.style.background = newHex;\n        onPick(newHex);\n      });\n    };\n    swatch.addEventListener(\"click\", activate);\n    swatch.addEventListener(\"keydown\", e => {\n      if (e.key !== \"Enter\" && e.key !== \" \") {\n        return;\n      }\n      e.preventDefault();\n      activate(e);\n    });\n  }\n  return swatch;\n}\n\n// Formats a glyph items array as: \"text\" kerning \"more text\" …\nfunction formatGlyphItems(items) {\n  const parts = [];\n  let str = \"\";\n  for (const item of items) {\n    if (typeof item === \"number\") {\n      if (str) {\n        parts.push(JSON.stringify(str));\n        str = \"\";\n      }\n      parts.push(String(Math.round(item * 100) / 100));\n    } else if (item?.unicode) {\n      str += item.unicode;\n    }\n  }\n  if (str) {\n    parts.push(JSON.stringify(str));\n  }\n  return parts.join(\" \");\n}\n\n/**\n * Format an operator argument for display.\n * @param {*}       arg  The argument value.\n * @param {boolean} full true → expand fully (detail panel);\n *                       false → truncate for compact list display.\n */\nfunction formatArg(arg, full) {\n  if (arg === null || arg === undefined) {\n    return full ? \"null\" : \"\";\n  }\n  if (typeof arg === \"number\") {\n    return Number.isInteger(arg)\n      ? String(arg)\n      : String(Math.round(arg * 10000) / 10000);\n  }\n  if (typeof arg === \"string\") {\n    return JSON.stringify(arg);\n  }\n  if (typeof arg === \"boolean\") {\n    return String(arg);\n  }\n  if (ArrayBuffer.isView(arg)) {\n    if (!full && arg.length > 8) {\n      return `<${arg.length} values>`;\n    }\n    const fmt = n => (Number.isInteger(n) ? n : Math.round(n * 1000) / 1000);\n    return `[${Array.from(arg, fmt).join(\" \")}]`;\n  }\n  if (Array.isArray(arg)) {\n    if (arg.length === 0) {\n      return \"[]\";\n    }\n    return !full && arg.length > 4\n      ? `[…${arg.length}]`\n      : `[${arg.map(a => formatArg(a, full)).join(\", \")}]`;\n  }\n  if (typeof arg === \"object\") {\n    if (!full) {\n      return \"{…}\";\n    }\n    return `{${Object.entries(arg)\n      .map(([k, v]) => `${k}: ${formatArg(v, true)}`)\n      .join(\", \")}}`;\n  }\n  return String(arg);\n}\n\nclass DrawOpDetailView {\n  #el;\n\n  #prefersDark;\n\n  constructor(detailPanelEl, { prefersDark }) {\n    this.#el = detailPanelEl;\n    this.#prefersDark = prefersDark;\n  }\n\n  show(\n    name,\n    args,\n    opIdx,\n    { originalColors, renderedPage, selectedLine = null }\n  ) {\n    const detailEl = this.#el;\n    detailEl.replaceChildren();\n\n    // Always build args into a .detail-args-col so it can be placed in a\n    // .detail-body alongside a path preview or image preview on the right.\n    const argsContainer = document.createElement(\"div\");\n    argsContainer.className = \"detail-args-col\";\n\n    const header = document.createElement(\"div\");\n    header.className = \"detail-name\";\n    header.textContent = name;\n    argsContainer.append(header);\n\n    if (!args?.length) {\n      const none = document.createElement(\"div\");\n      none.className = \"detail-empty\";\n      none.textContent = \"(no arguments)\";\n      argsContainer.append(none);\n      detailEl.append(argsContainer);\n      return;\n    }\n\n    const imagePreviews = [];\n    for (let i = 0; i < args.length; i++) {\n      const row = document.createElement(\"div\");\n      row.className = \"detail-row\";\n      const idx = document.createElement(\"span\");\n      idx.className = \"detail-idx\";\n      idx.textContent = `[${i}]`;\n      const val = document.createElement(\"span\");\n      val.className = \"detail-val\";\n      if (name === \"showText\" && i === 0 && Array.isArray(args[0])) {\n        val.textContent = formatGlyphItems(args[0]);\n      } else if (\n        name === \"constructPath\" &&\n        i === 0 &&\n        typeof args[0] === \"number\"\n      ) {\n        val.textContent = OPS_TO_NAME[args[0]] ?? String(args[0]);\n      } else {\n        val.textContent = formatArg(args[i], true);\n      }\n      row.append(idx);\n      if (typeof args[i] === \"string\" && /^#[0-9a-f]{6}$/i.test(args[i])) {\n        const argIdx = i;\n        const originalHex = originalColors.get(opIdx);\n        if (originalHex && args[i] !== originalHex) {\n          val.classList.add(\"changed-value\");\n          val.title = `Original: ${originalHex}`;\n        }\n        row.append(\n          makeColorSwatch(args[i], newHex => {\n            args[argIdx] = newHex;\n            val.textContent = JSON.stringify(newHex);\n            const changed = originalHex && newHex !== originalHex;\n            val.classList.toggle(\"changed-value\", !!changed);\n            val.title = changed ? `Original: ${originalHex}` : \"\";\n            // Also update the swatch and arg span in the selected op list line.\n            const listSwatch = selectedLine?.querySelector(\".color-swatch\");\n            if (listSwatch) {\n              listSwatch.style.background = newHex;\n            }\n            const listArgSpan = selectedLine?.querySelector(\".op-arg\");\n            if (listArgSpan) {\n              listArgSpan.textContent = JSON.stringify(newHex);\n              listArgSpan.classList.toggle(\"changed-value\", !!changed);\n              listArgSpan.title = changed ? `Original: ${originalHex}` : \"\";\n            }\n          })\n        );\n      }\n      row.append(val);\n      argsContainer.append(row);\n      if (typeof args[i] === \"string\" && args[i].startsWith(\"img_\")) {\n        const preview = this.#makeImageArgPreview(args[i], renderedPage);\n        if (preview) {\n          imagePreviews.push(preview);\n        }\n      }\n    }\n\n    // Assemble the final layout: constructPath gets a path preview on the\n    // right; image ops get an image column on the right; others just use\n    // argsContainer.\n    if (name === \"constructPath\") {\n      // args[1] is [Float32Array|null], args[2] is [minX,minY,maxX,maxY]|null\n      const data = Array.isArray(args?.[1]) ? args[1][0] : null;\n      const body = document.createElement(\"div\");\n      body.className = \"detail-body\";\n      body.append(\n        argsContainer,\n        this.#renderPathPreview(data, args?.[2] ?? null)\n      );\n      detailEl.append(body);\n    } else if (imagePreviews.length > 0) {\n      const imgCol = document.createElement(\"div\");\n      imgCol.className = \"detail-img-col\";\n      imgCol.append(...imagePreviews);\n      const body = document.createElement(\"div\");\n      body.className = \"detail-body\";\n      body.append(argsContainer, imgCol);\n      detailEl.append(body);\n    } else {\n      detailEl.append(argsContainer);\n    }\n  }\n\n  clear() {\n    this.#el.replaceChildren();\n  }\n\n  #renderPathPreview(data, minMax) {\n    const canvas = document.createElement(\"canvas\");\n    canvas.className = \"path-preview\";\n\n    const [minX, minY, maxX, maxY] = minMax ?? [];\n    const pathW = maxX - minX || 1;\n    const pathH = maxY - minY || 1;\n    if (!data || !minMax || !(pathW > 0) || !(pathH > 0)) {\n      canvas.width = canvas.height = 1;\n      return canvas;\n    }\n\n    const PADDING = 10; // px\n    const dpr = window.devicePixelRatio || 1;\n    const drawW = Math.min(200, 200 * (pathW / pathH));\n    const drawH = Math.min(200, 200 * (pathH / pathW));\n    const scale = Math.min(drawW / pathW, drawH / pathH);\n\n    canvas.width = Math.round((drawW + PADDING * 2) * dpr);\n    canvas.height = Math.round((drawH + PADDING * 2) * dpr);\n    canvas.style.width = `${drawW + PADDING * 2}px`;\n    canvas.style.height = `${drawH + PADDING * 2}px`;\n\n    const ctx = canvas.getContext(\"2d\");\n    ctx.scale(dpr, dpr);\n    // PDF user space has Y pointing up; canvas has Y pointing down — flip Y.\n    ctx.translate(PADDING, PADDING + drawH);\n    ctx.scale(scale, -scale);\n    ctx.translate(-minX, -minY);\n\n    ctx.lineWidth = 1 / scale;\n    ctx.strokeStyle = this.#prefersDark.matches ? \"#9cdcfe\" : \"#0070c1\";\n    ctx.stroke(data instanceof Path2D ? data : makePathFromDrawOPS(data));\n\n    return canvas;\n  }\n\n  // Render an img_ argument value into a canvas preview using the decoded image\n  // stored in renderedPage.objs (or commonObjs for global images starting with\n  // g_). Handles ImageBitmap and raw pixel data with ImageKind values\n  // GRAYSCALE_1BPP, RGB_24BPP, and RGBA_32BPP.\n  #makeImageArgPreview(name, renderedPage) {\n    const objStore = name.startsWith(\"g_\")\n      ? renderedPage?.commonObjs\n      : renderedPage?.objs;\n    if (!objStore?.has(name)) {\n      return null;\n    }\n    const imgObj = objStore.get(name);\n    if (!imgObj) {\n      return null;\n    }\n    const { width, height } = imgObj;\n    const canvas = document.createElement(\"canvas\");\n    canvas.className = \"image-preview\";\n    canvas.width = width;\n    canvas.height = height;\n    canvas.style.aspectRatio = `${width} / ${height}`;\n    canvas.ariaLabel = `${name} ${width}×${height}`;\n    const ctx = canvas.getContext(\"2d\");\n\n    // Fast path: if the browser already decoded it as an ImageBitmap, draw it.\n    if (imgObj.bitmap instanceof ImageBitmap) {\n      ctx.drawImage(imgObj.bitmap, 0, 0);\n      return canvas;\n    }\n\n    // Slow path: convert raw pixel data to RGBA for putImageData.\n    const { data, kind } = imgObj;\n    let rgba;\n    if (kind === ImageKind.RGBA_32BPP) {\n      rgba = new Uint8ClampedArray(\n        data.buffer,\n        data.byteOffset,\n        data.byteLength\n      );\n    } else if (kind === ImageKind.RGB_24BPP) {\n      const pixels = width * height;\n      rgba = new Uint8ClampedArray(pixels * 4);\n      for (let i = 0, j = 0; i < pixels; i++, j += 3) {\n        rgba[i * 4] = data[j];\n        rgba[i * 4 + 1] = data[j + 1];\n        rgba[i * 4 + 2] = data[j + 2];\n        rgba[i * 4 + 3] = 255;\n      }\n    } else if (kind === ImageKind.GRAYSCALE_1BPP) {\n      const rowBytes = (width + 7) >> 3;\n      rgba = new Uint8ClampedArray(width * height * 4);\n      for (let row = 0; row < height; row++) {\n        const srcRow = row * rowBytes;\n        const dstRow = row * width * 4;\n        for (let col = 0; col < width; col++) {\n          const bit = (data[srcRow + (col >> 3)] >> (7 - (col & 7))) & 1;\n          const v = bit ? 255 : 0;\n          rgba[dstRow + col * 4] = v;\n          rgba[dstRow + col * 4 + 1] = v;\n          rgba[dstRow + col * 4 + 2] = v;\n          rgba[dstRow + col * 4 + 3] = 255;\n        }\n      }\n    } else {\n      return null;\n    }\n    ctx.putImageData(new ImageData(rgba, width, height), 0, 0);\n    return canvas;\n  }\n}\n\nclass DrawOpsView {\n  #listPanelEl;\n\n  #detailView;\n\n  #multilineView = null;\n\n  // All op lines indexed by original op index.\n  #opLines = [];\n\n  // Plain-text representations for search, parallel to #opLines.\n  #opTexts = [];\n\n  // Currently visible lines (all lines, or text-only subset when filtering).\n  #visibleLines = [];\n\n  #textFilter = false;\n\n  #selectedLine = null;\n\n  // Map<opIndex, BreakpointType>\n  #breakpoints = new Map();\n\n  #originalColors = new Map();\n\n  #renderedPage = null;\n\n  #pausedAtIdx = null;\n\n  #onHighlight;\n\n  #onClearHighlight;\n\n  constructor(\n    opListPanelEl,\n    detailPanelEl,\n    { onHighlight, onClearHighlight, prefersDark }\n  ) {\n    this.#listPanelEl = opListPanelEl;\n    this.#detailView = new DrawOpDetailView(detailPanelEl, { prefersDark });\n    this.#onHighlight = onHighlight;\n    this.#onClearHighlight = onClearHighlight;\n  }\n\n  get breakpoints() {\n    return this.#breakpoints;\n  }\n\n  load(opList, renderedPage) {\n    this.#renderedPage = renderedPage;\n    this.#opLines = [];\n    this.#opTexts = [];\n\n    for (let i = 0; i < opList.fnArray.length; i++) {\n      const name = OPS_TO_NAME[opList.fnArray[i]] ?? `op${opList.fnArray[i]}`;\n      const args = opList.argsArray[i] ?? [];\n      const { line, text } = this.#buildLine(i, name, args);\n      this.#opLines.push(line);\n      this.#opTexts.push(text);\n    }\n\n    this.#rebuildMultilineView();\n  }\n\n  // Enable or disable the text-ops-only filter. Can be called at any time;\n  // rebuilds the list view in place when ops are already loaded.\n  setTextFilter(enabled) {\n    if (this.#textFilter === enabled) {\n      return;\n    }\n    this.#textFilter = enabled;\n    if (this.#opLines.length > 0) {\n      this.#rebuildMultilineView();\n    }\n  }\n\n  #rebuildMultilineView() {\n    // Compute the visible (possibly filtered) subset.\n    this.#visibleLines = this.#textFilter\n      ? this.#opLines.filter(line => TEXT_OP_IDS.has(OPS[line.dataset.opName]))\n      : this.#opLines;\n\n    // Tear down the existing MultilineView (if any), keeping the placeholder.\n    const anchor = this.#multilineView?.element ?? this.#listPanelEl;\n    if (this.#multilineView) {\n      this.#multilineView.destroy();\n      this.#multilineView = null;\n    }\n\n    const multilineView = new MultilineView({\n      total: this.#visibleLines.length,\n      getText: i => this.#opTexts[+this.#visibleLines[i].dataset.opIdx],\n      makeLineEl: (i, isHighlighted) => {\n        this.#visibleLines[i].classList.toggle(\"mlc-match\", isHighlighted);\n        return this.#visibleLines[i];\n      },\n    });\n    multilineView.element.classList.add(\"op-list-panel-wrapper\");\n    multilineView.inner.id = \"op-list\";\n    multilineView.inner.role = \"listbox\";\n    multilineView.inner.ariaLabel = \"Operator list\";\n\n    multilineView.inner.addEventListener(\"keydown\", e => {\n      const { key } = e;\n      const lines = this.#visibleLines;\n      if (!lines.length) {\n        return;\n      }\n      const focused = document.activeElement;\n      const currentIdx = lines.indexOf(focused);\n      let targetIdx = -1;\n      if (key === \"ArrowDown\") {\n        targetIdx = currentIdx < lines.length - 1 ? currentIdx + 1 : currentIdx;\n      } else if (key === \"ArrowUp\") {\n        targetIdx = currentIdx > 0 ? currentIdx - 1 : 0;\n      } else if (key === \"Home\") {\n        targetIdx = 0;\n      } else if (key === \"End\") {\n        targetIdx = lines.length - 1;\n      } else if (key === \"Enter\" || key === \" \") {\n        if (currentIdx >= 0) {\n          lines[currentIdx].click();\n          e.preventDefault();\n        }\n        return;\n      } else {\n        return;\n      }\n      e.preventDefault();\n      if (targetIdx >= 0) {\n        lines[targetIdx].tabIndex = 0;\n        if (currentIdx >= 0 && currentIdx !== targetIdx) {\n          lines[currentIdx].tabIndex = -1;\n        }\n        multilineView.scrollToLine(targetIdx);\n        lines[targetIdx].focus();\n      }\n    });\n\n    anchor.replaceWith(multilineView.element);\n    this.#multilineView = multilineView;\n  }\n\n  clear() {\n    if (this.#multilineView) {\n      this.#multilineView.destroy();\n      this.#multilineView.element.replaceWith(this.#listPanelEl);\n      this.#multilineView = null;\n    }\n    document.getElementById(\"op-list\").replaceChildren();\n    this.#detailView.clear();\n    this.#opLines = [];\n    this.#opTexts = [];\n    this.#visibleLines = [];\n    this.#selectedLine = null;\n    this.#originalColors.clear();\n    this.#breakpoints.clear();\n    this.#pausedAtIdx = this.#renderedPage = null;\n  }\n\n  markPaused(i) {\n    if (this.#pausedAtIdx !== null) {\n      this.#opLines[this.#pausedAtIdx]?.classList.remove(\"paused\");\n    }\n    this.#pausedAtIdx = i;\n    this.#opLines[i]?.classList.add(\"paused\");\n    // Scroll to the position of this op within the currently visible list.\n    const visibleIdx = this.#visibleLines.indexOf(this.#opLines[i]);\n    if (visibleIdx >= 0) {\n      this.#multilineView?.scrollToLine(visibleIdx);\n    }\n  }\n\n  clearPaused() {\n    if (this.#pausedAtIdx !== null) {\n      this.#opLines[this.#pausedAtIdx]?.classList.remove(\"paused\");\n      this.#pausedAtIdx = null;\n    }\n  }\n\n  // The evaluator normalizes all color ops to setFillRGBColor /\n  // setStrokeRGBColor with args = [\"#rrggbb\"]. Return that hex string, or null.\n  #getOpColor(name, args) {\n    if (\n      (name === \"setFillRGBColor\" || name === \"setStrokeRGBColor\") &&\n      typeof args?.[0] === \"string\" &&\n      /^#[0-9a-f]{6}$/i.test(args[0])\n    ) {\n      return args[0];\n    }\n    return null;\n  }\n\n  #buildLine(i, name, args) {\n    const line = document.createElement(\"div\");\n    line.className = \"op-line\";\n    line.role = \"option\";\n    line.ariaSelected = \"false\";\n    line.tabIndex = i === 0 ? 0 : -1;\n    line.dataset.opName = name;\n    line.dataset.opIdx = i;\n\n    // Breakpoint gutter — click cycles: none → pause (●) → skip (✕) → none.\n    const gutter = document.createElement(\"span\");\n    gutter.className = \"bp-gutter\";\n    gutter.role = \"checkbox\";\n    gutter.tabIndex = 0;\n    gutter.ariaLabel = \"Breakpoint\";\n    const initBpType = this.#breakpoints.get(i);\n    if (initBpType === BreakpointType.PAUSE) {\n      gutter.dataset.bp = \"pause\";\n      gutter.ariaChecked = \"true\";\n    } else if (initBpType === BreakpointType.SKIP) {\n      gutter.dataset.bp = \"skip\";\n      gutter.ariaChecked = \"mixed\";\n      line.classList.add(\"op-skipped\");\n    } else {\n      gutter.ariaChecked = \"false\";\n    }\n    gutter.addEventListener(\"click\", e => {\n      e.stopPropagation();\n      const current = this.#breakpoints.get(i);\n      if (current === undefined) {\n        this.#breakpoints.set(i, BreakpointType.PAUSE);\n        gutter.dataset.bp = \"pause\";\n        gutter.ariaChecked = \"true\";\n      } else if (current === BreakpointType.PAUSE) {\n        this.#breakpoints.set(i, BreakpointType.SKIP);\n        gutter.dataset.bp = \"skip\";\n        gutter.ariaChecked = \"mixed\";\n        line.classList.add(\"op-skipped\");\n      } else {\n        this.#breakpoints.delete(i);\n        delete gutter.dataset.bp;\n        gutter.ariaChecked = \"false\";\n        line.classList.remove(\"op-skipped\");\n      }\n    });\n    gutter.addEventListener(\"keydown\", e => {\n      if (e.key === \" \" || e.key === \"Enter\") {\n        e.preventDefault();\n        gutter.click();\n      }\n    });\n    line.append(gutter);\n\n    const nameEl = document.createElement(\"span\");\n    nameEl.className = \"op-name\";\n    nameEl.textContent = name;\n    line.append(nameEl);\n    const rgb = this.#getOpColor(name, args);\n    let colorArgSpan = null;\n    if (rgb) {\n      this.#originalColors.set(i, rgb);\n      line.append(\n        makeColorSwatch(rgb, newHex => {\n          args[0] = newHex;\n          if (colorArgSpan) {\n            const changed = newHex !== rgb;\n            colorArgSpan.textContent = JSON.stringify(newHex);\n            colorArgSpan.classList.toggle(\"changed-value\", changed);\n            colorArgSpan.title = changed ? `Original: ${rgb}` : \"\";\n          }\n        })\n      );\n    }\n\n    // Build arg spans and plain-text representation for search in one pass.\n    let text = name;\n    if (name === \"showText\" && Array.isArray(args[0])) {\n      const formatted = formatGlyphItems(args[0]);\n      const argEl = document.createElement(\"span\");\n      argEl.className = \"op-arg\";\n      argEl.textContent = formatted;\n      line.append(argEl);\n      text += \" \" + formatted;\n    } else {\n      for (let j = 0; j < args.length; j++) {\n        const s =\n          name === \"constructPath\" && j === 0 && typeof args[0] === \"number\"\n            ? (OPS_TO_NAME[args[0]] ?? String(args[0]))\n            : formatArg(args[j], false);\n        if (s) {\n          const argEl = document.createElement(\"span\");\n          argEl.className = \"op-arg\";\n          argEl.textContent = s;\n          line.append(argEl);\n          if (rgb && j === 0) {\n            colorArgSpan = argEl;\n          }\n          text += \" \" + s;\n        }\n      }\n    }\n\n    line.addEventListener(\"pointerenter\", () => this.#onHighlight(i));\n    line.addEventListener(\"pointerleave\", () => this.#onClearHighlight());\n    line.addEventListener(\"click\", () => {\n      if (this.#selectedLine) {\n        this.#selectedLine.classList.remove(\"selected\");\n        this.#selectedLine.ariaSelected = \"false\";\n        this.#selectedLine.tabIndex = -1;\n      }\n      this.#selectedLine = line;\n      line.classList.add(\"selected\");\n      line.ariaSelected = \"true\";\n      line.tabIndex = 0;\n      this.#detailView.show(name, args, i, {\n        originalColors: this.#originalColors,\n        renderedPage: this.#renderedPage,\n        selectedLine: line,\n      });\n    });\n\n    return { line, text };\n  }\n}\n\nexport { BreakpointType, DrawOpsView, TEXT_EXEC_OP_IDS, TEXT_OP_IDS };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Properties of CanvasRenderingContext2D that we track while stepping.\nconst TRACKED_CTX_PROPS = new Set([\n  \"direction\",\n  \"fillStyle\",\n  \"filter\",\n  \"font\",\n  \"globalAlpha\",\n  \"globalCompositeOperation\",\n  \"imageSmoothingEnabled\",\n  \"lineCap\",\n  \"lineDashOffset\",\n  \"lineJoin\",\n  \"lineWidth\",\n  \"miterLimit\",\n  \"strokeStyle\",\n  \"textAlign\",\n  \"textBaseline\",\n]);\n\n// Methods that modify the current transform matrix.\nconst TRANSFORM_METHODS = new Set([\n  \"resetTransform\",\n  \"rotate\",\n  \"scale\",\n  \"setTransform\",\n  \"transform\",\n  \"translate\",\n]);\n\n// Maps every tracked context property to a function that reads its current\n// value from a CanvasRenderingContext2D. Covers directly-readable properties\n// (TRACKED_CTX_PROPS) and method-read ones (lineDash, transform).\nconst CTX_PROP_READERS = new Map([\n  ...Array.from(TRACKED_CTX_PROPS, p => [p, ctx => ctx[p]]),\n  [\"lineDash\", ctx => ctx.getLineDash()],\n  [\n    \"transform\",\n    ctx => {\n      const { a, b, c, d, e, f } = ctx.getTransform();\n      return { a, b, c, d, e, f };\n    },\n  ],\n]);\n\n// Color properties whose value is rendered as a swatch.\nconst COLOR_CTX_PROPS = new Set([\"fillStyle\", \"shadowColor\", \"strokeStyle\"]);\n\nconst MATHML_NS = \"http://www.w3.org/1998/Math/MathML\";\n\n/**\n * Tracks and displays the CanvasRenderingContext2D graphics state for all\n * contexts created during a stepped render.\n * @param {HTMLElement} panelEl  The #gfx-state-panel DOM element.\n */\nclass CanvasContextDetailsView {\n  #panel;\n\n  // Map<label, Map<prop, value>> — live graphics state per tracked context.\n  #ctxStates = new Map();\n\n  // Map<label, Array<Map<prop, value>>> — save() stack snapshots per context.\n  #ctxStateStacks = new Map();\n\n  // Map<label, number|null> — which stack frame is shown; null = live/current.\n  #ctxStackViewIdx = new Map();\n\n  // Map<label, Map<prop, {valEl, swatchEl?}>> — DOM elements for live updates.\n  #gfxStateValueElements = new Map();\n\n  // Map<label, {container, prevBtn, pos, nextBtn}> — stack-nav DOM elements.\n  #gfxStateNavElements = new Map();\n\n  // When true, suppress live DOM updates; build() re-reads state and resets it.\n  #frozen = false;\n\n  constructor(panelEl) {\n    this.#panel = panelEl;\n  }\n\n  /** Suppress live DOM updates until the next build() call. */\n  freeze() {\n    this.#frozen = true;\n  }\n\n  /**\n   * Wrap a CanvasRenderingContext2D to track its graphics state.\n   * Returns a Proxy that keeps internal state in sync and updates the DOM.\n   */\n  wrapContext(ctx, label) {\n    const state = new Map();\n    for (const [prop, read] of CTX_PROP_READERS) {\n      state.set(prop, read(ctx));\n    }\n    this.#ctxStates.set(label, state);\n    this.#ctxStateStacks.set(label, []);\n    this.#ctxStackViewIdx.set(label, null);\n    // If the panel is already visible and we're at a pause point, rebuild it\n    // so the new context section is added and its live-update entries are\n    // registered. Skip the rebuild while frozen (execution is in progress\n    // between pauses) — the next build() call from #onStepped() will pick it\n    // up.\n    if (!this.#frozen && this.#gfxStateValueElements.size > 0) {\n      this.build();\n    }\n\n    return new Proxy(ctx, {\n      set: (target, prop, value) => {\n        target[prop] = value;\n        if (TRACKED_CTX_PROPS.has(prop)) {\n          state.set(prop, value);\n          this.#updatePropEl(label, prop, value);\n        }\n        return true;\n      },\n      get: (target, prop) => {\n        const val = target[prop];\n        if (typeof val !== \"function\") {\n          return val;\n        }\n        if (prop === \"save\") {\n          return (...args) => {\n            const result = val.apply(target, args);\n            this.#ctxStateStacks.get(label).push(this.#copyState(state));\n            this.#updateStackNav(label);\n            return result;\n          };\n        }\n        if (prop === \"restore\") {\n          return (...args) => {\n            const result = val.apply(target, args);\n            for (const [p, read] of CTX_PROP_READERS) {\n              const v = read(target);\n              state.set(p, v);\n              this.#updatePropEl(label, p, v);\n            }\n            const stack = this.#ctxStateStacks.get(label);\n            if (stack.length > 0) {\n              stack.pop();\n              // If the viewed frame was just removed, fall back to current.\n              const viewIndex = this.#ctxStackViewIdx.get(label);\n              if (viewIndex !== null && viewIndex >= stack.length) {\n                this.#ctxStackViewIdx.set(label, null);\n                this.#showState(label);\n              }\n              this.#updateStackNav(label);\n            }\n            return result;\n          };\n        }\n        if (prop === \"setLineDash\") {\n          return segments => {\n            val.call(target, segments);\n            const dash = target.getLineDash();\n            state.set(\"lineDash\", dash);\n            this.#updatePropEl(label, \"lineDash\", dash);\n          };\n        }\n        if (TRANSFORM_METHODS.has(prop)) {\n          return (...args) => {\n            const result = val.apply(target, args);\n            const { a, b, c, d, e, f } = target.getTransform();\n            const tf = { a, b, c, d, e, f };\n            state.set(\"transform\", tf);\n            this.#updatePropEl(label, \"transform\", tf);\n            return result;\n          };\n        }\n        return val.bind(target);\n      },\n    });\n  }\n\n  /**\n   * Override canvas.getContext to return a tracked proxy for \"2d\" contexts.\n   * Caches the proxy so repeated getContext(\"2d\") calls return the same\n   * wrapper.\n   */\n  wrapCanvasGetContext(canvas, label) {\n    let wrappedCtx = null;\n    const origGetContext = canvas.getContext.bind(canvas);\n    canvas.getContext = (type, ...args) => {\n      const ctx = origGetContext(type, ...args);\n      if (type !== \"2d\") {\n        return ctx;\n      }\n      wrappedCtx ??= this.wrapContext(ctx, label);\n      return wrappedCtx;\n    };\n    return canvas.getContext(\"2d\");\n  }\n\n  /**\n   * Rebuild the graphics-state panel DOM for all currently tracked contexts.\n   * Shows the panel if it was hidden.\n   */\n  build() {\n    this.#frozen = false;\n    this.#panel.hidden = false;\n    this.#panel.replaceChildren();\n    this.#gfxStateValueElements.clear();\n    this.#gfxStateNavElements.clear();\n\n    for (const [ctxLabel, state] of this.#ctxStates) {\n      const propEls = new Map();\n      this.#gfxStateValueElements.set(ctxLabel, propEls);\n\n      const section = document.createElement(\"div\");\n      section.className = \"gfx-state-section\";\n      section.dataset.ctxLabel = ctxLabel;\n\n      // Title row with label and stack-navigation arrows.\n      const title = document.createElement(\"div\");\n      title.className = \"gfx-state-title\";\n\n      const titleLabel = document.createElement(\"span\");\n      titleLabel.textContent = ctxLabel;\n\n      const navContainer = document.createElement(\"span\");\n      navContainer.className = \"gfx-state-stack-nav\";\n      navContainer.hidden = true;\n\n      const prevBtn = document.createElement(\"button\");\n      prevBtn.className = \"gfx-state-stack-button\";\n      prevBtn.title = \"View older saved state\";\n      prevBtn.textContent = \"←\";\n\n      const pos = document.createElement(\"span\");\n      pos.className = \"gfx-state-stack-pos\";\n\n      const nextBtn = document.createElement(\"button\");\n      nextBtn.className = \"gfx-state-stack-button\";\n      nextBtn.title = \"View newer saved state\";\n      nextBtn.textContent = \"→\";\n\n      navContainer.append(prevBtn, pos, nextBtn);\n      title.append(titleLabel, navContainer);\n      section.append(title);\n\n      this.#gfxStateNavElements.set(ctxLabel, {\n        container: navContainer,\n        prevBtn,\n        pos,\n        nextBtn,\n      });\n\n      prevBtn.addEventListener(\"click\", () => this.#navigate(ctxLabel, -1));\n      nextBtn.addEventListener(\"click\", () => this.#navigate(ctxLabel, +1));\n\n      for (const [prop, value] of state) {\n        const row = document.createElement(\"div\");\n        row.className = \"gfx-state-row\";\n\n        const key = document.createElement(\"span\");\n        key.className = \"gfx-state-key\";\n        key.textContent = prop;\n\n        row.append(key);\n\n        if (prop === \"transform\") {\n          const { math, mnEls } = this.#buildTransformMathML(value);\n          row.append(math);\n          propEls.set(prop, { valEl: math, swatchEl: null, mnEls });\n        } else {\n          const val = document.createElement(\"span\");\n          val.className = \"gfx-state-val\";\n          const text = this.#formatCtxValue(value);\n          val.textContent = text;\n          val.title = text;\n          let swatchEl = null;\n          if (COLOR_CTX_PROPS.has(prop)) {\n            swatchEl = document.createElement(\"span\");\n            swatchEl.className = \"color-swatch\";\n            swatchEl.style.background = String(value);\n            row.append(swatchEl);\n          }\n          row.append(val);\n          propEls.set(prop, { valEl: val, swatchEl });\n        }\n        section.append(row);\n      }\n      this.#panel.append(section);\n\n      // Apply the correct state for the current view index (may be a saved\n      // frame).\n      this.#showState(ctxLabel);\n      this.#updateStackNav(ctxLabel);\n    }\n  }\n\n  /**\n   * Remove the section for a single context from the panel and all internal\n   * state maps. Called when a temporary canvas is destroyed.\n   */\n  removeContext(label) {\n    this.#ctxStates.delete(label);\n    this.#ctxStateStacks.delete(label);\n    this.#ctxStackViewIdx.delete(label);\n    this.#gfxStateValueElements.delete(label);\n    this.#gfxStateNavElements.delete(label);\n    this.#panel\n      .querySelector(\n        `.gfx-state-section[data-ctx-label=\"${CSS.escape(label)}\"]`\n      )\n      ?.remove();\n  }\n\n  /** Hide the panel and discard all DOM state so no live updates occur. */\n  hide() {\n    this.#panel.hidden = true;\n    this.#gfxStateValueElements.clear();\n    this.#gfxStateNavElements.clear();\n    this.#panel.replaceChildren();\n  }\n\n  /**\n   * Scroll the panel to bring the section for the given context label into\n   * view.\n   */\n  scrollToSection(label) {\n    this.#panel\n      .querySelector(`[data-ctx-label=\"${CSS.escape(label)}\"]`)\n      ?.scrollIntoView({ block: \"nearest\" });\n  }\n\n  /**\n   * Clear all tracked state and reset the panel DOM.\n   * Called when the debug view is reset between pages.\n   */\n  clear() {\n    this.#ctxStates.clear();\n    this.#ctxStateStacks.clear();\n    this.#ctxStackViewIdx.clear();\n    this.#gfxStateValueElements.clear();\n    this.#gfxStateNavElements.clear();\n    this.#panel.replaceChildren();\n  }\n\n  #formatCtxValue(value) {\n    return Array.isArray(value) ? `[${value.join(\", \")}]` : String(value);\n  }\n\n  // Shallow-copy a state Map (arrays and plain objects are cloned one level\n  // deep).\n  #copyState(state) {\n    const clone = v => {\n      if (Array.isArray(v)) {\n        return [...v];\n      }\n      return typeof v === \"object\" && v !== null ? { ...v } : v;\n    };\n    return new Map([...state].map(([k, v]) => [k, clone(v)]));\n  }\n\n  // Apply a single (label, prop, value) update to the DOM unconditionally.\n  #applyPropEl(label, prop, value) {\n    const entry = this.#gfxStateValueElements.get(label)?.get(prop);\n    if (!entry) {\n      return;\n    }\n    if (entry.mnEls) {\n      for (const k of [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\"]) {\n        entry.mnEls[k].textContent = this.#formatMatrixValue(value[k]);\n      }\n      return;\n    }\n    const text = this.#formatCtxValue(value);\n    entry.valEl.textContent = text;\n    entry.valEl.title = text;\n    if (entry.swatchEl) {\n      entry.swatchEl.style.background = String(value);\n    }\n  }\n\n  // Update DOM for a live setter — skipped when frozen (continuous execution)\n  // or when the user is browsing a saved state.\n  #updatePropEl(label, prop, value) {\n    if (this.#frozen || this.#ctxStackViewIdx.get(label) !== null) {\n      return;\n    }\n    this.#applyPropEl(label, prop, value);\n  }\n\n  // Re-render all value DOM elements for label using the currently-viewed\n  // state.\n  #showState(label) {\n    const viewIdx = this.#ctxStackViewIdx.get(label);\n    const stateToShow =\n      viewIdx === null\n        ? this.#ctxStates.get(label)\n        : this.#ctxStateStacks.get(label)?.[viewIdx];\n    if (!stateToShow) {\n      return;\n    }\n    for (const [prop, value] of stateToShow) {\n      this.#applyPropEl(label, prop, value);\n    }\n  }\n\n  // Sync the stack-nav button states and position counter for a context.\n  #updateStackNav(label) {\n    if (this.#frozen) {\n      return;\n    }\n    const nav = this.#gfxStateNavElements.get(label);\n    if (!nav) {\n      return;\n    }\n    const stack = this.#ctxStateStacks.get(label) ?? [];\n    const viewIdx = this.#ctxStackViewIdx.get(label);\n    nav.container.hidden = stack.length === 0;\n    if (stack.length === 0) {\n      return;\n    }\n    nav.prevBtn.disabled = viewIdx === 0;\n    nav.nextBtn.disabled = viewIdx === null;\n    nav.pos.textContent =\n      viewIdx === null ? \"cur\" : `${viewIdx + 1}/${stack.length}`;\n  }\n\n  // Navigate the save/restore stack view for a context.\n  // delta = -1 → older (prev) frame; +1 → newer (next) frame.\n  #navigate(label, delta) {\n    const stack = this.#ctxStateStacks.get(label) ?? [];\n    const viewIndex = this.#ctxStackViewIdx.get(label);\n    let newViewIndex;\n    if (delta < 0) {\n      newViewIndex = viewIndex === null ? stack.length - 1 : viewIndex - 1;\n      if (newViewIndex < 0) {\n        return;\n      }\n    } else {\n      if (viewIndex === null) {\n        return;\n      }\n      newViewIndex = viewIndex >= stack.length - 1 ? null : viewIndex + 1;\n    }\n    this.#ctxStackViewIdx.set(label, newViewIndex);\n    this.#showState(label);\n    this.#updateStackNav(label);\n  }\n\n  #mEl(tag, ...children) {\n    const el = document.createElementNS(MATHML_NS, tag);\n    el.append(...children);\n    return el;\n  }\n\n  #formatMatrixValue(v) {\n    return Number.isInteger(v) ? String(v) : String(parseFloat(v.toFixed(4)));\n  }\n\n  #buildTransformMathML({ a, b, c, d, e, f }) {\n    const mnEls = {};\n    for (const [k, v] of Object.entries({ a, b, c, d, e, f })) {\n      mnEls[k] = this.#mEl(\"mn\", this.#formatMatrixValue(v));\n    }\n    const math = this.#mEl(\n      \"math\",\n      this.#mEl(\n        \"mrow\",\n        this.#mEl(\"mo\", \"[\"),\n        this.#mEl(\n          \"mtable\",\n          this.#mEl(\n            \"mtr\",\n            this.#mEl(\"mtd\", mnEls.a),\n            this.#mEl(\"mtd\", mnEls.c),\n            this.#mEl(\"mtd\", mnEls.e)\n          ),\n          this.#mEl(\n            \"mtr\",\n            this.#mEl(\"mtd\", mnEls.b),\n            this.#mEl(\"mtd\", mnEls.d),\n            this.#mEl(\"mtd\", mnEls.f)\n          ),\n          this.#mEl(\n            \"mtr\",\n            this.#mEl(\"mtd\", this.#mEl(\"mn\", \"0\")),\n            this.#mEl(\"mtd\", this.#mEl(\"mn\", \"0\")),\n            this.#mEl(\"mtd\", this.#mEl(\"mn\", \"1\"))\n          )\n        ),\n        this.#mEl(\"mo\", \"]\")\n      )\n    );\n    return { math, mnEls };\n  }\n}\n\nexport { CanvasContextDetailsView };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { unreachable } from \"../shared/util.js\";\n\nclass BaseCanvasFactory {\n  #enableHWA = false;\n\n  constructor({ enableHWA = false }) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      this.constructor === BaseCanvasFactory\n    ) {\n      unreachable(\"Cannot initialize BaseCanvasFactory.\");\n    }\n    this.#enableHWA = enableHWA;\n  }\n\n  create(width, height) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    const canvas = this._createCanvas(width, height);\n    return {\n      canvas,\n      context: canvas.getContext(\"2d\", {\n        willReadFrequently: !this.#enableHWA,\n      }),\n    };\n  }\n\n  reset({ canvas }, width, height) {\n    if (!canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid canvas size\");\n    }\n    canvas.width = width;\n    canvas.height = height;\n  }\n\n  destroy(canvasAndContext) {\n    const { canvas } = canvasAndContext;\n    if (!canvas) {\n      throw new Error(\"Canvas is not specified\");\n    }\n    // Zeroing the width and height cause Firefox to release graphics\n    // resources immediately, which can greatly reduce memory consumption.\n    canvas.width = canvas.height = 0;\n    canvasAndContext.canvas = null;\n    canvasAndContext.context = null;\n  }\n\n  getNoAlphaContext(canvas) {\n    return canvas.getContext(\"2d\", {\n      alpha: false,\n      willReadFrequently: !this.#enableHWA,\n    });\n  }\n\n  /**\n   * @ignore\n   */\n  _createCanvas(width, height) {\n    unreachable(\"Abstract method `_createCanvas` called.\");\n  }\n}\n\nexport { BaseCanvasFactory };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseCanvasFactory } from \"./canvas_factory.js\";\n\nclass DOMCanvasFactory extends BaseCanvasFactory {\n  constructor({ ownerDocument = globalThis.document, enableHWA = false }) {\n    super({ enableHWA });\n    this._document = ownerDocument;\n  }\n\n  /**\n   * @ignore\n   */\n  _createCanvas(width, height) {\n    const canvas = this._document.createElement(\"canvas\");\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n  }\n}\n\nexport { DOMCanvasFactory };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst FONT_HIGHLIGHT_COLOR_KEY = \"debugger.fontHighlightColor\";\nconst DEFAULT_FONT_HIGHLIGHT_COLOR = \"#0070c1\";\n\n// Maps MIME types to file extensions used when downloading fonts.\nconst MIMETYPE_TO_EXTENSION = new Map([\n  [\"font/opentype\", \"otf\"],\n  [\"font/otf\", \"otf\"],\n  [\"font/woff\", \"woff\"],\n  [\"font/woff2\", \"woff2\"],\n  [\"application/x-font-ttf\", \"ttf\"],\n  [\"font/truetype\", \"ttf\"],\n  [\"font/ttf\", \"ttf\"],\n  [\"application/x-font-type1\", \"pfb\"],\n]);\n\n// Maps MIME types reported by FontFaceObject to human-readable font format\n// names.\nconst MIMETYPE_TO_FORMAT = new Map([\n  [\"font/opentype\", \"OpenType\"],\n  [\"font/otf\", \"OpenType\"],\n  [\"font/woff\", \"WOFF\"],\n  [\"font/woff2\", \"WOFF2\"],\n  [\"application/x-font-ttf\", \"TrueType\"],\n  [\"font/truetype\", \"TrueType\"],\n  [\"font/ttf\", \"TrueType\"],\n  [\"application/x-font-type1\", \"Type1\"],\n]);\n\nclass FontView {\n  // Persistent map of all fonts seen since the document was opened,\n  // keyed by loadedName (= the PDF resource name / CSS font-family).\n  // Never cleared on page navigation so fonts cached in commonObjs\n  // (which only trigger fontAdded once per document) are always available.\n  #fontMap = new Map();\n\n  #container;\n\n  #list = (() => {\n    const ul = document.createElement(\"ul\");\n    ul.className = \"font-list\";\n    return ul;\n  })();\n\n  #onSelect;\n\n  #selectedName = null;\n\n  #downloadBtn;\n\n  constructor(containerEl, { onSelect } = {}) {\n    this.#container = containerEl;\n    this.#onSelect = onSelect;\n\n    this.#container.append(this.#buildToolbar(), this.#list);\n  }\n\n  #buildToolbar() {\n    const toolbar = document.createElement(\"div\");\n    toolbar.className = \"font-toolbar\";\n\n    // Color picker button + hidden input.\n    const colorInput = document.createElement(\"input\");\n    colorInput.type = \"color\";\n    colorInput.hidden = true;\n\n    const colorSwatch = document.createElement(\"span\");\n    colorSwatch.className = \"font-color-swatch\";\n\n    const colorBtn = document.createElement(\"button\");\n    colorBtn.className = \"font-color-button\";\n    colorBtn.title = \"Highlight color\";\n    colorBtn.append(colorSwatch);\n\n    const applyColor = color => {\n      colorInput.value = color;\n      document.documentElement.style.setProperty(\n        \"--font-highlight-color\",\n        color\n      );\n    };\n    applyColor(\n      localStorage.getItem(FONT_HIGHLIGHT_COLOR_KEY) ??\n        DEFAULT_FONT_HIGHLIGHT_COLOR\n    );\n\n    colorBtn.addEventListener(\"click\", () => colorInput.click());\n    colorInput.addEventListener(\"input\", () => {\n      applyColor(colorInput.value);\n      localStorage.setItem(FONT_HIGHLIGHT_COLOR_KEY, colorInput.value);\n    });\n\n    // Download button — enabled only when a font with data is selected.\n    const downloadBtn = (this.#downloadBtn = document.createElement(\"button\"));\n    downloadBtn.className = \"font-download-button\";\n    downloadBtn.title = \"Download selected font\";\n    downloadBtn.disabled = true;\n    downloadBtn.addEventListener(\"click\", () => {\n      const font = this.#fontMap.get(this.#selectedName);\n      if (!font?.data) {\n        return;\n      }\n      const ext = MIMETYPE_TO_EXTENSION.get(font.mimetype) ?? \"font\";\n      const name = (font.name || font.loadedName).replaceAll(/[^\\w-]/g, \"_\");\n      const blob = new Blob([font.data], { type: font.mimetype });\n      const url = URL.createObjectURL(blob);\n      const a = document.createElement(\"a\");\n      a.href = url;\n      a.download = `${name}.${ext}`;\n      a.click();\n      URL.revokeObjectURL(url);\n    });\n\n    toolbar.append(colorBtn, colorInput, downloadBtn);\n    return toolbar;\n  }\n\n  get element() {\n    return this.#container;\n  }\n\n  // Called by FontInspector.fontAdded whenever a font face is bound.\n  fontAdded(font) {\n    this.#fontMap.set(font.loadedName, font);\n  }\n\n  // Show the subset of known fonts that appear in the given op list.\n  // Uses setFont ops to determine which fonts are actually used on the page.\n  showForOpList({ fnArray, argsArray }, OPS) {\n    const usedNames = new Set();\n    for (let i = 0, len = fnArray.length; i < len; i++) {\n      if (fnArray[i] === OPS.setFont) {\n        usedNames.add(argsArray[i][0]);\n      }\n    }\n\n    const fonts = [];\n    for (const name of usedNames) {\n      const font = this.#fontMap.get(name);\n      if (font) {\n        fonts.push(font);\n      }\n    }\n    this.#render(fonts);\n  }\n\n  clear() {\n    this.#selectedName = null;\n    this.#downloadBtn.disabled = true;\n    this.#list.replaceChildren();\n  }\n\n  #render(fonts) {\n    if (fonts.length === 0) {\n      const li = document.createElement(\"li\");\n      li.className = \"font-empty\";\n      li.textContent = \"No fonts on this page.\";\n      this.#list.replaceChildren(li);\n      return;\n    }\n\n    const frag = document.createDocumentFragment();\n    for (const font of fonts) {\n      const li = document.createElement(\"li\");\n      li.className = \"font-item\";\n      li.dataset.loadedName = font.loadedName;\n      if (font.loadedName === this.#selectedName) {\n        li.classList.add(\"selected\");\n      }\n      li.addEventListener(\"click\", () => {\n        const next =\n          font.loadedName === this.#selectedName ? null : font.loadedName;\n        this.#selectedName = next;\n        for (const item of this.#list.querySelectorAll(\".font-item\")) {\n          item.classList.toggle(\"selected\", item.dataset.loadedName === next);\n        }\n        const selectedFont = next ? this.#fontMap.get(next) : null;\n        this.#downloadBtn.disabled = !selectedFont?.data;\n        this.#onSelect?.(next);\n      });\n\n      const nameEl = document.createElement(\"div\");\n      nameEl.className = \"font-name\";\n      nameEl.textContent = font.name || font.loadedName;\n      li.append(nameEl);\n\n      const tags = [];\n      const fmt = MIMETYPE_TO_FORMAT.get(font.mimetype);\n      if (fmt) {\n        tags.push(fmt);\n      }\n      if (font.isType3Font) {\n        tags.push(\"Type3\");\n      }\n      if (font.bold) {\n        tags.push(\"Bold\");\n      }\n      if (font.italic) {\n        tags.push(\"Italic\");\n      }\n      if (font.vertical) {\n        tags.push(\"Vertical\");\n      }\n      if (font.disableFontFace) {\n        tags.push(\"System\");\n      }\n      if (font.missingFile) {\n        tags.push(\"Missing\");\n      }\n\n      if (tags.length) {\n        const tagsEl = document.createElement(\"div\");\n        tagsEl.className = \"font-tags\";\n        for (const tag of tags) {\n          const span = document.createElement(\"span\");\n          span.className = \"font-tag\";\n          span.textContent = tag;\n          tagsEl.append(span);\n        }\n        li.append(tagsEl);\n      }\n\n      const loadedEl = document.createElement(\"div\");\n      loadedEl.className = \"font-loaded-name\";\n      loadedEl.textContent = font.loadedName;\n      li.append(loadedEl);\n\n      frag.append(li);\n    }\n    this.#list.replaceChildren(frag);\n  }\n}\n\nexport { FontView };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MathClamp } from \"pdfjs-lib\";\n\n/**\n * Wraps two elements with a drag-to-resize handle between them.\n * @param {HTMLElement} firstEl\n * @param {HTMLElement} secondEl\n * @param {object} [options]\n * @param {\"row\"|\"column\"} [options.direction=\"row\"]  Layout axis.\n * @param {number}         [options.minSize=40]       Min px for each panel.\n * @param {Function}       [options.onResize]         Called after each resize.\n */\nclass SplitView {\n  #container;\n\n  #resizer;\n\n  #isRow;\n\n  #minSize;\n\n  #onResize;\n\n  #onPointerDown = null;\n\n  #onKeyDown = null;\n\n  constructor(\n    firstEl,\n    secondEl,\n    { direction = \"row\", minSize = 40, onResize } = {}\n  ) {\n    this.#isRow = direction === \"row\";\n    this.#minSize = minSize;\n    this.#onResize = onResize;\n\n    const resizer = (this.#resizer = document.createElement(\"div\"));\n    resizer.className = \"spc-resizer\";\n    resizer.role = \"separator\";\n    resizer.tabIndex = 0;\n    resizer.ariaOrientation = this.#isRow ? \"vertical\" : \"horizontal\";\n    resizer.ariaValueMin = 0;\n    resizer.ariaValueMax = 100;\n    resizer.ariaValueNow = 50;\n\n    this.#container = document.createElement(\"div\");\n    this.#container.className = `spc-container spc-${direction}`;\n    this.#container.append(firstEl, resizer, secondEl);\n\n    this.#setupResizer();\n  }\n\n  get element() {\n    return this.#container;\n  }\n\n  destroy() {\n    if (this.#onPointerDown) {\n      this.#resizer.removeEventListener(\"pointerdown\", this.#onPointerDown);\n      this.#onPointerDown = null;\n    }\n    if (this.#onKeyDown) {\n      this.#resizer.removeEventListener(\"keydown\", this.#onKeyDown);\n      this.#onKeyDown = null;\n    }\n  }\n\n  // Always read the live first/last child so callers can swap panels in-place.\n  get #first() {\n    return this.#container.firstElementChild;\n  }\n\n  get #second() {\n    return this.#container.lastElementChild;\n  }\n\n  #dimension() {\n    return this.#isRow ? \"width\" : \"height\";\n  }\n\n  #updateAria(containerSize, resizerSize) {\n    const total = containerSize - resizerSize;\n    if (total <= 0) {\n      return;\n    }\n    const firstSize = this.#first.getBoundingClientRect()[this.#dimension()];\n    this.#resizer.ariaValueNow = Math.round((firstSize / total) * 100);\n  }\n\n  #clampFirstSize(total, requestedFirst) {\n    if (total <= 0) {\n      return 0;\n    }\n    return total <= this.#minSize * 2\n      ? MathClamp(requestedFirst, 0, total)\n      : MathClamp(requestedFirst, this.#minSize, total - this.#minSize);\n  }\n\n  #resize(newFirst) {\n    const dimension = this.#dimension();\n    const containerSize = this.#container.getBoundingClientRect()[dimension];\n    const resizerSize = this.#resizer.getBoundingClientRect()[dimension];\n    this.#resizeWithMetrics(newFirst, containerSize, resizerSize);\n  }\n\n  #resizeWithMetrics(newFirst, containerSize, resizerSize) {\n    const total = containerSize - resizerSize;\n    const clamped = this.#clampFirstSize(total, newFirst);\n    this.#first.style.flexGrow = clamped;\n    this.#second.style.flexGrow = total - clamped;\n    this.#updateAria(containerSize, resizerSize);\n  }\n\n  #setupResizer() {\n    const axis = this.#isRow ? \"clientX\" : \"clientY\";\n    const cursor = this.#isRow ? \"col-resize\" : \"row-resize\";\n\n    this.#onPointerDown = e => {\n      if (e.button !== 0) {\n        return;\n      }\n      e.preventDefault();\n\n      const dimension = this.#dimension();\n      const containerSize = this.#container.getBoundingClientRect()[dimension];\n      const resizerSize = this.#resizer.getBoundingClientRect()[dimension];\n      const startPos = e[axis];\n      const startFirst = this.#first.getBoundingClientRect()[dimension];\n\n      this.#resizer.classList.add(\"dragging\");\n      document.body.style.cursor = cursor;\n\n      const ac = new AbortController();\n      const { signal } = ac;\n\n      const cancelDrag = () => {\n        ac.abort();\n        this.#resizer.classList.remove(\"dragging\");\n        document.body.style.cursor = \"\";\n      };\n\n      window.addEventListener(\n        \"pointermove\",\n        ev => {\n          this.#resizeWithMetrics(\n            startFirst + ev[axis] - startPos,\n            containerSize,\n            resizerSize\n          );\n        },\n        { signal }\n      );\n      window.addEventListener(\n        \"pointerup\",\n        () => {\n          cancelDrag();\n          this.#updateAria(\n            containerSize,\n            this.#resizer.getBoundingClientRect()[dimension]\n          );\n          this.#onResize?.();\n        },\n        { signal }\n      );\n      window.addEventListener(\"blur\", cancelDrag, { signal });\n    };\n    this.#resizer.addEventListener(\"pointerdown\", this.#onPointerDown);\n\n    this.#onKeyDown = e => {\n      let delta = 0;\n      if (\n        (this.#isRow && e.key === \"ArrowLeft\") ||\n        (!this.#isRow && e.key === \"ArrowUp\")\n      ) {\n        delta = -(e.shiftKey ? 50 : 10);\n      } else if (\n        (this.#isRow && e.key === \"ArrowRight\") ||\n        (!this.#isRow && e.key === \"ArrowDown\")\n      ) {\n        delta = e.shiftKey ? 50 : 10;\n      } else {\n        return;\n      }\n      e.preventDefault();\n      const dimension = this.#dimension();\n      const inlineCurrent = parseFloat(this.#first.style.flexGrow);\n      const currentFirst = isNaN(inlineCurrent)\n        ? this.#first.getBoundingClientRect()[dimension]\n        : inlineCurrent;\n      this.#resize(currentFirst + delta);\n      this.#onResize?.();\n    };\n    this.#resizer.addEventListener(\"keydown\", this.#onKeyDown);\n  }\n}\n\nexport { SplitView };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  BreakpointType,\n  DrawOpsView,\n  TEXT_EXEC_OP_IDS,\n  TEXT_OP_IDS,\n} from \"./draw_ops_view.js\";\nimport { OPS, TextLayer } from \"pdfjs-lib\";\nimport { CanvasContextDetailsView } from \"./canvas_context_details_view.js\";\nimport { DOMCanvasFactory } from \"pdfjs/display/dom_canvas_factory.js\";\nimport { FontView } from \"./font_view.js\";\nimport { SplitView } from \"./split_view.js\";\n\n// Enable font inspection so TextLayer sets data-font-name on each span.\n// fontAdded is called by FontFaceObject when loading fonts (via the pdfBug\n// inspectFont callback in api.js) — we don't need it here, but it must exist\n// to avoid a TypeError that would disrupt font loading and break canvas\n// rendering.\nglobalThis.FontInspector = { enabled: true, fontAdded() {} };\n\n// Stepper for pausing/stepping through op list rendering.\n// Implements the interface expected by InternalRenderTask (pdfBug mode).\nclass ViewerStepper {\n  #onStepped;\n\n  #continueCallback = null;\n\n  // Pass resumeAt to re-pause at a specific index (e.g. after a zoom).\n  constructor(onStepped, resumeAt = null) {\n    this.#onStepped = onStepped;\n    this.nextBreakPoint = resumeAt ?? this.#findNextAfter(-1);\n    this.currentIdx = -1;\n  }\n\n  // Called by executeOperatorList when execution reaches nextBreakPoint.\n  breakIt(i, continueCallback) {\n    this.currentIdx = i;\n    this.#continueCallback = continueCallback;\n    this.#onStepped(i);\n  }\n\n  // Advance one instruction then pause again.\n  // In text-only mode, skip forward to the next text op.\n  stepNext() {\n    if (!this.#continueCallback) {\n      return;\n    }\n    let next = this.currentIdx + 1;\n    if (globalThis.StepperManager._textOnly) {\n      const count = globalThis.StepperManager._opCount();\n      while (next < count && !globalThis.StepperManager._isTextOp(next)) {\n        next++;\n      }\n      if (next >= count) {\n        next = null; // no more text ops; let rendering run to completion\n      }\n    }\n    this.nextBreakPoint = next;\n    const cb = this.#continueCallback;\n    this.#continueCallback = null;\n    cb();\n  }\n\n  // Continue until the next breakpoint (or end).\n  continueToBreakpoint() {\n    if (!this.#continueCallback) {\n      return;\n    }\n    this.nextBreakPoint = this.#findNextAfter(this.currentIdx);\n    const cb = this.#continueCallback;\n    this.#continueCallback = null;\n    cb();\n  }\n\n  shouldSkip(i) {\n    return (\n      globalThis.StepperManager._breakpoints.get(i) === BreakpointType.SKIP ||\n      (globalThis.StepperManager._textOnly &&\n        !globalThis.StepperManager._isTextExecOp(i))\n    );\n  }\n\n  #findNextAfter(idx) {\n    let next = null;\n    for (const [bp, type] of globalThis.StepperManager._breakpoints) {\n      if (\n        type === BreakpointType.PAUSE &&\n        bp > idx &&\n        (next === null || bp < next)\n      ) {\n        next = bp;\n      }\n    }\n    return next;\n  }\n\n  // Called by InternalRenderTask when the operator list grows (streaming).\n  updateOperatorList() {}\n\n  // Called by InternalRenderTask to initialise the stepper.\n  init() {}\n\n  // Called by InternalRenderTask after recording bboxes (pdfBug mode).\n  setOperatorBBoxes() {}\n\n  getNextBreakPoint() {\n    return this.nextBreakPoint;\n  }\n}\n\nconst MIN_ZOOM = 0.1;\nconst MAX_ZOOM = 10;\nconst ZOOM_STEP = 1.25;\n\nclass PageView {\n  #pdfDoc = null;\n\n  #gfxStateComp;\n\n  #DebugCanvasFactoryClass;\n\n  #opsView;\n\n  #renderedPage = null;\n\n  #renderScale = null;\n\n  #currentRenderTask = null;\n\n  #currentOpList = null;\n\n  #debugViewGeneration = 0;\n\n  #onMarkLoading;\n\n  #prefersDark;\n\n  #onWindowResize;\n\n  #stepButton;\n\n  #continueButton;\n\n  #zoomLevelEl;\n\n  #zoomOutButton;\n\n  #zoomInButton;\n\n  #redrawButton;\n\n  #textFilterButton;\n\n  #textLayerColorInput;\n\n  #textSpanBorderButton;\n\n  #textFilter = false;\n\n  #highlightCanvas;\n\n  #canvasScrollEl;\n\n  #textLayerEl = null;\n\n  #textLayerInstance = null;\n\n  #fontView;\n\n  #fontViewButton;\n\n  constructor({ onMarkLoading }) {\n    this.#onMarkLoading = onMarkLoading;\n    this.#prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n    this.#gfxStateComp = new CanvasContextDetailsView(\n      document.getElementById(\"gfx-state-panel\")\n    );\n\n    this.#stepButton = document.getElementById(\"step-button\");\n    this.#continueButton = document.getElementById(\"continue-button\");\n\n    this.#opsView = new DrawOpsView(\n      document.getElementById(\"op-list-panel\"),\n      document.getElementById(\"op-detail-panel\"),\n      {\n        onHighlight: i => this.#drawHighlight(i),\n        onClearHighlight: () => this.#clearHighlight(),\n        prefersDark: this.#prefersDark,\n      }\n    );\n\n    this.#fontView = new FontView(document.getElementById(\"font-panel\"), {\n      onSelect: loadedName => {\n        if (!this.#textLayerEl) {\n          return;\n        }\n        for (const span of this.#textLayerEl.querySelectorAll(\n          \".font-highlighted\"\n        )) {\n          span.classList.remove(\"font-highlighted\");\n        }\n        if (loadedName) {\n          for (const span of this.#textLayerEl.querySelectorAll(\n            `[data-font-name=\"${CSS.escape(loadedName)}\"]`\n          )) {\n            span.classList.add(\"font-highlighted\");\n          }\n        }\n      },\n    });\n    this.#fontViewButton = document.getElementById(\"font-view-button\");\n    globalThis.FontInspector.fontAdded = font => this.#fontView.fontAdded(font);\n\n    // Install a StepperManager so InternalRenderTask (pdfBug mode) picks it up.\n    // A new instance is set on each redraw; null means no stepping.\n    globalThis.StepperManager = {\n      get enabled() {\n        return globalThis.StepperManager._active !== null;\n      },\n      _active: null,\n      _breakpoints: this.#opsView.breakpoints,\n      _textOnly: false,\n      // Returns true when op index i is a text op shown in the filtered list.\n      _isTextOp: i => TEXT_OP_IDS.has(this.#currentOpList?.fnArray[i]),\n      // Returns true when op index i must be executed (not skipped) in text\n      // mode.\n      _isTextExecOp: i => TEXT_EXEC_OP_IDS.has(this.#currentOpList?.fnArray[i]),\n      // Returns the total number of ops in the current op list.\n      _opCount: () => this.#currentOpList?.fnArray.length ?? 0,\n      create: () => globalThis.StepperManager._active,\n    };\n\n    // Keep --dpr in sync so CSS can scale temp canvases correctly.\n    this.#updateDPR();\n    this.#onWindowResize = () => this.#updateDPR();\n    window.addEventListener(\"resize\", this.#onWindowResize);\n\n    this.#DebugCanvasFactoryClass = this.#makeDebugCanvasFactory();\n\n    this.#setupSplits();\n\n    this.#zoomLevelEl = document.getElementById(\"zoom-level\");\n    this.#zoomOutButton = document.getElementById(\"zoom-out-button\");\n    this.#zoomInButton = document.getElementById(\"zoom-in-button\");\n    this.#redrawButton = document.getElementById(\"redraw-button\");\n    this.#textFilterButton = document.getElementById(\"text-filter-button\");\n    this.#textLayerColorInput = document.getElementById(\n      \"text-layer-color-input\"\n    );\n    this.#textSpanBorderButton = document.getElementById(\n      \"text-span-border-button\"\n    );\n    this.#highlightCanvas = document.getElementById(\"highlight-canvas\");\n    this.#canvasScrollEl = document.getElementById(\"canvas-scroll\");\n\n    this.#setupEventListeners();\n  }\n\n  // Expose DebugCanvasFactory class so caller can pass to getDocument().\n  get DebugCanvasFactory() {\n    return this.#DebugCanvasFactoryClass;\n  }\n\n  // Show the debug view for a given page.\n  async show(pdfDoc, pageNum) {\n    this.#pdfDoc = pdfDoc;\n    if (this.#currentOpList === null) {\n      await this.#showRenderView(pageNum);\n    }\n  }\n\n  // Reset all debug state (call when navigating to tree or loading new doc).\n  reset() {\n    this.#debugViewGeneration++;\n    this.#cancelTextLayer();\n    this.#currentRenderTask?.cancel();\n    this.#currentRenderTask = null;\n    this.#renderedPage?.cleanup();\n    this.#renderedPage = this.#renderScale = this.#currentOpList = null;\n    this.#clearPausedState();\n    this.#opsView.clear();\n    this.#fontView.clear();\n    this.#gfxStateComp.clear();\n    this.#pdfDoc?.canvasFactory.clear();\n\n    const mainCanvas = document.getElementById(\"render-canvas\");\n    mainCanvas.width = mainCanvas.height = 0;\n    this.#highlightCanvas.width = this.#highlightCanvas.height = 0;\n\n    this.#zoomLevelEl.textContent = \"\";\n    this.#zoomOutButton.disabled = false;\n    this.#zoomInButton.disabled = false;\n    this.#redrawButton.disabled = true;\n  }\n\n  #updateDPR() {\n    document.documentElement.style.setProperty(\n      \"--dpr\",\n      window.devicePixelRatio || 1\n    );\n  }\n\n  #makeDebugCanvasFactory() {\n    const gfxStateComp = this.#gfxStateComp;\n    // Custom CanvasFactory that tracks temporary canvases created during\n    // rendering. When stepping, each temporary canvas is shown below the main\n    // page canvas to inspect intermediate compositing targets (masks, etc).\n    return class DebugCanvasFactory extends DOMCanvasFactory {\n      // Wrapper objects currently alive: { canvas, context, wrapper, label }.\n      #alive = [];\n\n      // getDocument passes { ownerDocument, enableHWA } to the constructor.\n      constructor({ ownerDocument, enableHWA } = {}) {\n        super({ ownerDocument: ownerDocument ?? document, enableHWA });\n      }\n\n      create(width, height) {\n        const canvasAndCtx = super.create(width, height);\n        const label = `Temp ${this.#alive.length + 1}`;\n        canvasAndCtx.context = gfxStateComp.wrapCanvasGetContext(\n          canvasAndCtx.canvas,\n          label\n        );\n        if (globalThis.StepperManager._active !== null) {\n          this.#attach(canvasAndCtx, width, height, label);\n        }\n        return canvasAndCtx;\n      }\n\n      reset(canvasAndCtx, width, height) {\n        super.reset(canvasAndCtx, width, height);\n        const entry = this.#alive.find(e => e.canvasAndCtx === canvasAndCtx);\n        if (entry) {\n          entry.labelEl.textContent = `${entry.labelEl.textContent.split(\"—\")[0].trim()} — ${width}×${height}`;\n        }\n      }\n\n      destroy(canvasAndCtx) {\n        const idx = this.#alive.findIndex(e => e.canvasAndCtx === canvasAndCtx);\n        if (idx !== -1) {\n          const { wrapper, ctxLabel } = this.#alive[idx];\n          wrapper.remove();\n          gfxStateComp.removeContext(ctxLabel);\n          this.#alive.splice(idx, 1);\n        }\n        super.destroy(canvasAndCtx);\n      }\n\n      // Show all currently-alive canvases (called when stepping starts).\n      showAll() {\n        for (const entry of this.#alive) {\n          if (!entry.wrapper.isConnected) {\n            this.#attachWrapper(entry);\n          }\n        }\n      }\n\n      // Remove all temporary canvases from the DOM and clear tracking state.\n      clear() {\n        for (const entry of this.#alive) {\n          entry.wrapper.remove();\n          entry.canvasAndCtx.canvas.width = 0;\n          entry.canvasAndCtx.canvas.height = 0;\n        }\n        this.#alive.length = 0;\n      }\n\n      #attach(canvasAndCtx, width, height, ctxLabel) {\n        const wrapper = document.createElement(\"div\");\n        wrapper.className = \"temp-canvas-wrapper\";\n        wrapper.addEventListener(\"click\", () =>\n          gfxStateComp.scrollToSection(ctxLabel)\n        );\n        const labelEl = document.createElement(\"div\");\n        labelEl.className = \"temp-canvas-label\";\n        labelEl.textContent = `${ctxLabel} — ${width}×${height}`;\n        const checker = document.createElement(\"div\");\n        checker.className = \"canvas-checker\";\n        checker.append(canvasAndCtx.canvas);\n        wrapper.append(labelEl, checker);\n        const entry = { canvasAndCtx, wrapper, labelEl, ctxLabel };\n        this.#alive.push(entry);\n        this.#attachWrapper(entry);\n      }\n\n      #attachWrapper(entry) {\n        document.getElementById(\"canvas-scroll\").append(entry.wrapper);\n      }\n    };\n  }\n\n  #setupSplits() {\n    // Build the three SplitView instances that make up the debug view layout.\n    // Inner splits are created first so outer splits can wrap the new\n    // containers.\n    // Layout: splitHor(splitVer(splitHor(op-list, gfx-state), op-detail),\n    // canvas)\n\n    // Inner row split: op-list on the left, gfx-state on the right (hidden by\n    // default).\n    const opTopSplit = new SplitView(\n      document.getElementById(\"op-list-panel\"),\n      document.getElementById(\"gfx-state-panel\"),\n      { direction: \"row\", minSize: 60 }\n    );\n\n    // Column split: op-list+gfx-state on top, op-detail on the bottom.\n    const instructionsSplit = new SplitView(\n      opTopSplit.element,\n      document.getElementById(\"op-detail-panel\"),\n      { direction: \"column\", minSize: 40 }\n    );\n\n    // Row split: canvas on the left, font panel on the right (hidden by\n    // default).\n    const canvasFontSplit = new SplitView(\n      document.getElementById(\"canvas-panel\"),\n      document.getElementById(\"font-panel\"),\n      { direction: \"row\", minSize: 150, onResize: () => this.#rerenderCanvas() }\n    );\n\n    // Outer row split: instructions column on the left, canvas+font on the\n    // right.\n    const renderSplit = new SplitView(\n      instructionsSplit.element,\n      canvasFontSplit.element,\n      { direction: \"row\", minSize: 100, onResize: () => this.#rerenderCanvas() }\n    );\n\n    const renderPanels = document.getElementById(\"render-panels\");\n    renderPanels.replaceWith(renderSplit.element);\n    renderSplit.element.id = \"render-panels\";\n  }\n\n  #setupEventListeners() {\n    this.#zoomInButton.addEventListener(\"click\", () =>\n      this.#zoomRenderCanvas(\n        Math.min(\n          MAX_ZOOM,\n          (this.#renderScale ?? this.#getFitScale()) * ZOOM_STEP\n        )\n      )\n    );\n    this.#zoomOutButton.addEventListener(\"click\", () =>\n      this.#zoomRenderCanvas(\n        Math.max(\n          MIN_ZOOM,\n          (this.#renderScale ?? this.#getFitScale()) / ZOOM_STEP\n        )\n      )\n    );\n\n    this.#redrawButton.addEventListener(\"click\", async () => {\n      if (!this.#renderedPage || !this.#currentOpList) {\n        return;\n      }\n      this.#clearPausedState();\n      // Reset recorded bboxes so they get re-recorded for the modified op\n      // list.\n      this.#renderedPage.recordedBBoxes = null;\n      if (this.#textFilter || this.#opsView.breakpoints.size > 0) {\n        globalThis.StepperManager._active = new ViewerStepper(i =>\n          this.#onStepped(i)\n        );\n      }\n      await this.#renderCanvas();\n    });\n\n    this.#stepButton.addEventListener(\"click\", () => {\n      if (globalThis.StepperManager._active) {\n        this.#gfxStateComp.freeze();\n        globalThis.StepperManager._active.stepNext();\n      }\n    });\n\n    this.#continueButton.addEventListener(\"click\", () => {\n      if (globalThis.StepperManager._active) {\n        this.#gfxStateComp.freeze();\n        globalThis.StepperManager._active.continueToBreakpoint();\n      }\n    });\n\n    const TEXT_LAYER_COLOR_KEY = \"debugger.textLayerColor\";\n    const DEFAULT_TEXT_LAYER_COLOR = \"#c03030\";\n    const applyColor = color => {\n      this.#textLayerColorInput.value = color;\n      document.documentElement.style.setProperty(\"--text-layer-color\", color);\n    };\n\n    applyColor(\n      localStorage.getItem(TEXT_LAYER_COLOR_KEY) ?? DEFAULT_TEXT_LAYER_COLOR\n    );\n\n    document\n      .getElementById(\"text-layer-color-button\")\n      .addEventListener(\"click\", () => this.#textLayerColorInput.click());\n\n    this.#textLayerColorInput.addEventListener(\"input\", () => {\n      const color = this.#textLayerColorInput.value;\n      applyColor(color);\n      localStorage.setItem(TEXT_LAYER_COLOR_KEY, color);\n    });\n\n    const SPAN_BORDERS_KEY = \"debugger.spanBorders\";\n    const applySpanBorders = enabled => {\n      this.#textSpanBorderButton.setAttribute(\"aria-pressed\", String(enabled));\n      document\n        .getElementById(\"canvas-wrapper\")\n        .classList.toggle(\"show-span-borders\", enabled);\n    };\n\n    applySpanBorders(localStorage.getItem(SPAN_BORDERS_KEY) === \"true\");\n\n    this.#textSpanBorderButton.addEventListener(\"click\", () => {\n      const next =\n        this.#textSpanBorderButton.getAttribute(\"aria-pressed\") !== \"true\";\n      applySpanBorders(next);\n      localStorage.setItem(SPAN_BORDERS_KEY, String(next));\n    });\n\n    this.#fontViewButton.addEventListener(\"click\", () => {\n      const next = this.#fontViewButton.getAttribute(\"aria-pressed\") !== \"true\";\n      this.#fontViewButton.setAttribute(\"aria-pressed\", String(next));\n      const fontPanelEl = this.#fontView.element;\n      if (next && !fontPanelEl.style.flexGrow) {\n        // On first reveal, size the font panel to its SplitView minSize (150px)\n        // and give the canvas panel the remaining space.\n        // Both panels need flex-basis:0 for SplitView's pixel-weight math, so\n        // we must set both flexGrow values explicitly here.\n        const FONT_PANEL_MIN = 150;\n        const RESIZER_SIZE = 6;\n        const available =\n          fontPanelEl.parentElement.getBoundingClientRect().width -\n          RESIZER_SIZE;\n        fontPanelEl.style.flexGrow = FONT_PANEL_MIN;\n        document.getElementById(\"canvas-panel\").style.flexGrow = Math.max(\n          100,\n          available - FONT_PANEL_MIN\n        );\n      }\n      fontPanelEl.hidden = !next;\n      this.#rerenderCanvas();\n    });\n\n    this.#textFilterButton.addEventListener(\"click\", () => {\n      const pressed =\n        this.#textFilterButton.getAttribute(\"aria-pressed\") === \"true\";\n      const next = !pressed;\n      this.#textFilterButton.setAttribute(\"aria-pressed\", String(next));\n      this.#textFilter = next;\n      globalThis.StepperManager._textOnly = next;\n      this.#opsView.setTextFilter(next);\n      this.#redrawButton.click();\n    });\n\n    document.addEventListener(\"keydown\", e => {\n      if (\n        e.target.matches(\"input, textarea, [contenteditable]\") ||\n        e.altKey ||\n        e.ctrlKey ||\n        e.metaKey\n      ) {\n        return;\n      }\n      const stepper = globalThis.StepperManager._active;\n      if (!stepper) {\n        return;\n      }\n      if (e.key === \"s\") {\n        e.preventDefault();\n        this.#gfxStateComp.freeze();\n        stepper.stepNext();\n      } else if (e.key === \"c\") {\n        e.preventDefault();\n        this.#gfxStateComp.freeze();\n        stepper.continueToBreakpoint();\n      }\n    });\n  }\n\n  #onStepped(i) {\n    this.#opsView.markPaused(i);\n    this.#stepButton.disabled = this.#continueButton.disabled = false;\n    this.#gfxStateComp.build();\n  }\n\n  #clearPausedState() {\n    this.#opsView.clearPaused();\n    globalThis.StepperManager._active = null;\n    this.#stepButton.disabled = this.#continueButton.disabled = true;\n    this.#gfxStateComp.hide();\n  }\n\n  #getFitScale() {\n    return (\n      (this.#canvasScrollEl.clientWidth - 24) /\n      this.#renderedPage.getViewport({ scale: 1 }).width\n    );\n  }\n\n  // Re-render preserving any current pause position and text-only state.\n  // Used by both zoom and resize so neither loses stepper or filter state.\n  #rerenderCanvas() {\n    const stepper = globalThis.StepperManager._active;\n    let resumeAt = null;\n    if (stepper !== null) {\n      resumeAt =\n        stepper.currentIdx >= 0 ? stepper.currentIdx : stepper.nextBreakPoint;\n    }\n    this.#clearPausedState();\n    if (resumeAt !== null || this.#textFilter) {\n      globalThis.StepperManager._active = new ViewerStepper(\n        i => this.#onStepped(i),\n        resumeAt\n      );\n    }\n    return this.#renderCanvas();\n  }\n\n  #zoomRenderCanvas(newScale) {\n    this.#renderScale = newScale;\n    return this.#rerenderCanvas();\n  }\n\n  #cancelTextLayer() {\n    this.#textLayerInstance?.cancel();\n    this.#textLayerEl?.remove();\n    this.#textLayerInstance = null;\n    this.#textLayerEl = null;\n  }\n\n  async #buildTextLayer(scale) {\n    const container = document.createElement(\"div\");\n    container.className = \"textLayer\";\n    // --total-scale-factor is required by text_layer_builder.css to compute\n    // font sizes. setLayerDimensions (called inside TextLayer) consumes it but\n    // never sets it, so we must provide it here.\n    container.style.setProperty(\"--total-scale-factor\", scale);\n    container.style.setProperty(\"--scale-round-x\", \"1px\");\n    container.style.setProperty(\"--scale-round-y\", \"1px\");\n    document.getElementById(\"canvas-wrapper\").append(container);\n    this.#textLayerEl = container;\n\n    const viewport = this.#renderedPage.getViewport({ scale });\n    const textLayer = new TextLayer({\n      textContentSource: this.#renderedPage.streamTextContent(),\n      container,\n      viewport,\n    });\n    this.#textLayerInstance = textLayer;\n\n    try {\n      await textLayer.render();\n    } catch (err) {\n      if (err?.name !== \"AbortException\") {\n        throw err;\n      }\n    }\n  }\n\n  async #renderCanvas() {\n    if (!this.#renderedPage) {\n      return null;\n    }\n\n    // Cancel any in-progress render before starting a new one.\n    // Hide the text layer immediately so it isn't visible at the wrong scale\n    // during the render; it is shown again once the canvas is ready.\n    if (this.#textLayerEl) {\n      this.#textLayerEl.style.visibility = \"hidden\";\n    }\n    this.#currentRenderTask?.cancel();\n    this.#currentRenderTask = null;\n\n    const highlight = this.#highlightCanvas;\n    const dpr = window.devicePixelRatio || 1;\n    const scale = this.#renderScale ?? this.#getFitScale();\n    this.#zoomLevelEl.textContent = `${Math.round(scale * 100)}%`;\n    this.#zoomOutButton.disabled = scale <= MIN_ZOOM;\n    this.#zoomInButton.disabled = scale >= MAX_ZOOM;\n    const viewport = this.#renderedPage.getViewport({ scale: scale * dpr });\n    const cssW = `${viewport.width / dpr}px`;\n    const cssH = `${viewport.height / dpr}px`;\n\n    // Size the highlight canvas immediately so it stays in sync.\n    highlight.width = viewport.width;\n    highlight.height = viewport.height;\n    highlight.style.width = cssW;\n    highlight.style.height = cssH;\n\n    // Render into a fresh canvas. When stepping, insert it into the DOM\n    // immediately so the user sees each instruction drawn live. For normal\n    // renders, swap only after completion so there's no blank flash.\n    const newCanvas = document.createElement(\"canvas\");\n    newCanvas.id = \"render-canvas\";\n    newCanvas.width = viewport.width;\n    newCanvas.height = viewport.height;\n    newCanvas.style.width = cssW;\n    newCanvas.style.height = cssH;\n    newCanvas.addEventListener(\"click\", () =>\n      this.#gfxStateComp.scrollToSection(\"Page\")\n    );\n\n    const isStepping = globalThis.StepperManager._active !== null;\n    if (isStepping) {\n      const oldCanvas = document.getElementById(\"render-canvas\");\n      oldCanvas.width = oldCanvas.height = 0;\n      oldCanvas.replaceWith(newCanvas);\n      // Show any temporary canvases that survived from the previous render\n      // (e.g. after a zoom-while-stepping, the factory may already have\n      // entries).\n      this.#pdfDoc?.canvasFactory.showAll();\n    } else {\n      // Starting a fresh non-stepping render: remove leftover temp canvases.\n      this.#pdfDoc?.canvasFactory.clear();\n    }\n\n    // Record bboxes only on the first render; they stay valid for subsequent\n    // re-renders because BBoxReader returns normalised [0, 1] fractions.\n    const firstRender = !this.#renderedPage.recordedBBoxes;\n    const renderTask = this.#renderedPage.render({\n      canvasContext: this.#gfxStateComp.wrapCanvasGetContext(newCanvas, \"Page\"),\n      viewport,\n      recordOperations: firstRender,\n    });\n    this.#currentRenderTask = renderTask;\n\n    try {\n      await renderTask.promise;\n    } catch (err) {\n      if (err?.name === \"RenderingCancelledException\") {\n        return null;\n      }\n      throw err;\n    } finally {\n      if (this.#currentRenderTask === renderTask) {\n        this.#currentRenderTask = null;\n      }\n    }\n\n    // Render completed fully — stepping session is over.\n    this.#clearPausedState();\n    this.#pdfDoc?.canvasFactory.clear();\n    this.#redrawButton.disabled = false;\n\n    if (!isStepping) {\n      // Swap the completed canvas in, replacing the previous one. Zero out the\n      // old canvas dimensions to release its GPU memory.\n      const oldCanvas = document.getElementById(\"render-canvas\");\n      oldCanvas.width = oldCanvas.height = 0;\n      oldCanvas.replaceWith(newCanvas);\n    }\n\n    // In text-only mode, overlay the text layer on the finished canvas.\n    // If a layer already exists (e.g. after a zoom/resize), rescale it in place\n    // by updating the CSS variable and calling update() — no rebuild needed.\n    // If the filter is now off, discard any existing layer.\n    if (this.#textFilter) {\n      if (this.#textLayerInstance) {\n        this.#textLayerEl.style.setProperty(\"--total-scale-factor\", scale);\n        this.#textLayerInstance.update({\n          viewport: this.#renderedPage.getViewport({ scale }),\n        });\n        this.#textLayerEl.style.visibility = \"\";\n      } else {\n        await this.#buildTextLayer(scale);\n      }\n    } else {\n      this.#cancelTextLayer();\n    }\n\n    // Return the task on first render so the caller can extract the operator\n    // list without a separate getOperatorList() call (dev/testing builds only).\n    return firstRender ? renderTask : null;\n  }\n\n  #drawHighlight(opIdx) {\n    const bboxes = this.#renderedPage?.recordedBBoxes;\n    if (!bboxes || opIdx >= bboxes.length || bboxes.isEmpty(opIdx)) {\n      this.#clearHighlight();\n      return;\n    }\n    const canvas = document.getElementById(\"render-canvas\");\n    const highlight = this.#highlightCanvas;\n    const cssW = parseFloat(canvas.style.width);\n    const cssH = parseFloat(canvas.style.height);\n    const x = bboxes.minX(opIdx) * cssW;\n    const y = bboxes.minY(opIdx) * cssH;\n    const w = (bboxes.maxX(opIdx) - bboxes.minX(opIdx)) * cssW;\n    const h = (bboxes.maxY(opIdx) - bboxes.minY(opIdx)) * cssH;\n    const dpr = window.devicePixelRatio || 1;\n    const ctx = highlight.getContext(\"2d\");\n    ctx.clearRect(0, 0, highlight.width, highlight.height);\n    ctx.save();\n    ctx.scale(dpr, dpr);\n    ctx.fillStyle = \"rgba(255, 165, 0, 0.3)\";\n    ctx.strokeStyle = \"rgba(255, 140, 0, 0.9)\";\n    ctx.lineWidth = 1.5;\n    ctx.fillRect(x, y, w, h);\n    ctx.strokeRect(x, y, w, h);\n    ctx.restore();\n  }\n\n  #clearHighlight() {\n    this.#highlightCanvas\n      .getContext(\"2d\")\n      .clearRect(\n        0,\n        0,\n        this.#highlightCanvas.width,\n        this.#highlightCanvas.height\n      );\n  }\n\n  async #showRenderView(pageNum) {\n    const generation = this.#debugViewGeneration;\n    const opListEl = document.getElementById(\"op-list\");\n\n    const spinner = document.createElement(\"div\");\n    spinner.role = \"status\";\n    spinner.textContent = \"Loading…\";\n    opListEl.replaceChildren(spinner);\n    document.getElementById(\"op-detail-panel\").replaceChildren();\n\n    this.#renderScale = null;\n    this.#onMarkLoading(1);\n    try {\n      this.#renderedPage = await this.#pdfDoc.getPage(pageNum);\n      if (this.#debugViewGeneration !== generation) {\n        return;\n      }\n\n      // Render the page (records bboxes too). Reuse the operator list from\n      // the render task when available (dev/testing builds); fall back to a\n      // separate getOperatorList() call otherwise.\n      const renderTask = await this.#renderCanvas();\n      if (this.#debugViewGeneration !== generation) {\n        return;\n      }\n      this.#currentOpList =\n        renderTask?.getOperatorList?.() ??\n        (await this.#renderedPage.getOperatorList());\n      if (this.#debugViewGeneration !== generation) {\n        return;\n      }\n      this.#opsView.load(this.#currentOpList, this.#renderedPage);\n      this.#fontView.showForOpList(this.#currentOpList, OPS);\n      // If text-only filter is active, re-render immediately using only text\n      // ops so the canvas matches the filtered op list.\n      if (this.#textFilter) {\n        if (this.#debugViewGeneration !== generation) {\n          return;\n        }\n        this.#renderedPage.recordedBBoxes = null;\n        globalThis.StepperManager._active = new ViewerStepper(i =>\n          this.#onStepped(i)\n        );\n        await this.#renderCanvas();\n      }\n    } catch (err) {\n      const errEl = document.createElement(\"div\");\n      errEl.role = \"alert\";\n      errEl.textContent = `Error: ${err.message}`;\n      opListEl.replaceChildren(errEl);\n    } finally {\n      this.#onMarkLoading(-1);\n    }\n  }\n}\n\nexport { PageView };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MultilineView } from \"./multiline_view.js\";\n\nconst ARROW_COLLAPSED = \"▶\";\nconst ARROW_EXPANDED = \"▼\";\n\n// Matches indirect object references such as \"10 0 R\".\nconst REF_RE = /^\\d+ \\d+ R$/;\n\n/**\n * Renders and manages the PDF internal structure tree.\n * @param {HTMLElement} treeEl\n * @param {object}      options\n * @param {Function}    options.onMarkLoading  Called with +1/-1 to track\n *                                             in-flight requests.\n */\nclass TreeView {\n  #treeEl;\n\n  #onMarkLoading;\n\n  // Cache for getRawData results, keyed by \"num:gen\". Cleared on each new\n  // document.\n  #refCache = new Map();\n\n  constructor(treeEl, { onMarkLoading }) {\n    this.#treeEl = treeEl;\n    this.#onMarkLoading = onMarkLoading;\n    this.#setupKeyboardNav();\n  }\n\n  // --- Public API ---\n\n  /**\n   * Fetch and render a tree for the given ref/page from doc.\n   * @param {{ ref?: object, page?: number }} data\n   * @param {string|null}   rootLabel\n   * @param {PDFDocumentProxy} doc\n   */\n  async load(data, rootLabel, doc) {\n    this.#treeEl.classList.add(\"loading\");\n    this.#onMarkLoading(1);\n    try {\n      const rootNode = this.#renderNode(\n        rootLabel,\n        await doc.getRawData(data),\n        doc\n      );\n      this.#treeEl.replaceChildren(rootNode);\n      rootNode.querySelector(\"[role='button']\")?.click();\n      const firstTreeItem = this.#treeEl.querySelector(\"[role='treeitem']\");\n      if (firstTreeItem) {\n        firstTreeItem.tabIndex = 0;\n      }\n    } finally {\n      this.#treeEl.classList.remove(\"loading\");\n      this.#onMarkLoading(-1);\n    }\n  }\n\n  /** Append a role=alert error node to the tree element. */\n  showError(message) {\n    this.#treeEl.append(this.#makeErrorNode(message));\n  }\n\n  /** Clear the ref cache (call when a new document is opened). */\n  clearCache() {\n    this.#refCache.clear();\n  }\n\n  // --- Private helpers ---\n\n  #moveFocus(from, to) {\n    if (!to) {\n      return;\n    }\n    if (from) {\n      from.tabIndex = -1;\n    }\n    to.tabIndex = 0;\n    to.focus();\n  }\n\n  #getVisibleItems() {\n    return Array.from(\n      this.#treeEl.querySelectorAll(\"[role='treeitem']\")\n    ).filter(item => {\n      let el = item.parentElement;\n      while (el && el !== this.#treeEl) {\n        if (el.role === \"group\" && el.classList.contains(\"hidden\")) {\n          return false;\n        }\n        el = el.parentElement;\n      }\n      return true;\n    });\n  }\n\n  #makeErrorNode(message) {\n    const el = document.createElement(\"div\");\n    el.role = \"alert\";\n    el.textContent = `Error: ${message}`;\n    return el;\n  }\n\n  #setupKeyboardNav() {\n    this.#treeEl.addEventListener(\"keydown\", e => {\n      const { key } = e;\n      if (\n        key !== \"ArrowDown\" &&\n        key !== \"ArrowUp\" &&\n        key !== \"ArrowRight\" &&\n        key !== \"ArrowLeft\" &&\n        key !== \"Home\" &&\n        key !== \"End\"\n      ) {\n        return;\n      }\n      e.preventDefault();\n      const focused =\n        document.activeElement instanceof HTMLElement &&\n        this.#treeEl.contains(document.activeElement)\n          ? document.activeElement\n          : null;\n\n      // ArrowRight/Left operate on the focused treeitem directly without\n      // needing a full list of visible items.\n      if (key === \"ArrowRight\" || key === \"ArrowLeft\") {\n        if (!focused || focused.role !== \"treeitem\") {\n          return;\n        }\n        if (key === \"ArrowRight\") {\n          // Find the toggle button inside this treeitem (not inside a child\n          // group).\n          const toggle = focused.querySelector(\":scope > [role='button']\");\n          if (!toggle) {\n            return;\n          }\n          if (toggle.ariaExpanded === \"false\") {\n            toggle.click();\n          } else {\n            // Already expanded — move to first child treeitem.\n            const group = focused.querySelector(\n              \":scope > [role='group']:not(.hidden)\"\n            );\n            const firstChild = group?.querySelector(\"[role='treeitem']\");\n            this.#moveFocus(focused, firstChild);\n          }\n        } else {\n          // Collapsed or no children — move to parent treeitem.\n          const toggle = focused.querySelector(\":scope > [role='button']\");\n          if (toggle?.ariaExpanded === \"true\") {\n            toggle.click();\n          } else {\n            const parentGroup = focused.closest(\"[role='group']\");\n            const parentItem = parentGroup?.closest(\"[role='treeitem']\");\n            this.#moveFocus(focused, parentItem);\n          }\n        }\n        return;\n      }\n\n      // ArrowDown/Up/Home/End need the full ordered list of visible treeitems.\n      const visibleItems = this.#getVisibleItems();\n      if (visibleItems.length === 0) {\n        return;\n      }\n      const idx = visibleItems.indexOf(focused);\n\n      if (key === \"ArrowDown\") {\n        const next = visibleItems[idx >= 0 ? idx + 1 : 0];\n        this.#moveFocus(focused, next);\n      } else if (key === \"ArrowUp\") {\n        const prev = idx >= 0 ? visibleItems[idx - 1] : visibleItems.at(-1);\n        this.#moveFocus(focused, prev);\n      } else if (key === \"Home\") {\n        const first = visibleItems[0];\n        if (first !== focused) {\n          this.#moveFocus(focused, first);\n        }\n      } else if (key === \"End\") {\n        const last = visibleItems.at(-1);\n        if (last !== focused) {\n          this.#moveFocus(focused, last);\n        }\n      }\n    });\n  }\n\n  /** Create a bare div.node treeitem with an optional \"key: \" prefix. */\n  #makeNodeEl(key) {\n    const node = document.createElement(\"div\");\n    node.className = \"node\";\n    node.role = \"treeitem\";\n    node.tabIndex = -1;\n    if (key !== null) {\n      node.append(\n        this.#makeSpan(\"key\", key),\n        this.#makeSpan(\"separator\", \": \")\n      );\n    }\n    return node;\n  }\n\n  /**\n   * Render one key/value pair as a <div class=\"node\">.\n   * @param {string|null} key   Dict key, array index, or null for root.\n   * @param {*}           value\n   * @param {PDFDocumentProxy} doc\n   */\n  #renderNode(key, value, doc) {\n    const node = this.#makeNodeEl(key);\n    node.append(this.#renderValue(value, doc));\n    return node;\n  }\n\n  /**\n   * Populate a container element with the direct children of a value.\n   * Used both by renderValue (inside expandables) and renderRef (directly\n   * into the ref's children container, avoiding an extra toggle level).\n   */\n  #buildChildren(value, doc, container) {\n    if (this.#isPSFunction(value)) {\n      for (const [k, v] of Object.entries(value.dict)) {\n        container.append(this.#renderNode(k, v, doc));\n      }\n      const srcNode = this.#makeNodeEl(\"source\");\n      const srcLabel = `[PostScript, ${value.psLines.length} lines]`;\n      const srcLabelEl = this.#makeSpan(\"stream-label\", srcLabel);\n      srcNode.append(\n        this.#makeExpandable(srcLabelEl, srcLabel, c =>\n          this.#buildPSFunctionPanel(value, c, srcLabelEl)\n        )\n      );\n      container.append(srcNode);\n      if (value.jsCode !== null) {\n        const jsNode = this.#makeNodeEl(\"js\");\n        const jsLabel = \"[JS equivalent]\";\n        const jsLabelEl = this.#makeSpan(\"stream-label\", jsLabel);\n        jsNode.append(\n          this.#makeExpandable(jsLabelEl, jsLabel, c =>\n            this.#buildJSCodePanel(value.jsCode, c)\n          )\n        );\n        container.append(jsNode);\n      }\n      return;\n    }\n    if (this.#isStream(value)) {\n      for (const [k, v] of Object.entries(value.dict)) {\n        container.append(this.#renderNode(k, v, doc));\n      }\n      if (this.#isImageStream(value)) {\n        container.append(this.#renderImageData(value.imageData));\n      } else if (this.#isFormXObjectStream(value)) {\n        const contentNode = this.#makeNodeEl(\"content\");\n        const csLabel = `[Content Stream, ${value.instructions.length} instructions]`;\n        const csLabelEl = this.#makeSpan(\"stream-label\", csLabel);\n        contentNode.append(\n          this.#makeExpandable(csLabelEl, csLabel, c =>\n            this.#buildContentStreamPanel(value, c, csLabelEl)\n          )\n        );\n        container.append(contentNode);\n      } else {\n        const byteNode = this.#makeNodeEl(\"bytes\");\n        byteNode.append(\n          this.#makeSpan(\"stream-label\", `<${value.bytes.length} raw bytes>`)\n        );\n        container.append(byteNode);\n\n        const bytesContentEl = document.createElement(\"div\");\n        bytesContentEl.className = \"bytes-content\";\n        bytesContentEl.append(this.#formatBytes(value.bytes));\n        container.append(bytesContentEl);\n      }\n    } else if (Array.isArray(value)) {\n      value.forEach((v, i) =>\n        container.append(this.#renderNode(String(i), v, doc))\n      );\n    } else if (value !== null && typeof value === \"object\") {\n      for (const [k, v] of Object.entries(value)) {\n        container.append(this.#renderNode(k, v, doc));\n      }\n    } else {\n      container.append(this.#renderNode(null, value, doc));\n    }\n  }\n\n  /**\n   * Render a single content-stream token as a styled span.\n   */\n  #renderToken(token) {\n    if (!token) {\n      return this.#makeSpan(\"token-null\", \"null\");\n    }\n    switch (token.type) {\n      case \"cmd\":\n        return this.#makeSpan(\"token-cmd\", token.value);\n      case \"name\":\n        return this.#makeSpan(\"token-name\", \"/\" + token.value);\n      case \"ref\":\n        return this.#makeSpan(\"token-ref\", `${token.num} ${token.gen} R`);\n      case \"number\":\n        return this.#makeSpan(\"token-num\", String(token.value));\n      case \"string\":\n        return this.#makeSpan(\"token-str\", JSON.stringify(token.value));\n      case \"boolean\":\n        return this.#makeSpan(\"token-bool\", String(token.value));\n      case \"null\":\n        return this.#makeSpan(\"token-null\", \"null\");\n      case \"array\": {\n        const span = document.createElement(\"span\");\n        span.className = \"token-array\";\n        span.append(this.#makeSpan(\"bracket\", \"[\"));\n        for (const item of token.value) {\n          span.append(document.createTextNode(\" \"));\n          span.append(this.#renderToken(item));\n        }\n        span.append(document.createTextNode(\" \"));\n        span.append(this.#makeSpan(\"bracket\", \"]\"));\n        return span;\n      }\n      case \"brace\":\n        return this.#makeSpan(\"bracket\", token.value);\n      case \"dict\": {\n        const span = document.createElement(\"span\");\n        span.className = \"token-dict\";\n        span.append(this.#makeSpan(\"bracket\", \"<<\"));\n        for (const [k, v] of Object.entries(token.value)) {\n          span.append(document.createTextNode(\" \"));\n          span.append(this.#makeSpan(\"token-name\", `/${k}`));\n          span.append(document.createTextNode(\" \"));\n          span.append(this.#renderToken(v));\n        }\n        span.append(document.createTextNode(\" \"));\n        span.append(this.#makeSpan(\"bracket\", \">>\"));\n        return span;\n      }\n      default:\n        return this.#makeSpan(\n          \"token-unknown\",\n          String(token.value ?? token.type)\n        );\n    }\n  }\n\n  /**\n   * Return the plain-text representation of a token (mirrors #renderToken).\n   * Used to build searchable strings for every instruction.\n   */\n  #tokenToText(token) {\n    if (!token) {\n      return \"null\";\n    }\n    switch (token.type) {\n      case \"cmd\":\n        return token.value;\n      case \"name\":\n        return \"/\" + token.value;\n      case \"ref\":\n        return `${token.num} ${token.gen} R`;\n      case \"number\":\n        return String(token.value);\n      case \"string\":\n        return JSON.stringify(token.value);\n      case \"boolean\":\n        return String(token.value);\n      case \"null\":\n        return \"null\";\n      case \"brace\":\n        return token.value;\n      case \"array\":\n        return `[ ${token.value.map(t => this.#tokenToText(t)).join(\" \")} ]`;\n      case \"dict\": {\n        const inner = Object.entries(token.value)\n          .map(([k, v]) => `/${k} ${this.#tokenToText(v)}`)\n          .join(\" \");\n        return `<< ${inner} >>`;\n      }\n      default:\n        return String(token.value ?? token.type);\n    }\n  }\n\n  #buildInstructionLines(val, container, actions = null) {\n    const { instructions, cmdNames } = val;\n    const total = instructions.length;\n\n    // Pre-compute indentation depth for every instruction so that any\n    // slice [from, to) can be rendered without replaying from the start.\n    const depths = new Int32Array(total);\n    let d = 0;\n    for (let i = 0; i < total; i++) {\n      const cmd = instructions[i].cmd;\n      if (cmd === \"ET\" || cmd === \"Q\" || cmd === \"EMC\") {\n        d = Math.max(0, d - 1);\n      }\n      depths[i] = d;\n      if (cmd === \"BT\" || cmd === \"q\" || cmd === \"BDC\") {\n        d++;\n      }\n    }\n\n    // Pre-compute a plain-text string per instruction for searching.\n    const instrTexts = instructions.map(instr => {\n      const parts = instr.args.map(t => this.#tokenToText(t));\n      if (instr.cmd !== null) {\n        parts.push(instr.cmd);\n      }\n      return parts.join(\" \");\n    });\n\n    const mc = new MultilineView({\n      total,\n      lineClass: \"content-stream\",\n      getText: i => instrTexts[i],\n      actions,\n      makeLineEl: (i, isHighlighted) => {\n        const line = document.createElement(\"div\");\n        line.className = \"content-stm-instruction\";\n        if (isHighlighted) {\n          line.classList.add(\"mlc-match\");\n        }\n        // Wrap the instruction content so that indentation shifts the tokens.\n        const content = document.createElement(\"span\");\n        if (depths[i] > 0) {\n          content.style.paddingInlineStart = `${depths[i] * 1.5}em`;\n        }\n        const instr = instructions[i];\n        for (const arg of instr.args) {\n          content.append(this.#renderToken(arg));\n          content.append(document.createTextNode(\" \"));\n        }\n        if (instr.cmd !== null) {\n          const cmdEl = this.#makeSpan(\"token-cmd\", instr.cmd);\n          const opsName = cmdNames[instr.cmd];\n          if (opsName) {\n            cmdEl.title = opsName;\n          }\n          content.append(cmdEl);\n        }\n        line.append(content);\n        return line;\n      },\n    });\n    container.append(mc.element);\n    return mc;\n  }\n\n  // Fills container with a raw-bytes virtual-scroll panel.\n  #buildRawBytesPanel(rawBytes, container, actions = null) {\n    const lines = rawBytes.split(/\\r?\\n|\\r/);\n    if (lines.at(-1) === \"\") {\n      lines.pop();\n    }\n    const mc = new MultilineView({\n      total: lines.length,\n      lineClass: \"content-stream raw-bytes-stream\",\n      getText: i => lines[i],\n      actions,\n      makeLineEl: (i, isHighlighted) => {\n        const el = document.createElement(\"div\");\n        el.className = \"content-stm-instruction\";\n        if (isHighlighted) {\n          el.classList.add(\"mlc-match\");\n        }\n        el.append(this.#formatBytes(lines[i]));\n        return el;\n      },\n    });\n    container.append(mc.element);\n    return mc;\n  }\n\n  // Creates a \"Parsed\" toggle button. aria-pressed=true means the parsed view\n  // is currently active; clicking switches to the other view.\n  #makeParseToggleBtn(isParsed, onToggle) {\n    const btn = document.createElement(\"button\");\n    btn.className = \"mlc-nav-button\";\n    btn.textContent = \"Parsed\";\n    btn.ariaPressed = String(isParsed);\n    btn.title = isParsed ? \"Show raw bytes\" : \"Show parsed instructions\";\n    btn.addEventListener(\"click\", onToggle);\n    return btn;\n  }\n\n  // Fills container with a PostScript source panel (indented, token-coloured).\n  #buildPSSourcePanel(psLines, container, actions = null) {\n    const mc = new MultilineView({\n      total: psLines.length,\n      lineClass: \"content-stream ps-source-stream\",\n      getText: i => {\n        const { tokens } = psLines[i];\n        return tokens.map(t => this.#tokenToText(t)).join(\" \");\n      },\n      actions,\n      makeLineEl: (i, isHighlighted) => {\n        const line = document.createElement(\"div\");\n        line.className = \"content-stm-instruction\";\n        if (isHighlighted) {\n          line.classList.add(\"mlc-match\");\n        }\n        const content = document.createElement(\"span\");\n        const { indent, tokens } = psLines[i];\n        if (indent > 0) {\n          content.style.paddingInlineStart = `${indent * 1.5}em`;\n        }\n        for (let j = 0; j < tokens.length; j++) {\n          if (j > 0) {\n            content.append(document.createTextNode(\" \"));\n          }\n          content.append(this.#renderToken(tokens[j]));\n        }\n        line.append(content);\n        return line;\n      },\n    });\n    container.append(mc.element);\n    return mc;\n  }\n\n  // Fills container with a JS code panel (plain monospace lines).\n  #buildJSCodePanel(jsCode, container, actions = null) {\n    const lines = jsCode.split(\"\\n\");\n    while (lines.at(-1) === \"\") {\n      lines.pop();\n    }\n    const mc = new MultilineView({\n      total: lines.length,\n      lineClass: \"content-stream js-code-stream\",\n      getText: i => lines[i],\n      actions,\n      makeLineEl: (i, isHighlighted) => {\n        const el = document.createElement(\"div\");\n        el.className = \"content-stm-instruction\";\n        if (isHighlighted) {\n          el.classList.add(\"mlc-match\");\n        }\n        el.append(document.createTextNode(lines[i]));\n        return el;\n      },\n    });\n    container.append(mc.element);\n    return mc;\n  }\n\n  // PS source panel with parsed/raw toggle and an expandable JS equivalent.\n  #buildPSFunctionPanel(val, container, labelEl = null) {\n    let isParsed = true;\n    let currentPanel = null;\n    const rawLines = val.source.split(/\\r?\\n|\\r/);\n    if (rawLines.at(-1) === \"\") {\n      rawLines.pop();\n    }\n    const parsedLabel = `[PostScript, ${val.psLines.length} lines]`;\n    const rawLabel = `[PostScript, ${rawLines.length} raw lines]`;\n\n    const rebuild = () => {\n      currentPanel?.destroy();\n      currentPanel = null;\n      container.replaceChildren();\n      if (labelEl) {\n        labelEl.textContent = isParsed ? parsedLabel : rawLabel;\n      }\n      const btn = this.#makeParseToggleBtn(isParsed, () => {\n        isParsed = !isParsed;\n        rebuild();\n      });\n      currentPanel = isParsed\n        ? this.#buildPSSourcePanel(val.psLines, container, btn)\n        : this.#buildRawBytesPanel(val.source, container, btn);\n    };\n\n    rebuild();\n  }\n\n  // Fills container with the content stream panel (parsed or raw), with a\n  // toggle button in the toolbar that swaps the view in-place.\n  #buildContentStreamPanel(val, container, labelEl = null) {\n    let isParsed = true;\n    let currentPanel = null;\n    const rawBytes = val.rawBytes ?? val.bytes;\n    const rawLines = rawBytes ? rawBytes.split(/\\r?\\n|\\r/) : [];\n    if (rawLines.at(-1) === \"\") {\n      rawLines.pop();\n    }\n    const parsedLabel = `[Content Stream, ${val.instructions.length} instructions]`;\n    const rawLabel = `[Content Stream, ${rawLines.length} lines]`;\n\n    const rebuild = () => {\n      currentPanel?.destroy();\n      currentPanel = null;\n      container.replaceChildren();\n      if (labelEl) {\n        labelEl.textContent = isParsed ? parsedLabel : rawLabel;\n      }\n      const btn = this.#makeParseToggleBtn(isParsed, () => {\n        isParsed = !isParsed;\n        rebuild();\n      });\n      currentPanel = isParsed\n        ? this.#buildInstructionLines(val, container, btn)\n        : this.#buildRawBytesPanel(rawBytes, container, btn);\n    };\n\n    rebuild();\n  }\n\n  /**\n   * Render Page content stream as an expandable panel with a Parsed/Raw toggle.\n   */\n  #renderContentStream(val) {\n    const label = `[Content Stream, ${val.instructions.length} instructions]`;\n    const labelEl = this.#makeSpan(\"stream-label\", label);\n    return this.#makeExpandable(labelEl, label, container =>\n      this.#buildContentStreamPanel(val, container, labelEl)\n    );\n  }\n\n  /**\n   * Render a value inline (primitive) or as an expandable widget.\n   * Returns a Node or DocumentFragment suitable for appendChild().\n   */\n  #renderValue(value, doc) {\n    // Ref string (\"10 0 R\") – lazy expandable via getRawData()\n    if (typeof value === \"string\" && REF_RE.test(value)) {\n      return this.#renderRef(value, doc);\n    }\n\n    // Ref object { num, gen } – lazy expandable via getRawData()\n    if (this.#isRefObject(value)) {\n      return this.#renderRef(value, doc);\n    }\n\n    // PDF Name → /Name\n    if (this.#isPDFName(value)) {\n      return this.#makeSpan(\"name-value\", `/${value.name}`);\n    }\n\n    // Content stream (Page Contents) → expandable with Parsed/Raw toggle\n    if (this.#isContentStream(value)) {\n      return this.#renderContentStream(value);\n    }\n\n    // PostScript Type 4 function stream\n    if (this.#isPSFunction(value)) {\n      return this.#renderExpandable(\n        \"[PostScript Function]\",\n        \"stream-label\",\n        container => this.#buildChildren(value, doc, container)\n      );\n    }\n\n    // Stream → expandable showing dict entries + byte count or image preview\n    if (this.#isStream(value)) {\n      return this.#renderExpandable(\"[Stream]\", \"stream-label\", container =>\n        this.#buildChildren(value, doc, container)\n      );\n    }\n\n    // Plain object (dict)\n    if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n      const keys = Object.keys(value);\n      if (keys.length === 0) {\n        return this.#makeSpan(\"bracket\", \"{}\");\n      }\n      return this.#renderExpandable(`{${keys.length}}`, \"bracket\", container =>\n        this.#buildChildren(value, doc, container)\n      );\n    }\n\n    // Array\n    if (Array.isArray(value)) {\n      if (value.length === 0) {\n        return this.#makeSpan(\"bracket\", \"[]\");\n      }\n      return this.#renderExpandable(`[${value.length}]`, \"bracket\", container =>\n        this.#buildChildren(value, doc, container)\n      );\n    }\n\n    // Primitives\n    if (typeof value === \"string\") {\n      return this.#makeSpan(\"str-value\", JSON.stringify(value));\n    }\n    if (typeof value === \"number\") {\n      return this.#makeSpan(\"num-value\", String(value));\n    }\n    return typeof value === \"boolean\"\n      ? this.#makeSpan(\"bool-value\", String(value))\n      : this.#makeSpan(\"null-value\", \"null\");\n  }\n\n  /**\n   * Build a lazy-loading expand/collapse widget for a ref (string or object).\n   * Results are cached in #refCache keyed by \"num:gen\".\n   */\n  #renderRef(ref, doc) {\n    // Derive the cache key and display label from whichever form we received.\n    // String refs look like \"10 0 R\"; object refs are { num, gen }.\n    let cacheKey, label;\n    if (typeof ref === \"string\") {\n      const parts = ref.split(\" \");\n      cacheKey = `${parts[0]}:${parts[1]}`;\n      label = ref;\n    } else {\n      cacheKey = `${ref.num}:${ref.gen}`;\n      label = this.#refLabel(ref);\n    }\n    return this.#makeExpandable(\n      this.#makeSpan(\"ref\", label),\n      `reference ${label}`,\n      childrenEl => {\n        const spinner = document.createElement(\"div\");\n        spinner.role = \"status\";\n        spinner.textContent = \"Loading…\";\n        childrenEl.append(spinner);\n        this.#onMarkLoading(1);\n\n        this.#refCache\n          .getOrInsertComputed(cacheKey, () => doc.getRawData({ ref }))\n          .then(result => {\n            childrenEl.replaceChildren();\n            this.#buildChildren(result, doc, childrenEl);\n          })\n          .catch(err =>\n            childrenEl.replaceChildren(this.#makeErrorNode(err.message))\n          )\n          .finally(() => this.#onMarkLoading(-1));\n      }\n    );\n  }\n\n  /**\n   * Build a shared expand/collapse widget.\n   * labelEl is the element shown between the toggle arrow and the children.\n   * ariaLabel is used for the toggle and group aria-labels.\n   * onFirstOpen(childrenEl) is called once when first expanded (may be async).\n   */\n  #makeExpandable(labelEl, ariaLabel, onFirstOpen) {\n    const toggleEl = document.createElement(\"span\");\n    toggleEl.textContent = ARROW_COLLAPSED;\n    toggleEl.role = \"button\";\n    toggleEl.tabIndex = 0;\n    toggleEl.ariaExpanded = \"false\";\n    toggleEl.ariaLabel = `Expand ${ariaLabel}`;\n    labelEl.ariaHidden = \"true\";\n\n    const childrenEl = document.createElement(\"div\");\n    childrenEl.className = \"hidden\";\n    childrenEl.role = \"group\";\n    childrenEl.ariaLabel = `Contents of ${ariaLabel}`;\n\n    let open = false,\n      done = false;\n    const toggle = () => {\n      open = !open;\n      toggleEl.textContent = open ? ARROW_EXPANDED : ARROW_COLLAPSED;\n      toggleEl.ariaExpanded = String(open);\n      childrenEl.classList.toggle(\"hidden\", !open);\n      if (open && !done) {\n        done = true;\n        onFirstOpen(childrenEl);\n      }\n    };\n    toggleEl.addEventListener(\"click\", toggle);\n    toggleEl.addEventListener(\"keydown\", e => {\n      if (e.key === \"Enter\" || e.key === \" \") {\n        e.preventDefault();\n        toggle();\n      }\n    });\n    labelEl.addEventListener(\"click\", toggle);\n\n    const frag = document.createDocumentFragment();\n    frag.append(toggleEl, labelEl, childrenEl);\n    return frag;\n  }\n\n  /**\n   * Build a synchronous expand/collapse widget.\n   * @param {string}   label      Text shown on the collapsed line.\n   * @param {string}   labelClass CSS class for the label.\n   * @param {Function} buildFn    Called with (containerEl) on first open.\n   */\n  #renderExpandable(label, labelClass, buildFn) {\n    return this.#makeExpandable(\n      this.#makeSpan(labelClass, label),\n      label,\n      buildFn\n    );\n  }\n\n  /**\n   * Render image data (RGBA Uint8ClampedArray) into a <canvas> node.\n   */\n  #renderImageData({ width, height, data }) {\n    const node = document.createElement(\"div\");\n    node.className = \"node\";\n    const keyEl = document.createElement(\"span\");\n    keyEl.className = \"key\";\n    keyEl.textContent = \"imageData\";\n    const sep = document.createElement(\"span\");\n    sep.className = \"separator\";\n    sep.textContent = \": \";\n    const info = document.createElement(\"span\");\n    info.className = \"stream-label\";\n    info.textContent = `<${width}×${height}>`;\n    node.append(keyEl, sep, info);\n\n    const canvas = document.createElement(\"canvas\");\n    canvas.className = \"image-preview\";\n    canvas.width = width;\n    canvas.height = height;\n    const dpr = window.devicePixelRatio || 1;\n    canvas.style.width = `${width / dpr}px`;\n    canvas.style.aspectRatio = `${width} / ${height}`;\n    canvas.ariaLabel = `Image preview ${width}×${height}`;\n    const ctx = canvas.getContext(\"2d\");\n    const imgData = new ImageData(new Uint8ClampedArray(data), width, height);\n    ctx.putImageData(imgData, 0, 0);\n    node.append(canvas);\n    return node;\n  }\n\n  #isMostlyText(str) {\n    let printable = 0;\n    for (let i = 0; i < str.length; i++) {\n      const c = str.charCodeAt(i);\n      if (c >= 0x20 && c <= 0x7e) {\n        printable++;\n      }\n    }\n    return str.length > 0 && printable / str.length >= 0.8;\n  }\n\n  #formatBytes(str) {\n    const mostlyText = this.#isMostlyText(str);\n    const frag = document.createDocumentFragment();\n\n    if (!mostlyText) {\n      // Binary content: render every byte as hex in a single span.\n      const span = document.createElement(\"span\");\n      span.className = \"bytes-hex\";\n      const hexParts = [];\n      for (let i = 0; i < str.length; i++) {\n        hexParts.push(\n          str.charCodeAt(i).toString(16).toUpperCase().padStart(2, \"0\")\n        );\n      }\n      span.textContent = hexParts.join(\"\\u00B7\\u200B\");\n      frag.append(span);\n      return frag;\n    }\n\n    // Text content: printable ASCII + 0x0A as-is, other bytes as hex spans.\n    const isPrintable = c => (c >= 0x20 && c <= 0x7e) || c === 0x0a;\n    let i = 0;\n    while (i < str.length) {\n      const code = str.charCodeAt(i);\n      if (isPrintable(code)) {\n        let run = \"\";\n        while (i < str.length && isPrintable(str.charCodeAt(i))) {\n          run += str[i++];\n        }\n        frag.append(document.createTextNode(run));\n      } else {\n        const span = document.createElement(\"span\");\n        span.className = \"bytes-hex\";\n        const hexParts = [];\n        while (i < str.length && !isPrintable(str.charCodeAt(i))) {\n          hexParts.push(\n            str.charCodeAt(i).toString(16).toUpperCase().padStart(2, \"0\")\n          );\n          i++;\n        }\n        span.textContent = hexParts.join(\"\\u00B7\\u200B\");\n        frag.append(span);\n      }\n    }\n    return frag;\n  }\n\n  // Create a <span> with the given class and text content.\n  #makeSpan(className, text) {\n    const span = document.createElement(\"span\");\n    span.className = className;\n    span.textContent = text;\n    return span;\n  }\n\n  #isPDFName(val) {\n    return (\n      val !== null &&\n      typeof val === \"object\" &&\n      !Array.isArray(val) &&\n      typeof val.name === \"string\" &&\n      Object.keys(val).length === 1\n    );\n  }\n\n  // Ref objects arrive as { num: N, gen: G } after structured clone.\n  #isRefObject(val) {\n    return (\n      val !== null &&\n      typeof val === \"object\" &&\n      !Array.isArray(val) &&\n      typeof val.num === \"number\" &&\n      typeof val.gen === \"number\" &&\n      Object.keys(val).length === 2\n    );\n  }\n\n  #refLabel(ref) {\n    return ref.gen !== 0 ? `${ref.num}R${ref.gen}` : `${ref.num}R`;\n  }\n\n  // Page content streams:\n  // { contentStream: true, instructions, cmdNames, rawContents }.\n  #isContentStream(val) {\n    return (\n      val !== null &&\n      typeof val === \"object\" &&\n      val.contentStream === true &&\n      Array.isArray(val.instructions) &&\n      Array.isArray(val.rawContents)\n    );\n  }\n\n  // Streams: { dict, bytes }, { dict, imageData },\n  // or { dict, contentStream: true, instructions, cmdNames } (Form XObject).\n  #isStream(val) {\n    return (\n      val !== null &&\n      typeof val === \"object\" &&\n      !Array.isArray(val) &&\n      Object.hasOwn(val, \"dict\") &&\n      (Object.hasOwn(val, \"bytes\") ||\n        Object.hasOwn(val, \"imageData\") ||\n        val.contentStream === true)\n    );\n  }\n\n  #isImageStream(val) {\n    return this.#isStream(val) && Object.hasOwn(val, \"imageData\");\n  }\n\n  #isFormXObjectStream(val) {\n    return this.#isStream(val) && val.contentStream === true;\n  }\n\n  // PostScript Type 4 function: { dict, psFunction: true, psLines, jsCode }.\n  #isPSFunction(val) {\n    return (\n      val !== null &&\n      typeof val === \"object\" &&\n      !Array.isArray(val) &&\n      Object.hasOwn(val, \"dict\") &&\n      val.psFunction === true\n    );\n  }\n}\n\nexport { TreeView };\n","/* Copyright 2026 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getDocument, GlobalWorkerOptions, PasswordResponses } from \"pdfjs-lib\";\nimport { PageView } from \"./page_view.js\";\nimport { TreeView } from \"./tree_view.js\";\n\nGlobalWorkerOptions.workerSrc =\n  typeof PDFJSDev === \"undefined\"\n    ? \"../../src/pdf.worker.js\"\n    : \"../build/pdf.worker.mjs\";\n\n// Parses \"num\" into { page: num }, or \"numR\"/\"numRgen\" into { ref: {num,gen} }.\n// Returns null for invalid input.\nfunction parseGoToInput(str) {\n  const match = str.trim().match(/^(\\d+)(R(\\d+)?)?$/i);\n  if (!match) {\n    return null;\n  }\n  if (!match[2]) {\n    return { page: parseInt(match[1], 10) };\n  }\n  return {\n    ref: {\n      num: parseInt(match[1], 10),\n      gen: match[3] !== undefined ? parseInt(match[3], 10) : 0,\n    },\n  };\n}\n\n// Parses \"num\", \"numR\" or \"numRgen\" into { num, gen }, or returns null.\n// Used for URL hash param parsing where a bare number means a ref, not a page.\nfunction parseRefInput(str) {\n  const match = str.trim().match(/^(\\d+)(?:R(\\d+)?)?$/i);\n  if (!match) {\n    return null;\n  }\n  return {\n    num: parseInt(match[1], 10),\n    gen: match[2] !== undefined ? parseInt(match[2], 10) : 0,\n  };\n}\n\nlet pdfDoc = null;\n\n// Page number currently displayed in the tree (null when showing a\n// ref/trailer).\nlet currentPage = null;\n\n// Count of in-flight getRawData calls; drives the body \"loading\" cursor.\nlet loadingCount = 0;\nfunction markLoading(delta) {\n  loadingCount += delta;\n  document.body.classList.toggle(\"loading\", loadingCount > 0);\n}\n\n// Cache frequently accessed elements.\nconst treeButton = document.getElementById(\"tree-button\");\nconst debugButton = document.getElementById(\"debug-button\");\nconst debugViewEl = document.getElementById(\"debug-view\");\nconst treeEl = document.getElementById(\"tree\");\nconst statusEl = document.getElementById(\"status\");\nconst gotoInput = document.getElementById(\"goto-input\");\nconst pdfInfoEl = document.getElementById(\"pdf-info\");\n\nconst pageView = new PageView({ onMarkLoading: markLoading });\n\nconst treeView = new TreeView(treeEl, { onMarkLoading: markLoading });\n\nasync function loadTree(data, rootLabel = null) {\n  currentPage = typeof data.page === \"number\" ? data.page : null;\n  debugButton.disabled = currentPage === null;\n  pageView.reset();\n  debugViewEl.hidden = true;\n  treeEl.hidden = false;\n  await treeView.load(data, rootLabel, pdfDoc);\n}\n\nasync function openDocument(source, name) {\n  statusEl.textContent = `Loading ${name}…`;\n  pdfInfoEl.textContent = \"\";\n  treeView.clearCache();\n\n  if (pdfDoc) {\n    pageView.reset();\n    await pdfDoc.loadingTask.destroy();\n    pdfDoc = null;\n  }\n\n  const loadingTask = getDocument({\n    ...source,\n    cMapUrl:\n      typeof PDFJSDev === \"undefined\" ? \"../external/bcmaps/\" : \"../web/cmaps/\",\n    iccUrl:\n      typeof PDFJSDev === \"undefined\" ? \"../external/iccs/\" : \"../web/iccs/\",\n    standardFontDataUrl:\n      typeof PDFJSDev === \"undefined\"\n        ? \"../external/hellbox/\"\n        : \"../web/standard_fonts/\",\n    wasmUrl: \"../web/wasm/\",\n    useWorkerFetch: true,\n    pdfBug: true,\n    fontExtraProperties: true,\n    CanvasFactory: pageView.DebugCanvasFactory,\n  });\n  loadingTask.onPassword = (updateCallback, reason) => {\n    const dialog = document.getElementById(\"password-dialog\");\n    const title = document.getElementById(\"password-dialog-title\");\n    const input = document.getElementById(\"password-input\");\n    const cancelButton = document.getElementById(\"password-cancel\");\n\n    title.textContent =\n      reason === PasswordResponses.INCORRECT_PASSWORD\n        ? \"Incorrect password. Please try again:\"\n        : \"This PDF is password-protected. Please enter the password:\";\n    input.value = \"\";\n    dialog.showModal();\n\n    const cleanup = () => {\n      dialog.removeEventListener(\"close\", onSubmit);\n      cancelButton.removeEventListener(\"click\", onCancel);\n    };\n    const onSubmit = () => {\n      cleanup();\n      updateCallback(input.value);\n    };\n    const onCancel = () => {\n      cleanup();\n      dialog.close();\n      updateCallback(new Error(\"Password prompt cancelled.\"));\n    };\n\n    dialog.addEventListener(\"close\", onSubmit, { once: true });\n    cancelButton.addEventListener(\"click\", onCancel, { once: true });\n  };\n  pdfDoc = await loadingTask.promise;\n  const plural = pdfDoc.numPages !== 1 ? \"s\" : \"\";\n  pdfInfoEl.textContent = `${name} — ${pdfDoc.numPages} page${plural}`;\n  statusEl.textContent = \"\";\n  gotoInput.disabled = false;\n  gotoInput.value = \"\";\n}\n\nfunction showError(err) {\n  statusEl.textContent = `Error: ${err.message}`;\n  treeView.showError(err.message);\n}\n\ndocument.getElementById(\"file-input\").value = \"\";\n\ndocument\n  .getElementById(\"file-input\")\n  .addEventListener(\"change\", async ({ target }) => {\n    const file = target.files[0];\n    if (!file) {\n      return;\n    }\n    try {\n      await openDocument({ data: await file.arrayBuffer() }, file.name);\n      await loadTree({ ref: null }, \"Trailer\");\n    } catch (err) {\n      showError(err);\n    }\n  });\n\n(async () => {\n  const searchParams = new URLSearchParams(location.search);\n  const hashParams = new URLSearchParams(location.hash.slice(1));\n  const fileUrl = searchParams.get(\"file\");\n  if (!fileUrl) {\n    return;\n  }\n  try {\n    await openDocument({ url: fileUrl }, fileUrl.split(\"/\").pop());\n    const refStr = hashParams.get(\"ref\");\n    const pageStr = hashParams.get(\"page\");\n    if (refStr) {\n      const ref = parseRefInput(refStr);\n      if (ref) {\n        gotoInput.value = refStr;\n        await loadTree({ ref });\n        return;\n      }\n    }\n    if (pageStr) {\n      const page = parseInt(pageStr, 10);\n      if (Number.isInteger(page) && page >= 1 && page <= pdfDoc.numPages) {\n        gotoInput.value = pageStr;\n        await loadTree({ page });\n        return;\n      }\n    }\n    await loadTree({ ref: null }, \"Trailer\");\n  } catch (err) {\n    showError(err);\n  }\n})();\n\ngotoInput.addEventListener(\"keydown\", async ({ key, target }) => {\n  if (key !== \"Enter\" || !pdfDoc) {\n    return;\n  }\n  if (target.value.trim() === \"\") {\n    target.removeAttribute(\"aria-invalid\");\n    await loadTree({ ref: null }, \"Trailer\");\n    return;\n  }\n  const result = parseGoToInput(target.value);\n  if (!result) {\n    target.setAttribute(\"aria-invalid\", \"true\");\n    return;\n  }\n  if (\n    result.page !== undefined &&\n    (result.page < 1 || result.page > pdfDoc.numPages)\n  ) {\n    target.setAttribute(\"aria-invalid\", \"true\");\n    return;\n  }\n  target.removeAttribute(\"aria-invalid\");\n\n  // Allow debugging via references, as well as page numbers.\n  if (result.page === undefined) {\n    try {\n      result.page =\n        pdfDoc.cachedPageNumber(result.ref) ??\n        (await pdfDoc.getPageIndex(result.ref)) + 1;\n    } catch {}\n  }\n  // If we're in debug view and navigating to a page, stay in debug view\n  // without switching to the tree at all.\n  if (!debugViewEl.hidden && result.page !== undefined) {\n    currentPage = result.page;\n    pageView.reset();\n    await pageView.show(pdfDoc, currentPage);\n  } else {\n    await (result.page !== undefined\n      ? loadTree({ page: result.page })\n      : loadTree({ ref: result.ref }));\n  }\n});\n\ngotoInput.addEventListener(\"input\", ({ target }) => {\n  if (target.value.trim() === \"\") {\n    target.removeAttribute(\"aria-invalid\");\n  }\n});\n\ndebugButton.addEventListener(\"click\", async () => {\n  treeEl.hidden = true;\n  debugViewEl.hidden = false;\n  // Only render if not already loaded for this page; re-entering from the\n  // tree button keeps the existing debug state (op-list, canvas, breakpoints).\n  await pageView.show(pdfDoc, currentPage);\n});\n\ntreeButton.addEventListener(\"click\", () => {\n  debugViewEl.hidden = true;\n  treeEl.hidden = false;\n});\n"],"names":[],"sourceRoot":""}