@recogito/text-annotator 3.4.2 → 3.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"text-annotator.umd.js","sources":["../src/utils/isNotAnnotatable.ts","../src/utils/cancelSingleClickEvents.ts","../src/utils/cloneEvents.ts","../../../node_modules/ua-parser-js/src/main/ua-parser.mjs","../../../node_modules/ua-parser-js/src/enums/ua-parser-enums.mjs","../src/utils/device.ts","../src/utils/programmaticallyFocusable.ts","../src/utils/getHighlightClientRects.ts","../src/utils/splitAnnotatableRanges.ts","../src/utils/getQuoteContext.ts","../src/utils/isRevived.ts","../src/utils/isWhitespaceOrEmpty.ts","../src/utils/mergeClientRects.ts","../src/utils/mergeRanges.ts","../src/utils/rangeToSelector.ts","../src/utils/rectsToBounds.ts","../src/utils/reviveSelector.ts","../src/utils/reviveTarget.ts","../src/utils/reviveAnnotation.ts","../src/utils/trimRangeToContainer.ts","../src/api/scrollIntoView.ts","../src/highlight/HighlightStyle.ts","../src/highlight/HighlightPainter.ts","../../../node_modules/debounce/index.js","../src/highlight/viewport.ts","../src/highlight/baseRenderer.ts","../src/highlight/canvas/canvasRenderer.ts","../../../node_modules/colord/index.mjs","../src/highlight/highlights/highlightsRenderer.ts","../../../node_modules/dequal/lite/index.mjs","../src/highlight/span/color.ts","../src/highlight/span/spansRenderer.ts","../../../node_modules/uuid/dist/stringify.js","../../../node_modules/uuid/dist/rng.js","../../../node_modules/uuid/dist/native.js","../../../node_modules/uuid/dist/v4.js","../../../node_modules/@annotorious/core/dist/annotorious-core.es.js","../src/model/w3c/W3CTextFormatAdapter.ts","../../../node_modules/quickselect/index.js","../../../node_modules/rbush/index.js","../../../node_modules/nanoevents/index.js","../src/state/spatialTree.ts","../src/state/TextAnnotatorState.ts","../src/presence/PresencePainter.ts","../../../node_modules/hotkeys-js/dist/hotkeys.esm.js","../../../node_modules/poll/dist/poll.js","../src/SelectionHandler.ts","../src/TextAnnotatorOptions.ts","../src/TextAnnotator.ts"],"sourcesContent":["export const NOT_ANNOTATABLE_CLASS = 'not-annotatable';\n\nexport const NOT_ANNOTATABLE_SELECTOR = `.${NOT_ANNOTATABLE_CLASS}`;\n\nexport const isNotAnnotatable = (container: Node, node: Node): boolean => {\n if (!container.contains(node)) return true;\n\n const closestNotAnnotatable = node instanceof HTMLElement\n ? node.closest(NOT_ANNOTATABLE_SELECTOR)\n : node.parentElement?.closest(NOT_ANNOTATABLE_SELECTOR);\n return Boolean(closestNotAnnotatable);\n}\n\nexport const isRangeAnnotatable = (container: Node, range: Range): boolean => {\n const ancestor = range.commonAncestorContainer;\n return !isNotAnnotatable(container, ancestor);\n}","import { NOT_ANNOTATABLE_SELECTOR } from './isNotAnnotatable';\n\n/**\n * Calls .preventDefault() on click events in annotable areas, in order\n * to prevent problematic default browser behavior. (Specifically: keep\n * Chrome Android from triggering word selection on single click.)\n */\nexport const cancelSingleClickEvents = (container: HTMLElement) =>\n container.addEventListener('click', event => {\n const targetElement = event.target as HTMLElement;\n\n const shouldPrevent =\n // Allow clicks within not-annotatable elements\n !targetElement.closest(NOT_ANNOTATABLE_SELECTOR)\n // Allow clicks on links\n && !(event.target as Element).closest('a');\n\n if (shouldPrevent)\n event.preventDefault();\n });\n","/**\n * Events need to be manually mapped into new objects:\n * 1. It preserves the `target` and `currentTarget` properties.\n * Otherwise, they will be `null` when the event is read beyond the handler.\n * 2. Spread operator can copy only own enumerable properties, not inherited ones.\n * Therefore, we need to manually copy the props we're interested in.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n * @see https://github.com/recogito/text-annotator-js/commit/65d13f3108c429311cf8c2523f6babbbc946013d#r144041390\n */\n\nexport const clonePointerEvent = (event: PointerEvent): PointerEvent => ({\n ...event,\n type: event.type,\n x: event.x,\n y: event.y,\n clientX: event.clientX,\n clientY: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n screenX: event.screenX,\n screenY: event.screenY,\n isPrimary: event.isPrimary,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n button: event.button,\n buttons: event.buttons,\n currentTarget: event.currentTarget,\n target: event.target,\n defaultPrevented: event.defaultPrevented,\n detail: event.detail,\n eventPhase: event.eventPhase,\n pointerId: event.pointerId,\n pointerType: event.pointerType,\n timeStamp: event.timeStamp\n})\n\nexport const cloneKeyboardEvent = (event: KeyboardEvent): KeyboardEvent => ({\n ...event,\n type: event.type,\n key: event.key,\n code: event.code,\n location: event.location,\n repeat: event.repeat,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n currentTarget: event.currentTarget,\n target: event.target,\n defaultPrevented: event.defaultPrevented,\n detail: event.detail,\n timeStamp: event.timeStamp\n})\n","// Generated ESM version of ua-parser-js\n// DO NOT EDIT THIS FILE!\n// Source: /src/main/ua-parser.js\n\n/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v2.0.6\n Copyright © 2012-2025 Faisal Salman <f@faisalman.com>\n AGPLv3 License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://uaparser.dev\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n/* jshint esversion: 6 */ \n/* globals window */\n\n\n \n //////////////\n // Constants\n /////////////\n\n var LIBVERSION = '2.0.6',\n UA_MAX_LENGTH = 500,\n USER_AGENT = 'user-agent',\n EMPTY = '',\n UNKNOWN = '?',\n TYPEOF = {\n FUNCTION : 'function',\n OBJECT : 'object',\n STRING : 'string',\n UNDEFINED : 'undefined'\n },\n\n // properties\n BROWSER = 'browser',\n CPU = 'cpu',\n DEVICE = 'device',\n ENGINE = 'engine',\n OS = 'os',\n RESULT = 'result',\n\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n MAJOR = 'major',\n MODEL = 'model',\n\n // device types\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n XR = 'xr',\n EMBEDDED = 'embedded',\n\n // browser types\n INAPP = 'inapp',\n\n // client hints\n BRANDS = 'brands',\n FORMFACTORS = 'formFactors',\n FULLVERLIST = 'fullVersionList',\n PLATFORM = 'platform',\n PLATFORMVER = 'platformVersion',\n BITNESS = 'bitness',\n CH = 'sec-ch-ua',\n CH_FULL_VER_LIST= CH + '-full-version-list',\n CH_ARCH = CH + '-arch',\n CH_BITNESS = CH + '-' + BITNESS,\n CH_FORM_FACTORS = CH + '-form-factors',\n CH_MOBILE = CH + '-' + MOBILE,\n CH_MODEL = CH + '-' + MODEL,\n CH_PLATFORM = CH + '-' + PLATFORM,\n CH_PLATFORM_VER = CH_PLATFORM + '-version',\n CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],\n\n // device vendors\n AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LENOVO = 'Lenovo',\n HONOR = 'Honor',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n NVIDIA = 'Nvidia',\n ONEPLUS = 'OnePlus',\n OPPO = 'OPPO',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n\n // browsers\n CHROME = 'Chrome',\n CHROMIUM = 'Chromium',\n CHROMECAST = 'Chromecast',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n OPERA = 'Opera',\n FACEBOOK = 'Facebook',\n SOGOU = 'Sogou',\n\n PREFIX_MOBILE = 'Mobile ',\n SUFFIX_BROWSER = ' Browser',\n\n // os\n WINDOWS = 'Windows';\n \n var isWindow = typeof window !== TYPEOF.UNDEFINED,\n NAVIGATOR = (isWindow && window.navigator) ? \n window.navigator : \n undefined,\n NAVIGATOR_UADATA = (NAVIGATOR && NAVIGATOR.userAgentData) ? \n NAVIGATOR.userAgentData : \n undefined;\n\n ///////////\n // Helper\n //////////\n\n var extend = function (defaultRgx, extensions) {\n var mergedRgx = {};\n var extraRgx = extensions;\n if (!isExtensions(extensions)) {\n extraRgx = {};\n for (var i in extensions) {\n for (var j in extensions[i]) {\n extraRgx[j] = extensions[i][j].concat(extraRgx[j] ? extraRgx[j] : []);\n }\n }\n }\n for (var k in defaultRgx) {\n mergedRgx[k] = extraRgx[k] && extraRgx[k].length % 2 === 0 ? extraRgx[k].concat(defaultRgx[k]) : defaultRgx[k];\n }\n return mergedRgx;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i<arr.length; i++) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n if (typeof str1 === TYPEOF.OBJECT && str1.length > 0) {\n for (var i in str1) {\n if (lowerize(str2) == lowerize(str1[i])) return true;\n }\n return false;\n }\n return isString(str1) ? lowerize(str2) == lowerize(str1) : false;\n },\n isExtensions = function (obj, deep) {\n for (var prop in obj) {\n return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);\n }\n },\n isString = function (val) {\n return typeof val === TYPEOF.STRING;\n },\n itemListToArray = function (header) {\n if (!header) return undefined;\n var arr = [];\n var tokens = strip(/\\\\?\\\"/g, header).split(',');\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].indexOf(';') > -1) {\n var token = trim(tokens[i]).split(';v=');\n arr[i] = { brand : token[0], version : token[1] };\n } else {\n arr[i] = trim(tokens[i]);\n }\n }\n return arr;\n },\n lowerize = function (str) {\n return isString(str) ? str.toLowerCase() : str;\n },\n majorize = function (version) {\n return isString(version) ? strip(/[^\\d\\.]/g, version).split('.')[0] : undefined;\n },\n setProps = function (arr) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n var propName = arr[i];\n if (typeof propName == TYPEOF.OBJECT && propName.length == 2) {\n this[propName[0]] = propName[1];\n } else {\n this[propName] = undefined;\n }\n }\n return this;\n },\n strip = function (pattern, str) {\n return isString(str) ? str.replace(pattern, EMPTY) : str;\n },\n stripQuotes = function (str) {\n return strip(/\\\\?\\\"/g, str); \n },\n trim = function (str, len) {\n str = strip(/^\\s\\s*/, String(str));\n return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n\n if(!ua || !arrays) return;\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n if (!regex[j]) { break; }\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === TYPEOF.OBJECT && q.length > 0) {\n if (q.length === 2) {\n if (typeof q[1] == TYPEOF.FUNCTION) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length >= 3) {\n // Check whether q[1] FUNCTION or REGEX\n if (typeof q[1] === TYPEOF.FUNCTION && !(q[1].exec && q[1].test)) {\n if (q.length > 3) {\n this[q[0]] = match ? q[1].apply(this, q.slice(2)) : undefined;\n } else {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n }\n } else {\n if (q.length == 3) {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n } else if (q.length > 4) {\n this[q[0]] = match ? q[3].apply(this, [match.replace(q[1], q[2])].concat(q.slice(4))) : undefined;\n }\n }\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === TYPEOF.OBJECT && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return map.hasOwnProperty('*') ? map['*'] : str;\n };\n\n ///////////////\n // String map\n //////////////\n\n var windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.51': '3.51',\n 'NT 4.0': '4.0',\n '2000' : ['5.0', '5.01'],\n 'XP' : ['5.1', '5.2'],\n 'Vista' : '6.0',\n '7' : '6.1',\n '8' : '6.2',\n '8.1' : '6.3',\n '10' : ['6.4', '10.0'],\n 'NT' : ''\n },\n \n formFactorsMap = {\n 'embedded' : 'Automotive',\n 'mobile' : 'Mobile',\n 'tablet' : ['Tablet', 'EInk'],\n 'smarttv' : 'TV',\n 'wearable' : 'Watch',\n 'xr' : ['VR', 'XR'],\n '?' : ['Desktop', 'Unknown'],\n '*' : undefined\n },\n\n browserHintsMap = {\n 'Chrome' : 'Google Chrome',\n 'Edge' : 'Microsoft Edge',\n 'Edge WebView2' : 'Microsoft Edge WebView2',\n 'Chrome WebView': 'Android WebView',\n 'Chrome Headless':'HeadlessChrome',\n 'Huawei Browser': 'HuaweiBrowser',\n 'MIUI Browser' : 'Miui Browser',\n 'Opera Mobi' : 'OperaMobile',\n 'Yandex' : 'YaBrowser'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var defaultRegexes = {\n\n browser : [[\n\n // Most common regardless engine\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [\n /webview.+edge\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, EDGE+' WebView']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i \n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bop(?:rg)?x\\/([\\w\\.]+)/i // Opera GX\n ], [VERSION, [NAME, OPERA+' GX']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i // Baidu\n ], [VERSION, [NAME, 'Baidu']], [\n /\\b(?:mxbrowser|mxios|myie2)\\/?([-\\w\\.]*)\\b/i // Maxthon\n ], [VERSION, [NAME, 'Maxthon']], [\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\\/ ]?([\\w\\.]*)/i, \n // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir\n // Trident based\n /(avant|iemobile|slim(?:browser|boat|jet))[\\/ ]?([\\d\\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble/Palemoon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser|palemoon)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon\n /(heytap|ovi|115|surf|qwant)browser\\/([\\d\\.]+)/i, // HeyTap/Ovi/115/Surf\n /(qwant)(?:ios|mobile)\\/([\\d\\.]+)/i, // Qwant\n /(ecosia|weibo)(?:__| \\w+@)([\\d\\.]+)/i // Ecosia/Weibo\n ], [NAME, VERSION], [\n /quark(?:pc)?\\/([-\\w\\.]+)/i // Quark\n ], [VERSION, [NAME, 'Quark']], [\n /\\bddg\\/([\\w\\.]+)/i // DuckDuckGo\n ], [VERSION, [NAME, 'DuckDuckGo']], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UCBrowser']], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i,\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /slbrowser\\/([\\w\\.]+)/i // Smart Lenovo Browser\n ], [VERSION, [NAME, 'Smart ' + LENOVO + SUFFIX_BROWSER]], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI' + SUFFIX_BROWSER]], [\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, PREFIX_MOBILE + FIREFOX]], [\n /\\bqihoobrowser\\/?([\\w\\.]*)/i // 360\n ], [VERSION, [NAME, '360']], [\n /\\b(qq)\\/([\\w\\.]+)/i // QQ\n ], [[NAME, /(.+)/, '$1Browser'], VERSION], [\n /(oculus|sailfish|huawei|vivo|pico)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser\n /samsungbrowser\\/([\\w\\.]+)/i // Samsung Internet\n ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n /metasr[\\/ ]?([\\d\\.]+)/i // Sogou Explorer\n ], [VERSION, [NAME, SOGOU + ' Explorer']], [\n /(sogou)mo\\w+\\/([\\d\\.]+)/i // Sogou Mobile\n ], [[NAME, SOGOU + ' Mobile'], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|2345(?=browser|chrome|explorer))\\w*[\\/ ]?v?([\\w\\.]+)/i // QQ/2345\n ], [NAME, VERSION], [\n /(lbbrowser|rekonq)/i // LieBao Browser/Rekonq\n ], [NAME], [\n /ome\\/([\\w\\.]+) \\w* ?(iron) saf/i, // Iron\n /ome\\/([\\w\\.]+).+qihu (360)[es]e/i // 360\n ], [VERSION, NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION, [TYPE, INAPP]], [\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /(daum)apps[\\/ ]([\\w\\.]+)/i, // Daum App\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(alipay)client\\/([\\w\\.]+)/i, // Alipay\n /(twitter)(?:and| f.+e\\/([\\w\\.]+))/i, // Twitter\n /(bing)(?:web|sapphire)\\/([\\w\\.]+)/i, // Bing\n /(instagram|snapchat|klarna)[\\/ ]([-\\w\\.]+)/i // Instagram/Snapchat/Klarna\n ], [NAME, VERSION, [TYPE, INAPP]], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA'], [TYPE, INAPP]], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok'], [TYPE, INAPP]], [\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME, [TYPE, INAPP]], [\n /(zalo(?:app)?)[\\/\\sa-z]*([\\w\\.-]+)/i // Zalo \n ], [[NAME, /(.+)/, 'Zalo'], VERSION, [TYPE, INAPP]], [\n\n /(chromium)[\\/ ]([-\\w\\.]+)/i // Chromium\n ], [NAME, VERSION], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n /wv\\).+chrome\\/([\\w\\.]+).+edgw\\//i // Edge WebView2\n ], [VERSION, [NAME, EDGE+' WebView2']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android' + SUFFIX_BROWSER]], [\n\n /chrome\\/([\\w\\.]+) mobile/i // Chrome Mobile\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile(?:\\/\\w+ | ?)safari/i // Safari Mobile\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Safari']], [\n /iphone .*mobile(?:\\/\\w+ | ?)safari/i\n ], [[NAME, PREFIX_MOBILE + 'Safari']], [\n /version\\/([\\w\\.\\,]+) .*(safari)/i // Safari\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, '1']], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(?:mobile|tablet);.*(firefox)\\/([\\w\\.-]+)/i // Firefox Mobile\n ], [[NAME, PREFIX_MOBILE + FIREFOX], VERSION], [\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(wolvic|librewolf)\\/([\\w\\.]+)/i // Wolvic/LibreWolf\n ], [NAME, VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+(?= .+rv\\:.+gecko\\/\\d+)|[0-4][\\w\\.]+(?!.+compatible))/i, // Mozilla\n\n // Other\n /(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird\n /\\b(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, [VERSION, /_/g, '.']], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /[^\\d\\.]+./, EMPTY]]\n ],\n\n cpu : [[\n\n /\\b((amd|x|x86[-_]?|wow|win)64)\\b/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i, // IA32 (quicktime)\n /\\b((i[346]|x)86)(pc)?\\b/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?[89]e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /( (ce|mobile); ppc;|\\/[\\w\\.]+arm\\b)/i\n ], [[ARCHITECTURE, 'arm']], [\n\n / sun4\\w[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n /\\b(avr32|ia64(?=;)|68k(?=\\))|\\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\\b|pa-risc)/i,\n /((ppc|powerpc)(64)?)( mac|;|\\))/i, // PowerPC\n /(?:osf1|[freopnt]{3,4}bsd) (alpha)/i // Alpha\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n /mc680.0/i\n ], [[ARCHITECTURE, '68k']], [\n /winnt.+\\[axp/i\n ], [[ARCHITECTURE, 'alpha']]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-(?![lr])\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]((?!sm-[lr]|browser)[-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)[\\/\\);]/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\b(?:ios|apple\\w+)\\/.+[\\(\\/](ipad)/i, // iPad\n /\\b(ipad)[\\d,]*[;\\] ].+(mac |i(pad)?)os/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Honor\n /\\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\\)|;)/i\n ], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [\n /honor([-\\w ]+)[;\\)]/i\n ], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [\n\n // Huawei\n /\\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\\w\\. ]*(?= bui|\\)))\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei) ?([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][\\dc][adnt]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /oid[^\\)]+; (2[\\dbc]{4}(182|283|rp\\w{2})[cgl]|m2105k81a?c)(?: bui|\\))/i,\n /\\b(?:xiao)?((?:red)?mi[-_ ]?pad[\\w- ]*)(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i, // Xiaomi Redmi 'numeric' models\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\\d{0,2}\\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\\))/i, // Xiaomi Mi\n / ([\\w ]+) miui\\/v?\\d/i\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n\n // OnePlus\n /droid.+; (cph2[3-6]\\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\\d|p[g-k]\\w[1m]10)\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [\n /\\b(opd2(\\d{3}a?))(?: bui|\\))/i\n ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['203', '304', '403', '404', '413', '415'], '*' : OPPO }], [TYPE, TABLET]], [\n\n // BLU\n /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\\w\\+ ]*)(?: bui|\\))/i // Vivo series\n ], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [ \n\n // Vivo\n /; vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\\d{3,4}(?:f[cu]|xu|[av])|yt\\d?-[jx]?\\d+[lfmx])( bui|;|\\)|\\/)/i,\n /lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\\w- ]+?)|tb[\\w-]{6,7})( bui|;|\\)|\\/)/i\n ], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [ \n /lenovo[-_ ]?([-\\w ]+?)(?: bui|\\)|\\/)/i\n ], [MODEL, [VENDOR, LENOVO], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ]([\\w\\s]+)(\\)| bui)/i,\n /((?:moto(?! 360)[-\\w\\(\\) ]+|xt\\d{3,4}[cgkosw\\+]?[-\\d]*|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Nokia\n /(nokia) (t[12][01])/i\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n /(?:maemo|nokia).*(n900|lumia \\d+|rm-\\d+)/i,\n /nokia[-_ ]?(([-\\w\\. ]*?))( bui|\\)|;|\\/)/i\n ], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [\n\n // Google\n /(pixel (c|tablet))\\b/i // Google Pixel C/Tablet\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n // Google Pixel\n /droid.+;(?: google)? (g(01[13]a|020[aem]|025[jn]|1b60|1f8f|2ybb|4s1m|576d|5nz6|8hhn|8vou|a02099|c15s|d1yq|e2ae|ec77|gh2x|kv4x|p4bc|pj41|r83y|tt9q|ur25|wvk6)|pixel[\\d ]*a?( pro)?( xl)?( fold)?( \\(5g\\))?)( bui|\\))/i\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n /(google) (pixelbook( go)?)/i\n ], [VENDOR, MODEL], [\n\n // Sony\n /droid.+; (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-\\w\\w\\d\\d)(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo(?!bc)\\w\\w)( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /(?:blackberry|\\(bb10;) (\\w+)/i\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // TCL\n /tcl (xess p17aa)/i,\n /droid [\\w\\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\\w(\\w|\\w\\w))?(\\)| bui)/i\n ], [MODEL, [VENDOR, 'TCL'], [TYPE, TABLET]], [\n /droid [\\w\\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\\w(\\w|\\w\\w))?(\\)| bui)/i\n ], [MODEL, [VENDOR, 'TCL'], [TYPE, MOBILE]], [\n\n // itel\n /(itel) ((\\w+))/i\n ], [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { 'tablet' : ['p10001l', 'w7001'], '*' : 'mobile' }]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n \n // Ulefone\n /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n // Energizer\n /; (energy ?\\w+)(?: bui|\\))/i,\n /; energizer ([\\w ]+)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Energizer'], [TYPE, MOBILE]], [\n\n // Cat\n /; cat (b35);/i,\n /; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Cat'], [TYPE, MOBILE]], [\n\n // Smartfren\n /((?:new )?andromax[\\w- ]+)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Smartfren'], [TYPE, MOBILE]], [\n\n // Nothing\n /droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i\n ], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [\n\n // Archos\n /; (x67 5g|tikeasy \\w+|ac[1789]\\d\\w+)( b|\\))/i,\n /archos ?(5|gamepad2?|([\\w ]*[t1789]|hello) ?\\d+[\\w ]*)( b|\\))/i\n ], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [\n /archos ([\\w ]+)( b|\\))/i,\n /; (ac[3-6]\\d\\w{2,8})( b|\\))/i \n ], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [\n\n // HMD\n /; (n159v)/i\n ], [MODEL, [VENDOR, 'HMD'], [TYPE, MOBILE]], [\n\n // MIXED\n /(imo) (tab \\w+)/i, // IMO\n /(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i // Infinix XPad / Tecno\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan\n // BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko\n /; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([\\w\\+ ]+?)(?: bui|\\)|; r)/i,\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(oppo) ?([\\w ]+) bui/i, // OPPO\n /(hisense) ([ehv][\\w ]+)\\)/i, // Hisense\n /droid[^;]+; (philips)[_ ]([sv-x][\\d]{3,4}[xz]?)/i // Philips\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i // Kindle\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /((?:tegranote|shield t(?!.+d tv))[\\w- ]*?)(?: b|\\))/i // Nvidia Tablets\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /(philips)[\\w ]+tv/i, // Philips\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(vizio)(?: |.+model\\/)(\\w+-\\w+)/i, // Vizio\n /tcast.+(lg)e?. ([-\\w]+)/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey.*devicetype\\/chromecast/i // Google Chromecast Third Generation\n ], [[MODEL, CHROMECAST+' Third Generation'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /crkey.*devicetype\\/([^/]*)/i // Google Chromecast with specific device type\n ], [[MODEL, /^/, 'Chromecast '], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /fuchsia.*crkey/i // Google Chromecast Nest Hub\n ], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast, Linux-based or unknown\n ], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /(portaltv)/i // Facebook Portal TV\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]], [\n /droid.+aft(\\w+)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /(shield \\w+ tv)/i // Nvidia Shield TV\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mi(tv|box)-?\\w+) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, /.+\\/(\\w+)/, '$1', strMapper, {'LG':'lge'}], [MODEL, trim], [TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(playstation \\w+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n /(ouya)/i, // Ouya\n /(nintendo) (\\w+)/i, // Nintendo\n /(retroid) (pocket ([^\\)]+))/i // Retroid Pocket\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield)( bui|\\))/i // Nvidia Portable\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /\\b(sm-[lr]\\d\\d[0156][fnuw]?s?|gear live)\\b/i // Samsung Galaxy Watch\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [\n /((pebble))app/i, // Pebble\n /(asus|google|lg|oppo) ((pixel |zen)?watch[\\w ]*)( bui|\\))/i // Asus ZenWatch / LG Watch / Pixel Watch\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch\n ], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /(opwwe\\d{3})/i // OnePlus Watch\n ], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [\n /(moto 360)/i // Motorola 360\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [\n /(smartwatch 3)/i // Sony SmartWatch\n ], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [\n /(g watch r)/i // LG G Watch R\n ], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n\n ///////////////////\n // XR\n ///////////////////\n\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [\n /(pico) ([\\w ]+) os\\d/i // Pico\n ], [VENDOR, MODEL, [TYPE, XR]], [\n /(quest( \\d| pro)?s?).+vr/i // Meta Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [\n /mobile vr; rv.+firefox/i // Unidentifiable VR device using Firefox Reality / Wolvic\n ], [[TYPE, XR]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n /(homepod).+mac os/i // Apple HomePod\n ], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [\n /windows iot/i // Unidentifiable embedded device using Windows IoT\n ], [[TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid.+; ([\\w- ]+) (4k|android|smart|google)[- ]?tv/i // Unidentifiable SmartTV\n ], [MODEL, [TYPE, SMARTTV]], [\n /\\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\\w ]+safari)\\b/i\n ], [[TYPE, SMARTTV]], [\n /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew|; hmsc).+?(mobile|vr|\\d) safari/i\n ], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /droid .+?; ([\\w\\. -]+)( bui|\\))/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /(arkweb)\\/([\\w\\.]+)/i // ArkWeb\n ], [NAME, VERSION], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n\n /\\b(libweb)/i // LibWeb\n ], [NAME, VERSION], [\n /ladybird\\//i\n ], [[NAME, 'LibWeb']], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /(windows nt) (6\\.[23]); arm/i // Windows RT\n ], [[NAME, /N/, 'R'], [VERSION, strMapper, windowsVersionMap]], [\n /(windows (?:phone|mobile|iot))(?: os)?[\\/ ]?([\\d\\.]*( se)?)/i, // Windows IoT/Mobile/Phone\n // Windows NT/3.1/95/98/ME/2000/XP/Vista/7/8/8.1/10/11\n /(windows)[\\/ ](1[01]|2000|3\\.1|7|8(\\.1)?|9[58]|me|server 20\\d\\d( r2)?|vista|xp)/i\n ], [NAME, VERSION], [\n /windows nt ?([\\d\\.\\)]*)(?!.+xbox)/i,\n /\\bwin(?=3| ?9|n)(?:nt| 9x )?([\\d\\.;]*)/i\n ], [[VERSION, /(;|\\))/g, '', strMapper, windowsVersionMap], [NAME, WINDOWS]], [\n /(windows ce)\\/?([\\d\\.]*)/i // Windows CE\n ], [NAME, VERSION], [\n\n // iOS/macOS\n /[adehimnop]{4,7}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\\/ ]([\\w\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+(haiku|morphos))/i // Mac OS\n ], [[NAME, 'macOS'], [VERSION, /_/g, '.']], [\n\n // Google Chromecast\n /android ([\\d\\.]+).*crkey/i // Google Chromecast, Android-based\n ], [VERSION, [NAME, CHROMECAST + ' Android']], [\n /fuchsia.*crkey\\/([\\d\\.]+)/i // Google Chromecast, Fuchsia-based\n ], [VERSION, [NAME, CHROMECAST + ' Fuchsia']], [\n /crkey\\/([\\d\\.]+).*devicetype\\/smartspeaker/i // Google Chromecast, Linux-based Smart Speaker\n ], [VERSION, [NAME, CHROMECAST + ' SmartSpeaker']], [\n /linux.*crkey\\/([\\d\\.]+)/i // Google Chromecast, Legacy Linux-based\n ], [VERSION, [NAME, CHROMECAST + ' Linux']], [\n /crkey\\/([\\d\\.]+)/i // Google Chromecast, unknown\n ], [VERSION, [NAME, CHROMECAST]], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ], [VERSION, NAME], [ \n /(ubuntu) ([\\w\\.]+) like android/i // Ubuntu Touch\n ], [[NAME, /(.+)/, '$1 Touch'], VERSION], [\n /(harmonyos)[\\/ ]?([\\d\\.]*)/i, // HarmonyOS\n // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen\n /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\\w*[-\\/\\.; ]?([\\d\\.]*)/i\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i, // WebOS\n /webos(?:[ \\/]?|\\.tv-20(?=2[2-9]))(\\d[\\d\\.]*)/i\n ], [VERSION, [NAME, 'webOS']], [\n /web0s;.+?(?:chr[o0]me|safari)\\/(\\d+)/i\n // https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine\n ], [[VERSION, strMapper, {'25':'120','24':'108','23':'94','22':'87','6':'79','5':'68','4':'53','3':'38','2':'538','1':'537','*':'TV'}], [NAME, 'webOS']], [ \n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google ChromeOS\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, \"Chrome OS\"], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) (\\w+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n /(pico) .+os([\\w\\.]+)/i, // Pico\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /linux.+(mint)[\\/\\(\\) ]?([\\w\\.]*)/i, // Mint\n /(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\\d\\.]*)/i, // Mageia/VectorLinux/Fuchsia/ArcaOS/Arch\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire|knoppix)(?: gnu[\\/ ]linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire/Knoppix\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /\\b(aix)[; ]([1-9\\.]{0,4})/i, // AIX\n /(hurd|linux|morphos)(?: (?:arm|x86|ppc)\\w*| ?)([\\w\\.]*)/i, // Hurd/Linux/MorphOS\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) ?(r\\d)?/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\d\\.]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /\\b(beos|os\\/2|amigaos|openvms|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/OpenVMS/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Factories\n ////////////////\n\n var defaultProps = (function () {\n var props = { init : {}, isIgnore : {}, isIgnoreRgx : {}, toString : {}};\n setProps.call(props.init, [\n [BROWSER, [NAME, VERSION, MAJOR, TYPE]],\n [CPU, [ARCHITECTURE]],\n [DEVICE, [TYPE, MODEL, VENDOR]],\n [ENGINE, [NAME, VERSION]],\n [OS, [NAME, VERSION]]\n ]);\n setProps.call(props.isIgnore, [\n [BROWSER, [VERSION, MAJOR]],\n [ENGINE, [VERSION]],\n [OS, [VERSION]]\n ]);\n setProps.call(props.isIgnoreRgx, [\n [BROWSER, / ?browser$/i],\n [OS, / ?os$/i]\n ]);\n setProps.call(props.toString, [\n [BROWSER, [NAME, VERSION]],\n [CPU, [ARCHITECTURE]],\n [DEVICE, [VENDOR, MODEL]],\n [ENGINE, [NAME, VERSION]],\n [OS, [NAME, VERSION]]\n ]);\n return props;\n })();\n\n var createIData = function (item, itemType) {\n\n var init_props = defaultProps.init[itemType],\n is_ignoreProps = defaultProps.isIgnore[itemType] || 0,\n is_ignoreRgx = defaultProps.isIgnoreRgx[itemType] || 0,\n toString_props = defaultProps.toString[itemType] || 0;\n\n function IData () {\n setProps.call(this, init_props);\n }\n\n IData.prototype.getItem = function () {\n return item;\n };\n\n IData.prototype.withClientHints = function () {\n\n // nodejs / non-client-hints browsers\n if (!NAVIGATOR_UADATA) {\n return item\n .parseCH()\n .get();\n }\n\n // browsers based on chromium 85+\n return NAVIGATOR_UADATA\n .getHighEntropyValues(CH_ALL_VALUES)\n .then(function (res) {\n return item\n .setCH(new UACHData(res, false))\n .parseCH()\n .get();\n });\n };\n\n IData.prototype.withFeatureCheck = function () {\n return item.detectFeature().get();\n };\n\n if (itemType != RESULT) {\n IData.prototype.is = function (strToCheck) {\n var is = false;\n for (var i in this) {\n if (this.hasOwnProperty(i) && !has(is_ignoreProps, i) && lowerize(is_ignoreRgx ? strip(is_ignoreRgx, this[i]) : this[i]) == lowerize(is_ignoreRgx ? strip(is_ignoreRgx, strToCheck) : strToCheck)) {\n is = true;\n if (strToCheck != TYPEOF.UNDEFINED) break;\n } else if (strToCheck == TYPEOF.UNDEFINED && is) {\n is = !is;\n break;\n }\n }\n return is;\n };\n IData.prototype.toString = function () {\n var str = EMPTY;\n for (var i in toString_props) {\n if (typeof(this[toString_props[i]]) !== TYPEOF.UNDEFINED) {\n str += (str ? ' ' : EMPTY) + this[toString_props[i]];\n }\n }\n return str || TYPEOF.UNDEFINED;\n };\n }\n\n if (!NAVIGATOR_UADATA) {\n IData.prototype.then = function (cb) { \n var that = this;\n var IDataResolve = function () {\n for (var prop in that) {\n if (that.hasOwnProperty(prop)) {\n this[prop] = that[prop];\n }\n }\n };\n IDataResolve.prototype = {\n is : IData.prototype.is,\n toString : IData.prototype.toString\n };\n var resolveData = new IDataResolve();\n cb(resolveData);\n return resolveData;\n };\n }\n\n return new IData();\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n function UACHData (uach, isHttpUACH) {\n uach = uach || {};\n setProps.call(this, CH_ALL_VALUES);\n if (isHttpUACH) {\n setProps.call(this, [\n [BRANDS, itemListToArray(uach[CH])],\n [FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],\n [MOBILE, /\\?1/.test(uach[CH_MOBILE])],\n [MODEL, stripQuotes(uach[CH_MODEL])],\n [PLATFORM, stripQuotes(uach[CH_PLATFORM])],\n [PLATFORMVER, stripQuotes(uach[CH_PLATFORM_VER])],\n [ARCHITECTURE, stripQuotes(uach[CH_ARCH])],\n [FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],\n [BITNESS, stripQuotes(uach[CH_BITNESS])]\n ]);\n } else {\n for (var prop in uach) {\n if(this.hasOwnProperty(prop) && typeof uach[prop] !== TYPEOF.UNDEFINED) this[prop] = uach[prop];\n }\n }\n }\n\n function UAItem (itemType, ua, rgxMap, uaCH) {\n\n this.get = function (prop) {\n if (!prop) return this.data;\n return this.data.hasOwnProperty(prop) ? this.data[prop] : undefined;\n };\n\n this.set = function (prop, val) {\n this.data[prop] = val;\n return this;\n };\n\n this.setCH = function (ch) {\n this.uaCH = ch;\n return this;\n };\n\n this.detectFeature = function () {\n if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {\n switch (this.itemType) {\n case BROWSER:\n // Brave-specific detection\n if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == TYPEOF.FUNCTION) {\n this.set(NAME, 'Brave');\n }\n break;\n case DEVICE:\n // Chrome-specific detection: check for 'mobile' value of navigator.userAgentData\n if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {\n this.set(TYPE, MOBILE);\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (this.get(MODEL) == 'Macintosh' && NAVIGATOR && typeof NAVIGATOR.standalone !== TYPEOF.UNDEFINED && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {\n this.set(MODEL, 'iPad')\n .set(TYPE, TABLET);\n }\n break;\n case OS:\n // Chrome-specific detection: check for 'platform' value of navigator.userAgentData\n if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {\n this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);\n }\n break;\n case RESULT:\n var data = this.data;\n var detect = function (itemType) {\n return data[itemType]\n .getItem()\n .detectFeature()\n .get();\n };\n this.set(BROWSER, detect(BROWSER))\n .set(CPU, detect(CPU))\n .set(DEVICE, detect(DEVICE))\n .set(ENGINE, detect(ENGINE))\n .set(OS, detect(OS));\n }\n }\n return this;\n };\n\n this.parseUA = function () {\n if (this.itemType != RESULT) {\n rgxMapper.call(this.data, this.ua, this.rgxMap);\n }\n switch (this.itemType) {\n case BROWSER:\n this.set(MAJOR, majorize(this.get(VERSION)));\n break;\n case OS:\n if (this.get(NAME) == 'iOS' && this.get(VERSION) == '18.6') {\n // Based on the assumption that iOS version is tightly coupled with Safari version\n var realVersion = /\\) Version\\/([\\d\\.]+)/.exec(this.ua); // Get Safari version\n if (realVersion && parseInt(realVersion[1].substring(0,2), 10) >= 26) {\n this.set(VERSION, realVersion[1]); // Set as iOS version\n }\n }\n break;\n }\n return this;\n };\n\n this.parseCH = function () {\n var uaCH = this.uaCH,\n rgxMap = this.rgxMap;\n \n switch (this.itemType) {\n case BROWSER:\n case ENGINE:\n var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;\n if (brands) {\n for (var i=0; i<brands.length; i++) {\n var brandName = brands[i].brand || brands[i],\n brandVersion = brands[i].version;\n if (this.itemType == BROWSER && \n !/not.a.brand/i.test(brandName) && \n (!prevName || \n (/Chrom/.test(prevName) && brandName != CHROMIUM) || \n (prevName == EDGE && /WebView2/.test(brandName))\n )) {\n brandName = strMapper(brandName, browserHintsMap);\n prevName = this.get(NAME);\n if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {\n this.set(NAME, brandName)\n .set(VERSION, brandVersion)\n .set(MAJOR, majorize(brandVersion));\n }\n prevName = brandName;\n }\n if (this.itemType == ENGINE && brandName == CHROMIUM) {\n this.set(VERSION, brandVersion);\n }\n }\n }\n break;\n case CPU:\n var archName = uaCH[ARCHITECTURE];\n if (archName) {\n if (archName && uaCH[BITNESS] == '64') archName += '64';\n rgxMapper.call(this.data, archName + ';', rgxMap);\n }\n break;\n case DEVICE:\n if (uaCH[MOBILE]) {\n this.set(TYPE, MOBILE);\n }\n if (uaCH[MODEL]) {\n this.set(MODEL, uaCH[MODEL]);\n if (!this.get(TYPE) || !this.get(VENDOR)) {\n var reParse = {};\n rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);\n if (!this.get(TYPE) && !!reParse.type) {\n this.set(TYPE, reParse.type);\n }\n if (!this.get(VENDOR) && !!reParse.vendor) {\n this.set(VENDOR, reParse.vendor);\n }\n }\n }\n if (uaCH[FORMFACTORS]) {\n var ff;\n if (typeof uaCH[FORMFACTORS] !== 'string') {\n var idx = 0;\n while (!ff && idx < uaCH[FORMFACTORS].length) {\n ff = strMapper(uaCH[FORMFACTORS][idx++], formFactorsMap);\n }\n } else {\n ff = strMapper(uaCH[FORMFACTORS], formFactorsMap);\n }\n this.set(TYPE, ff);\n }\n break;\n case OS:\n var osName = uaCH[PLATFORM];\n if(osName) {\n var osVersion = uaCH[PLATFORMVER];\n if (osName == WINDOWS) osVersion = (parseInt(majorize(osVersion), 10) >= 13 ? '11' : '10');\n this.set(NAME, osName)\n .set(VERSION, osVersion);\n }\n // Xbox-Specific Detection\n if (this.get(NAME) == WINDOWS && uaCH[MODEL] == 'Xbox') {\n this.set(NAME, 'Xbox')\n .set(VERSION, undefined);\n } \n break;\n case RESULT:\n var data = this.data;\n var parse = function (itemType) {\n return data[itemType]\n .getItem()\n .setCH(uaCH)\n .parseCH()\n .get();\n };\n this.set(BROWSER, parse(BROWSER))\n .set(CPU, parse(CPU))\n .set(DEVICE, parse(DEVICE))\n .set(ENGINE, parse(ENGINE))\n .set(OS, parse(OS));\n }\n return this;\n };\n\n setProps.call(this, [\n ['itemType', itemType],\n ['ua', ua],\n ['uaCH', uaCH],\n ['rgxMap', rgxMap],\n ['data', createIData(this, itemType)]\n ]);\n\n return this;\n }\n\n function UAParser (ua, extensions, headers) {\n\n if (typeof ua === TYPEOF.OBJECT) {\n if (isExtensions(ua, true)) {\n if (typeof extensions === TYPEOF.OBJECT) {\n headers = extensions; // case UAParser(extensions, headers) \n }\n extensions = ua; // case UAParser(extensions)\n } else {\n headers = ua; // case UAParser(headers)\n extensions = undefined;\n }\n ua = undefined;\n } else if (typeof ua === TYPEOF.STRING && !isExtensions(extensions, true)) {\n headers = extensions; // case UAParser(ua, headers)\n extensions = undefined;\n }\n\n if (headers) {\n if (typeof headers.append === TYPEOF.FUNCTION) {\n // Convert Headers object into a plain object\n var kv = {};\n headers.forEach(function (v, k) { kv[String(k).toLowerCase()] = v; });\n headers = kv;\n } else {\n // Normalize headers field name into lowercase\n var normalized = {};\n for (var header in headers) {\n if (headers.hasOwnProperty(header)) {\n normalized[String(header).toLowerCase()] = headers[header];\n }\n }\n headers = normalized;\n }\n }\n \n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions, headers).getResult();\n }\n\n var userAgent = typeof ua === TYPEOF.STRING ? ua : // Passed user-agent string\n (headers && headers[USER_AGENT] ? headers[USER_AGENT] : // User-Agent from passed headers\n ((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent\n EMPTY)), // empty string\n\n httpUACH = new UACHData(headers, true),\n regexMap = extensions ? \n extend(defaultRegexes, extensions) : \n defaultRegexes,\n\n createItemFunc = function (itemType) {\n if (itemType == RESULT) {\n return function () {\n return new UAItem(itemType, userAgent, regexMap, httpUACH)\n .set('ua', userAgent)\n .set(BROWSER, this.getBrowser())\n .set(CPU, this.getCPU())\n .set(DEVICE, this.getDevice())\n .set(ENGINE, this.getEngine())\n .set(OS, this.getOS())\n .get();\n };\n } else {\n return function () {\n return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH)\n .parseUA()\n .get();\n };\n }\n };\n \n // public methods\n setProps.call(this, [\n ['getBrowser', createItemFunc(BROWSER)],\n ['getCPU', createItemFunc(CPU)],\n ['getDevice', createItemFunc(DEVICE)],\n ['getEngine', createItemFunc(ENGINE)],\n ['getOS', createItemFunc(OS)],\n ['getResult', createItemFunc(RESULT)],\n ['getUA', function () { return userAgent; }],\n ['setUA', function (ua) {\n if (isString(ua)) userAgent = trim(ua, UA_MAX_LENGTH);\n return this;\n }]\n ])\n .setUA(userAgent);\n\n return this;\n }\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR, TYPE]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n export {UAParser};","// Generated ESM version of ua-parser-js/enums\n// DO NOT EDIT THIS FILE!\n// Source: /src/enums/ua-parser-enums.js\n\n///////////////////////////////////////////////\n/* Enums for UAParser.js v2.0.6\n https://github.com/faisalman/ua-parser-js\n Author: Faisal Salman <f@faisalman.com>\n AGPLv3 License */\n//////////////////////////////////////////////\n\n/*jshint esversion: 6 */ \n\nconst BrowserName = Object.freeze({\n '115': '115',\n '2345': '2345',\n '360': '360',\n ALIPAY: 'Alipay',\n AMAYA: 'Amaya',\n ANDROID: 'Android Browser',\n ARORA: 'Arora',\n AVANT: 'Avant',\n AVAST: 'Avast Secure Browser',\n AVG: 'AVG Secure Browser',\n BAIDU: 'Baidu Browser',\n BASILISK: 'Basilisk',\n BING: 'Bing',\n BLAZER: 'Blazer',\n BOLT: 'Bolt',\n BOWSER: 'Bowser',\n BRAVE: 'Brave',\n CAMINO: 'Camino',\n CHIMERA: 'Chimera',\n CHROME: 'Chrome',\n CHROME_HEADLESS: 'Chrome Headless',\n CHROME_MOBILE: 'Mobile Chrome',\n CHROME_WEBVIEW: 'Chrome WebView',\n CHROMIUM: 'Chromium',\n COBALT: 'Cobalt',\n COC_COC: 'Coc Coc',\n CONKEROR: 'Conkeror',\n DAUM: 'Daum',\n DILLO: 'Dillo',\n DOLPHIN: 'Dolphin',\n DOOBLE: 'Dooble',\n DORIS: 'Doris',\n DRAGON: 'Dragon',\n DUCKDUCKGO: 'DuckDuckGo',\n ECOSIA: 'Ecosia',\n EDGE: 'Edge',\n EDGE_WEBVIEW: 'Edge WebView',\n EDGE_WEBVIEW2: 'Edge WebView2',\n EPIPHANY: 'Epiphany',\n FACEBOOK: 'Facebook',\n FALKON: 'Falkon',\n FIREBIRD: 'Firebird',\n FIREFOX: 'Firefox',\n FIREFOX_FOCUS: 'Firefox Focus',\n FIREFOX_MOBILE: 'Mobile Firefox',\n FIREFOX_REALITY: 'Firefox Reality',\n FENNEC: 'Fennec',\n FLOCK: 'Flock',\n FLOW: 'Flow',\n GO: 'GoBrowser',\n GOOGLE_SEARCH: 'GSA',\n HELIO: 'Helio',\n HEYTAP: 'HeyTap',\n HONOR: 'Honor',\n HUAWEI: 'Huawei Browser',\n ICAB: 'iCab',\n ICE: 'ICE Browser',\n ICEAPE: 'IceApe',\n ICECAT: 'IceCat',\n ICEDRAGON: 'IceDragon',\n ICEWEASEL: 'IceWeasel',\n IE: 'IE',\n INSTAGRAM: 'Instagram',\n IRIDIUM: 'Iridium',\n IRON: 'Iron',\n JASMINE: 'Jasmine',\n KONQUEROR: 'Konqueror',\n KAKAO: 'KakaoTalk',\n KHTML: 'KHTML',\n K_MELEON: 'K-Meleon',\n KLAR: 'Klar',\n KLARNA: 'Klarna',\n KINDLE: 'Kindle',\n LENOVO: 'Smart Lenovo Browser',\n LADYBIRD: 'Ladybird',\n LG: 'LG Browser',\n LIBREWOLF: 'LibreWolf',\n LIEBAO: 'LBBROWSER',\n LINE: 'Line',\n LINKEDIN: 'LinkedIn',\n LINKS: 'Links',\n LUNASCAPE: 'Lunascape',\n LYNX: 'Lynx',\n MAEMO: 'Maemo Browser',\n MAXTHON: 'Maxthon',\n MIDORI: 'Midori',\n MINIMO: 'Minimo',\n MIUI: 'MIUI Browser',\n MOZILLA: 'Mozilla',\n MOSAIC: 'Mosaic',\n NAVER: 'Naver',\n NETFRONT: 'NetFront',\n NETSCAPE: 'Netscape',\n NETSURF: 'Netsurf',\n NOKIA: 'Nokia Browser',\n OBIGO: 'Obigo',\n OCULUS: 'Oculus Browser',\n OMNIWEB: 'OmniWeb',\n OPERA: 'Opera',\n OPERA_COAST: 'Opera Coast',\n OPERA_GX: 'Opera GX',\n OPERA_MINI: 'Opera Mini',\n OPERA_MOBI: 'Opera Mobi',\n OPERA_TABLET: 'Opera Tablet',\n OPERA_TOUCH: 'Opera Touch',\n OTTER: 'Otter',\n OVI: 'OviBrowser',\n PALEMOON: 'PaleMoon',\n PHANTOMJS: 'PhantomJS',\n PHOENIX: 'Phoenix',\n PICOBROWSER: 'Pico Browser',\n POLARIS: 'Polaris',\n PUFFIN: 'Puffin',\n QQ: 'QQBrowser',\n QQ_LITE: 'QQBrowserLite',\n QUARK: 'Quark',\n QUPZILLA: 'QupZilla',\n QUTEBROWSER: 'qutebrowser',\n QWANT: 'Qwant',\n REKONQ: 'rekonq',\n ROCKMELT: 'Rockmelt',\n SAFARI: 'Safari',\n SAFARI_MOBILE: 'Mobile Safari',\n SAILFISH: 'Sailfish Browser',\n SAMSUNG: 'Samsung Internet',\n SEAMONKEY: 'SeaMonkey',\n SILK: 'Silk',\n SKYFIRE: 'Skyfire',\n SLEIPNIR: 'Sleipnir',\n SLIMBOAT: 'SlimBoat',\n SLIMBROWSER: 'SlimBrowser',\n SLIMJET: 'Slimjet',\n SNAPCHAT: 'Snapchat',\n SOGOU_EXPLORER: 'Sogou Explorer',\n SOGOU_MOBILE: 'Sogou Mobile',\n SURF: 'Surf',\n SWIFTFOX: 'Swiftfox',\n TESLA: 'Tesla',\n TIKTOK: 'TikTok',\n TIZEN: 'Tizen Browser',\n TWITTER: 'Twitter',\n UC: 'UCBrowser',\n UP: 'UP.Browser',\n VIVALDI: 'Vivaldi',\n VIVO: 'Vivo Browser',\n W3M: 'w3m',\n WATERFOX: 'Waterfox',\n WEBKIT: 'WebKit',\n WECHAT: 'WeChat',\n WEIBO: 'Weibo',\n WHALE: 'Whale',\n WOLVIC: 'Wolvic',\n YANDEX: 'Yandex',\n ZALO: 'Zalo'\n\n // TODO : test!\n});\n/**\n * @deprecated Use `BrowserName` instead\n */\nconst Browser = BrowserName;\n\nconst BrowserType = Object.freeze({\n CRAWLER: 'crawler',\n CLI: 'cli',\n EMAIL: 'email',\n FETCHER: 'fetcher',\n INAPP: 'inapp',\n MEDIAPLAYER: 'mediaplayer',\n LIBRARY: 'library'\n});\n\nconst CPUArch = Object.freeze({\n '68K': '68k',\n ALPHA: 'alpha',\n ARM : 'arm',\n ARM_64: 'arm64',\n ARM_HF: 'armhf',\n AVR: 'avr',\n AVR_32: 'avr32',\n IA64: 'ia64',\n IRIX: 'irix',\n IRIX_64: 'irix64',\n MIPS: 'mips',\n MIPS_64: 'mips64',\n PA_RISC: 'pa-risc',\n PPC: 'ppc',\n SPARC: 'sparc',\n SPARC_64: 'sparc64',\n X86: 'ia32',\n X86_64: 'amd64'\n});\n/**\n * @deprecated Use `CPUArch` instead\n */\nconst CPU = CPUArch;\n\nconst DeviceType = Object.freeze({\n CONSOLE: 'console',\n DESKTOP: 'desktop',\n EMBEDDED: 'embedded',\n MOBILE: 'mobile',\n SMARTTV: 'smarttv',\n TABLET: 'tablet',\n WEARABLE: 'wearable',\n XR: 'xr'\n});\n/**\n * @deprecated Use `DeviceType` instead\n */\nconst Device = DeviceType;\n\nconst DeviceVendor = Object.freeze({\n ACER: 'Acer',\n ADVAN: 'Advan',\n ALCATEL: 'Alcatel',\n APPLE: 'Apple',\n AMAZON: 'Amazon',\n ARCHOS: 'Archos',\n ASUS: 'ASUS',\n ATT: 'AT&T',\n BENQ: 'BenQ',\n BLACKBERRY: 'BlackBerry',\n BLU: 'BLU',\n CAT: 'Cat',\n DELL: 'Dell',\n ENERGIZER: 'Energizer',\n ESSENTIAL: 'Essential',\n FACEBOOK: 'Facebook',\n FAIRPHONE: 'Fairphone',\n GEEKSPHONE: 'GeeksPhone',\n GENERIC: 'Generic',\n GOOGLE: 'Google',\n HISENSE: 'Hisense',\n HMD: 'HMD',\n HP: 'HP',\n HTC: 'HTC',\n HUAWEI: 'Huawei',\n IMO: 'IMO',\n INFINIX: 'Infinix',\n ITEL: 'itel',\n JOLLA: 'Jolla',\n KOBO: 'Kobo',\n LAVA: 'Lava',\n LENOVO: 'Lenovo',\n LG: 'LG',\n MEIZU: 'Meizu',\n MICROMAX: 'Micromax',\n MICROSOFT: 'Microsoft',\n MOTOROLA: 'Motorola',\n NEXIAN: 'Nexian',\n NINTENDO: 'Nintendo',\n NOKIA: 'Nokia',\n NOTHING: 'Nothing',\n NVIDIA: 'Nvidia',\n ONEPLUS: 'OnePlus',\n OPPO: 'OPPO',\n OUYA: 'Ouya',\n PALM: 'Palm',\n PANASONIC: 'Panasonic',\n PEBBLE: 'Pebble',\n PHILIPS: 'Philips',\n PICO: 'Pico',\n POLYTRON: 'Polytron',\n REALME: 'Realme',\n RETROID: 'Retroid',\n RIM: 'RIM',\n ROKU: 'Roku',\n SAMSUNG: 'Samsung',\n SHARP: 'Sharp',\n SIEMENS: 'Siemens',\n SMARTFREN: 'Smartfren',\n SONY: 'Sony',\n SPRINT: 'Sprint',\n TCL: 'TCL',\n TECHNISAT: 'TechniSAT',\n TECNO: 'TECNO',\n TESLA: 'Tesla',\n ULEFONE: 'Ulefone',\n VIVO: 'Vivo',\n VIZIO: 'Vizio',\n VODAFONE: 'Vodafone',\n WIKO: 'Wiko',\n XBOX: 'Xbox',\n XIAOMI: 'Xiaomi',\n ZEBRA: 'Zebra',\n ZTE: 'ZTE',\n\n // TODO : test!\n});\n/**\n * @deprecated Use `DeviceVendor` instead\n */\nconst Vendor = DeviceVendor;\n\nconst EngineName = Object.freeze({\n AMAYA: 'Amaya',\n ARKWEB: 'ArkWeb',\n BLINK: 'Blink',\n EDGEHTML: 'EdgeHTML',\n FLOW: 'Flow',\n GECKO: 'Gecko',\n GOANNA: 'Goanna',\n ICAB: 'iCab',\n KHTML: 'KHTML',\n LIBWEB: 'LibWeb',\n LINKS: 'Links',\n LYNX: 'Lynx',\n NETFRONT: 'NetFront',\n NETSURF: 'NetSurf',\n PRESTO: 'Presto',\n SERVO: 'Servo',\n TASMAN: 'Tasman',\n TRIDENT: 'Trident',\n W3M: 'w3m',\n WEBKIT: 'WebKit'\n});\n/**\n * @deprecated Use `EngineName` instead\n */\nconst Engine = EngineName;\n\nconst OSName = Object.freeze({\n AIX: 'AIX',\n AMIGA_OS: 'Amiga OS',\n ANDROID: 'Android',\n ANDROID_X86: 'Android-x86',\n ARCAOS: 'ArcaOS',\n ARCH: 'Arch',\n BADA: 'Bada',\n BEOS: 'BeOS',\n BLACKBERRY: 'BlackBerry',\n CENTOS: 'CentOS',\n CHROME_OS: 'Chrome OS',\n CHROMECAST: 'Chromecast',\n CHROMECAST_ANDROID: 'Chromecast Android',\n CHROMECAST_FUCHSIA: 'Chromecast Fuchsia',\n CHROMECAST_LINUX: 'Chromecast Linux',\n CHROMECAST_SMARTSPEAKER: 'Chromecast SmartSpeaker',\n CONTIKI: 'Contiki',\n DEBIAN: 'Debian',\n DEEPIN: 'Deepin',\n DRAGONFLY: 'DragonFly',\n ELEMENTARY_OS: 'elementary OS',\n FEDORA: 'Fedora',\n FIREFOX_OS: 'Firefox OS',\n FREEBSD: 'FreeBSD',\n FUCHSIA: 'Fuchsia',\n GENTOO: 'Gentoo',\n GHOSTBSD: 'GhostBSD',\n GNU: 'GNU',\n HAIKU: 'Haiku',\n HARMONYOS: 'HarmonyOS',\n HP_UX: 'HP-UX',\n HURD: 'Hurd',\n IOS: 'iOS',\n JOLI: 'Joli',\n KAIOS: 'KaiOS',\n KNOPPIX: 'Knoppix',\n KUBUNTU: 'Kubuntu',\n LINPUS: 'Linpus',\n LINSPIRE: 'Linspire',\n LINUX: 'Linux',\n MACOS: 'macOS',\n MAEMO: 'Maemo',\n MAGEIA: 'Mageia',\n MANDRIVA: 'Mandriva',\n MANJARO: 'Manjaro',\n MEEGO: 'MeeGo',\n MINIX: 'Minix',\n MINT: 'Mint',\n MORPH_OS: 'Morph OS',\n NETBSD: 'NetBSD',\n NETRANGE: 'NetRange',\n NETTV: 'NetTV',\n NINTENDO: 'Nintendo',\n OPENHARMONY: 'OpenHarmony',\n OPENBSD: 'OpenBSD',\n OPENVMS: 'OpenVMS',\n OS2: 'OS/2',\n PALM: 'Palm',\n PC_BSD: 'PC-BSD',\n PCLINUXOS: 'PCLinuxOS',\n PICO: 'Pico',\n PLAN9: 'Plan9',\n PLAYSTATION: 'PlayStation',\n QNX: 'QNX',\n RASPBIAN: 'Raspbian',\n REDHAT: 'RedHat',\n RIM_TABLET_OS: 'RIM Tablet OS',\n RISC_OS: 'RISC OS',\n SABAYON: 'Sabayon',\n SAILFISH: 'Sailfish',\n SERENITYOS: 'SerenityOS',\n SERIES40: 'Series40',\n SLACKWARE: 'Slackware',\n SOLARIS: 'Solaris',\n SUSE: 'SUSE',\n SYMBIAN: 'Symbian',\n TIZEN: 'Tizen',\n UBUNTU: 'Ubuntu',\n UBUNTU_TOUCH: 'Ubuntu Touch',\n UNIX: 'Unix',\n VECTORLINUX: 'VectorLinux',\n WATCHOS: 'watchOS',\n WEBOS: 'WebOS',\n WINDOWS: 'Windows',\n WINDOWS_CE: 'Windows CE',\n WINDOWS_IOT: 'Windows IoT',\n WINDOWS_MOBILE: 'Windows Mobile',\n WINDOWS_PHONE: 'Windows Phone',\n WINDOWS_RT: 'Windows RT',\n XBOX: 'Xbox',\n XUBUNTU: 'Xubuntu',\n ZENWALK: 'Zenwalk'\n\n // TODO : test!\n});\n/**\n * @deprecated Use `OSName` instead\n */\nconst OS = OSName;\n\n/*////////////////////////////////\n * Enums for Extensions submodule\n *///////////////////////////////\n\nconst Extension = Object.freeze({\n BrowserName: {\n CLI: {\n CURL: 'curl',\n ELINKS: 'ELinks',\n HTTPIE: 'HTTPie',\n LYNX: 'Lynx',\n WGET: 'Wget'\n },\n Crawler: {\n AHREFS_BOT: 'AhrefsBot',\n AI2_BOT: 'AI2Bot',\n AIHIT_BOT: 'aiHitBot',\n ALGOLIA_CRAWLER: 'Algolia Crawler',\n APPLE_BOT: 'Applebot',\n APPLE_BOT_EXTENDED: 'Applebot-Extended',\n ASK_TEOMA: 'Teoma',\n AMAZON_BOT: 'Amazonbot',\n AMAZON_CONTXBOT: 'contxbot',\n ANTHROPIC_AI: 'anthropic-ai',\n ANTHROPIC_CLAUDE_BOT: 'ClaudeBot',\n ANTHROPIC_CLAUDE_SEARCHBOT: 'Claude-SearchBot',\n ANTHROPIC_CLAUDE_WEB: 'Claude-Web',\n ARCHIVEORG_BOT: 'archive.org_bot',\n BAIDU_ADS: 'Baidu-ADS',\n BAIDU_SPIDER: 'Baiduspider',\n BAIDU_SPIDER_ADS: 'Baiduspider-ads',\n BAIDU_SPIDER_CPRO: 'Baiduspider-cpro',\n BAIDU_SPIDER_FAVO: 'Baiduspider-favo',\n BAIDU_SPIDER_IMAGE: 'Baiduspider-image',\n BAIDU_SPIDER_NEWS: 'Baiduspider-news',\n BAIDU_SPIDER_RENDER: 'Baiduspider-render',\n BAIDU_SPIDER_VIDEO: 'Baiduspider-video',\n BLEX_BOT: 'BLEXBot',\n BOTIFY: 'botify',\n BRAVE_BOT: 'Bravebot',\n BYTEDANCE_BYTESPIDER: 'Bytespider',\n BYTEDANCE_TIKTOKSPIDER: 'TikTokSpider',\n COMMON_CRAWL_CCBOT: 'CCBot',\n COCCOC_BOT_WEB: 'coccocbot-web',\n COCCOC_BOT_IMAGE: 'coccocbot-image',\n COHERE_TRAINING_DATA_CRAWLER: 'cohere-training-data-crawler',\n COTOYOGI: 'Cotoyogi',\n COVEO_BOT: 'Coveobot',\n CRITEO_BOT: 'CriteoBot',\n DATAFORSEO_BOT: 'DataForSeoBot',\n DAUM: 'Daum',\n DAUM_DAUMOA: 'Daumoa',\n DAUM_DAUMOA_IMAGE: 'Daumoa-image',\n DEEPSEEK_BOT: 'DeepSeekBot',\n DIFFBOT: 'Diffbot',\n DUCKDUCKGO_BOT: 'DuckDuckBot',\n DUCKDUCKGO_FAVICONS_BOT: 'DuckDuckGo-Favicons-Bot',\n ELASTIC: 'Elastic',\n ELASTIC_SWIFTYPE_BOT: 'Swiftbot',\n EXALEAD_EXABOT: 'Exabot',\n FIRECRAWL_AGENT: 'FirecrawlAgent',\n FREESPOKE: 'Freespoke',\n GOOGLE_ADSBOT: 'AdsBot-Google',\n GOOGLE_ADSBOT_MOBILE: 'Adsbot-Google-Mobile',\n GOOGLE_ADSENSE: 'AdSense',\n GOOGLE_APIS: 'APIs-Google',\n GOOGLE_BOT: 'Googlebot',\n GOOGLE_BOT_IMAGE: 'Googlebot-Image',\n GOOGLE_BOT_NEWS: 'Googlebot-News',\n GOOGLE_BOT_VIDEO: 'Googlebot-Video',\n GOOGLE_CLOUDVERTEXBOT: 'Google-CloudVertexBot',\n GOOGLE_EXTENDED: 'Google-Extended',\n GOOGLE_INSPECTIONTOOL: 'Google-InspectionTool',\n GOOGLE_OTHER: 'GoogleOther',\n GOOGLE_OTHER_IMAGE: 'GoogleOther-Image',\n GOOGLE_OTHER_VIDEO: 'GoogleOther-Video',\n GOOGLE_SAFETY: 'Google-Safety',\n GOOGLE_STOREBOT: 'Storebot-Google',\n HIVE_IMAGESIFTBOT: 'ImagesiftBot',\n HUAWEI_PANGUBOT: 'PanguBot',\n HUAWEI_PETALBOT: 'PetalBot',\n HUGGINGFACE_BOT: 'HuggingFace-Bot',\n HUNTER_VELENPUBLICWEBCRAWLER: 'VelenPublicWebCrawler',\n IA_ARCHIVER: 'ia_archiver',\n IASK_BOT: 'iAskBot',\n KAGI_BOT: 'Kagibot',\n KANGAROO_BOT: 'Kangaroo Bot',\n LINE_SPIDER: 'Linespider',\n LINKEDIN_BOT: 'LinkedInBot',\n MAGPIE_CRAWLER: 'magpie-crawler',\n MARGINALIA: 'marginalia',\n META_EXTERNALAGENT: 'meta-externalagent',\n META_FACEBOOKBOT: 'FacebookBot',\n META_FACEBOOKCATALOG: 'facebookcatalog',\n META_FACEBOOKEXTERNALHIT: 'facebookexternalhit',\n MAJESTIC_MJ12BOT: 'MJ12bot',\n MICROSOFT_BINGBOT: 'Bingbot',\n MICROSOFT_MSNBOT: 'msnbot',\n MICROSOFT_ADIDXBOT: 'adidxbot',\n MOJEEK_BOT: 'MojeekBot',\n MOZ_DOTBOT: 'DotBot',\n ONCRAWL: 'OnCrawl',\n ONESPOT_SCRAPERBOT: 'Onespot-ScraperBot',\n OPENAI_GPTBOT: 'GPTBot',\n OPENAI_SEARCH_BOT: 'OAI-SearchBot',\n PERPLEXITY_BOT: 'PerplexityBot',\n QIHOO_360_SPIDER: '360Spider',\n QWANT_BOT: 'Qwantbot',\n QWANT_BOT_NEWS: 'Qwantbot-news',\n REPLICATE_BOT: 'Replicate-Bot',\n RUNPOD_BOT: 'RunPod-Bot',\n SB_INTUITIONS_BOT: 'SBIntuitionsBot',\n SEEKPORT_BOT: 'SeekportBot',\n SEMRUSH_BOT: 'SemrushBot',\n SEMRUSH_BOT_BACKLINK: 'SemrushBot-BA',\n SEMRUSH_BOT_CONTENTSHAKE: 'SemrushBot-OCOB',\n SEMRUSH_BOT_SEO_CHECKER: 'SemrushBot-SI',\n SEZNAM_BOT: 'SeznamBot',\n SITEIMPROVE: 'Siteimprove',\n SOGOU_PIC_SPIDER: 'Sogou Pic Spider',\n SOGOU_WEB_SPIDER: 'Sogou web spider',\n STARTPAGE: 'Startpage',\n SURLY_BOT: 'SurdotlyBot',\n TIMPI_BOT: 'Timpibot',\n TOGETHER_BOT: 'Together-Bot',\n TURNITIN_BOT: 'TurnitinBot',\n TWIN_AGENT: 'TwinAgent',\n VERCEL_V0BOT: 'v0bot',\n WEBZIO: 'webzio',\n WEBZIO_EXTENDED: 'Webzio-Extended',\n WEBZIO_OMGILI: 'omgili',\n WEBZIO_OMGILI_BOT: 'omgilibot',\n XAI_BOT: 'xAI-Bot',\n YAHOO_JAPAN: 'Y!J-BRW',\n YAHOO_SLURP: 'Yahoo! Slurp',\n YANDEX_ACCESSIBILITY_BOT: 'YandexAccessibilityBot',\n YANDEX_ADDITIONAL_BOT: 'YandexAdditionalBot',\n YANDEX_ADNET: 'YandexAdNet',\n YANDEX_BLOGS: 'YandexBlogs',\n YANDEX_BOT: 'YandexBot',\n YANDEX_BOT_MIRRORDETECTOR: 'YandexBot MirrorDetector',\n YANDEX_COMBOT: 'YandexComBot',\n YANDEX_FAVICONS: 'YandexFavicons',\n YANDEX_IMAGE_RESIZER: 'YandexImageResizer',\n YANDEX_IMAGES: 'YandexImages',\n YANDEX_MARKET: 'YandexMarket',\n YANDEX_MEDIA: 'YandexMedia',\n YANDEX_METRIKA: 'YandexMetrika',\n YANDEX_MOBILE_BOT: 'YandexMobileBot',\n YANDEX_MOBILE_SCREENSHOT_BOT: 'YandexMobileScreenShotBot',\n YANDEX_NEWS: 'YandexNews',\n YANDEX_ONTODB: 'YandexOntoDB',\n YANDEX_ONTODB_API: 'YandexOntoDBAPI',\n YANDEX_PARTNER: 'YandexPartner',\n YANDEX_RCA: 'YandexRCA',\n YANDEX_RENDERRESOURCES_BOT: 'YandexRenderResourcesBot',\n YANDEX_SCREENSHOT_BOT: 'YandexScreenshotBot',\n YANDEX_SPRAV_BOT: 'YandexSpravBot',\n YANDEX_TRACKER: 'YandexTracker',\n YANDEX_VERTICALS: 'YandexVerticals',\n YANDEX_VERTIS: 'YandexVertis',\n YANDEX_VIDEO: 'YandexVideo',\n YANDEX_VIDEO_PARSER: 'YandexVideoParser',\n YANDEX_WEBMASTER: 'YandexWebmaster',\n YEP_BOT: 'YepBot',\n YETI: 'Yeti',\n YISOU_SPIDER: 'YisouSpider',\n YOU_BOT: 'YouBot',\n ZHIPU_CHATGLM_SPIDER: 'ChatGLM-Spider',\n ZUM_BOT: 'ZumBot'\n },\n Email: {\n AIRMAIL: 'Airmail',\n APPLE_MAIL: 'Mail',\n BLUEMAIL: 'BlueMail',\n DAUM_MAIL: 'DaumMail',\n EVOLUTION: 'Evolution',\n EM_CLIENT: 'eM Client',\n FOXMAIL: 'Foxmail',\n KMAIL: 'KMail',\n KMAIL2: 'kmail2',\n KONTACT: 'Kontact',\n MICROSOFT_OUTLOOK: 'Microsoft Outlook',\n MICROSOFT_OUTLOOK_MAC: 'MacOutlook',\n NAVER_MAILAPP: 'NaverMailApp',\n POLYMAIL: 'Polymail',\n PROTON_MAIL: 'ProtonMail',\n SPARK_MAIL: 'SparkDesktop',\n SPARROW: 'Sparrow',\n THUNDERBIRD: 'Thunderbird',\n YAHOO_MAIL: 'Yahoo',\n ZIMBRA: 'Zimbra',\n ZOHO_MAIL: 'ZohoMail-Desktop'\n },\n Fetcher: {\n AHREFS_SITEAUDIT: 'AhrefsSiteAudit',\n ANTHROPIC_CLAUDE_USER: 'Claude-User',\n ASANA: 'Asana',\n BETTER_UPTIME_BOT: 'Better Uptime Bot',\n BITLY_BOT: 'bitlybot',\n BLUESKY: 'Bluesky',\n BUFFER_LINKPREVIEWBOT: 'BufferLinkPreviewBot',\n COHERE_AI: 'Cohere-AI',\n DISCORD_BOT: 'Discordbot',\n DUCKDUCKGO_ASSISTBOT: 'DuckAssistBot',\n GOOGLE_CHROME_LIGHTHOUSE: 'Chrome-Lighthouse',\n GOOGLE_FEEDFETCHER: 'FeedFetcher-Google',\n GOOGLE_GEMINI_DEEP_RESEARCH: 'Gemini-Deep-Research',\n GOOGLE_IMAGEPROXY: 'GoogleImageProxy',\n GOOGLE_PAGERENDERER: 'Google-PageRenderer',\n GOOGLE_READ_ALOUD: 'Google-Read-Aloud',\n GOOGLE_PRODUCER: 'GoogleProducer',\n GOOGLE_SITE_VERIFICATION: 'Google-Site-Verification',\n HUBSPOT_PAGE_FETCHER: 'HubSpot Page Fetcher',\n IFRAMELY: 'Iframely',\n KAKAOTALK_SCRAP: 'kakaotalk-scrap',\n KEYBASE_BOT: 'KeybaseBot',\n META_EXTERNALFETCHER: 'meta-externalfetcher',\n META_WHATSAPP: 'WhatsApp',\n MICROSOFT_BINGPREVIEW: 'BingPreview',\n MICROSOFT_PREVIEW: 'MicrosoftPreview',\n MISTRALAI_USER: 'MistralAI-User',\n NAVER_BLUENO: 'Blueno',\n ONCRAWL_ROGERBOT: 'rogerbot',\n OPENAI_CHATGPT_USER: 'ChatGPT-User',\n PERPLEXITY_USER: 'Perplexity-User',\n PINTEREST_BOT: 'Pinterestbot',\n SEMRUSH_SITEAUDITBOT: 'SiteAuditBot',\n SLACK_BOT: 'Slackbot',\n SLACK_BOT_LINKEXPANDING: 'Slackbot-LinkExpanding',\n SLACK_IMGPROXY: 'Slack-ImgProxy',\n SNAP_URL_PREVIEW: 'Snap URL Preview',\n SKYPE_URIPREVIEW: 'SkypeUriPreview',\n TELEGRAM_BOT: 'TelegramBot',\n UPTIMEROBOT: 'UptimeRobot',\n VERCEL_FAVICON_BOT: 'vercel-favicon-bot',\n VERCEL_SCREENSHOT_BOT: 'vercel-screenshot-bot',\n VERCEL_BOT: 'Vercelbot',\n VERCEL_FLAGS: 'vercelflags',\n VERCEL_TRACING: 'verceltracing',\n X_TWITTERBOT: 'Twitterbot',\n YANDEX_CALENDAR: 'YandexCalendar',\n YANDEX_DIRECT: 'YandexDirect',\n YANDEX_DIRECTDYN: 'YandexDirectDyn',\n YANDEX_DIRECTFETCHER: 'YaDirectFetcher',\n YANDEX_FORDOMAIN: 'YandexForDomain',\n YANDEX_PAGECHECKER: 'YandexPagechecker',\n YANDEX_SEARCHSHOP: 'YandexSearchShop',\n YANDEX_SITELINKS: 'YandexSitelinks',\n YANDEX_USERPROXY: 'YandexUserproxy',\n ZOOMINFO_BOT: 'Zoombot'\n },\n InApp: {\n DISCORD: 'Discord',\n EVERNOTE: 'Evernote',\n FIGMA: 'Figma',\n FLIPBOARD: 'Flipboard',\n MATTERMOST: 'Mattermost',\n TEAMS: 'Teams',\n NOTION: 'Notion',\n POSTMAN: 'Postman',\n RAMBOX: 'Rambox',\n ROCKETCHAT: 'Rocket.Chat',\n SLACK: 'Slack',\n TIKTOK_LITE: 'TikTok Lite',\n VSCODE: 'VS Code',\n YAHOO_JAPAN: 'Yahoo! Japan'\n },\n Library: {\n ADOBE_AIR: 'AdobeAIR',\n AIOHTTP: 'aiohttp',\n APACHE_HTTPCLIENT: 'Apache-HttpClient',\n AXIOS: 'axios',\n GO_HTTP_CLIENT: 'go-http-client',\n GOT: 'got',\n GUZZLEHTTP: 'GuzzleHttp',\n JAVA: 'Java',\n JAVA_HTTPCLIENT: 'Java-http-client',\n JSDOM: 'jsdom',\n LIBWWW_PERL: 'libwww-perl',\n LUA_RESTY_HTTP: 'lua-resty-http',\n NEEDLE: 'Needle',\n NUTCH: 'Nutch',\n OKHTTP: 'OkHttp',\n NODE_FETCH: 'node-fetch',\n NODE_SUPERAGENT: 'node-superagent',\n PHP_SOAP: 'PHP-SOAP',\n POSTMAN_RUNTIME: 'PostmanRuntime',\n PYTHON_HTTPX: 'python-httpx',\n PYTHON_URLLIB: 'python-urllib',\n PYTHON_URLLIB3: 'python-urllib3',\n PYTHON_REQUESTS: 'python-requests',\n SCRAPY: 'Scrapy'\n }\n },\n DeviceVendor: {\n Vehicle: {\n BMW: 'BMW',\n BYD: 'BYD',\n JEEP: 'Jeep',\n RIVIAN: 'Rivian',\n TESLA: 'Tesla',\n VOLVO: 'Volvo'\n }\n }\n});\n\nexport { \n Browser,// deprecated\n CPU, // deprecated\n Device, // deprecated\n Vendor, // deprecated\n Engine, // deprecated\n OS, // deprecated\n BrowserName,\n BrowserType, \n CPUArch,\n DeviceType, \n DeviceVendor,\n EngineName,\n OSName,\n Extension\n};","import { UAParser } from 'ua-parser-js';\nimport { OS } from 'ua-parser-js/enums';\n\nconst ua = UAParser();\nexport const isMac = ua.os.is(OS.MACOS);\n","/**\n * Makes an element programmatically focusable by adding a `tabindex=\"-1\"` attribute.\n * Or does nothing if the element is already focusable 🤷🏻\n * It's required to process keyboard events on an element that is not natively focusable.\n */\nexport const programmaticallyFocusable = (container: HTMLElement) => {\n if (!container.hasAttribute('tabindex') && container.tabIndex < 0) {\n container.setAttribute('tabindex', '-1');\n }\n\n container.classList.add('no-focus-outline');\n};\n","export const getHighlightClientRects = (range: Range) => {\n const textNodes: Text[] = [];\n\n // Get all text nodes inside the range's commonAncestorContainer\n const it = document.createNodeIterator(\n range.commonAncestorContainer, \n NodeFilter.SHOW_TEXT);\n\n /*\n Filter text nodes that intersect the range. Note that we could\n also include this filter in the node iterator directly.\n But the while loop is faster (!) - possibly due to a function call overhead.\n */\n let currentNode: Text | undefined;\n \n while ((currentNode = it.nextNode() as Text)) {\n if (range.intersectsNode(currentNode)) {\n textNodes.push(currentNode);\n }\n }\n\n if (textNodes.length < 2) {\n // Trivial case: selection is inside a single text node\n // or empty (shouldn't happen!) - no need to create our own ranges.\n return Array.from(range.getClientRects());\n } else {\n const first = textNodes[0];\n const last = textNodes[textNodes.length - 1];\n\n const firstRange = document.createRange();\n firstRange.selectNode(first);\n if (range.startContainer.nodeType === Node.TEXT_NODE) {\n firstRange.setStart(first, range.startOffset);\n } else {\n const childNode = range.startContainer.childNodes[range.startOffset];\n if (childNode) {\n firstRange.setStartBefore(childNode);\n } else {\n firstRange.setStartAfter(range.startContainer);\n }\n }\n\n const lastRange = document.createRange();\n lastRange.selectNode(last);\n if (range.endContainer.nodeType === Node.TEXT_NODE) {\n lastRange.setEnd(last, range.endOffset);\n } else {\n const childNode = range.endContainer.childNodes[range.endOffset];\n if (childNode)\n lastRange.setEndBefore(childNode);\n else \n lastRange.setEndAfter(range.endContainer);\n }\n\n // Text nodes have no .getClientRects()!\n const getTextClientRects = (t: Text) => {\n const r = document.createRange();\n r.selectNode(t);\n return Array.from(r.getClientRects());\n }\n\n return [\n ...Array.from(firstRange.getClientRects()),\n ...textNodes.slice(1, -1).flatMap(getTextClientRects),\n ...Array.from(lastRange.getClientRects())\n ];\n }\n}\n","import { isRangeAnnotatable, NOT_ANNOTATABLE_CLASS, NOT_ANNOTATABLE_SELECTOR } from './isNotAnnotatable';\n\nconst iterateNotAnnotatableElements = function*(range: Range): Generator<HTMLElement> {\n const notAnnotatableIterator = document.createNodeIterator(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n (node) =>\n node instanceof HTMLElement // Only elements that can have the class applied\n && node.classList.contains(NOT_ANNOTATABLE_CLASS) // Only elements that are not annotatable\n && !node.parentElement.closest(NOT_ANNOTATABLE_SELECTOR) // Only elements that are not descendants of a not annotatable element\n && range.intersectsNode(node) // Only elements that are within the range\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP\n );\n\n let notAnnotatableNode: Node | null;\n\n while ((notAnnotatableNode = notAnnotatableIterator.nextNode())) {\n if (notAnnotatableNode instanceof HTMLElement) {\n yield notAnnotatableNode;\n }\n }\n}\n\n/**\n * Splits a DOM Range into one or more ranges that span annotatable content only.\n */\nexport const splitAnnotatableRanges = (container: Node, range: Range): Range[] => {\n if (!isRangeAnnotatable(container, range)) return [];\n\n const annotatableRanges: Range[] = [];\n\n let prevNotAnnotatable: HTMLElement | null = null;\n\n for (const notAnnotatable of iterateNotAnnotatableElements(range)) {\n let subRange: Range;\n\n // From the start of the range to the not annotatable element.\n // If selection starts on the non-annotatable element, a collapsed range will be created and ignored.\n if (!prevNotAnnotatable) {\n subRange = range.cloneRange();\n subRange.setEndBefore(notAnnotatable);\n } else {\n // From the previous not annotatable element to the current not annotatable element\n subRange = document.createRange();\n subRange.setStartAfter(prevNotAnnotatable);\n subRange.setEndBefore(notAnnotatable);\n }\n\n if (!subRange.collapsed)\n annotatableRanges.push(subRange);\n\n prevNotAnnotatable = notAnnotatable;\n }\n\n // From the last not annotatable element to the end of the parent range\n if (prevNotAnnotatable) {\n const lastRange = range.cloneRange();\n lastRange.setStartAfter(prevNotAnnotatable);\n if (!lastRange.collapsed) {\n annotatableRanges.push(lastRange);\n }\n }\n\n return annotatableRanges.length > 0 ? annotatableRanges : [range];\n}\n\nexport const getRangeAnnotatableContents = (range: Range): DocumentFragment => {\n const contents = range.cloneContents();\n contents.querySelectorAll(NOT_ANNOTATABLE_SELECTOR).forEach((el) => el.remove());\n return contents;\n}\n","import { getRangeAnnotatableContents } from './splitAnnotatableRanges';\n\nexport const getQuoteContext = (\n range: Range, \n container: HTMLElement, \n length = 10,\n offsetReferenceSelector?: string\n) => {\n const offsetReference: HTMLElement = offsetReferenceSelector\n ? (range.startContainer.parentElement as HTMLElement).closest(offsetReferenceSelector)!\n : container;\n\n const rangeBefore = document.createRange();\n rangeBefore.setStart(offsetReference, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n const before = getRangeAnnotatableContents(rangeBefore).textContent;\n \n const rangeAfter = document.createRange();\n rangeAfter.setStart(range.endContainer, range.endOffset);\n\n if (offsetReference === document.body)\n rangeAfter.setEnd(offsetReference, offsetReference.childNodes.length);\n else\n rangeAfter.setEndAfter(offsetReference);\n\n const after = getRangeAnnotatableContents(rangeAfter).textContent;\n\n return {\n prefix: before.substring(before.length - length),\n suffix: after.substring(0, length)\n }\n}\n","import type { TextSelector } from '../model';\n\nexport const isRevived = (selector: TextSelector[]) =>\n selector.every(s => s.range instanceof Range && !s.range.collapsed);\n","export const whitespaceOrEmptyRegex = /^\\s*$/;\n\nexport const isRangeWhitespaceOrEmpty = (range: Range): boolean => \n whitespaceOrEmptyRegex.test(range.toString())\n\nexport const isNodeWhitespaceOrEmpty = (node: Node): boolean =>\n whitespaceOrEmptyRegex.test(node.textContent || '');\n","// The three topological relations we'll check for\ntype Relation =\n // Inline elements, same height, directly adjacent\n 'inline-adjacent' |\n // Inline elements, A fully contains B\n 'inline-contains' |\n // Inline elements, A is fully contained inside B\n 'inline-is-contained' |\n // At least one block element, A fully contains B\n 'block-contains' |\n // At least one block element, A is fully contained in B\n 'block-is-contained';\n\n// Note that this is not a general topology test. Takes a \n// few shortcuts to test ONLY the situations we'll encounter\n// with text selections.\nconst getRelation = (\n rectA: DOMRect, \n rectB: DOMRect, \n hTolerance: number, \n vTolerance: number\n): Relation | undefined => {\n const round = (num: number) => Math.round(num * 10) / 10;\n\n // Some browsers have fractional pixel differences (looking at you FF!)\n const a = {\n top: round(rectA.top),\n bottom: round(rectA.bottom),\n left: round(rectA.left),\n right: round(rectA.right)\n };\n\n const b = {\n top: round(rectB.top),\n bottom: round(rectB.bottom),\n left: round(rectB.left),\n right: round(rectB.right)\n };\n\n if (Math.abs(a.top - b.top) < vTolerance && Math.abs(a.bottom - b.bottom) < vTolerance) {\n // Same height - check for containment and adjacency\n if (Math.abs(a.left - b.right) < hTolerance || Math.abs(a.right - b.left) < hTolerance)\n return 'inline-adjacent';\n\n if (a.left >= b.left && a.right <= b.right)\n return 'inline-is-contained';\n\n if (a.left <= b.left && a.right >= b.right)\n return 'inline-contains';\n } else {\n // Different heights - check for containment\n if (a.top <= b.top && a.bottom >= b.bottom) {\n if (a.left <= b.left && a.right >= b.right) {\n return 'block-contains';\n }\n } else if (a.top >= b.top && a.bottom <= b.bottom) {\n if (a.left >= b.left && a.right <= b.right) {\n return 'block-is-contained';\n }\n }\n }\n}\n\nconst union = (a: DOMRect, b: DOMRect): DOMRect => {\n const left = Math.min(a.left, b.left);\n const right = Math.max(a.right, b.right);\n const top = Math.min(a.top, b.top);\n const bottom = Math.max(a.bottom, b.bottom);\n\n return new DOMRect(left, top, right - left, bottom - top);\n}\n\nexport const mergeClientRects = (\n rects: DOMRect[], \n hTolerance = 0.5, \n vTolerance = 0.5\n) => rects.reduce<DOMRect[]>((merged, rectA) => {\n // Some browser report empty rects - discard\n if (rectA.width === 0 || rectA.height === 0)\n return merged;\n\n let next = [...merged];\n\n let wasMerged = false;\n\n for (const rectB of merged) {\n const relation = getRelation(rectA, rectB, hTolerance, vTolerance);\n\n if (relation === 'inline-adjacent') {\n // A and B are adjacent - remove B and keep union\n next = next.map(r => r === rectB ? union(rectA, rectB) : r);\n wasMerged = true;\n break;\n } else if (relation === 'inline-contains') {\n // A contains B - remove B and keep A\n next = next.map(r => r === rectB ? rectA : r);\n wasMerged = true;\n break;\n } else if (relation === 'inline-is-contained') {\n // B contains A - skip A\n wasMerged = true;\n break;\n } else if (relation === 'block-contains' || relation === 'block-is-contained') {\n // Block containment - keep the element with a smaller width\n if (rectA.width < rectB.width)\n next = next.map(r => r === rectB ? rectA : r);\n\n // When the width is the same, keep the element with a smaller height\n if (rectA.width === rectB.width && rectA.height < rectB.width)\n next = next.map(r => r === rectB ? rectA : r);\n\n wasMerged = true;\n break;\n }\n }\n\n return wasMerged ? next : [...next, rectA];\n}, []);\n\nexport const toDomRectList = (rects: DOMRect[]): DOMRectList => ({\n length: rects.length,\n item: (index) => rects[index],\n [Symbol.iterator]: function* (): ArrayIterator<DOMRect> {\n for (let i = 0; i < this.length; i++)\n yield this.item(i)!;\n }\n});","export const mergeRanges = (ranges: Range[]): Range[] => {\n if (ranges.length === 0) return [];\n if (ranges.length === 1) return [ranges[0]];\n\n // Sort by start position\n ranges.sort((a, b) => {\n const cmp = a.compareBoundaryPoints(Range.START_TO_START, b);\n if (cmp !== 0) return cmp;\n\n // If equal, sort by end position\n return a.compareBoundaryPoints(Range.END_TO_END, b);\n });\n\n const [first, ...rest] = ranges;\n\n const result = rest.reduce<{ merged: Range[], current: Range }>((acc, next) => {\n // Check if current and next overlap or are adjacent (current.end >= next.start)\n const comparison = acc.current.compareBoundaryPoints(Range.START_TO_END, next);\n\n if (comparison >= 0) {\n // Ranges overlap/touch - merge\n const endComparison = acc.current.compareBoundaryPoints(Range.END_TO_END, next);\n if (endComparison < 0) {\n // Next extends beyond current - extend current's end\n acc.current.setEnd(next.endContainer, next.endOffset);\n }\n\n // Otherwise current already encompasses next, no change needed\n return acc;\n } else {\n // Disjoint - save current and start new range\n acc.merged.push(acc.current);\n acc.current = next.cloneRange();\n return acc;\n }\n }, { merged: [], current: first.cloneRange() });\n\n return [...result.merged, result.current];\n}","import { getRangeAnnotatableContents } from './splitAnnotatableRanges';\nimport type { TextSelector } from '../model';\n\nexport const rangeToSelector = (\n range: Range,\n container: HTMLElement,\n offsetReferenceSelector?: string\n): TextSelector => {\n const rangeBefore = document.createRange();\n\n const offsetReference: HTMLElement = offsetReferenceSelector\n ? (range.startContainer.parentElement as HTMLElement).closest(offsetReferenceSelector)!\n : container;\n\n // A helper range from the start of the container to the start of the selection\n rangeBefore.setStart(offsetReference, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n // A content range before content w/o not annotatable elements\n const before = getRangeAnnotatableContents(rangeBefore).textContent;\n\n const quote = range.toString();\n const start = before.length || 0;\n const end = start + quote.length;\n\n return offsetReferenceSelector\n ? { quote, start, end, range, offsetReference }\n : { quote, start, end, range };\n}\n","/**\n * Offsets the given rect relative to the offset parent.\n */\nexport const toParentBounds = (rect: DOMRect, offset: DOMRect): DOMRect => {\n const { left, top, right, bottom } = rect;\n return new DOMRect(left - offset.left, top - offset.top, right - left, bottom - top);\n};\n\n/**\n * Inverse: translates the given relative rect back into viewport bounds.\n */\nexport const toViewportBounds = (rect: DOMRect, offset: DOMRect): DOMRect => {\n const { left, top, right, bottom } = rect;\n return new DOMRect(left + offset.left, top + offset.top, right - left, bottom - top);\n}\n","import type { TextSelector } from '../model';\nimport { NOT_ANNOTATABLE_SELECTOR } from './isNotAnnotatable';\n\n/**\n * Creates a new selector object with the revived DOM range from the given text annotation position\n * Only the annotatable elements are processed and counted towards the range\n *\n * @param selector annotation selector with start and end positions\n * @param container the HTML container of the annotated content\n *\n * @returns the revived selector\n */\nexport const reviveSelector = <T extends TextSelector>(selector: T, container: HTMLElement): T => {\n\n const { start, end } = selector;\n\n const offsetReference = selector.offsetReference || container;\n\n const iterator = document.createNodeIterator(container, NodeFilter.SHOW_TEXT, (node) =>\n node.parentElement?.closest(NOT_ANNOTATABLE_SELECTOR)\n ? NodeFilter.FILTER_SKIP\n : NodeFilter.FILTER_ACCEPT\n );\n\n // Position that contains the length of the preceding annotatable text nodes\n let runningOffset = 0;\n\n const range = document.createRange();\n\n let n = iterator.nextNode();\n if (n === null) console.error('Could not revive annotation target. Content missing.');\n\n // If there's no offset reference, start immediately\n let startCounting = !offsetReference;\n while (n !== null) {\n startCounting ||= (typeof offsetReference?.contains === 'function') ? offsetReference.contains(n) : false;\n\n if (startCounting) {\n const len = n.textContent?.length || 0;\n\n if (runningOffset + len > start) {\n range.setStart(n, start - runningOffset);\n break;\n }\n\n runningOffset += len;\n }\n\n n = iterator.nextNode();\n }\n\n // set range end\n while (n !== null) {\n const len = n.textContent?.length || 0;\n\n if (runningOffset + len >= end) {\n range.setEnd(n, end - runningOffset);\n break;\n }\n\n runningOffset += len;\n\n n = iterator.nextNode();\n }\n \n return {\n ...selector,\n range\n }\n\n}\n","import type { TextAnnotationTarget } from '../model';\nimport { isRevived } from './isRevived';\nimport { reviveSelector } from './reviveSelector';\n\nexport const reviveTarget = <T extends TextAnnotationTarget = TextAnnotationTarget>(target: T, container: HTMLElement): T =>\n isRevived(target.selector)\n ? target\n : ({\n ...target,\n selector: target.selector.map(s => s.range instanceof Range && !s.range.collapsed ? s : reviveSelector(s, container))\n });\n\n\n","import type { TextAnnotation } from '../model';\nimport { isRevived } from './isRevived';\nimport { reviveTarget } from './reviveTarget';\n\nexport const reviveAnnotation = <T extends TextAnnotation>(annotation: T, container: HTMLElement): T =>\n isRevived(annotation.target.selector)\n ? annotation\n : ({ ...annotation, target: reviveTarget(annotation.target, container) });","export const trimRangeToContainer = (\n range: Range,\n container: HTMLElement\n): Range => {\n const trimmedRange = range.cloneRange();\n\n /**\n * If the range starts outside the container -\n * trim it to the start of the container\n */\n if (!container.contains(trimmedRange.startContainer)) {\n trimmedRange.setStart(container, 0);\n }\n\n /**\n * If the range ends outside the container -\n * trim it to the end of the container\n */\n if (!container.contains(trimmedRange.endContainer)) {\n trimmedRange.setEnd(container, container.childNodes.length);\n }\n\n return trimmedRange;\n}\n","import type { TextAnnotationStore } from '../state';\nimport type { TextAnnotation } from '../model';\nimport { reviveTarget } from '../utils';\n\nconst getScrollParent = (el: Element) => {\n if (!el)\n return document.scrollingElement;\n\n const { overflowY } = window.getComputedStyle(el);\n const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';\n\n // Cf. discussion https://stackoverflow.com/questions/35939886/find-first-scrollable-parent\n if (isScrollable && el.scrollHeight > el.clientHeight)\n return el;\n else\n return getScrollParent(el.parentElement);\n};\n\n// Executes scroll on an annotation with a valid DOM range selector\nconst scroll = <I extends TextAnnotation = TextAnnotation>(\n store: TextAnnotationStore<I>,\n target: I['target'],\n scrollParent: Element\n) => {\n // Parent bounds and client (= visible) height\n const parentBounds = scrollParent.getBoundingClientRect();\n const parentHeight = scrollParent.clientHeight;\n const parentWidth = scrollParent.clientWidth;\n\n // Position of the annotation relative to viewport\n const annotationBounds = target.selector[0].range.getBoundingClientRect();\n\n /*\n Note: `getBoundingClientRect` seems to return the wrong height!\n (Includes block elements?)\n Instead, the normalized height is used from the spatial index!\n */\n const { width, height } = store.getAnnotationBounds(target.annotation);\n\n // Position of the annotation relative to scrollParent\n const offsetTop = annotationBounds.top - parentBounds.top;\n const offsetLeft = annotationBounds.left - parentBounds.left;\n\n const scrollTop = scrollParent.parentElement ? scrollParent.scrollTop : 0;\n const scrollLeft = scrollParent.parentElement ? scrollParent.scrollLeft : 0;\n\n // Scroll the annotation to the center of the viewport\n const top = offsetTop + scrollTop - (parentHeight - height) / 2;\n const left = offsetLeft + scrollLeft - (parentWidth - width) / 2;\n\n scrollParent.scroll({ top, left, behavior: 'smooth' });\n};\n\nexport const scrollIntoView = <I extends TextAnnotation = TextAnnotation>(\n container: HTMLElement, store: TextAnnotationStore<I>\n) => <E extends Element = Element>(\n annotationOrId: string | I, scrollParentOrId?: string | E\n) => {\n const id =\n typeof annotationOrId === 'string' ? annotationOrId : annotationOrId.id;\n\n const scrollParent = scrollParentOrId\n ? typeof scrollParentOrId === 'string' ? document.getElementById(scrollParentOrId) : scrollParentOrId\n : getScrollParent(container);\n\n\n if (!scrollParent) {\n console.warn(`The scroll parent is missing for the annotation: ${id}`, { container });\n return false;\n }\n\n // Get curren version of the annotation from the store\n const current = store.getAnnotation(id);\n if (!current) {\n console.warn(`The annotation is missing in the store: ${id}`);\n return false;\n }\n\n // The first selector is the topmost one as well\n const { range: annoRange } = current.target.selector[0];\n if (annoRange && !annoRange.collapsed) {\n scroll(store, current.target, scrollParent);\n return true;\n }\n\n // Try reviving to account for lazy rendering\n const revived = reviveTarget(current.target, container);\n const { range: revivedAnnoRange } = revived.selector[0];\n if (revivedAnnoRange && !revivedAnnoRange.collapsed) {\n scroll(store, revived, scrollParent);\n return true;\n }\n\n return false;\n};\n","import type { AnnotationState, Color, DrawingStyle } from '@annotorious/core';\nimport type { TextAnnotation } from 'src/model';\n\nexport interface HighlightStyle extends Pick<DrawingStyle, 'fill' | 'fillOpacity'> {\n\n underlineStyle?: string;\n\n underlineColor?: Color;\n\n underlineOffset?: number;\n\n underlineThickness?: number;\n \n}\n\nexport type HighlightStyleExpression = HighlightStyle \n | (<I extends TextAnnotation = TextAnnotation>(annotation: I, state: AnnotationState, zIndex?: number) => HighlightStyle | undefined);\n\nexport const DEFAULT_STYLE: HighlightStyle = { \n fill: 'rgb(0, 128, 255)', \n fillOpacity: 0.18\n};\n\nexport const DEFAULT_SELECTED_STYLE: HighlightStyle = { \n fill: 'rgb(0, 128, 255)', \n fillOpacity: 0.45 \n};\n","\nimport type { Highlight } from './Highlight';\nimport { DEFAULT_SELECTED_STYLE, DEFAULT_STYLE } from './HighlightStyle';\nimport type { HighlightStyle, HighlightStyleExpression } from './HighlightStyle';\nimport type { ViewportBounds } from './viewport';\n\nexport interface HighlightPainter {\n\n clear(): void;\n\n destroy(): void;\n\n paint(highlight: Highlight, viewportBounds: ViewportBounds): HighlightStyle;\n\n reset(): void;\n\n}\n\n/** Helper **/\nexport const paint = (\n highlight: Highlight,\n viewportBounds: ViewportBounds,\n style?: HighlightStyleExpression, \n painter?: HighlightPainter,\n zIndex?: number\n) => {\n const base: HighlightStyle = style \n ? typeof style === 'function' \n ? style(highlight.annotation, highlight.state, zIndex) || (\n highlight.state?.selected ? DEFAULT_SELECTED_STYLE : DEFAULT_STYLE\n )\n : style \n : highlight.state?.selected \n ? DEFAULT_SELECTED_STYLE \n : DEFAULT_STYLE;\n\n // Trigger the custom painter (if any) as a side-effect\n return painter ? painter.paint(highlight, viewportBounds) || base : base;\n}","function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\t// TODO: Deprecate the boolean parameter at some point.\n\tconst {immediate} = typeof options === 'boolean' ? {immediate: options} : options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction run() {\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\t\treturn result;\n\t}\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tresult = run();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (\n\t\t\tstoredContext\n\t\t\t&& this !== storedContext\n\t\t\t&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)\n\t\t) {\n\t\t\tthrow new Error('Debounced method called with different contexts of the same prototype.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tresult = run();\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tObject.defineProperty(debounced, 'isPending', {\n\t\tget() {\n\t\t\treturn timeoutId !== undefined;\n\t\t},\n\t});\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebounced.trigger();\n\t};\n\n\tdebounced.trigger = () => {\n\t\tresult = run();\n\n\t\tdebounced.clear();\n\t};\n\n\treturn debounced;\n}\n\n// Adds compatibility for ES modules\nmodule.exports.debounce = debounce;\n\nmodule.exports = debounce;\n","import type { ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../model';\n\nexport interface ViewportBounds {\n\n top: number;\n\n left: number;\n\n minX: number;\n\n minY: number;\n \n maxX: number;\n \n maxY: number;\n\n}\n\nexport const getViewportBounds = (container: HTMLElement): ViewportBounds => {\n const { top, left } = container.getBoundingClientRect();\n\n const { innerWidth, innerHeight } = window;\n\n const minX = - left;\n const minY = - top;\n const maxX = innerWidth - left;\n const maxY = innerHeight - top;\n\n return { top, left, minX, minY, maxX, maxY };\n}\n\nexport const trackViewport = (viewport: ViewportState) => {\n let visible = new Set<string>();\n\n const onDraw = (annotations: TextAnnotation[]) => {\n const ids = annotations.map(a => a.id);\n\n if (visible.size !== ids.length || ids.some(id => !visible.has(id))) {\n viewport.set(ids);\n } \n\n visible = new Set(ids);\n }\n\n return onDraw;\n\n}","import debounce from 'debounce';\n\nimport type { Filter, ViewportState } from '@annotorious/core';\n\nimport type { TextAnnotatorState } from '../state';\nimport { type ViewportBounds, getViewportBounds, trackViewport } from './viewport';\nimport type { HighlightPainter } from './HighlightPainter';\nimport type { Highlight } from './Highlight';\nimport type { HighlightStyleExpression } from './HighlightStyle';\n\nexport interface RendererImplementation {\n\n destroy(): void;\n\n redraw(\n\n highlights:Highlight[], \n\n bounds: ViewportBounds, \n \n style?: HighlightStyleExpression,\n\n painter?: HighlightPainter,\n\n lazy?: boolean\n \n ): void;\n\n setVisible(visible: boolean): void;\n\n}\n\nexport interface Renderer {\n\n destroy(): void;\n\n redraw(force?: boolean): void;\n\n setStyle(style?: HighlightStyleExpression): void;\n\n setFilter(filter?: Filter): void;\n\n setPainter(painter?: HighlightPainter): void;\n\n setVisible(visible: boolean): void;\n\n}\n\nexport const createBaseRenderer = <T extends TextAnnotatorState = TextAnnotatorState> (\n container: HTMLElement, \n state: T,\n viewport: ViewportState,\n renderer: RendererImplementation\n): Renderer => {\n const { store, selection, hover } = state;\n\n let currentStyle: HighlightStyleExpression | undefined;\n\n let currentFilter: Filter | undefined;\n\n let currentPainter: HighlightPainter;\n\n const onDraw = trackViewport(viewport);\n\n const onPointerMove = (event: PointerEvent) => {\n const {x, y} = container.getBoundingClientRect();\n\n const hit = store.getAt(event.clientX - x, event.clientY - y, false, currentFilter);\n if (hit) {\n if (hover.current !== hit.id) {\n container.classList.add('hovered');\n hover.set(hit.id);\n }\n } else {\n if (hover.current) {\n container.classList.remove('hovered');\n hover.set(null);\n }\n }\n }\n\n container.addEventListener('pointermove', onPointerMove);\n\n const redraw = debounce((lazy: boolean = false) => requestAnimationFrame(() => {\n if (currentPainter)\n currentPainter.clear();\n\n const bounds = getViewportBounds(container); \n\n const { minX, minY, maxX, maxY } = bounds;\n \n const annotationsInView = currentFilter\n ? store.getIntersecting(minX, minY, maxX, maxY).filter(({ annotation }) => currentFilter(annotation))\n : store.getIntersecting(minX, minY, maxX, maxY);\n\n const selectedIds = selection.selected.map(({ id }) => id);\n\n const highlights: Highlight[] = annotationsInView.map(({ annotation, rects }) => {\n const selected = selectedIds.includes(annotation.id);\n const hovered = annotation.id === hover.current;\n\n return {\n annotation,\n rects,\n state: { selected, hovered }\n };\n });\n\n renderer.redraw(highlights, bounds, currentStyle, currentPainter, lazy);\n\n setTimeout(() => onDraw(annotationsInView.map(({ annotation }) => annotation)), 1);\n }), 10);\n\n const setPainter = (painter: HighlightPainter) => { \n currentPainter = painter;\n redraw();\n }\n\n const setStyle = (style?: HighlightStyleExpression) => {\n currentStyle = style;\n redraw();\n }\n\n const setFilter = (filter?: Filter) => {\n currentFilter = filter;\n redraw(false);\n } \n\n // Refresh on store change\n const onStoreChange = () => redraw();\n store.observe(onStoreChange);\n\n // Refresh on selection change\n const unsubscribeSelection = selection.subscribe(() => redraw());\n\n // Refresh on hover change\n const unsubscribeHover = hover.subscribe(() => redraw());\n\n // Refresh on scroll\n const onScroll = () => redraw(true);\n\n document.addEventListener('scroll', onScroll, { capture: true, passive: true });\n\n // Refresh on resize\n const onResize = debounce(() => {\n store.recalculatePositions();\n\n currentPainter?.reset();\n\n redraw();\n }, 10);\n\n window.addEventListener('resize', onResize);\n\n const resizeObserver = new ResizeObserver(onResize);\n resizeObserver.observe(container);\n\n // This is an extra precaution. The position of the container\n // might shift (without resizing) due to layout changes higher-up\n // in the DOM. (This happens in Recogito for example)\n const config: MutationObserverInit = { attributes: true, childList: true, subtree: true };\n\n const mutationObserver = new MutationObserver(debounce((records: MutationRecord[]) => {\n const isInternal = records\n .every(record => record.target === container || container.contains(record.target));\n\n if (!isInternal)\n redraw(true);\n }, 150));\n\n mutationObserver.observe(document.body, config);\n\n const destroy = () => {\n container.removeEventListener('pointermove', onPointerMove);\n \n renderer.destroy();\n \n store.unobserve(onStoreChange);\n\n unsubscribeSelection();\n unsubscribeHover();\n\n document.removeEventListener('scroll', onScroll);\n\n onResize.clear();\n window.removeEventListener('resize', onResize);\n resizeObserver.disconnect();\n\n mutationObserver.disconnect();\n }\n\n return {\n destroy,\n redraw,\n setStyle,\n setFilter,\n setPainter,\n setVisible: renderer.setVisible\n }\n\n}\n","import debounce from 'debounce';\n\nimport type { ViewportState } from '@annotorious/core';\n\nimport type { TextAnnotatorState } from '../../state';\nimport type { ViewportBounds } from '../viewport';\nimport type { HighlightStyle } from '../HighlightStyle';\nimport { DEFAULT_SELECTED_STYLE, DEFAULT_STYLE, type HighlightStyleExpression } from '../HighlightStyle';\nimport type { HighlightPainter } from '../HighlightPainter';\nimport { createBaseRenderer, type RendererImplementation } from '../baseRenderer';\nimport type { Highlight } from '../Highlight';\nimport type { TextAnnotation } from 'src/model';\n\nimport './canvasRenderer.css';\n\nconst createCanvas = () => {\n const canvas = document.createElement('canvas');\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n canvas.className = 'r6o-canvas-highlight-layer bg';\n return canvas;\n}\n\nconst resetCanvas = (canvas: HTMLCanvasElement, highres?: boolean) => {\n canvas.width = highres ? 2 * window.innerWidth : window.innerWidth;\n canvas.height = highres ? 2 * window.innerHeight : window.innerHeight;\n\n if (highres) {\n // Note that resizing the canvas resets the context\n const context = canvas.getContext('2d');\n context.scale(2, 2);\n context.translate(0.5, 0.5);\n }\n}\n\nconst createRenderer = (container: HTMLElement): RendererImplementation => {\n\n container.classList.add('r6o-annotatable');\n\n const canvas = createCanvas();\n const ctx = canvas.getContext('2d');\n\n document.body.appendChild(canvas);\n\n const redraw = (\n highlights: Highlight[],\n viewportBounds: ViewportBounds,\n currentStyle?: HighlightStyleExpression,\n currentPainter?: HighlightPainter\n ) => requestAnimationFrame(() => {\n\n const { width, height } = canvas;\n\n // New render loop - clear canvases\n ctx.clearRect(-0.5, -0.5, width + 1, height + 1);\n\n if (currentPainter)\n currentPainter.clear();\n\n const { top, left } = viewportBounds;\n\n /**\n * Highlights rendering on the canvas is an order-sensitive operation.\n * The later the highlight is rendered, the higher it will be in the visual stack.\n *\n * By default, we should expect that the newer highlight\n * will be rendered over the older one\n */\n const highlightsByCreation = [...highlights].sort((highlightA, highlightB) => {\n const { annotation: { target: { created: createdA } } } = highlightA;\n const { annotation: { target: { created: createdB } } } = highlightB;\n return createdA.getTime() - createdB.getTime();\n });\n\n highlightsByCreation.forEach(h => {\n const base: HighlightStyle = currentStyle\n ? typeof currentStyle === 'function'\n ? currentStyle(h.annotation, h.state)\n : currentStyle\n : h.state?.selected\n ? DEFAULT_SELECTED_STYLE\n : DEFAULT_STYLE;\n\n // Trigger the custom painter (if any) as a side-effect\n const style = currentPainter ? currentPainter.paint(h, viewportBounds) || base : base;\n\n // Offset annotation rects by current scroll position\n const offsetRects = h.rects.map(({ x, y, width, height }) => ({\n x: x + left,\n y: y + top,\n width,\n height\n }));\n\n ctx.fillStyle = style.fill;\n ctx.globalAlpha = style.fillOpacity || 1;\n\n offsetRects.forEach(({ x, y, width, height }) =>\n ctx.fillRect(x, y, width, height)\n );\n\n if (style.underlineColor) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = style.underlineColor;\n ctx.lineWidth = style.underlineThickness ?? 1;\n\n // Place the underline below the highlighted text + an optional offset\n const underlineOffset = style.underlineOffset ?? 0;\n\n offsetRects.forEach(({ x, y, width, height }) => {\n ctx.beginPath();\n ctx.moveTo(x, y + height + underlineOffset);\n ctx.lineTo(x + width, y + height + underlineOffset);\n\n // Draw the Path\n ctx.stroke();\n });\n }\n });\n });\n\n const onResize = debounce(() => resetCanvas(canvas), 10);\n\n window.addEventListener('resize', onResize);\n\n const setVisible = (visible: boolean) => {\n console.log('setVisible not implemented on Canvas renderer');\n }\n\n const destroy = () => {\n canvas.remove();\n\n onResize.clear();\n window.removeEventListener('resize', onResize);\n }\n\n return {\n destroy,\n setVisible,\n redraw\n };\n\n};\n\nexport const createCanvasRenderer = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n viewport: ViewportState\n) => createBaseRenderer(container, state, viewport, createRenderer(container));\n","var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return\"string\"==typeof r?r.length>0:\"number\"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?\"0\"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,p=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,v=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,m=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},\"hex\"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},\"rgb\"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u=\"deg\"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},\"hsl\"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},\"rgb\"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},\"hsl\"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},\"hsv\"]]},N=function(r,t){for(var n=0;n<t.length;n++){var e=t[n][0](r);if(e)return[e,t[n][1]]}return[null,void 0]},x=function(r){return\"string\"==typeof r?N(r.trim(),y.string):\"object\"==typeof r&&null!==r?N(r,y.object):[null,void 0]},I=function(r){return x(r)[1]},M=function(r,t){var n=c(r);return{h:n.h,s:e(n.s+100*t,0,100),l:n.l,a:n.a}},H=function(r){return(299*r.r+587*r.g+114*r.b)/1e3/255},$=function(r,t){var n=c(r);return{h:n.h,s:n.s,l:e(n.l+100*t,0,100),a:n.a}},j=function(){function r(r){this.parsed=x(r)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return r.prototype.isValid=function(){return null!==this.parsed},r.prototype.brightness=function(){return n(H(this.rgba),2)},r.prototype.isDark=function(){return H(this.rgba)<.5},r.prototype.isLight=function(){return H(this.rgba)>=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):\"\",\"#\"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?\"rgba(\"+t+\", \"+n+\", \"+e+\", \"+u+\")\":\"rgb(\"+t+\", \"+n+\", \"+e+\")\";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?\"hsla(\"+t+\", \"+n+\"%, \"+e+\"%, \"+u+\")\":\"hsl(\"+t+\", \"+n+\"%, \"+e+\"%)\";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return\"number\"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return\"number\"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","import type { ViewportState } from '@annotorious/core';\nimport { colord } from 'colord';\nimport type { HighlightPainter } from '../HighlightPainter';\nimport type { TextAnnotatorState } from 'src/state';\nimport type { ViewportBounds } from '../viewport';\nimport { DEFAULT_SELECTED_STYLE, DEFAULT_STYLE } from '../HighlightStyle';\nimport type { HighlightStyle, HighlightStyleExpression } from '../HighlightStyle';\nimport { type RendererImplementation, createBaseRenderer } from '../baseRenderer';\nimport type { Highlight } from '../Highlight';\nimport type { TextAnnotation } from 'src/model';\n\nconst toCSS = (s?: HighlightStyle) => {\n const backgroundColor = colord(s?.fill || DEFAULT_STYLE.fill)\n .alpha(s?.fillOpacity === undefined ? DEFAULT_STYLE.fillOpacity : s.fillOpacity)\n .toHex();\n\n const rules = [\n `background-color:${backgroundColor}`,\n s?.underlineThickness ? `text-decoration:underline` : undefined,\n s?.underlineColor ? `text-decoration-color:${s.underlineColor}` : undefined,\n s?.underlineOffset ? `text-underline-offset:${s.underlineOffset}px` : undefined,\n s?.underlineThickness ? `text-decoration-thickness:${s.underlineThickness}px` : undefined\n ].filter(Boolean);\n\n return rules.join(';');\n}\n\nexport const createRenderer = (): RendererImplementation => {\n const elem = document.createElement('style');\n document.getElementsByTagName('head')[0].appendChild(elem);\n\n let currentRendered = new Set<string>();\n\n const redraw = (\n highlights: Highlight[],\n viewportBounds: ViewportBounds,\n currentStyle?: HighlightStyleExpression,\n painter?: HighlightPainter\n ) => {\n if (painter)\n painter.clear();\n\n // Next set of rendered annotation IDs and selections\n const nextRendered = new Set(highlights.map(h => h.annotation.id));\n\n // Annotations currently in this stylesheet that no longer need rendering\n const toRemove = Array.from(currentRendered).filter(id => !nextRendered.has(id));\n\n // For simplicity, re-generate the whole stylesheet\n const updatedCSS = highlights.map(h => {\n const base = currentStyle\n ? typeof currentStyle === 'function'\n ? currentStyle(h.annotation, h.state)\n : currentStyle\n : h.state?.selected ? DEFAULT_SELECTED_STYLE : DEFAULT_STYLE;\n\n // Trigger the custom painter (if any) as a side-effect\n const style = painter ? painter.paint(h, viewportBounds) || base : base;\n\n return `::highlight(_${h.annotation.id}) { ${toCSS(style)} }`;\n });\n\n elem.innerHTML = updatedCSS.join('\\n');\n\n // After we have the styles, we need to update the Highlights.\n // Note that the (experimental) CSS Custom Highlight API is not yet\n // available in TypeScript!\n\n // @ts-ignore\n CSS.highlights.clear();\n // toRemove.forEach(id => CSS.highlights.delete(`_${id}`));\n\n // Could be improved further by (re-)setting only annotations that\n // have changes.\n highlights.forEach(({ annotation }) => {\n const ranges = annotation.target.selector.map(s => s.range);\n\n // @ts-ignore\n const highlights = new Highlight(...ranges);\n\n // @ts-ignore\n CSS.highlights.set(`_${annotation.id}`, highlights);\n });\n\n currentRendered = nextRendered;\n }\n\n const setVisible = (visible: boolean) => {\n console.log('setVisible not implemented on CSS Custom Highlights renderer');\n }\n\n const destroy = () => {\n // Clear all highlights from the Highlight Registry\n // @ts-ignore\n CSS.highlights.clear();\n\n // Remove the stylesheet\n elem.remove();\n }\n\n return {\n destroy,\n setVisible,\n redraw\n };\n\n}\n\nexport const createHighlightsRenderer = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n viewport: ViewportState\n) => createBaseRenderer(container, state, viewport, createRenderer());\n","var has = Object.prototype.hasOwnProperty;\n\nexport function dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","import { colord } from 'colord';\nimport { DEFAULT_STYLE, type HighlightStyle } from '../HighlightStyle';\n\nexport const getBackgroundColor = (style?: HighlightStyle) => {\n if (style?.fillOpacity !== undefined) {\n // User-defined opacity: compute with user-defined fill or default\n return colord(style?.fill || DEFAULT_STYLE.fill)\n .alpha(style.fillOpacity)\n .toHex();\n } else if (!style?.fill) {\n // Neither fill nor opacity - default\n return colord(DEFAULT_STYLE.fill).alpha(DEFAULT_STYLE.fillOpacity).toHex();\n } else {\n // User defined fill, no opacity. Just pass through whatever the user \n // provided (incl. oklch colors, etc.)\n return style.fill;\n }\n}","import { dequal } from 'dequal/lite';\nimport type { ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../../model';\nimport type { Rect, TextAnnotatorState } from '../../state';\nimport { type HighlightPainter, paint } from '../HighlightPainter';\nimport type { ViewportBounds } from '../viewport';\nimport { createBaseRenderer, type RendererImplementation } from '../baseRenderer';\nimport type { Highlight } from '../Highlight';\nimport type { HighlightStyleExpression } from '../HighlightStyle';\nimport { getBackgroundColor } from './color';\n\nimport './spansRenderer.css';\n\nconst computeZIndex = (rect: Rect, all: Highlight[]): number => {\n const intersects = (a: Rect, b: Rect): boolean => (\n a.x <= b.x + b.width && a.x + a.width >= b.x &&\n a.y <= b.y + b.height && a.y + a.height >= b.y\n )\n\n const getLength = (h: Highlight) => \n h.rects.reduce((total, rect) => total + rect.width, 0);\n\n // Any highlights that intersect this rect, sorted by total length\n const intersecting = all.filter(({ rects }) => rects.some(r => intersects(rect, r)));\n intersecting.sort((a, b) => getLength(b) - getLength(a));\n\n return intersecting.findIndex(h => h.rects.includes(rect));\n}\n\nconst createRenderer = (container: HTMLElement): RendererImplementation => {\n\n container.classList.add('r6o-annotatable');\n\n const highlightLayer = document.createElement('div');\n highlightLayer.className = 'r6o-span-highlight-layer';\n\n container.insertBefore(highlightLayer, container.firstChild);\n\n // Currently rendered highlights\n let currentRendered: Highlight[] = [];\n\n const redraw = (\n highlights: Highlight[],\n viewportBounds: ViewportBounds,\n currentStyle?: HighlightStyleExpression,\n painter?: HighlightPainter,\n lazy?: boolean\n ) => {\n const noChanges = dequal(currentRendered, highlights);\n\n // If there are no changes and rendering is set to lazy\n // Don't redraw the SPANs - but redraw the painter, if any!\n const shouldRedraw = !(noChanges && lazy);\n\n if (!painter && !shouldRedraw) return;\n\n if (shouldRedraw)\n highlightLayer.innerHTML = '';\n\n /**\n * Highlights rendering in the span highlight layer is an order-sensitive operation.\n * The later the highlight is rendered, the higher it will be in the visual stack.\n *\n * By default, we should expect that the newer highlight\n * will be rendered over the older one\n */\n const sorted = [...highlights].sort((highlightA, highlightB) => {\n const { annotation: { target: { created: createdA } } } = highlightA;\n const { annotation: { target: { created: createdB } } } = highlightB;\n return createdA && createdB ? createdA.getTime() - createdB.getTime() : 0;\n });\n\n sorted.forEach(highlight => {\n highlight.rects.map(rect => {\n const zIndex = computeZIndex(rect, highlights);\n const style = paint(highlight, viewportBounds, currentStyle, painter, zIndex);\n\n if (shouldRedraw) {\n const span = document.createElement('span');\n span.className = 'r6o-annotation';\n span.dataset.annotation = highlight.annotation.id;\n\n span.style.left = `${rect.x}px`;\n span.style.top = `${rect.y}px`;\n span.style.width = `${rect.width}px`;\n span.style.height = `${rect.height}px`;\n\n span.style.backgroundColor = getBackgroundColor(style);\n\n if (style.underlineStyle)\n span.style.borderStyle = style.underlineStyle;\n\n if (style.underlineColor)\n span.style.borderColor = style.underlineColor;\n\n if (style.underlineThickness)\n span.style.borderBottomWidth = `${style.underlineThickness}px`;\n\n if (style.underlineOffset)\n span.style.paddingBottom = `${style.underlineOffset}px`;\n\n highlightLayer.appendChild(span);\n }\n });\n });\n\n currentRendered = highlights;\n }\n\n const setVisible = (visible: boolean) => {\n if (visible)\n highlightLayer.classList.remove('hidden');\n else\n highlightLayer.classList.add('hidden');\n }\n\n const destroy = () => {\n highlightLayer.remove();\n }\n\n return {\n destroy,\n redraw,\n setVisible\n };\n\n}\n\nexport const createSpansRenderer = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n viewport: ViewportState\n) => createBaseRenderer(container, state, viewport, createRenderer(container));\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","var M = Object.prototype.hasOwnProperty;\nfunction N(e, t) {\n var n, o;\n if (e === t) return !0;\n if (e && t && (n = e.constructor) === t.constructor) {\n if (n === Date) return e.getTime() === t.getTime();\n if (n === RegExp) return e.toString() === t.toString();\n if (n === Array) {\n if ((o = e.length) === t.length)\n for (; o-- && N(e[o], t[o]); ) ;\n return o === -1;\n }\n if (!n || typeof e == \"object\") {\n o = 0;\n for (n in e)\n if (M.call(e, n) && ++o && !M.call(t, n) || !(n in t) || !N(e[n], t[n])) return !1;\n return Object.keys(t).length === o;\n }\n }\n return e !== e && t !== t;\n}\nfunction V() {\n}\nfunction Z(e, t) {\n return e != e ? t == t : e !== t || e && typeof e == \"object\" || typeof e == \"function\";\n}\nconst z = [];\nfunction P(e, t = V) {\n let n;\n const o = /* @__PURE__ */ new Set();\n function s(v) {\n if (Z(e, v) && (e = v, n)) {\n const E = !z.length;\n for (const h of o)\n h[1](), z.push(h, e);\n if (E) {\n for (let h = 0; h < z.length; h += 2)\n z[h][0](z[h + 1]);\n z.length = 0;\n }\n }\n }\n function g(v) {\n s(v(e));\n }\n function m(v, E = V) {\n const h = [v, E];\n return o.add(h), o.size === 1 && (n = t(s, g) || V), v(e), () => {\n o.delete(h), o.size === 0 && n && (n(), n = null);\n };\n }\n return { set: s, update: g, subscribe: m };\n}\nconst De = (e) => {\n const { subscribe: t, set: n } = P();\n let o;\n return t((s) => o = s), e.observe(({ changes: s }) => {\n if (o) {\n (s.deleted || []).some((v) => v.id === o) && n(void 0);\n const m = (s.updated || []).find(({ oldValue: v }) => v.id === o);\n m && n(m.newValue.id);\n }\n }), {\n get current() {\n return o;\n },\n subscribe: t,\n set: n\n };\n};\nvar F = /* @__PURE__ */ ((e) => (e.EDIT = \"EDIT\", e.SELECT = \"SELECT\", e.NONE = \"NONE\", e))(F || {});\nconst $ = { selected: [] }, Be = (e, t, n) => {\n const { subscribe: o, set: s } = P($);\n let g = t, m = $;\n o((A) => m = A);\n const v = () => {\n N(m, $) || s($);\n }, E = () => {\n var A;\n return ((A = m.selected) == null ? void 0 : A.length) === 0;\n }, h = (A) => {\n if (E())\n return !1;\n const L = typeof A == \"string\" ? A : A.id;\n return m.selected.some((c) => c.id === L);\n }, T = (A, L) => {\n let c;\n if (Array.isArray(A)) {\n if (c = A.map((f) => e.getAnnotation(f)).filter(Boolean), c.length < A.length) {\n console.warn(\"Invalid selection: \" + A.filter((f) => !c.some((b) => b.id === f)));\n return;\n }\n } else {\n const f = e.getAnnotation(A);\n if (!f) {\n console.warn(\"Invalid selection: \" + A);\n return;\n }\n c = [f];\n }\n const u = c.reduce((f, b) => {\n const d = C(b);\n return d === \"EDIT\" ? [...f, { id: b.id, editable: !0 }] : d === \"SELECT\" ? [...f, { id: b.id }] : f;\n }, []);\n s({ selected: u, event: L });\n }, a = (A, L) => {\n const c = Array.isArray(A) ? A : [A], u = c.map((f) => e.getAnnotation(f)).filter((f) => !!f);\n s({\n selected: u.map((f) => {\n const b = L === void 0 ? C(f) === \"EDIT\" : L;\n return { id: f.id, editable: b };\n })\n }), u.length !== c.length && console.warn(\"Invalid selection\", A);\n }, w = (A) => {\n if (E())\n return !1;\n const { selected: L } = m;\n L.some(({ id: u }) => A.includes(u)) && s({ selected: L.filter(({ id: u }) => !A.includes(u)) });\n }, D = (A) => {\n g = A, a(m.selected.map(({ id: L }) => L));\n }, C = (A) => K(A, g, n);\n return e.observe(\n ({ changes: A }) => w((A.deleted || []).map((L) => L.id))\n ), {\n get event() {\n return m ? m.event : null;\n },\n get selected() {\n return m ? [...m.selected] : null;\n },\n get userSelectAction() {\n return g;\n },\n clear: v,\n evalSelectAction: C,\n isEmpty: E,\n isSelected: h,\n setSelected: a,\n setUserSelectAction: D,\n subscribe: o,\n userSelect: T\n };\n}, K = (e, t, n) => {\n const o = n ? n.serialize(e) : e;\n return typeof t == \"function\" ? t(o) : t || \"EDIT\";\n}, R = [];\nfor (let e = 0; e < 256; ++e)\n R.push((e + 256).toString(16).slice(1));\nfunction ee(e, t = 0) {\n return (R[e[t + 0]] + R[e[t + 1]] + R[e[t + 2]] + R[e[t + 3]] + \"-\" + R[e[t + 4]] + R[e[t + 5]] + \"-\" + R[e[t + 6]] + R[e[t + 7]] + \"-\" + R[e[t + 8]] + R[e[t + 9]] + \"-\" + R[e[t + 10]] + R[e[t + 11]] + R[e[t + 12]] + R[e[t + 13]] + R[e[t + 14]] + R[e[t + 15]]).toLowerCase();\n}\nlet Y;\nconst te = new Uint8Array(16);\nfunction ne() {\n if (!Y) {\n if (typeof crypto > \"u\" || !crypto.getRandomValues)\n throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");\n Y = crypto.getRandomValues.bind(crypto);\n }\n return Y(te);\n}\nconst oe = typeof crypto < \"u\" && crypto.randomUUID && crypto.randomUUID.bind(crypto), W = { randomUUID: oe };\nfunction se(e, t, n) {\n var s;\n e = e || {};\n const o = e.random ?? ((s = e.rng) == null ? void 0 : s.call(e)) ?? ne();\n if (o.length < 16)\n throw new Error(\"Random bytes length must be >= 16\");\n return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128, ee(o);\n}\nfunction q(e, t, n) {\n return W.randomUUID && !e ? W.randomUUID() : se(e);\n}\nconst Re = (e) => {\n const { creator: t, updatedBy: n } = e.target, o = e.bodies.reduce((s, g) => [...s, g.creator, g.updatedBy].filter(Boolean), []);\n return [\n t,\n n,\n ...o\n ].filter((s) => s);\n}, j = (e) => {\n const t = (n) => {\n const o = { ...n };\n return n.created && typeof n.created == \"string\" && (o.created = new Date(n.created)), n.updated && typeof n.updated == \"string\" && (o.updated = new Date(n.updated)), o;\n };\n return {\n ...e,\n bodies: (e.bodies || []).map(t),\n target: t(e.target)\n };\n}, xe = (e, t, n, o) => ({\n id: q(),\n annotation: typeof e == \"string\" ? e : e.id,\n created: n || /* @__PURE__ */ new Date(),\n creator: o,\n ...t\n}), ie = (e, t) => {\n const n = new Set(e.bodies.map((o) => o.id));\n return t.bodies.filter((o) => !n.has(o.id));\n}, de = (e, t) => {\n const n = new Set(t.bodies.map((o) => o.id));\n return e.bodies.filter((o) => !n.has(o.id));\n}, re = (e, t) => t.bodies.map((n) => {\n const o = e.bodies.find((s) => s.id === n.id);\n return { newBody: n, oldBody: o && !N(o, n) ? o : void 0 };\n}).filter(({ oldBody: n }) => n).map(({ oldBody: n, newBody: o }) => ({ oldBody: n, newBody: o })), ce = (e, t) => !N(e.target, t.target), G = (e, t) => {\n const n = ie(e, t), o = de(e, t), s = re(e, t);\n return {\n oldValue: e,\n newValue: t,\n bodiesCreated: n.length > 0 ? n : void 0,\n bodiesDeleted: o.length > 0 ? o : void 0,\n bodiesUpdated: s.length > 0 ? s : void 0,\n targetUpdated: ce(e, t) ? { oldTarget: e.target, newTarget: t.target } : void 0\n };\n};\nvar ae = /* @__PURE__ */ ((e) => (e.BODY_ONLY = \"BODY_ONLY\", e.TARGET_ONLY = \"TARGET_ONLY\", e))(ae || {}), O = /* @__PURE__ */ ((e) => (e.LOCAL = \"LOCAL\", e.REMOTE = \"REMOTE\", e.SILENT = \"SILENT\", e))(O || {});\nconst le = (e, t) => {\n var g, m;\n const { changes: n, origin: o } = t;\n if (!(e.options.origin ? e.options.origin === o : o !== \"SILENT\"))\n return !1;\n if (e.options.ignore) {\n const { ignore: v } = e.options, E = (T) => T && T.length > 0;\n if (!(E(n.created) || E(n.deleted))) {\n const T = (g = n.updated) == null ? void 0 : g.some((w) => E(w.bodiesCreated) || E(w.bodiesDeleted) || E(w.bodiesUpdated)), a = (m = n.updated) == null ? void 0 : m.some((w) => w.targetUpdated);\n if (v === \"BODY_ONLY\" && T && !a || v === \"TARGET_ONLY\" && a && !T)\n return !1;\n }\n }\n if (e.options.annotations) {\n const v = /* @__PURE__ */ new Set([\n ...(n.created || []).map((h) => h.id),\n ...(n.deleted || []).map((h) => h.id),\n ...(n.updated || []).map(({ oldValue: h }) => h.id)\n ]);\n return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((h) => v.has(h));\n } else\n return !0;\n}, ue = (e, t) => {\n const n = new Set((e.created || []).map((a) => a.id)), o = new Set((e.updated || []).map(({ newValue: a }) => a.id)), s = new Set((t.created || []).map((a) => a.id)), g = new Set((t.deleted || []).map((a) => a.id)), m = new Set((t.updated || []).map(({ oldValue: a }) => a.id)), v = new Set((t.updated || []).filter(({ oldValue: a }) => n.has(a.id) || o.has(a.id)).map(({ oldValue: a }) => a.id)), E = [\n ...(e.created || []).filter((a) => !g.has(a.id)).map((a) => m.has(a.id) ? t.updated.find(({ oldValue: w }) => w.id === a.id).newValue : a),\n ...t.created || []\n ], h = [\n ...(e.deleted || []).filter((a) => !s.has(a.id)),\n ...(t.deleted || []).filter((a) => !n.has(a.id))\n ], T = [\n ...(e.updated || []).filter(({ newValue: a }) => !g.has(a.id)).map((a) => {\n const { oldValue: w, newValue: D } = a;\n if (m.has(D.id)) {\n const C = t.updated.find((A) => A.oldValue.id === D.id).newValue;\n return G(w, C);\n } else\n return a;\n }),\n ...(t.updated || []).filter(({ oldValue: a }) => !v.has(a.id))\n ];\n return { created: E, deleted: h, updated: T };\n}, _ = (e) => {\n const t = e.id === void 0 ? q() : e.id;\n return {\n ...e,\n id: t,\n bodies: e.bodies === void 0 ? [] : e.bodies.map((n) => ({\n ...n,\n annotation: t\n })),\n target: {\n ...e.target,\n annotation: t\n }\n };\n}, fe = (e) => e.id !== void 0, ke = () => {\n const e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map(), n = [], o = (i, r = {}) => {\n n.push({ onChange: i, options: r });\n }, s = (i) => {\n const r = n.findIndex((l) => l.onChange == i);\n r > -1 && n.splice(r, 1);\n }, g = (i, r) => {\n const l = {\n origin: i,\n changes: {\n created: r.created || [],\n updated: r.updated || [],\n deleted: r.deleted || []\n },\n state: [...e.values()]\n };\n n.forEach((p) => {\n le(p, l) && p.onChange(l);\n });\n }, m = (i, r = O.LOCAL) => {\n if (i.id && e.get(i.id))\n throw Error(`Cannot add annotation ${i.id} - exists already`);\n {\n const p = _(i);\n e.set(p.id, p), p.bodies.forEach((U) => t.set(U.id, p.id)), g(r, { created: [p] });\n }\n }, v = (i, r) => {\n const l = _(typeof i == \"string\" ? r : i), p = typeof i == \"string\" ? i : i.id, U = p && e.get(p);\n if (U) {\n const y = G(U, l);\n return p === l.id ? e.set(p, l) : (e.delete(p), e.set(l.id, l)), U.bodies.forEach((B) => t.delete(B.id)), l.bodies.forEach((B) => t.set(B.id, l.id)), y;\n } else\n console.warn(`Cannot update annotation ${p} - does not exist`);\n }, E = (i, r = O.LOCAL, l = O.LOCAL) => {\n const p = fe(r) ? l : r, U = v(i, r);\n U && g(p, { updated: [U] });\n }, h = (i, r = O.LOCAL) => {\n !!e.get(i.id) ? E(i, r) : m(i, r);\n }, T = (i, r = O.LOCAL) => {\n const l = i.reduce((p, U) => {\n const y = v(U);\n return y ? [...p, y] : p;\n }, []);\n l.length > 0 && g(r, { updated: l });\n }, a = (i, r = O.LOCAL) => {\n const l = i.map(_), { toAdd: p, toUpdate: U } = l.reduce((B, I) => e.get(I.id) ? { ...B, toUpdate: [...B.toUpdate, I] } : { ...B, toAdd: [...B.toAdd, I] }, { toAdd: [], toUpdate: [] }), y = U.map((B) => v(B, r)).filter(Boolean);\n p.forEach((B) => {\n e.set(B.id, B), B.bodies.forEach((I) => t.set(I.id, B.id));\n }), g(r, { created: p, updated: y });\n }, w = (i, r = O.LOCAL) => {\n const l = e.get(i.annotation);\n if (l) {\n const p = {\n ...l,\n bodies: [...l.bodies, i]\n };\n e.set(l.id, p), t.set(i.id, p.id), g(r, { updated: [{\n oldValue: l,\n newValue: p,\n bodiesCreated: [i]\n }] });\n } else\n console.warn(`Attempt to add body to missing annotation: ${i.annotation}`);\n }, D = () => [...e.values()], C = (i = O.LOCAL) => {\n const r = [...e.values()];\n e.clear(), t.clear(), g(i, { deleted: r });\n }, A = (i, r = !0, l = O.LOCAL) => {\n const p = i.map(_);\n if (r) {\n const U = [...e.values()];\n e.clear(), t.clear(), p.forEach((y) => {\n e.set(y.id, y), y.bodies.forEach((B) => t.set(B.id, y.id));\n }), g(l, { created: p, deleted: U });\n } else {\n const U = i.reduce((y, B) => {\n const I = B.id && e.get(B.id);\n return I ? [...y, I] : y;\n }, []);\n if (U.length > 0)\n throw Error(`Bulk insert would overwrite the following annotations: ${U.map((y) => y.id).join(\", \")}`);\n p.forEach((y) => {\n e.set(y.id, y), y.bodies.forEach((B) => t.set(B.id, y.id));\n }), g(l, { created: p });\n }\n }, L = (i) => {\n const r = typeof i == \"string\" ? i : i.id, l = e.get(r);\n if (l)\n return e.delete(r), l.bodies.forEach((p) => t.delete(p.id)), l;\n console.warn(`Attempt to delete missing annotation: ${r}`);\n }, c = (i, r = O.LOCAL) => {\n const l = L(i);\n l && g(r, { deleted: [l] });\n }, u = (i, r = O.LOCAL) => {\n const l = i.reduce((p, U) => {\n const y = L(U);\n return y ? [...p, y] : p;\n }, []);\n l.length > 0 && g(r, { deleted: l });\n }, f = (i) => {\n const r = e.get(i.annotation);\n if (r) {\n const l = r.bodies.find((p) => p.id === i.id);\n if (l) {\n t.delete(l.id);\n const p = {\n ...r,\n bodies: r.bodies.filter((y) => y.id !== i.id)\n };\n return e.set(r.id, p), {\n oldValue: r,\n newValue: p,\n bodiesDeleted: [l]\n };\n } else\n console.warn(`Attempt to delete missing body ${i.id} from annotation ${i.annotation}`);\n } else\n console.warn(`Attempt to delete body from missing annotation ${i.annotation}`);\n }, b = (i, r = O.LOCAL) => {\n const l = f(i);\n l && g(r, { updated: [l] });\n }, d = (i, r = O.LOCAL) => {\n const l = i.map((p) => f(p)).filter(Boolean);\n l.length > 0 && g(r, { updated: l });\n }, S = (i) => {\n const r = e.get(i);\n return r ? { ...r } : void 0;\n }, x = (i) => {\n const r = t.get(i);\n if (r) {\n const p = S(r).bodies.find((U) => U.id === i);\n if (p)\n return p;\n console.error(`Store integrity error: body ${i} in index, but not in annotation`);\n } else\n console.warn(`Attempt to retrieve missing body: ${i}`);\n }, k = (i, r) => {\n if (i.annotation !== r.annotation)\n throw \"Annotation integrity violation: annotation ID must be the same when updating bodies\";\n const l = e.get(i.annotation);\n if (l) {\n const p = l.bodies.find((y) => y.id === i.id), U = {\n ...l,\n bodies: l.bodies.map((y) => y.id === p.id ? r : y)\n };\n return e.set(l.id, U), p.id !== r.id && (t.delete(p.id), t.set(r.id, U.id)), {\n oldValue: l,\n newValue: U,\n bodiesUpdated: [{ oldBody: p, newBody: r }]\n };\n } else\n console.warn(`Attempt to add body to missing annotation ${i.annotation}`);\n }, Q = (i, r, l = O.LOCAL) => {\n const p = k(i, r);\n p && g(l, { updated: [p] });\n }, X = (i, r = O.LOCAL) => {\n const l = i.map((p) => k({ id: p.id, annotation: p.annotation }, p)).filter(Boolean);\n g(r, { updated: l });\n }, H = (i) => {\n const r = e.get(i.annotation);\n if (r) {\n const l = {\n ...r,\n target: {\n ...r.target,\n ...i\n }\n };\n return e.set(r.id, l), {\n oldValue: r,\n newValue: l,\n targetUpdated: {\n oldTarget: r.target,\n newTarget: i\n }\n };\n } else\n console.warn(`Attempt to update target on missing annotation: ${i.annotation}`);\n };\n return {\n addAnnotation: m,\n addBody: w,\n all: D,\n bulkAddAnnotations: A,\n bulkDeleteAnnotations: u,\n bulkDeleteBodies: d,\n bulkUpdateAnnotations: T,\n bulkUpdateBodies: X,\n bulkUpdateTargets: (i, r = O.LOCAL) => {\n const l = i.map((p) => H(p)).filter(Boolean);\n l.length > 0 && g(r, { updated: l });\n },\n bulkUpsertAnnotations: a,\n clear: C,\n deleteAnnotation: c,\n deleteBody: b,\n getAnnotation: S,\n getBody: x,\n observe: o,\n unobserve: s,\n updateAnnotation: E,\n updateBody: Q,\n updateTarget: (i, r = O.LOCAL) => {\n const l = H(i);\n l && g(r, { updated: [l] });\n },\n upsertAnnotation: h\n };\n}, Ie = (e) => ({\n ...e,\n subscribe: (n) => {\n const o = (s) => n(s.state);\n return e.observe(o), n(e.all()), () => e.unobserve(o);\n }\n});\nlet J = () => ({\n emit(e, ...t) {\n for (let n = this.events[e] || [], o = 0, s = n.length; o < s; o++)\n n[o](...t);\n },\n events: {},\n on(e, t) {\n var n;\n return ((n = this.events)[e] || (n[e] = [])).push(t), () => {\n var o;\n this.events[e] = (o = this.events[e]) == null ? void 0 : o.filter((s) => t !== s);\n };\n }\n});\nconst pe = 250, Ne = (e, t) => {\n const n = J(), o = (t == null ? void 0 : t.changes) || [];\n let s = t ? t.pointer : -1, g = !1, m = 0;\n const v = (d) => {\n if (!g) {\n const { changes: S } = d, x = performance.now();\n if (x - m > pe)\n o.splice(s + 1), o.push(S), s = o.length - 1;\n else {\n const k = o.length - 1;\n o[k] = ue(o[k], S);\n }\n m = x;\n }\n g = !1;\n };\n e.observe(v, { origin: O.LOCAL });\n const E = (d) => d && d.length > 0 && e.bulkDeleteAnnotations(d), h = (d) => d && d.length > 0 && e.bulkAddAnnotations(d, !1), T = (d) => d && d.length > 0 && e.bulkUpdateAnnotations(d.map(({ oldValue: S }) => S)), a = (d) => d && d.length > 0 && e.bulkUpdateAnnotations(d.map(({ newValue: S }) => S)), w = (d) => d && d.length > 0 && e.bulkAddAnnotations(d, !1), D = (d) => d && d.length > 0 && e.bulkDeleteAnnotations(d);\n return {\n canRedo: () => o.length - 1 > s,\n canUndo: () => s > -1,\n destroy: () => e.unobserve(v),\n getHistory: () => ({ changes: [...o], pointer: s }),\n on: (d, S) => n.on(d, S),\n redo: () => {\n if (o.length - 1 > s) {\n g = !0;\n const { created: d, updated: S, deleted: x } = o[s + 1];\n h(d), a(S), D(x), n.emit(\"redo\", o[s + 1]), s += 1;\n }\n },\n undo: () => {\n if (s > -1) {\n g = !0;\n const { created: d, updated: S, deleted: x } = o[s];\n E(d), T(S), w(x), n.emit(\"undo\", o[s]), s -= 1;\n }\n }\n };\n}, ze = () => {\n const { subscribe: e, set: t } = P([]);\n return {\n subscribe: e,\n set: t\n };\n}, _e = (e, t, n, o) => {\n const { hover: s, selection: g, store: m, viewport: v } = e, E = /* @__PURE__ */ new Map();\n let h = [], T, a;\n const w = (c, u) => {\n E.has(c) ? E.get(c).push(u) : E.set(c, [u]);\n }, D = (c, u) => {\n const f = E.get(c);\n if (f) {\n const b = f.indexOf(u);\n b !== -1 && f.splice(b, 1);\n }\n }, C = (c, u, f) => {\n E.has(c) && setTimeout(() => {\n E.get(c).forEach((b) => {\n if (n) {\n const d = Array.isArray(u) ? u.map((x) => n.serialize(x)) : n.serialize(u), S = f ? f instanceof PointerEvent ? f : n.serialize(f) : void 0;\n b(d, S);\n } else\n b(u, f);\n });\n }, 1);\n }, A = () => {\n const { selected: c } = g, u = (c || []).map(({ id: f }) => m.getAnnotation(f));\n u.forEach((f) => {\n const b = h.find((d) => d.id === f.id);\n (!b || !N(b, f)) && C(\"updateAnnotation\", f, b);\n }), h = h.map((f) => {\n const b = u.find(({ id: d }) => d === f.id);\n return b || f;\n });\n };\n g.subscribe(({ selected: c }) => {\n if (!(h.length === 0 && c.length === 0)) {\n if (h.length === 0 && c.length > 0)\n h = c.map(({ id: u }) => m.getAnnotation(u));\n else if (h.length > 0 && c.length === 0)\n h.forEach((u) => {\n const f = m.getAnnotation(u.id);\n f && !N(f, u) && C(\"updateAnnotation\", f, u);\n }), h = [];\n else {\n const u = new Set(h.map((d) => d.id)), f = new Set(c.map(({ id: d }) => d));\n h.filter((d) => !f.has(d.id)).forEach((d) => {\n const S = m.getAnnotation(d.id);\n S && !N(S, d) && C(\"updateAnnotation\", S, d);\n }), h = [\n // Remove annotations that were deselected\n ...h.filter((d) => f.has(d.id)),\n // Add editable annotations that were selected\n ...c.filter(({ id: d }) => !u.has(d)).map(({ id: d }) => m.getAnnotation(d))\n ];\n }\n C(\"selectionChanged\", h);\n }\n }), s.subscribe((c) => {\n !T && c ? C(\"mouseEnterAnnotation\", m.getAnnotation(c)) : T && !c ? C(\"mouseLeaveAnnotation\", m.getAnnotation(T)) : T && c && (C(\"mouseLeaveAnnotation\", m.getAnnotation(T)), C(\"mouseEnterAnnotation\", m.getAnnotation(c))), T = c;\n }), v == null || v.subscribe((c) => C(\"viewportIntersect\", c.map((u) => m.getAnnotation(u)))), m.observe((c) => {\n o && (a && clearTimeout(a), a = setTimeout(A, 1e3));\n const { created: u, deleted: f } = c.changes;\n (u || []).forEach((d) => C(\"createAnnotation\", d)), (f || []).forEach((d) => C(\"deleteAnnotation\", d)), (c.changes.updated || []).filter((d) => [\n ...d.bodiesCreated || [],\n ...d.bodiesDeleted || [],\n ...d.bodiesUpdated || []\n ].length > 0).forEach(({ oldValue: d, newValue: S }) => {\n const x = h.find((k) => k.id === d.id) || d;\n h = h.map((k) => k.id === d.id ? S : k), C(\"updateAnnotation\", S, x);\n });\n }, { origin: O.LOCAL }), m.observe((c) => {\n if (h) {\n const u = new Set(h.map((b) => b.id)), f = (c.changes.updated || []).filter(({ newValue: b }) => u.has(b.id)).map(({ newValue: b }) => b);\n f.length > 0 && (h = h.map((b) => {\n const d = f.find((S) => S.id === b.id);\n return d || b;\n }));\n }\n }, { origin: O.REMOTE });\n const L = (c) => (u) => {\n const { updated: f } = u;\n c ? (f || []).forEach((b) => C(\"updateAnnotation\", b.oldValue, b.newValue)) : (f || []).forEach((b) => C(\"updateAnnotation\", b.newValue, b.oldValue));\n };\n return t.on(\"undo\", L(!0)), t.on(\"redo\", L(!1)), { on: w, off: D, emit: C };\n}, $e = (e) => (t) => t.map((n) => e.serialize(n)), ge = (e) => (t) => t.reduce((n, o) => {\n const { parsed: s, error: g } = e.parse(o);\n return g ? {\n parsed: n.parsed,\n failed: [...n.failed, o]\n } : s ? {\n parsed: [...n.parsed, s],\n failed: n.failed\n } : {\n ...n\n };\n}, { parsed: [], failed: [] }), Ve = (e, t, n) => {\n const { store: o, selection: s } = e, g = (c) => {\n if (n) {\n const { parsed: u, error: f } = n.parse(c);\n u ? o.addAnnotation(u, O.REMOTE) : console.error(f);\n } else\n o.addAnnotation(j(c), O.REMOTE);\n }, m = () => s.clear(), v = () => o.clear(), E = (c) => {\n const u = o.getAnnotation(c);\n return n && u ? n.serialize(u) : u;\n }, h = () => n ? o.all().map(n.serialize) : o.all(), T = () => {\n var f;\n const u = (((f = s.selected) == null ? void 0 : f.map((b) => b.id)) || []).map((b) => o.getAnnotation(b)).filter(Boolean);\n return n ? u.map(n.serialize) : u;\n }, a = (c, u = !0) => fetch(c).then((f) => f.json()).then((f) => (D(f, u), f)), w = (c) => {\n if (typeof c == \"string\") {\n const u = o.getAnnotation(c);\n if (o.deleteAnnotation(c), u)\n return n ? n.serialize(u) : u;\n } else {\n const u = n ? n.parse(c).parsed : c;\n if (u)\n return o.deleteAnnotation(u), c;\n }\n }, D = (c, u = !0) => {\n if (n) {\n const f = n.parseAll || ge(n), { parsed: b, failed: d } = f(c);\n d.length > 0 && console.warn(`Discarded ${d.length} invalid annotations`, d), o.bulkAddAnnotations(b, u, O.REMOTE);\n } else\n o.bulkAddAnnotations(c.map(j), u, O.REMOTE);\n }, C = (c, u) => {\n c ? s.setSelected(c, u) : s.clear();\n }, A = (c) => {\n s.setUserSelectAction(c);\n }, L = (c) => {\n if (n) {\n const u = n.parse(c).parsed, f = n.serialize(o.getAnnotation(u.id));\n return o.updateAnnotation(u), f;\n } else {\n const u = o.getAnnotation(c.id);\n return o.updateAnnotation(j(c)), u;\n }\n };\n return {\n addAnnotation: g,\n cancelSelected: m,\n canRedo: t.canRedo,\n canUndo: t.canUndo,\n clearAnnotations: v,\n getAnnotationById: E,\n getAnnotations: h,\n getHistory: t.getHistory,\n getSelected: T,\n loadAnnotations: a,\n redo: t.redo,\n removeAnnotation: w,\n setAnnotations: D,\n setSelected: C,\n setUserSelectAction: A,\n undo: t.undo,\n updateAnnotation: L\n };\n}, Ye = (e, t, n) => typeof t == \"function\" ? t(e, n) : t, je = (e, t) => typeof e != \"function\" && typeof t != \"function\" ? {\n ...e || {},\n ...t || {}\n} : (n, o) => {\n const s = typeof e == \"function\" ? e(n, o) : e, g = typeof t == \"function\" ? t(n, o) : t;\n return {\n ...s || {},\n ...g || {}\n };\n}, he = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nlet me = (e) => crypto.getRandomValues(new Uint8Array(e)), Ae = (e, t, n) => {\n let o = (2 << Math.log2(e.length - 1)) - 1, s = -~(1.6 * o * t / e.length);\n return (g = t) => {\n let m = \"\";\n for (; ; ) {\n let v = n(s), E = s | 0;\n for (; E--; )\n if (m += e[v[E] & o] || \"\", m.length >= g) return m;\n }\n };\n}, be = (e, t = 21) => Ae(e, t | 0, me), ve = (e = 21) => {\n let t = \"\", n = crypto.getRandomValues(new Uint8Array(e |= 0));\n for (; e--; )\n t += he[n[e] & 63];\n return t;\n};\nconst Pe = () => ({ isGuest: !0, id: be(\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_\", 20)() }), Ee = (e) => {\n const t = JSON.stringify(e);\n let n = 0;\n for (let o = 0, s = t.length; o < s; o++) {\n let g = t.charCodeAt(o);\n n = (n << 5) - n + g, n |= 0;\n }\n return `${n}`;\n}, we = (e) => e ? typeof e == \"object\" ? { ...e } : e : void 0, He = (e, t) => (Array.isArray(e) ? e : [e]).map((n) => {\n const { id: o, type: s, purpose: g, value: m, created: v, modified: E, creator: h, ...T } = n;\n return {\n id: o || `temp-${Ee(n)}`,\n annotation: t,\n type: s,\n purpose: g,\n value: m,\n creator: we(h),\n created: v ? new Date(v) : void 0,\n updated: E ? new Date(E) : void 0,\n ...T\n };\n}), Me = (e) => e.map((t) => {\n var v;\n const { annotation: n, created: o, updated: s, ...g } = t, m = {\n ...g,\n created: o == null ? void 0 : o.toISOString(),\n modified: s == null ? void 0 : s.toISOString()\n };\n return (v = m.id) != null && v.startsWith(\"temp-\") && delete m.id, m;\n}), We = (e) => \"@context\" in e && \"creator\" in e && \"body\" in e, Ce = [\n \"#ff7c00\",\n // orange\n \"#1ac938\",\n // green\n \"#e8000b\",\n // red\n \"#8b2be2\",\n // purple\n \"#9f4800\",\n // brown\n \"#f14cc1\",\n // pink\n \"#ffc400\",\n // khaki\n \"#00d7ff\",\n // cyan\n \"#023eff\"\n // blue\n], ye = () => {\n const e = [...Ce];\n return { assignRandomColor: () => {\n const o = Math.floor(Math.random() * e.length), s = e[o];\n return e.splice(o, 1), s;\n }, releaseColor: (o) => e.push(o) };\n}, Le = () => {\n const e = ye();\n return { addUser: (o, s) => {\n const g = e.assignRandomColor();\n return {\n label: s.name || s.id,\n avatar: s.avatar,\n color: g\n };\n }, removeUser: (o) => e.releaseColor(o.appearance.color) };\n}, Ue = (e, t) => e.every((n) => e.includes(n)) && t.every((n) => e.includes(n)), qe = ve(), Ge = (e = Le()) => {\n const t = J(), n = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = (a, w) => {\n if (n.has(a)) {\n console.warn(\"Attempt to add user that is already present\", a, w);\n return;\n }\n const D = e.addUser(a, w);\n n.set(a, {\n ...w,\n presenceKey: a,\n appearance: D\n });\n }, g = (a) => {\n const w = n.get(a);\n if (!w) {\n console.warn(\"Attempt to remove user that is not present\", a);\n return;\n }\n e.removeUser(w), n.delete(a);\n }, m = (a) => {\n const w = new Set(a.map((A) => A.presenceKey)), D = a.filter(({ presenceKey: A }) => !n.has(A)), C = Array.from(n.values()).filter((A) => !w.has(A.presenceKey));\n D.forEach(({ presenceKey: A, user: L }) => s(A, L)), C.forEach((A) => {\n const { presenceKey: L } = A;\n o.has(L) && t.emit(\"selectionChange\", A, null), g(L);\n }), (D.length > 0 || C.length > 0) && t.emit(\"presence\", h());\n }, v = (a, w) => {\n const D = n.get(a);\n if (!D) {\n console.warn(\"Activity notification from user that is not present\");\n return;\n }\n const C = o.get(a);\n (!C || !Ue(C, w)) && (o.set(a, w), t.emit(\"selectionChange\", D, w));\n }, E = (a, w) => {\n const D = n.get(a);\n if (!D) {\n console.warn(\"Selection change for user that is not present\", a);\n return;\n }\n w ? o.set(a, w) : o.delete(a), t.emit(\"selectionChange\", D, w);\n }, h = () => [...Array.from(n.values())];\n return {\n getPresentUsers: h,\n notifyActivity: v,\n on: (a, w) => t.on(a, w),\n syncUsers: m,\n updateSelection: E\n };\n};\nexport {\n ae as Ignore,\n O as Origin,\n qe as PRESENCE_KEY,\n F as UserSelectAction,\n je as chainStyles,\n Ye as computeStyle,\n Pe as createAnonymousGuest,\n Ve as createBaseAnnotator,\n xe as createBody,\n Le as createDefaultAppearanceProvider,\n De as createHoverState,\n _e as createLifecycleObserver,\n Ge as createPresenceState,\n Be as createSelectionState,\n ke as createStore,\n Ne as createUndoStack,\n ze as createViewportState,\n ye as defaultColorProvider,\n G as diffAnnotations,\n Re as getContributors,\n We as isW3CAnnotation,\n ue as mergeChanges,\n K as onUserSelect,\n ge as parseAll,\n He as parseW3CBodies,\n we as parseW3CUser,\n j as reviveDates,\n $e as serializeAll,\n Me as serializeW3CBodies,\n le as shouldNotify,\n Ie as toSvelteStore\n};\n//# sourceMappingURL=annotorious-core.es.js.map\n","import { v4 as uuidv4 } from 'uuid';\nimport {\n type FormatAdapter,\n type ParseResult,\n parseW3CBodies,\n parseW3CUser,\n serializeW3CBodies\n} from '@annotorious/core';\nimport type { TextAnnotation, TextAnnotationTarget, TextSelector } from '../core';\nimport type { W3CTextAnnotation, W3CTextAnnotationTarget, W3CTextSelector } from '../w3c';\nimport { getQuoteContext } from '../../utils';\n\nexport type W3CTextFormatAdapter<I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation> = FormatAdapter<I, E>;\n\n/**\n * @param source - the IRI of the annotated content\n * @param container - the HTML container of the annotated content,\n * Required to locate the content's `range` within the DOM\n */\nexport const W3CTextFormat =<I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n source: string,\n container?: HTMLElement\n): W3CTextFormatAdapter<I, E> => ({\n parse: (serialized) => parseW3CTextAnnotation(serialized),\n serialize: (annotation) => serializeW3CTextAnnotation(annotation, source, container)\n});\n\nconst isTextSelector = (selector: Partial<TextSelector>): selector is TextSelector =>\n selector.quote !== undefined && selector.start !== undefined && selector.end !== undefined;\n\nconst parseW3CTextTargets = (annotation: W3CTextAnnotation) => {\n const {\n id: annotationId,\n creator,\n created,\n modified,\n target\n } = annotation;\n\n const w3cTargets = Array.isArray(target) ? target : [target];\n if (w3cTargets.length === 0) {\n return { error: Error(`No targets found for annotation: ${annotation.id}`) };\n }\n\n const parsed: TextAnnotationTarget = {\n creator: parseW3CUser(creator),\n created: created ? new Date(created) : undefined,\n updated: modified ? new Date(modified) : undefined,\n annotation: annotationId,\n selector: [],\n // @ts-expect-error: `styleClass` is not part of the core `TextAnnotationTarget` type\n styleClass: 'styleClass' in w3cTargets[0] ? w3cTargets[0].styleClass : undefined\n };\n\n for (const w3cTarget of w3cTargets) {\n const w3cSelectors = Array.isArray(w3cTarget.selector) ? w3cTarget.selector : [w3cTarget.selector];\n\n const selector = w3cSelectors.reduce<Partial<TextSelector>>((s, w3cSelector) => {\n switch (w3cSelector.type) {\n case 'TextQuoteSelector':\n s.quote = w3cSelector.exact;\n break;\n case 'TextPositionSelector':\n s.start = w3cSelector.start;\n s.end = w3cSelector.end;\n break;\n }\n return s;\n }, {});\n\n if (isTextSelector(selector)) {\n parsed.selector.push(\n {\n ...selector,\n id: w3cTarget.id,\n // @ts-expect-error: `scope` is not part of the core `TextSelector` type\n scope: w3cTarget.scope\n }\n );\n } else {\n const missingTypes = [\n !selector.start ? 'TextPositionSelector' : undefined,\n !selector.quote ? 'TextQuoteSelector' : undefined\n ].filter(Boolean);\n\n return { error: Error(`Missing selector types: ${missingTypes.join(' and ')} for annotation: ${annotation.id}`) };\n }\n }\n\n return { parsed };\n};\n\nexport const parseW3CTextAnnotation = <I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n annotation: E\n): ParseResult<I> => {\n const annotationId = annotation.id || uuidv4();\n\n const {\n creator,\n created,\n modified,\n body,\n ...rest\n } = annotation;\n\n const bodies = parseW3CBodies(body, annotationId);\n const target = parseW3CTextTargets(annotation);\n\n const parseResult = 'error' in target\n ? { error: target.error }\n : {\n parsed: {\n ...rest,\n id: annotationId,\n bodies,\n target: target.parsed\n }\n };\n\n return parseResult as ParseResult<I>;\n\n};\n\nexport const serializeW3CTextAnnotation = <I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n annotation: I,\n source: string,\n container?: HTMLElement\n): E => {\n const { bodies, target, ...rest } = annotation;\n\n const {\n selector,\n creator,\n created,\n updated,\n ...targetRest\n } = target;\n\n const w3cTargets = selector.map((s): W3CTextAnnotationTarget => {\n const { id, quote, start, end, range } = s;\n\n const quoteSelector: W3CTextSelector = {\n type: 'TextQuoteSelector',\n exact: quote\n }\n\n if (container) {\n const { prefix, suffix } = getQuoteContext(range, container);\n quoteSelector.prefix = prefix;\n quoteSelector.suffix = suffix;\n }\n\n const positionSelector: W3CTextSelector = {\n type: 'TextPositionSelector',\n start,\n end\n }\n\n return {\n ...targetRest,\n id,\n // @ts-expect-error: `scope` is not part of the core `TextSelector` type\n scope: 'scope' in s ? s.scope : undefined,\n source,\n selector: [quoteSelector, positionSelector]\n };\n });\n\n return {\n ...rest,\n '@context': 'http://www.w3.org/ns/anno.jsonld',\n id: annotation.id,\n type: 'Annotation',\n body: serializeW3CBodies(annotation.bodies),\n creator,\n created: created?.toISOString(),\n modified: updated?.toISOString(),\n target: w3cTargets\n } as unknown as E;\n\n};\n","\n/**\n * Rearranges items so that all items in the [left, k] are the smallest.\n * The k-th element will have the (k - left + 1)-th smallest value in [left, right].\n *\n * @template T\n * @param {T[]} arr the array to partially sort (in place)\n * @param {number} k middle index for partial sorting (as defined above)\n * @param {number} [left=0] left index of the range to sort\n * @param {number} [right=arr.length-1] right index\n * @param {(a: T, b: T) => number} [compare = (a, b) => a - b] compare function\n */\nexport default function quickselect(arr, k, left = 0, right = arr.length - 1, compare = defaultCompare) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(arr, k, newLeft, newRight, compare);\n }\n\n const t = arr[k];\n let i = left;\n /** @type {number} */\n let j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @template T\n * @param {T[]} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @template T\n * @param {T} a\n * @param {T} b\n * @returns {number}\n */\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n constructor(maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all() {\n return this._all(this.data, []);\n }\n\n search(bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n collides(bbox) {\n let node = this.data;\n\n if (!intersects(bbox, node)) return false;\n\n const nodesToSearch = [];\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n }\n\n load(data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert(item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n }\n\n clear() {\n this.data = createNode([]);\n return this;\n }\n\n remove(item, equalsFn) {\n if (!item) return this;\n\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n let i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toBBox(item) { return item; }\n\n compareMinX(a, b) { return a.minX - b.minX; }\n compareMinY(a, b) { return a.minY - b.minY; }\n\n toJSON() { return this.data; }\n\n fromJSON(data) {\n this.data = data;\n return this;\n }\n\n _all(node, result) {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n }\n\n _build(items, left, right, height) {\n\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n _insert(item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n _split(insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n const splitIndex = this._chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n }\n\n _splitRoot(node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n _chooseSplitIndex(node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n _chooseSplitAxis(node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this._allDistMargin(node, m, M, compareMinX);\n const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n _adjustParentBBoxes(bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n _condense(path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","import RBush from 'rbush';\nimport type { Store } from '@annotorious/core';\nimport { createNanoEvents, type Unsubscribe } from 'nanoevents';\n\nimport type { TextAnnotation, TextAnnotationTarget } from '../model';\nimport {\n isRevived,\n reviveSelector,\n mergeClientRects,\n getHighlightClientRects,\n toParentBounds\n} from '../utils';\nimport type { AnnotationRects } from './TextAnnotationStore';\n\ninterface IndexedHighlightRect {\n\n minX: number;\n\n minY: number;\n\n maxX: number;\n\n maxY: number;\n\n annotation: {\n \n id: string;\n\n rects: DOMRect[];\n\n }\n\n}\n\nexport interface SpatialTreeEvents {\n\n recalculate(): void;\n\n}\n\nexport const createSpatialTree = <T extends TextAnnotation>(\n store: Store<T>,\n container: HTMLElement,\n hMergeTolerance?: number,\n vMergeTolerance?: number\n) => {\n\n const tree = new RBush<IndexedHighlightRect>();\n\n const index = new Map<string, IndexedHighlightRect[]>();\n\n const emitter = createNanoEvents<SpatialTreeEvents>();\n\n // Helper: converts a single text annotation target to a list of hightlight rects\n const toItems = (target: TextAnnotationTarget, offset: DOMRect): IndexedHighlightRect[] => {\n const rects = target.selector.flatMap(s => {\n const revivedRange = isRevived([s]) ? s.range : reviveSelector(s, container).range;\n return getHighlightClientRects(revivedRange);\n });\n\n /**\n * Offset the merged client rects so that coords\n * are relative to the parent container\n */\n const merged = mergeClientRects(rects, hMergeTolerance, vMergeTolerance)\n .map(rect => toParentBounds(rect, offset));\n\n return merged.map(rect => {\n const { x, y, width, height } = rect;\n\n return {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height,\n annotation: {\n id: target.annotation,\n rects: merged\n }\n }\n });\n }\n\n const all = () => [...index.values()];\n\n const clear = () => {\n tree.clear();\n index.clear();\n }\n\n const insert = (target: TextAnnotationTarget) => {\n const rects = toItems(target, container.getBoundingClientRect());\n if (rects.length === 0) return;\n\n rects.forEach(rect => tree.insert(rect));\n index.set(target.annotation, rects);\n }\n\n const remove = (target: TextAnnotationTarget) => {\n const rects = index.get(target.annotation);\n if (rects) {\n rects.forEach(rect => tree.remove(rect));\n index.delete(target.annotation);\n }\n }\n\n const update = (target: TextAnnotationTarget) => {\n remove(target);\n insert(target);\n }\n\n const set = (targets: TextAnnotationTarget[], replace: boolean = true) => {\n if (replace)\n clear();\n\n const offset = container.getBoundingClientRect();\n\n const rectsByTarget = targets.map(target => ({ target, rects: toItems(target, offset) }));\n rectsByTarget.forEach(({ target, rects }) => {\n if (rects.length > 0)\n index.set(target.annotation, rects)\n });\n\n const allRects = rectsByTarget.flatMap(({ rects }) => rects);\n tree.load(allRects);\n }\n\n const getAt = (x: number, y: number, all = false): string[] => {\n const hits = tree.search({\n minX: x,\n minY: y,\n maxX: x,\n maxY: y\n });\n\n const area = (rect: IndexedHighlightRect) =>\n rect.annotation.rects.reduce((area, r) =>\n area + r.width * r.height, 0);\n \n // Get smallest rect\n if (hits.length > 0) {\n hits.sort((a, b) => area(a) - area(b));\n return all ? hits.map(h => h.annotation.id) : [ hits[0].annotation.id ];\n } else {\n return [];\n }\n }\n\n const getAnnotationBounds = (id: string): DOMRect => {\n const rects = getAnnotationRects(id);\n\n if (rects.length === 0)\n return undefined;\n\n let left = rects[0].left;\n let top = rects[0].top;\n let right = rects[0].right;\n let bottom = rects[0].bottom;\n\n for (let i = 1; i < rects.length; i++) {\n const rect = rects[i];\n\n left = Math.min(left, rect.left);\n top = Math.min(top, rect.top);\n right = Math.max(right, rect.right);\n bottom = Math.max(bottom, rect.bottom);\n }\n\n return new DOMRect(left, top, right - left, bottom - top);\n }\n\n const getAnnotationRects = (id: string): DOMRect[] => {\n const indexed = index.get(id);\n if (indexed) {\n // Reminder: *each* IndexedHighlightRect stores *all*\n // DOMRects for the annotation for convenience\n return indexed[0].annotation.rects;\n } else {\n return [];\n }\n }\n\n const getIntersecting = (\n minX: number, \n minY: number, \n maxX: number, \n maxY: number,\n ): AnnotationRects<T>[] => {\n // All rects in this area, regardless of annotation\n const rects = tree.search({ minX, minY, maxX, maxY });\n\n // Distinct annotation IDs\n const annotationIds = new Set(rects.map(rect => rect.annotation.id));\n\n // Resolve annotation IDs. Note that the tree could be slightly out of sync (because \n // it updates by listening to changes, just like anyone else)\n return Array.from(annotationIds).map(annotationId => ({\n annotation: store.getAnnotation(annotationId),\n rects: getAnnotationRects(annotationId)\n })).filter(t => Boolean(t.annotation));\n }\n\n const size = () => tree.all().length;\n\n const recalculate = () => {\n set(store.all().map(a => a.target), true);\n emitter.emit('recalculate');\n };\n\n const on = <E extends keyof SpatialTreeEvents>(event: E, callback: SpatialTreeEvents[E]): Unsubscribe => emitter.on(event, callback);\n\n return {\n all,\n clear,\n getAt,\n getAnnotationBounds,\n getAnnotationRects,\n getIntersecting,\n insert,\n recalculate,\n remove,\n set,\n size,\n update,\n on\n }\n\n}\n","import type { Filter, Store, ViewportState } from '@annotorious/core';\nimport { \n createHoverState, \n createSelectionState, \n createStore, \n Origin,\n createViewportState\n} from '@annotorious/core';\nimport type { \n AnnotatorState, \n SelectionState, \n HoverState, \n} from '@annotorious/core';\n\nimport { createSpatialTree, type SpatialTreeEvents } from './spatialTree';\nimport type { TextAnnotation, TextAnnotationTarget } from '../model';\nimport type { AnnotationRects, TextAnnotationStore } from './TextAnnotationStore';\nimport { isRevived, reviveAnnotation, reviveTarget } from '../utils';\nimport type { TextAnnotatorOptions } from '../TextAnnotatorOptions';\n\nexport interface TextAnnotatorState<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> extends AnnotatorState<I, E> {\n\n store: TextAnnotationStore<I>;\n\n selection: SelectionState<I, E>;\n\n hover: HoverState<I>;\n\n viewport: ViewportState;\n\n}\n\nexport const createTextAnnotatorState = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n container: HTMLElement,\n opts: TextAnnotatorOptions<I, E>\n): TextAnnotatorState<I, E> => {\n\n const store: Store<I> = createStore<I>();\n\n const tree = createSpatialTree(store, container, opts.mergeHighlights?.horizontalTolerance, opts.mergeHighlights?.verticalTolerance);\n\n const selection = createSelectionState<I, E>(store, opts.userSelectAction, opts.adapter);\n\n const hover = createHoverState(store);\n\n const viewport = createViewportState();\n\n // Wrap store interface to intercept annotations and revive DOM ranges, if needed\n const addAnnotation = (annotation: I, origin = Origin.LOCAL): boolean => {\n const revived = reviveAnnotation(annotation, container);\n\n const isValid = isRevived(revived.target.selector);\n if (isValid)\n store.addAnnotation(revived, origin); \n\n return isValid;\n }\n\n const bulkAddAnnotations = (\n annotations: I[], \n replace = true, \n origin = Origin.LOCAL\n ): I[] => {\n const revived = annotations.map(a => reviveAnnotation<I>(a, container));\n\n // Initial page load might take some time. Retry for more robustness.\n const couldNotRevive = revived.filter(a => !isRevived(a.target.selector));\n store.bulkAddAnnotations(revived, replace, origin);\n\n return couldNotRevive;\n }\n \n const bulkUpsertAnnotations = (\n annotations: I[], \n origin = Origin.LOCAL\n ): I[] => {\n const revived = annotations.map(a => reviveAnnotation(a, container));\n\n // Initial page load might take some time. Retry for more robustness.\n const couldNotRevive = revived.filter(a => !isRevived(a.target.selector));\n \n revived.forEach(a => {\n if (store.getAnnotation(a.id))\n store.updateAnnotation(a, origin);\n else \n store.addAnnotation(a, origin);\n })\n\n return couldNotRevive;\n }\n\n const updateTarget = (target: TextAnnotationTarget, origin = Origin.LOCAL) => {\n const revived = reviveTarget(target, container);\n store.updateTarget(revived, origin);\n }\n\n const bulkUpdateTargets = (targets: TextAnnotationTarget[], origin = Origin.LOCAL) => {\n const revived = targets.map(t => reviveTarget(t, container));\n store.bulkUpdateTargets(revived, origin);\n }\n\n function getAt(x: number, y: number, all: true, filter?: Filter): I[] | undefined;\n function getAt(x: number, y: number, all: false, filter?: Filter): I | undefined;\n function getAt(x: number, y: number, all?: boolean, filter?: Filter): I | I[] | undefined {\n const getAll = all || Boolean(filter);\n\n const annotations = tree.getAt(x, y, getAll).map(id => store.getAnnotation(id));\n\n const filtered = filter ? annotations.filter(filter) : annotations;\n\n if (filtered.length === 0)\n return undefined;\n\n return all ? filtered : filtered[0];\n }\n\n const getAnnotationBounds = (id: string): DOMRect | undefined => {\n const rects = tree.getAnnotationRects(id);\n return rects.length > 0 ? tree.getAnnotationBounds(id) : undefined;\n }\n\n const getIntersecting = (\n minX: number,\n minY: number,\n maxX: number,\n maxY: number,\n ): AnnotationRects<I>[] => tree.getIntersecting(minX, minY, maxX, maxY);\n\n const getAnnotationRects = (id: string): DOMRect[] => tree.getAnnotationRects(id);\n\n const recalculatePositions = () => tree.recalculate();\n const onRecalculatePositions = (callback: SpatialTreeEvents['recalculate']) => tree.on('recalculate', callback);\n\n store.observe(({ changes }) => {\n const deleted = (changes.deleted || []).filter(a => isRevived(a.target.selector));\n const created = (changes.created || []).filter(a => isRevived(a.target.selector));\n const updated = (changes.updated || []).filter(u => isRevived(u.newValue.target.selector));\n\n if (deleted?.length > 0)\n deleted.forEach(a => tree.remove(a.target));\n\n if (created.length > 0)\n tree.set(created.map(a => a.target), false);\n\n if (updated?.length > 0)\n updated.forEach(({ newValue }) => tree.update(newValue.target));\n });\n\n return {\n store: {\n ...store,\n addAnnotation,\n bulkAddAnnotations,\n bulkUpdateTargets,\n bulkUpsertAnnotations,\n getAnnotationBounds,\n getAnnotationRects,\n getIntersecting,\n getAt,\n recalculatePositions,\n onRecalculatePositions,\n updateTarget\n },\n selection,\n hover,\n viewport\n }\n\n}\n","import type { Color, PresenceProvider, PresentUser } from '@annotorious/core';\nimport type { AnnotationRects } from '../state';\nimport type { HighlightStyle, HighlightPainter } from '../highlight';\nimport type { PresencePainterOptions } from '../presence';\nimport type { ViewportBounds } from '../highlight/viewport';\n\nimport './PresencePainter.css';\n\nconst createCanvas = () => {\n const canvas = document.createElement('canvas');\n\n // Retina resolution for crisp font rendering\n canvas.width = 2 * window.innerWidth;\n canvas.height = 2 * window.innerHeight;\n canvas.className = 'r6o-presence-layer';\n\n const context = canvas.getContext('2d');\n context.scale(2, 2);\n context.translate(0.5, 0.5);\n\n return canvas;\n}\n\nexport const createPresencePainter = (\n provider: PresenceProvider, \n opts: PresencePainterOptions = {}\n): HighlightPainter => {\n\n const canvas = createCanvas();\n\n const ctx = canvas.getContext('2d');\n\n document.body.appendChild(canvas);\n\n const trackedAnnotations = new Map<string, PresentUser>();\n\n const getAnnotationsForUser = (p: PresentUser) =>\n Array.from(trackedAnnotations.entries())\n .filter(([id, user]) => user.presenceKey === p.presenceKey)\n .map(([id, _]) => id);\n\n provider.on('selectionChange', (p: PresentUser, selection: string[] | null) => {\n // Remove this user's previous selection\n const currentIds = getAnnotationsForUser(p);\n currentIds.forEach(id => trackedAnnotations.delete(id));\n\n // Set new selection (if any)\n if (selection)\n selection.forEach(id => trackedAnnotations.set(id, p));\n }); \n\n const clear = () => {\n const { width, height } = canvas;\n ctx.clearRect(-0.5, -0.5, width + 1, height + 1);\n }\n\n const paint = (\n highlight: AnnotationRects, \n viewportBounds: ViewportBounds,\n isSelected?: boolean\n ): HighlightStyle | undefined => {\n if (opts.font)\n ctx.font = opts.font;\n\n const user = trackedAnnotations.get(highlight.annotation.id);\n if (user) {\n // Draw cursor + label to the presence canvas\n const { height } = highlight.rects[0];\n const x = highlight.rects[0].x + viewportBounds.left;\n const y = highlight.rects[0].y + viewportBounds.top;\n\n // Draw presence indicator\n ctx.fillStyle = user.appearance.color;\n ctx.fillRect(x - 2, y - 2.5, 2, height + 5);\n\n // Draw name label\n const metrics = ctx.measureText(user.appearance.label);\n const labelWidth = metrics.width + 6;\n const labelHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent + 8;\n \n // Sigh... different between FF and Chrome\n const paddingBottom = metrics.fontBoundingBoxAscent ? 8 : 6.5;\n\n ctx.fillRect(x - 2, y - 2.5 - labelHeight, labelWidth, labelHeight);\n \n ctx.fillStyle = '#fff';\n ctx.fillText(user.appearance.label, x + 1, y - paddingBottom);\n\n // Return modfied style for the renderer\n return { \n fill: user.appearance.color as Color,\n fillOpacity: isSelected ? 0.45 : 0.18\n }\n }\n }\n \n const reset = () => {\n canvas.width = 2 * window.innerWidth;\n canvas.height = 2 * window.innerHeight;\n\n // Note that resizing the canvas resets the context\n const context = canvas.getContext('2d');\n context.scale(2, 2);\n context.translate(0.5, 0.5);\n }\n\n const destroy = () => {\n canvas.remove();\n }\n\n return {\n clear,\n destroy,\n paint,\n reset\n }\n \n}\n","/**! \n * hotkeys-js v3.13.15 \n * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies. \n * \n * Copyright (c) 2025 kenny wong <wowohoo@qq.com> \n * https://github.com/jaywcjlove/hotkeys-js.git \n * \n * @website: https://jaywcjlove.github.io/hotkeys-js\n \n * Licensed under the MIT license \n */\n\nconst isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false;\n\n/** Bind event */\nfunction addEvent(object, event, method, useCapture) {\n if (object.addEventListener) {\n object.addEventListener(event, method, useCapture);\n } else if (object.attachEvent) {\n object.attachEvent(\"on\".concat(event), method);\n }\n}\nfunction removeEvent(object, event, method, useCapture) {\n if (object.removeEventListener) {\n object.removeEventListener(event, method, useCapture);\n } else if (object.detachEvent) {\n object.detachEvent(\"on\".concat(event), method);\n }\n}\n\n/** Convert modifier keys to their corresponding key codes */\nfunction getMods(modifier, key) {\n const mods = key.slice(0, key.length - 1);\n for (let i = 0; i < mods.length; i++) mods[i] = modifier[mods[i].toLowerCase()];\n return mods;\n}\n\n/** Process the input key string and convert it to an array */\nfunction getKeys(key) {\n if (typeof key !== 'string') key = '';\n key = key.replace(/\\s/g, ''); // Match any whitespace character, including spaces, tabs, form feeds, etc.\n const keys = key.split(','); // Allow multiple shortcuts separated by ','\n let index = keys.lastIndexOf('');\n\n // Shortcut may include ',' — special handling needed\n for (; index >= 0;) {\n keys[index - 1] += ',';\n keys.splice(index, 1);\n index = keys.lastIndexOf('');\n }\n return keys;\n}\n\n/** Compare arrays of modifier keys */\nfunction compareArray(a1, a2) {\n const arr1 = a1.length >= a2.length ? a1 : a2;\n const arr2 = a1.length >= a2.length ? a2 : a1;\n let isIndex = true;\n for (let i = 0; i < arr1.length; i++) {\n if (arr2.indexOf(arr1[i]) === -1) isIndex = false;\n }\n return isIndex;\n}\n\n// Special Keys\nconst _keyMap = {\n backspace: 8,\n '⌫': 8,\n tab: 9,\n clear: 12,\n enter: 13,\n '↩': 13,\n return: 13,\n esc: 27,\n escape: 27,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n /// https://w3c.github.io/uievents/#events-keyboard-key-location\n arrowup: 38,\n arrowdown: 40,\n arrowleft: 37,\n arrowright: 39,\n del: 46,\n delete: 46,\n ins: 45,\n insert: 45,\n home: 36,\n end: 35,\n pageup: 33,\n pagedown: 34,\n capslock: 20,\n num_0: 96,\n num_1: 97,\n num_2: 98,\n num_3: 99,\n num_4: 100,\n num_5: 101,\n num_6: 102,\n num_7: 103,\n num_8: 104,\n num_9: 105,\n num_multiply: 106,\n num_add: 107,\n num_enter: 108,\n num_subtract: 109,\n num_decimal: 110,\n num_divide: 111,\n '⇪': 20,\n ',': 188,\n '.': 190,\n '/': 191,\n '`': 192,\n '-': isff ? 173 : 189,\n '=': isff ? 61 : 187,\n ';': isff ? 59 : 186,\n '\\'': 222,\n '{': 219,\n '}': 221,\n '[': 219,\n ']': 221,\n '\\\\': 220\n};\n\n// Modifier Keys\nconst _modifier = {\n // shiftKey\n '⇧': 16,\n shift: 16,\n // altKey\n '⌥': 18,\n alt: 18,\n option: 18,\n // ctrlKey\n '⌃': 17,\n ctrl: 17,\n control: 17,\n // metaKey\n '⌘': 91,\n cmd: 91,\n meta: 91,\n command: 91\n};\nconst modifierMap = {\n 16: 'shiftKey',\n 18: 'altKey',\n 17: 'ctrlKey',\n 91: 'metaKey',\n shiftKey: 16,\n ctrlKey: 17,\n altKey: 18,\n metaKey: 91\n};\nconst _mods = {\n 16: false,\n 18: false,\n 17: false,\n 91: false\n};\nconst _handlers = {};\n\n// F1~F12 special key\nfor (let k = 1; k < 20; k++) {\n _keyMap[\"f\".concat(k)] = 111 + k;\n}\n\n/** Record the pressed keys */\nlet _downKeys = [];\n/** Whether the window has already listened to the focus event */\nlet winListendFocus = null;\n/** Default hotkey scope */\nlet _scope = 'all';\n/** Map to record elements with bound events */\nconst elementEventMap = new Map();\n\n/** Return key code */\nconst code = x => _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);\nconst getKey = x => Object.keys(_keyMap).find(k => _keyMap[k] === x);\nconst getModifier = x => Object.keys(_modifier).find(k => _modifier[k] === x);\n\n/** Set or get the current scope (defaults to 'all') */\nfunction setScope(scope) {\n _scope = scope || 'all';\n}\n/** Get the current scope */\nfunction getScope() {\n return _scope || 'all';\n}\n/** Get the key codes of the currently pressed keys */\nfunction getPressedKeyCodes() {\n return _downKeys.slice(0);\n}\nfunction getPressedKeyString() {\n return _downKeys.map(c => getKey(c) || getModifier(c) || String.fromCharCode(c));\n}\nfunction getAllKeyCodes() {\n const result = [];\n Object.keys(_handlers).forEach(k => {\n _handlers[k].forEach(_ref => {\n let {\n key,\n scope,\n mods,\n shortcut\n } = _ref;\n result.push({\n scope,\n shortcut,\n mods,\n keys: key.split('+').map(v => code(v))\n });\n });\n });\n return result;\n}\n\n/** hotkey is effective only when filter return true */\nfunction filter(event) {\n const target = event.target || event.srcElement;\n const {\n tagName\n } = target;\n let flag = true;\n const isInput = tagName === 'INPUT' && !['checkbox', 'radio', 'range', 'button', 'file', 'reset', 'submit', 'color'].includes(target.type);\n // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>\n if (target.isContentEditable || (isInput || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly) {\n flag = false;\n }\n return flag;\n}\n\n/** Determine whether the pressed key matches a specific key, returns true or false */\nfunction isPressed(keyCode) {\n if (typeof keyCode === 'string') {\n keyCode = code(keyCode); // Convert to key code\n }\n return _downKeys.indexOf(keyCode) !== -1;\n}\n\n/** Loop through and delete all handlers with the specified scope */\nfunction deleteScope(scope, newScope) {\n let handlers;\n let i;\n\n // If no scope is specified, get the current scope\n if (!scope) scope = getScope();\n for (const key in _handlers) {\n if (Object.prototype.hasOwnProperty.call(_handlers, key)) {\n handlers = _handlers[key];\n for (i = 0; i < handlers.length;) {\n if (handlers[i].scope === scope) {\n const deleteItems = handlers.splice(i, 1);\n deleteItems.forEach(_ref2 => {\n let {\n element\n } = _ref2;\n return removeKeyEvent(element);\n });\n } else {\n i++;\n }\n }\n }\n }\n\n // If the current scope has been deleted, reset the scope to 'all'\n if (getScope() === scope) setScope(newScope || 'all');\n}\n\n/** Clear modifier keys */\nfunction clearModifier(event) {\n let key = event.keyCode || event.which || event.charCode;\n if (event.key && event.key.toLowerCase() === 'capslock') {\n // Ensure that when capturing keystrokes in modern browsers,\n // uppercase and lowercase letters (such as R and r) return the same key value.\n // https://github.com/jaywcjlove/hotkeys-js/pull/514\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n key = code(event.key);\n }\n const i = _downKeys.indexOf(key);\n\n // Remove the pressed key from the list\n if (i >= 0) {\n _downKeys.splice(i, 1);\n }\n // Special handling for the command key: fix the issue where keyup only triggers once for command combos\n if (event.key && event.key.toLowerCase() === 'meta') {\n _downKeys.splice(0, _downKeys.length);\n }\n\n // Clear modifier keys: shiftKey, altKey, ctrlKey, (command || metaKey)\n if (key === 93 || key === 224) key = 91;\n if (key in _mods) {\n _mods[key] = false;\n\n // Reset the modifier key status to false\n for (const k in _modifier) if (_modifier[k] === key) hotkeys[k] = false;\n }\n}\nfunction unbind(keysInfo) {\n // unbind(), unbind all keys\n if (typeof keysInfo === 'undefined') {\n Object.keys(_handlers).forEach(key => {\n Array.isArray(_handlers[key]) && _handlers[key].forEach(info => eachUnbind(info));\n delete _handlers[key];\n });\n removeKeyEvent(null);\n } else if (Array.isArray(keysInfo)) {\n // support like : unbind([{key: 'ctrl+a', scope: 's1'}, {key: 'ctrl-a', scope: 's2', splitKey: '-'}])\n keysInfo.forEach(info => {\n if (info.key) eachUnbind(info);\n });\n } else if (typeof keysInfo === 'object') {\n // support like unbind({key: 'ctrl+a, ctrl+b', scope:'abc'})\n if (keysInfo.key) eachUnbind(keysInfo);\n } else if (typeof keysInfo === 'string') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n // support old method\n // eslint-disable-line\n let [scope, method] = args;\n if (typeof scope === 'function') {\n method = scope;\n scope = '';\n }\n eachUnbind({\n key: keysInfo,\n scope,\n method,\n splitKey: '+'\n });\n }\n}\n\n/** Unbind hotkeys for a specific scope */\nconst eachUnbind = _ref3 => {\n let {\n key,\n scope,\n method,\n splitKey = '+'\n } = _ref3;\n const multipleKeys = getKeys(key);\n multipleKeys.forEach(originKey => {\n const unbindKeys = originKey.split(splitKey);\n const len = unbindKeys.length;\n const lastKey = unbindKeys[len - 1];\n const keyCode = lastKey === '*' ? '*' : code(lastKey);\n if (!_handlers[keyCode]) return;\n // If scope is not provided, get the current scope\n if (!scope) scope = getScope();\n const mods = len > 1 ? getMods(_modifier, unbindKeys) : [];\n const unbindElements = [];\n _handlers[keyCode] = _handlers[keyCode].filter(record => {\n // Check if the method matches; if method is provided, must be equal to unbind\n const isMatchingMethod = method ? record.method === method : true;\n const isUnbind = isMatchingMethod && record.scope === scope && compareArray(record.mods, mods);\n if (isUnbind) unbindElements.push(record.element);\n return !isUnbind;\n });\n unbindElements.forEach(element => removeKeyEvent(element));\n });\n};\n\n/** Handle the callback function for the corresponding hotkey */\nfunction eventHandler(event, handler, scope, element) {\n if (handler.element !== element) {\n return;\n }\n let modifiersMatch;\n\n // Check if it is within the current scope\n if (handler.scope === scope || handler.scope === 'all') {\n // Check whether modifier keys match (returns true if they do)\n modifiersMatch = handler.mods.length > 0;\n for (const y in _mods) {\n if (Object.prototype.hasOwnProperty.call(_mods, y)) {\n if (!_mods[y] && handler.mods.indexOf(+y) > -1 || _mods[y] && handler.mods.indexOf(+y) === -1) {\n modifiersMatch = false;\n }\n }\n }\n\n // Call the handler function; ignore if it's only a modifier key\n if (handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91] || modifiersMatch || handler.shortcut === '*') {\n handler.keys = [];\n handler.keys = handler.keys.concat(_downKeys);\n if (handler.method(event, handler) === false) {\n if (event.preventDefault) event.preventDefault();else event.returnValue = false;\n if (event.stopPropagation) event.stopPropagation();\n if (event.cancelBubble) event.cancelBubble = true;\n }\n }\n }\n}\n\n/** Handle the keydown event */\nfunction dispatch(event, element) {\n const asterisk = _handlers['*'];\n let key = event.keyCode || event.which || event.charCode;\n // Ensure that when capturing keystrokes in modern browsers,\n // uppercase and lowercase letters (such as R and r) return the same key value.\n // https://github.com/jaywcjlove/hotkeys-js/pull/514\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n // CapsLock key\n // There's an issue where `keydown` and `keyup` events are not triggered after CapsLock is enabled to activate uppercase.\n if (event.key && event.key.toLowerCase() === 'capslock') {\n return;\n }\n // Form control filter: by default, shortcut keys are not triggered in form elements\n if (!hotkeys.filter.call(this, event)) return;\n\n // In Gecko (Firefox), the command key code is 224; unify it with WebKit (Chrome)\n // In WebKit, left and right command keys have different codes\n if (key === 93 || key === 224) key = 91;\n\n /**\n * Collect bound keys\n * If an Input Method Editor is processing key input and the event is keydown, return 229.\n * https://stackoverflow.com/questions/25043934/is-it-ok-to-ignore-keydown-events-with-keycode-229\n * http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\n */\n if (_downKeys.indexOf(key) === -1 && key !== 229) _downKeys.push(key);\n /**\n * Jest test cases are required.\n * ===============================\n */\n ['metaKey', 'ctrlKey', 'altKey', 'shiftKey'].forEach(keyName => {\n const keyNum = modifierMap[keyName];\n if (event[keyName] && _downKeys.indexOf(keyNum) === -1) {\n _downKeys.push(keyNum);\n } else if (!event[keyName] && _downKeys.indexOf(keyNum) > -1) {\n _downKeys.splice(_downKeys.indexOf(keyNum), 1);\n } else if (keyName === 'metaKey' && event[keyName]) {\n // If the command key is pressed, clear all non-modifier keys except the current event key.\n // This is because keyup for non-modifier keys will NEVER be triggered when command is pressed.\n // This is a known browser limitation.\n _downKeys = _downKeys.filter(k => k in modifierMap || k === key);\n }\n });\n /**\n * -------------------------------\n */\n if (key in _mods) {\n _mods[key] = true;\n // Register special modifier keys to the `hotkeys` object\n for (const k in _modifier) {\n if (Object.prototype.hasOwnProperty.call(_modifier, k)) {\n const eventKey = modifierMap[_modifier[k]];\n hotkeys[k] = event[eventKey];\n }\n }\n if (!asterisk) return;\n }\n\n // Bind the modifier keys in modifierMap to the event\n for (const e in _mods) {\n if (Object.prototype.hasOwnProperty.call(_mods, e)) {\n _mods[e] = event[modifierMap[e]];\n }\n }\n /**\n * https://github.com/jaywcjlove/hotkeys/pull/129\n * This solves the issue in Firefox on Windows where hotkeys corresponding to special characters would not trigger.\n * An example of this is ctrl+alt+m on a Swedish keyboard which is used to type μ.\n * Browser support: https://caniuse.com/#feat=keyboardevent-getmodifierstate\n */\n if (event.getModifierState && !(event.altKey && !event.ctrlKey) && event.getModifierState('AltGraph')) {\n if (_downKeys.indexOf(17) === -1) {\n _downKeys.push(17);\n }\n if (_downKeys.indexOf(18) === -1) {\n _downKeys.push(18);\n }\n _mods[17] = true;\n _mods[18] = true;\n }\n\n // Get the current scope (defaults to 'all')\n const scope = getScope();\n // Handle any hotkeys registered as '*'\n if (asterisk) {\n for (let i = 0; i < asterisk.length; i++) {\n if (asterisk[i].scope === scope && (event.type === 'keydown' && asterisk[i].keydown || event.type === 'keyup' && asterisk[i].keyup)) {\n eventHandler(event, asterisk[i], scope, element);\n }\n }\n }\n // If the key is not registered, return\n if (!(key in _handlers)) return;\n const handlerKey = _handlers[key];\n const keyLen = handlerKey.length;\n for (let i = 0; i < keyLen; i++) {\n if (event.type === 'keydown' && handlerKey[i].keydown || event.type === 'keyup' && handlerKey[i].keyup) {\n if (handlerKey[i].key) {\n const record = handlerKey[i];\n const {\n splitKey\n } = record;\n const keyShortcut = record.key.split(splitKey);\n const _downKeysCurrent = []; // Store the current key codes\n for (let a = 0; a < keyShortcut.length; a++) {\n _downKeysCurrent.push(code(keyShortcut[a]));\n }\n if (_downKeysCurrent.sort().join('') === _downKeys.sort().join('')) {\n // Match found, call the handler\n eventHandler(event, record, scope, element);\n }\n }\n }\n }\n}\nfunction hotkeys(key, option, method) {\n _downKeys = [];\n /** List of hotkeys to handle */\n const keys = getKeys(key);\n let mods = [];\n /** Default scope is 'all', meaning effective in all scopes */\n let scope = 'all';\n /** Element to which the hotkey events are bound */\n let element = document;\n let i = 0;\n let keyup = false;\n let keydown = true;\n let splitKey = '+';\n let capture = false;\n /** Allow only a single callback */\n let single = false;\n\n // Determine if the second argument is a function (no options provided)\n if (method === undefined && typeof option === 'function') {\n method = option;\n }\n\n // Parse options object\n if (Object.prototype.toString.call(option) === '[object Object]') {\n if (option.scope) scope = option.scope; // Set scope\n if (option.element) element = option.element; // Set binding element\n if (option.keyup) keyup = option.keyup;\n if (option.keydown !== undefined) keydown = option.keydown;\n if (option.capture !== undefined) capture = option.capture;\n if (typeof option.splitKey === 'string') splitKey = option.splitKey;\n if (option.single === true) single = true;\n }\n if (typeof option === 'string') scope = option;\n\n // If only one callback is allowed, unbind the existing one first\n if (single) unbind(key, scope);\n\n // Handle each hotkey\n for (; i < keys.length; i++) {\n key = keys[i].split(splitKey); // Split into individual keys\n mods = [];\n\n // If it's a combination, extract modifier keys\n if (key.length > 1) mods = getMods(_modifier, key);\n\n // Convert non-modifier key to key code\n key = key[key.length - 1];\n key = key === '*' ? '*' : code(key); // '*' means match all hotkeys\n\n // Initialize handler array if this key has no handlers yet\n if (!(key in _handlers)) _handlers[key] = [];\n _handlers[key].push({\n keyup,\n keydown,\n scope,\n mods,\n shortcut: keys[i],\n method,\n key: keys[i],\n splitKey,\n element\n });\n }\n // Register hotkey event listeners on the global document\n if (typeof element !== 'undefined' && window) {\n if (!elementEventMap.has(element)) {\n const keydownListener = function () {\n let event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.event;\n return dispatch(event, element);\n };\n const keyupListenr = function () {\n let event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.event;\n dispatch(event, element);\n clearModifier(event);\n };\n elementEventMap.set(element, {\n keydownListener,\n keyupListenr,\n capture\n });\n addEvent(element, 'keydown', keydownListener, capture);\n addEvent(element, 'keyup', keyupListenr, capture);\n }\n // Register focus event listener once to clear pressed keys on window focus\n if (!winListendFocus) {\n const listener = () => {\n _downKeys = [];\n };\n winListendFocus = {\n listener,\n capture\n };\n addEvent(window, 'focus', listener, capture);\n }\n }\n}\nfunction trigger(shortcut) {\n let scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';\n Object.keys(_handlers).forEach(key => {\n const dataList = _handlers[key].filter(item => item.scope === scope && item.shortcut === shortcut);\n dataList.forEach(data => {\n if (data && data.method) {\n data.method();\n }\n });\n });\n}\n\n/** Clean up event listeners. After unbinding, check whether the element still has any hotkeys bound. If not, remove its event listeners. */\nfunction removeKeyEvent(element) {\n const values = Object.values(_handlers).flat();\n const findindex = values.findIndex(_ref4 => {\n let {\n element: el\n } = _ref4;\n return el === element;\n });\n if (findindex < 0) {\n const {\n keydownListener,\n keyupListenr,\n capture\n } = elementEventMap.get(element) || {};\n if (keydownListener && keyupListenr) {\n removeEvent(element, 'keyup', keyupListenr, capture);\n removeEvent(element, 'keydown', keydownListener, capture);\n elementEventMap.delete(element);\n }\n }\n if (values.length <= 0 || elementEventMap.size <= 0) {\n // Remove all event listeners from all elements\n const eventKeys = Object.keys(elementEventMap);\n eventKeys.forEach(el => {\n const {\n keydownListener,\n keyupListenr,\n capture\n } = elementEventMap.get(el) || {};\n if (keydownListener && keyupListenr) {\n removeEvent(el, 'keyup', keyupListenr, capture);\n removeEvent(el, 'keydown', keydownListener, capture);\n elementEventMap.delete(el);\n }\n });\n // Clear the elementEventMap\n elementEventMap.clear();\n // Clear all handlers\n Object.keys(_handlers).forEach(key => delete _handlers[key]);\n // Remove the global window focus event listener\n if (winListendFocus) {\n const {\n listener,\n capture\n } = winListendFocus;\n removeEvent(window, 'focus', listener, capture);\n winListendFocus = null;\n }\n }\n}\nconst _api = {\n getPressedKeyString,\n setScope,\n getScope,\n deleteScope,\n getPressedKeyCodes,\n getAllKeyCodes,\n isPressed,\n filter,\n trigger,\n unbind,\n keyMap: _keyMap,\n modifier: _modifier,\n modifierMap\n};\nfor (const a in _api) {\n if (Object.prototype.hasOwnProperty.call(_api, a)) {\n hotkeys[a] = _api[a];\n }\n}\nif (typeof window !== 'undefined') {\n const _hotkeys = window.hotkeys;\n hotkeys.noConflict = deep => {\n if (deep && window.hotkeys === hotkeys) {\n window.hotkeys = _hotkeys;\n }\n return hotkeys;\n };\n window.hotkeys = hotkeys;\n}\n\nexport { hotkeys as default };\n","async function a(a,t,e=(()=>!1)){do{if(await a(),await e())break;const i=\"number\"==typeof t?t:t();await new Promise((a=>setTimeout(a,Math.max(0,i))))}while(!await e())}export{a as poll};\n","import debounce from 'debounce';\nimport { v4 as uuidv4 } from 'uuid';\nimport hotkeys from 'hotkeys-js';\nimport { poll } from 'poll';\nimport { Origin, type Filter, type Selection, type User } from '@annotorious/core';\nimport type { TextAnnotatorState } from './state';\nimport type { TextAnnotation, TextAnnotationTarget } from './model';\nimport type { TextAnnotatorOptions } from './TextAnnotatorOptions';\nimport {\n clonePointerEvent,\n cloneKeyboardEvent,\n splitAnnotatableRanges,\n rangeToSelector,\n isMac,\n isRangeWhitespaceOrEmpty,\n trimRangeToContainer,\n isNotAnnotatable,\n mergeRanges\n} from './utils';\n\nconst CLICK_TIMEOUT = 300;\n\nconst ARROW_KEYS = ['up', 'down', 'left', 'right'];\n\nconst SELECT_ALL = isMac ? '⌘+a' : 'ctrl+a';\n\nconst SELECTION_KEYS = [\n ...ARROW_KEYS.map(key => `shift+${key}`),\n SELECT_ALL\n];\n\nexport const createSelectionHandler = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n options: TextAnnotatorOptions<TextAnnotation, unknown>\n) => {\n\n const { store, selection } = state;\n\n let currentUser: User | undefined;\n\n const {\n annotatingEnabled,\n offsetReferenceSelector,\n selectionMode,\n dismissOnNotAnnotatable = 'NEVER'\n } = options;\n\n const setUser = (user?: User) => currentUser = user;\n\n let currentFilter: Filter | undefined;\n\n const setFilter = (filter?: Filter) => currentFilter = filter;\n\n let currentTarget: TextAnnotationTarget | undefined;\n\n // Only used if allowModifierSelect === true\n let targetToModify: TextAnnotationTarget | undefined;\n\n let isLeftClick: boolean | undefined;\n\n let lastDownEvent: Selection['event'] | undefined;\n \n let currentAnnotatingEnabled = annotatingEnabled;\n\n const setAnnotatingEnabled = (enabled: boolean) => {\n currentAnnotatingEnabled = enabled;\n onSelectionChange.clear();\n\n if (!enabled) {\n targetToModify = undefined;\n currentTarget = undefined;\n isLeftClick = undefined;\n lastDownEvent = undefined;\n }\n };\n\n const isModifierSelect = (evt: Event) => {\n const asPtr = evt as PointerEvent;\n return isMac ? asPtr.metaKey : asPtr.ctrlKey;\n }\n\n const onSelectStart = () => {\n if (!currentAnnotatingEnabled) return;\n\n if (isLeftClick === false) return;\n\n const { selected } = selection;\n\n // Will this selection modify an existing annotation?\n const isModifyExisting = options.allowModifierSelect\n && isModifierSelect(lastDownEvent)\n && selected.length === 1\n && selected[0].editable;\n\n if (isModifyExisting) {\n const existing = store.getAnnotation(selected[0].id);\n\n if (existing?.target) {\n targetToModify = existing.target;\n\n currentTarget = {\n annotation: existing.id,\n selector: [],\n created: targetToModify.created,\n creator: targetToModify.creator,\n updated: new Date(),\n updatedBy: currentUser\n };\n\n return;\n }\n }\n\n targetToModify = undefined;\n\n currentTarget = {\n annotation: uuidv4(),\n selector: [],\n created: new Date(),\n creator: currentUser\n };\n };\n\n const onSelectionChange = debounce((evt: Event) => {\n if (!currentAnnotatingEnabled) return;\n\n const sel = document.getSelection();\n\n /**\n * In iOS when a user clicks on a button, the `selectionchange` event is fired.\n * However, the generated selection is empty and the `anchorNode` is `null`. That\n * doesn't give us information about whether the selection is in the annotatable area\n * or whether the previously selected text was dismissed. Therefore we should bail\n * out from such a range processing.\n *\n * @see https://github.com/recogito/text-annotator-js/pull/164#issuecomment-2416961473\n */\n if (!sel?.anchorNode) {\n return;\n }\n\n const selectionRanges =\n Array.from(Array(sel.rangeCount).keys()).map(idx => sel.getRangeAt(idx));\n\n /**\n * This is to handle cases where the selection is \"hijacked\" by\n * another element in a not-annotatable area. A rare case in practice.\n * But rich text editors like Quill will do it!\n */\n if (!selectionRanges.some(r => r.intersectsNode(container))) {\n currentTarget = undefined;\n return;\n }\n\n const timeDifference = evt.timeStamp - (lastDownEvent?.timeStamp || evt.timeStamp);\n\n /**\n * The selection start needs to be emulated only for the pointer events!\n * The keyboard ones are consistently fired on desktops\n * and the `timeDifference` will always be <10ms. between the `keydown` and `selectionchange`\n */\n if (lastDownEvent?.type === 'pointerdown') {\n if (timeDifference < 1000 && !currentTarget) {\n // Chrome/iOS does not reliably fire the 'selectstart' event!\n onSelectStart();\n } else if (sel.isCollapsed && timeDifference < CLICK_TIMEOUT) {\n // Firefox doesn't fire the 'selectstart' when user clicks\n // over the text, which collapses the selection\n onSelectStart();\n }\n }\n\n // Note: commenting out the line below. We should no longer do this. Why?\n // Let's assume the user drags the selection from outside the annotatable area\n // over the anntoatable area (intersection!). Then drags it out again\n // (no intersection!), then in again (intersection). Because the\n // currentTarget will have been cleared meanwhile, execution will stop.\n // \n // But we don't want this - instead, processing should continue as normal,\n // and a new currentTarget should be computed when the user drags the\n // selection into the annotatable area a second time.\n\n // The selection isn't active -> bail out from selection change processing\n // if (!currentTarget) return;\n if (!currentTarget) onSelectStart();\n\n if (sel.isCollapsed) {\n /**\n * The selection range got collapsed during the selecting process. Unless this\n * is intentional (CTRL + select), the previously created annotation isn't relevant \n * anymore and can be discarded\n *\n * @see https://github.com/recogito/text-annotator-js/issues/139\n */\n if (store.getAnnotation(currentTarget.annotation) && !isModifierSelect(lastDownEvent)) {\n selection.clear();\n store.deleteAnnotation(currentTarget.annotation);\n }\n\n return;\n }\n\n const containedRanges =\n selectionRanges.map(r => trimRangeToContainer(r, container));\n\n // The selection should be captured only within the annotatable container\n if (containedRanges.every(r => isRangeWhitespaceOrEmpty(r))) return;\n\n const annotatableRanges = containedRanges.flatMap(r => splitAnnotatableRanges(container, r.cloneRange()));\n\n const hasChanged =\n (annotatableRanges.length > 0 && !currentTarget) ||\n annotatableRanges.length !== currentTarget.selector.length ||\n annotatableRanges.some((r, i) => r.toString() !== currentTarget.selector[i]?.quote);\n\n if (!hasChanged) return;\n\n // Annotatable ranges + ranges of the modified target (if any)\n const combinedRanges = targetToModify ? mergeRanges([ \n ...(targetToModify.selector.map(s => s.range)),\n ...annotatableRanges\n ]) : annotatableRanges;\n\n currentTarget = {\n ...currentTarget,\n selector: combinedRanges.map(r => rangeToSelector(r, container, offsetReferenceSelector)),\n updated: new Date()\n };\n\n /**\n * During mouse selection on the desktop, the annotation won't usually exist while the selection is being edited.\n * But it'll be typical during selection via the keyboard or mobile's handlebars.\n */\n if (store.getAnnotation(currentTarget.annotation)) {\n store.updateTarget(currentTarget, Origin.LOCAL);\n } else {\n // Proper lifecycle management: clear the previous selection first\n if (!isModifierSelect(evt))\n selection.clear();\n }\n }, 10);\n\n /**\n * Select events don't carry information about the mouse button.\n * Therefore, to prevent right-click selection, we need to listen\n * to the initial pointerdown event and remember the button\n */\n const onPointerDown = (evt: PointerEvent) => {\n /**\n * Cloning the event to prevent it from accidentally being `undefined`\n * @see https://github.com/recogito/text-annotator-js/commit/65d13f3108c429311cf8c2523f6babbbc946013d#r144033948\n */\n lastDownEvent = clonePointerEvent(evt);\n isLeftClick = lastDownEvent.button === 0;\n };\n\n const onPointerUp = async (evt: PointerEvent) => {\n if (!isLeftClick) return;\n\n const lastUpEvent = clonePointerEvent(evt);\n\n // Logic for selecting an existing annotation\n const clickSelect = () => {\n const { x, y } = container.getBoundingClientRect();\n\n if (isNotAnnotatable(container, lastUpEvent.target as Node)) {\n const shouldDismissSelection = typeof dismissOnNotAnnotatable === 'function'\n ? dismissOnNotAnnotatable(lastUpEvent, container)\n : dismissOnNotAnnotatable === 'ALWAYS';\n if (shouldDismissSelection) {\n selection.clear();\n }\n return;\n }\n\n const hovered =\n lastUpEvent.target instanceof Node &&\n container.contains(lastUpEvent.target) &&\n store.getAt(\n lastUpEvent.clientX - x,\n lastUpEvent.clientY - y,\n selectionMode === 'all',\n currentFilter\n );\n\n if (hovered) {\n const { selected } = selection;\n\n const currentIds = new Set(selected.map(s => s.id));\n const nextIds = Array.isArray(hovered) ? hovered.map(a => a.id) : [hovered.id];\n\n const hasChanged =\n currentIds.size !== nextIds.length ||\n !nextIds.every(id => currentIds.has(id));\n\n if (hasChanged)\n selection.userSelect(nextIds, lastUpEvent);\n } else {\n selection.clear();\n }\n };\n\n const timeDifference = lastUpEvent.timeStamp - lastDownEvent.timeStamp;\n if (timeDifference < CLICK_TIMEOUT) {\n await pollSelectionCollapsed();\n\n const sel = document.getSelection();\n\n const isDownOnNotAnnotatable =\n isNotAnnotatable(container, lastDownEvent.target as Node);\n\n const isUpOnNotAnnotatable = \n isNotAnnotatable(container, lastUpEvent.target as Node);\n\n /**\n * Route to `clickSelect` if selection collapsed OR\n * the click happened entirely over a not-annotatable element.\n *\n * The latter allows preventing re-selection of an existing\n * annotation when a user clicks on not-annotatable controls.\n * For example, a click on a `button` element doesn't make the\n * selection collapse, but it still needs to be processed with `clickSelect`.\n */\n if (sel?.isCollapsed || (isDownOnNotAnnotatable && isUpOnNotAnnotatable)) {\n currentTarget = undefined;\n clickSelect();\n return;\n }\n }\n\n if (currentTarget && currentTarget.selector.length > 0) {\n upsertCurrentTarget();\n selection.userSelect(currentTarget.annotation, lastUpEvent);\n }\n }\n\n /**\n * We must check the `isCollapsed` after an unspecified timeout\n * to handle the annotation dismissal after a click properly.\n *\n * Otherwise, the `isCollapsed` will return an obsolete `false` value,\n * click won't be processed, and the annotation will get falsely re-selected.\n *\n * @see https://github.com/recogito/text-annotator-js/issues/136#issue-2465915707\n * @see https://github.com/recogito/text-annotator-js/issues/136#issuecomment-2413773804\n */\n const pollSelectionCollapsed = async () => {\n const sel = document.getSelection();\n\n let stopPolling = false;\n let isCollapsed = sel?.isCollapsed;\n const shouldStopPolling = () => isCollapsed || stopPolling;\n\n const pollingDelayMs = 1;\n const stopPollingInMs = 50;\n setTimeout(() => stopPolling = true, stopPollingInMs);\n\n return poll(() => isCollapsed = sel?.isCollapsed, pollingDelayMs, shouldStopPolling);\n }\n\n const onContextMenu = (evt: PointerEvent) => {\n const sel = document.getSelection();\n\n if (sel?.isCollapsed) return;\n\n /**\n * When selecting the initial word, Chrome Android\n * fires `contextmenu`before `selectionchange`\n */\n if (!currentTarget || currentTarget.selector.length === 0) {\n onSelectionChange(evt);\n }\n /**\n * The selection couldn't be initiated - might span over a not-annotatable element.\n */\n if (!currentTarget) return;\n upsertCurrentTarget();\n\n selection.userSelect(currentTarget.annotation, clonePointerEvent(evt));\n }\n\n const onKeyup = (evt: KeyboardEvent) => {\n if (!currentAnnotatingEnabled) return;\n\n if (evt.key === 'Shift' && currentTarget) {\n const sel = document.getSelection();\n\n if (!sel.isCollapsed) {\n upsertCurrentTarget();\n selection.userSelect(currentTarget.annotation, cloneKeyboardEvent(evt));\n }\n }\n }\n\n const onSelectAll = (evt: KeyboardEvent) => {\n\n const onSelected = () => setTimeout(() => {\n if (currentTarget?.selector.length > 0) {\n selection.clear();\n\n store.addAnnotation({\n id: currentTarget.annotation,\n bodies: [],\n target: currentTarget\n });\n\n selection.userSelect(currentTarget.annotation, cloneKeyboardEvent(evt));\n }\n\n document.removeEventListener('selectionchange', onSelected);\n\n // Sigh... this needs a delay to work. But doesn't seem reliable.\n }, 100);\n\n // Listen to the change event that follows\n document.addEventListener('selectionchange', onSelected);\n\n // Start selection!\n onSelectStart();\n }\n\n hotkeys(SELECTION_KEYS.join(','), { element: container, keydown: true, keyup: false }, evt => {\n if (!evt.repeat)\n lastDownEvent = cloneKeyboardEvent(evt);\n });\n\n hotkeys(SELECT_ALL, { keydown: true, keyup: false }, evt => {\n lastDownEvent = cloneKeyboardEvent(evt);\n onSelectAll(evt);\n });\n\n /**\n * Free caret movement through the text resets the annotation selection.\n *\n * It should be handled only on:\n * - the annotatable `container`, where the text is.\n * - the `body`, where the focus goes when user closes the popup,\n * or clicks the button that gets unmounted, e.g. \"Close\"\n */\n const handleArrowKeyPress = (evt: KeyboardEvent) => {\n if (\n evt.repeat ||\n evt.target !== container && evt.target !== document.body\n ) {\n return;\n }\n\n currentTarget = undefined;\n selection.clear();\n };\n\n hotkeys(ARROW_KEYS.join(','), { keydown: true, keyup: false }, handleArrowKeyPress);\n\n // Helper\n const upsertCurrentTarget = () => {\n const existingAnnotation = store.getAnnotation(currentTarget.annotation);\n if (!existingAnnotation) {\n store.addAnnotation({\n id: currentTarget.annotation,\n bodies: [],\n target: currentTarget\n });\n return;\n }\n\n const { target: { updated: existingTargetUpdated } } = existingAnnotation;\n const { updated: currentTargetUpdated } = currentTarget;\n if (\n !existingTargetUpdated ||\n !currentTargetUpdated ||\n existingTargetUpdated < currentTargetUpdated\n ) {\n store.updateTarget(currentTarget);\n }\n };\n\n document.addEventListener('pointerdown', onPointerDown);\n document.addEventListener('pointerup', onPointerUp);\n document.addEventListener('contextmenu', onContextMenu);\n\n container.addEventListener('keyup', onKeyup);\n container.addEventListener('selectstart', onSelectStart);\n document.addEventListener('selectionchange', onSelectionChange);\n\n const destroy = () => {\n currentTarget = undefined;\n targetToModify = undefined;\n isLeftClick = undefined;\n lastDownEvent = undefined;\n\n onSelectionChange.clear();\n\n document.removeEventListener('pointerdown', onPointerDown);\n document.removeEventListener('pointerup', onPointerUp);\n document.removeEventListener('contextmenu', onContextMenu);\n\n container.removeEventListener('keyup', onKeyup);\n container.removeEventListener('selectstart', onSelectStart);\n document.removeEventListener('selectionchange', onSelectionChange);\n\n hotkeys.unbind();\n };\n\n return {\n destroy,\n setFilter,\n setUser,\n setAnnotatingEnabled\n }\n\n}\n\n","import type { FormatAdapter, UserSelectActionExpression, User, Annotation } from '@annotorious/core';\nimport type { PresencePainterOptions } from './presence';\nimport type { TextAnnotation } from './model';\nimport type { HighlightStyleExpression } from './highlight';\n\nexport interface TextAnnotatorOptions<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> {\n\n adapter?: FormatAdapter<I, E> | null;\n\n allowModifierSelect?: boolean;\n\n annotatingEnabled?: boolean;\n\n /**\n * Determines whether an active selection should be dismissed\n * when a user ends their interaction (click, selection)\n * on a non-annotatable element.\n * - NEVER - don't dismiss the selection, ignore the action.\n * - ALWAYS - dismiss the selection.\n * - function - a custom matcher that takes an event and container as arguments.\n * Returns `true` if the selection should be dismissed.\n *\n * @defaut NEVER\n */\n dismissOnNotAnnotatable?: DismissOnNotAnnotatableExpression;\n\n mergeHighlights?: {\n\n horizontalTolerance?: number;\n\n verticalTolerance?: number;\n\n }\n\n offsetReferenceSelector?: string;\n\n presence?: PresencePainterOptions;\n \n renderer?: RendererType;\n\n selectionMode?: 'shortest' | 'all';\n\n style?: HighlightStyleExpression;\n\n user?: User;\n\n userSelectAction?: UserSelectActionExpression<E>,\n\n}\n\nexport type RendererType = 'SPANS' | 'CANVAS' | 'CSS_HIGHLIGHTS';\n\nexport type DismissOnNotAnnotatableExpression = 'NEVER'| 'ALWAYS' | ((event: Event, container: HTMLElement) => boolean)\n\nexport const fillDefaults = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n opts: TextAnnotatorOptions<I, E>,\n defaults: TextAnnotatorOptions<I, E>\n): TextAnnotatorOptions<I, E> => ({\n ...opts,\n annotatingEnabled: opts.annotatingEnabled ?? defaults.annotatingEnabled,\n user: opts.user || defaults.user\n});\n","import {\n createAnonymousGuest,\n createLifecycleObserver,\n createBaseAnnotator,\n createUndoStack,\n type Filter,\n} from '@annotorious/core';\nimport type { Annotator, User, PresenceProvider } from '@annotorious/core';\n\nimport {\n createCanvasRenderer,\n createHighlightsRenderer,\n createSpansRenderer,\n type HighlightStyleExpression\n} from './highlight';\nimport { createPresencePainter } from './presence';\nimport { scrollIntoView } from './api';\nimport { type TextAnnotationStore, type TextAnnotatorState, createTextAnnotatorState } from './state';\nimport type { TextAnnotation } from './model';\nimport { cancelSingleClickEvents, programmaticallyFocusable } from './utils';\nimport { fillDefaults, type RendererType, type TextAnnotatorOptions } from './TextAnnotatorOptions';\nimport { createSelectionHandler } from './SelectionHandler';\n\nimport './TextAnnotator.css';\n\nconst USE_DEFAULT_RENDERER: RendererType = 'SPANS';\n\nexport interface TextAnnotator<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> extends Annotator<I, E> {\n\n element: HTMLElement;\n\n setStyle(style: HighlightStyleExpression | undefined): void;\n\n redraw(lazy?: boolean): void;\n\n // Returns true if successful (or false if the annotation is not currently rendered)\n scrollIntoView(annotationOrId: I | string, scrollParentOrId?: string | Element): boolean;\n\n setAnnotatingEnabled: (enabled: boolean) => void;\n\n state: TextAnnotatorState<I, E>;\n\n}\n\nexport const createTextAnnotator = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n container: HTMLElement,\n options: TextAnnotatorOptions<I, E> = {}\n): TextAnnotator<I, E> => {\n // Prevent mobile browsers from triggering word selection on single click.\n cancelSingleClickEvents(container);\n\n // Make sure that the container is focusable and can receive both pointer and keyboard events\n programmaticallyFocusable(container);\n\n const opts = fillDefaults<I, E>(options, {\n annotatingEnabled: true,\n user: createAnonymousGuest()\n });\n\n const state: TextAnnotatorState<I, E> = createTextAnnotatorState<I, E>(container, opts);\n\n const { selection, viewport } = state;\n\n const store: TextAnnotationStore<I> = state.store;\n\n const undoStack = createUndoStack<I>(store);\n\n const lifecycle = createLifecycleObserver<I, E>(state, undoStack, opts.adapter);\n\n let currentUser: User = opts.user;\n\n // Use selected renderer, or fall back to default. If CSS_HIGHLIGHT is\n // requested, check if CSS Custom Highlights are supported, and fall\n // back to default renderer if not.\n const useRenderer: RendererType =\n opts.renderer === 'CSS_HIGHLIGHTS'\n ? Boolean(CSS.highlights) ? 'CSS_HIGHLIGHTS' : USE_DEFAULT_RENDERER\n : opts.renderer || USE_DEFAULT_RENDERER;\n\n const highlightRenderer =\n useRenderer === 'SPANS' ? createSpansRenderer(container, state, viewport) :\n useRenderer === 'CSS_HIGHLIGHTS' ? createHighlightsRenderer(container, state, viewport) :\n useRenderer === 'CANVAS' ? createCanvasRenderer(container, state, viewport) : undefined;\n\n if (!highlightRenderer)\n throw `Unknown renderer implementation: ${useRenderer}`;\n\n console.debug(`Using ${useRenderer} renderer`);\n\n if (opts.style)\n highlightRenderer.setStyle(opts.style);\n\n const selectionHandler = createSelectionHandler(container, state, opts);\n selectionHandler.setUser(currentUser);\n\n /*************************/\n /* External API */\n /******++++++*************/\n\n // Most of the external API functions are covered in the base annotator\n const base = createBaseAnnotator<I, E>(state, undoStack, opts.adapter);\n\n const getUser = () => currentUser;\n\n const setAnnotatingEnabled = (enabled?: boolean) => {\n selectionHandler.setAnnotatingEnabled(\n enabled === undefined ? true : enabled\n );\n };\n\n const setFilter = (filter?: Filter<I>) => {\n highlightRenderer.setFilter(filter);\n selectionHandler.setFilter(filter);\n }\n\n const setUser = (user: User) => {\n currentUser = user;\n selectionHandler.setUser(user);\n }\n\n const setPresenceProvider = (provider: PresenceProvider) => {\n if (provider) {\n highlightRenderer.setPainter(createPresencePainter(provider, opts.presence));\n provider.on('selectionChange', () => highlightRenderer.redraw());\n }\n }\n\n const setSelected = (arg?: string | string[]) => {\n if (arg) {\n selection.setSelected(arg);\n } else {\n selection.clear();\n }\n }\n\n const destroy = () => {\n highlightRenderer.destroy();\n selectionHandler.destroy();\n\n // Other cleanup actions\n undoStack.destroy();\n }\n\n return {\n ...base,\n destroy,\n element: container,\n getUser,\n setAnnotatingEnabled,\n setFilter,\n setStyle: highlightRenderer.setStyle.bind(highlightRenderer),\n redraw: highlightRenderer.redraw.bind(highlightRenderer),\n setUser,\n setSelected,\n setPresenceProvider,\n setVisible: highlightRenderer.setVisible.bind(highlightRenderer),\n on: lifecycle.on,\n off: lifecycle.off,\n scrollIntoView: scrollIntoView(container, store),\n state\n }\n\n}\n"],"names":["NOT_ANNOTATABLE_CLASS","NOT_ANNOTATABLE_SELECTOR","isNotAnnotatable","container","node","_a","isRangeAnnotatable","range","ancestor","cancelSingleClickEvents","event","clonePointerEvent","cloneKeyboardEvent","LIBVERSION","UA_MAX_LENGTH","USER_AGENT","EMPTY","UNKNOWN","TYPEOF","BROWSER","CPU","DEVICE","ENGINE","OS","RESULT","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","MAJOR","MODEL","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","XR","EMBEDDED","INAPP","BRANDS","FORMFACTORS","FULLVERLIST","PLATFORM","PLATFORMVER","BITNESS","CH","CH_FULL_VER_LIST","CH_ARCH","CH_BITNESS","CH_FORM_FACTORS","CH_MOBILE","CH_MODEL","CH_PLATFORM","CH_PLATFORM_VER","CH_ALL_VALUES","AMAZON","APPLE","ASUS","BLACKBERRY","GOOGLE","HUAWEI","LENOVO","HONOR","LG","MICROSOFT","MOTOROLA","NVIDIA","ONEPLUS","OPPO","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","CHROME","CHROMIUM","CHROMECAST","EDGE","FIREFOX","OPERA","FACEBOOK","SOGOU","PREFIX_MOBILE","SUFFIX_BROWSER","WINDOWS","isWindow","NAVIGATOR","NAVIGATOR_UADATA","extend","defaultRgx","extensions","mergedRgx","extraRgx","isExtensions","i","j","k","enumerize","arr","enums","has","str1","str2","lowerize","isString","obj","deep","prop","val","itemListToArray","header","tokens","strip","token","trim","str","majorize","version","setProps","propName","pattern","stripQuotes","len","rgxMapper","ua","arrays","p","q","matches","match","regex","props","strMapper","map","windowsVersionMap","formFactorsMap","browserHintsMap","defaultRegexes","defaultProps","createIData","item","itemType","init_props","is_ignoreProps","is_ignoreRgx","toString_props","IData","res","UACHData","strToCheck","is","cb","that","IDataResolve","resolveData","uach","isHttpUACH","UAItem","rgxMap","uaCH","ch","data","detect","realVersion","brands","prevName","brandName","brandVersion","archName","reParse","ff","idx","osName","osVersion","parse","UAParser","headers","kv","v","normalized","userAgent","httpUACH","regexMap","createItemFunc","isMac","programmaticallyFocusable","getHighlightClientRects","textNodes","it","currentNode","first","last","firstRange","childNode","lastRange","getTextClientRects","t","r","iterateNotAnnotatableElements","notAnnotatableIterator","notAnnotatableNode","splitAnnotatableRanges","annotatableRanges","prevNotAnnotatable","notAnnotatable","subRange","getRangeAnnotatableContents","contents","el","getQuoteContext","length","offsetReferenceSelector","offsetReference","rangeBefore","before","rangeAfter","after","isRevived","selector","s","whitespaceOrEmptyRegex","isRangeWhitespaceOrEmpty","isNodeWhitespaceOrEmpty","getRelation","rectA","rectB","hTolerance","vTolerance","round","num","a","b","union","left","right","top","bottom","mergeClientRects","rects","merged","next","wasMerged","relation","toDomRectList","index","mergeRanges","ranges","cmp","rest","result","acc","rangeToSelector","quote","start","end","toParentBounds","rect","offset","toViewportBounds","reviveSelector","iterator","runningOffset","n","startCounting","_b","reviveTarget","target","reviveAnnotation","annotation","trimRangeToContainer","trimmedRange","getScrollParent","overflowY","scroll","store","scrollParent","parentBounds","parentHeight","parentWidth","annotationBounds","width","height","offsetTop","offsetLeft","scrollTop","scrollLeft","scrollIntoView","annotationOrId","scrollParentOrId","id","current","annoRange","revived","revivedAnnoRange","DEFAULT_STYLE","DEFAULT_SELECTED_STYLE","paint","highlight","viewportBounds","style","painter","zIndex","base","debounce","function_","wait","options","immediate","storedContext","storedArguments","timeoutId","timestamp","run","callContext","callArguments","later","debounced","arguments_","callNow","debounceModule","getViewportBounds","innerWidth","innerHeight","minX","minY","maxX","maxY","trackViewport","viewport","visible","annotations","ids","createBaseRenderer","state","renderer","selection","hover","currentStyle","currentFilter","currentPainter","onDraw","onPointerMove","x","y","hit","redraw","lazy","bounds","annotationsInView","selectedIds","highlights","selected","hovered","setPainter","setStyle","setFilter","filter","onStoreChange","unsubscribeSelection","unsubscribeHover","onScroll","onResize","resizeObserver","config","mutationObserver","records","record","createCanvas","canvas","resetCanvas","highres","createRenderer","ctx","highlightA","highlightB","createdA","createdB","h","offsetRects","underlineOffset","createCanvasRenderer","e","u","o","g","d","f","c","l","m","N","M","H","$","w","toCSS","colord","elem","currentRendered","nextRendered","updatedCSS","createHighlightsRenderer","dequal","foo","bar","ctor","getBackgroundColor","computeZIndex","all","intersects","getLength","total","intersecting","highlightLayer","shouldRedraw","span","createSpansRenderer","byteToHex","unsafeStringify","getRandomValues","rnds8","rng","native","_v4","buf","rnds","v4","V","Z","z","P","E","De","F","Be","A","L","T","D","K","R","ee","Y","te","ne","oe","W","se","xe","ie","de","re","ce","G","O","le","ue","_","fe","ke","U","B","I","S","Q","X","J","pe","Ne","ze","_e","C","ge","Ve","he","me","Ae","be","ve","Pe","Ee","we","He","Me","W3CTextFormat","source","serialized","parseW3CTextAnnotation","serializeW3CTextAnnotation","isTextSelector","parseW3CTextTargets","annotationId","creator","created","modified","w3cTargets","parsed","parseW3CUser","w3cTarget","w3cSelector","missingTypes","uuidv4","body","bodies","parseW3CBodies","updated","targetRest","quoteSelector","prefix","suffix","positionSelector","serializeW3CBodies","quickselect","compare","defaultCompare","sd","newLeft","newRight","swap","tmp","RBush","maxEntries","bbox","toBBox","nodesToSearch","child","childBBox","contains","tmpNode","createNode","equalsFn","path","indexes","parent","goingUp","findItem","items","calcBBox","N2","N1","multiSelect","right2","right3","level","minArea","minEnlargement","targetNode","area","bboxArea","enlargement","enlargedArea","isNode","insertPath","splitIndex","newNode","minOverlap","bbox1","distBBox","bbox2","overlap","intersectionArea","compareMinX","compareNodeMinX","compareMinY","compareNodeMinY","xMargin","yMargin","leftBBox","rightBBox","margin","bboxMargin","siblings","destNode","children","stack","mid","createNanoEvents","args","callbacks","createSpatialTree","hMergeTolerance","vMergeTolerance","tree","emitter","toItems","revivedRange","clear","insert","remove","update","set","targets","replace","rectsByTarget","allRects","getAt","hits","getAnnotationBounds","getAnnotationRects","indexed","annotationIds","callback","createTextAnnotatorState","opts","createStore","createSelectionState","createHoverState","createViewportState","addAnnotation","origin","Origin","isValid","bulkAddAnnotations","couldNotRevive","bulkUpsertAnnotations","updateTarget","bulkUpdateTargets","getAll","filtered","getIntersecting","recalculatePositions","onRecalculatePositions","changes","deleted","newValue","context","createPresencePainter","provider","trackedAnnotations","getAnnotationsForUser","user","isSelected","metrics","labelWidth","labelHeight","paddingBottom","isff","addEvent","object","method","useCapture","removeEvent","getMods","modifier","key","mods","getKeys","keys","compareArray","a1","a2","arr1","arr2","isIndex","_keyMap","_modifier","modifierMap","_mods","_handlers","_downKeys","winListendFocus","_scope","elementEventMap","code","getKey","getModifier","setScope","scope","getScope","getPressedKeyCodes","getPressedKeyString","getAllKeyCodes","_ref","shortcut","tagName","flag","isInput","isPressed","keyCode","deleteScope","newScope","handlers","_ref2","element","removeKeyEvent","clearModifier","hotkeys","unbind","keysInfo","info","eachUnbind","_len","_key","_ref3","splitKey","originKey","unbindKeys","lastKey","unbindElements","isUnbind","eventHandler","handler","modifiersMatch","dispatch","asterisk","keyName","keyNum","eventKey","handlerKey","keyLen","keyShortcut","_downKeysCurrent","option","keyup","keydown","capture","single","keydownListener","keyupListenr","listener","trigger","values","_ref4","_api","_hotkeys","CLICK_TIMEOUT","ARROW_KEYS","SELECT_ALL","SELECTION_KEYS","createSelectionHandler","currentUser","annotatingEnabled","selectionMode","dismissOnNotAnnotatable","setUser","currentTarget","targetToModify","isLeftClick","lastDownEvent","currentAnnotatingEnabled","setAnnotatingEnabled","enabled","onSelectionChange","isModifierSelect","evt","asPtr","onSelectStart","existing","sel","selectionRanges","timeDifference","containedRanges","combinedRanges","onPointerDown","onPointerUp","lastUpEvent","clickSelect","currentIds","nextIds","pollSelectionCollapsed","isDownOnNotAnnotatable","isUpOnNotAnnotatable","upsertCurrentTarget","stopPolling","isCollapsed","shouldStopPolling","pollingDelayMs","poll","onContextMenu","onKeyup","onSelectAll","onSelected","handleArrowKeyPress","existingAnnotation","existingTargetUpdated","currentTargetUpdated","fillDefaults","defaults","USE_DEFAULT_RENDERER","createTextAnnotator","createAnonymousGuest","undoStack","createUndoStack","lifecycle","createLifecycleObserver","useRenderer","highlightRenderer","selectionHandler","createBaseAnnotator","getUser","setPresenceProvider","setSelected","arg"],"mappings":"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","x_google_ignoreList":[3,4,23,27,29,32,33,34,35,36,38,39,40,44,45]}
1
+ {"version":3,"file":"text-annotator.umd.js","sources":["../src/utils/isNotAnnotatable.ts","../src/utils/cancelSingleClickEvents.ts","../src/utils/cloneEvents.ts","../../../node_modules/ua-parser-js/src/main/ua-parser.mjs","../../../node_modules/ua-parser-js/src/enums/ua-parser-enums.mjs","../src/utils/device.ts","../src/utils/programmaticallyFocusable.ts","../src/utils/getHighlightClientRects.ts","../src/utils/splitAnnotatableRanges.ts","../src/utils/getQuoteContext.ts","../src/utils/isRevived.ts","../src/utils/isWhitespaceOrEmpty.ts","../src/utils/mergeClientRects.ts","../src/utils/mergeRanges.ts","../src/utils/rangeToSelector.ts","../src/utils/rectsToBounds.ts","../src/utils/reviveSelector.ts","../src/utils/reviveTarget.ts","../src/utils/reviveAnnotation.ts","../src/utils/trimRangeToContainer.ts","../src/api/scrollIntoView.ts","../../../node_modules/debounce/index.js","../src/highlight/HighlightStyle.ts","../../../node_modules/@annotorious/core/dist/annotorious-core.es.js","../src/highlight/viewport.ts","../src/highlight/Renderer.ts","../src/highlight/canvas/canvasRenderer.ts","../../../node_modules/colord/index.mjs","../src/highlight/highlights/highlightsRenderer.ts","../../../node_modules/dequal/lite/index.mjs","../src/highlight/HighlightPainter.ts","../src/highlight/span/color.ts","../src/highlight/span/spansRenderer.ts","../../../node_modules/uuid/dist/stringify.js","../../../node_modules/uuid/dist/rng.js","../../../node_modules/uuid/dist/native.js","../../../node_modules/uuid/dist/v4.js","../src/model/w3c/W3CTextFormatAdapter.ts","../src/presence/PresencePainter.ts","../../../node_modules/quickselect/index.js","../../../node_modules/rbush/index.js","../../../node_modules/nanoevents/index.js","../src/state/spatialTree.ts","../src/state/TextAnnotatorState.ts","../../../node_modules/hotkeys-js/dist/hotkeys.esm.js","../../../node_modules/poll/dist/poll.js","../src/SelectionHandler.ts","../src/TextAnnotatorOptions.ts","../src/TextAnnotator.ts"],"sourcesContent":["export const NOT_ANNOTATABLE_CLASS = 'not-annotatable';\n\nexport const NOT_ANNOTATABLE_SELECTOR = `.${NOT_ANNOTATABLE_CLASS}`;\n\nexport const isNotAnnotatable = (container: Node, node: Node): boolean => {\n if (!container.contains(node)) return true;\n\n const closestNotAnnotatable = node instanceof HTMLElement\n ? node.closest(NOT_ANNOTATABLE_SELECTOR)\n : node.parentElement?.closest(NOT_ANNOTATABLE_SELECTOR);\n return Boolean(closestNotAnnotatable);\n}\n\nexport const isRangeAnnotatable = (container: Node, range: Range): boolean => {\n const ancestor = range.commonAncestorContainer;\n return !isNotAnnotatable(container, ancestor);\n}","import { NOT_ANNOTATABLE_SELECTOR } from './isNotAnnotatable';\n\n/**\n * Calls .preventDefault() on click events in annotable areas, in order\n * to prevent problematic default browser behavior. (Specifically: keep\n * Chrome Android from triggering word selection on single click.)\n */\nexport const cancelSingleClickEvents = (container: HTMLElement) =>\n container.addEventListener('click', event => {\n const targetElement = event.target as HTMLElement;\n\n const shouldPrevent =\n // Allow clicks within not-annotatable elements\n !targetElement.closest(NOT_ANNOTATABLE_SELECTOR)\n // Allow clicks on links\n && !(event.target as Element).closest('a');\n\n if (shouldPrevent)\n event.preventDefault();\n });\n","/**\n * Events need to be manually mapped into new objects:\n * 1. It preserves the `target` and `currentTarget` properties.\n * Otherwise, they will be `null` when the event is read beyond the handler.\n * 2. Spread operator can copy only own enumerable properties, not inherited ones.\n * Therefore, we need to manually copy the props we're interested in.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget\n * @see https://github.com/recogito/text-annotator-js/commit/65d13f3108c429311cf8c2523f6babbbc946013d#r144041390\n */\n\nexport const clonePointerEvent = (event: PointerEvent): PointerEvent => ({\n ...event,\n type: event.type,\n x: event.x,\n y: event.y,\n clientX: event.clientX,\n clientY: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n screenX: event.screenX,\n screenY: event.screenY,\n isPrimary: event.isPrimary,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n button: event.button,\n buttons: event.buttons,\n currentTarget: event.currentTarget,\n target: event.target,\n defaultPrevented: event.defaultPrevented,\n detail: event.detail,\n eventPhase: event.eventPhase,\n pointerId: event.pointerId,\n pointerType: event.pointerType,\n timeStamp: event.timeStamp\n})\n\nexport const cloneKeyboardEvent = (event: KeyboardEvent): KeyboardEvent => ({\n ...event,\n type: event.type,\n key: event.key,\n code: event.code,\n location: event.location,\n repeat: event.repeat,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n currentTarget: event.currentTarget,\n target: event.target,\n defaultPrevented: event.defaultPrevented,\n detail: event.detail,\n timeStamp: event.timeStamp\n})\n","// Generated ESM version of ua-parser-js\n// DO NOT EDIT THIS FILE!\n// Source: /src/main/ua-parser.js\n\n/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v2.0.6\n Copyright © 2012-2025 Faisal Salman <f@faisalman.com>\n AGPLv3 License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://uaparser.dev\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n/* jshint esversion: 6 */ \n/* globals window */\n\n\n \n //////////////\n // Constants\n /////////////\n\n var LIBVERSION = '2.0.6',\n UA_MAX_LENGTH = 500,\n USER_AGENT = 'user-agent',\n EMPTY = '',\n UNKNOWN = '?',\n TYPEOF = {\n FUNCTION : 'function',\n OBJECT : 'object',\n STRING : 'string',\n UNDEFINED : 'undefined'\n },\n\n // properties\n BROWSER = 'browser',\n CPU = 'cpu',\n DEVICE = 'device',\n ENGINE = 'engine',\n OS = 'os',\n RESULT = 'result',\n\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n MAJOR = 'major',\n MODEL = 'model',\n\n // device types\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n XR = 'xr',\n EMBEDDED = 'embedded',\n\n // browser types\n INAPP = 'inapp',\n\n // client hints\n BRANDS = 'brands',\n FORMFACTORS = 'formFactors',\n FULLVERLIST = 'fullVersionList',\n PLATFORM = 'platform',\n PLATFORMVER = 'platformVersion',\n BITNESS = 'bitness',\n CH = 'sec-ch-ua',\n CH_FULL_VER_LIST= CH + '-full-version-list',\n CH_ARCH = CH + '-arch',\n CH_BITNESS = CH + '-' + BITNESS,\n CH_FORM_FACTORS = CH + '-form-factors',\n CH_MOBILE = CH + '-' + MOBILE,\n CH_MODEL = CH + '-' + MODEL,\n CH_PLATFORM = CH + '-' + PLATFORM,\n CH_PLATFORM_VER = CH_PLATFORM + '-version',\n CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],\n\n // device vendors\n AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LENOVO = 'Lenovo',\n HONOR = 'Honor',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n NVIDIA = 'Nvidia',\n ONEPLUS = 'OnePlus',\n OPPO = 'OPPO',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n\n // browsers\n CHROME = 'Chrome',\n CHROMIUM = 'Chromium',\n CHROMECAST = 'Chromecast',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n OPERA = 'Opera',\n FACEBOOK = 'Facebook',\n SOGOU = 'Sogou',\n\n PREFIX_MOBILE = 'Mobile ',\n SUFFIX_BROWSER = ' Browser',\n\n // os\n WINDOWS = 'Windows';\n \n var isWindow = typeof window !== TYPEOF.UNDEFINED,\n NAVIGATOR = (isWindow && window.navigator) ? \n window.navigator : \n undefined,\n NAVIGATOR_UADATA = (NAVIGATOR && NAVIGATOR.userAgentData) ? \n NAVIGATOR.userAgentData : \n undefined;\n\n ///////////\n // Helper\n //////////\n\n var extend = function (defaultRgx, extensions) {\n var mergedRgx = {};\n var extraRgx = extensions;\n if (!isExtensions(extensions)) {\n extraRgx = {};\n for (var i in extensions) {\n for (var j in extensions[i]) {\n extraRgx[j] = extensions[i][j].concat(extraRgx[j] ? extraRgx[j] : []);\n }\n }\n }\n for (var k in defaultRgx) {\n mergedRgx[k] = extraRgx[k] && extraRgx[k].length % 2 === 0 ? extraRgx[k].concat(defaultRgx[k]) : defaultRgx[k];\n }\n return mergedRgx;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i<arr.length; i++) {\n enums[arr[i].toUpperCase()] = arr[i];\n }\n return enums;\n },\n has = function (str1, str2) {\n if (typeof str1 === TYPEOF.OBJECT && str1.length > 0) {\n for (var i in str1) {\n if (lowerize(str2) == lowerize(str1[i])) return true;\n }\n return false;\n }\n return isString(str1) ? lowerize(str2) == lowerize(str1) : false;\n },\n isExtensions = function (obj, deep) {\n for (var prop in obj) {\n return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);\n }\n },\n isString = function (val) {\n return typeof val === TYPEOF.STRING;\n },\n itemListToArray = function (header) {\n if (!header) return undefined;\n var arr = [];\n var tokens = strip(/\\\\?\\\"/g, header).split(',');\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].indexOf(';') > -1) {\n var token = trim(tokens[i]).split(';v=');\n arr[i] = { brand : token[0], version : token[1] };\n } else {\n arr[i] = trim(tokens[i]);\n }\n }\n return arr;\n },\n lowerize = function (str) {\n return isString(str) ? str.toLowerCase() : str;\n },\n majorize = function (version) {\n return isString(version) ? strip(/[^\\d\\.]/g, version).split('.')[0] : undefined;\n },\n setProps = function (arr) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n var propName = arr[i];\n if (typeof propName == TYPEOF.OBJECT && propName.length == 2) {\n this[propName[0]] = propName[1];\n } else {\n this[propName] = undefined;\n }\n }\n return this;\n },\n strip = function (pattern, str) {\n return isString(str) ? str.replace(pattern, EMPTY) : str;\n },\n stripQuotes = function (str) {\n return strip(/\\\\?\\\"/g, str); \n },\n trim = function (str, len) {\n str = strip(/^\\s\\s*/, String(str));\n return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);\n };\n\n ///////////////\n // Map helper\n //////////////\n\n var rgxMapper = function (ua, arrays) {\n\n if(!ua || !arrays) return;\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n if (!regex[j]) { break; }\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === TYPEOF.OBJECT && q.length > 0) {\n if (q.length === 2) {\n if (typeof q[1] == TYPEOF.FUNCTION) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length >= 3) {\n // Check whether q[1] FUNCTION or REGEX\n if (typeof q[1] === TYPEOF.FUNCTION && !(q[1].exec && q[1].test)) {\n if (q.length > 3) {\n this[q[0]] = match ? q[1].apply(this, q.slice(2)) : undefined;\n } else {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n }\n } else {\n if (q.length == 3) {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n } else if (q.length > 4) {\n this[q[0]] = match ? q[3].apply(this, [match.replace(q[1], q[2])].concat(q.slice(4))) : undefined;\n }\n }\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === TYPEOF.OBJECT && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return map.hasOwnProperty('*') ? map['*'] : str;\n };\n\n ///////////////\n // String map\n //////////////\n\n var windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.51': '3.51',\n 'NT 4.0': '4.0',\n '2000' : ['5.0', '5.01'],\n 'XP' : ['5.1', '5.2'],\n 'Vista' : '6.0',\n '7' : '6.1',\n '8' : '6.2',\n '8.1' : '6.3',\n '10' : ['6.4', '10.0'],\n 'NT' : ''\n },\n \n formFactorsMap = {\n 'embedded' : 'Automotive',\n 'mobile' : 'Mobile',\n 'tablet' : ['Tablet', 'EInk'],\n 'smarttv' : 'TV',\n 'wearable' : 'Watch',\n 'xr' : ['VR', 'XR'],\n '?' : ['Desktop', 'Unknown'],\n '*' : undefined\n },\n\n browserHintsMap = {\n 'Chrome' : 'Google Chrome',\n 'Edge' : 'Microsoft Edge',\n 'Edge WebView2' : 'Microsoft Edge WebView2',\n 'Chrome WebView': 'Android WebView',\n 'Chrome Headless':'HeadlessChrome',\n 'Huawei Browser': 'HuaweiBrowser',\n 'MIUI Browser' : 'Miui Browser',\n 'Opera Mobi' : 'OperaMobile',\n 'Yandex' : 'YaBrowser'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var defaultRegexes = {\n\n browser : [[\n\n // Most common regardless engine\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [\n /webview.+edge\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, EDGE+' WebView']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i \n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bop(?:rg)?x\\/([\\w\\.]+)/i // Opera GX\n ], [VERSION, [NAME, OPERA+' GX']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /\\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\\/ ]?([\\w\\.]+)/i // Baidu\n ], [VERSION, [NAME, 'Baidu']], [\n /\\b(?:mxbrowser|mxios|myie2)\\/?([-\\w\\.]*)\\b/i // Maxthon\n ], [VERSION, [NAME, 'Maxthon']], [\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\\/ ]?([\\w\\.]*)/i, \n // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir\n // Trident based\n /(avant|iemobile|slim(?:browser|boat|jet))[\\/ ]?([\\d\\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble/Palemoon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:lg |qute)browser|palemoon)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon\n /(heytap|ovi|115|surf|qwant)browser\\/([\\d\\.]+)/i, // HeyTap/Ovi/115/Surf\n /(qwant)(?:ios|mobile)\\/([\\d\\.]+)/i, // Qwant\n /(ecosia|weibo)(?:__| \\w+@)([\\d\\.]+)/i // Ecosia/Weibo\n ], [NAME, VERSION], [\n /quark(?:pc)?\\/([-\\w\\.]+)/i // Quark\n ], [VERSION, [NAME, 'Quark']], [\n /\\bddg\\/([\\w\\.]+)/i // DuckDuckGo\n ], [VERSION, [NAME, 'DuckDuckGo']], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UCBrowser']], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i,\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /ya(?:search)?browser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /slbrowser\\/([\\w\\.]+)/i // Smart Lenovo Browser\n ], [VERSION, [NAME, 'Smart ' + LENOVO + SUFFIX_BROWSER]], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI' + SUFFIX_BROWSER]], [\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, PREFIX_MOBILE + FIREFOX]], [\n /\\bqihoobrowser\\/?([\\w\\.]*)/i // 360\n ], [VERSION, [NAME, '360']], [\n /\\b(qq)\\/([\\w\\.]+)/i // QQ\n ], [[NAME, /(.+)/, '$1Browser'], VERSION], [\n /(oculus|sailfish|huawei|vivo|pico)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser\n /samsungbrowser\\/([\\w\\.]+)/i // Samsung Internet\n ], [VERSION, [NAME, SAMSUNG + ' Internet']], [\n /metasr[\\/ ]?([\\d\\.]+)/i // Sogou Explorer\n ], [VERSION, [NAME, SOGOU + ' Explorer']], [\n /(sogou)mo\\w+\\/([\\d\\.]+)/i // Sogou Mobile\n ], [[NAME, SOGOU + ' Mobile'], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|2345(?=browser|chrome|explorer))\\w*[\\/ ]?v?([\\w\\.]+)/i // QQ/2345\n ], [NAME, VERSION], [\n /(lbbrowser|rekonq)/i // LieBao Browser/Rekonq\n ], [NAME], [\n /ome\\/([\\w\\.]+) \\w* ?(iron) saf/i, // Iron\n /ome\\/([\\w\\.]+).+qihu (360)[es]e/i // 360\n ], [VERSION, NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION, [TYPE, INAPP]], [\n /(kakao(?:talk|story))[\\/ ]([\\w\\.]+)/i, // Kakao App\n /(naver)\\(.*?(\\d+\\.[\\w\\.]+).*\\)/i, // Naver InApp\n /(daum)apps[\\/ ]([\\w\\.]+)/i, // Daum App\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(alipay)client\\/([\\w\\.]+)/i, // Alipay\n /(twitter)(?:and| f.+e\\/([\\w\\.]+))/i, // Twitter\n /(bing)(?:web|sapphire)\\/([\\w\\.]+)/i, // Bing\n /(instagram|snapchat|klarna)[\\/ ]([-\\w\\.]+)/i // Instagram/Snapchat/Klarna\n ], [NAME, VERSION, [TYPE, INAPP]], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA'], [TYPE, INAPP]], [\n /musical_ly(?:.+app_?version\\/|_)([\\w\\.]+)/i // TikTok\n ], [VERSION, [NAME, 'TikTok'], [TYPE, INAPP]], [\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME, [TYPE, INAPP]], [\n /(zalo(?:app)?)[\\/\\sa-z]*([\\w\\.-]+)/i // Zalo \n ], [[NAME, /(.+)/, 'Zalo'], VERSION, [TYPE, INAPP]], [\n\n /(chromium)[\\/ ]([-\\w\\.]+)/i // Chromium\n ], [NAME, VERSION], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n /wv\\).+chrome\\/([\\w\\.]+).+edgw\\//i // Edge WebView2\n ], [VERSION, [NAME, EDGE+' WebView2']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android' + SUFFIX_BROWSER]], [\n\n /chrome\\/([\\w\\.]+) mobile/i // Chrome Mobile\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile(?:\\/\\w+ | ?)safari/i // Safari Mobile\n ], [VERSION, [NAME, PREFIX_MOBILE + 'Safari']], [\n /iphone .*mobile(?:\\/\\w+ | ?)safari/i\n ], [[NAME, PREFIX_MOBILE + 'Safari']], [\n /version\\/([\\w\\.\\,]+) .*(safari)/i // Safari\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, '1']], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(?:mobile|tablet);.*(firefox)\\/([\\w\\.-]+)/i // Firefox Mobile\n ], [[NAME, PREFIX_MOBILE + FIREFOX], VERSION], [\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(wolvic|librewolf)\\/([\\w\\.]+)/i // Wolvic/LibreWolf\n ], [NAME, VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+(?= .+rv\\:.+gecko\\/\\d+)|[0-4][\\w\\.]+(?!.+compatible))/i, // Mozilla\n\n // Other\n /(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird\n /\\b(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, [VERSION, /_/g, '.']], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /[^\\d\\.]+./, EMPTY]]\n ],\n\n cpu : [[\n\n /\\b((amd|x|x86[-_]?|wow|win)64)\\b/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i, // IA32 (quicktime)\n /\\b((i[346]|x)86)(pc)?\\b/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?[89]e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /( (ce|mobile); ppc;|\\/[\\w\\.]+arm\\b)/i\n ], [[ARCHITECTURE, 'arm']], [\n\n / sun4\\w[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n /\\b(avr32|ia64(?=;)|68k(?=\\))|\\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\\b|pa-risc)/i,\n /((ppc|powerpc)(64)?)( mac|;|\\))/i, // PowerPC\n /(?:osf1|[freopnt]{3,4}bsd) (alpha)/i // Alpha\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n /mc680.0/i\n ], [[ARCHITECTURE, '68k']], [\n /winnt.+\\[axp/i\n ], [[ARCHITECTURE, 'alpha']]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-(?![lr])\\w+|sc[g-]?[\\d]+a?|galaxy nexus)/i,\n /samsung[- ]((?!sm-[lr]|browser)[-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /(?:\\/|\\()(ip(?:hone|od)[\\w, ]*)[\\/\\);]/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\b(?:ios|apple\\w+)\\/.+[\\(\\/](ipad)/i, // iPad\n /\\b(ipad)[\\d,]*[;\\] ].+(mac |i(pad)?)os/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // Honor\n /\\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\\)|;)/i\n ], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [\n /honor([-\\w ]+)[;\\)]/i\n ], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [\n\n // Huawei\n /\\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\\w\\. ]*(?= bui|\\)))\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei) ?([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][\\dc][adnt]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /oid[^\\)]+; (2[\\dbc]{4}(182|283|rp\\w{2})[cgl]|m2105k81a?c)(?: bui|\\))/i,\n /\\b(?:xiao)?((?:red)?mi[-_ ]?pad[\\w- ]*)(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n /\\b(poco[\\w ]+|m2\\d{3}j\\d\\d[a-z]{2})(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /oid[^\\)]+; (m?[12][0-389][01]\\w{3,6}[c-y])( bui|; wv|\\))/i, // Xiaomi Redmi 'numeric' models\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\\d{0,2}\\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\\))/i, // Xiaomi Mi\n / ([\\w ]+) miui\\/v?\\d/i\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n\n // OnePlus\n /droid.+; (cph2[3-6]\\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\\d|p[g-k]\\w[1m]10)\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [\n /\\b(opd2(\\d{3}a?))(?: bui|\\))/i\n ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['203', '304', '403', '404', '413', '415'], '*' : OPPO }], [TYPE, TABLET]], [\n\n // BLU\n /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\\w\\+ ]*)(?: bui|\\))/i // Vivo series\n ], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [ \n\n // Vivo\n /; vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[1-3]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\\d{3,4}(?:f[cu]|xu|[av])|yt\\d?-[jx]?\\d+[lfmx])( bui|;|\\)|\\/)/i,\n /lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\\w- ]+?)|tb[\\w-]{6,7})( bui|;|\\)|\\/)/i\n ], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [ \n /lenovo[-_ ]?([-\\w ]+?)(?: bui|\\)|\\/)/i\n ], [MODEL, [VENDOR, LENOVO], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ]([\\w\\s]+)(\\)| bui)/i,\n /((?:moto(?! 360)[-\\w\\(\\) ]+|xt\\d{3,4}[cgkosw\\+]?[-\\d]*|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Nokia\n /(nokia) (t[12][01])/i\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n /(?:maemo|nokia).*(n900|lumia \\d+|rm-\\d+)/i,\n /nokia[-_ ]?(([-\\w\\. ]*?))( bui|\\)|;|\\/)/i\n ], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [\n\n // Google\n /(pixel (c|tablet))\\b/i // Google Pixel C/Tablet\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n // Google Pixel\n /droid.+;(?: google)? (g(01[13]a|020[aem]|025[jn]|1b60|1f8f|2ybb|4s1m|576d|5nz6|8hhn|8vou|a02099|c15s|d1yq|e2ae|ec77|gh2x|kv4x|p4bc|pj41|r83y|tt9q|ur25|wvk6)|pixel[\\d ]*a?( pro)?( xl)?( fold)?( \\(5g\\))?)( bui|\\))/i\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n /(google) (pixelbook( go)?)/i\n ], [VENDOR, MODEL], [\n\n // Sony\n /droid.+; (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-\\w\\w\\d\\d)(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi|aeo(?!bc)\\w\\w)( bui|\\))/i, // Kindle Fire without Silk / Echo Show\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /(?:blackberry|\\(bb10;) (\\w+)/i\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\\.))|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // TCL\n /tcl (xess p17aa)/i,\n /droid [\\w\\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\\w(\\w|\\w\\w))?(\\)| bui)/i\n ], [MODEL, [VENDOR, 'TCL'], [TYPE, TABLET]], [\n /droid [\\w\\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\\w(\\w|\\w\\w))?(\\)| bui)/i\n ], [MODEL, [VENDOR, 'TCL'], [TYPE, MOBILE]], [\n\n // itel\n /(itel) ((\\w+))/i\n ], [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { 'tablet' : ['p10001l', 'w7001'], '*' : 'mobile' }]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n \n // Ulefone\n /; ((?:power )?armor(?:[\\w ]{0,8}))(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [\n\n // Energizer\n /; (energy ?\\w+)(?: bui|\\))/i,\n /; energizer ([\\w ]+)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Energizer'], [TYPE, MOBILE]], [\n\n // Cat\n /; cat (b35);/i,\n /; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Cat'], [TYPE, MOBILE]], [\n\n // Smartfren\n /((?:new )?andromax[\\w- ]+)(?: bui|\\))/i\n ], [MODEL, [VENDOR, 'Smartfren'], [TYPE, MOBILE]], [\n\n // Nothing\n /droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i\n ], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [\n\n // Archos\n /; (x67 5g|tikeasy \\w+|ac[1789]\\d\\w+)( b|\\))/i,\n /archos ?(5|gamepad2?|([\\w ]*[t1789]|hello) ?\\d+[\\w ]*)( b|\\))/i\n ], [MODEL, [VENDOR, 'Archos'], [TYPE, TABLET]], [\n /archos ([\\w ]+)( b|\\))/i,\n /; (ac[3-6]\\d\\w{2,8})( b|\\))/i \n ], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [\n\n // HMD\n /; (n159v)/i\n ], [MODEL, [VENDOR, 'HMD'], [TYPE, MOBILE]], [\n\n // MIXED\n /(imo) (tab \\w+)/i, // IMO\n /(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i // Infinix XPad / Tecno\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan\n // BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko\n /; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([\\w\\+ ]+?)(?: bui|\\)|; r)/i,\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(oppo) ?([\\w ]+) bui/i, // OPPO\n /(hisense) ([ehv][\\w ]+)\\)/i, // Hisense\n /droid[^;]+; (philips)[_ ]([sv-x][\\d]{3,4}[xz]?)/i // Philips\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(kobo)\\s(ereader|touch)/i, // Kobo\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i // Kindle\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /((?:tegranote|shield t(?!.+d tv))[\\w- ]*?)(?: b|\\))/i // Nvidia Tablets\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /(philips)[\\w ]+tv/i, // Philips\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(vizio)(?: |.+model\\/)(\\w+-\\w+)/i, // Vizio\n /tcast.+(lg)e?. ([-\\w]+)/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey.*devicetype\\/chromecast/i // Google Chromecast Third Generation\n ], [[MODEL, CHROMECAST+' Third Generation'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /crkey.*devicetype\\/([^/]*)/i // Google Chromecast with specific device type\n ], [[MODEL, /^/, 'Chromecast '], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /fuchsia.*crkey/i // Google Chromecast Nest Hub\n ], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast, Linux-based or unknown\n ], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /(portaltv)/i // Facebook Portal TV\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]], [\n /droid.+aft(\\w+)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /(shield \\w+ tv)/i // Nvidia Shield TV\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mi(tv|box)-?\\w+) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /Hbbtv.*(technisat) (.*);/i // TechniSAT\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w\\+ ]*; *([\\w\\d][^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, /.+\\/(\\w+)/, '$1', strMapper, {'LG':'lge'}], [MODEL, trim], [TYPE, SMARTTV]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(playstation \\w+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n /(ouya)/i, // Ouya\n /(nintendo) (\\w+)/i, // Nintendo\n /(retroid) (pocket ([^\\)]+))/i // Retroid Pocket\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield)( bui|\\))/i // Nvidia Portable\n ], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /\\b(sm-[lr]\\d\\d[0156][fnuw]?s?|gear live)\\b/i // Samsung Galaxy Watch\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [\n /((pebble))app/i, // Pebble\n /(asus|google|lg|oppo) ((pixel |zen)?watch[\\w ]*)( bui|\\))/i // Asus ZenWatch / LG Watch / Pixel Watch\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch\n ], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [\n /(watch)(?: ?os[,\\/]|\\d,\\d\\/)[\\d\\.]+/i // Apple Watch\n ], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [\n /(opwwe\\d{3})/i // OnePlus Watch\n ], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [\n /(moto 360)/i // Motorola 360\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [\n /(smartwatch 3)/i // Sony SmartWatch\n ], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [\n /(g watch r)/i // LG G Watch R\n ], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n\n ///////////////////\n // XR\n ///////////////////\n\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [\n /(pico) ([\\w ]+) os\\d/i // Pico\n ], [VENDOR, MODEL, [TYPE, XR]], [\n /(quest( \\d| pro)?s?).+vr/i // Meta Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [\n /mobile vr; rv.+firefox/i // Unidentifiable VR device using Firefox Reality / Wolvic\n ], [[TYPE, XR]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n /(aeobc)\\b/i // Echo Dot\n ], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [\n /(homepod).+mac os/i // Apple HomePod\n ], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [\n /windows iot/i // Unidentifiable embedded device using Windows IoT\n ], [[TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid.+; ([\\w- ]+) (4k|android|smart|google)[- ]?tv/i // Unidentifiable SmartTV\n ], [MODEL, [TYPE, SMARTTV]], [\n /\\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\\w ]+safari)\\b/i\n ], [[TYPE, SMARTTV]], [\n /droid .+?; ([^;]+?)(?: bui|; wv\\)|\\) applew|; hmsc).+?(mobile|vr|\\d) safari/i\n ], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /droid .+?; ([\\w\\. -]+)( bui|\\))/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /(arkweb)\\/([\\w\\.]+)/i // ArkWeb\n ], [NAME, VERSION], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i, // iCab\n\n /\\b(libweb)/i // LibWeb\n ], [NAME, VERSION], [\n /ladybird\\//i\n ], [[NAME, 'LibWeb']], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /(windows nt) (6\\.[23]); arm/i // Windows RT\n ], [[NAME, /N/, 'R'], [VERSION, strMapper, windowsVersionMap]], [\n /(windows (?:phone|mobile|iot))(?: os)?[\\/ ]?([\\d\\.]*( se)?)/i, // Windows IoT/Mobile/Phone\n // Windows NT/3.1/95/98/ME/2000/XP/Vista/7/8/8.1/10/11\n /(windows)[\\/ ](1[01]|2000|3\\.1|7|8(\\.1)?|9[58]|me|server 20\\d\\d( r2)?|vista|xp)/i\n ], [NAME, VERSION], [\n /windows nt ?([\\d\\.\\)]*)(?!.+xbox)/i,\n /\\bwin(?=3| ?9|n)(?:nt| 9x )?([\\d\\.;]*)/i\n ], [[VERSION, /(;|\\))/g, '', strMapper, windowsVersionMap], [NAME, WINDOWS]], [\n /(windows ce)\\/?([\\d\\.]*)/i // Windows CE\n ], [NAME, VERSION], [\n\n // iOS/macOS\n /[adehimnop]{4,7}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\\/ ]([\\w\\.]+)/i,\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+(haiku|morphos))/i // Mac OS\n ], [[NAME, 'macOS'], [VERSION, /_/g, '.']], [\n\n // Google Chromecast\n /android ([\\d\\.]+).*crkey/i // Google Chromecast, Android-based\n ], [VERSION, [NAME, CHROMECAST + ' Android']], [\n /fuchsia.*crkey\\/([\\d\\.]+)/i // Google Chromecast, Fuchsia-based\n ], [VERSION, [NAME, CHROMECAST + ' Fuchsia']], [\n /crkey\\/([\\d\\.]+).*devicetype\\/smartspeaker/i // Google Chromecast, Linux-based Smart Speaker\n ], [VERSION, [NAME, CHROMECAST + ' SmartSpeaker']], [\n /linux.*crkey\\/([\\d\\.]+)/i // Google Chromecast, Legacy Linux-based\n ], [VERSION, [NAME, CHROMECAST + ' Linux']], [\n /crkey\\/([\\d\\.]+)/i // Google Chromecast, unknown\n ], [VERSION, [NAME, CHROMECAST]], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ], [VERSION, NAME], [ \n /(ubuntu) ([\\w\\.]+) like android/i // Ubuntu Touch\n ], [[NAME, /(.+)/, '$1 Touch'], VERSION], [\n /(harmonyos)[\\/ ]?([\\d\\.]*)/i, // HarmonyOS\n // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen\n /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\\w*[-\\/\\.; ]?([\\d\\.]*)/i\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i, // WebOS\n /webos(?:[ \\/]?|\\.tv-20(?=2[2-9]))(\\d[\\d\\.]*)/i\n ], [VERSION, [NAME, 'webOS']], [\n /web0s;.+?(?:chr[o0]me|safari)\\/(\\d+)/i\n // https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine\n ], [[VERSION, strMapper, {'25':'120','24':'108','23':'94','22':'87','6':'79','5':'68','4':'53','3':'38','2':'538','1':'537','*':'TV'}], [NAME, 'webOS']], [ \n /watch(?: ?os[,\\/]|\\d,\\d\\/)([\\d\\.]+)/i // watchOS\n ], [VERSION, [NAME, 'watchOS']], [\n\n // Google ChromeOS\n /(cros) [\\w]+(?:\\)| ([\\w\\.]+)\\b)/i // Chromium OS\n ], [[NAME, \"Chrome OS\"], VERSION],[\n\n // Smart TVs\n /panasonic;(viera)/i, // Panasonic Viera\n /(netrange)mmh/i, // Netrange\n /(nettv)\\/(\\d+\\.[\\w\\.]+)/i, // NetTV\n\n // Console\n /(nintendo|playstation) (\\w+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n /(pico) .+os([\\w\\.]+)/i, // Pico\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /linux.+(mint)[\\/\\(\\) ]?([\\w\\.]*)/i, // Mint\n /(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\\d\\.]*)/i, // Mageia/VectorLinux/Fuchsia/ArcaOS/Arch\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire|knoppix)(?: gnu[\\/ ]linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire/Knoppix\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /\\b(aix)[; ]([1-9\\.]{0,4})/i, // AIX\n /(hurd|linux|morphos)(?: (?:arm|x86|ppc)\\w*| ?)([\\w\\.]*)/i, // Hurd/Linux/MorphOS\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) ?(r\\d)?/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\d\\.]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /\\b(beos|os\\/2|amigaos|openvms|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/OpenVMS/HP-UX/SerenityOS\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Factories\n ////////////////\n\n var defaultProps = (function () {\n var props = { init : {}, isIgnore : {}, isIgnoreRgx : {}, toString : {}};\n setProps.call(props.init, [\n [BROWSER, [NAME, VERSION, MAJOR, TYPE]],\n [CPU, [ARCHITECTURE]],\n [DEVICE, [TYPE, MODEL, VENDOR]],\n [ENGINE, [NAME, VERSION]],\n [OS, [NAME, VERSION]]\n ]);\n setProps.call(props.isIgnore, [\n [BROWSER, [VERSION, MAJOR]],\n [ENGINE, [VERSION]],\n [OS, [VERSION]]\n ]);\n setProps.call(props.isIgnoreRgx, [\n [BROWSER, / ?browser$/i],\n [OS, / ?os$/i]\n ]);\n setProps.call(props.toString, [\n [BROWSER, [NAME, VERSION]],\n [CPU, [ARCHITECTURE]],\n [DEVICE, [VENDOR, MODEL]],\n [ENGINE, [NAME, VERSION]],\n [OS, [NAME, VERSION]]\n ]);\n return props;\n })();\n\n var createIData = function (item, itemType) {\n\n var init_props = defaultProps.init[itemType],\n is_ignoreProps = defaultProps.isIgnore[itemType] || 0,\n is_ignoreRgx = defaultProps.isIgnoreRgx[itemType] || 0,\n toString_props = defaultProps.toString[itemType] || 0;\n\n function IData () {\n setProps.call(this, init_props);\n }\n\n IData.prototype.getItem = function () {\n return item;\n };\n\n IData.prototype.withClientHints = function () {\n\n // nodejs / non-client-hints browsers\n if (!NAVIGATOR_UADATA) {\n return item\n .parseCH()\n .get();\n }\n\n // browsers based on chromium 85+\n return NAVIGATOR_UADATA\n .getHighEntropyValues(CH_ALL_VALUES)\n .then(function (res) {\n return item\n .setCH(new UACHData(res, false))\n .parseCH()\n .get();\n });\n };\n\n IData.prototype.withFeatureCheck = function () {\n return item.detectFeature().get();\n };\n\n if (itemType != RESULT) {\n IData.prototype.is = function (strToCheck) {\n var is = false;\n for (var i in this) {\n if (this.hasOwnProperty(i) && !has(is_ignoreProps, i) && lowerize(is_ignoreRgx ? strip(is_ignoreRgx, this[i]) : this[i]) == lowerize(is_ignoreRgx ? strip(is_ignoreRgx, strToCheck) : strToCheck)) {\n is = true;\n if (strToCheck != TYPEOF.UNDEFINED) break;\n } else if (strToCheck == TYPEOF.UNDEFINED && is) {\n is = !is;\n break;\n }\n }\n return is;\n };\n IData.prototype.toString = function () {\n var str = EMPTY;\n for (var i in toString_props) {\n if (typeof(this[toString_props[i]]) !== TYPEOF.UNDEFINED) {\n str += (str ? ' ' : EMPTY) + this[toString_props[i]];\n }\n }\n return str || TYPEOF.UNDEFINED;\n };\n }\n\n if (!NAVIGATOR_UADATA) {\n IData.prototype.then = function (cb) { \n var that = this;\n var IDataResolve = function () {\n for (var prop in that) {\n if (that.hasOwnProperty(prop)) {\n this[prop] = that[prop];\n }\n }\n };\n IDataResolve.prototype = {\n is : IData.prototype.is,\n toString : IData.prototype.toString\n };\n var resolveData = new IDataResolve();\n cb(resolveData);\n return resolveData;\n };\n }\n\n return new IData();\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n function UACHData (uach, isHttpUACH) {\n uach = uach || {};\n setProps.call(this, CH_ALL_VALUES);\n if (isHttpUACH) {\n setProps.call(this, [\n [BRANDS, itemListToArray(uach[CH])],\n [FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],\n [MOBILE, /\\?1/.test(uach[CH_MOBILE])],\n [MODEL, stripQuotes(uach[CH_MODEL])],\n [PLATFORM, stripQuotes(uach[CH_PLATFORM])],\n [PLATFORMVER, stripQuotes(uach[CH_PLATFORM_VER])],\n [ARCHITECTURE, stripQuotes(uach[CH_ARCH])],\n [FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],\n [BITNESS, stripQuotes(uach[CH_BITNESS])]\n ]);\n } else {\n for (var prop in uach) {\n if(this.hasOwnProperty(prop) && typeof uach[prop] !== TYPEOF.UNDEFINED) this[prop] = uach[prop];\n }\n }\n }\n\n function UAItem (itemType, ua, rgxMap, uaCH) {\n\n this.get = function (prop) {\n if (!prop) return this.data;\n return this.data.hasOwnProperty(prop) ? this.data[prop] : undefined;\n };\n\n this.set = function (prop, val) {\n this.data[prop] = val;\n return this;\n };\n\n this.setCH = function (ch) {\n this.uaCH = ch;\n return this;\n };\n\n this.detectFeature = function () {\n if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {\n switch (this.itemType) {\n case BROWSER:\n // Brave-specific detection\n if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == TYPEOF.FUNCTION) {\n this.set(NAME, 'Brave');\n }\n break;\n case DEVICE:\n // Chrome-specific detection: check for 'mobile' value of navigator.userAgentData\n if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {\n this.set(TYPE, MOBILE);\n }\n // iPadOS-specific detection: identified as Mac, but has some iOS-only properties\n if (this.get(MODEL) == 'Macintosh' && NAVIGATOR && typeof NAVIGATOR.standalone !== TYPEOF.UNDEFINED && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {\n this.set(MODEL, 'iPad')\n .set(TYPE, TABLET);\n }\n break;\n case OS:\n // Chrome-specific detection: check for 'platform' value of navigator.userAgentData\n if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {\n this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);\n }\n break;\n case RESULT:\n var data = this.data;\n var detect = function (itemType) {\n return data[itemType]\n .getItem()\n .detectFeature()\n .get();\n };\n this.set(BROWSER, detect(BROWSER))\n .set(CPU, detect(CPU))\n .set(DEVICE, detect(DEVICE))\n .set(ENGINE, detect(ENGINE))\n .set(OS, detect(OS));\n }\n }\n return this;\n };\n\n this.parseUA = function () {\n if (this.itemType != RESULT) {\n rgxMapper.call(this.data, this.ua, this.rgxMap);\n }\n switch (this.itemType) {\n case BROWSER:\n this.set(MAJOR, majorize(this.get(VERSION)));\n break;\n case OS:\n if (this.get(NAME) == 'iOS' && this.get(VERSION) == '18.6') {\n // Based on the assumption that iOS version is tightly coupled with Safari version\n var realVersion = /\\) Version\\/([\\d\\.]+)/.exec(this.ua); // Get Safari version\n if (realVersion && parseInt(realVersion[1].substring(0,2), 10) >= 26) {\n this.set(VERSION, realVersion[1]); // Set as iOS version\n }\n }\n break;\n }\n return this;\n };\n\n this.parseCH = function () {\n var uaCH = this.uaCH,\n rgxMap = this.rgxMap;\n \n switch (this.itemType) {\n case BROWSER:\n case ENGINE:\n var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;\n if (brands) {\n for (var i=0; i<brands.length; i++) {\n var brandName = brands[i].brand || brands[i],\n brandVersion = brands[i].version;\n if (this.itemType == BROWSER && \n !/not.a.brand/i.test(brandName) && \n (!prevName || \n (/Chrom/.test(prevName) && brandName != CHROMIUM) || \n (prevName == EDGE && /WebView2/.test(brandName))\n )) {\n brandName = strMapper(brandName, browserHintsMap);\n prevName = this.get(NAME);\n if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {\n this.set(NAME, brandName)\n .set(VERSION, brandVersion)\n .set(MAJOR, majorize(brandVersion));\n }\n prevName = brandName;\n }\n if (this.itemType == ENGINE && brandName == CHROMIUM) {\n this.set(VERSION, brandVersion);\n }\n }\n }\n break;\n case CPU:\n var archName = uaCH[ARCHITECTURE];\n if (archName) {\n if (archName && uaCH[BITNESS] == '64') archName += '64';\n rgxMapper.call(this.data, archName + ';', rgxMap);\n }\n break;\n case DEVICE:\n if (uaCH[MOBILE]) {\n this.set(TYPE, MOBILE);\n }\n if (uaCH[MODEL]) {\n this.set(MODEL, uaCH[MODEL]);\n if (!this.get(TYPE) || !this.get(VENDOR)) {\n var reParse = {};\n rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);\n if (!this.get(TYPE) && !!reParse.type) {\n this.set(TYPE, reParse.type);\n }\n if (!this.get(VENDOR) && !!reParse.vendor) {\n this.set(VENDOR, reParse.vendor);\n }\n }\n }\n if (uaCH[FORMFACTORS]) {\n var ff;\n if (typeof uaCH[FORMFACTORS] !== 'string') {\n var idx = 0;\n while (!ff && idx < uaCH[FORMFACTORS].length) {\n ff = strMapper(uaCH[FORMFACTORS][idx++], formFactorsMap);\n }\n } else {\n ff = strMapper(uaCH[FORMFACTORS], formFactorsMap);\n }\n this.set(TYPE, ff);\n }\n break;\n case OS:\n var osName = uaCH[PLATFORM];\n if(osName) {\n var osVersion = uaCH[PLATFORMVER];\n if (osName == WINDOWS) osVersion = (parseInt(majorize(osVersion), 10) >= 13 ? '11' : '10');\n this.set(NAME, osName)\n .set(VERSION, osVersion);\n }\n // Xbox-Specific Detection\n if (this.get(NAME) == WINDOWS && uaCH[MODEL] == 'Xbox') {\n this.set(NAME, 'Xbox')\n .set(VERSION, undefined);\n } \n break;\n case RESULT:\n var data = this.data;\n var parse = function (itemType) {\n return data[itemType]\n .getItem()\n .setCH(uaCH)\n .parseCH()\n .get();\n };\n this.set(BROWSER, parse(BROWSER))\n .set(CPU, parse(CPU))\n .set(DEVICE, parse(DEVICE))\n .set(ENGINE, parse(ENGINE))\n .set(OS, parse(OS));\n }\n return this;\n };\n\n setProps.call(this, [\n ['itemType', itemType],\n ['ua', ua],\n ['uaCH', uaCH],\n ['rgxMap', rgxMap],\n ['data', createIData(this, itemType)]\n ]);\n\n return this;\n }\n\n function UAParser (ua, extensions, headers) {\n\n if (typeof ua === TYPEOF.OBJECT) {\n if (isExtensions(ua, true)) {\n if (typeof extensions === TYPEOF.OBJECT) {\n headers = extensions; // case UAParser(extensions, headers) \n }\n extensions = ua; // case UAParser(extensions)\n } else {\n headers = ua; // case UAParser(headers)\n extensions = undefined;\n }\n ua = undefined;\n } else if (typeof ua === TYPEOF.STRING && !isExtensions(extensions, true)) {\n headers = extensions; // case UAParser(ua, headers)\n extensions = undefined;\n }\n\n if (headers) {\n if (typeof headers.append === TYPEOF.FUNCTION) {\n // Convert Headers object into a plain object\n var kv = {};\n headers.forEach(function (v, k) { kv[String(k).toLowerCase()] = v; });\n headers = kv;\n } else {\n // Normalize headers field name into lowercase\n var normalized = {};\n for (var header in headers) {\n if (headers.hasOwnProperty(header)) {\n normalized[String(header).toLowerCase()] = headers[header];\n }\n }\n headers = normalized;\n }\n }\n \n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions, headers).getResult();\n }\n\n var userAgent = typeof ua === TYPEOF.STRING ? ua : // Passed user-agent string\n (headers && headers[USER_AGENT] ? headers[USER_AGENT] : // User-Agent from passed headers\n ((NAVIGATOR && NAVIGATOR.userAgent) ? NAVIGATOR.userAgent : // navigator.userAgent\n EMPTY)), // empty string\n\n httpUACH = new UACHData(headers, true),\n regexMap = extensions ? \n extend(defaultRegexes, extensions) : \n defaultRegexes,\n\n createItemFunc = function (itemType) {\n if (itemType == RESULT) {\n return function () {\n return new UAItem(itemType, userAgent, regexMap, httpUACH)\n .set('ua', userAgent)\n .set(BROWSER, this.getBrowser())\n .set(CPU, this.getCPU())\n .set(DEVICE, this.getDevice())\n .set(ENGINE, this.getEngine())\n .set(OS, this.getOS())\n .get();\n };\n } else {\n return function () {\n return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH)\n .parseUA()\n .get();\n };\n }\n };\n \n // public methods\n setProps.call(this, [\n ['getBrowser', createItemFunc(BROWSER)],\n ['getCPU', createItemFunc(CPU)],\n ['getDevice', createItemFunc(DEVICE)],\n ['getEngine', createItemFunc(ENGINE)],\n ['getOS', createItemFunc(OS)],\n ['getResult', createItemFunc(RESULT)],\n ['getUA', function () { return userAgent; }],\n ['setUA', function (ua) {\n if (isString(ua)) userAgent = trim(ua, UA_MAX_LENGTH);\n return this;\n }]\n ])\n .setUA(userAgent);\n\n return this;\n }\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR, TYPE]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n export {UAParser};","// Generated ESM version of ua-parser-js/enums\n// DO NOT EDIT THIS FILE!\n// Source: /src/enums/ua-parser-enums.js\n\n///////////////////////////////////////////////\n/* Enums for UAParser.js v2.0.6\n https://github.com/faisalman/ua-parser-js\n Author: Faisal Salman <f@faisalman.com>\n AGPLv3 License */\n//////////////////////////////////////////////\n\n/*jshint esversion: 6 */ \n\nconst BrowserName = Object.freeze({\n '115': '115',\n '2345': '2345',\n '360': '360',\n ALIPAY: 'Alipay',\n AMAYA: 'Amaya',\n ANDROID: 'Android Browser',\n ARORA: 'Arora',\n AVANT: 'Avant',\n AVAST: 'Avast Secure Browser',\n AVG: 'AVG Secure Browser',\n BAIDU: 'Baidu Browser',\n BASILISK: 'Basilisk',\n BING: 'Bing',\n BLAZER: 'Blazer',\n BOLT: 'Bolt',\n BOWSER: 'Bowser',\n BRAVE: 'Brave',\n CAMINO: 'Camino',\n CHIMERA: 'Chimera',\n CHROME: 'Chrome',\n CHROME_HEADLESS: 'Chrome Headless',\n CHROME_MOBILE: 'Mobile Chrome',\n CHROME_WEBVIEW: 'Chrome WebView',\n CHROMIUM: 'Chromium',\n COBALT: 'Cobalt',\n COC_COC: 'Coc Coc',\n CONKEROR: 'Conkeror',\n DAUM: 'Daum',\n DILLO: 'Dillo',\n DOLPHIN: 'Dolphin',\n DOOBLE: 'Dooble',\n DORIS: 'Doris',\n DRAGON: 'Dragon',\n DUCKDUCKGO: 'DuckDuckGo',\n ECOSIA: 'Ecosia',\n EDGE: 'Edge',\n EDGE_WEBVIEW: 'Edge WebView',\n EDGE_WEBVIEW2: 'Edge WebView2',\n EPIPHANY: 'Epiphany',\n FACEBOOK: 'Facebook',\n FALKON: 'Falkon',\n FIREBIRD: 'Firebird',\n FIREFOX: 'Firefox',\n FIREFOX_FOCUS: 'Firefox Focus',\n FIREFOX_MOBILE: 'Mobile Firefox',\n FIREFOX_REALITY: 'Firefox Reality',\n FENNEC: 'Fennec',\n FLOCK: 'Flock',\n FLOW: 'Flow',\n GO: 'GoBrowser',\n GOOGLE_SEARCH: 'GSA',\n HELIO: 'Helio',\n HEYTAP: 'HeyTap',\n HONOR: 'Honor',\n HUAWEI: 'Huawei Browser',\n ICAB: 'iCab',\n ICE: 'ICE Browser',\n ICEAPE: 'IceApe',\n ICECAT: 'IceCat',\n ICEDRAGON: 'IceDragon',\n ICEWEASEL: 'IceWeasel',\n IE: 'IE',\n INSTAGRAM: 'Instagram',\n IRIDIUM: 'Iridium',\n IRON: 'Iron',\n JASMINE: 'Jasmine',\n KONQUEROR: 'Konqueror',\n KAKAO: 'KakaoTalk',\n KHTML: 'KHTML',\n K_MELEON: 'K-Meleon',\n KLAR: 'Klar',\n KLARNA: 'Klarna',\n KINDLE: 'Kindle',\n LENOVO: 'Smart Lenovo Browser',\n LADYBIRD: 'Ladybird',\n LG: 'LG Browser',\n LIBREWOLF: 'LibreWolf',\n LIEBAO: 'LBBROWSER',\n LINE: 'Line',\n LINKEDIN: 'LinkedIn',\n LINKS: 'Links',\n LUNASCAPE: 'Lunascape',\n LYNX: 'Lynx',\n MAEMO: 'Maemo Browser',\n MAXTHON: 'Maxthon',\n MIDORI: 'Midori',\n MINIMO: 'Minimo',\n MIUI: 'MIUI Browser',\n MOZILLA: 'Mozilla',\n MOSAIC: 'Mosaic',\n NAVER: 'Naver',\n NETFRONT: 'NetFront',\n NETSCAPE: 'Netscape',\n NETSURF: 'Netsurf',\n NOKIA: 'Nokia Browser',\n OBIGO: 'Obigo',\n OCULUS: 'Oculus Browser',\n OMNIWEB: 'OmniWeb',\n OPERA: 'Opera',\n OPERA_COAST: 'Opera Coast',\n OPERA_GX: 'Opera GX',\n OPERA_MINI: 'Opera Mini',\n OPERA_MOBI: 'Opera Mobi',\n OPERA_TABLET: 'Opera Tablet',\n OPERA_TOUCH: 'Opera Touch',\n OTTER: 'Otter',\n OVI: 'OviBrowser',\n PALEMOON: 'PaleMoon',\n PHANTOMJS: 'PhantomJS',\n PHOENIX: 'Phoenix',\n PICOBROWSER: 'Pico Browser',\n POLARIS: 'Polaris',\n PUFFIN: 'Puffin',\n QQ: 'QQBrowser',\n QQ_LITE: 'QQBrowserLite',\n QUARK: 'Quark',\n QUPZILLA: 'QupZilla',\n QUTEBROWSER: 'qutebrowser',\n QWANT: 'Qwant',\n REKONQ: 'rekonq',\n ROCKMELT: 'Rockmelt',\n SAFARI: 'Safari',\n SAFARI_MOBILE: 'Mobile Safari',\n SAILFISH: 'Sailfish Browser',\n SAMSUNG: 'Samsung Internet',\n SEAMONKEY: 'SeaMonkey',\n SILK: 'Silk',\n SKYFIRE: 'Skyfire',\n SLEIPNIR: 'Sleipnir',\n SLIMBOAT: 'SlimBoat',\n SLIMBROWSER: 'SlimBrowser',\n SLIMJET: 'Slimjet',\n SNAPCHAT: 'Snapchat',\n SOGOU_EXPLORER: 'Sogou Explorer',\n SOGOU_MOBILE: 'Sogou Mobile',\n SURF: 'Surf',\n SWIFTFOX: 'Swiftfox',\n TESLA: 'Tesla',\n TIKTOK: 'TikTok',\n TIZEN: 'Tizen Browser',\n TWITTER: 'Twitter',\n UC: 'UCBrowser',\n UP: 'UP.Browser',\n VIVALDI: 'Vivaldi',\n VIVO: 'Vivo Browser',\n W3M: 'w3m',\n WATERFOX: 'Waterfox',\n WEBKIT: 'WebKit',\n WECHAT: 'WeChat',\n WEIBO: 'Weibo',\n WHALE: 'Whale',\n WOLVIC: 'Wolvic',\n YANDEX: 'Yandex',\n ZALO: 'Zalo'\n\n // TODO : test!\n});\n/**\n * @deprecated Use `BrowserName` instead\n */\nconst Browser = BrowserName;\n\nconst BrowserType = Object.freeze({\n CRAWLER: 'crawler',\n CLI: 'cli',\n EMAIL: 'email',\n FETCHER: 'fetcher',\n INAPP: 'inapp',\n MEDIAPLAYER: 'mediaplayer',\n LIBRARY: 'library'\n});\n\nconst CPUArch = Object.freeze({\n '68K': '68k',\n ALPHA: 'alpha',\n ARM : 'arm',\n ARM_64: 'arm64',\n ARM_HF: 'armhf',\n AVR: 'avr',\n AVR_32: 'avr32',\n IA64: 'ia64',\n IRIX: 'irix',\n IRIX_64: 'irix64',\n MIPS: 'mips',\n MIPS_64: 'mips64',\n PA_RISC: 'pa-risc',\n PPC: 'ppc',\n SPARC: 'sparc',\n SPARC_64: 'sparc64',\n X86: 'ia32',\n X86_64: 'amd64'\n});\n/**\n * @deprecated Use `CPUArch` instead\n */\nconst CPU = CPUArch;\n\nconst DeviceType = Object.freeze({\n CONSOLE: 'console',\n DESKTOP: 'desktop',\n EMBEDDED: 'embedded',\n MOBILE: 'mobile',\n SMARTTV: 'smarttv',\n TABLET: 'tablet',\n WEARABLE: 'wearable',\n XR: 'xr'\n});\n/**\n * @deprecated Use `DeviceType` instead\n */\nconst Device = DeviceType;\n\nconst DeviceVendor = Object.freeze({\n ACER: 'Acer',\n ADVAN: 'Advan',\n ALCATEL: 'Alcatel',\n APPLE: 'Apple',\n AMAZON: 'Amazon',\n ARCHOS: 'Archos',\n ASUS: 'ASUS',\n ATT: 'AT&T',\n BENQ: 'BenQ',\n BLACKBERRY: 'BlackBerry',\n BLU: 'BLU',\n CAT: 'Cat',\n DELL: 'Dell',\n ENERGIZER: 'Energizer',\n ESSENTIAL: 'Essential',\n FACEBOOK: 'Facebook',\n FAIRPHONE: 'Fairphone',\n GEEKSPHONE: 'GeeksPhone',\n GENERIC: 'Generic',\n GOOGLE: 'Google',\n HISENSE: 'Hisense',\n HMD: 'HMD',\n HP: 'HP',\n HTC: 'HTC',\n HUAWEI: 'Huawei',\n IMO: 'IMO',\n INFINIX: 'Infinix',\n ITEL: 'itel',\n JOLLA: 'Jolla',\n KOBO: 'Kobo',\n LAVA: 'Lava',\n LENOVO: 'Lenovo',\n LG: 'LG',\n MEIZU: 'Meizu',\n MICROMAX: 'Micromax',\n MICROSOFT: 'Microsoft',\n MOTOROLA: 'Motorola',\n NEXIAN: 'Nexian',\n NINTENDO: 'Nintendo',\n NOKIA: 'Nokia',\n NOTHING: 'Nothing',\n NVIDIA: 'Nvidia',\n ONEPLUS: 'OnePlus',\n OPPO: 'OPPO',\n OUYA: 'Ouya',\n PALM: 'Palm',\n PANASONIC: 'Panasonic',\n PEBBLE: 'Pebble',\n PHILIPS: 'Philips',\n PICO: 'Pico',\n POLYTRON: 'Polytron',\n REALME: 'Realme',\n RETROID: 'Retroid',\n RIM: 'RIM',\n ROKU: 'Roku',\n SAMSUNG: 'Samsung',\n SHARP: 'Sharp',\n SIEMENS: 'Siemens',\n SMARTFREN: 'Smartfren',\n SONY: 'Sony',\n SPRINT: 'Sprint',\n TCL: 'TCL',\n TECHNISAT: 'TechniSAT',\n TECNO: 'TECNO',\n TESLA: 'Tesla',\n ULEFONE: 'Ulefone',\n VIVO: 'Vivo',\n VIZIO: 'Vizio',\n VODAFONE: 'Vodafone',\n WIKO: 'Wiko',\n XBOX: 'Xbox',\n XIAOMI: 'Xiaomi',\n ZEBRA: 'Zebra',\n ZTE: 'ZTE',\n\n // TODO : test!\n});\n/**\n * @deprecated Use `DeviceVendor` instead\n */\nconst Vendor = DeviceVendor;\n\nconst EngineName = Object.freeze({\n AMAYA: 'Amaya',\n ARKWEB: 'ArkWeb',\n BLINK: 'Blink',\n EDGEHTML: 'EdgeHTML',\n FLOW: 'Flow',\n GECKO: 'Gecko',\n GOANNA: 'Goanna',\n ICAB: 'iCab',\n KHTML: 'KHTML',\n LIBWEB: 'LibWeb',\n LINKS: 'Links',\n LYNX: 'Lynx',\n NETFRONT: 'NetFront',\n NETSURF: 'NetSurf',\n PRESTO: 'Presto',\n SERVO: 'Servo',\n TASMAN: 'Tasman',\n TRIDENT: 'Trident',\n W3M: 'w3m',\n WEBKIT: 'WebKit'\n});\n/**\n * @deprecated Use `EngineName` instead\n */\nconst Engine = EngineName;\n\nconst OSName = Object.freeze({\n AIX: 'AIX',\n AMIGA_OS: 'Amiga OS',\n ANDROID: 'Android',\n ANDROID_X86: 'Android-x86',\n ARCAOS: 'ArcaOS',\n ARCH: 'Arch',\n BADA: 'Bada',\n BEOS: 'BeOS',\n BLACKBERRY: 'BlackBerry',\n CENTOS: 'CentOS',\n CHROME_OS: 'Chrome OS',\n CHROMECAST: 'Chromecast',\n CHROMECAST_ANDROID: 'Chromecast Android',\n CHROMECAST_FUCHSIA: 'Chromecast Fuchsia',\n CHROMECAST_LINUX: 'Chromecast Linux',\n CHROMECAST_SMARTSPEAKER: 'Chromecast SmartSpeaker',\n CONTIKI: 'Contiki',\n DEBIAN: 'Debian',\n DEEPIN: 'Deepin',\n DRAGONFLY: 'DragonFly',\n ELEMENTARY_OS: 'elementary OS',\n FEDORA: 'Fedora',\n FIREFOX_OS: 'Firefox OS',\n FREEBSD: 'FreeBSD',\n FUCHSIA: 'Fuchsia',\n GENTOO: 'Gentoo',\n GHOSTBSD: 'GhostBSD',\n GNU: 'GNU',\n HAIKU: 'Haiku',\n HARMONYOS: 'HarmonyOS',\n HP_UX: 'HP-UX',\n HURD: 'Hurd',\n IOS: 'iOS',\n JOLI: 'Joli',\n KAIOS: 'KaiOS',\n KNOPPIX: 'Knoppix',\n KUBUNTU: 'Kubuntu',\n LINPUS: 'Linpus',\n LINSPIRE: 'Linspire',\n LINUX: 'Linux',\n MACOS: 'macOS',\n MAEMO: 'Maemo',\n MAGEIA: 'Mageia',\n MANDRIVA: 'Mandriva',\n MANJARO: 'Manjaro',\n MEEGO: 'MeeGo',\n MINIX: 'Minix',\n MINT: 'Mint',\n MORPH_OS: 'Morph OS',\n NETBSD: 'NetBSD',\n NETRANGE: 'NetRange',\n NETTV: 'NetTV',\n NINTENDO: 'Nintendo',\n OPENHARMONY: 'OpenHarmony',\n OPENBSD: 'OpenBSD',\n OPENVMS: 'OpenVMS',\n OS2: 'OS/2',\n PALM: 'Palm',\n PC_BSD: 'PC-BSD',\n PCLINUXOS: 'PCLinuxOS',\n PICO: 'Pico',\n PLAN9: 'Plan9',\n PLAYSTATION: 'PlayStation',\n QNX: 'QNX',\n RASPBIAN: 'Raspbian',\n REDHAT: 'RedHat',\n RIM_TABLET_OS: 'RIM Tablet OS',\n RISC_OS: 'RISC OS',\n SABAYON: 'Sabayon',\n SAILFISH: 'Sailfish',\n SERENITYOS: 'SerenityOS',\n SERIES40: 'Series40',\n SLACKWARE: 'Slackware',\n SOLARIS: 'Solaris',\n SUSE: 'SUSE',\n SYMBIAN: 'Symbian',\n TIZEN: 'Tizen',\n UBUNTU: 'Ubuntu',\n UBUNTU_TOUCH: 'Ubuntu Touch',\n UNIX: 'Unix',\n VECTORLINUX: 'VectorLinux',\n WATCHOS: 'watchOS',\n WEBOS: 'WebOS',\n WINDOWS: 'Windows',\n WINDOWS_CE: 'Windows CE',\n WINDOWS_IOT: 'Windows IoT',\n WINDOWS_MOBILE: 'Windows Mobile',\n WINDOWS_PHONE: 'Windows Phone',\n WINDOWS_RT: 'Windows RT',\n XBOX: 'Xbox',\n XUBUNTU: 'Xubuntu',\n ZENWALK: 'Zenwalk'\n\n // TODO : test!\n});\n/**\n * @deprecated Use `OSName` instead\n */\nconst OS = OSName;\n\n/*////////////////////////////////\n * Enums for Extensions submodule\n *///////////////////////////////\n\nconst Extension = Object.freeze({\n BrowserName: {\n CLI: {\n CURL: 'curl',\n ELINKS: 'ELinks',\n HTTPIE: 'HTTPie',\n LYNX: 'Lynx',\n WGET: 'Wget'\n },\n Crawler: {\n AHREFS_BOT: 'AhrefsBot',\n AI2_BOT: 'AI2Bot',\n AIHIT_BOT: 'aiHitBot',\n ALGOLIA_CRAWLER: 'Algolia Crawler',\n APPLE_BOT: 'Applebot',\n APPLE_BOT_EXTENDED: 'Applebot-Extended',\n ASK_TEOMA: 'Teoma',\n AMAZON_BOT: 'Amazonbot',\n AMAZON_CONTXBOT: 'contxbot',\n ANTHROPIC_AI: 'anthropic-ai',\n ANTHROPIC_CLAUDE_BOT: 'ClaudeBot',\n ANTHROPIC_CLAUDE_SEARCHBOT: 'Claude-SearchBot',\n ANTHROPIC_CLAUDE_WEB: 'Claude-Web',\n ARCHIVEORG_BOT: 'archive.org_bot',\n BAIDU_ADS: 'Baidu-ADS',\n BAIDU_SPIDER: 'Baiduspider',\n BAIDU_SPIDER_ADS: 'Baiduspider-ads',\n BAIDU_SPIDER_CPRO: 'Baiduspider-cpro',\n BAIDU_SPIDER_FAVO: 'Baiduspider-favo',\n BAIDU_SPIDER_IMAGE: 'Baiduspider-image',\n BAIDU_SPIDER_NEWS: 'Baiduspider-news',\n BAIDU_SPIDER_RENDER: 'Baiduspider-render',\n BAIDU_SPIDER_VIDEO: 'Baiduspider-video',\n BLEX_BOT: 'BLEXBot',\n BOTIFY: 'botify',\n BRAVE_BOT: 'Bravebot',\n BYTEDANCE_BYTESPIDER: 'Bytespider',\n BYTEDANCE_TIKTOKSPIDER: 'TikTokSpider',\n COMMON_CRAWL_CCBOT: 'CCBot',\n COCCOC_BOT_WEB: 'coccocbot-web',\n COCCOC_BOT_IMAGE: 'coccocbot-image',\n COHERE_TRAINING_DATA_CRAWLER: 'cohere-training-data-crawler',\n COTOYOGI: 'Cotoyogi',\n COVEO_BOT: 'Coveobot',\n CRITEO_BOT: 'CriteoBot',\n DATAFORSEO_BOT: 'DataForSeoBot',\n DAUM: 'Daum',\n DAUM_DAUMOA: 'Daumoa',\n DAUM_DAUMOA_IMAGE: 'Daumoa-image',\n DEEPSEEK_BOT: 'DeepSeekBot',\n DIFFBOT: 'Diffbot',\n DUCKDUCKGO_BOT: 'DuckDuckBot',\n DUCKDUCKGO_FAVICONS_BOT: 'DuckDuckGo-Favicons-Bot',\n ELASTIC: 'Elastic',\n ELASTIC_SWIFTYPE_BOT: 'Swiftbot',\n EXALEAD_EXABOT: 'Exabot',\n FIRECRAWL_AGENT: 'FirecrawlAgent',\n FREESPOKE: 'Freespoke',\n GOOGLE_ADSBOT: 'AdsBot-Google',\n GOOGLE_ADSBOT_MOBILE: 'Adsbot-Google-Mobile',\n GOOGLE_ADSENSE: 'AdSense',\n GOOGLE_APIS: 'APIs-Google',\n GOOGLE_BOT: 'Googlebot',\n GOOGLE_BOT_IMAGE: 'Googlebot-Image',\n GOOGLE_BOT_NEWS: 'Googlebot-News',\n GOOGLE_BOT_VIDEO: 'Googlebot-Video',\n GOOGLE_CLOUDVERTEXBOT: 'Google-CloudVertexBot',\n GOOGLE_EXTENDED: 'Google-Extended',\n GOOGLE_INSPECTIONTOOL: 'Google-InspectionTool',\n GOOGLE_OTHER: 'GoogleOther',\n GOOGLE_OTHER_IMAGE: 'GoogleOther-Image',\n GOOGLE_OTHER_VIDEO: 'GoogleOther-Video',\n GOOGLE_SAFETY: 'Google-Safety',\n GOOGLE_STOREBOT: 'Storebot-Google',\n HIVE_IMAGESIFTBOT: 'ImagesiftBot',\n HUAWEI_PANGUBOT: 'PanguBot',\n HUAWEI_PETALBOT: 'PetalBot',\n HUGGINGFACE_BOT: 'HuggingFace-Bot',\n HUNTER_VELENPUBLICWEBCRAWLER: 'VelenPublicWebCrawler',\n IA_ARCHIVER: 'ia_archiver',\n IASK_BOT: 'iAskBot',\n KAGI_BOT: 'Kagibot',\n KANGAROO_BOT: 'Kangaroo Bot',\n LINE_SPIDER: 'Linespider',\n LINKEDIN_BOT: 'LinkedInBot',\n MAGPIE_CRAWLER: 'magpie-crawler',\n MARGINALIA: 'marginalia',\n META_EXTERNALAGENT: 'meta-externalagent',\n META_FACEBOOKBOT: 'FacebookBot',\n META_FACEBOOKCATALOG: 'facebookcatalog',\n META_FACEBOOKEXTERNALHIT: 'facebookexternalhit',\n MAJESTIC_MJ12BOT: 'MJ12bot',\n MICROSOFT_BINGBOT: 'Bingbot',\n MICROSOFT_MSNBOT: 'msnbot',\n MICROSOFT_ADIDXBOT: 'adidxbot',\n MOJEEK_BOT: 'MojeekBot',\n MOZ_DOTBOT: 'DotBot',\n ONCRAWL: 'OnCrawl',\n ONESPOT_SCRAPERBOT: 'Onespot-ScraperBot',\n OPENAI_GPTBOT: 'GPTBot',\n OPENAI_SEARCH_BOT: 'OAI-SearchBot',\n PERPLEXITY_BOT: 'PerplexityBot',\n QIHOO_360_SPIDER: '360Spider',\n QWANT_BOT: 'Qwantbot',\n QWANT_BOT_NEWS: 'Qwantbot-news',\n REPLICATE_BOT: 'Replicate-Bot',\n RUNPOD_BOT: 'RunPod-Bot',\n SB_INTUITIONS_BOT: 'SBIntuitionsBot',\n SEEKPORT_BOT: 'SeekportBot',\n SEMRUSH_BOT: 'SemrushBot',\n SEMRUSH_BOT_BACKLINK: 'SemrushBot-BA',\n SEMRUSH_BOT_CONTENTSHAKE: 'SemrushBot-OCOB',\n SEMRUSH_BOT_SEO_CHECKER: 'SemrushBot-SI',\n SEZNAM_BOT: 'SeznamBot',\n SITEIMPROVE: 'Siteimprove',\n SOGOU_PIC_SPIDER: 'Sogou Pic Spider',\n SOGOU_WEB_SPIDER: 'Sogou web spider',\n STARTPAGE: 'Startpage',\n SURLY_BOT: 'SurdotlyBot',\n TIMPI_BOT: 'Timpibot',\n TOGETHER_BOT: 'Together-Bot',\n TURNITIN_BOT: 'TurnitinBot',\n TWIN_AGENT: 'TwinAgent',\n VERCEL_V0BOT: 'v0bot',\n WEBZIO: 'webzio',\n WEBZIO_EXTENDED: 'Webzio-Extended',\n WEBZIO_OMGILI: 'omgili',\n WEBZIO_OMGILI_BOT: 'omgilibot',\n XAI_BOT: 'xAI-Bot',\n YAHOO_JAPAN: 'Y!J-BRW',\n YAHOO_SLURP: 'Yahoo! Slurp',\n YANDEX_ACCESSIBILITY_BOT: 'YandexAccessibilityBot',\n YANDEX_ADDITIONAL_BOT: 'YandexAdditionalBot',\n YANDEX_ADNET: 'YandexAdNet',\n YANDEX_BLOGS: 'YandexBlogs',\n YANDEX_BOT: 'YandexBot',\n YANDEX_BOT_MIRRORDETECTOR: 'YandexBot MirrorDetector',\n YANDEX_COMBOT: 'YandexComBot',\n YANDEX_FAVICONS: 'YandexFavicons',\n YANDEX_IMAGE_RESIZER: 'YandexImageResizer',\n YANDEX_IMAGES: 'YandexImages',\n YANDEX_MARKET: 'YandexMarket',\n YANDEX_MEDIA: 'YandexMedia',\n YANDEX_METRIKA: 'YandexMetrika',\n YANDEX_MOBILE_BOT: 'YandexMobileBot',\n YANDEX_MOBILE_SCREENSHOT_BOT: 'YandexMobileScreenShotBot',\n YANDEX_NEWS: 'YandexNews',\n YANDEX_ONTODB: 'YandexOntoDB',\n YANDEX_ONTODB_API: 'YandexOntoDBAPI',\n YANDEX_PARTNER: 'YandexPartner',\n YANDEX_RCA: 'YandexRCA',\n YANDEX_RENDERRESOURCES_BOT: 'YandexRenderResourcesBot',\n YANDEX_SCREENSHOT_BOT: 'YandexScreenshotBot',\n YANDEX_SPRAV_BOT: 'YandexSpravBot',\n YANDEX_TRACKER: 'YandexTracker',\n YANDEX_VERTICALS: 'YandexVerticals',\n YANDEX_VERTIS: 'YandexVertis',\n YANDEX_VIDEO: 'YandexVideo',\n YANDEX_VIDEO_PARSER: 'YandexVideoParser',\n YANDEX_WEBMASTER: 'YandexWebmaster',\n YEP_BOT: 'YepBot',\n YETI: 'Yeti',\n YISOU_SPIDER: 'YisouSpider',\n YOU_BOT: 'YouBot',\n ZHIPU_CHATGLM_SPIDER: 'ChatGLM-Spider',\n ZUM_BOT: 'ZumBot'\n },\n Email: {\n AIRMAIL: 'Airmail',\n APPLE_MAIL: 'Mail',\n BLUEMAIL: 'BlueMail',\n DAUM_MAIL: 'DaumMail',\n EVOLUTION: 'Evolution',\n EM_CLIENT: 'eM Client',\n FOXMAIL: 'Foxmail',\n KMAIL: 'KMail',\n KMAIL2: 'kmail2',\n KONTACT: 'Kontact',\n MICROSOFT_OUTLOOK: 'Microsoft Outlook',\n MICROSOFT_OUTLOOK_MAC: 'MacOutlook',\n NAVER_MAILAPP: 'NaverMailApp',\n POLYMAIL: 'Polymail',\n PROTON_MAIL: 'ProtonMail',\n SPARK_MAIL: 'SparkDesktop',\n SPARROW: 'Sparrow',\n THUNDERBIRD: 'Thunderbird',\n YAHOO_MAIL: 'Yahoo',\n ZIMBRA: 'Zimbra',\n ZOHO_MAIL: 'ZohoMail-Desktop'\n },\n Fetcher: {\n AHREFS_SITEAUDIT: 'AhrefsSiteAudit',\n ANTHROPIC_CLAUDE_USER: 'Claude-User',\n ASANA: 'Asana',\n BETTER_UPTIME_BOT: 'Better Uptime Bot',\n BITLY_BOT: 'bitlybot',\n BLUESKY: 'Bluesky',\n BUFFER_LINKPREVIEWBOT: 'BufferLinkPreviewBot',\n COHERE_AI: 'Cohere-AI',\n DISCORD_BOT: 'Discordbot',\n DUCKDUCKGO_ASSISTBOT: 'DuckAssistBot',\n GOOGLE_CHROME_LIGHTHOUSE: 'Chrome-Lighthouse',\n GOOGLE_FEEDFETCHER: 'FeedFetcher-Google',\n GOOGLE_GEMINI_DEEP_RESEARCH: 'Gemini-Deep-Research',\n GOOGLE_IMAGEPROXY: 'GoogleImageProxy',\n GOOGLE_PAGERENDERER: 'Google-PageRenderer',\n GOOGLE_READ_ALOUD: 'Google-Read-Aloud',\n GOOGLE_PRODUCER: 'GoogleProducer',\n GOOGLE_SITE_VERIFICATION: 'Google-Site-Verification',\n HUBSPOT_PAGE_FETCHER: 'HubSpot Page Fetcher',\n IFRAMELY: 'Iframely',\n KAKAOTALK_SCRAP: 'kakaotalk-scrap',\n KEYBASE_BOT: 'KeybaseBot',\n META_EXTERNALFETCHER: 'meta-externalfetcher',\n META_WHATSAPP: 'WhatsApp',\n MICROSOFT_BINGPREVIEW: 'BingPreview',\n MICROSOFT_PREVIEW: 'MicrosoftPreview',\n MISTRALAI_USER: 'MistralAI-User',\n NAVER_BLUENO: 'Blueno',\n ONCRAWL_ROGERBOT: 'rogerbot',\n OPENAI_CHATGPT_USER: 'ChatGPT-User',\n PERPLEXITY_USER: 'Perplexity-User',\n PINTEREST_BOT: 'Pinterestbot',\n SEMRUSH_SITEAUDITBOT: 'SiteAuditBot',\n SLACK_BOT: 'Slackbot',\n SLACK_BOT_LINKEXPANDING: 'Slackbot-LinkExpanding',\n SLACK_IMGPROXY: 'Slack-ImgProxy',\n SNAP_URL_PREVIEW: 'Snap URL Preview',\n SKYPE_URIPREVIEW: 'SkypeUriPreview',\n TELEGRAM_BOT: 'TelegramBot',\n UPTIMEROBOT: 'UptimeRobot',\n VERCEL_FAVICON_BOT: 'vercel-favicon-bot',\n VERCEL_SCREENSHOT_BOT: 'vercel-screenshot-bot',\n VERCEL_BOT: 'Vercelbot',\n VERCEL_FLAGS: 'vercelflags',\n VERCEL_TRACING: 'verceltracing',\n X_TWITTERBOT: 'Twitterbot',\n YANDEX_CALENDAR: 'YandexCalendar',\n YANDEX_DIRECT: 'YandexDirect',\n YANDEX_DIRECTDYN: 'YandexDirectDyn',\n YANDEX_DIRECTFETCHER: 'YaDirectFetcher',\n YANDEX_FORDOMAIN: 'YandexForDomain',\n YANDEX_PAGECHECKER: 'YandexPagechecker',\n YANDEX_SEARCHSHOP: 'YandexSearchShop',\n YANDEX_SITELINKS: 'YandexSitelinks',\n YANDEX_USERPROXY: 'YandexUserproxy',\n ZOOMINFO_BOT: 'Zoombot'\n },\n InApp: {\n DISCORD: 'Discord',\n EVERNOTE: 'Evernote',\n FIGMA: 'Figma',\n FLIPBOARD: 'Flipboard',\n MATTERMOST: 'Mattermost',\n TEAMS: 'Teams',\n NOTION: 'Notion',\n POSTMAN: 'Postman',\n RAMBOX: 'Rambox',\n ROCKETCHAT: 'Rocket.Chat',\n SLACK: 'Slack',\n TIKTOK_LITE: 'TikTok Lite',\n VSCODE: 'VS Code',\n YAHOO_JAPAN: 'Yahoo! Japan'\n },\n Library: {\n ADOBE_AIR: 'AdobeAIR',\n AIOHTTP: 'aiohttp',\n APACHE_HTTPCLIENT: 'Apache-HttpClient',\n AXIOS: 'axios',\n GO_HTTP_CLIENT: 'go-http-client',\n GOT: 'got',\n GUZZLEHTTP: 'GuzzleHttp',\n JAVA: 'Java',\n JAVA_HTTPCLIENT: 'Java-http-client',\n JSDOM: 'jsdom',\n LIBWWW_PERL: 'libwww-perl',\n LUA_RESTY_HTTP: 'lua-resty-http',\n NEEDLE: 'Needle',\n NUTCH: 'Nutch',\n OKHTTP: 'OkHttp',\n NODE_FETCH: 'node-fetch',\n NODE_SUPERAGENT: 'node-superagent',\n PHP_SOAP: 'PHP-SOAP',\n POSTMAN_RUNTIME: 'PostmanRuntime',\n PYTHON_HTTPX: 'python-httpx',\n PYTHON_URLLIB: 'python-urllib',\n PYTHON_URLLIB3: 'python-urllib3',\n PYTHON_REQUESTS: 'python-requests',\n SCRAPY: 'Scrapy'\n }\n },\n DeviceVendor: {\n Vehicle: {\n BMW: 'BMW',\n BYD: 'BYD',\n JEEP: 'Jeep',\n RIVIAN: 'Rivian',\n TESLA: 'Tesla',\n VOLVO: 'Volvo'\n }\n }\n});\n\nexport { \n Browser,// deprecated\n CPU, // deprecated\n Device, // deprecated\n Vendor, // deprecated\n Engine, // deprecated\n OS, // deprecated\n BrowserName,\n BrowserType, \n CPUArch,\n DeviceType, \n DeviceVendor,\n EngineName,\n OSName,\n Extension\n};","import { UAParser } from 'ua-parser-js';\nimport { OS } from 'ua-parser-js/enums';\n\nconst ua = UAParser();\nexport const isMac = ua.os.is(OS.MACOS);\n","/**\n * Makes an element programmatically focusable by adding a `tabindex=\"-1\"` attribute.\n * Or does nothing if the element is already focusable 🤷🏻\n * It's required to process keyboard events on an element that is not natively focusable.\n */\nexport const programmaticallyFocusable = (container: HTMLElement) => {\n if (!container.hasAttribute('tabindex') && container.tabIndex < 0) {\n container.setAttribute('tabindex', '-1');\n }\n\n container.classList.add('no-focus-outline');\n};\n","export const getHighlightClientRects = (range: Range) => {\n const textNodes: Text[] = [];\n\n // Get all text nodes inside the range's commonAncestorContainer\n const it = document.createNodeIterator(\n range.commonAncestorContainer, \n NodeFilter.SHOW_TEXT);\n\n /*\n Filter text nodes that intersect the range. Note that we could\n also include this filter in the node iterator directly.\n But the while loop is faster (!) - possibly due to a function call overhead.\n */\n let currentNode: Text | undefined;\n \n while ((currentNode = it.nextNode() as Text)) {\n if (range.intersectsNode(currentNode)) {\n textNodes.push(currentNode);\n }\n }\n\n if (textNodes.length < 2) {\n // Trivial case: selection is inside a single text node\n // or empty (shouldn't happen!) - no need to create our own ranges.\n return Array.from(range.getClientRects());\n } else {\n const first = textNodes[0];\n const last = textNodes[textNodes.length - 1];\n\n const firstRange = document.createRange();\n firstRange.selectNode(first);\n if (range.startContainer.nodeType === Node.TEXT_NODE) {\n firstRange.setStart(first, range.startOffset);\n } else {\n const childNode = range.startContainer.childNodes[range.startOffset];\n if (childNode) {\n firstRange.setStartBefore(childNode);\n } else {\n firstRange.setStartAfter(range.startContainer);\n }\n }\n\n const lastRange = document.createRange();\n lastRange.selectNode(last);\n if (range.endContainer.nodeType === Node.TEXT_NODE) {\n lastRange.setEnd(last, range.endOffset);\n } else {\n const childNode = range.endContainer.childNodes[range.endOffset];\n if (childNode)\n lastRange.setEndBefore(childNode);\n else \n lastRange.setEndAfter(range.endContainer);\n }\n\n // Text nodes have no .getClientRects()!\n const getTextClientRects = (t: Text) => {\n const r = document.createRange();\n r.selectNode(t);\n return Array.from(r.getClientRects());\n }\n\n return [\n ...Array.from(firstRange.getClientRects()),\n ...textNodes.slice(1, -1).flatMap(getTextClientRects),\n ...Array.from(lastRange.getClientRects())\n ];\n }\n}\n","import { isRangeAnnotatable, NOT_ANNOTATABLE_CLASS, NOT_ANNOTATABLE_SELECTOR } from './isNotAnnotatable';\n\nconst iterateNotAnnotatableElements = function*(range: Range): Generator<HTMLElement> {\n const notAnnotatableIterator = document.createNodeIterator(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT,\n (node) =>\n node instanceof HTMLElement // Only elements that can have the class applied\n && node.classList.contains(NOT_ANNOTATABLE_CLASS) // Only elements that are not annotatable\n && !node.parentElement.closest(NOT_ANNOTATABLE_SELECTOR) // Only elements that are not descendants of a not annotatable element\n && range.intersectsNode(node) // Only elements that are within the range\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP\n );\n\n let notAnnotatableNode: Node | null;\n\n while ((notAnnotatableNode = notAnnotatableIterator.nextNode())) {\n if (notAnnotatableNode instanceof HTMLElement) {\n yield notAnnotatableNode;\n }\n }\n}\n\n/**\n * Splits a DOM Range into one or more ranges that span annotatable content only.\n */\nexport const splitAnnotatableRanges = (container: Node, range: Range): Range[] => {\n if (!isRangeAnnotatable(container, range)) return [];\n\n const annotatableRanges: Range[] = [];\n\n let prevNotAnnotatable: HTMLElement | null = null;\n\n for (const notAnnotatable of iterateNotAnnotatableElements(range)) {\n let subRange: Range;\n\n // From the start of the range to the not annotatable element.\n // If selection starts on the non-annotatable element, a collapsed range will be created and ignored.\n if (!prevNotAnnotatable) {\n subRange = range.cloneRange();\n subRange.setEndBefore(notAnnotatable);\n } else {\n // From the previous not annotatable element to the current not annotatable element\n subRange = document.createRange();\n subRange.setStartAfter(prevNotAnnotatable);\n subRange.setEndBefore(notAnnotatable);\n }\n\n if (!subRange.collapsed)\n annotatableRanges.push(subRange);\n\n prevNotAnnotatable = notAnnotatable;\n }\n\n // From the last not annotatable element to the end of the parent range\n if (prevNotAnnotatable) {\n const lastRange = range.cloneRange();\n lastRange.setStartAfter(prevNotAnnotatable);\n if (!lastRange.collapsed) {\n annotatableRanges.push(lastRange);\n }\n }\n\n return annotatableRanges.length > 0 ? annotatableRanges : [range];\n}\n\nexport const getRangeAnnotatableContents = (range: Range): DocumentFragment => {\n const contents = range.cloneContents();\n contents.querySelectorAll(NOT_ANNOTATABLE_SELECTOR).forEach((el) => el.remove());\n return contents;\n}\n","import { getRangeAnnotatableContents } from './splitAnnotatableRanges';\n\nexport const getQuoteContext = (\n range: Range, \n container: HTMLElement, \n length = 10,\n offsetReferenceSelector?: string\n) => {\n const offsetReference: HTMLElement = offsetReferenceSelector\n ? (range.startContainer.parentElement as HTMLElement).closest(offsetReferenceSelector)!\n : container;\n\n const rangeBefore = document.createRange();\n rangeBefore.setStart(offsetReference, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n const before = getRangeAnnotatableContents(rangeBefore).textContent;\n \n const rangeAfter = document.createRange();\n rangeAfter.setStart(range.endContainer, range.endOffset);\n\n if (offsetReference === document.body)\n rangeAfter.setEnd(offsetReference, offsetReference.childNodes.length);\n else\n rangeAfter.setEndAfter(offsetReference);\n\n const after = getRangeAnnotatableContents(rangeAfter).textContent;\n\n return {\n prefix: before.substring(before.length - length),\n suffix: after.substring(0, length)\n }\n}\n","import type { TextSelector } from '../model';\n\nexport const isRevived = (selector: TextSelector[]) =>\n selector.every(s => s.range instanceof Range && !s.range.collapsed);\n","export const whitespaceOrEmptyRegex = /^\\s*$/;\n\nexport const isRangeWhitespaceOrEmpty = (range: Range): boolean => \n whitespaceOrEmptyRegex.test(range.toString())\n\nexport const isNodeWhitespaceOrEmpty = (node: Node): boolean =>\n whitespaceOrEmptyRegex.test(node.textContent || '');\n","// The three topological relations we'll check for\ntype Relation =\n // Inline elements, same height, directly adjacent\n 'inline-adjacent' |\n // Inline elements, A fully contains B\n 'inline-contains' |\n // Inline elements, A is fully contained inside B\n 'inline-is-contained' |\n // At least one block element, A fully contains B\n 'block-contains' |\n // At least one block element, A is fully contained in B\n 'block-is-contained';\n\n// Note that this is not a general topology test. Takes a \n// few shortcuts to test ONLY the situations we'll encounter\n// with text selections.\nconst getRelation = (\n rectA: DOMRect, \n rectB: DOMRect, \n hTolerance: number, \n vTolerance: number\n): Relation | undefined => {\n const round = (num: number) => Math.round(num * 10) / 10;\n\n // Some browsers have fractional pixel differences (looking at you FF!)\n const a = {\n top: round(rectA.top),\n bottom: round(rectA.bottom),\n left: round(rectA.left),\n right: round(rectA.right)\n };\n\n const b = {\n top: round(rectB.top),\n bottom: round(rectB.bottom),\n left: round(rectB.left),\n right: round(rectB.right)\n };\n\n if (Math.abs(a.top - b.top) < vTolerance && Math.abs(a.bottom - b.bottom) < vTolerance) {\n // Same height - check for containment and adjacency\n if (Math.abs(a.left - b.right) < hTolerance || Math.abs(a.right - b.left) < hTolerance)\n return 'inline-adjacent';\n\n if (a.left >= b.left && a.right <= b.right)\n return 'inline-is-contained';\n\n if (a.left <= b.left && a.right >= b.right)\n return 'inline-contains';\n } else {\n // Different heights - check for containment\n if (a.top <= b.top && a.bottom >= b.bottom) {\n if (a.left <= b.left && a.right >= b.right) {\n return 'block-contains';\n }\n } else if (a.top >= b.top && a.bottom <= b.bottom) {\n if (a.left >= b.left && a.right <= b.right) {\n return 'block-is-contained';\n }\n }\n }\n}\n\nconst union = (a: DOMRect, b: DOMRect): DOMRect => {\n const left = Math.min(a.left, b.left);\n const right = Math.max(a.right, b.right);\n const top = Math.min(a.top, b.top);\n const bottom = Math.max(a.bottom, b.bottom);\n\n return new DOMRect(left, top, right - left, bottom - top);\n}\n\nexport const mergeClientRects = (\n rects: DOMRect[], \n hTolerance = 0.5, \n vTolerance = 0.5\n) => rects.reduce<DOMRect[]>((merged, rectA) => {\n // Some browser report empty rects - discard\n if (rectA.width === 0 || rectA.height === 0)\n return merged;\n\n let next = [...merged];\n\n let wasMerged = false;\n\n for (const rectB of merged) {\n const relation = getRelation(rectA, rectB, hTolerance, vTolerance);\n\n if (relation === 'inline-adjacent') {\n // A and B are adjacent - remove B and keep union\n next = next.map(r => r === rectB ? union(rectA, rectB) : r);\n wasMerged = true;\n break;\n } else if (relation === 'inline-contains') {\n // A contains B - remove B and keep A\n next = next.map(r => r === rectB ? rectA : r);\n wasMerged = true;\n break;\n } else if (relation === 'inline-is-contained') {\n // B contains A - skip A\n wasMerged = true;\n break;\n } else if (relation === 'block-contains' || relation === 'block-is-contained') {\n // Block containment - keep the element with a smaller width\n if (rectA.width < rectB.width)\n next = next.map(r => r === rectB ? rectA : r);\n\n // When the width is the same, keep the element with a smaller height\n if (rectA.width === rectB.width && rectA.height < rectB.width)\n next = next.map(r => r === rectB ? rectA : r);\n\n wasMerged = true;\n break;\n }\n }\n\n return wasMerged ? next : [...next, rectA];\n}, []);\n\nexport const toDomRectList = (rects: DOMRect[]): DOMRectList => ({\n length: rects.length,\n item: (index) => rects[index],\n [Symbol.iterator]: function* (): ArrayIterator<DOMRect> {\n for (let i = 0; i < this.length; i++)\n yield this.item(i)!;\n }\n});","export const mergeRanges = (ranges: Range[]): Range[] => {\n if (ranges.length === 0) return [];\n if (ranges.length === 1) return [ranges[0]];\n\n // Sort by start position\n ranges.sort((a, b) => {\n const cmp = a.compareBoundaryPoints(Range.START_TO_START, b);\n if (cmp !== 0) return cmp;\n\n // If equal, sort by end position\n return a.compareBoundaryPoints(Range.END_TO_END, b);\n });\n\n const [first, ...rest] = ranges;\n\n const result = rest.reduce<{ merged: Range[], current: Range }>((acc, next) => {\n // Check if current and next overlap or are adjacent (current.end >= next.start)\n const comparison = acc.current.compareBoundaryPoints(Range.START_TO_END, next);\n\n if (comparison >= 0) {\n // Ranges overlap/touch - merge\n const endComparison = acc.current.compareBoundaryPoints(Range.END_TO_END, next);\n if (endComparison < 0) {\n // Next extends beyond current - extend current's end\n acc.current.setEnd(next.endContainer, next.endOffset);\n }\n\n // Otherwise current already encompasses next, no change needed\n return acc;\n } else {\n // Disjoint - save current and start new range\n acc.merged.push(acc.current);\n acc.current = next.cloneRange();\n return acc;\n }\n }, { merged: [], current: first.cloneRange() });\n\n return [...result.merged, result.current];\n}","import { getRangeAnnotatableContents } from './splitAnnotatableRanges';\nimport type { TextSelector } from '../model';\n\nexport const rangeToSelector = (\n range: Range,\n container: HTMLElement,\n offsetReferenceSelector?: string\n): TextSelector => {\n const rangeBefore = document.createRange();\n\n const offsetReference: HTMLElement = offsetReferenceSelector\n ? (range.startContainer.parentElement as HTMLElement).closest(offsetReferenceSelector)!\n : container;\n\n // A helper range from the start of the container to the start of the selection\n rangeBefore.setStart(offsetReference, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n // A content range before content w/o not annotatable elements\n const before = getRangeAnnotatableContents(rangeBefore).textContent;\n\n const quote = range.toString();\n const start = before.length || 0;\n const end = start + quote.length;\n\n return offsetReferenceSelector\n ? { quote, start, end, range, offsetReference }\n : { quote, start, end, range };\n}\n","/**\n * Offsets the given rect relative to the offset parent.\n */\nexport const toParentBounds = (rect: DOMRect, offset: DOMRect): DOMRect => {\n const { left, top, right, bottom } = rect;\n return new DOMRect(left - offset.left, top - offset.top, right - left, bottom - top);\n};\n\n/**\n * Inverse: translates the given relative rect back into viewport bounds.\n */\nexport const toViewportBounds = (rect: DOMRect, offset: DOMRect): DOMRect => {\n const { left, top, right, bottom } = rect;\n return new DOMRect(left + offset.left, top + offset.top, right - left, bottom - top);\n}\n","import type { TextSelector } from '../model';\nimport { NOT_ANNOTATABLE_SELECTOR } from './isNotAnnotatable';\n\n/**\n * Creates a new selector object with the revived DOM range from the given text annotation position\n * Only the annotatable elements are processed and counted towards the range\n *\n * @param selector annotation selector with start and end positions\n * @param container the HTML container of the annotated content\n *\n * @returns the revived selector\n */\nexport const reviveSelector = <T extends TextSelector>(selector: T, container: HTMLElement): T => {\n\n const { start, end } = selector;\n\n const offsetReference = selector.offsetReference || container;\n\n const iterator = document.createNodeIterator(container, NodeFilter.SHOW_TEXT, (node) =>\n node.parentElement?.closest(NOT_ANNOTATABLE_SELECTOR)\n ? NodeFilter.FILTER_SKIP\n : NodeFilter.FILTER_ACCEPT\n );\n\n // Position that contains the length of the preceding annotatable text nodes\n let runningOffset = 0;\n\n const range = document.createRange();\n\n let n = iterator.nextNode();\n if (n === null) console.error('Could not revive annotation target. Content missing.');\n\n // If there's no offset reference, start immediately\n let startCounting = !offsetReference;\n while (n !== null) {\n startCounting ||= (typeof offsetReference?.contains === 'function') ? offsetReference.contains(n) : false;\n\n if (startCounting) {\n const len = n.textContent?.length || 0;\n\n if (runningOffset + len > start) {\n range.setStart(n, start - runningOffset);\n break;\n }\n\n runningOffset += len;\n }\n\n n = iterator.nextNode();\n }\n\n // set range end\n while (n !== null) {\n const len = n.textContent?.length || 0;\n\n if (runningOffset + len >= end) {\n range.setEnd(n, end - runningOffset);\n break;\n }\n\n runningOffset += len;\n\n n = iterator.nextNode();\n }\n \n return {\n ...selector,\n range\n }\n\n}\n","import type { TextAnnotationTarget } from '../model';\nimport { isRevived } from './isRevived';\nimport { reviveSelector } from './reviveSelector';\n\nexport const reviveTarget = <T extends TextAnnotationTarget = TextAnnotationTarget>(target: T, container: HTMLElement): T =>\n isRevived(target.selector)\n ? target\n : ({\n ...target,\n selector: target.selector.map(s => s.range instanceof Range && !s.range.collapsed ? s : reviveSelector(s, container))\n });\n\n\n","import type { TextAnnotation } from '../model';\nimport { isRevived } from './isRevived';\nimport { reviveTarget } from './reviveTarget';\n\nexport const reviveAnnotation = <T extends TextAnnotation>(annotation: T, container: HTMLElement): T =>\n isRevived(annotation.target.selector)\n ? annotation\n : ({ ...annotation, target: reviveTarget(annotation.target, container) });","export const trimRangeToContainer = (\n range: Range,\n container: HTMLElement\n): Range => {\n const trimmedRange = range.cloneRange();\n\n /**\n * If the range starts outside the container -\n * trim it to the start of the container\n */\n if (!container.contains(trimmedRange.startContainer)) {\n trimmedRange.setStart(container, 0);\n }\n\n /**\n * If the range ends outside the container -\n * trim it to the end of the container\n */\n if (!container.contains(trimmedRange.endContainer)) {\n trimmedRange.setEnd(container, container.childNodes.length);\n }\n\n return trimmedRange;\n}\n","import type { TextAnnotationStore } from '../state';\nimport type { TextAnnotation } from '../model';\nimport { reviveTarget } from '../utils';\n\nconst getScrollParent = (el: Element) => {\n if (!el)\n return document.scrollingElement;\n\n const { overflowY } = window.getComputedStyle(el);\n const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';\n\n // Cf. discussion https://stackoverflow.com/questions/35939886/find-first-scrollable-parent\n if (isScrollable && el.scrollHeight > el.clientHeight)\n return el;\n else\n return getScrollParent(el.parentElement);\n};\n\n// Executes scroll on an annotation with a valid DOM range selector\nconst scroll = <I extends TextAnnotation = TextAnnotation>(\n store: TextAnnotationStore<I>,\n target: I['target'],\n scrollParent: Element\n) => {\n // Parent bounds and client (= visible) height\n const parentBounds = scrollParent.getBoundingClientRect();\n const parentHeight = scrollParent.clientHeight;\n const parentWidth = scrollParent.clientWidth;\n\n // Position of the annotation relative to viewport\n const annotationBounds = target.selector[0].range.getBoundingClientRect();\n\n /*\n Note: `getBoundingClientRect` seems to return the wrong height!\n (Includes block elements?)\n Instead, the normalized height is used from the spatial index!\n */\n const { width, height } = store.getAnnotationBounds(target.annotation);\n\n // Position of the annotation relative to scrollParent\n const offsetTop = annotationBounds.top - parentBounds.top;\n const offsetLeft = annotationBounds.left - parentBounds.left;\n\n const scrollTop = scrollParent.parentElement ? scrollParent.scrollTop : 0;\n const scrollLeft = scrollParent.parentElement ? scrollParent.scrollLeft : 0;\n\n // Scroll the annotation to the center of the viewport\n const top = offsetTop + scrollTop - (parentHeight - height) / 2;\n const left = offsetLeft + scrollLeft - (parentWidth - width) / 2;\n\n scrollParent.scroll({ top, left, behavior: 'smooth' });\n};\n\nexport const scrollIntoView = <I extends TextAnnotation = TextAnnotation>(\n container: HTMLElement, store: TextAnnotationStore<I>\n) => <E extends Element = Element>(\n annotationOrId: string | I, scrollParentOrId?: string | E\n) => {\n const id =\n typeof annotationOrId === 'string' ? annotationOrId : annotationOrId.id;\n\n const scrollParent = scrollParentOrId\n ? typeof scrollParentOrId === 'string' ? document.getElementById(scrollParentOrId) : scrollParentOrId\n : getScrollParent(container);\n\n\n if (!scrollParent) {\n console.warn(`The scroll parent is missing for the annotation: ${id}`, { container });\n return false;\n }\n\n // Get curren version of the annotation from the store\n const current = store.getAnnotation(id);\n if (!current) {\n console.warn(`The annotation is missing in the store: ${id}`);\n return false;\n }\n\n // The first selector is the topmost one as well\n const { range: annoRange } = current.target.selector[0];\n if (annoRange && !annoRange.collapsed) {\n scroll(store, current.target, scrollParent);\n return true;\n }\n\n // Try reviving to account for lazy rendering\n const revived = reviveTarget(current.target, container);\n const { range: revivedAnnoRange } = revived.selector[0];\n if (revivedAnnoRange && !revivedAnnoRange.collapsed) {\n scroll(store, revived, scrollParent);\n return true;\n }\n\n return false;\n};\n","export default function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\tif (typeof options === 'boolean') {\n\t\tthrow new TypeError('The `options` parameter must be an object, not a boolean. Use `{immediate: true}` instead.');\n\t}\n\n\tconst {immediate} = options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction run() {\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\t\treturn result;\n\t}\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tresult = run();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (\n\t\t\tstoredContext\n\t\t\t&& this !== storedContext\n\t\t\t&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)\n\t\t) {\n\t\t\tthrow new Error('Debounced method called with different contexts of the same prototype.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tresult = run();\n\t\t\treturn result;\n\t\t}\n\n\t\treturn undefined;\n\t};\n\n\tObject.defineProperty(debounced, 'isPending', {\n\t\tget() {\n\t\t\treturn timeoutId !== undefined;\n\t\t},\n\t});\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebounced.trigger();\n\t};\n\n\tdebounced.trigger = () => {\n\t\tresult = run();\n\n\t\tdebounced.clear();\n\t};\n\n\treturn debounced;\n}\n","import type { AnnotationState, Color, DrawingStyle } from '@annotorious/core';\nimport type { TextAnnotation } from 'src/model';\n\nexport interface HighlightStyle extends Pick<DrawingStyle, 'fill' | 'fillOpacity'> {\n\n underlineStyle?: string;\n\n underlineColor?: Color;\n\n underlineOffset?: number;\n\n underlineThickness?: number;\n \n}\n\nexport type HighlightStyleExpression = HighlightStyle \n | (<I extends TextAnnotation = TextAnnotation>(annotation: I, state: AnnotationState, zIndex?: number) => HighlightStyle | undefined);\n\nexport const DEFAULT_STYLE: HighlightStyle = { \n fill: 'rgb(0, 128, 255)', \n fillOpacity: 0.18\n};\n\nexport const DEFAULT_SELECTED_STYLE: HighlightStyle = { \n fill: 'rgb(0, 128, 255)', \n fillOpacity: 0.45 \n};\n","var W = Object.prototype.hasOwnProperty;\nfunction V(e, t) {\n var n, o;\n if (e === t) return !0;\n if (e && t && (n = e.constructor) === t.constructor) {\n if (n === Date) return e.getTime() === t.getTime();\n if (n === RegExp) return e.toString() === t.toString();\n if (n === Array) {\n if ((o = e.length) === t.length)\n for (; o-- && V(e[o], t[o]); ) ;\n return o === -1;\n }\n if (!n || typeof e == \"object\") {\n o = 0;\n for (n in e)\n if (W.call(e, n) && ++o && !W.call(t, n) || !(n in t) || !V(e[n], t[n])) return !1;\n return Object.keys(t).length === o;\n }\n }\n return e !== e && t !== t;\n}\nlet F = Symbol(\"clean\"), I = [], z = 0;\nconst $ = 4;\nlet j = (e) => {\n let t = [], n = {\n get() {\n return n.lc || n.listen(() => {\n })(), n.value;\n },\n lc: 0,\n listen(o) {\n return n.lc = t.push(o), () => {\n for (let f = z + $; f < I.length; )\n I[f] === o ? I.splice(f, $) : f += $;\n let s = t.indexOf(o);\n ~s && (t.splice(s, 1), --n.lc || n.off());\n };\n },\n notify(o, s) {\n let f = !I.length;\n for (let m of t)\n I.push(m, n.value, o, s);\n if (f) {\n for (z = 0; z < I.length; z += $)\n I[z](\n I[z + 1],\n I[z + 2],\n I[z + 3]\n );\n I.length = 0;\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {\n },\n set(o) {\n let s = n.value;\n s !== o && (n.value = o, n.notify(s));\n },\n subscribe(o) {\n let s = n.listen(o);\n return o(n.value), s;\n },\n value: e\n };\n return process.env.NODE_ENV !== \"production\" && (n[F] = () => {\n t = [], n.lc = 0, n.off();\n }), n;\n};\nconst Re = (e) => {\n const t = j(null);\n return e.observe(({ changes: n }) => {\n const o = t.get();\n if (o) {\n (n.deleted || []).some((m) => m.id === o) && t.set(null);\n const f = (n.updated || []).find(({ oldValue: m }) => m.id === o);\n f && t.set(f.newValue.id);\n }\n }), {\n get current() {\n return t.get();\n },\n subscribe: t.subscribe.bind(t),\n set: t.set.bind(t)\n };\n};\nvar K = /* @__PURE__ */ ((e) => (e.EDIT = \"EDIT\", e.SELECT = \"SELECT\", e.NONE = \"NONE\", e))(K || {});\nconst Y = { selected: [] }, Be = (e, t, n) => {\n const o = j(Y);\n let s = t;\n const f = () => {\n V(o.get(), Y) || o.set(Y);\n }, m = () => {\n var g;\n return ((g = o.get().selected) == null ? void 0 : g.length) === 0;\n }, C = (g) => {\n if (m())\n return !1;\n const b = typeof g == \"string\" ? g : g.id;\n return o.get().selected.some((y) => y.id === b);\n }, w = (g, b) => {\n let y;\n if (Array.isArray(g)) {\n if (y = g.map((i) => e.getAnnotation(i)).filter(Boolean), y.length < g.length) {\n console.warn(\"Invalid selection: \" + g.filter((i) => !y.some((u) => u.id === i)));\n return;\n }\n } else {\n const i = e.getAnnotation(g);\n if (!i) {\n console.warn(\"Invalid selection: \" + g);\n return;\n }\n y = [i];\n }\n const D = y.reduce((i, u) => {\n const h = v(u);\n return h === \"EDIT\" ? [...i, { id: u.id, editable: !0 }] : h === \"SELECT\" ? [...i, { id: u.id }] : i;\n }, []);\n o.set({ selected: D, event: b });\n }, A = (g, b) => {\n const y = Array.isArray(g) ? g : [g], D = y.map((i) => e.getAnnotation(i)).filter((i) => !!i);\n o.set({\n selected: D.map((i) => {\n const u = b === void 0 ? v(i) === \"EDIT\" : b;\n return { id: i.id, editable: u };\n })\n }), D.length !== y.length && console.warn(\"Invalid selection\", g);\n }, T = (g) => {\n if (m())\n return !1;\n const { selected: b } = o.get();\n b.some(({ id: D }) => g.includes(D)) && o.set({ selected: b.filter(({ id: D }) => !g.includes(D)) });\n }, l = (g) => {\n s = g, A(o.get().selected.map(({ id: b }) => b));\n }, v = (g) => ee(g, s, n);\n return e.observe(\n ({ changes: g }) => T((g.deleted || []).map((b) => b.id))\n ), {\n get event() {\n const g = o.get();\n return g ? g.event : null;\n },\n get selected() {\n const g = o.get();\n return g ? [...g.selected] : null;\n },\n get userSelectAction() {\n return s;\n },\n clear: f,\n evalSelectAction: v,\n isEmpty: m,\n isSelected: C,\n setSelected: A,\n setUserSelectAction: l,\n subscribe: o.subscribe.bind(o),\n userSelect: w\n };\n}, ee = (e, t, n) => {\n const o = n ? n.serialize(e) : e;\n return typeof t == \"function\" ? t(o) : t || \"EDIT\";\n}, B = [];\nfor (let e = 0; e < 256; ++e)\n B.push((e + 256).toString(16).slice(1));\nfunction te(e, t = 0) {\n return (B[e[t + 0]] + B[e[t + 1]] + B[e[t + 2]] + B[e[t + 3]] + \"-\" + B[e[t + 4]] + B[e[t + 5]] + \"-\" + B[e[t + 6]] + B[e[t + 7]] + \"-\" + B[e[t + 8]] + B[e[t + 9]] + \"-\" + B[e[t + 10]] + B[e[t + 11]] + B[e[t + 12]] + B[e[t + 13]] + B[e[t + 14]] + B[e[t + 15]]).toLowerCase();\n}\nlet P;\nconst ne = new Uint8Array(16);\nfunction oe() {\n if (!P) {\n if (typeof crypto > \"u\" || !crypto.getRandomValues)\n throw new Error(\"crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported\");\n P = crypto.getRandomValues.bind(crypto);\n }\n return P(ne);\n}\nconst se = typeof crypto < \"u\" && crypto.randomUUID && crypto.randomUUID.bind(crypto), G = { randomUUID: se };\nfunction ie(e, t, n) {\n var s;\n e = e || {};\n const o = e.random ?? ((s = e.rng) == null ? void 0 : s.call(e)) ?? oe();\n if (o.length < 16)\n throw new Error(\"Random bytes length must be >= 16\");\n return o[6] = o[6] & 15 | 64, o[8] = o[8] & 63 | 128, te(o);\n}\nfunction q(e, t, n) {\n return G.randomUUID && !e ? G.randomUUID() : ie(e);\n}\nconst xe = (e) => {\n const { creator: t, updatedBy: n } = e.target, o = e.bodies.reduce((s, f) => [...s, f.creator, f.updatedBy].filter(Boolean), []);\n return [\n t,\n n,\n ...o\n ].filter((s) => s);\n}, M = (e) => {\n const t = (n) => {\n const o = { ...n };\n return n.created && typeof n.created == \"string\" && (o.created = new Date(n.created)), n.updated && typeof n.updated == \"string\" && (o.updated = new Date(n.updated)), o;\n };\n return {\n ...e,\n bodies: (e.bodies || []).map(t),\n target: t(e.target)\n };\n}, Ie = (e, t, n, o) => ({\n id: q(),\n annotation: typeof e == \"string\" ? e : e.id,\n created: n || /* @__PURE__ */ new Date(),\n creator: o,\n ...t\n}), de = (e, t) => {\n const n = new Set(e.bodies.map((o) => o.id));\n return t.bodies.filter((o) => !n.has(o.id));\n}, re = (e, t) => {\n const n = new Set(t.bodies.map((o) => o.id));\n return e.bodies.filter((o) => !n.has(o.id));\n}, ae = (e, t) => t.bodies.map((n) => {\n const o = e.bodies.find((s) => s.id === n.id);\n return { newBody: n, oldBody: o && !V(o, n) ? o : void 0 };\n}).filter(({ oldBody: n }) => n).map(({ oldBody: n, newBody: o }) => ({ oldBody: n, newBody: o })), ce = (e, t) => !V(e.target, t.target), Q = (e, t) => {\n const n = de(e, t), o = re(e, t), s = ae(e, t);\n return {\n oldValue: e,\n newValue: t,\n bodiesCreated: n.length > 0 ? n : void 0,\n bodiesDeleted: o.length > 0 ? o : void 0,\n bodiesUpdated: s.length > 0 ? s : void 0,\n targetUpdated: ce(e, t) ? { oldTarget: e.target, newTarget: t.target } : void 0\n };\n};\nvar le = /* @__PURE__ */ ((e) => (e.BODY_ONLY = \"BODY_ONLY\", e.TARGET_ONLY = \"TARGET_ONLY\", e))(le || {}), O = /* @__PURE__ */ ((e) => (e.LOCAL = \"LOCAL\", e.REMOTE = \"REMOTE\", e.SILENT = \"SILENT\", e))(O || {});\nconst ue = (e, t) => {\n var f, m;\n const { changes: n, origin: o } = t;\n if (!(e.options.origin ? e.options.origin === o : o !== \"SILENT\"))\n return !1;\n if (e.options.ignore) {\n const { ignore: C } = e.options, w = (T) => T && T.length > 0;\n if (!(w(n.created) || w(n.deleted))) {\n const T = (f = n.updated) == null ? void 0 : f.some((v) => w(v.bodiesCreated) || w(v.bodiesDeleted) || w(v.bodiesUpdated)), l = (m = n.updated) == null ? void 0 : m.some((v) => v.targetUpdated);\n if (C === \"BODY_ONLY\" && T && !l || C === \"TARGET_ONLY\" && l && !T)\n return !1;\n }\n }\n if (e.options.annotations) {\n const C = /* @__PURE__ */ new Set([\n ...(n.created || []).map((A) => A.id),\n ...(n.deleted || []).map((A) => A.id),\n ...(n.updated || []).map(({ oldValue: A }) => A.id)\n ]);\n return !!(Array.isArray(e.options.annotations) ? e.options.annotations : [e.options.annotations]).find((A) => C.has(A));\n } else\n return !0;\n}, fe = (e, t) => {\n const n = new Set((e.created || []).map((l) => l.id)), o = new Set((e.updated || []).map(({ newValue: l }) => l.id)), s = new Set((t.created || []).map((l) => l.id)), f = new Set((t.deleted || []).map((l) => l.id)), m = new Set((t.updated || []).map(({ oldValue: l }) => l.id)), C = new Set((t.updated || []).filter(({ oldValue: l }) => n.has(l.id) || o.has(l.id)).map(({ oldValue: l }) => l.id)), w = [\n ...(e.created || []).filter((l) => !f.has(l.id)).map((l) => m.has(l.id) ? t.updated.find(({ oldValue: v }) => v.id === l.id).newValue : l),\n ...t.created || []\n ], A = [\n ...(e.deleted || []).filter((l) => !s.has(l.id)),\n ...(t.deleted || []).filter((l) => !n.has(l.id))\n ], T = [\n ...(e.updated || []).filter(({ newValue: l }) => !f.has(l.id)).map((l) => {\n const { oldValue: v, newValue: g } = l;\n if (m.has(g.id)) {\n const b = t.updated.find((y) => y.oldValue.id === g.id).newValue;\n return Q(v, b);\n } else\n return l;\n }),\n ...(t.updated || []).filter(({ oldValue: l }) => !C.has(l.id))\n ];\n return { created: w, deleted: A, updated: T };\n}, _ = (e) => {\n const t = e.id === void 0 ? q() : e.id;\n return {\n ...e,\n id: t,\n bodies: e.bodies === void 0 ? [] : e.bodies.map((n) => ({\n ...n,\n annotation: t\n })),\n target: {\n ...e.target,\n annotation: t\n }\n };\n}, pe = (e) => e.id !== void 0, Ne = () => {\n const e = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map(), n = [], o = (d, r = {}) => {\n n.push({ onChange: d, options: r });\n }, s = (d) => {\n const r = n.findIndex((c) => c.onChange == d);\n r > -1 && n.splice(r, 1);\n }, f = (d, r) => {\n const c = {\n origin: d,\n changes: {\n created: r.created || [],\n updated: r.updated || [],\n deleted: r.deleted || []\n },\n state: [...e.values()]\n };\n n.forEach((p) => {\n ue(p, c) && p.onChange(c);\n });\n }, m = (d, r = O.LOCAL) => {\n if (d.id && e.get(d.id))\n throw Error(`Cannot add annotation ${d.id} - exists already`);\n {\n const p = _(d);\n e.set(p.id, p), p.bodies.forEach((U) => t.set(U.id, p.id)), f(r, { created: [p] });\n }\n }, C = (d, r) => {\n const c = _(typeof d == \"string\" ? r : d), p = typeof d == \"string\" ? d : d.id, U = p && e.get(p);\n if (U) {\n const L = Q(U, c);\n return p === c.id ? e.set(p, c) : (e.delete(p), e.set(c.id, c)), U.bodies.forEach((R) => t.delete(R.id)), c.bodies.forEach((R) => t.set(R.id, c.id)), L;\n } else\n console.warn(`Cannot update annotation ${p} - does not exist`);\n }, w = (d, r = O.LOCAL, c = O.LOCAL) => {\n const p = pe(r) ? c : r, U = C(d, r);\n U && f(p, { updated: [U] });\n }, A = (d, r = O.LOCAL) => {\n !!e.get(d.id) ? w(d, r) : m(d, r);\n }, T = (d, r = O.LOCAL) => {\n const c = d.reduce((p, U) => {\n const L = C(U);\n return L ? [...p, L] : p;\n }, []);\n c.length > 0 && f(r, { updated: c });\n }, l = (d, r = O.LOCAL) => {\n const c = d.map(_), { toAdd: p, toUpdate: U } = c.reduce((R, k) => e.get(k.id) ? { ...R, toUpdate: [...R.toUpdate, k] } : { ...R, toAdd: [...R.toAdd, k] }, { toAdd: [], toUpdate: [] }), L = U.map((R) => C(R, r)).filter(Boolean);\n p.forEach((R) => {\n e.set(R.id, R), R.bodies.forEach((k) => t.set(k.id, R.id));\n }), f(r, { created: p, updated: L });\n }, v = (d, r = O.LOCAL) => {\n const c = e.get(d.annotation);\n if (c) {\n const p = {\n ...c,\n bodies: [...c.bodies, d]\n };\n e.set(c.id, p), t.set(d.id, p.id), f(r, { updated: [{\n oldValue: c,\n newValue: p,\n bodiesCreated: [d]\n }] });\n } else\n console.warn(`Attempt to add body to missing annotation: ${d.annotation}`);\n }, g = () => [...e.values()], b = (d = O.LOCAL) => {\n const r = [...e.values()];\n e.clear(), t.clear(), f(d, { deleted: r });\n }, y = (d, r = !0, c = O.LOCAL) => {\n const p = d.map(_);\n if (r) {\n const U = [...e.values()];\n e.clear(), t.clear(), p.forEach((L) => {\n e.set(L.id, L), L.bodies.forEach((R) => t.set(R.id, L.id));\n }), f(c, { created: p, deleted: U });\n } else {\n const U = d.reduce((L, R) => {\n const k = R.id && e.get(R.id);\n return k ? [...L, k] : L;\n }, []);\n if (U.length > 0)\n throw Error(`Bulk insert would overwrite the following annotations: ${U.map((L) => L.id).join(\", \")}`);\n p.forEach((L) => {\n e.set(L.id, L), L.bodies.forEach((R) => t.set(R.id, L.id));\n }), f(c, { created: p });\n }\n }, D = (d) => {\n const r = typeof d == \"string\" ? d : d.id, c = e.get(r);\n if (c)\n return e.delete(r), c.bodies.forEach((p) => t.delete(p.id)), c;\n console.warn(`Attempt to delete missing annotation: ${r}`);\n }, i = (d, r = O.LOCAL) => {\n const c = D(d);\n c && f(r, { deleted: [c] });\n }, u = (d, r = O.LOCAL) => {\n const c = d.reduce((p, U) => {\n const L = D(U);\n return L ? [...p, L] : p;\n }, []);\n c.length > 0 && f(r, { deleted: c });\n }, h = (d) => {\n const r = e.get(d.annotation);\n if (r) {\n const c = r.bodies.find((p) => p.id === d.id);\n if (c) {\n t.delete(c.id);\n const p = {\n ...r,\n bodies: r.bodies.filter((L) => L.id !== d.id)\n };\n return e.set(r.id, p), {\n oldValue: r,\n newValue: p,\n bodiesDeleted: [c]\n };\n } else\n console.warn(`Attempt to delete missing body ${d.id} from annotation ${d.annotation}`);\n } else\n console.warn(`Attempt to delete body from missing annotation ${d.annotation}`);\n }, E = (d, r = O.LOCAL) => {\n const c = h(d);\n c && f(r, { updated: [c] });\n }, a = (d, r = O.LOCAL) => {\n const c = d.map((p) => h(p)).filter(Boolean);\n c.length > 0 && f(r, { updated: c });\n }, S = (d) => {\n const r = e.get(d);\n return r ? { ...r } : void 0;\n }, x = (d) => {\n const r = t.get(d);\n if (r) {\n const p = S(r).bodies.find((U) => U.id === d);\n if (p)\n return p;\n console.error(`Store integrity error: body ${d} in index, but not in annotation`);\n } else\n console.warn(`Attempt to retrieve missing body: ${d}`);\n }, N = (d, r) => {\n if (d.annotation !== r.annotation)\n throw \"Annotation integrity violation: annotation ID must be the same when updating bodies\";\n const c = e.get(d.annotation);\n if (c) {\n const p = c.bodies.find((L) => L.id === d.id), U = {\n ...c,\n bodies: c.bodies.map((L) => L.id === p.id ? r : L)\n };\n return e.set(c.id, U), p.id !== r.id && (t.delete(p.id), t.set(r.id, U.id)), {\n oldValue: c,\n newValue: U,\n bodiesUpdated: [{ oldBody: p, newBody: r }]\n };\n } else\n console.warn(`Attempt to add body to missing annotation ${d.annotation}`);\n }, X = (d, r, c = O.LOCAL) => {\n const p = N(d, r);\n p && f(c, { updated: [p] });\n }, Z = (d, r = O.LOCAL) => {\n const c = d.map((p) => N({ id: p.id, annotation: p.annotation }, p)).filter(Boolean);\n f(r, { updated: c });\n }, H = (d) => {\n const r = e.get(d.annotation);\n if (r) {\n const c = {\n ...r,\n target: {\n ...r.target,\n ...d\n }\n };\n return e.set(r.id, c), {\n oldValue: r,\n newValue: c,\n targetUpdated: {\n oldTarget: r.target,\n newTarget: d\n }\n };\n } else\n console.warn(`Attempt to update target on missing annotation: ${d.annotation}`);\n };\n return {\n addAnnotation: m,\n addBody: v,\n all: g,\n bulkAddAnnotations: y,\n bulkDeleteAnnotations: u,\n bulkDeleteBodies: a,\n bulkUpdateAnnotations: T,\n bulkUpdateBodies: Z,\n bulkUpdateTargets: (d, r = O.LOCAL) => {\n const c = d.map((p) => H(p)).filter(Boolean);\n c.length > 0 && f(r, { updated: c });\n },\n bulkUpsertAnnotations: l,\n clear: b,\n deleteAnnotation: i,\n deleteBody: E,\n getAnnotation: S,\n getBody: x,\n observe: o,\n unobserve: s,\n updateAnnotation: w,\n updateBody: X,\n updateTarget: (d, r = O.LOCAL) => {\n const c = H(d);\n c && f(r, { updated: [c] });\n },\n upsertAnnotation: A\n };\n};\nlet J = () => ({\n emit(e, ...t) {\n for (let n = this.events[e] || [], o = 0, s = n.length; o < s; o++)\n n[o](...t);\n },\n events: {},\n on(e, t) {\n var n;\n return ((n = this.events)[e] || (n[e] = [])).push(t), () => {\n var o;\n this.events[e] = (o = this.events[e]) == null ? void 0 : o.filter((s) => t !== s);\n };\n }\n});\nconst ge = 250, ke = (e, t) => {\n const n = J(), o = (t == null ? void 0 : t.changes) || [];\n let s = t ? t.pointer : -1, f = !1, m = 0;\n const C = (a) => {\n if (!f) {\n const { changes: S } = a, x = performance.now();\n if (x - m > ge)\n o.splice(s + 1), o.push(S), s = o.length - 1;\n else {\n const N = o.length - 1;\n o[N] = fe(o[N], S);\n }\n m = x;\n }\n f = !1;\n };\n e.observe(C, { origin: O.LOCAL });\n const w = (a) => a && a.length > 0 && e.bulkDeleteAnnotations(a), A = (a) => a && a.length > 0 && e.bulkAddAnnotations(a, !1), T = (a) => a && a.length > 0 && e.bulkUpdateAnnotations(a.map(({ oldValue: S }) => S)), l = (a) => a && a.length > 0 && e.bulkUpdateAnnotations(a.map(({ newValue: S }) => S)), v = (a) => a && a.length > 0 && e.bulkAddAnnotations(a, !1), g = (a) => a && a.length > 0 && e.bulkDeleteAnnotations(a);\n return {\n canRedo: () => o.length - 1 > s,\n canUndo: () => s > -1,\n destroy: () => e.unobserve(C),\n getHistory: () => ({ changes: [...o], pointer: s }),\n on: (a, S) => n.on(a, S),\n redo: () => {\n if (o.length - 1 > s) {\n f = !0;\n const { created: a, updated: S, deleted: x } = o[s + 1];\n A(a), l(S), g(x), n.emit(\"redo\", o[s + 1]), s += 1;\n }\n },\n undo: () => {\n if (s > -1) {\n f = !0;\n const { created: a, updated: S, deleted: x } = o[s];\n w(a), T(S), v(x), n.emit(\"undo\", o[s]), s -= 1;\n }\n }\n };\n}, ze = () => {\n const e = j([]);\n return {\n subscribe: e.subscribe.bind(e),\n set: e.set.bind(e)\n };\n}, Ve = (e, t, n, o) => {\n const { hover: s, selection: f, store: m, viewport: C } = e, w = /* @__PURE__ */ new Map();\n let A = [], T, l;\n const v = (i, u) => {\n w.has(i) ? w.get(i).push(u) : w.set(i, [u]);\n }, g = (i, u) => {\n const h = w.get(i);\n if (h) {\n const E = h.indexOf(u);\n E !== -1 && h.splice(E, 1);\n }\n }, b = (i, u, h) => {\n w.has(i) && setTimeout(() => {\n w.get(i).forEach((E) => {\n if (n) {\n const a = Array.isArray(u) ? u.map((x) => n.serialize(x)) : n.serialize(u), S = h ? h instanceof PointerEvent ? h : n.serialize(h) : void 0;\n E(a, S);\n } else\n E(u, h);\n });\n }, 1);\n }, y = () => {\n const { selected: i } = f, u = (i || []).map(({ id: h }) => m.getAnnotation(h));\n u.forEach((h) => {\n const E = A.find((a) => a.id === h.id);\n (!E || !V(E, h)) && b(\"updateAnnotation\", h, E);\n }), A = A.map((h) => {\n const E = u.find(({ id: a }) => a === h.id);\n return E || h;\n });\n };\n f.subscribe(({ selected: i }) => {\n if (!(A.length === 0 && i.length === 0)) {\n if (A.length === 0 && i.length > 0)\n A = i.map(({ id: u }) => m.getAnnotation(u));\n else if (A.length > 0 && i.length === 0)\n A.forEach((u) => {\n const h = m.getAnnotation(u.id);\n h && !V(h, u) && b(\"updateAnnotation\", h, u);\n }), A = [];\n else {\n const u = new Set(A.map((a) => a.id)), h = new Set(i.map(({ id: a }) => a));\n A.filter((a) => !h.has(a.id)).forEach((a) => {\n const S = m.getAnnotation(a.id);\n S && !V(S, a) && b(\"updateAnnotation\", S, a);\n }), A = [\n // Remove annotations that were deselected\n ...A.filter((a) => h.has(a.id)),\n // Add editable annotations that were selected\n ...i.filter(({ id: a }) => !u.has(a)).map(({ id: a }) => m.getAnnotation(a))\n ];\n }\n b(\"selectionChanged\", A);\n }\n }), s.subscribe((i) => {\n !T && i ? b(\"mouseEnterAnnotation\", m.getAnnotation(i)) : T && !i ? b(\"mouseLeaveAnnotation\", m.getAnnotation(T)) : T && i && (b(\"mouseLeaveAnnotation\", m.getAnnotation(T)), b(\"mouseEnterAnnotation\", m.getAnnotation(i))), T = i;\n }), C == null || C.subscribe((i) => b(\"viewportIntersect\", i.map((u) => m.getAnnotation(u)))), m.observe((i) => {\n o && (l && clearTimeout(l), l = setTimeout(y, 1e3));\n const { created: u, deleted: h } = i.changes;\n (u || []).forEach((a) => b(\"createAnnotation\", a)), (h || []).forEach((a) => b(\"deleteAnnotation\", a)), (i.changes.updated || []).filter((a) => [\n ...a.bodiesCreated || [],\n ...a.bodiesDeleted || [],\n ...a.bodiesUpdated || []\n ].length > 0).forEach(({ oldValue: a, newValue: S }) => {\n const x = A.find((N) => N.id === a.id) || a;\n A = A.map((N) => N.id === a.id ? S : N), b(\"updateAnnotation\", S, x);\n });\n }, { origin: O.LOCAL }), m.observe((i) => {\n if (A) {\n const u = new Set(A.map((E) => E.id)), h = (i.changes.updated || []).filter(({ newValue: E }) => u.has(E.id)).map(({ newValue: E }) => E);\n h.length > 0 && (A = A.map((E) => {\n const a = h.find((S) => S.id === E.id);\n return a || E;\n }));\n }\n }, { origin: O.REMOTE });\n const D = (i) => (u) => {\n const { updated: h } = u;\n i ? (h || []).forEach((E) => b(\"updateAnnotation\", E.oldValue, E.newValue)) : (h || []).forEach((E) => b(\"updateAnnotation\", E.newValue, E.oldValue));\n };\n return t.on(\"undo\", D(!0)), t.on(\"redo\", D(!1)), { on: v, off: g, emit: b };\n}, _e = (e) => (t) => t.map((n) => e.serialize(n)), he = (e) => (t) => t.reduce((n, o) => {\n const { parsed: s, error: f } = e.parse(o);\n return f ? {\n parsed: n.parsed,\n failed: [...n.failed, o]\n } : s ? {\n parsed: [...n.parsed, s],\n failed: n.failed\n } : {\n ...n\n };\n}, { parsed: [], failed: [] }), $e = (e, t, n) => {\n const { store: o, selection: s } = e, f = (i) => {\n if (n) {\n const { parsed: u, error: h } = n.parse(i);\n u ? o.addAnnotation(u, O.REMOTE) : console.error(h);\n } else\n o.addAnnotation(M(i), O.REMOTE);\n }, m = () => s.clear(), C = () => o.clear(), w = (i) => {\n const u = o.getAnnotation(i);\n return n && u ? n.serialize(u) : u;\n }, A = () => n ? o.all().map(n.serialize) : o.all(), T = () => {\n var h;\n const u = (((h = s.selected) == null ? void 0 : h.map((E) => E.id)) || []).map((E) => o.getAnnotation(E)).filter(Boolean);\n return n ? u.map(n.serialize) : u;\n }, l = (i, u = !0) => fetch(i).then((h) => h.json()).then((h) => (g(h, u), h)), v = (i) => {\n if (typeof i == \"string\") {\n const u = o.getAnnotation(i);\n if (o.deleteAnnotation(i), u)\n return n ? n.serialize(u) : u;\n } else {\n const u = n ? n.parse(i).parsed : i;\n if (u)\n return o.deleteAnnotation(u), i;\n }\n }, g = (i, u = !0) => {\n if (n) {\n const h = n.parseAll || he(n), { parsed: E, failed: a } = h(i);\n a.length > 0 && console.warn(`Discarded ${a.length} invalid annotations`, a), o.bulkAddAnnotations(E, u, O.REMOTE);\n } else\n o.bulkAddAnnotations(i.map(M), u, O.REMOTE);\n }, b = (i, u) => {\n i ? s.setSelected(i, u) : s.clear();\n }, y = (i) => {\n s.setUserSelectAction(i);\n }, D = (i) => {\n if (n) {\n const u = n.parse(i).parsed, h = n.serialize(o.getAnnotation(u.id));\n return o.updateAnnotation(u), h;\n } else {\n const u = o.getAnnotation(i.id);\n return o.updateAnnotation(M(i)), u;\n }\n };\n return {\n addAnnotation: f,\n cancelSelected: m,\n canRedo: t.canRedo,\n canUndo: t.canUndo,\n clearAnnotations: C,\n getAnnotationById: w,\n getAnnotations: A,\n getHistory: t.getHistory,\n getSelected: T,\n loadAnnotations: l,\n redo: t.redo,\n removeAnnotation: v,\n setAnnotations: g,\n setSelected: b,\n setUserSelectAction: y,\n undo: t.undo,\n updateAnnotation: D\n };\n}, Ye = (e, t, n) => typeof t == \"function\" ? t(e, n) : t, Pe = (e, t) => typeof e != \"function\" && typeof t != \"function\" ? {\n ...e || {},\n ...t || {}\n} : (n, o) => {\n const s = typeof e == \"function\" ? e(n, o) : e, f = typeof t == \"function\" ? t(n, o) : t;\n return {\n ...s || {},\n ...f || {}\n };\n}, me = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nlet Ae = (e) => crypto.getRandomValues(new Uint8Array(e)), be = (e, t, n) => {\n let o = (2 << Math.log2(e.length - 1)) - 1, s = -~(1.6 * o * t / e.length);\n return (f = t) => {\n let m = \"\";\n for (; ; ) {\n let C = n(s), w = s | 0;\n for (; w--; )\n if (m += e[C[w] & o] || \"\", m.length >= f) return m;\n }\n };\n}, ve = (e, t = 21) => be(e, t | 0, Ae), Ee = (e = 21) => {\n let t = \"\", n = crypto.getRandomValues(new Uint8Array(e |= 0));\n for (; e--; )\n t += me[n[e] & 63];\n return t;\n};\nconst Me = () => ({ isGuest: !0, id: ve(\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_\", 20)() }), we = (e) => {\n const t = JSON.stringify(e);\n let n = 0;\n for (let o = 0, s = t.length; o < s; o++) {\n let f = t.charCodeAt(o);\n n = (n << 5) - n + f, n |= 0;\n }\n return `${n}`;\n}, Ce = (e) => e ? typeof e == \"object\" ? { ...e } : e : void 0, je = (e, t) => (Array.isArray(e) ? e : [e]).map((n) => {\n const { id: o, type: s, purpose: f, value: m, created: C, modified: w, creator: A, ...T } = n;\n return {\n id: o || `temp-${we(n)}`,\n annotation: t,\n type: s,\n purpose: f,\n value: m,\n creator: Ce(A),\n created: C ? new Date(C) : void 0,\n updated: w ? new Date(w) : void 0,\n ...T\n };\n}), He = (e) => e.map((t) => {\n var C;\n const { annotation: n, created: o, updated: s, ...f } = t, m = {\n ...f,\n created: o == null ? void 0 : o.toISOString(),\n modified: s == null ? void 0 : s.toISOString()\n };\n return (C = m.id) != null && C.startsWith(\"temp-\") && delete m.id, m;\n}), We = (e) => \"@context\" in e && \"creator\" in e && \"body\" in e, ye = [\n \"#ff7c00\",\n // orange\n \"#1ac938\",\n // green\n \"#e8000b\",\n // red\n \"#8b2be2\",\n // purple\n \"#9f4800\",\n // brown\n \"#f14cc1\",\n // pink\n \"#ffc400\",\n // khaki\n \"#00d7ff\",\n // cyan\n \"#023eff\"\n // blue\n], Le = () => {\n const e = [...ye];\n return { assignRandomColor: () => {\n const o = Math.floor(Math.random() * e.length), s = e[o];\n return e.splice(o, 1), s;\n }, releaseColor: (o) => e.push(o) };\n}, Ue = () => {\n const e = Le();\n return { addUser: (o, s) => {\n const f = e.assignRandomColor();\n return {\n label: s.name || s.id,\n avatar: s.avatar,\n color: f\n };\n }, removeUser: (o) => e.releaseColor(o.appearance.color) };\n}, Se = (e, t) => e.every((n) => e.includes(n)) && t.every((n) => e.includes(n)), Ge = Ee(), qe = (e = Ue()) => {\n const t = J(), n = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = (l, v) => {\n if (n.has(l)) {\n console.warn(\"Attempt to add user that is already present\", l, v);\n return;\n }\n const g = e.addUser(l, v);\n n.set(l, {\n ...v,\n presenceKey: l,\n appearance: g\n });\n }, f = (l) => {\n const v = n.get(l);\n if (!v) {\n console.warn(\"Attempt to remove user that is not present\", l);\n return;\n }\n e.removeUser(v), n.delete(l);\n }, m = (l) => {\n const v = new Set(l.map((y) => y.presenceKey)), g = l.filter(({ presenceKey: y }) => !n.has(y)), b = Array.from(n.values()).filter((y) => !v.has(y.presenceKey));\n g.forEach(({ presenceKey: y, user: D }) => s(y, D)), b.forEach((y) => {\n const { presenceKey: D } = y;\n o.has(D) && t.emit(\"selectionChange\", y, null), f(D);\n }), (g.length > 0 || b.length > 0) && t.emit(\"presence\", A());\n }, C = (l, v) => {\n const g = n.get(l);\n if (!g) {\n console.warn(\"Activity notification from user that is not present\");\n return;\n }\n const b = o.get(l);\n (!b || !Se(b, v)) && (o.set(l, v), t.emit(\"selectionChange\", g, v));\n }, w = (l, v) => {\n const g = n.get(l);\n if (!g) {\n console.warn(\"Selection change for user that is not present\", l);\n return;\n }\n v ? o.set(l, v) : o.delete(l), t.emit(\"selectionChange\", g, v);\n }, A = () => [...Array.from(n.values())];\n return {\n getPresentUsers: A,\n notifyActivity: C,\n on: (l, v) => t.on(l, v),\n syncUsers: m,\n updateSelection: w\n };\n};\nexport {\n le as Ignore,\n O as Origin,\n Ge as PRESENCE_KEY,\n K as UserSelectAction,\n Pe as chainStyles,\n Ye as computeStyle,\n Me as createAnonymousGuest,\n $e as createBaseAnnotator,\n Ie as createBody,\n Ue as createDefaultAppearanceProvider,\n Re as createHoverState,\n Ve as createLifecycleObserver,\n qe as createPresenceState,\n Be as createSelectionState,\n Ne as createStore,\n ke as createUndoStack,\n ze as createViewportState,\n Le as defaultColorProvider,\n Q as diffAnnotations,\n xe as getContributors,\n We as isW3CAnnotation,\n fe as mergeChanges,\n ee as onUserSelect,\n he as parseAll,\n je as parseW3CBodies,\n Ce as parseW3CUser,\n M as reviveDates,\n _e as serializeAll,\n He as serializeW3CBodies,\n ue as shouldNotify\n};\n//# sourceMappingURL=annotorious-core.es.js.map\n","import type { ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../model';\n\nexport interface ViewportBounds {\n\n top: number;\n\n left: number;\n\n minX: number;\n\n minY: number;\n \n maxX: number;\n \n maxY: number;\n\n}\n\nexport const getViewportBounds = (container: HTMLElement): ViewportBounds => {\n const { top, left } = container.getBoundingClientRect();\n\n const { innerWidth, innerHeight } = window;\n\n const minX = - left;\n const minY = - top;\n const maxX = innerWidth - left;\n const maxY = innerHeight - top;\n\n return { top, left, minX, minY, maxX, maxY };\n}\n\nexport const trackViewport = (viewport: ViewportState) => {\n let visible = new Set<string>();\n\n const onDraw = (annotations: TextAnnotation[]) => {\n const ids = annotations.map(a => a.id);\n\n if (visible.size !== ids.length || ids.some(id => !visible.has(id))) {\n viewport.set(ids);\n } \n\n visible = new Set(ids);\n }\n\n return onDraw;\n\n}","import debounce from 'debounce';\nimport { UserSelectAction, type Filter, type ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../model';\nimport type { TextAnnotatorState } from '../state';\nimport { type ViewportBounds, getViewportBounds, trackViewport } from './viewport';\nimport type { HighlightPainter } from './HighlightPainter';\nimport type { Highlight } from './Highlight';\nimport type { HighlightStyleExpression } from './HighlightStyle';\n\nexport type RendererFactory = (\n container: HTMLElement, \n state: TextAnnotatorState<TextAnnotation, unknown>,\n viewport: ViewportState\n) => Renderer;\n\nexport interface RendererImplementation {\n\n destroy(): void;\n\n redraw(\n\n highlights:Highlight[], \n\n bounds: ViewportBounds, \n \n style?: HighlightStyleExpression,\n\n painter?: HighlightPainter,\n\n lazy?: boolean\n \n ): void;\n\n setVisible(visible: boolean): void;\n\n}\n\nexport interface Renderer {\n\n destroy(): void;\n\n redraw(force?: boolean): void;\n\n setStyle(style?: HighlightStyleExpression): void;\n\n setFilter(filter?: Filter): void;\n\n setPainter(painter?: HighlightPainter): void;\n\n setVisible(visible: boolean): void;\n\n}\n\nexport const createBaseRenderer = <T extends TextAnnotatorState = TextAnnotatorState> (\n container: HTMLElement, \n state: T,\n viewport: ViewportState,\n renderer: RendererImplementation\n): Renderer => {\n const { store, selection, hover } = state;\n\n let currentStyle: HighlightStyleExpression | undefined;\n\n let currentFilter: Filter | undefined;\n\n let currentPainter: HighlightPainter;\n\n const onDraw = trackViewport(viewport);\n\n const onPointerMove = (event: PointerEvent) => {\n const {x, y} = container.getBoundingClientRect();\n\n // TODO this may be a bit of an edge case... but ideally we'd retrieve the whole \n // stack of annotations, and then evaluate if ANY of them is clickable.\n const hit = store.getAt(event.clientX - x, event.clientY - y, false, currentFilter);\n if (hit && state.selection.evalSelectAction(hit) !== UserSelectAction.NONE) {\n if (hover.current !== hit.id) {\n container.classList.add('hovered');\n hover.set(hit.id);\n }\n } else {\n if (hover.current) {\n container.classList.remove('hovered');\n hover.set(null);\n }\n }\n }\n\n container.addEventListener('pointermove', onPointerMove);\n\n const redraw = debounce((lazy: boolean = false) => requestAnimationFrame(() => {\n if (currentPainter)\n currentPainter.clear();\n\n const bounds = getViewportBounds(container); \n\n const { minX, minY, maxX, maxY } = bounds;\n \n const annotationsInView = currentFilter\n ? store.getIntersecting(minX, minY, maxX, maxY).filter(({ annotation }) => currentFilter(annotation))\n : store.getIntersecting(minX, minY, maxX, maxY);\n\n const selectedIds = selection.selected.map(({ id }) => id);\n\n const highlights: Highlight[] = annotationsInView.map(({ annotation, rects }) => {\n const selected = selectedIds.includes(annotation.id);\n const hovered = annotation.id === hover.current;\n\n return {\n annotation,\n rects,\n state: { selected, hovered }\n };\n });\n\n renderer.redraw(highlights, bounds, currentStyle, currentPainter, lazy);\n\n setTimeout(() => onDraw(annotationsInView.map(({ annotation }) => annotation)), 1);\n }), 10);\n\n const setPainter = (painter: HighlightPainter) => { \n currentPainter = painter;\n redraw();\n }\n\n const setStyle = (style?: HighlightStyleExpression) => {\n currentStyle = style;\n redraw();\n }\n\n const setFilter = (filter?: Filter) => {\n currentFilter = filter;\n redraw(false);\n } \n\n // Refresh on store change\n const onStoreChange = () => redraw();\n store.observe(onStoreChange);\n\n // Refresh on selection change\n const unsubscribeSelection = selection.subscribe(() => redraw());\n\n // Refresh on hover change\n const unsubscribeHover = hover.subscribe(() => redraw());\n\n // Refresh on scroll\n const onScroll = () => redraw(true);\n\n document.addEventListener('scroll', onScroll, { capture: true, passive: true });\n\n // Refresh on resize\n const onResize = debounce(() => {\n store.recalculatePositions();\n\n currentPainter?.reset();\n\n redraw();\n }, 10);\n\n window.addEventListener('resize', onResize);\n\n const resizeObserver = new ResizeObserver(onResize);\n resizeObserver.observe(container);\n\n // This is an extra precaution. The position of the container\n // might shift (without resizing) due to layout changes higher-up\n // in the DOM. (This happens in Recogito for example)\n const config: MutationObserverInit = { attributes: true, childList: true, subtree: true };\n\n const mutationObserver = new MutationObserver(debounce((records: MutationRecord[]) => {\n const isInternal = records\n .every(record => record.target === container || container.contains(record.target));\n\n if (!isInternal)\n redraw(true);\n }, 150));\n\n mutationObserver.observe(document.body, config);\n\n const destroy = () => {\n container.removeEventListener('pointermove', onPointerMove);\n \n renderer.destroy();\n \n store.unobserve(onStoreChange);\n\n unsubscribeSelection();\n unsubscribeHover();\n\n document.removeEventListener('scroll', onScroll);\n\n onResize.clear();\n window.removeEventListener('resize', onResize);\n resizeObserver.disconnect();\n\n mutationObserver.disconnect();\n }\n\n return {\n destroy,\n redraw,\n setStyle,\n setFilter,\n setPainter,\n setVisible: renderer.setVisible\n }\n\n}\n","import debounce from 'debounce';\n\nimport type { ViewportState } from '@annotorious/core';\n\nimport type { TextAnnotatorState } from '../../state';\nimport type { ViewportBounds } from '../viewport';\nimport type { HighlightStyle } from '../HighlightStyle';\nimport { DEFAULT_SELECTED_STYLE, DEFAULT_STYLE, type HighlightStyleExpression } from '../HighlightStyle';\nimport type { HighlightPainter } from '../HighlightPainter';\nimport { createBaseRenderer, type RendererImplementation } from '../Renderer';\nimport type { Highlight } from '../Highlight';\nimport type { TextAnnotation } from 'src/model';\n\nimport './canvasRenderer.css';\n\nconst createCanvas = () => {\n const canvas = document.createElement('canvas');\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n canvas.className = 'r6o-canvas-highlight-layer bg';\n return canvas;\n}\n\nconst resetCanvas = (canvas: HTMLCanvasElement, highres?: boolean) => {\n canvas.width = highres ? 2 * window.innerWidth : window.innerWidth;\n canvas.height = highres ? 2 * window.innerHeight : window.innerHeight;\n\n if (highres) {\n // Note that resizing the canvas resets the context\n const context = canvas.getContext('2d');\n context.scale(2, 2);\n context.translate(0.5, 0.5);\n }\n}\n\n/**\n * @deprecated Canvas renderer is deprecated and will be removed in the next major release. Please use 'span' renderer instead.\n */\nconst createRenderer = (container: HTMLElement): RendererImplementation => {\n console.warn('WARNING! Canvas renderer is deprecated and will be removed in the next major release. Please use the default \"SPANS\" renderer instead.');\n\n container.classList.add('r6o-annotatable');\n\n const canvas = createCanvas();\n const ctx = canvas.getContext('2d');\n\n document.body.appendChild(canvas);\n\n const redraw = (\n highlights: Highlight[],\n viewportBounds: ViewportBounds,\n currentStyle?: HighlightStyleExpression,\n currentPainter?: HighlightPainter\n ) => requestAnimationFrame(() => {\n\n const { width, height } = canvas;\n\n // New render loop - clear canvases\n ctx.clearRect(-0.5, -0.5, width + 1, height + 1);\n\n if (currentPainter)\n currentPainter.clear();\n\n const { top, left } = viewportBounds;\n\n /**\n * Highlights rendering on the canvas is an order-sensitive operation.\n * The later the highlight is rendered, the higher it will be in the visual stack.\n *\n * By default, we should expect that the newer highlight\n * will be rendered over the older one\n */\n const highlightsByCreation = [...highlights].sort((highlightA, highlightB) => {\n const { annotation: { target: { created: createdA } } } = highlightA;\n const { annotation: { target: { created: createdB } } } = highlightB;\n return createdA.getTime() - createdB.getTime();\n });\n\n highlightsByCreation.forEach(h => {\n const base: HighlightStyle = currentStyle\n ? typeof currentStyle === 'function'\n ? currentStyle(h.annotation, h.state)\n : currentStyle\n : h.state?.selected\n ? DEFAULT_SELECTED_STYLE\n : DEFAULT_STYLE;\n\n // Trigger the custom painter (if any) as a side-effect\n const style = currentPainter ? currentPainter.paint(h, viewportBounds) || base : base;\n\n // Offset annotation rects by current scroll position\n const offsetRects = h.rects.map(({ x, y, width, height }) => ({\n x: x + left,\n y: y + top,\n width,\n height\n }));\n\n ctx.fillStyle = style.fill;\n ctx.globalAlpha = style.fillOpacity || 1;\n\n offsetRects.forEach(({ x, y, width, height }) =>\n ctx.fillRect(x, y, width, height)\n );\n\n if (style.underlineColor) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = style.underlineColor;\n ctx.lineWidth = style.underlineThickness ?? 1;\n\n // Place the underline below the highlighted text + an optional offset\n const underlineOffset = style.underlineOffset ?? 0;\n\n offsetRects.forEach(({ x, y, width, height }) => {\n ctx.beginPath();\n ctx.moveTo(x, y + height + underlineOffset);\n ctx.lineTo(x + width, y + height + underlineOffset);\n\n // Draw the Path\n ctx.stroke();\n });\n }\n });\n });\n\n const onResize = debounce(() => resetCanvas(canvas), 10);\n\n window.addEventListener('resize', onResize);\n\n const setVisible = (visible: boolean) => {\n console.log('setVisible not implemented on Canvas renderer');\n }\n\n const destroy = () => {\n canvas.remove();\n\n onResize.clear();\n window.removeEventListener('resize', onResize);\n }\n\n return {\n destroy,\n setVisible,\n redraw\n };\n\n};\n\nexport const createCanvasRenderer = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n viewport: ViewportState\n) => createBaseRenderer(container, state, viewport, createRenderer(container));\n","var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return\"string\"==typeof r?r.length>0:\"number\"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?\"0\"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,p=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,v=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,m=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},\"hex\"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},\"rgb\"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u=\"deg\"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},\"hsl\"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},\"rgb\"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},\"hsl\"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},\"hsv\"]]},N=function(r,t){for(var n=0;n<t.length;n++){var e=t[n][0](r);if(e)return[e,t[n][1]]}return[null,void 0]},x=function(r){return\"string\"==typeof r?N(r.trim(),y.string):\"object\"==typeof r&&null!==r?N(r,y.object):[null,void 0]},I=function(r){return x(r)[1]},M=function(r,t){var n=c(r);return{h:n.h,s:e(n.s+100*t,0,100),l:n.l,a:n.a}},H=function(r){return(299*r.r+587*r.g+114*r.b)/1e3/255},$=function(r,t){var n=c(r);return{h:n.h,s:n.s,l:e(n.l+100*t,0,100),a:n.a}},j=function(){function r(r){this.parsed=x(r)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return r.prototype.isValid=function(){return null!==this.parsed},r.prototype.brightness=function(){return n(H(this.rgba),2)},r.prototype.isDark=function(){return H(this.rgba)<.5},r.prototype.isLight=function(){return H(this.rgba)>=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):\"\",\"#\"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?\"rgba(\"+t+\", \"+n+\", \"+e+\", \"+u+\")\":\"rgb(\"+t+\", \"+n+\", \"+e+\")\";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?\"hsla(\"+t+\", \"+n+\"%, \"+e+\"%, \"+u+\")\":\"hsl(\"+t+\", \"+n+\"%, \"+e+\"%)\";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return\"number\"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return\"number\"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","import type { ViewportState } from '@annotorious/core';\nimport { colord } from 'colord';\nimport type { HighlightPainter } from '../HighlightPainter';\nimport type { TextAnnotatorState } from 'src/state';\nimport type { ViewportBounds } from '../viewport';\nimport { DEFAULT_SELECTED_STYLE, DEFAULT_STYLE } from '../HighlightStyle';\nimport type { HighlightStyle, HighlightStyleExpression } from '../HighlightStyle';\nimport { type RendererImplementation, createBaseRenderer } from '../Renderer';\nimport type { Highlight } from '../Highlight';\nimport type { TextAnnotation } from 'src/model';\n\nconst toCSS = (s?: HighlightStyle) => {\n const backgroundColor = colord(s?.fill || DEFAULT_STYLE.fill)\n .alpha(s?.fillOpacity === undefined ? DEFAULT_STYLE.fillOpacity : s.fillOpacity)\n .toHex();\n\n const rules = [\n `background-color:${backgroundColor}`,\n s?.underlineThickness ? `text-decoration:underline` : undefined,\n s?.underlineColor ? `text-decoration-color:${s.underlineColor}` : undefined,\n s?.underlineOffset ? `text-underline-offset:${s.underlineOffset}px` : undefined,\n s?.underlineThickness ? `text-decoration-thickness:${s.underlineThickness}px` : undefined\n ].filter(Boolean);\n\n return rules.join(';');\n}\n\nexport const createRenderer = (): RendererImplementation => {\n const elem = document.createElement('style');\n document.getElementsByTagName('head')[0].appendChild(elem);\n\n let currentRendered = new Set<string>();\n\n const redraw = (\n highlights: Highlight[],\n viewportBounds: ViewportBounds,\n currentStyle?: HighlightStyleExpression,\n painter?: HighlightPainter\n ) => {\n if (painter)\n painter.clear();\n\n // Next set of rendered annotation IDs and selections\n const nextRendered = new Set(highlights.map(h => h.annotation.id));\n\n // Annotations currently in this stylesheet that no longer need rendering\n const toRemove = Array.from(currentRendered).filter(id => !nextRendered.has(id));\n\n // For simplicity, re-generate the whole stylesheet\n const updatedCSS = highlights.map(h => {\n const base = currentStyle\n ? typeof currentStyle === 'function'\n ? currentStyle(h.annotation, h.state)\n : currentStyle\n : h.state?.selected ? DEFAULT_SELECTED_STYLE : DEFAULT_STYLE;\n\n // Trigger the custom painter (if any) as a side-effect\n const style = painter ? painter.paint(h, viewportBounds) || base : base;\n\n return `::highlight(_${h.annotation.id}) { ${toCSS(style)} }`;\n });\n\n elem.innerHTML = updatedCSS.join('\\n');\n\n // After we have the styles, we need to update the Highlights.\n // Note that the (experimental) CSS Custom Highlight API is not yet\n // available in TypeScript!\n\n // @ts-ignore\n CSS.highlights.clear();\n // toRemove.forEach(id => CSS.highlights.delete(`_${id}`));\n\n // Could be improved further by (re-)setting only annotations that\n // have changes.\n highlights.forEach(({ annotation }) => {\n const ranges = annotation.target.selector.map(s => s.range);\n\n // @ts-ignore\n const highlights = new Highlight(...ranges);\n\n // @ts-ignore\n CSS.highlights.set(`_${annotation.id}`, highlights);\n });\n\n currentRendered = nextRendered;\n }\n\n const setVisible = (visible: boolean) => {\n console.log('setVisible not implemented on CSS Custom Highlights renderer');\n }\n\n const destroy = () => {\n // Clear all highlights from the Highlight Registry\n // @ts-ignore\n CSS.highlights.clear();\n\n // Remove the stylesheet\n elem.remove();\n }\n\n return {\n destroy,\n setVisible,\n redraw\n };\n\n}\n\nexport const createHighlightsRenderer = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n viewport: ViewportState\n) => createBaseRenderer(container, state, viewport, createRenderer());\n","var has = Object.prototype.hasOwnProperty;\n\nexport function dequal(foo, bar) {\n\tvar ctor, len;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n","\nimport type { Highlight } from './Highlight';\nimport { DEFAULT_SELECTED_STYLE, DEFAULT_STYLE } from './HighlightStyle';\nimport type { HighlightStyle, HighlightStyleExpression } from './HighlightStyle';\nimport type { ViewportBounds } from './viewport';\n\nexport interface HighlightPainter {\n\n clear(): void;\n\n destroy(): void;\n\n paint(highlight: Highlight, viewportBounds: ViewportBounds): HighlightStyle;\n\n reset(): void;\n\n}\n\n/** Helper **/\nexport const paint = (\n highlight: Highlight,\n viewportBounds: ViewportBounds,\n style?: HighlightStyleExpression, \n painter?: HighlightPainter,\n zIndex?: number\n) => {\n const base: HighlightStyle = style \n ? typeof style === 'function' \n ? style(highlight.annotation, highlight.state, zIndex) || (\n highlight.state?.selected ? DEFAULT_SELECTED_STYLE : DEFAULT_STYLE\n )\n : style \n : highlight.state?.selected \n ? DEFAULT_SELECTED_STYLE \n : DEFAULT_STYLE;\n\n // Trigger the custom painter (if any) as a side-effect\n return painter ? painter.paint(highlight, viewportBounds) || base : base;\n}","import { colord } from 'colord';\nimport { DEFAULT_STYLE, type HighlightStyle } from '../HighlightStyle';\n\nexport const getBackgroundColor = (style?: HighlightStyle) => {\n if (style?.fillOpacity !== undefined) {\n // User-defined opacity: compute with user-defined fill or default\n return colord(style?.fill || DEFAULT_STYLE.fill)\n .alpha(style.fillOpacity)\n .toHex();\n } else if (!style?.fill) {\n // Neither fill nor opacity - default\n return colord(DEFAULT_STYLE.fill).alpha(DEFAULT_STYLE.fillOpacity).toHex();\n } else {\n // User defined fill, no opacity. Just pass through whatever the user \n // provided (incl. oklch colors, etc.)\n return style.fill;\n }\n}","import { dequal } from 'dequal/lite';\nimport type { ViewportState } from '@annotorious/core';\nimport type { TextAnnotation } from '../../model';\nimport type { Rect, TextAnnotatorState } from '../../state';\nimport { type HighlightPainter, paint } from '../HighlightPainter';\nimport type { ViewportBounds } from '../viewport';\nimport { createBaseRenderer, type RendererFactory, type RendererImplementation } from '../Renderer';\nimport type { Highlight } from '../Highlight';\nimport type { HighlightStyleExpression } from '../HighlightStyle';\nimport { getBackgroundColor } from './color';\n\nimport './spansRenderer.css';\n\nconst computeZIndex = (rect: Rect, all: Highlight[]): number => {\n const intersects = (a: Rect, b: Rect): boolean => (\n a.x <= b.x + b.width && a.x + a.width >= b.x &&\n a.y <= b.y + b.height && a.y + a.height >= b.y\n )\n\n const getLength = (h: Highlight) => \n h.rects.reduce((total, rect) => total + rect.width, 0);\n\n // Any highlights that intersect this rect, sorted by total length\n const intersecting = all.filter(({ rects }) => rects.some(r => intersects(rect, r)));\n intersecting.sort((a, b) => getLength(b) - getLength(a));\n\n return intersecting.findIndex(h => h.rects.includes(rect));\n}\n\nconst createRenderer = (container: HTMLElement): RendererImplementation => {\n\n container.classList.add('r6o-annotatable');\n\n const highlightLayer = document.createElement('div');\n highlightLayer.className = 'r6o-span-highlight-layer';\n\n container.insertBefore(highlightLayer, container.firstChild);\n\n // Currently rendered highlights\n let currentRendered: Highlight[] = [];\n\n const redraw = (\n highlights: Highlight[],\n viewportBounds: ViewportBounds,\n currentStyle?: HighlightStyleExpression,\n painter?: HighlightPainter,\n lazy?: boolean\n ) => {\n const noChanges = dequal(currentRendered, highlights);\n\n // If there are no changes and rendering is set to lazy\n // Don't redraw the SPANs - but redraw the painter, if any!\n const shouldRedraw = !(noChanges && lazy);\n\n if (!painter && !shouldRedraw) return;\n\n if (shouldRedraw)\n highlightLayer.innerHTML = '';\n\n /**\n * Highlights rendering in the span highlight layer is an order-sensitive operation.\n * The later the highlight is rendered, the higher it will be in the visual stack.\n *\n * By default, we should expect that the newer highlight\n * will be rendered over the older one\n */\n const sorted = [...highlights].sort((highlightA, highlightB) => {\n const { annotation: { target: { created: createdA } } } = highlightA;\n const { annotation: { target: { created: createdB } } } = highlightB;\n return createdA && createdB ? createdA.getTime() - createdB.getTime() : 0;\n });\n\n sorted.forEach(highlight => {\n highlight.rects.map(rect => {\n const zIndex = computeZIndex(rect, highlights);\n const style = paint(highlight, viewportBounds, currentStyle, painter, zIndex);\n\n if (shouldRedraw) {\n const span = document.createElement('span');\n span.className = 'r6o-annotation';\n span.dataset.annotation = highlight.annotation.id;\n\n span.style.left = `${rect.x}px`;\n span.style.top = `${rect.y}px`;\n span.style.width = `${rect.width}px`;\n span.style.height = `${rect.height}px`;\n\n span.style.backgroundColor = getBackgroundColor(style);\n\n if (style.underlineStyle)\n span.style.borderStyle = style.underlineStyle;\n\n if (style.underlineColor)\n span.style.borderColor = style.underlineColor;\n\n if (style.underlineThickness)\n span.style.borderBottomWidth = `${style.underlineThickness}px`;\n\n if (style.underlineOffset)\n span.style.paddingBottom = `${style.underlineOffset}px`;\n\n highlightLayer.appendChild(span);\n }\n });\n });\n\n currentRendered = highlights;\n }\n\n const setVisible = (visible: boolean) => {\n if (visible)\n highlightLayer.classList.remove('hidden');\n else\n highlightLayer.classList.add('hidden');\n }\n\n const destroy = () => {\n highlightLayer.remove();\n }\n\n return {\n destroy,\n redraw,\n setVisible\n };\n\n}\n\nexport const createSpansRenderer: RendererFactory = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n viewport: ViewportState\n) => createBaseRenderer(container, state, viewport, createRenderer(container));\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","import { v4 as uuidv4 } from 'uuid';\nimport {\n type FormatAdapter,\n type ParseResult,\n parseW3CBodies,\n parseW3CUser,\n serializeW3CBodies\n} from '@annotorious/core';\nimport type { TextAnnotation, TextAnnotationTarget, TextSelector } from '../core';\nimport type { W3CTextAnnotation, W3CTextAnnotationTarget, W3CTextSelector } from '../w3c';\nimport { getQuoteContext } from '../../utils';\n\nexport type W3CTextFormatAdapter<I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation> = FormatAdapter<I, E>;\n\n/**\n * @param source - the IRI of the annotated content\n * @param container - the HTML container of the annotated content,\n * Required to locate the content's `range` within the DOM\n */\nexport const W3CTextFormat =<I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n source: string,\n container?: HTMLElement\n): W3CTextFormatAdapter<I, E> => ({\n parse: (serialized) => parseW3CTextAnnotation(serialized),\n serialize: (annotation) => serializeW3CTextAnnotation(annotation, source, container)\n});\n\nconst isTextSelector = (selector: Partial<TextSelector>): selector is TextSelector =>\n selector.quote !== undefined && selector.start !== undefined && selector.end !== undefined;\n\nconst parseW3CTextTargets = (annotation: W3CTextAnnotation) => {\n const {\n id: annotationId,\n creator,\n created,\n modified,\n target\n } = annotation;\n\n const w3cTargets = Array.isArray(target) ? target : [target];\n if (w3cTargets.length === 0) {\n return { error: Error(`No targets found for annotation: ${annotation.id}`) };\n }\n\n const parsed: TextAnnotationTarget = {\n creator: parseW3CUser(creator),\n created: created ? new Date(created) : undefined,\n updated: modified ? new Date(modified) : undefined,\n annotation: annotationId,\n selector: [],\n // @ts-expect-error: `styleClass` is not part of the core `TextAnnotationTarget` type\n styleClass: 'styleClass' in w3cTargets[0] ? w3cTargets[0].styleClass : undefined\n };\n\n for (const w3cTarget of w3cTargets) {\n const w3cSelectors = Array.isArray(w3cTarget.selector) ? w3cTarget.selector : [w3cTarget.selector];\n\n const selector = w3cSelectors.reduce<Partial<TextSelector>>((s, w3cSelector) => {\n switch (w3cSelector.type) {\n case 'TextQuoteSelector':\n s.quote = w3cSelector.exact;\n break;\n case 'TextPositionSelector':\n s.start = w3cSelector.start;\n s.end = w3cSelector.end;\n break;\n }\n return s;\n }, {});\n\n if (isTextSelector(selector)) {\n parsed.selector.push(\n {\n ...selector,\n id: w3cTarget.id,\n // @ts-expect-error: `scope` is not part of the core `TextSelector` type\n scope: w3cTarget.scope\n }\n );\n } else {\n const missingTypes = [\n !selector.start ? 'TextPositionSelector' : undefined,\n !selector.quote ? 'TextQuoteSelector' : undefined\n ].filter(Boolean);\n\n return { error: Error(`Missing selector types: ${missingTypes.join(' and ')} for annotation: ${annotation.id}`) };\n }\n }\n\n return { parsed };\n};\n\nexport const parseW3CTextAnnotation = <I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n annotation: E\n): ParseResult<I> => {\n const annotationId = annotation.id || uuidv4();\n\n const {\n creator,\n created,\n modified,\n body,\n ...rest\n } = annotation;\n\n const bodies = parseW3CBodies(body, annotationId);\n const target = parseW3CTextTargets(annotation);\n\n const parseResult = 'error' in target\n ? { error: target.error }\n : {\n parsed: {\n ...rest,\n id: annotationId,\n bodies,\n target: target.parsed\n }\n };\n\n return parseResult as ParseResult<I>;\n\n};\n\nexport const serializeW3CTextAnnotation = <I extends TextAnnotation = TextAnnotation, E extends W3CTextAnnotation = W3CTextAnnotation>(\n annotation: I,\n source: string,\n container?: HTMLElement\n): E => {\n const { bodies, target, ...rest } = annotation;\n\n const {\n selector,\n creator,\n created,\n updated,\n ...targetRest\n } = target;\n\n const w3cTargets = selector.map((s): W3CTextAnnotationTarget => {\n const { id, quote, start, end, range } = s;\n\n const quoteSelector: W3CTextSelector = {\n type: 'TextQuoteSelector',\n exact: quote\n }\n\n if (container) {\n const { prefix, suffix } = getQuoteContext(range, container);\n quoteSelector.prefix = prefix;\n quoteSelector.suffix = suffix;\n }\n\n const positionSelector: W3CTextSelector = {\n type: 'TextPositionSelector',\n start,\n end\n }\n\n return {\n ...targetRest,\n id,\n // @ts-expect-error: `scope` is not part of the core `TextSelector` type\n scope: 'scope' in s ? s.scope : undefined,\n source,\n selector: [quoteSelector, positionSelector]\n };\n });\n\n return {\n ...rest,\n '@context': 'http://www.w3.org/ns/anno.jsonld',\n id: annotation.id,\n type: 'Annotation',\n body: serializeW3CBodies(annotation.bodies),\n creator,\n created: created?.toISOString(),\n modified: updated?.toISOString(),\n target: w3cTargets\n } as unknown as E;\n\n};\n","import type { Color, PresenceProvider, PresentUser } from '@annotorious/core';\nimport type { AnnotationRects } from '../state';\nimport type { HighlightStyle, HighlightPainter } from '../highlight';\nimport type { PresencePainterOptions } from '../presence';\nimport type { ViewportBounds } from '../highlight/viewport';\n\nimport './PresencePainter.css';\n\nconst createCanvas = () => {\n const canvas = document.createElement('canvas');\n\n // Retina resolution for crisp font rendering\n canvas.width = 2 * window.innerWidth;\n canvas.height = 2 * window.innerHeight;\n canvas.className = 'r6o-presence-layer';\n\n const context = canvas.getContext('2d');\n context.scale(2, 2);\n context.translate(0.5, 0.5);\n\n return canvas;\n}\n\nexport const createPresencePainter = (\n provider: PresenceProvider, \n opts: PresencePainterOptions = {}\n): HighlightPainter => {\n\n const canvas = createCanvas();\n\n const ctx = canvas.getContext('2d');\n\n document.body.appendChild(canvas);\n\n const trackedAnnotations = new Map<string, PresentUser>();\n\n const getAnnotationsForUser = (p: PresentUser) =>\n Array.from(trackedAnnotations.entries())\n .filter(([id, user]) => user.presenceKey === p.presenceKey)\n .map(([id, _]) => id);\n\n provider.on('selectionChange', (p: PresentUser, selection: string[] | null) => {\n // Remove this user's previous selection\n const currentIds = getAnnotationsForUser(p);\n currentIds.forEach(id => trackedAnnotations.delete(id));\n\n // Set new selection (if any)\n if (selection)\n selection.forEach(id => trackedAnnotations.set(id, p));\n }); \n\n const clear = () => {\n const { width, height } = canvas;\n ctx.clearRect(-0.5, -0.5, width + 1, height + 1);\n }\n\n const paint = (\n highlight: AnnotationRects, \n viewportBounds: ViewportBounds,\n isSelected?: boolean\n ): HighlightStyle | undefined => {\n if (opts.font)\n ctx.font = opts.font;\n\n const user = trackedAnnotations.get(highlight.annotation.id);\n if (user) {\n // Draw cursor + label to the presence canvas\n const { height } = highlight.rects[0];\n const x = highlight.rects[0].x + viewportBounds.left;\n const y = highlight.rects[0].y + viewportBounds.top;\n\n // Draw presence indicator\n ctx.fillStyle = user.appearance.color;\n ctx.fillRect(x - 2, y - 2.5, 2, height + 5);\n\n // Draw name label\n const metrics = ctx.measureText(user.appearance.label);\n const labelWidth = metrics.width + 6;\n const labelHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent + 8;\n \n // Sigh... different between FF and Chrome\n const paddingBottom = metrics.fontBoundingBoxAscent ? 8 : 6.5;\n\n ctx.fillRect(x - 2, y - 2.5 - labelHeight, labelWidth, labelHeight);\n \n ctx.fillStyle = '#fff';\n ctx.fillText(user.appearance.label, x + 1, y - paddingBottom);\n\n // Return modfied style for the renderer\n return { \n fill: user.appearance.color as Color,\n fillOpacity: isSelected ? 0.45 : 0.18\n }\n }\n }\n \n const reset = () => {\n canvas.width = 2 * window.innerWidth;\n canvas.height = 2 * window.innerHeight;\n\n // Note that resizing the canvas resets the context\n const context = canvas.getContext('2d');\n context.scale(2, 2);\n context.translate(0.5, 0.5);\n }\n\n const destroy = () => {\n canvas.remove();\n }\n\n return {\n clear,\n destroy,\n paint,\n reset\n }\n \n}\n","\n/**\n * Rearranges items so that all items in the [left, k] are the smallest.\n * The k-th element will have the (k - left + 1)-th smallest value in [left, right].\n *\n * @template T\n * @param {T[]} arr the array to partially sort (in place)\n * @param {number} k middle index for partial sorting (as defined above)\n * @param {number} [left=0] left index of the range to sort\n * @param {number} [right=arr.length-1] right index\n * @param {(a: T, b: T) => number} [compare = (a, b) => a - b] compare function\n */\nexport default function quickselect(arr, k, left = 0, right = arr.length - 1, compare = defaultCompare) {\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(arr, k, newLeft, newRight, compare);\n }\n\n const t = arr[k];\n let i = left;\n /** @type {number} */\n let j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\n/**\n * @template T\n * @param {T[]} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\n/**\n * @template T\n * @param {T} a\n * @param {T} b\n * @returns {number}\n */\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n constructor(maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all() {\n return this._all(this.data, []);\n }\n\n search(bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n collides(bbox) {\n let node = this.data;\n\n if (!intersects(bbox, node)) return false;\n\n const nodesToSearch = [];\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n }\n\n load(data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert(item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n }\n\n clear() {\n this.data = createNode([]);\n return this;\n }\n\n remove(item, equalsFn) {\n if (!item) return this;\n\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n let i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toBBox(item) { return item; }\n\n compareMinX(a, b) { return a.minX - b.minX; }\n compareMinY(a, b) { return a.minY - b.minY; }\n\n toJSON() { return this.data; }\n\n fromJSON(data) {\n this.data = data;\n return this;\n }\n\n _all(node, result) {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n }\n\n _build(items, left, right, height) {\n\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n _insert(item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n _split(insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n const splitIndex = this._chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n }\n\n _splitRoot(node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n _chooseSplitIndex(node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n _chooseSplitAxis(node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this._allDistMargin(node, m, M, compareMinX);\n const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n _adjustParentBBoxes(bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n _condense(path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","export let createNanoEvents = () => ({\n emit(event, ...args) {\n for (\n let callbacks = this.events[event] || [],\n i = 0,\n length = callbacks.length;\n i < length;\n i++\n ) {\n callbacks[i](...args)\n }\n },\n events: {},\n on(event, cb) {\n ;(this.events[event] ||= []).push(cb)\n return () => {\n this.events[event] = this.events[event]?.filter(i => cb !== i)\n }\n }\n})\n","import RBush from 'rbush';\nimport type { Store } from '@annotorious/core';\nimport { createNanoEvents, type Unsubscribe } from 'nanoevents';\n\nimport type { TextAnnotation, TextAnnotationTarget } from '../model';\nimport {\n isRevived,\n reviveSelector,\n mergeClientRects,\n getHighlightClientRects,\n toParentBounds\n} from '../utils';\nimport type { AnnotationRects } from './TextAnnotationStore';\n\ninterface IndexedHighlightRect {\n\n minX: number;\n\n minY: number;\n\n maxX: number;\n\n maxY: number;\n\n annotation: {\n \n id: string;\n\n rects: DOMRect[];\n\n }\n\n}\n\nexport interface SpatialTreeEvents {\n\n recalculate(): void;\n\n}\n\nexport const createSpatialTree = <T extends TextAnnotation>(\n store: Store<T>,\n container: HTMLElement,\n hMergeTolerance?: number,\n vMergeTolerance?: number\n) => {\n\n const tree = new RBush<IndexedHighlightRect>();\n\n const index = new Map<string, IndexedHighlightRect[]>();\n\n const emitter = createNanoEvents<SpatialTreeEvents>();\n\n // Helper: converts a single text annotation target to a list of hightlight rects\n const toItems = (target: TextAnnotationTarget, offset: DOMRect): IndexedHighlightRect[] => {\n const rects = target.selector.flatMap(s => {\n const revivedRange = isRevived([s]) ? s.range : reviveSelector(s, container).range;\n return getHighlightClientRects(revivedRange);\n });\n\n /**\n * Offset the merged client rects so that coords\n * are relative to the parent container\n */\n const merged = mergeClientRects(rects, hMergeTolerance, vMergeTolerance)\n .map(rect => toParentBounds(rect, offset));\n\n return merged.map(rect => {\n const { x, y, width, height } = rect;\n\n return {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height,\n annotation: {\n id: target.annotation,\n rects: merged\n }\n }\n });\n }\n\n const all = () => [...index.values()];\n\n const clear = () => {\n tree.clear();\n index.clear();\n }\n\n const insert = (target: TextAnnotationTarget) => {\n const rects = toItems(target, container.getBoundingClientRect());\n if (rects.length === 0) return;\n\n rects.forEach(rect => tree.insert(rect));\n index.set(target.annotation, rects);\n }\n\n const remove = (target: TextAnnotationTarget) => {\n const rects = index.get(target.annotation);\n if (rects) {\n rects.forEach(rect => tree.remove(rect));\n index.delete(target.annotation);\n }\n }\n\n const update = (target: TextAnnotationTarget) => {\n remove(target);\n insert(target);\n }\n\n const set = (targets: TextAnnotationTarget[], replace: boolean = true) => {\n if (replace)\n clear();\n\n const offset = container.getBoundingClientRect();\n\n const rectsByTarget = targets.map(target => ({ target, rects: toItems(target, offset) }));\n rectsByTarget.forEach(({ target, rects }) => {\n if (rects.length > 0)\n index.set(target.annotation, rects)\n });\n\n const allRects = rectsByTarget.flatMap(({ rects }) => rects);\n tree.load(allRects);\n }\n\n const getAt = (x: number, y: number, all = false): string[] => {\n const hits = tree.search({\n minX: x,\n minY: y,\n maxX: x,\n maxY: y\n });\n\n const area = (rect: IndexedHighlightRect) =>\n rect.annotation.rects.reduce((area, r) =>\n area + r.width * r.height, 0);\n \n // Get smallest rect\n if (hits.length > 0) {\n hits.sort((a, b) => area(a) - area(b));\n return all ? hits.map(h => h.annotation.id) : [ hits[0].annotation.id ];\n } else {\n return [];\n }\n }\n\n const getAnnotationBounds = (id: string): DOMRect => {\n const rects = getAnnotationRects(id);\n\n if (rects.length === 0)\n return undefined;\n\n let left = rects[0].left;\n let top = rects[0].top;\n let right = rects[0].right;\n let bottom = rects[0].bottom;\n\n for (let i = 1; i < rects.length; i++) {\n const rect = rects[i];\n\n left = Math.min(left, rect.left);\n top = Math.min(top, rect.top);\n right = Math.max(right, rect.right);\n bottom = Math.max(bottom, rect.bottom);\n }\n\n return new DOMRect(left, top, right - left, bottom - top);\n }\n\n const getAnnotationRects = (id: string): DOMRect[] => {\n const indexed = index.get(id);\n if (indexed) {\n // Reminder: *each* IndexedHighlightRect stores *all*\n // DOMRects for the annotation for convenience\n return indexed[0].annotation.rects;\n } else {\n return [];\n }\n }\n\n const getIntersecting = (\n minX: number, \n minY: number, \n maxX: number, \n maxY: number,\n ): AnnotationRects<T>[] => {\n // All rects in this area, regardless of annotation\n const rects = tree.search({ minX, minY, maxX, maxY });\n\n // Distinct annotation IDs\n const annotationIds = new Set(rects.map(rect => rect.annotation.id));\n\n // Resolve annotation IDs. Note that the tree could be slightly out of sync (because \n // it updates by listening to changes, just like anyone else)\n return Array.from(annotationIds).map(annotationId => ({\n annotation: store.getAnnotation(annotationId),\n rects: getAnnotationRects(annotationId)\n })).filter(t => Boolean(t.annotation));\n }\n\n const size = () => tree.all().length;\n\n const recalculate = () => {\n set(store.all().map(a => a.target), true);\n emitter.emit('recalculate');\n };\n\n const on = <E extends keyof SpatialTreeEvents>(event: E, callback: SpatialTreeEvents[E]): Unsubscribe => emitter.on(event, callback);\n\n return {\n all,\n clear,\n getAt,\n getAnnotationBounds,\n getAnnotationRects,\n getIntersecting,\n insert,\n recalculate,\n remove,\n set,\n size,\n update,\n on\n }\n\n}\n","import type { Filter, Store, ViewportState } from '@annotorious/core';\nimport { \n createHoverState, \n createSelectionState, \n createStore, \n Origin,\n createViewportState\n} from '@annotorious/core';\nimport type { \n AnnotatorState, \n SelectionState, \n HoverState, \n} from '@annotorious/core';\n\nimport { createSpatialTree, type SpatialTreeEvents } from './spatialTree';\nimport type { TextAnnotation, TextAnnotationTarget } from '../model';\nimport type { AnnotationRects, TextAnnotationStore } from './TextAnnotationStore';\nimport { isRevived, reviveAnnotation, reviveTarget } from '../utils';\nimport type { TextAnnotatorOptions } from '../TextAnnotatorOptions';\n\nexport interface TextAnnotatorState<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> extends AnnotatorState<I, E> {\n\n store: TextAnnotationStore<I>;\n\n selection: SelectionState<I, E>;\n\n hover: HoverState<I>;\n\n viewport: ViewportState;\n\n}\n\nexport const createTextAnnotatorState = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n container: HTMLElement,\n opts: TextAnnotatorOptions<I, E>\n): TextAnnotatorState<I, E> => {\n\n const store: Store<I> = createStore<I>();\n\n const tree = createSpatialTree(store, container, opts.mergeHighlights?.horizontalTolerance, opts.mergeHighlights?.verticalTolerance);\n\n const selection = createSelectionState<I, E>(store, opts.userSelectAction, opts.adapter);\n\n const hover = createHoverState(store);\n\n const viewport = createViewportState();\n\n // Wrap store interface to intercept annotations and revive DOM ranges, if needed\n const addAnnotation = (annotation: I, origin = Origin.LOCAL): boolean => {\n const revived = reviveAnnotation(annotation, container);\n\n const isValid = isRevived(revived.target.selector);\n if (isValid)\n store.addAnnotation(revived, origin); \n\n return isValid;\n }\n\n const bulkAddAnnotations = (\n annotations: I[], \n replace = true, \n origin = Origin.LOCAL\n ): I[] => {\n const revived = annotations.map(a => reviveAnnotation<I>(a, container));\n\n // Initial page load might take some time. Retry for more robustness.\n const couldNotRevive = revived.filter(a => !isRevived(a.target.selector));\n store.bulkAddAnnotations(revived, replace, origin);\n\n return couldNotRevive;\n }\n \n const bulkUpsertAnnotations = (\n annotations: I[], \n origin = Origin.LOCAL\n ): I[] => {\n const revived = annotations.map(a => reviveAnnotation(a, container));\n\n // Initial page load might take some time. Retry for more robustness.\n const couldNotRevive = revived.filter(a => !isRevived(a.target.selector));\n \n revived.forEach(a => {\n if (store.getAnnotation(a.id))\n store.updateAnnotation(a, origin);\n else \n store.addAnnotation(a, origin);\n })\n\n return couldNotRevive;\n }\n\n const updateTarget = (target: TextAnnotationTarget, origin = Origin.LOCAL) => {\n const revived = reviveTarget(target, container);\n store.updateTarget(revived, origin);\n }\n\n const bulkUpdateTargets = (targets: TextAnnotationTarget[], origin = Origin.LOCAL) => {\n const revived = targets.map(t => reviveTarget(t, container));\n store.bulkUpdateTargets(revived, origin);\n }\n\n function getAt(x: number, y: number, all: true, filter?: Filter): I[] | undefined;\n function getAt(x: number, y: number, all: false, filter?: Filter): I | undefined;\n function getAt(x: number, y: number, all?: boolean, filter?: Filter): I | I[] | undefined {\n const getAll = all || Boolean(filter);\n\n const annotations = tree.getAt(x, y, getAll).map(id => store.getAnnotation(id));\n\n const filtered = filter ? annotations.filter(filter) : annotations;\n\n if (filtered.length === 0)\n return undefined;\n\n return all ? filtered : filtered[0];\n }\n\n const getAnnotationBounds = (id: string): DOMRect | undefined => {\n const rects = tree.getAnnotationRects(id);\n return rects.length > 0 ? tree.getAnnotationBounds(id) : undefined;\n }\n\n const getIntersecting = (\n minX: number,\n minY: number,\n maxX: number,\n maxY: number,\n ): AnnotationRects<I>[] => tree.getIntersecting(minX, minY, maxX, maxY);\n\n const getAnnotationRects = (id: string): DOMRect[] => tree.getAnnotationRects(id);\n\n const recalculatePositions = () => tree.recalculate();\n const onRecalculatePositions = (callback: SpatialTreeEvents['recalculate']) => tree.on('recalculate', callback);\n\n store.observe(({ changes }) => {\n const deleted = (changes.deleted || []).filter(a => isRevived(a.target.selector));\n const created = (changes.created || []).filter(a => isRevived(a.target.selector));\n const updated = (changes.updated || []).filter(u => isRevived(u.newValue.target.selector));\n\n if (deleted?.length > 0)\n deleted.forEach(a => tree.remove(a.target));\n\n if (created.length > 0)\n tree.set(created.map(a => a.target), false);\n\n if (updated?.length > 0)\n updated.forEach(({ newValue }) => tree.update(newValue.target));\n });\n\n return {\n store: {\n ...store,\n addAnnotation,\n bulkAddAnnotations,\n bulkUpdateTargets,\n bulkUpsertAnnotations,\n getAnnotationBounds,\n getAnnotationRects,\n getIntersecting,\n getAt,\n recalculatePositions,\n onRecalculatePositions,\n updateTarget\n },\n selection,\n hover,\n viewport\n }\n\n}\n","/**! \n * hotkeys-js v3.13.15 \n * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies. \n * \n * Copyright (c) 2025 kenny wong <wowohoo@qq.com> \n * https://github.com/jaywcjlove/hotkeys-js.git \n * \n * @website: https://jaywcjlove.github.io/hotkeys-js\n \n * Licensed under the MIT license \n */\n\nconst isff = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase().indexOf('firefox') > 0 : false;\n\n/** Bind event */\nfunction addEvent(object, event, method, useCapture) {\n if (object.addEventListener) {\n object.addEventListener(event, method, useCapture);\n } else if (object.attachEvent) {\n object.attachEvent(\"on\".concat(event), method);\n }\n}\nfunction removeEvent(object, event, method, useCapture) {\n if (object.removeEventListener) {\n object.removeEventListener(event, method, useCapture);\n } else if (object.detachEvent) {\n object.detachEvent(\"on\".concat(event), method);\n }\n}\n\n/** Convert modifier keys to their corresponding key codes */\nfunction getMods(modifier, key) {\n const mods = key.slice(0, key.length - 1);\n for (let i = 0; i < mods.length; i++) mods[i] = modifier[mods[i].toLowerCase()];\n return mods;\n}\n\n/** Process the input key string and convert it to an array */\nfunction getKeys(key) {\n if (typeof key !== 'string') key = '';\n key = key.replace(/\\s/g, ''); // Match any whitespace character, including spaces, tabs, form feeds, etc.\n const keys = key.split(','); // Allow multiple shortcuts separated by ','\n let index = keys.lastIndexOf('');\n\n // Shortcut may include ',' — special handling needed\n for (; index >= 0;) {\n keys[index - 1] += ',';\n keys.splice(index, 1);\n index = keys.lastIndexOf('');\n }\n return keys;\n}\n\n/** Compare arrays of modifier keys */\nfunction compareArray(a1, a2) {\n const arr1 = a1.length >= a2.length ? a1 : a2;\n const arr2 = a1.length >= a2.length ? a2 : a1;\n let isIndex = true;\n for (let i = 0; i < arr1.length; i++) {\n if (arr2.indexOf(arr1[i]) === -1) isIndex = false;\n }\n return isIndex;\n}\n\n// Special Keys\nconst _keyMap = {\n backspace: 8,\n '⌫': 8,\n tab: 9,\n clear: 12,\n enter: 13,\n '↩': 13,\n return: 13,\n esc: 27,\n escape: 27,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n /// https://w3c.github.io/uievents/#events-keyboard-key-location\n arrowup: 38,\n arrowdown: 40,\n arrowleft: 37,\n arrowright: 39,\n del: 46,\n delete: 46,\n ins: 45,\n insert: 45,\n home: 36,\n end: 35,\n pageup: 33,\n pagedown: 34,\n capslock: 20,\n num_0: 96,\n num_1: 97,\n num_2: 98,\n num_3: 99,\n num_4: 100,\n num_5: 101,\n num_6: 102,\n num_7: 103,\n num_8: 104,\n num_9: 105,\n num_multiply: 106,\n num_add: 107,\n num_enter: 108,\n num_subtract: 109,\n num_decimal: 110,\n num_divide: 111,\n '⇪': 20,\n ',': 188,\n '.': 190,\n '/': 191,\n '`': 192,\n '-': isff ? 173 : 189,\n '=': isff ? 61 : 187,\n ';': isff ? 59 : 186,\n '\\'': 222,\n '{': 219,\n '}': 221,\n '[': 219,\n ']': 221,\n '\\\\': 220\n};\n\n// Modifier Keys\nconst _modifier = {\n // shiftKey\n '⇧': 16,\n shift: 16,\n // altKey\n '⌥': 18,\n alt: 18,\n option: 18,\n // ctrlKey\n '⌃': 17,\n ctrl: 17,\n control: 17,\n // metaKey\n '⌘': 91,\n cmd: 91,\n meta: 91,\n command: 91\n};\nconst modifierMap = {\n 16: 'shiftKey',\n 18: 'altKey',\n 17: 'ctrlKey',\n 91: 'metaKey',\n shiftKey: 16,\n ctrlKey: 17,\n altKey: 18,\n metaKey: 91\n};\nconst _mods = {\n 16: false,\n 18: false,\n 17: false,\n 91: false\n};\nconst _handlers = {};\n\n// F1~F12 special key\nfor (let k = 1; k < 20; k++) {\n _keyMap[\"f\".concat(k)] = 111 + k;\n}\n\n/** Record the pressed keys */\nlet _downKeys = [];\n/** Whether the window has already listened to the focus event */\nlet winListendFocus = null;\n/** Default hotkey scope */\nlet _scope = 'all';\n/** Map to record elements with bound events */\nconst elementEventMap = new Map();\n\n/** Return key code */\nconst code = x => _keyMap[x.toLowerCase()] || _modifier[x.toLowerCase()] || x.toUpperCase().charCodeAt(0);\nconst getKey = x => Object.keys(_keyMap).find(k => _keyMap[k] === x);\nconst getModifier = x => Object.keys(_modifier).find(k => _modifier[k] === x);\n\n/** Set or get the current scope (defaults to 'all') */\nfunction setScope(scope) {\n _scope = scope || 'all';\n}\n/** Get the current scope */\nfunction getScope() {\n return _scope || 'all';\n}\n/** Get the key codes of the currently pressed keys */\nfunction getPressedKeyCodes() {\n return _downKeys.slice(0);\n}\nfunction getPressedKeyString() {\n return _downKeys.map(c => getKey(c) || getModifier(c) || String.fromCharCode(c));\n}\nfunction getAllKeyCodes() {\n const result = [];\n Object.keys(_handlers).forEach(k => {\n _handlers[k].forEach(_ref => {\n let {\n key,\n scope,\n mods,\n shortcut\n } = _ref;\n result.push({\n scope,\n shortcut,\n mods,\n keys: key.split('+').map(v => code(v))\n });\n });\n });\n return result;\n}\n\n/** hotkey is effective only when filter return true */\nfunction filter(event) {\n const target = event.target || event.srcElement;\n const {\n tagName\n } = target;\n let flag = true;\n const isInput = tagName === 'INPUT' && !['checkbox', 'radio', 'range', 'button', 'file', 'reset', 'submit', 'color'].includes(target.type);\n // ignore: isContentEditable === 'true', <input> and <textarea> when readOnly state is false, <select>\n if (target.isContentEditable || (isInput || tagName === 'TEXTAREA' || tagName === 'SELECT') && !target.readOnly) {\n flag = false;\n }\n return flag;\n}\n\n/** Determine whether the pressed key matches a specific key, returns true or false */\nfunction isPressed(keyCode) {\n if (typeof keyCode === 'string') {\n keyCode = code(keyCode); // Convert to key code\n }\n return _downKeys.indexOf(keyCode) !== -1;\n}\n\n/** Loop through and delete all handlers with the specified scope */\nfunction deleteScope(scope, newScope) {\n let handlers;\n let i;\n\n // If no scope is specified, get the current scope\n if (!scope) scope = getScope();\n for (const key in _handlers) {\n if (Object.prototype.hasOwnProperty.call(_handlers, key)) {\n handlers = _handlers[key];\n for (i = 0; i < handlers.length;) {\n if (handlers[i].scope === scope) {\n const deleteItems = handlers.splice(i, 1);\n deleteItems.forEach(_ref2 => {\n let {\n element\n } = _ref2;\n return removeKeyEvent(element);\n });\n } else {\n i++;\n }\n }\n }\n }\n\n // If the current scope has been deleted, reset the scope to 'all'\n if (getScope() === scope) setScope(newScope || 'all');\n}\n\n/** Clear modifier keys */\nfunction clearModifier(event) {\n let key = event.keyCode || event.which || event.charCode;\n if (event.key && event.key.toLowerCase() === 'capslock') {\n // Ensure that when capturing keystrokes in modern browsers,\n // uppercase and lowercase letters (such as R and r) return the same key value.\n // https://github.com/jaywcjlove/hotkeys-js/pull/514\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n key = code(event.key);\n }\n const i = _downKeys.indexOf(key);\n\n // Remove the pressed key from the list\n if (i >= 0) {\n _downKeys.splice(i, 1);\n }\n // Special handling for the command key: fix the issue where keyup only triggers once for command combos\n if (event.key && event.key.toLowerCase() === 'meta') {\n _downKeys.splice(0, _downKeys.length);\n }\n\n // Clear modifier keys: shiftKey, altKey, ctrlKey, (command || metaKey)\n if (key === 93 || key === 224) key = 91;\n if (key in _mods) {\n _mods[key] = false;\n\n // Reset the modifier key status to false\n for (const k in _modifier) if (_modifier[k] === key) hotkeys[k] = false;\n }\n}\nfunction unbind(keysInfo) {\n // unbind(), unbind all keys\n if (typeof keysInfo === 'undefined') {\n Object.keys(_handlers).forEach(key => {\n Array.isArray(_handlers[key]) && _handlers[key].forEach(info => eachUnbind(info));\n delete _handlers[key];\n });\n removeKeyEvent(null);\n } else if (Array.isArray(keysInfo)) {\n // support like : unbind([{key: 'ctrl+a', scope: 's1'}, {key: 'ctrl-a', scope: 's2', splitKey: '-'}])\n keysInfo.forEach(info => {\n if (info.key) eachUnbind(info);\n });\n } else if (typeof keysInfo === 'object') {\n // support like unbind({key: 'ctrl+a, ctrl+b', scope:'abc'})\n if (keysInfo.key) eachUnbind(keysInfo);\n } else if (typeof keysInfo === 'string') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n // support old method\n // eslint-disable-line\n let [scope, method] = args;\n if (typeof scope === 'function') {\n method = scope;\n scope = '';\n }\n eachUnbind({\n key: keysInfo,\n scope,\n method,\n splitKey: '+'\n });\n }\n}\n\n/** Unbind hotkeys for a specific scope */\nconst eachUnbind = _ref3 => {\n let {\n key,\n scope,\n method,\n splitKey = '+'\n } = _ref3;\n const multipleKeys = getKeys(key);\n multipleKeys.forEach(originKey => {\n const unbindKeys = originKey.split(splitKey);\n const len = unbindKeys.length;\n const lastKey = unbindKeys[len - 1];\n const keyCode = lastKey === '*' ? '*' : code(lastKey);\n if (!_handlers[keyCode]) return;\n // If scope is not provided, get the current scope\n if (!scope) scope = getScope();\n const mods = len > 1 ? getMods(_modifier, unbindKeys) : [];\n const unbindElements = [];\n _handlers[keyCode] = _handlers[keyCode].filter(record => {\n // Check if the method matches; if method is provided, must be equal to unbind\n const isMatchingMethod = method ? record.method === method : true;\n const isUnbind = isMatchingMethod && record.scope === scope && compareArray(record.mods, mods);\n if (isUnbind) unbindElements.push(record.element);\n return !isUnbind;\n });\n unbindElements.forEach(element => removeKeyEvent(element));\n });\n};\n\n/** Handle the callback function for the corresponding hotkey */\nfunction eventHandler(event, handler, scope, element) {\n if (handler.element !== element) {\n return;\n }\n let modifiersMatch;\n\n // Check if it is within the current scope\n if (handler.scope === scope || handler.scope === 'all') {\n // Check whether modifier keys match (returns true if they do)\n modifiersMatch = handler.mods.length > 0;\n for (const y in _mods) {\n if (Object.prototype.hasOwnProperty.call(_mods, y)) {\n if (!_mods[y] && handler.mods.indexOf(+y) > -1 || _mods[y] && handler.mods.indexOf(+y) === -1) {\n modifiersMatch = false;\n }\n }\n }\n\n // Call the handler function; ignore if it's only a modifier key\n if (handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91] || modifiersMatch || handler.shortcut === '*') {\n handler.keys = [];\n handler.keys = handler.keys.concat(_downKeys);\n if (handler.method(event, handler) === false) {\n if (event.preventDefault) event.preventDefault();else event.returnValue = false;\n if (event.stopPropagation) event.stopPropagation();\n if (event.cancelBubble) event.cancelBubble = true;\n }\n }\n }\n}\n\n/** Handle the keydown event */\nfunction dispatch(event, element) {\n const asterisk = _handlers['*'];\n let key = event.keyCode || event.which || event.charCode;\n // Ensure that when capturing keystrokes in modern browsers,\n // uppercase and lowercase letters (such as R and r) return the same key value.\n // https://github.com/jaywcjlove/hotkeys-js/pull/514\n // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n // CapsLock key\n // There's an issue where `keydown` and `keyup` events are not triggered after CapsLock is enabled to activate uppercase.\n if (event.key && event.key.toLowerCase() === 'capslock') {\n return;\n }\n // Form control filter: by default, shortcut keys are not triggered in form elements\n if (!hotkeys.filter.call(this, event)) return;\n\n // In Gecko (Firefox), the command key code is 224; unify it with WebKit (Chrome)\n // In WebKit, left and right command keys have different codes\n if (key === 93 || key === 224) key = 91;\n\n /**\n * Collect bound keys\n * If an Input Method Editor is processing key input and the event is keydown, return 229.\n * https://stackoverflow.com/questions/25043934/is-it-ok-to-ignore-keydown-events-with-keycode-229\n * http://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\n */\n if (_downKeys.indexOf(key) === -1 && key !== 229) _downKeys.push(key);\n /**\n * Jest test cases are required.\n * ===============================\n */\n ['metaKey', 'ctrlKey', 'altKey', 'shiftKey'].forEach(keyName => {\n const keyNum = modifierMap[keyName];\n if (event[keyName] && _downKeys.indexOf(keyNum) === -1) {\n _downKeys.push(keyNum);\n } else if (!event[keyName] && _downKeys.indexOf(keyNum) > -1) {\n _downKeys.splice(_downKeys.indexOf(keyNum), 1);\n } else if (keyName === 'metaKey' && event[keyName]) {\n // If the command key is pressed, clear all non-modifier keys except the current event key.\n // This is because keyup for non-modifier keys will NEVER be triggered when command is pressed.\n // This is a known browser limitation.\n _downKeys = _downKeys.filter(k => k in modifierMap || k === key);\n }\n });\n /**\n * -------------------------------\n */\n if (key in _mods) {\n _mods[key] = true;\n // Register special modifier keys to the `hotkeys` object\n for (const k in _modifier) {\n if (Object.prototype.hasOwnProperty.call(_modifier, k)) {\n const eventKey = modifierMap[_modifier[k]];\n hotkeys[k] = event[eventKey];\n }\n }\n if (!asterisk) return;\n }\n\n // Bind the modifier keys in modifierMap to the event\n for (const e in _mods) {\n if (Object.prototype.hasOwnProperty.call(_mods, e)) {\n _mods[e] = event[modifierMap[e]];\n }\n }\n /**\n * https://github.com/jaywcjlove/hotkeys/pull/129\n * This solves the issue in Firefox on Windows where hotkeys corresponding to special characters would not trigger.\n * An example of this is ctrl+alt+m on a Swedish keyboard which is used to type μ.\n * Browser support: https://caniuse.com/#feat=keyboardevent-getmodifierstate\n */\n if (event.getModifierState && !(event.altKey && !event.ctrlKey) && event.getModifierState('AltGraph')) {\n if (_downKeys.indexOf(17) === -1) {\n _downKeys.push(17);\n }\n if (_downKeys.indexOf(18) === -1) {\n _downKeys.push(18);\n }\n _mods[17] = true;\n _mods[18] = true;\n }\n\n // Get the current scope (defaults to 'all')\n const scope = getScope();\n // Handle any hotkeys registered as '*'\n if (asterisk) {\n for (let i = 0; i < asterisk.length; i++) {\n if (asterisk[i].scope === scope && (event.type === 'keydown' && asterisk[i].keydown || event.type === 'keyup' && asterisk[i].keyup)) {\n eventHandler(event, asterisk[i], scope, element);\n }\n }\n }\n // If the key is not registered, return\n if (!(key in _handlers)) return;\n const handlerKey = _handlers[key];\n const keyLen = handlerKey.length;\n for (let i = 0; i < keyLen; i++) {\n if (event.type === 'keydown' && handlerKey[i].keydown || event.type === 'keyup' && handlerKey[i].keyup) {\n if (handlerKey[i].key) {\n const record = handlerKey[i];\n const {\n splitKey\n } = record;\n const keyShortcut = record.key.split(splitKey);\n const _downKeysCurrent = []; // Store the current key codes\n for (let a = 0; a < keyShortcut.length; a++) {\n _downKeysCurrent.push(code(keyShortcut[a]));\n }\n if (_downKeysCurrent.sort().join('') === _downKeys.sort().join('')) {\n // Match found, call the handler\n eventHandler(event, record, scope, element);\n }\n }\n }\n }\n}\nfunction hotkeys(key, option, method) {\n _downKeys = [];\n /** List of hotkeys to handle */\n const keys = getKeys(key);\n let mods = [];\n /** Default scope is 'all', meaning effective in all scopes */\n let scope = 'all';\n /** Element to which the hotkey events are bound */\n let element = document;\n let i = 0;\n let keyup = false;\n let keydown = true;\n let splitKey = '+';\n let capture = false;\n /** Allow only a single callback */\n let single = false;\n\n // Determine if the second argument is a function (no options provided)\n if (method === undefined && typeof option === 'function') {\n method = option;\n }\n\n // Parse options object\n if (Object.prototype.toString.call(option) === '[object Object]') {\n if (option.scope) scope = option.scope; // Set scope\n if (option.element) element = option.element; // Set binding element\n if (option.keyup) keyup = option.keyup;\n if (option.keydown !== undefined) keydown = option.keydown;\n if (option.capture !== undefined) capture = option.capture;\n if (typeof option.splitKey === 'string') splitKey = option.splitKey;\n if (option.single === true) single = true;\n }\n if (typeof option === 'string') scope = option;\n\n // If only one callback is allowed, unbind the existing one first\n if (single) unbind(key, scope);\n\n // Handle each hotkey\n for (; i < keys.length; i++) {\n key = keys[i].split(splitKey); // Split into individual keys\n mods = [];\n\n // If it's a combination, extract modifier keys\n if (key.length > 1) mods = getMods(_modifier, key);\n\n // Convert non-modifier key to key code\n key = key[key.length - 1];\n key = key === '*' ? '*' : code(key); // '*' means match all hotkeys\n\n // Initialize handler array if this key has no handlers yet\n if (!(key in _handlers)) _handlers[key] = [];\n _handlers[key].push({\n keyup,\n keydown,\n scope,\n mods,\n shortcut: keys[i],\n method,\n key: keys[i],\n splitKey,\n element\n });\n }\n // Register hotkey event listeners on the global document\n if (typeof element !== 'undefined' && window) {\n if (!elementEventMap.has(element)) {\n const keydownListener = function () {\n let event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.event;\n return dispatch(event, element);\n };\n const keyupListenr = function () {\n let event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.event;\n dispatch(event, element);\n clearModifier(event);\n };\n elementEventMap.set(element, {\n keydownListener,\n keyupListenr,\n capture\n });\n addEvent(element, 'keydown', keydownListener, capture);\n addEvent(element, 'keyup', keyupListenr, capture);\n }\n // Register focus event listener once to clear pressed keys on window focus\n if (!winListendFocus) {\n const listener = () => {\n _downKeys = [];\n };\n winListendFocus = {\n listener,\n capture\n };\n addEvent(window, 'focus', listener, capture);\n }\n }\n}\nfunction trigger(shortcut) {\n let scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';\n Object.keys(_handlers).forEach(key => {\n const dataList = _handlers[key].filter(item => item.scope === scope && item.shortcut === shortcut);\n dataList.forEach(data => {\n if (data && data.method) {\n data.method();\n }\n });\n });\n}\n\n/** Clean up event listeners. After unbinding, check whether the element still has any hotkeys bound. If not, remove its event listeners. */\nfunction removeKeyEvent(element) {\n const values = Object.values(_handlers).flat();\n const findindex = values.findIndex(_ref4 => {\n let {\n element: el\n } = _ref4;\n return el === element;\n });\n if (findindex < 0) {\n const {\n keydownListener,\n keyupListenr,\n capture\n } = elementEventMap.get(element) || {};\n if (keydownListener && keyupListenr) {\n removeEvent(element, 'keyup', keyupListenr, capture);\n removeEvent(element, 'keydown', keydownListener, capture);\n elementEventMap.delete(element);\n }\n }\n if (values.length <= 0 || elementEventMap.size <= 0) {\n // Remove all event listeners from all elements\n const eventKeys = Object.keys(elementEventMap);\n eventKeys.forEach(el => {\n const {\n keydownListener,\n keyupListenr,\n capture\n } = elementEventMap.get(el) || {};\n if (keydownListener && keyupListenr) {\n removeEvent(el, 'keyup', keyupListenr, capture);\n removeEvent(el, 'keydown', keydownListener, capture);\n elementEventMap.delete(el);\n }\n });\n // Clear the elementEventMap\n elementEventMap.clear();\n // Clear all handlers\n Object.keys(_handlers).forEach(key => delete _handlers[key]);\n // Remove the global window focus event listener\n if (winListendFocus) {\n const {\n listener,\n capture\n } = winListendFocus;\n removeEvent(window, 'focus', listener, capture);\n winListendFocus = null;\n }\n }\n}\nconst _api = {\n getPressedKeyString,\n setScope,\n getScope,\n deleteScope,\n getPressedKeyCodes,\n getAllKeyCodes,\n isPressed,\n filter,\n trigger,\n unbind,\n keyMap: _keyMap,\n modifier: _modifier,\n modifierMap\n};\nfor (const a in _api) {\n if (Object.prototype.hasOwnProperty.call(_api, a)) {\n hotkeys[a] = _api[a];\n }\n}\nif (typeof window !== 'undefined') {\n const _hotkeys = window.hotkeys;\n hotkeys.noConflict = deep => {\n if (deep && window.hotkeys === hotkeys) {\n window.hotkeys = _hotkeys;\n }\n return hotkeys;\n };\n window.hotkeys = hotkeys;\n}\n\nexport { hotkeys as default };\n","async function a(a,t,e=(()=>!1)){do{if(await a(),await e())break;const i=\"number\"==typeof t?t:t();await new Promise((a=>setTimeout(a,Math.max(0,i))))}while(!await e())}export{a as poll};\n","import debounce from 'debounce';\nimport { v4 as uuidv4 } from 'uuid';\nimport hotkeys from 'hotkeys-js';\nimport { poll } from 'poll';\nimport { Origin } from '@annotorious/core';\nimport type { Filter, Lifecycle, Selection, User } from '@annotorious/core';\nimport type { TextAnnotatorState } from './state';\nimport type { TextAnnotation, TextAnnotationTarget } from './model';\nimport type { AnnotatingMode } from './TextAnnotator';\nimport type { TextAnnotatorOptions } from './TextAnnotatorOptions';\nimport {\n clonePointerEvent,\n cloneKeyboardEvent,\n splitAnnotatableRanges,\n rangeToSelector,\n isMac,\n isRangeWhitespaceOrEmpty,\n trimRangeToContainer,\n isNotAnnotatable,\n mergeRanges\n} from './utils';\n\nconst CLICK_TIMEOUT = 300;\n\nconst ARROW_KEYS = ['up', 'down', 'left', 'right'];\n\nconst SELECT_ALL = isMac ? '⌘+a' : 'ctrl+a';\n\nconst SELECTION_KEYS = [\n ...ARROW_KEYS.map(key => `shift+${key}`),\n SELECT_ALL\n];\n\nexport const createSelectionHandler = (\n container: HTMLElement,\n state: TextAnnotatorState<TextAnnotation, unknown>,\n lifecycle: Lifecycle<TextAnnotation, unknown>,\n options: TextAnnotatorOptions<TextAnnotation, unknown>\n) => {\n const { store, selection } = state;\n\n let currentUser: User | undefined;\n\n const {\n annotatingEnabled,\n offsetReferenceSelector,\n selectionMode,\n dismissOnNotAnnotatable = 'NEVER'\n } = options;\n\n let currentFilter: Filter | undefined;\n\n let currentAnnotatingEnabled = annotatingEnabled;\n\n let annotatingMode: AnnotatingMode = 'CREATE_NEW';\n\n let currentTarget: TextAnnotationTarget | undefined;\n\n // Only used if allowModifierSelect === true or annotatingMode === 'ADD_TO_CURRENT'\n let targetToModify: TextAnnotationTarget | undefined;\n\n let isLeftClick: boolean | undefined;\n\n let lastDownEvent: Selection['event'] | undefined;\n\n const setAnnotatingEnabled = (enabled: boolean) => {\n currentAnnotatingEnabled = enabled;\n onSelectionChange.clear();\n\n if (!enabled) {\n targetToModify = undefined;\n currentTarget = undefined;\n isLeftClick = undefined;\n lastDownEvent = undefined;\n }\n }\n\n const setAnnotatingMode = (mode?: AnnotatingMode) =>\n annotatingMode = mode || 'CREATE_NEW';\n\n const setFilter = (filter?: Filter) => currentFilter = filter;\n \n const setUser = (user?: User) => currentUser = user;\n\n const isAddToCurrentSelect = (evt: Event) => {\n if (annotatingMode === 'ADD_TO_CURRENT')\n return true;\n\n if (options.allowModifierSelect) {\n const asPtr = evt as PointerEvent;\n return isMac ? asPtr.metaKey : asPtr.ctrlKey;\n } else {\n return false;\n }\n }\n\n const onSelectStart = () => {\n if (!currentAnnotatingEnabled) return;\n\n if (isLeftClick === false) return;\n\n const { selected } = selection;\n\n // Will this selection modify an existing annotation?\n const isModifyExisting = isAddToCurrentSelect(lastDownEvent)\n && selected.length === 1\n && selected[0].editable;\n\n if (isModifyExisting) {\n const existing = store.getAnnotation(selected[0].id);\n\n if (existing?.target) {\n targetToModify = existing.target;\n\n currentTarget = {\n annotation: existing.id,\n selector: [],\n created: targetToModify.created,\n creator: targetToModify.creator,\n updated: new Date(),\n updatedBy: currentUser\n };\n\n return;\n }\n }\n\n targetToModify = undefined;\n\n currentTarget = {\n annotation: uuidv4(),\n selector: [],\n created: new Date(),\n creator: currentUser\n };\n };\n\n const onSelectionChange = debounce((evt: Event) => {\n if (!currentAnnotatingEnabled) return;\n\n const sel = document.getSelection();\n\n /**\n * In iOS when a user clicks on a button, the `selectionchange` event is fired.\n * However, the generated selection is empty and the `anchorNode` is `null`. That\n * doesn't give us information about whether the selection is in the annotatable area\n * or whether the previously selected text was dismissed. Therefore we should bail\n * out from such a range processing.\n *\n * @see https://github.com/recogito/text-annotator-js/pull/164#issuecomment-2416961473\n */\n if (!sel?.anchorNode) {\n return;\n }\n\n const selectionRanges =\n Array.from(Array(sel.rangeCount).keys()).map(idx => sel.getRangeAt(idx));\n\n /**\n * This is to handle cases where the selection is \"hijacked\" by\n * another element in a not-annotatable area. A rare case in practice.\n * But rich text editors like Quill will do it!\n */\n if (!selectionRanges.some(r => r.intersectsNode(container))) {\n currentTarget = undefined;\n return;\n }\n\n const timeDifference = evt.timeStamp - (lastDownEvent?.timeStamp || evt.timeStamp);\n\n /**\n * The selection start needs to be emulated only for the pointer events!\n * The keyboard ones are consistently fired on desktops\n * and the `timeDifference` will always be <10ms. between the `keydown` and `selectionchange`\n */\n if (lastDownEvent?.type === 'pointerdown') {\n if (timeDifference < 1000 && !currentTarget) {\n // Chrome/iOS does not reliably fire the 'selectstart' event!\n onSelectStart();\n } else if (sel.isCollapsed && timeDifference < CLICK_TIMEOUT) {\n // Firefox doesn't fire the 'selectstart' when user clicks\n // over the text, which collapses the selection\n onSelectStart();\n }\n }\n\n // Note: commenting out the line below. We should no longer do this. Why?\n // Let's assume the user drags the selection from outside the annotatable area\n // over the anntoatable area (intersection!). Then drags it out again\n // (no intersection!), then in again (intersection). Because the\n // currentTarget will have been cleared meanwhile, execution will stop.\n // \n // But we don't want this - instead, processing should continue as normal,\n // and a new currentTarget should be computed when the user drags the\n // selection into the annotatable area a second time.\n\n // The selection isn't active -> bail out from selection change processing\n // if (!currentTarget) return;\n if (!currentTarget) onSelectStart();\n\n if (sel.isCollapsed) {\n /**\n * The selection range got collapsed during the selecting process. Unless this\n * is intentional (CTRL + select), the previously created annotation isn't relevant \n * anymore and can be discarded\n *\n * @see https://github.com/recogito/text-annotator-js/issues/139\n */\n if (store.getAnnotation(currentTarget.annotation) && !isAddToCurrentSelect(lastDownEvent)) {\n selection.clear();\n store.deleteAnnotation(currentTarget.annotation);\n }\n\n return;\n }\n\n const containedRanges =\n selectionRanges.map(r => trimRangeToContainer(r, container));\n\n // The selection should be captured only within the annotatable container\n if (containedRanges.every(r => isRangeWhitespaceOrEmpty(r))) return;\n\n const annotatableRanges = containedRanges.flatMap(r => splitAnnotatableRanges(container, r.cloneRange()));\n\n const hasChanged =\n (annotatableRanges.length > 0 && !currentTarget) ||\n annotatableRanges.length !== currentTarget.selector.length ||\n annotatableRanges.some((r, i) => r.toString() !== currentTarget.selector[i]?.quote);\n\n if (!hasChanged) return;\n\n // Annotatable ranges + ranges of the modified target (if any)\n const combinedRanges = targetToModify ? mergeRanges([ \n ...(targetToModify.selector.map(s => s.range)),\n ...annotatableRanges\n ]) : annotatableRanges;\n\n currentTarget = {\n ...currentTarget,\n selector: combinedRanges.map(r => rangeToSelector(r, container, offsetReferenceSelector)),\n updated: new Date()\n };\n\n /**\n * During mouse selection on the desktop, the annotation won't usually exist while the selection is being edited.\n * But it'll be typical during selection via the keyboard or mobile's handlebars.\n */\n if (store.getAnnotation(currentTarget.annotation)) {\n store.updateTarget(currentTarget, Origin.LOCAL);\n } else {\n // Proper lifecycle management: clear the previous selection first\n if (!isAddToCurrentSelect(evt))\n selection.clear();\n }\n }, 10);\n\n /**\n * Select events don't carry information about the mouse button.\n * Therefore, to prevent right-click selection, we need to listen\n * to the initial pointerdown event and remember the button\n */\n const onPointerDown = (evt: PointerEvent) => {\n /**\n * Cloning the event to prevent it from accidentally being `undefined`\n * @see https://github.com/recogito/text-annotator-js/commit/65d13f3108c429311cf8c2523f6babbbc946013d#r144033948\n */\n lastDownEvent = clonePointerEvent(evt);\n isLeftClick = lastDownEvent.button === 0;\n };\n\n const onPointerUp = async (evt: PointerEvent) => {\n if (!isLeftClick) return;\n\n const lastUpEvent = clonePointerEvent(evt);\n\n // Logic for selecting an existing annotation\n const clickSelect = () => {\n const { x, y } = container.getBoundingClientRect();\n\n if (isNotAnnotatable(container, lastUpEvent.target as Node)) {\n const shouldDismissSelection = typeof dismissOnNotAnnotatable === 'function'\n ? dismissOnNotAnnotatable(lastUpEvent, container)\n : dismissOnNotAnnotatable === 'ALWAYS';\n if (shouldDismissSelection) {\n selection.clear();\n }\n return;\n }\n\n const hovered =\n lastUpEvent.target instanceof Node &&\n container.contains(lastUpEvent.target) &&\n store.getAt(\n lastUpEvent.clientX - x,\n lastUpEvent.clientY - y,\n selectionMode === 'all',\n currentFilter\n );\n\n if (hovered) {\n const { selected } = selection;\n\n const currentIds = new Set(selected.map(s => s.id));\n const nextIds = Array.isArray(hovered) ? hovered.map(a => a.id) : [hovered.id];\n\n const hasChanged =\n currentIds.size !== nextIds.length ||\n !nextIds.every(id => currentIds.has(id));\n\n if (hasChanged) {\n lifecycle.emit('clickAnnotation', hovered);\n selection.userSelect(nextIds, lastUpEvent);\n }\n } else {\n selection.clear();\n }\n };\n\n const timeDifference = lastUpEvent.timeStamp - lastDownEvent.timeStamp;\n if (timeDifference < CLICK_TIMEOUT) {\n await pollSelectionCollapsed();\n\n const sel = document.getSelection();\n\n const isDownOnNotAnnotatable =\n isNotAnnotatable(container, lastDownEvent.target as Node);\n\n const isUpOnNotAnnotatable = \n isNotAnnotatable(container, lastUpEvent.target as Node);\n\n /**\n * Route to `clickSelect` if selection collapsed OR\n * the click happened entirely over a not-annotatable element.\n *\n * The latter allows preventing re-selection of an existing\n * annotation when a user clicks on not-annotatable controls.\n * For example, a click on a `button` element doesn't make the\n * selection collapse, but it still needs to be processed with `clickSelect`.\n */\n if (sel?.isCollapsed || (isDownOnNotAnnotatable && isUpOnNotAnnotatable)) {\n currentTarget = undefined;\n clickSelect();\n return;\n }\n }\n\n if (currentTarget && currentTarget.selector.length > 0) {\n upsertCurrentTarget();\n selection.userSelect(currentTarget.annotation, lastUpEvent);\n }\n }\n\n /**\n * We must check the `isCollapsed` after an unspecified timeout\n * to handle the annotation dismissal after a click properly.\n *\n * Otherwise, the `isCollapsed` will return an obsolete `false` value,\n * click won't be processed, and the annotation will get falsely re-selected.\n *\n * @see https://github.com/recogito/text-annotator-js/issues/136#issue-2465915707\n * @see https://github.com/recogito/text-annotator-js/issues/136#issuecomment-2413773804\n */\n const pollSelectionCollapsed = async () => {\n const sel = document.getSelection();\n\n let stopPolling = false;\n let isCollapsed = sel?.isCollapsed;\n const shouldStopPolling = () => isCollapsed || stopPolling;\n\n const pollingDelayMs = 1;\n const stopPollingInMs = 50;\n setTimeout(() => stopPolling = true, stopPollingInMs);\n\n return poll(() => isCollapsed = sel?.isCollapsed, pollingDelayMs, shouldStopPolling);\n }\n\n const onContextMenu = (evt: PointerEvent) => {\n const sel = document.getSelection();\n\n if (sel?.isCollapsed) return;\n\n /**\n * When selecting the initial word, Chrome Android\n * fires `contextmenu`before `selectionchange`\n */\n if (!currentTarget || currentTarget.selector.length === 0) {\n onSelectionChange(evt);\n }\n /**\n * The selection couldn't be initiated - might span over a not-annotatable element.\n */\n if (!currentTarget) return;\n upsertCurrentTarget();\n\n selection.userSelect(currentTarget.annotation, clonePointerEvent(evt));\n }\n\n const onKeyup = (evt: KeyboardEvent) => {\n if (!currentAnnotatingEnabled) return;\n\n if (evt.key === 'Shift' && currentTarget) {\n const sel = document.getSelection();\n\n if (!sel.isCollapsed) {\n upsertCurrentTarget();\n selection.userSelect(currentTarget.annotation, cloneKeyboardEvent(evt));\n }\n }\n }\n\n const onSelectAll = (evt: KeyboardEvent) => {\n\n const onSelected = () => setTimeout(() => {\n if (currentTarget?.selector.length > 0) {\n selection.clear();\n\n store.addAnnotation({\n id: currentTarget.annotation,\n bodies: [],\n target: currentTarget\n });\n\n selection.userSelect(currentTarget.annotation, cloneKeyboardEvent(evt));\n }\n\n document.removeEventListener('selectionchange', onSelected);\n\n // Sigh... this needs a delay to work. But doesn't seem reliable.\n }, 100);\n\n // Listen to the change event that follows\n document.addEventListener('selectionchange', onSelected);\n\n // Start selection!\n onSelectStart();\n }\n\n hotkeys(SELECTION_KEYS.join(','), { element: container, keydown: true, keyup: false }, evt => {\n if (!evt.repeat)\n lastDownEvent = cloneKeyboardEvent(evt);\n });\n\n hotkeys(SELECT_ALL, { keydown: true, keyup: false }, evt => {\n lastDownEvent = cloneKeyboardEvent(evt);\n onSelectAll(evt);\n });\n\n /**\n * Free caret movement through the text resets the annotation selection.\n *\n * It should be handled only on:\n * - the annotatable `container`, where the text is.\n * - the `body`, where the focus goes when user closes the popup,\n * or clicks the button that gets unmounted, e.g. \"Close\"\n */\n const handleArrowKeyPress = (evt: KeyboardEvent) => {\n if (\n evt.repeat ||\n evt.target !== container && evt.target !== document.body\n ) {\n return;\n }\n\n currentTarget = undefined;\n selection.clear();\n };\n\n hotkeys(ARROW_KEYS.join(','), { keydown: true, keyup: false }, handleArrowKeyPress);\n\n // Helper\n const upsertCurrentTarget = () => {\n const existingAnnotation = store.getAnnotation(currentTarget.annotation);\n if (!existingAnnotation) {\n store.addAnnotation({\n id: currentTarget.annotation,\n bodies: [],\n target: currentTarget\n });\n return;\n }\n\n const { target: { updated: existingTargetUpdated } } = existingAnnotation;\n const { updated: currentTargetUpdated } = currentTarget;\n if (\n !existingTargetUpdated ||\n !currentTargetUpdated ||\n existingTargetUpdated < currentTargetUpdated\n ) {\n store.updateTarget(currentTarget);\n }\n };\n\n document.addEventListener('pointerdown', onPointerDown);\n document.addEventListener('pointerup', onPointerUp);\n document.addEventListener('contextmenu', onContextMenu);\n\n container.addEventListener('keyup', onKeyup);\n container.addEventListener('selectstart', onSelectStart);\n document.addEventListener('selectionchange', onSelectionChange);\n\n const destroy = () => {\n currentTarget = undefined;\n targetToModify = undefined;\n isLeftClick = undefined;\n lastDownEvent = undefined;\n\n onSelectionChange.clear();\n\n document.removeEventListener('pointerdown', onPointerDown);\n document.removeEventListener('pointerup', onPointerUp);\n document.removeEventListener('contextmenu', onContextMenu);\n\n container.removeEventListener('keyup', onKeyup);\n container.removeEventListener('selectstart', onSelectStart);\n document.removeEventListener('selectionchange', onSelectionChange);\n\n hotkeys.unbind();\n };\n\n return {\n destroy,\n setFilter,\n setUser,\n setAnnotatingEnabled,\n setAnnotatingMode\n }\n\n}\n\n","import type { FormatAdapter, UserSelectActionExpression, User } from '@annotorious/core';\nimport type { PresencePainterOptions } from './presence';\nimport type { TextAnnotation } from './model';\nimport type { HighlightStyleExpression, RendererFactory } from './highlight';\n\nexport interface TextAnnotatorOptions<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> {\n\n adapter?: FormatAdapter<I, E> | null;\n\n allowModifierSelect?: boolean;\n\n annotatingEnabled?: boolean;\n\n /**\n * Determines whether an active selection should be dismissed\n * when a user ends their interaction (click, selection)\n * on a non-annotatable element.\n * - NEVER - don't dismiss the selection, ignore the action.\n * - ALWAYS - dismiss the selection.\n * - function - a custom matcher that takes an event and container as arguments.\n * Returns `true` if the selection should be dismissed.\n *\n * @defaut NEVER\n */\n dismissOnNotAnnotatable?: DismissOnNotAnnotatableExpression;\n\n mergeHighlights?: {\n\n horizontalTolerance?: number;\n\n verticalTolerance?: number;\n\n }\n\n offsetReferenceSelector?: string;\n\n presence?: PresencePainterOptions;\n \n renderer?: RendererType | RendererFactory;\n\n selectionMode?: 'shortest' | 'all';\n\n style?: HighlightStyleExpression;\n\n user?: User;\n\n userSelectAction?: UserSelectActionExpression<E>,\n\n}\n\nexport type RendererType = 'SPANS' | 'CANVAS' | 'CSS_HIGHLIGHTS';\n\nexport type DismissOnNotAnnotatableExpression = 'NEVER'| 'ALWAYS' | ((event: Event, container: HTMLElement) => boolean)\n\nexport const fillDefaults = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n opts: TextAnnotatorOptions<I, E>,\n defaults: TextAnnotatorOptions<I, E>\n): TextAnnotatorOptions<I, E> => ({\n ...opts,\n annotatingEnabled: opts.annotatingEnabled ?? defaults.annotatingEnabled,\n user: opts.user || defaults.user\n});\n","import { createAnonymousGuest, createLifecycleObserver, createBaseAnnotator, createUndoStack } from '@annotorious/core';\nimport type { Annotator, Filter, User, PresenceProvider } from '@annotorious/core';\nimport { scrollIntoView } from './api';\nimport { createCanvasRenderer, createHighlightsRenderer, createSpansRenderer } from './highlight';\nimport type { HighlightStyleExpression, RendererFactory } from './highlight';\nimport type { TextAnnotation } from './model';\nimport { createPresencePainter } from './presence';\nimport { type TextAnnotationStore, type TextAnnotatorState, createTextAnnotatorState } from './state';\nimport { cancelSingleClickEvents, programmaticallyFocusable } from './utils';\nimport { createSelectionHandler } from './SelectionHandler';\nimport { fillDefaults, type RendererType, type TextAnnotatorOptions } from './TextAnnotatorOptions';\n\nimport './TextAnnotator.css';\n\nconst USE_DEFAULT_RENDERER: RendererType = 'SPANS';\n\nexport interface TextAnnotator<I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation> extends Annotator<I, E> {\n\n element: HTMLElement;\n\n setStyle(style: HighlightStyleExpression | undefined): void;\n\n redraw(lazy?: boolean): void;\n\n // Returns true if successful (or false if the annotation is not currently rendered)\n scrollIntoView(annotationOrId: I | string, scrollParentOrId?: string | Element): boolean;\n\n setAnnotatingEnabled(enabled?: boolean): void;\n\n setAnnotatingMode(mode?: AnnotatingMode): void;\n\n state: TextAnnotatorState<I, E>;\n\n}\n\nexport type AnnotatingMode = 'CREATE_NEW' | 'ADD_TO_CURRENT'; // Possibly 'REPLACE_CURRENT' in the future\n\nexport const createTextAnnotator = <I extends TextAnnotation = TextAnnotation, E extends unknown = TextAnnotation>(\n container: HTMLElement,\n options: TextAnnotatorOptions<I, E> = {}\n): TextAnnotator<I, E> => {\n // Prevent mobile browsers from triggering word selection on single click.\n cancelSingleClickEvents(container);\n\n // Make sure that the container is focusable and can receive both pointer and keyboard events\n programmaticallyFocusable(container);\n\n const opts = fillDefaults<I, E>(options, {\n annotatingEnabled: true,\n user: createAnonymousGuest()\n });\n\n const state: TextAnnotatorState<I, E> = createTextAnnotatorState<I, E>(container, opts);\n\n const { selection, viewport } = state;\n\n const store: TextAnnotationStore<I> = state.store;\n\n const undoStack = createUndoStack<I>(store);\n\n const lifecycle = createLifecycleObserver<I, E>(state, undoStack, opts.adapter);\n\n let currentUser: User = opts.user;\n\n // Use the selected built-in renderer, or fall back to default. If \n // CSS_HIGHLIGHT is selected, check if CSS Custom Highlights are \n // supported, and fall back to default renderer if not.\n const useBuiltInRenderer: RendererType | null =\n typeof opts.renderer !== 'function' ? \n opts.renderer === 'CSS_HIGHLIGHTS'\n ? Boolean(CSS.highlights) ? 'CSS_HIGHLIGHTS' : USE_DEFAULT_RENDERER\n : opts.renderer || USE_DEFAULT_RENDERER :\n null;\n\n const highlightRenderer =\n useBuiltInRenderer === null ? (opts.renderer as RendererFactory)(container, state, viewport) :\n useBuiltInRenderer === 'SPANS' ? createSpansRenderer(container, state, viewport) :\n useBuiltInRenderer === 'CSS_HIGHLIGHTS' ? createHighlightsRenderer(container, state, viewport) :\n useBuiltInRenderer === 'CANVAS' ? createCanvasRenderer(container, state, viewport) : undefined;\n\n if (!highlightRenderer)\n throw `Unknown renderer implementation: ${opts.renderer}`;\n\n if (useBuiltInRenderer)\n console.debug(`Using ${useBuiltInRenderer} renderer`);\n else \n console.debug('Using custom renderer implementation');\n\n if (opts.style)\n highlightRenderer.setStyle(opts.style);\n\n const selectionHandler = createSelectionHandler(container, state, lifecycle, opts);\n selectionHandler.setUser(currentUser);\n\n /*************************/\n /* External API */\n /******++++++*************/\n\n // Most of the external API functions are covered in the base annotator\n const base = createBaseAnnotator<I, E>(state, undoStack, opts.adapter);\n\n const getUser = () => currentUser;\n\n const setAnnotatingEnabled = (enabled?: boolean) => {\n selectionHandler.setAnnotatingEnabled(\n enabled === undefined ? true : enabled\n );\n }\n\n const setAnnotatingMode = (mode?: AnnotatingMode) => {\n selectionHandler.setAnnotatingMode(mode)\n }\n\n const setFilter = (filter?: Filter<I>) => {\n highlightRenderer.setFilter(filter);\n selectionHandler.setFilter(filter);\n }\n\n const setUser = (user: User) => {\n currentUser = user;\n selectionHandler.setUser(user);\n }\n\n const setPresenceProvider = (provider: PresenceProvider) => {\n if (provider) {\n highlightRenderer.setPainter(createPresencePainter(provider, opts.presence));\n provider.on('selectionChange', () => highlightRenderer.redraw());\n }\n }\n\n const setSelected = (arg?: string | string[]) => {\n if (arg) {\n selection.setSelected(arg);\n } else {\n selection.clear();\n }\n }\n\n const destroy = () => {\n highlightRenderer.destroy();\n selectionHandler.destroy();\n\n // Other cleanup actions\n undoStack.destroy();\n }\n\n return {\n ...base,\n destroy,\n element: container,\n getUser,\n setAnnotatingEnabled,\n setAnnotatingMode,\n setFilter,\n setStyle: highlightRenderer.setStyle.bind(highlightRenderer),\n redraw: highlightRenderer.redraw.bind(highlightRenderer),\n setUser,\n setSelected,\n setPresenceProvider,\n setVisible: highlightRenderer.setVisible.bind(highlightRenderer),\n on: lifecycle.on,\n off: lifecycle.off,\n scrollIntoView: scrollIntoView(container, store),\n state\n }\n\n}\n"],"names":["NOT_ANNOTATABLE_CLASS","NOT_ANNOTATABLE_SELECTOR","isNotAnnotatable","container","node","_a","isRangeAnnotatable","range","ancestor","cancelSingleClickEvents","event","clonePointerEvent","cloneKeyboardEvent","LIBVERSION","UA_MAX_LENGTH","USER_AGENT","EMPTY","UNKNOWN","TYPEOF","BROWSER","CPU","DEVICE","ENGINE","OS","RESULT","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","MAJOR","MODEL","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","XR","EMBEDDED","INAPP","BRANDS","FORMFACTORS","FULLVERLIST","PLATFORM","PLATFORMVER","BITNESS","CH","CH_FULL_VER_LIST","CH_ARCH","CH_BITNESS","CH_FORM_FACTORS","CH_MOBILE","CH_MODEL","CH_PLATFORM","CH_PLATFORM_VER","CH_ALL_VALUES","AMAZON","APPLE","ASUS","BLACKBERRY","GOOGLE","HUAWEI","LENOVO","HONOR","LG","MICROSOFT","MOTOROLA","NVIDIA","ONEPLUS","OPPO","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","CHROME","CHROMIUM","CHROMECAST","EDGE","FIREFOX","OPERA","FACEBOOK","SOGOU","PREFIX_MOBILE","SUFFIX_BROWSER","WINDOWS","isWindow","NAVIGATOR","NAVIGATOR_UADATA","extend","defaultRgx","extensions","mergedRgx","extraRgx","isExtensions","i","j","k","enumerize","arr","enums","has","str1","str2","lowerize","isString","obj","deep","prop","val","itemListToArray","header","tokens","strip","token","trim","str","majorize","version","setProps","propName","pattern","stripQuotes","len","rgxMapper","ua","arrays","p","q","matches","match","regex","props","strMapper","map","windowsVersionMap","formFactorsMap","browserHintsMap","defaultRegexes","defaultProps","createIData","item","itemType","init_props","is_ignoreProps","is_ignoreRgx","toString_props","IData","res","UACHData","strToCheck","is","cb","that","IDataResolve","resolveData","uach","isHttpUACH","UAItem","rgxMap","uaCH","ch","data","detect","realVersion","brands","prevName","brandName","brandVersion","archName","reParse","ff","idx","osName","osVersion","parse","UAParser","headers","kv","v","normalized","userAgent","httpUACH","regexMap","createItemFunc","isMac","programmaticallyFocusable","getHighlightClientRects","textNodes","it","currentNode","first","last","firstRange","childNode","lastRange","getTextClientRects","t","r","iterateNotAnnotatableElements","notAnnotatableIterator","notAnnotatableNode","splitAnnotatableRanges","annotatableRanges","prevNotAnnotatable","notAnnotatable","subRange","getRangeAnnotatableContents","contents","el","getQuoteContext","length","offsetReferenceSelector","offsetReference","rangeBefore","before","rangeAfter","after","isRevived","selector","s","whitespaceOrEmptyRegex","isRangeWhitespaceOrEmpty","isNodeWhitespaceOrEmpty","getRelation","rectA","rectB","hTolerance","vTolerance","round","num","a","b","union","left","right","top","bottom","mergeClientRects","rects","merged","next","wasMerged","relation","toDomRectList","index","mergeRanges","ranges","cmp","rest","result","acc","rangeToSelector","quote","start","end","toParentBounds","rect","offset","toViewportBounds","reviveSelector","iterator","runningOffset","n","startCounting","_b","reviveTarget","target","reviveAnnotation","annotation","trimRangeToContainer","trimmedRange","getScrollParent","overflowY","scroll","store","scrollParent","parentBounds","parentHeight","parentWidth","annotationBounds","width","height","offsetTop","offsetLeft","scrollTop","scrollLeft","scrollIntoView","annotationOrId","scrollParentOrId","id","current","annoRange","revived","revivedAnnoRange","debounce","function_","wait","options","immediate","storedContext","storedArguments","timeoutId","timestamp","run","callContext","callArguments","later","debounced","arguments_","callNow","DEFAULT_STYLE","DEFAULT_SELECTED_STYLE","W","V","o","F","I","z","$","f","m","Re","K","Y","Be","g","C","w","u","D","h","A","T","l","ee","B","te","P","ne","oe","se","G","ie","M","Ie","de","re","ae","ce","Q","O","ue","fe","_","pe","Ne","d","c","U","L","R","E","S","x","N","X","Z","H","J","ge","ke","ze","Ve","he","$e","me","Ae","be","ve","Ee","Me","we","Ce","je","He","getViewportBounds","innerWidth","innerHeight","minX","minY","maxX","maxY","trackViewport","viewport","visible","annotations","ids","createBaseRenderer","state","renderer","selection","hover","currentStyle","currentFilter","currentPainter","onDraw","onPointerMove","y","hit","UserSelectAction","redraw","lazy","bounds","annotationsInView","selectedIds","highlights","selected","hovered","setPainter","painter","setStyle","style","setFilter","filter","onStoreChange","unsubscribeSelection","unsubscribeHover","onScroll","onResize","resizeObserver","config","mutationObserver","records","record","createCanvas","canvas","resetCanvas","highres","createRenderer","ctx","viewportBounds","highlightA","highlightB","createdA","createdB","base","offsetRects","underlineOffset","createCanvasRenderer","e","toCSS","colord","elem","currentRendered","nextRendered","updatedCSS","createHighlightsRenderer","dequal","foo","bar","ctor","paint","highlight","zIndex","getBackgroundColor","computeZIndex","all","intersects","getLength","total","intersecting","highlightLayer","shouldRedraw","span","createSpansRenderer","byteToHex","unsafeStringify","getRandomValues","rnds8","rng","native","_v4","buf","rnds","v4","W3CTextFormat","source","serialized","parseW3CTextAnnotation","serializeW3CTextAnnotation","isTextSelector","parseW3CTextTargets","annotationId","creator","created","modified","w3cTargets","parsed","parseW3CUser","w3cTarget","w3cSelector","missingTypes","uuidv4","body","bodies","parseW3CBodies","updated","targetRest","quoteSelector","prefix","suffix","positionSelector","serializeW3CBodies","context","createPresencePainter","provider","opts","trackedAnnotations","getAnnotationsForUser","user","isSelected","metrics","labelWidth","labelHeight","paddingBottom","quickselect","compare","defaultCompare","sd","newLeft","newRight","swap","tmp","RBush","maxEntries","bbox","toBBox","nodesToSearch","child","childBBox","contains","tmpNode","createNode","equalsFn","path","indexes","parent","goingUp","findItem","items","calcBBox","N2","N1","multiSelect","right2","right3","level","minArea","minEnlargement","targetNode","area","bboxArea","enlargement","enlargedArea","isNode","insertPath","splitIndex","newNode","minOverlap","bbox1","distBBox","bbox2","overlap","intersectionArea","compareMinX","compareNodeMinX","compareMinY","compareNodeMinY","xMargin","yMargin","leftBBox","rightBBox","margin","bboxMargin","siblings","destNode","children","stack","mid","createNanoEvents","args","callbacks","createSpatialTree","hMergeTolerance","vMergeTolerance","tree","emitter","toItems","revivedRange","clear","insert","remove","update","set","targets","replace","rectsByTarget","allRects","getAt","hits","getAnnotationBounds","getAnnotationRects","indexed","annotationIds","callback","createTextAnnotatorState","createStore","createSelectionState","createHoverState","createViewportState","addAnnotation","origin","Origin","isValid","bulkAddAnnotations","couldNotRevive","bulkUpsertAnnotations","updateTarget","bulkUpdateTargets","getAll","filtered","getIntersecting","recalculatePositions","onRecalculatePositions","changes","deleted","newValue","isff","addEvent","object","method","useCapture","removeEvent","getMods","modifier","key","mods","getKeys","keys","compareArray","a1","a2","arr1","arr2","isIndex","_keyMap","_modifier","modifierMap","_mods","_handlers","_downKeys","winListendFocus","_scope","elementEventMap","code","getKey","getModifier","setScope","scope","getScope","getPressedKeyCodes","getPressedKeyString","getAllKeyCodes","_ref","shortcut","tagName","flag","isInput","isPressed","keyCode","deleteScope","newScope","handlers","_ref2","element","removeKeyEvent","clearModifier","hotkeys","unbind","keysInfo","info","eachUnbind","_len","_key","_ref3","splitKey","originKey","unbindKeys","lastKey","unbindElements","isUnbind","eventHandler","handler","modifiersMatch","dispatch","asterisk","keyName","keyNum","eventKey","handlerKey","keyLen","keyShortcut","_downKeysCurrent","option","keyup","keydown","capture","single","keydownListener","keyupListenr","listener","trigger","values","_ref4","_api","_hotkeys","CLICK_TIMEOUT","ARROW_KEYS","SELECT_ALL","SELECTION_KEYS","createSelectionHandler","lifecycle","currentUser","annotatingEnabled","selectionMode","dismissOnNotAnnotatable","currentAnnotatingEnabled","annotatingMode","currentTarget","targetToModify","isLeftClick","lastDownEvent","setAnnotatingEnabled","enabled","onSelectionChange","setAnnotatingMode","mode","setUser","isAddToCurrentSelect","evt","asPtr","onSelectStart","existing","sel","selectionRanges","timeDifference","containedRanges","combinedRanges","onPointerDown","onPointerUp","lastUpEvent","clickSelect","currentIds","nextIds","pollSelectionCollapsed","isDownOnNotAnnotatable","isUpOnNotAnnotatable","upsertCurrentTarget","stopPolling","isCollapsed","shouldStopPolling","pollingDelayMs","poll","onContextMenu","onKeyup","onSelectAll","onSelected","handleArrowKeyPress","existingAnnotation","existingTargetUpdated","currentTargetUpdated","fillDefaults","defaults","USE_DEFAULT_RENDERER","createTextAnnotator","createAnonymousGuest","undoStack","createUndoStack","createLifecycleObserver","useBuiltInRenderer","highlightRenderer","selectionHandler","createBaseAnnotator","getUser","setPresenceProvider","setSelected","arg"],"mappings":"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","x_google_ignoreList":[3,4,21,23,27,29,33,34,35,36,39,40,41,44,45]}