{"version":3,"sources":["jsdelivr-header.js","/npm/@mux/mux-uploader@1.6.0/src/constants.ts","/npm/@mux/mux-uploader@1.6.0/src/lang/en.ts","/npm/@mux/mux-uploader@1.6.0/src/utils/i18n.ts","/npm/@mux/mux-uploader@1.6.0/src/lang/es.ts","/npm/@mux/mux-uploader@1.6.0/src/lang/fr.ts","/npm/@mux/mux-uploader@1.6.0/src/lang/de.ts","/npm/@mux/mux-uploader@1.6.0/src/lang/pt.ts","/npm/@mux/mux-uploader@1.6.0/src/lang/it.ts","/npm/@mux/mux-uploader@1.6.0/src/lang/zh.ts","/npm/@mux/mux-uploader@1.6.0/src/polyfills/index.ts","/npm/node_modules/@mux/upchunk/node_modules/global/window.js","/npm/node_modules/@mux/upchunk/node_modules/is-function/index.js","/npm/node_modules/@mux/upchunk/node_modules/parse-headers/parse-headers.js","/npm/node_modules/@mux/upchunk/node_modules/xtend/immutable.js","/npm/node_modules/@mux/upchunk/node_modules/xhr/index.js","/npm/node_modules/@mux/upchunk/node_modules/src/lib/misc.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/global.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/warning-handler.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/warnings.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/event.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/dom-exception.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/event-wrapper.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/listener.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/error-handler.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/listener-list.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/listener-list-map.ts","/npm/node_modules/@mux/upchunk/node_modules/src/lib/event-target.ts","/npm/node_modules/@mux/upchunk/src/upchunk.ts","/npm/@mux/mux-uploader@1.6.0/src/utils/element-utils.ts","/npm/@mux/mux-uploader@1.6.0/src/mux-uploader-drop.ts","/npm/@mux/mux-uploader@1.6.0/src/mux-uploader-progress.ts","/npm/@mux/mux-uploader@1.6.0/src/utils/progress.ts","/npm/@mux/mux-uploader@1.6.0/src/mux-uploader-status.ts","/npm/@mux/mux-uploader@1.6.0/src/mux-uploader-retry.ts","/npm/@mux/mux-uploader@1.6.0/src/mux-uploader-pause.ts","/npm/@mux/mux-uploader@1.6.0/src/mux-uploader-file-select.ts","/npm/@mux/mux-uploader@1.6.0/src/layouts/block.ts","/npm/@mux/mux-uploader@1.6.0/src/mux-uploader.ts","/npm/@mux/mux-uploader@1.6.0/src/mux-uploader-sr-text.ts","/npm/@mux/mux-uploader@1.6.0/src/index.ts"],"names":[],"mappings":"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","file":"/npm/@mux/mux-uploader@1.6.0/dist/mux-uploader.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.48.0.\n * Original file: /npm/@mux/mux-uploader@1.6.0/dist/mux-uploader.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","export type ProgressTypes = {\n  BAR: 'bar';\n  RADIAL: 'radial';\n  PERCENTAGE: 'percentage';\n};\n\nexport const ProgressTypes: ProgressTypes = {\n  BAR: 'bar',\n  RADIAL: 'radial',\n  PERCENTAGE: 'percentage',\n};\n","export const En = {\n  'Drop a video file here to upload': 'Drop a video file here to upload',\n  or: 'or',\n  'Upload complete!': 'Upload complete!',\n  Retry: 'Retry',\n  'Pausing...': 'Pausing...',\n  Resume: 'Resume',\n  Pause: 'Pause',\n  'Upload a video': 'Upload a video',\n  'No url or endpoint specified - cannot handle upload': 'No url or endpoint specified - cannot handle upload',\n} as const;\n\nexport type TranslateKeys = keyof typeof En;\n\nexport type TranslateDictionary = {\n  [key in TranslateKeys]: string;\n};\n","import type { TranslateDictionary, TranslateKeys } from '../lang/en.js';\nimport { En } from '../lang/en.js';\nimport { Es } from '../lang/es.js';\nimport { Fr } from '../lang/fr.js';\nimport { De } from '../lang/de.js';\nimport { Pt } from '../lang/pt.js';\nimport { It } from '../lang/it.js';\nimport { Zh } from '../lang/zh.js';\n\nconst translationsLanguages: Record<string, TranslateDictionary> = {\n  en: En,\n  es: Es,\n  fr: Fr,\n  de: De,\n  pt: Pt,\n  it: It,\n  zh: Zh,\n};\n\nexport const addTranslation = (langCode: string, languageDictionary: TranslateDictionary) => {\n  translationsLanguages[langCode] = languageDictionary;\n  if (!supportedLocales.includes(langCode)) {\n    supportedLocales.push(langCode);\n  }\n};\n\nconst getBrowserLanguage = (): string => {\n  if (typeof globalThis.navigator === 'undefined' || !globalThis.navigator.language) {\n    return 'en';\n  }\n  return globalThis.navigator.language.split('-')[0];\n};\n\nconst supportedLocales = ['en', 'es', 'fr', 'de', 'pt', 'it', 'zh'];\n\nconst getEffectiveLocale = (locale?: string | null): string => {\n  // Use provided locale if supported\n  if (locale && supportedLocales.includes(locale)) {\n    return locale;\n  }\n  // Otherwise, use browser language if supported\n  const browserLang = getBrowserLanguage();\n  if (supportedLocales.includes(browserLang)) {\n    return browserLang;\n  }\n  // Fallback to English\n  return 'en';\n};\n\nexport const t = (key: TranslateKeys, locale?: string | null) => {\n  const effectiveLocale = getEffectiveLocale(locale);\n  const dictionary = translationsLanguages[effectiveLocale] || En;\n  return dictionary[key] || En[key];\n};\n","import type { TranslateDictionary } from './en.js';\n\nexport const Es: TranslateDictionary = {\n  'Drop a video file here to upload': 'Arrastra un archivo de video aquí para subir',\n  or: 'o',\n  'Upload complete!': '¡Subida completada!',\n  Retry: 'Reintentar',\n  'Pausing...': 'Pausando...',\n  Resume: 'Reanudar',\n  Pause: 'Pausar',\n  'Upload a video': 'Subir un video',\n  'No url or endpoint specified - cannot handle upload':\n    'No se especificó URL o endpoint - no se puede manejar la subida',\n};\n","import type { TranslateDictionary } from './en.js';\n\nexport const Fr: TranslateDictionary = {\n  'Drop a video file here to upload': 'Déposez un fichier vidéo ici pour le télécharger',\n  or: 'ou',\n  'Upload complete!': 'Téléchargement terminé!',\n  Retry: 'Réessayer',\n  'Pausing...': 'En pause...',\n  Resume: 'Reprendre',\n  Pause: 'Pause',\n  'Upload a video': 'Télécharger une vidéo',\n  'No url or endpoint specified - cannot handle upload':\n    'Aucune URL ou point de terminaison spécifié - impossible de gérer le téléchargement',\n};\n","import type { TranslateDictionary } from './en.js';\n\nexport const De: TranslateDictionary = {\n  'Drop a video file here to upload': 'Legen Sie hier eine Videodatei zum Hochladen ab',\n  or: 'oder',\n  'Upload complete!': 'Upload abgeschlossen!',\n  Retry: 'Wiederholen',\n  'Pausing...': 'Pausiere...',\n  Resume: 'Fortsetzen',\n  Pause: 'Pausieren',\n  'Upload a video': 'Video hochladen',\n  'No url or endpoint specified - cannot handle upload':\n    'Keine URL oder Endpunkt angegeben - Upload kann nicht verarbeitet werden',\n};\n","import type { TranslateDictionary } from './en.js';\n\nexport const Pt: TranslateDictionary = {\n  'Drop a video file here to upload': 'Arraste um arquivo de vídeo aqui para fazer o upload',\n  or: 'ou',\n  'Upload complete!': 'Upload completo!',\n  Retry: 'Tentar novamente',\n  'Pausing...': 'Pausando...',\n  Resume: 'Retomar',\n  Pause: 'Pausar',\n  'Upload a video': 'Fazer upload de um vídeo',\n  'No url or endpoint specified - cannot handle upload':\n    'Nenhum URL ou endpoint especificado - não é possível processar o upload',\n};\n","import type { TranslateDictionary } from './en.js';\n\nexport const It: TranslateDictionary = {\n  'Drop a video file here to upload': 'Trascina qui un file video per caricarlo',\n  or: 'o',\n  'Upload complete!': 'Caricamento completato!',\n  Retry: 'Riprova',\n  'Pausing...': 'In pausa...',\n  Resume: 'Riprendi',\n  Pause: 'Pausa',\n  'Upload a video': 'Carica un video',\n  'No url or endpoint specified - cannot handle upload':\n    'Nessun URL o endpoint specificato - impossibile gestire il caricamento',\n};\n","import type { TranslateDictionary } from './en.js';\n\nexport const Zh: TranslateDictionary = {\n  'Drop a video file here to upload': '将视频文件拖放到此处以上传',\n  or: '或',\n  'Upload complete!': '上传完成！',\n  Retry: '重试',\n  'Pausing...': '暂停...',\n  Resume: '继续',\n  Pause: '暂停',\n  'Upload a video': '上传视频',\n  'No url or endpoint specified - cannot handle upload': '未指定 URL 或 endpoint - 无法处理上传',\n};\n","/* eslint @typescript-eslint/no-empty-function: \"off\" */\n\nclass EventTarget {\n  addEventListener() {}\n  removeEventListener() {}\n  dispatchEvent(_event: Event) {\n    return true;\n  }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n  class DocumentFragment extends EventTarget {}\n  // @ts-ignore\n  globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n  get(_name: string) {\n    return undefined;\n  },\n  define(_name, _constructor, _options) {},\n  getName(_constructor) {\n    return null;\n  },\n  upgrade(_root) {},\n  whenDefined(_name) {\n    return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n  },\n};\n\nclass CustomEvent {\n  #detail;\n  get detail() {\n    return this.#detail;\n  }\n  constructor(_typeArg: string, eventInitDict: CustomEventInit = {}) {\n    // super(typeArg, eventInitDict);\n    this.#detail = eventInitDict?.detail;\n  }\n  initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n  return new HTMLElement();\n}\n\nconst globalThisShim = {\n  document: {\n    createElement,\n  },\n  DocumentFragment,\n  customElements,\n  CustomEvent,\n  EventTarget,\n  HTMLElement,\n  HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n","var win;\n\nif (typeof window !== \"undefined\") {\n    win = window;\n} else if (typeof global !== \"undefined\") {\n    win = global;\n} else if (typeof self !== \"undefined\"){\n    win = self;\n} else {\n    win = {};\n}\n\nmodule.exports = win;\n","module.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n  if (!fn) {\n    return false\n  }\n  var string = toString.call(fn)\n  return string === '[object Function]' ||\n    (typeof fn === 'function' && string !== '[object RegExp]') ||\n    (typeof window !== 'undefined' &&\n     // IE8 and below\n     (fn === window.setTimeout ||\n      fn === window.alert ||\n      fn === window.confirm ||\n      fn === window.prompt))\n};\n","var trim = function(string) {\n  return string.replace(/^\\s+|\\s+$/g, '');\n}\n  , isArray = function(arg) {\n      return Object.prototype.toString.call(arg) === '[object Array]';\n    }\n\nmodule.exports = function (headers) {\n  if (!headers)\n    return {}\n\n  var result = {}\n\n  var headersArr = trim(headers).split('\\n')\n\n  for (var i = 0; i < headersArr.length; i++) {\n    var row = headersArr[i]\n    var index = row.indexOf(':')\n    , key = trim(row.slice(0, index)).toLowerCase()\n    , value = trim(row.slice(index + 1))\n\n    if (typeof(result[key]) === 'undefined') {\n      result[key] = value\n    } else if (isArray(result[key])) {\n      result[key].push(value)\n    } else {\n      result[key] = [ result[key], value ]\n    }\n  }\n\n  return result\n}\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","\"use strict\";\nvar window = require(\"global/window\")\nvar isFunction = require(\"is-function\")\nvar parseHeaders = require(\"parse-headers\")\nvar xtend = require(\"xtend\")\n\nmodule.exports = createXHR\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = createXHR;\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop\ncreateXHR.XDomainRequest = \"withCredentials\" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest\n\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function(method) {\n    createXHR[method === \"delete\" ? \"del\" : method] = function(uri, options, callback) {\n        options = initParams(uri, options, callback)\n        options.method = method.toUpperCase()\n        return _createXHR(options)\n    }\n})\n\nfunction forEachArray(array, iterator) {\n    for (var i = 0; i < array.length; i++) {\n        iterator(array[i])\n    }\n}\n\nfunction isEmpty(obj){\n    for(var i in obj){\n        if(obj.hasOwnProperty(i)) return false\n    }\n    return true\n}\n\nfunction initParams(uri, options, callback) {\n    var params = uri\n\n    if (isFunction(options)) {\n        callback = options\n        if (typeof uri === \"string\") {\n            params = {uri:uri}\n        }\n    } else {\n        params = xtend(options, {uri: uri})\n    }\n\n    params.callback = callback\n    return params\n}\n\nfunction createXHR(uri, options, callback) {\n    options = initParams(uri, options, callback)\n    return _createXHR(options)\n}\n\nfunction _createXHR(options) {\n    if(typeof options.callback === \"undefined\"){\n        throw new Error(\"callback argument missing\")\n    }\n\n    var called = false\n    var callback = function cbOnce(err, response, body){\n        if(!called){\n            called = true\n            options.callback(err, response, body)\n        }\n    }\n\n    function readystatechange() {\n        if (xhr.readyState === 4) {\n            setTimeout(loadFunc, 0)\n        }\n    }\n\n    function getBody() {\n        // Chrome with requestType=blob throws errors arround when even testing access to responseText\n        var body = undefined\n\n        if (xhr.response) {\n            body = xhr.response\n        } else {\n            body = xhr.responseText || getXml(xhr)\n        }\n\n        if (isJson) {\n            try {\n                body = JSON.parse(body)\n            } catch (e) {}\n        }\n\n        return body\n    }\n\n    function errorFunc(evt) {\n        clearTimeout(timeoutTimer)\n        if(!(evt instanceof Error)){\n            evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\") )\n        }\n        evt.statusCode = 0\n        return callback(evt, failureResponse)\n    }\n\n    // will load the data & process the response in a special response object\n    function loadFunc() {\n        if (aborted) return\n        var status\n        clearTimeout(timeoutTimer)\n        if(options.useXDR && xhr.status===undefined) {\n            //IE8 CORS GET successful response doesn't have a status field, but body is fine\n            status = 200\n        } else {\n            status = (xhr.status === 1223 ? 204 : xhr.status)\n        }\n        var response = failureResponse\n        var err = null\n\n        if (status !== 0){\n            response = {\n                body: getBody(),\n                statusCode: status,\n                method: method,\n                headers: {},\n                url: uri,\n                rawRequest: xhr\n            }\n            if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE\n                response.headers = parseHeaders(xhr.getAllResponseHeaders())\n            }\n        } else {\n            err = new Error(\"Internal XMLHttpRequest Error\")\n        }\n        return callback(err, response, response.body)\n    }\n\n    var xhr = options.xhr || null\n\n    if (!xhr) {\n        if (options.cors || options.useXDR) {\n            xhr = new createXHR.XDomainRequest()\n        }else{\n            xhr = new createXHR.XMLHttpRequest()\n        }\n    }\n\n    var key\n    var aborted\n    var uri = xhr.url = options.uri || options.url\n    var method = xhr.method = options.method || \"GET\"\n    var body = options.body || options.data\n    var headers = xhr.headers = options.headers || {}\n    var sync = !!options.sync\n    var isJson = false\n    var timeoutTimer\n    var failureResponse = {\n        body: undefined,\n        headers: {},\n        statusCode: 0,\n        method: method,\n        url: uri,\n        rawRequest: xhr\n    }\n\n    if (\"json\" in options && options.json !== false) {\n        isJson = true\n        headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\") //Don't override existing accept header declared by user\n        if (method !== \"GET\" && method !== \"HEAD\") {\n            headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\") //Don't override existing accept header declared by user\n            body = JSON.stringify(options.json === true ? body : options.json)\n        }\n    }\n\n    xhr.onreadystatechange = readystatechange\n    xhr.onload = loadFunc\n    xhr.onerror = errorFunc\n    // IE9 must have onprogress be set to a unique function.\n    xhr.onprogress = function () {\n        // IE must die\n    }\n    xhr.onabort = function(){\n        aborted = true;\n    }\n    xhr.ontimeout = errorFunc\n    xhr.open(method, uri, !sync, options.username, options.password)\n    //has to be after open\n    if(!sync) {\n        xhr.withCredentials = !!options.withCredentials\n    }\n    // Cannot set timeout with sync request\n    // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n    // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n    if (!sync && options.timeout > 0 ) {\n        timeoutTimer = setTimeout(function(){\n            if (aborted) return\n            aborted = true//IE9 may still call readystatechange\n            xhr.abort(\"timeout\")\n            var e = new Error(\"XMLHttpRequest timeout\")\n            e.code = \"ETIMEDOUT\"\n            errorFunc(e)\n        }, options.timeout )\n    }\n\n    if (xhr.setRequestHeader) {\n        for(key in headers){\n            if(headers.hasOwnProperty(key)){\n                xhr.setRequestHeader(key, headers[key])\n            }\n        }\n    } else if (options.headers && !isEmpty(options.headers)) {\n        throw new Error(\"Headers cannot be set on an XDomainRequest object\")\n    }\n\n    if (\"responseType\" in options) {\n        xhr.responseType = options.responseType\n    }\n\n    if (\"beforeSend\" in options &&\n        typeof options.beforeSend === \"function\"\n    ) {\n        options.beforeSend(xhr)\n    }\n\n    // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n    // XMLHttpRequest spec says to pass null as body to indicate no body\n    // See https://github.com/naugtur/xhr/issues/100.\n    xhr.send(body || null)\n\n    return xhr\n\n\n}\n\nfunction getXml(xhr) {\n    // xhr.responseXML will throw Exception \"InvalidStateError\" or \"DOMException\"\n    // See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseXML.\n    try {\n        if (xhr.responseType === \"document\") {\n            return xhr.responseXML\n        }\n        var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === \"parsererror\"\n        if (xhr.responseType === \"\" && !firefoxBugTakenEffect) {\n            return xhr.responseXML\n        }\n    } catch (e) {}\n\n    return null\n}\n\nfunction noop() {}\n","/**\n * Assert a condition.\n * @param condition The condition that it should satisfy.\n * @param message The error message.\n * @param args The arguments for replacing placeholders in the message.\n */\nexport function assertType(\n    condition: boolean,\n    message: string,\n    ...args: any[]\n): asserts condition {\n    if (!condition) {\n        throw new TypeError(format(message, args))\n    }\n}\n\n/**\n * Convert a text and arguments to one string.\n * @param message The formating text\n * @param args The arguments.\n */\nexport function format(message: string, args: any[]): string {\n    let i = 0\n    return message.replace(/%[os]/gu, () => anyToString(args[i++]))\n}\n\n/**\n * Convert a value to a string representation.\n * @param x The value to get the string representation.\n */\nexport function anyToString(x: any): string {\n    if (typeof x !== \"object\" || x === null) {\n        return String(x)\n    }\n    return Object.prototype.toString.call(x)\n}\n","declare const globalThis: any\ndeclare const window: any\ndeclare const self: any\ndeclare const global: any\n\n/**\n * The global object.\n */\n//istanbul ignore next\nexport const Global: any =\n    typeof window !== \"undefined\"\n        ? window\n        : typeof self !== \"undefined\"\n        ? self\n        : typeof global !== \"undefined\"\n        ? global\n        : typeof globalThis !== \"undefined\"\n        ? globalThis\n        : undefined\n","import { assertType } from \"./misc\"\n\ndeclare const console: any\n\nlet currentWarnHandler: setWarningHandler.WarningHandler | undefined\n\n/**\n * Set the warning handler.\n * @param value The warning handler to set.\n */\nexport function setWarningHandler(\n    value: setWarningHandler.WarningHandler | undefined,\n): void {\n    assertType(\n        typeof value === \"function\" || value === undefined,\n        \"The warning handler must be a function or undefined, but got %o.\",\n        value,\n    )\n    currentWarnHandler = value\n}\nexport namespace setWarningHandler {\n    /**\n     * The warning information.\n     */\n    export interface Warning {\n        /**\n         * The code of this warning.\n         */\n        code: string\n        /**\n         * The message in English.\n         */\n        message: string\n        /**\n         * The arguments for replacing placeholders in the text.\n         */\n        args: any[]\n    }\n\n    /**\n     * The warning handler.\n     * @param warning The warning.\n     */\n    export type WarningHandler = (warning: Warning) => void\n}\n\n/**\n * The warning information.\n */\nexport class Warning<TArgs extends any[]> {\n    readonly code: string\n    readonly message: string\n\n    constructor(code: string, message: string) {\n        this.code = code\n        this.message = message\n    }\n\n    /**\n     * Report this warning.\n     * @param args The arguments of the warning.\n     */\n    warn(...args: TArgs): void {\n        try {\n            // Call the user-defined warning handler if exists.\n            if (currentWarnHandler) {\n                currentWarnHandler({ ...this, args })\n                return\n            }\n\n            // Otherwise, print the warning.\n            const stack = (new Error().stack ?? \"\").replace(\n                /^(?:.+?\\n){2}/gu,\n                \"\\n\",\n            )\n            console.warn(this.message, ...args, stack)\n        } catch {\n            // Ignore.\n        }\n    }\n}\n","import { EventTarget } from \"./event-target\" // Used as only type, so no circular.\nimport { Warning } from \"./warning-handler\"\n\nexport const InitEventWasCalledWhileDispatching = new Warning<[]>(\n    \"W01\",\n    \"Unable to initialize event under dispatching.\",\n)\n\nexport const FalsyWasAssignedToCancelBubble = new Warning<[]>(\n    \"W02\",\n    \"Assigning any falsy value to 'cancelBubble' property has no effect.\",\n)\n\nexport const TruthyWasAssignedToReturnValue = new Warning<[]>(\n    \"W03\",\n    \"Assigning any truthy value to 'returnValue' property has no effect.\",\n)\n\nexport const NonCancelableEventWasCanceled = new Warning<[]>(\n    \"W04\",\n    \"Unable to preventDefault on non-cancelable events.\",\n)\n\nexport const CanceledInPassiveListener = new Warning<[]>(\n    \"W05\",\n    \"Unable to preventDefault inside passive event listener invocation.\",\n)\n\nexport const EventListenerWasDuplicated = new Warning<\n    [type: \"bubble\" | \"capture\", callback: EventTarget.EventListener<any, any>]\n>(\n    \"W06\",\n    \"An event listener wasn't added because it has been added already: %o, %o\",\n)\n\nexport const OptionWasIgnored = new Warning<\n    [name: \"passive\" | \"once\" | \"signal\"]\n>(\n    \"W07\",\n    \"The %o option value was abandoned because the event listener wasn't added as duplicated.\",\n)\n\nexport const InvalidEventListener = new Warning<\n    [callback: EventTarget.EventListener<any, any> | {} | null | undefined]\n>(\n    \"W08\",\n    \"The 'callback' argument must be a function or an object that has 'handleEvent' method: %o\",\n)\n\nexport const InvalidAttributeHandler = new Warning<\n    [callback: EventTarget.EventListener<any, any> | {}]\n>(\"W09\", \"Event attribute handler must be a function: %o\")\n","import { EventTarget } from \"./event-target\" // Used as only type, so no circular.\nimport { Global } from \"./global\"\nimport { assertType } from \"./misc\"\nimport {\n    CanceledInPassiveListener,\n    FalsyWasAssignedToCancelBubble,\n    InitEventWasCalledWhileDispatching,\n    NonCancelableEventWasCanceled,\n    TruthyWasAssignedToReturnValue,\n} from \"./warnings\"\n\n/*eslint-disable class-methods-use-this */\n\n/**\n * An implementation of `Event` interface, that wraps a given event object.\n * `EventTarget` shim can control the internal state of this `Event` objects.\n * @see https://dom.spec.whatwg.org/#event\n */\nexport class Event<TEventType extends string = string> {\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-none\n     */\n    static get NONE(): number {\n        return NONE\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-capturing_phase\n     */\n    static get CAPTURING_PHASE(): number {\n        return CAPTURING_PHASE\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-at_target\n     */\n    static get AT_TARGET(): number {\n        return AT_TARGET\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-bubbling_phase\n     */\n    static get BUBBLING_PHASE(): number {\n        return BUBBLING_PHASE\n    }\n\n    /**\n     * Initialize this event instance.\n     * @param type The type of this event.\n     * @param eventInitDict Options to initialize.\n     * @see https://dom.spec.whatwg.org/#dom-event-event\n     */\n    constructor(type: TEventType, eventInitDict?: Event.EventInit) {\n        Object.defineProperty(this, \"isTrusted\", {\n            value: false,\n            enumerable: true,\n        })\n\n        const opts = eventInitDict ?? {}\n        internalDataMap.set(this, {\n            type: String(type),\n            bubbles: Boolean(opts.bubbles),\n            cancelable: Boolean(opts.cancelable),\n            composed: Boolean(opts.composed),\n            target: null,\n            currentTarget: null,\n            stopPropagationFlag: false,\n            stopImmediatePropagationFlag: false,\n            canceledFlag: false,\n            inPassiveListenerFlag: false,\n            dispatchFlag: false,\n            timeStamp: Date.now(),\n        })\n    }\n\n    /**\n     * The type of this event.\n     * @see https://dom.spec.whatwg.org/#dom-event-type\n     */\n    get type(): TEventType {\n        return $(this).type as TEventType\n    }\n\n    /**\n     * The event target of the current dispatching.\n     * @see https://dom.spec.whatwg.org/#dom-event-target\n     */\n    get target(): EventTarget | null {\n        return $(this).target\n    }\n\n    /**\n     * The event target of the current dispatching.\n     * @deprecated Use the `target` property instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-srcelement\n     */\n    get srcElement(): EventTarget | null {\n        return $(this).target\n    }\n\n    /**\n     * The event target of the current dispatching.\n     * @see https://dom.spec.whatwg.org/#dom-event-currenttarget\n     */\n    get currentTarget(): EventTarget | null {\n        return $(this).currentTarget\n    }\n\n    /**\n     * The event target of the current dispatching.\n     * This doesn't support node tree.\n     * @see https://dom.spec.whatwg.org/#dom-event-composedpath\n     */\n    composedPath(): EventTarget[] {\n        const currentTarget = $(this).currentTarget\n        if (currentTarget) {\n            return [currentTarget]\n        }\n        return []\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-none\n     */\n    get NONE(): number {\n        return NONE\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-capturing_phase\n     */\n    get CAPTURING_PHASE(): number {\n        return CAPTURING_PHASE\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-at_target\n     */\n    get AT_TARGET(): number {\n        return AT_TARGET\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-bubbling_phase\n     */\n    get BUBBLING_PHASE(): number {\n        return BUBBLING_PHASE\n    }\n\n    /**\n     * The current event phase.\n     * @see https://dom.spec.whatwg.org/#dom-event-eventphase\n     */\n    get eventPhase(): number {\n        return $(this).dispatchFlag ? 2 : 0\n    }\n\n    /**\n     * Stop event bubbling.\n     * Because this shim doesn't support node tree, this merely changes the `cancelBubble` property value.\n     * @see https://dom.spec.whatwg.org/#dom-event-stoppropagation\n     */\n    stopPropagation(): void {\n        $(this).stopPropagationFlag = true\n    }\n\n    /**\n     * `true` if event bubbling was stopped.\n     * @deprecated\n     * @see https://dom.spec.whatwg.org/#dom-event-cancelbubble\n     */\n    get cancelBubble(): boolean {\n        return $(this).stopPropagationFlag\n    }\n\n    /**\n     * Stop event bubbling if `true` is set.\n     * @deprecated Use the `stopPropagation()` method instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-cancelbubble\n     */\n    set cancelBubble(value: boolean) {\n        if (value) {\n            $(this).stopPropagationFlag = true\n        } else {\n            FalsyWasAssignedToCancelBubble.warn()\n        }\n    }\n\n    /**\n     * Stop event bubbling and subsequent event listener callings.\n     * @see https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation\n     */\n    stopImmediatePropagation(): void {\n        const data = $(this)\n        data.stopPropagationFlag = data.stopImmediatePropagationFlag = true\n    }\n\n    /**\n     * `true` if this event will bubble.\n     * @see https://dom.spec.whatwg.org/#dom-event-bubbles\n     */\n    get bubbles(): boolean {\n        return $(this).bubbles\n    }\n\n    /**\n     * `true` if this event can be canceled by the `preventDefault()` method.\n     * @see https://dom.spec.whatwg.org/#dom-event-cancelable\n     */\n    get cancelable(): boolean {\n        return $(this).cancelable\n    }\n\n    /**\n     * `true` if the default behavior will act.\n     * @deprecated Use the `defaultPrevented` proeprty instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-returnvalue\n     */\n    get returnValue(): boolean {\n        return !$(this).canceledFlag\n    }\n\n    /**\n     * Cancel the default behavior if `false` is set.\n     * @deprecated Use the `preventDefault()` method instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-returnvalue\n     */\n    set returnValue(value: boolean) {\n        if (!value) {\n            setCancelFlag($(this))\n        } else {\n            TruthyWasAssignedToReturnValue.warn()\n        }\n    }\n\n    /**\n     * Cancel the default behavior.\n     * @see https://dom.spec.whatwg.org/#dom-event-preventdefault\n     */\n    preventDefault(): void {\n        setCancelFlag($(this))\n    }\n\n    /**\n     * `true` if the default behavior was canceled.\n     * @see https://dom.spec.whatwg.org/#dom-event-defaultprevented\n     */\n    get defaultPrevented(): boolean {\n        return $(this).canceledFlag\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-composed\n     */\n    get composed(): boolean {\n        return $(this).composed\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-istrusted\n     */\n    //istanbul ignore next\n    get isTrusted(): boolean {\n        return false\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-timestamp\n     */\n    get timeStamp(): number {\n        return $(this).timeStamp\n    }\n\n    /**\n     * @deprecated Don't use this method. The constructor did initialization.\n     */\n    initEvent(type: string, bubbles = false, cancelable = false) {\n        const data = $(this)\n        if (data.dispatchFlag) {\n            InitEventWasCalledWhileDispatching.warn()\n            return\n        }\n\n        internalDataMap.set(this, {\n            ...data,\n            type: String(type),\n            bubbles: Boolean(bubbles),\n            cancelable: Boolean(cancelable),\n            target: null,\n            currentTarget: null,\n            stopPropagationFlag: false,\n            stopImmediatePropagationFlag: false,\n            canceledFlag: false,\n        })\n    }\n}\n\n/*eslint-enable class-methods-use-this */\n\nexport namespace Event {\n    /**\n     * The options of the `Event` constructor.\n     * @see https://dom.spec.whatwg.org/#dictdef-eventinit\n     */\n    export interface EventInit {\n        bubbles?: boolean\n        cancelable?: boolean\n        composed?: boolean\n    }\n}\n\nexport { $ as getEventInternalData }\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst NONE = 0\nconst CAPTURING_PHASE = 1\nconst AT_TARGET = 2\nconst BUBBLING_PHASE = 3\n\n/**\n * Private data.\n */\ninterface EventInternalData {\n    /**\n     * The value of `type` attribute.\n     */\n    readonly type: string\n    /**\n     * The value of `bubbles` attribute.\n     */\n    readonly bubbles: boolean\n    /**\n     * The value of `cancelable` attribute.\n     */\n    readonly cancelable: boolean\n    /**\n     * The value of `composed` attribute.\n     */\n    readonly composed: boolean\n    /**\n     * The value of `timeStamp` attribute.\n     */\n    readonly timeStamp: number\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-target\n     */\n    target: EventTarget | null\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-currenttarget\n     */\n    currentTarget: EventTarget | null\n    /**\n     * @see https://dom.spec.whatwg.org/#stop-propagation-flag\n     */\n    stopPropagationFlag: boolean\n    /**\n     * @see https://dom.spec.whatwg.org/#stop-immediate-propagation-flag\n     */\n    stopImmediatePropagationFlag: boolean\n    /**\n     * @see https://dom.spec.whatwg.org/#canceled-flag\n     */\n    canceledFlag: boolean\n    /**\n     * @see https://dom.spec.whatwg.org/#in-passive-listener-flag\n     */\n    inPassiveListenerFlag: boolean\n    /**\n     * @see https://dom.spec.whatwg.org/#dispatch-flag\n     */\n    dispatchFlag: boolean\n}\n\n/**\n * Private data for event wrappers.\n */\nconst internalDataMap = new WeakMap<any, EventInternalData>()\n\n/**\n * Get private data.\n * @param event The event object to get private data.\n * @param name The variable name to report.\n * @returns The private data of the event.\n */\nfunction $(event: unknown, name = \"this\"): EventInternalData {\n    const retv = internalDataMap.get(event)\n    assertType(\n        retv != null,\n        \"'%s' must be an object that Event constructor created, but got another one: %o\",\n        name,\n        event,\n    )\n    return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data private data.\n */\nfunction setCancelFlag(data: EventInternalData) {\n    if (data.inPassiveListenerFlag) {\n        CanceledInPassiveListener.warn()\n        return\n    }\n    if (!data.cancelable) {\n        NonCancelableEventWasCanceled.warn()\n        return\n    }\n\n    data.canceledFlag = true\n}\n\n// Set enumerable\nObject.defineProperty(Event, \"NONE\", { enumerable: true })\nObject.defineProperty(Event, \"CAPTURING_PHASE\", { enumerable: true })\nObject.defineProperty(Event, \"AT_TARGET\", { enumerable: true })\nObject.defineProperty(Event, \"BUBBLING_PHASE\", { enumerable: true })\nconst keys = Object.getOwnPropertyNames(Event.prototype)\nfor (let i = 0; i < keys.length; ++i) {\n    if (keys[i] === \"constructor\") {\n        continue\n    }\n    Object.defineProperty(Event.prototype, keys[i], { enumerable: true })\n}\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof Global !== \"undefined\" && typeof Global.Event !== \"undefined\") {\n    Object.setPrototypeOf(Event.prototype, Global.Event.prototype)\n}\n","import { Global } from \"./global\"\n\n/**\n * Create a new InvalidStateError instance.\n * @param message The error message.\n */\nexport function createInvalidStateError(message: string): Error {\n    if (Global.DOMException) {\n        return new Global.DOMException(message, \"InvalidStateError\")\n    }\n\n    if (DOMException == null) {\n        DOMException = class DOMException extends Error {\n            constructor(msg: string) {\n                super(msg)\n                if ((Error as any).captureStackTrace) {\n                    ;(Error as any).captureStackTrace(this, DOMException)\n                }\n            }\n            // eslint-disable-next-line class-methods-use-this\n            get code() {\n                return 11\n            }\n            // eslint-disable-next-line class-methods-use-this\n            get name() {\n                return \"InvalidStateError\"\n            }\n        }\n        Object.defineProperties(DOMException.prototype, {\n            code: { enumerable: true },\n            name: { enumerable: true },\n        })\n        defineErrorCodeProperties(DOMException)\n        defineErrorCodeProperties(DOMException.prototype)\n    }\n    return new DOMException(message)\n}\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nlet DOMException: { new (message: string): Error } | undefined\n\nconst ErrorCodeMap = {\n    INDEX_SIZE_ERR: 1,\n    DOMSTRING_SIZE_ERR: 2,\n    HIERARCHY_REQUEST_ERR: 3,\n    WRONG_DOCUMENT_ERR: 4,\n    INVALID_CHARACTER_ERR: 5,\n    NO_DATA_ALLOWED_ERR: 6,\n    NO_MODIFICATION_ALLOWED_ERR: 7,\n    NOT_FOUND_ERR: 8,\n    NOT_SUPPORTED_ERR: 9,\n    INUSE_ATTRIBUTE_ERR: 10,\n    INVALID_STATE_ERR: 11,\n    SYNTAX_ERR: 12,\n    INVALID_MODIFICATION_ERR: 13,\n    NAMESPACE_ERR: 14,\n    INVALID_ACCESS_ERR: 15,\n    VALIDATION_ERR: 16,\n    TYPE_MISMATCH_ERR: 17,\n    SECURITY_ERR: 18,\n    NETWORK_ERR: 19,\n    ABORT_ERR: 20,\n    URL_MISMATCH_ERR: 21,\n    QUOTA_EXCEEDED_ERR: 22,\n    TIMEOUT_ERR: 23,\n    INVALID_NODE_TYPE_ERR: 24,\n    DATA_CLONE_ERR: 25,\n}\ntype ErrorCodeMap = typeof ErrorCodeMap\n\nfunction defineErrorCodeProperties(obj: any): void {\n    const keys = Object.keys(ErrorCodeMap) as (keyof ErrorCodeMap)[]\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i]\n        const value = ErrorCodeMap[key]\n        Object.defineProperty(obj, key, {\n            get() {\n                return value\n            },\n            configurable: true,\n            enumerable: true,\n        })\n    }\n}\n","import { Event } from \"./event\"\nimport { Global } from \"./global\"\nimport { assertType } from \"./misc\"\n\n/**\n * An implementation of `Event` interface, that wraps a given event object.\n * This class controls the internal state of `Event`.\n * @see https://dom.spec.whatwg.org/#interface-event\n */\nexport class EventWrapper<TEventType extends string> extends Event<TEventType> {\n    /**\n     * Wrap a given event object to control states.\n     * @param event The event-like object to wrap.\n     */\n    static wrap<T extends EventLike>(event: T): EventWrapperOf<T> {\n        return new (getWrapperClassOf(event))(event)\n    }\n\n    protected constructor(event: Event<TEventType>) {\n        super(event.type, {\n            bubbles: event.bubbles,\n            cancelable: event.cancelable,\n            composed: event.composed,\n        })\n\n        if (event.cancelBubble) {\n            super.stopPropagation()\n        }\n        if (event.defaultPrevented) {\n            super.preventDefault()\n        }\n\n        internalDataMap.set(this, { original: event })\n\n        // Define accessors\n        const keys = Object.keys(event)\n        for (let i = 0; i < keys.length; ++i) {\n            const key = keys[i]\n            if (!(key in this)) {\n                Object.defineProperty(\n                    this,\n                    key,\n                    defineRedirectDescriptor(event, key),\n                )\n            }\n        }\n    }\n\n    stopPropagation(): void {\n        super.stopPropagation()\n\n        const { original } = $(this)\n        if (\"stopPropagation\" in original) {\n            original.stopPropagation!()\n        }\n    }\n\n    get cancelBubble(): boolean {\n        return super.cancelBubble\n    }\n    set cancelBubble(value: boolean) {\n        super.cancelBubble = value\n\n        const { original } = $(this)\n        if (\"cancelBubble\" in original) {\n            original.cancelBubble = value\n        }\n    }\n\n    stopImmediatePropagation(): void {\n        super.stopImmediatePropagation()\n\n        const { original } = $(this)\n        if (\"stopImmediatePropagation\" in original) {\n            original.stopImmediatePropagation!()\n        }\n    }\n\n    get returnValue(): boolean {\n        return super.returnValue\n    }\n    set returnValue(value: boolean) {\n        super.returnValue = value\n\n        const { original } = $(this)\n        if (\"returnValue\" in original) {\n            original.returnValue = value\n        }\n    }\n\n    preventDefault(): void {\n        super.preventDefault()\n\n        const { original } = $(this)\n        if (\"preventDefault\" in original) {\n            original.preventDefault!()\n        }\n    }\n\n    get timeStamp(): number {\n        const { original } = $(this)\n        if (\"timeStamp\" in original) {\n            return original.timeStamp!\n        }\n        return super.timeStamp\n    }\n}\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\ntype EventLike = { readonly type: string } & Partial<Event>\ntype EventWrapperOf<T extends EventLike> = Event<T[\"type\"]> &\n    Omit<T, keyof Event>\n\ninterface EventWrapperInternalData {\n    readonly original: EventLike\n}\n\n/**\n * Private data for event wrappers.\n */\nconst internalDataMap = new WeakMap<any, EventWrapperInternalData>()\n\n/**\n * Get private data.\n * @param event The event object to get private data.\n * @returns The private data of the event.\n */\nfunction $(event: unknown): EventWrapperInternalData {\n    const retv = internalDataMap.get(event)\n    assertType(\n        retv != null,\n        \"'this' is expected an Event object, but got\",\n        event,\n    )\n    return retv\n}\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\nconst wrapperClassCache = new WeakMap()\n\n// Make association for wrappers.\nwrapperClassCache.set(Object.prototype, EventWrapper)\nif (typeof Global !== \"undefined\" && typeof Global.Event !== \"undefined\") {\n    wrapperClassCache.set(Global.Event.prototype, EventWrapper)\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param originalEvent The event object to wrap.\n */\nfunction getWrapperClassOf<T extends EventLike>(\n    originalEvent: T,\n): { new (e: T): EventWrapperOf<T> } {\n    const prototype = Object.getPrototypeOf(originalEvent)\n    if (prototype == null) {\n        return EventWrapper as any\n    }\n\n    let wrapper: any = wrapperClassCache.get(prototype)\n    if (wrapper == null) {\n        wrapper = defineWrapper(getWrapperClassOf(prototype), prototype)\n        wrapperClassCache.set(prototype, wrapper)\n    }\n\n    return wrapper\n}\n\n/**\n * Define new wrapper class.\n * @param BaseEventWrapper The base wrapper class.\n * @param originalPrototype The prototype of the original event.\n */\nfunction defineWrapper(BaseEventWrapper: any, originalPrototype: any): any {\n    class CustomEventWrapper extends BaseEventWrapper {}\n\n    const keys = Object.keys(originalPrototype)\n    for (let i = 0; i < keys.length; ++i) {\n        Object.defineProperty(\n            CustomEventWrapper.prototype,\n            keys[i],\n            defineRedirectDescriptor(originalPrototype, keys[i]),\n        )\n    }\n\n    return CustomEventWrapper\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n */\nfunction defineRedirectDescriptor(obj: any, key: string): PropertyDescriptor {\n    const d = Object.getOwnPropertyDescriptor(obj, key)!\n    return {\n        get() {\n            const original: any = $(this).original\n            const value = original[key]\n            if (typeof value === \"function\") {\n                return value.bind(original)\n            }\n            return value\n        },\n        set(value: any) {\n            const original: any = $(this).original\n            original[key] = value\n        },\n        configurable: d.configurable,\n        enumerable: d.enumerable,\n    }\n}\n","import { reportError } from \"./error-handler\"\nimport { Event } from \"./event\" // Used as only type, so no circular.\nimport { EventTarget } from \"./event-target\" // Used as only type, so no circular.\n\n/**\n * The event listener concept.\n * @see https://dom.spec.whatwg.org/#concept-event-listener\n */\nexport interface Listener {\n    /**\n     * The callback function.\n     */\n    readonly callback: Listener.Callback<any, any>\n    /**\n     * The flags of this listener.\n     * This is writable to add the removed flag.\n     */\n    flags: ListenerFlags\n    /**\n     * The `AbortSignal` to remove this listener.\n     */\n    readonly signal: Listener.AbortSignal | undefined\n    /**\n     * The `abort` event listener for the `signal`.\n     * To remove it from the `signal`.\n     */\n    readonly signalListener: (() => void) | undefined\n}\n\nexport namespace Listener {\n    export type Callback<\n        TEventTarget extends EventTarget<any, any>,\n        TEvent extends Event\n    > = CallbackFunction<TEventTarget, TEvent> | CallbackObject<TEvent>\n\n    export interface CallbackFunction<\n        TEventTarget extends EventTarget<any, any>,\n        TEvent extends Event\n    > {\n        (this: TEventTarget, event: TEvent): void\n    }\n\n    export interface CallbackObject<TEvent extends Event> {\n        handleEvent(event: TEvent): void\n    }\n\n    export interface AbortSignal {\n        addEventListener(type: string, callback: Callback<any, Event>): void\n        removeEventListener(type: string, callback: Callback<any, Event>): void\n    }\n}\n\n/**\n * Create a new listener.\n * @param callback The callback function.\n * @param capture The capture flag.\n * @param passive The passive flag.\n * @param once The once flag.\n * @param signal The abort signal.\n * @param signalListener The abort event listener for the abort signal.\n */\nexport function createListener(\n    callback: Listener.Callback<any, any>,\n    capture: boolean,\n    passive: boolean,\n    once: boolean,\n    signal: Listener.AbortSignal | undefined,\n    signalListener: (() => void) | undefined,\n): Listener {\n    return {\n        callback,\n        flags:\n            (capture ? ListenerFlags.Capture : 0) |\n            (passive ? ListenerFlags.Passive : 0) |\n            (once ? ListenerFlags.Once : 0),\n        signal,\n        signalListener,\n    }\n}\n\n/**\n * Set the `removed` flag to the given listener.\n * @param listener The listener to check.\n */\nexport function setRemoved(listener: Listener): void {\n    listener.flags |= ListenerFlags.Removed\n}\n\n/**\n * Check if the given listener has the `capture` flag or not.\n * @param listener The listener to check.\n */\nexport function isCapture(listener: Listener): boolean {\n    return (listener.flags & ListenerFlags.Capture) === ListenerFlags.Capture\n}\n\n/**\n * Check if the given listener has the `passive` flag or not.\n * @param listener The listener to check.\n */\nexport function isPassive(listener: Listener): boolean {\n    return (listener.flags & ListenerFlags.Passive) === ListenerFlags.Passive\n}\n\n/**\n * Check if the given listener has the `once` flag or not.\n * @param listener The listener to check.\n */\nexport function isOnce(listener: Listener): boolean {\n    return (listener.flags & ListenerFlags.Once) === ListenerFlags.Once\n}\n\n/**\n * Check if the given listener has the `removed` flag or not.\n * @param listener The listener to check.\n */\nexport function isRemoved(listener: Listener): boolean {\n    return (listener.flags & ListenerFlags.Removed) === ListenerFlags.Removed\n}\n\n/**\n * Call an event listener.\n * @param listener The listener to call.\n * @param target The event target object for `thisArg`.\n * @param event The event object for the first argument.\n * @param attribute `true` if this callback is an event attribute handler.\n */\nexport function invokeCallback(\n    { callback }: Listener,\n    target: EventTarget<any, any>,\n    event: Event<any>,\n): void {\n    try {\n        if (typeof callback === \"function\") {\n            callback.call(target, event)\n        } else if (typeof callback.handleEvent === \"function\") {\n            callback.handleEvent(event)\n        }\n    } catch (thrownError) {\n        reportError(thrownError)\n    }\n}\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * The flags of listeners.\n */\nconst enum ListenerFlags {\n    Capture = 0x01,\n    Passive = 0x02,\n    Once = 0x04,\n    Removed = 0x08,\n}\n","import { anyToString, assertType } from \"./misc\"\n\ndeclare const console: any\ndeclare const dispatchEvent: any\ndeclare const ErrorEvent: any\ndeclare const process: any\n\nlet currentErrorHandler: setErrorHandler.ErrorHandler | undefined\n\n/**\n * Set the error handler.\n * @param value The error handler to set.\n */\nexport function setErrorHandler(\n    value: setErrorHandler.ErrorHandler | undefined,\n): void {\n    assertType(\n        typeof value === \"function\" || value === undefined,\n        \"The error handler must be a function or undefined, but got %o.\",\n        value,\n    )\n    currentErrorHandler = value\n}\nexport namespace setErrorHandler {\n    /**\n     * The error handler.\n     * @param error The thrown error object.\n     */\n    export type ErrorHandler = (error: Error) => void\n}\n\n/**\n * Print a error message.\n * @param maybeError The error object.\n */\nexport function reportError(maybeError: unknown): void {\n    try {\n        const error =\n            maybeError instanceof Error\n                ? maybeError\n                : new Error(anyToString(maybeError))\n\n        // Call the user-defined error handler if exists.\n        if (currentErrorHandler) {\n            currentErrorHandler(error)\n            return\n        }\n\n        // Dispatch an `error` event if this is on a browser.\n        if (\n            typeof dispatchEvent === \"function\" &&\n            typeof ErrorEvent === \"function\"\n        ) {\n            dispatchEvent(\n                new ErrorEvent(\"error\", { error, message: error.message }),\n            )\n        }\n\n        // Emit an `uncaughtException` event if this is on Node.js.\n        //istanbul ignore else\n        else if (\n            typeof process !== \"undefined\" &&\n            typeof process.emit === \"function\"\n        ) {\n            process.emit(\"uncaughtException\", error)\n            return\n        }\n\n        // Otherwise, print the error.\n        console.error(error)\n    } catch {\n        // ignore.\n    }\n}\n","import { createListener, isCapture, Listener, setRemoved } from \"./listener\"\n\n/**\n * Information of an listener list.\n */\nexport interface ListenerList {\n    /**\n     * The callback function of the event attribute handler.\n     */\n    attrCallback: Listener.CallbackFunction<any, any> | undefined\n    /**\n     * The listener of the event attribute handler.\n     */\n    attrListener: Listener | undefined\n    /**\n     * `true` if the `dispatchEvent` method is traversing the current `listeners` array.\n     */\n    cow: boolean\n    /**\n     * The listeners.\n     * This is writable for copy-on-write.\n     */\n    listeners: Listener[]\n}\n\n/**\n * Find the index of given listener.\n * This returns `-1` if not found.\n * @param list The listener list.\n * @param callback The callback function to find.\n * @param capture The capture flag to find.\n */\nexport function findIndexOfListener(\n    { listeners }: ListenerList,\n    callback: Listener.Callback<any, any>,\n    capture: boolean,\n): number {\n    for (let i = 0; i < listeners.length; ++i) {\n        if (\n            listeners[i].callback === callback &&\n            isCapture(listeners[i]) === capture\n        ) {\n            return i\n        }\n    }\n    return -1\n}\n\n/**\n * Add the given listener.\n * Does copy-on-write if needed.\n * @param list The listener list.\n * @param callback The callback function.\n * @param capture The capture flag.\n * @param passive The passive flag.\n * @param once The once flag.\n * @param signal The abort signal.\n */\nexport function addListener(\n    list: ListenerList,\n    callback: Listener.Callback<any, any>,\n    capture: boolean,\n    passive: boolean,\n    once: boolean,\n    signal: Listener.AbortSignal | undefined,\n): Listener {\n    let signalListener: (() => void) | undefined\n    if (signal) {\n        signalListener = removeListener.bind(null, list, callback, capture)\n        signal.addEventListener(\"abort\", signalListener)\n    }\n\n    const listener = createListener(\n        callback,\n        capture,\n        passive,\n        once,\n        signal,\n        signalListener,\n    )\n\n    if (list.cow) {\n        list.cow = false\n        list.listeners = [...list.listeners, listener]\n    } else {\n        list.listeners.push(listener)\n    }\n\n    return listener\n}\n\n/**\n * Remove a listener.\n * @param list The listener list.\n * @param callback The callback function to find.\n * @param capture The capture flag to find.\n * @returns `true` if it mutated the list directly.\n */\nexport function removeListener(\n    list: ListenerList,\n    callback: Listener.Callback<any, any>,\n    capture: boolean,\n): boolean {\n    const index = findIndexOfListener(list, callback, capture)\n    if (index !== -1) {\n        return removeListenerAt(list, index)\n    }\n    return false\n}\n\n/**\n * Remove a listener.\n * @param list The listener list.\n * @param index The index of the target listener.\n * @param disableCow Disable copy-on-write if true.\n * @returns `true` if it mutated the `listeners` array directly.\n */\nexport function removeListenerAt(\n    list: ListenerList,\n    index: number,\n    disableCow = false,\n): boolean {\n    const listener = list.listeners[index]\n\n    // Set the removed flag.\n    setRemoved(listener)\n\n    // Dispose the abort signal listener if exists.\n    if (listener.signal) {\n        listener.signal.removeEventListener(\"abort\", listener.signalListener!)\n    }\n\n    // Remove it from the array.\n    if (list.cow && !disableCow) {\n        list.cow = false\n        list.listeners = list.listeners.filter((_, i) => i !== index)\n        return false\n    }\n    list.listeners.splice(index, 1)\n    return true\n}\n","import { ListenerList } from \"./listener-list\"\n\n/**\n * The map from event types to each listener list.\n */\nexport interface ListenerListMap {\n    [type: string]: ListenerList | undefined\n}\n\n/**\n * Create a new `ListenerListMap` object.\n */\nexport function createListenerListMap(): ListenerListMap {\n    return Object.create(null)\n}\n\n/**\n * Get the listener list of the given type.\n * If the listener list has not been initialized, initialize and return it.\n * @param listenerMap The listener list map.\n * @param type The event type to get.\n */\nexport function ensureListenerList(\n    listenerMap: Record<string, ListenerList | undefined>,\n    type: string,\n): ListenerList {\n    return (listenerMap[type] ??= {\n        attrCallback: undefined,\n        attrListener: undefined,\n        cow: false,\n        listeners: [],\n    })\n}\n","import { createInvalidStateError } from \"./dom-exception\"\nimport { Event, getEventInternalData } from \"./event\"\nimport { EventWrapper } from \"./event-wrapper\"\nimport { Global } from \"./global\"\nimport {\n    invokeCallback,\n    isCapture,\n    isOnce,\n    isPassive,\n    isRemoved,\n    Listener,\n} from \"./listener\"\nimport {\n    addListener,\n    findIndexOfListener,\n    removeListener,\n    removeListenerAt,\n} from \"./listener-list\"\nimport {\n    createListenerListMap,\n    ensureListenerList,\n    ListenerListMap,\n} from \"./listener-list-map\"\nimport { assertType, format } from \"./misc\"\nimport {\n    EventListenerWasDuplicated,\n    InvalidEventListener,\n    OptionWasIgnored,\n} from \"./warnings\"\n\n/**\n * An implementation of the `EventTarget` interface.\n * @see https://dom.spec.whatwg.org/#eventtarget\n */\nexport class EventTarget<\n    TEventMap extends Record<string, Event> = Record<string, Event>,\n    TMode extends \"standard\" | \"strict\" = \"standard\"\n> {\n    /**\n     * Initialize this instance.\n     */\n    constructor() {\n        internalDataMap.set(this, createListenerListMap())\n    }\n\n    /**\n     * Add an event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param options Options.\n     */\n    addEventListener<T extends string & keyof TEventMap>(\n        type: T,\n        callback?: EventTarget.EventListener<this, TEventMap[T]> | null,\n        options?: EventTarget.AddOptions,\n    ): void\n\n    /**\n     * Add an event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param options Options.\n     */\n    addEventListener(\n        type: string,\n        callback?: EventTarget.FallbackEventListener<this, TMode>,\n        options?: EventTarget.AddOptions,\n    ): void\n\n    /**\n     * Add an event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param capture The capture flag.\n     * @deprecated Use `{capture: boolean}` object instead of a boolean value.\n     */\n    addEventListener<T extends string & keyof TEventMap>(\n        type: T,\n        callback:\n            | EventTarget.EventListener<this, TEventMap[T]>\n            | null\n            | undefined,\n        capture: boolean,\n    ): void\n\n    /**\n     * Add an event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param capture The capture flag.\n     * @deprecated Use `{capture: boolean}` object instead of a boolean value.\n     */\n    addEventListener(\n        type: string,\n        callback: EventTarget.FallbackEventListener<this, TMode>,\n        capture: boolean,\n    ): void\n\n    // Implementation\n    addEventListener<T extends string & keyof TEventMap>(\n        type0: T,\n        callback0?: EventTarget.EventListener<this, TEventMap[T]> | null,\n        options0?: boolean | EventTarget.AddOptions,\n    ): void {\n        const listenerMap = $(this)\n        const {\n            callback,\n            capture,\n            once,\n            passive,\n            signal,\n            type,\n        } = normalizeAddOptions(type0, callback0, options0)\n        if (callback == null || signal?.aborted) {\n            return\n        }\n        const list = ensureListenerList(listenerMap, type)\n\n        // Find existing listener.\n        const i = findIndexOfListener(list, callback, capture)\n        if (i !== -1) {\n            warnDuplicate(list.listeners[i], passive, once, signal)\n            return\n        }\n\n        // Add the new listener.\n        addListener(list, callback, capture, passive, once, signal)\n    }\n\n    /**\n     * Remove an added event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param options Options.\n     */\n    removeEventListener<T extends string & keyof TEventMap>(\n        type: T,\n        callback?: EventTarget.EventListener<this, TEventMap[T]> | null,\n        options?: EventTarget.Options,\n    ): void\n\n    /**\n     * Remove an added event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param options Options.\n     */\n    removeEventListener(\n        type: string,\n        callback?: EventTarget.FallbackEventListener<this, TMode>,\n        options?: EventTarget.Options,\n    ): void\n\n    /**\n     * Remove an added event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param capture The capture flag.\n     * @deprecated Use `{capture: boolean}` object instead of a boolean value.\n     */\n    removeEventListener<T extends string & keyof TEventMap>(\n        type: T,\n        callback:\n            | EventTarget.EventListener<this, TEventMap[T]>\n            | null\n            | undefined,\n        capture: boolean,\n    ): void\n\n    /**\n     * Remove an added event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param capture The capture flag.\n     * @deprecated Use `{capture: boolean}` object instead of a boolean value.\n     */\n    removeEventListener(\n        type: string,\n        callback: EventTarget.FallbackEventListener<this, TMode>,\n        capture: boolean,\n    ): void\n\n    // Implementation\n    removeEventListener<T extends string & keyof TEventMap>(\n        type0: T,\n        callback0?: EventTarget.EventListener<this, TEventMap[T]> | null,\n        options0?: boolean | EventTarget.Options,\n    ): void {\n        const listenerMap = $(this)\n        const { callback, capture, type } = normalizeOptions(\n            type0,\n            callback0,\n            options0,\n        )\n        const list = listenerMap[type]\n\n        if (callback != null && list) {\n            removeListener(list, callback, capture)\n        }\n    }\n\n    /**\n     * Dispatch an event.\n     * @param event The `Event` object to dispatch.\n     */\n    dispatchEvent<T extends string & keyof TEventMap>(\n        event: EventTarget.EventData<TEventMap, TMode, T>,\n    ): boolean\n\n    /**\n     * Dispatch an event.\n     * @param event The `Event` object to dispatch.\n     */\n    dispatchEvent(event: EventTarget.FallbackEvent<TMode>): boolean\n\n    // Implementation\n    dispatchEvent(\n        e:\n            | EventTarget.EventData<TEventMap, TMode, string>\n            | EventTarget.FallbackEvent<TMode>,\n    ): boolean {\n        const list = $(this)[String(e.type)]\n        if (list == null) {\n            return true\n        }\n\n        const event = e instanceof Event ? e : EventWrapper.wrap(e)\n        const eventData = getEventInternalData(event, \"event\")\n        if (eventData.dispatchFlag) {\n            throw createInvalidStateError(\"This event has been in dispatching.\")\n        }\n\n        eventData.dispatchFlag = true\n        eventData.target = eventData.currentTarget = this\n\n        if (!eventData.stopPropagationFlag) {\n            const { cow, listeners } = list\n\n            // Set copy-on-write flag.\n            list.cow = true\n\n            // Call listeners.\n            for (let i = 0; i < listeners.length; ++i) {\n                const listener = listeners[i]\n\n                // Skip if removed.\n                if (isRemoved(listener)) {\n                    continue\n                }\n\n                // Remove this listener if has the `once` flag.\n                if (isOnce(listener) && removeListenerAt(list, i, !cow)) {\n                    // Because this listener was removed, the next index is the\n                    // same as the current value.\n                    i -= 1\n                }\n\n                // Call this listener with the `passive` flag.\n                eventData.inPassiveListenerFlag = isPassive(listener)\n                invokeCallback(listener, this, event)\n                eventData.inPassiveListenerFlag = false\n\n                // Stop if the `event.stopImmediatePropagation()` method was called.\n                if (eventData.stopImmediatePropagationFlag) {\n                    break\n                }\n            }\n\n            // Restore copy-on-write flag.\n            if (!cow) {\n                list.cow = false\n            }\n        }\n\n        eventData.target = null\n        eventData.currentTarget = null\n        eventData.stopImmediatePropagationFlag = false\n        eventData.stopPropagationFlag = false\n        eventData.dispatchFlag = false\n\n        return !eventData.canceledFlag\n    }\n}\n\nexport namespace EventTarget {\n    /**\n     * The event listener.\n     */\n    export type EventListener<\n        TEventTarget extends EventTarget<any, any>,\n        TEvent extends Event\n    > = CallbackFunction<TEventTarget, TEvent> | CallbackObject<TEvent>\n\n    /**\n     * The event listener function.\n     */\n    export interface CallbackFunction<\n        TEventTarget extends EventTarget<any, any>,\n        TEvent extends Event\n    > {\n        (this: TEventTarget, event: TEvent): void\n    }\n\n    /**\n     * The event listener object.\n     * @see https://dom.spec.whatwg.org/#callbackdef-eventlistener\n     */\n    export interface CallbackObject<TEvent extends Event> {\n        handleEvent(event: TEvent): void\n    }\n\n    /**\n     * The common options for both `addEventListener` and `removeEventListener` methods.\n     * @see https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions\n     */\n    export interface Options {\n        capture?: boolean\n    }\n\n    /**\n     * The options for the `addEventListener` methods.\n     * @see https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions\n     */\n    export interface AddOptions extends Options {\n        passive?: boolean\n        once?: boolean\n        signal?: AbortSignal | null | undefined\n    }\n\n    /**\n     * The abort signal.\n     * @see https://dom.spec.whatwg.org/#abortsignal\n     */\n    export interface AbortSignal extends EventTarget<{ abort: Event }> {\n        readonly aborted: boolean\n        onabort: CallbackFunction<this, Event> | null\n    }\n\n    /**\n     * The event data to dispatch in strict mode.\n     */\n    export type EventData<\n        TEventMap extends Record<string, Event>,\n        TMode extends \"standard\" | \"strict\",\n        TEventType extends string\n    > = TMode extends \"strict\"\n        ? IsValidEventMap<TEventMap> extends true\n            ? ExplicitType<TEventType> &\n                  Omit<TEventMap[TEventType], keyof Event> &\n                  Partial<Omit<Event, \"type\">>\n            : never\n        : never\n\n    /**\n     * Define explicit `type` property if `T` is a string literal.\n     * Otherwise, never.\n     */\n    export type ExplicitType<T extends string> = string extends T\n        ? never\n        : { readonly type: T }\n\n    /**\n     * The event listener type in standard mode.\n     * Otherwise, never.\n     */\n    export type FallbackEventListener<\n        TEventTarget extends EventTarget<any, any>,\n        TMode extends \"standard\" | \"strict\"\n    > = TMode extends \"standard\"\n        ? EventListener<TEventTarget, Event> | null | undefined\n        : never\n\n    /**\n     * The event type in standard mode.\n     * Otherwise, never.\n     */\n    export type FallbackEvent<\n        TMode extends \"standard\" | \"strict\"\n    > = TMode extends \"standard\" ? Event : never\n\n    /**\n     * Check if given event map is valid.\n     * It's valid if the keys of the event map are narrower than `string`.\n     */\n    export type IsValidEventMap<T> = string extends keyof T ? false : true\n}\n\nexport { $ as getEventTargetInternalData }\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Internal data for EventTarget\n */\ntype EventTargetInternalData = ListenerListMap\n\n/**\n * Internal data.\n */\nconst internalDataMap = new WeakMap<any, EventTargetInternalData>()\n\n/**\n * Get private data.\n * @param target The event target object to get private data.\n * @param name The variable name to report.\n * @returns The private data of the event.\n */\nfunction $(target: any, name = \"this\"): EventTargetInternalData {\n    const retv = internalDataMap.get(target)\n    assertType(\n        retv != null,\n        \"'%s' must be an object that EventTarget constructor created, but got another one: %o\",\n        name,\n        target,\n    )\n    return retv\n}\n\n/**\n * Normalize options.\n * @param options The options to normalize.\n */\nfunction normalizeAddOptions(\n    type: string,\n    callback: EventTarget.EventListener<any, any> | null | undefined,\n    options: boolean | EventTarget.AddOptions | undefined,\n): {\n    type: string\n    callback: EventTarget.EventListener<any, any> | undefined\n    capture: boolean\n    passive: boolean\n    once: boolean\n    signal: EventTarget.AbortSignal | undefined\n} {\n    assertCallback(callback)\n\n    if (typeof options === \"object\" && options !== null) {\n        return {\n            type: String(type),\n            callback: callback ?? undefined,\n            capture: Boolean(options.capture),\n            passive: Boolean(options.passive),\n            once: Boolean(options.once),\n            signal: options.signal ?? undefined,\n        }\n    }\n\n    return {\n        type: String(type),\n        callback: callback ?? undefined,\n        capture: Boolean(options),\n        passive: false,\n        once: false,\n        signal: undefined,\n    }\n}\n\n/**\n * Normalize options.\n * @param options The options to normalize.\n */\nfunction normalizeOptions(\n    type: string,\n    callback: EventTarget.EventListener<any, any> | null | undefined,\n    options: boolean | EventTarget.Options | undefined,\n): {\n    type: string\n    callback: EventTarget.EventListener<any, any> | undefined\n    capture: boolean\n} {\n    assertCallback(callback)\n\n    if (typeof options === \"object\" && options !== null) {\n        return {\n            type: String(type),\n            callback: callback ?? undefined,\n            capture: Boolean(options.capture),\n        }\n    }\n\n    return {\n        type: String(type),\n        callback: callback ?? undefined,\n        capture: Boolean(options),\n    }\n}\n\n/**\n * Assert the type of 'callback' argument.\n * @param callback The callback to check.\n */\nfunction assertCallback(callback: any): void {\n    if (\n        typeof callback === \"function\" ||\n        (typeof callback === \"object\" &&\n            callback !== null &&\n            typeof callback.handleEvent === \"function\")\n    ) {\n        return\n    }\n    if (callback == null || typeof callback === \"object\") {\n        InvalidEventListener.warn(callback)\n        return\n    }\n\n    throw new TypeError(format(InvalidEventListener.message, [callback]))\n}\n\n/**\n * Print warning for duplicated.\n * @param listener The current listener that is duplicated.\n * @param passive The passive flag of the new duplicated listener.\n * @param once The once flag of the new duplicated listener.\n * @param signal The signal object of the new duplicated listener.\n */\nfunction warnDuplicate(\n    listener: Listener,\n    passive: boolean,\n    once: boolean,\n    signal: EventTarget.AbortSignal | undefined,\n): void {\n    EventListenerWasDuplicated.warn(\n        isCapture(listener) ? \"capture\" : \"bubble\",\n        listener.callback,\n    )\n\n    if (isPassive(listener) !== passive) {\n        OptionWasIgnored.warn(\"passive\")\n    }\n    if (isOnce(listener) !== once) {\n        OptionWasIgnored.warn(\"once\")\n    }\n    if (listener.signal !== signal) {\n        OptionWasIgnored.warn(\"signal\")\n    }\n}\n\n// Set enumerable\nconst keys = Object.getOwnPropertyNames(EventTarget.prototype)\nfor (let i = 0; i < keys.length; ++i) {\n    if (keys[i] === \"constructor\") {\n        continue\n    }\n    Object.defineProperty(EventTarget.prototype, keys[i], { enumerable: true })\n}\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n    typeof Global !== \"undefined\" &&\n    typeof Global.EventTarget !== \"undefined\"\n) {\n    Object.setPrototypeOf(EventTarget.prototype, Global.EventTarget.prototype)\n}\n","import { EventTarget, Event } from 'event-target-shim';\nimport xhr from 'xhr';\n// NOTE: Need duplicate imports for Typescript version compatibility reasons (CJP)\n/* tslint:disable-next-line no-duplicate-imports */\nimport type { XhrUrlConfig, XhrHeaders, XhrResponse } from 'xhr';\n\ntype XhrResponseLike = Partial<XhrResponse> & Pick<XhrResponse, 'statusCode'>;\n\nconst DEFAULT_CHUNK_SIZE = 30720;\nconst DEFAULT_MAX_CHUNK_SIZE = 512000; // in kB\nconst DEFAULT_MIN_CHUNK_SIZE = 256; // in kB\n\n// Predicate function that returns true if a given `chunkSize` is valid, otherwise false.\n// For `chunkSize` validity, we constrain by a min/max chunk size and conform to GCS:\n// \"The chunk size should be a multiple of 256 KiB (256 x 1024 bytes), unless it's the last\n// chunk that completes the upload.\" (See: https://cloud.google.com/storage/docs/performing-resumable-uploads)\nexport const isValidChunkSize = (\n  chunkSize: any,\n  {\n    minChunkSize = DEFAULT_MIN_CHUNK_SIZE,\n    maxChunkSize = DEFAULT_MAX_CHUNK_SIZE,\n  } = {}\n): chunkSize is number | null | undefined => {\n  return (\n    chunkSize == null ||\n    (typeof chunkSize === 'number' &&\n      chunkSize >= 256 &&\n      chunkSize % 256 === 0 &&\n      chunkSize >= minChunkSize &&\n      chunkSize <= maxChunkSize)\n  );\n};\n\n// Projection function that returns an error associated with invalid `chunkSize` values.\nexport const getChunkSizeError = (\n  chunkSize: any,\n  {\n    minChunkSize = DEFAULT_MIN_CHUNK_SIZE,\n    maxChunkSize = DEFAULT_MAX_CHUNK_SIZE,\n  } = {}\n) => {\n  return new TypeError(\n    `chunkSize ${chunkSize} must be a positive number in multiples of 256, between ${minChunkSize} and ${maxChunkSize}`\n  );\n};\n\nexport type ChunkedStreamIterableOptions = {\n  defaultChunkSize?: number;\n  minChunkSize?: number;\n  maxChunkSize?: number;\n};\n\nexport interface ChunkedIterable extends AsyncIterable<Blob> {\n  chunkSize: number;\n  readonly chunkByteSize: number;\n  readonly minChunkSize: number;\n  readonly maxChunkSize: number;\n  readonly error: Error | undefined;\n}\n\n// An Iterable that accepts a readableStream of binary data (Blob | Uint8Array) and provides\n// an asyncIterator which yields Blob values of the current chunkSize until done. Note that\n// chunkSize may change between iterations.\nexport class ChunkedStreamIterable implements ChunkedIterable {\n  protected _chunkSize: number | undefined;\n  protected defaultChunkSize: number;\n  protected _error: Error | undefined;\n  public readonly minChunkSize: number;\n  public readonly maxChunkSize: number;\n\n  constructor(\n    protected readableStream: ReadableStream<Uint8Array | Blob>,\n    options: ChunkedStreamIterableOptions = {}\n  ) {\n    if (!isValidChunkSize(options.defaultChunkSize, options)) {\n      throw getChunkSizeError(options.defaultChunkSize, options);\n    }\n    this.defaultChunkSize = options.defaultChunkSize ?? DEFAULT_CHUNK_SIZE;\n    this.minChunkSize = options.minChunkSize ?? DEFAULT_MIN_CHUNK_SIZE;\n    this.maxChunkSize = options.maxChunkSize ?? DEFAULT_MAX_CHUNK_SIZE;\n  }\n\n  get chunkSize() {\n    return this._chunkSize ?? this.defaultChunkSize;\n  }\n\n  set chunkSize(value) {\n    if (!isValidChunkSize(value, this)) {\n      throw getChunkSizeError(value, this);\n    }\n    this._chunkSize = value;\n  }\n\n  get chunkByteSize() {\n    return this.chunkSize * 1024;\n  }\n\n  get error() {\n    return this._error;\n  }\n\n  async *[Symbol.asyncIterator](): AsyncIterator<Blob> {\n    let chunk;\n    const reader = this.readableStream.getReader();\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) {\n          // Last chunk, if any bits remain\n          if (chunk) {\n            const outgoingChunk = chunk;\n            chunk = undefined;\n            yield outgoingChunk;\n          }\n          break;\n        }\n\n        const normalizedBlobChunk =\n          value instanceof Uint8Array\n            ? new Blob([value], { type: 'application/octet-stream' })\n            : value;\n\n        chunk = chunk\n          ? new Blob([chunk, normalizedBlobChunk])\n          : normalizedBlobChunk;\n\n        // NOTE: Since we don't know how big the next chunk needs to be, we should\n        // just have a single blob that we \"peel away bytes from\" for each chunk\n        // as we iterate.\n        while (chunk) {\n          if (chunk.size === this.chunkByteSize) {\n            const outgoingChunk = chunk;\n            chunk = undefined;\n            yield outgoingChunk;\n            break;\n          } else if (chunk.size < this.chunkByteSize) {\n            break;\n          } else {\n            const outgoingChunk = chunk.slice(0, this.chunkByteSize);\n            chunk = chunk.slice(this.chunkByteSize);\n            yield outgoingChunk;\n          }\n        }\n      }\n    } catch (e) {\n      // There are edge case errors when attempting to read() from ReadableStream reader.\n      this._error = e;\n    } finally {\n      // Last chunk, if any bits remain\n      if (chunk) {\n        const outgoingChunk = chunk;\n        chunk = undefined;\n        yield outgoingChunk;\n      }\n      reader.releaseLock();\n      return;\n    }\n  }\n}\n\nexport class ChunkedFileIterable implements ChunkedIterable {\n  protected _chunkSize: number | undefined;\n  protected defaultChunkSize: number;\n  protected _error: Error | undefined;\n  public readonly minChunkSize: number;\n  public readonly maxChunkSize: number;\n\n  constructor(\n    protected file: File,\n    options: ChunkedStreamIterableOptions = {}\n  ) {\n    if (!isValidChunkSize(options.defaultChunkSize, options)) {\n      throw getChunkSizeError(options.defaultChunkSize, options);\n    }\n    this.defaultChunkSize = options.defaultChunkSize ?? DEFAULT_CHUNK_SIZE;\n    this.minChunkSize = options.minChunkSize ?? DEFAULT_MIN_CHUNK_SIZE;\n    this.maxChunkSize = options.maxChunkSize ?? DEFAULT_MAX_CHUNK_SIZE;\n  }\n\n  get chunkSize() {\n    return this._chunkSize ?? this.defaultChunkSize;\n  }\n\n  set chunkSize(value) {\n    if (!isValidChunkSize(value, this)) {\n      throw getChunkSizeError(value, this);\n    }\n    this._chunkSize = value;\n  }\n\n  get chunkByteSize() {\n    return this.chunkSize * 1024;\n  }\n\n  get error() {\n    return this._error;\n  }\n\n  async *[Symbol.asyncIterator](): AsyncIterator<Blob> {\n    const reader = new FileReader();\n    let nextChunkRangeStart = 0;\n    /**\n     * Get portion of the file of x bytes corresponding to chunkSize\n     */\n    const getChunk = () => {\n      return new Promise<Blob | undefined>((resolve) => {\n        if (nextChunkRangeStart >= this.file.size) {\n          resolve(undefined);\n          return;\n        }\n        // We either want to slize a \"chunkByteSize-worth\" of the file or\n        // slice to the end of the file (if less than a \"chunkByteSize-worth\" is left)\n        const length = Math.min(\n          this.chunkByteSize,\n          this.file.size - nextChunkRangeStart\n        );\n        reader.onload = () => {\n          if (reader.result !== null) {\n            resolve(\n              new Blob([reader.result], {\n                type: 'application/octet-stream',\n              })\n            );\n          } else {\n            resolve(undefined);\n          }\n        };\n\n        reader.readAsArrayBuffer(\n          this.file.slice(nextChunkRangeStart, nextChunkRangeStart + length)\n        );\n      });\n    };\n    try {\n      while (true) {\n        const nextChunk = await getChunk();\n        if (!!nextChunk) {\n          nextChunkRangeStart += nextChunk.size;\n          yield nextChunk;\n        } else {\n          break;\n        }\n      }\n    } catch (e) {\n      this._error = e;\n    }\n  }\n}\n\nconst SUCCESSFUL_CHUNK_UPLOAD_CODES = [200, 201, 202, 204, 308];\nconst TEMPORARY_ERROR_CODES = [408, 502, 503, 504]; // These error codes imply a chunk may be retried\nconst RESUME_INCOMPLETE_CODES = [308];\n\ntype UploadPredOptions = {\n  retryCodes?: typeof TEMPORARY_ERROR_CODES;\n  attempts: number;\n  attemptCount: number;\n};\nconst isSuccessfulChunkUpload = (\n  res: XhrResponseLike | undefined,\n  _options?: any\n): res is XhrResponse =>\n  !!res && SUCCESSFUL_CHUNK_UPLOAD_CODES.includes(res.statusCode);\n\nconst isRetriableChunkUpload = (\n  res: XhrResponseLike | undefined,\n  { retryCodes = TEMPORARY_ERROR_CODES }: UploadPredOptions\n) => !res || retryCodes.includes(res.statusCode);\n\nconst isFailedChunkUpload = (\n  res: XhrResponseLike | undefined,\n  options: UploadPredOptions\n): res is XhrResponseLike => {\n  return (\n    options.attemptCount >= options.attempts ||\n    !(isSuccessfulChunkUpload(res) || isRetriableChunkUpload(res, options))\n  );\n};\n\n/**\n * Checks if an upload chunk was partially received (HTTP 308) and needs a retry.\n * Validates against the 'Range' header to ensure the full chunk was processed.\n */\nexport const isIncompleteChunkUploadNeedingRetry = (\n  res: XhrResponseLike | undefined,\n  _options?: any\n): res is XhrResponseLike => {\n  if (\n    !res ||\n    !RESUME_INCOMPLETE_CODES.includes(res.statusCode) ||\n    !res.headers?.['range']\n  ) {\n    return false;\n  }\n\n  const range = res.headers['range'].match(/bytes=(\\d+)-(\\d+)/);\n  if (!range) {\n    return false;\n  }\n\n  const endByte = parseInt(range[2], 10);\n  // NOTE: Since the endpoint may have been used previously and uploaded multiple chunks,\n  // only treat as an incomplete chunk upload if the end byte from the response header is\n  // less than the current chunk's end byte.\n  return endByte < _options.currentChunkEndByte;\n};\n\ntype EventName =\n  | 'attempt'\n  | 'attemptFailure'\n  | 'chunkSuccess'\n  | 'error'\n  | 'offline'\n  | 'online'\n  | 'progress'\n  | 'success';\n\n// NOTE: This and the EventTarget definition below could be more precise\n// by e.g. typing the detail of the CustomEvent per EventName.\ntype UpchunkEvent = CustomEvent & Event<EventName>;\n\ntype AllowedMethods = 'PUT' | 'POST' | 'PATCH';\n\nexport interface UpChunkOptions {\n  endpoint: string | ((file?: File) => Promise<string>);\n  file: File;\n  method?: AllowedMethods;\n  headers?: XhrHeaders | (() => XhrHeaders) | (() => Promise<XhrHeaders>);\n  maxFileSize?: number;\n  chunkSize?: number;\n  attempts?: number;\n  delayBeforeAttempt?: number;\n  retryCodes?: number[];\n  dynamicChunkSize?: boolean;\n  maxChunkSize?: number;\n  minChunkSize?: number;\n  useLargeFileWorkaround?: boolean;\n}\n\nexport class UpChunk {\n  public static createUpload(options: UpChunkOptions) {\n    return new UpChunk(options);\n  }\n\n  public endpoint: string | ((file?: File) => Promise<string>);\n  public file: File;\n  public headers: XhrHeaders | (() => XhrHeaders) | (() => Promise<XhrHeaders>);\n  public method: AllowedMethods;\n  public attempts: number;\n  public delayBeforeAttempt: number;\n  public retryCodes: number[];\n  public dynamicChunkSize: boolean;\n  protected chunkedIterable: ChunkedIterable;\n  protected chunkedIterator;\n\n  protected pendingChunk?: Blob;\n  private chunkCount: number;\n  private maxFileBytes: number;\n  private endpointValue: string;\n  private totalChunks: number;\n  private attemptCount: number;\n  private _offline: boolean;\n  private _paused: boolean;\n  private success: boolean;\n  private currentXhr?: XMLHttpRequest;\n  private lastChunkStart: Date;\n  private nextChunkRangeStart: number;\n\n  private eventTarget: EventTarget<Record<EventName, UpchunkEvent>>;\n\n  constructor(options: UpChunkOptions) {\n    this.eventTarget = new EventTarget();\n\n    this.endpoint = options.endpoint;\n    this.file = options.file;\n\n    this.headers = options.headers || ({} as XhrHeaders);\n    this.method = options.method || 'PUT';\n    this.attempts = options.attempts || 5;\n    this.delayBeforeAttempt = options.delayBeforeAttempt || 1;\n    this.retryCodes = options.retryCodes || TEMPORARY_ERROR_CODES;\n    this.dynamicChunkSize = options.dynamicChunkSize || false;\n\n    this.maxFileBytes = (options.maxFileSize || 0) * 1024;\n    this.chunkCount = 0;\n    this.attemptCount = 0;\n    // Initialize offline to the current offline state, where\n    // offline is false if\n    // 1. we're not running in the browser (aka window is undefined) -OR-\n    // 2. we're not online (as advertised by navigator.onLine)\n    this._offline = typeof window !== 'undefined' && !window.navigator.onLine;\n    this._paused = false;\n    this.success = false;\n    this.nextChunkRangeStart = 0;\n\n    if (options.useLargeFileWorkaround) {\n      const readableStreamErrorCallback = (event: CustomEvent) => {\n        // In this case, assume the error is a result of file reading via ReadableStream.\n        // Retry using ChunkedFileIterable, which reads the file into memory instead\n        // of a stream.\n        if (this.chunkedIterable.error) {\n          console.warn(\n            `Unable to read file of size ${this.file.size} bytes via a ReadableStream. Falling back to in-memory FileReader!`\n          );\n          event.stopImmediatePropagation();\n\n          // Re-set everything up with the fallback iterable and corresponding\n          // iterator\n          this.chunkedIterable = new ChunkedFileIterable(this.file, {\n            ...options,\n            defaultChunkSize: options.chunkSize,\n          });\n          this.chunkedIterator = this.chunkedIterable[Symbol.asyncIterator]();\n          this.getEndpoint()\n            .then(() => {\n              this.sendChunks();\n            })\n            .catch((e) => {\n              const message = e?.message ? `: ${e.message}` : '';\n              this.dispatch('error', {\n                message: `Failed to get endpoint${message}`,\n              });\n            });\n          this.off('error', readableStreamErrorCallback);\n        }\n      };\n      this.on('error', readableStreamErrorCallback);\n    }\n\n    // Types appear to be getting confused in env setup, using the overloaded NodeJS Blob definition, which uses NodeJS.ReadableStream instead\n    // of the DOM type definitions. For definitions, See consumers.d.ts vs. lib.dom.d.ts. (CJP)\n    this.chunkedIterable = new ChunkedStreamIterable(\n      this.file.stream() as unknown as ReadableStream<Uint8Array>,\n      { ...options, defaultChunkSize: options.chunkSize }\n    );\n    this.chunkedIterator = this.chunkedIterable[Symbol.asyncIterator]();\n\n    // NOTE: Since some of upchunk's properties defer \"source of truth\" to\n    // chunkedIterable, we need to do these after it's been created (CJP).\n    this.totalChunks = Math.ceil(this.file.size / this.chunkByteSize);\n    this.validateOptions();\n\n    this.getEndpoint()\n      .then(() => this.sendChunks())\n      .catch((e) => {\n        const message = e?.message ? `: ${e.message}` : '';\n        this.dispatch('error', {\n          message: `Failed to get endpoint${message}`,\n        });\n      });\n\n    // restart sync when back online\n    // trigger events when offline/back online\n    if (typeof window !== 'undefined') {\n      window.addEventListener('online', () => {\n        if (!this.offline) return;\n\n        this._offline = false;\n        this.dispatch('online');\n        this.sendChunks();\n      });\n\n      window.addEventListener('offline', () => {\n        if (this.offline) return;\n\n        this._offline = true;\n        this.dispatch('offline');\n      });\n    }\n  }\n\n  protected get maxChunkSize() {\n    return this.chunkedIterable?.maxChunkSize ?? DEFAULT_MAX_CHUNK_SIZE;\n  }\n\n  protected get minChunkSize() {\n    return this.chunkedIterable?.minChunkSize ?? DEFAULT_MIN_CHUNK_SIZE;\n  }\n\n  public get chunkSize() {\n    return this.chunkedIterable?.chunkSize ?? DEFAULT_CHUNK_SIZE;\n  }\n\n  public set chunkSize(value) {\n    this.chunkedIterable.chunkSize = value;\n  }\n\n  public get chunkByteSize() {\n    return this.chunkedIterable.chunkByteSize;\n  }\n\n  public get totalChunkSize() {\n    return Math.ceil(this.file.size / this.chunkByteSize);\n  }\n\n  /**\n   * Subscribe to an event\n   */\n  public on(eventName: EventName, fn: (event: CustomEvent) => void) {\n    this.eventTarget.addEventListener(eventName, fn as EventListener);\n  }\n\n  /**\n   * Subscribe to an event once\n   */\n  public once(eventName: EventName, fn: (event: CustomEvent) => void) {\n    this.eventTarget.addEventListener(eventName, fn as EventListener, {\n      once: true,\n    });\n  }\n\n  /**\n   * Unsubscribe to an event\n   */\n  public off(eventName: EventName, fn: (event: CustomEvent) => void) {\n    this.eventTarget.removeEventListener(eventName, fn as EventListener);\n  }\n\n  public get offline() {\n    return this._offline;\n  }\n\n  public get paused() {\n    return this._paused;\n  }\n\n  public abort() {\n    this.pause();\n    this.currentXhr?.abort();\n  }\n\n  public pause() {\n    this._paused = true;\n  }\n\n  public resume() {\n    if (this._paused) {\n      this._paused = false;\n\n      this.sendChunks();\n    }\n  }\n\n  public get successfulPercentage() {\n    return this.nextChunkRangeStart / this.file.size;\n  }\n\n  /**\n   * Dispatch an event\n   */\n  private dispatch(eventName: EventName, detail?: any) {\n    const event: UpchunkEvent = new CustomEvent(eventName, {\n      detail,\n    }) as UpchunkEvent;\n\n    this.eventTarget.dispatchEvent(event);\n  }\n\n  /**\n   * Validate options and throw errors if expectations are violated.\n   */\n  private validateOptions() {\n    if (\n      !this.endpoint ||\n      (typeof this.endpoint !== 'function' && typeof this.endpoint !== 'string')\n    ) {\n      throw new TypeError(\n        'endpoint must be defined as a string or a function that returns a promise'\n      );\n    }\n    if (!(this.file instanceof File)) {\n      throw new TypeError('file must be a File object');\n    }\n    if (\n      this.headers &&\n      typeof this.headers !== 'function' &&\n      typeof this.headers !== 'object'\n    ) {\n      throw new TypeError(\n        'headers must be null, an object, or a function that returns an object or a promise'\n      );\n    }\n    if (\n      !isValidChunkSize(this.chunkSize, {\n        maxChunkSize: this.maxChunkSize,\n        minChunkSize: this.minChunkSize,\n      })\n    ) {\n      throw getChunkSizeError(this.chunkSize, {\n        maxChunkSize: this.maxChunkSize,\n        minChunkSize: this.minChunkSize,\n      });\n    }\n    if (\n      this.maxChunkSize &&\n      (typeof this.maxChunkSize !== 'number' ||\n        this.maxChunkSize < 256 ||\n        this.maxChunkSize % 256 !== 0 ||\n        this.maxChunkSize < this.chunkSize ||\n        this.maxChunkSize < this.minChunkSize)\n    ) {\n      throw new TypeError(\n        `maxChunkSize must be a positive number in multiples of 256, and larger than or equal to both ${this.minChunkSize} and ${this.chunkSize}`\n      );\n    }\n    if (\n      this.minChunkSize &&\n      (typeof this.minChunkSize !== 'number' ||\n        this.minChunkSize < 256 ||\n        this.minChunkSize % 256 !== 0 ||\n        this.minChunkSize > this.chunkSize ||\n        this.minChunkSize > this.maxChunkSize)\n    ) {\n      throw new TypeError(\n        `minChunkSize must be a positive number in multiples of 256, and smaller than ${this.chunkSize} and ${this.maxChunkSize}`\n      );\n    }\n    if (this.maxFileBytes > 0 && this.maxFileBytes < this.file.size) {\n      throw new Error(\n        `file size exceeds maximum (${this.file.size} > ${this.maxFileBytes})`\n      );\n    }\n    if (\n      this.attempts &&\n      (typeof this.attempts !== 'number' || this.attempts <= 0)\n    ) {\n      throw new TypeError('retries must be a positive number');\n    }\n    if (\n      this.delayBeforeAttempt &&\n      (typeof this.delayBeforeAttempt !== 'number' ||\n        this.delayBeforeAttempt < 0)\n    ) {\n      throw new TypeError('delayBeforeAttempt must be a positive number');\n    }\n  }\n\n  /**\n   * Endpoint can either be a URL or a function that returns a promise that resolves to a string.\n   */\n  private getEndpoint() {\n    if (typeof this.endpoint === 'string') {\n      this.endpointValue = this.endpoint;\n      return Promise.resolve(this.endpoint);\n    }\n\n    return this.endpoint(this.file).then((value) => {\n      this.endpointValue = value;\n      if (typeof value !== 'string') {\n        throw new TypeError('endpoint must return a string');\n      }\n      return this.endpointValue;\n    });\n  }\n\n  private xhrPromise(options: XhrUrlConfig): Promise<XhrResponse> {\n    const beforeSend = (xhrObject: XMLHttpRequest) => {\n      xhrObject.upload.onprogress = (event: ProgressEvent) => {\n        const remainingChunks = this.totalChunks - this.chunkCount;\n        const percentagePerChunk =\n          (this.file.size - this.nextChunkRangeStart) /\n          this.file.size /\n          remainingChunks;\n        const currentChunkProgress =\n          event.loaded / (event.total ?? this.chunkByteSize);\n        const chunkPercentage = currentChunkProgress * percentagePerChunk;\n        // NOTE: Since progress events are \"eager\" and do not (yet) have sufficient context\n        // to \"know\" if the request was e.g. successful, we need to \"recompute\"/\"rewind\"\n        // progress if/when we detect failures. See failedChunkUploadCb(), below. (CJP)\n        this.dispatch(\n          'progress',\n          Math.min((this.successfulPercentage + chunkPercentage) * 100, 100)\n        );\n      };\n    };\n\n    return new Promise((resolve, reject) => {\n      this.currentXhr = xhr({ ...options, beforeSend }, (err, resp) => {\n        this.currentXhr = undefined;\n        // NOTE: For at least some `err` cases, resp will still carry information. We may want to consider passing that on somehow\n        // in our Promise reject (or instead of err) (CJP)\n        // See: https://github.com/naugtur/xhr/blob/master/index.js#L93-L100\n        if (err) {\n          return reject(err);\n        }\n\n        return resolve(resp);\n      });\n    });\n  }\n\n  /**\n   * Send chunk of the file with appropriate headers\n   */\n  protected async sendChunk(chunk: Blob) {\n    const rangeStart = this.nextChunkRangeStart;\n    const rangeEnd = rangeStart + chunk.size - 1;\n    const extraHeaders = await (typeof this.headers === 'function'\n      ? this.headers()\n      : this.headers);\n\n    const headers = {\n      ...extraHeaders,\n      'Content-Type': this.file.type,\n      'Content-Range': `bytes ${rangeStart}-${rangeEnd}/${this.file.size}`,\n    };\n\n    this.dispatch('attempt', {\n      chunkNumber: this.chunkCount,\n      totalChunks: this.totalChunks,\n      chunkSize: this.chunkSize,\n    });\n\n    return this.xhrPromise({\n      headers,\n      url: this.endpointValue,\n      method: this.method,\n      body: chunk,\n    });\n  }\n\n  protected async sendChunkWithRetries(chunk: Blob): Promise<boolean> {\n    // What to do if a chunk was successfully uploaded\n    const successfulChunkUploadCb = async (res: XhrResponse, _chunk?: Blob) => {\n      // Side effects\n      const lastChunkEnd = new Date();\n      const lastChunkInterval =\n        (lastChunkEnd.getTime() - this.lastChunkStart.getTime()) / 1000;\n\n      this.dispatch('chunkSuccess', {\n        chunk: this.chunkCount,\n        chunkSize: this.chunkSize,\n        attempts: this.attemptCount,\n        timeInterval: lastChunkInterval,\n        response: res,\n      });\n\n      this.attemptCount = 0;\n      this.chunkCount = (this.chunkCount ?? 0) + 1;\n      this.nextChunkRangeStart = this.nextChunkRangeStart + this.chunkByteSize;\n      if (this.dynamicChunkSize) {\n        let unevenChunkSize = this.chunkSize;\n        if (lastChunkInterval < 10) {\n          unevenChunkSize = Math.min(this.chunkSize * 2, this.maxChunkSize);\n        } else if (lastChunkInterval > 30) {\n          unevenChunkSize = Math.max(this.chunkSize / 2, this.minChunkSize);\n        }\n        // ensure it's a multiple of 256k\n        this.chunkSize = Math.ceil(unevenChunkSize / 256) * 256;\n\n        // Re-estimate the total number of chunks, by adding the completed\n        // chunks to the remaining chunks\n        const remainingChunks =\n          (this.file.size - this.nextChunkRangeStart) / this.chunkByteSize;\n        this.totalChunks = Math.ceil(this.chunkCount + remainingChunks);\n      }\n\n      return true;\n    };\n\n    // What to do if a chunk upload failed, potentially after retries\n    const failedChunkUploadCb = async (res: XhrResponseLike, _chunk?: Blob) => {\n      this.dispatch('progress', Math.min(this.successfulPercentage * 100, 100));\n      // Side effects\n      this.dispatch('error', {\n        message: `Server responded with ${res.statusCode}. Stopping upload.`,\n        chunk: this.chunkCount,\n        attempts: this.attemptCount,\n        response: res,\n      });\n\n      return false;\n    };\n\n    // What to do if a chunk upload failed but is retriable and hasn't exceeded retry\n    // count\n    const retriableChunkUploadCb = async (\n      res: XhrResponseLike | undefined,\n      _chunk?: Blob\n    ) => {\n      // Side effects\n      this.dispatch('attemptFailure', {\n        message: `An error occured uploading chunk ${this.chunkCount}. ${\n          this.attempts - this.attemptCount\n        } retries left.`,\n        chunkNumber: this.chunkCount,\n        attemptsLeft: this.attempts - this.attemptCount,\n        response: res,\n      });\n\n      return new Promise<boolean>((resolve) => {\n        setTimeout(async () => {\n          // Handle mid-flight _paused/offline cases here by storing the\n          // \"still retriable but yet to be uploaded chunk\" in state.\n          // See also: `sendChunks()`\n          if (this._paused || this.offline) {\n            this.pendingChunk = chunk;\n            resolve(false);\n            return;\n          }\n          const chunkUploadSuccess = await this.sendChunkWithRetries(chunk);\n          resolve(chunkUploadSuccess);\n        }, this.delayBeforeAttempt * 1000);\n      });\n    };\n\n    let res: XhrResponseLike | undefined;\n    try {\n      this.attemptCount = this.attemptCount + 1;\n      this.lastChunkStart = new Date();\n      res = await this.sendChunk(chunk);\n    } catch (err: unknown) {\n      // Account for failed attempts due to becoming offline while making a request.\n      if (typeof (err as any)?.statusCode === 'number') {\n        res = err as XhrResponseLike;\n      }\n    }\n    const options = {\n      retryCodes: this.retryCodes,\n      attemptCount: this.attemptCount,\n      attempts: this.attempts,\n      currentChunkEndByte: this.nextChunkRangeStart + chunk.size - 1, // end byte is inclusive\n    };\n    if (isIncompleteChunkUploadNeedingRetry(res, options)) {\n      return retriableChunkUploadCb(res, chunk);\n    }\n    if (isSuccessfulChunkUpload(res, options)) {\n      return successfulChunkUploadCb(res, chunk);\n    }\n    if (isFailedChunkUpload(res, options)) {\n      return failedChunkUploadCb(res, chunk);\n    }\n    // Retriable case\n    return retriableChunkUploadCb(res, chunk);\n  }\n\n  /**\n   * Manage the whole upload by calling getChunk & sendChunk\n   * handle errors & retries and dispatch events\n   */\n  private async sendChunks() {\n    // A \"pending chunk\" is a chunk that was unsuccessful but still retriable when\n    // uploading was _paused or the env is offline. Since this may be the last chunk,\n    // we account for it outside of the loop.\n    if (this.pendingChunk && !(this._paused || this.offline)) {\n      const chunk = this.pendingChunk;\n      this.pendingChunk = undefined;\n      const chunkUploadSuccess = await this.sendChunkWithRetries(chunk);\n      if (this.success && chunkUploadSuccess) {\n        this.dispatch('success');\n      }\n    }\n\n    while (!(this.success || this._paused || this.offline)) {\n      const { value: chunk, done } = await this.chunkedIterator.next();\n      // NOTE: When `done`, `chunk` is undefined, so default `chunkUploadSuccess`\n      // to be `true` on this condition, otherwise `false`.\n      let chunkUploadSuccess = !chunk && done;\n      if (chunk) {\n        chunkUploadSuccess = await this.sendChunkWithRetries(chunk);\n      }\n\n      if (this.chunkedIterable.error) {\n        chunkUploadSuccess = false;\n        this.dispatch('error', {\n          message: `Unable to read file of size ${this.file.size} bytes. Try loading from another browser.`,\n        });\n        return;\n      }\n      // NOTE: Need to disambiguate \"last chunk to upload\" (done) vs. \"successfully\"\n      // uploaded last chunk to upload\" (depends on status of sendChunkWithRetries),\n      // specifically for \"pending chunk\" cases for the last chunk.\n      this.success = !!done;\n      if (this.success && chunkUploadSuccess) {\n        this.dispatch('success');\n      }\n      if (!chunkUploadSuccess) {\n        return;\n      }\n    }\n  }\n}\n\nexport function createUpload(options: UpChunkOptions) {\n  return UpChunk.createUpload(options);\n}\n","import type MuxUploaderElement from '../mux-uploader';\n\nexport const closestComposedNode = (childNode: Element, selector: string): HTMLElement | null => {\n  if (!childNode) return null;\n  const closest = childNode.closest<HTMLElement>(selector);\n  if (closest) return closest;\n  return closestComposedNode((childNode.getRootNode() as ShadowRoot).host, selector);\n};\n\nexport const getMuxUploaderEl = (controlEl: Element): MuxUploaderElement | null => {\n  const muxUploaderId = controlEl.getAttribute('mux-uploader');\n  if (muxUploaderId) {\n    return document.getElementById(muxUploaderId) as MuxUploaderElement;\n  }\n  return closestComposedNode(controlEl, 'mux-uploader') as MuxUploaderElement;\n};\n","import { globalThis, document } from './polyfills';\nimport { getMuxUploaderEl } from './utils/element-utils';\nimport type MuxUploaderElement from './mux-uploader';\nimport { t } from './utils/i18n.js';\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /*html*/ `\n<style>\n  :host {\n    position: relative;\n    box-sizing: border-box;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    border: 2px dashed #ccc;\n    padding: 2.5rem 2rem;\n    border-radius: .25rem;\n  }\n\n  slot[name='heading'] > * {\n    margin-bottom: 0.75rem;\n    font-size: 1.75rem;\n    text-align: center;\n  }\n\n  slot[name='separator'] > * {\n    margin-bottom: 0.75rem;\n  }\n\n  #overlay {\n    display: none;\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    right: 0;\n    left: 0;\n    height: 100%;\n    width: 100%;\n  }\n\n  :host([active][overlay]) > #overlay {\n    background: var(--overlay-background-color, rgba(226, 253, 255, 0.95));\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n  }\n\n  :host([file-ready])::part(heading),\n  :host([file-ready])::part(separator) {\n    display: none;\n  }\n</style>\n\n<slot name=\"heading\" part=\"heading\">\n  <span id=\"drop-text\">Drop a video file here to upload</span>\n</slot>\n<slot name=\"separator\" part=\"separator\">\n  <span id=\"separator-text\">or</span>\n</slot>\n<slot></slot>\n\n<div id=\"overlay\">\n  <h1 id=\"overlay-label\"></h1>\n</div>\n`;\n\nconst Attributes = {\n  MUX_UPLOADER: 'mux-uploader',\n  OVERLAY_TEXT: 'overlay-text',\n};\n\nclass MuxUploaderDropElement extends globalThis.HTMLElement {\n  #overlayTextEl: HTMLElement;\n  #uploaderEl: MuxUploaderElement | null | undefined;\n\n  #abortController: AbortController | undefined;\n\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ mode: 'open' });\n    shadowRoot.appendChild(template.content.cloneNode(true));\n\n    this.#overlayTextEl = shadowRoot.getElementById('overlay-label') as HTMLElement;\n  }\n\n  connectedCallback() {\n    this.#uploaderEl = getMuxUploaderEl(this);\n    this.#abortController = new AbortController();\n\n    if (this.#uploaderEl) {\n      const opts = { signal: this.#abortController.signal };\n\n      this.#uploaderEl.addEventListener('file-ready', () => this.toggleAttribute('file-ready', true), opts);\n      this.#uploaderEl.addEventListener('uploadstart', () => this.toggleAttribute('upload-in-progress', true), opts);\n      this.#uploaderEl.addEventListener(\n        'success',\n        () => {\n          this.toggleAttribute('upload-in-progress', false);\n          this.toggleAttribute('upload-complete', true);\n        },\n        opts\n      );\n      this.#uploaderEl.addEventListener(\n        'reset',\n        () => {\n          this.toggleAttribute('file-ready', false);\n          this.toggleAttribute('upload-in-progress', false);\n          this.toggleAttribute('upload-complete', false);\n        },\n        opts\n      );\n\n      this.setupDragEvents(opts);\n\n      this.toggleAttribute('upload-in-progress', this.#uploaderEl.hasAttribute('upload-in-progress'));\n      this.toggleAttribute('upload-complete', this.#uploaderEl.hasAttribute('upload-complete'));\n      this.toggleAttribute('file-ready', this.#uploaderEl.hasAttribute('file-ready'));\n\n      this.#uploaderEl.addEventListener('localechange', () => this.updateText(), opts);\n\n      this.updateText();\n    }\n  }\n\n  disconnectedCallback() {\n    this.#abortController?.abort();\n  }\n\n  attributeChangedCallback(attributeName: string, oldValue: string | null, newValue: string | null) {\n    if (attributeName === Attributes.OVERLAY_TEXT && oldValue !== newValue) {\n      this.#overlayTextEl.innerHTML = newValue ?? '';\n    } else if (attributeName === 'active') {\n      if (this.hasAttribute('overlay') && newValue != null) {\n        this._currentDragTarget = this;\n      }\n    }\n  }\n\n  static get observedAttributes() {\n    return [Attributes.OVERLAY_TEXT, Attributes.MUX_UPLOADER, 'active'];\n  }\n\n  protected _currentDragTarget?: Node;\n\n  setupDragEvents(opts: AddEventListenerOptions) {\n    this.addEventListener(\n      'dragenter',\n      (evt) => {\n        this._currentDragTarget = evt.target as Node;\n        evt.preventDefault();\n        evt.stopPropagation();\n        this.toggleAttribute('active', true);\n      },\n      opts\n    );\n\n    this.addEventListener(\n      'dragleave',\n      (evt) => {\n        if (this._currentDragTarget === evt.target) {\n          this._currentDragTarget = undefined;\n          this.toggleAttribute('active', false);\n        }\n      },\n      opts\n    );\n\n    this.addEventListener(\n      'dragover',\n      (evt) => {\n        evt.preventDefault();\n        evt.stopPropagation();\n      },\n      opts\n    );\n\n    this.addEventListener(\n      'drop',\n      (evt) => {\n        evt.preventDefault();\n        evt.stopPropagation();\n        const { dataTransfer } = evt;\n        //@ts-ignore\n        const { files } = dataTransfer;\n        const file = files[0];\n\n        const uploaderController = this.#uploaderEl ?? this;\n\n        uploaderController.dispatchEvent(\n          new CustomEvent('file-ready', {\n            composed: true,\n            bubbles: true,\n            detail: file,\n          })\n        );\n\n        this.removeAttribute('active');\n      },\n      opts\n    );\n  }\n\n  updateText() {\n    const locale = (this.#uploaderEl as MuxUploaderElement)?.locale;\n\n    const dropTextEl = this.shadowRoot?.getElementById('drop-text');\n    const separatorTextEl = this.shadowRoot?.getElementById('separator-text');\n\n    if (dropTextEl) {\n      dropTextEl.textContent = t('Drop a video file here to upload', locale);\n    }\n    if (separatorTextEl) {\n      separatorTextEl.textContent = t('or', locale);\n    }\n  }\n}\n\nif (!globalThis.customElements.get('mux-uploader-drop')) {\n  globalThis.customElements.define('mux-uploader-drop', MuxUploaderDropElement);\n  //@ts-ignore\n  globalThis.MuxUploaderDropElement = MuxUploaderDropElement;\n}\n\nexport default MuxUploaderDropElement;\n","import { globalThis, document } from './polyfills';\nimport { ProgressTypes } from './constants';\nimport { getMuxUploaderEl } from './utils/element-utils';\nimport { formatProgress } from './utils/progress';\n\nconst template = document.createElement('template');\nconst ariaDescription = 'Media upload progress bar';\n\ntemplate.innerHTML = /*html*/ `\n<style>\n  :host {\n    width: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-direction: column;\n  }\n\n  .bar-type {\n    background: var(--progress-bar-background-color, #e6e6e6);\n    border-radius: var(--progress-bar-border-radius, 100px);\n    height: var(--progress-bar-height, 4px);\n    width: 100%;\n  }\n\n  .radial-type,\n  .bar-type,\n  #percentage-type,\n  :host([type=\"bar\"][upload-error]) #percentage-type {\n    display: none;\n  }\n\n  :host([type=\"radial\"][upload-in-progress]) .radial-type,\n  :host([type=\"bar\"][upload-in-progress]) .bar-type {\n    display: block;\n  }\n\n  :host([type=\"percentage\"][upload-in-progress]) #percentage-type {\n    display: var(--progress-percentage-display, block);\n  }\n\n  :host([type=\"bar\"][upload-error]) .progress-bar {\n    background: #e22c3e;\n  }\n\n  .progress-bar {\n    box-shadow: var(--progress-bar-box-shadow, 0 10px 40px -10px #fff);\n    border-radius: var(--progress-bar-border-radius, 100px);\n    background: var(--progress-bar-fill-color, #000000);\n    height: var(--progress-bar-height, 4px);\n    width: 0%;\n    transition: width 0.25s;\n  }\n\n  circle {\n    stroke: var(--progress-radial-fill-color, black);\n    stroke-width: 6;  /* Thickness of the circle */\n    fill: transparent; /* Make inside of the circle see-through */\n\n    /* Animation */\n    transition: 0.35s;\n    transform: rotate(-90deg);\n    transform-origin: 50% 50%;\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n  }\n\n  #percentage-type {\n    font-size: inherit;\n    margin: 0 0 1em;\n  }\n</style>\n\n<slot></slot>\n\n<p id=\"percentage-type\"></p>\n<div class=\"bar-type\">\n  <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" class=\"progress-bar\" id=\"progress-bar\" tabindex=\"0\"></div>\n</div>\n<div class=\"radial-type\">\n  <svg\n    width=\"120\"\n    height=\"120\">\n    <!-- To prevent overflow of the SVG wrapper, radius must be  (svgWidth / 2) - (circleStrokeWidth * 2)\n      or use overflow: visible on the svg.-->\n    <circle\n      r=\"52\"\n      cx=\"60\"\n      cy=\"60\"\n    />\n  <svg>\n</div>\n`;\n\nclass MuxUploaderProgressElement extends globalThis.HTMLElement {\n  #uploaderEl: HTMLElement | null | undefined;\n  #abortController: AbortController | undefined;\n\n  svgCircle: SVGCircleElement | null | undefined;\n  progressBar: HTMLElement | null | undefined;\n  uploadPercentage: HTMLElement | null | undefined;\n\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ mode: 'open' });\n    shadowRoot.appendChild(template.content.cloneNode(true));\n\n    this.svgCircle = this.shadowRoot?.querySelector('circle');\n    this.progressBar = this.shadowRoot?.getElementById('progress-bar');\n    this.uploadPercentage = this.shadowRoot?.getElementById('percentage-type');\n    this.progressBar?.setAttribute('aria-description', ariaDescription);\n  }\n\n  connectedCallback() {\n    this.setDefaultType();\n\n    this.#uploaderEl = getMuxUploaderEl(this);\n    this.#abortController = new AbortController();\n\n    if (this.#uploaderEl) {\n      const opts = { signal: this.#abortController.signal };\n\n      this.#uploaderEl.addEventListener('uploadstart', this.onUploadStart, opts);\n      this.#uploaderEl.addEventListener('reset', this.onReset);\n      this.#uploaderEl.addEventListener('progress', this.onProgress);\n      this.#uploaderEl.addEventListener('success', this.onSuccess);\n      this.toggleAttribute('upload-in-progress', this.#uploaderEl.hasAttribute('upload-in-progress'));\n      this.toggleAttribute('upload-complete', this.#uploaderEl.hasAttribute('upload-complete'));\n    }\n  }\n\n  disconnectedCallback() {\n    this.#abortController?.abort();\n  }\n\n  onUploadStart = () => {\n    this.progressBar?.focus();\n    this.toggleAttribute('upload-in-progress', true);\n  };\n\n  onProgress = (e: Event) => {\n    // @ts-ignore\n    const percent = e.detail;\n    this.progressBar?.setAttribute('aria-valuenow', `${Math.floor(percent)}`);\n\n    switch (this.getAttribute('type')) {\n      case ProgressTypes.BAR: {\n        if (this.progressBar) {\n          this.progressBar.style.width = `${percent}%`;\n        }\n        break;\n      }\n      case ProgressTypes.RADIAL: {\n        if (this.svgCircle) {\n          // The closer the upload percentage gets to 100%, the closer offset gets to 0.\n          // The closer offset gets to 0, the more we can see the circumference of our circle. (TD).\n          const offset = this.getCircumference() - (percent / 100) * this.getCircumference();\n\n          this.svgCircle.style.strokeDashoffset = offset.toString();\n        }\n        break;\n      }\n      case ProgressTypes.PERCENTAGE: {\n        if (this.uploadPercentage) this.uploadPercentage.innerHTML = formatProgress(percent);\n        break;\n      }\n    }\n  };\n\n  onSuccess = () => {\n    this.toggleAttribute('upload-in-progress', false);\n    this.toggleAttribute('upload-complete', true);\n  };\n\n  onReset = () => {\n    this.toggleAttribute('upload-in-progress', false);\n    if (this.uploadPercentage) {\n      this.uploadPercentage.innerHTML = '';\n    }\n\n    if (this.svgCircle) {\n      this.svgCircle.style.strokeDashoffset = `${this.getCircumference()}`;\n    }\n  };\n\n  getRadius() {\n    return Number(this.svgCircle?.getAttribute('r'));\n  }\n\n  getCircumference() {\n    return this.getRadius() * 2 * Math.PI;\n  }\n\n  setDefaultType() {\n    const currentType = this.getAttribute('type');\n\n    if (!currentType) {\n      this.setAttribute('type', ProgressTypes.BAR);\n    }\n\n    if (currentType === ProgressTypes.RADIAL && this.svgCircle) {\n      // strokeDasharray is the size of dashes used to draw the circle with the size of gaps in between.\n      // If the dash number is the same as the gap number, no gap is visible: a full circle.\n      // strokeDashoffset defines where along our circle the dashes (in our case, a dash as long as the\n      // circumference of our circle) begins. The larger the offset, the farther into the circle you're\n      // starting the \"dash\". In the beginning, offset is the same as the circumference. Meaning, the visible\n      // dash starts at the end so we don't see the full circle. Instead we see a gap the size of the circle.\n      // When the percentage is 100%, offset is 0 meaning the dash starts at the beginning so we can see the circle. (TD).\n      this.svgCircle.style.strokeDasharray = `${this.getCircumference()} ${this.getCircumference()}`;\n      this.svgCircle.style.strokeDashoffset = `${this.getCircumference()}`;\n    }\n  }\n}\n\nif (!globalThis.customElements.get('mux-uploader-progress')) {\n  globalThis.customElements.define('mux-uploader-progress', MuxUploaderProgressElement);\n}\n\nexport default MuxUploaderProgressElement;\n","export function formatProgress(percent: number): string {\n  return `${Math.floor(percent)}%`;\n}\n","import { globalThis, document } from './polyfills';\nimport { getMuxUploaderEl } from './utils/element-utils';\nimport { type MuxUploaderElementEventMap } from './mux-uploader';\nimport type MuxUploaderElement from './mux-uploader';\nimport { t } from './utils/i18n.js';\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = `\n<style>\n\n:host([upload-error]) {\n  color: #e22c3e;\n}\n</style>\n\n<span id=\"status-message\" role=\"status\" aria-live=\"polite\"></span>\n`;\n\nclass MuxUploaderStatusElement extends globalThis.HTMLElement {\n  statusMessage: HTMLElement | null | undefined;\n  #uploaderEl: MuxUploaderElement | null | undefined;\n  #abortController: AbortController | undefined;\n\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ mode: 'open' });\n    shadowRoot.appendChild(template.content.cloneNode(true));\n\n    this.statusMessage = this.shadowRoot?.getElementById('status-message');\n  }\n\n  connectedCallback() {\n    this.#uploaderEl = getMuxUploaderEl(this);\n    this.#abortController = new AbortController();\n\n    if (this.#uploaderEl) {\n      const opts = { signal: this.#abortController.signal };\n      this.#uploaderEl.addEventListener('reset', this.clearStatusMessage, opts);\n      this.#uploaderEl.addEventListener('uploaderror', this.onUploadError, opts);\n      this.#uploaderEl.addEventListener('success', this.onSuccess, opts);\n      this.#uploaderEl.addEventListener('uploadstart', this.clearStatusMessage, opts);\n      this.#uploaderEl.addEventListener('offline', this.onOffline, opts);\n      this.#uploaderEl.addEventListener('online', this.clearStatusMessage, opts);\n\n      this.toggleAttribute('upload-in-progress', this.#uploaderEl.hasAttribute('upload-in-progress'));\n      this.toggleAttribute('upload-complete', this.#uploaderEl.hasAttribute('upload-complete'));\n      this.toggleAttribute('upload-error', this.#uploaderEl.hasAttribute('upload-error'));\n\n      this.#uploaderEl.addEventListener(\n        'localechange',\n        () => {\n          if (this.statusMessage?.textContent && this.#uploaderEl?.hasAttribute('upload-complete')) {\n            const locale = (this.#uploaderEl as MuxUploaderElement)?.locale;\n            this.statusMessage.innerHTML = t('Upload complete!', locale);\n          }\n        },\n        opts\n      );\n    }\n  }\n\n  disconnectedCallback() {\n    this.#abortController?.abort();\n  }\n\n  clearStatusMessage = () => {\n    this.toggleAttribute('upload-error', false);\n    if (this.statusMessage) {\n      this.statusMessage.innerHTML = '';\n    }\n  };\n\n  onUploadError = (e: MuxUploaderElementEventMap['uploaderror']) => {\n    this.toggleAttribute('upload-error', true);\n    if (this.statusMessage) {\n      this.statusMessage.innerHTML = e.detail.message;\n    }\n  };\n\n  onSuccess = () => {\n    this.toggleAttribute('upload-error', false);\n\n    const locale = (this.#uploaderEl as MuxUploaderElement)?.locale;\n    const successMessage = t('Upload complete!', locale);\n\n    if (this.statusMessage) {\n      this.statusMessage.innerHTML = successMessage;\n    }\n\n    console.info(successMessage);\n  };\n\n  onOffline = () => {\n    this.toggleAttribute('upload-error', false);\n    const offlineMessage = 'Currently offline. Upload will resume automatically when online.';\n\n    if (this.statusMessage) {\n      this.statusMessage.innerHTML = offlineMessage;\n    }\n  };\n}\n\nif (!globalThis.customElements.get('mux-uploader-status')) {\n  globalThis.customElements.define('mux-uploader-status', MuxUploaderStatusElement);\n}\n\nexport default MuxUploaderStatusElement;\n","import { globalThis, document } from './polyfills';\nimport { getMuxUploaderEl } from './utils/element-utils';\nimport type MuxUploaderElement from './mux-uploader';\nimport { t } from './utils/i18n.js';\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = `\n<style>\n  #retry-button {\n    color: #e22c3e;\n    text-decoration-line: underline;\n    cursor: pointer;\n    position: relative;\n    display: none;\n  }\n\n  :host([upload-error]) #retry-button {\n    display: inline-block;\n  }\n</style>\n\n<span id=\"retry-button\" role=\"button\" tabindex=\"0\">Try again</span>\n`;\n\nclass MuxUploaderRetryElement extends globalThis.HTMLElement {\n  retryButton: HTMLElement | null | undefined;\n  #uploaderEl: MuxUploaderElement | null | undefined;\n  #abortController: AbortController | undefined;\n\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ mode: 'open' });\n    shadowRoot.appendChild(template.content.cloneNode(true));\n\n    this.retryButton = this.shadowRoot?.getElementById('retry-button');\n  }\n\n  connectedCallback() {\n    this.#uploaderEl = getMuxUploaderEl(this);\n    this.#abortController = new AbortController();\n\n    if (this.#uploaderEl) {\n      const opts = { signal: this.#abortController.signal };\n      this.#uploaderEl.addEventListener('uploaderror', () => this.toggleAttribute('upload-error', true));\n      this.#uploaderEl.addEventListener('reset', () => this.toggleAttribute('upload-error', false));\n      this.retryButton?.addEventListener('click', this.triggerReset, opts);\n      this.retryButton?.addEventListener('keyup', this.handleKeyup, opts);\n\n      this.toggleAttribute('upload-error', this.#uploaderEl.hasAttribute('upload-error'));\n\n      this.#uploaderEl.addEventListener('localechange', () => this.updateText(), opts);\n\n      this.updateText();\n    }\n  }\n\n  disconnectedCallback() {\n    this.#abortController?.abort();\n  }\n\n  handleKeyup = (e: KeyboardEvent) => {\n    const ButtonPressedKeys = ['Enter', ' '];\n    const { key } = e;\n    if (!ButtonPressedKeys.includes(key)) {\n      return;\n    }\n\n    this.triggerReset();\n  };\n\n  triggerReset = () => {\n    this.#uploaderEl?.dispatchEvent(new CustomEvent('reset'));\n  };\n\n  updateText() {\n    const locale = (this.#uploaderEl as MuxUploaderElement)?.locale;\n    if (this.retryButton) {\n      this.retryButton.textContent = t('Retry', locale);\n    }\n  }\n}\n\nif (!globalThis.customElements.get('mux-uploader-retry')) {\n  globalThis.customElements.define('mux-uploader-retry', MuxUploaderRetryElement);\n}\n\nexport default MuxUploaderRetryElement;\n","import { globalThis, document } from './polyfills';\nimport { getMuxUploaderEl } from './utils/element-utils';\nimport type MuxUploaderElement from './mux-uploader';\nimport { t } from './utils/i18n.js';\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /*html*/ `\n<style>\n#pause-button {\n  cursor: pointer;\n  line-height: 16px;\n  background: #fff;\n  border: 1px solid #000;\n  color: #000000;\n  padding: 16px 24px;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease;\n  transition: all 0.2s ease;\n  font-family: inherit;\n  font-size: inherit;\n  position: relative;\n  display: none;\n}\n\n#pause-button:hover:not(:disabled) {\n  color: #fff;\n  background: #404040;\n}\n\n#pause-button:active {\n  color: #fff;\n  background: #000;\n}\n\n#pause-button:disabled {\n  cursor: not-allowed;\n}\n\n:host([upload-in-progress]:not([upload-error], [upload-complete])) #pause-button {\n  display: initial;\n}\n</style>\n\n<button id=\"pause-button\">Pause</span>\n`;\n\nclass MuxUploaderPauseElement extends globalThis.HTMLElement {\n  #uploaderEl: MuxUploaderElement | null | undefined;\n  #abortController: AbortController | undefined;\n\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ mode: 'open' });\n    shadowRoot.appendChild(template.content.cloneNode(true));\n  }\n\n  connectedCallback() {\n    this.#uploaderEl = getMuxUploaderEl(this);\n    this.#abortController = new AbortController();\n\n    if (this.#uploaderEl) {\n      const opts = { signal: this.#abortController.signal };\n      this.#uploaderEl.addEventListener('uploadstart', () => this.toggleAttribute('upload-in-progress', true), opts);\n      this.#uploaderEl.addEventListener('uploaderror', () => {\n        this.toggleAttribute('upload-error', true);\n        this.toggleAttribute('upload-complete', false);\n        this.toggleAttribute('upload-in-progress', false);\n      });\n      this.#uploaderEl.addEventListener('success', () => {\n        this.toggleAttribute('upload-complete', true);\n        this.toggleAttribute('upload-error', false);\n        this.toggleAttribute('upload-in-progress', false);\n      });\n      this.#uploaderEl.addEventListener('reset', () => {\n        this.toggleAttribute('upload-error', false);\n        this.toggleAttribute('upload-in-progress', false);\n        this.toggleAttribute('upload-complete', false);\n      });\n      /** @TODO Implement a more robust \"pausedState\" in mux-uploader (plausibly in upchunk) to account for \"pausing\" (CJP) */\n      this.#uploaderEl.addEventListener('pausedchange', () => {\n        this.pauseButton.disabled = false;\n        if (!this.#uploaderEl) return;\n        const nextPausedState = this.#uploaderEl.paused ?? false;\n        this.updateText();\n        if (nextPausedState) {\n          this.pauseButton.disabled = true;\n          this.#uploaderEl.addEventListener(\n            'chunksuccess',\n            () => {\n              this.updateText();\n              this.pauseButton.disabled = false;\n            },\n            { once: true }\n          );\n        }\n      });\n\n      this.pauseButton.addEventListener('click', this.triggerPause, opts);\n\n      this.toggleAttribute('upload-in-progress', this.#uploaderEl.hasAttribute('upload-in-progress'));\n      this.toggleAttribute('upload-complete', this.#uploaderEl.hasAttribute('upload-complete'));\n      this.toggleAttribute('upload-error', this.#uploaderEl.hasAttribute('upload-error'));\n\n      this.#uploaderEl.addEventListener('localechange', () => this.updateText(), opts);\n\n      this.updateText();\n    }\n  }\n\n  disconnectedCallback() {\n    this.#abortController?.abort();\n  }\n\n  get pauseButton() {\n    return this.shadowRoot?.getElementById('pause-button') as HTMLButtonElement;\n  }\n\n  updateText() {\n    const locale = (this.#uploaderEl as MuxUploaderElement)?.locale;\n    const isPaused = this.#uploaderEl?.paused ?? false;\n    const isPausing = this.pauseButton?.disabled && isPaused;\n\n    if (isPausing) {\n      // If entered paused, currently does not take effect until current chunk completes upload,\n      // so show as \"pausing\"\n      this.pauseButton.innerHTML = t('Pausing...', locale);\n    } else {\n      // Recheck paused state just in case state changed while waiting for 'chunksuccess'\n      this.pauseButton.innerHTML = isPaused ? t('Resume', locale) : t('Pause', locale);\n    }\n  }\n\n  triggerPause = () => {\n    if (!this.#uploaderEl) {\n      console.warn('pausing before a mux-uploader element is associated is unsupported!');\n      return;\n    }\n    if (this.pauseButton.disabled) {\n      return;\n    }\n    this.#uploaderEl.paused = !this.#uploaderEl.paused;\n  };\n}\n\nif (!globalThis.customElements.get('mux-uploader-pause')) {\n  globalThis.customElements.define('mux-uploader-pause', MuxUploaderPauseElement);\n}\n\nexport default MuxUploaderPauseElement;\n","import { globalThis, document } from './polyfills';\nimport { getMuxUploaderEl } from './utils/element-utils';\nimport type MuxUploaderElement from './mux-uploader';\nimport { t } from './utils/i18n.js';\n\nexport const fileSelectFragment = /*html*/ `\n  <style>\n  #file-select {\n    cursor: pointer;\n    line-height: 16px;\n    background: #fff;\n    border: 1px solid #000;\n    color: #000000;\n    padding: 16px 24px;\n    border-radius: 4px;\n    -webkit-transition: all 0.2s ease;\n    transition: all 0.2s ease;\n    font-family: inherit;\n    font-size: inherit;\n    position: relative;\n  }\n\n  #file-select:hover {\n    color: #fff;\n    background: #404040;\n  }\n\n  #file-select:active {\n    color: #fff;\n    background: #000;\n  }\n\n  </style>\n\n  <button id=\"file-select\" type=\"button\" part=\"file-select-button\">Upload a video</button>\n`;\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = /*html*/ `\n  <style>\n    :host { display: inline-block; }\n\n    :host([file-ready]) > slot  {\n      display: none;\n    }\n  </style>\n\n  <slot>\n    ${fileSelectFragment}\n  </slot>\n`;\n\nclass MuxUploaderFileSelectElement extends globalThis.HTMLElement {\n  #filePickerEl: HTMLElement | null | undefined;\n  #uploaderEl: MuxUploaderElement | null | undefined;\n\n  #abortController: AbortController | undefined;\n\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ mode: 'open' });\n    shadowRoot.appendChild(template.content.cloneNode(true));\n\n    // NOTE: Binding this so that we have a reference to remove the event listener\n    // but can still reference `this` in the method. (CJP)\n    this.handleFilePickerElClick = this.handleFilePickerElClick.bind(this);\n\n    // Since we have a \"default slotted\" element, we still need to initialize the slottable elements\n    // (Note the difference in selectors and related code in 'slotchange' handler, below)\n    this.filePickerEl = this.shadowRoot?.querySelector('button');\n\n    this.shadowRoot?.querySelector('slot')?.addEventListener('slotchange', (e) => {\n      const slot = e.currentTarget as HTMLSlotElement;\n      this.filePickerEl = slot\n        .assignedElements({ flatten: true })\n        .filter((el) => !['STYLE'].includes(el.nodeName))[0] as HTMLButtonElement;\n      this.updateText();\n    });\n  }\n\n  connectedCallback() {\n    this.#uploaderEl = getMuxUploaderEl(this);\n    this.#abortController = new AbortController();\n\n    if (this.#uploaderEl) {\n      const opts = { signal: this.#abortController.signal };\n\n      this.#uploaderEl.addEventListener(\n        'file-ready',\n        () => {\n          this.toggleAttribute('file-ready', true);\n        },\n        opts\n      );\n\n      this.#uploaderEl.addEventListener('uploadstart', () => this.toggleAttribute('upload-in-progress', true), opts);\n\n      this.#uploaderEl.addEventListener(\n        'success',\n        () => {\n          this.toggleAttribute('upload-in-progress', false);\n          this.toggleAttribute('upload-complete', true);\n        },\n        opts\n      );\n\n      this.#uploaderEl.addEventListener(\n        'reset',\n        () => {\n          this.toggleAttribute('file-ready', false);\n        },\n        opts\n      );\n\n      this.toggleAttribute('upload-in-progress', this.#uploaderEl.hasAttribute('upload-in-progress'));\n      this.toggleAttribute('upload-complete', this.#uploaderEl.hasAttribute('upload-complete'));\n      this.toggleAttribute('file-ready', this.#uploaderEl.hasAttribute('file-ready'));\n\n      this.#uploaderEl.addEventListener('localechange', () => this.updateText(), opts);\n\n      this.updateText();\n    }\n  }\n\n  disconnectedCallback() {\n    this.#abortController?.abort();\n  }\n\n  protected get filePickerEl() {\n    return this.#filePickerEl;\n  }\n\n  protected set filePickerEl(value: HTMLElement | null | undefined) {\n    if (value === this.#filePickerEl) return;\n    if (this.#filePickerEl) {\n      this.#filePickerEl.removeEventListener('click', this.handleFilePickerElClick);\n    }\n\n    this.#filePickerEl = value;\n    if (this.#filePickerEl) {\n      this.#filePickerEl.addEventListener('click', this.handleFilePickerElClick);\n    }\n  }\n\n  handleFilePickerElClick() {\n    // TO-DO: Allow user to reattempt uploading the same file after an error.\n    // Note: Apparently Chrome and Firefox do not allow changing an indexed property on FileList...(TD).\n    // Source: https://stackoverflow.com/a/46689013\n    const attr = this.getAttribute('mux-uploader');\n    const controller = attr ? document.getElementById(attr) : (this.getRootNode() as ShadowRoot).host;\n\n    controller?.shadowRoot?.querySelector<HTMLInputElement>('#hidden-file-input')?.click();\n  }\n\n  updateText() {\n    const locale = (this.#uploaderEl as MuxUploaderElement)?.locale;\n    const text = t('Upload a video', locale);\n\n    // Translate text only if it's the default button (inside the shadow DOM)\n    const buttonEl = this.shadowRoot?.querySelector('#file-select') as HTMLButtonElement;\n    if (buttonEl) {\n      buttonEl.textContent = text;\n    }\n  }\n}\n\nif (!globalThis.customElements.get('mux-uploader-file-select')) {\n  globalThis.customElements.define('mux-uploader-file-select', MuxUploaderFileSelectElement);\n}\n\nexport default MuxUploaderFileSelectElement;\n","import { document } from '../polyfills';\n\nimport '../mux-uploader-drop';\nimport '../mux-uploader-progress';\nimport '../mux-uploader-status';\nimport '../mux-uploader-retry';\nimport '../mux-uploader-pause';\nimport '../mux-uploader-file-select';\nimport { fileSelectFragment } from '../mux-uploader-file-select';\nimport MuxUploaderElement from '../mux-uploader';\n\nfunction conditionalRender(flag: boolean | undefined, component: string): string {\n  return flag ? '' : component;\n}\n\nconst attributeRender = (name: string, value: any): string => {\n  if (value == null || value === false) return '';\n  const valueStr = value === true ? '' : `${value}`;\n  return `${name}=\"${valueStr}\"`;\n};\n\nexport default function blockLayout(contextElement: MuxUploaderElement): DocumentFragment {\n  const { noDrop, noProgress, noStatus, noRetry, pausable, type } = contextElement;\n  const wrapper = noDrop ? 'div' : 'mux-uploader-drop overlay part=\"drop\"';\n  const progressElements = conditionalRender(\n    noProgress,\n    `\n      <mux-uploader-progress part=\"progress progress-percentage\" type=\"percentage\"></mux-uploader-progress>\n      <mux-uploader-progress part=\"progress progress-bar\" ${attributeRender('type', type)}></mux-uploader-progress>\n    `\n  );\n  const statusElement = conditionalRender(noStatus, '<mux-uploader-status part=\"status\"></mux-uploader-status>');\n  const retryElement = conditionalRender(noRetry, '<mux-uploader-retry part=\"retry\"></mux-uploader-retry>');\n  const pauseElement = conditionalRender(!pausable, '<mux-uploader-pause part=\"pause\"></mux-uploader-pause>');\n\n  return document.createRange().createContextualFragment(`\n    <${wrapper}>\n      ${statusElement}\n      ${retryElement}\n      ${pauseElement}\n\n      <mux-uploader-file-select part=\"file-select\">\n        <slot name=\"file-select\">\n          ${fileSelectFragment}\n        </slot>\n      </mux-uploader-file-select>\n\n      ${progressElements}\n    </${wrapper}>\n  `);\n}\n","import { globalThis, document } from './polyfills';\n\nimport { UpChunk } from '@mux/upchunk';\n\nimport blockLayout from './layouts/block';\nimport { ProgressTypes } from './constants';\nimport { t } from './utils/i18n.js';\n\nconst rootTemplate = document.createElement('template');\n\nrootTemplate.innerHTML = /*html*/ `\n<style>\n  :host {\n    display: flex;\n    flex-direction: column;\n  }\n\n  mux-uploader-drop {\n    flex-grow: 1;\n  }\n\n  input[type=\"file\"] {\n    display: none;\n  }\n</style>\n\n<input id=\"hidden-file-input\" type=\"file\" accept=\"video/*, audio/*\" />\n<mux-uploader-sr-text></mux-uploader-sr-text>\n`;\n\ntype Endpoint = UpChunk['endpoint'] | undefined | null;\ntype DynamicChunkSize = UpChunk['dynamicChunkSize'] | undefined;\n\ntype ErrorDetail = {\n  message: string;\n  chunkNumber?: number;\n  attempts?: number;\n};\n\n// NOTE: Progress event is already determined on HTMLElement but have inconsistent types. Should consider renaming events (CJP)\nexport interface MuxUploaderElementEventMap extends Omit<HTMLElementEventMap, 'progress'> {\n  uploadstart: CustomEvent<{ file: File; chunkSize: number }>;\n  chunkattempt: CustomEvent<{\n    chunkNumber: number;\n    chunkSize: number;\n  }>;\n  chunksuccess: CustomEvent<{\n    chunk: number;\n    chunkSize: number;\n    attempts: number;\n    timeInterval: number;\n    // Note: This should be more explicitly typed in Upchunk. (TD).\n    response: any;\n  }>;\n  uploaderror: CustomEvent<ErrorDetail>;\n  progress: CustomEvent<number>;\n  success: CustomEvent<undefined | null>;\n  'file-ready': CustomEvent<File>;\n}\n\ninterface MuxUploaderElement extends HTMLElement {\n  addEventListener<K extends keyof MuxUploaderElementEventMap>(\n    type: K,\n    listener: (this: HTMLMediaElement, ev: MuxUploaderElementEventMap[K]) => any,\n    options?: boolean | AddEventListenerOptions\n  ): void;\n  addEventListener(\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | AddEventListenerOptions\n  ): void;\n  removeEventListener<K extends keyof MuxUploaderElementEventMap>(\n    type: K,\n    listener: (this: HTMLMediaElement, ev: MuxUploaderElementEventMap[K]) => any,\n    options?: boolean | EventListenerOptions\n  ): void;\n  removeEventListener(\n    type: string,\n    listener: EventListenerOrEventListenerObject,\n    options?: boolean | EventListenerOptions\n  ): void;\n}\n\nclass MuxUploaderElement extends globalThis.HTMLElement implements MuxUploaderElement {\n  static get observedAttributes() {\n    return [\n      'pausable',\n      'type',\n      'no-drop',\n      'no-progress',\n      'no-status',\n      'no-retry',\n      'max-file-size',\n      'use-large-file-workaround',\n      'locale',\n    ];\n  }\n\n  protected _endpoint: Endpoint;\n  protected _upload?: UpChunk;\n\n  constructor() {\n    super();\n\n    const shadow = this.attachShadow({ mode: 'open' });\n\n    // Always attach the root template\n    shadow.appendChild(rootTemplate.content.cloneNode(true));\n\n    // Attach a layout\n    this.updateLayout();\n\n    this.hiddenFileInput?.addEventListener('change', () => {\n      const file = this.hiddenFileInput?.files?.[0];\n      this.toggleAttribute('file-ready', !!file);\n\n      if (file) {\n        this.dispatchEvent(\n          new CustomEvent('file-ready', {\n            composed: true,\n            bubbles: true,\n            detail: file,\n          })\n        );\n      }\n    });\n  }\n\n  connectedCallback() {\n    this.addEventListener('file-ready', this.handleUpload);\n    this.addEventListener('reset', this.resetState);\n  }\n\n  disconnectedCallback() {\n    this.removeEventListener('file-ready', this.handleUpload, false);\n    this.removeEventListener('reset', this.resetState);\n  }\n\n  attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {\n    if (name === 'locale' && oldValue !== newValue) {\n      // Dispatch event to notify subcomponents to update their texts\n      this.dispatchEvent(new CustomEvent('localechange', { detail: { locale: newValue } }));\n    } else if (name !== 'locale') {\n      this.updateLayout();\n    }\n  }\n\n  protected get hiddenFileInput() {\n    return this.shadowRoot?.querySelector('#hidden-file-input') as HTMLInputElement;\n  }\n\n  get endpoint(): Endpoint {\n    return this.getAttribute('endpoint') ?? this._endpoint;\n  }\n\n  set endpoint(value: Endpoint) {\n    if (value === this.endpoint) return;\n    if (typeof value === 'string') {\n      this.setAttribute('endpoint', value);\n    } else if (value == undefined) {\n      this.removeAttribute('endpoint');\n    }\n    this._endpoint = value;\n  }\n\n  get type() {\n    return (this.getAttribute('type') ?? undefined) as ProgressTypes[keyof ProgressTypes] | undefined;\n  }\n\n  set type(val: ProgressTypes[keyof ProgressTypes] | undefined) {\n    if (val == this.type) return;\n    if (!val) {\n      this.removeAttribute('type');\n    } else {\n      this.setAttribute('type', val);\n    }\n  }\n\n  get noDrop(): boolean {\n    return this.hasAttribute('no-drop');\n  }\n\n  set noDrop(value: boolean) {\n    this.toggleAttribute('no-drop', Boolean(value));\n  }\n\n  get noProgress(): boolean {\n    return this.hasAttribute('no-progress');\n  }\n\n  set noProgress(value: boolean) {\n    this.toggleAttribute('no-progress', Boolean(value));\n  }\n\n  get noStatus(): boolean {\n    return this.hasAttribute('no-status');\n  }\n\n  set noStatus(value: boolean) {\n    this.toggleAttribute('no-status', Boolean(value));\n  }\n\n  get noRetry(): boolean {\n    return this.hasAttribute('no-retry');\n  }\n\n  set noRetry(value: boolean) {\n    this.toggleAttribute('no-retry', Boolean(value));\n  }\n\n  get pausable() {\n    return this.hasAttribute('pausable');\n  }\n\n  set pausable(value) {\n    this.toggleAttribute('pausable', Boolean(value));\n  }\n\n  get dynamicChunkSize(): DynamicChunkSize {\n    return this.hasAttribute('dynamic-chunk-size');\n  }\n\n  set dynamicChunkSize(value: DynamicChunkSize) {\n    if (value === this.hasAttribute('dynamic-chunk-size')) return;\n    if (value) {\n      this.setAttribute('dynamic-chunk-size', '');\n    } else {\n      this.removeAttribute('dynamic-chunk-size');\n    }\n  }\n\n  get useLargeFileWorkaround() {\n    return this.hasAttribute('use-large-file-workaround');\n  }\n\n  set useLargeFileWorkaround(value: boolean | undefined) {\n    if (value == this.useLargeFileWorkaround) return;\n    this.toggleAttribute('use-large-file-workaround', !!value);\n  }\n\n  get maxFileSize(): number | undefined {\n    const maxFileSize = this.getAttribute('max-file-size');\n    return maxFileSize !== null ? parseInt(maxFileSize) : undefined;\n  }\n\n  set maxFileSize(value: number | undefined) {\n    if (value) {\n      this.setAttribute('max-file-size', value.toString());\n    } else {\n      this.removeAttribute('max-file-size');\n    }\n  }\n\n  get chunkSize(): number | undefined {\n    const chunkSize = this.getAttribute('chunk-size');\n    return chunkSize !== null ? parseInt(chunkSize) : undefined;\n  }\n\n  set chunkSize(value: number | undefined) {\n    if (value) {\n      this.setAttribute('chunk-size', value.toString());\n    } else {\n      this.removeAttribute('chunk-size');\n    }\n  }\n\n  get locale(): string | null {\n    return this.getAttribute('locale');\n  }\n\n  set locale(value: string | undefined) {\n    if (value === this.locale) return;\n    if (!value) {\n      this.removeAttribute('locale');\n    } else {\n      this.setAttribute('locale', value);\n    }\n  }\n\n  get upload() {\n    return this._upload;\n  }\n\n  get paused() {\n    return this.upload?.paused ?? false;\n  }\n\n  set paused(value) {\n    if (!this.upload) {\n      console.warn('Pausing before an upload has begun is unsupported');\n      return;\n    }\n    const boolVal = !!value;\n    if (boolVal === this.paused) return;\n    if (boolVal) {\n      this.upload.pause();\n    } else {\n      this.upload.resume();\n    }\n    this.toggleAttribute('paused', boolVal);\n    this.dispatchEvent(new CustomEvent('pausedchange', { detail: boolVal }));\n  }\n\n  updateLayout() {\n    const oldLayout = this.shadowRoot?.querySelector('mux-uploader-drop, div');\n    if (oldLayout) {\n      oldLayout.remove();\n    }\n    const newLayout = blockLayout(this);\n    this.shadowRoot?.appendChild(newLayout);\n  }\n\n  setError(message: string) {\n    this.setAttribute('upload-error', '');\n    this.dispatchEvent(new CustomEvent('uploaderror', { detail: { message } }));\n  }\n\n  resetState() {\n    this.removeAttribute('upload-error');\n    this.removeAttribute('upload-in-progress');\n    this.removeAttribute('upload-complete');\n    // Reset file to ensure change/input events will fire, even if selecting the same file (CJP).\n    this.hiddenFileInput.value = '';\n  }\n\n  handleUpload(evt: CustomEvent) {\n    const endpoint = this.endpoint;\n    const dynamicChunkSize = this.dynamicChunkSize;\n\n    if (!endpoint) {\n      this.setError(t('No url or endpoint specified - cannot handle upload', this.locale));\n      // Bail early if no endpoint.\n      return;\n    } else {\n      this.removeAttribute('upload-error');\n    }\n\n    try {\n      const upload = UpChunk.createUpload({\n        endpoint,\n        dynamicChunkSize,\n        file: evt.detail,\n        maxFileSize: this.maxFileSize,\n        chunkSize: this.chunkSize,\n        useLargeFileWorkaround: this.useLargeFileWorkaround,\n      });\n\n      this._upload = upload;\n\n      this.dispatchEvent(\n        new CustomEvent('uploadstart', { detail: { file: upload.file, chunkSize: upload.chunkSize } })\n      );\n      this.setAttribute('upload-in-progress', '');\n\n      if (upload.offline) {\n        this.dispatchEvent(new CustomEvent('offline'));\n      }\n\n      upload.on('attempt', (event: any) => {\n        this.dispatchEvent(new CustomEvent('chunkattempt', event));\n      });\n\n      upload.on('chunkSuccess', (event: any) => {\n        this.dispatchEvent(new CustomEvent('chunksuccess', event));\n      });\n\n      upload.on('error', (event: any) => {\n        this.setAttribute('upload-error', '');\n        console.error('error handler', event.detail.message);\n        this.dispatchEvent(new CustomEvent('uploaderror', event));\n      });\n\n      upload.on('progress', (event: any) => {\n        this.dispatchEvent(new CustomEvent('progress', event));\n      });\n\n      upload.on('success', (event: any) => {\n        this.removeAttribute('upload-in-progress');\n        this.setAttribute('upload-complete', '');\n\n        this.dispatchEvent(new CustomEvent('success', event));\n      });\n\n      upload.on('offline', (event: any) => {\n        this.dispatchEvent(new CustomEvent('offline', event));\n      });\n      upload.on('online', (event: any) => {\n        this.dispatchEvent(new CustomEvent('online', event));\n      });\n    } catch (err) {\n      if (err instanceof Error) {\n        this.setError(err.message);\n      }\n    }\n  }\n}\n\ntype MuxUploaderElementType = typeof MuxUploaderElement;\ndeclare global {\n  // eslint-disable-next-line\n  var MuxUploaderElement: MuxUploaderElementType;\n}\n\nif (!globalThis.customElements.get('mux-uploader')) {\n  globalThis.customElements.define('mux-uploader', MuxUploaderElement);\n  globalThis.MuxUploaderElement = MuxUploaderElement;\n}\n\nexport default MuxUploaderElement;\n","import { globalThis, document } from './polyfills';\nimport { getMuxUploaderEl } from './utils/element-utils';\nimport type MuxUploaderElement from './mux-uploader';\nimport { t } from './utils/i18n.js';\n\nconst template = document.createElement('template');\n\ntemplate.innerHTML = `\n<style>\n\n.sr-only {\n  position:absolute;\n  left:-10000px;\n  top:auto;\n  width:1px;\n  height:1px;\n  overflow:hidden;\n}\n</style>\n\n<div class=\"sr-only\" id=\"sr-only\" aria-live=\"polite\"></div>\n`;\n\nclass MuxUploaderSrTextElement extends globalThis.HTMLElement {\n  srOnlyText: HTMLElement | null | undefined;\n  #uploaderEl: HTMLElement | null | undefined;\n\n  constructor() {\n    super();\n    const shadowRoot = this.attachShadow({ mode: 'open' });\n    shadowRoot.appendChild(template.content.cloneNode(true));\n\n    this.srOnlyText = this.shadowRoot?.getElementById('sr-only');\n  }\n\n  connectedCallback() {\n    this.#uploaderEl = getMuxUploaderEl(this);\n\n    if (this.#uploaderEl) {\n      this.#uploaderEl.addEventListener('success', this.updateText.bind(this));\n\n      this.#uploaderEl.addEventListener('localechange', () => {\n        if (this.srOnlyText?.textContent) {\n          this.updateText();\n        }\n      });\n    }\n  }\n\n  disconnectedCallback() {\n    if (this.#uploaderEl) {\n      this.#uploaderEl.removeEventListener('success', this.updateText.bind(this));\n    }\n  }\n\n  updateText() {\n    if (this.srOnlyText) {\n      const locale = (this.#uploaderEl as MuxUploaderElement)?.locale;\n      this.srOnlyText.textContent = t('Upload complete!', locale);\n    }\n  }\n}\n\nif (!globalThis.customElements.get('mux-uploader-sr-text')) {\n  globalThis.customElements.define('mux-uploader-sr-text', MuxUploaderSrTextElement);\n}\n\nexport default MuxUploaderSrTextElement;\n","export * as constants from './constants';\nexport { t } from './utils/i18n.js';\nimport MuxUploaderElement, { MuxUploaderElementEventMap } from './mux-uploader';\nimport MuxUploaderProgressElement from './mux-uploader-progress';\nimport MuxUploaderDropElement from './mux-uploader-drop';\nimport MuxUploaderFileSelectElement from './mux-uploader-file-select';\nimport MuxUploaderRetryElement from './mux-uploader-retry';\nimport MuxUploaderSrTextElement from './mux-uploader-sr-text';\nimport MuxUploaderStatusElement from './mux-uploader-status';\nimport MuxUploaderPauseElement from './mux-uploader-pause';\n\nexport {\n  MuxUploaderDropElement,\n  MuxUploaderProgressElement,\n  MuxUploaderFileSelectElement,\n  MuxUploaderRetryElement,\n  MuxUploaderSrTextElement,\n  MuxUploaderStatusElement,\n  MuxUploaderPauseElement,\n};\nexport type { MuxUploaderElementEventMap };\nexport default MuxUploaderElement;\n"]}