textmode.js 0.7.1 → 0.8.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 (54) hide show
  1. package/dist/textmode.esm.js +2042 -2108
  2. package/dist/textmode.umd.js +16 -16
  3. package/dist/types/Textmode.d.ts +11 -11
  4. package/dist/types/errors/index.d.ts +1 -1
  5. package/dist/types/index.d.ts +11 -3
  6. package/dist/types/rendering/webgl/core/Framebuffer.d.ts +0 -6
  7. package/dist/types/rendering/webgl/core/Renderer.d.ts +7 -6
  8. package/dist/types/rendering/webgl/core/interfaces/IFramebuffer.d.ts +6 -6
  9. package/dist/types/rendering/webgl/core/interfaces/IRenderer.d.ts +3 -3
  10. package/dist/types/rendering/webgl/index.d.ts +2 -2
  11. package/dist/types/rendering/webgl/pipeline/MaterialBatchPipeline.d.ts +1 -1
  12. package/dist/types/textmode/Canvas.d.ts +2 -2
  13. package/dist/types/textmode/Grid.d.ts +32 -3
  14. package/dist/types/textmode/Textmodifier.d.ts +14 -72
  15. package/dist/types/textmode/conversion/ConversionManager.d.ts +73 -0
  16. package/dist/types/textmode/conversion/ConversionRegistry.d.ts +61 -18
  17. package/dist/types/textmode/conversion/index.d.ts +3 -1
  18. package/dist/types/textmode/filters/FilterManager.d.ts +0 -4
  19. package/dist/types/textmode/filters/index.d.ts +1 -1
  20. package/dist/types/textmode/interfaces/ITextmodifier.d.ts +165 -50
  21. package/dist/types/textmode/layers/Layer2DCompositor.d.ts +13 -20
  22. package/dist/types/textmode/layers/LayerManager.d.ts +31 -20
  23. package/dist/types/textmode/layers/TextmodeLayer.d.ts +58 -20
  24. package/dist/types/textmode/layers/interfaces/ILayerManager.d.ts +7 -0
  25. package/dist/types/textmode/layers/interfaces/ITextmodeLayer.d.ts +49 -28
  26. package/dist/types/textmode/layers/types.d.ts +16 -21
  27. package/dist/types/textmode/loadables/ITextmodeSource.d.ts +123 -0
  28. package/dist/types/textmode/loadables/TextmodeImage.d.ts +2 -2
  29. package/dist/types/textmode/loadables/TextmodeSource.d.ts +10 -118
  30. package/dist/types/textmode/loadables/font/CharacterExtractor.d.ts +1 -1
  31. package/dist/types/textmode/loadables/font/TextmodeFont.d.ts +3 -0
  32. package/dist/types/textmode/loadables/font/index.d.ts +2 -2
  33. package/dist/types/textmode/loadables/index.d.ts +0 -2
  34. package/dist/types/textmode/loadables/video/ITextmodeVideo.d.ts +75 -0
  35. package/dist/types/textmode/loadables/video/TextmodeVideo.d.ts +23 -126
  36. package/dist/types/textmode/loading/LoadingPhase.d.ts +26 -0
  37. package/dist/types/textmode/loading/LoadingScreenManager.d.ts +91 -93
  38. package/dist/types/textmode/loading/index.d.ts +3 -2
  39. package/dist/types/textmode/loading/types.d.ts +57 -57
  40. package/dist/types/textmode/managers/MouseManager.d.ts +24 -14
  41. package/dist/types/textmode/managers/TouchManager.d.ts +25 -13
  42. package/dist/types/textmode/mixins/index.d.ts +1 -2
  43. package/dist/types/textmode/mixins/interfaces/IAnimationMixin.d.ts +87 -87
  44. package/dist/types/textmode/mixins/interfaces/IKeyboardMixin.d.ts +128 -128
  45. package/dist/types/textmode/mixins/interfaces/IMouseMixin.d.ts +96 -105
  46. package/dist/types/textmode/mixins/interfaces/IRenderingMixin.d.ts +271 -370
  47. package/dist/types/textmode/mixins/interfaces/ITouchMixin.d.ts +1 -1
  48. package/dist/types/textmode/types.d.ts +2 -6
  49. package/package.json +5 -2
  50. package/dist/types/textmode/layers/filters/index.d.ts +0 -6
  51. package/dist/types/textmode/loadables/video/TextmodeVideoPreloader.d.ts +0 -29
  52. package/dist/types/textmode/loadables/video/types.d.ts +0 -43
  53. package/dist/types/textmode/mixins/FontMixin.d.ts +0 -8
  54. package/dist/types/textmode/mixins/interfaces/IFontMixin.d.ts +0 -46
@@ -1,4 +1,4 @@
1
- import type { TouchEventHandler, TouchLongPressHandler, TouchPinchHandler, TouchPosition, TouchRotateHandler, TouchSwipeHandler, TouchTapHandler } from "../../managers/TouchManager";
1
+ import type { TouchEventHandler, TouchLongPressHandler, TouchPinchHandler, TouchPosition, TouchRotateHandler, TouchSwipeHandler, TouchTapHandler } from '../../managers/TouchManager';
2
2
  /**
3
3
  * Capabilities exposed by the TouchMixin for handling touch interaction and gestures.
4
4
  */
@@ -1,5 +1,5 @@
1
- import type { TextmodePlugin } from "./managers/PluginManager";
2
- import type { LoadingScreenOptions } from "./loading/";
1
+ import type { TextmodePlugin } from './managers/PluginManager';
2
+ import type { LoadingScreenOptions } from './loading/';
3
3
  /**
4
4
  * Options for creating a {@link Textmodifier} instance.
5
5
  */
@@ -22,10 +22,6 @@ export type TextmodeOptions = {
22
22
  height?: number;
23
23
  /**
24
24
  * URL or path to a custom font file *(.otf/.ttf)*.
25
- *
26
- * Required when using minified builds that don't include a default font.
27
- *
28
- * Optional for full builds *(will override embedded font if provided)*.
29
25
  */
30
26
  fontSource?: string;
31
27
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "textmode.js",
3
- "version": "0.7.1",
3
+ "version": "0.8.0-beta.2",
4
4
  "description": "textmode.js is a lightweight creative coding library for creating real-time ASCII art on the web.",
5
5
  "type": "module",
6
6
  "types": "./dist/types/index.d.ts",
@@ -23,7 +23,9 @@
23
23
  "test": "vitest",
24
24
  "test:ui": "vitest --ui",
25
25
  "test:run": "vitest run",
26
- "test:coverage": "vitest --coverage"
26
+ "test:coverage": "vitest --coverage",
27
+ "format": "prettier --write \"src/**/*.{ts,js}\"",
28
+ "format:check": "prettier --check \"src/**/*.{ts,js}\""
27
29
  },
28
30
  "devDependencies": {
29
31
  "@mapwhit/glsl-minify": "^1.0.0",
@@ -32,6 +34,7 @@
32
34
  "@types/node": "^24.0.13",
33
35
  "@vitest/ui": "^3.1.2",
34
36
  "jsdom": "^26.1.0",
37
+ "prettier": "^3.7.4",
35
38
  "terser": "^5.43.1",
36
39
  "tslib": "^2.8.1",
37
40
  "typedoc": "^0.28.13",
@@ -1,6 +0,0 @@
1
- export type { FilterName, BuiltInFilterName, BuiltInFilterParams, QueuedFilter, FilterContext, TextmodeFilterStrategy } from '../../filters';
2
- export { FilterRegistry, TextmodeFilterManager as FilterManager } from '../../filters';
3
- /**
4
- * @deprecated Use `FilterManager` instead. This alias exists for backwards compatibility.
5
- */
6
- export { TextmodeFilterManager as LayerFilterManager } from '../../filters';
@@ -1,29 +0,0 @@
1
- import type { TextmodeVideoPreloadCallbacks, TextmodeVideoPreloadStrategy } from './types';
2
- /**
3
- * Handles extracting still frames from an {@link HTMLVideoElement} into WebGL textures
4
- * so that {@link TextmodeVideo} can render deterministic, frame-accurate playback.
5
- */
6
- export declare class TextmodeVideoPreloader {
7
- private readonly _gl;
8
- private readonly _videoElement;
9
- private _frameRate;
10
- private _totalFrames;
11
- private _isPreloaded;
12
- private _preloadedFrames;
13
- private _lastProgressBucket;
14
- constructor(gl: WebGL2RenderingContext, videoElement: HTMLVideoElement);
15
- get isPreloaded(): boolean;
16
- get totalFrames(): number;
17
- get frameRate(): number | null;
18
- get textures(): readonly WebGLTexture[];
19
- dispose(): void;
20
- preload(frameRate: number, callbacks?: TextmodeVideoPreloadCallbacks): Promise<TextmodeVideoPreloadStrategy>;
21
- private _initializePreloadState;
22
- private _finalizePreloadSuccess;
23
- private _captureSourceToTexture;
24
- private _reportPreloadProgress;
25
- private _tryPreloadWithTrackProcessor;
26
- private _preloadWithLegacySeeking;
27
- private _waitForSeek;
28
- private _deletePreloadedTextures;
29
- }
@@ -1,43 +0,0 @@
1
- /**
2
- * Options for preloading video frames in {@link TextmodeVideo}.
3
- *
4
- * When providing this options object as a second argument to {@link Textmodifier.loadVideo},
5
- * you can choose to preload all video frames at a specified frame rate before using the video.
6
- *
7
- * When preloading, the video will not play live asynchronously. Instead, all frames will be captured
8
- * upfront, allowing for frame-accurate seeking and rendering.
9
- *
10
- * This is especially useful for scenarios where precise frame control is needed,
11
- * like capturing GIFs/videos from textmode.js canvas using the `textmode.export.js` add-on library without
12
- * missing frames due to asynchronous video playback.
13
- *
14
- * Preloading takes time proportional to the video length and frame rate, which introduces significant delays
15
- * before the sketch can start rendering. Therefore, it is recommended to use this feature only when intending
16
- * to capture or export frames, rather than for real-time playback.
17
- */
18
- export interface TextmodeVideoOptions {
19
- /** Frame rate to use when preloading video frames. If not specified, video will not be preloaded. */
20
- frameRate?: number;
21
- /** Callback invoked periodically during preloading to report progress. */
22
- onProgress?: (progress: TextmodeVideoPreloadProgress) => void;
23
- /** Callback invoked once preloading is complete. */
24
- onComplete?: (summary: TextmodeVideoPreloadComplete) => void;
25
- /** Callback invoked if an error occurs during preloading. */
26
- onError?: (error: Error) => void;
27
- }
28
- export type TextmodeVideoPreloadStrategy = 'captureStream' | 'seeking';
29
- export interface TextmodeVideoPreloadProgress {
30
- percent: number;
31
- loadedFrames: number;
32
- totalFrames: number;
33
- strategy: TextmodeVideoPreloadStrategy;
34
- }
35
- export interface TextmodeVideoPreloadComplete {
36
- totalFrames: number;
37
- strategy: TextmodeVideoPreloadStrategy;
38
- }
39
- export type TextmodeVideoPreloadCallbacks = {
40
- onProgress?: (progress: TextmodeVideoPreloadProgress) => void;
41
- onComplete?: (summary: TextmodeVideoPreloadComplete) => void;
42
- onError?: (error: Error) => void;
43
- };
@@ -1,8 +0,0 @@
1
- import type { Mixin } from './TextmodifierMixin';
2
- import type { IFontMixin } from './interfaces/IFontMixin';
3
- /**
4
- * Mixin that adds font capabilities to a class
5
- * @param Base The base class to extend
6
- * @returns Extended class with font capabilities
7
- */
8
- export declare const FontMixin: Mixin<IFontMixin>;
@@ -1,46 +0,0 @@
1
- /**
2
- * Interface for font capabilities that will be mixed into Textmodifier
3
- */
4
- export interface IFontMixin {
5
- /**
6
- * Update the font used for rendering.
7
- * @param fontSource The URL of the font to load.
8
- *
9
- * @example
10
- * ```javascript
11
- * // Create a Textmodifier instance
12
- * const t = textmode.create();
13
- *
14
- * t.setup(async () => {
15
- * // Load a custom font from a URL
16
- * await t.loadFont('https://example.com/fonts/myfont.ttf');
17
- *
18
- * // Local font example
19
- * // await t.loadFont('./fonts/myfont.ttf');
20
- * });
21
- * ```
22
- */
23
- loadFont(fontSource: string): Promise<void>;
24
- /**
25
- * Set the font size used for rendering.
26
- * @param size The font size to set.
27
- *
28
- * @example
29
- * ```javascript
30
- * // Create a Textmodifier instance
31
- * const t = textmode.create();
32
- *
33
- * t.setup(() => {
34
- * // Set the font size to 32
35
- * t.fontSize(32);
36
- * });
37
- *
38
- * t.draw(() => {
39
- * t.background(0);
40
- * t.char('A');
41
- * t.rect(5, 5);
42
- * });
43
- * ```
44
- */
45
- fontSize(size: number): void;
46
- }