html2canvas-pro 1.6.6 → 2.0.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.
- package/README.md +1 -0
- package/demo/image-smoothing-demo.html +256 -0
- package/demo/refactoring-test.html +602 -0
- package/dist/html2canvas-pro.esm.js +2846 -1238
- package/dist/html2canvas-pro.esm.js.map +1 -1
- package/dist/html2canvas-pro.js +2849 -1237
- package/dist/html2canvas-pro.js.map +1 -1
- package/dist/html2canvas-pro.min.js +5 -4
- package/dist/lib/__tests__/index.js +8 -2
- package/dist/lib/__tests__/index.js.map +1 -1
- package/dist/lib/config.js +72 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/core/__tests__/cache-storage.js +6 -3
- package/dist/lib/core/__tests__/cache-storage.js.map +1 -1
- package/dist/lib/core/__tests__/cache-storage.test.js +158 -0
- package/dist/lib/core/__tests__/cache-storage.test.js.map +1 -0
- package/dist/lib/core/__tests__/validator.js +296 -0
- package/dist/lib/core/__tests__/validator.js.map +1 -0
- package/dist/lib/core/cache-storage.js +130 -11
- package/dist/lib/core/cache-storage.js.map +1 -1
- package/dist/lib/core/context.js +5 -2
- package/dist/lib/core/context.js.map +1 -1
- package/dist/lib/core/debugger.js +3 -0
- package/dist/lib/core/debugger.js.map +1 -1
- package/dist/lib/core/origin-checker.js +54 -0
- package/dist/lib/core/origin-checker.js.map +1 -0
- package/dist/lib/core/performance-monitor.js +208 -0
- package/dist/lib/core/performance-monitor.js.map +1 -0
- package/dist/lib/core/validator.js +501 -0
- package/dist/lib/core/validator.js.map +1 -0
- package/dist/lib/css/index.js +2 -0
- package/dist/lib/css/index.js.map +1 -1
- package/dist/lib/css/property-descriptors/__tests__/background-tests.js +7 -1
- package/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +1 -1
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js +142 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js +167 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js +61 -0
- package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js.map +1 -0
- package/dist/lib/css/property-descriptors/image-rendering.js +34 -0
- package/dist/lib/css/property-descriptors/image-rendering.js.map +1 -0
- package/dist/lib/css/types/__tests__/image-tests.js +7 -1
- package/dist/lib/css/types/__tests__/image-tests.js.map +1 -1
- package/dist/lib/css/types/color-math.js +26 -0
- package/dist/lib/css/types/color-math.js.map +1 -0
- package/dist/lib/css/types/color-spaces/srgb.js +6 -6
- package/dist/lib/css/types/color-spaces/srgb.js.map +1 -1
- package/dist/lib/css/types/color-utilities.js +13 -22
- package/dist/lib/css/types/color-utilities.js.map +1 -1
- package/dist/lib/dom/__tests__/dom-normalizer.test.js +113 -0
- package/dist/lib/dom/__tests__/dom-normalizer.test.js.map +1 -0
- package/dist/lib/dom/__tests__/element-container.test.js +109 -0
- package/dist/lib/dom/__tests__/element-container.test.js.map +1 -0
- package/dist/lib/dom/document-cloner.js +152 -11
- package/dist/lib/dom/document-cloner.js.map +1 -1
- package/dist/lib/dom/dom-normalizer.js +80 -0
- package/dist/lib/dom/dom-normalizer.js.map +1 -0
- package/dist/lib/dom/element-container.js +32 -15
- package/dist/lib/dom/element-container.js.map +1 -1
- package/dist/lib/dom/node-parser.js +16 -20
- package/dist/lib/dom/node-parser.js.map +1 -1
- package/dist/lib/dom/node-type-guards.js +44 -0
- package/dist/lib/dom/node-type-guards.js.map +1 -0
- package/dist/lib/dom/replaced-elements/iframe-element-container.js +5 -4
- package/dist/lib/dom/replaced-elements/iframe-element-container.js.map +1 -1
- package/dist/lib/index.js +148 -41
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/render/canvas/__tests__/background-renderer.test.js +65 -0
- package/dist/lib/render/canvas/__tests__/background-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/__tests__/border-renderer.test.js +23 -0
- package/dist/lib/render/canvas/__tests__/border-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/__tests__/effects-renderer.test.js +30 -0
- package/dist/lib/render/canvas/__tests__/effects-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/__tests__/text-renderer.test.js +63 -0
- package/dist/lib/render/canvas/__tests__/text-renderer.test.js.map +1 -0
- package/dist/lib/render/canvas/background-renderer.js +222 -0
- package/dist/lib/render/canvas/background-renderer.js.map +1 -0
- package/dist/lib/render/canvas/border-renderer.js +185 -0
- package/dist/lib/render/canvas/border-renderer.js.map +1 -0
- package/dist/lib/render/canvas/canvas-renderer.js +61 -689
- package/dist/lib/render/canvas/canvas-renderer.js.map +1 -1
- package/dist/lib/render/canvas/effects-renderer.js +89 -0
- package/dist/lib/render/canvas/effects-renderer.js.map +1 -0
- package/dist/lib/render/canvas/text-renderer.js +508 -0
- package/dist/lib/render/canvas/text-renderer.js.map +1 -0
- package/dist/lib/render/renderer-interface.js +3 -0
- package/dist/lib/render/renderer-interface.js.map +1 -0
- package/dist/types/config.d.ts +54 -0
- package/dist/types/core/__tests__/cache-storage.test.d.ts +1 -0
- package/dist/types/core/__tests__/validator.d.ts +1 -0
- package/dist/types/core/cache-storage.d.ts +42 -1
- package/dist/types/core/context.d.ts +5 -1
- package/dist/types/core/origin-checker.d.ts +33 -0
- package/dist/types/core/performance-monitor.d.ts +131 -0
- package/dist/types/core/validator.d.ts +132 -0
- package/dist/types/css/index.d.ts +2 -0
- package/dist/types/css/property-descriptors/__tests__/image-rendering-integration.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/__tests__/image-rendering-performance.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/__tests__/image-rendering.test.d.ts +1 -0
- package/dist/types/css/property-descriptors/image-rendering.d.ts +8 -0
- package/dist/types/css/types/color-math.d.ts +12 -0
- package/dist/types/css/types/color-utilities.d.ts +2 -3
- package/dist/types/dom/__tests__/dom-normalizer.test.d.ts +1 -0
- package/dist/types/dom/__tests__/element-container.test.d.ts +1 -0
- package/dist/types/dom/document-cloner.d.ts +46 -0
- package/dist/types/dom/dom-normalizer.d.ts +43 -0
- package/dist/types/dom/element-container.d.ts +20 -1
- package/dist/types/dom/node-parser.d.ts +2 -7
- package/dist/types/dom/node-type-guards.d.ts +33 -0
- package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +4 -1
- package/dist/types/index.d.ts +48 -3
- package/dist/types/render/canvas/__tests__/background-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/__tests__/border-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/__tests__/effects-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/__tests__/text-renderer.test.d.ts +1 -0
- package/dist/types/render/canvas/background-renderer.d.ts +87 -0
- package/dist/types/render/canvas/border-renderer.d.ts +67 -0
- package/dist/types/render/canvas/canvas-renderer.d.ts +19 -23
- package/dist/types/render/canvas/effects-renderer.d.ts +64 -0
- package/dist/types/render/canvas/text-renderer.d.ts +57 -0
- package/dist/types/render/renderer-interface.d.ts +26 -0
- package/package.json +2 -1
package/dist/types/index.d.ts
CHANGED
|
@@ -1,15 +1,60 @@
|
|
|
1
1
|
import { CloneOptions, WindowOptions } from './dom/document-cloner';
|
|
2
2
|
import { RenderOptions } from './render/canvas/canvas-renderer';
|
|
3
3
|
import { ContextOptions } from './core/context';
|
|
4
|
+
import { Html2CanvasConfig, ConfigOptions } from './config';
|
|
5
|
+
import { createDefaultValidator, Validator, ValidationResult } from './core/validator';
|
|
6
|
+
import { PerformanceMonitor } from './core/performance-monitor';
|
|
4
7
|
export type Options = CloneOptions & WindowOptions & RenderOptions & ContextOptions & {
|
|
5
8
|
backgroundColor: string | null;
|
|
6
9
|
foreignObjectRendering: boolean;
|
|
7
10
|
removeContainer?: boolean;
|
|
11
|
+
cspNonce?: string;
|
|
12
|
+
validator?: Validator;
|
|
13
|
+
skipValidation?: boolean;
|
|
14
|
+
enablePerformanceMonitoring?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Enable/disable image smoothing (anti-aliasing) globally.
|
|
17
|
+
* - `false`: Pixel-perfect rendering for pixel art, sprites, and retro graphics
|
|
18
|
+
* - `true`: Smooth rendering for photos and high-quality images
|
|
19
|
+
* - CSS `image-rendering` property on individual elements takes precedence
|
|
20
|
+
* @default true (browser default)
|
|
21
|
+
* @example
|
|
22
|
+
* // Pixel art game screenshot
|
|
23
|
+
* html2canvas(element, { imageSmoothing: false, scale: 2 });
|
|
24
|
+
*
|
|
25
|
+
* // High-quality photo
|
|
26
|
+
* html2canvas(element, { imageSmoothing: true, imageSmoothingQuality: 'high' });
|
|
27
|
+
*/
|
|
28
|
+
imageSmoothing?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Image smoothing quality level when imageSmoothing is enabled.
|
|
31
|
+
* - `'low'`: Faster, lower quality (good for preview)
|
|
32
|
+
* - `'medium'`: Balanced (default in most browsers)
|
|
33
|
+
* - `'high'`: Slower, best quality (good for final export)
|
|
34
|
+
*
|
|
35
|
+
* Browser support: Chrome 54+, Firefox 94+, Safari 17+
|
|
36
|
+
* Falls back gracefully in older browsers.
|
|
37
|
+
* @default browser default (usually 'low' or 'medium')
|
|
38
|
+
*/
|
|
39
|
+
imageSmoothingQuality?: 'low' | 'medium' | 'high';
|
|
8
40
|
};
|
|
9
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Main html2canvas function with improved configuration management
|
|
43
|
+
*
|
|
44
|
+
* @param element - Element to render
|
|
45
|
+
* @param options - Rendering options
|
|
46
|
+
* @param config - Optional configuration (for advanced use cases)
|
|
47
|
+
* @returns Promise resolving to rendered canvas
|
|
48
|
+
*/
|
|
10
49
|
declare const html2canvas: {
|
|
11
|
-
(element: HTMLElement, options?: Partial<Options
|
|
50
|
+
(element: HTMLElement, options?: Partial<Options>, config?: Html2CanvasConfig): Promise<HTMLCanvasElement>;
|
|
12
51
|
setCspNonce: (nonce: string) => void;
|
|
13
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* Set CSP nonce for inline styles
|
|
55
|
+
* @deprecated Use options.cspNonce instead
|
|
56
|
+
*/
|
|
57
|
+
declare const setCspNonce: (nonce: string) => void;
|
|
14
58
|
export default html2canvas;
|
|
15
|
-
export { html2canvas, setCspNonce };
|
|
59
|
+
export { html2canvas, setCspNonce, Html2CanvasConfig, ConfigOptions, Validator, ValidationResult, createDefaultValidator, PerformanceMonitor };
|
|
60
|
+
export { IMAGE_RENDERING } from './css/property-descriptors/image-rendering';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering of element backgrounds including:
|
|
5
|
+
* - Background colors
|
|
6
|
+
* - Background images (URL)
|
|
7
|
+
* - Linear gradients
|
|
8
|
+
* - Radial gradients
|
|
9
|
+
* - Background patterns and repeats
|
|
10
|
+
*/
|
|
11
|
+
import { Context } from '../../core/context';
|
|
12
|
+
import { ElementContainer } from '../../dom/element-container';
|
|
13
|
+
/**
|
|
14
|
+
* Dependencies required for BackgroundRenderer
|
|
15
|
+
*/
|
|
16
|
+
export interface BackgroundRendererDependencies {
|
|
17
|
+
ctx: CanvasRenderingContext2D;
|
|
18
|
+
context: Context;
|
|
19
|
+
canvas: HTMLCanvasElement;
|
|
20
|
+
options: {
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
scale: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Background Renderer
|
|
28
|
+
*
|
|
29
|
+
* Specialized renderer for element backgrounds.
|
|
30
|
+
* Extracted from CanvasRenderer to improve code organization and maintainability.
|
|
31
|
+
*/
|
|
32
|
+
export declare class BackgroundRenderer {
|
|
33
|
+
private readonly ctx;
|
|
34
|
+
private readonly context;
|
|
35
|
+
private readonly canvas;
|
|
36
|
+
constructor(deps: BackgroundRendererDependencies);
|
|
37
|
+
/**
|
|
38
|
+
* Render background images for a container
|
|
39
|
+
* Supports URL images, linear gradients, and radial gradients
|
|
40
|
+
*
|
|
41
|
+
* @param container - Element container with background styles
|
|
42
|
+
*/
|
|
43
|
+
renderBackgroundImage(container: ElementContainer): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Render a URL-based background image
|
|
46
|
+
*/
|
|
47
|
+
private renderBackgroundURLImage;
|
|
48
|
+
/**
|
|
49
|
+
* Render a linear gradient background
|
|
50
|
+
*/
|
|
51
|
+
private renderLinearGradient;
|
|
52
|
+
/**
|
|
53
|
+
* Render a radial gradient background
|
|
54
|
+
*/
|
|
55
|
+
private renderRadialGradient;
|
|
56
|
+
/**
|
|
57
|
+
* Render a repeating pattern with offset
|
|
58
|
+
*
|
|
59
|
+
* @param path - Path to fill
|
|
60
|
+
* @param pattern - Canvas pattern or gradient
|
|
61
|
+
* @param offsetX - X offset for pattern
|
|
62
|
+
* @param offsetY - Y offset for pattern
|
|
63
|
+
*/
|
|
64
|
+
private renderRepeat;
|
|
65
|
+
/**
|
|
66
|
+
* Resize an image to target dimensions
|
|
67
|
+
*
|
|
68
|
+
* @param image - Source image
|
|
69
|
+
* @param width - Target width
|
|
70
|
+
* @param height - Target height
|
|
71
|
+
* @param imageRendering - CSS image-rendering property value
|
|
72
|
+
* @returns Resized canvas or original image
|
|
73
|
+
*/
|
|
74
|
+
private resizeImage;
|
|
75
|
+
/**
|
|
76
|
+
* Create a canvas path from path array
|
|
77
|
+
*
|
|
78
|
+
* @param paths - Array of path points
|
|
79
|
+
*/
|
|
80
|
+
private path;
|
|
81
|
+
/**
|
|
82
|
+
* Format path points into canvas path
|
|
83
|
+
*
|
|
84
|
+
* @param paths - Array of path points
|
|
85
|
+
*/
|
|
86
|
+
private formatPath;
|
|
87
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Border Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering of element borders including:
|
|
5
|
+
* - Solid borders
|
|
6
|
+
* - Double borders
|
|
7
|
+
* - Dashed borders
|
|
8
|
+
* - Dotted borders
|
|
9
|
+
*/
|
|
10
|
+
import { Color } from '../../css/types/color';
|
|
11
|
+
import { BoundCurves } from '../bound-curves';
|
|
12
|
+
import { BORDER_STYLE } from '../../css/property-descriptors/border-style';
|
|
13
|
+
import { Path } from '../path';
|
|
14
|
+
/**
|
|
15
|
+
* Dependencies required for BorderRenderer
|
|
16
|
+
*/
|
|
17
|
+
export interface BorderRendererDependencies {
|
|
18
|
+
ctx: CanvasRenderingContext2D;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Path creation callbacks
|
|
22
|
+
* The main CanvasRenderer retains path() and formatPath() methods,
|
|
23
|
+
* so we inject them as callbacks to avoid duplication
|
|
24
|
+
*/
|
|
25
|
+
export interface PathCallbacks {
|
|
26
|
+
path(paths: Path[]): void;
|
|
27
|
+
formatPath(paths: Path[]): void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Border Renderer
|
|
31
|
+
*
|
|
32
|
+
* Specialized renderer for element borders.
|
|
33
|
+
* Extracted from CanvasRenderer to improve code organization and maintainability.
|
|
34
|
+
*/
|
|
35
|
+
export declare class BorderRenderer {
|
|
36
|
+
private readonly ctx;
|
|
37
|
+
private pathCallbacks;
|
|
38
|
+
constructor(deps: BorderRendererDependencies, pathCallbacks: PathCallbacks);
|
|
39
|
+
/**
|
|
40
|
+
* Render a solid border
|
|
41
|
+
*
|
|
42
|
+
* @param color - Border color
|
|
43
|
+
* @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
|
|
44
|
+
* @param curvePoints - Border curve points
|
|
45
|
+
*/
|
|
46
|
+
renderSolidBorder(color: Color, side: number, curvePoints: BoundCurves): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Render a double border
|
|
49
|
+
* Falls back to solid border if width is too small
|
|
50
|
+
*
|
|
51
|
+
* @param color - Border color
|
|
52
|
+
* @param width - Border width
|
|
53
|
+
* @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
|
|
54
|
+
* @param curvePoints - Border curve points
|
|
55
|
+
*/
|
|
56
|
+
renderDoubleBorder(color: Color, width: number, side: number, curvePoints: BoundCurves): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Render a dashed or dotted border
|
|
59
|
+
*
|
|
60
|
+
* @param color - Border color
|
|
61
|
+
* @param width - Border width
|
|
62
|
+
* @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
|
|
63
|
+
* @param curvePoints - Border curve points
|
|
64
|
+
* @param style - Border style (DASHED or DOTTED)
|
|
65
|
+
*/
|
|
66
|
+
renderDashedDottedBorder(color: Color, width: number, side: number, curvePoints: BoundCurves, style: BORDER_STYLE): Promise<void>;
|
|
67
|
+
}
|
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
import { ElementPaint, StackingContext } from '../stacking-context';
|
|
2
2
|
import { Color } from '../../css/types/color';
|
|
3
3
|
import { ElementContainer } from '../../dom/element-container';
|
|
4
|
-
import { BORDER_STYLE } from '../../css/property-descriptors/border-style';
|
|
5
|
-
import { CSSParsedDeclaration } from '../../css';
|
|
6
|
-
import { TextContainer } from '../../dom/text-container';
|
|
7
4
|
import { Path } from '../path';
|
|
8
5
|
import { BoundCurves } from '../bound-curves';
|
|
9
|
-
import { TextBounds } from '../../css/layout/text';
|
|
10
6
|
import { ReplacedElementContainer } from '../../dom/replaced-elements';
|
|
11
|
-
import { IElementEffect } from '../effects';
|
|
12
|
-
import { Bounds } from '../../css/layout/bounds';
|
|
13
7
|
import { Renderer } from '../renderer';
|
|
14
8
|
import { Context } from '../../core/context';
|
|
15
9
|
export type RenderConfigurations = RenderOptions & {
|
|
16
10
|
backgroundColor: Color | null;
|
|
11
|
+
/**
|
|
12
|
+
* Enable/disable image smoothing (anti-aliasing).
|
|
13
|
+
* When disabled, images are rendered with pixel-perfect sharpness (no interpolation).
|
|
14
|
+
* CSS `image-rendering` property on individual elements takes precedence.
|
|
15
|
+
* @default browser default (usually true)
|
|
16
|
+
*/
|
|
17
|
+
imageSmoothing?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Image smoothing quality level when imageSmoothing is enabled.
|
|
20
|
+
* Higher quality may be slower for large images.
|
|
21
|
+
* Only supported in modern browsers (Chrome 54+, Firefox 94+, Safari 17+).
|
|
22
|
+
* Falls back gracefully in older browsers.
|
|
23
|
+
* @default browser default
|
|
24
|
+
*/
|
|
25
|
+
imageSmoothingQuality?: 'low' | 'medium' | 'high';
|
|
17
26
|
};
|
|
18
27
|
export interface RenderOptions {
|
|
19
28
|
scale: number;
|
|
@@ -26,37 +35,24 @@ export interface RenderOptions {
|
|
|
26
35
|
export declare class CanvasRenderer extends Renderer {
|
|
27
36
|
canvas: HTMLCanvasElement;
|
|
28
37
|
ctx: CanvasRenderingContext2D;
|
|
29
|
-
private readonly _activeEffects;
|
|
30
38
|
private readonly fontMetrics;
|
|
39
|
+
private readonly backgroundRenderer;
|
|
40
|
+
private readonly borderRenderer;
|
|
41
|
+
private readonly effectsRenderer;
|
|
42
|
+
private readonly textRenderer;
|
|
31
43
|
constructor(context: Context, options: RenderConfigurations);
|
|
32
|
-
applyEffects(effects: IElementEffect[]): void;
|
|
33
|
-
applyEffect(effect: IElementEffect): void;
|
|
34
|
-
popEffect(): void;
|
|
35
44
|
renderStack(stack: StackingContext): Promise<void>;
|
|
36
45
|
renderNode(paint: ElementPaint): Promise<void>;
|
|
37
|
-
renderTextWithLetterSpacing(text: TextBounds, letterSpacing: number, baseline: number): void;
|
|
38
46
|
/**
|
|
39
47
|
* Helper method to render text with paint order support
|
|
40
48
|
* Reduces code duplication in line-clamp and normal rendering
|
|
41
49
|
*/
|
|
42
|
-
private renderTextBoundWithPaintOrder;
|
|
43
|
-
private renderTextDecoration;
|
|
44
|
-
private drawDecorationLine;
|
|
45
|
-
private truncateTextWithEllipsis;
|
|
46
|
-
private createFontStyle;
|
|
47
|
-
renderTextNode(text: TextContainer, styles: CSSParsedDeclaration, containerBounds?: Bounds): Promise<void>;
|
|
48
50
|
renderReplacedElement(container: ReplacedElementContainer, curves: BoundCurves, image: HTMLImageElement | HTMLCanvasElement): void;
|
|
49
51
|
renderNodeContent(paint: ElementPaint): Promise<void>;
|
|
50
52
|
renderStackContent(stack: StackingContext): Promise<void>;
|
|
51
53
|
mask(paths: Path[]): void;
|
|
52
54
|
path(paths: Path[]): void;
|
|
53
55
|
formatPath(paths: Path[]): void;
|
|
54
|
-
renderRepeat(path: Path[], pattern: CanvasPattern | CanvasGradient, offsetX: number, offsetY: number): void;
|
|
55
|
-
resizeImage(image: HTMLImageElement, width: number, height: number): HTMLCanvasElement | HTMLImageElement;
|
|
56
|
-
renderBackgroundImage(container: ElementContainer): Promise<void>;
|
|
57
|
-
renderSolidBorder(color: Color, side: number, curvePoints: BoundCurves): Promise<void>;
|
|
58
|
-
renderDoubleBorder(color: Color, width: number, side: number, curvePoints: BoundCurves): Promise<void>;
|
|
59
56
|
renderNodeBackgroundAndBorders(paint: ElementPaint): Promise<void>;
|
|
60
|
-
renderDashedDottedBorder(color: Color, width: number, side: number, curvePoints: BoundCurves, style: BORDER_STYLE): Promise<void>;
|
|
61
57
|
render(element: ElementContainer): Promise<HTMLCanvasElement>;
|
|
62
58
|
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effects Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering effects including:
|
|
5
|
+
* - Opacity effects
|
|
6
|
+
* - Transform effects (matrix transformations)
|
|
7
|
+
* - Clip effects (clipping paths)
|
|
8
|
+
*/
|
|
9
|
+
import { IElementEffect } from '../effects';
|
|
10
|
+
import { Path } from '../path';
|
|
11
|
+
/**
|
|
12
|
+
* Dependencies required for EffectsRenderer
|
|
13
|
+
*/
|
|
14
|
+
export interface EffectsRendererDependencies {
|
|
15
|
+
ctx: CanvasRenderingContext2D;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Path callback for clip effects
|
|
19
|
+
*/
|
|
20
|
+
export interface EffectsPathCallback {
|
|
21
|
+
path(paths: Path[]): void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Effects Renderer
|
|
25
|
+
*
|
|
26
|
+
* Manages rendering effects stack including opacity, transforms, and clipping.
|
|
27
|
+
* Extracted from CanvasRenderer to improve code organization and maintainability.
|
|
28
|
+
*/
|
|
29
|
+
export declare class EffectsRenderer {
|
|
30
|
+
private readonly ctx;
|
|
31
|
+
private readonly pathCallback;
|
|
32
|
+
private readonly activeEffects;
|
|
33
|
+
constructor(deps: EffectsRendererDependencies, pathCallback: EffectsPathCallback);
|
|
34
|
+
/**
|
|
35
|
+
* Apply multiple effects
|
|
36
|
+
* Clears existing effects and applies new ones
|
|
37
|
+
*
|
|
38
|
+
* @param effects - Array of effects to apply
|
|
39
|
+
*/
|
|
40
|
+
applyEffects(effects: IElementEffect[]): void;
|
|
41
|
+
/**
|
|
42
|
+
* Apply a single effect
|
|
43
|
+
*
|
|
44
|
+
* @param effect - Effect to apply
|
|
45
|
+
*/
|
|
46
|
+
applyEffect(effect: IElementEffect): void;
|
|
47
|
+
/**
|
|
48
|
+
* Remove the most recent effect
|
|
49
|
+
* Restores the canvas state before the effect was applied
|
|
50
|
+
*/
|
|
51
|
+
popEffect(): void;
|
|
52
|
+
/**
|
|
53
|
+
* Get the current number of active effects
|
|
54
|
+
*
|
|
55
|
+
* @returns Number of active effects
|
|
56
|
+
*/
|
|
57
|
+
getActiveEffectCount(): number;
|
|
58
|
+
/**
|
|
59
|
+
* Check if there are any active effects
|
|
60
|
+
*
|
|
61
|
+
* @returns True if there are active effects
|
|
62
|
+
*/
|
|
63
|
+
hasActiveEffects(): boolean;
|
|
64
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering of text content including:
|
|
5
|
+
* - Text with letter spacing
|
|
6
|
+
* - Text decorations (underline, overline, line-through)
|
|
7
|
+
* - Text shadows
|
|
8
|
+
* - Webkit line clamp
|
|
9
|
+
* - Text overflow ellipsis
|
|
10
|
+
* - Paint order (fill/stroke)
|
|
11
|
+
* - Font styles
|
|
12
|
+
*/
|
|
13
|
+
import { Context } from '../../core/context';
|
|
14
|
+
import { TextContainer } from '../../dom/text-container';
|
|
15
|
+
import { CSSParsedDeclaration } from '../../css';
|
|
16
|
+
import { Bounds } from '../../css/layout/bounds';
|
|
17
|
+
import { TextBounds } from '../../css/layout/text';
|
|
18
|
+
/**
|
|
19
|
+
* Dependencies required for TextRenderer
|
|
20
|
+
*/
|
|
21
|
+
export interface TextRendererDependencies {
|
|
22
|
+
ctx: CanvasRenderingContext2D;
|
|
23
|
+
context: Context;
|
|
24
|
+
options: {
|
|
25
|
+
scale: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Text Renderer
|
|
30
|
+
*
|
|
31
|
+
* Specialized renderer for text content.
|
|
32
|
+
* Extracted from CanvasRenderer to improve code organization and maintainability.
|
|
33
|
+
*/
|
|
34
|
+
export declare class TextRenderer {
|
|
35
|
+
private readonly ctx;
|
|
36
|
+
private readonly options;
|
|
37
|
+
constructor(deps: TextRendererDependencies);
|
|
38
|
+
/**
|
|
39
|
+
* Render text with letter spacing
|
|
40
|
+
* Public method used by list rendering
|
|
41
|
+
*/
|
|
42
|
+
renderTextWithLetterSpacing(text: TextBounds, letterSpacing: number, baseline: number): void;
|
|
43
|
+
/**
|
|
44
|
+
* Helper method to render text with paint order support
|
|
45
|
+
* Reduces code duplication in line-clamp and normal rendering
|
|
46
|
+
*/
|
|
47
|
+
private renderTextBoundWithPaintOrder;
|
|
48
|
+
private renderTextDecoration;
|
|
49
|
+
private drawDecorationLine;
|
|
50
|
+
private truncateTextWithEllipsis;
|
|
51
|
+
/**
|
|
52
|
+
* Create font style array
|
|
53
|
+
* Public method used by list rendering
|
|
54
|
+
*/
|
|
55
|
+
createFontStyle(styles: CSSParsedDeclaration): string[];
|
|
56
|
+
renderTextNode(text: TextContainer, styles: CSSParsedDeclaration, containerBounds?: Bounds): Promise<void>;
|
|
57
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base interface for all specialized renderers
|
|
3
|
+
* Each renderer is responsible for rendering a specific aspect of an element
|
|
4
|
+
*/
|
|
5
|
+
export interface IRenderer {
|
|
6
|
+
/**
|
|
7
|
+
* Render the specified aspect of the element
|
|
8
|
+
*/
|
|
9
|
+
render(...args: any[]): void | Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Common dependencies required by renderers
|
|
13
|
+
*/
|
|
14
|
+
export interface RendererDependencies {
|
|
15
|
+
ctx: CanvasRenderingContext2D;
|
|
16
|
+
scale: number;
|
|
17
|
+
options: any;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Performance tracking for renderers
|
|
21
|
+
*/
|
|
22
|
+
export interface RenderMetrics {
|
|
23
|
+
renderCount: number;
|
|
24
|
+
totalTime: number;
|
|
25
|
+
averageTime: number;
|
|
26
|
+
}
|
package/package.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"default": "./dist/html2canvas-pro.esm.js"
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
|
-
"version": "
|
|
17
|
+
"version": "2.0.0",
|
|
18
18
|
"author": {
|
|
19
19
|
"name": "yorickshan",
|
|
20
20
|
"email": "yorickshan@gmail.com",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"appium-ios-simulator": "^8.0.9",
|
|
59
59
|
"base64-arraybuffer": "1.0.2",
|
|
60
60
|
"body-parser": "^2.2.1",
|
|
61
|
+
"change-case": "^5.4.4",
|
|
61
62
|
"chai": "6.2.2",
|
|
62
63
|
"conventional-changelog-cli": "^5.0.0",
|
|
63
64
|
"cors": "^2.8.5",
|