@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,108 @@
1
+ // ============================================================================
2
+ // quiz-geometry.manic — a QUIZ SHORT, hand-authored (creator-template proto)
3
+ // ----------------------------------------------------------------------------
4
+ // The first proof of the "quiz Short" format the `creator` kit will later
5
+ // automate (see CAPABILITIES → Creator format templates). Built ENTIRELY from
6
+ // shipped primitives on a 9:16 canvas: a typewriter question, an ANIMATED
7
+ // geometry figure (the geo kit constructs the Euler line — which IS the answer),
8
+ // four option cards, a countdown, a time-out reveal, and a socials footer.
9
+ // When the `quiz`/`countdown`/`socials` builtins land, this whole file collapses
10
+ // to a few lines — but the beat/layout are proven here first.
11
+ // ============================================================================
12
+
13
+ title("Quiz — the Euler Line");
14
+ canvas("9:16"); // portrait 1080×1920 · cx=540 cy=960
15
+ template("paper");
16
+
17
+ // ---- the question (two typewriter lines, top / title-safe) ----
18
+ text(q1, (cx, 210), "3 triangle centres are always"); color(q1, fg); size(q1, 44); bold(q1); untraced(q1);
19
+ text(q2, (cx, 285), "collinear — on WHICH line?"); color(q2, cyan); size(q2, 44); bold(q2); untraced(q2);
20
+
21
+ // ---- the animated geometry figure (geo kit) : the Euler line construction ----
22
+ // (colours are palette-semantic — fg/cyan/magenta/lime/dim — so they REMAP with
23
+ // the template; gold/red/etc. are fixed and would lose contrast on `paper`)
24
+ point(A, (335, 760), "A"); point(B, (745, 745), "B"); point(C, (540, 470), "C");
25
+ hidden(A); hidden(B); hidden(C);
26
+ segment(ab, A, B); segment(bc, B, C); segment(ca, C, A); untraced(ab); untraced(bc); untraced(ca);
27
+ circumcircle(cc, A, B, C); color(cc, dim); untraced(cc);
28
+ circumcenter(O, A, B, C); color(O, magenta); label(O, "O", (20, -12)); hidden(O);
29
+ centroid(G, A, B, C); color(G, lime); label(G, "G", (20, -12)); hidden(G);
30
+ orthocenter(H, A, B, C); color(H, cyan); label(H, "H", (-34, -12)); hidden(H);
31
+ segment(euler, O, H); color(euler, fg); stroke(euler, 7); glow(euler, 1.5); untraced(euler);
32
+
33
+ // ---- four option cards, laid out 2×2 (compact — clears the figure) ----
34
+ rect(c1, (305, 1010), 428, 120); color(c1, panel); filled(c1); hidden(c1);
35
+ rect(c2, (775, 1010), 428, 120); color(c2, panel); filled(c2); hidden(c2);
36
+ rect(c3, (305, 1150), 428, 120); color(c3, panel); filled(c3); hidden(c3);
37
+ rect(c4, (775, 1150), 428, 120); color(c4, panel); filled(c4); hidden(c4);
38
+ text(t1, (305, 1010), "A Euler line"); color(t1, fg); size(t1, 34); hidden(t1);
39
+ text(t2, (775, 1010), "B Perp. bisector"); color(t2, fg); size(t2, 34); hidden(t2);
40
+ text(t3, (305, 1150), "C Angle bisector"); color(t3, fg); size(t3, 34); hidden(t3);
41
+ text(t4, (775, 1150), "D Median"); color(t4, fg); size(t4, 34); hidden(t4);
42
+
43
+ // ---- countdown ring + digit (palette-semantic → template-safe) ----
44
+ circle(ring, (cx, 1400), 62); color(ring, cyan); stroke(ring, 6); outlined(ring); hidden(ring);
45
+ text(timer, (cx, 1400), "5"); color(timer, fg); size(timer, 62); bold(timer); hidden(timer);
46
+
47
+ // ---- socials footer : icons DRAWN from primitives (manic has no raster images),
48
+ // so they render on any template; grouped as `foot` to show together ----
49
+ line(rule, (150, 1740), (930, 1740)); color(rule, dim); stroke(rule, 2);
50
+ // ▶ YouTube chip
51
+ rect(yt, (312, 1815), 58, 40); color(yt, magenta); filled(yt);
52
+ polygon(ytp, (300, 1802), (300, 1828), (326, 1815), bg);
53
+ // ✕ X chip
54
+ rect(xb, (404, 1815), 46, 46); color(xb, fg); outlined(xb);
55
+ line(x1, (392, 1803), (416, 1827)); color(x1, fg); stroke(x1, 4);
56
+ line(x2, (416, 1803), (392, 1827)); color(x2, fg); stroke(x2, 4);
57
+ // ◎ Instagram chip
58
+ rect(ig, (496, 1815), 46, 46); color(ig, fg); outlined(ig);
59
+ circle(igc, (496, 1815), 13); color(igc, fg); outlined(igc);
60
+ circle(igd, (509, 1802), 3); color(igd, fg); filled(igd);
61
+ // handle + link
62
+ text(foot, (740, 1815), "@manic · 8gwifi.org/manic"); color(foot, dim); size(foot, 28);
63
+ tag(rule, footer); tag(yt, footer); tag(ytp, footer); tag(xb, footer); tag(x1, footer);
64
+ tag(x2, footer); tag(ig, footer); tag(igc, footer); tag(igd, footer); tag(foot, footer);
65
+ hidden(footer);
66
+
67
+ // ================= THE BEAT =================
68
+ // 1) ask — typewriter
69
+ type(q1, 1.1);
70
+ type(q2, 1.0);
71
+ wait(0.2);
72
+
73
+ // 2) the figure constructs itself (animated geometry — the geo kit)
74
+ par { show(A, 0.25); show(B, 0.25); show(C, 0.25); }
75
+ par { draw(ab, 0.5); draw(bc, 0.5); draw(ca, 0.5); }
76
+ draw(cc, 0.6);
77
+ par { show(O); show(G); show(H); }
78
+ draw(euler, 0.9); pulse(euler); // the three centres line up → the Euler line
79
+ wait(0.3);
80
+
81
+ // 3) options fly in, staggered
82
+ seq {
83
+ par { show(c1, 0.2); show(t1, 0.2); }
84
+ par { show(c2, 0.2); show(t2, 0.2); }
85
+ par { show(c3, 0.2); show(t3, 0.2); }
86
+ par { show(c4, 0.2); show(t4, 0.2); }
87
+ }
88
+ show(footer, 0.3);
89
+
90
+ // 4) countdown 5 → 1
91
+ par { show(ring, 0.2); show(timer, 0.2); }
92
+ wait(0.8); say(timer, "4", 0.15);
93
+ wait(0.8); say(timer, "3", 0.15);
94
+ wait(0.8); say(timer, "2", 0.15);
95
+ wait(0.8); say(timer, "1", 0.15);
96
+ wait(0.8);
97
+
98
+ // 5) TIME OUT → reveal: card A (the Euler line) glows, the rest dim
99
+ say(timer, "0", 0.15); flash(ring, gold);
100
+ par {
101
+ recolor(c1, lime); flash(c1, gold); pulse(c1);
102
+ recolor(t1, void);
103
+ fade(c2, 0.5); fade(t2, 0.5);
104
+ fade(c3, 0.5); fade(t3, 0.5);
105
+ fade(c4, 0.5); fade(t4, 0.5);
106
+ flash(euler, gold);
107
+ }
108
+ wait(1.6);
@@ -0,0 +1,22 @@
1
+ // A creator quiz Short (9:16). Try the four card SKINS by changing the style
2
+ // string on `quiz(...)`: "badge" (default) · "minimal" · "glass" · "plain".
3
+ // You can also add a question REVEAL in the same string, order-free, e.g.
4
+ // quiz(q, "...", "glass fade") // glass cards + fade-in question
5
+ canvas("9:16");
6
+ template("shorts");
7
+
8
+ // a reusable creator profile (set once, drawn by `socials`)
9
+ creator(me, "@anish2good yt=zarigatongy x=@anish2good web=8gwifi.org/manic accent=magenta");
10
+
11
+ // the quiz: a question + four answers, one marked `correct`
12
+ quiz(q, "What is 7 x 8?", "badge");
13
+ option(q, "54");
14
+ option(q, "56", correct);
15
+ option(q, "48");
16
+ option(q, "63");
17
+
18
+ // play the whole ask -> countdown -> reveal beat over 8 seconds
19
+ run(q, 8);
20
+
21
+ // the footer with the creator's socials
22
+ socials(me);
@@ -0,0 +1,24 @@
1
+ // ============================================================================
2
+ // raft-cm.manic — centre of mass, on the physics baseline (Layer 1)
3
+ // ----------------------------------------------------------------------------
4
+ // `raft(id, [center], [personmass], [raftmass], [unit])` — a person walking on
5
+ // a floating raft. With no external horizontal force, momentum is conserved and
6
+ // the centre of mass stays FIXED: the raft slides the opposite way by
7
+ // −m_person/(m_person+m_raft) of each step. PRE-SIMULATED; `run(id,[dur])`
8
+ // replays it. The dashed line marks the (unmoving) centre of mass.
9
+ //
10
+ // TO ADAPT: make the raft much lighter (raftmass) — it slides much further.
11
+ // ============================================================================
12
+
13
+ title("Raft — walk one way, the raft slides the other");
14
+ canvas("16:9");
15
+
16
+ text(hdr, (cx, 46), "Momentum stays zero, so the centre of mass never moves");
17
+ size(hdr, 23); color(hdr, cyan); bold(hdr); display(hdr);
18
+
19
+ raft(rf, (cx, 380), 70, 200);
20
+
21
+ text(cap, (cx, h - 32), "the person walks; the raft glides back — the dashed centre-of-mass line stays put");
22
+ size(cap, 16); color(cap, dim); display(cap);
23
+
24
+ run(rf, 9);
@@ -0,0 +1,25 @@
1
+ // ============================================================================
2
+ // ramp.manic — friction on an incline, on the physics baseline (Layer 1)
3
+ // ----------------------------------------------------------------------------
4
+ // `ramp(id, [center], [angle], [mass], [applied], [unit])` — a block sliding
5
+ // down an inclined plane. Full force model: gravity along the slope, the normal
6
+ // force, and a static→kinetic friction switch. Friction turns mechanical energy
7
+ // into heat, so `energygraph`'s total DECAYS as the block slides. PRE-SIMULATED
8
+ // with RK4; `run(id,[dur])` replays it.
9
+ //
10
+ // TO ADAPT: lower the angle below the friction angle and the block won't budge.
11
+ // ============================================================================
12
+
13
+ title("Inclined plane — friction dissipates energy");
14
+ canvas("16:9");
15
+
16
+ text(hdr, (cx, 44), "Block on a ramp — μ friction bleeds the energy away");
17
+ size(hdr, 24); color(hdr, cyan); bold(hdr); display(hdr);
18
+
19
+ ramp(rp, (300, 470), 30);
20
+ energygraph(rp, (960, 320), 120);
21
+
22
+ text(cap, (cx, h - 32), "as the block slides down, the gold total energy line falls — friction converts it to heat");
23
+ size(cap, 16); color(cap, dim); display(cap);
24
+
25
+ run(rp, 6);
@@ -0,0 +1,27 @@
1
+ // ============================================================================
2
+ // ray-fan.manic — the signature of an aberration (real optics analysis)
3
+ // ----------------------------------------------------------------------------
4
+ // A ray-fan plot: for each ray, how far off focus does it land (y) against
5
+ // where it entered the lens (x, edge → edge)? `rayfan` traces the real
6
+ // spherical surfaces. A perfect lens is a flat line at zero; the singlet's
7
+ // cubic S-CURVE is textbook spherical aberration — the outer rays bend too
8
+ // much. (The doublet/triplet flatten it, drawn to the same scale.)
9
+ // ============================================================================
10
+
11
+ title("Ray-Fan — Reading an Aberration");
12
+ canvas("16:9");
13
+
14
+ rayfan(rf, (640, 340), "singlet");
15
+
16
+ text(cap, (cx, h - 46), ""); color(cap, fg); size(cap, 24); bold(cap); display(cap); sticky(cap);
17
+
18
+ // ================= THE SCENE =================
19
+ say(cap, "each ray: how far off focus (y) vs where it entered (x)…", 0.5);
20
+ draw(rf.curve, 2.2);
21
+ wait(0.5);
22
+
23
+ say(cap, "a flat line would be a perfect lens — this ISN'T flat", 0.3);
24
+ wait(2.0);
25
+
26
+ say(cap, "that S-curve is spherical aberration: the edges bend too much", 0.3);
27
+ wait(1.4);
@@ -0,0 +1,39 @@
1
+ // raymarch-alpha — Shader backbone step 7: OUTPUT ALPHA. A raymarched object with
2
+ // `let alpha` renders on a TRANSPARENT background, so it composites over the rest of
3
+ // the scene instead of drawing an opaque backdrop. Here a coloured metaball floats
4
+ // over a full-canvas 2-D `shader` gradient — you can see the gradient THROUGH the
5
+ // object's missed rays (and faintly through the object itself at alpha 0.9). Alpha
6
+ // is faithful on both backends: GLSL writes `vec4(rgb, alpha)` and blends; the CPU
7
+ // field stores per-texel alpha and composites the same way.
8
+ //
9
+ // manic examples/raymarch-alpha.manic
10
+ title("Raymarch with alpha — compositing over the scene");
11
+ canvas("16:9");
12
+ template("black");
13
+
14
+ // a colourful 2-D shader gradient BEHIND the object (fills the canvas, opaque)
15
+ shader(back) {
16
+ let hue = mod(u * 160.0 + v * 90.0 + 20.0, 360.0);
17
+ let sat = 0.7;
18
+ let val = 0.42 + 0.12 * sin(u * 6.28);
19
+ }
20
+
21
+ camera3((2.6, -3.2, 2.0), (0, 0, 0), 40, perspective);
22
+
23
+ raymarch(blob) {
24
+ // two spheres smooth-unioned into a metaball
25
+ let a = sdsphere(x - 0.55 * sin(t), y, z + 0.4 * cos(t), 0.52);
26
+ let b = sdsphere(x + 0.55 * cos(t * 0.8), y - 0.25, z, 0.44);
27
+ let d = smin(a, b, 0.4);
28
+ // iridescent hit colour
29
+ let hue = mod(205.0 + nx * 85.0 + t * 34.0, 360.0);
30
+ let sat = 0.82;
31
+ let val = 0.55 + 0.3 * nz;
32
+ // OUTPUT ALPHA: hit ⇒ 0.9 (slightly translucent), miss ⇒ transparent (composites)
33
+ let alpha = 0.9;
34
+ }
35
+
36
+ caption(head, "raymarch ← alpha (composited)", (640, 66), 32);
37
+ hidden(head);
38
+ show(head);
39
+ orbit3(60, 0, 5.0, 18, smooth);
@@ -0,0 +1,47 @@
1
+ // raymarch-boxgrid — Shader V2.3, the finale: the raymarched Shadertoy that
2
+ // started this whole thread (tssSDN — a grid of boxes rippling around a bouncing
3
+ // sphere), rebuilt as a TRUE ray-march this time (V2 tier), not the cloud3
4
+ // reimagining (examples/cloud3-ripple.manic). One signed-distance field does it:
5
+ // `rep(x,r)` tiles a box into an infinite grid (`sdbox3`), each cell's HEIGHT a
6
+ // wave of its `rand2` hash + a falloff from the moving sphere's position; `smin`
7
+ // unions in the sphere. Per-pixel loop in the ENGINE, no vec types — just a
8
+ // scalar distance formula. Coloured red→gold by height, orbited by `camera3`.
9
+ //
10
+ // manic examples/raymarch-boxgrid.manic
11
+ title("A ray-marched box grid — the Shadertoy, rebuilt");
12
+ canvas("16:9");
13
+ template("black");
14
+
15
+ camera3((2.6, -3.2, 2.2), (0, 0, 0.25), 40, perspective);
16
+
17
+ raymarch(grid) {
18
+ let rp = 0.42; // cell size
19
+ let idx = floor(x / rp); // which cell (x)
20
+ let idy = floor(y / rp); // which cell (y)
21
+ let lx = rep(x, rp); // local coord inside the cell
22
+ let ly = rep(y, rp);
23
+ let sx = sin(t * 1.8) * 1.3; // the bouncing sphere (inlined)
24
+ let sy = cos(t * 2.2) * 1.3;
25
+ let cxx = idx * rp + rp * 0.5; // this cell's centre
26
+ let cyy = idy * rp + rp * 0.5;
27
+ let bs = hypot(cxx - sx, cyy - sy); // cell → sphere distance
28
+ let fall = 1 - smoothstep(0.0, 2.2, bs); // near the sphere ⇒ taller
29
+ let hsh = rand2(idx, idy); // per-cell phase
30
+ let bh = 0.34 + 0.30 * sin(hsh * 6.283 + t * 2.6 + bs * 1.7) * fall; // box height (>0)
31
+ let box = sdbox3(lx, ly, z - bh * 0.5, rp * 0.4, rp * 0.4, bh * 0.5);
32
+ let ball = sdsphere(x - sx, y - sy, z - 0.6, 0.18);
33
+ let d = smin(box, ball, 0.04); // grid ∪ sphere
34
+ // colour: red troughs → gold crests, top faces brighter
35
+ let hue = mod(6.0 + bh * 42.0, 360.0);
36
+ let sat = 0.85;
37
+ let val = 0.28 + 0.55 * nz;
38
+ }
39
+
40
+ caption(head, "A ray-marched box grid", (640, 66), 34);
41
+ caption(sub, "sdbox3 + rep() tiling + smin — the Shadertoy, in manic", (640, 122), 22);
42
+ hidden(head);
43
+ hidden(sub);
44
+ show(head);
45
+ wait(1.5);
46
+ show(sub);
47
+ orbit3(50, 0, 4.6, 22, smooth);
@@ -0,0 +1,74 @@
1
+ // raymarch-docker-latency — "Visualizing Docker daemon socket latency as a raymarched
2
+ // fluid surface." A per-pixel ray-marched LIQUID MESH: a grid of columns whose heights
3
+ // ARE a latency trace. The daemon socket sits at the origin and emits high-frequency
4
+ // concentric pings (amplitude modulated by a jittery round-trip-time signal); three
5
+ // containers fire expanding ring events at baked timestamps, each ring's reach ∝ its
6
+ // measured RTT. Every cell samples that field at its centre → the mesh shimmers with
7
+ // socket traffic. One scalar SDF (`sdbox3` + `rep()` tiling), marched by the engine.
8
+ //
9
+ // Honest note: manic is PURE IN t (that's what lets it scrub + record), so it does NOT
10
+ // tail a live /var/run/docker.sock in real time. The trace is BAKED IN — timestamps and
11
+ // RTTs as constants — so the same second always renders the same wavefront. Swap the
12
+ // constants for a captured `docker events` / socket-latency log and the mesh replays it
13
+ // deterministically: data → SDF displacement → raymarch, exactly as described. The data
14
+ // source is a recording, not a socket; the mechanism is real.
15
+ //
16
+ // manic examples/raymarch-docker-latency.manic
17
+ title("Docker daemon socket latency — a raymarched liquid mesh");
18
+ canvas("16:9");
19
+ template("black");
20
+
21
+ camera3((2.4, -3.3, 2.0), (0, 0, 0.2), 40, perspective);
22
+
23
+ raymarch(fluid) {
24
+ let rp = 0.34; // mesh cell size
25
+ let idx = floor(x / rp); let idy = floor(y / rp);
26
+ let lx = rep(x, rp); let ly = rep(y, rp);
27
+ let cx = idx*rp + rp*0.5; let cy = idy*rp + rp*0.5; // this cell's centre
28
+ let r0 = hypot(cx, cy); // distance from the daemon socket (origin)
29
+
30
+ // baked latency signal: socket round-trip time, jittery + bursty
31
+ let lat = 0.5 + 0.28*sin(t*5.3) + 0.16*sin(t*11.7 + 1.3) + 0.10*sin(t*23.1 + 0.7);
32
+
33
+ // the daemon socket: high-frequency concentric pings, amplitude ∝ latency
34
+ let pings = lat * sin(6.0*r0 - t*7.0) / (1.0 + 1.3*r0);
35
+
36
+ // three containers talking to the daemon: baked (epicenter, fire time, RTT) rings
37
+ let d1 = hypot(cx + 1.3, cy - 0.8); let a1 = t - 1.4; let f1 = a1*1.9;
38
+ let e1 = step(0.0, a1) * exp(-0.7*a1) * sin(7.0*(d1 - f1)) * exp(-3.0*(d1-f1)*(d1-f1));
39
+ let d2 = hypot(cx - 1.6, cy - 1.1); let a2 = t - 3.2; let f2 = a2*2.1;
40
+ let e2 = step(0.0, a2) * exp(-0.6*a2) * sin(7.0*(d2 - f2)) * exp(-3.0*(d2-f2)*(d2-f2));
41
+ let d3 = hypot(cx + 0.4, cy + 1.7); let a3 = t - 5.0; let f3 = a3*2.0;
42
+ let e3 = step(0.0, a3) * exp(-0.55*a3) * sin(7.0*(d3 - f3)) * exp(-3.0*(d3-f3)*(d3-f3));
43
+
44
+ // column height = calm water level + the summed latency displacement (always > 0)
45
+ let bh = clamp(0.22 + 0.13*pings + 0.17*(e1 + e2 + e3), 0.03, 0.78);
46
+ let box = sdbox3(lx, ly, z - bh*0.5, rp*0.42, rp*0.42, bh*0.5);
47
+ let d = box;
48
+
49
+ // hit colour: deep-blue troughs → bright cyan crests (from the actual hit height),
50
+ // top faces brightest — no cross-stage lets, so the field colours cleanly
51
+ let crest = clamp(hz * 1.7, 0.0, 1.0);
52
+ let hue = mod(210.0 - crest*56.0, 360.0);
53
+ let sat = 0.82;
54
+ let val = 0.16 + 0.55*crest + 0.30*nz;
55
+ }
56
+
57
+ // ---- annotations ----
58
+ caption(head, "Docker daemon socket latency", (640, 60), 33);
59
+ caption(sub, "each socket ping ripples a raymarched liquid mesh", (640, 112), 21);
60
+ hidden(head);
61
+ hidden(sub);
62
+ equation(eq, (640, 636), `z_{\text{cell}} = \mathrm{water} + \sum_i \mathrm{RTT}_i\,\mathrm{ring}(r_i - c\,\Delta t_i)`, 26);
63
+ caption(note, "baked latency trace → SDF displacement → raymarch · pure in t, so it scrubs", (640, 690), 18);
64
+ hidden(eq);
65
+ hidden(note);
66
+
67
+ show(head);
68
+ wait(1.6);
69
+ show(sub);
70
+ wait(2.2);
71
+ show(eq);
72
+ show(note);
73
+ // slow orbit so the mesh reads as genuine 3-D geometry
74
+ orbit3(52, 8, 4.8, 22, smooth);
@@ -0,0 +1,37 @@
1
+ // raymarch-metaballs — Shader V2: a 3-D scene RAY-MARCHED per pixel. You write
2
+ // only the signed-distance field `let d` (the distance from any point x,y,z to
3
+ // the scene); the engine marches a ray per pixel until it hits the surface,
4
+ // takes the normal by finite differences, and shades it. No per-pixel loop in
5
+ // the DSL (it runs in the engine, like `voronoi`/`mandelbrot`) and NO vec/mat
6
+ // types — the SDF is a scalar formula, component math the manic way. Here three
7
+ // spheres orbit and MERGE through `smin` (smooth union) into living metaballs.
8
+ //
9
+ // manic examples/raymarch-metaballs.manic
10
+ title("Metaballs — a ray-marched 3D field");
11
+ canvas("16:9");
12
+ template("black");
13
+
14
+ raymarch(blobs) {
15
+ // three moving spheres (signed distance = distance to centre − radius)
16
+ let a = sdsphere(x - 0.75*sin(t), y - 0.5*cos(t*1.3), z + 0.3*sin(t*0.7), 0.52);
17
+ let b = sdsphere(x + 0.6*cos(t*0.9), y + 0.45*sin(t*1.1), z - 0.35*cos(t), 0.46);
18
+ let c = sdsphere(x + 0.2*sin(t*1.7), y + 0.6*sin(t*0.7), z + 0.25*sin(t*1.4), 0.4);
19
+ // smooth-union them (smin) so they gloop together instead of just overlapping
20
+ let ab = smin(a, b, 0.55);
21
+ let d = smin(ab, c, 0.55);
22
+ }
23
+
24
+ // ---- textbook annotations ----
25
+ caption(head, "Metaballs — one distance field", (640, 66), 34);
26
+ caption(sub, "raymarch: you write the SDF, the engine marches it", (640, 122), 22);
27
+ hidden(head);
28
+ hidden(sub);
29
+ equation(eq, (640, 648), `d = \operatorname{smin}(d_1, d_2, k)`, 34);
30
+ hidden(eq);
31
+
32
+ show(head);
33
+ wait(1.6);
34
+ show(sub);
35
+ wait(2.6);
36
+ show(eq);
37
+ wait(22);
@@ -0,0 +1,39 @@
1
+ // raymarch-sculpture — Shader V2.2: a coloured, carved SDF sculpture that a real
2
+ // `camera3` orbits. New since V2.1: (1) your own HIT colour — `let hue`/`sat`/`val`
3
+ // (or r/g/b) as a formula of the surface normal `nx`/`ny`/`nz`, hit height `hz`
4
+ // and time `t`; (2) `camera3` reuse — the marcher builds its rays from the scene
5
+ // camera, so `orbit3` sweeps around the scene; (3) SDF booleans `smin` (smooth
6
+ // union), `sdsub` (carve), `sdint` (intersect). Still just a scalar distance
7
+ // field — no per-pixel loop in the DSL, no vec types.
8
+ //
9
+ // manic examples/raymarch-sculpture.manic
10
+ title("A carved, coloured SDF — orbited by camera3");
11
+ canvas("16:9");
12
+ template("black");
13
+
14
+ camera3((3.4, -3.8, 2.2), (0, 0, 0.15), 38, perspective);
15
+
16
+ raymarch(gem) {
17
+ // a core sphere with two bumps smoothly fused on (metaball style)
18
+ let core = sdsphere(x, y, z, 1.0);
19
+ let b1 = sdsphere(x - 0.9*sin(t*0.8), y, z + 0.9*cos(t*0.8), 0.44);
20
+ let b2 = sdsphere(x + 0.5*cos(t), y - 0.85*sin(t*1.1), z, 0.4);
21
+ let blob = smin(smin(core, b1, 0.45), b2, 0.45);
22
+ // carve a spherical bite out of it
23
+ let bite = sdsphere(x - 0.55, y - 0.9, z + 0.55, 0.62);
24
+ let d = sdsub(bite, blob);
25
+ // iridescent colour: hue from the facing direction + a slow time sweep
26
+ let hue = mod(205.0 + nx*95.0 + ny*55.0 + t*40.0, 360.0);
27
+ let sat = 0.82;
28
+ let val = 0.52 + 0.28*nz;
29
+ }
30
+
31
+ caption(head, "A carved, coloured SDF", (640, 66), 34);
32
+ caption(sub, "hit colour from the normal + camera3 orbit", (640, 122), 22);
33
+ hidden(head);
34
+ hidden(sub);
35
+ show(head);
36
+ wait(1.4);
37
+ show(sub);
38
+ // slow camera orbit — the marcher re-reads camera3 every frame (captions stay up)
39
+ orbit3(70, 0, 5.4, 24, smooth);
@@ -0,0 +1,31 @@
1
+ // raymarch-shapes3 — the 3-D shape/SDF builtins (Layer 1, batch 2) in a real
2
+ // ray-march: a torus, an octahedron, and a capsule spindle, smooth-unioned and
3
+ // orbited by camera3. Each is ONE scalar builtin — no vec math, no hand-written
4
+ // distance functions. Full-res GLSL with the CPU marcher as the exact fallback.
5
+ //
6
+ // manic examples/raymarch-shapes3.manic
7
+ title("Ray-marched SDF primitives — torus · octahedron · capsule");
8
+ canvas("16:9");
9
+ template("black");
10
+
11
+ camera3((3.2, -3.6, 2.4), (0, 0, 0), 40, perspective);
12
+
13
+ raymarch(scene) {
14
+ let tor = sdtorus(x, y, z, 0.95, 0.26); // ring in the XY plane
15
+ let oct = sdoctahedron(x, y, z - 1.05, 0.5); // floating above
16
+ let spn = sdcapsule(x, y, z, 1.5, 0.10); // vertical spindle through it
17
+ let d = smin(smin(tor, oct, 0.18), spn, 0.12);
18
+ // iridescent hit colour from the normal + a slow time sweep
19
+ let hue = mod(190.0 + nz * 70.0 + nx * 40.0 + t * 30.0, 360.0);
20
+ let sat = 0.82;
21
+ let val = 0.52 + 0.32 * nz;
22
+ }
23
+
24
+ caption(head, "sdtorus · sdoctahedron · sdcapsule", (640, 66), 30);
25
+ caption(sub, "each shape one scalar builtin — no vec math", (640, 118), 20);
26
+ hidden(head);
27
+ hidden(sub);
28
+ show(head);
29
+ wait(1.4);
30
+ show(sub);
31
+ orbit3(70, 0, 5.4, 20, smooth);
@@ -0,0 +1,172 @@
1
+ // ============================================================================
2
+ // reactive-integral.manic — one calculation, one continuous visual world
3
+ // ----------------------------------------------------------------------------
4
+ // Integration by parts uses one structured equation. `rewrite` keeps unchanged
5
+ // RaTeX parts alive while only the mathematical difference moves or enters.
6
+ // The graph then verifies the result: the slope of F is the height of f, and
7
+ // +C becomes a visible family of vertical translations.
8
+ // ============================================================================
9
+
10
+ title("A Reactive Integral");
11
+ canvas("16:9");
12
+ template("plain");
13
+ watermark(manicMark, (1135, 30), "Made With Manic");
14
+
15
+ // Shared colour roles follow the same mathematical objects through every act.
16
+ // x / u is magenta; cos, sin and their antiderivative relation are cyan.
17
+ text(kicker, (285, 38), "ONE INTEGRAL · ONE CONTINUOUS STORY");
18
+ size(kicker, 18); color(kicker, dim); bold(kicker); hidden(kicker);
19
+
20
+ text(headline, (430, 72), "Watch only the mathematics that changes");
21
+ size(headline, 28); color(headline, fg); bold(headline); hidden(headline);
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // ONE PERSISTENT EQUATION
25
+ // ---------------------------------------------------------------------------
26
+
27
+ equation(
28
+ work,
29
+ (cx, 145),
30
+ `\int \textcolor{magenta}{x}\,\textcolor{cyan}{\cos(x)}\,dx`,
31
+ 46
32
+ );
33
+ hidden(work);
34
+
35
+ // The by-parts roles remain visible while the expression changes above them.
36
+ equation(uChoice, (330, 225), `u=x`, 28); color(uChoice, magenta); hidden(uChoice);
37
+ equation(dvChoice, (525, 225), `dv=\cos(x)\,dx`, 28); color(dvChoice, cyan); hidden(dvChoice);
38
+ equation(duChoice, (760, 225), `du=dx`, 28); color(duChoice, magenta); hidden(duChoice);
39
+ equation(vChoice, (950, 225), `v=\sin(x)`, 28); color(vChoice, cyan); hidden(vChoice);
40
+
41
+ text(method, (cx, 278), "INTEGRATION BY PARTS");
42
+ size(method, 16); color(method, dim); bold(method); hidden(method);
43
+
44
+ // ---------------------------------------------------------------------------
45
+ // ONE GRAPH, ASKED THREE CONNECTED QUESTIONS
46
+ // ---------------------------------------------------------------------------
47
+
48
+ let ox = cx;
49
+ let oy = 515;
50
+ let sx = 108;
51
+ let sy = 28;
52
+
53
+ axes(ax, (ox, oy), 550, 165, 1);
54
+ color(ax, dim); opacity(ax, 0.50); untraced(ax);
55
+
56
+ // Integrand and one representative antiderivative (C=0).
57
+ plot(f, (ox, oy), sx, sy, "x*cos(x)", (-5, 5));
58
+ color(f, cyan); stroke(f, 5); glow(f, 0.8); untraced(f);
59
+
60
+ plot(bigF, (ox, oy), sx, sy, "x*sin(x)+cos(x)", (-5, 5));
61
+ color(bigF, lime); stroke(bigF, 5); dashed(bigF, 18, 11);
62
+ glow(bigF, 0.8); untraced(bigF);
63
+
64
+ // Numerical derivative of F: drawing it lands directly on f.
65
+ deriv(dF, bigF);
66
+ color(dF, gold); stroke(dF, 3); glow(dF, 0.5); untraced(dF);
67
+
68
+ // A moving tangent makes “F' = f” a local statement at every x.
69
+ tangent(tan, bigF, -3.8, 180); color(tan, gold); hidden(tan);
70
+ slope(slopeValue, bigF, -3.8, (18, -24)); color(slopeValue, gold); hidden(slopeValue);
71
+
72
+ equation(fLabel, (250, 338), `f(x)=x\cos(x)`, 28); color(fLabel, cyan); hidden(fLabel);
73
+ equation(FLabel, (1010, 338), `F(x)=x\sin(x)+\cos(x)`, 28); color(FLabel, lime); hidden(FLabel);
74
+ equation(proofLabel, (cx, 280), `F'(x)=f(x)=x\cos(x)`, 34); color(proofLabel, gold); hidden(proofLabel);
75
+
76
+ // +C does not change the derivative: it translates the same curve vertically.
77
+ plot(Fup, (ox, oy), sx, sy, "x*sin(x)+cos(x)+1.5", (-5, 5));
78
+ plot(Fdown, (ox, oy), sx, sy, "x*sin(x)+cos(x)-1.5", (-5, 5));
79
+ color(Fup, magenta); color(Fdown, magenta);
80
+ stroke(Fup, 3); stroke(Fdown, 3); opacity(Fup, 0.55); opacity(Fdown, 0.55);
81
+ dashed(Fup, 14, 9); dashed(Fdown, 14, 9);
82
+ untraced(Fup); untraced(Fdown);
83
+
84
+ equation(familyLabel, (cx, 280), `F(x)+C\quad\text{changes height, not slope}`, 32);
85
+ color(familyLabel, magenta); hidden(familyLabel);
86
+
87
+ text(caption, (cx, 690), "");
88
+ size(caption, 19); color(caption, dim); bold(caption);
89
+
90
+ // Axes and curves are `untraced`, so their draw progress starts at zero without
91
+ // also zeroing opacity. That lets `draw(...)` reveal their geometry later.
92
+
93
+ // ---------------------------------------------------------------------------
94
+ // TIMELINE
95
+ // ---------------------------------------------------------------------------
96
+
97
+ show(kicker, 0.45);
98
+ show(headline, 0.55);
99
+ say(caption, "Start with the question. Keep the stage — change only its state.");
100
+ show(work, 0.65);
101
+ wait(1.60);
102
+
103
+ // Choose u and dv by reusing the same semantic colours.
104
+ show(method, 0.35);
105
+ say(caption, "Choose the two roles. Colour preserves their identity.");
106
+ par { show(uChoice, 0.50); show(dvChoice, 0.65); }
107
+ wait(1.20);
108
+ par { show(duChoice, 0.50); show(vChoice, 0.50); }
109
+ wait(1.50);
110
+
111
+ // Build x sin(x) - integral sin(x) dx. Reusable glyphs travel to their new
112
+ // jobs while the obsolete cosine is the only original factor that leaves.
113
+ say(caption, "Apply integration by parts: persistent pieces move; new pieces arrive.");
114
+ rewrite(
115
+ work,
116
+ `\textcolor{magenta}{x}\textcolor{cyan}{\sin(x)}-\int\textcolor{cyan}{\sin(x)}\,dx`,
117
+ 1.05,
118
+ smooth
119
+ );
120
+ wait(2.00);
121
+
122
+ // Only the remaining integral changes. x sin(x) stays untouched.
123
+ say(caption, "Resolve the remaining integral. The stable product never blinks.");
124
+ rewrite(
125
+ work,
126
+ `\textcolor{magenta}{x}\textcolor{cyan}{\sin(x)}+\textcolor{cyan}{\cos(x)}+\textcolor{gold}{C}`,
127
+ 1.00,
128
+ smooth
129
+ );
130
+ wait(2.00);
131
+
132
+ // Move attention from symbolic manipulation into the same idea as geometry.
133
+ say(caption, "Now verify the answer visually — without leaving the scene.");
134
+ par {
135
+ fade(method, 0.40);
136
+ fade(uChoice, 0.40); fade(dvChoice, 0.40);
137
+ fade(duChoice, 0.40); fade(vChoice, 0.40);
138
+ draw(ax, 0.85);
139
+ }
140
+ draw(f, 1.80);
141
+ show(fLabel, 0.45);
142
+ wait(1.00);
143
+
144
+ draw(bigF, 1.80);
145
+ show(FLabel, 0.45);
146
+ wait(1.00);
147
+
148
+ // The tangent and its numeric slope glide continuously across F.
149
+ say(caption, "At every x, the slope of the green curve equals the blue height.");
150
+ par { show(tan, 0.45); show(slopeValue, 0.45); }
151
+ par {
152
+ to(tan, x, 3.8, 4.80, smooth);
153
+ to(slopeValue, x, 3.8, 4.80, smooth);
154
+ }
155
+ wait(0.60);
156
+
157
+ // The derivative trace lands directly over the original integrand.
158
+ show(proofLabel, 0.50);
159
+ draw(dF, 2.20);
160
+ flash(f, cyan);
161
+ wait(1.40);
162
+
163
+ // Finish with the geometric meaning of the integration constant.
164
+ say(caption, "+C creates a family of answers — same shape, same slope.");
165
+ par {
166
+ fade(tan, 0.45); fade(slopeValue, 0.45); fade(dF, 0.45);
167
+ fade(proofLabel, 0.45); fade(fLabel, 0.45); fade(FLabel, 0.45);
168
+ show(familyLabel, 0.55);
169
+ pulse(work, 0.70);
170
+ }
171
+ par { draw(Fup, 1.50); draw(Fdown, 1.50); }
172
+ wait(2.80);