@swf2es/player-hosts 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.third-party +759 -0
  3. package/README.md +43 -2
  4. package/dist/indexeddb.d.ts +27 -0
  5. package/dist/indexeddb.d.ts.map +1 -0
  6. package/dist/indexeddb.js +170 -0
  7. package/dist/indexeddb.js.map +1 -0
  8. package/dist/node-worker.d.ts +2 -0
  9. package/dist/node-worker.d.ts.map +1 -0
  10. package/dist/node-worker.js +12 -0
  11. package/dist/node-worker.js.map +1 -0
  12. package/dist/node.d.ts +8 -0
  13. package/dist/node.d.ts.map +1 -0
  14. package/dist/node.js +43 -0
  15. package/dist/node.js.map +1 -0
  16. package/dist/precompiled.d.ts +31 -0
  17. package/dist/precompiled.d.ts.map +1 -0
  18. package/dist/precompiled.js +125 -0
  19. package/dist/precompiled.js.map +1 -0
  20. package/dist/stage3d.d.ts +13 -0
  21. package/dist/stage3d.d.ts.map +1 -0
  22. package/dist/stage3d.js +61 -0
  23. package/dist/stage3d.js.map +1 -0
  24. package/dist/thread/codegen/codegen.js +308 -0
  25. package/dist/thread/codegen/index.js +405 -0
  26. package/dist/thread/format/abc-names.js +126 -0
  27. package/dist/thread/format/actions.js +222 -0
  28. package/dist/thread/format/air-descriptor.js +63 -0
  29. package/dist/thread/format/api-versions.js +22 -0
  30. package/dist/thread/format/bitmap.js +199 -0
  31. package/dist/thread/format/button.js +60 -0
  32. package/dist/thread/format/compression.js +200 -0
  33. package/dist/thread/format/display.js +305 -0
  34. package/dist/thread/format/filters.js +136 -0
  35. package/dist/thread/format/font.js +168 -0
  36. package/dist/thread/format/index.js +26 -0
  37. package/dist/thread/format/pbj.js +484 -0
  38. package/dist/thread/format/shape.js +411 -0
  39. package/dist/thread/format/sound.js +91 -0
  40. package/dist/thread/format/swf.js +163 -0
  41. package/dist/thread/format/tags.js +58 -0
  42. package/dist/thread/format/text.js +135 -0
  43. package/dist/thread/format/zip.js +91 -0
  44. package/dist/thread/native/audio/binary.js +3 -0
  45. package/dist/thread/native/audio/index.js +72 -0
  46. package/dist/thread/native/base64.js +9 -0
  47. package/dist/thread/native/compress/binary.js +3 -0
  48. package/dist/thread/native/compress/index.js +145 -0
  49. package/dist/thread/native/instance.js +49 -0
  50. package/dist/thread/native/mp3/binary.js +3 -0
  51. package/dist/thread/native/mp3/index.js +48 -0
  52. package/dist/thread/native/render/binary.js +3 -0
  53. package/dist/thread/native/render/bitmap-kernel.js +591 -0
  54. package/dist/thread/native/render/draw-kernel.js +204 -0
  55. package/dist/thread/native/render/dxt-encoder.js +94 -0
  56. package/dist/thread/native/render/index.js +10 -0
  57. package/dist/thread/native/render/lines.js +122 -0
  58. package/dist/thread/native/render/module.js +26 -0
  59. package/dist/thread/native/render/pixel-ops.js +235 -0
  60. package/dist/thread/native/render/tessellator.js +250 -0
  61. package/dist/thread/player/avm1/amf.js +507 -0
  62. package/dist/thread/player/avm1/avm1.js +1304 -0
  63. package/dist/thread/player/avm1/bindings.js +214 -0
  64. package/dist/thread/player/avm1/classes.js +75 -0
  65. package/dist/thread/player/avm1/clips.js +229 -0
  66. package/dist/thread/player/avm1/compile.js +140 -0
  67. package/dist/thread/player/avm1/external.js +79 -0
  68. package/dist/thread/player/avm1/focus.js +278 -0
  69. package/dist/thread/player/avm1/globals/BitmapData.js +542 -0
  70. package/dist/thread/player/avm1/globals/Button.js +31 -0
  71. package/dist/thread/player/avm1/globals/Color.js +115 -0
  72. package/dist/thread/player/avm1/globals/ExternalInterface.js +310 -0
  73. package/dist/thread/player/avm1/globals/FileReference.js +217 -0
  74. package/dist/thread/player/avm1/globals/Key.js +60 -0
  75. package/dist/thread/player/avm1/globals/LoadVars.js +208 -0
  76. package/dist/thread/player/avm1/globals/LocalConnection.js +92 -0
  77. package/dist/thread/player/avm1/globals/MovieClip.js +1070 -0
  78. package/dist/thread/player/avm1/globals/MovieClipLoader.js +90 -0
  79. package/dist/thread/player/avm1/globals/NetConnection.js +261 -0
  80. package/dist/thread/player/avm1/globals/PrintJob.js +37 -0
  81. package/dist/thread/player/avm1/globals/Selection.js +62 -0
  82. package/dist/thread/player/avm1/globals/SharedObject.js +245 -0
  83. package/dist/thread/player/avm1/globals/Sound.js +238 -0
  84. package/dist/thread/player/avm1/globals/Stage.js +12 -0
  85. package/dist/thread/player/avm1/globals/StyleSheet.js +205 -0
  86. package/dist/thread/player/avm1/globals/TextField.js +396 -0
  87. package/dist/thread/player/avm1/globals/TextFormat.js +194 -0
  88. package/dist/thread/player/avm1/globals/TextSnapshot.js +88 -0
  89. package/dist/thread/player/avm1/globals/XML.js +396 -0
  90. package/dist/thread/player/avm1/globals/XMLNode.js +413 -0
  91. package/dist/thread/player/avm1/globals/XMLSocket.js +205 -0
  92. package/dist/thread/player/avm1/globals/drawing.js +202 -0
  93. package/dist/thread/player/avm1/globals/filters.js +635 -0
  94. package/dist/thread/player/avm1/globals/geom.js +600 -0
  95. package/dist/thread/player/avm1/input.js +483 -0
  96. package/dist/thread/player/avm1/keyboard.js +113 -0
  97. package/dist/thread/player/avm1/loads.js +352 -0
  98. package/dist/thread/player/avm1/net.js +219 -0
  99. package/dist/thread/player/avm1/paths.js +104 -0
  100. package/dist/thread/player/avm1/pointer.js +512 -0
  101. package/dist/thread/player/avm1/queue.js +303 -0
  102. package/dist/thread/player/avm1/sound.js +106 -0
  103. package/dist/thread/player/avm1/swf.js +141 -0
  104. package/dist/thread/player/avm1/timers.js +113 -0
  105. package/dist/thread/player/bitmap/bitmap.js +627 -0
  106. package/dist/thread/player/bitmap/draw.js +68 -0
  107. package/dist/thread/player/bitmap/dxt.js +11 -0
  108. package/dist/thread/player/bitmap/filters.js +656 -0
  109. package/dist/thread/player/bitmap/images.js +240 -0
  110. package/dist/thread/player/bitmap/kernel.js +65 -0
  111. package/dist/thread/player/bitmap/ops.js +1239 -0
  112. package/dist/thread/player/bitmap/pixel-bender.js +911 -0
  113. package/dist/thread/player/bitmap/png.js +139 -0
  114. package/dist/thread/player/bitmap/turbulence.js +89 -0
  115. package/dist/thread/player/clock.js +182 -0
  116. package/dist/thread/player/display/bitmapobject.js +25 -0
  117. package/dist/thread/player/display/bounds.js +520 -0
  118. package/dist/thread/player/display/buttonobject.js +305 -0
  119. package/dist/thread/player/display/color.js +40 -0
  120. package/dist/thread/player/display/container.js +150 -0
  121. package/dist/thread/player/display/display.js +14 -0
  122. package/dist/thread/player/display/displayobject.js +664 -0
  123. package/dist/thread/player/display/drawing.js +613 -0
  124. package/dist/thread/player/display/filters.js +285 -0
  125. package/dist/thread/player/display/geometry.js +189 -0
  126. package/dist/thread/player/display/gradients.js +117 -0
  127. package/dist/thread/player/display/graphicsdata.js +592 -0
  128. package/dist/thread/player/display/instantiate.js +71 -0
  129. package/dist/thread/player/display/matrix3d.js +373 -0
  130. package/dist/thread/player/display/morph.js +226 -0
  131. package/dist/thread/player/display/movieclip.js +680 -0
  132. package/dist/thread/player/display/perspective.js +193 -0
  133. package/dist/thread/player/display/scale9.js +236 -0
  134. package/dist/thread/player/display/shapeobject.js +131 -0
  135. package/dist/thread/player/display/shapes.js +407 -0
  136. package/dist/thread/player/display/textobjects.js +222 -0
  137. package/dist/thread/player/display/timeline.js +471 -0
  138. package/dist/thread/player/display/value-lists.js +40 -0
  139. package/dist/thread/player/display/videoobject.js +6 -0
  140. package/dist/thread/player/display/walk.js +127 -0
  141. package/dist/thread/player/files.js +334 -0
  142. package/dist/thread/player/hosts.js +207 -0
  143. package/dist/thread/player/input/avm1.js +82 -0
  144. package/dist/thread/player/input/context-menu.js +63 -0
  145. package/dist/thread/player/input/keyboard.js +458 -0
  146. package/dist/thread/player/input/pointer.js +863 -0
  147. package/dist/thread/player/input/text-editor.js +319 -0
  148. package/dist/thread/player/input/touch.js +209 -0
  149. package/dist/thread/player/localconnection.js +90 -0
  150. package/dist/thread/player/media/audio.js +376 -0
  151. package/dist/thread/player/media/dynamic-sound.js +90 -0
  152. package/dist/thread/player/media/extract.js +135 -0
  153. package/dist/thread/player/media/mp3.js +152 -0
  154. package/dist/thread/player/media/sounds.js +507 -0
  155. package/dist/thread/player/media/streaming-audio.js +133 -0
  156. package/dist/thread/player/player.js +616 -0
  157. package/dist/thread/player/playerglobal/air/net/WebSocket.js +250 -0
  158. package/dist/thread/player/playerglobal/air-library.js +8 -0
  159. package/dist/thread/player/playerglobal/flash/accessibility/Accessibility.js +21 -0
  160. package/dist/thread/player/playerglobal/flash/crypto/generateRandomBytes.js +32 -0
  161. package/dist/thread/player/playerglobal/flash/data/EncryptedLocalStore.js +61 -0
  162. package/dist/thread/player/playerglobal/flash/desktop/Clipboard.js +173 -0
  163. package/dist/thread/player/playerglobal/flash/desktop/NativeApplication.js +179 -0
  164. package/dist/thread/player/playerglobal/flash/display/AVM1Movie.js +19 -0
  165. package/dist/thread/player/playerglobal/flash/display/Bitmap.js +58 -0
  166. package/dist/thread/player/playerglobal/flash/display/BitmapData.js +633 -0
  167. package/dist/thread/player/playerglobal/flash/display/DisplayObject.js +614 -0
  168. package/dist/thread/player/playerglobal/flash/display/DisplayObjectContainer.js +224 -0
  169. package/dist/thread/player/playerglobal/flash/display/Graphics.js +345 -0
  170. package/dist/thread/player/playerglobal/flash/display/InteractiveObject.js +87 -0
  171. package/dist/thread/player/playerglobal/flash/display/Loader.js +79 -0
  172. package/dist/thread/player/playerglobal/flash/display/LoaderInfo.js +128 -0
  173. package/dist/thread/player/playerglobal/flash/display/MovieClip.js +194 -0
  174. package/dist/thread/player/playerglobal/flash/display/NativeWindow.js +245 -0
  175. package/dist/thread/player/playerglobal/flash/display/Shader.js +26 -0
  176. package/dist/thread/player/playerglobal/flash/display/ShaderData.js +85 -0
  177. package/dist/thread/player/playerglobal/flash/display/ShaderInput.js +64 -0
  178. package/dist/thread/player/playerglobal/flash/display/ShaderJob.js +181 -0
  179. package/dist/thread/player/playerglobal/flash/display/ShaderParameter.js +23 -0
  180. package/dist/thread/player/playerglobal/flash/display/Shape.js +13 -0
  181. package/dist/thread/player/playerglobal/flash/display/SimpleButton.js +103 -0
  182. package/dist/thread/player/playerglobal/flash/display/Sprite.js +84 -0
  183. package/dist/thread/player/playerglobal/flash/display/Stage.js +231 -0
  184. package/dist/thread/player/playerglobal/flash/display/Stage3D.js +54 -0
  185. package/dist/thread/player/playerglobal/flash/display/shaders.js +228 -0
  186. package/dist/thread/player/playerglobal/flash/events/Event.js +58 -0
  187. package/dist/thread/player/playerglobal/flash/events/EventDispatcher.js +103 -0
  188. package/dist/thread/player/playerglobal/flash/events/GestureEvent.js +34 -0
  189. package/dist/thread/player/playerglobal/flash/events/HTTPStatusEvent.js +8 -0
  190. package/dist/thread/player/playerglobal/flash/events/KeyboardEvent.js +51 -0
  191. package/dist/thread/player/playerglobal/flash/events/MouseEvent.js +59 -0
  192. package/dist/thread/player/playerglobal/flash/events/PressAndTapGestureEvent.js +30 -0
  193. package/dist/thread/player/playerglobal/flash/events/TimerEvent.js +16 -0
  194. package/dist/thread/player/playerglobal/flash/events/TouchEvent.js +45 -0
  195. package/dist/thread/player/playerglobal/flash/external/ExternalInterface.js +73 -0
  196. package/dist/thread/player/playerglobal/flash/filesystem/File.js +340 -0
  197. package/dist/thread/player/playerglobal/flash/filesystem/FileStream.js +453 -0
  198. package/dist/thread/player/playerglobal/flash/filesystem/paths.js +156 -0
  199. package/dist/thread/player/playerglobal/flash/filesystem/writes.js +143 -0
  200. package/dist/thread/player/playerglobal/flash/filters/BevelFilter.js +4 -0
  201. package/dist/thread/player/playerglobal/flash/filters/BitmapFilter.js +205 -0
  202. package/dist/thread/player/playerglobal/flash/filters/BlurFilter.js +4 -0
  203. package/dist/thread/player/playerglobal/flash/filters/ColorMatrixFilter.js +11 -0
  204. package/dist/thread/player/playerglobal/flash/filters/ConvolutionFilter.js +26 -0
  205. package/dist/thread/player/playerglobal/flash/filters/DisplacementMapFilter.js +51 -0
  206. package/dist/thread/player/playerglobal/flash/filters/DropShadowFilter.js +4 -0
  207. package/dist/thread/player/playerglobal/flash/filters/GlowFilter.js +4 -0
  208. package/dist/thread/player/playerglobal/flash/filters/GradientBevelFilter.js +4 -0
  209. package/dist/thread/player/playerglobal/flash/filters/GradientGlowFilter.js +4 -0
  210. package/dist/thread/player/playerglobal/flash/filters/ShaderFilter.js +53 -0
  211. package/dist/thread/player/playerglobal/flash/geom/Matrix3D.js +361 -0
  212. package/dist/thread/player/playerglobal/flash/geom/PerspectiveProjection.js +122 -0
  213. package/dist/thread/player/playerglobal/flash/geom/Transform.js +245 -0
  214. package/dist/thread/player/playerglobal/flash/geom/Utils3D.js +85 -0
  215. package/dist/thread/player/playerglobal/flash/globalization/Collator.js +149 -0
  216. package/dist/thread/player/playerglobal/flash/globalization/CurrencyFormatter.js +272 -0
  217. package/dist/thread/player/playerglobal/flash/globalization/CurrencyParseResult.js +21 -0
  218. package/dist/thread/player/playerglobal/flash/globalization/DateTimeFormatter.js +463 -0
  219. package/dist/thread/player/playerglobal/flash/globalization/LocaleID.js +144 -0
  220. package/dist/thread/player/playerglobal/flash/globalization/NumberFormatter.js +444 -0
  221. package/dist/thread/player/playerglobal/flash/globalization/NumberParseResult.js +22 -0
  222. package/dist/thread/player/playerglobal/flash/globalization/StringTools.js +59 -0
  223. package/dist/thread/player/playerglobal/flash/globalization/locale.js +190 -0
  224. package/dist/thread/player/playerglobal/flash/media/Camera.js +89 -0
  225. package/dist/thread/player/playerglobal/flash/media/Microphone.js +126 -0
  226. package/dist/thread/player/playerglobal/flash/media/Sound.js +543 -0
  227. package/dist/thread/player/playerglobal/flash/media/SoundMixer.js +74 -0
  228. package/dist/thread/player/playerglobal/flash/media/SoundTransform.js +40 -0
  229. package/dist/thread/player/playerglobal/flash/media/Video.js +43 -0
  230. package/dist/thread/player/playerglobal/flash/net/FileFilter.js +27 -0
  231. package/dist/thread/player/playerglobal/flash/net/FileReference.js +197 -0
  232. package/dist/thread/player/playerglobal/flash/net/LocalConnection.js +167 -0
  233. package/dist/thread/player/playerglobal/flash/net/NetConnection.js +155 -0
  234. package/dist/thread/player/playerglobal/flash/net/SharedObject.js +299 -0
  235. package/dist/thread/player/playerglobal/flash/net/Socket.js +282 -0
  236. package/dist/thread/player/playerglobal/flash/net/URLRequest.js +93 -0
  237. package/dist/thread/player/playerglobal/flash/net/URLStream.js +146 -0
  238. package/dist/thread/player/playerglobal/flash/net/XMLSocket.js +14 -0
  239. package/dist/thread/player/playerglobal/flash/net/local-modern.js +142 -0
  240. package/dist/thread/player/playerglobal/flash/net/local-values.js +217 -0
  241. package/dist/thread/player/playerglobal/flash/net/navigateToURL.js +29 -0
  242. package/dist/thread/player/playerglobal/flash/profiler/Telemetry.js +25 -0
  243. package/dist/thread/player/playerglobal/flash/sensors/Accelerometer.js +12 -0
  244. package/dist/thread/player/playerglobal/flash/system/ApplicationDomain.js +69 -0
  245. package/dist/thread/player/playerglobal/flash/system/Capabilities.js +163 -0
  246. package/dist/thread/player/playerglobal/flash/system/FSCommandHost.js +17 -0
  247. package/dist/thread/player/playerglobal/flash/system/Security.js +46 -0
  248. package/dist/thread/player/playerglobal/flash/system/SecurityDomain.js +21 -0
  249. package/dist/thread/player/playerglobal/flash/system/System.js +73 -0
  250. package/dist/thread/player/playerglobal/flash/system/Worker.js +112 -0
  251. package/dist/thread/player/playerglobal/flash/text/Font.js +95 -0
  252. package/dist/thread/player/playerglobal/flash/text/StaticText.js +16 -0
  253. package/dist/thread/player/playerglobal/flash/text/StyleSheet.js +65 -0
  254. package/dist/thread/player/playerglobal/flash/text/TextField.js +707 -0
  255. package/dist/thread/player/playerglobal/flash/text/TextRenderer.js +77 -0
  256. package/dist/thread/player/playerglobal/flash/text/engine/FontDescription.js +141 -0
  257. package/dist/thread/player/playerglobal/flash/text/engine/TabStop.js +46 -0
  258. package/dist/thread/player/playerglobal/flash/trace/Trace.js +17 -0
  259. package/dist/thread/player/playerglobal/flash/ui/ContextMenu.js +17 -0
  260. package/dist/thread/player/playerglobal/flash/ui/GameInput.js +19 -0
  261. package/dist/thread/player/playerglobal/flash/ui/Keyboard.js +27 -0
  262. package/dist/thread/player/playerglobal/flash/ui/Mouse.js +127 -0
  263. package/dist/thread/player/playerglobal/flash/ui/Multitouch.js +46 -0
  264. package/dist/thread/player/playerglobal/flash/utils/ByteArray.js +155 -0
  265. package/dist/thread/player/playerglobal/flash/utils/Timer.js +25 -0
  266. package/dist/thread/player/playerglobal/flash/xml/XMLDocument.js +74 -0
  267. package/dist/thread/player/playerglobal/index.js +224 -0
  268. package/dist/thread/player/playerglobal/libraries.js +10 -0
  269. package/dist/thread/player/playerglobal/playerglobal-library.js +22 -0
  270. package/dist/thread/player/playerglobal/toplevel.js +122 -0
  271. package/dist/thread/player/scripting/clipboard.js +146 -0
  272. package/dist/thread/player/scripting/code.js +900 -0
  273. package/dist/thread/player/scripting/evaluate.js +144 -0
  274. package/dist/thread/player/scripting/events.js +172 -0
  275. package/dist/thread/player/scripting/handover.js +182 -0
  276. package/dist/thread/player/scripting/lazy.js +38 -0
  277. package/dist/thread/player/scripting/lifecycle.js +272 -0
  278. package/dist/thread/player/scripting/loads.js +860 -0
  279. package/dist/thread/player/scripting/sha256.js +95 -0
  280. package/dist/thread/player/scripting/symbols.js +348 -0
  281. package/dist/thread/player/scripting/timers.js +434 -0
  282. package/dist/thread/player/scripting/workers.js +923 -0
  283. package/dist/thread/player/scripting.js +1018 -0
  284. package/dist/thread/player/stage.js +4 -0
  285. package/dist/thread/player/text/csm.js +113 -0
  286. package/dist/thread/player/text/css.js +167 -0
  287. package/dist/thread/player/text/fonts.js +97 -0
  288. package/dist/thread/player/text/layout.js +393 -0
  289. package/dist/thread/player/text/static.js +109 -0
  290. package/dist/thread/player/text/text.js +431 -0
  291. package/dist/thread/player/workers/thread.js +159 -0
  292. package/dist/thread/player/workers/wire.js +198 -0
  293. package/dist/thread/player-hosts/web-worker.js +19 -0
  294. package/dist/thread/runtime/avm1/activation.js +89 -0
  295. package/dist/thread/runtime/avm1/case.js +249 -0
  296. package/dist/thread/runtime/avm1/clips.js +334 -0
  297. package/dist/thread/runtime/avm1/control.js +280 -0
  298. package/dist/thread/runtime/avm1/errors.js +50 -0
  299. package/dist/thread/runtime/avm1/functions.js +249 -0
  300. package/dist/thread/runtime/avm1/globals/array.js +549 -0
  301. package/dist/thread/runtime/avm1/globals/broadcaster.js +131 -0
  302. package/dist/thread/runtime/avm1/globals/date.js +436 -0
  303. package/dist/thread/runtime/avm1/globals/global.js +344 -0
  304. package/dist/thread/runtime/avm1/globals/math.js +139 -0
  305. package/dist/thread/runtime/avm1/globals/number.js +93 -0
  306. package/dist/thread/runtime/avm1/globals/string.js +201 -0
  307. package/dist/thread/runtime/avm1/globals/timers.js +129 -0
  308. package/dist/thread/runtime/avm1/host.js +5 -0
  309. package/dist/thread/runtime/avm1/index.js +14 -0
  310. package/dist/thread/runtime/avm1/inheritance.js +132 -0
  311. package/dist/thread/runtime/avm1/numbers.js +298 -0
  312. package/dist/thread/runtime/avm1/objects.js +896 -0
  313. package/dist/thread/runtime/avm1/operators.js +170 -0
  314. package/dist/thread/runtime/avm1/realm.js +529 -0
  315. package/dist/thread/runtime/avm1/runtime.js +882 -0
  316. package/dist/thread/runtime/avm1/scope.js +385 -0
  317. package/dist/thread/runtime/avm1/urls.js +180 -0
  318. package/dist/thread/runtime/avm1/values.js +97 -0
  319. package/dist/thread/runtime/avm2/amf-classes.js +66 -0
  320. package/dist/thread/runtime/avm2/amf.js +801 -0
  321. package/dist/thread/runtime/avm2/array-conversion.js +100 -0
  322. package/dist/thread/runtime/avm2/builtin-library.js +21 -0
  323. package/dist/thread/runtime/avm2/cache-fill.js +86 -0
  324. package/dist/thread/runtime/avm2/classes.js +211 -0
  325. package/dist/thread/runtime/avm2/definitions.js +69 -0
  326. package/dist/thread/runtime/avm2/descriptors.js +5 -0
  327. package/dist/thread/runtime/avm2/dictionary-keys.js +295 -0
  328. package/dist/thread/runtime/avm2/domain-memory.js +75 -0
  329. package/dist/thread/runtime/avm2/domain.js +280 -0
  330. package/dist/thread/runtime/avm2/dynamic-properties.js +182 -0
  331. package/dist/thread/runtime/avm2/enumeration.js +393 -0
  332. package/dist/thread/runtime/avm2/errors.js +45 -0
  333. package/dist/thread/runtime/avm2/float-library.js +66 -0
  334. package/dist/thread/runtime/avm2/float.js +26 -0
  335. package/dist/thread/runtime/avm2/hooks.js +19 -0
  336. package/dist/thread/runtime/avm2/index.js +38 -0
  337. package/dist/thread/runtime/avm2/messages.js +177 -0
  338. package/dist/thread/runtime/avm2/method-factories.js +95 -0
  339. package/dist/thread/runtime/avm2/modules.js +105 -0
  340. package/dist/thread/runtime/avm2/names.js +248 -0
  341. package/dist/thread/runtime/avm2/natives/aliases.js +47 -0
  342. package/dist/thread/runtime/avm2/natives/array.js +390 -0
  343. package/dist/thread/runtime/avm2/natives/bytearray.js +1227 -0
  344. package/dist/thread/runtime/avm2/natives/case.js +88 -0
  345. package/dist/thread/runtime/avm2/natives/concurrent.js +199 -0
  346. package/dist/thread/runtime/avm2/natives/date.js +581 -0
  347. package/dist/thread/runtime/avm2/natives/define.js +130 -0
  348. package/dist/thread/runtime/avm2/natives/describe.js +351 -0
  349. package/dist/thread/runtime/avm2/natives/dictionary.js +12 -0
  350. package/dist/thread/runtime/avm2/natives/float-vector.js +81 -0
  351. package/dist/thread/runtime/avm2/natives/float.js +96 -0
  352. package/dist/thread/runtime/avm2/natives/index.js +64 -0
  353. package/dist/thread/runtime/avm2/natives/json.js +514 -0
  354. package/dist/thread/runtime/avm2/natives/number.js +162 -0
  355. package/dist/thread/runtime/avm2/natives/object.js +237 -0
  356. package/dist/thread/runtime/avm2/natives/proxy.js +75 -0
  357. package/dist/thread/runtime/avm2/natives/regexp.js +485 -0
  358. package/dist/thread/runtime/avm2/natives/shell-workers.js +404 -0
  359. package/dist/thread/runtime/avm2/natives/shell.js +557 -0
  360. package/dist/thread/runtime/avm2/natives/sort.js +377 -0
  361. package/dist/thread/runtime/avm2/natives/string.js +132 -0
  362. package/dist/thread/runtime/avm2/natives/sync.js +821 -0
  363. package/dist/thread/runtime/avm2/natives/toplevel.js +139 -0
  364. package/dist/thread/runtime/avm2/natives/vector-elements.js +46 -0
  365. package/dist/thread/runtime/avm2/natives/vector.js +406 -0
  366. package/dist/thread/runtime/avm2/natives/xml/access.js +633 -0
  367. package/dist/thread/runtime/avm2/natives/xml/build.js +291 -0
  368. package/dist/thread/runtime/avm2/natives/xml/chars.js +112 -0
  369. package/dist/thread/runtime/avm2/natives/xml/escape.js +38 -0
  370. package/dist/thread/runtime/avm2/natives/xml/names.js +204 -0
  371. package/dist/thread/runtime/avm2/natives/xml/node.js +272 -0
  372. package/dist/thread/runtime/avm2/natives/xml/operators.js +69 -0
  373. package/dist/thread/runtime/avm2/natives/xml/parser.js +356 -0
  374. package/dist/thread/runtime/avm2/natives/xml/strings.js +191 -0
  375. package/dist/thread/runtime/avm2/natives/xml/values.js +122 -0
  376. package/dist/thread/runtime/avm2/natives/xml/xml.js +645 -0
  377. package/dist/thread/runtime/avm2/number-strings.js +110 -0
  378. package/dist/thread/runtime/avm2/numbers.js +558 -0
  379. package/dist/thread/runtime/avm2/options.js +16 -0
  380. package/dist/thread/runtime/avm2/player-messages.js +550 -0
  381. package/dist/thread/runtime/avm2/property-cache.js +135 -0
  382. package/dist/thread/runtime/avm2/runtime.js +2644 -0
  383. package/dist/thread/runtime/avm2/traits.js +509 -0
  384. package/dist/thread/runtime/index.js +7 -0
  385. package/dist/web-worker.d.ts +2 -0
  386. package/dist/web-worker.d.ts.map +1 -0
  387. package/dist/web-worker.js +20 -0
  388. package/dist/web-worker.js.map +1 -0
  389. package/dist/websocket.d.ts +4 -0
  390. package/dist/websocket.d.ts.map +1 -0
  391. package/dist/websocket.js +27 -0
  392. package/dist/websocket.js.map +1 -0
  393. package/dist/workers.d.ts +35 -0
  394. package/dist/workers.d.ts.map +1 -0
  395. package/dist/workers.js +171 -0
  396. package/dist/workers.js.map +1 -0
  397. package/package.json +62 -3
  398. package/src/indexeddb.ts +227 -0
  399. package/src/node-worker.ts +13 -0
  400. package/src/node.ts +49 -0
  401. package/src/precompiled.ts +166 -0
  402. package/src/stage3d.ts +76 -0
  403. package/src/web-worker.ts +24 -0
  404. package/src/websocket.ts +32 -0
  405. package/src/workers.ts +255 -0
@@ -0,0 +1,458 @@
1
+ // Keyboard input as Flash takes it, after Ruffle's (focus_tracker.rs,
2
+ // edit_text.rs): a key goes to the focused object, or the stage where
3
+ // nothing has focus, as a KeyboardEvent that bubbles; a focused input
4
+ // TextField then edits its text, a TextEvent first, which a listener may
5
+ // cancel, then Event.CHANGE. Focus moves with a click, with Tab, and with
6
+ // stage.focus, each move a focusOut and a focusIn; a click's and a Tab's
7
+ // first a cancelable mouseFocusChange or keyFocusChange.
8
+ import { bounds, toStage } from "../display/bounds.js";
9
+ import { ButtonObject, CONTENT, Container, MovieClip, TextObject, } from "../display/display.js";
10
+ import { apply } from "../display/geometry.js";
11
+ import { TEXT } from "../scripting/clipboard.js";
12
+ import { dispatchEvent } from "../scripting/events.js";
13
+ import { caretAt, pasteable, selectionAt, TextEditor } from "./text-editor.js";
14
+ const TAB = 9;
15
+ const fieldsOf = (d) => (d.object ?? {});
16
+ /**
17
+ * Whether Tab may focus `d` where no script said: an input field, a
18
+ * button, and a sprite in button mode, as Flash has it.
19
+ */
20
+ export function tabEnabledDefault(d) {
21
+ if (d instanceof TextObject) {
22
+ return d.type === "input";
23
+ }
24
+ return d instanceof ButtonObject || !!fieldsOf(d).$buttonMode;
25
+ }
26
+ const tabEnabled = (d) => fieldsOf(d).$tabEnabled ?? tabEnabledDefault(d);
27
+ /** Whether `d` is an InteractiveObject's face: a container, a button or a field. */
28
+ const isInteractive = (d) => d instanceof ButtonObject || d instanceof TextObject || "children" in d;
29
+ /** Whether Tab visits `d`: a field only where it takes typing, a root clip never. */
30
+ function tabbable(d, stage) {
31
+ if (!d.object || !isInteractive(d)) {
32
+ return false;
33
+ }
34
+ if (d instanceof TextObject) {
35
+ return d.type === "input" && tabEnabled(d);
36
+ }
37
+ return !(d instanceof MovieClip && d.parent === stage) && tabEnabled(d);
38
+ }
39
+ /** Whether a click focuses `d`: any text field, any object Tab may focus. */
40
+ const focusableByMouse = (d) => d instanceof TextObject || tabEnabled(d);
41
+ /**
42
+ * Move focus to `next`: focusOut on the one that had it, then focusIn on
43
+ * it, each naming the other, unless a focusOut listener moved it on; a
44
+ * field gains or loses its caret, and the object a hook to give it up by
45
+ * when it is taken off the list or hidden.
46
+ */
47
+ export function setFocus(s, next) {
48
+ const previous = s.focus;
49
+ if (previous === next) {
50
+ return;
51
+ }
52
+ s.focus = next;
53
+ if (previous) {
54
+ previous.focusDrop = null;
55
+ }
56
+ if (next) {
57
+ next.focusDrop = (d) => {
58
+ if (s.focus === d) {
59
+ setFocus(s, null);
60
+ }
61
+ };
62
+ }
63
+ for (const d of [previous, next]) {
64
+ if (d instanceof TextObject) {
65
+ d.focused = d === next;
66
+ d.invalidate(CONTENT);
67
+ }
68
+ }
69
+ if (previous) {
70
+ focusEvent(s, "focusOut", previous, next, false);
71
+ }
72
+ if (next && s.focus === next) {
73
+ focusEvent(s, "focusIn", next, previous, false);
74
+ }
75
+ }
76
+ /** A FocusEvent on `target`, naming `related`: whether a listener cancelled it. */
77
+ function focusEvent(s, type, target, related, cancelable, keyCode = 0) {
78
+ if (!target.object) {
79
+ return false;
80
+ }
81
+ const event = s.rt.construct(s.rt.classNamed("flash.events::FocusEvent"), type, true, cancelable, related?.object ?? null, false, keyCode);
82
+ return !dispatchEvent(s, target.object, event);
83
+ }
84
+ export { restrictText } from "./text-editor.js";
85
+ /** The keyboard on the player's display list, independent of a renderer. */
86
+ export class KeyboardInput {
87
+ stage;
88
+ scripting;
89
+ /** How many key events it has handled: each may run scripts and change a field. */
90
+ handled = 0;
91
+ /** The field the pointer was pressed on, where, and by which click, whose selection a drag extends. */
92
+ press = null;
93
+ editor = new TextEditor((field) => {
94
+ if (field.object) {
95
+ dispatchEvent(this.scripting, field.object, this.scripting.rt.construct(this.scripting.rt.classNamed("flash.events::Event"), "change", true, false));
96
+ }
97
+ }, (field, text) => !field.object ||
98
+ dispatchEvent(this.scripting, field.object, this.scripting.rt.construct(this.scripting.rt.classNamed("flash.events::TextEvent"), "textInput", true, true, text.replace(/\r/g, "\n"))));
99
+ constructor(stage, scripting) {
100
+ this.stage = stage;
101
+ this.scripting = scripting;
102
+ }
103
+ /**
104
+ * A key pressed or let go: whether the SWF used it, a field's edit or
105
+ * caret, or Tab moving focus, which a host then keeps from the browser.
106
+ * Without `edits`, it sends the key's events and moves focus, and edits
107
+ * nothing, for a host whose text comes apart from its keys (`text`).
108
+ */
109
+ handle(type, k, edits = true) {
110
+ this.handled++;
111
+ // A key is a user's gesture, in whose handlers a script may write to the clipboard.
112
+ return this.scripting.clipboard.gesture(() => this.key(type, k, edits));
113
+ }
114
+ /**
115
+ * Text typed, or a field's editing key (Backspace, an arrow, Ctrl+A),
116
+ * with no key events: the field with focus edits by it as by its key.
117
+ * Whether a field used it.
118
+ */
119
+ text(k) {
120
+ this.handled++;
121
+ // A user's gesture, as a key is: a listener may write to the clipboard.
122
+ return this.scripting.clipboard.gesture(() => {
123
+ const focus = this.focused();
124
+ if (k.ctrlKey && !k.altKey && k.keyCode === 65) {
125
+ return this.selectAll(focus);
126
+ }
127
+ return focus instanceof TextObject && (focus.type === "input" || focus.selectable)
128
+ ? this.editor.edit(focus, k)
129
+ : false;
130
+ });
131
+ }
132
+ key(type, k, edits) {
133
+ const s = this.scripting;
134
+ const focus = this.focused();
135
+ const target = focus ?? this.stage;
136
+ if (target.object) {
137
+ const event = s.rt.construct(s.rt.classNamed("flash.events::KeyboardEvent"), type === "down" ? "keyDown" : "keyUp", true, false, k.charCode, k.keyCode, k.location ?? 0, !!k.ctrlKey, !!k.altKey, !!k.shiftKey);
138
+ dispatchEvent(s, target.object, event);
139
+ }
140
+ if (type !== "down") {
141
+ return false;
142
+ }
143
+ if (k.keyCode === TAB) {
144
+ return this.tab(!!k.shiftKey);
145
+ }
146
+ if (!edits) {
147
+ return false;
148
+ }
149
+ // Ctrl with Alt is AltGr on some layouts, which types characters.
150
+ if (k.ctrlKey && !k.altKey && (k.keyCode === 65 || k.charCode === 97 || k.charCode === 65)) {
151
+ return this.selectAll(focus);
152
+ }
153
+ if (focus instanceof TextObject && (focus.type === "input" || focus.selectable)) {
154
+ return this.editor.edit(focus, k);
155
+ }
156
+ return false;
157
+ }
158
+ /** What has focus, while it is on the stage. */
159
+ focused() {
160
+ const focus = this.scripting.focus;
161
+ return focus && onStage(focus, this.stage) ? focus : null;
162
+ }
163
+ /**
164
+ * Ctrl+A: a text field selects all its text, if selectable; any other
165
+ * object with focus hears Event.SELECT_ALL, as Flash 10 tells an
166
+ * InteractiveObject, though never a TextField. Whether the player used it.
167
+ */
168
+ selectAll(focus) {
169
+ if (focus instanceof TextObject) {
170
+ if (focus.selectable) {
171
+ focus.select(0, focus.model.text.length);
172
+ }
173
+ return true;
174
+ }
175
+ return this.dispatchClipboard(focus, "selectAll");
176
+ }
177
+ /**
178
+ * A copy, Ctrl+C, or a cut, Ctrl+X, as the host's copy or cut event has
179
+ * it: the text field with focus copies its selection, but not a
180
+ * password's, and an input field's cut deletes it after, with
181
+ * Event.CHANGE, as Ruffle's does; any other object with focus hears
182
+ * Event.COPY or Event.CUT, in which a script may write the clipboard.
183
+ * What goes to the system's clipboard, or null for nothing.
184
+ */
185
+ copy(cut = false) {
186
+ this.handled++;
187
+ const s = this.scripting;
188
+ const focus = this.focused();
189
+ if (!(focus instanceof TextObject)) {
190
+ return s.clipboard.collect(() => this.dispatchClipboard(focus, cut ? "cut" : "copy"));
191
+ }
192
+ const [from, to] = focus.selection;
193
+ if (focus.displayAsPassword || from === to || (cut && focus.type !== "input")) {
194
+ return null;
195
+ }
196
+ // Flash's line breaks are "\r", a browser's "\n".
197
+ const text = focus.model.text.slice(from, to).replace(/\r\n?/g, "\n");
198
+ return s.clipboard.collect(() => {
199
+ s.clipboard.clear();
200
+ s.clipboard.set(TEXT, text);
201
+ if (cut) {
202
+ this.editor.replace(focus, from, to, "");
203
+ }
204
+ });
205
+ }
206
+ /**
207
+ * A paste, Ctrl+V, of `data` from the system's clipboard, or of what the
208
+ * SWF last put there where the host gives none: an input field with
209
+ * focus takes the text as if typed, a TextEvent first, but its line
210
+ * breaks only if multiline, and nothing where the clipboard is empty, as
211
+ * Ruffle's does; any other object with focus hears Event.PASTE, which
212
+ * bubbles, and in which alone a script may read the clipboard. Whether
213
+ * the player used it.
214
+ */
215
+ paste(data = null) {
216
+ this.handled++;
217
+ const s = this.scripting;
218
+ const focus = this.focused();
219
+ if (!(focus instanceof TextObject)) {
220
+ return s.clipboard.paste(data, () => this.dispatchClipboard(focus, "paste"));
221
+ }
222
+ if (focus.type !== "input") {
223
+ return false;
224
+ }
225
+ return s.clipboard.paste(data, () => {
226
+ const text = pasteable(focus.multiline, s.clipboard.data.text);
227
+ if (text !== "") {
228
+ this.editor.type(focus, text);
229
+ }
230
+ return true;
231
+ });
232
+ }
233
+ /** Event.COPY, CUT, PASTE or SELECT_ALL to what has focus, if a script made it: whether one heard it. */
234
+ dispatchClipboard(focus, type) {
235
+ if (!focus?.object || !isInteractive(focus)) {
236
+ return false;
237
+ }
238
+ const s = this.scripting;
239
+ // Flash Player's paste bubbles; AIR's, and the others, do not.
240
+ const event = s.rt.construct(s.rt.classNamed("flash.events::Event"), type, type === "paste", false);
241
+ dispatchEvent(s, focus.object, event);
242
+ return true;
243
+ }
244
+ /**
245
+ * A press on `target`, with the point in its own pixels: as Flash, a
246
+ * cancelable mouseFocusChange on what has focus, or the stage, then
247
+ * focus to the target where a click focuses it, else to nothing; a
248
+ * field's caret where it was clicked.
249
+ */
250
+ pressed(target, localX, localY, clicks = 1) {
251
+ const s = this.scripting;
252
+ const pressed = target === this.stage ? null : target;
253
+ this.press = null;
254
+ if (pressed instanceof TextObject && pressed.selectable) {
255
+ const position = caretAt(pressed, localX * 20, localY * 20);
256
+ this.press = { field: pressed, position, clicks };
257
+ const [from, to] = selectionAt(pressed, position, clicks);
258
+ pressed.select(from, to);
259
+ }
260
+ if (pressed === null && !(s.focus && focusableByMouse(s.focus))) {
261
+ return;
262
+ }
263
+ if (pressed === s.focus) {
264
+ return;
265
+ }
266
+ if (focusEvent(s, "mouseFocusChange", s.focus ?? this.stage, pressed, true)) {
267
+ return;
268
+ }
269
+ setFocus(s, pressed && focusableByMouse(pressed) ? pressed : null);
270
+ }
271
+ /**
272
+ * The pointer moved with its button held, the point in the pressed
273
+ * field's own pixels: the selection spans from where the press was to
274
+ * here, by characters, or by words or lines after a double or triple click.
275
+ */
276
+ dragged(field, localX, localY) {
277
+ const press = this.press;
278
+ if (!press || press.field !== field || !field.selectable) {
279
+ return;
280
+ }
281
+ const [startFrom, startTo] = selectionAt(field, press.position, press.clicks);
282
+ const [from, to] = selectionAt(field, caretAt(field, localX * 20, localY * 20), press.clicks);
283
+ if (from < startFrom) {
284
+ field.select(startTo, from);
285
+ }
286
+ else {
287
+ field.select(startFrom, Math.max(to, startTo));
288
+ }
289
+ }
290
+ /**
291
+ * Tab: the next object Tab visits, or with Shift the one before, after a
292
+ * cancelable keyFocusChange: by tabIndex where any has one, only those
293
+ * then, else by where their bounds start on the stage, 6y + x in twips,
294
+ * one of each place, as Flash orders them.
295
+ */
296
+ tab(back) {
297
+ const found = [];
298
+ const walk = (d) => {
299
+ for (const child of d.children ?? []) {
300
+ if (!child.visible) {
301
+ continue;
302
+ }
303
+ if (tabbable(child, this.stage)) {
304
+ found.push(child);
305
+ }
306
+ // A SimpleButton's states are not its children to AS3.
307
+ if (child instanceof Container &&
308
+ !(child instanceof ButtonObject) &&
309
+ fieldsOf(child).$tabChildren !== false) {
310
+ walk(child);
311
+ }
312
+ }
313
+ };
314
+ walk(this.stage);
315
+ const indexed = found.filter((d) => (fieldsOf(d).$tabIndex ?? -1) >= 0);
316
+ let order;
317
+ if (indexed.length > 0) {
318
+ order = indexed
319
+ .map((d, i) => ({ d, i, key: fieldsOf(d).$tabIndex ?? 0 }))
320
+ .sort((a, b) => a.key - b.key || a.i - b.i)
321
+ .map((e) => e.d);
322
+ }
323
+ else {
324
+ const keyed = found.map((d, i) => ({ d, i, key: placeKey(d, this.stage) }));
325
+ keyed.sort((a, b) => a.key - b.key || a.i - b.i);
326
+ order = keyed.filter((e, j) => j === 0 || e.key !== keyed[j - 1].key).map((e) => e.d);
327
+ }
328
+ if (order.length === 0) {
329
+ return false;
330
+ }
331
+ const s = this.scripting;
332
+ const at = s.focus ? order.indexOf(s.focus) : -1;
333
+ const n = order.length;
334
+ const next = order[at < 0 ? (back ? n - 1 : 0) : (at + (back ? -1 : 1) + n) % n];
335
+ if (!focusEvent(s, "keyFocusChange", s.focus ?? this.stage, next, true, TAB)) {
336
+ setFocus(s, next);
337
+ }
338
+ return true;
339
+ }
340
+ }
341
+ /** Where `d`'s bounds start on the stage, as Flash orders Tab: 6y + x, in twips. */
342
+ function placeKey(d, stage) {
343
+ const r = bounds(d, true);
344
+ const [x, y] = r ? apply(toStage(d, stage), r.xMin, r.yMin) : [0, 0];
345
+ return Math.round(y * 20) * 6 + Math.round(x * 20);
346
+ }
347
+ /** Whether `d` is on the display list under `stage`. */
348
+ function onStage(d, stage) {
349
+ for (let p = d; p; p = p.parent) {
350
+ if (p === stage) {
351
+ return true;
352
+ }
353
+ }
354
+ return false;
355
+ }
356
+ /** Flash's key codes where a browser's legacy ones differ: Firefox's for ";", "=" and "-". */
357
+ const KEY_CODES = { 59: 186, 61: 187, 173: 189 };
358
+ const SCROLL_KEYS = new Set([
359
+ "ArrowLeft",
360
+ "ArrowRight",
361
+ "ArrowUp",
362
+ "ArrowDown",
363
+ " ",
364
+ "PageUp",
365
+ "PageDown",
366
+ "Home",
367
+ "End",
368
+ ]);
369
+ /** The character a browser's key types, as Flash's charCode: its UTF-16 unit, or Enter's, Backspace's, Tab's, Escape's and Delete's. */
370
+ function charCodeOf(e) {
371
+ if (e.key.length === 1) {
372
+ return e.key.charCodeAt(0);
373
+ }
374
+ return { Enter: 13, Backspace: 8, Tab: 9, Escape: 27, Delete: 127 }[e.key] ?? 0;
375
+ }
376
+ /** Whether a browser event is the page's own: typed into its input or button, or editable content. */
377
+ function pagesOwn(e) {
378
+ const into = e.target;
379
+ return (!!into?.isContentEditable || /^(INPUT|TEXTAREA|SELECT|BUTTON|A)$/.test(into?.tagName ?? ""));
380
+ }
381
+ /**
382
+ * Send the browser's keys on `target` (the window, say) to the player. A
383
+ * key goes to the SWF unless it is typed into the page's own input or
384
+ * button, or comes from an IME, which the player cannot compose; the
385
+ * browser is kept from acting on a field's edit or caret, Tab moving the
386
+ * SWF's focus, or a scrolling key meant for the SWF. Its shortcuts stay.
387
+ * The copy, cut and paste events the browser sends for Ctrl+C, X and V,
388
+ * or its menu's, go to the player too, which reads and writes the
389
+ * clipboard through them, synchronously and without asking for leave.
390
+ */
391
+ export function bindKeyboard(player, target) {
392
+ const listener = (event) => {
393
+ const e = event;
394
+ if (pagesOwn(e) || e.isComposing || e.keyCode === 229) {
395
+ return;
396
+ }
397
+ const keyboard = player.keyboard;
398
+ if (!keyboard) {
399
+ return;
400
+ }
401
+ // A key's listeners see the pointer and the touches where they last moved.
402
+ player.pointer?.flush();
403
+ player.touch?.flush();
404
+ const used = keyboard.handle(e.type === "keydown" ? "down" : "up", {
405
+ keyCode: KEY_CODES[e.keyCode] ?? e.keyCode,
406
+ charCode: charCodeOf(e),
407
+ location: e.location,
408
+ ctrlKey: e.ctrlKey || e.metaKey,
409
+ altKey: e.altKey,
410
+ shiftKey: e.shiftKey,
411
+ });
412
+ if (used || (!e.ctrlKey && !e.metaKey && !e.altKey && SCROLL_KEYS.has(e.key))) {
413
+ e.preventDefault();
414
+ }
415
+ };
416
+ const clipboard = (event) => {
417
+ const e = event;
418
+ const keyboard = player.keyboard;
419
+ if (pagesOwn(e) || !keyboard) {
420
+ return;
421
+ }
422
+ const transfer = e.clipboardData;
423
+ if (e.type === "paste") {
424
+ const html = transfer?.getData("text/html");
425
+ const data = transfer
426
+ ? { text: transfer.getData("text/plain"), ...(html ? { html } : {}) }
427
+ : null;
428
+ if (keyboard.paste(data)) {
429
+ e.preventDefault();
430
+ }
431
+ return;
432
+ }
433
+ const data = keyboard.copy(e.type === "cut");
434
+ if (data && transfer) {
435
+ transfer.setData("text/plain", data.text);
436
+ if (data.html !== undefined) {
437
+ transfer.setData("text/html", data.html);
438
+ }
439
+ e.preventDefault();
440
+ }
441
+ };
442
+ const types = ["keydown", "keyup"];
443
+ const clipboardTypes = ["copy", "cut", "paste"];
444
+ for (const type of types) {
445
+ target.addEventListener(type, listener);
446
+ }
447
+ for (const type of clipboardTypes) {
448
+ target.addEventListener(type, clipboard);
449
+ }
450
+ return () => {
451
+ for (const type of types) {
452
+ target.removeEventListener(type, listener);
453
+ }
454
+ for (const type of clipboardTypes) {
455
+ target.removeEventListener(type, clipboard);
456
+ }
457
+ };
458
+ }