html2canvas-pro 1.6.7 → 2.0.1
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 +3391 -1491
- package/dist/html2canvas-pro.esm.js.map +1 -1
- package/dist/html2canvas-pro.js +3394 -1490
- 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 +4 -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__/clip-path.test.js +273 -0
- package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js.map +1 -0
- 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/clip-path.js +190 -0
- package/dist/lib/css/property-descriptors/clip-path.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 +3 -3
- package/dist/lib/dom/document-cloner.js.map +1 -1
- package/dist/lib/dom/dom-normalizer.js +116 -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 +310 -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 +94 -0
- package/dist/lib/render/canvas/effects-renderer.js.map +1 -0
- package/dist/lib/render/canvas/text-renderer.js +575 -0
- package/dist/lib/render/canvas/text-renderer.js.map +1 -0
- package/dist/lib/render/effects.js +17 -1
- package/dist/lib/render/effects.js.map +1 -1
- package/dist/lib/render/renderer-interface.js +3 -0
- package/dist/lib/render/renderer-interface.js.map +1 -0
- package/dist/lib/render/stacking-context.js +131 -0
- package/dist/lib/render/stacking-context.js.map +1 -1
- 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 +4 -0
- package/dist/types/css/property-descriptors/__tests__/clip-path.test.d.ts +1 -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/clip-path.d.ts +62 -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/dom-normalizer.d.ts +62 -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 +65 -0
- package/dist/types/render/canvas/text-renderer.d.ts +75 -0
- package/dist/types/render/effects.d.ts +15 -1
- package/dist/types/render/renderer-interface.d.ts +26 -0
- package/package.json +2 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effects Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering effects including:
|
|
5
|
+
* - Opacity effects
|
|
6
|
+
* - Transform effects (matrix transformations)
|
|
7
|
+
* - Clip effects (overflow / border-radius clipping via Path[])
|
|
8
|
+
* - Clip-path effects (CSS clip-path shapes: inset, circle, ellipse, polygon, path)
|
|
9
|
+
*/
|
|
10
|
+
import { IElementEffect } from '../effects';
|
|
11
|
+
import { Path } from '../path';
|
|
12
|
+
/**
|
|
13
|
+
* Dependencies required for EffectsRenderer
|
|
14
|
+
*/
|
|
15
|
+
export interface EffectsRendererDependencies {
|
|
16
|
+
ctx: CanvasRenderingContext2D;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Path callback for clip effects
|
|
20
|
+
*/
|
|
21
|
+
export interface EffectsPathCallback {
|
|
22
|
+
path(paths: Path[]): void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Effects Renderer
|
|
26
|
+
*
|
|
27
|
+
* Manages rendering effects stack including opacity, transforms, and clipping.
|
|
28
|
+
* Extracted from CanvasRenderer to improve code organization and maintainability.
|
|
29
|
+
*/
|
|
30
|
+
export declare class EffectsRenderer {
|
|
31
|
+
private readonly ctx;
|
|
32
|
+
private readonly pathCallback;
|
|
33
|
+
private readonly activeEffects;
|
|
34
|
+
constructor(deps: EffectsRendererDependencies, pathCallback: EffectsPathCallback);
|
|
35
|
+
/**
|
|
36
|
+
* Apply multiple effects
|
|
37
|
+
* Clears existing effects and applies new ones
|
|
38
|
+
*
|
|
39
|
+
* @param effects - Array of effects to apply
|
|
40
|
+
*/
|
|
41
|
+
applyEffects(effects: IElementEffect[]): void;
|
|
42
|
+
/**
|
|
43
|
+
* Apply a single effect
|
|
44
|
+
*
|
|
45
|
+
* @param effect - Effect to apply
|
|
46
|
+
*/
|
|
47
|
+
applyEffect(effect: IElementEffect): void;
|
|
48
|
+
/**
|
|
49
|
+
* Remove the most recent effect
|
|
50
|
+
* Restores the canvas state before the effect was applied
|
|
51
|
+
*/
|
|
52
|
+
popEffect(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Get the current number of active effects
|
|
55
|
+
*
|
|
56
|
+
* @returns Number of active effects
|
|
57
|
+
*/
|
|
58
|
+
getActiveEffectCount(): number;
|
|
59
|
+
/**
|
|
60
|
+
* Check if there are any active effects
|
|
61
|
+
*
|
|
62
|
+
* @returns True if there are active effects
|
|
63
|
+
*/
|
|
64
|
+
hasActiveEffects(): boolean;
|
|
65
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
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
|
+
export declare const hasCJKCharacters: (text: string) => boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Text Renderer
|
|
31
|
+
*
|
|
32
|
+
* Specialized renderer for text content.
|
|
33
|
+
* Extracted from CanvasRenderer to improve code organization and maintainability.
|
|
34
|
+
*/
|
|
35
|
+
export declare class TextRenderer {
|
|
36
|
+
private readonly ctx;
|
|
37
|
+
private readonly options;
|
|
38
|
+
constructor(deps: TextRendererDependencies);
|
|
39
|
+
/**
|
|
40
|
+
* Iterate grapheme clusters one-by-one, applying correct letter-spacing and
|
|
41
|
+
* per-script baseline for each character.
|
|
42
|
+
*
|
|
43
|
+
* Issue #73: When letter-spacing is non-zero, text must be rendered character by
|
|
44
|
+
* character. This helper centralises two fixes applied during that iteration:
|
|
45
|
+
* 1. Add `letterSpacing` to each character's advance width (was previously
|
|
46
|
+
* omitted, causing characters to render without any spacing).
|
|
47
|
+
* 2. Switch to the ideographic baseline for CJK glyphs so their vertical
|
|
48
|
+
* position matches how browsers lay them out in the DOM.
|
|
49
|
+
*
|
|
50
|
+
* The `renderFn` callback receives (letter, x, y) and performs the actual draw
|
|
51
|
+
* call (fillText or strokeText), allowing fill and stroke paths to share one
|
|
52
|
+
* implementation.
|
|
53
|
+
*/
|
|
54
|
+
private iterateLettersWithLetterSpacing;
|
|
55
|
+
/**
|
|
56
|
+
* Render text with letter-spacing applied (fill pass).
|
|
57
|
+
* When letterSpacing is 0 the whole string is drawn in one call; otherwise each
|
|
58
|
+
* grapheme is drawn individually so spacing and CJK baseline are applied correctly.
|
|
59
|
+
*/
|
|
60
|
+
renderTextWithLetterSpacing(text: TextBounds, letterSpacing: number, baseline: number): void;
|
|
61
|
+
/**
|
|
62
|
+
* Helper method to render text with paint order support
|
|
63
|
+
* Reduces code duplication in line-clamp and normal rendering
|
|
64
|
+
*/
|
|
65
|
+
private renderTextBoundWithPaintOrder;
|
|
66
|
+
private renderTextDecoration;
|
|
67
|
+
private drawDecorationLine;
|
|
68
|
+
private truncateTextWithEllipsis;
|
|
69
|
+
/**
|
|
70
|
+
* Create font style array
|
|
71
|
+
* Public method used by list rendering
|
|
72
|
+
*/
|
|
73
|
+
createFontStyle(styles: CSSParsedDeclaration): string[];
|
|
74
|
+
renderTextNode(text: TextContainer, styles: CSSParsedDeclaration, containerBounds?: Bounds): Promise<void>;
|
|
75
|
+
}
|
|
@@ -3,7 +3,8 @@ import { Path } from './path';
|
|
|
3
3
|
export declare const enum EffectType {
|
|
4
4
|
TRANSFORM = 0,
|
|
5
5
|
CLIP = 1,
|
|
6
|
-
OPACITY = 2
|
|
6
|
+
OPACITY = 2,
|
|
7
|
+
CLIP_PATH = 3
|
|
7
8
|
}
|
|
8
9
|
export declare const enum EffectTarget {
|
|
9
10
|
BACKGROUND_BORDERS = 2,
|
|
@@ -33,6 +34,19 @@ export declare class OpacityEffect implements IElementEffect {
|
|
|
33
34
|
readonly target: number;
|
|
34
35
|
constructor(opacity: number);
|
|
35
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Clips the element and all its descendants to an arbitrary canvas-drawn shape.
|
|
39
|
+
* The `applyClip` callback is responsible for calling beginPath, the shape
|
|
40
|
+
* operations, and ctx.clip() — giving each shape type full control over how
|
|
41
|
+
* the path is constructed (arc, ellipse, lineTo, Path2D, etc.).
|
|
42
|
+
*/
|
|
43
|
+
export declare class ClipPathEffect implements IElementEffect {
|
|
44
|
+
readonly applyClip: (ctx: CanvasRenderingContext2D) => void;
|
|
45
|
+
readonly type: EffectType;
|
|
46
|
+
readonly target: number;
|
|
47
|
+
constructor(applyClip: (ctx: CanvasRenderingContext2D) => void);
|
|
48
|
+
}
|
|
36
49
|
export declare const isTransformEffect: (effect: IElementEffect) => effect is TransformEffect;
|
|
37
50
|
export declare const isClipEffect: (effect: IElementEffect) => effect is ClipEffect;
|
|
38
51
|
export declare const isOpacityEffect: (effect: IElementEffect) => effect is OpacityEffect;
|
|
52
|
+
export declare const isClipPathEffect: (effect: IElementEffect) => effect is ClipPathEffect;
|
|
@@ -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.1",
|
|
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",
|