@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
@@ -1,324 +1,4 @@
1
- import type Network from '../../../../src/architecture/network';
2
- import { renderStandaloneTitleBox } from './browser-entry.text-frame.utils';
3
- import {
4
- drawNetworkVisualization,
5
- resolveNetworkVisualizationHeightPx,
6
- } from './network-view/network-view';
7
- import {
8
- FLAPPY_FRAME_MONOSPACE_FONT,
9
- FLAPPY_HEADER_TITLE_TEXT,
10
- FLAPPY_HEADER_CANVAS_HEIGHT_PX,
11
- FLAPPY_UI_CANVAS_INSET_SHADOW,
12
- FLAPPY_UI_CONTENT_COLUMN_TOP_PADDING_PX,
13
- FLAPPY_UI_DOUBLE_PANEL_BORDER,
14
- FLAPPY_UI_NETWORK_CANVAS_BACKGROUND,
15
- FLAPPY_UI_NETWORK_HOST_FIXED_HEIGHT_PX,
16
- FLAPPY_UI_NETWORK_HOST_INSET_PX,
17
- FLAPPY_UI_NETWORK_HOST_INITIAL_HEIGHT_PX,
18
- FLAPPY_UI_NETWORK_HOST_BACKGROUND,
19
- FLAPPY_UI_OUTER_FRAME_MIN_SIDE_PADDING_PX,
20
- FLAPPY_UI_OUTER_FRAME_SIDE_PADDING_OFFSET_PX,
21
- FLAPPY_UI_OUTER_FRAME_BACKGROUND,
22
- FLAPPY_UI_UNIFIED_INSET_SHADOW,
23
- FLAPPY_NEON_PALETTE,
24
- FLAPPY_SCREEN_PADDING_PX,
25
- FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX,
26
- } from '../constants/constants';
27
- import type {
28
- FlappyStatsKey,
29
- FlappyStatsTableCells,
30
- NetworkVisualizationHandle,
31
- } from './browser-entry.types';
32
- import {
33
- FLAPPY_HOST_PANEL_PADDING,
34
- FLAPPY_HOST_PANEL_TRANSITION,
35
- FLAPPY_HOST_STATS_SPLIT_GAP,
36
- FLAPPY_HOST_TABLE_HOST_PADDING,
37
- } from './host/host.constants';
38
- import {
39
- applyCanvasBackingSize,
40
- resolveNetworkCanvasSizePx,
41
- } from './host/host.canvas.service';
42
- import { resolveRequiredCanvas2dContext } from './host/host.dom.service';
43
- import { installResponsiveViewportSizing } from './host/host.resize.service';
44
- import {
45
- createAndAttachHostStatsTable,
46
- updateStatsTableValues,
47
- } from './host/host.stats.service';
48
- import type { CanvasHostResult } from './host/host.types';
49
- import {
50
- FLAPPY_NETWORK_INPUT_SIZE,
51
- FLAPPY_NETWORK_OUTPUT_SIZE,
52
- } from '../constants/constants';
53
-
54
- /**
55
- * Builds the browser demo host tree and returns rendering handles.
56
- *
57
- * @param containerElement - Root host container.
58
- * @returns Canvas handles, stats cells and network render callback.
59
- */
60
- export function createCanvasHostInternal(
61
- containerElement: HTMLElement,
62
- ): CanvasHostResult {
63
- // Step 1: Reset host container and initialize shared visual primitives.
64
- containerElement.innerHTML = '';
65
-
66
- const outerFrame = document.createElement('section');
67
- const unifiedBorder = FLAPPY_UI_DOUBLE_PANEL_BORDER;
68
- const unifiedInsetShadow = FLAPPY_UI_UNIFIED_INSET_SHADOW;
69
-
70
- outerFrame.style.width = '100%';
71
- outerFrame.style.height = '100%';
72
- outerFrame.style.boxSizing = 'border-box';
73
- const sidePaddingPx = Math.max(
74
- FLAPPY_UI_OUTER_FRAME_MIN_SIDE_PADDING_PX,
75
- FLAPPY_SCREEN_PADDING_PX - FLAPPY_UI_OUTER_FRAME_SIDE_PADDING_OFFSET_PX,
76
- );
77
- outerFrame.style.padding = `0 ${sidePaddingPx}px ${sidePaddingPx}px ${sidePaddingPx}px`;
78
- outerFrame.style.border = unifiedBorder;
79
- outerFrame.style.background = FLAPPY_UI_OUTER_FRAME_BACKGROUND;
80
- outerFrame.style.boxShadow = unifiedInsetShadow;
81
- outerFrame.style.position = 'relative';
82
-
83
- // Step 2: Create top-level layout containers (content column + responsive main split).
84
- const contentColumn = document.createElement('div');
85
- contentColumn.style.width = '100%';
86
- contentColumn.style.height = '100%';
87
- contentColumn.style.display = 'flex';
88
- contentColumn.style.flexDirection = 'column';
89
- contentColumn.style.gap = '0';
90
- contentColumn.style.alignItems = 'stretch';
91
- contentColumn.style.overflow = 'hidden';
92
- contentColumn.style.paddingTop = `${FLAPPY_UI_CONTENT_COLUMN_TOP_PADDING_PX}px`;
93
-
94
- const mainSplitContainer = document.createElement('div');
95
- mainSplitContainer.style.width = '100%';
96
- mainSplitContainer.style.flex = '1 1 0';
97
- mainSplitContainer.style.minHeight = '0';
98
- mainSplitContainer.style.display = 'flex';
99
- mainSplitContainer.style.flexDirection = 'column';
100
- mainSplitContainer.style.alignItems = 'stretch';
101
- mainSplitContainer.style.gap = `${FLAPPY_VIEWPORT_VERTICAL_LAYOUT_GUTTER_PX}px`;
102
-
103
- // Step 3: Create header canvas used by the text-frame title renderer.
104
- const headerCanvas = document.createElement('canvas');
105
- headerCanvas.width = 1;
106
- headerCanvas.height = 1;
107
- headerCanvas.style.width = '100%';
108
- headerCanvas.style.height = `${FLAPPY_HEADER_CANVAS_HEIGHT_PX}px`;
109
- headerCanvas.style.display = 'block';
110
- headerCanvas.style.maxWidth = '100%';
111
- headerCanvas.style.boxSizing = 'border-box';
112
- headerCanvas.style.background = 'transparent';
113
-
114
- const headerContext = resolveRequiredCanvas2dContext(
115
- headerCanvas,
116
- 'Header canvas 2D context unavailable',
117
- );
118
-
119
- // Step 4: Create main simulation canvas.
120
- const canvas = document.createElement('canvas');
121
- canvas.width = 1;
122
- canvas.height = 1;
123
- canvas.style.width = '100%';
124
- canvas.style.height = '1px';
125
- canvas.style.display = 'block';
126
- canvas.style.maxWidth = '100%';
127
- canvas.style.boxSizing = 'border-box';
128
- canvas.style.flex = '0 0 auto';
129
- canvas.style.alignSelf = 'flex-start';
130
- canvas.style.imageRendering = 'pixelated';
131
- canvas.style.background = FLAPPY_NEON_PALETTE.background;
132
- canvas.style.border = unifiedBorder;
133
- canvas.style.boxShadow = FLAPPY_UI_CANVAS_INSET_SHADOW;
134
-
135
- const context = resolveRequiredCanvas2dContext(
136
- canvas,
137
- 'Canvas 2D context unavailable',
138
- );
139
-
140
- // Step 5: Create stats/network split pane container.
141
- const statsContainer = document.createElement('div');
142
- statsContainer.style.marginTop = '0';
143
- statsContainer.style.boxSizing = 'border-box';
144
- statsContainer.style.background = FLAPPY_NEON_PALETTE.hudPanelBackground;
145
- statsContainer.style.border = unifiedBorder;
146
- statsContainer.style.boxShadow = unifiedInsetShadow;
147
- statsContainer.style.padding = FLAPPY_HOST_PANEL_PADDING;
148
- statsContainer.style.overflow = 'hidden';
149
- statsContainer.style.transition = FLAPPY_HOST_PANEL_TRANSITION;
150
- statsContainer.style.minHeight = '0';
151
-
152
- const statsSplitContainer = document.createElement('div');
153
- statsSplitContainer.style.display = 'flex';
154
- statsSplitContainer.style.flexDirection = 'row';
155
- statsSplitContainer.style.alignItems = 'flex-start';
156
- statsSplitContainer.style.gap = FLAPPY_HOST_STATS_SPLIT_GAP;
157
- statsSplitContainer.style.width = '100%';
158
- statsSplitContainer.style.boxSizing = 'border-box';
159
-
160
- const statsTableHost = document.createElement('div');
161
- statsTableHost.style.flex = '1 1 0';
162
- statsTableHost.style.minHeight = '120px';
163
- statsTableHost.style.minWidth = '0';
164
- statsTableHost.style.overflow = 'hidden';
165
- statsTableHost.style.boxSizing = 'border-box';
166
- statsTableHost.style.border = unifiedBorder;
167
- statsTableHost.style.padding = FLAPPY_HOST_TABLE_HOST_PADDING;
168
-
169
- // Step 6: Create stats table and initialize value cells.
170
- const statsValueByKey = createAndAttachHostStatsTable(statsTableHost);
171
-
172
- // Step 7: Create network visualization host + canvas.
173
- const networkCanvasHost = document.createElement('div');
174
- networkCanvasHost.style.flex = '1 1 0';
175
- networkCanvasHost.style.minWidth = '0';
176
- networkCanvasHost.style.height = `${FLAPPY_UI_NETWORK_HOST_INITIAL_HEIGHT_PX}px`;
177
- networkCanvasHost.style.background = FLAPPY_UI_NETWORK_HOST_BACKGROUND;
178
- networkCanvasHost.style.boxSizing = 'border-box';
179
- networkCanvasHost.style.border = unifiedBorder;
180
- networkCanvasHost.style.padding = '6px';
181
- networkCanvasHost.style.boxShadow = FLAPPY_UI_CANVAS_INSET_SHADOW;
182
-
183
- const networkCanvas = document.createElement('canvas');
184
- networkCanvas.width = 1;
185
- networkCanvas.height = 1;
186
- networkCanvas.style.display = 'block';
187
- networkCanvas.style.width = '100%';
188
- networkCanvas.style.height = '100%';
189
- networkCanvas.style.maxWidth = '100%';
190
- networkCanvas.style.background = FLAPPY_UI_NETWORK_CANVAS_BACKGROUND;
191
- networkCanvas.style.border = 'none';
192
- networkCanvas.style.boxSizing = 'border-box';
193
- networkCanvasHost.appendChild(networkCanvas);
194
-
195
- const networkContext = resolveRequiredCanvas2dContext(
196
- networkCanvas,
197
- 'Network canvas 2D context unavailable',
198
- );
199
-
200
- // Step 8: Track last-rendered network payload for resize-triggered redraws.
201
- let previousNetworkForVisualization: Network | undefined;
202
- let previousVisualizationInputSize = FLAPPY_NETWORK_INPUT_SIZE;
203
- let previousVisualizationOutputSize = FLAPPY_NETWORK_OUTPUT_SIZE;
204
-
205
- /**
206
- * Resizes the network canvas backing resolution to match host CSS size.
207
- *
208
- * @returns Nothing.
209
- */
210
- const resizeNetworkCanvasToHost = (): void => {
211
- const { widthPx, heightPx } = resolveNetworkCanvasSizePx(
212
- networkCanvasHost,
213
- FLAPPY_UI_NETWORK_HOST_INSET_PX,
214
- );
215
- applyCanvasBackingSize(networkCanvas, widthPx, heightPx);
216
- };
217
-
218
- /**
219
- * Renders one architecture payload into the network visualization panel.
220
- *
221
- * @param network - Runtime network instance (optional placeholder mode).
222
- * @param inputSize - Input width used by layout/labels.
223
- * @param outputSize - Output width used by layout/labels.
224
- * @returns Nothing.
225
- */
226
- const renderNetworkArchitecture: NetworkVisualizationHandle['renderNetworkArchitecture'] =
227
- (network, inputSize, outputSize) => {
228
- // Step 1: Resolve recommended panel height from architecture complexity.
229
- const recommendedNetworkCanvasHeightPx =
230
- resolveNetworkVisualizationHeightPx(network, inputSize, outputSize);
231
- const fixedNetworkPanelHeightPx = FLAPPY_UI_NETWORK_HOST_FIXED_HEIGHT_PX;
232
- networkCanvasHost.dataset.preferredHeightPx = String(
233
- fixedNetworkPanelHeightPx,
234
- );
235
- networkCanvasHost.style.height = `${fixedNetworkPanelHeightPx}px`;
236
- // Step 2: Resize canvas backing store and render current payload.
237
- resizeNetworkCanvasToHost();
238
-
239
- previousNetworkForVisualization = network;
240
- previousVisualizationInputSize = inputSize;
241
- previousVisualizationOutputSize = outputSize;
242
- drawNetworkVisualization(networkContext, network, inputSize, outputSize);
243
- };
244
-
245
- // Step 9: Mount host DOM tree in final order.
246
- statsSplitContainer.appendChild(statsTableHost);
247
- statsSplitContainer.appendChild(networkCanvasHost);
248
- statsContainer.appendChild(statsSplitContainer);
249
-
250
- contentColumn.appendChild(headerCanvas);
251
- mainSplitContainer.appendChild(canvas);
252
- mainSplitContainer.appendChild(statsContainer);
253
- contentColumn.appendChild(mainSplitContainer);
254
- outerFrame.appendChild(contentColumn);
255
- containerElement.appendChild(outerFrame);
256
-
257
- /**
258
- * Draws the standalone header title frame.
259
- *
260
- * @returns Nothing.
261
- */
262
- const drawHeaderFrame = (): void => {
263
- // Step 1: Sync backing resolution to display size.
264
- const displayWidthPx = Math.max(1, Math.floor(headerCanvas.clientWidth));
265
- const displayHeightPx = FLAPPY_HEADER_CANVAS_HEIGHT_PX;
266
- if (
267
- headerCanvas.width !== displayWidthPx ||
268
- headerCanvas.height !== displayHeightPx
269
- ) {
270
- headerCanvas.width = displayWidthPx;
271
- headerCanvas.height = displayHeightPx;
272
- }
273
-
274
- // Step 2: Render title box glyph frame.
275
- renderStandaloneTitleBox({
276
- context: headerContext,
277
- widthPx: displayWidthPx,
278
- heightPx: displayHeightPx,
279
- titleText: FLAPPY_HEADER_TITLE_TEXT,
280
- glyphColor: FLAPPY_NEON_PALETTE.hudPanelBorder,
281
- font: FLAPPY_FRAME_MONOSPACE_FONT,
282
- });
283
- };
284
-
285
- // Step 10: Install responsive sizing and redraw hooks.
286
- installResponsiveViewportSizing(
287
- canvas,
288
- contentColumn,
289
- mainSplitContainer,
290
- statsContainer,
291
- statsSplitContainer,
292
- statsTableHost,
293
- networkCanvas,
294
- networkCanvasHost,
295
- () => {
296
- drawHeaderFrame();
297
- resizeNetworkCanvasToHost();
298
- renderNetworkArchitecture(
299
- previousNetworkForVisualization,
300
- previousVisualizationInputSize,
301
- previousVisualizationOutputSize,
302
- );
303
- },
304
- );
305
-
306
- // Step 11: Render initial placeholder visualization and header.
307
- renderNetworkArchitecture(
308
- undefined,
309
- FLAPPY_NETWORK_INPUT_SIZE,
310
- FLAPPY_NETWORK_OUTPUT_SIZE,
311
- );
312
- drawHeaderFrame();
313
-
314
- return { canvas, context, statsValueByKey, renderNetworkArchitecture };
315
- }
316
-
317
- /**
318
- * Applies partial stat updates to the rendered stats table.
319
- *
320
- * @param statsValueByKey - Lookup of stat keys to value cells.
321
- * @param partialValues - Subset of values to write this tick.
322
- * @returns Nothing.
323
- */
324
- export const updateStatsTableValuesInternal = updateStatsTableValues;
1
+ export {
2
+ createCanvasHostInternal,
3
+ updateStatsTableValuesInternal,
4
+ } from './host/host';