{"version":3,"file":"static/js/3149_59138fde5dec13cf9b94.js","mappings":"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","sources":["file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/browser.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/canIUse.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/defaultWorkerFactory.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/dnd.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/dom.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/dompurify/dompurify.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/event.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/fastDomNode.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/fonts.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/formattedTextRenderer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/globalPointerMoveMonitor.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/keyboardEvent.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/markdownRenderer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/iframe.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/mouseEvent.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/performance.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/pixelRatio.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/base/browser/touch.js"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { mainWindow } from './window.js';\nclass WindowManager {\n constructor() {\n // --- Zoom Factor\n this.mapWindowIdToZoomFactor = new Map();\n }\n getZoomFactor(targetWindow) {\n var _a;\n return (_a = this.mapWindowIdToZoomFactor.get(this.getWindowId(targetWindow))) !== null && _a !== void 0 ? _a : 1;\n }\n getWindowId(targetWindow) {\n return targetWindow.vscodeWindowId;\n }\n}\nWindowManager.INSTANCE = new WindowManager();\nexport function addMatchMediaChangeListener(targetWindow, query, callback) {\n if (typeof query === 'string') {\n query = targetWindow.matchMedia(query);\n }\n query.addEventListener('change', callback);\n}\n/** The zoom scale for an index, e.g. 1, 1.2, 1.4 */\nexport function getZoomFactor(targetWindow) {\n return WindowManager.INSTANCE.getZoomFactor(targetWindow);\n}\nconst userAgent = navigator.userAgent;\nexport const isFirefox = (userAgent.indexOf('Firefox') >= 0);\nexport const isWebKit = (userAgent.indexOf('AppleWebKit') >= 0);\nexport const isChrome = (userAgent.indexOf('Chrome') >= 0);\nexport const isSafari = (!isChrome && (userAgent.indexOf('Safari') >= 0));\nexport const isWebkitWebView = (!isChrome && !isSafari && isWebKit);\nexport const isElectron = (userAgent.indexOf('Electron/') >= 0);\nexport const isAndroid = (userAgent.indexOf('Android') >= 0);\nlet standalone = false;\nif (typeof mainWindow.matchMedia === 'function') {\n const standaloneMatchMedia = mainWindow.matchMedia('(display-mode: standalone) or (display-mode: window-controls-overlay)');\n const fullScreenMatchMedia = mainWindow.matchMedia('(display-mode: fullscreen)');\n standalone = standaloneMatchMedia.matches;\n addMatchMediaChangeListener(mainWindow, standaloneMatchMedia, ({ matches }) => {\n // entering fullscreen would change standaloneMatchMedia.matches to false\n // if standalone is true (running as PWA) and entering fullscreen, skip this change\n if (standalone && fullScreenMatchMedia.matches) {\n return;\n }\n // otherwise update standalone (browser to PWA or PWA to browser)\n standalone = matches;\n });\n}\nexport function isStandalone() {\n return standalone;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport { mainWindow } from './window.js';\nimport * as platform from '../common/platform.js';\n/**\n * Browser feature we can support in current platform, browser and environment.\n */\nexport const BrowserFeatures = {\n clipboard: {\n writeText: (platform.isNative\n || (document.queryCommandSupported && document.queryCommandSupported('copy'))\n || !!(navigator && navigator.clipboard && navigator.clipboard.writeText)),\n readText: (platform.isNative\n || !!(navigator && navigator.clipboard && navigator.clipboard.readText))\n },\n keyboard: (() => {\n if (platform.isNative || browser.isStandalone()) {\n return 0 /* KeyboardSupport.Always */;\n }\n if (navigator.keyboard || browser.isSafari) {\n return 1 /* KeyboardSupport.FullScreen */;\n }\n return 2 /* KeyboardSupport.None */;\n })(),\n // 'ontouchstart' in window always evaluates to true with typescript's modern typings. This causes `window` to be\n // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast\n touch: 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0,\n pointerEvents: mainWindow.PointerEvent && ('ontouchstart' in mainWindow || navigator.maxTouchPoints > 0)\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createTrustedTypesPolicy } from './trustedTypes.js';\nimport { onUnexpectedError } from '../common/errors.js';\nimport { logOnceWebWorkerWarning } from '../common/worker/simpleWorker.js';\nimport { Disposable, toDisposable } from '../common/lifecycle.js';\nconst ttPolicy = createTrustedTypesPolicy('defaultWorkerFactory', { createScriptURL: value => value });\nfunction getWorker(label) {\n const monacoEnvironment = globalThis.MonacoEnvironment;\n if (monacoEnvironment) {\n if (typeof monacoEnvironment.getWorker === 'function') {\n return monacoEnvironment.getWorker('workerMain.js', label);\n }\n if (typeof monacoEnvironment.getWorkerUrl === 'function') {\n const workerUrl = monacoEnvironment.getWorkerUrl('workerMain.js', label);\n return new Worker(ttPolicy ? ttPolicy.createScriptURL(workerUrl) : workerUrl, { name: label });\n }\n }\n // ESM-comment-begin\n // \tif (typeof require === 'function') {\n // \t\t// check if the JS lives on a different origin\n // \t\tconst workerMain = require.toUrl('vs/base/worker/workerMain.js'); // explicitly using require.toUrl(), see https://github.com/microsoft/vscode/issues/107440#issuecomment-698982321\n // \t\tconst workerUrl = getWorkerBootstrapUrl(workerMain, label);\n // \t\treturn new Worker(ttPolicy ? ttPolicy.createScriptURL(workerUrl) as unknown as string : workerUrl, { name: label });\n // \t}\n // ESM-comment-end\n throw new Error(`You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker`);\n}\n// ESM-comment-begin\n// export function getWorkerBootstrapUrl(scriptPath: string, label: string): string {\n// \tif (/^((http:)|(https:)|(file:))/.test(scriptPath) && scriptPath.substring(0, globalThis.origin.length) !== globalThis.origin) {\n// \t\t// this is the cross-origin case\n// \t\t// i.e. the webpage is running at a different origin than where the scripts are loaded from\n// \t\tconst myPath = 'vs/base/worker/defaultWorkerFactory.js';\n// \t\tconst workerBaseUrl = require.toUrl(myPath).slice(0, -myPath.length); // explicitly using require.toUrl(), see https://github.com/microsoft/vscode/issues/107440#issuecomment-698982321\n// \t\tconst js = `/*${label}*/globalThis.MonacoEnvironment={baseUrl: '${workerBaseUrl}'};const ttPolicy = globalThis.trustedTypes?.createPolicy('defaultWorkerFactory', { createScriptURL: value => value });importScripts(ttPolicy?.createScriptURL('${scriptPath}') ?? '${scriptPath}');/*${label}*/`;\n// \t\tconst blob = new Blob([js], { type: 'application/javascript' });\n// \t\treturn URL.createObjectURL(blob);\n// \t}\n// \n// \tconst start = scriptPath.lastIndexOf('?');\n// \tconst end = scriptPath.lastIndexOf('#', start);\n// \tconst params = start > 0\n// \t\t? new URLSearchParams(scriptPath.substring(start + 1, ~end ? end : undefined))\n// \t\t: new URLSearchParams();\n// \n// \tCOI.addSearchParam(params, true, true);\n// \tconst search = params.toString();\n// \n// \tif (!search) {\n// \t\treturn `${scriptPath}#${label}`;\n// \t} else {\n// \t\treturn `${scriptPath}?${params.toString()}#${label}`;\n// \t}\n// }\n// ESM-comment-end\nfunction isPromiseLike(obj) {\n if (typeof obj.then === 'function') {\n return true;\n }\n return false;\n}\n/**\n * A worker that uses HTML5 web workers so that is has\n * its own global scope and its own thread.\n */\nclass WebWorker extends Disposable {\n constructor(moduleId, id, label, onMessageCallback, onErrorCallback) {\n super();\n this.id = id;\n this.label = label;\n const workerOrPromise = getWorker(label);\n if (isPromiseLike(workerOrPromise)) {\n this.worker = workerOrPromise;\n }\n else {\n this.worker = Promise.resolve(workerOrPromise);\n }\n this.postMessage(moduleId, []);\n this.worker.then((w) => {\n w.onmessage = function (ev) {\n onMessageCallback(ev.data);\n };\n w.onmessageerror = onErrorCallback;\n if (typeof w.addEventListener === 'function') {\n w.addEventListener('error', onErrorCallback);\n }\n });\n this._register(toDisposable(() => {\n var _a;\n (_a = this.worker) === null || _a === void 0 ? void 0 : _a.then(w => {\n w.onmessage = null;\n w.onmessageerror = null;\n w.removeEventListener('error', onErrorCallback);\n w.terminate();\n });\n this.worker = null;\n }));\n }\n getId() {\n return this.id;\n }\n postMessage(message, transfer) {\n var _a;\n (_a = this.worker) === null || _a === void 0 ? void 0 : _a.then(w => {\n try {\n w.postMessage(message, transfer);\n }\n catch (err) {\n onUnexpectedError(err);\n onUnexpectedError(new Error(`FAILED to post message to '${this.label}'-worker`, { cause: err }));\n }\n });\n }\n}\nexport class DefaultWorkerFactory {\n constructor(label) {\n this._label = label;\n this._webWorkerFailedBeforeError = false;\n }\n create(moduleId, onMessageCallback, onErrorCallback) {\n const workerId = (++DefaultWorkerFactory.LAST_WORKER_ID);\n if (this._webWorkerFailedBeforeError) {\n throw this._webWorkerFailedBeforeError;\n }\n return new WebWorker(moduleId, workerId, this._label || 'anonymous' + workerId, onMessageCallback, (err) => {\n logOnceWebWorkerWarning(err);\n this._webWorkerFailedBeforeError = err;\n onErrorCallback(err);\n });\n }\n}\nDefaultWorkerFactory.LAST_WORKER_ID = 0;\n","import { Mimes } from '../common/mime.js';\n// Common data transfers\nexport const DataTransfers = {\n /**\n * Application specific resource transfer type\n */\n RESOURCES: 'ResourceURLs',\n /**\n * Browser specific transfer type to download\n */\n DOWNLOAD_URL: 'DownloadURL',\n /**\n * Browser specific transfer type for files\n */\n FILES: 'Files',\n /**\n * Typically transfer type for copy/paste transfers.\n */\n TEXT: Mimes.text,\n /**\n * Internal type used to pass around text/uri-list data.\n *\n * This is needed to work around https://bugs.chromium.org/p/chromium/issues/detail?id=239745.\n */\n INTERNAL_URI_LIST: 'application/vnd.code.uri-list',\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport { BrowserFeatures } from './canIUse.js';\nimport { StandardKeyboardEvent } from './keyboardEvent.js';\nimport { StandardMouseEvent } from './mouseEvent.js';\nimport { AbstractIdleValue, IntervalTimer, _runWhenIdle } from '../common/async.js';\nimport { onUnexpectedError } from '../common/errors.js';\nimport * as event from '../common/event.js';\nimport * as dompurify from './dompurify/dompurify.js';\nimport { Disposable, DisposableStore, toDisposable } from '../common/lifecycle.js';\nimport { FileAccess, RemoteAuthorities } from '../common/network.js';\nimport * as platform from '../common/platform.js';\nimport { hash } from '../common/hash.js';\nimport { ensureCodeWindow, mainWindow } from './window.js';\n//# region Multi-Window Support Utilities\nexport const { registerWindow, getWindow, getDocument, getWindows, getWindowsCount, getWindowId, getWindowById, hasWindow, onDidRegisterWindow, onWillUnregisterWindow, onDidUnregisterWindow } = (function () {\n const windows = new Map();\n ensureCodeWindow(mainWindow, 1);\n const mainWindowRegistration = { window: mainWindow, disposables: new DisposableStore() };\n windows.set(mainWindow.vscodeWindowId, mainWindowRegistration);\n const onDidRegisterWindow = new event.Emitter();\n const onDidUnregisterWindow = new event.Emitter();\n const onWillUnregisterWindow = new event.Emitter();\n function getWindowById(windowId, fallbackToMain) {\n const window = typeof windowId === 'number' ? windows.get(windowId) : undefined;\n return window !== null && window !== void 0 ? window : (fallbackToMain ? mainWindowRegistration : undefined);\n }\n return {\n onDidRegisterWindow: onDidRegisterWindow.event,\n onWillUnregisterWindow: onWillUnregisterWindow.event,\n onDidUnregisterWindow: onDidUnregisterWindow.event,\n registerWindow(window) {\n if (windows.has(window.vscodeWindowId)) {\n return Disposable.None;\n }\n const disposables = new DisposableStore();\n const registeredWindow = {\n window,\n disposables: disposables.add(new DisposableStore())\n };\n windows.set(window.vscodeWindowId, registeredWindow);\n disposables.add(toDisposable(() => {\n windows.delete(window.vscodeWindowId);\n onDidUnregisterWindow.fire(window);\n }));\n disposables.add(addDisposableListener(window, EventType.BEFORE_UNLOAD, () => {\n onWillUnregisterWindow.fire(window);\n }));\n onDidRegisterWindow.fire(registeredWindow);\n return disposables;\n },\n getWindows() {\n return windows.values();\n },\n getWindowsCount() {\n return windows.size;\n },\n getWindowId(targetWindow) {\n return targetWindow.vscodeWindowId;\n },\n hasWindow(windowId) {\n return windows.has(windowId);\n },\n getWindowById,\n getWindow(e) {\n var _a;\n const candidateNode = e;\n if ((_a = candidateNode === null || candidateNode === void 0 ? void 0 : candidateNode.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) {\n return candidateNode.ownerDocument.defaultView.window;\n }\n const candidateEvent = e;\n if (candidateEvent === null || candidateEvent === void 0 ? void 0 : candidateEvent.view) {\n return candidateEvent.view.window;\n }\n return mainWindow;\n },\n getDocument(e) {\n const candidateNode = e;\n return getWindow(candidateNode).document;\n }\n };\n})();\n//#endregion\nexport function clearNode(node) {\n while (node.firstChild) {\n node.firstChild.remove();\n }\n}\nclass DomListener {\n constructor(node, type, handler, options) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = (options || false);\n this._node.addEventListener(this._type, this._handler, this._options);\n }\n dispose() {\n if (!this._handler) {\n // Already disposed\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n // Prevent leakers from holding on to the dom or handler func\n this._node = null;\n this._handler = null;\n }\n}\nexport function addDisposableListener(node, type, handler, useCaptureOrOptions) {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\nfunction _wrapAsStandardMouseEvent(targetWindow, handler) {\n return function (e) {\n return handler(new StandardMouseEvent(targetWindow, e));\n };\n}\nfunction _wrapAsStandardKeyboardEvent(handler) {\n return function (e) {\n return handler(new StandardKeyboardEvent(e));\n };\n}\nexport const addStandardDisposableListener = function addStandardDisposableListener(node, type, handler, useCapture) {\n let wrapHandler = handler;\n if (type === 'click' || type === 'mousedown' || type === 'contextmenu') {\n wrapHandler = _wrapAsStandardMouseEvent(getWindow(node), handler);\n }\n else if (type === 'keydown' || type === 'keypress' || type === 'keyup') {\n wrapHandler = _wrapAsStandardKeyboardEvent(handler);\n }\n return addDisposableListener(node, type, wrapHandler, useCapture);\n};\nexport const addStandardDisposableGenericMouseDownListener = function addStandardDisposableListener(node, handler, useCapture) {\n const wrapHandler = _wrapAsStandardMouseEvent(getWindow(node), handler);\n return addDisposableGenericMouseDownListener(node, wrapHandler, useCapture);\n};\nexport const addStandardDisposableGenericMouseUpListener = function addStandardDisposableListener(node, handler, useCapture) {\n const wrapHandler = _wrapAsStandardMouseEvent(getWindow(node), handler);\n return addDisposableGenericMouseUpListener(node, wrapHandler, useCapture);\n};\nexport function addDisposableGenericMouseDownListener(node, handler, useCapture) {\n return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_DOWN : EventType.MOUSE_DOWN, handler, useCapture);\n}\nexport function addDisposableGenericMouseUpListener(node, handler, useCapture) {\n return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_UP : EventType.MOUSE_UP, handler, useCapture);\n}\n/**\n * Execute the callback the next time the browser is idle, returning an\n * {@link IDisposable} that will cancel the callback when disposed. This wraps\n * [requestIdleCallback] so it will fallback to [setTimeout] if the environment\n * doesn't support it.\n *\n * @param targetWindow The window for which to run the idle callback\n * @param callback The callback to run when idle, this includes an\n * [IdleDeadline] that provides the time alloted for the idle callback by the\n * browser. Not respecting this deadline will result in a degraded user\n * experience.\n * @param timeout A timeout at which point to queue no longer wait for an idle\n * callback but queue it on the regular event loop (like setTimeout). Typically\n * this should not be used.\n *\n * [IdleDeadline]: https://developer.mozilla.org/en-US/docs/Web/API/IdleDeadline\n * [requestIdleCallback]: https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback\n * [setTimeout]: https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout\n */\nexport function runWhenWindowIdle(targetWindow, callback, timeout) {\n return _runWhenIdle(targetWindow, callback, timeout);\n}\n/**\n * An implementation of the \"idle-until-urgent\"-strategy as introduced\n * here: https://philipwalton.com/articles/idle-until-urgent/\n */\nexport class WindowIdleValue extends AbstractIdleValue {\n constructor(targetWindow, executor) {\n super(targetWindow, executor);\n }\n}\n/**\n * Schedule a callback to be run at the next animation frame.\n * This allows multiple parties to register callbacks that should run at the next animation frame.\n * If currently in an animation frame, `runner` will be executed immediately.\n * @return token that can be used to cancel the scheduled runner (only if `runner` was not executed immediately).\n */\nexport let runAtThisOrScheduleAtNextAnimationFrame;\n/**\n * Schedule a callback to be run at the next animation frame.\n * This allows multiple parties to register callbacks that should run at the next animation frame.\n * If currently in an animation frame, `runner` will be executed at the next animation frame.\n * @return token that can be used to cancel the scheduled runner.\n */\nexport let scheduleAtNextAnimationFrame;\nexport class WindowIntervalTimer extends IntervalTimer {\n /**\n *\n * @param node The optional node from which the target window is determined\n */\n constructor(node) {\n super();\n this.defaultTarget = node && getWindow(node);\n }\n cancelAndSet(runner, interval, targetWindow) {\n return super.cancelAndSet(runner, interval, targetWindow !== null && targetWindow !== void 0 ? targetWindow : this.defaultTarget);\n }\n}\nclass AnimationFrameQueueItem {\n constructor(runner, priority = 0) {\n this._runner = runner;\n this.priority = priority;\n this._canceled = false;\n }\n dispose() {\n this._canceled = true;\n }\n execute() {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n // Sort by priority (largest to lowest)\n static sort(a, b) {\n return b.priority - a.priority;\n }\n}\n(function () {\n /**\n * The runners scheduled at the next animation frame\n */\n const NEXT_QUEUE = new Map();\n /**\n * The runners scheduled at the current animation frame\n */\n const CURRENT_QUEUE = new Map();\n /**\n * A flag to keep track if the native requestAnimationFrame was already called\n */\n const animFrameRequested = new Map();\n /**\n * A flag to indicate if currently handling a native requestAnimationFrame callback\n */\n const inAnimationFrameRunner = new Map();\n const animationFrameRunner = (targetWindowId) => {\n var _a;\n animFrameRequested.set(targetWindowId, false);\n const currentQueue = (_a = NEXT_QUEUE.get(targetWindowId)) !== null && _a !== void 0 ? _a : [];\n CURRENT_QUEUE.set(targetWindowId, currentQueue);\n NEXT_QUEUE.set(targetWindowId, []);\n inAnimationFrameRunner.set(targetWindowId, true);\n while (currentQueue.length > 0) {\n currentQueue.sort(AnimationFrameQueueItem.sort);\n const top = currentQueue.shift();\n top.execute();\n }\n inAnimationFrameRunner.set(targetWindowId, false);\n };\n scheduleAtNextAnimationFrame = (targetWindow, runner, priority = 0) => {\n const targetWindowId = getWindowId(targetWindow);\n const item = new AnimationFrameQueueItem(runner, priority);\n let nextQueue = NEXT_QUEUE.get(targetWindowId);\n if (!nextQueue) {\n nextQueue = [];\n NEXT_QUEUE.set(targetWindowId, nextQueue);\n }\n nextQueue.push(item);\n if (!animFrameRequested.get(targetWindowId)) {\n animFrameRequested.set(targetWindowId, true);\n targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindowId));\n }\n return item;\n };\n runAtThisOrScheduleAtNextAnimationFrame = (targetWindow, runner, priority) => {\n const targetWindowId = getWindowId(targetWindow);\n if (inAnimationFrameRunner.get(targetWindowId)) {\n const item = new AnimationFrameQueueItem(runner, priority);\n let currentQueue = CURRENT_QUEUE.get(targetWindowId);\n if (!currentQueue) {\n currentQueue = [];\n CURRENT_QUEUE.set(targetWindowId, currentQueue);\n }\n currentQueue.push(item);\n return item;\n }\n else {\n return scheduleAtNextAnimationFrame(targetWindow, runner, priority);\n }\n };\n})();\nexport function getComputedStyle(el) {\n return getWindow(el).getComputedStyle(el, null);\n}\nexport function getClientArea(element, fallback) {\n const elWindow = getWindow(element);\n const elDocument = elWindow.document;\n // Try with DOM clientWidth / clientHeight\n if (element !== elDocument.body) {\n return new Dimension(element.clientWidth, element.clientHeight);\n }\n // If visual view port exits and it's on mobile, it should be used instead of window innerWidth / innerHeight, or document.body.clientWidth / document.body.clientHeight\n if (platform.isIOS && (elWindow === null || elWindow === void 0 ? void 0 : elWindow.visualViewport)) {\n return new Dimension(elWindow.visualViewport.width, elWindow.visualViewport.height);\n }\n // Try innerWidth / innerHeight\n if ((elWindow === null || elWindow === void 0 ? void 0 : elWindow.innerWidth) && elWindow.innerHeight) {\n return new Dimension(elWindow.innerWidth, elWindow.innerHeight);\n }\n // Try with document.body.clientWidth / document.body.clientHeight\n if (elDocument.body && elDocument.body.clientWidth && elDocument.body.clientHeight) {\n return new Dimension(elDocument.body.clientWidth, elDocument.body.clientHeight);\n }\n // Try with document.documentElement.clientWidth / document.documentElement.clientHeight\n if (elDocument.documentElement && elDocument.documentElement.clientWidth && elDocument.documentElement.clientHeight) {\n return new Dimension(elDocument.documentElement.clientWidth, elDocument.documentElement.clientHeight);\n }\n if (fallback) {\n return getClientArea(fallback);\n }\n throw new Error('Unable to figure out browser width and height');\n}\nclass SizeUtils {\n // Adapted from WinJS\n // Converts a CSS positioning string for the specified element to pixels.\n static convertToPixels(element, value) {\n return parseFloat(value) || 0;\n }\n static getDimension(element, cssPropertyName, jsPropertyName) {\n const computedStyle = getComputedStyle(element);\n const value = computedStyle ? computedStyle.getPropertyValue(cssPropertyName) : '0';\n return SizeUtils.convertToPixels(element, value);\n }\n static getBorderLeftWidth(element) {\n return SizeUtils.getDimension(element, 'border-left-width', 'borderLeftWidth');\n }\n static getBorderRightWidth(element) {\n return SizeUtils.getDimension(element, 'border-right-width', 'borderRightWidth');\n }\n static getBorderTopWidth(element) {\n return SizeUtils.getDimension(element, 'border-top-width', 'borderTopWidth');\n }\n static getBorderBottomWidth(element) {\n return SizeUtils.getDimension(element, 'border-bottom-width', 'borderBottomWidth');\n }\n static getPaddingLeft(element) {\n return SizeUtils.getDimension(element, 'padding-left', 'paddingLeft');\n }\n static getPaddingRight(element) {\n return SizeUtils.getDimension(element, 'padding-right', 'paddingRight');\n }\n static getPaddingTop(element) {\n return SizeUtils.getDimension(element, 'padding-top', 'paddingTop');\n }\n static getPaddingBottom(element) {\n return SizeUtils.getDimension(element, 'padding-bottom', 'paddingBottom');\n }\n static getMarginLeft(element) {\n return SizeUtils.getDimension(element, 'margin-left', 'marginLeft');\n }\n static getMarginTop(element) {\n return SizeUtils.getDimension(element, 'margin-top', 'marginTop');\n }\n static getMarginRight(element) {\n return SizeUtils.getDimension(element, 'margin-right', 'marginRight');\n }\n static getMarginBottom(element) {\n return SizeUtils.getDimension(element, 'margin-bottom', 'marginBottom');\n }\n}\nexport class Dimension {\n constructor(width, height) {\n this.width = width;\n this.height = height;\n }\n with(width = this.width, height = this.height) {\n if (width !== this.width || height !== this.height) {\n return new Dimension(width, height);\n }\n else {\n return this;\n }\n }\n static is(obj) {\n return typeof obj === 'object' && typeof obj.height === 'number' && typeof obj.width === 'number';\n }\n static lift(obj) {\n if (obj instanceof Dimension) {\n return obj;\n }\n else {\n return new Dimension(obj.width, obj.height);\n }\n }\n static equals(a, b) {\n if (a === b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n return a.width === b.width && a.height === b.height;\n }\n}\nDimension.None = new Dimension(0, 0);\nexport function getTopLeftOffset(element) {\n // Adapted from WinJS.Utilities.getPosition\n // and added borders to the mix\n let offsetParent = element.offsetParent;\n let top = element.offsetTop;\n let left = element.offsetLeft;\n while ((element = element.parentNode) !== null\n && element !== element.ownerDocument.body\n && element !== element.ownerDocument.documentElement) {\n top -= element.scrollTop;\n const c = isShadowRoot(element) ? null : getComputedStyle(element);\n if (c) {\n left -= c.direction !== 'rtl' ? element.scrollLeft : -element.scrollLeft;\n }\n if (element === offsetParent) {\n left += SizeUtils.getBorderLeftWidth(element);\n top += SizeUtils.getBorderTopWidth(element);\n top += element.offsetTop;\n left += element.offsetLeft;\n offsetParent = element.offsetParent;\n }\n }\n return {\n left: left,\n top: top\n };\n}\nexport function size(element, width, height) {\n if (typeof width === 'number') {\n element.style.width = `${width}px`;\n }\n if (typeof height === 'number') {\n element.style.height = `${height}px`;\n }\n}\n/**\n * Returns the position of a dom node relative to the entire page.\n */\nexport function getDomNodePagePosition(domNode) {\n const bb = domNode.getBoundingClientRect();\n const window = getWindow(domNode);\n return {\n left: bb.left + window.scrollX,\n top: bb.top + window.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\n/**\n * Returns the effective zoom on a given element before window zoom level is applied\n */\nexport function getDomNodeZoomLevel(domNode) {\n let testElement = domNode;\n let zoom = 1.0;\n do {\n const elementZoomLevel = getComputedStyle(testElement).zoom;\n if (elementZoomLevel !== null && elementZoomLevel !== undefined && elementZoomLevel !== '1') {\n zoom *= elementZoomLevel;\n }\n testElement = testElement.parentElement;\n } while (testElement !== null && testElement !== testElement.ownerDocument.documentElement);\n return zoom;\n}\n// Adapted from WinJS\n// Gets the width of the element, including margins.\nexport function getTotalWidth(element) {\n const margin = SizeUtils.getMarginLeft(element) + SizeUtils.getMarginRight(element);\n return element.offsetWidth + margin;\n}\nexport function getContentWidth(element) {\n const border = SizeUtils.getBorderLeftWidth(element) + SizeUtils.getBorderRightWidth(element);\n const padding = SizeUtils.getPaddingLeft(element) + SizeUtils.getPaddingRight(element);\n return element.offsetWidth - border - padding;\n}\n// Adapted from WinJS\n// Gets the height of the content of the specified element. The content height does not include borders or padding.\nexport function getContentHeight(element) {\n const border = SizeUtils.getBorderTopWidth(element) + SizeUtils.getBorderBottomWidth(element);\n const padding = SizeUtils.getPaddingTop(element) + SizeUtils.getPaddingBottom(element);\n return element.offsetHeight - border - padding;\n}\n// Adapted from WinJS\n// Gets the height of the element, including its margins.\nexport function getTotalHeight(element) {\n const margin = SizeUtils.getMarginTop(element) + SizeUtils.getMarginBottom(element);\n return element.offsetHeight + margin;\n}\n// ----------------------------------------------------------------------------------------\nexport function isAncestor(testChild, testAncestor) {\n return Boolean(testAncestor === null || testAncestor === void 0 ? void 0 : testAncestor.contains(testChild));\n}\nexport function findParentWithClass(node, clazz, stopAtClazzOrNode) {\n while (node && node.nodeType === node.ELEMENT_NODE) {\n if (node.classList.contains(clazz)) {\n return node;\n }\n if (stopAtClazzOrNode) {\n if (typeof stopAtClazzOrNode === 'string') {\n if (node.classList.contains(stopAtClazzOrNode)) {\n return null;\n }\n }\n else {\n if (node === stopAtClazzOrNode) {\n return null;\n }\n }\n }\n node = node.parentNode;\n }\n return null;\n}\nexport function hasParentWithClass(node, clazz, stopAtClazzOrNode) {\n return !!findParentWithClass(node, clazz, stopAtClazzOrNode);\n}\nexport function isShadowRoot(node) {\n return (node && !!node.host && !!node.mode);\n}\nexport function isInShadowDOM(domNode) {\n return !!getShadowRoot(domNode);\n}\nexport function getShadowRoot(domNode) {\n var _a;\n while (domNode.parentNode) {\n if (domNode === ((_a = domNode.ownerDocument) === null || _a === void 0 ? void 0 : _a.body)) {\n // reached the body\n return null;\n }\n domNode = domNode.parentNode;\n }\n return isShadowRoot(domNode) ? domNode : null;\n}\n/**\n * Returns the active element across all child windows\n * based on document focus. Falls back to the main\n * window if no window has focus.\n */\nexport function getActiveElement() {\n let result = getActiveDocument().activeElement;\n while (result === null || result === void 0 ? void 0 : result.shadowRoot) {\n result = result.shadowRoot.activeElement;\n }\n return result;\n}\n/**\n * Returns true if the focused window active element matches\n * the provided element. Falls back to the main window if no\n * window has focus.\n */\nexport function isActiveElement(element) {\n return getActiveElement() === element;\n}\n/**\n * Returns true if the focused window active element is contained in\n * `ancestor`. Falls back to the main window if no window has focus.\n */\nexport function isAncestorOfActiveElement(ancestor) {\n return isAncestor(getActiveElement(), ancestor);\n}\n/**\n * Returns the active document across main and child windows.\n * Prefers the window with focus, otherwise falls back to\n * the main windows document.\n */\nexport function getActiveDocument() {\n var _a;\n if (getWindowsCount() <= 1) {\n return mainWindow.document;\n }\n const documents = Array.from(getWindows()).map(({ window }) => window.document);\n return (_a = documents.find(doc => doc.hasFocus())) !== null && _a !== void 0 ? _a : mainWindow.document;\n}\n/**\n * Returns the active window across main and child windows.\n * Prefers the window with focus, otherwise falls back to\n * the main window.\n */\nexport function getActiveWindow() {\n var _a, _b;\n const document = getActiveDocument();\n return ((_b = (_a = document.defaultView) === null || _a === void 0 ? void 0 : _a.window) !== null && _b !== void 0 ? _b : mainWindow);\n}\nconst globalStylesheets = new Map();\n/**\n * A version of createStyleSheet which has a unified API to initialize/set the style content.\n */\nexport function createStyleSheet2() {\n return new WrappedStyleElement();\n}\nclass WrappedStyleElement {\n constructor() {\n this._currentCssStyle = '';\n this._styleSheet = undefined;\n }\n setStyle(cssStyle) {\n if (cssStyle === this._currentCssStyle) {\n return;\n }\n this._currentCssStyle = cssStyle;\n if (!this._styleSheet) {\n this._styleSheet = createStyleSheet(mainWindow.document.head, (s) => s.innerText = cssStyle);\n }\n else {\n this._styleSheet.innerText = cssStyle;\n }\n }\n dispose() {\n if (this._styleSheet) {\n this._styleSheet.remove();\n this._styleSheet = undefined;\n }\n }\n}\nexport function createStyleSheet(container = mainWindow.document.head, beforeAppend, disposableStore) {\n const style = document.createElement('style');\n style.type = 'text/css';\n style.media = 'screen';\n beforeAppend === null || beforeAppend === void 0 ? void 0 : beforeAppend(style);\n container.appendChild(style);\n if (disposableStore) {\n disposableStore.add(toDisposable(() => container.removeChild(style)));\n }\n // With as container, the stylesheet becomes global and is tracked\n // to support auxiliary windows to clone the stylesheet.\n if (container === mainWindow.document.head) {\n const globalStylesheetClones = new Set();\n globalStylesheets.set(style, globalStylesheetClones);\n for (const { window: targetWindow, disposables } of getWindows()) {\n if (targetWindow === mainWindow) {\n continue; // main window is already tracked\n }\n const cloneDisposable = disposables.add(cloneGlobalStyleSheet(style, globalStylesheetClones, targetWindow));\n disposableStore === null || disposableStore === void 0 ? void 0 : disposableStore.add(cloneDisposable);\n }\n }\n return style;\n}\nfunction cloneGlobalStyleSheet(globalStylesheet, globalStylesheetClones, targetWindow) {\n var _a, _b;\n const disposables = new DisposableStore();\n const clone = globalStylesheet.cloneNode(true);\n targetWindow.document.head.appendChild(clone);\n disposables.add(toDisposable(() => targetWindow.document.head.removeChild(clone)));\n for (const rule of getDynamicStyleSheetRules(globalStylesheet)) {\n (_a = clone.sheet) === null || _a === void 0 ? void 0 : _a.insertRule(rule.cssText, (_b = clone.sheet) === null || _b === void 0 ? void 0 : _b.cssRules.length);\n }\n disposables.add(sharedMutationObserver.observe(globalStylesheet, disposables, { childList: true })(() => {\n clone.textContent = globalStylesheet.textContent;\n }));\n globalStylesheetClones.add(clone);\n disposables.add(toDisposable(() => globalStylesheetClones.delete(clone)));\n return disposables;\n}\nexport const sharedMutationObserver = new class {\n constructor() {\n this.mutationObservers = new Map();\n }\n observe(target, disposables, options) {\n let mutationObserversPerTarget = this.mutationObservers.get(target);\n if (!mutationObserversPerTarget) {\n mutationObserversPerTarget = new Map();\n this.mutationObservers.set(target, mutationObserversPerTarget);\n }\n const optionsHash = hash(options);\n let mutationObserverPerOptions = mutationObserversPerTarget.get(optionsHash);\n if (!mutationObserverPerOptions) {\n const onDidMutate = new event.Emitter();\n const observer = new MutationObserver(mutations => onDidMutate.fire(mutations));\n observer.observe(target, options);\n const resolvedMutationObserverPerOptions = mutationObserverPerOptions = {\n users: 1,\n observer,\n onDidMutate: onDidMutate.event\n };\n disposables.add(toDisposable(() => {\n resolvedMutationObserverPerOptions.users -= 1;\n if (resolvedMutationObserverPerOptions.users === 0) {\n onDidMutate.dispose();\n observer.disconnect();\n mutationObserversPerTarget === null || mutationObserversPerTarget === void 0 ? void 0 : mutationObserversPerTarget.delete(optionsHash);\n if ((mutationObserversPerTarget === null || mutationObserversPerTarget === void 0 ? void 0 : mutationObserversPerTarget.size) === 0) {\n this.mutationObservers.delete(target);\n }\n }\n }));\n mutationObserversPerTarget.set(optionsHash, mutationObserverPerOptions);\n }\n else {\n mutationObserverPerOptions.users += 1;\n }\n return mutationObserverPerOptions.onDidMutate;\n }\n};\nlet _sharedStyleSheet = null;\nfunction getSharedStyleSheet() {\n if (!_sharedStyleSheet) {\n _sharedStyleSheet = createStyleSheet();\n }\n return _sharedStyleSheet;\n}\nfunction getDynamicStyleSheetRules(style) {\n var _a, _b;\n if ((_a = style === null || style === void 0 ? void 0 : style.sheet) === null || _a === void 0 ? void 0 : _a.rules) {\n // Chrome, IE\n return style.sheet.rules;\n }\n if ((_b = style === null || style === void 0 ? void 0 : style.sheet) === null || _b === void 0 ? void 0 : _b.cssRules) {\n // FF\n return style.sheet.cssRules;\n }\n return [];\n}\nexport function createCSSRule(selector, cssText, style = getSharedStyleSheet()) {\n var _a, _b;\n if (!style || !cssText) {\n return;\n }\n (_a = style.sheet) === null || _a === void 0 ? void 0 : _a.insertRule(`${selector} {${cssText}}`, 0);\n // Apply rule also to all cloned global stylesheets\n for (const clonedGlobalStylesheet of (_b = globalStylesheets.get(style)) !== null && _b !== void 0 ? _b : []) {\n createCSSRule(selector, cssText, clonedGlobalStylesheet);\n }\n}\nexport function removeCSSRulesContainingSelector(ruleName, style = getSharedStyleSheet()) {\n var _a, _b;\n if (!style) {\n return;\n }\n const rules = getDynamicStyleSheetRules(style);\n const toDelete = [];\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n if (isCSSStyleRule(rule) && rule.selectorText.indexOf(ruleName) !== -1) {\n toDelete.push(i);\n }\n }\n for (let i = toDelete.length - 1; i >= 0; i--) {\n (_a = style.sheet) === null || _a === void 0 ? void 0 : _a.deleteRule(toDelete[i]);\n }\n // Remove rules also from all cloned global stylesheets\n for (const clonedGlobalStylesheet of (_b = globalStylesheets.get(style)) !== null && _b !== void 0 ? _b : []) {\n removeCSSRulesContainingSelector(ruleName, clonedGlobalStylesheet);\n }\n}\nfunction isCSSStyleRule(rule) {\n return typeof rule.selectorText === 'string';\n}\nexport function isHTMLElement(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof HTMLElement || e instanceof getWindow(e).HTMLElement;\n}\nexport function isHTMLAnchorElement(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof HTMLAnchorElement || e instanceof getWindow(e).HTMLAnchorElement;\n}\nexport function isMouseEvent(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof MouseEvent || e instanceof getWindow(e).MouseEvent;\n}\nexport function isKeyboardEvent(e) {\n // eslint-disable-next-line no-restricted-syntax\n return e instanceof KeyboardEvent || e instanceof getWindow(e).KeyboardEvent;\n}\nexport const EventType = {\n // Mouse\n CLICK: 'click',\n AUXCLICK: 'auxclick',\n DBLCLICK: 'dblclick',\n MOUSE_UP: 'mouseup',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_MOVE: 'mousemove',\n MOUSE_OUT: 'mouseout',\n MOUSE_ENTER: 'mouseenter',\n MOUSE_LEAVE: 'mouseleave',\n MOUSE_WHEEL: 'wheel',\n POINTER_UP: 'pointerup',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n POINTER_LEAVE: 'pointerleave',\n CONTEXT_MENU: 'contextmenu',\n WHEEL: 'wheel',\n // Keyboard\n KEY_DOWN: 'keydown',\n KEY_PRESS: 'keypress',\n KEY_UP: 'keyup',\n // HTML Document\n LOAD: 'load',\n BEFORE_UNLOAD: 'beforeunload',\n UNLOAD: 'unload',\n PAGE_SHOW: 'pageshow',\n PAGE_HIDE: 'pagehide',\n PASTE: 'paste',\n ABORT: 'abort',\n ERROR: 'error',\n RESIZE: 'resize',\n SCROLL: 'scroll',\n FULLSCREEN_CHANGE: 'fullscreenchange',\n WK_FULLSCREEN_CHANGE: 'webkitfullscreenchange',\n // Form\n SELECT: 'select',\n CHANGE: 'change',\n SUBMIT: 'submit',\n RESET: 'reset',\n FOCUS: 'focus',\n FOCUS_IN: 'focusin',\n FOCUS_OUT: 'focusout',\n BLUR: 'blur',\n INPUT: 'input',\n // Local Storage\n STORAGE: 'storage',\n // Drag\n DRAG_START: 'dragstart',\n DRAG: 'drag',\n DRAG_ENTER: 'dragenter',\n DRAG_LEAVE: 'dragleave',\n DRAG_OVER: 'dragover',\n DROP: 'drop',\n DRAG_END: 'dragend',\n // Animation\n ANIMATION_START: browser.isWebKit ? 'webkitAnimationStart' : 'animationstart',\n ANIMATION_END: browser.isWebKit ? 'webkitAnimationEnd' : 'animationend',\n ANIMATION_ITERATION: browser.isWebKit ? 'webkitAnimationIteration' : 'animationiteration'\n};\nexport function isEventLike(obj) {\n const candidate = obj;\n return !!(candidate && typeof candidate.preventDefault === 'function' && typeof candidate.stopPropagation === 'function');\n}\nexport const EventHelper = {\n stop: (e, cancelBubble) => {\n e.preventDefault();\n if (cancelBubble) {\n e.stopPropagation();\n }\n return e;\n }\n};\nexport function saveParentsScrollTop(node) {\n const r = [];\n for (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\n r[i] = node.scrollTop;\n node = node.parentNode;\n }\n return r;\n}\nexport function restoreParentsScrollTop(node, state) {\n for (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\n if (node.scrollTop !== state[i]) {\n node.scrollTop = state[i];\n }\n node = node.parentNode;\n }\n}\nclass FocusTracker extends Disposable {\n static hasFocusWithin(element) {\n if (isHTMLElement(element)) {\n const shadowRoot = getShadowRoot(element);\n const activeElement = (shadowRoot ? shadowRoot.activeElement : element.ownerDocument.activeElement);\n return isAncestor(activeElement, element);\n }\n else {\n const window = element;\n return isAncestor(window.document.activeElement, window.document);\n }\n }\n constructor(element) {\n super();\n this._onDidFocus = this._register(new event.Emitter());\n this.onDidFocus = this._onDidFocus.event;\n this._onDidBlur = this._register(new event.Emitter());\n this.onDidBlur = this._onDidBlur.event;\n let hasFocus = FocusTracker.hasFocusWithin(element);\n let loosingFocus = false;\n const onFocus = () => {\n loosingFocus = false;\n if (!hasFocus) {\n hasFocus = true;\n this._onDidFocus.fire();\n }\n };\n const onBlur = () => {\n if (hasFocus) {\n loosingFocus = true;\n (isHTMLElement(element) ? getWindow(element) : element).setTimeout(() => {\n if (loosingFocus) {\n loosingFocus = false;\n hasFocus = false;\n this._onDidBlur.fire();\n }\n }, 0);\n }\n };\n this._refreshStateHandler = () => {\n const currentNodeHasFocus = FocusTracker.hasFocusWithin(element);\n if (currentNodeHasFocus !== hasFocus) {\n if (hasFocus) {\n onBlur();\n }\n else {\n onFocus();\n }\n }\n };\n this._register(addDisposableListener(element, EventType.FOCUS, onFocus, true));\n this._register(addDisposableListener(element, EventType.BLUR, onBlur, true));\n if (isHTMLElement(element)) {\n this._register(addDisposableListener(element, EventType.FOCUS_IN, () => this._refreshStateHandler()));\n this._register(addDisposableListener(element, EventType.FOCUS_OUT, () => this._refreshStateHandler()));\n }\n }\n}\n/**\n * Creates a new `IFocusTracker` instance that tracks focus changes on the given `element` and its descendants.\n *\n * @param element The `HTMLElement` or `Window` to track focus changes on.\n * @returns An `IFocusTracker` instance.\n */\nexport function trackFocus(element) {\n return new FocusTracker(element);\n}\nexport function after(sibling, child) {\n sibling.after(child);\n return child;\n}\nexport function append(parent, ...children) {\n parent.append(...children);\n if (children.length === 1 && typeof children[0] !== 'string') {\n return children[0];\n }\n}\nexport function prepend(parent, child) {\n parent.insertBefore(child, parent.firstChild);\n return child;\n}\n/**\n * Removes all children from `parent` and appends `children`\n */\nexport function reset(parent, ...children) {\n parent.innerText = '';\n append(parent, ...children);\n}\nconst SELECTOR_REGEX = /([\\w\\-]+)?(#([\\w\\-]+))?((\\.([\\w\\-]+))*)/;\nexport var Namespace;\n(function (Namespace) {\n Namespace[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n Namespace[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n})(Namespace || (Namespace = {}));\nfunction _$(namespace, description, attrs, ...children) {\n const match = SELECTOR_REGEX.exec(description);\n if (!match) {\n throw new Error('Bad use of emmet');\n }\n const tagName = match[1] || 'div';\n let result;\n if (namespace !== Namespace.HTML) {\n result = document.createElementNS(namespace, tagName);\n }\n else {\n result = document.createElement(tagName);\n }\n if (match[3]) {\n result.id = match[3];\n }\n if (match[4]) {\n result.className = match[4].replace(/\\./g, ' ').trim();\n }\n if (attrs) {\n Object.entries(attrs).forEach(([name, value]) => {\n if (typeof value === 'undefined') {\n return;\n }\n if (/^on\\w+$/.test(name)) {\n result[name] = value;\n }\n else if (name === 'selected') {\n if (value) {\n result.setAttribute(name, 'true');\n }\n }\n else {\n result.setAttribute(name, value);\n }\n });\n }\n result.append(...children);\n return result;\n}\nexport function $(description, attrs, ...children) {\n return _$(Namespace.HTML, description, attrs, ...children);\n}\n$.SVG = function (description, attrs, ...children) {\n return _$(Namespace.SVG, description, attrs, ...children);\n};\nexport function setVisibility(visible, ...elements) {\n if (visible) {\n show(...elements);\n }\n else {\n hide(...elements);\n }\n}\nexport function show(...elements) {\n for (const element of elements) {\n element.style.display = '';\n element.removeAttribute('aria-hidden');\n }\n}\nexport function hide(...elements) {\n for (const element of elements) {\n element.style.display = 'none';\n element.setAttribute('aria-hidden', 'true');\n }\n}\n/**\n * Find a value usable for a dom node size such that the likelihood that it would be\n * displayed with constant screen pixels size is as high as possible.\n *\n * e.g. We would desire for the cursors to be 2px (CSS px) wide. Under a devicePixelRatio\n * of 1.25, the cursor will be 2.5 screen pixels wide. Depending on how the dom node aligns/\"snaps\"\n * with the screen pixels, it will sometimes be rendered with 2 screen pixels, and sometimes with 3 screen pixels.\n */\nexport function computeScreenAwareSize(window, cssPx) {\n const screenPx = window.devicePixelRatio * cssPx;\n return Math.max(1, Math.floor(screenPx)) / window.devicePixelRatio;\n}\n/**\n * Open safely a new window. This is the best way to do so, but you cannot tell\n * if the window was opened or if it was blocked by the browser's popup blocker.\n * If you want to tell if the browser blocked the new window, use {@link windowOpenWithSuccess}.\n *\n * See https://github.com/microsoft/monaco-editor/issues/601\n * To protect against malicious code in the linked site, particularly phishing attempts,\n * the window.opener should be set to null to prevent the linked site from having access\n * to change the location of the current page.\n * See https://mathiasbynens.github.io/rel-noopener/\n */\nexport function windowOpenNoOpener(url) {\n // By using 'noopener' in the `windowFeatures` argument, the newly created window will\n // not be able to use `window.opener` to reach back to the current page.\n // See https://stackoverflow.com/a/46958731\n // See https://developer.mozilla.org/en-US/docs/Web/API/Window/open#noopener\n // However, this also doesn't allow us to realize if the browser blocked\n // the creation of the window.\n mainWindow.open(url, '_blank', 'noopener');\n}\nexport function animate(targetWindow, fn) {\n const step = () => {\n fn();\n stepDisposable = scheduleAtNextAnimationFrame(targetWindow, step);\n };\n let stepDisposable = scheduleAtNextAnimationFrame(targetWindow, step);\n return toDisposable(() => stepDisposable.dispose());\n}\nRemoteAuthorities.setPreferredWebSchema(/^https:/.test(mainWindow.location.href) ? 'https' : 'http');\n/**\n * returns url('...')\n */\nexport function asCSSUrl(uri) {\n if (!uri) {\n return `url('')`;\n }\n return `url('${FileAccess.uriToBrowserUri(uri).toString(true).replace(/'/g, '%27')}')`;\n}\nexport function asCSSPropertyValue(value) {\n return `'${value.replace(/'/g, '%27')}'`;\n}\nexport function asCssValueWithDefault(cssPropertyValue, dflt) {\n if (cssPropertyValue !== undefined) {\n const variableMatch = cssPropertyValue.match(/^\\s*var\\((.+)\\)$/);\n if (variableMatch) {\n const varArguments = variableMatch[1].split(',', 2);\n if (varArguments.length === 2) {\n dflt = asCssValueWithDefault(varArguments[1].trim(), dflt);\n }\n return `var(${varArguments[0]}, ${dflt})`;\n }\n return cssPropertyValue;\n }\n return dflt;\n}\n// -- sanitize and trusted html\n/**\n * Hooks dompurify using `afterSanitizeAttributes` to check that all `href` and `src`\n * attributes are valid.\n */\nexport function hookDomPurifyHrefAndSrcSanitizer(allowedProtocols, allowDataImages = false) {\n // https://github.com/cure53/DOMPurify/blob/main/demos/hooks-scheme-allowlist.html\n // build an anchor to map URLs to\n const anchor = document.createElement('a');\n dompurify.addHook('afterSanitizeAttributes', (node) => {\n // check all href/src attributes for validity\n for (const attr of ['href', 'src']) {\n if (node.hasAttribute(attr)) {\n const attrValue = node.getAttribute(attr);\n if (attr === 'href' && attrValue.startsWith('#')) {\n // Allow fragment links\n continue;\n }\n anchor.href = attrValue;\n if (!allowedProtocols.includes(anchor.protocol.replace(/:$/, ''))) {\n if (allowDataImages && attr === 'src' && anchor.href.startsWith('data:')) {\n continue;\n }\n node.removeAttribute(attr);\n }\n }\n }\n });\n return toDisposable(() => {\n dompurify.removeHook('afterSanitizeAttributes');\n });\n}\n/**\n * List of safe, non-input html tags.\n */\nexport const basicMarkupHtmlTags = Object.freeze([\n 'a',\n 'abbr',\n 'b',\n 'bdo',\n 'blockquote',\n 'br',\n 'caption',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'figcaption',\n 'figure',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hr',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'li',\n 'mark',\n 'ol',\n 'p',\n 'pre',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 'samp',\n 'small',\n 'small',\n 'source',\n 'span',\n 'strike',\n 'strong',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n]);\nconst defaultDomPurifyConfig = Object.freeze({\n ALLOWED_TAGS: ['a', 'button', 'blockquote', 'code', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'input', 'label', 'li', 'p', 'pre', 'select', 'small', 'span', 'strong', 'textarea', 'ul', 'ol'],\n ALLOWED_ATTR: ['href', 'data-href', 'data-command', 'target', 'title', 'name', 'src', 'alt', 'class', 'id', 'role', 'tabindex', 'style', 'data-code', 'width', 'height', 'align', 'x-dispatch', 'required', 'checked', 'placeholder', 'type', 'start'],\n RETURN_DOM: false,\n RETURN_DOM_FRAGMENT: false,\n RETURN_TRUSTED_TYPE: true\n});\nexport class ModifierKeyEmitter extends event.Emitter {\n constructor() {\n super();\n this._subscriptions = new DisposableStore();\n this._keyStatus = {\n altKey: false,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false\n };\n this._subscriptions.add(event.Event.runAndSubscribe(onDidRegisterWindow, ({ window, disposables }) => this.registerListeners(window, disposables), { window: mainWindow, disposables: this._subscriptions }));\n }\n registerListeners(window, disposables) {\n disposables.add(addDisposableListener(window, 'keydown', e => {\n if (e.defaultPrevented) {\n return;\n }\n const event = new StandardKeyboardEvent(e);\n // If Alt-key keydown event is repeated, ignore it #112347\n // Only known to be necessary for Alt-Key at the moment #115810\n if (event.keyCode === 6 /* KeyCode.Alt */ && e.repeat) {\n return;\n }\n if (e.altKey && !this._keyStatus.altKey) {\n this._keyStatus.lastKeyPressed = 'alt';\n }\n else if (e.ctrlKey && !this._keyStatus.ctrlKey) {\n this._keyStatus.lastKeyPressed = 'ctrl';\n }\n else if (e.metaKey && !this._keyStatus.metaKey) {\n this._keyStatus.lastKeyPressed = 'meta';\n }\n else if (e.shiftKey && !this._keyStatus.shiftKey) {\n this._keyStatus.lastKeyPressed = 'shift';\n }\n else if (event.keyCode !== 6 /* KeyCode.Alt */) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n else {\n return;\n }\n this._keyStatus.altKey = e.altKey;\n this._keyStatus.ctrlKey = e.ctrlKey;\n this._keyStatus.metaKey = e.metaKey;\n this._keyStatus.shiftKey = e.shiftKey;\n if (this._keyStatus.lastKeyPressed) {\n this._keyStatus.event = e;\n this.fire(this._keyStatus);\n }\n }, true));\n disposables.add(addDisposableListener(window, 'keyup', e => {\n if (e.defaultPrevented) {\n return;\n }\n if (!e.altKey && this._keyStatus.altKey) {\n this._keyStatus.lastKeyReleased = 'alt';\n }\n else if (!e.ctrlKey && this._keyStatus.ctrlKey) {\n this._keyStatus.lastKeyReleased = 'ctrl';\n }\n else if (!e.metaKey && this._keyStatus.metaKey) {\n this._keyStatus.lastKeyReleased = 'meta';\n }\n else if (!e.shiftKey && this._keyStatus.shiftKey) {\n this._keyStatus.lastKeyReleased = 'shift';\n }\n else {\n this._keyStatus.lastKeyReleased = undefined;\n }\n if (this._keyStatus.lastKeyPressed !== this._keyStatus.lastKeyReleased) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n this._keyStatus.altKey = e.altKey;\n this._keyStatus.ctrlKey = e.ctrlKey;\n this._keyStatus.metaKey = e.metaKey;\n this._keyStatus.shiftKey = e.shiftKey;\n if (this._keyStatus.lastKeyReleased) {\n this._keyStatus.event = e;\n this.fire(this._keyStatus);\n }\n }, true));\n disposables.add(addDisposableListener(window.document.body, 'mousedown', () => {\n this._keyStatus.lastKeyPressed = undefined;\n }, true));\n disposables.add(addDisposableListener(window.document.body, 'mouseup', () => {\n this._keyStatus.lastKeyPressed = undefined;\n }, true));\n disposables.add(addDisposableListener(window.document.body, 'mousemove', e => {\n if (e.buttons) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n }, true));\n disposables.add(addDisposableListener(window, 'blur', () => {\n this.resetKeyStatus();\n }));\n }\n get keyStatus() {\n return this._keyStatus;\n }\n /**\n * Allows to explicitly reset the key status based on more knowledge (#109062)\n */\n resetKeyStatus() {\n this.doResetKeyStatus();\n this.fire(this._keyStatus);\n }\n doResetKeyStatus() {\n this._keyStatus = {\n altKey: false,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false\n };\n }\n static getInstance() {\n if (!ModifierKeyEmitter.instance) {\n ModifierKeyEmitter.instance = new ModifierKeyEmitter();\n }\n return ModifierKeyEmitter.instance;\n }\n dispose() {\n super.dispose();\n this._subscriptions.dispose();\n }\n}\nexport class DragAndDropObserver extends Disposable {\n constructor(element, callbacks) {\n super();\n this.element = element;\n this.callbacks = callbacks;\n // A helper to fix issues with repeated DRAG_ENTER / DRAG_LEAVE\n // calls see https://github.com/microsoft/vscode/issues/14470\n // when the element has child elements where the events are fired\n // repeadedly.\n this.counter = 0;\n // Allows to measure the duration of the drag operation.\n this.dragStartTime = 0;\n this.registerListeners();\n }\n registerListeners() {\n if (this.callbacks.onDragStart) {\n this._register(addDisposableListener(this.element, EventType.DRAG_START, (e) => {\n var _a, _b;\n (_b = (_a = this.callbacks).onDragStart) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n }));\n }\n if (this.callbacks.onDrag) {\n this._register(addDisposableListener(this.element, EventType.DRAG, (e) => {\n var _a, _b;\n (_b = (_a = this.callbacks).onDrag) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n }));\n }\n this._register(addDisposableListener(this.element, EventType.DRAG_ENTER, (e) => {\n var _a, _b;\n this.counter++;\n this.dragStartTime = e.timeStamp;\n (_b = (_a = this.callbacks).onDragEnter) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n }));\n this._register(addDisposableListener(this.element, EventType.DRAG_OVER, (e) => {\n var _a, _b;\n e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)\n (_b = (_a = this.callbacks).onDragOver) === null || _b === void 0 ? void 0 : _b.call(_a, e, e.timeStamp - this.dragStartTime);\n }));\n this._register(addDisposableListener(this.element, EventType.DRAG_LEAVE, (e) => {\n var _a, _b;\n this.counter--;\n if (this.counter === 0) {\n this.dragStartTime = 0;\n (_b = (_a = this.callbacks).onDragLeave) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n }\n }));\n this._register(addDisposableListener(this.element, EventType.DRAG_END, (e) => {\n var _a, _b;\n this.counter = 0;\n this.dragStartTime = 0;\n (_b = (_a = this.callbacks).onDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n }));\n this._register(addDisposableListener(this.element, EventType.DROP, (e) => {\n var _a, _b;\n this.counter = 0;\n this.dragStartTime = 0;\n (_b = (_a = this.callbacks).onDrop) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n }));\n }\n}\nconst H_REGEX = /(?[\\w\\-]+)?(?:#(?[\\w\\-]+))?(?(?:\\.(?:[\\w\\-]+))*)(?:@(?(?:[\\w\\_])+))?/;\nexport function h(tag, ...args) {\n let attributes;\n let children;\n if (Array.isArray(args[0])) {\n attributes = {};\n children = args[0];\n }\n else {\n attributes = args[0] || {};\n children = args[1];\n }\n const match = H_REGEX.exec(tag);\n if (!match || !match.groups) {\n throw new Error('Bad use of h');\n }\n const tagName = match.groups['tag'] || 'div';\n const el = document.createElement(tagName);\n if (match.groups['id']) {\n el.id = match.groups['id'];\n }\n const classNames = [];\n if (match.groups['class']) {\n for (const className of match.groups['class'].split('.')) {\n if (className !== '') {\n classNames.push(className);\n }\n }\n }\n if (attributes.className !== undefined) {\n for (const className of attributes.className.split('.')) {\n if (className !== '') {\n classNames.push(className);\n }\n }\n }\n if (classNames.length > 0) {\n el.className = classNames.join(' ');\n }\n const result = {};\n if (match.groups['name']) {\n result[match.groups['name']] = el;\n }\n if (children) {\n for (const c of children) {\n if (isHTMLElement(c)) {\n el.appendChild(c);\n }\n else if (typeof c === 'string') {\n el.append(c);\n }\n else if ('root' in c) {\n Object.assign(result, c);\n el.appendChild(c.root);\n }\n }\n }\n for (const [key, value] of Object.entries(attributes)) {\n if (key === 'className') {\n continue;\n }\n else if (key === 'style') {\n for (const [cssKey, cssValue] of Object.entries(value)) {\n el.style.setProperty(camelCaseToHyphenCase(cssKey), typeof cssValue === 'number' ? cssValue + 'px' : '' + cssValue);\n }\n }\n else if (key === 'tabIndex') {\n el.tabIndex = value;\n }\n else {\n el.setAttribute(camelCaseToHyphenCase(key), value.toString());\n }\n }\n result['root'] = el;\n return result;\n}\nfunction camelCaseToHyphenCase(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n","/*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE */\n\nconst {\n\tentries,\n\tsetPrototypeOf,\n\tisFrozen,\n\tgetPrototypeOf,\n\tgetOwnPropertyDescriptor\n} = Object;\nlet {\n\tfreeze,\n\tseal,\n\tcreate\n} = Object; // eslint-disable-line import/no-mutable-exports\n\nlet {\n\tapply,\n\tconstruct\n} = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n\tapply = function apply(fun, thisValue, args) {\n\t\treturn fun.apply(thisValue, args);\n\t};\n}\n\nif (!freeze) {\n\tfreeze = function freeze(x) {\n\t\treturn x;\n\t};\n}\n\nif (!seal) {\n\tseal = function seal(x) {\n\t\treturn x;\n\t};\n}\n\nif (!construct) {\n\tconstruct = function construct(Func, args) {\n\t\treturn new Func(...args);\n\t};\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\nfunction unapply(func) {\n\treturn function (thisArg) {\n\t\tfor (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\t\targs[_key - 1] = arguments[_key];\n\t\t}\n\n\t\treturn apply(func, thisArg, args);\n\t};\n}\nfunction unconstruct(func) {\n\treturn function () {\n\t\tfor (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t\t\targs[_key2] = arguments[_key2];\n\t\t}\n\n\t\treturn construct(func, args);\n\t};\n}\n/* Add properties to a lookup table */\n\nfunction addToSet(set, array, transformCaseFunc) {\n\tvar _transformCaseFunc;\n\n\ttransformCaseFunc = (_transformCaseFunc = transformCaseFunc) !== null && _transformCaseFunc !== void 0 ? _transformCaseFunc : stringToLowerCase;\n\n\tif (setPrototypeOf) {\n\t\t// Make 'in' and truthy checks like Boolean(set.constructor)\n\t\t// independent of any properties defined on Object.prototype.\n\t\t// Prevent prototype setters from intercepting set as a this value.\n\t\tsetPrototypeOf(set, null);\n\t}\n\n\tlet l = array.length;\n\n\twhile (l--) {\n\t\tlet element = array[l];\n\n\t\tif (typeof element === 'string') {\n\t\t\tconst lcElement = transformCaseFunc(element);\n\n\t\t\tif (lcElement !== element) {\n\t\t\t\t// Config presets (e.g. tags.js, attrs.js) are immutable.\n\t\t\t\tif (!isFrozen(array)) {\n\t\t\t\t\tarray[l] = lcElement;\n\t\t\t\t}\n\n\t\t\t\telement = lcElement;\n\t\t\t}\n\t\t}\n\n\t\tset[element] = true;\n\t}\n\n\treturn set;\n}\n/* Shallow clone an object */\n\nfunction clone(object) {\n\tconst newObject = create(null);\n\n\tfor (const [property, value] of entries(object)) {\n\t\tnewObject[property] = value;\n\t}\n\n\treturn newObject;\n}\n/* This method automatically checks if the prop is function\n * or getter and behaves accordingly. */\n\nfunction lookupGetter(object, prop) {\n\twhile (object !== null) {\n\t\tconst desc = getOwnPropertyDescriptor(object, prop);\n\n\t\tif (desc) {\n\t\t\tif (desc.get) {\n\t\t\t\treturn unapply(desc.get);\n\t\t\t}\n\n\t\t\tif (typeof desc.value === 'function') {\n\t\t\t\treturn unapply(desc.value);\n\t\t\t}\n\t\t}\n\n\t\tobject = getPrototypeOf(object);\n\t}\n\n\tfunction fallbackValue(element) {\n\t\tconsole.warn('fallback value for', element);\n\t\treturn null;\n\t}\n\n\treturn fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']); // SVG\n\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']); // List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\n\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']); // Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\n\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tMUSTACHE_EXPR: MUSTACHE_EXPR,\n\tERB_EXPR: ERB_EXPR,\n\tTMPLIT_EXPR: TMPLIT_EXPR,\n\tDATA_ATTR: DATA_ATTR,\n\tARIA_ATTR: ARIA_ATTR,\n\tIS_ALLOWED_URI: IS_ALLOWED_URI,\n\tIS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n\tATTR_WHITESPACE: ATTR_WHITESPACE,\n\tDOCTYPE_NAME: DOCTYPE_NAME\n});\n\nconst getGlobal = () => typeof window === 'undefined' ? null : window;\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\n\n\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n\tif (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n\t\treturn null;\n\t} // Allow the callers to control the unique policy name\n\t// by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n\t// Policy creation with duplicate names throws in Trusted Types.\n\n\n\tlet suffix = null;\n\tconst ATTR_NAME = 'data-tt-policy-suffix';\n\n\tif (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n\t\tsuffix = purifyHostElement.getAttribute(ATTR_NAME);\n\t}\n\n\tconst policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n\ttry {\n\t\treturn trustedTypes.createPolicy(policyName, {\n\t\t\tcreateHTML(html) {\n\t\t\t\treturn html;\n\t\t\t},\n\n\t\t\tcreateScriptURL(scriptUrl) {\n\t\t\t\treturn scriptUrl;\n\t\t\t}\n\n\t\t});\n\t} catch (_) {\n\t\t// Policy creation failed (most likely another DOMPurify script has\n\t\t// already run). Skip creating the policy, as this will only cause errors\n\t\t// if TT are enforced.\n\t\tconsole.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n\t\treturn null;\n\t}\n};\n\nfunction createDOMPurify() {\n\tlet window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n\tconst DOMPurify = root => createDOMPurify(root);\n\t/**\n\t * Version label, exposed for easier checks\n\t * if DOMPurify is up to date or not\n\t */\n\n\n\tDOMPurify.version = '3.0.5';\n\t/**\n\t * Array of elements that DOMPurify removed during sanitation.\n\t * Empty if nothing was removed.\n\t */\n\n\tDOMPurify.removed = [];\n\n\tif (!window || !window.document || window.document.nodeType !== 9) {\n\t\t// Not running in a browser, provide a factory function\n\t\t// so that you can pass your own Window\n\t\tDOMPurify.isSupported = false;\n\t\treturn DOMPurify;\n\t}\n\n\tconst originalDocument = window.document;\n\tconst currentScript = originalDocument.currentScript;\n\tlet {\n\t\tdocument\n\t} = window;\n\tconst {\n\t\tDocumentFragment,\n\t\tHTMLTemplateElement,\n\t\tNode,\n\t\tElement,\n\t\tNodeFilter,\n\t\tNamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n\t\tHTMLFormElement,\n\t\tDOMParser,\n\t\ttrustedTypes\n\t} = window;\n\tconst ElementPrototype = Element.prototype;\n\tconst cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n\tconst getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n\tconst getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n\tconst getParentNode = lookupGetter(ElementPrototype, 'parentNode'); // As per issue #47, the web-components registry is inherited by a\n\t// new document created via createHTMLDocument. As per the spec\n\t// (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n\t// a new empty registry is used when creating a template contents owner\n\t// document, so we use that as our parent document to ensure nothing\n\t// is inherited.\n\n\tif (typeof HTMLTemplateElement === 'function') {\n\t\tconst template = document.createElement('template');\n\n\t\tif (template.content && template.content.ownerDocument) {\n\t\t\tdocument = template.content.ownerDocument;\n\t\t}\n\t}\n\n\tlet trustedTypesPolicy;\n\tlet emptyHTML = '';\n\tconst {\n\t\timplementation,\n\t\tcreateNodeIterator,\n\t\tcreateDocumentFragment,\n\t\tgetElementsByTagName\n\t} = document;\n\tconst {\n\t\timportNode\n\t} = originalDocument;\n\tlet hooks = {};\n\t/**\n\t * Expose whether this browser supports running the full DOMPurify.\n\t */\n\n\tDOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n\tconst {\n\t\tMUSTACHE_EXPR,\n\t\tERB_EXPR,\n\t\tTMPLIT_EXPR,\n\t\tDATA_ATTR,\n\t\tARIA_ATTR,\n\t\tIS_SCRIPT_OR_DATA,\n\t\tATTR_WHITESPACE\n\t} = EXPRESSIONS;\n\tlet {\n\t\tIS_ALLOWED_URI: IS_ALLOWED_URI$1\n\t} = EXPRESSIONS;\n\t/**\n\t * We consider the elements and attributes below to be safe. Ideally\n\t * don't add any new ones but feel free to remove unwanted ones.\n\t */\n\n\t/* allowed element names */\n\n\tlet ALLOWED_TAGS = null;\n\tconst DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n\t/* Allowed attribute names */\n\n\tlet ALLOWED_ATTR = null;\n\tconst DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n\t/*\n\t * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n\t * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n\t * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n\t * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n\t */\n\n\tlet CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n\t\ttagNameCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tattributeNameCheck: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: null\n\t\t},\n\t\tallowCustomizedBuiltInElements: {\n\t\t\twritable: true,\n\t\t\tconfigurable: false,\n\t\t\tenumerable: true,\n\t\t\tvalue: false\n\t\t}\n\t}));\n\t/* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n\n\tlet FORBID_TAGS = null;\n\t/* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n\n\tlet FORBID_ATTR = null;\n\t/* Decide if ARIA attributes are okay */\n\n\tlet ALLOW_ARIA_ATTR = true;\n\t/* Decide if custom data attributes are okay */\n\n\tlet ALLOW_DATA_ATTR = true;\n\t/* Decide if unknown protocols are okay */\n\n\tlet ALLOW_UNKNOWN_PROTOCOLS = false;\n\t/* Decide if self-closing tags in attributes are allowed.\n\t * Usually removed due to a mXSS issue in jQuery 3.0 */\n\n\tlet ALLOW_SELF_CLOSE_IN_ATTR = true;\n\t/* Output should be safe for common template engines.\n\t * This means, DOMPurify removes data attributes, mustaches and ERB\n\t */\n\n\tlet SAFE_FOR_TEMPLATES = false;\n\t/* Decide if document with ... should be returned */\n\n\tlet WHOLE_DOCUMENT = false;\n\t/* Track whether config is already set on this instance of DOMPurify. */\n\n\tlet SET_CONFIG = false;\n\t/* Decide if all elements (e.g. style, script) must be children of\n\t * document.body. By default, browsers might move them to document.head */\n\n\tlet FORCE_BODY = false;\n\t/* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n\t * string (or a TrustedHTML object if Trusted Types are supported).\n\t * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n\t */\n\n\tlet RETURN_DOM = false;\n\t/* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n\t * string (or a TrustedHTML object if Trusted Types are supported) */\n\n\tlet RETURN_DOM_FRAGMENT = false;\n\t/* Try to return a Trusted Type object instead of a string, return a string in\n\t * case Trusted Types are not supported */\n\n\tlet RETURN_TRUSTED_TYPE = false;\n\t/* Output should be free from DOM clobbering attacks?\n\t * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n\t */\n\n\tlet SANITIZE_DOM = true;\n\t/* Achieve full DOM Clobbering protection by isolating the namespace of named\n\t * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n\t *\n\t * HTML/DOM spec rules that enable DOM Clobbering:\n\t * - Named Access on Window (§7.3.3)\n\t * - DOM Tree Accessors (§3.1.5)\n\t * - Form Element Parent-Child Relations (§4.10.3)\n\t * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n\t * - HTMLCollection (§4.2.10.2)\n\t *\n\t * Namespace isolation is implemented by prefixing `id` and `name` attributes\n\t * with a constant string, i.e., `user-content-`\n\t */\n\n\tlet SANITIZE_NAMED_PROPS = false;\n\tconst SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\t/* Keep element content when removing element? */\n\n\tlet KEEP_CONTENT = true;\n\t/* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n\t * of importing it into a new Document and returning a sanitized copy */\n\n\tlet IN_PLACE = false;\n\t/* Allow usage of profiles like html, svg and mathMl */\n\n\tlet USE_PROFILES = {};\n\t/* Tags to ignore content of when KEEP_CONTENT is true */\n\n\tlet FORBID_CONTENTS = null;\n\tconst DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\t/* Tags that are safe for data: URIs */\n\n\tlet DATA_URI_TAGS = null;\n\tconst DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\t/* Attributes safe for values like \"javascript:\" */\n\n\tlet URI_SAFE_ATTRIBUTES = null;\n\tconst DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n\tconst MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n\tconst SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n\tconst HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n\t/* Document namespace */\n\n\tlet NAMESPACE = HTML_NAMESPACE;\n\tlet IS_EMPTY_INPUT = false;\n\t/* Allowed XHTML+XML namespaces */\n\n\tlet ALLOWED_NAMESPACES = null;\n\tconst DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\t/* Parsing of strict XHTML documents */\n\n\tlet PARSER_MEDIA_TYPE;\n\tconst SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n\tconst DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n\tlet transformCaseFunc;\n\t/* Keep a reference to config to pass to hooks */\n\n\tlet CONFIG = null;\n\t/* Ideally, do not touch anything below this line */\n\n\t/* ______________________________________________ */\n\n\tconst formElement = document.createElement('form');\n\n\tconst isRegexOrFunction = function isRegexOrFunction(testValue) {\n\t\treturn testValue instanceof RegExp || testValue instanceof Function;\n\t};\n\t/**\n\t * _parseConfig\n\t *\n\t * @param {Object} cfg optional config literal\n\t */\n\t// eslint-disable-next-line complexity\n\n\n\tconst _parseConfig = function _parseConfig(cfg) {\n\t\tif (CONFIG && CONFIG === cfg) {\n\t\t\treturn;\n\t\t}\n\t\t/* Shield configuration object from tampering */\n\n\n\t\tif (!cfg || typeof cfg !== 'object') {\n\t\t\tcfg = {};\n\t\t}\n\t\t/* Shield configuration object from prototype pollution */\n\n\n\t\tcfg = clone(cfg);\n\t\tPARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes\n\t\t\tSUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE; // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n\n\t\ttransformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n\t\t/* Set configuration parameters */\n\n\t\tALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n\t\tALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n\t\tALLOWED_NAMESPACES = 'ALLOWED_NAMESPACES' in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n\t\tURI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n\t\t\tcfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n\t\t\ttransformCaseFunc // eslint-disable-line indent\n\t\t) // eslint-disable-line indent\n\t\t\t: DEFAULT_URI_SAFE_ATTRIBUTES;\n\t\tDATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n\t\t\tcfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n\t\t\ttransformCaseFunc // eslint-disable-line indent\n\t\t) // eslint-disable-line indent\n\t\t\t: DEFAULT_DATA_URI_TAGS;\n\t\tFORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n\t\tFORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n\t\tFORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n\t\tUSE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n\t\tALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n\n\t\tALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n\n\t\tALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n\n\t\tALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n\n\t\tSAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n\n\t\tWHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n\n\t\tRETURN_DOM = cfg.RETURN_DOM || false; // Default false\n\n\t\tRETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n\n\t\tRETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n\n\t\tFORCE_BODY = cfg.FORCE_BODY || false; // Default false\n\n\t\tSANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n\n\t\tSANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n\n\t\tKEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n\n\t\tIN_PLACE = cfg.IN_PLACE || false; // Default false\n\n\t\tIS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n\t\tNAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n\t\tCUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n\n\t\tif (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n\t\t\tCUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n\t\t}\n\n\t\tif (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n\t\t\tCUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n\t\t}\n\n\t\tif (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n\t\t\tCUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n\t\t}\n\n\t\tif (SAFE_FOR_TEMPLATES) {\n\t\t\tALLOW_DATA_ATTR = false;\n\t\t}\n\n\t\tif (RETURN_DOM_FRAGMENT) {\n\t\t\tRETURN_DOM = true;\n\t\t}\n\t\t/* Parse profile info */\n\n\n\t\tif (USE_PROFILES) {\n\t\t\tALLOWED_TAGS = addToSet({}, [...text]);\n\t\t\tALLOWED_ATTR = [];\n\n\t\t\tif (USE_PROFILES.html === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, html$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, html);\n\t\t\t}\n\n\t\t\tif (USE_PROFILES.svg === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, svg$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, svg);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\n\t\t\tif (USE_PROFILES.svgFilters === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, svgFilters);\n\t\t\t\taddToSet(ALLOWED_ATTR, svg);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\n\t\t\tif (USE_PROFILES.mathMl === true) {\n\t\t\t\taddToSet(ALLOWED_TAGS, mathMl$1);\n\t\t\t\taddToSet(ALLOWED_ATTR, mathMl);\n\t\t\t\taddToSet(ALLOWED_ATTR, xml);\n\t\t\t}\n\t\t}\n\t\t/* Merge configuration parameters */\n\n\n\t\tif (cfg.ADD_TAGS) {\n\t\t\tif (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n\t\t\t\tALLOWED_TAGS = clone(ALLOWED_TAGS);\n\t\t\t}\n\n\t\t\taddToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n\t\t}\n\n\t\tif (cfg.ADD_ATTR) {\n\t\t\tif (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n\t\t\t\tALLOWED_ATTR = clone(ALLOWED_ATTR);\n\t\t\t}\n\n\t\t\taddToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n\t\t}\n\n\t\tif (cfg.ADD_URI_SAFE_ATTR) {\n\t\t\taddToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n\t\t}\n\n\t\tif (cfg.FORBID_CONTENTS) {\n\t\t\tif (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n\t\t\t\tFORBID_CONTENTS = clone(FORBID_CONTENTS);\n\t\t\t}\n\n\t\t\taddToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n\t\t}\n\t\t/* Add #text in case KEEP_CONTENT is set to true */\n\n\n\t\tif (KEEP_CONTENT) {\n\t\t\tALLOWED_TAGS['#text'] = true;\n\t\t}\n\t\t/* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n\n\n\t\tif (WHOLE_DOCUMENT) {\n\t\t\taddToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n\t\t}\n\t\t/* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n\n\n\t\tif (ALLOWED_TAGS.table) {\n\t\t\taddToSet(ALLOWED_TAGS, ['tbody']);\n\t\t\tdelete FORBID_TAGS.tbody;\n\t\t}\n\n\t\tif (cfg.TRUSTED_TYPES_POLICY) {\n\t\t\tif (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n\t\t\t\tthrow typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n\t\t\t}\n\n\t\t\tif (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n\t\t\t\tthrow typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n\t\t\t} // Overwrite existing TrustedTypes policy.\n\n\n\t\t\ttrustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY; // Sign local variables required by `sanitize`.\n\n\t\t\temptyHTML = trustedTypesPolicy.createHTML('');\n\t\t} else {\n\t\t\t// Uninitialized policy, attempt to initialize the internal dompurify policy.\n\t\t\tif (trustedTypesPolicy === undefined) {\n\t\t\t\ttrustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n\t\t\t} // If creating the internal policy succeeded sign internal variables.\n\n\n\t\t\tif (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n\t\t\t\temptyHTML = trustedTypesPolicy.createHTML('');\n\t\t\t}\n\t\t} // Prevent further manipulation of configuration.\n\t\t// Not available in IE8, Safari 5, etc.\n\n\n\t\tif (freeze) {\n\t\t\tfreeze(cfg);\n\t\t}\n\n\t\tCONFIG = cfg;\n\t};\n\n\tconst MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n\tconst HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']); // Certain elements are allowed in both SVG and HTML\n\t// namespace. We need to specify them explicitly\n\t// so that they don't get erroneously deleted from\n\t// HTML namespace.\n\n\tconst COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\t/* Keep track of all possible SVG and MathML tags\n\t * so that we can perform the namespace checks\n\t * correctly. */\n\n\tconst ALL_SVG_TAGS = addToSet({}, svg$1);\n\taddToSet(ALL_SVG_TAGS, svgFilters);\n\taddToSet(ALL_SVG_TAGS, svgDisallowed);\n\tconst ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n\taddToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n\t/**\n\t *\n\t *\n\t * @param {Element} element a DOM element whose namespace is being checked\n\t * @returns {boolean} Return false if the element has a\n\t * namespace that a spec-compliant parser would never\n\t * return. Return true otherwise.\n\t */\n\n\tconst _checkValidNamespace = function _checkValidNamespace(element) {\n\t\tlet parent = getParentNode(element); // In JSDOM, if we're inside shadow DOM, then parentNode\n\t\t// can be null. We just simulate parent in this case.\n\n\t\tif (!parent || !parent.tagName) {\n\t\t\tparent = {\n\t\t\t\tnamespaceURI: NAMESPACE,\n\t\t\t\ttagName: 'template'\n\t\t\t};\n\t\t}\n\n\t\tconst tagName = stringToLowerCase(element.tagName);\n\t\tconst parentTagName = stringToLowerCase(parent.tagName);\n\n\t\tif (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (element.namespaceURI === SVG_NAMESPACE) {\n\t\t\t// The only way to switch from HTML namespace to SVG\n\t\t\t// is via . If it happens via any other tag, then\n\t\t\t// it should be killed.\n\t\t\tif (parent.namespaceURI === HTML_NAMESPACE) {\n\t\t\t\treturn tagName === 'svg';\n\t\t\t} // The only way to switch from MathML to SVG is via`\n\t\t\t// svg if parent is either or MathML\n\t\t\t// text integration points.\n\n\n\t\t\tif (parent.namespaceURI === MATHML_NAMESPACE) {\n\t\t\t\treturn tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n\t\t\t} // We only allow elements that are defined in SVG\n\t\t\t// spec. All others are disallowed in SVG namespace.\n\n\n\t\t\treturn Boolean(ALL_SVG_TAGS[tagName]);\n\t\t}\n\n\t\tif (element.namespaceURI === MATHML_NAMESPACE) {\n\t\t\t// The only way to switch from HTML namespace to MathML\n\t\t\t// is via . If it happens via any other tag, then\n\t\t\t// it should be killed.\n\t\t\tif (parent.namespaceURI === HTML_NAMESPACE) {\n\t\t\t\treturn tagName === 'math';\n\t\t\t} // The only way to switch from SVG to MathML is via\n\t\t\t// and HTML integration points\n\n\n\t\t\tif (parent.namespaceURI === SVG_NAMESPACE) {\n\t\t\t\treturn tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n\t\t\t} // We only allow elements that are defined in MathML\n\t\t\t// spec. All others are disallowed in MathML namespace.\n\n\n\t\t\treturn Boolean(ALL_MATHML_TAGS[tagName]);\n\t\t}\n\n\t\tif (element.namespaceURI === HTML_NAMESPACE) {\n\t\t\t// The only way to switch from SVG to HTML is via\n\t\t\t// HTML integration points, and from MathML to HTML\n\t\t\t// is via MathML text integration points\n\t\t\tif (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n\t\t\t\treturn false;\n\t\t\t} // We disallow tags that are specific for MathML\n\t\t\t// or SVG and should never appear in HTML namespace\n\n\n\t\t\treturn !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n\t\t} // For XHTML and XML documents that support custom namespaces\n\n\n\t\tif (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n\t\t\treturn true;\n\t\t} // The code should never reach this place (this means\n\t\t// that the element somehow got namespace that is not\n\t\t// HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n\t\t// Return false just in case.\n\n\n\t\treturn false;\n\t};\n\t/**\n\t * _forceRemove\n\t *\n\t * @param {Node} node a DOM node\n\t */\n\n\n\tconst _forceRemove = function _forceRemove(node) {\n\t\tarrayPush(DOMPurify.removed, {\n\t\t\telement: node\n\t\t});\n\n\t\ttry {\n\t\t\t// eslint-disable-next-line unicorn/prefer-dom-node-remove\n\t\t\tnode.parentNode.removeChild(node);\n\t\t} catch (_) {\n\t\t\tnode.remove();\n\t\t}\n\t};\n\t/**\n\t * _removeAttribute\n\t *\n\t * @param {String} name an Attribute name\n\t * @param {Node} node a DOM node\n\t */\n\n\n\tconst _removeAttribute = function _removeAttribute(name, node) {\n\t\ttry {\n\t\t\tarrayPush(DOMPurify.removed, {\n\t\t\t\tattribute: node.getAttributeNode(name),\n\t\t\t\tfrom: node\n\t\t\t});\n\t\t} catch (_) {\n\t\t\tarrayPush(DOMPurify.removed, {\n\t\t\t\tattribute: null,\n\t\t\t\tfrom: node\n\t\t\t});\n\t\t}\n\n\t\tnode.removeAttribute(name); // We void attribute values for unremovable \"is\"\" attributes\n\n\t\tif (name === 'is' && !ALLOWED_ATTR[name]) {\n\t\t\tif (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n\t\t\t\ttry {\n\t\t\t\t\t_forceRemove(node);\n\t\t\t\t} catch (_) { }\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tnode.setAttribute(name, '');\n\t\t\t\t} catch (_) { }\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t * _initDocument\n\t *\n\t * @param {String} dirty a string of dirty markup\n\t * @return {Document} a DOM, filled with the dirty markup\n\t */\n\n\n\tconst _initDocument = function _initDocument(dirty) {\n\t\t/* Create a HTML document */\n\t\tlet doc;\n\t\tlet leadingWhitespace;\n\n\t\tif (FORCE_BODY) {\n\t\t\tdirty = '' + dirty;\n\t\t} else {\n\t\t\t/* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n\t\t\tconst matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n\t\t\tleadingWhitespace = matches && matches[0];\n\t\t}\n\n\t\tif (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n\t\t\t// Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n\t\t\tdirty = '' + dirty + '';\n\t\t}\n\n\t\tconst dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n\t\t/*\n\t\t * Use the DOMParser API by default, fallback later if needs be\n\t\t * DOMParser not work for svg when has multiple root element.\n\t\t */\n\n\t\tif (NAMESPACE === HTML_NAMESPACE) {\n\t\t\ttry {\n\t\t\t\tdoc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n\t\t\t} catch (_) { }\n\t\t}\n\t\t/* Use createHTMLDocument in case DOMParser is not available */\n\n\n\t\tif (!doc || !doc.documentElement) {\n\t\t\tdoc = implementation.createDocument(NAMESPACE, 'template', null);\n\n\t\t\ttry {\n\t\t\t\tdoc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n\t\t\t} catch (_) {// Syntax error if dirtyPayload is invalid xml\n\t\t\t}\n\t\t}\n\n\t\tconst body = doc.body || doc.documentElement;\n\n\t\tif (dirty && leadingWhitespace) {\n\t\t\tbody.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n\t\t}\n\t\t/* Work on whole document or just its body */\n\n\n\t\tif (NAMESPACE === HTML_NAMESPACE) {\n\t\t\treturn getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n\t\t}\n\n\t\treturn WHOLE_DOCUMENT ? doc.documentElement : body;\n\t};\n\t/**\n\t * _createIterator\n\t *\n\t * @param {Document} root document/fragment to create iterator for\n\t * @return {Iterator} iterator instance\n\t */\n\n\n\tconst _createIterator = function _createIterator(root) {\n\t\treturn createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise\n\t\t\tNodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n\t};\n\t/**\n\t * _isClobbered\n\t *\n\t * @param {Node} elm element to check for clobbering attacks\n\t * @return {Boolean} true if clobbered, false if safe\n\t */\n\n\n\tconst _isClobbered = function _isClobbered(elm) {\n\t\treturn elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n\t};\n\t/**\n\t * _isNode\n\t *\n\t * @param {Node} obj object to check whether it's a DOM node\n\t * @return {Boolean} true is object is a DOM node\n\t */\n\n\n\tconst _isNode = function _isNode(object) {\n\t\treturn typeof Node === 'object' ? object instanceof Node : object && typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n\t};\n\t/**\n\t * _executeHook\n\t * Execute user configurable hooks\n\t *\n\t * @param {String} entryPoint Name of the hook's entry point\n\t * @param {Node} currentNode node to work on with the hook\n\t * @param {Object} data additional hook parameters\n\t */\n\n\n\tconst _executeHook = function _executeHook(entryPoint, currentNode, data) {\n\t\tif (!hooks[entryPoint]) {\n\t\t\treturn;\n\t\t}\n\n\t\tarrayForEach(hooks[entryPoint], hook => {\n\t\t\thook.call(DOMPurify, currentNode, data, CONFIG);\n\t\t});\n\t};\n\t/**\n\t * _sanitizeElements\n\t *\n\t * @protect nodeName\n\t * @protect textContent\n\t * @protect removeChild\n\t *\n\t * @param {Node} currentNode to check for permission to exist\n\t * @return {Boolean} true if node was killed, false if left alive\n\t */\n\n\n\tconst _sanitizeElements = function _sanitizeElements(currentNode) {\n\t\tlet content;\n\t\t/* Execute a hook if present */\n\n\t\t_executeHook('beforeSanitizeElements', currentNode, null);\n\t\t/* Check if element is clobbered or can clobber */\n\n\n\t\tif (_isClobbered(currentNode)) {\n\t\t\t_forceRemove(currentNode);\n\n\t\t\treturn true;\n\t\t}\n\t\t/* Now let's check the element's type and name */\n\n\n\t\tconst tagName = transformCaseFunc(currentNode.nodeName);\n\t\t/* Execute a hook if present */\n\n\t\t_executeHook('uponSanitizeElement', currentNode, {\n\t\t\ttagName,\n\t\t\tallowedTags: ALLOWED_TAGS\n\t\t});\n\t\t/* Detect mXSS attempts abusing namespace confusion */\n\n\n\t\tif (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n\t\t\t_forceRemove(currentNode);\n\n\t\t\treturn true;\n\t\t}\n\t\t/* Remove element if anything forbids its presence */\n\n\n\t\tif (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n\t\t\t/* Check if we have a custom element to handle */\n\t\t\tif (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n\t\t\t\tif (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;\n\t\t\t\tif (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) return false;\n\t\t\t}\n\t\t\t/* Keep content except for bad-listed elements */\n\n\n\t\t\tif (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n\t\t\t\tconst parentNode = getParentNode(currentNode) || currentNode.parentNode;\n\t\t\t\tconst childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n\t\t\t\tif (childNodes && parentNode) {\n\t\t\t\t\tconst childCount = childNodes.length;\n\n\t\t\t\t\tfor (let i = childCount - 1; i >= 0; --i) {\n\t\t\t\t\t\tparentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_forceRemove(currentNode);\n\n\t\t\treturn true;\n\t\t}\n\t\t/* Check whether element has a valid namespace */\n\n\n\t\tif (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n\t\t\t_forceRemove(currentNode);\n\n\t\t\treturn true;\n\t\t}\n\t\t/* Make sure that older browsers don't get fallback-tag mXSS */\n\n\n\t\tif ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n\t\t\t_forceRemove(currentNode);\n\n\t\t\treturn true;\n\t\t}\n\t\t/* Sanitize element content to be template-safe */\n\n\n\t\tif (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n\t\t\t/* Get the element's text content */\n\t\t\tcontent = currentNode.textContent;\n\t\t\tcontent = stringReplace(content, MUSTACHE_EXPR, ' ');\n\t\t\tcontent = stringReplace(content, ERB_EXPR, ' ');\n\t\t\tcontent = stringReplace(content, TMPLIT_EXPR, ' ');\n\n\t\t\tif (currentNode.textContent !== content) {\n\t\t\t\tarrayPush(DOMPurify.removed, {\n\t\t\t\t\telement: currentNode.cloneNode()\n\t\t\t\t});\n\t\t\t\tcurrentNode.textContent = content;\n\t\t\t}\n\t\t}\n\t\t/* Execute a hook if present */\n\n\n\t\t_executeHook('afterSanitizeElements', currentNode, null);\n\n\t\treturn false;\n\t};\n\t/**\n\t * _isValidAttribute\n\t *\n\t * @param {string} lcTag Lowercase tag name of containing element.\n\t * @param {string} lcName Lowercase attribute name.\n\t * @param {string} value Attribute value.\n\t * @return {Boolean} Returns true if `value` is valid, otherwise false.\n\t */\n\t// eslint-disable-next-line complexity\n\n\n\tconst _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n\t\t/* Make sure attribute cannot clobber */\n\t\tif (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n\t\t\treturn false;\n\t\t}\n\t\t/* Allow valid data-* attributes: At least one character after \"-\"\n\t\t\t\t(https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n\t\t\t\tXML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n\t\t\t\tWe don't need to check the value; it's always URI safe. */\n\n\n\t\tif (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)); else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)); else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n\t\t\tif ( // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n\t\t\t\t// b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n\t\t\t\t// and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n\t\t\t\t_basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND\n\t\t\t\t// the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n\t\t\t\tlcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))); else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/* Check value is safe. First, is attr inert? If so, is safe */\n\n\t\t} else if (URI_SAFE_ATTRIBUTES[lcName]); else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))); else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]); else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))); else if (value) {\n\t\t\treturn false;\n\t\t} else;\n\n\t\treturn true;\n\t};\n\t/**\n\t * _basicCustomElementCheck\n\t * checks if at least one dash is included in tagName, and it's not the first char\n\t * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n\t * @param {string} tagName name of the tag of the node to sanitize\n\t */\n\n\n\tconst _basicCustomElementTest = function _basicCustomElementTest(tagName) {\n\t\treturn tagName.indexOf('-') > 0;\n\t};\n\t/**\n\t * _sanitizeAttributes\n\t *\n\t * @protect attributes\n\t * @protect nodeName\n\t * @protect removeAttribute\n\t * @protect setAttribute\n\t *\n\t * @param {Node} currentNode to sanitize\n\t */\n\n\n\tconst _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n\t\tlet attr;\n\t\tlet value;\n\t\tlet lcName;\n\t\tlet l;\n\t\t/* Execute a hook if present */\n\n\t\t_executeHook('beforeSanitizeAttributes', currentNode, null);\n\n\t\tconst {\n\t\t\tattributes\n\t\t} = currentNode;\n\t\t/* Check if we have attributes; if not we might have a text node */\n\n\t\tif (!attributes) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst hookEvent = {\n\t\t\tattrName: '',\n\t\t\tattrValue: '',\n\t\t\tkeepAttr: true,\n\t\t\tallowedAttributes: ALLOWED_ATTR\n\t\t};\n\t\tl = attributes.length;\n\t\t/* Go backwards over all attributes; safely remove bad ones */\n\n\t\twhile (l--) {\n\t\t\tattr = attributes[l];\n\t\t\tconst {\n\t\t\t\tname,\n\t\t\t\tnamespaceURI\n\t\t\t} = attr;\n\t\t\tvalue = name === 'value' ? attr.value : stringTrim(attr.value);\n\t\t\tlcName = transformCaseFunc(name);\n\t\t\t/* Execute a hook if present */\n\n\t\t\thookEvent.attrName = lcName;\n\t\t\thookEvent.attrValue = value;\n\t\t\thookEvent.keepAttr = true;\n\t\t\thookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n\n\t\t\t_executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n\n\t\t\tvalue = hookEvent.attrValue;\n\t\t\t/* Did the hooks approve of the attribute? */\n\n\t\t\tif (hookEvent.forceKeepAttr) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t/* Remove attribute */\n\n\n\t\t\t_removeAttribute(name, currentNode);\n\t\t\t/* Did the hooks approve of the attribute? */\n\n\n\t\t\tif (!hookEvent.keepAttr) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t/* Work around a security issue in jQuery 3.0 */\n\n\n\t\t\tif (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n\t\t\t\t_removeAttribute(name, currentNode);\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t/* Sanitize attribute content to be template-safe */\n\n\n\t\t\tif (SAFE_FOR_TEMPLATES) {\n\t\t\t\tvalue = stringReplace(value, MUSTACHE_EXPR, ' ');\n\t\t\t\tvalue = stringReplace(value, ERB_EXPR, ' ');\n\t\t\t\tvalue = stringReplace(value, TMPLIT_EXPR, ' ');\n\t\t\t}\n\t\t\t/* Is `value` valid for this attribute? */\n\n\n\t\t\tconst lcTag = transformCaseFunc(currentNode.nodeName);\n\n\t\t\tif (!_isValidAttribute(lcTag, lcName, value)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t/* Full DOM Clobbering protection via namespace isolation,\n\t\t\t * Prefix id and name attributes with `user-content-`\n\t\t\t */\n\n\n\t\t\tif (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n\t\t\t\t// Remove the attribute with this value\n\t\t\t\t_removeAttribute(name, currentNode); // Prefix the value and later re-create the attribute with the sanitized value\n\n\n\t\t\t\tvalue = SANITIZE_NAMED_PROPS_PREFIX + value;\n\t\t\t}\n\t\t\t/* Handle attributes that require Trusted Types */\n\n\n\t\t\tif (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n\t\t\t\tif (namespaceURI); else {\n\t\t\t\t\tswitch (trustedTypes.getAttributeType(lcTag, lcName)) {\n\t\t\t\t\t\tcase 'TrustedHTML':\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalue = trustedTypesPolicy.createHTML(value);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcase 'TrustedScriptURL':\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tvalue = trustedTypesPolicy.createScriptURL(value);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t/* Handle invalid data-* attribute set by try-catching it */\n\n\n\t\t\ttry {\n\t\t\t\tif (namespaceURI) {\n\t\t\t\t\tcurrentNode.setAttributeNS(namespaceURI, name, value);\n\t\t\t\t} else {\n\t\t\t\t\t/* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n\t\t\t\t\tcurrentNode.setAttribute(name, value);\n\t\t\t\t}\n\n\t\t\t\tarrayPop(DOMPurify.removed);\n\t\t\t} catch (_) { }\n\t\t}\n\t\t/* Execute a hook if present */\n\n\n\t\t_executeHook('afterSanitizeAttributes', currentNode, null);\n\t};\n\t/**\n\t * _sanitizeShadowDOM\n\t *\n\t * @param {DocumentFragment} fragment to iterate over recursively\n\t */\n\n\n\tconst _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n\t\tlet shadowNode;\n\n\t\tconst shadowIterator = _createIterator(fragment);\n\t\t/* Execute a hook if present */\n\n\n\t\t_executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n\t\twhile (shadowNode = shadowIterator.nextNode()) {\n\t\t\t/* Execute a hook if present */\n\t\t\t_executeHook('uponSanitizeShadowNode', shadowNode, null);\n\t\t\t/* Sanitize tags and elements */\n\n\n\t\t\tif (_sanitizeElements(shadowNode)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t/* Deep shadow DOM detected */\n\n\n\t\t\tif (shadowNode.content instanceof DocumentFragment) {\n\t\t\t\t_sanitizeShadowDOM(shadowNode.content);\n\t\t\t}\n\t\t\t/* Check attributes, sanitize if necessary */\n\n\n\t\t\t_sanitizeAttributes(shadowNode);\n\t\t}\n\t\t/* Execute a hook if present */\n\n\n\t\t_executeHook('afterSanitizeShadowDOM', fragment, null);\n\t};\n\t/**\n\t * Sanitize\n\t * Public method providing core sanitation functionality\n\t *\n\t * @param {String|Node} dirty string or DOM node\n\t * @param {Object} configuration object\n\t */\n\t// eslint-disable-next-line complexity\n\n\n\tDOMPurify.sanitize = function (dirty) {\n\t\tlet cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\tlet body;\n\t\tlet importedNode;\n\t\tlet currentNode;\n\t\tlet returnNode;\n\t\t/* Make sure we have a string to sanitize.\n\t\t\tDO NOT return early, as this will return the wrong type if\n\t\t\tthe user has requested a DOM object rather than a string */\n\n\t\tIS_EMPTY_INPUT = !dirty;\n\n\t\tif (IS_EMPTY_INPUT) {\n\t\t\tdirty = '';\n\t\t}\n\t\t/* Stringify, in case dirty is an object */\n\n\n\t\tif (typeof dirty !== 'string' && !_isNode(dirty)) {\n\t\t\tif (typeof dirty.toString === 'function') {\n\t\t\t\tdirty = dirty.toString();\n\n\t\t\t\tif (typeof dirty !== 'string') {\n\t\t\t\t\tthrow typeErrorCreate('dirty is not a string, aborting');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow typeErrorCreate('toString is not a function');\n\t\t\t}\n\t\t}\n\t\t/* Return dirty HTML if DOMPurify cannot run */\n\n\n\t\tif (!DOMPurify.isSupported) {\n\t\t\treturn dirty;\n\t\t}\n\t\t/* Assign config vars */\n\n\n\t\tif (!SET_CONFIG) {\n\t\t\t_parseConfig(cfg);\n\t\t}\n\t\t/* Clean up removed elements */\n\n\n\t\tDOMPurify.removed = [];\n\t\t/* Check if dirty is correctly typed for IN_PLACE */\n\n\t\tif (typeof dirty === 'string') {\n\t\t\tIN_PLACE = false;\n\t\t}\n\n\t\tif (IN_PLACE) {\n\t\t\t/* Do some early pre-sanitization to avoid unsafe root nodes */\n\t\t\tif (dirty.nodeName) {\n\t\t\t\tconst tagName = transformCaseFunc(dirty.nodeName);\n\n\t\t\t\tif (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n\t\t\t\t\tthrow typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (dirty instanceof Node) {\n\t\t\t/* If dirty is a DOM element, append to an empty document to avoid\n\t\t\t\t elements being stripped by the parser */\n\t\t\tbody = _initDocument('');\n\t\t\timportedNode = body.ownerDocument.importNode(dirty, true);\n\n\t\t\tif (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n\t\t\t\t/* Node is already a body, use as is */\n\t\t\t\tbody = importedNode;\n\t\t\t} else if (importedNode.nodeName === 'HTML') {\n\t\t\t\tbody = importedNode;\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line unicorn/prefer-dom-node-append\n\t\t\t\tbody.appendChild(importedNode);\n\t\t\t}\n\t\t} else {\n\t\t\t/* Exit directly if we have nothing to do */\n\t\t\tif (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes\n\t\t\t\tdirty.indexOf('<') === -1) {\n\t\t\t\treturn trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n\t\t\t}\n\t\t\t/* Initialize the document to work on */\n\n\n\t\t\tbody = _initDocument(dirty);\n\t\t\t/* Check we have a DOM node from the data */\n\n\t\t\tif (!body) {\n\t\t\t\treturn RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n\t\t\t}\n\t\t}\n\t\t/* Remove first element node (ours) if FORCE_BODY is set */\n\n\n\t\tif (body && FORCE_BODY) {\n\t\t\t_forceRemove(body.firstChild);\n\t\t}\n\t\t/* Get node iterator */\n\n\n\t\tconst nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\t\t/* Now start iterating over the created document */\n\n\n\t\twhile (currentNode = nodeIterator.nextNode()) {\n\t\t\t/* Sanitize tags and elements */\n\t\t\tif (_sanitizeElements(currentNode)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t/* Shadow DOM detected, sanitize it */\n\n\n\t\t\tif (currentNode.content instanceof DocumentFragment) {\n\t\t\t\t_sanitizeShadowDOM(currentNode.content);\n\t\t\t}\n\t\t\t/* Check attributes, sanitize if necessary */\n\n\n\t\t\t_sanitizeAttributes(currentNode);\n\t\t}\n\t\t/* If we sanitized `dirty` in-place, return it. */\n\n\n\t\tif (IN_PLACE) {\n\t\t\treturn dirty;\n\t\t}\n\t\t/* Return sanitized string or DOM */\n\n\n\t\tif (RETURN_DOM) {\n\t\t\tif (RETURN_DOM_FRAGMENT) {\n\t\t\t\treturnNode = createDocumentFragment.call(body.ownerDocument);\n\n\t\t\t\twhile (body.firstChild) {\n\t\t\t\t\t// eslint-disable-next-line unicorn/prefer-dom-node-append\n\t\t\t\t\treturnNode.appendChild(body.firstChild);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturnNode = body;\n\t\t\t}\n\n\t\t\tif (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n\t\t\t\t/*\n\t\t\t\t\tAdoptNode() is not used because internal state is not reset\n\t\t\t\t\t(e.g. the past names map of a HTMLFormElement), this is safe\n\t\t\t\t\tin theory but we would rather not risk another attack vector.\n\t\t\t\t\tThe state that is cloned by importNode() is explicitly defined\n\t\t\t\t\tby the specs.\n\t\t\t\t*/\n\t\t\t\treturnNode = importNode.call(originalDocument, returnNode, true);\n\t\t\t}\n\n\t\t\treturn returnNode;\n\t\t}\n\n\t\tlet serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\t\t/* Serialize doctype if allowed */\n\n\t\tif (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n\t\t\tserializedHTML = '\\n' + serializedHTML;\n\t\t}\n\t\t/* Sanitize final string template-safe */\n\n\n\t\tif (SAFE_FOR_TEMPLATES) {\n\t\t\tserializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');\n\t\t\tserializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');\n\t\t\tserializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR, ' ');\n\t\t}\n\n\t\treturn trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n\t};\n\t/**\n\t * Public method to set the configuration once\n\t * setConfig\n\t *\n\t * @param {Object} cfg configuration object\n\t */\n\n\n\tDOMPurify.setConfig = function (cfg) {\n\t\t_parseConfig(cfg);\n\n\t\tSET_CONFIG = true;\n\t};\n\t/**\n\t * Public method to remove the configuration\n\t * clearConfig\n\t *\n\t */\n\n\n\tDOMPurify.clearConfig = function () {\n\t\tCONFIG = null;\n\t\tSET_CONFIG = false;\n\t};\n\t/**\n\t * Public method to check if an attribute value is valid.\n\t * Uses last set config, if any. Otherwise, uses config defaults.\n\t * isValidAttribute\n\t *\n\t * @param {string} tag Tag name of containing element.\n\t * @param {string} attr Attribute name.\n\t * @param {string} value Attribute value.\n\t * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n\t */\n\n\n\tDOMPurify.isValidAttribute = function (tag, attr, value) {\n\t\t/* Initialize shared config vars if necessary. */\n\t\tif (!CONFIG) {\n\t\t\t_parseConfig({});\n\t\t}\n\n\t\tconst lcTag = transformCaseFunc(tag);\n\t\tconst lcName = transformCaseFunc(attr);\n\t\treturn _isValidAttribute(lcTag, lcName, value);\n\t};\n\t/**\n\t * AddHook\n\t * Public method to add DOMPurify hooks\n\t *\n\t * @param {String} entryPoint entry point for the hook to add\n\t * @param {Function} hookFunction function to execute\n\t */\n\n\n\tDOMPurify.addHook = function (entryPoint, hookFunction) {\n\t\tif (typeof hookFunction !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\thooks[entryPoint] = hooks[entryPoint] || [];\n\t\tarrayPush(hooks[entryPoint], hookFunction);\n\t};\n\t/**\n\t * RemoveHook\n\t * Public method to remove a DOMPurify hook at a given entryPoint\n\t * (pops it from the stack of hooks if more are present)\n\t *\n\t * @param {String} entryPoint entry point for the hook to remove\n\t * @return {Function} removed(popped) hook\n\t */\n\n\n\tDOMPurify.removeHook = function (entryPoint) {\n\t\tif (hooks[entryPoint]) {\n\t\t\treturn arrayPop(hooks[entryPoint]);\n\t\t}\n\t};\n\t/**\n\t * RemoveHooks\n\t * Public method to remove all DOMPurify hooks at a given entryPoint\n\t *\n\t * @param {String} entryPoint entry point for the hooks to remove\n\t */\n\n\n\tDOMPurify.removeHooks = function (entryPoint) {\n\t\tif (hooks[entryPoint]) {\n\t\t\thooks[entryPoint] = [];\n\t\t}\n\t};\n\t/**\n\t * RemoveAllHooks\n\t * Public method to remove all DOMPurify hooks\n\t *\n\t */\n\n\n\tDOMPurify.removeAllHooks = function () {\n\t\thooks = {};\n\t};\n\n\treturn DOMPurify;\n}\n\nvar purify = createDOMPurify();\n\n// ESM-comment-begin\n// define(function () { return purify; });\n// ESM-comment-end\n\n// ESM-uncomment-begin\nexport default purify;\nexport const version = purify.version;\nexport const isSupported = purify.isSupported;\nexport const sanitize = purify.sanitize;\nexport const setConfig = purify.setConfig;\nexport const clearConfig = purify.clearConfig;\nexport const isValidAttribute = purify.isValidAttribute;\nexport const addHook = purify.addHook;\nexport const removeHook = purify.removeHook;\nexport const removeHooks = purify.removeHooks;\nexport const removeAllHooks = purify.removeAllHooks;\n// ESM-uncomment-end\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../common/event.js';\nexport class DomEmitter {\n get event() {\n return this.emitter.event;\n }\n constructor(element, type, useCapture) {\n const fn = (e) => this.emitter.fire(e);\n this.emitter = new Emitter({\n onWillAddFirstListener: () => element.addEventListener(type, fn, useCapture),\n onDidRemoveLastListener: () => element.removeEventListener(type, fn, useCapture)\n });\n }\n dispose() {\n this.emitter.dispose();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport class FastDomNode {\n constructor(domNode) {\n this.domNode = domNode;\n this._maxWidth = '';\n this._width = '';\n this._height = '';\n this._top = '';\n this._left = '';\n this._bottom = '';\n this._right = '';\n this._paddingLeft = '';\n this._fontFamily = '';\n this._fontWeight = '';\n this._fontSize = '';\n this._fontStyle = '';\n this._fontFeatureSettings = '';\n this._fontVariationSettings = '';\n this._textDecoration = '';\n this._lineHeight = '';\n this._letterSpacing = '';\n this._className = '';\n this._display = '';\n this._position = '';\n this._visibility = '';\n this._color = '';\n this._backgroundColor = '';\n this._layerHint = false;\n this._contain = 'none';\n this._boxShadow = '';\n }\n setMaxWidth(_maxWidth) {\n const maxWidth = numberAsPixels(_maxWidth);\n if (this._maxWidth === maxWidth) {\n return;\n }\n this._maxWidth = maxWidth;\n this.domNode.style.maxWidth = this._maxWidth;\n }\n setWidth(_width) {\n const width = numberAsPixels(_width);\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width;\n }\n setHeight(_height) {\n const height = numberAsPixels(_height);\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height;\n }\n setTop(_top) {\n const top = numberAsPixels(_top);\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top;\n }\n setLeft(_left) {\n const left = numberAsPixels(_left);\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left;\n }\n setBottom(_bottom) {\n const bottom = numberAsPixels(_bottom);\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom;\n }\n setRight(_right) {\n const right = numberAsPixels(_right);\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right;\n }\n setPaddingLeft(_paddingLeft) {\n const paddingLeft = numberAsPixels(_paddingLeft);\n if (this._paddingLeft === paddingLeft) {\n return;\n }\n this._paddingLeft = paddingLeft;\n this.domNode.style.paddingLeft = this._paddingLeft;\n }\n setFontFamily(fontFamily) {\n if (this._fontFamily === fontFamily) {\n return;\n }\n this._fontFamily = fontFamily;\n this.domNode.style.fontFamily = this._fontFamily;\n }\n setFontWeight(fontWeight) {\n if (this._fontWeight === fontWeight) {\n return;\n }\n this._fontWeight = fontWeight;\n this.domNode.style.fontWeight = this._fontWeight;\n }\n setFontSize(_fontSize) {\n const fontSize = numberAsPixels(_fontSize);\n if (this._fontSize === fontSize) {\n return;\n }\n this._fontSize = fontSize;\n this.domNode.style.fontSize = this._fontSize;\n }\n setFontStyle(fontStyle) {\n if (this._fontStyle === fontStyle) {\n return;\n }\n this._fontStyle = fontStyle;\n this.domNode.style.fontStyle = this._fontStyle;\n }\n setFontFeatureSettings(fontFeatureSettings) {\n if (this._fontFeatureSettings === fontFeatureSettings) {\n return;\n }\n this._fontFeatureSettings = fontFeatureSettings;\n this.domNode.style.fontFeatureSettings = this._fontFeatureSettings;\n }\n setFontVariationSettings(fontVariationSettings) {\n if (this._fontVariationSettings === fontVariationSettings) {\n return;\n }\n this._fontVariationSettings = fontVariationSettings;\n this.domNode.style.fontVariationSettings = this._fontVariationSettings;\n }\n setTextDecoration(textDecoration) {\n if (this._textDecoration === textDecoration) {\n return;\n }\n this._textDecoration = textDecoration;\n this.domNode.style.textDecoration = this._textDecoration;\n }\n setLineHeight(_lineHeight) {\n const lineHeight = numberAsPixels(_lineHeight);\n if (this._lineHeight === lineHeight) {\n return;\n }\n this._lineHeight = lineHeight;\n this.domNode.style.lineHeight = this._lineHeight;\n }\n setLetterSpacing(_letterSpacing) {\n const letterSpacing = numberAsPixels(_letterSpacing);\n if (this._letterSpacing === letterSpacing) {\n return;\n }\n this._letterSpacing = letterSpacing;\n this.domNode.style.letterSpacing = this._letterSpacing;\n }\n setClassName(className) {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n toggleClassName(className, shouldHaveIt) {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n setDisplay(display) {\n if (this._display === display) {\n return;\n }\n this._display = display;\n this.domNode.style.display = this._display;\n }\n setPosition(position) {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n setVisibility(visibility) {\n if (this._visibility === visibility) {\n return;\n }\n this._visibility = visibility;\n this.domNode.style.visibility = this._visibility;\n }\n setColor(color) {\n if (this._color === color) {\n return;\n }\n this._color = color;\n this.domNode.style.color = this._color;\n }\n setBackgroundColor(backgroundColor) {\n if (this._backgroundColor === backgroundColor) {\n return;\n }\n this._backgroundColor = backgroundColor;\n this.domNode.style.backgroundColor = this._backgroundColor;\n }\n setLayerHinting(layerHint) {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n this.domNode.style.transform = this._layerHint ? 'translate3d(0px, 0px, 0px)' : '';\n }\n setBoxShadow(boxShadow) {\n if (this._boxShadow === boxShadow) {\n return;\n }\n this._boxShadow = boxShadow;\n this.domNode.style.boxShadow = boxShadow;\n }\n setContain(contain) {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n setAttribute(name, value) {\n this.domNode.setAttribute(name, value);\n }\n removeAttribute(name) {\n this.domNode.removeAttribute(name);\n }\n appendChild(child) {\n this.domNode.appendChild(child.domNode);\n }\n removeChild(child) {\n this.domNode.removeChild(child.domNode);\n }\n}\nfunction numberAsPixels(value) {\n return (typeof value === 'number' ? `${value}px` : value);\n}\nexport function createFastDomNode(domNode) {\n return new FastDomNode(domNode);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { isMacintosh, isWindows } from '../common/platform.js';\n/**\n * The best font-family to be used in CSS based on the platform:\n * - Windows: Segoe preferred, fallback to sans-serif\n * - macOS: standard system font, fallback to sans-serif\n * - Linux: standard system font preferred, fallback to Ubuntu fonts\n *\n * Note: this currently does not adjust for different locales.\n */\nexport const DEFAULT_FONT_FAMILY = isWindows ? '\"Segoe WPC\", \"Segoe UI\", sans-serif' : isMacintosh ? '-apple-system, BlinkMacSystemFont, sans-serif' : 'system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif';\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as DOM from './dom.js';\nexport function renderText(text, options = {}) {\n const element = createElement(options);\n element.textContent = text;\n return element;\n}\nexport function renderFormattedText(formattedText, options = {}) {\n const element = createElement(options);\n _renderFormattedText(element, parseFormattedText(formattedText, !!options.renderCodeSegments), options.actionHandler, options.renderCodeSegments);\n return element;\n}\nexport function createElement(options) {\n const tagName = options.inline ? 'span' : 'div';\n const element = document.createElement(tagName);\n if (options.className) {\n element.className = options.className;\n }\n return element;\n}\nclass StringStream {\n constructor(source) {\n this.source = source;\n this.index = 0;\n }\n eos() {\n return this.index >= this.source.length;\n }\n next() {\n const next = this.peek();\n this.advance();\n return next;\n }\n peek() {\n return this.source[this.index];\n }\n advance() {\n this.index++;\n }\n}\nfunction _renderFormattedText(element, treeNode, actionHandler, renderCodeSegments) {\n let child;\n if (treeNode.type === 2 /* FormatType.Text */) {\n child = document.createTextNode(treeNode.content || '');\n }\n else if (treeNode.type === 3 /* FormatType.Bold */) {\n child = document.createElement('b');\n }\n else if (treeNode.type === 4 /* FormatType.Italics */) {\n child = document.createElement('i');\n }\n else if (treeNode.type === 7 /* FormatType.Code */ && renderCodeSegments) {\n child = document.createElement('code');\n }\n else if (treeNode.type === 5 /* FormatType.Action */ && actionHandler) {\n const a = document.createElement('a');\n actionHandler.disposables.add(DOM.addStandardDisposableListener(a, 'click', (event) => {\n actionHandler.callback(String(treeNode.index), event);\n }));\n child = a;\n }\n else if (treeNode.type === 8 /* FormatType.NewLine */) {\n child = document.createElement('br');\n }\n else if (treeNode.type === 1 /* FormatType.Root */) {\n child = element;\n }\n if (child && element !== child) {\n element.appendChild(child);\n }\n if (child && Array.isArray(treeNode.children)) {\n treeNode.children.forEach((nodeChild) => {\n _renderFormattedText(child, nodeChild, actionHandler, renderCodeSegments);\n });\n }\n}\nfunction parseFormattedText(content, parseCodeSegments) {\n const root = {\n type: 1 /* FormatType.Root */,\n children: []\n };\n let actionViewItemIndex = 0;\n let current = root;\n const stack = [];\n const stream = new StringStream(content);\n while (!stream.eos()) {\n let next = stream.next();\n const isEscapedFormatType = (next === '\\\\' && formatTagType(stream.peek(), parseCodeSegments) !== 0 /* FormatType.Invalid */);\n if (isEscapedFormatType) {\n next = stream.next(); // unread the backslash if it escapes a format tag type\n }\n if (!isEscapedFormatType && isFormatTag(next, parseCodeSegments) && next === stream.peek()) {\n stream.advance();\n if (current.type === 2 /* FormatType.Text */) {\n current = stack.pop();\n }\n const type = formatTagType(next, parseCodeSegments);\n if (current.type === type || (current.type === 5 /* FormatType.Action */ && type === 6 /* FormatType.ActionClose */)) {\n current = stack.pop();\n }\n else {\n const newCurrent = {\n type: type,\n children: []\n };\n if (type === 5 /* FormatType.Action */) {\n newCurrent.index = actionViewItemIndex;\n actionViewItemIndex++;\n }\n current.children.push(newCurrent);\n stack.push(current);\n current = newCurrent;\n }\n }\n else if (next === '\\n') {\n if (current.type === 2 /* FormatType.Text */) {\n current = stack.pop();\n }\n current.children.push({\n type: 8 /* FormatType.NewLine */\n });\n }\n else {\n if (current.type !== 2 /* FormatType.Text */) {\n const textCurrent = {\n type: 2 /* FormatType.Text */,\n content: next\n };\n current.children.push(textCurrent);\n stack.push(current);\n current = textCurrent;\n }\n else {\n current.content += next;\n }\n }\n }\n if (current.type === 2 /* FormatType.Text */) {\n current = stack.pop();\n }\n if (stack.length) {\n // incorrectly formatted string literal\n }\n return root;\n}\nfunction isFormatTag(char, supportCodeSegments) {\n return formatTagType(char, supportCodeSegments) !== 0 /* FormatType.Invalid */;\n}\nfunction formatTagType(char, supportCodeSegments) {\n switch (char) {\n case '*':\n return 3 /* FormatType.Bold */;\n case '_':\n return 4 /* FormatType.Italics */;\n case '[':\n return 5 /* FormatType.Action */;\n case ']':\n return 6 /* FormatType.ActionClose */;\n case '`':\n return supportCodeSegments ? 7 /* FormatType.Code */ : 0 /* FormatType.Invalid */;\n default:\n return 0 /* FormatType.Invalid */;\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as dom from './dom.js';\nimport { DisposableStore, toDisposable } from '../common/lifecycle.js';\nexport class GlobalPointerMoveMonitor {\n constructor() {\n this._hooks = new DisposableStore();\n this._pointerMoveCallback = null;\n this._onStopCallback = null;\n }\n dispose() {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n stopMonitoring(invokeStopCallback, browserEvent) {\n if (!this.isMonitoring()) {\n // Not monitoring\n return;\n }\n // Unhook\n this._hooks.clear();\n this._pointerMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n if (invokeStopCallback && onStopCallback) {\n onStopCallback(browserEvent);\n }\n }\n isMonitoring() {\n return !!this._pointerMoveCallback;\n }\n startMonitoring(initialElement, pointerId, initialButtons, pointerMoveCallback, onStopCallback) {\n if (this.isMonitoring()) {\n this.stopMonitoring(false);\n }\n this._pointerMoveCallback = pointerMoveCallback;\n this._onStopCallback = onStopCallback;\n let eventSource = initialElement;\n try {\n initialElement.setPointerCapture(pointerId);\n this._hooks.add(toDisposable(() => {\n try {\n initialElement.releasePointerCapture(pointerId);\n }\n catch (err) {\n // See https://github.com/microsoft/vscode/issues/161731\n //\n // `releasePointerCapture` sometimes fails when being invoked with the exception:\n // DOMException: Failed to execute 'releasePointerCapture' on 'Element':\n // No active pointer with the given id is found.\n //\n // There's no need to do anything in case of failure\n }\n }));\n }\n catch (err) {\n // See https://github.com/microsoft/vscode/issues/144584\n // See https://github.com/microsoft/vscode/issues/146947\n // `setPointerCapture` sometimes fails when being invoked\n // from a `mousedown` listener on macOS and Windows\n // and it always fails on Linux with the exception:\n // DOMException: Failed to execute 'setPointerCapture' on 'Element':\n // No active pointer with the given id is found.\n // In case of failure, we bind the listeners on the window\n eventSource = dom.getWindow(initialElement);\n }\n this._hooks.add(dom.addDisposableListener(eventSource, dom.EventType.POINTER_MOVE, (e) => {\n if (e.buttons !== initialButtons) {\n // Buttons state has changed in the meantime\n this.stopMonitoring(true);\n return;\n }\n e.preventDefault();\n this._pointerMoveCallback(e);\n }));\n this._hooks.add(dom.addDisposableListener(eventSource, dom.EventType.POINTER_UP, (e) => this.stopMonitoring(true)));\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport { EVENT_KEY_CODE_MAP, KeyCodeUtils } from '../common/keyCodes.js';\nimport { KeyCodeChord } from '../common/keybindings.js';\nimport * as platform from '../common/platform.js';\nfunction extractKeyCode(e) {\n if (e.charCode) {\n // \"keypress\" events mostly\n const char = String.fromCharCode(e.charCode).toUpperCase();\n return KeyCodeUtils.fromString(char);\n }\n const keyCode = e.keyCode;\n // browser quirks\n if (keyCode === 3) {\n return 7 /* KeyCode.PauseBreak */;\n }\n else if (browser.isFirefox) {\n switch (keyCode) {\n case 59: return 85 /* KeyCode.Semicolon */;\n case 60:\n if (platform.isLinux) {\n return 97 /* KeyCode.IntlBackslash */;\n }\n break;\n case 61: return 86 /* KeyCode.Equal */;\n // based on: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#numpad_keys\n case 107: return 109 /* KeyCode.NumpadAdd */;\n case 109: return 111 /* KeyCode.NumpadSubtract */;\n case 173: return 88 /* KeyCode.Minus */;\n case 224:\n if (platform.isMacintosh) {\n return 57 /* KeyCode.Meta */;\n }\n break;\n }\n }\n else if (browser.isWebKit) {\n if (platform.isMacintosh && keyCode === 93) {\n // the two meta keys in the Mac have different key codes (91 and 93)\n return 57 /* KeyCode.Meta */;\n }\n else if (!platform.isMacintosh && keyCode === 92) {\n return 57 /* KeyCode.Meta */;\n }\n }\n // cross browser keycodes:\n return EVENT_KEY_CODE_MAP[keyCode] || 0 /* KeyCode.Unknown */;\n}\nconst ctrlKeyMod = (platform.isMacintosh ? 256 /* KeyMod.WinCtrl */ : 2048 /* KeyMod.CtrlCmd */);\nconst altKeyMod = 512 /* KeyMod.Alt */;\nconst shiftKeyMod = 1024 /* KeyMod.Shift */;\nconst metaKeyMod = (platform.isMacintosh ? 2048 /* KeyMod.CtrlCmd */ : 256 /* KeyMod.WinCtrl */);\nexport class StandardKeyboardEvent {\n constructor(source) {\n var _a;\n this._standardKeyboardEventBrand = true;\n const e = source;\n this.browserEvent = e;\n this.target = e.target;\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n this.altGraphKey = (_a = e.getModifierState) === null || _a === void 0 ? void 0 : _a.call(e, 'AltGraph');\n this.keyCode = extractKeyCode(e);\n this.code = e.code;\n // console.info(e.type + \": keyCode: \" + e.keyCode + \", which: \" + e.which + \", charCode: \" + e.charCode + \", detail: \" + e.detail + \" ====> \" + this.keyCode + ' -- ' + KeyCode[this.keyCode]);\n this.ctrlKey = this.ctrlKey || this.keyCode === 5 /* KeyCode.Ctrl */;\n this.altKey = this.altKey || this.keyCode === 6 /* KeyCode.Alt */;\n this.shiftKey = this.shiftKey || this.keyCode === 4 /* KeyCode.Shift */;\n this.metaKey = this.metaKey || this.keyCode === 57 /* KeyCode.Meta */;\n this._asKeybinding = this._computeKeybinding();\n this._asKeyCodeChord = this._computeKeyCodeChord();\n // console.log(`code: ${e.code}, keyCode: ${e.keyCode}, key: ${e.key}`);\n }\n preventDefault() {\n if (this.browserEvent && this.browserEvent.preventDefault) {\n this.browserEvent.preventDefault();\n }\n }\n stopPropagation() {\n if (this.browserEvent && this.browserEvent.stopPropagation) {\n this.browserEvent.stopPropagation();\n }\n }\n toKeyCodeChord() {\n return this._asKeyCodeChord;\n }\n equals(other) {\n return this._asKeybinding === other;\n }\n _computeKeybinding() {\n let key = 0 /* KeyCode.Unknown */;\n if (this.keyCode !== 5 /* KeyCode.Ctrl */ && this.keyCode !== 4 /* KeyCode.Shift */ && this.keyCode !== 6 /* KeyCode.Alt */ && this.keyCode !== 57 /* KeyCode.Meta */) {\n key = this.keyCode;\n }\n let result = 0;\n if (this.ctrlKey) {\n result |= ctrlKeyMod;\n }\n if (this.altKey) {\n result |= altKeyMod;\n }\n if (this.shiftKey) {\n result |= shiftKeyMod;\n }\n if (this.metaKey) {\n result |= metaKeyMod;\n }\n result |= key;\n return result;\n }\n _computeKeyCodeChord() {\n let key = 0 /* KeyCode.Unknown */;\n if (this.keyCode !== 5 /* KeyCode.Ctrl */ && this.keyCode !== 4 /* KeyCode.Shift */ && this.keyCode !== 6 /* KeyCode.Alt */ && this.keyCode !== 57 /* KeyCode.Meta */) {\n key = this.keyCode;\n }\n return new KeyCodeChord(this.ctrlKey, this.shiftKey, this.altKey, this.metaKey, key);\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as DOM from './dom.js';\nimport * as dompurify from './dompurify/dompurify.js';\nimport { DomEmitter } from './event.js';\nimport { createElement } from './formattedTextRenderer.js';\nimport { StandardKeyboardEvent } from './keyboardEvent.js';\nimport { StandardMouseEvent } from './mouseEvent.js';\nimport { renderLabelWithIcons } from './ui/iconLabel/iconLabels.js';\nimport { onUnexpectedError } from '../common/errors.js';\nimport { Event } from '../common/event.js';\nimport { escapeDoubleQuotes, parseHrefAndDimensions, removeMarkdownEscapes } from '../common/htmlContent.js';\nimport { markdownEscapeEscapedIcons } from '../common/iconLabels.js';\nimport { defaultGenerator } from '../common/idGenerator.js';\nimport { Lazy } from '../common/lazy.js';\nimport { DisposableStore, toDisposable } from '../common/lifecycle.js';\nimport { marked } from '../common/marked/marked.js';\nimport { parse } from '../common/marshalling.js';\nimport { FileAccess, Schemas } from '../common/network.js';\nimport { cloneAndChange } from '../common/objects.js';\nimport { dirname, resolvePath } from '../common/resources.js';\nimport { escape } from '../common/strings.js';\nimport { URI } from '../common/uri.js';\nconst defaultMarkedRenderers = Object.freeze({\n image: (href, title, text) => {\n let dimensions = [];\n let attributes = [];\n if (href) {\n ({ href, dimensions } = parseHrefAndDimensions(href));\n attributes.push(`src=\"${escapeDoubleQuotes(href)}\"`);\n }\n if (text) {\n attributes.push(`alt=\"${escapeDoubleQuotes(text)}\"`);\n }\n if (title) {\n attributes.push(`title=\"${escapeDoubleQuotes(title)}\"`);\n }\n if (dimensions.length) {\n attributes = attributes.concat(dimensions);\n }\n return '';\n },\n paragraph: (text) => {\n return `

${text}

`;\n },\n link: (href, title, text) => {\n if (typeof href !== 'string') {\n return '';\n }\n // Remove markdown escapes. Workaround for https://github.com/chjj/marked/issues/829\n if (href === text) { // raw link case\n text = removeMarkdownEscapes(text);\n }\n title = typeof title === 'string' ? escapeDoubleQuotes(removeMarkdownEscapes(title)) : '';\n href = removeMarkdownEscapes(href);\n // HTML Encode href\n href = href.replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n return `${text}`;\n },\n});\n/**\n * Low-level way create a html element from a markdown string.\n *\n * **Note** that for most cases you should be using [`MarkdownRenderer`](./src/vs/editor/contrib/markdownRenderer/browser/markdownRenderer.ts)\n * which comes with support for pretty code block rendering and which uses the default way of handling links.\n */\nexport function renderMarkdown(markdown, options = {}, markedOptions = {}) {\n var _a, _b;\n const disposables = new DisposableStore();\n let isDisposed = false;\n const element = createElement(options);\n const _uriMassage = function (part) {\n let data;\n try {\n data = parse(decodeURIComponent(part));\n }\n catch (e) {\n // ignore\n }\n if (!data) {\n return part;\n }\n data = cloneAndChange(data, value => {\n if (markdown.uris && markdown.uris[value]) {\n return URI.revive(markdown.uris[value]);\n }\n else {\n return undefined;\n }\n });\n return encodeURIComponent(JSON.stringify(data));\n };\n const _href = function (href, isDomUri) {\n const data = markdown.uris && markdown.uris[href];\n let uri = URI.revive(data);\n if (isDomUri) {\n if (href.startsWith(Schemas.data + ':')) {\n return href;\n }\n if (!uri) {\n uri = URI.parse(href);\n }\n // this URI will end up as \"src\"-attribute of a dom node\n // and because of that special rewriting needs to be done\n // so that the URI uses a protocol that's understood by\n // browsers (like http or https)\n return FileAccess.uriToBrowserUri(uri).toString(true);\n }\n if (!uri) {\n return href;\n }\n if (URI.parse(href).toString() === uri.toString()) {\n return href; // no transformation performed\n }\n if (uri.query) {\n uri = uri.with({ query: _uriMassage(uri.query) });\n }\n return uri.toString();\n };\n const renderer = new marked.Renderer();\n renderer.image = defaultMarkedRenderers.image;\n renderer.link = defaultMarkedRenderers.link;\n renderer.paragraph = defaultMarkedRenderers.paragraph;\n // Will collect [id, renderedElement] tuples\n const codeBlocks = [];\n const syncCodeBlocks = [];\n if (options.codeBlockRendererSync) {\n renderer.code = (code, lang) => {\n const id = defaultGenerator.nextId();\n const value = options.codeBlockRendererSync(postProcessCodeBlockLanguageId(lang), code);\n syncCodeBlocks.push([id, value]);\n return `
${escape(code)}
`;\n };\n }\n else if (options.codeBlockRenderer) {\n renderer.code = (code, lang) => {\n const id = defaultGenerator.nextId();\n const value = options.codeBlockRenderer(postProcessCodeBlockLanguageId(lang), code);\n codeBlocks.push(value.then(element => [id, element]));\n return `
${escape(code)}
`;\n };\n }\n if (options.actionHandler) {\n const _activateLink = function (event) {\n let target = event.target;\n if (target.tagName !== 'A') {\n target = target.parentElement;\n if (!target || target.tagName !== 'A') {\n return;\n }\n }\n try {\n let href = target.dataset['href'];\n if (href) {\n if (markdown.baseUri) {\n href = resolveWithBaseUri(URI.from(markdown.baseUri), href);\n }\n options.actionHandler.callback(href, event);\n }\n }\n catch (err) {\n onUnexpectedError(err);\n }\n finally {\n event.preventDefault();\n }\n };\n const onClick = options.actionHandler.disposables.add(new DomEmitter(element, 'click'));\n const onAuxClick = options.actionHandler.disposables.add(new DomEmitter(element, 'auxclick'));\n options.actionHandler.disposables.add(Event.any(onClick.event, onAuxClick.event)(e => {\n const mouseEvent = new StandardMouseEvent(DOM.getWindow(element), e);\n if (!mouseEvent.leftButton && !mouseEvent.middleButton) {\n return;\n }\n _activateLink(mouseEvent);\n }));\n options.actionHandler.disposables.add(DOM.addDisposableListener(element, 'keydown', (e) => {\n const keyboardEvent = new StandardKeyboardEvent(e);\n if (!keyboardEvent.equals(10 /* KeyCode.Space */) && !keyboardEvent.equals(3 /* KeyCode.Enter */)) {\n return;\n }\n _activateLink(keyboardEvent);\n }));\n }\n if (!markdown.supportHtml) {\n // TODO: Can we deprecated this in favor of 'supportHtml'?\n // Use our own sanitizer so that we can let through only spans.\n // Otherwise, we'd be letting all html be rendered.\n // If we want to allow markdown permitted tags, then we can delete sanitizer and sanitize.\n // We always pass the output through dompurify after this so that we don't rely on\n // marked for sanitization.\n markedOptions.sanitizer = (html) => {\n var _a;\n if ((_a = options.sanitizerOptions) === null || _a === void 0 ? void 0 : _a.replaceWithPlaintext) {\n return escape(html);\n }\n const match = markdown.isTrusted ? html.match(/^(]+>)|(<\\/\\s*span>)$/) : undefined;\n return match ? html : '';\n };\n markedOptions.sanitize = true;\n markedOptions.silent = true;\n }\n markedOptions.renderer = renderer;\n // values that are too long will freeze the UI\n let value = (_a = markdown.value) !== null && _a !== void 0 ? _a : '';\n if (value.length > 100000) {\n value = `${value.substr(0, 100000)}…`;\n }\n // escape theme icons\n if (markdown.supportThemeIcons) {\n value = markdownEscapeEscapedIcons(value);\n }\n let renderedMarkdown;\n if (options.fillInIncompleteTokens) {\n // The defaults are applied by parse but not lexer()/parser(), and they need to be present\n const opts = {\n ...marked.defaults,\n ...markedOptions\n };\n const tokens = marked.lexer(value, opts);\n const newTokens = fillInIncompleteTokens(tokens);\n renderedMarkdown = marked.parser(newTokens, opts);\n }\n else {\n renderedMarkdown = marked.parse(value, markedOptions);\n }\n // Rewrite theme icons\n if (markdown.supportThemeIcons) {\n const elements = renderLabelWithIcons(renderedMarkdown);\n renderedMarkdown = elements.map(e => typeof e === 'string' ? e : e.outerHTML).join('');\n }\n const htmlParser = new DOMParser();\n const markdownHtmlDoc = htmlParser.parseFromString(sanitizeRenderedMarkdown({ isTrusted: markdown.isTrusted, ...options.sanitizerOptions }, renderedMarkdown), 'text/html');\n markdownHtmlDoc.body.querySelectorAll('img, audio, video, source')\n .forEach(img => {\n const src = img.getAttribute('src'); // Get the raw 'src' attribute value as text, not the resolved 'src'\n if (src) {\n let href = src;\n try {\n if (markdown.baseUri) { // absolute or relative local path, or file: uri\n href = resolveWithBaseUri(URI.from(markdown.baseUri), href);\n }\n }\n catch (err) { }\n img.setAttribute('src', _href(href, true));\n if (options.remoteImageIsAllowed) {\n const uri = URI.parse(href);\n if (uri.scheme !== Schemas.file && uri.scheme !== Schemas.data && !options.remoteImageIsAllowed(uri)) {\n img.replaceWith(DOM.$('', undefined, img.outerHTML));\n }\n }\n }\n });\n markdownHtmlDoc.body.querySelectorAll('a')\n .forEach(a => {\n const href = a.getAttribute('href'); // Get the raw 'href' attribute value as text, not the resolved 'href'\n a.setAttribute('href', ''); // Clear out href. We use the `data-href` for handling clicks instead\n if (!href\n || /^data:|javascript:/i.test(href)\n || (/^command:/i.test(href) && !markdown.isTrusted)\n || /^command:(\\/\\/\\/)?_workbench\\.downloadResource/i.test(href)) {\n // drop the link\n a.replaceWith(...a.childNodes);\n }\n else {\n let resolvedHref = _href(href, false);\n if (markdown.baseUri) {\n resolvedHref = resolveWithBaseUri(URI.from(markdown.baseUri), href);\n }\n a.dataset.href = resolvedHref;\n }\n });\n element.innerHTML = sanitizeRenderedMarkdown({ isTrusted: markdown.isTrusted, ...options.sanitizerOptions }, markdownHtmlDoc.body.innerHTML);\n if (codeBlocks.length > 0) {\n Promise.all(codeBlocks).then((tuples) => {\n var _a, _b;\n if (isDisposed) {\n return;\n }\n const renderedElements = new Map(tuples);\n const placeholderElements = element.querySelectorAll(`div[data-code]`);\n for (const placeholderElement of placeholderElements) {\n const renderedElement = renderedElements.get((_a = placeholderElement.dataset['code']) !== null && _a !== void 0 ? _a : '');\n if (renderedElement) {\n DOM.reset(placeholderElement, renderedElement);\n }\n }\n (_b = options.asyncRenderCallback) === null || _b === void 0 ? void 0 : _b.call(options);\n });\n }\n else if (syncCodeBlocks.length > 0) {\n const renderedElements = new Map(syncCodeBlocks);\n const placeholderElements = element.querySelectorAll(`div[data-code]`);\n for (const placeholderElement of placeholderElements) {\n const renderedElement = renderedElements.get((_b = placeholderElement.dataset['code']) !== null && _b !== void 0 ? _b : '');\n if (renderedElement) {\n DOM.reset(placeholderElement, renderedElement);\n }\n }\n }\n // signal size changes for image tags\n if (options.asyncRenderCallback) {\n for (const img of element.getElementsByTagName('img')) {\n const listener = disposables.add(DOM.addDisposableListener(img, 'load', () => {\n listener.dispose();\n options.asyncRenderCallback();\n }));\n }\n }\n return {\n element,\n dispose: () => {\n isDisposed = true;\n disposables.dispose();\n }\n };\n}\nfunction postProcessCodeBlockLanguageId(lang) {\n if (!lang) {\n return '';\n }\n const parts = lang.split(/[\\s+|:|,|\\{|\\?]/, 1);\n if (parts.length) {\n return parts[0];\n }\n return lang;\n}\nfunction resolveWithBaseUri(baseUri, href) {\n const hasScheme = /^\\w[\\w\\d+.-]*:/.test(href);\n if (hasScheme) {\n return href;\n }\n if (baseUri.path.endsWith('/')) {\n return resolvePath(baseUri, href).toString();\n }\n else {\n return resolvePath(dirname(baseUri), href).toString();\n }\n}\nconst selfClosingTags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\nfunction sanitizeRenderedMarkdown(options, renderedMarkdown) {\n const { config, allowedSchemes } = getSanitizerOptions(options);\n const store = new DisposableStore();\n store.add(addDompurifyHook('uponSanitizeAttribute', (element, e) => {\n var _a;\n if (e.attrName === 'style' || e.attrName === 'class') {\n if (element.tagName === 'SPAN') {\n if (e.attrName === 'style') {\n e.keepAttr = /^(color\\:(#[0-9a-fA-F]+|var\\(--vscode(-[a-zA-Z]+)+\\));)?(background-color\\:(#[0-9a-fA-F]+|var\\(--vscode(-[a-zA-Z]+)+\\));)?$/.test(e.attrValue);\n return;\n }\n else if (e.attrName === 'class') {\n e.keepAttr = /^codicon codicon-[a-z\\-]+( codicon-modifier-[a-z\\-]+)?$/.test(e.attrValue);\n return;\n }\n }\n e.keepAttr = false;\n return;\n }\n else if (element.tagName === 'INPUT' && ((_a = element.attributes.getNamedItem('type')) === null || _a === void 0 ? void 0 : _a.value) === 'checkbox') {\n if ((e.attrName === 'type' && e.attrValue === 'checkbox') || e.attrName === 'disabled' || e.attrName === 'checked') {\n e.keepAttr = true;\n return;\n }\n e.keepAttr = false;\n }\n }));\n store.add(addDompurifyHook('uponSanitizeElement', (element, e) => {\n var _a, _b;\n if (e.tagName === 'input') {\n if (((_a = element.attributes.getNamedItem('type')) === null || _a === void 0 ? void 0 : _a.value) === 'checkbox') {\n element.setAttribute('disabled', '');\n }\n else if (!options.replaceWithPlaintext) {\n (_b = element.parentElement) === null || _b === void 0 ? void 0 : _b.removeChild(element);\n }\n }\n if (options.replaceWithPlaintext && !e.allowedTags[e.tagName] && e.tagName !== 'body') {\n if (element.parentElement) {\n let startTagText;\n let endTagText;\n if (e.tagName === '#comment') {\n startTagText = ``;\n }\n else {\n const isSelfClosing = selfClosingTags.includes(e.tagName);\n const attrString = element.attributes.length ?\n ' ' + Array.from(element.attributes)\n .map(attr => `${attr.name}=\"${attr.value}\"`)\n .join(' ')\n : '';\n startTagText = `<${e.tagName}${attrString}>`;\n if (!isSelfClosing) {\n endTagText = ``;\n }\n }\n const fragment = document.createDocumentFragment();\n const textNode = element.parentElement.ownerDocument.createTextNode(startTagText);\n fragment.appendChild(textNode);\n const endTagTextNode = endTagText ? element.parentElement.ownerDocument.createTextNode(endTagText) : undefined;\n while (element.firstChild) {\n fragment.appendChild(element.firstChild);\n }\n if (endTagTextNode) {\n fragment.appendChild(endTagTextNode);\n }\n element.parentElement.replaceChild(fragment, element);\n }\n }\n }));\n store.add(DOM.hookDomPurifyHrefAndSrcSanitizer(allowedSchemes));\n try {\n return dompurify.sanitize(renderedMarkdown, { ...config, RETURN_TRUSTED_TYPE: true });\n }\n finally {\n store.dispose();\n }\n}\nexport const allowedMarkdownAttr = [\n 'align',\n 'autoplay',\n 'alt',\n 'checked',\n 'class',\n 'controls',\n 'data-code',\n 'data-href',\n 'disabled',\n 'draggable',\n 'height',\n 'href',\n 'loop',\n 'muted',\n 'playsinline',\n 'poster',\n 'src',\n 'style',\n 'target',\n 'title',\n 'type',\n 'width',\n 'start',\n];\nfunction getSanitizerOptions(options) {\n var _a;\n const allowedSchemes = [\n Schemas.http,\n Schemas.https,\n Schemas.mailto,\n Schemas.data,\n Schemas.file,\n Schemas.vscodeFileResource,\n Schemas.vscodeRemote,\n Schemas.vscodeRemoteResource,\n ];\n if (options.isTrusted) {\n allowedSchemes.push(Schemas.command);\n }\n return {\n config: {\n // allowedTags should included everything that markdown renders to.\n // Since we have our own sanitize function for marked, it's possible we missed some tag so let dompurify make sure.\n // HTML tags that can result from markdown are from reading https://spec.commonmark.org/0.29/\n // HTML table tags that can result from markdown are from https://github.github.com/gfm/#tables-extension-\n ALLOWED_TAGS: (_a = options.allowedTags) !== null && _a !== void 0 ? _a : [...DOM.basicMarkupHtmlTags],\n ALLOWED_ATTR: allowedMarkdownAttr,\n ALLOW_UNKNOWN_PROTOCOLS: true,\n },\n allowedSchemes\n };\n}\n/**\n * Strips all markdown from `string`, if it's an IMarkdownString. For example\n * `# Header` would be output as `Header`. If it's not, the string is returned.\n */\nexport function renderStringAsPlaintext(string) {\n return typeof string === 'string' ? string : renderMarkdownAsPlaintext(string);\n}\n/**\n * Strips all markdown from `markdown`. For example `# Header` would be output as `Header`.\n * provide @param withCodeBlocks to retain code blocks\n */\nexport function renderMarkdownAsPlaintext(markdown, withCodeBlocks) {\n var _a;\n // values that are too long will freeze the UI\n let value = (_a = markdown.value) !== null && _a !== void 0 ? _a : '';\n if (value.length > 100000) {\n value = `${value.substr(0, 100000)}…`;\n }\n const html = marked.parse(value, { renderer: withCodeBlocks ? plainTextWithCodeBlocksRenderer.value : plainTextRenderer.value }).replace(/&(#\\d+|[a-zA-Z]+);/g, m => { var _a; return (_a = unescapeInfo.get(m)) !== null && _a !== void 0 ? _a : m; });\n return sanitizeRenderedMarkdown({ isTrusted: false }, html).toString();\n}\nconst unescapeInfo = new Map([\n ['"', '\"'],\n [' ', ' '],\n ['&', '&'],\n [''', '\\''],\n ['<', '<'],\n ['>', '>'],\n]);\nfunction createRenderer() {\n const renderer = new marked.Renderer();\n renderer.code = (code) => {\n return code;\n };\n renderer.blockquote = (quote) => {\n return quote;\n };\n renderer.html = (_html) => {\n return '';\n };\n renderer.heading = (text, _level, _raw) => {\n return text + '\\n';\n };\n renderer.hr = () => {\n return '';\n };\n renderer.list = (body, _ordered) => {\n return body;\n };\n renderer.listitem = (text) => {\n return text + '\\n';\n };\n renderer.paragraph = (text) => {\n return text + '\\n';\n };\n renderer.table = (header, body) => {\n return header + body + '\\n';\n };\n renderer.tablerow = (content) => {\n return content;\n };\n renderer.tablecell = (content, _flags) => {\n return content + ' ';\n };\n renderer.strong = (text) => {\n return text;\n };\n renderer.em = (text) => {\n return text;\n };\n renderer.codespan = (code) => {\n return code;\n };\n renderer.br = () => {\n return '\\n';\n };\n renderer.del = (text) => {\n return text;\n };\n renderer.image = (_href, _title, _text) => {\n return '';\n };\n renderer.text = (text) => {\n return text;\n };\n renderer.link = (_href, _title, text) => {\n return text;\n };\n return renderer;\n}\nconst plainTextRenderer = new Lazy((withCodeBlocks) => createRenderer());\nconst plainTextWithCodeBlocksRenderer = new Lazy(() => {\n const renderer = createRenderer();\n renderer.code = (code) => {\n return '\\n' + '```' + code + '```' + '\\n';\n };\n return renderer;\n});\nfunction mergeRawTokenText(tokens) {\n let mergedTokenText = '';\n tokens.forEach(token => {\n mergedTokenText += token.raw;\n });\n return mergedTokenText;\n}\nfunction completeSingleLinePattern(token) {\n var _a, _b;\n if (!token.tokens) {\n return undefined;\n }\n for (let i = token.tokens.length - 1; i >= 0; i--) {\n const subtoken = token.tokens[i];\n if (subtoken.type === 'text') {\n const lines = subtoken.raw.split('\\n');\n const lastLine = lines[lines.length - 1];\n if (lastLine.includes('`')) {\n return completeCodespan(token);\n }\n else if (lastLine.includes('**')) {\n return completeDoublestar(token);\n }\n else if (lastLine.match(/\\*\\w/)) {\n return completeStar(token);\n }\n else if (lastLine.match(/(^|\\s)__\\w/)) {\n return completeDoubleUnderscore(token);\n }\n else if (lastLine.match(/(^|\\s)_\\w/)) {\n return completeUnderscore(token);\n }\n else if (\n // Text with start of link target\n hasLinkTextAndStartOfLinkTarget(lastLine) ||\n // This token doesn't have the link text, eg if it contains other markdown constructs that are in other subtokens.\n // But some preceding token does have an unbalanced [ at least\n hasStartOfLinkTargetAndNoLinkText(lastLine) && token.tokens.slice(0, i).some(t => t.type === 'text' && t.raw.match(/\\[[^\\]]*$/))) {\n const nextTwoSubTokens = token.tokens.slice(i + 1);\n // A markdown link can look like\n // [link text](https://microsoft.com \"more text\")\n // Where \"more text\" is a title for the link or an argument to a vscode command link\n if (\n // If the link was parsed as a link, then look for a link token and a text token with a quote\n ((_a = nextTwoSubTokens[0]) === null || _a === void 0 ? void 0 : _a.type) === 'link' && ((_b = nextTwoSubTokens[1]) === null || _b === void 0 ? void 0 : _b.type) === 'text' && nextTwoSubTokens[1].raw.match(/^ *\"[^\"]*$/) ||\n // And if the link was not parsed as a link (eg command link), just look for a single quote in this token\n lastLine.match(/^[^\"]* +\"[^\"]*$/)) {\n return completeLinkTargetArg(token);\n }\n return completeLinkTarget(token);\n }\n // Contains the start of link text, and no following tokens contain the link target\n else if (lastLine.match(/(^|\\s)\\[\\w*/)) {\n return completeLinkText(token);\n }\n }\n }\n return undefined;\n}\nfunction hasLinkTextAndStartOfLinkTarget(str) {\n return !!str.match(/(^|\\s)\\[.*\\]\\(\\w*/);\n}\nfunction hasStartOfLinkTargetAndNoLinkText(str) {\n return !!str.match(/^[^\\[]*\\]\\([^\\)]*$/);\n}\nfunction completeListItemPattern(list) {\n var _a;\n // Patch up this one list item\n const lastListItem = list.items[list.items.length - 1];\n const lastListSubToken = lastListItem.tokens ? lastListItem.tokens[lastListItem.tokens.length - 1] : undefined;\n /*\n Example list token structures:\n\n list\n list_item\n text\n text\n codespan\n link\n list_item\n text\n code // Complete indented codeblock\n list_item\n text\n space\n text\n text // Incomplete indented codeblock\n list_item\n text\n list // Nested list\n list_item\n text\n text\n\n Contrast with paragraph:\n paragraph\n text\n codespan\n */\n let newToken;\n if ((lastListSubToken === null || lastListSubToken === void 0 ? void 0 : lastListSubToken.type) === 'text' && !('inRawBlock' in lastListItem)) { // Why does Tag have a type of 'text'\n newToken = completeSingleLinePattern(lastListSubToken);\n }\n if (!newToken || newToken.type !== 'paragraph') { // 'text' item inside the list item turns into paragraph\n // Nothing to fix, or not a pattern we were expecting\n return;\n }\n const previousListItemsText = mergeRawTokenText(list.items.slice(0, -1));\n // Grabbing the `- ` or `1. ` off the list item because I can't find a better way to do this\n const lastListItemLead = (_a = lastListItem.raw.match(/^(\\s*(-|\\d+\\.) +)/)) === null || _a === void 0 ? void 0 : _a[0];\n if (!lastListItemLead) {\n // Is badly formatted\n return;\n }\n const newListItemText = lastListItemLead +\n mergeRawTokenText(lastListItem.tokens.slice(0, -1)) +\n newToken.raw;\n const newList = marked.lexer(previousListItemsText + newListItemText)[0];\n if (newList.type !== 'list') {\n // Something went wrong\n return;\n }\n return newList;\n}\nconst maxIncompleteTokensFixRounds = 3;\nexport function fillInIncompleteTokens(tokens) {\n for (let i = 0; i < maxIncompleteTokensFixRounds; i++) {\n const newTokens = fillInIncompleteTokensOnce(tokens);\n if (newTokens) {\n tokens = newTokens;\n }\n else {\n break;\n }\n }\n return tokens;\n}\nfunction fillInIncompleteTokensOnce(tokens) {\n let i;\n let newTokens;\n for (i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n let codeblockStart;\n if (token.type === 'paragraph' && (codeblockStart = token.raw.match(/(\\n|^)(````*)/))) {\n const codeblockLead = codeblockStart[2];\n // If the code block was complete, it would be in a type='code'\n newTokens = completeCodeBlock(tokens.slice(i), codeblockLead);\n break;\n }\n if (token.type === 'paragraph' && token.raw.match(/(\\n|^)\\|/)) {\n newTokens = completeTable(tokens.slice(i));\n break;\n }\n if (i === tokens.length - 1 && token.type === 'list') {\n const newListToken = completeListItemPattern(token);\n if (newListToken) {\n newTokens = [newListToken];\n break;\n }\n }\n if (i === tokens.length - 1 && token.type === 'paragraph') {\n // Only operates on a single token, because any newline that follows this should break these patterns\n const newToken = completeSingleLinePattern(token);\n if (newToken) {\n newTokens = [newToken];\n break;\n }\n }\n }\n if (newTokens) {\n const newTokensList = [\n ...tokens.slice(0, i),\n ...newTokens\n ];\n newTokensList.links = tokens.links;\n return newTokensList;\n }\n return null;\n}\nfunction completeCodeBlock(tokens, leader) {\n const mergedRawText = mergeRawTokenText(tokens);\n return marked.lexer(mergedRawText + `\\n${leader}`);\n}\nfunction completeCodespan(token) {\n return completeWithString(token, '`');\n}\nfunction completeStar(tokens) {\n return completeWithString(tokens, '*');\n}\nfunction completeUnderscore(tokens) {\n return completeWithString(tokens, '_');\n}\nfunction completeLinkTarget(tokens) {\n return completeWithString(tokens, ')');\n}\nfunction completeLinkTargetArg(tokens) {\n return completeWithString(tokens, '\")');\n}\nfunction completeLinkText(tokens) {\n return completeWithString(tokens, '](https://microsoft.com)');\n}\nfunction completeDoublestar(tokens) {\n return completeWithString(tokens, '**');\n}\nfunction completeDoubleUnderscore(tokens) {\n return completeWithString(tokens, '__');\n}\nfunction completeWithString(tokens, closingString) {\n const mergedRawText = mergeRawTokenText(Array.isArray(tokens) ? tokens : [tokens]);\n // If it was completed correctly, this should be a single token.\n // Expecting either a Paragraph or a List\n return marked.lexer(mergedRawText + closingString)[0];\n}\nfunction completeTable(tokens) {\n const mergedRawText = mergeRawTokenText(tokens);\n const lines = mergedRawText.split('\\n');\n let numCols; // The number of line1 col headers\n let hasSeparatorRow = false;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (typeof numCols === 'undefined' && line.match(/^\\s*\\|/)) {\n const line1Matches = line.match(/(\\|[^\\|]+)(?=\\||$)/g);\n if (line1Matches) {\n numCols = line1Matches.length;\n }\n }\n else if (typeof numCols === 'number') {\n if (line.match(/^\\s*\\|/)) {\n if (i !== lines.length - 1) {\n // We got the line1 header row, and the line2 separator row, but there are more lines, and it wasn't parsed as a table!\n // That's strange and means that the table is probably malformed in the source, so I won't try to patch it up.\n return undefined;\n }\n // Got a line2 separator row- partial or complete, doesn't matter, we'll replace it with a correct one\n hasSeparatorRow = true;\n }\n else {\n // The line after the header row isn't a valid separator row, so the table is malformed, don't fix it up\n return undefined;\n }\n }\n }\n if (typeof numCols === 'number' && numCols > 0) {\n const prefixText = hasSeparatorRow ? lines.slice(0, -1).join('\\n') : mergedRawText;\n const line1EndsInPipe = !!prefixText.match(/\\|\\s*$/);\n const newRawText = prefixText + (line1EndsInPipe ? '' : '|') + `\\n|${' --- |'.repeat(numCols)}`;\n return marked.lexer(newRawText);\n }\n return undefined;\n}\nfunction addDompurifyHook(hook, cb) {\n dompurify.addHook(hook, cb);\n return toDisposable(() => dompurify.removeHook(hook));\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nconst sameOriginWindowChainCache = new WeakMap();\nfunction getParentWindowIfSameOrigin(w) {\n if (!w.parent || w.parent === w) {\n return null;\n }\n // Cannot really tell if we have access to the parent window unless we try to access something in it\n try {\n const location = w.location;\n const parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n return null;\n }\n }\n catch (e) {\n return null;\n }\n return w.parent;\n}\nexport class IframeUtils {\n /**\n * Returns a chain of embedded windows with the same origin (which can be accessed programmatically).\n * Having a chain of length 1 might mean that the current execution environment is running outside of an iframe or inside an iframe embedded in a window with a different origin.\n */\n static getSameOriginWindowChain(targetWindow) {\n let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n if (!windowChainCache) {\n windowChainCache = [];\n sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n let w = targetWindow;\n let parent;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: w.frameElement || null\n });\n }\n else {\n windowChainCache.push({\n window: new WeakRef(w),\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return windowChainCache.slice(0);\n }\n /**\n * Returns the position of `childWindow` relative to `ancestorWindow`\n */\n static getPositionOfChildWindowRelativeToAncestorWindow(childWindow, ancestorWindow) {\n var _a, _b;\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n let top = 0, left = 0;\n const windowChain = this.getSameOriginWindowChain(childWindow);\n for (const windowChainEl of windowChain) {\n const windowInChain = windowChainEl.window.deref();\n top += (_a = windowInChain === null || windowInChain === void 0 ? void 0 : windowInChain.scrollY) !== null && _a !== void 0 ? _a : 0;\n left += (_b = windowInChain === null || windowInChain === void 0 ? void 0 : windowInChain.scrollX) !== null && _b !== void 0 ? _b : 0;\n if (windowInChain === ancestorWindow) {\n break;\n }\n if (!windowChainEl.iframeElement) {\n break;\n }\n const boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n return {\n top: top,\n left: left\n };\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport { IframeUtils } from './iframe.js';\nimport * as platform from '../common/platform.js';\nexport class StandardMouseEvent {\n constructor(targetWindow, e) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n this.target = e.target;\n this.detail = e.detail || 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n }\n else {\n // Probably hit by MSGestureEvent\n this.posx = e.clientX + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.documentElement.scrollTop;\n }\n // Find the position of the iframe this code is executing in relative to the iframe where the event was captured.\n const iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n preventDefault() {\n this.browserEvent.preventDefault();\n }\n stopPropagation() {\n this.browserEvent.stopPropagation();\n }\n}\nexport class StandardWheelEvent {\n constructor(e, deltaX = 0, deltaY = 0) {\n var _a;\n this.browserEvent = e || null;\n this.target = e ? (e.target || e.targetNode || e.srcElement) : null;\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n let shouldFactorDPR = false;\n if (browser.isChrome) {\n // Chrome version >= 123 contains the fix to factor devicePixelRatio into the wheel event.\n // See https://chromium.googlesource.com/chromium/src.git/+/be51b448441ff0c9d1f17e0f25c4bf1ab3f11f61\n const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1]) : 123;\n shouldFactorDPR = chromeMajorVersion <= 122;\n }\n if (e) {\n // Old (deprecated) wheel events\n const e1 = e;\n const e2 = e;\n const devicePixelRatio = ((_a = e.view) === null || _a === void 0 ? void 0 : _a.devicePixelRatio) || 1;\n // vertical delta scroll\n if (typeof e1.wheelDeltaY !== 'undefined') {\n if (shouldFactorDPR) {\n // Refs https://github.com/microsoft/vscode/issues/146403#issuecomment-1854538928\n this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n }\n else {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n }\n else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n }\n else if (e.type === 'wheel') {\n // Modern wheel event\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\n const ev = e;\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n // the deltas are expressed in lines\n if (browser.isFirefox && !platform.isMacintosh) {\n this.deltaY = -e.deltaY / 3;\n }\n else {\n this.deltaY = -e.deltaY;\n }\n }\n else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n // horizontal delta scroll\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (browser.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n }\n else if (shouldFactorDPR) {\n // Refs https://github.com/microsoft/vscode/issues/146403#issuecomment-1854538928\n this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\n }\n else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n }\n else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n }\n else if (e.type === 'wheel') {\n // Modern wheel event\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\n const ev = e;\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n // the deltas are expressed in lines\n if (browser.isFirefox && !platform.isMacintosh) {\n this.deltaX = -e.deltaX / 3;\n }\n else {\n this.deltaX = -e.deltaX;\n }\n }\n else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n // Assume a vertical scroll if nothing else worked\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n if (shouldFactorDPR) {\n // Refs https://github.com/microsoft/vscode/issues/146403#issuecomment-1854538928\n this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n }\n else {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n }\n preventDefault() {\n var _a;\n (_a = this.browserEvent) === null || _a === void 0 ? void 0 : _a.preventDefault();\n }\n stopPropagation() {\n var _a;\n (_a = this.browserEvent) === null || _a === void 0 ? void 0 : _a.stopPropagation();\n }\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexport var inputLatency;\n(function (inputLatency) {\n const totalKeydownTime = { total: 0, min: Number.MAX_VALUE, max: 0 };\n const totalInputTime = { ...totalKeydownTime };\n const totalRenderTime = { ...totalKeydownTime };\n const totalInputLatencyTime = { ...totalKeydownTime };\n let measurementsCount = 0;\n const state = {\n keydown: 0 /* EventPhase.Before */,\n input: 0 /* EventPhase.Before */,\n render: 0 /* EventPhase.Before */,\n };\n /**\n * Record the start of the keydown event.\n */\n function onKeyDown() {\n /** Direct Check C. See explanation in {@link recordIfFinished} */\n recordIfFinished();\n performance.mark('inputlatency/start');\n performance.mark('keydown/start');\n state.keydown = 1 /* EventPhase.InProgress */;\n queueMicrotask(markKeyDownEnd);\n }\n inputLatency.onKeyDown = onKeyDown;\n /**\n * Mark the end of the keydown event.\n */\n function markKeyDownEnd() {\n if (state.keydown === 1 /* EventPhase.InProgress */) {\n performance.mark('keydown/end');\n state.keydown = 2 /* EventPhase.Finished */;\n }\n }\n /**\n * Record the start of the beforeinput event.\n */\n function onBeforeInput() {\n performance.mark('input/start');\n state.input = 1 /* EventPhase.InProgress */;\n /** Schedule Task A. See explanation in {@link recordIfFinished} */\n scheduleRecordIfFinishedTask();\n }\n inputLatency.onBeforeInput = onBeforeInput;\n /**\n * Record the start of the input event.\n */\n function onInput() {\n if (state.input === 0 /* EventPhase.Before */) {\n // it looks like we didn't receive a `beforeinput`\n onBeforeInput();\n }\n queueMicrotask(markInputEnd);\n }\n inputLatency.onInput = onInput;\n function markInputEnd() {\n if (state.input === 1 /* EventPhase.InProgress */) {\n performance.mark('input/end');\n state.input = 2 /* EventPhase.Finished */;\n }\n }\n /**\n * Record the start of the keyup event.\n */\n function onKeyUp() {\n /** Direct Check D. See explanation in {@link recordIfFinished} */\n recordIfFinished();\n }\n inputLatency.onKeyUp = onKeyUp;\n /**\n * Record the start of the selectionchange event.\n */\n function onSelectionChange() {\n /** Direct Check E. See explanation in {@link recordIfFinished} */\n recordIfFinished();\n }\n inputLatency.onSelectionChange = onSelectionChange;\n /**\n * Record the start of the animation frame performing the rendering.\n */\n function onRenderStart() {\n // Render may be triggered during input, but we only measure the following animation frame\n if (state.keydown === 2 /* EventPhase.Finished */ && state.input === 2 /* EventPhase.Finished */ && state.render === 0 /* EventPhase.Before */) {\n // Only measure the first render after keyboard input\n performance.mark('render/start');\n state.render = 1 /* EventPhase.InProgress */;\n queueMicrotask(markRenderEnd);\n /** Schedule Task B. See explanation in {@link recordIfFinished} */\n scheduleRecordIfFinishedTask();\n }\n }\n inputLatency.onRenderStart = onRenderStart;\n /**\n * Mark the end of the animation frame performing the rendering.\n */\n function markRenderEnd() {\n if (state.render === 1 /* EventPhase.InProgress */) {\n performance.mark('render/end');\n state.render = 2 /* EventPhase.Finished */;\n }\n }\n function scheduleRecordIfFinishedTask() {\n // Here we can safely assume that the `setTimeout` will not be\n // artificially delayed by 4ms because we schedule it from\n // event handlers\n setTimeout(recordIfFinished);\n }\n /**\n * Record the input latency sample if input handling and rendering are finished.\n *\n * The challenge here is that we want to record the latency in such a way that it includes\n * also the layout and painting work the browser does during the animation frame task.\n *\n * Simply scheduling a new task (via `setTimeout`) from the animation frame task would\n * schedule the new task at the end of the task queue (after other code that uses `setTimeout`),\n * so we need to use multiple strategies to make sure our task runs before others:\n *\n * We schedule tasks (A and B):\n * - we schedule a task A (via a `setTimeout` call) when the input starts in `markInputStart`.\n * If the animation frame task is scheduled quickly by the browser, then task A has a very good\n * chance of being the very first task after the animation frame and thus will record the input latency.\n * - however, if the animation frame task is scheduled a bit later, then task A might execute\n * before the animation frame task. We therefore schedule another task B from `markRenderStart`.\n *\n * We do direct checks in browser event handlers (C, D, E):\n * - if the browser has multiple keydown events queued up, they will be scheduled before the `setTimeout` tasks,\n * so we do a direct check in the keydown event handler (C).\n * - depending on timing, sometimes the animation frame is scheduled even before the `keyup` event, so we\n * do a direct check there too (E).\n * - the browser oftentimes emits a `selectionchange` event after an `input`, so we do a direct check there (D).\n */\n function recordIfFinished() {\n if (state.keydown === 2 /* EventPhase.Finished */ && state.input === 2 /* EventPhase.Finished */ && state.render === 2 /* EventPhase.Finished */) {\n performance.mark('inputlatency/end');\n performance.measure('keydown', 'keydown/start', 'keydown/end');\n performance.measure('input', 'input/start', 'input/end');\n performance.measure('render', 'render/start', 'render/end');\n performance.measure('inputlatency', 'inputlatency/start', 'inputlatency/end');\n addMeasure('keydown', totalKeydownTime);\n addMeasure('input', totalInputTime);\n addMeasure('render', totalRenderTime);\n addMeasure('inputlatency', totalInputLatencyTime);\n // console.info(\n // \t`input latency=${performance.getEntriesByName('inputlatency')[0].duration.toFixed(1)} [` +\n // \t`keydown=${performance.getEntriesByName('keydown')[0].duration.toFixed(1)}, ` +\n // \t`input=${performance.getEntriesByName('input')[0].duration.toFixed(1)}, ` +\n // \t`render=${performance.getEntriesByName('render')[0].duration.toFixed(1)}` +\n // \t`]`\n // );\n measurementsCount++;\n reset();\n }\n }\n function addMeasure(entryName, cumulativeMeasurement) {\n const duration = performance.getEntriesByName(entryName)[0].duration;\n cumulativeMeasurement.total += duration;\n cumulativeMeasurement.min = Math.min(cumulativeMeasurement.min, duration);\n cumulativeMeasurement.max = Math.max(cumulativeMeasurement.max, duration);\n }\n /**\n * Clear the current sample.\n */\n function reset() {\n performance.clearMarks('keydown/start');\n performance.clearMarks('keydown/end');\n performance.clearMarks('input/start');\n performance.clearMarks('input/end');\n performance.clearMarks('render/start');\n performance.clearMarks('render/end');\n performance.clearMarks('inputlatency/start');\n performance.clearMarks('inputlatency/end');\n performance.clearMeasures('keydown');\n performance.clearMeasures('input');\n performance.clearMeasures('render');\n performance.clearMeasures('inputlatency');\n state.keydown = 0 /* EventPhase.Before */;\n state.input = 0 /* EventPhase.Before */;\n state.render = 0 /* EventPhase.Before */;\n }\n /**\n * Gets all input latency samples and clears the internal buffers to start recording a new set\n * of samples.\n */\n function getAndClearMeasurements() {\n if (measurementsCount === 0) {\n return undefined;\n }\n // Assemble the result\n const result = {\n keydown: cumulativeToFinalMeasurement(totalKeydownTime),\n input: cumulativeToFinalMeasurement(totalInputTime),\n render: cumulativeToFinalMeasurement(totalRenderTime),\n total: cumulativeToFinalMeasurement(totalInputLatencyTime),\n sampleCount: measurementsCount\n };\n // Clear the cumulative measurements\n clearCumulativeMeasurement(totalKeydownTime);\n clearCumulativeMeasurement(totalInputTime);\n clearCumulativeMeasurement(totalRenderTime);\n clearCumulativeMeasurement(totalInputLatencyTime);\n measurementsCount = 0;\n return result;\n }\n inputLatency.getAndClearMeasurements = getAndClearMeasurements;\n function cumulativeToFinalMeasurement(cumulative) {\n return {\n average: cumulative.total / measurementsCount,\n max: cumulative.max,\n min: cumulative.min,\n };\n }\n function clearCumulativeMeasurement(cumulative) {\n cumulative.total = 0;\n cumulative.min = Number.MAX_VALUE;\n cumulative.max = 0;\n }\n})(inputLatency || (inputLatency = {}));\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getWindowId, onDidUnregisterWindow } from './dom.js';\nimport { Emitter, Event } from '../common/event.js';\nimport { Disposable, markAsSingleton } from '../common/lifecycle.js';\n/**\n * See https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#monitoring_screen_resolution_or_zoom_level_changes\n */\nclass DevicePixelRatioMonitor extends Disposable {\n constructor(targetWindow) {\n super();\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._listener = () => this._handleChange(targetWindow, true);\n this._mediaQueryList = null;\n this._handleChange(targetWindow, false);\n }\n _handleChange(targetWindow, fireEvent) {\n var _a;\n (_a = this._mediaQueryList) === null || _a === void 0 ? void 0 : _a.removeEventListener('change', this._listener);\n this._mediaQueryList = targetWindow.matchMedia(`(resolution: ${targetWindow.devicePixelRatio}dppx)`);\n this._mediaQueryList.addEventListener('change', this._listener);\n if (fireEvent) {\n this._onDidChange.fire();\n }\n }\n}\nclass PixelRatioMonitorImpl extends Disposable {\n get value() {\n return this._value;\n }\n constructor(targetWindow) {\n super();\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._value = this._getPixelRatio(targetWindow);\n const dprMonitor = this._register(new DevicePixelRatioMonitor(targetWindow));\n this._register(dprMonitor.onDidChange(() => {\n this._value = this._getPixelRatio(targetWindow);\n this._onDidChange.fire(this._value);\n }));\n }\n _getPixelRatio(targetWindow) {\n const ctx = document.createElement('canvas').getContext('2d');\n const dpr = targetWindow.devicePixelRatio || 1;\n const bsr = ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio || 1;\n return dpr / bsr;\n }\n}\nclass PixelRatioMonitorFacade {\n constructor() {\n this.mapWindowIdToPixelRatioMonitor = new Map();\n }\n _getOrCreatePixelRatioMonitor(targetWindow) {\n const targetWindowId = getWindowId(targetWindow);\n let pixelRatioMonitor = this.mapWindowIdToPixelRatioMonitor.get(targetWindowId);\n if (!pixelRatioMonitor) {\n pixelRatioMonitor = markAsSingleton(new PixelRatioMonitorImpl(targetWindow));\n this.mapWindowIdToPixelRatioMonitor.set(targetWindowId, pixelRatioMonitor);\n markAsSingleton(Event.once(onDidUnregisterWindow)(({ vscodeWindowId }) => {\n if (vscodeWindowId === targetWindowId) {\n pixelRatioMonitor === null || pixelRatioMonitor === void 0 ? void 0 : pixelRatioMonitor.dispose();\n this.mapWindowIdToPixelRatioMonitor.delete(targetWindowId);\n }\n }));\n }\n return pixelRatioMonitor;\n }\n getInstance(targetWindow) {\n return this._getOrCreatePixelRatioMonitor(targetWindow);\n }\n}\n/**\n * Returns the pixel ratio.\n *\n * This is useful for rendering elements at native screen resolution or for being used as\n * a cache key when storing font measurements. Fonts might render differently depending on resolution\n * and any measurements need to be discarded for example when a window is moved from a monitor to another.\n */\nexport const PixelRatio = new PixelRatioMonitorFacade();\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport * as DomUtils from './dom.js';\nimport { mainWindow } from './window.js';\nimport * as arrays from '../common/arrays.js';\nimport { memoize } from '../common/decorators.js';\nimport { Event as EventUtils } from '../common/event.js';\nimport { Disposable, markAsSingleton, toDisposable } from '../common/lifecycle.js';\nimport { LinkedList } from '../common/linkedList.js';\nexport var EventType;\n(function (EventType) {\n EventType.Tap = '-monaco-gesturetap';\n EventType.Change = '-monaco-gesturechange';\n EventType.Start = '-monaco-gesturestart';\n EventType.End = '-monaco-gesturesend';\n EventType.Contextmenu = '-monaco-gesturecontextmenu';\n})(EventType || (EventType = {}));\nexport class Gesture extends Disposable {\n constructor() {\n super();\n this.dispatched = false;\n this.targets = new LinkedList();\n this.ignoreTargets = new LinkedList();\n this.activeTouches = {};\n this.handle = null;\n this._lastSetTapCountTime = 0;\n this._register(EventUtils.runAndSubscribe(DomUtils.onDidRegisterWindow, ({ window, disposables }) => {\n disposables.add(DomUtils.addDisposableListener(window.document, 'touchstart', (e) => this.onTouchStart(e), { passive: false }));\n disposables.add(DomUtils.addDisposableListener(window.document, 'touchend', (e) => this.onTouchEnd(window, e)));\n disposables.add(DomUtils.addDisposableListener(window.document, 'touchmove', (e) => this.onTouchMove(e), { passive: false }));\n }, { window: mainWindow, disposables: this._store }));\n }\n static addTarget(element) {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture.INSTANCE) {\n Gesture.INSTANCE = markAsSingleton(new Gesture());\n }\n const remove = Gesture.INSTANCE.targets.push(element);\n return toDisposable(remove);\n }\n static ignoreTarget(element) {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture.INSTANCE) {\n Gesture.INSTANCE = markAsSingleton(new Gesture());\n }\n const remove = Gesture.INSTANCE.ignoreTargets.push(element);\n return toDisposable(remove);\n }\n static isTouchDevice() {\n // `'ontouchstart' in window` always evaluates to true with typescript's modern typings. This causes `window` to be\n // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast\n return 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0;\n }\n dispose() {\n if (this.handle) {\n this.handle.dispose();\n this.handle = null;\n }\n super.dispose();\n }\n onTouchStart(e) {\n const timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n if (this.handle) {\n this.handle.dispose();\n this.handle = null;\n }\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n const touch = e.targetTouches.item(i);\n this.activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n const evt = this.newGestureEvent(EventType.Start, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this.dispatchEvent(evt);\n }\n if (this.dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this.dispatched = false;\n }\n }\n onTouchEnd(targetWindow, e) {\n const timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n const activeTouchCount = Object.keys(this.activeTouches).length;\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n const touch = e.changedTouches.item(i);\n if (!this.activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n const data = this.activeTouches[touch.identifier], holdTime = Date.now() - data.initialTimeStamp;\n if (holdTime < Gesture.HOLD_DELAY\n && Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30\n && Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) {\n const evt = this.newGestureEvent(EventType.Tap, data.initialTarget);\n evt.pageX = arrays.tail(data.rollingPageX);\n evt.pageY = arrays.tail(data.rollingPageY);\n this.dispatchEvent(evt);\n }\n else if (holdTime >= Gesture.HOLD_DELAY\n && Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30\n && Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) {\n const evt = this.newGestureEvent(EventType.Contextmenu, data.initialTarget);\n evt.pageX = arrays.tail(data.rollingPageX);\n evt.pageY = arrays.tail(data.rollingPageY);\n this.dispatchEvent(evt);\n }\n else if (activeTouchCount === 1) {\n const finalX = arrays.tail(data.rollingPageX);\n const finalY = arrays.tail(data.rollingPageY);\n const deltaT = arrays.tail(data.rollingTimestamps) - data.rollingTimestamps[0];\n const deltaX = finalX - data.rollingPageX[0];\n const deltaY = finalY - data.rollingPageY[0];\n // We need to get all the dispatch targets on the start of the inertia event\n const dispatchTo = [...this.targets].filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this.inertia(targetWindow, dispatchTo, timestamp, // time now\n Math.abs(deltaX) / deltaT, // speed\n deltaX > 0 ? 1 : -1, // x direction\n finalX, // x now\n Math.abs(deltaY) / deltaT, // y speed\n deltaY > 0 ? 1 : -1, // y direction\n finalY // y now\n );\n }\n this.dispatchEvent(this.newGestureEvent(EventType.End, data.initialTarget));\n // forget about this touch\n delete this.activeTouches[touch.identifier];\n }\n if (this.dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this.dispatched = false;\n }\n }\n newGestureEvent(type, initialTarget) {\n const event = document.createEvent('CustomEvent');\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n dispatchEvent(event) {\n if (event.type === EventType.Tap) {\n const currentTime = (new Date()).getTime();\n let setTapCount = 0;\n if (currentTime - this._lastSetTapCountTime > Gesture.CLEAR_TAP_COUNT_TIME) {\n setTapCount = 1;\n }\n else {\n setTapCount = 2;\n }\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n }\n else if (event.type === EventType.Change || event.type === EventType.Contextmenu) {\n // tap is canceled by scrolling or context menu\n this._lastSetTapCountTime = 0;\n }\n if (event.initialTarget instanceof Node) {\n for (const ignoreTarget of this.ignoreTargets) {\n if (ignoreTarget.contains(event.initialTarget)) {\n return;\n }\n }\n const targets = [];\n for (const target of this.targets) {\n if (target.contains(event.initialTarget)) {\n let depth = 0;\n let now = event.initialTarget;\n while (now && now !== target) {\n depth++;\n now = now.parentElement;\n }\n targets.push([depth, target]);\n }\n }\n targets.sort((a, b) => a[0] - b[0]);\n for (const [_, target] of targets) {\n target.dispatchEvent(event);\n this.dispatched = true;\n }\n }\n }\n inertia(targetWindow, dispatchTo, t1, vX, dirX, x, vY, dirY, y) {\n this.handle = DomUtils.scheduleAtNextAnimationFrame(targetWindow, () => {\n const now = Date.now();\n // velocity: old speed + accel_over_time\n const deltaT = now - t1;\n let delta_pos_x = 0, delta_pos_y = 0;\n let stopped = true;\n vX += Gesture.SCROLL_FRICTION * deltaT;\n vY += Gesture.SCROLL_FRICTION * deltaT;\n if (vX > 0) {\n stopped = false;\n delta_pos_x = dirX * vX * deltaT;\n }\n if (vY > 0) {\n stopped = false;\n delta_pos_y = dirY * vY * deltaT;\n }\n // dispatch translation event\n const evt = this.newGestureEvent(EventType.Change);\n evt.translationX = delta_pos_x;\n evt.translationY = delta_pos_y;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n if (!stopped) {\n this.inertia(targetWindow, dispatchTo, now, vX, dirX, x + delta_pos_x, vY, dirY, y + delta_pos_y);\n }\n });\n }\n onTouchMove(e) {\n const timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n const touch = e.changedTouches.item(i);\n if (!this.activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n const data = this.activeTouches[touch.identifier];\n const evt = this.newGestureEvent(EventType.Change, data.initialTarget);\n evt.translationX = touch.pageX - arrays.tail(data.rollingPageX);\n evt.translationY = touch.pageY - arrays.tail(data.rollingPageY);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this.dispatchEvent(evt);\n // only keep a few data points, to average the final speed\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n if (this.dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this.dispatched = false;\n }\n }\n}\nGesture.SCROLL_FRICTION = -0.005;\nGesture.HOLD_DELAY = 700;\nGesture.CLEAR_TAP_COUNT_TIME = 400; // ms\n__decorate([\n memoize\n], Gesture, \"isTouchDevice\", null);\n"],"names":["WindowManager","constructor","this","mapWindowIdToZoomFactor","Map","getZoomFactor","targetWindow","_a","get","getWindowId","vscodeWindowId","addMatchMediaChangeListener","query","callback","matchMedia","addEventListener","INSTANCE","userAgent","navigator","isFirefox","indexOf","isWebKit","isChrome","isSafari","isWebkitWebView","isAndroid","standalone","standaloneMatchMedia","fullScreenMatchMedia","matches","isStandalone","BrowserFeatures","clipboard","writeText","document","queryCommandSupported","readText","keyboard","touch","maxTouchPoints","pointerEvents","ttPolicy","createScriptURL","value","WebWorker","moduleId","id","label","onMessageCallback","onErrorCallback","super","workerOrPromise","monacoEnvironment","globalThis","MonacoEnvironment","getWorker","getWorkerUrl","workerUrl","Worker","name","Error","then","worker","Promise","resolve","postMessage","w","onmessage","ev","data","onmessageerror","_register","removeEventListener","terminate","getId","message","transfer","err","cause","DefaultWorkerFactory","_label","_webWorkerFailedBeforeError","create","workerId","LAST_WORKER_ID","DataTransfers","RESOURCES","DOWNLOAD_URL","FILES","TEXT","INTERNAL_URI_LIST","registerWindow","getWindow","getDocument","getWindows","getWindowsCount","getWindowById","hasWindow","onDidRegisterWindow","onWillUnregisterWindow","onDidUnregisterWindow","windows","mainWindowRegistration","window","disposables","set","event","has","registeredWindow","add","delete","fire","addDisposableListener","EventType","BEFORE_UNLOAD","values","size","windowId","fallbackToMain","undefined","e","candidateNode","ownerDocument","defaultView","candidateEvent","view","clearNode","node","firstChild","remove","DomListener","type","handler","options","_node","_type","_handler","_options","dispose","useCaptureOrOptions","_wrapAsStandardMouseEvent","addStandardDisposableListener","useCapture","wrapHandler","_wrapAsStandardKeyboardEvent","addStandardDisposableGenericMouseDownListener","POINTER_DOWN","MOUSE_DOWN","addDisposableGenericMouseDownListener","runWhenWindowIdle","timeout","WindowIdleValue","executor","runAtThisOrScheduleAtNextAnimationFrame","scheduleAtNextAnimationFrame","WindowIntervalTimer","defaultTarget","cancelAndSet","runner","interval","AnimationFrameQueueItem","priority","_runner","_canceled","execute","sort","a","b","getComputedStyle","el","getClientArea","element","fallback","elWindow","elDocument","body","Dimension","clientWidth","clientHeight","visualViewport","width","height","innerWidth","innerHeight","documentElement","NEXT_QUEUE","CURRENT_QUEUE","animFrameRequested","inAnimationFrameRunner","targetWindowId","item","nextQueue","push","requestAnimationFrame","currentQueue","length","shift","animationFrameRunner","SizeUtils","convertToPixels","parseFloat","getDimension","cssPropertyName","jsPropertyName","computedStyle","getPropertyValue","getBorderLeftWidth","getBorderRightWidth","getBorderTopWidth","getBorderBottomWidth","getPaddingLeft","getPaddingRight","getPaddingTop","getPaddingBottom","getMarginLeft","getMarginTop","getMarginRight","getMarginBottom","is","obj","lift","equals","getTopLeftOffset","offsetParent","top","offsetTop","left","offsetLeft","parentNode","scrollTop","c","isShadowRoot","direction","scrollLeft","style","getDomNodePagePosition","domNode","bb","getBoundingClientRect","scrollX","scrollY","getDomNodeZoomLevel","testElement","zoom","elementZoomLevel","parentElement","getTotalWidth","margin","offsetWidth","getContentWidth","border","padding","getContentHeight","offsetHeight","getTotalHeight","isAncestor","testChild","testAncestor","Boolean","contains","hasParentWithClass","clazz","stopAtClazzOrNode","nodeType","ELEMENT_NODE","classList","findParentWithClass","host","mode","isInShadowDOM","getShadowRoot","getActiveElement","result","getActiveDocument","activeElement","shadowRoot","isActiveElement","isAncestorOfActiveElement","ancestor","Array","from","map","find","doc","hasFocus","getActiveWindow","_b","None","globalStylesheets","createStyleSheet2","WrappedStyleElement","_currentCssStyle","_styleSheet","setStyle","cssStyle","innerText","createStyleSheet","s","container","beforeAppend","disposableStore","createElement","media","appendChild","removeChild","globalStylesheetClones","Set","cloneDisposable","cloneGlobalStyleSheet","globalStylesheet","clone","cloneNode","head","rule","getDynamicStyleSheetRules","sheet","insertRule","cssText","cssRules","sharedMutationObserver","observe","childList","textContent","mutationObservers","target","mutationObserversPerTarget","optionsHash","mutationObserverPerOptions","users","onDidMutate","observer","MutationObserver","mutations","resolvedMutationObserverPerOptions","disconnect","_sharedStyleSheet","getSharedStyleSheet","rules","createCSSRule","selector","clonedGlobalStylesheet","removeCSSRulesContainingSelector","ruleName","toDelete","i","isCSSStyleRule","selectorText","deleteRule","isHTMLElement","HTMLElement","isHTMLAnchorElement","HTMLAnchorElement","isMouseEvent","MouseEvent","isKeyboardEvent","KeyboardEvent","CLICK","AUXCLICK","DBLCLICK","MOUSE_UP","MOUSE_OVER","MOUSE_MOVE","MOUSE_OUT","MOUSE_ENTER","MOUSE_LEAVE","MOUSE_WHEEL","POINTER_UP","POINTER_MOVE","POINTER_LEAVE","CONTEXT_MENU","WHEEL","KEY_DOWN","KEY_PRESS","KEY_UP","LOAD","UNLOAD","PAGE_SHOW","PAGE_HIDE","PASTE","ABORT","ERROR","RESIZE","SCROLL","FULLSCREEN_CHANGE","WK_FULLSCREEN_CHANGE","SELECT","CHANGE","SUBMIT","RESET","FOCUS","FOCUS_IN","FOCUS_OUT","BLUR","INPUT","STORAGE","DRAG_START","DRAG","DRAG_ENTER","DRAG_LEAVE","DRAG_OVER","DROP","DRAG_END","ANIMATION_START","ANIMATION_END","ANIMATION_ITERATION","isEventLike","candidate","preventDefault","stopPropagation","EventHelper","stop","cancelBubble","saveParentsScrollTop","r","restoreParentsScrollTop","state","FocusTracker","hasFocusWithin","_onDidFocus","onDidFocus","_onDidBlur","onDidBlur","loosingFocus","onFocus","onBlur","setTimeout","_refreshStateHandler","trackFocus","after","sibling","child","append","parent","children","prepend","insertBefore","reset","SELECTOR_REGEX","Namespace","_$","namespace","description","attrs","match","exec","tagName","HTML","createElementNS","className","replace","trim","Object","entries","forEach","test","setAttribute","$","setVisibility","visible","elements","show","hide","display","removeAttribute","computeScreenAwareSize","cssPx","screenPx","devicePixelRatio","Math","max","floor","windowOpenNoOpener","url","animate","fn","step","stepDisposable","asCSSUrl","uri","toString","asCSSPropertyValue","asCssValueWithDefault","cssPropertyValue","dflt","variableMatch","varArguments","split","hookDomPurifyHrefAndSrcSanitizer","allowedProtocols","allowDataImages","anchor","attr","hasAttribute","attrValue","getAttribute","startsWith","href","includes","protocol","SVG","basicMarkupHtmlTags","freeze","ALLOWED_TAGS","ALLOWED_ATTR","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","ModifierKeyEmitter","_subscriptions","_keyStatus","altKey","shiftKey","ctrlKey","metaKey","registerListeners","defaultPrevented","keyCode","repeat","lastKeyPressed","lastKeyReleased","buttons","resetKeyStatus","keyStatus","doResetKeyStatus","getInstance","instance","DragAndDropObserver","callbacks","counter","dragStartTime","onDragStart","call","onDrag","timeStamp","onDragEnter","onDragOver","onDragLeave","onDragEnd","onDrop","H_REGEX","h","tag","args","attributes","isArray","groups","classNames","join","assign","root","key","cssKey","cssValue","setProperty","camelCaseToHyphenCase","tabIndex","str","toLowerCase","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","seal","apply","construct","Reflect","fun","thisValue","x","Func","arrayForEach","unapply","prototype","arrayPop","pop","arrayPush","stringToLowerCase","String","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","regExpTest","RegExp","typeErrorCreate","func","TypeError","_len2","arguments","_key2","thisArg","_len","_key","addToSet","array","transformCaseFunc","_transformCaseFunc","l","lcElement","object","newObject","property","lookupGetter","prop","desc","console","warn","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","text","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","EXPRESSIONS","__proto__","getGlobal","purify","createDOMPurify","DOMPurify","version","removed","isSupported","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","trustedTypes","ElementPrototype","getNextSibling","getChildNodes","getParentNode","template","content","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","createHTMLDocument","IS_ALLOWED_URI$1","DEFAULT_ALLOWED_TAGS","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","writable","configurable","enumerable","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","SANITIZE_DOM","SANITIZE_NAMED_PROPS","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","testValue","Function","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","TRUSTED_TYPES_POLICY","createHTML","purifyHostElement","createPolicy","suffix","ATTR_NAME","policyName","scriptUrl","_","_createTrustedTypesPolicy","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_forceRemove","_removeAttribute","attribute","getAttributeNode","_initDocument","dirty","leadingWhitespace","dirtyPayload","parseFromString","createDocument","innerHTML","createTextNode","childNodes","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","_isNode","nodeName","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","elm","namespaceURI","hasChildNodes","allowedTags","firstElementChild","_basicCustomElementTest","parentTagName","_checkValidNamespace","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","keepAttr","allowedAttributes","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","returnNode","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","DomEmitter","emitter","onWillAddFirstListener","onDidRemoveLastListener","FastDomNode","_maxWidth","_width","_height","_top","_left","_bottom","_right","_paddingLeft","_fontFamily","_fontWeight","_fontSize","_fontStyle","_fontFeatureSettings","_fontVariationSettings","_textDecoration","_lineHeight","_letterSpacing","_className","_display","_position","_visibility","_color","_backgroundColor","_layerHint","_contain","_boxShadow","setMaxWidth","maxWidth","numberAsPixels","setWidth","setHeight","setTop","setLeft","setBottom","bottom","setRight","right","setPaddingLeft","paddingLeft","setFontFamily","fontFamily","setFontWeight","fontWeight","setFontSize","fontSize","setFontStyle","fontStyle","setFontFeatureSettings","fontFeatureSettings","setFontVariationSettings","fontVariationSettings","setTextDecoration","textDecoration","setLineHeight","lineHeight","setLetterSpacing","letterSpacing","setClassName","toggleClassName","shouldHaveIt","toggle","setDisplay","setPosition","position","visibility","setColor","color","setBackgroundColor","backgroundColor","setLayerHinting","layerHint","transform","setBoxShadow","boxShadow","setContain","contain","createFastDomNode","DEFAULT_FONT_FAMILY","renderText","renderFormattedText","formattedText","_renderFormattedText","parseCodeSegments","actionViewItemIndex","current","stack","stream","StringStream","eos","next","isEscapedFormatType","formatTagType","peek","isFormatTag","advance","newCurrent","index","textCurrent","parseFormattedText","renderCodeSegments","actionHandler","inline","source","treeNode","nodeChild","char","supportCodeSegments","GlobalPointerMoveMonitor","_hooks","_pointerMoveCallback","_onStopCallback","stopMonitoring","invokeStopCallback","browserEvent","isMonitoring","clear","onStopCallback","startMonitoring","initialElement","pointerId","initialButtons","pointerMoveCallback","eventSource","setPointerCapture","releasePointerCapture","ctrlKeyMod","metaKeyMod","StandardKeyboardEvent","_standardKeyboardEventBrand","altGraphKey","getModifierState","charCode","fromCharCode","toUpperCase","extractKeyCode","code","_asKeybinding","_computeKeybinding","_asKeyCodeChord","_computeKeyCodeChord","toKeyCodeChord","other","defaultMarkedRenderers","image","title","dimensions","concat","paragraph","link","renderMarkdown","markdown","markedOptions","isDisposed","_uriMassage","part","decodeURIComponent","uris","encodeURIComponent","JSON","stringify","_href","isDomUri","with","renderer","codeBlocks","syncCodeBlocks","codeBlockRendererSync","lang","postProcessCodeBlockLanguageId","codeBlockRenderer","_activateLink","dataset","baseUri","resolveWithBaseUri","onClick","onAuxClick","mouseEvent","leftButton","middleButton","keyboardEvent","supportHtml","sanitizer","sanitizerOptions","replaceWithPlaintext","isTrusted","silent","renderedMarkdown","substr","supportThemeIcons","fillInIncompleteTokens","opts","newTokens","tokens","maxIncompleteTokensFixRounds","fillInIncompleteTokensOnce","markdownHtmlDoc","sanitizeRenderedMarkdown","querySelectorAll","img","src","remoteImageIsAllowed","scheme","replaceWith","resolvedHref","all","tuples","renderedElements","placeholderElements","placeholderElement","renderedElement","asyncRenderCallback","listener","parts","path","endsWith","selfClosingTags","config","allowedSchemes","allowedMarkdownAttr","getSanitizerOptions","store","addDompurifyHook","getNamedItem","startTagText","endTagText","isSelfClosing","attrString","textNode","endTagTextNode","replaceChild","renderStringAsPlaintext","string","withCodeBlocks","plainTextWithCodeBlocksRenderer","plainTextRenderer","m","unescapeInfo","renderMarkdownAsPlaintext","createRenderer","blockquote","quote","_html","heading","_level","_raw","hr","list","_ordered","listitem","header","tablerow","tablecell","_flags","strong","em","codespan","br","del","_title","_text","mergeRawTokenText","mergedTokenText","token","raw","completeSingleLinePattern","subtoken","lines","lastLine","completeCodespan","completeWithString","completeStar","completeDoubleUnderscore","completeUnderscore","hasStartOfLinkTargetAndNoLinkText","slice","some","t","nextTwoSubTokens","completeLinkTargetArg","completeLinkTarget","completeLinkText","completeListItemPattern","lastListItem","items","lastListSubToken","newToken","previousListItemsText","lastListItemLead","newListItemText","newList","codeblockStart","codeblockLead","completeCodeBlock","completeTable","newListToken","newTokensList","links","leader","mergedRawText","closingString","numCols","hasSeparatorRow","line","line1Matches","prefixText","line1EndsInPipe","newRawText","cb","sameOriginWindowChainCache","WeakMap","getParentWindowIfSameOrigin","location","parentLocation","origin","IframeUtils","getSameOriginWindowChain","windowChainCache","WeakRef","iframeElement","frameElement","getPositionOfChildWindowRelativeToAncestorWindow","childWindow","ancestorWindow","windowChain","windowChainEl","windowInChain","deref","boundingRect","StandardMouseEvent","timestamp","Date","now","button","rightButton","detail","pageX","posx","posy","pageY","clientX","clientY","iframeOffsets","StandardWheelEvent","deltaX","deltaY","targetNode","srcElement","shouldFactorDPR","browser","chromeVersionMatch","parseInt","e1","e2","wheelDeltaY","VERTICAL_AXIS","axis","deltaMode","DOM_DELTA_LINE","platform","wheelDeltaX","HORIZONTAL_AXIS","wheelDelta","inputLatency","totalKeydownTime","total","min","Number","MAX_VALUE","totalInputTime","totalRenderTime","totalInputLatencyTime","measurementsCount","keydown","input","render","markKeyDownEnd","performance","mark","onBeforeInput","scheduleRecordIfFinishedTask","markInputEnd","markRenderEnd","recordIfFinished","measure","addMeasure","clearMarks","clearMeasures","entryName","cumulativeMeasurement","duration","getEntriesByName","cumulativeToFinalMeasurement","cumulative","average","clearCumulativeMeasurement","onKeyDown","queueMicrotask","onInput","onKeyUp","onSelectionChange","onRenderStart","getAndClearMeasurements","sampleCount","DevicePixelRatioMonitor","_onDidChange","onDidChange","_listener","_handleChange","_mediaQueryList","fireEvent","PixelRatioMonitorImpl","_value","_getPixelRatio","dprMonitor","ctx","getContext","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","PixelRatio","mapWindowIdToPixelRatioMonitor","_getOrCreatePixelRatioMonitor","pixelRatioMonitor","__decorate","decorators","d","decorate","defineProperty","Tap","Change","Start","End","Contextmenu","Gesture","dispatched","targets","ignoreTargets","activeTouches","handle","_lastSetTapCountTime","onTouchStart","passive","onTouchEnd","onTouchMove","_store","addTarget","isTouchDevice","ignoreTarget","len","targetTouches","identifier","initialTarget","initialTimeStamp","initialPageX","initialPageY","rollingTimestamps","rollingPageX","rollingPageY","evt","newGestureEvent","dispatchEvent","activeTouchCount","keys","changedTouches","hasOwnProperty","holdTime","HOLD_DELAY","abs","finalX","finalY","deltaT","dispatchTo","filter","inertia","createEvent","initEvent","tapCount","currentTime","getTime","setTapCount","CLEAR_TAP_COUNT_TIME","depth","t1","vX","dirX","vY","dirY","y","delta_pos_x","delta_pos_y","stopped","SCROLL_FRICTION","translationX","translationY"],"sourceRoot":""}