@reicek/neataptic-ts 0.1.21 → 0.1.22

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 (223) hide show
  1. package/.github/agents/boundary-mapper.agent.md +29 -0
  2. package/.github/agents/docs-scout.agent.md +29 -0
  3. package/.github/agents/plan-scout.agent.md +29 -0
  4. package/.github/agents/solid-split.agent.md +138 -0
  5. package/.github/copilot-instructions.md +103 -0
  6. package/package.json +6 -3
  7. package/plans/ES2023 migration +13 -8
  8. package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
  9. package/plans/Interactive_Examples_and_Learning_Path.md +10 -2
  10. package/plans/Memory_Optimization.md +3 -3
  11. package/plans/README.md +63 -0
  12. package/plans/Roadmap.md +15 -3
  13. package/plans/asciiMaze_SOLID_split.done.md +130 -0
  14. package/plans/flappy_bird_SOLID_split.done.md +67 -0
  15. package/scripts/assets/theme.css +221 -34
  16. package/scripts/copy-examples.mjs +9 -5
  17. package/scripts/export-onnx.mjs +3 -3
  18. package/scripts/generate-bench-tables.mjs +10 -10
  19. package/scripts/generate-bench-tables.ts +10 -10
  20. package/scripts/generate-docs.ts +1415 -449
  21. package/scripts/render-docs-html.ts +15 -8
  22. package/src/README.md +101 -223
  23. package/src/architecture/README.md +57 -185
  24. package/src/architecture/layer/README.md +38 -38
  25. package/src/architecture/network/README.md +33 -31
  26. package/src/architecture/network/activate/README.md +77 -77
  27. package/src/architecture/network/connect/README.md +15 -13
  28. package/src/architecture/network/deterministic/README.md +7 -7
  29. package/src/architecture/network/evolve/README.md +44 -44
  30. package/src/architecture/network/gating/README.md +20 -20
  31. package/src/architecture/network/genetic/README.md +51 -51
  32. package/src/architecture/network/mutate/README.md +97 -97
  33. package/src/architecture/network/onnx/README.md +264 -264
  34. package/src/architecture/network/prune/README.md +39 -39
  35. package/src/architecture/network/remove/README.md +26 -26
  36. package/src/architecture/network/serialize/README.md +56 -56
  37. package/src/architecture/network/slab/README.md +61 -61
  38. package/src/architecture/network/standalone/README.md +24 -24
  39. package/src/architecture/network/stats/README.md +9 -9
  40. package/src/architecture/network/topology/README.md +46 -46
  41. package/src/architecture/network/training/README.md +21 -21
  42. package/src/methods/README.md +9 -87
  43. package/src/multithreading/README.md +8 -77
  44. package/src/multithreading/workers/README.md +2 -2
  45. package/src/multithreading/workers/browser/README.md +0 -6
  46. package/src/multithreading/workers/node/README.md +0 -3
  47. package/src/neat/README.md +562 -568
  48. package/src/utils/README.md +18 -18
  49. package/test/examples/asciiMaze/README.md +59 -59
  50. package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +14 -9
  51. package/test/examples/asciiMaze/browser-entry/README.md +196 -0
  52. package/test/examples/asciiMaze/browser-entry/browser-entry.abort.services.ts +95 -0
  53. package/test/examples/asciiMaze/browser-entry/browser-entry.constants.ts +23 -0
  54. package/test/examples/asciiMaze/browser-entry/browser-entry.curriculum.services.ts +115 -0
  55. package/test/examples/asciiMaze/browser-entry/browser-entry.globals.services.ts +106 -0
  56. package/test/examples/asciiMaze/browser-entry/browser-entry.host.services.ts +157 -0
  57. package/test/examples/asciiMaze/browser-entry/browser-entry.services.ts +14 -0
  58. package/test/examples/asciiMaze/browser-entry/browser-entry.ts +129 -0
  59. package/test/examples/asciiMaze/browser-entry/browser-entry.types.ts +120 -0
  60. package/test/examples/asciiMaze/browser-entry/browser-entry.utils.ts +98 -0
  61. package/test/examples/asciiMaze/browser-entry.ts +10 -576
  62. package/test/examples/asciiMaze/dashboardManager/README.md +276 -0
  63. package/test/examples/asciiMaze/dashboardManager/archive/README.md +16 -0
  64. package/test/examples/asciiMaze/dashboardManager/archive/dashboardManager.archive.services.ts +267 -0
  65. package/test/examples/asciiMaze/dashboardManager/dashboardManager.constants.ts +35 -0
  66. package/test/examples/asciiMaze/dashboardManager/dashboardManager.services.ts +103 -0
  67. package/test/examples/asciiMaze/dashboardManager/dashboardManager.ts +181 -0
  68. package/test/examples/asciiMaze/dashboardManager/dashboardManager.types.ts +267 -0
  69. package/test/examples/asciiMaze/dashboardManager/dashboardManager.utils.ts +254 -0
  70. package/test/examples/asciiMaze/dashboardManager/live/README.md +14 -0
  71. package/test/examples/asciiMaze/dashboardManager/live/dashboardManager.live.services.ts +264 -0
  72. package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +47 -0
  73. package/test/examples/asciiMaze/dashboardManager/telemetry/dashboardManager.telemetry.services.ts +513 -0
  74. package/test/examples/asciiMaze/dashboardManager.ts +13 -2335
  75. package/test/examples/asciiMaze/evolutionEngine/README.md +1058 -0
  76. package/test/examples/asciiMaze/evolutionEngine/curriculumPhase.ts +90 -0
  77. package/test/examples/asciiMaze/evolutionEngine/engineState.constants.ts +36 -0
  78. package/test/examples/asciiMaze/evolutionEngine/engineState.ts +58 -513
  79. package/test/examples/asciiMaze/evolutionEngine/engineState.types.ts +212 -0
  80. package/test/examples/asciiMaze/evolutionEngine/engineState.utils.ts +301 -0
  81. package/test/examples/asciiMaze/evolutionEngine/evolutionEngine.types.ts +445 -0
  82. package/test/examples/asciiMaze/evolutionEngine/evolutionLoop.ts +81 -50
  83. package/test/examples/asciiMaze/evolutionEngine/optionsAndSetup.ts +2 -4
  84. package/test/examples/asciiMaze/evolutionEngine/populationDynamics.ts +17 -33
  85. package/test/examples/asciiMaze/evolutionEngine/populationPruning.ts +1 -1
  86. package/test/examples/asciiMaze/evolutionEngine/rngAndTiming.ts +1 -2
  87. package/test/examples/asciiMaze/evolutionEngine/sampling.ts +1 -1
  88. package/test/examples/asciiMaze/evolutionEngine/scratchPools.ts +2 -5
  89. package/test/examples/asciiMaze/evolutionEngine/setupHelpers.ts +30 -37
  90. package/test/examples/asciiMaze/evolutionEngine/telemetryMetrics.ts +16 -58
  91. package/test/examples/asciiMaze/evolutionEngine/trainingWarmStart.ts +2 -2
  92. package/test/examples/asciiMaze/evolutionEngine.ts +55 -55
  93. package/test/examples/asciiMaze/fitness.ts +2 -2
  94. package/test/examples/asciiMaze/fitness.types.ts +65 -0
  95. package/test/examples/asciiMaze/interfaces.ts +64 -1352
  96. package/test/examples/asciiMaze/mazeMovement/README.md +356 -0
  97. package/test/examples/asciiMaze/mazeMovement/finalization/README.md +49 -0
  98. package/test/examples/asciiMaze/mazeMovement/finalization/mazeMovement.finalization.ts +138 -0
  99. package/test/examples/asciiMaze/mazeMovement/mazeMovement.constants.ts +101 -0
  100. package/test/examples/asciiMaze/mazeMovement/mazeMovement.services.ts +230 -0
  101. package/test/examples/asciiMaze/mazeMovement/mazeMovement.ts +299 -0
  102. package/test/examples/asciiMaze/mazeMovement/mazeMovement.types.ts +185 -0
  103. package/test/examples/asciiMaze/mazeMovement/mazeMovement.utils.ts +153 -0
  104. package/test/examples/asciiMaze/mazeMovement/policy/README.md +91 -0
  105. package/test/examples/asciiMaze/mazeMovement/policy/mazeMovement.policy.ts +467 -0
  106. package/test/examples/asciiMaze/mazeMovement/runtime/README.md +95 -0
  107. package/test/examples/asciiMaze/mazeMovement/runtime/mazeMovement.runtime.ts +354 -0
  108. package/test/examples/asciiMaze/mazeMovement/shaping/README.md +124 -0
  109. package/test/examples/asciiMaze/mazeMovement/shaping/mazeMovement.shaping.ts +459 -0
  110. package/test/examples/asciiMaze/mazeMovement.ts +12 -2978
  111. package/test/examples/flappy_bird/Trace-20260309T191949.json +24124 -0
  112. package/test/examples/flappy_bird/browser-entry/README.md +1129 -0
  113. package/test/examples/flappy_bird/browser-entry/browser-entry.host.utils.ts +4 -324
  114. package/test/examples/flappy_bird/browser-entry/browser-entry.network-view.utils.ts +6 -399
  115. package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +1 -717
  116. package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
  117. package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +15 -893
  118. package/test/examples/flappy_bird/browser-entry/host/README.md +307 -0
  119. package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
  120. package/test/examples/flappy_bird/browser-entry/host/host.ts +562 -6
  121. package/test/examples/flappy_bird/browser-entry/host/resize/README.md +274 -0
  122. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +31 -0
  123. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +360 -0
  124. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +117 -0
  125. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +63 -0
  126. package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +250 -0
  127. package/test/examples/flappy_bird/browser-entry/network-view/README.md +399 -0
  128. package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +255 -0
  129. package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +802 -7
  130. package/test/examples/flappy_bird/browser-entry/playback/README.md +684 -0
  131. package/test/examples/flappy_bird/browser-entry/playback/background/README.md +277 -0
  132. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +770 -0
  133. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +178 -0
  134. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +107 -0
  135. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +518 -0
  136. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +117 -0
  137. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +233 -0
  138. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +211 -0
  139. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.ts +48 -0
  140. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.types.ts +212 -0
  141. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +81 -0
  142. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.cache.services.ts +96 -0
  143. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.constants.ts +62 -0
  144. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +244 -0
  145. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.ts +53 -0
  146. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.types.ts +68 -0
  147. package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.utils.ts +100 -0
  148. package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +310 -0
  149. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +92 -0
  150. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +272 -0
  151. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +39 -0
  152. package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +493 -0
  153. package/test/examples/flappy_bird/browser-entry/playback/playback.constants.ts +1 -1
  154. package/test/examples/flappy_bird/browser-entry/playback/playback.frame-render.service.ts +4 -0
  155. package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +44 -0
  156. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +39 -122
  157. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +272 -0
  158. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +62 -0
  159. package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
  160. package/test/examples/flappy_bird/browser-entry/playback/playback.ts +409 -8
  161. package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +4 -12
  162. package/test/examples/flappy_bird/browser-entry/runtime/README.md +235 -0
  163. package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +45 -0
  164. package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +81 -0
  165. package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +74 -0
  166. package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
  167. package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +36 -0
  168. package/test/examples/flappy_bird/browser-entry/visualization/README.md +557 -0
  169. package/test/examples/flappy_bird/browser-entry/visualization/visualization.constants.ts +110 -0
  170. package/test/examples/flappy_bird/browser-entry/visualization/visualization.draw.service.ts +957 -19
  171. package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +138 -3
  172. package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +3 -27
  173. package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +1 -23
  174. package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +156 -0
  175. package/test/examples/flappy_bird/constants/README.md +1179 -0
  176. package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
  177. package/test/examples/flappy_bird/constants/constants.palette.ts +7 -0
  178. package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
  179. package/test/examples/flappy_bird/environment/README.md +143 -0
  180. package/test/examples/flappy_bird/environment/environment.observation.utils.ts +1 -19
  181. package/test/examples/flappy_bird/environment/environment.step.service.ts +3 -66
  182. package/test/examples/flappy_bird/evaluation/README.md +130 -0
  183. package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +1 -1
  184. package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +5 -375
  185. package/test/examples/flappy_bird/evaluation/rollout/README.md +291 -0
  186. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +30 -0
  187. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +58 -0
  188. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +310 -0
  189. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +56 -0
  190. package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +368 -0
  191. package/test/examples/flappy_bird/flappy-evolution-worker/README.md +618 -0
  192. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +7 -7
  193. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +364 -0
  194. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +14 -0
  195. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +4 -201
  196. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +184 -345
  197. package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +291 -0
  198. package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +5 -0
  199. package/test/examples/flappy_bird/simulation-shared/README.md +417 -0
  200. package/test/examples/flappy_bird/simulation-shared/observation/README.md +183 -0
  201. package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +301 -0
  202. package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +9 -0
  203. package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +59 -0
  204. package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +5 -403
  205. package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +20 -6
  206. package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +23 -8
  207. package/test/examples/flappy_bird/trainer/README.md +563 -0
  208. package/test/examples/flappy_bird/trainer/evaluation/README.md +199 -0
  209. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +9 -0
  210. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +73 -0
  211. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +165 -0
  212. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +25 -0
  213. package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +161 -0
  214. package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
  215. package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
  216. package/test/examples/flappy_bird/trainer/trainer.report.service.ts +126 -0
  217. package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
  218. package/test/examples/flappy_bird/trainer/trainer.ts +11 -553
  219. package/test/examples/flappy_bird/browser-entry/browser-entry.utils.ts +0 -12
  220. package/test/examples/flappy_bird/environment/environment.ts +0 -7
  221. package/test/examples/flappy_bird/evaluation/evaluation.ts +0 -7
  222. package/test/examples/flappy_bird/simulation-shared/simulation-shared.ts +0 -15
  223. package/test/examples/flappy_bird/trainer/trainer.statistics.utils.ts +0 -78
@@ -0,0 +1,307 @@
1
+ # browser-entry/host
2
+
3
+ ## browser-entry/host/host.types.ts
4
+
5
+ ### CanvasHostResult
6
+
7
+ Result payload returned after constructing the browser host UI tree.
8
+
9
+ ### HostStatsPartialValues
10
+
11
+ Partial stats update map keyed by stats-table keys.
12
+
13
+ ## browser-entry/host/host.ts
14
+
15
+ ### createCanvasHost
16
+
17
+ `(containerElement: HTMLElement) => import("test/examples/flappy_bird/browser-entry/host/host.types").CanvasHostResult`
18
+
19
+ Builds the browser demo host tree and returns rendering handles.
20
+
21
+ Parameters:
22
+
23
+ - `containerElement` - - Root host container.
24
+
25
+ Returns: Canvas handles, stats cells and network render callback.
26
+
27
+ ### createCanvasHostInternal
28
+
29
+ `(containerElement: HTMLElement) => import("test/examples/flappy_bird/browser-entry/host/host.types").CanvasHostResult`
30
+
31
+ Builds the browser demo host tree and returns rendering handles.
32
+
33
+ Parameters:
34
+
35
+ - `containerElement` - - Root host container.
36
+
37
+ Returns: Canvas handles, stats cells and network render callback.
38
+
39
+ ### createHeaderFrameRenderer
40
+
41
+ `(headerCanvas: HTMLCanvasElement, headerContext: CanvasRenderingContext2D) => () => void`
42
+
43
+ Creates the reusable title-frame renderer for the header canvas.
44
+
45
+ Parameters:
46
+
47
+ - `headerCanvas` - - Header canvas element.
48
+ - `headerContext` - - Header canvas 2D context.
49
+
50
+ Returns: Callback that redraws the framed title.
51
+
52
+ ### createHostCanvasElements
53
+
54
+ `(hostVisualPrimitives: HostVisualPrimitives) => HostCanvasElements`
55
+
56
+ Creates the canvases and 2D contexts used by the host UI.
57
+
58
+ Parameters:
59
+
60
+ - `hostVisualPrimitives` - - Shared visual primitives for border and shadow styling.
61
+
62
+ Returns: Simulation, header, and network canvases with required contexts.
63
+
64
+ ### createHostLayoutElements
65
+
66
+ `(hostVisualPrimitives: HostVisualPrimitives) => HostLayoutElements`
67
+
68
+ Creates the host layout elements used to assemble the browser UI tree.
69
+
70
+ Parameters:
71
+
72
+ - `hostVisualPrimitives` - - Shared visual primitives for border and shadow styling.
73
+
74
+ Returns: Layout elements grouped by host responsibility.
75
+
76
+ ### createHostNetworkVisualizationController
77
+
78
+ `(networkCanvasHost: HTMLDivElement, networkCanvas: HTMLCanvasElement, networkContext: CanvasRenderingContext2D) => HostNetworkVisualizationController`
79
+
80
+ Creates the network visualization renderer and redraw controller.
81
+
82
+ Parameters:
83
+
84
+ - `networkCanvasHost` - - Host element wrapping the network canvas.
85
+ - `networkCanvas` - - Network visualization canvas.
86
+ - `networkContext` - - Network visualization 2D context.
87
+
88
+ Returns: Renderer and redraw callbacks for the network panel.
89
+
90
+ ### installCanvasHostResizeHooks
91
+
92
+ `(canvas: HTMLCanvasElement, hostLayoutElements: HostLayoutElements, networkCanvas: HTMLCanvasElement, drawHeaderFrame: () => void, hostNetworkVisualizationController: HostNetworkVisualizationController) => void`
93
+
94
+ Installs responsive resize hooks for the simulation canvas and side panel.
95
+
96
+ Parameters:
97
+
98
+ - `canvas` - - Simulation canvas.
99
+ - `hostLayoutElements` - - Prepared layout containers.
100
+ - `networkCanvas` - - Network visualization canvas.
101
+ - `drawHeaderFrame` - - Callback that redraws the header title.
102
+ - `hostNetworkVisualizationController` - - Network panel resize/redraw controller.
103
+
104
+ Returns: Nothing.
105
+
106
+ ### mountCanvasHostTree
107
+
108
+ `(containerElement: HTMLElement, hostLayoutElements: HostLayoutElements, headerCanvas: HTMLCanvasElement, canvas: HTMLCanvasElement, networkCanvas: HTMLCanvasElement) => void`
109
+
110
+ Mounts the completed host DOM tree into the container in final order.
111
+
112
+ Parameters:
113
+
114
+ - `containerElement` - - Root host container.
115
+ - `hostLayoutElements` - - Prepared layout containers.
116
+ - `headerCanvas` - - Header title canvas.
117
+ - `canvas` - - Main simulation canvas.
118
+ - `networkCanvas` - - Network visualization canvas.
119
+
120
+ Returns: Nothing.
121
+
122
+ ### renderInitialCanvasHostState
123
+
124
+ `(drawHeaderFrame: () => void, renderNetworkArchitecture: (network: import("src/architecture/network").default | undefined, inputSize: number, outputSize: number) => void) => void`
125
+
126
+ Renders the initial header and placeholder network visualization state.
127
+
128
+ Parameters:
129
+
130
+ - `drawHeaderFrame` - - Callback that redraws the header title.
131
+ - `renderNetworkArchitecture` - - Network visualization renderer.
132
+
133
+ Returns: Nothing.
134
+
135
+ ### resetHostContainer
136
+
137
+ `(containerElement: HTMLElement) => void`
138
+
139
+ Clears any previous runtime DOM before rebuilding the browser host tree.
140
+
141
+ Parameters:
142
+
143
+ - `containerElement` - - Root host container.
144
+
145
+ Returns: Nothing.
146
+
147
+ ### resolveHostVisualPrimitives
148
+
149
+ `() => HostVisualPrimitives`
150
+
151
+ Resolves shared border, shadow, and padding values for host assembly.
152
+
153
+ Returns: Shared visual primitives reused across host sections.
154
+
155
+ ### updateStatsTableValues
156
+
157
+ `(statsValueByKey: Partial<Record<import("test/examples/flappy_bird/browser-entry/browser-entry.stats.types").FlappyStatsKey, HTMLTableCellElement>>, partialValues: Partial<Record<import("test/examples/flappy_bird/browser-entry/browser-entry.stats.types").FlappyStatsKey, string>>) => void`
158
+
159
+ Applies partial stat updates to the rendered stats table.
160
+
161
+ Parameters:
162
+
163
+ - `statsValueByKey` - - Lookup of stat keys to value cells.
164
+ - `partialValues` - - Subset of values to write this tick.
165
+
166
+ Returns: Nothing.
167
+
168
+ ## browser-entry/host/host.constants.ts
169
+
170
+ ### host.constants
171
+
172
+ Shared panel padding used by the host stats container.
173
+
174
+ ### FLAPPY_HOST_PANEL_PADDING
175
+
176
+ ### FLAPPY_HOST_PANEL_TRANSITION
177
+
178
+ ### FLAPPY_HOST_STATS_SPLIT_GAP
179
+
180
+ ### FLAPPY_HOST_TABLE_FONT_SIZE
181
+
182
+ ### FLAPPY_HOST_TABLE_HOST_PADDING
183
+
184
+ ## browser-entry/host/host.dom.service.ts
185
+
186
+ ### host.dom.service
187
+
188
+ Resolves a required 2D context from a canvas element.
189
+
190
+ @param canvas - Target canvas element.
191
+ @param errorMessage - Error message when 2D context is unavailable.
192
+ @returns Canvas 2D rendering context.
193
+
194
+ ### resolveRequiredCanvas2dContext
195
+
196
+ `(canvas: HTMLCanvasElement, errorMessage: string) => CanvasRenderingContext2D`
197
+
198
+ Resolves a required 2D context from a canvas element.
199
+
200
+ Parameters:
201
+
202
+ - `canvas` - - Target canvas element.
203
+ - `errorMessage` - - Error message when 2D context is unavailable.
204
+
205
+ Returns: Canvas 2D rendering context.
206
+
207
+ ## browser-entry/host/host.stats.service.ts
208
+
209
+ ### createAndAttachHostStatsTable
210
+
211
+ `(statsTableHost: HTMLElement) => Partial<Record<import("test/examples/flappy_bird/browser-entry/browser-entry.stats.types").FlappyStatsKey, HTMLTableCellElement>>`
212
+
213
+ Creates the host stats table, appends it into the provided host element, and
214
+ initializes all HUD values to their baseline placeholders.
215
+
216
+ Parameters:
217
+
218
+ - `statsTableHost` - - DOM host that receives the table.
219
+
220
+ Returns: Lookup map for future incremental stat updates.
221
+
222
+ ### updateStatsTableValues
223
+
224
+ `(statsValueByKey: Partial<Record<import("test/examples/flappy_bird/browser-entry/browser-entry.stats.types").FlappyStatsKey, HTMLTableCellElement>>, partialValues: Partial<Record<import("test/examples/flappy_bird/browser-entry/browser-entry.stats.types").FlappyStatsKey, string>>) => void`
225
+
226
+ Applies partial stat updates to the rendered stats table.
227
+
228
+ Parameters:
229
+
230
+ - `statsValueByKey` - - Lookup of stat keys to value cells.
231
+ - `partialValues` - - Subset of values to write this tick.
232
+
233
+ Returns: Nothing.
234
+
235
+ ## browser-entry/host/host.canvas.service.ts
236
+
237
+ ### host.canvas.service
238
+
239
+ Applies a canvas backing store size and CSS width/height.
240
+
241
+ @param canvas - Target canvas element.
242
+ @param widthPx - Desired backing-store width in pixels.
243
+ @param heightPx - Desired backing-store height in pixels.
244
+ @returns True when canvas dimensions changed.
245
+
246
+ ### applyCanvasBackingSize
247
+
248
+ `(canvas: HTMLCanvasElement, widthPx: number, heightPx: number) => boolean`
249
+
250
+ Applies a canvas backing store size and CSS width/height.
251
+
252
+ Parameters:
253
+
254
+ - `canvas` - - Target canvas element.
255
+ - `widthPx` - - Desired backing-store width in pixels.
256
+ - `heightPx` - - Desired backing-store height in pixels.
257
+
258
+ Returns: True when canvas dimensions changed.
259
+
260
+ ### applySimulationCanvasBounds
261
+
262
+ `(canvas: HTMLCanvasElement, widthPx: number, heightPx: number) => boolean`
263
+
264
+ Applies fixed simulation-canvas bounds so layout does not stretch unexpectedly.
265
+
266
+ Parameters:
267
+
268
+ - `canvas` - - Simulation canvas element.
269
+ - `widthPx` - - Desired width in pixels.
270
+ - `heightPx` - - Desired height in pixels.
271
+
272
+ Returns: True when backing-store dimensions changed.
273
+
274
+ ### resolveNetworkCanvasSizePx
275
+
276
+ `(networkCanvasHost: HTMLElement, hostInsetPx: number) => { widthPx: number; heightPx: number; }`
277
+
278
+ Computes the drawable network canvas size from host element dimensions.
279
+
280
+ Parameters:
281
+
282
+ - `networkCanvasHost` - - Host element wrapping the network canvas.
283
+ - `hostInsetPx` - - Total inset to subtract from both dimensions.
284
+
285
+ Returns: Width/height pair in pixels.
286
+
287
+ ## browser-entry/host/host.resize.service.ts
288
+
289
+ ### installResponsiveViewportSizing
290
+
291
+ `(canvas: HTMLCanvasElement, containerElement: HTMLElement, mainSplitContainer: HTMLElement, statsContainer: HTMLElement, statsSplitContainer: HTMLElement, statsTableHost: HTMLElement, networkCanvas: HTMLCanvasElement, networkCanvasHost: HTMLElement, onNetworkResize: () => void) => void`
292
+
293
+ Installs responsive viewport sizing for simulation and network canvases.
294
+
295
+ Parameters:
296
+
297
+ - `canvas` - - Simulation canvas to resize.
298
+ - `containerElement` - - Width/height source.
299
+ - `mainSplitContainer` - - Main split panel host.
300
+ - `statsContainer` - - Stats host element.
301
+ - `statsSplitContainer` - - Stats split panel containing stats and network panes.
302
+ - `statsTableHost` - - Stats table host element.
303
+ - `networkCanvas` - - Network canvas.
304
+ - `networkCanvasHost` - - Network host element.
305
+ - `onNetworkResize` - - Callback after network resize.
306
+
307
+ Returns: Nothing.
@@ -1,295 +1 @@
1
- import { clamp } from '../browser-entry.math.utils';
2
- import {
3
- FLAPPY_UI_NETWORK_HOST_FIXED_HEIGHT_PX,
4
- FLAPPY_UI_NETWORK_HOST_INSET_PX,
5
- FLAPPY_VIEWPORT_MOBILE_MINIMAL_UI_BREAKPOINT_PX,
6
- FLAPPY_VIEWPORT_MINIMUM_SIMULATION_HEIGHT_PX,
7
- FLAPPY_VIEWPORT_MINIMUM_SIMULATION_HEIGHT_RATIO,
8
- FLAPPY_VIEWPORT_MIN_NETWORK_HEIGHT_BUDGET_PX,
9
- FLAPPY_VIEWPORT_NETWORK_ONLY_BREAKPOINT_PX,
10
- FLAPPY_VIEWPORT_SIMULATION_BOTTOM_MARGIN_PX,
11
- FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX,
12
- } from '../../constants/constants';
13
- import { FLAPPY_HOST_STATS_SPLIT_GAP } from './host.constants';
14
- import {
15
- applyCanvasBackingSize,
16
- applySimulationCanvasBounds,
17
- resolveNetworkCanvasSizePx,
18
- } from './host.canvas.service';
19
-
20
- /**
21
- * Installs responsive viewport sizing for simulation and network canvases.
22
- *
23
- * @param canvas - Simulation canvas to resize.
24
- * @param containerElement - Width/height source.
25
- * @param mainSplitContainer - Main split panel host.
26
- * @param statsContainer - Stats host element.
27
- * @param statsSplitContainer - Stats split panel containing stats + network panes.
28
- * @param statsTableHost - Stats table host element.
29
- * @param networkCanvas - Network canvas.
30
- * @param networkCanvasHost - Network host element.
31
- * @param onNetworkResize - Callback after network resize.
32
- * @returns Nothing.
33
- */
34
- export function installResponsiveViewportSizing(
35
- canvas: HTMLCanvasElement,
36
- containerElement: HTMLElement,
37
- mainSplitContainer: HTMLElement,
38
- statsContainer: HTMLElement,
39
- statsSplitContainer: HTMLElement,
40
- statsTableHost: HTMLElement,
41
- networkCanvas: HTMLCanvasElement,
42
- networkCanvasHost: HTMLElement,
43
- onNetworkResize: () => void,
44
- ): void {
45
- let pendingNetworkRedrawRequest = false;
46
-
47
- /**
48
- * Defers network redraw until after layout settles across two animation frames.
49
- *
50
- * @returns Nothing.
51
- */
52
- const requestNetworkRedrawAfterLayout = (): void => {
53
- if (pendingNetworkRedrawRequest) {
54
- return;
55
- }
56
- pendingNetworkRedrawRequest = true;
57
-
58
- requestAnimationFrame(() => {
59
- requestAnimationFrame(() => {
60
- pendingNetworkRedrawRequest = false;
61
- onNetworkResize();
62
- });
63
- });
64
- };
65
-
66
- /**
67
- * Recomputes simulation/network canvas backing sizes from current layout constraints.
68
- *
69
- * @returns Nothing.
70
- */
71
- const applyCanvasSize = (): void => {
72
- // Step 1: Measure header and baseline layout constraints.
73
- const headerCanvasElement = containerElement.querySelector('canvas');
74
- const headerHeightPx = Math.max(
75
- 0,
76
- headerCanvasElement instanceof HTMLCanvasElement
77
- ? headerCanvasElement.offsetHeight
78
- : 0,
79
- );
80
-
81
- // Step 2: Resolve stats/network panel sizing constraints.
82
- const preferredNetworkHeightPx = Number.parseInt(
83
- networkCanvasHost.dataset.preferredHeightPx ??
84
- `${networkCanvasHost.offsetHeight}`,
85
- 10,
86
- );
87
- const nonNetworkStatsHeightPx = Math.max(
88
- 0,
89
- statsContainer.scrollHeight - networkCanvasHost.offsetHeight,
90
- );
91
-
92
- const hardMinimumSimulationHeightPx = Math.max(
93
- FLAPPY_VIEWPORT_MINIMUM_SIMULATION_HEIGHT_PX,
94
- Math.floor(
95
- window.innerHeight * FLAPPY_VIEWPORT_MINIMUM_SIMULATION_HEIGHT_RATIO,
96
- ),
97
- );
98
- const totalCanvasBudgetPx = Math.max(
99
- 1,
100
- containerElement.clientHeight - headerHeightPx,
101
- );
102
- const viewportWidthPx = Math.max(1, containerElement.clientWidth);
103
- const viewportHeightPx = Math.max(1, containerElement.clientHeight);
104
- const useMinimalMobileLayout =
105
- viewportWidthPx < FLAPPY_VIEWPORT_MOBILE_MINIMAL_UI_BREAKPOINT_PX;
106
- const useLandscapeSplitLayout = viewportWidthPx > viewportHeightPx;
107
- const useNetworkOnlyPanel =
108
- !useLandscapeSplitLayout &&
109
- viewportWidthPx < FLAPPY_VIEWPORT_NETWORK_ONLY_BREAKPOINT_PX;
110
-
111
- // Step 2.1: For mobile, hide stats/network panes and dedicate height to gameplay canvas.
112
- if (useMinimalMobileLayout) {
113
- mainSplitContainer.style.flexDirection = 'column';
114
- mainSplitContainer.style.gap = `${FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX}px`;
115
- statsSplitContainer.style.flexDirection = 'row';
116
- statsSplitContainer.style.alignItems = 'flex-start';
117
- statsSplitContainer.style.height = 'auto';
118
- statsTableHost.style.order = '0';
119
- networkCanvasHost.style.order = '1';
120
-
121
- statsContainer.style.display = 'none';
122
- statsContainer.style.height = '0px';
123
- statsContainer.style.maxHeight = '0px';
124
- statsContainer.style.overflowY = 'hidden';
125
-
126
- const mobileWidthPx = Math.max(
127
- 1,
128
- Math.floor(containerElement.clientWidth),
129
- );
130
- const mobileHeightPx = Math.max(
131
- 1,
132
- Math.floor(
133
- totalCanvasBudgetPx - FLAPPY_VIEWPORT_SIMULATION_BOTTOM_MARGIN_PX,
134
- ),
135
- );
136
-
137
- applyCanvasBackingSize(canvas, mobileWidthPx, mobileHeightPx);
138
- return;
139
- }
140
-
141
- // Step 2.2: Restore stats/network panes for non-mobile widths.
142
- statsContainer.style.display = 'block';
143
-
144
- // Step 2.3: Toggle top-level split orientation and inner panel ordering.
145
- mainSplitContainer.style.flexDirection = useLandscapeSplitLayout
146
- ? 'row'
147
- : 'column';
148
- mainSplitContainer.style.gap = `${FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX}px`;
149
-
150
- statsSplitContainer.style.flexDirection = useLandscapeSplitLayout
151
- ? 'column'
152
- : 'row';
153
- statsSplitContainer.style.alignItems = useLandscapeSplitLayout
154
- ? 'stretch'
155
- : 'flex-start';
156
- statsSplitContainer.style.height = useLandscapeSplitLayout
157
- ? '100%'
158
- : 'auto';
159
- statsSplitContainer.style.gap = useNetworkOnlyPanel
160
- ? '0'
161
- : FLAPPY_HOST_STATS_SPLIT_GAP;
162
-
163
- if (useLandscapeSplitLayout) {
164
- networkCanvasHost.style.order = '0';
165
- statsTableHost.style.order = '1';
166
- } else {
167
- statsTableHost.style.order = '0';
168
- networkCanvasHost.style.order = '1';
169
- }
170
-
171
- statsTableHost.style.display = useNetworkOnlyPanel ? 'none' : 'block';
172
- statsTableHost.style.flex = useNetworkOnlyPanel ? '0 0 auto' : '1 1 0';
173
- networkCanvasHost.style.flex = useNetworkOnlyPanel
174
- ? '1 1 100%'
175
- : '0 0 auto';
176
- networkCanvasHost.style.width = useNetworkOnlyPanel ? '100%' : 'auto';
177
- networkCanvasHost.style.maxWidth = '100%';
178
-
179
- const halfSplitTargetPx = Math.max(
180
- FLAPPY_VIEWPORT_MIN_NETWORK_HEIGHT_BUDGET_PX,
181
- Math.floor(
182
- (totalCanvasBudgetPx - FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX) * 0.5,
183
- ),
184
- );
185
- const maximumStatsHeightPx = Math.max(
186
- FLAPPY_VIEWPORT_MIN_NETWORK_HEIGHT_BUDGET_PX,
187
- totalCanvasBudgetPx -
188
- hardMinimumSimulationHeightPx -
189
- FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX,
190
- );
191
- const resolvedStatsPanelHeightPx = useLandscapeSplitLayout
192
- ? totalCanvasBudgetPx
193
- : Math.floor(
194
- clamp(
195
- halfSplitTargetPx,
196
- FLAPPY_VIEWPORT_MIN_NETWORK_HEIGHT_BUDGET_PX,
197
- maximumStatsHeightPx,
198
- ),
199
- );
200
- const minimumStatsPanelHeightPx =
201
- nonNetworkStatsHeightPx + FLAPPY_UI_NETWORK_HOST_FIXED_HEIGHT_PX;
202
- const adjustedStatsPanelHeightPx = useLandscapeSplitLayout
203
- ? resolvedStatsPanelHeightPx
204
- : Math.max(resolvedStatsPanelHeightPx, minimumStatsPanelHeightPx);
205
-
206
- const halfSplitTargetWidthPx = Math.max(
207
- FLAPPY_VIEWPORT_MIN_NETWORK_HEIGHT_BUDGET_PX,
208
- Math.floor(
209
- (viewportWidthPx - FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX) * 0.5,
210
- ),
211
- );
212
- const maximumStatsWidthPx = Math.max(
213
- FLAPPY_VIEWPORT_MIN_NETWORK_HEIGHT_BUDGET_PX,
214
- viewportWidthPx -
215
- FLAPPY_VIEWPORT_MIN_NETWORK_HEIGHT_BUDGET_PX -
216
- FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX,
217
- );
218
- const resolvedStatsPanelWidthPx = Math.floor(
219
- clamp(
220
- halfSplitTargetWidthPx,
221
- FLAPPY_VIEWPORT_MIN_NETWORK_HEIGHT_BUDGET_PX,
222
- maximumStatsWidthPx,
223
- ),
224
- );
225
-
226
- // Step 3: Clamp network pane height and trigger redraw when height changed.
227
- const resolvedNetworkHeightPx = FLAPPY_UI_NETWORK_HOST_FIXED_HEIGHT_PX;
228
- if (networkCanvasHost.offsetHeight !== resolvedNetworkHeightPx) {
229
- networkCanvasHost.style.height = `${resolvedNetworkHeightPx}px`;
230
- requestNetworkRedrawAfterLayout();
231
- }
232
-
233
- statsContainer.style.height = `${adjustedStatsPanelHeightPx}px`;
234
- statsContainer.style.maxHeight = `${adjustedStatsPanelHeightPx}px`;
235
- statsContainer.style.width = useLandscapeSplitLayout
236
- ? `${resolvedStatsPanelWidthPx}px`
237
- : '100%';
238
- statsContainer.style.maxWidth = useLandscapeSplitLayout
239
- ? `${resolvedStatsPanelWidthPx}px`
240
- : '100%';
241
- statsContainer.style.overflowY = useLandscapeSplitLayout
242
- ? 'auto'
243
- : 'hidden';
244
-
245
- // Step 4: Resolve simulation canvas size from remaining vertical budget.
246
- const availableWidthPx = useLandscapeSplitLayout
247
- ? Math.max(
248
- 1,
249
- containerElement.clientWidth -
250
- resolvedStatsPanelWidthPx -
251
- FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX,
252
- )
253
- : Math.max(1, containerElement.clientWidth);
254
- const availableHeightPx = useLandscapeSplitLayout
255
- ? Math.max(
256
- 1,
257
- totalCanvasBudgetPx - FLAPPY_VIEWPORT_SIMULATION_BOTTOM_MARGIN_PX,
258
- )
259
- : Math.max(
260
- 1,
261
- totalCanvasBudgetPx -
262
- adjustedStatsPanelHeightPx -
263
- FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX -
264
- FLAPPY_VIEWPORT_SIMULATION_BOTTOM_MARGIN_PX,
265
- );
266
-
267
- // Step 5: Apply simulation canvas backing size.
268
- applySimulationCanvasBounds(canvas, availableWidthPx, availableHeightPx);
269
-
270
- // Step 6: Apply network canvas backing size and redraw when changed.
271
- const { widthPx, heightPx } = resolveNetworkCanvasSizePx(
272
- networkCanvasHost,
273
- FLAPPY_UI_NETWORK_HOST_INSET_PX,
274
- );
275
- if (applyCanvasBackingSize(networkCanvas, widthPx, heightPx)) {
276
- onNetworkResize();
277
- }
278
- };
279
-
280
- // Step 1: Initial sizing pass.
281
- applyCanvasSize();
282
- // Step 2: Queue first post-layout network redraw.
283
- requestNetworkRedrawAfterLayout();
284
- // Step 3: Listen to viewport resize.
285
- window.addEventListener('resize', applyCanvasSize);
286
-
287
- // Step 4: Attach container observer for responsive host resizing.
288
- if (typeof ResizeObserver === 'function') {
289
- const resizeObserver = new ResizeObserver(() => {
290
- applyCanvasSize();
291
- requestNetworkRedrawAfterLayout();
292
- });
293
- resizeObserver.observe(containerElement);
294
- }
295
- }
1
+ export { installResponsiveViewportSizing } from './resize/host.resize.service';