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