textmode.js 0.0.2 → 0.0.4

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.
@@ -1,12 +1,21 @@
1
1
  import { TextmodeFont } from './Font';
2
2
  import { TextmodeGrid } from './Grid';
3
- import { TextmodeErrorLevel } from '../errors';
3
+ import { TextmodeConversionPipeline } from './ConversionPipeline';
4
+ import type { TextmodeConverter } from './converters';
4
5
  /**
5
6
  * Options for initializing a {@link Textmodifier} instance.
6
7
  */
7
8
  export type TextmodeOptions = {
8
9
  /** The font size to use for text rendering. Defaults to 16. */
9
10
  fontSize?: number;
11
+ /**
12
+ * Automatic rendering mode. Defaults to 'auto'.
13
+ * - 'manual': Requires manual `render()` calls
14
+ * - 'auto': Automatically renders using requestAnimationFrame
15
+ */
16
+ renderMode?: 'manual' | 'auto';
17
+ /** Maximum frames per second for auto rendering. Defaults to 120. */
18
+ frameRate?: number;
10
19
  };
11
20
  /**
12
21
  * Main class for handling textmode rendering in a WebGL context.
@@ -18,18 +27,24 @@ export declare class Textmodifier {
18
27
  private textmodeCanvas;
19
28
  /** Core WebGL renderer */
20
29
  private renderer;
21
- private asciiShader;
22
30
  private canvasFramebuffer;
23
- private brightnessConverter;
24
- private _fontManager;
31
+ private _font;
25
32
  private _grid;
26
33
  private resizeObserver;
27
- private resultFramebuffer;
34
+ private _mode;
35
+ private _frameRateLimit;
36
+ private animationFrameId;
37
+ private lastFrameTime;
38
+ private frameInterval;
39
+ private _frameRate;
40
+ private lastRenderTime;
41
+ private _pipeline;
28
42
  private constructor();
29
43
  /**
30
44
  * Static factory method for creating and initializing a Textmodifier instance.
31
45
  * @param canvas The HTML canvas element to capture content from.
32
46
  * @param opts Optional configuration options for the `Textmodifier` instance.
47
+ * @ignore
33
48
  */
34
49
  static create(canvas: HTMLCanvasElement, opts?: TextmodeOptions): Promise<Textmodifier>;
35
50
  private setupEventListeners;
@@ -40,14 +55,40 @@ export declare class Textmodifier {
40
55
  loadFont(fontUrl: string): Promise<void>;
41
56
  /**
42
57
  * Apply textmode rendering to the canvas.
58
+ *
59
+ * **Note:** In `'auto'` mode, this is called automatically.
60
+ * In `'manual'` mode, you need to call this method when you want to update the rendering.
43
61
  */
44
62
  render(): void;
63
+ private resize;
45
64
  /**
46
- * Set the global error handling level for the library. This applies to all `Textmodifier` instances.
47
- * @param level The error handling level to set.
65
+ * Start automatic rendering
48
66
  */
49
- setErrorLevel(level: TextmodeErrorLevel): void;
50
- private resize;
67
+ private startAutoRendering;
68
+ /**
69
+ * Update FPS measurement - works for both auto and manual modes
70
+ */
71
+ private measureFrameRate;
72
+ /**
73
+ * Stop automatic rendering
74
+ */
75
+ private stopAutoRendering;
76
+ /**
77
+ * Change the rendering mode.
78
+ */
79
+ renderMode(mode?: 'manual' | 'auto'): void | 'auto' | 'manual';
80
+ /**
81
+ * Set the maximum frame rate for auto rendering. If called without arguments, returns the current measured frame rate.
82
+ * @param fps The maximum frames per second for auto rendering.
83
+ */
84
+ frameRate(fps?: number): number | void;
85
+ converter(): TextmodeConverter;
86
+ /** Get the current grid object used for rendering. */
51
87
  get grid(): TextmodeGrid;
52
- get fontManager(): TextmodeFont;
88
+ /** Get the current font object used for rendering. */
89
+ get font(): TextmodeFont;
90
+ /** Get the current rendering mode.*/
91
+ get mode(): 'manual' | 'auto';
92
+ /** Get the current textmode conversion pipeline */
93
+ get pipeline(): TextmodeConversionPipeline;
53
94
  }
@@ -0,0 +1,23 @@
1
+ import type { TextmodeFont } from "../Font";
2
+ import type { Framebuffer } from "../../rendering/Framebuffer";
3
+ import type { Renderer } from "../../rendering/Renderer";
4
+ import type { TextmodeGrid } from "../Grid";
5
+ export declare abstract class TextmodeConverter {
6
+ protected renderer: Renderer;
7
+ protected fontManager: TextmodeFont;
8
+ protected grid: TextmodeGrid;
9
+ protected _characterFramebuffer: Framebuffer;
10
+ protected _primaryColorFramebuffer: Framebuffer;
11
+ protected _secondaryColorFramebuffer: Framebuffer;
12
+ protected _rotationFramebuffer: Framebuffer;
13
+ protected _transformFramebuffer: Framebuffer;
14
+ protected options: any;
15
+ constructor(renderer: Renderer, fontManager: TextmodeFont, grid: TextmodeGrid, options?: any);
16
+ abstract convert(sourceFramebuffer: Framebuffer): void;
17
+ resize(): void;
18
+ get characterFramebuffer(): Framebuffer;
19
+ get primaryColorFramebuffer(): Framebuffer;
20
+ get secondaryColorFramebuffer(): Framebuffer;
21
+ get rotationFramebuffer(): Framebuffer;
22
+ get transformFramebuffer(): Framebuffer;
23
+ }
@@ -1,21 +1,11 @@
1
1
  import { ColorPalette } from "../../ColorPalette";
2
2
  import type { TextmodeFont } from "../Font";
3
- import type { Framebuffer } from "../../rendering/Framebuffer";
4
3
  import type { Renderer } from "../../rendering/Renderer";
5
4
  import type { TextmodeGrid } from "../Grid";
6
- export declare class TextmodeFeatureConverter {
7
- protected renderer: Renderer;
8
- protected fontManager: TextmodeFont;
9
- protected grid: TextmodeGrid;
10
- protected _characterFramebuffer: Framebuffer;
11
- protected _primaryColorFramebuffer: Framebuffer;
12
- protected _secondaryColorFramebuffer: Framebuffer;
13
- protected _rotationFramebuffer: Framebuffer;
14
- protected _transformFramebuffer: Framebuffer;
5
+ import { TextmodeConverter } from "./Converter";
6
+ export declare abstract class TextmodeFeatureConverter extends TextmodeConverter {
15
7
  protected palette: ColorPalette;
16
- protected options: any;
17
8
  constructor(renderer: Renderer, fontManager: TextmodeFont, grid: TextmodeGrid, options?: any);
18
- resize(): void;
19
9
  characters(characters: string): void;
20
10
  characterColor(r: number, g?: number, b?: number, a?: number): void;
21
11
  characterColorMode(mode: "sampled" | "fixed"): void;
@@ -25,9 +15,4 @@ export declare class TextmodeFeatureConverter {
25
15
  rotation(angle: number): void;
26
16
  flipHorizontally(flip: boolean | number): void;
27
17
  flipVertically(flip: boolean | number): void;
28
- get characterFramebuffer(): Framebuffer;
29
- get primaryColorFramebuffer(): Framebuffer;
30
- get secondaryColorFramebuffer(): Framebuffer;
31
- get rotationFramebuffer(): Framebuffer;
32
- get transformFramebuffer(): Framebuffer;
33
18
  }
@@ -0,0 +1,3 @@
1
+ export { TextmodeConverter } from './Converter';
2
+ export { TextmodeFeatureConverter } from './FeatureConverter';
3
+ export { TextmodeBrightnessConverter } from './BrightnessConverter';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "textmode.js",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Apply real-time ASCII conversion to any HTML canvas.",
5
5
  "type": "module",
6
6
  "types": "./dist/types/index.d.ts",
@@ -22,13 +22,14 @@
22
22
  },
23
23
  "devDependencies": {
24
24
  "@types/node": "^24.0.13",
25
- "@types/p5": "^1.7.6",
26
25
  "@vitest/ui": "^3.1.2",
27
26
  "tslib": "^2.8.1",
28
27
  "typescript": "^5.8.3",
29
28
  "vite": "^6.3.4",
30
29
  "vite-plugin-glsl": "^1.5.1",
31
- "vitest": "^3.1.2"
30
+ "vitest": "^3.1.2",
31
+ "typedoc": "^0.28.7",
32
+ "typedoc-plugin-markdown": "^4.7.0"
32
33
  },
33
34
  "repository": {
34
35
  "type": "git",
@@ -49,9 +50,5 @@
49
50
  "homepage": "https://github.com/humanbydefinition/textmode.js",
50
51
  "files": [
51
52
  "dist"
52
- ],
53
- "dependencies": {
54
- "typedoc": "^0.28.7",
55
- "typedoc-plugin-markdown": "^4.7.0"
56
- }
53
+ ]
57
54
  }