@vpmedia/phaser 1.112.0 → 1.113.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 (295) hide show
  1. package/dist/index.js +1261 -1314
  2. package/dist/index.js.map +1 -1
  3. package/dist/phaser/core/animation.d.ts +14 -10
  4. package/dist/phaser/core/animation.d.ts.map +1 -1
  5. package/dist/phaser/core/animation_manager.d.ts +10 -8
  6. package/dist/phaser/core/animation_manager.d.ts.map +1 -1
  7. package/dist/phaser/core/animation_parser.d.ts +5 -4
  8. package/dist/phaser/core/animation_parser.d.ts.map +1 -1
  9. package/dist/phaser/core/array_set.d.ts.map +1 -1
  10. package/dist/phaser/core/cache.d.ts +4 -3
  11. package/dist/phaser/core/cache.d.ts.map +1 -1
  12. package/dist/phaser/core/const.d.ts.map +1 -1
  13. package/dist/phaser/core/device.d.ts.map +1 -1
  14. package/dist/phaser/core/device_util.d.ts.map +1 -1
  15. package/dist/phaser/core/dom.d.ts +3 -2
  16. package/dist/phaser/core/dom.d.ts.map +1 -1
  17. package/dist/phaser/core/event_manager.d.ts.map +1 -1
  18. package/dist/phaser/core/factory.d.ts +1 -1
  19. package/dist/phaser/core/factory.d.ts.map +1 -1
  20. package/dist/phaser/core/frame.d.ts.map +1 -1
  21. package/dist/phaser/core/frame_data.d.ts.map +1 -1
  22. package/dist/phaser/core/game.d.ts.map +1 -1
  23. package/dist/phaser/core/input.d.ts +8 -6
  24. package/dist/phaser/core/input.d.ts.map +1 -1
  25. package/dist/phaser/core/input_handler.d.ts +40 -30
  26. package/dist/phaser/core/input_handler.d.ts.map +1 -1
  27. package/dist/phaser/core/input_mouse.d.ts +3 -2
  28. package/dist/phaser/core/input_mouse.d.ts.map +1 -1
  29. package/dist/phaser/core/input_mspointer.d.ts +3 -2
  30. package/dist/phaser/core/input_mspointer.d.ts.map +1 -1
  31. package/dist/phaser/core/input_pointer.d.ts +6 -4
  32. package/dist/phaser/core/input_pointer.d.ts.map +1 -1
  33. package/dist/phaser/core/input_touch.d.ts +3 -2
  34. package/dist/phaser/core/input_touch.d.ts.map +1 -1
  35. package/dist/phaser/core/loader.d.ts +4 -3
  36. package/dist/phaser/core/loader.d.ts.map +1 -1
  37. package/dist/phaser/core/loader_parser.d.ts +9 -8
  38. package/dist/phaser/core/loader_parser.d.ts.map +1 -1
  39. package/dist/phaser/core/raf.d.ts +3 -2
  40. package/dist/phaser/core/raf.d.ts.map +1 -1
  41. package/dist/phaser/core/registry.d.ts +7 -0
  42. package/dist/phaser/core/registry.d.ts.map +1 -0
  43. package/dist/phaser/core/scale_manager.d.ts +1 -1
  44. package/dist/phaser/core/scale_manager.d.ts.map +1 -1
  45. package/dist/phaser/core/scene.d.ts +0 -1
  46. package/dist/phaser/core/scene.d.ts.map +1 -1
  47. package/dist/phaser/core/scene_manager.d.ts +1 -1
  48. package/dist/phaser/core/scene_manager.d.ts.map +1 -1
  49. package/dist/phaser/core/signal.d.ts +0 -1
  50. package/dist/phaser/core/signal.d.ts.map +1 -1
  51. package/dist/phaser/core/signal_binding.d.ts +4 -3
  52. package/dist/phaser/core/signal_binding.d.ts.map +1 -1
  53. package/dist/phaser/core/sound.d.ts +6 -4
  54. package/dist/phaser/core/sound.d.ts.map +1 -1
  55. package/dist/phaser/core/sound_manager.d.ts +3 -2
  56. package/dist/phaser/core/sound_manager.d.ts.map +1 -1
  57. package/dist/phaser/core/sound_sprite.d.ts +5 -4
  58. package/dist/phaser/core/sound_sprite.d.ts.map +1 -1
  59. package/dist/phaser/core/stage.d.ts +3 -2
  60. package/dist/phaser/core/stage.d.ts.map +1 -1
  61. package/dist/phaser/core/time.d.ts +1 -1
  62. package/dist/phaser/core/time.d.ts.map +1 -1
  63. package/dist/phaser/core/timer.d.ts +1 -1
  64. package/dist/phaser/core/timer.d.ts.map +1 -1
  65. package/dist/phaser/core/timer_event.d.ts.map +1 -1
  66. package/dist/phaser/core/tween.d.ts +10 -7
  67. package/dist/phaser/core/tween.d.ts.map +1 -1
  68. package/dist/phaser/core/tween_data.d.ts +3 -2
  69. package/dist/phaser/core/tween_data.d.ts.map +1 -1
  70. package/dist/phaser/core/tween_easing.d.ts.map +1 -1
  71. package/dist/phaser/core/tween_manager.d.ts +3 -2
  72. package/dist/phaser/core/tween_manager.d.ts.map +1 -1
  73. package/dist/phaser/core/world.d.ts +3 -2
  74. package/dist/phaser/core/world.d.ts.map +1 -1
  75. package/dist/phaser/display/bitmap_text.d.ts +3 -2
  76. package/dist/phaser/display/bitmap_text.d.ts.map +1 -1
  77. package/dist/phaser/display/button.d.ts +3 -2
  78. package/dist/phaser/display/button.d.ts.map +1 -1
  79. package/dist/phaser/display/canvas/buffer.d.ts.map +1 -1
  80. package/dist/phaser/display/canvas/graphics.d.ts +7 -6
  81. package/dist/phaser/display/canvas/graphics.d.ts.map +1 -1
  82. package/dist/phaser/display/canvas/pool.d.ts +2 -2
  83. package/dist/phaser/display/canvas/pool.d.ts.map +1 -1
  84. package/dist/phaser/display/canvas/renderer.d.ts +10 -8
  85. package/dist/phaser/display/canvas/renderer.d.ts.map +1 -1
  86. package/dist/phaser/display/canvas/tinter.d.ts +3 -2
  87. package/dist/phaser/display/canvas/tinter.d.ts.map +1 -1
  88. package/dist/phaser/display/canvas/util.d.ts +2 -2
  89. package/dist/phaser/display/canvas/util.d.ts.map +1 -1
  90. package/dist/phaser/display/display_object.d.ts +14 -12
  91. package/dist/phaser/display/display_object.d.ts.map +1 -1
  92. package/dist/phaser/display/graphics.d.ts +8 -5
  93. package/dist/phaser/display/graphics.d.ts.map +1 -1
  94. package/dist/phaser/display/graphics_data.d.ts.map +1 -1
  95. package/dist/phaser/display/graphics_data_util.d.ts.map +1 -1
  96. package/dist/phaser/display/group.d.ts +4 -3
  97. package/dist/phaser/display/group.d.ts.map +1 -1
  98. package/dist/phaser/display/image.d.ts +13 -10
  99. package/dist/phaser/display/image.d.ts.map +1 -1
  100. package/dist/phaser/display/sprite_batch.d.ts +3 -2
  101. package/dist/phaser/display/sprite_batch.d.ts.map +1 -1
  102. package/dist/phaser/display/sprite_util.d.ts +18 -15
  103. package/dist/phaser/display/sprite_util.d.ts.map +1 -1
  104. package/dist/phaser/display/text.d.ts +11 -9
  105. package/dist/phaser/display/text.d.ts.map +1 -1
  106. package/dist/phaser/display/webgl/abstract_filter.d.ts.map +1 -1
  107. package/dist/phaser/display/webgl/base_texture.d.ts.map +1 -1
  108. package/dist/phaser/display/webgl/blend_manager.d.ts +0 -1
  109. package/dist/phaser/display/webgl/blend_manager.d.ts.map +1 -1
  110. package/dist/phaser/display/webgl/earcut.d.ts +1 -1
  111. package/dist/phaser/display/webgl/earcut.d.ts.map +1 -1
  112. package/dist/phaser/display/webgl/earcut_node.d.ts.map +1 -1
  113. package/dist/phaser/display/webgl/fast_sprite_batch.d.ts +4 -3
  114. package/dist/phaser/display/webgl/fast_sprite_batch.d.ts.map +1 -1
  115. package/dist/phaser/display/webgl/filter_manager.d.ts +2 -1
  116. package/dist/phaser/display/webgl/filter_manager.d.ts.map +1 -1
  117. package/dist/phaser/display/webgl/filter_texture.d.ts +2 -1
  118. package/dist/phaser/display/webgl/filter_texture.d.ts.map +1 -1
  119. package/dist/phaser/display/webgl/graphics.d.ts +7 -6
  120. package/dist/phaser/display/webgl/graphics.d.ts.map +1 -1
  121. package/dist/phaser/display/webgl/graphics_data.d.ts +2 -1
  122. package/dist/phaser/display/webgl/graphics_data.d.ts.map +1 -1
  123. package/dist/phaser/display/webgl/render_texture.d.ts +4 -2
  124. package/dist/phaser/display/webgl/render_texture.d.ts.map +1 -1
  125. package/dist/phaser/display/webgl/renderer.d.ts +16 -11
  126. package/dist/phaser/display/webgl/renderer.d.ts.map +1 -1
  127. package/dist/phaser/display/webgl/shader/complex.d.ts +16 -6
  128. package/dist/phaser/display/webgl/shader/complex.d.ts.map +1 -1
  129. package/dist/phaser/display/webgl/shader/fast.d.ts +19 -7
  130. package/dist/phaser/display/webgl/shader/fast.d.ts.map +1 -1
  131. package/dist/phaser/display/webgl/shader/normal.d.ts +33 -12
  132. package/dist/phaser/display/webgl/shader/normal.d.ts.map +1 -1
  133. package/dist/phaser/display/webgl/shader/primitive.d.ts +15 -6
  134. package/dist/phaser/display/webgl/shader/primitive.d.ts.map +1 -1
  135. package/dist/phaser/display/webgl/shader/strip.d.ts +15 -6
  136. package/dist/phaser/display/webgl/shader/strip.d.ts.map +1 -1
  137. package/dist/phaser/display/webgl/shader_manager.d.ts +16 -11
  138. package/dist/phaser/display/webgl/shader_manager.d.ts.map +1 -1
  139. package/dist/phaser/display/webgl/sprite_batch.d.ts +29 -20
  140. package/dist/phaser/display/webgl/sprite_batch.d.ts.map +1 -1
  141. package/dist/phaser/display/webgl/stencil_manager.d.ts +12 -10
  142. package/dist/phaser/display/webgl/stencil_manager.d.ts.map +1 -1
  143. package/dist/phaser/display/webgl/texture.d.ts +3 -2
  144. package/dist/phaser/display/webgl/texture.d.ts.map +1 -1
  145. package/dist/phaser/display/webgl/texture_util.d.ts.map +1 -1
  146. package/dist/phaser/display/webgl/util.d.ts.map +1 -1
  147. package/dist/phaser/geom/circle.d.ts +4 -1
  148. package/dist/phaser/geom/circle.d.ts.map +1 -1
  149. package/dist/phaser/geom/ellipse.d.ts.map +1 -1
  150. package/dist/phaser/geom/line.d.ts +1 -1
  151. package/dist/phaser/geom/line.d.ts.map +1 -1
  152. package/dist/phaser/geom/matrix.d.ts.map +1 -1
  153. package/dist/phaser/geom/point.d.ts.map +1 -1
  154. package/dist/phaser/geom/polygon.d.ts.map +1 -1
  155. package/dist/phaser/geom/rectangle.d.ts.map +1 -1
  156. package/dist/phaser/geom/rounded_rectangle.d.ts.map +1 -1
  157. package/dist/phaser/geom/util/circle.d.ts.map +1 -1
  158. package/dist/phaser/geom/util/ellipse.d.ts +3 -2
  159. package/dist/phaser/geom/util/ellipse.d.ts.map +1 -1
  160. package/dist/phaser/geom/util/line.d.ts.map +1 -1
  161. package/dist/phaser/geom/util/matrix.d.ts +2 -2
  162. package/dist/phaser/geom/util/matrix.d.ts.map +1 -1
  163. package/dist/phaser/geom/util/point.d.ts.map +1 -1
  164. package/dist/phaser/geom/util/rectangle.d.ts +1 -1
  165. package/dist/phaser/geom/util/rectangle.d.ts.map +1 -1
  166. package/dist/phaser/util/math.d.ts.map +1 -1
  167. package/package.json +5 -5
  168. package/src/phaser/core/animation.ts +64 -60
  169. package/src/phaser/core/animation_manager.ts +50 -53
  170. package/src/phaser/core/animation_parser.ts +9 -9
  171. package/src/phaser/core/array_set.ts +16 -17
  172. package/src/phaser/core/cache.ts +92 -93
  173. package/src/phaser/core/const.ts +1 -1
  174. package/src/phaser/core/device.ts +24 -29
  175. package/src/phaser/core/device_util.ts +22 -26
  176. package/src/phaser/core/dom.ts +54 -65
  177. package/src/phaser/core/event_manager.ts +64 -94
  178. package/src/phaser/core/factory.ts +14 -14
  179. package/src/phaser/core/frame.ts +28 -28
  180. package/src/phaser/core/frame_data.test.ts +100 -0
  181. package/src/phaser/core/frame_data.ts +24 -24
  182. package/src/phaser/core/frame_util.ts +2 -2
  183. package/src/phaser/core/game.ts +47 -48
  184. package/src/phaser/core/input.ts +104 -110
  185. package/src/phaser/core/input_handler.test.ts +113 -0
  186. package/src/phaser/core/input_handler.ts +199 -218
  187. package/src/phaser/core/input_mouse.ts +71 -54
  188. package/src/phaser/core/input_mspointer.ts +52 -39
  189. package/src/phaser/core/input_pointer.ts +81 -80
  190. package/src/phaser/core/input_touch.ts +49 -36
  191. package/src/phaser/core/loader.ts +173 -152
  192. package/src/phaser/core/loader_parser.ts +39 -57
  193. package/src/phaser/core/raf.ts +8 -7
  194. package/src/phaser/core/registry.test.ts +31 -0
  195. package/src/phaser/core/registry.ts +9 -0
  196. package/src/phaser/core/scale_manager.ts +156 -152
  197. package/src/phaser/core/scene.ts +9 -13
  198. package/src/phaser/core/scene_manager.ts +47 -47
  199. package/src/phaser/core/signal.test.ts +4 -4
  200. package/src/phaser/core/signal.ts +41 -52
  201. package/src/phaser/core/signal_binding.ts +26 -25
  202. package/src/phaser/core/signal_dispatch.test.ts +180 -0
  203. package/src/phaser/core/sound.ts +75 -83
  204. package/src/phaser/core/sound_manager.ts +52 -51
  205. package/src/phaser/core/sound_sprite.ts +17 -16
  206. package/src/phaser/core/stage.ts +25 -24
  207. package/src/phaser/core/time.ts +52 -52
  208. package/src/phaser/core/timer.test.ts +187 -0
  209. package/src/phaser/core/timer.ts +82 -69
  210. package/src/phaser/core/timer_event.ts +10 -10
  211. package/src/phaser/core/tween.ts +90 -93
  212. package/src/phaser/core/tween_data.ts +45 -51
  213. package/src/phaser/core/tween_easing.test.ts +106 -0
  214. package/src/phaser/core/tween_easing.ts +151 -123
  215. package/src/phaser/core/tween_manager.ts +19 -18
  216. package/src/phaser/core/world.ts +4 -3
  217. package/src/phaser/display/bitmap_text.ts +56 -64
  218. package/src/phaser/display/button.ts +33 -32
  219. package/src/phaser/display/canvas/buffer.ts +8 -8
  220. package/src/phaser/display/canvas/graphics.ts +36 -37
  221. package/src/phaser/display/canvas/masker.ts +2 -2
  222. package/src/phaser/display/canvas/pool.test.ts +106 -0
  223. package/src/phaser/display/canvas/pool.ts +25 -27
  224. package/src/phaser/display/canvas/renderer.ts +32 -31
  225. package/src/phaser/display/canvas/tinter.ts +25 -25
  226. package/src/phaser/display/canvas/util.ts +7 -10
  227. package/src/phaser/display/display_object.ts +114 -118
  228. package/src/phaser/display/graphics.ts +121 -119
  229. package/src/phaser/display/graphics_data.ts +12 -12
  230. package/src/phaser/display/graphics_data_util.ts +2 -3
  231. package/src/phaser/display/group.ts +50 -57
  232. package/src/phaser/display/image.ts +55 -52
  233. package/src/phaser/display/sprite_batch.ts +3 -2
  234. package/src/phaser/display/sprite_util.ts +48 -54
  235. package/src/phaser/display/text.ts +199 -204
  236. package/src/phaser/display/webgl/abstract_filter.ts +9 -9
  237. package/src/phaser/display/webgl/base_texture.ts +21 -24
  238. package/src/phaser/display/webgl/blend_manager.ts +6 -10
  239. package/src/phaser/display/webgl/earcut.ts +73 -37
  240. package/src/phaser/display/webgl/earcut_node.ts +10 -10
  241. package/src/phaser/display/webgl/fast_sprite_batch.ts +34 -34
  242. package/src/phaser/display/webgl/filter_manager.ts +13 -12
  243. package/src/phaser/display/webgl/filter_texture.ts +14 -13
  244. package/src/phaser/display/webgl/graphics.ts +51 -57
  245. package/src/phaser/display/webgl/graphics_data.ts +15 -14
  246. package/src/phaser/display/webgl/mask_manager.ts +2 -2
  247. package/src/phaser/display/webgl/render_texture.ts +26 -25
  248. package/src/phaser/display/webgl/renderer.ts +57 -62
  249. package/src/phaser/display/webgl/shader/complex.ts +28 -12
  250. package/src/phaser/display/webgl/shader/fast.ts +30 -12
  251. package/src/phaser/display/webgl/shader/normal.ts +70 -57
  252. package/src/phaser/display/webgl/shader/primitive.ts +26 -11
  253. package/src/phaser/display/webgl/shader/shader.test.ts +148 -0
  254. package/src/phaser/display/webgl/shader/strip.ts +27 -12
  255. package/src/phaser/display/webgl/shader_manager.test.ts +124 -0
  256. package/src/phaser/display/webgl/shader_manager.ts +26 -34
  257. package/src/phaser/display/webgl/sprite_batch.ts +67 -61
  258. package/src/phaser/display/webgl/stencil_manager.ts +23 -34
  259. package/src/phaser/display/webgl/texture.ts +43 -50
  260. package/src/phaser/display/webgl/texture_util.ts +2 -3
  261. package/src/phaser/display/webgl/util.ts +26 -25
  262. package/src/phaser/geom/circle.test.ts +2 -3
  263. package/src/phaser/geom/circle.ts +36 -36
  264. package/src/phaser/geom/ellipse.test.ts +73 -71
  265. package/src/phaser/geom/ellipse.ts +14 -14
  266. package/src/phaser/geom/line.test.ts +5 -5
  267. package/src/phaser/geom/line.ts +35 -35
  268. package/src/phaser/geom/matrix.test.ts +1 -1
  269. package/src/phaser/geom/matrix.ts +27 -27
  270. package/src/phaser/geom/point.test.ts +1 -2
  271. package/src/phaser/geom/point.ts +35 -35
  272. package/src/phaser/geom/polygon.test.ts +82 -0
  273. package/src/phaser/geom/polygon.ts +16 -16
  274. package/src/phaser/geom/rectangle.test.ts +14 -14
  275. package/src/phaser/geom/rectangle.ts +83 -75
  276. package/src/phaser/geom/rounded_rectangle.test.ts +1 -7
  277. package/src/phaser/geom/rounded_rectangle.ts +9 -9
  278. package/src/phaser/geom/util/circle.test.ts +25 -23
  279. package/src/phaser/geom/util/circle.ts +9 -18
  280. package/src/phaser/geom/util/ellipse.test.ts +7 -5
  281. package/src/phaser/geom/util/ellipse.ts +3 -2
  282. package/src/phaser/geom/util/line.test.ts +10 -8
  283. package/src/phaser/geom/util/line.ts +6 -16
  284. package/src/phaser/geom/util/matrix.test.ts +20 -18
  285. package/src/phaser/geom/util/matrix.ts +8 -15
  286. package/src/phaser/geom/util/point.test.ts +8 -6
  287. package/src/phaser/geom/util/point.ts +24 -28
  288. package/src/phaser/geom/util/polygon.test.ts +12 -10
  289. package/src/phaser/geom/util/polygon.ts +2 -2
  290. package/src/phaser/geom/util/rectangle.test.ts +10 -8
  291. package/src/phaser/geom/util/rectangle.ts +18 -37
  292. package/src/phaser/geom/util/rounded_rectangle.test.ts +11 -9
  293. package/src/phaser/geom/util/rounded_rectangle.ts +1 -1
  294. package/src/phaser/util/math.test.ts +11 -11
  295. package/src/phaser/util/math.ts +29 -46
@@ -1,37 +1,32 @@
1
1
  export class Device {
2
- desktop!: boolean;
3
- iOS!: boolean;
4
- android!: boolean;
5
- chromeOS!: boolean;
6
- linux!: boolean;
7
- macOS!: boolean;
8
- windows!: boolean;
9
- windowsPhone!: boolean;
10
- canvas!: boolean;
11
- touch!: boolean;
12
- mspointer!: boolean;
13
- wheelEvent!: string | null;
14
- chrome!: boolean;
15
- firefox!: boolean;
16
- edge!: boolean;
17
- safari!: boolean;
18
- fullscreen!: boolean;
19
- requestFullscreen!: string;
20
- cancelFullscreen!: string;
21
- fullscreenKeyboard!: boolean;
22
- noAudioFormat!: boolean;
23
- supportedAudioFormats!: Record<string, boolean>;
24
- supportedImageFormats!: Record<string, boolean>;
2
+ public desktop: boolean = false;
3
+ public iOS: boolean = false;
4
+ public android: boolean = false;
5
+ public chromeOS: boolean = false;
6
+ public linux: boolean = false;
7
+ public macOS!: boolean;
8
+ public windows!: boolean;
9
+ public windowsPhone!: boolean;
10
+ public canvas!: boolean;
11
+ public touch!: boolean;
12
+ public mspointer!: boolean;
13
+ public wheelEvent!: string | null;
14
+ public chrome!: boolean;
15
+ public firefox!: boolean;
16
+ public edge!: boolean;
17
+ public safari!: boolean;
18
+ public fullscreen!: boolean;
19
+ public requestFullscreen!: string;
20
+ public cancelFullscreen!: string;
21
+ public fullscreenKeyboard!: boolean;
22
+ public noAudioFormat!: boolean;
23
+ public supportedAudioFormats!: Record<string, boolean>;
24
+ public supportedImageFormats!: Record<string, boolean>;
25
25
  /**
26
26
  * Creates a new Device instance.
27
27
  * This class provides information about the current device and browser capabilities.
28
28
  */
29
- constructor() {
30
- this.desktop = false;
31
- this.iOS = false;
32
- this.android = false;
33
- this.chromeOS = false;
34
- this.linux = false;
29
+ public constructor() {
35
30
  this.macOS = false;
36
31
  this.windows = false;
37
32
  this.windowsPhone = false;
@@ -9,9 +9,7 @@ const logger = getLogger(['phaser', 'device']);
9
9
  * @param {string} type - The audio format type to check.
10
10
  * @returns {boolean} True if the device can play this audio format, false otherwise.
11
11
  */
12
- export const canPlayAudio = (device: Device, type: string) => {
13
- return device.supportedAudioFormats[type] === true;
14
- };
12
+ export const canPlayAudio = (device: Device, type: string) => device.supportedAudioFormats[type] === true;
15
13
 
16
14
  /**
17
15
  * Detect the operating system of the device.
@@ -19,19 +17,19 @@ export const canPlayAudio = (device: Device, type: string) => {
19
17
  */
20
18
  export const checkOS = (device: Device) => {
21
19
  const ua = navigator.userAgent;
22
- if (/Android/.test(ua)) {
20
+ if (ua.includes('Android')) {
23
21
  device.android = true;
24
- } else if (/CrOS/.test(ua)) {
22
+ } else if (ua.includes('CrOS')) {
25
23
  device.chromeOS = true;
26
24
  } else if (/iP[ao]d|iPhone/i.test(ua)) {
27
25
  device.iOS = true;
28
26
  } else if (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) {
29
27
  device.iOS = true;
30
- } else if (/Mac OS/.test(ua)) {
28
+ } else if (ua.includes('Mac OS')) {
31
29
  device.macOS = true;
32
- } else if (/Linux/.test(ua)) {
30
+ } else if (ua.includes('Linux')) {
33
31
  device.linux = true;
34
- } else if (/Windows/.test(ua)) {
32
+ } else if (ua.includes('Windows')) {
35
33
  device.windows = true;
36
34
  }
37
35
  if (/Windows Phone/i.test(ua) || /IEMobile/i.test(ua)) {
@@ -57,7 +55,7 @@ export const checkOS = (device: Device) => {
57
55
  export const checkInput = (device: Device) => {
58
56
  if (
59
57
  'ontouchstart' in document.documentElement ||
60
- (window.navigator.maxTouchPoints && window.navigator.maxTouchPoints >= 1)
58
+ (globalThis.navigator.maxTouchPoints && globalThis.navigator.maxTouchPoints >= 1)
61
59
  ) {
62
60
  device.touch = true;
63
61
  }
@@ -65,7 +63,7 @@ export const checkInput = (device: Device) => {
65
63
  // device.mspointer = true;
66
64
  // }
67
65
  // See https://developer.mozilla.org/en-US/docs/Web/Events/wheel
68
- if ('onwheel' in window || 'WheelEvent' in window) {
66
+ if ('onwheel' in globalThis || 'WheelEvent' in globalThis) {
69
67
  device.wheelEvent = 'wheel';
70
68
  }
71
69
  };
@@ -97,23 +95,23 @@ export const checkFullScreenSupport = (device: Device) => {
97
95
  ];
98
96
  const element = document.createElement('div');
99
97
  const elementApi = element as unknown as Record<string, unknown>;
100
- for (let i = 0; i < fs.length; i += 1) {
101
- if (elementApi[fs[i]]) {
98
+ for (const name of fs) {
99
+ if (elementApi[name]) {
102
100
  device.fullscreen = true;
103
- device.requestFullscreen = fs[i];
101
+ device.requestFullscreen = name;
104
102
  break;
105
103
  }
106
104
  }
107
105
  if (device.fullscreen) {
108
106
  const documentApi = document as unknown as Record<string, unknown>;
109
- for (let i = 0; i < cfs.length; i += 1) {
110
- if (documentApi[cfs[i]]) {
111
- device.cancelFullscreen = cfs[i];
107
+ for (const name of cfs) {
108
+ if (documentApi[name]) {
109
+ device.cancelFullscreen = name;
112
110
  break;
113
111
  }
114
112
  }
115
- // @ts-ignore
116
- if (window.Element && Element.ALLOW_KEYBOARD_INPUT) {
113
+ // @ts-expect-error
114
+ if (globalThis.Element && Element.ALLOW_KEYBOARD_INPUT) {
117
115
  device.fullscreenKeyboard = true;
118
116
  }
119
117
  }
@@ -159,7 +157,7 @@ export const canPlayType = (audioElement: HTMLAudioElement, type: string) => {
159
157
  * @returns {boolean} True if the media source type is supported, false otherwise.
160
158
  */
161
159
  export const isMediaSourceTypeSupported = (type: string) => {
162
- if ('MediaSource' in window) {
160
+ if ('MediaSource' in globalThis) {
163
161
  try {
164
162
  return MediaSource.isTypeSupported(type);
165
163
  } catch (error) {
@@ -215,8 +213,8 @@ export const checkImage = (device: Device) => {
215
213
  const avif = new Image();
216
214
  avif.src =
217
215
  'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=';
218
- avif.onload = function () {
219
- device.supportedImageFormats.avif = true;
216
+ avif.onload = function onload() {
217
+ device.supportedImageFormats['avif'] = true;
220
218
  };
221
219
  } catch (error) {
222
220
  const typedError = error instanceof Error ? error : new Error(String(error));
@@ -225,8 +223,8 @@ export const checkImage = (device: Device) => {
225
223
  try {
226
224
  const webp = new Image();
227
225
  webp.src = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=';
228
- webp.onload = function () {
229
- device.supportedImageFormats.webp = true;
226
+ webp.onload = function onload() {
227
+ device.supportedImageFormats['webp'] = true;
230
228
  };
231
229
  } catch (error) {
232
230
  const typedError = error instanceof Error ? error : new Error(String(error));
@@ -252,6 +250,4 @@ export const initialize = (device: Device) => {
252
250
  * Create a new Device instance.
253
251
  * @returns {Device} A new Device instance.
254
252
  */
255
- export const createDevice = () => {
256
- return new Device();
257
- };
253
+ export const createDevice = () => new Device();
@@ -1,27 +1,28 @@
1
1
  import { Point } from '../geom/point.js';
2
+ import type { Device } from './device.js';
2
3
 
3
4
  class VisualBoundsDesktopRectangle {
4
5
  /**
5
6
  * Gets the horizontal scroll position of the window.
6
7
  * @returns {number} The horizontal scroll position in pixels.
7
8
  */
8
- get x() {
9
- return window && 'pageXOffset' in window ? window.pageXOffset : document.documentElement.scrollLeft;
9
+ public get x() {
10
+ return globalThis && 'pageXOffset' in globalThis ? window.pageXOffset : document.documentElement.scrollLeft;
10
11
  }
11
12
 
12
13
  /**
13
14
  * Gets the vertical scroll position of the window.
14
15
  * @returns {number} The vertical scroll position in pixels.
15
16
  */
16
- get y() {
17
- return window && 'pageYOffset' in window ? window.pageYOffset : document.documentElement.scrollTop;
17
+ public get y() {
18
+ return globalThis && 'pageYOffset' in globalThis ? window.pageYOffset : document.documentElement.scrollTop;
18
19
  }
19
20
 
20
21
  /**
21
22
  * Gets the width of the window.
22
23
  * @returns {number} The width of the window in pixels.
23
24
  */
24
- get width() {
25
+ public get width() {
25
26
  return Math.max(window.innerWidth, document.documentElement.clientWidth);
26
27
  }
27
28
 
@@ -29,7 +30,7 @@ class VisualBoundsDesktopRectangle {
29
30
  * Gets the height of the window.
30
31
  * @returns {number} The height of the window in pixels.
31
32
  */
32
- get height() {
33
+ public get height() {
33
34
  return Math.max(window.innerHeight, document.documentElement.clientHeight);
34
35
  }
35
36
  }
@@ -39,23 +40,19 @@ class LayoutBoundsDesktopRectangle {
39
40
  * Gets the horizontal scroll position of the window.
40
41
  * @returns {number} The horizontal scroll position in pixels.
41
42
  */
42
- get x() {
43
- return 0;
44
- }
43
+ public readonly x = 0;
45
44
 
46
45
  /**
47
46
  * Gets the vertical scroll position of the window.
48
47
  * @returns {number} The vertical scroll position in pixels.
49
48
  */
50
- get y() {
51
- return 0;
52
- }
49
+ public readonly y = 0;
53
50
 
54
51
  /**
55
52
  * Gets the width of the window.
56
53
  * @returns {number} The width of the window in pixels.
57
54
  */
58
- get width() {
55
+ public get width() {
59
56
  return Math.max(window.innerWidth, document.documentElement.clientWidth);
60
57
  }
61
58
 
@@ -63,7 +60,7 @@ class LayoutBoundsDesktopRectangle {
63
60
  * Gets the height of the window.
64
61
  * @returns {number} The height of the window in pixels.
65
62
  */
66
- get height() {
63
+ public get height() {
67
64
  return Math.max(window.innerHeight, document.documentElement.clientHeight);
68
65
  }
69
66
  }
@@ -73,23 +70,23 @@ class VisualBoundsRectangle {
73
70
  * Gets the horizontal scroll position of the document.
74
71
  * @returns {number} The horizontal scroll position in pixels.
75
72
  */
76
- get x() {
77
- return window && 'pageXOffset' in window ? window.pageXOffset : document.documentElement.scrollLeft;
73
+ public get x() {
74
+ return globalThis && 'pageXOffset' in globalThis ? window.pageXOffset : document.documentElement.scrollLeft;
78
75
  }
79
76
 
80
77
  /**
81
78
  * Gets the vertical scroll position of the document.
82
79
  * @returns {number} The vertical scroll position in pixels.
83
80
  */
84
- get y() {
85
- return window && 'pageYOffset' in window ? window.pageYOffset : document.documentElement.scrollTop;
81
+ public get y() {
82
+ return globalThis && 'pageYOffset' in globalThis ? window.pageYOffset : document.documentElement.scrollTop;
86
83
  }
87
84
 
88
85
  /**
89
86
  * TBD.
90
87
  * @returns {number} TBD.
91
88
  */
92
- get width() {
89
+ public get width() {
93
90
  return window.innerWidth;
94
91
  }
95
92
 
@@ -97,7 +94,7 @@ class VisualBoundsRectangle {
97
94
  * TBD.
98
95
  * @returns {number} TBD.
99
96
  */
100
- get height() {
97
+ public get height() {
101
98
  return window.innerHeight;
102
99
  }
103
100
  }
@@ -107,23 +104,19 @@ class LayoutBoundsRectangle {
107
104
  * TBD.
108
105
  * @returns {number} TBD.
109
106
  */
110
- get x() {
111
- return 0;
112
- }
107
+ public readonly x = 0;
113
108
 
114
109
  /**
115
110
  * TBD.
116
111
  * @returns {number} TBD.
117
112
  */
118
- get y() {
119
- return 0;
120
- }
113
+ public readonly y = 0;
121
114
 
122
115
  /**
123
116
  * TBD.
124
117
  * @returns {number} TBD.
125
118
  */
126
- get width() {
119
+ public get width() {
127
120
  const a = document.documentElement.clientWidth;
128
121
  const b = window.innerWidth;
129
122
  return a < b ? b : a; // max
@@ -133,7 +126,7 @@ class LayoutBoundsRectangle {
133
126
  * TBD.
134
127
  * @returns {number} TBD.
135
128
  */
136
- get height() {
129
+ public get height() {
137
130
  const a = document.documentElement.clientHeight;
138
131
  const b = window.innerHeight;
139
132
  return a < b ? b : a; // max
@@ -148,23 +141,19 @@ class DocumentBoundsRectangle {
148
141
  * TBD.
149
142
  * @returns {number} TBD.
150
143
  */
151
- get x() {
152
- return 0;
153
- }
144
+ public readonly x = 0;
154
145
 
155
146
  /**
156
147
  * TBD.
157
148
  * @returns {number} TBD.
158
149
  */
159
- get y() {
160
- return 0;
161
- }
150
+ public readonly y = 0;
162
151
 
163
152
  /**
164
153
  * TBD.
165
154
  * @returns {number} TBD.
166
155
  */
167
- get width() {
156
+ public get width() {
168
157
  const d = document.documentElement;
169
158
  return Math.max(d.clientWidth, d.offsetWidth, d.scrollWidth);
170
159
  }
@@ -173,25 +162,25 @@ class DocumentBoundsRectangle {
173
162
  * TBD.
174
163
  * @returns {number} TBD.
175
164
  */
176
- get height() {
165
+ public get height() {
177
166
  const d = document.documentElement;
178
167
  return Math.max(d.clientHeight, d.offsetHeight, d.scrollHeight);
179
168
  }
180
169
  }
181
170
 
182
171
  export class DOM {
183
- treatAsDesktop: boolean;
184
- visualBounds: any;
185
- layoutBounds: any;
186
- documentBounds: any;
187
- scrollXProvider: () => number;
188
- scrollYProvider: () => number;
172
+ public treatAsDesktop: boolean;
173
+ public visualBounds: any;
174
+ public layoutBounds: any;
175
+ public documentBounds: any;
176
+ public scrollXProvider: () => number;
177
+ public scrollYProvider: () => number;
189
178
 
190
179
  /**
191
180
  * TBD.
192
- * @param {import('./device.js').Device} device - TBD.
181
+ * @param {Device} device - TBD.
193
182
  */
194
- constructor(device: import('./device.js').Device) {
183
+ public constructor(device: Device) {
195
184
  this.treatAsDesktop =
196
185
  device.desktop &&
197
186
  document.documentElement.clientWidth <= window.innerWidth &&
@@ -200,9 +189,9 @@ export class DOM {
200
189
  this.layoutBounds = this.treatAsDesktop ? new LayoutBoundsDesktopRectangle() : new LayoutBoundsRectangle();
201
190
  this.documentBounds = new DocumentBoundsRectangle();
202
191
  this.scrollXProvider =
203
- window && 'pageXOffset' in window ? () => window.pageXOffset : () => document.documentElement.scrollLeft;
192
+ globalThis && 'pageXOffset' in globalThis ? () => window.pageXOffset : () => document.documentElement.scrollLeft;
204
193
  this.scrollYProvider =
205
- window && 'pageYOffset' in window ? () => window.pageYOffset : () => document.documentElement.scrollTop;
194
+ globalThis && 'pageYOffset' in globalThis ? () => window.pageYOffset : () => document.documentElement.scrollTop;
206
195
  }
207
196
 
208
197
  /**
@@ -211,13 +200,13 @@ export class DOM {
211
200
  * @param {Point} point - Optional Point object to store the result.
212
201
  * @returns {Point} The offset position of the element.
213
202
  */
214
- getOffset(element: HTMLCanvasElement, point: Point | null = null) {
215
- point = point || new Point();
203
+ public getOffset(element: HTMLCanvasElement, point: Point | null = null) {
204
+ point = point ?? new Point();
216
205
  const box = element.getBoundingClientRect();
217
206
  const scrollTop = this.scrollY;
218
207
  const scrollLeft = this.scrollX;
219
- const clientTop = document.documentElement.clientTop;
220
- const clientLeft = document.documentElement.clientLeft;
208
+ const { clientTop } = document.documentElement;
209
+ const { clientLeft } = document.documentElement;
221
210
  point.x = box.left + scrollLeft - clientLeft;
222
211
  point.y = box.top + scrollTop - clientTop;
223
212
  return point;
@@ -229,8 +218,8 @@ export class DOM {
229
218
  * @param {number} cushion - Optional padding to add around the element.
230
219
  * @returns {boolean} True if bounds were successfully retrieved, false otherwise.
231
220
  */
232
- getBounds(element: HTMLCanvasElement, cushion: number = 0) {
233
- element = element && !element.nodeType ? (element as unknown as HTMLCanvasElement[])[0] : element;
221
+ public getBounds(element: HTMLCanvasElement, cushion = 0) {
222
+ element = element && !element.nodeType ? (element as unknown as HTMLCanvasElement[])[0]! : element;
234
223
  if (!element || element.nodeType !== 1) {
235
224
  return false;
236
225
  }
@@ -243,7 +232,7 @@ export class DOM {
243
232
  * @param {number} cushion - Optional padding to add around the rectangle.
244
233
  * @returns {{width: number, height: number, left: number, right: number, top: number, bottom: number}} The calibrated rectangle.
245
234
  */
246
- calibrate(coords: DOMRect, cushion: number = 0) {
235
+ public calibrate(coords: DOMRect, cushion = 0) {
247
236
  const output = {
248
237
  width: 0,
249
238
  height: 0,
@@ -262,9 +251,9 @@ export class DOM {
262
251
  * @param {string} primaryFallback - The fallback method to use if screen orientation API is not available.
263
252
  * @returns {string} The screen orientation ('portrait-primary', 'landscape-primary', etc.).
264
253
  */
265
- getScreenOrientation(primaryFallback: string | null = null) {
266
- const screen = window.screen;
267
- // @ts-ignore
254
+ public getScreenOrientation(primaryFallback: string | null = null) {
255
+ const { screen } = globalThis;
256
+ // @ts-expect-error
268
257
  const orientation = screen.orientation || screen.mozOrientation || screen.msOrientation;
269
258
  if (orientation && typeof orientation.type === 'string') {
270
259
  // Screen Orientation API specification
@@ -279,13 +268,13 @@ export class DOM {
279
268
  return screen.height > screen.width ? PORTRAIT : LANDSCAPE;
280
269
  } else if (primaryFallback === 'viewport') {
281
270
  return this.visualBounds.height > this.visualBounds.width ? PORTRAIT : LANDSCAPE;
282
- } else if (primaryFallback === 'window.orientation' && typeof window.orientation === 'number') {
271
+ } else if (primaryFallback === 'window.orientation' && typeof globalThis.orientation === 'number') {
283
272
  // This may change by device based on "natural" orientation.
284
- return window.orientation === 0 || window.orientation === 180 ? PORTRAIT : LANDSCAPE;
285
- } else if (window.matchMedia) {
286
- if (window.matchMedia('(orientation: portrait)').matches) {
273
+ return globalThis.orientation === 0 || globalThis.orientation === 180 ? PORTRAIT : LANDSCAPE;
274
+ } else if (globalThis.matchMedia) {
275
+ if (globalThis.matchMedia('(orientation: portrait)').matches) {
287
276
  return PORTRAIT;
288
- } else if (window.matchMedia('(orientation: landscape)').matches) {
277
+ } else if (globalThis.matchMedia('(orientation: landscape)').matches) {
289
278
  return LANDSCAPE;
290
279
  }
291
280
  }
@@ -296,7 +285,7 @@ export class DOM {
296
285
  * Gets the horizontal scroll position of the window.
297
286
  * @returns {number} The horizontal scroll position in pixels.
298
287
  */
299
- get scrollX() {
288
+ public get scrollX() {
300
289
  return this.scrollXProvider();
301
290
  }
302
291
 
@@ -304,7 +293,7 @@ export class DOM {
304
293
  * Gets the vertical scroll position of the window.
305
294
  * @returns {number} The vertical scroll position in pixels.
306
295
  */
307
- get scrollY() {
296
+ public get scrollY() {
308
297
  return this.scrollYProvider();
309
298
  }
310
299
 
@@ -312,7 +301,7 @@ export class DOM {
312
301
  * Gets the width of the window's client area.
313
302
  * @returns {number} The width of the client area in pixels.
314
303
  */
315
- get clientWidth() {
304
+ public get clientWidth() {
316
305
  return Math.max(window.innerWidth, document.documentElement.clientWidth);
317
306
  }
318
307
 
@@ -320,7 +309,7 @@ export class DOM {
320
309
  * Gets the height of the window's client area.
321
310
  * @returns {number} The height of the client area in pixels.
322
311
  */
323
- get clientHeight() {
312
+ public get clientHeight() {
324
313
  return Math.max(window.innerHeight, document.documentElement.clientHeight);
325
314
  }
326
315
  }