manim-web 0.3.18 → 0.3.19

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 (113) hide show
  1. package/README.md +26 -40
  2. package/dist/AllPackages-C4Ha3Jps.js +7912 -0
  3. package/dist/AllPackages-Dwxf_-Ps.js +7912 -0
  4. package/dist/BaseConfiguration-D2fikupy.js +4402 -0
  5. package/dist/BaseConfiguration-DYpI8zxb.js +4402 -0
  6. package/dist/Entities-BxzKxtF2.js +458 -0
  7. package/dist/Entities-gIbwAkB6.js +458 -0
  8. package/dist/GifExporter-7EpPGupp.js +338 -0
  9. package/dist/GifExporter-DCrSD6FV.js +338 -0
  10. package/dist/InputJax-BszJvLkW.js +43 -0
  11. package/dist/InputJax-CgHBfQsv.js +43 -0
  12. package/dist/MathItem-4gYKatZT.js +77 -0
  13. package/dist/MathItem-BGJUnd1K.js +77 -0
  14. package/dist/Options-CQim5zsr.js +188 -0
  15. package/dist/Options-Cn9jv1mh.js +188 -0
  16. package/dist/PrioritizedList-C1R4aNEC.js +36 -0
  17. package/dist/PrioritizedList-lIkFMNlo.js +36 -0
  18. package/dist/Styles-Bi9Db-2J.js +411 -0
  19. package/dist/Styles-CzHPc-An.js +411 -0
  20. package/dist/TeXAtom-Cinii27y.js +2025 -0
  21. package/dist/TeXAtom-DFdvwkN2.js +2025 -0
  22. package/dist/VideoExporter-6w8xBpcV.js +102 -0
  23. package/dist/VideoExporter-DdQb18dC.js +102 -0
  24. package/dist/animation/creation/Create.d.ts +1 -1
  25. package/dist/animation/movement/Rotate.d.ts +2 -0
  26. package/dist/animation/movement/Rotate.d.ts.map +1 -1
  27. package/dist/animation/movement/Scale.d.ts +2 -0
  28. package/dist/animation/movement/Scale.d.ts.map +1 -1
  29. package/dist/animation/transform/ApplyTransforms.d.ts +1 -2
  30. package/dist/animation/transform/ApplyTransforms.d.ts.map +1 -1
  31. package/dist/animation/utility/index.d.ts +2 -0
  32. package/dist/animation/utility/index.d.ts.map +1 -1
  33. package/dist/chunk-DeC0fbbY.js +23 -0
  34. package/dist/core/Group.d.ts +2 -2
  35. package/dist/core/Group.d.ts.map +1 -1
  36. package/dist/core/Mobject.d.ts +26 -6
  37. package/dist/core/Mobject.d.ts.map +1 -1
  38. package/dist/core/MobjectState.d.ts +23 -2
  39. package/dist/core/MobjectState.d.ts.map +1 -1
  40. package/dist/core/Scene.d.ts +7 -1
  41. package/dist/core/Scene.d.ts.map +1 -1
  42. package/dist/core/ThreeDScene.d.ts +17 -0
  43. package/dist/core/ThreeDScene.d.ts.map +1 -1
  44. package/dist/core/VGroup.d.ts +1 -1
  45. package/dist/core/VGroup.d.ts.map +1 -1
  46. package/dist/html-DKkfg_ss.js +1587 -0
  47. package/dist/html-DpiYkktJ.js +1587 -0
  48. package/dist/index.d.ts +1 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +4 -579
  51. package/dist/integrations/react.js +144 -735
  52. package/dist/integrations/vue.js +109 -735
  53. package/dist/interaction/Draggable.d.ts.map +1 -1
  54. package/dist/lengths-C0YS8_KC.js +65 -0
  55. package/dist/lengths-eBH2o1TO.js +65 -0
  56. package/dist/liteAdaptor-CB8lQj3d.js +828 -0
  57. package/dist/liteAdaptor-DvuW8HsZ.js +828 -0
  58. package/dist/manim-web.browser.js +72327 -83816
  59. package/dist/mathjax-BVz9WLAG.js +105 -0
  60. package/dist/mathjax-BbWkqal4.js +2 -0
  61. package/dist/mathjax-BrFZxFhK.js +2 -0
  62. package/dist/mathjax-DdKmwllV.js +105 -0
  63. package/dist/mo-B60kIOAG.js +3271 -0
  64. package/dist/mo-cSv2058o.js +3271 -0
  65. package/dist/mobjects/geometry/AngleShapes.d.ts +8 -0
  66. package/dist/mobjects/geometry/AngleShapes.d.ts.map +1 -1
  67. package/dist/mobjects/geometry/DashedLine.d.ts +2 -2
  68. package/dist/mobjects/geometry/DashedLine.d.ts.map +1 -1
  69. package/dist/mobjects/graphing/Axes.d.ts +2 -2
  70. package/dist/mobjects/graphing/Axes.d.ts.map +1 -1
  71. package/dist/mobjects/graphing/ComplexPlane.d.ts +4 -1
  72. package/dist/mobjects/graphing/ComplexPlane.d.ts.map +1 -1
  73. package/dist/mobjects/matrix/Matrix.d.ts +2 -2
  74. package/dist/mobjects/matrix/Matrix.d.ts.map +1 -1
  75. package/dist/mobjects/point/PGroup.d.ts +1 -1
  76. package/dist/mobjects/point/PGroup.d.ts.map +1 -1
  77. package/dist/mobjects/point/PMobject.d.ts +1 -1
  78. package/dist/mobjects/point/PMobject.d.ts.map +1 -1
  79. package/dist/mobjects/svg/Brace.d.ts +3 -3
  80. package/dist/mobjects/svg/Brace.d.ts.map +1 -1
  81. package/dist/mobjects/table/Table.d.ts +4 -4
  82. package/dist/mobjects/table/Table.d.ts.map +1 -1
  83. package/dist/mobjects/text/MathJaxRenderer.d.ts.map +1 -1
  84. package/dist/mobjects/text/MathTex.d.ts +61 -202
  85. package/dist/mobjects/text/MathTex.d.ts.map +1 -1
  86. package/dist/mobjects/text/MathTexImage.d.ts +254 -0
  87. package/dist/mobjects/text/MathTexImage.d.ts.map +1 -0
  88. package/dist/mobjects/text/MathTexParts.d.ts +10 -10
  89. package/dist/mobjects/text/MathTexParts.d.ts.map +1 -1
  90. package/dist/mobjects/text/Tex.d.ts +2 -7
  91. package/dist/mobjects/text/Tex.d.ts.map +1 -1
  92. package/dist/mobjects/text/Variable.d.ts +5 -5
  93. package/dist/mobjects/text/Variable.d.ts.map +1 -1
  94. package/dist/mobjects/text/index.d.ts +2 -2
  95. package/dist/mobjects/text/index.d.ts.map +1 -1
  96. package/dist/mobjects/text/svgPathParser.d.ts.map +1 -1
  97. package/dist/player/Player.d.ts +8 -2
  98. package/dist/player/Player.d.ts.map +1 -1
  99. package/dist/player/PlayerController.d.ts +2 -0
  100. package/dist/player/PlayerController.d.ts.map +1 -1
  101. package/dist/player/PlayerUI.d.ts +5 -0
  102. package/dist/player/PlayerUI.d.ts.map +1 -1
  103. package/dist/src-0ifQdJUj.js +59703 -0
  104. package/dist/svg-BDTt4xHZ.js +23879 -0
  105. package/dist/svg-DzbC3CbJ.js +23879 -0
  106. package/dist/tex-CRhAZgfS.js +401 -0
  107. package/dist/tex-D3LEgNlQ.js +401 -0
  108. package/dist/utils/math.d.ts +7 -0
  109. package/dist/utils/math.d.ts.map +1 -1
  110. package/package.json +3 -2
  111. package/dist/featureFlags-H97tY2Rw.js +0 -59814
  112. package/dist/mobjects/text/MathTexSVG.d.ts +0 -102
  113. package/dist/mobjects/text/MathTexSVG.d.ts.map +0 -1
@@ -0,0 +1,338 @@
1
+ import { i as e, n as t, r as n, t as r } from "./chunk-DeC0fbbY.js";
2
+ //#region node_modules/gif.js/dist/gif.js
3
+ var i = /* @__PURE__ */ r(((e, t) => {
4
+ (function(n) {
5
+ if (typeof e == "object" && t !== void 0) t.exports = n();
6
+ else if (typeof define == "function" && define.amd) define([], n);
7
+ else {
8
+ var r = typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : this;
9
+ r.GIF = n();
10
+ }
11
+ })(function() {
12
+ return function e(t, r, i) {
13
+ function a(s, c) {
14
+ if (!r[s]) {
15
+ if (!t[s]) {
16
+ var l = typeof n == "function" && n;
17
+ if (!c && l) return l(s, !0);
18
+ if (o) return o(s, !0);
19
+ var u = /* @__PURE__ */ Error("Cannot find module '" + s + "'");
20
+ throw u.code = "MODULE_NOT_FOUND", u;
21
+ }
22
+ var d = r[s] = { exports: {} };
23
+ t[s][0].call(d.exports, function(e) {
24
+ var n = t[s][1][e];
25
+ return a(n || e);
26
+ }, d, d.exports, e, t, r, i);
27
+ }
28
+ return r[s].exports;
29
+ }
30
+ for (var o = typeof n == "function" && n, s = 0; s < i.length; s++) a(i[s]);
31
+ return a;
32
+ }({
33
+ 1: [function(e, t, n) {
34
+ function r() {
35
+ this._events = this._events || {}, this._maxListeners = this._maxListeners || void 0;
36
+ }
37
+ t.exports = r, r.EventEmitter = r, r.prototype._events = void 0, r.prototype._maxListeners = void 0, r.defaultMaxListeners = 10, r.prototype.setMaxListeners = function(e) {
38
+ if (!a(e) || e < 0 || isNaN(e)) throw TypeError("n must be a positive number");
39
+ return this._maxListeners = e, this;
40
+ }, r.prototype.emit = function(e) {
41
+ var t, n, r, a, c, l;
42
+ if (this._events ||= {}, e === "error" && (!this._events.error || o(this._events.error) && !this._events.error.length)) {
43
+ if (t = arguments[1], t instanceof Error) throw t;
44
+ var u = /* @__PURE__ */ Error("Uncaught, unspecified \"error\" event. (" + t + ")");
45
+ throw u.context = t, u;
46
+ }
47
+ if (n = this._events[e], s(n)) return !1;
48
+ if (i(n)) switch (arguments.length) {
49
+ case 1:
50
+ n.call(this);
51
+ break;
52
+ case 2:
53
+ n.call(this, arguments[1]);
54
+ break;
55
+ case 3:
56
+ n.call(this, arguments[1], arguments[2]);
57
+ break;
58
+ default: a = Array.prototype.slice.call(arguments, 1), n.apply(this, a);
59
+ }
60
+ else if (o(n)) for (a = Array.prototype.slice.call(arguments, 1), l = n.slice(), r = l.length, c = 0; c < r; c++) l[c].apply(this, a);
61
+ return !0;
62
+ }, r.prototype.addListener = function(e, t) {
63
+ var n;
64
+ if (!i(t)) throw TypeError("listener must be a function");
65
+ return this._events ||= {}, this._events.newListener && this.emit("newListener", e, i(t.listener) ? t.listener : t), this._events[e] ? o(this._events[e]) ? this._events[e].push(t) : this._events[e] = [this._events[e], t] : this._events[e] = t, o(this._events[e]) && !this._events[e].warned && (n = s(this._maxListeners) ? r.defaultMaxListeners : this._maxListeners, n && n > 0 && this._events[e].length > n && (this._events[e].warned = !0, console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.", this._events[e].length), typeof console.trace == "function" && console.trace())), this;
66
+ }, r.prototype.on = r.prototype.addListener, r.prototype.once = function(e, t) {
67
+ if (!i(t)) throw TypeError("listener must be a function");
68
+ var n = !1;
69
+ function r() {
70
+ this.removeListener(e, r), n || (n = !0, t.apply(this, arguments));
71
+ }
72
+ return r.listener = t, this.on(e, r), this;
73
+ }, r.prototype.removeListener = function(e, t) {
74
+ var n, r, a, s;
75
+ if (!i(t)) throw TypeError("listener must be a function");
76
+ if (!this._events || !this._events[e]) return this;
77
+ if (n = this._events[e], a = n.length, r = -1, n === t || i(n.listener) && n.listener === t) delete this._events[e], this._events.removeListener && this.emit("removeListener", e, t);
78
+ else if (o(n)) {
79
+ for (s = a; s-- > 0;) if (n[s] === t || n[s].listener && n[s].listener === t) {
80
+ r = s;
81
+ break;
82
+ }
83
+ if (r < 0) return this;
84
+ n.length === 1 ? (n.length = 0, delete this._events[e]) : n.splice(r, 1), this._events.removeListener && this.emit("removeListener", e, t);
85
+ }
86
+ return this;
87
+ }, r.prototype.removeAllListeners = function(e) {
88
+ var t, n;
89
+ if (!this._events) return this;
90
+ if (!this._events.removeListener) return arguments.length === 0 ? this._events = {} : this._events[e] && delete this._events[e], this;
91
+ if (arguments.length === 0) {
92
+ for (t in this._events) t !== "removeListener" && this.removeAllListeners(t);
93
+ return this.removeAllListeners("removeListener"), this._events = {}, this;
94
+ }
95
+ if (n = this._events[e], i(n)) this.removeListener(e, n);
96
+ else if (n) for (; n.length;) this.removeListener(e, n[n.length - 1]);
97
+ return delete this._events[e], this;
98
+ }, r.prototype.listeners = function(e) {
99
+ return !this._events || !this._events[e] ? [] : i(this._events[e]) ? [this._events[e]] : this._events[e].slice();
100
+ }, r.prototype.listenerCount = function(e) {
101
+ if (this._events) {
102
+ var t = this._events[e];
103
+ if (i(t)) return 1;
104
+ if (t) return t.length;
105
+ }
106
+ return 0;
107
+ }, r.listenerCount = function(e, t) {
108
+ return e.listenerCount(t);
109
+ };
110
+ function i(e) {
111
+ return typeof e == "function";
112
+ }
113
+ function a(e) {
114
+ return typeof e == "number";
115
+ }
116
+ function o(e) {
117
+ return typeof e == "object" && !!e;
118
+ }
119
+ function s(e) {
120
+ return e === void 0;
121
+ }
122
+ }, {}],
123
+ 2: [function(e, t, n) {
124
+ var r, i, a, o, s = navigator.userAgent.toLowerCase();
125
+ o = navigator.platform.toLowerCase(), r = s.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/) || [
126
+ null,
127
+ "unknown",
128
+ 0
129
+ ], a = r[1] === "ie" && document.documentMode, i = {
130
+ name: r[1] === "version" ? r[3] : r[1],
131
+ version: a || parseFloat(r[1] === "opera" && r[4] ? r[4] : r[2]),
132
+ platform: { name: s.match(/ip(?:ad|od|hone)/) ? "ios" : (s.match(/(?:webos|android)/) || o.match(/mac|win|linux/) || ["other"])[0] }
133
+ }, i[i.name] = !0, i[i.name + parseInt(i.version, 10)] = !0, i.platform[i.platform.name] = !0, t.exports = i;
134
+ }, {}],
135
+ 3: [function(e, t, n) {
136
+ var r, i, a, o = function(e, t) {
137
+ for (var n in t) s.call(t, n) && (e[n] = t[n]);
138
+ function r() {
139
+ this.constructor = e;
140
+ }
141
+ return r.prototype = t.prototype, e.prototype = new r(), e.__super__ = t.prototype, e;
142
+ }, s = {}.hasOwnProperty, c = [].indexOf || function(e) {
143
+ for (var t = 0, n = this.length; t < n; t++) if (t in this && this[t] === e) return t;
144
+ return -1;
145
+ }, l = [].slice;
146
+ r = e("events").EventEmitter, a = e("./browser.coffee"), i = function(e) {
147
+ var t, n;
148
+ o(r, e), t = {
149
+ workerScript: "gif.worker.js",
150
+ workers: 2,
151
+ repeat: 0,
152
+ background: "#fff",
153
+ quality: 10,
154
+ width: null,
155
+ height: null,
156
+ transparent: null,
157
+ debug: !1,
158
+ dither: !1
159
+ }, n = {
160
+ delay: 500,
161
+ copy: !1
162
+ };
163
+ function r(e) {
164
+ var n, r, i;
165
+ for (r in this.running = !1, this.options = {}, this.frames = [], this.freeWorkers = [], this.activeWorkers = [], this.setOptions(e), t) i = t[r], (n = this.options)[r] ?? (n[r] = i);
166
+ }
167
+ return r.prototype.setOption = function(e, t) {
168
+ if (this.options[e] = t, this._canvas != null && (e === "width" || e === "height")) return this._canvas[e] = t;
169
+ }, r.prototype.setOptions = function(e) {
170
+ var t, n = [], r;
171
+ for (t in e) s.call(e, t) && (r = e[t], n.push(this.setOption(t, r)));
172
+ return n;
173
+ }, r.prototype.addFrame = function(e, t) {
174
+ var r, i;
175
+ for (i in t ??= {}, r = {}, r.transparent = this.options.transparent, n) r[i] = t[i] || n[i];
176
+ if (this.options.width ?? this.setOption("width", e.width), this.options.height ?? this.setOption("height", e.height), typeof ImageData < "u" && ImageData !== null && e instanceof ImageData) r.data = e.data;
177
+ else if (typeof CanvasRenderingContext2D < "u" && CanvasRenderingContext2D !== null && e instanceof CanvasRenderingContext2D || typeof WebGLRenderingContext < "u" && WebGLRenderingContext !== null && e instanceof WebGLRenderingContext) t.copy ? r.data = this.getContextData(e) : r.context = e;
178
+ else if (e.childNodes != null) t.copy ? r.data = this.getImageData(e) : r.image = e;
179
+ else throw Error("Invalid image");
180
+ return this.frames.push(r);
181
+ }, r.prototype.render = function() {
182
+ var e, t, n;
183
+ if (this.running) throw Error("Already running");
184
+ if (this.options.width == null || this.options.height == null) throw Error("Width and height must be set prior to rendering");
185
+ if (this.running = !0, this.nextFrame = 0, this.finishedFrames = 0, this.imageParts = function() {
186
+ var e, t, n = [];
187
+ for (e = 0, t = this.frames.length; 0 <= t ? e < t : e > t; 0 <= t ? ++e : --e) n.push(null);
188
+ return n;
189
+ }.call(this), t = this.spawnWorkers(), this.options.globalPalette === !0) this.renderNextFrame();
190
+ else for (e = 0, n = t; 0 <= n ? e < n : e > n; 0 <= n ? ++e : --e) this.renderNextFrame();
191
+ return this.emit("start"), this.emit("progress", 0);
192
+ }, r.prototype.abort = function() {
193
+ for (var e; e = this.activeWorkers.shift(), e != null;) this.log("killing active worker"), e.terminate();
194
+ return this.running = !1, this.emit("abort");
195
+ }, r.prototype.spawnWorkers = function() {
196
+ var e = Math.min(this.options.workers, this.frames.length), t, n;
197
+ return (function() {
198
+ n = [];
199
+ for (var r = t = this.freeWorkers.length; t <= e ? r < e : r > e; t <= e ? r++ : r--) n.push(r);
200
+ return n;
201
+ }).apply(this).forEach(function(e) {
202
+ return function(t) {
203
+ var n;
204
+ return e.log("spawning worker " + t), n = new Worker(e.options.workerScript), n.onmessage = function(t) {
205
+ return e.activeWorkers.splice(e.activeWorkers.indexOf(n), 1), e.freeWorkers.push(n), e.frameFinished(t.data);
206
+ }, e.freeWorkers.push(n);
207
+ };
208
+ }(this)), e;
209
+ }, r.prototype.frameFinished = function(e) {
210
+ var t, n;
211
+ if (this.log("frame " + e.index + " finished - " + this.activeWorkers.length + " active"), this.finishedFrames++, this.emit("progress", this.finishedFrames / this.frames.length), this.imageParts[e.index] = e, this.options.globalPalette === !0 && (this.options.globalPalette = e.globalPalette, this.log("global palette analyzed"), this.frames.length > 2)) for (t = 1, n = this.freeWorkers.length; 1 <= n ? t < n : t > n; 1 <= n ? ++t : --t) this.renderNextFrame();
212
+ return c.call(this.imageParts, null) >= 0 ? this.renderNextFrame() : this.finishRendering();
213
+ }, r.prototype.finishRendering = function() {
214
+ var e, t, n, r, i, a, o, s = 0, c, l, u, d, f, p = this.imageParts, m, h;
215
+ for (i = 0, c = p.length; i < c; i++) t = p[i], s += (t.data.length - 1) * t.pageSize + t.cursor;
216
+ for (s += t.pageSize - t.cursor, this.log("rendering finished - filesize " + Math.round(s / 1e3) + "kb"), e = new Uint8Array(s), d = 0, m = this.imageParts, a = 0, l = m.length; a < l; a++) for (t = m[a], h = t.data, n = o = 0, u = h.length; o < u; n = ++o) f = h[n], e.set(f, d), n === t.data.length - 1 ? d += t.cursor : d += t.pageSize;
217
+ return r = new Blob([e], { type: "image/gif" }), this.emit("finished", r, e);
218
+ }, r.prototype.renderNextFrame = function() {
219
+ var e, t, n;
220
+ if (this.freeWorkers.length === 0) throw Error("No free workers");
221
+ if (!(this.nextFrame >= this.frames.length)) return e = this.frames[this.nextFrame++], n = this.freeWorkers.shift(), t = this.getTask(e), this.log("starting frame " + (t.index + 1) + " of " + this.frames.length), this.activeWorkers.push(n), n.postMessage(t);
222
+ }, r.prototype.getContextData = function(e) {
223
+ return e.getImageData(0, 0, this.options.width, this.options.height).data;
224
+ }, r.prototype.getImageData = function(e) {
225
+ var t;
226
+ return this._canvas ?? (this._canvas = document.createElement("canvas"), this._canvas.width = this.options.width, this._canvas.height = this.options.height), t = this._canvas.getContext("2d"), t.setFill = this.options.background, t.fillRect(0, 0, this.options.width, this.options.height), t.drawImage(e, 0, 0), this.getContextData(t);
227
+ }, r.prototype.getTask = function(e) {
228
+ var t = this.frames.indexOf(e), n = {
229
+ index: t,
230
+ last: t === this.frames.length - 1,
231
+ delay: e.delay,
232
+ transparent: e.transparent,
233
+ width: this.options.width,
234
+ height: this.options.height,
235
+ quality: this.options.quality,
236
+ dither: this.options.dither,
237
+ globalPalette: this.options.globalPalette,
238
+ repeat: this.options.repeat,
239
+ canTransfer: a.name === "chrome"
240
+ };
241
+ if (e.data != null) n.data = e.data;
242
+ else if (e.context != null) n.data = this.getContextData(e.context);
243
+ else if (e.image != null) n.data = this.getImageData(e.image);
244
+ else throw Error("Invalid frame");
245
+ return n;
246
+ }, r.prototype.log = function() {
247
+ var e = 1 <= arguments.length ? l.call(arguments, 0) : [];
248
+ if (this.options.debug) return console.log.apply(console, e);
249
+ }, r;
250
+ }(r), t.exports = i;
251
+ }, {
252
+ "./browser.coffee": 2,
253
+ events: 1
254
+ }]
255
+ }, {}, [3])(3);
256
+ });
257
+ })), a = /* @__PURE__ */ t({
258
+ GifExporter: () => s,
259
+ createGifExporter: () => c
260
+ }), o = /* @__PURE__ */ e(i(), 1), s = class e {
261
+ _scene;
262
+ _options;
263
+ constructor(e, t) {
264
+ this._scene = e, this._options = {
265
+ fps: t?.fps ?? 30,
266
+ quality: t?.quality ?? 10,
267
+ width: t?.width ?? e.renderer.width,
268
+ height: t?.height ?? e.renderer.height,
269
+ duration: t?.duration ?? 0,
270
+ workers: t?.workers ?? 4,
271
+ repeat: t?.repeat ?? 0,
272
+ onProgress: t?.onProgress ?? (() => {})
273
+ };
274
+ }
275
+ async exportTimeline(e) {
276
+ let t = (e || this._options.duration || this._getTimelineDuration()) ?? 5, n = Math.ceil(t * this._options.fps), r = Math.round(1e3 / this._options.fps), i = await this._createWorkerBlobUrl(), a = new o.default({
277
+ workers: this._options.workers,
278
+ quality: this._options.quality,
279
+ width: this._options.width,
280
+ height: this._options.height,
281
+ repeat: this._options.repeat,
282
+ workerScript: i
283
+ }), s = this._scene.getCanvas(), c = document.createElement("canvas");
284
+ c.width = this._options.width, c.height = this._options.height;
285
+ let l = c.getContext("2d");
286
+ for (let e = 0; e < n; e++) {
287
+ let t = e / this._options.fps;
288
+ this._scene.seek(t), l.clearRect(0, 0, c.width, c.height), l.drawImage(s, 0, 0, c.width, c.height);
289
+ let i = l.getImageData(0, 0, c.width, c.height);
290
+ a.addFrame(i, { delay: r }), this._options.onProgress(e / n * .5);
291
+ }
292
+ return new Promise((e, t) => {
293
+ let n = setTimeout(() => {
294
+ a.abort(), URL.revokeObjectURL(i), t(/* @__PURE__ */ Error("GIF encoding timed out after 60 seconds"));
295
+ }, 6e4);
296
+ a.on("progress", (e) => {
297
+ this._options.onProgress(.5 + e * .5);
298
+ }), a.on("finished", (t) => {
299
+ clearTimeout(n), URL.revokeObjectURL(i), e(t);
300
+ }), a.on("abort", () => {
301
+ clearTimeout(n), URL.revokeObjectURL(i), t(/* @__PURE__ */ Error("GIF encoding was aborted"));
302
+ });
303
+ try {
304
+ a.render();
305
+ } catch (e) {
306
+ clearTimeout(n), URL.revokeObjectURL(i), t(e);
307
+ }
308
+ });
309
+ }
310
+ _getTimelineDuration() {
311
+ let e = this._scene.timeline;
312
+ return e ? e.getDuration() : null;
313
+ }
314
+ async _createWorkerBlobUrl() {
315
+ let e = await fetch("/node_modules/gif.js/dist/gif.worker.js");
316
+ if (!e.ok) {
317
+ let e = await fetch("https://cdn.jsdelivr.net/npm/gif.js@0.2.0/dist/gif.worker.js");
318
+ if (!e.ok) throw Error("Failed to load gif.js worker script");
319
+ let t = await e.text();
320
+ return URL.createObjectURL(new Blob([t], { type: "application/javascript" }));
321
+ }
322
+ let t = await e.text();
323
+ return URL.createObjectURL(new Blob([t], { type: "application/javascript" }));
324
+ }
325
+ static download(e, t = "animation.gif") {
326
+ let n = URL.createObjectURL(e), r = document.createElement("a");
327
+ r.href = n, r.download = t, document.body.appendChild(r), r.click(), document.body.removeChild(r), URL.revokeObjectURL(n);
328
+ }
329
+ async exportAndDownload(t = "animation.gif", n) {
330
+ let r = await this.exportTimeline(n);
331
+ e.download(r, t);
332
+ }
333
+ };
334
+ function c(e, t) {
335
+ return new s(e, t);
336
+ }
337
+ //#endregion
338
+ export { a as n, c as r, s as t };
@@ -0,0 +1,338 @@
1
+ import { i as e, n as t, r as n, t as r } from "./chunk-DeC0fbbY.js";
2
+ //#region node_modules/gif.js/dist/gif.js
3
+ var i = /* @__PURE__ */ r(((e, t) => {
4
+ (function(n) {
5
+ if (typeof e == "object" && t !== void 0) t.exports = n();
6
+ else if (typeof define == "function" && define.amd) define([], n);
7
+ else {
8
+ var r = typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : this;
9
+ r.GIF = n();
10
+ }
11
+ })(function() {
12
+ return function e(t, r, i) {
13
+ function a(s, c) {
14
+ if (!r[s]) {
15
+ if (!t[s]) {
16
+ var l = typeof n == "function" && n;
17
+ if (!c && l) return l(s, !0);
18
+ if (o) return o(s, !0);
19
+ var u = /* @__PURE__ */ Error("Cannot find module '" + s + "'");
20
+ throw u.code = "MODULE_NOT_FOUND", u;
21
+ }
22
+ var d = r[s] = { exports: {} };
23
+ t[s][0].call(d.exports, function(e) {
24
+ var n = t[s][1][e];
25
+ return a(n || e);
26
+ }, d, d.exports, e, t, r, i);
27
+ }
28
+ return r[s].exports;
29
+ }
30
+ for (var o = typeof n == "function" && n, s = 0; s < i.length; s++) a(i[s]);
31
+ return a;
32
+ }({
33
+ 1: [function(e, t, n) {
34
+ function r() {
35
+ this._events = this._events || {}, this._maxListeners = this._maxListeners || void 0;
36
+ }
37
+ t.exports = r, r.EventEmitter = r, r.prototype._events = void 0, r.prototype._maxListeners = void 0, r.defaultMaxListeners = 10, r.prototype.setMaxListeners = function(e) {
38
+ if (!a(e) || e < 0 || isNaN(e)) throw TypeError("n must be a positive number");
39
+ return this._maxListeners = e, this;
40
+ }, r.prototype.emit = function(e) {
41
+ var t, n, r, a, c, l;
42
+ if (this._events ||= {}, e === "error" && (!this._events.error || o(this._events.error) && !this._events.error.length)) {
43
+ if (t = arguments[1], t instanceof Error) throw t;
44
+ var u = /* @__PURE__ */ Error("Uncaught, unspecified \"error\" event. (" + t + ")");
45
+ throw u.context = t, u;
46
+ }
47
+ if (n = this._events[e], s(n)) return !1;
48
+ if (i(n)) switch (arguments.length) {
49
+ case 1:
50
+ n.call(this);
51
+ break;
52
+ case 2:
53
+ n.call(this, arguments[1]);
54
+ break;
55
+ case 3:
56
+ n.call(this, arguments[1], arguments[2]);
57
+ break;
58
+ default: a = Array.prototype.slice.call(arguments, 1), n.apply(this, a);
59
+ }
60
+ else if (o(n)) for (a = Array.prototype.slice.call(arguments, 1), l = n.slice(), r = l.length, c = 0; c < r; c++) l[c].apply(this, a);
61
+ return !0;
62
+ }, r.prototype.addListener = function(e, t) {
63
+ var n;
64
+ if (!i(t)) throw TypeError("listener must be a function");
65
+ return this._events ||= {}, this._events.newListener && this.emit("newListener", e, i(t.listener) ? t.listener : t), this._events[e] ? o(this._events[e]) ? this._events[e].push(t) : this._events[e] = [this._events[e], t] : this._events[e] = t, o(this._events[e]) && !this._events[e].warned && (n = s(this._maxListeners) ? r.defaultMaxListeners : this._maxListeners, n && n > 0 && this._events[e].length > n && (this._events[e].warned = !0, console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.", this._events[e].length), typeof console.trace == "function" && console.trace())), this;
66
+ }, r.prototype.on = r.prototype.addListener, r.prototype.once = function(e, t) {
67
+ if (!i(t)) throw TypeError("listener must be a function");
68
+ var n = !1;
69
+ function r() {
70
+ this.removeListener(e, r), n || (n = !0, t.apply(this, arguments));
71
+ }
72
+ return r.listener = t, this.on(e, r), this;
73
+ }, r.prototype.removeListener = function(e, t) {
74
+ var n, r, a, s;
75
+ if (!i(t)) throw TypeError("listener must be a function");
76
+ if (!this._events || !this._events[e]) return this;
77
+ if (n = this._events[e], a = n.length, r = -1, n === t || i(n.listener) && n.listener === t) delete this._events[e], this._events.removeListener && this.emit("removeListener", e, t);
78
+ else if (o(n)) {
79
+ for (s = a; s-- > 0;) if (n[s] === t || n[s].listener && n[s].listener === t) {
80
+ r = s;
81
+ break;
82
+ }
83
+ if (r < 0) return this;
84
+ n.length === 1 ? (n.length = 0, delete this._events[e]) : n.splice(r, 1), this._events.removeListener && this.emit("removeListener", e, t);
85
+ }
86
+ return this;
87
+ }, r.prototype.removeAllListeners = function(e) {
88
+ var t, n;
89
+ if (!this._events) return this;
90
+ if (!this._events.removeListener) return arguments.length === 0 ? this._events = {} : this._events[e] && delete this._events[e], this;
91
+ if (arguments.length === 0) {
92
+ for (t in this._events) t !== "removeListener" && this.removeAllListeners(t);
93
+ return this.removeAllListeners("removeListener"), this._events = {}, this;
94
+ }
95
+ if (n = this._events[e], i(n)) this.removeListener(e, n);
96
+ else if (n) for (; n.length;) this.removeListener(e, n[n.length - 1]);
97
+ return delete this._events[e], this;
98
+ }, r.prototype.listeners = function(e) {
99
+ return !this._events || !this._events[e] ? [] : i(this._events[e]) ? [this._events[e]] : this._events[e].slice();
100
+ }, r.prototype.listenerCount = function(e) {
101
+ if (this._events) {
102
+ var t = this._events[e];
103
+ if (i(t)) return 1;
104
+ if (t) return t.length;
105
+ }
106
+ return 0;
107
+ }, r.listenerCount = function(e, t) {
108
+ return e.listenerCount(t);
109
+ };
110
+ function i(e) {
111
+ return typeof e == "function";
112
+ }
113
+ function a(e) {
114
+ return typeof e == "number";
115
+ }
116
+ function o(e) {
117
+ return typeof e == "object" && !!e;
118
+ }
119
+ function s(e) {
120
+ return e === void 0;
121
+ }
122
+ }, {}],
123
+ 2: [function(e, t, n) {
124
+ var r, i, a, o, s = navigator.userAgent.toLowerCase();
125
+ o = navigator.platform.toLowerCase(), r = s.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/) || [
126
+ null,
127
+ "unknown",
128
+ 0
129
+ ], a = r[1] === "ie" && document.documentMode, i = {
130
+ name: r[1] === "version" ? r[3] : r[1],
131
+ version: a || parseFloat(r[1] === "opera" && r[4] ? r[4] : r[2]),
132
+ platform: { name: s.match(/ip(?:ad|od|hone)/) ? "ios" : (s.match(/(?:webos|android)/) || o.match(/mac|win|linux/) || ["other"])[0] }
133
+ }, i[i.name] = !0, i[i.name + parseInt(i.version, 10)] = !0, i.platform[i.platform.name] = !0, t.exports = i;
134
+ }, {}],
135
+ 3: [function(e, t, n) {
136
+ var r, i, a, o = function(e, t) {
137
+ for (var n in t) s.call(t, n) && (e[n] = t[n]);
138
+ function r() {
139
+ this.constructor = e;
140
+ }
141
+ return r.prototype = t.prototype, e.prototype = new r(), e.__super__ = t.prototype, e;
142
+ }, s = {}.hasOwnProperty, c = [].indexOf || function(e) {
143
+ for (var t = 0, n = this.length; t < n; t++) if (t in this && this[t] === e) return t;
144
+ return -1;
145
+ }, l = [].slice;
146
+ r = e("events").EventEmitter, a = e("./browser.coffee"), i = function(e) {
147
+ var t, n;
148
+ o(r, e), t = {
149
+ workerScript: "gif.worker.js",
150
+ workers: 2,
151
+ repeat: 0,
152
+ background: "#fff",
153
+ quality: 10,
154
+ width: null,
155
+ height: null,
156
+ transparent: null,
157
+ debug: !1,
158
+ dither: !1
159
+ }, n = {
160
+ delay: 500,
161
+ copy: !1
162
+ };
163
+ function r(e) {
164
+ var n, r, i;
165
+ for (r in this.running = !1, this.options = {}, this.frames = [], this.freeWorkers = [], this.activeWorkers = [], this.setOptions(e), t) i = t[r], (n = this.options)[r] ?? (n[r] = i);
166
+ }
167
+ return r.prototype.setOption = function(e, t) {
168
+ if (this.options[e] = t, this._canvas != null && (e === "width" || e === "height")) return this._canvas[e] = t;
169
+ }, r.prototype.setOptions = function(e) {
170
+ var t, n = [], r;
171
+ for (t in e) s.call(e, t) && (r = e[t], n.push(this.setOption(t, r)));
172
+ return n;
173
+ }, r.prototype.addFrame = function(e, t) {
174
+ var r, i;
175
+ for (i in t ??= {}, r = {}, r.transparent = this.options.transparent, n) r[i] = t[i] || n[i];
176
+ if (this.options.width ?? this.setOption("width", e.width), this.options.height ?? this.setOption("height", e.height), typeof ImageData < "u" && ImageData !== null && e instanceof ImageData) r.data = e.data;
177
+ else if (typeof CanvasRenderingContext2D < "u" && CanvasRenderingContext2D !== null && e instanceof CanvasRenderingContext2D || typeof WebGLRenderingContext < "u" && WebGLRenderingContext !== null && e instanceof WebGLRenderingContext) t.copy ? r.data = this.getContextData(e) : r.context = e;
178
+ else if (e.childNodes != null) t.copy ? r.data = this.getImageData(e) : r.image = e;
179
+ else throw Error("Invalid image");
180
+ return this.frames.push(r);
181
+ }, r.prototype.render = function() {
182
+ var e, t, n;
183
+ if (this.running) throw Error("Already running");
184
+ if (this.options.width == null || this.options.height == null) throw Error("Width and height must be set prior to rendering");
185
+ if (this.running = !0, this.nextFrame = 0, this.finishedFrames = 0, this.imageParts = function() {
186
+ var e, t, n = [];
187
+ for (e = 0, t = this.frames.length; 0 <= t ? e < t : e > t; 0 <= t ? ++e : --e) n.push(null);
188
+ return n;
189
+ }.call(this), t = this.spawnWorkers(), this.options.globalPalette === !0) this.renderNextFrame();
190
+ else for (e = 0, n = t; 0 <= n ? e < n : e > n; 0 <= n ? ++e : --e) this.renderNextFrame();
191
+ return this.emit("start"), this.emit("progress", 0);
192
+ }, r.prototype.abort = function() {
193
+ for (var e; e = this.activeWorkers.shift(), e != null;) this.log("killing active worker"), e.terminate();
194
+ return this.running = !1, this.emit("abort");
195
+ }, r.prototype.spawnWorkers = function() {
196
+ var e = Math.min(this.options.workers, this.frames.length), t, n;
197
+ return (function() {
198
+ n = [];
199
+ for (var r = t = this.freeWorkers.length; t <= e ? r < e : r > e; t <= e ? r++ : r--) n.push(r);
200
+ return n;
201
+ }).apply(this).forEach(function(e) {
202
+ return function(t) {
203
+ var n;
204
+ return e.log("spawning worker " + t), n = new Worker(e.options.workerScript), n.onmessage = function(t) {
205
+ return e.activeWorkers.splice(e.activeWorkers.indexOf(n), 1), e.freeWorkers.push(n), e.frameFinished(t.data);
206
+ }, e.freeWorkers.push(n);
207
+ };
208
+ }(this)), e;
209
+ }, r.prototype.frameFinished = function(e) {
210
+ var t, n;
211
+ if (this.log("frame " + e.index + " finished - " + this.activeWorkers.length + " active"), this.finishedFrames++, this.emit("progress", this.finishedFrames / this.frames.length), this.imageParts[e.index] = e, this.options.globalPalette === !0 && (this.options.globalPalette = e.globalPalette, this.log("global palette analyzed"), this.frames.length > 2)) for (t = 1, n = this.freeWorkers.length; 1 <= n ? t < n : t > n; 1 <= n ? ++t : --t) this.renderNextFrame();
212
+ return c.call(this.imageParts, null) >= 0 ? this.renderNextFrame() : this.finishRendering();
213
+ }, r.prototype.finishRendering = function() {
214
+ var e, t, n, r, i, a, o, s = 0, c, l, u, d, f, p = this.imageParts, m, h;
215
+ for (i = 0, c = p.length; i < c; i++) t = p[i], s += (t.data.length - 1) * t.pageSize + t.cursor;
216
+ for (s += t.pageSize - t.cursor, this.log("rendering finished - filesize " + Math.round(s / 1e3) + "kb"), e = new Uint8Array(s), d = 0, m = this.imageParts, a = 0, l = m.length; a < l; a++) for (t = m[a], h = t.data, n = o = 0, u = h.length; o < u; n = ++o) f = h[n], e.set(f, d), n === t.data.length - 1 ? d += t.cursor : d += t.pageSize;
217
+ return r = new Blob([e], { type: "image/gif" }), this.emit("finished", r, e);
218
+ }, r.prototype.renderNextFrame = function() {
219
+ var e, t, n;
220
+ if (this.freeWorkers.length === 0) throw Error("No free workers");
221
+ if (!(this.nextFrame >= this.frames.length)) return e = this.frames[this.nextFrame++], n = this.freeWorkers.shift(), t = this.getTask(e), this.log("starting frame " + (t.index + 1) + " of " + this.frames.length), this.activeWorkers.push(n), n.postMessage(t);
222
+ }, r.prototype.getContextData = function(e) {
223
+ return e.getImageData(0, 0, this.options.width, this.options.height).data;
224
+ }, r.prototype.getImageData = function(e) {
225
+ var t;
226
+ return this._canvas ?? (this._canvas = document.createElement("canvas"), this._canvas.width = this.options.width, this._canvas.height = this.options.height), t = this._canvas.getContext("2d"), t.setFill = this.options.background, t.fillRect(0, 0, this.options.width, this.options.height), t.drawImage(e, 0, 0), this.getContextData(t);
227
+ }, r.prototype.getTask = function(e) {
228
+ var t = this.frames.indexOf(e), n = {
229
+ index: t,
230
+ last: t === this.frames.length - 1,
231
+ delay: e.delay,
232
+ transparent: e.transparent,
233
+ width: this.options.width,
234
+ height: this.options.height,
235
+ quality: this.options.quality,
236
+ dither: this.options.dither,
237
+ globalPalette: this.options.globalPalette,
238
+ repeat: this.options.repeat,
239
+ canTransfer: a.name === "chrome"
240
+ };
241
+ if (e.data != null) n.data = e.data;
242
+ else if (e.context != null) n.data = this.getContextData(e.context);
243
+ else if (e.image != null) n.data = this.getImageData(e.image);
244
+ else throw Error("Invalid frame");
245
+ return n;
246
+ }, r.prototype.log = function() {
247
+ var e = 1 <= arguments.length ? l.call(arguments, 0) : [];
248
+ if (this.options.debug) return console.log.apply(console, e);
249
+ }, r;
250
+ }(r), t.exports = i;
251
+ }, {
252
+ "./browser.coffee": 2,
253
+ events: 1
254
+ }]
255
+ }, {}, [3])(3);
256
+ });
257
+ })), a = /* @__PURE__ */ t({
258
+ GifExporter: () => s,
259
+ createGifExporter: () => c
260
+ }), o = /* @__PURE__ */ e(i(), 1), s = class e {
261
+ _scene;
262
+ _options;
263
+ constructor(e, t) {
264
+ this._scene = e, this._options = {
265
+ fps: t?.fps ?? 30,
266
+ quality: t?.quality ?? 10,
267
+ width: t?.width ?? e.renderer.width,
268
+ height: t?.height ?? e.renderer.height,
269
+ duration: t?.duration ?? 0,
270
+ workers: t?.workers ?? 4,
271
+ repeat: t?.repeat ?? 0,
272
+ onProgress: t?.onProgress ?? (() => {})
273
+ };
274
+ }
275
+ async exportTimeline(e) {
276
+ let t = (e || this._options.duration || this._getTimelineDuration()) ?? 5, n = Math.ceil(t * this._options.fps), r = Math.round(1e3 / this._options.fps), i = await this._createWorkerBlobUrl(), a = new o.default({
277
+ workers: this._options.workers,
278
+ quality: this._options.quality,
279
+ width: this._options.width,
280
+ height: this._options.height,
281
+ repeat: this._options.repeat,
282
+ workerScript: i
283
+ }), s = this._scene.getCanvas(), c = document.createElement("canvas");
284
+ c.width = this._options.width, c.height = this._options.height;
285
+ let l = c.getContext("2d");
286
+ for (let e = 0; e < n; e++) {
287
+ let t = e / this._options.fps;
288
+ this._scene.seek(t), l.clearRect(0, 0, c.width, c.height), l.drawImage(s, 0, 0, c.width, c.height);
289
+ let i = l.getImageData(0, 0, c.width, c.height);
290
+ a.addFrame(i, { delay: r }), this._options.onProgress(e / n * .5);
291
+ }
292
+ return new Promise((e, t) => {
293
+ let n = setTimeout(() => {
294
+ a.abort(), URL.revokeObjectURL(i), t(/* @__PURE__ */ Error("GIF encoding timed out after 60 seconds"));
295
+ }, 6e4);
296
+ a.on("progress", (e) => {
297
+ this._options.onProgress(.5 + e * .5);
298
+ }), a.on("finished", (t) => {
299
+ clearTimeout(n), URL.revokeObjectURL(i), e(t);
300
+ }), a.on("abort", () => {
301
+ clearTimeout(n), URL.revokeObjectURL(i), t(/* @__PURE__ */ Error("GIF encoding was aborted"));
302
+ });
303
+ try {
304
+ a.render();
305
+ } catch (e) {
306
+ clearTimeout(n), URL.revokeObjectURL(i), t(e);
307
+ }
308
+ });
309
+ }
310
+ _getTimelineDuration() {
311
+ let e = this._scene.timeline;
312
+ return e ? e.getDuration() : null;
313
+ }
314
+ async _createWorkerBlobUrl() {
315
+ let e = await fetch("/node_modules/gif.js/dist/gif.worker.js");
316
+ if (!e.ok) {
317
+ let e = await fetch("https://cdn.jsdelivr.net/npm/gif.js@0.2.0/dist/gif.worker.js");
318
+ if (!e.ok) throw Error("Failed to load gif.js worker script");
319
+ let t = await e.text();
320
+ return URL.createObjectURL(new Blob([t], { type: "application/javascript" }));
321
+ }
322
+ let t = await e.text();
323
+ return URL.createObjectURL(new Blob([t], { type: "application/javascript" }));
324
+ }
325
+ static download(e, t = "animation.gif") {
326
+ let n = URL.createObjectURL(e), r = document.createElement("a");
327
+ r.href = n, r.download = t, document.body.appendChild(r), r.click(), document.body.removeChild(r), URL.revokeObjectURL(n);
328
+ }
329
+ async exportAndDownload(t = "animation.gif", n) {
330
+ let r = await this.exportTimeline(n);
331
+ e.download(r, t);
332
+ }
333
+ };
334
+ function c(e, t) {
335
+ return new s(e, t);
336
+ }
337
+ //#endregion
338
+ export { a as n, c as r, s as t };