@solidtv/renderer 1.0.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 (424) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +137 -0
  4. package/dist/exports/canvas-shaders.d.ts +10 -0
  5. package/dist/exports/canvas-shaders.js +11 -0
  6. package/dist/exports/canvas-shaders.js.map +1 -0
  7. package/dist/exports/canvas.d.ts +26 -0
  8. package/dist/exports/canvas.js +27 -0
  9. package/dist/exports/canvas.js.map +1 -0
  10. package/dist/exports/index.d.ts +50 -0
  11. package/dist/exports/index.js +40 -0
  12. package/dist/exports/index.js.map +1 -0
  13. package/dist/exports/inspector.d.ts +4 -0
  14. package/dist/exports/inspector.js +5 -0
  15. package/dist/exports/inspector.js.map +1 -0
  16. package/dist/exports/utils.d.ts +27 -0
  17. package/dist/exports/utils.js +28 -0
  18. package/dist/exports/utils.js.map +1 -0
  19. package/dist/exports/webgl-shaders.d.ts +11 -0
  20. package/dist/exports/webgl-shaders.js +12 -0
  21. package/dist/exports/webgl-shaders.js.map +1 -0
  22. package/dist/exports/webgl.d.ts +28 -0
  23. package/dist/exports/webgl.js +29 -0
  24. package/dist/exports/webgl.js.map +1 -0
  25. package/dist/src/common/CommonTypes.d.ts +110 -0
  26. package/dist/src/common/CommonTypes.js +2 -0
  27. package/dist/src/common/CommonTypes.js.map +1 -0
  28. package/dist/src/common/EventEmitter.d.ts +12 -0
  29. package/dist/src/common/EventEmitter.js +48 -0
  30. package/dist/src/common/EventEmitter.js.map +1 -0
  31. package/dist/src/common/IAnimationController.d.ts +58 -0
  32. package/dist/src/common/IAnimationController.js +2 -0
  33. package/dist/src/common/IAnimationController.js.map +1 -0
  34. package/dist/src/common/IEventEmitter.d.ts +8 -0
  35. package/dist/src/common/IEventEmitter.js +2 -0
  36. package/dist/src/common/IEventEmitter.js.map +1 -0
  37. package/dist/src/core/Autosizer.d.ts +35 -0
  38. package/dist/src/core/Autosizer.js +178 -0
  39. package/dist/src/core/Autosizer.js.map +1 -0
  40. package/dist/src/core/CoreNode.d.ts +908 -0
  41. package/dist/src/core/CoreNode.js +1837 -0
  42. package/dist/src/core/CoreNode.js.map +1 -0
  43. package/dist/src/core/CoreShaderManager.d.ts +38 -0
  44. package/dist/src/core/CoreShaderManager.js +123 -0
  45. package/dist/src/core/CoreShaderManager.js.map +1 -0
  46. package/dist/src/core/CoreTextNode.d.ts +91 -0
  47. package/dist/src/core/CoreTextNode.js +440 -0
  48. package/dist/src/core/CoreTextNode.js.map +1 -0
  49. package/dist/src/core/CoreTextureManager.d.ts +264 -0
  50. package/dist/src/core/CoreTextureManager.js +318 -0
  51. package/dist/src/core/CoreTextureManager.js.map +1 -0
  52. package/dist/src/core/Stage.d.ts +238 -0
  53. package/dist/src/core/Stage.js +804 -0
  54. package/dist/src/core/Stage.js.map +1 -0
  55. package/dist/src/core/TextureError.d.ts +11 -0
  56. package/dist/src/core/TextureError.js +37 -0
  57. package/dist/src/core/TextureError.js.map +1 -0
  58. package/dist/src/core/TextureMemoryManager.d.ts +150 -0
  59. package/dist/src/core/TextureMemoryManager.js +239 -0
  60. package/dist/src/core/TextureMemoryManager.js.map +1 -0
  61. package/dist/src/core/animations/AnimationManager.d.ts +33 -0
  62. package/dist/src/core/animations/AnimationManager.js +137 -0
  63. package/dist/src/core/animations/AnimationManager.js.map +1 -0
  64. package/dist/src/core/animations/CoreAnimation.d.ts +12 -0
  65. package/dist/src/core/animations/CoreAnimation.js +107 -0
  66. package/dist/src/core/animations/CoreAnimation.js.map +1 -0
  67. package/dist/src/core/lib/ContextSpy.d.ts +12 -0
  68. package/dist/src/core/lib/ContextSpy.js +20 -0
  69. package/dist/src/core/lib/ContextSpy.js.map +1 -0
  70. package/dist/src/core/lib/ImageWorker.d.ts +16 -0
  71. package/dist/src/core/lib/ImageWorker.js +202 -0
  72. package/dist/src/core/lib/ImageWorker.js.map +1 -0
  73. package/dist/src/core/lib/Matrix3d.d.ts +74 -0
  74. package/dist/src/core/lib/Matrix3d.js +218 -0
  75. package/dist/src/core/lib/Matrix3d.js.map +1 -0
  76. package/dist/src/core/lib/RenderCoords.d.ts +12 -0
  77. package/dist/src/core/lib/RenderCoords.js +35 -0
  78. package/dist/src/core/lib/RenderCoords.js.map +1 -0
  79. package/dist/src/core/lib/WebGlContextWrapper.d.ts +782 -0
  80. package/dist/src/core/lib/WebGlContextWrapper.js +1143 -0
  81. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -0
  82. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  83. package/dist/src/core/lib/collectionUtils.js +82 -0
  84. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  85. package/dist/src/core/lib/colorCache.d.ts +1 -0
  86. package/dist/src/core/lib/colorCache.js +19 -0
  87. package/dist/src/core/lib/colorCache.js.map +1 -0
  88. package/dist/src/core/lib/colorParser.d.ts +21 -0
  89. package/dist/src/core/lib/colorParser.js +54 -0
  90. package/dist/src/core/lib/colorParser.js.map +1 -0
  91. package/dist/src/core/lib/textureCompression.d.ts +28 -0
  92. package/dist/src/core/lib/textureCompression.js +363 -0
  93. package/dist/src/core/lib/textureCompression.js.map +1 -0
  94. package/dist/src/core/lib/textureSvg.d.ts +16 -0
  95. package/dist/src/core/lib/textureSvg.js +45 -0
  96. package/dist/src/core/lib/textureSvg.js.map +1 -0
  97. package/dist/src/core/lib/utils.d.ts +66 -0
  98. package/dist/src/core/lib/utils.js +268 -0
  99. package/dist/src/core/lib/utils.js.map +1 -0
  100. package/dist/src/core/lib/validateImageBitmap.d.ts +7 -0
  101. package/dist/src/core/lib/validateImageBitmap.js +68 -0
  102. package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
  103. package/dist/src/core/platforms/Platform.d.ts +42 -0
  104. package/dist/src/core/platforms/Platform.js +4 -0
  105. package/dist/src/core/platforms/Platform.js.map +1 -0
  106. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  107. package/dist/src/core/platforms/web/WebPlatform.js +90 -0
  108. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  109. package/dist/src/core/renderers/CoreContextTexture.d.ts +13 -0
  110. package/dist/src/core/renderers/CoreContextTexture.js +16 -0
  111. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -0
  112. package/dist/src/core/renderers/CoreRenderOp.d.ts +3 -0
  113. package/dist/src/core/renderers/CoreRenderOp.js +3 -0
  114. package/dist/src/core/renderers/CoreRenderOp.js.map +1 -0
  115. package/dist/src/core/renderers/CoreRenderer.d.ts +81 -0
  116. package/dist/src/core/renderers/CoreRenderer.js +14 -0
  117. package/dist/src/core/renderers/CoreRenderer.js.map +1 -0
  118. package/dist/src/core/renderers/CoreShaderNode.d.ts +69 -0
  119. package/dist/src/core/renderers/CoreShaderNode.js +130 -0
  120. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  121. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  122. package/dist/src/core/renderers/CoreShaderProgram.js +2 -0
  123. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  124. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +36 -0
  125. package/dist/src/core/renderers/canvas/CanvasRenderer.js +221 -0
  126. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  127. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  128. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +42 -0
  129. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  130. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +17 -0
  131. package/dist/src/core/renderers/canvas/CanvasTexture.js +110 -0
  132. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  133. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +41 -0
  134. package/dist/src/core/renderers/webgl/SdfRenderOp.js +88 -0
  135. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  136. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +14 -0
  137. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +45 -0
  138. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  139. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +22 -0
  140. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +49 -0
  141. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  142. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +67 -0
  143. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +259 -0
  144. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  145. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +221 -0
  146. package/dist/src/core/renderers/webgl/WebGlRenderer.js +1015 -0
  147. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  148. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +213 -0
  149. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
  150. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  151. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
  152. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +240 -0
  153. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  154. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +28 -0
  155. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +39 -0
  156. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -0
  157. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +55 -0
  158. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +88 -0
  159. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -0
  160. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +74 -0
  161. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +83 -0
  162. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -0
  163. package/dist/src/core/renderers/webgl/internal/WebGlUtils.d.ts +10 -0
  164. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +13 -0
  165. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -0
  166. package/dist/src/core/shaders/canvas/Border.d.ts +15 -0
  167. package/dist/src/core/shaders/canvas/Border.js +83 -0
  168. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  169. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  170. package/dist/src/core/shaders/canvas/HolePunch.js +22 -0
  171. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  172. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  173. package/dist/src/core/shaders/canvas/LinearGradient.js +32 -0
  174. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  175. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  176. package/dist/src/core/shaders/canvas/RadialGradient.js +54 -0
  177. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  178. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  179. package/dist/src/core/shaders/canvas/Rounded.js +17 -0
  180. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  181. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +10 -0
  182. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +57 -0
  183. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  184. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +7 -0
  185. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +61 -0
  186. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  187. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  188. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +26 -0
  189. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  190. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  191. package/dist/src/core/shaders/canvas/Shadow.js +15 -0
  192. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  193. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  194. package/dist/src/core/shaders/canvas/utils/render.js +81 -0
  195. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  196. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +47 -0
  197. package/dist/src/core/shaders/templates/BorderTemplate.js +77 -0
  198. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  199. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  200. package/dist/src/core/shaders/templates/HolePunchTemplate.js +19 -0
  201. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  202. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  203. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +31 -0
  204. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  205. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +33 -0
  206. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +33 -0
  207. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  208. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  209. package/dist/src/core/shaders/templates/RoundedTemplate.js +51 -0
  210. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  211. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  212. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +8 -0
  213. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  214. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +8 -0
  215. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +9 -0
  216. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  217. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  218. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +7 -0
  219. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  220. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  221. package/dist/src/core/shaders/templates/ShadowTemplate.js +50 -0
  222. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  223. package/dist/src/core/shaders/utils.d.ts +5 -0
  224. package/dist/src/core/shaders/utils.js +25 -0
  225. package/dist/src/core/shaders/utils.js.map +1 -0
  226. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  227. package/dist/src/core/shaders/webgl/Border.js +153 -0
  228. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  229. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  230. package/dist/src/core/shaders/webgl/Default.js +51 -0
  231. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  232. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  233. package/dist/src/core/shaders/webgl/HolePunch.js +49 -0
  234. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  235. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  236. package/dist/src/core/shaders/webgl/LinearGradient.js +114 -0
  237. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  238. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  239. package/dist/src/core/shaders/webgl/RadialGradient.js +81 -0
  240. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  241. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  242. package/dist/src/core/shaders/webgl/Rounded.js +88 -0
  243. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  244. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  245. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +202 -0
  246. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  247. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  248. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +223 -0
  249. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  250. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  251. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +123 -0
  252. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  253. package/dist/src/core/shaders/webgl/SdfShader.d.ts +13 -0
  254. package/dist/src/core/shaders/webgl/SdfShader.js +72 -0
  255. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  256. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  257. package/dist/src/core/shaders/webgl/Shadow.js +115 -0
  258. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  259. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  260. package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
  261. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  262. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  263. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  264. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  265. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
  266. package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
  267. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  268. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  269. package/dist/src/core/text-rendering/SdfTextRenderer.js +249 -0
  270. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  271. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  272. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  273. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  274. package/dist/src/core/text-rendering/TextRenderer.d.ts +406 -0
  275. package/dist/src/core/text-rendering/TextRenderer.js +2 -0
  276. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  277. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  278. package/dist/src/core/text-rendering/Utils.js +66 -0
  279. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  280. package/dist/src/core/textures/ColorTexture.d.ts +36 -0
  281. package/dist/src/core/textures/ColorTexture.js +57 -0
  282. package/dist/src/core/textures/ColorTexture.js.map +1 -0
  283. package/dist/src/core/textures/ImageTexture.d.ts +131 -0
  284. package/dist/src/core/textures/ImageTexture.js +211 -0
  285. package/dist/src/core/textures/ImageTexture.js.map +1 -0
  286. package/dist/src/core/textures/NoiseTexture.d.ts +43 -0
  287. package/dist/src/core/textures/NoiseTexture.js +50 -0
  288. package/dist/src/core/textures/NoiseTexture.js.map +1 -0
  289. package/dist/src/core/textures/RenderTexture.d.ts +29 -0
  290. package/dist/src/core/textures/RenderTexture.js +36 -0
  291. package/dist/src/core/textures/RenderTexture.js.map +1 -0
  292. package/dist/src/core/textures/SubTexture.d.ts +61 -0
  293. package/dist/src/core/textures/SubTexture.js +99 -0
  294. package/dist/src/core/textures/SubTexture.js.map +1 -0
  295. package/dist/src/core/textures/Texture.d.ts +275 -0
  296. package/dist/src/core/textures/Texture.js +326 -0
  297. package/dist/src/core/textures/Texture.js.map +1 -0
  298. package/dist/src/core/utils.d.ts +23 -0
  299. package/dist/src/core/utils.js +155 -0
  300. package/dist/src/core/utils.js.map +1 -0
  301. package/dist/src/main-api/INode.d.ts +65 -0
  302. package/dist/src/main-api/INode.js +2 -0
  303. package/dist/src/main-api/INode.js.map +1 -0
  304. package/dist/src/main-api/Inspector.d.ts +154 -0
  305. package/dist/src/main-api/Inspector.js +844 -0
  306. package/dist/src/main-api/Inspector.js.map +1 -0
  307. package/dist/src/main-api/Renderer.d.ts +629 -0
  308. package/dist/src/main-api/Renderer.js +471 -0
  309. package/dist/src/main-api/Renderer.js.map +1 -0
  310. package/dist/src/main-api/utils.d.ts +2 -0
  311. package/dist/src/main-api/utils.js +34 -0
  312. package/dist/src/main-api/utils.js.map +1 -0
  313. package/dist/src/utils.d.ts +123 -0
  314. package/dist/src/utils.js +234 -0
  315. package/dist/src/utils.js.map +1 -0
  316. package/dist/tsconfig.dist.tsbuildinfo +1 -0
  317. package/exports/canvas-shaders.ts +11 -0
  318. package/exports/canvas.ts +27 -0
  319. package/exports/index.ts +69 -0
  320. package/exports/inspector.ts +5 -0
  321. package/exports/utils.ts +32 -0
  322. package/exports/webgl-shaders.ts +12 -0
  323. package/exports/webgl.ts +33 -0
  324. package/package.json +99 -0
  325. package/src/common/CommonTypes.ts +145 -0
  326. package/src/common/EventEmitter.ts +58 -0
  327. package/src/common/IAnimationController.ts +65 -0
  328. package/src/common/IEventEmitter.ts +11 -0
  329. package/src/core/Autosizer.ts +205 -0
  330. package/src/core/CoreNode.test.ts +535 -0
  331. package/src/core/CoreNode.ts +2883 -0
  332. package/src/core/CoreShaderManager.ts +170 -0
  333. package/src/core/CoreTextNode.ts +573 -0
  334. package/src/core/CoreTextureManager.ts +552 -0
  335. package/src/core/Stage.ts +1037 -0
  336. package/src/core/TextureError.ts +46 -0
  337. package/src/core/TextureMemoryManager.ts +378 -0
  338. package/src/core/animations/AnimationManager.ts +178 -0
  339. package/src/core/animations/CoreAnimation.ts +138 -0
  340. package/src/core/lib/ContextSpy.ts +22 -0
  341. package/src/core/lib/ImageWorker.ts +292 -0
  342. package/src/core/lib/Matrix3d.ts +231 -0
  343. package/src/core/lib/RenderCoords.ts +55 -0
  344. package/src/core/lib/WebGlContextWrapper.ts +1448 -0
  345. package/src/core/lib/collectionUtils.ts +99 -0
  346. package/src/core/lib/colorCache.ts +20 -0
  347. package/src/core/lib/colorParser.ts +66 -0
  348. package/src/core/lib/textureCompression.ts +492 -0
  349. package/src/core/lib/textureSvg.ts +59 -0
  350. package/src/core/lib/utils.ts +400 -0
  351. package/src/core/lib/validateImageBitmap.ts +87 -0
  352. package/src/core/platforms/Platform.ts +64 -0
  353. package/src/core/platforms/web/WebPlatform.ts +132 -0
  354. package/src/core/renderers/CoreContextTexture.ts +25 -0
  355. package/src/core/renderers/CoreRenderOp.ts +3 -0
  356. package/src/core/renderers/CoreRenderer.ts +101 -0
  357. package/src/core/renderers/CoreShaderNode.ts +202 -0
  358. package/src/core/renderers/CoreShaderProgram.ts +4 -0
  359. package/src/core/renderers/canvas/CanvasRenderer.ts +274 -0
  360. package/src/core/renderers/canvas/CanvasShaderNode.ts +79 -0
  361. package/src/core/renderers/canvas/CanvasTexture.ts +141 -0
  362. package/src/core/renderers/webgl/SdfRenderOp.ts +103 -0
  363. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +70 -0
  364. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +76 -0
  365. package/src/core/renderers/webgl/WebGlCtxTexture.ts +332 -0
  366. package/src/core/renderers/webgl/WebGlRenderer.ts +1323 -0
  367. package/src/core/renderers/webgl/WebGlShaderNode.ts +423 -0
  368. package/src/core/renderers/webgl/WebGlShaderProgram.ts +346 -0
  369. package/src/core/renderers/webgl/internal/BufferCollection.ts +46 -0
  370. package/src/core/renderers/webgl/internal/RendererUtils.ts +136 -0
  371. package/src/core/renderers/webgl/internal/ShaderUtils.ts +262 -0
  372. package/src/core/renderers/webgl/internal/WebGlUtils.ts +16 -0
  373. package/src/core/shaders/canvas/Border.ts +119 -0
  374. package/src/core/shaders/canvas/HolePunch.ts +38 -0
  375. package/src/core/shaders/canvas/LinearGradient.ts +54 -0
  376. package/src/core/shaders/canvas/RadialGradient.ts +82 -0
  377. package/src/core/shaders/canvas/Rounded.ts +38 -0
  378. package/src/core/shaders/canvas/RoundedWithBorder.ts +105 -0
  379. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +118 -0
  380. package/src/core/shaders/canvas/RoundedWithShadow.ts +56 -0
  381. package/src/core/shaders/canvas/Shadow.ts +35 -0
  382. package/src/core/shaders/canvas/utils/render.ts +143 -0
  383. package/src/core/shaders/templates/BorderTemplate.ts +128 -0
  384. package/src/core/shaders/templates/HolePunchTemplate.ts +65 -0
  385. package/src/core/shaders/templates/LinearGradientTemplate.ts +54 -0
  386. package/src/core/shaders/templates/RadialGradientTemplate.ts +66 -0
  387. package/src/core/shaders/templates/RoundedTemplate.ts +81 -0
  388. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +21 -0
  389. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +23 -0
  390. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +18 -0
  391. package/src/core/shaders/templates/ShadowTemplate.ts +89 -0
  392. package/src/core/shaders/utils.ts +30 -0
  393. package/src/core/shaders/webgl/Border.ts +158 -0
  394. package/src/core/shaders/webgl/Default.ts +52 -0
  395. package/src/core/shaders/webgl/HolePunch.ts +58 -0
  396. package/src/core/shaders/webgl/LinearGradient.ts +119 -0
  397. package/src/core/shaders/webgl/RadialGradient.ts +91 -0
  398. package/src/core/shaders/webgl/Rounded.ts +97 -0
  399. package/src/core/shaders/webgl/RoundedWithBorder.ts +212 -0
  400. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +235 -0
  401. package/src/core/shaders/webgl/RoundedWithShadow.ts +132 -0
  402. package/src/core/shaders/webgl/SdfShader.ts +73 -0
  403. package/src/core/shaders/webgl/Shadow.ts +119 -0
  404. package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
  405. package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
  406. package/src/core/text-rendering/SdfFontHandler.ts +566 -0
  407. package/src/core/text-rendering/SdfTextRenderer.ts +352 -0
  408. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  409. package/src/core/text-rendering/TextRenderer.ts +449 -0
  410. package/src/core/text-rendering/Utils.ts +80 -0
  411. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
  412. package/src/core/textures/ColorTexture.ts +85 -0
  413. package/src/core/textures/ImageTexture.ts +394 -0
  414. package/src/core/textures/NoiseTexture.ts +87 -0
  415. package/src/core/textures/RenderTexture.ts +68 -0
  416. package/src/core/textures/SubTexture.ts +165 -0
  417. package/src/core/textures/Texture.ts +505 -0
  418. package/src/core/utils.ts +210 -0
  419. package/src/env.d.ts +7 -0
  420. package/src/main-api/INode.ts +92 -0
  421. package/src/main-api/Inspector.ts +1267 -0
  422. package/src/main-api/Renderer.ts +1011 -0
  423. package/src/main-api/utils.ts +45 -0
  424. package/src/utils.ts +302 -0
@@ -0,0 +1,59 @@
1
+ import { assertTruthy } from '../../utils.js';
2
+ import { type TextureData } from '../textures/Texture.js';
3
+
4
+ /**
5
+ * Tests if the given location is a SVG
6
+ * @param url
7
+ * @remarks
8
+ * This function is used to determine if the given image url is a SVG
9
+ * image
10
+ * @returns
11
+ */
12
+ export function isSvgImage(url: string): boolean {
13
+ return /\.(svg)(\?.*)?$/.test(url);
14
+ }
15
+
16
+ /**
17
+ * Loads a SVG image
18
+ * @param url
19
+ * @returns
20
+ */
21
+ export const loadSvg = (
22
+ url: string,
23
+ width: number | null,
24
+ height: number | null,
25
+ sx: number | null,
26
+ sy: number | null,
27
+ sw: number | null,
28
+ sh: number | null,
29
+ ): Promise<TextureData> => {
30
+ return new Promise((resolve, reject) => {
31
+ const canvas = document.createElement('canvas');
32
+ const ctx = canvas.getContext('2d');
33
+ assertTruthy(ctx);
34
+
35
+ ctx.imageSmoothingEnabled = true;
36
+ const img = new Image();
37
+ img.onload = () => {
38
+ const x = sx ?? 0;
39
+ const y = sy ?? 0;
40
+ const w = width || img.width;
41
+ const h = height || img.height;
42
+
43
+ canvas.width = w;
44
+ canvas.height = h;
45
+ ctx.drawImage(img, 0, 0, w, h);
46
+
47
+ resolve({
48
+ data: ctx.getImageData(x, y, sw ?? w, sh ?? h),
49
+ premultiplyAlpha: false,
50
+ });
51
+ };
52
+
53
+ img.onerror = (err) => {
54
+ reject(err);
55
+ };
56
+
57
+ img.src = url;
58
+ });
59
+ };
@@ -0,0 +1,400 @@
1
+ import type { Vec4 } from '../renderers/webgl/internal/ShaderUtils.js';
2
+
3
+ export const PROTOCOL_REGEX = /^(data|ftps?|https?):/;
4
+
5
+ export type RGBA = [r: number, g: number, b: number, a: number];
6
+
7
+ export const getNormalizedRgbaComponents = (rgba: number): RGBA => {
8
+ const r = rgba >>> 24;
9
+ const g = (rgba >>> 16) & 0xff;
10
+ const b = (rgba >>> 8) & 0xff;
11
+ const a = rgba & 0xff;
12
+ return [r / 255, g / 255, b / 255, a / 255];
13
+ };
14
+
15
+ export const getRgbaComponents = (rgba: number): RGBA => {
16
+ const r = rgba >>> 24;
17
+ const g = (rgba >>> 16) & 0xff;
18
+ const b = (rgba >>> 8) & 0xff;
19
+ const a = rgba & 0xff;
20
+ return [r, g, b, a];
21
+ };
22
+
23
+ export const norm = (rgba: number): number => {
24
+ const r = rgba >>> 24;
25
+ const g = (rgba >>> 16) & 0xff;
26
+ const b = (rgba >>> 8) & 0xff;
27
+ const a = rgba & 0xff;
28
+ const rgbaArr: RGBA = [r / 255, g / 255, b / 255, a / 255];
29
+
30
+ rgbaArr[0] = Math.max(0, Math.min(255, rgbaArr[0]));
31
+ rgbaArr[1] = Math.max(0, Math.min(255, rgbaArr[1]));
32
+ rgbaArr[2] = Math.max(0, Math.min(255, rgbaArr[2]));
33
+ rgbaArr[3] = Math.max(0, Math.min(255, rgbaArr[3]));
34
+ let v =
35
+ ((rgbaArr[3] | 0) << 24) +
36
+ ((rgbaArr[0] | 0) << 16) +
37
+ ((rgbaArr[1] | 0) << 8) +
38
+ (rgbaArr[2] | 0);
39
+ if (v < 0) {
40
+ v = 0xffffffff + v + 1;
41
+ }
42
+ return v;
43
+ };
44
+
45
+ export function getNormalizedAlphaComponent(rgba: number): number {
46
+ return (rgba & 0xff) / 255.0;
47
+ }
48
+
49
+ /**
50
+ * Get a CSS color string from a RGBA color
51
+ *
52
+ * @param color
53
+ * @returns
54
+ */
55
+ export function getRgbaString(color: RGBA) {
56
+ const r = Math.floor(color[0] * 255.0);
57
+ const g = Math.floor(color[1] * 255.0);
58
+ const b = Math.floor(color[2] * 255.0);
59
+ const a = Math.floor(color[3] * 255.0);
60
+ return `rgba(${r},${g},${b},${a.toFixed(4)})`;
61
+ }
62
+
63
+ export interface Rect {
64
+ x: number;
65
+ y: number;
66
+ width: number;
67
+ height: number;
68
+ }
69
+
70
+ export interface RectWithValid extends Rect {
71
+ valid: boolean;
72
+ }
73
+
74
+ export interface Bound {
75
+ x1: number;
76
+ y1: number;
77
+ x2: number;
78
+ y2: number;
79
+ }
80
+
81
+ export interface Coord {
82
+ x: number;
83
+ y: number;
84
+ }
85
+
86
+ export interface BoundWithValid extends Bound {
87
+ valid: boolean;
88
+ }
89
+
90
+ export function createBound<T extends Bound = Bound>(
91
+ x1: number,
92
+ y1: number,
93
+ x2: number,
94
+ y2: number,
95
+ out?: T,
96
+ ): T {
97
+ if (out) {
98
+ out.x1 = x1;
99
+ out.y1 = y1;
100
+ out.x2 = x2;
101
+ out.y2 = y2;
102
+ return out;
103
+ }
104
+ return {
105
+ x1,
106
+ y1,
107
+ x2,
108
+ y2,
109
+ } as T;
110
+ }
111
+
112
+ export function intersectBound<T extends Bound = Bound>(
113
+ a: Bound,
114
+ b: Bound,
115
+ out?: T,
116
+ ): T {
117
+ const intersection = createBound(
118
+ Math.max(a.x1, b.x1),
119
+ Math.max(a.y1, b.y1),
120
+ Math.min(a.x2, b.x2),
121
+ Math.min(a.y2, b.y2),
122
+ out,
123
+ );
124
+ if (intersection.x1 < intersection.x2 && intersection.y1 < intersection.y2) {
125
+ return intersection;
126
+ }
127
+ return createBound(0, 0, 0, 0, intersection);
128
+ }
129
+
130
+ export function boundsOverlap(a: Bound, b: Bound): boolean {
131
+ return a.x1 < b.x2 && a.x2 > b.x1 && a.y1 < b.y2 && a.y2 > b.y1;
132
+ }
133
+
134
+ export function convertBoundToRect(bound: Bound): Rect;
135
+ export function convertBoundToRect<T extends Rect = Rect>(
136
+ bound: Bound,
137
+ out: T,
138
+ ): T;
139
+ export function convertBoundToRect(bound: Bound, out?: Rect): Rect {
140
+ if (out) {
141
+ out.x = bound.x1;
142
+ out.y = bound.y1;
143
+ out.width = bound.x2 - bound.x1;
144
+ out.height = bound.y2 - bound.y1;
145
+ return out;
146
+ }
147
+ return {
148
+ x: bound.x1,
149
+ y: bound.y1,
150
+ width: bound.x2 - bound.x1,
151
+ height: bound.y2 - bound.y1,
152
+ };
153
+ }
154
+
155
+ export function intersectRect(a: Rect, b: Rect): Rect;
156
+ export function intersectRect<T extends Rect = Rect>(
157
+ a: Rect,
158
+ b: Rect,
159
+ out: T,
160
+ ): T;
161
+ export function intersectRect(a: Rect, b: Rect, out?: Rect): Rect {
162
+ const x = Math.max(a.x, b.x);
163
+ const y = Math.max(a.y, b.y);
164
+ const width = Math.min(a.x + a.width, b.x + b.width) - x;
165
+ const height = Math.min(a.y + a.height, b.y + b.height) - y;
166
+ if (width > 0 && height > 0) {
167
+ if (out) {
168
+ out.x = x;
169
+ out.y = y;
170
+ out.width = width;
171
+ out.height = height;
172
+ return out;
173
+ }
174
+ return {
175
+ x,
176
+ y,
177
+ width,
178
+ height,
179
+ };
180
+ }
181
+ if (out) {
182
+ out.x = 0;
183
+ out.y = 0;
184
+ out.width = 0;
185
+ out.height = 0;
186
+ return out;
187
+ }
188
+ return {
189
+ x: 0,
190
+ y: 0,
191
+ width: 0,
192
+ height: 0,
193
+ };
194
+ }
195
+
196
+ export function copyRect(a: Rect): Rect;
197
+ export function copyRect<T extends Rect = Rect>(a: Rect, out: T): T;
198
+ export function copyRect(a: Rect, out?: Rect): Rect {
199
+ if (out) {
200
+ out.x = a.x;
201
+ out.y = a.y;
202
+ out.width = a.width;
203
+ out.height = a.height;
204
+ return out;
205
+ }
206
+ return {
207
+ x: a.x,
208
+ y: a.y,
209
+ width: a.width,
210
+ height: a.height,
211
+ };
212
+ }
213
+
214
+ export function compareRect(a: Rect | null, b: Rect | null): boolean {
215
+ if (a === b) {
216
+ return true;
217
+ }
218
+ if (a === null || b === null) {
219
+ return false;
220
+ }
221
+ return (
222
+ a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height
223
+ );
224
+ }
225
+
226
+ export function boundInsideBound(bound1: Bound, bound2: Bound) {
227
+ return (
228
+ bound1.x1 <= bound2.x2 &&
229
+ bound1.y1 <= bound2.y2 &&
230
+ bound1.x2 >= bound2.x1 &&
231
+ bound1.y2 >= bound2.y1
232
+ );
233
+ }
234
+
235
+ export function boundLargeThanBound(bound1: Bound, bound2: Bound) {
236
+ return (
237
+ bound1.x1 < bound2.x1 &&
238
+ bound1.x2 > bound2.x2 &&
239
+ bound1.y1 < bound2.y1 &&
240
+ bound1.y2 > bound2.y2
241
+ );
242
+ }
243
+
244
+ export function pointInBound(x: number, y: number, bound: Bound) {
245
+ return !(x < bound.x1 || x > bound.x2 || y < bound.y1 || y > bound.y2);
246
+ }
247
+
248
+ export function isBoundPositive(bound: Bound): boolean {
249
+ return bound.x1 < bound.x2 && bound.y1 < bound.y2;
250
+ }
251
+
252
+ export function isRectPositive(rect: Rect): boolean {
253
+ return rect.width > 0 && rect.height > 0;
254
+ }
255
+
256
+ /**
257
+ * Create a preload bounds from a strict bound
258
+ *
259
+ * @param strictBound The strict boundary of the node
260
+ * @param boundsMargin Boundary margin to apply to the strictBound
261
+ * @returns
262
+ */
263
+ export function createPreloadBounds(
264
+ strictBound: Bound,
265
+ boundsMargin: [number, number, number, number],
266
+ out?: Bound,
267
+ ): Bound {
268
+ return createBound(
269
+ strictBound.x1 - boundsMargin[3],
270
+ strictBound.y1 - boundsMargin[0],
271
+ strictBound.x2 + boundsMargin[1],
272
+ strictBound.y2 + boundsMargin[2],
273
+ out,
274
+ );
275
+ }
276
+
277
+ export function convertUrlToAbsolute(url: string): string {
278
+ // handle local file imports if the url isn't remote resource or data blob
279
+ if (self.location.protocol === 'file:' && !PROTOCOL_REGEX.test(url)) {
280
+ const path = self.location.pathname.split('/');
281
+ path.pop();
282
+ const basePath = path.join('/');
283
+ const baseUrl = self.location.protocol + '//' + basePath;
284
+
285
+ // check if url has a leading dot
286
+ if (url.charAt(0) === '.') {
287
+ url = url.slice(1);
288
+ }
289
+
290
+ // check if url has a leading slash
291
+ if (url.charAt(0) === '/') {
292
+ url = url.slice(1);
293
+ }
294
+
295
+ return baseUrl + '/' + url;
296
+ }
297
+
298
+ const absoluteUrl = new URL(url, self.location.href);
299
+ return absoluteUrl.href;
300
+ }
301
+
302
+ export function isBase64Image(src: string) {
303
+ return src.startsWith('data:') === true;
304
+ }
305
+
306
+ export function calcFactoredRadius(
307
+ radius: number,
308
+ width: number,
309
+ height: number,
310
+ ): number {
311
+ return radius * Math.min(Math.min(width, height) / (2.0 * radius), 1);
312
+ }
313
+
314
+ export function valuesAreEqual(values: number[]) {
315
+ let prevValue = values[0];
316
+ for (let i = 1; i < values.length; i++) {
317
+ if (prevValue !== values[i]) {
318
+ return false;
319
+ }
320
+ }
321
+ return true;
322
+ }
323
+
324
+ export function calcFactoredRadiusArray(
325
+ radius: Vec4,
326
+ width: number,
327
+ height: number,
328
+ ): [number, number, number, number] {
329
+ const result: [number, number, number, number] = [
330
+ radius[0],
331
+ radius[1],
332
+ radius[2],
333
+ radius[3],
334
+ ];
335
+ const factor = Math.min(
336
+ Math.min(
337
+ Math.min(
338
+ width / Math.max(width, radius[0] + radius[1]),
339
+ width / Math.max(width, radius[2] + radius[3]),
340
+ ),
341
+ Math.min(
342
+ height / Math.max(height, radius[0] + radius[3]),
343
+ height / Math.max(height, radius[1] + radius[2]),
344
+ ),
345
+ ),
346
+ 1,
347
+ );
348
+ result[0] *= factor;
349
+ result[1] *= factor;
350
+ result[2] *= factor;
351
+ result[3] *= factor;
352
+ return result;
353
+ }
354
+
355
+ export function dataURIToBlob(dataURI: string): Blob {
356
+ dataURI = dataURI.replace(/^data:/, '');
357
+
358
+ const type = dataURI.match(/image\/[^;]+/)?.[0] || '';
359
+ const base64 = dataURI.replace(/^[^,]+,/, '');
360
+
361
+ const sliceSize = 1024;
362
+ const byteCharacters = atob(base64);
363
+ const bytesLength = byteCharacters.length;
364
+ const slicesCount = Math.ceil(bytesLength / sliceSize);
365
+ const byteArrays = new Array(slicesCount);
366
+
367
+ for (let sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
368
+ const begin = sliceIndex * sliceSize;
369
+ const end = Math.min(begin + sliceSize, bytesLength);
370
+
371
+ const bytes = new Array(end - begin);
372
+ for (let offset = begin, i = 0; offset < end; ++i, ++offset) {
373
+ bytes[i] = byteCharacters[offset]?.charCodeAt(0);
374
+ }
375
+ byteArrays[sliceIndex] = new Uint8Array(bytes);
376
+ }
377
+ return new Blob(byteArrays, { type });
378
+ }
379
+
380
+ export function fetchJson(
381
+ url: string,
382
+ responseType: XMLHttpRequestResponseType = '',
383
+ ): Promise<unknown> {
384
+ return new Promise((resolve, reject) => {
385
+ const xhr = new XMLHttpRequest();
386
+ xhr.responseType = responseType;
387
+ xhr.onreadystatechange = function () {
388
+ if (xhr.readyState == XMLHttpRequest.DONE) {
389
+ // On most devices like WebOS and Tizen, the file protocol returns 0 while http(s) protocol returns 200
390
+ if (xhr.status === 0 || xhr.status === 200) {
391
+ resolve(xhr.response);
392
+ } else {
393
+ reject(xhr.statusText);
394
+ }
395
+ }
396
+ };
397
+ xhr.open('GET', url, true);
398
+ xhr.send(null);
399
+ });
400
+ }
@@ -0,0 +1,87 @@
1
+ import type { Platform } from '../platforms/Platform.js';
2
+
3
+ export interface CreateImageBitmapSupport {
4
+ basic: boolean; // Supports createImageBitmap(image)
5
+ options: boolean; // Supports createImageBitmap(image, options)
6
+ full: boolean; // Supports createImageBitmap(image, sx, sy, sw, sh, options)
7
+ }
8
+
9
+ export async function validateCreateImageBitmap(
10
+ platform: Platform,
11
+ ): Promise<CreateImageBitmapSupport> {
12
+ // Test if createImageBitmap is supported using a simple 1x1 PNG image
13
+ // prettier-ignore
14
+ const pngBinaryData = new Uint8Array([
15
+ 0x89, 0x50, 0x4e, 0x47,
16
+ 0x0d, 0x0a, 0x1a, 0x0a, // PNG signature
17
+ 0x00, 0x00, 0x00, 0x0d, // IHDR chunk length
18
+ 0x49, 0x48, 0x44, 0x52, // "IHDR" chunk type
19
+ 0x00, 0x00, 0x00, 0x01, // Width: 1
20
+ 0x00, 0x00, 0x00, 0x01, // Height: 1
21
+ 0x01, // Bit depth: 1
22
+ 0x03, // Color type: Indexed
23
+ 0x00, // Compression method: Deflate
24
+ 0x00, // Filter method: None
25
+ 0x00, // Interlace method: None
26
+ 0x25, 0xdb, 0x56, 0xca, // CRC for IHDR
27
+ 0x00, 0x00, 0x00, 0x03, // PLTE chunk length
28
+ 0x50, 0x4c, 0x54, 0x45, // "PLTE" chunk type
29
+ 0x00, 0x00, 0x00, // Palette entry: Black
30
+ 0xa7, 0x7a, 0x3d, 0xda, // CRC for PLTE
31
+ 0x00, 0x00, 0x00, 0x01, // tRNS chunk length
32
+ 0x74, 0x52, 0x4e, 0x53, // "tRNS" chunk type
33
+ 0x00, // Transparency for black: Fully transparent
34
+ 0x40, 0xe6, 0xd8, 0x66, // CRC for tRNS
35
+ 0x00, 0x00, 0x00, 0x0a, // IDAT chunk length
36
+ 0x49, 0x44, 0x41, 0x54, // "IDAT" chunk type
37
+ 0x08, 0xd7, // Deflate header
38
+ 0x63, 0x60, 0x00, 0x00,
39
+ 0x00, 0x02, 0x00, 0x01, // Zlib-compressed data
40
+ 0xe2, 0x21, 0xbc, 0x33, // CRC for IDAT
41
+ 0x00, 0x00, 0x00, 0x00, // IEND chunk length
42
+ 0x49, 0x45, 0x4e, 0x44, // "IEND" chunk type
43
+ 0xae, 0x42, 0x60, 0x82, // CRC for IEND
44
+ ]);
45
+
46
+ const support: CreateImageBitmapSupport = {
47
+ basic: false,
48
+ options: false,
49
+ full: false,
50
+ };
51
+
52
+ // Test basic createImageBitmap support
53
+ const blob = new Blob([pngBinaryData], { type: 'image/png' });
54
+ const bitmap = await platform.createImageBitmap(blob);
55
+ bitmap.close?.();
56
+ support.basic = true;
57
+
58
+ // Test createImageBitmap with options support
59
+ try {
60
+ const options = { premultiplyAlpha: 'none' as const };
61
+ const bitmapWithOptions = await platform.createImageBitmap(blob, options);
62
+ bitmapWithOptions.close?.();
63
+ support.options = true;
64
+ } catch (e) {
65
+ /* ignore */
66
+ }
67
+
68
+ // Test createImageBitmap with full options support
69
+ try {
70
+ const bitmapWithFullOptions = await platform.createImageBitmap(
71
+ blob,
72
+ 0,
73
+ 0,
74
+ 1,
75
+ 1,
76
+ {
77
+ premultiplyAlpha: 'none',
78
+ },
79
+ );
80
+ bitmapWithFullOptions.close?.();
81
+ support.full = true;
82
+ } catch (e) {
83
+ /* ignore */
84
+ }
85
+
86
+ return support;
87
+ }
@@ -0,0 +1,64 @@
1
+ import { type Stage } from '../Stage.js';
2
+
3
+ export abstract class Platform {
4
+ /**
5
+ * Creates a new canvas element.
6
+ * @returns The created HTMLCanvasElement.
7
+ */
8
+ abstract createCanvas(): HTMLCanvasElement;
9
+
10
+ /**
11
+ * Get a DOM element by ID
12
+ * @returns The DOM element (or null)
13
+ */
14
+ abstract getElementById(id: string): HTMLElement | null;
15
+
16
+ /**
17
+ * Starts the main rendering loop, calling the provided update function every frame.
18
+ * @param Stage - The stage for rendering
19
+ */
20
+ abstract startLoop(stage: Stage): void;
21
+
22
+ /**
23
+ * Abstracted createImageBitmap method.
24
+ * @param blob - The image source to create the ImageBitmap from.
25
+ * @param sxOrOptions - The source rectangle x coordinate or ImageBitmapOptions.
26
+ * @param sy - The source rectangle y coordinate.
27
+ * @param sw - The source rectangle width.
28
+ * @param sh - The source rectangle height.
29
+ * @param options - The ImageBitmapOptions.
30
+ * @returns A promise that resolves with the created ImageBitmap.
31
+ */
32
+ abstract createImageBitmap(blob: ImageBitmapSource): Promise<ImageBitmap>;
33
+ abstract createImageBitmap(
34
+ blob: ImageBitmapSource,
35
+ options: ImageBitmapOptions,
36
+ ): Promise<ImageBitmap>;
37
+ abstract createImageBitmap(
38
+ blob: ImageBitmapSource,
39
+ sx: number,
40
+ sy: number,
41
+ sw: number,
42
+ sh: number,
43
+ ): Promise<ImageBitmap>;
44
+ abstract createImageBitmap(
45
+ blob: ImageBitmapSource,
46
+ sx: number,
47
+ sy: number,
48
+ sw: number,
49
+ sh: number,
50
+ options: ImageBitmapOptions,
51
+ ): Promise<ImageBitmap>;
52
+
53
+ /**
54
+ * Retrieves the current timestamp.
55
+ * @returns The current timestamp.
56
+ */
57
+ abstract getTimeStamp(): number;
58
+
59
+ /**
60
+ * Adds a FontFace to the platforms FontFaceSet
61
+ * @param font - The FontFace to add
62
+ */
63
+ abstract addFont(font: FontFace): void;
64
+ }