@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,322 @@
1
+ import { Signal } from '@preact/signals-core';
2
+ import { DesignTokens } from './design-tokens/design-token-types';
3
+ import { AtlasFrameInfo, FrameRect, Size, SurfaceContext } from './host-adapter';
4
+ import { PartialTheme } from './theme';
5
+ type Cleanup = void | (() => void);
6
+ /**
7
+ * Portable hook context — the data structure passed through the hook runtime.
8
+ * Each renderer extends this with renderer-specific fields (e.g., Phaser adds `parent: ParentType`).
9
+ */
10
+ export interface HookContext {
11
+ /** Current hook slot index (incremented by each hook call) */
12
+ index: number;
13
+ /** Hook state slots (one per hook call) */
14
+ slots: unknown[];
15
+ /** Pending effects to run after render */
16
+ effects: (() => Cleanup)[];
17
+ /** Cleanup functions to run on unmount */
18
+ cleanups: Cleanup[];
19
+ /** The rendered VNode output of the component */
20
+ vnode: unknown | null;
21
+ /** The component VNode itself (type = function) */
22
+ componentVNode: {
23
+ type: unknown;
24
+ props?: Record<string, unknown> | undefined;
25
+ children?: unknown[];
26
+ __memo?: boolean;
27
+ };
28
+ /** The component function */
29
+ function: (props: unknown) => unknown;
30
+ /** Optional updater callback (set by renderer's withHooks/scheduleUpdate) */
31
+ updater?: (() => void) | undefined;
32
+ /** Optional per-runtime update handler for concurrent renderer runtimes */
33
+ updateHandler?: ((ctx: HookContext) => void) | undefined;
34
+ /** Whether this is a VNode factory (no hooks used) */
35
+ isFactory: boolean;
36
+ /** Last rendered props (for memoization) */
37
+ lastProps?: unknown;
38
+ /** Whether component uses memoization (default: true) */
39
+ memoized?: boolean;
40
+ /** Theme context for this component */
41
+ theme?: PartialTheme | undefined;
42
+ /** Design tokens injected by the renderer (colors, text styles, spacing, etc.) */
43
+ themeTokens?: Record<string, unknown> | undefined;
44
+ /** Flag to prevent updates after disposal */
45
+ disposed?: boolean;
46
+ /**
47
+ * Surface context for accessing viewport, scheduler, and capabilities.
48
+ * Set by the renderer's withHooks() wrapper during component render.
49
+ *
50
+ * @migration(audit:scene-portal-mount) Phase 6G — enables portable hooks
51
+ * (useViewportSize, useLayoutEffect via HostScheduler, ...).
52
+ */
53
+ surface?: SurfaceContext | undefined;
54
+ }
55
+ /**
56
+ * Get the current hook context. Must be called during component render.
57
+ * Uses a global registry to ensure correctness even when bundlers duplicate modules.
58
+ * @returns Current context or null if not in render
59
+ */
60
+ export declare function getCurrentCtx(): HookContext | null;
61
+ /**
62
+ * Set the current hook context. Called by withHooks() in the renderer.
63
+ * @internal
64
+ */
65
+ export declare function setCurrentCtx(ctx: HookContext | null): void;
66
+ /**
67
+ * Portable render cycle — sets up hook context, runs render, runs effects.
68
+ * Each renderer wraps this with its own lifecycle guards.
69
+ *
70
+ * @param ctx - The hook context for this component
71
+ * @param render - The render function to execute
72
+ * @param opts - Optional renderer-specific hooks
73
+ * @returns The result of the render function, or null if the guard fails
74
+ *
75
+ * @migration(audit:scene-portal-mount) Phase 6I — extracted from Phaser withHooks().
76
+ * The guard callback replaces Phaser-specific scene/shutdown checks.
77
+ */
78
+ export declare function withHooks<T>(ctx: HookContext, render: () => T, opts?: {
79
+ /** Renderer-specific lifecycle guard. Return false to abort render. */
80
+ isAlive?: () => boolean;
81
+ /** Called after render, before restoring context. For renderer-specific side effects. */
82
+ onAfterRender?: () => void;
83
+ }): T | null;
84
+ /**
85
+ * Get current hook context, throwing if not in a render context.
86
+ * Used by hooks that MUST be called during render.
87
+ * @returns Non-null hook context
88
+ * @throws Error if called outside of a component render
89
+ */
90
+ export declare function getCurrentOrThrow(): HookContext;
91
+ /** Callback type for renderer-specific update logic */
92
+ export type UpdateHandler = (ctx: HookContext) => void;
93
+ /**
94
+ * Register a renderer-specific update handler.
95
+ * Called once by the renderer package to override core's no-op scheduleUpdate.
96
+ * Uses a global registry to ensure correctness even when bundlers duplicate modules.
97
+ * @param handler - Function that performs the actual VDOM patching for a component
98
+ */
99
+ export declare function setUpdateHandler(handler: UpdateHandler): void;
100
+ /**
101
+ * State hook for managing component state.
102
+ * @param initial - Initial state value or initializer function
103
+ * @returns Tuple of current state and setter function
104
+ */
105
+ export declare function useState<T>(initial: T): [T, (v: T | ((p: T) => T)) => void];
106
+ /**
107
+ * Ref hook for storing mutable values.
108
+ * @param val - Initial ref value
109
+ * @returns Ref object with current property
110
+ */
111
+ export declare function useRef<T>(val: T): {
112
+ current: T;
113
+ };
114
+ /**
115
+ * Memoization hook for expensive computations.
116
+ * @param fn - Function to memoize
117
+ * @param deps - Dependency array
118
+ * @returns Memoized value
119
+ */
120
+ export declare function useMemo<T>(fn: () => T, deps: readonly unknown[]): T;
121
+ export declare function useCallback<T extends (...args: any[]) => any>(fn: T, deps: readonly unknown[]): T;
122
+ /**
123
+ * Effect hook for side effects with cleanup.
124
+ * @param fn - Effect function that optionally returns cleanup
125
+ * @param deps - Optional dependency array
126
+ */
127
+ export declare function useEffect(fn: () => Cleanup, deps?: readonly unknown[] | undefined): void;
128
+ /**
129
+ * Hook to access current theme context.
130
+ * Returns the theme that was passed down through the VDOM tree.
131
+ * @returns Current theme context or undefined if no theme is set
132
+ */
133
+ export declare function useTheme(): PartialTheme | undefined;
134
+ /**
135
+ * Hook to access design tokens injected by the renderer.
136
+ * Each renderer sets `themeTokens` on the hook context during component render
137
+ * (e.g., Phaser's plugin injects color presets, text styles, spacing).
138
+ * Returns undefined if no tokens are configured by the active renderer.
139
+ * @returns Design tokens or undefined
140
+ */
141
+ export declare function useThemeTokens<T = DesignTokens>(): T | undefined;
142
+ /**
143
+ * Hook to force component re-render when signals change.
144
+ */
145
+ export declare function useForceRedraw(throttleMs: number, ...signals: Signal<unknown>[]): void;
146
+ export declare function useForceRedraw(...signals: Signal<unknown>[]): void;
147
+ /**
148
+ * Hook to manually trigger a component redraw.
149
+ * @returns Function to trigger redraw
150
+ */
151
+ export declare function useRedraw(): () => void;
152
+ /**
153
+ * Checks if dependency arrays have changed.
154
+ */
155
+ export declare function depsChanged(a?: readonly unknown[], b?: readonly unknown[]): boolean;
156
+ /**
157
+ * Shallow comparison for props objects.
158
+ * Used for component memoization (React.memo equivalent).
159
+ */
160
+ export declare function shallowEqual(a: unknown, b: unknown): boolean;
161
+ /**
162
+ * Check if component should update based on props comparison.
163
+ */
164
+ export declare function shouldComponentUpdate(ctx: HookContext, newProps: unknown): boolean;
165
+ /**
166
+ * Disposes component context and runs cleanups.
167
+ */
168
+ export declare function disposeCtx(c: HookContext): void;
169
+ /**
170
+ * Hook to access the full SurfaceContext (viewport, scheduler, capabilities).
171
+ * Must be called during component render. Returns null if no surface is available.
172
+ *
173
+ * Portable — works with any renderer that provides SurfaceContext.
174
+ * @returns SurfaceContext or null
175
+ *
176
+ * @migration(audit:surface-access) Phase 7 — new hook, replaces manual ctx.surface access.
177
+ */
178
+ export declare function useSurface(): SurfaceContext | null;
179
+ /**
180
+ * Hook to get the current viewport size from the surface context.
181
+ * Portable — works with any renderer that provides SurfaceContext.
182
+ * @returns Viewport dimensions { width, height }
183
+ *
184
+ * @migration(audit:scene-portal-mount) Phase 6G — extracted from Phaser hooks.ts.
185
+ * Uses ctx.surface.viewport instead of Phaser-specific RenderContext.
186
+ */
187
+ export declare function useViewportSize(): {
188
+ width: number;
189
+ height: number;
190
+ };
191
+ /**
192
+ * Hook that collects debug metrics from the active renderer on an interval.
193
+ *
194
+ * Delegates to the `debugSnapshotCollector` function registered by the
195
+ * renderer on the {@link SurfaceContext}. When no collector is registered,
196
+ * returns an empty snapshot.
197
+ *
198
+ * Portable — works with any renderer (Phaser, Pixi, …). Each renderer
199
+ * wires its own collector into the SurfaceContext during surface creation.
200
+ *
201
+ * @param intervalMs - Refresh interval in milliseconds (default: 250)
202
+ * @returns Debug snapshot (key → string|number), refreshed on interval
203
+ *
204
+ * @example
205
+ * ```tsx
206
+ * import { useDebugSnapshot } from '@number10/jsx-core'
207
+ * import { DebugPanel } from '@number10/jsx-components'
208
+ *
209
+ * function App() {
210
+ * const snapshot = useDebugSnapshot(500)
211
+ * return <DebugPanel snapshot={snapshot} metrics={['fps', 'renderer']} />
212
+ * }
213
+ * ```
214
+ */
215
+ export declare function useDebugSnapshot(intervalMs?: number): Record<string, string | number>;
216
+ type CleanupFn = void | (() => void);
217
+ /**
218
+ * Layout-aware effect hook — defers execution to the next animation frame.
219
+ * Uses HostScheduler.requestAnimationFrame() when available, falls back to
220
+ * global requestAnimationFrame.
221
+ *
222
+ * Portable across renderers. Each renderer's HostScheduler provides the tick source.
223
+ * Phaser uses scene.events.once('update'), PixiJS would use app.ticker.addOnce().
224
+ *
225
+ * @param fn - Effect function that optionally returns a cleanup
226
+ * @param deps - Optional dependency array
227
+ *
228
+ * @migration(audit:scene-portal-mount) Phase 6H — portable version uses HostScheduler.
229
+ */
230
+ export declare function useLayoutEffect(fn: () => CleanupFn, deps?: readonly unknown[] | undefined): void;
231
+ /**
232
+ * Load a texture from a URL and register it under the given key.
233
+ * Returns `{ ready, key }` — use `key` as the `texture` prop on `<Image>`.
234
+ *
235
+ * Portable — works with any renderer that provides `textureLoader` on
236
+ * its SurfaceContext. Replaces Phaser-specific preload functions.
237
+ *
238
+ * @param key — Unique texture key (e.g. 'icon', 'background')
239
+ * @param url — URL to load the texture from
240
+ * @returns `{ ready: boolean, key: string }`
241
+ *
242
+ * @example
243
+ * ```tsx
244
+ * function MyIcon() {
245
+ * const { ready, key } = useTexture('star', '/assets/star.png')
246
+ * if (!ready) return <Text text="Loading..." />
247
+ * return <Image texture={key} width={48} height={48} />
248
+ * }
249
+ * ```
250
+ */
251
+ export declare function useTexture(key: string, url: string): {
252
+ ready: boolean;
253
+ key: string;
254
+ };
255
+ /**
256
+ * Configuration for loading a single SVG as a texture.
257
+ * Used by {@link useSVGTexture} for batch loading.
258
+ */
259
+ export interface SVGTextureConfig {
260
+ /** Unique texture key */
261
+ key: string;
262
+ /** SVG markup string */
263
+ svg: string;
264
+ /** Texture width in pixels (default: 32) */
265
+ width?: number;
266
+ /** Texture height in pixels (default: 32) */
267
+ height?: number;
268
+ }
269
+ /**
270
+ * Render an SVG string to a texture and register it under the given key.
271
+ * Returns `ready: boolean` — when true, use the key as `<Image texture={key} />`.
272
+ *
273
+ * Portable — works with any renderer that provides `textureLoader.loadSVG`
274
+ * on its SurfaceContext.
275
+ */
276
+ export declare function useSVGTexture(key: string, svg: string, width?: number, height?: number): boolean;
277
+ /**
278
+ * Load multiple SVGs as textures in batch.
279
+ * Returns `ready: boolean` — when true, all textures are registered.
280
+ */
281
+ export declare function useSVGTexture(configs: SVGTextureConfig[]): boolean;
282
+ /**
283
+ * Result object returned by {@link useAtlas}.
284
+ *
285
+ * Combines atlas loading state with portable metadata access so callers can
286
+ * render frames and inspect atlas contents without renderer-specific APIs.
287
+ */
288
+ export interface UseAtlasResult {
289
+ /** Whether the atlas image and JSON data are fully loaded and queryable. */
290
+ ready: boolean;
291
+ /** Texture key to pass into portable image-like components. */
292
+ key: string;
293
+ /** Dimensions of the full atlas texture, if available from the active renderer. */
294
+ textureSize: Size | undefined;
295
+ /** All known frame names within the loaded atlas. */
296
+ frameNames: string[];
297
+ /** Full portable metadata for every known frame in the atlas. */
298
+ frames: AtlasFrameInfo[];
299
+ /** Look up full metadata for a specific frame name. */
300
+ getFrameInfo: (frame: string) => AtlasFrameInfo | undefined;
301
+ /** Look up only the atlas rectangle for a specific frame name. */
302
+ getFrameRect: (frame: string) => FrameRect | undefined;
303
+ }
304
+ /**
305
+ * Load a texture atlas from image + data URLs.
306
+ * Returns `{ ready, key }` plus portable atlas metadata helpers.
307
+ * Use `key` as `texture` and frame names as `frame`.
308
+ *
309
+ * @param key — Unique atlas key (e.g. 'buttons')
310
+ * @param imageUrl — URL to the atlas image (PNG)
311
+ * @param dataUrl — URL to the atlas data (JSON)
312
+ *
313
+ * @example
314
+ * ```tsx
315
+ * const { ready, key } = useAtlas('buttons', '/ui/buttons.png', '/ui/buttons.json')
316
+ * if (!ready) return <Text text="Loading..." />
317
+ * return <Image texture={key} frame="ButtonGreen" />
318
+ * ```
319
+ */
320
+ export declare function useAtlas(key: string, imageUrl: string, dataUrl: string): UseAtlasResult;
321
+ export {};
322
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}