@maniclang/workbench 0.1.11

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 (644) hide show
  1. package/CONTRIBUTING.md +40 -0
  2. package/README.md +155 -0
  3. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/dist/client/assets/abap-CRCWOmpq.js +1 -0
  63. package/dist/client/assets/apex-DnsZk_dE.js +1 -0
  64. package/dist/client/assets/azcli-1IWB1ccx.js +1 -0
  65. package/dist/client/assets/bat-DPkNLes8.js +1 -0
  66. package/dist/client/assets/bicep-Corcdgou.js +2 -0
  67. package/dist/client/assets/cameligo-CGrWLZr3.js +1 -0
  68. package/dist/client/assets/clojure-D9WOWImG.js +1 -0
  69. package/dist/client/assets/codicon-CgENjH2v.ttf +0 -0
  70. package/dist/client/assets/coffee-B7EJu28W.js +1 -0
  71. package/dist/client/assets/cpp-SEyurbux.js +1 -0
  72. package/dist/client/assets/csharp-BoL64M5l.js +1 -0
  73. package/dist/client/assets/csp-C46ZqvIl.js +1 -0
  74. package/dist/client/assets/css-DQU6DXDx.js +3 -0
  75. package/dist/client/assets/cssMode-CtRONlr8.js +4 -0
  76. package/dist/client/assets/cypher-D84EuPTj.js +1 -0
  77. package/dist/client/assets/dart-D8lhlL1r.js +1 -0
  78. package/dist/client/assets/dockerfile-DLk6rpji.js +1 -0
  79. package/dist/client/assets/ecl-BO6FnfXk.js +1 -0
  80. package/dist/client/assets/editor.worker-CZyr7Ur9.js +26 -0
  81. package/dist/client/assets/elixir-BRjLKONM.js +1 -0
  82. package/dist/client/assets/flow9-Cac8vKd7.js +1 -0
  83. package/dist/client/assets/freemarker2-BTSNJUl8.js +3 -0
  84. package/dist/client/assets/fsharp-fd1GTHhf.js +1 -0
  85. package/dist/client/assets/go-O9LJTZXk.js +1 -0
  86. package/dist/client/assets/graphql-LQdxqEYJ.js +1 -0
  87. package/dist/client/assets/handlebars-qkUBjVg6.js +1 -0
  88. package/dist/client/assets/hcl-DxDQ3s82.js +1 -0
  89. package/dist/client/assets/html-pguqE00h.js +1 -0
  90. package/dist/client/assets/htmlMode-BCCLuk2F.js +4 -0
  91. package/dist/client/assets/index-BFrMLHHu.css +1 -0
  92. package/dist/client/assets/index-CdBC-xgi.js +1250 -0
  93. package/dist/client/assets/ini-BvajGCUy.js +1 -0
  94. package/dist/client/assets/java-SYsfObOQ.js +1 -0
  95. package/dist/client/assets/javascript-ciDUXdez.js +1 -0
  96. package/dist/client/assets/jsonMode-BmkXC0tI.js +10 -0
  97. package/dist/client/assets/julia-DQXNmw_w.js +1 -0
  98. package/dist/client/assets/kotlin-qQ0MG-9I.js +1 -0
  99. package/dist/client/assets/less-GGFNNJHn.js +2 -0
  100. package/dist/client/assets/lexon-Canl7DCW.js +1 -0
  101. package/dist/client/assets/liquid-CwE4UIwf.js +1 -0
  102. package/dist/client/assets/lua-D28Ae8-K.js +1 -0
  103. package/dist/client/assets/m3-DPitgjJI.js +1 -0
  104. package/dist/client/assets/markdown-B811l8j2.js +1 -0
  105. package/dist/client/assets/mdx-K_9Emnjy.js +1 -0
  106. package/dist/client/assets/mips-CdjsipkG.js +1 -0
  107. package/dist/client/assets/msdax-CYqgjx_P.js +1 -0
  108. package/dist/client/assets/mysql-BHd6q0vd.js +1 -0
  109. package/dist/client/assets/objective-c-B1aVtJYH.js +1 -0
  110. package/dist/client/assets/pascal-BhNW15KB.js +1 -0
  111. package/dist/client/assets/pascaligo-5jv8CcQD.js +1 -0
  112. package/dist/client/assets/perl-DlYyT36c.js +1 -0
  113. package/dist/client/assets/pgsql-Dy0bjov7.js +1 -0
  114. package/dist/client/assets/php-120yhfDK.js +1 -0
  115. package/dist/client/assets/pla-CjnFlu4u.js +1 -0
  116. package/dist/client/assets/postiats-CQpG440k.js +1 -0
  117. package/dist/client/assets/powerquery-DdJtto1Z.js +1 -0
  118. package/dist/client/assets/powershell-Bu_VLpJB.js +1 -0
  119. package/dist/client/assets/protobuf-IBS6jZEB.js +2 -0
  120. package/dist/client/assets/pug-kFxLfcjb.js +1 -0
  121. package/dist/client/assets/python-BzIc0EVe.js +1 -0
  122. package/dist/client/assets/qsharp-q7JyzKFN.js +1 -0
  123. package/dist/client/assets/r-BIFz-_sK.js +1 -0
  124. package/dist/client/assets/razor-lXZl6dtu.js +1 -0
  125. package/dist/client/assets/redis-CHOsPHWR.js +1 -0
  126. package/dist/client/assets/redshift-CBifECDb.js +1 -0
  127. package/dist/client/assets/restructuredtext-CghPJEOS.js +1 -0
  128. package/dist/client/assets/ruby-CYWGW-b1.js +1 -0
  129. package/dist/client/assets/rust-DMDD0SHb.js +1 -0
  130. package/dist/client/assets/sb-BYAiYHFx.js +1 -0
  131. package/dist/client/assets/scala-Bqvq8jcR.js +1 -0
  132. package/dist/client/assets/scheme-Dhb-2j9p.js +1 -0
  133. package/dist/client/assets/scss-CTwUZ5N7.js +3 -0
  134. package/dist/client/assets/shell-CsDZo4DB.js +1 -0
  135. package/dist/client/assets/solidity-CME5AdoB.js +1 -0
  136. package/dist/client/assets/sophia-RYC1BQQz.js +1 -0
  137. package/dist/client/assets/sparql-KEyrF7De.js +1 -0
  138. package/dist/client/assets/sql-BdTr02Mf.js +1 -0
  139. package/dist/client/assets/st-C7iG7M4S.js +1 -0
  140. package/dist/client/assets/swift-D7IUmUK8.js +1 -0
  141. package/dist/client/assets/systemverilog-DgMryOEJ.js +1 -0
  142. package/dist/client/assets/tcl-PloMZuKG.js +1 -0
  143. package/dist/client/assets/tsMode-BAXmgo_t.js +11 -0
  144. package/dist/client/assets/twig-BfRIq3la.js +1 -0
  145. package/dist/client/assets/typescript-Cdf8nS1n.js +1 -0
  146. package/dist/client/assets/typespec-CzxlYoT_.js +1 -0
  147. package/dist/client/assets/vb-BwAE3J76.js +1 -0
  148. package/dist/client/assets/wgsl-B_1kOXbF.js +298 -0
  149. package/dist/client/assets/xml-DGyPgYnj.js +1 -0
  150. package/dist/client/assets/yaml-Dqv3HtbL.js +1 -0
  151. package/dist/client/index.html +14 -0
  152. package/dist/client/manic-logo.png +0 -0
  153. package/dist/client/wasm/manic_lang.d.ts +74 -0
  154. package/dist/client/wasm/manic_lang.js +302 -0
  155. package/dist/client/wasm/manic_lang_bg.wasm +0 -0
  156. package/dist/client/wasm/manic_lang_bg.wasm.d.ts +13 -0
  157. package/dist/server/agentProtocol.d.ts +131 -0
  158. package/dist/server/agentProtocol.js +21 -0
  159. package/dist/server/agentProtocol.js.map +1 -0
  160. package/dist/server/agentRuns.d.ts +46 -0
  161. package/dist/server/agentRuns.js +138 -0
  162. package/dist/server/agentRuns.js.map +1 -0
  163. package/dist/server/agentThreads.d.ts +20 -0
  164. package/dist/server/agentThreads.js +205 -0
  165. package/dist/server/agentThreads.js.map +1 -0
  166. package/dist/server/aiSecrets.d.ts +21 -0
  167. package/dist/server/aiSecrets.js +68 -0
  168. package/dist/server/aiSecrets.js.map +1 -0
  169. package/dist/server/app.d.ts +34 -0
  170. package/dist/server/app.js +804 -0
  171. package/dist/server/app.js.map +1 -0
  172. package/dist/server/assets.d.ts +34 -0
  173. package/dist/server/assets.js +659 -0
  174. package/dist/server/assets.js.map +1 -0
  175. package/dist/server/candidateFix.d.ts +28 -0
  176. package/dist/server/candidateFix.js +111 -0
  177. package/dist/server/candidateFix.js.map +1 -0
  178. package/dist/server/cli.d.ts +2 -0
  179. package/dist/server/cli.js +118 -0
  180. package/dist/server/cli.js.map +1 -0
  181. package/dist/server/diagnostics.d.ts +13 -0
  182. package/dist/server/diagnostics.js +73 -0
  183. package/dist/server/diagnostics.js.map +1 -0
  184. package/dist/server/engineCheck.d.ts +7 -0
  185. package/dist/server/engineCheck.js +60 -0
  186. package/dist/server/engineCheck.js.map +1 -0
  187. package/dist/server/engineInstall.d.ts +34 -0
  188. package/dist/server/engineInstall.js +228 -0
  189. package/dist/server/engineInstall.js.map +1 -0
  190. package/dist/server/enginePaths.d.ts +3 -0
  191. package/dist/server/enginePaths.js +76 -0
  192. package/dist/server/enginePaths.js.map +1 -0
  193. package/dist/server/folderPicker.d.ts +1 -0
  194. package/dist/server/folderPicker.js +54 -0
  195. package/dist/server/folderPicker.js.map +1 -0
  196. package/dist/server/manicAgent.d.ts +75 -0
  197. package/dist/server/manicAgent.js +476 -0
  198. package/dist/server/manicAgent.js.map +1 -0
  199. package/dist/server/manicEnv.d.ts +18 -0
  200. package/dist/server/manicEnv.js +64 -0
  201. package/dist/server/manicEnv.js.map +1 -0
  202. package/dist/server/promptStore.d.ts +11 -0
  203. package/dist/server/promptStore.js +85 -0
  204. package/dist/server/promptStore.js.map +1 -0
  205. package/dist/server/renderJobs.d.ts +54 -0
  206. package/dist/server/renderJobs.js +290 -0
  207. package/dist/server/renderJobs.js.map +1 -0
  208. package/dist/server/settings.d.ts +40 -0
  209. package/dist/server/settings.js +262 -0
  210. package/dist/server/settings.js.map +1 -0
  211. package/dist/server/smartDraw.d.ts +7 -0
  212. package/dist/server/smartDraw.js +88 -0
  213. package/dist/server/smartDraw.js.map +1 -0
  214. package/dist/server/workspace.d.ts +27 -0
  215. package/dist/server/workspace.js +172 -0
  216. package/dist/server/workspace.js.map +1 -0
  217. package/examples/.manic-output/40b6f3b9-7638-4c0e-bb4f-570d45d1b225/job.json +26 -0
  218. package/examples/.manic-output/993f3788-f75e-445c-ba45-c401907b3c02/job.json +26 -0
  219. package/examples/.manic-output/993f3788-f75e-445c-ba45-c401907b3c02/markers.json +13 -0
  220. package/examples/.manic-output/993f3788-f75e-445c-ba45-c401907b3c02/out.mp4 +0 -0
  221. package/examples/.manic-workbench-threads/thread_3ce7448a13f64f9e887d1bc8106a97a8.json +45 -0
  222. package/examples/.manic-workbench-threads/thread_d494cda29249477591056234719e4a3a.json +21 -0
  223. package/examples/.manic-workbench-threads/thread_e98ebdc225184ea5b8ddda8b44541f63.json +29 -0
  224. package/examples/README.md +35 -0
  225. package/examples/a-story-1.manic +222 -0
  226. package/examples/a-story.manic +100 -0
  227. package/examples/achromat-cinematic.manic +105 -0
  228. package/examples/achromat.manic +32 -0
  229. package/examples/aes-decrypt.manic +359 -0
  230. package/examples/aes-encrypt.manic +359 -0
  231. package/examples/aes-round.manic +70 -0
  232. package/examples/aes-story.manic +622 -0
  233. package/examples/ai-story.manic +118 -0
  234. package/examples/analysis.manic +53 -0
  235. package/examples/archimedes_pi.manic +89 -0
  236. package/examples/area_under_curve.manic +131 -0
  237. package/examples/art-rakkan.manic +69 -0
  238. package/examples/aspheric-lens.manic +32 -0
  239. package/examples/astronomical-watch.manic +96 -0
  240. package/examples/asymptote-randomwalk3-reference.manic +58 -0
  241. package/examples/asymptote-tiling-reference.manic +65 -0
  242. package/examples/aws-clustered-web-services.manic +186 -0
  243. package/examples/aws-event-processing-clusters-poc.manic +97 -0
  244. package/examples/aws-three-tier-web-application.manic +134 -0
  245. package/examples/band.manic +43 -0
  246. package/examples/banner.manic +37 -0
  247. package/examples/bayes.manic +27 -0
  248. package/examples/bellcurve.manic +41 -0
  249. package/examples/bfs_dfs.manic +35 -0
  250. package/examples/block-tackle.manic +26 -0
  251. package/examples/bloom-scope.manic +172 -0
  252. package/examples/boolean.manic +46 -0
  253. package/examples/boxplot-wave.manic +93 -0
  254. package/examples/boxplot.manic +43 -0
  255. package/examples/brace.manic +46 -0
  256. package/examples/brachistochrone-annotated.manic +51 -0
  257. package/examples/brachistochrone.manic +27 -0
  258. package/examples/bubble_sort.manic +41 -0
  259. package/examples/bullet-block-annotated.manic +48 -0
  260. package/examples/bullet-block.manic +11 -0
  261. package/examples/bullet-impact.manic +65 -0
  262. package/examples/bungee.manic +9 -0
  263. package/examples/c4-internet-banking-components.manic +33 -0
  264. package/examples/c4-internet-banking-containers.manic +29 -0
  265. package/examples/c4-internet-banking.manic +26 -0
  266. package/examples/c4-story.manic +171 -0
  267. package/examples/c4-test.manic +52 -0
  268. package/examples/c4-zoom.manic +69 -0
  269. package/examples/calculus-demo.manic +129 -0
  270. package/examples/calculus-one.manic +288 -0
  271. package/examples/captions.manic +31 -0
  272. package/examples/car-suspension-annotated.manic +57 -0
  273. package/examples/car-suspension.manic +8 -0
  274. package/examples/cart-pendulum.manic +11 -0
  275. package/examples/charts-bar-line.manic +26 -0
  276. package/examples/charts-column-race.manic +19 -0
  277. package/examples/charts-gdp-race.manic +43 -0
  278. package/examples/charts-german-elections.manic +28 -0
  279. package/examples/charts-line-race.manic +21 -0
  280. package/examples/circle-in-three.manic +156 -0
  281. package/examples/circle-thirds-no-triangle.manic +161 -0
  282. package/examples/clip-window.manic +34 -0
  283. package/examples/cloud-feathers.manic +50 -0
  284. package/examples/cloud-jellyfish-v2.manic +87 -0
  285. package/examples/cloud-jellyfish.manic +48 -0
  286. package/examples/cloud-kaleidoscope.manic +48 -0
  287. package/examples/cloud-koi.manic +51 -0
  288. package/examples/cloud-lissajous.manic +23 -0
  289. package/examples/cloud-medusae.manic +46 -0
  290. package/examples/cloud-phoenix.manic +49 -0
  291. package/examples/cloud-plumes.manic +47 -0
  292. package/examples/cloud-pottery.manic +104 -0
  293. package/examples/cloud-shells.manic +50 -0
  294. package/examples/cloud-starfield.manic +23 -0
  295. package/examples/cloud-wave-lattice.manic +23 -0
  296. package/examples/cloud-word.manic +31 -0
  297. package/examples/cloud3-ripple.manic +53 -0
  298. package/examples/cloud3-sphere.manic +26 -0
  299. package/examples/clt.manic +35 -0
  300. package/examples/collide-blocks-annotated.manic +45 -0
  301. package/examples/collide-blocks.manic +11 -0
  302. package/examples/compare-pendulum.manic +11 -0
  303. package/examples/complex-flowchart.manic +196 -0
  304. package/examples/compound-pulley.manic +25 -0
  305. package/examples/conics.manic +46 -0
  306. package/examples/coordinates.manic +52 -0
  307. package/examples/correlation.manic +35 -0
  308. package/examples/covariance.manic +30 -0
  309. package/examples/creator-affine-fern-growth.manic +72 -0
  310. package/examples/creator-bowl-to-saddle.manic +86 -0
  311. package/examples/creator-branch-counting-tree3.manic +77 -0
  312. package/examples/creator-chaos-game-fern.manic +72 -0
  313. package/examples/creator-circle-inversion-chain.manic +61 -0
  314. package/examples/creator-convex-hull-depth.manic +59 -0
  315. package/examples/creator-coordinate-worlds.manic +182 -0
  316. package/examples/creator-ellipse-reflection-property.manic +59 -0
  317. package/examples/creator-free-kicks.manic +261 -0
  318. package/examples/creator-geometry-language-showcase.manic +259 -0
  319. package/examples/creator-geometry-morph-promo.manic +151 -0
  320. package/examples/creator-heightmap-world.manic +130 -0
  321. package/examples/creator-hilbert3-spatial-index.manic +203 -0
  322. package/examples/creator-how-rocket-launch-works.manic +192 -0
  323. package/examples/creator-implicit-surface-parameterized.manic +51 -0
  324. package/examples/creator-incenter-dissection.manic +56 -0
  325. package/examples/creator-lattice-paths.manic +118 -0
  326. package/examples/creator-line-inversion.manic +49 -0
  327. package/examples/creator-lsystem-fractal-curve.manic +121 -0
  328. package/examples/creator-mandelbrot-escape-test.manic +58 -0
  329. package/examples/creator-monty-hall.manic +104 -0
  330. package/examples/creator-noise-story.manic +123 -0
  331. package/examples/creator-one-tile-pattern-story.manic +169 -0
  332. package/examples/creator-pathfinding.manic +82 -0
  333. package/examples/creator-point-to-plane-distance.manic +167 -0
  334. package/examples/creator-race-quiz.manic +76 -0
  335. package/examples/creator-randomwalk3-diffusion.manic +72 -0
  336. package/examples/creator-reflected-ellipse.manic +48 -0
  337. package/examples/creator-rule90-sierpinski.manic +64 -0
  338. package/examples/creator-three-shadows-of-a-curve.manic +48 -0
  339. package/examples/creator-trigonometry-one-angle.manic +307 -0
  340. package/examples/creator-v2-latex-algebra.manic +29 -0
  341. package/examples/creator-v2-latex-calculus.manic +37 -0
  342. package/examples/creator-v2-latex-physics.manic +29 -0
  343. package/examples/creator-v2-olympiad-geometry.manic +92 -0
  344. package/examples/creator-v2-options-socials.manic +21 -0
  345. package/examples/creator-v2-timers.manic +25 -0
  346. package/examples/creator-v2-timing-square.manic +25 -0
  347. package/examples/creator-v2-timing.manic +34 -0
  348. package/examples/creator-v2.manic +36 -0
  349. package/examples/creator-why-rockets-use-stages.manic +198 -0
  350. package/examples/creator-wrap-real-line.manic +51 -0
  351. package/examples/cubic-graphs.manic +432 -0
  352. package/examples/curve-features.manic +41 -0
  353. package/examples/definedmotion-fourier-gallery.manic +171 -0
  354. package/examples/derivative-of-ln-x.manic +194 -0
  355. package/examples/diagonalise.manic +56 -0
  356. package/examples/dijkstra.manic +29 -0
  357. package/examples/dimensions-unfold.manic +211 -0
  358. package/examples/disc-integration.manic +172 -0
  359. package/examples/double-incline.manic +9 -0
  360. package/examples/double-integral3.manic +43 -0
  361. package/examples/double-pendulum.manic +35 -0
  362. package/examples/double-spring.manic +9 -0
  363. package/examples/drop-mass.manic +25 -0
  364. package/examples/eigen3.manic +34 -0
  365. package/examples/equal_cuts.manic +44 -0
  366. package/examples/equation.manic +16 -0
  367. package/examples/equilateral.manic +57 -0
  368. package/examples/euler_line.manic +51 -0
  369. package/examples/exponential-shells.manic +188 -0
  370. package/examples/extrude3.manic +37 -0
  371. package/examples/factorial-flowchart.manic +69 -0
  372. package/examples/fibonacci-sphere.manic +57 -0
  373. package/examples/flow-lorenz.manic +47 -0
  374. package/examples/fourier-series-live-wave.manic +114 -0
  375. package/examples/fourier-square-wave-live.manic +114 -0
  376. package/examples/fractal_tree.manic +39 -0
  377. package/examples/frame3-grid-policies.manic +48 -0
  378. package/examples/ftc.manic +54 -0
  379. package/examples/function_graph.manic +54 -0
  380. package/examples/galton-board-process.manic +150 -0
  381. package/examples/gcp-clustered-web-services.manic +186 -0
  382. package/examples/gcp-message-collecting.manic +139 -0
  383. package/examples/geo-pythagoras-short.manic +119 -0
  384. package/examples/glsl-boxgrid.manic +105 -0
  385. package/examples/glsl-parameter.manic +30 -0
  386. package/examples/glsl-raymarch.manic +59 -0
  387. package/examples/glsl-shapes.manic +122 -0
  388. package/examples/gradient-descent-field.manic +116 -0
  389. package/examples/gradient-fastest-descent-shorts.manic +153 -0
  390. package/examples/gradient-fastest-descent.manic +125 -0
  391. package/examples/gradient-pendulum-shorts.manic +117 -0
  392. package/examples/gradient.manic +74 -0
  393. package/examples/graph.manic +45 -0
  394. package/examples/graph_moving.manic +67 -0
  395. package/examples/grid-astar.manic +15 -0
  396. package/examples/grid-life-soup.manic +31 -0
  397. package/examples/grid-life-zoo.manic +46 -0
  398. package/examples/grid-life.manic +19 -0
  399. package/examples/grid-wfc.manic +13 -0
  400. package/examples/growing-fractal-tree3.manic +58 -0
  401. package/examples/gun-shot.manic +82 -0
  402. package/examples/hashmap.manic +38 -0
  403. package/examples/heightmap3-world.manic +64 -0
  404. package/examples/heightmap3.manic +23 -0
  405. package/examples/hilbert-curve3-space-filling.manic +117 -0
  406. package/examples/hill_run.manic +71 -0
  407. package/examples/histogram.manic +43 -0
  408. package/examples/hotdog-taco.manic +147 -0
  409. package/examples/hue_wave.manic +35 -0
  410. package/examples/hypothesis.manic +32 -0
  411. package/examples/image.manic +29 -0
  412. package/examples/incircle_tangents.manic +64 -0
  413. package/examples/incline-bumper.manic +11 -0
  414. package/examples/incline-pulley.manic +11 -0
  415. package/examples/incline-showcase.manic +55 -0
  416. package/examples/inline-math.manic +16 -0
  417. package/examples/inscribed-angle-short.manic +56 -0
  418. package/examples/integral-sqrt-tanx.manic +255 -0
  419. package/examples/integrals.manic +274 -0
  420. package/examples/inverse-derivatives.manic +94 -0
  421. package/examples/k8s-cluster-components.manic +82 -0
  422. package/examples/k8s-stateful-architecture.manic +134 -0
  423. package/examples/k8s-three-tier.manic +146 -0
  424. package/examples/kapitza.manic +11 -0
  425. package/examples/latex-disintegration.manic +123 -0
  426. package/examples/lens-paper.manic +36 -0
  427. package/examples/lens-prescription.manic +33 -0
  428. package/examples/lens-system.manic +34 -0
  429. package/examples/lens.manic +31 -0
  430. package/examples/limit-infinity.manic +30 -0
  431. package/examples/limit.manic +33 -0
  432. package/examples/linear-algebra-3d.manic +50 -0
  433. package/examples/linear-algebra.manic +115 -0
  434. package/examples/linear-map.manic +39 -0
  435. package/examples/linear-map3.manic +33 -0
  436. package/examples/linear-system.manic +99 -0
  437. package/examples/linear_transform.manic +43 -0
  438. package/examples/linked_list.manic +38 -0
  439. package/examples/lln.manic +31 -0
  440. package/examples/loop-cinematic.manic +41 -0
  441. package/examples/loop-track.manic +11 -0
  442. package/examples/lorenz-attractor.manic +55 -0
  443. package/examples/lorenz-shells.manic +43 -0
  444. package/examples/lost-in-patterns.manic +149 -0
  445. package/examples/lsystem-asymptote-curves.manic +81 -0
  446. package/examples/manic-ml-activation-focus.manic +133 -0
  447. package/examples/manic-ml-cnn-edge-story.manic +102 -0
  448. package/examples/manic-ml-forward-pass.manic +93 -0
  449. package/examples/manic-ml-learning-step.manic +116 -0
  450. package/examples/manic-ml-logits-sampling.manic +112 -0
  451. package/examples/manic-ml-scalar-to-tensor.manic +143 -0
  452. package/examples/manic-ml-token-embedding.manic +110 -0
  453. package/examples/manic-ml-transformer-attention.manic +102 -0
  454. package/examples/manic-ml-transformer-block.manic +116 -0
  455. package/examples/manic-promo.manic +64 -0
  456. package/examples/map-attractor.manic +45 -0
  457. package/examples/mask-lens.manic +33 -0
  458. package/examples/matrix.manic +37 -0
  459. package/examples/matrix3.manic +101 -0
  460. package/examples/matrix_addition.manic +66 -0
  461. package/examples/matrix_addition_plane.manic +91 -0
  462. package/examples/maxwell-boltzmann-effusion-v2.manic +142 -0
  463. package/examples/maxwell-boltzmann-process.manic +86 -0
  464. package/examples/microservices-platform.manic +140 -0
  465. package/examples/molecule.manic +8 -0
  466. package/examples/morph-icons.manic +29 -0
  467. package/examples/morph.manic +29 -0
  468. package/examples/morph3.manic +49 -0
  469. package/examples/motion-flow-foundation.manic +148 -0
  470. package/examples/motion-graphics-v2-story.manic +189 -0
  471. package/examples/motion-graphics-v2.manic +81 -0
  472. package/examples/motion-graphics.manic +81 -0
  473. package/examples/multivariable3.manic +26 -0
  474. package/examples/mystory.manic +9 -0
  475. package/examples/newton.manic +39 -0
  476. package/examples/newtons-cradle.manic +10 -0
  477. package/examples/nine_point.manic +59 -0
  478. package/examples/noise-terrain.manic +16 -0
  479. package/examples/off-axis.manic +32 -0
  480. package/examples/onprem-advanced-web-service-v2.manic +196 -0
  481. package/examples/onprem-advanced-web-service.manic +175 -0
  482. package/examples/orthocenter.manic +63 -0
  483. package/examples/param3.manic +43 -0
  484. package/examples/parameter-journeys.manic +154 -0
  485. package/examples/parameterized-field-advection.manic +57 -0
  486. package/examples/parameterized-generated-families3.manic +83 -0
  487. package/examples/particles-flow.manic +61 -0
  488. package/examples/pascal-triangle.manic +92 -0
  489. package/examples/pendulum-annotated.manic +72 -0
  490. package/examples/pendulum-damped.manic +35 -0
  491. package/examples/pendulum.manic +38 -0
  492. package/examples/perfect-reel.manic +43 -0
  493. package/examples/pie.manic +41 -0
  494. package/examples/pieday.manic +113 -0
  495. package/examples/piston.manic +7 -0
  496. package/examples/popkorn-field.manic +38 -0
  497. package/examples/prism-cinematic.manic +36 -0
  498. package/examples/prism.manic +32 -0
  499. package/examples/probability.manic +57 -0
  500. package/examples/process-branching-dispatch.manic +71 -0
  501. package/examples/process-stream-observe.manic +54 -0
  502. package/examples/projection.manic +57 -0
  503. package/examples/prompt-test-10.manic +257 -0
  504. package/examples/prompt-test-11.manic +168 -0
  505. package/examples/prompt-test-12.manic +177 -0
  506. package/examples/prompt-test-13.manic +228 -0
  507. package/examples/prompt-test-14.manic +319 -0
  508. package/examples/prompt-test-15.manic +325 -0
  509. package/examples/prompt-test-16.manic +252 -0
  510. package/examples/prompt-test-2.manic +239 -0
  511. package/examples/prompt-test-3.manic +336 -0
  512. package/examples/prompt-test-4.manic +195 -0
  513. package/examples/prompt-test-5.manic +223 -0
  514. package/examples/prompt-test-6.manic +222 -0
  515. package/examples/prompt-test-7.manic +156 -0
  516. package/examples/prompt-test-8.manic +266 -0
  517. package/examples/prompt-test-9.manic +171 -0
  518. package/examples/prompt-test.manic +158 -0
  519. package/examples/pulley-annotated.manic +54 -0
  520. package/examples/pulley-paper.manic +52 -0
  521. package/examples/pulley-scale.manic +23 -0
  522. package/examples/pulley.manic +24 -0
  523. package/examples/quadratic-formula-continuity.manic +110 -0
  524. package/examples/quiz-euler.manic +52 -0
  525. package/examples/quiz-geometry-2.manic +107 -0
  526. package/examples/quiz-geometry.manic +108 -0
  527. package/examples/quiz-skins.manic +22 -0
  528. package/examples/raft-cm.manic +24 -0
  529. package/examples/ramp.manic +25 -0
  530. package/examples/ray-fan.manic +27 -0
  531. package/examples/raymarch-alpha.manic +39 -0
  532. package/examples/raymarch-boxgrid.manic +47 -0
  533. package/examples/raymarch-docker-latency.manic +74 -0
  534. package/examples/raymarch-metaballs.manic +37 -0
  535. package/examples/raymarch-sculpture.manic +39 -0
  536. package/examples/raymarch-shapes3.manic +31 -0
  537. package/examples/reactive-integral.manic +172 -0
  538. package/examples/reactive-math-journey.manic +185 -0
  539. package/examples/reactive-math-notation.manic +150 -0
  540. package/examples/reactive-multiformat.manic +130 -0
  541. package/examples/reactive-world.manic +111 -0
  542. package/examples/refraction-paper.manic +40 -0
  543. package/examples/refraction.manic +32 -0
  544. package/examples/resonance.manic +10 -0
  545. package/examples/rewrite-exponential-cubic.manic +141 -0
  546. package/examples/rewrite-integration.manic +199 -0
  547. package/examples/riemann_rainbow.manic +61 -0
  548. package/examples/riemann_readout.manic +61 -0
  549. package/examples/robot-arm.manic +25 -0
  550. package/examples/rref.manic +48 -0
  551. package/examples/second-law-thermodynamics.manic +385 -0
  552. package/examples/series-parallel-springs.manic +8 -0
  553. package/examples/serverless-processing.manic +145 -0
  554. package/examples/shader-cellular.manic +35 -0
  555. package/examples/shader-fractal.manic +45 -0
  556. package/examples/shader-fx.manic +34 -0
  557. package/examples/shader-glitch-grid.manic +55 -0
  558. package/examples/shader-parameter.manic +25 -0
  559. package/examples/shader-patterns.manic +37 -0
  560. package/examples/shader-plasma.manic +43 -0
  561. package/examples/shader-shapes-dsl.manic +46 -0
  562. package/examples/shader-shapes.manic +37 -0
  563. package/examples/shader-warp.manic +22 -0
  564. package/examples/shapes-howto.manic +411 -0
  565. package/examples/sine_wave.manic +42 -0
  566. package/examples/skew.manic +40 -0
  567. package/examples/smoke.rs +57 -0
  568. package/examples/solids3.manic +22 -0
  569. package/examples/some-story.manic +299 -0
  570. package/examples/spinning-cylinder-flow.manic +87 -0
  571. package/examples/spline.manic +21 -0
  572. package/examples/spot-diagram.manic +32 -0
  573. package/examples/spring-annotated.manic +60 -0
  574. package/examples/spring-chain.manic +11 -0
  575. package/examples/spring-damped.manic +33 -0
  576. package/examples/spring-incline.manic +10 -0
  577. package/examples/spring-paper.manic +46 -0
  578. package/examples/spring-pendulum.manic +14 -0
  579. package/examples/spring.manic +33 -0
  580. package/examples/sqrt-tanx.manic +217 -0
  581. package/examples/ssl-handshake-sdf.manic +116 -0
  582. package/examples/stack_queue.manic +53 -0
  583. package/examples/statistics.manic +60 -0
  584. package/examples/story-addressable-asset-cues.manic +71 -0
  585. package/examples/story-dependent-chain-history.manic +56 -0
  586. package/examples/story-living-dependency-cloud.manic +50 -0
  587. package/examples/story-time-varying-field3.manic +57 -0
  588. package/examples/story.manic +4 -0
  589. package/examples/string-art-breath.manic +70 -0
  590. package/examples/string-wave.manic +10 -0
  591. package/examples/summary.manic +48 -0
  592. package/examples/svg-howto.manic +172 -0
  593. package/examples/svg-import.manic +18 -0
  594. package/examples/systems-architecture-poc.manic +92 -0
  595. package/examples/systems-arrow-patterns.manic +151 -0
  596. package/examples/systems-foundation.manic +71 -0
  597. package/examples/systems-rabbitmq-consumers.manic +118 -0
  598. package/examples/table.manic +39 -0
  599. package/examples/table_braces.manic +54 -0
  600. package/examples/tangent-length-short.manic +57 -0
  601. package/examples/tangent.manic +29 -0
  602. package/examples/tangents.manic +54 -0
  603. package/examples/taylor.manic +44 -0
  604. package/examples/terminal_boot.manic +40 -0
  605. package/examples/test.manic +61 -0
  606. package/examples/text-guide.manic +304 -0
  607. package/examples/textbook-coordinate-worlds.manic +129 -0
  608. package/examples/textbook-doubly-list.manic +33 -0
  609. package/examples/textbook-function-to-solid.manic +126 -0
  610. package/examples/textbook-geometry-dimension-reduction.manic +129 -0
  611. package/examples/textbook-incline-fbd.manic +43 -0
  612. package/examples/textbook-length-area-volume.manic +137 -0
  613. package/examples/textbook-matrix-inverses.manic +172 -0
  614. package/examples/textbook-pulley.manic +35 -0
  615. package/examples/textbook-statistical-dimensions.manic +151 -0
  616. package/examples/textbook-tension.manic +39 -0
  617. package/examples/textbook-watermelon-sections.manic +216 -0
  618. package/examples/thales-semicircle-short.manic +53 -0
  619. package/examples/three-d-v2-lab.manic +83 -0
  620. package/examples/three-d-v2-story.manic +106 -0
  621. package/examples/three-d-v2.manic +69 -0
  622. package/examples/three_d.manic +39 -0
  623. package/examples/timing-v2-scene.manic +47 -0
  624. package/examples/trajectory.manic +28 -0
  625. package/examples/transform_copy.manic +35 -0
  626. package/examples/transforms.manic +54 -0
  627. package/examples/trapped-light-dimensions.manic +226 -0
  628. package/examples/tree-of-leaves.manic +215 -0
  629. package/examples/triangle.manic +68 -0
  630. package/examples/two_person_walk.manic +296 -0
  631. package/examples/two_pointer.manic +32 -0
  632. package/examples/type-to-sdf.manic +139 -0
  633. package/examples/typewriter.manic +28 -0
  634. package/examples/vector_field.manic +32 -0
  635. package/examples/vertical-spring.manic +10 -0
  636. package/examples/volume3.manic +21 -0
  637. package/examples/volumes-solid-of-revolution.manic +111 -0
  638. package/examples/walk.manic +154 -0
  639. package/examples/wheel-duo.manic +91 -0
  640. package/examples/wheel-radial.manic +78 -0
  641. package/examples/wheel-square.manic +83 -0
  642. package/examples/wireframe-spheres.manic +37 -0
  643. package/examples/zeroth-law-thermodynamics.manic +269 -0
  644. package/package.json +59 -0
@@ -0,0 +1,26 @@
1
+ // ============================================================================
2
+ // block-tackle.manic — the compound pulley (mechanical advantage), Layer 1
3
+ // ----------------------------------------------------------------------------
4
+ // `blocktackle(id, [center], [load], [effort], [strands], [unit])` — a load on a
5
+ // movable block held by N rope strands and pulled by an effort mass. The N
6
+ // strands give a MECHANICAL ADVANTAGE of N: an effort of only load/N balances
7
+ // the load, and the effort end travels N× as far as the load rises. PRE-SIMULATED
8
+ // with RK4; `run(id,[dur])` replays it. N = 1 is just the Atwood machine.
9
+ //
10
+ // TO ADAPT: change `strands` (1–4) — more strands lift the same load with less
11
+ // effort, but the effort mass has to travel that much further.
12
+ // ============================================================================
13
+
14
+ title("Block & Tackle — a compound pulley's mechanical advantage");
15
+ canvas("16:9");
16
+
17
+ text(hdr, (cx, 40), "Block & tackle — 3 strands lift 8 kg with 3 kg of effort");
18
+ size(hdr, 22); color(hdr, cyan); bold(hdr); display(hdr);
19
+
20
+ blocktackle(bt, (500, 130), 8, 3, 3);
21
+ energygraph(bt, (1030, 330), 120);
22
+
23
+ text(cap, (cx, h - 32), "3 strands ⇒ MA = 3: effort just over load/3 lifts it; the effort end travels 3× as far");
24
+ size(cap, 15); color(cap, dim); display(cap);
25
+
26
+ run(bt, 5);
@@ -0,0 +1,172 @@
1
+ // bloom-scope — multi-pass bloom, dissected live. A "light scope" (reticle
2
+ // ring + ticks + core + three orbiting emitters + one pulsing probe) rendered
3
+ // in raw GLSL, with the bloom pipeline broken into inspectable passes:
4
+ // view 0 the crisp scene (no bloom)
5
+ // view 1 bright-pass: luminance over the threshold tau (ticks vanish!)
6
+ // view 2 the gaussian stack: N passes, radius DOUBLING each pass
7
+ // view 3 composite: scene + sum of passes (additive - base stays crisp)
8
+ // manic has no ping-pong buffers - and doesn't need them here: every emitter
9
+ // is an SDF, so each blurred pass exists in closed form exp(-d^2/sigma^2);
10
+ // the mip ladder becomes one constant-bound loop. Five UI sliders bind
11
+ // straight into the shader as u_<name> uniforms. The flicker beat: the probe
12
+ // pulses across tau - hard threshold makes its halo POP; the soft knee fixes it.
13
+ title("Bloom, One Pass at a Time");
14
+ canvas("16:9");
15
+ template("black");
16
+
17
+ // ---------- HUD ----------
18
+ text(head, (cx, 60), "Bloom, One Pass at a Time"); display(head); cursor(head);
19
+ text(cap, (cx, h - 42), ""); size(cap, 26);
20
+ text(viewlab, (300, h - 100), ""); size(viewlab, 24); color(viewlab, lime);
21
+ equation(eqb, (cx, 150), `\text{bloom} \;=\; \sum_{p=0}^{N} w_p\; G_{2^{p}\sigma}\!\big(\max(L-\tau,\,0)\big)`, 32); hidden(eqb);
22
+
23
+ // the UI: five sliders, bound into the shader as u_glo/u_rad/u_pas/u_kne/u_vew
24
+ parameter(glo, (w - 180, 140), 0, 0, 2, "intensity", 2);
25
+ parameter(rad, (w - 180, 205), 0.5, 0, 2, "radius", 2);
26
+ parameter(pas, (w - 180, 270), 0, 0, 5, "passes", 1);
27
+ parameter(kne, (w - 180, 335), 0, 0, 1, "knee", 2);
28
+ parameter(vew, (w - 180, 400), 0, 0, 3, "view", 1);
29
+ counter(cnt, (w - 185, 462), 0, 0, "active passes ", ""); color(cnt, gold); hidden(cnt);
30
+
31
+ // ---------- the shader ----------
32
+ glsl(scope, `
33
+ uniform float u_glo;
34
+ uniform float u_rad;
35
+ uniform float u_pas;
36
+ uniform float u_kne;
37
+ uniform float u_vew;
38
+
39
+ float sdRing(vec2 p, float R){ return abs(length(p) - R); }
40
+ float sdBox(vec2 p, vec2 b){ vec2 d = abs(p) - b; return length(max(d, vec2(0.0))) + min(max(d.x, d.y), 0.0); }
41
+
42
+ // bright-pass weight: hard threshold (tau = 0.55) blended toward a soft knee
43
+ float knee(float b){ return mix(step(0.55, b), smoothstep(0.25, 0.70, b), u_kne); }
44
+
45
+ // the gaussian stack: N passes, sigma doubling each pass, weights decaying -
46
+ // the closed-form mip ladder (no texture taps: d comes from the SDF)
47
+ vec3 halo(float d, vec3 cb, float w){
48
+ vec3 a = vec3(0.0);
49
+ for (int pp = 0; pp < 5; pp++) {
50
+ float on = clamp(u_pas - float(pp), 0.0, 1.0);
51
+ float s = max(0.02, u_rad * 0.05 * pow(2.0, float(pp)));
52
+ a += on * w * cb * exp(-(d*d)/(s*s)) * 0.6 / pow(1.6, float(pp));
53
+ }
54
+ return a * u_glo;
55
+ }
56
+
57
+ void mainImage(out vec4 O, in vec2 I){
58
+ vec2 p = (2.0*I - iResolution.xy)/iResolution.y;
59
+ // ---- the light scope: reticle ring + folded tick marks + core
60
+ float dRing = sdRing(p, 0.62);
61
+ vec2 q = vec2(abs(p.x), abs(p.y));
62
+ float ticks = min(sdBox(vec2(q.x - 0.62, p.y), vec2(0.055, 0.012)),
63
+ sdBox(vec2(p.x, q.y - 0.62), vec2(0.012, 0.055)));
64
+ float dCore = length(p) - 0.035;
65
+ // ---- three orbiting emitters + the pulsing probe (the flicker demo)
66
+ float a1 = 0.7*iTime;
67
+ vec2 c1 = 0.45*vec2(cos(a1), sin(a1));
68
+ vec2 c2 = 0.45*vec2(cos(a1 + 2.09), sin(a1 + 2.09));
69
+ vec2 c3 = 0.45*vec2(cos(a1 + 4.19), sin(a1 + 4.19));
70
+ float o1 = length(p - c1) - 0.050;
71
+ float o2 = length(p - c2) - 0.040;
72
+ float o3 = length(p - c3) - 0.045;
73
+ float dPr = length(p - vec2(0.0, -0.86)) - 0.055;
74
+ float bPr = 0.35 + 0.45*(0.5 + 0.5*sin(2.6*iTime));
75
+ vec3 cRing = vec3(0.30, 0.85, 1.00);
76
+ vec3 cCore = vec3(1.00, 0.95, 0.80);
77
+ vec3 cO1 = vec3(1.00, 0.72, 0.25);
78
+ vec3 cO2 = vec3(1.00, 0.35, 0.80);
79
+ vec3 cO3 = vec3(0.30, 1.00, 0.75);
80
+ vec3 cPr = vec3(0.75, 0.85, 1.00);
81
+ // ---- view 0: the crisp scene
82
+ float e = 0.006;
83
+ vec3 scene = vec3(0.0);
84
+ scene += smoothstep(e, 0.0, dRing) * cRing * 0.77;
85
+ scene += smoothstep(e, 0.0, ticks) * cRing * 0.50;
86
+ scene += smoothstep(e, 0.0, dCore) * cCore * 1.00;
87
+ scene += smoothstep(e, 0.0, o1) * cO1 * 0.95;
88
+ scene += smoothstep(e, 0.0, o2) * cO2 * 0.90;
89
+ scene += smoothstep(e, 0.0, o3) * cO3 * 0.90;
90
+ scene += smoothstep(e, 0.0, dPr) * cPr * bPr;
91
+ // ---- view 1: bright extraction (the 0.50 reticle ticks fall BELOW tau)
92
+ vec3 bright = vec3(0.0);
93
+ bright += smoothstep(e, 0.0, dRing) * cRing * knee(0.77);
94
+ bright += smoothstep(e, 0.0, dCore) * cCore * knee(1.00);
95
+ bright += smoothstep(e, 0.0, o1) * cO1 * knee(0.95);
96
+ bright += smoothstep(e, 0.0, o2) * cO2 * knee(0.90);
97
+ bright += smoothstep(e, 0.0, o3) * cO3 * knee(0.90);
98
+ bright += smoothstep(e, 0.0, dPr) * cPr * knee(bPr);
99
+ // ---- views 2/3: the stacked gaussian passes
100
+ vec3 bloom = vec3(0.0);
101
+ bloom += halo(dRing, cRing * 0.77, knee(0.77) * 0.55);
102
+ bloom += halo(dCore, cCore, knee(1.00));
103
+ bloom += halo(o1, cO1 * 0.95, knee(0.95));
104
+ bloom += halo(o2, cO2 * 0.90, knee(0.90));
105
+ bloom += halo(o3, cO3 * 0.90, knee(0.90));
106
+ bloom += halo(dPr, cPr * bPr, knee(bPr));
107
+ // ---- the view dial
108
+ float vA = 1.0 - clamp(abs(u_vew - 0.0), 0.0, 1.0);
109
+ float vB = 1.0 - clamp(abs(u_vew - 1.0), 0.0, 1.0);
110
+ float vC = 1.0 - clamp(abs(u_vew - 2.0), 0.0, 1.0);
111
+ float vD = 1.0 - clamp(abs(u_vew - 3.0), 0.0, 1.0);
112
+ vec3 col = vA*scene + vB*bright + vC*bloom + vD*(scene + bloom);
113
+ float aOut = clamp(1.6*max(col.r, max(col.g, col.b)), 0.0, 1.0);
114
+ O = vec4(col, aOut);
115
+ }
116
+ `);
117
+
118
+ // ================= timeline =================
119
+
120
+ // ---- view 0: honest and dead
121
+ type(head, 1.1);
122
+ say(viewlab, "VIEW 0 - scene, no bloom", 0.3);
123
+ say(cap, "a light scope, rendered honest: crisp, correct - and completely dead", 0.6);
124
+ wait(2.2);
125
+
126
+ // ---- view 1: the bright-pass
127
+ cue(tick);
128
+ say(viewlab, "VIEW 1 - bright-pass: L > tau", 0.3);
129
+ to(vew, value, 1, 0.8, smooth);
130
+ say(cap, "pass one: keep only what outshines the threshold - the fine ticks vanish", 0.5);
131
+ wait(2.6);
132
+
133
+ // ---- view 2: stack the gaussian passes, one by one
134
+ cue(whoosh);
135
+ say(viewlab, "VIEW 2 - gaussian stack, radius x2 per pass", 0.3);
136
+ to(vew, value, 2, 0.8, smooth);
137
+ show(eqb, 0.6);
138
+ show(cnt, 0.3);
139
+ to(glo, value, 1, 0.8, smooth);
140
+ say(cap, "now blur it - again and again, radius doubling: the mip ladder", 0.5);
141
+ par { to(pas, value, 1, 0.7, smooth); to(cnt, value, 1, 0.7); }
142
+ wait(0.4);
143
+ par { to(pas, value, 2, 0.7, smooth); to(cnt, value, 2, 0.7); }
144
+ wait(0.4);
145
+ par { to(pas, value, 3, 0.7, smooth); to(cnt, value, 3, 0.7); }
146
+ wait(0.4);
147
+ par { to(pas, value, 5, 1.0, smooth); to(cnt, value, 5, 1.0); }
148
+ say(cap, "no ping-pong buffers: the emitters are SDFs, so every pass exists in closed form", 0.5);
149
+ wait(1.2);
150
+
151
+ // ---- view 3: the composite
152
+ cue(chime);
153
+ say(viewlab, "VIEW 3 - composite: scene + all passes", 0.3);
154
+ to(vew, value, 3, 0.9, smooth);
155
+ say(cap, "add it back on top: the scope begins to BLEED - but the base layer stays crisp", 0.5);
156
+ wait(2.0);
157
+
158
+ // ---- the flicker, and the fix
159
+ cue(tick);
160
+ say(cap, "watch the probe at the bottom: a HARD threshold makes its halo pop on and off", 0.5);
161
+ wait(3.4);
162
+ say(cap, "the fix: a soft KNEE - brightness eases across tau, and the halo breathes", 0.5);
163
+ to(kne, value, 1, 1.6, smooth);
164
+ wait(3.0);
165
+
166
+ // ---- finale: crank it
167
+ cue(whoosh);
168
+ say(cap, "clarity amidst chaos: bloom is additive light, never a blur of the scene", 0.5);
169
+ par { to(glo, value, 1.7, 2.0, smooth); to(rad, value, 1.5, 2.0, smooth); breathe(eqb, 3, 0.05, 0, 6); }
170
+ to(rad, value, 0.9, 1.6, smooth);
171
+ say(cap, "five sliders, one shader, every pass inspectable", 0.6);
172
+ wait(2.5);
@@ -0,0 +1,46 @@
1
+ // Boolean Ops — combine two shapes into a new region: union, intersection,
2
+ // difference, exclusion (xor). Each cell overlaps a square (cyan outline) and
3
+ // a circle (magenta outline); the filled lime shape is the result.
4
+ //
5
+ // manic examples/boolean.manic
6
+ // manic examples/boolean.manic --record out --fps 60
7
+
8
+ title("Boolean Ops");
9
+ canvas(1280, 720);
10
+
11
+ text(head, (640, 118), "boolean shape ops");
12
+ display(head); color(head, cyan); size(head, 36); hidden(head);
13
+
14
+ // --- union (top-left) ---
15
+ rect(aS, (330, 300), 130, 130); outlined(aS); outline(aS, cyan); opacity(aS, 0.4);
16
+ circle(aC, (400, 250), 78); outlined(aC); outline(aC, magenta); opacity(aC, 0.4);
17
+ union(aR, aS, aC, lime); hidden(aR);
18
+ text(aL, (365, 430), "union"); color(aL, dim); size(aL, 22);
19
+
20
+ // --- intersection (top-right) ---
21
+ rect(bS, (880, 300), 130, 130); outlined(bS); outline(bS, cyan); opacity(bS, 0.4);
22
+ circle(bC, (950, 250), 78); outlined(bC); outline(bC, magenta); opacity(bC, 0.4);
23
+ intersect(bR, bS, bC, lime); hidden(bR);
24
+ text(bL, (915, 430), "intersection"); color(bL, dim); size(bL, 20);
25
+
26
+ // --- difference (bottom-left): square minus circle ---
27
+ rect(cS, (330, 545), 130, 130); outlined(cS); outline(cS, cyan); opacity(cS, 0.4);
28
+ circle(cC, (400, 495), 78); outlined(cC); outline(cC, magenta); opacity(cC, 0.4);
29
+ difference(cR, cS, cC, lime); hidden(cR);
30
+ text(cL, (355, 675), "difference (rect - circle)"); color(cL, dim); size(cL, 18);
31
+
32
+ // --- exclusion / xor (bottom-right) ---
33
+ rect(dS, (880, 545), 130, 130); outlined(dS); outline(dS, cyan); opacity(dS, 0.4);
34
+ circle(dC, (950, 495), 78); outlined(dC); outline(dC, magenta); opacity(dC, 0.4);
35
+ xor(dR, dS, dC, lime); hidden(dR);
36
+ text(dL, (915, 675), "exclusion (xor)"); color(dL, dim); size(dL, 18);
37
+
38
+ // --- script: reveal each result in turn ---
39
+ show(head, 0.5);
40
+ stagger(0.3) {
41
+ show(aR, 0.4);
42
+ show(bR, 0.4);
43
+ show(cR, 0.4);
44
+ show(dR, 0.4);
45
+ }
46
+ wait(1.5);
@@ -0,0 +1,93 @@
1
+ // boxplot-wave — reading a box plot: the seasonal rainfall wave, built by jumps.
2
+ //
3
+ // Eight months of daily-rainfall box plots. They start below the frame and JUMP
4
+ // up (springy `shift`) into their true medians on the mm axis — staggered, so the
5
+ // seasonal wave assembles month by month. A dashed trend line then draws through
6
+ // the medians, and the manic wordmark signs off. Educational (labelled axes, a
7
+ // real seasonal pattern, how to read a box plot) and lively.
8
+ //
9
+ // manic examples/boxplot-wave.manic
10
+ title("Monthly rainfall through the year");
11
+ canvas(1600, 1000);
12
+ template("paper");
13
+
14
+ let ybase = 850; // y of 0 mm
15
+ let sc = 9; // pixels per mm
16
+ let start = 1060; // off-screen below: the boxes launch from here
17
+
18
+ // headings
19
+ text(hdr, (830, 66), "Monthly rainfall through the year");
20
+ size(hdr, 40); color(hdr, #222222);
21
+ text(sub, (830, 112), "each box = a month of daily rainfall · line = median, box = middle 50% (IQR), whiskers = range, dot = a storm");
22
+ size(sub, 21); color(sub, #7f8aa3);
23
+
24
+ // ---- y axis (rainfall, mm) ----
25
+ line(yax, (200, 300), (200, ybase)); stroke(yax, 2.5); color(yax, #444444);
26
+ for k in 0..4 {
27
+ let mm = k * 20;
28
+ let yv = ybase - mm * sc;
29
+ line(ytk{k}, (192, yv), (208, yv)); stroke(ytk{k}, 2); color(ytk{k}, #444444);
30
+ counter(ytl{k}, (160, yv), mm, 0); size(ytl{k}, 22); color(ytl{k}, #555555);
31
+ }
32
+ text(ytit, (205, 270), "mm"); size(ytit, 22); color(ytit, #7f8aa3);
33
+
34
+ // ---- x axis (month) ----
35
+ line(xax, (220, ybase), (1470, ybase)); stroke(xax, 2.5); color(xax, #444444);
36
+ text(xtit, (845, 958), "month"); size(xtit, 24); color(xtit, #7f8aa3);
37
+
38
+ // ---- the eight monthly box plots, created OFF-SCREEN BELOW (they jump up) ----
39
+ boxplot(m0, (290, start), "0 1 2 3 4 5 8", 72);
40
+ boxplot(m1, (450, start), "1 3 4 5 6 8 11", 72);
41
+ boxplot(m2, (610, start), "5 8 10 12 14 18 24", 72);
42
+ boxplot(m3, (770, start), "14 20 26 30 34 40 52", 72);
43
+ boxplot(m4, (930, start), "18 26 30 35 39 46 60 82", 72);
44
+ boxplot(m5, (1090, start), "10 16 20 22 25 30 40", 72);
45
+ boxplot(m6, (1250, start), "4 7 9 11 13 17 24", 72);
46
+ boxplot(m7, (1410, start), "0 2 3 4 5 7 10", 72);
47
+
48
+ // month labels
49
+ text(x0, (290, 900), "Jan"); text(x1, (450, 900), "Feb"); text(x2, (610, 900), "Apr");
50
+ text(x3, (770, 900), "Jun"); text(x4, (930, 900), "Jul"); text(x5, (1090, 900), "Sep");
51
+ text(x6, (1250, 900), "Oct"); text(x7, (1410, 900), "Dec");
52
+ size(x0, 22); size(x1, 22); size(x2, 22); size(x3, 22); size(x4, 22); size(x5, 22); size(x6, 22); size(x7, 22);
53
+ color(x0, #555555); color(x1, #555555); color(x2, #555555); color(x3, #555555);
54
+ color(x4, #555555); color(x5, #555555); color(x6, #555555); color(x7, #555555);
55
+
56
+ // hide each plot's own number labels — the shared axis carries the values now
57
+ hidden(m0.iqr); hidden(m0.lmin); hidden(m0.lmed); hidden(m0.lmax); hidden(m0.lq1); hidden(m0.lq3);
58
+ hidden(m1.iqr); hidden(m1.lmin); hidden(m1.lmed); hidden(m1.lmax); hidden(m1.lq1); hidden(m1.lq3);
59
+ hidden(m2.iqr); hidden(m2.lmin); hidden(m2.lmed); hidden(m2.lmax); hidden(m2.lq1); hidden(m2.lq3);
60
+ hidden(m3.iqr); hidden(m3.lmin); hidden(m3.lmed); hidden(m3.lmax); hidden(m3.lq1); hidden(m3.lq3);
61
+ hidden(m4.iqr); hidden(m4.lmin); hidden(m4.lmed); hidden(m4.lmax); hidden(m4.lq1); hidden(m4.lq3);
62
+ hidden(m5.iqr); hidden(m5.lmin); hidden(m5.lmed); hidden(m5.lmax); hidden(m5.lq1); hidden(m5.lq3);
63
+ hidden(m6.iqr); hidden(m6.lmin); hidden(m6.lmed); hidden(m6.lmax); hidden(m6.lq1); hidden(m6.lq3);
64
+ hidden(m7.iqr); hidden(m7.lmin); hidden(m7.lmed); hidden(m7.lmax); hidden(m7.lq1); hidden(m7.lq3);
65
+
66
+ // the trend line through the medians (drawn in after the boxes land)
67
+ line(t0, (290, ybase-3*sc), (450, ybase-5*sc)); tag(t0, trend);
68
+ line(t1, (450, ybase-5*sc), (610, ybase-12*sc)); tag(t1, trend);
69
+ line(t2, (610, ybase-12*sc), (770, ybase-30*sc)); tag(t2, trend);
70
+ line(t3, (770, ybase-30*sc), (930, ybase-35*sc)); tag(t3, trend);
71
+ line(t4, (930, ybase-35*sc), (1090, ybase-22*sc)); tag(t4, trend);
72
+ line(t5, (1090, ybase-22*sc), (1250, ybase-11*sc)); tag(t5, trend);
73
+ line(t6, (1250, ybase-11*sc), (1410, ybase-4*sc)); tag(t6, trend);
74
+ stroke(trend, 2.5); color(trend, #ff2d95); dashed(trend); untraced(trend);
75
+
76
+ // the wordmark, waiting for the sign-off
77
+ text(word, (1400, 210), "manic"); size(word, 46); color(word, #ff2d95); hidden(word);
78
+
79
+ // ---- the show ----
80
+ // 1) each month JUMPS up into place (springy), building the seasonal wave
81
+ stagger(0.26) {
82
+ shift(m0, (0, -(start - (ybase - 3 * sc))), 1.3, overshoot);
83
+ shift(m1, (0, -(start - (ybase - 5 * sc))), 1.3, overshoot);
84
+ shift(m2, (0, -(start - (ybase - 12 * sc))), 1.3, overshoot);
85
+ shift(m3, (0, -(start - (ybase - 30 * sc))), 1.3, overshoot);
86
+ shift(m4, (0, -(start - (ybase - 35 * sc))), 1.3, overshoot);
87
+ shift(m5, (0, -(start - (ybase - 22 * sc))), 1.3, overshoot);
88
+ shift(m6, (0, -(start - (ybase - 11 * sc))), 1.3, overshoot);
89
+ shift(m7, (0, -(start - (ybase - 4 * sc))), 1.3, overshoot);
90
+ }
91
+ // 2) draw the seasonal trend, then 3) sign off
92
+ draw(trend, 2.5);
93
+ show(word, 0.9); pulse(word);
@@ -0,0 +1,43 @@
1
+ // ============================================================================
2
+ // boxplot.manic — the five-number summary (stats Tier 1)
3
+ // ----------------------------------------------------------------------------
4
+ // `boxplot(id, (cx,cy), "v1 v2 v3 …", [width], [color])` draws a box-and-whisker:
5
+ // the box spans Q1→Q3 (its width IS the interquartile range), a line marks the
6
+ // median, whiskers reach the extreme non-outliers (within 1.5·IQR), and points
7
+ // beyond are flagged as outliers. Pieces: `{id}.box`, `{id}.med`,
8
+ // `{id}.whiskerlo`/`.whiskerhi` (+ `.caplo`/`.caphi`), `{id}.outliers`,
9
+ // `{id}.iqr` and the value labels.
10
+ //
11
+ // TO ADAPT: paste your numbers. A value far from the box (here 40) shows up as
12
+ // an outlier automatically.
13
+ // ============================================================================
14
+
15
+ title("Box-and-whisker: the five-number summary");
16
+ canvas("16:9");
17
+
18
+ text(hdr, (cx, 70), "response times (seconds) — one slow outlier");
19
+ size(hdr, 24); color(hdr, cyan); bold(hdr); display(hdr);
20
+
21
+ boxplot(bp, (cx, cy), "12 15 14 10 18 16 13 15 14 17 40 11 16 15 14", 700);
22
+ untraced(bp.whiskerlo); untraced(bp.whiskerhi); untraced(bp.caplo); untraced(bp.caphi); untraced(bp.med);
23
+ hidden(bp.box);
24
+ hidden(bp.outliers);
25
+ hidden(bp.iqr); hidden(bp.lmin); hidden(bp.lmax); hidden(bp.lmed); hidden(bp.lq1); hidden(bp.lq3);
26
+
27
+ text(cap, (cx, h - 46), ""); size(cap, 22); color(cap, dim); display(cap);
28
+
29
+ say(cap, "the box holds the middle half of the data — Q1 to Q3, the IQR", 0.5);
30
+ to(bp.box, opacity, 0.2, 0.6);
31
+ show(bp.lq1, 0.3); show(bp.lq3, 0.3); show(bp.iqr, 0.3);
32
+ wait(1.5);
33
+
34
+ say(cap, "the line inside is the median; the whiskers reach the rest", 0.5);
35
+ draw(bp.med, 0.4); show(bp.lmed, 0.3);
36
+ par { draw(bp.whiskerlo, 0.5); draw(bp.whiskerhi, 0.5); }
37
+ draw(bp.caplo, 0.3); draw(bp.caphi, 0.3);
38
+ show(bp.lmin, 0.3); show(bp.lmax, 0.3);
39
+ wait(1.6);
40
+
41
+ say(cap, "and a value far outside the whiskers is flagged as an outlier", 0.5);
42
+ show(bp.outliers, 0.4); pulse(bp.outliers);
43
+ wait(1.9);
@@ -0,0 +1,46 @@
1
+ // Braces — label spans and parts with curly braces, manic's Brace / BraceLabel
2
+ // / BraceBetweenPoints. A length is split into two parts a and b; a brace under
3
+ // each names it, and a brace over the whole names the sum. Every brace here is
4
+ // a BraceBetweenPoints (two points + a depth); bracelabel adds the text.
5
+ //
6
+ // manic examples/brace.manic
7
+ // manic examples/brace.manic --record out --fps 60
8
+
9
+ title("Braces");
10
+ canvas(1280, 720);
11
+
12
+ text(head, (640, 120), "label a span, or its parts");
13
+ display(head); color(head, cyan); size(head, 28); hidden(head);
14
+ text(cap, (640, 620), ""); color(cap, dim); size(cap, 24);
15
+
16
+ // the length, split at x = 680
17
+ line(seg, (300, 360), (980, 360)); color(seg, fg); stroke(seg, 3); untraced(seg);
18
+ dot(dl, (300, 360)); dot(dm, (680, 360)); dot(dr, (980, 360));
19
+ color(dl, magenta); color(dm, lime); color(dr, cyan);
20
+ hidden(dl); hidden(dm); hidden(dr);
21
+
22
+ // braces under the two parts, and over the whole (bulges up: points go R->L)
23
+ bracelabel(ba, (300, 392), (680, 392), "a", 30); color(ba, magenta);
24
+ bracelabel(bb, (680, 392), (980, 392), "b", 30); color(bb, cyan);
25
+ bracelabel(bt, (980, 320), (300, 320), "a + b", 34); color(bt, lime);
26
+ hidden(ba); hidden(bb); hidden(bt);
27
+
28
+ // --- reveal ---
29
+ show(head, 0.5);
30
+ say(cap, "here is a length");
31
+ draw(seg, 0.7);
32
+ par { show(dl, 0.3); show(dr, 0.3); }
33
+ wait(0.3);
34
+
35
+ section("Two parts");
36
+ say(cap, "split it at a point into parts a and b");
37
+ show(dm, 0.3);
38
+ show(ba, 0.5);
39
+ show(bb, 0.5);
40
+ wait(0.5);
41
+
42
+ section("The whole");
43
+ say(cap, "the whole span is a + b");
44
+ show(bt, 0.6);
45
+ par { pulse(ba.label); pulse(bb.label); pulse(bt.label); }
46
+ wait(1.4);
@@ -0,0 +1,51 @@
1
+ // ============================================================================
2
+ // brachistochrone-annotated.manic — ELEVATE a sim: KINETIC TYPOGRAPHY
3
+ // ----------------------------------------------------------------------------
4
+ // A third elevation flavour (see spring-annotated for typewriter, pulley-
5
+ // annotated for camera). Here the text itself performs: `caption` + `wordpop`
6
+ // pops the question in word-by-word, `caption` + `karaoke` sweeps a highlight
7
+ // across the four path names as the curves are sketched, and `flash`/`glow`/
8
+ // `pulse` crown the winner — the same recipe on a multi-body RACE, no section
9
+ // cards. All base manic over the `brachistochrone` parts.
10
+ // ============================================================================
11
+
12
+ title("Brachistochrone — Shortest Path, or Fastest?");
13
+ canvas("16:9");
14
+
15
+ // ---- the sim (curves untraced to sketch on; beads + markers hidden) ----
16
+ brachistochrone(br, (330, 165), 150);
17
+ untraced(br.straight); untraced(br.circle); untraced(br.parabola); untraced(br.cycloid);
18
+ hidden(br.bead_straight); hidden(br.bead_circle); hidden(br.bead_parabola); hidden(br.bead_cycloid);
19
+ hidden(br.markA); hidden(br.labelA); hidden(br.markB); hidden(br.labelB);
20
+
21
+ // ---- kinetic-typography captions ----
22
+ caption(q, "shortest path — or fastest?", (cx, 62), 34, gold);
23
+ caption(leg, "straight arc parabola cycloid", (cx, h - 66), 26, dim);
24
+ text(cap, (cx, h - 32), ""); size(cap, 19); color(cap, dim); display(cap);
25
+
26
+ // ============================== SCRIPT ==============================
27
+ say(cap, "a bead slides from A down to B under gravity — same start, same finish", 0.4);
28
+ show(br.markA, 0.4); show(br.labelA, 0.3); pulse(br.markA);
29
+ show(br.markB, 0.4); show(br.labelB, 0.3); pulse(br.markB);
30
+ wait(0.4);
31
+
32
+ // the question pops in, word by word
33
+ wordpop(q, 0.18);
34
+ wait(0.6);
35
+
36
+ // sketch the four curves; the legend highlight sweeps across their names
37
+ say(cap, "four paths from A to B — the cycloid dips below the line", 0.4);
38
+ draw(br.straight, 0.5); draw(br.circle, 0.5); draw(br.parabola, 0.5); draw(br.cycloid, 0.6);
39
+ karaoke(leg, 0.5, cyan);
40
+ flash(br.cycloid, magenta);
41
+ wait(0.5);
42
+
43
+ // the race
44
+ say(cap, "release all four at once …", 0.4);
45
+ show(br.bead_straight, 0.3); show(br.bead_circle, 0.3); show(br.bead_parabola, 0.3); show(br.bead_cycloid, 0.3);
46
+ run(br, 6);
47
+
48
+ // crown the winner
49
+ say(cap, "the CYCLOID wins — the steep early drop buys speed that repays the longer path", 0.4);
50
+ flash(br.cycloid, lime); glow(br.bead_cycloid, 1.9); pulse(br.bead_cycloid);
51
+ wait(1.0);
@@ -0,0 +1,27 @@
1
+ // ============================================================================
2
+ // brachistochrone.manic — the curve of fastest descent (physics Layer 1)
3
+ // ----------------------------------------------------------------------------
4
+ // `brachistochrone(id, [center], [unit])` — four beads race under gravity from
5
+ // A down to B along four curves: a straight line, a circular arc, a parabola,
6
+ // and a CYCLOID. Each is a full RK4 bead-on-wire integration. The cycloid — the
7
+ // brachistochrone — wins, even though it dips below and travels farther. The
8
+ // steep early drop buys speed that more than pays back the extra distance.
9
+ // `run(id,[dur])` replays the race.
10
+ //
11
+ // TO ADAPT: raise `dur` to watch the finish order in slow motion.
12
+ // ============================================================================
13
+
14
+ title("Brachistochrone — the fastest slide is a cycloid");
15
+ canvas("16:9");
16
+
17
+ text(hdr, (cx, 44), "Which curve is fastest from A to B? Steepness early beats a short path");
18
+ size(hdr, 21); color(hdr, cyan); bold(hdr); display(hdr);
19
+
20
+ brachistochrone(br, (330, 150), 150);
21
+
22
+ text(leg, (cx, h - 58), "dim: straight cyan: arc gold: parabola magenta: CYCLOID (winner)");
23
+ size(leg, 16); color(leg, fg); display(leg);
24
+ text(cap, (cx, h - 30), "same start, same finish — the magenta cycloid bead reaches B first");
25
+ size(cap, 16); color(cap, dim); display(cap);
26
+
27
+ run(br, 5);
@@ -0,0 +1,41 @@
1
+ // Bubble Sort — real sliding swaps. `array` gives fixed slot boxes and value
2
+ // cells; `compare(a, i, j)` flashes the values now in slots i and j, and
3
+ // `swap(a, i, j)` slides them past each other into the swapped slots. `swap`
4
+ // carries the array's occupancy forward, so a whole chain of swaps composes
5
+ // correctly (no `say`). We sort [3, 1, 2] -> [1, 2, 3].
6
+ //
7
+ // manic examples/bubble_sort.manic
8
+
9
+ title("Bubble Sort");
10
+ canvas("16:9");
11
+
12
+ text(head, (cx, 130), "compare neighbours, swap if out of order");
13
+ display(head); color(head, cyan); size(head, 26); hidden(head);
14
+ text(cap, (cx, 560), ""); color(cap, dim); size(cap, 26);
15
+
16
+ array(a, "3 1 2", (cx, 360), 100, 100);
17
+
18
+ show(head, 0.5);
19
+ say(cap, "an unsorted array");
20
+ wait(0.6);
21
+
22
+ section("Pass 1");
23
+ say(cap, "compare slots 0 and 1: 3 > 1, swap");
24
+ compare(a, 0, 1);
25
+ swap(a, 0, 1);
26
+
27
+ say(cap, "compare slots 1 and 2: 3 > 2, swap");
28
+ compare(a, 1, 2);
29
+ swap(a, 1, 2);
30
+
31
+ section("Pass 2");
32
+ say(cap, "compare slots 0 and 1: 1 < 2, ok");
33
+ compare(a, 0, 1, lime);
34
+ say(cap, "compare slots 1 and 2: 2 < 3, ok");
35
+ compare(a, 1, 2, lime);
36
+
37
+ section("Sorted");
38
+ say(cap, "1 2 3 -- done");
39
+ recolor(a.cells, lime, 0.4);
40
+ par { pulse(a.c0); pulse(a.c1); pulse(a.c2); }
41
+ wait(1.4);
@@ -0,0 +1,48 @@
1
+ // ============================================================================
2
+ // bullet-block-annotated.manic — a bullet's journey (inelastic collision)
3
+ // ----------------------------------------------------------------------------
4
+ // Not the bare lab sim — a scene: a gun fires, a muzzle flash, a glowing bullet
5
+ // crosses the gap in slow-motion, embeds in the block, and the live speed readout
6
+ // COLLAPSES from 40 m/s to ~1. The block barely lurches — it soaked up the bullet
7
+ // but almost none of the speed. Base-manic staging over the `bulletblock` sim.
8
+ // ============================================================================
9
+
10
+ title("A bullet fired into a block");
11
+ canvas("16:9");
12
+
13
+ text(hdr, (cx, 44), "A bullet fired into a block"); size(hdr, 30); color(hdr, cyan); bold(hdr); display(hdr); hidden(hdr);
14
+ text(sub, (cx, 80), "perfectly inelastic: the bullet embeds — momentum survives, speed collapses"); size(sub, 17); color(sub, dim); display(sub); hidden(sub);
15
+
16
+ // the sim (bullet at the muzzle, block at rest, floor, live speed readout, energy)
17
+ bulletblock(bb, (cx, 430), 0.05, 40, 1.95);
18
+ hidden(bb);
19
+ energygraph(bb, (1055, 250), 82);
20
+
21
+ // the gun (all base-manic shapes), at the bullet's start height
22
+ rect(barrel, (200, 380), 82, 20); color(barrel, dim); filled(barrel);
23
+ rect(body, (166, 386), 42, 34); color(body, dim); filled(body);
24
+ polygon(grip, (150, 404), (176, 404), (170, 442), (146, 438), dim);
25
+ circle(flash, (242, 380), 17); color(flash, gold); glow(flash, 2.4);
26
+ hidden(barrel); hidden(body); hidden(grip); hidden(flash);
27
+
28
+ // callouts
29
+ text(cbl, (300, 336), "the bullet — light + fast"); size(cbl, 16); color(cbl, red); display(cbl); hidden(cbl);
30
+ text(cblk, (720, 300), "the block — heavy, at rest"); size(cblk, 16); color(cblk, cyan); display(cblk); hidden(cblk);
31
+
32
+ text(cap, (cx, h - 38), ""); size(cap, 19); color(cap, fg); display(cap);
33
+
34
+ // ============================== SCRIPT ==============================
35
+ show(hdr, 0.5); show(sub, 0.4);
36
+ wait(0.3);
37
+ show(bb, 0.5); show(barrel, 0.3); show(body, 0.3); show(grip, 0.3);
38
+ show(cbl, 0.3); show(cblk, 0.3);
39
+ wait(0.4);
40
+
41
+ say(cap, "a heavy block sits at rest; a fast, light bullet is loaded", 0.4);
42
+ wait(0.5);
43
+ say(cap, "FIRE — 40 m/s across the gap …", 0.4);
44
+ flash(flash, gold); pulse(flash);
45
+ run(bb, 6);
46
+
47
+ say(cap, "… it embeds. Momentum is conserved, but 40 m/s collapses to ~1 — the energy is gone", 0.4);
48
+ wait(1.0);
@@ -0,0 +1,11 @@
1
+ // bullet-block.manic — a bullet fired into a block EMBEDS (perfectly inelastic).
2
+ // `bulletblock(id,[center],[bulletmass],[speed],[blockmass],[unit])`. The combined
3
+ // mass crawls off at m_b·v_b/(m_b+M) — most of the kinetic energy is lost to the
4
+ // collision, so `energygraph`'s total STEPS DOWN at impact. Uses `collide_1d(e=0)`.
5
+ title("Bullet into a block — an inelastic collision");
6
+ canvas("16:9");
7
+ text(hdr, (cx, 70), "The bullet embeds: 40 m/s becomes ~1 m/s — most of the energy is gone"); size(hdr, 21); color(hdr, cyan); bold(hdr); display(hdr);
8
+ bulletblock(bb, (cx, 430), 0.05, 40, 1.95);
9
+ energygraph(bb, (1040, 200), 90);
10
+ text(cap, (cx, h - 36), "momentum is conserved, but kinetic energy is NOT — it drops sharply at impact"); size(cap, 15); color(cap, dim); display(cap);
11
+ run(bb, 6);