@openbraininstitute/morphoviewer 0.0.1 → 0.24.18

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 (373) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +37 -0
  3. package/lib/dist/abstract-canvas.d.ts +37 -0
  4. package/lib/dist/abstract-canvas.d.ts.map +1 -0
  5. package/lib/dist/abstract-canvas.js +131 -0
  6. package/lib/dist/colors.d.ts +34 -0
  7. package/lib/dist/colors.d.ts.map +1 -0
  8. package/lib/dist/colors.js +125 -0
  9. package/lib/dist/components/button-reset-camera/button-reset-camera.d.ts +10 -0
  10. package/lib/dist/components/button-reset-camera/button-reset-camera.d.ts.map +1 -0
  11. package/lib/dist/components/button-reset-camera/button-reset-camera.js +10 -0
  12. package/lib/dist/components/button-reset-camera/button-reset-camera.module.css +10 -0
  13. package/lib/dist/components/button-reset-camera/index.d.ts +2 -0
  14. package/lib/dist/components/button-reset-camera/index.d.ts.map +1 -0
  15. package/lib/dist/components/button-reset-camera/index.js +2 -0
  16. package/lib/dist/components/icons/3d.d.ts +8 -0
  17. package/lib/dist/components/icons/3d.d.ts.map +1 -0
  18. package/lib/dist/components/icons/3d.js +5 -0
  19. package/lib/dist/components/icons/center.d.ts +8 -0
  20. package/lib/dist/components/icons/center.d.ts.map +1 -0
  21. package/lib/dist/components/icons/center.js +5 -0
  22. package/lib/dist/components/icons/close.d.ts +8 -0
  23. package/lib/dist/components/icons/close.d.ts.map +1 -0
  24. package/lib/dist/components/icons/close.js +5 -0
  25. package/lib/dist/components/icons/copy.d.ts +2 -0
  26. package/lib/dist/components/icons/copy.d.ts.map +1 -0
  27. package/lib/dist/components/icons/copy.js +5 -0
  28. package/lib/dist/components/icons/dendrogram-circular.d.ts +2 -0
  29. package/lib/dist/components/icons/dendrogram-circular.d.ts.map +1 -0
  30. package/lib/dist/components/icons/dendrogram-circular.js +5 -0
  31. package/lib/dist/components/icons/dendrogram-straight.d.ts +2 -0
  32. package/lib/dist/components/icons/dendrogram-straight.d.ts.map +1 -0
  33. package/lib/dist/components/icons/dendrogram-straight.js +5 -0
  34. package/lib/dist/components/icons/fullscreen.d.ts +8 -0
  35. package/lib/dist/components/icons/fullscreen.d.ts.map +1 -0
  36. package/lib/dist/components/icons/fullscreen.js +5 -0
  37. package/lib/dist/components/icons/minimize.d.ts +8 -0
  38. package/lib/dist/components/icons/minimize.d.ts.map +1 -0
  39. package/lib/dist/components/icons/minimize.js +5 -0
  40. package/lib/dist/components/icons/pause.d.ts +8 -0
  41. package/lib/dist/components/icons/pause.d.ts.map +1 -0
  42. package/lib/dist/components/icons/pause.js +5 -0
  43. package/lib/dist/components/icons/play.d.ts +8 -0
  44. package/lib/dist/components/icons/play.d.ts.map +1 -0
  45. package/lib/dist/components/icons/play.js +5 -0
  46. package/lib/dist/components/icons/zoom-in.d.ts +8 -0
  47. package/lib/dist/components/icons/zoom-in.d.ts.map +1 -0
  48. package/lib/dist/components/icons/zoom-in.js +5 -0
  49. package/lib/dist/components/icons/zoom-out.d.ts +8 -0
  50. package/lib/dist/components/icons/zoom-out.d.ts.map +1 -0
  51. package/lib/dist/components/icons/zoom-out.js +5 -0
  52. package/lib/dist/components/morpho-viewer-octree/index.d.ts +4 -0
  53. package/lib/dist/components/morpho-viewer-octree/index.d.ts.map +1 -0
  54. package/lib/dist/components/morpho-viewer-octree/index.js +3 -0
  55. package/lib/dist/components/morpho-viewer-octree/morpho-viewer-octree.d.ts +3 -0
  56. package/lib/dist/components/morpho-viewer-octree/morpho-viewer-octree.d.ts.map +1 -0
  57. package/lib/dist/components/morpho-viewer-octree/morpho-viewer-octree.js +31 -0
  58. package/lib/dist/components/morpho-viewer-octree/morpho-viewer-octree.module.css +70 -0
  59. package/lib/dist/components/morpho-viewer-octree/painter/camera.d.ts +12 -0
  60. package/lib/dist/components/morpho-viewer-octree/painter/camera.d.ts.map +1 -0
  61. package/lib/dist/components/morpho-viewer-octree/painter/camera.js +23 -0
  62. package/lib/dist/components/morpho-viewer-octree/painter/manager.d.ts +23 -0
  63. package/lib/dist/components/morpho-viewer-octree/painter/manager.d.ts.map +1 -0
  64. package/lib/dist/components/morpho-viewer-octree/painter/manager.js +180 -0
  65. package/lib/dist/components/morpho-viewer-octree/tools.d.ts +2 -0
  66. package/lib/dist/components/morpho-viewer-octree/tools.d.ts.map +1 -0
  67. package/lib/dist/components/morpho-viewer-octree/tools.js +9 -0
  68. package/lib/dist/components/morpho-viewer-octree/types.d.ts +19 -0
  69. package/lib/dist/components/morpho-viewer-octree/types.d.ts.map +1 -0
  70. package/lib/dist/components/morpho-viewer-octree/types.js +2 -0
  71. package/lib/dist/components/morpho-viewer-simul/colors.d.ts +2 -0
  72. package/lib/dist/components/morpho-viewer-simul/colors.d.ts.map +1 -0
  73. package/lib/dist/components/morpho-viewer-simul/colors.js +24 -0
  74. package/lib/dist/components/morpho-viewer-simul/components/ModeSelector/ModeSelector.d.ts +7 -0
  75. package/lib/dist/components/morpho-viewer-simul/components/ModeSelector/ModeSelector.d.ts.map +1 -0
  76. package/lib/dist/components/morpho-viewer-simul/components/ModeSelector/ModeSelector.js +12 -0
  77. package/lib/dist/components/morpho-viewer-simul/components/ModeSelector/ModeSelector.module.css +25 -0
  78. package/lib/dist/components/morpho-viewer-simul/components/ModeSelector/index.d.ts +2 -0
  79. package/lib/dist/components/morpho-viewer-simul/components/ModeSelector/index.d.ts.map +1 -0
  80. package/lib/dist/components/morpho-viewer-simul/components/ModeSelector/index.js +2 -0
  81. package/lib/dist/components/morpho-viewer-simul/components/add-recording-dialog/add-recording-dialog.d.ts +6 -0
  82. package/lib/dist/components/morpho-viewer-simul/components/add-recording-dialog/add-recording-dialog.d.ts.map +1 -0
  83. package/lib/dist/components/morpho-viewer-simul/components/add-recording-dialog/add-recording-dialog.js +50 -0
  84. package/lib/dist/components/morpho-viewer-simul/components/add-recording-dialog/add-recording-dialog.module.css +115 -0
  85. package/lib/dist/components/morpho-viewer-simul/components/add-recording-dialog/hooks.d.ts +2 -0
  86. package/lib/dist/components/morpho-viewer-simul/components/add-recording-dialog/hooks.d.ts.map +1 -0
  87. package/lib/dist/components/morpho-viewer-simul/components/add-recording-dialog/hooks.js +12 -0
  88. package/lib/dist/components/morpho-viewer-simul/components/add-recording-dialog/index.d.ts +2 -0
  89. package/lib/dist/components/morpho-viewer-simul/components/add-recording-dialog/index.d.ts.map +1 -0
  90. package/lib/dist/components/morpho-viewer-simul/components/add-recording-dialog/index.js +2 -0
  91. package/lib/dist/components/morpho-viewer-simul/components/hint/hint.d.ts +8 -0
  92. package/lib/dist/components/morpho-viewer-simul/components/hint/hint.d.ts.map +1 -0
  93. package/lib/dist/components/morpho-viewer-simul/components/hint/hint.js +57 -0
  94. package/lib/dist/components/morpho-viewer-simul/components/hint/hint.module.css +23 -0
  95. package/lib/dist/components/morpho-viewer-simul/components/hint/index.d.ts +2 -0
  96. package/lib/dist/components/morpho-viewer-simul/components/hint/index.d.ts.map +1 -0
  97. package/lib/dist/components/morpho-viewer-simul/components/hint/index.js +2 -0
  98. package/lib/dist/components/morpho-viewer-simul/components/legend-overlay/index.d.ts +2 -0
  99. package/lib/dist/components/morpho-viewer-simul/components/legend-overlay/index.d.ts.map +1 -0
  100. package/lib/dist/components/morpho-viewer-simul/components/legend-overlay/index.js +2 -0
  101. package/lib/dist/components/morpho-viewer-simul/components/legend-overlay/legend-overlay.d.ts +5 -0
  102. package/lib/dist/components/morpho-viewer-simul/components/legend-overlay/legend-overlay.d.ts.map +1 -0
  103. package/lib/dist/components/morpho-viewer-simul/components/legend-overlay/legend-overlay.js +34 -0
  104. package/lib/dist/components/morpho-viewer-simul/components/legend-overlay/legend-overlay.module.css +5 -0
  105. package/lib/dist/components/morpho-viewer-simul/components/legend-overlay/legend-painter.d.ts +19 -0
  106. package/lib/dist/components/morpho-viewer-simul/components/legend-overlay/legend-painter.d.ts.map +1 -0
  107. package/lib/dist/components/morpho-viewer-simul/components/legend-overlay/legend-painter.js +209 -0
  108. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/current-time/current-time.d.ts +6 -0
  109. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/current-time/current-time.d.ts.map +1 -0
  110. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/current-time/current-time.js +21 -0
  111. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/current-time/current-time.module.css +20 -0
  112. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/current-time/index.d.ts +2 -0
  113. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/current-time/index.d.ts.map +1 -0
  114. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/current-time/index.js +2 -0
  115. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/index.d.ts +2 -0
  116. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/index.d.ts.map +1 -0
  117. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/index.js +2 -0
  118. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/play-button/index.d.ts +2 -0
  119. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/play-button/index.d.ts.map +1 -0
  120. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/play-button/index.js +2 -0
  121. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/play-button/play-button.d.ts +6 -0
  122. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/play-button/play-button.d.ts.map +1 -0
  123. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/play-button/play-button.js +12 -0
  124. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/play-button/play-button.module.css +21 -0
  125. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/simul-combo/index.d.ts +2 -0
  126. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/simul-combo/index.d.ts.map +1 -0
  127. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/simul-combo/index.js +2 -0
  128. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/simul-combo/simul-combo.d.ts +8 -0
  129. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/simul-combo/simul-combo.d.ts.map +1 -0
  130. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/simul-combo/simul-combo.js +19 -0
  131. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/simul-combo/simul-combo.module.css +52 -0
  132. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/speed-combo/index.d.ts +2 -0
  133. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/speed-combo/index.d.ts.map +1 -0
  134. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/speed-combo/index.js +2 -0
  135. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/speed-combo/speed-combo.d.ts +6 -0
  136. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/speed-combo/speed-combo.d.ts.map +1 -0
  137. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/speed-combo/speed-combo.js +20 -0
  138. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/speed-combo/speed-combo.module.css +69 -0
  139. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/spiking-controller.d.ts +6 -0
  140. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/spiking-controller.d.ts.map +1 -0
  141. package/lib/dist/components/morpho-viewer-simul/components/spiking-controller/spiking-controller.js +13 -0
  142. package/lib/dist/components/morpho-viewer-simul/components/zoom-slider/index.d.ts +2 -0
  143. package/lib/dist/components/morpho-viewer-simul/components/zoom-slider/index.d.ts.map +1 -0
  144. package/lib/dist/components/morpho-viewer-simul/components/zoom-slider/index.js +2 -0
  145. package/lib/dist/components/morpho-viewer-simul/components/zoom-slider/zoom-slider.d.ts +7 -0
  146. package/lib/dist/components/morpho-viewer-simul/components/zoom-slider/zoom-slider.d.ts.map +1 -0
  147. package/lib/dist/components/morpho-viewer-simul/components/zoom-slider/zoom-slider.js +13 -0
  148. package/lib/dist/components/morpho-viewer-simul/components/zoom-slider/zoom-slider.module.css +60 -0
  149. package/lib/dist/components/morpho-viewer-simul/contants.d.ts +9 -0
  150. package/lib/dist/components/morpho-viewer-simul/contants.d.ts.map +1 -0
  151. package/lib/dist/components/morpho-viewer-simul/contants.js +9 -0
  152. package/lib/dist/components/morpho-viewer-simul/hooks.d.ts +9 -0
  153. package/lib/dist/components/morpho-viewer-simul/hooks.d.ts.map +1 -0
  154. package/lib/dist/components/morpho-viewer-simul/hooks.js +34 -0
  155. package/lib/dist/components/morpho-viewer-simul/index.d.ts +3 -0
  156. package/lib/dist/components/morpho-viewer-simul/index.d.ts.map +1 -0
  157. package/lib/dist/components/morpho-viewer-simul/index.js +3 -0
  158. package/lib/dist/components/morpho-viewer-simul/morpho-viewer-simul.d.ts +3 -0
  159. package/lib/dist/components/morpho-viewer-simul/morpho-viewer-simul.d.ts.map +1 -0
  160. package/lib/dist/components/morpho-viewer-simul/morpho-viewer-simul.js +42 -0
  161. package/lib/dist/components/morpho-viewer-simul/morpho-viewer-simul.module.css +94 -0
  162. package/lib/dist/components/morpho-viewer-simul/painter/camera.d.ts +18 -0
  163. package/lib/dist/components/morpho-viewer-simul/painter/camera.d.ts.map +1 -0
  164. package/lib/dist/components/morpho-viewer-simul/painter/camera.js +17 -0
  165. package/lib/dist/components/morpho-viewer-simul/painter/index.d.ts +2 -0
  166. package/lib/dist/components/morpho-viewer-simul/painter/index.d.ts.map +1 -0
  167. package/lib/dist/components/morpho-viewer-simul/painter/index.js +2 -0
  168. package/lib/dist/components/morpho-viewer-simul/painter/initializer.d.ts +14 -0
  169. package/lib/dist/components/morpho-viewer-simul/painter/initializer.d.ts.map +1 -0
  170. package/lib/dist/components/morpho-viewer-simul/painter/initializer.js +35 -0
  171. package/lib/dist/components/morpho-viewer-simul/painter/manager.d.ts +99 -0
  172. package/lib/dist/components/morpho-viewer-simul/painter/manager.d.ts.map +1 -0
  173. package/lib/dist/components/morpho-viewer-simul/painter/manager.js +566 -0
  174. package/lib/dist/components/morpho-viewer-simul/painter/math.d.ts +4 -0
  175. package/lib/dist/components/morpho-viewer-simul/painter/math.d.ts.map +1 -0
  176. package/lib/dist/components/morpho-viewer-simul/painter/math.js +33 -0
  177. package/lib/dist/components/morpho-viewer-simul/painter/morphology-data.d.ts +12 -0
  178. package/lib/dist/components/morpho-viewer-simul/painter/morphology-data.d.ts.map +1 -0
  179. package/lib/dist/components/morpho-viewer-simul/painter/morphology-data.js +40 -0
  180. package/lib/dist/components/morpho-viewer-simul/painter/offscreen-painter/index.d.ts +2 -0
  181. package/lib/dist/components/morpho-viewer-simul/painter/offscreen-painter/index.d.ts.map +1 -0
  182. package/lib/dist/components/morpho-viewer-simul/painter/offscreen-painter/index.js +2 -0
  183. package/lib/dist/components/morpho-viewer-simul/painter/offscreen-painter/material-index.d.ts +5 -0
  184. package/lib/dist/components/morpho-viewer-simul/painter/offscreen-painter/material-index.d.ts.map +1 -0
  185. package/lib/dist/components/morpho-viewer-simul/painter/offscreen-painter/material-index.js +14 -0
  186. package/lib/dist/components/morpho-viewer-simul/painter/offscreen-painter/offscreen-painter.d.ts +23 -0
  187. package/lib/dist/components/morpho-viewer-simul/painter/offscreen-painter/offscreen-painter.d.ts.map +1 -0
  188. package/lib/dist/components/morpho-viewer-simul/painter/offscreen-painter/offscreen-painter.js +84 -0
  189. package/lib/dist/components/morpho-viewer-simul/painter/painters/contants.d.ts +2 -0
  190. package/lib/dist/components/morpho-viewer-simul/painter/painters/contants.d.ts.map +1 -0
  191. package/lib/dist/components/morpho-viewer-simul/painter/painters/contants.js +12 -0
  192. package/lib/dist/components/morpho-viewer-simul/painter/painters/highlight.d.ts +6 -0
  193. package/lib/dist/components/morpho-viewer-simul/painter/painters/highlight.d.ts.map +1 -0
  194. package/lib/dist/components/morpho-viewer-simul/painter/painters/highlight.js +29 -0
  195. package/lib/dist/components/morpho-viewer-simul/painter/painters/index.d.ts +2 -0
  196. package/lib/dist/components/morpho-viewer-simul/painter/painters/index.d.ts.map +1 -0
  197. package/lib/dist/components/morpho-viewer-simul/painter/painters/index.js +2 -0
  198. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/cursor.d.ts +12 -0
  199. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/cursor.d.ts.map +1 -0
  200. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/cursor.js +34 -0
  201. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/fill.d.ts +15 -0
  202. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/fill.d.ts.map +1 -0
  203. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/fill.js +85 -0
  204. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/index.d.ts +2 -0
  205. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/index.d.ts.map +1 -0
  206. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/index.js +2 -0
  207. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/texture.d.ts +3 -0
  208. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/texture.d.ts.map +1 -0
  209. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/texture.js +20 -0
  210. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/index.d.ts +2 -0
  211. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/index.d.ts.map +1 -0
  212. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/index.js +2 -0
  213. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/overlay.d.ts +20 -0
  214. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/overlay.d.ts.map +1 -0
  215. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/overlay.js +114 -0
  216. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/ticks.d.ts +24 -0
  217. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/ticks.d.ts.map +1 -0
  218. package/lib/dist/components/morpho-viewer-simul/painter/painters/overlay/ticks.js +127 -0
  219. package/lib/dist/components/morpho-viewer-simul/painter/painters/painter.d.ts +28 -0
  220. package/lib/dist/components/morpho-viewer-simul/painter/painters/painter.d.ts.map +1 -0
  221. package/lib/dist/components/morpho-viewer-simul/painter/painters/painter.js +136 -0
  222. package/lib/dist/components/morpho-viewer-simul/painter/painters/spiking/index.d.ts +2 -0
  223. package/lib/dist/components/morpho-viewer-simul/painter/painters/spiking/index.d.ts.map +1 -0
  224. package/lib/dist/components/morpho-viewer-simul/painter/painters/spiking/index.js +2 -0
  225. package/lib/dist/components/morpho-viewer-simul/painter/painters/spiking/spiking.d.ts +26 -0
  226. package/lib/dist/components/morpho-viewer-simul/painter/painters/spiking/spiking.d.ts.map +1 -0
  227. package/lib/dist/components/morpho-viewer-simul/painter/painters/spiking/spiking.js +116 -0
  228. package/lib/dist/components/morpho-viewer-simul/painter/painters/synapses.d.ts +12 -0
  229. package/lib/dist/components/morpho-viewer-simul/painter/painters/synapses.d.ts.map +1 -0
  230. package/lib/dist/components/morpho-viewer-simul/painter/painters/synapses.js +87 -0
  231. package/lib/dist/components/morpho-viewer-simul/painter/segments.d.ts +5 -0
  232. package/lib/dist/components/morpho-viewer-simul/painter/segments.d.ts.map +1 -0
  233. package/lib/dist/components/morpho-viewer-simul/painter/segments.js +58 -0
  234. package/lib/dist/components/morpho-viewer-simul/painter/soma.d.ts +9 -0
  235. package/lib/dist/components/morpho-viewer-simul/painter/soma.d.ts.map +1 -0
  236. package/lib/dist/components/morpho-viewer-simul/painter/soma.js +44 -0
  237. package/lib/dist/components/morpho-viewer-simul/painter/spiking-manager.d.ts +44 -0
  238. package/lib/dist/components/morpho-viewer-simul/painter/spiking-manager.d.ts.map +1 -0
  239. package/lib/dist/components/morpho-viewer-simul/painter/spiking-manager.js +164 -0
  240. package/lib/dist/components/morpho-viewer-simul/painter/structure.d.ts +59 -0
  241. package/lib/dist/components/morpho-viewer-simul/painter/structure.d.ts.map +1 -0
  242. package/lib/dist/components/morpho-viewer-simul/painter/structure.js +175 -0
  243. package/lib/dist/components/morpho-viewer-simul/painter/transition.d.ts +41 -0
  244. package/lib/dist/components/morpho-viewer-simul/painter/transition.d.ts.map +1 -0
  245. package/lib/dist/components/morpho-viewer-simul/painter/transition.js +152 -0
  246. package/lib/dist/components/morpho-viewer-simul/painter/tree.d.ts +7 -0
  247. package/lib/dist/components/morpho-viewer-simul/painter/tree.d.ts.map +1 -0
  248. package/lib/dist/components/morpho-viewer-simul/painter/tree.js +96 -0
  249. package/lib/dist/components/morpho-viewer-simul/types/private.d.ts +33 -0
  250. package/lib/dist/components/morpho-viewer-simul/types/private.d.ts.map +1 -0
  251. package/lib/dist/components/morpho-viewer-simul/types/private.js +2 -0
  252. package/lib/dist/components/morpho-viewer-simul/types/public.d.ts +91 -0
  253. package/lib/dist/components/morpho-viewer-simul/types/public.d.ts.map +1 -0
  254. package/lib/dist/components/morpho-viewer-simul/types/public.js +13 -0
  255. package/lib/dist/components/morpho-viewer-simul/utils.d.ts +4 -0
  256. package/lib/dist/components/morpho-viewer-simul/utils.d.ts.map +1 -0
  257. package/lib/dist/components/morpho-viewer-simul/utils.js +25 -0
  258. package/lib/dist/components/morpho-viewer-small-circuit/index.d.ts +3 -0
  259. package/lib/dist/components/morpho-viewer-small-circuit/index.d.ts.map +1 -0
  260. package/lib/dist/components/morpho-viewer-small-circuit/index.js +3 -0
  261. package/lib/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.d.ts +3 -0
  262. package/lib/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.d.ts.map +1 -0
  263. package/lib/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.js +32 -0
  264. package/lib/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.module.css +63 -0
  265. package/lib/dist/components/morpho-viewer-small-circuit/painter/camera.d.ts +13 -0
  266. package/lib/dist/components/morpho-viewer-small-circuit/painter/camera.d.ts.map +1 -0
  267. package/lib/dist/components/morpho-viewer-small-circuit/painter/camera.js +39 -0
  268. package/lib/dist/components/morpho-viewer-small-circuit/painter/index.d.ts +2 -0
  269. package/lib/dist/components/morpho-viewer-small-circuit/painter/index.d.ts.map +1 -0
  270. package/lib/dist/components/morpho-viewer-small-circuit/painter/index.js +2 -0
  271. package/lib/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts +54 -0
  272. package/lib/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts.map +1 -0
  273. package/lib/dist/components/morpho-viewer-small-circuit/painter/manager.js +378 -0
  274. package/lib/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/index.d.ts +2 -0
  275. package/lib/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/index.d.ts.map +1 -0
  276. package/lib/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/index.js +2 -0
  277. package/lib/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts +22 -0
  278. package/lib/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts.map +1 -0
  279. package/lib/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.js +61 -0
  280. package/lib/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.d.ts +7 -0
  281. package/lib/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.d.ts.map +1 -0
  282. package/lib/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.js +54 -0
  283. package/lib/dist/components/morpho-viewer-small-circuit/painter/painter-cell/index.d.ts +2 -0
  284. package/lib/dist/components/morpho-viewer-small-circuit/painter/painter-cell/index.d.ts.map +1 -0
  285. package/lib/dist/components/morpho-viewer-small-circuit/painter/painter-cell/index.js +2 -0
  286. package/lib/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts +20 -0
  287. package/lib/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts.map +1 -0
  288. package/lib/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.js +127 -0
  289. package/lib/dist/components/morpho-viewer-small-circuit/types.d.ts +24 -0
  290. package/lib/dist/components/morpho-viewer-small-circuit/types.d.ts.map +1 -0
  291. package/lib/dist/components/morpho-viewer-small-circuit/types.js +2 -0
  292. package/lib/dist/components/tooltip/index.d.ts +2 -0
  293. package/lib/dist/components/tooltip/index.d.ts.map +1 -0
  294. package/lib/dist/components/tooltip/index.js +2 -0
  295. package/lib/dist/components/tooltip/tooltip.d.ts +14 -0
  296. package/lib/dist/components/tooltip/tooltip.d.ts.map +1 -0
  297. package/lib/dist/components/tooltip/tooltip.js +10 -0
  298. package/lib/dist/components/tooltip/tooltip.module.css +74 -0
  299. package/lib/dist/gizmo/gizmo-canvas.d.ts +17 -0
  300. package/lib/dist/gizmo/gizmo-canvas.d.ts.map +1 -0
  301. package/lib/dist/gizmo/gizmo-canvas.js +98 -0
  302. package/lib/dist/gizmo/index.d.ts +2 -0
  303. package/lib/dist/gizmo/index.d.ts.map +1 -0
  304. package/lib/dist/gizmo/index.js +2 -0
  305. package/lib/dist/gizmo/painter/shader.frag.d.ts +2 -0
  306. package/lib/dist/gizmo/painter/shader.frag.d.ts.map +1 -0
  307. package/lib/dist/gizmo/painter/shader.frag.js +19 -0
  308. package/lib/dist/gizmo/painter/shader.vert.d.ts +2 -0
  309. package/lib/dist/gizmo/painter/shader.vert.d.ts.map +1 -0
  310. package/lib/dist/gizmo/painter/shader.vert.js +26 -0
  311. package/lib/dist/gizmo/painter/tips.d.ts +13 -0
  312. package/lib/dist/gizmo/painter/tips.d.ts.map +1 -0
  313. package/lib/dist/gizmo/painter/tips.js +85 -0
  314. package/lib/dist/index.d.ts +16 -0
  315. package/lib/dist/index.d.ts.map +1 -0
  316. package/lib/dist/index.js +14 -0
  317. package/lib/dist/morphology/morphology-canvas.d.ts +64 -0
  318. package/lib/dist/morphology/morphology-canvas.d.ts.map +1 -0
  319. package/lib/dist/morphology/morphology-canvas.js +275 -0
  320. package/lib/dist/morphology/painter/factory.d.ts +7 -0
  321. package/lib/dist/morphology/painter/factory.d.ts.map +1 -0
  322. package/lib/dist/morphology/painter/factory.js +22 -0
  323. package/lib/dist/morphology/painter/index.d.ts +2 -0
  324. package/lib/dist/morphology/painter/index.d.ts.map +1 -0
  325. package/lib/dist/morphology/painter/index.js +2 -0
  326. package/lib/dist/morphology/painter/nodes.d.ts +21 -0
  327. package/lib/dist/morphology/painter/nodes.d.ts.map +1 -0
  328. package/lib/dist/morphology/painter/nodes.js +134 -0
  329. package/lib/dist/morphology/painter/painter.d.ts +31 -0
  330. package/lib/dist/morphology/painter/painter.d.ts.map +1 -0
  331. package/lib/dist/morphology/painter/painter.js +104 -0
  332. package/lib/dist/morphology/painter/segments.d.ts +23 -0
  333. package/lib/dist/morphology/painter/segments.d.ts.map +1 -0
  334. package/lib/dist/morphology/painter/segments.js +96 -0
  335. package/lib/dist/morphology/painter/textures.d.ts +10 -0
  336. package/lib/dist/morphology/painter/textures.d.ts.map +1 -0
  337. package/lib/dist/morphology/painter/textures.js +53 -0
  338. package/lib/dist/nrrd/get-header-length.d.ts +2 -0
  339. package/lib/dist/nrrd/get-header-length.d.ts.map +1 -0
  340. package/lib/dist/nrrd/get-header-length.js +48 -0
  341. package/lib/dist/nrrd/header.d.ts +28 -0
  342. package/lib/dist/nrrd/header.d.ts.map +1 -0
  343. package/lib/dist/nrrd/header.js +122 -0
  344. package/lib/dist/nrrd/index.d.ts +3 -0
  345. package/lib/dist/nrrd/index.d.ts.map +1 -0
  346. package/lib/dist/nrrd/index.js +33 -0
  347. package/lib/dist/nrrd/volume.d.ts +29 -0
  348. package/lib/dist/nrrd/volume.d.ts.map +1 -0
  349. package/lib/dist/nrrd/volume.js +129 -0
  350. package/lib/dist/package.json +96 -0
  351. package/lib/dist/parser/for-each-line.d.ts +2 -0
  352. package/lib/dist/parser/for-each-line.d.ts.map +1 -0
  353. package/lib/dist/parser/for-each-line.js +14 -0
  354. package/lib/dist/parser/swc.d.ts +14 -0
  355. package/lib/dist/parser/swc.d.ts.map +1 -0
  356. package/lib/dist/parser/swc.js +49 -0
  357. package/lib/dist/scalebar.d.ts +11 -0
  358. package/lib/dist/scalebar.d.ts.map +1 -0
  359. package/lib/dist/scalebar.js +25 -0
  360. package/lib/dist/tools/cache-lru.d.ts +18 -0
  361. package/lib/dist/tools/cache-lru.d.ts.map +1 -0
  362. package/lib/dist/tools/cache-lru.js +53 -0
  363. package/lib/dist/tools/morphology-to-tree.d.ts +4 -0
  364. package/lib/dist/tools/morphology-to-tree.d.ts.map +1 -0
  365. package/lib/dist/tools/morphology-to-tree.js +89 -0
  366. package/lib/dist/types.d.ts +9 -0
  367. package/lib/dist/types.d.ts.map +1 -0
  368. package/lib/dist/types.js +9 -0
  369. package/lib/dist/utils.d.ts +16 -0
  370. package/lib/dist/utils.d.ts.map +1 -0
  371. package/lib/dist/utils.js +56 -0
  372. package/package.json +43 -15
  373. package/package.json~ +0 -16
@@ -0,0 +1,566 @@
1
+ "use client";
2
+ import { TgdColor, TgdContext, TgdControllerCameraOrbit, TgdEvent, TgdMat4, TgdVec3, tgdCalcMapRange, } from "@tolokoban/tgd";
3
+ import React from "react";
4
+ import { useEventValue } from "./../../../utils.js";
5
+ import { makeCamera } from "./camera.js";
6
+ import { Initializer } from "./initializer.js";
7
+ import { computeSectionOffset } from "./math.js";
8
+ import { OffscreenPainter } from "./offscreen-painter/index.js";
9
+ import { Painter } from "./painters/index.js";
10
+ import { SpikingManager } from "./spiking-manager.js";
11
+ import { TransitionManager } from "./transition.js";
12
+ const EMPTY_SEGMENTS = new Map();
13
+ export class PainterManager extends Initializer {
14
+ constructor(onReady) {
15
+ super();
16
+ this.onReady = onReady;
17
+ this.minRadius = 3;
18
+ this.disableElectrodes = false;
19
+ this.id = PainterManager.id++;
20
+ this.eventSpikeProgressChange = new TgdEvent();
21
+ this.eventSpikePlayingChange = new TgdEvent();
22
+ this.eventError = new TgdEvent();
23
+ this.eventPaint = new TgdEvent();
24
+ this.eventHover = new TgdEvent();
25
+ this.eventTap = new TgdEvent();
26
+ this.eventZoom = new TgdEvent();
27
+ this.eventRestingPosition = new TgdEvent();
28
+ this.eventHintVisible = new TgdEvent();
29
+ this.eventForbiddenClick = new TgdEvent();
30
+ this._verbose = false;
31
+ this.spikingManager = null;
32
+ this.enventSpikingManagerChange = new TgdEvent();
33
+ this.context = null;
34
+ this._disableSynapses = false;
35
+ this._hoverItem = { x: 0, y: 0, offset: 0, item: null };
36
+ this.initialPosition = new TgdVec3();
37
+ this.cameraController = null;
38
+ this.synapses = [];
39
+ this.data = null;
40
+ this.lastCameraChangeTimestamp = 0;
41
+ this.lastCameraState = null;
42
+ this._clickable = true;
43
+ this._backgroundColor = "#000000";
44
+ this._mode = "3d";
45
+ this.clearColor = new TgdColor(0, 0, 0);
46
+ this.view = null;
47
+ this._spikes = [];
48
+ this._spikeProgress = -1;
49
+ this._spikePlaying = false;
50
+ this.zoomOut = () => {
51
+ this.zoom -= 0.1;
52
+ };
53
+ this.zoomIn = () => {
54
+ this.zoom += 0.1;
55
+ };
56
+ this.cameraReset = () => {
57
+ const { cameraController, context } = this;
58
+ if (!context || !cameraController)
59
+ return;
60
+ const { zoom } = this;
61
+ cameraController.reset(0.3333, {
62
+ onAction: (t) => {
63
+ this.eventZoom.dispatch(tgdCalcMapRange(t, 0, 1, zoom, 0));
64
+ },
65
+ onEnd: () => this.eventRestingPosition.dispatch(true),
66
+ });
67
+ };
68
+ this.handlePaint = () => {
69
+ const { context } = this;
70
+ if (!context)
71
+ return;
72
+ this.lastCameraState = context.camera.getCurrentState();
73
+ this.eventPaint.dispatch();
74
+ };
75
+ }
76
+ get verbose() {
77
+ return this._verbose;
78
+ }
79
+ set verbose(verbose) {
80
+ if (this._verbose === verbose)
81
+ return;
82
+ this._verbose = verbose;
83
+ const { context, view } = this;
84
+ if (context)
85
+ context.verbose = verbose;
86
+ if (view) {
87
+ const { offscreen } = view;
88
+ if (offscreen)
89
+ offscreen.context.verbose = verbose;
90
+ }
91
+ }
92
+ cameraGet() {
93
+ var _a;
94
+ const camera = (_a = this.context) === null || _a === void 0 ? void 0 : _a.camera;
95
+ if (!camera)
96
+ throw new Error("PainterManager is not ready yet!");
97
+ const zoom = camera.zoom;
98
+ const [x, y, z] = camera.transfo.position;
99
+ const [qx, qy, qz, qw] = camera.transfo.orientation;
100
+ return {
101
+ zoom,
102
+ center: [x, y, z],
103
+ orientation: [qx, qy, qz, qw],
104
+ };
105
+ }
106
+ cameraSet(settings) {
107
+ var _a, _b;
108
+ const camera = (_a = this.context) === null || _a === void 0 ? void 0 : _a.camera;
109
+ if (!camera)
110
+ throw new Error("PainterManager is not ready yet!");
111
+ camera.zoom = settings.zoom;
112
+ camera.transfo.setPosition(...settings.center);
113
+ camera.transfo.setOrientation(settings.orientation);
114
+ (_b = this.context) === null || _b === void 0 ? void 0 : _b.paint();
115
+ }
116
+ useSpikingManager() {
117
+ const spikingManager = useEventValue(this.spikingManager, this.enventSpikingManagerChange);
118
+ return spikingManager;
119
+ }
120
+ get spikes() {
121
+ return this._spikes;
122
+ }
123
+ set spikes(spikes) {
124
+ if (this._spikes === spikes)
125
+ return;
126
+ this._spikes = spikes;
127
+ const { spikingManager } = this;
128
+ if (spikingManager)
129
+ spikingManager.spikes = spikes;
130
+ }
131
+ get spikeProgress() {
132
+ const { spikingManager } = this;
133
+ return spikingManager ? spikingManager.progress : this._spikeProgress;
134
+ }
135
+ set spikeProgress(spikeProgress) {
136
+ if (this._spikeProgress === spikeProgress)
137
+ return;
138
+ this._spikeProgress = spikeProgress;
139
+ const { spikingManager } = this;
140
+ if (spikingManager)
141
+ spikingManager.progress = spikeProgress;
142
+ }
143
+ get spikePlaying() {
144
+ return this._spikePlaying;
145
+ }
146
+ set spikePlaying(spikePlaying) {
147
+ if (this._spikePlaying === spikePlaying)
148
+ return;
149
+ this._spikePlaying = spikePlaying;
150
+ const { context } = this;
151
+ if (!context)
152
+ return;
153
+ if (spikePlaying)
154
+ context.play();
155
+ else
156
+ context.pause();
157
+ }
158
+ get mode() {
159
+ return this._mode;
160
+ }
161
+ set mode(mode) {
162
+ if (this._mode === mode)
163
+ return;
164
+ this._mode = mode;
165
+ const { cameraController } = this;
166
+ if (cameraController) {
167
+ cameraController.speedOrbit = mode === "3d" ? 1 : 0;
168
+ }
169
+ if (this.view) {
170
+ this.view.mode = mode;
171
+ }
172
+ }
173
+ get backgroundColor() {
174
+ return this._backgroundColor;
175
+ }
176
+ set backgroundColor(backgroundColor) {
177
+ if (backgroundColor === this._backgroundColor)
178
+ return;
179
+ this._backgroundColor = backgroundColor;
180
+ this.clearColor.parse(backgroundColor);
181
+ }
182
+ get clickable() {
183
+ return this._clickable;
184
+ }
185
+ set clickable(value) {
186
+ var _a;
187
+ this._clickable = value;
188
+ (_a = this.context) === null || _a === void 0 ? void 0 : _a.paint();
189
+ }
190
+ get hoverItem() {
191
+ return this._hoverItem;
192
+ }
193
+ set hoverItem(value) {
194
+ this._hoverItem = value;
195
+ this.eventHover.dispatch(value);
196
+ }
197
+ get zoom() {
198
+ const { cameraController, context } = this;
199
+ if (!context || !cameraController)
200
+ return 0;
201
+ return this.toNormalizedZoom(cameraController.zoom);
202
+ }
203
+ set zoom(value) {
204
+ var _a;
205
+ const { cameraController } = this;
206
+ if (!cameraController)
207
+ return;
208
+ if (Math.abs(value - this.zoom) < 1e-6)
209
+ return;
210
+ if (value !== 0)
211
+ this.eventRestingPosition.dispatch(false);
212
+ const zoom = this.toControllerZoom(value);
213
+ cameraController.zoom = zoom;
214
+ this.eventZoom.dispatch(value);
215
+ (_a = this.context) === null || _a === void 0 ? void 0 : _a.paint();
216
+ }
217
+ getCameraMatrix() {
218
+ const { context } = this;
219
+ if (!context)
220
+ return new TgdMat4();
221
+ const { camera } = context;
222
+ return new TgdMat4(camera.matrixProjection).multiply(camera.matrixModelView);
223
+ }
224
+ delete() {
225
+ var _a, _b;
226
+ (_a = this.context) === null || _a === void 0 ? void 0 : _a.delete();
227
+ this.context = null;
228
+ (_b = this.view) === null || _b === void 0 ? void 0 : _b.eventResetCamera.removeListener(this.cameraReset);
229
+ }
230
+ getSectionCoordinates(sectionName, offset) {
231
+ var _a, _b, _c, _d, _e, _f;
232
+ const structure = (_a = this.data) === null || _a === void 0 ? void 0 : _a.structure;
233
+ if (!structure)
234
+ return new TgdVec3();
235
+ const segments = (_b = structure.getSegmentsOfSection(sectionName)) !== null && _b !== void 0 ? _b : [];
236
+ const totalDistance = segments.reduce((dist, item) => dist + item.segmentLength, 0);
237
+ const targetDistance = totalDistance * offset;
238
+ let distance = 0;
239
+ for (const segment of segments) {
240
+ const previousDistance = distance;
241
+ distance += segment.segmentLength;
242
+ if (distance >= targetDistance) {
243
+ const seg1 = (_c = this.data) === null || _c === void 0 ? void 0 : _c.segments3D.get(segment.index);
244
+ const seg2 = (_d = this.data) === null || _d === void 0 ? void 0 : _d.segmentsDendrogram.get(segment.index);
245
+ if (!seg1 || !seg2)
246
+ continue;
247
+ const segmentOffset = segment.segmentLength > 0
248
+ ? (targetDistance - previousDistance) / segment.segmentLength
249
+ : 0.5;
250
+ const mix = (_f = (_e = this.view) === null || _e === void 0 ? void 0 : _e.mix) !== null && _f !== void 0 ? _f : 0;
251
+ const start = TgdVec3.newFromMix(seg1.getXYZR0(0), seg2.getXYZR0(0), mix);
252
+ const end = TgdVec3.newFromMix(seg1.getXYZR1(0), seg2.getXYZR1(0), mix);
253
+ const point = TgdVec3.newFromMix(start, end, segmentOffset);
254
+ return point;
255
+ }
256
+ }
257
+ return new TgdVec3();
258
+ }
259
+ getSegment(sectionName, sectionOffset) {
260
+ var _a;
261
+ const structure = (_a = this.data) === null || _a === void 0 ? void 0 : _a.structure;
262
+ if (!structure)
263
+ return null;
264
+ const segments = structure.getSegmentsOfSection(sectionName);
265
+ if (!segments)
266
+ return null;
267
+ const totalDistance = segments.reduce((dist, item) => dist + item.segmentLength, 0);
268
+ const targetDistance = totalDistance * sectionOffset;
269
+ let distance = 0;
270
+ for (const segment of segments) {
271
+ distance += segment.segmentLength;
272
+ if (distance >= targetDistance)
273
+ return segment;
274
+ }
275
+ return null;
276
+ }
277
+ showSynapses(synapses) {
278
+ this.synapses = synapses;
279
+ const { view } = this;
280
+ if (view)
281
+ view.synapses = synapses;
282
+ }
283
+ fitCamera() {
284
+ const { data } = this;
285
+ if (!data)
286
+ return;
287
+ const { view, context } = this;
288
+ if (!context)
289
+ return;
290
+ const { structure } = data;
291
+ const [xc, yc] = structure.center;
292
+ const bbox = structure.bboxDendrites;
293
+ const width = 2.1 * Math.max(Math.abs(bbox.max[0] - xc), Math.abs(bbox.min[0] - xc));
294
+ const height = 2.1 * Math.max(Math.abs(bbox.max[1] - yc), Math.abs(bbox.min[1] - yc));
295
+ if (view) {
296
+ view.widthAtTarget = width;
297
+ view.heightAtTarget = height;
298
+ }
299
+ }
300
+ initialize(canvas, data) {
301
+ var _a;
302
+ try {
303
+ this.data = data;
304
+ const context = this.initContext(canvas, data);
305
+ this.spikingManager = new SpikingManager(context);
306
+ this.spikingManager.eventProgressChange.addListener((value) => this.eventSpikeProgressChange.dispatch(value));
307
+ this.spikingManager.progress = this._spikeProgress;
308
+ this.spikingManager.spikes = this.spikes;
309
+ context.paintOneTime({
310
+ paint: () => {
311
+ this.enventSpikingManagerChange.dispatch(this.spikingManager);
312
+ },
313
+ });
314
+ const view = new TransitionManager(context, { clearColor: this.backgroundColor });
315
+ view.eventResetCamera.addListener(this.cameraReset);
316
+ context.add(view);
317
+ this.view = view;
318
+ this.initPainter(context, data, view, this.spikingManager);
319
+ context.eventPaint.addListener(this.handlePaint);
320
+ this.initOffscreen(context, data, view);
321
+ this.eventHintVisible.dispatch(false);
322
+ this.fitCamera();
323
+ (_a = this.onReady) === null || _a === void 0 ? void 0 : _a.call(this, this);
324
+ }
325
+ catch (error) {
326
+ console.error(error);
327
+ throw error;
328
+ }
329
+ }
330
+ initContext(canvas, data) {
331
+ const context = new TgdContext(canvas, {
332
+ alpha: false,
333
+ antialias: true,
334
+ preserveDrawingBuffer: false,
335
+ verbose: this.verbose,
336
+ });
337
+ this.context = context;
338
+ if (this._spikePlaying)
339
+ context.play();
340
+ else
341
+ context.pause();
342
+ this.context.eventPlayingChange.addListener((value) => this.eventSpikePlayingChange.dispatch(value));
343
+ context.eventWebGLContextRestored.addListener(() => {
344
+ this.delete();
345
+ globalThis.requestAnimationFrame(() => this.initialize(canvas, data));
346
+ });
347
+ const { camera, zoomMin, zoomMax } = makeCamera(data.structure);
348
+ context.camera = camera;
349
+ this.initialPosition.from(context.camera.transfo.position);
350
+ this.initCameraController(context, zoomMin, zoomMax);
351
+ if (this.lastCameraState) {
352
+ context.camera.setCurrentState(this.lastCameraState);
353
+ this.eventRestingPosition.dispatch(false);
354
+ }
355
+ context.paint();
356
+ return context;
357
+ }
358
+ initPainter(context, data, view, spikingManager) {
359
+ var _a, _b;
360
+ const painter = new Painter(context, data, spikingManager);
361
+ view.minRadius = this.minRadius;
362
+ view.painter = painter;
363
+ painter.synapses = (_b = (_a = this.view) === null || _a === void 0 ? void 0 : _a.synapses) !== null && _b !== void 0 ? _b : this.synapses;
364
+ return painter;
365
+ }
366
+ initOffscreen(context, data, view) {
367
+ view.offscreen = new OffscreenPainter(context);
368
+ view.offscreen.data = data;
369
+ context.inputs.pointer.eventHover.addListener((evt) => {
370
+ var _a, _b, _c;
371
+ const { data } = this;
372
+ const { painter } = view;
373
+ if (!painter || !data)
374
+ return;
375
+ const { x, y } = evt.current;
376
+ const item = (_b = (_a = view.offscreen) === null || _a === void 0 ? void 0 : _a.getItemAt(x, y)) !== null && _b !== void 0 ? _b : null;
377
+ painter.highlight(null);
378
+ let offset = 0;
379
+ if (item) {
380
+ const segment = this.segments.get(item.index);
381
+ painter.highlight(segment);
382
+ offset = computeSectionOffset(data.structure, item, context.camera, x, y);
383
+ }
384
+ else {
385
+ painter.highlight(null);
386
+ }
387
+ this.hoverItem = { x, y, offset, item: item !== null && item !== void 0 ? item : null };
388
+ (_c = this.context) === null || _c === void 0 ? void 0 : _c.paint();
389
+ this.eventHintVisible.dispatch(true);
390
+ });
391
+ context.inputs.pointer.eventTap.addListener((evt) => {
392
+ var _a, _b;
393
+ if (this.disableElectrodes) {
394
+ console.debug('<MorphoViewerSimul disableElectode="true" /> So the click is disabled.');
395
+ return;
396
+ }
397
+ if (!this.clickable) {
398
+ console.debug("<MorphoViewerSimul /> eventForbiddenClick.dispatch()");
399
+ this.eventForbiddenClick.dispatch();
400
+ return;
401
+ }
402
+ const dx = (evt.x - evt.start.x) * context.width * 0.5;
403
+ const dy = (evt.y - evt.start.y) * context.height * 0.5;
404
+ const dist = Math.sqrt(dx * dx + dy * dy);
405
+ if (dist > 10)
406
+ return;
407
+ const { data } = this;
408
+ if (!data)
409
+ return;
410
+ const { x, y } = evt;
411
+ const item = (_b = (_a = view.offscreen) === null || _a === void 0 ? void 0 : _a.getItemAt(x, y)) !== null && _b !== void 0 ? _b : null;
412
+ if (item) {
413
+ const offset = computeSectionOffset(data.structure, item, view.context.camera, x, y);
414
+ this.hoverItem = { x, y, offset, item: item !== null && item !== void 0 ? item : null };
415
+ this.eventTap.dispatch({
416
+ x,
417
+ y,
418
+ item: this.hoverItem.item,
419
+ offset,
420
+ });
421
+ this.eventHintVisible.dispatch(false);
422
+ }
423
+ });
424
+ }
425
+ initCameraController(context, minZoom, maxZoom) {
426
+ if (this.cameraController)
427
+ this.cameraController.detach();
428
+ const cameraController = new TgdControllerCameraOrbit(context, {
429
+ inertiaOrbit: 1000,
430
+ inertiaZoom: 250,
431
+ minZoom,
432
+ maxZoom,
433
+ speedZoom: 1,
434
+ onZoomRequest: ({ zoom }) => {
435
+ this.eventZoom.dispatch(this.toNormalizedZoom(zoom));
436
+ return true;
437
+ },
438
+ });
439
+ this.cameraController = cameraController;
440
+ cameraController.eventChange.addListener(() => {
441
+ this.lastCameraChangeTimestamp = Date.now();
442
+ this.eventRestingPosition.dispatch(false);
443
+ });
444
+ }
445
+ get segments() {
446
+ const { data } = this;
447
+ if (!data)
448
+ return EMPTY_SEGMENTS;
449
+ if (this.mode === "3d")
450
+ return data.segments3D;
451
+ else
452
+ return data.segmentsDendrogram;
453
+ }
454
+ toNormalizedZoom(controllerZoom) {
455
+ const { cameraController } = this;
456
+ if (!cameraController)
457
+ return 0;
458
+ const { minZoom, maxZoom } = cameraController;
459
+ if (controllerZoom < 1) {
460
+ return tgdCalcMapRange(controllerZoom, 1, minZoom, 0, -1, true);
461
+ }
462
+ return tgdCalcMapRange(controllerZoom, 1, maxZoom, 0, +1, true);
463
+ }
464
+ toControllerZoom(normalizedZoom) {
465
+ const { cameraController } = this;
466
+ if (!cameraController)
467
+ return 1;
468
+ const { minZoom, maxZoom } = cameraController;
469
+ if (normalizedZoom < 0) {
470
+ return tgdCalcMapRange(normalizedZoom, 0, -1, 1, minZoom, true);
471
+ }
472
+ return tgdCalcMapRange(normalizedZoom, 0, +1, 1, maxZoom, true);
473
+ }
474
+ }
475
+ PainterManager.id = 0;
476
+ export function useWebglNeuronSelector({ morphology, spikes, spikeProgress, onSpikeProgressChange, spikePlaying, onSpikePlayingChange, minRadius, synapses, onReady, verbose = false, }) {
477
+ const refPainter = React.useRef(null);
478
+ if (!refPainter.current) {
479
+ const manager = new PainterManager(onReady);
480
+ refPainter.current = manager;
481
+ manager.morphology = morphology;
482
+ manager.spikes = spikes !== null && spikes !== void 0 ? spikes : [];
483
+ manager.showSynapses(synapses !== null && synapses !== void 0 ? synapses : []);
484
+ }
485
+ React.useEffect(() => {
486
+ if (refPainter.current) {
487
+ refPainter.current.verbose = verbose;
488
+ }
489
+ }, [verbose]);
490
+ React.useEffect(() => {
491
+ if (refPainter.current) {
492
+ refPainter.current.spikes = spikes !== null && spikes !== void 0 ? spikes : [];
493
+ }
494
+ }, [spikes]);
495
+ React.useEffect(() => {
496
+ const manager = refPainter.current;
497
+ if (!manager || typeof spikeProgress !== "number")
498
+ return;
499
+ manager.spikeProgress = spikeProgress;
500
+ }, [spikeProgress]);
501
+ React.useEffect(() => {
502
+ const manager = refPainter.current;
503
+ if (!manager || !onSpikeProgressChange)
504
+ return;
505
+ manager.eventSpikeProgressChange.addListener(onSpikeProgressChange);
506
+ return () => manager.eventSpikeProgressChange.removeListener(onSpikeProgressChange);
507
+ }, [onSpikeProgressChange]);
508
+ React.useEffect(() => {
509
+ const manager = refPainter.current;
510
+ if (!manager)
511
+ return;
512
+ manager.spikePlaying = spikePlaying !== null && spikePlaying !== void 0 ? spikePlaying : false;
513
+ }, [spikePlaying]);
514
+ React.useEffect(() => {
515
+ const manager = refPainter.current;
516
+ if (!manager || !onSpikePlayingChange)
517
+ return;
518
+ manager.eventSpikePlayingChange.addListener(onSpikePlayingChange);
519
+ return () => manager.eventSpikePlayingChange.removeListener(onSpikePlayingChange);
520
+ }, [onSpikePlayingChange]);
521
+ React.useEffect(() => {
522
+ var _a;
523
+ (_a = refPainter.current) === null || _a === void 0 ? void 0 : _a.showSynapses(synapses !== null && synapses !== void 0 ? synapses : []);
524
+ }, [synapses]);
525
+ React.useEffect(() => {
526
+ if (refPainter.current) {
527
+ refPainter.current.morphology = morphology;
528
+ }
529
+ }, [morphology]);
530
+ React.useEffect(() => {
531
+ if (refPainter.current) {
532
+ refPainter.current.minRadius = minRadius !== null && minRadius !== void 0 ? minRadius : 2;
533
+ }
534
+ }, [minRadius]);
535
+ React.useEffect(() => {
536
+ return () => {
537
+ const painterManager = refPainter.current;
538
+ if (!painterManager)
539
+ return;
540
+ painterManager.delete();
541
+ };
542
+ }, []);
543
+ return refPainter.current;
544
+ }
545
+ export function usePainterController(props) {
546
+ const { painterManager: painter, synapses, disableClick, backgroundColor } = props;
547
+ React.useEffect(() => {
548
+ const action = () => {
549
+ painter.eventError.dispatch("You cannot add recordings nor move injection while a simulation is running!");
550
+ };
551
+ painter.eventForbiddenClick.addListener(action);
552
+ return () => painter.eventForbiddenClick.removeListener(action);
553
+ }, [painter]);
554
+ React.useEffect(() => {
555
+ if (painter) {
556
+ painter.clickable = disableClick !== true;
557
+ }
558
+ }, [disableClick, painter]);
559
+ React.useEffect(() => {
560
+ painter.showSynapses(synapses !== null && synapses !== void 0 ? synapses : []);
561
+ }, [synapses, painter]);
562
+ React.useEffect(() => {
563
+ painter.backgroundColor = backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : "#000000";
564
+ }, [backgroundColor, painter]);
565
+ }
566
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc2ltdWwvcGFpbnRlci9tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQztBQUliLE9BQU8sRUFFTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixRQUFRLEVBQ1IsT0FBTyxFQUVQLE9BQU8sRUFDUCxlQUFlLEdBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFVeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFTakQsTUFBTSxjQUFjLEdBQWtELElBQUksR0FBRyxFQUcxRSxDQUFDO0FBRUosTUFBTSxPQUFPLGNBQWUsU0FBUSxXQUFXO0lBNkQ3QyxZQUFtQixPQUEyRDtRQUM1RSxLQUFLLEVBQUUsQ0FBQztRQURTLFlBQU8sR0FBUCxPQUFPLENBQW9EO1FBMUR2RSxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2Qsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLE9BQUUsR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDekIsNkJBQXdCLEdBQUcsSUFBSSxR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
@@ -0,0 +1,4 @@
1
+ import { type TgdCamera } from "@tolokoban/tgd";
2
+ import type { Structure, StructureItem } from "./structure";
3
+ export declare function computeSectionOffset(structure: Structure, item: StructureItem, camera: TgdCamera, xScreen: number, yScreen: number): number;
4
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-simul/painter/math.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA2C,MAAM,gBAAgB,CAAC;AAEzF,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,UAehB"}
@@ -0,0 +1,33 @@
1
+ import { TgdMat4, TgdVec2, TgdVec4, tgdCalcClamp } from "@tolokoban/tgd";
2
+ export function computeSectionOffset(structure, item, camera, xScreen, yScreen) {
3
+ const offsetSegment = computeSegmentOffset(item, camera, xScreen, yScreen);
4
+ const segments = structure.getSegmentsOfSection(item.sectionName);
5
+ let distance = 0;
6
+ let totalDistance = 0;
7
+ for (const segment of segments) {
8
+ totalDistance += segment.segmentLength;
9
+ if (segment.segmentIndex === item.segmentIndex) {
10
+ distance += segment.segmentLength * offsetSegment;
11
+ }
12
+ else if (segment.segmentIndex < item.segmentIndex) {
13
+ distance += segment.segmentLength;
14
+ }
15
+ }
16
+ return totalDistance > 0 ? distance / totalDistance : 0;
17
+ }
18
+ function computeSegmentOffset(item, camera, xScreen, yScreen) {
19
+ const start = new TgdVec4(...item.start, 1);
20
+ const end = new TgdVec4(...item.end, 1);
21
+ const matrix = new TgdMat4(camera.matrixProjection).multiply(camera.matrixModelView);
22
+ start.applyMatrix(matrix);
23
+ start.scale(1 / start.w);
24
+ end.applyMatrix(matrix);
25
+ end.scale(1 / end.w);
26
+ const vecU = new TgdVec2(end.x - start.x, end.y - start.y);
27
+ const length = vecU.size;
28
+ vecU.normalize();
29
+ const vecV = new TgdVec2(xScreen - start.x, yScreen - start.y);
30
+ const distance = vecU.dot(vecV);
31
+ return tgdCalcClamp(length > 0 ? distance / length : 0, 0, 1);
32
+ }
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc2ltdWwvcGFpbnRlci9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJekYsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxTQUFvQixFQUNwQixJQUFtQixFQUNuQixNQUFpQixFQUNqQixPQUFlLEVBQ2YsT0FBZTtJQUVmLE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztJQUN0QixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLGFBQWEsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ3ZDLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsUUFBUSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3BELENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BELFFBQVEsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLElBQW1CLEVBQ25CLE1BQWlCLEVBQ2pCLE9BQWUsRUFDZixPQUFlO0lBRWYsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JGLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNqQixNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRSxDQUFDIn0=