html2canvas-pro 2.1.1 → 2.2.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 +19 -19
- package/dist/html2canvas-pro.esm.js +10232 -10540
- package/dist/html2canvas-pro.esm.js.map +1 -1
- package/dist/html2canvas-pro.js +10875 -11185
- package/dist/html2canvas-pro.js.map +1 -1
- package/dist/html2canvas-pro.min.js +8 -8
- package/dist/lib/config.js +0 -22
- package/dist/lib/core/cache-storage.js +1 -38
- package/dist/lib/core/constants.js +25 -0
- package/dist/lib/core/context.js +1 -0
- package/dist/lib/core/features.js +1 -0
- package/dist/lib/core/render-element.js +2 -1
- package/dist/lib/core/validator.js +3 -3
- package/dist/lib/css/grouped/background-styles.js +36 -0
- package/dist/lib/css/grouped/border-styles.js +75 -0
- package/dist/lib/css/grouped/font-styles.js +93 -0
- package/dist/lib/css/grouped/layout-styles.js +127 -0
- package/dist/lib/css/index.js +81 -47
- package/dist/lib/css/layout/text.js +7 -6
- package/dist/lib/css/property-descriptors/background-blend-mode.js +41 -0
- package/dist/lib/css/property-descriptors/border-image-repeat.js +42 -0
- package/dist/lib/css/property-descriptors/border-image-slice.js +45 -0
- package/dist/lib/css/property-descriptors/border-image-source.js +21 -0
- package/dist/lib/css/property-descriptors/border-radius.js +1 -1
- package/dist/lib/css/property-descriptors/box-decoration-break.js +18 -0
- package/dist/lib/css/property-descriptors/counter-increment.js +17 -12
- package/dist/lib/css/property-descriptors/counter-reset.js +4 -12
- package/dist/lib/css/property-descriptors/filter.js +76 -0
- package/dist/lib/css/property-descriptors/font-variant-ligatures.js +34 -0
- package/dist/lib/css/property-descriptors/object-fit.js +1 -1
- package/dist/lib/css/property-descriptors/object-position.js +42 -0
- package/dist/lib/css/property-descriptors/visibility.js +1 -1
- package/dist/lib/css/property-descriptors/zoom.js +18 -0
- package/dist/lib/css/syntax/parser.js +0 -1
- package/dist/lib/css/types/color.js +5 -1
- package/dist/lib/css/types/functions/repeating-linear-gradient.js +9 -0
- package/dist/lib/css/types/image.js +12 -2
- package/dist/lib/css/types/length-percentage.js +6 -2
- package/dist/lib/css/types/safe-eval.js +80 -0
- package/dist/lib/dom/document-cloner.js +23 -163
- package/dist/lib/dom/slot-cloner.js +176 -0
- package/dist/lib/index.js +1 -17
- package/dist/lib/render/canvas/background-renderer.js +165 -32
- package/dist/lib/render/canvas/border-image-renderer.js +153 -0
- package/dist/lib/render/canvas/canvas-renderer.js +34 -189
- package/dist/lib/render/canvas/content-renderer.js +202 -0
- package/dist/lib/render/canvas/effects-renderer.js +10 -0
- package/dist/lib/render/canvas/text/text-decoration-renderer.js +99 -0
- package/dist/lib/render/canvas/text-renderer.js +100 -224
- package/dist/lib/render/effects.js +38 -3
- package/dist/lib/render/object-fit.js +19 -15
- package/dist/lib/render/stacking-context.js +11 -0
- package/dist/types/config.d.ts +0 -10
- package/dist/types/core/cache-storage.d.ts +0 -24
- package/dist/types/core/constants.d.ts +22 -0
- package/dist/types/core/context.d.ts +3 -0
- package/dist/types/core/performance-monitor.d.ts +4 -4
- package/dist/types/core/validator.d.ts +6 -8
- package/dist/types/css/grouped/background-styles.d.ts +16 -0
- package/dist/types/css/grouped/border-styles.d.ts +31 -0
- package/dist/types/css/grouped/font-styles.d.ts +35 -0
- package/dist/types/css/grouped/layout-styles.d.ts +46 -0
- package/dist/types/css/index.d.ts +30 -0
- package/dist/types/css/property-descriptors/background-blend-mode.d.ts +23 -0
- package/dist/types/css/property-descriptors/border-image-repeat.d.ts +12 -0
- package/dist/types/css/property-descriptors/border-image-slice.d.ts +10 -0
- package/dist/types/css/property-descriptors/border-image-source.d.ts +4 -0
- package/dist/types/css/property-descriptors/box-decoration-break.d.ts +6 -0
- package/dist/types/css/property-descriptors/counter-increment.d.ts +3 -0
- package/dist/types/css/property-descriptors/filter.d.ts +3 -0
- package/dist/types/css/property-descriptors/font-variant-ligatures.d.ts +14 -0
- package/dist/types/css/property-descriptors/object-position.d.ts +4 -0
- package/dist/types/css/property-descriptors/zoom.d.ts +3 -0
- package/dist/types/css/types/functions/repeating-linear-gradient.d.ts +4 -0
- package/dist/types/css/types/image.d.ts +4 -2
- package/dist/types/css/types/safe-eval.d.ts +8 -0
- package/dist/types/dom/document-cloner.d.ts +3 -44
- package/dist/types/dom/slot-cloner.d.ts +66 -0
- package/dist/types/index.d.ts +3 -7
- package/dist/types/options.d.ts +11 -0
- package/dist/types/render/canvas/background-renderer.d.ts +23 -0
- package/dist/types/render/canvas/border-image-renderer.d.ts +18 -0
- package/dist/types/render/canvas/canvas-renderer.d.ts +1 -0
- package/dist/types/render/canvas/content-renderer.d.ts +44 -0
- package/dist/types/render/canvas/text/text-decoration-renderer.d.ts +18 -0
- package/dist/types/render/canvas/text-renderer.d.ts +12 -1
- package/dist/types/render/effects.d.ts +12 -2
- package/dist/types/render/object-fit.d.ts +2 -1
- package/dist/types/render/renderer-interface.d.ts +11 -9
- package/package.json +5 -10
- package/dist/lib/dom/replaced-elements/pseudo-elements.js +0 -0
- package/dist/types/dom/replaced-elements/pseudo-elements.d.ts +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text Decoration Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering of text-decoration lines:
|
|
5
|
+
* - underline, overline, line-through
|
|
6
|
+
* - solid, double, dotted, dashed, wavy styles
|
|
7
|
+
* Extracted from TextRenderer to reduce file size.
|
|
8
|
+
*/
|
|
9
|
+
import { Bounds } from '../../../css/layout/bounds';
|
|
10
|
+
import { CSSParsedDeclaration } from '../../../css';
|
|
11
|
+
export declare class TextDecorationRenderer {
|
|
12
|
+
private readonly ctx;
|
|
13
|
+
constructor(ctx: CanvasRenderingContext2D);
|
|
14
|
+
render(bounds: Bounds, styles: CSSParsedDeclaration): void;
|
|
15
|
+
private draw;
|
|
16
|
+
private drawPattern;
|
|
17
|
+
private drawWavy;
|
|
18
|
+
}
|
|
@@ -36,6 +36,7 @@ export declare const hasCJKCharacters: (text: string) => boolean;
|
|
|
36
36
|
export declare class TextRenderer {
|
|
37
37
|
private readonly ctx;
|
|
38
38
|
private readonly options;
|
|
39
|
+
private readonly decorationRenderer;
|
|
39
40
|
constructor(deps: TextRendererDependencies);
|
|
40
41
|
/**
|
|
41
42
|
* Iterate grapheme clusters one-by-one, applying correct letter-spacing and
|
|
@@ -71,12 +72,22 @@ export declare class TextRenderer {
|
|
|
71
72
|
*/
|
|
72
73
|
private renderTextBoundWithPaintOrder;
|
|
73
74
|
private renderTextDecoration;
|
|
74
|
-
private drawDecorationLine;
|
|
75
75
|
private truncateTextWithEllipsis;
|
|
76
76
|
/**
|
|
77
77
|
* Create font style array
|
|
78
78
|
* Public method used by list rendering
|
|
79
79
|
*/
|
|
80
80
|
createFontStyle(styles: CSSParsedDeclaration): string[];
|
|
81
|
+
/**
|
|
82
|
+
* Render text with -webkit-line-clamp truncation.
|
|
83
|
+
* Groups text bounds by their Y position into visual lines, then renders
|
|
84
|
+
* only the first N-1 complete lines followed by an ellipsis on the Nth line.
|
|
85
|
+
*/
|
|
86
|
+
private renderLineClampedText;
|
|
87
|
+
/**
|
|
88
|
+
* Render single-line text with text-overflow: ellipsis.
|
|
89
|
+
* Returns true if ellipsis was applied (caller should skip normal rendering).
|
|
90
|
+
*/
|
|
91
|
+
private renderEllipsisText;
|
|
81
92
|
renderTextNode(text: TextContainer, styles: CSSParsedDeclaration, containerBounds?: Bounds): Promise<void>;
|
|
82
93
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { Matrix } from '../css/property-descriptors/transform';
|
|
2
|
+
import { MixBlendMode } from '../css/property-descriptors/mix-blend-mode';
|
|
2
3
|
import { Path } from './path';
|
|
3
4
|
export declare const enum EffectType {
|
|
4
5
|
TRANSFORM = 0,
|
|
5
6
|
CLIP = 1,
|
|
6
7
|
OPACITY = 2,
|
|
7
8
|
CLIP_PATH = 3,
|
|
8
|
-
BLEND = 4
|
|
9
|
+
BLEND = 4,
|
|
10
|
+
FILTER = 5
|
|
9
11
|
}
|
|
10
12
|
export declare const enum EffectTarget {
|
|
11
13
|
BACKGROUND_BORDERS = 2,
|
|
@@ -48,13 +50,21 @@ export declare class ClipPathEffect implements IElementEffect {
|
|
|
48
50
|
constructor(applyClip: (ctx: CanvasRenderingContext2D) => void);
|
|
49
51
|
}
|
|
50
52
|
export declare class BlendEffect implements IElementEffect {
|
|
53
|
+
readonly mixBlendMode: MixBlendMode;
|
|
54
|
+
readonly type: EffectType;
|
|
55
|
+
readonly target: number;
|
|
51
56
|
readonly compositeOperation: GlobalCompositeOperation;
|
|
57
|
+
constructor(mixBlendMode: MixBlendMode);
|
|
58
|
+
}
|
|
59
|
+
export declare class FilterEffect implements IElementEffect {
|
|
60
|
+
readonly filterString: string;
|
|
52
61
|
readonly type: EffectType;
|
|
53
62
|
readonly target: number;
|
|
54
|
-
constructor(
|
|
63
|
+
constructor(filterString: string);
|
|
55
64
|
}
|
|
56
65
|
export declare const isTransformEffect: (effect: IElementEffect) => effect is TransformEffect;
|
|
57
66
|
export declare const isClipEffect: (effect: IElementEffect) => effect is ClipEffect;
|
|
58
67
|
export declare const isOpacityEffect: (effect: IElementEffect) => effect is OpacityEffect;
|
|
59
68
|
export declare const isClipPathEffect: (effect: IElementEffect) => effect is ClipPathEffect;
|
|
60
69
|
export declare const isBlendEffect: (effect: IElementEffect) => effect is BlendEffect;
|
|
70
|
+
export declare const isFilterEffect: (effect: IElementEffect) => effect is FilterEffect;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ObjectFit } from '../css/property-descriptors/object-fit';
|
|
2
|
+
import { LengthPercentage } from '../css/types/length-percentage';
|
|
2
3
|
export interface ObjectFitBox {
|
|
3
4
|
left: number;
|
|
4
5
|
top: number;
|
|
@@ -15,4 +16,4 @@ export interface ObjectFitRendering {
|
|
|
15
16
|
dw: number;
|
|
16
17
|
dh: number;
|
|
17
18
|
}
|
|
18
|
-
export declare const calculateObjectFitRendering: (intrinsicWidth: number, intrinsicHeight: number, box: ObjectFitBox, objectFit: ObjectFit) => ObjectFitRendering;
|
|
19
|
+
export declare const calculateObjectFitRendering: (intrinsicWidth: number, intrinsicHeight: number, box: ObjectFitBox, objectFit: ObjectFit, objectPosition?: [LengthPercentage, LengthPercentage]) => ObjectFitRendering;
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Base interface for all specialized renderers
|
|
3
|
-
* Each renderer is responsible for rendering a specific aspect of an element
|
|
2
|
+
* Base interface for all specialized renderers.
|
|
3
|
+
* Each renderer is responsible for rendering a specific aspect of an element.
|
|
4
|
+
*
|
|
5
|
+
* @internal This interface is a structural contract; prefer using concrete
|
|
6
|
+
* renderer classes (BackgroundRenderer, BorderRenderer, etc.)
|
|
7
|
+
* directly rather than relying on the generic IRenderer shape.
|
|
4
8
|
*/
|
|
5
9
|
export interface IRenderer {
|
|
6
|
-
|
|
7
|
-
* Render the specified aspect of the element
|
|
8
|
-
*/
|
|
9
|
-
render(...args: any[]): void | Promise<void>;
|
|
10
|
+
render(...args: unknown[]): void | Promise<void>;
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
|
-
* Common dependencies required by renderers
|
|
13
|
+
* Common dependencies required by renderers.
|
|
14
|
+
* RenderConfigurations from canvas-renderer.ts provides a concrete type.
|
|
13
15
|
*/
|
|
14
16
|
export interface RendererDependencies {
|
|
15
17
|
ctx: CanvasRenderingContext2D;
|
|
16
18
|
scale: number;
|
|
17
|
-
options:
|
|
19
|
+
options: Record<string, unknown>;
|
|
18
20
|
}
|
|
19
21
|
/**
|
|
20
|
-
* Performance tracking for renderers
|
|
22
|
+
* Performance tracking for renderers.
|
|
21
23
|
*/
|
|
22
24
|
export interface RenderMetrics {
|
|
23
25
|
renderCount: number;
|
package/package.json
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"default": "./dist/html2canvas-pro.esm.js"
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
|
-
"version": "2.
|
|
22
|
+
"version": "2.2.1",
|
|
23
23
|
"author": {
|
|
24
24
|
"name": "yorickshan",
|
|
25
25
|
"email": "yorickshan@gmail.com",
|
|
@@ -41,10 +41,6 @@
|
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@commitlint/cli": "^20.3.0",
|
|
43
43
|
"@commitlint/config-conventional": "^20.2.0",
|
|
44
|
-
"@rollup/plugin-commonjs": "^29.0.0",
|
|
45
|
-
"@rollup/plugin-json": "^6.1.0",
|
|
46
|
-
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
47
|
-
"@rollup/plugin-typescript": "^12.3.0",
|
|
48
44
|
"@types/chai": "^5.2.3",
|
|
49
45
|
"@types/express": "^5.0.6",
|
|
50
46
|
"@types/karma": "^6.3.0",
|
|
@@ -91,8 +87,7 @@
|
|
|
91
87
|
"puppeteer": "^24.34.0",
|
|
92
88
|
"replace-in-file": "^8.4.0",
|
|
93
89
|
"rimraf": "^6.0.1",
|
|
94
|
-
"
|
|
95
|
-
"rollup-plugin-sourcemaps": "^0.6.3",
|
|
90
|
+
"rolldown": "^1.1.2",
|
|
96
91
|
"serve-index": "^1.9.1",
|
|
97
92
|
"slash": "5.1.0",
|
|
98
93
|
"ts-node": "^10.9.2",
|
|
@@ -116,8 +111,8 @@
|
|
|
116
111
|
},
|
|
117
112
|
"scripts": {
|
|
118
113
|
"prebuild": "rimraf dist/ && rimraf build/ && mkdir -p dist && mkdir -p build",
|
|
119
|
-
"build": "tsc --module commonjs -p tsconfig.build.json &&
|
|
120
|
-
"build:testrunner": "
|
|
114
|
+
"build": "tsc --module commonjs -p tsconfig.build.json && rolldown -c rolldown.config.ts && pnpm build:create-reftest-list && rolldown -c tests/rolldown.testrunner.config.ts && pnpm build:minify",
|
|
115
|
+
"build:testrunner": "rolldown -c tests/rolldown.testrunner.config.ts",
|
|
121
116
|
"build:minify": "uglifyjs --compress --comments /^!/ -o dist/html2canvas-pro.min.js --mangle -- dist/html2canvas-pro.js",
|
|
122
117
|
"build:reftest-result-list": "tsx scripts/create-reftest-result-list.ts",
|
|
123
118
|
"build:create-reftest-list": "tsx scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.js",
|
|
@@ -131,7 +126,7 @@
|
|
|
131
126
|
"reftests-diff": "mkdir -p tmp/snapshots && vitest run --config vitest.reftest.config.ts",
|
|
132
127
|
"prekarma": "node scripts/ensure-karma-prereqs.mjs",
|
|
133
128
|
"karma": "tsx tests/karma",
|
|
134
|
-
"watch": "
|
|
129
|
+
"watch": "rolldown -w",
|
|
135
130
|
"watch:unittest": "vitest",
|
|
136
131
|
"start": "tsx tests/server --port=8080 --cors=8081",
|
|
137
132
|
"commitlint": "commitlint --config .commitlintrc.json -e -V",
|
|
File without changes
|
|
File without changes
|