@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,160 @@
1
+ import { IApplication } from '../core';
2
+ import { Signal } from '../signals';
3
+ import { isDev, KeyboardKey, Logger } from '../utils';
4
+ import type { IPlugin } from './Plugin';
5
+ import { Plugin } from './Plugin';
6
+
7
+ export type KeyboardEventType = 'keydown' | 'keyup';
8
+ export type KeyboardEventDetail = { event: KeyboardEvent; key: string };
9
+ export type KeySignal = Signal<(detail: KeyboardEventDetail) => void>;
10
+
11
+ export interface IKeyboardPlugin extends IPlugin {
12
+ enabled: boolean;
13
+ readonly keysDown: Set<string>;
14
+
15
+ onKeyDown(key?: KeyboardKey): KeySignal;
16
+
17
+ onKeyUp(key?: KeyboardKey): KeySignal;
18
+
19
+ isKeyDown(key: string): boolean;
20
+ }
21
+
22
+ export function normalizeKey(key: string | undefined): string {
23
+ if (key === undefined) {
24
+ key = '*undefined*';
25
+ } else if (key === ' ') {
26
+ key = 'Space';
27
+ } else if (key.length === 1) {
28
+ key = key.toUpperCase();
29
+ }
30
+ return key;
31
+ }
32
+
33
+ export class KeyboardPlugin extends Plugin implements IKeyboardPlugin {
34
+ public readonly id: string = 'keyboard';
35
+ // global signals
36
+ public onGlobalKeyDown: Signal<(detail: KeyboardEventDetail) => void> = new Signal();
37
+ public onGlobalKeyUp: Signal<(detail: KeyboardEventDetail) => void> = new Signal();
38
+
39
+ private _keyDownSignals: Map<string | undefined, KeySignal> = new Map();
40
+ private _keyUpSignals: Map<string | undefined, KeySignal> = new Map();
41
+
42
+ private _keysDown: Set<string> = new Set();
43
+
44
+ // Dev-only guard: warn once if key events arrive with no consumers connected.
45
+ private _warnedNoConsumers = false;
46
+
47
+ get keysDown() {
48
+ return this._keysDown;
49
+ }
50
+
51
+ private _enabled: boolean = true;
52
+
53
+ public get enabled(): boolean {
54
+ return this._enabled;
55
+ }
56
+
57
+ public set enabled(value: boolean) {
58
+ this._enabled = value;
59
+ }
60
+
61
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
62
+ public initialize(_options: any, _app: IApplication): void {
63
+ // track which keys are down
64
+ document.addEventListener('keydown', this._handleKeyDown);
65
+ document.addEventListener('keyup', this._handleKeyUp);
66
+ }
67
+
68
+ public destroy() {
69
+ document.removeEventListener('keydown', this._handleKeyDown);
70
+ document.removeEventListener('keyup', this._handleKeyUp);
71
+ document.removeEventListener('keydown', this._handleEvent);
72
+ document.removeEventListener('keyup', this._handleEvent);
73
+ }
74
+
75
+ public onKeyDown(key?: KeyboardKey): KeySignal {
76
+ return this._checkAndAddSignal(key || undefined, 'keydown');
77
+ }
78
+
79
+ public onKeyUp(key?: KeyboardKey): KeySignal {
80
+ return this._checkAndAddSignal(key || undefined, 'keyup');
81
+ }
82
+
83
+ public isKeyDown(key: KeyboardKey): boolean {
84
+ return this._keysDown.has(key);
85
+ }
86
+
87
+ _update() {
88
+ //
89
+ }
90
+
91
+ protected getCoreSignals(): string[] {
92
+ return ['onGlobalKeyDown', 'onGlobalKeyUp'];
93
+ }
94
+
95
+ protected getCoreFunctions(): string[] {
96
+ return ['onKeyDown', 'onKeyUp', 'isKeyDown'];
97
+ }
98
+
99
+ private _handleKeyDown(e: KeyboardEvent): void {
100
+ const key = normalizeKey(e.key);
101
+ this._keysDown.add(key);
102
+ this.onGlobalKeyDown.emit({ event: e, key: e.key });
103
+ }
104
+
105
+ private _handleKeyUp(e: KeyboardEvent): void {
106
+ const key = normalizeKey(e.key);
107
+ this._keysDown.delete(key);
108
+ // DX guard: a key arrived but nothing consumes it (no KeyboardControls / no
109
+ // onKeyDown|onKeyUp subscribers). Almost always an Application subclass whose
110
+ // postInitialize() skipped framework wiring, or controls never connected.
111
+ if (isDev && !this._warnedNoConsumers && this._keyUpSignals.size === 0 && this._keyDownSignals.size === 0) {
112
+ this._warnedNoConsumers = true;
113
+ Logger.warn(
114
+ 'KeyboardPlugin received a key event but no consumers are connected, so keyboard ' +
115
+ 'actions will not fire. Ensure the InputPlugin controls are connected — e.g. an ' +
116
+ 'Application subclass overriding postInitialize() must not skip framework wiring, ' +
117
+ 'or call app.controls.connect().',
118
+ );
119
+ }
120
+ this.onGlobalKeyUp.emit({ event: e, key: e.key });
121
+ }
122
+
123
+ /**
124
+ * Check if the signal exists and add it if it doesn't
125
+ * Also, if this is the first signal, start listening for the event
126
+ * @param {string} key
127
+ * @param {KeyboardEventType} eventType
128
+ * @returns {KeySignal}
129
+ * @private
130
+ */
131
+ private _checkAndAddSignal(key: string | undefined, eventType: KeyboardEventType): KeySignal {
132
+ const signalMap = eventType === 'keydown' ? this._keyDownSignals : this._keyUpSignals;
133
+
134
+ if (!signalMap.size) {
135
+ this._listen(eventType);
136
+ }
137
+
138
+ key = normalizeKey(key);
139
+
140
+ if (!signalMap.has(key)) {
141
+ signalMap.set(key, new Signal<(detail: KeyboardEventDetail) => void>());
142
+ }
143
+
144
+ return signalMap.get(key) as KeySignal;
145
+ }
146
+
147
+ private _listen(eventType: KeyboardEventType): void {
148
+ document.addEventListener(eventType, this._handleEvent);
149
+ }
150
+
151
+ private _handleEvent(event: KeyboardEvent): void {
152
+ if (!this._enabled) {
153
+ return;
154
+ }
155
+ const signalMap = event.type === 'keydown' ? this._keyDownSignals : this._keyUpSignals;
156
+ const key = normalizeKey(event.key);
157
+ signalMap.get('*undefined*')?.emit({ event, key });
158
+ signalMap.get(key)?.emit({ event, key });
159
+ }
160
+ }
@@ -0,0 +1,127 @@
1
+ import '@pixi/layout';
2
+ import { Layout } from '@pixi/layout';
3
+ import '@pixi/layout/devtools';
4
+
5
+ import { Plugin, type IPlugin } from './Plugin';
6
+
7
+ /**
8
+ * Interface for the Layout plugin providing PIXI.js layout management.
9
+ * Enables advanced CSS-like layout capabilities for PIXI display objects.
10
+ */
11
+ export interface ILayoutPlugin extends IPlugin {}
12
+
13
+ /**
14
+ * Layout management plugin for PIXI.js applications using @pixi/layout.
15
+ *
16
+ * Integrates the @pixi/layout library to provide CSS-like layout capabilities
17
+ * for PIXI display objects, including flexbox, positioning, and responsive design.
18
+ * Automatically configures sensible default styles for consistent layout behavior.
19
+ *
20
+ * Key Features:
21
+ * - CSS Flexbox-like layout system for PIXI containers
22
+ * - Responsive design capabilities with intrinsic sizing
23
+ * - Automatic layout calculation and positioning
24
+ * - Gap, padding, and margin support
25
+ * - Transform origin and object positioning controls
26
+ * - Development tools integration for layout debugging
27
+ *
28
+ * Default Style Configuration:
29
+ * - Container: Auto width/height with no gap
30
+ * - Leaf: Intrinsic sizing with flex shrink enabled
31
+ * - Shared: Center transform origin, row direction, stretch alignment
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * // Plugin is automatically initialized with the application
36
+ * // Layout capabilities are immediately available on all containers
37
+ *
38
+ * // Create a flexbox-style layout
39
+ * const container = new PIXI.Container();
40
+ * container.layout = {
41
+ * display: 'flex',
42
+ * flexDirection: 'row',
43
+ * justifyContent: 'space-between',
44
+ * alignItems: 'center',
45
+ * gap: 10,
46
+ * padding: 20
47
+ * };
48
+ *
49
+ * // Add children that will be automatically laid out
50
+ * const button1 = new PIXI.Sprite(buttonTexture);
51
+ * const button2 = new PIXI.Sprite(buttonTexture);
52
+ * const button3 = new PIXI.Sprite(buttonTexture);
53
+ *
54
+ * container.addChild(button1, button2, button3);
55
+ * // Children are automatically positioned using flexbox rules
56
+ *
57
+ * // Responsive design with intrinsic sizing
58
+ * const responsiveContainer = new PIXI.Container();
59
+ * responsiveContainer.layout = {
60
+ * width: '100%',
61
+ * maxWidth: 800,
62
+ * flexDirection: 'column',
63
+ * alignItems: 'center'
64
+ * };
65
+ * ```
66
+ *
67
+ * @remarks
68
+ * - Requires @pixi/layout package to be installed
69
+ * - Provides devtools integration for layout debugging in development
70
+ * - Default styles are optimized for common game UI patterns
71
+ * - Layout calculations happen automatically when display objects are added/modified
72
+ * - Supports both absolute and relative positioning
73
+ */
74
+ export class LayoutPlugin extends Plugin implements ILayoutPlugin {
75
+ /** Plugin identifier for framework registration */
76
+ public readonly id = 'LayoutPlugin';
77
+
78
+ /**
79
+ * Initializes the Layout plugin with optimized default styles.
80
+ * Configures the @pixi/layout system with sensible defaults for game development,
81
+ * including flexbox behavior, sizing, and alignment settings.
82
+ *
83
+ * Default Configuration Details:
84
+ * - **Container styles**: Auto-sizing with no gaps for efficient nesting
85
+ * - **Leaf styles**: Intrinsic sizing with flex shrink for responsive behavior
86
+ * - **Shared styles**: Center origins, row direction, and stretch alignment
87
+ * - **Transform origin**: Set to 50% for predictable scaling and rotation
88
+ * - **Object position**: Centered for consistent alignment behavior
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * // Called automatically by the plugin system
93
+ * // After initialization, all PIXI containers support layout properties
94
+ *
95
+ * const container = new PIXI.Container();
96
+ * container.layout = {
97
+ * display: 'flex', // Use flexbox layout
98
+ * flexDirection: 'column', // Stack children vertically
99
+ * gap: 10, // 10px gap between children
100
+ * padding: 15 // 15px padding around content
101
+ * };
102
+ * ```
103
+ */
104
+ async initialize() {
105
+ Layout.defaultStyle = {
106
+ container: {
107
+ width: 'auto',
108
+ height: 'auto',
109
+ gap: 0,
110
+ },
111
+ leaf: {
112
+ width: 'intrinsic',
113
+ height: 'intrinsic',
114
+ flexShrink: 1,
115
+ },
116
+ shared: {
117
+ transformOrigin: '50%',
118
+ objectPosition: 'center',
119
+ flexShrink: 1,
120
+ flexDirection: 'row',
121
+ alignContent: 'stretch',
122
+ flexWrap: 'nowrap',
123
+ overflow: 'visible',
124
+ },
125
+ };
126
+ }
127
+ }
@@ -0,0 +1,308 @@
1
+ import { Container as PIXIContainer } from 'pixi.js';
2
+ import { IPlugin, Plugin } from '.';
3
+ import { Container } from '../display';
4
+
5
+ /**
6
+ * Interface for the LookupPlugin providing fast container lookup functionality.
7
+ * Enables O(1) lookups of PIXI containers using hierarchical path strings.
8
+ */
9
+ export interface ILookupPlugin extends IPlugin {
10
+ /**
11
+ * Retrieves a container at the specified hierarchical path.
12
+ * @param path - Slash-separated path like 'Parent/Child/GrandChild'
13
+ * @returns The container at the path, or undefined if not found
14
+ * @example
15
+ * ```typescript
16
+ * const button = lookupPlugin.getChildAtPath('UI/Menu/StartButton');
17
+ * ```
18
+ */
19
+ getChildAtPath(path: string): PIXIContainer | undefined;
20
+
21
+ /**
22
+ * Gets the hierarchical path for a given container.
23
+ * @param container - The PIXI container to get the path for
24
+ * @returns The hierarchical path string, or empty string if not tracked
25
+ * @example
26
+ * ```typescript
27
+ * const path = lookupPlugin.getPathForChild(myContainer); // 'Parent/Child'
28
+ * ```
29
+ */
30
+ getPathForChild(container: PIXIContainer): string;
31
+
32
+ /**
33
+ * Batch retrieval of containers at multiple paths.
34
+ * @param paths - Array of hierarchical paths to look up
35
+ * @returns Array of containers found at the specified paths (undefined entries filtered out)
36
+ * @example
37
+ * ```typescript
38
+ * const [ui, player] = lookupPlugin.getChildrenAtPaths('UI/HUD', 'Game/Player');
39
+ * ```
40
+ */
41
+ getChildrenAtPaths(...paths: string[]): PIXIContainer[];
42
+
43
+ /**
44
+ * Batch retrieval of paths for multiple containers.
45
+ * @param containers - Array of PIXI containers to get paths for
46
+ * @returns Array of hierarchical paths for the containers
47
+ * @example
48
+ * ```typescript
49
+ * const paths = lookupPlugin.getPathsForChildren(container1, container2);
50
+ * ```
51
+ */
52
+ getPathsForChildren(...containers: PIXIContainer[]): string[];
53
+
54
+ /**
55
+ * Gets all currently tracked hierarchical paths.
56
+ * @returns Array of all path strings in the lookup system
57
+ * @example
58
+ * ```typescript
59
+ * const allPaths = lookupPlugin.getAllPaths(); // ['UI/Menu', 'Game/Player', ...]
60
+ * ```
61
+ */
62
+ getAllPaths(): string[];
63
+ }
64
+
65
+ /**
66
+ * High-performance container lookup plugin for PIXI.js applications.
67
+ *
68
+ * Provides O(1) lookup of containers using hierarchical path strings by maintaining
69
+ * bidirectional maps between paths and containers. Automatically tracks container
70
+ * hierarchy changes through global Container events.
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // Access containers by path
75
+ * const player = app.lookup.getChildAtPath('Game/Entities/Player');
76
+ * const menuButton = app.lookup.getChildAtPath('UI/MainMenu/StartButton');
77
+ *
78
+ * // Get paths for containers
79
+ * const playerPath = app.lookup.getPathForChild(playerSprite); // 'Game/Entities/Player'
80
+ * ```
81
+ *
82
+ * @remarks
83
+ * - Paths are built using container labels in hierarchical order
84
+ * - Only containers with labels are included in paths
85
+ * - Automatically handles container addition/removal through event listeners
86
+ * - Uses Map data structures for optimal performance
87
+ */
88
+ export class LookupPlugin extends Plugin implements ILookupPlugin {
89
+ public name = 'lookup';
90
+
91
+ /** Fast O(1) lookup map: hierarchical path -> container reference */
92
+ private pathToContainer = new Map<string, PIXIContainer>();
93
+
94
+ /** Reverse lookup for efficient path updates: container reference -> hierarchical path */
95
+ private containerToPath = new Map<PIXIContainer, string>();
96
+
97
+ /**
98
+ * Core function names exposed by this plugin for framework integration.
99
+ */
100
+ get coreFunctions(): string[] {
101
+ return ['getChildAtPath', 'getPathForChild', 'getChildrenAtPaths', 'getPathsForChildren', 'getAllPaths'];
102
+ }
103
+
104
+ /**
105
+ * Initializes the lookup plugin by connecting to global container events.
106
+ * Sets up automatic tracking of container hierarchy changes.
107
+ */
108
+ public async initialize() {
109
+ Container.onGlobalChildAdded.connect(this.onChildAdded);
110
+ Container.onGlobalChildRemoved.connect(this.onChildRemoved);
111
+ }
112
+
113
+ /**
114
+ * Fast O(1) lookup of container by hierarchical path.
115
+ *
116
+ * @param path - Slash-separated path like 'Parent/Child/GrandChild'
117
+ * @returns The container at the specified path, or undefined if not found
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * // Get a specific UI element
122
+ * const healthBar = lookup.getChildAtPath('UI/HUD/HealthBar');
123
+ * if (healthBar) {
124
+ * // Update health display
125
+ * healthBar.visible = true;
126
+ * }
127
+ * ```
128
+ */
129
+ public getChildAtPath(path: string): PIXIContainer | undefined {
130
+ return this.pathToContainer.get(path);
131
+ }
132
+
133
+ /**
134
+ * Batch retrieval of containers at multiple paths.
135
+ * Filters out undefined results for convenience.
136
+ *
137
+ * @param paths - Variable number of hierarchical paths to look up
138
+ * @returns Array of found containers (undefined entries filtered out)
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * // Get multiple UI elements at once
143
+ * const [menu, hud, inventory] = lookup.getChildrenAtPaths(
144
+ * 'UI/MainMenu',
145
+ * 'UI/HUD',
146
+ * 'UI/Inventory'
147
+ * );
148
+ * ```
149
+ */
150
+ public getChildrenAtPaths(...paths: string[]): PIXIContainer[] {
151
+ return paths.map((path) => this.getChildAtPath(path)).filter((container) => container !== undefined);
152
+ }
153
+
154
+ /**
155
+ * Get the hierarchical path for a given container.
156
+ *
157
+ * @param container - The container to get the path for
158
+ * @returns The hierarchical path or empty string if not tracked
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * // Get path for debugging or logging
163
+ * const containerPath = lookup.getPathForChild(someSprite);
164
+ * console.log(`Container is at: ${containerPath}`);
165
+ * ```
166
+ */
167
+ public getPathForChild(container: PIXIContainer): string {
168
+ return this.containerToPath.get(container) || '';
169
+ }
170
+
171
+ /**
172
+ * Batch retrieval of paths for multiple containers.
173
+ *
174
+ * @param containers - Variable number of PIXI containers to get paths for
175
+ * @returns Array of hierarchical paths for the containers
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * // Get paths for multiple containers for debugging
180
+ * const paths = lookup.getPathsForChildren(sprite1, sprite2, sprite3);
181
+ * console.log('Container paths:', paths);
182
+ * ```
183
+ */
184
+ public getPathsForChildren(...containers: PIXIContainer[]): string[] {
185
+ return containers.map((container) => this.getPathForChild(container));
186
+ }
187
+
188
+ /**
189
+ * Gets all currently tracked hierarchical paths.
190
+ * Useful for debugging, serialization, or introspection.
191
+ *
192
+ * @returns Array of all path strings in the lookup system
193
+ *
194
+ * @example
195
+ * ```typescript
196
+ * // Debug all tracked containers
197
+ * const allPaths = lookup.getAllPaths();
198
+ * console.log('All tracked containers:', allPaths);
199
+ * ```
200
+ */
201
+ public getAllPaths(): string[] {
202
+ return Array.from(this.pathToContainer.keys());
203
+ }
204
+
205
+ /**
206
+ * Gets all currently tracked containers.
207
+ * Useful for bulk operations or debugging.
208
+ *
209
+ * @returns Array of all container references in the lookup system
210
+ */
211
+ public getAllChildren(): PIXIContainer[] {
212
+ return Array.from(this.pathToContainer.values());
213
+ }
214
+
215
+ /**
216
+ * Event handler for when a child is added to any container.
217
+ * Automatically adds the new container to the lookup system.
218
+ *
219
+ * @param child - The newly added container
220
+ */
221
+ private onChildAdded(child: PIXIContainer) {
222
+ this.addToLookup(child);
223
+ }
224
+
225
+ /**
226
+ * Event handler for when a child is removed from any container.
227
+ * Automatically removes the container from the lookup system.
228
+ *
229
+ * @param child - The removed container
230
+ */
231
+ private onChildRemoved(child: PIXIContainer) {
232
+ this.removeFromLookup(child);
233
+ }
234
+
235
+ /**
236
+ * Add a container and all its descendants to the lookup system.
237
+ * Recursively processes the entire subtree to maintain lookup integrity.
238
+ *
239
+ * @param container - The container to add (along with all its children)
240
+ */
241
+ private addToLookup(container: PIXIContainer): void {
242
+ const path = this.buildPath(container);
243
+
244
+ if (path) {
245
+ this.pathToContainer.set(path, container);
246
+ this.containerToPath.set(container, path);
247
+ }
248
+
249
+ // Recursively add all children to maintain lookup integrity
250
+ if (container.children) {
251
+ for (const child of container.children) {
252
+ this.addToLookup(child as PIXIContainer);
253
+ }
254
+ }
255
+ }
256
+
257
+ /**
258
+ * Remove a container and all its descendants from the lookup system.
259
+ * Recursively processes the entire subtree to prevent memory leaks.
260
+ *
261
+ * @param container - The container to remove (along with all its children)
262
+ */
263
+ private removeFromLookup(container: PIXIContainer): void {
264
+ // Remove all descendants first
265
+ if (container.children) {
266
+ for (const child of container.children) {
267
+ this.removeFromLookup(child as PIXIContainer);
268
+ }
269
+ }
270
+
271
+ // Remove this container from lookup
272
+ const path = this.containerToPath.get(container);
273
+ if (path) {
274
+ this.pathToContainer.delete(path);
275
+ this.containerToPath.delete(container);
276
+ }
277
+ }
278
+
279
+ /**
280
+ * Build the hierarchical path for a container by traversing up the parent chain.
281
+ * Only includes containers with labels in the path, stopping at 'Stage'.
282
+ *
283
+ * @param container - The container to build a path for
284
+ * @returns The hierarchical path string, or empty string if no labeled ancestors
285
+ *
286
+ * @example
287
+ * ```typescript
288
+ * // For a container structure: Stage -> Game -> Player -> HealthBar
289
+ * // Where each has a label, this would return: 'Game/Player/HealthBar'
290
+ * ```
291
+ */
292
+ private buildPath(container: PIXIContainer): string {
293
+ const pathSegments: string[] = [];
294
+ let current: PIXIContainer | null = container;
295
+
296
+ // Traverse up the parent chain to build path segments
297
+ while (current && current.label) {
298
+ pathSegments.unshift(current.label);
299
+ current = current.parent as PIXIContainer;
300
+ if (current?.label === 'Stage') {
301
+ break;
302
+ }
303
+ }
304
+
305
+ // Only return a path if we have at least one labeled segment
306
+ return pathSegments.length > 0 ? pathSegments.join('/') : '';
307
+ }
308
+ }
@@ -0,0 +1,73 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+
3
+ // Plugin.ts transitively imports Application → Pixi display graph. Stub it.
4
+ vi.mock('../core', () => ({
5
+ coreFunctionRegistry: {},
6
+ coreSignalRegistry: {},
7
+ }));
8
+ vi.mock('../core/Application', () => ({
9
+ Application: { getInstance: () => ({}) },
10
+ }));
11
+
12
+ import { Signal } from '../signals';
13
+ import { Plugin } from './Plugin';
14
+
15
+ class TestPlugin extends Plugin<{ foo: string }> {
16
+ public initCalls = 0;
17
+ public postCalls = 0;
18
+ public readonly id = 'test';
19
+ protected _options = { foo: 'default' };
20
+
21
+ async initialize(options: Partial<{ foo: string }> = {}) {
22
+ this._options = { ...this._options, ...options };
23
+ this.initCalls++;
24
+ }
25
+
26
+ async postInitialize() {
27
+ this.postCalls++;
28
+ }
29
+ }
30
+
31
+ describe('Plugin', () => {
32
+ it('runs initialize and merges options', async () => {
33
+ const p = new TestPlugin();
34
+ await p.initialize({ foo: 'bar' });
35
+ expect(p.initCalls).toBe(1);
36
+ expect(p.options.foo).toBe('bar');
37
+ });
38
+
39
+ it('runs postInitialize independently', async () => {
40
+ const p = new TestPlugin();
41
+ await p.postInitialize();
42
+ expect(p.postCalls).toBe(1);
43
+ });
44
+
45
+ it('destroy disconnects tracked signal connections', () => {
46
+ const p = new TestPlugin();
47
+ const s = new Signal<() => void>();
48
+ const handler = vi.fn();
49
+ p.addSignalConnection(s.connect(handler));
50
+ s.emit();
51
+ expect(handler).toHaveBeenCalledTimes(1);
52
+
53
+ p.destroy();
54
+ s.emit();
55
+ expect(handler).toHaveBeenCalledTimes(1);
56
+ });
57
+
58
+ it('clearSignalConnections disconnects without destroying', () => {
59
+ const p = new TestPlugin();
60
+ const s = new Signal<() => void>();
61
+ const handler = vi.fn();
62
+ p.addSignalConnection(s.connect(handler));
63
+ p.clearSignalConnections();
64
+ s.emit();
65
+ expect(handler).not.toHaveBeenCalled();
66
+ });
67
+
68
+ it('base Plugin.initialize/postInitialize resolve without error', async () => {
69
+ const p = new Plugin('base');
70
+ await expect(p.initialize({})).resolves.toBeUndefined();
71
+ await expect(p.postInitialize({} as never)).resolves.toBeUndefined();
72
+ });
73
+ });