web-launch-kit 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch-kit.min.cjs","sources":["../node_modules/web-platform-kit/dist/platform-kit.mjs","../../utils/create-hidden-element.ts","../node_modules/web-locale-kit/dist/locale-kit.mjs","../../utils/get-id.ts","../../utils/get-topmost-window.ts","../../utils/event-listener-utils.ts","../../index.ts"],"sourcesContent":["var version = \"0.0.4\";\nvar packageJSON = {\n\tversion: version};\n\nvar NAVIGATOR = globalThis.navigator;\nvar USER_AGENT = typeof NAVIGATOR !== 'undefined' ? NAVIGATOR.userAgent : '';\nvar USER_AGENT_DATA = typeof NAVIGATOR !== 'undefined' ? NAVIGATOR.userAgentData : undefined;\nvar OS_RESOLVER_MAP = [\n [/windows nt (6\\.[23]); arm/i, 'windows', resolveWindowsVersion],\n [/windows (?:phone|mobile|iot)(?: os)?[\\/ ]?([\\d.]*( se)?)/i, 'windows', resolveWindowsVersion],\n [/windows[\\/ ](1[01]|2000|3\\.1|7|8(\\.1)?|9[58]|me|server 20\\d\\d( r2)?|vista|xp)/i, 'windows', resolveWindowsVersion],\n [/windows nt ?([\\d.)]*)(?!.+xbox)/i, 'windows', resolveWindowsVersion],\n [/\\bwin(?=3| ?9|n)(?:nt| 9x )?([\\d.;]*)/i, 'windows', resolveWindowsVersion],\n [/windows ce\\/?([\\d.]*)/i, 'windows', resolveWindowsVersion],\n [/[adehimnop]{4,7}\\b(?:.*os (\\w+) like mac|; opera)/i, 'ios', resolveUnderscoreVersion],\n [/(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\\/ ]([\\w.]+)/i, 'ios', resolveUnderscoreVersion],\n [/cfnetwork\\/.+darwin/i, 'ios', resolveUnderscoreVersion],\n [/mac os x ?([\\w. ]*)/i, 'macos', resolveUnderscoreVersion],\n [/(?:macintosh|mac_powerpc\\b)(?!.+(haiku|morphos))/i, 'macos', resolveUnderscoreVersion],\n [/droid ([\\w.]+)\\b.+(android[- ]x86)/i, 'android'],\n [/android\\w*[-\\/.; ]?([\\d.]*)/i, 'android'],\n];\nvar BROWSER_RESOLVER_MAP = [\n [/\\b(?:crmo|crios)\\/([\\w.]+)/i, 'chrome'],\n [/webview.+edge\\/([\\w.]+)/i, 'edge'],\n [/edg(?:e|ios|a)?\\/([\\w.]+)/i, 'edge'],\n [/opera mini\\/([-\\w.]+)/i, 'opera'],\n [/opera [mobileta]{3,6}\\b.+version\\/([-\\w.]+)/i, 'opera'],\n [/opera(?:.+version\\/|[\\/ ]+)([\\w.]+)/i, 'opera'],\n [/opios[\\/ ]+([\\w.]+)/i, 'opera'],\n [/\\bop(?:rg)?x\\/([\\w.]+)/i, 'opera'],\n [/\\bopr\\/([\\w.]+)/i, 'opera'],\n [/iemobile(?:browser|boat|jet)[\\/ ]?([\\d.]*)/i, 'ie'],\n [/(?:ms|\\()ie ([\\w.]+)/i, 'ie'],\n [/trident.+rv[: ]([\\w.]{1,9})\\b.+like gecko/i, 'ie'],\n [/\\bfocus\\/([\\w.]+)/i, 'firefox'],\n [/\\bopt\\/([\\w.]+)/i, 'opera'],\n [/coast\\/([\\w.]+)/i, 'opera'],\n [/fxios\\/([\\w.-]+)/i, 'firefox'],\n [/samsungbrowser\\/([\\w.]+)/i, 'samsung'],\n [/headlesschrome(?:\\/([\\w.]+)| )/i, 'chrome'],\n [/wv\\).+chrome\\/([\\w.]+).+edgw\\//i, 'edge'],\n [/ wv\\).+(chrome)\\/([\\w.]+)/i, 'chrome'],\n [/chrome\\/([\\w.]+) mobile/i, 'chrome'],\n [/chrome\\/v?([\\w.]+)/i, 'chrome'],\n [/version\\/([\\w.,]+) .*mobile(?:\\/\\w+ | ?)safari/i, 'safari'],\n [/iphone .*mobile(?:\\/\\w+ | ?)safari/i, 'safari'],\n [/version\\/([\\w.,]+) .*safari/i, 'safari'],\n [/webkit.+?(?:mobile ?safari|safari)(\\/[\\w.]+)/i, 'safari', '1'],\n [/(?:mobile|tablet);.*firefox\\/([\\w.-]+)/i, 'firefox'],\n [/mobile vr; rv:([\\w.]+)\\).+firefox/i, 'firefox'],\n [/firefox\\/([\\w.]+)/i, 'firefox'],\n];\nvar ENGINE_RESOLVER_MAP = [\n [/windows.+ edge\\/([\\w.]+)/i, 'edgeHtml'],\n [/arkweb\\/([\\w.]+)/i, 'arkWeb'],\n [/webkit\\/537\\.36.+chrome\\/(?!27)([\\w.]+)/i, 'blink'],\n [/presto\\/([\\w.]+)/i, 'presto'],\n [/webkit\\/([\\w.]+)/i, 'webKit'],\n [/trident\\/([\\w.]+)/i, 'trident'],\n [/netfront\\/([\\w.]+)/i, 'netFront'],\n [/khtml[\\/ ]\\(?([\\w.]+)/i, 'khtml'],\n [/tasman[\\/ ]\\(?([\\w.]+)/i, 'tasman'],\n [/rv:([\\w.]{1,9})\\b.+gecko/i, 'gecko']\n];\nvar HIGH_ENTROPY_BRAND_NAME_MAP = {\n 'Google Chrome': 'Chrome',\n 'Microsoft Edge': 'Edge',\n 'Microsoft Edge WebView2': 'Edge WebView2',\n 'Android WebView': 'Chrome WebView',\n 'HeadlessChrome': 'Chrome Headless',\n 'OperaMobile': 'Opera Mobi',\n};\nvar currentUserAgent = USER_AGENT;\nvar parsedCache = null;\nvar parsedFromHighEntropyValuesOSName = undefined;\nvar parsedFromHighEntropyValuesOSVersion = undefined;\nvar parsedFromHighEntropyValuesBrowserName = undefined;\nvar parsedFromHighEntropyValuesBrowserVersion = undefined;\nvar parsedFromHighEntropyValuesEngineVersion = undefined;\nvar parsedFromHighEntropyValuesDevice = null;\nvar ready;\nfunction resolveWindowsVersion(string) {\n if (typeof string === 'undefined')\n return '';\n var mapped = {\n '4.90': 'ME',\n 'NT3.51': 'NT 3.11',\n 'NT4.0': 'NT 4.0',\n 'NT 5.0': '2000',\n 'NT 5.1': 'XP',\n 'NT 5.2': 'XP',\n 'NT 6.0': 'Vista',\n 'NT 6.1': '7',\n 'NT 6.2': '8',\n 'NT 6.3': '8.1',\n 'NT 6.4': '10',\n 'NT 10.0': '10',\n 'ARM': 'RT'\n }[string];\n if (typeof mapped !== 'undefined')\n return mapped;\n return string;\n}\nfunction resolveUnderscoreVersion(string) {\n if (typeof string === 'undefined')\n return '';\n return string.replace(/_/g, '.');\n}\nfunction resolveVersion(string, resolver) {\n if (typeof resolver === 'function')\n return resolver(string);\n if (typeof resolver === 'string')\n return resolver;\n if (typeof string === 'undefined')\n return '';\n return string;\n}\nfunction parseOS() {\n var name = 'unknown';\n var version = '';\n for (var i = 0; i < OS_RESOLVER_MAP.length; i++) {\n var map = OS_RESOLVER_MAP[i];\n var matched = currentUserAgent.match(map[0]);\n if (matched !== null) {\n name = map[1];\n version = resolveVersion(matched[1], map[2]);\n break;\n }\n }\n if (name === 'ios' && PlatformKit.compareVersion(version, '18.6') === 0) {\n var execs = /\\) Version\\/([\\d.]+)/.exec(currentUserAgent);\n if (execs !== null) {\n var major = parseInt(execs[1].split('.')[0], 10);\n if (major >= 26)\n version = execs[1];\n }\n }\n if (currentUserAgent === USER_AGENT) {\n if (typeof parsedFromHighEntropyValuesOSName !== 'undefined')\n name = parsedFromHighEntropyValuesOSName;\n if (typeof parsedFromHighEntropyValuesOSVersion !== 'undefined')\n version = parsedFromHighEntropyValuesOSVersion;\n if (name === 'macos' && typeof globalThis.navigator.standalone !== 'undefined' && typeof globalThis.navigator.maxTouchPoints !== 'undefined' && globalThis.navigator.maxTouchPoints > 2)\n name = 'ios';\n }\n return {\n name: name,\n version: version\n };\n}\nfunction parseBrowser() {\n var name = 'unknown';\n var version = '';\n for (var i = 0; i < BROWSER_RESOLVER_MAP.length; i++) {\n var map = BROWSER_RESOLVER_MAP[i];\n var matched = currentUserAgent.match(map[0]);\n if (matched !== null) {\n name = map[1];\n version = resolveVersion(matched[1], map[2]);\n break;\n }\n }\n if (currentUserAgent === USER_AGENT) {\n if (typeof parsedFromHighEntropyValuesBrowserName !== 'undefined')\n name = parsedFromHighEntropyValuesBrowserName;\n if (typeof parsedFromHighEntropyValuesBrowserVersion !== 'undefined')\n version = parsedFromHighEntropyValuesBrowserVersion;\n }\n return {\n name: name,\n version: version\n };\n}\nfunction parseEngine() {\n var name = 'unknown';\n var version = '';\n for (var i = 0; i < ENGINE_RESOLVER_MAP.length; i++) {\n var map = ENGINE_RESOLVER_MAP[i];\n var matched = currentUserAgent.match(map[0]);\n if (matched !== null) {\n name = map[1];\n version = resolveVersion(matched[1], map[2]);\n break;\n }\n }\n if (currentUserAgent === USER_AGENT) {\n if (typeof parsedFromHighEntropyValuesEngineVersion !== 'undefined')\n version = parsedFromHighEntropyValuesEngineVersion;\n }\n return {\n name: name,\n version: version\n };\n}\nfunction getParsedCache() {\n if (parsedCache !== null && parsedCache.userAgent === currentUserAgent)\n return parsedCache;\n parsedCache = {\n userAgent: currentUserAgent,\n os: parseOS(),\n browser: parseBrowser(),\n engine: parseEngine(),\n };\n return parsedCache;\n}\nfunction invalidateCache() {\n parsedCache = null;\n parsedFromHighEntropyValuesOSName = undefined;\n parsedFromHighEntropyValuesOSVersion = undefined;\n parsedFromHighEntropyValuesBrowserName = undefined;\n parsedFromHighEntropyValuesBrowserVersion = undefined;\n parsedFromHighEntropyValuesEngineVersion = undefined;\n parsedFromHighEntropyValuesDevice = null;\n}\nfunction normalizeBrand(entry) {\n if (entry === null || typeof entry === 'undefined')\n return { brand: '', version: '' };\n if (typeof entry === 'string')\n return { brand: entry, version: '' };\n return { brand: entry.brand, version: entry.version };\n}\nfunction parseFromHighEntropyValues() {\n if (typeof USER_AGENT_DATA === 'undefined' || typeof USER_AGENT_DATA.getHighEntropyValues === 'undefined')\n return Promise.resolve();\n return USER_AGENT_DATA\n .getHighEntropyValues(['brands', 'fullVersionList', 'mobile', 'model', 'platform', 'platformVersion', 'architecture', 'formFactors', 'bitness', 'uaFullVersion', 'wow64'])\n .then(function (result) {\n try {\n var brands = result.fullVersionList || result.brands || [];\n var platformVersion = result.platformVersion;\n var platform = result.platform;\n var browserName = getParsedCache().browser.name;\n var prevBrandName = null;\n for (var i = 0; i < brands.length; i++) {\n var brand = normalizeBrand(brands[i]);\n var brandVersion = brand.version;\n var brandName = brand.brand;\n if (/not.a.brand/i.test(brandName))\n continue;\n if (prevBrandName === null || (/Chrom/.test(prevBrandName) && brandName !== 'Chromium') || (prevBrandName === 'Edge' && /WebView2/.test(brandName))) {\n brandName = HIGH_ENTROPY_BRAND_NAME_MAP[brandName] || brandName;\n prevBrandName = browserName;\n if (prevBrandName === null || /Chrom/.test(prevBrandName) || !/Chrom/.test(brandName)) {\n browserName = brandName;\n if (browserName === 'Chrome' || browserName === 'Chrome WebView' || browserName === 'Chrome Headless')\n parsedFromHighEntropyValuesBrowserName = 'chrome';\n else if (browserName === 'Edge' || browserName === 'Edge WebView2')\n parsedFromHighEntropyValuesBrowserName = 'edge';\n else if (browserName === 'Opera Mobi')\n parsedFromHighEntropyValuesBrowserName = 'opera';\n parsedFromHighEntropyValuesBrowserVersion = brandVersion;\n }\n prevBrandName = brandName;\n }\n if (brandName === 'Chromium')\n parsedFromHighEntropyValuesEngineVersion = brandVersion;\n }\n if (typeof platformVersion === 'string') {\n if (getParsedCache().os.name === 'windows') {\n if (parseInt(platformVersion.split('.')[0], 10) >= 13)\n parsedFromHighEntropyValuesOSVersion = '11';\n else\n parsedFromHighEntropyValuesOSVersion = '10';\n }\n else {\n parsedFromHighEntropyValuesOSVersion = platformVersion;\n }\n }\n if (typeof platform === 'string') {\n if (/android/i.test(platform))\n parsedFromHighEntropyValuesOSName = 'android';\n else if (/ios|iphone|ipad/i.test(platform))\n parsedFromHighEntropyValuesOSName = 'ios';\n else if (/windows|win32/i.test(platform))\n parsedFromHighEntropyValuesOSName = 'windows';\n else if (/macos|macintel/i.test(platform))\n parsedFromHighEntropyValuesOSName = 'macos';\n }\n if (result.mobile === true)\n parsedFromHighEntropyValuesDevice = 'mobile';\n parsedCache = null;\n }\n catch (_) {\n }\n })\n .catch(function () {\n parsedCache = null;\n });\n}\nready = parseFromHighEntropyValues();\nvar PlatformKit = {\n version: packageJSON.version,\n get ready() {\n return ready;\n },\n set userAgent(userAgent) {\n if (currentUserAgent === userAgent)\n return;\n currentUserAgent = userAgent;\n invalidateCache();\n ready = parseFromHighEntropyValues();\n },\n get userAgent() {\n return currentUserAgent;\n },\n get os() {\n return getParsedCache().os;\n },\n get browser() {\n return getParsedCache().browser;\n },\n get engine() {\n return getParsedCache().engine;\n },\n get device() {\n if (currentUserAgent === USER_AGENT && parsedFromHighEntropyValuesDevice !== null)\n return parsedFromHighEntropyValuesDevice;\n var osName = getParsedCache().os.name;\n if (osName === 'ios' || osName === 'android')\n return 'mobile';\n if (osName === 'windows' || osName === 'macos')\n return 'desktop';\n return 'unknown';\n },\n get webview() {\n return /; ?wv|applewebkit(?!.*safari)/i.test(currentUserAgent);\n },\n get node() {\n return typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && typeof globalThis.process.versions.node !== 'undefined';\n },\n get standalone() {\n var osName = getParsedCache().os.name;\n if (osName === 'ios')\n return globalThis.navigator.standalone === true;\n if (typeof globalThis.matchMedia === 'undefined')\n return false;\n return globalThis.matchMedia('(display-mode: standalone)').matches;\n },\n compareVersion: function (lhs, rhs) {\n var pa = lhs.split('.');\n var pb = rhs.split('.');\n var length = Math.max(pa.length, pb.length);\n for (var i = 0; i < length; i++) {\n var a = void 0;\n var b = void 0;\n if (i < pa.length)\n a = parseInt(pa[i], 10);\n else\n a = 0;\n if (i < pb.length)\n b = parseInt(pb[i], 10);\n else\n b = 0;\n if (a > b)\n return 1;\n if (a < b)\n return -1;\n }\n return 0;\n }\n};\n\nexport { ENGINE_RESOLVER_MAP, HIGH_ENTROPY_BRAND_NAME_MAP, PlatformKit as default };\n//# sourceMappingURL=platform-kit.mjs.map\n","interface HTMLPresentationAttributes {\n width?: string;\n height?: string;\n border?: string;\n frameBorder?: string;\n scrolling?: string;\n cellPadding?: string;\n cellSpacing?: string;\n frame?: string;\n rules?: string;\n noWrap?: boolean;\n}\n\nexport function createHiddenElement<K extends keyof HTMLElementTagNameMap>(tagName: K, focusable: boolean = true): HTMLElementTagNameMap[K] {\n const element: HTMLElementTagNameMap[K] & HTMLPresentationAttributes = globalThis.document.createElement(tagName) as HTMLElementTagNameMap[K] & HTMLPresentationAttributes;\n\n if (typeof element.width !== 'undefined') element.width = '0';\n if (typeof element.height !== 'undefined') element.height = '0';\n if (typeof element.border !== 'undefined') element.border = '0';\n if (typeof element.frameBorder !== 'undefined') element.frameBorder = '0';\n if (typeof element.scrolling !== 'undefined') element.scrolling = 'no';\n if (typeof element.cellPadding !== 'undefined') element.cellPadding = '0';\n if (typeof element.cellSpacing !== 'undefined') element.cellSpacing = '0';\n if (typeof element.frame !== 'undefined') element.frame = 'void';\n if (typeof element.rules !== 'undefined') element.rules = 'none';\n if (typeof element.noWrap !== 'undefined') element.noWrap = true;\n\n element.tabIndex = -1;\n element.setAttribute('role', 'presentation');\n\n if (focusable) {\n element.setAttribute('aria-hidden', 'false');\n\n element.style.width = '1px';\n element.style.height = '1px';\n } else {\n element.setAttribute('aria-hidden', 'true');\n\n element.style.width = '0';\n element.style.height = '0';\n element.style.zIndex = '-9999';\n element.style.display = 'none';\n element.style.visibility = 'hidden';\n element.style.pointerEvents = 'none';\n }\n\n element.style.position = 'absolute';\n element.style.top = '0';\n element.style.left = '0';\n element.style.padding = '0';\n element.style.margin = '0';\n element.style.border = 'none';\n element.style.outline = 'hidden';\n element.style.clip = 'rect(1px, 1px, 1px, 1px)';\n element.style.clipPath = 'inset(50%)';\n element.style.overflow = 'hidden';\n element.style.whiteSpace = 'nowrap';\n\n return element;\n}\n","var version = \"0.0.4\";\nvar packageJSON = {\n\tversion: version};\n\nvar RTL_LANGUAGES = ['ae', 'ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'glk', 'he', 'iw', 'ku', 'mzn', 'nqo', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi'];\nfunction normalizeLocale(locale) {\n if (locale === null || typeof locale === 'undefined')\n return locale;\n if (locale.length === 0)\n return null;\n locale = locale.replace(/_/g, '-');\n if (locale === 'C' || locale.toLowerCase() === 'posix')\n return 'en-US';\n if (locale.indexOf('.') !== -1)\n return normalizeLocale(locale.split('.')[0]);\n if (locale.indexOf('@') !== -1)\n return normalizeLocale(locale.split('@')[0]);\n var parts = locale.split('-');\n if (parts.length === 0)\n return null;\n parts[0] = parts[0].toLowerCase();\n if (parts.length > 1 && parts[1].length === 2)\n parts[1] = parts[1].toUpperCase();\n if (parts.length > 2 && parts[1].length === 4)\n parts[1] = parts[1].charAt(0).toUpperCase() + parts[1].slice(1).toLowerCase();\n return parts.join('-');\n}\nvar language = null;\nvar languages = [];\nvar timezone = null;\nvar offset = 0;\nvar rtl = false;\nvar isRTLResolved = null;\nfunction addLanguages(langs) {\n for (var i = 0; i < langs.length; i++)\n addLanguage(langs[i]);\n}\nfunction addLanguage(lang) {\n lang = normalizeLocale(lang);\n if (typeof lang === 'string' && languages.indexOf(lang) === -1) {\n if (language === null)\n language = lang;\n languages.push(lang);\n }\n}\nif (typeof Intl !== 'undefined') {\n try {\n addLanguage(Intl.DateTimeFormat().resolvedOptions().locale);\n }\n catch (_) {\n }\n try {\n timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n catch (_) {\n }\n}\nif (typeof globalThis.navigator !== 'undefined') {\n if (typeof globalThis.navigator.languages !== 'undefined')\n addLanguages(globalThis.navigator.languages);\n if (typeof globalThis.navigator.language !== 'undefined')\n addLanguage(globalThis.navigator.language);\n if (typeof globalThis.navigator.userLanguage !== 'undefined')\n addLanguage(globalThis.navigator.userLanguage);\n if (typeof globalThis.navigator.browserLanguage !== 'undefined')\n addLanguage(globalThis.navigator.browserLanguage);\n if (typeof globalThis.navigator.systemLanguage !== 'undefined')\n addLanguage(globalThis.navigator.systemLanguage);\n}\ntry {\n offset = new Date().getTimezoneOffset() * -1;\n}\ncatch (_) {\n}\nif (typeof language === 'string') {\n if (typeof Intl !== 'undefined' && typeof Intl.Locale !== 'undefined') {\n try {\n var intlLocale = new Intl.Locale(language);\n if (typeof intlLocale.getTextInfo === 'function')\n isRTLResolved = intlLocale.getTextInfo().direction === 'rtl';\n else if (typeof intlLocale.textInfo !== 'undefined')\n isRTLResolved = intlLocale.textInfo.direction === 'rtl';\n }\n catch (_) {\n }\n }\n if (typeof isRTLResolved !== 'boolean') {\n var matched = /^([A-Za-z]{1,8})(?:[-_][A-Za-z0-9]{1,8})*$/.exec(language);\n if (matched !== null) {\n var lang = matched[1].toLowerCase();\n for (var i = 0; i < RTL_LANGUAGES.length; i++) {\n if (RTL_LANGUAGES[i] === lang) {\n isRTLResolved = true;\n break;\n }\n }\n }\n }\n}\nif (typeof isRTLResolved === 'boolean')\n rtl = isRTLResolved;\nvar LocaleKit = {\n version: packageJSON.version,\n language: language,\n languages: languages,\n timezone: timezone,\n offset: offset,\n rtl: rtl,\n};\n\nexport { LocaleKit as default };\n//# sourceMappingURL=locale-kit.mjs.map\n","import LocaleKit from \"web-locale-kit\";\n\ndeclare global {\n interface Map<K, V> {\n get(key: K): V | undefined;\n\n has(key: K): boolean;\n\n set(key: K, value: V): this;\n\n delete(key: K): boolean;\n }\n\n interface MapConstructor {\n new<K, V>(): Map<K, V>;\n }\n\n var Map: MapConstructor;\n}\n\ninterface IdCache {\n get(mode: string, query: string): string | undefined;\n\n set(mode: string, query: string, id: string): void;\n}\n\ninterface IOSAndMacOSLookupAppInfo {\n resultCount?: number;\n results?: IOSAndMacOSLookupAppResult[];\n}\n\ninterface IOSAndMacOSLookupAppResult {\n trackId: number;\n}\n\ninterface WindowsAppInfo {\n Products?: WindowsAppProduct[];\n Product?: WindowsAppProduct;\n}\n\ninterface WindowsAppProduct {\n ProductId?: string;\n}\n\nconst TRACK_ID = 'track-id';\nconst BUNDLE_ID = 'bundle-id';\nconst TRACK_ID_CACHE_TTL: number = 1000 * 60 * 60;\nconst idCache: IdCache = (function (): IdCache {\n let supportsLocalStorage: boolean;\n\n try {\n if (typeof globalThis.localStorage === 'undefined') {\n supportsLocalStorage = false;\n } else {\n const key: string = '__id_cache_test__';\n\n globalThis.localStorage.setItem(key, '');\n globalThis.localStorage.removeItem(key);\n\n supportsLocalStorage = true;\n }\n } catch (_: unknown) {\n // Safari Private Mode / Storage Disabled / Quota Exceeded\n supportsLocalStorage = false;\n }\n\n if (supportsLocalStorage) {\n return {\n get(mode: string, query: string): string | undefined {\n try {\n const item: string | null = globalThis.localStorage.getItem(mode + ':' + query);\n\n if (item == null) return undefined;\n\n const split: string[] = item.split('|');\n\n if (split.length !== 2) return undefined;\n\n const expiry: number = +split[0];\n\n if (isNotANumber(expiry) || expiry < getNow()) {\n globalThis.localStorage.removeItem(mode + ':' + query);\n\n return undefined;\n }\n\n return split[1];\n } catch (_: unknown) {\n return undefined;\n }\n },\n\n set(mode: string, query: string, id: string): void {\n try {\n globalThis.localStorage.setItem(mode + ':' + query, getNow() + TRACK_ID_CACHE_TTL + '|' + id);\n } catch (_: unknown) {\n return;\n }\n }\n }\n }\n\n if (typeof globalThis.Map !== 'undefined') {\n const cache: Map<string, string | undefined> = new Map<string, string | undefined>();\n\n return {\n get(mode: string, query: string): string | undefined {\n const item: string | undefined = cache.get(mode + ':' + query);\n\n if (typeof item === 'undefined') return undefined;\n\n const split: string[] = item.split('|');\n\n if (split.length !== 2) return undefined;\n\n const expiry: number = +split[0];\n\n if (isNotANumber(expiry) || expiry < getNow()) {\n cache.delete(mode + ':' + query);\n\n return undefined;\n }\n\n return split[1];\n },\n\n set(mode: string, query: string, id: string): void {\n cache.set(mode + ':' + query, getNow() + TRACK_ID_CACHE_TTL + '|' + id);\n },\n }\n }\n\n const cache: Record<string, string | undefined> = Object.create(null);\n\n return {\n get(mode: string, query: string): string | undefined {\n const item: string | undefined = cache[mode + ':' + query];\n\n if (typeof item === 'undefined') return undefined;\n\n const split: string[] = item.split('|');\n\n if (split.length !== 2) return undefined;\n\n const expiry: number = +split[0];\n\n if (isNotANumber(expiry) || expiry < getNow()) {\n try {\n delete cache[mode + ':' + query];\n } catch (_: unknown) {\n cache[mode + ':' + query] = undefined;\n }\n\n return undefined;\n }\n\n return split[1];\n },\n\n set(mode: string, query: string, id: string): void {\n cache[mode + ':' + query] = getNow() + TRACK_ID_CACHE_TTL + '|' + id;\n }\n }\n})();\n\nfunction isNotANumber(value: number): boolean {\n return value !== value;\n}\n\nfunction getNow(): number {\n if (typeof Date.now !== 'undefined') return Date.now();\n return (new Date).getTime();\n}\n\nfunction requestGet<T>(url: string, async: true): Promise<T | undefined>;\nfunction requestGet<T>(url: string, async?: false): T | undefined;\nfunction requestGet<T>(url: string, async: boolean = false): Promise<T | undefined> | (T | undefined) {\n if (typeof globalThis.fetch === 'function' && async) {\n return globalThis.fetch(url)\n .then(function (response: Response): Promise<any> {\n return response.json();\n })\n .catch(function (_: unknown): void {\n return undefined;\n });\n } else {\n try {\n const xhr: XMLHttpRequest = new XMLHttpRequest();\n\n xhr.open('GET', url, async);\n xhr.send();\n\n const status: number = xhr.status;\n\n if (status >= 200 && status < 300) return JSON.parse(xhr.response);\n return undefined;\n } catch (_: unknown) {\n return undefined;\n }\n }\n}\n\nfunction resolveGetProductIdURL(packageFamilyName: string): string {\n const locales: readonly string[] = LocaleKit.languages;\n let locale: string = 'en-US';\n let country: string = 'US';\n\n for (let i: number = 0; i < locales.length; i++) {\n const candidate: string = locales[i];\n\n if (candidate.indexOf('-') === -1) continue;\n\n const subtags: string[] = candidate.split('-');\n\n for (let j: number = 1; j < subtags.length; j++) {\n const subtag: string = subtags[j];\n\n if (/^[A-Za-z]{2}$/.test(subtag) || /^\\d{3}$/.test(subtag)) {\n locale = candidate;\n country = subtag;\n break;\n }\n }\n\n if (locale === candidate) break;\n }\n\n return 'https://displaycatalog.md.mp.microsoft.com/v7.0/products/lookup?value=' + globalThis.encodeURIComponent(packageFamilyName) + '&market=' + globalThis.encodeURIComponent(country) + '&languages=' + globalThis.encodeURIComponent(locale) + '&alternateId=PackageFamilyName';\n}\n\nfunction resolveGetTrackIdURL(bundleId: string): string {\n return 'https://itunes.apple.com/lookup?bundleId=' + globalThis.encodeURIComponent(bundleId);\n}\n\nfunction parseGetProductIdResponse(response: WindowsAppInfo | undefined): string | undefined {\n if (typeof response === 'undefined') return undefined;\n\n let product: WindowsAppProduct | undefined | null = undefined;\n\n if (typeof response.Products !== 'undefined') product = response.Products[0];\n else if (typeof response.Product !== 'undefined') product = response.Product;\n\n if (typeof product === 'undefined' || product === null) return undefined;\n\n return product.ProductId;\n}\n\nfunction parseGetTrackIdResponse(response: IOSAndMacOSLookupAppInfo | undefined): string | undefined {\n if (typeof response === 'undefined' || typeof response.results === 'undefined') return undefined;\n\n const results: IOSAndMacOSLookupAppResult[] = response.results;\n\n if (results.length === 0) return undefined;\n\n const result: IOSAndMacOSLookupAppResult = results[0];\n\n if (typeof result === 'undefined') return undefined;\n\n return '' + result.trackId;\n}\n\nexport function getProductId(packageFamilyName: string): string | undefined {\n const cache: string | undefined = idCache.get(BUNDLE_ID, packageFamilyName);\n\n if (typeof cache !== 'undefined') return cache;\n\n try {\n const productId: string | undefined = parseGetProductIdResponse(requestGet<WindowsAppInfo>(resolveGetProductIdURL(packageFamilyName)));\n\n if (typeof productId === 'undefined') return undefined;\n\n idCache.set(BUNDLE_ID, packageFamilyName, productId);\n\n return productId;\n } catch (_: unknown) {\n return undefined;\n }\n}\n\nexport function getTrackId(bundleId: string): string | undefined {\n const cache: string | undefined = idCache.get(TRACK_ID, bundleId);\n\n if (typeof cache !== 'undefined') return cache;\n\n try {\n const trackId: string | undefined = parseGetTrackIdResponse(requestGet<IOSAndMacOSLookupAppInfo>(resolveGetTrackIdURL(bundleId)));\n\n if (typeof trackId === 'undefined') return undefined;\n\n idCache.set(TRACK_ID, bundleId, trackId);\n\n return trackId;\n } catch (_: unknown) {\n return undefined;\n }\n}\n\n\nexport function getProductIdAsync(packageFamilyName: string): Promise<string | undefined> {\n const cache: string | undefined = idCache.get(BUNDLE_ID, packageFamilyName);\n\n if (typeof cache !== 'undefined') return Promise.resolve(cache);\n\n try {\n return requestGet<WindowsAppInfo>(resolveGetProductIdURL(packageFamilyName), true)\n .then(parseGetProductIdResponse)\n .then(function (productId: string | undefined): string | undefined {\n if (typeof productId === 'undefined') return undefined;\n\n idCache.set(BUNDLE_ID, packageFamilyName, productId);\n\n return productId;\n });\n } catch (_: unknown) {\n return Promise.resolve(undefined);\n }\n}\n\nexport function getTrackIdAsync(bundleId: string): Promise<string | undefined> {\n const cache: string | undefined = idCache.get(TRACK_ID, bundleId);\n\n if (typeof cache !== 'undefined') return Promise.resolve(cache);\n\n try {\n return requestGet<IOSAndMacOSLookupAppInfo>(resolveGetTrackIdURL(bundleId), true)\n .then(parseGetTrackIdResponse)\n .then(function (trackId: string | undefined): string | undefined {\n if (typeof trackId === 'undefined') return undefined;\n\n idCache.set(TRACK_ID, bundleId, trackId);\n\n return trackId;\n });\n } catch (_: unknown) {\n return Promise.resolve(undefined);\n }\n}\n","export function getTopmostWindow(): WindowProxy {\n try {\n if (globalThis.top !== null && globalThis.top !== globalThis.window) {\n void globalThis.top.location.href;\n return globalThis.top;\n }\n } catch (_: unknown) {\n }\n\n return globalThis as unknown as WindowProxy;\n}\n","declare global {\n interface EventTarget {\n attachEvent?(type: string, listener: (event: Event) => void): void;\n detachEvent?(type: string, listener: (event: Event) => void): void;\n }\n}\n\ntype IEWrapper = (event: Event) => void;\ntype IEWrapperRecord = {\n target: EventTarget;\n type: string;\n callback: EventListenerOrEventListenerObject;\n wrapper: IEWrapper;\n};\n\nconst IE_WRAPPER_STORE: IEWrapperRecord[] = [];\nconst VENDORS: string[] = ['', 'webkit', 'moz', 'ms', 'MS', 'o', 'O'];\nconst LEGACY_TYPE_MAP: Record<string, string[]> = {\n 'focus': ['focus', 'focusin'],\n 'blur': ['blur', 'focusout'],\n};\n\nfunction resolveVendor(target: EventTarget, type: string): string {\n let types: string[];\n const legacy: string[] | undefined = LEGACY_TYPE_MAP[type];\n\n if (typeof legacy !== 'undefined') types = legacy;\n else types = [type];\n\n for (let i: number = 0; i < VENDORS.length; i++) {\n for (let j: number = 0; j < types.length; j++) {\n const name: string = VENDORS[i] + types[j];\n\n if (typeof (target as unknown as Record<string, unknown>)['on' + name] !== 'undefined') return name;\n }\n }\n\n return type;\n}\n\nfunction findIEWrapper(target: EventTarget, type: string, callback: (evt: Event) => void): IEWrapper | undefined {\n for (let i: number = 0; i < IE_WRAPPER_STORE.length; i++) {\n const wrapper: IEWrapperRecord = IE_WRAPPER_STORE[i];\n\n if (wrapper.target === target && wrapper.type === type && wrapper.callback === callback) return wrapper.wrapper;\n }\n\n return undefined;\n}\n\nfunction setIEWrapper(target: EventTarget, type: string, callback: (evt: Event) => void, wrapper: IEWrapper): void {\n IE_WRAPPER_STORE.push({target, type, callback, wrapper});\n}\n\nfunction removeIEWrapper(target: EventTarget, type: string, callback: (evt: Event) => void): IEWrapper | undefined {\n for (let i: number = 0; i < IE_WRAPPER_STORE.length; i++) {\n const wrapper: IEWrapperRecord = IE_WRAPPER_STORE[i];\n\n if (wrapper.target === target && wrapper.type === type && wrapper.callback === callback) {\n IE_WRAPPER_STORE.splice(i, 1);\n\n return wrapper.wrapper;\n }\n }\n\n return undefined;\n}\n\nfunction preventDefaultPolyfill(this: Event): void {\n this.returnValue = false;\n}\n\nfunction stopPropagationPolyfill(this: Event): void {\n this.cancelBubble = true;\n}\n\nexport function addEvent(target: EventTarget | undefined, type: string | undefined, callback: (evt: Event) => void): void {\n if (typeof target === 'undefined' || typeof type === 'undefined') return;\n\n type = resolveVendor(target, type);\n\n if (typeof target.addEventListener === 'function') {\n return target.addEventListener(type, callback);\n }\n\n if (typeof target.attachEvent === 'function') {\n const existing: IEWrapper | undefined = findIEWrapper(target, type, callback);\n\n if (typeof existing === 'function') return;\n\n const wrapper: IEWrapper = function (event: Event | undefined): void {\n if (typeof event === 'undefined') event = globalThis.event;\n if (typeof event === 'undefined') return;\n\n try {\n Object.defineProperty(event, 'currentTarget', {value: target, configurable: true});\n } catch (_: unknown) {\n }\n\n if (typeof event.preventDefault !== 'function') event.preventDefault = preventDefaultPolyfill.bind(event);\n if (typeof event.stopPropagation !== 'function') event.stopPropagation = stopPropagationPolyfill.bind(event);\n\n callback.call(target, event);\n };\n\n setIEWrapper(target, type, callback, wrapper);\n\n return target.attachEvent('on' + type, wrapper);\n }\n}\n\nexport function removeEvent(target: EventTarget | undefined, type: string | undefined, callback: (evt: Event) => void): void {\n if (typeof target === 'undefined' || typeof type === 'undefined') return;\n\n type = resolveVendor(target, type);\n\n if (typeof target.removeEventListener === 'function') {\n return target.removeEventListener(type, callback);\n }\n\n if (typeof target.detachEvent === 'function') {\n const wrapper: IEWrapper | undefined = removeIEWrapper(target, type, callback);\n\n if (typeof wrapper === 'function') target.detachEvent('on' + type, wrapper);\n\n return;\n }\n}\n\n","import packageJSON from \"./package.json\" assert {type: 'json'};\nimport PlatformKit, {Browsers, type OS} from 'web-platform-kit';\nimport {createHiddenElement} from \"./utils/create-hidden-element\";\nimport {getProductId, getProductIdAsync, getTrackId, getTrackIdAsync} from \"./utils/get-id\";\nimport {getTopmostWindow} from \"./utils/get-topmost-window\";\nimport {addEvent, removeEvent} from \"./utils/event-listener-utils\";\n\ndeclare global {\n interface Document {\n webkitVisibilityState?: 'hidden' | 'visible';\n mozVisibilityState?: 'hidden' | 'visible';\n msVisibilityState?: 'hidden' | 'visible';\n webkitHidden?: boolean;\n mozHidden?: boolean;\n msHidden?: boolean;\n }\n\n interface FileSystemDirectoryHandle {\n values(): AsyncIterableIterator<FileSystemHandle>\n }\n\n interface SymbolConstructor {\n readonly asyncIterator: symbol;\n }\n\n var showOpenFilePicker: (options?: OpenFilePickerOptions) => Promise<FileSystemFileHandle[]>;\n var showDirectoryPicker: (options?: OpenDirectoryPickerOptions) => Promise<FileSystemDirectoryHandle>;\n var cordova: CordovaPlugin | undefined;\n}\n\ninterface OpenFilePickerOptions {\n excludeAcceptAllOption?: boolean;\n id?: string;\n multiple?: boolean;\n startIn?: OpenPickerStartIn;\n types?: {\n description?: string;\n accept: Record<string, string[]>;\n }[];\n}\n\ninterface OpenDirectoryPickerOptions {\n id?: string;\n mode?: 'read' | 'readwrite';\n startIn?: OpenPickerStartIn;\n}\n\ninterface IteratorYieldResult<TYield> {\n done?: false;\n value: TYield;\n}\n\ninterface IteratorReturnResult<TReturn> {\n done: true;\n value: TReturn;\n}\n\ninterface AsyncIterator<T, TReturn = any, TNext = any> {\n next(...[value]: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;\n\n return?(value?: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T, TReturn>>;\n\n throw?(e?: any): Promise<IteratorResult<T, TReturn>>;\n}\n\ninterface AsyncIterableIterator<T, TReturn = any, TNext = any> extends AsyncIterator<T, TReturn, TNext> {\n [Symbol.asyncIterator](): AsyncIterableIterator<T, TReturn, TNext>;\n}\n\ntype IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;\nexport declare type URLCandidate = URL | string;\nexport declare type URLCandidateOrFallback = URLCandidate | (() => any);\nexport declare type URLStringOrFallback = string | (() => any);\nexport declare type OpenPickerStartIn = 'desktop' | 'documents' | 'downloads' | 'music' | 'pictures' | 'videos';\nexport declare type AppOpenedBy = 'scheme' | 'universal' | 'intent' | 'fallback' | 'store';\n\nexport enum SettingType {\n General = 'general',\n Network = 'network',\n Display = 'display',\n Appearance = 'appearance',\n Accessibility = 'accessibility',\n Battery = 'battery',\n Datetime = 'datetime',\n Language = 'language',\n Accounts = 'accounts',\n Storage = 'storage',\n}\n\ninterface CordovaPlugin {\n InAppBrowser?: CordovaInAppBrowser;\n}\n\ninterface CordovaInAppBrowser {\n open(url?: string | URL, target?: string, features?: string): WindowProxy | null;\n}\n\ninterface EventConfig {\n target?: EventTarget;\n type?: string;\n}\n\ninterface FocusEventConfig {\n focus: EventConfig;\n blur: EventConfig;\n visibilitychange: EventConfig;\n}\n\ninterface IntentInfo {\n scheme?: string;\n packageName?: string;\n fallback?: string;\n}\n\nexport declare interface AppInfo {\n scheme?: URLCandidate;\n fallback?: URLCandidateOrFallback;\n timeout?: number;\n allowAppStore?: boolean;\n allowWebStore?: boolean;\n}\n\nexport declare interface AndroidAppInfo extends AppInfo {\n intent?: URLCandidate;\n packageName?: string;\n}\n\nexport declare interface IOSAppInfo extends AppInfo {\n universal?: URLCandidate;\n bundleId?: string;\n trackId?: string;\n}\n\nexport declare interface WindowsAppInfo extends AppInfo {\n packageFamilyName?: string;\n productId?: string;\n}\n\nexport declare interface MacOSAppInfo extends AppInfo {\n bundleId?: string;\n trackId?: string;\n}\n\nexport declare interface AppOpenOptions {\n android?: AndroidAppInfo;\n ios?: IOSAppInfo;\n windows?: WindowsAppInfo;\n macos?: MacOSAppInfo;\n}\n\nexport declare interface TelephoneOptions {\n to?: string;\n}\n\nexport declare interface MessageOptions {\n to?: string | string[];\n body?: string;\n}\n\nexport declare interface MailOptions {\n to?: string | string[];\n cc?: string | string[];\n bcc?: string | string[];\n subject?: string;\n body?: string;\n}\n\nexport declare interface FilepickerOptions {\n accept?: string | string[];\n id?: string;\n directory?: boolean;\n multiple?: boolean;\n startIn?: OpenPickerStartIn;\n}\n\n/**\n * Auxiliary helpers for {@link LaunchKitInstance} — environment probes and store-id lookups.\n */\ninterface LaunchKitUtils {\n /**\n * Whether Android `intent://` links can launch apps in the current browser.\n *\n * @remarks\n * `false` outside Android, and for browsers with known intent regressions\n * (certain Firefox/Opera ranges) or in-app browsers (Facebook, Instagram, WeChat, TikTok).\n */\n get canOpenIntent(): boolean;\n\n /**\n * Whether iOS universal links are available (iOS 9+).\n */\n get canOpenUniversal(): boolean;\n\n /**\n * Whether {@link LaunchKitInstance.setting} can open settings on this platform.\n *\n * @remarks\n * `false` on iOS, on Windows below 10, and on macOS below 10.10.\n */\n get canOpenSetting(): boolean;\n\n /**\n * Looks up an App Store `trackId` from an iOS/macOS bundle id (async, non-blocking).\n *\n * @param bundleId - The app's bundle identifier (e.g. `'com.example.app'`).\n * @returns The numeric track id as a string, or `undefined` if not found.\n *\n * @remarks\n * Uses `fetch` and caches results for one hour; failures resolve to `undefined`\n * rather than throwing. The synchronous `getTrackId` named export exists for internal\n * use but blocks the main thread.\n */\n getTrackId(bundleId: string): Promise<string | undefined>;\n\n /**\n * Looks up a Microsoft Store `ProductId` from a package family name (async, non-blocking).\n *\n * @param packageFamilyName - The Windows package family name.\n * @returns The product id, or `undefined` if not found.\n *\n * @remarks\n * Uses `fetch` and caches results for one hour; failures resolve to `undefined`\n * rather than throwing. Market and language are derived from {@link LocaleKit}.\n */\n getProductId(packageFamilyName: string): Promise<string | undefined>;\n}\n\n/**\n * Launcher for external apps and communication intents from the web.\n *\n * Opens installed apps via deep links / custom schemes, Android `intent://` URLs,\n * and iOS universal links — trying each candidate in order until one succeeds, with\n * App Store / web-store fallbacks. Also covers `tel`, `sms`, `mailto`, a file picker,\n * and system-settings deep links.\n *\n * @remarks\n * App-opening relies on focus/visibility heuristics with per-OS timeouts; results\n * indicate a candidate was attempted and the page appeared to background, not a hard\n * confirmation of launch. Deep links need a real user gesture — call these methods\n * from within a click/tap handler, or universal links and custom schemes fall back\n * to the web instead of opening the app.\n *\n * @example\n * ```ts\n * const openedBy = await LaunchKit.app({\n * android: {\n * scheme: 'ms-excel://',\n * packageName: 'com.microsoft.office.excel',\n * intent: 'intent://#Intent;scheme=ms-excel;package=com.microsoft.office.excel;action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;S.browser_fallback_url=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.microsoft.office.excel;end',\n * fallback: 'https://www.microsoft.com/ko-kr/microsoft-365/excel',\n * allowAppStore: true,\n * allowWebStore: false,\n * timeout: 1000,\n * },\n * ios: {\n * scheme: 'ms-excel://',\n * bundleId: 'com.microsoft.Office.Excel',\n * trackId: '586683407',\n * universal: 'https://1drv.ms/x/c/7f3d9a02c81b4e65/IQBk2wYfN8pTQ5vHmR9xLzUcAeXtP0jWnK4oD3iFgZs7bQY?e=Rk9mZ2',\n * fallback: 'https://www.microsoft.com/ko-kr/microsoft-365/excel',\n * allowAppStore: true,\n * allowWebStore: false,\n * timeout: 2000,\n * },\n * windows: {\n * scheme: 'ms-excel://',\n * packageFamilyName: 'Microsoft.Office.Desktop_8wekyb3d8bbwe',\n * productId: 'cfq7ttc0pr28',\n * fallback: 'https://www.microsoft.com/ko-kr/microsoft-365/excel',\n * allowAppStore: true,\n * allowWebStore: false,\n * timeout: 750,\n * },\n * macos: {\n * scheme: 'ms-excel://',\n * bundleId: 'com.microsoft.Excel',\n * trackId: '462058435',\n * fallback: 'https://www.microsoft.com/ko-kr/microsoft-365/excel',\n * allowAppStore: true,\n * allowWebStore: false,\n * timeout: 750,\n * }\n * });\n * ```\n */\nexport interface LaunchKitInstance {\n /**\n * The installed package version.\n */\n readonly version: string;\n\n /**\n * Enum of system-settings panes (alias of the named {@link SettingType} export).\n */\n readonly SettingType: typeof SettingType;\n\n /**\n * Auxiliary helpers: capability probes and async store-id lookups.\n */\n readonly utils: LaunchKitUtils;\n\n /**\n * Attempts to open an installed app for the current OS, trying each resolved\n * candidate in order until one appears to launch it.\n *\n * @param options - Per-platform launch info; only the block matching the current OS is used.\n * @returns The route that opened the app: `'scheme'`, `'universal'`, `'intent'`, `'fallback'`, or `'store'`.\n *\n * @remarks\n * Candidates are ordered per platform (e.g. iOS: universal → scheme → fallback →\n * store). A resolved value means that route was attempted and the page backgrounded,\n * not a guaranteed launch. Rejects when the OS is undetected or no candidate can be\n * built for it. `bundleId` / `packageFamilyName` are resolved to a store id via a\n * blocking lookup when the store fallback is needed.\n */\n app(options?: AppOpenOptions): Promise<AppOpenedBy>;\n\n /**\n * Opens the dialer with a `tel:` URL.\n *\n * @param options - The recipient number in `to`.\n * @returns Resolves once the launch attempt settles.\n *\n * @remarks\n * Per RFC 3966, `+` is preserved and visual separators (spaces, dashes, dots,\n * parens) are stripped before dialing.\n */\n telephone(options?: TelephoneOptions): Promise<void>;\n\n /**\n * Opens the SMS composer with an `sms:` URL.\n *\n * @param options - One or more recipients in `to`, and an optional `body`.\n * @returns Resolves once the launch attempt settles.\n *\n * @remarks\n * Body prefill uses OS-specific delimiters (`?`/`&`/`;`); iOS 7 in particular cannot\n * prefill the body at all. Recipients are sanitized to digits, `+`, `-`, and `.`.\n */\n message(options?: MessageOptions): Promise<void>;\n\n /**\n * Opens the mail composer with a `mailto:` URL.\n *\n * @param options - `to` / `cc` / `bcc` (each a string or array), plus optional `subject` and `body`.\n * @returns Resolves once the launch attempt settles.\n *\n * @remarks\n * Encodes fields per RFC 6068. The body's line breaks are normalized to CRLF.\n */\n mail(options?: MailOptions): Promise<void>;\n\n /**\n * Opens a file or directory picker and resolves with the chosen files.\n *\n * @param options - `accept` filters, `directory` for folder selection, `multiple`, `id`, and `startIn`.\n * @returns The selected files; an empty array if the user cancels.\n *\n * @remarks\n * Uses the File System Access API (`showOpenFilePicker` / `showDirectoryPicker`)\n * where available, falling back to a hidden `<input type=\"file\">`. Directory\n * selection is recursive and populates each file's `webkitRelativePath`.\n */\n filepicker(options?: FilepickerOptions): Promise<File[]>;\n\n /**\n * Opens a system-settings pane where the platform supports it.\n *\n * @param type - The settings pane to open; defaults to {@link SettingType.General}.\n * @returns Resolves once the launch attempt settles.\n *\n * @remarks\n * Not supported on iOS (settings schemes are private API) and rejects there, and on\n * Windows below 10 / macOS below 10.10. Some Android panes fall back to the general\n * settings screen on older API levels; macOS 13+ uses the newer System Settings schema.\n */\n setting(type?: SettingType): Promise<void>;\n}\n\nconst SETTING_URL: Record<'android' | 'windows' | 'macos' | 'macos13', Record<SettingType, string>> = {\n android: {\n general: 'intent:#Intent;action=android.settings.SETTINGS;end',\n network: 'intent:#Intent;action=android.settings.WIFI_SETTINGS;end',\n display: 'intent:#Intent;action=android.settings.DISPLAY_SETTINGS;end',\n appearance: 'intent:#Intent;action=android.settings.DISPLAY_SETTINGS;end',\n accessibility: 'intent:#Intent;action=android.settings.ACCESSIBILITY_SETTINGS;end',\n battery: 'intent:#Intent;action=android.settings.BATTERY_SAVER_SETTINGS;end',\n datetime: 'intent:#Intent;action=android.settings.DATE_SETTINGS;end',\n language: 'intent:#Intent;action=android.settings.LOCALE_SETTINGS;end',\n accounts: 'intent:#Intent;action=android.settings.SYNC_SETTINGS;end',\n storage: 'intent:#Intent;action=android.settings.INTERNAL_STORAGE_SETTINGS;end',\n },\n windows: {\n general: 'ms-settings:system',\n network: 'ms-settings:network',\n display: 'ms-settings:display',\n appearance: 'ms-settings:colors',\n accessibility: 'ms-settings:easeofaccess',\n battery: 'ms-settings:batterysaver',\n datetime: 'ms-settings:dateandtime',\n language: 'ms-settings:regionlanguage',\n accounts: 'ms-settings:emailandaccounts',\n storage: 'ms-settings:storagesense',\n },\n macos: {\n general: 'x-apple.systempreferences:',\n network: 'x-apple.systempreferences:com.apple.preference.network',\n display: 'x-apple.systempreferences:com.apple.preference.displays',\n appearance: 'x-apple.systempreferences:com.apple.preference.general',\n accessibility: 'x-apple.systempreferences:com.apple.preference.universalaccess',\n battery: 'x-apple.systempreferences:com.apple.preference.energysaver',\n datetime: 'x-apple.systempreferences:com.apple.preference.datetime',\n language: 'x-apple.systempreferences:com.apple.Localization',\n accounts: 'x-apple.systempreferences:com.apple.preferences.internetaccounts',\n storage: 'x-apple.systempreferences:',\n },\n macos13: {\n general: 'x-apple.systempreferences:com.apple.General-Settings.extension',\n network: 'x-apple.systempreferences:com.apple.Network-Settings.extension',\n display: 'x-apple.systempreferences:com.apple.Displays-Settings.extension',\n appearance: 'x-apple.systempreferences:com.apple.Appearance-Settings.extension',\n accessibility: 'x-apple.systempreferences:com.apple.Accessibility-Settings.extension',\n battery: 'x-apple.systempreferences:com.apple.Battery-Settings.extension',\n datetime: 'x-apple.systempreferences:com.apple.Date-Time-Settings.extension',\n language: 'x-apple.systempreferences:com.apple.Localization-Settings.extension',\n accounts: 'x-apple.systempreferences:com.apple.Internet-Accounts-Settings.extension',\n storage: 'x-apple.systempreferences:com.apple.settings.Storage',\n }\n}\n\nconst ANDROID_DEFAULT_TIMEOUT: number = 1000;\nconst IOS_DEFAULT_TIMEOUT: number = 2000;\nconst WINDOWS_DEFAULT_TIMEOUT: number = 750;\nconst MACOS_DEFAULT_TIMEOUT: number = 750;\nconst SETTING_DEFAULT_TIMEOUT: number = 750;\nconst NAVIGATOR: Navigator | undefined = globalThis.navigator;\nlet CLEANUP_INPUT_ELEMENT: null | (() => void) = null;\n\nfunction createTypeGuard<T>(tag: string): (value: unknown) => value is T {\n return function (value: unknown): value is T {\n return Object.prototype.toString.call(value) === '[object ' + tag + ']';\n }\n}\n\nconst isURL: (value: unknown) => value is URL = createTypeGuard<URL>('URL');\nconst isDOMException: (value: unknown) => value is DOMException = createTypeGuard<DOMException>('DOMException');\nconst isArray: (value: unknown) => value is Array<unknown> = createTypeGuard<Array<unknown>>('Array');\nconst isPromise: (value: unknown) => value is Promise<unknown> = createTypeGuard<Promise<unknown>>('Promise');\nconst isHTMLInputElement: (value: unknown) => value is HTMLInputElement = createTypeGuard<HTMLInputElement>('HTMLInputElement');\n\nfunction isHTMLInputElementLike(value: unknown): value is HTMLInputElement {\n if (isHTMLInputElement(value)) return true;\n\n // IE <= 8 reports DOM elements as '[object Object]'; detect structurally via nodeType 1 + tagName instead\n const maybe: HTMLInputElement = value as HTMLInputElement;\n\n return typeof maybe === 'object'\n && maybe !== null\n && maybe.nodeType === 1\n && typeof maybe.tagName === 'string'\n && maybe.tagName.toUpperCase() === 'INPUT';\n}\n\nfunction getDefaultTimeout(): number {\n switch (PlatformKit.os.name) {\n case 'android':\n return ANDROID_DEFAULT_TIMEOUT;\n case 'ios':\n return IOS_DEFAULT_TIMEOUT;\n case 'windows':\n return WINDOWS_DEFAULT_TIMEOUT;\n case 'macos':\n return MACOS_DEFAULT_TIMEOUT;\n default:\n return WINDOWS_DEFAULT_TIMEOUT;\n }\n}\n\nfunction isDocumentHidden(): boolean {\n const top: WindowProxy = getTopmostWindow();\n const topDocument: Document = top.document;\n\n if (topDocument.visibilityState === 'hidden') return true;\n if (topDocument.webkitVisibilityState === 'hidden') return true;\n if (topDocument.mozVisibilityState === 'hidden') return true;\n if (topDocument.msVisibilityState === 'hidden') return true;\n if (typeof topDocument.hidden !== 'undefined') return topDocument.hidden;\n if (typeof topDocument.webkitHidden !== 'undefined') return topDocument.webkitHidden;\n if (typeof topDocument.mozHidden !== 'undefined') return topDocument.mozHidden;\n if (typeof topDocument.msHidden !== 'undefined') return topDocument.msHidden;\n if (typeof topDocument.hasFocus === 'function') return !topDocument.hasFocus();\n\n return true;\n}\n\nfunction dispatchClickEvent(element: HTMLElement, view: WindowProxy = globalThis as unknown as WindowProxy): void {\n let fake: MouseEvent;\n\n try {\n fake = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n view: view\n });\n } catch (_: unknown) {\n // ES5 or Browsers in the ES5~ES6 transition period\n fake = globalThis.document.createEvent('MouseEvents');\n\n fake.initMouseEvent('click', true, true, view, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n }\n\n element.dispatchEvent(fake);\n}\n\nfunction hasFocus(document: Document): boolean {\n if (typeof document.hasFocus === 'function') return document.hasFocus();\n return false;\n}\n\nfunction focus(target: WindowProxy | HTMLOrSVGElement): void {\n try {\n target.focus({preventScroll: true});\n } catch (_: unknown) {\n try {\n target.focus();\n } catch (_: unknown) {\n }\n }\n}\n\nfunction restoreFocus(): boolean {\n const top: WindowProxy = getTopmostWindow();\n const topDocument: Document = top.document;\n\n focus(top);\n\n if (hasFocus(topDocument)) return true;\n\n if (topDocument.body.tabIndex < 0) topDocument.body.tabIndex = -1;\n\n focus(topDocument.body);\n\n if (hasFocus(topDocument)) return true;\n\n let input: HTMLInputElement | undefined = undefined;\n\n try {\n input = createHiddenElement('input');\n\n if (typeof input === 'undefined') return false;\n\n input.type = 'text';\n input.readOnly = true;\n\n topDocument.body.appendChild(input);\n\n focus(input);\n\n try {\n input.select();\n } catch (_: unknown) {\n }\n\n if (hasFocus(topDocument)) return true;\n } catch (_: unknown) {\n } finally {\n if (typeof input !== 'undefined' && input !== null) {\n try {\n input.blur();\n } catch (_: unknown) {\n }\n\n try {\n topDocument.body.removeChild(input);\n } catch (_: unknown) {\n }\n }\n }\n\n return hasFocus(topDocument);\n}\n\nfunction stripURL<T>(value: T | undefined): (T extends URL ? string : T) | undefined {\n return typeof value === 'undefined' ? undefined : isURL(value) ? value.toString() as T extends URL ? string : T : value as Exclude<T, URL>;\n}\n\nfunction resolveFocusEventConfig(): FocusEventConfig {\n const top: WindowProxy = getTopmostWindow();\n const topDocument: Document = top.document;\n\n if (typeof globalThis.cordova !== 'undefined') {\n return {\n focus: {\n target: topDocument,\n type: 'resume',\n },\n blur: {\n target: topDocument,\n type: 'pause',\n },\n visibilitychange: {}\n };\n } else if (PlatformKit.os.name === 'ios') {\n if (PlatformKit.compareVersion(PlatformKit.os.version, '8.0') >= 0) {\n return {\n focus: {},\n blur: {},\n visibilitychange: {\n target: topDocument,\n type: 'visibilitychange',\n }\n };\n } else {\n return {\n focus: {\n target: top,\n type: 'pageshow',\n },\n blur: {\n target: top,\n type: 'pagehide',\n },\n visibilitychange: {}\n }\n }\n } else if (typeof globalThis.document.addEventListener === 'function') {\n return {\n focus: {\n target: top,\n type: 'focus',\n },\n blur: {\n target: top,\n type: 'blur',\n },\n visibilitychange: {\n target: topDocument,\n type: 'visibilitychange',\n }\n };\n } else {\n return {\n focus: {\n target: topDocument,\n type: 'focus',\n },\n blur: {\n target: topDocument,\n type: 'blur',\n },\n visibilitychange: {\n target: topDocument,\n type: 'visibilitychange',\n }\n }\n }\n}\n\nfunction openURL(tried: number, url: string, timeout: number): Promise<void> {\n const config: FocusEventConfig = resolveFocusEventConfig();\n const top: WindowProxy = getTopmostWindow();\n const topDocument: Document = top.document;\n let anchor: HTMLAnchorElement | undefined = undefined;\n let iframe: HTMLIFrameElement | undefined = undefined;\n\n function open(): void {\n if (typeof globalThis.cordova !== 'undefined') {\n if (typeof globalThis.cordova.InAppBrowser !== 'undefined') {\n // required `cordova plugin add cordova-plugin-inappbrowser`\n globalThis.cordova.InAppBrowser.open(url, '_system');\n } else {\n globalThis.open(url, '_system');\n }\n\n return;\n }\n\n if (isUserActivationActive() || tried === 0) {\n top.location.href = url;\n } else {\n try {\n anchor = createHiddenElement('a');\n anchor.href = url;\n topDocument.body.appendChild(anchor);\n\n dispatchClickEvent(anchor, top);\n } catch (_: unknown) {\n } finally {\n if (typeof anchor !== 'undefined') {\n try {\n topDocument.body.removeChild(anchor);\n } catch (_: unknown) {\n }\n }\n }\n }\n\n try {\n iframe = createHiddenElement('iframe');\n iframe.src = url;\n topDocument.body.appendChild(iframe);\n\n globalThis.setTimeout(function (): void {\n if (typeof iframe !== 'undefined') {\n try {\n topDocument.body.removeChild(iframe);\n } catch (_: unknown) {\n }\n }\n }, 500);\n\n return;\n } catch (_: unknown) {\n }\n }\n\n return new Promise<void>(function (resolve: () => void, reject: () => void): void {\n // Pause here when DevTools is open — focus/blur detection is unreliable while debugging\n debugger;\n\n let timeoutId: ReturnType<typeof globalThis.setTimeout> | undefined;\n let resolved: boolean = false;\n\n function cleanup(): void {\n if (typeof timeoutId !== 'undefined') {\n clearTimeout(timeoutId);\n\n timeoutId = undefined;\n }\n\n try {\n removeEvent(config.blur.target, config.blur.type, onblur);\n removeEvent(config.focus.target, config.focus.type, onfocus);\n removeEvent(config.visibilitychange.target, config.visibilitychange.type, onvisibilitychange);\n } catch (_: unknown) {\n // cross-origin window\n }\n\n if (typeof anchor !== 'undefined') {\n try {\n topDocument.body.removeChild(anchor);\n } catch (_: unknown) {\n }\n }\n\n if (typeof iframe !== 'undefined') {\n try {\n topDocument.body.removeChild(iframe);\n } catch (_: unknown) {\n }\n }\n }\n\n function done(success: boolean): void {\n if (resolved) return;\n\n resolved = true;\n\n cleanup();\n if (success) resolve();\n else reject();\n }\n\n function onblur(): void {\n if (typeof timeoutId !== 'undefined') {\n clearTimeout(timeoutId);\n\n timeoutId = undefined;\n }\n\n removeEvent(config.blur.target, config.blur.type, onblur);\n addEvent(config.focus.target, config.focus.type, onfocus);\n }\n\n function onfocus(): void {\n done(true);\n }\n\n function onvisibilitychange(): void {\n if (isDocumentHidden()) onblur();\n else onfocus();\n }\n\n timeoutId = globalThis.setTimeout(function (): void {\n done(false);\n }, timeout);\n\n addEvent(config.blur.target, config.blur.type, onblur);\n addEvent(config.visibilitychange.target, config.visibilitychange.type, onvisibilitychange);\n\n if (!hasFocus(topDocument)) restoreFocus();\n\n try {\n open();\n } catch (_: unknown) {\n done(false);\n }\n });\n}\n\nfunction resolveOptions(option: AppOpenOptions): [[AppOpenedBy, URLStringOrFallback][], number] {\n const resolved: [AppOpenedBy, URLStringOrFallback][] = [];\n const os: OS = PlatformKit.os.name;\n\n if (os === 'unknown') throw new Error('Cannot resolve app open options: unsupported or undetected OS. (userAgent: \"' + PlatformKit.userAgent + '\")');\n\n // common\n let scheme: string | undefined;\n let fallback: URLStringOrFallback | undefined;\n let allowAppStore: boolean | undefined;\n let allowWebStore: boolean | undefined;\n let timeout: number | undefined;\n\n // android\n let intent: string | undefined;\n let packageName: string | undefined;\n\n // ios & macos\n let bundleId: string | undefined;\n let trackId: string | undefined;\n\n // ios\n let universal: string | undefined;\n\n // windows\n let packageFamilyName: string | undefined;\n let productId: string | undefined;\n\n switch (os) {\n case 'android':\n if (typeof option.android === 'undefined') return [[], 0];\n\n intent = stripURL(option.android.intent);\n scheme = stripURL(option.android.scheme);\n fallback = stripURL(option.android.fallback);\n packageName = option.android.packageName;\n allowAppStore = option.android.allowAppStore;\n allowWebStore = option.android.allowWebStore;\n timeout = option.android.timeout;\n\n // intent ⭢ scheme / packageName / fallback\n if (typeof intent !== 'undefined' && (typeof scheme === 'undefined' || typeof packageName === 'undefined' || typeof fallback === 'undefined')) {\n const parsed: IntentInfo = parseIntentURL(intent);\n\n if (typeof parsed.scheme !== 'undefined' && typeof scheme === 'undefined') scheme = parsed.scheme;\n if (typeof parsed.packageName !== 'undefined' && typeof packageName === 'undefined') packageName = parsed.packageName;\n if (typeof parsed.fallback !== 'undefined' && typeof fallback === 'undefined') fallback = parsed.fallback;\n }\n\n // scheme / packageName / fallback ⭢ intent\n if (typeof scheme !== 'undefined' && typeof intent === 'undefined') intent = createIntentURL(scheme, packageName, fallback);\n\n // default android timeout\n if (typeof timeout === 'undefined') timeout = ANDROID_DEFAULT_TIMEOUT;\n\n // intent ⭢ scheme ⭢ fallback ⭢ app store ⭢ web store\n if (typeof intent !== 'undefined' && canOpenIntent()) resolved.push(['intent', intent]);\n if (typeof scheme !== 'undefined') resolved.push(['scheme', scheme]);\n if (typeof fallback !== 'undefined') resolved.push(['fallback', fallback]);\n if (typeof packageName !== 'undefined') {\n if (allowAppStore) resolved.push(['store', createAppStoreURL(packageName, os)]);\n if (allowWebStore) resolved.push(['store', createWebStoreURL(packageName, os)]);\n }\n\n return [resolved, timeout];\n case 'ios':\n if (typeof option.ios === 'undefined') return [[], 0];\n\n universal = stripURL(option.ios.universal);\n scheme = stripURL(option.ios.scheme);\n fallback = stripURL(option.ios.fallback);\n bundleId = option.ios.bundleId;\n trackId = option.ios.trackId;\n allowAppStore = option.ios.allowAppStore;\n allowWebStore = option.ios.allowWebStore;\n timeout = option.ios.timeout;\n\n // bundle id ⭢ track id\n if (typeof bundleId !== 'undefined' && typeof trackId === 'undefined') trackId = getTrackId(bundleId);\n\n // default ios timeout\n if (typeof timeout === 'undefined') timeout = IOS_DEFAULT_TIMEOUT;\n\n // universal ⭢ scheme ⭢ fallback ⭢ app store ⭢ web store\n if (typeof universal !== 'undefined' && canOpenUniversal()) resolved.push(['universal', universal]);\n if (typeof scheme !== 'undefined') resolved.push(['scheme', scheme]);\n if (typeof fallback !== 'undefined') resolved.push(['fallback', fallback]);\n if (typeof trackId !== 'undefined') {\n if (allowAppStore) resolved.push(['store', createAppStoreURL(trackId, os)]);\n if (allowWebStore) resolved.push(['store', createWebStoreURL(trackId, os)]);\n }\n\n return [resolved, timeout];\n case 'windows':\n if (typeof option.windows === 'undefined') return [[], 0];\n\n scheme = stripURL(option.windows.scheme);\n fallback = stripURL(option.windows.fallback);\n packageFamilyName = option.windows.packageFamilyName;\n productId = option.windows.productId;\n allowAppStore = option.windows.allowAppStore;\n allowWebStore = option.windows.allowWebStore;\n timeout = option.windows.timeout;\n\n // package family name ⭢ product id\n if (typeof packageFamilyName !== 'undefined' && typeof productId === 'undefined') productId = getProductId(packageFamilyName);\n\n // default windows timeout\n if (typeof timeout === 'undefined') timeout = WINDOWS_DEFAULT_TIMEOUT;\n\n // scheme ⭢ fallback ⭢ app store ⭢ web store\n if (typeof scheme !== 'undefined') resolved.push(['scheme', scheme]);\n if (typeof fallback !== 'undefined') resolved.push(['fallback', fallback]);\n if (typeof productId !== 'undefined') {\n if (allowAppStore) resolved.push(['store', createAppStoreURL(productId, os)]);\n if (allowWebStore) resolved.push(['store', createWebStoreURL(productId, os)]);\n }\n\n return [resolved, timeout];\n case 'macos':\n if (typeof option.macos === 'undefined') return [[], 0];\n\n scheme = stripURL(option.macos.scheme);\n fallback = stripURL(option.macos.fallback);\n bundleId = option.macos.bundleId;\n trackId = option.macos.trackId;\n allowAppStore = option.macos.allowAppStore;\n allowWebStore = option.macos.allowWebStore;\n timeout = option.macos.timeout;\n\n // bundle id ⭢ track id\n if (typeof bundleId !== 'undefined' && typeof trackId === 'undefined') trackId = getTrackId(bundleId);\n\n // default macos timeout\n if (typeof timeout === 'undefined') timeout = MACOS_DEFAULT_TIMEOUT;\n\n // scheme ⭢ fallback ⭢ app store ⭢ web store\n if (typeof scheme !== 'undefined') resolved.push(['scheme', scheme]);\n if (typeof fallback !== 'undefined') resolved.push(['fallback', fallback]);\n if (typeof trackId !== 'undefined') {\n if (allowAppStore) resolved.push(['store', createAppStoreURL(trackId, os)]);\n if (allowWebStore) resolved.push(['store', createWebStoreURL(trackId, os)]);\n }\n\n return [resolved, timeout];\n }\n}\n\nfunction canOpenIntent(): boolean {\n if (PlatformKit.os.name !== 'android') return false;\n\n const browser: Browsers = PlatformKit.browser.name;\n const version: string = PlatformKit.browser.version;\n\n // Browser: Samsung Internet\n // Version: 17.0.1.69 ≤ v < 17.0.4.3 (17.0.1.69, 17.0.2.69)\n // Bug: `intent://` links open a blank tab instead of launching the target app. (window.open(_blank))\n // Rationale: The regression is reported for 17.0.1; Test results show that the bug persists up to version 17.0.2.69.\n // Sources: https://forum.developer.samsung.com/t/chrome-intent-scheme/20237\n // if (browser === 'samsung' && PlatformKit.compareVersion(version, '17.0.1.69') >= 0 && PlatformKit.compareVersion(version, '17.0.4.3') < 0) return false;\n\n // Browser: Firefox\n // Version: v < 41.0\n // Bug: `intent://` links cannot launch apps because Intent URI handling is not implemented yet.\n // Rationale: The Firefox for Android 41.0 release notes list “Open Android applications from a webpage via Intent URIs” as a new feature, implying earlier versions did not support it.\n // Sources: https://bugzilla.mozilla.org/show_bug.cgi?id=851693\n if (browser === 'firefox' && PlatformKit.compareVersion(version, '41.0') < 0) return false;\n\n // Browser: Firefox\n // Version: 59.0 ≤ v < 68.11.0\n // Bug: When an `intent://` URL contains a `package` parameter, Firefox may incorrectly redirect to the Play Store (or fail to launch the installed app) even if the app is already installed.\n // Rationale: Bugzilla bug 851693 comments report a regression in the 59.x range where a `package` parameter causes Play Store redirection; no explicit fix is documented for 58–68 Fennec, and 68.11.0 is announced as the final Fennec release, so we conservatively assume the entire 58–68.10.* range is impacted.\n // Sources: https://bugzilla.mozilla.org/show_bug.cgi?id=1453784\n if (browser === 'firefox' && PlatformKit.compareVersion(version, '59.0') >= 0 && PlatformKit.compareVersion(version, '68.11.0') < 0) return false;\n\n // Browser: Firefox\n // Version: 80.0 ≤ v < 82.0\n // Bug: Index links / `intent://` URLs may open the Play Store instead of the already-installed target app when loaded inside Firefox for Android (Fenix).\n // Rationale: GitHub issue mozilla-mobile/fenix#12746 and related Support threads describe installed apps being ignored and links going to Play Store starting from 79; follow-up comments indicate fixes landing and QA verification around 81–82.\n // Sources: https://github.com/mozilla-mobile/fenix/issues/12746\n if (browser === 'firefox' && PlatformKit.compareVersion(version, '80.0') >= 0 && PlatformKit.compareVersion(version, '82.0') < 0) return false;\n\n // Browser: Firefox\n // Version: 96.0 ≤ v < 107.0\n // Bug: `S.browser_fallback_url` is always followed even when the target app is installed and should handle the intent, causing the fallback URL to load unnecessarily and potentially leaking SameSite=Strict cookies across contexts.\n // Rationale: Fenix issue #23397 reports `S.browser_fallback_url` always being executed in 96.2.0, and CVE-2022-45413 documents the SameSite cookie leak for Firefox for Android versions prior to 107, so we treat 96–106.* as affected.\n // Sources: https://github.com/mozilla-mobile/fenix/issues/23397\n if (browser === 'firefox' && PlatformKit.compareVersion(version, '96.0') >= 0 && PlatformKit.compareVersion(version, '107.0') < 0) return false;\n\n // Browser: Opera\n // Version: v < 14.0\n // Bug: Presto-based Opera for Android does not reliably support Chrome-style `intent://` links for launching installed apps.\n // Rationale: Opera switched from Presto to Chromium around Opera 14; prior to this, its engine did not fully implement Chrome-specific Android Intent URI semantics.\n // Sources: https://forums.opera.com/topic/11318\n if (browser === 'opera' && PlatformKit.compareVersion(version, '14.0') < 0) return false;\n\n // Browser: Facebook / Instagram / WeChat / TicTok in-app browsers\n // Version:\n // Bug:\n // Rationale:\n // Sources: https://developers.facebook.com/community/threads/470205278761649\n return !(/(?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/[\\w.]+;/i.test(PlatformKit.userAgent) || /instagram[\\/ ][-\\w.]+/i.test(PlatformKit.userAgent) || /micromessenger\\/([\\w.]+)/i.test(PlatformKit.userAgent) || /musical_ly(?:.+app_?version\\/|_)[\\w.]+/i.test(PlatformKit.userAgent) || /ultralite app_version\\/[\\w.]+/i.test(PlatformKit.userAgent));\n}\n\nfunction canOpenUniversal(): boolean {\n return PlatformKit.os.name === 'ios' && PlatformKit.compareVersion(PlatformKit.os.version, '9.0') >= 0;\n}\n\nfunction canOpenSetting(): boolean {\n const os: OS = PlatformKit.os.name;\n const version: string = PlatformKit.os.version;\n\n return !(\n os === 'unknown'\n || (os === 'android' && !canOpenIntent())\n || os === 'ios'\n || (os === 'windows' && (version === 'Vista' || version === 'XP' || version === '2000' || version === 'NT 4.0' || version === 'NT 3.11' || version === 'ME' || PlatformKit.compareVersion(version, '10') < 0))\n || (os === 'macos' && PlatformKit.compareVersion(version, '10.10') < 0)\n );\n}\n\nfunction parseIntentURL(intent: string): IntentInfo {\n const parsed: IntentInfo = {};\n const split: string[] = intent.split('#Intent;');\n\n if (split.length !== 2) return parsed;\n\n const host: string = split[0].replace(/^intent:\\/\\//i, '');\n const parameterString: string = split[1].replace(/;?end\\s*$/i, '');\n const parameters: string[] = parameterString.split(';');\n const extras: Record<string, string> = {};\n\n for (let i: number = 0; i < parameters.length; i++) {\n const part: string = parameters[i];\n const index: number = part.indexOf('=');\n\n if (index !== -1) extras[part.substring(0, index)] = part.substring(index + 1);\n }\n\n if (typeof extras['scheme'] !== 'undefined') {\n if (host.length > 0) parsed.scheme = extras['scheme'] + '://' + host;\n else parsed.scheme = extras['scheme'] + '://';\n }\n\n if (typeof extras['package'] !== 'undefined') parsed.packageName = extras['package'];\n\n if (typeof extras['S.browser_fallback_url'] !== 'undefined') {\n let fallback: string = extras['S.browser_fallback_url'];\n\n try {\n fallback = globalThis.decodeURIComponent(fallback);\n } catch (_: unknown) {\n }\n\n if (/^https?:\\/\\//i.test(fallback)) parsed.fallback = fallback;\n }\n\n return parsed;\n}\n\nfunction createIntentURL(scheme: string, packageName?: string, fallback?: string | (() => any)): string {\n const split: string[] = scheme.split('://');\n const prefix: string = split[0];\n const suffix: string = split[1];\n\n let intent: string = 'intent://';\n\n if (typeof suffix !== 'undefined') intent += suffix;\n\n intent += '#Intent;scheme=' + prefix + ';' + 'action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;';\n\n if (typeof packageName !== 'undefined') intent += 'package=' + packageName + ';';\n if (typeof fallback !== 'undefined' && typeof fallback === 'string') intent += 'S.browser_fallback_url=' + globalThis.encodeURIComponent(fallback) + ';';\n else if (typeof packageName !== 'undefined') intent += 'S.browser_fallback_url=' + globalThis.encodeURIComponent(createAppStoreURL(packageName, 'android')!) + ';';\n\n return intent + 'end';\n}\n\nfunction createAppStoreURL(id: string, os: Exclude<OS, 'unknown'>): string {\n switch (os) {\n case 'android':\n return 'market://details?id=' + id;\n case 'ios':\n return 'itms-apps://itunes.apple.com/app/id' + id + '?mt=8';\n case 'windows':\n return 'ms-windows-store://pdp/?ProductId=' + id;\n case 'macos':\n return 'macappstore://itunes.apple.com/app/id' + id + '?mt=12';\n default:\n return os satisfies never;\n }\n}\n\nfunction createWebStoreURL(id: string, os: Exclude<OS, 'unknown'>): string {\n switch (os) {\n case 'android':\n return 'https://play.google.com/store/apps/details?id=' + id;\n case 'ios':\n return 'https://itunes.apple.com/app/id' + id + '?mt=8';\n case 'windows':\n return 'https://apps.microsoft.com/detail/' + id;\n case 'macos':\n return 'https://apps.apple.com/app/id' + id + '?mt=12';\n default:\n return os satisfies never;\n }\n}\n\nfunction escapeURIComponentString(value: string): string {\n return globalThis.encodeURIComponent(value)\n .replace(/[!'()*]/g, function (char: string): string {\n return '%' + char.charCodeAt(0).toString(16);\n });\n}\n\nfunction sanitizeSMSRecipient(value: string): string {\n return value.replace(/[^\\d+\\-.]/g, '');\n}\n\nfunction escapeURIComponentMailAddressString(value: string): string {\n return escapeURIComponentString(value)\n .replace(/%40/g, '@')\n .replace(/%2C/gi, ',');\n}\n\nfunction encodeMailBody(value: string): string {\n return escapeURIComponentString(value.replace(/\\r\\n|\\n|\\r/g, '\\r\\n'));\n}\n\nfunction toArray(value: string | string[] | undefined): string[] {\n return typeof value === 'undefined' ? [] : typeof value === 'string' ? [value] : value;\n}\n\nfunction joining<T>(values: ArrayLike<T>, mapfn: ((value: T) => string) | undefined = undefined, separator: string = ','): string {\n const length: number = values.length;\n let result: string = '';\n\n for (let i: number = 0; i < length; i++) {\n if (i !== 0) result += separator;\n\n if (typeof mapfn !== 'undefined') result += mapfn(values[i]);\n else result += values[i];\n }\n\n return result;\n}\n\nfunction tokenize(string: string): string[] {\n if (string === '') return [];\n\n return string\n .split(/\\s*[,,]\\s*/)\n .filter(function (string: string): boolean {\n return string !== '';\n });\n}\n\nfunction flatten<T>(arrays: T[][]): T[] {\n const result: T[] = [];\n\n for (let i: number = 0; i < arrays.length; i++) {\n const sub: T[] = arrays[i];\n\n for (let j: number = 0; j < sub.length; j++) {\n result.push(sub[j]);\n }\n }\n\n return result;\n}\n\nfunction isUserActivationActive(): boolean {\n return typeof NAVIGATOR !== 'undefined' && typeof NAVIGATOR.userActivation !== 'undefined' && NAVIGATOR.userActivation.isActive;\n}\n\nfunction canShowDirectoryPicker(): boolean {\n return typeof globalThis.showDirectoryPicker === 'function';\n}\n\nfunction canShowOpenFilePicker(): boolean {\n return typeof globalThis.showOpenFilePicker === 'function';\n}\n\nfunction isFileSystemFileHandle(handle: FileSystemHandle): handle is FileSystemFileHandle {\n return handle.kind === 'file';\n}\n\nfunction isFileSystemDirectoryHandle(handle: FileSystemHandle): handle is FileSystemDirectoryHandle {\n return handle.kind === 'directory';\n}\n\nfunction fileListToArray(fileList: FileList | null): File[] {\n const files: File[] = [];\n\n if (fileList === null) return files;\n\n for (let i: number = 0; i < fileList.length; i++) {\n const file: File = fileList[i];\n\n files.push(file);\n }\n\n return files;\n}\n\nfunction setWebkitRelativePath(file: File, path: string = file.webkitRelativePath): File {\n Object.defineProperty(\n file,\n 'webkitRelativePath',\n {\n value: path,\n writable: false,\n configurable: true,\n enumerable: true,\n }\n );\n\n return file;\n}\n\nfunction resolveFile(module: HTMLInputElement | Promise<FileSystemDirectoryHandle> | Promise<FileSystemFileHandle[]>): Promise<File[]> {\n const top: WindowProxy = getTopmostWindow();\n const topDocument: Document = top.document;\n const config: FocusEventConfig = resolveFocusEventConfig();\n\n function resolveFileSystemHandle(module: Promise<FileSystemDirectoryHandle> | Promise<FileSystemFileHandle[]>, resolve: (files: File[]) => void, reject: (reason?: any) => void): void {\n module\n .then(function (result: FileSystemDirectoryHandle | FileSystemFileHandle[]) {\n if (isArray(result)) {\n const handles: Promise<File>[] = [];\n\n for (let i: number = 0; i < result.length; i++) handles[i] = result[i].getFile();\n\n return Promise\n .all(handles)\n .then(resolve)\n .catch(reject);\n } else if (isFileSystemDirectoryHandle(result)) {\n return walk(result, result.name)\n .then(resolve)\n .catch(reject);\n }\n })\n .catch(function (error: unknown): void {\n if (isDOMException(error) && error.name === 'AbortError') return resolve([]);\n\n reject(error);\n });\n }\n\n function resolveInput(module: HTMLInputElement, resolve: (files: File[]) => void): void {\n let resolved: boolean = false;\n\n function done(success: boolean): void {\n if (resolved) return;\n\n resolved = true;\n cleanup();\n\n if (!success) return resolve([]);\n\n resolve(fileListToArray(module.files));\n }\n\n function onfocus(): void {\n globalThis.setTimeout(function (): void {\n if (module.value.length > 0) done(true);\n else done(false);\n }, 1000);\n }\n\n function onvisibilitychange(): void {\n if (!isDocumentHidden()) onfocus();\n }\n\n function onclick(): void {\n done(false);\n }\n\n module.onchange = function (): void {\n done(true);\n };\n\n if (CLEANUP_INPUT_ELEMENT !== null) CLEANUP_INPUT_ELEMENT();\n\n if (typeof module.oncancel !== 'undefined') {\n module.oncancel = function (): void {\n done(false);\n };\n } else {\n module.onclick = function (): void {\n addEvent(config.focus.target, config.focus.type, onfocus);\n addEvent(config.visibilitychange.target, config.visibilitychange.type, onvisibilitychange);\n globalThis.setTimeout(function (): void {\n addEvent(topDocument, 'click', onclick);\n }, 100);\n\n CLEANUP_INPUT_ELEMENT = function (): void {\n done(false);\n };\n }\n }\n\n function cleanup(): void {\n CLEANUP_INPUT_ELEMENT = null;\n\n try {\n removeEvent(config.focus.target, config.focus.type, onfocus);\n removeEvent(config.visibilitychange.target, config.visibilitychange.type, onvisibilitychange);\n removeEvent(topDocument, 'click', onclick);\n } catch (_) {\n }\n }\n\n dispatchClickEvent(module);\n }\n\n return new Promise(function (resolve: (files: File[]) => void, reject: (reason?: any) => void): void {\n if (isPromise(module)) return resolveFileSystemHandle(module, resolve, reject);\n else if (isHTMLInputElementLike(module)) return resolveInput(module, resolve);\n else reject(new TypeError('resolveFile expects an HTMLInputElement or a file-system handle Promise, but received: ' + Object.prototype.toString.call(module)));\n });\n}\n\nfunction walk(directory: FileSystemDirectoryHandle, basePath: string = ''): Promise<File[]> {\n return new Promise(function (resolve: (files: File[]) => void, reject: (reason?: any) => void): void {\n const iterator: AsyncIterableIterator<FileSystemHandle> = directory.values();\n const handles: FileSystemHandle[] = [];\n\n function collectNext(): void {\n iterator\n .next()\n .then(function (result: IteratorResult<FileSystemHandle>): void {\n if (result.done) {\n processHandles();\n return;\n }\n\n handles.push(result.value);\n collectNext();\n })\n .catch(reject);\n }\n\n function processHandles(): void {\n const promises: Promise<File[]>[] = [];\n\n for (let i: number = 0; i < handles.length; i++) {\n const handle: FileSystemHandle = handles[i];\n const name: string = handle.name;\n let path: string;\n\n if (basePath === '') path = name;\n else path = basePath + '/' + name;\n\n if (isFileSystemFileHandle(handle)) {\n const filePromise: Promise<File[]> = handle\n .getFile()\n .then(function (file: File): File[] {\n return [setWebkitRelativePath(file, path)];\n });\n\n promises.push(filePromise);\n } else if (isFileSystemDirectoryHandle(handle)) {\n promises.push(walk(handle, path));\n }\n }\n\n Promise\n .all(promises)\n .then(flatten)\n .then(resolve)\n .catch(reject);\n }\n\n collectNext();\n });\n}\n\nconst LaunchKit: LaunchKitInstance = {\n SettingType: SettingType,\n version: packageJSON.version,\n\n utils: {\n get canOpenIntent(): boolean {\n return canOpenIntent();\n },\n\n get canOpenUniversal(): boolean {\n return canOpenUniversal();\n },\n\n get canOpenSetting(): boolean {\n return canOpenSetting();\n },\n\n getTrackId: getTrackIdAsync,\n getProductId: getProductIdAsync,\n },\n\n app(options: AppOpenOptions = {}): Promise<AppOpenedBy> {\n let resolved: [[AppOpenedBy, URLStringOrFallback][], number];\n\n try {\n resolved = resolveOptions(options);\n } catch (error: unknown) {\n return Promise.reject(error);\n }\n\n const tried: string[] = [];\n const urls: [AppOpenedBy, URLStringOrFallback][] = resolved[0];\n const timeout: number = resolved[1];\n\n if (urls.length === 0) return Promise.reject(new Error('No openable URL candidates were resolved for the current OS (\"' + PlatformKit.os.name + '\"). Provide at least one of: scheme, intent, universal, fallback, or store id for this platform.'));\n\n return new Promise(function (resolve: (value: AppOpenedBy) => void, reject: (urlOpenError: Error) => void): Promise<void> | void {\n function openURLSequential(index: number = 0): Promise<void> | void {\n if (index >= urls.length) return reject(new Error('Failed to open the application using all available URLs.\\n\\n' + 'Attempted URLs:\\n' + joining(tried, undefined, '\\n↓\\n')));\n\n const entry: [AppOpenedBy, URLStringOrFallback] = urls[index];\n const by: AppOpenedBy = entry[0];\n const url: URLStringOrFallback = entry[1];\n\n if (typeof url === 'string') {\n tried[index] = url;\n\n return openURL(index, url, timeout)\n .then(function (): void {\n resolve(by);\n })\n .catch(function (): void {\n openURLSequential(index + 1);\n });\n } else {\n tried[index] = '[function fallback]';\n\n url();\n resolve(by);\n }\n }\n\n return openURLSequential();\n });\n },\n\n telephone(options: TelephoneOptions = {}): Promise<void> {\n let url: string = 'tel:';\n\n // RFC 3966: '+' is a delimiter and MUST NOT be percent-encoded; visual separators (- . space parens) are stripped before dialing\n // https://datatracker.ietf.org/doc/html/rfc3966#section-3\n if (typeof options.to !== 'undefined') url += options.to.replace(/[^\\d+*#]/g, '');\n\n return openURL(0, url, getDefaultTimeout());\n },\n\n message(options: MessageOptions = {}): Promise<void> {\n const to: string[] = toArray(options.to);\n let url: string = 'sms:';\n\n // Apple URL Scheme Reference: sms recipient may contain only 0-9, '+', '-', '.'\n // https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/SMSLinks/SMSLinks.html\n if (to.length > 0) url += joining(to, sanitizeSMSRecipient);\n\n if (typeof options.body !== 'undefined') {\n // iOS < 7 needs ';body=', iOS 7 cannot prefill body at all, iOS 8+ needs '&body=', everything else follows RFC 5724 '?body='\n // https://weblog.west-wind.com/posts/2013/Oct/09/Prefilling-an-SMS-on-Mobile-Devices-with-the-sms-Uri-Scheme\n if (PlatformKit.os.name !== 'ios') url += '?';\n else if (PlatformKit.compareVersion(PlatformKit.os.version, '8.0') >= 0) url += '&';\n else url += ';';\n\n url += 'body=' + escapeURIComponentString(options.body);\n }\n\n return openURL(0, url, getDefaultTimeout());\n },\n\n mail(options: MailOptions = {}): Promise<void> {\n const params: string[] = [];\n const to: string[] = toArray(options.to);\n const cc: string[] = toArray(options.cc);\n const bcc: string[] = toArray(options.bcc);\n let url: string = 'mailto:';\n\n // mailto: — RFC 6068\n // https://datatracker.ietf.org/doc/html/rfc6068\n if (to.length > 0) url += joining(to, escapeURIComponentMailAddressString);\n if (cc.length > 0) params.push('cc=' + joining(cc, escapeURIComponentMailAddressString));\n if (bcc.length > 0) params.push('bcc=' + joining(bcc, escapeURIComponentMailAddressString));\n if (typeof options.subject === 'string') params.push('subject=' + escapeURIComponentString(options.subject));\n if (typeof options.body === 'string') params.push('body=' + encodeMailBody(options.body));\n\n if (params.length > 0) url += '?' + joining(params, undefined, '&');\n\n return openURL(0, url, getDefaultTimeout());\n },\n\n filepicker(options: FilepickerOptions = {}): Promise<File[]> {\n let module: HTMLInputElement | Promise<FileSystemDirectoryHandle> | Promise<FileSystemFileHandle[]>;\n let accepts: string[] = [];\n\n if (isArray(options.accept)) accepts = options.accept;\n else if (typeof options.accept === 'string') accepts = tokenize(options.accept);\n\n if (options.directory) {\n if (canShowDirectoryPicker()) {\n const option: OpenDirectoryPickerOptions = {mode: 'read'};\n\n if (typeof options.id !== 'undefined') option.id = options.id;\n if (typeof options.startIn !== 'undefined') option.startIn = options.startIn;\n\n module = globalThis.showDirectoryPicker(option);\n } else {\n const input: HTMLInputElement = createHiddenElement('input');\n\n input.type = 'file';\n input.webkitdirectory = true;\n input.accept = accepts.join(',');\n\n module = input;\n }\n } else {\n if (canShowOpenFilePicker()) {\n const option: OpenFilePickerOptions = {};\n\n if (typeof options.id !== 'undefined') option.id = options.id;\n if (typeof options.startIn !== 'undefined') option.startIn = options.startIn;\n if (typeof options.multiple !== 'undefined') option.multiple = options.multiple;\n\n if (accepts.length > 0) {\n const acceptObject: Record<string, string[]> = {};\n\n option.excludeAcceptAllOption = true;\n option.types = [{\n description: '',\n accept: acceptObject,\n }];\n\n for (let i: number = 0; i < accepts.length; i++) {\n const accept: string = accepts[i];\n\n if (accept.startsWith('.')) {\n if (typeof acceptObject['application/octet-stream'] === 'undefined') acceptObject['application/octet-stream'] = [];\n\n acceptObject['application/octet-stream'].push(accept);\n } else if (accept.includes('/')) {\n acceptObject[accept] = [];\n }\n }\n }\n\n module = globalThis.showOpenFilePicker(option);\n } else {\n const input: HTMLInputElement = createHiddenElement('input');\n\n input.type = 'file';\n input.accept = accepts.join(',');\n if (typeof options.multiple !== 'undefined') input.multiple = options.multiple;\n\n module = input;\n }\n }\n\n return resolveFile(module);\n },\n\n setting(type: SettingType = SettingType.General): Promise<void> {\n const os: OS = PlatformKit.os.name;\n const version: string = PlatformKit.os.version;\n const urls: string[] = [];\n\n if (!canOpenSetting()) return Promise.reject(new Error('Opening system settings is not supported on this platform. (userAgent: \"' + PlatformKit.userAgent + '\")'));\n\n switch (os) {\n case 'android':\n // https://developer.android.com/reference/android/provider/Settings\n if (\n (type === 'accessibility' && PlatformKit.compareVersion(version, '2.0') < 0) // API 5\n || (type === 'battery' && PlatformKit.compareVersion(version, '5.1') < 0) // API 22\n || (type === 'accounts' && PlatformKit.compareVersion(version, '1.5') < 0) // API 3\n || (type === 'storage' && PlatformKit.compareVersion(version, '1.5') < 0) // API 3\n || type === 'general'\n ) {\n urls.push(SETTING_URL.android.general);\n break;\n }\n\n urls.push(SETTING_URL.android[type]);\n urls.push(SETTING_URL.android.general);\n break;\n case 'windows':\n urls.push(SETTING_URL.windows[type]);\n break;\n case 'macos':\n // https://www.apple.com/uk/newsroom/2018/06/apple-introduces-macos-mojave/\n if (type === 'appearance' && PlatformKit.compareVersion(version, '10.14') < 0) urls.push(SETTING_URL.macos.general);\n else if (PlatformKit.compareVersion(version, '13.0') < 0) urls.push(SETTING_URL.macos[type]);\n else urls.push(SETTING_URL.macos13[type]);\n }\n\n return new Promise(function (resolve: () => void, reject: (urlOpenError: Error) => void): Promise<void> | void {\n function openURLSequential(index: number = 0): Promise<void> | void {\n if (index >= urls.length) return reject(new Error('Failed to open the \"' + type + '\" settings pane using all available URLs.\\n\\nAttempted URLs:\\n' + joining(urls, undefined, '\\n↓\\n')));\n\n return openURL(index, urls[index], SETTING_DEFAULT_TIMEOUT)\n .then(function (): void {\n resolve();\n })\n .catch(function (): void {\n openURLSequential(index + 1);\n });\n }\n\n return openURLSequential();\n });\n },\n}\n\nexport default LaunchKit;\n"],"names":["ready","packageJSON","NAVIGATOR","globalThis","navigator","USER_AGENT","userAgent","USER_AGENT_DATA","userAgentData","undefined","OS_RESOLVER_MAP","resolveWindowsVersion","resolveUnderscoreVersion","BROWSER_RESOLVER_MAP","ENGINE_RESOLVER_MAP","HIGH_ENTROPY_BRAND_NAME_MAP","HeadlessChrome","OperaMobile","currentUserAgent","parsedCache","parsedFromHighEntropyValuesOSName","parsedFromHighEntropyValuesOSVersion","parsedFromHighEntropyValuesBrowserName","parsedFromHighEntropyValuesBrowserVersion","parsedFromHighEntropyValuesEngineVersion","parsedFromHighEntropyValuesDevice","string","mapped","ARM","replace","resolveVersion","resolver","parseOS","name","version","i","length","map","matched","match","PlatformKit","compareVersion","execs","exec","parseInt","split","standalone","maxTouchPoints","parseBrowser","parseEngine","getParsedCache","os","browser","engine","normalizeBrand","entry","brand","parseFromHighEntropyValues","getHighEntropyValues","Promise","resolve","then","result","brands","fullVersionList","platformVersion","platform","browserName","prevBrandName","brandVersion","brandName","test","mobile","_","catch","device","osName","webview","node","process","versions","matchMedia","matches","lhs","rhs","pa","pb","Math","max","a","b","createHiddenElement","tagName","focusable","element","document","createElement","width","height","border","frameBorder","scrolling","cellPadding","cellSpacing","frame","rules","noWrap","tabIndex","setAttribute","style","zIndex","display","visibility","pointerEvents","position","top","left","padding","margin","outline","clip","clipPath","overflow","whiteSpace","RTL_LANGUAGES","normalizeLocale","locale","toLowerCase","indexOf","parts","toUpperCase","charAt","slice","join","language","languages","isRTLResolved","addLanguage","lang","push","Intl","DateTimeFormat","resolvedOptions","timeZone","langs","addLanguages","userLanguage","browserLanguage","systemLanguage","Date","getTimezoneOffset","Locale","intlLocale","getTextInfo","direction","textInfo","LocaleKit","TRACK_ID","BUNDLE_ID","TRACK_ID_CACHE_TTL","idCache","supportsLocalStorage","localStorage","key","setItem","removeItem","get","mode","query","item","getItem","expiry","isNotANumber","getNow","set","id","Map","cache_1","delete","cache","Object","create","value","now","getTime","requestGet","url","async","fetch","response","json","xhr","XMLHttpRequest","open","send","status_1","status","JSON","parse","resolveGetProductIdURL","packageFamilyName","locales","country","candidate","subtags","j","subtag","encodeURIComponent","resolveGetTrackIdURL","bundleId","parseGetProductIdResponse","product","Products","Product","ProductId","parseGetTrackIdResponse","results","trackId","getTrackId","getTopmostWindow","window","location","href","SettingType","IE_WRAPPER_STORE","VENDORS","LEGACY_TYPE_MAP","focus","blur","resolveVendor","target","type","types","legacy","name_1","preventDefaultPolyfill","this","returnValue","stopPropagationPolyfill","cancelBubble","addEvent","callback","addEventListener","attachEvent","existing","wrapper","findIEWrapper","event","defineProperty","configurable","preventDefault","bind","stopPropagation","call","setIEWrapper","removeEvent","removeEventListener","detachEvent","splice","removeIEWrapper","SETTING_URL","android","general","network","appearance","accessibility","battery","datetime","accounts","storage","windows","macos","macos13","CLEANUP_INPUT_ELEMENT","createTypeGuard","tag","prototype","toString","isURL","isDOMException","isArray","isPromise","isHTMLInputElement","getDefaultTimeout","isDocumentHidden","topDocument","visibilityState","webkitVisibilityState","mozVisibilityState","msVisibilityState","hidden","webkitHidden","mozHidden","msHidden","hasFocus","dispatchClickEvent","view","fake","MouseEvent","bubbles","cancelable","createEvent","initMouseEvent","dispatchEvent","preventScroll","stripURL","resolveFocusEventConfig","cordova","visibilitychange","openURL","tried","timeout","config","anchor","iframe","userActivation","isActive","body","appendChild","removeChild","src","setTimeout","InAppBrowser","reject","timeoutId","resolved","done","success","clearTimeout","onblur","onfocus","onvisibilitychange","cleanup","input","readOnly","select","restoreFocus","resolveOptions","option","scheme","fallback","allowAppStore","allowWebStore","intent","packageName","universal","productId","Error","parsed","host","parameters","extras","part","index","substring","decodeURIComponent","parseIntentURL","prefix","suffix","createAppStoreURL","createIntentURL","canOpenIntent","createWebStoreURL","ios","canOpenUniversal","getProductId","canOpenSetting","escapeURIComponentString","char","charCodeAt","sanitizeSMSRecipient","escapeURIComponentMailAddressString","toArray","joining","values","mapfn","separator","flatten","arrays","sub","isFileSystemDirectoryHandle","handle","kind","setWebkitRelativePath","file","path","webkitRelativePath","writable","enumerable","resolveFile","module","resolveFileSystemHandle","handles","getFile","all","walk","error","resolveInput","onclick","fileList","files","fileListToArray","onchange","oncancel","maybe","nodeType","isHTMLInputElementLike","TypeError","directory","basePath","iterator","collectNext","next","promises","isFileSystemFileHandle","filePromise","processHandles","LaunchKit","utils","app","options","urls","openURLSequential","by","telephone","to","message","mail","params","cc","bcc","subject","filepicker","accepts","accept","filter","showDirectoryPicker","startIn","webkitdirectory","showOpenFilePicker","multiple","acceptObject","excludeAcceptAllOption","description","startsWith","includes","setting","General"],"mappings":"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","x_google_ignoreList":[0,2]}
@@ -0,0 +1,2 @@
1
+ var e,t="0.0.1",n="0.0.4",i=globalThis.navigator,o=void 0!==i?i.userAgent:"",r=void 0!==i?i.userAgentData:void 0,a=[[/windows nt (6\.[23]); arm/i,"windows",b],[/windows (?:phone|mobile|iot)(?: os)?[\/ ]?([\d.]*( se)?)/i,"windows",b],[/windows[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i,"windows",b],[/windows nt ?([\d.)]*)(?!.+xbox)/i,"windows",b],[/\bwin(?=3| ?9|n)(?:nt| 9x )?([\d.;]*)/i,"windows",b],[/windows ce\/?([\d.]*)/i,"windows",b],[/[adehimnop]{4,7}\b(?:.*os (\w+) like mac|; opera)/i,"ios",w],[/(?:ios;fbsv|ios(?=.+ip(?:ad|hone))|ip(?:ad|hone)(?: |.+i(?:pad)?)os)[\/ ]([\w.]+)/i,"ios",w],[/cfnetwork\/.+darwin/i,"ios",w],[/mac os x ?([\w. ]*)/i,"macos",w],[/(?:macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i,"macos",w],[/droid ([\w.]+)\b.+(android[- ]x86)/i,"android"],[/android\w*[-\/.; ]?([\d.]*)/i,"android"]],s=[[/\b(?:crmo|crios)\/([\w.]+)/i,"chrome"],[/webview.+edge\/([\w.]+)/i,"edge"],[/edg(?:e|ios|a)?\/([\w.]+)/i,"edge"],[/opera mini\/([-\w.]+)/i,"opera"],[/opera [mobileta]{3,6}\b.+version\/([-\w.]+)/i,"opera"],[/opera(?:.+version\/|[\/ ]+)([\w.]+)/i,"opera"],[/opios[\/ ]+([\w.]+)/i,"opera"],[/\bop(?:rg)?x\/([\w.]+)/i,"opera"],[/\bopr\/([\w.]+)/i,"opera"],[/iemobile(?:browser|boat|jet)[\/ ]?([\d.]*)/i,"ie"],[/(?:ms|\()ie ([\w.]+)/i,"ie"],[/trident.+rv[: ]([\w.]{1,9})\b.+like gecko/i,"ie"],[/\bfocus\/([\w.]+)/i,"firefox"],[/\bopt\/([\w.]+)/i,"opera"],[/coast\/([\w.]+)/i,"opera"],[/fxios\/([\w.-]+)/i,"firefox"],[/samsungbrowser\/([\w.]+)/i,"samsung"],[/headlesschrome(?:\/([\w.]+)| )/i,"chrome"],[/wv\).+chrome\/([\w.]+).+edgw\//i,"edge"],[/ wv\).+(chrome)\/([\w.]+)/i,"chrome"],[/chrome\/([\w.]+) mobile/i,"chrome"],[/chrome\/v?([\w.]+)/i,"chrome"],[/version\/([\w.,]+) .*mobile(?:\/\w+ | ?)safari/i,"safari"],[/iphone .*mobile(?:\/\w+ | ?)safari/i,"safari"],[/version\/([\w.,]+) .*safari/i,"safari"],[/webkit.+?(?:mobile ?safari|safari)(\/[\w.]+)/i,"safari","1"],[/(?:mobile|tablet);.*firefox\/([\w.-]+)/i,"firefox"],[/mobile vr; rv:([\w.]+)\).+firefox/i,"firefox"],[/firefox\/([\w.]+)/i,"firefox"]],c=[[/windows.+ edge\/([\w.]+)/i,"edgeHtml"],[/arkweb\/([\w.]+)/i,"arkWeb"],[/webkit\/537\.36.+chrome\/(?!27)([\w.]+)/i,"blink"],[/presto\/([\w.]+)/i,"presto"],[/webkit\/([\w.]+)/i,"webKit"],[/trident\/([\w.]+)/i,"trident"],[/netfront\/([\w.]+)/i,"netFront"],[/khtml[\/ ]\(?([\w.]+)/i,"khtml"],[/tasman[\/ ]\(?([\w.]+)/i,"tasman"],[/rv:([\w.]{1,9})\b.+gecko/i,"gecko"]],l={"Google Chrome":"Chrome","Microsoft Edge":"Edge","Microsoft Edge WebView2":"Edge WebView2","Android WebView":"Chrome WebView",HeadlessChrome:"Chrome Headless",OperaMobile:"Opera Mobi"},d=o,u=null,p=void 0,f=void 0,v=void 0,g=void 0,h=void 0,m=null;function b(e){if(void 0===e)return"";var t={"4.90":"ME","NT3.51":"NT 3.11","NT4.0":"NT 4.0","NT 5.0":"2000","NT 5.1":"XP","NT 5.2":"XP","NT 6.0":"Vista","NT 6.1":"7","NT 6.2":"8","NT 6.3":"8.1","NT 6.4":"10","NT 10.0":"10",ARM:"RT"}[e];return void 0!==t?t:e}function w(e){return void 0===e?"":e.replace(/_/g,".")}function y(e,t){return"function"==typeof t?t(e):"string"==typeof t?t:void 0===e?"":e}function T(){for(var e="unknown",t="",n=0;n<a.length;n++){var i=a[n],r=d.match(i[0]);if(null!==r){e=i[1],t=y(r[1],i[2]);break}}if("ios"===e&&0===A.compareVersion(t,"18.6")){var s=/\) Version\/([\d.]+)/.exec(d);if(null!==s)parseInt(s[1].split(".")[0],10)>=26&&(t=s[1])}return d===o&&(void 0!==p&&(e=p),void 0!==f&&(t=f),"macos"===e&&void 0!==globalThis.navigator.standalone&&void 0!==globalThis.navigator.maxTouchPoints&&globalThis.navigator.maxTouchPoints>2&&(e="ios")),{name:e,version:t}}function k(){for(var e="unknown",t="",n=0;n<s.length;n++){var i=s[n],r=d.match(i[0]);if(null!==r){e=i[1],t=y(r[1],i[2]);break}}return d===o&&(void 0!==v&&(e=v),void 0!==g&&(t=g)),{name:e,version:t}}function I(){for(var e="unknown",t="",n=0;n<c.length;n++){var i=c[n],r=d.match(i[0]);if(null!==r){e=i[1],t=y(r[1],i[2]);break}}return d===o&&void 0!==h&&(t=h),{name:e,version:t}}function x(){return null!==u&&u.userAgent===d?u:u={userAgent:d,os:T(),browser:k(),engine:I()}}function S(e){return null==e?{brand:"",version:""}:"string"==typeof e?{brand:e,version:""}:{brand:e.brand,version:e.version}}function E(){return void 0===r||void 0===r.getHighEntropyValues?Promise.resolve():r.getHighEntropyValues(["brands","fullVersionList","mobile","model","platform","platformVersion","architecture","formFactors","bitness","uaFullVersion","wow64"]).then(function(e){try{for(var t=e.fullVersionList||e.brands||[],n=e.platformVersion,i=e.platform,o=x().browser.name,r=null,a=0;a<t.length;a++){var s=S(t[a]),c=s.version,d=s.brand;/not.a.brand/i.test(d)||((null===r||/Chrom/.test(r)&&"Chromium"!==d||"Edge"===r&&/WebView2/.test(d))&&(d=l[d]||d,null!==(r=o)&&!/Chrom/.test(r)&&/Chrom/.test(d)||("Chrome"===(o=d)||"Chrome WebView"===o||"Chrome Headless"===o?v="chrome":"Edge"===o||"Edge WebView2"===o?v="edge":"Opera Mobi"===o&&(v="opera"),g=c),r=d),"Chromium"===d&&(h=c))}"string"==typeof n&&(f="windows"===x().os.name?parseInt(n.split(".")[0],10)>=13?"11":"10":n),"string"==typeof i&&(/android/i.test(i)?p="android":/ios|iphone|ipad/i.test(i)?p="ios":/windows|win32/i.test(i)?p="windows":/macos|macintel/i.test(i)&&(p="macos")),!0===e.mobile&&(m="mobile"),u=null}catch(e){}}).catch(function(){u=null})}e=E();var A={version:n,get ready(){return e},set userAgent(t){d!==t&&(d=t,u=null,p=void 0,f=void 0,v=void 0,g=void 0,h=void 0,m=null,e=E())},get userAgent(){return d},get os(){return x().os},get browser(){return x().browser},get engine(){return x().engine},get device(){if(d===o&&null!==m)return m;var e=x().os.name;return"ios"===e||"android"===e?"mobile":"windows"===e||"macos"===e?"desktop":"unknown"},get webview(){return/; ?wv|applewebkit(?!.*safari)/i.test(d)},get node(){return void 0!==globalThis.process&&void 0!==globalThis.process.versions&&void 0!==globalThis.process.versions.node},get standalone(){return"ios"===x().os.name?!0===globalThis.navigator.standalone:void 0!==globalThis.matchMedia&&globalThis.matchMedia("(display-mode: standalone)").matches},compareVersion:function(e,t){for(var n=e.split("."),i=t.split("."),o=Math.max(n.length,i.length),r=0;r<o;r++){var a=void 0,s=void 0;if((a=r<n.length?parseInt(n[r],10):0)>(s=r<i.length?parseInt(i[r],10):0))return 1;if(a<s)return-1}return 0}};function P(e,t){void 0===t&&(t=!0);var n=globalThis.document.createElement(e);return void 0!==n.width&&(n.width="0"),void 0!==n.height&&(n.height="0"),void 0!==n.border&&(n.border="0"),void 0!==n.frameBorder&&(n.frameBorder="0"),void 0!==n.scrolling&&(n.scrolling="no"),void 0!==n.cellPadding&&(n.cellPadding="0"),void 0!==n.cellSpacing&&(n.cellSpacing="0"),void 0!==n.frame&&(n.frame="void"),void 0!==n.rules&&(n.rules="none"),void 0!==n.noWrap&&(n.noWrap=!0),n.tabIndex=-1,n.setAttribute("role","presentation"),t?(n.setAttribute("aria-hidden","false"),n.style.width="1px",n.style.height="1px"):(n.setAttribute("aria-hidden","true"),n.style.width="0",n.style.height="0",n.style.zIndex="-9999",n.style.display="none",n.style.visibility="hidden",n.style.pointerEvents="none"),n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.padding="0",n.style.margin="0",n.style.border="none",n.style.outline="hidden",n.style.clip="rect(1px, 1px, 1px, 1px)",n.style.clipPath="inset(50%)",n.style.overflow="hidden",n.style.whiteSpace="nowrap",n}var C=["ae","ar","arc","bcc","bqi","ckb","dv","fa","glk","he","iw","ku","mzn","nqo","pnb","ps","sd","ug","ur","yi"];function V(e){if(null==e)return e;if(0===e.length)return null;if("C"===(e=e.replace(/_/g,"-"))||"posix"===e.toLowerCase())return"en-US";if(-1!==e.indexOf("."))return V(e.split(".")[0]);if(-1!==e.indexOf("@"))return V(e.split("@")[0]);var t=e.split("-");return 0===t.length?null:(t[0]=t[0].toLowerCase(),t.length>1&&2===t[1].length&&(t[1]=t[1].toUpperCase()),t.length>2&&4===t[1].length&&(t[1]=t[1].charAt(0).toUpperCase()+t[1].slice(1).toLowerCase()),t.join("-"))}var N=null,L=[],_=null;function O(e){"string"==typeof(e=V(e))&&-1===L.indexOf(e)&&(null===N&&(N=e),L.push(e))}if("undefined"!=typeof Intl){try{O(Intl.DateTimeFormat().resolvedOptions().locale)}catch(e){}try{Intl.DateTimeFormat().resolvedOptions().timeZone}catch(e){}}void 0!==globalThis.navigator&&(void 0!==globalThis.navigator.languages&&function(e){for(var t=0;t<e.length;t++)O(e[t])}(globalThis.navigator.languages),void 0!==globalThis.navigator.language&&O(globalThis.navigator.language),void 0!==globalThis.navigator.userLanguage&&O(globalThis.navigator.userLanguage),void 0!==globalThis.navigator.browserLanguage&&O(globalThis.navigator.browserLanguage),void 0!==globalThis.navigator.systemLanguage&&O(globalThis.navigator.systemLanguage));try{-1*(new Date).getTimezoneOffset()}catch(e){}if("string"==typeof N){if("undefined"!=typeof Intl&&void 0!==Intl.Locale)try{var R=new Intl.Locale(N);"function"==typeof R.getTextInfo?_="rtl"===R.getTextInfo().direction:void 0!==R.textInfo&&(_="rtl"===R.textInfo.direction)}catch(e){}if("boolean"!=typeof _){var U=/^([A-Za-z]{1,8})(?:[-_][A-Za-z0-9]{1,8})*$/.exec(N);if(null!==U)for(var M=U[1].toLowerCase(),D=0;D<C.length;D++)if(C[D]===M){_=!0;break}}}var F={languages:L},j="track-id",W="bundle-id",G=36e5,H=function(){var e;try{if(void 0===globalThis.localStorage)e=!1;else{var t="__id_cache_test__";globalThis.localStorage.setItem(t,""),globalThis.localStorage.removeItem(t),e=!0}}catch(t){e=!1}if(e)return{get:function(e,t){try{var n=globalThis.localStorage.getItem(e+":"+t);if(null==n)return;var i=n.split("|");if(2!==i.length)return;var o=+i[0];return z(o)||o<B()?void globalThis.localStorage.removeItem(e+":"+t):i[1]}catch(e){return}},set:function(e,t,n){try{globalThis.localStorage.setItem(e+":"+t,B()+G+"|"+n)}catch(e){return}}};if(void 0!==globalThis.Map){var n=new Map;return{get:function(e,t){var i=n.get(e+":"+t);if(void 0!==i){var o=i.split("|");if(2===o.length){var r=+o[0];if(!(z(r)||r<B()))return o[1];n.delete(e+":"+t)}}},set:function(e,t,i){n.set(e+":"+t,B()+G+"|"+i)}}}var i=Object.create(null);return{get:function(e,t){var n=i[e+":"+t];if(void 0!==n){var o=n.split("|");if(2===o.length){var r=+o[0];if(!(z(r)||r<B()))return o[1];try{delete i[e+":"+t]}catch(n){i[e+":"+t]=void 0}}}},set:function(e,t,n){i[e+":"+t]=B()+G+"|"+n}}}();function z(e){return e!=e}function B(){return void 0!==Date.now?Date.now():(new Date).getTime()}function Y(e,t){if(void 0===t&&(t=!1),"function"==typeof globalThis.fetch&&t)return globalThis.fetch(e).then(function(e){return e.json()}).catch(function(e){});try{var n=new XMLHttpRequest;n.open("GET",e,t),n.send();var i=n.status;return i>=200&&i<300?JSON.parse(n.response):void 0}catch(e){return}}function X(e){for(var t=F.languages,n="en-US",i="US",o=0;o<t.length;o++){var r=t[o];if(-1!==r.indexOf("-")){for(var a=r.split("-"),s=1;s<a.length;s++){var c=a[s];if(/^[A-Za-z]{2}$/.test(c)||/^\d{3}$/.test(c)){n=r,i=c;break}}if(n===r)break}}return"https://displaycatalog.md.mp.microsoft.com/v7.0/products/lookup?value="+globalThis.encodeURIComponent(e)+"&market="+globalThis.encodeURIComponent(i)+"&languages="+globalThis.encodeURIComponent(n)+"&alternateId=PackageFamilyName"}function Z(e){return"https://itunes.apple.com/lookup?bundleId="+globalThis.encodeURIComponent(e)}function $(e){if(void 0!==e){var t=void 0;if(void 0!==e.Products?t=e.Products[0]:void 0!==e.Product&&(t=e.Product),null!=t)return t.ProductId}}function q(e){if(void 0!==e&&void 0!==e.results){var t=e.results;if(0!==t.length){var n=t[0];if(void 0!==n)return""+n.trackId}}}function J(e){var t=H.get(j,e);if(void 0!==t)return t;try{var n=q(Y(Z(e)));if(void 0===n)return;return H.set(j,e,n),n}catch(e){return}}function K(){try{if(null!==globalThis.top&&globalThis.top!==globalThis.window)return globalThis.top.location.href,globalThis.top}catch(e){}return globalThis}var Q,ee=[],te=["","webkit","moz","ms","MS","o","O"],ne={focus:["focus","focusin"],blur:["blur","focusout"]};function ie(e,t){var n,i=ne[t];n=void 0!==i?i:[t];for(var o=0;o<te.length;o++)for(var r=0;r<n.length;r++){var a=te[o]+n[r];if(void 0!==e["on"+a])return a}return t}function oe(){this.returnValue=!1}function re(){this.cancelBubble=!0}function ae(e,t,n){if(void 0!==e&&void 0!==t){if(t=ie(e,t),"function"==typeof e.addEventListener)return e.addEventListener(t,n);if("function"==typeof e.attachEvent){var i=function(e,t,n){for(var i=0;i<ee.length;i++){var o=ee[i];if(o.target===e&&o.type===t&&o.callback===n)return o.wrapper}}(e,t,n);if("function"==typeof i)return;var o=function(t){if(void 0===t&&(t=globalThis.event),void 0!==t){try{Object.defineProperty(t,"currentTarget",{value:e,configurable:!0})}catch(e){}"function"!=typeof t.preventDefault&&(t.preventDefault=oe.bind(t)),"function"!=typeof t.stopPropagation&&(t.stopPropagation=re.bind(t)),n.call(e,t)}};return function(e,t,n,i){ee.push({target:e,type:t,callback:n,wrapper:i})}(e,t,n,o),e.attachEvent("on"+t,o)}}}function se(e,t,n){if(void 0!==e&&void 0!==t){if(t=ie(e,t),"function"==typeof e.removeEventListener)return e.removeEventListener(t,n);if("function"!=typeof e.detachEvent);else{var i=function(e,t,n){for(var i=0;i<ee.length;i++){var o=ee[i];if(o.target===e&&o.type===t&&o.callback===n)return ee.splice(i,1),o.wrapper}}(e,t,n);"function"==typeof i&&e.detachEvent("on"+t,i)}}}!function(e){e.General="general",e.Network="network",e.Display="display",e.Appearance="appearance",e.Accessibility="accessibility",e.Battery="battery",e.Datetime="datetime",e.Language="language",e.Accounts="accounts",e.Storage="storage"}(Q||(Q={}));var ce={android:{general:"intent:#Intent;action=android.settings.SETTINGS;end",network:"intent:#Intent;action=android.settings.WIFI_SETTINGS;end",display:"intent:#Intent;action=android.settings.DISPLAY_SETTINGS;end",appearance:"intent:#Intent;action=android.settings.DISPLAY_SETTINGS;end",accessibility:"intent:#Intent;action=android.settings.ACCESSIBILITY_SETTINGS;end",battery:"intent:#Intent;action=android.settings.BATTERY_SAVER_SETTINGS;end",datetime:"intent:#Intent;action=android.settings.DATE_SETTINGS;end",language:"intent:#Intent;action=android.settings.LOCALE_SETTINGS;end",accounts:"intent:#Intent;action=android.settings.SYNC_SETTINGS;end",storage:"intent:#Intent;action=android.settings.INTERNAL_STORAGE_SETTINGS;end"},windows:{general:"ms-settings:system",network:"ms-settings:network",display:"ms-settings:display",appearance:"ms-settings:colors",accessibility:"ms-settings:easeofaccess",battery:"ms-settings:batterysaver",datetime:"ms-settings:dateandtime",language:"ms-settings:regionlanguage",accounts:"ms-settings:emailandaccounts",storage:"ms-settings:storagesense"},macos:{general:"x-apple.systempreferences:",network:"x-apple.systempreferences:com.apple.preference.network",display:"x-apple.systempreferences:com.apple.preference.displays",appearance:"x-apple.systempreferences:com.apple.preference.general",accessibility:"x-apple.systempreferences:com.apple.preference.universalaccess",battery:"x-apple.systempreferences:com.apple.preference.energysaver",datetime:"x-apple.systempreferences:com.apple.preference.datetime",language:"x-apple.systempreferences:com.apple.Localization",accounts:"x-apple.systempreferences:com.apple.preferences.internetaccounts",storage:"x-apple.systempreferences:"},macos13:{general:"x-apple.systempreferences:com.apple.General-Settings.extension",network:"x-apple.systempreferences:com.apple.Network-Settings.extension",display:"x-apple.systempreferences:com.apple.Displays-Settings.extension",appearance:"x-apple.systempreferences:com.apple.Appearance-Settings.extension",accessibility:"x-apple.systempreferences:com.apple.Accessibility-Settings.extension",battery:"x-apple.systempreferences:com.apple.Battery-Settings.extension",datetime:"x-apple.systempreferences:com.apple.Date-Time-Settings.extension",language:"x-apple.systempreferences:com.apple.Localization-Settings.extension",accounts:"x-apple.systempreferences:com.apple.Internet-Accounts-Settings.extension",storage:"x-apple.systempreferences:com.apple.settings.Storage"}},le=globalThis.navigator,de=null;function ue(e){return function(t){return Object.prototype.toString.call(t)==="[object "+e+"]"}}var pe=ue("URL"),fe=ue("DOMException"),ve=ue("Array"),ge=ue("Promise"),he=ue("HTMLInputElement");function me(){switch(A.os.name){case"android":return 1e3;case"ios":return 2e3;default:return 750}}function be(){var e=K().document;return"hidden"===e.visibilityState||("hidden"===e.webkitVisibilityState||("hidden"===e.mozVisibilityState||("hidden"===e.msVisibilityState||(void 0!==e.hidden?e.hidden:void 0!==e.webkitHidden?e.webkitHidden:void 0!==e.mozHidden?e.mozHidden:void 0!==e.msHidden?e.msHidden:"function"!=typeof e.hasFocus||!e.hasFocus()))))}function we(e,t){var n;void 0===t&&(t=globalThis);try{n=new MouseEvent("click",{bubbles:!0,cancelable:!0,view:t})}catch(e){(n=globalThis.document.createEvent("MouseEvents")).initMouseEvent("click",!0,!0,t,0,0,0,0,0,!1,!1,!1,!1,0,null)}e.dispatchEvent(n)}function ye(e){return"function"==typeof e.hasFocus&&e.hasFocus()}function Te(e){try{e.focus({preventScroll:!0})}catch(t){try{e.focus()}catch(e){}}}function ke(e){return void 0===e?void 0:pe(e)?e.toString():e}function Ie(){var e=K(),t=e.document;return void 0!==globalThis.cordova?{focus:{target:t,type:"resume"},blur:{target:t,type:"pause"},visibilitychange:{}}:"ios"===A.os.name?A.compareVersion(A.os.version,"8.0")>=0?{focus:{},blur:{},visibilitychange:{target:t,type:"visibilitychange"}}:{focus:{target:e,type:"pageshow"},blur:{target:e,type:"pagehide"},visibilitychange:{}}:"function"==typeof globalThis.document.addEventListener?{focus:{target:e,type:"focus"},blur:{target:e,type:"blur"},visibilitychange:{target:t,type:"visibilitychange"}}:{focus:{target:t,type:"focus"},blur:{target:t,type:"blur"},visibilitychange:{target:t,type:"visibilitychange"}}}function xe(e,t,n){var i=Ie(),o=K(),r=o.document,a=void 0,s=void 0;function c(){if(void 0===globalThis.cordova){if(void 0!==le&&void 0!==le.userActivation&&le.userActivation.isActive||0===e)o.location.href=t;else try{(a=P("a")).href=t,r.body.appendChild(a),we(a,o)}catch(e){}finally{if(void 0!==a)try{r.body.removeChild(a)}catch(e){}}try{return(s=P("iframe")).src=t,r.body.appendChild(s),void globalThis.setTimeout(function(){if(void 0!==s)try{r.body.removeChild(s)}catch(e){}},500)}catch(e){}}else void 0!==globalThis.cordova.InAppBrowser?globalThis.cordova.InAppBrowser.open(t,"_system"):globalThis.open(t,"_system")}return new Promise(function(e,t){var o,l=!1;function d(n){l||(l=!0,function(){void 0!==o&&(clearTimeout(o),o=void 0);try{se(i.blur.target,i.blur.type,u),se(i.focus.target,i.focus.type,p),se(i.visibilitychange.target,i.visibilitychange.type,f)}catch(e){}if(void 0!==a)try{r.body.removeChild(a)}catch(e){}if(void 0!==s)try{r.body.removeChild(s)}catch(e){}}(),n?e():t())}function u(){void 0!==o&&(clearTimeout(o),o=void 0),se(i.blur.target,i.blur.type,u),ae(i.focus.target,i.focus.type,p)}function p(){d(!0)}function f(){be()?u():p()}o=globalThis.setTimeout(function(){d(!1)},n),ae(i.blur.target,i.blur.type,u),ae(i.visibilitychange.target,i.visibilitychange.type,f),ye(r)||function(){var e=K(),t=e.document;if(Te(e),ye(t))return!0;if(t.body.tabIndex<0&&(t.body.tabIndex=-1),Te(t.body),ye(t))return!0;var n=void 0;try{if(void 0===(n=P("input")))return!1;n.type="text",n.readOnly=!0,t.body.appendChild(n),Te(n);try{n.select()}catch(e){}if(ye(t))return!0}catch(e){}finally{if(null!=n){try{n.blur()}catch(e){}try{t.body.removeChild(n)}catch(e){}}}ye(t)}();try{c()}catch(e){d(!1)}})}function Se(e){var t,n,i,o,r,a,s,c,l,d,u,p,f=[],v=A.os.name;if("unknown"===v)throw new Error('Cannot resolve app open options: unsupported or undetected OS. (userAgent: "'+A.userAgent+'")');switch(v){case"android":if(void 0===e.android)return[[],0];if(a=ke(e.android.intent),t=ke(e.android.scheme),n=ke(e.android.fallback),s=e.android.packageName,i=e.android.allowAppStore,o=e.android.allowWebStore,r=e.android.timeout,void 0!==a&&(void 0===t||void 0===s||void 0===n)){var g=function(e){var t={},n=e.split("#Intent;");if(2!==n.length)return t;for(var i=n[0].replace(/^intent:\/\//i,""),o=n[1].replace(/;?end\s*$/i,"").split(";"),r={},a=0;a<o.length;a++){var s=o[a],c=s.indexOf("=");-1!==c&&(r[s.substring(0,c)]=s.substring(c+1))}void 0!==r.scheme&&(i.length>0?t.scheme=r.scheme+"://"+i:t.scheme=r.scheme+"://");void 0!==r.package&&(t.packageName=r.package);if(void 0!==r["S.browser_fallback_url"]){var l=r["S.browser_fallback_url"];try{l=globalThis.decodeURIComponent(l)}catch(e){}/^https?:\/\//i.test(l)&&(t.fallback=l)}return t}(a);void 0!==g.scheme&&void 0===t&&(t=g.scheme),void 0!==g.packageName&&void 0===s&&(s=g.packageName),void 0!==g.fallback&&void 0===n&&(n=g.fallback)}return void 0!==t&&void 0===a&&(a=function(e,t,n){var i=e.split("://"),o=i[0],r=i[1],a="intent://";void 0!==r&&(a+=r);a+="#Intent;scheme="+o+";action=android.intent.action.VIEW;category=android.intent.category.BROWSABLE;",void 0!==t&&(a+="package="+t+";");void 0!==n&&"string"==typeof n?a+="S.browser_fallback_url="+globalThis.encodeURIComponent(n)+";":void 0!==t&&(a+="S.browser_fallback_url="+globalThis.encodeURIComponent(Ce(t,"android"))+";");return a+"end"}(t,s,n)),void 0===r&&(r=1e3),void 0!==a&&Ee()&&f.push(["intent",a]),void 0!==t&&f.push(["scheme",t]),void 0!==n&&f.push(["fallback",n]),void 0!==s&&(i&&f.push(["store",Ce(s,v)]),o&&f.push(["store",Ve(s,v)])),[f,r];case"ios":return void 0===e.ios?[[],0]:(d=ke(e.ios.universal),t=ke(e.ios.scheme),n=ke(e.ios.fallback),c=e.ios.bundleId,l=e.ios.trackId,i=e.ios.allowAppStore,o=e.ios.allowWebStore,r=e.ios.timeout,void 0!==c&&void 0===l&&(l=J(c)),void 0===r&&(r=2e3),void 0!==d&&Ae()&&f.push(["universal",d]),void 0!==t&&f.push(["scheme",t]),void 0!==n&&f.push(["fallback",n]),void 0!==l&&(i&&f.push(["store",Ce(l,v)]),o&&f.push(["store",Ve(l,v)])),[f,r]);case"windows":return void 0===e.windows?[[],0]:(t=ke(e.windows.scheme),n=ke(e.windows.fallback),u=e.windows.packageFamilyName,p=e.windows.productId,i=e.windows.allowAppStore,o=e.windows.allowWebStore,r=e.windows.timeout,void 0!==u&&void 0===p&&(p=function(e){var t=H.get(W,e);if(void 0!==t)return t;try{var n=$(Y(X(e)));if(void 0===n)return;return H.set(W,e,n),n}catch(e){return}}(u)),void 0===r&&(r=750),void 0!==t&&f.push(["scheme",t]),void 0!==n&&f.push(["fallback",n]),void 0!==p&&(i&&f.push(["store",Ce(p,v)]),o&&f.push(["store",Ve(p,v)])),[f,r]);case"macos":return void 0===e.macos?[[],0]:(t=ke(e.macos.scheme),n=ke(e.macos.fallback),c=e.macos.bundleId,l=e.macos.trackId,i=e.macos.allowAppStore,o=e.macos.allowWebStore,r=e.macos.timeout,void 0!==c&&void 0===l&&(l=J(c)),void 0===r&&(r=750),void 0!==t&&f.push(["scheme",t]),void 0!==n&&f.push(["fallback",n]),void 0!==l&&(i&&f.push(["store",Ce(l,v)]),o&&f.push(["store",Ve(l,v)])),[f,r])}}function Ee(){if("android"!==A.os.name)return!1;var e=A.browser.name,t=A.browser.version;return!("firefox"===e&&A.compareVersion(t,"41.0")<0)&&(!("firefox"===e&&A.compareVersion(t,"59.0")>=0&&A.compareVersion(t,"68.11.0")<0)&&(!("firefox"===e&&A.compareVersion(t,"80.0")>=0&&A.compareVersion(t,"82.0")<0)&&(!("firefox"===e&&A.compareVersion(t,"96.0")>=0&&A.compareVersion(t,"107.0")<0)&&(!("opera"===e&&A.compareVersion(t,"14.0")<0)&&!(/(?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/[\w.]+;/i.test(A.userAgent)||/instagram[\/ ][-\w.]+/i.test(A.userAgent)||/micromessenger\/([\w.]+)/i.test(A.userAgent)||/musical_ly(?:.+app_?version\/|_)[\w.]+/i.test(A.userAgent)||/ultralite app_version\/[\w.]+/i.test(A.userAgent))))))}function Ae(){return"ios"===A.os.name&&A.compareVersion(A.os.version,"9.0")>=0}function Pe(){var e=A.os.name,t=A.os.version;return!("unknown"===e||"android"===e&&!Ee()||"ios"===e||"windows"===e&&("Vista"===t||"XP"===t||"2000"===t||"NT 4.0"===t||"NT 3.11"===t||"ME"===t||A.compareVersion(t,"10")<0)||"macos"===e&&A.compareVersion(t,"10.10")<0)}function Ce(e,t){switch(t){case"android":return"market://details?id="+e;case"ios":return"itms-apps://itunes.apple.com/app/id"+e+"?mt=8";case"windows":return"ms-windows-store://pdp/?ProductId="+e;case"macos":return"macappstore://itunes.apple.com/app/id"+e+"?mt=12";default:return t}}function Ve(e,t){switch(t){case"android":return"https://play.google.com/store/apps/details?id="+e;case"ios":return"https://itunes.apple.com/app/id"+e+"?mt=8";case"windows":return"https://apps.microsoft.com/detail/"+e;case"macos":return"https://apps.apple.com/app/id"+e+"?mt=12";default:return t}}function Ne(e){return globalThis.encodeURIComponent(e).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16)})}function Le(e){return e.replace(/[^\d+\-.]/g,"")}function _e(e){return Ne(e).replace(/%40/g,"@").replace(/%2C/gi,",")}function Oe(e){return void 0===e?[]:"string"==typeof e?[e]:e}function Re(e,t,n){void 0===t&&(t=void 0),void 0===n&&(n=",");for(var i=e.length,o="",r=0;r<i;r++)0!==r&&(o+=n),o+=void 0!==t?t(e[r]):e[r];return o}function Ue(e){for(var t=[],n=0;n<e.length;n++)for(var i=e[n],o=0;o<i.length;o++)t.push(i[o]);return t}function Me(e){return"directory"===e.kind}function De(e,t){return void 0===t&&(t=e.webkitRelativePath),Object.defineProperty(e,"webkitRelativePath",{value:t,writable:!1,configurable:!0,enumerable:!0}),e}function Fe(e){var t=K().document,n=Ie();function i(e,t,n){e.then(function(e){if(ve(e)){for(var i=[],o=0;o<e.length;o++)i[o]=e[o].getFile();return Promise.all(i).then(t).catch(n)}if(Me(e))return je(e,e.name).then(t).catch(n)}).catch(function(e){if(fe(e)&&"AbortError"===e.name)return t([]);n(e)})}function o(e,i){var o=!1;function r(r){if(!o){if(o=!0,function(){de=null;try{se(n.focus.target,n.focus.type,a),se(n.visibilitychange.target,n.visibilitychange.type,s),se(t,"click",c)}catch(e){}}(),!r)return i([]);i(function(e){var t=[];if(null===e)return t;for(var n=0;n<e.length;n++){var i=e[n];t.push(i)}return t}(e.files))}}function a(){globalThis.setTimeout(function(){e.value.length>0?r(!0):r(!1)},1e3)}function s(){be()||a()}function c(){r(!1)}e.onchange=function(){r(!0)},null!==de&&de(),void 0!==e.oncancel?e.oncancel=function(){r(!1)}:e.onclick=function(){ae(n.focus.target,n.focus.type,a),ae(n.visibilitychange.target,n.visibilitychange.type,s),globalThis.setTimeout(function(){ae(t,"click",c)},100),de=function(){r(!1)}},we(e)}return new Promise(function(t,n){return ge(e)?i(e,t,n):function(e){if(he(e))return!0;var t=e;return"object"==typeof t&&null!==t&&1===t.nodeType&&"string"==typeof t.tagName&&"INPUT"===t.tagName.toUpperCase()}(e)?o(e,t):void n(new TypeError("resolveFile expects an HTMLInputElement or a file-system handle Promise, but received: "+Object.prototype.toString.call(e)))})}function je(e,t){return void 0===t&&(t=""),new Promise(function(n,i){var o=e.values(),r=[];!function e(){o.next().then(function(o){o.done?function(){for(var e=[],o=function(n){var i,o=r[n],a=o.name;if(i=""===t?a:t+"/"+a,function(e){return"file"===e.kind}(o)){var s=o.getFile().then(function(e){return[De(e,i)]});e.push(s)}else Me(o)&&e.push(je(o,i))},a=0;a<r.length;a++)o(a);Promise.all(e).then(Ue).then(n).catch(i)}():(r.push(o.value),e())}).catch(i)}()})}var We={SettingType:Q,version:t,utils:{get canOpenIntent(){return Ee()},get canOpenUniversal(){return Ae()},get canOpenSetting(){return Pe()},getTrackId:function(e){var t=H.get(j,e);if(void 0!==t)return Promise.resolve(t);try{return Y(Z(e),!0).then(q).then(function(t){if(void 0!==t)return H.set(j,e,t),t})}catch(e){return Promise.resolve(void 0)}},getProductId:function(e){var t=H.get(W,e);if(void 0!==t)return Promise.resolve(t);try{return Y(X(e),!0).then($).then(function(t){if(void 0!==t)return H.set(W,e,t),t})}catch(e){return Promise.resolve(void 0)}}},app:function(e){var t;void 0===e&&(e={});try{t=Se(e)}catch(e){return Promise.reject(e)}var n=[],i=t[0],o=t[1];return 0===i.length?Promise.reject(new Error('No openable URL candidates were resolved for the current OS ("'+A.os.name+'"). Provide at least one of: scheme, intent, universal, fallback, or store id for this platform.')):new Promise(function(e,t){return function r(a){if(void 0===a&&(a=0),a>=i.length)return t(new Error("Failed to open the application using all available URLs.\n\nAttempted URLs:\n"+Re(n,void 0,"\n↓\n")));var s=i[a],c=s[0],l=s[1];if("string"==typeof l)return n[a]=l,xe(a,l,o).then(function(){e(c)}).catch(function(){r(a+1)});n[a]="[function fallback]",l(),e(c)}()})},telephone:function(e){void 0===e&&(e={});var t="tel:";return void 0!==e.to&&(t+=e.to.replace(/[^\d+*#]/g,"")),xe(0,t,me())},message:function(e){void 0===e&&(e={});var t=Oe(e.to),n="sms:";return t.length>0&&(n+=Re(t,Le)),void 0!==e.body&&("ios"!==A.os.name?n+="?":A.compareVersion(A.os.version,"8.0")>=0?n+="&":n+=";",n+="body="+Ne(e.body)),xe(0,n,me())},mail:function(e){void 0===e&&(e={});var t=[],n=Oe(e.to),i=Oe(e.cc),o=Oe(e.bcc),r="mailto:";return n.length>0&&(r+=Re(n,_e)),i.length>0&&t.push("cc="+Re(i,_e)),o.length>0&&t.push("bcc="+Re(o,_e)),"string"==typeof e.subject&&t.push("subject="+Ne(e.subject)),"string"==typeof e.body&&t.push("body="+Ne(e.body.replace(/\r\n|\n|\r/g,"\r\n"))),t.length>0&&(r+="?"+Re(t,void 0,"&")),xe(0,r,me())},filepicker:function(e){var t;void 0===e&&(e={});var n,i=[];if(ve(e.accept)?i=e.accept:"string"==typeof e.accept&&(i=""===(n=e.accept)?[]:n.split(/\s*[,,]\s*/).filter(function(e){return""!==e})),e.directory)if("function"==typeof globalThis.showDirectoryPicker){var o={mode:"read"};void 0!==e.id&&(o.id=e.id),void 0!==e.startIn&&(o.startIn=e.startIn),t=globalThis.showDirectoryPicker(o)}else{(c=P("input")).type="file",c.webkitdirectory=!0,c.accept=i.join(","),t=c}else if("function"==typeof globalThis.showOpenFilePicker){o={};if(void 0!==e.id&&(o.id=e.id),void 0!==e.startIn&&(o.startIn=e.startIn),void 0!==e.multiple&&(o.multiple=e.multiple),i.length>0){var r={};o.excludeAcceptAllOption=!0,o.types=[{description:"",accept:r}];for(var a=0;a<i.length;a++){var s=i[a];s.startsWith(".")?(void 0===r["application/octet-stream"]&&(r["application/octet-stream"]=[]),r["application/octet-stream"].push(s)):s.includes("/")&&(r[s]=[])}}t=globalThis.showOpenFilePicker(o)}else{var c;(c=P("input")).type="file",c.accept=i.join(","),void 0!==e.multiple&&(c.multiple=e.multiple),t=c}return Fe(t)},setting:function(e){void 0===e&&(e=Q.General);var t=A.os.name,n=A.os.version,i=[];if(!Pe())return Promise.reject(new Error('Opening system settings is not supported on this platform. (userAgent: "'+A.userAgent+'")'));switch(t){case"android":if("accessibility"===e&&A.compareVersion(n,"2.0")<0||"battery"===e&&A.compareVersion(n,"5.1")<0||"accounts"===e&&A.compareVersion(n,"1.5")<0||"storage"===e&&A.compareVersion(n,"1.5")<0||"general"===e){i.push(ce.android.general);break}i.push(ce.android[e]),i.push(ce.android.general);break;case"windows":i.push(ce.windows[e]);break;case"macos":"appearance"===e&&A.compareVersion(n,"10.14")<0?i.push(ce.macos.general):A.compareVersion(n,"13.0")<0?i.push(ce.macos[e]):i.push(ce.macos13[e])}return new Promise(function(t,n){return function o(r){return void 0===r&&(r=0),r>=i.length?n(new Error('Failed to open the "'+e+'" settings pane using all available URLs.\n\nAttempted URLs:\n'+Re(i,void 0,"\n↓\n"))):xe(r,i[r],750).then(function(){t()}).catch(function(){o(r+1)})}()})}};export{Q as SettingType,We as default};
2
+ //# sourceMappingURL=launch-kit.min.mjs.map