manim-web 0.3.21 → 0.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +20 -0
  2. package/dist/{AmsConfiguration-BMyoprhk.js → AmsConfiguration-OUoC_kJ0.js} +5 -5
  3. package/dist/{AmsConfiguration-BdxxYRby.js → AmsConfiguration-tdje_HlF.js} +5 -5
  4. package/dist/{ConfigMacrosConfiguration-B8X_JSVI.js → ConfigMacrosConfiguration-4OaQYvlr.js} +3 -3
  5. package/dist/{ConfigMacrosConfiguration-DUxp6DUV.js → ConfigMacrosConfiguration-DM3-S5M8.js} +3 -3
  6. package/dist/{Entities-B1o7gN0J.js → Entities-Dw6381dl.js} +2 -2
  7. package/dist/{Entities-C82lnCux.js → Entities-bJKKDYjE.js} +2 -2
  8. package/dist/{HtmlNode-BLmQ2r7U.js → HtmlNode-1mFtYQ9G.js} +2 -2
  9. package/dist/{HtmlNode-DXGeKrcW.js → HtmlNode-CQqo5we-.js} +2 -2
  10. package/dist/{InputJax-DL9oUQY4.js → InputJax-D5R2pqUk.js} +2 -2
  11. package/dist/{InputJax-DnDWM3Y0.js → InputJax-jNvwWU5P.js} +2 -2
  12. package/dist/{NewcommandConfiguration-BPjclFig.js → NewcommandConfiguration-BN_OlLcO.js} +2 -2
  13. package/dist/{NewcommandConfiguration-bJ6P1rBY.js → NewcommandConfiguration-DZ3mSCpD.js} +2 -2
  14. package/dist/{NewcommandMethods-C_E3iLoK.js → NewcommandMethods-D5bueYYE.js} +2 -2
  15. package/dist/{NewcommandMethods-Cb7yFm5P.js → NewcommandMethods-DTf_dan5.js} +2 -2
  16. package/dist/{ParseMethods-BMPfzfQC.js → ParseMethods-Deqa7kJ6.js} +7 -7
  17. package/dist/{ParseMethods-D3_HeS1K.js → ParseMethods-Dt5bYDSZ.js} +7 -7
  18. package/dist/{Styles-Dky5jZUe.js → Styles-BILrGVps.js} +1 -1
  19. package/dist/{Styles-J-6R3Vr8.js → Styles-DQSruwWe.js} +1 -1
  20. package/dist/animation/Animation.d.ts.map +1 -1
  21. package/dist/animation/MasterTimeline.d.ts +88 -1
  22. package/dist/animation/MasterTimeline.d.ts.map +1 -1
  23. package/dist/animation/movement/Rotate.d.ts +2 -7
  24. package/dist/animation/movement/Rotate.d.ts.map +1 -1
  25. package/dist/animation/transform/PointMorphStrategy.d.ts.map +1 -1
  26. package/dist/core/AnimateProxy.d.ts +3 -5
  27. package/dist/core/AnimateProxy.d.ts.map +1 -1
  28. package/dist/core/Camera.d.ts +37 -0
  29. package/dist/core/Camera.d.ts.map +1 -1
  30. package/dist/core/CameraExtensions.d.ts +33 -1
  31. package/dist/core/CameraExtensions.d.ts.map +1 -1
  32. package/dist/core/Group.d.ts +3 -11
  33. package/dist/core/Group.d.ts.map +1 -1
  34. package/dist/core/Mobject.d.ts +33 -7
  35. package/dist/core/Mobject.d.ts.map +1 -1
  36. package/dist/core/MobjectPositioning.d.ts +2 -5
  37. package/dist/core/MobjectPositioning.d.ts.map +1 -1
  38. package/dist/core/MobjectTypes.d.ts +21 -4
  39. package/dist/core/MobjectTypes.d.ts.map +1 -1
  40. package/dist/core/Renderer.d.ts +3 -0
  41. package/dist/core/Renderer.d.ts.map +1 -1
  42. package/dist/core/Scene.d.ts +50 -0
  43. package/dist/core/Scene.d.ts.map +1 -1
  44. package/dist/core/ThreeDScene.d.ts +3 -1
  45. package/dist/core/ThreeDScene.d.ts.map +1 -1
  46. package/dist/core/VGroup.d.ts +11 -19
  47. package/dist/core/VGroup.d.ts.map +1 -1
  48. package/dist/core/VMobject.d.ts +14 -1
  49. package/dist/core/VMobject.d.ts.map +1 -1
  50. package/dist/core/VMobjectGeometry.d.ts +20 -10
  51. package/dist/core/VMobjectGeometry.d.ts.map +1 -1
  52. package/dist/core/VMobjectRendering.d.ts +5 -0
  53. package/dist/core/VMobjectRendering.d.ts.map +1 -1
  54. package/dist/core/VMobjectTransformAlignment.d.ts +9 -0
  55. package/dist/core/VMobjectTransformAlignment.d.ts.map +1 -1
  56. package/dist/{html-DU38zqaN.js → html-Bza5WY1y.js} +6 -6
  57. package/dist/{html-DjkQuIHJ.js → html-bhzMuE8p.js} +6 -6
  58. package/dist/index.d.ts +4 -3
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +2 -4
  61. package/dist/integrations/react.js +16 -18
  62. package/dist/integrations/vue.js +15 -17
  63. package/dist/interaction/OrbitControls.d.ts +1 -1
  64. package/dist/interaction/OrbitControls.d.ts.map +1 -1
  65. package/dist/{lengths-CP7zmbxJ.js → lengths-D2zTYMUu.js} +2 -2
  66. package/dist/{liteAdaptor-BLgze3o2.js → liteAdaptor-BkxB5CGC.js} +3 -3
  67. package/dist/{liteAdaptor-zXv-jsO1.js → liteAdaptor-LMKuWwg1.js} +3 -3
  68. package/dist/manim-web.browser.js +8668 -7171
  69. package/dist/{mathjax-7LgaTjtj.js → mathjax-CPQWkQEv.js} +2 -2
  70. package/dist/{mathjax-CoSFlQ0H.js → mathjax-b-GTdZgw.js} +2 -2
  71. package/dist/{mo-CNYDGAsg.js → mo-D4wFHS6V.js} +2 -2
  72. package/dist/{mo-C5uLT3Z9.js → mo-hAX79Dzl.js} +2 -2
  73. package/dist/mobjects/geometry/AngleShapes.d.ts +0 -4
  74. package/dist/mobjects/geometry/AngleShapes.d.ts.map +1 -1
  75. package/dist/mobjects/geometry/CubicBezier.d.ts.map +1 -1
  76. package/dist/mobjects/geometry/PolygonExtensions.d.ts.map +1 -1
  77. package/dist/mobjects/graphing/ComplexPlane.d.ts +41 -1
  78. package/dist/mobjects/graphing/ComplexPlane.d.ts.map +1 -1
  79. package/dist/mobjects/graphing/Vector.d.ts.map +1 -1
  80. package/dist/mobjects/point/Mobject1D.d.ts.map +1 -1
  81. package/dist/mobjects/point/Mobject2D.d.ts.map +1 -1
  82. package/dist/mobjects/point/PMobject.d.ts +8 -2
  83. package/dist/mobjects/point/PMobject.d.ts.map +1 -1
  84. package/dist/mobjects/point/PointMobject.d.ts.map +1 -1
  85. package/dist/mobjects/text/Code.d.ts.map +1 -1
  86. package/dist/mobjects/text/MathTex.d.ts +9 -0
  87. package/dist/mobjects/text/MathTex.d.ts.map +1 -1
  88. package/dist/mobjects/text/MathTexImage.d.ts.map +1 -1
  89. package/dist/mobjects/text/Text.d.ts.map +1 -1
  90. package/dist/mobjects/text/TextGlyphGroup.d.ts.map +1 -1
  91. package/dist/mobjects/three-d/Line3D.d.ts +10 -56
  92. package/dist/mobjects/three-d/Line3D.d.ts.map +1 -1
  93. package/dist/player/Player.d.ts +36 -29
  94. package/dist/player/Player.d.ts.map +1 -1
  95. package/dist/player/PlayerUI.d.ts.map +1 -1
  96. package/dist/player/RecordingScene.d.ts +37 -0
  97. package/dist/player/RecordingScene.d.ts.map +1 -0
  98. package/dist/{src-CW4pfZdP.js → src-BlTk3Bta.js} +8798 -7302
  99. package/dist/{svg-CYweEoZ1.js → svg-DNS5Hwhk.js} +268 -253
  100. package/dist/{svg-swSF_J59.js → svg-DVUoAdmC.js} +268 -253
  101. package/dist/test-setup/vitest-setup.d.ts +20 -0
  102. package/dist/test-setup/vitest-setup.d.ts.map +1 -0
  103. package/dist/{tex-C4_queV-.js → tex-BQCLd0dF.js} +19 -15
  104. package/dist/{tex-CA5MLeEe.js → tex-Cd_bTYKG.js} +19 -15
  105. package/dist/utils/axis.d.ts +4 -0
  106. package/dist/utils/axis.d.ts.map +1 -0
  107. package/dist/utils/logger.d.ts +37 -0
  108. package/dist/utils/logger.d.ts.map +1 -1
  109. package/dist/utils/math.d.ts +4 -0
  110. package/dist/utils/math.d.ts.map +1 -1
  111. package/dist/utils/vectors.d.ts +54 -1
  112. package/dist/utils/vectors.d.ts.map +1 -1
  113. package/package.json +8 -6
  114. package/dist/Factory-D-whCqrb.js +0 -107
  115. package/dist/GifExporter-BrxY_q7e.js +0 -338
  116. package/dist/GifExporter-S2pbxMc5.js +0 -338
  117. package/dist/Options-XPptO-6X.js +0 -63
  118. package/dist/VideoExporter-6ikT3u9H.js +0 -102
  119. package/dist/VideoExporter-D_RxVahH.js +0 -102
  120. package/dist/lengths-D4tR1gYA.js +0 -54
  121. package/dist/rolldown-runtime-DnwLefa7.js +0 -23
  122. /package/dist/{Factory-BKM7FEO-.js → Factory-Ba6Nqb3M.js} +0 -0
  123. /package/dist/{Options-DRlTi0G8.js → Options-DMK2wYar.js} +0 -0
package/README.md CHANGED
@@ -122,6 +122,26 @@ Have existing Manim scripts? Convert them:
122
122
  node tools/py2ts.cjs input.py -o output.ts
123
123
  ```
124
124
 
125
+ ## Logging
126
+
127
+ manim-web logs through a small structured logger. Subscribe to log messages
128
+ with `onLog` — useful for surfacing errors in your UI or forwarding them to a
129
+ server (handy for AI agents that write and debug scenes):
130
+
131
+ ```ts
132
+ import { onLog } from 'manim-web';
133
+
134
+ const unsubscribe = onLog((entry) => {
135
+ // entry = { level, message, timestamp } — always JSON-serializable
136
+ fetch('/__log', { method: 'POST', body: JSON.stringify(entry) });
137
+ });
138
+
139
+ unsubscribe(); // stop receiving log messages
140
+ ```
141
+
142
+ Forwarded messages are sanitized (tokens, keys, and emails are redacted) and
143
+ respect the `LOG_LEVEL` environment variable (`debug` | `info` | `warn` | `error`).
144
+
125
145
  ## Contributing
126
146
 
127
147
  ```bash
@@ -1,8 +1,8 @@
1
- import { h as e } from "./mo-C5uLT3Z9.js";
2
- import { A as t, F as n, G as r, H as i, I as a, J as o, L as s, P as c, Q as l, W as u, X as d, Y as f, Z as p, d as m, i as h, n as g, q as _, r as v, t as y, z as b } from "./ParseMethods-D3_HeS1K.js";
3
- import { n as x } from "./lengths-D4tR1gYA.js";
4
- import { a as S } from "./NewcommandMethods-C_E3iLoK.js";
5
- import { NewcommandConfig as C } from "./NewcommandConfiguration-bJ6P1rBY.js";
1
+ import { h as e } from "./mo-hAX79Dzl.js";
2
+ import { A as t, F as n, G as r, H as i, I as a, J as o, L as s, P as c, Q as l, W as u, X as d, Y as f, Z as p, d as m, i as h, n as g, q as _, r as v, t as y, z as b } from "./ParseMethods-Deqa7kJ6.js";
3
+ import { n as x } from "./lengths-D2zTYMUu.js";
4
+ import { a as S } from "./NewcommandMethods-DTf_dan5.js";
5
+ import { NewcommandConfig as C } from "./NewcommandConfiguration-BN_OlLcO.js";
6
6
  //#region node_modules/@mathjax/src/mjs/input/tex/ams/AmsItems.js
7
7
  var w = class extends h {
8
8
  constructor(e, ...t) {
@@ -1,8 +1,8 @@
1
- import { h as e } from "./mo-CNYDGAsg.js";
2
- import { A as t, F as n, G as r, H as i, I as a, J as o, L as s, P as c, Q as l, W as u, X as d, Y as f, Z as p, d as m, i as h, n as g, q as _, r as v, t as y, z as b } from "./ParseMethods-BMPfzfQC.js";
3
- import { n as x } from "./lengths-CP7zmbxJ.js";
4
- import { a as S } from "./NewcommandMethods-Cb7yFm5P.js";
5
- import { NewcommandConfig as C } from "./NewcommandConfiguration-BPjclFig.js";
1
+ import { h as e } from "./mo-D4wFHS6V.js";
2
+ import { A as t, F as n, G as r, H as i, I as a, J as o, L as s, P as c, Q as l, W as u, X as d, Y as f, Z as p, d as m, i as h, n as g, q as _, r as v, t as y, z as b } from "./ParseMethods-Dt5bYDSZ.js";
3
+ import { n as x } from "./lengths-D2zTYMUu.js";
4
+ import { a as S } from "./NewcommandMethods-D5bueYYE.js";
5
+ import { NewcommandConfig as C } from "./NewcommandConfiguration-DZ3mSCpD.js";
6
6
  //#region node_modules/@mathjax/src/mjs/input/tex/ams/AmsItems.js
7
7
  var w = class extends h {
8
8
  constructor(e, ...t) {
@@ -1,6 +1,6 @@
1
- import { n as e } from "./Options-XPptO-6X.js";
2
- import { A as t, B as n, F as r, L as i, R as a, X as o, Y as s, t as c } from "./ParseMethods-BMPfzfQC.js";
3
- import { n as l, t as u } from "./NewcommandMethods-Cb7yFm5P.js";
1
+ import { n as e } from "./Options-DMK2wYar.js";
2
+ import { A as t, B as n, F as r, L as i, R as a, X as o, Y as s, t as c } from "./ParseMethods-Dt5bYDSZ.js";
3
+ import { n as l, t as u } from "./NewcommandMethods-D5bueYYE.js";
4
4
  //#region node_modules/@mathjax/src/mjs/input/tex/configmacros/ConfigMacrosConfiguration.js
5
5
  var d = "configmacros-map", f = "configmacros-active-map", p = "configmacros-env-map";
6
6
  function m(e) {
@@ -1,6 +1,6 @@
1
- import { n as e } from "./Options-DRlTi0G8.js";
2
- import { A as t, B as n, F as r, L as i, R as a, X as o, Y as s, t as c } from "./ParseMethods-D3_HeS1K.js";
3
- import { n as l, t as u } from "./NewcommandMethods-C_E3iLoK.js";
1
+ import { n as e } from "./Options-DMK2wYar.js";
2
+ import { A as t, B as n, F as r, L as i, R as a, X as o, Y as s, t as c } from "./ParseMethods-Deqa7kJ6.js";
3
+ import { n as l, t as u } from "./NewcommandMethods-DTf_dan5.js";
4
4
  //#region node_modules/@mathjax/src/mjs/input/tex/configmacros/ConfigMacrosConfiguration.js
5
5
  var d = "configmacros-map", f = "configmacros-active-map", p = "configmacros-env-map";
6
6
  function m(e) {
@@ -1,5 +1,5 @@
1
- import { a as e } from "./mathjax-CoSFlQ0H.js";
2
- import { r as t } from "./Styles-J-6R3Vr8.js";
1
+ import { a as e } from "./mathjax-CPQWkQEv.js";
2
+ import { r as t } from "./Styles-BILrGVps.js";
3
3
  //#region node_modules/@mathjax/src/mjs/util/Entities.js
4
4
  var n = { loadMissingEntities: !0 }, r = {
5
5
  ApplyFunction: "⁡",
@@ -1,5 +1,5 @@
1
- import { a as e } from "./mathjax-7LgaTjtj.js";
2
- import { r as t } from "./Styles-Dky5jZUe.js";
1
+ import { a as e } from "./mathjax-b-GTdZgw.js";
2
+ import { r as t } from "./Styles-DQSruwWe.js";
3
3
  //#region node_modules/@mathjax/src/mjs/util/Entities.js
4
4
  var n = { loadMissingEntities: !0 }, r = {
5
5
  ApplyFunction: "⁡",
@@ -1,5 +1,5 @@
1
- import { o as e, t } from "./Options-XPptO-6X.js";
2
- import { b as n, f as r, h as i, m as a, o, p as s, t as c, u as l, v as u, x as d, y as f } from "./mo-CNYDGAsg.js";
1
+ import { o as e, t } from "./Options-DMK2wYar.js";
2
+ import { b as n, f as r, h as i, m as a, o, p as s, t as c, u as l, v as u, x as d, y as f } from "./mo-D4wFHS6V.js";
3
3
  //#region node_modules/@mathjax/src/mjs/core/OutputJax.js
4
4
  var p = class {
5
5
  constructor(n = {}) {
@@ -1,5 +1,5 @@
1
- import { o as e, t } from "./Options-DRlTi0G8.js";
2
- import { b as n, f as r, h as i, m as a, o, p as s, t as c, u as l, v as u, x as d, y as f } from "./mo-C5uLT3Z9.js";
1
+ import { o as e, t } from "./Options-DMK2wYar.js";
2
+ import { b as n, f as r, h as i, m as a, o, p as s, t as c, u as l, v as u, x as d, y as f } from "./mo-hAX79Dzl.js";
3
3
  //#region node_modules/@mathjax/src/mjs/core/OutputJax.js
4
4
  var p = class {
5
5
  constructor(n = {}) {
@@ -1,5 +1,5 @@
1
- import { o as e, t } from "./Options-DRlTi0G8.js";
2
- import { x as n } from "./mo-C5uLT3Z9.js";
1
+ import { o as e, t } from "./Options-DMK2wYar.js";
2
+ import { x as n } from "./mo-hAX79Dzl.js";
3
3
  //#region node_modules/@mathjax/src/mjs/core/InputJax.js
4
4
  var r = class {
5
5
  constructor(r = {}) {
@@ -1,5 +1,5 @@
1
- import { o as e, t } from "./Options-XPptO-6X.js";
2
- import { x as n } from "./mo-CNYDGAsg.js";
1
+ import { o as e, t } from "./Options-DMK2wYar.js";
2
+ import { x as n } from "./mo-D4wFHS6V.js";
3
3
  //#region node_modules/@mathjax/src/mjs/core/InputJax.js
4
4
  var r = class {
5
5
  constructor(r = {}) {
@@ -1,5 +1,5 @@
1
- import { A as e, F as t, I as n, L as r, X as i, Y as a, t as o } from "./ParseMethods-BMPfzfQC.js";
2
- import { i as s, n as c, r as l, t as u } from "./NewcommandMethods-Cb7yFm5P.js";
1
+ import { A as e, F as t, I as n, L as r, X as i, Y as a, t as o } from "./ParseMethods-Deqa7kJ6.js";
2
+ import { i as s, n as c, r as l, t as u } from "./NewcommandMethods-DTf_dan5.js";
3
3
  //#region node_modules/@mathjax/src/mjs/input/tex/newcommand/NewcommandMappings.js
4
4
  new t("Newcommand-macros", {
5
5
  newcommand: u.NewCommand,
@@ -1,5 +1,5 @@
1
- import { A as e, F as t, I as n, L as r, X as i, Y as a, t as o } from "./ParseMethods-D3_HeS1K.js";
2
- import { i as s, n as c, r as l, t as u } from "./NewcommandMethods-C_E3iLoK.js";
1
+ import { A as e, F as t, I as n, L as r, X as i, Y as a, t as o } from "./ParseMethods-Dt5bYDSZ.js";
2
+ import { i as s, n as c, r as l, t as u } from "./NewcommandMethods-D5bueYYE.js";
3
3
  //#region node_modules/@mathjax/src/mjs/input/tex/newcommand/NewcommandMappings.js
4
4
  new t("Newcommand-macros", {
5
5
  newcommand: u.NewCommand,
@@ -1,4 +1,4 @@
1
- import { B as e, I as t, J as n, K as r, N as i, P as a, R as o, V as s, W as c, X as l, n as u, q as d } from "./ParseMethods-D3_HeS1K.js";
1
+ import { B as e, I as t, J as n, K as r, N as i, P as a, R as o, V as s, W as c, X as l, n as u, q as d } from "./ParseMethods-Dt5bYDSZ.js";
2
2
  //#region node_modules/@mathjax/src/mjs/input/tex/newcommand/NewcommandUtil.js
3
3
  var f;
4
4
  (function(e) {
@@ -27,7 +27,7 @@ var p = -100, m = {
27
27
  if (o !== e.i && (i[a] = e.string.substring(o, e.i)), r = e.string.charAt(++e.i), !r.match(/^[1-9]$/)) throw new d("CantUseHash2", "Illegal use of # in template for %1", n);
28
28
  if (parseInt(r) !== ++a) throw new d("SequentialParam", "Parameters for %1 must be numbered sequentially", n);
29
29
  o = e.i + 1;
30
- } else if (r === "{") return o !== e.i && (i[a] = e.string.substring(o, e.i)), i.length > 0 ? [a.toString()].concat(i) : a;
30
+ } else if (r === "{") return o !== e.i && (i[a] = e.string.substring(o, e.i), i[a].replace(/^ +/, "") === "" && i.slice(0, a).join("") === "") ? a : i.length > 0 ? [a.toString()].concat(i) : a;
31
31
  e.i++;
32
32
  }
33
33
  throw new d("MissingReplacementString", "Missing replacement string for definition of %1", t);
@@ -1,4 +1,4 @@
1
- import { B as e, I as t, J as n, K as r, N as i, P as a, R as o, V as s, W as c, X as l, n as u, q as d } from "./ParseMethods-BMPfzfQC.js";
1
+ import { B as e, I as t, J as n, K as r, N as i, P as a, R as o, V as s, W as c, X as l, n as u, q as d } from "./ParseMethods-Deqa7kJ6.js";
2
2
  //#region node_modules/@mathjax/src/mjs/input/tex/newcommand/NewcommandUtil.js
3
3
  var f;
4
4
  (function(e) {
@@ -27,7 +27,7 @@ var p = -100, m = {
27
27
  if (o !== e.i && (i[a] = e.string.substring(o, e.i)), r = e.string.charAt(++e.i), !r.match(/^[1-9]$/)) throw new d("CantUseHash2", "Illegal use of # in template for %1", n);
28
28
  if (parseInt(r) !== ++a) throw new d("SequentialParam", "Parameters for %1 must be numbered sequentially", n);
29
29
  o = e.i + 1;
30
- } else if (r === "{") return o !== e.i && (i[a] = e.string.substring(o, e.i)), i.length > 0 ? [a.toString()].concat(i) : a;
30
+ } else if (r === "{") return o !== e.i && (i[a] = e.string.substring(o, e.i), i[a].replace(/^ +/, "") === "" && i.slice(0, a).join("") === "") ? a : i.length > 0 ? [a.toString()].concat(i) : a;
31
31
  e.i++;
32
32
  }
33
33
  throw new d("MissingReplacementString", "Missing replacement string for definition of %1", t);
@@ -1,9 +1,9 @@
1
- import { o as e, r as t, t as n } from "./Options-XPptO-6X.js";
2
- import { o as r } from "./mathjax-CoSFlQ0H.js";
3
- import { n as i } from "./Styles-J-6R3Vr8.js";
4
- import { t as a } from "./Entities-B1o7gN0J.js";
5
- import { d as o, h as s, i as c, p as l, t as u, x as d } from "./mo-CNYDGAsg.js";
6
- import { r as f } from "./lengths-CP7zmbxJ.js";
1
+ import { o as e, r as t, t as n } from "./Options-DMK2wYar.js";
2
+ import { o as r } from "./mathjax-CPQWkQEv.js";
3
+ import { n as i } from "./Styles-BILrGVps.js";
4
+ import { t as a } from "./Entities-Dw6381dl.js";
5
+ import { d as o, h as s, i as c, p as l, t as u, x as d } from "./mo-hAX79Dzl.js";
6
+ import { r as f } from "./lengths-D2zTYMUu.js";
7
7
  //#region node_modules/@mathjax/src/mjs/input/tex/NodeUtil.js
8
8
  var p = {
9
9
  attrs: new Set([
@@ -2625,7 +2625,7 @@ var Q = {
2625
2625
  stretchy: !1
2626
2626
  }, n);
2627
2627
  let r = e.create("token", "mo", n, t.char);
2628
- e.Push(r);
2628
+ t.char === "|" && r.setProperty("keep-attrs", "stretchy"), e.Push(r);
2629
2629
  },
2630
2630
  environment(e, t, n, r) {
2631
2631
  let i = e.itemFactory.create("begin").setProperty("name", t);
@@ -1,9 +1,9 @@
1
- import { o as e, r as t, t as n } from "./Options-DRlTi0G8.js";
2
- import { o as r } from "./mathjax-7LgaTjtj.js";
3
- import { n as i } from "./Styles-Dky5jZUe.js";
4
- import { t as a } from "./Entities-C82lnCux.js";
5
- import { d as o, h as s, i as c, p as l, t as u, x as d } from "./mo-C5uLT3Z9.js";
6
- import { r as f } from "./lengths-D4tR1gYA.js";
1
+ import { o as e, r as t, t as n } from "./Options-DMK2wYar.js";
2
+ import { o as r } from "./mathjax-b-GTdZgw.js";
3
+ import { n as i } from "./Styles-DQSruwWe.js";
4
+ import { t as a } from "./Entities-bJKKDYjE.js";
5
+ import { d as o, h as s, i as c, p as l, t as u, x as d } from "./mo-D4wFHS6V.js";
6
+ import { r as f } from "./lengths-D2zTYMUu.js";
7
7
  //#region node_modules/@mathjax/src/mjs/input/tex/NodeUtil.js
8
8
  var p = {
9
9
  attrs: new Set([
@@ -2625,7 +2625,7 @@ var Q = {
2625
2625
  stretchy: !1
2626
2626
  }, n);
2627
2627
  let r = e.create("token", "mo", n, t.char);
2628
- e.Push(r);
2628
+ t.char === "|" && r.setProperty("keep-attrs", "stretchy"), e.Push(r);
2629
2629
  },
2630
2630
  environment(e, t, n, r) {
2631
2631
  let i = e.itemFactory.create("begin").setProperty("name", t);
@@ -1,4 +1,4 @@
1
- import { t as e } from "./mathjax-7LgaTjtj.js";
1
+ import { t as e } from "./mathjax-CPQWkQEv.js";
2
2
  //#region node_modules/@mathjax/src/mjs/util/AsyncLoad.js
3
3
  function t(t) {
4
4
  return e.asyncLoad ? new Promise((n, r) => {
@@ -1,4 +1,4 @@
1
- import { t as e } from "./mathjax-CoSFlQ0H.js";
1
+ import { t as e } from "./mathjax-b-GTdZgw.js";
2
2
  //#region node_modules/@mathjax/src/mjs/util/AsyncLoad.js
3
3
  function t(t) {
4
4
  return e.asyncLoad ? new Promise((n, r) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Animation.d.ts","sourceRoot":"","sources":["../../src/animation/Animation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAU,MAAM,mBAAmB,CAAC;AAEzD,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACtC;AAED,8BAAsB,SAAS;IAC7B,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEhC,wDAAwD;IACxD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C,yCAAyC;IACzC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAS;IAEvC,uCAAuC;IACvC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IAErC;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAS;IAEzB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAAwB;gBAEtC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB;IAM5D;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAmBb;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;OAGG;IACH,MAAM,IAAI,IAAI;IAId;;;;;OAKG;IACH,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAM7C;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAEzC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAoB9C;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;;;OAIG;IACH,KAAK,IAAI,IAAI;IA2Bb;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED;;OAEG;IACH,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAEhC;CACF"}
1
+ {"version":3,"file":"Animation.d.ts","sourceRoot":"","sources":["../../src/animation/Animation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAU,MAAM,mBAAmB,CAAC;AAGzD,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACtC;AAED,8BAAsB,SAAS;IAC7B,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEhC,wDAAwD;IACxD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE3C,yCAAyC;IACzC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAS;IAEvC,uCAAuC;IACvC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IAErC;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAS;IAEzB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAAwB;gBAEtC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB;IAQ5D;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IA+Bb;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;;OAGG;IACH,MAAM,IAAI,IAAI;IAId;;;;;OAKG;IACH,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAM7C;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAEzC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAoB9C;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;;;OAIG;IACH,KAAK,IAAI,IAAI;IA2Bb;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED;;OAEG;IACH,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAEhC;CACF"}
@@ -12,8 +12,44 @@ export interface Segment {
12
12
  /** Whether this is a wait/pause segment */
13
13
  isWait: boolean;
14
14
  }
15
+ export interface Slide {
16
+ /** Index in the slides array */
17
+ readonly index: number;
18
+ /** First segment in this slide */
19
+ readonly startSegmentIndex: number;
20
+ /** Last segment in this slide (inclusive) */
21
+ readonly endSegmentIndex: number;
22
+ /** = segments[startSegmentIndex].startTime */
23
+ readonly startTime: number;
24
+ /** = segments[endSegmentIndex].endTime */
25
+ readonly endTime: number;
26
+ /**
27
+ * Replay this slide in slidesMode until the user navigates away
28
+ * (→, ←, public seek out of the slide, or setSlidesMode(false)).
29
+ * Wins over `autoNext` when both are set.
30
+ */
31
+ readonly loop: boolean;
32
+ /**
33
+ * Auto-advance to the next slide when this slide finishes (slidesMode only).
34
+ * Ignored if `loop` is also true. Final autoNext slide pauses normally.
35
+ */
36
+ readonly autoNext: boolean;
37
+ }
38
+ export interface SlideOptions {
39
+ /** Replay this slide in slidesMode until the user advances. */
40
+ loop?: boolean;
41
+ /** Auto-advance to the next slide when this slide finishes (slidesMode only). */
42
+ autoNext?: boolean;
43
+ }
15
44
  export declare class MasterTimeline extends Timeline {
16
45
  private _segments;
46
+ private _slides;
47
+ /**
48
+ * Slide boundaries recorded by beginSlide() during recording. Each entry
49
+ * means "the segment at this index starts a new slide with these opts."
50
+ * Consumed by finalizeSlides().
51
+ */
52
+ private _slideBoundaries;
17
53
  /**
18
54
  * Maps mobjects to the segment index where they first appear.
19
55
  * Used by seek() to hide mobjects that haven't been introduced yet.
@@ -45,17 +81,68 @@ export declare class MasterTimeline extends Timeline {
45
81
  reset(): this;
46
82
  /**
47
83
  * Add a segment containing one or more parallel animations.
48
- * Returns the segment's start time (for the recorder to resolve).
49
84
  */
50
85
  addSegment(animations: Animation[]): Segment;
51
86
  /**
52
87
  * Add a wait (pause) segment with no animations.
53
88
  */
54
89
  addWaitSegment(duration: number): Segment;
90
+ /**
91
+ * Record a slide boundary: the next segment added will start a new slide
92
+ * with the given options. Inspired by manim-slides' `next_slide(...)` — the
93
+ * options configure the slide that *follows* this call.
94
+ *
95
+ * If no boundary is ever recorded, every segment becomes its own slide
96
+ * (per-play behavior, used by existing slidesMode callers).
97
+ *
98
+ * Calling `beginSlide()` twice at the same segment index (i.e. with no
99
+ * intervening play/wait) drops the earlier call's options, since an
100
+ * empty slide cannot carry options into anything that will play. We warn
101
+ * to surface the likely user error.
102
+ */
103
+ beginSlide(opts?: SlideOptions): void;
104
+ /**
105
+ * Build the `_slides` array from recorded segments and slide boundaries.
106
+ * Call once after the recording builder finishes; idempotent — calling
107
+ * twice with the same `_segments` / `_slideBoundaries` produces the same
108
+ * `_slides`.
109
+ *
110
+ * - No boundaries recorded: each segment is its own slide.
111
+ * - Otherwise: segments before the first boundary form an implicit slide 0
112
+ * with default opts; each boundary opens a new slide with its opts that
113
+ * captures all subsequent segments up to the next boundary (or the end).
114
+ *
115
+ * Empty slides (consecutive boundaries with no plays between them) are
116
+ * skipped — they have no animations and no duration to occupy.
117
+ *
118
+ * Throws if any slide carries `loop: true` but has zero total duration,
119
+ * since the player would rewind every frame.
120
+ */
121
+ finalizeSlides(): void;
122
+ /**
123
+ * Single construction site for Slide: enforces invariants, normalises opts
124
+ * (`loop` wins over `autoNext`), and validates zero-duration loops.
125
+ */
126
+ private _buildSlide;
55
127
  /**
56
128
  * Get all segments.
57
129
  */
58
130
  getSegments(): readonly Segment[];
131
+ /**
132
+ * Get all slides.
133
+ */
134
+ getSlides(): readonly Slide[];
135
+ /**
136
+ * Get the slide active at the given time. Returns `null` if `time` is
137
+ * before the first slide's startTime or no slides exist.
138
+ */
139
+ getSlideAtTime(time: number): Slide | null;
140
+ /**
141
+ * Get the currently-active slide based on _currentTime.
142
+ */
143
+ getCurrentSlide(): Slide | null;
144
+ /** Number of slides built by finalizeSlides(). */
145
+ get slideCount(): number;
59
146
  /**
60
147
  * Get the segment at the given time.
61
148
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MasterTimeline.d.ts","sourceRoot":"","sources":["../../src/animation/MasterTimeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,OAAO;IACtB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,2CAA2C;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,OAAO,CAAC,SAAS,CAAiB;IAClC;;;OAGG;IACH,OAAO,CAAC,oBAAoB,CAAgD;IAC5E;;;;OAIG;IACH,OAAO,CAAC,sBAAsB,CAAgD;IAE9E;;;;;OAKG;IACM,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAmCjC;;;;;OAKG;IACM,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IA8BjC;;OAEG;IACM,KAAK,IAAI,IAAI;IAMtB;;;OAGG;IACH,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO;IA2B5C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAmBzC;;OAEG;IACH,WAAW,IAAI,SAAS,OAAO,EAAE;IAIjC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAS9C;;OAEG;IACH,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAInC;;;OAGG;IACH,WAAW,IAAI,OAAO,GAAG,IAAI;IAY7B;;;;OAIG;IACH,WAAW,IAAI,OAAO,GAAG,IAAI;IAsB7B;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;CACF;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,cAAc,CAE/C"}
1
+ {"version":3,"file":"MasterTimeline.d.ts","sourceRoot":"","sources":["../../src/animation/MasterTimeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,OAAO;IACtB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,2CAA2C;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,gCAAgC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,6CAA6C;IAC7C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,OAAO,CAAe;IAC9B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB,CAAwD;IAChF;;;OAGG;IACH,OAAO,CAAC,oBAAoB,CAAgD;IAC5E;;;;OAIG;IACH,OAAO,CAAC,sBAAsB,CAAgD;IAE9E;;;;;OAKG;IACM,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAmCjC;;;;;OAKG;IACM,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IA8BjC;;OAEG;IACM,KAAK,IAAI,IAAI;IAMtB;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO;IA2B5C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAmBzC;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,IAAI,GAAE,YAAiB,GAAG,IAAI;IAkBzC;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,IAAI,IAAI;IA+BtB;;;OAGG;IACH,OAAO,CAAC,WAAW;IA4BnB;;OAEG;IACH,WAAW,IAAI,SAAS,OAAO,EAAE;IAIjC;;OAEG;IACH,SAAS,IAAI,SAAS,KAAK,EAAE;IAI7B;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAS1C;;OAEG;IACH,eAAe,IAAI,KAAK,GAAG,IAAI;IAI/B,kDAAkD;IAClD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAS9C;;OAEG;IACH,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAInC;;;OAGG;IACH,WAAW,IAAI,OAAO,GAAG,IAAI;IAY7B;;;;OAIG;IACH,WAAW,IAAI,OAAO,GAAG,IAAI;IAsB7B;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;CACF;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,cAAc,CAE/C"}
@@ -1,14 +1,9 @@
1
1
  import { Mobject, Vector3Tuple } from '../../core/Mobject';
2
+ import { AxisOrOptions } from '../../core/MobjectTypes';
2
3
  import { Animation, AnimationOptions } from '../Animation';
3
- export interface RotateOptions extends AnimationOptions {
4
+ export interface RotateOptions extends AnimationOptions, AxisOrOptions {
4
5
  /** Angle to rotate in radians */
5
6
  angle: number;
6
- /** Axis of rotation [x, y, z], defaults to Z axis [0, 0, 1] */
7
- axis?: Vector3Tuple;
8
- /** Point to rotate about, defaults to mobject center */
9
- aboutPoint?: Vector3Tuple;
10
- /** Edge to rotate about, resolved via bounding box. Mutually exclusive with aboutPoint. */
11
- aboutEdge?: Vector3Tuple;
12
7
  }
13
8
  export declare class Rotate extends Animation {
14
9
  /** Angle to rotate in radians */
@@ -1 +1 @@
1
- {"version":3,"file":"Rotate.d.ts","sourceRoot":"","sources":["../../../src/animation/movement/Rotate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG3D,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,wDAAwD;IACxD,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B;AAED,qBAAa,MAAO,SAAQ,SAAS;IACnC,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAE5B,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI,CAAC;IAEzC,4CAA4C;IAC5C,OAAO,CAAC,kBAAkB,CAA4C;IAEtE,oDAAoD;IACpD,OAAO,CAAC,gBAAgB,CAAsC;IAE9D,qCAAqC;IACrC,OAAO,CAAC,WAAW,CAAsC;IAEzD,mCAAmC;IACnC,OAAO,CAAC,iBAAiB,CAA8B;gBAE3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa;IAQpD;;OAEG;IACM,KAAK,IAAI,IAAI;IA0BtB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IA0BhC;;OAEG;IACM,MAAM,IAAI,IAAI;CAIxB;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GACrC,MAAM,CAER"}
1
+ {"version":3,"file":"Rotate.d.ts","sourceRoot":"","sources":["../../../src/animation/movement/Rotate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAI3D,MAAM,WAAW,aAAc,SAAQ,gBAAgB,EAAE,aAAa;IACpE,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,MAAO,SAAQ,SAAS;IACnC,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAE5B,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI,CAAC;IAEzC,4CAA4C;IAC5C,OAAO,CAAC,kBAAkB,CAA4C;IAEtE,oDAAoD;IACpD,OAAO,CAAC,gBAAgB,CAAsC;IAE9D,qCAAqC;IACrC,OAAO,CAAC,WAAW,CAAsC;IAEzD,mCAAmC;IACnC,OAAO,CAAC,iBAAiB,CAA8B;gBAE3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa;IAUpD;;OAEG;IACM,KAAK,IAAI,IAAI;IA0BtB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IA0BhC;;OAEG;IACM,MAAM,IAAI,IAAI;CAIxB;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GACrC,MAAM,CAOR"}
@@ -1 +1 @@
1
- {"version":3,"file":"PointMorphStrategy.d.ts","sourceRoot":"","sources":["../../../src/animation/transform/PointMorphStrategy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AASzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA2ChD,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,0BAA0B,CAAC,CAAW;IAC9C,OAAO,CAAC,sBAAsB,CAAC,CAAW;IAC1C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,iBAAiB,CAAyB;IAElD,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAoCpE,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,MAAM;IA6Cd,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA2D1F,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;CAkCtE"}
1
+ {"version":3,"file":"PointMorphStrategy.d.ts","sourceRoot":"","sources":["../../../src/animation/transform/PointMorphStrategy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AASzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA2DhD,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,0BAA0B,CAAC,CAAW;IAC9C,OAAO,CAAC,sBAAsB,CAAC,CAAW;IAC1C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,iBAAiB,CAAyB;IAElD,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAoCpE,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,MAAM;IA6Cd,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA6D1F,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;CAmCtE"}
@@ -1,4 +1,4 @@
1
- import { Mobject, Vector3Tuple, MobjectStyle } from './Mobject';
1
+ import { Mobject, Vector3Tuple, MobjectStyle, AxisOrOptions } from './Mobject';
2
2
  import { Animation, AnimationOptions } from '../animation/Animation';
3
3
  import { RateFunction } from '../rate-functions';
4
4
  export declare class AnimateProxy extends Animation {
@@ -14,10 +14,7 @@ export declare class AnimateProxy extends Animation {
14
14
  withRateFunc(fn: RateFunction): this;
15
15
  shift(delta: Vector3Tuple): this;
16
16
  moveTo(target: Vector3Tuple | Mobject, alignedEdge?: Vector3Tuple): this;
17
- rotate(angle: number, axisOrOptions?: Vector3Tuple | {
18
- axis?: Vector3Tuple;
19
- aboutPoint?: Vector3Tuple;
20
- }): this;
17
+ rotate(angle: number, axisOrOptions?: Vector3Tuple | AxisOrOptions): this;
21
18
  scale(factor: number | Vector3Tuple): this;
22
19
  setColor(color: string): this;
23
20
  setOpacity(opacity: number): this;
@@ -37,4 +34,5 @@ export declare class AnimateProxy extends Animation {
37
34
  interpolate(alpha: number): void;
38
35
  finish(): void;
39
36
  }
37
+ export declare function ensureAnimateProxyRegistered(): void;
40
38
  //# sourceMappingURL=AnimateProxy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnimateProxy.d.ts","sourceRoot":"","sources":["../../src/core/AnimateProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAwB,MAAM,WAAW,CAAC;AAEhG,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,KAAK,YAAY,EAAU,MAAM,mBAAmB,CAAC;AAM9D,qBAAa,YAAa,SAAQ,SAAS;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,cAAc,CAAwB;gBAElC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB;IAU5D,4DAA4D;IAC5D,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKnC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IAOpC,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKhC,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,EAAE,WAAW,CAAC,EAAE,YAAY,GAAG,IAAI;IAKxE,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,YAAY,GAAG;QAAE,IAAI,CAAC,EAAE,YAAY,CAAC;QAAC,UAAU,CAAC,EAAE,YAAY,CAAA;KAAE,GAChF,IAAI;IAKP,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAK1C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKjC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKrC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAK/C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAK5C,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI;IAK/B,MAAM,IAAI,IAAI;IAKd,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAQrF,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAKtE,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAKpD,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKrB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKrB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAOZ,KAAK,IAAI,IAAI;IA8CtB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUvB,MAAM,IAAI,IAAI;CAiCxB"}
1
+ {"version":3,"file":"AnimateProxy.d.ts","sourceRoot":"","sources":["../../src/core/AnimateProxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,aAAa,EAEnB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,KAAK,YAAY,EAAU,MAAM,mBAAmB,CAAC;AAM9D,qBAAa,YAAa,SAAQ,SAAS;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,cAAc,CAAwB;gBAElC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB;IAU5D,4DAA4D;IAC5D,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKnC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IAOpC,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKhC,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,EAAE,WAAW,CAAC,EAAE,YAAY,GAAG,IAAI;IAKxE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,YAAY,GAAG,aAAa,GAAG,IAAI;IAKzE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAK1C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKjC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKrC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAK/C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAK5C,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI;IAK/B,MAAM,IAAI,IAAI;IAKd,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAQrF,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAKtE,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAKpD,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKrB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKrB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAOZ,KAAK,IAAI,IAAI;IA8CtB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAUvB,MAAM,IAAI,IAAI;CAiCxB;AAKD,wBAAgB,4BAA4B,IAAI,IAAI,CAInD"}
@@ -104,6 +104,18 @@ export declare class Camera3D {
104
104
  distance: number;
105
105
  };
106
106
  }
107
+ /**
108
+ * How `Camera2D.setAspectRatio` reconciles the user-set frame with the
109
+ * viewport's pixel aspect.
110
+ *
111
+ * - `'fill'` (default): keep `frameHeight`, recompute `frameWidth` from
112
+ * the viewport aspect. Frame is cropped horizontally on wider viewports
113
+ * and over-shows on narrower ones. Back-compatible.
114
+ * - `'contain'`: keep both base `frameWidth` and `frameHeight`. Grow
115
+ * whichever dimension is needed to letterbox so the user's full
116
+ * frame is always visible (no cropping of the intended view).
117
+ */
118
+ export type Camera2DAspectMode = 'fill' | 'contain';
107
119
  /**
108
120
  * Options for configuring a Camera2D.
109
121
  */
@@ -114,6 +126,14 @@ export interface CameraOptions {
114
126
  frameHeight?: number;
115
127
  /** Initial camera position [x, y, z]. Defaults to [0, 0, 10]. */
116
128
  position?: [number, number, number];
129
+ /**
130
+ * Behaviour of `setAspectRatio` when the viewport aspect doesn't match
131
+ * this camera's frame. Defaults to `'fill'` for back-compat — set to
132
+ * `'contain'` (recommended for multi-camera layouts) to make per-camera
133
+ * `frameWidth`/`frameHeight` zoom intent survive the per-viewport
134
+ * aspect adjustment.
135
+ */
136
+ aspectMode?: Camera2DAspectMode;
117
137
  }
118
138
  /**
119
139
  * 2D camera for manimweb scenes.
@@ -123,6 +143,14 @@ export declare class Camera2D {
123
143
  private _camera;
124
144
  private _frameWidth;
125
145
  private _frameHeight;
146
+ /**
147
+ * The frame dimensions the user *asked for*, preserved across
148
+ * `setAspectRatio` calls when `_aspectMode === 'contain'`. Updated
149
+ * whenever the user mutates `frameWidth`/`frameHeight` directly.
150
+ */
151
+ private _userFrameWidth;
152
+ private _userFrameHeight;
153
+ private _aspectMode;
126
154
  private _frame;
127
155
  /**
128
156
  * Create a new 2D camera.
@@ -145,6 +173,15 @@ export declare class Camera2D {
145
173
  * Set the frame height in world units.
146
174
  */
147
175
  set frameHeight(height: number);
176
+ /**
177
+ * Get the current aspect-mode (see {@link Camera2DAspectMode}).
178
+ */
179
+ get aspectMode(): Camera2DAspectMode;
180
+ /**
181
+ * Set the aspect-mode. Re-applies the current aspect ratio so the
182
+ * projection updates immediately.
183
+ */
184
+ set aspectMode(mode: Camera2DAspectMode);
148
185
  /**
149
186
  * Get the camera position.
150
187
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../src/core/Camera.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../src/core/Camera.ts"],"names":[],"mappings":"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"}
@@ -264,6 +264,15 @@ export interface CameraViewport {
264
264
  width: number;
265
265
  /** Height as fraction of canvas height (0-1). */
266
266
  height: number;
267
+ /**
268
+ * Optional border color (any THREE.Color input — `#rrggbb`, named, or
269
+ * 0xrrggbb). When set together with `borderWidth > 0`, MultiCamera
270
+ * draws a rectangle outline around the viewport in canvas-pixel space
271
+ * after the scene render. Off by default.
272
+ */
273
+ borderColor?: number | string;
274
+ /** Optional border thickness in canvas pixels. Defaults to 0 (no border). */
275
+ borderWidth?: number;
267
276
  }
268
277
  /**
269
278
  * Camera entry in the multi-camera system.
@@ -325,6 +334,18 @@ export declare class MultiCamera {
325
334
  * @returns Index of the added camera
326
335
  */
327
336
  addCamera(camera: Camera2D | Camera3D | MovingCamera | ThreeDCamera, viewport: CameraViewport, label?: string): number;
337
+ /**
338
+ * Update the border style of an existing viewport. Passing `null` for
339
+ * either field disables that side of the configuration (e.g. setting
340
+ * `borderWidth` to 0 turns the border off).
341
+ * @param index - Camera index
342
+ * @param style - Partial border style; merged into the existing viewport
343
+ * @returns this for chaining
344
+ */
345
+ setViewportBorder(index: number, style: {
346
+ borderColor?: number | string | null;
347
+ borderWidth?: number | null;
348
+ }): this;
328
349
  /**
329
350
  * Remove a camera by index.
330
351
  * @param index - Index of camera to remove
@@ -412,7 +433,18 @@ export declare class MultiCamera {
412
433
  */
413
434
  render(renderer: THREE.WebGLRenderer, scene: THREE.Scene, canvasWidth: number, canvasHeight: number): void;
414
435
  /**
415
- * Update all cameras that support animation.
436
+ * Lazy-initialized scene + camera + line geometry used to draw viewport
437
+ * borders. Borders are rendered as a single screen-space pass after the
438
+ * main multi-camera render.
439
+ */
440
+ private _borderScene;
441
+ private _borderCamera;
442
+ private _renderBorders;
443
+ /**
444
+ * Update all cameras that support animation. Advances per-camera
445
+ * animation state (MovingCamera/ThreeDCamera) and runs any frame
446
+ * updaters attached to Camera2D entries so secondary cameras can
447
+ * follow targets the same way `scene.camera.frame` does.
416
448
  * @param dt - Delta time in seconds
417
449
  */
418
450
  update(dt: number): void;