{"version":3,"file":"viewer.mjs","mappings":"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","sources":["webpack://pdf.js/./node_modules/@fluent/bundle/esm/types.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/resolver.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/scope.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/builtins.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/memoizer.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/bundle.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/resource.js","webpack://pdf.js/./node_modules/@fluent/bundle/esm/index.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/overlay.js","webpack://pdf.js/./node_modules/cached-iterable/src/cached_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/cached_sync_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/cached_async_iterable.mjs","webpack://pdf.js/./node_modules/cached-iterable/src/index.mjs","webpack://pdf.js/./node_modules/@fluent/dom/esm/localization.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/dom_localization.js","webpack://pdf.js/./node_modules/@fluent/dom/esm/index.js","webpack://pdf.js/./src/display/base_factory.js","webpack://pdf.js/./src/display/display_utils.js","webpack://pdf.js/./src/display/editor/toolbar.js","webpack://pdf.js/./src/display/editor/tools.js","webpack://pdf.js/./src/display/editor/alt_text.js","webpack://pdf.js/./src/display/editor/editor.js","webpack://pdf.js/./src/shared/murmurhash3.js","webpack://pdf.js/./src/display/annotation_storage.js","webpack://pdf.js/./src/shared/util.js","webpack://pdf.js/./web/alt_text_manager.js","webpack://pdf.js/./web/annotation_editor_layer_builder.js","webpack://pdf.js/./web/annotation_editor_params.js","webpack://pdf.js/./web/annotation_layer_builder.js","webpack://pdf.js/./web/app.js","webpack://pdf.js/./web/app_options.js","webpack://pdf.js/./web/attachments.js","webpack://pdf.js/./web/download_manager.js","webpack://pdf.js/./web/draw_layer_builder.js","webpack://pdf.js/./web/event_utils.js","webpack://pdf.js/./web/external_services.js","webpack://pdf.js/./web/generic_scripting.js","webpack://pdf.js/./web/genericcom.js","webpack://pdf.js/./web/genericl10n.js","webpack://pdf.js/./web/l10n.js","webpack://pdf.js/./web/overlay_manager.js","webpack://pdf.js/./web/pdf_find_bar.js","webpack://pdf.js/./web/pdf_find_utils.js","webpack://pdf.js/./web/pdf_find_controller.js","webpack://pdf.js/./web/pdf_history.js","webpack://pdf.js/./web/pdf_link_service.js","webpack://pdf.js/./web/pdf_page_view.js","webpack://pdf.js/./web/pdf_print_service.js","webpack://pdf.js/./web/pdf_rendering_queue.js","webpack://pdf.js/./web/pdf_viewer.js","webpack://pdf.js/./web/pdfjs.js","webpack://pdf.js/./web/preferences.js","webpack://pdf.js/./web/print_utils.js","webpack://pdf.js/./web/secondary_toolbar.js","webpack://pdf.js/./web/struct_tree_layer_builder.js","webpack://pdf.js/./web/text_accessibility.js","webpack://pdf.js/./web/text_highlighter.js","webpack://pdf.js/./web/text_layer_builder.js","webpack://pdf.js/./web/toolbar.js","webpack://pdf.js/./web/ui_utils.js","webpack://pdf.js/./web/view_history.js","webpack://pdf.js/./web/viewer.js","webpack://pdf.js/./web/xfa_layer_builder.js","webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/webpack/runtime/async module","webpack://pdf.js/webpack/runtime/define property getters","webpack://pdf.js/webpack/runtime/hasOwnProperty shorthand","webpack://pdf.js/webpack/before-startup","webpack://pdf.js/webpack/startup","webpack://pdf.js/webpack/after-startup"],"sourcesContent":["/**\n * The `FluentType` class is the base of Fluent's type system.\n *\n * Fluent types wrap JavaScript values and store additional configuration for\n * them, which can then be used in the `toString` method together with a proper\n * `Intl` formatter.\n */\nexport class FluentType {\n    /**\n     * Create a `FluentType` instance.\n     *\n     * @param value The JavaScript value to wrap.\n     */\n    constructor(value) {\n        this.value = value;\n    }\n    /**\n     * Unwrap the raw value stored by this `FluentType`.\n     */\n    valueOf() {\n        return this.value;\n    }\n}\n/**\n * A `FluentType` representing no correct value.\n */\nexport class FluentNone extends FluentType {\n    /**\n     * Create an instance of `FluentNone` with an optional fallback value.\n     * @param value The fallback value of this `FluentNone`.\n     */\n    constructor(value = \"???\") {\n        super(value);\n    }\n    /**\n     * Format this `FluentNone` to the fallback string.\n     */\n    toString(scope) {\n        return `{${this.value}}`;\n    }\n}\n/**\n * A `FluentType` representing a number.\n *\n * A `FluentNumber` instance stores the number value of the number it\n * represents. It may also store an option bag of options which will be passed\n * to `Intl.NumerFormat` when the `FluentNumber` is formatted to a string.\n */\nexport class FluentNumber extends FluentType {\n    /**\n     * Create an instance of `FluentNumber` with options to the\n     * `Intl.NumberFormat` constructor.\n     *\n     * @param value The number value of this `FluentNumber`.\n     * @param opts Options which will be passed to `Intl.NumberFormat`.\n     */\n    constructor(value, opts = {}) {\n        super(value);\n        this.opts = opts;\n    }\n    /**\n     * Format this `FluentNumber` to a string.\n     */\n    toString(scope) {\n        try {\n            const nf = scope.memoizeIntlObject(Intl.NumberFormat, this.opts);\n            return nf.format(this.value);\n        }\n        catch (err) {\n            scope.reportError(err);\n            return this.value.toString(10);\n        }\n    }\n}\n/**\n * A `FluentType` representing a date and time.\n *\n * A `FluentDateTime` instance stores the number value of the date it\n * represents, as a numerical timestamp in milliseconds. It may also store an\n * option bag of options which will be passed to `Intl.DateTimeFormat` when the\n * `FluentDateTime` is formatted to a string.\n */\nexport class FluentDateTime extends FluentType {\n    /**\n     * Create an instance of `FluentDateTime` with options to the\n     * `Intl.DateTimeFormat` constructor.\n     *\n     * @param value The number value of this `FluentDateTime`, in milliseconds.\n     * @param opts Options which will be passed to `Intl.DateTimeFormat`.\n     */\n    constructor(value, opts = {}) {\n        super(value);\n        this.opts = opts;\n    }\n    /**\n     * Format this `FluentDateTime` to a string.\n     */\n    toString(scope) {\n        try {\n            const dtf = scope.memoizeIntlObject(Intl.DateTimeFormat, this.opts);\n            return dtf.format(this.value);\n        }\n        catch (err) {\n            scope.reportError(err);\n            return new Date(this.value).toISOString();\n        }\n    }\n}\n","/* global Intl */\n/**\n * @overview\n *\n * The role of the Fluent resolver is to format a `Pattern` to an instance of\n * `FluentValue`. For performance reasons, primitive strings are considered\n * such instances, too.\n *\n * Translations can contain references to other messages or variables,\n * conditional logic in form of select expressions, traits which describe their\n * grammatical features, and can use Fluent builtins which make use of the\n * `Intl` formatters to format numbers and dates into the bundle's languages.\n * See the documentation of the Fluent syntax for more information.\n *\n * In case of errors the resolver will try to salvage as much of the\n * translation as possible. In rare situations where the resolver didn't know\n * how to recover from an error it will return an instance of `FluentNone`.\n *\n * All expressions resolve to an instance of `FluentValue`. The caller should\n * use the `toString` method to convert the instance to a native value.\n *\n * Functions in this file pass around an instance of the `Scope` class, which\n * stores the data required for successful resolution and error recovery.\n */\nimport { FluentType, FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\n/**\n * The maximum number of placeables which can be expanded in a single call to\n * `formatPattern`. The limit protects against the Billion Laughs and Quadratic\n * Blowup attacks. See https://msdn.microsoft.com/en-us/magazine/ee335713.aspx.\n */\nconst MAX_PLACEABLES = 100;\n/** Unicode bidi isolation characters. */\nconst FSI = \"\\u2068\";\nconst PDI = \"\\u2069\";\n/** Helper: match a variant key to the given selector. */\nfunction match(scope, selector, key) {\n    if (key === selector) {\n        // Both are strings.\n        return true;\n    }\n    // XXX Consider comparing options too, e.g. minimumFractionDigits.\n    if (key instanceof FluentNumber &&\n        selector instanceof FluentNumber &&\n        key.value === selector.value) {\n        return true;\n    }\n    if (selector instanceof FluentNumber && typeof key === \"string\") {\n        let category = scope\n            .memoizeIntlObject(Intl.PluralRules, selector.opts)\n            .select(selector.value);\n        if (key === category) {\n            return true;\n        }\n    }\n    return false;\n}\n/** Helper: resolve the default variant from a list of variants. */\nfunction getDefault(scope, variants, star) {\n    if (variants[star]) {\n        return resolvePattern(scope, variants[star].value);\n    }\n    scope.reportError(new RangeError(\"No default\"));\n    return new FluentNone();\n}\n/** Helper: resolve arguments to a call expression. */\nfunction getArguments(scope, args) {\n    const positional = [];\n    const named = Object.create(null);\n    for (const arg of args) {\n        if (arg.type === \"narg\") {\n            named[arg.name] = resolveExpression(scope, arg.value);\n        }\n        else {\n            positional.push(resolveExpression(scope, arg));\n        }\n    }\n    return { positional, named };\n}\n/** Resolve an expression to a Fluent type. */\nfunction resolveExpression(scope, expr) {\n    switch (expr.type) {\n        case \"str\":\n            return expr.value;\n        case \"num\":\n            return new FluentNumber(expr.value, {\n                minimumFractionDigits: expr.precision,\n            });\n        case \"var\":\n            return resolveVariableReference(scope, expr);\n        case \"mesg\":\n            return resolveMessageReference(scope, expr);\n        case \"term\":\n            return resolveTermReference(scope, expr);\n        case \"func\":\n            return resolveFunctionReference(scope, expr);\n        case \"select\":\n            return resolveSelectExpression(scope, expr);\n        default:\n            return new FluentNone();\n    }\n}\n/** Resolve a reference to a variable. */\nfunction resolveVariableReference(scope, { name }) {\n    let arg;\n    if (scope.params) {\n        // We're inside a TermReference. It's OK to reference undefined parameters.\n        if (Object.prototype.hasOwnProperty.call(scope.params, name)) {\n            arg = scope.params[name];\n        }\n        else {\n            return new FluentNone(`$${name}`);\n        }\n    }\n    else if (scope.args &&\n        Object.prototype.hasOwnProperty.call(scope.args, name)) {\n        // We're in the top-level Pattern or inside a MessageReference. Missing\n        // variables references produce ReferenceErrors.\n        arg = scope.args[name];\n    }\n    else {\n        scope.reportError(new ReferenceError(`Unknown variable: $${name}`));\n        return new FluentNone(`$${name}`);\n    }\n    // Return early if the argument already is an instance of FluentType.\n    if (arg instanceof FluentType) {\n        return arg;\n    }\n    // Convert the argument to a Fluent type.\n    switch (typeof arg) {\n        case \"string\":\n            return arg;\n        case \"number\":\n            return new FluentNumber(arg);\n        case \"object\":\n            if (arg instanceof Date) {\n                return new FluentDateTime(arg.getTime());\n            }\n        // eslint-disable-next-line no-fallthrough\n        default:\n            scope.reportError(new TypeError(`Variable type not supported: $${name}, ${typeof arg}`));\n            return new FluentNone(`$${name}`);\n    }\n}\n/** Resolve a reference to another message. */\nfunction resolveMessageReference(scope, { name, attr }) {\n    const message = scope.bundle._messages.get(name);\n    if (!message) {\n        scope.reportError(new ReferenceError(`Unknown message: ${name}`));\n        return new FluentNone(name);\n    }\n    if (attr) {\n        const attribute = message.attributes[attr];\n        if (attribute) {\n            return resolvePattern(scope, attribute);\n        }\n        scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n        return new FluentNone(`${name}.${attr}`);\n    }\n    if (message.value) {\n        return resolvePattern(scope, message.value);\n    }\n    scope.reportError(new ReferenceError(`No value: ${name}`));\n    return new FluentNone(name);\n}\n/** Resolve a call to a Term with key-value arguments. */\nfunction resolveTermReference(scope, { name, attr, args }) {\n    const id = `-${name}`;\n    const term = scope.bundle._terms.get(id);\n    if (!term) {\n        scope.reportError(new ReferenceError(`Unknown term: ${id}`));\n        return new FluentNone(id);\n    }\n    if (attr) {\n        const attribute = term.attributes[attr];\n        if (attribute) {\n            // Every TermReference has its own variables.\n            scope.params = getArguments(scope, args).named;\n            const resolved = resolvePattern(scope, attribute);\n            scope.params = null;\n            return resolved;\n        }\n        scope.reportError(new ReferenceError(`Unknown attribute: ${attr}`));\n        return new FluentNone(`${id}.${attr}`);\n    }\n    scope.params = getArguments(scope, args).named;\n    const resolved = resolvePattern(scope, term.value);\n    scope.params = null;\n    return resolved;\n}\n/** Resolve a call to a Function with positional and key-value arguments. */\nfunction resolveFunctionReference(scope, { name, args }) {\n    // Some functions are built-in. Others may be provided by the runtime via\n    // the `FluentBundle` constructor.\n    let func = scope.bundle._functions[name];\n    if (!func) {\n        scope.reportError(new ReferenceError(`Unknown function: ${name}()`));\n        return new FluentNone(`${name}()`);\n    }\n    if (typeof func !== \"function\") {\n        scope.reportError(new TypeError(`Function ${name}() is not callable`));\n        return new FluentNone(`${name}()`);\n    }\n    try {\n        let resolved = getArguments(scope, args);\n        return func(resolved.positional, resolved.named);\n    }\n    catch (err) {\n        scope.reportError(err);\n        return new FluentNone(`${name}()`);\n    }\n}\n/** Resolve a select expression to the member object. */\nfunction resolveSelectExpression(scope, { selector, variants, star }) {\n    let sel = resolveExpression(scope, selector);\n    if (sel instanceof FluentNone) {\n        return getDefault(scope, variants, star);\n    }\n    // Match the selector against keys of each variant, in order.\n    for (const variant of variants) {\n        const key = resolveExpression(scope, variant.key);\n        if (match(scope, sel, key)) {\n            return resolvePattern(scope, variant.value);\n        }\n    }\n    return getDefault(scope, variants, star);\n}\n/** Resolve a pattern (a complex string with placeables). */\nexport function resolveComplexPattern(scope, ptn) {\n    if (scope.dirty.has(ptn)) {\n        scope.reportError(new RangeError(\"Cyclic reference\"));\n        return new FluentNone();\n    }\n    // Tag the pattern as dirty for the purpose of the current resolution.\n    scope.dirty.add(ptn);\n    const result = [];\n    // Wrap interpolations with Directional Isolate Formatting characters\n    // only when the pattern has more than one element.\n    const useIsolating = scope.bundle._useIsolating && ptn.length > 1;\n    for (const elem of ptn) {\n        if (typeof elem === \"string\") {\n            result.push(scope.bundle._transform(elem));\n            continue;\n        }\n        scope.placeables++;\n        if (scope.placeables > MAX_PLACEABLES) {\n            scope.dirty.delete(ptn);\n            // This is a fatal error which causes the resolver to instantly bail out\n            // on this pattern. The length check protects against excessive memory\n            // usage, and throwing protects against eating up the CPU when long\n            // placeables are deeply nested.\n            throw new RangeError(`Too many placeables expanded: ${scope.placeables}, ` +\n                `max allowed is ${MAX_PLACEABLES}`);\n        }\n        if (useIsolating) {\n            result.push(FSI);\n        }\n        result.push(resolveExpression(scope, elem).toString(scope));\n        if (useIsolating) {\n            result.push(PDI);\n        }\n    }\n    scope.dirty.delete(ptn);\n    return result.join(\"\");\n}\n/**\n * Resolve a simple or a complex Pattern to a FluentString\n * (which is really the string primitive).\n */\nfunction resolvePattern(scope, value) {\n    // Resolve a simple pattern.\n    if (typeof value === \"string\") {\n        return scope.bundle._transform(value);\n    }\n    return resolveComplexPattern(scope, value);\n}\n","export class Scope {\n    constructor(bundle, errors, args) {\n        /**\n         * The Set of patterns already encountered during this resolution.\n         * Used to detect and prevent cyclic resolutions.\n         * @ignore\n         */\n        this.dirty = new WeakSet();\n        /** A dict of parameters passed to a TermReference. */\n        this.params = null;\n        /**\n         * The running count of placeables resolved so far.\n         * Used to detect the Billion Laughs and Quadratic Blowup attacks.\n         * @ignore\n         */\n        this.placeables = 0;\n        this.bundle = bundle;\n        this.errors = errors;\n        this.args = args;\n    }\n    reportError(error) {\n        if (!this.errors || !(error instanceof Error)) {\n            throw error;\n        }\n        this.errors.push(error);\n    }\n    memoizeIntlObject(ctor, opts) {\n        let cache = this.bundle._intls.get(ctor);\n        if (!cache) {\n            cache = {};\n            this.bundle._intls.set(ctor, cache);\n        }\n        let id = JSON.stringify(opts);\n        if (!cache[id]) {\n            cache[id] = new ctor(this.bundle.locales, opts);\n        }\n        return cache[id];\n    }\n}\n","/**\n * @overview\n *\n * The FTL resolver ships with a number of functions built-in.\n *\n * Each function take two arguments:\n *   - args - an array of positional args\n *   - opts - an object of key-value args\n *\n * Arguments to functions are guaranteed to already be instances of\n * `FluentValue`.  Functions must return `FluentValues` as well.\n */\nimport { FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\nfunction values(opts, allowed) {\n    const unwrapped = Object.create(null);\n    for (const [name, opt] of Object.entries(opts)) {\n        if (allowed.includes(name)) {\n            unwrapped[name] = opt.valueOf();\n        }\n    }\n    return unwrapped;\n}\nconst NUMBER_ALLOWED = [\n    \"unitDisplay\",\n    \"currencyDisplay\",\n    \"useGrouping\",\n    \"minimumIntegerDigits\",\n    \"minimumFractionDigits\",\n    \"maximumFractionDigits\",\n    \"minimumSignificantDigits\",\n    \"maximumSignificantDigits\",\n];\n/**\n * The implementation of the `NUMBER()` builtin available to translations.\n *\n * Translations may call the `NUMBER()` builtin in order to specify formatting\n * options of a number. For example:\n *\n *     pi = The value of π is {NUMBER($pi, maximumFractionDigits: 2)}.\n *\n * The implementation expects an array of `FluentValues` representing the\n * positional arguments, and an object of named `FluentValues` representing the\n * named parameters.\n *\n * The following options are recognized:\n *\n *     unitDisplay\n *     currencyDisplay\n *     useGrouping\n *     minimumIntegerDigits\n *     minimumFractionDigits\n *     maximumFractionDigits\n *     minimumSignificantDigits\n *     maximumSignificantDigits\n *\n * Other options are ignored.\n *\n * @param args The positional arguments passed to this `NUMBER()`.\n * @param opts The named argments passed to this `NUMBER()`.\n */\nexport function NUMBER(args, opts) {\n    let arg = args[0];\n    if (arg instanceof FluentNone) {\n        return new FluentNone(`NUMBER(${arg.valueOf()})`);\n    }\n    if (arg instanceof FluentNumber) {\n        return new FluentNumber(arg.valueOf(), {\n            ...arg.opts,\n            ...values(opts, NUMBER_ALLOWED),\n        });\n    }\n    if (arg instanceof FluentDateTime) {\n        return new FluentNumber(arg.valueOf(), {\n            ...values(opts, NUMBER_ALLOWED),\n        });\n    }\n    throw new TypeError(\"Invalid argument to NUMBER\");\n}\nconst DATETIME_ALLOWED = [\n    \"dateStyle\",\n    \"timeStyle\",\n    \"fractionalSecondDigits\",\n    \"dayPeriod\",\n    \"hour12\",\n    \"weekday\",\n    \"era\",\n    \"year\",\n    \"month\",\n    \"day\",\n    \"hour\",\n    \"minute\",\n    \"second\",\n    \"timeZoneName\",\n];\n/**\n * The implementation of the `DATETIME()` builtin available to translations.\n *\n * Translations may call the `DATETIME()` builtin in order to specify\n * formatting options of a number. For example:\n *\n *     now = It's {DATETIME($today, month: \"long\")}.\n *\n * The implementation expects an array of `FluentValues` representing the\n * positional arguments, and an object of named `FluentValues` representing the\n * named parameters.\n *\n * The following options are recognized:\n *\n *     dateStyle\n *     timeStyle\n *     fractionalSecondDigits\n *     dayPeriod\n *     hour12\n *     weekday\n *     era\n *     year\n *     month\n *     day\n *     hour\n *     minute\n *     second\n *     timeZoneName\n *\n * Other options are ignored.\n *\n * @param args The positional arguments passed to this `DATETIME()`.\n * @param opts The named argments passed to this `DATETIME()`.\n */\nexport function DATETIME(args, opts) {\n    let arg = args[0];\n    if (arg instanceof FluentNone) {\n        return new FluentNone(`DATETIME(${arg.valueOf()})`);\n    }\n    if (arg instanceof FluentDateTime) {\n        return new FluentDateTime(arg.valueOf(), {\n            ...arg.opts,\n            ...values(opts, DATETIME_ALLOWED),\n        });\n    }\n    if (arg instanceof FluentNumber) {\n        return new FluentDateTime(arg.valueOf(), {\n            ...values(opts, DATETIME_ALLOWED),\n        });\n    }\n    throw new TypeError(\"Invalid argument to DATETIME\");\n}\n","const cache = new Map();\nexport function getMemoizerForLocale(locales) {\n    const stringLocale = Array.isArray(locales) ? locales.join(\" \") : locales;\n    let memoizer = cache.get(stringLocale);\n    if (memoizer === undefined) {\n        memoizer = new Map();\n        cache.set(stringLocale, memoizer);\n    }\n    return memoizer;\n}\n","import { resolveComplexPattern } from \"./resolver.js\";\nimport { Scope } from \"./scope.js\";\nimport { FluentNone } from \"./types.js\";\nimport { NUMBER, DATETIME } from \"./builtins.js\";\nimport { getMemoizerForLocale } from \"./memoizer.js\";\n/**\n * Message bundles are single-language stores of translation resources. They are\n * responsible for formatting message values and attributes to strings.\n */\nexport class FluentBundle {\n    /**\n     * Create an instance of `FluentBundle`.\n     *\n     * @example\n     * ```js\n     * let bundle = new FluentBundle([\"en-US\", \"en\"]);\n     *\n     * let bundle = new FluentBundle(locales, {useIsolating: false});\n     *\n     * let bundle = new FluentBundle(locales, {\n     *   useIsolating: true,\n     *   functions: {\n     *     NODE_ENV: () => process.env.NODE_ENV\n     *   }\n     * });\n     * ```\n     *\n     * @param locales - Used to instantiate `Intl` formatters used by translations.\n     * @param options - Optional configuration for the bundle.\n     */\n    constructor(locales, { functions, useIsolating = true, transform = (v) => v, } = {}) {\n        /** @ignore */\n        this._terms = new Map();\n        /** @ignore */\n        this._messages = new Map();\n        this.locales = Array.isArray(locales) ? locales : [locales];\n        this._functions = {\n            NUMBER,\n            DATETIME,\n            ...functions,\n        };\n        this._useIsolating = useIsolating;\n        this._transform = transform;\n        this._intls = getMemoizerForLocale(locales);\n    }\n    /**\n     * Check if a message is present in the bundle.\n     *\n     * @param id - The identifier of the message to check.\n     */\n    hasMessage(id) {\n        return this._messages.has(id);\n    }\n    /**\n     * Return a raw unformatted message object from the bundle.\n     *\n     * Raw messages are `{value, attributes}` shapes containing translation units\n     * called `Patterns`. `Patterns` are implementation-specific; they should be\n     * treated as black boxes and formatted with `FluentBundle.formatPattern`.\n     *\n     * @param id - The identifier of the message to check.\n     */\n    getMessage(id) {\n        return this._messages.get(id);\n    }\n    /**\n     * Add a translation resource to the bundle.\n     *\n     * @example\n     * ```js\n     * let res = new FluentResource(\"foo = Foo\");\n     * bundle.addResource(res);\n     * bundle.getMessage(\"foo\");\n     * // → {value: .., attributes: {..}}\n     * ```\n     *\n     * @param res\n     * @param options\n     */\n    addResource(res, { allowOverrides = false, } = {}) {\n        const errors = [];\n        for (let i = 0; i < res.body.length; i++) {\n            let entry = res.body[i];\n            if (entry.id.startsWith(\"-\")) {\n                // Identifiers starting with a dash (-) define terms. Terms are private\n                // and cannot be retrieved from FluentBundle.\n                if (allowOverrides === false && this._terms.has(entry.id)) {\n                    errors.push(new Error(`Attempt to override an existing term: \"${entry.id}\"`));\n                    continue;\n                }\n                this._terms.set(entry.id, entry);\n            }\n            else {\n                if (allowOverrides === false && this._messages.has(entry.id)) {\n                    errors.push(new Error(`Attempt to override an existing message: \"${entry.id}\"`));\n                    continue;\n                }\n                this._messages.set(entry.id, entry);\n            }\n        }\n        return errors;\n    }\n    /**\n     * Format a `Pattern` to a string.\n     *\n     * Format a raw `Pattern` into a string. `args` will be used to resolve\n     * references to variables passed as arguments to the translation.\n     *\n     * In case of errors `formatPattern` will try to salvage as much of the\n     * translation as possible and will still return a string. For performance\n     * reasons, the encountered errors are not returned but instead are appended\n     * to the `errors` array passed as the third argument.\n     *\n     * If `errors` is omitted, the first encountered error will be thrown.\n     *\n     * @example\n     * ```js\n     * let errors = [];\n     * bundle.addResource(\n     *     new FluentResource(\"hello = Hello, {$name}!\"));\n     *\n     * let hello = bundle.getMessage(\"hello\");\n     * if (hello.value) {\n     *     bundle.formatPattern(hello.value, {name: \"Jane\"}, errors);\n     *     // Returns \"Hello, Jane!\" and `errors` is empty.\n     *\n     *     bundle.formatPattern(hello.value, undefined, errors);\n     *     // Returns \"Hello, {$name}!\" and `errors` is now:\n     *     // [<ReferenceError: Unknown variable: name>]\n     * }\n     * ```\n     */\n    formatPattern(pattern, args = null, errors = null) {\n        // Resolve a simple pattern without creating a scope. No error handling is\n        // required; by definition simple patterns don't have placeables.\n        if (typeof pattern === \"string\") {\n            return this._transform(pattern);\n        }\n        // Resolve a complex pattern.\n        let scope = new Scope(this, errors, args);\n        try {\n            let value = resolveComplexPattern(scope, pattern);\n            return value.toString(scope);\n        }\n        catch (err) {\n            if (scope.errors && err instanceof Error) {\n                scope.errors.push(err);\n                return new FluentNone().toString(scope);\n            }\n            throw err;\n        }\n    }\n}\n","// This regex is used to iterate through the beginnings of messages and terms.\n// With the /m flag, the ^ matches at the beginning of every line.\nconst RE_MESSAGE_START = /^(-?[a-zA-Z][\\w-]*) *= */gm;\n// Both Attributes and Variants are parsed in while loops. These regexes are\n// used to break out of them.\nconst RE_ATTRIBUTE_START = /\\.([a-zA-Z][\\w-]*) *= */y;\nconst RE_VARIANT_START = /\\*?\\[/y;\nconst RE_NUMBER_LITERAL = /(-?[0-9]+(?:\\.([0-9]+))?)/y;\nconst RE_IDENTIFIER = /([a-zA-Z][\\w-]*)/y;\nconst RE_REFERENCE = /([$-])?([a-zA-Z][\\w-]*)(?:\\.([a-zA-Z][\\w-]*))?/y;\nconst RE_FUNCTION_NAME = /^[A-Z][A-Z0-9_-]*$/;\n// A \"run\" is a sequence of text or string literal characters which don't\n// require any special handling. For TextElements such special characters are: {\n// (starts a placeable), and line breaks which require additional logic to check\n// if the next line is indented. For StringLiterals they are: \\ (starts an\n// escape sequence), \" (ends the literal), and line breaks which are not allowed\n// in StringLiterals. Note that string runs may be empty; text runs may not.\nconst RE_TEXT_RUN = /([^{}\\n\\r]+)/y;\nconst RE_STRING_RUN = /([^\\\\\"\\n\\r]*)/y;\n// Escape sequences.\nconst RE_STRING_ESCAPE = /\\\\([\\\\\"])/y;\nconst RE_UNICODE_ESCAPE = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{6})/y;\n// Used for trimming TextElements and indents.\nconst RE_LEADING_NEWLINES = /^\\n+/;\nconst RE_TRAILING_SPACES = / +$/;\n// Used in makeIndent to strip spaces from blank lines and normalize CRLF to LF.\nconst RE_BLANK_LINES = / *\\r?\\n/g;\n// Used in makeIndent to measure the indentation.\nconst RE_INDENT = /( *)$/;\n// Common tokens.\nconst TOKEN_BRACE_OPEN = /{\\s*/y;\nconst TOKEN_BRACE_CLOSE = /\\s*}/y;\nconst TOKEN_BRACKET_OPEN = /\\[\\s*/y;\nconst TOKEN_BRACKET_CLOSE = /\\s*] */y;\nconst TOKEN_PAREN_OPEN = /\\s*\\(\\s*/y;\nconst TOKEN_ARROW = /\\s*->\\s*/y;\nconst TOKEN_COLON = /\\s*:\\s*/y;\n// Note the optional comma. As a deviation from the Fluent EBNF, the parser\n// doesn't enforce commas between call arguments.\nconst TOKEN_COMMA = /\\s*,?\\s*/y;\nconst TOKEN_BLANK = /\\s+/y;\n/**\n * Fluent Resource is a structure storing parsed localization entries.\n */\nexport class FluentResource {\n    constructor(source) {\n        this.body = [];\n        RE_MESSAGE_START.lastIndex = 0;\n        let cursor = 0;\n        // Iterate over the beginnings of messages and terms to efficiently skip\n        // comments and recover from errors.\n        while (true) {\n            let next = RE_MESSAGE_START.exec(source);\n            if (next === null) {\n                break;\n            }\n            cursor = RE_MESSAGE_START.lastIndex;\n            try {\n                this.body.push(parseMessage(next[1]));\n            }\n            catch (err) {\n                if (err instanceof SyntaxError) {\n                    // Don't report any Fluent syntax errors. Skip directly to the\n                    // beginning of the next message or term.\n                    continue;\n                }\n                throw err;\n            }\n        }\n        // The parser implementation is inlined below for performance reasons,\n        // as well as for convenience of accessing `source` and `cursor`.\n        // The parser focuses on minimizing the number of false negatives at the\n        // expense of increasing the risk of false positives. In other words, it\n        // aims at parsing valid Fluent messages with a success rate of 100%, but it\n        // may also parse a few invalid messages which the reference parser would\n        // reject. The parser doesn't perform any validation and may produce entries\n        // which wouldn't make sense in the real world. For best results users are\n        // advised to validate translations with the fluent-syntax parser\n        // pre-runtime.\n        // The parser makes an extensive use of sticky regexes which can be anchored\n        // to any offset of the source string without slicing it. Errors are thrown\n        // to bail out of parsing of ill-formed messages.\n        function test(re) {\n            re.lastIndex = cursor;\n            return re.test(source);\n        }\n        // Advance the cursor by the char if it matches. May be used as a predicate\n        // (was the match found?) or, if errorClass is passed, as an assertion.\n        function consumeChar(char, errorClass) {\n            if (source[cursor] === char) {\n                cursor++;\n                return true;\n            }\n            if (errorClass) {\n                throw new errorClass(`Expected ${char}`);\n            }\n            return false;\n        }\n        // Advance the cursor by the token if it matches. May be used as a predicate\n        // (was the match found?) or, if errorClass is passed, as an assertion.\n        function consumeToken(re, errorClass) {\n            if (test(re)) {\n                cursor = re.lastIndex;\n                return true;\n            }\n            if (errorClass) {\n                throw new errorClass(`Expected ${re.toString()}`);\n            }\n            return false;\n        }\n        // Execute a regex, advance the cursor, and return all capture groups.\n        function match(re) {\n            re.lastIndex = cursor;\n            let result = re.exec(source);\n            if (result === null) {\n                throw new SyntaxError(`Expected ${re.toString()}`);\n            }\n            cursor = re.lastIndex;\n            return result;\n        }\n        // Execute a regex, advance the cursor, and return the capture group.\n        function match1(re) {\n            return match(re)[1];\n        }\n        function parseMessage(id) {\n            let value = parsePattern();\n            let attributes = parseAttributes();\n            if (value === null && Object.keys(attributes).length === 0) {\n                throw new SyntaxError(\"Expected message value or attributes\");\n            }\n            return { id, value, attributes };\n        }\n        function parseAttributes() {\n            let attrs = Object.create(null);\n            while (test(RE_ATTRIBUTE_START)) {\n                let name = match1(RE_ATTRIBUTE_START);\n                let value = parsePattern();\n                if (value === null) {\n                    throw new SyntaxError(\"Expected attribute value\");\n                }\n                attrs[name] = value;\n            }\n            return attrs;\n        }\n        function parsePattern() {\n            let first;\n            // First try to parse any simple text on the same line as the id.\n            if (test(RE_TEXT_RUN)) {\n                first = match1(RE_TEXT_RUN);\n            }\n            // If there's a placeable on the first line, parse a complex pattern.\n            if (source[cursor] === \"{\" || source[cursor] === \"}\") {\n                // Re-use the text parsed above, if possible.\n                return parsePatternElements(first ? [first] : [], Infinity);\n            }\n            // RE_TEXT_VALUE stops at newlines. Only continue parsing the pattern if\n            // what comes after the newline is indented.\n            let indent = parseIndent();\n            if (indent) {\n                if (first) {\n                    // If there's text on the first line, the blank block is part of the\n                    // translation content in its entirety.\n                    return parsePatternElements([first, indent], indent.length);\n                }\n                // Otherwise, we're dealing with a block pattern, i.e. a pattern which\n                // starts on a new line. Discrad the leading newlines but keep the\n                // inline indent; it will be used by the dedentation logic.\n                indent.value = trim(indent.value, RE_LEADING_NEWLINES);\n                return parsePatternElements([indent], indent.length);\n            }\n            if (first) {\n                // It was just a simple inline text after all.\n                return trim(first, RE_TRAILING_SPACES);\n            }\n            return null;\n        }\n        // Parse a complex pattern as an array of elements.\n        function parsePatternElements(elements = [], commonIndent) {\n            while (true) {\n                if (test(RE_TEXT_RUN)) {\n                    elements.push(match1(RE_TEXT_RUN));\n                    continue;\n                }\n                if (source[cursor] === \"{\") {\n                    elements.push(parsePlaceable());\n                    continue;\n                }\n                if (source[cursor] === \"}\") {\n                    throw new SyntaxError(\"Unbalanced closing brace\");\n                }\n                let indent = parseIndent();\n                if (indent) {\n                    elements.push(indent);\n                    commonIndent = Math.min(commonIndent, indent.length);\n                    continue;\n                }\n                break;\n            }\n            let lastIndex = elements.length - 1;\n            let lastElement = elements[lastIndex];\n            // Trim the trailing spaces in the last element if it's a TextElement.\n            if (typeof lastElement === \"string\") {\n                elements[lastIndex] = trim(lastElement, RE_TRAILING_SPACES);\n            }\n            let baked = [];\n            for (let element of elements) {\n                if (element instanceof Indent) {\n                    // Dedent indented lines by the maximum common indent.\n                    element = element.value.slice(0, element.value.length - commonIndent);\n                }\n                if (element) {\n                    baked.push(element);\n                }\n            }\n            return baked;\n        }\n        function parsePlaceable() {\n            consumeToken(TOKEN_BRACE_OPEN, SyntaxError);\n            let selector = parseInlineExpression();\n            if (consumeToken(TOKEN_BRACE_CLOSE)) {\n                return selector;\n            }\n            if (consumeToken(TOKEN_ARROW)) {\n                let variants = parseVariants();\n                consumeToken(TOKEN_BRACE_CLOSE, SyntaxError);\n                return {\n                    type: \"select\",\n                    selector,\n                    ...variants,\n                };\n            }\n            throw new SyntaxError(\"Unclosed placeable\");\n        }\n        function parseInlineExpression() {\n            if (source[cursor] === \"{\") {\n                // It's a nested placeable.\n                return parsePlaceable();\n            }\n            if (test(RE_REFERENCE)) {\n                let [, sigil, name, attr = null] = match(RE_REFERENCE);\n                if (sigil === \"$\") {\n                    return { type: \"var\", name };\n                }\n                if (consumeToken(TOKEN_PAREN_OPEN)) {\n                    let args = parseArguments();\n                    if (sigil === \"-\") {\n                        // A parameterized term: -term(...).\n                        return { type: \"term\", name, attr, args };\n                    }\n                    if (RE_FUNCTION_NAME.test(name)) {\n                        return { type: \"func\", name, args };\n                    }\n                    throw new SyntaxError(\"Function names must be all upper-case\");\n                }\n                if (sigil === \"-\") {\n                    // A non-parameterized term: -term.\n                    return {\n                        type: \"term\",\n                        name,\n                        attr,\n                        args: [],\n                    };\n                }\n                return { type: \"mesg\", name, attr };\n            }\n            return parseLiteral();\n        }\n        function parseArguments() {\n            let args = [];\n            while (true) {\n                switch (source[cursor]) {\n                    case \")\": // End of the argument list.\n                        cursor++;\n                        return args;\n                    case undefined: // EOF\n                        throw new SyntaxError(\"Unclosed argument list\");\n                }\n                args.push(parseArgument());\n                // Commas between arguments are treated as whitespace.\n                consumeToken(TOKEN_COMMA);\n            }\n        }\n        function parseArgument() {\n            let expr = parseInlineExpression();\n            if (expr.type !== \"mesg\") {\n                return expr;\n            }\n            if (consumeToken(TOKEN_COLON)) {\n                // The reference is the beginning of a named argument.\n                return {\n                    type: \"narg\",\n                    name: expr.name,\n                    value: parseLiteral(),\n                };\n            }\n            // It's a regular message reference.\n            return expr;\n        }\n        function parseVariants() {\n            let variants = [];\n            let count = 0;\n            let star;\n            while (test(RE_VARIANT_START)) {\n                if (consumeChar(\"*\")) {\n                    star = count;\n                }\n                let key = parseVariantKey();\n                let value = parsePattern();\n                if (value === null) {\n                    throw new SyntaxError(\"Expected variant value\");\n                }\n                variants[count++] = { key, value };\n            }\n            if (count === 0) {\n                return null;\n            }\n            if (star === undefined) {\n                throw new SyntaxError(\"Expected default variant\");\n            }\n            return { variants, star };\n        }\n        function parseVariantKey() {\n            consumeToken(TOKEN_BRACKET_OPEN, SyntaxError);\n            let key;\n            if (test(RE_NUMBER_LITERAL)) {\n                key = parseNumberLiteral();\n            }\n            else {\n                key = {\n                    type: \"str\",\n                    value: match1(RE_IDENTIFIER),\n                };\n            }\n            consumeToken(TOKEN_BRACKET_CLOSE, SyntaxError);\n            return key;\n        }\n        function parseLiteral() {\n            if (test(RE_NUMBER_LITERAL)) {\n                return parseNumberLiteral();\n            }\n            if (source[cursor] === '\"') {\n                return parseStringLiteral();\n            }\n            throw new SyntaxError(\"Invalid expression\");\n        }\n        function parseNumberLiteral() {\n            let [, value, fraction = \"\"] = match(RE_NUMBER_LITERAL);\n            let precision = fraction.length;\n            return {\n                type: \"num\",\n                value: parseFloat(value),\n                precision,\n            };\n        }\n        function parseStringLiteral() {\n            consumeChar('\"', SyntaxError);\n            let value = \"\";\n            while (true) {\n                value += match1(RE_STRING_RUN);\n                if (source[cursor] === \"\\\\\") {\n                    value += parseEscapeSequence();\n                    continue;\n                }\n                if (consumeChar('\"')) {\n                    return { type: \"str\", value };\n                }\n                // We've reached an EOL of EOF.\n                throw new SyntaxError(\"Unclosed string literal\");\n            }\n        }\n        // Unescape known escape sequences.\n        function parseEscapeSequence() {\n            if (test(RE_STRING_ESCAPE)) {\n                return match1(RE_STRING_ESCAPE);\n            }\n            if (test(RE_UNICODE_ESCAPE)) {\n                let [, codepoint4, codepoint6] = match(RE_UNICODE_ESCAPE);\n                let codepoint = parseInt(codepoint4 || codepoint6, 16);\n                return codepoint <= 0xd7ff || 0xe000 <= codepoint\n                    ? // It's a Unicode scalar value.\n                        String.fromCodePoint(codepoint)\n                    : // Lonely surrogates can cause trouble when the parsing result is\n                        // saved using UTF-8. Use U+FFFD REPLACEMENT CHARACTER instead.\n                        \"�\";\n            }\n            throw new SyntaxError(\"Unknown escape sequence\");\n        }\n        // Parse blank space. Return it if it looks like indent before a pattern\n        // line. Skip it othwerwise.\n        function parseIndent() {\n            let start = cursor;\n            consumeToken(TOKEN_BLANK);\n            // Check the first non-blank character after the indent.\n            switch (source[cursor]) {\n                case \".\":\n                case \"[\":\n                case \"*\":\n                case \"}\":\n                case undefined: // EOF\n                    // A special character. End the Pattern.\n                    return false;\n                case \"{\":\n                    // Placeables don't require indentation (in EBNF: block-placeable).\n                    // Continue the Pattern.\n                    return makeIndent(source.slice(start, cursor));\n            }\n            // If the first character on the line is not one of the special characters\n            // listed above, it's a regular text character. Check if there's at least\n            // one space of indent before it.\n            if (source[cursor - 1] === \" \") {\n                // It's an indented text character (in EBNF: indented-char). Continue\n                // the Pattern.\n                return makeIndent(source.slice(start, cursor));\n            }\n            // A not-indented text character is likely the identifier of the next\n            // message. End the Pattern.\n            return false;\n        }\n        // Trim blanks in text according to the given regex.\n        function trim(text, re) {\n            return text.replace(re, \"\");\n        }\n        // Normalize a blank block and extract the indent details.\n        function makeIndent(blank) {\n            let value = blank.replace(RE_BLANK_LINES, \"\\n\");\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            let length = RE_INDENT.exec(blank)[1].length;\n            return new Indent(value, length);\n        }\n    }\n}\nclass Indent {\n    constructor(value, length) {\n        this.value = value;\n        this.length = length;\n    }\n}\n","/**\n * @module fluent\n * @overview\n *\n * `fluent` is a JavaScript implementation of Project Fluent, a localization\n * framework designed to unleash the expressive power of the natural language.\n *\n */\nexport { FluentBundle } from \"./bundle.js\";\nexport { FluentResource } from \"./resource.js\";\nexport { FluentType, FluentNone, FluentNumber, FluentDateTime, } from \"./types.js\";\n","/* eslint no-console: [\"error\", {allow: [\"warn\"]}] */\n/* global console */\n// Match the opening angle bracket (<) in HTML tags, and HTML entities like\n// &amp;, &#0038;, &#x0026;.\nconst reOverlay = /<|&#?\\w+;/;\n/**\n * Elements allowed in translations even if they are not present in the source\n * HTML. They are text-level elements as defined by the HTML5 spec:\n * https://www.w3.org/TR/html5/text-level-semantics.html with the exception of:\n *\n *   - a - because we don't allow href on it anyways,\n *   - ruby, rt, rp - because we don't allow nested elements to be inserted.\n */\nconst TEXT_LEVEL_ELEMENTS = {\n    \"http://www.w3.org/1999/xhtml\": [\n        \"em\",\n        \"strong\",\n        \"small\",\n        \"s\",\n        \"cite\",\n        \"q\",\n        \"dfn\",\n        \"abbr\",\n        \"data\",\n        \"time\",\n        \"code\",\n        \"var\",\n        \"samp\",\n        \"kbd\",\n        \"sub\",\n        \"sup\",\n        \"i\",\n        \"b\",\n        \"u\",\n        \"mark\",\n        \"bdi\",\n        \"bdo\",\n        \"span\",\n        \"br\",\n        \"wbr\",\n    ],\n};\nconst LOCALIZABLE_ATTRIBUTES = {\n    \"http://www.w3.org/1999/xhtml\": {\n        global: [\"title\", \"aria-label\", \"aria-valuetext\"],\n        a: [\"download\"],\n        area: [\"download\", \"alt\"],\n        // value is special-cased in isAttrNameLocalizable\n        input: [\"alt\", \"placeholder\"],\n        menuitem: [\"label\"],\n        menu: [\"label\"],\n        optgroup: [\"label\"],\n        option: [\"label\"],\n        track: [\"label\"],\n        img: [\"alt\"],\n        textarea: [\"placeholder\"],\n        th: [\"abbr\"],\n    },\n    \"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\": {\n        global: [\n            \"accesskey\",\n            \"aria-label\",\n            \"aria-valuetext\",\n            \"label\",\n            \"title\",\n            \"tooltiptext\",\n        ],\n        description: [\"value\"],\n        key: [\"key\", \"keycode\"],\n        label: [\"value\"],\n        textbox: [\"placeholder\", \"value\"],\n    },\n};\n/**\n * Translate an element.\n *\n * Translate the element's text content and attributes. Some HTML markup is\n * allowed in the translation. The element's children with the data-l10n-name\n * attribute will be treated as arguments to the translation. If the\n * translation defines the same children, their attributes and text contents\n * will be used for translating the matching source child.\n *\n * @param   {Element} element\n * @param   {Object} translation\n * @private\n */\nexport default function translateElement(element, translation) {\n    const { value } = translation;\n    if (typeof value === \"string\") {\n        if (element.localName === \"title\" &&\n            element.namespaceURI === \"http://www.w3.org/1999/xhtml\") {\n            // A special case for the HTML title element whose content must be text.\n            element.textContent = value;\n        }\n        else if (!reOverlay.test(value)) {\n            // If the translation doesn't contain any markup skip the overlay logic.\n            element.textContent = value;\n        }\n        else {\n            // Else parse the translation's HTML using an inert template element,\n            // sanitize it and replace the element's content.\n            const templateElement = element.ownerDocument.createElementNS(\"http://www.w3.org/1999/xhtml\", \"template\");\n            templateElement.innerHTML = value;\n            overlayChildNodes(templateElement.content, element);\n        }\n    }\n    // Even if the translation doesn't define any localizable attributes, run\n    // overlayAttributes to remove any localizable attributes set by previous\n    // translations.\n    overlayAttributes(translation, element);\n}\n/**\n * Replace child nodes of an element with child nodes of another element.\n *\n * The contents of the target element will be cleared and fully replaced with\n * sanitized contents of the source element.\n *\n * @param {DocumentFragment} fromFragment - The source of children to overlay.\n * @param {Element} toElement - The target of the overlay.\n * @private\n */\nfunction overlayChildNodes(fromFragment, toElement) {\n    for (const childNode of fromFragment.childNodes) {\n        if (childNode.nodeType === childNode.TEXT_NODE) {\n            // Keep the translated text node.\n            continue;\n        }\n        if (childNode.hasAttribute(\"data-l10n-name\")) {\n            const sanitized = getNodeForNamedElement(toElement, childNode);\n            fromFragment.replaceChild(sanitized, childNode);\n            continue;\n        }\n        if (isElementAllowed(childNode)) {\n            const sanitized = createSanitizedElement(childNode);\n            fromFragment.replaceChild(sanitized, childNode);\n            continue;\n        }\n        console.warn(`An element of forbidden type \"${childNode.localName}\" was found in ` +\n            \"the translation. Only safe text-level elements and elements with \" +\n            \"data-l10n-name are allowed.\");\n        // If all else fails, replace the element with its text content.\n        fromFragment.replaceChild(createTextNodeFromTextContent(childNode), childNode);\n    }\n    toElement.textContent = \"\";\n    toElement.appendChild(fromFragment);\n}\nfunction hasAttribute(attributes, name) {\n    if (!attributes) {\n        return false;\n    }\n    for (let attr of attributes) {\n        if (attr.name === name) {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * Transplant localizable attributes of an element to another element.\n *\n * Any localizable attributes already set on the target element will be\n * cleared.\n *\n * @param   {Element|Object} fromElement - The source of child nodes to overlay.\n * @param   {Element} toElement - The target of the overlay.\n * @private\n */\nfunction overlayAttributes(fromElement, toElement) {\n    const explicitlyAllowed = toElement.hasAttribute(\"data-l10n-attrs\")\n        ? toElement\n            .getAttribute(\"data-l10n-attrs\")\n            .split(\",\")\n            .map(i => i.trim())\n        : null;\n    // Remove existing localizable attributes if they\n    // will not be used in the new translation.\n    for (const attr of Array.from(toElement.attributes)) {\n        if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) &&\n            !hasAttribute(fromElement.attributes, attr.name)) {\n            toElement.removeAttribute(attr.name);\n        }\n    }\n    // fromElement might be a {value, attributes} object as returned by\n    // Localization.messageFromBundle. In which case attributes may be null to\n    // save GC cycles.\n    if (!fromElement.attributes) {\n        return;\n    }\n    // Set localizable attributes.\n    for (const attr of Array.from(fromElement.attributes)) {\n        if (isAttrNameLocalizable(attr.name, toElement, explicitlyAllowed) &&\n            toElement.getAttribute(attr.name) !== attr.value) {\n            toElement.setAttribute(attr.name, attr.value);\n        }\n    }\n}\n/**\n * Sanitize a child element created by the translation.\n *\n * Try to find a corresponding child in sourceElement and use it as the base\n * for the sanitization. This will preserve functional attribtues defined on\n * the child element in the source HTML.\n *\n * @param   {Element} sourceElement - The source for data-l10n-name lookups.\n * @param   {Element} translatedChild - The translated child to be sanitized.\n * @returns {Element}\n * @private\n */\nfunction getNodeForNamedElement(sourceElement, translatedChild) {\n    const childName = translatedChild.getAttribute(\"data-l10n-name\");\n    const sourceChild = sourceElement.querySelector(`[data-l10n-name=\"${childName}\"]`);\n    if (!sourceChild) {\n        console.warn(`An element named \"${childName}\" wasn't found in the source.`);\n        return createTextNodeFromTextContent(translatedChild);\n    }\n    if (sourceChild.localName !== translatedChild.localName) {\n        console.warn(`An element named \"${childName}\" was found in the translation ` +\n            `but its type ${translatedChild.localName} didn't match the ` +\n            `element found in the source (${sourceChild.localName}).`);\n        return createTextNodeFromTextContent(translatedChild);\n    }\n    // Remove it from sourceElement so that the translation cannot use\n    // the same reference name again.\n    sourceElement.removeChild(sourceChild);\n    // We can't currently guarantee that a translation won't remove\n    // sourceChild from the element completely, which could break the app if\n    // it relies on an event handler attached to the sourceChild. Let's make\n    // this limitation explicit for now by breaking the identitiy of the\n    // sourceChild by cloning it. This will destroy all event handlers\n    // attached to sourceChild via addEventListener and via on<name>\n    // properties.\n    const clone = sourceChild.cloneNode(false);\n    return shallowPopulateUsing(translatedChild, clone);\n}\n/**\n * Sanitize an allowed element.\n *\n * Text-level elements allowed in translations may only use safe attributes\n * and will have any nested markup stripped to text content.\n *\n * @param   {Element} element - The element to be sanitized.\n * @returns {Element}\n * @private\n */\nfunction createSanitizedElement(element) {\n    // Start with an empty element of the same type to remove nested children\n    // and non-localizable attributes defined by the translation.\n    const clone = element.ownerDocument.createElement(element.localName);\n    return shallowPopulateUsing(element, clone);\n}\n/**\n * Convert an element to a text node.\n *\n * @param   {Element} element - The element to be sanitized.\n * @returns {Node}\n * @private\n */\nfunction createTextNodeFromTextContent(element) {\n    return element.ownerDocument.createTextNode(element.textContent);\n}\n/**\n * Check if element is allowed in the translation.\n *\n * This method is used by the sanitizer when the translation markup contains\n * an element which is not present in the source code.\n *\n * @param   {Element} element\n * @returns {boolean}\n * @private\n */\nfunction isElementAllowed(element) {\n    const allowed = TEXT_LEVEL_ELEMENTS[element.namespaceURI];\n    return allowed && allowed.includes(element.localName);\n}\n/**\n * Check if attribute is allowed for the given element.\n *\n * This method is used by the sanitizer when the translation markup contains\n * DOM attributes, or when the translation has traits which map to DOM\n * attributes.\n *\n * `explicitlyAllowed` can be passed as a list of attributes explicitly\n * allowed on this element.\n *\n * @param   {string}         name\n * @param   {Element}        element\n * @param   {Array}          explicitlyAllowed\n * @returns {boolean}\n * @private\n */\nfunction isAttrNameLocalizable(name, element, explicitlyAllowed = null) {\n    if (explicitlyAllowed && explicitlyAllowed.includes(name)) {\n        return true;\n    }\n    const allowed = LOCALIZABLE_ATTRIBUTES[element.namespaceURI];\n    if (!allowed) {\n        return false;\n    }\n    const attrName = name.toLowerCase();\n    const elemName = element.localName;\n    // Is it a globally safe attribute?\n    if (allowed.global.includes(attrName)) {\n        return true;\n    }\n    // Are there no allowed attributes for this element?\n    if (!allowed[elemName]) {\n        return false;\n    }\n    // Is it allowed on this element?\n    if (allowed[elemName].includes(attrName)) {\n        return true;\n    }\n    // Special case for value on HTML inputs with type button, reset, submit\n    if (element.namespaceURI === \"http://www.w3.org/1999/xhtml\" &&\n        elemName === \"input\" &&\n        attrName === \"value\") {\n        const type = element.type.toLowerCase();\n        if (type === \"submit\" || type === \"button\" || type === \"reset\") {\n            return true;\n        }\n    }\n    return false;\n}\n/**\n * Helper to set textContent and localizable attributes on an element.\n *\n * @param   {Element} fromElement\n * @param   {Element} toElement\n * @returns {Element}\n * @private\n */\nfunction shallowPopulateUsing(fromElement, toElement) {\n    toElement.textContent = fromElement.textContent;\n    overlayAttributes(fromElement, toElement);\n    return toElement;\n}\n","/*\n * Base CachedIterable class.\n */\nexport default class CachedIterable extends Array {\n    /**\n     * Create a `CachedIterable` instance from an iterable or, if another\n     * instance of `CachedIterable` is passed, return it without any\n     * modifications.\n     *\n     * @param {Iterable} iterable\n     * @returns {CachedIterable}\n     */\n    static from(iterable) {\n        if (iterable instanceof this) {\n            return iterable;\n        }\n\n        return new this(iterable);\n    }\n}\n","import CachedIterable from \"./cached_iterable.mjs\";\n\n/*\n * CachedSyncIterable caches the elements yielded by an iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedSyncIterable extends CachedIterable {\n    /**\n     * Create an `CachedSyncIterable` instance.\n     *\n     * @param {Iterable} iterable\n     * @returns {CachedSyncIterable}\n     */\n    constructor(iterable) {\n        super();\n\n        if (Symbol.iterator in Object(iterable)) {\n            this.iterator = iterable[Symbol.iterator]();\n        } else {\n            throw new TypeError(\"Argument must implement the iteration protocol.\");\n        }\n    }\n\n    [Symbol.iterator]() {\n        const cached = this;\n        let cur = 0;\n\n        return {\n            next() {\n                if (cached.length <= cur) {\n                    cached.push(cached.iterator.next());\n                }\n                return cached[cur++];\n            }\n        };\n    }\n\n    /**\n     * This method allows user to consume the next element from the iterator\n     * into the cache.\n     *\n     * @param {number} count - number of elements to consume\n     */\n    touchNext(count = 1) {\n        let idx = 0;\n        while (idx++ < count) {\n            const last = this[this.length - 1];\n            if (last && last.done) {\n                break;\n            }\n            this.push(this.iterator.next());\n        }\n        // Return the last cached {value, done} object to allow the calling\n        // code to decide if it needs to call touchNext again.\n        return this[this.length - 1];\n    }\n}\n","import CachedIterable from \"./cached_iterable.mjs\";\n\n/*\n * CachedAsyncIterable caches the elements yielded by an async iterable.\n *\n * It can be used to iterate over an iterable many times without depleting the\n * iterable.\n */\nexport default class CachedAsyncIterable extends CachedIterable {\n    /**\n     * Create an `CachedAsyncIterable` instance.\n     *\n     * @param {Iterable} iterable\n     * @returns {CachedAsyncIterable}\n     */\n    constructor(iterable) {\n        super();\n\n        if (Symbol.asyncIterator in Object(iterable)) {\n            this.iterator = iterable[Symbol.asyncIterator]();\n        } else if (Symbol.iterator in Object(iterable)) {\n            this.iterator = iterable[Symbol.iterator]();\n        } else {\n            throw new TypeError(\"Argument must implement the iteration protocol.\");\n        }\n    }\n\n    /**\n     * Asynchronous iterator caching the yielded elements.\n     *\n     * Elements yielded by the original iterable will be cached and available\n     * synchronously. Returns an async generator object implementing the\n     * iterator protocol over the elements of the original (async or sync)\n     * iterable.\n     */\n    [Symbol.asyncIterator]() {\n        const cached = this;\n        let cur = 0;\n\n        return {\n            async next() {\n                if (cached.length <= cur) {\n                    cached.push(cached.iterator.next());\n                }\n                return cached[cur++];\n            }\n        };\n    }\n\n    /**\n     * This method allows user to consume the next element from the iterator\n     * into the cache.\n     *\n     * @param {number} count - number of elements to consume\n     */\n    async touchNext(count = 1) {\n        let idx = 0;\n        while (idx++ < count) {\n            const last = this[this.length - 1];\n            if (last && (await last).done) {\n                break;\n            }\n            this.push(this.iterator.next());\n        }\n        // Return the last cached {value, done} object to allow the calling\n        // code to decide if it needs to call touchNext again.\n        return this[this.length - 1];\n    }\n}\n","export {default as CachedSyncIterable} from \"./cached_sync_iterable.mjs\";\nexport {default as CachedAsyncIterable} from \"./cached_async_iterable.mjs\";\n","/* eslint no-console: [\"error\", { allow: [\"warn\", \"error\"] }] */\n/* global console */\nimport { CachedAsyncIterable } from \"cached-iterable\";\n/**\n * The `Localization` class is a central high-level API for vanilla\n * JavaScript use of Fluent.\n * It combines language negotiation, FluentBundle and I/O to\n * provide a scriptable API to format translations.\n */\nexport default class Localization {\n    /**\n     * @param {Array<String>} resourceIds     - List of resource IDs\n     * @param {Function}      generateBundles - Function that returns a\n     *                                          generator over FluentBundles\n     *\n     * @returns {Localization}\n     */\n    constructor(resourceIds = [], generateBundles) {\n        this.resourceIds = resourceIds;\n        this.generateBundles = generateBundles;\n        this.onChange(true);\n    }\n    addResourceIds(resourceIds, eager = false) {\n        this.resourceIds.push(...resourceIds);\n        this.onChange(eager);\n        return this.resourceIds.length;\n    }\n    removeResourceIds(resourceIds) {\n        this.resourceIds = this.resourceIds.filter(r => !resourceIds.includes(r));\n        this.onChange();\n        return this.resourceIds.length;\n    }\n    /**\n     * Format translations and handle fallback if needed.\n     *\n     * Format translations for `keys` from `FluentBundle` instances on this\n     * DOMLocalization. In case of errors, fetch the next context in the\n     * fallback chain.\n     *\n     * @param   {Array<Object>}         keys    - Translation keys to format.\n     * @param   {Function}              method  - Formatting function.\n     * @returns {Promise<Array<string|Object>>}\n     * @private\n     */\n    async formatWithFallback(keys, method) {\n        const translations = [];\n        let hasAtLeastOneBundle = false;\n        for await (const bundle of this.bundles) {\n            hasAtLeastOneBundle = true;\n            const missingIds = keysFromBundle(method, bundle, keys, translations);\n            if (missingIds.size === 0) {\n                break;\n            }\n            if (typeof console !== \"undefined\") {\n                const locale = bundle.locales[0];\n                const ids = Array.from(missingIds).join(\", \");\n                console.warn(`[fluent] Missing translations in ${locale}: ${ids}`);\n            }\n        }\n        if (!hasAtLeastOneBundle && typeof console !== \"undefined\") {\n            // eslint-disable-next-line max-len\n            console.warn(`[fluent] Request for keys failed because no resource bundles got generated.\n  keys: ${JSON.stringify(keys)}.\n  resourceIds: ${JSON.stringify(this.resourceIds)}.`);\n        }\n        return translations;\n    }\n    /**\n     * Format translations into `{value, attributes}` objects.\n     *\n     * The fallback logic is the same as in `formatValues`\n     * but it returns `{value, attributes}` objects\n     * which are suitable for the translation of DOM elements.\n     *\n     * Returns a Promise resolving to an array of the translation strings.\n     *\n     * @example\n     * ```js\n     * docL10n.formatMessages([\n     *   {id: 'hello', args: { who: 'Mary' }},\n     *   {id: 'welcome'}\n     * ]).then(console.log);\n     *\n     * // [\n     * //   { value: 'Hello, Mary!', attributes: null },\n     * //   {\n     * //     value: 'Welcome!',\n     * //     attributes: [ { name: \"title\", value: 'Hello' } ]\n     * //   }\n     * // ]\n     * ```\n     *\n     * @param   {Array<Object>} keys\n     * @returns {Promise<Array<{value: string, attributes: Object}>>}\n     * @private\n     */\n    formatMessages(keys) {\n        return this.formatWithFallback(keys, messageFromBundle);\n    }\n    /**\n     * Retrieve translations corresponding to the passed keys.\n     *\n     * A generalized version of `DOMLocalization.formatValue`. Keys must\n     * be `{id, args}` objects.\n     *\n     * Returns a Promise resolving to an array of the translation strings.\n     *\n     * @example\n     * ```js\n     * docL10n.formatValues([\n     *   {id: 'hello', args: { who: 'Mary' }},\n     *   {id: 'hello', args: { who: 'John' }},\n     *   {id: 'welcome'}\n     * ]).then(console.log);\n     *\n     * // ['Hello, Mary!', 'Hello, John!', 'Welcome!']\n     * ```\n     *\n     * @param   {Array<Object>} keys\n     * @returns {Promise<Array<string>>}\n     */\n    formatValues(keys) {\n        return this.formatWithFallback(keys, valueFromBundle);\n    }\n    /**\n     * Retrieve the translation corresponding to the `id` identifier.\n     *\n     * If passed, `args` is a simple hash object with a list of variables that\n     * will be interpolated in the value of the translation.\n     *\n     * Returns a Promise resolving to the translation string.\n     *\n     * Use this sparingly for one-off messages which don't need to be\n     * retranslated when the user changes their language preferences, e.g. in\n     * notifications.\n     *\n     * @example\n     * ```js\n     * docL10n.formatValue(\n     *   'hello', { who: 'world' }\n     * ).then(console.log);\n     *\n     * // 'Hello, world!'\n     * ```\n     *\n     * @param   {string}  id     - Identifier of the translation to format\n     * @param   {Object}  [args] - Optional external arguments\n     * @returns {Promise<string>}\n     */\n    async formatValue(id, args) {\n        const [val] = await this.formatValues([{ id, args }]);\n        return val;\n    }\n    handleEvent() {\n        this.onChange();\n    }\n    /**\n     * This method should be called when there's a reason to believe\n     * that language negotiation or available resources changed.\n     */\n    onChange(eager = false) {\n        this.bundles = CachedAsyncIterable.from(this.generateBundles(this.resourceIds));\n        if (eager) {\n            this.bundles.touchNext(2);\n        }\n    }\n}\n/**\n * Format the value of a message into a string or `null`.\n *\n * This function is passed as a method to `keysFromBundle` and resolve\n * a value of a single L10n Entity using provided `FluentBundle`.\n *\n * If the message doesn't have a value, return `null`.\n *\n * @param   {FluentBundle} bundle\n * @param   {Array<Error>} errors\n * @param   {Object} message\n * @param   {Object} args\n * @returns {string|null}\n * @private\n */\nfunction valueFromBundle(bundle, errors, message, args) {\n    if (message.value) {\n        return bundle.formatPattern(message.value, args, errors);\n    }\n    return null;\n}\n/**\n * Format all public values of a message into a {value, attributes} object.\n *\n * This function is passed as a method to `keysFromBundle` and resolve\n * a single L10n Entity using provided `FluentBundle`.\n *\n * The function will return an object with a value and attributes of the\n * entity.\n *\n * @param   {FluentBundle} bundle\n * @param   {Array<Error>} errors\n * @param   {Object} message\n * @param   {Object} args\n * @returns {Object}\n * @private\n */\nfunction messageFromBundle(bundle, errors, message, args) {\n    const formatted = {\n        value: null,\n        attributes: null,\n    };\n    if (message.value) {\n        formatted.value = bundle.formatPattern(message.value, args, errors);\n    }\n    let attrNames = Object.keys(message.attributes);\n    if (attrNames.length > 0) {\n        formatted.attributes = new Array(attrNames.length);\n        for (let [i, name] of attrNames.entries()) {\n            let value = bundle.formatPattern(message.attributes[name], args, errors);\n            formatted.attributes[i] = { name, value };\n        }\n    }\n    return formatted;\n}\n/**\n * This function is an inner function for `Localization.formatWithFallback`.\n *\n * It takes a `FluentBundle`, list of l10n-ids and a method to be used for\n * key resolution (either `valueFromBundle` or `messageFromBundle`) and\n * optionally a value returned from `keysFromBundle` executed against\n * another `FluentBundle`.\n *\n * The idea here is that if the previous `FluentBundle` did not resolve\n * all keys, we're calling this function with the next context to resolve\n * the remaining ones.\n *\n * In the function, we loop over `keys` and check if we have the `prev`\n * passed and if it has an error entry for the position we're in.\n *\n * If it doesn't, it means that we have a good translation for this key and\n * we return it. If it does, we'll try to resolve the key using the passed\n * `FluentBundle`.\n *\n * In the end, we fill the translations array, and return the Set with\n * missing ids.\n *\n * See `Localization.formatWithFallback` for more info on how this is used.\n *\n * @param {Function}       method\n * @param {FluentBundle} bundle\n * @param {Array<string>}  keys\n * @param {{Array<{value: string, attributes: Object}>}} translations\n *\n * @returns {Set<string>}\n * @private\n */\nfunction keysFromBundle(method, bundle, keys, translations) {\n    const messageErrors = [];\n    const missingIds = new Set();\n    keys.forEach(({ id, args }, i) => {\n        if (translations[i] !== undefined) {\n            return;\n        }\n        let message = bundle.getMessage(id);\n        if (message) {\n            messageErrors.length = 0;\n            translations[i] = method(bundle, messageErrors, message, args);\n            if (messageErrors.length > 0 && typeof console !== \"undefined\") {\n                const locale = bundle.locales[0];\n                const errors = messageErrors.join(\", \");\n                // eslint-disable-next-line max-len\n                console.warn(`[fluent][resolver] errors in ${locale}/${id}: ${errors}.`);\n            }\n        }\n        else {\n            missingIds.add(id);\n        }\n    });\n    return missingIds;\n}\n","import translateElement from \"./overlay.js\";\nimport Localization from \"./localization.js\";\nconst L10NID_ATTR_NAME = \"data-l10n-id\";\nconst L10NARGS_ATTR_NAME = \"data-l10n-args\";\nconst L10N_ELEMENT_QUERY = `[${L10NID_ATTR_NAME}]`;\n/**\n * The `DOMLocalization` class is responsible for fetching resources and\n * formatting translations.\n *\n * It implements the fallback strategy in case of errors encountered during the\n * formatting of translations and methods for observing DOM\n * trees with a `MutationObserver`.\n */\nexport default class DOMLocalization extends Localization {\n    /**\n     * @param {Array<String>}    resourceIds     - List of resource IDs\n     * @param {Function}         generateBundles - Function that returns a\n     *                                             generator over FluentBundles\n     * @returns {DOMLocalization}\n     */\n    constructor(resourceIds, generateBundles) {\n        super(resourceIds, generateBundles);\n        // A Set of DOM trees observed by the `MutationObserver`.\n        this.roots = new Set();\n        // requestAnimationFrame handler.\n        this.pendingrAF = null;\n        // list of elements pending for translation.\n        this.pendingElements = new Set();\n        this.windowElement = null;\n        this.mutationObserver = null;\n        this.observerConfig = {\n            attributes: true,\n            characterData: false,\n            childList: true,\n            subtree: true,\n            attributeFilter: [L10NID_ATTR_NAME, L10NARGS_ATTR_NAME],\n        };\n    }\n    onChange(eager = false) {\n        super.onChange(eager);\n        if (this.roots) {\n            this.translateRoots();\n        }\n    }\n    /**\n     * Set the `data-l10n-id` and `data-l10n-args` attributes on DOM elements.\n     * FluentDOM makes use of mutation observers to detect changes\n     * to `data-l10n-*` attributes and translate elements asynchronously.\n     * `setAttributes` is a convenience method which allows to translate\n     * DOM elements declaratively.\n     *\n     * You should always prefer to use `data-l10n-id` on elements (statically in\n     * HTML or dynamically via `setAttributes`) over manually retrieving\n     * translations with `format`.  The use of attributes ensures that the\n     * elements can be retranslated when the user changes their language\n     * preferences.\n     *\n     * ```javascript\n     * localization.setAttributes(\n     *   document.querySelector('#welcome'), 'hello', { who: 'world' }\n     * );\n     * ```\n     *\n     * This will set the following attributes on the `#welcome` element.\n     * The MutationObserver will pick up this change and will localize the element\n     * asynchronously.\n     *\n     * ```html\n     * <p id='welcome'\n     *   data-l10n-id='hello'\n     *   data-l10n-args='{\"who\": \"world\"}'>\n     * </p>\n     * ```\n     *\n     * @param {Element}                element - Element to set attributes on\n     * @param {string}                 id      - l10n-id string\n     * @param {Object<string, string>} args    - KVP list of l10n arguments\n     * @returns {Element}\n     */\n    setAttributes(element, id, args) {\n        element.setAttribute(L10NID_ATTR_NAME, id);\n        if (args) {\n            element.setAttribute(L10NARGS_ATTR_NAME, JSON.stringify(args));\n        }\n        else {\n            element.removeAttribute(L10NARGS_ATTR_NAME);\n        }\n        return element;\n    }\n    /**\n     * Get the `data-l10n-*` attributes from DOM elements.\n     *\n     * ```javascript\n     * localization.getAttributes(\n     *   document.querySelector('#welcome')\n     * );\n     * // -> { id: 'hello', args: { who: 'world' } }\n     * ```\n     *\n     * @param   {Element}  element - HTML element\n     * @returns {{id: string, args: Object}}\n     */\n    getAttributes(element) {\n        return {\n            id: element.getAttribute(L10NID_ATTR_NAME),\n            args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null),\n        };\n    }\n    /**\n     * Add `newRoot` to the list of roots managed by this `DOMLocalization`.\n     *\n     * Additionally, if this `DOMLocalization` has an observer, start observing\n     * `newRoot` in order to translate mutations in it.\n     *\n     * @param {Element}      newRoot - Root to observe.\n     */\n    connectRoot(newRoot) {\n        for (const root of this.roots) {\n            if (root === newRoot ||\n                root.contains(newRoot) ||\n                newRoot.contains(root)) {\n                throw new Error(\"Cannot add a root that overlaps with existing root.\");\n            }\n        }\n        if (this.windowElement) {\n            if (this.windowElement !== newRoot.ownerDocument.defaultView) {\n                throw new Error(`Cannot connect a root:\n          DOMLocalization already has a root from a different window.`);\n            }\n        }\n        else {\n            this.windowElement = newRoot.ownerDocument.defaultView;\n            this.mutationObserver = new this.windowElement.MutationObserver(mutations => this.translateMutations(mutations));\n        }\n        this.roots.add(newRoot);\n        this.mutationObserver.observe(newRoot, this.observerConfig);\n    }\n    /**\n     * Remove `root` from the list of roots managed by this `DOMLocalization`.\n     *\n     * Additionally, if this `DOMLocalization` has an observer, stop observing\n     * `root`.\n     *\n     * Returns `true` if the root was the last one managed by this\n     * `DOMLocalization`.\n     *\n     * @param   {Element} root - Root to disconnect.\n     * @returns {boolean}\n     */\n    disconnectRoot(root) {\n        this.roots.delete(root);\n        // Pause the mutation observer to stop observing `root`.\n        this.pauseObserving();\n        if (this.roots.size === 0) {\n            this.mutationObserver = null;\n            this.windowElement = null;\n            this.pendingrAF = null;\n            this.pendingElements.clear();\n            return true;\n        }\n        // Resume observing all other roots.\n        this.resumeObserving();\n        return false;\n    }\n    /**\n     * Translate all roots associated with this `DOMLocalization`.\n     *\n     * @returns {Promise}\n     */\n    translateRoots() {\n        const roots = Array.from(this.roots);\n        return Promise.all(roots.map(root => this.translateFragment(root)));\n    }\n    /**\n     * Pauses the `MutationObserver`.\n     *\n     * @private\n     */\n    pauseObserving() {\n        if (!this.mutationObserver) {\n            return;\n        }\n        this.translateMutations(this.mutationObserver.takeRecords());\n        this.mutationObserver.disconnect();\n    }\n    /**\n     * Resumes the `MutationObserver`.\n     *\n     * @private\n     */\n    resumeObserving() {\n        if (!this.mutationObserver) {\n            return;\n        }\n        for (const root of this.roots) {\n            this.mutationObserver.observe(root, this.observerConfig);\n        }\n    }\n    /**\n     * Translate mutations detected by the `MutationObserver`.\n     *\n     * @private\n     */\n    translateMutations(mutations) {\n        for (const mutation of mutations) {\n            switch (mutation.type) {\n                case \"attributes\":\n                    if (mutation.target.hasAttribute(\"data-l10n-id\")) {\n                        this.pendingElements.add(mutation.target);\n                    }\n                    break;\n                case \"childList\":\n                    for (const addedNode of mutation.addedNodes) {\n                        if (addedNode.nodeType === addedNode.ELEMENT_NODE) {\n                            if (addedNode.childElementCount) {\n                                for (const element of this.getTranslatables(addedNode)) {\n                                    this.pendingElements.add(element);\n                                }\n                            }\n                            else if (addedNode.hasAttribute(L10NID_ATTR_NAME)) {\n                                this.pendingElements.add(addedNode);\n                            }\n                        }\n                    }\n                    break;\n            }\n        }\n        // This fragment allows us to coalesce all pending translations\n        // into a single requestAnimationFrame.\n        if (this.pendingElements.size > 0) {\n            if (this.pendingrAF === null) {\n                this.pendingrAF = this.windowElement.requestAnimationFrame(() => {\n                    this.translateElements(Array.from(this.pendingElements));\n                    this.pendingElements.clear();\n                    this.pendingrAF = null;\n                });\n            }\n        }\n    }\n    /**\n     * Translate a DOM element or fragment asynchronously using this\n     * `DOMLocalization` object.\n     *\n     * Manually trigger the translation (or re-translation) of a DOM fragment.\n     * Use the `data-l10n-id` and `data-l10n-args` attributes to mark up the DOM\n     * with information about which translations to use.\n     *\n     * Returns a `Promise` that gets resolved once the translation is complete.\n     *\n     * @param   {DOMFragment} frag - Element or DocumentFragment to be translated\n     * @returns {Promise}\n     */\n    translateFragment(frag) {\n        return this.translateElements(this.getTranslatables(frag));\n    }\n    /**\n     * Translate a list of DOM elements asynchronously using this\n     * `DOMLocalization` object.\n     *\n     * Manually trigger the translation (or re-translation) of a list of elements.\n     * Use the `data-l10n-id` and `data-l10n-args` attributes to mark up the DOM\n     * with information about which translations to use.\n     *\n     * Returns a `Promise` that gets resolved once the translation is complete.\n     *\n     * @param   {Array<Element>} elements - List of elements to be translated\n     * @returns {Promise}\n     */\n    async translateElements(elements) {\n        if (!elements.length) {\n            return undefined;\n        }\n        const keys = elements.map(this.getKeysForElement);\n        const translations = await this.formatMessages(keys);\n        return this.applyTranslations(elements, translations);\n    }\n    /**\n     * Applies translations onto elements.\n     *\n     * @param {Array<Element>} elements\n     * @param {Array<Object>}  translations\n     * @private\n     */\n    applyTranslations(elements, translations) {\n        this.pauseObserving();\n        for (let i = 0; i < elements.length; i++) {\n            if (translations[i] !== undefined) {\n                translateElement(elements[i], translations[i]);\n            }\n        }\n        this.resumeObserving();\n    }\n    /**\n     * Collects all translatable child elements of the element.\n     *\n     * @param {Element} element\n     * @returns {Array<Element>}\n     * @private\n     */\n    getTranslatables(element) {\n        const nodes = Array.from(element.querySelectorAll(L10N_ELEMENT_QUERY));\n        if (typeof element.hasAttribute === \"function\" &&\n            element.hasAttribute(L10NID_ATTR_NAME)) {\n            nodes.push(element);\n        }\n        return nodes;\n    }\n    /**\n     * Get the `data-l10n-*` attributes from DOM elements as a two-element\n     * array.\n     *\n     * @param {Element} element\n     * @returns {Object}\n     * @private\n     */\n    getKeysForElement(element) {\n        return {\n            id: element.getAttribute(L10NID_ATTR_NAME),\n            args: JSON.parse(element.getAttribute(L10NARGS_ATTR_NAME) || null),\n        };\n    }\n}\n","export { default as DOMLocalization } from \"./dom_localization.js\";\nexport { default as Localization } from \"./localization.js\";\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 { CMapCompressionType, unreachable } from \"../shared/util.js\";\n\nclass BaseFilterFactory {\n  constructor() {\n    if (this.constructor === BaseFilterFactory) {\n      unreachable(\"Cannot initialize BaseFilterFactory.\");\n    }\n  }\n\n  addFilter(maps) {\n    return \"none\";\n  }\n\n  addHCMFilter(fgColor, bgColor) {\n    return \"none\";\n  }\n\n  addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n    return \"none\";\n  }\n\n  destroy(keepHCM = false) {}\n}\n\nclass BaseCanvasFactory {\n  constructor() {\n    if (this.constructor === BaseCanvasFactory) {\n      unreachable(\"Cannot initialize BaseCanvasFactory.\");\n    }\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    };\n  }\n\n  reset(canvasAndContext, width, height) {\n    if (!canvasAndContext.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    canvasAndContext.canvas.width = width;\n    canvasAndContext.canvas.height = height;\n  }\n\n  destroy(canvasAndContext) {\n    if (!canvasAndContext.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    canvasAndContext.canvas.width = 0;\n    canvasAndContext.canvas.height = 0;\n    canvasAndContext.canvas = null;\n    canvasAndContext.context = null;\n  }\n\n  /**\n   * @ignore\n   */\n  _createCanvas(width, height) {\n    unreachable(\"Abstract method `_createCanvas` called.\");\n  }\n}\n\nclass BaseCMapReaderFactory {\n  constructor({ baseUrl = null, isCompressed = true }) {\n    if (this.constructor === BaseCMapReaderFactory) {\n      unreachable(\"Cannot initialize BaseCMapReaderFactory.\");\n    }\n    this.baseUrl = baseUrl;\n    this.isCompressed = isCompressed;\n  }\n\n  async fetch({ name }) {\n    if (!this.baseUrl) {\n      throw new Error(\n        'The CMap \"baseUrl\" parameter must be specified, ensure that ' +\n          'the \"cMapUrl\" and \"cMapPacked\" API parameters are provided.'\n      );\n    }\n    if (!name) {\n      throw new Error(\"CMap name must be specified.\");\n    }\n    const url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n    const compressionType = this.isCompressed\n      ? CMapCompressionType.BINARY\n      : CMapCompressionType.NONE;\n\n    return this._fetchData(url, compressionType).catch(reason => {\n      throw new Error(\n        `Unable to load ${this.isCompressed ? \"binary \" : \"\"}CMap at: ${url}`\n      );\n    });\n  }\n\n  /**\n   * @ignore\n   */\n  _fetchData(url, compressionType) {\n    unreachable(\"Abstract method `_fetchData` called.\");\n  }\n}\n\nclass BaseStandardFontDataFactory {\n  constructor({ baseUrl = null }) {\n    if (this.constructor === BaseStandardFontDataFactory) {\n      unreachable(\"Cannot initialize BaseStandardFontDataFactory.\");\n    }\n    this.baseUrl = baseUrl;\n  }\n\n  async fetch({ filename }) {\n    if (!this.baseUrl) {\n      throw new Error(\n        'The standard font \"baseUrl\" parameter must be specified, ensure that ' +\n          'the \"standardFontDataUrl\" API parameter is provided.'\n      );\n    }\n    if (!filename) {\n      throw new Error(\"Font filename must be specified.\");\n    }\n    const url = `${this.baseUrl}${filename}`;\n\n    return this._fetchData(url).catch(reason => {\n      throw new Error(`Unable to load font data at: ${url}`);\n    });\n  }\n\n  /**\n   * @ignore\n   */\n  _fetchData(url) {\n    unreachable(\"Abstract method `_fetchData` called.\");\n  }\n}\n\nclass BaseSVGFactory {\n  constructor() {\n    if (this.constructor === BaseSVGFactory) {\n      unreachable(\"Cannot initialize BaseSVGFactory.\");\n    }\n  }\n\n  create(width, height, skipDimensions = false) {\n    if (width <= 0 || height <= 0) {\n      throw new Error(\"Invalid SVG dimensions\");\n    }\n    const svg = this._createSVG(\"svg:svg\");\n    svg.setAttribute(\"version\", \"1.1\");\n\n    if (!skipDimensions) {\n      svg.setAttribute(\"width\", `${width}px`);\n      svg.setAttribute(\"height\", `${height}px`);\n    }\n\n    svg.setAttribute(\"preserveAspectRatio\", \"none\");\n    svg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n\n    return svg;\n  }\n\n  createElement(type) {\n    if (typeof type !== \"string\") {\n      throw new Error(\"Invalid SVG element type\");\n    }\n    return this._createSVG(type);\n  }\n\n  /**\n   * @ignore\n   */\n  _createSVG(type) {\n    unreachable(\"Abstract method `_createSVG` called.\");\n  }\n}\n\nexport {\n  BaseCanvasFactory,\n  BaseCMapReaderFactory,\n  BaseFilterFactory,\n  BaseStandardFontDataFactory,\n  BaseSVGFactory,\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 {\n  BaseCanvasFactory,\n  BaseCMapReaderFactory,\n  BaseFilterFactory,\n  BaseStandardFontDataFactory,\n  BaseSVGFactory,\n} from \"./base_factory.js\";\nimport {\n  BaseException,\n  FeatureTest,\n  shadow,\n  stringToBytes,\n  Util,\n  warn,\n} from \"../shared/util.js\";\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\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\n/**\n * FilterFactory aims to create some SVG filters we can use when drawing an\n * image (or whatever) on a canvas.\n * Filters aren't applied with ctx.putImageData because it just overwrites the\n * underlying pixels.\n * With these filters, it's possible for example to apply some transfer maps on\n * an image without the need to apply them on the pixel arrays: the renderer\n * does the magic for us.\n */\nclass DOMFilterFactory extends BaseFilterFactory {\n  #_cache;\n\n  #_defs;\n\n  #docId;\n\n  #document;\n\n  #_hcmCache;\n\n  #id = 0;\n\n  constructor({ docId, ownerDocument = globalThis.document } = {}) {\n    super();\n    this.#docId = docId;\n    this.#document = ownerDocument;\n  }\n\n  get #cache() {\n    return (this.#_cache ||= new Map());\n  }\n\n  get #hcmCache() {\n    return (this.#_hcmCache ||= new Map());\n  }\n\n  get #defs() {\n    if (!this.#_defs) {\n      const div = this.#document.createElement(\"div\");\n      const { style } = div;\n      style.visibility = \"hidden\";\n      style.contain = \"strict\";\n      style.width = style.height = 0;\n      style.position = \"absolute\";\n      style.top = style.left = 0;\n      style.zIndex = -1;\n\n      const svg = this.#document.createElementNS(SVG_NS, \"svg\");\n      svg.setAttribute(\"width\", 0);\n      svg.setAttribute(\"height\", 0);\n      this.#_defs = this.#document.createElementNS(SVG_NS, \"defs\");\n      div.append(svg);\n      svg.append(this.#_defs);\n      this.#document.body.append(div);\n    }\n    return this.#_defs;\n  }\n\n  addFilter(maps) {\n    if (!maps) {\n      return \"none\";\n    }\n\n    // When a page is zoomed the page is re-drawn but the maps are likely\n    // the same.\n    let value = this.#cache.get(maps);\n    if (value) {\n      return value;\n    }\n\n    let tableR, tableG, tableB, key;\n    if (maps.length === 1) {\n      const mapR = maps[0];\n      const buffer = new Array(256);\n      for (let i = 0; i < 256; i++) {\n        buffer[i] = mapR[i] / 255;\n      }\n      key = tableR = tableG = tableB = buffer.join(\",\");\n    } else {\n      const [mapR, mapG, mapB] = maps;\n      const bufferR = new Array(256);\n      const bufferG = new Array(256);\n      const bufferB = new Array(256);\n      for (let i = 0; i < 256; i++) {\n        bufferR[i] = mapR[i] / 255;\n        bufferG[i] = mapG[i] / 255;\n        bufferB[i] = mapB[i] / 255;\n      }\n      tableR = bufferR.join(\",\");\n      tableG = bufferG.join(\",\");\n      tableB = bufferB.join(\",\");\n      key = `${tableR}${tableG}${tableB}`;\n    }\n\n    value = this.#cache.get(key);\n    if (value) {\n      this.#cache.set(maps, value);\n      return value;\n    }\n\n    // We create a SVG filter: feComponentTransferElement\n    //  https://www.w3.org/TR/SVG11/filters.html#feComponentTransferElement\n\n    const id = `g_${this.#docId}_transfer_map_${this.#id++}`;\n    const url = `url(#${id})`;\n    this.#cache.set(maps, url);\n    this.#cache.set(key, url);\n\n    const filter = this.#createFilter(id);\n    this.#addTransferMapConversion(tableR, tableG, tableB, filter);\n\n    return url;\n  }\n\n  addHCMFilter(fgColor, bgColor) {\n    const key = `${fgColor}-${bgColor}`;\n    const filterName = \"base\";\n    let info = this.#hcmCache.get(filterName);\n    if (info?.key === key) {\n      return info.url;\n    }\n\n    if (info) {\n      info.filter?.remove();\n      info.key = key;\n      info.url = \"none\";\n      info.filter = null;\n    } else {\n      info = {\n        key,\n        url: \"none\",\n        filter: null,\n      };\n      this.#hcmCache.set(filterName, info);\n    }\n\n    if (!fgColor || !bgColor) {\n      return info.url;\n    }\n\n    const fgRGB = this.#getRGB(fgColor);\n    fgColor = Util.makeHexColor(...fgRGB);\n    const bgRGB = this.#getRGB(bgColor);\n    bgColor = Util.makeHexColor(...bgRGB);\n    this.#defs.style.color = \"\";\n\n    if (\n      (fgColor === \"#000000\" && bgColor === \"#ffffff\") ||\n      fgColor === bgColor\n    ) {\n      return info.url;\n    }\n\n    // https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_Colors_and_Luminance\n    //\n    // Relative luminance:\n    // https://www.w3.org/TR/WCAG20/#relativeluminancedef\n    //\n    // We compute the rounded luminance of the default background color.\n    // Then for every color in the pdf, if its rounded luminance is the\n    // same as the background one then it's replaced by the new\n    // background color else by the foreground one.\n    const map = new Array(256);\n    for (let i = 0; i <= 255; i++) {\n      const x = i / 255;\n      map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4;\n    }\n    const table = map.join(\",\");\n\n    const id = `g_${this.#docId}_hcm_filter`;\n    const filter = (info.filter = this.#createFilter(id));\n    this.#addTransferMapConversion(table, table, table, filter);\n    this.#addGrayConversion(filter);\n\n    const getSteps = (c, n) => {\n      const start = fgRGB[c] / 255;\n      const end = bgRGB[c] / 255;\n      const arr = new Array(n + 1);\n      for (let i = 0; i <= n; i++) {\n        arr[i] = start + (i / n) * (end - start);\n      }\n      return arr.join(\",\");\n    };\n    this.#addTransferMapConversion(\n      getSteps(0, 5),\n      getSteps(1, 5),\n      getSteps(2, 5),\n      filter\n    );\n\n    info.url = `url(#${id})`;\n    return info.url;\n  }\n\n  addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) {\n    const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`;\n    let info = this.#hcmCache.get(filterName);\n    if (info?.key === key) {\n      return info.url;\n    }\n\n    if (info) {\n      info.filter?.remove();\n      info.key = key;\n      info.url = \"none\";\n      info.filter = null;\n    } else {\n      info = {\n        key,\n        url: \"none\",\n        filter: null,\n      };\n      this.#hcmCache.set(filterName, info);\n    }\n\n    if (!fgColor || !bgColor) {\n      return info.url;\n    }\n\n    const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this));\n    let fgGray = Math.round(\n      0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]\n    );\n    let bgGray = Math.round(\n      0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]\n    );\n    let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(\n      this.#getRGB.bind(this)\n    );\n    if (bgGray < fgGray) {\n      [fgGray, bgGray, newFgRGB, newBgRGB] = [\n        bgGray,\n        fgGray,\n        newBgRGB,\n        newFgRGB,\n      ];\n    }\n    this.#defs.style.color = \"\";\n\n    // Now we can create the filters to highlight some canvas parts.\n    // The colors in the pdf will almost be Canvas and CanvasText, hence we\n    // want to filter them to finally get Highlight and HighlightText.\n    // Since we're in HCM the background color and the foreground color should\n    // be really different when converted to grayscale (if they're not then it\n    // means that we've a poor contrast). Once the canvas colors are converted\n    // to grayscale we can easily map them on their new colors.\n    // The grayscale step is important because if we've something like:\n    //   fgColor = #FF....\n    //   bgColor = #FF....\n    //   then we are enable to map the red component on the new red components\n    //   which can be different.\n\n    const getSteps = (fg, bg, n) => {\n      const arr = new Array(256);\n      const step = (bgGray - fgGray) / n;\n      const newStart = fg / 255;\n      const newStep = (bg - fg) / (255 * n);\n      let prev = 0;\n      for (let i = 0; i <= n; i++) {\n        const k = Math.round(fgGray + i * step);\n        const value = newStart + i * newStep;\n        for (let j = prev; j <= k; j++) {\n          arr[j] = value;\n        }\n        prev = k + 1;\n      }\n      for (let i = prev; i < 256; i++) {\n        arr[i] = arr[prev - 1];\n      }\n      return arr.join(\",\");\n    };\n\n    const id = `g_${this.#docId}_hcm_${filterName}_filter`;\n    const filter = (info.filter = this.#createFilter(id));\n\n    this.#addGrayConversion(filter);\n    this.#addTransferMapConversion(\n      getSteps(newFgRGB[0], newBgRGB[0], 5),\n      getSteps(newFgRGB[1], newBgRGB[1], 5),\n      getSteps(newFgRGB[2], newBgRGB[2], 5),\n      filter\n    );\n\n    info.url = `url(#${id})`;\n    return info.url;\n  }\n\n  destroy(keepHCM = false) {\n    if (keepHCM && this.#hcmCache.size !== 0) {\n      return;\n    }\n    if (this.#_defs) {\n      this.#_defs.parentNode.parentNode.remove();\n      this.#_defs = null;\n    }\n    if (this.#_cache) {\n      this.#_cache.clear();\n      this.#_cache = null;\n    }\n    this.#id = 0;\n  }\n\n  #addGrayConversion(filter) {\n    const feColorMatrix = this.#document.createElementNS(\n      SVG_NS,\n      \"feColorMatrix\"\n    );\n    feColorMatrix.setAttribute(\"type\", \"matrix\");\n    feColorMatrix.setAttribute(\n      \"values\",\n      \"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\"\n    );\n    filter.append(feColorMatrix);\n  }\n\n  #createFilter(id) {\n    const filter = this.#document.createElementNS(SVG_NS, \"filter\");\n    filter.setAttribute(\"color-interpolation-filters\", \"sRGB\");\n    filter.setAttribute(\"id\", id);\n    this.#defs.append(filter);\n\n    return filter;\n  }\n\n  #appendFeFunc(feComponentTransfer, func, table) {\n    const feFunc = this.#document.createElementNS(SVG_NS, func);\n    feFunc.setAttribute(\"type\", \"discrete\");\n    feFunc.setAttribute(\"tableValues\", table);\n    feComponentTransfer.append(feFunc);\n  }\n\n  #addTransferMapConversion(rTable, gTable, bTable, filter) {\n    const feComponentTransfer = this.#document.createElementNS(\n      SVG_NS,\n      \"feComponentTransfer\"\n    );\n    filter.append(feComponentTransfer);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncR\", rTable);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncG\", gTable);\n    this.#appendFeFunc(feComponentTransfer, \"feFuncB\", bTable);\n  }\n\n  #getRGB(color) {\n    this.#defs.style.color = color;\n    return getRGB(getComputedStyle(this.#defs).getPropertyValue(\"color\"));\n  }\n}\n\nclass DOMCanvasFactory extends BaseCanvasFactory {\n  constructor({ ownerDocument = globalThis.document } = {}) {\n    super();\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\nasync function fetchData(url, type = \"text\") {\n  if (\n    (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n    isValidFetchUrl(url, document.baseURI)\n  ) {\n    const response = await fetch(url);\n    if (!response.ok) {\n      throw new Error(response.statusText);\n    }\n    switch (type) {\n      case \"arraybuffer\":\n        return response.arrayBuffer();\n      case \"blob\":\n        return response.blob();\n      case \"json\":\n        return response.json();\n    }\n    return response.text();\n  }\n\n  // The Fetch API is not supported.\n  return new Promise((resolve, reject) => {\n    const request = new XMLHttpRequest();\n    request.open(\"GET\", url, /* async = */ true);\n    request.responseType = type;\n\n    request.onreadystatechange = () => {\n      if (request.readyState !== XMLHttpRequest.DONE) {\n        return;\n      }\n      if (request.status === 200 || request.status === 0) {\n        switch (type) {\n          case \"arraybuffer\":\n          case \"blob\":\n          case \"json\":\n            resolve(request.response);\n            return;\n        }\n        resolve(request.responseText);\n        return;\n      }\n      reject(new Error(request.statusText));\n    };\n\n    request.send(null);\n  });\n}\n\nclass DOMCMapReaderFactory extends BaseCMapReaderFactory {\n  /**\n   * @ignore\n   */\n  _fetchData(url, compressionType) {\n    return fetchData(\n      url,\n      /* type = */ this.isCompressed ? \"arraybuffer\" : \"text\"\n    ).then(data => ({\n      cMapData:\n        data instanceof ArrayBuffer\n          ? new Uint8Array(data)\n          : stringToBytes(data),\n      compressionType,\n    }));\n  }\n}\n\nclass DOMStandardFontDataFactory extends BaseStandardFontDataFactory {\n  /**\n   * @ignore\n   */\n  _fetchData(url) {\n    return fetchData(url, /* type = */ \"arraybuffer\").then(\n      data => new Uint8Array(data)\n    );\n  }\n}\n\nclass DOMSVGFactory extends BaseSVGFactory {\n  /**\n   * @ignore\n   */\n  _createSVG(type) {\n    return document.createElementNS(SVG_NS, type);\n  }\n}\n\n/**\n * @typedef {Object} PageViewportParameters\n * @property {Array<number>} viewBox - The xMin, yMin, xMax and\n *   yMax coordinates.\n * @property {number} scale - The scale of the viewport.\n * @property {number} rotation - The rotation, in degrees, of the viewport.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset. The\n *   default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset. The\n *   default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be flipped.\n *   The default value is `false`.\n */\n\n/**\n * @typedef {Object} PageViewportCloneParameters\n * @property {number} [scale] - The scale, overriding the one in the cloned\n *   viewport. The default value is `this.scale`.\n * @property {number} [rotation] - The rotation, in degrees, overriding the one\n *   in the cloned viewport. The default value is `this.rotation`.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n *   The default value is `this.offsetX`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n *   The default value is `this.offsetY`.\n * @property {boolean} [dontFlip] - If true, the x-axis will not be flipped.\n *   The default value is `false`.\n */\n\n/**\n * PDF page viewport created based on scale, rotation and offset.\n */\nclass PageViewport {\n  /**\n   * @param {PageViewportParameters}\n   */\n  constructor({\n    viewBox,\n    scale,\n    rotation,\n    offsetX = 0,\n    offsetY = 0,\n    dontFlip = false,\n  }) {\n    this.viewBox = viewBox;\n    this.scale = scale;\n    this.rotation = rotation;\n    this.offsetX = offsetX;\n    this.offsetY = offsetY;\n\n    // creating transform to convert pdf coordinate system to the normal\n    // canvas like coordinates taking in account scale and rotation\n    const centerX = (viewBox[2] + viewBox[0]) / 2;\n    const centerY = (viewBox[3] + viewBox[1]) / 2;\n    let rotateA, rotateB, rotateC, rotateD;\n    // Normalize the rotation, by clamping it to the [0, 360) range.\n    rotation %= 360;\n    if (rotation < 0) {\n      rotation += 360;\n    }\n    switch (rotation) {\n      case 180:\n        rotateA = -1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = 1;\n        break;\n      case 90:\n        rotateA = 0;\n        rotateB = 1;\n        rotateC = 1;\n        rotateD = 0;\n        break;\n      case 270:\n        rotateA = 0;\n        rotateB = -1;\n        rotateC = -1;\n        rotateD = 0;\n        break;\n      case 0:\n        rotateA = 1;\n        rotateB = 0;\n        rotateC = 0;\n        rotateD = -1;\n        break;\n      default:\n        throw new Error(\n          \"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\"\n        );\n    }\n\n    if (dontFlip) {\n      rotateC = -rotateC;\n      rotateD = -rotateD;\n    }\n\n    let offsetCanvasX, offsetCanvasY;\n    let width, height;\n    if (rotateA === 0) {\n      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n      width = (viewBox[3] - viewBox[1]) * scale;\n      height = (viewBox[2] - viewBox[0]) * scale;\n    } else {\n      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n      width = (viewBox[2] - viewBox[0]) * scale;\n      height = (viewBox[3] - viewBox[1]) * scale;\n    }\n    // creating transform for the following operations:\n    // translate(-centerX, -centerY), rotate and flip vertically,\n    // scale, and translate(offsetCanvasX, offsetCanvasY)\n    this.transform = [\n      rotateA * scale,\n      rotateB * scale,\n      rotateC * scale,\n      rotateD * scale,\n      offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\n      offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY,\n    ];\n\n    this.width = width;\n    this.height = height;\n  }\n\n  /**\n   * The original, un-scaled, viewport dimensions.\n   * @type {Object}\n   */\n  get rawDims() {\n    const { viewBox } = this;\n    return shadow(this, \"rawDims\", {\n      pageWidth: viewBox[2] - viewBox[0],\n      pageHeight: viewBox[3] - viewBox[1],\n      pageX: viewBox[0],\n      pageY: viewBox[1],\n    });\n  }\n\n  /**\n   * Clones viewport, with optional additional properties.\n   * @param {PageViewportCloneParameters} [params]\n   * @returns {PageViewport} Cloned viewport.\n   */\n  clone({\n    scale = this.scale,\n    rotation = this.rotation,\n    offsetX = this.offsetX,\n    offsetY = this.offsetY,\n    dontFlip = false,\n  } = {}) {\n    return new PageViewport({\n      viewBox: this.viewBox.slice(),\n      scale,\n      rotation,\n      offsetX,\n      offsetY,\n      dontFlip,\n    });\n  }\n\n  /**\n   * Converts PDF point to the viewport coordinates. For examples, useful for\n   * converting PDF location into canvas pixel coordinates.\n   * @param {number} x - The x-coordinate.\n   * @param {number} y - The y-coordinate.\n   * @returns {Array} Array containing `x`- and `y`-coordinates of the\n   *   point in the viewport coordinate space.\n   * @see {@link convertToPdfPoint}\n   * @see {@link convertToViewportRectangle}\n   */\n  convertToViewportPoint(x, y) {\n    return Util.applyTransform([x, y], this.transform);\n  }\n\n  /**\n   * Converts PDF rectangle to the viewport coordinates.\n   * @param {Array} rect - The xMin, yMin, xMax and yMax coordinates.\n   * @returns {Array} Array containing corresponding coordinates of the\n   *   rectangle in the viewport coordinate space.\n   * @see {@link convertToViewportPoint}\n   */\n  convertToViewportRectangle(rect) {\n    const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform);\n    const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform);\n    return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n  }\n\n  /**\n   * Converts viewport coordinates to the PDF location. For examples, useful\n   * for converting canvas pixel location into PDF one.\n   * @param {number} x - The x-coordinate.\n   * @param {number} y - The y-coordinate.\n   * @returns {Array} Array containing `x`- and `y`-coordinates of the\n   *   point in the PDF coordinate space.\n   * @see {@link convertToViewportPoint}\n   */\n  convertToPdfPoint(x, y) {\n    return Util.applyInverseTransform([x, y], this.transform);\n  }\n}\n\nclass RenderingCancelledException extends BaseException {\n  constructor(msg, extraDelay = 0) {\n    super(msg, \"RenderingCancelledException\");\n    this.extraDelay = extraDelay;\n  }\n}\n\nfunction isDataScheme(url) {\n  const ii = url.length;\n  let i = 0;\n  while (i < ii && url[i].trim() === \"\") {\n    i++;\n  }\n  return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\n\nfunction isPdfFile(filename) {\n  return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\n\n/**\n * Gets the filename from a given URL.\n * @param {string} url\n * @param {boolean} [onlyStripPath]\n * @returns {string}\n */\nfunction getFilenameFromUrl(url, onlyStripPath = false) {\n  if (!onlyStripPath) {\n    [url] = url.split(/[#?]/, 1);\n  }\n  return url.substring(url.lastIndexOf(\"/\") + 1);\n}\n\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * @param {string} url - The original PDF location.\n * @param {string} defaultFilename - The value returned if the filename is\n *   unknown, or the protocol is unsupported.\n * @returns {string} Guessed PDF filename.\n */\nfunction getPdfFilenameFromUrl(url, defaultFilename = \"document.pdf\") {\n  if (typeof url !== \"string\") {\n    return defaultFilename;\n  }\n  if (isDataScheme(url)) {\n    warn('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n    return defaultFilename;\n  }\n  const reURI = /^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n  //              SCHEME        HOST        1.PATH  2.QUERY   3.REF\n  // Pattern to get last matching NAME.pdf\n  const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n  const splitURI = reURI.exec(url);\n  let suggestedFilename =\n    reFilename.exec(splitURI[1]) ||\n    reFilename.exec(splitURI[2]) ||\n    reFilename.exec(splitURI[3]);\n  if (suggestedFilename) {\n    suggestedFilename = suggestedFilename[0];\n    if (suggestedFilename.includes(\"%\")) {\n      // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf\n      try {\n        suggestedFilename = reFilename.exec(\n          decodeURIComponent(suggestedFilename)\n        )[0];\n      } catch {\n        // Possible (extremely rare) errors:\n        // URIError \"Malformed URI\", e.g. for \"%AA.pdf\"\n        // TypeError \"null has no properties\", e.g. for \"%2F.pdf\"\n      }\n    }\n  }\n  return suggestedFilename || defaultFilename;\n}\n\nclass StatTimer {\n  started = Object.create(null);\n\n  times = [];\n\n  time(name) {\n    if (name in this.started) {\n      warn(`Timer is already running for ${name}`);\n    }\n    this.started[name] = Date.now();\n  }\n\n  timeEnd(name) {\n    if (!(name in this.started)) {\n      warn(`Timer has not been started for ${name}`);\n    }\n    this.times.push({\n      name,\n      start: this.started[name],\n      end: Date.now(),\n    });\n    // Remove timer from started so it can be called again.\n    delete this.started[name];\n  }\n\n  toString() {\n    // Find the longest name for padding purposes.\n    const outBuf = [];\n    let longest = 0;\n    for (const { name } of this.times) {\n      longest = Math.max(name.length, longest);\n    }\n    for (const { name, start, end } of this.times) {\n      outBuf.push(`${name.padEnd(longest)} ${end - start}ms\\n`);\n    }\n    return outBuf.join(\"\");\n  }\n}\n\nfunction isValidFetchUrl(url, baseUrl) {\n  if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n    throw new Error(\"Not implemented: isValidFetchUrl\");\n  }\n  try {\n    const { protocol } = baseUrl ? new URL(url, baseUrl) : new URL(url);\n    // The Fetch API only supports the http/https protocols, and not file/ftp.\n    return protocol === \"http:\" || protocol === \"https:\";\n  } catch {\n    return false; // `new URL()` will throw on incorrect data.\n  }\n}\n\n/**\n * Event handler to suppress context menu.\n */\nfunction noContextMenu(e) {\n  e.preventDefault();\n}\n\n// Deprecated API function -- display regardless of the `verbosity` setting.\nfunction deprecated(details) {\n  console.log(\"Deprecated API usage: \" + details);\n}\n\nlet pdfDateStringRegex;\n\nclass PDFDateString {\n  /**\n   * Convert a PDF date string to a JavaScript `Date` object.\n   *\n   * The PDF date string format is described in section 7.9.4 of the official\n   * PDF 32000-1:2008 specification. However, in the PDF 1.7 reference (sixth\n   * edition) Adobe describes the same format including a trailing apostrophe.\n   * This syntax in incorrect, but Adobe Acrobat creates PDF files that contain\n   * them. We ignore all apostrophes as they are not necessary for date parsing.\n   *\n   * Moreover, Adobe Acrobat doesn't handle changing the date to universal time\n   * and doesn't use the user's time zone (effectively ignoring the HH' and mm'\n   * parts of the date string).\n   *\n   * @param {string} input\n   * @returns {Date|null}\n   */\n  static toDateObject(input) {\n    if (!input || typeof input !== \"string\") {\n      return null;\n    }\n\n    // Lazily initialize the regular expression.\n    pdfDateStringRegex ||= new RegExp(\n      \"^D:\" + // Prefix (required)\n        \"(\\\\d{4})\" + // Year (required)\n        \"(\\\\d{2})?\" + // Month (optional)\n        \"(\\\\d{2})?\" + // Day (optional)\n        \"(\\\\d{2})?\" + // Hour (optional)\n        \"(\\\\d{2})?\" + // Minute (optional)\n        \"(\\\\d{2})?\" + // Second (optional)\n        \"([Z|+|-])?\" + // Universal time relation (optional)\n        \"(\\\\d{2})?\" + // Offset hour (optional)\n        \"'?\" + // Splitting apostrophe (optional)\n        \"(\\\\d{2})?\" + // Offset minute (optional)\n        \"'?\" // Trailing apostrophe (optional)\n    );\n\n    // Optional fields that don't satisfy the requirements from the regular\n    // expression (such as incorrect digit counts or numbers that are out of\n    // range) will fall back the defaults from the specification.\n    const matches = pdfDateStringRegex.exec(input);\n    if (!matches) {\n      return null;\n    }\n\n    // JavaScript's `Date` object expects the month to be between 0 and 11\n    // instead of 1 and 12, so we have to correct for that.\n    const year = parseInt(matches[1], 10);\n    let month = parseInt(matches[2], 10);\n    month = month >= 1 && month <= 12 ? month - 1 : 0;\n    let day = parseInt(matches[3], 10);\n    day = day >= 1 && day <= 31 ? day : 1;\n    let hour = parseInt(matches[4], 10);\n    hour = hour >= 0 && hour <= 23 ? hour : 0;\n    let minute = parseInt(matches[5], 10);\n    minute = minute >= 0 && minute <= 59 ? minute : 0;\n    let second = parseInt(matches[6], 10);\n    second = second >= 0 && second <= 59 ? second : 0;\n    const universalTimeRelation = matches[7] || \"Z\";\n    let offsetHour = parseInt(matches[8], 10);\n    offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n    let offsetMinute = parseInt(matches[9], 10) || 0;\n    offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n\n    // Universal time relation 'Z' means that the local time is equal to the\n    // universal time, whereas the relations '+'/'-' indicate that the local\n    // time is later respectively earlier than the universal time. Every date\n    // is normalized to universal time.\n    if (universalTimeRelation === \"-\") {\n      hour += offsetHour;\n      minute += offsetMinute;\n    } else if (universalTimeRelation === \"+\") {\n      hour -= offsetHour;\n      minute -= offsetMinute;\n    }\n\n    return new Date(Date.UTC(year, month, day, hour, minute, second));\n  }\n  \n  static formatDateString(date) {\n\t// Check if the input is a valid Date object\n    if (!(date instanceof Date) || isNaN(date)) {\n        return null;\n    }\n    // Function to add leading zero if needed\n    function pad(n) {\n        return n < 10 ? '0' + n : n;\n    }\n\n    // Extracting parts of the date\n    var month = pad(date.getMonth() + 1);\n    var day = pad(date.getDate());\n    var year = date.getFullYear();\n\n    // Extracting parts of the time\n    var hours = date.getHours();\n    var minutes = pad(date.getMinutes());\n\n    // Determining AM/PM\n    var ampm = hours >= 12 ? 'PM' : 'AM';\n    hours = hours % 12;\n    hours = hours ? hours : 12; // the hour '0' should be '12'\n    \n    // Combine date and time parts\n    return month + '/' + day + '/' + year + ' ' + hours + ':' + minutes + ' ' + ampm;\n  }\n}\n\n/**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n */\nfunction getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) {\n  const { width, height } = xfaPage.attributes.style;\n  const viewBox = [0, 0, parseInt(width), parseInt(height)];\n\n  return new PageViewport({\n    viewBox,\n    scale,\n    rotation,\n  });\n}\n\nfunction getRGB(color) {\n  if (color.startsWith(\"#\")) {\n    const colorRGB = parseInt(color.slice(1), 16);\n    return [\n      (colorRGB & 0xff0000) >> 16,\n      (colorRGB & 0x00ff00) >> 8,\n      colorRGB & 0x0000ff,\n    ];\n  }\n\n  if (color.startsWith(\"rgb(\")) {\n    // getComputedStyle(...).color returns a `rgb(R, G, B)` color.\n    return color\n      .slice(/* \"rgb(\".length */ 4, -1) // Strip out \"rgb(\" and \")\".\n      .split(\",\")\n      .map(x => parseInt(x));\n  }\n\n  if (color.startsWith(\"rgba(\")) {\n    return color\n      .slice(/* \"rgba(\".length */ 5, -1) // Strip out \"rgba(\" and \")\".\n      .split(\",\")\n      .map(x => parseInt(x))\n      .slice(0, 3);\n  }\n\n  warn(`Not a valid color format: \"${color}\"`);\n  return [0, 0, 0];\n}\n\nfunction getColorValues(colors) {\n  const span = document.createElement(\"span\");\n  span.style.visibility = \"hidden\";\n  document.body.append(span);\n  for (const name of colors.keys()) {\n    span.style.color = name;\n    const computedColor = window.getComputedStyle(span).color;\n    colors.set(name, getRGB(computedColor));\n  }\n  span.remove();\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 * @param {HTMLDivElement} div\n * @param {PageViewport} viewport\n * @param {boolean} mustFlip\n * @param {boolean} mustRotate\n */\nfunction setLayerDimensions(\n  div,\n  viewport,\n  mustFlip = false,\n  mustRotate = true\n) {\n  if (viewport instanceof PageViewport) {\n    const { pageWidth, pageHeight } = viewport.rawDims;\n    const { style } = div;\n    const useRound = FeatureTest.isCSSRoundSupported;\n\n    const w = `var(--scale-factor) * ${pageWidth}px`,\n      h = `var(--scale-factor) * ${pageHeight}px`;\n    const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`,\n      heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`;\n\n    if (!mustFlip || viewport.rotation % 180 === 0) {\n      style.width = widthStr;\n      style.height = heightStr;\n    } else {\n      style.width = heightStr;\n      style.height = widthStr;\n    }\n  }\n\n  if (mustRotate) {\n    div.setAttribute(\"data-main-rotation\", viewport.rotation);\n  }\n}\n\nexport {\n  deprecated,\n  DOMCanvasFactory,\n  DOMCMapReaderFactory,\n  DOMFilterFactory,\n  DOMStandardFontDataFactory,\n  DOMSVGFactory,\n  fetchData,\n  getColorValues,\n  getCurrentTransform,\n  getCurrentTransformInverse,\n  getFilenameFromUrl,\n  getPdfFilenameFromUrl,\n  getRGB,\n  getXfaPageViewport,\n  isDataScheme,\n  isPdfFile,\n  isValidFetchUrl,\n  noContextMenu,\n  PageViewport,\n  PDFDateString,\n  PixelsPerInch,\n  RenderingCancelledException,\n  setLayerDimensions,\n  StatTimer,\n};\n","/* Copyright 2023 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 { noContextMenu } from \"../display_utils.js\";\n\nclass EditorToolbar {\n  #toolbar = null;\n\n  #colorPicker = null;\n\n  #editor;\n\n  #buttons = null;\n\n  constructor(editor) {\n    this.#editor = editor;\n  }\n\n  render() {\n    const editToolbar = (this.#toolbar = document.createElement(\"div\"));\n    editToolbar.className = \"editToolbar\";\n    editToolbar.setAttribute(\"role\", \"toolbar\");\n    editToolbar.addEventListener(\"contextmenu\", noContextMenu);\n    editToolbar.addEventListener(\"pointerdown\", EditorToolbar.#pointerDown);\n\n    const buttons = (this.#buttons = document.createElement(\"div\"));\n    buttons.className = \"buttons\";\n    editToolbar.append(buttons);\n\n    const position = this.#editor.toolbarPosition;\n    if (position) {\n      const { style } = editToolbar;\n      const x =\n        this.#editor._uiManager.direction === \"ltr\"\n          ? 1 - position[0]\n          : position[0];\n      style.insetInlineEnd = `${100 * x}%`;\n      style.top = `calc(${\n        100 * position[1]\n      }% + var(--editor-toolbar-vert-offset))`;\n    }\n\n    this.#addDeleteButton();\n\n    return editToolbar;\n  }\n\n  static #pointerDown(e) {\n    e.stopPropagation();\n  }\n\n  #focusIn(e) {\n    this.#editor._focusEventsAllowed = false;\n    e.preventDefault();\n    e.stopPropagation();\n  }\n\n  #focusOut(e) {\n    this.#editor._focusEventsAllowed = true;\n    e.preventDefault();\n    e.stopPropagation();\n  }\n\n  #addListenersToElement(element) {\n    // If we're clicking on a button with the keyboard or with\n    // the mouse, we don't want to trigger any focus events on\n    // the editor.\n    element.addEventListener(\"focusin\", this.#focusIn.bind(this), {\n      capture: true,\n    });\n    element.addEventListener(\"focusout\", this.#focusOut.bind(this), {\n      capture: true,\n    });\n    element.addEventListener(\"contextmenu\", noContextMenu);\n  }\n\n  hide() {\n    this.#toolbar.classList.add(\"hidden\");\n    this.#colorPicker?.hideDropdown();\n  }\n\n  show() {\n    this.#toolbar.classList.remove(\"hidden\");\n  }\n\n  #addDeleteButton() {\n    const button = document.createElement(\"button\");\n    button.className = \"delete\";\n    button.tabIndex = 0;\n    button.setAttribute(\n      \"data-l10n-id\",\n      `pdfjs-editor-remove-${this.#editor.editorType}-button`\n    );\n    this.#addListenersToElement(button);\n    button.addEventListener(\"click\", e => {\n      this.#editor._uiManager.delete();\n    });\n    this.#buttons.append(button);\n  }\n\n  get #divider() {\n    const divider = document.createElement(\"div\");\n    divider.className = \"divider\";\n    return divider;\n  }\n\n  addAltTextButton(button) {\n    this.#addListenersToElement(button);\n    this.#buttons.prepend(button, this.#divider);\n  }\n\n  addColorPicker(colorPicker) {\n    this.#colorPicker = colorPicker;\n    const button = colorPicker.renderButton();\n    this.#addListenersToElement(button);\n    this.#buttons.prepend(button, this.#divider);\n  }\n\n  remove() {\n    this.#toolbar.remove();\n    this.#colorPicker?.destroy();\n    this.#colorPicker = null;\n  }\n}\n\nclass HighlightToolbar {\n  #buttons = null;\n\n  #toolbar = null;\n\n  #uiManager;\n\n  constructor(uiManager) {\n    this.#uiManager = uiManager;\n  }\n\n  #render() {\n    const editToolbar = (this.#toolbar = document.createElement(\"div\"));\n    editToolbar.className = \"editToolbar\";\n    editToolbar.setAttribute(\"role\", \"toolbar\");\n    editToolbar.addEventListener(\"contextmenu\", noContextMenu);\n\n    const buttons = (this.#buttons = document.createElement(\"div\"));\n    buttons.className = \"buttons\";\n    editToolbar.append(buttons);\n\n    this.#addHighlightButton();\n\n    return editToolbar;\n  }\n\n  #getLastPoint(boxes, isLTR) {\n    let lastY = 0;\n    let lastX = 0;\n    for (const box of boxes) {\n      const y = box.y + box.height;\n      if (y < lastY) {\n        continue;\n      }\n      const x = box.x + (isLTR ? box.width : 0);\n      if (y > lastY) {\n        lastX = x;\n        lastY = y;\n        continue;\n      }\n      if (isLTR) {\n        if (x > lastX) {\n          lastX = x;\n        }\n      } else if (x < lastX) {\n        lastX = x;\n      }\n    }\n    return [isLTR ? 1 - lastX : lastX, lastY];\n  }\n\n  show(parent, boxes, isLTR) {\n    const [x, y] = this.#getLastPoint(boxes, isLTR);\n    const { style } = (this.#toolbar ||= this.#render());\n    parent.append(this.#toolbar);\n    style.insetInlineEnd = `${100 * x}%`;\n    style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`;\n  }\n\n  hide() {\n    this.#toolbar.remove();\n  }\n\n  #addHighlightButton() {\n    const button = document.createElement(\"button\");\n    button.className = \"highlightButton\";\n    button.tabIndex = 0;\n    button.setAttribute(\"data-l10n-id\", `pdfjs-highlight-floating-button1`);\n    const span = document.createElement(\"span\");\n    button.append(span);\n    span.className = \"visuallyHidden\";\n    span.setAttribute(\"data-l10n-id\", \"pdfjs-highlight-floating-button-label\");\n    button.addEventListener(\"contextmenu\", noContextMenu);\n    button.addEventListener(\"click\", () => {\n      this.#uiManager.highlightSelection(\"floating_button\");\n    });\n    this.#buttons.append(button);\n  }\n}\n\nexport { EditorToolbar, HighlightToolbar };\n","/* Copyright 2022 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/** @typedef {import(\"./editor.js\").AnnotationEditor} AnnotationEditor */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n  AnnotationEditorParamsType,\n  AnnotationEditorPrefix,\n  AnnotationEditorType,\n  FeatureTest,\n  getUuid,\n  shadow,\n  Util,\n  warn,\n} from \"../../shared/util.js\";\nimport {\n  fetchData,\n  getColorValues,\n  getRGB,\n  PixelsPerInch,\n} from \"../display_utils.js\";\nimport { HighlightToolbar } from \"./toolbar.js\";\n\nfunction bindEvents(obj, element, names) {\n  for (const name of names) {\n    element.addEventListener(name, obj[name].bind(obj));\n  }\n}\n\n/**\n * Convert a number between 0 and 100 into an hex number between 0 and 255.\n * @param {number} opacity\n * @return {string}\n */\nfunction opacityToHex(opacity) {\n  return Math.round(Math.min(255, Math.max(1, 255 * opacity)))\n    .toString(16)\n    .padStart(2, \"0\");\n}\n\n/**\n * Class to create some unique ids for the different editors.\n */\nclass IdManager {\n  #id = 0;\n\n  constructor() {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n      Object.defineProperty(this, \"reset\", {\n        value: () => (this.#id = 0),\n      });\n    }\n  }\n\n  /**\n   * Get a unique id.\n   * @returns {string}\n   */\n  get id() {\n    return `${AnnotationEditorPrefix}${this.#id++}`;\n  }\n}\n\n/**\n * Class to manage the images used by the editors.\n * The main idea is to try to minimize the memory used by the images.\n * The images are cached and reused when possible\n * We use a refCounter to know when an image is not used anymore but we need to\n * be able to restore an image after a remove+undo, so we keep a file reference\n * or an url one.\n */\nclass ImageManager {\n  #baseId = getUuid();\n\n  #id = 0;\n\n  #cache = null;\n\n  static get _isSVGFittingCanvas() {\n    // By default, Firefox doesn't rescale without preserving the aspect ratio\n    // when drawing an SVG image on a canvas, see https://bugzilla.mozilla.org/1547776.\n    // The \"workaround\" is to append \"svgView(preserveAspectRatio(none))\" to the\n    // url, but according to comment #15, it seems that it leads to unexpected\n    // behavior in Safari.\n    const svg = `data:image/svg+xml;charset=UTF-8,<svg viewBox=\"0 0 1 1\" width=\"1\" height=\"1\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"1\" height=\"1\" style=\"fill:red;\"/></svg>`;\n    const canvas = new OffscreenCanvas(1, 3);\n    const ctx = canvas.getContext(\"2d\");\n    const image = new Image();\n    image.src = svg;\n    const promise = image.decode().then(() => {\n      ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3);\n      return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0;\n    });\n\n    return shadow(this, \"_isSVGFittingCanvas\", promise);\n  }\n\n  async #get(key, rawData) {\n    this.#cache ||= new Map();\n    let data = this.#cache.get(key);\n    if (data === null) {\n      // We already tried to load the image but it failed.\n      return null;\n    }\n    if (data?.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    try {\n      data ||= {\n        bitmap: null,\n        id: `image_${this.#baseId}_${this.#id++}`,\n        refCounter: 0,\n        isSvg: false,\n      };\n      let image;\n      if (typeof rawData === \"string\") {\n        data.url = rawData;\n        image = await fetchData(rawData, \"blob\");\n      } else {\n        image = data.file = rawData;\n      }\n\n      if (image.type === \"image/svg+xml\") {\n        // Unfortunately, createImageBitmap doesn't work with SVG images.\n        // (see https://bugzilla.mozilla.org/1841972).\n        const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas;\n        const fileReader = new FileReader();\n        const imageElement = new Image();\n        const imagePromise = new Promise((resolve, reject) => {\n          imageElement.onload = () => {\n            data.bitmap = imageElement;\n            data.isSvg = true;\n            resolve();\n          };\n          fileReader.onload = async () => {\n            const url = (data.svgUrl = fileReader.result);\n            // We need to set the preserveAspectRatio to none in order to let\n            // the image fits the canvas when resizing.\n            imageElement.src = (await mustRemoveAspectRatioPromise)\n              ? `${url}#svgView(preserveAspectRatio(none))`\n              : url;\n          };\n          imageElement.onerror = fileReader.onerror = reject;\n        });\n        fileReader.readAsDataURL(image);\n        await imagePromise;\n      } else {\n        data.bitmap = await createImageBitmap(image);\n      }\n      data.refCounter = 1;\n    } catch (e) {\n      console.error(e);\n      data = null;\n    }\n    this.#cache.set(key, data);\n    if (data) {\n      this.#cache.set(data.id, data);\n    }\n    return data;\n  }\n\n  async getFromFile(file) {\n    const { lastModified, name, size, type } = file;\n    return this.#get(`${lastModified}_${name}_${size}_${type}`, file);\n  }\n\n  async getFromUrl(url) {\n    return this.#get(url, url);\n  }\n\n  getFromCanvas(id, canvas) {\n    this.#cache ||= new Map();\n    let data = this.#cache.get(id);\n    if (data?.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n    const offscreen = new OffscreenCanvas(canvas.width, canvas.height);\n    const ctx = offscreen.getContext(\"2d\");\n    ctx.drawImage(canvas, 0, 0);\n    data = {\n      bitmap: offscreen.transferToImageBitmap(),\n      id: `image_${this.#baseId}_${this.#id++}`,\n      refCounter: 1,\n      isSvg: false,\n    };\n    this.#cache.set(id, data);\n    this.#cache.set(data.id, data);\n    return data;\n  }\n\n  async getFromId(id) {\n    this.#cache ||= new Map();\n    const data = this.#cache.get(id);\n    if (!data) {\n      return null;\n    }\n    if (data.bitmap) {\n      data.refCounter += 1;\n      return data;\n    }\n\n    if (data.file) {\n      return this.getFromFile(data.file);\n    }\n    return this.getFromUrl(data.url);\n  }\n\n  getSvgUrl(id) {\n    const data = this.#cache.get(id);\n    if (!data?.isSvg) {\n      return null;\n    }\n    data.bitmap.close?.();\n    return data.svgUrl;\n  }\n\n  deleteId(id) {\n    this.#cache ||= new Map();\n    const data = this.#cache.get(id);\n    if (!data) {\n      return;\n    }\n    data.refCounter -= 1;\n    if (data.refCounter !== 0) {\n      return;\n    }\n    data.bitmap = null;\n  }\n\n  // We can use the id only if it belongs this manager.\n  // We must take care of having the right manager because we can copy/paste\n  // some images from other documents, hence it'd be a pity to use an id from an\n  // other manager.\n  isValidId(id) {\n    return id.startsWith(`image_${this.#baseId}_`);\n  }\n}\n\n/**\n * Class to handle undo/redo.\n * Commands are just saved in a buffer.\n * If we hit some memory issues we could likely use a circular buffer.\n * It has to be used as a singleton.\n */\nclass CommandManager {\n  #commands = [];\n\n  #locked = false;\n\n  #maxSize;\n\n  #position = -1;\n\n  constructor(maxSize = 128) {\n    this.#maxSize = maxSize;\n  }\n\n  /**\n   * @typedef {Object} addOptions\n   * @property {function} cmd\n   * @property {function} undo\n   * @property {function} [post]\n   * @property {boolean} mustExec\n   * @property {number} type\n   * @property {boolean} overwriteIfSameType\n   * @property {boolean} keepUndo\n   */\n\n  /**\n   * Add a new couple of commands to be used in case of redo/undo.\n   * @param {addOptions} options\n   */\n  add({\n    cmd,\n    undo,\n    post,\n    mustExec,\n    type = NaN,\n    overwriteIfSameType = false,\n    keepUndo = false,\n  }) {\n    if (mustExec) {\n      cmd();\n    }\n\n    if (this.#locked) {\n      return;\n    }\n\n    const save = { cmd, undo, post, type };\n    if (this.#position === -1) {\n      if (this.#commands.length > 0) {\n        // All the commands have been undone and then a new one is added\n        // hence we clear the queue.\n        this.#commands.length = 0;\n      }\n      this.#position = 0;\n      this.#commands.push(save);\n      return;\n    }\n\n    if (overwriteIfSameType && this.#commands[this.#position].type === type) {\n      // For example when we change a color we don't want to\n      // be able to undo all the steps, hence we only want to\n      // keep the last undoable action in this sequence of actions.\n      if (keepUndo) {\n        save.undo = this.#commands[this.#position].undo;\n      }\n      this.#commands[this.#position] = save;\n      return;\n    }\n\n    const next = this.#position + 1;\n    if (next === this.#maxSize) {\n      this.#commands.splice(0, 1);\n    } else {\n      this.#position = next;\n      if (next < this.#commands.length) {\n        this.#commands.splice(next);\n      }\n    }\n\n    this.#commands.push(save);\n  }\n\n  /**\n   * Undo the last command.\n   */\n  undo() {\n    if (this.#position === -1) {\n      // Nothing to undo.\n      return;\n    }\n\n    // Avoid to insert something during the undo execution.\n    this.#locked = true;\n    const { undo, post } = this.#commands[this.#position];\n    undo();\n    post?.();\n    this.#locked = false;\n\n    this.#position -= 1;\n  }\n\n  /**\n   * Redo the last command.\n   */\n  redo() {\n    if (this.#position < this.#commands.length - 1) {\n      this.#position += 1;\n\n      // Avoid to insert something during the redo execution.\n      this.#locked = true;\n      const { cmd, post } = this.#commands[this.#position];\n      cmd();\n      post?.();\n      this.#locked = false;\n    }\n  }\n\n  /**\n   * Check if there is something to undo.\n   * @returns {boolean}\n   */\n  hasSomethingToUndo() {\n    return this.#position !== -1;\n  }\n\n  /**\n   * Check if there is something to redo.\n   * @returns {boolean}\n   */\n  hasSomethingToRedo() {\n    return this.#position < this.#commands.length - 1;\n  }\n\n  destroy() {\n    this.#commands = null;\n  }\n}\n\n/**\n * Class to handle the different keyboards shortcuts we can have on mac or\n * non-mac OSes.\n */\nclass KeyboardManager {\n  /**\n   * Create a new keyboard manager class.\n   * @param {Array<Array>} callbacks - an array containing an array of shortcuts\n   * and a callback to call.\n   * A shortcut is a string like `ctrl+c` or `mac+ctrl+c` for mac OS.\n   */\n  constructor(callbacks) {\n    this.buffer = [];\n    this.callbacks = new Map();\n    this.allKeys = new Set();\n\n    const { isMac } = FeatureTest.platform;\n    for (const [keys, callback, options = {}] of callbacks) {\n      for (const key of keys) {\n        const isMacKey = key.startsWith(\"mac+\");\n        if (isMac && isMacKey) {\n          this.callbacks.set(key.slice(4), { callback, options });\n          this.allKeys.add(key.split(\"+\").at(-1));\n        } else if (!isMac && !isMacKey) {\n          this.callbacks.set(key, { callback, options });\n          this.allKeys.add(key.split(\"+\").at(-1));\n        }\n      }\n    }\n  }\n\n  /**\n   * Serialize an event into a string in order to match a\n   * potential key for a callback.\n   * @param {KeyboardEvent} event\n   * @returns {string}\n   */\n  #serialize(event) {\n    if (event.altKey) {\n      this.buffer.push(\"alt\");\n    }\n    if (event.ctrlKey) {\n      this.buffer.push(\"ctrl\");\n    }\n    if (event.metaKey) {\n      this.buffer.push(\"meta\");\n    }\n    if (event.shiftKey) {\n      this.buffer.push(\"shift\");\n    }\n    this.buffer.push(event.key);\n    const str = this.buffer.join(\"+\");\n    this.buffer.length = 0;\n\n    return str;\n  }\n\n  /**\n   * Execute a callback, if any, for a given keyboard event.\n   * The self is used as `this` in the callback.\n   * @param {Object} self\n   * @param {KeyboardEvent} event\n   * @returns\n   */\n  exec(self, event) {\n    if (!this.allKeys.has(event.key)) {\n      return;\n    }\n    const info = this.callbacks.get(this.#serialize(event));\n    if (!info) {\n      return;\n    }\n    const {\n      callback,\n      options: { bubbles = false, args = [], checker = null },\n    } = info;\n\n    if (checker && !checker(self, event)) {\n      return;\n    }\n    callback.bind(self, ...args, event)();\n\n    // For example, ctrl+s in a FreeText must be handled by the viewer, hence\n    // the event must bubble.\n    if (!bubbles) {\n      event.stopPropagation();\n      event.preventDefault();\n    }\n  }\n}\n\nclass ColorManager {\n  static _colorsMapping = new Map([\n    [\"CanvasText\", [0, 0, 0]],\n    [\"Canvas\", [255, 255, 255]],\n  ]);\n\n  get _colors() {\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"LIB\") &&\n      typeof document === \"undefined\"\n    ) {\n      return shadow(this, \"_colors\", ColorManager._colorsMapping);\n    }\n\n    const colors = new Map([\n      [\"CanvasText\", null],\n      [\"Canvas\", null],\n    ]);\n    getColorValues(colors);\n    return shadow(this, \"_colors\", colors);\n  }\n\n  /**\n   * In High Contrast Mode, the color on the screen is not always the\n   * real color used in the pdf.\n   * For example in some cases white can appear to be black but when saving\n   * we want to have white.\n   * @param {string} color\n   * @returns {Array<number>}\n   */\n  convert(color) {\n    const rgb = getRGB(color);\n    if (!window.matchMedia(\"(forced-colors: active)\").matches) {\n      return rgb;\n    }\n\n    for (const [name, RGB] of this._colors) {\n      if (RGB.every((x, i) => x === rgb[i])) {\n        return ColorManager._colorsMapping.get(name);\n      }\n    }\n    return rgb;\n  }\n\n  /**\n   * An input element must have its color value as a hex string\n   * and not as color name.\n   * So this function converts a name into an hex string.\n   * @param {string} name\n   * @returns {string}\n   */\n  getHexCode(name) {\n    const rgb = this._colors.get(name);\n    if (!rgb) {\n      return name;\n    }\n    return Util.makeHexColor(...rgb);\n  }\n}\n\n/**\n * A pdf has several pages and each of them when it will rendered\n * will have an AnnotationEditorLayer which will contain the some\n * new Annotations associated to an editor in order to modify them.\n *\n * This class is used to manage all the different layers, editors and\n * some action like copy/paste, undo/redo, ...\n */\nclass AnnotationEditorUIManager {\n  #activeEditor = null;\n\n  #allEditors = new Map();\n\n  #allLayers = new Map();\n\n  #altTextManager = null;\n\n  #annotationStorage = null;\n\n  #changedExistingAnnotations = null;\n\n  #commandManager = new CommandManager();\n\n  #currentPageIndex = 0;\n\n  #deletedAnnotationsElementIds = new Set();\n\n  #draggingEditors = null;\n\n  #editorTypes = null;\n\n  #editorsToRescale = new Set();\n\n  #enableHighlightFloatingButton = false;\n\n  #filterFactory = null;\n\n  #focusMainContainerTimeoutId = null;\n\n  #highlightColors = null;\n\n  #highlightWhenShiftUp = false;\n\n  #highlightToolbar = null;\n\n  #idManager = new IdManager();\n\n  #isEnabled = false;\n\n  #isWaiting = false;\n\n  #lastActiveElement = null;\n\n  #mainHighlightColorPicker = null;\n\n  #mlManager = null;\n\n  #mode = AnnotationEditorType.NONE;\n\n  #selectedEditors = new Set();\n\n  #selectedTextNode = null;\n\n  #pageColors = null;\n\n  #showAllStates = null;\n\n  #boundBlur = this.blur.bind(this);\n\n  #boundFocus = this.focus.bind(this);\n\n  #boundCopy = this.copy.bind(this);\n\n  #boundCut = this.cut.bind(this);\n\n  #boundPaste = this.paste.bind(this);\n\n  #boundKeydown = this.keydown.bind(this);\n\n  #boundKeyup = this.keyup.bind(this);\n\n  #boundOnEditingAction = this.onEditingAction.bind(this);\n\n  #boundOnPageChanging = this.onPageChanging.bind(this);\n\n  #boundOnScaleChanging = this.onScaleChanging.bind(this);\n\n  #boundSelectionChange = this.#selectionChange.bind(this);\n\n  #boundOnRotationChanging = this.onRotationChanging.bind(this);\n\n  #previousStates = {\n    isEditing: false,\n    isEmpty: true,\n    hasSomethingToUndo: false,\n    hasSomethingToRedo: false,\n    hasSelectedEditor: false,\n    hasSelectedText: false,\n  };\n\n  #translation = [0, 0];\n\n  #translationTimeoutId = null;\n\n  #container = null;\n\n  #viewer = null;\n\n  static TRANSLATE_SMALL = 1; // page units.\n\n  static TRANSLATE_BIG = 10; // page units.\n\n  static get _keyboardManager() {\n    const proto = AnnotationEditorUIManager.prototype;\n\n    /**\n     * If the focused element is an input, we don't want to handle the arrow.\n     * For example, sliders can be controlled with the arrow keys.\n     */\n    const arrowChecker = self =>\n      self.#container.contains(document.activeElement) &&\n      document.activeElement.tagName !== \"BUTTON\" &&\n      self.hasSomethingToControl();\n\n    const textInputChecker = (_self, { target: el }) => {\n      if (el instanceof HTMLInputElement) {\n        const { type } = el;\n        return type !== \"text\" && type !== \"number\";\n      }\n      return true;\n    };\n\n    const small = this.TRANSLATE_SMALL;\n    const big = this.TRANSLATE_BIG;\n\n    return shadow(\n      this,\n      \"_keyboardManager\",\n      new KeyboardManager([\n        [\n          [\"ctrl+a\", \"mac+meta+a\"],\n          proto.selectAll,\n          { checker: textInputChecker },\n        ],\n        [[\"ctrl+z\", \"mac+meta+z\"], proto.undo, { checker: textInputChecker }],\n        [\n          // On mac, depending of the OS version, the event.key is either \"z\" or\n          // \"Z\" when the user presses \"meta+shift+z\".\n          [\n            \"ctrl+y\",\n            \"ctrl+shift+z\",\n            \"mac+meta+shift+z\",\n            \"ctrl+shift+Z\",\n            \"mac+meta+shift+Z\",\n          ],\n          proto.redo,\n          { checker: textInputChecker },\n        ],\n        [\n          [\n            \"alt+Backspace\",\n            \"ctrl+Backspace\",\n            \"shift+Backspace\",\n            \"mac+Backspace\",\n            \"mac+alt+Backspace\",\n            \"mac+ctrl+Backspace\",\n            \"Delete\",\n            \"ctrl+Delete\",\n            \"shift+Delete\",\n            \"mac+Delete\",\n          ],\n          proto.delete,\n          { checker: textInputChecker },\n        ],\n        [\n          [\"Enter\", \"mac+Enter\"],\n          proto.addNewEditorFromKeyboard,\n          {\n            // Those shortcuts can be used in the toolbar for some other actions\n            // like zooming, hence we need to check if the container has the\n            // focus.\n            checker: (self, { target: el }) =>\n              !(el instanceof HTMLButtonElement) &&\n              self.#container.contains(el) &&\n              !self.isEnterHandled,\n          },\n        ],\n        [\n          [\" \", \"mac+ \"],\n          proto.addNewEditorFromKeyboard,\n          {\n            // Those shortcuts can be used in the toolbar for some other actions\n            // like zooming, hence we need to check if the container has the\n            // focus.\n            checker: (self, { target: el }) =>\n              !(el instanceof HTMLButtonElement) &&\n              self.#container.contains(document.activeElement),\n          },\n        ],\n        [[\"Escape\", \"mac+Escape\"], proto.unselectAll],\n        [\n          [\"ArrowLeft\", \"mac+ArrowLeft\"],\n          proto.translateSelectedEditors,\n          { args: [-small, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n          proto.translateSelectedEditors,\n          { args: [-big, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ArrowRight\", \"mac+ArrowRight\"],\n          proto.translateSelectedEditors,\n          { args: [small, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n          proto.translateSelectedEditors,\n          { args: [big, 0], checker: arrowChecker },\n        ],\n        [\n          [\"ArrowUp\", \"mac+ArrowUp\"],\n          proto.translateSelectedEditors,\n          { args: [0, -small], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"],\n          proto.translateSelectedEditors,\n          { args: [0, -big], checker: arrowChecker },\n        ],\n        [\n          [\"ArrowDown\", \"mac+ArrowDown\"],\n          proto.translateSelectedEditors,\n          { args: [0, small], checker: arrowChecker },\n        ],\n        [\n          [\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"],\n          proto.translateSelectedEditors,\n          { args: [0, big], checker: arrowChecker },\n        ],\n      ])\n    );\n  }\n\n  constructor(\n    container,\n    viewer,\n    altTextManager,\n    eventBus,\n    pdfDocument,\n    pageColors,\n    highlightColors,\n    enableHighlightFloatingButton,\n    mlManager\n  ) {\n    this.#container = container;\n    this.#viewer = viewer;\n    this.#altTextManager = altTextManager;\n    this._eventBus = eventBus;\n    this._eventBus._on(\"editingaction\", this.#boundOnEditingAction);\n    this._eventBus._on(\"pagechanging\", this.#boundOnPageChanging);\n    this._eventBus._on(\"scalechanging\", this.#boundOnScaleChanging);\n    this._eventBus._on(\"rotationchanging\", this.#boundOnRotationChanging);\n    this.#addSelectionListener();\n    this.#addKeyboardManager();\n    this.#annotationStorage = pdfDocument.annotationStorage;\n    this.#filterFactory = pdfDocument.filterFactory;\n    this.#pageColors = pageColors;\n    this.#highlightColors = highlightColors || null;\n    this.#enableHighlightFloatingButton = enableHighlightFloatingButton;\n    this.#mlManager = mlManager || null;\n    this.viewParameters = {\n      realScale: PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: 0,\n    };\n    this.isShiftKeyDown = false;\n\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n      Object.defineProperty(this, \"reset\", {\n        value: () => {\n          this.selectAll();\n          this.delete();\n          this.#idManager.reset();\n        },\n      });\n    }\n  }\n\n  destroy() {\n    this.#removeKeyboardManager();\n    this.#removeFocusManager();\n    this._eventBus._off(\"editingaction\", this.#boundOnEditingAction);\n    this._eventBus._off(\"pagechanging\", this.#boundOnPageChanging);\n    this._eventBus._off(\"scalechanging\", this.#boundOnScaleChanging);\n    this._eventBus._off(\"rotationchanging\", this.#boundOnRotationChanging);\n    for (const layer of this.#allLayers.values()) {\n      layer.destroy();\n    }\n    this.#allLayers.clear();\n    this.#allEditors.clear();\n    this.#editorsToRescale.clear();\n    this.#activeEditor = null;\n    this.#selectedEditors.clear();\n    this.#commandManager.destroy();\n    this.#altTextManager?.destroy();\n    this.#highlightToolbar?.hide();\n    this.#highlightToolbar = null;\n    if (this.#focusMainContainerTimeoutId) {\n      clearTimeout(this.#focusMainContainerTimeoutId);\n      this.#focusMainContainerTimeoutId = null;\n    }\n    if (this.#translationTimeoutId) {\n      clearTimeout(this.#translationTimeoutId);\n      this.#translationTimeoutId = null;\n    }\n    this.#removeSelectionListener();\n  }\n\n  async mlGuess(data) {\n    return this.#mlManager?.guess(data) || null;\n  }\n\n  get hasMLManager() {\n    return !!this.#mlManager;\n  }\n\n  get hcmFilter() {\n    return shadow(\n      this,\n      \"hcmFilter\",\n      this.#pageColors\n        ? this.#filterFactory.addHCMFilter(\n            this.#pageColors.foreground,\n            this.#pageColors.background\n          )\n        : \"none\"\n    );\n  }\n\n  get direction() {\n    return shadow(\n      this,\n      \"direction\",\n      getComputedStyle(this.#container).direction\n    );\n  }\n\n  get highlightColors() {\n    return shadow(\n      this,\n      \"highlightColors\",\n      this.#highlightColors\n        ? new Map(\n            this.#highlightColors\n              .split(\",\")\n              .map(pair => pair.split(\"=\").map(x => x.trim()))\n          )\n        : null\n    );\n  }\n\n  get highlightColorNames() {\n    return shadow(\n      this,\n      \"highlightColorNames\",\n      this.highlightColors\n        ? new Map(Array.from(this.highlightColors, e => e.reverse()))\n        : null\n    );\n  }\n\n  setMainHighlightColorPicker(colorPicker) {\n    this.#mainHighlightColorPicker = colorPicker;\n  }\n\n  editAltText(editor) {\n    this.#altTextManager?.editAltText(this, editor);\n  }\n\n  onPageChanging({ pageNumber }) {\n    this.#currentPageIndex = pageNumber - 1;\n  }\n\n  focusMainContainer() {\n    this.#container.focus();\n  }\n\n  findParent(x, y) {\n    for (const layer of this.#allLayers.values()) {\n      const {\n        x: layerX,\n        y: layerY,\n        width,\n        height,\n      } = layer.div.getBoundingClientRect();\n      if (\n        x >= layerX &&\n        x <= layerX + width &&\n        y >= layerY &&\n        y <= layerY + height\n      ) {\n        return layer;\n      }\n    }\n    return null;\n  }\n\n  disableUserSelect(value = false) {\n    this.#viewer.classList.toggle(\"noUserSelect\", value);\n  }\n\n  addShouldRescale(editor) {\n    this.#editorsToRescale.add(editor);\n  }\n\n  removeShouldRescale(editor) {\n    this.#editorsToRescale.delete(editor);\n  }\n\n  onScaleChanging({ scale }) {\n    this.commitOrRemove();\n    this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS;\n    for (const editor of this.#editorsToRescale) {\n      editor.onScaleChanging();\n    }\n  }\n\n  onRotationChanging({ pagesRotation }) {\n    this.commitOrRemove();\n    this.viewParameters.rotation = pagesRotation;\n  }\n\n  #getAnchorElementForSelection({ anchorNode }) {\n    return anchorNode.nodeType === Node.TEXT_NODE\n      ? anchorNode.parentElement\n      : anchorNode;\n  }\n\n  highlightSelection(methodOfCreation = \"\") {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      return;\n    }\n    const { anchorNode, anchorOffset, focusNode, focusOffset } = selection;\n    const text = selection.toString();\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    const boxes = this.getSelectionBoxes(textLayer);\n    if (!boxes) {\n      return;\n    }\n    selection.empty();\n    if (this.#mode === AnnotationEditorType.NONE) {\n      this._eventBus.dispatch(\"showannotationeditorui\", {\n        source: this,\n        mode: AnnotationEditorType.HIGHLIGHT,\n      });\n      this.showAllEditors(\"highlight\", true, /* updateButton = */ true);\n    }\n    for (const layer of this.#allLayers.values()) {\n      if (layer.hasTextLayer(textLayer)) {\n        layer.createAndAddNewEditor({ x: 0, y: 0 }, false, {\n          methodOfCreation,\n          boxes,\n          anchorNode,\n          anchorOffset,\n          focusNode,\n          focusOffset,\n          text,\n        });\n        break;\n      }\n    }\n  }\n\n  #displayHighlightToolbar() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      return;\n    }\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    const boxes = this.getSelectionBoxes(textLayer);\n    if (!boxes) {\n      return;\n    }\n    this.#highlightToolbar ||= new HighlightToolbar(this);\n    this.#highlightToolbar.show(textLayer, boxes, this.direction === \"ltr\");\n  }\n\n  /**\n   * Add an editor in the annotation storage.\n   * @param {AnnotationEditor} editor\n   */\n  addToAnnotationStorage(editor) {\n    if (\n      !editor.isEmpty() &&\n      this.#annotationStorage &&\n      !this.#annotationStorage.has(editor.id)\n    ) {\n      this.#annotationStorage.setValue(editor.id, editor);\n    }\n  }\n\n  #selectionChange() {\n    const selection = document.getSelection();\n    if (!selection || selection.isCollapsed) {\n      if (this.#selectedTextNode) {\n        this.#highlightToolbar?.hide();\n        this.#selectedTextNode = null;\n        this.#dispatchUpdateStates({\n          hasSelectedText: false,\n        });\n      }\n      return;\n    }\n    const { anchorNode } = selection;\n    if (anchorNode === this.#selectedTextNode) {\n      return;\n    }\n\n    const anchorElement = this.#getAnchorElementForSelection(selection);\n    const textLayer = anchorElement.closest(\".textLayer\");\n    if (!textLayer) {\n      if (this.#selectedTextNode) {\n        this.#highlightToolbar?.hide();\n        this.#selectedTextNode = null;\n        this.#dispatchUpdateStates({\n          hasSelectedText: false,\n        });\n      }\n      return;\n    }\n    this.#highlightToolbar?.hide();\n    this.#selectedTextNode = anchorNode;\n    this.#dispatchUpdateStates({\n      hasSelectedText: true,\n    });\n\n    if (\n      this.#mode !== AnnotationEditorType.HIGHLIGHT &&\n      this.#mode !== AnnotationEditorType.NONE\n    ) {\n      return;\n    }\n\n    if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n      this.showAllEditors(\"highlight\", true, /* updateButton = */ true);\n    }\n\n    this.#highlightWhenShiftUp = this.isShiftKeyDown;\n    if (!this.isShiftKeyDown) {\n      const pointerup = e => {\n        if (e.type === \"pointerup\" && e.button !== 0) {\n          // Do nothing on right click.\n          return;\n        }\n        window.removeEventListener(\"pointerup\", pointerup);\n        window.removeEventListener(\"blur\", pointerup);\n        if (e.type === \"pointerup\") {\n          this.#onSelectEnd(\"main_toolbar\");\n        }\n      };\n      window.addEventListener(\"pointerup\", pointerup);\n      window.addEventListener(\"blur\", pointerup);\n    }\n  }\n\n  #onSelectEnd(methodOfCreation = \"\") {\n    if (this.#mode === AnnotationEditorType.HIGHLIGHT) {\n      this.highlightSelection(methodOfCreation);\n    } else if (this.#enableHighlightFloatingButton) {\n      this.#displayHighlightToolbar();\n    }\n  }\n\n  #addSelectionListener() {\n    document.addEventListener(\"selectionchange\", this.#boundSelectionChange);\n  }\n\n  #removeSelectionListener() {\n    document.removeEventListener(\"selectionchange\", this.#boundSelectionChange);\n  }\n\n  #addFocusManager() {\n    window.addEventListener(\"focus\", this.#boundFocus);\n    window.addEventListener(\"blur\", this.#boundBlur);\n  }\n\n  #removeFocusManager() {\n    window.removeEventListener(\"focus\", this.#boundFocus);\n    window.removeEventListener(\"blur\", this.#boundBlur);\n  }\n\n  blur() {\n    this.isShiftKeyDown = false;\n    if (this.#highlightWhenShiftUp) {\n      this.#highlightWhenShiftUp = false;\n      this.#onSelectEnd(\"main_toolbar\");\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n    // When several editors are selected and the window loses focus, we want to\n    // keep the last active element in order to be able to focus it again when\n    // the window gets the focus back but we don't want to trigger any focus\n    // callbacks else only one editor will be selected.\n    const { activeElement } = document;\n    for (const editor of this.#selectedEditors) {\n      if (editor.div.contains(activeElement)) {\n        this.#lastActiveElement = [editor, activeElement];\n        editor._focusEventsAllowed = false;\n        break;\n      }\n    }\n  }\n\n  focus() {\n    if (!this.#lastActiveElement) {\n      return;\n    }\n    const [lastEditor, lastActiveElement] = this.#lastActiveElement;\n    this.#lastActiveElement = null;\n    lastActiveElement.addEventListener(\n      \"focusin\",\n      () => {\n        lastEditor._focusEventsAllowed = true;\n      },\n      { once: true }\n    );\n    lastActiveElement.focus();\n  }\n\n  #addKeyboardManager() {\n    // The keyboard events are caught at the container level in order to be able\n    // to execute some callbacks even if the current page doesn't have focus.\n    window.addEventListener(\"keydown\", this.#boundKeydown);\n    window.addEventListener(\"keyup\", this.#boundKeyup);\n  }\n\n  #removeKeyboardManager() {\n    window.removeEventListener(\"keydown\", this.#boundKeydown);\n    window.removeEventListener(\"keyup\", this.#boundKeyup);\n  }\n\n  #addCopyPasteListeners() {\n    document.addEventListener(\"copy\", this.#boundCopy);\n    document.addEventListener(\"cut\", this.#boundCut);\n    document.addEventListener(\"paste\", this.#boundPaste);\n  }\n\n  #removeCopyPasteListeners() {\n    document.removeEventListener(\"copy\", this.#boundCopy);\n    document.removeEventListener(\"cut\", this.#boundCut);\n    document.removeEventListener(\"paste\", this.#boundPaste);\n  }\n\n  addEditListeners() {\n    this.#addKeyboardManager();\n    this.#addCopyPasteListeners();\n  }\n\n  removeEditListeners() {\n    this.#removeKeyboardManager();\n    this.#removeCopyPasteListeners();\n  }\n\n  /**\n   * Copy callback.\n   * @param {ClipboardEvent} event\n   */\n  copy(event) {\n    event.preventDefault();\n\n    // An editor is being edited so just commit it.\n    this.#activeEditor?.commitOrRemove();\n\n    if (!this.hasSelection) {\n      return;\n    }\n\n    const editors = [];\n    for (const editor of this.#selectedEditors) {\n      const serialized = editor.serialize(/* isForCopying = */ true);\n      if (serialized) {\n        editors.push(serialized);\n      }\n    }\n    if (editors.length === 0) {\n      return;\n    }\n\n    event.clipboardData.setData(\"application/pdfjs\", JSON.stringify(editors));\n  }\n\n  /**\n   * Cut callback.\n   * @param {ClipboardEvent} event\n   */\n  cut(event) {\n    this.copy(event);\n    this.delete();\n  }\n\n  /**\n   * Paste callback.\n   * @param {ClipboardEvent} event\n   */\n  paste(event) {\n    event.preventDefault();\n    const { clipboardData } = event;\n    for (const item of clipboardData.items) {\n      for (const editorType of this.#editorTypes) {\n        if (editorType.isHandlingMimeForPasting(item.type)) {\n          editorType.paste(item, this.currentLayer);\n          return;\n        }\n      }\n    }\n\n    let data = clipboardData.getData(\"application/pdfjs\");\n    if (!data) {\n      return;\n    }\n\n    try {\n      data = JSON.parse(data);\n    } catch (ex) {\n      warn(`paste: \"${ex.message}\".`);\n      return;\n    }\n\n    if (!Array.isArray(data)) {\n      return;\n    }\n\n    this.unselectAll();\n    const layer = this.currentLayer;\n\n    try {\n      const newEditors = [];\n      for (const editor of data) {\n        const deserializedEditor = layer.deserialize(editor);\n        if (!deserializedEditor) {\n          return;\n        }\n        newEditors.push(deserializedEditor);\n      }\n\n      const cmd = () => {\n        for (const editor of newEditors) {\n          this.#addEditorToLayer(editor);\n        }\n        this.#selectEditors(newEditors);\n      };\n      const undo = () => {\n        for (const editor of newEditors) {\n          editor.remove();\n        }\n      };\n      this.addCommands({ cmd, undo, mustExec: true });\n    } catch (ex) {\n      warn(`paste: \"${ex.message}\".`);\n    }\n  }\n\n  /**\n   * Keydown callback.\n   * @param {KeyboardEvent} event\n   */\n  keydown(event) {\n    if (!this.isShiftKeyDown && event.key === \"Shift\") {\n      this.isShiftKeyDown = true;\n    }\n    if (\n      this.#mode !== AnnotationEditorType.NONE &&\n      !this.isEditorHandlingKeyboard\n    ) {\n      AnnotationEditorUIManager._keyboardManager.exec(this, event);\n    }\n  }\n\n  /**\n   * Keyup callback.\n   * @param {KeyboardEvent} event\n   */\n  keyup(event) {\n    if (this.isShiftKeyDown && event.key === \"Shift\") {\n      this.isShiftKeyDown = false;\n      if (this.#highlightWhenShiftUp) {\n        this.#highlightWhenShiftUp = false;\n        this.#onSelectEnd(\"main_toolbar\");\n      }\n    }\n  }\n\n  /**\n   * Execute an action for a given name.\n   * For example, the user can click on the \"Undo\" entry in the context menu\n   * and it'll trigger the undo action.\n   */\n  onEditingAction({ name }) {\n    switch (name) {\n      case \"undo\":\n      case \"redo\":\n      case \"delete\":\n      case \"selectAll\":\n        this[name]();\n        break;\n      case \"highlightSelection\":\n        this.highlightSelection(\"context_menu\");\n        break;\n    }\n  }\n\n  /**\n   * Update the different possible states of this manager, e.g. is there\n   * something to undo, redo, ...\n   * @param {Object} details\n   */\n  #dispatchUpdateStates(details) {\n    const hasChanged = Object.entries(details).some(\n      ([key, value]) => this.#previousStates[key] !== value\n    );\n\n    if (hasChanged) {\n      this._eventBus.dispatch(\"annotationeditorstateschanged\", {\n        source: this,\n        details: Object.assign(this.#previousStates, details),\n      });\n      // We could listen on our own event but it sounds like a bit weird and\n      // it's a way to simpler to handle that stuff here instead of having to\n      // add something in every place where an editor can be unselected.\n      if (\n        this.#mode === AnnotationEditorType.HIGHLIGHT &&\n        details.hasSelectedEditor === false\n      ) {\n        this.#dispatchUpdateUI([\n          [AnnotationEditorParamsType.HIGHLIGHT_FREE, true],\n        ]);\n      }\n    }\n  }\n\n  #dispatchUpdateUI(details) {\n    this._eventBus.dispatch(\"annotationeditorparamschanged\", {\n      source: this,\n      details,\n    });\n  }\n\n  /**\n   * Set the editing state.\n   * It can be useful to temporarily disable it when the user is editing a\n   * FreeText annotation.\n   * @param {boolean} isEditing\n   */\n  setEditingState(isEditing) {\n    if (isEditing) {\n      this.#addFocusManager();\n      this.#addCopyPasteListeners();\n      this.#dispatchUpdateStates({\n        isEditing: this.#mode !== AnnotationEditorType.NONE,\n        isEmpty: this.#isEmpty(),\n        hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n        hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n        hasSelectedEditor: false,\n      });\n    } else {\n      this.#removeFocusManager();\n      this.#removeCopyPasteListeners();\n      this.#dispatchUpdateStates({\n        isEditing: false,\n      });\n      this.disableUserSelect(false);\n    }\n  }\n\n  registerEditorTypes(types) {\n    if (this.#editorTypes) {\n      return;\n    }\n    this.#editorTypes = types;\n    for (const editorType of this.#editorTypes) {\n      this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate);\n    }\n  }\n\n  /**\n   * Get an id.\n   * @returns {string}\n   */\n  getId() {\n    return this.#idManager.id;\n  }\n\n  get currentLayer() {\n    return this.#allLayers.get(this.#currentPageIndex);\n  }\n\n  getLayer(pageIndex) {\n    return this.#allLayers.get(pageIndex);\n  }\n\n  get currentPageIndex() {\n    return this.#currentPageIndex;\n  }\n\n  /**\n   * Add a new layer for a page which will contains the editors.\n   * @param {AnnotationEditorLayer} layer\n   */\n  addLayer(layer) {\n    this.#allLayers.set(layer.pageIndex, layer);\n    if (this.#isEnabled) {\n      layer.enable();\n    } else {\n      layer.disable();\n    }\n  }\n\n  /**\n   * Remove a layer.\n   * @param {AnnotationEditorLayer} layer\n   */\n  removeLayer(layer) {\n    this.#allLayers.delete(layer.pageIndex);\n  }\n\n  /**\n   * Change the editor mode (None, FreeText, Ink, ...)\n   * @param {number} mode\n   * @param {string|null} editId\n   * @param {boolean} [isFromKeyboard] - true if the mode change is due to a\n   *   keyboard action.\n   */\n  updateMode(mode, editId = null, isFromKeyboard = false) {\n    if (this.#mode === mode) {\n      return;\n    }\n    this.#mode = mode;\n    if (mode === AnnotationEditorType.NONE) {\n      this.setEditingState(false);\n      this.#disableAll();\n      return;\n    }\n    this.setEditingState(true);\n    this.#enableAll();\n    this.unselectAll();\n    for (const layer of this.#allLayers.values()) {\n      layer.updateMode(mode);\n    }\n    if (!editId && isFromKeyboard) {\n      this.addNewEditorFromKeyboard();\n      return;\n    }\n\n    if (!editId) {\n      return;\n    }\n    for (const editor of this.#allEditors.values()) {\n      if (editor.annotationElementId === editId) {\n        this.setSelected(editor);\n        editor.enterInEditMode();\n        break;\n      } else {\n        editor.unselect();\n      }\n    }\n  }\n\n  addNewEditorFromKeyboard() {\n    if (this.currentLayer.canCreateNewEmptyEditor()) {\n      this.currentLayer.addNewEditor();\n    }\n  }\n\n  /**\n   * Update the toolbar if it's required to reflect the tool currently used.\n   * @param {number} mode\n   * @returns {undefined}\n   */\n  updateToolbar(mode) {\n    if (mode === this.#mode) {\n      return;\n    }\n    this._eventBus.dispatch(\"switchannotationeditormode\", {\n      source: this,\n      mode,\n    });\n  }\n\n  /**\n   * Update a parameter in the current editor or globally.\n   * @param {number} type\n   * @param {*} value\n   */\n  updateParams(type, value) {\n    if (!this.#editorTypes) {\n      return;\n    }\n\n    switch (type) {\n      case AnnotationEditorParamsType.CREATE:\n        const stampType = value;\n        const currentUsername = PDFViewerApplication.appConfig.user;\n        this.currentLayer.addNewEditor({ stampType, currentUsername });\n        return;\n      case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR:\n        this.#mainHighlightColorPicker?.updateColor(value);\n        break;\n      case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n        this._eventBus.dispatch(\"reporttelemetry\", {\n          source: this,\n          details: {\n            type: \"editing\",\n            data: {\n              type: \"highlight\",\n              action: \"toggle_visibility\",\n            },\n          },\n        });\n        (this.#showAllStates ||= new Map()).set(type, value);\n        this.showAllEditors(\"highlight\", value);\n        break;\n    }\n\n    for (const editor of this.#selectedEditors) {\n      editor.updateParams(type, value);\n    }\n\n    for (const editorType of this.#editorTypes) {\n      editorType.updateDefaultParams(type, value);\n    }\n  }\n\n  showAllEditors(type, visible, updateButton = false) {\n    for (const editor of this.#allEditors.values()) {\n      if (editor.editorType === type) {\n        editor.show(visible);\n      }\n    }\n    const state =\n      this.#showAllStates?.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL) ??\n      true;\n    if (state !== visible) {\n      this.#dispatchUpdateUI([\n        [AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible],\n      ]);\n    }\n  }\n\n  enableWaiting(mustWait = false) {\n    if (this.#isWaiting === mustWait) {\n      return;\n    }\n    this.#isWaiting = mustWait;\n    for (const layer of this.#allLayers.values()) {\n      if (mustWait) {\n        layer.disableClick();\n      } else {\n        layer.enableClick();\n      }\n      layer.div.classList.toggle(\"waiting\", mustWait);\n    }\n  }\n\n  /**\n   * Enable all the layers.\n   */\n  #enableAll() {\n    if (!this.#isEnabled) {\n      this.#isEnabled = true;\n      for (const layer of this.#allLayers.values()) {\n        layer.enable();\n      }\n      for (const editor of this.#allEditors.values()) {\n        editor.enable();\n      }\n    }\n  }\n\n  /**\n   * Disable all the layers.\n   */\n  #disableAll() {\n    this.unselectAll();\n    if (this.#isEnabled) {\n      this.#isEnabled = false;\n      for (const layer of this.#allLayers.values()) {\n        layer.disable();\n      }\n      for (const editor of this.#allEditors.values()) {\n        editor.disable();\n      }\n    }\n  }\n\n  /**\n   * Get all the editors belonging to a given page.\n   * @param {number} pageIndex\n   * @returns {Array<AnnotationEditor>}\n   */\n  getEditors(pageIndex) {\n    const editors = [];\n    for (const editor of this.#allEditors.values()) {\n      if (editor.pageIndex === pageIndex) {\n        editors.push(editor);\n      }\n    }\n    return editors;\n  }\n\n  /**\n   * Get an editor with the given id.\n   * @param {string} id\n   * @returns {AnnotationEditor}\n   */\n  getEditor(id) {\n    return this.#allEditors.get(id);\n  }\n\n  /**\n   * Add a new editor.\n   * @param {AnnotationEditor} editor\n   */\n  addEditor(editor) {\n    this.#allEditors.set(editor.id, editor);\n  }\n\n  /**\n   * Remove an editor.\n   * @param {AnnotationEditor} editor\n   */\n  removeEditor(editor) {\n    if (editor.div.contains(document.activeElement)) {\n      if (this.#focusMainContainerTimeoutId) {\n        clearTimeout(this.#focusMainContainerTimeoutId);\n      }\n      this.#focusMainContainerTimeoutId = setTimeout(() => {\n        // When the div is removed from DOM the focus can move on the\n        // document.body, so we need to move it back to the main container.\n        this.focusMainContainer();\n        this.#focusMainContainerTimeoutId = null;\n      }, 0);\n    }\n    this.#allEditors.delete(editor.id);\n    this.unselect(editor);\n    if (\n      !editor.annotationElementId ||\n      !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)\n    ) {\n      this.#annotationStorage?.remove(editor.id);\n    }\n  }\n\n  /**\n   * The annotation element with the given id has been deleted.\n   * @param {AnnotationEditor} editor\n   */\n  addDeletedAnnotationElement(editor) {\n    this.#deletedAnnotationsElementIds.add(editor.annotationElementId);\n    this.addChangedExistingAnnotation(editor);\n    editor.deleted = true;\n  }\n\n  /**\n   * Check if the annotation element with the given id has been deleted.\n   * @param {string} annotationElementId\n   * @returns {boolean}\n   */\n  isDeletedAnnotationElement(annotationElementId) {\n    return this.#deletedAnnotationsElementIds.has(annotationElementId);\n  }\n\n  /**\n   * The annotation element with the given id have been restored.\n   * @param {AnnotationEditor} editor\n   */\n  removeDeletedAnnotationElement(editor) {\n    this.#deletedAnnotationsElementIds.delete(editor.annotationElementId);\n    this.removeChangedExistingAnnotation(editor);\n    editor.deleted = false;\n  }\n\n  /**\n   * Add an editor to the layer it belongs to or add it to the global map.\n   * @param {AnnotationEditor} editor\n   */\n  #addEditorToLayer(editor) {\n    const layer = this.#allLayers.get(editor.pageIndex);\n    if (layer) {\n      layer.addOrRebuild(editor);\n    } else {\n      this.addEditor(editor);\n      this.addToAnnotationStorage(editor);\n    }\n  }\n\n  /**\n   * Set the given editor as the active one.\n   * @param {AnnotationEditor} editor\n   */\n  setActiveEditor(editor) {\n    if (this.#activeEditor === editor) {\n      return;\n    }\n\n    this.#activeEditor = editor;\n    if (editor) {\n      this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    }\n  }\n\n  get #lastSelectedEditor() {\n    let ed = null;\n    for (ed of this.#selectedEditors) {\n      // Iterate to get the last element.\n    }\n    return ed;\n  }\n\n  /**\n   * Update the UI of the active editor.\n   * @param {AnnotationEditor} editor\n   */\n  updateUI(editor) {\n    if (this.#lastSelectedEditor === editor) {\n      this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    }\n  }\n\n  /**\n   * Add or remove an editor the current selection.\n   * @param {AnnotationEditor} editor\n   */\n  toggleSelected(editor) {\n    if (this.#selectedEditors.has(editor)) {\n      this.#selectedEditors.delete(editor);\n      editor.unselect();\n      this.#dispatchUpdateStates({\n        hasSelectedEditor: this.hasSelection,\n      });\n      return;\n    }\n    this.#selectedEditors.add(editor);\n    editor.select();\n    this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: true,\n    });\n  }\n\n  /**\n   * Set the last selected editor.\n   * @param {AnnotationEditor} editor\n   */\n  setSelected(editor) {\n    for (const ed of this.#selectedEditors) {\n      if (ed !== editor) {\n        ed.unselect();\n      }\n    }\n    this.#selectedEditors.clear();\n\n    this.#selectedEditors.add(editor);\n    editor.select();\n    this.#dispatchUpdateUI(editor.propertiesToUpdate);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: true,\n    });\n  }\n\n  /**\n   * Check if the editor is selected.\n   * @param {AnnotationEditor} editor\n   */\n  isSelected(editor) {\n    return this.#selectedEditors.has(editor);\n  }\n\n  get firstSelectedEditor() {\n    return this.#selectedEditors.values().next().value;\n  }\n\n  /**\n   * Unselect an editor.\n   * @param {AnnotationEditor} editor\n   */\n  unselect(editor) {\n    editor.unselect();\n    this.#selectedEditors.delete(editor);\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: this.hasSelection,\n    });\n  }\n\n  get hasSelection() {\n    return this.#selectedEditors.size !== 0;\n  }\n\n  get isEnterHandled() {\n    return (\n      this.#selectedEditors.size === 1 &&\n      this.firstSelectedEditor.isEnterHandled\n    );\n  }\n\n  /**\n   * Undo the last command.\n   */\n  undo() {\n    this.#commandManager.undo();\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(),\n      hasSomethingToRedo: true,\n      isEmpty: this.#isEmpty(),\n    });\n  }\n\n  /**\n   * Redo the last undoed command.\n   */\n  redo() {\n    this.#commandManager.redo();\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: true,\n      hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(),\n      isEmpty: this.#isEmpty(),\n    });\n  }\n\n  /**\n   * Add a command to execute (cmd) and another one to undo it.\n   * @param {Object} params\n   */\n  addCommands(params) {\n    this.#commandManager.add(params);\n    this.#dispatchUpdateStates({\n      hasSomethingToUndo: true,\n      hasSomethingToRedo: false,\n      isEmpty: this.#isEmpty(),\n    });\n  }\n\n  #isEmpty() {\n    if (this.#allEditors.size === 0) {\n      return true;\n    }\n\n    if (this.#allEditors.size === 1) {\n      for (const editor of this.#allEditors.values()) {\n        return editor.isEmpty();\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Delete the current editor or all.\n   */\n  delete() {\n    this.commitOrRemove();\n    if (!this.hasSelection) {\n      return;\n    }\n\n    const editors = [...this.#selectedEditors];\n    const cmd = () => {\n      for (const editor of editors) {\n        editor.remove();\n      }\n    };\n    const undo = () => {\n      for (const editor of editors) {\n        this.#addEditorToLayer(editor);\n      }\n    };\n\n    this.addCommands({ cmd, undo, mustExec: true });\n  }\n\n  commitOrRemove() {\n    // An editor is being edited so just commit it.\n    this.#activeEditor?.commitOrRemove();\n  }\n\n  hasSomethingToControl() {\n    return this.#activeEditor || this.hasSelection;\n  }\n\n  /**\n   * Select the editors.\n   * @param {Array<AnnotationEditor>} editors\n   */\n  #selectEditors(editors) {\n    for (const editor of this.#selectedEditors) {\n      editor.unselect();\n    }\n    this.#selectedEditors.clear();\n    for (const editor of editors) {\n      if (editor.isEmpty()) {\n        continue;\n      }\n      this.#selectedEditors.add(editor);\n      editor.select();\n    }\n    this.#dispatchUpdateStates({ hasSelectedEditor: this.hasSelection });\n  }\n\n  /**\n   * Select all the editors.\n   */\n  selectAll() {\n    for (const editor of this.#selectedEditors) {\n      editor.commit();\n    }\n    this.#selectEditors(this.#allEditors.values());\n  }\n\n  /**\n   * Unselect all the selected editors.\n   */\n  unselectAll() {\n    if (this.#activeEditor) {\n      // An editor is being edited so just commit it.\n      this.#activeEditor.commitOrRemove();\n      if (this.#mode !== AnnotationEditorType.NONE) {\n        // If the mode is NONE, we want to really unselect the editor, hence we\n        // mustn't return here.\n        return;\n      }\n    }\n\n    if (!this.hasSelection) {\n      return;\n    }\n    for (const editor of this.#selectedEditors) {\n      editor.unselect();\n    }\n    this.#selectedEditors.clear();\n    this.#dispatchUpdateStates({\n      hasSelectedEditor: false,\n    });\n  }\n\n  translateSelectedEditors(x, y, noCommit = false) {\n    if (!noCommit) {\n      this.commitOrRemove();\n    }\n    if (!this.hasSelection) {\n      return;\n    }\n\n    this.#translation[0] += x;\n    this.#translation[1] += y;\n    const [totalX, totalY] = this.#translation;\n    const editors = [...this.#selectedEditors];\n\n    // We don't want to have an undo/redo for each translation so we wait a bit\n    // before adding the command to the command manager.\n    const TIME_TO_WAIT = 1000;\n\n    if (this.#translationTimeoutId) {\n      clearTimeout(this.#translationTimeoutId);\n    }\n\n    this.#translationTimeoutId = setTimeout(() => {\n      this.#translationTimeoutId = null;\n      this.#translation[0] = this.#translation[1] = 0;\n\n      this.addCommands({\n        cmd: () => {\n          for (const editor of editors) {\n            if (this.#allEditors.has(editor.id)) {\n              editor.translateInPage(totalX, totalY);\n            }\n          }\n        },\n        undo: () => {\n          for (const editor of editors) {\n            if (this.#allEditors.has(editor.id)) {\n              editor.translateInPage(-totalX, -totalY);\n            }\n          }\n        },\n        mustExec: false,\n      });\n    }, TIME_TO_WAIT);\n\n    for (const editor of editors) {\n      editor.translateInPage(x, y);\n    }\n  }\n\n  /**\n   * Set up the drag session for moving the selected editors.\n   */\n  setUpDragSession() {\n    // Note: don't use any references to the editor's parent which can be null\n    // if the editor belongs to a destroyed page.\n    if (!this.hasSelection) {\n      return;\n    }\n    // Avoid to have spurious text selection in the text layer when dragging.\n    this.disableUserSelect(true);\n    this.#draggingEditors = new Map();\n    for (const editor of this.#selectedEditors) {\n      this.#draggingEditors.set(editor, {\n        savedX: editor.x,\n        savedY: editor.y,\n        savedPageIndex: editor.pageIndex,\n        newX: 0,\n        newY: 0,\n        newPageIndex: -1,\n      });\n    }\n  }\n\n  /**\n   * Ends the drag session.\n   * @returns {boolean} true if at least one editor has been moved.\n   */\n  endDragSession() {\n    if (!this.#draggingEditors) {\n      return false;\n    }\n    this.disableUserSelect(false);\n    const map = this.#draggingEditors;\n    this.#draggingEditors = null;\n    let mustBeAddedInUndoStack = false;\n\n    for (const [{ x, y, pageIndex }, value] of map) {\n      value.newX = x;\n      value.newY = y;\n      value.newPageIndex = pageIndex;\n      mustBeAddedInUndoStack ||=\n        x !== value.savedX ||\n        y !== value.savedY ||\n        pageIndex !== value.savedPageIndex;\n    }\n\n    if (!mustBeAddedInUndoStack) {\n      return false;\n    }\n\n    const move = (editor, x, y, pageIndex) => {\n      if (this.#allEditors.has(editor.id)) {\n        // The editor can be undone/redone on a page which is not visible (and\n        // which potentially has no annotation editor layer), hence we need to\n        // use the pageIndex instead of the parent.\n        const parent = this.#allLayers.get(pageIndex);\n        if (parent) {\n          editor._setParentAndPosition(parent, x, y);\n        } else {\n          editor.pageIndex = pageIndex;\n          editor.x = x;\n          editor.y = y;\n        }\n      }\n    };\n\n    this.addCommands({\n      cmd: () => {\n        for (const [editor, { newX, newY, newPageIndex }] of map) {\n          move(editor, newX, newY, newPageIndex);\n        }\n      },\n      undo: () => {\n        for (const [editor, { savedX, savedY, savedPageIndex }] of map) {\n          move(editor, savedX, savedY, savedPageIndex);\n        }\n      },\n      mustExec: true,\n    });\n\n    return true;\n  }\n\n  /**\n   * Drag the set of selected editors.\n   * @param {number} tx\n   * @param {number} ty\n   */\n  dragSelectedEditors(tx, ty) {\n    if (!this.#draggingEditors) {\n      return;\n    }\n    for (const editor of this.#draggingEditors.keys()) {\n      editor.drag(tx, ty);\n    }\n  }\n\n  /**\n   * Rebuild the editor (usually on undo/redo actions) on a potentially\n   * non-rendered page.\n   * @param {AnnotationEditor} editor\n   */\n  rebuild(editor) {\n    if (editor.parent === null) {\n      const parent = this.getLayer(editor.pageIndex);\n      if (parent) {\n        parent.changeParent(editor);\n        parent.addOrRebuild(editor);\n      } else {\n        this.addEditor(editor);\n        this.addToAnnotationStorage(editor);\n        editor.rebuild();\n      }\n    } else {\n      editor.parent.addOrRebuild(editor);\n    }\n  }\n\n  get isEditorHandlingKeyboard() {\n    return (\n      this.getActive()?.shouldGetKeyboardEvents() ||\n      (this.#selectedEditors.size === 1 &&\n        this.firstSelectedEditor.shouldGetKeyboardEvents())\n    );\n  }\n\n  /**\n   * Is the current editor the one passed as argument?\n   * @param {AnnotationEditor} editor\n   * @returns\n   */\n  isActive(editor) {\n    return this.#activeEditor === editor;\n  }\n\n  /**\n   * Get the current active editor.\n   * @returns {AnnotationEditor|null}\n   */\n  getActive() {\n    return this.#activeEditor;\n  }\n\n  /**\n   * Get the current editor mode.\n   * @returns {number}\n   */\n  getMode() {\n    return this.#mode;\n  }\n\n  get imageManager() {\n    return shadow(this, \"imageManager\", new ImageManager());\n  }\n\n  getSelectionBoxes(textLayer) {\n    if (!textLayer) {\n      return null;\n    }\n    const selection = document.getSelection();\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      if (\n        !textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)\n      ) {\n        return null;\n      }\n    }\n\n    const {\n      x: layerX,\n      y: layerY,\n      width: parentWidth,\n      height: parentHeight,\n    } = textLayer.getBoundingClientRect();\n\n    // We must rotate the boxes because we want to have them in the non-rotated\n    // page coordinates.\n    let rotator;\n    switch (textLayer.getAttribute(\"data-main-rotation\")) {\n      case \"90\":\n        rotator = (x, y, w, h) => ({\n          x: (y - layerY) / parentHeight,\n          y: 1 - (x + w - layerX) / parentWidth,\n          width: h / parentHeight,\n          height: w / parentWidth,\n        });\n        break;\n      case \"180\":\n        rotator = (x, y, w, h) => ({\n          x: 1 - (x + w - layerX) / parentWidth,\n          y: 1 - (y + h - layerY) / parentHeight,\n          width: w / parentWidth,\n          height: h / parentHeight,\n        });\n        break;\n      case \"270\":\n        rotator = (x, y, w, h) => ({\n          x: 1 - (y + h - layerY) / parentHeight,\n          y: (x - layerX) / parentWidth,\n          width: h / parentHeight,\n          height: w / parentWidth,\n        });\n        break;\n      default:\n        rotator = (x, y, w, h) => ({\n          x: (x - layerX) / parentWidth,\n          y: (y - layerY) / parentHeight,\n          width: w / parentWidth,\n          height: h / parentHeight,\n        });\n        break;\n    }\n\n    const boxes = [];\n    for (let i = 0, ii = selection.rangeCount; i < ii; i++) {\n      const range = selection.getRangeAt(i);\n      if (range.collapsed) {\n        continue;\n      }\n      for (const { x, y, width, height } of range.getClientRects()) {\n        if (width === 0 || height === 0) {\n          continue;\n        }\n        boxes.push(rotator(x, y, width, height));\n      }\n    }\n    return boxes.length === 0 ? null : boxes;\n  }\n\n  addChangedExistingAnnotation({ annotationElementId, id }) {\n    (this.#changedExistingAnnotations ||= new Map()).set(\n      annotationElementId,\n      id\n    );\n  }\n\n  removeChangedExistingAnnotation({ annotationElementId }) {\n    this.#changedExistingAnnotations?.delete(annotationElementId);\n  }\n\n  renderAnnotationElement(annotation) {\n    const editorId = this.#changedExistingAnnotations?.get(annotation.data.id);\n    if (!editorId) {\n      return;\n    }\n    const editor = this.#annotationStorage.getRawValue(editorId);\n    if (!editor) {\n      return;\n    }\n    if (this.#mode === AnnotationEditorType.NONE && !editor.hasBeenModified) {\n      return;\n    }\n    editor.renderAnnotationElement(annotation);\n  }\n}\n\nexport {\n  AnnotationEditorUIManager,\n  bindEvents,\n  ColorManager,\n  CommandManager,\n  KeyboardManager,\n  opacityToHex,\n};\n","/* Copyright 2023 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 { noContextMenu } from \"../display_utils.js\";\n\nclass AltText {\n  #altText = \"\";\n\n  #altTextDecorative = false;\n\n  #altTextButton = null;\n\n  #altTextTooltip = null;\n\n  #altTextTooltipTimeout = null;\n\n  #altTextWasFromKeyBoard = false;\n\n  #editor = null;\n\n  static _l10nPromise = null;\n\n  constructor(editor) {\n    this.#editor = editor;\n  }\n\n  static initialize(l10nPromise) {\n    AltText._l10nPromise ||= l10nPromise;\n  }\n\n  async render() {\n    const altText = (this.#altTextButton = document.createElement(\"button\"));\n    altText.className = \"altText\";\n    const msg = await AltText._l10nPromise.get(\n      \"pdfjs-editor-alt-text-button-label\"\n    );\n    altText.textContent = msg;\n    altText.setAttribute(\"aria-label\", msg);\n    altText.tabIndex = \"0\";\n    altText.addEventListener(\"contextmenu\", noContextMenu);\n    altText.addEventListener(\"pointerdown\", event => event.stopPropagation());\n\n    const onClick = event => {\n      event.preventDefault();\n      this.#editor._uiManager.editAltText(this.#editor);\n    };\n    altText.addEventListener(\"click\", onClick, { capture: true });\n    altText.addEventListener(\"keydown\", event => {\n      if (event.target === altText && event.key === \"Enter\") {\n        this.#altTextWasFromKeyBoard = true;\n        onClick(event);\n      }\n    });\n    await this.#setState();\n\n    return altText;\n  }\n\n  finish() {\n    if (!this.#altTextButton) {\n      return;\n    }\n    this.#altTextButton.focus({ focusVisible: this.#altTextWasFromKeyBoard });\n    this.#altTextWasFromKeyBoard = false;\n  }\n\n  isEmpty() {\n    return !this.#altText && !this.#altTextDecorative;\n  }\n\n  get data() {\n    return {\n      altText: this.#altText,\n      decorative: this.#altTextDecorative,\n    };\n  }\n\n  /**\n   * Set the alt text data.\n   */\n  set data({ altText, decorative }) {\n    if (this.#altText === altText && this.#altTextDecorative === decorative) {\n      return;\n    }\n    this.#altText = altText;\n    this.#altTextDecorative = decorative;\n    this.#setState();\n  }\n\n  toggle(enabled = false) {\n    if (!this.#altTextButton) {\n      return;\n    }\n    if (!enabled && this.#altTextTooltipTimeout) {\n      clearTimeout(this.#altTextTooltipTimeout);\n      this.#altTextTooltipTimeout = null;\n    }\n    this.#altTextButton.disabled = !enabled;\n  }\n\n  destroy() {\n    this.#altTextButton?.remove();\n    this.#altTextButton = null;\n    this.#altTextTooltip = null;\n  }\n\n  async #setState() {\n    const button = this.#altTextButton;\n    if (!button) {\n      return;\n    }\n    if (!this.#altText && !this.#altTextDecorative) {\n      button.classList.remove(\"done\");\n      this.#altTextTooltip?.remove();\n      return;\n    }\n    button.classList.add(\"done\");\n\n    AltText._l10nPromise\n      .get(\"pdfjs-editor-alt-text-edit-button-label\")\n      .then(msg => {\n        button.setAttribute(\"aria-label\", msg);\n      });\n    let tooltip = this.#altTextTooltip;\n    if (!tooltip) {\n      this.#altTextTooltip = tooltip = document.createElement(\"span\");\n      tooltip.className = \"tooltip\";\n      tooltip.setAttribute(\"role\", \"tooltip\");\n      const id = (tooltip.id = `alt-text-tooltip-${this.#editor.id}`);\n      button.setAttribute(\"aria-describedby\", id);\n\n      const DELAY_TO_SHOW_TOOLTIP = 100;\n      button.addEventListener(\"mouseenter\", () => {\n        this.#altTextTooltipTimeout = setTimeout(() => {\n          this.#altTextTooltipTimeout = null;\n          this.#altTextTooltip.classList.add(\"show\");\n          this.#editor._reportTelemetry({\n            action: \"alt_text_tooltip\",\n          });\n        }, DELAY_TO_SHOW_TOOLTIP);\n      });\n      button.addEventListener(\"mouseleave\", () => {\n        if (this.#altTextTooltipTimeout) {\n          clearTimeout(this.#altTextTooltipTimeout);\n          this.#altTextTooltipTimeout = null;\n        }\n        this.#altTextTooltip?.classList.remove(\"show\");\n      });\n    }\n    tooltip.innerText = this.#altTextDecorative\n      ? await AltText._l10nPromise.get(\n          \"pdfjs-editor-alt-text-decorative-tooltip\"\n        )\n      : this.#altText;\n\n    if (!tooltip.parentNode) {\n      button.append(tooltip);\n    }\n\n    const element = this.#editor.getImageForAltText();\n    element?.setAttribute(\"aria-describedby\", tooltip.id);\n  }\n}\n\nexport { AltText };\n","/* Copyright 2022 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// eslint-disable-next-line max-len\n/** @typedef {import(\"./annotation_editor_layer.js\").AnnotationEditorLayer} AnnotationEditorLayer */\n\nimport {\n  AnnotationEditorUIManager,\n  bindEvents,\n  ColorManager,\n  KeyboardManager,\n} from \"./tools.js\";\nimport { FeatureTest, shadow, unreachable } from \"../../shared/util.js\";\nimport { AltText } from \"./alt_text.js\";\nimport { EditorToolbar } from \"./toolbar.js\";\nimport { noContextMenu } from \"../display_utils.js\";\n\n/**\n * @typedef {Object} AnnotationEditorParameters\n * @property {AnnotationEditorUIManager} uiManager - the global manager\n * @property {AnnotationEditorLayer} parent - the layer containing this editor\n * @property {string} id - editor id\n * @property {number} x - x-coordinate\n * @property {number} y - y-coordinate\n */\n\n/**\n * Base class for editors.\n */\nclass AnnotationEditor {\n  #allResizerDivs = null;\n\n  #altText = null;\n\n  #disabled = false;\n\n  #keepAspectRatio = false;\n\n  #resizersDiv = null;\n\n  #savedDimensions = null;\n\n  #boundFocusin = this.focusin.bind(this);\n\n  #boundFocusout = this.focusout.bind(this);\n\n  #editToolbar = null;\n\n  #focusedResizerName = \"\";\n\n  #hasBeenClicked = false;\n\n  #initialPosition = null;\n\n  #isEditing = false;\n\n  #isInEditMode = false;\n\n  #isResizerEnabledForKeyboard = false;\n\n  #moveInDOMTimeout = null;\n\n  #prevDragX = 0;\n\n  #prevDragY = 0;\n\n  #telemetryTimeouts = null;\n\n  _initialOptions = Object.create(null);\n\n  _isVisible = true;\n\n  _uiManager = null;\n\n  _focusEventsAllowed = true;\n\n  _l10nPromise = null;\n\n  #isDraggable = false;\n\n  #zIndex = AnnotationEditor._zIndex++;\n\n  static _borderLineWidth = -1;\n\n  static _colorManager = new ColorManager();\n\n  static _zIndex = 1;\n\n  // Time to wait (in ms) before sending the telemetry data.\n  // We wait a bit to avoid sending too many requests when changing something\n  // like the thickness of a line.\n  static _telemetryTimeout = 1000;\n\n  static get _resizerKeyboardManager() {\n    const resize = AnnotationEditor.prototype._resizeWithKeyboard;\n    const small = AnnotationEditorUIManager.TRANSLATE_SMALL;\n    const big = AnnotationEditorUIManager.TRANSLATE_BIG;\n\n    return shadow(\n      this,\n      \"_resizerKeyboardManager\",\n      new KeyboardManager([\n        [[\"ArrowLeft\", \"mac+ArrowLeft\"], resize, { args: [-small, 0] }],\n        [\n          [\"ctrl+ArrowLeft\", \"mac+shift+ArrowLeft\"],\n          resize,\n          { args: [-big, 0] },\n        ],\n        [[\"ArrowRight\", \"mac+ArrowRight\"], resize, { args: [small, 0] }],\n        [\n          [\"ctrl+ArrowRight\", \"mac+shift+ArrowRight\"],\n          resize,\n          { args: [big, 0] },\n        ],\n        [[\"ArrowUp\", \"mac+ArrowUp\"], resize, { args: [0, -small] }],\n        [[\"ctrl+ArrowUp\", \"mac+shift+ArrowUp\"], resize, { args: [0, -big] }],\n        [[\"ArrowDown\", \"mac+ArrowDown\"], resize, { args: [0, small] }],\n        [[\"ctrl+ArrowDown\", \"mac+shift+ArrowDown\"], resize, { args: [0, big] }],\n        [\n          [\"Escape\", \"mac+Escape\"],\n          AnnotationEditor.prototype._stopResizingWithKeyboard,\n        ],\n      ])\n    );\n  }\n\n  /**\n   * @param {AnnotationEditorParameters} parameters\n   */\n  constructor(parameters) {\n    if (this.constructor === AnnotationEditor) {\n      unreachable(\"Cannot initialize AnnotationEditor.\");\n    }\n\n    this.parent = parameters.parent;\n    this.id = parameters.id;\n    this.width = this.height = null;\n    this.pageIndex = parameters.parent.pageIndex;\n    this.name = parameters.name;\n    this.div = null;\n    this._uiManager = parameters.uiManager;\n    this.annotationElementId = null;\n    this._willKeepAspectRatio = false;\n    this._initialOptions.isCentered = parameters.isCentered;\n    this._structTreeParentId = null;\n\n    const {\n      rotation,\n      rawDims: { pageWidth, pageHeight, pageX, pageY },\n    } = this.parent.viewport;\n\n    this.rotation = rotation;\n    this.pageRotation =\n      (360 + rotation - this._uiManager.viewParameters.rotation) % 360;\n    this.pageDimensions = [pageWidth, pageHeight];\n    this.pageTranslation = [pageX, pageY];\n\n    const [width, height] = this.parentDimensions;\n    this.x = parameters.x / width;\n    this.y = parameters.y / height;\n\n    this.left = parameters.clientX;\n    this.top = parameters.clientY;\n\n    this.isAttachedToDOM = false;\n    this.deleted = false;\n  }\n\n  get editorType() {\n    return Object.getPrototypeOf(this).constructor._type;\n  }\n\n  static get _defaultLineColor() {\n    return shadow(\n      this,\n      \"_defaultLineColor\",\n      this._colorManager.getHexCode(\"CanvasText\")\n    );\n  }\n\n  static deleteAnnotationElement(editor) {\n    const fakeEditor = new FakeEditor({\n      id: editor.parent.getNextId(),\n      parent: editor.parent,\n      uiManager: editor._uiManager,\n    });\n    fakeEditor.annotationElementId = editor.annotationElementId;\n    fakeEditor.deleted = true;\n    fakeEditor._uiManager.addToAnnotationStorage(fakeEditor);\n  }\n\n  /**\n   * Initialize the l10n stuff for this type of editor.\n   * @param {Object} l10n\n   */\n  static initialize(l10n, _uiManager, options) {\n    AnnotationEditor._l10nPromise ||= new Map(\n      [\n        \"pdfjs-editor-alt-text-button-label\",\n        \"pdfjs-editor-alt-text-edit-button-label\",\n        \"pdfjs-editor-alt-text-decorative-tooltip\",\n        \"pdfjs-editor-resizer-label-topLeft\",\n        \"pdfjs-editor-resizer-label-topMiddle\",\n        \"pdfjs-editor-resizer-label-topRight\",\n        \"pdfjs-editor-resizer-label-middleRight\",\n        \"pdfjs-editor-resizer-label-bottomRight\",\n        \"pdfjs-editor-resizer-label-bottomMiddle\",\n        \"pdfjs-editor-resizer-label-bottomLeft\",\n        \"pdfjs-editor-resizer-label-middleLeft\",\n      ].map(str => [\n        str,\n        l10n.get(str.replaceAll(/([A-Z])/g, c => `-${c.toLowerCase()}`)),\n      ])\n    );\n    if (options?.strings) {\n      for (const str of options.strings) {\n        AnnotationEditor._l10nPromise.set(str, l10n.get(str));\n      }\n    }\n    if (AnnotationEditor._borderLineWidth !== -1) {\n      return;\n    }\n    const style = getComputedStyle(document.documentElement);\n    AnnotationEditor._borderLineWidth =\n      parseFloat(style.getPropertyValue(\"--outline-width\")) || 0;\n  }\n\n  /**\n   * Update the default parameters for this type of editor.\n   * @param {number} _type\n   * @param {*} _value\n   */\n  static updateDefaultParams(_type, _value) {}\n\n  /**\n   * Get the default properties to set in the UI for this type of editor.\n   * @returns {Array}\n   */\n  static get defaultPropertiesToUpdate() {\n    return [];\n  }\n\n  /**\n   * Check if this kind of editor is able to handle the given mime type for\n   * pasting.\n   * @param {string} mime\n   * @returns {boolean}\n   */\n  static isHandlingMimeForPasting(mime) {\n    return false;\n  }\n\n  /**\n   * Extract the data from the clipboard item and delegate the creation of the\n   * editor to the parent.\n   * @param {DataTransferItem} item\n   * @param {AnnotationEditorLayer} parent\n   */\n  static paste(item, parent) {\n    unreachable(\"Not implemented\");\n  }\n\n  /**\n   * Get the properties to update in the UI for this editor.\n   * @returns {Array}\n   */\n  get propertiesToUpdate() {\n    return [];\n  }\n\n  get _isDraggable() {\n    return this.#isDraggable;\n  }\n\n  set _isDraggable(value) {\n    this.#isDraggable = value;\n    this.div?.classList.toggle(\"draggable\", value);\n  }\n\n  /**\n   * @returns {boolean} true if the editor handles the Enter key itself.\n   */\n  get isEnterHandled() {\n    return true;\n  }\n\n  center() {\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    switch (this.parentRotation) {\n      case 90:\n        this.x -= (this.height * pageHeight) / (pageWidth * 2);\n        this.y += (this.width * pageWidth) / (pageHeight * 2);\n        break;\n      case 180:\n        this.x += this.width / 2;\n        this.y += this.height / 2;\n        break;\n      case 270:\n        this.x += (this.height * pageHeight) / (pageWidth * 2);\n        this.y -= (this.width * pageWidth) / (pageHeight * 2);\n        break;\n      default:\n        this.x -= this.width / 2;\n        this.y -= this.height / 2;\n        break;\n    }\n    this.fixAndSetPosition();\n  }\n\n  /**\n   * Add some commands into the CommandManager (undo/redo stuff).\n   * @param {Object} params\n   */\n  addCommands(params) {\n    this._uiManager.addCommands(params);\n  }\n\n  get currentLayer() {\n    return this._uiManager.currentLayer;\n  }\n\n  /**\n   * This editor will be behind the others.\n   */\n  setInBackground() {\n    this.div.style.zIndex = 0;\n  }\n\n  /**\n   * This editor will be in the foreground.\n   */\n  setInForeground() {\n    this.div.style.zIndex = this.#zIndex;\n  }\n\n  setParent(parent) {\n    if (parent !== null) {\n      this.pageIndex = parent.pageIndex;\n      this.pageDimensions = parent.pageDimensions;\n    } else {\n      // The editor is being removed from the DOM, so we need to stop resizing.\n      this.#stopResizing();\n    }\n    this.parent = parent;\n  }\n\n  /**\n   * onfocus callback.\n   */\n  focusin(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n    if (!this.#hasBeenClicked) {\n      this.parent.setSelected(this);\n    } else {\n      this.#hasBeenClicked = false;\n    }\n  }\n\n  /**\n   * onblur callback.\n   * @param {FocusEvent} event\n   */\n  focusout(event) {\n    if (!this._focusEventsAllowed) {\n      return;\n    }\n\n    if (!this.isAttachedToDOM) {\n      return;\n    }\n\n    // In case of focusout, the relatedTarget is the element which\n    // is grabbing the focus.\n    // So if the related target is an element under the div for this\n    // editor, then the editor isn't unactive.\n    const target = event.relatedTarget;\n    if (target?.closest(`#${this.id}`)) {\n      return;\n    }\n\n    event.preventDefault();\n\n    if (!this.parent?.isMultipleSelection) {\n      this.commitOrRemove();\n    }\n  }\n\n  commitOrRemove() {\n    if (this.isEmpty()) {\n      this.remove();\n    } else {\n      this.commit();\n    }\n  }\n\n  /**\n   * Commit the data contained in this editor.\n   */\n  commit() {\n    this.addToAnnotationStorage();\n  }\n\n  addToAnnotationStorage() {\n    this._uiManager.addToAnnotationStorage(this);\n  }\n\n  /**\n   * Set the editor position within its parent.\n   * @param {number} x\n   * @param {number} y\n   * @param {number} tx - x-translation in screen coordinates.\n   * @param {number} ty - y-translation in screen coordinates.\n   */\n  setAt(x, y, tx, ty) {\n    const [width, height] = this.parentDimensions;\n    [tx, ty] = this.screenToPageTranslation(tx, ty);\n\n    this.x = (x + tx) / width;\n    this.y = (y + ty) / height;\n\n    this.fixAndSetPosition();\n  }\n\n  #translate([width, height], x, y) {\n    [x, y] = this.screenToPageTranslation(x, y);\n\n    this.x += x / width;\n    this.y += y / height;\n\n    this.fixAndSetPosition();\n  }\n\n  /**\n   * Translate the editor position within its parent.\n   * @param {number} x - x-translation in screen coordinates.\n   * @param {number} y - y-translation in screen coordinates.\n   */\n  translate(x, y) {\n    // We don't change the initial position because the move here hasn't been\n    // done by the user.\n    this.#translate(this.parentDimensions, x, y);\n  }\n\n  /**\n   * Translate the editor position within its page and adjust the scroll\n   * in order to have the editor in the view.\n   * @param {number} x - x-translation in page coordinates.\n   * @param {number} y - y-translation in page coordinates.\n   */\n  translateInPage(x, y) {\n    this.#initialPosition ||= [this.x, this.y];\n    this.#translate(this.pageDimensions, x, y);\n    this.div.scrollIntoView({ block: \"nearest\" });\n  }\n\n  drag(tx, ty) {\n    this.#initialPosition ||= [this.x, this.y];\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.x += tx / parentWidth;\n    this.y += ty / parentHeight;\n    if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {\n      // It's possible to not have a parent: for example, when the user is\n      // dragging all the selected editors but this one on a page which has been\n      // destroyed.\n      // It's why we need to check for it. In such a situation, it isn't really\n      // a problem to not find a new parent: it's something which is related to\n      // what the user is seeing, hence it depends on how pages are layed out.\n\n      // The element will be outside of its parent so change the parent.\n      const { x, y } = this.div.getBoundingClientRect();\n      if (this.parent.findNewParent(this, x, y)) {\n        this.x -= Math.floor(this.x);\n        this.y -= Math.floor(this.y);\n      }\n    }\n\n    // The editor can be moved wherever the user wants, so we don't need to fix\n    // the position: it'll be done when the user will release the mouse button.\n\n    let { x, y } = this;\n    const [bx, by] = this.getBaseTranslation();\n    x += bx;\n    y += by;\n\n    if ((y < 0 && this.pageIndex === 0) || x < 0) return;\n\n    this.div.style.left = `${(100 * x).toFixed(2)}%`;\n    this.div.style.top = `${(100 * y).toFixed(2)}%`;\n    this.div.scrollIntoView({ block: \"nearest\" });\n  }\n\n  get _hasBeenMoved() {\n    return (\n      !!this.#initialPosition &&\n      (this.#initialPosition[0] !== this.x ||\n        this.#initialPosition[1] !== this.y)\n    );\n  }\n\n  /**\n   * Get the translation to take into account the editor border.\n   * The CSS engine positions the element by taking the border into account so\n   * we must apply the opposite translation to have the editor in the right\n   * position.\n   * @returns {Array<number>}\n   */\n  getBaseTranslation() {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const { _borderLineWidth } = AnnotationEditor;\n    const x = _borderLineWidth / parentWidth;\n    const y = _borderLineWidth / parentHeight;\n    switch (this.rotation) {\n      case 90:\n        return [-x, y];\n      case 180:\n        return [x, y];\n      case 270:\n        return [x, -y];\n      default:\n        return [-x, -y];\n    }\n  }\n\n  /**\n   * @returns {boolean} true if position must be fixed (i.e. make the x and y\n   * living in the page).\n   */\n  get _mustFixPosition() {\n    return true;\n  }\n\n  /**\n   * Fix the position of the editor in order to keep it inside its parent page.\n   * @param {number} [rotation] - the rotation of the page.\n   */\n  fixAndSetPosition(rotation = this.rotation) {\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    let { x, y, width, height } = this;\n    width *= pageWidth;\n    height *= pageHeight;\n    x *= pageWidth;\n    y *= pageHeight;\n\n    if (this._mustFixPosition) {\n      switch (rotation) {\n        case 0:\n          x = Math.max(0, Math.min(pageWidth - width, x));\n          y = Math.max(0, Math.min(pageHeight - height, y));\n          break;\n        case 90:\n          x = Math.max(0, Math.min(pageWidth - height, x));\n          y = Math.min(pageHeight, Math.max(width, y));\n          break;\n        case 180:\n          x = Math.min(pageWidth, Math.max(width, x));\n          y = Math.min(pageHeight, Math.max(height, y));\n          break;\n        case 270:\n          x = Math.min(pageWidth, Math.max(height, x));\n          y = Math.max(0, Math.min(pageHeight - width, y));\n          break;\n      }\n    }\n\n    this.x = x /= pageWidth;\n    this.y = y /= pageHeight;\n\n    const [bx, by] = this.getBaseTranslation();\n    x += bx;\n    y += by;\n\n    if (this.div) {\n      const { style } = this.div;\n      style.left = `${(100 * x).toFixed(2)}%`;\n      style.top = `${(100 * y).toFixed(2)}%`;\n\n      this.moveInDOM();\n    }\n  }\n\n  static #rotatePoint(x, y, angle) {\n    switch (angle) {\n      case 90:\n        return [y, -x];\n      case 180:\n        return [-x, -y];\n      case 270:\n        return [-y, x];\n      default:\n        return [x, y];\n    }\n  }\n\n  /**\n   * Convert a screen translation into a page one.\n   * @param {number} x\n   * @param {number} y\n   */\n  screenToPageTranslation(x, y) {\n    return AnnotationEditor.#rotatePoint(x, y, this.parentRotation);\n  }\n\n  /**\n   * Convert a page translation into a screen one.\n   * @param {number} x\n   * @param {number} y\n   */\n  pageTranslationToScreen(x, y) {\n    return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation);\n  }\n\n  #getRotationMatrix(rotation) {\n    switch (rotation) {\n      case 90: {\n        const [pageWidth, pageHeight] = this.pageDimensions;\n        return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0];\n      }\n      case 180:\n        return [-1, 0, 0, -1];\n      case 270: {\n        const [pageWidth, pageHeight] = this.pageDimensions;\n        return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0];\n      }\n      default:\n        return [1, 0, 0, 1];\n    }\n  }\n\n  get parentScale() {\n    return this._uiManager.viewParameters.realScale;\n  }\n\n  get parentRotation() {\n    return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;\n  }\n\n  get parentDimensions() {\n    const {\n      parentScale,\n      pageDimensions: [pageWidth, pageHeight],\n    } = this;\n    const scaledWidth = pageWidth * parentScale;\n    const scaledHeight = pageHeight * parentScale;\n    return FeatureTest.isCSSRoundSupported\n      ? [Math.round(scaledWidth), Math.round(scaledHeight)]\n      : [scaledWidth, scaledHeight];\n  }\n\n  /**\n   * Set the dimensions of this editor.\n   * @param {number} width\n   * @param {number} height\n   */\n  setDims(width, height) {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    this.div.style.width = `${((100 * width) / parentWidth).toFixed(2)}%`;\n    if (!this.#keepAspectRatio) {\n      this.div.style.height = `${((100 * height) / parentHeight).toFixed(2)}%`;\n    }\n  }\n\n  fixDims() {\n    const { style } = this.div;\n    const { height, width } = style;\n    const widthPercent = width.endsWith(\"%\");\n    const heightPercent = !this.#keepAspectRatio && height.endsWith(\"%\");\n    if (widthPercent && heightPercent) {\n      return;\n    }\n\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    if (!widthPercent) {\n      style.width = `${((100 * parseFloat(width)) / parentWidth).toFixed(2)}%`;\n    }\n    if (!this.#keepAspectRatio && !heightPercent) {\n      style.height = `${((100 * parseFloat(height)) / parentHeight).toFixed(\n        2\n      )}%`;\n    }\n  }\n\n  /**\n   * Get the translation used to position this editor when it's created.\n   * @returns {Array<number>}\n   */\n  getInitialTranslation() {\n    return [0, 0];\n  }\n\n  #createResizers() {\n    if (this.#resizersDiv) {\n      return;\n    }\n    this.#resizersDiv = document.createElement(\"div\");\n    this.#resizersDiv.classList.add(\"resizers\");\n    // When the resizers are used with the keyboard, they're focusable, hence\n    // we want to have them in this order (top left, top middle, top right, ...)\n    // in the DOM to have the focus order correct.\n    const classes = this._willKeepAspectRatio\n      ? [\"topLeft\", \"topRight\", \"bottomRight\", \"bottomLeft\"]\n      : [\n          \"topLeft\",\n          \"topMiddle\",\n          \"topRight\",\n          \"middleRight\",\n          \"bottomRight\",\n          \"bottomMiddle\",\n          \"bottomLeft\",\n          \"middleLeft\",\n        ];\n    for (const name of classes) {\n      const div = document.createElement(\"div\");\n      this.#resizersDiv.append(div);\n      div.classList.add(\"resizer\", name);\n      div.setAttribute(\"data-resizer-name\", name);\n      div.addEventListener(\n        \"pointerdown\",\n        this.#resizerPointerdown.bind(this, name)\n      );\n      div.addEventListener(\"contextmenu\", noContextMenu);\n      div.tabIndex = -1;\n    }\n    this.div.prepend(this.#resizersDiv);\n  }\n\n  #resizerPointerdown(name, event) {\n    event.preventDefault();\n    const { isMac } = FeatureTest.platform;\n    if (event.button !== 0 || (event.ctrlKey && isMac)) {\n      return;\n    }\n\n    this.#altText?.toggle(false);\n\n    const boundResizerPointermove = this.#resizerPointermove.bind(this, name);\n    const savedDraggable = this._isDraggable;\n    this._isDraggable = false;\n    const pointerMoveOptions = { passive: true, capture: true };\n    this.parent.togglePointerEvents(false);\n    window.addEventListener(\n      \"pointermove\",\n      boundResizerPointermove,\n      pointerMoveOptions\n    );\n    window.addEventListener(\"contextmenu\", noContextMenu);\n    const savedX = this.x;\n    const savedY = this.y;\n    const savedWidth = this.width;\n    const savedHeight = this.height;\n    const savedParentCursor = this.parent.div.style.cursor;\n    const savedCursor = this.div.style.cursor;\n    this.div.style.cursor = this.parent.div.style.cursor =\n      window.getComputedStyle(event.target).cursor;\n\n    const pointerUpCallback = () => {\n      this.parent.togglePointerEvents(true);\n      this.#altText?.toggle(true);\n      this._isDraggable = savedDraggable;\n      window.removeEventListener(\"pointerup\", pointerUpCallback);\n      window.removeEventListener(\"blur\", pointerUpCallback);\n      window.removeEventListener(\n        \"pointermove\",\n        boundResizerPointermove,\n        pointerMoveOptions\n      );\n      window.removeEventListener(\"contextmenu\", noContextMenu);\n      this.parent.div.style.cursor = savedParentCursor;\n      this.div.style.cursor = savedCursor;\n\n      this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight);\n    };\n    window.addEventListener(\"pointerup\", pointerUpCallback);\n    // If the user switches to another window (with alt+tab), then we end the\n    // resize session.\n    window.addEventListener(\"blur\", pointerUpCallback);\n  }\n\n  #addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight) {\n    const newX = this.x;\n    const newY = this.y;\n    const newWidth = this.width;\n    const newHeight = this.height;\n    if (\n      newX === savedX &&\n      newY === savedY &&\n      newWidth === savedWidth &&\n      newHeight === savedHeight\n    ) {\n      return;\n    }\n\n    this.addCommands({\n      cmd: () => {\n        this.width = newWidth;\n        this.height = newHeight;\n        this.x = newX;\n        this.y = newY;\n        const [parentWidth, parentHeight] = this.parentDimensions;\n        this.setDims(parentWidth * newWidth, parentHeight * newHeight);\n        this.fixAndSetPosition();\n      },\n      undo: () => {\n        this.width = savedWidth;\n        this.height = savedHeight;\n        this.x = savedX;\n        this.y = savedY;\n        const [parentWidth, parentHeight] = this.parentDimensions;\n        this.setDims(parentWidth * savedWidth, parentHeight * savedHeight);\n        this.fixAndSetPosition();\n      },\n      mustExec: true,\n    });\n  }\n\n  #resizerPointermove(name, event) {\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    const savedX = this.x;\n    const savedY = this.y;\n    const savedWidth = this.width;\n    const savedHeight = this.height;\n    const minWidth = AnnotationEditor.MIN_SIZE / parentWidth;\n    const minHeight = AnnotationEditor.MIN_SIZE / parentHeight;\n\n    // 10000 because we multiply by 100 and use toFixed(2) in fixAndSetPosition.\n    // Without rounding, the positions of the corners other than the top left\n    // one can be slightly wrong.\n    const round = x => Math.round(x * 10000) / 10000;\n    const rotationMatrix = this.#getRotationMatrix(this.rotation);\n    const transf = (x, y) => [\n      rotationMatrix[0] * x + rotationMatrix[2] * y,\n      rotationMatrix[1] * x + rotationMatrix[3] * y,\n    ];\n    const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation);\n    const invTransf = (x, y) => [\n      invRotationMatrix[0] * x + invRotationMatrix[2] * y,\n      invRotationMatrix[1] * x + invRotationMatrix[3] * y,\n    ];\n    let getPoint;\n    let getOpposite;\n    let isDiagonal = false;\n    let isHorizontal = false;\n\n    switch (name) {\n      case \"topLeft\":\n        isDiagonal = true;\n        getPoint = (w, h) => [0, 0];\n        getOpposite = (w, h) => [w, h];\n        break;\n      case \"topMiddle\":\n        getPoint = (w, h) => [w / 2, 0];\n        getOpposite = (w, h) => [w / 2, h];\n        break;\n      case \"topRight\":\n        isDiagonal = true;\n        getPoint = (w, h) => [w, 0];\n        getOpposite = (w, h) => [0, h];\n        break;\n      case \"middleRight\":\n        isHorizontal = true;\n        getPoint = (w, h) => [w, h / 2];\n        getOpposite = (w, h) => [0, h / 2];\n        break;\n      case \"bottomRight\":\n        isDiagonal = true;\n        getPoint = (w, h) => [w, h];\n        getOpposite = (w, h) => [0, 0];\n        break;\n      case \"bottomMiddle\":\n        getPoint = (w, h) => [w / 2, h];\n        getOpposite = (w, h) => [w / 2, 0];\n        break;\n      case \"bottomLeft\":\n        isDiagonal = true;\n        getPoint = (w, h) => [0, h];\n        getOpposite = (w, h) => [w, 0];\n        break;\n      case \"middleLeft\":\n        isHorizontal = true;\n        getPoint = (w, h) => [0, h / 2];\n        getOpposite = (w, h) => [w, h / 2];\n        break;\n    }\n\n    const point = getPoint(savedWidth, savedHeight);\n    const oppositePoint = getOpposite(savedWidth, savedHeight);\n    let transfOppositePoint = transf(...oppositePoint);\n    const oppositeX = round(savedX + transfOppositePoint[0]);\n    const oppositeY = round(savedY + transfOppositePoint[1]);\n    let ratioX = 1;\n    let ratioY = 1;\n\n    let [deltaX, deltaY] = this.screenToPageTranslation(\n      event.movementX,\n      event.movementY\n    );\n    [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight);\n\n    if (isDiagonal) {\n      const oldDiag = Math.hypot(savedWidth, savedHeight);\n      ratioX = ratioY = Math.max(\n        Math.min(\n          Math.hypot(\n            oppositePoint[0] - point[0] - deltaX,\n            oppositePoint[1] - point[1] - deltaY\n          ) / oldDiag,\n          // Avoid the editor to be larger than the page.\n          1 / savedWidth,\n          1 / savedHeight\n        ),\n        // Avoid the editor to be smaller than the minimum size.\n        minWidth / savedWidth,\n        minHeight / savedHeight\n      );\n    } else if (isHorizontal) {\n      ratioX =\n        Math.max(\n          minWidth,\n          Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))\n        ) / savedWidth;\n    } else {\n      ratioY =\n        Math.max(\n          minHeight,\n          Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))\n        ) / savedHeight;\n    }\n\n    const newWidth = round(savedWidth * ratioX);\n    const newHeight = round(savedHeight * ratioY);\n    transfOppositePoint = transf(...getOpposite(newWidth, newHeight));\n    const newX = oppositeX - transfOppositePoint[0];\n    const newY = oppositeY - transfOppositePoint[1];\n\n    this.width = newWidth;\n    this.height = newHeight;\n    this.x = newX;\n    this.y = newY;\n\n    this.setDims(parentWidth * newWidth, parentHeight * newHeight);\n    this.fixAndSetPosition();\n  }\n\n  altTextFinish() {\n    this.#altText?.finish();\n  }\n\n  /**\n   * Add a toolbar for this editor.\n   * @returns {Promise<EditorToolbar|null>}\n   */\n  async addEditToolbar() {\n    if (this.#editToolbar || this.#isInEditMode) {\n      return this.#editToolbar;\n    }\n    this.#editToolbar = new EditorToolbar(this);\n    this.div.append(this.#editToolbar.render());\n    if (this.#altText) {\n      this.#editToolbar.addAltTextButton(await this.#altText.render());\n    }\n\n    return this.#editToolbar;\n  }\n\n  removeEditToolbar() {\n    if (!this.#editToolbar) {\n      return;\n    }\n    this.#editToolbar.remove();\n    this.#editToolbar = null;\n\n    // We destroy the alt text but we don't null it because we want to be able\n    // to restore it in case the user undoes the deletion.\n    this.#altText?.destroy();\n  }\n\n  getClientDimensions() {\n    return this.div.getBoundingClientRect();\n  }\n\n  async addAltTextButton() {\n    if (this.#altText) {\n      return;\n    }\n    AltText.initialize(AnnotationEditor._l10nPromise);\n    this.#altText = new AltText(this);\n    await this.addEditToolbar();\n  }\n\n  get altTextData() {\n    return this.#altText?.data;\n  }\n\n  /**\n   * Set the alt text data.\n   */\n  set altTextData(data) {\n    if (!this.#altText) {\n      return;\n    }\n    this.#altText.data = data;\n  }\n\n  hasAltText() {\n    return !this.#altText?.isEmpty();\n  }\n\n  /**\n   * Render this editor in a div.\n   * @returns {HTMLDivElement | null}\n   */\n  render() {\n    if (this.name == \"commentEditor\") {\n      return;\n    }\n    this.div = document.createElement(\"div\");\n    this.div.setAttribute(\"data-editor-rotation\", (360 - this.rotation) % 360);\n    this.div.className = this.name;\n    this.div.setAttribute(\"id\", this.id);\n    this.div.tabIndex = this.#disabled ? -1 : 0;\n    if (!this._isVisible) {\n      this.div.classList.add(\"hidden\");\n    }\n\n    this.setInForeground();\n\n    this.div.addEventListener(\"focusin\", this.#boundFocusin);\n    this.div.addEventListener(\"focusout\", this.#boundFocusout);\n\n    const [parentWidth, parentHeight] = this.parentDimensions;\n    if (this.parentRotation % 180 !== 0) {\n      this.div.style.maxWidth = `${((100 * parentHeight) / parentWidth).toFixed(\n        2\n      )}%`;\n      this.div.style.maxHeight = `${(\n        (100 * parentWidth) /\n        parentHeight\n      ).toFixed(2)}%`;\n    }\n\n    const [tx, ty] = this.getInitialTranslation();\n    this.translate(tx, ty);\n\n    bindEvents(this, this.div, [\"pointerdown\"]);\n\n    return this.div;\n  }\n\n  /**\n   * Onpointerdown callback.\n   * @param {PointerEvent} event\n   */\n  pointerdown(event) {\n    const { isMac } = FeatureTest.platform;\n    if (event.button !== 0 || (event.ctrlKey && isMac)) {\n      // Avoid to focus this editor because of a non-left click.\n      event.preventDefault();\n      return;\n    }\n\n    this.#hasBeenClicked = true;\n\n    if (this._isDraggable) {\n      this.#setUpDragSession(event);\n      return;\n    }\n\n    this.#selectOnPointerEvent(event);\n  }\n\n  #selectOnPointerEvent(event) {\n    const { isMac } = FeatureTest.platform;\n    if (\n      (event.ctrlKey && !isMac) ||\n      event.shiftKey ||\n      (event.metaKey && isMac)\n    ) {\n      this.parent.toggleSelected(this);\n    } else {\n      this.parent.setSelected(this);\n    }\n  }\n\n  #setUpDragSession(event) {\n    const isSelected = this._uiManager.isSelected(this);\n    this._uiManager.setUpDragSession();\n\n    let pointerMoveOptions, pointerMoveCallback;\n    if (isSelected) {\n      this.div.classList.add(\"moving\");\n      pointerMoveOptions = { passive: true, capture: true };\n      this.#prevDragX = event.clientX;\n      this.#prevDragY = event.clientY;\n      pointerMoveCallback = e => {\n        const { clientX: x, clientY: y } = e;\n        const [tx, ty] = this.screenToPageTranslation(\n          x - this.#prevDragX,\n          y - this.#prevDragY\n        );\n        this.#prevDragX = x;\n        this.#prevDragY = y;\n        this._uiManager.dragSelectedEditors(tx, ty);\n      };\n      window.addEventListener(\n        \"pointermove\",\n        pointerMoveCallback,\n        pointerMoveOptions\n      );\n    }\n\n    const pointerUpCallback = () => {\n      window.removeEventListener(\"pointerup\", pointerUpCallback);\n      window.removeEventListener(\"blur\", pointerUpCallback);\n      if (isSelected) {\n        this.div.classList.remove(\"moving\");\n        window.removeEventListener(\n          \"pointermove\",\n          pointerMoveCallback,\n          pointerMoveOptions\n        );\n      }\n\n      this.#hasBeenClicked = false;\n      if (!this._uiManager.endDragSession()) {\n        this.#selectOnPointerEvent(event);\n      }\n    };\n    window.addEventListener(\"pointerup\", pointerUpCallback);\n    // If the user is using alt+tab during the dragging session, the pointerup\n    // event could be not fired, but a blur event is fired so we can use it in\n    // order to interrupt the dragging session.\n    window.addEventListener(\"blur\", pointerUpCallback);\n  }\n\n  moveInDOM() {\n    // Moving the editor in the DOM can be expensive, so we wait a bit before.\n    // It's important to not block the UI (for example when changing the font\n    // size in a FreeText).\n    if (this.#moveInDOMTimeout) {\n      clearTimeout(this.#moveInDOMTimeout);\n    }\n    this.#moveInDOMTimeout = setTimeout(() => {\n      this.#moveInDOMTimeout = null;\n      this.parent?.moveEditorInDOM(this);\n    }, 0);\n  }\n\n  _setParentAndPosition(parent, x, y) {\n    parent.changeParent(this);\n    this.x = x;\n    this.y = y;\n    this.fixAndSetPosition();\n  }\n\n  /**\n   * Convert the current rect into a page one.\n   * @param {number} tx - x-translation in screen coordinates.\n   * @param {number} ty - y-translation in screen coordinates.\n   * @param {number} [rotation] - the rotation of the page.\n   */\n  getRect(tx, ty, rotation = this.rotation) {\n    const scale = this.parentScale;\n    const [pageWidth, pageHeight] = this.pageDimensions;\n    const [pageX, pageY] = this.pageTranslation;\n    const shiftX = tx / scale;\n    const shiftY = ty / scale;\n    const x = this.x * pageWidth;\n    const y = this.y * pageHeight;\n    const width = this.width * pageWidth;\n    const height = this.height * pageHeight;\n\n    switch (rotation) {\n      case 0:\n        return [\n          x + shiftX + pageX,\n          pageHeight - y - shiftY - height + pageY,\n          x + shiftX + width + pageX,\n          pageHeight - y - shiftY + pageY,\n        ];\n      case 90:\n        return [\n          x + shiftY + pageX,\n          pageHeight - y + shiftX + pageY,\n          x + shiftY + height + pageX,\n          pageHeight - y + shiftX + width + pageY,\n        ];\n      case 180:\n        return [\n          x - shiftX - width + pageX,\n          pageHeight - y + shiftY + pageY,\n          x - shiftX + pageX,\n          pageHeight - y + shiftY + height + pageY,\n        ];\n      case 270:\n        return [\n          x - shiftY - height + pageX,\n          pageHeight - y - shiftX - width + pageY,\n          x - shiftY + pageX,\n          pageHeight - y - shiftX + pageY,\n        ];\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n  }\n\n  getRectInCurrentCoords(rect, pageHeight) {\n    const [x1, y1, x2, y2] = rect;\n\n    const width = x2 - x1;\n    const height = y2 - y1;\n\n    switch (this.rotation) {\n      case 0:\n        return [x1, pageHeight - y2, width, height];\n      case 90:\n        return [x1, pageHeight - y1, height, width];\n      case 180:\n        return [x2, pageHeight - y1, width, height];\n      case 270:\n        return [x2, pageHeight - y2, height, width];\n      default:\n        throw new Error(\"Invalid rotation\");\n    }\n  }\n\n  /**\n   * Executed once this editor has been rendered.\n   */\n  onceAdded() {}\n\n  /**\n   * Check if the editor contains something.\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return false;\n  }\n\n  /**\n   * Enable edit mode.\n   */\n  enableEditMode() {\n    this.#isInEditMode = true;\n  }\n\n  /**\n   * Disable edit mode.\n   */\n  disableEditMode() {\n    this.#isInEditMode = false;\n  }\n\n  /**\n   * Check if the editor is edited.\n   * @returns {boolean}\n   */\n  isInEditMode() {\n    return this.#isInEditMode;\n  }\n\n  /**\n   * If it returns true, then this editor handles the keyboard\n   * events itself.\n   * @returns {boolean}\n   */\n  shouldGetKeyboardEvents() {\n    return this.#isResizerEnabledForKeyboard;\n  }\n\n  /**\n   * Check if this editor needs to be rebuilt or not.\n   * @returns {boolean}\n   */\n  needsToBeRebuilt() {\n    return this.div && !this.isAttachedToDOM;\n  }\n\n  /**\n   * Rebuild the editor in case it has been removed on undo.\n   *\n   * To implement in subclasses.\n   */\n  rebuild() {\n    this.div?.addEventListener(\"focusin\", this.#boundFocusin);\n    this.div?.addEventListener(\"focusout\", this.#boundFocusout);\n  }\n\n  /**\n   * Rotate the editor.\n   * @param {number} angle\n   */\n  rotate(_angle) {}\n\n  serializeDeleted() {\n    return {\n      id: this.annotationElementId,\n      deleted: true,\n      pageIndex: this.pageIndex,\n      popupRef: this._initialData?.popupRef || \"\",\n    };\n  }\n\n  /**\n   * Serialize the editor.\n   * The result of the serialization will be used to construct a\n   * new annotation to add to the pdf document.\n   *\n   * To implement in subclasses.\n   * @param {boolean} [isForCopying]\n   * @param {Object | null} [context]\n   * @returns {Object | null}\n   */\n  serialize(isForCopying = false, context = null) {\n    unreachable(\"An editor must be serializable\");\n  }\n\n  /**\n   * Deserialize the editor.\n   * The result of the deserialization is a new editor.\n   *\n   * @param {Object} data\n   * @param {AnnotationEditorLayer} parent\n   * @param {AnnotationEditorUIManager} uiManager\n   * @returns {AnnotationEditor | null}\n   */\n  static deserialize(data, parent, uiManager) {\n    const editor = new this.prototype.constructor({\n      parent,\n      id: parent.getNextId(),\n      uiManager,\n    });\n    editor.rotation = data.rotation;\n\n    const [pageWidth, pageHeight] = editor.pageDimensions;\n    const [x, y, width, height] = editor.getRectInCurrentCoords(\n      data.rect,\n      pageHeight\n    );\n    editor.x = x / pageWidth;\n    editor.y = y / pageHeight;\n    editor.width = width / pageWidth;\n    editor.height = height / pageHeight;\n\n    return editor;\n  }\n\n  /**\n   * Check if an existing annotation associated with this editor has been\n   * modified.\n   * @returns {boolean}\n   */\n  get hasBeenModified() {\n    return (\n      !!this.annotationElementId && (this.deleted || this.serialize() !== null)\n    );\n  }\n\n  /**\n   * Remove this editor.\n   * It's used on ctrl+backspace action.\n   */\n  remove() {\n    this.div.removeEventListener(\"focusin\", this.#boundFocusin);\n    this.div.removeEventListener(\"focusout\", this.#boundFocusout);\n\n    if (!this.isEmpty()) {\n      // The editor is removed but it can be back at some point thanks to\n      // undo/redo so we must commit it before.\n      this.commit();\n    }\n    if (this.parent) {\n      this.parent.remove(this);\n    } else {\n      this._uiManager.removeEditor(this);\n    }\n\n    if (this.#moveInDOMTimeout) {\n      clearTimeout(this.#moveInDOMTimeout);\n      this.#moveInDOMTimeout = null;\n    }\n    this.#stopResizing();\n    this.removeEditToolbar();\n    if (this.#telemetryTimeouts) {\n      for (const timeout of this.#telemetryTimeouts.values()) {\n        clearTimeout(timeout);\n      }\n      this.#telemetryTimeouts = null;\n    }\n    this.parent = null;\n  }\n\n  /**\n   * @returns {boolean} true if this editor can be resized.\n   */\n  get isResizable() {\n    return false;\n  }\n\n  /**\n   * Add the resizers to this editor.\n   */\n  makeResizable() {\n    if (this.isResizable) {\n      this.#createResizers();\n      this.#resizersDiv.classList.remove(\"hidden\");\n      bindEvents(this, this.div, [\"keydown\"]);\n    }\n  }\n\n  get toolbarPosition() {\n    return null;\n  }\n\n  /**\n   * onkeydown callback.\n   * @param {KeyboardEvent} event\n   */\n  keydown(event) {\n    if (\n      !this.isResizable ||\n      event.target !== this.div ||\n      event.key !== \"Enter\"\n    ) {\n      return;\n    }\n    this._uiManager.setSelected(this);\n    this.#savedDimensions = {\n      savedX: this.x,\n      savedY: this.y,\n      savedWidth: this.width,\n      savedHeight: this.height,\n    };\n    const children = this.#resizersDiv.children;\n    if (!this.#allResizerDivs) {\n      this.#allResizerDivs = Array.from(children);\n      const boundResizerKeydown = this.#resizerKeydown.bind(this);\n      const boundResizerBlur = this.#resizerBlur.bind(this);\n      for (const div of this.#allResizerDivs) {\n        const name = div.getAttribute(\"data-resizer-name\");\n        div.setAttribute(\"role\", \"spinbutton\");\n        div.addEventListener(\"keydown\", boundResizerKeydown);\n        div.addEventListener(\"blur\", boundResizerBlur);\n        div.addEventListener(\"focus\", this.#resizerFocus.bind(this, name));\n        AnnotationEditor._l10nPromise\n          .get(`pdfjs-editor-resizer-label-${name}`)\n          .then(msg => div.setAttribute(\"aria-label\", msg));\n      }\n    }\n\n    // We want to have the resizers in the visual order, so we move the first\n    // (top-left) to the right place.\n    const first = this.#allResizerDivs[0];\n    let firstPosition = 0;\n    for (const div of children) {\n      if (div === first) {\n        break;\n      }\n      firstPosition++;\n    }\n    const nextFirstPosition =\n      (((360 - this.rotation + this.parentRotation) % 360) / 90) *\n      (this.#allResizerDivs.length / 4);\n\n    if (nextFirstPosition !== firstPosition) {\n      // We need to reorder the resizers in the DOM in order to have the focus\n      // on the top-left one.\n      if (nextFirstPosition < firstPosition) {\n        for (let i = 0; i < firstPosition - nextFirstPosition; i++) {\n          this.#resizersDiv.append(this.#resizersDiv.firstChild);\n        }\n      } else if (nextFirstPosition > firstPosition) {\n        for (let i = 0; i < nextFirstPosition - firstPosition; i++) {\n          this.#resizersDiv.firstChild.before(this.#resizersDiv.lastChild);\n        }\n      }\n\n      let i = 0;\n      for (const child of children) {\n        const div = this.#allResizerDivs[i++];\n        const name = div.getAttribute(\"data-resizer-name\");\n        AnnotationEditor._l10nPromise\n          .get(`pdfjs-editor-resizer-label-${name}`)\n          .then(msg => child.setAttribute(\"aria-label\", msg));\n      }\n    }\n\n    this.#setResizerTabIndex(0);\n    this.#isResizerEnabledForKeyboard = true;\n    this.#resizersDiv.firstChild.focus({ focusVisible: true });\n    event.preventDefault();\n    event.stopImmediatePropagation();\n  }\n\n  #resizerKeydown(event) {\n    AnnotationEditor._resizerKeyboardManager.exec(this, event);\n  }\n\n  #resizerBlur(event) {\n    if (\n      this.#isResizerEnabledForKeyboard &&\n      event.relatedTarget?.parentNode !== this.#resizersDiv\n    ) {\n      this.#stopResizing();\n    }\n  }\n\n  #resizerFocus(name) {\n    this.#focusedResizerName = this.#isResizerEnabledForKeyboard ? name : \"\";\n  }\n\n  #setResizerTabIndex(value) {\n    if (!this.#allResizerDivs) {\n      return;\n    }\n    for (const div of this.#allResizerDivs) {\n      div.tabIndex = value;\n    }\n  }\n\n  _resizeWithKeyboard(x, y) {\n    if (!this.#isResizerEnabledForKeyboard) {\n      return;\n    }\n    this.#resizerPointermove(this.#focusedResizerName, {\n      movementX: x,\n      movementY: y,\n    });\n  }\n\n  #stopResizing() {\n    this.#isResizerEnabledForKeyboard = false;\n    this.#setResizerTabIndex(-1);\n    if (this.#savedDimensions) {\n      const { savedX, savedY, savedWidth, savedHeight } = this.#savedDimensions;\n      this.#addResizeToUndoStack(savedX, savedY, savedWidth, savedHeight);\n      this.#savedDimensions = null;\n    }\n  }\n\n  _stopResizingWithKeyboard() {\n    this.#stopResizing();\n    this.div.focus();\n  }\n\n  /**\n   * Select this editor.\n   */\n  select() {\n    this.makeResizable();\n    this.div?.classList.add(\"selectedEditor\");\n    if (!this.#editToolbar) {\n      this.addEditToolbar().then(() => {\n        if (this.div?.classList.contains(\"selectedEditor\")) {\n          // The editor can have been unselected while we were waiting for the\n          // edit toolbar to be created, hence we want to be sure that this\n          // editor is still selected.\n          this.#editToolbar?.show();\n        }\n      });\n      return;\n    }\n    this.#editToolbar?.show();\n  }\n\n  /**\n   * Unselect this editor.\n   */\n  unselect() {\n    this.#resizersDiv?.classList.add(\"hidden\");\n    this.div?.classList.remove(\"selectedEditor\");\n    if (this.div?.contains(document.activeElement)) {\n      // Don't use this.div.blur() because we don't know where the focus will\n      // go.\n      this._uiManager.currentLayer.div.focus({\n        preventScroll: true,\n      });\n    }\n    this.#editToolbar?.hide();\n  }\n\n  /**\n   * Update some parameters which have been changed through the UI.\n   * @param {number} type\n   * @param {*} value\n   */\n  updateParams(type, value) {}\n\n  /**\n   * When the user disables the editing mode some editors can change some of\n   * their properties.\n   */\n  disableEditing() {}\n\n  /**\n   * When the user enables the editing mode some editors can change some of\n   * their properties.\n   */\n  enableEditing() {}\n\n  /**\n   * The editor is about to be edited.\n   */\n  enterInEditMode() {}\n\n  /**\n   * @returns {HTMLElement | null} the element requiring an alt text.\n   */\n  getImageForAltText() {\n    return null;\n  }\n\n  /**\n   * Get the div which really contains the displayed content.\n   * @returns {HTMLDivElement | undefined}\n   */\n  get contentDiv() {\n    return this.div;\n  }\n\n  /**\n   * If true then the editor is currently edited.\n   * @type {boolean}\n   */\n  get isEditing() {\n    return this.#isEditing;\n  }\n\n  /**\n   * When set to true, it means that this editor is currently edited.\n   * @param {boolean} value\n   */\n  set isEditing(value) {\n    this.#isEditing = value;\n    if (!this.parent) {\n      return;\n    }\n    if (value) {\n      this.parent.setSelected(this);\n      this.parent.setActiveEditor(this);\n    } else {\n      this.parent.setActiveEditor(null);\n    }\n  }\n\n  /**\n   * Set the aspect ratio to use when resizing.\n   * @param {number} width\n   * @param {number} height\n   */\n  setAspectRatio(width, height) {\n    this.#keepAspectRatio = true;\n    const aspectRatio = width / height;\n    const { style } = this.div;\n    style.aspectRatio = aspectRatio;\n    style.height = \"auto\";\n  }\n\n  static get MIN_SIZE() {\n    return 16;\n  }\n\n  static canCreateNewEmptyEditor() {\n    return true;\n  }\n\n  /**\n   * Get the data to report to the telemetry when the editor is added.\n   * @returns {Object}\n   */\n  get telemetryInitialData() {\n    return { action: \"added\" };\n  }\n\n  /**\n   * The telemetry data to use when saving/printing.\n   * @returns {Object|null}\n   */\n  get telemetryFinalData() {\n    return null;\n  }\n\n  _reportTelemetry(data, mustWait = false) {\n    if (mustWait) {\n      this.#telemetryTimeouts ||= new Map();\n      const { action } = data;\n      let timeout = this.#telemetryTimeouts.get(action);\n      if (timeout) {\n        clearTimeout(timeout);\n      }\n      timeout = setTimeout(() => {\n        this._reportTelemetry(data);\n        this.#telemetryTimeouts.delete(action);\n        if (this.#telemetryTimeouts.size === 0) {\n          this.#telemetryTimeouts = null;\n        }\n      }, AnnotationEditor._telemetryTimeout);\n      this.#telemetryTimeouts.set(action, timeout);\n      return;\n    }\n    data.type ||= this.editorType;\n    this._uiManager._eventBus.dispatch(\"reporttelemetry\", {\n      source: this,\n      details: {\n        type: \"editing\",\n        data,\n      },\n    });\n  }\n\n  /**\n   * Show or hide this editor.\n   * @param {boolean|undefined} visible\n   */\n  show(visible = this._isVisible) {\n    if (this.div) {\n      this.div.classList.toggle(\"hidden\", !visible);\n    }\n    this._isVisible = visible;\n  }\n\n  enable() {\n    if (this.div) {\n      this.div.tabIndex = 0;\n    }\n    this.#disabled = false;\n  }\n\n  disable() {\n    if (this.div) {\n      this.div.tabIndex = -1;\n    }\n    this.#disabled = true;\n  }\n\n  /**\n   * Render an annotation in the annotation layer.\n   * @param {Object} annotation\n   * @returns {HTMLElement}\n   */\n  renderAnnotationElement(annotation) {\n    let content = annotation.container.querySelector(\".annotationContent\");\n    if (!content) {\n      content = document.createElement(\"div\");\n      content.classList.add(\"annotationContent\", this.editorType);\n      annotation.container.prepend(content);\n    } else if (content.nodeName === \"CANVAS\") {\n      const canvas = content;\n      content = document.createElement(\"div\");\n      content.classList.add(\"annotationContent\", this.editorType);\n      canvas.before(content);\n    }\n\n    return content;\n  }\n\n  resetAnnotationElement(annotation) {\n    const { firstChild } = annotation.container;\n    if (\n      firstChild.nodeName === \"DIV\" &&\n      firstChild.classList.contains(\"annotationContent\")\n    ) {\n      firstChild.remove();\n    }\n  }\n}\n\n// This class is used to fake an editor which has been deleted.\nclass FakeEditor extends AnnotationEditor {\n  constructor(params) {\n    super(params);\n    this.annotationElementId = params.annotationElementId;\n    this.deleted = true;\n  }\n\n  serialize() {\n    return {\n      id: this.annotationElementId,\n      deleted: true,\n      pageIndex: this.pageIndex,\n    };\n  }\n}\n\nexport { AnnotationEditor };\n","/* Copyright 2014 Opera Software ASA\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 * Based on https://code.google.com/p/smhasher/wiki/MurmurHash3.\n * Hashes roughly 100 KB per millisecond on i7 3.4 GHz.\n */\n\nconst SEED = 0xc3d2e1f0;\n// Workaround for missing math precision in JS.\nconst MASK_HIGH = 0xffff0000;\nconst MASK_LOW = 0xffff;\n\nclass MurmurHash3_64 {\n  constructor(seed) {\n    this.h1 = seed ? seed & 0xffffffff : SEED;\n    this.h2 = seed ? seed & 0xffffffff : SEED;\n  }\n\n  update(input) {\n    let data, length;\n    if (typeof input === \"string\") {\n      data = new Uint8Array(input.length * 2);\n      length = 0;\n      for (let i = 0, ii = input.length; i < ii; i++) {\n        const code = input.charCodeAt(i);\n        if (code <= 0xff) {\n          data[length++] = code;\n        } else {\n          data[length++] = code >>> 8;\n          data[length++] = code & 0xff;\n        }\n      }\n    } else if (ArrayBuffer.isView(input)) {\n      data = input.slice();\n      length = data.byteLength;\n    } else {\n      throw new Error(\"Invalid data format, must be a string or TypedArray.\");\n    }\n\n    const blockCounts = length >> 2;\n    const tailLength = length - blockCounts * 4;\n    // We don't care about endianness here.\n    const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\n    let k1 = 0,\n      k2 = 0;\n    let h1 = this.h1,\n      h2 = this.h2;\n    const C1 = 0xcc9e2d51,\n      C2 = 0x1b873593;\n    const C1_LOW = C1 & MASK_LOW,\n      C2_LOW = C2 & MASK_LOW;\n\n    for (let i = 0; i < blockCounts; i++) {\n      if (i & 1) {\n        k1 = dataUint32[i];\n        k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n        k1 = (k1 << 15) | (k1 >>> 17);\n        k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n        h1 ^= k1;\n        h1 = (h1 << 13) | (h1 >>> 19);\n        h1 = h1 * 5 + 0xe6546b64;\n      } else {\n        k2 = dataUint32[i];\n        k2 = ((k2 * C1) & MASK_HIGH) | ((k2 * C1_LOW) & MASK_LOW);\n        k2 = (k2 << 15) | (k2 >>> 17);\n        k2 = ((k2 * C2) & MASK_HIGH) | ((k2 * C2_LOW) & MASK_LOW);\n        h2 ^= k2;\n        h2 = (h2 << 13) | (h2 >>> 19);\n        h2 = h2 * 5 + 0xe6546b64;\n      }\n    }\n\n    k1 = 0;\n\n    switch (tailLength) {\n      case 3:\n        k1 ^= data[blockCounts * 4 + 2] << 16;\n      /* falls through */\n      case 2:\n        k1 ^= data[blockCounts * 4 + 1] << 8;\n      /* falls through */\n      case 1:\n        k1 ^= data[blockCounts * 4];\n        /* falls through */\n\n        k1 = ((k1 * C1) & MASK_HIGH) | ((k1 * C1_LOW) & MASK_LOW);\n        k1 = (k1 << 15) | (k1 >>> 17);\n        k1 = ((k1 * C2) & MASK_HIGH) | ((k1 * C2_LOW) & MASK_LOW);\n        if (blockCounts & 1) {\n          h1 ^= k1;\n        } else {\n          h2 ^= k1;\n        }\n    }\n\n    this.h1 = h1;\n    this.h2 = h2;\n  }\n\n  hexdigest() {\n    let h1 = this.h1,\n      h2 = this.h2;\n\n    h1 ^= h2 >>> 1;\n    h1 = ((h1 * 0xed558ccd) & MASK_HIGH) | ((h1 * 0x8ccd) & MASK_LOW);\n    h2 =\n      ((h2 * 0xff51afd7) & MASK_HIGH) |\n      (((((h2 << 16) | (h1 >>> 16)) * 0xafd7ed55) & MASK_HIGH) >>> 16);\n    h1 ^= h2 >>> 1;\n    h1 = ((h1 * 0x1a85ec53) & MASK_HIGH) | ((h1 * 0xec53) & MASK_LOW);\n    h2 =\n      ((h2 * 0xc4ceb9fe) & MASK_HIGH) |\n      (((((h2 << 16) | (h1 >>> 16)) * 0xb9fe1a85) & MASK_HIGH) >>> 16);\n    h1 ^= h2 >>> 1;\n\n    return (\n      (h1 >>> 0).toString(16).padStart(8, \"0\") +\n      (h2 >>> 0).toString(16).padStart(8, \"0\")\n    );\n  }\n}\n\nexport { MurmurHash3_64 };\n","/* Copyright 2020 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 { objectFromMap, unreachable } from \"../shared/util.js\";\nimport { AnnotationEditor } from \"./editor/editor.js\";\nimport { MurmurHash3_64 } from \"../shared/murmurhash3.js\";\n\nconst SerializableEmpty = Object.freeze({\n  map: null,\n  hash: \"\",\n  transfer: undefined,\n});\n\n/**\n * Key/value storage for annotation data in forms.\n */\nclass AnnotationStorage {\n  #modified = false;\n\n  #storage = new Map();\n\n  constructor() {\n    // Callbacks to signal when the modification state is set or reset.\n    // This is used by the viewer to only bind on `beforeunload` if forms\n    // are actually edited to prevent doing so unconditionally since that\n    // can have undesirable effects.\n    this.onSetModified = null;\n    this.onResetModified = null;\n    this.onAnnotationEditor = null;\n  }\n\n  /**\n   * Get the value for a given key if it exists, or return the default value.\n   * @param {string} key\n   * @param {Object} defaultValue\n   * @returns {Object}\n   */\n  getValue(key, defaultValue) {\n    const value = this.#storage.get(key);\n    if (value === undefined) {\n      return defaultValue;\n    }\n\n    return Object.assign(defaultValue, value);\n  }\n\n  /**\n   * Get the value for a given key.\n   * @param {string} key\n   * @returns {Object}\n   */\n  getRawValue(key) {\n    return this.#storage.get(key);\n  }\n\n  /**\n   * Remove a value from the storage.\n   * @param {string} key\n   */\n  remove(key) {\n    this.#storage.delete(key);\n\n    if (this.#storage.size === 0) {\n      this.resetModified();\n    }\n\n    if (typeof this.onAnnotationEditor === \"function\") {\n      for (const value of this.#storage.values()) {\n        if (value instanceof AnnotationEditor) {\n          return;\n        }\n      }\n      this.onAnnotationEditor(null);\n    }\n  }\n\n  /**\n   * Set the value for a given key\n   * @param {string} key\n   * @param {Object} value\n   */\n  setValue(key, value) {\n    const obj = this.#storage.get(key);\n    let modified = false;\n    if (obj !== undefined) {\n      for (const [entry, val] of Object.entries(value)) {\n        if (obj[entry] !== val) {\n          modified = true;\n          obj[entry] = val;\n        }\n      }\n    } else {\n      modified = true;\n      this.#storage.set(key, value);\n    }\n    if (modified) {\n      this.#setModified();\n    }\n\n    if (\n      value instanceof AnnotationEditor &&\n      typeof this.onAnnotationEditor === \"function\"\n    ) {\n      this.onAnnotationEditor(value.constructor._type);\n    }\n  }\n\n  /**\n   * Check if the storage contains the given key.\n   * @param {string} key\n   * @returns {boolean}\n   */\n  has(key) {\n    return this.#storage.has(key);\n  }\n\n  /**\n   * @returns {Object | null}\n   */\n  getAll() {\n    return this.#storage.size > 0 ? objectFromMap(this.#storage) : null;\n  }\n\n  /**\n   * @returns {Map}\n   */\n  getAllEntity() {\n    return this.#storage;\n  }\n\n  /**\n   * @param {Object} obj\n   */\n  setAll(obj) {\n    for (const [key, val] of Object.entries(obj)) {\n      this.setValue(key, val);\n    }\n  }\n\n  get size() {\n    return this.#storage.size;\n  }\n\n  #setModified() {\n    if (!this.#modified) {\n      this.#modified = true;\n      if (typeof this.onSetModified === \"function\") {\n        this.onSetModified();\n      }\n    }\n  }\n\n  resetModified() {\n    if (this.#modified) {\n      this.#modified = false;\n      if (typeof this.onResetModified === \"function\") {\n        this.onResetModified();\n      }\n    }\n  }\n\n  /**\n   * @returns {PrintAnnotationStorage}\n   */\n  get print() {\n    return new PrintAnnotationStorage(this);\n  }\n\n  /**\n   * PLEASE NOTE: Only intended for usage within the API itself.\n   * @ignore\n   */\n  get serializable() {\n    if (this.#storage.size === 0) {\n      return SerializableEmpty;\n    }\n    const map = new Map(),\n      hash = new MurmurHash3_64(),\n      transfer = [];\n    const context = Object.create(null);\n    let hasBitmap = false;\n\n    for (const [key, val] of this.#storage) {\n      const serialized =\n        val instanceof AnnotationEditor\n          ? val.serialize(/* isForCopying = */ false, context)\n          : val;\n      if (serialized) {\n        map.set(key, serialized);\n\n        hash.update(`${key}:${JSON.stringify(serialized)}`);\n        hasBitmap ||= !!serialized.bitmap;\n      }\n    }\n\n    if (hasBitmap) {\n      // We must transfer the bitmap data separately, since it can be changed\n      // during serialization with SVG images.\n      for (const value of map.values()) {\n        if (value.bitmap) {\n          transfer.push(value.bitmap);\n        }\n      }\n    }\n\n    return map.size > 0\n      ? { map, hash: hash.hexdigest(), transfer }\n      : SerializableEmpty;\n  }\n\n  get editorStats() {\n    let stats = null;\n    const typeToEditor = new Map();\n    for (const value of this.#storage.values()) {\n      if (!(value instanceof AnnotationEditor)) {\n        continue;\n      }\n      const editorStats = value.telemetryFinalData;\n      if (!editorStats) {\n        continue;\n      }\n      const { type } = editorStats;\n      if (!typeToEditor.has(type)) {\n        typeToEditor.set(type, Object.getPrototypeOf(value).constructor);\n      }\n      stats ||= Object.create(null);\n      const map = (stats[type] ||= new Map());\n      for (const [key, val] of Object.entries(editorStats)) {\n        if (key === \"type\") {\n          continue;\n        }\n        let counters = map.get(key);\n        if (!counters) {\n          counters = new Map();\n          map.set(key, counters);\n        }\n        const count = counters.get(val) ?? 0;\n        counters.set(val, count + 1);\n      }\n    }\n    for (const [type, editor] of typeToEditor) {\n      stats[type] = editor.computeTelemetryFinalData(stats[type]);\n    }\n    return stats;\n  }\n}\n\n/**\n * A special `AnnotationStorage` for use during printing, where the serializable\n * data is *frozen* upon initialization, to prevent scripting from modifying its\n * contents. (Necessary since printing is triggered synchronously in browsers.)\n */\nclass PrintAnnotationStorage extends AnnotationStorage {\n  #serializable;\n\n  constructor(parent) {\n    super();\n    const { map, hash, transfer } = parent.serializable;\n    // Create a *copy* of the data, since Objects are passed by reference in JS.\n    const clone = structuredClone(map, transfer ? { transfer } : null);\n\n    this.#serializable = { map: clone, hash, transfer };\n  }\n\n  /**\n   * @returns {PrintAnnotationStorage}\n   */\n  // eslint-disable-next-line getter-return\n  get print() {\n    unreachable(\"Should not call PrintAnnotationStorage.print\");\n  }\n\n  /**\n   * PLEASE NOTE: Only intended for usage within the API itself.\n   * @ignore\n   */\n  get serializable() {\n    return this.#serializable;\n  }\n}\n\nexport { AnnotationStorage, PrintAnnotationStorage, SerializableEmpty };\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 IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\nconst MAX_IMAGE_SIZE_TO_CACHE = 10e6; // Ten megabytes.\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\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 *  - 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 *  - 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  OPLIST: 0x100,\n};\n\nconst AnnotationMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_FORMS: 2,\n  ENABLE_STORAGE: 3,\n};\n\nconst AnnotationEditorPrefix = \"pdfjs_internal_editor_\";\n\nconst AnnotationEditorType = {\n  DISABLE: -1,\n  NONE: 0,\n  TEXT: 1,\n  FREETEXT: 3,\n  HIGHLIGHT: 9,\n  STAMP: 13,\n  INK: 15,\n  REDACTION: 16,\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  HIGHLIGHT_COLOR: 31,\n  HIGHLIGHT_DEFAULT_COLOR: 32,\n  HIGHLIGHT_THICKNESS: 33,\n  HIGHLIGHT_FREE: 34,\n  HIGHLIGHT_SHOW_ALL: 35,\n};\n\nconst StampTypes = {\n  REDACTION: 1,\n  APPROVED: 2,\n  REJECTED: 3,\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 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};\n\nconst AnnotationReplyType = {\n  GROUP: \"Group\",\n  REPLY: \"R\",\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\nconst CMapCompressionType = {\n  NONE: 0,\n  BINARY: 1,\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};\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    console.log(`Info: ${msg}`);\n  }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n  if (verbosity >= VerbosityLevel.WARNINGS) {\n    console.log(`Warning: ${msg}`);\n  }\n}\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 *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} [baseUrl] - An absolute URL.\n * @param {Object} [options]\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n  if (!url) {\n    return null;\n  }\n  try {\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 ? new URL(url, baseUrl) : new URL(url);\n    if (_isValidProtocol(absoluteUrl)) {\n      return absoluteUrl;\n    }\n  } catch {\n    /* `new URL()` will throw on incorrect data. */\n  }\n  return null;\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, subcode) {\n    if (this.constructor === BaseException) {\n      unreachable(\"Cannot initialize BaseException.\");\n    }\n    this.message = message;\n    this.name = name;\n    this.subcode = subcode;\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 MissingPDFException extends BaseException {\n  constructor(msg) {\n    super(msg, \"MissingPDFException\");\n  }\n}\n\nclass UnexpectedResponseException extends BaseException {\n  constructor(msg, status, subcode) {\n    super(msg, \"UnexpectedResponseException\", subcode);\n    this.status = status;\n    this.subcode = subcode;\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\nfunction string32(value) {\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    assert(\n      typeof value === \"number\" && Math.abs(value) < 2 ** 32,\n      `string32: Unexpected input \"${value}\".`\n    );\n  }\n  return String.fromCharCode(\n    (value >> 24) & 0xff,\n    (value >> 16) & 0xff,\n    (value >> 8) & 0xff,\n    value & 0xff\n  );\n}\n\nfunction objectSize(obj) {\n  return Object.keys(obj).length;\n}\n\n// Ensure that the returned Object has a `null` prototype; hence why\n// `Object.fromEntries(...)` is not used.\nfunction objectFromMap(map) {\n  const obj = Object.create(null);\n  for (const [key, value] of map) {\n    obj[key] = value;\n  }\n  return obj;\n}\n\n// Checks the endianness of the platform.\nfunction isLittleEndian() {\n  const buffer8 = new Uint8Array(4);\n  buffer8[0] = 1;\n  const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n  return view32[0] === 1;\n}\n\n// Checks if it's possible to eval JS expressions.\nfunction isEvalSupported() {\n  try {\n    new Function(\"\"); // eslint-disable-line no-new, no-new-func\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nclass FeatureTest {\n  static get isLittleEndian() {\n    return shadow(this, \"isLittleEndian\", isLittleEndian());\n  }\n\n  static get isEvalSupported() {\n    return shadow(this, \"isEvalSupported\", isEvalSupported());\n  }\n\n  static get isOffscreenCanvasSupported() {\n    return shadow(\n      this,\n      \"isOffscreenCanvasSupported\",\n      typeof OffscreenCanvas !== \"undefined\"\n    );\n  }\n\n  static get platform() {\n    if (\n      (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n      (typeof navigator !== \"undefined\" &&\n        typeof navigator?.platform === \"string\")\n    ) {\n      return shadow(this, \"platform\", {\n        isMac: navigator.platform.includes(\"Mac\"),\n      });\n    }\n    return shadow(this, \"platform\", { isMac: false });\n  }\n\n  static get isCSSRoundSupported() {\n    return shadow(\n      this,\n      \"isCSSRoundSupported\",\n      globalThis.CSS?.supports?.(\"width: round(1.5px, 1px)\")\n    );\n  }\n}\n\nconst hexNumbers = Array.from(Array(256).keys(), n =>\n  n.toString(16).padStart(2, \"0\")\n);\n\nclass Util {\n  static makeHexColor(r, g, b) {\n    return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;\n  }\n\n  // Apply a scaling matrix to some min/max values.\n  // If a scaling factor is negative then min and max must be\n  // swapped.\n  static scaleMinMax(transform, minMax) {\n    let temp;\n    if (transform[0]) {\n      if (transform[0] < 0) {\n        temp = minMax[0];\n        minMax[0] = minMax[2];\n        minMax[2] = temp;\n      }\n      minMax[0] *= transform[0];\n      minMax[2] *= transform[0];\n\n      if (transform[3] < 0) {\n        temp = minMax[1];\n        minMax[1] = minMax[3];\n        minMax[3] = temp;\n      }\n      minMax[1] *= transform[3];\n      minMax[3] *= transform[3];\n    } else {\n      temp = minMax[0];\n      minMax[0] = minMax[1];\n      minMax[1] = temp;\n      temp = minMax[2];\n      minMax[2] = minMax[3];\n      minMax[3] = temp;\n\n      if (transform[1] < 0) {\n        temp = minMax[1];\n        minMax[1] = minMax[3];\n        minMax[3] = temp;\n      }\n      minMax[1] *= transform[1];\n      minMax[3] *= transform[1];\n\n      if (transform[2] < 0) {\n        temp = minMax[0];\n        minMax[0] = minMax[2];\n        minMax[2] = temp;\n      }\n      minMax[0] *= transform[2];\n      minMax[2] *= transform[2];\n    }\n    minMax[0] += transform[4];\n    minMax[1] += transform[5];\n    minMax[2] += transform[4];\n    minMax[3] += transform[5];\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  // For 2d affine transforms\n  static applyTransform(p, m) {\n    const xt = p[0] * m[0] + p[1] * m[2] + m[4];\n    const yt = p[0] * m[1] + p[1] * m[3] + m[5];\n    return [xt, yt];\n  }\n\n  static applyInverseTransform(p, m) {\n    const d = m[0] * m[3] - m[1] * m[2];\n    const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n    const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n    return [xt, yt];\n  }\n\n  // Applies the transform to the rectangle and finds the minimum axially\n  // aligned bounding box.\n  static getAxialAlignedBoundingBox(r, m) {\n    const p1 = this.applyTransform(r, m);\n    const p2 = this.applyTransform(r.slice(2, 4), m);\n    const p3 = this.applyTransform([r[0], r[3]], m);\n    const p4 = this.applyTransform([r[2], r[1]], m);\n    return [\n      Math.min(p1[0], p2[0], p3[0], p4[0]),\n      Math.min(p1[1], p2[1], p3[1], p4[1]),\n      Math.max(p1[0], p2[0], p3[0], p4[0]),\n      Math.max(p1[1], p2[1], p3[1], p4[1]),\n    ];\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(m) {\n    const transpose = [m[0], m[2], m[1], m[3]];\n\n    // Multiply matrix m with its transpose.\n    const a = m[0] * transpose[0] + m[1] * transpose[2];\n    const b = m[0] * transpose[1] + m[1] * transpose[3];\n    const c = m[2] * transpose[0] + m[3] * transpose[2];\n    const d = m[2] * transpose[1] + m[3] * transpose[3];\n\n    // Solve the second degree polynomial to get roots.\n    const first = (a + d) / 2;\n    const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;\n    const sx = first + second || 1;\n    const sy = first - second || 1;\n\n    // Scale values are the square roots of the eigenvalues.\n    return [Math.sqrt(sx), Math.sqrt(sy)];\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    if (yLow > yHigh) {\n      return null;\n    }\n\n    return [xLow, yLow, xHigh, yHigh];\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    if (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    } else {\n      minMax = [\n        Math.min(x0, x3),\n        Math.min(y0, y3),\n        Math.max(x0, x3),\n        Math.max(y0, y3),\n      ];\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    return minMax;\n  }\n}\n\nconst PDFStringTranslateTable = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8,\n  0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192,\n  0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,\n  0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d,\n  0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac,\n];\n\nfunction stringToPDFString(str) {\n  // See section 7.9.2.2 Text String Type.\n  // The string can contain some language codes bracketed with 0x0b,\n  // so we must remove them.\n  if (str[0] >= \"\\xEF\") {\n    let encoding;\n    if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n      encoding = \"utf-16be\";\n      if (str.length % 2 === 1) {\n        str = str.slice(0, -1);\n      }\n    } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n      encoding = \"utf-16le\";\n      if (str.length % 2 === 1) {\n        str = str.slice(0, -1);\n      }\n    } else if (str[0] === \"\\xEF\" && str[1] === \"\\xBB\" && str[2] === \"\\xBF\") {\n      encoding = \"utf-8\";\n    }\n\n    if (encoding) {\n      try {\n        const decoder = new TextDecoder(encoding, { fatal: true });\n        const buffer = stringToBytes(str);\n        const decoded = decoder.decode(buffer);\n        if (!decoded.includes(\"\\x1b\")) {\n          return decoded;\n        }\n        return decoded.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g, \"\");\n      } catch (ex) {\n        warn(`stringToPDFString: \"${ex}\".`);\n      }\n    }\n  }\n  // ISO Latin 1\n  const strBuf = [];\n  for (let i = 0, ii = str.length; i < ii; i++) {\n    const charCode = str.charCodeAt(i);\n    if (charCode === 0x1b) {\n      // eslint-disable-next-line no-empty\n      while (++i < ii && str.charCodeAt(i) !== 0x1b) {}\n      continue;\n    }\n    const code = PDFStringTranslateTable[charCode];\n    strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n  }\n  return strBuf.join(\"\");\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\nfunction getModificationDate(date = new Date()) {\n  const buffer = [\n    date.getUTCFullYear().toString(),\n    (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n    date.getUTCDate().toString().padStart(2, \"0\"),\n    date.getUTCHours().toString().padStart(2, \"0\"),\n    date.getUTCMinutes().toString().padStart(2, \"0\"),\n    date.getUTCSeconds().toString().padStart(2, \"0\"),\n  ];\n\n  return buffer.join(\"\");\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 (\n    (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n    (typeof crypto !== \"undefined\" && typeof crypto?.randomUUID === \"function\")\n  ) {\n    return crypto.randomUUID();\n  }\n  const buf = new Uint8Array(32);\n  if (\n    typeof crypto !== \"undefined\" &&\n    typeof crypto?.getRandomValues === \"function\"\n  ) {\n    crypto.getRandomValues(buf);\n  } else {\n    for (let i = 0; i < 32; i++) {\n      buf[i] = Math.floor(Math.random() * 255);\n    }\n  }\n  return bytesToString(buf);\n}\n\nconst AnnotationPrefix = \"pdfjs_internal_id_\";\n\nconst FontRenderOps = {\n  BEZIER_CURVE_TO: 0,\n  MOVE_TO: 1,\n  LINE_TO: 2,\n  QUADRATIC_CURVE_TO: 3,\n  RESTORE: 4,\n  SAVE: 5,\n  SCALE: 6,\n  TRANSFORM: 7,\n  TRANSLATE: 8,\n};\n\nexport {\n  AbortException,\n  AnnotationActionEventType,\n  AnnotationBorderStyleType,\n  AnnotationEditorParamsType,\n  AnnotationEditorPrefix,\n  AnnotationEditorType,\n  AnnotationFieldFlag,\n  AnnotationFlag,\n  AnnotationMode,\n  AnnotationPrefix,\n  AnnotationReplyType,\n  AnnotationType,\n  assert,\n  BaseException,\n  BASELINE_FACTOR,\n  bytesToString,\n  CMapCompressionType,\n  createValidAbsoluteUrl,\n  DocumentActionEventType,\n  FeatureTest,\n  FONT_IDENTITY_MATRIX,\n  FontRenderOps,\n  FormatError,\n  getModificationDate,\n  getUuid,\n  getVerbosityLevel,\n  IDENTITY_MATRIX,\n  ImageKind,\n  info,\n  InvalidPDFException,\n  isArrayEqual,\n  isNodeJS,\n  LINE_DESCENT_FACTOR,\n  LINE_FACTOR,\n  MAX_IMAGE_SIZE_TO_CACHE,\n  MissingPDFException,\n  normalizeUnicode,\n  objectFromMap,\n  objectSize,\n  OPS,\n  PageActionEventType,\n  PasswordException,\n  PasswordResponses,\n  PermissionFlag,\n  RenderingIntentFlag,\n  setVerbosityLevel,\n  shadow,\n  string32,\n  stringToBytes,\n  stringToPDFString,\n  stringToUTF8String,\n  TextRenderingMode,\n  UnexpectedResponseException,\n  UnknownErrorException,\n  unreachable,\n  utf8StringToString,\n  Util,\n  VerbosityLevel,\n  warn,\n  StampTypes\n};\n","/* Copyright 2023 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 { DOMSVGFactory, shadow } from \"pdfjs-lib\";\n\nclass AltTextManager {\n  #boundUpdateUIState = this.#updateUIState.bind(this);\n\n  #boundSetPosition = this.#setPosition.bind(this);\n\n  #boundOnClick = this.#onClick.bind(this);\n\n  #currentEditor = null;\n\n  #cancelButton;\n\n  #dialog;\n\n  #eventBus;\n\n  #hasUsedPointer = false;\n\n  #optionDescription;\n\n  #optionDecorative;\n\n  #overlayManager;\n\n  #saveButton;\n\n  #textarea;\n\n  #uiManager;\n\n  #previousAltText = null;\n\n  #svgElement = null;\n\n  #rectElement = null;\n\n  #container;\n\n  #telemetryData = null;\n\n  constructor(\n    {\n      dialog,\n      optionDescription,\n      optionDecorative,\n      textarea,\n      cancelButton,\n      saveButton,\n    },\n    container,\n    overlayManager,\n    eventBus\n  ) {\n    this.#dialog = dialog;\n    this.#optionDescription = optionDescription;\n    this.#optionDecorative = optionDecorative;\n    this.#textarea = textarea;\n    this.#cancelButton = cancelButton;\n    this.#saveButton = saveButton;\n    this.#overlayManager = overlayManager;\n    this.#eventBus = eventBus;\n    this.#container = container;\n\n    dialog.addEventListener(\"close\", this.#close.bind(this));\n    dialog.addEventListener(\"contextmenu\", event => {\n      if (event.target !== this.#textarea) {\n        event.preventDefault();\n      }\n    });\n    cancelButton.addEventListener(\"click\", this.#finish.bind(this));\n    saveButton.addEventListener(\"click\", this.#save.bind(this));\n    optionDescription.addEventListener(\"change\", this.#boundUpdateUIState);\n    optionDecorative.addEventListener(\"change\", this.#boundUpdateUIState);\n\n    this.#overlayManager.register(dialog);\n  }\n\n  get _elements() {\n    return shadow(this, \"_elements\", [\n      this.#optionDescription,\n      this.#optionDecorative,\n      this.#textarea,\n      this.#saveButton,\n      this.#cancelButton,\n    ]);\n  }\n\n  #createSVGElement() {\n    if (this.#svgElement) {\n      return;\n    }\n\n    // We create a mask to add to the dialog backdrop: the idea is to have a\n    // darken background everywhere except on the editor to clearly see the\n    // picture to describe.\n\n    const svgFactory = new DOMSVGFactory();\n    const svg = (this.#svgElement = svgFactory.createElement(\"svg\"));\n    svg.setAttribute(\"width\", \"0\");\n    svg.setAttribute(\"height\", \"0\");\n    const defs = svgFactory.createElement(\"defs\");\n    svg.append(defs);\n    const mask = svgFactory.createElement(\"mask\");\n    defs.append(mask);\n    mask.setAttribute(\"id\", \"alttext-manager-mask\");\n    mask.setAttribute(\"maskContentUnits\", \"objectBoundingBox\");\n    let rect = svgFactory.createElement(\"rect\");\n    mask.append(rect);\n    rect.setAttribute(\"fill\", \"white\");\n    rect.setAttribute(\"width\", \"1\");\n    rect.setAttribute(\"height\", \"1\");\n    rect.setAttribute(\"x\", \"0\");\n    rect.setAttribute(\"y\", \"0\");\n\n    rect = this.#rectElement = svgFactory.createElement(\"rect\");\n    mask.append(rect);\n    rect.setAttribute(\"fill\", \"black\");\n    this.#dialog.append(svg);\n  }\n\n  async editAltText(uiManager, editor) {\n    if (this.#currentEditor || !editor) {\n      return;\n    }\n\n    this.#createSVGElement();\n\n    this.#hasUsedPointer = false;\n    for (const element of this._elements) {\n      element.addEventListener(\"click\", this.#boundOnClick);\n    }\n\n    const { altText, decorative } = editor.altTextData;\n    if (decorative === true) {\n      this.#optionDecorative.checked = true;\n      this.#optionDescription.checked = false;\n    } else {\n      this.#optionDecorative.checked = false;\n      this.#optionDescription.checked = true;\n    }\n    this.#previousAltText = this.#textarea.value = altText?.trim() || \"\";\n    this.#updateUIState();\n\n    this.#currentEditor = editor;\n    this.#uiManager = uiManager;\n    this.#uiManager.removeEditListeners();\n    this.#eventBus._on(\"resize\", this.#boundSetPosition);\n\n    try {\n      await this.#overlayManager.open(this.#dialog);\n      this.#setPosition();\n    } catch (ex) {\n      this.#close();\n      throw ex;\n    }\n  }\n\n  #setPosition() {\n    if (!this.#currentEditor) {\n      return;\n    }\n    const dialog = this.#dialog;\n    const { style } = dialog;\n    const {\n      x: containerX,\n      y: containerY,\n      width: containerW,\n      height: containerH,\n    } = this.#container.getBoundingClientRect();\n    const { innerWidth: windowW, innerHeight: windowH } = window;\n    const { width: dialogW, height: dialogH } = dialog.getBoundingClientRect();\n    const { x, y, width, height } = this.#currentEditor.getClientDimensions();\n    const MARGIN = 10;\n    const isLTR = this.#uiManager.direction === \"ltr\";\n\n    const xs = Math.max(x, containerX);\n    const xe = Math.min(x + width, containerX + containerW);\n    const ys = Math.max(y, containerY);\n    const ye = Math.min(y + height, containerY + containerH);\n    this.#rectElement.setAttribute(\"width\", `${(xe - xs) / windowW}`);\n    this.#rectElement.setAttribute(\"height\", `${(ye - ys) / windowH}`);\n    this.#rectElement.setAttribute(\"x\", `${xs / windowW}`);\n    this.#rectElement.setAttribute(\"y\", `${ys / windowH}`);\n\n    let left = null;\n    let top = Math.max(y, 0);\n    top += Math.min(windowH - (top + dialogH), 0);\n\n    if (isLTR) {\n      // Prefer to position the dialog \"after\" (so on the right) the editor.\n      if (x + width + MARGIN + dialogW < windowW) {\n        left = x + width + MARGIN;\n      } else if (x > dialogW + MARGIN) {\n        left = x - dialogW - MARGIN;\n      }\n    } else if (x > dialogW + MARGIN) {\n      left = x - dialogW - MARGIN;\n    } else if (x + width + MARGIN + dialogW < windowW) {\n      left = x + width + MARGIN;\n    }\n\n    if (left === null) {\n      top = null;\n      left = Math.max(x, 0);\n      left += Math.min(windowW - (left + dialogW), 0);\n      if (y > dialogH + MARGIN) {\n        top = y - dialogH - MARGIN;\n      } else if (y + height + MARGIN + dialogH < windowH) {\n        top = y + height + MARGIN;\n      }\n    }\n\n    if (top !== null) {\n      dialog.classList.add(\"positioned\");\n      if (isLTR) {\n        style.left = `${left}px`;\n      } else {\n        style.right = `${windowW - left - dialogW}px`;\n      }\n      style.top = `${top}px`;\n    } else {\n      dialog.classList.remove(\"positioned\");\n      style.left = \"\";\n      style.top = \"\";\n    }\n  }\n\n  #finish() {\n    if (this.#overlayManager.active === this.#dialog) {\n      this.#overlayManager.close(this.#dialog);\n    }\n  }\n\n  #close() {\n    this.#currentEditor._reportTelemetry(\n      this.#telemetryData || {\n        action: \"alt_text_cancel\",\n        alt_text_keyboard: !this.#hasUsedPointer,\n      }\n    );\n    this.#telemetryData = null;\n\n    this.#removeOnClickListeners();\n    this.#uiManager?.addEditListeners();\n    this.#eventBus._off(\"resize\", this.#boundSetPosition);\n    this.#currentEditor.altTextFinish();\n    this.#currentEditor = null;\n    this.#uiManager = null;\n  }\n\n  #updateUIState() {\n    this.#textarea.disabled = this.#optionDecorative.checked;\n  }\n\n  #save() {\n    const altText = this.#textarea.value.trim();\n    const decorative = this.#optionDecorative.checked;\n    this.#currentEditor.altTextData = {\n      altText,\n      decorative,\n    };\n    this.#telemetryData = {\n      action: \"alt_text_save\",\n      alt_text_description: !!altText,\n      alt_text_edit:\n        !!this.#previousAltText && this.#previousAltText !== altText,\n      alt_text_decorative: decorative,\n      alt_text_keyboard: !this.#hasUsedPointer,\n    };\n    this.#finish();\n  }\n\n  #onClick(evt) {\n    if (evt.detail === 0) {\n      return; // The keyboard was used.\n    }\n    this.#hasUsedPointer = true;\n    this.#removeOnClickListeners();\n  }\n\n  #removeOnClickListeners() {\n    for (const element of this._elements) {\n      element.removeEventListener(\"click\", this.#boundOnClick);\n    }\n  }\n\n  destroy() {\n    this.#uiManager = null; // Avoid re-adding the edit listeners.\n    this.#finish();\n    this.#svgElement?.remove();\n    this.#svgElement = this.#rectElement = null;\n  }\n}\n\nexport { AltTextManager };\n","/* Copyright 2022 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/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/editor/tools.js\").AnnotationEditorUIManager} AnnotationEditorUIManager */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./text_accessibility.js\").TextAccessibilityManager} TextAccessibilityManager */\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/annotation_layer.js\").AnnotationLayer} AnnotationLayer */\n\nimport { AnnotationEditorLayer } from \"pdfjs-lib\";\nimport { GenericL10n } from \"web-null_l10n\";\n\n/**\n * @typedef {Object} AnnotationEditorLayerBuilderOptions\n * @property {AnnotationEditorUIManager} [uiManager]\n * @property {PDFPageProxy} pdfPage\n * @property {IL10n} [l10n]\n * @property {TextAccessibilityManager} [accessibilityManager]\n * @property {AnnotationLayer} [annotationLayer]\n * @property {TextLayer} [textLayer]\n * @property {DrawLayer} [drawLayer]\n * @property {function} [onAppend]\n */\n\nclass AnnotationEditorLayerBuilder {\n  #annotationLayer = null;\n\n  #drawLayer = null;\n\n  #onAppend = null;\n\n  #textLayer = null;\n\n  #uiManager;\n\n  /**\n   * @param {AnnotationEditorLayerBuilderOptions} options\n   */\n  constructor(options) {\n    this.pdfPage = options.pdfPage;\n    this.accessibilityManager = options.accessibilityManager;\n    this.l10n = options.l10n;\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      this.l10n ||= new GenericL10n();\n    }\n    this.annotationEditorLayer = null;\n    this.div = null;\n    this._cancelled = false;\n    this.#uiManager = options.uiManager;\n    this.#annotationLayer = options.annotationLayer || null;\n    this.#textLayer = options.textLayer || null;\n    this.#drawLayer = options.drawLayer || null;\n    this.#onAppend = options.onAppend || null;\n  }\n\n  /**\n   * @param {PageViewport} viewport\n   * @param {string} intent (default value is 'display')\n   */\n  async render(viewport, intent = \"display\") {\n    if (intent !== \"display\") {\n      return;\n    }\n\n    if (this._cancelled) {\n      return;\n    }\n\n    const clonedViewport = viewport.clone({ dontFlip: true });\n    if (this.div) {\n      this.annotationEditorLayer.update({ viewport: clonedViewport });\n      this.show();\n      return;\n    }\n\n    // Create an AnnotationEditor layer div\n    const div = (this.div = document.createElement(\"div\"));\n    div.className = \"annotationEditorLayer\";\n    div.hidden = true;\n    div.dir = this.#uiManager.direction;\n    this.#onAppend?.(div);\n\n    this.annotationEditorLayer = new AnnotationEditorLayer({\n      uiManager: this.#uiManager,\n      div,\n      accessibilityManager: this.accessibilityManager,\n      pageIndex: this.pdfPage.pageNumber - 1,\n      l10n: this.l10n,\n      viewport: clonedViewport,\n      annotationLayer: this.#annotationLayer,\n      textLayer: this.#textLayer,\n      drawLayer: this.#drawLayer,\n    });\n\n    const parameters = {\n      viewport: clonedViewport,\n      div,\n      annotations: null,\n      intent,\n    };\n\n    this.annotationEditorLayer.render(parameters);\n    this.show();\n  }\n\n  cancel() {\n    this._cancelled = true;\n\n    if (!this.div) {\n      return;\n    }\n    this.annotationEditorLayer.destroy();\n  }\n\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n\n  show() {\n    if (!this.div || this.annotationEditorLayer.isInvisible) {\n      return;\n    }\n    this.div.hidden = false;\n  }\n}\n\nexport { AnnotationEditorLayerBuilder };\n","/* Copyright 2022 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/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport { AnnotationEditorParamsType } from \"pdfjs-lib\";\nimport { StampTypes } from \"../src/shared/util.js\";\n\n/**\n * @typedef {Object} AnnotationEditorParamsOptions\n * @property {HTMLInputElement} editorFreeTextFontSize\n * @property {HTMLInputElement} editorFreeTextColor\n * @property {HTMLInputElement} editorInkColor\n * @property {HTMLInputElement} editorInkThickness\n * @property {HTMLInputElement} editorInkOpacity\n * @property {HTMLButtonElement} editorStampAddImage\n * @property {HTMLInputElement} editorFreeHighlightThickness\n * @property {HTMLButtonElement} editorHighlightShowAll\n */\n\nclass AnnotationEditorParams {\n  /**\n   * @param {AnnotationEditorParamsOptions} options\n   * @param {EventBus} eventBus\n   */\n  constructor(options, eventBus) {\n    this.eventBus = eventBus;\n    this.#bindListeners(options);\n  }\n\n  /**\n   * @param {AnnotationEditorParamsOptions} options\n   */\n  #bindListeners({\n    editorFreeTextFontSize,\n    editorFreeTextColor,\n    editorInkColor,\n    editorInkThickness,\n    editorInkOpacity,\n    editorStampAddImage,\n    editorFreeHighlightThickness,\n    editorHighlightShowAll,\n    editorRedactionStampAddImage,\n    editorApprovedStampAddImage,\n    editorRejectedStampAddImage\n  }) {\n    const dispatchEvent = (typeStr, value) => {\n      this.eventBus.dispatch(\"switchannotationeditorparams\", {\n        source: this,\n        type: AnnotationEditorParamsType[typeStr],\n        value,\n      });\n    };\n    editorFreeTextFontSize.addEventListener(\"input\", function () {\n      dispatchEvent(\"FREETEXT_SIZE\", this.valueAsNumber);\n    });\n    editorFreeTextColor.addEventListener(\"input\", function () {\n      dispatchEvent(\"FREETEXT_COLOR\", this.value);\n    });\n    editorInkColor.addEventListener(\"input\", function () {\n      dispatchEvent(\"INK_COLOR\", this.value);\n    });\n    editorInkThickness.addEventListener(\"input\", function () {\n      dispatchEvent(\"INK_THICKNESS\", this.valueAsNumber);\n    });\n    editorInkOpacity.addEventListener(\"input\", function () {\n      dispatchEvent(\"INK_OPACITY\", this.valueAsNumber);\n    });\n    editorStampAddImage.addEventListener(\"click\", () => {\n      dispatchEvent(\"CREATE\");\n    });\n    editorRedactionStampAddImage.addEventListener(\"click\", () => {\n      dispatchEvent(\"CREATE\", StampTypes.REDACTION);\n    });\n    editorApprovedStampAddImage.addEventListener(\"click\", () => {\n      dispatchEvent(\"CREATE\", StampTypes.APPROVED);\n    });\n    editorRejectedStampAddImage.addEventListener(\"click\", () => {\n      dispatchEvent(\"CREATE\", StampTypes.REJECTED);\n    });\n    editorFreeHighlightThickness.addEventListener(\"input\", function () {\n      dispatchEvent(\"HIGHLIGHT_THICKNESS\", this.valueAsNumber);\n    });\n\n    // Workaround to avoid having multiple event listeners attached to the\n    // Show all switch of the editor highlight\n    // This only happens in idos when switching between documents\n    // The pdf app gets instantiated every time but it's not unbinding the event listeners\n    // This proposed solution clones the element so it loses all previous\n    // attached events\n    function toggleHighlightShowAll() {\n      const checked = this.getAttribute(\"aria-pressed\") === \"true\";\n      this.setAttribute(\"aria-pressed\", !checked);\n      dispatchEvent(\"HIGHLIGHT_SHOW_ALL\", !checked);\n    }\n    const clonedEditorHightlightShowAll = editorHighlightShowAll.cloneNode(true);\n    clonedEditorHightlightShowAll.addEventListener(\"click\", toggleHighlightShowAll);\n    editorHighlightShowAll.parentNode.replaceChild(clonedEditorHightlightShowAll, editorHighlightShowAll);\n\n    this.eventBus._on(\"annotationeditorparamschanged\", evt => {\n      for (const [type, value] of evt.details) {\n        switch (type) {\n          case AnnotationEditorParamsType.FREETEXT_SIZE:\n            editorFreeTextFontSize.value = value;\n            break;\n          case AnnotationEditorParamsType.FREETEXT_COLOR:\n            editorFreeTextColor.value = value;\n            break;\n          case AnnotationEditorParamsType.INK_COLOR:\n            editorInkColor.value = value;\n            break;\n          case AnnotationEditorParamsType.INK_THICKNESS:\n            editorInkThickness.value = value;\n            break;\n          case AnnotationEditorParamsType.INK_OPACITY:\n            editorInkOpacity.value = value;\n            break;\n          case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS:\n            editorFreeHighlightThickness.value = value;\n            break;\n          case AnnotationEditorParamsType.HIGHLIGHT_FREE:\n            editorFreeHighlightThickness.disabled = !value;\n            break;\n          case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL:\n            editorHighlightShowAll.setAttribute(\"aria-pressed\", value);\n            break;\n        }\n      }\n    });\n  }\n}\n\nexport { AnnotationEditorParams };\n","/* Copyright 2014 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/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/annotation_storage\").AnnotationStorage} AnnotationStorage */\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./text_accessibility.js\").TextAccessibilityManager} TextAccessibilityManager */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/editor/tools.js\").AnnotationEditorUIManager} AnnotationEditorUIManager */\n\nimport { AnnotationLayer } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} AnnotationLayerBuilderOptions\n * @property {PDFPageProxy} pdfPage\n * @property {AnnotationStorage} [annotationStorage]\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n *   for annotation icons. Include trailing slash.\n * @property {boolean} renderForms\n * @property {IPDFLinkService} linkService\n * @property {IDownloadManager} [downloadManager]\n * @property {boolean} [enableScripting]\n * @property {Promise<boolean>} [hasJSActionsPromise]\n * @property {Promise<Object<string, Array<Object>> | null>}\n *   [fieldObjectsPromise]\n * @property {Map<string, HTMLCanvasElement>} [annotationCanvasMap]\n * @property {TextAccessibilityManager} [accessibilityManager]\n * @property {AnnotationEditorUIManager} [annotationEditorUIManager]\n * @property {function} [onAppend]\n */\n\nclass AnnotationLayerBuilder {\n  #onAppend = null;\n\n  #eventAbortController = null;\n\n  /**\n   * @param {AnnotationLayerBuilderOptions} options\n   */\n  constructor({\n    pdfPage,\n    linkService,\n    downloadManager,\n    annotationStorage = null,\n    imageResourcesPath = \"\",\n    renderForms = true,\n    enableScripting = false,\n    hasJSActionsPromise = null,\n    fieldObjectsPromise = null,\n    annotationCanvasMap = null,\n    accessibilityManager = null,\n    annotationEditorUIManager = null,\n    onAppend = null,\n  }) {\n    this.pdfPage = pdfPage;\n    this.annotationStore = PDFViewerApplication.appConfig.annotationStore;\n    this.linkService = linkService;\n    this.downloadManager = downloadManager;\n    this.imageResourcesPath = imageResourcesPath;\n    this.renderForms = renderForms;\n    this.annotationStorage = annotationStorage;\n    this.enableScripting = enableScripting;\n    this._hasJSActionsPromise = hasJSActionsPromise || Promise.resolve(false);\n    this._fieldObjectsPromise = fieldObjectsPromise || Promise.resolve(null);\n    this._annotationCanvasMap = annotationCanvasMap;\n    this._accessibilityManager = accessibilityManager;\n    this._annotationEditorUIManager = annotationEditorUIManager;\n    this.#onAppend = onAppend;\n\n    this.annotationLayer = null;\n    this.div = null;\n    this._cancelled = false;\n    this._eventBus = linkService.eventBus;\n  }\n\n  /**\n   * @param {PageViewport} viewport\n   * @param {string} intent (default value is 'display')\n   * @returns {Promise<void>} A promise that is resolved when rendering of the\n   *   annotations is complete.\n   */\n  async render(viewport, intent = \"display\") {\n    if (this.div) {\n      if (this._cancelled || !this.annotationLayer) {\n        return;\n      }\n      // If an annotationLayer already exists, refresh its children's\n      // transformation matrices.\n      this.annotationLayer.update({\n        viewport: viewport.clone({ dontFlip: true }),\n      });\n      return;\n    }\n\n    let [annotations, hasJSActions, fieldObjects] = await Promise.all([\n      this.pdfPage.getAnnotations({ intent }),\n      this._hasJSActionsPromise,\n      this._fieldObjectsPromise,\n    ]);\n    if (this._cancelled) {\n      return;\n    }\n    // if (this.annotationStore.get(this.pdfPage._pageIndex)) {\n    //   annotations.push(...this.annotationStore.get(this.pdfPage._pageIndex));\n    // }\n\n    // Create an annotation layer div and render the annotations\n    // if there is at least one annotation.\n    const div = (this.div = document.createElement(\"div\"));\n    div.className = \"annotationLayer\";\n    this.#onAppend?.(div);\n\n    this.annotationLayer = new AnnotationLayer({\n      div,\n      accessibilityManager: this._accessibilityManager,\n      annotationCanvasMap: this._annotationCanvasMap,\n      annotationEditorUIManager: this._annotationEditorUIManager,\n      page: this.pdfPage,\n      viewport: viewport.clone({ dontFlip: true }),\n    });\n\n    await this.annotationLayer.render({\n      annotations,\n      imageResourcesPath: this.imageResourcesPath,\n      renderForms: this.renderForms,\n      linkService: this.linkService,\n      downloadManager: this.downloadManager,\n      annotationStorage: this.annotationStorage,\n      enableScripting: this.enableScripting,\n      hasJSActions,\n      fieldObjects,\n    });\n  }\n\n  cancel() {\n    this._cancelled = true;\n\n    this.#eventAbortController?.abort();\n    this.#eventAbortController = null;\n  }\n\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n}\n\nexport { AnnotationLayerBuilder };\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\n/** @typedef {import(\"./interfaces.js\").IL10n} IL10n */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/api.js\").PDFDocumentProxy} PDFDocumentProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/api.js\").PDFDocumentLoadingTask} PDFDocumentLoadingTask */\n\nimport {\n  animationStarted,\n  apiPageLayoutToViewerModes,\n  AutoPrintRegExp,\n  DEFAULT_SCALE_VALUE,\n  getActiveOrFocusedElement,\n  isValidRotation,\n  isValidScrollMode,\n  isValidSpreadMode,\n  normalizeWheelEventDirection,\n  ProgressBar,\n  RenderingStates,\n  ScrollMode,\n  SpreadMode,\n} from \"./ui_utils.js\";\nimport {\n  AnnotationEditorType,\n  build,\n  FeatureTest,\n  getDocument,\n  getPdfFilenameFromUrl,\n  GlobalWorkerOptions,\n  InvalidPDFException,\n  isDataScheme,\n  MissingPDFException,\n  noContextMenu,\n  PasswordException,\n  shadow,\n  UnexpectedResponseException,\n  version,\n} from \"pdfjs-lib\";\nimport { AppOptions, OptionKind } from \"./app_options.js\";\nimport { AutomationEventBus, EventBus } from \"./event_utils.js\";\nimport { ExternalServices, initCom, MLManager } from \"web-external_services\";\nimport { LinkTarget, PDFLinkService } from \"./pdf_link_service.js\";\nimport { AltTextManager } from \"web-alt_text_manager\";\nimport { AnnotationEditorParams } from \"web-annotation_editor_params\";\nimport { Attachments } from \"./attachments.js\";\nimport { DownloadManager } from \"web-download_manager\";\nimport { OverlayManager } from \"./overlay_manager.js\";\nimport { PDFFindBar } from \"web-pdf_find_bar\";\nimport { PDFFindController } from \"./pdf_find_controller.js\";\nimport { PDFHistory } from \"./pdf_history.js\";\nimport { PDFPrintServiceFactory } from \"web-print_service\";\nimport { PDFRenderingQueue } from \"./pdf_rendering_queue.js\";\nimport { PDFViewer } from \"./pdf_viewer.js\";\nimport { Preferences } from \"web-preferences\";\nimport { SecondaryToolbar } from \"web-secondary_toolbar\";\nimport { Toolbar } from \"web-toolbar\";\nimport { ViewHistory } from \"./view_history.js\";\nimport { AnnotationEditorPrefix, objectFromMap } from \"../src/shared/util.js\";\n\nconst FORCE_PAGES_LOADED_TIMEOUT = 10000; // ms\nconst WHEEL_ZOOM_DISABLED_TIMEOUT = 1000; // ms\n\nconst ViewOnLoad = {\n  UNKNOWN: -1,\n  PREVIOUS: 0, // Default value.\n  INITIAL: 1,\n};\n\nconst PDFViewerApplication = {\n  initialBookmark: document.location.hash.substring(1),\n  _initializedCapability: {\n    ...Promise.withResolvers(),\n    settled: false,\n  },\n  appConfig: null,\n  /** @type {PDFDocumentProxy} */\n  pdfDocument: null,\n  /** @type {PDFDocumentLoadingTask} */\n  pdfLoadingTask: null,\n  printService: null,\n  /** @type {PDFViewer} */\n  pdfViewer: null,\n  /** @type {PDFRenderingQueue} */\n  pdfRenderingQueue: null,\n  /** @type {PDFLinkService} */\n  pdfLinkService: null,\n  /** @type {PDFHistory} */\n  pdfHistory: null,\n  /** @type {ViewHistory} */\n  store: null,\n  /** @type {DownloadManager} */\n  downloadManager: null,\n  /** @type {OverlayManager} */\n  overlayManager: null,\n  /** @type {Preferences} */\n  preferences: null,\n  /** @type {Toolbar} */\n  toolbar: null,\n  /** @type {SecondaryToolbar} */\n  secondaryToolbar: null,\n  /** @type {Attachments} */\n  attachments: null,\n  /** @type {EventBus} */\n  eventBus: null,\n  /** @type {IL10n} */\n  l10n: null,\n  /** @type {AnnotationEditorParams} */\n  annotationEditorParams: null,\n  annotationsToolbarContainer: null,\n  isInitialViewSet: false,\n  downloadComplete: false,\n  isViewerEmbedded: window.parent !== window,\n  url: \"\",\n  baseUrl: \"\",\n  _downloadUrl: \"\",\n  _eventBusAbortController: null,\n  _windowAbortController: null,\n  documentInfo: null,\n  metadata: null,\n  _contentDispositionFilename: null,\n  _contentLength: null,\n  _saveInProgress: false,\n  _wheelUnusedTicks: 0,\n  _wheelUnusedFactor: 1,\n  _touchUnusedTicks: 0,\n  _touchUnusedFactor: 1,\n  _PDFBug: null,\n  _hasAnnotationEditors: false,\n  _title: document.title,\n  _printAnnotationStoragePromise: null,\n  _touchInfo: null,\n  _isCtrlKeyDown: false,\n  _nimbusDataPromise: null,\n  _caretBrowsing: null,\n  _isScrolling: false,\n\n  // Called once when the document is loaded.\n  async initialize(appConfig) {\n    let l10nPromise;\n    // In the (various) extension builds, where the locale is set automatically,\n    // initialize the `L10n`-instance as soon as possible.\n    if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n      l10nPromise = this.externalServices.createL10n();\n    }\n    this.appConfig = appConfig;\n\n    appConfig.loaderContainer?.setMasked({\n      xtype: \"loadmask\",\n      message: \"Loading\",\n    });\n\n    if (\n      typeof PDFJSDev === \"undefined\"\n        ? window.isGECKOVIEW\n        : PDFJSDev.test(\"GECKOVIEW\")\n    ) {\n      this._nimbusDataPromise = this.externalServices.getNimbusExperimentData();\n    }\n\n    // Ensure that `Preferences`, and indirectly `AppOptions`, have initialized\n    // before creating e.g. the various viewer components.\n    try {\n      await this.preferences.initializedPromise;\n    } catch (ex) {\n      console.error(`initialize: \"${ex.message}\".`);\n    }\n\n    if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n      let mode;\n      switch (AppOptions.get(\"viewerCssTheme\")) {\n        case 1:\n          mode = \"is-light\";\n          break;\n        case 2:\n          mode = \"is-dark\";\n          break;\n      }\n      if (mode) {\n        document.documentElement.classList.add(mode);\n      }\n    }\n\n    // Ensure that the `L10n`-instance has been initialized before creating\n    // e.g. the various viewer components.\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      l10nPromise = this.externalServices.createL10n();\n    }\n    this.l10n = await l10nPromise;\n    document.getElementsByTagName(\"html\")[0].dir = this.l10n.getDirection();\n    // Connect Fluent, when necessary, and translate what we already have.\n    if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n      this.l10n.translate(appConfig.appContainer || document.documentElement);\n    }\n\n    if (\n      this.isViewerEmbedded &&\n      AppOptions.get(\"externalLinkTarget\") === LinkTarget.NONE\n    ) {\n      // Prevent external links from \"replacing\" the viewer,\n      // when it's embedded in e.g. an <iframe> or an <object>.\n      AppOptions.set(\"externalLinkTarget\", LinkTarget.TOP);\n    }\n    if (this.initialized) {\n      this.unbindEvents();\n      this.unbindWindowEvents();\n    }\n    await this._initializeViewerComponents();\n\n    // Bind the various event handlers *after* the viewer has been\n    // initialized, to prevent errors if an event arrives too soon.\n    this.bindEvents();\n    this.bindWindowEvents();\n\n    this._initializedCapability.settled = true;\n    this._initializedCapability.resolve();\n  },\n\n  /**\n   * @private\n   */\n  async _initializeViewerComponents() {\n    const { appConfig, l10n } = this;\n\n    const eventBus = AppOptions.get(\"isInAutomation\")\n      ? new AutomationEventBus()\n      : new EventBus();\n    this.eventBus = eventBus;\n\n    this.overlayManager = new OverlayManager();\n\n    const pdfRenderingQueue = new PDFRenderingQueue();\n    pdfRenderingQueue.onIdle = this._cleanup.bind(this);\n    this.pdfRenderingQueue = pdfRenderingQueue;\n\n    const pdfLinkService = new PDFLinkService({\n      eventBus,\n      externalLinkTarget: AppOptions.get(\"externalLinkTarget\"),\n      externalLinkRel: AppOptions.get(\"externalLinkRel\"),\n      ignoreDestinationZoom: AppOptions.get(\"ignoreDestinationZoom\"),\n    });\n    this.pdfLinkService = pdfLinkService;\n\n    const downloadManager = (this.downloadManager = new DownloadManager());\n\n    const findController = new PDFFindController({\n      linkService: pdfLinkService,\n      eventBus,\n      updateMatchesCountOnProgress:\n        typeof PDFJSDev === \"undefined\"\n          ? !window.isGECKOVIEW\n          : !PDFJSDev.test(\"GECKOVIEW\"),\n    });\n    this.findController = findController;\n\n    const container = appConfig.mainContainer,\n      viewer = appConfig.viewerContainer;\n    const annotationEditorMode = AppOptions.get(\"annotationEditorMode\");\n    const pageColors =\n      AppOptions.get(\"forcePageColors\") ||\n      window.matchMedia(\"(forced-colors: active)\").matches\n        ? {\n            background: AppOptions.get(\"pageColorsBackground\"),\n            foreground: AppOptions.get(\"pageColorsForeground\"),\n          }\n        : null;\n    const altTextManager = appConfig.altTextDialog\n      ? new AltTextManager(\n          appConfig.altTextDialog,\n          container,\n          this.overlayManager,\n          eventBus\n        )\n      : null;\n\n    const pdfViewer = new PDFViewer({\n      container,\n      viewer,\n      eventBus,\n      renderingQueue: pdfRenderingQueue,\n      linkService: pdfLinkService,\n      downloadManager,\n      altTextManager,\n      findController,\n      l10n,\n      textLayerMode: AppOptions.get(\"textLayerMode\"),\n      annotationMode: AppOptions.get(\"annotationMode\"),\n      annotationEditorMode,\n      annotationEditorHighlightColors: AppOptions.get(\"highlightEditorColors\"),\n      enableHighlightFloatingButton: AppOptions.get(\n        \"enableHighlightFloatingButton\"\n      ),\n      imageResourcesPath: AppOptions.get(\"imageResourcesPath\"),\n      enablePrintAutoRotate: AppOptions.get(\"enablePrintAutoRotate\"),\n      maxCanvasPixels: AppOptions.get(\"maxCanvasPixels\"),\n      enablePermissions: AppOptions.get(\"enablePermissions\"),\n      pageColors,\n      mlManager: this.mlManager,\n    });\n    this.pdfViewer = pdfViewer;\n\n    pdfRenderingQueue.setViewer(pdfViewer);\n    pdfLinkService.setViewer(pdfViewer);\n\n    // The browsing history is only enabled when the viewer is standalone,\n    // i.e. not when it is embedded in a web page.\n    if (!this.isViewerEmbedded && !AppOptions.get(\"disableHistory\")) {\n      this.pdfHistory = new PDFHistory({\n        linkService: pdfLinkService,\n        eventBus,\n      });\n      pdfLinkService.setHistory(this.pdfHistory);\n    }\n\n    if (!this.supportsIntegratedFind && appConfig.findBar) {\n      this.findBar?.unbindListeners();\n      this.findBar = new PDFFindBar(appConfig.findBar, eventBus);\n    }\n\n    if (appConfig.annotationEditorParams) {\n      if (annotationEditorMode !== AnnotationEditorType.DISABLE) {\n        appConfig.toolbar?.editorModeButtons?.classList.remove(\"hidden\");\n        appConfig.toolbar?.editorModeSeparator?.classList.remove(\"hidden\");\n\n        this.annotationEditorParams = new AnnotationEditorParams(\n          appConfig.annotationEditorParams,\n          eventBus\n        );\n      } else {\n        appConfig.toolbar?.editorModeButtons?.classList.add(\"hidden\");\n        appConfig.toolbar?.editorModeSeparator?.classList.add(\"hidden\");\n      }\n    }\n\n    if (appConfig.toolbar) {\n      appConfig.toolbar?.editorCommentButton?.classList.remove(\"toggled\");\n      appConfig.toolbar?.editorNoteParamsToolbar?.classList.add(\"hidden\");\n      appConfig.toolbar?.toggleAnnotationsToolbarButton?.classList.remove(\n        \"toggled\"\n      );\n      appConfig.toolbar?.annotationToolbarContainer?.classList.add(\"hidden\");\n      appConfig.signatureActionButtonContainer?.classList.add(\"hidden\");\n      this.toolbar?.unbindListeners();\n      if (\n        typeof PDFJSDev === \"undefined\"\n          ? window.isGECKOVIEW\n          : PDFJSDev.test(\"GECKOVIEW\")\n      ) {\n        this.toolbar = new Toolbar(\n          appConfig,\n          eventBus,\n          await this._nimbusDataPromise\n        );\n      } else {\n        this.toolbar = new Toolbar(appConfig, eventBus);\n      }\n\n      appConfig.toolbar?.signatureSaveButton?.addEventListener(\n        \"click\",\n        function () {\n          PDFViewerApplication.showSignatureCnfrmDialogue();\n        }\n      );\n      appConfig.signatureCnfrmDialog.yesButton.addEventListener(\n        \"click\",\n        function () {\n          PDFViewerApplication.saveSignature();\n          appConfig.signatureCnfrmDialog.noButton.click();\n          PDFViewerApplication.showSignatureActionButtons(false);\n        }\n      );\n    }\n\n    PDFViewerApplication.showSignatureActionButtons(false);\n\n    if (appConfig.attachments) {\n      this.attachments?.unbindListeners();\n      this.attachments = new Attachments(appConfig.attachments, eventBus, this);\n    }\n\n    if (appConfig.secondaryToolbar) {\n      this.secondaryToolbar?.unbindListeners();\n      this.secondaryToolbar = new SecondaryToolbar(\n        appConfig.secondaryToolbar,\n        eventBus\n      );\n    }\n    for (let e of appConfig.appContainer.querySelectorAll(\n      'input[type=\"range\"].slider-progress'\n    )) {\n      e.style.setProperty(\"--value\", e.value);\n      e.style.setProperty(\"--min\", e.min == \"\" ? \"0\" : e.min);\n      e.style.setProperty(\"--max\", e.max == \"\" ? \"100\" : e.max);\n      e.addEventListener(\"input\", () =>\n        e.style.setProperty(\"--value\", e.value)\n      );\n    }\n    this.annotationsToolbarContainer = appConfig.annotationsToolbarContainer;\n  },\n\n  async run(config) {\n    this.preferences = new Preferences();\n    await this.initialize(config);\n\n    const { appConfig } = this;\n    const file = AppOptions.get(\"defaultUrl\");\n    validateFileURL(file);\n\n    if (!AppOptions.get(\"supportsDocumentFonts\")) {\n      AppOptions.set(\"disableFontFace\", true);\n      this.l10n.get(\"pdfjs-web-fonts-disabled\").then(msg => {\n        console.warn(msg);\n      });\n    }\n\n    if (!this.supportsPrinting) {\n      appConfig.toolbar?.print?.classList.add(\"hidden\");\n    } else {\n      appConfig.toolbar?.print?.classList.remove(\"hidden\");\n    }\n\n    if (this.supportsAnnotations) {\n      if (AppOptions.get(\"enableToggleAnnotationsToolbar\")) {\n        appConfig.toolbar?.extractAnnotations?.classList.remove(\"hidden\");\n        appConfig.toolbar?.toggleAnnotationsToolbarButton?.classList.remove(\n          \"hidden\"\n        );\n        if (AppOptions.get(\"enableStampEditor\")) {\n          appConfig.toolbar?.editorStampButton?.classList.remove(\"hidden\");\n          if (AppOptions.get(\"enableApprovedStampType\")) {\n            appConfig.annotationEditorParams?.editorApprovedStampAddImage?.classList.remove(\n              \"hidden\"\n            );\n          }\n          if (AppOptions.get(\"enableRejectedStampType\")) {\n            appConfig.annotationEditorParams?.editorRejectedStampAddImage?.classList.remove(\n              \"hidden\"\n            );\n          }\n        }\n\n        if (AppOptions.get(\"enableInkEditor\")) {\n          appConfig.toolbar?.editorInkButton?.classList.remove(\"hidden\");\n        }\n\n        if (AppOptions.get(\"enableFreeTextEditor\")) {\n          appConfig.toolbar?.editorFreeTextButton?.classList.remove(\"hidden\");\n        }\n\n        if (AppOptions.get(\"enableHighlightEditor\")) {\n          appConfig.toolbar?.editorHighlightButton?.classList.remove(\"hidden\");\n        }\n      }\n\n      if (AppOptions.get(\"enableRedactionEditor\")) {\n        appConfig.toolbar?.editorRedactionButton?.classList.remove(\"hidden\");\n        appConfig.annotationEditorParams?.editorRedactionStampAddImage?.classList.remove(\n          \"hidden\"\n        );\n      }\n\n      if (AppOptions.get(\"enableCommentEditor\")) {\n        appConfig.toolbar?.editorCommentButton?.classList.remove(\"hidden\");\n        appConfig.annotationEditorParams?.editorNoteAddComment?.classList.remove(\n          \"hidden\"\n        );\n        appConfig.annotationEditorParams?.editorNoteVisibility?.classList.remove(\n          \"hidden\"\n        );\n      }\n    }\n\n    if (!this.supportsDocParts) {\n      appConfig.attachments.toggleButton.classList.add(\"hidden\");\n    } else {\n      appConfig.attachments.toggleButton.classList.remove(\"hidden\");\n    }\n\n    if (!this.supportsSaveOrientation) {\n      appConfig.secondaryToolbar.saveOrientationButton.classList.add(\"hidden\");\n    } else {\n      appConfig.secondaryToolbar.saveOrientationButton.classList.remove(\n        \"hidden\"\n      );\n    }\n\n    if (!this.supportsAttachments) {\n      appConfig.toolbar?.viewAttachments?.classList.add(\"hidden\");\n    } else {\n      appConfig.toolbar?.viewAttachments?.classList.remove(\"hidden\");\n    }\n\n    if (this.supportsIntegratedFind) {\n      appConfig.toolbar?.viewFind?.classList.add(\"hidden\");\n    }\n\n    if (file) {\n      this.open({ url: file });\n    }\n  },\n\n  get externalServices() {\n    return shadow(this, \"externalServices\", new ExternalServices());\n  },\n\n  get mlManager() {\n    return shadow(\n      this,\n      \"mlManager\",\n      AppOptions.get(\"enableML\") === true ? new MLManager() : null\n    );\n  },\n\n  get initialized() {\n    return this._initializedCapability.settled;\n  },\n\n  get initializedPromise() {\n    return this._initializedCapability.promise;\n  },\n\n  zoomIn(steps, scaleFactor) {\n    this.pdfViewer.increaseScale({\n      drawingDelay: AppOptions.get(\"defaultZoomDelay\"),\n      steps,\n      scaleFactor,\n    });\n  },\n\n  zoomOut(steps, scaleFactor) {\n    this.pdfViewer.decreaseScale({\n      drawingDelay: AppOptions.get(\"defaultZoomDelay\"),\n      steps,\n      scaleFactor,\n    });\n  },\n\n  zoomReset() {\n    this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;\n  },\n\n  get pagesCount() {\n    return this.pdfDocument ? this.pdfDocument.numPages : 0;\n  },\n\n  get page() {\n    return this.pdfViewer.currentPageNumber;\n  },\n\n  set page(val) {\n    this.pdfViewer.currentPageNumber = val;\n  },\n\n  get supportsPrinting() {\n    return PDFPrintServiceFactory.supportsPrinting;\n  },\n\n  get supportsAttachments() {\n    return this.appConfig.attachments?.attachments?.length > 0;\n  },\n\n  get supportsFullscreen() {\n    return shadow(this, \"supportsFullscreen\", document.fullscreenEnabled);\n  },\n\n  get supportsPinchToZoom() {\n    return shadow(\n      this,\n      \"supportsPinchToZoom\",\n      AppOptions.get(\"supportsPinchToZoom\")\n    );\n  },\n\n  get supportsIntegratedFind() {\n    return shadow(\n      this,\n      \"supportsIntegratedFind\",\n      AppOptions.get(\"supportsIntegratedFind\")\n    );\n  },\n\n  get loadingBar() {\n    const barElement = this.appConfig.loadingBar;\n    const bar = barElement ? new ProgressBar(barElement) : null;\n    return shadow(this, \"loadingBar\", bar);\n  },\n\n  get supportsMouseWheelZoomCtrlKey() {\n    return shadow(\n      this,\n      \"supportsMouseWheelZoomCtrlKey\",\n      AppOptions.get(\"supportsMouseWheelZoomCtrlKey\")\n    );\n  },\n\n  get supportsMouseWheelZoomMetaKey() {\n    return shadow(\n      this,\n      \"supportsMouseWheelZoomMetaKey\",\n      AppOptions.get(\"supportsMouseWheelZoomMetaKey\")\n    );\n  },\n\n  get supportsAnnotations() {\n    return this.appConfig.supportsAnnotations != undefined\n      ? this.appConfig.supportsAnnotations\n      : false;\n  },\n\n  get supportsDocParts() {\n    return this.appConfig.attachments !== undefined &&\n      this.appConfig.attachments.attachments !== undefined\n      ? this.appConfig.attachments.attachments.length > 0\n      : false;\n  },\n\n  get supportsSaveOrientation() {\n    return this.appConfig.supportsSaveOrientation != undefined\n      ? this.appConfig.supportsSaveOrientation\n      : false;\n  },\n\n  get _docFilename() {\n    // Use `this.url` instead of `this.baseUrl` to perform filename detection\n    // based on the reference fragment as ultimate fallback if needed.\n    return this._contentDispositionFilename || getPdfFilenameFromUrl(this.url);\n  },\n\n  /**\n   * Closes opened PDF document.\n   * @returns {Promise} - Returns the promise, which is resolved when all\n   *                      destruction is completed.\n   */\n  async close(args) {\n    this._unblockDocumentLoadEvent();\n    this.appConfig.errorWrapper.container.hidden = true;\n    if (!this.pdfLoadingTask) {\n      return;\n    }\n    /*if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n      this.pdfDocument?.annotationStorage.size > 0 &&\n      this._annotationStorageModified\n    ) {\n      try {\n        // Trigger saving, to prevent data loss in forms; see issue 12257.\n        await this.save();\n      } catch {\n        // Ignoring errors, to ensure that document closing won't break.\n      }\n    }*/\n    const promises = [];\n\n    promises.push(this.pdfLoadingTask.destroy());\n    this.pdfLoadingTask = null;\n\n    if (this.pdfDocument) {\n      this.pdfDocument = null;\n\n      this.pdfViewer.setDocument(null);\n      this.pdfLinkService.setDocument(null);\n    }\n    this.pdfLinkService.externalLinkEnabled = true;\n    this.store = null;\n    this.isInitialViewSet = false;\n    this.downloadComplete = false;\n    this.url = \"\";\n    this.baseUrl = \"\";\n    this._downloadUrl = \"\";\n    this.documentInfo = null;\n    this.metadata = null;\n    this._contentDispositionFilename = null;\n    this._contentLength = null;\n    this._saveInProgress = false;\n    this._hasAnnotationEditors = false;\n\n    this.pdfHistory?.reset();\n    this.findBar?.reset();\n    this.toolbar?.reset();\n    if (!(args && args.dontReloadAttachments)) {\n      this.attachments?.reset();\n    }\n    this.secondaryToolbar?.reset();\n    this._PDFBug?.cleanup();\n\n    await Promise.all(promises);\n  },\n\n  /**\n   * Opens a new PDF document.\n   * @param {Object} args - Accepts any/all of the properties from\n   *   {@link DocumentInitParameters}, and also a `originalUrl` string.\n   * @returns {Promise} - Promise that is resolved when the document is opened.\n   */\n  async open(args) {\n    if (this.pdfLoadingTask) {\n      // We need to destroy already opened document.\n      await this.close(args);\n    }\n    // Set the necessary global worker parameters, using the available options.\n    const workerParams = AppOptions.getAll(OptionKind.WORKER);\n    Object.assign(GlobalWorkerOptions, workerParams);\n\n    // Always set `docBaseUrl` in development mode, and in the (various)\n    // extension builds.\n    if (typeof PDFJSDev === \"undefined\") {\n      AppOptions.set(\"docBaseUrl\", document.URL.split(\"#\", 1)[0]);\n    } else if (PDFJSDev.test(\"MOZCENTRAL || CHROME\")) {\n      AppOptions.set(\"docBaseUrl\", this.baseUrl);\n    }\n\n    // Set the necessary API parameters, using all the available options.\n    const apiParams = AppOptions.getAll(OptionKind.API);\n    const loadingTask = getDocument({\n      ...apiParams,\n      ...args,\n    });\n    this.pdfLoadingTask = loadingTask;\n\n    loadingTask.onProgress = ({ loaded, total }) => {\n      this.progress(loaded / total);\n    };\n\n    if (this.appConfig.viewNotSupported) {\n      this.loadingBar.hide();\n      this.appConfig.loaderContainer?.setMasked(false);\n      return this._documentError(\"pdfjs-invalid-file-error\", {\n        isInfo: !(this.appConfig.annotationStore?.docId?.length > 1),\n      }).then(() => {\n        throw InvalidPDFException(\"Preview not supported.\");\n      });\n    }\n\n    return loadingTask.promise.then(\n      pdfDocument => {\n        this.appConfig.loaderContainer?.setMasked(false);\n        this.appConfig.errorWrapper.container.hidden = true;\n        this.load(pdfDocument);\n        if (this.appConfig.allowESignature) {\n          this.appConfig.annotationStore?.disableSignatureButton(false);\n        }\n      },\n      reason => {\n        this.loadingBar.hide();\n        this.appConfig.loaderContainer?.setMasked(false);\n\n        if (loadingTask !== this.pdfLoadingTask) {\n          return undefined; // Ignore errors for previously opened PDF files.\n        }\n\n        let key = \"pdfjs-loading-error\";\n        let isInfo = false;\n        if (\n          reason instanceof InvalidPDFException ||\n          reason instanceof PasswordException\n        ) {\n          key = \"pdfjs-invalid-file-error\";\n          isInfo = true;\n        } else if (reason instanceof MissingPDFException) {\n          key = \"pdfjs-missing-file-error\";\n        } else if (reason instanceof UnexpectedResponseException) {\n          key = \"pdfjs-unexpected-response-error\";\n          switch (reason.status) {\n            case 401:\n              key = \"access-denied\";\n              break;\n            case 406:\n              key = \"document-checkedout\";\n              break;\n            default:\n              key = \"\";\n              break;\n          }\n          if (reason.subcode === 13 || reason.subcode === 14) {\n            key = \"pdfjs-invalid-file-error\";\n            isInfo = true;\n          }\n        }\n        return this.l10n.get(key, null, reason?.message).then(msg => {\n          this._documentError(key, {\n            message: msg,\n            isInfo,\n          }).then(() => {\n            throw reason;\n          });\n        });\n      }\n    );\n  },\n\n  saveAnnotations(file) {\n    return this.annotationStore.writeToStorage?.(file);\n  },\n\n  saveComments() {\n    this.annotationStore.writeToStorage?.();\n  },\n  /**\n   * @private\n   */\n  _ensureDownloadComplete() {\n    if (this.pdfDocument && this.downloadComplete) {\n      return;\n    }\n    throw new Error(\"PDF document not downloaded.\");\n  },\n\n  async download(options = {}) {\n    const url = this._downloadUrl,\n      filename = this._docFilename;\n    try {\n      this._ensureDownloadComplete();\n\n      const data = await this.pdfDocument.getData();\n      const blob = new Blob([data], { type: \"application/pdf\" });\n\n      await this.downloadManager.download(blob, url, filename, options);\n    } catch {\n      // When the PDF document isn't ready, or the PDF file is still\n      // downloading, simply download using the URL.\n      await this.downloadManager.downloadUrl(url, filename, options);\n    }\n  },\n\n  async createPdfFile() {\n    try {\n      this.appConfig.loaderContainer?.setMasked({\n        xtype: \"loadmask\",\n        message: \"Loading\",\n      });\n      this._ensureDownloadComplete();\n      const data = await this.pdfDocument.saveDocument();\n      const blob = new Blob([data], {\n        type: \"application/pdf\",\n      });\n      const file = new File([blob], this._docFilename, {\n        type: \"application/pdf\",\n      });\n      return file;\n    } catch (reason) {\n      throw reason;\n    }\n  },\n\n  async saveDocument() {\n    if (this._saveInProgress) {\n      return;\n    }\n    this._saveInProgress = true;\n    try {\n      const file = await this.createPdfFile();\n      await this.extractAnnotationsFromFile(file); // Use the file for annotation extraction\n    } catch (reason) {\n      console.error(`Error when saving the document: ${reason.message}`);\n      this.appConfig.loaderContainer?.setMasked(false);\n    }\n    this.appConfig.loaderContainer?.setMasked(false);\n    this._saveInProgress = false;\n  },\n\n  async saveSignature() {\n    if (this._saveInProgress) {\n      return;\n    }\n    this._saveInProgress = true;\n    try {\n      const file = await this.createPdfFile();\n      this.annotationStore.saveSignature(file);\n    } catch (reason) {\n      console.error(`Error when saving the document: ${reason.message}`);\n      this.appConfig.loaderContainer?.setMasked(false);\n    }\n    this.appConfig.loaderContainer?.setMasked(false);\n    this._saveInProgress = false;\n  },\n\n  extractAnnotationsFromFile(file) {\n    return new Promise((resolve, error) => {\n      this.readFileAsArrayBuffer(file)\n        .then(arrayBuffer => {\n          const loadingTask = getDocument({ data: arrayBuffer });\n          loadingTask.promise\n            .then(pdfDocument => {\n              const numPages = pdfDocument.numPages;\n              const processPageAnnotations = pageNum => {\n                pdfDocument\n                  .getPage(pageNum)\n                  .then(page => {\n                    page\n                      .getAnnotations()\n                      .then(async annotations => {\n                        annotations.forEach(annotation => {\n                          this.updateStorage(annotation, pageNum - 1); // Store annotation with page index\n                        });\n                        //console.log(`Annotations on Page ${pageNum}:`, annotations);\n                        if (pageNum < numPages) {\n                          processPageAnnotations(pageNum + 1);\n                        } else {\n                          await PDFViewerApplication.saveAnnotations(file);\n                        }\n                        resolve();\n                      })\n                      .catch(error => {\n                        // console.error(\"Error fetching annotations for page \" + pageNum + \":\", error);\n                      });\n                  })\n                  .catch(error => {\n                    //  console.error(\"Error fetching page \" + pageNum + \":\", error);\n                  });\n              };\n              processPageAnnotations(1);\n            })\n            .catch(error => {\n              // console.error(\"Error loading PDF document:\", error);\n            });\n        })\n        .catch(error => {\n          // console.error(\"Error reading file as ArrayBuffer:\", error);\n        });\n    });\n  },\n\n  updateStorage(annotation, pageIndex) {\n    let annotations =\n      PDFViewerApplication.appConfig.annotationStore.get?.(pageIndex);\n    annotations = annotations || [];\n    const indexToRemove = annotations.findIndex(\n      obj => obj.id === annotation.id\n    );\n    if (indexToRemove !== -1) {\n      annotations.splice(indexToRemove, 1);\n    }\n    if (annotation) {\n      annotations.push(annotation);\n    }\n    PDFViewerApplication.appConfig.annotationStore.set?.(\n      pageIndex,\n      annotations\n    );\n  },\n\n  readFileAsArrayBuffer(file) {\n    return new Promise((resolve, reject) => {\n      const reader = new FileReader();\n      reader.onload = () => resolve(reader.result);\n      reader.onerror = error => reject(error);\n      reader.readAsArrayBuffer(file);\n    });\n  },\n\n  async save(options = {}) {\n    if (this._saveInProgress) {\n      return;\n    }\n    this._saveInProgress = true;\n\n    const url = this._downloadUrl,\n      filename = this._docFilename;\n    try {\n      this._ensureDownloadComplete();\n\n      const data = await this.pdfDocument.saveDocument();\n      const blob = new Blob([data], { type: \"application/pdf\" });\n\n      await this.downloadManager.download(blob, url, filename, options);\n    } catch (reason) {\n      // When the PDF document isn't ready, or the PDF file is still\n      // downloading, simply fallback to a \"regular\" download.\n      console.error(`Error when saving the document: ${reason.message}`);\n      await this.download(options);\n    } finally {\n      this._saveInProgress = false;\n    }\n\n    if (this._hasAnnotationEditors) {\n      this.externalServices.reportTelemetry({\n        type: \"editing\",\n        data: {\n          type: \"save\",\n          stats: this.pdfDocument?.annotationStorage.editorStats,\n        },\n      });\n    }\n  },\n\n  downloadOrSave(options = {}) {\n    if (this.pdfDocument?.annotationStorage.size > 0) {\n      this.save(options);\n    } else {\n      this.download(options);\n    }\n  },\n\n  /**\n   * Report the error; used for errors affecting loading and/or parsing of\n   * the entire PDF document.\n   */\n  async _documentError(key, moreInfo = null) {\n    this._unblockDocumentLoadEvent();\n\n    const message = await this._otherError(\n      key || \"pdfjs-loading-error\",\n      moreInfo\n    );\n\n    this.eventBus.dispatch(\"documenterror\", {\n      source: this,\n      message,\n      reason: moreInfo?.message ?? null,\n    });\n  },\n\n  /**\n   * Report the error; used for errors affecting e.g. only a single page.\n   * @param {string} key - The localization key for the error.\n   * @param {Object} [moreInfo] - Further information about the error that is\n   *                              more technical. Should have a 'message' and\n   *                              optionally a 'stack' property.\n   * @returns {string} A (localized) error message that is human readable.\n   */\n  async _otherError(key, moreInfo = null) {\n    let message = await this.l10n.get(key);\n\n    const moreInfoText = [`PDF.js v${version || \"?\"} (build: ${build || \"?\"})`];\n    if (moreInfo) {\n      moreInfoText.push(`Message: ${moreInfo.message}`);\n      message = moreInfo.message;\n      if (moreInfo.stack) {\n        moreInfoText.push(`Stack: ${moreInfo.stack}`);\n      } else {\n        if (moreInfo.filename) {\n          moreInfoText.push(`File: ${moreInfo.filename}`);\n        }\n        if (moreInfo.lineNumber) {\n          moreInfoText.push(`Line: ${moreInfo.lineNumber}`);\n        }\n      }\n    }\n    this.toolbar.setHidden(true);\n    const errorWrapperConfig = this.appConfig.errorWrapper;\n    const errorWrapper = errorWrapperConfig.container;\n    errorWrapper.hidden = false;\n    const errorMessage = errorWrapperConfig.errorMessage;\n    errorMessage.textContent = message;\n    const closeButton = errorWrapperConfig.closeButton;\n    closeButton.onclick = function () {\n      errorWrapper.hidden = true;\n    };\n    const downloadButton = errorWrapperConfig.downloadButton;\n    errorWrapper.firstElementChild.classList.remove(\"info\");\n    errorWrapper.firstElementChild.classList.add(\"danger\");\n    downloadButton.classList.add(\"hidden\");\n    if (moreInfo.isInfo) {\n      errorWrapper.firstElementChild.classList.replace(\"danger\", \"info\");\n      if (this.supportsPrinting) {\n        downloadButton.classList.remove(\"hidden\");\n      }\n    }\n    closeButton.oncontextmenu = noContextMenu;\n    downloadButton.oncontextmenu = noContextMenu;\n    downloadButton.onclick = function () {\n      this._downloadUrl = AppOptions.get(\"defaultUrl\");\n      this.download();\n    }.bind(this);\n    return message;\n  },\n\n  progress(level) {\n    if (!this.loadingBar || this.downloadComplete) {\n      // Don't accidentally show the loading bar again when the entire file has\n      // already been fetched (only an issue when disableAutoFetch is enabled).\n      return;\n    }\n    const percent = Math.round(level * 100);\n    // When we transition from full request to range requests, it's possible\n    // that we discard some of the loaded data. This can cause the loading\n    // bar to move backwards. So prevent this by only updating the bar if it\n    // increases.\n    if (percent <= this.loadingBar.percent) {\n      return;\n    }\n    this.loadingBar.percent = percent;\n\n    // When disableAutoFetch is enabled, it's not uncommon for the entire file\n    // to never be fetched (depends on e.g. the file structure). In this case\n    // the loading bar will not be completely filled, nor will it be hidden.\n    // To prevent displaying a partially filled loading bar permanently, we\n    // hide it when no data has been loaded during a certain amount of time.\n    if (\n      this.pdfDocument?.loadingParams.disableAutoFetch ??\n      AppOptions.get(\"disableAutoFetch\")\n    ) {\n      this.loadingBar.setDisableAutoFetch();\n    }\n  },\n\n  load(pdfDocument) {\n    this.pdfDocument = pdfDocument;\n\n    pdfDocument.getDownloadInfo().then(({ length }) => {\n      this._contentLength = length; // Ensure that the correct length is used.\n      this.downloadComplete = true;\n      this.loadingBar?.hide();\n\n      firstPagePromise.then(() => {\n        this.eventBus.dispatch(\"documentloaded\", { source: this });\n      });\n    });\n\n    // Since the `setInitialView` call below depends on this being resolved,\n    // fetch it early to avoid delaying initial rendering of the PDF document.\n    const pageLayoutPromise = pdfDocument.getPageLayout().catch(() => {\n      /* Avoid breaking initial rendering; ignoring errors. */\n    });\n    const pageModePromise = pdfDocument.getPageMode().catch(() => {\n      /* Avoid breaking initial rendering; ignoring errors. */\n    });\n    const openActionPromise = pdfDocument.getOpenAction().catch(() => {\n      /* Avoid breaking initial rendering; ignoring errors. */\n    });\n\n    this.annotationStore = this.appConfig.annotationStore;\n    this.allowESignature = this.appConfig.allowESignature;\n\n    this.toolbar?.setHidden(false);\n    this.toolbar?.setPagesCount(pdfDocument.numPages, false);\n    this.secondaryToolbar?.setPagesCount(pdfDocument.numPages);\n\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")) {\n      const baseUrl = location.href.split(\"#\", 1)[0];\n      // Ignore \"data:\"-URLs for performance reasons, even though it may cause\n      // internal links to not work perfectly in all cases (see bug 1803050).\n      this.pdfLinkService.setDocument(\n        pdfDocument,\n        isDataScheme(baseUrl) ? null : baseUrl\n      );\n    } else {\n      this.pdfLinkService.setDocument(pdfDocument);\n    }\n\n    const pdfViewer = this.pdfViewer;\n    pdfViewer.setDocument(pdfDocument);\n    const { firstPagePromise, onePageRendered, pagesPromise } = pdfViewer;\n\n    const storedPromise = (this.store = new ViewHistory(\n      pdfDocument.fingerprints[0]\n    ))\n      .getMultiple({\n        page: null,\n        zoom: DEFAULT_SCALE_VALUE,\n        scrollLeft: \"0\",\n        scrollTop: \"0\",\n        rotation: null,\n        scrollMode: ScrollMode.UNKNOWN,\n        spreadMode: SpreadMode.UNKNOWN,\n      })\n      .catch(() => {\n        /* Unable to read from storage; ignoring errors. */\n      });\n\n    firstPagePromise.then(pdfPage => {\n      this.loadingBar?.setWidth(this.appConfig.viewerContainer);\n      this._initializeAnnotationStorageCallbacks(pdfDocument);\n\n      Promise.all([\n        animationStarted,\n        storedPromise,\n        pageLayoutPromise,\n        pageModePromise,\n        openActionPromise,\n      ])\n        .then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => {\n          const viewOnLoad = AppOptions.get(\"viewOnLoad\");\n\n          this._initializePdfHistory({\n            fingerprint: pdfDocument.fingerprints[0],\n            viewOnLoad,\n            initialDest: openAction?.dest,\n          });\n          const initialBookmark = this.initialBookmark;\n\n          // Initialize the default values, from user preferences.\n          const zoom = AppOptions.get(\"defaultZoomValue\");\n          let hash = zoom ? `zoom=${zoom}` : null;\n\n          let rotation = null;\n          let scrollMode = AppOptions.get(\"scrollModeOnLoad\");\n          let spreadMode = AppOptions.get(\"spreadModeOnLoad\");\n\n          if (stored?.page && viewOnLoad !== ViewOnLoad.INITIAL) {\n            hash =\n              `page=${stored.page}&zoom=${zoom || stored.zoom},` +\n              `${stored.scrollLeft},${stored.scrollTop}`;\n\n            // Always let user preference take precedence over the view history.\n            if (scrollMode === ScrollMode.UNKNOWN) {\n              scrollMode = stored.scrollMode | 0;\n            }\n            if (spreadMode === SpreadMode.UNKNOWN) {\n              spreadMode = stored.spreadMode | 0;\n            }\n          }\n          if (\n            pageLayout &&\n            scrollMode === ScrollMode.UNKNOWN &&\n            spreadMode === SpreadMode.UNKNOWN\n          ) {\n            const modes = apiPageLayoutToViewerModes(pageLayout);\n            // TODO: Try to improve page-switching when using the mouse-wheel\n            // and/or arrow-keys before allowing the document to control this.\n            // scrollMode = modes.scrollMode;\n            spreadMode = modes.spreadMode;\n          }\n\n          this.setInitialView(hash, {\n            rotation,\n            scrollMode,\n            spreadMode,\n          });\n          this.eventBus.dispatch(\"documentinit\", { source: this });\n          // Make all navigation keys work on document load,\n          // unless the viewer is embedded in a web page.\n          if (!this.isViewerEmbedded) {\n            pdfViewer.focus();\n          }\n\n          // For documents with different page sizes, once all pages are\n          // resolved, ensure that the correct location becomes visible on load.\n          // (To reduce the risk, in very large and/or slow loading documents,\n          //  that the location changes *after* the user has started interacting\n          //  with the viewer, wait for either `pagesPromise` or a timeout.)\n          await Promise.race([\n            pagesPromise,\n            new Promise(resolve => {\n              setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);\n            }),\n          ]);\n          if (!initialBookmark && !hash) {\n            return;\n          }\n          if (pdfViewer.hasEqualPageSizes) {\n            return;\n          }\n          this.initialBookmark = initialBookmark;\n\n          // eslint-disable-next-line no-self-assign\n          pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;\n          // Re-apply the initial document location.\n          this.setInitialView(hash);\n        })\n        .catch(() => {\n          // Ensure that the document is always completely initialized,\n          // even if there are any errors thrown above.\n          this.setInitialView();\n        })\n        .then(function () {\n          // At this point, rendering of the initial page(s) should always have\n          // started (and may even have completed).\n          // To prevent any future issues, e.g. the document being completely\n          // blank on load, always trigger rendering here.\n          pdfViewer.update();\n        });\n    });\n\n    pagesPromise.then(\n      () => {\n        this._unblockDocumentLoadEvent();\n\n        this._initializeAutoPrint(pdfDocument, openActionPromise);\n      },\n      reason => {\n        this._documentError(\"pdfjs-loading-error\", { message: reason.message });\n      }\n    );\n\n    onePageRendered.then(data => {\n      this.externalServices.reportTelemetry({\n        type: \"pageInfo\",\n        timestamp: data.timestamp,\n      });\n    });\n\n    this._initializePageLabels(pdfDocument);\n    this._initializeMetadata(pdfDocument);\n  },\n\n  /**\n   * @private\n   */\n  async _scriptingDocProperties(pdfDocument) {\n    if (!this.documentInfo) {\n      // It should be *extremely* rare for metadata to not have been resolved\n      // when this code runs, but ensure that we handle that case here.\n      await new Promise(resolve => {\n        this.eventBus._on(\"metadataloaded\", resolve, { once: true });\n      });\n      if (pdfDocument !== this.pdfDocument) {\n        return null; // The document was closed while the metadata resolved.\n      }\n    }\n    if (!this._contentLength) {\n      // Always waiting for the entire PDF document to be loaded will, most\n      // likely, delay sandbox-creation too much in the general case for all\n      // PDF documents which are not provided as binary data to the API.\n      // Hence we'll simply have to trust that the `contentLength` (as provided\n      // by the server), when it exists, is accurate enough here.\n      await new Promise(resolve => {\n        this.eventBus._on(\"documentloaded\", resolve, { once: true });\n      });\n      if (pdfDocument !== this.pdfDocument) {\n        return null; // The document was closed while the downloadInfo resolved.\n      }\n    }\n\n    return {\n      ...this.documentInfo,\n      baseURL: this.baseUrl,\n      filesize: this._contentLength,\n      filename: this._docFilename,\n      metadata: this.metadata?.getRaw(),\n      authors: this.metadata?.get(\"dc:creator\"),\n      numPages: this.pagesCount,\n      URL: this.url,\n    };\n  },\n\n  /**\n   * @private\n   */\n  async _initializeAutoPrint(pdfDocument, openActionPromise) {\n    const [openAction, jsActions] = await Promise.all([\n      openActionPromise,\n      this.pdfViewer.enableScripting ? null : pdfDocument.getJSActions(),\n    ]);\n\n    if (pdfDocument !== this.pdfDocument) {\n      return; // The document was closed while the auto print data resolved.\n    }\n    let triggerAutoPrint = openAction?.action === \"Print\";\n\n    if (jsActions) {\n      console.warn(\"Warning: JavaScript support is not enabled\");\n\n      // Hack to support auto printing.\n      for (const name in jsActions) {\n        if (triggerAutoPrint) {\n          break;\n        }\n        switch (name) {\n          case \"WillClose\":\n          case \"WillSave\":\n          case \"DidSave\":\n          case \"WillPrint\":\n          case \"DidPrint\":\n            continue;\n        }\n        triggerAutoPrint = jsActions[name].some(js => AutoPrintRegExp.test(js));\n      }\n    }\n\n    if (triggerAutoPrint) {\n      this.triggerPrinting();\n    }\n  },\n\n  /**\n   * @private\n   */\n  async _initializeMetadata(pdfDocument) {\n    const { info, metadata, contentDispositionFilename, contentLength } =\n      await pdfDocument.getMetadata();\n\n    if (pdfDocument !== this.pdfDocument) {\n      return; // The document was closed while the metadata resolved.\n    }\n    this.documentInfo = info;\n    this.metadata = metadata;\n    this._contentDispositionFilename ??= contentDispositionFilename;\n    this._contentLength ??= contentLength; // See `getDownloadInfo`-call above.\n\n    // Provides some basic debug information\n    console.log(\n      `PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` +\n        `${(info.Producer || \"-\").trim()} / ${(info.Creator || \"-\").trim()}] ` +\n        `(PDF.js: ${version || \"?\"} [${build || \"?\"}])`\n    );\n\n    if (\n      info.IsXFAPresent &&\n      !info.IsAcroFormPresent &&\n      !pdfDocument.isPureXfa\n    ) {\n      if (pdfDocument.loadingParams.enableXfa) {\n        console.warn(\"Warning: XFA Foreground documents are not supported\");\n      } else {\n        console.warn(\"Warning: XFA support is not enabled\");\n      }\n    } else if (\n      (info.IsAcroFormPresent || info.IsXFAPresent) &&\n      !this.pdfViewer.renderForms\n    ) {\n      console.warn(\"Warning: Interactive form support is not enabled\");\n    }\n\n    if (info.IsSignaturesPresent) {\n      console.warn(\"Warning: Digital signatures validation is not supported\");\n    }\n\n    this.eventBus.dispatch(\"metadataloaded\", { source: this });\n  },\n\n  /**\n   * @private\n   */\n  async _initializePageLabels(pdfDocument) {\n    if (\n      typeof PDFJSDev === \"undefined\"\n        ? window.isGECKOVIEW\n        : PDFJSDev.test(\"GECKOVIEW\")\n    ) {\n      return;\n    }\n    const labels = await pdfDocument.getPageLabels();\n\n    if (pdfDocument !== this.pdfDocument) {\n      return; // The document was closed while the page labels resolved.\n    }\n    if (!labels || AppOptions.get(\"disablePageLabels\")) {\n      return;\n    }\n    const numLabels = labels.length;\n    // Ignore page labels that correspond to standard page numbering,\n    // or page labels that are all empty.\n    let standardLabels = 0,\n      emptyLabels = 0;\n    for (let i = 0; i < numLabels; i++) {\n      const label = labels[i];\n      if (label === (i + 1).toString()) {\n        standardLabels++;\n      } else if (label === \"\") {\n        emptyLabels++;\n      } else {\n        break;\n      }\n    }\n    if (standardLabels >= numLabels || emptyLabels >= numLabels) {\n      return;\n    }\n    const { pdfViewer, toolbar } = this;\n\n    pdfViewer.setPageLabels(labels);\n\n    // Changing toolbar page display to use labels and we need to set\n    // the label of the current page.\n    toolbar?.setPagesCount(numLabels, true);\n    toolbar?.setPageNumber(\n      pdfViewer.currentPageNumber,\n      pdfViewer.currentPageLabel\n    );\n  },\n\n  /**\n   * @private\n   */\n  _initializePdfHistory({ fingerprint, viewOnLoad, initialDest = null }) {\n    if (!this.pdfHistory) {\n      return;\n    }\n    this.pdfHistory.initialize({\n      fingerprint,\n      resetHistory: viewOnLoad === ViewOnLoad.INITIAL,\n      updateUrl: AppOptions.get(\"historyUpdateUrl\"),\n    });\n\n    if (this.pdfHistory.initialBookmark) {\n      this.initialBookmark = this.pdfHistory.initialBookmark;\n    }\n\n    // Always let the browser history/document hash take precedence.\n    if (\n      initialDest &&\n      !this.initialBookmark &&\n      viewOnLoad === ViewOnLoad.UNKNOWN\n    ) {\n      this.initialBookmark = JSON.stringify(initialDest);\n      // TODO: Re-factor the `PDFHistory` initialization to remove this hack\n      // that's currently necessary to prevent weird initial history state.\n      this.pdfHistory.push({ explicitDest: initialDest, pageNumber: null });\n    }\n  },\n\n  /**\n   * @private\n   */\n  _initializeAnnotationStorageCallbacks(pdfDocument) {\n    if (pdfDocument !== this.pdfDocument) {\n      return;\n    }\n    const { annotationStorage } = pdfDocument;\n\n    annotationStorage.onSetModified = () => {\n      window.addEventListener(\"beforeunload\", beforeUnload);\n\n      if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n        this._annotationStorageModified = true;\n      }\n    };\n    annotationStorage.onResetModified = () => {\n      window.removeEventListener(\"beforeunload\", beforeUnload);\n\n      if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n        delete this._annotationStorageModified;\n      }\n    };\n    annotationStorage.onAnnotationEditor = typeStr => {\n      this._hasAnnotationEditors = !!typeStr;\n    };\n  },\n\n  setInitialView(storedHash, { rotation, scrollMode, spreadMode } = {}) {\n    const setRotation = angle => {\n      if (isValidRotation(angle)) {\n        this.pdfViewer.pagesRotation = angle;\n      }\n    };\n    const setViewerModes = (scroll, spread) => {\n      if (isValidScrollMode(scroll)) {\n        this.pdfViewer.scrollMode = scroll;\n      }\n      if (isValidSpreadMode(spread)) {\n        this.pdfViewer.spreadMode = spread;\n      }\n    };\n    this.isInitialViewSet = true;\n\n    setViewerModes(scrollMode, spreadMode);\n\n    if (this.initialBookmark) {\n      setRotation(this.initialRotation);\n      delete this.initialRotation;\n\n      this.pdfLinkService.setHash(this.initialBookmark);\n      this.initialBookmark = null;\n    } else if (storedHash) {\n      setRotation(rotation);\n\n      this.pdfLinkService.setHash(storedHash);\n    }\n\n    // Ensure that the correct page number is displayed in the UI,\n    // even if the active page didn't change during document load.\n    this.toolbar?.setPageNumber(\n      this.pdfViewer.currentPageNumber,\n      this.pdfViewer.currentPageLabel\n    );\n    this.secondaryToolbar?.setPageNumber(this.pdfViewer.currentPageNumber);\n\n    if (!this.pdfViewer.currentScaleValue) {\n      // Scale was not initialized: invalid bookmark or scale was not specified.\n      // Setting the default one.\n      this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;\n    }\n  },\n\n  /**\n   * @private\n   */\n  _cleanup() {\n    if (!this.pdfDocument) {\n      return; // run cleanup when document is loaded\n    }\n    this.pdfViewer.cleanup();\n\n    this.pdfDocument.cleanup(\n      /* keepLoadedFonts = */ AppOptions.get(\"fontExtraProperties\")\n    );\n  },\n\n  forceRendering() {\n    this.pdfRenderingQueue.printing = !!this.printService;\n    this.pdfRenderingQueue.renderHighestPriority();\n  },\n\n  beforePrint() {\n    if (this.printService) {\n      // There is no way to suppress beforePrint/afterPrint events,\n      // but PDFPrintService may generate double events -- this will ignore\n      // the second event that will be coming from native window.print().\n      return;\n    }\n\n    if (!this.supportsPrinting) {\n      this._otherError(\"pdfjs-printing-not-supported\");\n      return;\n    }\n\n    // The beforePrint is a sync method and we need to know layout before\n    // returning from this method. Ensure that we can get sizes of the pages.\n    if (!this.pdfViewer.pageViewsReady) {\n      this.l10n.get(\"pdfjs-printing-not-ready\").then(msg => {\n        // eslint-disable-next-line no-alert\n        window.alert(msg);\n      });\n      return;\n    }\n\n    this.printService = PDFPrintServiceFactory.createPrintService({\n      pdfDocument: this.pdfDocument,\n      pagesOverview: this.pdfViewer.getPagesOverview(),\n      printContainer: this.appConfig.printContainer,\n      printResolution: AppOptions.get(\"printResolution\"),\n      printAnnotationStoragePromise: this._printAnnotationStoragePromise,\n    });\n    this.forceRendering();\n\n    this.printService.layout();\n\n    if (this._hasAnnotationEditors) {\n      this.externalServices.reportTelemetry({\n        type: \"editing\",\n        data: {\n          type: \"print\",\n          stats: this.pdfDocument?.annotationStorage.editorStats,\n        },\n      });\n    }\n  },\n\n  afterPrint() {\n    if (this.printService) {\n      this.printService.destroy();\n      this.printService = null;\n\n      this.pdfDocument?.annotationStorage.resetModified();\n    }\n    this.forceRendering();\n  },\n\n  rotatePages(delta) {\n    this.pdfViewer.pagesRotation += delta;\n  },\n\n  triggerPrinting() {\n    if (!this.supportsPrinting) {\n      return;\n    }\n    window.print();\n  },\n\n  toggleAnnotationsToolbar(toggle) {\n    if (toggle) {\n      this.toggleCommentsToolbar(!toggle);\n    }\n    this.annotationsToolbarContainer.classList.toggle(\"hidden\", !toggle);\n    this.appConfig.toolbar.toggleAnnotationsToolbarButton.classList.toggle(\n      \"toggled\",\n      toggle\n    );\n    const editorParamsToolbar = document.querySelectorAll(\n      \".editorParamsToolbar\"\n    );\n    editorParamsToolbar.forEach(paramsToolbar => {\n      paramsToolbar.classList.toggle(\"annotationToolbarVisible\", toggle);\n    });\n    if (this.annotationsToolbarContainer.classList.contains(\"hidden\")) {\n      this.pdfViewer.annotationEditorMode = { mode: AnnotationEditorType.NONE };\n    }\n    PDFViewerApplication.showSignatureActionButtons(false);\n    this.addTopMarginToMainContainer(toggle);\n  },\n\n  toggleCommentsToolbar(toggle) {\n    if (toggle) {\n      this.toggleAnnotationsToolbar(!toggle);\n    } else {\n      this.pdfViewer.annotationEditorMode = { mode: AnnotationEditorType.NONE };\n    }\n    this.appConfig.toolbar.editorCommentButton.classList.toggle(\n      \"toggled\",\n      toggle\n    );\n    this.appConfig.toolbar.editorCommentButton.setAttribute(\n      \"aria-checked\",\n      toggle\n    );\n    this.appConfig.toolbar.editorNoteParamsToolbar.classList.toggle(\n      \"hidden\",\n      !toggle\n    );\n  },\n  toggleAnnotationsVisibility() {\n    const annotationEditorLayers = document.querySelectorAll(\n      \".annotationEditorLayer\"\n    );\n    annotationEditorLayers.forEach(layer => {\n      layer.classList.toggle(\"hidden\");\n    });\n    [\"freeTextAnnotation\", \"stampAnnotation\"].forEach(type => {\n      document.querySelectorAll(`.${type}`).forEach(layer => {\n        layer.classList.toggle(\"hidden\");\n      });\n    });\n    this.appConfig.toolbar.toggleAnnotationsVisibilityButton.classList.toggle(\n      \"annotationsHidden\"\n    );\n    this.appConfig.toolbar.toggleAnnotationsVisibilityButton.classList.toggle(\n      \"fa-eye\"\n    );\n    this.appConfig.toolbar.toggleAnnotationsVisibilityButton.classList.toggle(\n      \"fa-eye-slash\"\n    );\n  },\n  onCloseSignatureActionButton() {\n    this.appConfig.toolbar.toggleAnnotationsToolbarButton.disabled = false;\n    this.showSignatureActionButtons(false);\n  },\n\n  async showSignatureCnfrmDialogue() {\n    const signatureCnfrmDialog = this.appConfig.signatureCnfrmDialog.container;\n    if (this.overlayManager) {\n      this.abort(signatureCnfrmDialog);\n    }\n    await this.ensureOverlay(signatureCnfrmDialog, \"signatureCnfrmDialog\");\n    this.overlayManager.open(signatureCnfrmDialog);\n  },\n  async showSignatureDialogue(toggle) {\n    this.toggleAnnotationsToolbar(false);\n    const signatureDialog = this.appConfig.signatureDialog.container;\n    if (toggle) {\n      this.abort();\n      return;\n    }\n    if (this.overlayManager) {\n      this.abort(signatureDialog);\n    }\n    await this.ensureOverlay(signatureDialog, \"signatureDialog\");\n    this.overlayManager.open(signatureDialog);\n  },\n\n  ensureOverlay(container, dialogType) {\n    if (typeof PDFJSDev === \"undefined\" && window.isGECKOVIEW) {\n      return Promise.reject(\n        new Error(\n          \"ensureOverlay not implemented in GECKOVIEW development mode.\"\n        )\n      );\n    }\n    if (!this.overlayManager) {\n      throw new Error(\"The overlay manager has not yet been initialized.\");\n    }\n    var overlayPromise = this.overlayManager.register(\n      container,\n      /* canForceClose = */ true\n    );\n    if (dialogType === \"signatureDialog\") {\n      this.appConfig.signatureDialog.closeButton.onclick = this.abort.bind(\n        this,\n        container\n      );\n    } else if (dialogType === \"signatureCnfrmDialog\") {\n      this.appConfig.signatureCnfrmDialog.noButton.onclick = this.abort.bind(\n        this,\n        container\n      );\n    }\n    return overlayPromise;\n  },\n  abort(container) {\n    if (this.overlayManager.active !== null) {\n      this.overlayManager.close(container);\n    }\n  },\n  showSignatureActionButtons(show) {\n    const container = this.appConfig.appContainer.querySelector(\n      \".signatureActionButtonContainer\"\n    );\n    container?.classList.toggle(\"hidden\", !show);\n    this.addTopMarginToMainContainer(show);\n  },\n  addTopMarginToMainContainer(shouldAddMargin) {\n    if (shouldAddMargin) {\n      this.appConfig.mainContainer.style.marginTop = \"32px\";\n    } else {\n      this.appConfig.mainContainer.style.marginTop = \"\";\n    }\n  },\n  bindEvents() {\n    if (this._eventBusAbortController) {\n      return;\n    }\n    this._eventBusAbortController = new AbortController();\n\n    const {\n      eventBus,\n      _eventBusAbortController: { signal },\n    } = this;\n\n    eventBus._on(\"resize\", webViewerResize, { signal });\n    eventBus._on(\"hashchange\", webViewerHashchange, { signal });\n    eventBus._on(\"beforeprint\", this.beforePrint.bind(this), { signal });\n    eventBus._on(\"afterprint\", this.afterPrint.bind(this), { signal });\n    eventBus._on(\"pagerender\", webViewerPageRender, { signal });\n    eventBus._on(\"pagerendered\", webViewerPageRendered, { signal });\n    eventBus._on(\"updateviewarea\", webViewerUpdateViewarea, { signal });\n    eventBus._on(\"pagechanging\", webViewerPageChanging, { signal });\n    eventBus._on(\"scalechanging\", webViewerScaleChanging, { signal });\n    eventBus._on(\"rotationchanging\", webViewerRotationChanging, { signal });\n    eventBus._on(\"namedaction\", webViewerNamedAction, { signal });\n    eventBus._on(\n      \"switchannotationeditormode\",\n      webViewerSwitchAnnotationEditorMode,\n      { signal }\n    );\n    eventBus._on(\n      \"switchannotationeditorparams\",\n      webViewerSwitchAnnotationEditorParams,\n      { signal }\n    );\n    eventBus._on(\"addSignatureTextOption\", webViewerAddSignatureTextOption, {\n      signal,\n    });\n    eventBus._on(\"savecomments\", webViewerSaveComments, { signal });\n    eventBus._on(\"extractannotations\", webViewerExtractAnnotations, { signal });\n    eventBus._on(\"print\", webViewerPrint, { signal });\n    eventBus._on(\"firstpage\", webViewerFirstPage, { signal });\n    eventBus._on(\"lastpage\", webViewerLastPage, { signal });\n    eventBus._on(\"nextpage\", webViewerNextPage, { signal });\n    eventBus._on(\"previouspage\", webViewerPreviousPage, { signal });\n    eventBus._on(\"zoomin\", webViewerZoomIn, { signal });\n    eventBus._on(\"zoomout\", webViewerZoomOut, { signal });\n    eventBus._on(\"zoomreset\", webViewerZoomReset, { signal });\n    eventBus._on(\"pagenumberchanged\", webViewerPageNumberChanged, { signal });\n    eventBus._on(\"scalechanged\", webViewerScaleChanged, { signal });\n    eventBus._on(\"rotatecw\", webViewerRotateCw, { signal });\n    eventBus._on(\"rotateccw\", webViewerRotateCcw, { signal });\n    eventBus._on(\"saveorientation\", webViewerSaveOrientation, { signal });\n    eventBus._on(\"optionalcontentconfig\", webViewerOptionalContentConfig, {\n      signal,\n    });\n    eventBus._on(\"switchscrollmode\", webViewerSwitchScrollMode, { signal });\n    eventBus._on(\"switchspreadmode\", webViewerSwitchSpreadMode, { signal });\n    eventBus._on(\"findfromurlhash\", webViewerFindFromUrlHash, { signal });\n    eventBus._on(\"updatefindmatchescount\", webViewerUpdateFindMatchesCount, {\n      signal,\n    });\n    eventBus._on(\"updatefindcontrolstate\", webViewerUpdateFindControlState, {\n      signal,\n    });\n    eventBus._on(\n      \"toggleannotationstoolbar\",\n      webViewerToggleAnnotationsToolbar,\n      {\n        signal,\n      }\n    );\n    eventBus._on(\"showSignatureDialogue\", webViewerShowSignatureDialogue, {\n      signal,\n    });\n    eventBus._on(\"togglecommentstoolbar\", webViewerToggleCommentsToolbar, {\n      signal,\n    });\n    eventBus._on(\n      \"toggleannotationsvisibility\",\n      webViewerToggleAnnotationsVisibility,\n      {\n        signal,\n      }\n    );\n\n    if (AppOptions.get(\"pdfBug\")) {\n      eventBus._on(\"pagerendered\", reportPageStatsPDFBug, { signal });\n      eventBus._on(\"pagechanging\", reportPageStatsPDFBug, { signal });\n    }\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      eventBus._on(\n        \"annotationeditorstateschanged\",\n        webViewerAnnotationEditorStatesChanged,\n        { signal }\n      );\n      eventBus._on(\"reporttelemetry\", webViewerReportTelemetry, { signal });\n    }\n  },\n\n  bindWindowEvents() {\n    if (this._windowAbortController) {\n      return;\n    }\n    this._windowAbortController = new AbortController();\n\n    const {\n      eventBus,\n      appConfig: { mainContainer },\n      _windowAbortController: { signal },\n    } = this;\n\n    function addWindowResolutionChange(evt = null) {\n      if (evt) {\n        webViewerResolutionChange(evt);\n      }\n      const mediaQueryList = window.matchMedia(\n        `(resolution: ${window.devicePixelRatio || 1}dppx)`\n      );\n      mediaQueryList.addEventListener(\"change\", addWindowResolutionChange, {\n        once: true,\n        signal,\n      });\n    }\n    addWindowResolutionChange();\n\n    window.addEventListener(\"visibilitychange\", webViewerVisibilityChange, {\n      signal,\n    });\n    window.addEventListener(\"wheel\", webViewerWheel, {\n      passive: false,\n      signal,\n    });\n    window.addEventListener(\"touchstart\", webViewerTouchStart, {\n      passive: false,\n      signal,\n    });\n    window.addEventListener(\"touchmove\", webViewerTouchMove, {\n      passive: false,\n      signal,\n    });\n    window.addEventListener(\"touchend\", webViewerTouchEnd, {\n      passive: false,\n      signal,\n    });\n    window.addEventListener(\"click\", webViewerClick, { signal });\n    window.addEventListener(\"keydown\", webViewerKeyDown, { signal });\n    window.addEventListener(\"keyup\", webViewerKeyUp, { signal });\n    window.addEventListener(\n      \"resize\",\n      () => {\n        eventBus.dispatch(\"resize\", { source: window });\n      },\n      { signal }\n    );\n    window.addEventListener(\n      \"hashchange\",\n      () => {\n        eventBus.dispatch(\"hashchange\", {\n          source: window,\n          hash: document.location.hash.substring(1),\n        });\n      },\n      { signal }\n    );\n    window.addEventListener(\n      \"beforeprint\",\n      () => {\n        eventBus.dispatch(\"beforeprint\", { source: window });\n      },\n      { signal }\n    );\n    window.addEventListener(\n      \"afterprint\",\n      () => {\n        eventBus.dispatch(\"afterprint\", { source: window });\n      },\n      { signal }\n    );\n    window.addEventListener(\n      \"updatefromsandbox\",\n      event => {\n        eventBus.dispatch(\"updatefromsandbox\", {\n          source: window,\n          detail: event.detail,\n        });\n      },\n      { signal }\n    );\n\n    if (\n      (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n      !(\"onscrollend\" in document.documentElement)\n    ) {\n      return;\n    }\n    if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n      // Using the values lastScrollTop and lastScrollLeft is a workaround to\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=1881974.\n      // TODO: remove them once the bug is fixed.\n      ({ scrollTop: this._lastScrollTop, scrollLeft: this._lastScrollLeft } =\n        mainContainer);\n    }\n\n    const scrollend = () => {\n      if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n        ({ scrollTop: this._lastScrollTop, scrollLeft: this._lastScrollLeft } =\n          mainContainer);\n      }\n\n      this._isScrolling = false;\n      mainContainer.addEventListener(\"scroll\", scroll, {\n        passive: true,\n        signal,\n      });\n      mainContainer.removeEventListener(\"scrollend\", scrollend, { signal });\n      mainContainer.removeEventListener(\"blur\", scrollend, { signal });\n    };\n    const scroll = () => {\n      if (this._isCtrlKeyDown) {\n        return;\n      }\n      if (\n        (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) &&\n        this._lastScrollTop === mainContainer.scrollTop &&\n        this._lastScrollLeft === mainContainer.scrollLeft\n      ) {\n        return;\n      }\n\n      mainContainer.removeEventListener(\"scroll\", scroll, {\n        passive: true,\n        signal,\n      });\n      this._isScrolling = true;\n      mainContainer.addEventListener(\"scrollend\", scrollend, { signal });\n      mainContainer.addEventListener(\"blur\", scrollend, { signal });\n    };\n    mainContainer.addEventListener(\"scroll\", scroll, {\n      passive: true,\n      signal,\n    });\n  },\n\n  unbindEvents() {\n    this._eventBusAbortController?.abort();\n    this._eventBusAbortController = null;\n  },\n\n  unbindWindowEvents() {\n    this._windowAbortController?.abort();\n    this._windowAbortController = null;\n  },\n\n  _accumulateTicks(ticks, prop) {\n    // If the direction changed, reset the accumulated ticks.\n    if ((this[prop] > 0 && ticks < 0) || (this[prop] < 0 && ticks > 0)) {\n      this[prop] = 0;\n    }\n    this[prop] += ticks;\n    const wholeTicks = Math.trunc(this[prop]);\n    this[prop] -= wholeTicks;\n    return wholeTicks;\n  },\n\n  _accumulateFactor(previousScale, factor, prop) {\n    if (factor === 1) {\n      return 1;\n    }\n    // If the direction changed, reset the accumulated factor.\n    if ((this[prop] > 1 && factor < 1) || (this[prop] < 1 && factor > 1)) {\n      this[prop] = 1;\n    }\n\n    const newFactor =\n      Math.floor(previousScale * factor * this[prop] * 100) /\n      (100 * previousScale);\n    this[prop] = factor / newFactor;\n\n    return newFactor;\n  },\n\n  _centerAtPos(previousScale, x, y) {\n    const { pdfViewer } = this;\n    const scaleDiff = pdfViewer.currentScale / previousScale - 1;\n    if (scaleDiff !== 0) {\n      const [top, left] = pdfViewer.containerTopLeft;\n      pdfViewer.container.scrollLeft += (x - left) * scaleDiff;\n      pdfViewer.container.scrollTop += (y - top) * scaleDiff;\n    }\n  },\n\n  /**\n   * Should be called *after* all pages have loaded, or if an error occurred,\n   * to unblock the \"load\" event; see https://bugzilla.mozilla.org/show_bug.cgi?id=1618553\n   * @private\n   */\n  _unblockDocumentLoadEvent() {\n    document.blockUnblockOnload?.(false);\n\n    // Ensure that this method is only ever run once.\n    this._unblockDocumentLoadEvent = () => {};\n  },\n};\n\ninitCom(PDFViewerApplication);\n\nif (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n  PDFPrintServiceFactory.initGlobals(PDFViewerApplication);\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n  const HOSTED_VIEWER_ORIGINS = [\n    \"null\",\n    \"http://mozilla.github.io\",\n    \"https://mozilla.github.io\",\n  ];\n  // eslint-disable-next-line no-var\n  var validateFileURL = function (file) {\n    if (!file) {\n      return;\n    }\n    try {\n      const viewerOrigin = new URL(window.location.href).origin || \"null\";\n      if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) {\n        // Hosted or local viewer, allow for any file locations\n        return;\n      }\n      const fileOrigin = new URL(file, window.location.href).origin;\n      // Removing of the following line will not guarantee that the viewer will\n      // start accepting URLs from foreign origin -- CORS headers on the remote\n      // server must be properly configured.\n      if (fileOrigin !== viewerOrigin) {\n        // throw new Error(\"file origin does not match viewer's\");\n      }\n    } catch (ex) {\n      PDFViewerApplication._documentError(\"pdfjs-loading-error\", {\n        message: ex.message,\n      });\n      throw ex;\n    }\n  };\n}\n\nfunction reportPageStatsPDFBug({ pageNumber }) {\n  if (!globalThis.Stats?.enabled) {\n    return;\n  }\n  const pageView = PDFViewerApplication.pdfViewer.getPageView(\n    /* index = */ pageNumber - 1\n  );\n  globalThis.Stats.add(pageNumber, pageView?.pdfPage?.stats);\n}\n\nfunction webViewerPageRender({ pageNumber }) {\n  // If the page is (the most) visible when it starts rendering,\n  // ensure that the page number input loading indicator is displayed.\n  if (pageNumber === PDFViewerApplication.page) {\n    PDFViewerApplication.toolbar?.updateLoadingIndicatorState(true);\n  }\n}\n\nfunction webViewerPageRendered({ pageNumber, error }) {\n  // If the page is still visible when it has finished rendering,\n  // ensure that the page number input loading indicator is hidden.\n  if (pageNumber === PDFViewerApplication.page) {\n    PDFViewerApplication.toolbar?.updateLoadingIndicatorState(false);\n  }\n  if (error) {\n    PDFViewerApplication._otherError(\"pdfjs-rendering-error\", error);\n  }\n}\n\nfunction webViewerNamedAction(evt) {\n  // Processing a couple of named actions that might be useful, see also\n  // `PDFLinkService.executeNamedAction`.\n  switch (evt.action) {\n    case \"GoToPage\":\n      PDFViewerApplication.appConfig.toolbar?.pageNumber.select();\n      break;\n\n    case \"Find\":\n      if (!PDFViewerApplication.supportsIntegratedFind) {\n        PDFViewerApplication.findBar?.toggle();\n      }\n      break;\n\n    case \"Print\":\n      PDFViewerApplication.triggerPrinting();\n      break;\n\n    case \"SaveAs\":\n      PDFViewerApplication.downloadOrSave();\n      break;\n  }\n}\n\nfunction webViewerUpdateViewarea({ location }) {\n  if (PDFViewerApplication.isInitialViewSet) {\n    // Only update the storage when the document has been loaded *and* rendered.\n    PDFViewerApplication.store\n      ?.setMultiple({\n        page: location.pageNumber,\n        zoom: location.scale,\n        scrollLeft: location.left,\n        scrollTop: location.top,\n        rotation: location.rotation,\n      })\n      .catch(() => {\n        // Unable to write to storage.\n      });\n  }\n}\n\nfunction webViewerResize() {\n  const { pdfDocument, pdfViewer, pdfRenderingQueue } = PDFViewerApplication;\n\n  if (pdfRenderingQueue.printing && window.matchMedia(\"print\").matches) {\n    // Work-around issue 15324 by ignoring \"resize\" events during printing.\n    return;\n  }\n\n  if (!pdfDocument) {\n    return;\n  }\n  const currentScaleValue = pdfViewer.currentScaleValue;\n  if (\n    currentScaleValue === \"auto\" ||\n    currentScaleValue === \"page-fit\" ||\n    currentScaleValue === \"page-width\"\n  ) {\n    // Note: the scale is constant for 'page-actual'.\n    pdfViewer.currentScaleValue = currentScaleValue;\n  }\n  pdfViewer.update();\n}\n\nfunction webViewerHashchange(evt) {\n  const hash = evt.hash;\n  if (!hash) {\n    return;\n  }\n  if (!PDFViewerApplication.isInitialViewSet) {\n    PDFViewerApplication.initialBookmark = hash;\n  } else if (!PDFViewerApplication.pdfHistory?.popStateInProgress) {\n    PDFViewerApplication.pdfLinkService.setHash(hash);\n  }\n}\n\nfunction webViewerSwitchAnnotationEditorMode(evt) {\n  PDFViewerApplication.pdfViewer.annotationEditorMode = evt;\n}\nfunction webViewerSwitchAnnotationEditorParams(evt) {\n  PDFViewerApplication.pdfViewer.annotationEditorParams = evt;\n}\nfunction webViewerAddSignatureTextOption(evt) {\n  PDFViewerApplication.pdfViewer.annotationEditorMode = evt;\n  PDFViewerApplication.appConfig.signatureDialog?.closeButton.click();\n  PDFViewerApplication.appConfig.toolbar?.editorFreeTextParamsToolbar.classList.add(\n    \"hidden\"\n  );\n  PDFViewerApplication.showSignatureActionButtons(true);\n}\nfunction webViewerSaveComments() {\n  PDFViewerApplication.saveComments();\n}\nfunction webViewerExtractAnnotations() {\n  PDFViewerApplication.saveDocument();\n}\nfunction webViewerPrint() {\n  PDFViewerApplication.triggerPrinting();\n}\nfunction webViewerFirstPage() {\n  PDFViewerApplication.page = 1;\n}\nfunction webViewerLastPage() {\n  PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n}\nfunction webViewerNextPage() {\n  PDFViewerApplication.pdfViewer.nextPage();\n}\nfunction webViewerPreviousPage() {\n  PDFViewerApplication.pdfViewer.previousPage();\n}\nfunction webViewerZoomIn() {\n  PDFViewerApplication.zoomIn();\n}\nfunction webViewerZoomOut() {\n  PDFViewerApplication.zoomOut();\n}\nfunction webViewerZoomReset() {\n  PDFViewerApplication.zoomReset();\n}\nfunction webViewerPageNumberChanged(evt) {\n  const pdfViewer = PDFViewerApplication.pdfViewer;\n  // Note that for `<input type=\"number\">` HTML elements, an empty string will\n  // be returned for non-number inputs; hence we simply do nothing in that case.\n  if (evt.value !== \"\") {\n    PDFViewerApplication.pdfLinkService.goToPage(evt.value);\n  }\n\n  // Ensure that the page number input displays the correct value, even if the\n  // value entered by the user was invalid (e.g. a floating point number).\n  if (\n    evt.value !== pdfViewer.currentPageNumber.toString() &&\n    evt.value !== pdfViewer.currentPageLabel\n  ) {\n    PDFViewerApplication.toolbar?.setPageNumber(\n      pdfViewer.currentPageNumber,\n      pdfViewer.currentPageLabel\n    );\n  }\n}\nfunction webViewerScaleChanged(evt) {\n  PDFViewerApplication.pdfViewer.currentScaleValue = evt.value;\n}\nfunction webViewerRotateCw() {\n  PDFViewerApplication.secondaryToolbar.items.saveOrientation.disabled = false;\n  PDFViewerApplication.rotatePages(90);\n}\nfunction webViewerRotateCcw() {\n  PDFViewerApplication.secondaryToolbar.items.saveOrientation.disabled = false;\n  PDFViewerApplication.rotatePages(-90);\n}\nfunction webViewerSaveOrientation() {\n  PDFViewerApplication.secondaryToolbar.items.saveOrientation.disabled = true;\n  PDFViewerApplication.appConfig.orientationStore\n    .writeToStorage(true)\n    .then(function resolved() {});\n}\nfunction webViewerOptionalContentConfig(evt) {\n  PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise;\n}\nfunction webViewerSwitchScrollMode(evt) {\n  PDFViewerApplication.pdfViewer.scrollMode = evt.mode;\n}\nfunction webViewerSwitchSpreadMode(evt) {\n  PDFViewerApplication.pdfViewer.spreadMode = evt.mode;\n}\n\nfunction webViewerFindFromUrlHash(evt) {\n  PDFViewerApplication.eventBus.dispatch(\"find\", {\n    source: evt.source,\n    type: \"\",\n    query: evt.query,\n    caseSensitive: false,\n    entireWord: false,\n    highlightAll: true,\n    findPrevious: false,\n    matchDiacritics: true,\n  });\n}\n\nfunction webViewerUpdateFindMatchesCount({ matchesCount }) {\n  if (PDFViewerApplication.supportsIntegratedFind) {\n    PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount);\n  } else {\n    PDFViewerApplication.findBar?.updateResultsCount(matchesCount);\n  }\n}\n\nfunction webViewerUpdateFindControlState({\n  state,\n  previous,\n  matchesCount,\n  rawQuery,\n}) {\n  if (PDFViewerApplication.supportsIntegratedFind) {\n    PDFViewerApplication.externalServices.updateFindControlState({\n      result: state,\n      findPrevious: previous,\n      matchesCount,\n      rawQuery,\n    });\n  } else {\n    PDFViewerApplication.findBar?.updateUIState(state, previous, matchesCount);\n  }\n}\n\nfunction webViewerScaleChanging(evt) {\n  PDFViewerApplication.toolbar?.setPageScale(evt.presetValue, evt.scale);\n\n  PDFViewerApplication.pdfViewer.update();\n}\n\nfunction webViewerRotationChanging(evt) {\n  let docRotation = PDFViewerApplication.appConfig.orientationStore.rotation;\n  docRotation = evt.pagesRotation % 360;\n  PDFViewerApplication.appConfig.orientationStore.rotation = docRotation;\n  PDFViewerApplication.forceRendering();\n  // Ensure that the active page doesn't change during rotation.\n  PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;\n}\n\nfunction webViewerPageChanging({ pageNumber, pageLabel }) {\n  PDFViewerApplication.toolbar?.setPageNumber(pageNumber, pageLabel);\n  PDFViewerApplication.secondaryToolbar?.setPageNumber(pageNumber);\n\n  // Show/hide the loading indicator in the page number input element.\n  const currentPage = PDFViewerApplication.pdfViewer.getPageView(\n    /* index = */ pageNumber - 1\n  );\n  PDFViewerApplication.toolbar?.updateLoadingIndicatorState(\n    currentPage?.renderingState === RenderingStates.RUNNING\n  );\n}\n\nfunction webViewerResolutionChange(evt) {\n  PDFViewerApplication.pdfViewer.refresh();\n}\n\nfunction webViewerVisibilityChange(evt) {\n  if (document.visibilityState === \"visible\") {\n    // Ignore mouse wheel zooming during tab switches (bug 1503412).\n    setZoomDisabledTimeout();\n  }\n}\n\nlet zoomDisabledTimeout = null;\nfunction setZoomDisabledTimeout() {\n  if (zoomDisabledTimeout) {\n    clearTimeout(zoomDisabledTimeout);\n  }\n  zoomDisabledTimeout = setTimeout(function () {\n    zoomDisabledTimeout = null;\n  }, WHEEL_ZOOM_DISABLED_TIMEOUT);\n}\n\nfunction webViewerWheel(evt) {\n  const {\n    pdfViewer,\n    supportsMouseWheelZoomCtrlKey,\n    supportsMouseWheelZoomMetaKey,\n    supportsPinchToZoom,\n  } = PDFViewerApplication;\n  // Pinch-to-zoom on a trackpad maps to a wheel event with ctrlKey set to true\n  // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent#browser_compatibility\n  // Hence if ctrlKey is true but ctrl key hasn't been pressed then we can\n  // infer that we have a pinch-to-zoom.\n  // But the ctrlKey could have been pressed outside of the browser window,\n  // hence we try to do some magic to guess if the scaleFactor is likely coming\n  // from a pinch-to-zoom or not.\n\n  // It is important that we query deltaMode before delta{X,Y}, so that\n  // Firefox doesn't switch to DOM_DELTA_PIXEL mode for compat with other\n  // browsers, see https://bugzilla.mozilla.org/show_bug.cgi?id=1392460.\n  const deltaMode = evt.deltaMode;\n\n  // The following formula is a bit strange but it comes from:\n  // https://searchfox.org/mozilla-central/rev/d62c4c4d5547064487006a1506287da394b64724/widget/InputData.cpp#618-626\n  let scaleFactor = Math.exp(-evt.deltaY / 100);\n\n  const isBuiltInMac =\n    typeof PDFJSDev !== \"undefined\" &&\n    PDFJSDev.test(\"MOZCENTRAL\") &&\n    FeatureTest.platform.isMac;\n  const isPinchToZoom =\n    evt.ctrlKey &&\n    !PDFViewerApplication._isCtrlKeyDown &&\n    deltaMode === WheelEvent.DOM_DELTA_PIXEL &&\n    evt.deltaX === 0 &&\n    (Math.abs(scaleFactor - 1) < 0.05 || isBuiltInMac) &&\n    evt.deltaZ === 0;\n\n  if (\n    isPinchToZoom ||\n    (evt.ctrlKey && supportsMouseWheelZoomCtrlKey) ||\n    (evt.metaKey && supportsMouseWheelZoomMetaKey)\n  ) {\n    // Only zoom the pages, not the entire viewer.\n    evt.preventDefault();\n    // NOTE: this check must be placed *after* preventDefault.\n    if (\n      PDFViewerApplication._isScrolling ||\n      zoomDisabledTimeout ||\n      document.visibilityState === \"hidden\" ||\n      PDFViewerApplication.overlayManager.active\n    ) {\n      return;\n    }\n\n    const previousScale = pdfViewer.currentScale;\n    if (isPinchToZoom && supportsPinchToZoom) {\n      scaleFactor = PDFViewerApplication._accumulateFactor(\n        previousScale,\n        scaleFactor,\n        \"_wheelUnusedFactor\"\n      );\n      if (scaleFactor < 1) {\n        PDFViewerApplication.zoomOut(null, scaleFactor);\n      } else if (scaleFactor > 1) {\n        PDFViewerApplication.zoomIn(null, scaleFactor);\n      } else {\n        return;\n      }\n    } else {\n      const delta = normalizeWheelEventDirection(evt);\n\n      let ticks = 0;\n      if (\n        deltaMode === WheelEvent.DOM_DELTA_LINE ||\n        deltaMode === WheelEvent.DOM_DELTA_PAGE\n      ) {\n        // For line-based devices, use one tick per event, because different\n        // OSs have different defaults for the number lines. But we generally\n        // want one \"clicky\" roll of the wheel (which produces one event) to\n        // adjust the zoom by one step.\n        if (Math.abs(delta) >= 1) {\n          ticks = Math.sign(delta);\n        } else {\n          // If we're getting fractional lines (I can't think of a scenario\n          // this might actually happen), be safe and use the accumulator.\n          ticks = PDFViewerApplication._accumulateTicks(\n            delta,\n            \"_wheelUnusedTicks\"\n          );\n        }\n      } else {\n        // pixel-based devices\n        const PIXELS_PER_LINE_SCALE = 30;\n        ticks = PDFViewerApplication._accumulateTicks(\n          delta / PIXELS_PER_LINE_SCALE,\n          \"_wheelUnusedTicks\"\n        );\n      }\n\n      if (ticks < 0) {\n        PDFViewerApplication.zoomOut(-ticks);\n      } else if (ticks > 0) {\n        PDFViewerApplication.zoomIn(ticks);\n      } else {\n        return;\n      }\n    }\n\n    // After scaling the page via zoomIn/zoomOut, the position of the upper-\n    // left corner is restored. When the mouse wheel is used, the position\n    // under the cursor should be restored instead.\n    PDFViewerApplication._centerAtPos(previousScale, evt.clientX, evt.clientY);\n  }\n}\n\nfunction webViewerTouchStart(evt) {\n  if (evt.touches.length < 2) {\n    return;\n  }\n  evt.preventDefault();\n\n  if (evt.touches.length !== 2 || PDFViewerApplication.overlayManager.active) {\n    PDFViewerApplication._touchInfo = null;\n    return;\n  }\n\n  let [touch0, touch1] = evt.touches;\n  if (touch0.identifier > touch1.identifier) {\n    [touch0, touch1] = [touch1, touch0];\n  }\n  PDFViewerApplication._touchInfo = {\n    touch0X: touch0.pageX,\n    touch0Y: touch0.pageY,\n    touch1X: touch1.pageX,\n    touch1Y: touch1.pageY,\n  };\n}\n\nfunction webViewerTouchMove(evt) {\n  if (!PDFViewerApplication._touchInfo || evt.touches.length !== 2) {\n    return;\n  }\n\n  const { pdfViewer, _touchInfo, supportsPinchToZoom } = PDFViewerApplication;\n  let [touch0, touch1] = evt.touches;\n  if (touch0.identifier > touch1.identifier) {\n    [touch0, touch1] = [touch1, touch0];\n  }\n  const { pageX: page0X, pageY: page0Y } = touch0;\n  const { pageX: page1X, pageY: page1Y } = touch1;\n  const {\n    touch0X: pTouch0X,\n    touch0Y: pTouch0Y,\n    touch1X: pTouch1X,\n    touch1Y: pTouch1Y,\n  } = _touchInfo;\n\n  if (\n    Math.abs(pTouch0X - page0X) <= 1 &&\n    Math.abs(pTouch0Y - page0Y) <= 1 &&\n    Math.abs(pTouch1X - page1X) <= 1 &&\n    Math.abs(pTouch1Y - page1Y) <= 1\n  ) {\n    // Touches are really too close and it's hard do some basic\n    // geometry in order to guess something.\n    return;\n  }\n\n  _touchInfo.touch0X = page0X;\n  _touchInfo.touch0Y = page0Y;\n  _touchInfo.touch1X = page1X;\n  _touchInfo.touch1Y = page1Y;\n\n  if (pTouch0X === page0X && pTouch0Y === page0Y) {\n    // First touch is fixed, if the vectors are collinear then we've a pinch.\n    const v1X = pTouch1X - page0X;\n    const v1Y = pTouch1Y - page0Y;\n    const v2X = page1X - page0X;\n    const v2Y = page1Y - page0Y;\n    const det = v1X * v2Y - v1Y * v2X;\n    // 0.02 is approximatively sin(0.15deg).\n    if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) {\n      return;\n    }\n  } else if (pTouch1X === page1X && pTouch1Y === page1Y) {\n    // Second touch is fixed, if the vectors are collinear then we've a pinch.\n    const v1X = pTouch0X - page1X;\n    const v1Y = pTouch0Y - page1Y;\n    const v2X = page0X - page1X;\n    const v2Y = page0Y - page1Y;\n    const det = v1X * v2Y - v1Y * v2X;\n    if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) {\n      return;\n    }\n  } else {\n    const diff0X = page0X - pTouch0X;\n    const diff1X = page1X - pTouch1X;\n    const diff0Y = page0Y - pTouch0Y;\n    const diff1Y = page1Y - pTouch1Y;\n    const dotProduct = diff0X * diff1X + diff0Y * diff1Y;\n    if (dotProduct >= 0) {\n      // The two touches go in almost the same direction.\n      return;\n    }\n  }\n\n  evt.preventDefault();\n\n  const distance = Math.hypot(page0X - page1X, page0Y - page1Y) || 1;\n  const pDistance = Math.hypot(pTouch0X - pTouch1X, pTouch0Y - pTouch1Y) || 1;\n  const previousScale = pdfViewer.currentScale;\n  if (supportsPinchToZoom) {\n    const newScaleFactor = PDFViewerApplication._accumulateFactor(\n      previousScale,\n      distance / pDistance,\n      \"_touchUnusedFactor\"\n    );\n    if (newScaleFactor < 1) {\n      PDFViewerApplication.zoomOut(null, newScaleFactor);\n    } else if (newScaleFactor > 1) {\n      PDFViewerApplication.zoomIn(null, newScaleFactor);\n    } else {\n      return;\n    }\n  } else {\n    const PIXELS_PER_LINE_SCALE = 30;\n    const ticks = PDFViewerApplication._accumulateTicks(\n      (distance - pDistance) / PIXELS_PER_LINE_SCALE,\n      \"_touchUnusedTicks\"\n    );\n    if (ticks < 0) {\n      PDFViewerApplication.zoomOut(-ticks);\n    } else if (ticks > 0) {\n      PDFViewerApplication.zoomIn(ticks);\n    } else {\n      return;\n    }\n  }\n\n  PDFViewerApplication._centerAtPos(\n    previousScale,\n    (page0X + page1X) / 2,\n    (page0Y + page1Y) / 2\n  );\n}\n\nfunction webViewerTouchEnd(evt) {\n  if (!PDFViewerApplication._touchInfo) {\n    return;\n  }\n\n  evt.preventDefault();\n  PDFViewerApplication._touchInfo = null;\n  PDFViewerApplication._touchUnusedTicks = 0;\n  PDFViewerApplication._touchUnusedFactor = 1;\n}\n\nfunction webViewerClick(evt) {\n  if (\n    !PDFViewerApplication.secondaryToolbar?.isOpen &&\n    !PDFViewerApplication.attachments?.isOpen\n  ) {\n    return;\n  }\n  const appConfig = PDFViewerApplication.appConfig;\n  if (\n    PDFViewerApplication.pdfViewer.containsElement(evt.target) ||\n    (appConfig.toolbar?.container.contains(evt.target) &&\n      evt.target !== appConfig.secondaryToolbar?.toggleButton)\n  ) {\n    PDFViewerApplication.secondaryToolbar.close();\n  }\n  if (\n    PDFViewerApplication.pdfViewer.containsElement(evt.target) ||\n    (appConfig.toolbar?.container.contains(evt.target) &&\n      evt.target !== appConfig.attachments?.toggleButton)\n  ) {\n    PDFViewerApplication.attachments.close();\n  }\n}\n\nfunction webViewerKeyUp(evt) {\n  // evt.ctrlKey is false hence we use evt.key.\n  if (evt.key === \"Control\") {\n    PDFViewerApplication._isCtrlKeyDown = false;\n  }\n}\n\nfunction webViewerKeyDown(evt) {\n  PDFViewerApplication._isCtrlKeyDown = evt.key === \"Control\";\n\n  if (PDFViewerApplication.overlayManager.active) {\n    return;\n  }\n  const { eventBus, pdfViewer } = PDFViewerApplication;\n\n  let handled = false,\n    ensureViewerFocused = false;\n  const cmd =\n    (evt.ctrlKey ? 1 : 0) |\n    (evt.altKey ? 2 : 0) |\n    (evt.shiftKey ? 4 : 0) |\n    (evt.metaKey ? 8 : 0);\n\n  // First, handle the key bindings that are independent whether an input\n  // control is selected or not.\n  if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {\n    // either CTRL or META key with optional SHIFT.\n    switch (evt.keyCode) {\n      case 70: // f\n        if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) {\n          PDFViewerApplication.findBar?.open();\n          handled = true;\n        }\n        break;\n      case 71: // g\n        if (!PDFViewerApplication.supportsIntegratedFind) {\n          const { state } = PDFViewerApplication.findController;\n          if (state) {\n            const newState = {\n              source: window,\n              type: \"again\",\n              findPrevious: cmd === 5 || cmd === 12,\n            };\n            eventBus.dispatch(\"find\", { ...state, ...newState });\n          }\n          handled = true;\n        }\n        break;\n      case 61: // FF/Mac '='\n      case 107: // FF '+' and '='\n      case 187: // Chrome '+'\n      case 171: // FF with German keyboard\n        PDFViewerApplication.zoomIn();\n        handled = true;\n        break;\n      case 173: // FF/Mac '-'\n      case 109: // FF '-'\n      case 189: // Chrome '-'\n        PDFViewerApplication.zoomOut();\n        handled = true;\n        break;\n      case 48: // '0'\n      case 96: // '0' on Numpad of Swedish keyboard\n        // keeping it unhandled (to restore page zoom to 100%)\n        setTimeout(function () {\n          // ... and resetting the scale after browser adjusts its scale\n          PDFViewerApplication.zoomReset();\n        });\n        handled = false;\n        break;\n\n      case 38: // up arrow\n        if (PDFViewerApplication.page > 1) {\n          PDFViewerApplication.page = 1;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n      case 40: // down arrow\n        if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\n          PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n    }\n  }\n\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC || CHROME\")) {\n    // CTRL or META without shift\n    if (cmd === 1 || cmd === 8) {\n      switch (evt.keyCode) {\n        case 83: // s\n          eventBus.dispatch(\"download\", { source: window });\n          handled = true;\n          break;\n      }\n    }\n  }\n\n  // CTRL+ALT or Option+Command\n  if (cmd === 3 || cmd === 10) {\n    switch (evt.keyCode) {\n      case 71: // g\n        // focuses input#pageNumber field\n        if (PDFViewerApplication.appConfig.toolbar) {\n          PDFViewerApplication.appConfig.toolbar.pageNumber.select();\n          handled = true;\n        }\n        break;\n    }\n  }\n\n  if (handled) {\n    if (ensureViewerFocused) {\n      pdfViewer.focus();\n    }\n    evt.preventDefault();\n    return;\n  }\n\n  // Some shortcuts should not get handled if a control/input element\n  // is selected.\n  const curElement = getActiveOrFocusedElement();\n  const curElementTagName = curElement?.tagName.toUpperCase();\n  if (\n    curElementTagName === \"INPUT\" ||\n    curElementTagName === \"TEXTAREA\" ||\n    curElementTagName === \"SELECT\" ||\n    (curElementTagName === \"BUTTON\" &&\n      (evt.keyCode === /* Enter = */ 13 || evt.keyCode === /* Space = */ 32)) ||\n    curElement?.isContentEditable\n  ) {\n    // Make sure that the secondary toolbar is closed when Escape is pressed.\n    if (evt.keyCode !== /* Esc = */ 27) {\n      return;\n    }\n  }\n\n  // No control key pressed at all.\n  if (cmd === 0) {\n    let turnPage = 0,\n      turnOnlyIfPageFit = false;\n    switch (evt.keyCode) {\n      case 38: // up arrow\n      /* falls through */\n      case 33: // pg up\n        // vertical scrolling using arrow/pg keys\n        if (pdfViewer.isVerticalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n        turnPage = -1;\n        break;\n      case 8: // backspace\n        turnOnlyIfPageFit = true;\n        turnPage = -1;\n        break;\n      case 37: // left arrow\n        // horizontal scrolling using arrow keys\n        if (pdfViewer.isHorizontalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n      /* falls through */\n      case 75: // 'k'\n      case 80: // 'p'\n        turnPage = -1;\n        break;\n      case 27: // esc key\n        if (PDFViewerApplication.attachments?.isOpen) {\n          PDFViewerApplication.attachments.close();\n          handled = true;\n        }\n        if (PDFViewerApplication.secondaryToolbar?.isOpen) {\n          PDFViewerApplication.secondaryToolbar.close();\n          handled = true;\n        }\n        if (\n          !PDFViewerApplication.supportsIntegratedFind &&\n          PDFViewerApplication.findBar?.opened\n        ) {\n          PDFViewerApplication.findBar.close();\n          handled = true;\n        }\n        break;\n      case 40: // down arrow\n      /* falls through */\n      case 34: // pg down\n        // vertical scrolling using arrow/pg keys\n        if (pdfViewer.isVerticalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n        turnPage = 1;\n        break;\n      case 13: // enter key\n      case 32: // spacebar\n        turnOnlyIfPageFit = true;\n        turnPage = 1;\n        break;\n      case 39: // right arrow\n        // horizontal scrolling using arrow keys\n        if (pdfViewer.isHorizontalScrollbarEnabled) {\n          turnOnlyIfPageFit = true;\n        }\n      /* falls through */\n      case 74: // 'j'\n      case 78: // 'n'\n        turnPage = 1;\n        break;\n\n      case 36: // home\n        if (PDFViewerApplication.page > 1) {\n          PDFViewerApplication.page = 1;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n      case 35: // end\n        if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\n          PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n          handled = true;\n          ensureViewerFocused = true;\n        }\n        break;\n\n      case 82: // 'r'\n        PDFViewerApplication.rotatePages(90);\n        break;\n    }\n\n    if (\n      turnPage !== 0 &&\n      (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === \"page-fit\")\n    ) {\n      if (turnPage > 0) {\n        pdfViewer.nextPage();\n      } else {\n        pdfViewer.previousPage();\n      }\n      handled = true;\n    }\n  }\n\n  // shift-key\n  if (cmd === 4) {\n    switch (evt.keyCode) {\n      case 13: // enter key\n      case 32: // spacebar\n        if (pdfViewer.currentScaleValue !== \"page-fit\") {\n          break;\n        }\n        pdfViewer.previousPage();\n\n        handled = true;\n        break;\n\n      case 82: // 'r'\n        PDFViewerApplication.rotatePages(-90);\n        break;\n    }\n  }\n\n  if (!handled) {\n    // 33=Page Up  34=Page Down  35=End    36=Home\n    // 37=Left     38=Up         39=Right  40=Down\n    // 32=Spacebar\n    if (\n      (evt.keyCode >= 33 && evt.keyCode <= 40) ||\n      (evt.keyCode === 32 && curElementTagName !== \"BUTTON\")\n    ) {\n      ensureViewerFocused = true;\n    }\n  }\n\n  if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {\n    // The page container is not focused, but a page navigation key has been\n    // pressed. Change the focus to the viewer container to make sure that\n    // navigation by keyboard works as expected.\n    pdfViewer.focus();\n  }\n\n  if (handled) {\n    evt.preventDefault();\n  }\n}\n\nfunction beforeUnload(evt) {\n  evt.preventDefault();\n  evt.returnValue = \"\";\n  return false;\n}\n\nfunction webViewerAnnotationEditorStatesChanged(data) {\n  PDFViewerApplication.externalServices.updateEditorStates(data);\n}\n\nfunction webViewerReportTelemetry({ details }) {\n  PDFViewerApplication.externalServices.reportTelemetry(details);\n}\n\nfunction webViewerToggleAnnotationsToolbar({ toggle }) {\n  PDFViewerApplication.toggleAnnotationsToolbar(toggle);\n}\n\nfunction webViewerShowSignatureDialogue({ toggle }) {\n  PDFViewerApplication.showSignatureDialogue(toggle);\n}\n\nfunction webViewerToggleCommentsToolbar({ toggle }) {\n  PDFViewerApplication.toggleCommentsToolbar(toggle);\n}\n\nfunction webViewerToggleAnnotationsVisibility() {\n  PDFViewerApplication.toggleAnnotationsVisibility();\n}\n\nexport { PDFViewerApplication, AppOptions as PDFViewerApplicationOptions };\n","/* Copyright 2018 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\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n  // eslint-disable-next-line no-var\n  var compatibilityParams = Object.create(null);\n  if (\n    typeof PDFJSDev !== \"undefined\" &&\n    PDFJSDev.test(\"LIB\") &&\n    typeof navigator === \"undefined\"\n  ) {\n    globalThis.navigator = Object.create(null);\n  }\n  const userAgent = navigator.userAgent || \"\";\n  const platform = navigator.platform || \"\";\n  const maxTouchPoints = navigator.maxTouchPoints || 1;\n\n  const isAndroid = /Android/.test(userAgent);\n  const isIOS =\n    /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) ||\n    (platform === \"MacIntel\" && maxTouchPoints > 1);\n\n  // Limit canvas size to 5 mega-pixels on mobile.\n  // Support: Android, iOS\n  (function checkCanvasSizeLimitation() {\n    if (isIOS || isAndroid) {\n      compatibilityParams.maxCanvasPixels = 5242880;\n    }\n  })();\n}\n\nconst OptionKind = {\n  BROWSER: 0x01,\n  VIEWER: 0x02,\n  API: 0x04,\n  WORKER: 0x08,\n  PREFERENCE: 0x80,\n};\n\n/**\n * NOTE: These options are used to generate the `default_preferences.json` file,\n *       see `OptionKind.PREFERENCE`, hence the values below must use only\n *       primitive types and cannot rely on any imported types.\n */\nconst defaultOptions = {\n  canvasMaxAreaInBytes: {\n    /** @type {number} */\n    value: -1,\n    kind: OptionKind.BROWSER + OptionKind.API,\n  },\n  isInAutomation: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.BROWSER,\n  },\n  supportsDocumentFonts: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.BROWSER,\n  },\n  supportsIntegratedFind: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.BROWSER,\n  },\n  supportsMouseWheelZoomCtrlKey: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.BROWSER,\n  },\n  supportsMouseWheelZoomMetaKey: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.BROWSER,\n  },\n  supportsPinchToZoom: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.BROWSER,\n  },\n\n  annotationEditorMode: {\n    /** @type {number} */\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  annotationMode: {\n    /** @type {number} */\n    value: 2,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  defaultZoomDelay: {\n    /** @type {number} */\n    value: 400,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  defaultZoomValue: {\n    /** @type {string} */\n    value: \"\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  disableHistory: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER,\n  },\n  disablePageLabels: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enableHighlightEditor: {\n    /** @type {boolean} */\n    value: false, //typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enableHighlightFloatingButton: {\n    /** @type {boolean} */\n    value: false, //typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enableML: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enablePermissions: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enablePrintAutoRotate: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enableScripting: {\n    /** @type {boolean} */\n    value: typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"CHROME\"),\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enableStampEditor: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enableApprovedStampType: {\n    /** @type {boolean} */\n    value: false\n  },\n  enableRejectedStampType: {\n    /** @type {boolean} */\n    value: false\n  },\n  enableRedactionEditor: {\n    /** @type {boolean} */  \n    value: false\n  },\n  enableInkEditor: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enableFreeTextEditor: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enableToggleAnnotationsToolbar: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  enableCommentEditor: {\n    // We'll probably want to make some experiments before enabling this\n    // in Firefox release, but it has to be temporary.\n    // TODO: remove it when unnecessary.\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  externalLinkRel: {\n    /** @type {string} */\n    value: \"noopener noreferrer nofollow\",\n    kind: OptionKind.VIEWER,\n  },\n  externalLinkTarget: {\n    /** @type {number} */\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  highlightEditorColors: {\n    /** @type {string} */\n    value: \"yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  historyUpdateUrl: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  ignoreDestinationZoom: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  imageResourcesPath: {\n    /** @type {string} */\n    value:\n      typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")\n        ? \"resource://pdf.js/web/images/\"\n        : \"./images/\",\n    kind: OptionKind.VIEWER,\n  },\n  maxCanvasPixels: {\n    /** @type {number} */\n    value: 2 ** 25,\n    kind: OptionKind.VIEWER,\n  },\n  forcePageColors: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  pageColorsBackground: {\n    /** @type {string} */\n    value: \"Canvas\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  pageColorsForeground: {\n    /** @type {string} */\n    value: \"CanvasText\",\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  pdfBugEnabled: {\n    /** @type {boolean} */\n    value: typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\"),\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  printResolution: {\n    /** @type {number} */\n    value: 150,\n    kind: OptionKind.VIEWER,\n  },\n  scrollModeOnLoad: {\n    /** @type {number} */\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  spreadModeOnLoad: {\n    /** @type {number} */\n    value: -1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  textLayerMode: {\n    /** @type {number} */\n    value: 1,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n  viewOnLoad: {\n    /** @type {boolean} */\n    value: 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n\n  cMapPacked: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.API,\n  },\n  cMapUrl: {\n    /** @type {string} */\n    value:\n      // eslint-disable-next-line no-nested-ternary\n      typeof PDFJSDev === \"undefined\"\n        ? \"../external/bcmaps/\"\n        : PDFJSDev.test(\"MOZCENTRAL\")\n          ? \"resource://pdf.js/web/cmaps/\"\n          : \"../web/cmaps/\",\n    kind: OptionKind.API,\n  },\n  disableAutoFetch: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE,\n  },\n  disableFontFace: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE,\n  },\n  disableRange: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE,\n  },\n  disableStream: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API + OptionKind.PREFERENCE,\n  },\n  docBaseUrl: {\n    /** @type {string} */\n    value: \"\",\n    kind: OptionKind.API,\n  },\n  enableXfa: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.API + OptionKind.PREFERENCE,\n  },\n  fontExtraProperties: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API,\n  },\n  isEvalSupported: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.API,\n  },\n  isOffscreenCanvasSupported: {\n    /** @type {boolean} */\n    value: true,\n    kind: OptionKind.API,\n  },\n  maxImageSize: {\n    /** @type {number} */\n    value: -1,\n    kind: OptionKind.API,\n  },\n  pdfBug: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.API,\n  },\n  standardFontDataUrl: {\n    /** @type {string} */\n    value:\n      // eslint-disable-next-line no-nested-ternary\n      typeof PDFJSDev === \"undefined\"\n        ? \"../external/standard_fonts/\"\n        : PDFJSDev.test(\"MOZCENTRAL\")\n          ? \"resource://pdf.js/web/standard_fonts/\"\n          : \"../web/standard_fonts/\",\n    kind: OptionKind.API,\n  },\n  verbosity: {\n    /** @type {number} */\n    value: 1,\n    kind: OptionKind.API,\n  },\n\n  workerPort: {\n    /** @type {Object} */\n    value: null,\n    kind: OptionKind.WORKER,\n  },\n  workerSrc: {\n    /** @type {string} */\n    value:\n      // eslint-disable-next-line no-nested-ternary\n      typeof PDFJSDev === \"undefined\"\n        ? \"../src/pdf.worker.js\"\n        : PDFJSDev.test(\"MOZCENTRAL\")\n          ? \"resource://pdf.js/build/pdf.worker.mjs\"\n          : \"pdf.worker.mjs\",\n    kind: OptionKind.WORKER,\n  },\n  viewNotSupported: {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  },\n};\nif (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n  defaultOptions.defaultUrl = {\n    /** @type {string} */\n    value:\n      typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")\n        ? \"\"\n        : \"pdf_commenting_new.pdf\",\n    kind: OptionKind.VIEWER,\n  };\n  defaultOptions.sandboxBundleSrc = {\n    /** @type {string} */\n    value:\n      typeof PDFJSDev === \"undefined\"\n        ? \"../build/dev-sandbox/pdf.sandbox.mjs\"\n        : \"../build/pdf.sandbox.mjs\",\n    kind: OptionKind.VIEWER,\n  };\n  defaultOptions.viewerCssTheme = {\n    /** @type {number} */\n    value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\") ? 2 : 0,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  };\n}\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n  defaultOptions.disablePreferences = {\n    /** @type {boolean} */\n    value: typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\"),\n    kind: OptionKind.VIEWER,\n  };\n  defaultOptions.locale = {\n    /** @type {string} */\n    value: navigator.language || \"en-US\",\n    kind: OptionKind.VIEWER,\n  };\n} else if (PDFJSDev.test(\"CHROME\")) {\n  defaultOptions.disableTelemetry = {\n    /** @type {boolean} */\n    value: false,\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE,\n  };\n}\n\nconst userOptions = Object.create(null);\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n  // Apply any compatibility-values to the user-options,\n  // see also `AppOptions.remove` below.\n  for (const name in compatibilityParams) {\n    userOptions[name] = compatibilityParams[name];\n  }\n}\n\nif (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING || LIB\")) {\n  // Ensure that the `defaultOptions` are correctly specified.\n  for (const name in defaultOptions) {\n    const { value, kind } = defaultOptions[name];\n\n    if (kind & OptionKind.PREFERENCE) {\n      if (kind === OptionKind.PREFERENCE) {\n        throw new Error(`Cannot use only \"PREFERENCE\" kind: ${name}`);\n      }\n      if (kind & OptionKind.BROWSER) {\n        throw new Error(`Cannot mix \"PREFERENCE\" and \"BROWSER\" kind: ${name}`);\n      }\n      if (\n        typeof compatibilityParams === \"object\" &&\n        compatibilityParams[name] !== undefined\n      ) {\n        throw new Error(\n          `Should not have compatibility-value for \"PREFERENCE\" kind: ${name}`\n        );\n      }\n      // Only \"simple\" preference-values are allowed.\n      if (\n        typeof value !== \"boolean\" &&\n        typeof value !== \"string\" &&\n        !Number.isInteger(value)\n      ) {\n        throw new Error(`Invalid value for \"PREFERENCE\" kind: ${name}`);\n      }\n    }\n  }\n}\n\nclass AppOptions {\n  constructor() {\n    throw new Error(\"Cannot initialize AppOptions.\");\n  }\n\n  static get(name) {\n    return userOptions[name] ?? defaultOptions[name]?.value ?? undefined;\n  }\n\n  static getAll(kind = null, defaultOnly = false) {\n    const options = Object.create(null);\n    for (const name in defaultOptions) {\n      const defaultOption = defaultOptions[name];\n\n      if (kind && !(kind & defaultOption.kind)) {\n        continue;\n      }\n      options[name] = defaultOnly\n        ? defaultOption.value\n        : userOptions[name] ?? defaultOption.value;\n    }\n    return options;\n  }\n\n  static set(name, value) {\n    userOptions[name] = value;\n  }\n\n  static setAll(options, init = false) {\n    if ((typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && init) {\n      if (this.get(\"disablePreferences\")) {\n        // Give custom implementations of the default viewer a simpler way to\n        // opt-out of having the `Preferences` override existing `AppOptions`.\n        return;\n      }\n      for (const name in userOptions) {\n        // Ignore any compatibility-values in the user-options.\n        if (compatibilityParams[name] !== undefined) {\n          continue;\n        }\n        console.warn(\n          \"setAll: The Preferences may override manually set AppOptions; \" +\n            'please use the \"disablePreferences\"-option in order to prevent that.'\n        );\n        break;\n      }\n    }\n\n    for (const name in options) {\n      userOptions[name] = options[name];\n    }\n  }\n\n  static remove(name) {\n    delete userOptions[name];\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      // Re-apply a compatibility-value, if it exists, to the user-options.\n      const val = compatibilityParams[name];\n      if (val !== undefined) {\n        userOptions[name] = val;\n      }\n    }\n  }\n}\n\nexport { AppOptions, OptionKind };\n","/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport { toggleExpandedBtn } from \"./ui_utils.js\";\n\n/**\n * @typedef {Object} AttachmentsOptions\n * @property {HTMLDivElement} toolbar - Container for the attachments.\n * @property {HTMLButtonElement} toggleButton - Button to toggle the visibility\n *   of the attachments.\n */\nclass Attachments {\n  #opts;\n\n  /**\n   * @param {AttachmentsOptions} options\n   * @param {EventBus} eventBus\n   */\n  constructor(options, eventBus, viewerApplication) {\n    this.#opts = options;\n\n    this.eventBus = eventBus;\n    this.viewerApplication = viewerApplication;\n    this.opened = false;\n\n    this.reset();\n\n    // Bind the event listeners for click, cursor tool, and scroll/spread mode\n    // actions.\n    this.#bindListeners();\n  }\n\n  /**\n   * @type {boolean}\n   */\n  get isOpen() {\n    return this.opened;\n  }\n\n  reset() {\n    this.#updateUIState();\n  }\n\n  #updateUIState() {\n    this.buttons = [];\n    const { container, attachments } = this.#opts;\n    container.innerHTML = \"\";\n    for (const attachment of attachments) {\n      const itemContainer = document.createElement(\"div\");\n      itemContainer.className = \"attachmentsItemContainer x-checkcell\";\n      const itemCheckbox = document.createElement(\"input\");\n      itemCheckbox.id = attachment.partId;\n      itemCheckbox.type = \"radio\";\n      itemCheckbox.name = \"part\";\n      itemCheckbox.value = attachment.partId;\n      if (attachment.checked) {\n        itemCheckbox.checked = \"checked\";\n      }\n      itemContainer.append(itemCheckbox);\n      const itemLabel = document.createElement(\"label\");\n      itemLabel.setAttribute(\"for\", attachment.partId);\n      itemLabel.className = \"x-checkbox-el\";\n      itemLabel.textContent = attachment.text;\n      itemContainer.append(itemLabel);\n      container.append(itemContainer);\n      this.buttons.push({\n        element: itemCheckbox,\n        eventDetails: attachment,\n      });\n    }\n  }\n\n  #bindListeners() {\n    if (this._attachmentsAbortController) {\n      return;\n    }\n    this._attachmentsAbortController = new AbortController();\n\n    const {\n      _attachmentsAbortController: { signal },\n    } = this;\n    const { toggleButton } = this.#opts;\n    // Button to toggle the visibility of the secondary toolbar.\n    toggleButton.addEventListener(\"click\", this.toggle.bind(this), { signal });\n\n    for (const { element, eventDetails } of this.buttons) {\n      element.addEventListener(\n        \"click\",\n        evt => {\n          if (eventDetails.details) {\n            this.viewerApplication.appConfig.annotationStore.partId =\n              eventDetails.partId ? eventDetails.partId : undefined;\n            this.viewerApplication.appConfig.orientationStore.partId =\n              eventDetails.partId ? eventDetails.partId : undefined;\n            this.viewerApplication.appConfig.orientationStore.versionNo =\n              eventDetails.versionNo ? eventDetails.versionNo : undefined;\n          }\n          this.viewerApplication.appConfig.annotationStore.getSavedAnnotations(\n            function () {\n              if (this.viewerApplication.appConfig.loaderContainer) {\n                this.viewerApplication.appConfig.loaderContainer?.setMasked({\n                  xtype: \"loadmask\",\n                  message: \"Loading\",\n                });\n              }\n              this.viewerApplication.open({\n                url: eventDetails.src,\n                dontReloadAttachments: true,\n              });\n            }.bind(this)\n          );\n          this.close();\n        },\n        { signal }\n      );\n    }\n  }\n\n  unbindListeners() {\n    this._attachmentsAbortController?.abort();\n    this._attachmentsAbortController = null;\n  }\n\n  open() {\n    if (this.opened) {\n      return;\n    }\n    this.opened = true;\n\n    const { toggleButton, toolbar } = this.#opts;\n    toggleExpandedBtn(toggleButton, true, toolbar);\n  }\n\n  close() {\n    if (!this.opened) {\n      return;\n    }\n    this.opened = false;\n\n    const { toggleButton, toolbar } = this.#opts;\n    toggleExpandedBtn(toggleButton, false, toolbar);\n  }\n\n  toggle() {\n    if (this.opened) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n}\n\nexport { Attachments };\n","/* Copyright 2013 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/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n\nimport { createValidAbsoluteUrl, isPdfFile } from \"pdfjs-lib\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"CHROME || GENERIC\")) {\n  throw new Error(\n    'Module \"pdfjs-web/download_manager\" shall not be used ' +\n      \"outside CHROME and GENERIC builds.\"\n  );\n}\n\nfunction download(blobUrl, filename) {\n  const a = document.createElement(\"a\");\n  if (!a.click) {\n    throw new Error('DownloadManager: \"a.click()\" is not supported.');\n  }\n  a.href = blobUrl;\n  a.target = \"_parent\";\n  // Use a.download if available. This increases the likelihood that\n  // the file is downloaded instead of opened by another PDF plugin.\n  if (\"download\" in a) {\n    a.download = filename;\n  }\n  // <a> must be in the document for recent Firefox versions,\n  // otherwise .click() is ignored.\n  (document.body || document.documentElement).append(a);\n  a.click();\n  a.remove();\n}\n\n/**\n * @implements {IDownloadManager}\n */\nclass DownloadManager {\n  #openBlobUrls = new WeakMap();\n\n  downloadUrl(url, filename, _options) {\n    if (!createValidAbsoluteUrl(url, \"http://example.com\")) {\n      console.error(`downloadUrl - not a valid URL: ${url}`);\n      return; // restricted/invalid URL\n    }\n    download(url + \"#pdfjs.action=download\", filename);\n  }\n\n  downloadData(data, filename, contentType) {\n    const blobUrl = URL.createObjectURL(\n      new Blob([data], { type: contentType })\n    );\n    download(blobUrl, filename);\n  }\n\n  /**\n   * @returns {boolean} Indicating if the data was opened.\n   */\n  openOrDownloadData(data, filename, dest = null) {\n    const isPdfData = isPdfFile(filename);\n    const contentType = isPdfData ? \"application/pdf\" : \"\";\n\n    if (\n      (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"COMPONENTS\")) &&\n      isPdfData\n    ) {\n      let blobUrl = this.#openBlobUrls.get(data);\n      if (!blobUrl) {\n        blobUrl = URL.createObjectURL(new Blob([data], { type: contentType }));\n        this.#openBlobUrls.set(data, blobUrl);\n      }\n      let viewerUrl;\n      if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n        // The current URL is the viewer, let's use it and append the file.\n        viewerUrl = \"?file=\" + encodeURIComponent(blobUrl + \"#\" + filename);\n      } else if (PDFJSDev.test(\"CHROME\")) {\n        // In the Chrome extension, the URL is rewritten using the history API\n        // in viewer.js, so an absolute URL must be generated.\n        viewerUrl =\n          // eslint-disable-next-line no-undef\n          chrome.runtime.getURL(\"/content/web/viewer.html\") +\n          \"?file=\" +\n          encodeURIComponent(blobUrl + \"#\" + filename);\n      }\n      if (dest) {\n        viewerUrl += `#${escape(dest)}`;\n      }\n\n      try {\n        window.open(viewerUrl);\n        return true;\n      } catch (ex) {\n        console.error(`openOrDownloadData: ${ex}`);\n        // Release the `blobUrl`, since opening it failed, and fallback to\n        // downloading the PDF file.\n        URL.revokeObjectURL(blobUrl);\n        this.#openBlobUrls.delete(data);\n      }\n    }\n\n    this.downloadData(data, filename, contentType);\n    return false;\n  }\n\n  download(blob, url, filename, _options) {\n    const blobUrl = URL.createObjectURL(blob);\n    download(blobUrl, filename);\n  }\n}\n\nexport { DownloadManager };\n","/* Copyright 2022 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 { DrawLayer } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} DrawLayerBuilderOptions\n * @property {number} pageIndex\n */\n\nclass DrawLayerBuilder {\n  #drawLayer = null;\n\n  /**\n   * @param {DrawLayerBuilderOptions} options\n   */\n  constructor(options) {\n    this.pageIndex = options.pageIndex;\n  }\n\n  /**\n   * @param {string} intent (default value is 'display')\n   */\n  async render(intent = \"display\") {\n    if (intent !== \"display\" || this.#drawLayer || this._cancelled) {\n      return;\n    }\n    this.#drawLayer = new DrawLayer({\n      pageIndex: this.pageIndex,\n    });\n  }\n\n  cancel() {\n    this._cancelled = true;\n\n    if (!this.#drawLayer) {\n      return;\n    }\n    this.#drawLayer.destroy();\n    this.#drawLayer = null;\n  }\n\n  setParent(parent) {\n    this.#drawLayer?.setParent(parent);\n  }\n\n  getDrawLayer() {\n    return this.#drawLayer;\n  }\n}\n\nexport { DrawLayerBuilder };\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\nconst WaitOnType = {\n  EVENT: \"event\",\n  TIMEOUT: \"timeout\",\n};\n\n/**\n * @typedef {Object} WaitOnEventOrTimeoutParameters\n * @property {Object} target - The event target, can for example be:\n *   `window`, `document`, a DOM element, or an {EventBus} instance.\n * @property {string} name - The name of the event.\n * @property {number} delay - The delay, in milliseconds, after which the\n *   timeout occurs (if the event wasn't already dispatched).\n */\n\n/**\n * Allows waiting for an event or a timeout, whichever occurs first.\n * Can be used to ensure that an action always occurs, even when an event\n * arrives late or not at all.\n *\n * @param {WaitOnEventOrTimeoutParameters}\n * @returns {Promise} A promise that is resolved with a {WaitOnType} value.\n */\nasync function waitOnEventOrTimeout({ target, name, delay = 0 }) {\n  if (\n    typeof target !== \"object\" ||\n    !(name && typeof name === \"string\") ||\n    !(Number.isInteger(delay) && delay >= 0)\n  ) {\n    throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\n  }\n  const { promise, resolve } = Promise.withResolvers();\n  const ac = new AbortController();\n\n  function handler(type) {\n    ac.abort(); // Remove event listener.\n    clearTimeout(timeout);\n\n    resolve(type);\n  }\n\n  const evtMethod = target instanceof EventBus ? \"_on\" : \"addEventListener\";\n  target[evtMethod](name, handler.bind(null, WaitOnType.EVENT), {\n    signal: ac.signal,\n  });\n\n  const timeout = setTimeout(handler.bind(null, WaitOnType.TIMEOUT), delay);\n\n  return promise;\n}\n\n/**\n * Simple event bus for an application. Listeners are attached using the `on`\n * and `off` methods. To raise an event, the `dispatch` method shall be used.\n */\nclass EventBus {\n  #listeners = Object.create(null);\n\n  /**\n   * @param {string} eventName\n   * @param {function} listener\n   * @param {Object} [options]\n   */\n  on(eventName, listener, options = null) {\n    this._on(eventName, listener, {\n      external: true,\n      once: options?.once,\n      signal: options?.signal,\n    });\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {function} listener\n   * @param {Object} [options]\n   */\n  off(eventName, listener, options = null) {\n    this._off(eventName, listener);\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {Object} data\n   */\n  dispatch(eventName, data) {\n    const eventListeners = this.#listeners[eventName];\n    if (!eventListeners || eventListeners.length === 0) {\n      return;\n    }\n    let externalListeners;\n    // Making copy of the listeners array in case if it will be modified\n    // during dispatch.\n    for (const { listener, external, once } of eventListeners.slice(0)) {\n      if (once) {\n        this._off(eventName, listener);\n      }\n      if (external) {\n        (externalListeners ||= []).push(listener);\n        continue;\n      }\n      listener(data);\n    }\n    // Dispatch any \"external\" listeners *after* the internal ones, to give the\n    // viewer components time to handle events and update their state first.\n    if (externalListeners) {\n      for (const listener of externalListeners) {\n        listener(data);\n      }\n      externalListeners = null;\n    }\n  }\n\n  /**\n   * @ignore\n   */\n  _on(eventName, listener, options = null) {\n    let rmAbort = null;\n    if (options?.signal instanceof AbortSignal) {\n      const { signal } = options;\n      if (signal.aborted) {\n        console.error(\"Cannot use an `aborted` signal.\");\n        return;\n      }\n      const onAbort = () => this._off(eventName, listener);\n      rmAbort = () => signal.removeEventListener(\"abort\", onAbort);\n\n      signal.addEventListener(\"abort\", onAbort);\n    }\n\n    const eventListeners = (this.#listeners[eventName] ||= []);\n    eventListeners.push({\n      listener,\n      external: options?.external === true,\n      once: options?.once === true,\n      rmAbort,\n    });\n  }\n\n  /**\n   * @ignore\n   */\n  _off(eventName, listener, options = null) {\n    const eventListeners = this.#listeners[eventName];\n    if (!eventListeners) {\n      return;\n    }\n    for (let i = 0, ii = eventListeners.length; i < ii; i++) {\n      const evt = eventListeners[i];\n      if (evt.listener === listener) {\n        evt.rmAbort?.(); // Ensure that the `AbortSignal` listener is removed.\n        eventListeners.splice(i, 1);\n        return;\n      }\n    }\n  }\n}\n\n/**\n * NOTE: Only used to support various PDF viewer tests in `mozilla-central`.\n */\nclass AutomationEventBus extends EventBus {\n  dispatch(eventName, data) {\n    if (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"MOZCENTRAL\")) {\n      throw new Error(\"Not implemented: AutomationEventBus.dispatch\");\n    }\n    super.dispatch(eventName, data);\n\n    const detail = Object.create(null);\n    if (data) {\n      for (const key in data) {\n        const value = data[key];\n        if (key === \"source\") {\n          if (value === window || value === document) {\n            return; // No need to re-dispatch (already) global events.\n          }\n          continue; // Ignore the `source` property.\n        }\n        detail[key] = value;\n      }\n    }\n    const event = new CustomEvent(eventName, {\n      bubbles: true,\n      cancelable: true,\n      detail,\n    });\n    document.dispatchEvent(event);\n  }\n}\n\nexport { AutomationEventBus, EventBus, waitOnEventOrTimeout, WaitOnType };\n","/* Copyright 2024 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/** @typedef {import(\"./interfaces.js\").IL10n} IL10n */\n\nclass BaseExternalServices {\n  constructor() {\n    if (this.constructor === BaseExternalServices) {\n      throw new Error(\"Cannot initialize BaseExternalServices.\");\n    }\n  }\n\n  updateFindControlState(data) {}\n\n  updateFindMatchesCount(data) {}\n\n  initPassiveLoading() {}\n\n  reportTelemetry(data) {}\n\n  /**\n   * @returns {Promise<IL10n>}\n   */\n  async createL10n() {\n    throw new Error(\"Not implemented: createL10n\");\n  }\n\n  createScripting() {\n    throw new Error(\"Not implemented: createScripting\");\n  }\n\n  updateEditorStates(data) {\n    throw new Error(\"Not implemented: updateEditorStates\");\n  }\n\n  async getNimbusExperimentData() {}\n}\n\nexport { BaseExternalServices };\n","/* Copyright 2020 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 { getPdfFilenameFromUrl } from \"pdfjs-lib\";\n\nasync function docProperties(pdfDocument) {\n  const url = \"\",\n    baseUrl = url.split(\"#\", 1)[0];\n  // eslint-disable-next-line prefer-const\n  let { info, metadata, contentDispositionFilename, contentLength } =\n    await pdfDocument.getMetadata();\n\n  if (!contentLength) {\n    const { length } = await pdfDocument.getDownloadInfo();\n    contentLength = length;\n  }\n\n  return {\n    ...info,\n    baseURL: baseUrl,\n    filesize: contentLength,\n    filename: contentDispositionFilename || getPdfFilenameFromUrl(url),\n    metadata: metadata?.getRaw(),\n    authors: metadata?.get(\"dc:creator\"),\n    numPages: pdfDocument.numPages,\n    URL: url,\n  };\n}\n\nclass GenericScripting {\n  constructor(sandboxBundleSrc) {\n    this._ready = new Promise((resolve, reject) => {\n      const sandbox =\n        typeof PDFJSDev === \"undefined\"\n          ? import(sandboxBundleSrc) // eslint-disable-line no-unsanitized/method\n          : __non_webpack_import__(sandboxBundleSrc);\n      sandbox\n        .then(pdfjsSandbox => {\n          resolve(pdfjsSandbox.QuickJSSandbox());\n        })\n        .catch(reject);\n    });\n  }\n\n  async createSandbox(data) {\n    const sandbox = await this._ready;\n    sandbox.create(data);\n  }\n\n  async dispatchEventInSandbox(event) {\n    const sandbox = await this._ready;\n    setTimeout(() => sandbox.dispatchEvent(event), 0);\n  }\n\n  async destroySandbox() {\n    const sandbox = await this._ready;\n    sandbox.nukeSandbox();\n  }\n}\n\nexport { docProperties, GenericScripting };\n","/* Copyright 2017 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 { AppOptions } from \"./app_options.js\";\nimport { BaseExternalServices } from \"./external_services.js\";\nimport { BasePreferences } from \"./preferences.js\";\nimport { GenericL10n } from \"./genericl10n.js\";\nimport { GenericScripting } from \"./generic_scripting.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n  throw new Error(\n    'Module \"pdfjs-web/genericcom\" shall not be used outside GENERIC build.'\n  );\n}\n\nfunction initCom(app) {}\n\nclass Preferences extends BasePreferences {\n  async _writeToStorage(prefObj) {\n    localStorage.setItem(\"pdfjs.preferences\", JSON.stringify(prefObj));\n  }\n\n  async _readFromStorage(prefObj) {\n    return { prefs: JSON.parse(localStorage.getItem(\"pdfjs.preferences\")) };\n  }\n}\n\nclass ExternalServices extends BaseExternalServices {\n  async createL10n() {\n    return new GenericL10n(AppOptions.get(\"locale\"));\n  }\n\n  createScripting() {\n    return new GenericScripting(AppOptions.get(\"sandboxBundleSrc\"));\n  }\n}\n\nclass MLManager {\n  async guess() {\n    return null;\n  }\n}\n\nexport { ExternalServices, initCom, MLManager, Preferences };\n","/* Copyright 2017 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/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n\nimport { FluentBundle, FluentResource } from \"fluent-bundle\";\nimport { DOMLocalization } from \"fluent-dom\";\nimport { fetchData } from \"pdfjs-lib\";\nimport { L10n } from \"./l10n.js\";\n\nfunction createBundle(lang, text) {\n  const resource = new FluentResource(text);\n  const bundle = new FluentBundle(lang);\n  const errors = bundle.addResource(resource);\n  if (errors.length) {\n    console.error(\"L10n errors\", errors);\n  }\n  return bundle;\n}\n\n/**\n * @implements {IL10n}\n */\nclass GenericL10n extends L10n {\n  constructor(lang) {\n    super({ lang });\n\n    const generateBundles = !lang\n      ? GenericL10n.#generateBundlesFallback.bind(\n          GenericL10n,\n          this.getLanguage()\n        )\n      : GenericL10n.#generateBundles.bind(\n          GenericL10n,\n          \"en-us\",\n          this.getLanguage()\n        );\n    this._setL10n(new DOMLocalization([], generateBundles));\n  }\n\n  /**\n   * Generate the bundles for Fluent.\n   * @param {String} defaultLang - The fallback language to use for\n   *   translations.\n   * @param {String} baseLang - The base language to use for translations.\n   */\n  static async *#generateBundles(defaultLang, baseLang) {\n    const { baseURL, paths } = await this.#getPaths();\n\n    const langs = [baseLang];\n    if (defaultLang !== baseLang) {\n      // Also fallback to the short-format of the base language\n      // (see issue 17269).\n      const shortLang = baseLang.split(\"-\", 1)[0];\n\n      if (shortLang !== baseLang) {\n        langs.push(shortLang);\n      }\n      langs.push(defaultLang);\n    }\n    for (const lang of langs) {\n      const bundle = await this.#createBundle(lang, baseURL, paths);\n      if (bundle) {\n        yield bundle;\n      }\n      if (lang === \"en-us\") {\n        yield this.#createBundleFallback(lang);\n      }\n    }\n  }\n\n  static async #createBundle(lang, baseURL, paths) {\n    const path = paths[lang];\n    if (!path) {\n      return null;\n    }\n    const url = new URL(path, baseURL);\n    const text = await fetchData(url, /* type = */ \"text\");\n\n    return createBundle(lang, text);\n  }\n\n  static async #getPaths() {\n    try {\n      const { href } = document.querySelector(`link[type=\"application/l10n\"]`);\n      const paths = await fetchData(href, /* type = */ \"json\");\n\n      return { baseURL: href.replace(/[^/]*$/, \"\") || \"./\", paths };\n    } catch {}\n    return { baseURL: \"./\", paths: Object.create(null) };\n  }\n\n  static async *#generateBundlesFallback(lang) {\n    yield this.#createBundleFallback(lang);\n  }\n\n  static async #createBundleFallback(lang) {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n      throw new Error(\"Not implemented: #createBundleFallback\");\n    }\n    const text =\n      typeof PDFJSDev === \"undefined\"\n        ? await fetchData(\n            new URL(\"../l10n/en-US/viewer.ftl\", window.location.href),\n            /* type = */ \"text\"\n          )\n        : PDFJSDev.eval(\"DEFAULT_FTL\");\n\n    return createBundle(lang, text);\n  }\n}\n\nexport { GenericL10n };\n","/* Copyright 2023 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/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n\n/**\n * NOTE: The L10n-implementations should use lowercase language-codes\n *       internally.\n * @implements {IL10n}\n */\nclass L10n {\n  #dir;\n\n  #lang;\n\n  #l10n;\n\n  constructor({ lang, isRTL }, l10n = null) {\n    this.#lang = L10n.#fixupLangCode(lang);\n    this.#l10n = l10n;\n    this.#dir = isRTL ?? L10n.#isRTL(this.#lang) ? \"rtl\" : \"ltr\";\n  }\n\n  _setL10n(l10n) {\n    this.#l10n = l10n;\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"TESTING\")) {\n      document.l10n = l10n;\n    }\n  }\n\n  /** @inheritdoc */\n  getLanguage() {\n    return this.#lang;\n  }\n\n  /** @inheritdoc */\n  getDirection() {\n    return this.#dir;\n  }\n\n  /** @inheritdoc */\n  async get(ids, args = null, fallback) {\n    if (Array.isArray(ids)) {\n      ids = ids.map(id => ({ id }));\n      const messages = await this.#l10n.formatMessages(ids);\n      return messages.map(message => message.value);\n    }\n\n    const messages = await this.#l10n.formatMessages([\n      {\n        id: ids,\n        args,\n      },\n    ]);\n    return messages?.[0].value || fallback;\n  }\n\n  /** @inheritdoc */\n  async translate(element) {\n    try {\n      this.#l10n.connectRoot(element);\n      await this.#l10n.translateRoots();\n    } catch {\n      // Element is under an existing root, so there is no need to add it again.\n    }\n  }\n\n  /** @inheritdoc */\n  pause() {\n    this.#l10n.pauseObserving();\n  }\n\n  /** @inheritdoc */\n  resume() {\n    this.#l10n.resumeObserving();\n  }\n\n  static #fixupLangCode(langCode) {\n    // Use only lowercase language-codes internally, and fallback to English.\n    langCode = langCode?.toLowerCase() || \"en-us\";\n\n    // Try to support \"incompletely\" specified language codes (see issue 13689).\n    const PARTIAL_LANG_CODES = {\n      en: \"en-us\",\n      es: \"es-es\",\n      fy: \"fy-nl\",\n      ga: \"ga-ie\",\n      gu: \"gu-in\",\n      hi: \"hi-in\",\n      hy: \"hy-am\",\n      nb: \"nb-no\",\n      ne: \"ne-np\",\n      nn: \"nn-no\",\n      pa: \"pa-in\",\n      pt: \"pt-pt\",\n      sv: \"sv-se\",\n      zh: \"zh-cn\",\n    };\n    return PARTIAL_LANG_CODES[langCode] || langCode;\n  }\n\n  static #isRTL(lang) {\n    const shortCode = lang.split(\"-\", 1)[0];\n    return [\"ar\", \"he\", \"fa\", \"ps\", \"ur\"].includes(shortCode);\n  }\n}\n\nconst GenericL10n = null;\n\nexport { GenericL10n, L10n };\n","/* Copyright 2014 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\nclass OverlayManager {\n  #overlays = new WeakMap();\n\n  #active = null;\n\n  get overlays() {\n    return this.#overlays;\n  }\n\n  get active() {\n    return this.#active;\n  }\n\n  /**\n   * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n   * @param {boolean} [canForceClose] - Indicates if opening the overlay closes\n   *                  an active overlay. The default is `false`.\n   * @returns {Promise} A promise that is resolved when the overlay has been\n   *                    registered.\n   */\n  async register(dialog, canForceClose = false) {\n    if (typeof dialog !== \"object\") {\n      throw new Error(\"Not enough parameters.\");\n    } else if (this.#overlays.has(dialog)) {\n      throw new Error(\"The overlay is already registered.\");\n    }\n    this.#overlays.set(dialog, { canForceClose });\n\n    dialog.addEventListener(\"cancel\", evt => {\n      this.#active = null;\n    });\n  }\n\n  /**\n   * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n   * @returns {Promise} A promise that is resolved when the overlay has been\n   *                    opened.\n   */\n  async open(dialog) {\n    if (!this.#overlays.has(dialog)) {\n      throw new Error(\"The overlay does not exist.\");\n    } else if (this.#active) {\n      if (this.#active === dialog) {\n        throw new Error(\"The overlay is already active.\");\n      } else if (this.#overlays.get(dialog).canForceClose) {\n        await this.close();\n      } else {\n        throw new Error(\"Another overlay is currently active.\");\n      }\n    }\n    this.#active = dialog;\n    dialog.showModal();\n  }\n\n  /**\n   * @param {HTMLDialogElement} dialog - The overlay's DOM element.\n   * @returns {Promise} A promise that is resolved when the overlay has been\n   *                    closed.\n   */\n  async close(dialog = this.#active) {\n    if (!this.#overlays.has(dialog)) {\n      throw new Error(\"The overlay does not exist.\");\n    } else if (!this.#active) {\n      throw new Error(\"The overlay is currently not active.\");\n    } else if (this.#active !== dialog) {\n      throw new Error(\"Another overlay is currently active.\");\n    }\n    dialog.close();\n    this.#overlays.delete(dialog);\n    this.#active = null;\n  }\n}\n\nexport { OverlayManager };\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\nimport { FindState } from \"./pdf_find_controller.js\";\nimport { toggleExpandedBtn } from \"./ui_utils.js\";\n\nconst MATCHES_COUNT_LIMIT = 1000;\n\n/**\n * Creates a \"search bar\" given a set of DOM elements that act as controls\n * for searching or for setting search preferences in the UI. This object\n * also sets up the appropriate events for the controls. Actual searching\n * is done by PDFFindController.\n */\nclass PDFFindBar {\n  #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this));\n\n  constructor(options, eventBus) {\n    this.opened = false;\n\n    this.bar = options.bar;\n    this.toggleButton = options.toggleButton;\n    this.findField = options.findField;\n    this.highlightAll = options.highlightAllCheckbox;\n    this.caseSensitive = options.caseSensitiveCheckbox;\n    this.matchDiacritics = options.matchDiacriticsCheckbox;\n    this.entireWord = options.entireWordCheckbox;\n    this.findMsg = options.findMsg;\n    this.findResultsCount = options.findResultsCount;\n    this.findPreviousButton = options.findPreviousButton;\n    this.findNextButton = options.findNextButton;\n    this.eventBus = eventBus;\n\n    // Bind the event listeners for click and various other actions.\n    this.#bindListeners();\n  }\n\n  #bindListeners() {\n    if (this._findBarAbortController) {\n      return;\n    }\n    this._findBarAbortController = new AbortController();\n\n    const {\n      _findBarAbortController: { signal },\n    } = this;\n\n    // Add event listeners to the DOM elements.\n    this.toggleButton.addEventListener(\n      \"click\",\n      () => {\n        this.toggle();\n      },\n      { signal }\n    );\n\n    this.findField.addEventListener(\n      \"input\",\n      () => {\n        this.dispatchEvent(\"\");\n      },\n      { signal }\n    );\n\n    this.bar.addEventListener(\n      \"keydown\",\n      e => {\n        switch (e.keyCode) {\n          case 13: // Enter\n            if (e.target === this.findField) {\n              this.dispatchEvent(\"again\", e.shiftKey);\n            }\n            break;\n          case 27: // Escape\n            this.close();\n            break;\n        }\n      },\n      { signal }\n    );\n\n    this.findPreviousButton.addEventListener(\n      \"click\",\n      () => {\n        this.dispatchEvent(\"again\", true);\n      },\n      { signal }\n    );\n\n    this.findNextButton.addEventListener(\n      \"click\",\n      () => {\n        this.dispatchEvent(\"again\", false);\n      },\n      { signal }\n    );\n\n    this.highlightAll.addEventListener(\n      \"click\",\n      () => {\n        this.dispatchEvent(\"highlightallchange\");\n      },\n      { signal }\n    );\n\n    this.caseSensitive.addEventListener(\n      \"click\",\n      () => {\n        this.dispatchEvent(\"casesensitivitychange\");\n      },\n      { signal }\n    );\n\n    this.entireWord.addEventListener(\n      \"click\",\n      () => {\n        this.dispatchEvent(\"entirewordchange\");\n      },\n      { signal }\n    );\n\n    this.matchDiacritics.addEventListener(\n      \"click\",\n      () => {\n        this.dispatchEvent(\"diacriticmatchingchange\");\n      },\n      { signal }\n    );\n  }\n\n  unbindListeners() {\n    this._findBarAbortController?.abort();\n    this._findBarAbortController = null;\n  }\n\n  reset() {\n    this.updateUIState();\n  }\n\n  dispatchEvent(type, findPrev = false) {\n    this.eventBus.dispatch(\"find\", {\n      source: this,\n      type,\n      query: this.findField.value,\n      caseSensitive: this.caseSensitive.checked,\n      entireWord: this.entireWord.checked,\n      highlightAll: this.highlightAll.checked,\n      findPrevious: findPrev,\n      matchDiacritics: this.matchDiacritics.checked,\n    });\n  }\n\n  updateUIState(state, previous, matchesCount) {\n    const { findField, findMsg } = this;\n    let findMsgId = \"\",\n      status = \"\";\n\n    switch (state) {\n      case FindState.FOUND:\n        break;\n      case FindState.PENDING:\n        status = \"pending\";\n        break;\n      case FindState.NOT_FOUND:\n        findMsgId = \"pdfjs-find-not-found\";\n        status = \"notFound\";\n        break;\n      case FindState.WRAPPED:\n        findMsgId = `pdfjs-find-reached-${previous ? \"top\" : \"bottom\"}`;\n        break;\n    }\n    findField.setAttribute(\"data-status\", status);\n    findField.setAttribute(\"aria-invalid\", state === FindState.NOT_FOUND);\n\n    findMsg.setAttribute(\"data-status\", status);\n    if (findMsgId) {\n      findMsg.setAttribute(\"data-l10n-id\", findMsgId);\n    } else {\n      findMsg.removeAttribute(\"data-l10n-id\");\n      findMsg.textContent = \"\";\n    }\n\n    this.updateResultsCount(matchesCount);\n  }\n\n  updateResultsCount({ current = 0, total = 0 } = {}) {\n    const { findResultsCount } = this;\n\n    if (total > 0) {\n      const limit = MATCHES_COUNT_LIMIT;\n\n      findResultsCount.setAttribute(\n        \"data-l10n-id\",\n        `pdfjs-find-match-count${total > limit ? \"-limit\" : \"\"}`\n      );\n      findResultsCount.setAttribute(\n        \"data-l10n-args\",\n        JSON.stringify({ limit, current, total })\n      );\n    } else {\n      findResultsCount.removeAttribute(\"data-l10n-id\");\n      findResultsCount.textContent = \"\";\n    }\n  }\n\n  open() {\n    if (!this.opened) {\n      // Potentially update the findbar layout, row vs column, when:\n      //  - The width of the viewer itself changes.\n      //  - The width of the findbar changes, by toggling the visibility\n      //    (or localization) of find count/status messages.\n      this.#resizeObserver.observe(this.bar.parentNode);\n      this.#resizeObserver.observe(this.bar);\n\n      this.opened = true;\n      toggleExpandedBtn(this.toggleButton, true, this.bar);\n    }\n    this.findField.select();\n    this.findField.focus();\n  }\n\n  close() {\n    if (!this.opened) {\n      return;\n    }\n    this.#resizeObserver.disconnect();\n\n    this.opened = false;\n    toggleExpandedBtn(this.toggleButton, false, this.bar);\n\n    this.eventBus.dispatch(\"findbarclose\", { source: this });\n  }\n\n  toggle() {\n    if (this.opened) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n\n  #resizeObserverCallback(entries) {\n    const { bar } = this;\n    // The find bar has an absolute position and thus the browser extends\n    // its width to the maximum possible width once the find bar does not fit\n    // entirely within the window anymore (and its elements are automatically\n    // wrapped). Here we detect and fix that.\n    bar.classList.remove(\"wrapContainers\");\n\n    const findbarHeight = bar.clientHeight;\n    const inputContainerHeight = bar.firstElementChild.clientHeight;\n\n    if (findbarHeight > inputContainerHeight) {\n      // The findbar is taller than the input container, which means that\n      // the browser wrapped some of the elements. For a consistent look,\n      // wrap all of them to adjust the width of the find bar.\n      bar.classList.add(\"wrapContainers\");\n    }\n  }\n}\n\nexport { PDFFindBar };\n","/* Copyright 2018 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 CharacterType = {\n  SPACE: 0,\n  ALPHA_LETTER: 1,\n  PUNCT: 2,\n  HAN_LETTER: 3,\n  KATAKANA_LETTER: 4,\n  HIRAGANA_LETTER: 5,\n  HALFWIDTH_KATAKANA_LETTER: 6,\n  THAI_LETTER: 7,\n};\n\nfunction isAlphabeticalScript(charCode) {\n  return charCode < 0x2e80;\n}\n\nfunction isAscii(charCode) {\n  return (charCode & 0xff80) === 0;\n}\n\nfunction isAsciiAlpha(charCode) {\n  return (\n    (charCode >= /* a = */ 0x61 && charCode <= /* z = */ 0x7a) ||\n    (charCode >= /* A = */ 0x41 && charCode <= /* Z = */ 0x5a)\n  );\n}\n\nfunction isAsciiDigit(charCode) {\n  return charCode >= /* 0 = */ 0x30 && charCode <= /* 9 = */ 0x39;\n}\n\nfunction isAsciiSpace(charCode) {\n  return (\n    charCode === /* SPACE = */ 0x20 ||\n    charCode === /* TAB = */ 0x09 ||\n    charCode === /* CR = */ 0x0d ||\n    charCode === /* LF = */ 0x0a\n  );\n}\n\nfunction isHan(charCode) {\n  return (\n    (charCode >= 0x3400 && charCode <= 0x9fff) ||\n    (charCode >= 0xf900 && charCode <= 0xfaff)\n  );\n}\n\nfunction isKatakana(charCode) {\n  return charCode >= 0x30a0 && charCode <= 0x30ff;\n}\n\nfunction isHiragana(charCode) {\n  return charCode >= 0x3040 && charCode <= 0x309f;\n}\n\nfunction isHalfwidthKatakana(charCode) {\n  return charCode >= 0xff60 && charCode <= 0xff9f;\n}\n\nfunction isThai(charCode) {\n  return (charCode & 0xff80) === 0x0e00;\n}\n\n/**\n * This function is based on the word-break detection implemented in:\n * https://hg.mozilla.org/mozilla-central/file/tip/intl/lwbrk/WordBreaker.cpp\n */\nfunction getCharacterType(charCode) {\n  if (isAlphabeticalScript(charCode)) {\n    if (isAscii(charCode)) {\n      if (isAsciiSpace(charCode)) {\n        return CharacterType.SPACE;\n      } else if (\n        isAsciiAlpha(charCode) ||\n        isAsciiDigit(charCode) ||\n        charCode === /* UNDERSCORE = */ 0x5f\n      ) {\n        return CharacterType.ALPHA_LETTER;\n      }\n      return CharacterType.PUNCT;\n    } else if (isThai(charCode)) {\n      return CharacterType.THAI_LETTER;\n    } else if (charCode === /* NBSP = */ 0xa0) {\n      return CharacterType.SPACE;\n    }\n    return CharacterType.ALPHA_LETTER;\n  }\n\n  if (isHan(charCode)) {\n    return CharacterType.HAN_LETTER;\n  } else if (isKatakana(charCode)) {\n    return CharacterType.KATAKANA_LETTER;\n  } else if (isHiragana(charCode)) {\n    return CharacterType.HIRAGANA_LETTER;\n  } else if (isHalfwidthKatakana(charCode)) {\n    return CharacterType.HALFWIDTH_KATAKANA_LETTER;\n  }\n  return CharacterType.ALPHA_LETTER;\n}\n\nlet NormalizeWithNFKC;\nfunction getNormalizeWithNFKC() {\n  /* eslint-disable no-irregular-whitespace */\n  NormalizeWithNFKC ||= ` ¨ª¯²-µ¸-º¼-¾Ĳ-ĳĿ-ŀŉſǄ-ǌǱ-ǳʰ-ʸ˘-˝ˠ-ˤʹͺ;΄-΅·ϐ-ϖϰ-ϲϴ-ϵϹևٵ-ٸक़-य़ড়-ঢ়য়ਲ਼ਸ਼ਖ਼-ਜ਼ਫ਼ଡ଼-ଢ଼ำຳໜ-ໝ༌གྷཌྷདྷབྷཛྷཀྵჼᴬ-ᴮᴰ-ᴺᴼ-ᵍᵏ-ᵪᵸᶛ-ᶿẚ-ẛάέήίόύώΆ᾽-῁ΈΉ῍-῏ΐΊ῝-῟ΰΎ῭-`ΌΏ´-῾ - ‑‗․-… ″-‴‶-‷‼‾⁇-⁉⁗ ⁰-ⁱ⁴-₎ₐ-ₜ₨℀-℃℅-ℇ℉-ℓℕ-№ℙ-ℝ℠-™ℤΩℨK-ℭℯ-ℱℳ-ℹ℻-⅀ⅅ-ⅉ⅐-ⅿ↉∬-∭∯-∰〈-〉①-⓪⨌⩴-⩶⫝̸ⱼ-ⱽⵯ⺟⻳⼀-⿕　〶〸-〺゛-゜ゟヿㄱ-ㆎ㆒-㆟㈀-㈞㈠-㉇㉐-㉾㊀-㏿ꚜ-ꚝꝰꟲ-ꟴꟸ-ꟹꭜ-ꭟꭩ豈-嗀塚晴凞-羽蘒諸逸-都飯-舘並-龎ﬀ-ﬆﬓ-ﬗיִײַ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-﷼︐-︙︰-﹄﹇-﹒﹔-﹦﹨-﹫ﹰ-ﹲﹴﹶ-ﻼ！-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ￠-￦`;\n\n  if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) {\n    const ranges = [];\n    const range = [];\n    const diacriticsRegex = /^\\p{M}$/u;\n    // Some chars must be replaced by their NFKC counterpart during a search.\n    for (let i = 0; i < 65536; i++) {\n      const c = String.fromCharCode(i);\n      if (c.normalize(\"NFKC\") !== c && !diacriticsRegex.test(c)) {\n        if (range.length !== 2) {\n          range[0] = range[1] = i;\n          continue;\n        }\n        if (range[1] + 1 !== i) {\n          if (range[0] === range[1]) {\n            ranges.push(String.fromCharCode(range[0]));\n          } else {\n            ranges.push(\n              `${String.fromCharCode(range[0])}-${String.fromCharCode(\n                range[1]\n              )}`\n            );\n          }\n          range[0] = range[1] = i;\n        } else {\n          range[1] = i;\n        }\n      }\n    }\n    if (ranges.join(\"\") !== NormalizeWithNFKC) {\n      throw new Error(\n        \"getNormalizeWithNFKC - update the `NormalizeWithNFKC` string.\"\n      );\n    }\n  }\n  return NormalizeWithNFKC;\n}\n\nexport { CharacterType, getCharacterType, getNormalizeWithNFKC };\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\n/** @typedef {import(\"../src/display/api\").PDFDocumentProxy} PDFDocumentProxy */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { binarySearchFirstItem, scrollIntoView } from \"./ui_utils.js\";\nimport { getCharacterType, getNormalizeWithNFKC } from \"./pdf_find_utils.js\";\n\nconst FindState = {\n  FOUND: 0,\n  NOT_FOUND: 1,\n  WRAPPED: 2,\n  PENDING: 3,\n};\n\nconst FIND_TIMEOUT = 250; // ms\nconst MATCH_SCROLL_OFFSET_TOP = -50; // px\nconst MATCH_SCROLL_OFFSET_LEFT = -400; // px\n\nconst CHARACTERS_TO_NORMALIZE = {\n  \"\\u2010\": \"-\", // Hyphen\n  \"\\u2018\": \"'\", // Left single quotation mark\n  \"\\u2019\": \"'\", // Right single quotation mark\n  \"\\u201A\": \"'\", // Single low-9 quotation mark\n  \"\\u201B\": \"'\", // Single high-reversed-9 quotation mark\n  \"\\u201C\": '\"', // Left double quotation mark\n  \"\\u201D\": '\"', // Right double quotation mark\n  \"\\u201E\": '\"', // Double low-9 quotation mark\n  \"\\u201F\": '\"', // Double high-reversed-9 quotation mark\n  \"\\u00BC\": \"1/4\", // Vulgar fraction one quarter\n  \"\\u00BD\": \"1/2\", // Vulgar fraction one half\n  \"\\u00BE\": \"3/4\", // Vulgar fraction three quarters\n};\n\n// These diacritics aren't considered as combining diacritics\n// when searching in a document:\n//   https://searchfox.org/mozilla-central/source/intl/unicharutil/util/is_combining_diacritic.py.\n// The combining class definitions can be found:\n//   https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values\n// Category 0 corresponds to [^\\p{Mn}].\nconst DIACRITICS_EXCEPTION = new Set([\n  // UNICODE_COMBINING_CLASS_KANA_VOICING\n  // https://www.compart.com/fr/unicode/combining/8\n  0x3099, 0x309a,\n  // UNICODE_COMBINING_CLASS_VIRAMA (under 0xFFFF)\n  // https://www.compart.com/fr/unicode/combining/9\n  0x094d, 0x09cd, 0x0a4d, 0x0acd, 0x0b4d, 0x0bcd, 0x0c4d, 0x0ccd, 0x0d3b,\n  0x0d3c, 0x0d4d, 0x0dca, 0x0e3a, 0x0eba, 0x0f84, 0x1039, 0x103a, 0x1714,\n  0x1734, 0x17d2, 0x1a60, 0x1b44, 0x1baa, 0x1bab, 0x1bf2, 0x1bf3, 0x2d7f,\n  0xa806, 0xa82c, 0xa8c4, 0xa953, 0xa9c0, 0xaaf6, 0xabed,\n  // 91\n  // https://www.compart.com/fr/unicode/combining/91\n  0x0c56,\n  // 129\n  // https://www.compart.com/fr/unicode/combining/129\n  0x0f71,\n  // 130\n  // https://www.compart.com/fr/unicode/combining/130\n  0x0f72, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f80,\n  // 132\n  // https://www.compart.com/fr/unicode/combining/132\n  0x0f74,\n]);\nlet DIACRITICS_EXCEPTION_STR; // Lazily initialized, see below.\n\nconst DIACRITICS_REG_EXP = /\\p{M}+/gu;\nconst SPECIAL_CHARS_REG_EXP =\n  /([.*+?^${}()|[\\]\\\\])|(\\p{P})|(\\s+)|(\\p{M})|(\\p{L})/gu;\nconst NOT_DIACRITIC_FROM_END_REG_EXP = /([^\\p{M}])\\p{M}*$/u;\nconst NOT_DIACRITIC_FROM_START_REG_EXP = /^\\p{M}*([^\\p{M}])/u;\n\n// The range [AC00-D7AF] corresponds to the Hangul syllables.\n// The few other chars are some CJK Compatibility Ideographs.\nconst SYLLABLES_REG_EXP = /[\\uAC00-\\uD7AF\\uFA6C\\uFACF-\\uFAD1\\uFAD5-\\uFAD7]+/g;\nconst SYLLABLES_LENGTHS = new Map();\n// When decomposed (in using NFD) the above syllables will start\n// with one of the chars in this regexp.\nconst FIRST_CHAR_SYLLABLES_REG_EXP =\n  \"[\\\\u1100-\\\\u1112\\\\ud7a4-\\\\ud7af\\\\ud84a\\\\ud84c\\\\ud850\\\\ud854\\\\ud857\\\\ud85f]\";\n\nconst NFKC_CHARS_TO_NORMALIZE = new Map();\n\nlet noSyllablesRegExp = null;\nlet withSyllablesRegExp = null;\n\nfunction normalize(text) {\n  // The diacritics in the text or in the query can be composed or not.\n  // So we use a decomposed text using NFD (and the same for the query)\n  // in order to be sure that diacritics are in the same order.\n\n  // Collect syllables length and positions.\n  const syllablePositions = [];\n  let m;\n  while ((m = SYLLABLES_REG_EXP.exec(text)) !== null) {\n    let { index } = m;\n    for (const char of m[0]) {\n      let len = SYLLABLES_LENGTHS.get(char);\n      if (!len) {\n        len = char.normalize(\"NFD\").length;\n        SYLLABLES_LENGTHS.set(char, len);\n      }\n      syllablePositions.push([len, index++]);\n    }\n  }\n\n  let normalizationRegex;\n  if (syllablePositions.length === 0 && noSyllablesRegExp) {\n    normalizationRegex = noSyllablesRegExp;\n  } else if (syllablePositions.length > 0 && withSyllablesRegExp) {\n    normalizationRegex = withSyllablesRegExp;\n  } else {\n    // Compile the regular expression for text normalization once.\n    const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(\"\");\n    const toNormalizeWithNFKC = getNormalizeWithNFKC();\n\n    // 3040-309F: Hiragana\n    // 30A0-30FF: Katakana\n    const CJK = \"(?:\\\\p{Ideographic}|[\\u3040-\\u30FF])\";\n    const HKDiacritics = \"(?:\\u3099|\\u309A)\";\n    const regexp = `([${replace}])|([${toNormalizeWithNFKC}])|(${HKDiacritics}\\\\n)|(\\\\p{M}+(?:-\\\\n)?)|(\\\\S-\\\\n)|(${CJK}\\\\n)|(\\\\n)`;\n\n    if (syllablePositions.length === 0) {\n      // Most of the syllables belong to Hangul so there are no need\n      // to search for them in a non-Hangul document.\n      // We use the \\0 in order to have the same number of groups.\n      normalizationRegex = noSyllablesRegExp = new RegExp(\n        regexp + \"|(\\\\u0000)\",\n        \"gum\"\n      );\n    } else {\n      normalizationRegex = withSyllablesRegExp = new RegExp(\n        regexp + `|(${FIRST_CHAR_SYLLABLES_REG_EXP})`,\n        \"gum\"\n      );\n    }\n  }\n\n  // The goal of this function is to normalize the string and\n  // be able to get from an index in the new string the\n  // corresponding index in the old string.\n  // For example if we have: abCd12ef456gh where C is replaced by ccc\n  // and numbers replaced by nothing (it's the case for diacritics), then\n  // we'll obtain the normalized string: abcccdefgh.\n  // So here the reverse map is: [0,1,2,2,2,3,6,7,11,12].\n\n  // The goal is to obtain the array: [[0, 0], [3, -1], [4, -2],\n  // [6, 0], [8, 3]].\n  // which can be used like this:\n  //  - let say that i is the index in new string and j the index\n  //    the old string.\n  //  - if i is in [0; 3[ then j = i + 0\n  //  - if i is in [3; 4[ then j = i - 1\n  //  - if i is in [4; 6[ then j = i - 2\n  //  ...\n  // Thanks to a binary search it's easy to know where is i and what's the\n  // shift.\n  // Let say that the last entry in the array is [x, s] and we have a\n  // substitution at index y (old string) which will replace o chars by n chars.\n  // Firstly, if o === n, then no need to add a new entry: the shift is\n  // the same.\n  // Secondly, if o < n, then we push the n - o elements:\n  // [y - (s - 1), s - 1], [y - (s - 2), s - 2], ...\n  // Thirdly, if o > n, then we push the element: [y - (s - n), o + s - n]\n\n  // Collect diacritics length and positions.\n  const rawDiacriticsPositions = [];\n  while ((m = DIACRITICS_REG_EXP.exec(text)) !== null) {\n    rawDiacriticsPositions.push([m[0].length, m.index]);\n  }\n\n  let normalized = text.normalize(\"NFD\");\n  const positions = [[0, 0]];\n  let rawDiacriticsIndex = 0;\n  let syllableIndex = 0;\n  let shift = 0;\n  let shiftOrigin = 0;\n  let eol = 0;\n  let hasDiacritics = false;\n\n  normalized = normalized.replace(\n    normalizationRegex,\n    (match, p1, p2, p3, p4, p5, p6, p7, p8, i) => {\n      i -= shiftOrigin;\n      if (p1) {\n        // Maybe fractions or quotations mark...\n        const replacement = CHARACTERS_TO_NORMALIZE[p1];\n        const jj = replacement.length;\n        for (let j = 1; j < jj; j++) {\n          positions.push([i - shift + j, shift - j]);\n        }\n        shift -= jj - 1;\n        return replacement;\n      }\n\n      if (p2) {\n        // Use the NFKC representation to normalize the char.\n        let replacement = NFKC_CHARS_TO_NORMALIZE.get(p2);\n        if (!replacement) {\n          replacement = p2.normalize(\"NFKC\");\n          NFKC_CHARS_TO_NORMALIZE.set(p2, replacement);\n        }\n        const jj = replacement.length;\n        for (let j = 1; j < jj; j++) {\n          positions.push([i - shift + j, shift - j]);\n        }\n        shift -= jj - 1;\n        return replacement;\n      }\n\n      if (p3) {\n        // We've a Katakana-Hiragana diacritic followed by a \\n so don't replace\n        // the \\n by a whitespace.\n        hasDiacritics = true;\n\n        // Diacritic.\n        if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) {\n          ++rawDiacriticsIndex;\n        } else {\n          // i is the position of the first diacritic\n          // so (i - 1) is the position for the letter before.\n          positions.push([i - 1 - shift + 1, shift - 1]);\n          shift -= 1;\n          shiftOrigin += 1;\n        }\n\n        // End-of-line.\n        positions.push([i - shift + 1, shift]);\n        shiftOrigin += 1;\n        eol += 1;\n\n        return p3.charAt(0);\n      }\n\n      if (p4) {\n        const hasTrailingDashEOL = p4.endsWith(\"\\n\");\n        const len = hasTrailingDashEOL ? p4.length - 2 : p4.length;\n\n        // Diacritics.\n        hasDiacritics = true;\n        let jj = len;\n        if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) {\n          jj -= rawDiacriticsPositions[rawDiacriticsIndex][0];\n          ++rawDiacriticsIndex;\n        }\n\n        for (let j = 1; j <= jj; j++) {\n          // i is the position of the first diacritic\n          // so (i - 1) is the position for the letter before.\n          positions.push([i - 1 - shift + j, shift - j]);\n        }\n        shift -= jj;\n        shiftOrigin += jj;\n\n        if (hasTrailingDashEOL) {\n          // Diacritics are followed by a -\\n.\n          // See comments in `if (p5)` block.\n          i += len - 1;\n          positions.push([i - shift + 1, 1 + shift]);\n          shift += 1;\n          shiftOrigin += 1;\n          eol += 1;\n          return p4.slice(0, len);\n        }\n\n        return p4;\n      }\n\n      if (p5) {\n        // \"X-\\n\" is removed because an hyphen at the end of a line\n        // with not a space before is likely here to mark a break\n        // in a word.\n        // If X is encoded with UTF-32 then it can have a length greater than 1.\n        // The \\n isn't in the original text so here y = i, n = X.len - 2 and\n        // o = X.len - 1.\n        const len = p5.length - 2;\n        positions.push([i - shift + len, 1 + shift]);\n        shift += 1;\n        shiftOrigin += 1;\n        eol += 1;\n        return p5.slice(0, -2);\n      }\n\n      if (p6) {\n        // An ideographic at the end of a line doesn't imply adding an extra\n        // white space.\n        // A CJK can be encoded in UTF-32, hence their length isn't always 1.\n        const len = p6.length - 1;\n        positions.push([i - shift + len, shift]);\n        shiftOrigin += 1;\n        eol += 1;\n        return p6.slice(0, -1);\n      }\n\n      if (p7) {\n        // eol is replaced by space: \"foo\\nbar\" is likely equivalent to\n        // \"foo bar\".\n        positions.push([i - shift + 1, shift - 1]);\n        shift -= 1;\n        shiftOrigin += 1;\n        eol += 1;\n        return \" \";\n      }\n\n      // p8\n      if (i + eol === syllablePositions[syllableIndex]?.[1]) {\n        // A syllable (1 char) is replaced with several chars (n) so\n        // newCharsLen = n - 1.\n        const newCharLen = syllablePositions[syllableIndex][0] - 1;\n        ++syllableIndex;\n        for (let j = 1; j <= newCharLen; j++) {\n          positions.push([i - (shift - j), shift - j]);\n        }\n        shift -= newCharLen;\n        shiftOrigin += newCharLen;\n      }\n      return p8;\n    }\n  );\n\n  positions.push([normalized.length, shift]);\n\n  return [normalized, positions, hasDiacritics];\n}\n\n// Determine the original, non-normalized, match index such that highlighting of\n// search results is correct in the `textLayer` for strings containing e.g. \"½\"\n// characters; essentially \"inverting\" the result of the `normalize` function.\nfunction getOriginalIndex(diffs, pos, len) {\n  if (!diffs) {\n    return [pos, len];\n  }\n\n  // First char in the new string.\n  const start = pos;\n  // Last char in the new string.\n  const end = pos + len - 1;\n  let i = binarySearchFirstItem(diffs, x => x[0] >= start);\n  if (diffs[i][0] > start) {\n    --i;\n  }\n\n  let j = binarySearchFirstItem(diffs, x => x[0] >= end, i);\n  if (diffs[j][0] > end) {\n    --j;\n  }\n\n  // First char in the old string.\n  const oldStart = start + diffs[i][1];\n\n  // Last char in the old string.\n  const oldEnd = end + diffs[j][1];\n  const oldLen = oldEnd + 1 - oldStart;\n\n  return [oldStart, oldLen];\n}\n\n/**\n * @typedef {Object} PDFFindControllerOptions\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {EventBus} eventBus - The application event bus.\n * @property {boolean} [updateMatchesCountOnProgress] - True if the matches\n *   count must be updated on progress or only when the last page is reached.\n *   The default value is `true`.\n */\n\n/**\n * Provides search functionality to find a given string in a PDF document.\n */\nclass PDFFindController {\n  #state = null;\n\n  #updateMatchesCountOnProgress = true;\n\n  #visitedPagesCount = 0;\n\n  /**\n   * @param {PDFFindControllerOptions} options\n   */\n  constructor({ linkService, eventBus, updateMatchesCountOnProgress = true }) {\n    this._linkService = linkService;\n    this._eventBus = eventBus;\n    this.#updateMatchesCountOnProgress = updateMatchesCountOnProgress;\n\n    /**\n     * Callback used to check if a `pageNumber` is currently visible.\n     * @type {function}\n     */\n    this.onIsPageVisible = null;\n\n    this.#reset();\n    eventBus._on(\"find\", this.#onFind.bind(this));\n    eventBus._on(\"findbarclose\", this.#onFindBarClose.bind(this));\n  }\n\n  get highlightMatches() {\n    return this._highlightMatches;\n  }\n\n  get pageMatches() {\n    return this._pageMatches;\n  }\n\n  get pageMatchesLength() {\n    return this._pageMatchesLength;\n  }\n\n  get selected() {\n    return this._selected;\n  }\n\n  get state() {\n    return this.#state;\n  }\n\n  /**\n   * Set a reference to the PDF document in order to search it.\n   * Note that searching is not possible if this method is not called.\n   *\n   * @param {PDFDocumentProxy} pdfDocument - The PDF document to search.\n   */\n  setDocument(pdfDocument) {\n    if (this._pdfDocument) {\n      this.#reset();\n    }\n    if (!pdfDocument) {\n      return;\n    }\n    this._pdfDocument = pdfDocument;\n    this._firstPageCapability.resolve();\n  }\n\n  #onFind(state) {\n    if (!state) {\n      return;\n    }\n    const pdfDocument = this._pdfDocument;\n    const { type } = state;\n\n    if (this.#state === null || this.#shouldDirtyMatch(state)) {\n      this._dirtyMatch = true;\n    }\n    this.#state = state;\n    if (type !== \"highlightallchange\") {\n      this.#updateUIState(FindState.PENDING);\n    }\n\n    this._firstPageCapability.promise.then(() => {\n      // If the document was closed before searching began, or if the search\n      // operation was relevant for a previously opened document, do nothing.\n      if (\n        !this._pdfDocument ||\n        (pdfDocument && this._pdfDocument !== pdfDocument)\n      ) {\n        return;\n      }\n      this.#extractText();\n\n      const findbarClosed = !this._highlightMatches;\n      const pendingTimeout = !!this._findTimeout;\n\n      if (this._findTimeout) {\n        clearTimeout(this._findTimeout);\n        this._findTimeout = null;\n      }\n      if (!type) {\n        // Trigger the find action with a small delay to avoid starting the\n        // search when the user is still typing (saving resources).\n        this._findTimeout = setTimeout(() => {\n          this.#nextMatch();\n          this._findTimeout = null;\n        }, FIND_TIMEOUT);\n      } else if (this._dirtyMatch) {\n        // Immediately trigger searching for non-'find' operations, when the\n        // current state needs to be reset and matches re-calculated.\n        this.#nextMatch();\n      } else if (type === \"again\") {\n        this.#nextMatch();\n\n        // When the findbar was previously closed, and `highlightAll` is set,\n        // ensure that the matches on all active pages are highlighted again.\n        if (findbarClosed && this.#state.highlightAll) {\n          this.#updateAllPages();\n        }\n      } else if (type === \"highlightallchange\") {\n        // If there was a pending search operation, synchronously trigger a new\n        // search *first* to ensure that the correct matches are highlighted.\n        if (pendingTimeout) {\n          this.#nextMatch();\n        } else {\n          this._highlightMatches = true;\n        }\n        this.#updateAllPages(); // Update the highlighting on all active pages.\n      } else {\n        this.#nextMatch();\n      }\n    });\n  }\n\n  /**\n   * @typedef {Object} PDFFindControllerScrollMatchIntoViewParams\n   * @property {HTMLElement} element\n   * @property {number} selectedLeft\n   * @property {number} pageIndex\n   * @property {number} matchIndex\n   */\n\n  /**\n   * Scroll the current match into view.\n   * @param {PDFFindControllerScrollMatchIntoViewParams}\n   */\n  scrollMatchIntoView({\n    element = null,\n    selectedLeft = 0,\n    pageIndex = -1,\n    matchIndex = -1,\n  }) {\n    if (!this._scrollMatches || !element) {\n      return;\n    } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {\n      return;\n    } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {\n      return;\n    }\n    this._scrollMatches = false; // Ensure that scrolling only happens once.\n\n    const spot = {\n      top: MATCH_SCROLL_OFFSET_TOP,\n      left: selectedLeft + MATCH_SCROLL_OFFSET_LEFT,\n    };\n    scrollIntoView(element, spot, /* scrollMatches = */ true);\n  }\n\n  #reset() {\n    this._highlightMatches = false;\n    this._scrollMatches = false;\n    this._pdfDocument = null;\n    this._pageMatches = [];\n    this._pageMatchesLength = [];\n    this.#visitedPagesCount = 0;\n    this.#state = null;\n    // Currently selected match.\n    this._selected = {\n      pageIdx: -1,\n      matchIdx: -1,\n    };\n    // Where the find algorithm currently is in the document.\n    this._offset = {\n      pageIdx: null,\n      matchIdx: null,\n      wrapped: false,\n    };\n    this._extractTextPromises = [];\n    this._pageContents = []; // Stores the normalized text for each page.\n    this._pageDiffs = [];\n    this._hasDiacritics = [];\n    this._matchesCountTotal = 0;\n    this._pagesToSearch = null;\n    this._pendingFindMatches = new Set();\n    this._resumePageIdx = null;\n    this._dirtyMatch = false;\n    clearTimeout(this._findTimeout);\n    this._findTimeout = null;\n\n    this._firstPageCapability = Promise.withResolvers();\n  }\n\n  /**\n   * @type {string|Array} The (current) normalized search query.\n   */\n  get #query() {\n    const { query } = this.#state;\n    if (typeof query === \"string\") {\n      if (query !== this._rawQuery) {\n        this._rawQuery = query;\n        [this._normalizedQuery] = normalize(query);\n      }\n      return this._normalizedQuery;\n    }\n    // We don't bother caching the normalized search query in the Array-case,\n    // since this code-path is *essentially* unused in the default viewer.\n    return (query || []).filter(q => !!q).map(q => normalize(q)[0]);\n  }\n\n  #shouldDirtyMatch(state) {\n    // When the search query changes, regardless of the actual search command\n    // used, always re-calculate matches to avoid errors (fixes bug 1030622).\n    const newQuery = state.query,\n      prevQuery = this.#state.query;\n    const newType = typeof newQuery,\n      prevType = typeof prevQuery;\n\n    if (newType !== prevType) {\n      return true;\n    }\n    if (newType === \"string\") {\n      if (newQuery !== prevQuery) {\n        return true;\n      }\n    } else if (\n      /* isArray && */ JSON.stringify(newQuery) !== JSON.stringify(prevQuery)\n    ) {\n      return true;\n    }\n\n    switch (state.type) {\n      case \"again\":\n        const pageNumber = this._selected.pageIdx + 1;\n        const linkService = this._linkService;\n        // Only treat a 'findagain' event as a new search operation when it's\n        // *absolutely* certain that the currently selected match is no longer\n        // visible, e.g. as a result of the user scrolling in the document.\n        //\n        // NOTE: If only a simple `this._linkService.page` check was used here,\n        // there's a risk that consecutive 'findagain' operations could \"skip\"\n        // over matches at the top/bottom of pages thus making them completely\n        // inaccessible when there's multiple pages visible in the viewer.\n        return (\n          pageNumber >= 1 &&\n          pageNumber <= linkService.pagesCount &&\n          pageNumber !== linkService.page &&\n          !(this.onIsPageVisible?.(pageNumber) ?? true)\n        );\n      case \"highlightallchange\":\n        return false;\n    }\n    return true;\n  }\n\n  /**\n   * Determine if the search query constitutes a \"whole word\", by comparing the\n   * first/last character type with the preceding/following character type.\n   */\n  #isEntireWord(content, startIdx, length) {\n    let match = content\n      .slice(0, startIdx)\n      .match(NOT_DIACRITIC_FROM_END_REG_EXP);\n    if (match) {\n      const first = content.charCodeAt(startIdx);\n      const limit = match[1].charCodeAt(0);\n      if (getCharacterType(first) === getCharacterType(limit)) {\n        return false;\n      }\n    }\n\n    match = content\n      .slice(startIdx + length)\n      .match(NOT_DIACRITIC_FROM_START_REG_EXP);\n    if (match) {\n      const last = content.charCodeAt(startIdx + length - 1);\n      const limit = match[1].charCodeAt(0);\n      if (getCharacterType(last) === getCharacterType(limit)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  #calculateRegExpMatch(query, entireWord, pageIndex, pageContent) {\n    const matches = (this._pageMatches[pageIndex] = []);\n    const matchesLength = (this._pageMatchesLength[pageIndex] = []);\n    if (!query) {\n      // The query can be empty because some chars like diacritics could have\n      // been stripped out.\n      return;\n    }\n    const diffs = this._pageDiffs[pageIndex];\n    let match;\n    while ((match = query.exec(pageContent)) !== null) {\n      if (\n        entireWord &&\n        !this.#isEntireWord(pageContent, match.index, match[0].length)\n      ) {\n        continue;\n      }\n\n      const [matchPos, matchLen] = getOriginalIndex(\n        diffs,\n        match.index,\n        match[0].length\n      );\n\n      if (matchLen) {\n        matches.push(matchPos);\n        matchesLength.push(matchLen);\n      }\n    }\n  }\n\n  #convertToRegExpString(query, hasDiacritics) {\n    const { matchDiacritics } = this.#state;\n    let isUnicode = false;\n    query = query.replaceAll(\n      SPECIAL_CHARS_REG_EXP,\n      (\n        match,\n        p1 /* to escape */,\n        p2 /* punctuation */,\n        p3 /* whitespaces */,\n        p4 /* diacritics */,\n        p5 /* letters */\n      ) => {\n        // We don't need to use a \\s for whitespaces since all the different\n        // kind of whitespaces are replaced by a single \" \".\n\n        if (p1) {\n          // Escape characters like *+?... to not interfer with regexp syntax.\n          return `[ ]*\\\\${p1}[ ]*`;\n        }\n        if (p2) {\n          // Allow whitespaces around punctuation signs.\n          return `[ ]*${p2}[ ]*`;\n        }\n        if (p3) {\n          // Replace spaces by \\s+ to be sure to match any spaces.\n          return \"[ ]+\";\n        }\n        if (matchDiacritics) {\n          return p4 || p5;\n        }\n\n        if (p4) {\n          // Diacritics are removed with few exceptions.\n          return DIACRITICS_EXCEPTION.has(p4.charCodeAt(0)) ? p4 : \"\";\n        }\n\n        // A letter has been matched and it can be followed by any diacritics\n        // in normalized text.\n        if (hasDiacritics) {\n          isUnicode = true;\n          return `${p5}\\\\p{M}*`;\n        }\n        return p5;\n      }\n    );\n\n    const trailingSpaces = \"[ ]*\";\n    if (query.endsWith(trailingSpaces)) {\n      // The [ ]* has been added in order to help to match \"foo . bar\" but\n      // it doesn't make sense to match some whitespaces after the dot\n      // when it's the last character.\n      query = query.slice(0, query.length - trailingSpaces.length);\n    }\n\n    if (matchDiacritics) {\n      // aX must not match aXY.\n      if (hasDiacritics) {\n        DIACRITICS_EXCEPTION_STR ||= String.fromCharCode(\n          ...DIACRITICS_EXCEPTION\n        );\n\n        isUnicode = true;\n        query = `${query}(?=[${DIACRITICS_EXCEPTION_STR}]|[^\\\\p{M}]|$)`;\n      }\n    }\n\n    return [isUnicode, query];\n  }\n\n  #calculateMatch(pageIndex) {\n    let query = this.#query;\n    if (query.length === 0) {\n      return; // Do nothing: the matches should be wiped out already.\n    }\n    const { caseSensitive, entireWord } = this.#state;\n    const pageContent = this._pageContents[pageIndex];\n    const hasDiacritics = this._hasDiacritics[pageIndex];\n\n    let isUnicode = false;\n    if (typeof query === \"string\") {\n      [isUnicode, query] = this.#convertToRegExpString(query, hasDiacritics);\n    } else {\n      // Words are sorted in reverse order to be sure that \"foobar\" is matched\n      // before \"foo\" in case the query is \"foobar foo\".\n      query = query\n        .sort()\n        .reverse()\n        .map(q => {\n          const [isUnicodePart, queryPart] = this.#convertToRegExpString(\n            q,\n            hasDiacritics\n          );\n          isUnicode ||= isUnicodePart;\n          return `(${queryPart})`;\n        })\n        .join(\"|\");\n    }\n\n    const flags = `g${isUnicode ? \"u\" : \"\"}${caseSensitive ? \"\" : \"i\"}`;\n    query = query ? new RegExp(query, flags) : null;\n\n    this.#calculateRegExpMatch(query, entireWord, pageIndex, pageContent);\n\n    // When `highlightAll` is set, ensure that the matches on previously\n    // rendered (and still active) pages are correctly highlighted.\n    if (this.#state.highlightAll) {\n      this.#updatePage(pageIndex);\n    }\n    if (this._resumePageIdx === pageIndex) {\n      this._resumePageIdx = null;\n      this.#nextPageMatch();\n    }\n\n    // Update the match count.\n    const pageMatchesCount = this._pageMatches[pageIndex].length;\n    this._matchesCountTotal += pageMatchesCount;\n    if (this.#updateMatchesCountOnProgress) {\n      if (pageMatchesCount > 0) {\n        this.#updateUIResultsCount();\n      }\n    } else if (++this.#visitedPagesCount === this._linkService.pagesCount) {\n      // For example, in GeckoView we want to have only the final update because\n      // the Java side provides only one object to update the counts.\n      this.#updateUIResultsCount();\n    }\n  }\n\n  #extractText() {\n    // Perform text extraction once if this method is called multiple times.\n    if (this._extractTextPromises.length > 0) {\n      return;\n    }\n\n    let deferred = Promise.resolve();\n    const textOptions = { disableNormalization: true };\n    for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {\n      const { promise, resolve } = Promise.withResolvers();\n      this._extractTextPromises[i] = promise;\n\n      // eslint-disable-next-line arrow-body-style\n      deferred = deferred.then(() => {\n        return this._pdfDocument\n          .getPage(i + 1)\n          .then(pdfPage => pdfPage.getTextContent(textOptions))\n          .then(\n            textContent => {\n              const strBuf = [];\n\n              for (const textItem of textContent.items) {\n                strBuf.push(textItem.str);\n                if (textItem.hasEOL) {\n                  strBuf.push(\"\\n\");\n                }\n              }\n\n              // Store the normalized page content (text items) as one string.\n              [\n                this._pageContents[i],\n                this._pageDiffs[i],\n                this._hasDiacritics[i],\n              ] = normalize(strBuf.join(\"\"));\n              resolve();\n            },\n            reason => {\n              console.error(\n                `Unable to get text content for page ${i + 1}`,\n                reason\n              );\n              // Page error -- assuming no text content.\n              this._pageContents[i] = \"\";\n              this._pageDiffs[i] = null;\n              this._hasDiacritics[i] = false;\n              resolve();\n            }\n          );\n      });\n    }\n  }\n\n  #updatePage(index) {\n    if (this._scrollMatches && this._selected.pageIdx === index) {\n      // If the page is selected, scroll the page into view, which triggers\n      // rendering the page, which adds the text layer. Once the text layer\n      // is built, it will attempt to scroll the selected match into view.\n      this._linkService.page = index + 1;\n    }\n\n    this._eventBus.dispatch(\"updatetextlayermatches\", {\n      source: this,\n      pageIndex: index,\n    });\n  }\n\n  #updateAllPages() {\n    this._eventBus.dispatch(\"updatetextlayermatches\", {\n      source: this,\n      pageIndex: -1,\n    });\n  }\n\n  #nextMatch() {\n    const previous = this.#state.findPrevious;\n    const currentPageIndex = this._linkService.page - 1;\n    const numPages = this._linkService.pagesCount;\n\n    this._highlightMatches = true;\n\n    if (this._dirtyMatch) {\n      // Need to recalculate the matches, reset everything.\n      this._dirtyMatch = false;\n      this._selected.pageIdx = this._selected.matchIdx = -1;\n      this._offset.pageIdx = currentPageIndex;\n      this._offset.matchIdx = null;\n      this._offset.wrapped = false;\n      this._resumePageIdx = null;\n      this._pageMatches.length = 0;\n      this._pageMatchesLength.length = 0;\n      this.#visitedPagesCount = 0;\n      this._matchesCountTotal = 0;\n\n      this.#updateAllPages(); // Wipe out any previously highlighted matches.\n\n      for (let i = 0; i < numPages; i++) {\n        // Start finding the matches as soon as the text is extracted.\n        if (this._pendingFindMatches.has(i)) {\n          continue;\n        }\n        this._pendingFindMatches.add(i);\n        this._extractTextPromises[i].then(() => {\n          this._pendingFindMatches.delete(i);\n          this.#calculateMatch(i);\n        });\n      }\n    }\n\n    // If there's no query there's no point in searching.\n    const query = this.#query;\n    if (query.length === 0) {\n      this.#updateUIState(FindState.FOUND);\n      return;\n    }\n    // If we're waiting on a page, we return since we can't do anything else.\n    if (this._resumePageIdx) {\n      return;\n    }\n\n    const offset = this._offset;\n    // Keep track of how many pages we should maximally iterate through.\n    this._pagesToSearch = numPages;\n    // If there's already a `matchIdx` that means we are iterating through a\n    // page's matches.\n    if (offset.matchIdx !== null) {\n      const numPageMatches = this._pageMatches[offset.pageIdx].length;\n      if (\n        (!previous && offset.matchIdx + 1 < numPageMatches) ||\n        (previous && offset.matchIdx > 0)\n      ) {\n        // The simple case; we just have advance the matchIdx to select\n        // the next match on the page.\n        offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;\n        this.#updateMatch(/* found = */ true);\n        return;\n      }\n      // We went beyond the current page's matches, so we advance to\n      // the next page.\n      this.#advanceOffsetPage(previous);\n    }\n    // Start searching through the page.\n    this.#nextPageMatch();\n  }\n\n  #matchesReady(matches) {\n    const offset = this._offset;\n    const numMatches = matches.length;\n    const previous = this.#state.findPrevious;\n\n    if (numMatches) {\n      // There were matches for the page, so initialize `matchIdx`.\n      offset.matchIdx = previous ? numMatches - 1 : 0;\n      this.#updateMatch(/* found = */ true);\n      return true;\n    }\n    // No matches, so attempt to search the next page.\n    this.#advanceOffsetPage(previous);\n    if (offset.wrapped) {\n      offset.matchIdx = null;\n      if (this._pagesToSearch < 0) {\n        // No point in wrapping again, there were no matches.\n        this.#updateMatch(/* found = */ false);\n        // While matches were not found, searching for a page\n        // with matches should nevertheless halt.\n        return true;\n      }\n    }\n    // Matches were not found (and searching is not done).\n    return false;\n  }\n\n  #nextPageMatch() {\n    if (this._resumePageIdx !== null) {\n      console.error(\"There can only be one pending page.\");\n    }\n\n    let matches = null;\n    do {\n      const pageIdx = this._offset.pageIdx;\n      matches = this._pageMatches[pageIdx];\n      if (!matches) {\n        // The matches don't exist yet for processing by `_matchesReady`,\n        // so set a resume point for when they do exist.\n        this._resumePageIdx = pageIdx;\n        break;\n      }\n    } while (!this.#matchesReady(matches));\n  }\n\n  #advanceOffsetPage(previous) {\n    const offset = this._offset;\n    const numPages = this._linkService.pagesCount;\n    offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;\n    offset.matchIdx = null;\n\n    this._pagesToSearch--;\n\n    if (offset.pageIdx >= numPages || offset.pageIdx < 0) {\n      offset.pageIdx = previous ? numPages - 1 : 0;\n      offset.wrapped = true;\n    }\n  }\n\n  #updateMatch(found = false) {\n    let state = FindState.NOT_FOUND;\n    const wrapped = this._offset.wrapped;\n    this._offset.wrapped = false;\n\n    if (found) {\n      const previousPage = this._selected.pageIdx;\n      this._selected.pageIdx = this._offset.pageIdx;\n      this._selected.matchIdx = this._offset.matchIdx;\n      state = wrapped ? FindState.WRAPPED : FindState.FOUND;\n\n      // Update the currently selected page to wipe out any selected matches.\n      if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {\n        this.#updatePage(previousPage);\n      }\n    }\n\n    this.#updateUIState(state, this.#state.findPrevious);\n    if (this._selected.pageIdx !== -1) {\n      // Ensure that the match will be scrolled into view.\n      this._scrollMatches = true;\n\n      this.#updatePage(this._selected.pageIdx);\n    }\n  }\n\n  #onFindBarClose(evt) {\n    const pdfDocument = this._pdfDocument;\n    // Since searching is asynchronous, ensure that the removal of highlighted\n    // matches (from the UI) is async too such that the 'updatetextlayermatches'\n    // events will always be dispatched in the expected order.\n    this._firstPageCapability.promise.then(() => {\n      // Only update the UI if the document is open, and is the current one.\n      if (\n        !this._pdfDocument ||\n        (pdfDocument && this._pdfDocument !== pdfDocument)\n      ) {\n        return;\n      }\n      // Ensure that a pending, not yet started, search operation is aborted.\n      if (this._findTimeout) {\n        clearTimeout(this._findTimeout);\n        this._findTimeout = null;\n      }\n      // Abort any long running searches, to avoid a match being scrolled into\n      // view *after* the findbar has been closed. In this case `this._offset`\n      // will most likely differ from `this._selected`, hence we also ensure\n      // that any new search operation will always start with a clean slate.\n      if (this._resumePageIdx) {\n        this._resumePageIdx = null;\n        this._dirtyMatch = true;\n      }\n      // Avoid the UI being in a pending state when the findbar is re-opened.\n      this.#updateUIState(FindState.FOUND);\n\n      this._highlightMatches = false;\n      this.#updateAllPages(); // Wipe out any previously highlighted matches.\n    });\n  }\n\n  #requestMatchesCount() {\n    const { pageIdx, matchIdx } = this._selected;\n    let current = 0,\n      total = this._matchesCountTotal;\n    if (matchIdx !== -1) {\n      for (let i = 0; i < pageIdx; i++) {\n        current += this._pageMatches[i]?.length || 0;\n      }\n      current += matchIdx + 1;\n    }\n    // When searching starts, this method may be called before the `pageMatches`\n    // have been counted (in `_calculateMatch`). Ensure that the UI won't show\n    // temporarily broken state when the active find result doesn't make sense.\n    if (current < 1 || current > total) {\n      current = total = 0;\n    }\n    return { current, total };\n  }\n\n  #updateUIResultsCount() {\n    this._eventBus.dispatch(\"updatefindmatchescount\", {\n      source: this,\n      matchesCount: this.#requestMatchesCount(),\n    });\n  }\n\n  #updateUIState(state, previous = false) {\n    if (\n      !this.#updateMatchesCountOnProgress &&\n      (this.#visitedPagesCount !== this._linkService.pagesCount ||\n        state === FindState.PENDING)\n    ) {\n      // When this.#updateMatchesCountOnProgress is false we only send an update\n      // when everything is ready.\n      return;\n    }\n\n    this._eventBus.dispatch(\"updatefindcontrolstate\", {\n      source: this,\n      state,\n      previous,\n      matchesCount: this.#requestMatchesCount(),\n      rawQuery: this.#state?.query ?? null,\n    });\n  }\n}\n\nexport { FindState, PDFFindController };\n","/* Copyright 2017 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/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { isValidRotation, parseQueryString } from \"./ui_utils.js\";\nimport { waitOnEventOrTimeout } from \"./event_utils.js\";\n\n// Heuristic value used when force-resetting `this._blockHashChange`.\nconst HASH_CHANGE_TIMEOUT = 1000; // milliseconds\n// Heuristic value used when adding the current position to the browser history.\nconst POSITION_UPDATED_THRESHOLD = 50;\n// Heuristic value used when adding a temporary position to the browser history.\nconst UPDATE_VIEWAREA_TIMEOUT = 1000; // milliseconds\n\n/**\n * @typedef {Object} PDFHistoryOptions\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {EventBus} eventBus - The application event bus.\n */\n\n/**\n * @typedef {Object} InitializeParameters\n * @property {string} fingerprint - The PDF document's unique fingerprint.\n * @property {boolean} [resetHistory] - Reset the browsing history.\n * @property {boolean} [updateUrl] - Attempt to update the document URL, with\n *   the current hash, when pushing/replacing browser history entries.\n */\n\n/**\n * @typedef {Object} PushParameters\n * @property {string} [namedDest] - The named destination. If absent, a\n *   stringified version of `explicitDest` is used.\n * @property {Array} explicitDest - The explicit destination array.\n * @property {number} pageNumber - The page to which the destination points.\n */\n\nfunction getCurrentHash() {\n  return document.location.hash;\n}\n\nclass PDFHistory {\n  #eventAbortController = null;\n\n  /**\n   * @param {PDFHistoryOptions} options\n   */\n  constructor({ linkService, eventBus }) {\n    this.linkService = linkService;\n    this.eventBus = eventBus;\n\n    this._initialized = false;\n    this._fingerprint = \"\";\n    this.reset();\n\n    // Ensure that we don't miss a \"pagesinit\" event,\n    // by registering the listener immediately.\n    this.eventBus._on(\"pagesinit\", () => {\n      this._isPagesLoaded = false;\n\n      this.eventBus._on(\n        \"pagesloaded\",\n        evt => {\n          this._isPagesLoaded = !!evt.pagesCount;\n        },\n        { once: true }\n      );\n    });\n  }\n\n  /**\n   * Initialize the history for the PDF document, using either the current\n   * browser history entry or the document hash, whichever is present.\n   * @param {InitializeParameters} params\n   */\n  initialize({ fingerprint, resetHistory = false, updateUrl = false }) {\n    if (!fingerprint || typeof fingerprint !== \"string\") {\n      console.error(\n        'PDFHistory.initialize: The \"fingerprint\" must be a non-empty string.'\n      );\n      return;\n    }\n    // Ensure that any old state is always reset upon initialization.\n    if (this._initialized) {\n      this.reset();\n    }\n    const reInitialized =\n      this._fingerprint !== \"\" && this._fingerprint !== fingerprint;\n    this._fingerprint = fingerprint;\n    this._updateUrl = updateUrl === true;\n\n    this._initialized = true;\n    this.#bindEvents();\n    const state = window.history.state;\n\n    this._popStateInProgress = false;\n    this._blockHashChange = 0;\n    this._currentHash = getCurrentHash();\n    this._numPositionUpdates = 0;\n\n    this._uid = this._maxUid = 0;\n    this._destination = null;\n    this._position = null;\n\n    if (!this.#isValidState(state, /* checkReload = */ true) || resetHistory) {\n      const { hash, page, rotation } = this.#parseCurrentHash(\n        /* checkNameddest = */ true\n      );\n\n      if (!hash || reInitialized || resetHistory) {\n        // Ensure that the browser history is reset on PDF document load.\n        this.#pushOrReplaceState(null, /* forceReplace = */ true);\n        return;\n      }\n      // Ensure that the browser history is initialized correctly when\n      // the document hash is present on PDF document load.\n      this.#pushOrReplaceState(\n        { hash, page, rotation },\n        /* forceReplace = */ true\n      );\n      return;\n    }\n\n    // The browser history contains a valid entry, ensure that the history is\n    // initialized correctly on PDF document load.\n    const destination = state.destination;\n    this.#updateInternalState(\n      destination,\n      state.uid,\n      /* removeTemporary = */ true\n    );\n\n    if (destination.rotation !== undefined) {\n      this._initialRotation = destination.rotation;\n    }\n    if (destination.dest) {\n      this._initialBookmark = JSON.stringify(destination.dest);\n\n      // If the history is updated, e.g. through the user changing the hash,\n      // before the initial destination has become visible, then we do *not*\n      // want to potentially add `this._position` to the browser history.\n      this._destination.page = null;\n    } else if (destination.hash) {\n      this._initialBookmark = destination.hash;\n    } else if (destination.page) {\n      // Fallback case; shouldn't be necessary, but better safe than sorry.\n      this._initialBookmark = `page=${destination.page}`;\n    }\n  }\n\n  /**\n   * Reset the current `PDFHistory` instance, and consequently prevent any\n   * further updates and/or navigation of the browser history.\n   */\n  reset() {\n    if (this._initialized) {\n      this.#pageHide(); // Simulate a 'pagehide' event when resetting.\n\n      this._initialized = false;\n      this.#unbindEvents();\n    }\n    if (this._updateViewareaTimeout) {\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n    this._initialBookmark = null;\n    this._initialRotation = null;\n  }\n\n  /**\n   * Push an internal destination to the browser history.\n   * @param {PushParameters}\n   */\n  push({ namedDest = null, explicitDest, pageNumber }) {\n    if (!this._initialized) {\n      return;\n    }\n    if (namedDest && typeof namedDest !== \"string\") {\n      console.error(\n        \"PDFHistory.push: \" +\n          `\"${namedDest}\" is not a valid namedDest parameter.`\n      );\n      return;\n    } else if (!Array.isArray(explicitDest)) {\n      console.error(\n        \"PDFHistory.push: \" +\n          `\"${explicitDest}\" is not a valid explicitDest parameter.`\n      );\n      return;\n    } else if (!this.#isValidPage(pageNumber)) {\n      // Allow an unset `pageNumber` if and only if the history is still empty;\n      // please refer to the `this._destination.page = null;` comment above.\n      if (pageNumber !== null || this._destination) {\n        console.error(\n          \"PDFHistory.push: \" +\n            `\"${pageNumber}\" is not a valid pageNumber parameter.`\n        );\n        return;\n      }\n    }\n\n    const hash = namedDest || JSON.stringify(explicitDest);\n    if (!hash) {\n      // The hash *should* never be undefined, but if that were to occur,\n      // avoid any possible issues by not updating the browser history.\n      return;\n    }\n\n    let forceReplace = false;\n    if (\n      this._destination &&\n      (isDestHashesEqual(this._destination.hash, hash) ||\n        isDestArraysEqual(this._destination.dest, explicitDest))\n    ) {\n      // When the new destination is identical to `this._destination`, and\n      // its `page` is undefined, replace the current browser history entry.\n      // NOTE: This can only occur if `this._destination` was set either:\n      //  - through the document hash being specified on load.\n      //  - through the user changing the hash of the document.\n      if (this._destination.page) {\n        return;\n      }\n      forceReplace = true;\n    }\n    if (this._popStateInProgress && !forceReplace) {\n      return;\n    }\n\n    this.#pushOrReplaceState(\n      {\n        dest: explicitDest,\n        hash,\n        page: pageNumber,\n        rotation: this.linkService.rotation,\n      },\n      forceReplace\n    );\n\n    if (!this._popStateInProgress) {\n      // Prevent the browser history from updating while the new destination is\n      // being scrolled into view, to avoid potentially inconsistent state.\n      this._popStateInProgress = true;\n      // We defer the resetting of `this._popStateInProgress`, to account for\n      // e.g. zooming occurring when the new destination is being navigated to.\n      Promise.resolve().then(() => {\n        this._popStateInProgress = false;\n      });\n    }\n  }\n\n  /**\n   * Push a page to the browser history; generally the `push` method should be\n   * used instead.\n   * @param {number} pageNumber\n   */\n  pushPage(pageNumber) {\n    if (!this._initialized) {\n      return;\n    }\n    if (!this.#isValidPage(pageNumber)) {\n      console.error(\n        `PDFHistory.pushPage: \"${pageNumber}\" is not a valid page number.`\n      );\n      return;\n    }\n\n    if (this._destination?.page === pageNumber) {\n      // When the new page is identical to the one in `this._destination`, we\n      // don't want to add a potential duplicate entry in the browser history.\n      return;\n    }\n    if (this._popStateInProgress) {\n      return;\n    }\n\n    this.#pushOrReplaceState({\n      // Simulate an internal destination, for `this.#tryPushCurrentPosition`:\n      dest: null,\n      hash: `page=${pageNumber}`,\n      page: pageNumber,\n      rotation: this.linkService.rotation,\n    });\n\n    if (!this._popStateInProgress) {\n      // Prevent the browser history from updating while the new page is\n      // being scrolled into view, to avoid potentially inconsistent state.\n      this._popStateInProgress = true;\n      // We defer the resetting of `this._popStateInProgress`, to account for\n      // e.g. zooming occurring when the new page is being navigated to.\n      Promise.resolve().then(() => {\n        this._popStateInProgress = false;\n      });\n    }\n  }\n\n  /**\n   * Push the current position to the browser history.\n   */\n  pushCurrentPosition() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    this.#tryPushCurrentPosition();\n  }\n\n  /**\n   * Go back one step in the browser history.\n   * NOTE: Avoids navigating away from the document, useful for \"named actions\".\n   */\n  back() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    const state = window.history.state;\n    if (this.#isValidState(state) && state.uid > 0) {\n      window.history.back();\n    }\n  }\n\n  /**\n   * Go forward one step in the browser history.\n   * NOTE: Avoids navigating away from the document, useful for \"named actions\".\n   */\n  forward() {\n    if (!this._initialized || this._popStateInProgress) {\n      return;\n    }\n    const state = window.history.state;\n    if (this.#isValidState(state) && state.uid < this._maxUid) {\n      window.history.forward();\n    }\n  }\n\n  /**\n   * @type {boolean} Indicating if the user is currently moving through the\n   *   browser history, useful e.g. for skipping the next 'hashchange' event.\n   */\n  get popStateInProgress() {\n    return (\n      this._initialized &&\n      (this._popStateInProgress || this._blockHashChange > 0)\n    );\n  }\n\n  get initialBookmark() {\n    return this._initialized ? this._initialBookmark : null;\n  }\n\n  get initialRotation() {\n    return this._initialized ? this._initialRotation : null;\n  }\n\n  #pushOrReplaceState(destination, forceReplace = false) {\n    const shouldReplace = forceReplace || !this._destination;\n    const newState = {\n      fingerprint: this._fingerprint,\n      uid: shouldReplace ? this._uid : this._uid + 1,\n      destination,\n    };\n\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"CHROME\") &&\n      window.history.state?.chromecomState\n    ) {\n      // history.state.chromecomState is managed by chromecom.js.\n      newState.chromecomState = window.history.state.chromecomState;\n    }\n    this.#updateInternalState(destination, newState.uid);\n\n    let newUrl;\n    if (this._updateUrl && destination?.hash) {\n      const baseUrl = document.location.href.split(\"#\", 1)[0];\n      // Prevent errors in Firefox.\n      if (!baseUrl.startsWith(\"file://\")) {\n        newUrl = `${baseUrl}#${destination.hash}`;\n      }\n    }\n    if (shouldReplace) {\n      window.history.replaceState(newState, \"\", newUrl);\n    } else {\n      window.history.pushState(newState, \"\", newUrl);\n    }\n\n    if (\n      typeof PDFJSDev !== \"undefined\" &&\n      PDFJSDev.test(\"CHROME\") &&\n      top === window\n    ) {\n      // eslint-disable-next-line no-undef\n      chrome.runtime.sendMessage(\"showPageAction\");\n    }\n  }\n\n  #tryPushCurrentPosition(temporary = false) {\n    if (!this._position) {\n      return;\n    }\n    let position = this._position;\n    if (temporary) {\n      position = Object.assign(Object.create(null), this._position);\n      position.temporary = true;\n    }\n\n    if (!this._destination) {\n      this.#pushOrReplaceState(position);\n      return;\n    }\n    if (this._destination.temporary) {\n      // Always replace a previous *temporary* position.\n      this.#pushOrReplaceState(position, /* forceReplace = */ true);\n      return;\n    }\n    if (this._destination.hash === position.hash) {\n      return; // The current document position has not changed.\n    }\n    if (\n      !this._destination.page &&\n      (POSITION_UPDATED_THRESHOLD <= 0 ||\n        this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)\n    ) {\n      // `this._destination` was set through the user changing the hash of\n      // the document. Do not add `this._position` to the browser history,\n      // to avoid \"flooding\" it with lots of (nearly) identical entries,\n      // since we cannot ensure that the document position has changed.\n      return;\n    }\n\n    let forceReplace = false;\n    if (\n      this._destination.page >= position.first &&\n      this._destination.page <= position.page\n    ) {\n      // When the `page` of `this._destination` is still visible, do not\n      // update the browsing history when `this._destination` either:\n      //  - contains an internal destination, since in this case we\n      //    cannot ensure that the document position has actually changed.\n      //  - was set through the user changing the hash of the document.\n      if (this._destination.dest !== undefined || !this._destination.first) {\n        return;\n      }\n      // To avoid \"flooding\" the browser history, replace the current entry.\n      forceReplace = true;\n    }\n    this.#pushOrReplaceState(position, forceReplace);\n  }\n\n  #isValidPage(val) {\n    return (\n      Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount\n    );\n  }\n\n  #isValidState(state, checkReload = false) {\n    if (!state) {\n      return false;\n    }\n    if (state.fingerprint !== this._fingerprint) {\n      if (checkReload) {\n        // Potentially accept the history entry, even if the fingerprints don't\n        // match, when the viewer was reloaded (see issue 6847).\n        if (\n          typeof state.fingerprint !== \"string\" ||\n          state.fingerprint.length !== this._fingerprint.length\n        ) {\n          return false;\n        }\n        const [perfEntry] = performance.getEntriesByType(\"navigation\");\n        if (perfEntry?.type !== \"reload\") {\n          return false;\n        }\n      } else {\n        // This should only occur in viewers with support for opening more than\n        // one PDF document, e.g. the GENERIC viewer.\n        return false;\n      }\n    }\n    if (!Number.isInteger(state.uid) || state.uid < 0) {\n      return false;\n    }\n    if (state.destination === null || typeof state.destination !== \"object\") {\n      return false;\n    }\n    return true;\n  }\n\n  #updateInternalState(destination, uid, removeTemporary = false) {\n    if (this._updateViewareaTimeout) {\n      // When updating `this._destination`, make sure that we always wait for\n      // the next 'updateviewarea' event before (potentially) attempting to\n      // push the current position to the browser history.\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n    if (removeTemporary && destination?.temporary) {\n      // When the `destination` comes from the browser history,\n      // we no longer treat it as a *temporary* position.\n      delete destination.temporary;\n    }\n    this._destination = destination;\n    this._uid = uid;\n    this._maxUid = Math.max(this._maxUid, uid);\n    // This should always be reset when `this._destination` is updated.\n    this._numPositionUpdates = 0;\n  }\n\n  #parseCurrentHash(checkNameddest = false) {\n    const hash = unescape(getCurrentHash()).substring(1);\n    const params = parseQueryString(hash);\n\n    const nameddest = params.get(\"nameddest\") || \"\";\n    let page = params.get(\"page\") | 0;\n\n    if (!this.#isValidPage(page) || (checkNameddest && nameddest.length > 0)) {\n      page = null;\n    }\n    return { hash, page, rotation: this.linkService.rotation };\n  }\n\n  #updateViewarea({ location }) {\n    if (this._updateViewareaTimeout) {\n      clearTimeout(this._updateViewareaTimeout);\n      this._updateViewareaTimeout = null;\n    }\n\n    this._position = {\n      hash: location.pdfOpenParams.substring(1),\n      page: this.linkService.page,\n      first: location.pageNumber,\n      rotation: location.rotation,\n    };\n\n    if (this._popStateInProgress) {\n      return;\n    }\n\n    if (\n      POSITION_UPDATED_THRESHOLD > 0 &&\n      this._isPagesLoaded &&\n      this._destination &&\n      !this._destination.page\n    ) {\n      // If the current destination was set through the user changing the hash\n      // of the document, we will usually not try to push the current position\n      // to the browser history; see `this.#tryPushCurrentPosition()`.\n      //\n      // To prevent `this.#tryPushCurrentPosition()` from effectively being\n      // reduced to a no-op in this case, we will assume that the position\n      // *did* in fact change if the 'updateviewarea' event was dispatched\n      // more than `POSITION_UPDATED_THRESHOLD` times.\n      this._numPositionUpdates++;\n    }\n\n    if (UPDATE_VIEWAREA_TIMEOUT > 0) {\n      // When closing the browser, a 'pagehide' event will be dispatched which\n      // *should* allow us to push the current position to the browser history.\n      // In practice, it seems that the event is arriving too late in order for\n      // the session history to be successfully updated.\n      // (For additional details, please refer to the discussion in\n      //  https://bugzilla.mozilla.org/show_bug.cgi?id=1153393.)\n      //\n      // To workaround this we attempt to *temporarily* add the current position\n      // to the browser history only when the viewer is *idle*,\n      // i.e. when scrolling and/or zooming does not occur.\n      //\n      // PLEASE NOTE: It's absolutely imperative that the browser history is\n      // *not* updated too often, since that would render the viewer more or\n      // less unusable. Hence the use of a timeout to delay the update until\n      // the viewer has been idle for `UPDATE_VIEWAREA_TIMEOUT` milliseconds.\n      this._updateViewareaTimeout = setTimeout(() => {\n        if (!this._popStateInProgress) {\n          this.#tryPushCurrentPosition(/* temporary = */ true);\n        }\n        this._updateViewareaTimeout = null;\n      }, UPDATE_VIEWAREA_TIMEOUT);\n    }\n  }\n\n  #popState({ state }) {\n    const newHash = getCurrentHash(),\n      hashChanged = this._currentHash !== newHash;\n    this._currentHash = newHash;\n\n    if (\n      (typeof PDFJSDev !== \"undefined\" &&\n        PDFJSDev.test(\"CHROME\") &&\n        state?.chromecomState &&\n        !this.#isValidState(state)) ||\n      !state\n    ) {\n      // This case corresponds to the user changing the hash of the document.\n      this._uid++;\n\n      const { hash, page, rotation } = this.#parseCurrentHash();\n      this.#pushOrReplaceState(\n        { hash, page, rotation },\n        /* forceReplace = */ true\n      );\n      return;\n    }\n    if (!this.#isValidState(state)) {\n      // This should only occur in viewers with support for opening more than\n      // one PDF document, e.g. the GENERIC viewer.\n      return;\n    }\n\n    // Prevent the browser history from updating until the new destination,\n    // as stored in the browser history, has been scrolled into view.\n    this._popStateInProgress = true;\n\n    if (hashChanged) {\n      // When the hash changed, implying that the 'popstate' event will be\n      // followed by a 'hashchange' event, then we do *not* want to update the\n      // browser history when handling the 'hashchange' event (in web/app.js)\n      // since that would *overwrite* the new destination navigated to below.\n      //\n      // To avoid accidentally disabling all future user-initiated hash changes,\n      // if there's e.g. another 'hashchange' listener that stops the event\n      // propagation, we make sure to always force-reset `this._blockHashChange`\n      // after `HASH_CHANGE_TIMEOUT` milliseconds have passed.\n      this._blockHashChange++;\n      waitOnEventOrTimeout({\n        target: window,\n        name: \"hashchange\",\n        delay: HASH_CHANGE_TIMEOUT,\n      }).then(() => {\n        this._blockHashChange--;\n      });\n    }\n\n    // Navigate to the new destination.\n    const destination = state.destination;\n    this.#updateInternalState(\n      destination,\n      state.uid,\n      /* removeTemporary = */ true\n    );\n\n    if (isValidRotation(destination.rotation)) {\n      this.linkService.rotation = destination.rotation;\n    }\n    if (destination.dest) {\n      this.linkService.goToDestination(destination.dest);\n    } else if (destination.hash) {\n      this.linkService.setHash(destination.hash);\n    } else if (destination.page) {\n      // Fallback case; shouldn't be necessary, but better safe than sorry.\n      this.linkService.page = destination.page;\n    }\n\n    // Since `PDFLinkService.goToDestination` is asynchronous, we thus defer the\n    // resetting of `this._popStateInProgress` slightly.\n    Promise.resolve().then(() => {\n      this._popStateInProgress = false;\n    });\n  }\n\n  #pageHide() {\n    // Attempt to push the `this._position` into the browser history when\n    // navigating away from the document. This is *only* done if the history\n    // is empty/temporary, since otherwise an existing browser history entry\n    // will end up being overwritten (given that new entries cannot be pushed\n    // into the browser history when the 'unload' event has already fired).\n    if (!this._destination || this._destination.temporary) {\n      this.#tryPushCurrentPosition();\n    }\n  }\n\n  #bindEvents() {\n    if (this.#eventAbortController) {\n      return; // The event listeners were already added.\n    }\n    this.#eventAbortController = new AbortController();\n    const { signal } = this.#eventAbortController;\n\n    this.eventBus._on(\"updateviewarea\", this.#updateViewarea.bind(this), {\n      signal,\n    });\n    window.addEventListener(\"popstate\", this.#popState.bind(this), { signal });\n    window.addEventListener(\"pagehide\", this.#pageHide.bind(this), { signal });\n  }\n\n  #unbindEvents() {\n    this.#eventAbortController?.abort();\n    this.#eventAbortController = null;\n  }\n}\n\nfunction isDestHashesEqual(destHash, pushHash) {\n  if (typeof destHash !== \"string\" || typeof pushHash !== \"string\") {\n    return false;\n  }\n  if (destHash === pushHash) {\n    return true;\n  }\n  const nameddest = parseQueryString(destHash).get(\"nameddest\");\n  if (nameddest === pushHash) {\n    return true;\n  }\n  return false;\n}\n\nfunction isDestArraysEqual(firstDest, secondDest) {\n  function isEntryEqual(first, second) {\n    if (typeof first !== typeof second) {\n      return false;\n    }\n    if (Array.isArray(first) || Array.isArray(second)) {\n      return false;\n    }\n    if (first !== null && typeof first === \"object\" && second !== null) {\n      if (Object.keys(first).length !== Object.keys(second).length) {\n        return false;\n      }\n      for (const key in first) {\n        if (!isEntryEqual(first[key], second[key])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    return first === second || (Number.isNaN(first) && Number.isNaN(second));\n  }\n\n  if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {\n    return false;\n  }\n  if (firstDest.length !== secondDest.length) {\n    return false;\n  }\n  for (let i = 0, ii = firstDest.length; i < ii; i++) {\n    if (!isEntryEqual(firstDest[i], secondDest[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport { isDestArraysEqual, isDestHashesEqual, PDFHistory };\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\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { parseQueryString } from \"./ui_utils.js\";\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\n\nconst LinkTarget = {\n  NONE: 0, // Default value.\n  SELF: 1,\n  BLANK: 2,\n  PARENT: 3,\n  TOP: 4,\n};\n\n/**\n * @typedef {Object} PDFLinkServiceOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} [externalLinkTarget] - Specifies the `target` attribute\n *   for external links. Must use one of the values from {LinkTarget}.\n *   Defaults to using no target.\n * @property {string} [externalLinkRel] - Specifies the `rel` attribute for\n *   external links. Defaults to stripping the referrer.\n * @property {boolean} [ignoreDestinationZoom] - Ignores the zoom argument,\n *   thus preserving the current zoom level in the viewer, when navigating\n *   to internal destinations. The default value is `false`.\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n * @implements {IPDFLinkService}\n */\nclass PDFLinkService {\n  externalLinkEnabled = true;\n\n  /**\n   * @param {PDFLinkServiceOptions} options\n   */\n  constructor({\n    eventBus,\n    externalLinkTarget = null,\n    externalLinkRel = null,\n    ignoreDestinationZoom = false,\n  } = {}) {\n    this.eventBus = eventBus;\n    this.externalLinkTarget = externalLinkTarget;\n    this.externalLinkRel = externalLinkRel;\n    this._ignoreDestinationZoom = ignoreDestinationZoom;\n\n    this.baseUrl = null;\n    this.pdfDocument = null;\n    this.pdfViewer = null;\n    this.pdfHistory = null;\n  }\n\n  setDocument(pdfDocument, baseUrl = null) {\n    this.baseUrl = baseUrl;\n    this.pdfDocument = pdfDocument;\n  }\n\n  setViewer(pdfViewer) {\n    this.pdfViewer = pdfViewer;\n  }\n\n  setHistory(pdfHistory) {\n    this.pdfHistory = pdfHistory;\n  }\n\n  /**\n   * @type {number}\n   */\n  get pagesCount() {\n    return this.pdfDocument ? this.pdfDocument.numPages : 0;\n  }\n\n  /**\n   * @type {number}\n   */\n  get page() {\n    return this.pdfDocument ? this.pdfViewer.currentPageNumber : 1;\n  }\n\n  /**\n   * @param {number} value\n   */\n  set page(value) {\n    if (this.pdfDocument) {\n      this.pdfViewer.currentPageNumber = value;\n    }\n  }\n\n  /**\n   * @type {number}\n   */\n  get rotation() {\n    return this.pdfDocument ? this.pdfViewer.pagesRotation : 0;\n  }\n\n  /**\n   * @param {number} value\n   */\n  set rotation(value) {\n    if (this.pdfDocument) {\n      this.pdfViewer.pagesRotation = value;\n    }\n  }\n\n  /**\n   * This method will, when available, also update the browser history.\n   *\n   * @param {string|Array} dest - The named, or explicit, PDF destination.\n   */\n  async goToDestination(dest) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let namedDest, explicitDest, pageNumber;\n    if (typeof dest === \"string\") {\n      namedDest = dest;\n      explicitDest = await this.pdfDocument.getDestination(dest);\n    } else {\n      namedDest = null;\n      explicitDest = await dest;\n    }\n    if (!Array.isArray(explicitDest)) {\n      console.error(\n        `goToDestination: \"${explicitDest}\" is not a valid destination array, for dest=\"${dest}\".`\n      );\n      return;\n    }\n    // Dest array looks like that: <page-ref> </XYZ|/FitXXX> <args..>\n    const [destRef] = explicitDest;\n\n    if (destRef && typeof destRef === \"object\") {\n      pageNumber = this.pdfDocument.cachedPageNumber(destRef);\n\n      if (!pageNumber) {\n        // Fetch the page reference if it's not yet available. This could\n        // only occur during loading, before all pages have been resolved.\n        try {\n          pageNumber = (await this.pdfDocument.getPageIndex(destRef)) + 1;\n        } catch {\n          console.error(\n            `goToDestination: \"${destRef}\" is not a valid page reference, for dest=\"${dest}\".`\n          );\n          return;\n        }\n      }\n    } else if (Number.isInteger(destRef)) {\n      pageNumber = destRef + 1;\n    }\n    if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n      console.error(\n        `goToDestination: \"${pageNumber}\" is not a valid page number, for dest=\"${dest}\".`\n      );\n      return;\n    }\n\n    if (this.pdfHistory) {\n      // Update the browser history before scrolling the new destination into\n      // view, to be able to accurately capture the current document position.\n      this.pdfHistory.pushCurrentPosition();\n      this.pdfHistory.push({ namedDest, explicitDest, pageNumber });\n    }\n\n    this.pdfViewer.scrollPageIntoView({\n      pageNumber,\n      destArray: explicitDest,\n      ignoreDestinationZoom: this._ignoreDestinationZoom,\n    });\n  }\n\n  /**\n   * This method will, when available, also update the browser history.\n   *\n   * @param {number|string} val - The page number, or page label.\n   */\n  goToPage(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const pageNumber =\n      (typeof val === \"string\" && this.pdfViewer.pageLabelToPageNumber(val)) ||\n      val | 0;\n    if (\n      !(\n        Number.isInteger(pageNumber) &&\n        pageNumber > 0 &&\n        pageNumber <= this.pagesCount\n      )\n    ) {\n      console.error(`PDFLinkService.goToPage: \"${val}\" is not a valid page.`);\n      return;\n    }\n\n    if (this.pdfHistory) {\n      // Update the browser history before scrolling the new page into view,\n      // to be able to accurately capture the current document position.\n      this.pdfHistory.pushCurrentPosition();\n      this.pdfHistory.pushPage(pageNumber);\n    }\n\n    this.pdfViewer.scrollPageIntoView({ pageNumber });\n  }\n\n  /**\n   * Adds various attributes (href, title, target, rel) to hyperlinks.\n   * @param {HTMLAnchorElement} link\n   * @param {string} url\n   * @param {boolean} [newWindow]\n   */\n  addLinkAttributes(link, url, newWindow = false) {\n    if (!url || typeof url !== \"string\") {\n      throw new Error('A valid \"url\" parameter must provided.');\n    }\n    const target = newWindow ? LinkTarget.BLANK : this.externalLinkTarget,\n      rel = this.externalLinkRel;\n\n    if (this.externalLinkEnabled) {\n      link.href = link.title = url;\n    } else {\n      link.href = \"\";\n      link.title = `Disabled: ${url}`;\n      link.onclick = () => false;\n    }\n\n    let targetStr = \"\"; // LinkTarget.NONE\n    switch (target) {\n      case LinkTarget.NONE:\n        break;\n      case LinkTarget.SELF:\n        targetStr = \"_self\";\n        break;\n      case LinkTarget.BLANK:\n        targetStr = \"_blank\";\n        break;\n      case LinkTarget.PARENT:\n        targetStr = \"_parent\";\n        break;\n      case LinkTarget.TOP:\n        targetStr = \"_top\";\n        break;\n    }\n    link.target = targetStr;\n\n    link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n  }\n\n  /**\n   * @param {string|Array} dest - The PDF destination object.\n   * @returns {string} The hyperlink to the PDF object.\n   */\n  getDestinationHash(dest) {\n    if (typeof dest === \"string\") {\n      if (dest.length > 0) {\n        return this.getAnchorUrl(\"#\" + escape(dest));\n      }\n    } else if (Array.isArray(dest)) {\n      const str = JSON.stringify(dest);\n      if (str.length > 0) {\n        return this.getAnchorUrl(\"#\" + escape(str));\n      }\n    }\n    return this.getAnchorUrl(\"\");\n  }\n\n  /**\n   * Prefix the full url on anchor links to make sure that links are resolved\n   * relative to the current URL instead of the one defined in <base href>.\n   * @param {string} anchor - The anchor hash, including the #.\n   * @returns {string} The hyperlink to the PDF object.\n   */\n  getAnchorUrl(anchor) {\n    return this.baseUrl ? this.baseUrl + anchor : anchor;\n  }\n\n  /**\n   * @param {string} hash\n   */\n  setHash(hash) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let pageNumber, dest;\n    if (hash.includes(\"=\")) {\n      const params = parseQueryString(hash);\n      if (params.has(\"search\")) {\n        const query = params.get(\"search\").replaceAll('\"', \"\"),\n          phrase = params.get(\"phrase\") === \"true\";\n\n        this.eventBus.dispatch(\"findfromurlhash\", {\n          source: this,\n          query: phrase ? query : query.match(/\\S+/g),\n        });\n      }\n      // borrowing syntax from \"Parameters for Opening PDF Files\"\n      if (params.has(\"page\")) {\n        pageNumber = params.get(\"page\") | 0 || 1;\n      }\n      if (params.has(\"zoom\")) {\n        // Build the destination array.\n        const zoomArgs = params.get(\"zoom\").split(\",\"); // scale,left,top\n        const zoomArg = zoomArgs[0];\n        const zoomArgNumber = parseFloat(zoomArg);\n\n        if (!zoomArg.includes(\"Fit\")) {\n          // If the zoomArg is a number, it has to get divided by 100. If it's\n          // a string, it should stay as it is.\n          dest = [\n            null,\n            { name: \"XYZ\" },\n            zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n            zoomArgs.length > 2 ? zoomArgs[2] | 0 : null,\n            zoomArgNumber ? zoomArgNumber / 100 : zoomArg,\n          ];\n        } else if (zoomArg === \"Fit\" || zoomArg === \"FitB\") {\n          dest = [null, { name: zoomArg }];\n        } else if (\n          zoomArg === \"FitH\" ||\n          zoomArg === \"FitBH\" ||\n          zoomArg === \"FitV\" ||\n          zoomArg === \"FitBV\"\n        ) {\n          dest = [\n            null,\n            { name: zoomArg },\n            zoomArgs.length > 1 ? zoomArgs[1] | 0 : null,\n          ];\n        } else if (zoomArg === \"FitR\") {\n          if (zoomArgs.length !== 5) {\n            console.error(\n              'PDFLinkService.setHash: Not enough parameters for \"FitR\".'\n            );\n          } else {\n            dest = [\n              null,\n              { name: zoomArg },\n              zoomArgs[1] | 0,\n              zoomArgs[2] | 0,\n              zoomArgs[3] | 0,\n              zoomArgs[4] | 0,\n            ];\n          }\n        } else {\n          console.error(\n            `PDFLinkService.setHash: \"${zoomArg}\" is not a valid zoom value.`\n          );\n        }\n      }\n      if (dest) {\n        this.pdfViewer.scrollPageIntoView({\n          pageNumber: pageNumber || this.page,\n          destArray: dest,\n          allowNegativeOffset: true,\n        });\n      } else if (pageNumber) {\n        this.page = pageNumber; // simple page\n      }\n      if (params.has(\"pagemode\")) {\n        this.eventBus.dispatch(\"pagemode\", {\n          source: this,\n          mode: params.get(\"pagemode\"),\n        });\n      }\n      // Ensure that this parameter is *always* handled last, in order to\n      // guarantee that it won't be overridden (e.g. by the \"page\" parameter).\n      if (params.has(\"nameddest\")) {\n        this.goToDestination(params.get(\"nameddest\"));\n      }\n\n      if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n        return;\n      }\n      // Support opening of PDF attachments in the Firefox PDF Viewer,\n      // which uses a couple of non-standard hash parameters; refer to\n      // `DownloadManager.openOrDownloadData` in the firefoxcom.js file.\n      if (!params.has(\"filename\") || !params.has(\"filedest\")) {\n        return;\n      }\n      hash = params.get(\"filedest\");\n    }\n\n    // Named (or explicit) destination.\n    dest = unescape(hash);\n    try {\n      dest = JSON.parse(dest);\n\n      if (!Array.isArray(dest)) {\n        // Avoid incorrectly rejecting a valid named destination, such as\n        // e.g. \"4.3\" or \"true\", because `JSON.parse` converted its type.\n        dest = dest.toString();\n      }\n    } catch {}\n\n    if (typeof dest === \"string\" || PDFLinkService.#isValidExplicitDest(dest)) {\n      this.goToDestination(dest);\n      return;\n    }\n    console.error(\n      `PDFLinkService.setHash: \"${unescape(hash)}\" is not a valid destination.`\n    );\n  }\n\n  /**\n   * @param {string} action\n   */\n  executeNamedAction(action) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    // See PDF reference, table 8.45 - Named action\n    switch (action) {\n      case \"GoBack\":\n        this.pdfHistory?.back();\n        break;\n\n      case \"GoForward\":\n        this.pdfHistory?.forward();\n        break;\n\n      case \"NextPage\":\n        this.pdfViewer.nextPage();\n        break;\n\n      case \"PrevPage\":\n        this.pdfViewer.previousPage();\n        break;\n\n      case \"LastPage\":\n        this.page = this.pagesCount;\n        break;\n\n      case \"FirstPage\":\n        this.page = 1;\n        break;\n\n      default:\n        break; // No action according to spec\n    }\n\n    this.eventBus.dispatch(\"namedaction\", {\n      source: this,\n      action,\n    });\n  }\n\n  /**\n   * @param {Object} action\n   */\n  async executeSetOCGState(action) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const pdfDocument = this.pdfDocument,\n      optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise;\n\n    if (pdfDocument !== this.pdfDocument) {\n      return; // The document was closed while the optional content resolved.\n    }\n    optionalContentConfig.setOCGState(action);\n\n    this.pdfViewer.optionalContentConfigPromise = Promise.resolve(\n      optionalContentConfig\n    );\n  }\n\n  static #isValidExplicitDest(dest) {\n    if (!Array.isArray(dest) || dest.length < 2) {\n      return false;\n    }\n    const [page, zoom, ...args] = dest;\n    if (\n      !(\n        typeof page === \"object\" &&\n        Number.isInteger(page?.num) &&\n        Number.isInteger(page?.gen)\n      ) &&\n      !Number.isInteger(page)\n    ) {\n      return false;\n    }\n    if (!(typeof zoom === \"object\" && typeof zoom?.name === \"string\")) {\n      return false;\n    }\n    let allowNull = true;\n    switch (zoom.name) {\n      case \"XYZ\":\n        if (args.length !== 3) {\n          return false;\n        }\n        break;\n      case \"Fit\":\n      case \"FitB\":\n        return args.length === 0;\n      case \"FitH\":\n      case \"FitBH\":\n      case \"FitV\":\n      case \"FitBV\":\n        if (args.length !== 1) {\n          return false;\n        }\n        break;\n      case \"FitR\":\n        if (args.length !== 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        return false;\n      }\n    }\n    return true;\n  }\n}\n\n/**\n * @implements {IPDFLinkService}\n */\nclass SimpleLinkService extends PDFLinkService {\n  setDocument(pdfDocument, baseUrl = null) {}\n}\n\nexport { LinkTarget, PDFLinkService, SimpleLinkService };\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\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/optional_content_config\").OptionalContentConfig} OptionalContentConfig */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n/** @typedef {import(\"./interfaces\").IRenderableView} IRenderableView */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_rendering_queue\").PDFRenderingQueue} PDFRenderingQueue */\n\nimport {\n  AbortException,\n  AnnotationMode,\n  PixelsPerInch,\n  RenderingCancelledException,\n  setLayerDimensions,\n  shadow,\n} from \"pdfjs-lib\";\nimport {\n  approximateFraction,\n  DEFAULT_SCALE,\n  OutputScale,\n  RenderingStates,\n  roundToDivide,\n  TextLayerMode,\n} from \"./ui_utils.js\";\nimport { AnnotationEditorLayerBuilder } from \"./annotation_editor_layer_builder.js\";\nimport { AnnotationLayerBuilder } from \"./annotation_layer_builder.js\";\nimport { AppOptions } from \"./app_options.js\";\nimport { DrawLayerBuilder } from \"./draw_layer_builder.js\";\nimport { GenericL10n } from \"web-null_l10n\";\nimport { SimpleLinkService } from \"./pdf_link_service.js\";\nimport { StructTreeLayerBuilder } from \"./struct_tree_layer_builder.js\";\nimport { TextAccessibilityManager } from \"./text_accessibility.js\";\nimport { TextHighlighter } from \"./text_highlighter.js\";\nimport { TextLayerBuilder } from \"./text_layer_builder.js\";\nimport { XfaLayerBuilder } from \"./xfa_layer_builder.js\";\n\n/**\n * @typedef {Object} PDFPageViewOptions\n * @property {HTMLDivElement} [container] - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} id - The page unique ID (normally its number).\n * @property {number} [scale] - The page scale display.\n * @property {PageViewport} defaultViewport - The page viewport.\n * @property {Promise<OptionalContentConfig>} [optionalContentConfigPromise] -\n *   A promise that is resolved with an {@link OptionalContentConfig} instance.\n *   The default value is `null`.\n * @property {PDFRenderingQueue} [renderingQueue] - The rendering queue object.\n * @property {number} [textLayerMode] - Controls if the text layer used for\n *   selection and searching is created. The constants from {TextLayerMode}\n *   should be used. The default value is `TextLayerMode.ENABLE`.\n * @property {number} [annotationMode] - Controls if the annotation layer is\n *   created, and if interactive form elements or `AnnotationStorage`-data are\n *   being rendered. The constants from {@link AnnotationMode} should be used;\n *   see also {@link RenderParameters} and {@link GetOperatorListParameters}.\n *   The default value is `AnnotationMode.ENABLE_FORMS`.\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n *   for annotation icons. Include trailing slash.\n * @property {number} [maxCanvasPixels] - The maximum supported canvas size in\n *   total pixels, i.e. width * height. Use `-1` for no limit, or `0` for\n *   CSS-only zooming. The default value is 4096 * 8192 (32 mega-pixels).\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n *   with user defined ones in order to improve readability in high contrast\n *   mode.\n * @property {IL10n} [l10n] - Localization service.\n * @property {Object} [layerProperties] - The object that is used to lookup\n *   the necessary layer-properties.\n */\n\nconst DEFAULT_LAYER_PROPERTIES =\n  typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"COMPONENTS\")\n    ? null\n    : {\n        annotationEditorUIManager: null,\n        annotationStorage: null,\n        downloadManager: null,\n        enableScripting: false,\n        fieldObjectsPromise: null,\n        findController: null,\n        hasJSActionsPromise: null,\n        get linkService() {\n          return new SimpleLinkService();\n        },\n      };\n\nconst LAYERS_ORDER = new Map([\n  [\"canvasWrapper\", 0],\n  [\"textLayer\", 1],\n  [\"annotationLayer\", 2],\n  [\"annotationEditorLayer\", 3],\n  [\"xfaLayer\", 3],\n]);\n\n/**\n * @implements {IRenderableView}\n */\nclass PDFPageView {\n  #annotationMode = AnnotationMode.ENABLE_FORMS;\n\n  #hasRestrictedScaling = false;\n\n  #layerProperties = null;\n\n  #loadingId = null;\n\n  #previousRotation = null;\n\n  #renderError = null;\n\n  #renderingState = RenderingStates.INITIAL;\n\n  #textLayerMode = TextLayerMode.ENABLE;\n\n  #useThumbnailCanvas = {\n    directDrawing: true,\n    initialOptionalContent: true,\n    regularAnnotations: true,\n  };\n\n  #viewportMap = new WeakMap();\n\n  #layers = [null, null, null, null];\n\n  /**\n   * @param {PDFPageViewOptions} options\n   */\n  constructor(options) {\n    const container = options.container;\n    const defaultViewport = options.defaultViewport;\n\n    this.id = options.id;\n    this.renderingId = \"page\" + this.id;\n    this.#layerProperties = options.layerProperties || DEFAULT_LAYER_PROPERTIES;\n\n    this.pdfPage = null;\n    this.pageLabel = null;\n    this.rotation = 0;\n    this.scale = options.scale || DEFAULT_SCALE;\n    this.viewport = defaultViewport;\n    this.pdfPageRotate = defaultViewport.rotation;\n    this._optionalContentConfigPromise =\n      options.optionalContentConfigPromise || null;\n    this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE;\n    this.#annotationMode =\n      options.annotationMode ?? AnnotationMode.ENABLE_FORMS;\n    this.imageResourcesPath = options.imageResourcesPath || \"\";\n    this.maxCanvasPixels =\n      options.maxCanvasPixels ?? AppOptions.get(\"maxCanvasPixels\");\n    this.pageColors = options.pageColors || null;\n\n    this.eventBus = options.eventBus;\n    this.renderingQueue = options.renderingQueue;\n    this.l10n = options.l10n;\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      this.l10n ||= new GenericL10n();\n    }\n\n    this.renderTask = null;\n    this.resume = null;\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      this._isStandalone = !this.renderingQueue?.hasViewer();\n      this._container = container;\n    }\n\n    this._annotationCanvasMap = null;\n\n    this.annotationLayer = null;\n    this.annotationEditorLayer = null;\n    this.textLayer = null;\n    this.zoomLayer = null;\n    this.xfaLayer = null;\n    this.structTreeLayer = null;\n    this.drawLayer = null;\n\n    const div = document.createElement(\"div\");\n    div.className = \"page\";\n    div.setAttribute(\"data-page-number\", this.id);\n    div.setAttribute(\"role\", \"region\");\n    div.setAttribute(\"data-l10n-id\", \"pdfjs-page-landmark\");\n    div.setAttribute(\"data-l10n-args\", JSON.stringify({ page: this.id }));\n    this.div = div;\n\n    this.#setDimensions();\n    container?.append(div);\n\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n      this._isStandalone\n    ) {\n      // Ensure that the various layers always get the correct initial size,\n      // see issue 15795.\n      container?.style.setProperty(\n        \"--scale-factor\",\n        this.scale * PixelsPerInch.PDF_TO_CSS_UNITS\n      );\n\n      const { optionalContentConfigPromise } = options;\n      if (optionalContentConfigPromise) {\n        // Ensure that the thumbnails always display the *initial* document\n        // state, for documents with optional content.\n        optionalContentConfigPromise.then(optionalContentConfig => {\n          if (\n            optionalContentConfigPromise !== this._optionalContentConfigPromise\n          ) {\n            return;\n          }\n          this.#useThumbnailCanvas.initialOptionalContent =\n            optionalContentConfig.hasInitialVisibility;\n        });\n      }\n\n      // Ensure that Fluent is connected in e.g. the COMPONENTS build.\n      if (!options.l10n) {\n        this.l10n.translate(this.div);\n      }\n    }\n  }\n\n  #addLayer(div, name) {\n    const pos = LAYERS_ORDER.get(name);\n    const oldDiv = this.#layers[pos];\n    this.#layers[pos] = div;\n    if (oldDiv) {\n      oldDiv.replaceWith(div);\n      return;\n    }\n    for (let i = pos - 1; i >= 0; i--) {\n      const layer = this.#layers[i];\n      if (layer) {\n        layer.after(div);\n        return;\n      }\n    }\n    this.div.prepend(div);\n  }\n\n  get renderingState() {\n    return this.#renderingState;\n  }\n\n  set renderingState(state) {\n    if (state === this.#renderingState) {\n      return;\n    }\n    this.#renderingState = state;\n\n    if (this.#loadingId) {\n      clearTimeout(this.#loadingId);\n      this.#loadingId = null;\n    }\n\n    switch (state) {\n      case RenderingStates.PAUSED:\n        this.div.classList.remove(\"loading\");\n        break;\n      case RenderingStates.RUNNING:\n        this.div.classList.add(\"loadingIcon\");\n        this.#loadingId = setTimeout(() => {\n          // Adding the loading class is slightly postponed in order to not have\n          // it with loadingIcon.\n          // If we don't do that the visibility of the background is changed but\n          // the transition isn't triggered.\n          this.div.classList.add(\"loading\");\n          this.#loadingId = null;\n        }, 0);\n        break;\n      case RenderingStates.INITIAL:\n      case RenderingStates.FINISHED:\n        this.div.classList.remove(\"loadingIcon\", \"loading\");\n        break;\n    }\n  }\n\n  #setDimensions() {\n    const { viewport } = this;\n    if (this.pdfPage) {\n      if (this.#previousRotation === viewport.rotation) {\n        return;\n      }\n      this.#previousRotation = viewport.rotation;\n    }\n\n    setLayerDimensions(\n      this.div,\n      viewport,\n      /* mustFlip = */ true,\n      /* mustRotate = */ false\n    );\n  }\n\n  setPdfPage(pdfPage) {\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n      this._isStandalone &&\n      (this.pageColors?.foreground === \"CanvasText\" ||\n        this.pageColors?.background === \"Canvas\")\n    ) {\n      this._container?.style.setProperty(\n        \"--hcm-highlight-filter\",\n        pdfPage.filterFactory.addHighlightHCMFilter(\n          \"highlight\",\n          \"CanvasText\",\n          \"Canvas\",\n          \"HighlightText\",\n          \"Highlight\"\n        )\n      );\n      this._container?.style.setProperty(\n        \"--hcm-highlight-selected-filter\",\n        pdfPage.filterFactory.addHighlightHCMFilter(\n          \"highlight_selected\",\n          \"CanvasText\",\n          \"Canvas\",\n          \"HighlightText\",\n          \"Highlight\"\n        )\n      );\n    }\n    this.pdfPage = pdfPage;\n    this.pdfPageRotate = pdfPage.rotate;\n\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = pdfPage.getViewport({\n      scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: totalRotation,\n    });\n    this.#setDimensions();\n    this.reset();\n  }\n\n  destroy() {\n    this.reset();\n    this.pdfPage?.cleanup();\n  }\n\n  get _textHighlighter() {\n    return shadow(\n      this,\n      \"_textHighlighter\",\n      new TextHighlighter({\n        pageIndex: this.id - 1,\n        eventBus: this.eventBus,\n        findController: this.#layerProperties.findController,\n      })\n    );\n  }\n\n  async #renderAnnotationLayer() {\n    let error = null;\n    try {\n      await this.annotationLayer.render(this.viewport, \"display\");\n    } catch (ex) {\n      console.error(`#renderAnnotationLayer: \"${ex}\".`);\n      error = ex;\n    } finally {\n      this.eventBus.dispatch(\"annotationlayerrendered\", {\n        source: this,\n        pageNumber: this.id,\n        error,\n      });\n    }\n  }\n\n  async #renderAnnotationEditorLayer() {\n    let error = null;\n    try {\n      await this.annotationEditorLayer.render(this.viewport, \"display\");\n    } catch (ex) {\n      console.error(`#renderAnnotationEditorLayer: \"${ex}\".`);\n      error = ex;\n    } finally {\n      this.eventBus.dispatch(\"annotationeditorlayerrendered\", {\n        source: this,\n        pageNumber: this.id,\n        error,\n      });\n    }\n  }\n\n  async #renderDrawLayer() {\n    try {\n      await this.drawLayer.render(\"display\");\n    } catch (ex) {\n      console.error(`#renderDrawLayer: \"${ex}\".`);\n    }\n  }\n\n  async #renderXfaLayer() {\n    let error = null;\n    try {\n      const result = await this.xfaLayer.render(this.viewport, \"display\");\n      if (result?.textDivs && this._textHighlighter) {\n        // Given that the following method fetches the text asynchronously we\n        // can invoke it *before* appending the xfaLayer to the DOM (below),\n        // since a pending search-highlight/scroll operation thus won't run\n        // until after the xfaLayer is available in the viewer.\n        this.#buildXfaTextContentItems(result.textDivs);\n      }\n    } catch (ex) {\n      console.error(`#renderXfaLayer: \"${ex}\".`);\n      error = ex;\n    } finally {\n      if (this.xfaLayer?.div) {\n        // Pause translation when inserting the xfaLayer in the DOM.\n        this.l10n.pause();\n        this.#addLayer(this.xfaLayer.div, \"xfaLayer\");\n        this.l10n.resume();\n      }\n\n      this.eventBus.dispatch(\"xfalayerrendered\", {\n        source: this,\n        pageNumber: this.id,\n        error,\n      });\n    }\n  }\n\n  async #renderTextLayer() {\n    const { pdfPage, textLayer, viewport } = this;\n    if (!textLayer) {\n      return;\n    }\n\n    let error = null;\n    try {\n      if (!textLayer.renderingDone) {\n        const readableStream = pdfPage.streamTextContent({\n          includeMarkedContent: true,\n          disableNormalization: true,\n        });\n        textLayer.setTextContentSource(readableStream);\n      }\n      await textLayer.render(viewport);\n    } catch (ex) {\n      if (ex instanceof AbortException) {\n        return;\n      }\n      console.error(`#renderTextLayer: \"${ex}\".`);\n      error = ex;\n    }\n\n    this.eventBus.dispatch(\"textlayerrendered\", {\n      source: this,\n      pageNumber: this.id,\n      numTextDivs: textLayer.numTextDivs,\n      error,\n    });\n\n    this.#renderStructTreeLayer();\n  }\n\n  /**\n   * The structure tree is currently only supported when the text layer is\n   * enabled and a canvas is used for rendering.\n   *\n   * The structure tree must be generated after the text layer for the\n   * aria-owns to work.\n   */\n  async #renderStructTreeLayer() {\n    if (!this.textLayer) {\n      return;\n    }\n    this.structTreeLayer ||= new StructTreeLayerBuilder();\n\n    const tree = await (!this.structTreeLayer.renderingDone\n      ? this.pdfPage.getStructTree()\n      : null);\n    const treeDom = this.structTreeLayer?.render(tree);\n    if (treeDom) {\n      // Pause translation when inserting the structTree in the DOM.\n      this.l10n.pause();\n      this.canvas?.append(treeDom);\n      this.l10n.resume();\n    }\n    this.structTreeLayer?.show();\n  }\n\n  async #buildXfaTextContentItems(textDivs) {\n    const text = await this.pdfPage.getTextContent();\n    const items = [];\n    for (const item of text.items) {\n      items.push(item.str);\n    }\n    this._textHighlighter.setTextMapping(textDivs, items);\n    this._textHighlighter.enable();\n  }\n\n  /**\n   * @private\n   */\n  _resetZoomLayer(removeFromDOM = false) {\n    if (!this.zoomLayer) {\n      return;\n    }\n    const zoomLayerCanvas = this.zoomLayer.firstChild;\n    this.#viewportMap.delete(zoomLayerCanvas);\n    // Zeroing the width and height causes Firefox to release graphics\n    // resources immediately, which can greatly reduce memory consumption.\n    zoomLayerCanvas.width = 0;\n    zoomLayerCanvas.height = 0;\n\n    if (removeFromDOM) {\n      // Note: `ChildNode.remove` doesn't throw if the parent node is undefined.\n      this.zoomLayer.remove();\n    }\n    this.zoomLayer = null;\n  }\n\n  reset({\n    keepZoomLayer = false,\n    keepAnnotationLayer = false,\n    keepAnnotationEditorLayer = false,\n    keepXfaLayer = false,\n    keepTextLayer = false,\n  } = {}) {\n    this.cancelRendering({\n      keepAnnotationLayer,\n      keepAnnotationEditorLayer,\n      keepXfaLayer,\n      keepTextLayer,\n    });\n    this.renderingState = RenderingStates.INITIAL;\n\n    const div = this.div;\n\n    const childNodes = div.childNodes,\n      zoomLayerNode = (keepZoomLayer && this.zoomLayer) || null,\n      annotationLayerNode =\n        (keepAnnotationLayer && this.annotationLayer?.div) || null,\n      annotationEditorLayerNode =\n        (keepAnnotationEditorLayer && this.annotationEditorLayer?.div) || null,\n      xfaLayerNode = (keepXfaLayer && this.xfaLayer?.div) || null,\n      textLayerNode = (keepTextLayer && this.textLayer?.div) || null;\n    for (let i = childNodes.length - 1; i >= 0; i--) {\n      const node = childNodes[i];\n      switch (node) {\n        case zoomLayerNode:\n        case annotationLayerNode:\n        case annotationEditorLayerNode:\n        case xfaLayerNode:\n        case textLayerNode:\n          continue;\n      }\n      node.remove();\n      const layerIndex = this.#layers.indexOf(node);\n      if (layerIndex >= 0) {\n        this.#layers[layerIndex] = null;\n      }\n    }\n    div.removeAttribute(\"data-loaded\");\n\n    if (annotationLayerNode) {\n      // Hide the annotation layer until all elements are resized\n      // so they are not displayed on the already resized page.\n      this.annotationLayer.hide();\n    }\n    if (annotationEditorLayerNode) {\n      this.annotationEditorLayer.hide();\n    }\n    if (xfaLayerNode) {\n      // Hide the XFA layer until all elements are resized\n      // so they are not displayed on the already resized page.\n      this.xfaLayer.hide();\n    }\n    if (textLayerNode) {\n      this.textLayer.hide();\n    }\n    this.structTreeLayer?.hide();\n\n    if (!zoomLayerNode) {\n      if (this.canvas) {\n        this.#viewportMap.delete(this.canvas);\n        // Zeroing the width and height causes Firefox to release graphics\n        // resources immediately, which can greatly reduce memory consumption.\n        this.canvas.width = 0;\n        this.canvas.height = 0;\n        delete this.canvas;\n      }\n      this._resetZoomLayer();\n    }\n  }\n\n  /**\n   * @typedef {Object} PDFPageViewUpdateParameters\n   * @property {number} [scale] The new scale, if specified.\n   * @property {number} [rotation] The new rotation, if specified.\n   * @property {Promise<OptionalContentConfig>} [optionalContentConfigPromise]\n   *   A promise that is resolved with an {@link OptionalContentConfig}\n   *   instance. The default value is `null`.\n   * @property {number} [drawingDelay]\n   */\n\n  /**\n   * Update e.g. the scale and/or rotation of the page.\n   * @param {PDFPageViewUpdateParameters} params\n   */\n  update({\n    scale = 0,\n    rotation = null,\n    optionalContentConfigPromise = null,\n    drawingDelay = -1,\n  }) {\n    this.scale = scale || this.scale;\n    if (typeof rotation === \"number\") {\n      this.rotation = rotation; // The rotation may be zero.\n    }\n    if (optionalContentConfigPromise instanceof Promise) {\n      this._optionalContentConfigPromise = optionalContentConfigPromise;\n\n      // Ensure that the thumbnails always display the *initial* document state,\n      // for documents with optional content.\n      optionalContentConfigPromise.then(optionalContentConfig => {\n        if (\n          optionalContentConfigPromise !== this._optionalContentConfigPromise\n        ) {\n          return;\n        }\n        this.#useThumbnailCanvas.initialOptionalContent =\n          optionalContentConfig.hasInitialVisibility;\n      });\n    }\n    this.#useThumbnailCanvas.directDrawing = true;\n\n    const totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n    this.viewport = this.viewport.clone({\n      scale: this.scale * PixelsPerInch.PDF_TO_CSS_UNITS,\n      rotation: totalRotation,\n    });\n    this.#setDimensions();\n\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n      this._isStandalone\n    ) {\n      this._container?.style.setProperty(\"--scale-factor\", this.viewport.scale);\n    }\n\n    if (this.canvas) {\n      let onlyCssZoom = false;\n      if (this.#hasRestrictedScaling) {\n        if (\n          (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n          this.maxCanvasPixels === 0\n        ) {\n          onlyCssZoom = true;\n        } else if (this.maxCanvasPixels > 0) {\n          const { width, height } = this.viewport;\n          const { sx, sy } = this.outputScale;\n          onlyCssZoom =\n            ((Math.floor(width) * sx) | 0) * ((Math.floor(height) * sy) | 0) >\n            this.maxCanvasPixels;\n        }\n      }\n      const postponeDrawing =\n        !onlyCssZoom && drawingDelay >= 0 && drawingDelay < 1000;\n\n      if (postponeDrawing || onlyCssZoom) {\n        if (\n          postponeDrawing &&\n          this.renderingState !== RenderingStates.FINISHED\n        ) {\n          this.cancelRendering({\n            keepZoomLayer: true,\n            keepAnnotationLayer: true,\n            keepAnnotationEditorLayer: true,\n            keepXfaLayer: true,\n            keepTextLayer: true,\n            cancelExtraDelay: drawingDelay,\n          });\n          // It isn't really finished, but once we have finished\n          // to postpone, we'll call this.reset(...) which will set\n          // the rendering state to INITIAL, hence the next call to\n          // PDFViewer.update() will trigger a redraw (if it's mandatory).\n          this.renderingState = RenderingStates.FINISHED;\n          // Ensure that the thumbnails won't become partially (or fully) blank,\n          // if the sidebar is opened before the actual rendering is done.\n          this.#useThumbnailCanvas.directDrawing = false;\n        }\n\n        this.cssTransform({\n          target: this.canvas,\n          redrawAnnotationLayer: true,\n          redrawAnnotationEditorLayer: true,\n          redrawXfaLayer: true,\n          redrawTextLayer: !postponeDrawing,\n          hideTextLayer: postponeDrawing,\n        });\n\n        if (postponeDrawing) {\n          // The \"pagerendered\"-event will be dispatched once the actual\n          // rendering is done, hence don't dispatch it here as well.\n          return;\n        }\n        this.eventBus.dispatch(\"pagerendered\", {\n          source: this,\n          pageNumber: this.id,\n          cssTransform: true,\n          timestamp: performance.now(),\n          error: this.#renderError,\n        });\n        return;\n      }\n      if (!this.zoomLayer && !this.canvas.hidden) {\n        this.zoomLayer = this.canvas.parentNode;\n        this.zoomLayer.style.position = \"absolute\";\n      }\n    }\n    if (this.zoomLayer) {\n      this.cssTransform({ target: this.zoomLayer.firstChild });\n    }\n    this.reset({\n      keepZoomLayer: true,\n      keepAnnotationLayer: true,\n      keepAnnotationEditorLayer: true,\n      keepXfaLayer: true,\n      keepTextLayer: true,\n    });\n  }\n\n  /**\n   * PLEASE NOTE: Most likely you want to use the `this.reset()` method,\n   *              rather than calling this one directly.\n   */\n  cancelRendering({\n    keepAnnotationLayer = false,\n    keepAnnotationEditorLayer = false,\n    keepXfaLayer = false,\n    keepTextLayer = false,\n    cancelExtraDelay = 0,\n  } = {}) {\n    if (this.renderTask) {\n      this.renderTask.cancel(cancelExtraDelay);\n      this.renderTask = null;\n    }\n    this.resume = null;\n\n    if (this.textLayer && (!keepTextLayer || !this.textLayer.div)) {\n      this.textLayer.cancel();\n      this.textLayer = null;\n    }\n    if (this.structTreeLayer && !this.textLayer) {\n      this.structTreeLayer = null;\n    }\n    if (\n      this.annotationLayer &&\n      (!keepAnnotationLayer || !this.annotationLayer.div)\n    ) {\n      this.annotationLayer.cancel();\n      this.annotationLayer = null;\n      this._annotationCanvasMap = null;\n    }\n    if (\n      this.annotationEditorLayer &&\n      (!keepAnnotationEditorLayer || !this.annotationEditorLayer.div)\n    ) {\n      if (this.drawLayer) {\n        this.drawLayer.cancel();\n        this.drawLayer = null;\n      }\n      this.annotationEditorLayer.cancel();\n      this.annotationEditorLayer = null;\n    }\n    if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) {\n      this.xfaLayer.cancel();\n      this.xfaLayer = null;\n      this._textHighlighter?.disable();\n    }\n  }\n\n  cssTransform({\n    target,\n    redrawAnnotationLayer = false,\n    redrawAnnotationEditorLayer = false,\n    redrawXfaLayer = false,\n    redrawTextLayer = false,\n    hideTextLayer = false,\n  }) {\n    // Scale target (canvas), its wrapper and page container.\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"TESTING\")) &&\n      !(target instanceof HTMLCanvasElement)\n    ) {\n      throw new Error(\"Expected `target` to be a canvas.\");\n    }\n    if (!target.hasAttribute(\"zooming\")) {\n      target.setAttribute(\"zooming\", true);\n      const { style } = target;\n      style.width = style.height = \"\";\n    }\n\n    const originalViewport = this.#viewportMap.get(target);\n    if (this.viewport !== originalViewport) {\n      // The canvas may have been originally rotated; rotate relative to that.\n      const relativeRotation =\n        this.viewport.rotation - originalViewport.rotation;\n      const absRotation = Math.abs(relativeRotation);\n      let scaleX = 1,\n        scaleY = 1;\n      if (absRotation === 90 || absRotation === 270) {\n        const { width, height } = this.viewport;\n        // Scale x and y because of the rotation.\n        scaleX = height / width;\n        scaleY = width / height;\n      }\n      target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`;\n    }\n\n    if (redrawAnnotationLayer && this.annotationLayer) {\n      this.#renderAnnotationLayer();\n    }\n    if (redrawAnnotationEditorLayer && this.annotationEditorLayer) {\n      if (this.drawLayer) {\n        this.#renderDrawLayer();\n      }\n      this.#renderAnnotationEditorLayer();\n    }\n    if (redrawXfaLayer && this.xfaLayer) {\n      this.#renderXfaLayer();\n    }\n\n    if (this.textLayer) {\n      if (hideTextLayer) {\n        this.textLayer.hide();\n        this.structTreeLayer?.hide();\n      } else if (redrawTextLayer) {\n        this.#renderTextLayer();\n      }\n    }\n  }\n\n  get width() {\n    return this.viewport.width;\n  }\n\n  get height() {\n    return this.viewport.height;\n  }\n\n  getPagePoint(x, y) {\n    return this.viewport.convertToPdfPoint(x, y);\n  }\n\n  async #finishRenderTask(renderTask, error = null) {\n    // The renderTask may have been replaced by a new one, so only remove\n    // the reference to the renderTask if it matches the one that is\n    // triggering this callback.\n    if (renderTask === this.renderTask) {\n      this.renderTask = null;\n    }\n\n    if (error instanceof RenderingCancelledException) {\n      this.#renderError = null;\n      return;\n    }\n    this.#renderError = error;\n\n    this.renderingState = RenderingStates.FINISHED;\n    this._resetZoomLayer(/* removeFromDOM = */ true);\n\n    // Ensure that the thumbnails won't become partially (or fully) blank,\n    // for documents that contain interactive form elements.\n    this.#useThumbnailCanvas.regularAnnotations = !renderTask.separateAnnots;\n\n    this.eventBus.dispatch(\"pagerendered\", {\n      source: this,\n      pageNumber: this.id,\n      cssTransform: false,\n      timestamp: performance.now(),\n      error: this.#renderError,\n    });\n\n    if (error) {\n      throw error;\n    }\n  }\n\n  async draw() {\n    if (this.renderingState !== RenderingStates.INITIAL) {\n      console.error(\"Must be in new state before drawing\");\n      this.reset(); // Ensure that we reset all state to prevent issues.\n    }\n    const { div, l10n, pageColors, pdfPage, viewport } = this;\n\n    if (!pdfPage) {\n      this.renderingState = RenderingStates.FINISHED;\n      throw new Error(\"pdfPage is not loaded\");\n    }\n\n    this.renderingState = RenderingStates.RUNNING;\n\n    // Wrap the canvas so that if it has a CSS transform for high DPI the\n    // overflow will be hidden in Firefox.\n    const canvasWrapper = document.createElement(\"div\");\n    canvasWrapper.classList.add(\"canvasWrapper\");\n    canvasWrapper.setAttribute(\"aria-hidden\", true);\n    this.#addLayer(canvasWrapper, \"canvasWrapper\");\n\n    if (\n      !this.textLayer &&\n      this.#textLayerMode !== TextLayerMode.DISABLE &&\n      !pdfPage.isPureXfa\n    ) {\n      this._accessibilityManager ||= new TextAccessibilityManager();\n\n      this.textLayer = new TextLayerBuilder({\n        highlighter: this._textHighlighter,\n        accessibilityManager: this._accessibilityManager,\n        enablePermissions:\n          this.#textLayerMode === TextLayerMode.ENABLE_PERMISSIONS,\n        onAppend: textLayerDiv => {\n          // Pause translation when inserting the textLayer in the DOM.\n          this.l10n.pause();\n          this.#addLayer(textLayerDiv, \"textLayer\");\n          this.l10n.resume();\n        },\n      });\n    }\n\n    if (\n      !this.annotationLayer &&\n      this.#annotationMode !== AnnotationMode.DISABLE\n    ) {\n      const {\n        annotationStorage,\n        annotationEditorUIManager,\n        downloadManager,\n        enableScripting,\n        fieldObjectsPromise,\n        hasJSActionsPromise,\n        linkService,\n      } = this.#layerProperties;\n\n      this._annotationCanvasMap ||= new Map();\n      this.annotationLayer = new AnnotationLayerBuilder({\n        pdfPage,\n        annotationStorage,\n        imageResourcesPath: this.imageResourcesPath,\n        renderForms: this.#annotationMode === AnnotationMode.ENABLE_FORMS,\n        linkService,\n        downloadManager,\n        enableScripting,\n        hasJSActionsPromise,\n        fieldObjectsPromise,\n        annotationCanvasMap: this._annotationCanvasMap,\n        accessibilityManager: this._accessibilityManager,\n        annotationEditorUIManager,\n        onAppend: annotationLayerDiv => {\n          this.#addLayer(annotationLayerDiv, \"annotationLayer\");\n        },\n      });\n    }\n\n    const renderContinueCallback = cont => {\n      showCanvas?.(false);\n      if (this.renderingQueue && !this.renderingQueue.isHighestPriority(this)) {\n        this.renderingState = RenderingStates.PAUSED;\n        this.resume = () => {\n          this.renderingState = RenderingStates.RUNNING;\n          cont();\n        };\n        return;\n      }\n      cont();\n    };\n\n    const { width, height } = viewport;\n    const canvas = document.createElement(\"canvas\");\n    canvas.setAttribute(\"role\", \"presentation\");\n\n    // Keep the canvas hidden until the first draw callback, or until drawing\n    // is complete when `!this.renderingQueue`, to prevent black flickering.\n    canvas.hidden = true;\n    const hasHCM = !!(pageColors?.background && pageColors?.foreground);\n\n    let showCanvas = isLastShow => {\n      // In HCM, a final filter is applied on the canvas which means that\n      // before it's applied we've normal colors. Consequently, to avoid to have\n      // a final flash we just display it once all the drawing is done.\n      if (!hasHCM || isLastShow) {\n        canvas.hidden = false;\n        showCanvas = null; // Only invoke the function once.\n      }\n    };\n    canvasWrapper.append(canvas);\n    this.canvas = canvas;\n\n    const ctx = canvas.getContext(\"2d\", { alpha: false });\n    const outputScale = (this.outputScale = new OutputScale());\n\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n      this.maxCanvasPixels === 0\n    ) {\n      const invScale = 1 / this.scale;\n      // Use a scale that makes the canvas have the originally intended size\n      // of the page.\n      outputScale.sx *= invScale;\n      outputScale.sy *= invScale;\n      this.#hasRestrictedScaling = true;\n    } else if (this.maxCanvasPixels > 0) {\n      const pixelsInViewport = width * height;\n      const maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);\n      if (outputScale.sx > maxScale || outputScale.sy > maxScale) {\n        outputScale.sx = maxScale;\n        outputScale.sy = maxScale;\n        this.#hasRestrictedScaling = true;\n      } else {\n        this.#hasRestrictedScaling = false;\n      }\n    }\n    const sfx = approximateFraction(outputScale.sx);\n    const sfy = approximateFraction(outputScale.sy);\n\n    canvas.width = roundToDivide(width * outputScale.sx, sfx[0]);\n    canvas.height = roundToDivide(height * outputScale.sy, sfy[0]);\n    const { style } = canvas;\n    style.width = roundToDivide(width, sfx[1]) + \"px\";\n    style.height = roundToDivide(height, sfy[1]) + \"px\";\n\n    // Add the viewport so it's known what it was originally drawn with.\n    this.#viewportMap.set(canvas, viewport);\n\n    // Rendering area\n    const transform = outputScale.scaled\n      ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0]\n      : null;\n    const renderContext = {\n      canvasContext: ctx,\n      transform,\n      viewport,\n      annotationMode: this.#annotationMode,\n      optionalContentConfigPromise: this._optionalContentConfigPromise,\n      annotationCanvasMap: this._annotationCanvasMap,\n      pageColors,\n    };\n    const renderTask = (this.renderTask = this.pdfPage.render(renderContext));\n    renderTask.onContinue = renderContinueCallback;\n\n    const resultPromise = renderTask.promise.then(\n      async () => {\n        showCanvas?.(true);\n        await this.#finishRenderTask(renderTask);\n\n        this.#renderTextLayer();\n\n        if (this.annotationLayer) {\n          await this.#renderAnnotationLayer();\n        }\n\n        const { annotationEditorUIManager } = this.#layerProperties;\n\n        if (!annotationEditorUIManager) {\n          return;\n        }\n\n        this.drawLayer ||= new DrawLayerBuilder({\n          pageIndex: this.id,\n        });\n        await this.#renderDrawLayer();\n        this.drawLayer.setParent(canvasWrapper);\n\n        if (!this.annotationEditorLayer) {\n          this.annotationEditorLayer = new AnnotationEditorLayerBuilder({\n            uiManager: annotationEditorUIManager,\n            pdfPage,\n            l10n,\n            accessibilityManager: this._accessibilityManager,\n            annotationLayer: this.annotationLayer?.annotationLayer,\n            textLayer: this.textLayer,\n            drawLayer: this.drawLayer.getDrawLayer(),\n            onAppend: annotationEditorLayerDiv => {\n              this.#addLayer(annotationEditorLayerDiv, \"annotationEditorLayer\");\n            },\n          });\n        }\n        this.#renderAnnotationEditorLayer();\n      },\n      error => {\n        // When zooming with a `drawingDelay` set, avoid temporarily showing\n        // a black canvas if rendering was cancelled before the `onContinue`-\n        // callback had been invoked at least once.\n        if (!(error instanceof RenderingCancelledException)) {\n          showCanvas?.(true);\n        }\n        return this.#finishRenderTask(renderTask, error);\n      }\n    );\n\n    if (pdfPage.isPureXfa) {\n      if (!this.xfaLayer) {\n        const { annotationStorage, linkService } = this.#layerProperties;\n\n        this.xfaLayer = new XfaLayerBuilder({\n          pdfPage,\n          annotationStorage,\n          linkService,\n        });\n      }\n      this.#renderXfaLayer();\n    }\n\n    div.setAttribute(\"data-loaded\", true);\n\n    this.eventBus.dispatch(\"pagerender\", {\n      source: this,\n      pageNumber: this.id,\n    });\n    return resultPromise;\n  }\n\n  /**\n   * @param {string|null} label\n   */\n  setPageLabel(label) {\n    this.pageLabel = typeof label === \"string\" ? label : null;\n\n    this.div.setAttribute(\n      \"data-l10n-args\",\n      JSON.stringify({ page: this.pageLabel ?? this.id })\n    );\n\n    if (this.pageLabel !== null) {\n      this.div.setAttribute(\"data-page-label\", this.pageLabel);\n    } else {\n      this.div.removeAttribute(\"data-page-label\");\n    }\n  }\n\n  /**\n   * For use by the `PDFThumbnailView.setImage`-method.\n   * @ignore\n   */\n  get thumbnailCanvas() {\n    const { directDrawing, initialOptionalContent, regularAnnotations } =\n      this.#useThumbnailCanvas;\n    return directDrawing && initialOptionalContent && regularAnnotations\n      ? this.canvas\n      : null;\n  }\n}\n\nexport { PDFPageView };\n","/* 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\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./interfaces.js\").IPDFPrintServiceFactory} IPDFPrintServiceFactory */\n\nimport {\n  AnnotationMode,\n  PixelsPerInch,\n  RenderingCancelledException,\n  shadow,\n} from \"pdfjs-lib\";\nimport { getXfaHtmlForPrinting } from \"./print_utils.js\";\n\nlet activeService = null;\nlet dialog = null;\nlet overlayManager = null;\nlet viewerApp = { initialized: false };\n\n// Renders the page to the canvas of the given print service, and returns\n// the suggested dimensions of the output page.\nfunction renderPage(\n  activeServiceOnEntry,\n  pdfDocument,\n  pageNumber,\n  size,\n  printResolution,\n  optionalContentConfigPromise,\n  printAnnotationStoragePromise\n) {\n  const scratchCanvas = activeService.scratchCanvas;\n\n  // The size of the canvas in pixels for printing.\n  const PRINT_UNITS = printResolution / PixelsPerInch.PDF;\n  scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);\n  scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);\n\n  const ctx = scratchCanvas.getContext(\"2d\");\n  ctx.save();\n  ctx.fillStyle = \"rgb(255, 255, 255)\";\n  ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height);\n  ctx.restore();\n\n  return Promise.all([\n    pdfDocument.getPage(pageNumber),\n    printAnnotationStoragePromise,\n  ]).then(function ([pdfPage, printAnnotationStorage]) {\n    const renderContext = {\n      canvasContext: ctx,\n      transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],\n      viewport: pdfPage.getViewport({ scale: 1, rotation: size.rotation }),\n      intent: \"print\",\n      annotationMode: AnnotationMode.ENABLE_STORAGE,\n      optionalContentConfigPromise,\n      printAnnotationStorage,\n    };\n    const renderTask = pdfPage.render(renderContext);\n\n    return renderTask.promise.catch(reason => {\n      if (!(reason instanceof RenderingCancelledException)) {\n        console.error(reason);\n      }\n      throw reason;\n    });\n  });\n}\n\nclass PDFPrintService {\n  constructor({\n    pdfDocument,\n    pagesOverview,\n    printContainer,\n    printResolution,\n    printAnnotationStoragePromise = null,\n  }) {\n    this.pdfDocument = pdfDocument;\n    this.pagesOverview = pagesOverview;\n    this.printContainer = printContainer;\n    this._printResolution = printResolution || 150;\n    this._optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({\n      intent: \"print\",\n    });\n    this._printAnnotationStoragePromise =\n      printAnnotationStoragePromise || Promise.resolve();\n    this.currentPage = -1;\n    // The temporary canvas where renderPage paints one page at a time.\n    this.scratchCanvas = document.createElement(\"canvas\");\n  }\n\n  layout() {\n    this.throwIfInactive();\n\n    const body = document.querySelector(\"body\");\n    body.setAttribute(\"data-pdfjsprinting\", true);\n\n    const { width, height } = this.pagesOverview[0];\n    const hasEqualPageSizes = this.pagesOverview.every(\n      size => size.width === width && size.height === height\n    );\n    if (!hasEqualPageSizes) {\n      console.warn(\n        \"Not all pages have the same size. The printed result may be incorrect!\"\n      );\n    }\n\n    // Insert a @page + size rule to make sure that the page size is correctly\n    // set. Note that we assume that all pages have the same size, because\n    // variable-size pages are not supported yet (e.g. in Chrome & Firefox).\n    // TODO(robwu): Use named pages when size calculation bugs get resolved\n    // (e.g. https://crbug.com/355116) AND when support for named pages is\n    // added (http://www.w3.org/TR/css3-page/#using-named-pages).\n    // In browsers where @page + size is not supported, the next stylesheet\n    // will be ignored and the user has to select the correct paper size in\n    // the UI if wanted.\n    this.pageStyleSheet = document.createElement(\"style\");\n    this.pageStyleSheet.textContent = `@page { size: ${width}pt ${height}pt;}`;\n    // IMPORTANT: Discuss this with Dhaval. if the position is fixed, the annotations and text are being moved to the right\n    // if (this.pagesOverview.length === 1) {\n    //   this.pageStyleSheet.textContent +=\n    //     \" @media print { .mainContainer,.viewerContainer,.page,.page canvas,html.x-fixed-viewport, .x-fixed-viewport > body { position: fixed !important;padding: 0;margin: 0;} }\";\n    // } else {\n      this.pageStyleSheet.textContent +=\n        \" @media print { .mainContainer,.viewerContainer,.page,.page canvas,html.x-fixed-viewport, .x-fixed-viewport > body { position: static !important;padding: 0;margin: 0;} }\";\n    // }\n    body.append(this.pageStyleSheet);\n  }\n\n  destroy() {\n    if (activeService !== this) {\n      // |activeService| cannot be replaced without calling destroy() first,\n      // so if it differs then an external consumer has a stale reference to us.\n      return;\n    }\n    this.printContainer.textContent = \"\";\n\n    const body = document.querySelector(\"body\");\n    body.removeAttribute(\"data-pdfjsprinting\");\n\n    if (this.pageStyleSheet) {\n      this.pageStyleSheet.remove();\n      this.pageStyleSheet = null;\n    }\n    this.scratchCanvas.width = this.scratchCanvas.height = 0;\n    this.scratchCanvas = null;\n    activeService = null;\n    ensureOverlay().then(function () {\n      if (overlayManager.active === dialog) {\n        overlayManager.close(dialog);\n      }\n    });\n  }\n\n  renderPages() {\n    if (this.pdfDocument.isPureXfa) {\n      getXfaHtmlForPrinting(this.printContainer, this.pdfDocument);\n      return Promise.resolve();\n    }\n\n    const pageCount = this.pagesOverview.length;\n    const renderNextPage = (resolve, reject) => {\n      this.throwIfInactive();\n      if (++this.currentPage >= pageCount) {\n        renderProgress(pageCount, pageCount);\n        resolve();\n        return;\n      }\n      const index = this.currentPage;\n      renderProgress(index, pageCount);\n      renderPage(\n        this,\n        this.pdfDocument,\n        /* pageNumber = */ index + 1,\n        this.pagesOverview[index],\n        this._printResolution,\n        this._optionalContentConfigPromise,\n        this._printAnnotationStoragePromise\n      )\n        .then(this.useRenderedPage.bind(this))\n        .then(function () {\n          renderNextPage(resolve, reject);\n        }, reject);\n    };\n    return new Promise(renderNextPage);\n  }\n\n  useRenderedPage() {\n    this.throwIfInactive();\n    const img = document.createElement(\"img\");\n    const scratchCanvas = this.scratchCanvas;\n    if (\"toBlob\" in scratchCanvas) {\n      scratchCanvas.toBlob(function (blob) {\n        img.src = URL.createObjectURL(blob);\n      });\n    } else {\n      img.src = scratchCanvas.toDataURL();\n    }\n\n    const wrapper = document.createElement(\"div\");\n    wrapper.className = \"printedPage\";\n    wrapper.append(img);\n    this.printContainer.append(wrapper);\n\n    return new Promise(function (resolve, reject) {\n      img.onload = resolve;\n      img.onerror = reject;\n    });\n  }\n\n  performPrint() {\n    this.throwIfInactive();\n    return new Promise(resolve => {\n      // Push window.print in the macrotask queue to avoid being affected by\n      // the deprecation of running print() code in a microtask, see\n      // https://github.com/mozilla/pdf.js/issues/7547.\n      setTimeout(() => {\n        if (!this.active) {\n          resolve();\n          return;\n        }\n        print.call(window);\n        // Delay promise resolution in case print() was not synchronous.\n        setTimeout(resolve, 20); // Tidy-up.\n      }, 0);\n    });\n  }\n\n  get active() {\n    return this === activeService;\n  }\n\n  throwIfInactive() {\n    if (!this.active) {\n      throw new Error(\"This print request was cancelled or completed.\");\n    }\n  }\n}\n\nconst print = window.print;\nwindow.print = function () {\n  if (activeService) {\n    console.warn(\"Ignored window.print() because of a pending print job.\");\n    return;\n  }\n  ensureOverlay().then(function () {\n    if (activeService) {\n      overlayManager.open(dialog);\n    }\n  });\n\n  try {\n    dispatchEvent(\"beforeprint\");\n  } finally {\n    if (!activeService) {\n      console.error(\"Expected print service to be initialized.\");\n      ensureOverlay().then(function () {\n        if (overlayManager.active === dialog) {\n          overlayManager.close(dialog);\n        }\n      });\n      return; // eslint-disable-line no-unsafe-finally\n    }\n    const activeServiceOnEntry = activeService;\n    activeService\n      .renderPages()\n      .then(function () {\n        return activeServiceOnEntry.performPrint();\n      })\n      .catch(function () {\n        // Ignore any error messages.\n      })\n      .then(function () {\n        // aborts acts on the \"active\" print request, so we need to check\n        // whether the print request (activeServiceOnEntry) is still active.\n        // Without the check, an unrelated print request (created after aborting\n        // this print request while the pages were being generated) would be\n        // aborted.\n        if (activeServiceOnEntry.active) {\n          abort();\n        }\n      });\n  }\n};\n\nfunction dispatchEvent(eventType) {\n  const event = new CustomEvent(eventType, {\n    bubbles: false,\n    cancelable: false,\n    detail: \"custom\",\n  });\n  window.dispatchEvent(event);\n}\n\nfunction abort() {\n  if (activeService) {\n    activeService.destroy();\n    dispatchEvent(\"afterprint\");\n  }\n}\n\nfunction renderProgress(index, total) {\n  if (typeof PDFJSDev === \"undefined\" && window.isGECKOVIEW) {\n    return;\n  }\n  dialog ||= document.getElementById(\"printServiceDialog\");\n  const progress = Math.round((100 * index) / total);\n  const progressBar = dialog.querySelector(\"progress\");\n  const progressPerc = dialog.querySelector(\".relative-progress\");\n  progressBar.value = progress;\n  progressPerc.setAttribute(\"data-l10n-args\", JSON.stringify({ progress }));\n}\n\nwindow.addEventListener(\n  \"keydown\",\n  function (event) {\n    // Intercept Cmd/Ctrl + P in all browsers.\n    // Also intercept Cmd/Ctrl + Shift + P in Chrome and Opera\n    if (\n      event.keyCode === /* P= */ 80 &&\n      (event.ctrlKey || event.metaKey) &&\n      !event.altKey &&\n      (!event.shiftKey || window.chrome || window.opera)\n    ) {\n      window.print();\n\n      event.preventDefault();\n      event.stopImmediatePropagation();\n    }\n  },\n  true\n);\n\nif (\"onbeforeprint\" in window) {\n  // Do not propagate before/afterprint events when they are not triggered\n  // from within this polyfill. (FF / Chrome 63+).\n  const stopPropagationIfNeeded = function (event) {\n    if (event.detail !== \"custom\") {\n      event.stopImmediatePropagation();\n    }\n  };\n  window.addEventListener(\"beforeprint\", stopPropagationIfNeeded);\n  window.addEventListener(\"afterprint\", stopPropagationIfNeeded);\n}\n\nlet overlayPromise;\nfunction ensureOverlay() {\n  if (typeof PDFJSDev === \"undefined\" && window.isGECKOVIEW) {\n    return Promise.reject(\n      new Error(\"ensureOverlay not implemented in GECKOVIEW development mode.\")\n    );\n  }\n  overlayManager = viewerApp.overlayManager;\n  if (!overlayManager) {\n    throw new Error(\"The overlay manager has not yet been initialized.\");\n  }\n  dialog ||= viewerApp.appConfig.printServiceDialog.container;\n  if (!overlayManager.overlays.has(dialog) || !overlayPromise) {\n    overlayPromise = overlayManager.register(\n      dialog,\n      /* canForceClose = */ true\n    );\n\n    viewerApp.appConfig.printServiceDialog.cancelButton.onclick = abort;\n    dialog.addEventListener(\"close\", abort);\n  }\n  return overlayPromise;\n}\n\n/**\n * @implements {IPDFPrintServiceFactory}\n */\nclass PDFPrintServiceFactory {\n  static initGlobals(app) {\n    viewerApp = app;\n  }\n\n  static get supportsPrinting() {\n    return shadow(this, \"supportsPrinting\", true);\n  }\n\n  static createPrintService(params) {\n    if (activeService) {\n      throw new Error(\"The print service is created and active.\");\n    }\n    return (activeService = new PDFPrintService(params));\n  }\n}\n\nexport { PDFPrintServiceFactory };\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\n/** @typedef {import(\"./interfaces\").IRenderableView} IRenderableView */\n/** @typedef {import(\"./pdf_viewer\").PDFViewer} PDFViewer */\n\nimport { RenderingCancelledException } from \"pdfjs-lib\";\nimport { RenderingStates } from \"./ui_utils.js\";\n\nconst CLEANUP_TIMEOUT = 30000;\n\n/**\n * Controls rendering of the views for pages.\n */\nclass PDFRenderingQueue {\n  constructor() {\n    this.pdfViewer = null;\n    this.onIdle = null;\n    this.highestPriorityPage = null;\n    /** @type {number} */\n    this.idleTimeout = null;\n    this.printing = false;\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      Object.defineProperty(this, \"hasViewer\", {\n        value: () => !!this.pdfViewer,\n      });\n    }\n  }\n\n  /**\n   * @param {PDFViewer} pdfViewer\n   */\n  setViewer(pdfViewer) {\n    this.pdfViewer = pdfViewer;\n  }\n\n  /**\n   * @param {IRenderableView} view\n   * @returns {boolean}\n   */\n  isHighestPriority(view) {\n    return this.highestPriorityPage === view.renderingId;\n  }\n\n  /**\n   * @param {Object} currentlyVisiblePages\n   */\n  renderHighestPriority(currentlyVisiblePages) {\n    if (this.idleTimeout) {\n      clearTimeout(this.idleTimeout);\n      this.idleTimeout = null;\n    }\n\n    // Pages have a higher priority than thumbnails, so check them first.\n    if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {\n      return;\n    }\n\n    if (this.printing) {\n      // If printing is currently ongoing do not reschedule cleanup.\n      return;\n    }\n\n    if (this.onIdle) {\n      this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);\n    }\n  }\n\n  /**\n   * @param {Object} visible\n   * @param {Array} views\n   * @param {boolean} scrolledDown\n   * @param {boolean} [preRenderExtra]\n   */\n  getHighestPriority(visible, views, scrolledDown, preRenderExtra = false) {\n    /**\n     * The state has changed. Figure out which page has the highest priority to\n     * render next (if any).\n     *\n     * Priority:\n     * 1. visible pages\n     * 2. if last scrolled down, the page after the visible pages, or\n     *    if last scrolled up, the page before the visible pages\n     */\n    const visibleViews = visible.views,\n      numVisible = visibleViews.length;\n\n    if (numVisible === 0) {\n      return null;\n    }\n    for (let i = 0; i < numVisible; i++) {\n      const view = visibleViews[i].view;\n      if (!this.isViewFinished(view)) {\n        return view;\n      }\n    }\n    const firstId = visible.first.id,\n      lastId = visible.last.id;\n\n    // All the visible views have rendered; try to handle any \"holes\" in the\n    // page layout (can happen e.g. with spreadModes at higher zoom levels).\n    if (lastId - firstId + 1 > numVisible) {\n      const visibleIds = visible.ids;\n      for (let i = 1, ii = lastId - firstId; i < ii; i++) {\n        const holeId = scrolledDown ? firstId + i : lastId - i;\n        if (visibleIds.has(holeId)) {\n          continue;\n        }\n        const holeView = views[holeId - 1];\n        if (!this.isViewFinished(holeView)) {\n          return holeView;\n        }\n      }\n    }\n\n    // All the visible views have rendered; try to render next/previous page.\n    // (IDs start at 1, so no need to add 1 when `scrolledDown === true`.)\n    let preRenderIndex = scrolledDown ? lastId : firstId - 2;\n    let preRenderView = views[preRenderIndex];\n\n    if (preRenderView && !this.isViewFinished(preRenderView)) {\n      return preRenderView;\n    }\n    if (preRenderExtra) {\n      preRenderIndex += scrolledDown ? 1 : -1;\n      preRenderView = views[preRenderIndex];\n\n      if (preRenderView && !this.isViewFinished(preRenderView)) {\n        return preRenderView;\n      }\n    }\n    // Everything that needs to be rendered has been.\n    return null;\n  }\n\n  /**\n   * @param {IRenderableView} view\n   * @returns {boolean}\n   */\n  isViewFinished(view) {\n    return view.renderingState === RenderingStates.FINISHED;\n  }\n\n  /**\n   * Render a page view. This calls the appropriate function\n   * based on the views state. If the view is already rendered it will return\n   * `false`.\n   *\n   * @param {IRenderableView} view\n   */\n  renderView(view) {\n    switch (view.renderingState) {\n      case RenderingStates.FINISHED:\n        return false;\n      case RenderingStates.PAUSED:\n        this.highestPriorityPage = view.renderingId;\n        view.resume();\n        break;\n      case RenderingStates.RUNNING:\n        this.highestPriorityPage = view.renderingId;\n        break;\n      case RenderingStates.INITIAL:\n        this.highestPriorityPage = view.renderingId;\n        view\n          .draw()\n          .finally(() => {\n            this.renderHighestPriority();\n          })\n          .catch(reason => {\n            if (reason instanceof RenderingCancelledException) {\n              return;\n            }\n            console.error(`renderView: \"${reason}\"`);\n          });\n        break;\n    }\n    return true;\n  }\n}\n\nexport { PDFRenderingQueue };\n","/* Copyright 2014 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/** @typedef {import(\"../src/display/api\").PDFDocumentProxy} PDFDocumentProxy */\n/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/optional_content_config\").OptionalContentConfig} OptionalContentConfig */\n/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n/** @typedef {import(\"./interfaces\").IDownloadManager} IDownloadManager */\n/** @typedef {import(\"./interfaces\").IL10n} IL10n */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_find_controller\").PDFFindController} PDFFindController */\n\nimport {\n  AnnotationEditorType,\n  AnnotationEditorUIManager,\n  AnnotationMode,\n  PermissionFlag,\n  PixelsPerInch,\n  shadow,\n  version,\n} from \"pdfjs-lib\";\nimport {\n  DEFAULT_SCALE,\n  DEFAULT_SCALE_DELTA,\n  DEFAULT_SCALE_VALUE,\n  docStyle,\n  getVisibleElements,\n  isPortraitOrientation,\n  isValidRotation,\n  isValidScrollMode,\n  isValidSpreadMode,\n  MAX_AUTO_SCALE,\n  MAX_SCALE,\n  MIN_SCALE,\n  removeNullCharacters,\n  RenderingStates,\n  SCROLLBAR_PADDING,\n  scrollIntoView,\n  ScrollMode,\n  SpreadMode,\n  TextLayerMode,\n  UNKNOWN_SCALE,\n  VERTICAL_PADDING,\n  watchScroll,\n} from \"./ui_utils.js\";\nimport { GenericL10n } from \"web-null_l10n\";\nimport { PDFPageView } from \"./pdf_page_view.js\";\nimport { PDFRenderingQueue } from \"./pdf_rendering_queue.js\";\nimport { SimpleLinkService } from \"./pdf_link_service.js\";\n\nconst DEFAULT_CACHE_SIZE = 10;\n\nconst PagesCountLimit = {\n  FORCE_SCROLL_MODE_PAGE: 15000,\n  FORCE_LAZY_PAGE_INIT: 7500,\n  PAUSE_EAGER_PAGE_INIT: 250,\n};\n\nfunction isValidAnnotationEditorMode(mode) {\n  return (\n    Object.values(AnnotationEditorType).includes(mode) &&\n    mode !== AnnotationEditorType.DISABLE\n  );\n}\n\n/**\n * @typedef {Object} PDFViewerOptions\n * @property {HTMLDivElement} container - The container for the viewer element.\n * @property {HTMLDivElement} [viewer] - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {IPDFLinkService} [linkService] - The navigation/linking service.\n * @property {IDownloadManager} [downloadManager] - The download manager\n *   component.\n * @property {PDFFindController} [findController] - The find controller\n *   component.\n * @property {PDFRenderingQueue} [renderingQueue] - The rendering queue object.\n * @property {boolean} [removePageBorders] - Removes the border shadow around\n *   the pages. The default value is `false`.\n * @property {number} [textLayerMode] - Controls if the text layer used for\n *   selection and searching is created. The constants from {TextLayerMode}\n *   should be used. The default value is `TextLayerMode.ENABLE`.\n * @property {number} [annotationMode] - Controls if the annotation layer is\n *   created, and if interactive form elements or `AnnotationStorage`-data are\n *   being rendered. The constants from {@link AnnotationMode} should be used;\n *   see also {@link RenderParameters} and {@link GetOperatorListParameters}.\n *   The default value is `AnnotationMode.ENABLE_FORMS`.\n * @property {number} [annotationEditorMode] - Enables the creation and editing\n *   of new Annotations. The constants from {@link AnnotationEditorType} should\n *   be used. The default value is `AnnotationEditorType.NONE`.\n * @property {string} [annotationEditorHighlightColors] - A comma separated list\n *   of colors to propose to highlight some text in the pdf.\n * @property {string} [imageResourcesPath] - Path for image resources, mainly\n *   mainly for annotation icons. Include trailing slash.\n * @property {boolean} [enablePrintAutoRotate] - Enables automatic rotation of\n *   landscape pages upon printing. The default is `false`.\n * @property {number} [maxCanvasPixels] - The maximum supported canvas size in\n *   total pixels, i.e. width * height. Use `-1` for no limit, or `0` for\n *   CSS-only zooming. The default value is 4096 * 8192 (32 mega-pixels).\n * @property {IL10n} [l10n] - Localization service.\n * @property {boolean} [enablePermissions] - Enables PDF document permissions,\n *   when they exist. The default value is `false`.\n * @property {Object} [pageColors] - Overwrites background and foreground colors\n *   with user defined ones in order to improve readability in high contrast\n *   mode.\n */\n\nclass PDFPageViewBuffer {\n  // Here we rely on the fact that `Set`s preserve the insertion order.\n  #buf = new Set();\n\n  #size = 0;\n\n  constructor(size) {\n    this.#size = size;\n  }\n\n  push(view) {\n    const buf = this.#buf;\n    if (buf.has(view)) {\n      buf.delete(view); // Move the view to the \"end\" of the buffer.\n    }\n    buf.add(view);\n\n    if (buf.size > this.#size) {\n      this.#destroyFirstView();\n    }\n  }\n\n  /**\n   * After calling resize, the size of the buffer will be `newSize`.\n   * The optional parameter `idsToKeep` is, if present, a Set of page-ids to\n   * push to the back of the buffer, delaying their destruction. The size of\n   * `idsToKeep` has no impact on the final size of the buffer; if `idsToKeep`\n   * is larger than `newSize`, some of those pages will be destroyed anyway.\n   */\n  resize(newSize, idsToKeep = null) {\n    this.#size = newSize;\n\n    const buf = this.#buf;\n    if (idsToKeep) {\n      const ii = buf.size;\n      let i = 1;\n      for (const view of buf) {\n        if (idsToKeep.has(view.id)) {\n          buf.delete(view); // Move the view to the \"end\" of the buffer.\n          buf.add(view);\n        }\n        if (++i > ii) {\n          break;\n        }\n      }\n    }\n\n    while (buf.size > this.#size) {\n      this.#destroyFirstView();\n    }\n  }\n\n  has(view) {\n    return this.#buf.has(view);\n  }\n\n  [Symbol.iterator]() {\n    return this.#buf.keys();\n  }\n\n  #destroyFirstView() {\n    const firstView = this.#buf.keys().next().value;\n\n    firstView?.destroy();\n    this.#buf.delete(firstView);\n  }\n}\n\n/**\n * Simple viewer control to display PDF content/pages.\n */\nclass PDFViewer {\n  #buffer = null;\n\n  #altTextManager = null;\n\n  #annotationEditorHighlightColors = null;\n\n  #annotationEditorMode = AnnotationEditorType.NONE;\n\n  #annotationEditorUIManager = null;\n\n  #annotationMode = AnnotationMode.ENABLE_FORMS;\n\n  #containerTopLeft = null;\n\n  #copyCallbackBound = null;\n\n  #enableHighlightFloatingButton = false;\n\n  #enablePermissions = false;\n\n  #mlManager = null;\n\n  #getAllTextInProgress = false;\n\n  #hiddenCopyElement = null;\n\n  #interruptCopyCondition = false;\n\n  #previousContainerHeight = 0;\n\n  #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this));\n\n  #scrollModePageState = null;\n\n  #onVisibilityChange = null;\n\n  #scaleTimeoutId = null;\n\n  #textLayerMode = TextLayerMode.ENABLE;\n\n  /**\n   * @param {PDFViewerOptions} options\n   */\n  constructor(options) {\n    const viewerVersion =\n      typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_VERSION\") : null;\n    if (version !== viewerVersion) {\n      throw new Error(\n        `The API version \"${version}\" does not match the Viewer version \"${viewerVersion}\".`\n      );\n    }\n    this.container = options.container;\n    this.viewer = options.viewer || options.container.firstElementChild;\n\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      if (this.container?.tagName !== \"DIV\" || this.viewer?.tagName !== \"DIV\") {\n        throw new Error(\"Invalid `container` and/or `viewer` option.\");\n      }\n\n      if (\n        this.container.offsetParent &&\n        getComputedStyle(this.container).position !== \"absolute\"\n      ) {\n        throw new Error(\"The `container` must be absolutely positioned.\");\n      }\n    }\n    this.#resizeObserver.observe(this.container);\n\n    this.eventBus = options.eventBus;\n    this.linkService = options.linkService || new SimpleLinkService();\n    this.downloadManager = options.downloadManager || null;\n    this.findController = options.findController || null;\n    this.#altTextManager = options.altTextManager || null;\n\n    if (this.findController) {\n      this.findController.onIsPageVisible = pageNumber =>\n        this._getVisiblePages().ids.has(pageNumber);\n    }\n    this.#textLayerMode = options.textLayerMode ?? TextLayerMode.ENABLE;\n    this.#annotationMode =\n      options.annotationMode ?? AnnotationMode.ENABLE_FORMS;\n    this.#annotationEditorMode =\n      options.annotationEditorMode ?? AnnotationEditorType.NONE;\n    this.#annotationEditorHighlightColors =\n      options.annotationEditorHighlightColors || null;\n    this.#enableHighlightFloatingButton =\n      options.enableHighlightFloatingButton === true;\n    this.imageResourcesPath = options.imageResourcesPath || \"\";\n    this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      this.removePageBorders = options.removePageBorders || false;\n    }\n    this.maxCanvasPixels = options.maxCanvasPixels;\n    this.l10n = options.l10n;\n    if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n      this.l10n ||= new GenericL10n();\n    }\n    this.#enablePermissions = options.enablePermissions || false;\n    this.pageColors = options.pageColors || null;\n    this.#mlManager = options.mlManager || null;\n\n    this.defaultRenderingQueue = !options.renderingQueue;\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n      this.defaultRenderingQueue\n    ) {\n      // Custom rendering queue is not specified, using default one\n      this.renderingQueue = new PDFRenderingQueue();\n      this.renderingQueue.setViewer(this);\n    } else {\n      this.renderingQueue = options.renderingQueue;\n    }\n\n    this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this));\n    this._onBeforeDraw = this._onAfterDraw = null;\n    this._resetView();\n\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n      this.removePageBorders\n    ) {\n      this.viewer.classList.add(\"removePageBorders\");\n    }\n\n    this.#updateContainerHeightCss();\n\n    if (\n      (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n      !options.l10n\n    ) {\n      // Ensure that Fluent is connected in e.g. the COMPONENTS build.\n      this.l10n.translate(this.container);\n    }\n  }\n\n  get pagesCount() {\n    return this._pages.length;\n  }\n\n  getPageView(index) {\n    return this._pages[index];\n  }\n\n  getCachedPageViews() {\n    return new Set(this.#buffer);\n  }\n\n  /**\n   * @type {boolean} - True if all {PDFPageView} objects are initialized.\n   */\n  get pageViewsReady() {\n    // Prevent printing errors when 'disableAutoFetch' is set, by ensuring\n    // that *all* pages have in fact been completely loaded.\n    return this._pages.every(pageView => pageView?.pdfPage);\n  }\n\n  /**\n   * @type {boolean}\n   */\n  get renderForms() {\n    return this.#annotationMode === AnnotationMode.ENABLE_FORMS;\n  }\n\n  /**\n   * @type {number}\n   */\n  get currentPageNumber() {\n    return this._currentPageNumber;\n  }\n\n  /**\n   * @param {number} val - The page number.\n   */\n  set currentPageNumber(val) {\n    if (!Number.isInteger(val)) {\n      throw new Error(\"Invalid page number.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    // The intent can be to just reset a scroll position and/or scale.\n    if (!this._setCurrentPageNumber(val, /* resetCurrentPageView = */ true)) {\n      console.error(`currentPageNumber: \"${val}\" is not a valid page.`);\n    }\n  }\n\n  /**\n   * @returns {boolean} Whether the pageNumber is valid (within bounds).\n   * @private\n   */\n  _setCurrentPageNumber(val, resetCurrentPageView = false) {\n    if (this._currentPageNumber === val) {\n      if (resetCurrentPageView) {\n        this.#resetCurrentPageView();\n      }\n      return true;\n    }\n\n    if (!(0 < val && val <= this.pagesCount)) {\n      return false;\n    }\n    const previous = this._currentPageNumber;\n    this._currentPageNumber = val;\n\n    this.eventBus.dispatch(\"pagechanging\", {\n      source: this,\n      pageNumber: val,\n      pageLabel: this._pageLabels?.[val - 1] ?? null,\n      previous,\n    });\n\n    if (resetCurrentPageView) {\n      this.#resetCurrentPageView();\n    }\n    return true;\n  }\n\n  /**\n   * @type {string|null} Returns the current page label, or `null` if no page\n   *   labels exist.\n   */\n  get currentPageLabel() {\n    return this._pageLabels?.[this._currentPageNumber - 1] ?? null;\n  }\n\n  /**\n   * @param {string} val - The page label.\n   */\n  set currentPageLabel(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let page = val | 0; // Fallback page number.\n    if (this._pageLabels) {\n      const i = this._pageLabels.indexOf(val);\n      if (i >= 0) {\n        page = i + 1;\n      }\n    }\n    // The intent can be to just reset a scroll position and/or scale.\n    if (!this._setCurrentPageNumber(page, /* resetCurrentPageView = */ true)) {\n      console.error(`currentPageLabel: \"${val}\" is not a valid page.`);\n    }\n  }\n\n  /**\n   * @type {number}\n   */\n  get currentScale() {\n    return this._currentScale !== UNKNOWN_SCALE\n      ? this._currentScale\n      : DEFAULT_SCALE;\n  }\n\n  /**\n   * @param {number} val - Scale of the pages in percents.\n   */\n  set currentScale(val) {\n    if (isNaN(val)) {\n      throw new Error(\"Invalid numeric scale.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    this.#setScale(val, { noScroll: false });\n  }\n\n  /**\n   * @type {string}\n   */\n  get currentScaleValue() {\n    return this._currentScaleValue;\n  }\n\n  /**\n   * @param val - The scale of the pages (in percent or predefined value).\n   */\n  set currentScaleValue(val) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    this.#setScale(val, { noScroll: false });\n  }\n\n  /**\n   * @type {number}\n   */\n  get pagesRotation() {\n    return this._pagesRotation;\n  }\n\n  /**\n   * @param {number} rotation - The rotation of the pages (0, 90, 180, 270).\n   */\n  set pagesRotation(rotation) {\n    if (!isValidRotation(rotation)) {\n      throw new Error(\"Invalid pages rotation angle.\");\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    // Normalize the rotation, by clamping it to the [0, 360) range.\n    rotation %= 360;\n    if (rotation < 0) {\n      rotation += 360;\n    }\n    if (this._pagesRotation === rotation) {\n      return; // The rotation didn't change.\n    }\n    this._pagesRotation = rotation;\n\n    const pageNumber = this._currentPageNumber;\n\n    this.refresh(true, { rotation });\n\n    // Prevent errors in case the rotation changes *before* the scale has been\n    // set to a non-default value.\n    if (this._currentScaleValue) {\n      this.#setScale(this._currentScaleValue, { noScroll: true });\n    }\n\n    this.eventBus.dispatch(\"rotationchanging\", {\n      source: this,\n      pagesRotation: rotation,\n      pageNumber,\n    });\n\n    if (this.defaultRenderingQueue) {\n      this.update();\n    }\n  }\n\n  get firstPagePromise() {\n    return this.pdfDocument ? this._firstPageCapability.promise : null;\n  }\n\n  get onePageRendered() {\n    return this.pdfDocument ? this._onePageRenderedCapability.promise : null;\n  }\n\n  get pagesPromise() {\n    return this.pdfDocument ? this._pagesCapability.promise : null;\n  }\n\n  get _layerProperties() {\n    const self = this;\n    return shadow(this, \"_layerProperties\", {\n      get annotationEditorUIManager() {\n        return self.#annotationEditorUIManager;\n      },\n      get annotationStorage() {\n        return self.pdfDocument?.annotationStorage;\n      },\n      get downloadManager() {\n        return self.downloadManager;\n      },\n      get fieldObjectsPromise() {\n        return self.pdfDocument?.getFieldObjects();\n      },\n      get findController() {\n        return self.findController;\n      },\n      get hasJSActionsPromise() {\n        return self.pdfDocument?.hasJSActions();\n      },\n      get linkService() {\n        return self.linkService;\n      },\n    });\n  }\n\n  /**\n   * Currently only *some* permissions are supported.\n   * @returns {Object}\n   */\n  #initializePermissions(permissions) {\n    const params = {\n      annotationEditorMode: this.#annotationEditorMode,\n      annotationMode: this.#annotationMode,\n      textLayerMode: this.#textLayerMode,\n    };\n    if (!permissions) {\n      return params;\n    }\n\n    if (\n      !permissions.includes(PermissionFlag.COPY) &&\n      this.#textLayerMode === TextLayerMode.ENABLE\n    ) {\n      params.textLayerMode = TextLayerMode.ENABLE_PERMISSIONS;\n    }\n\n    if (!permissions.includes(PermissionFlag.MODIFY_CONTENTS)) {\n      params.annotationEditorMode = AnnotationEditorType.DISABLE;\n    }\n\n    if (\n      !permissions.includes(PermissionFlag.MODIFY_ANNOTATIONS) &&\n      !permissions.includes(PermissionFlag.FILL_INTERACTIVE_FORMS) &&\n      this.#annotationMode === AnnotationMode.ENABLE_FORMS\n    ) {\n      params.annotationMode = AnnotationMode.ENABLE;\n    }\n\n    return params;\n  }\n\n  async #onePageRenderedOrForceFetch() {\n    // Unless the viewer *and* its pages are visible, rendering won't start and\n    // `this._onePageRenderedCapability` thus won't be resolved.\n    // To ensure that automatic printing, on document load, still works even in\n    // those cases we force-allow fetching of all pages when:\n    //  - The current window/tab is inactive, which will prevent rendering since\n    //    `requestAnimationFrame` is being used; fixes bug 1746213.\n    //  - The viewer is hidden in the DOM, e.g. in a `display: none` <iframe>\n    //    element; fixes bug 1618621.\n    //  - The viewer is visible, but none of the pages are (e.g. if the\n    //    viewer is very small); fixes bug 1618955.\n    if (\n      document.visibilityState === \"hidden\" ||\n      !this.container.offsetParent ||\n      this._getVisiblePages().views.length === 0\n    ) {\n      return;\n    }\n\n    // Handle the window/tab becoming inactive *after* rendering has started;\n    // fixes (another part of) bug 1746213.\n    const visibilityChangePromise = new Promise(resolve => {\n      this.#onVisibilityChange = () => {\n        if (document.visibilityState !== \"hidden\") {\n          return;\n        }\n        resolve();\n      };\n      document.addEventListener(\"visibilitychange\", this.#onVisibilityChange);\n    });\n\n    await Promise.race([\n      this._onePageRenderedCapability.promise,\n      visibilityChangePromise,\n    ]);\n    // Ensure that the \"visibilitychange\" listener is always removed.\n    document.removeEventListener(\"visibilitychange\", this.#onVisibilityChange);\n    this.#onVisibilityChange = null;\n  }\n\n  async getAllText() {\n    const texts = [];\n    const buffer = [];\n    for (\n      let pageNum = 1, pagesCount = this.pdfDocument.numPages;\n      pageNum <= pagesCount;\n      ++pageNum\n    ) {\n      if (this.#interruptCopyCondition) {\n        return null;\n      }\n      buffer.length = 0;\n      const page = await this.pdfDocument.getPage(pageNum);\n      // By default getTextContent pass disableNormalization equals to false\n      // which is fine because we want a normalized string.\n      const { items } = await page.getTextContent();\n      for (const item of items) {\n        if (item.str) {\n          buffer.push(item.str);\n        }\n        if (item.hasEOL) {\n          buffer.push(\"\\n\");\n        }\n      }\n      texts.push(removeNullCharacters(buffer.join(\"\")));\n    }\n\n    return texts.join(\"\\n\");\n  }\n\n  #copyCallback(textLayerMode, event) {\n    const selection = document.getSelection();\n    const { focusNode, anchorNode } = selection;\n    if (\n      anchorNode &&\n      focusNode &&\n      selection.containsNode(this.#hiddenCopyElement)\n    ) {\n      // About the condition above:\n      //  - having non-null anchorNode and focusNode are here to guaranty that\n      //    we have at least a kind of selection.\n      //  - this.#hiddenCopyElement is an invisible element which is impossible\n      //    to select manually (its display is none) but ctrl+A will select all\n      //    including this element so having it in the selection means that all\n      //    has been selected.\n\n      if (\n        this.#getAllTextInProgress ||\n        textLayerMode === TextLayerMode.ENABLE_PERMISSIONS\n      ) {\n        event.preventDefault();\n        event.stopPropagation();\n        return;\n      }\n      this.#getAllTextInProgress = true;\n\n      // TODO: if all the pages are rendered we don't need to wait for\n      // getAllText and we could just get text from the Selection object.\n\n      // Select all the document.\n      const savedCursor = this.container.style.cursor;\n      this.container.style.cursor = \"wait\";\n\n      const interruptCopy = ev =>\n        (this.#interruptCopyCondition = ev.key === \"Escape\");\n      window.addEventListener(\"keydown\", interruptCopy);\n\n      this.getAllText()\n        .then(async text => {\n          if (text !== null) {\n            await navigator.clipboard.writeText(text);\n          }\n        })\n        .catch(reason => {\n          console.warn(\n            `Something goes wrong when extracting the text: ${reason.message}`\n          );\n        })\n        .finally(() => {\n          this.#getAllTextInProgress = false;\n          this.#interruptCopyCondition = false;\n          window.removeEventListener(\"keydown\", interruptCopy);\n          this.container.style.cursor = savedCursor;\n        });\n\n      event.preventDefault();\n      event.stopPropagation();\n    }\n  }\n\n  /**\n   * @param {PDFDocumentProxy} pdfDocument\n   */\n  setDocument(pdfDocument) {\n    if (this.pdfDocument) {\n      this.eventBus.dispatch(\"pagesdestroy\", { source: this });\n\n      this._cancelRendering();\n      this._resetView();\n\n      this.findController?.setDocument(null);\n\n      if (this.#annotationEditorUIManager) {\n        this.#annotationEditorUIManager.destroy();\n        this.#annotationEditorUIManager = null;\n      }\n    }\n\n    this.pdfDocument = pdfDocument;\n    if (!pdfDocument) {\n      return;\n    }\n    const pagesCount = pdfDocument.numPages;\n    const firstPagePromise = pdfDocument.getPage(1);\n    // Rendering (potentially) depends on this, hence fetching it immediately.\n    const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig({\n      intent: \"display\",\n    });\n    const permissionsPromise = this.#enablePermissions\n      ? pdfDocument.getPermissions()\n      : Promise.resolve();\n\n    // Given that browsers don't handle huge amounts of DOM-elements very well,\n    // enforce usage of PAGE-scrolling when loading *very* long/large documents.\n    if (pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {\n      console.warn(\n        \"Forcing PAGE-scrolling for performance reasons, given the length of the document.\"\n      );\n      const mode = (this._scrollMode = ScrollMode.PAGE);\n      this.eventBus.dispatch(\"scrollmodechanged\", { source: this, mode });\n    }\n\n    this._pagesCapability.promise.then(\n      () => {\n        this.eventBus.dispatch(\"pagesloaded\", { source: this, pagesCount });\n      },\n      () => {\n        /* Prevent \"Uncaught (in promise)\"-messages in the console. */\n      }\n    );\n\n    this._onBeforeDraw = evt => {\n      const pageView = this._pages[evt.pageNumber - 1];\n      if (!pageView) {\n        return;\n      }\n      // Add the page to the buffer at the start of drawing. That way it can be\n      // evicted from the buffer and destroyed even if we pause its rendering.\n      this.#buffer.push(pageView);\n    };\n    this.eventBus._on(\"pagerender\", this._onBeforeDraw);\n\n    this._onAfterDraw = evt => {\n      if (evt.cssTransform) {\n        return;\n      }\n      this._onePageRenderedCapability.resolve({ timestamp: evt.timestamp });\n\n      this.eventBus._off(\"pagerendered\", this._onAfterDraw);\n      this._onAfterDraw = null;\n    };\n    this.eventBus._on(\"pagerendered\", this._onAfterDraw);\n\n    // Fetch a single page so we can get a viewport that will be the default\n    // viewport for all pages\n    Promise.all([firstPagePromise, permissionsPromise])\n      .then(([firstPdfPage, permissions]) => {\n        if (pdfDocument !== this.pdfDocument) {\n          return; // The document was closed while the first page resolved.\n        }\n        this._firstPageCapability.resolve(firstPdfPage);\n        this._optionalContentConfigPromise = optionalContentConfigPromise;\n\n        const { annotationEditorMode, annotationMode, textLayerMode } =\n          this.#initializePermissions(permissions);\n\n        if (textLayerMode !== TextLayerMode.DISABLE) {\n          const element = (this.#hiddenCopyElement =\n            document.createElement(\"div\"));\n          element.id = \"hiddenCopyElement\";\n          this.viewer.before(element);\n        }\n\n        if (annotationEditorMode !== AnnotationEditorType.DISABLE) {\n          const mode = annotationEditorMode;\n\n          if (pdfDocument.isPureXfa) {\n            console.warn(\"Warning: XFA-editing is not implemented.\");\n          } else if (isValidAnnotationEditorMode(mode)) {\n            this.#annotationEditorUIManager = new AnnotationEditorUIManager(\n              this.container,\n              this.viewer,\n              this.#altTextManager,\n              this.eventBus,\n              pdfDocument,\n              this.pageColors,\n              this.#annotationEditorHighlightColors,\n              this.#enableHighlightFloatingButton,\n              this.#mlManager\n            );\n            this.eventBus.dispatch(\"annotationeditoruimanager\", {\n              source: this,\n              uiManager: this.#annotationEditorUIManager,\n            });\n            if (mode !== AnnotationEditorType.NONE) {\n              this.#annotationEditorUIManager.updateMode(mode);\n            }\n          } else {\n            console.error(`Invalid AnnotationEditor mode: ${mode}`);\n          }\n        }\n\n        const viewerElement =\n          this._scrollMode === ScrollMode.PAGE ? null : this.viewer;\n        const scale = this.currentScale;\n        const viewport = firstPdfPage.getViewport({\n          scale: scale * PixelsPerInch.PDF_TO_CSS_UNITS,\n        });\n        // Ensure that the various layers always get the correct initial size,\n        // see issue 15795.\n        this.viewer.style.setProperty(\"--scale-factor\", viewport.scale);\n        if (\n          this.pageColors?.foreground === \"CanvasText\" ||\n          this.pageColors?.background === \"Canvas\"\n        ) {\n          this.viewer.style.setProperty(\n            \"--hcm-highlight-filter\",\n            pdfDocument.filterFactory.addHighlightHCMFilter(\n              \"highlight\",\n              \"CanvasText\",\n              \"Canvas\",\n              \"HighlightText\",\n              \"Highlight\"\n            )\n          );\n          this.viewer.style.setProperty(\n            \"--hcm-highlight-selected-filter\",\n            pdfDocument.filterFactory.addHighlightHCMFilter(\n              \"highlight_selected\",\n              \"CanvasText\",\n              \"Canvas\",\n              \"HighlightText\",\n              \"ButtonText\"\n            )\n          );\n        }\n\n        for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n          const pageView = new PDFPageView({\n            container: viewerElement,\n            eventBus: this.eventBus,\n            id: pageNum,\n            scale,\n            defaultViewport: viewport.clone(),\n            optionalContentConfigPromise,\n            renderingQueue: this.renderingQueue,\n            textLayerMode,\n            annotationMode,\n            imageResourcesPath: this.imageResourcesPath,\n            maxCanvasPixels: this.maxCanvasPixels,\n            pageColors: this.pageColors,\n            l10n: this.l10n,\n            layerProperties: this._layerProperties,\n          });\n          this._pages.push(pageView);\n        }\n        // Set the first `pdfPage` immediately, since it's already loaded,\n        // rather than having to repeat the `PDFDocumentProxy.getPage` call in\n        // the `this.#ensurePdfPageLoaded` method before rendering can start.\n        this._pages[0]?.setPdfPage(firstPdfPage);\n\n        if (this._scrollMode === ScrollMode.PAGE) {\n          // Ensure that the current page becomes visible on document load.\n          this.#ensurePageViewVisible();\n        } else if (this._spreadMode !== SpreadMode.NONE) {\n          this._updateSpreadMode();\n        }\n\n        // Fetch all the pages since the viewport is needed before printing\n        // starts to create the correct size canvas. Wait until one page is\n        // rendered so we don't tie up too many resources early on.\n        this.#onePageRenderedOrForceFetch().then(async () => {\n          this.findController?.setDocument(pdfDocument); // Enable searching.\n\n          if (this.#hiddenCopyElement) {\n            this.#copyCallbackBound = this.#copyCallback.bind(\n              this,\n              textLayerMode\n            );\n            document.addEventListener(\"copy\", this.#copyCallbackBound);\n          }\n\n          if (this.#annotationEditorUIManager) {\n            // Ensure that the Editor buttons, in the toolbar, are updated.\n            this.eventBus.dispatch(\"annotationeditormodechanged\", {\n              source: this,\n              mode: this.#annotationEditorMode,\n            });\n          }\n\n          // In addition to 'disableAutoFetch' being set, also attempt to reduce\n          // resource usage when loading *very* long/large documents.\n          if (\n            pdfDocument.loadingParams.disableAutoFetch ||\n            pagesCount > PagesCountLimit.FORCE_LAZY_PAGE_INIT\n          ) {\n            // XXX: Printing is semi-broken with auto fetch disabled.\n            this._pagesCapability.resolve();\n            return;\n          }\n          let getPagesLeft = pagesCount - 1; // The first page was already loaded.\n\n          if (getPagesLeft <= 0) {\n            this._pagesCapability.resolve();\n            return;\n          }\n          for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {\n            const promise = pdfDocument.getPage(pageNum).then(\n              pdfPage => {\n                const pageView = this._pages[pageNum - 1];\n                if (!pageView.pdfPage) {\n                  pageView.setPdfPage(pdfPage);\n                }\n                if (--getPagesLeft === 0) {\n                  this._pagesCapability.resolve();\n                }\n              },\n              reason => {\n                console.error(\n                  `Unable to get page ${pageNum} to initialize viewer`,\n                  reason\n                );\n                if (--getPagesLeft === 0) {\n                  this._pagesCapability.resolve();\n                }\n              }\n            );\n\n            if (pageNum % PagesCountLimit.PAUSE_EAGER_PAGE_INIT === 0) {\n              await promise;\n            }\n          }\n        });\n\n        this.eventBus.dispatch(\"pagesinit\", { source: this });\n\n        pdfDocument.getMetadata().then(({ info }) => {\n          if (pdfDocument !== this.pdfDocument) {\n            return; // The document was closed while the metadata resolved.\n          }\n          if (info.Language) {\n            this.viewer.lang = info.Language;\n          }\n        });\n\n        if (this.defaultRenderingQueue) {\n          this.update();\n        }\n      })\n      .catch(reason => {\n        console.error(\"Unable to initialize viewer\", reason);\n\n        this._pagesCapability.reject(reason);\n      });\n  }\n\n  /**\n   * @param {Array|null} labels\n   */\n  setPageLabels(labels) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!labels) {\n      this._pageLabels = null;\n    } else if (\n      !(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)\n    ) {\n      this._pageLabels = null;\n      console.error(`setPageLabels: Invalid page labels.`);\n    } else {\n      this._pageLabels = labels;\n    }\n    // Update all the `PDFPageView` instances.\n    for (let i = 0, ii = this._pages.length; i < ii; i++) {\n      this._pages[i].setPageLabel(this._pageLabels?.[i] ?? null);\n    }\n  }\n\n  _resetView() {\n    this._pages = [];\n    this._currentPageNumber = 1;\n    this._currentScale = UNKNOWN_SCALE;\n    this._currentScaleValue = null;\n    this._pageLabels = null;\n    this.#buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);\n    this._location = null;\n    this._pagesRotation = 0;\n    this._optionalContentConfigPromise = null;\n    this._firstPageCapability = Promise.withResolvers();\n    this._onePageRenderedCapability = Promise.withResolvers();\n    this._pagesCapability = Promise.withResolvers();\n    this._scrollMode = ScrollMode.VERTICAL;\n    this._previousScrollMode = ScrollMode.UNKNOWN;\n    this._spreadMode = SpreadMode.NONE;\n\n    this.#scrollModePageState = {\n      previousPageNumber: 1,\n      scrollDown: true,\n      pages: [],\n    };\n\n    if (this._onBeforeDraw) {\n      this.eventBus._off(\"pagerender\", this._onBeforeDraw);\n      this._onBeforeDraw = null;\n    }\n    if (this._onAfterDraw) {\n      this.eventBus._off(\"pagerendered\", this._onAfterDraw);\n      this._onAfterDraw = null;\n    }\n    if (this.#onVisibilityChange) {\n      document.removeEventListener(\n        \"visibilitychange\",\n        this.#onVisibilityChange\n      );\n      this.#onVisibilityChange = null;\n    }\n    // Remove the pages from the DOM...\n    this.viewer.textContent = \"\";\n    // ... and reset the Scroll mode CSS class(es) afterwards.\n    this._updateScrollMode();\n\n    this.viewer.removeAttribute(\"lang\");\n\n    if (this.#hiddenCopyElement) {\n      document.removeEventListener(\"copy\", this.#copyCallbackBound);\n      this.#copyCallbackBound = null;\n\n      this.#hiddenCopyElement.remove();\n      this.#hiddenCopyElement = null;\n    }\n  }\n\n  #ensurePageViewVisible() {\n    if (this._scrollMode !== ScrollMode.PAGE) {\n      throw new Error(\"#ensurePageViewVisible: Invalid scrollMode value.\");\n    }\n    const pageNumber = this._currentPageNumber,\n      state = this.#scrollModePageState,\n      viewer = this.viewer;\n\n    // Temporarily remove all the pages from the DOM...\n    viewer.textContent = \"\";\n    // ... and clear out the active ones.\n    state.pages.length = 0;\n\n    if (this._spreadMode === SpreadMode.NONE) {\n      // Finally, append the new page to the viewer.\n      const pageView = this._pages[pageNumber - 1];\n      viewer.append(pageView.div);\n\n      state.pages.push(pageView);\n    } else {\n      const pageIndexSet = new Set(),\n        parity = this._spreadMode - 1;\n\n      // Determine the pageIndices in the new spread.\n      if (parity === -1) {\n        // PresentationMode is active, with `SpreadMode.NONE` set.\n        pageIndexSet.add(pageNumber - 1);\n      } else if (pageNumber % 2 !== parity) {\n        // Left-hand side page.\n        pageIndexSet.add(pageNumber - 1);\n        pageIndexSet.add(pageNumber);\n      } else {\n        // Right-hand side page.\n        pageIndexSet.add(pageNumber - 2);\n        pageIndexSet.add(pageNumber - 1);\n      }\n\n      // Finally, append the new pages to the viewer and apply the spreadMode.\n      const spread = document.createElement(\"div\");\n      spread.className = \"spread\";\n\n      for (const i of pageIndexSet) {\n        const pageView = this._pages[i];\n        if (!pageView) {\n          continue;\n        }\n        spread.append(pageView.div);\n\n        state.pages.push(pageView);\n      }\n      viewer.append(spread);\n    }\n\n    state.scrollDown = pageNumber >= state.previousPageNumber;\n    state.previousPageNumber = pageNumber;\n  }\n\n  _scrollUpdate() {\n    if (this.pagesCount === 0) {\n      return;\n    }\n    this.update();\n  }\n\n  #scrollIntoView(pageView, pageSpot = null) {\n    const { div, id } = pageView;\n\n    // Ensure that `this._currentPageNumber` is correct, when `#scrollIntoView`\n    // is called directly (and not from `#resetCurrentPageView`).\n    if (this._currentPageNumber !== id) {\n      this._setCurrentPageNumber(id);\n    }\n    if (this._scrollMode === ScrollMode.PAGE) {\n      this.#ensurePageViewVisible();\n      // Ensure that rendering always occurs, to avoid showing a blank page,\n      // even if the current position doesn't change when the page is scrolled.\n      this.update();\n    }\n\n    if (!pageSpot) {\n      const left = div.offsetLeft + div.clientLeft,\n        right = left + div.clientWidth;\n      const { scrollLeft, clientWidth } = this.container;\n      if (\n        this._scrollMode === ScrollMode.HORIZONTAL ||\n        left < scrollLeft ||\n        right > scrollLeft + clientWidth\n      ) {\n        pageSpot = { left: 0, top: 0 };\n      }\n    }\n    scrollIntoView(div, pageSpot);\n\n    // Ensure that the correct *initial* document position is set, when any\n    // OpenParameters are used, for documents with non-default Scroll/Spread\n    // modes (fixes issue 15695). This is necessary since the scroll-handler\n    // invokes the `update`-method asynchronously, and `this._location` could\n    // thus be wrong when the initial zooming occurs in the default viewer.\n    if (!this._currentScaleValue && this._location) {\n      this._location = null;\n    }\n  }\n\n  /**\n   * Prevent unnecessary re-rendering of all pages when the scale changes\n   * only because of limited numerical precision.\n   */\n  #isSameScale(newScale) {\n    return (\n      newScale === this._currentScale ||\n      Math.abs(newScale - this._currentScale) < 1e-15\n    );\n  }\n\n  #setScaleUpdatePages(\n    newScale,\n    newValue,\n    { noScroll = false, preset = false, drawingDelay = -1 }\n  ) {\n    this._currentScaleValue = newValue.toString();\n\n    if (this.#isSameScale(newScale)) {\n      if (preset) {\n        this.eventBus.dispatch(\"scalechanging\", {\n          source: this,\n          scale: newScale,\n          presetValue: newValue,\n        });\n      }\n      return;\n    }\n\n    this.viewer.style.setProperty(\n      \"--scale-factor\",\n      newScale * PixelsPerInch.PDF_TO_CSS_UNITS\n    );\n\n    const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000;\n    this.refresh(true, {\n      scale: newScale,\n      drawingDelay: postponeDrawing ? drawingDelay : -1,\n    });\n\n    if (postponeDrawing) {\n      this.#scaleTimeoutId = setTimeout(() => {\n        this.#scaleTimeoutId = null;\n        this.refresh();\n      }, drawingDelay);\n    }\n\n    this._currentScale = newScale;\n\n    if (!noScroll) {\n      let page = this._currentPageNumber,\n        dest;\n      if (this._location) {\n        page = this._location.pageNumber;\n        dest = [\n          null,\n          { name: \"XYZ\" },\n          this._location.left,\n          this._location.top,\n          null,\n        ];\n      }\n      this.scrollPageIntoView({\n        pageNumber: page,\n        destArray: dest,\n        allowNegativeOffset: true,\n      });\n    }\n\n    this.eventBus.dispatch(\"scalechanging\", {\n      source: this,\n      scale: newScale,\n      presetValue: preset ? newValue : undefined,\n    });\n\n    if (this.defaultRenderingQueue) {\n      this.update();\n    }\n  }\n\n  get #pageWidthScaleFactor() {\n    if (\n      this._spreadMode !== SpreadMode.NONE &&\n      this._scrollMode !== ScrollMode.HORIZONTAL\n    ) {\n      return 2;\n    }\n    return 1;\n  }\n\n  #setScale(value, options) {\n    let scale = parseFloat(value);\n\n    if (scale > 0) {\n      options.preset = false;\n      this.#setScaleUpdatePages(scale, value, options);\n    } else {\n      const currentPage = this._pages[this._currentPageNumber - 1];\n      if (!currentPage) {\n        return;\n      }\n      let hPadding = SCROLLBAR_PADDING,\n        vPadding = VERTICAL_PADDING;\n\n      if (\n        (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n        this.removePageBorders\n      ) {\n        hPadding = vPadding = 0;\n      } else if (this._scrollMode === ScrollMode.HORIZONTAL) {\n        [hPadding, vPadding] = [vPadding, hPadding]; // Swap the padding values.\n      }\n      const pageWidthScale =\n        (((this.container.clientWidth - hPadding) / currentPage.width) *\n          currentPage.scale) /\n        this.#pageWidthScaleFactor;\n      const pageHeightScale =\n        ((this.container.clientHeight - vPadding) / currentPage.height) *\n        currentPage.scale;\n      switch (value) {\n        case \"page-actual\":\n          scale = 1;\n          break;\n        case \"page-width\":\n          scale = pageWidthScale;\n          break;\n        case \"page-height\":\n          scale = pageHeightScale;\n          break;\n        case \"page-fit\":\n          scale = Math.min(pageWidthScale, pageHeightScale);\n          break;\n        case \"auto\":\n          // For pages in landscape mode, fit the page height to the viewer\n          // *unless* the page would thus become too wide to fit horizontally.\n          const horizontalScale = isPortraitOrientation(currentPage)\n            ? pageWidthScale\n            : Math.min(pageHeightScale, pageWidthScale);\n          scale = Math.min(MAX_AUTO_SCALE, horizontalScale);\n          break;\n        default:\n          console.error(`#setScale: \"${value}\" is an unknown zoom value.`);\n          return;\n      }\n      options.preset = true;\n      this.#setScaleUpdatePages(scale, value, options);\n    }\n  }\n\n  /**\n   * Refreshes page view: scrolls to the current page and updates the scale.\n   */\n  #resetCurrentPageView() {\n    const pageView = this._pages[this._currentPageNumber - 1];\n\n    this.#scrollIntoView(pageView);\n  }\n\n  /**\n   * @param {string} label - The page label.\n   * @returns {number|null} The page number corresponding to the page label,\n   *   or `null` when no page labels exist and/or the input is invalid.\n   */\n  pageLabelToPageNumber(label) {\n    if (!this._pageLabels) {\n      return null;\n    }\n    const i = this._pageLabels.indexOf(label);\n    if (i < 0) {\n      return null;\n    }\n    return i + 1;\n  }\n\n  /**\n   * @typedef {Object} ScrollPageIntoViewParameters\n   * @property {number} pageNumber - The page number.\n   * @property {Array} [destArray] - The original PDF destination array, in the\n   *   format: <page-ref> </XYZ|/FitXXX> <args..>\n   * @property {boolean} [allowNegativeOffset] - Allow negative page offsets.\n   *   The default value is `false`.\n   * @property {boolean} [ignoreDestinationZoom] - Ignore the zoom argument in\n   *   the destination array. The default value is `false`.\n   */\n\n  /**\n   * Scrolls page into view.\n   * @param {ScrollPageIntoViewParameters} params\n   */\n  scrollPageIntoView({\n    pageNumber,\n    destArray = null,\n    allowNegativeOffset = false,\n    ignoreDestinationZoom = false,\n  }) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const pageView =\n      Number.isInteger(pageNumber) && this._pages[pageNumber - 1];\n    if (!pageView) {\n      console.error(\n        `scrollPageIntoView: \"${pageNumber}\" is not a valid pageNumber parameter.`\n      );\n      return;\n    }\n\n    if (!destArray) {\n      this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n      return;\n    }\n    let x = 0,\n      y = 0;\n    let width = 0,\n      height = 0,\n      widthScale,\n      heightScale;\n    const changeOrientation = pageView.rotation % 180 !== 0;\n    const pageWidth =\n      (changeOrientation ? pageView.height : pageView.width) /\n      pageView.scale /\n      PixelsPerInch.PDF_TO_CSS_UNITS;\n    const pageHeight =\n      (changeOrientation ? pageView.width : pageView.height) /\n      pageView.scale /\n      PixelsPerInch.PDF_TO_CSS_UNITS;\n    let scale = 0;\n    switch (destArray[1].name) {\n      case \"XYZ\":\n        x = destArray[2];\n        y = destArray[3];\n        scale = destArray[4];\n        // If x and/or y coordinates are not supplied, default to\n        // _top_ left of the page (not the obvious bottom left,\n        // since aligning the bottom of the intended page with the\n        // top of the window is rarely helpful).\n        x = x !== null ? x : 0;\n        y = y !== null ? y : pageHeight;\n        break;\n      case \"Fit\":\n      case \"FitB\":\n        scale = \"page-fit\";\n        break;\n      case \"FitH\":\n      case \"FitBH\":\n        y = destArray[2];\n        scale = \"page-width\";\n        // According to the PDF spec, section 12.3.2.2, a `null` value in the\n        // parameter should maintain the position relative to the new page.\n        if (y === null && this._location) {\n          x = this._location.left;\n          y = this._location.top;\n        } else if (typeof y !== \"number\" || y < 0) {\n          // The \"top\" value isn't optional, according to the spec, however some\n          // bad PDF generators will pretend that it is (fixes bug 1663390).\n          y = pageHeight;\n        }\n        break;\n      case \"FitV\":\n      case \"FitBV\":\n        x = destArray[2];\n        width = pageWidth;\n        height = pageHeight;\n        scale = \"page-height\";\n        break;\n      case \"FitR\":\n        x = destArray[2];\n        y = destArray[3];\n        width = destArray[4] - x;\n        height = destArray[5] - y;\n        let hPadding = SCROLLBAR_PADDING,\n          vPadding = VERTICAL_PADDING;\n\n        if (\n          (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n          this.removePageBorders\n        ) {\n          hPadding = vPadding = 0;\n        }\n        widthScale =\n          (this.container.clientWidth - hPadding) /\n          width /\n          PixelsPerInch.PDF_TO_CSS_UNITS;\n        heightScale =\n          (this.container.clientHeight - vPadding) /\n          height /\n          PixelsPerInch.PDF_TO_CSS_UNITS;\n        scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));\n        break;\n      default:\n        console.error(\n          `scrollPageIntoView: \"${destArray[1].name}\" is not a valid destination type.`\n        );\n        return;\n    }\n\n    if (!ignoreDestinationZoom) {\n      if (scale && scale !== this._currentScale) {\n        this.currentScaleValue = scale;\n      } else if (this._currentScale === UNKNOWN_SCALE) {\n        this.currentScaleValue = DEFAULT_SCALE_VALUE;\n      }\n    }\n\n    if (scale === \"page-fit\" && !destArray[4]) {\n      this.#scrollIntoView(pageView);\n      return;\n    }\n\n    const boundingRect = [\n      pageView.viewport.convertToViewportPoint(x, y),\n      pageView.viewport.convertToViewportPoint(x + width, y + height),\n    ];\n    let left = Math.min(boundingRect[0][0], boundingRect[1][0]);\n    let top = Math.min(boundingRect[0][1], boundingRect[1][1]);\n\n    if (!allowNegativeOffset) {\n      // Some bad PDF generators will create destinations with e.g. top values\n      // that exceeds the page height. Ensure that offsets are not negative,\n      // to prevent a previous page from becoming visible (fixes bug 874482).\n      left = Math.max(left, 0);\n      top = Math.max(top, 0);\n    }\n    this.#scrollIntoView(pageView, /* pageSpot = */ { left, top });\n  }\n\n  _updateLocation(firstPage) {\n    const currentScale = this._currentScale;\n    const currentScaleValue = this._currentScaleValue;\n    const normalizedScaleValue =\n      parseFloat(currentScaleValue) === currentScale\n        ? Math.round(currentScale * 10000) / 100\n        : currentScaleValue;\n\n    const pageNumber = firstPage.id;\n    const currentPageView = this._pages[pageNumber - 1];\n    const container = this.container;\n    const topLeft = currentPageView.getPagePoint(\n      container.scrollLeft - firstPage.x,\n      container.scrollTop - firstPage.y\n    );\n    const intLeft = Math.round(topLeft[0]);\n    const intTop = Math.round(topLeft[1]);\n\n    const pdfOpenParams = `#page=${pageNumber}&zoom=${normalizedScaleValue},${intLeft},${intTop}`;\n\n    this._location = {\n      pageNumber,\n      scale: normalizedScaleValue,\n      top: intTop,\n      left: intLeft,\n      rotation: this._pagesRotation,\n      pdfOpenParams,\n    };\n  }\n\n  update() {\n    const visible = this._getVisiblePages();\n    const visiblePages = visible.views,\n      numVisiblePages = visiblePages.length;\n\n    if (numVisiblePages === 0) {\n      return;\n    }\n    const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);\n    this.#buffer.resize(newCacheSize, visible.ids);\n\n    this.renderingQueue.renderHighestPriority(visible);\n\n    const isSimpleLayout =\n      this._spreadMode === SpreadMode.NONE &&\n      (this._scrollMode === ScrollMode.PAGE ||\n        this._scrollMode === ScrollMode.VERTICAL);\n    const currentId = this._currentPageNumber;\n    let stillFullyVisible = false;\n\n    for (const page of visiblePages) {\n      if (page.percent < 100) {\n        break;\n      }\n      if (page.id === currentId && isSimpleLayout) {\n        stillFullyVisible = true;\n        break;\n      }\n    }\n    this._setCurrentPageNumber(\n      stillFullyVisible ? currentId : visiblePages[0].id\n    );\n\n    this._updateLocation(visible.first);\n    this.eventBus.dispatch(\"updateviewarea\", {\n      source: this,\n      location: this._location,\n    });\n  }\n\n  containsElement(element) {\n    return this.container.contains(element);\n  }\n\n  focus() {\n    this.container.focus();\n  }\n\n  get _isContainerRtl() {\n    return getComputedStyle(this.container).direction === \"rtl\";\n  }\n\n  get isHorizontalScrollbarEnabled() {\n    return this.container.scrollWidth > this.container.clientWidth;\n  }\n\n  get isVerticalScrollbarEnabled() {\n    return this.container.scrollHeight > this.container.clientHeight;\n  }\n\n  _getVisiblePages() {\n    const views =\n        this._scrollMode === ScrollMode.PAGE\n          ? this.#scrollModePageState.pages\n          : this._pages,\n      horizontal = this._scrollMode === ScrollMode.HORIZONTAL,\n      rtl = horizontal && this._isContainerRtl;\n\n    return getVisibleElements({\n      scrollEl: this.container,\n      views,\n      sortByVisibility: true,\n      horizontal,\n      rtl,\n    });\n  }\n\n  cleanup() {\n    for (const pageView of this._pages) {\n      if (pageView.renderingState !== RenderingStates.FINISHED) {\n        pageView.reset();\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  _cancelRendering() {\n    for (const pageView of this._pages) {\n      pageView.cancelRendering();\n    }\n  }\n\n  /**\n   * @param {PDFPageView} pageView\n   * @returns {Promise<PDFPageProxy | null>}\n   */\n  async #ensurePdfPageLoaded(pageView) {\n    if (pageView.pdfPage) {\n      return pageView.pdfPage;\n    }\n    try {\n      const pdfPage = await this.pdfDocument.getPage(pageView.id);\n      if (!pageView.pdfPage) {\n        pageView.setPdfPage(pdfPage);\n      }\n      return pdfPage;\n    } catch (reason) {\n      console.error(\"Unable to get page for page view\", reason);\n      return null; // Page error -- there is nothing that can be done.\n    }\n  }\n\n  #getScrollAhead(visible) {\n    if (visible.first?.id === 1) {\n      return true;\n    } else if (visible.last?.id === this.pagesCount) {\n      return false;\n    }\n    switch (this._scrollMode) {\n      case ScrollMode.PAGE:\n        return this.#scrollModePageState.scrollDown;\n      case ScrollMode.HORIZONTAL:\n        return this.scroll.right;\n    }\n    return this.scroll.down;\n  }\n\n  forceRendering(currentlyVisiblePages) {\n    const visiblePages = currentlyVisiblePages || this._getVisiblePages();\n    const scrollAhead = this.#getScrollAhead(visiblePages);\n    const preRenderExtra =\n      this._spreadMode !== SpreadMode.NONE &&\n      this._scrollMode !== ScrollMode.HORIZONTAL;\n\n    const pageView = this.renderingQueue.getHighestPriority(\n      visiblePages,\n      this._pages,\n      scrollAhead,\n      preRenderExtra\n    );\n\n    if (pageView) {\n      this.#ensurePdfPageLoaded(pageView).then(() => {\n        this.renderingQueue.renderView(pageView);\n      });\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * @type {boolean} Whether all pages of the PDF document have identical\n   *   widths and heights.\n   */\n  get hasEqualPageSizes() {\n    const firstPageView = this._pages[0];\n    for (let i = 1, ii = this._pages.length; i < ii; ++i) {\n      const pageView = this._pages[i];\n      if (\n        pageView.width !== firstPageView.width ||\n        pageView.height !== firstPageView.height\n      ) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Returns sizes of the pages.\n   * @returns {Array} Array of objects with width/height/rotation fields.\n   */\n  getPagesOverview() {\n    let initialOrientation;\n    return this._pages.map(pageView => {\n      const viewport = pageView.pdfPage.getViewport({ scale: 1 });\n      const orientation = isPortraitOrientation(viewport);\n      if (initialOrientation === undefined) {\n        initialOrientation = orientation;\n      } else if (\n        this.enablePrintAutoRotate &&\n        orientation !== initialOrientation\n      ) {\n        // Rotate to fit the initial orientation.\n        return {\n          width: viewport.height,\n          height: viewport.width,\n          rotation: (viewport.rotation - 90) % 360,\n        };\n      }\n      return {\n        width: viewport.width,\n        height: viewport.height,\n        rotation: viewport.rotation,\n      };\n    });\n  }\n\n  /**\n   * @type {Promise<OptionalContentConfig | null>}\n   */\n  get optionalContentConfigPromise() {\n    if (!this.pdfDocument) {\n      return Promise.resolve(null);\n    }\n    if (!this._optionalContentConfigPromise) {\n      console.error(\"optionalContentConfigPromise: Not initialized yet.\");\n      // Prevent issues if the getter is accessed *before* the `onePageRendered`\n      // promise has resolved; won't (normally) happen in the default viewer.\n      return this.pdfDocument.getOptionalContentConfig({ intent: \"display\" });\n    }\n    return this._optionalContentConfigPromise;\n  }\n\n  /**\n   * @param {Promise<OptionalContentConfig>} promise - A promise that is\n   *   resolved with an {@link OptionalContentConfig} instance.\n   */\n  set optionalContentConfigPromise(promise) {\n    if (!(promise instanceof Promise)) {\n      throw new Error(`Invalid optionalContentConfigPromise: ${promise}`);\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    if (!this._optionalContentConfigPromise) {\n      // Ignore the setter *before* the `onePageRendered` promise has resolved,\n      // since it'll be overwritten anyway; won't happen in the default viewer.\n      return;\n    }\n    this._optionalContentConfigPromise = promise;\n\n    this.refresh(false, { optionalContentConfigPromise: promise });\n\n    this.eventBus.dispatch(\"optionalcontentconfigchanged\", {\n      source: this,\n      promise,\n    });\n  }\n\n  /**\n   * @type {number} One of the values in {ScrollMode}.\n   */\n  get scrollMode() {\n    return this._scrollMode;\n  }\n\n  /**\n   * @param {number} mode - The direction in which the document pages should be\n   *   laid out within the scrolling container.\n   *   The constants from {ScrollMode} should be used.\n   */\n  set scrollMode(mode) {\n    if (\n      typeof PDFJSDev === \"undefined\"\n        ? window.isGECKOVIEW\n        : PDFJSDev.test(\"GECKOVIEW\")\n    ) {\n      // NOTE: Always ignore the pageLayout in GeckoView since there's\n      // no UI available to change Scroll/Spread modes for the user.\n      return;\n    }\n    if (this._scrollMode === mode) {\n      return; // The Scroll mode didn't change.\n    }\n    if (!isValidScrollMode(mode)) {\n      throw new Error(`Invalid scroll mode: ${mode}`);\n    }\n    if (this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) {\n      return; // Disabled for performance reasons.\n    }\n    this._previousScrollMode = this._scrollMode;\n\n    this._scrollMode = mode;\n    this.eventBus.dispatch(\"scrollmodechanged\", { source: this, mode });\n\n    this._updateScrollMode(/* pageNumber = */ this._currentPageNumber);\n  }\n\n  _updateScrollMode(pageNumber = null) {\n    const scrollMode = this._scrollMode,\n      viewer = this.viewer;\n\n    viewer.classList.toggle(\n      \"scrollHorizontal\",\n      scrollMode === ScrollMode.HORIZONTAL\n    );\n    viewer.classList.toggle(\"scrollWrapped\", scrollMode === ScrollMode.WRAPPED);\n\n    if (!this.pdfDocument || !pageNumber) {\n      return;\n    }\n\n    if (scrollMode === ScrollMode.PAGE) {\n      this.#ensurePageViewVisible();\n    } else if (this._previousScrollMode === ScrollMode.PAGE) {\n      // Ensure that the current spreadMode is still applied correctly when\n      // the *previous* scrollMode was `ScrollMode.PAGE`.\n      this._updateSpreadMode();\n    }\n    // Non-numeric scale values can be sensitive to the scroll orientation.\n    // Call this before re-scrolling to the current page, to ensure that any\n    // changes in scale don't move the current page.\n    if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\n      this.#setScale(this._currentScaleValue, { noScroll: true });\n    }\n    this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n    this.update();\n  }\n\n  /**\n   * @type {number} One of the values in {SpreadMode}.\n   */\n  get spreadMode() {\n    return this._spreadMode;\n  }\n\n  /**\n   * @param {number} mode - Group the pages in spreads, starting with odd- or\n   *   even-number pages (unless `SpreadMode.NONE` is used).\n   *   The constants from {SpreadMode} should be used.\n   */\n  set spreadMode(mode) {\n    if (\n      typeof PDFJSDev === \"undefined\"\n        ? window.isGECKOVIEW\n        : PDFJSDev.test(\"GECKOVIEW\")\n    ) {\n      // NOTE: Always ignore the pageLayout in GeckoView since there's\n      // no UI available to change Scroll/Spread modes for the user.\n      return;\n    }\n    if (this._spreadMode === mode) {\n      return; // The Spread mode didn't change.\n    }\n    if (!isValidSpreadMode(mode)) {\n      throw new Error(`Invalid spread mode: ${mode}`);\n    }\n    this._spreadMode = mode;\n    this.eventBus.dispatch(\"spreadmodechanged\", { source: this, mode });\n\n    this._updateSpreadMode(/* pageNumber = */ this._currentPageNumber);\n  }\n\n  _updateSpreadMode(pageNumber = null) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    const viewer = this.viewer,\n      pages = this._pages;\n\n    if (this._scrollMode === ScrollMode.PAGE) {\n      this.#ensurePageViewVisible();\n    } else {\n      // Temporarily remove all the pages from the DOM.\n      viewer.textContent = \"\";\n\n      if (this._spreadMode === SpreadMode.NONE) {\n        for (const pageView of this._pages) {\n          viewer.append(pageView.div);\n        }\n      } else {\n        const parity = this._spreadMode - 1;\n        let spread = null;\n        for (let i = 0, ii = pages.length; i < ii; ++i) {\n          if (spread === null) {\n            spread = document.createElement(\"div\");\n            spread.className = \"spread\";\n            viewer.append(spread);\n          } else if (i % 2 === parity) {\n            spread = spread.cloneNode(false);\n            viewer.append(spread);\n          }\n          spread.append(pages[i].div);\n        }\n      }\n    }\n\n    if (!pageNumber) {\n      return;\n    }\n    // Non-numeric scale values can be sensitive to the scroll orientation.\n    // Call this before re-scrolling to the current page, to ensure that any\n    // changes in scale don't move the current page.\n    if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\n      this.#setScale(this._currentScaleValue, { noScroll: true });\n    }\n    this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n    this.update();\n  }\n\n  /**\n   * @private\n   */\n  _getPageAdvance(currentPageNumber, previous = false) {\n    switch (this._scrollMode) {\n      case ScrollMode.WRAPPED: {\n        const { views } = this._getVisiblePages(),\n          pageLayout = new Map();\n\n        // Determine the current (visible) page layout.\n        for (const { id, y, percent, widthPercent } of views) {\n          if (percent === 0 || widthPercent < 100) {\n            continue;\n          }\n          let yArray = pageLayout.get(y);\n          if (!yArray) {\n            pageLayout.set(y, (yArray ||= []));\n          }\n          yArray.push(id);\n        }\n        // Find the row of the current page.\n        for (const yArray of pageLayout.values()) {\n          const currentIndex = yArray.indexOf(currentPageNumber);\n          if (currentIndex === -1) {\n            continue;\n          }\n          const numPages = yArray.length;\n          if (numPages === 1) {\n            break;\n          }\n          // Handle documents with varying page sizes.\n          if (previous) {\n            for (let i = currentIndex - 1, ii = 0; i >= ii; i--) {\n              const currentId = yArray[i],\n                expectedId = yArray[i + 1] - 1;\n              if (currentId < expectedId) {\n                return currentPageNumber - expectedId;\n              }\n            }\n          } else {\n            for (let i = currentIndex + 1, ii = numPages; i < ii; i++) {\n              const currentId = yArray[i],\n                expectedId = yArray[i - 1] + 1;\n              if (currentId > expectedId) {\n                return expectedId - currentPageNumber;\n              }\n            }\n          }\n          // The current row is \"complete\", advance to the previous/next one.\n          if (previous) {\n            const firstId = yArray[0];\n            if (firstId < currentPageNumber) {\n              return currentPageNumber - firstId + 1;\n            }\n          } else {\n            const lastId = yArray[numPages - 1];\n            if (lastId > currentPageNumber) {\n              return lastId - currentPageNumber + 1;\n            }\n          }\n          break;\n        }\n        break;\n      }\n      case ScrollMode.HORIZONTAL: {\n        break;\n      }\n      case ScrollMode.PAGE:\n      case ScrollMode.VERTICAL: {\n        if (this._spreadMode === SpreadMode.NONE) {\n          break; // Normal vertical scrolling.\n        }\n        const parity = this._spreadMode - 1;\n\n        if (previous && currentPageNumber % 2 !== parity) {\n          break; // Left-hand side page.\n        } else if (!previous && currentPageNumber % 2 === parity) {\n          break; // Right-hand side page.\n        }\n        const { views } = this._getVisiblePages(),\n          expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1;\n\n        for (const { id, percent, widthPercent } of views) {\n          if (id !== expectedId) {\n            continue;\n          }\n          if (percent > 0 && widthPercent === 100) {\n            return 2;\n          }\n          break;\n        }\n        break;\n      }\n    }\n    return 1;\n  }\n\n  /**\n   * Go to the next page, taking scroll/spread-modes into account.\n   * @returns {boolean} Whether navigation occurred.\n   */\n  nextPage() {\n    const currentPageNumber = this._currentPageNumber,\n      pagesCount = this.pagesCount;\n\n    if (currentPageNumber >= pagesCount) {\n      return false;\n    }\n    const advance =\n      this._getPageAdvance(currentPageNumber, /* previous = */ false) || 1;\n\n    this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount);\n    return true;\n  }\n\n  /**\n   * Go to the previous page, taking scroll/spread-modes into account.\n   * @returns {boolean} Whether navigation occurred.\n   */\n  previousPage() {\n    const currentPageNumber = this._currentPageNumber;\n\n    if (currentPageNumber <= 1) {\n      return false;\n    }\n    const advance =\n      this._getPageAdvance(currentPageNumber, /* previous = */ true) || 1;\n\n    this.currentPageNumber = Math.max(currentPageNumber - advance, 1);\n    return true;\n  }\n\n  /**\n   * @typedef {Object} ChangeScaleOptions\n   * @property {number} [drawingDelay]\n   * @property {number} [scaleFactor]\n   * @property {number} [steps]\n   */\n\n  /**\n   * Increase the current zoom level one, or more, times.\n   * @param {ChangeScaleOptions} [options]\n   */\n  increaseScale({ drawingDelay, scaleFactor, steps } = {}) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let newScale = this._currentScale;\n    if (scaleFactor > 1) {\n      newScale = Math.round(newScale * scaleFactor * 100) / 100;\n    } else {\n      steps ??= 1;\n      do {\n        newScale =\n          Math.ceil((newScale * DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10;\n      } while (--steps > 0 && newScale < MAX_SCALE);\n    }\n    this.#setScale(Math.min(MAX_SCALE, newScale), {\n      noScroll: false,\n      drawingDelay,\n    });\n  }\n\n  /**\n   * Decrease the current zoom level one, or more, times.\n   * @param {ChangeScaleOptions} [options]\n   */\n  decreaseScale({ drawingDelay, scaleFactor, steps } = {}) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    let newScale = this._currentScale;\n    if (scaleFactor > 0 && scaleFactor < 1) {\n      newScale = Math.round(newScale * scaleFactor * 100) / 100;\n    } else {\n      steps ??= 1;\n      do {\n        newScale =\n          Math.floor((newScale / DEFAULT_SCALE_DELTA).toFixed(2) * 10) / 10;\n      } while (--steps > 0 && newScale > MIN_SCALE);\n    }\n    this.#setScale(Math.max(MIN_SCALE, newScale), {\n      noScroll: false,\n      drawingDelay,\n    });\n  }\n\n  #updateContainerHeightCss(height = this.container.clientHeight) {\n    if (height !== this.#previousContainerHeight) {\n      this.#previousContainerHeight = height;\n      docStyle.setProperty(\"--viewer-container-height\", `${height}px`);\n    }\n  }\n\n  #resizeObserverCallback(entries) {\n    for (const entry of entries) {\n      if (entry.target === this.container) {\n        this.#updateContainerHeightCss(\n          Math.floor(entry.borderBoxSize[0].blockSize)\n        );\n        this.#containerTopLeft = null;\n        break;\n      }\n    }\n  }\n\n  get containerTopLeft() {\n    return (this.#containerTopLeft ||= [\n      this.container.offsetTop,\n      this.container.offsetLeft,\n    ]);\n  }\n\n  get annotationEditorMode() {\n    return this.#annotationEditorUIManager\n      ? this.#annotationEditorMode\n      : AnnotationEditorType.DISABLE;\n  }\n\n  /**\n   * @typedef {Object} AnnotationEditorModeOptions\n   * @property {number} mode - The editor mode (none, FreeText, ink, ...).\n   * @property {string|null} [editId] - ID of the existing annotation to edit.\n   * @property {boolean} [isFromKeyboard] - True if the mode change is due to a\n   *   keyboard action.\n   */\n\n  /**\n   * @param {AnnotationEditorModeOptions} options\n   */\n  set annotationEditorMode({ mode, editId = null, isFromKeyboard = false }) {\n    if (!this.#annotationEditorUIManager) {\n      throw new Error(`The AnnotationEditor is not enabled.`);\n    }\n    if (this.#annotationEditorMode === mode) {\n      return; // The AnnotationEditor mode didn't change.\n    }\n    if (!isValidAnnotationEditorMode(mode)) {\n      throw new Error(`Invalid AnnotationEditor mode: ${mode}`);\n    }\n    if (!this.pdfDocument) {\n      return;\n    }\n    this.#annotationEditorMode = mode;\n    this.eventBus.dispatch(\"annotationeditormodechanged\", {\n      source: this,\n      mode,\n    });\n\n    this.#annotationEditorUIManager.updateMode(mode, editId, isFromKeyboard);\n  }\n\n  // eslint-disable-next-line accessor-pairs\n  set annotationEditorParams({ type, value }) {\n    if (!this.#annotationEditorUIManager) {\n      throw new Error(`The AnnotationEditor is not enabled.`);\n    }\n    this.#annotationEditorUIManager.updateParams(type, value);\n  }\n\n  refresh(noUpdate = false, updateArgs = Object.create(null)) {\n    if (!this.pdfDocument) {\n      return;\n    }\n    for (const pageView of this._pages) {\n      pageView.update(updateArgs);\n    }\n    if (this.#scaleTimeoutId !== null) {\n      clearTimeout(this.#scaleTimeoutId);\n      this.#scaleTimeoutId = null;\n    }\n    if (!noUpdate) {\n      this.update();\n    }\n  }\n}\n\nexport { PagesCountLimit, PDFPageViewBuffer, PDFViewer };\n","/* 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\n// Ensure that the viewer waits for the library to complete loading,\n// to avoid breaking e.g. the standalone viewer components (see issue 17228).\nif (\n  (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n  !globalThis.pdfjsLib\n) {\n  await globalThis.pdfjsLibPromise;\n}\n\nconst {\n  AbortException,\n  AnnotationEditorLayer,\n  AnnotationEditorParamsType,\n  AnnotationEditorType,\n  AnnotationEditorUIManager,\n  AnnotationLayer,\n  AnnotationMode,\n  build,\n  CMapCompressionType,\n  ColorPicker,\n  createValidAbsoluteUrl,\n  DOMSVGFactory,\n  DrawLayer,\n  FeatureTest,\n  fetchData,\n  getDocument,\n  getFilenameFromUrl,\n  getPdfFilenameFromUrl,\n  getXfaPageViewport,\n  GlobalWorkerOptions,\n  ImageKind,\n  InvalidPDFException,\n  isDataScheme,\n  isPdfFile,\n  MissingPDFException,\n  noContextMenu,\n  normalizeUnicode,\n  OPS,\n  Outliner,\n  PasswordException,\n  PasswordResponses,\n  PDFDataRangeTransport,\n  PDFDateString,\n  PDFWorker,\n  PermissionFlag,\n  PixelsPerInch,\n  RenderingCancelledException,\n  renderTextLayer,\n  setLayerDimensions,\n  shadow,\n  UnexpectedResponseException,\n  updateTextLayer,\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  build,\n  CMapCompressionType,\n  ColorPicker,\n  createValidAbsoluteUrl,\n  DOMSVGFactory,\n  DrawLayer,\n  FeatureTest,\n  fetchData,\n  getDocument,\n  getFilenameFromUrl,\n  getPdfFilenameFromUrl,\n  getXfaPageViewport,\n  GlobalWorkerOptions,\n  ImageKind,\n  InvalidPDFException,\n  isDataScheme,\n  isPdfFile,\n  MissingPDFException,\n  noContextMenu,\n  normalizeUnicode,\n  OPS,\n  Outliner,\n  PasswordException,\n  PasswordResponses,\n  PDFDataRangeTransport,\n  PDFDateString,\n  PDFWorker,\n  PermissionFlag,\n  PixelsPerInch,\n  RenderingCancelledException,\n  renderTextLayer,\n  setLayerDimensions,\n  shadow,\n  UnexpectedResponseException,\n  updateTextLayer,\n  Util,\n  VerbosityLevel,\n  version,\n  XfaLayer,\n};\n","/* Copyright 2013 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 { AppOptions, OptionKind } from \"./app_options.js\";\n\n/**\n * BasePreferences - Abstract base class for storing persistent settings.\n *   Used for settings that should be applied to all opened documents,\n *   or every time the viewer is loaded.\n */\nclass BasePreferences {\n  #browserDefaults = Object.freeze(\n    typeof PDFJSDev === \"undefined\"\n      ? AppOptions.getAll(OptionKind.BROWSER, /* defaultOnly = */ true)\n      : PDFJSDev.eval(\"BROWSER_PREFERENCES\")\n  );\n\n  #defaults = Object.freeze(\n    typeof PDFJSDev === \"undefined\"\n      ? AppOptions.getAll(OptionKind.PREFERENCE, /* defaultOnly = */ true)\n      : PDFJSDev.eval(\"DEFAULT_PREFERENCES\")\n  );\n\n  #prefs = Object.create(null);\n\n  #initializedPromise = null;\n\n  constructor() {\n    if (this.constructor === BasePreferences) {\n      throw new Error(\"Cannot initialize BasePreferences.\");\n    }\n\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")) {\n      Object.defineProperty(this, \"defaults\", {\n        get() {\n          return this.#defaults;\n        },\n      });\n    }\n\n    this.#initializedPromise = this._readFromStorage(this.#defaults).then(\n      ({ browserPrefs, prefs }) => {\n        const options = Object.create(null);\n\n        for (const [name, val] of Object.entries(this.#browserDefaults)) {\n          const prefVal = browserPrefs?.[name];\n          options[name] = typeof prefVal === typeof val ? prefVal : val;\n        }\n        for (const [name, val] of Object.entries(this.#defaults)) {\n          const prefVal = prefs?.[name];\n          // Ignore preferences whose types don't match the default values.\n          options[name] = this.#prefs[name] =\n            typeof prefVal === typeof val ? prefVal : val;\n        }\n        AppOptions.setAll(options, /* init = */ true);\n\n        if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n          window.addEventListener(\"updatedPreference\", evt => {\n            this.#updatePref(evt.detail);\n          });\n        }\n      }\n    );\n  }\n\n  /**\n   * Stub function for writing preferences to storage.\n   * @param {Object} prefObj The preferences that should be written to storage.\n   * @returns {Promise} A promise that is resolved when the preference values\n   *                    have been written.\n   */\n  async _writeToStorage(prefObj) {\n    throw new Error(\"Not implemented: _writeToStorage\");\n  }\n\n  /**\n   * Stub function for reading preferences from storage.\n   * @param {Object} prefObj The preferences that should be read from storage.\n   * @returns {Promise} A promise that is resolved with an {Object} containing\n   *                    the preferences that have been read.\n   */\n  async _readFromStorage(prefObj) {\n    throw new Error(\"Not implemented: _readFromStorage\");\n  }\n\n  #updatePref({ name, value }) {\n    if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n      throw new Error(\"Not implemented: #updatePref\");\n    }\n\n    if (name in this.#browserDefaults) {\n      if (typeof value !== typeof this.#browserDefaults[name]) {\n        return; // Invalid preference value.\n      }\n    } else if (name in this.#defaults) {\n      if (typeof value !== typeof this.#defaults[name]) {\n        return; // Invalid preference value.\n      }\n      this.#prefs[name] = value;\n    } else {\n      return; // Invalid preference.\n    }\n    AppOptions.set(name, value);\n  }\n\n  /**\n   * Reset the preferences to their default values and update storage.\n   * @returns {Promise} A promise that is resolved when the preference values\n   *                    have been reset.\n   */\n  async reset() {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      throw new Error(\"Please use `about:config` to change preferences.\");\n    }\n    await this.#initializedPromise;\n    const oldPrefs = structuredClone(this.#prefs);\n\n    this.#prefs = Object.create(null);\n    try {\n      await this._writeToStorage(this.#defaults);\n    } catch (reason) {\n      // Revert all preference values, since writing to storage failed.\n      this.#prefs = oldPrefs;\n      throw reason;\n    }\n  }\n\n  /**\n   * Set the value of a preference.\n   * @param {string} name The name of the preference that should be changed.\n   * @param {boolean|number|string} value The new value of the preference.\n   * @returns {Promise} A promise that is resolved when the value has been set,\n   *                    provided that the preference exists and the types match.\n   */\n  async set(name, value) {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      throw new Error(\"Please use `about:config` to change preferences.\");\n    }\n    await this.#initializedPromise;\n    const defaultValue = this.#defaults[name],\n      oldPrefs = structuredClone(this.#prefs);\n\n    if (defaultValue === undefined) {\n      throw new Error(`Set preference: \"${name}\" is undefined.`);\n    } else if (value === undefined) {\n      throw new Error(\"Set preference: no value is specified.\");\n    }\n    const valueType = typeof value,\n      defaultType = typeof defaultValue;\n\n    if (valueType !== defaultType) {\n      if (valueType === \"number\" && defaultType === \"string\") {\n        value = value.toString();\n      } else {\n        throw new Error(\n          `Set preference: \"${value}\" is a ${valueType}, expected a ${defaultType}.`\n        );\n      }\n    } else if (valueType === \"number\" && !Number.isInteger(value)) {\n      throw new Error(`Set preference: \"${value}\" must be an integer.`);\n    }\n\n    this.#prefs[name] = value;\n    try {\n      await this._writeToStorage(this.#prefs);\n    } catch (reason) {\n      // Revert all preference values, since writing to storage failed.\n      this.#prefs = oldPrefs;\n      throw reason;\n    }\n  }\n\n  /**\n   * Get the value of a preference.\n   * @param {string} name The name of the preference whose value is requested.\n   * @returns {Promise} A promise resolved with a {boolean|number|string}\n   *                    containing the value of the preference.\n   */\n  async get(name) {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      throw new Error(\"Not implemented: get\");\n    }\n    await this.#initializedPromise;\n    const defaultValue = this.#defaults[name];\n\n    if (defaultValue === undefined) {\n      throw new Error(`Get preference: \"${name}\" is undefined.`);\n    }\n    return this.#prefs[name] ?? defaultValue;\n  }\n\n  get initializedPromise() {\n    return this.#initializedPromise;\n  }\n}\n\nexport { BasePreferences };\n","/* Copyright 2021 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 { getXfaPageViewport, PixelsPerInch } from \"pdfjs-lib\";\nimport { SimpleLinkService } from \"./pdf_link_service.js\";\nimport { XfaLayerBuilder } from \"./xfa_layer_builder.js\";\n\nfunction getXfaHtmlForPrinting(printContainer, pdfDocument) {\n  const xfaHtml = pdfDocument.allXfaHtml;\n  const linkService = new SimpleLinkService();\n  const scale = Math.round(PixelsPerInch.PDF_TO_CSS_UNITS * 100) / 100;\n\n  for (const xfaPage of xfaHtml.children) {\n    const page = document.createElement(\"div\");\n    page.className = \"xfaPrintedPage\";\n    printContainer.append(page);\n\n    const builder = new XfaLayerBuilder({\n      pdfPage: null,\n      annotationStorage: pdfDocument.annotationStorage,\n      linkService,\n      xfaHtml: xfaPage,\n    });\n    const viewport = getXfaPageViewport(xfaPage, { scale });\n\n    builder.render(viewport, \"print\");\n    page.append(builder.div);\n  }\n}\n\nexport { getXfaHtmlForPrinting };\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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport { toggleExpandedBtn } from \"./ui_utils.js\";\n\n/**\n * @typedef {Object} SecondaryToolbarOptions\n * @property {HTMLDivElement} toolbar - Container for the secondary toolbar.\n * @property {HTMLButtonElement} toggleButton - Button to toggle the visibility\n *   of the secondary toolbar.\n * @property {HTMLButtonElement} printButton - Button to print the document.\n * @property {HTMLButtonElement} downloadButton - Button to download the\n *   document.\n * @property {HTMLButtonElement} firstPageButton - Button to go to the first\n *   page in the document.\n * @property {HTMLButtonElement} lastPageButton - Button to go to the last page\n *   in the document.\n * @property {HTMLButtonElement} pageRotateCwButton - Button to rotate the pages\n *   clockwise.\n * @property {HTMLButtonElement} pageRotateCcwButton - Button to rotate the\n *   pages counterclockwise.\n * @property {HTMLButtonElement} saveOrientationButton - Button to save the\n *   Orientation.\n */\n\nclass SecondaryToolbar {\n  #opts;\n\n  /**\n   * @param {SecondaryToolbarOptions} options\n   * @param {EventBus} eventBus\n   */\n  constructor(options, eventBus) {\n    this.#opts = options;\n    const buttons = [\n      { element: options.firstPageButton, eventName: \"firstpage\", close: true },\n      { element: options.lastPageButton, eventName: \"lastpage\", close: true },\n      {\n        element: options.pageRotateCwButton,\n        eventName: \"rotatecw\",\n        close: true,\n      },\n      {\n        element: options.pageRotateCcwButton,\n        eventName: \"rotateccw\",\n        close: true,\n      },\n      {\n        element: options.saveOrientationButton,\n        eventName: \"saveorientation\",\n        close: true,\n      },\n    ];\n    this.items = {\n      firstPage: options.firstPageButton,\n      lastPage: options.lastPageButton,\n      pageRotateCw: options.pageRotateCwButton,\n      pageRotateCcw: options.pageRotateCcwButton,\n      saveOrientation: options.saveOrientationButton,\n    };\n    toggleExpandedBtn(options.toggleButton, false, options.toolbar);\n    this.eventBus = eventBus;\n    this.opened = false;\n\n    // Bind the event listeners for click, cursor tool, and scroll/spread mode\n    // actions.\n    this.#bindListeners(buttons);\n\n    this.reset();\n  }\n\n  /**\n   * @type {boolean}\n   */\n  get isOpen() {\n    return this.opened;\n  }\n\n  setPageNumber(pageNumber) {\n    this.pageNumber = pageNumber;\n    this.#updateUIState();\n  }\n\n  setPagesCount(pagesCount) {\n    this.pagesCount = pagesCount;\n    this.#updateUIState();\n  }\n\n  reset() {\n    this.pageNumber = 0;\n    this.pagesCount = 0;\n    this.#updateUIState();\n  }\n\n  #updateUIState() {\n    const {\n      firstPageButton,\n      lastPageButton,\n      pageRotateCwButton,\n      pageRotateCcwButton,\n      saveOrientationButton,\n    } = this.#opts;\n\n    firstPageButton.disabled = this.pageNumber <= 1;\n    lastPageButton.disabled = this.pageNumber >= this.pagesCount;\n    pageRotateCwButton.disabled = this.pagesCount === 0;\n    pageRotateCcwButton.disabled = this.pagesCount === 0;\n    saveOrientationButton.disabled = true;\n  }\n\n  #bindListeners(buttons) {\n    if (this._secondaryToolbarAbortController) {\n      return;\n    }\n    this._secondaryToolbarAbortController = new AbortController();\n\n    const {\n      eventBus,\n      _secondaryToolbarAbortController: { signal },\n    } = this;\n    const { toggleButton } = this.#opts;\n    // Button to toggle the visibility of the secondary toolbar.\n    toggleButton.addEventListener(\"click\", this.toggle.bind(this), { signal });\n\n    // All items within the secondary toolbar.\n    for (const { element, eventName, close, eventDetails } of buttons) {\n      element.addEventListener(\n        \"click\",\n        evt => {\n          if (eventName !== null) {\n            eventBus.dispatch(eventName, { source: this, ...eventDetails });\n          }\n          if (close) {\n            this.close();\n          }\n          eventBus.dispatch(\"reporttelemetry\", {\n            source: this,\n            details: {\n              type: \"buttons\",\n              data: { id: element.id },\n            },\n          });\n        },\n        { signal }\n      );\n    }\n  }\n\n  unbindListeners() {\n    this._secondaryToolbarAbortController?.abort();\n    this._secondaryToolbarAbortController = null;\n  }\n\n  open() {\n    if (this.opened) {\n      return;\n    }\n    this.opened = true;\n\n    const { toggleButton, toolbar } = this.#opts;\n    toggleExpandedBtn(toggleButton, true, toolbar);\n  }\n\n  close() {\n    if (!this.opened) {\n      return;\n    }\n    this.opened = false;\n\n    const { toggleButton, toolbar } = this.#opts;\n    toggleExpandedBtn(toggleButton, false, toolbar);\n  }\n\n  toggle() {\n    if (this.opened) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n}\n\nexport { SecondaryToolbar };\n","/* Copyright 2021 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 { removeNullCharacters } from \"./ui_utils.js\";\n\nconst PDF_ROLE_TO_HTML_ROLE = {\n  // Document level structure types\n  Document: null, // There's a \"document\" role, but it doesn't make sense here.\n  DocumentFragment: null,\n  // Grouping level structure types\n  Part: \"group\",\n  Sect: \"group\", // XXX: There's a \"section\" role, but it's abstract.\n  Div: \"group\",\n  Aside: \"note\",\n  NonStruct: \"none\",\n  // Block level structure types\n  P: null,\n  // H<n>,\n  H: \"heading\",\n  Title: null,\n  FENote: \"note\",\n  // Sub-block level structure type\n  Sub: \"group\",\n  // General inline level structure types\n  Lbl: null,\n  Span: null,\n  Em: null,\n  Strong: null,\n  Link: \"link\",\n  Annot: \"note\",\n  Form: \"form\",\n  // Ruby and Warichu structure types\n  Ruby: null,\n  RB: null,\n  RT: null,\n  RP: null,\n  Warichu: null,\n  WT: null,\n  WP: null,\n  // List standard structure types\n  L: \"list\",\n  LI: \"listitem\",\n  LBody: null,\n  // Table standard structure types\n  Table: \"table\",\n  TR: \"row\",\n  TH: \"columnheader\",\n  TD: \"cell\",\n  THead: \"columnheader\",\n  TBody: null,\n  TFoot: null,\n  // Standard structure type Caption\n  Caption: null,\n  // Standard structure type Figure\n  Figure: \"figure\",\n  // Standard structure type Formula\n  Formula: null,\n  // standard structure type Artifact\n  Artifact: null,\n};\n\nconst HEADING_PATTERN = /^H(\\d+)$/;\n\nclass StructTreeLayerBuilder {\n  #treeDom = undefined;\n\n  get renderingDone() {\n    return this.#treeDom !== undefined;\n  }\n\n  render(structTree) {\n    if (this.#treeDom !== undefined) {\n      return this.#treeDom;\n    }\n    const treeDom = this.#walk(structTree);\n    treeDom?.classList.add(\"structTree\");\n    return (this.#treeDom = treeDom);\n  }\n\n  hide() {\n    if (this.#treeDom && !this.#treeDom.hidden) {\n      this.#treeDom.hidden = true;\n    }\n  }\n\n  show() {\n    if (this.#treeDom?.hidden) {\n      this.#treeDom.hidden = false;\n    }\n  }\n\n  #setAttributes(structElement, htmlElement) {\n    const { alt, id, lang } = structElement;\n    if (alt !== undefined) {\n      htmlElement.setAttribute(\"aria-label\", removeNullCharacters(alt));\n    }\n    if (id !== undefined) {\n      htmlElement.setAttribute(\"aria-owns\", id);\n    }\n    if (lang !== undefined) {\n      htmlElement.setAttribute(\n        \"lang\",\n        removeNullCharacters(lang, /* replaceInvisible = */ true)\n      );\n    }\n  }\n\n  #walk(node) {\n    if (!node) {\n      return null;\n    }\n\n    const element = document.createElement(\"span\");\n    if (\"role\" in node) {\n      const { role } = node;\n      const match = role.match(HEADING_PATTERN);\n      if (match) {\n        element.setAttribute(\"role\", \"heading\");\n        element.setAttribute(\"aria-level\", match[1]);\n      } else if (PDF_ROLE_TO_HTML_ROLE[role]) {\n        element.setAttribute(\"role\", PDF_ROLE_TO_HTML_ROLE[role]);\n      }\n    }\n\n    this.#setAttributes(node, element);\n\n    if (node.children) {\n      if (node.children.length === 1 && \"id\" in node.children[0]) {\n        // Often there is only one content node so just set the values on the\n        // parent node to avoid creating an extra span.\n        this.#setAttributes(node.children[0], element);\n      } else {\n        for (const kid of node.children) {\n          element.append(this.#walk(kid));\n        }\n      }\n    }\n    return element;\n  }\n}\n\nexport { StructTreeLayerBuilder };\n","/* Copyright 2022 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 { binarySearchFirstItem } from \"./ui_utils.js\";\n\n/**\n * This class aims to provide some methods:\n *  - to reorder elements in the DOM with respect to the visual order;\n *  - to create a link, using aria-owns, between spans in the textLayer and\n *    annotations in the annotationLayer. The goal is to help to know\n *    where the annotations are in the text flow.\n */\nclass TextAccessibilityManager {\n  #enabled = false;\n\n  #textChildren = null;\n\n  #textNodes = new Map();\n\n  #waitingElements = new Map();\n\n  setTextMapping(textDivs) {\n    this.#textChildren = textDivs;\n  }\n\n  /**\n   * Compare the positions of two elements, it must correspond to\n   * the visual ordering.\n   *\n   * @param {HTMLElement} e1\n   * @param {HTMLElement} e2\n   * @returns {number}\n   */\n  static #compareElementPositions(e1, e2) {\n    const rect1 = e1.getBoundingClientRect();\n    const rect2 = e2.getBoundingClientRect();\n\n    if (rect1.width === 0 && rect1.height === 0) {\n      return +1;\n    }\n\n    if (rect2.width === 0 && rect2.height === 0) {\n      return -1;\n    }\n\n    const top1 = rect1.y;\n    const bot1 = rect1.y + rect1.height;\n    const mid1 = rect1.y + rect1.height / 2;\n\n    const top2 = rect2.y;\n    const bot2 = rect2.y + rect2.height;\n    const mid2 = rect2.y + rect2.height / 2;\n\n    if (mid1 <= top2 && mid2 >= bot1) {\n      return -1;\n    }\n\n    if (mid2 <= top1 && mid1 >= bot2) {\n      return +1;\n    }\n\n    const centerX1 = rect1.x + rect1.width / 2;\n    const centerX2 = rect2.x + rect2.width / 2;\n\n    return centerX1 - centerX2;\n  }\n\n  /**\n   * Function called when the text layer has finished rendering.\n   */\n  enable() {\n    if (this.#enabled) {\n      throw new Error(\"TextAccessibilityManager is already enabled.\");\n    }\n    if (!this.#textChildren) {\n      throw new Error(\"Text divs and strings have not been set.\");\n    }\n\n    this.#enabled = true;\n    this.#textChildren = this.#textChildren.slice();\n    this.#textChildren.sort(TextAccessibilityManager.#compareElementPositions);\n\n    if (this.#textNodes.size > 0) {\n      // Some links have been made before this manager has been disabled, hence\n      // we restore them.\n      const textChildren = this.#textChildren;\n      for (const [id, nodeIndex] of this.#textNodes) {\n        const element = document.getElementById(id);\n        if (!element) {\n          // If the page was *fully* reset the element no longer exists, and it\n          // will be re-inserted later (i.e. when the annotationLayer renders).\n          this.#textNodes.delete(id);\n          continue;\n        }\n        this.#addIdToAriaOwns(id, textChildren[nodeIndex]);\n      }\n    }\n\n    for (const [element, isRemovable] of this.#waitingElements) {\n      this.addPointerInTextLayer(element, isRemovable);\n    }\n    this.#waitingElements.clear();\n  }\n\n  disable() {\n    if (!this.#enabled) {\n      return;\n    }\n\n    // Don't clear this.#textNodes which is used to rebuild the aria-owns\n    // in case it's re-enabled at some point.\n\n    this.#waitingElements.clear();\n    this.#textChildren = null;\n    this.#enabled = false;\n  }\n\n  /**\n   * Remove an aria-owns id from a node in the text layer.\n   * @param {HTMLElement} element\n   */\n  removePointerInTextLayer(element) {\n    if (!this.#enabled) {\n      this.#waitingElements.delete(element);\n      return;\n    }\n\n    const children = this.#textChildren;\n    if (!children || children.length === 0) {\n      return;\n    }\n\n    const { id } = element;\n    const nodeIndex = this.#textNodes.get(id);\n    if (nodeIndex === undefined) {\n      return;\n    }\n\n    const node = children[nodeIndex];\n\n    this.#textNodes.delete(id);\n    let owns = node.getAttribute(\"aria-owns\");\n    if (owns?.includes(id)) {\n      owns = owns\n        .split(\" \")\n        .filter(x => x !== id)\n        .join(\" \");\n      if (owns) {\n        node.setAttribute(\"aria-owns\", owns);\n      } else {\n        node.removeAttribute(\"aria-owns\");\n        node.setAttribute(\"role\", \"presentation\");\n      }\n    }\n  }\n\n  #addIdToAriaOwns(id, node) {\n    const owns = node.getAttribute(\"aria-owns\");\n    if (!owns?.includes(id)) {\n      node.setAttribute(\"aria-owns\", owns ? `${owns} ${id}` : id);\n    }\n    node.removeAttribute(\"role\");\n  }\n\n  /**\n   * Find the text node which is the nearest and add an aria-owns attribute\n   * in order to correctly position this editor in the text flow.\n   * @param {HTMLElement} element\n   * @param {boolean} isRemovable\n   * @returns {string|null} The id in the struct tree if any.\n   */\n  addPointerInTextLayer(element, isRemovable) {\n    const { id } = element;\n    if (!id) {\n      return null;\n    }\n\n    if (!this.#enabled) {\n      // The text layer needs to be there, so we postpone the association.\n      this.#waitingElements.set(element, isRemovable);\n      return null;\n    }\n\n    if (isRemovable) {\n      this.removePointerInTextLayer(element);\n    }\n\n    const children = this.#textChildren;\n    if (!children || children.length === 0) {\n      return null;\n    }\n\n    const index = binarySearchFirstItem(\n      children,\n      node =>\n        TextAccessibilityManager.#compareElementPositions(element, node) < 0\n    );\n\n    const nodeIndex = Math.max(0, index - 1);\n    const child = children[nodeIndex];\n    this.#addIdToAriaOwns(id, child);\n    this.#textNodes.set(id, nodeIndex);\n\n    const parent = child.parentNode;\n    return parent?.classList.contains(\"markedContent\") ? parent.id : null;\n  }\n\n  /**\n   * Move a div in the DOM in order to respect the visual order.\n   * @param {HTMLDivElement} element\n   * @returns {string|null} The id in the struct tree if any.\n   */\n  moveElementInDOM(container, element, contentElement, isRemovable) {\n    const id = this.addPointerInTextLayer(contentElement, isRemovable);\n\n    if (!container.hasChildNodes()) {\n      container.append(element);\n      return id;\n    }\n\n    const children = Array.from(container.childNodes).filter(\n      node => node !== element\n    );\n\n    if (children.length === 0) {\n      return id;\n    }\n\n    const elementToCompare = contentElement || element;\n    const index = binarySearchFirstItem(\n      children,\n      node =>\n        TextAccessibilityManager.#compareElementPositions(\n          elementToCompare,\n          node\n        ) < 0\n    );\n\n    if (index === 0) {\n      children[0].before(element);\n    } else {\n      children[index - 1].after(element);\n    }\n\n    return id;\n  }\n}\n\nexport { TextAccessibilityManager };\n","/* Copyright 2021 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/** @typedef {import(\"./event_utils\").EventBus} EventBus */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./pdf_find_controller\").PDFFindController} PDFFindController */\n\n/**\n * @typedef {Object} TextHighlighterOptions\n * @property {PDFFindController} findController\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} pageIndex - The page index.\n */\n\n/**\n * TextHighlighter handles highlighting matches from the FindController in\n * either the text layer or XFA layer depending on the type of document.\n */\nclass TextHighlighter {\n  #eventAbortController = null;\n\n  /**\n   * @param {TextHighlighterOptions} options\n   */\n  constructor({ findController, eventBus, pageIndex }) {\n    this.findController = findController;\n    this.matches = [];\n    this.eventBus = eventBus;\n    this.pageIdx = pageIndex;\n    this.textDivs = null;\n    this.textContentItemsStr = null;\n    this.enabled = false;\n  }\n\n  /**\n   * Store two arrays that will map DOM nodes to text they should contain.\n   * The arrays should be of equal length and the array element at each index\n   * should correspond to the other. e.g.\n   * `items[0] = \"<span>Item 0</span>\" and texts[0] = \"Item 0\";\n   *\n   * @param {Array<Node>} divs\n   * @param {Array<string>} texts\n   */\n  setTextMapping(divs, texts) {\n    this.textDivs = divs;\n    this.textContentItemsStr = texts;\n  }\n\n  /**\n   * Start listening for events to update the highlighter and check if there are\n   * any current matches that need be highlighted.\n   */\n  enable() {\n    if (!this.textDivs || !this.textContentItemsStr) {\n      throw new Error(\"Text divs and strings have not been set.\");\n    }\n    if (this.enabled) {\n      throw new Error(\"TextHighlighter is already enabled.\");\n    }\n    this.enabled = true;\n\n    if (!this.#eventAbortController) {\n      this.#eventAbortController = new AbortController();\n\n      this.eventBus._on(\n        \"updatetextlayermatches\",\n        evt => {\n          if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {\n            this._updateMatches();\n          }\n        },\n        { signal: this.#eventAbortController.signal }\n      );\n    }\n    this._updateMatches();\n  }\n\n  disable() {\n    if (!this.enabled) {\n      return;\n    }\n    this.enabled = false;\n\n    this.#eventAbortController?.abort();\n    this.#eventAbortController = null;\n\n    this._updateMatches(/* reset = */ true);\n  }\n\n  _convertMatches(matches, matchesLength) {\n    // Early exit if there is nothing to convert.\n    if (!matches) {\n      return [];\n    }\n    const { textContentItemsStr } = this;\n\n    let i = 0,\n      iIndex = 0;\n    const end = textContentItemsStr.length - 1;\n    const result = [];\n\n    for (let m = 0, mm = matches.length; m < mm; m++) {\n      // Calculate the start position.\n      let matchIdx = matches[m];\n\n      // Loop over the divIdxs.\n      while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {\n        iIndex += textContentItemsStr[i].length;\n        i++;\n      }\n\n      if (i === textContentItemsStr.length) {\n        console.error(\"Could not find a matching mapping\");\n      }\n\n      const match = {\n        begin: {\n          divIdx: i,\n          offset: matchIdx - iIndex,\n        },\n      };\n\n      // Calculate the end position.\n      matchIdx += matchesLength[m];\n\n      // Somewhat the same array as above, but use > instead of >= to get\n      // the end position right.\n      while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {\n        iIndex += textContentItemsStr[i].length;\n        i++;\n      }\n\n      match.end = {\n        divIdx: i,\n        offset: matchIdx - iIndex,\n      };\n      result.push(match);\n    }\n    return result;\n  }\n\n  _renderMatches(matches) {\n    // Early exit if there is nothing to render.\n    if (matches.length === 0) {\n      return;\n    }\n    const { findController, pageIdx } = this;\n    const { textContentItemsStr, textDivs } = this;\n\n    const isSelectedPage = pageIdx === findController.selected.pageIdx;\n    const selectedMatchIdx = findController.selected.matchIdx;\n    const highlightAll = findController.state.highlightAll;\n    let prevEnd = null;\n    const infinity = {\n      divIdx: -1,\n      offset: undefined,\n    };\n\n    function beginText(begin, className) {\n      const divIdx = begin.divIdx;\n      textDivs[divIdx].textContent = \"\";\n      return appendTextToDiv(divIdx, 0, begin.offset, className);\n    }\n\n    function appendTextToDiv(divIdx, fromOffset, toOffset, className) {\n      let div = textDivs[divIdx];\n      if (div.nodeType === Node.TEXT_NODE) {\n        const span = document.createElement(\"span\");\n        div.before(span);\n        span.append(div);\n        textDivs[divIdx] = span;\n        div = span;\n      }\n      const content = textContentItemsStr[divIdx].substring(\n        fromOffset,\n        toOffset\n      );\n      const node = document.createTextNode(content);\n      if (className) {\n        const span = document.createElement(\"span\");\n        span.className = `${className} appended`;\n        span.append(node);\n        div.append(span);\n        return className.includes(\"selected\") ? span.offsetLeft : 0;\n      }\n      div.append(node);\n      return 0;\n    }\n\n    let i0 = selectedMatchIdx,\n      i1 = i0 + 1;\n    if (highlightAll) {\n      i0 = 0;\n      i1 = matches.length;\n    } else if (!isSelectedPage) {\n      // Not highlighting all and this isn't the selected page, so do nothing.\n      return;\n    }\n\n    let lastDivIdx = -1;\n    let lastOffset = -1;\n    for (let i = i0; i < i1; i++) {\n      const match = matches[i];\n      const begin = match.begin;\n      if (begin.divIdx === lastDivIdx && begin.offset === lastOffset) {\n        // It's possible to be in this situation if we searched for a 'f' and we\n        // have a ligature 'ff' in the text. The 'ff' has to be highlighted two\n        // times.\n        continue;\n      }\n      lastDivIdx = begin.divIdx;\n      lastOffset = begin.offset;\n\n      const end = match.end;\n      const isSelected = isSelectedPage && i === selectedMatchIdx;\n      const highlightSuffix = isSelected ? \" selected\" : \"\";\n      let selectedLeft = 0;\n\n      // Match inside new div.\n      if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {\n        // If there was a previous div, then add the text at the end.\n        if (prevEnd !== null) {\n          appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n        }\n        // Clear the divs and set the content until the starting point.\n        beginText(begin);\n      } else {\n        appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);\n      }\n\n      if (begin.divIdx === end.divIdx) {\n        selectedLeft = appendTextToDiv(\n          begin.divIdx,\n          begin.offset,\n          end.offset,\n          \"highlight\" + highlightSuffix\n        );\n      } else {\n        selectedLeft = appendTextToDiv(\n          begin.divIdx,\n          begin.offset,\n          infinity.offset,\n          \"highlight begin\" + highlightSuffix\n        );\n        for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {\n          textDivs[n0].className = \"highlight middle\" + highlightSuffix;\n        }\n        beginText(end, \"highlight end\" + highlightSuffix);\n      }\n      prevEnd = end;\n\n      if (isSelected) {\n        // Attempt to scroll the selected match into view.\n        findController.scrollMatchIntoView({\n          element: textDivs[begin.divIdx],\n          selectedLeft,\n          pageIndex: pageIdx,\n          matchIndex: selectedMatchIdx,\n        });\n      }\n    }\n\n    if (prevEnd) {\n      appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n    }\n  }\n\n  _updateMatches(reset = false) {\n    if (!this.enabled && !reset) {\n      return;\n    }\n    const { findController, matches, pageIdx } = this;\n    const { textContentItemsStr, textDivs } = this;\n    let clearedUntilDivIdx = -1;\n\n    // Clear all current matches.\n    for (const match of matches) {\n      const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);\n      for (let n = begin, end = match.end.divIdx; n <= end; n++) {\n        const div = textDivs[n];\n        div.textContent = textContentItemsStr[n];\n        div.className = \"\";\n      }\n      clearedUntilDivIdx = match.end.divIdx + 1;\n    }\n\n    if (!findController?.highlightMatches || reset) {\n      return;\n    }\n    // Convert the matches on the `findController` into the match format\n    // used for the textLayer.\n    const pageMatches = findController.pageMatches[pageIdx] || null;\n    const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;\n\n    this.matches = this._convertMatches(pageMatches, pageMatchesLength);\n    this._renderMatches(this.matches);\n  }\n}\n\nexport { TextHighlighter };\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\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"../src/display/api\").TextContent} TextContent */\n/** @typedef {import(\"./text_highlighter\").TextHighlighter} TextHighlighter */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"./text_accessibility.js\").TextAccessibilityManager} TextAccessibilityManager */\n\nimport { normalizeUnicode, renderTextLayer, updateTextLayer } from \"pdfjs-lib\";\nimport { removeNullCharacters } from \"./ui_utils.js\";\n\n/**\n * @typedef {Object} TextLayerBuilderOptions\n * @property {TextHighlighter} highlighter - Optional object that will handle\n *   highlighting text from the find controller.\n * @property {TextAccessibilityManager} [accessibilityManager]\n * @property {function} [onAppend]\n */\n\n/**\n * The text layer builder provides text selection functionality for the PDF.\n * It does this by creating overlay divs over the PDF's text. These divs\n * contain text that matches the PDF text they are overlaying.\n */\nclass TextLayerBuilder {\n  #enablePermissions = false;\n\n  #onAppend = null;\n\n  #rotation = 0;\n\n  #scale = 0;\n\n  #textContentSource = null;\n\n  constructor({\n    highlighter = null,\n    accessibilityManager = null,\n    enablePermissions = false,\n    onAppend = null,\n  }) {\n    this.textContentItemsStr = [];\n    this.renderingDone = false;\n    this.textDivs = [];\n    this.textDivProperties = new WeakMap();\n    this.textLayerRenderTask = null;\n    this.highlighter = highlighter;\n    this.accessibilityManager = accessibilityManager;\n    this.#enablePermissions = enablePermissions === true;\n    this.#onAppend = onAppend;\n\n    this.div = document.createElement(\"div\");\n    this.div.tabIndex = 0;\n    this.div.className = \"textLayer\";\n  }\n\n  #finishRendering() {\n    this.renderingDone = true;\n\n    const endOfContent = document.createElement(\"div\");\n    endOfContent.className = \"endOfContent\";\n    this.div.append(endOfContent);\n\n    this.#bindMouse();\n  }\n\n  get numTextDivs() {\n    return this.textDivs.length;\n  }\n\n  /**\n   * Renders the text layer.\n   * @param {PageViewport} viewport\n   */\n  async render(viewport) {\n    if (!this.#textContentSource) {\n      throw new Error('No \"textContentSource\" parameter specified.');\n    }\n\n    const scale = viewport.scale * (globalThis.devicePixelRatio || 1);\n    const { rotation } = viewport;\n    if (this.renderingDone) {\n      const mustRotate = rotation !== this.#rotation;\n      const mustRescale = scale !== this.#scale;\n      if (mustRotate || mustRescale) {\n        this.hide();\n        updateTextLayer({\n          container: this.div,\n          viewport,\n          textDivs: this.textDivs,\n          textDivProperties: this.textDivProperties,\n          mustRescale,\n          mustRotate,\n        });\n        this.#scale = scale;\n        this.#rotation = rotation;\n      }\n      this.show();\n      return;\n    }\n\n    this.cancel();\n    this.highlighter?.setTextMapping(this.textDivs, this.textContentItemsStr);\n    this.accessibilityManager?.setTextMapping(this.textDivs);\n\n    this.textLayerRenderTask = renderTextLayer({\n      textContentSource: this.#textContentSource,\n      container: this.div,\n      viewport,\n      textDivs: this.textDivs,\n      textDivProperties: this.textDivProperties,\n      textContentItemsStr: this.textContentItemsStr,\n    });\n\n    await this.textLayerRenderTask.promise;\n    this.#finishRendering();\n    this.#scale = scale;\n    this.#rotation = rotation;\n    // Ensure that the textLayer is appended to the DOM *before* handling\n    // e.g. a pending search operation.\n    this.#onAppend?.(this.div);\n    this.highlighter?.enable();\n    this.accessibilityManager?.enable();\n  }\n\n  hide() {\n    if (!this.div.hidden && this.renderingDone) {\n      // We turn off the highlighter in order to avoid to scroll into view an\n      // element of the text layer which could be hidden.\n      this.highlighter?.disable();\n      this.div.hidden = true;\n    }\n  }\n\n  show() {\n    if (this.div.hidden && this.renderingDone) {\n      this.div.hidden = false;\n      this.highlighter?.enable();\n    }\n  }\n\n  /**\n   * Cancel rendering of the text layer.\n   */\n  cancel() {\n    if (this.textLayerRenderTask) {\n      this.textLayerRenderTask.cancel();\n      this.textLayerRenderTask = null;\n    }\n    this.highlighter?.disable();\n    this.accessibilityManager?.disable();\n    this.textContentItemsStr.length = 0;\n    this.textDivs.length = 0;\n    this.textDivProperties = new WeakMap();\n  }\n\n  /**\n   * @param {ReadableStream | TextContent} source\n   */\n  setTextContentSource(source) {\n    this.cancel();\n    this.#textContentSource = source;\n  }\n\n  /**\n   * Improves text selection by adding an additional div where the mouse was\n   * clicked. This reduces flickering of the content if the mouse is slowly\n   * dragged up or down.\n   */\n  #bindMouse() {\n    const { div } = this;\n\n    div.addEventListener(\"mousedown\", evt => {\n      const end = div.querySelector(\".endOfContent\");\n      if (!end) {\n        return;\n      }\n      if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n        // On non-Firefox browsers, the selection will feel better if the height\n        // of the `endOfContent` div is adjusted to start at mouse click\n        // location. This avoids flickering when the selection moves up.\n        // However it does not work when selection is started on empty space.\n        let adjustTop = evt.target !== div;\n        if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n          adjustTop &&=\n            getComputedStyle(end).getPropertyValue(\"-moz-user-select\") !==\n            \"none\";\n        }\n        if (adjustTop) {\n          const divBounds = div.getBoundingClientRect();\n          const r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);\n          end.style.top = (r * 100).toFixed(2) + \"%\";\n        }\n      }\n      end.classList.add(\"active\");\n    });\n\n    div.addEventListener(\"mouseup\", () => {\n      const end = div.querySelector(\".endOfContent\");\n      if (!end) {\n        return;\n      }\n      if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"MOZCENTRAL\")) {\n        end.style.top = \"\";\n      }\n      end.classList.remove(\"active\");\n    });\n\n    div.addEventListener(\"copy\", event => {\n      if (!this.#enablePermissions) {\n        const selection = document.getSelection();\n        event.clipboardData.setData(\n          \"text/plain\",\n          removeNullCharacters(normalizeUnicode(selection.toString()))\n        );\n      }\n      event.preventDefault();\n      event.stopPropagation();\n    });\n  }\n}\n\nexport { TextLayerBuilder };\n","/* 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\n/** @typedef {import(\"./event_utils.js\").EventBus} EventBus */\n\nimport { AnnotationEditorType, ColorPicker, noContextMenu } from \"pdfjs-lib\";\nimport {\n  DEFAULT_SCALE,\n  DEFAULT_SCALE_VALUE,\n  MAX_SCALE,\n  MIN_SCALE,\n  toggleCheckedBtn,\n} from \"./ui_utils.js\";\n\n/**\n * @typedef {Object} ToolbarOptions\n * @property {HTMLDivElement} container - Container for the secondary toolbar.\n * @property {HTMLSpanElement} numPages - Label that contains number of pages.\n * @property {HTMLInputElement} pageNumber - Control for display and user input\n *   of the current page number.\n * @property {HTMLSelectElement} scaleSelect - Scale selection control.\n *   Its width is adjusted, when necessary, on UI localization.\n * @property {HTMLOptionElement} customScaleOption - The item used to display\n *   a non-predefined scale.\n * @property {HTMLButtonElement} previous - Button to go to the previous page.\n * @property {HTMLButtonElement} next - Button to go to the next page.\n * @property {HTMLButtonElement} zoomIn - Button to zoom in the pages.\n * @property {HTMLButtonElement} zoomOut - Button to zoom out the pages.\n * @property {HTMLButtonElement} viewFind - Button to open find bar.\n * @property {HTMLButtonElement} editorFreeTextButton - Button to switch to\n *   FreeText editing.\n * @property {HTMLButtonElement} download - Button to download the document.\n */\n\nclass Toolbar {\n  #opts;\n\n  /**\n   * @param {ToolbarOptions} options\n   * @param {EventBus} eventBus\n   */\n  constructor(appConfig, eventBus) {\n    this.#opts = appConfig.toolbar;\n    this.eventBus = eventBus;\n    const options = appConfig.toolbar;\n    const buttons = [\n      { element: options.firstPageButton, eventName: \"firstpage\" },\n      { element: options.previous, eventName: \"previouspage\" },\n      { element: options.next, eventName: \"nextpage\" },\n      { element: options.lastPageButton, eventName: \"lastpage\" },\n      { element: options.zoomIn, eventName: \"zoomin\" },\n      { element: options.zoomOut, eventName: \"zoomout\" },\n      { element: options.print, eventName: \"print\" },\n      { element: options.viewAttachments, eventName: \"download\" },\n      {\n        element: options.editorFreeTextButton,\n        eventName: \"switchannotationeditormode\",\n        eventDetails: {\n          get mode() {\n            const { classList } = options.editorFreeTextButton;\n            return classList.contains(\"toggled\")\n              ? AnnotationEditorType.NONE\n              : AnnotationEditorType.FREETEXT;\n          },\n          positionParamsToolbar() {\n            const freeTextParamsToolbar = options.editorFreeTextParamsToolbar;\n            const freeTextButton = options.editorFreeTextButton;\n            const containerRect =\n              PDFViewerApplication.pdfViewer.container.getBoundingClientRect();\n            const freeTextButtonRect = freeTextButton.getBoundingClientRect();\n            freeTextParamsToolbar.style.top = `var(--annotationToolbar-top-offset)`;\n            const annotationToolbarRightOffset = getComputedStyle(\n              document.documentElement\n            ).getPropertyValue(\"--annotationToolbar-right-offset\");\n            const offset = Number(annotationToolbarRightOffset.split(\"px\")[0]);\n            const halfOffset = offset / 2;\n            freeTextParamsToolbar.style.right =\n              containerRect.right - freeTextButtonRect.right - halfOffset + \"px\";\n          },\n        },\n      },\n      {\n        element: appConfig.signatureDialog.addTextOption,\n        eventName: \"addSignatureTextOption\",\n        eventDetails: {\n          get mode() {\n            return AnnotationEditorType.FREETEXT;\n          },\n        },\n      },\n      {\n        element: options.editorHighlightButton,\n        eventName: \"switchannotationeditormode\",\n        eventDetails: {\n          get mode() {\n            const { classList } = options.editorHighlightButton;\n            return classList.contains(\"toggled\")\n              ? AnnotationEditorType.NONE\n              : AnnotationEditorType.HIGHLIGHT;\n          },\n        },\n      },\n      {\n        element: options.editorInkButton,\n        eventName: \"switchannotationeditormode\",\n        eventDetails: {\n          get mode() {\n            const { classList } = options.editorInkButton;\n            return classList.contains(\"toggled\")\n              ? AnnotationEditorType.NONE\n              : AnnotationEditorType.INK;\n          },\n        },\n      },\n      {\n        element: appConfig.signatureDialog.trackpadMouseOption,\n        eventName: \"switchannotationeditormode\",\n        eventDetails: {\n          get mode() {\n            const { classList } = appConfig.signatureDialog.trackpadMouseOption;\n            appConfig.toolbar.editorInkButton.click();\n            appConfig.signatureDialog.closeButton.click();\n            appConfig.toolbar.editorInkParamsToolbar.classList.add(\"hidden\");\n            PDFViewerApplication.showSignatureActionButtons(true);\n            return AnnotationEditorType.INK;\n          },\n        },\n      },\n      {\n        element: options.editorStampButton,\n        eventName: \"switchannotationeditormode\",\n        eventDetails: {\n          get mode() {\n            const { classList } = options.editorStampButton;\n            return classList.contains(\"toggled\")\n              ? AnnotationEditorType.NONE\n              : AnnotationEditorType.STAMP;\n          },\n          positionParamsToolbar() {\n            const stampParamsToolbar = options.editorStampParamsToolbar;\n            const stampButton = options.editorStampButton;\n            const containerRect =\n            PDFViewerApplication.pdfViewer.container.getBoundingClientRect();\n            const stampButtonRect = stampButton.getBoundingClientRect();\n            stampParamsToolbar.style.top = `var(--annotationToolbar-top-offset)`;\n            stampParamsToolbar.style.left =\n              stampButtonRect.left - containerRect.left + \"px\";\n          },\n        },\n      },\n      {\n        element: appConfig.signatureDialog.uploadImageOption,\n        eventName: \"switchannotationeditormode\",\n        eventDetails: {\n          get mode() {\n            const { classList } = appConfig.signatureDialog.uploadImageOption;\n            appConfig.toolbar.editorStampButton.click();\n            appConfig.signatureDialog.closeButton.click();\n            appConfig.toolbar.editorStampParamsToolbar.classList.add(\"hidden\");\n            PDFViewerApplication.showSignatureActionButtons(true);\n            return AnnotationEditorType.STAMP;\n          },\n        },\n      },\n      {\n        element: options.editorRedactionButton,\n        eventName: \"switchannotationeditormode\",\n        eventDetails: {\n          get mode() {\n            const { classList } = options.editorRedactionButton;\n            return classList.contains(\"toggled\")\n              ? AnnotationEditorType.NONE\n              : AnnotationEditorType.REDACTION;\n          },\n        },\n      },\n      {\n        element: options.editorCommentButton,\n        eventName: \"togglecommentstoolbar\",\n        eventDetails: {\n          get toggle() {\n            const { classList } = options.editorCommentButton;\n            return !classList.contains(\"toggled\");\n          },\n        },\n      },\n      {\n        element: options.editorNoteAddComment,\n        eventName: \"switchannotationeditormode\",\n        eventDetails: {\n          get mode() {\n            const { classList } = options.editorNoteAddComment;\n            return classList.contains(\"toggled\")\n              ? AnnotationEditorType.NONE\n              : AnnotationEditorType.TEXT;\n          },\n        },\n      },\n      {\n        element: options.editorNoteVisibility,\n        eventName: \"switchannotationeditormode\",\n        eventDetails: {\n          get mode() {\n            const { editorNoteVisibility, editorNoteAddComment } = options;\n            editorNoteAddComment.classList.remove(\"toggled\");\n            const isHidden =\n              editorNoteVisibility.classList.toggle(\"annotationsHidden\");\n            document.querySelectorAll(\".textAnnotation\").forEach(layer => {\n              layer.classList.toggle(\"hidden\", isHidden);\n            });\n            editorNoteVisibility.classList.toggle(\"fa-eye\");\n            editorNoteVisibility.classList.toggle(\"fa-eye-slash\");\n            return AnnotationEditorType.NONE;\n          },\n        },\n      },\n      { element: options.extractAnnotations, eventName: \"extractannotations\" },\n      {\n        element: options.toggleAnnotationsToolbarButton,\n        eventName: \"toggleannotationstoolbar\",\n        eventDetails: {\n          get toggle() {\n            const { classList } = options.toggleAnnotationsToolbarButton;\n            return !classList.contains(\"toggled\");\n          },\n        },\n      },\n      {\n        element: options.toggleAnnotationsVisibilityButton,\n        eventName: \"toggleannotationsvisibility\",\n      },\n    ];\n\n    // Bind the event listeners for click and various other actions.\n    this.#bindListeners(buttons);\n\n    this.reset();\n  }\n\n  #setAnnotationEditorUIManager(uiManager, parentContainer) {\n    const colorPicker = new ColorPicker({ uiManager });\n    uiManager.setMainHighlightColorPicker(colorPicker);\n\n    //We need to do this to make sure that only one color dropdown is created\n    // (had an issue of having multiple color dropdowns on i-dos)\n    const existingColorsDropdown = parentContainer.querySelector(\".dropdown\");\n\n    if (existingColorsDropdown) {\n      existingColorsDropdown.remove();\n    }\n\n    parentContainer.append(colorPicker.renderMainDropdown());\n  }\n\n  setHidden(hidden) {\n    const toolbarContainer = this.#opts.container.parentNode.parentNode;\n    if (hidden) {\n      toolbarContainer.classList.add(\"hidden\");\n    } else {\n      toolbarContainer.classList.remove(\"hidden\");\n    }\n  }\n\n  setPageNumber(pageNumber, pageLabel) {\n    this.pageNumber = pageNumber;\n    this.pageLabel = pageLabel;\n    this.#updateUIState(false);\n  }\n\n  setPagesCount(pagesCount, hasPageLabels) {\n    this.pagesCount = pagesCount;\n    this.hasPageLabels = hasPageLabels;\n    this.#updateUIState(true);\n  }\n\n  setPageScale(pageScaleValue, pageScale) {\n    this.pageScaleValue = (pageScaleValue || pageScale).toString();\n    this.pageScale = pageScale;\n    this.#updateUIState(false);\n  }\n\n  reset() {\n    this.pageNumber = 0;\n    this.pageLabel = null;\n    this.hasPageLabels = false;\n    this.pagesCount = 0;\n    this.pageScaleValue = DEFAULT_SCALE_VALUE;\n    this.pageScale = DEFAULT_SCALE;\n    this.#updateUIState(true);\n    this.updateLoadingIndicatorState();\n\n    // Reset the Editor buttons too, since they're document specific.\n    this.#editorModeChanged({ mode: AnnotationEditorType.DISABLE });\n  }\n\n  #bindListeners(buttons) {\n    if (this._toolbarAbortController) {\n      return;\n    }\n    this._toolbarAbortController = new AbortController();\n\n    const {\n      eventBus,\n      _toolbarAbortController: { signal },\n    } = this;\n    const {\n      pageNumber,\n      scaleSelect,\n      editorHighlightColorPicker,\n      editorHighlightButton,\n    } = this.#opts;\n    const self = this;\n\n    // The buttons within the toolbar.\n    for (const { element, eventName, eventDetails } of buttons) {\n      element.addEventListener(\n        \"click\",\n        evt => {\n          if (eventName !== null) {\n            eventBus.dispatch(eventName, {\n              source: this,\n              ...eventDetails,\n              // evt.detail is the number of clicks.\n              isFromKeyboard: evt.detail === 0,\n            });\n            if (eventDetails.positionParamsToolbar) {\n              eventDetails.positionParamsToolbar();\n            }\n          }\n        },\n        { signal }\n      );\n    }\n    // The non-button elements within the toolbar.\n    pageNumber.addEventListener(\n      \"click\",\n      function () {\n        this.select();\n      },\n      { signal }\n    );\n    pageNumber.addEventListener(\n      \"change\",\n      function () {\n        eventBus.dispatch(\"pagenumberchanged\", {\n          source: self,\n          value: this.value,\n        });\n      },\n      { signal }\n    );\n\n    scaleSelect.addEventListener(\n      \"change\",\n      function () {\n        if (this.value === \"custom\") {\n          return;\n        }\n        eventBus.dispatch(\"scalechanged\", {\n          source: self,\n          value: this.value,\n        });\n      },\n      { signal }\n    );\n    // Here we depend on browsers dispatching the \"click\" event *after* the\n    // \"change\" event, when the <select>-element changes.\n    scaleSelect.addEventListener(\n      \"click\",\n      function ({ target }) {\n        // Remove focus when an <option>-element was *clicked*, to improve the UX\n        // for mouse users (fixes bug 1300525 and issue 4923).\n        if (\n          this.value === self.pageScaleValue &&\n          target.tagName.toUpperCase() === \"OPTION\"\n        ) {\n          this.blur();\n        }\n      },\n      { signal }\n    );\n    // Suppress context menus for some controls.\n    scaleSelect.oncontextmenu = noContextMenu;\n\n    eventBus._on(\n      \"annotationeditormodechanged\",\n      this.#editorModeChanged.bind(this),\n      { signal }\n    );\n\n    if (editorHighlightColorPicker) {\n      eventBus._on(\n        \"annotationeditoruimanager\",\n        ({ uiManager }) => {\n          this.#setAnnotationEditorUIManager(\n            uiManager,\n            editorHighlightColorPicker\n          );\n        },\n        // Once the color picker has been added, we don't want to add it again.\n        { once: true, signal }\n      );\n    }\n\n    eventBus._on(\n      \"showannotationeditorui\",\n      ({ mode }) => {\n        switch (mode) {\n          case AnnotationEditorType.HIGHLIGHT:\n            editorHighlightButton.click();\n            break;\n        }\n      },\n      { signal }\n    );\n  }\n\n  unbindListeners() {\n    this._toolbarAbortController?.abort();\n    this._toolbarAbortController = null;\n  }\n\n  #editorModeChanged({ mode }) {\n    const {\n      editorFreeTextButton,\n      editorFreeTextParamsToolbar,\n      editorHighlightButton,\n      editorHighlightParamsToolbar,\n      editorInkButton,\n      editorInkParamsToolbar,\n      editorStampButton,\n      editorStampParamsToolbar,\n      editorCommentButton,\n      editorRedactionButton,\n      editorRedactionParamsToolbar,\n      editorNoteAddComment,\n    } = this.#opts;\n\n    toggleCheckedBtn(\n      editorFreeTextButton,\n      mode === AnnotationEditorType.FREETEXT,\n      editorFreeTextParamsToolbar\n    );\n    toggleCheckedBtn(\n      editorHighlightButton,\n      mode === AnnotationEditorType.HIGHLIGHT,\n      editorHighlightParamsToolbar\n    );\n    toggleCheckedBtn(\n      editorInkButton,\n      mode === AnnotationEditorType.INK,\n      editorInkParamsToolbar\n    );\n    toggleCheckedBtn(\n      editorStampButton,\n      mode === AnnotationEditorType.STAMP,\n      editorStampParamsToolbar\n    );\n    toggleCheckedBtn(\n      editorRedactionButton,\n      mode === AnnotationEditorType.REDACTION,\n      editorRedactionParamsToolbar\n    );\n    toggleCheckedBtn(editorNoteAddComment, mode === AnnotationEditorType.TEXT);\n\n    const isDisable = mode === AnnotationEditorType.DISABLE;\n    editorFreeTextButton.disabled = isDisable;\n    editorHighlightButton.disabled = isDisable;\n    editorInkButton.disabled = isDisable;\n    editorStampButton.disabled = isDisable;\n    editorRedactionButton.disabled = isDisable;\n    editorCommentButton.disabled = isDisable;\n  }\n\n  #updateUIState(resetNumPages = false) {\n    const { pageNumber, pagesCount, pageScaleValue, pageScale } = this;\n    const opts = this.#opts;\n\n    if (resetNumPages) {\n      if (this.hasPageLabels) {\n        opts.pageNumber.type = \"text\";\n\n        opts.numPages.setAttribute(\"data-l10n-id\", \"pdfjs-page-of-pages\");\n      } else {\n        opts.pageNumber.type = \"number\";\n\n        opts.numPages.setAttribute(\"data-l10n-id\", \"pdfjs-of-pages\");\n        opts.numPages.setAttribute(\n          \"data-l10n-args\",\n          JSON.stringify({ pagesCount })\n        );\n      }\n      opts.pageNumber.max = pagesCount;\n    }\n\n    if (this.hasPageLabels) {\n      opts.pageNumber.value = this.pageLabel;\n\n      opts.numPages.setAttribute(\n        \"data-l10n-args\",\n        JSON.stringify({ pageNumber, pagesCount })\n      );\n    } else {\n      opts.pageNumber.value = pageNumber;\n    }\n\n    opts.firstPageButton.disabled = pageNumber <= 1;\n    opts.previous.disabled = pageNumber <= 1;\n    opts.next.disabled = pageNumber >= pagesCount;\n    opts.lastPageButton.disabled = pageNumber >= pagesCount;\n\n    opts.zoomOut.disabled = pageScale <= MIN_SCALE;\n    opts.zoomIn.disabled = pageScale >= MAX_SCALE;\n\n    let predefinedValueFound = false;\n    for (const option of opts.scaleSelect.options) {\n      if (option.value !== pageScaleValue) {\n        option.selected = false;\n        continue;\n      }\n      option.selected = true;\n      predefinedValueFound = true;\n    }\n    if (!predefinedValueFound) {\n      opts.customScaleOption.selected = true;\n      opts.customScaleOption.setAttribute(\n        \"data-l10n-args\",\n        JSON.stringify({\n          scale: Math.round(pageScale * 10000) / 100,\n        })\n      );\n    }\n  }\n\n  updateLoadingIndicatorState(loading = false) {\n    const { pageNumber } = this.#opts;\n    pageNumber.classList.toggle(\"loading\", loading);\n  }\n}\n\nexport { Toolbar };\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\nconst DEFAULT_SCALE_VALUE = \"auto\";\nconst DEFAULT_SCALE = 1.0;\nconst DEFAULT_SCALE_DELTA = 1.1;\nconst MIN_SCALE = 0.1;\nconst MAX_SCALE = 10.0;\nconst UNKNOWN_SCALE = 0;\nconst MAX_AUTO_SCALE = 1.25;\nconst SCROLLBAR_PADDING = 40;\nconst VERTICAL_PADDING = 5;\n\nconst RenderingStates = {\n  INITIAL: 0,\n  RUNNING: 1,\n  PAUSED: 2,\n  FINISHED: 3,\n};\n\nconst TextLayerMode = {\n  DISABLE: 0,\n  ENABLE: 1,\n  ENABLE_PERMISSIONS: 2,\n};\n\nconst ScrollMode = {\n  UNKNOWN: -1,\n  VERTICAL: 0, // Default value.\n  HORIZONTAL: 1,\n  WRAPPED: 2,\n  PAGE: 3,\n};\n\nconst SpreadMode = {\n  UNKNOWN: -1,\n  NONE: 0, // Default value.\n  ODD: 1,\n  EVEN: 2,\n};\n\n// Used by `PDFViewerApplication`, and by the API unit-tests.\nconst AutoPrintRegExp = /\\bprint\\s*\\(/;\n\n/**\n * Scale factors for the canvas, necessary with HiDPI displays.\n */\nclass OutputScale {\n  constructor() {\n    const pixelRatio = window.devicePixelRatio || 1;\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/**\n * Scrolls specified element into view of its parent.\n * @param {HTMLElement} element - The element to be visible.\n * @param {Object} [spot] - An object with optional top and left properties,\n *   specifying the offset from the top left edge.\n * @param {number} [spot.left]\n * @param {number} [spot.top]\n * @param {boolean} [scrollMatches] - When scrolling search results into view,\n *   ignore elements that either: Contains marked content identifiers,\n *   or have the CSS-rule `overflow: hidden;` set. The default value is `false`.\n */\nfunction scrollIntoView(element, spot, scrollMatches = false) {\n  // Assuming offsetParent is available (it's not available when viewer is in\n  // hidden iframe or object). We have to scroll: if the offsetParent is not set\n  // producing the error. See also animationStarted.\n  let parent = element.offsetParent;\n  if (!parent) {\n    console.error(\"offsetParent is not set -- cannot scroll\");\n    return;\n  }\n  let offsetY = element.offsetTop + element.clientTop;\n  let offsetX = element.offsetLeft + element.clientLeft;\n  while (\n    (parent.clientHeight === parent.scrollHeight &&\n      parent.clientWidth === parent.scrollWidth) ||\n    (scrollMatches &&\n      (parent.classList.contains(\"markedContent\") ||\n        getComputedStyle(parent).overflow === \"hidden\"))\n  ) {\n    offsetY += parent.offsetTop;\n    offsetX += parent.offsetLeft;\n\n    parent = parent.offsetParent;\n    if (!parent) {\n      return; // no need to scroll\n    }\n  }\n  if (spot) {\n    if (spot.top !== undefined) {\n      offsetY += spot.top;\n    }\n    if (spot.left !== undefined) {\n      offsetX += spot.left;\n      parent.scrollLeft = offsetX;\n    }\n  }\n  parent.scrollTop = offsetY;\n}\n\n/**\n * Helper function to start monitoring the scroll event and converting them into\n * PDF.js friendly one: with scroll debounce and scroll direction.\n */\nfunction watchScroll(viewAreaElement, callback) {\n  const debounceScroll = function (evt) {\n    if (rAF) {\n      return;\n    }\n    // schedule an invocation of scroll for next animation frame.\n    rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n      rAF = null;\n\n      const currentX = viewAreaElement.scrollLeft;\n      const lastX = state.lastX;\n      if (currentX !== lastX) {\n        state.right = currentX > lastX;\n      }\n      state.lastX = currentX;\n      const currentY = viewAreaElement.scrollTop;\n      const lastY = state.lastY;\n      if (currentY !== lastY) {\n        state.down = currentY > lastY;\n      }\n      state.lastY = currentY;\n      callback(state);\n    });\n  };\n\n  const state = {\n    right: true,\n    down: true,\n    lastX: viewAreaElement.scrollLeft,\n    lastY: viewAreaElement.scrollTop,\n    _eventHandler: debounceScroll,\n  };\n\n  let rAF = null;\n  viewAreaElement.addEventListener(\"scroll\", debounceScroll, true);\n  return state;\n}\n\n/**\n * Helper function to parse query string (e.g. ?param1=value&param2=...).\n * @param {string} query\n * @returns {Map}\n */\nfunction parseQueryString(query) {\n  const params = new Map();\n  for (const [key, value] of new URLSearchParams(query)) {\n    params.set(key.toLowerCase(), value);\n  }\n  return params;\n}\n\nconst InvisibleCharsRegExp = /[\\x00-\\x1F]/g;\n\n/**\n * @param {string} str\n * @param {boolean} [replaceInvisible]\n */\nfunction removeNullCharacters(str, replaceInvisible = false) {\n  if (!InvisibleCharsRegExp.test(str)) {\n    return str;\n  }\n  if (replaceInvisible) {\n    return str.replaceAll(InvisibleCharsRegExp, m => (m === \"\\x00\" ? \"\" : \" \"));\n  }\n  return str.replaceAll(\"\\x00\", \"\");\n}\n\n/**\n * Use binary search to find the index of the first item in a given array which\n * passes a given condition. The items are expected to be sorted in the sense\n * that if the condition is true for one item in the array, then it is also true\n * for all following items.\n *\n * @returns {number} Index of the first array element to pass the test,\n *                   or |items.length| if no such element exists.\n */\nfunction binarySearchFirstItem(items, condition, start = 0) {\n  let minIndex = start;\n  let maxIndex = items.length - 1;\n\n  if (maxIndex < 0 || !condition(items[maxIndex])) {\n    return items.length;\n  }\n  if (condition(items[minIndex])) {\n    return minIndex;\n  }\n\n  while (minIndex < maxIndex) {\n    const currentIndex = (minIndex + maxIndex) >> 1;\n    const currentItem = items[currentIndex];\n    if (condition(currentItem)) {\n      maxIndex = currentIndex;\n    } else {\n      minIndex = currentIndex + 1;\n    }\n  }\n  return minIndex; /* === maxIndex */\n}\n\n/**\n *  Approximates float number as a fraction using Farey sequence (max order\n *  of 8).\n *  @param {number} x - Positive float number.\n *  @returns {Array} Estimated fraction: the first array item is a numerator,\n *                   the second one is a denominator.\n */\nfunction approximateFraction(x) {\n  // Fast paths for int numbers or their inversions.\n  if (Math.floor(x) === x) {\n    return [x, 1];\n  }\n  const xinv = 1 / x;\n  const limit = 8;\n  if (xinv > limit) {\n    return [1, limit];\n  } else if (Math.floor(xinv) === xinv) {\n    return [1, xinv];\n  }\n\n  const x_ = x > 1 ? xinv : x;\n  // a/b and c/d are neighbours in Farey sequence.\n  let a = 0,\n    b = 1,\n    c = 1,\n    d = 1;\n  // Limiting search to order 8.\n  while (true) {\n    // Generating next term in sequence (order of q).\n    const p = a + c,\n      q = b + d;\n    if (q > limit) {\n      break;\n    }\n    if (x_ <= p / q) {\n      c = p;\n      d = q;\n    } else {\n      a = p;\n      b = q;\n    }\n  }\n  let result;\n  // Select closest of the neighbours to x.\n  if (x_ - a / b < c / d - x_) {\n    result = x_ === x ? [a, b] : [b, a];\n  } else {\n    result = x_ === x ? [c, d] : [d, c];\n  }\n  return result;\n}\n\nfunction roundToDivide(x, div) {\n  const r = x % div;\n  return r === 0 ? x : Math.round(x - r + div);\n}\n\n/**\n * @typedef {Object} GetPageSizeInchesParameters\n * @property {number[]} view\n * @property {number} userUnit\n * @property {number} rotate\n */\n\n/**\n * @typedef {Object} PageSize\n * @property {number} width - In inches.\n * @property {number} height - In inches.\n */\n\n/**\n * Gets the size of the specified page, converted from PDF units to inches.\n * @param {GetPageSizeInchesParameters} params\n * @returns {PageSize}\n */\nfunction getPageSizeInches({ view, userUnit, rotate }) {\n  const [x1, y1, x2, y2] = view;\n  // We need to take the page rotation into account as well.\n  const changeOrientation = rotate % 180 !== 0;\n\n  const width = ((x2 - x1) / 72) * userUnit;\n  const height = ((y2 - y1) / 72) * userUnit;\n\n  return {\n    width: changeOrientation ? height : width,\n    height: changeOrientation ? width : height,\n  };\n}\n\n/**\n * Helper function for getVisibleElements.\n *\n * @param {number} index - initial guess at the first visible element\n * @param {Array} views - array of pages, into which `index` is an index\n * @param {number} top - the top of the scroll pane\n * @returns {number} less than or equal to `index` that is definitely at or\n *   before the first visible element in `views`, but not by too much. (Usually,\n *   this will be the first element in the first partially visible row in\n *   `views`, although sometimes it goes back one row further.)\n */\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\n  // binarySearchFirstItem's assumption is that the input is ordered, with only\n  // one index where the conditions flips from false to true: [false ...,\n  // true...]. With vertical scrolling and spreads, it is possible to have\n  // [false ..., true, false, true ...]. With wrapped scrolling we can have a\n  // similar sequence, with many more mixed true and false in the middle.\n  //\n  // So there is no guarantee that the binary search yields the index of the\n  // first visible element. It could have been any of the other visible elements\n  // that were preceded by a hidden element.\n\n  // Of course, if either this element or the previous (hidden) element is also\n  // the first element, there's nothing to worry about.\n  if (index < 2) {\n    return index;\n  }\n\n  // That aside, the possible cases are represented below.\n  //\n  //     ****  = fully hidden\n  //     A*B*  = mix of partially visible and/or hidden pages\n  //     CDEF  = fully visible\n  //\n  // (1) Binary search could have returned A, in which case we can stop.\n  // (2) Binary search could also have returned B, in which case we need to\n  // check the whole row.\n  // (3) Binary search could also have returned C, in which case we need to\n  // check the whole previous row.\n  //\n  // There's one other possibility:\n  //\n  //     ****  = fully hidden\n  //     ABCD  = mix of fully and/or partially visible pages\n  //\n  // (4) Binary search could only have returned A.\n\n  // Initially assume that we need to find the beginning of the current row\n  // (case 1, 2, or 4), which means finding a page that is above the current\n  // page's top. If the found page is partially visible, we're definitely not in\n  // case 3, and this assumption is correct.\n  let elt = views[index].div;\n  let pageTop = elt.offsetTop + elt.clientTop;\n\n  if (pageTop >= top) {\n    // The found page is fully visible, so we're actually either in case 3 or 4,\n    // and unfortunately we can't tell the difference between them without\n    // scanning the entire previous row, so we just conservatively assume that\n    // we do need to backtrack to that row. In both cases, the previous page is\n    // in the previous row, so use its top instead.\n    elt = views[index - 1].div;\n    pageTop = elt.offsetTop + elt.clientTop;\n  }\n\n  // Now we backtrack to the first page that still has its bottom below\n  // `pageTop`, which is the top of a page in the first visible row (unless\n  // we're in case 4, in which case it's the row before that).\n  // `index` is found by binary search, so the page at `index - 1` is\n  // invisible and we can start looking for potentially visible pages from\n  // `index - 2`. (However, if this loop terminates on its first iteration,\n  // which is the case when pages are stacked vertically, `index` should remain\n  // unchanged, so we use a distinct loop variable.)\n  for (let i = index - 2; i >= 0; --i) {\n    elt = views[i].div;\n    if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\n      // We have reached the previous row, so stop now.\n      // This loop is expected to terminate relatively quickly because the\n      // number of pages per row is expected to be small.\n      break;\n    }\n    index = i;\n  }\n  return index;\n}\n\n/**\n * @typedef {Object} GetVisibleElementsParameters\n * @property {HTMLElement} scrollEl - A container that can possibly scroll.\n * @property {Array} views - Objects with a `div` property that contains an\n *   HTMLElement, which should all be descendants of `scrollEl` satisfying the\n *   relevant layout assumptions.\n * @property {boolean} sortByVisibility - If `true`, the returned elements are\n *   sorted in descending order of the percent of their padding box that is\n *   visible. The default value is `false`.\n * @property {boolean} horizontal - If `true`, the elements are assumed to be\n *   laid out horizontally instead of vertically. The default value is `false`.\n * @property {boolean} rtl - If `true`, the `scrollEl` container is assumed to\n *   be in right-to-left mode. The default value is `false`.\n */\n\n/**\n * Generic helper to find out what elements are visible within a scroll pane.\n *\n * Well, pretty generic. There are some assumptions placed on the elements\n * referenced by `views`:\n *   - If `horizontal`, no left of any earlier element is to the right of the\n *     left of any later element.\n *   - Otherwise, `views` can be split into contiguous rows where, within a row,\n *     no top of any element is below the bottom of any other element, and\n *     between rows, no bottom of any element in an earlier row is below the\n *     top of any element in a later row.\n *\n * (Here, top, left, etc. all refer to the padding edge of the element in\n * question. For pages, that ends up being equivalent to the bounding box of the\n * rendering canvas. Earlier and later refer to index in `views`, not page\n * layout.)\n *\n * @param {GetVisibleElementsParameters} params\n * @returns {Object} `{ first, last, views: [{ id, x, y, view, percent }] }`\n */\nfunction getVisibleElements({\n  scrollEl,\n  views,\n  sortByVisibility = false,\n  horizontal = false,\n  rtl = false,\n}) {\n  const top = scrollEl.scrollTop,\n    bottom = top + scrollEl.clientHeight;\n  const left = scrollEl.scrollLeft,\n    right = left + scrollEl.clientWidth;\n\n  // Throughout this \"generic\" function, comments will assume we're working with\n  // PDF document pages, which is the most important and complex case. In this\n  // case, the visible elements we're actually interested is the page canvas,\n  // which is contained in a wrapper which adds no padding/border/margin, which\n  // is itself contained in `view.div` which adds no padding (but does add a\n  // border). So, as specified in this function's doc comment, this function\n  // does all of its work on the padding edge of the provided views, starting at\n  // offsetLeft/Top (which includes margin) and adding clientLeft/Top (which is\n  // the border). Adding clientWidth/Height gets us the bottom-right corner of\n  // the padding edge.\n  function isElementBottomAfterViewTop(view) {\n    const element = view.div;\n    const elementBottom =\n      element.offsetTop + element.clientTop + element.clientHeight;\n    return elementBottom > top;\n  }\n  function isElementNextAfterViewHorizontally(view) {\n    const element = view.div;\n    const elementLeft = element.offsetLeft + element.clientLeft;\n    const elementRight = elementLeft + element.clientWidth;\n    return rtl ? elementLeft < right : elementRight > left;\n  }\n\n  const visible = [],\n    ids = new Set(),\n    numViews = views.length;\n  let firstVisibleElementInd = binarySearchFirstItem(\n    views,\n    horizontal\n      ? isElementNextAfterViewHorizontally\n      : isElementBottomAfterViewTop\n  );\n\n  // Please note the return value of the `binarySearchFirstItem` function when\n  // no valid element is found (hence the `firstVisibleElementInd` check below).\n  if (\n    firstVisibleElementInd > 0 &&\n    firstVisibleElementInd < numViews &&\n    !horizontal\n  ) {\n    // In wrapped scrolling (or vertical scrolling with spreads), with some page\n    // sizes, isElementBottomAfterViewTop doesn't satisfy the binary search\n    // condition: there can be pages with bottoms above the view top between\n    // pages with bottoms below. This function detects and corrects that error;\n    // see it for more comments.\n    firstVisibleElementInd = backtrackBeforeAllVisibleElements(\n      firstVisibleElementInd,\n      views,\n      top\n    );\n  }\n\n  // lastEdge acts as a cutoff for us to stop looping, because we know all\n  // subsequent pages will be hidden.\n  //\n  // When using wrapped scrolling or vertical scrolling with spreads, we can't\n  // simply stop the first time we reach a page below the bottom of the view;\n  // the tops of subsequent pages on the same row could still be visible. In\n  // horizontal scrolling, we don't have that issue, so we can stop as soon as\n  // we pass `right`, without needing the code below that handles the -1 case.\n  let lastEdge = horizontal ? right : -1;\n\n  for (let i = firstVisibleElementInd; i < numViews; i++) {\n    const view = views[i],\n      element = view.div;\n    const currentWidth = element.offsetLeft + element.clientLeft;\n    const currentHeight = element.offsetTop + element.clientTop;\n    const viewWidth = element.clientWidth,\n      viewHeight = element.clientHeight;\n    const viewRight = currentWidth + viewWidth;\n    const viewBottom = currentHeight + viewHeight;\n\n    if (lastEdge === -1) {\n      // As commented above, this is only needed in non-horizontal cases.\n      // Setting lastEdge to the bottom of the first page that is partially\n      // visible ensures that the next page fully below lastEdge is on the\n      // next row, which has to be fully hidden along with all subsequent rows.\n      if (viewBottom >= bottom) {\n        lastEdge = viewBottom;\n      }\n    } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {\n      break;\n    }\n\n    if (\n      viewBottom <= top ||\n      currentHeight >= bottom ||\n      viewRight <= left ||\n      currentWidth >= right\n    ) {\n      continue;\n    }\n\n    const hiddenHeight =\n      Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);\n    const hiddenWidth =\n      Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);\n\n    const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,\n      fractionWidth = (viewWidth - hiddenWidth) / viewWidth;\n    const percent = (fractionHeight * fractionWidth * 100) | 0;\n\n    visible.push({\n      id: view.id,\n      x: currentWidth,\n      y: currentHeight,\n      view,\n      percent,\n      widthPercent: (fractionWidth * 100) | 0,\n    });\n    ids.add(view.id);\n  }\n\n  const first = visible[0],\n    last = visible.at(-1);\n\n  if (sortByVisibility) {\n    visible.sort(function (a, b) {\n      const pc = a.percent - b.percent;\n      if (Math.abs(pc) > 0.001) {\n        return -pc;\n      }\n      return a.id - b.id; // ensure stability\n    });\n  }\n  return { first, last, views: visible, ids };\n}\n\nfunction normalizeWheelEventDirection(evt) {\n  let delta = Math.hypot(evt.deltaX, evt.deltaY);\n  const angle = Math.atan2(evt.deltaY, evt.deltaX);\n  if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n    // All that is left-up oriented has to change the sign.\n    delta = -delta;\n  }\n  return delta;\n}\n\nfunction normalizeWheelEventDelta(evt) {\n  const deltaMode = evt.deltaMode; // Avoid being affected by bug 1392460.\n  let delta = normalizeWheelEventDirection(evt);\n\n  const MOUSE_PIXELS_PER_LINE = 30;\n  const MOUSE_LINES_PER_PAGE = 30;\n\n  // Converts delta to per-page units\n  if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n    delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n  } else if (deltaMode === WheelEvent.DOM_DELTA_LINE) {\n    delta /= MOUSE_LINES_PER_PAGE;\n  }\n  return delta;\n}\n\nfunction isValidRotation(angle) {\n  return Number.isInteger(angle) && angle % 90 === 0;\n}\n\nfunction isValidScrollMode(mode) {\n  return (\n    Number.isInteger(mode) &&\n    Object.values(ScrollMode).includes(mode) &&\n    mode !== ScrollMode.UNKNOWN\n  );\n}\n\nfunction isValidSpreadMode(mode) {\n  return (\n    Number.isInteger(mode) &&\n    Object.values(SpreadMode).includes(mode) &&\n    mode !== SpreadMode.UNKNOWN\n  );\n}\n\nfunction isPortraitOrientation(size) {\n  return size.width <= size.height;\n}\n\n/**\n * Promise that is resolved when DOM window becomes visible.\n */\nconst animationStarted = new Promise(function (resolve) {\n  if (\n    typeof PDFJSDev !== \"undefined\" &&\n    PDFJSDev.test(\"LIB\") &&\n    typeof window === \"undefined\"\n  ) {\n    // Prevent \"ReferenceError: window is not defined\" errors when running the\n    // unit-tests in Node.js environments.\n    setTimeout(resolve, 20);\n    return;\n  }\n  window.requestAnimationFrame(resolve);\n});\n\nconst docStyle =\n  typeof PDFJSDev !== \"undefined\" &&\n  PDFJSDev.test(\"LIB\") &&\n  typeof document === \"undefined\"\n    ? null\n    : document.documentElement.style;\n\nfunction clamp(v, min, max) {\n  return Math.min(Math.max(v, min), max);\n}\n\nclass ProgressBar {\n  #classList = null;\n\n  #disableAutoFetchTimeout = null;\n\n  #percent = 0;\n\n  #style = null;\n\n  #visible = true;\n\n  constructor(bar) {\n    this.#classList = bar.classList;\n    this.#style = bar.style;\n  }\n\n  get percent() {\n    return this.#percent;\n  }\n\n  set percent(val) {\n    this.#percent = clamp(val, 0, 100);\n\n    if (isNaN(val)) {\n      this.#classList.remove(\"hidden\");\n      this.#classList.add(\"indeterminate\");\n      return;\n    }\n    this.#classList.add(\"hidden\");\n    this.#classList.remove(\"indeterminate\");\n\n    this.#style.setProperty(\"--progressBar-percent\", `${this.#percent}%`);\n  }\n\n  setWidth(viewer) {\n    if (!viewer) {\n      return;\n    }\n    const container = viewer.parentNode;\n    const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n    if (scrollbarWidth > 0) {\n      this.#style.setProperty(\n        \"--progressBar-end-offset\",\n        `${scrollbarWidth}px`\n      );\n    }\n  }\n\n  setDisableAutoFetch(delay = /* ms = */ 5000) {\n    if (isNaN(this.#percent)) {\n      return;\n    }\n    if (this.#disableAutoFetchTimeout) {\n      clearTimeout(this.#disableAutoFetchTimeout);\n    }\n    this.show();\n\n    this.#disableAutoFetchTimeout = setTimeout(() => {\n      this.#disableAutoFetchTimeout = null;\n      this.hide();\n    }, delay);\n  }\n\n  hide() {\n    if (!this.#visible) {\n      return;\n    }\n    this.#visible = false;\n    this.#classList.add(\"hidden\");\n  }\n\n  show() {\n    if (this.#visible) {\n      return;\n    }\n    this.#visible = true;\n    this.#classList.remove(\"hidden\");\n  }\n}\n\n/**\n * Get the active or focused element in current DOM.\n *\n * Recursively search for the truly active or focused element in case there are\n * shadow DOMs.\n *\n * @returns {Element} the truly active or focused element.\n */\nfunction getActiveOrFocusedElement() {\n  let curRoot = document;\n  let curActiveOrFocused =\n    curRoot.activeElement || curRoot.querySelector(\":focus\");\n\n  while (curActiveOrFocused?.shadowRoot) {\n    curRoot = curActiveOrFocused.shadowRoot;\n    curActiveOrFocused =\n      curRoot.activeElement || curRoot.querySelector(\":focus\");\n  }\n\n  return curActiveOrFocused;\n}\n\n/**\n * Converts API PageLayout values to the format used by `BaseViewer`.\n * @param {string} layout - The API PageLayout value.\n * @returns {Object}\n */\nfunction apiPageLayoutToViewerModes(layout) {\n  let scrollMode = ScrollMode.VERTICAL,\n    spreadMode = SpreadMode.NONE;\n\n  switch (layout) {\n    case \"SinglePage\":\n      scrollMode = ScrollMode.PAGE;\n      break;\n    case \"OneColumn\":\n      break;\n    case \"TwoPageLeft\":\n      scrollMode = ScrollMode.PAGE;\n    /* falls through */\n    case \"TwoColumnLeft\":\n      spreadMode = SpreadMode.ODD;\n      break;\n    case \"TwoPageRight\":\n      scrollMode = ScrollMode.PAGE;\n    /* falls through */\n    case \"TwoColumnRight\":\n      spreadMode = SpreadMode.EVEN;\n      break;\n  }\n  return { scrollMode, spreadMode };\n}\n\nfunction toggleCheckedBtn(button, toggle, view = null) {\n  button.classList.toggle(\"toggled\", toggle);\n  button.setAttribute(\"aria-checked\", toggle);\n\n  view?.classList.toggle(\"hidden\", !toggle);\n}\n\nfunction toggleExpandedBtn(button, toggle, view = null) {\n  button.classList.toggle(\"toggled\", toggle);\n  button.setAttribute(\"aria-expanded\", toggle);\n\n  view?.classList.toggle(\"hidden\", !toggle);\n}\n\nexport {\n  animationStarted,\n  apiPageLayoutToViewerModes,\n  approximateFraction,\n  AutoPrintRegExp,\n  backtrackBeforeAllVisibleElements, // only exported for testing\n  binarySearchFirstItem,\n  DEFAULT_SCALE,\n  DEFAULT_SCALE_DELTA,\n  DEFAULT_SCALE_VALUE,\n  docStyle,\n  getActiveOrFocusedElement,\n  getPageSizeInches,\n  getVisibleElements,\n  isPortraitOrientation,\n  isValidRotation,\n  isValidScrollMode,\n  isValidSpreadMode,\n  MAX_AUTO_SCALE,\n  MAX_SCALE,\n  MIN_SCALE,\n  normalizeWheelEventDelta,\n  normalizeWheelEventDirection,\n  OutputScale,\n  parseQueryString,\n  ProgressBar,\n  removeNullCharacters,\n  RenderingStates,\n  roundToDivide,\n  SCROLLBAR_PADDING,\n  scrollIntoView,\n  ScrollMode,\n  SpreadMode,\n  TextLayerMode,\n  toggleCheckedBtn,\n  toggleExpandedBtn,\n  UNKNOWN_SCALE,\n  VERTICAL_PADDING,\n  watchScroll,\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\nconst DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;\n\n/**\n * View History - This is a utility for saving various view parameters for\n *                recently opened files.\n *\n * The way that the view parameters are stored depends on how PDF.js is built,\n * for 'gulp <flag>' the following cases exist:\n *  - MOZCENTRAL        - uses sessionStorage.\n *  - GENERIC or CHROME - uses localStorage, if it is available.\n */\nclass ViewHistory {\n  constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) {\n    this.fingerprint = fingerprint;\n    this.cacheSize = cacheSize;\n\n    this._initializedPromise = this._readFromStorage().then(databaseStr => {\n      const database = JSON.parse(databaseStr || \"{}\");\n      let index = -1;\n      if (!Array.isArray(database.files)) {\n        database.files = [];\n      } else {\n        while (database.files.length >= this.cacheSize) {\n          database.files.shift();\n        }\n\n        for (let i = 0, ii = database.files.length; i < ii; i++) {\n          const branch = database.files[i];\n          if (branch.fingerprint === this.fingerprint) {\n            index = i;\n            break;\n          }\n        }\n      }\n      if (index === -1) {\n        index = database.files.push({ fingerprint: this.fingerprint }) - 1;\n      }\n      this.file = database.files[index];\n      this.database = database;\n    });\n  }\n\n  async _writeToStorage() {\n    const databaseStr = JSON.stringify(this.database);\n\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      sessionStorage.setItem(\"pdfjs.history\", databaseStr);\n      return;\n    }\n    localStorage.setItem(\"pdfjs.history\", databaseStr);\n  }\n\n  async _readFromStorage() {\n    if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n      return sessionStorage.getItem(\"pdfjs.history\");\n    }\n    return localStorage.getItem(\"pdfjs.history\");\n  }\n\n  async set(name, val) {\n    await this._initializedPromise;\n    this.file[name] = val;\n    return this._writeToStorage();\n  }\n\n  async setMultiple(properties) {\n    await this._initializedPromise;\n    for (const name in properties) {\n      this.file[name] = properties[name];\n    }\n    return this._writeToStorage();\n  }\n\n  async get(name, defaultValue) {\n    await this._initializedPromise;\n    const val = this.file[name];\n    return val !== undefined ? val : defaultValue;\n  }\n\n  async getMultiple(properties) {\n    await this._initializedPromise;\n    const values = Object.create(null);\n\n    for (const name in properties) {\n      const val = this.file[name];\n      values[name] = val !== undefined ? val : properties[name];\n    }\n    return values;\n  }\n}\n\nexport { ViewHistory };\n","/* 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\nimport { RenderingStates, ScrollMode, SpreadMode } from \"./ui_utils.js\";\nimport { AppOptions } from \"./app_options.js\";\nimport { LinkTarget } from \"./pdf_link_service.js\";\nimport { PDFViewerApplication } from \"./app.js\";\nimport { AnnotationStorage } from \"../src/display/annotation_storage.js\";\n\n/* eslint-disable-next-line no-unused-vars */\nconst pdfjsVersion =\n  typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_VERSION\") : void 0;\n/* eslint-disable-next-line no-unused-vars */\nconst pdfjsBuild =\n  typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_BUILD\") : void 0;\n\nconst AppConstants =\n  typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")\n    ? { LinkTarget, RenderingStates, ScrollMode, SpreadMode }\n    : null;\n\nwindow.PDFViewerApplication = PDFViewerApplication;\nwindow.PDFViewerApplicationConstants = AppConstants;\nwindow.PDFViewerApplicationOptions = AppOptions;\n\nfunction getViewerConfiguration() {\n  const appContainer = document.body,\n    toolbarContainer = appContainer.querySelector(\".toolbarContainer\"),\n    annotationToolbarContainer = appContainer.querySelector(\n      \".annotationToolbarContainer\"\n    ),\n    signatureActionButtonContainer = appContainer.querySelector(\n      \".signatureActionButtonContainer\"\n    ),\n    secondaryToolbarContainer = appContainer.querySelector(\".secondaryToolbar\"),\n    findbarContainer = appContainer.querySelector(\".findbar\"),\n    attachmentsContainer = appContainer.querySelector(\".attachments\"),\n    dialogContainer = appContainer.querySelector(\".dialogContainer\"),\n    altTextDialogContainer = dialogContainer.querySelector(\".altTextDialog\"),\n    printServiceDialogContainer = dialogContainer.querySelector(\n      \".printServiceDialog\"\n    ),\n    commentDialogContainer = dialogContainer.querySelector(\".commentDialog\"),\n    signatureDialogContainer = document.querySelector(\".signatureDialog\"),\n    signatureCnfrmDialogContainer = document.querySelector(\n      \".signConfirmationDialog\"\n    ),\n    editorFreeTextParamsToolbar = appContainer.querySelector(\n      \".editorFreeTextParamsToolbar\"\n    ),\n    editorInkParamsToolbar = appContainer.querySelector(\n      \".editorInkParamsToolbar\"\n    ),\n    editorHighlightParamsToolbar = appContainer.querySelector(\n      \".editorHighlightParamsToolbar\"\n    ),\n    editorStampParamsToolbar = appContainer.querySelector(\n      \".editorStampParamsToolbar\"\n    ),\n    editorRedactionParamsToolbar = appContainer.querySelector(\n      \".editorRedactionParamsToolbar\"\n    ),\n    editorNoteParamsToolbar = appContainer.querySelector(\n      \".editorNoteParamsToolbar\"\n    ),\n    errorContainer = appContainer.querySelector(\".errorContainer\");\n  return {\n    appContainer,\n    mainContainer: appContainer.querySelector(\".viewerContainer\"),\n    viewerContainer: appContainer.querySelector(\".viewer\"),\n    loadingBar: toolbarContainer.querySelector(\".loadingBar\"),\n    toolbar: {\n      container: toolbarContainer.querySelector(\".toolbarViewer\"),\n      numPages: toolbarContainer.querySelector(\".numPages\"),\n      pageNumber: toolbarContainer.querySelector(\".pageNumber\"),\n      scaleSelect: toolbarContainer.querySelector(\".scaleSelect\"),\n      customScaleOption: toolbarContainer.querySelector(\".customScaleOption\"),\n      firstPageButton: toolbarContainer.querySelector(\".firstPage\"),\n      previous: toolbarContainer.querySelector(\".previous\"),\n      next: toolbarContainer.querySelector(\".next\"),\n      lastPageButton: toolbarContainer.querySelector(\".lastPage\"),\n      zoomIn: toolbarContainer.querySelector(\".zoomIn\"),\n      zoomOut: toolbarContainer.querySelector(\".zoomOut\"),\n      viewFind: toolbarContainer.querySelector(\".viewFind\"),\n      print: toolbarContainer.querySelector(\".print\"),\n      editorModeButtons: toolbarContainer.querySelector(\".editorModeButtons\"),\n      toggleAnnotationsToolbarButton: toolbarContainer.querySelector(\n        \".toggleAnnotationsToolbar\"\n      ),\n      editorFreeTextButton:\n        annotationToolbarContainer.querySelector(\".editorFreeText\"),\n      editorFreeTextParamsToolbar,\n      editorHighlightButton:\n        annotationToolbarContainer.querySelector(\".editorHighlight\"),\n      editorHighlightParamsToolbar,\n      editorHighlightColorPicker: editorHighlightParamsToolbar.querySelector(\n        \".editorHighlightColorPicker\"\n      ),\n      editorInkButton: annotationToolbarContainer.querySelector(\".editorInk\"),\n      editorInkParamsToolbar,\n      editorStampButton:\n        annotationToolbarContainer.querySelector(\".editorStamp\"),\n      editorStampParamsToolbar,\n      editorRedactionButton: toolbarContainer.querySelector(\".editorRedaction\"),\n      editorRedactionParamsToolbar,\n      editorCommentButton: toolbarContainer.querySelector(\".editorComment\"),\n      editorNoteParamsToolbar,\n      editorNoteAddComment: editorNoteParamsToolbar.querySelector(\n        \".editorNoteAddComment\"\n      ),\n      editorNoteVisibility: editorNoteParamsToolbar.querySelector(\n        \".editorNoteVisibility\"\n      ),\n      editorModeSeparator: toolbarContainer.querySelector(\n        \".editorModeSeparator\"\n      ),\n      viewAttachments: toolbarContainer.querySelector(\".viewAttachments\"),\n      extractAnnotations: annotationToolbarContainer.querySelector(\n        \".extractAnnotations\"\n      ),\n      toggleAnnotationsVisibilityButton:\n        annotationToolbarContainer.querySelector(\n          \".toggleAnnotationsVisibility\"\n        ),\n      signatureActionButtonContainer,\n      signatureSaveButton:\n        signatureActionButtonContainer.querySelector(\".signatureSave\"),\n      signatureCancelButton:\n        signatureActionButtonContainer.querySelector(\".signatureCancel\"),\n    },\n    annotationsToolbarContainer: annotationToolbarContainer,\n    secondaryToolbar: {\n      toolbar: secondaryToolbarContainer,\n      toggleButton: toolbarContainer.querySelector(\".secondaryToolbarToggle\"),\n      firstPageButton: secondaryToolbarContainer.querySelector(\".firstPage\"),\n      lastPageButton: secondaryToolbarContainer.querySelector(\".lastPage\"),\n      pageRotateCwButton:\n        secondaryToolbarContainer.querySelector(\".pageRotateCw\"),\n      pageRotateCcwButton:\n        secondaryToolbarContainer.querySelector(\".pageRotateCcw\"),\n      saveOrientationButton:\n        secondaryToolbarContainer.querySelector(\".saveOrientation\"),\n    },\n    findBar: {\n      bar: findbarContainer,\n      toggleButton: toolbarContainer.querySelector(\".viewFind\"),\n      findField: findbarContainer.querySelector(\".findInput\"),\n      highlightAllCheckbox: findbarContainer.querySelector(\".findHighlightAll\"),\n      caseSensitiveCheckbox: findbarContainer.querySelector(\".findMatchCase\"),\n      matchDiacriticsCheckbox: findbarContainer.querySelector(\n        \".findMatchDiacritics\"\n      ),\n      entireWordCheckbox: findbarContainer.querySelector(\".findEntireWord\"),\n      findMsg: findbarContainer.querySelector(\".findMsg\"),\n      findResultsCount: findbarContainer.querySelector(\".findResultsCount\"),\n      findPreviousButton: findbarContainer.querySelector(\".findPrevious\"),\n      findNextButton: findbarContainer.querySelector(\".findNext\"),\n    },\n    attachments: {\n      toolbar: attachmentsContainer,\n      toggleButton: toolbarContainer.querySelector(\".viewAttachments\"),\n      container: attachmentsContainer.querySelector(\".attachmentsContainer\"),\n      attachments: [\n        {\n          partId: 9988,\n          text: \"Main\",\n          src: \"pdf_commenting_new.pdf\",\n        },\n        {\n          partId: 98349,\n          text: \"Original\",\n          src: \"compressed.tracemonkey-pldi-09.pdf\",\n        },\n      ],\n    },\n    altTextDialog: {\n      dialog: altTextDialogContainer,\n      optionDescription:\n        altTextDialogContainer.querySelector(\".descriptionButton\"),\n      optionDecorative:\n        altTextDialogContainer.querySelector(\".decorativeButton\"),\n      textarea: altTextDialogContainer.querySelector(\".descriptionTextarea\"),\n      cancelButton: altTextDialogContainer.querySelector(\".altTextCancel\"),\n      saveButton: altTextDialogContainer.querySelector(\".altTextSave\"),\n    },\n    annotationEditorParams: {\n      editorFreeTextFontSize: editorFreeTextParamsToolbar.querySelector(\n        \".editorFreeTextFontSize\"\n      ),\n      editorFreeTextColor: editorFreeTextParamsToolbar.querySelector(\n        \".editorFreeTextColor\"\n      ),\n      editorInkColor: editorInkParamsToolbar.querySelector(\".editorInkColor\"),\n      editorInkThickness: editorInkParamsToolbar.querySelector(\n        \".editorInkThickness\"\n      ),\n      editorInkOpacity:\n        editorInkParamsToolbar.querySelector(\".editorInkOpacity\"),\n      editorStampAddImage: editorStampParamsToolbar.querySelector(\n        \".editorStampAddImage\"\n      ),\n      uploadImageOption:\n        signatureDialogContainer.querySelector(\".uploadImageOption\"),\n      editorApprovedStampAddImage: editorStampParamsToolbar.querySelector(\n        \".editorApprovedStampAddImage\"\n      ),\n      editorRejectedStampAddImage: editorStampParamsToolbar.querySelector(\n        \".editorRejectedStampAddImage\"\n      ),\n      editorRedactionStampAddImage: editorRedactionParamsToolbar.querySelector(\n        \".editorRedactionStampAddImage\"\n      ),\n      editorFreeHighlightThickness: editorHighlightParamsToolbar.querySelector(\n        \".editorFreeHighlightThickness\"\n      ),\n      editorHighlightShowAll: editorHighlightParamsToolbar.querySelector(\n        \".editorHighlightShowAll\"\n      ),\n      editorNoteAddComment: editorNoteParamsToolbar.querySelector(\n        \".editorNoteAddComment\"\n      ),\n      editorNoteVisibility: editorNoteParamsToolbar.querySelector(\n        \".editorNoteVisibility\"\n      ),\n    },\n    errorWrapper: {\n      container: errorContainer,\n      errorMessage: errorContainer.querySelector(\".errorMessage\"),\n      downloadButton: errorContainer.querySelector(\".infoDownload\"),\n      closeButton: errorContainer.querySelector(\".errorClose\"),\n    },\n    printServiceDialog: {\n      container: printServiceDialogContainer,\n      cancelButton: printServiceDialogContainer.querySelector(\".printCancel\"),\n    },\n    printContainer: document.getElementById(\"printContainer\"),\n    commentDialog: {\n      container: commentDialogContainer,\n      annotationNoteTitle: commentDialogContainer.querySelector(\n        \".annotationNoteTitle\"\n      ),\n      annotationNote: commentDialogContainer.querySelector(\".annotationNote\"),\n      comments: commentDialogContainer.querySelector(\".annotationComments\"),\n      cancelButton: commentDialogContainer.querySelector(\n        \".annotationCommentCancel\"\n      ),\n      submitButton: commentDialogContainer.querySelector(\n        \".annotationCommentSubmit\"\n      ),\n      deleteButton: commentDialogContainer.querySelector(\n        \".annotationNoteDelete\"\n      ),\n    },\n    signatureDialog: {\n      container: signatureDialogContainer,\n      closeButton: signatureDialogContainer.querySelector(\".closeButton\"),\n      trackpadMouseOption: signatureDialogContainer\n        .querySelector(\".trackpadMouseOption\")\n        .querySelector(\"button\"),\n      uploadImageOption: signatureDialogContainer\n        .querySelector(\".uploadImageOption\")\n        .querySelector(\"button\"),\n      addTextOption: signatureDialogContainer\n        .querySelector(\".addTextOption\")\n        .querySelector(\"button\"),\n    },\n    signatureCnfrmDialog: {\n      container: signatureCnfrmDialogContainer,\n      noButton:\n        signatureCnfrmDialogContainer.querySelector(\".signatureCnfrmNo\"),\n      yesButton:\n        signatureCnfrmDialogContainer.querySelector(\".signatureCnfrmYes\"),\n    },\n    user: \"Administrator\",\n    isSignature: true,\n    supportsAnnotations: true,\n    annotationStore: new AnnotationStorage(),\n    timezoneOffset: 330,\n    supportsSaveOrientation: true,\n    orientationStore: new AnnotationStorage(),\n    //This determines if the user is editing the document or not, we need to pass this value from idos\n    isEditing: true,\n  };\n}\n\nfunction webViewerLoad() {\n  let config = null;\n  try {\n    config = getViewerConfiguration();\n  } catch (error) {}\n\n  if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\")) {\n    // Give custom implementations of the default viewer a simpler way to\n    // set various `AppOptions`, by dispatching an event once all viewer\n    // files are loaded but *before* the viewer initialization has run.\n    const event = new CustomEvent(\"webviewerloaded\", {\n      bubbles: true,\n      cancelable: true,\n      detail: {\n        source: window,\n      },\n    });\n    try {\n      // Attempt to dispatch the event at the embedding `document`,\n      // in order to support cases where the viewer is embedded in\n      // a *dynamically* created <iframe> element.\n      parent.document.dispatchEvent(event);\n    } catch (ex) {\n      // The viewer could be in e.g. a cross-origin <iframe> element,\n      // fallback to dispatching the event at the current `document`.\n      console.error(`webviewerloaded: ${ex}`);\n      document.dispatchEvent(event);\n    }\n  }\n\n  if (config) {\n    PDFViewerApplication.run(config);\n  }\n}\n\n// Block the \"load\" event until all pages are loaded, to ensure that printing\n// works in Firefox; see https://bugzilla.mozilla.org/show_bug.cgi?id=1618553\ndocument.blockUnblockOnload?.(true);\n\nif (\n  document.readyState === \"interactive\" ||\n  document.readyState === \"complete\"\n) {\n  webViewerLoad();\n} else {\n  document.addEventListener(\"DOMContentLoaded\", webViewerLoad, true);\n}\n\nexport {\n  PDFViewerApplication,\n  AppConstants as PDFViewerApplicationConstants,\n  AppOptions as PDFViewerApplicationOptions,\n};\n","/* Copyright 2021 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/** @typedef {import(\"../src/display/api\").PDFPageProxy} PDFPageProxy */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/annotation_storage\").AnnotationStorage} AnnotationStorage */\n// eslint-disable-next-line max-len\n/** @typedef {import(\"../src/display/display_utils\").PageViewport} PageViewport */\n/** @typedef {import(\"./interfaces\").IPDFLinkService} IPDFLinkService */\n\nimport { XfaLayer } from \"pdfjs-lib\";\n\n/**\n * @typedef {Object} XfaLayerBuilderOptions\n * @property {PDFPageProxy} pdfPage\n * @property {AnnotationStorage} [annotationStorage]\n * @property {IPDFLinkService} linkService\n * @property {Object} [xfaHtml]\n */\n\nclass XfaLayerBuilder {\n  /**\n   * @param {XfaLayerBuilderOptions} options\n   */\n  constructor({\n    pdfPage,\n    annotationStorage = null,\n    linkService,\n    xfaHtml = null,\n  }) {\n    this.pdfPage = pdfPage;\n    this.annotationStorage = annotationStorage;\n    this.linkService = linkService;\n    this.xfaHtml = xfaHtml;\n\n    this.div = null;\n    this._cancelled = false;\n  }\n\n  /**\n   * @param {PageViewport} viewport\n   * @param {string} intent (default value is 'display')\n   * @returns {Promise<Object | void>} A promise that is resolved when rendering\n   *   of the XFA layer is complete. The first rendering will return an object\n   *   with a `textDivs` property that can be used with the TextHighlighter.\n   */\n  async render(viewport, intent = \"display\") {\n    if (intent === \"print\") {\n      const parameters = {\n        viewport: viewport.clone({ dontFlip: true }),\n        div: this.div,\n        xfaHtml: this.xfaHtml,\n        annotationStorage: this.annotationStorage,\n        linkService: this.linkService,\n        intent,\n      };\n\n      // Create an xfa layer div and render the form\n      this.div = document.createElement(\"div\");\n      parameters.div = this.div;\n\n      return XfaLayer.render(parameters);\n    }\n\n    // intent === \"display\"\n    const xfaHtml = await this.pdfPage.getXfa();\n    if (this._cancelled || !xfaHtml) {\n      return { textDivs: [] };\n    }\n\n    const parameters = {\n      viewport: viewport.clone({ dontFlip: true }),\n      div: this.div,\n      xfaHtml,\n      annotationStorage: this.annotationStorage,\n      linkService: this.linkService,\n      intent,\n    };\n\n    if (this.div) {\n      return XfaLayer.update(parameters);\n    }\n    // Create an xfa layer div and render the form\n    this.div = document.createElement(\"div\");\n    parameters.div = this.div;\n\n    return XfaLayer.render(parameters);\n  }\n\n  cancel() {\n    this._cancelled = true;\n  }\n\n  hide() {\n    if (!this.div) {\n      return;\n    }\n    this.div.hidden = true;\n  }\n}\n\nexport { XfaLayerBuilder };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","var webpackQueues = typeof Symbol === \"function\" ? Symbol(\"webpack queues\") : \"__webpack_queues__\";\nvar webpackExports = typeof Symbol === \"function\" ? Symbol(\"webpack exports\") : \"__webpack_exports__\";\nvar webpackError = typeof Symbol === \"function\" ? Symbol(\"webpack error\") : \"__webpack_error__\";\nvar resolveQueue = (queue) => {\n\tif(queue && queue.d < 1) {\n\t\tqueue.d = 1;\n\t\tqueue.forEach((fn) => (fn.r--));\n\t\tqueue.forEach((fn) => (fn.r-- ? fn.r++ : fn()));\n\t}\n}\nvar wrapDeps = (deps) => (deps.map((dep) => {\n\tif(dep !== null && typeof dep === \"object\") {\n\t\tif(dep[webpackQueues]) return dep;\n\t\tif(dep.then) {\n\t\t\tvar queue = [];\n\t\t\tqueue.d = 0;\n\t\t\tdep.then((r) => {\n\t\t\t\tobj[webpackExports] = r;\n\t\t\t\tresolveQueue(queue);\n\t\t\t}, (e) => {\n\t\t\t\tobj[webpackError] = e;\n\t\t\t\tresolveQueue(queue);\n\t\t\t});\n\t\t\tvar obj = {};\n\t\t\tobj[webpackQueues] = (fn) => (fn(queue));\n\t\t\treturn obj;\n\t\t}\n\t}\n\tvar ret = {};\n\tret[webpackQueues] = x => {};\n\tret[webpackExports] = dep;\n\treturn ret;\n}));\n__webpack_require__.a = (module, body, hasAwait) => {\n\tvar queue;\n\thasAwait && ((queue = []).d = -1);\n\tvar depQueues = new Set();\n\tvar exports = module.exports;\n\tvar currentDeps;\n\tvar outerResolve;\n\tvar reject;\n\tvar promise = new Promise((resolve, rej) => {\n\t\treject = rej;\n\t\touterResolve = resolve;\n\t});\n\tpromise[webpackExports] = exports;\n\tpromise[webpackQueues] = (fn) => (queue && fn(queue), depQueues.forEach(fn), promise[\"catch\"](x => {}));\n\tmodule.exports = promise;\n\tbody((deps) => {\n\t\tcurrentDeps = wrapDeps(deps);\n\t\tvar fn;\n\t\tvar getResult = () => (currentDeps.map((d) => {\n\t\t\tif(d[webpackError]) throw d[webpackError];\n\t\t\treturn d[webpackExports];\n\t\t}))\n\t\tvar promise = new Promise((resolve) => {\n\t\t\tfn = () => (resolve(getResult));\n\t\t\tfn.r = 0;\n\t\t\tvar fnQueue = (q) => (q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn))));\n\t\t\tcurrentDeps.map((dep) => (dep[webpackQueues](fnQueue)));\n\t\t});\n\t\treturn fn.r ? promise : getResult();\n\t}, (err) => ((err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)));\n\tqueue && queue.d < 0 && (queue.d = 0);\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(30);\n",""],"names":["FluentType","constructor","value","valueOf","FluentNone","toString","scope","FluentNumber","opts","nf","memoizeIntlObject","Intl","NumberFormat","format","err","reportError","FluentDateTime","dtf","DateTimeFormat","Date","toISOString","MAX_PLACEABLES","FSI","PDI","match","selector","key","category","PluralRules","select","getDefault","variants","star","resolvePattern","RangeError","getArguments","args","positional","named","Object","create","arg","type","name","resolveExpression","push","expr","minimumFractionDigits","precision","resolveVariableReference","resolveMessageReference","resolveTermReference","resolveFunctionReference","resolveSelectExpression","params","prototype","hasOwnProperty","call","ReferenceError","getTime","TypeError","attr","message","bundle","_messages","get","attribute","attributes","id","term","_terms","resolved","func","_functions","sel","variant","resolveComplexPattern","ptn","dirty","has","add","result","useIsolating","_useIsolating","length","elem","_transform","placeables","delete","join","Scope","errors","WeakSet","error","Error","ctor","cache","_intls","set","JSON","stringify","locales","values","allowed","unwrapped","opt","entries","includes","NUMBER_ALLOWED","NUMBER","DATETIME_ALLOWED","DATETIME","Map","getMemoizerForLocale","stringLocale","Array","isArray","memoizer","undefined","FluentBundle","functions","transform","v","hasMessage","getMessage","addResource","res","allowOverrides","i","body","entry","startsWith","formatPattern","pattern","RE_MESSAGE_START","RE_ATTRIBUTE_START","RE_VARIANT_START","RE_NUMBER_LITERAL","RE_IDENTIFIER","RE_REFERENCE","RE_FUNCTION_NAME","RE_TEXT_RUN","RE_STRING_RUN","RE_STRING_ESCAPE","RE_UNICODE_ESCAPE","RE_LEADING_NEWLINES","RE_TRAILING_SPACES","RE_BLANK_LINES","RE_INDENT","TOKEN_BRACE_OPEN","TOKEN_BRACE_CLOSE","TOKEN_BRACKET_OPEN","TOKEN_BRACKET_CLOSE","TOKEN_PAREN_OPEN","TOKEN_ARROW","TOKEN_COLON","TOKEN_COMMA","TOKEN_BLANK","FluentResource","source","lastIndex","cursor","next","exec","parseMessage","SyntaxError","test","re","consumeChar","char","errorClass","consumeToken","match1","parsePattern","parseAttributes","keys","attrs","first","parsePatternElements","Infinity","indent","parseIndent","trim","elements","commonIndent","parsePlaceable","Math","min","lastElement","baked","element","Indent","slice","parseInlineExpression","parseVariants","sigil","parseArguments","parseLiteral","parseArgument","count","parseVariantKey","parseNumberLiteral","parseStringLiteral","fraction","parseFloat","parseEscapeSequence","codepoint4","codepoint6","codepoint","parseInt","String","fromCodePoint","start","makeIndent","text","replace","blank","reOverlay","TEXT_LEVEL_ELEMENTS","LOCALIZABLE_ATTRIBUTES","global","a","area","input","menuitem","menu","optgroup","option","track","img","textarea","th","description","label","textbox","translateElement","translation","localName","namespaceURI","textContent","templateElement","ownerDocument","createElementNS","innerHTML","overlayChildNodes","content","overlayAttributes","fromFragment","toElement","childNode","childNodes","nodeType","TEXT_NODE","hasAttribute","sanitized","getNodeForNamedElement","replaceChild","isElementAllowed","createSanitizedElement","console","warn","createTextNodeFromTextContent","appendChild","fromElement","explicitlyAllowed","getAttribute","split","map","from","isAttrNameLocalizable","removeAttribute","setAttribute","sourceElement","translatedChild","childName","sourceChild","querySelector","removeChild","clone","cloneNode","shallowPopulateUsing","createElement","createTextNode","attrName","toLowerCase","elemName","CachedIterable","iterable","CachedSyncIterable","Symbol","iterator","cached","cur","touchNext","idx","last","done","CachedAsyncIterable","asyncIterator","default","Localization","resourceIds","generateBundles","onChange","addResourceIds","eager","removeResourceIds","filter","r","formatWithFallback","method","translations","hasAtLeastOneBundle","bundles","missingIds","keysFromBundle","size","locale","ids","formatMessages","messageFromBundle","formatValues","valueFromBundle","formatValue","val","handleEvent","formatted","attrNames","messageErrors","Set","forEach","L10NID_ATTR_NAME","L10NARGS_ATTR_NAME","L10N_ELEMENT_QUERY","DOMLocalization","roots","pendingrAF","pendingElements","windowElement","mutationObserver","observerConfig","characterData","childList","subtree","attributeFilter","translateRoots","setAttributes","getAttributes","parse","connectRoot","newRoot","root","contains","defaultView","MutationObserver","mutations","translateMutations","observe","disconnectRoot","pauseObserving","clear","resumeObserving","Promise","all","translateFragment","takeRecords","disconnect","mutation","target","addedNode","addedNodes","ELEMENT_NODE","childElementCount","getTranslatables","requestAnimationFrame","translateElements","frag","getKeysForElement","applyTranslations","nodes","querySelectorAll","CMapCompressionType","unreachable","BaseFilterFactory","addFilter","maps","addHCMFilter","fgColor","bgColor","addHighlightHCMFilter","filterName","newFgColor","newBgColor","destroy","keepHCM","BaseCanvasFactory","width","height","canvas","_createCanvas","context","getContext","reset","canvasAndContext","BaseCMapReaderFactory","baseUrl","isCompressed","fetch","url","compressionType","BINARY","NONE","_fetchData","catch","reason","BaseStandardFontDataFactory","filename","BaseSVGFactory","skipDimensions","svg","_createSVG","BaseException","FeatureTest","shadow","stringToBytes","Util","SVG_NS","PixelsPerInch","CSS","PDF","PDF_TO_CSS_UNITS","DOMFilterFactory","_cache","_defs","docId","document","_hcmCache","globalThis","#cache","hcmCache","#hcmCache","defs","#defs","div","style","visibility","contain","position","top","left","zIndex","append","tableR","tableG","tableB","mapR","buffer","mapG","mapB","bufferR","bufferG","bufferB","createFilter","addTransferMapConversion","info","remove","fgRGB","getRGB","makeHexColor","bgRGB","color","x","table","addGrayConversion","getSteps","c","n","end","arr","bind","fgGray","round","bgGray","newFgRGB","newBgRGB","fg","bg","step","newStart","newStep","prev","k","j","parentNode","#addGrayConversion","feColorMatrix","#createFilter","appendFeFunc","#appendFeFunc","feComponentTransfer","feFunc","#addTransferMapConversion","rTable","gTable","bTable","#getRGB","getComputedStyle","getPropertyValue","DOMCanvasFactory","_document","fetchData","isValidFetchUrl","baseURI","response","ok","statusText","arrayBuffer","blob","json","resolve","reject","request","XMLHttpRequest","open","responseType","onreadystatechange","readyState","DONE","status","responseText","send","DOMCMapReaderFactory","then","data","cMapData","ArrayBuffer","Uint8Array","DOMStandardFontDataFactory","DOMSVGFactory","PageViewport","viewBox","scale","rotation","offsetX","offsetY","dontFlip","centerX","centerY","rotateA","rotateB","rotateC","rotateD","offsetCanvasX","offsetCanvasY","abs","rawDims","pageWidth","pageHeight","pageX","pageY","convertToViewportPoint","y","applyTransform","convertToViewportRectangle","rect","topLeft","bottomRight","convertToPdfPoint","applyInverseTransform","RenderingCancelledException","msg","extraDelay","isDataScheme","ii","substring","isPdfFile","getFilenameFromUrl","onlyStripPath","lastIndexOf","getPdfFilenameFromUrl","defaultFilename","reURI","reFilename","splitURI","suggestedFilename","decodeURIComponent","StatTimer","started","times","time","now","timeEnd","outBuf","longest","max","padEnd","protocol","URL","noContextMenu","e","preventDefault","deprecated","details","log","pdfDateStringRegex","PDFDateString","toDateObject","RegExp","matches","year","month","day","hour","minute","second","universalTimeRelation","offsetHour","offsetMinute","UTC","formatDateString","date","isNaN","pad","getMonth","getDate","getFullYear","hours","getHours","minutes","getMinutes","ampm","getXfaPageViewport","xfaPage","colorRGB","getColorValues","colors","span","computedColor","window","getCurrentTransform","ctx","b","d","f","getTransform","getCurrentTransformInverse","invertSelf","setLayerDimensions","viewport","mustFlip","mustRotate","useRound","isCSSRoundSupported","w","h","widthStr","heightStr","EditorToolbar","toolbar","colorPicker","editor","buttons","render","editToolbar","className","addEventListener","pointerDown","toolbarPosition","_uiManager","direction","insetInlineEnd","addDeleteButton","#pointerDown","stopPropagation","focusIn","#focusIn","_focusEventsAllowed","focusOut","#focusOut","addListenersToElement","#addListenersToElement","capture","hide","classList","hideDropdown","show","#addDeleteButton","button","tabIndex","editorType","divider","#divider","addAltTextButton","prepend","addColorPicker","renderButton","HighlightToolbar","uiManager","#render","addHighlightButton","getLastPoint","#getLastPoint","boxes","isLTR","lastY","lastX","box","parent","#addHighlightButton","highlightSelection","AnnotationEditorParamsType","AnnotationEditorPrefix","AnnotationEditorType","getUuid","bindEvents","obj","names","opacityToHex","opacity","padStart","IdManager","ImageManager","baseId","_isSVGFittingCanvas","OffscreenCanvas","image","Image","src","promise","decode","drawImage","Uint32Array","getImageData","#get","rawData","bitmap","refCounter","isSvg","file","mustRemoveAspectRatioPromise","fileReader","FileReader","imageElement","imagePromise","onload","svgUrl","onerror","readAsDataURL","createImageBitmap","getFromFile","lastModified","getFromUrl","getFromCanvas","offscreen","transferToImageBitmap","getFromId","getSvgUrl","close","deleteId","isValidId","CommandManager","commands","locked","maxSize","cmd","undo","post","mustExec","NaN","overwriteIfSameType","keepUndo","save","splice","redo","hasSomethingToUndo","hasSomethingToRedo","KeyboardManager","callbacks","allKeys","isMac","platform","callback","options","isMacKey","at","serialize","#serialize","event","altKey","ctrlKey","metaKey","shiftKey","str","self","bubbles","checker","ColorManager","_colorsMapping","_colors","convert","rgb","matchMedia","RGB","every","getHexCode","AnnotationEditorUIManager","activeEditor","allEditors","allLayers","altTextManager","annotationStorage","changedExistingAnnotations","commandManager","currentPageIndex","deletedAnnotationsElementIds","draggingEditors","editorTypes","editorsToRescale","enableHighlightFloatingButton","filterFactory","focusMainContainerTimeoutId","highlightColors","highlightWhenShiftUp","highlightToolbar","idManager","isEnabled","isWaiting","lastActiveElement","mainHighlightColorPicker","mlManager","mode","selectedEditors","selectedTextNode","pageColors","showAllStates","boundBlur","blur","boundFocus","focus","boundCopy","copy","boundCut","cut","boundPaste","paste","boundKeydown","keydown","boundKeyup","keyup","boundOnEditingAction","onEditingAction","boundOnPageChanging","onPageChanging","boundOnScaleChanging","onScaleChanging","boundSelectionChange","selectionChange","boundOnRotationChanging","onRotationChanging","previousStates","isEditing","isEmpty","hasSelectedEditor","hasSelectedText","translationTimeoutId","container","viewer","TRANSLATE_SMALL","TRANSLATE_BIG","_keyboardManager","proto","arrowChecker","activeElement","tagName","hasSomethingToControl","textInputChecker","_self","el","HTMLInputElement","small","big","selectAll","addNewEditorFromKeyboard","HTMLButtonElement","isEnterHandled","unselectAll","translateSelectedEditors","eventBus","pdfDocument","_eventBus","_on","addSelectionListener","addKeyboardManager","viewParameters","realScale","isShiftKeyDown","removeKeyboardManager","removeFocusManager","_off","layer","clearTimeout","removeSelectionListener","mlGuess","guess","hasMLManager","hcmFilter","foreground","background","pair","highlightColorNames","reverse","setMainHighlightColorPicker","editAltText","pageNumber","focusMainContainer","findParent","layerX","layerY","getBoundingClientRect","disableUserSelect","toggle","addShouldRescale","removeShouldRescale","commitOrRemove","pagesRotation","getAnchorElementForSelection","#getAnchorElementForSelection","anchorNode","Node","parentElement","methodOfCreation","selection","getSelection","isCollapsed","anchorOffset","focusNode","focusOffset","anchorElement","textLayer","closest","getSelectionBoxes","empty","dispatch","HIGHLIGHT","showAllEditors","hasTextLayer","createAndAddNewEditor","displayHighlightToolbar","#displayHighlightToolbar","addToAnnotationStorage","setValue","#selectionChange","dispatchUpdateStates","pointerup","removeEventListener","onSelectEnd","#onSelectEnd","#addSelectionListener","#removeSelectionListener","addFocusManager","#addFocusManager","#removeFocusManager","hasSelection","lastEditor","once","#addKeyboardManager","#removeKeyboardManager","addCopyPasteListeners","#addCopyPasteListeners","removeCopyPasteListeners","#removeCopyPasteListeners","addEditListeners","removeEditListeners","editors","serialized","clipboardData","setData","item","items","isHandlingMimeForPasting","currentLayer","getData","ex","newEditors","deserializedEditor","deserialize","addEditorToLayer","selectEditors","addCommands","isEditorHandlingKeyboard","#dispatchUpdateStates","hasChanged","some","assign","dispatchUpdateUI","HIGHLIGHT_FREE","#dispatchUpdateUI","setEditingState","registerEditorTypes","types","defaultPropertiesToUpdate","getId","getLayer","pageIndex","addLayer","enable","disable","removeLayer","updateMode","editId","isFromKeyboard","disableAll","enableAll","annotationElementId","setSelected","enterInEditMode","unselect","canCreateNewEmptyEditor","addNewEditor","updateToolbar","updateParams","CREATE","stampType","currentUsername","PDFViewerApplication","appConfig","user","HIGHLIGHT_DEFAULT_COLOR","updateColor","HIGHLIGHT_SHOW_ALL","action","updateDefaultParams","visible","updateButton","state","enableWaiting","mustWait","disableClick","enableClick","#enableAll","#disableAll","getEditors","getEditor","addEditor","removeEditor","setTimeout","addDeletedAnnotationElement","addChangedExistingAnnotation","deleted","isDeletedAnnotationElement","removeDeletedAnnotationElement","removeChangedExistingAnnotation","#addEditorToLayer","addOrRebuild","setActiveEditor","propertiesToUpdate","lastSelectedEditor","#lastSelectedEditor","ed","updateUI","toggleSelected","isSelected","firstSelectedEditor","#isEmpty","#selectEditors","commit","noCommit","totalX","totalY","TIME_TO_WAIT","translateInPage","setUpDragSession","savedX","savedY","savedPageIndex","newX","newY","newPageIndex","endDragSession","mustBeAddedInUndoStack","move","_setParentAndPosition","dragSelectedEditors","tx","ty","drag","rebuild","changeParent","getActive","shouldGetKeyboardEvents","isActive","getMode","imageManager","rangeCount","getRangeAt","commonAncestorContainer","parentWidth","parentHeight","rotator","range","collapsed","getClientRects","renderAnnotationElement","annotation","editorId","getRawValue","hasBeenModified","AltText","altText","altTextDecorative","altTextButton","altTextTooltip","altTextTooltipTimeout","altTextWasFromKeyBoard","_l10nPromise","initialize","l10nPromise","onClick","setState","finish","focusVisible","decorative","enabled","disabled","#setState","tooltip","DELAY_TO_SHOW_TOOLTIP","_reportTelemetry","innerText","getImageForAltText","AnnotationEditor","allResizerDivs","keepAspectRatio","resizersDiv","savedDimensions","boundFocusin","focusin","boundFocusout","focusout","focusedResizerName","hasBeenClicked","initialPosition","isInEditMode","isResizerEnabledForKeyboard","moveInDOMTimeout","prevDragX","prevDragY","telemetryTimeouts","_initialOptions","_isVisible","isDraggable","_zIndex","_borderLineWidth","_colorManager","_telemetryTimeout","_resizerKeyboardManager","resize","_resizeWithKeyboard","_stopResizingWithKeyboard","parameters","_willKeepAspectRatio","isCentered","_structTreeParentId","pageRotation","pageDimensions","pageTranslation","parentDimensions","clientX","clientY","isAttachedToDOM","getPrototypeOf","_type","_defaultLineColor","deleteAnnotationElement","fakeEditor","FakeEditor","getNextId","l10n","replaceAll","strings","documentElement","_value","mime","_isDraggable","center","parentRotation","fixAndSetPosition","setInBackground","setInForeground","setParent","stopResizing","relatedTarget","isMultipleSelection","setAt","screenToPageTranslation","translate","#translate","scrollIntoView","block","findNewParent","floor","bx","by","getBaseTranslation","toFixed","_hasBeenMoved","_mustFixPosition","moveInDOM","rotatePoint","#rotatePoint","angle","pageTranslationToScreen","getRotationMatrix","#getRotationMatrix","parentScale","scaledWidth","scaledHeight","setDims","fixDims","widthPercent","endsWith","heightPercent","getInitialTranslation","createResizers","#createResizers","classes","resizerPointerdown","#resizerPointerdown","boundResizerPointermove","resizerPointermove","savedDraggable","pointerMoveOptions","passive","togglePointerEvents","savedWidth","savedHeight","savedParentCursor","savedCursor","pointerUpCallback","addResizeToUndoStack","#addResizeToUndoStack","newWidth","newHeight","#resizerPointermove","minWidth","MIN_SIZE","minHeight","rotationMatrix","transf","invRotationMatrix","invTransf","getPoint","getOpposite","isDiagonal","isHorizontal","point","oppositePoint","transfOppositePoint","oppositeX","oppositeY","ratioX","ratioY","deltaX","deltaY","movementX","movementY","oldDiag","hypot","altTextFinish","addEditToolbar","removeEditToolbar","getClientDimensions","altTextData","hasAltText","maxWidth","maxHeight","pointerdown","selectOnPointerEvent","#selectOnPointerEvent","#setUpDragSession","pointerMoveCallback","moveEditorInDOM","getRect","shiftX","shiftY","getRectInCurrentCoords","x1","y1","x2","y2","onceAdded","enableEditMode","disableEditMode","needsToBeRebuilt","rotate","_angle","serializeDeleted","popupRef","_initialData","isForCopying","timeout","isResizable","makeResizable","children","boundResizerKeydown","resizerKeydown","boundResizerBlur","resizerBlur","resizerFocus","firstPosition","nextFirstPosition","firstChild","before","lastChild","child","setResizerTabIndex","stopImmediatePropagation","#resizerKeydown","#resizerBlur","#resizerFocus","#setResizerTabIndex","#stopResizing","preventScroll","disableEditing","enableEditing","contentDiv","setAspectRatio","aspectRatio","telemetryInitialData","telemetryFinalData","nodeName","resetAnnotationElement","SEED","MASK_HIGH","MASK_LOW","MurmurHash3_64","seed","h1","h2","update","code","charCodeAt","isView","byteLength","blockCounts","tailLength","dataUint32","k1","k2","C1","C2","C1_LOW","C2_LOW","hexdigest","objectFromMap","SerializableEmpty","freeze","hash","transfer","AnnotationStorage","modified","storage","onSetModified","onResetModified","onAnnotationEditor","getValue","defaultValue","resetModified","setModified","getAll","getAllEntity","setAll","#setModified","print","PrintAnnotationStorage","serializable","hasBitmap","editorStats","stats","typeToEditor","counters","computeTelemetryFinalData","structuredClone","isNodeJS","process","versions","nw","electron","IDENTITY_MATRIX","FONT_IDENTITY_MATRIX","MAX_IMAGE_SIZE_TO_CACHE","LINE_FACTOR","LINE_DESCENT_FACTOR","BASELINE_FACTOR","RenderingIntentFlag","ANY","DISPLAY","PRINT","SAVE","ANNOTATIONS_FORMS","ANNOTATIONS_STORAGE","ANNOTATIONS_DISABLE","OPLIST","AnnotationMode","DISABLE","ENABLE","ENABLE_FORMS","ENABLE_STORAGE","TEXT","FREETEXT","STAMP","INK","REDACTION","RESIZE","FREETEXT_SIZE","FREETEXT_COLOR","FREETEXT_OPACITY","INK_COLOR","INK_THICKNESS","INK_OPACITY","HIGHLIGHT_COLOR","HIGHLIGHT_THICKNESS","StampTypes","APPROVED","REJECTED","PermissionFlag","MODIFY_CONTENTS","COPY","MODIFY_ANNOTATIONS","FILL_INTERACTIVE_FORMS","COPY_FOR_ACCESSIBILITY","ASSEMBLE","PRINT_HIGH_QUALITY","TextRenderingMode","FILL","STROKE","FILL_STROKE","INVISIBLE","FILL_ADD_TO_PATH","STROKE_ADD_TO_PATH","FILL_STROKE_ADD_TO_PATH","ADD_TO_PATH","FILL_STROKE_MASK","ADD_TO_PATH_FLAG","ImageKind","GRAYSCALE_1BPP","RGB_24BPP","RGBA_32BPP","AnnotationType","LINK","LINE","SQUARE","CIRCLE","POLYGON","POLYLINE","UNDERLINE","SQUIGGLY","STRIKEOUT","CARET","POPUP","FILEATTACHMENT","SOUND","MOVIE","WIDGET","SCREEN","PRINTERMARK","TRAPNET","WATERMARK","THREED","REDACT","AnnotationReplyType","GROUP","REPLY","AnnotationFlag","HIDDEN","NOZOOM","NOROTATE","NOVIEW","READONLY","LOCKED","TOGGLENOVIEW","LOCKEDCONTENTS","AnnotationFieldFlag","REQUIRED","NOEXPORT","MULTILINE","PASSWORD","NOTOGGLETOOFF","RADIO","PUSHBUTTON","COMBO","EDIT","SORT","FILESELECT","MULTISELECT","DONOTSPELLCHECK","DONOTSCROLL","COMB","RICHTEXT","RADIOSINUNISON","COMMITONSELCHANGE","AnnotationBorderStyleType","SOLID","DASHED","BEVELED","INSET","AnnotationActionEventType","E","X","D","U","Fo","Bl","PO","PC","PV","PI","K","F","V","C","DocumentActionEventType","WC","WS","DS","WP","DP","PageActionEventType","O","VerbosityLevel","ERRORS","WARNINGS","INFOS","OPS","dependency","setLineWidth","setLineCap","setLineJoin","setMiterLimit","setDash","setRenderingIntent","setFlatness","setGState","restore","moveTo","lineTo","curveTo","curveTo2","curveTo3","closePath","rectangle","stroke","closeStroke","fill","eoFill","fillStroke","eoFillStroke","closeFillStroke","closeEOFillStroke","endPath","clip","eoClip","beginText","endText","setCharSpacing","setWordSpacing","setHScale","setLeading","setFont","setTextRenderingMode","setTextRise","moveText","setLeadingMoveText","setTextMatrix","nextLine","showText","showSpacedText","nextLineShowText","nextLineSetSpacingShowText","setCharWidth","setCharWidthAndBounds","setStrokeColorSpace","setFillColorSpace","setStrokeColor","setStrokeColorN","setFillColor","setFillColorN","setStrokeGray","setFillGray","setStrokeRGBColor","setFillRGBColor","setStrokeCMYKColor","setFillCMYKColor","shadingFill","beginInlineImage","beginImageData","endInlineImage","paintXObject","markPoint","markPointProps","beginMarkedContent","beginMarkedContentProps","endMarkedContent","beginCompat","endCompat","paintFormXObjectBegin","paintFormXObjectEnd","beginGroup","endGroup","beginAnnotation","endAnnotation","paintImageMaskXObject","paintImageMaskXObjectGroup","paintImageXObject","paintInlineImageXObject","paintInlineImageXObjectGroup","paintImageXObjectRepeat","paintImageMaskXObjectRepeat","paintSolidColorImageMask","constructPath","PasswordResponses","NEED_PASSWORD","INCORRECT_PASSWORD","verbosity","setVerbosityLevel","level","Number","isInteger","getVerbosityLevel","assert","cond","_isValidProtocol","createValidAbsoluteUrl","addDefaultProtocol","dots","tryConvertEncoding","stringToUTF8String","absoluteUrl","prop","nonSerializable","defineProperty","enumerable","configurable","writable","BaseExceptionClosure","subcode","PasswordException","UnknownErrorException","InvalidPDFException","MissingPDFException","UnexpectedResponseException","FormatError","AbortException","bytesToString","bytes","MAX_ARGUMENT_COUNT","fromCharCode","apply","strBuf","chunkEnd","chunk","subarray","string32","objectSize","isLittleEndian","buffer8","view32","isEvalSupported","Function","isOffscreenCanvasSupported","navigator","supports","hexNumbers","g","scaleMinMax","minMax","temp","m1","m2","p","m","xt","yt","getAxialAlignedBoundingBox","p1","p2","p3","p4","inverseTransform","singularValueDecompose2dScale","transpose","sqrt","sx","sy","normalizeRect","intersect","rect1","rect2","xLow","xHigh","yLow","yHigh","getExtremumOnCurve","#getExtremumOnCurve","x0","x3","y0","y3","t","mt","tt","ttt","getExtremum","#getExtremum","delta","sqrtDelta","a2","bezierBoundingBox","PDFStringTranslateTable","stringToPDFString","encoding","decoder","TextDecoder","fatal","decoded","charCode","charAt","escape","utf8StringToString","unescape","encodeURIComponent","isArrayEqual","arr1","arr2","getModificationDate","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","NormalizeRegex","NormalizationMap","normalizeUnicode","_","normalize","crypto","randomUUID","buf","getRandomValues","random","AnnotationPrefix","FontRenderOps","BEZIER_CURVE_TO","MOVE_TO","LINE_TO","QUADRATIC_CURVE_TO","RESTORE","SCALE","TRANSFORM","TRANSLATE","AltTextManager","boundUpdateUIState","updateUIState","boundSetPosition","setPosition","boundOnClick","currentEditor","cancelButton","dialog","hasUsedPointer","optionDescription","optionDecorative","overlayManager","saveButton","previousAltText","svgElement","rectElement","telemetryData","register","_elements","createSVGElement","#createSVGElement","svgFactory","mask","checked","#setPosition","containerX","containerY","containerW","containerH","innerWidth","windowW","innerHeight","windowH","dialogW","dialogH","MARGIN","xs","xe","ys","ye","right","#finish","active","#close","alt_text_keyboard","removeOnClickListeners","#updateUIState","#save","alt_text_description","alt_text_edit","alt_text_decorative","#onClick","evt","detail","#removeOnClickListeners","AnnotationEditorLayer","GenericL10n","AnnotationEditorLayerBuilder","annotationLayer","drawLayer","onAppend","pdfPage","accessibilityManager","annotationEditorLayer","_cancelled","intent","clonedViewport","hidden","dir","annotations","cancel","isInvisible","AnnotationEditorParams","bindListeners","#bindListeners","editorFreeTextFontSize","editorFreeTextColor","editorInkColor","editorInkThickness","editorInkOpacity","editorStampAddImage","editorFreeHighlightThickness","editorHighlightShowAll","editorRedactionStampAddImage","editorApprovedStampAddImage","editorRejectedStampAddImage","dispatchEvent","typeStr","valueAsNumber","toggleHighlightShowAll","clonedEditorHightlightShowAll","AnnotationLayer","AnnotationLayerBuilder","eventAbortController","linkService","downloadManager","imageResourcesPath","renderForms","enableScripting","hasJSActionsPromise","fieldObjectsPromise","annotationCanvasMap","annotationEditorUIManager","annotationStore","_hasJSActionsPromise","_fieldObjectsPromise","_annotationCanvasMap","_accessibilityManager","_annotationEditorUIManager","hasJSActions","fieldObjects","getAnnotations","page","abort","animationStarted","apiPageLayoutToViewerModes","AutoPrintRegExp","DEFAULT_SCALE_VALUE","getActiveOrFocusedElement","isValidRotation","isValidScrollMode","isValidSpreadMode","normalizeWheelEventDirection","ProgressBar","RenderingStates","ScrollMode","SpreadMode","build","getDocument","GlobalWorkerOptions","version","AppOptions","OptionKind","AutomationEventBus","EventBus","ExternalServices","initCom","MLManager","LinkTarget","PDFLinkService","Attachments","DownloadManager","OverlayManager","PDFFindBar","PDFFindController","PDFHistory","PDFPrintServiceFactory","PDFRenderingQueue","PDFViewer","Preferences","SecondaryToolbar","Toolbar","ViewHistory","FORCE_PAGES_LOADED_TIMEOUT","WHEEL_ZOOM_DISABLED_TIMEOUT","ViewOnLoad","UNKNOWN","PREVIOUS","INITIAL","initialBookmark","location","_initializedCapability","withResolvers","settled","pdfLoadingTask","printService","pdfViewer","pdfRenderingQueue","pdfLinkService","pdfHistory","store","preferences","secondaryToolbar","attachments","annotationEditorParams","annotationsToolbarContainer","isInitialViewSet","downloadComplete","isViewerEmbedded","_downloadUrl","_eventBusAbortController","_windowAbortController","documentInfo","metadata","_contentDispositionFilename","_contentLength","_saveInProgress","_wheelUnusedTicks","_wheelUnusedFactor","_touchUnusedTicks","_touchUnusedFactor","_PDFBug","_hasAnnotationEditors","_title","title","_printAnnotationStoragePromise","_touchInfo","_isCtrlKeyDown","_nimbusDataPromise","_caretBrowsing","_isScrolling","loaderContainer","setMasked","xtype","initializedPromise","externalServices","createL10n","getElementsByTagName","getDirection","appContainer","TOP","initialized","unbindEvents","unbindWindowEvents","_initializeViewerComponents","bindWindowEvents","onIdle","_cleanup","externalLinkTarget","externalLinkRel","ignoreDestinationZoom","findController","updateMatchesCountOnProgress","mainContainer","viewerContainer","annotationEditorMode","altTextDialog","renderingQueue","textLayerMode","annotationMode","annotationEditorHighlightColors","enablePrintAutoRotate","maxCanvasPixels","enablePermissions","setViewer","setHistory","supportsIntegratedFind","findBar","unbindListeners","editorModeButtons","editorModeSeparator","editorCommentButton","editorNoteParamsToolbar","toggleAnnotationsToolbarButton","annotationToolbarContainer","signatureActionButtonContainer","signatureSaveButton","showSignatureCnfrmDialogue","signatureCnfrmDialog","yesButton","saveSignature","noButton","click","showSignatureActionButtons","setProperty","run","config","validateFileURL","supportsPrinting","supportsAnnotations","extractAnnotations","editorStampButton","editorInkButton","editorFreeTextButton","editorHighlightButton","editorRedactionButton","editorNoteAddComment","editorNoteVisibility","supportsDocParts","toggleButton","supportsSaveOrientation","saveOrientationButton","supportsAttachments","viewAttachments","viewFind","zoomIn","steps","scaleFactor","increaseScale","drawingDelay","zoomOut","decreaseScale","zoomReset","currentScaleValue","pagesCount","numPages","currentPageNumber","supportsFullscreen","fullscreenEnabled","supportsPinchToZoom","loadingBar","barElement","bar","supportsMouseWheelZoomCtrlKey","supportsMouseWheelZoomMetaKey","_docFilename","_unblockDocumentLoadEvent","errorWrapper","promises","setDocument","externalLinkEnabled","dontReloadAttachments","cleanup","workerParams","WORKER","apiParams","API","loadingTask","onProgress","loaded","total","progress","viewNotSupported","_documentError","isInfo","load","allowESignature","disableSignatureButton","saveAnnotations","writeToStorage","saveComments","_ensureDownloadComplete","download","Blob","downloadUrl","createPdfFile","saveDocument","File","extractAnnotationsFromFile","readFileAsArrayBuffer","processPageAnnotations","pageNum","getPage","updateStorage","indexToRemove","findIndex","reader","readAsArrayBuffer","reportTelemetry","downloadOrSave","moreInfo","_otherError","moreInfoText","stack","lineNumber","setHidden","errorWrapperConfig","errorMessage","closeButton","onclick","downloadButton","firstElementChild","oncontextmenu","percent","loadingParams","disableAutoFetch","setDisableAutoFetch","getDownloadInfo","firstPagePromise","pageLayoutPromise","getPageLayout","pageModePromise","getPageMode","openActionPromise","getOpenAction","setPagesCount","onePageRendered","pagesPromise","storedPromise","fingerprints","getMultiple","zoom","scrollLeft","scrollTop","scrollMode","spreadMode","setWidth","_initializeAnnotationStorageCallbacks","timeStamp","stored","pageLayout","pageMode","openAction","viewOnLoad","_initializePdfHistory","fingerprint","initialDest","dest","modes","setInitialView","race","hasEqualPageSizes","_initializeAutoPrint","timestamp","_initializePageLabels","_initializeMetadata","_scriptingDocProperties","baseURL","filesize","getRaw","authors","jsActions","getJSActions","triggerAutoPrint","js","triggerPrinting","contentDispositionFilename","contentLength","getMetadata","PDFFormatVersion","Producer","Creator","IsXFAPresent","IsAcroFormPresent","isPureXfa","enableXfa","IsSignaturesPresent","labels","getPageLabels","numLabels","standardLabels","emptyLabels","setPageLabels","setPageNumber","currentPageLabel","resetHistory","updateUrl","explicitDest","beforeUnload","_annotationStorageModified","storedHash","setRotation","setViewerModes","scroll","spread","initialRotation","setHash","forceRendering","printing","renderHighestPriority","beforePrint","pageViewsReady","alert","createPrintService","pagesOverview","getPagesOverview","printContainer","printResolution","printAnnotationStoragePromise","layout","afterPrint","rotatePages","toggleAnnotationsToolbar","toggleCommentsToolbar","editorParamsToolbar","paramsToolbar","addTopMarginToMainContainer","toggleAnnotationsVisibility","annotationEditorLayers","toggleAnnotationsVisibilityButton","onCloseSignatureActionButton","ensureOverlay","showSignatureDialogue","signatureDialog","dialogType","overlayPromise","shouldAddMargin","marginTop","AbortController","signal","webViewerResize","webViewerHashchange","webViewerPageRender","webViewerPageRendered","webViewerUpdateViewarea","webViewerPageChanging","webViewerScaleChanging","webViewerRotationChanging","webViewerNamedAction","webViewerSwitchAnnotationEditorMode","webViewerSwitchAnnotationEditorParams","webViewerAddSignatureTextOption","webViewerSaveComments","webViewerExtractAnnotations","webViewerPrint","webViewerFirstPage","webViewerLastPage","webViewerNextPage","webViewerPreviousPage","webViewerZoomIn","webViewerZoomOut","webViewerZoomReset","webViewerPageNumberChanged","webViewerScaleChanged","webViewerRotateCw","webViewerRotateCcw","webViewerSaveOrientation","webViewerOptionalContentConfig","webViewerSwitchScrollMode","webViewerSwitchSpreadMode","webViewerFindFromUrlHash","webViewerUpdateFindMatchesCount","webViewerUpdateFindControlState","webViewerToggleAnnotationsToolbar","webViewerShowSignatureDialogue","webViewerToggleCommentsToolbar","webViewerToggleAnnotationsVisibility","reportPageStatsPDFBug","addWindowResolutionChange","webViewerResolutionChange","mediaQueryList","devicePixelRatio","webViewerVisibilityChange","webViewerWheel","webViewerTouchStart","webViewerTouchMove","webViewerTouchEnd","webViewerClick","webViewerKeyDown","webViewerKeyUp","_lastScrollTop","_lastScrollLeft","scrollend","_accumulateTicks","ticks","wholeTicks","trunc","_accumulateFactor","previousScale","factor","newFactor","_centerAtPos","scaleDiff","currentScale","containerTopLeft","blockUnblockOnload","initGlobals","HOSTED_VIEWER_ORIGINS","viewerOrigin","href","origin","fileOrigin","Stats","pageView","getPageView","updateLoadingIndicatorState","setMultiple","popStateInProgress","editorFreeTextParamsToolbar","nextPage","previousPage","goToPage","saveOrientation","orientationStore","optionalContentConfigPromise","query","caseSensitive","entireWord","highlightAll","findPrevious","matchDiacritics","matchesCount","updateFindMatchesCount","updateResultsCount","previous","rawQuery","updateFindControlState","setPageScale","presetValue","docRotation","pageLabel","currentPage","renderingState","RUNNING","refresh","visibilityState","setZoomDisabledTimeout","zoomDisabledTimeout","deltaMode","exp","isBuiltInMac","isPinchToZoom","WheelEvent","DOM_DELTA_PIXEL","deltaZ","DOM_DELTA_LINE","DOM_DELTA_PAGE","sign","PIXELS_PER_LINE_SCALE","touches","touch0","touch1","identifier","touch0X","touch0Y","touch1X","touch1Y","page0X","page0Y","page1X","page1Y","pTouch0X","pTouch0Y","pTouch1X","pTouch1Y","v1X","v1Y","v2X","v2Y","det","diff0X","diff1X","diff0Y","diff1Y","dotProduct","distance","pDistance","newScaleFactor","isOpen","containsElement","handled","ensureViewerFocused","keyCode","newState","curElement","curElementTagName","toUpperCase","isContentEditable","turnPage","turnOnlyIfPageFit","isVerticalScrollbarEnabled","isHorizontalScrollbarEnabled","opened","returnValue","webViewerAnnotationEditorStatesChanged","updateEditorStates","webViewerReportTelemetry","PDFViewerApplicationOptions","compatibilityParams","userAgent","maxTouchPoints","isAndroid","isIOS","checkCanvasSizeLimitation","BROWSER","VIEWER","PREFERENCE","defaultOptions","canvasMaxAreaInBytes","kind","isInAutomation","supportsDocumentFonts","defaultZoomDelay","defaultZoomValue","disableHistory","disablePageLabels","enableHighlightEditor","enableML","enableStampEditor","enableApprovedStampType","enableRejectedStampType","enableRedactionEditor","enableInkEditor","enableFreeTextEditor","enableToggleAnnotationsToolbar","enableCommentEditor","highlightEditorColors","historyUpdateUrl","forcePageColors","pageColorsBackground","pageColorsForeground","pdfBugEnabled","scrollModeOnLoad","spreadModeOnLoad","cMapPacked","cMapUrl","disableFontFace","disableRange","disableStream","docBaseUrl","fontExtraProperties","maxImageSize","pdfBug","standardFontDataUrl","workerPort","workerSrc","defaultUrl","sandboxBundleSrc","viewerCssTheme","disablePreferences","language","userOptions","defaultOnly","defaultOption","init","toggleExpandedBtn","viewerApplication","attachment","itemContainer","itemCheckbox","partId","itemLabel","eventDetails","_attachmentsAbortController","versionNo","getSavedAnnotations","blobUrl","openBlobUrls","WeakMap","_options","downloadData","contentType","createObjectURL","openOrDownloadData","isPdfData","viewerUrl","revokeObjectURL","DrawLayer","DrawLayerBuilder","getDrawLayer","WaitOnType","EVENT","TIMEOUT","waitOnEventOrTimeout","delay","ac","handler","evtMethod","listeners","on","eventName","listener","external","off","eventListeners","externalListeners","rmAbort","AbortSignal","aborted","onAbort","BaseExternalServices","initPassiveLoading","createScripting","getNimbusExperimentData","docProperties","GenericScripting","_ready","sandbox","pdfjsSandbox","QuickJSSandbox","createSandbox","dispatchEventInSandbox","destroySandbox","nukeSandbox","BasePreferences","app","_writeToStorage","prefObj","localStorage","setItem","_readFromStorage","prefs","getItem","L10n","createBundle","lang","resource","generateBundlesFallback","getLanguage","_setL10n","#generateBundles","defaultLang","baseLang","paths","getPaths","langs","shortLang","createBundleFallback","#createBundle","path","#getPaths","#generateBundlesFallback","#createBundleFallback","isRTL","fixupLangCode","fallback","messages","pause","resume","#fixupLangCode","langCode","PARTIAL_LANG_CODES","en","es","fy","ga","gu","hi","hy","nb","ne","nn","pa","pt","sv","zh","#isRTL","shortCode","overlays","canForceClose","showModal","FindState","MATCHES_COUNT_LIMIT","resizeObserver","ResizeObserver","resizeObserverCallback","findField","highlightAllCheckbox","caseSensitiveCheckbox","matchDiacriticsCheckbox","entireWordCheckbox","findMsg","findResultsCount","findPreviousButton","findNextButton","_findBarAbortController","findPrev","findMsgId","FOUND","PENDING","NOT_FOUND","WRAPPED","current","limit","#resizeObserverCallback","findbarHeight","clientHeight","inputContainerHeight","CharacterType","SPACE","ALPHA_LETTER","PUNCT","HAN_LETTER","KATAKANA_LETTER","HIRAGANA_LETTER","HALFWIDTH_KATAKANA_LETTER","THAI_LETTER","isAlphabeticalScript","isAscii","isAsciiAlpha","isAsciiDigit","isAsciiSpace","isHan","isKatakana","isHiragana","isHalfwidthKatakana","isThai","getCharacterType","NormalizeWithNFKC","getNormalizeWithNFKC","binarySearchFirstItem","FIND_TIMEOUT","MATCH_SCROLL_OFFSET_TOP","MATCH_SCROLL_OFFSET_LEFT","CHARACTERS_TO_NORMALIZE","DIACRITICS_EXCEPTION","DIACRITICS_EXCEPTION_STR","DIACRITICS_REG_EXP","SPECIAL_CHARS_REG_EXP","NOT_DIACRITIC_FROM_END_REG_EXP","NOT_DIACRITIC_FROM_START_REG_EXP","SYLLABLES_REG_EXP","SYLLABLES_LENGTHS","FIRST_CHAR_SYLLABLES_REG_EXP","NFKC_CHARS_TO_NORMALIZE","noSyllablesRegExp","withSyllablesRegExp","syllablePositions","index","len","normalizationRegex","toNormalizeWithNFKC","CJK","HKDiacritics","regexp","rawDiacriticsPositions","normalized","positions","rawDiacriticsIndex","syllableIndex","shift","shiftOrigin","eol","hasDiacritics","p5","p6","p7","p8","replacement","jj","hasTrailingDashEOL","newCharLen","getOriginalIndex","diffs","pos","oldStart","oldEnd","oldLen","visitedPagesCount","_linkService","onIsPageVisible","onFind","onFindBarClose","highlightMatches","_highlightMatches","pageMatches","_pageMatches","pageMatchesLength","_pageMatchesLength","selected","_selected","_pdfDocument","_firstPageCapability","#onFind","shouldDirtyMatch","_dirtyMatch","extractText","findbarClosed","pendingTimeout","_findTimeout","nextMatch","updateAllPages","scrollMatchIntoView","selectedLeft","matchIndex","_scrollMatches","matchIdx","pageIdx","spot","#reset","_offset","wrapped","_extractTextPromises","_pageContents","_pageDiffs","_hasDiacritics","_matchesCountTotal","_pagesToSearch","_pendingFindMatches","_resumePageIdx","#query","_rawQuery","_normalizedQuery","q","#shouldDirtyMatch","newQuery","prevQuery","newType","prevType","isEntireWord","#isEntireWord","startIdx","calculateRegExpMatch","#calculateRegExpMatch","pageContent","matchesLength","matchPos","matchLen","convertToRegExpString","#convertToRegExpString","isUnicode","trailingSpaces","calculateMatch","#calculateMatch","sort","isUnicodePart","queryPart","flags","updatePage","nextPageMatch","pageMatchesCount","updateUIResultsCount","#extractText","deferred","textOptions","disableNormalization","getTextContent","textItem","hasEOL","#updatePage","#updateAllPages","#nextMatch","offset","numPageMatches","updateMatch","advanceOffsetPage","matchesReady","#matchesReady","numMatches","#nextPageMatch","#advanceOffsetPage","#updateMatch","found","#onFindBarClose","requestMatchesCount","#requestMatchesCount","#updateUIResultsCount","parseQueryString","HASH_CHANGE_TIMEOUT","POSITION_UPDATED_THRESHOLD","UPDATE_VIEWAREA_TIMEOUT","getCurrentHash","_initialized","_fingerprint","_isPagesLoaded","reInitialized","_updateUrl","history","_popStateInProgress","_blockHashChange","_currentHash","_numPositionUpdates","_uid","_maxUid","_destination","_position","isValidState","parseCurrentHash","pushOrReplaceState","destination","updateInternalState","uid","_initialRotation","_initialBookmark","pageHide","_updateViewareaTimeout","namedDest","isValidPage","forceReplace","isDestHashesEqual","isDestArraysEqual","pushPage","pushCurrentPosition","tryPushCurrentPosition","back","forward","#pushOrReplaceState","shouldReplace","newUrl","replaceState","pushState","#tryPushCurrentPosition","temporary","#isValidPage","#isValidState","checkReload","perfEntry","performance","getEntriesByType","#updateInternalState","removeTemporary","#parseCurrentHash","checkNameddest","nameddest","updateViewarea","#updateViewarea","pdfOpenParams","popState","#popState","newHash","hashChanged","goToDestination","#pageHide","#bindEvents","#unbindEvents","destHash","pushHash","firstDest","secondDest","isEntryEqual","DEFAULT_LINK_REL","SELF","BLANK","PARENT","_ignoreDestinationZoom","getDestination","destRef","cachedPageNumber","getPageIndex","scrollPageIntoView","destArray","pageLabelToPageNumber","addLinkAttributes","link","newWindow","rel","targetStr","getDestinationHash","getAnchorUrl","anchor","phrase","zoomArgs","zoomArg","zoomArgNumber","allowNegativeOffset","isValidExplicitDest","executeNamedAction","executeSetOCGState","optionalContentConfig","setOCGState","#isValidExplicitDest","num","gen","allowNull","SimpleLinkService","approximateFraction","DEFAULT_SCALE","OutputScale","roundToDivide","TextLayerMode","StructTreeLayerBuilder","TextAccessibilityManager","TextHighlighter","TextLayerBuilder","XfaLayerBuilder","DEFAULT_LAYER_PROPERTIES","LAYERS_ORDER","PDFPageView","hasRestrictedScaling","layerProperties","loadingId","previousRotation","renderError","useThumbnailCanvas","directDrawing","initialOptionalContent","regularAnnotations","viewportMap","layers","defaultViewport","renderingId","pdfPageRotate","_optionalContentConfigPromise","renderTask","_isStandalone","hasViewer","_container","zoomLayer","xfaLayer","structTreeLayer","setDimensions","hasInitialVisibility","#addLayer","oldDiv","replaceWith","after","PAUSED","FINISHED","#setDimensions","setPdfPage","totalRotation","getViewport","_textHighlighter","renderAnnotationLayer","#renderAnnotationLayer","renderAnnotationEditorLayer","#renderAnnotationEditorLayer","renderDrawLayer","#renderDrawLayer","renderXfaLayer","#renderXfaLayer","textDivs","buildXfaTextContentItems","renderTextLayer","#renderTextLayer","renderingDone","readableStream","streamTextContent","includeMarkedContent","setTextContentSource","numTextDivs","renderStructTreeLayer","#renderStructTreeLayer","tree","getStructTree","treeDom","#buildXfaTextContentItems","setTextMapping","_resetZoomLayer","removeFromDOM","zoomLayerCanvas","keepZoomLayer","keepAnnotationLayer","keepAnnotationEditorLayer","keepXfaLayer","keepTextLayer","cancelRendering","zoomLayerNode","annotationLayerNode","annotationEditorLayerNode","xfaLayerNode","textLayerNode","node","layerIndex","indexOf","onlyCssZoom","outputScale","postponeDrawing","cancelExtraDelay","cssTransform","redrawAnnotationLayer","redrawAnnotationEditorLayer","redrawXfaLayer","redrawTextLayer","hideTextLayer","originalViewport","relativeRotation","absRotation","scaleX","scaleY","getPagePoint","finishRenderTask","#finishRenderTask","separateAnnots","draw","canvasWrapper","highlighter","ENABLE_PERMISSIONS","textLayerDiv","annotationLayerDiv","renderContinueCallback","cont","showCanvas","isHighestPriority","hasHCM","isLastShow","alpha","invScale","pixelsInViewport","maxScale","sfx","sfy","scaled","renderContext","canvasContext","onContinue","resultPromise","annotationEditorLayerDiv","setPageLabel","thumbnailCanvas","getXfaHtmlForPrinting","activeService","viewerApp","renderPage","activeServiceOnEntry","scratchCanvas","PRINT_UNITS","fillStyle","fillRect","printAnnotationStorage","PDFPrintService","_printResolution","getOptionalContentConfig","throwIfInactive","pageStyleSheet","renderPages","pageCount","renderNextPage","renderProgress","useRenderedPage","toBlob","toDataURL","wrapper","performPrint","eventType","CustomEvent","cancelable","getElementById","progressBar","progressPerc","chrome","opera","stopPropagationIfNeeded","printServiceDialog","CLEANUP_TIMEOUT","highestPriorityPage","idleTimeout","view","currentlyVisiblePages","getHighestPriority","views","scrolledDown","preRenderExtra","visibleViews","numVisible","isViewFinished","firstId","lastId","visibleIds","holeId","holeView","preRenderIndex","preRenderView","renderView","finally","DEFAULT_SCALE_DELTA","docStyle","getVisibleElements","isPortraitOrientation","MAX_AUTO_SCALE","MAX_SCALE","MIN_SCALE","removeNullCharacters","SCROLLBAR_PADDING","UNKNOWN_SCALE","VERTICAL_PADDING","watchScroll","DEFAULT_CACHE_SIZE","PagesCountLimit","FORCE_SCROLL_MODE_PAGE","FORCE_LAZY_PAGE_INIT","PAUSE_EAGER_PAGE_INIT","isValidAnnotationEditorMode","PDFPageViewBuffer","destroyFirstView","newSize","idsToKeep","#destroyFirstView","firstView","copyCallbackBound","getAllTextInProgress","hiddenCopyElement","interruptCopyCondition","previousContainerHeight","scrollModePageState","onVisibilityChange","scaleTimeoutId","viewerVersion","offsetParent","_getVisiblePages","removePageBorders","defaultRenderingQueue","_scrollUpdate","_onBeforeDraw","_onAfterDraw","_resetView","updateContainerHeightCss","_pages","getCachedPageViews","_currentPageNumber","_setCurrentPageNumber","resetCurrentPageView","_pageLabels","_currentScale","setScale","noScroll","_currentScaleValue","_pagesRotation","_onePageRenderedCapability","_pagesCapability","_layerProperties","getFieldObjects","initializePermissions","#initializePermissions","permissions","onePageRenderedOrForceFetch","#onePageRenderedOrForceFetch","visibilityChangePromise","getAllText","texts","copyCallback","#copyCallback","containsNode","interruptCopy","ev","clipboard","writeText","_cancelRendering","permissionsPromise","getPermissions","_scrollMode","PAGE","firstPdfPage","viewerElement","ensurePageViewVisible","_spreadMode","_updateSpreadMode","getPagesLeft","Language","_location","VERTICAL","_previousScrollMode","previousPageNumber","scrollDown","pages","_updateScrollMode","#ensurePageViewVisible","pageIndexSet","parity","#scrollIntoView","pageSpot","offsetLeft","clientLeft","clientWidth","HORIZONTAL","isSameScale","#isSameScale","newScale","setScaleUpdatePages","#setScaleUpdatePages","newValue","preset","pageWidthScaleFactor","#pageWidthScaleFactor","#setScale","hPadding","vPadding","pageWidthScale","pageHeightScale","horizontalScale","#resetCurrentPageView","widthScale","heightScale","changeOrientation","boundingRect","_updateLocation","firstPage","normalizedScaleValue","currentPageView","intLeft","intTop","visiblePages","numVisiblePages","newCacheSize","isSimpleLayout","currentId","stillFullyVisible","_isContainerRtl","scrollWidth","scrollHeight","horizontal","rtl","scrollEl","sortByVisibility","ensurePdfPageLoaded","#ensurePdfPageLoaded","getScrollAhead","#getScrollAhead","down","scrollAhead","firstPageView","initialOrientation","orientation","_getPageAdvance","yArray","currentIndex","expectedId","advance","ceil","#updateContainerHeightCss","borderBoxSize","blockSize","offsetTop","noUpdate","updateArgs","pdfjsLib","pdfjsLibPromise","ColorPicker","Outliner","PDFDataRangeTransport","PDFWorker","updateTextLayer","XfaLayer","browserDefaults","defaults","browserPrefs","prefVal","updatePref","#updatePref","oldPrefs","valueType","defaultType","xfaHtml","allXfaHtml","builder","firstPageButton","lastPageButton","pageRotateCwButton","pageRotateCcwButton","lastPage","pageRotateCw","pageRotateCcw","_secondaryToolbarAbortController","PDF_ROLE_TO_HTML_ROLE","Document","DocumentFragment","Part","Sect","Div","Aside","NonStruct","P","H","Title","FENote","Sub","Lbl","Span","Em","Strong","Link","Annot","Form","Ruby","RB","RT","RP","Warichu","WT","L","LI","LBody","Table","TR","TH","TD","THead","TBody","TFoot","Caption","Figure","Formula","Artifact","HEADING_PATTERN","structTree","walk","#setAttributes","structElement","htmlElement","alt","#walk","role","kid","textChildren","textNodes","waitingElements","compareElementPositions","#compareElementPositions","e1","e2","top1","bot1","mid1","top2","bot2","mid2","centerX1","centerX2","nodeIndex","addIdToAriaOwns","isRemovable","addPointerInTextLayer","removePointerInTextLayer","owns","#addIdToAriaOwns","moveElementInDOM","contentElement","hasChildNodes","elementToCompare","textContentItemsStr","divs","_updateMatches","_convertMatches","iIndex","mm","begin","divIdx","_renderMatches","isSelectedPage","selectedMatchIdx","prevEnd","infinity","appendTextToDiv","fromOffset","toOffset","i0","i1","lastDivIdx","lastOffset","highlightSuffix","n0","n1","clearedUntilDivIdx","textContentSource","textDivProperties","textLayerRenderTask","finishRendering","#finishRendering","endOfContent","bindMouse","mustRescale","#bindMouse","adjustTop","divBounds","toggleCheckedBtn","positionParamsToolbar","freeTextParamsToolbar","freeTextButton","containerRect","freeTextButtonRect","annotationToolbarRightOffset","halfOffset","addTextOption","trackpadMouseOption","editorInkParamsToolbar","stampParamsToolbar","editorStampParamsToolbar","stampButton","stampButtonRect","uploadImageOption","isHidden","setAnnotationEditorUIManager","#setAnnotationEditorUIManager","parentContainer","existingColorsDropdown","renderMainDropdown","toolbarContainer","hasPageLabels","pageScaleValue","pageScale","editorModeChanged","_toolbarAbortController","scaleSelect","editorHighlightColorPicker","#editorModeChanged","editorHighlightParamsToolbar","editorRedactionParamsToolbar","isDisable","resetNumPages","predefinedValueFound","customScaleOption","loading","ODD","EVEN","pixelRatio","scrollMatches","clientTop","overflow","viewAreaElement","debounceScroll","rAF","viewAreaElementScrolled","currentX","currentY","_eventHandler","URLSearchParams","InvisibleCharsRegExp","replaceInvisible","condition","minIndex","maxIndex","currentItem","xinv","x_","getPageSizeInches","userUnit","backtrackBeforeAllVisibleElements","elt","pageTop","bottom","isElementBottomAfterViewTop","elementBottom","isElementNextAfterViewHorizontally","elementLeft","elementRight","numViews","firstVisibleElementInd","lastEdge","currentWidth","currentHeight","viewWidth","viewHeight","viewRight","viewBottom","hiddenHeight","hiddenWidth","fractionHeight","fractionWidth","pc","atan2","normalizeWheelEventDelta","MOUSE_PIXELS_PER_LINE","MOUSE_LINES_PER_PAGE","clamp","disableAutoFetchTimeout","scrollbarWidth","offsetWidth","curRoot","curActiveOrFocused","shadowRoot","DEFAULT_VIEW_HISTORY_CACHE_SIZE","cacheSize","_initializedPromise","databaseStr","database","files","branch","properties","pdfjsVersion","pdfjsBuild","AppConstants","PDFViewerApplicationConstants","getViewerConfiguration","secondaryToolbarContainer","findbarContainer","attachmentsContainer","dialogContainer","altTextDialogContainer","printServiceDialogContainer","commentDialogContainer","signatureDialogContainer","signatureCnfrmDialogContainer","errorContainer","signatureCancelButton","commentDialog","annotationNoteTitle","annotationNote","comments","submitButton","deleteButton","isSignature","timezoneOffset","webViewerLoad","getXfa"],"sourceRoot":""}