@number10/jsx-core 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/LICENSE +667 -0
  2. package/README.md +38 -0
  3. package/dist/animation/animated-signal.cjs +19 -0
  4. package/dist/animation/animated-signal.cjs.map +1 -0
  5. package/dist/animation/animated-signal.d.ts +35 -0
  6. package/dist/animation/animated-signal.d.ts.map +1 -0
  7. package/dist/animation/animated-signal.js +19 -0
  8. package/dist/animation/animated-signal.js.map +1 -0
  9. package/dist/animation/create-spring.cjs +80 -0
  10. package/dist/animation/create-spring.cjs.map +1 -0
  11. package/dist/animation/create-spring.d.ts +56 -0
  12. package/dist/animation/create-spring.d.ts.map +1 -0
  13. package/dist/animation/create-spring.js +80 -0
  14. package/dist/animation/create-spring.js.map +1 -0
  15. package/dist/animation/easing.cjs +76 -0
  16. package/dist/animation/easing.cjs.map +1 -0
  17. package/dist/animation/easing.d.ts +45 -0
  18. package/dist/animation/easing.d.ts.map +1 -0
  19. package/dist/animation/easing.js +76 -0
  20. package/dist/animation/easing.js.map +1 -0
  21. package/dist/animation/effect-definitions.cjs +441 -0
  22. package/dist/animation/effect-definitions.cjs.map +1 -0
  23. package/dist/animation/effect-definitions.d.ts +60 -0
  24. package/dist/animation/effect-definitions.d.ts.map +1 -0
  25. package/dist/animation/effect-definitions.js +441 -0
  26. package/dist/animation/effect-definitions.js.map +1 -0
  27. package/dist/animation/effect-engine.cjs +189 -0
  28. package/dist/animation/effect-engine.cjs.map +1 -0
  29. package/dist/animation/effect-engine.d.ts +70 -0
  30. package/dist/animation/effect-engine.d.ts.map +1 -0
  31. package/dist/animation/effect-engine.js +189 -0
  32. package/dist/animation/effect-engine.js.map +1 -0
  33. package/dist/animation/index.d.ts +24 -0
  34. package/dist/animation/index.d.ts.map +1 -0
  35. package/dist/animation/spring-physics.cjs +94 -0
  36. package/dist/animation/spring-physics.cjs.map +1 -0
  37. package/dist/animation/spring-physics.d.ts +145 -0
  38. package/dist/animation/spring-physics.d.ts.map +1 -0
  39. package/dist/animation/spring-physics.js +94 -0
  40. package/dist/animation/spring-physics.js.map +1 -0
  41. package/dist/animation/tween.cjs +67 -0
  42. package/dist/animation/tween.cjs.map +1 -0
  43. package/dist/animation/tween.d.ts +60 -0
  44. package/dist/animation/tween.d.ts.map +1 -0
  45. package/dist/animation/tween.js +67 -0
  46. package/dist/animation/tween.js.map +1 -0
  47. package/dist/animation/types.d.ts +31 -0
  48. package/dist/animation/types.d.ts.map +1 -0
  49. package/dist/animation/useSpring.cjs +152 -0
  50. package/dist/animation/useSpring.cjs.map +1 -0
  51. package/dist/animation/useSpring.d.ts +55 -0
  52. package/dist/animation/useSpring.d.ts.map +1 -0
  53. package/dist/animation/useSpring.js +149 -0
  54. package/dist/animation/useSpring.js.map +1 -0
  55. package/dist/animation/useTween.cjs +208 -0
  56. package/dist/animation/useTween.cjs.map +1 -0
  57. package/dist/animation/useTween.d.ts +116 -0
  58. package/dist/animation/useTween.d.ts.map +1 -0
  59. package/dist/animation/useTween.js +208 -0
  60. package/dist/animation/useTween.js.map +1 -0
  61. package/dist/border-geometry.cjs +447 -0
  62. package/dist/border-geometry.cjs.map +1 -0
  63. package/dist/border-geometry.d.ts +114 -0
  64. package/dist/border-geometry.d.ts.map +1 -0
  65. package/dist/border-geometry.js +447 -0
  66. package/dist/border-geometry.js.map +1 -0
  67. package/dist/colors/color-presets.cjs +236 -0
  68. package/dist/colors/color-presets.cjs.map +1 -0
  69. package/dist/colors/color-presets.d.ts +89 -0
  70. package/dist/colors/color-presets.d.ts.map +1 -0
  71. package/dist/colors/color-presets.js +236 -0
  72. package/dist/colors/color-presets.js.map +1 -0
  73. package/dist/colors/color-theme-helpers.cjs +32 -0
  74. package/dist/colors/color-theme-helpers.cjs.map +1 -0
  75. package/dist/colors/color-theme-helpers.d.ts +65 -0
  76. package/dist/colors/color-theme-helpers.d.ts.map +1 -0
  77. package/dist/colors/color-theme-helpers.js +32 -0
  78. package/dist/colors/color-theme-helpers.js.map +1 -0
  79. package/dist/colors/color-types.cjs +38 -0
  80. package/dist/colors/color-types.cjs.map +1 -0
  81. package/dist/colors/color-types.d.ts +112 -0
  82. package/dist/colors/color-types.d.ts.map +1 -0
  83. package/dist/colors/color-types.js +38 -0
  84. package/dist/colors/color-types.js.map +1 -0
  85. package/dist/colors/color-utils.cjs +197 -0
  86. package/dist/colors/color-utils.cjs.map +1 -0
  87. package/dist/colors/color-utils.d.ts +216 -0
  88. package/dist/colors/color-utils.d.ts.map +1 -0
  89. package/dist/colors/color-utils.js +197 -0
  90. package/dist/colors/color-utils.js.map +1 -0
  91. package/dist/colors/contrast-contracts.cjs +265 -0
  92. package/dist/colors/contrast-contracts.cjs.map +1 -0
  93. package/dist/colors/contrast-contracts.d.ts +289 -0
  94. package/dist/colors/contrast-contracts.d.ts.map +1 -0
  95. package/dist/colors/contrast-contracts.js +265 -0
  96. package/dist/colors/contrast-contracts.js.map +1 -0
  97. package/dist/colors/index.cjs +55 -0
  98. package/dist/colors/index.cjs.map +1 -0
  99. package/dist/colors/index.d.ts +16 -0
  100. package/dist/colors/index.d.ts.map +1 -0
  101. package/dist/colors/index.js +55 -0
  102. package/dist/colors/index.js.map +1 -0
  103. package/dist/core-props.cjs +66 -0
  104. package/dist/core-props.cjs.map +1 -0
  105. package/dist/core-props.d.ts +395 -0
  106. package/dist/core-props.d.ts.map +1 -0
  107. package/dist/core-props.js +66 -0
  108. package/dist/core-props.js.map +1 -0
  109. package/dist/design-tokens/design-token-presets.cjs +91 -0
  110. package/dist/design-tokens/design-token-presets.cjs.map +1 -0
  111. package/dist/design-tokens/design-token-presets.d.ts +34 -0
  112. package/dist/design-tokens/design-token-presets.d.ts.map +1 -0
  113. package/dist/design-tokens/design-token-presets.js +91 -0
  114. package/dist/design-tokens/design-token-presets.js.map +1 -0
  115. package/dist/design-tokens/design-token-types.d.ts +97 -0
  116. package/dist/design-tokens/design-token-types.d.ts.map +1 -0
  117. package/dist/design-tokens/index.cjs +10 -0
  118. package/dist/design-tokens/index.cjs.map +1 -0
  119. package/dist/design-tokens/index.d.ts +9 -0
  120. package/dist/design-tokens/index.d.ts.map +1 -0
  121. package/dist/design-tokens/index.js +10 -0
  122. package/dist/design-tokens/index.js.map +1 -0
  123. package/dist/dev-config.cjs +296 -0
  124. package/dist/dev-config.cjs.map +1 -0
  125. package/dist/dev-config.d.ts +238 -0
  126. package/dist/dev-config.d.ts.map +1 -0
  127. package/dist/dev-config.js +296 -0
  128. package/dist/dev-config.js.map +1 -0
  129. package/dist/effects.cjs +69 -0
  130. package/dist/effects.cjs.map +1 -0
  131. package/dist/effects.d.ts +152 -0
  132. package/dist/effects.d.ts.map +1 -0
  133. package/dist/effects.js +69 -0
  134. package/dist/effects.js.map +1 -0
  135. package/dist/global-registry.cjs +25 -0
  136. package/dist/global-registry.cjs.map +1 -0
  137. package/dist/global-registry.d.ts +19 -0
  138. package/dist/global-registry.d.ts.map +1 -0
  139. package/dist/global-registry.js +25 -0
  140. package/dist/global-registry.js.map +1 -0
  141. package/dist/hooks.cjs +378 -0
  142. package/dist/hooks.cjs.map +1 -0
  143. package/dist/hooks.d.ts +322 -0
  144. package/dist/hooks.d.ts.map +1 -0
  145. package/dist/hooks.js +378 -0
  146. package/dist/hooks.js.map +1 -0
  147. package/dist/host-adapter.d.ts +414 -0
  148. package/dist/host-adapter.d.ts.map +1 -0
  149. package/dist/index.cjs +229 -0
  150. package/dist/index.cjs.map +1 -0
  151. package/dist/index.d.ts +32 -0
  152. package/dist/index.d.ts.map +1 -0
  153. package/dist/index.js +226 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/jsx-dev-runtime.cjs +10 -0
  156. package/dist/jsx-dev-runtime.cjs.map +1 -0
  157. package/dist/jsx-dev-runtime.d.ts +5 -0
  158. package/dist/jsx-dev-runtime.d.ts.map +1 -0
  159. package/dist/jsx-dev-runtime.js +11 -0
  160. package/dist/jsx-dev-runtime.js.map +1 -0
  161. package/dist/jsx-runtime.cjs +44 -0
  162. package/dist/jsx-runtime.cjs.map +1 -0
  163. package/dist/jsx-runtime.d.ts +24 -0
  164. package/dist/jsx-runtime.d.ts.map +1 -0
  165. package/dist/jsx-runtime.js +44 -0
  166. package/dist/jsx-runtime.js.map +1 -0
  167. package/dist/jsx-types.d.ts +25 -0
  168. package/dist/jsx-types.d.ts.map +1 -0
  169. package/dist/layout/appliers/container-applier.cjs +20 -0
  170. package/dist/layout/appliers/container-applier.cjs.map +1 -0
  171. package/dist/layout/appliers/container-applier.d.ts +9 -0
  172. package/dist/layout/appliers/container-applier.d.ts.map +1 -0
  173. package/dist/layout/appliers/container-applier.js +20 -0
  174. package/dist/layout/appliers/container-applier.js.map +1 -0
  175. package/dist/layout/appliers/position-applier.cjs +31 -0
  176. package/dist/layout/appliers/position-applier.cjs.map +1 -0
  177. package/dist/layout/appliers/position-applier.d.ts +8 -0
  178. package/dist/layout/appliers/position-applier.d.ts.map +1 -0
  179. package/dist/layout/appliers/position-applier.js +31 -0
  180. package/dist/layout/appliers/position-applier.js.map +1 -0
  181. package/dist/layout/layout-engine-test-utils.d.ts +26 -0
  182. package/dist/layout/layout-engine-test-utils.d.ts.map +1 -0
  183. package/dist/layout/layout-engine.cjs +628 -0
  184. package/dist/layout/layout-engine.cjs.map +1 -0
  185. package/dist/layout/layout-engine.d.ts +140 -0
  186. package/dist/layout/layout-engine.d.ts.map +1 -0
  187. package/dist/layout/layout-engine.js +628 -0
  188. package/dist/layout/layout-engine.js.map +1 -0
  189. package/dist/layout/strategies/base-strategy.cjs +31 -0
  190. package/dist/layout/strategies/base-strategy.cjs.map +1 -0
  191. package/dist/layout/strategies/base-strategy.d.ts +59 -0
  192. package/dist/layout/strategies/base-strategy.d.ts.map +1 -0
  193. package/dist/layout/strategies/base-strategy.js +31 -0
  194. package/dist/layout/strategies/base-strategy.js.map +1 -0
  195. package/dist/layout/strategies/column-layout.cjs +145 -0
  196. package/dist/layout/strategies/column-layout.cjs.map +1 -0
  197. package/dist/layout/strategies/column-layout.d.ts +38 -0
  198. package/dist/layout/strategies/column-layout.d.ts.map +1 -0
  199. package/dist/layout/strategies/column-layout.js +145 -0
  200. package/dist/layout/strategies/column-layout.js.map +1 -0
  201. package/dist/layout/strategies/row-layout.cjs +145 -0
  202. package/dist/layout/strategies/row-layout.cjs.map +1 -0
  203. package/dist/layout/strategies/row-layout.d.ts +38 -0
  204. package/dist/layout/strategies/row-layout.d.ts.map +1 -0
  205. package/dist/layout/strategies/row-layout.js +145 -0
  206. package/dist/layout/strategies/row-layout.js.map +1 -0
  207. package/dist/layout/strategies/stack-layout.cjs +94 -0
  208. package/dist/layout/strategies/stack-layout.cjs.map +1 -0
  209. package/dist/layout/strategies/stack-layout.d.ts +30 -0
  210. package/dist/layout/strategies/stack-layout.d.ts.map +1 -0
  211. package/dist/layout/strategies/stack-layout.js +94 -0
  212. package/dist/layout/strategies/stack-layout.js.map +1 -0
  213. package/dist/layout/types.d.ts +134 -0
  214. package/dist/layout/types.d.ts.map +1 -0
  215. package/dist/layout/utils/child-utils.cjs +129 -0
  216. package/dist/layout/utils/child-utils.cjs.map +1 -0
  217. package/dist/layout/utils/child-utils.d.ts +54 -0
  218. package/dist/layout/utils/child-utils.d.ts.map +1 -0
  219. package/dist/layout/utils/child-utils.js +129 -0
  220. package/dist/layout/utils/child-utils.js.map +1 -0
  221. package/dist/layout/utils/dimension-calculator.cjs +109 -0
  222. package/dist/layout/utils/dimension-calculator.cjs.map +1 -0
  223. package/dist/layout/utils/dimension-calculator.d.ts +59 -0
  224. package/dist/layout/utils/dimension-calculator.d.ts.map +1 -0
  225. package/dist/layout/utils/dimension-calculator.js +109 -0
  226. package/dist/layout/utils/dimension-calculator.js.map +1 -0
  227. package/dist/layout/utils/flex-distributor.cjs +173 -0
  228. package/dist/layout/utils/flex-distributor.cjs.map +1 -0
  229. package/dist/layout/utils/flex-distributor.d.ts +18 -0
  230. package/dist/layout/utils/flex-distributor.d.ts.map +1 -0
  231. package/dist/layout/utils/flex-distributor.js +173 -0
  232. package/dist/layout/utils/flex-distributor.js.map +1 -0
  233. package/dist/layout/utils/size-resolver.cjs +280 -0
  234. package/dist/layout/utils/size-resolver.cjs.map +1 -0
  235. package/dist/layout/utils/size-resolver.d.ts +84 -0
  236. package/dist/layout/utils/size-resolver.d.ts.map +1 -0
  237. package/dist/layout/utils/size-resolver.js +280 -0
  238. package/dist/layout/utils/size-resolver.js.map +1 -0
  239. package/dist/layout/utils/spacing-calculator.cjs +50 -0
  240. package/dist/layout/utils/spacing-calculator.cjs.map +1 -0
  241. package/dist/layout/utils/spacing-calculator.d.ts +27 -0
  242. package/dist/layout/utils/spacing-calculator.d.ts.map +1 -0
  243. package/dist/layout/utils/spacing-calculator.js +50 -0
  244. package/dist/layout/utils/spacing-calculator.js.map +1 -0
  245. package/dist/memo.cjs +18 -0
  246. package/dist/memo.cjs.map +1 -0
  247. package/dist/memo.d.ts +29 -0
  248. package/dist/memo.d.ts.map +1 -0
  249. package/dist/memo.js +18 -0
  250. package/dist/memo.js.map +1 -0
  251. package/dist/nineslice-contract.cjs +60 -0
  252. package/dist/nineslice-contract.cjs.map +1 -0
  253. package/dist/nineslice-contract.d.ts +107 -0
  254. package/dist/nineslice-contract.d.ts.map +1 -0
  255. package/dist/nineslice-contract.js +60 -0
  256. package/dist/nineslice-contract.js.map +1 -0
  257. package/dist/placeholder.cjs +12 -0
  258. package/dist/placeholder.cjs.map +1 -0
  259. package/dist/placeholder.d.ts +44 -0
  260. package/dist/placeholder.d.ts.map +1 -0
  261. package/dist/placeholder.js +12 -0
  262. package/dist/placeholder.js.map +1 -0
  263. package/dist/portal.cjs +89 -0
  264. package/dist/portal.cjs.map +1 -0
  265. package/dist/portal.d.ts +62 -0
  266. package/dist/portal.d.ts.map +1 -0
  267. package/dist/portal.js +89 -0
  268. package/dist/portal.js.map +1 -0
  269. package/dist/primitive-contracts.cjs +12 -0
  270. package/dist/primitive-contracts.cjs.map +1 -0
  271. package/dist/primitive-contracts.d.ts +186 -0
  272. package/dist/primitive-contracts.d.ts.map +1 -0
  273. package/dist/primitive-contracts.js +12 -0
  274. package/dist/primitive-contracts.js.map +1 -0
  275. package/dist/theme.cjs +332 -0
  276. package/dist/theme.cjs.map +1 -0
  277. package/dist/theme.d.ts +204 -0
  278. package/dist/theme.d.ts.map +1 -0
  279. package/dist/theme.js +332 -0
  280. package/dist/theme.js.map +1 -0
  281. package/dist/types.d.ts +86 -0
  282. package/dist/types.d.ts.map +1 -0
  283. package/dist/vdom/create-runtime.cjs +79 -0
  284. package/dist/vdom/create-runtime.cjs.map +1 -0
  285. package/dist/vdom/create-runtime.d.ts +7 -0
  286. package/dist/vdom/create-runtime.d.ts.map +1 -0
  287. package/dist/vdom/create-runtime.js +79 -0
  288. package/dist/vdom/create-runtime.js.map +1 -0
  289. package/dist/vdom/index.cjs +8 -0
  290. package/dist/vdom/index.cjs.map +1 -0
  291. package/dist/vdom/index.d.ts +4 -0
  292. package/dist/vdom/index.d.ts.map +1 -0
  293. package/dist/vdom/index.js +8 -0
  294. package/dist/vdom/index.js.map +1 -0
  295. package/dist/vdom/mount.cjs +161 -0
  296. package/dist/vdom/mount.cjs.map +1 -0
  297. package/dist/vdom/mount.d.ts +6 -0
  298. package/dist/vdom/mount.d.ts.map +1 -0
  299. package/dist/vdom/mount.js +161 -0
  300. package/dist/vdom/mount.js.map +1 -0
  301. package/dist/vdom/patch.cjs +163 -0
  302. package/dist/vdom/patch.cjs.map +1 -0
  303. package/dist/vdom/patch.d.ts +3 -0
  304. package/dist/vdom/patch.d.ts.map +1 -0
  305. package/dist/vdom/patch.js +163 -0
  306. package/dist/vdom/patch.js.map +1 -0
  307. package/dist/vdom/registry.cjs +85 -0
  308. package/dist/vdom/registry.cjs.map +1 -0
  309. package/dist/vdom/registry.d.ts +28 -0
  310. package/dist/vdom/registry.d.ts.map +1 -0
  311. package/dist/vdom/registry.js +85 -0
  312. package/dist/vdom/registry.js.map +1 -0
  313. package/dist/vdom/runtime-helpers.cjs +23 -0
  314. package/dist/vdom/runtime-helpers.cjs.map +1 -0
  315. package/dist/vdom/runtime-helpers.d.ts +8 -0
  316. package/dist/vdom/runtime-helpers.d.ts.map +1 -0
  317. package/dist/vdom/runtime-helpers.js +23 -0
  318. package/dist/vdom/runtime-helpers.js.map +1 -0
  319. package/dist/vdom/surface.cjs +107 -0
  320. package/dist/vdom/surface.cjs.map +1 -0
  321. package/dist/vdom/surface.d.ts +9 -0
  322. package/dist/vdom/surface.d.ts.map +1 -0
  323. package/dist/vdom/surface.js +107 -0
  324. package/dist/vdom/surface.js.map +1 -0
  325. package/dist/vdom/types.d.ts +104 -0
  326. package/dist/vdom/types.d.ts.map +1 -0
  327. package/dist/vdom/utils.cjs +146 -0
  328. package/dist/vdom/utils.cjs.map +1 -0
  329. package/dist/vdom/utils.d.ts +24 -0
  330. package/dist/vdom/utils.d.ts.map +1 -0
  331. package/dist/vdom/utils.js +146 -0
  332. package/dist/vdom/utils.js.map +1 -0
  333. package/dist/vdom.d.ts +4 -0
  334. package/dist/vdom.d.ts.map +1 -0
  335. package/dist/vector-draw-context.d.ts +63 -0
  336. package/dist/vector-draw-context.d.ts.map +1 -0
  337. package/package.json +161 -0
  338. package/vdom/index.cjs +1 -0
  339. package/vdom/index.d.ts +1 -0
  340. package/vdom/index.js +1 -0
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Development and debugging configuration
3
+ * Runtime-configurable settings for debugging and development
4
+ */
5
+ /**
6
+ * Development configuration object
7
+ * Can be modified at runtime from user code for debugging
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { DevConfig } from '@number10/phaserjsx'
12
+ *
13
+ * // Enable specific debug categories
14
+ * DevConfig.debug.enabled = true
15
+ * DevConfig.debug.layout = true
16
+ *
17
+ * // Customize visual debugging
18
+ * DevConfig.visual.maskFillColor = 0xff00ff // Pink
19
+ * DevConfig.visual.maskAlpha = 0.3 // Semi-transparent
20
+ * ```
21
+ */
22
+ export declare const DevConfig: {
23
+ /**
24
+ * Debug logging configuration
25
+ * Controls console output for different subsystems
26
+ */
27
+ debug: {
28
+ /**
29
+ * Master switch - disables all debug output when false
30
+ * @default false
31
+ */
32
+ enabled: boolean;
33
+ /**
34
+ * Detailed layout calculation logs
35
+ * Shows container sizing, positioning, and flex distribution
36
+ * @default false
37
+ */
38
+ layout: boolean;
39
+ /**
40
+ * Overflow mask positioning logs
41
+ * Shows world coordinate calculations and mask updates
42
+ * @default false
43
+ */
44
+ overflowMask: boolean;
45
+ /**
46
+ * Flex distribution calculations
47
+ * Shows flex space allocation across children
48
+ * @default false
49
+ */
50
+ flex: boolean;
51
+ /**
52
+ * Child sizing and positioning
53
+ * Shows individual child dimension calculations
54
+ * @default false
55
+ */
56
+ positioning: boolean;
57
+ /**
58
+ * VDOM mount/patch/unmount operations
59
+ * Shows virtual DOM updates and reconciliation
60
+ * @default false
61
+ */
62
+ vdom: boolean;
63
+ /**
64
+ * Performance timing measurements
65
+ * Shows execution time for layout operations
66
+ * @default false
67
+ */
68
+ performance: boolean;
69
+ /**
70
+ * Theme system logs
71
+ * Shows theme registry updates and prop merging
72
+ * @default false
73
+ */
74
+ theme: boolean;
75
+ };
76
+ /**
77
+ * VDOM warnings and development checks
78
+ * These help catch common mistakes that lead to performance issues
79
+ */
80
+ warnings: {
81
+ /**
82
+ * Warn when list items (siblings) don't have key props
83
+ * Similar to React's "Each child in a list should have a unique key prop" warning
84
+ * @default true (in development)
85
+ */
86
+ missingKeys: boolean;
87
+ /**
88
+ * Warn when props change causes full remount instead of update
89
+ * Detects JSX/callback recreation that prevents VDOM optimization
90
+ * @default true (in development)
91
+ */
92
+ unnecessaryRemounts: boolean;
93
+ /**
94
+ * Warn when VNodes are frozen/sealed and need copying
95
+ * Happens in production builds or with certain bundler optimizations
96
+ * @default false (usually only relevant in production)
97
+ */
98
+ frozenVNodes: boolean;
99
+ };
100
+ /**
101
+ * Visual debugging aids
102
+ * Runtime-configurable visual settings
103
+ */
104
+ visual: {
105
+ /**
106
+ * Show overflow mask areas
107
+ * When true, masks are visible (alpha > 0) for debugging
108
+ * @default false
109
+ */
110
+ showOverflowMasks: boolean;
111
+ /**
112
+ * Mask fill color
113
+ * @default 0xffffff (white, invisible with alpha=0)
114
+ * @example 0xff00ff (pink for debugging)
115
+ */
116
+ maskFillColor: number;
117
+ /**
118
+ * Mask alpha transparency
119
+ * @default 0.0 (invisible)
120
+ * @example 0.3 (semi-transparent for debugging)
121
+ */
122
+ maskAlpha: number;
123
+ };
124
+ /**
125
+ * Performance tuning
126
+ */
127
+ performance: {
128
+ /**
129
+ * Enable deferred layout queue batching
130
+ * When false, deferred updates execute immediately (not batched)
131
+ * @default true
132
+ */
133
+ useDeferredQueue: boolean;
134
+ /**
135
+ * Log deferred queue statistics
136
+ * Shows number of batched callbacks per frame
137
+ * @default false
138
+ */
139
+ logQueueStats: boolean;
140
+ };
141
+ };
142
+ /**
143
+ * Debug logger with category support
144
+ * Only logs when global debug is enabled AND category is enabled
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * DebugLogger.log('layout', 'Container size:', { width: 100, height: 200 })
149
+ * // Only logs if DevConfig.debug.enabled && DevConfig.debug.layout
150
+ * ```
151
+ */
152
+ export declare class DebugLogger {
153
+ /**
154
+ * Debounced console.log instances per category-message combination
155
+ */
156
+ private static debouncedLoggers;
157
+ /**
158
+ * Log a message with category filtering and debouncing
159
+ * @param category - Debug category to check
160
+ * @param message - Message to log
161
+ * @param args - Additional arguments to log (only first element is used)
162
+ */
163
+ static log(category: keyof typeof DevConfig.debug, message: string, ...args: unknown[]): void;
164
+ /**
165
+ * Log a warning message (always shown, even if debug disabled)
166
+ * @param category - Category for context
167
+ * @param message - Warning message
168
+ * @param args - Additional arguments
169
+ */
170
+ static warn(category: string, message: string, ...args: unknown[]): void;
171
+ /**
172
+ * Log an error message (always shown, even if debug disabled)
173
+ * @param category - Category for context
174
+ * @param message - Error message
175
+ * @param args - Additional arguments
176
+ */
177
+ static error(category: string, message: string, ...args: unknown[]): void;
178
+ /**
179
+ * Start a performance timer
180
+ * @param category - Debug category to check
181
+ * @param label - Timer label
182
+ */
183
+ static time(category: keyof typeof DevConfig.debug, label: string): void;
184
+ /**
185
+ * End a performance timer
186
+ * @param category - Debug category to check
187
+ * @param label - Timer label
188
+ */
189
+ static timeEnd(category: keyof typeof DevConfig.debug, label: string): void;
190
+ }
191
+ /**
192
+ * Predefined configuration presets for common debugging scenarios
193
+ *
194
+ * @example
195
+ * ```typescript
196
+ * import { DevPresets } from '@number10/phaserjsx'
197
+ *
198
+ * // Quick activation of overflow debugging
199
+ * DevPresets.debugOverflow()
200
+ *
201
+ * // Revert to production settings
202
+ * DevPresets.production()
203
+ * ```
204
+ */
205
+ export declare const DevPresets: {
206
+ /**
207
+ * Production configuration
208
+ * All debugging disabled, optimal performance
209
+ */
210
+ production: () => void;
211
+ /**
212
+ * Debug layout issues
213
+ * Enables layout, positioning, and flex logs
214
+ */
215
+ debugLayout: () => void;
216
+ /**
217
+ * Debug overflow masking
218
+ * Enables overflow logs and makes masks visible
219
+ */
220
+ debugOverflow: () => void;
221
+ /**
222
+ * Performance profiling
223
+ * Enables performance timing and queue statistics
224
+ */
225
+ profilePerformance: () => void;
226
+ /**
227
+ * Debug VDOM operations
228
+ * Enables virtual DOM mount/patch/unmount logs
229
+ */
230
+ debugVDOM: () => void;
231
+ debugTheme: () => void;
232
+ /**
233
+ * Enable all debug categories (verbose!)
234
+ * Use with caution - produces lots of console output
235
+ */
236
+ debugAll: () => void;
237
+ };
238
+ //# sourceMappingURL=dev-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-config.d.ts","sourceRoot":"","sources":["../src/dev-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,SAAS;IACpB;;;OAGG;;QAED;;;WAGG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;;IAIL;;;OAGG;;QAED;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;;IAIL;;;OAGG;;QAED;;;;WAIG;;QAGH;;;;WAIG;;QAGH;;;;WAIG;;;IAIL;;OAEG;;QAED;;;;WAIG;;QAGH;;;;WAIG;;;CAGN,CAAA;AAED;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAkD;IAEjF;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAmB7F;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIxE;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIzE;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOxE;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAM5E;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU;IACrB;;;OAGG;sBACa,IAAI;IAQpB;;;OAGG;uBACc,IAAI;IAWrB;;;OAGG;yBACgB,IAAI;IAcvB;;;OAGG;8BACqB,IAAI;IAY5B;;;OAGG;qBACY,IAAI;sBAWH,IAAI;IAYpB;;;OAGG;oBACW,IAAI;CAanB,CAAA"}
@@ -0,0 +1,296 @@
1
+ function debounce(fn, delay) {
2
+ let timeoutId;
3
+ return (...args) => {
4
+ if (timeoutId !== void 0) clearTimeout(timeoutId);
5
+ timeoutId = setTimeout(() => {
6
+ timeoutId = void 0;
7
+ fn(...args);
8
+ }, delay);
9
+ };
10
+ }
11
+ const DevConfig = {
12
+ /**
13
+ * Debug logging configuration
14
+ * Controls console output for different subsystems
15
+ */
16
+ debug: {
17
+ /**
18
+ * Master switch - disables all debug output when false
19
+ * @default false
20
+ */
21
+ enabled: false,
22
+ /**
23
+ * Detailed layout calculation logs
24
+ * Shows container sizing, positioning, and flex distribution
25
+ * @default false
26
+ */
27
+ layout: false,
28
+ /**
29
+ * Overflow mask positioning logs
30
+ * Shows world coordinate calculations and mask updates
31
+ * @default false
32
+ */
33
+ overflowMask: false,
34
+ /**
35
+ * Flex distribution calculations
36
+ * Shows flex space allocation across children
37
+ * @default false
38
+ */
39
+ flex: false,
40
+ /**
41
+ * Child sizing and positioning
42
+ * Shows individual child dimension calculations
43
+ * @default false
44
+ */
45
+ positioning: false,
46
+ /**
47
+ * VDOM mount/patch/unmount operations
48
+ * Shows virtual DOM updates and reconciliation
49
+ * @default false
50
+ */
51
+ vdom: false,
52
+ /**
53
+ * Performance timing measurements
54
+ * Shows execution time for layout operations
55
+ * @default false
56
+ */
57
+ performance: false,
58
+ /**
59
+ * Theme system logs
60
+ * Shows theme registry updates and prop merging
61
+ * @default false
62
+ */
63
+ theme: false
64
+ },
65
+ /**
66
+ * VDOM warnings and development checks
67
+ * These help catch common mistakes that lead to performance issues
68
+ */
69
+ warnings: {
70
+ /**
71
+ * Warn when list items (siblings) don't have key props
72
+ * Similar to React's "Each child in a list should have a unique key prop" warning
73
+ * @default true (in development)
74
+ */
75
+ missingKeys: false,
76
+ // temp disable because of detection issues, will re-enable later
77
+ /**
78
+ * Warn when props change causes full remount instead of update
79
+ * Detects JSX/callback recreation that prevents VDOM optimization
80
+ * @default true (in development)
81
+ */
82
+ unnecessaryRemounts: false,
83
+ /**
84
+ * Warn when VNodes are frozen/sealed and need copying
85
+ * Happens in production builds or with certain bundler optimizations
86
+ * @default false (usually only relevant in production)
87
+ */
88
+ frozenVNodes: false
89
+ },
90
+ /**
91
+ * Visual debugging aids
92
+ * Runtime-configurable visual settings
93
+ */
94
+ visual: {
95
+ /**
96
+ * Show overflow mask areas
97
+ * When true, masks are visible (alpha > 0) for debugging
98
+ * @default false
99
+ */
100
+ showOverflowMasks: false,
101
+ /**
102
+ * Mask fill color
103
+ * @default 0xffffff (white, invisible with alpha=0)
104
+ * @example 0xff00ff (pink for debugging)
105
+ */
106
+ maskFillColor: 16777215,
107
+ /**
108
+ * Mask alpha transparency
109
+ * @default 0.0 (invisible)
110
+ * @example 0.3 (semi-transparent for debugging)
111
+ */
112
+ maskAlpha: 0
113
+ },
114
+ /**
115
+ * Performance tuning
116
+ */
117
+ performance: {
118
+ /**
119
+ * Enable deferred layout queue batching
120
+ * When false, deferred updates execute immediately (not batched)
121
+ * @default true
122
+ */
123
+ useDeferredQueue: true,
124
+ /**
125
+ * Log deferred queue statistics
126
+ * Shows number of batched callbacks per frame
127
+ * @default false
128
+ */
129
+ logQueueStats: false
130
+ }
131
+ };
132
+ class DebugLogger {
133
+ /**
134
+ * Debounced console.log instances per category-message combination
135
+ */
136
+ static debouncedLoggers = /* @__PURE__ */ new Map();
137
+ /**
138
+ * Log a message with category filtering and debouncing
139
+ * @param category - Debug category to check
140
+ * @param message - Message to log
141
+ * @param args - Additional arguments to log (only first element is used)
142
+ */
143
+ static log(category, message, ...args) {
144
+ if (!DevConfig.debug.enabled) return;
145
+ if (category !== "enabled" && !DevConfig.debug[category]) return;
146
+ const key = `${String(category)}:${message}`;
147
+ let debouncedLog = this.debouncedLoggers.get(key);
148
+ if (!debouncedLog) {
149
+ debouncedLog = debounce(() => {
150
+ console.log(`[${category}] ${message}`, args[0]);
151
+ }, 300);
152
+ this.debouncedLoggers.set(key, debouncedLog);
153
+ }
154
+ debouncedLog();
155
+ }
156
+ /**
157
+ * Log a warning message (always shown, even if debug disabled)
158
+ * @param category - Category for context
159
+ * @param message - Warning message
160
+ * @param args - Additional arguments
161
+ */
162
+ static warn(category, message, ...args) {
163
+ console.warn(`[${category}] ${message}`, ...args);
164
+ }
165
+ /**
166
+ * Log an error message (always shown, even if debug disabled)
167
+ * @param category - Category for context
168
+ * @param message - Error message
169
+ * @param args - Additional arguments
170
+ */
171
+ static error(category, message, ...args) {
172
+ console.error(`[${category}] ${message}`, ...args);
173
+ }
174
+ /**
175
+ * Start a performance timer
176
+ * @param category - Debug category to check
177
+ * @param label - Timer label
178
+ */
179
+ static time(category, label) {
180
+ if (!DevConfig.debug.enabled) return;
181
+ if (category !== "enabled" && !DevConfig.debug[category]) return;
182
+ console.time(`[${category}] ${label}`);
183
+ }
184
+ /**
185
+ * End a performance timer
186
+ * @param category - Debug category to check
187
+ * @param label - Timer label
188
+ */
189
+ static timeEnd(category, label) {
190
+ if (!DevConfig.debug.enabled) return;
191
+ if (category !== "enabled" && !DevConfig.debug[category]) return;
192
+ console.timeEnd(`[${category}] ${label}`);
193
+ }
194
+ }
195
+ const DevPresets = {
196
+ /**
197
+ * Production configuration
198
+ * All debugging disabled, optimal performance
199
+ */
200
+ production: () => {
201
+ DevConfig.debug.enabled = false;
202
+ DevConfig.visual.showOverflowMasks = false;
203
+ DevConfig.visual.maskAlpha = 0;
204
+ DevConfig.visual.maskFillColor = 16777215;
205
+ DevConfig.performance.logQueueStats = false;
206
+ },
207
+ /**
208
+ * Debug layout issues
209
+ * Enables layout, positioning, and flex logs
210
+ */
211
+ debugLayout: () => {
212
+ DevConfig.debug.enabled = true;
213
+ DevConfig.debug.layout = true;
214
+ DevConfig.debug.positioning = true;
215
+ DevConfig.debug.flex = true;
216
+ DevConfig.debug.overflowMask = false;
217
+ DevConfig.debug.vdom = false;
218
+ DevConfig.debug.performance = false;
219
+ },
220
+ /**
221
+ * Debug overflow masking
222
+ * Enables overflow logs and makes masks visible
223
+ */
224
+ debugOverflow: () => {
225
+ DevConfig.debug.enabled = true;
226
+ DevConfig.debug.overflowMask = true;
227
+ DevConfig.visual.showOverflowMasks = true;
228
+ DevConfig.visual.maskFillColor = 16711935;
229
+ DevConfig.visual.maskAlpha = 0.3;
230
+ DevConfig.debug.layout = false;
231
+ DevConfig.debug.positioning = false;
232
+ DevConfig.debug.flex = false;
233
+ DevConfig.debug.vdom = false;
234
+ DevConfig.debug.performance = false;
235
+ },
236
+ /**
237
+ * Performance profiling
238
+ * Enables performance timing and queue statistics
239
+ */
240
+ profilePerformance: () => {
241
+ DevConfig.debug.enabled = true;
242
+ DevConfig.debug.performance = true;
243
+ DevConfig.performance.logQueueStats = true;
244
+ DevConfig.debug.layout = false;
245
+ DevConfig.debug.overflowMask = false;
246
+ DevConfig.debug.positioning = false;
247
+ DevConfig.debug.flex = false;
248
+ DevConfig.debug.vdom = false;
249
+ },
250
+ /**
251
+ * Debug VDOM operations
252
+ * Enables virtual DOM mount/patch/unmount logs
253
+ */
254
+ debugVDOM: () => {
255
+ DevConfig.debug.enabled = true;
256
+ DevConfig.debug.vdom = true;
257
+ DevConfig.debug.layout = false;
258
+ DevConfig.debug.overflowMask = false;
259
+ DevConfig.debug.positioning = false;
260
+ DevConfig.debug.flex = false;
261
+ DevConfig.debug.performance = false;
262
+ },
263
+ debugTheme: () => {
264
+ DevConfig.debug.enabled = true;
265
+ DevConfig.debug.theme = true;
266
+ DevConfig.debug.layout = false;
267
+ DevConfig.debug.overflowMask = false;
268
+ DevConfig.debug.positioning = false;
269
+ DevConfig.debug.flex = false;
270
+ DevConfig.debug.performance = false;
271
+ DevConfig.debug.vdom = false;
272
+ },
273
+ /**
274
+ * Enable all debug categories (verbose!)
275
+ * Use with caution - produces lots of console output
276
+ */
277
+ debugAll: () => {
278
+ DevConfig.debug.enabled = true;
279
+ DevConfig.debug.layout = true;
280
+ DevConfig.debug.overflowMask = true;
281
+ DevConfig.debug.flex = true;
282
+ DevConfig.debug.positioning = true;
283
+ DevConfig.debug.vdom = true;
284
+ DevConfig.debug.performance = true;
285
+ DevConfig.visual.showOverflowMasks = true;
286
+ DevConfig.visual.maskFillColor = 16711935;
287
+ DevConfig.visual.maskAlpha = 0.3;
288
+ DevConfig.performance.logQueueStats = true;
289
+ }
290
+ };
291
+ export {
292
+ DebugLogger,
293
+ DevConfig,
294
+ DevPresets
295
+ };
296
+ //# sourceMappingURL=dev-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-config.js","sources":["../src/dev-config.ts"],"sourcesContent":["/**\n * Development and debugging configuration\n * Runtime-configurable settings for debugging and development\n */\n\n/**\n * Simple debounce implementation — avoids pulling in ~1.1 MB of lodash\n * @internal\n */\nfunction debounce<T extends (...args: unknown[]) => void>(\n fn: T,\n delay: number\n): (...args: unknown[]) => void {\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n return (...args: unknown[]) => {\n if (timeoutId !== undefined) clearTimeout(timeoutId)\n timeoutId = setTimeout(() => {\n timeoutId = undefined\n fn(...args)\n }, delay)\n }\n}\n\n/**\n * Development configuration object\n * Can be modified at runtime from user code for debugging\n *\n * @example\n * ```typescript\n * import { DevConfig } from '@number10/phaserjsx'\n *\n * // Enable specific debug categories\n * DevConfig.debug.enabled = true\n * DevConfig.debug.layout = true\n *\n * // Customize visual debugging\n * DevConfig.visual.maskFillColor = 0xff00ff // Pink\n * DevConfig.visual.maskAlpha = 0.3 // Semi-transparent\n * ```\n */\nexport const DevConfig = {\n /**\n * Debug logging configuration\n * Controls console output for different subsystems\n */\n debug: {\n /**\n * Master switch - disables all debug output when false\n * @default false\n */\n enabled: false,\n\n /**\n * Detailed layout calculation logs\n * Shows container sizing, positioning, and flex distribution\n * @default false\n */\n layout: false,\n\n /**\n * Overflow mask positioning logs\n * Shows world coordinate calculations and mask updates\n * @default false\n */\n overflowMask: false,\n\n /**\n * Flex distribution calculations\n * Shows flex space allocation across children\n * @default false\n */\n flex: false,\n\n /**\n * Child sizing and positioning\n * Shows individual child dimension calculations\n * @default false\n */\n positioning: false,\n\n /**\n * VDOM mount/patch/unmount operations\n * Shows virtual DOM updates and reconciliation\n * @default false\n */\n vdom: false,\n\n /**\n * Performance timing measurements\n * Shows execution time for layout operations\n * @default false\n */\n performance: false,\n\n /**\n * Theme system logs\n * Shows theme registry updates and prop merging\n * @default false\n */\n theme: false,\n },\n\n /**\n * VDOM warnings and development checks\n * These help catch common mistakes that lead to performance issues\n */\n warnings: {\n /**\n * Warn when list items (siblings) don't have key props\n * Similar to React's \"Each child in a list should have a unique key prop\" warning\n * @default true (in development)\n */\n missingKeys: false, // temp disable because of detection issues, will re-enable later\n\n /**\n * Warn when props change causes full remount instead of update\n * Detects JSX/callback recreation that prevents VDOM optimization\n * @default true (in development)\n */\n unnecessaryRemounts: false,\n\n /**\n * Warn when VNodes are frozen/sealed and need copying\n * Happens in production builds or with certain bundler optimizations\n * @default false (usually only relevant in production)\n */\n frozenVNodes: false,\n },\n\n /**\n * Visual debugging aids\n * Runtime-configurable visual settings\n */\n visual: {\n /**\n * Show overflow mask areas\n * When true, masks are visible (alpha > 0) for debugging\n * @default false\n */\n showOverflowMasks: false,\n\n /**\n * Mask fill color\n * @default 0xffffff (white, invisible with alpha=0)\n * @example 0xff00ff (pink for debugging)\n */\n maskFillColor: 0xffffff,\n\n /**\n * Mask alpha transparency\n * @default 0.0 (invisible)\n * @example 0.3 (semi-transparent for debugging)\n */\n maskAlpha: 0.0,\n },\n\n /**\n * Performance tuning\n */\n performance: {\n /**\n * Enable deferred layout queue batching\n * When false, deferred updates execute immediately (not batched)\n * @default true\n */\n useDeferredQueue: true,\n\n /**\n * Log deferred queue statistics\n * Shows number of batched callbacks per frame\n * @default false\n */\n logQueueStats: false,\n },\n}\n\n/**\n * Debug logger with category support\n * Only logs when global debug is enabled AND category is enabled\n *\n * @example\n * ```typescript\n * DebugLogger.log('layout', 'Container size:', { width: 100, height: 200 })\n * // Only logs if DevConfig.debug.enabled && DevConfig.debug.layout\n * ```\n */\nexport class DebugLogger {\n /**\n * Debounced console.log instances per category-message combination\n */\n private static debouncedLoggers = new Map<string, (...args: unknown[]) => void>()\n\n /**\n * Log a message with category filtering and debouncing\n * @param category - Debug category to check\n * @param message - Message to log\n * @param args - Additional arguments to log (only first element is used)\n */\n static log(category: keyof typeof DevConfig.debug, message: string, ...args: unknown[]): void {\n if (!DevConfig.debug.enabled) return\n if (category !== 'enabled' && !DevConfig.debug[category]) return\n\n const key = `${String(category)}:${message}`\n let debouncedLog = this.debouncedLoggers.get(key)\n\n // console.log(`[${category}] ${message}`, args[0])\n\n if (!debouncedLog) {\n debouncedLog = debounce(() => {\n console.log(`[${category}] ${message}`, args[0])\n }, 300)\n this.debouncedLoggers.set(key, debouncedLog)\n }\n\n debouncedLog()\n }\n\n /**\n * Log a warning message (always shown, even if debug disabled)\n * @param category - Category for context\n * @param message - Warning message\n * @param args - Additional arguments\n */\n static warn(category: string, message: string, ...args: unknown[]): void {\n console.warn(`[${category}] ${message}`, ...args)\n }\n\n /**\n * Log an error message (always shown, even if debug disabled)\n * @param category - Category for context\n * @param message - Error message\n * @param args - Additional arguments\n */\n static error(category: string, message: string, ...args: unknown[]): void {\n console.error(`[${category}] ${message}`, ...args)\n }\n\n /**\n * Start a performance timer\n * @param category - Debug category to check\n * @param label - Timer label\n */\n static time(category: keyof typeof DevConfig.debug, label: string): void {\n if (!DevConfig.debug.enabled) return\n if (category !== 'enabled' && !DevConfig.debug[category]) return\n\n console.time(`[${category}] ${label}`)\n }\n\n /**\n * End a performance timer\n * @param category - Debug category to check\n * @param label - Timer label\n */\n static timeEnd(category: keyof typeof DevConfig.debug, label: string): void {\n if (!DevConfig.debug.enabled) return\n if (category !== 'enabled' && !DevConfig.debug[category]) return\n\n console.timeEnd(`[${category}] ${label}`)\n }\n}\n\n/**\n * Predefined configuration presets for common debugging scenarios\n *\n * @example\n * ```typescript\n * import { DevPresets } from '@number10/phaserjsx'\n *\n * // Quick activation of overflow debugging\n * DevPresets.debugOverflow()\n *\n * // Revert to production settings\n * DevPresets.production()\n * ```\n */\nexport const DevPresets = {\n /**\n * Production configuration\n * All debugging disabled, optimal performance\n */\n production: (): void => {\n DevConfig.debug.enabled = false\n DevConfig.visual.showOverflowMasks = false\n DevConfig.visual.maskAlpha = 0.0\n DevConfig.visual.maskFillColor = 0xffffff\n DevConfig.performance.logQueueStats = false\n },\n\n /**\n * Debug layout issues\n * Enables layout, positioning, and flex logs\n */\n debugLayout: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.layout = true\n DevConfig.debug.positioning = true\n DevConfig.debug.flex = true\n // Keep other categories off\n DevConfig.debug.overflowMask = false\n DevConfig.debug.vdom = false\n DevConfig.debug.performance = false\n },\n\n /**\n * Debug overflow masking\n * Enables overflow logs and makes masks visible\n */\n debugOverflow: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.overflowMask = true\n DevConfig.visual.showOverflowMasks = true\n DevConfig.visual.maskFillColor = 0xff00ff // Pink\n DevConfig.visual.maskAlpha = 0.3 // Semi-transparent\n // Keep other categories off\n DevConfig.debug.layout = false\n DevConfig.debug.positioning = false\n DevConfig.debug.flex = false\n DevConfig.debug.vdom = false\n DevConfig.debug.performance = false\n },\n\n /**\n * Performance profiling\n * Enables performance timing and queue statistics\n */\n profilePerformance: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.performance = true\n DevConfig.performance.logQueueStats = true\n // Keep other categories off\n DevConfig.debug.layout = false\n DevConfig.debug.overflowMask = false\n DevConfig.debug.positioning = false\n DevConfig.debug.flex = false\n DevConfig.debug.vdom = false\n },\n\n /**\n * Debug VDOM operations\n * Enables virtual DOM mount/patch/unmount logs\n */\n debugVDOM: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.vdom = true\n // Keep other categories off\n DevConfig.debug.layout = false\n DevConfig.debug.overflowMask = false\n DevConfig.debug.positioning = false\n DevConfig.debug.flex = false\n DevConfig.debug.performance = false\n },\n\n debugTheme: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.theme = true\n // Keep other categories off\n DevConfig.debug.layout = false\n DevConfig.debug.overflowMask = false\n DevConfig.debug.positioning = false\n DevConfig.debug.flex = false\n DevConfig.debug.performance = false\n DevConfig.debug.vdom = false\n },\n\n /**\n * Enable all debug categories (verbose!)\n * Use with caution - produces lots of console output\n */\n debugAll: (): void => {\n DevConfig.debug.enabled = true\n DevConfig.debug.layout = true\n DevConfig.debug.overflowMask = true\n DevConfig.debug.flex = true\n DevConfig.debug.positioning = true\n DevConfig.debug.vdom = true\n DevConfig.debug.performance = true\n DevConfig.visual.showOverflowMasks = true\n DevConfig.visual.maskFillColor = 0xff00ff\n DevConfig.visual.maskAlpha = 0.3\n DevConfig.performance.logQueueStats = true\n },\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const effectDefinitions = require("./animation/effect-definitions.cjs");
4
+ const effectEngine = require("./animation/effect-engine.cjs");
5
+ function resolveEffect(props, theme) {
6
+ return {
7
+ effect: props.effect ?? theme.effect,
8
+ effectConfig: props.effectConfig ?? theme.effectConfig
9
+ };
10
+ }
11
+ const DEFAULT_EFFECT = {
12
+ effect: "pulse",
13
+ effectConfig: { intensity: 1.1, time: 100 }
14
+ };
15
+ function applyEffectByName(applyFn, effectName, effectConfig) {
16
+ const name = effectName ?? DEFAULT_EFFECT.effect;
17
+ const config = effectConfig ?? DEFAULT_EFFECT.effectConfig;
18
+ applyFn(name, config);
19
+ return true;
20
+ }
21
+ function resolveEffectTransformOrigin(effect) {
22
+ return effectDefinitions.resolveEffectTransformOrigin(effect);
23
+ }
24
+ function registerEffect(name, definition) {
25
+ effectDefinitions.EFFECT_DEFINITIONS[name] = definition;
26
+ }
27
+ const _effectRunners = [];
28
+ const _effectStopRunners = [];
29
+ function registerEffectRunner(runner) {
30
+ _effectRunners.push(runner);
31
+ }
32
+ function registerEffectStopRunner(runner) {
33
+ _effectStopRunners.push(runner);
34
+ }
35
+ function applyEffect(a, b, c, d) {
36
+ if (arguments.length === 4 && b && typeof b === "object" && "onUpdate" in b) {
37
+ const targetKey = a;
38
+ const target = b;
39
+ const effect2 = c;
40
+ const config2 = d ?? {};
41
+ if (!effect2 || effect2 === "none") return null;
42
+ const def = effectDefinitions.EFFECT_DEFINITIONS[effect2];
43
+ if (!def) return null;
44
+ return effectEngine.runEffect(targetKey, target, def, config2);
45
+ }
46
+ const node = a;
47
+ const effect = b;
48
+ const config = c ?? {};
49
+ if (!effect || effect === "none") return;
50
+ for (const runner of _effectRunners) {
51
+ runner(node, effect, config);
52
+ }
53
+ }
54
+ function stopEffect(key) {
55
+ effectEngine.stopEffect(key);
56
+ for (const runner of _effectStopRunners) {
57
+ runner(key);
58
+ }
59
+ }
60
+ exports.DEFAULT_EFFECT = DEFAULT_EFFECT;
61
+ exports.applyEffect = applyEffect;
62
+ exports.applyEffectByName = applyEffectByName;
63
+ exports.registerEffect = registerEffect;
64
+ exports.registerEffectRunner = registerEffectRunner;
65
+ exports.registerEffectStopRunner = registerEffectStopRunner;
66
+ exports.resolveEffect = resolveEffect;
67
+ exports.resolveEffectTransformOrigin = resolveEffectTransformOrigin;
68
+ exports.stopEffect = stopEffect;
69
+ //# sourceMappingURL=effects.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.cjs","sources":["../src/effects.ts"],"sourcesContent":["/**\n * Portable effect system — renderer-agnostic effect contracts.\n *\n * Components declare their effect intent via props/theme. The central\n * effect engine (animation/effect-engine.ts) handles all effect execution.\n *\n * ## Portable usage (recommended for new components)\n *\n * Portable components implement `EffectTarget` to connect their node to\n * the central engine. Use the 4-arg `applyEffect()` overload directly:\n *\n * ```typescript\n * import { applyEffect, type EffectTarget } from '@number10/jsx-core'\n *\n * // Inside a portable component:\n * const target: EffectTarget = {\n * onUpdate: (values) => {\n * // Apply animated values to the renderer node\n * node.setPosition(values.x ?? node.x, values.y ?? node.y)\n * node.alpha = values.alpha ?? node.alpha\n * },\n * getSnapshot: () => ({\n * x: node.x, y: node.y, alpha: node.alpha,\n * scaleX: node.scaleX, scaleY: node.scaleY,\n * rotation: node.rotation,\n * }),\n * getScheduler: () => surface.scheduler,\n * getSize: () => ({ width: node.width, height: node.height }),\n * }\n *\n * applyEffect(node, target, 'pulse', { duration: 300 })\n * ```\n *\n * ## Legacy API (transitional)\n *\n * Renderer bridges (Pixi/Phaser) use the 3-arg `applyEffect(node, effect, config)`\n * which dispatches via a runner registry. New components should prefer the\n * direct 4-arg overload above.\n *\n * @migration Transitional architecture — two paths coexist:\n * 1. Legacy: `applyEffect(node, effect, config)` — dispatches via runner registry\n * (Pixi/Phaser bridges register runners that internally create EffectTargets)\n * 2. Direct: `applyEffect(targetKey, target, effect, config)` — skips runners,\n * calls the engine directly. Used by portable components that have an EffectTarget.\n */\n\nimport {\n EFFECT_DEFINITIONS,\n resolveEffectTransformOrigin as resolveOrigin,\n type EffectDefinition as EngineEffectDefinition,\n} from './animation/effect-definitions'\nimport {\n runEffect,\n stopEffect as stopEngineEffect,\n type EffectHandle,\n type EffectTarget,\n} from './animation/effect-engine'\nimport type { EffectConfig as EngineEffectConfig } from './animation/types'\n\n// ---------------------------------------------------------------------------\n// Effect name types — extensible via declaration merging\n// ---------------------------------------------------------------------------\n\n/**\n * Built-in effect names available in all renderers.\n */\nexport type BuiltInEffectName =\n | 'none'\n | 'pulse'\n | 'shake'\n | 'bounce'\n | 'press'\n | 'flash'\n | 'jello'\n | 'fade'\n | 'fadeIn'\n | 'fadeOut'\n | 'wobble'\n | 'tada'\n | 'swing'\n | 'wiggle'\n | 'slideIn'\n | 'slideOut'\n | 'zoomIn'\n | 'zoomOut'\n | 'flipIn'\n | 'flipOut'\n | 'float'\n | 'breathe'\n | 'spin'\n\n/**\n * Extension point for custom effect names.\n * Use declaration merging to add custom effects:\n *\n * @example\n * ```typescript\n * declare module '@number10/jsx-core' {\n * interface EffectNameExtensions {\n * squash: 'squash'\n * }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface EffectNameExtensions {}\n\n/**\n * Known effect names (built-in + custom extensions).\n */\nexport type EffectName =\n | BuiltInEffectName\n | (keyof EffectNameExtensions extends never ? never : keyof EffectNameExtensions)\n\n/** Configuration for an effect (duration, intensity, direction, etc.). */\nexport type EffectConfig = EngineEffectConfig\n\n/** Canonical transform origin used by built-in effects across renderers. */\nexport type EffectTransformOrigin = import('./animation/effect-definitions').EffectTransformOrigin\n\n/**\n * Props that any component can extend to declare effects.\n */\nexport interface EffectDefinition {\n /** Effect to apply on interaction (e.g., 'press', 'pulse') */\n effect?: EffectName | undefined\n /** Configuration for the effect */\n effectConfig?: EffectConfig | undefined\n}\n\n/**\n * Resolve which effect to use from props vs theme.\n * @param props - Explicit component props\n * @param theme - Resolved theme (with effect/effectConfig)\n * @returns The resolved effect name and config\n */\nexport function resolveEffect(\n props: EffectDefinition,\n theme: Record<string, unknown>\n): { effect?: EffectName | undefined; effectConfig?: EffectConfig | undefined } {\n return {\n effect: props.effect ?? (theme.effect as EffectName | undefined),\n effectConfig: props.effectConfig ?? (theme.effectConfig as EffectConfig | undefined),\n }\n}\n\n// ---------------------------------------------------------------------------\n// Default effect + convenience helper\n// ---------------------------------------------------------------------------\n\n/**\n * Default effect configuration used as fallback when no effect is specified.\n */\nexport const DEFAULT_EFFECT = {\n effect: 'pulse' as EffectName,\n effectConfig: { intensity: 1.1, time: 100 } as EffectConfig,\n}\n\n/**\n * Apply an effect by name with automatic DEFAULT_EFFECT fallback.\n *\n * Convenience wrapper around a renderer's applyEffect function that fills in\n * defaults when effect name or config are omitted.\n *\n * @param applyFn - Renderer-specific applyEffect function\n * @param effectName - Name of the effect to apply (defaults to 'pulse')\n * @param effectConfig - Optional configuration for the effect\n * @returns true if effect was applied, false otherwise\n */\nexport function applyEffectByName(\n applyFn: (name: EffectName, config?: EffectConfig) => void,\n effectName?: EffectName,\n effectConfig?: EffectConfig\n): boolean {\n const name = effectName ?? DEFAULT_EFFECT.effect\n const config = effectConfig ?? DEFAULT_EFFECT.effectConfig\n\n applyFn(name, config)\n return true\n}\n\n/**\n * Resolve the canonical transform origin for a built-in effect.\n * Delegates to the central effect-definitions registry.\n */\nexport function resolveEffectTransformOrigin(\n effect: EffectName | undefined\n): EffectTransformOrigin {\n return resolveOrigin(effect)\n}\n\n// ---------------------------------------------------------------------------\n// Custom effect registration\n// ---------------------------------------------------------------------------\n\n/**\n * Register a custom effect definition so it becomes available via\n * `applyEffect()` and `effect=\"customName\"` in components.\n *\n * Combine with declaration merging on `EffectNameExtensions` to maintain\n * type safety:\n *\n * @example\n * ```typescript\n * declare module '@number10/jsx-core' {\n * interface EffectNameExtensions { squash: 'squash' }\n * }\n * registerEffect('squash', {\n * name: 'squash',\n * steps: (base, config) => [\n * { type: 'tween', to: { scaleX: base.scaleX * 1.5, scaleY: base.scaleY / 1.5 },\n * duration: config.time ?? 200, ease: 'Sine.easeInOut' },\n * { type: 'tween', to: { scaleX: base.scaleX, scaleY: base.scaleY },\n * duration: config.time ?? 200 },\n * ],\n * loop: false,\n * origin: 'center',\n * })\n * ```\n *\n * @param name - Unique effect name\n * @param definition - Effect definition (steps, loop, origin)\n */\nexport function registerEffect(name: string, definition: EngineEffectDefinition): void {\n EFFECT_DEFINITIONS[name] = definition\n}\n\n// ---------------------------------------------------------------------------\n// Transitional: Runner registry (used by Pixi/Phaser bridges)\n// ---------------------------------------------------------------------------\n\n/** Legacy runner signature — receives a renderer node, effect name, and config */\nexport type EffectRunner = (node: unknown, effect: EffectName, config?: EffectConfig) => void\nexport type EffectStopRunner = (node: unknown) => void\n\nconst _effectRunners: EffectRunner[] = []\nconst _effectStopRunners: EffectStopRunner[] = []\n\n/**\n * Register a renderer-specific effect runner (transitional).\n *\n * During migration, Pixi/Phaser bridges register runners that create\n * an EffectTarget internally and delegate to the central engine.\n * After full migration, this pattern is replaced by direct EffectTarget usage.\n */\nexport function registerEffectRunner(runner: EffectRunner): void {\n _effectRunners.push(runner)\n}\n\n/**\n * Register a renderer-specific effect stop runner (transitional).\n */\nexport function registerEffectStopRunner(runner: EffectStopRunner): void {\n _effectStopRunners.push(runner)\n}\n\n// ---------------------------------------------------------------------------\n// Legacy API: applyEffect(node, effect, config) — dispatches via runners\n// ---------------------------------------------------------------------------\n\n/**\n * Apply an effect using the legacy runner-registry dispatch.\n *\n * Renderer bridges (Pixi, Phaser) register runners that create an EffectTarget\n * and delegate to the central engine internally.\n *\n * @param node - Renderer-native node (PIXI.Container, Phaser.GameObjects.Container, ...)\n * @param effect - Effect name to apply\n * @param config - Effect configuration\n */\nexport function applyEffect(\n node: unknown,\n effect: EffectName | undefined,\n config?: EffectConfig\n): void\n\n/**\n * Apply an effect directly using the central engine.\n *\n * Portable components that have an EffectTarget can use this overload\n * to skip the runner-registry dispatch.\n *\n * @param targetKey - Object used as animation state key (typically the renderer node)\n * @param target - EffectTarget implementation for this renderer\n * @param effect - Effect name to apply\n * @param config - Effect configuration\n * @returns EffectHandle or null if effect is unknown\n */\nexport function applyEffect(\n targetKey: object,\n target: EffectTarget,\n effect: EffectName | undefined,\n config?: EffectConfig\n): EffectHandle | null\n\n/** Implementation — supports both 3-arg (legacy) and 4-arg (direct) signatures */\nexport function applyEffect(\n a: unknown | object,\n b: EffectTarget | EffectName | undefined,\n c?: EffectName | EffectConfig | undefined,\n d?: EffectConfig\n): void | EffectHandle | null {\n // 4-arg overload: applyEffect(targetKey, target, effect, config)\n if (arguments.length === 4 && b && typeof b === 'object' && 'onUpdate' in b) {\n const targetKey = a as object\n const target = b as EffectTarget\n const effect = c as EffectName | undefined\n const config = (d ?? {}) as EffectConfig\n if (!effect || effect === 'none') return null\n const def = EFFECT_DEFINITIONS[effect]\n if (!def) return null\n return runEffect(targetKey, target, def, config)\n }\n\n // 3-arg overload: applyEffect(node, effect, config) — dispatches via runners\n const node = a\n const effect = b as EffectName | undefined\n const config = (c ?? {}) as EffectConfig\n if (!effect || effect === 'none') return\n for (const runner of _effectRunners) {\n runner(node, effect, config)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Legacy API: stopEffect(node) — dispatches via runners\n// ---------------------------------------------------------------------------\n\n/**\n * Stop effects using the legacy runner-registry dispatch.\n * @param node - Renderer-native node\n */\nexport function stopEffect(node: unknown): void\n\n/**\n * Stop effects directly via the central engine.\n * @param targetKey - Object used as animation state key\n */\nexport function stopEffect(targetKey: object): void\n\n/** Implementation */\nexport function stopEffect(key: unknown | object): void {\n // Check if we should use the engine directly (only if it's likely an engine-tracked key)\n // The engine tracks via WeakMap, so calling with any object is safe\n stopEngineEffect(key as object)\n\n // Also dispatch via legacy stop runners for backward compatibility\n for (const runner of _effectStopRunners) {\n runner(key)\n }\n}\n"],"names":["resolveOrigin","EFFECT_DEFINITIONS","effect","config","runEffect","stopEngineEffect"],"mappings":";;;;AAwIO,SAAS,cACd,OACA,OAC8E;AAC9E,SAAO;AAAA,IACL,QAAQ,MAAM,UAAW,MAAM;AAAA,IAC/B,cAAc,MAAM,gBAAiB,MAAM;AAAA,EAAA;AAE/C;AASO,MAAM,iBAAiB;AAAA,EAC5B,QAAQ;AAAA,EACR,cAAc,EAAE,WAAW,KAAK,MAAM,IAAA;AACxC;AAaO,SAAS,kBACd,SACA,YACA,cACS;AACT,QAAM,OAAO,cAAc,eAAe;AAC1C,QAAM,SAAS,gBAAgB,eAAe;AAE9C,UAAQ,MAAM,MAAM;AACpB,SAAO;AACT;AAMO,SAAS,6BACd,QACuB;AACvB,SAAOA,kBAAAA,6BAAc,MAAM;AAC7B;AAkCO,SAAS,eAAe,MAAc,YAA0C;AACrFC,oBAAAA,mBAAmB,IAAI,IAAI;AAC7B;AAUA,MAAM,iBAAiC,CAAA;AACvC,MAAM,qBAAyC,CAAA;AASxC,SAAS,qBAAqB,QAA4B;AAC/D,iBAAe,KAAK,MAAM;AAC5B;AAKO,SAAS,yBAAyB,QAAgC;AACvE,qBAAmB,KAAK,MAAM;AAChC;AA0CO,SAAS,YACd,GACA,GACA,GACA,GAC4B;AAE5B,MAAI,UAAU,WAAW,KAAK,KAAK,OAAO,MAAM,YAAY,cAAc,GAAG;AAC3E,UAAM,YAAY;AAClB,UAAM,SAAS;AACf,UAAMC,UAAS;AACf,UAAMC,UAAU,KAAK,CAAA;AACrB,QAAI,CAACD,WAAUA,YAAW,OAAQ,QAAO;AACzC,UAAM,MAAMD,kBAAAA,mBAAmBC,OAAM;AACrC,QAAI,CAAC,IAAK,QAAO;AACjB,WAAOE,aAAAA,UAAU,WAAW,QAAQ,KAAKD,OAAM;AAAA,EACjD;AAGA,QAAM,OAAO;AACb,QAAM,SAAS;AACf,QAAM,SAAU,KAAK,CAAA;AACrB,MAAI,CAAC,UAAU,WAAW,OAAQ;AAClC,aAAW,UAAU,gBAAgB;AACnC,WAAO,MAAM,QAAQ,MAAM;AAAA,EAC7B;AACF;AAmBO,SAAS,WAAW,KAA6B;AAGtDE,eAAAA,WAAiB,GAAa;AAG9B,aAAW,UAAU,oBAAoB;AACvC,WAAO,GAAG;AAAA,EACZ;AACF;;;;;;;;;;"}