textmode.export.js 1.5.2 → 1.6.0-beta.2

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 (170) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -152
  3. package/dist/textmode.export.esm.js +1 -5890
  4. package/dist/textmode.export.umd.js +1 -68
  5. package/dist/types/augmentations/index.d.ts +0 -1
  6. package/dist/types/augmentations/textmode.d.ts +0 -1
  7. package/dist/types/exporters/base/CharacterResolver.d.ts +0 -1
  8. package/dist/types/exporters/base/DataExtractor.d.ts +0 -1
  9. package/dist/types/exporters/base/FileHandler.d.ts +0 -1
  10. package/dist/types/exporters/base/FramePreparation.d.ts +10 -0
  11. package/dist/types/exporters/base/LayerTarget.d.ts +4 -3
  12. package/dist/types/exporters/base/index.d.ts +1 -1
  13. package/dist/types/exporters/gif/GIFEncoderWorker.d.ts +1 -0
  14. package/dist/types/exporters/gif/GIFExporter.d.ts +7 -27
  15. package/dist/types/exporters/gif/GIFRecorder.d.ts +0 -1
  16. package/dist/types/exporters/gif/GIFWorkerClient.d.ts +15 -0
  17. package/dist/types/exporters/gif/index.d.ts +0 -1
  18. package/dist/types/exporters/gif/types.d.ts +19 -1
  19. package/dist/types/exporters/image/ImageExporter.d.ts +2 -1
  20. package/dist/types/exporters/image/index.d.ts +0 -1
  21. package/dist/types/exporters/image/types.d.ts +2 -1
  22. package/dist/types/exporters/json/JSONDataExtractor.d.ts +0 -1
  23. package/dist/types/exporters/json/JSONExporter.d.ts +0 -1
  24. package/dist/types/exporters/json/index.d.ts +0 -1
  25. package/dist/types/exporters/json/types.d.ts +8 -1
  26. package/dist/types/exporters/svg/SVGContentGenerator.d.ts +0 -1
  27. package/dist/types/exporters/svg/SVGDataExtractor.d.ts +0 -1
  28. package/dist/types/exporters/svg/SVGExporter.d.ts +0 -1
  29. package/dist/types/exporters/svg/SVGPathGenerator.d.ts +0 -1
  30. package/dist/types/exporters/svg/index.d.ts +0 -1
  31. package/dist/types/exporters/svg/types.d.ts +2 -1
  32. package/dist/types/exporters/txt/TXTExporter.d.ts +0 -1
  33. package/dist/types/exporters/txt/index.d.ts +0 -1
  34. package/dist/types/exporters/txt/types.d.ts +2 -1
  35. package/dist/types/exporters/video/VideoExporter.d.ts +2 -2
  36. package/dist/types/exporters/video/VideoFrameDriver.d.ts +0 -1
  37. package/dist/types/exporters/video/VideoRecorder.d.ts +0 -1
  38. package/dist/types/exporters/video/errors.d.ts +0 -1
  39. package/dist/types/exporters/video/index.d.ts +0 -1
  40. package/dist/types/exporters/video/types.d.ts +27 -1
  41. package/dist/types/exporters/video/withAbortableTimeout.d.ts +0 -1
  42. package/dist/types/index.d.ts +16 -56
  43. package/dist/types/overlay/blades/Blade.d.ts +9 -3
  44. package/dist/types/overlay/blades/GIFBlade.d.ts +1 -1
  45. package/dist/types/overlay/blades/ImageBlade.d.ts +1 -1
  46. package/dist/types/overlay/blades/JSONBlade.d.ts +1 -1
  47. package/dist/types/overlay/blades/RecordingBlade.d.ts +7 -0
  48. package/dist/types/overlay/blades/SVGBlade.d.ts +1 -1
  49. package/dist/types/overlay/blades/TextBlade.d.ts +1 -1
  50. package/dist/types/overlay/blades/VideoBlade.d.ts +1 -1
  51. package/dist/types/overlay/blades/index.d.ts +3 -1
  52. package/dist/types/overlay/components/actions/Button.d.ts +0 -1
  53. package/dist/types/overlay/components/base/Component.d.ts +0 -1
  54. package/dist/types/overlay/components/base/Container.d.ts +0 -1
  55. package/dist/types/overlay/components/base/Field.d.ts +0 -1
  56. package/dist/types/overlay/components/display/Header.d.ts +3 -1
  57. package/dist/types/overlay/components/display/StatusDisplay.d.ts +0 -1
  58. package/dist/types/overlay/components/inputs/CheckboxInput.d.ts +0 -1
  59. package/dist/types/overlay/components/inputs/LayerTargetSelect.d.ts +0 -1
  60. package/dist/types/overlay/components/inputs/NumberInput.d.ts +0 -1
  61. package/dist/types/overlay/components/inputs/RangeInput.d.ts +0 -1
  62. package/dist/types/overlay/components/inputs/SelectInput.d.ts +0 -1
  63. package/dist/types/overlay/components/inputs/TextInput.d.ts +0 -1
  64. package/dist/types/overlay/config/DefaultsStore.d.ts +11 -0
  65. package/dist/types/overlay/config/ExportDefaults.d.ts +3 -0
  66. package/dist/types/overlay/core/EventBus.d.ts +0 -1
  67. package/dist/types/overlay/core/OverlayController.d.ts +29 -6
  68. package/dist/types/overlay/core/StateManager.d.ts +0 -1
  69. package/dist/types/overlay/formatRegistry.d.ts +3 -2
  70. package/dist/types/overlay/index.d.ts +0 -2
  71. package/dist/types/overlay/models/FormatDefinition.d.ts +0 -1
  72. package/dist/types/overlay/models/OverlayEvents.d.ts +0 -1
  73. package/dist/types/overlay/models/OverlayState.d.ts +1 -2
  74. package/dist/types/overlay/services/ClipboardService.d.ts +1 -5
  75. package/dist/types/overlay/services/ExportService.d.ts +0 -2
  76. package/dist/types/overlay/services/OverlayPositionStorage.d.ts +12 -0
  77. package/dist/types/overlay/services/PositionService.d.ts +33 -3
  78. package/dist/types/overlay/types.d.ts +36 -2
  79. package/dist/types/overlay/utils/classes.d.ts +3 -1
  80. package/dist/types/types.d.ts +273 -34
  81. package/dist/types/utils/pixels.d.ts +0 -1
  82. package/dist/types/version.d.ts +0 -1
  83. package/package.json +87 -53
  84. package/dist/types/augmentations/index.d.ts.map +0 -1
  85. package/dist/types/augmentations/textmode.d.ts.map +0 -1
  86. package/dist/types/augmentations/textmode.test.d.ts +0 -2
  87. package/dist/types/augmentations/textmode.test.d.ts.map +0 -1
  88. package/dist/types/exporters/base/CharacterResolver.d.ts.map +0 -1
  89. package/dist/types/exporters/base/DataExtractor.d.ts.map +0 -1
  90. package/dist/types/exporters/base/FileHandler.d.ts.map +0 -1
  91. package/dist/types/exporters/base/LayerTarget.d.ts.map +0 -1
  92. package/dist/types/exporters/base/index.d.ts.map +0 -1
  93. package/dist/types/exporters/gif/GIFExporter.d.ts.map +0 -1
  94. package/dist/types/exporters/gif/GIFRecorder.d.ts.map +0 -1
  95. package/dist/types/exporters/gif/index.d.ts.map +0 -1
  96. package/dist/types/exporters/gif/types.d.ts.map +0 -1
  97. package/dist/types/exporters/image/ImageExporter.d.ts.map +0 -1
  98. package/dist/types/exporters/image/index.d.ts.map +0 -1
  99. package/dist/types/exporters/image/types.d.ts.map +0 -1
  100. package/dist/types/exporters/json/JSONDataExtractor.d.ts.map +0 -1
  101. package/dist/types/exporters/json/JSONExporter.d.ts.map +0 -1
  102. package/dist/types/exporters/json/JSONExporter.test.d.ts +0 -2
  103. package/dist/types/exporters/json/JSONExporter.test.d.ts.map +0 -1
  104. package/dist/types/exporters/json/index.d.ts.map +0 -1
  105. package/dist/types/exporters/json/types.d.ts.map +0 -1
  106. package/dist/types/exporters/svg/SVGContentGenerator.d.ts.map +0 -1
  107. package/dist/types/exporters/svg/SVGDataExtractor.d.ts.map +0 -1
  108. package/dist/types/exporters/svg/SVGExporter.d.ts.map +0 -1
  109. package/dist/types/exporters/svg/SVGExporter.test.d.ts +0 -2
  110. package/dist/types/exporters/svg/SVGExporter.test.d.ts.map +0 -1
  111. package/dist/types/exporters/svg/SVGPathGenerator.d.ts.map +0 -1
  112. package/dist/types/exporters/svg/index.d.ts.map +0 -1
  113. package/dist/types/exporters/svg/types.d.ts.map +0 -1
  114. package/dist/types/exporters/txt/TXTExporter.d.ts.map +0 -1
  115. package/dist/types/exporters/txt/TXTExporter.test.d.ts +0 -2
  116. package/dist/types/exporters/txt/TXTExporter.test.d.ts.map +0 -1
  117. package/dist/types/exporters/txt/index.d.ts.map +0 -1
  118. package/dist/types/exporters/txt/types.d.ts.map +0 -1
  119. package/dist/types/exporters/video/VideoExporter.d.ts.map +0 -1
  120. package/dist/types/exporters/video/VideoExporter.test.d.ts +0 -2
  121. package/dist/types/exporters/video/VideoExporter.test.d.ts.map +0 -1
  122. package/dist/types/exporters/video/VideoFrameDriver.d.ts.map +0 -1
  123. package/dist/types/exporters/video/VideoFrameDriver.test.d.ts +0 -2
  124. package/dist/types/exporters/video/VideoFrameDriver.test.d.ts.map +0 -1
  125. package/dist/types/exporters/video/VideoRecorder.d.ts.map +0 -1
  126. package/dist/types/exporters/video/VideoRecorder.test.d.ts +0 -2
  127. package/dist/types/exporters/video/VideoRecorder.test.d.ts.map +0 -1
  128. package/dist/types/exporters/video/errors.d.ts.map +0 -1
  129. package/dist/types/exporters/video/index.d.ts.map +0 -1
  130. package/dist/types/exporters/video/types.d.ts.map +0 -1
  131. package/dist/types/exporters/video/withAbortableTimeout.d.ts.map +0 -1
  132. package/dist/types/index.d.ts.map +0 -1
  133. package/dist/types/overlay/blades/Blade.d.ts.map +0 -1
  134. package/dist/types/overlay/blades/GIFBlade.d.ts.map +0 -1
  135. package/dist/types/overlay/blades/ImageBlade.d.ts.map +0 -1
  136. package/dist/types/overlay/blades/JSONBlade.d.ts.map +0 -1
  137. package/dist/types/overlay/blades/SVGBlade.d.ts.map +0 -1
  138. package/dist/types/overlay/blades/TextBlade.d.ts.map +0 -1
  139. package/dist/types/overlay/blades/VideoBlade.d.ts.map +0 -1
  140. package/dist/types/overlay/blades/index.d.ts.map +0 -1
  141. package/dist/types/overlay/components/actions/Button.d.ts.map +0 -1
  142. package/dist/types/overlay/components/base/Component.d.ts.map +0 -1
  143. package/dist/types/overlay/components/base/Container.d.ts.map +0 -1
  144. package/dist/types/overlay/components/base/Field.d.ts.map +0 -1
  145. package/dist/types/overlay/components/display/Header.d.ts.map +0 -1
  146. package/dist/types/overlay/components/display/StatusDisplay.d.ts.map +0 -1
  147. package/dist/types/overlay/components/inputs/CheckboxInput.d.ts.map +0 -1
  148. package/dist/types/overlay/components/inputs/LayerTargetSelect.d.ts.map +0 -1
  149. package/dist/types/overlay/components/inputs/NumberInput.d.ts.map +0 -1
  150. package/dist/types/overlay/components/inputs/RangeInput.d.ts.map +0 -1
  151. package/dist/types/overlay/components/inputs/SelectInput.d.ts.map +0 -1
  152. package/dist/types/overlay/components/inputs/TextInput.d.ts.map +0 -1
  153. package/dist/types/overlay/core/EventBus.d.ts.map +0 -1
  154. package/dist/types/overlay/core/OverlayController.d.ts.map +0 -1
  155. package/dist/types/overlay/core/StateManager.d.ts.map +0 -1
  156. package/dist/types/overlay/formatRegistry.d.ts.map +0 -1
  157. package/dist/types/overlay/formatRegistry.test.d.ts +0 -2
  158. package/dist/types/overlay/formatRegistry.test.d.ts.map +0 -1
  159. package/dist/types/overlay/index.d.ts.map +0 -1
  160. package/dist/types/overlay/models/FormatDefinition.d.ts.map +0 -1
  161. package/dist/types/overlay/models/OverlayEvents.d.ts.map +0 -1
  162. package/dist/types/overlay/models/OverlayState.d.ts.map +0 -1
  163. package/dist/types/overlay/services/ClipboardService.d.ts.map +0 -1
  164. package/dist/types/overlay/services/ExportService.d.ts.map +0 -1
  165. package/dist/types/overlay/services/PositionService.d.ts.map +0 -1
  166. package/dist/types/overlay/types.d.ts.map +0 -1
  167. package/dist/types/overlay/utils/classes.d.ts.map +0 -1
  168. package/dist/types/types.d.ts.map +0 -1
  169. package/dist/types/utils/pixels.d.ts.map +0 -1
  170. package/dist/types/version.d.ts.map +0 -1
@@ -2,4 +2,3 @@
2
2
  * Augmentation barrel.
3
3
  */
4
4
  import './textmode';
5
- //# sourceMappingURL=index.d.ts.map
@@ -6,4 +6,3 @@ declare module 'textmode.js' {
6
6
  interface Textmodifier extends TextmodeExportAPI {
7
7
  }
8
8
  }
9
- //# sourceMappingURL=textmode.d.ts.map
@@ -26,4 +26,3 @@ export declare function getEncodedGlyphValueFromColor(color: [number, number, nu
26
26
  */
27
27
  export declare function resolveGlyphByEncodedValue(font: ResolvableFont, encodedValue: number): ResolvableGlyph | undefined;
28
28
  export {};
29
- //# sourceMappingURL=CharacterResolver.d.ts.map
@@ -42,4 +42,3 @@ export declare class DataExtractor {
42
42
  rotation: number;
43
43
  };
44
44
  }
45
- //# sourceMappingURL=DataExtractor.d.ts.map
@@ -24,4 +24,3 @@ export declare class FileHandler {
24
24
  */
25
25
  private _generateDefaultFilename;
26
26
  }
27
- //# sourceMappingURL=FileHandler.d.ts.map
@@ -0,0 +1,10 @@
1
+ /** Context supplied before a deterministic export frame is rendered. */
2
+ export interface ExportFrameContext {
3
+ frameIndex: number;
4
+ frameCount: number;
5
+ timeSeconds: number;
6
+ frameRate: number;
7
+ signal?: AbortSignal;
8
+ }
9
+ /** Prepares external media or state before an export frame is redrawn. */
10
+ export type PrepareExportFrame = (context: ExportFrameContext) => void | Promise<void>;
@@ -1,9 +1,11 @@
1
- import type { Textmodifier, TextmodeFramebuffer, TextmodeGrid } from 'textmode.js';
1
+ import { LayerBlendMode, type Textmodifier, type TextmodeFramebuffer, type TextmodeGrid } from 'textmode.js';
2
2
  import type { TextmodeFont, TextmodeTileset } from 'textmode.js';
3
3
  import type { TextmodeLayer } from 'textmode.js';
4
4
  /**
5
5
  * Shared option for exporters that read layer framebuffer data.
6
6
  *
7
+ * @category Layer data export
8
+ *
7
9
  * @see {@link https://code.textmode.art/api/textmode.export.js/interfaces/LayerExportOptions | LayerExportOptions API reference}
8
10
  */
9
11
  export interface LayerExportOptions {
@@ -27,7 +29,7 @@ export interface ResolvedLayerExportTarget {
27
29
  export interface ResolvedLayerStackExportTarget extends ResolvedLayerExportTarget {
28
30
  visible: boolean;
29
31
  opacity: number;
30
- blendMode: string;
32
+ blendMode: LayerBlendMode;
31
33
  offsetX: number;
32
34
  offsetY: number;
33
35
  rotationZ: number;
@@ -47,4 +49,3 @@ export declare function createLayerTargetProvider(textmodifier: Textmodifier): L
47
49
  export declare function getLayerTargetId(textmodifier: Textmodifier, layer: TextmodeLayer): string;
48
50
  export declare function resolveLayerExportTarget(textmodifier: Textmodifier, layer?: TextmodeLayer): ResolvedLayerExportTarget;
49
51
  export declare function resolveLayerStackExportTargets(textmodifier: Textmodifier): ResolvedLayerStackExportTarget[];
50
- //# sourceMappingURL=LayerTarget.d.ts.map
@@ -3,4 +3,4 @@ export { FileHandler } from './FileHandler';
3
3
  export { getEncodedGlyphValueFromColor, resolveGlyphByEncodedValue } from './CharacterResolver';
4
4
  export { createLayerTargetProvider, getLayerTargetId, getLayerTargetOptions, resolveLayerExportTarget, resolveLayerStackExportTargets, } from './LayerTarget';
5
5
  export type { LayerExportOptions, LayerTargetOption, LayerTargetProvider, ResolvedLayerExportTarget, ResolvedLayerStackExportTarget, } from './LayerTarget';
6
- //# sourceMappingURL=index.d.ts.map
6
+ export type { ExportFrameContext, PrepareExportFrame } from './FramePreparation';
@@ -0,0 +1 @@
1
+ export {};
@@ -1,34 +1,14 @@
1
- import type { Textmodifier } from 'textmode.js';
2
- import type { TextmodePluginContext } from 'textmode.js';
1
+ import type { Textmodifier, TextmodePluginContext } from 'textmode.js';
3
2
  import type { GIFExportOptions } from './types';
4
- /**
5
- * Main GIF exporter for the textmode.js library.
6
- * Orchestrates the GIF export process by coordinating canvas capture,
7
- * frame processing, and file handling.
8
- */
3
+ /** Deterministic, bounded-memory GIF exporter. */
9
4
  export declare class GIFExporter {
10
- private readonly _recorder;
11
5
  private readonly _textmodifier;
12
6
  private readonly _registerPostDrawHook;
13
- /**
14
- * Creates an instance of GIFExporter.
15
- *
16
- * @param textmodifier The Textmodifier instance to capture frames from
17
- * @param registerPostDrawHook Function to register post-draw hooks
18
- */
19
- constructor(textmodifier: Textmodifier, registerPostDrawHook: TextmodePluginContext['registerPostDrawHook']);
20
- /**
21
- * Captures frames and saves them as a GIF file
22
- *
23
- * @param options Export options
24
- */
7
+ constructor(_textmodifier: Textmodifier, _registerPostDrawHook: TextmodePluginContext['registerPostDrawHook']);
25
8
  $saveGIF(options?: GIFExportOptions): Promise<void>;
26
- /**
27
- * Applies default values to the provided export options
28
- *
29
- * @param options User-provided options
30
- * @returns Complete options with defaults applied
31
- */
9
+ /** Generates a GIF blob without initiating a download. */
10
+ $generateGIFBlob(options?: GIFExportOptions): Promise<Blob>;
32
11
  private _applyDefaultOptions;
12
+ private _throwIfAborted;
13
+ private _yieldToBrowser;
33
14
  }
34
- //# sourceMappingURL=GIFExporter.d.ts.map
@@ -21,4 +21,3 @@ export declare class GIFRecorder {
21
21
  */
22
22
  $record(canvas: HTMLCanvasElement, options: GIFGenerationOptions, registerPostDrawHook: TextmodePluginContext['registerPostDrawHook'], onProgress?: (progress: GIFExportProgress) => void): Promise<GIFFrame[]>;
23
23
  }
24
- //# sourceMappingURL=GIFRecorder.d.ts.map
@@ -0,0 +1,15 @@
1
+ /** One-at-a-time worker bridge that bounds captured GIF memory to one RGBA frame. */
2
+ export declare class GIFWorkerClient {
3
+ private readonly _worker;
4
+ private readonly _pending;
5
+ private readonly _ready;
6
+ private _requestId;
7
+ private _disposed;
8
+ constructor(width: number, height: number, frameRate: number, repeat: number, signal?: AbortSignal);
9
+ encodeFrame(buffer: ArrayBuffer, frameIndex: number): Promise<void>;
10
+ finish(): Promise<ArrayBuffer>;
11
+ dispose: () => void;
12
+ private _request;
13
+ private _handleMessage;
14
+ private _handleError;
15
+ }
@@ -1,4 +1,3 @@
1
1
  export { GIFExporter } from './GIFExporter';
2
2
  export { GIFRecorder } from './GIFRecorder';
3
3
  export type { GIFExportOptions, GIFExportProgress, GIFGenerationOptions, GIFRecordingState } from './types';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1,7 +1,10 @@
1
+ import type { PrepareExportFrame } from '../base';
1
2
  export type GIFRecordingState = 'idle' | 'recording' | 'encoding' | 'completed' | 'error';
2
3
  /**
3
4
  * Progress information emitted during the GIF export process.
4
5
  *
6
+ * @category Animation export
7
+ *
5
8
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/GIFExportProgress | GIFExportProgress API reference}
6
9
  */
7
10
  export type GIFExportProgress = {
@@ -33,6 +36,8 @@ export type GIFExportProgress = {
33
36
  /**
34
37
  * Options for exporting the textmode content to GIF format.
35
38
  *
39
+ * @category Animation export
40
+ *
36
41
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/GIFExportOptions | GIFExportOptions API reference}
37
42
  */
38
43
  export type GIFExportOptions = {
@@ -70,6 +75,18 @@ export type GIFExportOptions = {
70
75
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/GIFExportOptions#repeat | GIFExportOptions.repeat API reference}
71
76
  */
72
77
  repeat?: number;
78
+ /**
79
+ * Abort signal for cancelling capture or encoding.
80
+ *
81
+ * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/GIFExportOptions#signal | GIFExportOptions.signal API reference}
82
+ */
83
+ signal?: AbortSignal;
84
+ /**
85
+ * Prepares external media before each deterministic frame is redrawn.
86
+ *
87
+ * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/GIFExportOptions#prepareframe | GIFExportOptions.prepareFrame API reference}
88
+ */
89
+ prepareFrame?: PrepareExportFrame;
73
90
  /**
74
91
  * Progress callback invoked throughout the recording lifecycle.
75
92
  *
@@ -83,6 +100,8 @@ export interface GIFGenerationOptions {
83
100
  frameRate: number;
84
101
  scale: number;
85
102
  repeat: number;
103
+ signal?: AbortSignal;
104
+ prepareFrame?: PrepareExportFrame;
86
105
  }
87
106
  export interface GIFFrame {
88
107
  imageData: ImageData;
@@ -90,4 +109,3 @@ export interface GIFFrame {
90
109
  height: number;
91
110
  delayMs?: number;
92
111
  }
93
- //# sourceMappingURL=types.d.ts.map
@@ -34,6 +34,8 @@ export declare class ImageExporter {
34
34
  * @param options Export options
35
35
  */
36
36
  $saveImage(canvas: HTMLCanvasElement, options?: ImageExportOptions): Promise<void>;
37
+ /** Generates an image blob using the public export options. */
38
+ $toImageBlob(canvas: HTMLCanvasElement, options?: ImageExportOptions): Promise<Blob>;
37
39
  /**
38
40
  * Copies the generated image to the clipboard using the modern Clipboard API
39
41
  *
@@ -42,4 +44,3 @@ export declare class ImageExporter {
42
44
  */
43
45
  $copyImageToClipboard(canvas: HTMLCanvasElement, options?: ImageExportOptions): Promise<void>;
44
46
  }
45
- //# sourceMappingURL=ImageExporter.d.ts.map
@@ -1,4 +1,3 @@
1
1
  export { ImageExporter } from './ImageExporter';
2
2
  export type { ImageExportOptions, ImageGenerationOptions, ImageFormat } from './types';
3
3
  export { IMAGE_MIME_TYPES, IMAGE_EXTENSIONS } from './types';
4
- //# sourceMappingURL=index.d.ts.map
@@ -8,6 +8,8 @@ export type ImageFormat = 'png' | 'jpg' | 'webp';
8
8
  /**
9
9
  * Options for exporting the textmode content to image format.
10
10
  *
11
+ * @category Canvas capture
12
+ *
11
13
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/ImageExportOptions | ImageExportOptions API reference}
12
14
  */
13
15
  export type ImageExportOptions = {
@@ -50,4 +52,3 @@ export declare const IMAGE_MIME_TYPES: Record<ImageFormat, string>;
50
52
  * File extension mapping for image formats.
51
53
  */
52
54
  export declare const IMAGE_EXTENSIONS: Record<ImageFormat, string>;
53
- //# sourceMappingURL=types.d.ts.map
@@ -12,4 +12,3 @@ export declare class JSONDataExtractor extends DataExtractor {
12
12
  */
13
13
  $extractCellData(target: ResolvedLayerExportTarget): JSONCellData[];
14
14
  }
15
- //# sourceMappingURL=JSONDataExtractor.d.ts.map
@@ -58,4 +58,3 @@ export declare class JSONExporter {
58
58
  */
59
59
  $saveJSON(textmodifier: Textmodifier, options?: JSONExportOptions): void;
60
60
  }
61
- //# sourceMappingURL=JSONExporter.d.ts.map
@@ -1,4 +1,3 @@
1
1
  export { JSONExporter } from './JSONExporter';
2
2
  export { JSONDataExtractor } from './JSONDataExtractor';
3
3
  export type { JSONDocumentFormat, JSONDocumentVersion, JSONCellCollection, JSONCellData, JSONCellTransform, JSONColorValue, JSONExportColorMode, JSONExportMetadata, JSONExportOptions, JSONExportTarget, JSONGenerationOptions, JSONLayerGrid, JSONObjectRowCell, JSONObjectRowsCellCollection, JSONRGBAColor, TextmodeAllDocumentJSON, TextmodeDocumentJSON, TextmodeDocumentLayer, TextmodeSelectedDocumentJSON, TextmodeSelectedDocumentLayer, } from './types';
4
- //# sourceMappingURL=index.d.ts.map
@@ -2,6 +2,8 @@ import type { LayerExportOptions } from '../base';
2
2
  /**
3
3
  * Target scope for JSON export.
4
4
  *
5
+ * @category JSON document data
6
+ *
5
7
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/JSONExportTarget | JSONExportTarget API reference}
6
8
  */
7
9
  export type JSONExportTarget = 'selected' | 'all';
@@ -20,6 +22,8 @@ export type JSONDocumentVersion = '2.0.0';
20
22
  /**
21
23
  * Supported JSON color output modes.
22
24
  *
25
+ * @category JSON document data
26
+ *
23
27
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/JSONExportColorMode | JSONExportColorMode API reference}
24
28
  */
25
29
  export type JSONExportColorMode = 'hex' | 'rgba';
@@ -163,12 +167,16 @@ export interface TextmodeAllDocumentJSON {
163
167
  /**
164
168
  * JSON document exported by the JSON exporter.
165
169
  *
170
+ * @category JSON document data
171
+ *
166
172
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/TextmodeDocumentJSON | TextmodeDocumentJSON API reference}
167
173
  */
168
174
  export type TextmodeDocumentJSON = TextmodeSelectedDocumentJSON | TextmodeAllDocumentJSON;
169
175
  /**
170
176
  * Options for exporting the textmode content to JSON format.
171
177
  *
178
+ * @category JSON document data
179
+ *
172
180
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/JSONExportOptions | JSONExportOptions API reference}
173
181
  */
174
182
  export type JSONExportOptions = LayerExportOptions & {
@@ -231,4 +239,3 @@ export interface JSONCellData {
231
239
  background: JSONRGBAColor;
232
240
  transform: JSONCellTransform;
233
241
  }
234
- //# sourceMappingURL=types.d.ts.map
@@ -76,4 +76,3 @@ export declare class SVGContentGenerator {
76
76
  */
77
77
  $optimizeSVGContent(svgContent: string): string;
78
78
  }
79
- //# sourceMappingURL=SVGContentGenerator.d.ts.map
@@ -24,4 +24,3 @@ export declare class SVGDataExtractor extends DataExtractor {
24
24
  */
25
25
  $extractSVGCellData(framebufferData: FramebufferData, grid: TextmodeGrid): SVGCellData[];
26
26
  }
27
- //# sourceMappingURL=SVGDataExtractor.d.ts.map
@@ -29,4 +29,3 @@ export declare class SVGExporter {
29
29
  */
30
30
  $saveSVG(textmodifier: Textmodifier, options?: SVGExportOptions): void;
31
31
  }
32
- //# sourceMappingURL=SVGExporter.d.ts.map
@@ -69,4 +69,3 @@ export declare class SVGPathGenerator {
69
69
  $generatePositionedCharacterPath(_character: string, font: TextmodeFont, cellX: number, cellY: number, cellWidth: number, _cellHeight: number, fontSize: number, glyphData: GlyphData | null): string | null;
70
70
  }
71
71
  export {};
72
- //# sourceMappingURL=SVGPathGenerator.d.ts.map
@@ -3,4 +3,3 @@ export { SVGDataExtractor } from './SVGDataExtractor';
3
3
  export { SVGContentGenerator } from './SVGContentGenerator';
4
4
  export { SVGPathGenerator } from './SVGPathGenerator';
5
5
  export type { SVGExportOptions, SVGGenerationOptions, SVGCellData, FramebufferData, RGBA, Position, CellPosition, CellTransform, GlyphPath, } from './types';
6
- //# sourceMappingURL=index.d.ts.map
@@ -54,6 +54,8 @@ export interface FramebufferData {
54
54
  /**
55
55
  * Options for exporting the textmode content to SVG format.
56
56
  *
57
+ * @category Layer data export
58
+ *
57
59
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/SVGExportOptions | SVGExportOptions API reference}
58
60
  */
59
61
  export type SVGExportOptions = LayerExportOptions & {
@@ -110,4 +112,3 @@ export interface SVGGenerationOptions {
110
112
  filename?: string;
111
113
  layer?: LayerExportOptions['layer'];
112
114
  }
113
- //# sourceMappingURL=types.d.ts.map
@@ -37,4 +37,3 @@ export declare class TXTExporter {
37
37
  */
38
38
  $saveTXT(textmodifier: Textmodifier, options?: TXTExportOptions): void;
39
39
  }
40
- //# sourceMappingURL=TXTExporter.d.ts.map
@@ -1,3 +1,2 @@
1
1
  export { TXTExporter } from './TXTExporter';
2
2
  export type { TXTExportOptions, TXTGenerationOptions, FramebufferData } from './types';
3
- //# sourceMappingURL=index.d.ts.map
@@ -2,6 +2,8 @@ import type { LayerExportOptions } from '../base';
2
2
  /**
3
3
  * Options for exporting the textmode content to TXT format.
4
4
  *
5
+ * @category Layer data export
6
+ *
5
7
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/TXTExportOptions | TXTExportOptions API reference}
6
8
  */
7
9
  export type TXTExportOptions = LayerExportOptions & {
@@ -38,4 +40,3 @@ export interface TXTGenerationOptions {
38
40
  * Re-export shared types from SVG module that are also used by TXT exporter
39
41
  */
40
42
  export type { FramebufferData } from '../svg/types';
41
- //# sourceMappingURL=types.d.ts.map
@@ -15,7 +15,8 @@ export declare class VideoExporter {
15
15
  * @param options Export options
16
16
  */
17
17
  $saveVideo(options?: VideoExportOptions): Promise<void>;
18
- private _saveVideo;
18
+ /** Generates a deterministic video without initiating a download. */
19
+ $generateVideoBlob(options?: VideoExportOptions): Promise<Blob>;
19
20
  private _applyDefaultOptions;
20
21
  private _positiveInteger;
21
22
  private _positiveNumber;
@@ -27,4 +28,3 @@ export declare class VideoExporter {
27
28
  private _currentPixelDensity;
28
29
  private _withExtension;
29
30
  }
30
- //# sourceMappingURL=VideoExporter.d.ts.map
@@ -29,4 +29,3 @@ export declare class VideoFrameDriver {
29
29
  private _restoreProperties;
30
30
  private _throwIfAborted;
31
31
  }
32
- //# sourceMappingURL=VideoFrameDriver.d.ts.map
@@ -16,4 +16,3 @@ export declare class VideoRecorder {
16
16
  private _normalizeError;
17
17
  private _log;
18
18
  }
19
- //# sourceMappingURL=VideoRecorder.d.ts.map
@@ -7,4 +7,3 @@ export declare class VideoExportError extends Error {
7
7
  export declare function createAbortError(): VideoExportError;
8
8
  export declare function createTimeoutError(message: string, cause?: unknown): VideoExportError;
9
9
  export declare function isAbortError(error: unknown): boolean;
10
- //# sourceMappingURL=errors.d.ts.map
@@ -3,4 +3,3 @@ export { VideoFrameDriver } from './VideoFrameDriver';
3
3
  export { VideoRecorder } from './VideoRecorder';
4
4
  export { VideoExportError } from './errors';
5
5
  export type { VideoBitrateMode, VideoBitratePreset, VideoEncodingPlan, VideoExportErrorCode, VideoExportFormat, VideoExportOptions, VideoExportPhase, VideoFrameDriverLike, VideoHardwareAcceleration, VideoLatencyMode, VideoExportProgress, VideoGenerationOptions, VideoRecordingState, VideoRenderFrameOptions, } from './types';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,9 @@
1
+ import type { PrepareExportFrame } from '../base';
1
2
  /**
2
3
  * Lifecycle state reported while a video export is being prepared, recorded, encoded, or completed.
3
4
  *
5
+ * @category Animation export
6
+ *
4
7
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoRecordingState | VideoRecordingState API reference}
5
8
  */
6
9
  export type VideoRecordingState = 'idle' | 'recording' | 'encoding' | 'completed' | 'error';
@@ -9,6 +12,8 @@ export type VideoRecordingState = 'idle' | 'recording' | 'encoding' | 'completed
9
12
  *
10
13
  * `rendering` is retained for 1.5.x compatibility. Current deterministic video capture emits `capturing`.
11
14
  *
15
+ * @category Animation export
16
+ *
12
17
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoExportPhase | VideoExportPhase API reference}
13
18
  */
14
19
  export type VideoExportPhase = 'probing' | 'rendering' | 'capturing' | 'encoding' | 'draining' | 'finalizing';
@@ -19,12 +24,16 @@ export type VideoCodec = 'vp8' | 'vp9' | 'avc' | (string & {});
19
24
  * Higher presets produce larger files with more detail. For exact control, pass a numeric
20
25
  * `bitrate` value in bits per second instead.
21
26
  *
27
+ * @category Animation export
28
+ *
22
29
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoBitratePreset | VideoBitratePreset API reference}
23
30
  */
24
31
  export type VideoBitratePreset = 'low' | 'medium' | 'high';
25
32
  /**
26
33
  * Video container format written by `saveVideo`.
27
34
  *
35
+ * @category Animation export
36
+ *
28
37
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoExportFormat | VideoExportFormat API reference}
29
38
  */
30
39
  export type VideoExportFormat = 'webm' | 'mp4';
@@ -36,6 +45,8 @@ export type VideoExportFormat = 'webm' | 'mp4';
36
45
  * - `'constant'`: asks the encoder to keep the bitrate steadier throughout the export. This can make file size
37
46
  * more predictable, but may waste bits on simple frames or reduce detail on complex frames.
38
47
  *
48
+ * @category Animation export
49
+ *
39
50
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoBitrateMode | VideoBitrateMode API reference}
40
51
  */
41
52
  export type VideoBitrateMode = 'variable' | 'constant';
@@ -46,6 +57,8 @@ export type VideoBitrateMode = 'variable' | 'constant';
46
57
  * - `'realtime'`: prioritizes low-latency encoding. It is intended for live streams and may drop frames when overloaded,
47
58
  * so it is usually not recommended for frame-perfect exports.
48
59
  *
60
+ * @category Animation export
61
+ *
49
62
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoLatencyMode | VideoLatencyMode API reference}
50
63
  */
51
64
  export type VideoLatencyMode = 'quality' | 'realtime';
@@ -58,6 +71,8 @@ export type VideoLatencyMode = 'quality' | 'realtime';
58
71
  * availability and output characteristics vary by device.
59
72
  * - `'prefer-software'`: prefer CPU encoding, often more consistent across machines, but usually slower.
60
73
  *
74
+ * @category Animation export
75
+ *
61
76
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoHardwareAcceleration | VideoHardwareAcceleration API reference}
62
77
  */
63
78
  export type VideoHardwareAcceleration = 'no-preference' | 'prefer-hardware' | 'prefer-software';
@@ -65,6 +80,8 @@ export type VideoExportErrorCode = 'VIDEO_EXPORT_UNSUPPORTED' | 'VIDEO_CODEC_UNS
65
80
  /**
66
81
  * Progress information emitted during the video export process.
67
82
  *
83
+ * @category Animation export
84
+ *
68
85
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoExportProgress | VideoExportProgress API reference}
69
86
  */
70
87
  export type VideoExportProgress = {
@@ -114,6 +131,8 @@ export type VideoExportProgress = {
114
131
  /**
115
132
  * Options for exporting the textmode content to video format.
116
133
  *
134
+ * @category Animation export
135
+ *
117
136
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoExportOptions | VideoExportOptions API reference}
118
137
  */
119
138
  export type VideoExportOptions = {
@@ -200,6 +219,12 @@ export type VideoExportOptions = {
200
219
  * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoExportOptions#signal | VideoExportOptions.signal API reference}
201
220
  */
202
221
  signal?: AbortSignal;
222
+ /**
223
+ * Prepares external media before each deterministic frame is redrawn.
224
+ *
225
+ * @see {@link https://code.textmode.art/api/textmode.export.js/type-aliases/VideoExportOptions#prepareframe | VideoExportOptions.prepareFrame API reference}
226
+ */
227
+ prepareFrame?: PrepareExportFrame;
203
228
  /**
204
229
  * When true, attempts to preserve alpha data in WebM recordings. MP4 exports reject this option.
205
230
  *
@@ -235,6 +260,7 @@ export interface VideoGenerationOptions {
235
260
  transparent: boolean;
236
261
  debugLogging: boolean;
237
262
  signal?: AbortSignal;
263
+ prepareFrame?: PrepareExportFrame;
238
264
  }
239
265
  export interface VideoEncodingPlan {
240
266
  format: VideoExportFormat;
@@ -256,6 +282,7 @@ export interface VideoRenderFrameOptions {
256
282
  frameCount: number;
257
283
  frameRate: number;
258
284
  signal?: AbortSignal;
285
+ prepareFrame?: PrepareExportFrame;
259
286
  onFrame(frame: {
260
287
  frameIndex: number;
261
288
  canvas: HTMLCanvasElement;
@@ -265,4 +292,3 @@ export interface VideoFrameDriverLike {
265
292
  readonly canvas: HTMLCanvasElement;
266
293
  $render(options: VideoRenderFrameOptions): Promise<void>;
267
294
  }
268
- //# sourceMappingURL=types.d.ts.map
@@ -1,2 +1 @@
1
1
  export declare function withAbortableTimeout<T>(promise: Promise<T>, message: string, signal: AbortSignal | undefined, timeoutMs: number): Promise<T>;
2
- //# sourceMappingURL=withAbortableTimeout.d.ts.map
@@ -1,81 +1,41 @@
1
1
  /**
2
2
  * @packageDocumentation
3
3
  *
4
- * Export plugin for textmode.js - save artworks as images, videos, SVG, JSON, and text.
4
+ * Export finished textmode.js artworks without leaving the sketch.
5
5
  *
6
- * This plugin adds comprehensive export capabilities to textmode.js instances,
7
- * allowing you to save your generative artworks in multiple formats with a
8
- * convenient overlay UI for quick access to all export options.
6
+ * ## Choose an output
9
7
  *
10
- * ## Available export formats
8
+ * Use **canvas capture** for the exact image on screen: PNG, JPEG, WebP, GIF,
9
+ * or video preserve compositing, filters, shaders, and post-processing. Use
10
+ * **layer data export** when the artwork should stay editable or machine
11
+ * readable: TXT, SVG, and JSON read from the selected layer, while JSON can
12
+ * also describe the full layer stack.
11
13
  *
12
- * ### Image formats
13
- * - {@link ImageExportOptions | PNG/JPEG/WebP} - Save canvas as raster image
14
- *
15
- * ### Vector formats
16
- * - {@link SVGExportOptions | SVG} - Save as scalable vector graphics
17
- *
18
- * ### Text formats
19
- * - {@link TXTExportOptions | TXT} - Save text content as plain text
20
- * - {@link JSONExportOptions | JSON} - Save document data as structured JSON
21
- *
22
- * ### Animation formats
23
- * - {@link GIFExportOptions | GIF} - Save as animated GIF
24
- * - {@link VideoExportOptions | Video} - Save as WebM or MP4 video
25
- *
26
- * @module textmode.export.js
14
+ * Start with {@link ExportPlugin}, then call the helpers added to your sketch
15
+ * or use the built-in export overlay. For recipes and format trade-offs, read
16
+ * the [Exporting guide](/docs/exporting).
27
17
  */
28
18
  import type { TextmodePlugin } from 'textmode.js';
29
19
  import './augmentations';
30
- import type { TextmodeExportPluginOptions } from './types';
31
- export type { TextmodeExportAPI, TextmodeExportPluginOptions, ExportOverlayController } from './types';
20
+ export type { ExportDefaults, ExportDefaultsPatch, ExportOverlayPosition, ExportOverlayPositionInput, GIFOverlayDefaults, ImageOverlayDefaults, JSONOverlayDefaults, SVGOverlayDefaults, TXTOverlayDefaults, VideoOverlayDefaults, } from './types';
21
+ export type { TextmodeExportAPI, ExportOverlayController } from './types';
32
22
  export type { ImageExportOptions } from './exporters/image';
33
23
  export type { SVGExportOptions } from './exporters/svg';
34
24
  export type { TXTExportOptions } from './exporters/txt';
35
- export type { JSONCellCollection, JSONCellTransform, JSONColorValue, JSONDocumentFormat, JSONDocumentVersion, JSONExportColorMode, JSONExportMetadata, JSONExportOptions, JSONExportTarget, JSONLayerGrid, JSONObjectRowCell, JSONObjectRowsCellCollection, JSONRGBAColor, TextmodeAllDocumentJSON, TextmodeDocumentJSON, TextmodeDocumentLayer, TextmodeSelectedDocumentJSON, TextmodeSelectedDocumentLayer, } from './exporters/json';
25
+ export type { JSONExportColorMode, JSONExportOptions, JSONExportTarget, TextmodeDocumentJSON } from './exporters/json';
36
26
  export type { GIFExportOptions, GIFExportProgress } from './exporters/gif';
37
- export type { VideoBitrateMode, VideoBitratePreset, VideoExportErrorCode, VideoExportFormat, VideoExportOptions, VideoExportPhase, VideoExportProgress, VideoHardwareAcceleration, VideoLatencyMode, VideoRecordingState, } from './exporters/video';
27
+ export type { VideoBitrateMode, VideoBitratePreset, VideoExportFormat, VideoExportOptions, VideoExportPhase, VideoExportProgress, VideoHardwareAcceleration, VideoLatencyMode, VideoRecordingState, } from './exporters/video';
38
28
  export type { LayerExportOptions } from './exporters/base';
39
29
  /**
40
- * Export plugin for textmode.js.
41
- *
42
- * Add this plugin to your textmode.js instance to enable exporting artworks
43
- * as images, videos, SVG, JSON, and text files. Includes an overlay UI for quick
44
- * access to all export options, which can be controlled at runtime.
30
+ * Default export plugin instance for the standard textmode.js workflow.
45
31
  *
46
- * @example
47
- * {@includeCode ../examples/ExportPlugin/init/sketch.js}
32
+ * @category Workflow
48
33
  *
49
34
  * @see {@link https://code.textmode.art/api/textmode.export.js/variables/ExportPlugin | ExportPlugin API reference}
50
35
  */
51
36
  export declare const ExportPlugin: TextmodePlugin;
52
- /**
53
- * Creates the `textmode.export.js` plugin for textmode.js.
54
- *
55
- * @deprecated Use {@link ExportPlugin} directly instead.
56
- * This function is provided for backwards compatibility only.
57
- *
58
- * @example
59
- * ```javascript
60
- * // Old way (deprecated)
61
- * import { createTextmodeExportPlugin } from 'textmode.export.js';
62
- * const t = textmode.create({ plugins: [createTextmodeExportPlugin()] });
63
- *
64
- * // New way (recommended)
65
- * import { ExportPlugin } from 'textmode.export.js';
66
- * const t = textmode.create({ plugins: [ExportPlugin] });
67
- * ```
68
- *
69
- * @param options Plugin options
70
- * @returns A textmode.js plugin instance.
71
- *
72
- * @see {@link https://code.textmode.art/api/textmode.export.js/functions/createTextmodeExportPlugin | createTextmodeExportPlugin API reference}
73
- */
74
- export declare const createTextmodeExportPlugin: (options?: TextmodeExportPluginOptions) => TextmodePlugin;
75
37
  declare global {
76
38
  interface Window {
77
39
  ExportPlugin?: TextmodePlugin;
78
- createTextmodeExportPlugin?: typeof createTextmodeExportPlugin;
79
40
  }
80
41
  }
81
- //# sourceMappingURL=index.d.ts.map