native-fn 1.0.21 → 1.0.23

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,1390 @@
1
+ 'use strict';
2
+
3
+ var version = "1.0.23";
4
+ var packageJSON = {
5
+ version: version};
6
+
7
+ var AppOpenState;
8
+ (function (AppOpenState) {
9
+ AppOpenState[AppOpenState["Scheme"] = 0] = "Scheme";
10
+ AppOpenState[AppOpenState["Universal"] = 1] = "Universal";
11
+ AppOpenState[AppOpenState["Intent"] = 2] = "Intent";
12
+ AppOpenState[AppOpenState["Fallback"] = 3] = "Fallback";
13
+ AppOpenState[AppOpenState["Store"] = 4] = "Store";
14
+ })(AppOpenState || (AppOpenState = {}));
15
+ var Messengers;
16
+ (function (Messengers) {
17
+ Messengers["Telephone"] = "telephone";
18
+ Messengers["Message"] = "message";
19
+ Messengers["Mail"] = "mail";
20
+ })(Messengers || (Messengers = {}));
21
+
22
+ var USER_AGENT = navigator.userAgent;
23
+
24
+ var OS;
25
+ (function (OS) {
26
+ OS["Unknown"] = "Unknown";
27
+ OS["Android"] = "Android";
28
+ OS["iOS"] = "iOS";
29
+ OS["Windows"] = "Windows";
30
+ OS["MacOS"] = "MacOS";
31
+ })(OS || (OS = {}));
32
+ var Devices;
33
+ (function (Devices) {
34
+ Devices["Unknown"] = "Unknown";
35
+ Devices["Mobile"] = "Mobile";
36
+ Devices["Desktop"] = "Desktop";
37
+ })(Devices || (Devices = {}));
38
+ var Engines;
39
+ (function (Engines) {
40
+ Engines["Unknown"] = "Unknown";
41
+ Engines["EdgeHTML"] = "EdgeHTML";
42
+ Engines["ArkWeb"] = "ArkWeb";
43
+ Engines["Blink"] = "Blink";
44
+ Engines["Presto"] = "Presto";
45
+ Engines["WebKit"] = "WebKit";
46
+ Engines["Trident"] = "Trident";
47
+ Engines["NetFront"] = "NetFront";
48
+ Engines["KHTML"] = "KHTML";
49
+ Engines["Tasman"] = "Tasman";
50
+ Engines["Gecko"] = "Gecko";
51
+ })(Engines || (Engines = {}));
52
+ var OS_RESOLVER_MAP = (function () {
53
+ function resolveIOSOrMacVersion(str) {
54
+ if (str === undefined)
55
+ return "";
56
+ return str.replace(/_/g, ".");
57
+ }
58
+ function resolveWindowsVersion(str) {
59
+ if (str === undefined)
60
+ return "";
61
+ var mapped = {
62
+ "4.90": "ME",
63
+ "NT3.51": "NT 3.11",
64
+ "NT4.0": "NT 4.0",
65
+ "NT 5.0": "2000",
66
+ "NT 5.1": "XP",
67
+ "NT 5.2": "XP",
68
+ "NT 6.0": "Vista",
69
+ "NT 6.1": "7",
70
+ "NT 6.2": "8",
71
+ "NT 6.3": "8.1",
72
+ "NT 6.4": "10",
73
+ "NT 10.0": "10",
74
+ "ARM": "RT"
75
+ }[str];
76
+ if (mapped !== undefined)
77
+ return mapped;
78
+ return str;
79
+ }
80
+ function resolveVersion(str) {
81
+ if (str === undefined)
82
+ return "";
83
+ return str;
84
+ }
85
+ return [
86
+ [/android\w*[-\/.; ]?([\d.]*)/i, OS.Android, Devices.Mobile, resolveVersion],
87
+ [/microsoft windows (vista|xp)/i, OS.Windows, Devices.Desktop, resolveVersion],
88
+ [/windows (?:phone(?: os)?|mobile|iot)[\/ ]?([.\w ]*)/i, OS.Windows, Devices.Desktop, resolveWindowsVersion],
89
+ [/windows nt 6\.2; (arm)/i, OS.Windows, Devices.Desktop, resolveWindowsVersion],
90
+ [/windows[\/ ]([ntce\d. ]+\w)(?!.+xbox)/i, OS.Windows, Devices.Desktop, resolveWindowsVersion],
91
+ [/(?:win(?=[39n])|win 9x )([nt\d.]+)/i, OS.Windows, Devices.Desktop, resolveWindowsVersion],
92
+ [/[adehimnop]{4,7}\b(?:.*os (\w+) like mac|; opera)/i, OS.iOS, Devices.Mobile, resolveIOSOrMacVersion],
93
+ [/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d.]+)/i, OS.iOS, Devices.Mobile, resolveIOSOrMacVersion],
94
+ [/cfnetwork\/.+darwin/i, OS.iOS, Devices.Mobile, resolveVersion],
95
+ [/mac os x ?([\w. ]*)/i, OS.MacOS, Devices.Desktop, resolveIOSOrMacVersion],
96
+ [/(?:macintosh|mac_powerpc\b)(?!.+haiku)/i, OS.MacOS, Devices.Desktop, resolveIOSOrMacVersion],
97
+ ];
98
+ })();
99
+ var ENGINE_RESOLVER_MAP = [
100
+ [/windows.+ edge\/([\w.]+)/i, Engines.EdgeHTML],
101
+ [/arkweb\/([\w.]+)/i, Engines.ArkWeb],
102
+ [/webkit\/537\.36.+chrome\/(?!27)([\w.]+)/i, Engines.Blink],
103
+ [/presto\/([\w.]+)/i, Engines.Presto],
104
+ [/webkit\/([\w.]+)/i, Engines.WebKit],
105
+ [/trident\/([\w.]+)/i, Engines.Trident],
106
+ [/netfront\/([\w.]+)/i, Engines.NetFront],
107
+ [/khtml[\/ ]\(?([\w.]+)/i, Engines.KHTML],
108
+ [/tasman[\/ ]\(?([\w.]+)/i, Engines.Tasman],
109
+ [/rv:([\w.]{1,9})\b.+gecko/i, Engines.Gecko]
110
+ ];
111
+ var OS_NAME = OS.Unknown;
112
+ var OS_VERSION = "";
113
+ var DEVICE_NAME = Devices.Unknown;
114
+ var ENGINE_NAME = Engines.Unknown;
115
+ var ENGINE_VERSION = "";
116
+ for (var i = 0; i < OS_RESOLVER_MAP.length; i++) {
117
+ var map = OS_RESOLVER_MAP[i];
118
+ var regexp = map[0];
119
+ var os = map[1];
120
+ var device = map[2];
121
+ var resolver = map[3];
122
+ var matched = USER_AGENT.match(regexp);
123
+ if (matched !== null) {
124
+ OS_NAME = os;
125
+ OS_VERSION = resolver(matched[1]);
126
+ DEVICE_NAME = device;
127
+ break;
128
+ }
129
+ }
130
+ for (var i = 0; i < ENGINE_RESOLVER_MAP.length; i++) {
131
+ var map = ENGINE_RESOLVER_MAP[i];
132
+ var regexp = map[0];
133
+ var engine = map[1];
134
+ var matched = USER_AGENT.match(regexp);
135
+ if (matched !== null) {
136
+ ENGINE_NAME = engine;
137
+ ENGINE_VERSION = matched[1];
138
+ break;
139
+ }
140
+ }
141
+ var RENDERER = (function () {
142
+ var canvas = document.createElement("canvas");
143
+ if (typeof canvas.getContext !== "function")
144
+ return "";
145
+ var context = canvas.getContext("webgl2") || canvas.getContext("experimental-webgl") || canvas.getContext("webgl");
146
+ if (context === null)
147
+ return "";
148
+ if (context instanceof WebGLRenderingContext || "getParameter" in context && typeof context.getParameter === "function") {
149
+ var extension = context.getExtension("WEBGL_debug_renderer_info");
150
+ if (extension === null)
151
+ return context.getParameter(context.RENDERER);
152
+ else
153
+ return context.getParameter(extension.UNMASKED_RENDERER_WEBGL);
154
+ }
155
+ else {
156
+ return "";
157
+ }
158
+ })();
159
+ var IS_MOBILE = OS_NAME === OS.iOS || OS_NAME === OS.Android;
160
+ var IS_DESKTOP = !IS_MOBILE;
161
+ var IS_STANDALONE = (function () {
162
+ if (OS_NAME === OS.iOS)
163
+ return navigator.standalone;
164
+ else
165
+ return window.matchMedia("(display-mode: standalone)").matches;
166
+ })();
167
+ var IS_WEBVIEW = /; ?wv|applewebkit(?!.*safari)/i.test(USER_AGENT);
168
+
169
+ var Appearances;
170
+ (function (Appearances) {
171
+ Appearances["Unknown"] = "unknown";
172
+ Appearances["Light"] = "light";
173
+ Appearances["Dark"] = "dark";
174
+ })(Appearances || (Appearances = {}));
175
+ var CHROME_VERSION = (function getChromeVersion() {
176
+ var matched = USER_AGENT.match(/chrome\/([\w.]+) mobile/i);
177
+ if (matched === null)
178
+ return NaN;
179
+ var version = parseInt(matched[1]);
180
+ if (isNaN(version))
181
+ return NaN;
182
+ return version;
183
+ })();
184
+ var MEDIA_QUERY_LIST = window.matchMedia("(prefers-color-scheme: dark)");
185
+ var SUPPORT_PREFERS_COLOR_SCHEME = MEDIA_QUERY_LIST.media !== "not all";
186
+ var IS_FULL_SUPPORT_THEME_COLOR = isNaN(CHROME_VERSION) || CHROME_VERSION >= 92;
187
+ var CONTEXT = document.createElement("canvas").getContext("2d", { willReadFrequently: true });
188
+ var SVG_PIXEL_DATA_URL = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9IndoaXRlIi8+PC9zdmc+";
189
+ var IS_SAMSUNG = /Samsung/i.test(USER_AGENT);
190
+ var IS_IE_MOBILE = /iemobile/i.test(USER_AGENT);
191
+ var IS_WINDOWS_PHONE = /windows phone/i.test(USER_AGENT);
192
+ var ENTRIES = [];
193
+
194
+ var Platform = {
195
+ os: OS_NAME,
196
+ device: DEVICE_NAME,
197
+ engine: ENGINE_NAME,
198
+ osVersion: OS_VERSION,
199
+ engineVersion: ENGINE_VERSION,
200
+ renderer: RENDERER,
201
+ isWebview: IS_WEBVIEW,
202
+ isMobile: IS_MOBILE,
203
+ isDesktop: IS_DESKTOP,
204
+ isStandalone: IS_STANDALONE,
205
+ };
206
+
207
+ function openURL(self, url, index) {
208
+ var a = undefined;
209
+ try {
210
+ self.location.href = url;
211
+ if (index === 0)
212
+ return;
213
+ a = self.document.createElement("a");
214
+ a.href = url;
215
+ a.style.display = "none";
216
+ a.setAttribute("aria-hidden", "true");
217
+ self.document.body.appendChild(a);
218
+ var fake = void 0;
219
+ try {
220
+ fake = new MouseEvent("click", {
221
+ bubbles: true,
222
+ cancelable: true,
223
+ view: self
224
+ });
225
+ }
226
+ catch (_) {
227
+ fake = self.document.createEvent("MouseEvents");
228
+ fake.initMouseEvent("click", true, true, self, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
229
+ }
230
+ a.dispatchEvent(fake);
231
+ if (a.click !== undefined)
232
+ a.click();
233
+ window.location.assign(url);
234
+ }
235
+ catch (_) {
236
+ }
237
+ finally {
238
+ if (a !== undefined)
239
+ self.document.body.removeChild(a);
240
+ }
241
+ }
242
+ function isIframeWindow(self) {
243
+ return self.parent !== undefined && self.parent !== self;
244
+ }
245
+ function isDocumentHidden(self) {
246
+ var doc = self.document;
247
+ if (doc.visibilityState === "hidden")
248
+ return true;
249
+ if (doc.hidden !== undefined)
250
+ return doc.hidden;
251
+ if (doc.webkitHidden !== undefined)
252
+ return doc.webkitHidden;
253
+ if (typeof doc.hasFocus === "function")
254
+ return !doc.hasFocus();
255
+ return true;
256
+ }
257
+ function tryOpenUrl(self, url, index, timeout) {
258
+ var scopeWindow;
259
+ var scopeDocument;
260
+ if (isIframeWindow(self)) {
261
+ try {
262
+ var top_1 = self.top;
263
+ if (top_1 === null)
264
+ return Promise.reject();
265
+ scopeWindow = top_1;
266
+ scopeDocument = scopeWindow.document;
267
+ }
268
+ catch (_) {
269
+ scopeWindow = self;
270
+ scopeDocument = scopeWindow.document;
271
+ }
272
+ }
273
+ else {
274
+ scopeWindow = self;
275
+ scopeDocument = self.document;
276
+ }
277
+ if (Platform.os === OS.iOS) {
278
+ var visibilitychange_1;
279
+ var eventTarget_1;
280
+ if (parseInt(Platform.osVersion) >= 8) {
281
+ visibilitychange_1 = "visibilitychange";
282
+ eventTarget_1 = scopeDocument;
283
+ }
284
+ else {
285
+ visibilitychange_1 = "pagehide";
286
+ eventTarget_1 = scopeWindow;
287
+ }
288
+ return new Promise(function (resolve, reject) {
289
+ var timeoutId;
290
+ var resolved = false;
291
+ function cleanup() {
292
+ if (timeoutId)
293
+ clearTimeout(timeoutId);
294
+ eventTarget_1.removeEventListener(visibilitychange_1, onVisibilityChange);
295
+ }
296
+ function done(success) {
297
+ if (!resolved) {
298
+ resolved = true;
299
+ try {
300
+ cleanup();
301
+ if (success)
302
+ resolve();
303
+ else
304
+ reject();
305
+ }
306
+ catch (_) {
307
+ resolve();
308
+ }
309
+ }
310
+ }
311
+ function onVisibilityChange() {
312
+ if (isDocumentHidden(scopeWindow))
313
+ done(true);
314
+ }
315
+ timeoutId = window.setTimeout(function () {
316
+ done(false);
317
+ }, timeout);
318
+ eventTarget_1.addEventListener(visibilitychange_1, onVisibilityChange);
319
+ try {
320
+ openURL(self, url, index);
321
+ }
322
+ catch (_) {
323
+ done(false);
324
+ }
325
+ });
326
+ }
327
+ else {
328
+ return new Promise(function (resolve, reject) {
329
+ var timeoutId;
330
+ var resolved = false;
331
+ function cleanup() {
332
+ if (timeoutId)
333
+ clearTimeout(timeoutId);
334
+ scopeWindow.removeEventListener("blur", onBlur);
335
+ scopeWindow.removeEventListener("focus", onFocus);
336
+ }
337
+ function done(success) {
338
+ if (!resolved) {
339
+ resolved = true;
340
+ try {
341
+ cleanup();
342
+ if (success)
343
+ resolve();
344
+ else
345
+ reject();
346
+ }
347
+ catch (_) {
348
+ resolve();
349
+ }
350
+ }
351
+ }
352
+ function onBlur() {
353
+ clearTimeout(timeoutId);
354
+ scopeWindow.removeEventListener("blur", onBlur);
355
+ scopeWindow.addEventListener("focus", onFocus);
356
+ }
357
+ function onFocus() {
358
+ done(true);
359
+ }
360
+ timeoutId = window.setTimeout(function () {
361
+ done(false);
362
+ }, timeout);
363
+ scopeWindow.addEventListener("blur", onBlur);
364
+ try {
365
+ openURL(self, url, index);
366
+ }
367
+ catch (_) {
368
+ done(false);
369
+ }
370
+ });
371
+ }
372
+ }
373
+
374
+ function createCustomError(name, Base) {
375
+ if (Base === void 0) { Base = Error; }
376
+ function CustomError(message) {
377
+ if (message === void 0) { message = ""; }
378
+ if (!(this instanceof CustomError))
379
+ return new CustomError(message);
380
+ var error = new Base(message);
381
+ var proto = CustomError.prototype;
382
+ if (typeof Object.setPrototypeOf === "function")
383
+ Object.setPrototypeOf(error, proto);
384
+ else
385
+ error.__proto__ = proto;
386
+ error.name = name;
387
+ error.message = message;
388
+ if (typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol")
389
+ Object.defineProperty(error, Symbol.toStringTag, { value: name, writable: false, enumerable: false, configurable: true });
390
+ var captureStackTrace = Base.captureStackTrace;
391
+ if (typeof captureStackTrace === "function")
392
+ captureStackTrace(error, CustomError);
393
+ else if (Error.prototype.stack !== undefined)
394
+ error.stack = new Base().stack;
395
+ return error;
396
+ }
397
+ CustomError.prototype = Object.create(Base.prototype);
398
+ CustomError.prototype.constructor = CustomError;
399
+ try {
400
+ CustomError.prototype.name = name;
401
+ }
402
+ catch (_) {
403
+ }
404
+ return CustomError;
405
+ }
406
+
407
+ var URLOpenError = createCustomError("URLOpenError");
408
+
409
+ var _a;
410
+ var App = {
411
+ open: open,
412
+ messenger: (_a = {},
413
+ _a[Messengers.Telephone] = openMessengerTelephone,
414
+ _a[Messengers.Message] = openMessengerMessage,
415
+ _a[Messengers.Mail] = openMessengerMail,
416
+ _a),
417
+ };
418
+ function getTrackId(bundle) {
419
+ try {
420
+ var xhr = new XMLHttpRequest();
421
+ xhr.open("GET", "https://itunes.apple.com/lookup?bundleId=" + bundle, false);
422
+ xhr.send();
423
+ if (xhr.status === 200) {
424
+ var response = JSON.parse(xhr.response);
425
+ if (response.results !== undefined && response.results.length > 0)
426
+ return response.results[0].trackId;
427
+ }
428
+ return undefined;
429
+ }
430
+ catch (_) {
431
+ return undefined;
432
+ }
433
+ }
434
+ function createIntentURL(scheme, packageName, fallback) {
435
+ var split = scheme.split("://");
436
+ var prefix = split[0];
437
+ var suffix = split[1];
438
+ var intent = "intent://";
439
+ if (suffix !== undefined)
440
+ intent = intent + suffix;
441
+ intent = intent + "#Intent;"
442
+ + "scheme=" + prefix + ";"
443
+ + "action=android.intent.action.VIEW;"
444
+ + "category=android.intent.category.BROWSABLE;";
445
+ if (packageName !== undefined)
446
+ intent = intent + "package=" + packageName + ";";
447
+ if (fallback !== undefined)
448
+ intent = intent + "S.browser_fallback_url=" + fallback + ";";
449
+ else if (packageName !== undefined)
450
+ intent = intent + "S.browser_fallback_url=" + createAppStoreURL(packageName, OS.Android) + ";";
451
+ return intent + "end";
452
+ }
453
+ function parseIntentURL(intent) {
454
+ var parsed = {};
455
+ var split = intent.split("#Intent;");
456
+ var host = split[0].substring(9);
457
+ var suffix = split[1];
458
+ var parameterString = suffix.substring(0, suffix.length - 4);
459
+ var parameters = parameterString.split(";");
460
+ var extras = {};
461
+ for (var i = 0; i < parameters.length; i++) {
462
+ var part = parameters[i];
463
+ var index = part.indexOf("=");
464
+ if (index !== -1)
465
+ extras[part.substring(0, index)] = part.substring(index + 1);
466
+ }
467
+ if (extras["scheme"] !== undefined)
468
+ parsed.scheme = (extras["scheme"] + "://" + host);
469
+ if (extras["package"] !== undefined)
470
+ parsed.packageName = extras["package"];
471
+ if (extras["S.browser_fallback_url"] !== undefined)
472
+ parsed.fallback = extras["S.browser_fallback_url"];
473
+ return parsed;
474
+ }
475
+ function createAppStoreURL(packageName, os) {
476
+ switch (os) {
477
+ case OS.Android: return "market://details?id=" + packageName;
478
+ case OS.iOS: return "itms-apps://itunes.apple.com/app/id" + packageName + "?mt=8";
479
+ case OS.Windows: return "ms-windows-store://pdp/?ProductId=" + packageName;
480
+ case OS.MacOS: return "macappstore://itunes.apple.com/app/id" + packageName + "?mt=12";
481
+ default: throw new URLOpenError("Unsupported OS: \"" + USER_AGENT + "\"");
482
+ }
483
+ }
484
+ function createWebStoreURL(packageName, os) {
485
+ switch (os) {
486
+ case OS.Android: return "https://play.google.com/store/apps/details?id=" + packageName;
487
+ case OS.iOS: return "https://itunes.apple.com/app/id" + packageName + "?mt=8";
488
+ case OS.Windows: return "https://apps.microsoft.com/detail/" + packageName;
489
+ case OS.MacOS: return "https://apps.apple.com/app/id" + packageName + "?mt=12";
490
+ default: throw new URLOpenError("Unsupported OS: \"" + USER_AGENT + "\"");
491
+ }
492
+ }
493
+ function getDefaultTimeoutByOS(os) {
494
+ switch (os) {
495
+ case OS.iOS: return 2000;
496
+ case OS.Android: return 1000;
497
+ default: return 750;
498
+ }
499
+ }
500
+ function open(options, self) {
501
+ if (self === void 0) { self = window; }
502
+ var os = OS_NAME;
503
+ var urls = [];
504
+ var timeout;
505
+ if (os === OS.Android) {
506
+ var option = options[OS.Android];
507
+ if (option === undefined)
508
+ return Promise.reject();
509
+ timeout = option.timeout;
510
+ var scheme = option.scheme;
511
+ var intent = option.intent;
512
+ var packageName = option.packageName;
513
+ var fallback = option.fallback;
514
+ if (intent !== undefined && (scheme === undefined || packageName === undefined || fallback === undefined)) {
515
+ var parsed = parseIntentURL(intent);
516
+ if (parsed.scheme !== undefined && scheme === undefined)
517
+ scheme = parsed.scheme;
518
+ if (parsed.packageName !== undefined && packageName === undefined)
519
+ packageName = parsed.packageName;
520
+ if (parsed.fallback !== undefined && fallback === undefined)
521
+ fallback = parsed.fallback;
522
+ }
523
+ if (scheme !== undefined && intent === undefined)
524
+ intent = createIntentURL(scheme, packageName, fallback);
525
+ if (intent !== undefined)
526
+ urls.push([intent, AppOpenState.Intent]);
527
+ if (scheme !== undefined)
528
+ urls.push([scheme, AppOpenState.Scheme]);
529
+ if (fallback !== undefined)
530
+ urls.push([fallback, AppOpenState.Fallback]);
531
+ if (packageName !== undefined)
532
+ urls.push([createAppStoreURL(packageName, OS.Android), AppOpenState.Store], [createWebStoreURL(packageName, OS.Android), AppOpenState.Store]);
533
+ }
534
+ else if (os === OS.iOS) {
535
+ var option = options[OS.iOS];
536
+ if (option === undefined)
537
+ return Promise.reject();
538
+ timeout = option.timeout;
539
+ var scheme = option.scheme;
540
+ var packageName = option.packageName;
541
+ var trackId = option.trackId;
542
+ var universal = option.universal;
543
+ var fallback = option.fallback;
544
+ if (packageName !== undefined && trackId === undefined)
545
+ trackId = getTrackId(packageName);
546
+ if (universal !== undefined && parseInt(OS_VERSION) >= 9)
547
+ urls.push([universal, AppOpenState.Universal]);
548
+ if (scheme !== undefined)
549
+ urls.push([scheme, AppOpenState.Scheme]);
550
+ if (fallback !== undefined)
551
+ urls.push([fallback, AppOpenState.Fallback]);
552
+ if (trackId !== undefined)
553
+ urls.push([createAppStoreURL(trackId, OS.iOS), AppOpenState.Store], [createWebStoreURL(trackId, OS.iOS), AppOpenState.Store]);
554
+ }
555
+ else if (os === OS.Windows) {
556
+ var option = options[OS.Windows];
557
+ if (option === undefined)
558
+ return Promise.reject();
559
+ timeout = option.timeout;
560
+ var scheme = option.scheme;
561
+ var productId = option.productId;
562
+ var fallback = option.fallback;
563
+ if (scheme !== undefined)
564
+ urls.push([scheme, AppOpenState.Scheme]);
565
+ if (fallback !== undefined)
566
+ urls.push([fallback, AppOpenState.Fallback]);
567
+ if (productId !== undefined)
568
+ urls.push([createAppStoreURL(productId, OS.Windows), AppOpenState.Store], [createWebStoreURL(productId, OS.Windows), AppOpenState.Store]);
569
+ }
570
+ else if (os === OS.MacOS) {
571
+ var option = options[OS.MacOS];
572
+ if (option === undefined)
573
+ return Promise.reject();
574
+ timeout = option.timeout;
575
+ var scheme = option.scheme;
576
+ var packageName = option.packageName;
577
+ var trackId = option.trackId;
578
+ var fallback = option.fallback;
579
+ if (packageName !== undefined && trackId === undefined)
580
+ trackId = getTrackId(packageName);
581
+ if (scheme !== undefined)
582
+ urls.push([scheme, AppOpenState.Scheme]);
583
+ if (fallback !== undefined)
584
+ urls.push([fallback, AppOpenState.Fallback]);
585
+ if (trackId !== undefined)
586
+ urls.push([createAppStoreURL(trackId, OS.MacOS), AppOpenState.Store], [createWebStoreURL(trackId, OS.MacOS), AppOpenState.Store]);
587
+ }
588
+ if (timeout === undefined)
589
+ timeout = getDefaultTimeoutByOS(os);
590
+ return new Promise(function (resolve, reject) {
591
+ var tried = "\n";
592
+ function openURLSequential(index) {
593
+ if (index === void 0) { index = 0; }
594
+ if (index >= urls.length)
595
+ return reject(new URLOpenError("Failed to open any of the provided URLs: " + tried));
596
+ var entry = urls[index];
597
+ var url = entry[0];
598
+ tried = tried + "\n" + url;
599
+ return tryOpenUrl(self, url, index, timeout)
600
+ .then(function () {
601
+ resolve(entry[1]);
602
+ })
603
+ .catch(function () {
604
+ openURLSequential(++index);
605
+ });
606
+ }
607
+ return openURLSequential();
608
+ });
609
+ }
610
+ function isArrayLike(value) {
611
+ if (value == null || typeof value === "string")
612
+ return false;
613
+ var length = value.length;
614
+ return typeof length === "number" && length >= 0 && !(length % 1);
615
+ }
616
+ function joining(values, mapfn, separator) {
617
+ if (separator === void 0) { separator = ","; }
618
+ var length = values.length;
619
+ var result = "";
620
+ for (var i = 0; i < length; i++) {
621
+ result = result + mapfn(values[i]);
622
+ if (i !== length - 1)
623
+ result = result + separator;
624
+ }
625
+ return result;
626
+ }
627
+ function encode(value) {
628
+ return encodeURIComponent(value)
629
+ .replace(/[!'()*]/g, function (c) {
630
+ return "%" + c.charCodeAt(0).toString(16);
631
+ });
632
+ }
633
+ function toString(value) {
634
+ if (typeof value === "string")
635
+ return encode(value);
636
+ if (typeof value === "number" || typeof value === "boolean")
637
+ return encode(String(value));
638
+ if (value == null)
639
+ return "";
640
+ if (isArrayLike(value))
641
+ return joining(value, function (v) {
642
+ return toString(v);
643
+ });
644
+ if (value instanceof HTMLInputElement) {
645
+ var type = value.type;
646
+ if (type === "checkbox") {
647
+ return encode(value.checked.toString());
648
+ }
649
+ else if (type === "radio") {
650
+ if (value.checked)
651
+ return encode(value.value);
652
+ else
653
+ return "";
654
+ }
655
+ else if (type === "file") {
656
+ var files = value.files;
657
+ if (files === null)
658
+ return "";
659
+ return joining(files, function (file) {
660
+ return encode(file.name);
661
+ });
662
+ }
663
+ else {
664
+ return encode(value.value);
665
+ }
666
+ }
667
+ if (value instanceof HTMLSelectElement) {
668
+ if (value.multiple)
669
+ return joining(value.selectedOptions, function (option) {
670
+ return encode(option.value);
671
+ });
672
+ return encode(value.value);
673
+ }
674
+ if (value instanceof HTMLTextAreaElement)
675
+ return encode(value.value);
676
+ if (value instanceof HTMLElement)
677
+ return encode(value.innerText);
678
+ if (value instanceof Node)
679
+ return toString(value.textContent);
680
+ return encode(value.toString());
681
+ }
682
+ function normalize(value) {
683
+ if (value instanceof HTMLFormElement)
684
+ return normalize(new FormData(value));
685
+ if (value instanceof FormData) {
686
+ var result_1 = {};
687
+ value.forEach(function (value, key) {
688
+ var name;
689
+ if (value instanceof File)
690
+ name = value.name;
691
+ else
692
+ name = value;
693
+ if (Object.prototype.hasOwnProperty.call(result_1, key)) {
694
+ var prev = result_1[key];
695
+ if (Array.isArray(prev))
696
+ prev.push(name);
697
+ else
698
+ result_1[key] = [prev, name];
699
+ }
700
+ else {
701
+ result_1[key] = name;
702
+ }
703
+ });
704
+ return normalize(result_1);
705
+ }
706
+ var result = {};
707
+ var keys = Object.keys(value);
708
+ for (var i = 0; i < keys.length; i++) {
709
+ var key = keys[i];
710
+ result[key] = toString(value[key]);
711
+ }
712
+ if (result.to === undefined)
713
+ result.to = "";
714
+ if (result.cc === undefined)
715
+ result.cc = "";
716
+ if (result.bcc === undefined)
717
+ result.bcc = "";
718
+ if (result.subject === undefined)
719
+ result.subject = "";
720
+ if (result.body === undefined)
721
+ result.body = "";
722
+ return result;
723
+ }
724
+ function openMessenger(options, self, type) {
725
+ options = normalize(options);
726
+ return tryOpenUrl(self, type + ":" + options.to
727
+ + "?cc=" + options.cc
728
+ + "&bcc=" + options.bcc
729
+ + "&subject=" + options.subject
730
+ + "&body=" + options.body, 0, getDefaultTimeoutByOS(OS_NAME));
731
+ }
732
+ function openMessengerTelephone(options, self) {
733
+ if (self === void 0) { self = window; }
734
+ return openMessenger(options, self, "tel");
735
+ }
736
+ function openMessengerMessage(options, self) {
737
+ if (self === void 0) { self = window; }
738
+ return openMessenger(options, self, "sms");
739
+ }
740
+ function openMessengerMail(options, self) {
741
+ if (self === void 0) { self = window; }
742
+ return openMessenger(options, self, "mailto");
743
+ }
744
+
745
+ var EasingError = createCustomError("EasingError");
746
+ var CubicBezierSyntaxError = createCustomError("CubicBezierSyntaxError", EasingError);
747
+ var LinearSyntaxError = createCustomError("LinearSyntaxError", EasingError);
748
+ var StepSyntaxError = createCustomError("StepSyntaxError", EasingError);
749
+ var UnsupportedEasingFunctionError = createCustomError("UnsupportedEasingFunctionError", EasingError);
750
+
751
+ var EASING_KEYWORD = {
752
+ "linear": "linear(0, 1)",
753
+ "ease": "cubic-bezier(0.25, 0.1, 0.25, 1)",
754
+ "ease-in": "cubic-bezier(0.42, 0, 1, 1)",
755
+ "ease-out": "cubic-bezier(0, 0, 0.58, 1)",
756
+ "ease-in-out": "cubic-bezier(0.42, 0, 0.58, 1)",
757
+ "step-start": "steps(1, jump-start)",
758
+ "step-end": "steps(1, jump-end)",
759
+ };
760
+ function clamp(n, min, max) {
761
+ if (n < min)
762
+ return min;
763
+ if (n > max)
764
+ return max;
765
+ return n;
766
+ }
767
+ function isEasingKeyword(easingFunction) {
768
+ return !/(linear|cubic-bezier|steps)\((.*)\)/.test(easingFunction);
769
+ }
770
+ function isCubicBezierString(easingFunction) {
771
+ return /cubic-bezier\(/.test(easingFunction);
772
+ }
773
+ function isLinearString(easingFunction) {
774
+ return /linear\(/.test(easingFunction);
775
+ }
776
+ function isStepString(easingFunction) {
777
+ return /steps\(\s*(\d+)\s*(?:,\s*(jump-start|jump-end|jump-none|jump-both|start|end)\s*)?\)$/.test(easingFunction);
778
+ }
779
+ function parseCubicBezier(easingFunction) {
780
+ var match = easingFunction.match(/cubic-bezier\((.*)\)/);
781
+ var content = match[1].trim();
782
+ var split = content.split(",");
783
+ var values = [];
784
+ if (split.length !== 4)
785
+ throw new CubicBezierSyntaxError("Cubic-bezier must have exactly 4 numeric values");
786
+ for (var i = 0; i < 4; i++) {
787
+ var value = parseFloat(split[i]);
788
+ if (isNaN(value))
789
+ throw new CubicBezierSyntaxError("Cubic-bezier must have exactly 4 numeric values");
790
+ if (i % 2 === 0 && (value < 0 || value > 1))
791
+ throw new CubicBezierSyntaxError("x1 and x2 must be between 0 and 1");
792
+ values.push(value);
793
+ }
794
+ return {
795
+ x1: values[0],
796
+ y1: values[1],
797
+ x2: values[2],
798
+ y2: values[3]
799
+ };
800
+ }
801
+ function getCubicBezierValue(easingFunction) {
802
+ var cubicBezier = parseCubicBezier(easingFunction);
803
+ var x1 = cubicBezier.x1;
804
+ var x2 = cubicBezier.x2;
805
+ var y1 = cubicBezier.y1;
806
+ var y2 = cubicBezier.y2;
807
+ function findT(x, tolerance, maxIterations) {
808
+ if (tolerance === void 0) { tolerance = 1e-6; }
809
+ if (maxIterations === void 0) { maxIterations = 50; }
810
+ if (x <= 0)
811
+ return 0;
812
+ if (x >= 1)
813
+ return 1;
814
+ var t = x;
815
+ for (var i = 0; i < maxIterations; i++) {
816
+ var xt = 3 * (1 - t) * (1 - t) * t * x1 + 3 * (1 - t) * t * t * x2 + t * t * t;
817
+ var dx = 3 * (1 - t) * (1 - t) * x1 + 6 * (1 - t) * t * (x2 - x1) + 3 * t * t * (1 - x2);
818
+ if (Math.abs(dx) < tolerance)
819
+ break;
820
+ var newT = t - (xt - x) / dx;
821
+ if (Math.abs(newT - t) < tolerance) {
822
+ t = newT;
823
+ break;
824
+ }
825
+ t = Math.max(0, Math.min(1, newT));
826
+ }
827
+ return t;
828
+ }
829
+ return function (x) {
830
+ x = clamp(x, 0, 1);
831
+ if (x === 0 || x === 1)
832
+ return x;
833
+ var t = findT(x);
834
+ return 3 * (1 - t) * (1 - t) * t * y1 + 3 * (1 - t) * t * t * y2 + t * t * t;
835
+ };
836
+ }
837
+ function parseLinear(easingFunction) {
838
+ var match = easingFunction.match(/linear\((.*)\)/);
839
+ var content = match[1].trim();
840
+ var split = content.split(",");
841
+ var points = [];
842
+ for (var i = 0; i < split.length; i++) {
843
+ var part = split[i].trim();
844
+ var percentage2 = part.match(/^([+-]?\d*\.?\d+)((?:\s+[+-]?\d*\.?\d+%){2,})$/);
845
+ if (percentage2 !== null) {
846
+ var value = parseFloat(percentage2[1]);
847
+ var percents = percentage2[2].trim().split(/\s+/);
848
+ points.push({
849
+ value: value,
850
+ position: parseFloat(percents[0]) / 100,
851
+ }, {
852
+ value: value,
853
+ position: parseFloat(percents[1]) / 100,
854
+ });
855
+ continue;
856
+ }
857
+ var percentage1 = part.match(/^([+-]?\d*\.?\d+)\s+([+-]?\d*\.?\d+)%$/);
858
+ if (percentage1 !== null) {
859
+ points.push({
860
+ position: parseFloat(percentage1[2]) / 100,
861
+ value: parseFloat(percentage1[1])
862
+ });
863
+ continue;
864
+ }
865
+ var number = part.match(/^([+-]?\d*\.?\d+)$/);
866
+ if (number !== null) {
867
+ points.push({
868
+ position: split.length === 1 ? 0 : i / (split.length - 1),
869
+ value: parseFloat(number[1])
870
+ });
871
+ continue;
872
+ }
873
+ throw new LinearSyntaxError("Invalid linear point format: \"" + part + "\"");
874
+ }
875
+ if (points.length === 0)
876
+ throw new LinearSyntaxError("No valid points found in linear function");
877
+ for (var i = 0; i < points.length - 1; i++) {
878
+ for (var j = 0; j < points.length - i - 1; j++) {
879
+ if (points[j].position > points[j + 1].position) {
880
+ var temp = points[j];
881
+ points[j] = points[j + 1];
882
+ points[j + 1] = temp;
883
+ }
884
+ }
885
+ }
886
+ return points;
887
+ }
888
+ function getLinearValue(str) {
889
+ var points = parseLinear(str);
890
+ return function (t) {
891
+ t = clamp(t, 0, 1);
892
+ if (t <= points[0].position)
893
+ return points[0].value;
894
+ if (t >= points[points.length - 1].position)
895
+ return points[points.length - 1].value;
896
+ for (var i = 0; i < points.length - 1; i++) {
897
+ var p1 = points[i];
898
+ var p2 = points[i + 1];
899
+ if (t >= p1.position && t <= p2.position) {
900
+ var ratio = (t - p1.position) / (p2.position - p1.position);
901
+ return p1.value + (p2.value - p1.value) * ratio;
902
+ }
903
+ }
904
+ throw new LinearSyntaxError("Unexpected error in interpolation");
905
+ };
906
+ }
907
+ function getStepValue(easingFunction) {
908
+ var match = easingFunction.match(/steps\(\s*(\d+)\s*(?:,\s*(jump-start|jump-end|jump-none|jump-both|start|end)\s*)?\)$/);
909
+ var count = parseInt(match[1], 10);
910
+ var position = match[2];
911
+ return function (t) {
912
+ t = clamp(t, 0, 1);
913
+ if (t === 0)
914
+ return position === "start" || position === "jump-start" ? 1 : 0;
915
+ else if (t === 1)
916
+ return 1;
917
+ switch (position) {
918
+ case "start":
919
+ case "jump-start":
920
+ return Math.ceil(t * count) / count;
921
+ case "end":
922
+ case "jump-end":
923
+ return Math.floor(t * count) / count;
924
+ case "jump-both":
925
+ return Math.round(t * count) / count;
926
+ case "jump-none":
927
+ return Math.floor(t * count) / (count - 1);
928
+ default:
929
+ throw new StepSyntaxError("Unsupported step position: \"" + position + "\"");
930
+ }
931
+ };
932
+ }
933
+ function parseEasingFunction(easingFunction) {
934
+ if (isEasingKeyword(easingFunction))
935
+ easingFunction = EASING_KEYWORD[easingFunction];
936
+ if (isCubicBezierString(easingFunction))
937
+ return getCubicBezierValue(easingFunction);
938
+ if (isLinearString(easingFunction))
939
+ return getLinearValue(easingFunction);
940
+ if (isStepString(easingFunction))
941
+ return getStepValue(easingFunction);
942
+ throw new UnsupportedEasingFunctionError("Unsupported easing function: \"" + easingFunction + "\"");
943
+ }
944
+
945
+ var UnsupportedColorError = createCustomError("UnsupportedColorError");
946
+
947
+ function parseColor(color) {
948
+ if (!CSS.supports("color", color))
949
+ throw new UnsupportedColorError("Unsupported color: \"" + color + "\".");
950
+ if (CONTEXT !== null) {
951
+ CONTEXT.clearRect(0, 0, 1, 1);
952
+ CONTEXT.fillStyle = color;
953
+ CONTEXT.fillRect(0, 0, 1, 1);
954
+ var data = CONTEXT.getImageData(0, 0, 1, 1).data;
955
+ return {
956
+ red: data[0],
957
+ green: data[1],
958
+ blue: data[2],
959
+ alpha: +(data[3] / 255).toFixed(2)
960
+ };
961
+ }
962
+ var div = document.createElement("div");
963
+ div.style.position = "absolute";
964
+ div.style.top = "-9999px";
965
+ div.style.width = div.style.height = "0";
966
+ div.style.color = color;
967
+ document.body.appendChild(div);
968
+ var computedColor = window.getComputedStyle(div).color;
969
+ var matched = computedColor.match(/rgba?\(\s*(\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\s*\)/);
970
+ document.body.removeChild(div);
971
+ if (matched === null)
972
+ throw new UnsupportedColorError("Unsupported color: \"" + color + "\".");
973
+ var rgba = {
974
+ red: parseInt(matched[1], 10),
975
+ green: parseInt(matched[2], 10),
976
+ blue: parseInt(matched[3], 10),
977
+ alpha: NaN
978
+ };
979
+ if (matched[4] === undefined)
980
+ rgba.alpha = 1;
981
+ else
982
+ rgba.alpha = parseFloat(matched[4]);
983
+ return rgba;
984
+ }
985
+
986
+ var themeColorMetaGroup = {};
987
+ var themeIntervalId = null;
988
+ var currentResolve = null;
989
+ var currentAppearance = null;
990
+ var appearanceIntervalId = null;
991
+ var Theme = {
992
+ setThemeColor: setThemeColor,
993
+ getThemeColor: getThemeColor,
994
+ removeThemeColor: removeThemeColor,
995
+ detectAppearance: detectAppearance,
996
+ onAppearanceChange: onAppearanceChange,
997
+ };
998
+ function getThemeColorMeta(appearance) {
999
+ if (appearance === void 0) { appearance = "default"; }
1000
+ var effective;
1001
+ if (!IS_FULL_SUPPORT_THEME_COLOR || !SUPPORT_PREFERS_COLOR_SCHEME || IS_IE_MOBILE || IS_WINDOWS_PHONE)
1002
+ effective = "default";
1003
+ else
1004
+ effective = appearance;
1005
+ var meta = themeColorMetaGroup[effective];
1006
+ if (meta !== undefined)
1007
+ return meta;
1008
+ meta = document.createElement("meta");
1009
+ if (IS_IE_MOBILE)
1010
+ meta.setAttribute("name", "msapplication-navbutton-color");
1011
+ else if (IS_WINDOWS_PHONE)
1012
+ meta.setAttribute("name", "msapplication-TileColor");
1013
+ else
1014
+ meta.setAttribute("name", "theme-color");
1015
+ if (appearance !== "default")
1016
+ meta.setAttribute("media", "(prefers-color-scheme: " + effective + ")");
1017
+ document.head.prepend(meta);
1018
+ return themeColorMetaGroup[appearance] = meta;
1019
+ }
1020
+ function estimateDefaultThemeColor() {
1021
+ if (/version\/[\w.,]+ .*safari/i.test(USER_AGENT)) {
1022
+ if (navigator.standalone) {
1023
+ if (detectFromMediaQuery() === Appearances.Dark)
1024
+ return "#ffffffff";
1025
+ else
1026
+ return "#000000ff";
1027
+ }
1028
+ return rgbaToHex(parseColor(window.getComputedStyle(document.body).backgroundColor));
1029
+ }
1030
+ if (/\b(?:crmo|crios)\/[\w.]+/i.test(USER_AGENT) || /chrome\/[\w.]+ mobile/i.test(USER_AGENT)) {
1031
+ if (detectFromMediaQuery() === Appearances.Dark)
1032
+ return "#28292cff";
1033
+ else
1034
+ return "#ffffffff";
1035
+ }
1036
+ return undefined;
1037
+ }
1038
+ function toHex(n) {
1039
+ var hex = n.toString(16);
1040
+ switch (hex.length) {
1041
+ case 0: return "00";
1042
+ case 1: return "0" + hex;
1043
+ default: return hex;
1044
+ }
1045
+ }
1046
+ function rgbaToHex(rgba) {
1047
+ return "#"
1048
+ + toHex(rgba.red)
1049
+ + toHex(rgba.green)
1050
+ + toHex(rgba.blue)
1051
+ + toHex(Math.round(rgba.alpha * 255));
1052
+ }
1053
+ function detectFromEngine() {
1054
+ return new Promise(function (resolve) {
1055
+ var img = new Image();
1056
+ img.onload = function () {
1057
+ if (CONTEXT === null)
1058
+ return resolve(Appearances.Light);
1059
+ CONTEXT.drawImage(img, 0, 0);
1060
+ var data = CONTEXT.getImageData(0, 0, 1, 1).data;
1061
+ if ((data[0] & data[1] & data[2]) < 255)
1062
+ resolve(Appearances.Dark);
1063
+ else
1064
+ resolve(Appearances.Light);
1065
+ };
1066
+ img.onerror = function () {
1067
+ resolve(Appearances.Unknown);
1068
+ };
1069
+ img.src = SVG_PIXEL_DATA_URL;
1070
+ });
1071
+ }
1072
+ function detectFromMediaQuery() {
1073
+ if (!SUPPORT_PREFERS_COLOR_SCHEME)
1074
+ return Appearances.Unknown;
1075
+ if (MEDIA_QUERY_LIST.matches)
1076
+ return Appearances.Dark;
1077
+ return Appearances.Light;
1078
+ }
1079
+ function startPolling() {
1080
+ detectFromEngine()
1081
+ .then(function (appearance) {
1082
+ currentAppearance = appearance;
1083
+ });
1084
+ appearanceIntervalId = window.setInterval(function () {
1085
+ detectFromEngine()
1086
+ .then(function (appearance) {
1087
+ if (appearance !== currentAppearance) {
1088
+ currentAppearance = appearance;
1089
+ notify(appearance);
1090
+ }
1091
+ });
1092
+ }, 2000);
1093
+ }
1094
+ function stopPolling() {
1095
+ currentAppearance = null;
1096
+ if (appearanceIntervalId !== null) {
1097
+ clearInterval(appearanceIntervalId);
1098
+ appearanceIntervalId = null;
1099
+ }
1100
+ }
1101
+ function addListener(capture) {
1102
+ currentAppearance = detectFromMediaQuery();
1103
+ if (typeof MEDIA_QUERY_LIST.addEventListener === "function")
1104
+ MEDIA_QUERY_LIST.addEventListener("change", onMediaChange, capture);
1105
+ else if (typeof MEDIA_QUERY_LIST.addListener === "function")
1106
+ MEDIA_QUERY_LIST.addListener(onMediaChange);
1107
+ }
1108
+ function removeListener(capture) {
1109
+ currentAppearance = null;
1110
+ if (typeof MEDIA_QUERY_LIST.removeEventListener === "function")
1111
+ MEDIA_QUERY_LIST.removeEventListener("change", onMediaChange, capture);
1112
+ else if (typeof MEDIA_QUERY_LIST.removeListener === "function")
1113
+ MEDIA_QUERY_LIST.removeListener(onMediaChange);
1114
+ }
1115
+ function onMediaChange(ev) {
1116
+ var appearance;
1117
+ if (ev.matches)
1118
+ appearance = Appearances.Dark;
1119
+ else
1120
+ appearance = Appearances.Light;
1121
+ if (appearance !== currentAppearance)
1122
+ notify(currentAppearance = appearance);
1123
+ }
1124
+ function notify(appearance) {
1125
+ for (var i = 0; i < ENTRIES.length; i++) {
1126
+ var entry = ENTRIES[i];
1127
+ entry.fn(appearance);
1128
+ if (entry.once)
1129
+ removeEntry(entry);
1130
+ }
1131
+ }
1132
+ function removeEntry(entry) {
1133
+ var index = indexOfEntry(entry);
1134
+ if (index !== -1)
1135
+ ENTRIES.splice(index, 1);
1136
+ if (ENTRIES.length === 0) {
1137
+ if (IS_SAMSUNG)
1138
+ stopPolling();
1139
+ else
1140
+ removeListener(entry.capture);
1141
+ }
1142
+ }
1143
+ function indexOfEntry(entry) {
1144
+ for (var i = 0; i < ENTRIES.length; i++)
1145
+ if (ENTRIES[i].fn === entry.fn && ENTRIES[i].capture === entry.capture)
1146
+ return i;
1147
+ return -1;
1148
+ }
1149
+ function syncThemeColorMeta() {
1150
+ themeColorMetaGroup = {};
1151
+ var selector;
1152
+ if (IS_IE_MOBILE)
1153
+ selector = "meta[name=\"msapplication-navbutton-color\"]";
1154
+ else if (IS_WINDOWS_PHONE)
1155
+ selector = "meta[name=\"msapplication-TileColor\"]";
1156
+ else
1157
+ selector = "meta[name=\"theme-color\"]";
1158
+ var nodes = document.querySelectorAll(selector);
1159
+ if (!IS_FULL_SUPPORT_THEME_COLOR || !SUPPORT_PREFERS_COLOR_SCHEME || IS_IE_MOBILE || IS_WINDOWS_PHONE) {
1160
+ themeColorMetaGroup.default = nodes[0];
1161
+ return;
1162
+ }
1163
+ for (var i = 0; i < nodes.length; i++) {
1164
+ var element = nodes.item(i);
1165
+ var media = element.getAttribute("media");
1166
+ if (media === "(prefers-color-scheme: dark)" && themeColorMetaGroup.dark === undefined)
1167
+ themeColorMetaGroup.dark = element;
1168
+ else if (media === "(prefers-color-scheme: light)" && themeColorMetaGroup.light === undefined)
1169
+ themeColorMetaGroup.light = element;
1170
+ else if (media === null && themeColorMetaGroup.default === undefined)
1171
+ themeColorMetaGroup.default = element;
1172
+ if (themeColorMetaGroup.dark !== undefined && themeColorMetaGroup.light !== undefined && themeColorMetaGroup.default !== undefined)
1173
+ return;
1174
+ }
1175
+ }
1176
+ function getCurrentAppliedThemeColorMeta() {
1177
+ if (IS_IE_MOBILE)
1178
+ return document.querySelector("meta[name=\"msapplication-navbutton-color\"]");
1179
+ if (IS_WINDOWS_PHONE)
1180
+ return document.querySelector("meta[name=\"msapplication-TileColor\"]");
1181
+ if (!IS_FULL_SUPPORT_THEME_COLOR || !SUPPORT_PREFERS_COLOR_SCHEME)
1182
+ return document.querySelector("meta[name=\"theme-color\"]");
1183
+ var nodes = document.querySelectorAll("meta[name=\"theme-color\"]");
1184
+ var isDark = detectFromMediaQuery() === Appearances.Dark;
1185
+ var query;
1186
+ if (isDark)
1187
+ query = "(prefers-color-scheme: dark)";
1188
+ else
1189
+ query = "(prefers-color-scheme: light)";
1190
+ for (var i = 0; i < nodes.length; i++) {
1191
+ var element = nodes.item(i);
1192
+ if (!element.hasAttribute("content"))
1193
+ continue;
1194
+ var media = element.getAttribute("media");
1195
+ if (media === null || media === query)
1196
+ return element;
1197
+ }
1198
+ return null;
1199
+ }
1200
+ function init() {
1201
+ var observer = new MutationObserver(function (mutations) {
1202
+ for (var i = 0; i < mutations.length; i++) {
1203
+ var mutation = mutations[i];
1204
+ var addedNodes = mutation.addedNodes;
1205
+ var removedNodes = mutation.removedNodes;
1206
+ for (var j = 0; j < addedNodes.length; j++)
1207
+ if (addedNodes[j] instanceof HTMLMetaElement)
1208
+ return syncThemeColorMeta();
1209
+ for (var j = 0; j < removedNodes.length; j++)
1210
+ if (removedNodes[j] instanceof HTMLMetaElement)
1211
+ return syncThemeColorMeta();
1212
+ }
1213
+ });
1214
+ if (typeof MEDIA_QUERY_LIST.addEventListener === "function")
1215
+ MEDIA_QUERY_LIST.addEventListener("change", syncThemeColorMeta);
1216
+ else if (typeof MEDIA_QUERY_LIST.addListener === "function")
1217
+ MEDIA_QUERY_LIST.addListener(syncThemeColorMeta);
1218
+ observer.observe(document.head, { childList: true });
1219
+ syncThemeColorMeta();
1220
+ }
1221
+ init();
1222
+ function setThemeColor(color, options) {
1223
+ if (options === void 0) { options = { duration: 0, easingFunction: "linear", appearance: "default" }; }
1224
+ var duration = options.duration;
1225
+ var easingFn = parseEasingFunction(options.easingFunction);
1226
+ var appearance = options.appearance;
1227
+ if (themeIntervalId !== null) {
1228
+ window.cancelAnimationFrame(themeIntervalId);
1229
+ themeIntervalId = null;
1230
+ if (currentResolve !== null) {
1231
+ currentResolve(getThemeColor());
1232
+ currentResolve = null;
1233
+ }
1234
+ }
1235
+ var themeColor = getThemeColor();
1236
+ if (themeColor === undefined) {
1237
+ if (options.defaultColor !== undefined) {
1238
+ themeColor = options.defaultColor;
1239
+ }
1240
+ else {
1241
+ if (detectFromMediaQuery() === Appearances.Dark)
1242
+ themeColor = "#181818ff";
1243
+ else
1244
+ themeColor = "#dcdcdcff";
1245
+ }
1246
+ }
1247
+ var startColor = parseColor(themeColor);
1248
+ var endColor = parseColor(color);
1249
+ return new Promise(function (resolve) {
1250
+ currentResolve = resolve;
1251
+ var startTime = null;
1252
+ function animate(timestamp) {
1253
+ if (startTime === null)
1254
+ startTime = timestamp;
1255
+ var elapsed = timestamp - startTime;
1256
+ var t;
1257
+ if (duration === 0)
1258
+ t = 1;
1259
+ else
1260
+ t = Math.min(elapsed / duration, 1);
1261
+ var easedT = easingFn(t);
1262
+ var current = {
1263
+ red: Math.round(startColor.red + (endColor.red - startColor.red) * easedT),
1264
+ green: Math.round(startColor.green + (endColor.green - startColor.green) * easedT),
1265
+ blue: Math.round(startColor.blue + (endColor.blue - startColor.blue) * easedT),
1266
+ alpha: +(startColor.alpha + (endColor.alpha - startColor.alpha) * easedT).toFixed(2),
1267
+ };
1268
+ getThemeColorMeta(appearance).setAttribute("content", rgbaToHex(current));
1269
+ if (t < 1) {
1270
+ themeIntervalId = window.requestAnimationFrame(animate);
1271
+ }
1272
+ else {
1273
+ themeIntervalId = null;
1274
+ if (currentResolve !== null) {
1275
+ resolve(getThemeColor());
1276
+ themeIntervalId = null;
1277
+ }
1278
+ }
1279
+ }
1280
+ themeIntervalId = window.requestAnimationFrame(animate);
1281
+ });
1282
+ }
1283
+ function getThemeColor() {
1284
+ var meta = getCurrentAppliedThemeColorMeta();
1285
+ if (meta !== null)
1286
+ return meta.getAttribute("content");
1287
+ return estimateDefaultThemeColor();
1288
+ }
1289
+ function removeThemeColor(appearance) {
1290
+ if (appearance === void 0) { appearance = "default"; }
1291
+ var meta = themeColorMetaGroup[appearance];
1292
+ if (meta !== undefined)
1293
+ meta.remove();
1294
+ themeColorMetaGroup[appearance] = undefined;
1295
+ }
1296
+ function detectAppearance() {
1297
+ if (IS_SAMSUNG)
1298
+ return detectFromEngine();
1299
+ else
1300
+ return Promise.resolve(detectFromMediaQuery());
1301
+ }
1302
+ function onAppearanceChange(listener, options) {
1303
+ if (options === void 0) { options = false; }
1304
+ var entry = { fn: listener, capture: false, once: false };
1305
+ if (typeof options === "boolean")
1306
+ options = { capture: options };
1307
+ if (options.capture !== undefined)
1308
+ entry.capture = options.capture;
1309
+ if (options.once !== undefined)
1310
+ entry.once = options.once;
1311
+ if (options.signal !== undefined)
1312
+ entry.signal = options.signal;
1313
+ var index = indexOfEntry(entry);
1314
+ if (index === -1) {
1315
+ ENTRIES.push(entry);
1316
+ if (ENTRIES.length === 1) {
1317
+ if (IS_SAMSUNG)
1318
+ startPolling();
1319
+ else
1320
+ addListener(entry.capture);
1321
+ }
1322
+ this.detectAppearance()
1323
+ .then(notify);
1324
+ }
1325
+ else if (ENTRIES[index].once && !entry.once) {
1326
+ ENTRIES[index].once = false;
1327
+ }
1328
+ if (entry.signal !== undefined) {
1329
+ if (entry.signal.aborted) {
1330
+ removeEntry(entry);
1331
+ }
1332
+ else {
1333
+ entry.signal.addEventListener("abort", function onAbort() {
1334
+ if (entry.signal !== undefined)
1335
+ entry.signal.removeEventListener("abort", onAbort);
1336
+ removeEntry(entry);
1337
+ });
1338
+ }
1339
+ }
1340
+ return function () {
1341
+ removeEntry(entry);
1342
+ };
1343
+ }
1344
+
1345
+ function freeze(o) {
1346
+ if (typeof Object.freeze === "function")
1347
+ return Object.freeze(o);
1348
+ var desc = { writable: false, configurable: false };
1349
+ var properties = getProperties(o);
1350
+ for (var i = 0; i < properties.length; i++)
1351
+ Object.defineProperty(o, properties[i], desc);
1352
+ return o;
1353
+ }
1354
+ function getProperties(o) {
1355
+ return Object.getOwnPropertyNames(o).concat(Object.getOwnPropertySymbols(o));
1356
+ }
1357
+ function freezeDeep(o) {
1358
+ if (o === null || typeof o !== "object")
1359
+ return o;
1360
+ var properties = getProperties(o);
1361
+ for (var i = 0; i < properties.length; i++)
1362
+ freezeDeep(o[properties[i]]);
1363
+ return freeze(o);
1364
+ }
1365
+
1366
+ var index = freezeDeep({
1367
+ Version: packageJSON.version,
1368
+ Constants: {
1369
+ Messengers: Messengers,
1370
+ AppOpenState: AppOpenState,
1371
+ Devices: Devices,
1372
+ Engines: Engines,
1373
+ OS: OS,
1374
+ Appearances: Appearances,
1375
+ },
1376
+ Errors: {
1377
+ URLOpenError: URLOpenError,
1378
+ UnsupportedColorError: UnsupportedColorError,
1379
+ EasingError: EasingError,
1380
+ UnsupportedEasingFunctionError: UnsupportedEasingFunctionError,
1381
+ StepSyntaxError: StepSyntaxError,
1382
+ LinearSyntaxError: LinearSyntaxError,
1383
+ CubicBezierSyntaxError: CubicBezierSyntaxError,
1384
+ },
1385
+ App: App,
1386
+ Platform: Platform,
1387
+ Theme: Theme,
1388
+ });
1389
+
1390
+ module.exports = index;