fraxel 0.1.0-alpha.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 (501) hide show
  1. package/dist/animation/easing.d.ts +29 -0
  2. package/dist/animation/easing.d.ts.map +1 -0
  3. package/dist/animation/easing.js +50 -0
  4. package/dist/animation/easing.js.map +1 -0
  5. package/dist/animation/index.d.ts +7 -0
  6. package/dist/animation/index.d.ts.map +1 -0
  7. package/dist/animation/index.js +7 -0
  8. package/dist/animation/index.js.map +1 -0
  9. package/dist/animation/multiple.d.ts +26 -0
  10. package/dist/animation/multiple.d.ts.map +1 -0
  11. package/dist/animation/multiple.js +27 -0
  12. package/dist/animation/multiple.js.map +1 -0
  13. package/dist/animation/properties.d.ts +30 -0
  14. package/dist/animation/properties.d.ts.map +1 -0
  15. package/dist/animation/properties.js +32 -0
  16. package/dist/animation/properties.js.map +1 -0
  17. package/dist/animation/sequences.d.ts +30 -0
  18. package/dist/animation/sequences.d.ts.map +1 -0
  19. package/dist/animation/sequences.js +50 -0
  20. package/dist/animation/sequences.js.map +1 -0
  21. package/dist/animation/sprite-sheet.d.ts +81 -0
  22. package/dist/animation/sprite-sheet.d.ts.map +1 -0
  23. package/dist/animation/sprite-sheet.js +103 -0
  24. package/dist/animation/sprite-sheet.js.map +1 -0
  25. package/dist/animation/tween.d.ts +78 -0
  26. package/dist/animation/tween.d.ts.map +1 -0
  27. package/dist/animation/tween.js +103 -0
  28. package/dist/animation/tween.js.map +1 -0
  29. package/dist/assets/index.d.ts +6 -0
  30. package/dist/assets/index.d.ts.map +1 -0
  31. package/dist/assets/index.js +5 -0
  32. package/dist/assets/index.js.map +1 -0
  33. package/dist/assets/load-sound.d.ts +17 -0
  34. package/dist/assets/load-sound.d.ts.map +1 -0
  35. package/dist/assets/load-sound.js +35 -0
  36. package/dist/assets/load-sound.js.map +1 -0
  37. package/dist/assets/load-texture.d.ts +12 -0
  38. package/dist/assets/load-texture.d.ts.map +1 -0
  39. package/dist/assets/load-texture.js +40 -0
  40. package/dist/assets/load-texture.js.map +1 -0
  41. package/dist/assets/loader.d.ts +59 -0
  42. package/dist/assets/loader.d.ts.map +1 -0
  43. package/dist/assets/loader.js +65 -0
  44. package/dist/assets/loader.js.map +1 -0
  45. package/dist/assets/texture.d.ts +36 -0
  46. package/dist/assets/texture.d.ts.map +1 -0
  47. package/dist/assets/texture.js +49 -0
  48. package/dist/assets/texture.js.map +1 -0
  49. package/dist/audio/audio-context.d.ts +14 -0
  50. package/dist/audio/audio-context.d.ts.map +1 -0
  51. package/dist/audio/audio-context.js +20 -0
  52. package/dist/audio/audio-context.js.map +1 -0
  53. package/dist/audio/index.d.ts +2 -0
  54. package/dist/audio/index.d.ts.map +1 -0
  55. package/dist/audio/index.js +2 -0
  56. package/dist/audio/index.js.map +1 -0
  57. package/dist/collision/broadphase/spatial-hash.d.ts +32 -0
  58. package/dist/collision/broadphase/spatial-hash.d.ts.map +1 -0
  59. package/dist/collision/broadphase/spatial-hash.js +87 -0
  60. package/dist/collision/broadphase/spatial-hash.js.map +1 -0
  61. package/dist/collision/collision-system.d.ts +52 -0
  62. package/dist/collision/collision-system.d.ts.map +1 -0
  63. package/dist/collision/collision-system.js +278 -0
  64. package/dist/collision/collision-system.js.map +1 -0
  65. package/dist/collision/events/collision-emitter.d.ts +38 -0
  66. package/dist/collision/events/collision-emitter.d.ts.map +1 -0
  67. package/dist/collision/events/collision-emitter.js +47 -0
  68. package/dist/collision/events/collision-emitter.js.map +1 -0
  69. package/dist/collision/index.d.ts +13 -0
  70. package/dist/collision/index.d.ts.map +1 -0
  71. package/dist/collision/index.js +11 -0
  72. package/dist/collision/index.js.map +1 -0
  73. package/dist/collision/narrowphase/detector.d.ts +26 -0
  74. package/dist/collision/narrowphase/detector.d.ts.map +1 -0
  75. package/dist/collision/narrowphase/detector.js +70 -0
  76. package/dist/collision/narrowphase/detector.js.map +1 -0
  77. package/dist/collision/narrowphase/shapes.d.ts +91 -0
  78. package/dist/collision/narrowphase/shapes.d.ts.map +1 -0
  79. package/dist/collision/narrowphase/shapes.js +52 -0
  80. package/dist/collision/narrowphase/shapes.js.map +1 -0
  81. package/dist/collision/physics/physics-body.d.ts +38 -0
  82. package/dist/collision/physics/physics-body.d.ts.map +1 -0
  83. package/dist/collision/physics/physics-body.js +53 -0
  84. package/dist/collision/physics/physics-body.js.map +1 -0
  85. package/dist/collision/physics/physics-system.d.ts +23 -0
  86. package/dist/collision/physics/physics-system.d.ts.map +1 -0
  87. package/dist/collision/physics/physics-system.js +86 -0
  88. package/dist/collision/physics/physics-system.js.map +1 -0
  89. package/dist/collision/physics/resolver.d.ts +16 -0
  90. package/dist/collision/physics/resolver.d.ts.map +1 -0
  91. package/dist/collision/physics/resolver.js +91 -0
  92. package/dist/collision/physics/resolver.js.map +1 -0
  93. package/dist/collision/types.d.ts +22 -0
  94. package/dist/collision/types.d.ts.map +1 -0
  95. package/dist/collision/types.js +2 -0
  96. package/dist/collision/types.js.map +1 -0
  97. package/dist/core/game-config.d.ts +34 -0
  98. package/dist/core/game-config.d.ts.map +1 -0
  99. package/dist/core/game-config.js +31 -0
  100. package/dist/core/game-config.js.map +1 -0
  101. package/dist/core/game.d.ts +86 -0
  102. package/dist/core/game.d.ts.map +1 -0
  103. package/dist/core/game.js +166 -0
  104. package/dist/core/game.js.map +1 -0
  105. package/dist/core/index.d.ts +6 -0
  106. package/dist/core/index.d.ts.map +1 -0
  107. package/dist/core/index.js +6 -0
  108. package/dist/core/index.js.map +1 -0
  109. package/dist/core/scene-manager.d.ts +28 -0
  110. package/dist/core/scene-manager.d.ts.map +1 -0
  111. package/dist/core/scene-manager.js +65 -0
  112. package/dist/core/scene-manager.js.map +1 -0
  113. package/dist/core/scene.d.ts +43 -0
  114. package/dist/core/scene.d.ts.map +1 -0
  115. package/dist/core/scene.js +48 -0
  116. package/dist/core/scene.js.map +1 -0
  117. package/dist/core/theme.d.ts +63 -0
  118. package/dist/core/theme.d.ts.map +1 -0
  119. package/dist/core/theme.js +59 -0
  120. package/dist/core/theme.js.map +1 -0
  121. package/dist/errors/animation.d.ts +24 -0
  122. package/dist/errors/animation.d.ts.map +1 -0
  123. package/dist/errors/animation.js +29 -0
  124. package/dist/errors/animation.js.map +1 -0
  125. package/dist/errors/assets.d.ts +34 -0
  126. package/dist/errors/assets.d.ts.map +1 -0
  127. package/dist/errors/assets.js +41 -0
  128. package/dist/errors/assets.js.map +1 -0
  129. package/dist/errors/base.d.ts +12 -0
  130. package/dist/errors/base.d.ts.map +1 -0
  131. package/dist/errors/base.js +15 -0
  132. package/dist/errors/base.js.map +1 -0
  133. package/dist/errors/env.d.ts +24 -0
  134. package/dist/errors/env.d.ts.map +1 -0
  135. package/dist/errors/env.js +29 -0
  136. package/dist/errors/env.js.map +1 -0
  137. package/dist/errors/hook.d.ts +46 -0
  138. package/dist/errors/hook.d.ts.map +1 -0
  139. package/dist/errors/hook.js +55 -0
  140. package/dist/errors/hook.js.map +1 -0
  141. package/dist/errors/index.d.ts +11 -0
  142. package/dist/errors/index.d.ts.map +1 -0
  143. package/dist/errors/index.js +11 -0
  144. package/dist/errors/index.js.map +1 -0
  145. package/dist/errors/jsx.d.ts +26 -0
  146. package/dist/errors/jsx.d.ts.map +1 -0
  147. package/dist/errors/jsx.js +45 -0
  148. package/dist/errors/jsx.js.map +1 -0
  149. package/dist/errors/lifecycle.d.ts +35 -0
  150. package/dist/errors/lifecycle.d.ts.map +1 -0
  151. package/dist/errors/lifecycle.js +42 -0
  152. package/dist/errors/lifecycle.js.map +1 -0
  153. package/dist/errors/math.d.ts +24 -0
  154. package/dist/errors/math.d.ts.map +1 -0
  155. package/dist/errors/math.js +34 -0
  156. package/dist/errors/math.js.map +1 -0
  157. package/dist/errors/node.d.ts +68 -0
  158. package/dist/errors/node.d.ts.map +1 -0
  159. package/dist/errors/node.js +87 -0
  160. package/dist/errors/node.js.map +1 -0
  161. package/dist/errors/scene.d.ts +35 -0
  162. package/dist/errors/scene.d.ts.map +1 -0
  163. package/dist/errors/scene.js +42 -0
  164. package/dist/errors/scene.js.map +1 -0
  165. package/dist/events/event.d.ts +106 -0
  166. package/dist/events/event.d.ts.map +1 -0
  167. package/dist/events/event.js +125 -0
  168. package/dist/events/event.js.map +1 -0
  169. package/dist/events/index.d.ts +2 -0
  170. package/dist/events/index.d.ts.map +1 -0
  171. package/dist/events/index.js +2 -0
  172. package/dist/events/index.js.map +1 -0
  173. package/dist/events/types.d.ts +20 -0
  174. package/dist/events/types.d.ts.map +1 -0
  175. package/dist/events/types.js +2 -0
  176. package/dist/events/types.js.map +1 -0
  177. package/dist/hooks/context.d.ts +15 -0
  178. package/dist/hooks/context.d.ts.map +1 -0
  179. package/dist/hooks/context.js +26 -0
  180. package/dist/hooks/context.js.map +1 -0
  181. package/dist/hooks/deriveds/by-nodes/index.d.ts +7 -0
  182. package/dist/hooks/deriveds/by-nodes/index.d.ts.map +1 -0
  183. package/dist/hooks/deriveds/by-nodes/index.js +7 -0
  184. package/dist/hooks/deriveds/by-nodes/index.js.map +1 -0
  185. package/dist/hooks/deriveds/by-nodes/use-animation.d.ts +44 -0
  186. package/dist/hooks/deriveds/by-nodes/use-animation.d.ts.map +1 -0
  187. package/dist/hooks/deriveds/by-nodes/use-animation.js +61 -0
  188. package/dist/hooks/deriveds/by-nodes/use-animation.js.map +1 -0
  189. package/dist/hooks/deriveds/by-nodes/use-audio.d.ts +33 -0
  190. package/dist/hooks/deriveds/by-nodes/use-audio.d.ts.map +1 -0
  191. package/dist/hooks/deriveds/by-nodes/use-audio.js +43 -0
  192. package/dist/hooks/deriveds/by-nodes/use-audio.js.map +1 -0
  193. package/dist/hooks/deriveds/by-nodes/use-clickable.d.ts +32 -0
  194. package/dist/hooks/deriveds/by-nodes/use-clickable.d.ts.map +1 -0
  195. package/dist/hooks/deriveds/by-nodes/use-clickable.js +43 -0
  196. package/dist/hooks/deriveds/by-nodes/use-clickable.js.map +1 -0
  197. package/dist/hooks/deriveds/by-nodes/use-collider.d.ts +35 -0
  198. package/dist/hooks/deriveds/by-nodes/use-collider.d.ts.map +1 -0
  199. package/dist/hooks/deriveds/by-nodes/use-collider.js +55 -0
  200. package/dist/hooks/deriveds/by-nodes/use-collider.js.map +1 -0
  201. package/dist/hooks/deriveds/by-nodes/use-ray-cast.d.ts +35 -0
  202. package/dist/hooks/deriveds/by-nodes/use-ray-cast.d.ts.map +1 -0
  203. package/dist/hooks/deriveds/by-nodes/use-ray-cast.js +47 -0
  204. package/dist/hooks/deriveds/by-nodes/use-ray-cast.js.map +1 -0
  205. package/dist/hooks/deriveds/by-nodes/use-timer.d.ts +34 -0
  206. package/dist/hooks/deriveds/by-nodes/use-timer.d.ts.map +1 -0
  207. package/dist/hooks/deriveds/by-nodes/use-timer.js +48 -0
  208. package/dist/hooks/deriveds/by-nodes/use-timer.js.map +1 -0
  209. package/dist/hooks/deriveds/index.d.ts +5 -0
  210. package/dist/hooks/deriveds/index.d.ts.map +1 -0
  211. package/dist/hooks/deriveds/index.js +5 -0
  212. package/dist/hooks/deriveds/index.js.map +1 -0
  213. package/dist/hooks/deriveds/use-condition.d.ts +37 -0
  214. package/dist/hooks/deriveds/use-condition.d.ts.map +1 -0
  215. package/dist/hooks/deriveds/use-condition.js +47 -0
  216. package/dist/hooks/deriveds/use-condition.js.map +1 -0
  217. package/dist/hooks/deriveds/use-match.d.ts +26 -0
  218. package/dist/hooks/deriveds/use-match.d.ts.map +1 -0
  219. package/dist/hooks/deriveds/use-match.js +38 -0
  220. package/dist/hooks/deriveds/use-match.js.map +1 -0
  221. package/dist/hooks/deriveds/use-partial-node.d.ts +22 -0
  222. package/dist/hooks/deriveds/use-partial-node.d.ts.map +1 -0
  223. package/dist/hooks/deriveds/use-partial-node.js +25 -0
  224. package/dist/hooks/deriveds/use-partial-node.js.map +1 -0
  225. package/dist/hooks/deriveds/use-when.d.ts +28 -0
  226. package/dist/hooks/deriveds/use-when.d.ts.map +1 -0
  227. package/dist/hooks/deriveds/use-when.js +35 -0
  228. package/dist/hooks/deriveds/use-when.js.map +1 -0
  229. package/dist/hooks/index.d.ts +16 -0
  230. package/dist/hooks/index.d.ts.map +1 -0
  231. package/dist/hooks/index.js +16 -0
  232. package/dist/hooks/index.js.map +1 -0
  233. package/dist/hooks/use-child.d.ts +24 -0
  234. package/dist/hooks/use-child.d.ts.map +1 -0
  235. package/dist/hooks/use-child.js +37 -0
  236. package/dist/hooks/use-child.js.map +1 -0
  237. package/dist/hooks/use-computed.d.ts +28 -0
  238. package/dist/hooks/use-computed.d.ts.map +1 -0
  239. package/dist/hooks/use-computed.js +41 -0
  240. package/dist/hooks/use-computed.js.map +1 -0
  241. package/dist/hooks/use-context.d.ts +58 -0
  242. package/dist/hooks/use-context.d.ts.map +1 -0
  243. package/dist/hooks/use-context.js +77 -0
  244. package/dist/hooks/use-context.js.map +1 -0
  245. package/dist/hooks/use-effect.d.ts +24 -0
  246. package/dist/hooks/use-effect.d.ts.map +1 -0
  247. package/dist/hooks/use-effect.js +63 -0
  248. package/dist/hooks/use-effect.js.map +1 -0
  249. package/dist/hooks/use-event.d.ts +29 -0
  250. package/dist/hooks/use-event.d.ts.map +1 -0
  251. package/dist/hooks/use-event.js +30 -0
  252. package/dist/hooks/use-event.js.map +1 -0
  253. package/dist/hooks/use-game.d.ts +17 -0
  254. package/dist/hooks/use-game.d.ts.map +1 -0
  255. package/dist/hooks/use-game.js +35 -0
  256. package/dist/hooks/use-game.js.map +1 -0
  257. package/dist/hooks/use-mount.d.ts +21 -0
  258. package/dist/hooks/use-mount.d.ts.map +1 -0
  259. package/dist/hooks/use-mount.js +33 -0
  260. package/dist/hooks/use-mount.js.map +1 -0
  261. package/dist/hooks/use-node.d.ts +42 -0
  262. package/dist/hooks/use-node.d.ts.map +1 -0
  263. package/dist/hooks/use-node.js +63 -0
  264. package/dist/hooks/use-node.js.map +1 -0
  265. package/dist/hooks/use-ref.d.ts +27 -0
  266. package/dist/hooks/use-ref.d.ts.map +1 -0
  267. package/dist/hooks/use-ref.js +33 -0
  268. package/dist/hooks/use-ref.js.map +1 -0
  269. package/dist/hooks/use-script.d.ts +33 -0
  270. package/dist/hooks/use-script.d.ts.map +1 -0
  271. package/dist/hooks/use-script.js +40 -0
  272. package/dist/hooks/use-script.js.map +1 -0
  273. package/dist/hooks/use-signal.d.ts +25 -0
  274. package/dist/hooks/use-signal.d.ts.map +1 -0
  275. package/dist/hooks/use-signal.js +36 -0
  276. package/dist/hooks/use-signal.js.map +1 -0
  277. package/dist/hooks/use-spawn.d.ts +27 -0
  278. package/dist/hooks/use-spawn.d.ts.map +1 -0
  279. package/dist/hooks/use-spawn.js +39 -0
  280. package/dist/hooks/use-spawn.js.map +1 -0
  281. package/dist/hooks/use-trigger.d.ts +51 -0
  282. package/dist/hooks/use-trigger.d.ts.map +1 -0
  283. package/dist/hooks/use-trigger.js +68 -0
  284. package/dist/hooks/use-trigger.js.map +1 -0
  285. package/dist/index.d.ts +11 -0
  286. package/dist/index.d.ts.map +1 -0
  287. package/dist/index.js +11 -0
  288. package/dist/index.js.map +1 -0
  289. package/dist/input/input.d.ts +46 -0
  290. package/dist/input/input.d.ts.map +1 -0
  291. package/dist/input/input.js +159 -0
  292. package/dist/input/input.js.map +1 -0
  293. package/dist/jsx/components/fragment.d.ts +3 -0
  294. package/dist/jsx/components/fragment.d.ts.map +1 -0
  295. package/dist/jsx/components/fragment.js +7 -0
  296. package/dist/jsx/components/fragment.js.map +1 -0
  297. package/dist/jsx/components/game.d.ts +21 -0
  298. package/dist/jsx/components/game.d.ts.map +1 -0
  299. package/dist/jsx/components/game.js +17 -0
  300. package/dist/jsx/components/game.js.map +1 -0
  301. package/dist/jsx/components/index.d.ts +5 -0
  302. package/dist/jsx/components/index.d.ts.map +1 -0
  303. package/dist/jsx/components/index.js +5 -0
  304. package/dist/jsx/components/index.js.map +1 -0
  305. package/dist/jsx/components/list.d.ts +88 -0
  306. package/dist/jsx/components/list.d.ts.map +1 -0
  307. package/dist/jsx/components/list.js +93 -0
  308. package/dist/jsx/components/list.js.map +1 -0
  309. package/dist/jsx/components/scene.d.ts +40 -0
  310. package/dist/jsx/components/scene.d.ts.map +1 -0
  311. package/dist/jsx/components/scene.js +20 -0
  312. package/dist/jsx/components/scene.js.map +1 -0
  313. package/dist/jsx/index.d.ts +5 -0
  314. package/dist/jsx/index.d.ts.map +1 -0
  315. package/dist/jsx/index.js +5 -0
  316. package/dist/jsx/index.js.map +1 -0
  317. package/dist/jsx/jsx.d.ts +3 -0
  318. package/dist/jsx/jsx.d.ts.map +1 -0
  319. package/dist/jsx/jsx.js +4 -0
  320. package/dist/jsx/jsx.js.map +1 -0
  321. package/dist/jsx/render/game.d.ts +41 -0
  322. package/dist/jsx/render/game.d.ts.map +1 -0
  323. package/dist/jsx/render/game.js +86 -0
  324. package/dist/jsx/render/game.js.map +1 -0
  325. package/dist/jsx/render/index.d.ts +3 -0
  326. package/dist/jsx/render/index.d.ts.map +1 -0
  327. package/dist/jsx/render/index.js +3 -0
  328. package/dist/jsx/render/index.js.map +1 -0
  329. package/dist/jsx/render/to-nodes.d.ts +10 -0
  330. package/dist/jsx/render/to-nodes.d.ts.map +1 -0
  331. package/dist/jsx/render/to-nodes.js +52 -0
  332. package/dist/jsx/render/to-nodes.js.map +1 -0
  333. package/dist/jsx/render/types/class-component.d.ts +4 -0
  334. package/dist/jsx/render/types/class-component.d.ts.map +1 -0
  335. package/dist/jsx/render/types/class-component.js +8 -0
  336. package/dist/jsx/render/types/class-component.js.map +1 -0
  337. package/dist/jsx/render/types/func-components.d.ts +4 -0
  338. package/dist/jsx/render/types/func-components.d.ts.map +1 -0
  339. package/dist/jsx/render/types/func-components.js +8 -0
  340. package/dist/jsx/render/types/func-components.js.map +1 -0
  341. package/dist/jsx/render/types/instrinsic-elements.d.ts +6 -0
  342. package/dist/jsx/render/types/instrinsic-elements.d.ts.map +1 -0
  343. package/dist/jsx/render/types/instrinsic-elements.js +41 -0
  344. package/dist/jsx/render/types/instrinsic-elements.js.map +1 -0
  345. package/dist/jsx/types.d.ts +41 -0
  346. package/dist/jsx/types.d.ts.map +1 -0
  347. package/dist/jsx/types.js +2 -0
  348. package/dist/jsx/types.js.map +1 -0
  349. package/dist/jsx/utils.d.ts +4 -0
  350. package/dist/jsx/utils.d.ts.map +1 -0
  351. package/dist/jsx/utils.js +15 -0
  352. package/dist/jsx/utils.js.map +1 -0
  353. package/dist/jsx-runtime.d.ts +6 -0
  354. package/dist/jsx-runtime.d.ts.map +1 -0
  355. package/dist/jsx-runtime.js +6 -0
  356. package/dist/jsx-runtime.js.map +1 -0
  357. package/dist/math/index.d.ts +3 -0
  358. package/dist/math/index.d.ts.map +1 -0
  359. package/dist/math/index.js +2 -0
  360. package/dist/math/index.js.map +1 -0
  361. package/dist/math/types.d.ts +13 -0
  362. package/dist/math/types.d.ts.map +1 -0
  363. package/dist/math/types.js +2 -0
  364. package/dist/math/types.js.map +1 -0
  365. package/dist/math/vector2.d.ts +145 -0
  366. package/dist/math/vector2.d.ts.map +1 -0
  367. package/dist/math/vector2.js +164 -0
  368. package/dist/math/vector2.js.map +1 -0
  369. package/dist/nodes/_node.d.ts +283 -0
  370. package/dist/nodes/_node.d.ts.map +1 -0
  371. package/dist/nodes/_node.js +371 -0
  372. package/dist/nodes/_node.js.map +1 -0
  373. package/dist/nodes/animation-player.d.ts +208 -0
  374. package/dist/nodes/animation-player.d.ts.map +1 -0
  375. package/dist/nodes/animation-player.js +249 -0
  376. package/dist/nodes/animation-player.js.map +1 -0
  377. package/dist/nodes/audio-player.d.ts +128 -0
  378. package/dist/nodes/audio-player.d.ts.map +1 -0
  379. package/dist/nodes/audio-player.js +173 -0
  380. package/dist/nodes/audio-player.js.map +1 -0
  381. package/dist/nodes/group.d.ts +55 -0
  382. package/dist/nodes/group.d.ts.map +1 -0
  383. package/dist/nodes/group.js +54 -0
  384. package/dist/nodes/group.js.map +1 -0
  385. package/dist/nodes/index.d.ts +8 -0
  386. package/dist/nodes/index.d.ts.map +1 -0
  387. package/dist/nodes/index.js +7 -0
  388. package/dist/nodes/index.js.map +1 -0
  389. package/dist/nodes/lib/enum.d.ts +42 -0
  390. package/dist/nodes/lib/enum.d.ts.map +1 -0
  391. package/dist/nodes/lib/enum.js +43 -0
  392. package/dist/nodes/lib/enum.js.map +1 -0
  393. package/dist/nodes/lib/index.d.ts +5 -0
  394. package/dist/nodes/lib/index.d.ts.map +1 -0
  395. package/dist/nodes/lib/index.js +5 -0
  396. package/dist/nodes/lib/index.js.map +1 -0
  397. package/dist/nodes/lib/registry.d.ts +43 -0
  398. package/dist/nodes/lib/registry.d.ts.map +1 -0
  399. package/dist/nodes/lib/registry.js +46 -0
  400. package/dist/nodes/lib/registry.js.map +1 -0
  401. package/dist/nodes/lib/types.d.ts +89 -0
  402. package/dist/nodes/lib/types.d.ts.map +1 -0
  403. package/dist/nodes/lib/types.js +2 -0
  404. package/dist/nodes/lib/types.js.map +1 -0
  405. package/dist/nodes/lib/utils.d.ts +35 -0
  406. package/dist/nodes/lib/utils.d.ts.map +1 -0
  407. package/dist/nodes/lib/utils.js +58 -0
  408. package/dist/nodes/lib/utils.js.map +1 -0
  409. package/dist/nodes/node2d/_node2d.d.ts +59 -0
  410. package/dist/nodes/node2d/_node2d.d.ts.map +1 -0
  411. package/dist/nodes/node2d/_node2d.js +57 -0
  412. package/dist/nodes/node2d/_node2d.js.map +1 -0
  413. package/dist/nodes/node2d/camera.d.ts +64 -0
  414. package/dist/nodes/node2d/camera.d.ts.map +1 -0
  415. package/dist/nodes/node2d/camera.js +72 -0
  416. package/dist/nodes/node2d/camera.js.map +1 -0
  417. package/dist/nodes/node2d/clickable.d.ts +96 -0
  418. package/dist/nodes/node2d/clickable.d.ts.map +1 -0
  419. package/dist/nodes/node2d/clickable.js +117 -0
  420. package/dist/nodes/node2d/clickable.js.map +1 -0
  421. package/dist/nodes/node2d/collider.d.ts +96 -0
  422. package/dist/nodes/node2d/collider.d.ts.map +1 -0
  423. package/dist/nodes/node2d/collider.js +116 -0
  424. package/dist/nodes/node2d/collider.js.map +1 -0
  425. package/dist/nodes/node2d/index.d.ts +12 -0
  426. package/dist/nodes/node2d/index.d.ts.map +1 -0
  427. package/dist/nodes/node2d/index.js +11 -0
  428. package/dist/nodes/node2d/index.js.map +1 -0
  429. package/dist/nodes/node2d/lib/index.d.ts +2 -0
  430. package/dist/nodes/node2d/lib/index.d.ts.map +1 -0
  431. package/dist/nodes/node2d/lib/index.js +2 -0
  432. package/dist/nodes/node2d/lib/index.js.map +1 -0
  433. package/dist/nodes/node2d/lib/utils.d.ts +4 -0
  434. package/dist/nodes/node2d/lib/utils.d.ts.map +1 -0
  435. package/dist/nodes/node2d/lib/utils.js +14 -0
  436. package/dist/nodes/node2d/lib/utils.js.map +1 -0
  437. package/dist/nodes/node2d/ray-cast.d.ts +115 -0
  438. package/dist/nodes/node2d/ray-cast.d.ts.map +1 -0
  439. package/dist/nodes/node2d/ray-cast.js +129 -0
  440. package/dist/nodes/node2d/ray-cast.js.map +1 -0
  441. package/dist/nodes/node2d/rectangle.d.ts +87 -0
  442. package/dist/nodes/node2d/rectangle.d.ts.map +1 -0
  443. package/dist/nodes/node2d/rectangle.js +60 -0
  444. package/dist/nodes/node2d/rectangle.js.map +1 -0
  445. package/dist/nodes/node2d/rigid-body.d.ts +65 -0
  446. package/dist/nodes/node2d/rigid-body.d.ts.map +1 -0
  447. package/dist/nodes/node2d/rigid-body.js +56 -0
  448. package/dist/nodes/node2d/rigid-body.js.map +1 -0
  449. package/dist/nodes/node2d/sprite.d.ts +285 -0
  450. package/dist/nodes/node2d/sprite.d.ts.map +1 -0
  451. package/dist/nodes/node2d/sprite.js +226 -0
  452. package/dist/nodes/node2d/sprite.js.map +1 -0
  453. package/dist/nodes/node2d/text.d.ts +62 -0
  454. package/dist/nodes/node2d/text.d.ts.map +1 -0
  455. package/dist/nodes/node2d/text.js +52 -0
  456. package/dist/nodes/node2d/text.js.map +1 -0
  457. package/dist/nodes/node2d/transform.d.ts +32 -0
  458. package/dist/nodes/node2d/transform.d.ts.map +1 -0
  459. package/dist/nodes/node2d/transform.js +30 -0
  460. package/dist/nodes/node2d/transform.js.map +1 -0
  461. package/dist/nodes/timer.d.ts +107 -0
  462. package/dist/nodes/timer.d.ts.map +1 -0
  463. package/dist/nodes/timer.js +108 -0
  464. package/dist/nodes/timer.js.map +1 -0
  465. package/dist/reactivity/index.d.ts +5 -0
  466. package/dist/reactivity/index.d.ts.map +1 -0
  467. package/dist/reactivity/index.js +5 -0
  468. package/dist/reactivity/index.js.map +1 -0
  469. package/dist/reactivity/reactive.d.ts +4 -0
  470. package/dist/reactivity/reactive.d.ts.map +1 -0
  471. package/dist/reactivity/reactive.js +50 -0
  472. package/dist/reactivity/reactive.js.map +1 -0
  473. package/dist/reactivity/register.d.ts +7 -0
  474. package/dist/reactivity/register.d.ts.map +1 -0
  475. package/dist/reactivity/register.js +18 -0
  476. package/dist/reactivity/register.js.map +1 -0
  477. package/dist/reactivity/signal.d.ts +126 -0
  478. package/dist/reactivity/signal.d.ts.map +1 -0
  479. package/dist/reactivity/signal.js +152 -0
  480. package/dist/reactivity/signal.js.map +1 -0
  481. package/dist/reactivity/types.d.ts +31 -0
  482. package/dist/reactivity/types.d.ts.map +1 -0
  483. package/dist/reactivity/types.js +2 -0
  484. package/dist/reactivity/types.js.map +1 -0
  485. package/dist/scripts/index.d.ts +2 -0
  486. package/dist/scripts/index.d.ts.map +1 -0
  487. package/dist/scripts/index.js +2 -0
  488. package/dist/scripts/index.js.map +1 -0
  489. package/dist/scripts/script.d.ts +80 -0
  490. package/dist/scripts/script.d.ts.map +1 -0
  491. package/dist/scripts/script.js +75 -0
  492. package/dist/scripts/script.js.map +1 -0
  493. package/dist/utils/dpr.d.ts +2 -0
  494. package/dist/utils/dpr.d.ts.map +1 -0
  495. package/dist/utils/dpr.js +14 -0
  496. package/dist/utils/dpr.js.map +1 -0
  497. package/dist/utils/ternaries.d.ts +6 -0
  498. package/dist/utils/ternaries.d.ts.map +1 -0
  499. package/dist/utils/ternaries.js +17 -0
  500. package/dist/utils/ternaries.js.map +1 -0
  501. package/package.json +56 -0
@@ -0,0 +1,285 @@
1
+ import { type Texture } from '../../assets/texture.js';
2
+ import { Vector2, type VectorLike } from '../../math/vector2.js';
3
+ import type { Color } from '../../math/types.js';
4
+ import { PrimaryNode } from '../lib/enum.js';
5
+ import { Node2D, type Node2DOptions } from './_node2d.js';
6
+ import type { Reactive } from '../../reactivity/types.js';
7
+ export interface SpriteOptions extends Node2DOptions<PrimaryNode.Sprite> {
8
+ /**
9
+ * The **`textureId`** property of `Sprite` represents the sprite's texture.
10
+ * The texture must be loaded with `loadTexture()` first.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * const BALL_TEXTURE = await loadTexture('/assets/ball.png')
15
+ *
16
+ * function Ball() {
17
+ * return <sprite textureId={BALL_TEXTURE} />
18
+ * }
19
+ * ```
20
+ */
21
+ textureId?: Reactive<symbol>;
22
+ /**
23
+ * The **`margin`** property of `Sprite` represents the texture offset.
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * const IDLE_TEXTURE = await loadTexture('/assets/idle.png')
28
+ *
29
+ * function Player() {
30
+ * return (
31
+ * <sprite textureId={IDLE_TEXTURE} margin={new Vector2(16, 0)} />
32
+ * )
33
+ * }
34
+ * ```
35
+ */
36
+ margin?: Reactive<VectorLike>;
37
+ /**
38
+ * The **`sourceSize`** property of `Sprite` represents the source size to render.
39
+ *
40
+ * @default texture.size
41
+ *
42
+ * @example
43
+ * ```tsx
44
+ * const IDLE_TEXTURE = await loadTexture('/assets/idle.png')
45
+ *
46
+ * function Player() {
47
+ * return (
48
+ * <sprite
49
+ * textureId={IDLE_TEXTURE}
50
+ * margin={new Vector2(16, 0)}
51
+ * sourceSize={new Vector2(16, 16)}
52
+ * />
53
+ * )
54
+ * }
55
+ * ```
56
+ */
57
+ sourceSize?: Reactive<VectorLike>;
58
+ /**
59
+ * The **`displaySize`** property of `Sprite` represents the display size.
60
+ *
61
+ * @default this.sourceSize
62
+ *
63
+ * @example
64
+ * ```tsx
65
+ * const IDLE_TEXTURE = await loadTexture('/assets/idle.png')
66
+ *
67
+ * function Player() {
68
+ * return (
69
+ * <sprite
70
+ * textureId={IDLE_TEXTURE}
71
+ * margin={new Vector2(16, 0)}
72
+ * sourceSize={new Vector2(16, 16)}
73
+ * displaySize={new Vector2(32, 32)}
74
+ * />
75
+ * )
76
+ * }
77
+ * ```
78
+ */
79
+ displaySize?: Reactive<VectorLike>;
80
+ /** Whether to flip the sprite horizontally */
81
+ flipX?: Reactive<boolean>;
82
+ /** Whether to flip the sprite vertically */
83
+ flipY?: Reactive<boolean>;
84
+ /**
85
+ * The **`brightness`** filter adjusts the sprite's brightness.
86
+ * `0` = black, `1` = base, `2` = white.
87
+ *
88
+ * @default 1
89
+ *
90
+ * @example
91
+ * ```tsx
92
+ * // Make sprite 50% brighter
93
+ * <sprite textureId={TEX} brightness={1.5} />
94
+ * ```
95
+ */
96
+ brightness?: Reactive<number>;
97
+ /**
98
+ * The **`grayscale`** filter converts the sprite to grayscale.
99
+ * `0` = full color, `1` = fully grayscale.
100
+ *
101
+ * @default 0
102
+ *
103
+ * @example
104
+ * ```tsx
105
+ * // Half grayscale
106
+ * <sprite textureId={TEX} grayscale={0.5} />
107
+ * ```
108
+ */
109
+ grayscale?: Reactive<number>;
110
+ /**
111
+ * The **`modulate`** filter multiplies the sprite's colors by an RGBA tint.
112
+ * Each channel ranges from `0` (no intensity) to `1` (full intensity).
113
+ *
114
+ * @default [1, 1, 1, 1]
115
+ *
116
+ * @example
117
+ * ```tsx
118
+ * // Orange tint
119
+ * <sprite textureId={TEX} modulate={[1, 0.5, 0, 1]} />
120
+ *
121
+ * // Red channel only
122
+ * <sprite textureId={TEX} modulate={[1, 0, 0, 1]} />
123
+ *
124
+ * // Semi-transparent
125
+ * <sprite textureId={TEX} modulate={[1, 1, 1, 0.5]} />
126
+ * ```
127
+ */
128
+ modulate?: Reactive<Color>;
129
+ /**
130
+ * The **`contrast`** filter adjusts the sprite's contrast.
131
+ * `0` = no contrast, `1` = base, `2` = double contrast.
132
+ *
133
+ * @default 1
134
+ *
135
+ * @example
136
+ * ```tsx
137
+ * <sprite textureId={TEX} contrast={1.5} />
138
+ * ```
139
+ */
140
+ contrast?: Reactive<number>;
141
+ /**
142
+ * The **`saturate`** filter adjusts the sprite's color saturation.
143
+ * `0` = desaturated, `1` = base, `2` = double saturation.
144
+ *
145
+ * @default 1
146
+ *
147
+ * @example
148
+ * ```tsx
149
+ * <sprite textureId={TEX} saturate={0.5} />
150
+ * ```
151
+ */
152
+ saturate?: Reactive<number>;
153
+ /**
154
+ * The **`hueRotate`** filter rotates the sprite's hue in degrees.
155
+ * `0` = no rotation, `360` = full rotation.
156
+ *
157
+ * @default 0
158
+ *
159
+ * @example
160
+ * ```tsx
161
+ * // Rotate hue 90 degrees
162
+ * <sprite textureId={TEX} hueRotate={90} />
163
+ * ```
164
+ */
165
+ hueRotate?: Reactive<number>;
166
+ /**
167
+ * The **`invert`** filter inverts the sprite's colors.
168
+ * `0` = normal, `1` = fully inverted.
169
+ *
170
+ * @default 0
171
+ *
172
+ * @example
173
+ * ```tsx
174
+ * <sprite textureId={TEX} invert={1} />
175
+ * ```
176
+ */
177
+ invert?: Reactive<number>;
178
+ /**
179
+ * The **`opacity`** filter adjusts the sprite's opacity.
180
+ * `0` = fully transparent, `1` = fully opaque.
181
+ *
182
+ * @default 1
183
+ *
184
+ * @example
185
+ * ```tsx
186
+ * // 50% transparent
187
+ * <sprite textureId={TEX} opacity={0.5} />
188
+ * ```
189
+ */
190
+ opacity?: Reactive<number>;
191
+ }
192
+ /**
193
+ * The **`Sprite`** node displays a texture or sprite in the game world.
194
+ * It supports texture atlases with margin/sourceSize, display scaling, flipping, and visual filters.
195
+ *
196
+ * @example
197
+ * ```tsx
198
+ * import { loadTexture } from 'dinix'
199
+ * import { useNode } from 'dinix/hooks'
200
+ *
201
+ * const PLAYER_TEXTURE = await loadTexture('/assets/player.png')
202
+ *
203
+ * function Player() {
204
+ * const sprite = useNode(PrimaryNode.Sprite)
205
+ *
206
+ * return (
207
+ * <sprite
208
+ * ref={sprite}
209
+ * textureId={PLAYER_TEXTURE}
210
+ * sourceSize={new Vector2(32, 32)}
211
+ * displaySize={new Vector2(64, 64)}
212
+ * brightness={1.2}
213
+ * modulate={[1, 0.5, 0, 1]}
214
+ * />
215
+ * )
216
+ * }
217
+ * ```
218
+ */
219
+ export declare class Sprite extends Node2D<PrimaryNode.Sprite> {
220
+ #private;
221
+ /**
222
+ * The **`margin`** property defines the texture offset within the source image.
223
+ * Useful for sprite sheets where each frame has a different position.
224
+ */
225
+ margin?: Vector2 | undefined;
226
+ /**
227
+ * The **`sourceSize`** property defines the region of the texture to render.
228
+ * Defaults to the full texture size if not set.
229
+ */
230
+ sourceSize?: Vector2 | undefined;
231
+ /**
232
+ * The **`displaySize`** property defines the rendered size of the sprite.
233
+ * Defaults to `sourceSize` if not set.
234
+ */
235
+ displaySize?: Vector2 | undefined;
236
+ /**
237
+ * The **`flipX`** property controls horizontal mirroring of the sprite.
238
+ */
239
+ flipX: boolean;
240
+ /**
241
+ * The **`flipY`** property controls vertical mirroring of the sprite.
242
+ */
243
+ flipY: boolean;
244
+ /**
245
+ * Gets or sets the `textureId` of this sprite.
246
+ * Setting a new texture updates the sprite's visual immediately.
247
+ */
248
+ get textureId(): symbol | undefined;
249
+ set textureId(value: symbol | undefined);
250
+ /**
251
+ * The **`getTexture`** method returns the current texture.
252
+ * @returns The current `Texture` or `undefined` if no texture is set
253
+ */
254
+ getTexture(): Texture | undefined;
255
+ /** The **`brightness`** filter value. `0` = black, `1` = base, `2` = white. */
256
+ get brightness(): number;
257
+ set brightness(value: number);
258
+ /** The **`grayscale`** filter value. `0` = color, `1` = grayscale. */
259
+ get grayscale(): number;
260
+ set grayscale(value: number);
261
+ /** The **`modulate`** filter color `[r, g, b, a]` with values `0`-`1`. */
262
+ get modulate(): Color;
263
+ set modulate(value: Color);
264
+ /** The **`contrast`** filter value. `0` = no contrast, `1` = base, `2` = double. */
265
+ get contrast(): number;
266
+ set contrast(value: number);
267
+ /** The **`saturate`** filter value. `0` = desaturated, `1` = base, `2` = double. */
268
+ get saturate(): number;
269
+ set saturate(value: number);
270
+ /** The **`hueRotate`** filter value in degrees. `0` = no rotation, `360` = full. */
271
+ get hueRotate(): number;
272
+ set hueRotate(value: number);
273
+ /** The **`invert`** filter value. `0` = normal, `1` = fully inverted. */
274
+ get invert(): number;
275
+ set invert(value: number);
276
+ /** The **`opacity`** filter value. `0` = transparent, `1` = opaque. */
277
+ get opacity(): number;
278
+ set opacity(value: number);
279
+ constructor(options: SpriteOptions);
280
+ /** @internal Loads the texture when the sprite starts. */
281
+ start(): void;
282
+ /** @internal Draws the sprite texture with filters. */
283
+ draw(delta: number): void;
284
+ }
285
+ //# sourceMappingURL=sprite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprite.d.ts","sourceRoot":"","sources":["../../../src/nodes/node2d/sprite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ import { getTexture } from '../../assets/texture.js';
2
+ import { GameConfig } from '../../core/game-config.js';
3
+ import { vectorize, Vector2 } from '../../math/vector2.js';
4
+ import { applySignal, ns, propSignal } from '../../utils/ternaries.js';
5
+ import { PrimaryNode } from '../lib/enum.js';
6
+ import { Node2D } from './_node2d.js';
7
+ import { Nodes } from '../lib/registry.js';
8
+ /**
9
+ * The **`Sprite`** node displays a texture or sprite in the game world.
10
+ * It supports texture atlases with margin/sourceSize, display scaling, flipping, and visual filters.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * import { loadTexture } from 'dinix'
15
+ * import { useNode } from 'dinix/hooks'
16
+ *
17
+ * const PLAYER_TEXTURE = await loadTexture('/assets/player.png')
18
+ *
19
+ * function Player() {
20
+ * const sprite = useNode(PrimaryNode.Sprite)
21
+ *
22
+ * return (
23
+ * <sprite
24
+ * ref={sprite}
25
+ * textureId={PLAYER_TEXTURE}
26
+ * sourceSize={new Vector2(32, 32)}
27
+ * displaySize={new Vector2(64, 64)}
28
+ * brightness={1.2}
29
+ * modulate={[1, 0.5, 0, 1]}
30
+ * />
31
+ * )
32
+ * }
33
+ * ```
34
+ */
35
+ export class Sprite extends Node2D {
36
+ #textureId;
37
+ #texture;
38
+ /**
39
+ * The **`margin`** property defines the texture offset within the source image.
40
+ * Useful for sprite sheets where each frame has a different position.
41
+ */
42
+ margin;
43
+ /**
44
+ * The **`sourceSize`** property defines the region of the texture to render.
45
+ * Defaults to the full texture size if not set.
46
+ */
47
+ sourceSize;
48
+ /**
49
+ * The **`displaySize`** property defines the rendered size of the sprite.
50
+ * Defaults to `sourceSize` if not set.
51
+ */
52
+ displaySize;
53
+ /**
54
+ * The **`flipX`** property controls horizontal mirroring of the sprite.
55
+ */
56
+ flipX = false;
57
+ /**
58
+ * The **`flipY`** property controls vertical mirroring of the sprite.
59
+ */
60
+ flipY = false;
61
+ #brightness = 1;
62
+ #grayscale = 0;
63
+ #modulate = [1, 1, 1, 1];
64
+ #contrast = 1;
65
+ #saturate = 1;
66
+ #hueRotate = 0;
67
+ #invert = 0;
68
+ #opacity = 1;
69
+ /**
70
+ * Gets or sets the `textureId` of this sprite.
71
+ * Setting a new texture updates the sprite's visual immediately.
72
+ */
73
+ get textureId() {
74
+ return this.#textureId;
75
+ }
76
+ set textureId(value) {
77
+ if (this.textureId === value)
78
+ return;
79
+ if (value == null) {
80
+ this.#textureId = undefined;
81
+ this.#texture = undefined;
82
+ return;
83
+ }
84
+ this.#textureId = value;
85
+ if (this.isStarted) {
86
+ this.#texture = getTexture(value);
87
+ }
88
+ }
89
+ /**
90
+ * The **`getTexture`** method returns the current texture.
91
+ * @returns The current `Texture` or `undefined` if no texture is set
92
+ */
93
+ getTexture() {
94
+ return this.#texture;
95
+ }
96
+ /** The **`brightness`** filter value. `0` = black, `1` = base, `2` = white. */
97
+ get brightness() {
98
+ return this.#brightness;
99
+ }
100
+ set brightness(value) {
101
+ this.#brightness = value;
102
+ }
103
+ /** The **`grayscale`** filter value. `0` = color, `1` = grayscale. */
104
+ get grayscale() {
105
+ return this.#grayscale;
106
+ }
107
+ set grayscale(value) {
108
+ this.#grayscale = value;
109
+ }
110
+ /** The **`modulate`** filter color `[r, g, b, a]` with values `0`-`1`. */
111
+ get modulate() {
112
+ return this.#modulate;
113
+ }
114
+ set modulate(value) {
115
+ this.#modulate = value;
116
+ }
117
+ /** The **`contrast`** filter value. `0` = no contrast, `1` = base, `2` = double. */
118
+ get contrast() {
119
+ return this.#contrast;
120
+ }
121
+ set contrast(value) {
122
+ this.#contrast = value;
123
+ }
124
+ /** The **`saturate`** filter value. `0` = desaturated, `1` = base, `2` = double. */
125
+ get saturate() {
126
+ return this.#saturate;
127
+ }
128
+ set saturate(value) {
129
+ this.#saturate = value;
130
+ }
131
+ /** The **`hueRotate`** filter value in degrees. `0` = no rotation, `360` = full. */
132
+ get hueRotate() {
133
+ return this.#hueRotate;
134
+ }
135
+ set hueRotate(value) {
136
+ this.#hueRotate = value;
137
+ }
138
+ /** The **`invert`** filter value. `0` = normal, `1` = fully inverted. */
139
+ get invert() {
140
+ return this.#invert;
141
+ }
142
+ set invert(value) {
143
+ this.#invert = value;
144
+ }
145
+ /** The **`opacity`** filter value. `0` = transparent, `1` = opaque. */
146
+ get opacity() {
147
+ return this.#opacity;
148
+ }
149
+ set opacity(value) {
150
+ this.#opacity = value;
151
+ }
152
+ constructor(options) {
153
+ super(PrimaryNode.Sprite, options);
154
+ const vectors = (key) => {
155
+ return ns(options[key], (vector) => propSignal(this, key, applySignal(vector, vectorize)), this[key]);
156
+ };
157
+ this.margin = vectors('margin');
158
+ this.sourceSize = vectors('sourceSize');
159
+ this.displaySize = vectors('displaySize');
160
+ this.textureId = propSignal(this, 'textureId', options.textureId);
161
+ this.flipX = propSignal(this, 'flipX', options.flipX);
162
+ this.flipY = propSignal(this, 'flipY', options.flipY);
163
+ this.brightness = propSignal(this, 'brightness', options.brightness);
164
+ this.grayscale = propSignal(this, 'grayscale', options.grayscale);
165
+ this.modulate = propSignal(this, 'modulate', options.modulate);
166
+ this.contrast = propSignal(this, 'contrast', options.contrast);
167
+ this.saturate = propSignal(this, 'saturate', options.saturate);
168
+ this.hueRotate = propSignal(this, 'hueRotate', options.hueRotate);
169
+ this.invert = propSignal(this, 'invert', options.invert);
170
+ this.opacity = propSignal(this, 'opacity', options.opacity);
171
+ }
172
+ /** @internal Loads the texture when the sprite starts. */
173
+ start() {
174
+ if (this.textureId) {
175
+ this.#texture = getTexture(this.textureId);
176
+ }
177
+ super.start();
178
+ }
179
+ /** @internal Draws the sprite texture with filters. */
180
+ draw(delta) {
181
+ if (this.#texture != null) {
182
+ const ctx = GameConfig.ctx;
183
+ const filters = [];
184
+ if (this.#brightness !== 1)
185
+ filters.push(`brightness(${this.#brightness})`);
186
+ if (this.#grayscale !== 0)
187
+ filters.push(`grayscale(${this.#grayscale})`);
188
+ if (this.#contrast !== 1)
189
+ filters.push(`contrast(${this.#contrast})`);
190
+ if (this.#saturate !== 1)
191
+ filters.push(`saturate(${this.#saturate})`);
192
+ if (this.#hueRotate !== 0)
193
+ filters.push(`hue-rotate(${this.#hueRotate}deg)`);
194
+ if (this.#invert !== 0)
195
+ filters.push(`invert(${this.#invert})`);
196
+ if (this.#opacity !== 1)
197
+ filters.push(`opacity(${this.#opacity})`);
198
+ ctx.save();
199
+ if (filters.length > 0) {
200
+ ctx.filter = filters.join(' ');
201
+ }
202
+ const ds = this.displaySize ?? this.sourceSize;
203
+ this.#texture.draw({
204
+ position: this.position,
205
+ margin: this.margin,
206
+ sourceSize: this.sourceSize,
207
+ displaySize: this.displaySize?.toMultiplied(new Vector2(this.flipX ? -1 : 1, this.flipY ? -1 : 1)),
208
+ });
209
+ const isModulated = this.#modulate[0] !== 1 ||
210
+ this.#modulate[1] !== 1 ||
211
+ this.#modulate[2] !== 1 ||
212
+ this.#modulate[3] !== 1;
213
+ if (isModulated) {
214
+ ctx.filter = 'none';
215
+ ctx.globalCompositeOperation = 'multiply';
216
+ ctx.fillStyle = `rgba(${this.#modulate[0] * 255}, ${this.#modulate[1] * 255}, ${this.#modulate[2] * 255}, ${this.#modulate[3]})`;
217
+ ctx.fillRect(this.position.x, this.position.y, ds?.x ?? 0, ds?.y ?? 0);
218
+ ctx.globalCompositeOperation = 'source-over';
219
+ }
220
+ ctx.restore();
221
+ }
222
+ super.draw(delta);
223
+ }
224
+ }
225
+ Nodes.sprite = Sprite;
226
+ //# sourceMappingURL=sprite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprite.js","sourceRoot":"","sources":["../../../src/nodes/node2d/sprite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { TextStyle } from '../../core/theme.js';
2
+ import { PrimaryNode } from '../lib/enum.js';
3
+ import { Node2D, type Node2DOptions } from './_node2d.js';
4
+ import type { Reactive } from '../../reactivity/types.js';
5
+ /**
6
+ * Options for the `Text` node.
7
+ */
8
+ export interface TextOptions extends Node2DOptions<PrimaryNode.Text> {
9
+ /**
10
+ * The **`text`** property defines the string to render.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <text text="Hello World" />
15
+ * <text text={() => `Score: ${score()}`} />
16
+ * ```
17
+ */
18
+ text: Reactive<string>;
19
+ /**
20
+ * The **`style`** property defines the text rendering style.
21
+ * Accepts a partial `TextStyle` — omitted properties use defaults.
22
+ *
23
+ * @default TextStyle.DEFAULT
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * <text text="Bold" style={{ fontSize: 24, fontWeight: FontWeight.Bold }} />
28
+ * ```
29
+ */
30
+ style?: Partial<TextStyle>;
31
+ }
32
+ /**
33
+ * The **`Text`** node renders text on the canvas using `ctx.fillText()`.
34
+ * It supports reactive text values and configurable styling via `TextStyle`.
35
+ *
36
+ * @example
37
+ * ```tsx
38
+ * import { useNode } from 'dinix/hooks'
39
+ * import { PrimaryNode } from 'dinix/nodes/enum'
40
+ *
41
+ * function ScoreLabel() {
42
+ * const label = useNode(PrimaryNode.Text)
43
+ *
44
+ * return (
45
+ * <text
46
+ * ref={label}
47
+ * position={[10, 20]}
48
+ * text={() => `Score: ${score()}`}
49
+ * style={{ fontSize: 16, foregroundColor: '#ffffff' }}
50
+ * />
51
+ * )
52
+ * }
53
+ * ```
54
+ */
55
+ export declare class Text extends Node2D<PrimaryNode.Text> {
56
+ #private;
57
+ text: string;
58
+ constructor(options: TextOptions);
59
+ /** @internal Draws the text. */
60
+ draw(delta: number): void;
61
+ }
62
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/nodes/node2d/text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEzD;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;IAClE;;;;;;;;OAQG;IACH,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACtB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,IAAK,SAAQ,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;;IAChD,IAAI,EAAE,MAAM,CAAA;gBAGA,OAAO,EAAE,WAAW;IAMhC,gCAAgC;IAChC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAgB1B"}
@@ -0,0 +1,52 @@
1
+ import { GameConfig } from '../../core/game-config.js';
2
+ import { TextStyle } from '../../core/theme.js';
3
+ import { propSignal } from '../../utils/ternaries.js';
4
+ import { PrimaryNode } from '../lib/enum.js';
5
+ import { Nodes } from '../lib/registry.js';
6
+ import { Node2D } from './_node2d.js';
7
+ /**
8
+ * The **`Text`** node renders text on the canvas using `ctx.fillText()`.
9
+ * It supports reactive text values and configurable styling via `TextStyle`.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * import { useNode } from 'dinix/hooks'
14
+ * import { PrimaryNode } from 'dinix/nodes/enum'
15
+ *
16
+ * function ScoreLabel() {
17
+ * const label = useNode(PrimaryNode.Text)
18
+ *
19
+ * return (
20
+ * <text
21
+ * ref={label}
22
+ * position={[10, 20]}
23
+ * text={() => `Score: ${score()}`}
24
+ * style={{ fontSize: 16, foregroundColor: '#ffffff' }}
25
+ * />
26
+ * )
27
+ * }
28
+ * ```
29
+ */
30
+ export class Text extends Node2D {
31
+ text;
32
+ #style;
33
+ constructor(options) {
34
+ super(PrimaryNode.Text, options);
35
+ this.text = propSignal(this, 'text', options.text) ?? '';
36
+ this.#style = Object.assign(TextStyle.DEFAULT, options.style);
37
+ }
38
+ /** @internal Draws the text. */
39
+ draw(delta) {
40
+ const ctx = GameConfig.ctx;
41
+ ctx.save();
42
+ ctx.font = `${this.#style.fontWeight} ${this.#style.fontSize}px ${this.#style.fontFamily}`;
43
+ ctx.fillStyle = this.#style.foregroundColor;
44
+ ctx.textAlign = this.#style.textAlign;
45
+ ctx.textBaseline = 'top';
46
+ ctx.fillText(this.text, this.position.x, this.position.y);
47
+ ctx.restore();
48
+ super.draw(delta);
49
+ }
50
+ }
51
+ Nodes.text = Text;
52
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/nodes/node2d/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAsB,MAAM,cAAc,CAAA;AA+BzD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,IAAK,SAAQ,MAAwB;IAChD,IAAI,CAAQ;IACZ,MAAM,CAAW;IAEjB,YAAY,OAAoB;QAC9B,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IAC/D,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC,KAAa;QAChB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAA;QAE1B,GAAG,CAAC,IAAI,EAAE,CAAA;QAEV,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;QAC1F,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAA;QAC3C,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAA;QACrC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAA;QAExB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAEzD,GAAG,CAAC,OAAO,EAAE,CAAA;QAEb,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;CACF;AAED,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA"}
@@ -0,0 +1,32 @@
1
+ import { PrimaryNode } from '../lib/enum.js';
2
+ import { Node2D, type Node2DOptions } from './_node2d.js';
3
+ /**
4
+ * The **`TransformOptions`** interface defines the options for a `Transform` node.
5
+ * Extends `Node2DOptions` with no additional properties.
6
+ */
7
+ export interface TransformOptions extends Node2DOptions<PrimaryNode.Transform> {
8
+ }
9
+ /**
10
+ * The **`Transform`** node is a container for positioning and organizing child nodes.
11
+ * It has no visual representation but provides a coordinate system for its children.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * import { useNode } from 'dinix/hooks'
16
+ * import { PrimaryNode } from 'dinix/nodes/enum'
17
+ *
18
+ * function Player() {
19
+ * const body = useNode(PrimaryNode.Transform)
20
+ *
21
+ * return (
22
+ * <transform ref={body} position={new Vector2(100, 200)}>
23
+ * <sprite textureId={PLAYER} />
24
+ * </transform>
25
+ * )
26
+ * }
27
+ * ```
28
+ */
29
+ export declare class Transform extends Node2D<PrimaryNode.Transform> {
30
+ constructor(options: TransformOptions);
31
+ }
32
+ //# sourceMappingURL=transform.d.ts.map