native-fn 1.1.9 → 1.2.0

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.
Files changed (201) hide show
  1. package/README.md +488 -146
  2. package/dist/index.d.ts +130 -117
  3. package/dist/native.cjs +581 -563
  4. package/dist/native.min.cjs +1 -1
  5. package/dist/native.min.mjs +1 -1
  6. package/dist/native.mjs +581 -563
  7. package/dist/native.umd.js +581 -563
  8. package/dist/native.umd.min.js +1 -1
  9. package/dist/plugin/appearance/src/errors/invalid-state-error.d.ts +2 -0
  10. package/dist/plugin/appearance/src/plugin/badge/types/badge.d.ts +1 -1
  11. package/dist/plugin/appearance/src/plugin/battery/types/battery.d.ts +1 -1
  12. package/dist/plugin/appearance/src/plugin/fullscreen/cores/index.d.ts +3 -3
  13. package/dist/plugin/appearance/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  14. package/dist/plugin/appearance/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  15. package/dist/plugin/appearance/src/plugin/open/types/open.d.ts +1 -1
  16. package/dist/plugin/appearance/src/plugin/permission/types/permission.d.ts +1 -0
  17. package/dist/plugin/appearance/src/plugin/pip/cores/index.d.ts +6 -6
  18. package/dist/plugin/appearance/src/plugin/pip/types/pip.d.ts +12 -6
  19. package/dist/plugin/appearance/src/plugin/vibration/types/vibration.d.ts +1 -1
  20. package/dist/plugin/badge/index.cjs +2 -2
  21. package/dist/plugin/badge/index.d.ts +1 -1
  22. package/dist/plugin/badge/index.mjs +2 -2
  23. package/dist/plugin/badge/src/errors/invalid-state-error.d.ts +2 -0
  24. package/dist/plugin/badge/src/plugin/badge/types/badge.d.ts +1 -1
  25. package/dist/plugin/badge/src/plugin/battery/types/battery.d.ts +1 -1
  26. package/dist/plugin/badge/src/plugin/fullscreen/cores/index.d.ts +3 -3
  27. package/dist/plugin/badge/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  28. package/dist/plugin/badge/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  29. package/dist/plugin/badge/src/plugin/open/types/open.d.ts +1 -1
  30. package/dist/plugin/badge/src/plugin/permission/types/permission.d.ts +1 -0
  31. package/dist/plugin/badge/src/plugin/pip/cores/index.d.ts +6 -6
  32. package/dist/plugin/badge/src/plugin/pip/types/pip.d.ts +12 -6
  33. package/dist/plugin/badge/src/plugin/vibration/types/vibration.d.ts +1 -1
  34. package/dist/plugin/battery/index.cjs +3 -3
  35. package/dist/plugin/battery/index.d.ts +1 -1
  36. package/dist/plugin/battery/index.mjs +3 -3
  37. package/dist/plugin/battery/src/errors/invalid-state-error.d.ts +2 -0
  38. package/dist/plugin/battery/src/plugin/badge/types/badge.d.ts +1 -1
  39. package/dist/plugin/battery/src/plugin/battery/types/battery.d.ts +1 -1
  40. package/dist/plugin/battery/src/plugin/fullscreen/cores/index.d.ts +3 -3
  41. package/dist/plugin/battery/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  42. package/dist/plugin/battery/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  43. package/dist/plugin/battery/src/plugin/open/types/open.d.ts +1 -1
  44. package/dist/plugin/battery/src/plugin/permission/types/permission.d.ts +1 -0
  45. package/dist/plugin/battery/src/plugin/pip/cores/index.d.ts +6 -6
  46. package/dist/plugin/battery/src/plugin/pip/types/pip.d.ts +12 -6
  47. package/dist/plugin/battery/src/plugin/vibration/types/vibration.d.ts +1 -1
  48. package/dist/plugin/clipboard/src/errors/invalid-state-error.d.ts +2 -0
  49. package/dist/plugin/clipboard/src/plugin/badge/types/badge.d.ts +1 -1
  50. package/dist/plugin/clipboard/src/plugin/battery/types/battery.d.ts +1 -1
  51. package/dist/plugin/clipboard/src/plugin/fullscreen/cores/index.d.ts +3 -3
  52. package/dist/plugin/clipboard/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  53. package/dist/plugin/clipboard/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  54. package/dist/plugin/clipboard/src/plugin/open/types/open.d.ts +1 -1
  55. package/dist/plugin/clipboard/src/plugin/permission/types/permission.d.ts +1 -0
  56. package/dist/plugin/clipboard/src/plugin/pip/cores/index.d.ts +6 -6
  57. package/dist/plugin/clipboard/src/plugin/pip/types/pip.d.ts +12 -6
  58. package/dist/plugin/clipboard/src/plugin/vibration/types/vibration.d.ts +1 -1
  59. package/dist/plugin/dimension/src/errors/invalid-state-error.d.ts +2 -0
  60. package/dist/plugin/dimension/src/plugin/badge/types/badge.d.ts +1 -1
  61. package/dist/plugin/dimension/src/plugin/battery/types/battery.d.ts +1 -1
  62. package/dist/plugin/dimension/src/plugin/fullscreen/cores/index.d.ts +3 -3
  63. package/dist/plugin/dimension/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  64. package/dist/plugin/dimension/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  65. package/dist/plugin/dimension/src/plugin/open/types/open.d.ts +1 -1
  66. package/dist/plugin/dimension/src/plugin/permission/types/permission.d.ts +1 -0
  67. package/dist/plugin/dimension/src/plugin/pip/cores/index.d.ts +6 -6
  68. package/dist/plugin/dimension/src/plugin/pip/types/pip.d.ts +12 -6
  69. package/dist/plugin/dimension/src/plugin/vibration/types/vibration.d.ts +1 -1
  70. package/dist/plugin/fullscreen/index.cjs +499 -265
  71. package/dist/plugin/fullscreen/index.d.ts +14 -7
  72. package/dist/plugin/fullscreen/index.mjs +499 -265
  73. package/dist/plugin/fullscreen/src/errors/invalid-state-error.d.ts +2 -0
  74. package/dist/plugin/fullscreen/src/plugin/badge/types/badge.d.ts +1 -1
  75. package/dist/plugin/fullscreen/src/plugin/battery/types/battery.d.ts +1 -1
  76. package/dist/plugin/fullscreen/src/plugin/fullscreen/cores/index.d.ts +3 -3
  77. package/dist/plugin/fullscreen/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  78. package/dist/plugin/fullscreen/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  79. package/dist/plugin/fullscreen/src/plugin/open/types/open.d.ts +1 -1
  80. package/dist/plugin/fullscreen/src/plugin/permission/types/permission.d.ts +1 -0
  81. package/dist/plugin/fullscreen/src/plugin/pip/cores/index.d.ts +6 -6
  82. package/dist/plugin/fullscreen/src/plugin/pip/types/pip.d.ts +12 -6
  83. package/dist/plugin/fullscreen/src/plugin/vibration/types/vibration.d.ts +1 -1
  84. package/dist/plugin/geolocation/index.cjs +6 -0
  85. package/dist/plugin/geolocation/index.d.ts +1 -1
  86. package/dist/plugin/geolocation/index.mjs +6 -0
  87. package/dist/plugin/geolocation/src/errors/invalid-state-error.d.ts +2 -0
  88. package/dist/plugin/geolocation/src/plugin/badge/types/badge.d.ts +1 -1
  89. package/dist/plugin/geolocation/src/plugin/battery/types/battery.d.ts +1 -1
  90. package/dist/plugin/geolocation/src/plugin/fullscreen/cores/index.d.ts +3 -3
  91. package/dist/plugin/geolocation/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  92. package/dist/plugin/geolocation/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  93. package/dist/plugin/geolocation/src/plugin/open/types/open.d.ts +1 -1
  94. package/dist/plugin/geolocation/src/plugin/permission/types/permission.d.ts +1 -0
  95. package/dist/plugin/geolocation/src/plugin/pip/cores/index.d.ts +6 -6
  96. package/dist/plugin/geolocation/src/plugin/pip/types/pip.d.ts +12 -6
  97. package/dist/plugin/geolocation/src/plugin/vibration/types/vibration.d.ts +1 -1
  98. package/dist/plugin/notification/index.cjs +6 -0
  99. package/dist/plugin/notification/index.mjs +6 -0
  100. package/dist/plugin/notification/src/errors/invalid-state-error.d.ts +2 -0
  101. package/dist/plugin/notification/src/plugin/badge/types/badge.d.ts +1 -1
  102. package/dist/plugin/notification/src/plugin/battery/types/battery.d.ts +1 -1
  103. package/dist/plugin/notification/src/plugin/fullscreen/cores/index.d.ts +3 -3
  104. package/dist/plugin/notification/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  105. package/dist/plugin/notification/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  106. package/dist/plugin/notification/src/plugin/open/types/open.d.ts +1 -1
  107. package/dist/plugin/notification/src/plugin/permission/types/permission.d.ts +1 -0
  108. package/dist/plugin/notification/src/plugin/pip/cores/index.d.ts +6 -6
  109. package/dist/plugin/notification/src/plugin/pip/types/pip.d.ts +12 -6
  110. package/dist/plugin/notification/src/plugin/vibration/types/vibration.d.ts +1 -1
  111. package/dist/plugin/open/index.cjs +120 -120
  112. package/dist/plugin/open/index.d.ts +35 -35
  113. package/dist/plugin/open/index.mjs +120 -120
  114. package/dist/plugin/open/src/errors/invalid-state-error.d.ts +2 -0
  115. package/dist/plugin/open/src/plugin/badge/types/badge.d.ts +1 -1
  116. package/dist/plugin/open/src/plugin/battery/types/battery.d.ts +1 -1
  117. package/dist/plugin/open/src/plugin/fullscreen/cores/index.d.ts +3 -3
  118. package/dist/plugin/open/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  119. package/dist/plugin/open/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  120. package/dist/plugin/open/src/plugin/open/types/open.d.ts +1 -1
  121. package/dist/plugin/open/src/plugin/permission/types/permission.d.ts +1 -0
  122. package/dist/plugin/open/src/plugin/pip/cores/index.d.ts +6 -6
  123. package/dist/plugin/open/src/plugin/pip/types/pip.d.ts +12 -6
  124. package/dist/plugin/open/src/plugin/vibration/types/vibration.d.ts +1 -1
  125. package/dist/plugin/permission/index.cjs +6 -0
  126. package/dist/plugin/permission/index.d.ts +1 -0
  127. package/dist/plugin/permission/index.mjs +6 -0
  128. package/dist/plugin/permission/src/errors/invalid-state-error.d.ts +2 -0
  129. package/dist/plugin/permission/src/plugin/badge/types/badge.d.ts +1 -1
  130. package/dist/plugin/permission/src/plugin/battery/types/battery.d.ts +1 -1
  131. package/dist/plugin/permission/src/plugin/fullscreen/cores/index.d.ts +3 -3
  132. package/dist/plugin/permission/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  133. package/dist/plugin/permission/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  134. package/dist/plugin/permission/src/plugin/open/types/open.d.ts +1 -1
  135. package/dist/plugin/permission/src/plugin/permission/types/permission.d.ts +1 -0
  136. package/dist/plugin/permission/src/plugin/pip/cores/index.d.ts +6 -6
  137. package/dist/plugin/permission/src/plugin/pip/types/pip.d.ts +12 -6
  138. package/dist/plugin/permission/src/plugin/vibration/types/vibration.d.ts +1 -1
  139. package/dist/plugin/pip/index.cjs +255 -273
  140. package/dist/plugin/pip/index.d.ts +20 -13
  141. package/dist/plugin/pip/index.mjs +255 -273
  142. package/dist/plugin/pip/src/errors/invalid-state-error.d.ts +2 -0
  143. package/dist/plugin/pip/src/plugin/badge/types/badge.d.ts +1 -1
  144. package/dist/plugin/pip/src/plugin/battery/types/battery.d.ts +1 -1
  145. package/dist/plugin/pip/src/plugin/fullscreen/cores/index.d.ts +3 -3
  146. package/dist/plugin/pip/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  147. package/dist/plugin/pip/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  148. package/dist/plugin/pip/src/plugin/open/types/open.d.ts +1 -1
  149. package/dist/plugin/pip/src/plugin/permission/types/permission.d.ts +1 -0
  150. package/dist/plugin/pip/src/plugin/pip/cores/index.d.ts +6 -6
  151. package/dist/plugin/pip/src/plugin/pip/types/pip.d.ts +12 -6
  152. package/dist/plugin/pip/src/plugin/vibration/types/vibration.d.ts +1 -1
  153. package/dist/plugin/platform/index.d.ts +5 -5
  154. package/dist/plugin/platform/src/errors/invalid-state-error.d.ts +2 -0
  155. package/dist/plugin/platform/src/plugin/badge/types/badge.d.ts +1 -1
  156. package/dist/plugin/platform/src/plugin/battery/types/battery.d.ts +1 -1
  157. package/dist/plugin/platform/src/plugin/fullscreen/cores/index.d.ts +3 -3
  158. package/dist/plugin/platform/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  159. package/dist/plugin/platform/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  160. package/dist/plugin/platform/src/plugin/open/types/open.d.ts +1 -1
  161. package/dist/plugin/platform/src/plugin/permission/types/permission.d.ts +1 -0
  162. package/dist/plugin/platform/src/plugin/pip/cores/index.d.ts +6 -6
  163. package/dist/plugin/platform/src/plugin/pip/types/pip.d.ts +12 -6
  164. package/dist/plugin/platform/src/plugin/vibration/types/vibration.d.ts +1 -1
  165. package/dist/plugin/theme/src/errors/invalid-state-error.d.ts +2 -0
  166. package/dist/plugin/theme/src/plugin/badge/types/badge.d.ts +1 -1
  167. package/dist/plugin/theme/src/plugin/battery/types/battery.d.ts +1 -1
  168. package/dist/plugin/theme/src/plugin/fullscreen/cores/index.d.ts +3 -3
  169. package/dist/plugin/theme/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  170. package/dist/plugin/theme/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  171. package/dist/plugin/theme/src/plugin/open/types/open.d.ts +1 -1
  172. package/dist/plugin/theme/src/plugin/permission/types/permission.d.ts +1 -0
  173. package/dist/plugin/theme/src/plugin/pip/cores/index.d.ts +6 -6
  174. package/dist/plugin/theme/src/plugin/pip/types/pip.d.ts +12 -6
  175. package/dist/plugin/theme/src/plugin/vibration/types/vibration.d.ts +1 -1
  176. package/dist/plugin/vibration/index.cjs +5 -5
  177. package/dist/plugin/vibration/index.d.ts +1 -1
  178. package/dist/plugin/vibration/index.mjs +5 -5
  179. package/dist/plugin/vibration/src/errors/invalid-state-error.d.ts +2 -0
  180. package/dist/plugin/vibration/src/plugin/badge/types/badge.d.ts +1 -1
  181. package/dist/plugin/vibration/src/plugin/battery/types/battery.d.ts +1 -1
  182. package/dist/plugin/vibration/src/plugin/fullscreen/cores/index.d.ts +3 -3
  183. package/dist/plugin/vibration/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  184. package/dist/plugin/vibration/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  185. package/dist/plugin/vibration/src/plugin/open/types/open.d.ts +1 -1
  186. package/dist/plugin/vibration/src/plugin/permission/types/permission.d.ts +1 -0
  187. package/dist/plugin/vibration/src/plugin/pip/cores/index.d.ts +6 -6
  188. package/dist/plugin/vibration/src/plugin/pip/types/pip.d.ts +12 -6
  189. package/dist/plugin/vibration/src/plugin/vibration/types/vibration.d.ts +1 -1
  190. package/dist/src/errors/invalid-state-error.d.ts +2 -0
  191. package/dist/src/plugin/badge/types/badge.d.ts +1 -1
  192. package/dist/src/plugin/battery/types/battery.d.ts +1 -1
  193. package/dist/src/plugin/fullscreen/cores/index.d.ts +3 -3
  194. package/dist/src/plugin/fullscreen/types/fullscreen.d.ts +9 -3
  195. package/dist/src/plugin/geolocation/types/geolocation.d.ts +1 -1
  196. package/dist/src/plugin/open/types/open.d.ts +1 -1
  197. package/dist/src/plugin/permission/types/permission.d.ts +1 -0
  198. package/dist/src/plugin/pip/cores/index.d.ts +6 -6
  199. package/dist/src/plugin/pip/types/pip.d.ts +12 -6
  200. package/dist/src/plugin/vibration/types/vibration.d.ts +1 -1
  201. package/package.json +21 -13
@@ -102,6 +102,7 @@ var HIGH_ENTROPY_BRAND_NAME_MAP = {
102
102
  'HeadlessChrome': 'Chrome Headless',
103
103
  'OperaMobile': 'Opera Mobi',
104
104
  };
105
+ var RTL_LANGUAGES = ['ae', 'ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'glk', 'he', 'iw', 'ku', 'mzn', 'nqo', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi'];
105
106
  var OS_RESOLVER_MAP = [
106
107
  [/windows nt (6\.[23]); arm/i, OS.Windows, resolveWindowsVersion],
107
108
  [/windows (?:phone|mobile|iot)(?: os)?[\/ ]?([\d.]*( se)?)/i, OS.Windows, resolveWindowsVersion],
@@ -373,6 +374,9 @@ var parsedFromHighEntropyValuesOS = {};
373
374
  var parsedFromHighEntropyValuesBrowser = {};
374
375
  var parsedFromHighEntropyValuesEngine = {};
375
376
  var parsedFromHighEntropyValuesDevice = null;
377
+ var parsedFromNavigatorGPU = {};
378
+ var cachedLocale = null;
379
+ var ready;
376
380
  function resolveVersion(string, resolver) {
377
381
  if (typeof resolver === 'function')
378
382
  return resolver(string);
@@ -389,6 +393,38 @@ function normalizeBrand(entry) {
389
393
  return { brand: entry, version: '' };
390
394
  return { brand: entry.brand, version: entry.version };
391
395
  }
396
+ function normalizeLocale(locale) {
397
+ if (locale === null || typeof locale === 'undefined')
398
+ return locale;
399
+ if (locale.length === 0)
400
+ return null;
401
+ locale = locale.replace(/_/g, '-');
402
+ if (locale === 'C' || locale.toLowerCase() === 'posix')
403
+ return 'en-US';
404
+ if (locale.indexOf('.') !== -1)
405
+ return normalizeLocale(locale.split('.')[0]);
406
+ if (locale.indexOf('@') !== -1)
407
+ return normalizeLocale(locale.split('@')[0]);
408
+ var parts = locale.split('-');
409
+ if (parts.length === 0)
410
+ return null;
411
+ parts[0] = parts[0].toLowerCase();
412
+ if (parts.length > 1 && parts[1].length === 2)
413
+ parts[1] = parts[1].toUpperCase();
414
+ if (parts.length > 2 && parts[1].length === 4) {
415
+ parts[1] = parts[1].charAt(0).toUpperCase() + parts[1].slice(1).toLowerCase();
416
+ }
417
+ return parts.join('-');
418
+ }
419
+ function invalidateCache() {
420
+ parsedCache = null;
421
+ cachedLocale = null;
422
+ parsedFromHighEntropyValuesOS = {};
423
+ parsedFromHighEntropyValuesBrowser = {};
424
+ parsedFromHighEntropyValuesEngine = {};
425
+ parsedFromHighEntropyValuesDevice = null;
426
+ parsedFromNavigatorGPU = {};
427
+ }
392
428
  function getParsedCache() {
393
429
  if (parsedCache !== null && parsedCache.userAgent === currentUserAgent)
394
430
  return parsedCache;
@@ -467,6 +503,120 @@ function parseEngine() {
467
503
  }
468
504
  return result;
469
505
  }
506
+ function getGPU() {
507
+ return {
508
+ architecture: parsedFromNavigatorGPU.architecture,
509
+ description: parsedFromNavigatorGPU.description,
510
+ device: parsedFromNavigatorGPU.device,
511
+ vendor: parsedFromNavigatorGPU.vendor,
512
+ };
513
+ }
514
+ function getLocale() {
515
+ if (cachedLocale !== null)
516
+ return cachedLocale;
517
+ var locale = {
518
+ language: null,
519
+ languages: [],
520
+ timezone: null,
521
+ offset: 0,
522
+ isRTL: false,
523
+ };
524
+ var isRTL = null;
525
+ function addLanguages(language) {
526
+ for (var i = 0; i < language.length; i++)
527
+ addLanguage(language[i]);
528
+ }
529
+ function addLanguage(language) {
530
+ language = normalizeLocale(language);
531
+ if (typeof language === 'string' && locale.languages.indexOf(language) === -1) {
532
+ if (locale.language === null)
533
+ locale.language = language;
534
+ locale.languages.push(language);
535
+ }
536
+ }
537
+ if (typeof Intl !== 'undefined') {
538
+ try {
539
+ addLanguage(Intl.DateTimeFormat().resolvedOptions().locale);
540
+ }
541
+ catch (_) {
542
+ }
543
+ try {
544
+ locale.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
545
+ }
546
+ catch (_) {
547
+ }
548
+ }
549
+ if (typeof globalThis.navigator !== 'undefined') {
550
+ if (typeof globalThis.navigator.languages !== 'undefined')
551
+ addLanguages(globalThis.navigator.languages);
552
+ if (typeof globalThis.navigator.language !== 'undefined')
553
+ addLanguage(globalThis.navigator.language);
554
+ if (typeof globalThis.navigator.userLanguage !== 'undefined')
555
+ addLanguage(globalThis.navigator.userLanguage);
556
+ if (typeof globalThis.navigator.browserLanguage !== 'undefined')
557
+ addLanguage(globalThis.navigator.browserLanguage);
558
+ if (typeof globalThis.navigator.systemLanguage !== 'undefined')
559
+ addLanguage(globalThis.navigator.systemLanguage);
560
+ }
561
+ try {
562
+ locale.offset = new Date().getTimezoneOffset() * -1;
563
+ }
564
+ catch (_) {
565
+ }
566
+ if (typeof locale.language === 'string') {
567
+ if (typeof Intl !== 'undefined' && typeof Intl.Locale !== 'undefined') {
568
+ try {
569
+ var intlLocale = new Intl.Locale(locale.language);
570
+ if (typeof intlLocale.getTextInfo === 'function')
571
+ isRTL = intlLocale.getTextInfo().direction === 'rtl';
572
+ else if (typeof intlLocale.textInfo !== 'undefined')
573
+ isRTL = intlLocale.textInfo.direction === 'rtl';
574
+ }
575
+ catch (_) {
576
+ }
577
+ }
578
+ if (typeof isRTL !== 'boolean') {
579
+ var matched = /^([A-Za-z]{1,8})(?:[-_][A-Za-z0-9]{1,8})*$/.exec(locale.language);
580
+ if (matched !== null) {
581
+ var language = matched[1].toLowerCase();
582
+ for (var i = 0; i < RTL_LANGUAGES.length; i++) {
583
+ if (RTL_LANGUAGES[i] === language) {
584
+ isRTL = true;
585
+ break;
586
+ }
587
+ }
588
+ }
589
+ }
590
+ }
591
+ if (typeof isRTL === 'boolean')
592
+ locale.isRTL = isRTL;
593
+ cachedLocale = locale;
594
+ return cachedLocale;
595
+ }
596
+ function getDevice() {
597
+ if (currentUserAgent === USER_AGENT && parsedFromHighEntropyValuesDevice !== null)
598
+ return parsedFromHighEntropyValuesDevice;
599
+ var osName = getParsedCache().os.name;
600
+ if (osName === OS.iOS || osName === OS.Android)
601
+ return Devices.Mobile;
602
+ if (osName === OS.Windows || osName === OS.MacOS)
603
+ return Devices.Desktop;
604
+ return Devices.Unknown;
605
+ }
606
+ function getIsWebview() {
607
+ return /; ?wv|applewebkit(?!.*safari)/i.test(currentUserAgent);
608
+ }
609
+ function getIsNode() {
610
+ return typeof globalThis.process !== 'undefined' && typeof globalThis.process.versions !== 'undefined' && typeof globalThis.process.versions.node !== 'undefined';
611
+ }
612
+ function getIsStandalone() {
613
+ var osName = getParsedCache().os.name;
614
+ if (osName === OS.iOS)
615
+ return globalThis.navigator.standalone === true;
616
+ if (typeof globalThis.matchMedia === 'undefined')
617
+ return false;
618
+ return globalThis.matchMedia('(display-mode: standalone)').matches;
619
+ }
470
620
  function parseFromHighEntropyValues() {
471
621
  if (typeof globalThis.navigator === 'undefined' || typeof globalThis.navigator.userAgentData === 'undefined' || typeof globalThis.navigator.userAgentData.getHighEntropyValues === 'undefined')
472
622
  return Promise.resolve();
@@ -537,28 +687,80 @@ function parseFromNavigatorGPU() {
537
687
  .then(function (adapter) {
538
688
  if (adapter !== null) {
539
689
  var info = adapter.info;
540
- info.architecture;
541
- info.description;
542
- info.device;
543
- info.vendor;
690
+ parsedFromNavigatorGPU.architecture = info.architecture;
691
+ parsedFromNavigatorGPU.description = info.description;
692
+ parsedFromNavigatorGPU.device = info.device;
693
+ parsedFromNavigatorGPU.vendor = info.vendor;
544
694
  }
545
695
  })
546
696
  .catch(function () {
547
697
  });
548
698
  }
549
- Promise.all([
699
+ ready = Promise.all([
550
700
  parseFromHighEntropyValues(),
551
701
  parseFromNavigatorGPU(),
552
702
  ]).then(function () {
553
703
  });
554
704
  EventListener.add(globalThis, {
555
705
  type: 'languagechange', callback: function () {
706
+ cachedLocale = null;
556
707
  }
557
708
  });
558
709
  var Platform = {
710
+ get ready() {
711
+ return ready;
712
+ },
559
713
  get os() {
560
714
  return getParsedCache().os;
561
- }};
715
+ },
716
+ get engine() {
717
+ return getParsedCache().engine;
718
+ },
719
+ get browser() {
720
+ return getParsedCache().browser;
721
+ },
722
+ get userAgent() {
723
+ return currentUserAgent;
724
+ },
725
+ set userAgent(value) {
726
+ if (currentUserAgent === value)
727
+ return;
728
+ currentUserAgent = value;
729
+ invalidateCache();
730
+ if (value === USER_AGENT) {
731
+ ready = Promise.all([
732
+ parseFromHighEntropyValues(),
733
+ parseFromNavigatorGPU(),
734
+ ]).then(function () {
735
+ });
736
+ }
737
+ },
738
+ get locale() {
739
+ return getLocale();
740
+ },
741
+ get device() {
742
+ return getDevice();
743
+ },
744
+ get gpu() {
745
+ return getGPU();
746
+ },
747
+ get isWebview() {
748
+ return getIsWebview();
749
+ },
750
+ get isNode() {
751
+ return getIsNode();
752
+ },
753
+ get isStandalone() {
754
+ return getIsStandalone();
755
+ },
756
+ Constants: {
757
+ OS: OS,
758
+ Engines: Engines,
759
+ Browsers: Browsers,
760
+ Devices: Devices,
761
+ },
762
+ Errors: {},
763
+ };
562
764
 
563
765
  function createSubscriptionManager(attach, detach) {
564
766
  var entries = [];
@@ -702,7 +904,19 @@ function createCustomError(name, Base) {
702
904
 
703
905
  var NotSupportedError = createCustomError('NotSupportedError');
704
906
 
705
- var FS_BRIDGED_KEY = Symbol('fsBridged');
907
+ var InvalidStateError = createCustomError('InvalidStateError');
908
+
909
+ var lastIOSVideo = null;
910
+ var eventsBridged = false;
911
+ var FS_BRIDGE_KEY = (function () {
912
+ if (typeof Symbol === 'function') {
913
+ var existing = globalThis.__nativeFnFsBridgeKey__;
914
+ if (typeof existing === 'symbol')
915
+ return existing;
916
+ return globalThis.__nativeFnFsBridgeKey__ = Symbol('native.fn.fs.bridged');
917
+ }
918
+ return '__nativeFnFsBridged__';
919
+ }());
706
920
  var API_VARIANTS = {
707
921
  standard: {
708
922
  enabled: 'fullscreenEnabled',
@@ -734,6 +948,31 @@ var API_VARIANTS = {
734
948
  },
735
949
  };
736
950
  var api = detectApi();
951
+ var onChangeSubscriptionManager = createSubscriptionManager(attachOnChange, detachOnChange);
952
+ var onErrorSubscriptionManager = createSubscriptionManager(attachOnError, detachOnError);
953
+ var Fullscreen = {
954
+ get supported() {
955
+ return getEnabled();
956
+ },
957
+ get element() {
958
+ return getElement();
959
+ },
960
+ get isFullscreen() {
961
+ return getIsFullscreen();
962
+ },
963
+ request: request,
964
+ exit: exit,
965
+ onChange: onChangeSubscriptionManager.subscribe,
966
+ onError: onErrorSubscriptionManager.subscribe,
967
+ Constants: {},
968
+ Errors: {
969
+ NotSupportedError: NotSupportedError,
970
+ InvalidStateError: InvalidStateError,
971
+ },
972
+ };
973
+ function hasStandardApi() {
974
+ return api !== null;
975
+ }
737
976
  function detectApi() {
738
977
  var element = globalThis.document.documentElement;
739
978
  if (typeof globalThis.document.fullscreenEnabled !== 'undefined' || typeof globalThis.document.exitFullscreen !== 'undefined')
@@ -750,286 +989,281 @@ function detectApi() {
750
989
  }
751
990
  return null;
752
991
  }
753
- function createFullscreen() {
754
- var lastIOSVideo = null;
755
- var eventsBridged = false;
756
- var activeOperation = null;
757
- var pendingQueue = [];
758
- var lastIntendedOperation = 'exit';
759
- var onChangeSubscriptionManager = createSubscriptionManager(attachOnChange, detachOnChange);
760
- var onErrorSubscriptionManager = createSubscriptionManager(attachOnError, detachOnError);
761
- function getDefaultTarget() {
762
- if (Platform.os.name === OS.iOS) {
763
- var video = globalThis.document.querySelector('video');
764
- if (video === null)
765
- return undefined;
766
- return video;
767
- }
768
- return globalThis.document.documentElement;
769
- }
770
- function bridgeEvents() {
771
- if (eventsBridged)
772
- return;
773
- eventsBridged = true;
774
- if (Platform.os.name === OS.iOS) {
775
- bridgeIOSVideoEvents();
776
- if (typeof globalThis.MutationObserver !== 'undefined') {
777
- var observer = new MutationObserver(function () {
778
- bridgeIOSVideoEvents();
779
- });
780
- observer.observe(globalThis.document.documentElement, {
781
- childList: true,
782
- subtree: true,
783
- });
784
- }
785
- }
786
- }
787
- function bridgeIOSVideoEvents() {
788
- if (typeof globalThis.document === 'undefined')
789
- return;
790
- var videos = globalThis.document.querySelectorAll('video');
791
- videos.forEach(function (video) {
792
- if (video[FS_BRIDGED_KEY] === true || !(typeof video.webkitEnterFullscreen !== 'undefined' || typeof video.onwebkitbeginfullscreen !== 'undefined'))
793
- return;
794
- EventListener.add(video, {
795
- type: 'webkitbeginfullscreen',
796
- callback: onChangeSubscriptionManager.emit,
797
- options: false,
798
- });
799
- EventListener.add(video, {
800
- type: 'webkitendfullscreen',
801
- callback: onChangeSubscriptionManager.emit,
802
- options: false,
803
- });
804
- video[FS_BRIDGED_KEY] = true;
805
- });
992
+ function getDefaultTarget() {
993
+ if (Platform.os.name === OS.iOS) {
994
+ var video = globalThis.document.querySelector('video');
995
+ return video !== null ? video : undefined;
806
996
  }
807
- function attachOnChange() {
808
- var events = ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'];
809
- for (var i = 0; i < events.length; i++) {
810
- EventListener.add(globalThis.document, {
811
- type: events[i],
812
- callback: onChangeSubscriptionManager.emit,
813
- options: false,
814
- });
815
- }
816
- }
817
- function detachOnChange() {
818
- var events = ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'];
819
- for (var i = 0; i < events.length; i++) {
820
- EventListener.remove(globalThis.document, {
821
- type: events[i],
822
- callback: onChangeSubscriptionManager.emit,
823
- options: false,
824
- });
825
- }
826
- }
827
- function attachOnError() {
828
- var events = ['fullscreenerror', 'webkitfullscreenerror', 'mozfullscreenerror', 'MSFullscreenError'];
829
- for (var i = 0; i < events.length; i++) {
830
- EventListener.add(globalThis.document, {
831
- type: events[i],
832
- callback: onErrorSubscriptionManager.emit,
833
- options: false,
834
- });
835
- }
836
- }
837
- function detachOnError() {
838
- var events = ['fullscreenerror', 'webkitfullscreenerror', 'mozfullscreenerror', 'MSFullscreenError'];
839
- for (var i = 0; i < events.length; i++) {
840
- EventListener.remove(globalThis.document, {
841
- type: events[i],
842
- callback: onErrorSubscriptionManager.emit,
843
- options: false,
844
- });
845
- }
846
- }
847
- function getEnabled() {
848
- if (api === null)
849
- return (Platform.os.name === OS.iOS && globalThis.HTMLVideoElement.prototype.webkitSupportsFullscreen === true);
997
+ return globalThis.document.documentElement;
998
+ }
999
+ function getEnabled() {
1000
+ if (api !== null)
850
1001
  return globalThis.document[api.enabled] === true;
851
- }
852
- function getElement() {
853
- if (api === null) {
854
- if (lastIOSVideo !== null && lastIOSVideo.webkitDisplayingFullscreen === true)
855
- return lastIOSVideo;
856
- return null;
857
- }
858
- var currentElement = globalThis.document[api.element];
859
- if (typeof currentElement !== 'undefined')
860
- return currentElement;
1002
+ if (Platform.os.name !== OS.iOS)
1003
+ return false;
1004
+ var video;
1005
+ var selected = globalThis.document.querySelector('video');
1006
+ if (selected !== null)
1007
+ video = selected;
1008
+ else
1009
+ video = globalThis.document.createElement('video');
1010
+ return video.webkitSupportsFullscreen === true || typeof video.webkitEnterFullscreen === 'function';
1011
+ }
1012
+ function getElement() {
1013
+ if (api === null) {
1014
+ if (lastIOSVideo !== null && lastIOSVideo.webkitDisplayingFullscreen === true)
1015
+ return lastIOSVideo;
861
1016
  return null;
862
1017
  }
863
- function getIsFullscreen() {
864
- return getElement() !== null;
865
- }
866
- function drainPendingOperation() {
867
- var entry = pendingQueue.shift();
868
- if (typeof entry === 'undefined') {
869
- activeOperation = null;
870
- return;
871
- }
872
- var next;
873
- if (entry.operation === 'request')
874
- next = requestImmediately(entry.target, entry.options);
875
- else
876
- next = exitImmediately();
877
- activeOperation = next
878
- .then(function () {
879
- entry.resolve();
880
- drainPendingOperation();
881
- })
882
- .catch(function (error) {
883
- entry.reject(error);
884
- drainPendingOperation();
885
- });
886
- }
887
- function request(target, options) {
888
- lastIntendedOperation = 'request';
889
- if (activeOperation === null) {
890
- var next = requestImmediately(target, options);
891
- activeOperation = next
892
- .then(drainPendingOperation)
893
- .catch(drainPendingOperation);
894
- return next;
895
- }
896
- return new Promise(function (resolve, reject) {
897
- pendingQueue.push({
898
- operation: 'request',
899
- target: target,
900
- options: options,
901
- resolve: resolve,
902
- reject: reject,
903
- });
904
- });
905
- }
906
- function exit() {
907
- lastIntendedOperation = 'exit';
908
- if (activeOperation === null) {
909
- var next = exitImmediately();
910
- activeOperation = next
911
- .then(drainPendingOperation)
912
- .catch(drainPendingOperation);
913
- return next;
914
- }
915
- return new Promise(function (resolve, reject) {
916
- pendingQueue.push({
917
- operation: 'exit',
918
- target: undefined,
919
- options: undefined,
920
- resolve: resolve,
921
- reject: reject,
922
- });
923
- });
924
- }
925
- function requestImmediately(target, options) {
926
- return new Promise(function (resolve, reject) {
927
- if (typeof target === 'undefined')
928
- target = getDefaultTarget();
929
- if (typeof target === 'undefined')
930
- return reject(new NotSupportedError('Failed to enter fullscreen mode.'));
931
- var tagName = target.tagName.toLowerCase();
932
- function fallbackToIOSVideo() {
933
- if (Platform.os.name === OS.iOS && typeof target !== 'undefined' && target.tagName.toUpperCase() === 'VIDEO') {
934
- var video = target;
935
- if (video.webkitSupportsFullscreen === true && typeof video.webkitEnterFullscreen === 'function') {
936
- lastIOSVideo = video;
937
- bridgeIOSVideoEvents();
938
- video.webkitEnterFullscreen();
939
- return resolve();
1018
+ var currentElement = globalThis.document[api.element];
1019
+ if (typeof currentElement !== 'undefined')
1020
+ return currentElement;
1021
+ return null;
1022
+ }
1023
+ function getIsFullscreen() {
1024
+ return getElement() !== null;
1025
+ }
1026
+ function createEventPayload(nativeEvent, element, isFullscreen) {
1027
+ return {
1028
+ nativeEvent: nativeEvent,
1029
+ element: element,
1030
+ isFullscreen: isFullscreen,
1031
+ };
1032
+ }
1033
+ function emitChange(nativeEvent, element, isFullscreen) {
1034
+ onChangeSubscriptionManager.emit(createEventPayload(nativeEvent, element, isFullscreen));
1035
+ }
1036
+ function emitError(nativeEvent, element, isFullscreen) {
1037
+ onErrorSubscriptionManager.emit(createEventPayload(nativeEvent, element, isFullscreen));
1038
+ }
1039
+ function onFullscreenChange(event) {
1040
+ var target = event.target;
1041
+ if (target instanceof globalThis.Element)
1042
+ emitChange(event, target, getIsFullscreen());
1043
+ if (target instanceof globalThis.Document)
1044
+ emitChange(event, globalThis.document.documentElement, getIsFullscreen());
1045
+ }
1046
+ function onFullscreenError(event) {
1047
+ var target = event.target;
1048
+ if (target instanceof globalThis.Element)
1049
+ emitError(event, target, getIsFullscreen());
1050
+ if (target instanceof globalThis.Document)
1051
+ emitError(event, globalThis.document.documentElement, getIsFullscreen());
1052
+ }
1053
+ function onIOSBeginFullscreen(event) {
1054
+ lastIOSVideo = this;
1055
+ emitChange(event, this, true);
1056
+ }
1057
+ function onIOSEndFullscreen(event) {
1058
+ if (lastIOSVideo === this)
1059
+ lastIOSVideo = null;
1060
+ emitChange(event, this, false);
1061
+ }
1062
+ function bridgeSingleVideoNode(video) {
1063
+ if (video[FS_BRIDGE_KEY])
1064
+ return;
1065
+ if (typeof video.webkitEnterFullscreen === 'undefined' && typeof video.onwebkitbeginfullscreen === 'undefined')
1066
+ return;
1067
+ EventListener.add(video, { type: 'webkitbeginfullscreen', callback: onIOSBeginFullscreen, options: false });
1068
+ EventListener.add(video, { type: 'webkitendfullscreen', callback: onIOSEndFullscreen, options: false });
1069
+ video[FS_BRIDGE_KEY] = true;
1070
+ }
1071
+ function bridgeIOSVideoEvents() {
1072
+ var videos = globalThis.document.querySelectorAll('video');
1073
+ for (var i = 0; i < videos.length; i++)
1074
+ bridgeSingleVideoNode(videos[i]);
1075
+ }
1076
+ function bridgeEvents() {
1077
+ if (eventsBridged)
1078
+ return;
1079
+ eventsBridged = true;
1080
+ if (Platform.os.name !== OS.iOS)
1081
+ return;
1082
+ bridgeIOSVideoEvents();
1083
+ if (typeof globalThis.MutationObserver === 'undefined')
1084
+ return;
1085
+ var observer = new globalThis.MutationObserver(function (records) {
1086
+ if (lastIOSVideo !== null) {
1087
+ var removed = false;
1088
+ for (var i = 0; i < records.length; i++) {
1089
+ var removedNodes = records[i].removedNodes;
1090
+ for (var j = 0; j < removedNodes.length; j++) {
1091
+ var node = removedNodes[j];
1092
+ if (node === lastIOSVideo || (node.nodeType === Node.ELEMENT_NODE && node.contains(lastIOSVideo))) {
1093
+ removed = true;
1094
+ break;
940
1095
  }
941
1096
  }
942
- reject(new NotSupportedError('The "' + tagName + '" element does not support fullscreen requests.'));
1097
+ if (removed)
1098
+ break;
943
1099
  }
944
- if (api !== null) {
945
- var method = target[api.request];
946
- if (typeof method === 'function') {
947
- var result = method.call(target, options);
948
- if (typeof result !== 'undefined' && typeof result.then === 'function') {
949
- result
950
- .then(resolve)
951
- .catch(function () {
1100
+ if (removed && !globalThis.document.contains(lastIOSVideo))
1101
+ lastIOSVideo = null;
1102
+ }
1103
+ for (var i = 0; i < records.length; i++) {
1104
+ var addedNodes = records[i].addedNodes;
1105
+ for (var j = 0; j < addedNodes.length; j++) {
1106
+ var node = addedNodes[j];
1107
+ if (node.nodeType !== Node.ELEMENT_NODE)
1108
+ continue;
1109
+ var element = node;
1110
+ if (element.tagName === 'VIDEO') {
1111
+ bridgeSingleVideoNode(element);
1112
+ continue;
1113
+ }
1114
+ var nested = element.querySelectorAll('video');
1115
+ for (var k = 0; k < nested.length; k++)
1116
+ bridgeSingleVideoNode(nested[k]);
1117
+ }
1118
+ }
1119
+ });
1120
+ observer.observe(globalThis.document.documentElement, { childList: true, subtree: true });
1121
+ }
1122
+ function attachOnChange() {
1123
+ if (api != null)
1124
+ EventListener.add(globalThis.document, { type: api.events.change, callback: onFullscreenChange, options: false });
1125
+ if (Platform.os.name === OS.iOS)
1126
+ bridgeIOSVideoEvents();
1127
+ }
1128
+ function detachOnChange() {
1129
+ if (api != null)
1130
+ EventListener.remove(globalThis.document, { type: api.events.change, callback: onFullscreenChange, options: false });
1131
+ if (Platform.os.name !== OS.iOS)
1132
+ return;
1133
+ var videos = globalThis.document.querySelectorAll('video');
1134
+ for (var i = 0; i < videos.length; i++) {
1135
+ EventListener.remove(videos[i], { type: 'webkitbeginfullscreen', callback: onIOSBeginFullscreen, options: false });
1136
+ EventListener.remove(videos[i], { type: 'webkitendfullscreen', callback: onIOSEndFullscreen, options: false });
1137
+ videos[i][FS_BRIDGE_KEY] = false;
1138
+ }
1139
+ }
1140
+ function attachOnError() {
1141
+ if (api != null)
1142
+ EventListener.add(globalThis.document, { type: api.events.error, callback: onFullscreenError, options: false });
1143
+ }
1144
+ function detachOnError() {
1145
+ if (api != null)
1146
+ EventListener.remove(globalThis.document, { type: api.events.error, callback: onFullscreenError, options: false });
1147
+ }
1148
+ function request(target, options) {
1149
+ return new Promise(function (resolve, reject) {
1150
+ if (typeof target === 'undefined')
1151
+ target = getDefaultTarget();
1152
+ if (typeof target === 'undefined')
1153
+ return reject(new NotSupportedError('Failed to enter fullscreen mode.'));
1154
+ var tagName = target.tagName.toLowerCase();
1155
+ var isIOSFullscreenActive = lastIOSVideo !== null && lastIOSVideo.webkitDisplayingFullscreen === true;
1156
+ if (api !== null) {
1157
+ var method = target[api.request];
1158
+ if (typeof method === 'function' && !isIOSFullscreenActive) {
1159
+ var result = method.call(target, options);
1160
+ if (typeof result !== 'undefined' && typeof result.then === 'function') {
1161
+ result
1162
+ .then(resolve)
1163
+ .catch(function () {
1164
+ try {
952
1165
  if (Platform.os.name !== OS.iOS)
953
1166
  return reject(new NotSupportedError('The "' + tagName + '" element does not support fullscreen requests.'));
954
1167
  fallbackToIOSVideo();
955
- });
956
- return;
957
- }
958
- return resolve();
1168
+ }
1169
+ catch (_e) {
1170
+ reject(new NotSupportedError('The "' + tagName + '" element does not support fullscreen requests.'));
1171
+ }
1172
+ });
1173
+ return;
959
1174
  }
960
- }
961
- fallbackToIOSVideo();
962
- });
963
- }
964
- function exitImmediately() {
965
- return new Promise(function (resolve, reject) {
966
- if (getElement() === null && lastIOSVideo === null)
967
1175
  return resolve();
968
- function fallbackToIOSVideo() {
969
- if (Platform.os.name === OS.iOS) {
970
- var candidates = void 0;
971
- if (lastIOSVideo !== null)
972
- candidates = [lastIOSVideo];
973
- else
974
- candidates = globalThis.document.querySelectorAll('video');
975
- for (var i = 0; i < candidates.length; i++) {
976
- var video = candidates[i];
977
- if (typeof video.webkitExitFullscreen === 'function' && video.webkitDisplayingFullscreen === true) {
978
- video.webkitExitFullscreen();
979
- lastIOSVideo = null;
980
- return resolve();
1176
+ }
1177
+ }
1178
+ function fallbackToIOSVideo() {
1179
+ if (Platform.os.name === OS.iOS && typeof target !== 'undefined' && target.tagName.toUpperCase() === 'VIDEO') {
1180
+ var video_1 = target;
1181
+ if (video_1.webkitSupportsFullscreen && typeof video_1.webkitEnterFullscreen === 'function') {
1182
+ if (!hasStandardApi())
1183
+ bridgeSingleVideoNode(video_1);
1184
+ if (video_1.played.length === 0) {
1185
+ video_1.play()
1186
+ .then(function () {
1187
+ try {
1188
+ video_1.webkitEnterFullscreen();
1189
+ }
1190
+ catch (e) {
1191
+ return reject(new InvalidStateError('The object is in an invalid state.'));
1192
+ }
1193
+ });
1194
+ }
1195
+ else {
1196
+ try {
1197
+ video_1.webkitEnterFullscreen();
1198
+ }
1199
+ catch (e) {
1200
+ return reject(new InvalidStateError('The object is in an invalid state.'));
981
1201
  }
982
1202
  }
1203
+ lastIOSVideo = video_1;
1204
+ return resolve();
983
1205
  }
984
- reject(new NotSupportedError('Failed to exit fullscreen mode.'));
985
1206
  }
986
- if (api !== null) {
987
- var method = globalThis.document[api.exit];
988
- if (typeof method === 'function') {
989
- var result = method.call(globalThis.document);
990
- if (typeof result !== 'undefined' && typeof result.then === 'function') {
991
- result
992
- .then(resolve)
993
- .catch(function () {
1207
+ reject(new NotSupportedError('The "' + tagName + '" element does not support fullscreen requests.'));
1208
+ }
1209
+ fallbackToIOSVideo();
1210
+ });
1211
+ }
1212
+ function exit() {
1213
+ return new Promise(function (resolve, reject) {
1214
+ if (api !== null) {
1215
+ var method = globalThis.document[api.exit];
1216
+ if (typeof method === 'function') {
1217
+ var result = method.call(globalThis.document);
1218
+ if (typeof result !== 'undefined' && typeof result.then === 'function') {
1219
+ result
1220
+ .then(resolve)
1221
+ .catch(function () {
1222
+ try {
994
1223
  if (Platform.os.name !== OS.iOS)
995
1224
  return reject(new NotSupportedError('Failed to exit fullscreen mode.'));
996
1225
  fallbackToIOSVideo();
997
- });
998
- return;
999
- }
1226
+ }
1227
+ catch (_e) {
1228
+ reject(new NotSupportedError('Failed to exit fullscreen mode.'));
1229
+ }
1230
+ });
1231
+ return;
1232
+ }
1233
+ return resolve();
1234
+ }
1235
+ }
1236
+ function fallbackToIOSVideo() {
1237
+ if (Platform.os.name !== OS.iOS) {
1238
+ reject(new NotSupportedError('Failed to exit fullscreen mode.'));
1239
+ return;
1240
+ }
1241
+ var target = lastIOSVideo;
1242
+ if (target !== null && typeof target.webkitExitFullscreen === 'function' && target.webkitDisplayingFullscreen === true) {
1243
+ target.webkitExitFullscreen();
1244
+ if (target.webkitDisplayingFullscreen)
1245
+ return reject(new NotSupportedError('Failed to exit fullscreen mode.'));
1246
+ lastIOSVideo = null;
1247
+ return resolve();
1248
+ }
1249
+ var videos = globalThis.document.querySelectorAll('video');
1250
+ for (var i = 0; i < videos.length; i++) {
1251
+ var video = videos[i];
1252
+ if (typeof video.webkitExitFullscreen === 'function' && video.webkitDisplayingFullscreen === true) {
1253
+ video.webkitExitFullscreen();
1254
+ if (video.webkitDisplayingFullscreen)
1255
+ return reject(new NotSupportedError('Failed to exit fullscreen mode.'));
1256
+ lastIOSVideo = null;
1000
1257
  return resolve();
1001
1258
  }
1002
1259
  }
1003
- fallbackToIOSVideo();
1004
- });
1005
- }
1006
- function toggle(target, options) {
1007
- if (lastIntendedOperation === 'request')
1008
- return exit();
1009
- return request(target, options);
1010
- }
1011
- bridgeEvents();
1012
- return {
1013
- get supported() {
1014
- return getEnabled();
1015
- },
1016
- get element() {
1017
- return getElement();
1018
- },
1019
- get isFullscreen() {
1020
- return getIsFullscreen();
1021
- },
1022
- request: request,
1023
- exit: exit,
1024
- toggle: toggle,
1025
- onChange: onChangeSubscriptionManager.subscribe,
1026
- onError: onErrorSubscriptionManager.subscribe,
1027
- Constants: {},
1028
- Errors: {
1029
- NotSupportedError: NotSupportedError,
1030
- },
1031
- };
1260
+ if (getElement() === null)
1261
+ return resolve();
1262
+ reject(new NotSupportedError('Failed to exit fullscreen mode.'));
1263
+ }
1264
+ fallbackToIOSVideo();
1265
+ });
1032
1266
  }
1033
- var Fullscreen = createFullscreen();
1267
+ bridgeEvents();
1034
1268
 
1035
1269
  module.exports = Fullscreen;