@caperjs/core 0.1.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 (600) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +62 -0
  3. package/cli/add.mjs +197 -0
  4. package/cli/audio/cc.mjs +128 -0
  5. package/cli/audio/index.mjs +42 -0
  6. package/cli/audio/utils.mjs +56 -0
  7. package/cli/create-caper.mjs +8 -0
  8. package/cli/create.mjs +351 -0
  9. package/cli/install-peerdeps.mjs +57 -0
  10. package/cli/update.mjs +9 -0
  11. package/cli/utils.mjs +81 -0
  12. package/cli/vite.mjs +55 -0
  13. package/cli/voiceover/generateVoiceoverCSV.mjs +158 -0
  14. package/cli/voiceover/index.mjs +1 -0
  15. package/cli.mjs +157 -0
  16. package/client.d.ts +7 -0
  17. package/config/assetpack.mjs +212 -0
  18. package/config/tsconfig.base.json +28 -0
  19. package/config/vite.mjs +2464 -0
  20. package/extras/css/accessibility.css +9 -0
  21. package/extras/css/fullscreen.css +28 -0
  22. package/extras/css/loader.css +67 -0
  23. package/extras/llms.txt +1602 -0
  24. package/lib/CaptionsPlugin-Dc8fIrjy.js +277 -0
  25. package/lib/CaptionsPlugin-Dc8fIrjy.js.map +1 -0
  26. package/lib/DataAdapter-BY2114sp.js +84 -0
  27. package/lib/DataAdapter-BY2114sp.js.map +1 -0
  28. package/lib/DebugRenderer-BJMLILqI.js +1385 -0
  29. package/lib/DebugRenderer-BJMLILqI.js.map +1 -0
  30. package/lib/DevToolsPlugin-wQ5rOkn0.js +31 -0
  31. package/lib/DevToolsPlugin-wQ5rOkn0.js.map +1 -0
  32. package/lib/GSAPPlugin-DHhSZKv8.js +350 -0
  33. package/lib/GSAPPlugin-DHhSZKv8.js.map +1 -0
  34. package/lib/LayoutPlugin-B-DF9SYM.js +1271 -0
  35. package/lib/LayoutPlugin-B-DF9SYM.js.map +1 -0
  36. package/lib/SpinePlugin-Dz_3dljz.js +6077 -0
  37. package/lib/SpinePlugin-Dz_3dljz.js.map +1 -0
  38. package/lib/StatsPlugin-Cg82JMBD.js +70 -0
  39. package/lib/StatsPlugin-Cg82JMBD.js.map +1 -0
  40. package/lib/VoiceOverPlugin-BR3ImT8C.js +114 -0
  41. package/lib/VoiceOverPlugin-BR3ImT8C.js.map +1 -0
  42. package/lib/caper.mjs +1233 -0
  43. package/lib/caper.mjs.map +1 -0
  44. package/lib/core/Application.d.ts +268 -0
  45. package/lib/core/Application.d.ts.map +1 -0
  46. package/lib/core/config.d.ts +39 -0
  47. package/lib/core/config.d.ts.map +1 -0
  48. package/lib/core/create.d.ts +41 -0
  49. package/lib/core/create.d.ts.map +1 -0
  50. package/lib/core/globals.d.ts +51 -0
  51. package/lib/core/globals.d.ts.map +1 -0
  52. package/lib/core/index.d.ts +7 -0
  53. package/lib/core/index.d.ts.map +1 -0
  54. package/lib/core/interfaces/IApplication.d.ts +566 -0
  55. package/lib/core/interfaces/IApplication.d.ts.map +1 -0
  56. package/lib/core/interfaces/IApplicationOptions.d.ts +65 -0
  57. package/lib/core/interfaces/IApplicationOptions.d.ts.map +1 -0
  58. package/lib/core/interfaces/ICoreFunctions.d.ts +49 -0
  59. package/lib/core/interfaces/ICoreFunctions.d.ts.map +1 -0
  60. package/lib/core/interfaces/ICoreSignals.d.ts +57 -0
  61. package/lib/core/interfaces/ICoreSignals.d.ts.map +1 -0
  62. package/lib/core/interfaces/IStorageCapability.d.ts +20 -0
  63. package/lib/core/interfaces/IStorageCapability.d.ts.map +1 -0
  64. package/lib/core/interfaces/IStorageCapability.test.d.ts +2 -0
  65. package/lib/core/interfaces/IStorageCapability.test.d.ts.map +1 -0
  66. package/lib/core/interfaces/index.d.ts +7 -0
  67. package/lib/core/interfaces/index.d.ts.map +1 -0
  68. package/lib/core/registries.d.ts +8 -0
  69. package/lib/core/registries.d.ts.map +1 -0
  70. package/lib/core/types.d.ts +12 -0
  71. package/lib/core/types.d.ts.map +1 -0
  72. package/lib/display/AnimatedSprite.d.ts +40 -0
  73. package/lib/display/AnimatedSprite.d.ts.map +1 -0
  74. package/lib/display/Camera.d.ts +102 -0
  75. package/lib/display/Camera.d.ts.map +1 -0
  76. package/lib/display/Container.d.ts +115 -0
  77. package/lib/display/Container.d.ts.map +1 -0
  78. package/lib/display/Entity.d.ts +46 -0
  79. package/lib/display/Entity.d.ts.map +1 -0
  80. package/lib/display/ParticleContainer.d.ts +58 -0
  81. package/lib/display/ParticleContainer.d.ts.map +1 -0
  82. package/lib/display/Scene.d.ts +250 -0
  83. package/lib/display/Scene.d.ts.map +1 -0
  84. package/lib/display/SceneTransition.d.ts +41 -0
  85. package/lib/display/SceneTransition.d.ts.map +1 -0
  86. package/lib/display/SpineAnimation.d.ts +76 -0
  87. package/lib/display/SpineAnimation.d.ts.map +1 -0
  88. package/lib/display/Svg.d.ts +5 -0
  89. package/lib/display/Svg.d.ts.map +1 -0
  90. package/lib/display/index.d.ts +10 -0
  91. package/lib/display/index.d.ts.map +1 -0
  92. package/lib/env.d.ts +6 -0
  93. package/lib/hello.d.ts +2 -0
  94. package/lib/hello.d.ts.map +1 -0
  95. package/lib/index.d.ts +15 -0
  96. package/lib/index.d.ts.map +1 -0
  97. package/lib/mixins/animated.d.ts +53 -0
  98. package/lib/mixins/animated.d.ts.map +1 -0
  99. package/lib/mixins/factory/Factory.d.ts +8 -0
  100. package/lib/mixins/factory/Factory.d.ts.map +1 -0
  101. package/lib/mixins/factory/const.d.ts +67 -0
  102. package/lib/mixins/factory/const.d.ts.map +1 -0
  103. package/lib/mixins/factory/index.d.ts +8 -0
  104. package/lib/mixins/factory/index.d.ts.map +1 -0
  105. package/lib/mixins/factory/methods.d.ts +3 -0
  106. package/lib/mixins/factory/methods.d.ts.map +1 -0
  107. package/lib/mixins/factory/props.d.ts +160 -0
  108. package/lib/mixins/factory/props.d.ts.map +1 -0
  109. package/lib/mixins/factory/registry.d.ts +27 -0
  110. package/lib/mixins/factory/registry.d.ts.map +1 -0
  111. package/lib/mixins/factory/registry.test.d.ts +2 -0
  112. package/lib/mixins/factory/registry.test.d.ts.map +1 -0
  113. package/lib/mixins/factory/schema.d.ts +71 -0
  114. package/lib/mixins/factory/schema.d.ts.map +1 -0
  115. package/lib/mixins/factory/ui-registry.d.ts +20 -0
  116. package/lib/mixins/factory/ui-registry.d.ts.map +1 -0
  117. package/lib/mixins/factory/utils.d.ts +11 -0
  118. package/lib/mixins/factory/utils.d.ts.map +1 -0
  119. package/lib/mixins/focus.d.ts +15 -0
  120. package/lib/mixins/focus.d.ts.map +1 -0
  121. package/lib/mixins/index.d.ts +6 -0
  122. package/lib/mixins/index.d.ts.map +1 -0
  123. package/lib/mixins/interaction.d.ts +20 -0
  124. package/lib/mixins/interaction.d.ts.map +1 -0
  125. package/lib/mixins/signals.d.ts +15 -0
  126. package/lib/mixins/signals.d.ts.map +1 -0
  127. package/lib/plugins/AssetsPlugin.d.ts +79 -0
  128. package/lib/plugins/AssetsPlugin.d.ts.map +1 -0
  129. package/lib/plugins/DataAdapter.d.ts +95 -0
  130. package/lib/plugins/DataAdapter.d.ts.map +1 -0
  131. package/lib/plugins/DevToolsPlugin.d.ts +97 -0
  132. package/lib/plugins/DevToolsPlugin.d.ts.map +1 -0
  133. package/lib/plugins/FullScreenPlugin.d.ts +240 -0
  134. package/lib/plugins/FullScreenPlugin.d.ts.map +1 -0
  135. package/lib/plugins/GSAPPlugin.d.ts +634 -0
  136. package/lib/plugins/GSAPPlugin.d.ts.map +1 -0
  137. package/lib/plugins/KeyboardPlugin.d.ts +53 -0
  138. package/lib/plugins/KeyboardPlugin.d.ts.map +1 -0
  139. package/lib/plugins/LayoutPlugin.d.ts +100 -0
  140. package/lib/plugins/LayoutPlugin.d.ts.map +1 -0
  141. package/lib/plugins/LookupPlugin.d.ts +223 -0
  142. package/lib/plugins/LookupPlugin.d.ts.map +1 -0
  143. package/lib/plugins/Plugin.d.ts +132 -0
  144. package/lib/plugins/Plugin.d.ts.map +1 -0
  145. package/lib/plugins/Plugin.test.d.ts +2 -0
  146. package/lib/plugins/Plugin.test.d.ts.map +1 -0
  147. package/lib/plugins/PopupManagerPlugin.d.ts +108 -0
  148. package/lib/plugins/PopupManagerPlugin.d.ts.map +1 -0
  149. package/lib/plugins/ResizerPlugin.d.ts +62 -0
  150. package/lib/plugins/ResizerPlugin.d.ts.map +1 -0
  151. package/lib/plugins/SceneManagerPlugin.d.ts +122 -0
  152. package/lib/plugins/SceneManagerPlugin.d.ts.map +1 -0
  153. package/lib/plugins/StatsPlugin.d.ts +8 -0
  154. package/lib/plugins/StatsPlugin.d.ts.map +1 -0
  155. package/lib/plugins/TimerPlugin.d.ts +401 -0
  156. package/lib/plugins/TimerPlugin.d.ts.map +1 -0
  157. package/lib/plugins/WebEventsPlugin.d.ts +60 -0
  158. package/lib/plugins/WebEventsPlugin.d.ts.map +1 -0
  159. package/lib/plugins/actions/ActionsPlugin.d.ts +39 -0
  160. package/lib/plugins/actions/ActionsPlugin.d.ts.map +1 -0
  161. package/lib/plugins/actions/constants.d.ts +52 -0
  162. package/lib/plugins/actions/constants.d.ts.map +1 -0
  163. package/lib/plugins/actions/index.d.ts +5 -0
  164. package/lib/plugins/actions/index.d.ts.map +1 -0
  165. package/lib/plugins/actions/methods.d.ts +11 -0
  166. package/lib/plugins/actions/methods.d.ts.map +1 -0
  167. package/lib/plugins/actions/types.d.ts +25 -0
  168. package/lib/plugins/actions/types.d.ts.map +1 -0
  169. package/lib/plugins/audio/AudioChannel.d.ts +46 -0
  170. package/lib/plugins/audio/AudioChannel.d.ts.map +1 -0
  171. package/lib/plugins/audio/AudioChannel.test.d.ts +2 -0
  172. package/lib/plugins/audio/AudioChannel.test.d.ts.map +1 -0
  173. package/lib/plugins/audio/AudioInstance.d.ts +79 -0
  174. package/lib/plugins/audio/AudioInstance.d.ts.map +1 -0
  175. package/lib/plugins/audio/AudioManagerPlugin.d.ts +323 -0
  176. package/lib/plugins/audio/AudioManagerPlugin.d.ts.map +1 -0
  177. package/lib/plugins/audio/VoiceOverPlugin.d.ts +69 -0
  178. package/lib/plugins/audio/VoiceOverPlugin.d.ts.map +1 -0
  179. package/lib/plugins/audio/index.d.ts +4 -0
  180. package/lib/plugins/audio/index.d.ts.map +1 -0
  181. package/lib/plugins/breakpoints/BreakpointPlugin.d.ts +109 -0
  182. package/lib/plugins/breakpoints/BreakpointPlugin.d.ts.map +1 -0
  183. package/lib/plugins/breakpoints/BreakpointPlugin.test.d.ts +2 -0
  184. package/lib/plugins/breakpoints/BreakpointPlugin.test.d.ts.map +1 -0
  185. package/lib/plugins/breakpoints/evaluate.d.ts +53 -0
  186. package/lib/plugins/breakpoints/evaluate.d.ts.map +1 -0
  187. package/lib/plugins/breakpoints/evaluate.test.d.ts +2 -0
  188. package/lib/plugins/breakpoints/evaluate.test.d.ts.map +1 -0
  189. package/lib/plugins/breakpoints/index.d.ts +4 -0
  190. package/lib/plugins/breakpoints/index.d.ts.map +1 -0
  191. package/lib/plugins/breakpoints/methods.d.ts +23 -0
  192. package/lib/plugins/breakpoints/methods.d.ts.map +1 -0
  193. package/lib/plugins/breakpoints/types.d.ts +70 -0
  194. package/lib/plugins/breakpoints/types.d.ts.map +1 -0
  195. package/lib/plugins/captions/CaptionsPlugin.d.ts +150 -0
  196. package/lib/plugins/captions/CaptionsPlugin.d.ts.map +1 -0
  197. package/lib/plugins/captions/CaptionsRenderer.d.ts +37 -0
  198. package/lib/plugins/captions/CaptionsRenderer.d.ts.map +1 -0
  199. package/lib/plugins/captions/index.d.ts +3 -0
  200. package/lib/plugins/captions/index.d.ts.map +1 -0
  201. package/lib/plugins/defaults.d.ts +4 -0
  202. package/lib/plugins/defaults.d.ts.map +1 -0
  203. package/lib/plugins/focus/FocusManagerPlugin.d.ts +148 -0
  204. package/lib/plugins/focus/FocusManagerPlugin.d.ts.map +1 -0
  205. package/lib/plugins/focus/FocusOutliner.d.ts +32 -0
  206. package/lib/plugins/focus/FocusOutliner.d.ts.map +1 -0
  207. package/lib/plugins/focus/index.d.ts +3 -0
  208. package/lib/plugins/focus/index.d.ts.map +1 -0
  209. package/lib/plugins/i18nPlugin.d.ts +128 -0
  210. package/lib/plugins/i18nPlugin.d.ts.map +1 -0
  211. package/lib/plugins/index.d.ts +18 -0
  212. package/lib/plugins/index.d.ts.map +1 -0
  213. package/lib/plugins/input/AbstractControls.d.ts +8 -0
  214. package/lib/plugins/input/AbstractControls.d.ts.map +1 -0
  215. package/lib/plugins/input/Controls.d.ts +16 -0
  216. package/lib/plugins/input/Controls.d.ts.map +1 -0
  217. package/lib/plugins/input/InputPlugin.d.ts +52 -0
  218. package/lib/plugins/input/InputPlugin.d.ts.map +1 -0
  219. package/lib/plugins/input/constants.d.ts +8 -0
  220. package/lib/plugins/input/constants.d.ts.map +1 -0
  221. package/lib/plugins/input/index.d.ts +10 -0
  222. package/lib/plugins/input/index.d.ts.map +1 -0
  223. package/lib/plugins/input/interfaces.d.ts +30 -0
  224. package/lib/plugins/input/interfaces.d.ts.map +1 -0
  225. package/lib/plugins/input/keyboard/KeyboardContols.d.ts +28 -0
  226. package/lib/plugins/input/keyboard/KeyboardContols.d.ts.map +1 -0
  227. package/lib/plugins/input/keyboard/index.d.ts +3 -0
  228. package/lib/plugins/input/keyboard/index.d.ts.map +1 -0
  229. package/lib/plugins/input/keyboard/interfaces.d.ts +18 -0
  230. package/lib/plugins/input/keyboard/interfaces.d.ts.map +1 -0
  231. package/lib/plugins/input/methods.d.ts +4 -0
  232. package/lib/plugins/input/methods.d.ts.map +1 -0
  233. package/lib/plugins/input/touch/TouchControls.d.ts +35 -0
  234. package/lib/plugins/input/touch/TouchControls.d.ts.map +1 -0
  235. package/lib/plugins/input/touch/constants.d.ts +14 -0
  236. package/lib/plugins/input/touch/constants.d.ts.map +1 -0
  237. package/lib/plugins/input/touch/index.d.ts +4 -0
  238. package/lib/plugins/input/touch/index.d.ts.map +1 -0
  239. package/lib/plugins/input/touch/interfaces.d.ts +15 -0
  240. package/lib/plugins/input/touch/interfaces.d.ts.map +1 -0
  241. package/lib/plugins/input/types.d.ts +32 -0
  242. package/lib/plugins/input/types.d.ts.map +1 -0
  243. package/lib/plugins/input/utils.d.ts +23 -0
  244. package/lib/plugins/input/utils.d.ts.map +1 -0
  245. package/lib/plugins/spine/SpinePlugin.d.ts +6 -0
  246. package/lib/plugins/spine/SpinePlugin.d.ts.map +1 -0
  247. package/lib/plugins/spine/pixi-spine/BatchableSpineSlot.d.ts +31 -0
  248. package/lib/plugins/spine/pixi-spine/BatchableSpineSlot.d.ts.map +1 -0
  249. package/lib/plugins/spine/pixi-spine/Spine.d.ts +211 -0
  250. package/lib/plugins/spine/pixi-spine/Spine.d.ts.map +1 -0
  251. package/lib/plugins/spine/pixi-spine/SpineDebugRenderer.d.ts +81 -0
  252. package/lib/plugins/spine/pixi-spine/SpineDebugRenderer.d.ts.map +1 -0
  253. package/lib/plugins/spine/pixi-spine/SpinePipe.d.ts +21 -0
  254. package/lib/plugins/spine/pixi-spine/SpinePipe.d.ts.map +1 -0
  255. package/lib/plugins/spine/pixi-spine/SpineTexture.d.ts +16 -0
  256. package/lib/plugins/spine/pixi-spine/SpineTexture.d.ts.map +1 -0
  257. package/lib/plugins/spine/pixi-spine/assets/atlasLoader.d.ts +10 -0
  258. package/lib/plugins/spine/pixi-spine/assets/atlasLoader.d.ts.map +1 -0
  259. package/lib/plugins/spine/pixi-spine/assets/skeletonLoader.d.ts +6 -0
  260. package/lib/plugins/spine/pixi-spine/assets/skeletonLoader.d.ts.map +1 -0
  261. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.d.ts +5 -0
  262. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.d.ts.map +1 -0
  263. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatcher.d.ts +22 -0
  264. package/lib/plugins/spine/pixi-spine/darktint/DarkTintBatcher.d.ts.map +1 -0
  265. package/lib/plugins/spine/pixi-spine/darktint/DarkTintShader.d.ts +5 -0
  266. package/lib/plugins/spine/pixi-spine/darktint/DarkTintShader.d.ts.map +1 -0
  267. package/lib/plugins/spine/pixi-spine/darktint/darkTintBit.d.ts +51 -0
  268. package/lib/plugins/spine/pixi-spine/darktint/darkTintBit.d.ts.map +1 -0
  269. package/lib/plugins/spine/pixi-spine/index.d.ts +9 -0
  270. package/lib/plugins/spine/pixi-spine/index.d.ts.map +1 -0
  271. package/lib/plugins/spine/pixi-spine/require-shim.d.ts +34 -0
  272. package/lib/plugins/spine/pixi-spine/require-shim.d.ts.map +1 -0
  273. package/lib/registries-CYCaYKZI.js +6885 -0
  274. package/lib/registries-CYCaYKZI.js.map +1 -0
  275. package/lib/signals/Signal.d.ts +16 -0
  276. package/lib/signals/Signal.d.ts.map +1 -0
  277. package/lib/signals/Signal.test.d.ts +2 -0
  278. package/lib/signals/Signal.test.d.ts.map +1 -0
  279. package/lib/signals/index.d.ts +3 -0
  280. package/lib/signals/index.d.ts.map +1 -0
  281. package/lib/store/Store.d.ts +56 -0
  282. package/lib/store/Store.d.ts.map +1 -0
  283. package/lib/store/Store.test.d.ts +2 -0
  284. package/lib/store/Store.test.d.ts.map +1 -0
  285. package/lib/store/index.d.ts +2 -0
  286. package/lib/store/index.d.ts.map +1 -0
  287. package/lib/types/framework.d.ts +46 -0
  288. package/lib/types/gsap.d.ts +23 -0
  289. package/lib/ui/Button.d.ts +162 -0
  290. package/lib/ui/Button.d.ts.map +1 -0
  291. package/lib/ui/FlexContainer.d.ts +109 -0
  292. package/lib/ui/FlexContainer.d.ts.map +1 -0
  293. package/lib/ui/Input.d.ts +384 -0
  294. package/lib/ui/Input.d.ts.map +1 -0
  295. package/lib/ui/Joystick.d.ts +61 -0
  296. package/lib/ui/Joystick.d.ts.map +1 -0
  297. package/lib/ui/Popup.d.ts +109 -0
  298. package/lib/ui/Popup.d.ts.map +1 -0
  299. package/lib/ui/Toast.d.ts +131 -0
  300. package/lib/ui/Toast.d.ts.map +1 -0
  301. package/lib/ui/Toaster.d.ts +188 -0
  302. package/lib/ui/Toaster.d.ts.map +1 -0
  303. package/lib/ui/UICanvas.d.ts +155 -0
  304. package/lib/ui/UICanvas.d.ts.map +1 -0
  305. package/lib/ui/index.d.ts +9 -0
  306. package/lib/ui/index.d.ts.map +1 -0
  307. package/lib/utils/array.d.ts +11 -0
  308. package/lib/utils/array.d.ts.map +1 -0
  309. package/lib/utils/bind.d.ts +21 -0
  310. package/lib/utils/bind.d.ts.map +1 -0
  311. package/lib/utils/canvas.d.ts +2 -0
  312. package/lib/utils/canvas.d.ts.map +1 -0
  313. package/lib/utils/color.d.ts +66 -0
  314. package/lib/utils/color.d.ts.map +1 -0
  315. package/lib/utils/console/Logger.d.ts +15 -0
  316. package/lib/utils/console/Logger.d.ts.map +1 -0
  317. package/lib/utils/console/index.d.ts +2 -0
  318. package/lib/utils/console/index.d.ts.map +1 -0
  319. package/lib/utils/debug.d.ts +34 -0
  320. package/lib/utils/debug.d.ts.map +1 -0
  321. package/lib/utils/define.d.ts +100 -0
  322. package/lib/utils/define.d.ts.map +1 -0
  323. package/lib/utils/env.d.ts +4 -0
  324. package/lib/utils/env.d.ts.map +1 -0
  325. package/lib/utils/events.d.ts +12 -0
  326. package/lib/utils/events.d.ts.map +1 -0
  327. package/lib/utils/framework.d.ts +12 -0
  328. package/lib/utils/framework.d.ts.map +1 -0
  329. package/lib/utils/index.d.ts +28 -0
  330. package/lib/utils/index.d.ts.map +1 -0
  331. package/lib/utils/map.d.ts +31 -0
  332. package/lib/utils/map.d.ts.map +1 -0
  333. package/lib/utils/math.d.ts +15 -0
  334. package/lib/utils/math.d.ts.map +1 -0
  335. package/lib/utils/misc.d.ts +13 -0
  336. package/lib/utils/misc.d.ts.map +1 -0
  337. package/lib/utils/number.d.ts +2 -0
  338. package/lib/utils/number.d.ts.map +1 -0
  339. package/lib/utils/object.d.ts +21 -0
  340. package/lib/utils/object.d.ts.map +1 -0
  341. package/lib/utils/padding.d.ts +4 -0
  342. package/lib/utils/padding.d.ts.map +1 -0
  343. package/lib/utils/pixi.d.ts +42 -0
  344. package/lib/utils/pixi.d.ts.map +1 -0
  345. package/lib/utils/platform.d.ts +20 -0
  346. package/lib/utils/platform.d.ts.map +1 -0
  347. package/lib/utils/point.d.ts +66 -0
  348. package/lib/utils/point.d.ts.map +1 -0
  349. package/lib/utils/promise/Queue.d.ts +60 -0
  350. package/lib/utils/promise/Queue.d.ts.map +1 -0
  351. package/lib/utils/promise/functions.d.ts +14 -0
  352. package/lib/utils/promise/functions.d.ts.map +1 -0
  353. package/lib/utils/promise/index.d.ts +3 -0
  354. package/lib/utils/promise/index.d.ts.map +1 -0
  355. package/lib/utils/random.d.ts +42 -0
  356. package/lib/utils/random.d.ts.map +1 -0
  357. package/lib/utils/rect.d.ts +26 -0
  358. package/lib/utils/rect.d.ts.map +1 -0
  359. package/lib/utils/set.d.ts +15 -0
  360. package/lib/utils/set.d.ts.map +1 -0
  361. package/lib/utils/string.d.ts +3 -0
  362. package/lib/utils/string.d.ts.map +1 -0
  363. package/lib/utils/text.d.ts +3 -0
  364. package/lib/utils/text.d.ts.map +1 -0
  365. package/lib/utils/typefilters.d.ts +4 -0
  366. package/lib/utils/typefilters.d.ts.map +1 -0
  367. package/lib/utils/types.d.ts +209 -0
  368. package/lib/utils/types.d.ts.map +1 -0
  369. package/lib/utils/vite.d.ts +25 -0
  370. package/lib/utils/vite.d.ts.map +1 -0
  371. package/lib/utils/web.d.ts +3 -0
  372. package/lib/utils/web.d.ts.map +1 -0
  373. package/lib/version.d.ts +3 -0
  374. package/lib/version.d.ts.map +1 -0
  375. package/lib/webgl-check.d.ts +2 -0
  376. package/lib/webgl-check.d.ts.map +1 -0
  377. package/package.json +138 -0
  378. package/src/core/Application.ts +1091 -0
  379. package/src/core/config.ts +168 -0
  380. package/src/core/create.ts +186 -0
  381. package/src/core/globals.ts +299 -0
  382. package/src/core/index.ts +6 -0
  383. package/src/core/interfaces/IApplication.ts +628 -0
  384. package/src/core/interfaces/IApplicationOptions.ts +81 -0
  385. package/src/core/interfaces/ICoreFunctions.ts +86 -0
  386. package/src/core/interfaces/ICoreSignals.ts +77 -0
  387. package/src/core/interfaces/IStorageCapability.test.ts +27 -0
  388. package/src/core/interfaces/IStorageCapability.ts +26 -0
  389. package/src/core/interfaces/index.ts +6 -0
  390. package/src/core/registries.ts +7 -0
  391. package/src/core/types.ts +13 -0
  392. package/src/display/AnimatedSprite.ts +227 -0
  393. package/src/display/Camera.ts +371 -0
  394. package/src/display/Container.ts +240 -0
  395. package/src/display/Entity.ts +50 -0
  396. package/src/display/ParticleContainer.ts +107 -0
  397. package/src/display/Scene.ts +305 -0
  398. package/src/display/SceneTransition.ts +108 -0
  399. package/src/display/SpineAnimation.ts +170 -0
  400. package/src/display/Svg.ts +9 -0
  401. package/src/display/index.ts +11 -0
  402. package/src/env.d.ts +6 -0
  403. package/src/hello.ts +20 -0
  404. package/src/index.ts +17 -0
  405. package/src/mixins/animated.ts +340 -0
  406. package/src/mixins/factory/Factory.ts +24 -0
  407. package/src/mixins/factory/const.ts +363 -0
  408. package/src/mixins/factory/index.ts +7 -0
  409. package/src/mixins/factory/methods.ts +21 -0
  410. package/src/mixins/factory/props.ts +207 -0
  411. package/src/mixins/factory/registry.test.ts +83 -0
  412. package/src/mixins/factory/registry.ts +61 -0
  413. package/src/mixins/factory/schema.ts +153 -0
  414. package/src/mixins/factory/ui-registry.ts +54 -0
  415. package/src/mixins/factory/utils.ts +130 -0
  416. package/src/mixins/focus.ts +124 -0
  417. package/src/mixins/index.ts +5 -0
  418. package/src/mixins/interaction.ts +74 -0
  419. package/src/mixins/signals.ts +49 -0
  420. package/src/plugins/AssetsPlugin.ts +407 -0
  421. package/src/plugins/DataAdapter.ts +259 -0
  422. package/src/plugins/DevToolsPlugin.ts +103 -0
  423. package/src/plugins/FullScreenPlugin.ts +359 -0
  424. package/src/plugins/GSAPPlugin.ts +811 -0
  425. package/src/plugins/KeyboardPlugin.ts +160 -0
  426. package/src/plugins/LayoutPlugin.ts +127 -0
  427. package/src/plugins/LookupPlugin.ts +308 -0
  428. package/src/plugins/Plugin.test.ts +73 -0
  429. package/src/plugins/Plugin.ts +200 -0
  430. package/src/plugins/PopupManagerPlugin.ts +263 -0
  431. package/src/plugins/ResizerPlugin.ts +220 -0
  432. package/src/plugins/SceneManagerPlugin.ts +669 -0
  433. package/src/plugins/StatsPlugin.ts +24 -0
  434. package/src/plugins/TimerPlugin.ts +841 -0
  435. package/src/plugins/WebEventsPlugin.ts +132 -0
  436. package/src/plugins/actions/ActionsPlugin.ts +113 -0
  437. package/src/plugins/actions/constants.ts +45 -0
  438. package/src/plugins/actions/index.ts +4 -0
  439. package/src/plugins/actions/methods.ts +28 -0
  440. package/src/plugins/actions/types.ts +47 -0
  441. package/src/plugins/audio/AudioChannel.test.ts +101 -0
  442. package/src/plugins/audio/AudioChannel.ts +164 -0
  443. package/src/plugins/audio/AudioInstance.ts +228 -0
  444. package/src/plugins/audio/AudioManagerPlugin.ts +903 -0
  445. package/src/plugins/audio/VoiceOverPlugin.ts +354 -0
  446. package/src/plugins/audio/index.ts +3 -0
  447. package/src/plugins/breakpoints/BreakpointPlugin.test.ts +228 -0
  448. package/src/plugins/breakpoints/BreakpointPlugin.ts +293 -0
  449. package/src/plugins/breakpoints/evaluate.test.ts +239 -0
  450. package/src/plugins/breakpoints/evaluate.ts +201 -0
  451. package/src/plugins/breakpoints/index.ts +3 -0
  452. package/src/plugins/breakpoints/methods.ts +22 -0
  453. package/src/plugins/breakpoints/types.ts +86 -0
  454. package/src/plugins/captions/CaptionsPlugin.ts +468 -0
  455. package/src/plugins/captions/CaptionsRenderer.ts +184 -0
  456. package/src/plugins/captions/font/Sans.fnt +116 -0
  457. package/src/plugins/captions/font/Sans.png +0 -0
  458. package/src/plugins/captions/index.ts +2 -0
  459. package/src/plugins/defaults.ts +95 -0
  460. package/src/plugins/focus/FocusManagerPlugin.ts +773 -0
  461. package/src/plugins/focus/FocusOutliner.ts +111 -0
  462. package/src/plugins/focus/index.ts +2 -0
  463. package/src/plugins/i18nPlugin.ts +284 -0
  464. package/src/plugins/index.ts +17 -0
  465. package/src/plugins/input/AbstractControls.ts +15 -0
  466. package/src/plugins/input/Controls.ts +55 -0
  467. package/src/plugins/input/InputPlugin.ts +168 -0
  468. package/src/plugins/input/constants.ts +12 -0
  469. package/src/plugins/input/index.ts +9 -0
  470. package/src/plugins/input/interfaces.ts +37 -0
  471. package/src/plugins/input/keyboard/KeyboardContols.ts +182 -0
  472. package/src/plugins/input/keyboard/index.ts +2 -0
  473. package/src/plugins/input/keyboard/interfaces.ts +21 -0
  474. package/src/plugins/input/methods.ts +9 -0
  475. package/src/plugins/input/touch/TouchControls.ts +237 -0
  476. package/src/plugins/input/touch/constants.ts +34 -0
  477. package/src/plugins/input/touch/index.ts +3 -0
  478. package/src/plugins/input/touch/interfaces.ts +15 -0
  479. package/src/plugins/input/types.ts +41 -0
  480. package/src/plugins/input/utils.ts +10 -0
  481. package/src/plugins/spine/SpinePlugin.ts +14 -0
  482. package/src/plugins/spine/pixi-spine/BatchableSpineSlot.ts +138 -0
  483. package/src/plugins/spine/pixi-spine/Spine.ts +897 -0
  484. package/src/plugins/spine/pixi-spine/SpineDebugRenderer.ts +615 -0
  485. package/src/plugins/spine/pixi-spine/SpinePipe.ts +197 -0
  486. package/src/plugins/spine/pixi-spine/SpineTexture.ts +143 -0
  487. package/src/plugins/spine/pixi-spine/assets/atlasLoader.ts +156 -0
  488. package/src/plugins/spine/pixi-spine/assets/skeletonLoader.ts +80 -0
  489. package/src/plugins/spine/pixi-spine/darktint/DarkTintBatchGeometry.ts +92 -0
  490. package/src/plugins/spine/pixi-spine/darktint/DarkTintBatcher.ts +186 -0
  491. package/src/plugins/spine/pixi-spine/darktint/DarkTintShader.ts +74 -0
  492. package/src/plugins/spine/pixi-spine/darktint/darkTintBit.ts +77 -0
  493. package/src/plugins/spine/pixi-spine/index.ts +43 -0
  494. package/src/plugins/spine/pixi-spine/require-shim.ts +43 -0
  495. package/src/signals/Signal.test.ts +54 -0
  496. package/src/signals/Signal.ts +68 -0
  497. package/src/signals/index.ts +10 -0
  498. package/src/store/Store.test.ts +146 -0
  499. package/src/store/Store.ts +192 -0
  500. package/src/store/index.ts +1 -0
  501. package/src/types/framework.d.ts +47 -0
  502. package/src/types/gsap.d.ts +26 -0
  503. package/src/ui/Button.ts +454 -0
  504. package/src/ui/FlexContainer.ts +526 -0
  505. package/src/ui/Input.ts +1274 -0
  506. package/src/ui/Joystick.ts +288 -0
  507. package/src/ui/Popup.ts +242 -0
  508. package/src/ui/Toast.ts +399 -0
  509. package/src/ui/Toaster.ts +409 -0
  510. package/src/ui/UICanvas.ts +812 -0
  511. package/src/ui/index.ts +8 -0
  512. package/src/utils/array.ts +24 -0
  513. package/src/utils/bind.ts +79 -0
  514. package/src/utils/canvas.ts +26 -0
  515. package/src/utils/color.ts +126 -0
  516. package/src/utils/console/Logger.ts +86 -0
  517. package/src/utils/console/index.ts +1 -0
  518. package/src/utils/debug.ts +69 -0
  519. package/src/utils/define.ts +120 -0
  520. package/src/utils/env.ts +3 -0
  521. package/src/utils/events.ts +10 -0
  522. package/src/utils/framework.ts +45 -0
  523. package/src/utils/index.ts +27 -0
  524. package/src/utils/map.ts +59 -0
  525. package/src/utils/math.ts +19 -0
  526. package/src/utils/misc.ts +45 -0
  527. package/src/utils/number.ts +3 -0
  528. package/src/utils/object.ts +43 -0
  529. package/src/utils/padding.ts +43 -0
  530. package/src/utils/pixi.ts +116 -0
  531. package/src/utils/platform.ts +33 -0
  532. package/src/utils/point.ts +123 -0
  533. package/src/utils/promise/Queue.ts +125 -0
  534. package/src/utils/promise/functions.ts +16 -0
  535. package/src/utils/promise/index.ts +2 -0
  536. package/src/utils/random.ts +69 -0
  537. package/src/utils/rect.ts +50 -0
  538. package/src/utils/set.ts +32 -0
  539. package/src/utils/string.ts +9 -0
  540. package/src/utils/text.ts +30 -0
  541. package/src/utils/typefilters.ts +29 -0
  542. package/src/utils/types.ts +426 -0
  543. package/src/utils/vite.ts +41 -0
  544. package/src/utils/web.ts +7 -0
  545. package/src/version.ts +3 -0
  546. package/src/webgl-check.ts +12 -0
  547. package/templates/app/default/.eslintrc.json +21 -0
  548. package/templates/app/default/.meta.json +4 -0
  549. package/templates/app/default/.nvmrc +1 -0
  550. package/templates/app/default/.prettierrc.json +7 -0
  551. package/templates/app/default/README.md +8 -0
  552. package/templates/app/default/assets/audio{m}/music/Cheerful Annoyance.ogg +0 -0
  553. package/templates/app/default/assets/audio{m}/music/Drumming Sticks.ogg +0 -0
  554. package/templates/app/default/assets/audio{m}/music/Game Over.ogg +0 -0
  555. package/templates/app/default/assets/audio{m}/music/Mishief Stroll.ogg +0 -0
  556. package/templates/app/default/assets/audio{m}/music/Night at the Beach.ogg +0 -0
  557. package/templates/app/default/assets/audio{m}/sfx/click.ogg +0 -0
  558. package/templates/app/default/assets/audio{m}/sfx/hover.ogg +0 -0
  559. package/templates/app/default/assets/required{m}/caper.png +0 -0
  560. package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Bold{family=Space Grotesk}{wf}.ttf +0 -0
  561. package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Medium{family=Space Grotesk}{wf}.ttf +0 -0
  562. package/templates/app/default/assets/required{m}/fonts{fix}/SpaceGrotesk-Regular{family=Space Grotesk}{wf}.ttf +0 -0
  563. package/templates/app/default/assets/required{m}/fonts{fix}/Syncopate-Bold{family=Syncopate}{wf}.ttf +0 -0
  564. package/templates/app/default/assets/required{m}/ui{tps}/btn/blue.png +0 -0
  565. package/templates/app/default/assets/required{m}/ui{tps}/btn/green.png +0 -0
  566. package/templates/app/default/assets/required{m}/ui{tps}/btn/grey.png +0 -0
  567. package/templates/app/default/assets/required{m}/ui{tps}/btn/orange.png +0 -0
  568. package/templates/app/default/assets/required{m}/ui{tps}/btn/purple.png +0 -0
  569. package/templates/app/default/assets/required{m}/ui{tps}/btn/red.png +0 -0
  570. package/templates/app/default/assets/required{m}/ui{tps}/btn/yellow.png +0 -0
  571. package/templates/app/default/assets/required{m}/ui{tps}/btn_a/down.png +0 -0
  572. package/templates/app/default/assets/required{m}/ui{tps}/btn_a/over.png +0 -0
  573. package/templates/app/default/assets/required{m}/ui{tps}/btn_a/up.png +0 -0
  574. package/templates/app/default/assets/required{m}/ui{tps}/btn_b/down.png +0 -0
  575. package/templates/app/default/assets/required{m}/ui{tps}/btn_b/over.png +0 -0
  576. package/templates/app/default/assets/required{m}/ui{tps}/btn_b/up.png +0 -0
  577. package/templates/app/default/assets/required{m}/ui{tps}/joystick/base.png +0 -0
  578. package/templates/app/default/assets/required{m}/ui{tps}/joystick/handle.png +0 -0
  579. package/templates/app/default/assets/required{m}/wordmark.svg +1 -0
  580. package/templates/app/default/assets/spine{m}/spineboy-pro.png +0 -0
  581. package/templates/app/default/assets/spine{m}/spineboy-pro.skel +0 -0
  582. package/templates/app/default/assets/spine{m}/spineboy-pro{fix}.atlas +94 -0
  583. package/templates/app/default/caper.config.ts +60 -0
  584. package/templates/app/default/index.html +23 -0
  585. package/templates/app/default/package.template.json +17 -0
  586. package/templates/app/default/public/favicon.ico +0 -0
  587. package/templates/app/default/src/__APPLICATION_NAME__.ts +3 -0
  588. package/templates/app/default/src/main.ts +9 -0
  589. package/templates/app/default/src/scenes/Base.ts +39 -0
  590. package/templates/app/default/src/scenes/Game.ts +34 -0
  591. package/templates/app/default/src/scenes/Splash.ts +70 -0
  592. package/templates/app/default/src/scenes/Start.ts +90 -0
  593. package/templates/app/default/src/utils/Constants.ts +3 -0
  594. package/templates/app/default/tsconfig.json +1 -0
  595. package/templates/plugin/package.template.json +33 -0
  596. package/templates/plugin/src/Plugin.template.ts +24 -0
  597. package/templates/plugin/src/index.template.ts +3 -0
  598. package/templates/plugin/tsconfig.template.json +43 -0
  599. package/templates/plugin/vite-env.template.d.ts +16 -0
  600. package/templates/plugin/vite.config.template.ts +19 -0
@@ -0,0 +1,363 @@
1
+ import { BitmapText, Graphics, HTMLText, Sprite, Text, TilingSprite } from 'pixi.js';
2
+
3
+ import { AnimatedSprite, Container, ContainerConfigKeys, SpineAnimation, Svg } from '../../display';
4
+ import { ParticleContainer, ParticleContainerConfigKeys } from '../../display/ParticleContainer';
5
+ import {
6
+ Button,
7
+ ButtonConfigKeys,
8
+ FlexContainer,
9
+ FlexContainerConfigKeys,
10
+ Toaster,
11
+ UICanvas,
12
+ UICanvasConfigKeys,
13
+ } from '../../ui';
14
+ import type { ButtonConfig, FlexContainerConfig, ToastConfig, ToasterConfig, UICanvasProps } from '../../ui';
15
+ import type { EntityId, EntityInstance, EntityProps, UIId, UIInstance, UIProps } from '../../utils';
16
+ import { pluck, resolvePointLike, Spine, WithRequiredProps } from '../../utils';
17
+
18
+ import type { EntityFactoryProps } from './props';
19
+ import {
20
+ AnimatedSpriteProps,
21
+ BitmapTextProps,
22
+ ButtonProps,
23
+ ContainerProps,
24
+ ExistingProps,
25
+ FlexContainerProps,
26
+ GraphicsProps,
27
+ HTMLTextProps,
28
+ ParticleContainerProps,
29
+ SpineProps,
30
+ SpriteProps,
31
+ SvgProps,
32
+ TextProps,
33
+ TilingSpriteProps,
34
+ UICanvasFactoryProps,
35
+ } from './props';
36
+ import { getEntityCtor, getRegisteredEntityIds } from './registry';
37
+ import { getUICtor, getRegisteredUIIds } from './ui-registry';
38
+ import { buildFactoryMethod } from './schema';
39
+ import {
40
+ resolveAnchor,
41
+ resolvePivot,
42
+ resolvePosition,
43
+ resolveScale,
44
+ resolveTexture,
45
+ resolveUnknownKeys,
46
+ } from './utils';
47
+
48
+ /**
49
+ * Keys consumed by text-family factory builds (`text`, `htmlText`,
50
+ * `bitmapText`). Shared here so the three schemas don't drift — each one
51
+ * flattens `{text, style, roundPixels, resolution, anchor, pivot}` into
52
+ * the Pixi constructor options in `build`, so all those keys must be
53
+ * excluded from the schema's unknown-keys passthrough.
54
+ */
55
+ const TEXT_CONSUMED_KEYS = ['text', 'roundPixels', 'resolution', 'style', 'anchor', 'pivot'] as const;
56
+
57
+ /**
58
+ * Factory method table consumed by the `Factory()` mixin. Almost every
59
+ * entry is built via `buildFactoryMethod({ build, applies, exclude })`:
60
+ * the `build` callback owns the bespoke constructor call (including any
61
+ * DX reshaping Caper applies — asset-name resolution, text style
62
+ * flattening, config-vs-extras splits), and the helper centralizes
63
+ * position/scale/pivot/anchor + unknown-keys passthrough.
64
+ *
65
+ * The five bespoke entries (`existing`, `texture`, `svg`, `toaster`,
66
+ * `entity`) don't fit the `(props?) → instance` shape — `existing` takes
67
+ * `(entity, props)`, `texture` is a plain resolver re-bind, `svg` takes
68
+ * a required `ctx` field, `toaster` takes two config objects, and
69
+ * `entity` takes `(id, props)` with a generic narrowed to discovered
70
+ * entity ids — so they stay hand-written.
71
+ */
72
+ export const defaultFactoryMethods = {
73
+ existing: <TEntity>(entity: TEntity, props?: Partial<ExistingProps>): TEntity => {
74
+ if (!props) return entity;
75
+ const { position, x, y, pivot, scale, scaleX, scaleY, ...rest } = props;
76
+ resolvePosition({ position, x, y }, entity);
77
+ resolveScale({ scale, scaleX, scaleY }, entity);
78
+ resolvePivot(pivot, entity);
79
+ resolveUnknownKeys(rest, entity);
80
+ return entity;
81
+ },
82
+
83
+ container: buildFactoryMethod({
84
+ build: (props?: Partial<ContainerProps>): Container =>
85
+ new Container(props ? pluck(props, ContainerConfigKeys) : undefined),
86
+ applies: ['position', 'scale', 'pivot'],
87
+ exclude: ContainerConfigKeys as readonly string[],
88
+ }),
89
+
90
+ particleContainer: buildFactoryMethod({
91
+ build: (props?: Partial<ParticleContainerProps>): ParticleContainer =>
92
+ new ParticleContainer(props ? pluck(props, ParticleContainerConfigKeys) : undefined),
93
+ applies: ['position', 'scale', 'pivot'],
94
+ exclude: ParticleContainerConfigKeys as readonly string[],
95
+ }),
96
+
97
+ texture: resolveTexture,
98
+
99
+ sprite: buildFactoryMethod({
100
+ build: (props?: Partial<SpriteProps>) =>
101
+ new Sprite(props ? resolveTexture(props) : undefined),
102
+ applies: ['position', 'scale', 'pivot', 'anchor'],
103
+ exclude: ['asset', 'sheet'],
104
+ }),
105
+
106
+ tilingSprite: buildFactoryMethod({
107
+ build: (props?: Partial<TilingSpriteProps>) =>
108
+ new TilingSprite(props ? resolveTexture(props) : undefined),
109
+ applies: ['position', 'scale', 'pivot', 'anchor'],
110
+ exclude: ['asset', 'sheet'],
111
+ }),
112
+
113
+ animatedSprite: buildFactoryMethod({
114
+ // AnimatedSprite's Caper-side constructor consumes the full props bag
115
+ // (animations, autoPlay, autoUpdate, sheet, texturePrefix, etc.), so
116
+ // the schema's `build` just forwards them. Position/scale/pivot are
117
+ // applied by the helper from the same object.
118
+ build: (props?: Partial<AnimatedSpriteProps>): AnimatedSprite => new AnimatedSprite(props),
119
+ applies: ['position', 'scale', 'pivot'],
120
+ exclude: [
121
+ 'sheet',
122
+ 'texturePrefix',
123
+ 'zeroPad',
124
+ 'animations',
125
+ 'autoPlay',
126
+ 'autoUpdate',
127
+ 'defaultAnimation',
128
+ 'reversible',
129
+ 'animationSpeed',
130
+ 'startIndex',
131
+ 'animation',
132
+ ],
133
+ }),
134
+
135
+ graphics: buildFactoryMethod({
136
+ build: (_props?: Partial<GraphicsProps>) => new Graphics(),
137
+ applies: ['position', 'scale', 'pivot'],
138
+ }),
139
+
140
+ svg(props: WithRequiredProps<SvgProps, 'ctx'>) {
141
+ const entity = new Svg(props.ctx);
142
+ const { position, x, y, pivot, scale, scaleX, scaleY, ctx: _ctx, ...rest } = props;
143
+ resolvePosition({ position, x, y }, entity);
144
+ resolveScale({ scale, scaleX, scaleY }, entity);
145
+ resolvePivot(pivot, entity);
146
+ resolveUnknownKeys(rest, entity);
147
+ return entity;
148
+ },
149
+
150
+ text: buildFactoryMethod({
151
+ // Text flattens Pixi's nested `style: {...}` into top-level props for
152
+ // DX (e.g. `{fontFamily, fontSize, fill}` without the `style:` wrapper
153
+ // — see TextStyle type in props.ts). The build callback rebuilds the
154
+ // Pixi-shape options object, including `anchor`/`pivot` pre-resolved
155
+ // via `resolvePointLike(..., true)` the way the hand-written method
156
+ // did. Post-construct resolvers handle position/scale/pivot.
157
+ build: (props?: Partial<TextProps>) =>
158
+ new Text(
159
+ props
160
+ ? {
161
+ text: props.text,
162
+ roundPixels: props.roundPixels,
163
+ resolution: props.resolution,
164
+ style: props.style,
165
+ anchor: props.anchor ? resolvePointLike(props.anchor, true) : undefined,
166
+ pivot: props.pivot ? resolvePointLike(props.pivot, true) : undefined,
167
+ }
168
+ : {},
169
+ ),
170
+ applies: ['position', 'scale', 'pivot'],
171
+ exclude: [...TEXT_CONSUMED_KEYS],
172
+ }),
173
+
174
+ htmlText: buildFactoryMethod({
175
+ build: (props?: Partial<HTMLTextProps>) =>
176
+ new HTMLText(
177
+ props
178
+ ? {
179
+ text: props.text,
180
+ roundPixels: props.roundPixels,
181
+ resolution: props.resolution,
182
+ style: props.style,
183
+ anchor: props.anchor ? resolvePointLike(props.anchor, true) : undefined,
184
+ pivot: props.pivot ? resolvePointLike(props.pivot, true) : undefined,
185
+ }
186
+ : {},
187
+ ),
188
+ applies: ['position', 'scale', 'pivot'],
189
+ exclude: [...TEXT_CONSUMED_KEYS],
190
+ }),
191
+
192
+ bitmapText: buildFactoryMethod({
193
+ // BitmapText's ctor doesn't take `resolution` — that's the only field
194
+ // that differs from Text/HTMLText here.
195
+ build: (props?: Partial<BitmapTextProps>) =>
196
+ new BitmapText(
197
+ props
198
+ ? {
199
+ text: props.text,
200
+ roundPixels: props.roundPixels,
201
+ style: props.style,
202
+ anchor: props.anchor ? resolvePointLike(props.anchor, true) : undefined,
203
+ pivot: props.pivot ? resolvePointLike(props.pivot, true) : undefined,
204
+ }
205
+ : {},
206
+ ),
207
+ applies: ['position', 'scale', 'pivot'],
208
+ exclude: [...TEXT_CONSUMED_KEYS],
209
+ }),
210
+
211
+ button: buildFactoryMethod({
212
+ build: (props?: Partial<ButtonProps>): Button =>
213
+ new Button((props ? pluck(props, ButtonConfigKeys) : undefined) as Partial<ButtonConfig>),
214
+ applies: ['position', 'scale', 'pivot'],
215
+ exclude: ButtonConfigKeys as readonly string[],
216
+ }),
217
+
218
+ flexContainer: buildFactoryMethod({
219
+ // FlexContainer takes the full props bag (minus position/scale/pivot)
220
+ // as its constructor config — historical: the hand-written method
221
+ // passed `props as Partial<FlexContainerConfig>` directly rather than
222
+ // plucking FlexContainerConfigKeys. Preserving that shape.
223
+ build: (props?: Partial<FlexContainerProps>): FlexContainer =>
224
+ new FlexContainer(props as Partial<FlexContainerConfig>),
225
+ applies: ['position', 'scale', 'pivot'],
226
+ exclude: FlexContainerConfigKeys as readonly string[],
227
+ }),
228
+
229
+ uiCanvas: buildFactoryMethod({
230
+ build: (props?: Partial<UICanvasFactoryProps>): UICanvas =>
231
+ // UICanvas's ctor takes Partial<UICanvasProps>, which is a superset
232
+ // of UICanvasConfig — the pluck narrows, so cast back.
233
+ new UICanvas(props ? (pluck(props, UICanvasConfigKeys) as Partial<UICanvasProps>) : ({} as Partial<UICanvasProps>)),
234
+ applies: ['position', 'scale', 'pivot'],
235
+ exclude: UICanvasConfigKeys as readonly string[],
236
+ }),
237
+
238
+ spine: buildFactoryMethod({
239
+ build: (props?: Partial<SpineProps>): Spine => {
240
+ // Resolve Caper's `{data: 'spine/foo'}` shorthand into the Pixi
241
+ // `{skeleton, atlas}` pair expected by Spine.from().
242
+ let spineData: { skeleton: string; atlas: string } | string = '';
243
+ const data = props?.data;
244
+ if (typeof data === 'string') {
245
+ // If the asset name is missing an extension, default to .json. If
246
+ // it has one, strip it so we can re-append both skeleton + atlas
247
+ // paths from the base name.
248
+ let ext = data.slice(-5);
249
+ if (ext !== '.json' && ext !== '.skel') {
250
+ ext = '.json';
251
+ } else {
252
+ spineData = data.substring(0, data.length - 5);
253
+ }
254
+ spineData = { skeleton: data + ext, atlas: data + '.atlas' };
255
+ }
256
+ const entity: Spine = (window as unknown as { Spine: { from: (d: unknown) => Spine } }).Spine.from(
257
+ spineData,
258
+ );
259
+ // Spine-specific post-construct setup. Has to happen here (not in
260
+ // `applies`) because the helper doesn't know about spine state.
261
+ if (props?.autoUpdate !== undefined) entity.autoUpdate = props.autoUpdate;
262
+ if (props?.animationName) {
263
+ entity.state.setAnimation(props.trackIndex ?? 0, props.animationName, props.loop);
264
+ }
265
+ return entity;
266
+ },
267
+ applies: ['position', 'scale', 'pivot', 'anchor'],
268
+ exclude: ['data', 'autoUpdate', 'animationName', 'trackIndex', 'loop'],
269
+ }),
270
+
271
+ spineAnimation: <ANames extends string = string>(
272
+ props?: Partial<SpineProps>,
273
+ ): SpineAnimation<ANames> => {
274
+ // Hand-written rather than schema-driven because `buildFactoryMethod`
275
+ // can't carry the `<ANames>` generic through to the call site —
276
+ // kitchen-sink's SpineScene narrows the animation-name union via
277
+ // `this.add.spineAnimation<CharacterAnimations>({...})`, which
278
+ // requires the method itself to declare the generic.
279
+ const entity = new SpineAnimation<ANames>(props);
280
+ if (!props) return entity;
281
+ const { position, x, y, anchor, pivot, scale, scaleX, scaleY, ...rest } = props;
282
+ resolvePosition({ position, x, y }, entity);
283
+ resolveScale({ scale, scaleX, scaleY }, entity);
284
+ resolveAnchor(anchor, entity);
285
+ resolvePivot(pivot, entity);
286
+ resolveUnknownKeys(rest, entity);
287
+ return entity;
288
+ },
289
+
290
+ toaster: (toasterConfig?: Partial<ToasterConfig>, defaultToastConfig: Partial<ToastConfig> = {}): Toaster => {
291
+ return new Toaster(toasterConfig, defaultToastConfig);
292
+ },
293
+
294
+ /**
295
+ * Construct an entity from the auto-discovered registry. `id` is narrowed
296
+ * to the union of entity ids declared under `src/entities/` (see the
297
+ * generated `caper-app.d.ts`), and `props` is typed from the entity's
298
+ * constructor signature via `ConstructorParameters<typeof Entity>[0]`.
299
+ *
300
+ * Throws if `id` isn't registered. Discovery runs at build time, so the
301
+ * only way to hit this at runtime is a stale virtual module — fail loud
302
+ * and list the known ids so the user can see what's wrong.
303
+ *
304
+ * @example
305
+ * this.add.entity('actor', { color: 0xff0000, x: 50, y: 100 });
306
+ */
307
+ entity: <K extends EntityId>(
308
+ id: K,
309
+ props?: EntityProps<K> & EntityFactoryProps,
310
+ ): EntityInstance<K> => {
311
+ const Ctor = getEntityCtor(id as string);
312
+ if (!Ctor) {
313
+ const known = getRegisteredEntityIds();
314
+ throw new Error(
315
+ `[caper] Unknown entity id '${String(id)}'. ` +
316
+ `Known: ${known.length > 0 ? known.map((k) => `'${k}'`).join(', ') : '(none — discovery may have failed)'}`,
317
+ );
318
+ }
319
+ const instance = new (Ctor as new (props?: EntityProps<K>) => EntityInstance<K>)(props);
320
+ if (props) {
321
+ const { position, x, y, pivot, scale, scaleX, scaleY, alpha, visible } = props as EntityFactoryProps;
322
+ resolvePosition({ position, x, y }, instance);
323
+ resolveScale({ scale, scaleX, scaleY }, instance);
324
+ resolvePivot(pivot, instance);
325
+ if (alpha !== undefined) (instance as unknown as { alpha: number }).alpha = alpha;
326
+ if (visible !== undefined) (instance as unknown as { visible: boolean }).visible = visible;
327
+ }
328
+ return instance;
329
+ },
330
+
331
+ /**
332
+ * Construct a UI element from the auto-discovered registry. `id` is
333
+ * narrowed to the union of UI ids declared under `src/ui/` (see the
334
+ * generated `caper-app.d.ts`), and `props` is typed from the UI
335
+ * element's constructor signature via `ConstructorParameters<...>[0]`.
336
+ *
337
+ * @example
338
+ * this.add.ui('close-button', { x: 100, y: 50 });
339
+ */
340
+ ui: <K extends UIId>(
341
+ id: K,
342
+ props?: UIProps<K> & EntityFactoryProps,
343
+ ): UIInstance<K> => {
344
+ const Ctor = getUICtor(id as string);
345
+ if (!Ctor) {
346
+ const known = getRegisteredUIIds();
347
+ throw new Error(
348
+ `[caper] Unknown ui id '${String(id)}'. ` +
349
+ `Known: ${known.length > 0 ? known.map((k) => `'${k}'`).join(', ') : '(none — discovery may have failed)'}`,
350
+ );
351
+ }
352
+ const instance = new (Ctor as new (props?: UIProps<K>) => UIInstance<K>)(props);
353
+ if (props) {
354
+ const { position, x, y, pivot, scale, scaleX, scaleY, alpha, visible } = props as EntityFactoryProps;
355
+ resolvePosition({ position, x, y }, instance);
356
+ resolveScale({ scale, scaleX, scaleY }, instance);
357
+ resolvePivot(pivot, instance);
358
+ if (alpha !== undefined) (instance as unknown as { alpha: number }).alpha = alpha;
359
+ if (visible !== undefined) (instance as unknown as { visible: boolean }).visible = visible;
360
+ }
361
+ return instance;
362
+ },
363
+ };
@@ -0,0 +1,7 @@
1
+ export * from './methods';
2
+ export * from './const';
3
+ export * from './props';
4
+ export * from './utils';
5
+ export * from './Factory';
6
+ export { getRegisteredEntityIds } from './registry';
7
+ export { getRegisteredUIIds } from './ui-registry';
@@ -0,0 +1,21 @@
1
+ import { defaultFactoryMethods } from './index';
2
+
3
+ export function createFactoryMethods<T extends typeof defaultFactoryMethods = typeof defaultFactoryMethods>(
4
+ methods: Partial<T>,
5
+ instance: any,
6
+ addToStage: boolean,
7
+ ): T {
8
+ const factoryMethods: any = {};
9
+ for (const key in methods) {
10
+ factoryMethods[key] = (...args: any[]) => {
11
+ // @ts-expect-error - this is fine
12
+ const obj = methods[key](...args);
13
+ if (addToStage) {
14
+ instance.addChild(obj);
15
+ // instance.addChild(obj);
16
+ }
17
+ return obj;
18
+ };
19
+ }
20
+ return factoryMethods as T;
21
+ }
@@ -0,0 +1,207 @@
1
+ import type { LayoutOptions } from '@pixi/layout';
2
+ import { GraphicsContext, HTMLTextStyleOptions, TextStyleOptions } from 'pixi.js';
3
+ import { ContainerConfig } from '../../display';
4
+ import { ParticleContainerConfig } from '../../display/ParticleContainer';
5
+ import { ButtonConfig, FlexContainerConfig, UICanvasProps } from '../../ui';
6
+ import type {
7
+ BitmapFontFamilyAsset,
8
+ FontFamilyAsset,
9
+ PointLike,
10
+ SpineAsset,
11
+ SpritesheetAsset,
12
+ TextureAsset,
13
+ WithRequiredProps,
14
+ } from '../../utils';
15
+
16
+ export interface AbstractProps {
17
+ [key: string]: any;
18
+ }
19
+
20
+ export interface TextureProps {
21
+ asset: TextureAsset;
22
+ sheet: SpritesheetAsset;
23
+ }
24
+
25
+ export interface PositionProps {
26
+ x: number;
27
+ y: number;
28
+ position: PointLike;
29
+ }
30
+
31
+ export interface ScaleProps {
32
+ scaleX: number;
33
+ scaleY: number;
34
+ scale: PointLike;
35
+ }
36
+
37
+ export interface PivotProps {
38
+ pivot: PointLike;
39
+ }
40
+
41
+ export interface VisibilityProps {
42
+ alpha: number;
43
+ visible: boolean;
44
+ }
45
+
46
+ export interface LayoutProps {
47
+ layout?: Omit<LayoutOptions, 'target'> | null | boolean;
48
+ }
49
+
50
+ export interface ExistingProps extends AbstractProps, PositionProps, ScaleProps, VisibilityProps, LayoutProps {}
51
+
52
+ /**
53
+ * Layout-ish props the `this.add.entity(id, props)` factory applies after
54
+ * construction — intentionally narrow (no `AbstractProps` index signature)
55
+ * so TypeScript can still narrow entity-specific props at the call site.
56
+ */
57
+ export interface EntityFactoryProps
58
+ extends Partial<PositionProps>,
59
+ Partial<ScaleProps>,
60
+ Partial<PivotProps>,
61
+ Partial<VisibilityProps> {}
62
+
63
+ export interface GraphicsProps extends AbstractProps, PositionProps, ScaleProps, PivotProps, VisibilityProps {}
64
+
65
+ export interface SvgProps extends GraphicsProps {
66
+ ctx: string | GraphicsContext;
67
+ }
68
+
69
+ export interface SpriteProps
70
+ extends AbstractProps,
71
+ TextureProps,
72
+ ScaleProps,
73
+ PositionProps,
74
+ VisibilityProps,
75
+ LayoutProps {
76
+ anchor: PointLike;
77
+ }
78
+
79
+ export interface TilingSpriteProps extends SpriteProps {
80
+ tilePosition?: PointLike;
81
+ /**
82
+ * Scaling of the image that is being tiled.
83
+ * @default {x: 1, y: 1}
84
+ */
85
+ tileScale?: PointLike;
86
+ /**
87
+ * The rotation of the image that is being tiled.
88
+ * @default 0
89
+ */
90
+ tileRotation?: number;
91
+ /**
92
+ * The texture to use for the sprite.
93
+ * @default Texture.WHITE
94
+ */
95
+ /**
96
+ * The width of the tiling sprite. #
97
+ * @default 256
98
+ */
99
+ width?: number;
100
+ /**
101
+ * The height of the tiling sprite.
102
+ * @default 256
103
+ */
104
+ height?: number;
105
+ /**
106
+ * @default false
107
+ */
108
+ applyAnchorToTexture?: boolean;
109
+ /** Whether or not to round the x/y position. */
110
+ roundPixels?: boolean;
111
+ }
112
+
113
+ export interface AnimatedSpriteAnimationProps
114
+ extends AbstractProps,
115
+ ScaleProps,
116
+ PositionProps,
117
+ VisibilityProps,
118
+ LayoutProps {
119
+ texturePrefix: string;
120
+ sheet: SpritesheetAsset;
121
+ startIndex: number;
122
+ numFrames: number;
123
+ zeroPad: number;
124
+ autoUpdate: boolean;
125
+ updateAnchor: boolean;
126
+ loop: boolean;
127
+ animationSpeed: number;
128
+ }
129
+
130
+ export interface AnimatedSpriteProps extends AbstractProps, ScaleProps, PositionProps, VisibilityProps, LayoutProps {
131
+ sheet: SpritesheetAsset;
132
+ texturePrefix: string;
133
+ zeroPad: number;
134
+ animations: { [animationName: string]: Partial<AnimatedSpriteAnimationProps> };
135
+ autoPlay: boolean;
136
+ autoUpdate: boolean;
137
+ defaultAnimation: string;
138
+ reversible: boolean;
139
+ animationSpeed: number;
140
+ startIndex: number;
141
+ }
142
+
143
+ export type TextStyle = Partial<Omit<TextStyleOptions, 'fontFamily'> & { fontFamily: FontFamilyAsset }>;
144
+
145
+ export interface TextProps extends AbstractProps, PositionProps, ScaleProps, VisibilityProps, LayoutProps {
146
+ text: string;
147
+ anchor: PointLike;
148
+ resolution: number;
149
+ roundPixels: boolean;
150
+ style: TextStyle;
151
+ }
152
+
153
+ export interface BitmapTextProps extends AbstractProps, PositionProps, ScaleProps, VisibilityProps, LayoutProps {
154
+ text: string;
155
+ anchor: PointLike;
156
+ resolution: number;
157
+ roundPixels: boolean;
158
+ style: Partial<Omit<TextStyleOptions, 'fontFamily'> & { fontFamily: BitmapFontFamilyAsset }>;
159
+ }
160
+
161
+ export interface HTMLTextProps extends AbstractProps, PositionProps, ScaleProps, VisibilityProps, LayoutProps {
162
+ text: string;
163
+ anchor: PointLike;
164
+ resolution: number;
165
+ roundPixels: boolean;
166
+ style: Partial<Omit<HTMLTextStyleOptions, 'fontFamily'> & { fontFamily: FontFamilyAsset }>;
167
+ }
168
+
169
+ export interface OmittedTextProps extends AbstractProps, PositionProps, ScaleProps, VisibilityProps {}
170
+
171
+ export const TextPropsKeys: (keyof TextProps)[] = ['text', 'anchor', 'roundPixels', 'style', 'pivot'];
172
+
173
+ export interface ContainerProps
174
+ extends AbstractProps,
175
+ PositionProps,
176
+ ScaleProps,
177
+ PivotProps,
178
+ VisibilityProps,
179
+ LayoutProps,
180
+ ContainerConfig {}
181
+
182
+ export interface ParticleContainerProps extends AbstractProps, ParticleContainerConfig {}
183
+
184
+ export interface FlexContainerProps extends ContainerProps, FlexContainerConfig {}
185
+
186
+ export interface UICanvasFactoryProps extends ContainerProps, UICanvasProps {}
187
+
188
+ // spine
189
+ export interface SpineProps extends AbstractProps, ScaleProps, PositionProps, VisibilityProps, LayoutProps {
190
+ data: SpineAsset;
191
+ autoUpdate: boolean;
192
+ animationName: string;
193
+ trackIndex: number;
194
+ loop: boolean;
195
+ paused: boolean;
196
+ }
197
+
198
+ interface _ButtonProps
199
+ extends AbstractProps,
200
+ ScaleProps,
201
+ PositionProps,
202
+ PivotProps,
203
+ VisibilityProps,
204
+ ButtonConfig,
205
+ LayoutProps {}
206
+
207
+ export type ButtonProps = WithRequiredProps<_ButtonProps, 'textures'>;
@@ -0,0 +1,83 @@
1
+ import { beforeEach, describe, expect, it } from 'vitest';
2
+
3
+ import { _resetEntityRegistry, getEntityCtor, getRegisteredEntityIds } from './registry';
4
+
5
+ // The registry reads from `globalThis.Caper.get('entityList')` on first
6
+ // access — the caper-runtime virtual module normally populates this. In
7
+ // tests we stub it manually.
8
+ function stubGlobalEntityList(list: unknown): void {
9
+ (globalThis as unknown as { Caper: { get: (key: string) => unknown } }).Caper = {
10
+ get: (key: string) => (key === 'entityList' ? list : undefined),
11
+ };
12
+ }
13
+
14
+ class FakeActor {
15
+ constructor(public props?: { color?: number }) {}
16
+ }
17
+
18
+ class FakeBoy {
19
+ constructor() {}
20
+ }
21
+
22
+ describe('entity registry', () => {
23
+ beforeEach(() => {
24
+ _resetEntityRegistry();
25
+ delete (globalThis as unknown as { Caper?: unknown }).Caper;
26
+ });
27
+
28
+ it('registers static-import entities from globalThis.Caper.entityList on first access', () => {
29
+ stubGlobalEntityList([
30
+ { id: 'actor', active: true, module: FakeActor },
31
+ { id: 'boy', active: true, module: FakeBoy },
32
+ ]);
33
+ expect(getRegisteredEntityIds().sort()).toEqual(['actor', 'boy']);
34
+ expect(getEntityCtor('actor')).toBe(FakeActor);
35
+ expect(getEntityCtor('boy')).toBe(FakeBoy);
36
+ });
37
+
38
+ it('skips inactive entries', () => {
39
+ stubGlobalEntityList([
40
+ { id: 'actor', active: true, module: FakeActor },
41
+ { id: 'inactive', active: false, module: FakeBoy },
42
+ ]);
43
+ expect(getRegisteredEntityIds()).toEqual(['actor']);
44
+ expect(getEntityCtor('inactive')).toBeUndefined();
45
+ });
46
+
47
+ it('skips dynamic-import entries (arrow functions without prototypes)', () => {
48
+ const dynamicLoader = () => Promise.resolve({ default: FakeBoy });
49
+ stubGlobalEntityList([
50
+ { id: 'actor', active: true, module: FakeActor },
51
+ { id: 'lazy', active: true, module: dynamicLoader },
52
+ ]);
53
+ // Only the static-import entry is registered — sync `this.add.entity`
54
+ // can't wait for a dynamic import.
55
+ expect(getRegisteredEntityIds()).toEqual(['actor']);
56
+ expect(getEntityCtor('lazy')).toBeUndefined();
57
+ });
58
+
59
+ it('returns undefined for unknown ids without throwing', () => {
60
+ stubGlobalEntityList([{ id: 'actor', active: true, module: FakeActor }]);
61
+ expect(getEntityCtor('nonexistent')).toBeUndefined();
62
+ });
63
+
64
+ it('handles missing globalThis.Caper gracefully (empty registry)', () => {
65
+ // No stub set — Caper is undefined.
66
+ expect(getRegisteredEntityIds()).toEqual([]);
67
+ expect(getEntityCtor('anything')).toBeUndefined();
68
+ });
69
+
70
+ it('caches the registry after first lookup (list only read once)', () => {
71
+ let readCount = 0;
72
+ (globalThis as unknown as { Caper: { get: (key: string) => unknown } }).Caper = {
73
+ get: (key: string) => {
74
+ if (key === 'entityList') readCount++;
75
+ return [{ id: 'actor', active: true, module: FakeActor }];
76
+ },
77
+ };
78
+ getEntityCtor('actor');
79
+ getEntityCtor('actor');
80
+ getRegisteredEntityIds();
81
+ expect(readCount).toBe(1);
82
+ });
83
+ });