manim-web 0.13.0 → 0.14.0

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 (41) hide show
  1. package/README.md +35 -19
  2. package/dist/animation/transform/MovementTransforms.d.ts.map +1 -1
  3. package/dist/export/chooseExporter.d.ts +19 -0
  4. package/dist/export/chooseExporter.d.ts.map +1 -0
  5. package/dist/export/index.d.ts +1 -0
  6. package/dist/export/index.d.ts.map +1 -1
  7. package/dist/index.d.ts +4 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +3 -3
  10. package/dist/integrations/react.js +17 -17
  11. package/dist/integrations/vue.js +16 -16
  12. package/dist/interaction/DynamicMatrix.d.ts +164 -0
  13. package/dist/interaction/DynamicMatrix.d.ts.map +1 -0
  14. package/dist/interaction/index.d.ts +1 -0
  15. package/dist/interaction/index.d.ts.map +1 -1
  16. package/dist/manim-web.browser.js +1240 -623
  17. package/dist/mobjects/three-d/Line3D.d.ts.map +1 -1
  18. package/dist/player/ExportSettingsUI.d.ts +82 -0
  19. package/dist/player/ExportSettingsUI.d.ts.map +1 -0
  20. package/dist/player/Player.d.ts +50 -2
  21. package/dist/player/Player.d.ts.map +1 -1
  22. package/dist/player/PlayerUI.d.ts +15 -1
  23. package/dist/player/PlayerUI.d.ts.map +1 -1
  24. package/dist/player/SlideInteractionRenderer.d.ts +32 -0
  25. package/dist/player/SlideInteractionRenderer.d.ts.map +1 -0
  26. package/dist/player/index.d.ts +1 -0
  27. package/dist/player/index.d.ts.map +1 -1
  28. package/dist/serialization/defaults.d.ts +13 -0
  29. package/dist/serialization/defaults.d.ts.map +1 -0
  30. package/dist/serialization/index.d.ts +15 -0
  31. package/dist/serialization/index.d.ts.map +1 -0
  32. package/dist/serialization/props.d.ts +16 -0
  33. package/dist/serialization/props.d.ts.map +1 -0
  34. package/dist/serialization/registry.d.ts +17 -0
  35. package/dist/serialization/registry.d.ts.map +1 -0
  36. package/dist/serialization/serialize.d.ts +24 -0
  37. package/dist/serialization/serialize.d.ts.map +1 -0
  38. package/dist/serialization/types.d.ts +70 -0
  39. package/dist/serialization/types.d.ts.map +1 -0
  40. package/dist/{src-BcBBUMTP.js → src-BLA8Tb0K.js} +1222 -605
  41. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Line3D.d.ts","sourceRoot":"","sources":["../../../src/mobjects/three-d/Line3D.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,oCAAoC;IACpC,GAAG,EAAE,YAAY,CAAC;IAClB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,MAAO,SAAQ,SAAS;IACnC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC;IAC/B,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC;IAK7B,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,iBAAiB,CAAoC;gBAEjD,OAAO,EAAE,aAAa;IAelC,SAAS,CAAC,kBAAkB,IAAI,KAAK,CAAC,QAAQ;cAmB3B,oBAAoB,IAAI,IAAI;IAc/C,SAAS,CAAC,eAAe,IAAI,IAAI;IASjC,OAAO,CAAC,eAAe;IAWvB,gBAAgB;IACP,gBAAgB,CACvB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,IAAI;IASP,QAAQ,IAAI,YAAY;IAIxB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAMnC,MAAM,IAAI,YAAY;IAItB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAMjC,YAAY,IAAI,MAAM;IAItB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKjC,SAAS,IAAI,MAAM;IAOnB,YAAY,IAAI,YAAY;IAY5B,WAAW,IAAI,YAAY;IAQ3B,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY;IAQhC,IAAI,IAAI,MAAM;CAWxB"}
1
+ {"version":3,"file":"Line3D.d.ts","sourceRoot":"","sources":["../../../src/mobjects/three-d/Line3D.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,oCAAoC;IACpC,GAAG,EAAE,YAAY,CAAC;IAClB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,MAAO,SAAQ,SAAS;IACnC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC;IAC/B,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC;IAK7B,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,iBAAiB,CAAoC;gBAEjD,OAAO,EAAE,aAAa;IAelC,SAAS,CAAC,kBAAkB,IAAI,KAAK,CAAC,QAAQ;cA6B3B,oBAAoB,IAAI,IAAI;IAc/C,SAAS,CAAC,eAAe,IAAI,IAAI;IASjC,OAAO,CAAC,eAAe;IAWvB,gBAAgB;IACP,gBAAgB,CACvB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,IAAI;IASP,QAAQ,IAAI,YAAY;IAIxB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAMnC,MAAM,IAAI,YAAY;IAItB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAMjC,YAAY,IAAI,MAAM;IAItB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKjC,SAAS,IAAI,MAAM;IAOnB,YAAY,IAAI,YAAY;IAY5B,WAAW,IAAI,YAAY;IAQ3B,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY;IAQhC,IAAI,IAAI,MAAM;CAWxB"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * ExportSettingsUI - opt-in export options for the PlayerUI export menu.
3
+ *
4
+ * Lets the user choose frame rate, output resolution and quality before
5
+ * exporting, instead of subclassing Player/PlayerUI. The panel is pure DOM and
6
+ * lives in this sibling file so PlayerUI.ts stays within its line budget.
7
+ */
8
+ /** Concrete, resolved export settings handed to the exporter. */
9
+ export interface ExportSettings {
10
+ /** Frames per second. */
11
+ fps: number;
12
+ /** Output width in pixels. */
13
+ width: number;
14
+ /** Output height in pixels. */
15
+ height: number;
16
+ /** 0-1; higher is better quality (maps to a higher video bitrate). */
17
+ quality: number;
18
+ }
19
+ /** A named output resolution. `null` width/height means "use the current size". */
20
+ export interface ResolutionPreset {
21
+ id: string;
22
+ label: string;
23
+ width: number | null;
24
+ height: number | null;
25
+ }
26
+ /** A named quality level mapped to a 0-1 value. */
27
+ export interface QualityPreset {
28
+ id: string;
29
+ label: string;
30
+ value: number;
31
+ }
32
+ /** The player's current output size and frame rate, used for defaults. */
33
+ export interface ExportDefaults {
34
+ width: number;
35
+ height: number;
36
+ fps: number;
37
+ }
38
+ /** Selectable output resolutions. The first entry tracks the current size. */
39
+ export declare const RESOLUTION_PRESETS: ResolutionPreset[];
40
+ /** Selectable frame rates. */
41
+ export declare const FPS_PRESETS: number[];
42
+ /** Selectable quality levels. */
43
+ export declare const QUALITY_PRESETS: QualityPreset[];
44
+ /**
45
+ * Convert a 0-1 quality to a WebCodecs bitrate in bits per second.
46
+ * @param quality - Quality from 0 to 1 (clamped).
47
+ * @returns The target bitrate.
48
+ */
49
+ export declare function qualityToBitrate(quality: number): number;
50
+ /**
51
+ * Resolve a resolution preset id to concrete pixel dimensions.
52
+ * An unknown id, or the "current" preset, resolves to the current size.
53
+ * @param presetId - The preset id.
54
+ * @param currentWidth - The current output width.
55
+ * @param currentHeight - The current output height.
56
+ * @returns The resolved width and height.
57
+ */
58
+ export declare function resolveResolution(presetId: string, currentWidth: number, currentHeight: number): {
59
+ width: number;
60
+ height: number;
61
+ };
62
+ /**
63
+ * The settings panel shown inside the export menu when `exportControls` is on.
64
+ * Renders fps, resolution and quality selectors and resolves the current choice
65
+ * to concrete {@link ExportSettings} on demand.
66
+ */
67
+ export declare class ExportSettingsPanel {
68
+ private _element;
69
+ private _fpsSelect;
70
+ private _resolutionSelect;
71
+ private _qualitySelect;
72
+ private _defaults;
73
+ constructor(defaults: ExportDefaults);
74
+ /** The panel's root element, to insert into the export menu. */
75
+ get element(): HTMLElement;
76
+ /** Resolve the current selection to concrete export settings. */
77
+ getSettings(): ExportSettings;
78
+ /** Snap an arbitrary fps to the closest available preset. */
79
+ private _nearestFps;
80
+ private _buildSelect;
81
+ }
82
+ //# sourceMappingURL=ExportSettingsUI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportSettingsUI.d.ts","sourceRoot":"","sources":["../../src/player/ExportSettingsUI.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAOhD,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,WAAW,EAAE,MAAM,EAAiB,CAAC;AAElD,iCAAiC;AACjC,eAAO,MAAM,eAAe,EAAE,aAAa,EAI1C,CAAC;AAKF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAMnC;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,SAAS,CAAiB;gBAEtB,QAAQ,EAAE,cAAc;IA8BpC,gEAAgE;IAChE,IAAI,OAAO,IAAI,WAAW,CAEzB;IAED,iEAAiE;IACjE,WAAW,IAAI,cAAc;IAW7B,6DAA6D;IAC7D,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;CAiDrB"}
@@ -1,6 +1,7 @@
1
1
  import { Scene, SceneOptions } from '../core/Scene';
2
2
  import { MasterTimeline } from '../animation/MasterTimeline';
3
3
  import { RecordingScene } from './RecordingScene';
4
+ import { ExportSettings } from './ExportSettingsUI';
4
5
  export interface PlayerOptions extends SceneOptions {
5
6
  /** Auto-hide controls after this many ms. 0 = never. Default 2500. */
6
7
  autoHideMs?: number;
@@ -10,6 +11,18 @@ export interface PlayerOptions extends SceneOptions {
10
11
  loop?: boolean;
11
12
  /** Slides mode: arrows play/pause at slide boundaries like a presentation. Default false. */
12
13
  slidesMode?: boolean;
14
+ /**
15
+ * Keep the scene interactive while paused. When true, a Draggable,
16
+ * Clickable or Hoverable object responds on a paused slide: a pointer event
17
+ * triggers one scene render without advancing the timeline. Default false,
18
+ * so normal slides keep their cheap paused behavior (no extra renders).
19
+ */
20
+ interactiveSlides?: boolean;
21
+ /**
22
+ * Show an fps/resolution/quality panel in the export menu, so viewers can
23
+ * pick export settings without subclassing the Player. Default false.
24
+ */
25
+ exportControls?: boolean;
13
26
  }
14
27
  export declare class Player {
15
28
  private _scene;
@@ -24,6 +37,11 @@ export declare class Player {
24
37
  private _loop;
25
38
  private _autoPlay;
26
39
  private _slidesMode;
40
+ private _interactiveSlides;
41
+ /** Idle-render path that keeps a paused slide interactive. Null when off. */
42
+ private _slideInteraction;
43
+ private _exportControls;
44
+ private _exportFps;
27
45
  /**
28
46
  * Index of the slide that slidesMode playback should stop (or loop / advance)
29
47
  * at when its endTime is reached. -1 means no target armed.
@@ -39,6 +57,11 @@ export declare class Player {
39
57
  private _origHeight;
40
58
  private _onFullscreenChange;
41
59
  constructor(container: HTMLElement, options?: PlayerOptions);
60
+ /**
61
+ * Attach the idle-render path. Renders happen only while the Player is
62
+ * paused (not playing), so this never fights the active render loop.
63
+ */
64
+ private _enableSlideInteraction;
42
65
  /**
43
66
  * Define the animation sequence. The callback receives a recording proxy
44
67
  * that captures all play()/wait() calls to build the master timeline.
@@ -90,8 +113,33 @@ export declare class Player {
90
113
  setPlaybackRate(rate: number): void;
91
114
  /** Enable or disable slides (presentation) mode at runtime. */
92
115
  setSlidesMode(enabled: boolean): void;
93
- /** Export the animation in the given format (gif, webm, mp4). */
94
- exportAs(format: string): Promise<void>;
116
+ /** Whether the scene stays interactive while paused on a slide. */
117
+ get interactiveSlides(): boolean;
118
+ /**
119
+ * Enable or disable interactive slides at runtime. When enabled, a paused
120
+ * slide renders on pointer interaction (drag/click/hover) without advancing
121
+ * the timeline. When disabled, the idle-render path is removed.
122
+ */
123
+ setInteractiveSlides(enabled: boolean): void;
124
+ /**
125
+ * Export the animation in the given format (gif, webm, mp4).
126
+ *
127
+ * For video (webm/mp4) the frame-accurate {@link WebCodecsExporter} is used
128
+ * when the browser supports it; otherwise it falls back to the MediaRecorder
129
+ * VideoExporter via `Scene.export`. GIF always uses `Scene.export`.
130
+ *
131
+ * @param format - Output format: `gif`, `webm` or `mp4`.
132
+ * @param settings - Optional fps/resolution/quality from the export panel.
133
+ * When omitted, the exporter keeps its format defaults.
134
+ */
135
+ exportAs(format: string, settings?: ExportSettings): Promise<void>;
136
+ /** Run a frame-accurate WebCodecs video export and download the result. */
137
+ private _exportWithWebCodecs;
138
+ /**
139
+ * Build `Scene.export` options. With no `settings`, only the base options are
140
+ * set so each format keeps its own defaults (e.g. GIF fps 30, quality 10).
141
+ */
142
+ private _buildSceneExportOptions;
95
143
  /** Toggle browser fullscreen on the player container. */
96
144
  toggleFullscreen(): void;
97
145
  /** Clean up all resources. */
@@ -1 +1 @@
1
- {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../../src/player/Player.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6FAA6F;IAC7F,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,WAAW,CAAU;IAC7B;;;OAGG;IACH,OAAO,CAAC,uBAAuB,CAAc;IAC7C;;;;OAIG;IACH,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,mBAAmB,CAAa;gBAE5B,SAAS,EAAE,WAAW,EAAE,OAAO,GAAE,aAAkB;IAmE/D;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BhF,wDAAwD;IACxD,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED,+BAA+B;IAC/B,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED,kCAAkC;IAClC,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,4EAA4E;IAC5E,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,uEAAuE;IACvE,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAEtB;IAED,4CAA4C;IAC5C,IAAI,IAAI,IAAI;IAgBZ,sBAAsB;IACtB,KAAK,IAAI,IAAI;IAOb,qCAAqC;IACrC,eAAe,IAAI,IAAI;IAQvB;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAmBxB;;;;;;;;OAQG;IACH,WAAW,IAAI,IAAI;IAgBnB,qFAAqF;IACrF,SAAS,IAAI,IAAI;IAIjB,qFAAqF;IACrF,SAAS,IAAI,IAAI;IAIjB,mFAAmF;IACnF,WAAW,IAAI,IAAI;IAgBnB,OAAO,CAAC,eAAe;IA4CvB,OAAO,CAAC,eAAe;IA+BvB,yCAAyC;IACzC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,+DAA+D;IAC/D,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASrC,iEAAiE;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B7C,yDAAyD;IACzD,gBAAgB,IAAI,IAAI;IAmBxB,8BAA8B;IAC9B,OAAO,IAAI,IAAI;IAYf,OAAO,CAAC,UAAU;IA4GlB,OAAO,CAAC,SAAS;CAMlB"}
1
+ {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../../src/player/Player.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { MasterTimeline } from '../animation/MasterTimeline';
2
+ import { ExportSettings, ExportDefaults } from './ExportSettingsUI';
2
3
  export interface PlayerUICallbacks {
3
4
  onPlayPause: () => void;
4
5
  onSeek: (time: number) => void;
@@ -6,12 +7,23 @@ export interface PlayerUICallbacks {
6
7
  onNext: () => void;
7
8
  onSpeedChange: (rate: number) => void;
8
9
  onFullscreen: () => void;
9
- onExport: (format: string) => void;
10
+ /**
11
+ * Export in the given format. When the export settings panel is enabled
12
+ * (`exportControls`), the chosen fps/resolution/quality are passed too.
13
+ */
14
+ onExport: (format: string, settings?: ExportSettings) => void;
10
15
  onSlidesToggle: (enabled: boolean) => void;
16
+ /** Current output size and frame rate, used to seed the settings panel. */
17
+ getExportDefaults?: () => ExportDefaults;
11
18
  }
12
19
  export interface PlayerUIOptions {
13
20
  /** Auto-hide controls after this many ms of inactivity. 0 = never hide. Default 2500. */
14
21
  autoHideMs?: number;
22
+ /**
23
+ * Show an fps/resolution/quality panel in the export menu. Default false, so
24
+ * the export menu is unchanged unless opted in.
25
+ */
26
+ exportControls?: boolean;
15
27
  }
16
28
  export declare class PlayerUI {
17
29
  private _container;
@@ -33,6 +45,8 @@ export declare class PlayerUI {
33
45
  private _exportBtnWrapper;
34
46
  private _callbacks;
35
47
  private _autoHideMs;
48
+ private _exportControls;
49
+ private _exportPanel;
36
50
  private _hideTimeout;
37
51
  private _isVisible;
38
52
  private _isDragging;
@@ -1 +1 @@
1
- {"version":3,"file":"PlayerUI.d.ts","sourceRoot":"","sources":["../../src/player/PlayerUI.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlayerUI.d.ts","sourceRoot":"","sources":["../../src/player/PlayerUI.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Scene } from '../core/Scene';
2
+ export declare class SlideInteractionRenderer {
3
+ private _target;
4
+ private _scene;
5
+ private _isIdle;
6
+ private _onEvent;
7
+ private _attached;
8
+ private _renderScheduled;
9
+ private _renderCount;
10
+ /**
11
+ * @param target - Element that pointer events bubble to (the Player
12
+ * container). The canvas is a child of this element, so canvas events reach
13
+ * it. The container exists even for a headless Scene, where `getCanvas()`
14
+ * throws.
15
+ * @param scene - The scene to render.
16
+ * @param isIdle - Returns true when the Player is paused (no render loop
17
+ * running). A render is requested only then; during playback the Player
18
+ * loop already draws every frame.
19
+ */
20
+ constructor(target: HTMLElement, scene: Scene, isIdle: () => boolean);
21
+ /** Whether listeners are currently attached. */
22
+ get isAttached(): boolean;
23
+ /** Number of idle renders performed. Exposed for tests and introspection. */
24
+ get renderCount(): number;
25
+ /** Start listening for pointer events. Idempotent. */
26
+ attach(): void;
27
+ /** Stop listening and drop any pending render. */
28
+ dispose(): void;
29
+ private _handleEvent;
30
+ private _scheduleRender;
31
+ }
32
+ //# sourceMappingURL=SlideInteractionRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlideInteractionRenderer.d.ts","sourceRoot":"","sources":["../../src/player/SlideInteractionRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAgBtC,qBAAa,wBAAwB;IACnC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,YAAY,CAAa;IAEjC;;;;;;;;;OASG;gBACS,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO;IAOpE,gDAAgD;IAChD,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,6EAA6E;IAC7E,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,sDAAsD;IACtD,MAAM,IAAI,IAAI;IAQd,kDAAkD;IAClD,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,eAAe;CAYxB"}
@@ -1,4 +1,5 @@
1
1
  export { Player, type PlayerOptions } from './Player';
2
2
  export { PlayerUI, type PlayerUIOptions, type PlayerUICallbacks } from './PlayerUI';
3
3
  export { PlayerController, type PlayerControllerCallbacks } from './PlayerController';
4
+ export { ExportSettingsPanel, resolveResolution, qualityToBitrate, RESOLUTION_PRESETS, FPS_PRESETS, QUALITY_PRESETS, type ExportSettings, type ResolutionPreset, type QualityPreset, type ExportDefaults, } from './ExportSettingsUI';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/player/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,KAAK,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/player/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,KAAK,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Default serializers for the common mobjects.
3
+ *
4
+ * Each serializer captures only the type-specific, constructor-relevant
5
+ * (unscaled) props. The framework (`serialize.ts`) captures transform, style,
6
+ * and children generically, so these never repeat them. Reading an unscaled
7
+ * base value (e.g. `_radius`, not `getRadius()`) keeps scale in the transform
8
+ * only, which is what makes serialize→deserialize→serialize stable.
9
+ *
10
+ * Registering runs once as an import side effect from the folder entry point.
11
+ */
12
+ export declare function registerDefaultSerializers(): void;
13
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/serialization/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsDH,wBAAgB,0BAA0B,IAAI,IAAI,CAuHjD"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Scene serialization (best-manim).
3
+ *
4
+ * Serialize a scene or a single mobject to a plain, JSON-safe document, store
5
+ * or deep-link it, and reload it in another session. The format is open: new
6
+ * mobject types register their own serializer, so the schema grows without a
7
+ * central union to edit.
8
+ *
9
+ * Importing this module registers the default serializers (common geometry,
10
+ * groups, and text) as a side effect.
11
+ */
12
+ export { serializeScene, deserializeScene, serializeMobject, deserializeMobject, } from './serialize';
13
+ export { registerSerializableMobject, unregisterSerializableMobject, getSerializer, getSerializableTypes, } from './registry';
14
+ export type { SerializedScene, SerializedMobject, SerializedTransform, SerializedStyle, MobjectSerializer, SceneLike, ContainerLike, Vec3, } from './types';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/serialization/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,aAAa,EACb,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,IAAI,GACL,MAAM,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Vec3 } from './types';
2
+ /** Read a number, or `fallback` when the value is not a finite number. */
3
+ export declare function readNumber(value: unknown, fallback: number): number;
4
+ /** Read a string, or `fallback` when the value is not a string. */
5
+ export declare function readString(value: unknown, fallback: string): string;
6
+ /** Read a boolean, or `fallback` when the value is not a boolean. */
7
+ export declare function readBoolean(value: unknown, fallback: boolean): boolean;
8
+ /** Read an optional string: a string, or `undefined`. */
9
+ export declare function readOptionalString(value: unknown): string | undefined;
10
+ /** Read a `[x, y, z]` triple, or `fallback` when the value is not one. */
11
+ export declare function readVec3(value: unknown, fallback: Vec3): Vec3;
12
+ /** Read an array of `[x, y, z]` triples, dropping any malformed entries. */
13
+ export declare function readVec3Array(value: unknown): Vec3[];
14
+ /** True when `value` is a non-null, non-array object (a props/record bag). */
15
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
16
+ //# sourceMappingURL=props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/serialization/props.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEpC,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAEtE;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAErE;AAWD,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,CAE7D;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,CAOpD;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
@@ -0,0 +1,17 @@
1
+ import { Mobject } from '../core/Mobject';
2
+ import { MobjectSerializer } from './types';
3
+ /**
4
+ * Register a serializer for a mobject type.
5
+ *
6
+ * @param name - The type name, which must match the mobject's class name
7
+ * (`mobject.constructor.name`) so instances can be looked up at capture time.
8
+ * @param serializer - The serialize/deserialize pair for this type.
9
+ */
10
+ export declare function registerSerializableMobject<T extends Mobject>(name: string, serializer: MobjectSerializer<T>): void;
11
+ /** Remove a registration. Mainly for tests and hot-swapping. */
12
+ export declare function unregisterSerializableMobject(name: string): void;
13
+ /** Look up a serializer by type name, or `undefined` when none is registered. */
14
+ export declare function getSerializer(name: string): MobjectSerializer | undefined;
15
+ /** The names of every registered type, sorted for stable output. */
16
+ export declare function getSerializableTypes(): string[];
17
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/serialization/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAIjD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,OAAO,EAC3D,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC/B,IAAI,CAIN;AAED,gEAAgE;AAChE,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEhE;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEzE;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C"}
@@ -0,0 +1,24 @@
1
+ import { Mobject } from '../core/Mobject';
2
+ import { ContainerLike, SceneLike, SerializedMobject, SerializedScene } from './types';
3
+ /**
4
+ * Capture a single mobject (and its submobject tree) as a JSON-safe object.
5
+ *
6
+ * An unregistered type is captured with `unknown: true` and empty `props`, so
7
+ * the document still records its position in the tree for debugging, while a
8
+ * restore skips it.
9
+ */
10
+ export declare function serializeMobject(mob: Mobject): SerializedMobject;
11
+ /**
12
+ * Reconstruct a single mobject from a serialized node, or `null` when the type
13
+ * is unknown (unregistered or marked `unknown`). Known children are attached;
14
+ * unknown children are dropped.
15
+ */
16
+ export declare function deserializeMobject(json: unknown): Mobject | null;
17
+ /** Capture a whole scene (its top-level mobjects) as a JSON document. */
18
+ export declare function serializeScene(scene: SceneLike): SerializedScene;
19
+ /**
20
+ * Reconstruct the mobjects of a document and add each one to `container`.
21
+ * Returns the created top-level mobjects. A malformed document yields `[]`.
22
+ */
23
+ export declare function deserializeScene(json: unknown, container: ContainerLike): Mobject[];
24
+ //# sourceMappingURL=serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/serialization/serialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAGrB,MAAM,SAAS,CAAC;AAmDjB;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAYhE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAqBhE;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,eAAe,CAIhE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,GAAG,OAAO,EAAE,CAWnF"}
@@ -0,0 +1,70 @@
1
+ import { Mobject } from '../core/Mobject';
2
+ /** A plain, JSON-safe triple. */
3
+ export type Vec3 = [number, number, number];
4
+ /** Position, rotation (Euler XYZ, radians), and scale of a mobject. */
5
+ export interface SerializedTransform {
6
+ position: Vec3;
7
+ rotation: Vec3;
8
+ scale: Vec3;
9
+ }
10
+ /** Stroke and fill of a mobject. Only defined fields are written. */
11
+ export interface SerializedStyle {
12
+ strokeColor?: string;
13
+ fillColor?: string;
14
+ strokeOpacity?: number;
15
+ fillOpacity?: number;
16
+ strokeWidth?: number;
17
+ }
18
+ /**
19
+ * One serialized mobject.
20
+ *
21
+ * `props` is `Record<string, unknown>` on purpose: each registered type owns
22
+ * the shape of its own props and narrows them on restore, so the schema stays
23
+ * open for new types without a central union to edit.
24
+ */
25
+ export interface SerializedMobject {
26
+ /** Registered type name (its class name), e.g. `Circle`. */
27
+ type: string;
28
+ /** Constructor-relevant, unscaled properties for this type. */
29
+ props: Record<string, unknown>;
30
+ /** Position/rotation/scale, applied after construction. */
31
+ transform: SerializedTransform;
32
+ /** Stroke/fill, applied after construction. */
33
+ style: SerializedStyle;
34
+ /** Submobject tree. */
35
+ children: SerializedMobject[];
36
+ /**
37
+ * Present and `true` when the type had no registered serializer at capture
38
+ * time. Such a node is skipped (not reconstructed) on restore.
39
+ */
40
+ unknown?: boolean;
41
+ }
42
+ /** Current document version. Bump when the schema changes incompatibly. */
43
+ export declare const SCENE_FORMAT = "manim-web-scene";
44
+ export declare const SCENE_VERSION = 1;
45
+ /** A full serialized scene document. */
46
+ export interface SerializedScene {
47
+ format: typeof SCENE_FORMAT;
48
+ version: number;
49
+ mobjects: SerializedMobject[];
50
+ }
51
+ /**
52
+ * A pair of functions that convert between a concrete mobject and its `props`.
53
+ *
54
+ * `serialize` returns only the type-specific, constructor-relevant props. The
55
+ * transform, style, and children are captured generically by the framework, so
56
+ * a serializer never repeats them.
57
+ */
58
+ export interface MobjectSerializer<T extends Mobject = Mobject> {
59
+ serialize: (mobject: T) => Record<string, unknown>;
60
+ deserialize: (props: Record<string, unknown>) => T;
61
+ }
62
+ /** Anything the framework can read top-level mobjects from (e.g. a Scene). */
63
+ export interface SceneLike {
64
+ mobjects: Iterable<Mobject>;
65
+ }
66
+ /** Anything the framework can add reconstructed mobjects to (e.g. a Scene). */
67
+ export interface ContainerLike {
68
+ add: (...mobjects: Mobject[]) => unknown;
69
+ }
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/serialization/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,iCAAiC;AACjC,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE5C,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,IAAI,CAAC;CACb;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,2DAA2D;IAC3D,SAAS,EAAE,mBAAmB,CAAC;IAC/B,+CAA+C;IAC/C,KAAK,EAAE,eAAe,CAAC;IACvB,uBAAuB;IACvB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,2EAA2E;AAC3E,eAAO,MAAM,YAAY,oBAAoB,CAAC;AAC9C,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,YAAY,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IAC5D,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;CACpD;AAED,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC7B;AAED,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CAC1C"}