html2canvas-pro 2.1.0 → 2.2.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/dist/html2canvas-pro.esm.js +10226 -10526
- package/dist/html2canvas-pro.esm.js.map +1 -1
- package/dist/html2canvas-pro.js +10869 -11171
- 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 +3 -40
- package/dist/lib/core/constants.js +25 -0
- package/dist/lib/core/context.js +1 -0
- package/dist/lib/core/features.js +3 -2
- 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 +74 -46
- 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 +169 -30
- package/dist/lib/render/canvas/border-image-renderer.js +153 -0
- package/dist/lib/render/canvas/canvas-renderer.js +39 -190
- package/dist/lib/render/canvas/content-renderer.js +202 -0
- package/dist/lib/render/canvas/effects-renderer.js +3 -0
- package/dist/lib/render/canvas/foreignobject-renderer.js +5 -1
- 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 +7 -20
- package/dist/lib/dom/replaced-elements/pseudo-elements.js +0 -0
- package/dist/lib/invariant.js +0 -9
- package/dist/types/dom/replaced-elements/pseudo-elements.d.ts +0 -0
- package/dist/types/invariant.d.ts +0 -1
- package/src/__tests__/index.ts +0 -99
- package/src/config.ts +0 -107
- package/src/core/__mocks__/cache-storage.ts +0 -1
- package/src/core/__mocks__/context.ts +0 -19
- package/src/core/__mocks__/features.ts +0 -8
- package/src/core/__mocks__/logger.ts +0 -17
- package/src/core/__tests__/cache-storage.test.ts +0 -205
- package/src/core/__tests__/cache-storage.ts +0 -278
- package/src/core/__tests__/logger.ts +0 -29
- package/src/core/__tests__/validator.ts +0 -359
- package/src/core/bitwise.ts +0 -1
- package/src/core/cache-storage.ts +0 -315
- package/src/core/context.ts +0 -31
- package/src/core/debugger.ts +0 -32
- package/src/core/features.ts +0 -222
- package/src/core/logger.ts +0 -64
- package/src/core/origin-checker.ts +0 -57
- package/src/core/performance-monitor.ts +0 -241
- package/src/core/render-element.ts +0 -272
- package/src/core/util.ts +0 -1
- package/src/core/validator.ts +0 -593
- package/src/css/index.ts +0 -427
- package/src/css/layout/__mocks__/bounds.ts +0 -6
- package/src/css/layout/bounds.ts +0 -79
- package/src/css/layout/text.ts +0 -161
- package/src/css/property-descriptor.ts +0 -49
- package/src/css/property-descriptors/__tests__/background-tests.ts +0 -65
- package/src/css/property-descriptors/__tests__/clip-path.test.ts +0 -280
- package/src/css/property-descriptors/__tests__/font-family.ts +0 -25
- package/src/css/property-descriptors/__tests__/image-rendering-integration.test.ts +0 -153
- package/src/css/property-descriptors/__tests__/image-rendering-performance.test.ts +0 -175
- package/src/css/property-descriptors/__tests__/image-rendering.test.ts +0 -72
- package/src/css/property-descriptors/__tests__/paint-order.ts +0 -87
- package/src/css/property-descriptors/__tests__/text-shadow.ts +0 -94
- package/src/css/property-descriptors/__tests__/transform-tests.ts +0 -18
- package/src/css/property-descriptors/background-clip.ts +0 -30
- package/src/css/property-descriptors/background-color.ts +0 -9
- package/src/css/property-descriptors/background-image.ts +0 -27
- package/src/css/property-descriptors/background-origin.ts +0 -31
- package/src/css/property-descriptors/background-position.ts +0 -38
- package/src/css/property-descriptors/background-repeat.ts +0 -44
- package/src/css/property-descriptors/background-size.ts +0 -27
- package/src/css/property-descriptors/border-color.ts +0 -13
- package/src/css/property-descriptors/border-radius.ts +0 -19
- package/src/css/property-descriptors/border-style.ts +0 -34
- package/src/css/property-descriptors/border-width.ts +0 -20
- package/src/css/property-descriptors/box-shadow.ts +0 -60
- package/src/css/property-descriptors/clip-path.ts +0 -271
- package/src/css/property-descriptors/color.ts +0 -9
- package/src/css/property-descriptors/content.ts +0 -26
- package/src/css/property-descriptors/counter-increment.ts +0 -43
- package/src/css/property-descriptors/counter-reset.ts +0 -36
- package/src/css/property-descriptors/direction.ts +0 -23
- package/src/css/property-descriptors/display.ts +0 -117
- package/src/css/property-descriptors/duration.ts +0 -14
- package/src/css/property-descriptors/float.ts +0 -29
- package/src/css/property-descriptors/font-family.ts +0 -38
- package/src/css/property-descriptors/font-size.ts +0 -9
- package/src/css/property-descriptors/font-style.ts +0 -25
- package/src/css/property-descriptors/font-variant.ts +0 -12
- package/src/css/property-descriptors/font-weight.ts +0 -26
- package/src/css/property-descriptors/image-rendering.ts +0 -33
- package/src/css/property-descriptors/letter-spacing.ts +0 -25
- package/src/css/property-descriptors/line-break.ts +0 -22
- package/src/css/property-descriptors/line-height.ts +0 -22
- package/src/css/property-descriptors/list-style-image.ts +0 -19
- package/src/css/property-descriptors/list-style-position.ts +0 -22
- package/src/css/property-descriptors/list-style-type.ts +0 -179
- package/src/css/property-descriptors/margin.ts +0 -13
- package/src/css/property-descriptors/mix-blend-mode.ts +0 -35
- package/src/css/property-descriptors/object-fit.ts +0 -39
- package/src/css/property-descriptors/opacity.ts +0 -15
- package/src/css/property-descriptors/overflow-wrap.ts +0 -22
- package/src/css/property-descriptors/overflow.ts +0 -34
- package/src/css/property-descriptors/padding.ts +0 -14
- package/src/css/property-descriptors/paint-order.ts +0 -42
- package/src/css/property-descriptors/position.ts +0 -30
- package/src/css/property-descriptors/quotes.ts +0 -57
- package/src/css/property-descriptors/rotate.ts +0 -34
- package/src/css/property-descriptors/text-align.ts +0 -26
- package/src/css/property-descriptors/text-decoration-color.ts +0 -9
- package/src/css/property-descriptors/text-decoration-line.ts +0 -38
- package/src/css/property-descriptors/text-decoration-style.ts +0 -32
- package/src/css/property-descriptors/text-decoration-thickness.ts +0 -30
- package/src/css/property-descriptors/text-overflow.ts +0 -23
- package/src/css/property-descriptors/text-shadow.ts +0 -52
- package/src/css/property-descriptors/text-transform.ts +0 -27
- package/src/css/property-descriptors/text-underline-offset.ts +0 -27
- package/src/css/property-descriptors/transform-origin.ts +0 -29
- package/src/css/property-descriptors/transform.ts +0 -74
- package/src/css/property-descriptors/visibility.ts +0 -25
- package/src/css/property-descriptors/webkit-line-clamp.ts +0 -30
- package/src/css/property-descriptors/webkit-text-stroke-color.ts +0 -8
- package/src/css/property-descriptors/webkit-text-stroke-width.ts +0 -15
- package/src/css/property-descriptors/word-break.ts +0 -25
- package/src/css/property-descriptors/writing-mode.ts +0 -37
- package/src/css/property-descriptors/z-index.ts +0 -27
- package/src/css/syntax/__tests__/tokernizer-tests.ts +0 -29
- package/src/css/syntax/parser.ts +0 -188
- package/src/css/syntax/tokenizer.ts +0 -822
- package/src/css/type-descriptor.ts +0 -7
- package/src/css/types/__tests__/color-tests.ts +0 -147
- package/src/css/types/__tests__/image-tests.ts +0 -239
- package/src/css/types/angle.ts +0 -86
- package/src/css/types/color-math.ts +0 -22
- package/src/css/types/color-spaces/a98.ts +0 -86
- package/src/css/types/color-spaces/p3.ts +0 -92
- package/src/css/types/color-spaces/pro-photo.ts +0 -87
- package/src/css/types/color-spaces/rec2020.ts +0 -90
- package/src/css/types/color-spaces/srgb.ts +0 -87
- package/src/css/types/color-utilities.ts +0 -452
- package/src/css/types/color.ts +0 -485
- package/src/css/types/functions/-prefix-linear-gradient.ts +0 -35
- package/src/css/types/functions/-prefix-radial-gradient.ts +0 -106
- package/src/css/types/functions/-webkit-gradient.ts +0 -69
- package/src/css/types/functions/__tests__/radial-gradient.ts +0 -69
- package/src/css/types/functions/counter.ts +0 -511
- package/src/css/types/functions/gradient.ts +0 -206
- package/src/css/types/functions/linear-gradient.ts +0 -28
- package/src/css/types/functions/radial-gradient.ts +0 -101
- package/src/css/types/image.ts +0 -120
- package/src/css/types/index.ts +0 -1
- package/src/css/types/length-percentage.ts +0 -137
- package/src/css/types/length.ts +0 -7
- package/src/css/types/time.ts +0 -20
- package/src/dom/__mocks__/document-cloner.ts +0 -22
- package/src/dom/__tests__/dom-normalizer.test.ts +0 -133
- package/src/dom/__tests__/element-container.test.ts +0 -129
- package/src/dom/document-cloner.ts +0 -929
- package/src/dom/dom-normalizer.ts +0 -133
- package/src/dom/element-container.ts +0 -75
- package/src/dom/elements/li-element-container.ts +0 -10
- package/src/dom/elements/ol-element-container.ts +0 -12
- package/src/dom/elements/select-element-container.ts +0 -10
- package/src/dom/elements/textarea-element-container.ts +0 -9
- package/src/dom/node-parser.ts +0 -177
- package/src/dom/node-type-guards.ts +0 -70
- package/src/dom/replaced-elements/canvas-element-container.ts +0 -15
- package/src/dom/replaced-elements/iframe-element-container.ts +0 -55
- package/src/dom/replaced-elements/image-element-container.ts +0 -16
- package/src/dom/replaced-elements/index.ts +0 -5
- package/src/dom/replaced-elements/input-element-container.ts +0 -105
- package/src/dom/replaced-elements/pseudo-elements.ts +0 -0
- package/src/dom/replaced-elements/svg-element-container.ts +0 -23
- package/src/dom/text-container.ts +0 -42
- package/src/global.d.ts +0 -19
- package/src/index.ts +0 -82
- package/src/invariant.ts +0 -5
- package/src/options.ts +0 -55
- package/src/render/__tests__/object-fit.test.ts +0 -85
- package/src/render/background.ts +0 -298
- package/src/render/bezier-curve.ts +0 -47
- package/src/render/border.ts +0 -165
- package/src/render/bound-curves.ts +0 -388
- package/src/render/box-sizing.ts +0 -31
- package/src/render/canvas/__tests__/background-renderer.test.ts +0 -72
- package/src/render/canvas/__tests__/border-renderer.test.ts +0 -24
- package/src/render/canvas/__tests__/effects-renderer.test.ts +0 -32
- package/src/render/canvas/__tests__/text-renderer.test.ts +0 -471
- package/src/render/canvas/background-renderer.ts +0 -271
- package/src/render/canvas/border-renderer.ts +0 -224
- package/src/render/canvas/canvas-path.ts +0 -31
- package/src/render/canvas/canvas-renderer.ts +0 -641
- package/src/render/canvas/effects-renderer.ts +0 -130
- package/src/render/canvas/foreignobject-renderer.ts +0 -53
- package/src/render/canvas/text-renderer.ts +0 -700
- package/src/render/effects.ts +0 -75
- package/src/render/font-metrics.ts +0 -72
- package/src/render/object-fit.ts +0 -100
- package/src/render/path.ts +0 -37
- package/src/render/renderer-interface.ts +0 -28
- package/src/render/stacking-context.ts +0 -386
- package/src/render/vector.ts +0 -19
|
@@ -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
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
"sideEffects": false,
|
|
10
10
|
"files": [
|
|
11
11
|
"dist/",
|
|
12
|
-
"src/",
|
|
13
12
|
"LICENSE"
|
|
14
13
|
],
|
|
15
14
|
"exports": {
|
|
@@ -20,7 +19,7 @@
|
|
|
20
19
|
"default": "./dist/html2canvas-pro.esm.js"
|
|
21
20
|
}
|
|
22
21
|
},
|
|
23
|
-
"version": "2.
|
|
22
|
+
"version": "2.2.0",
|
|
24
23
|
"author": {
|
|
25
24
|
"name": "yorickshan",
|
|
26
25
|
"email": "yorickshan@gmail.com",
|
|
@@ -42,20 +41,13 @@
|
|
|
42
41
|
"devDependencies": {
|
|
43
42
|
"@commitlint/cli": "^20.3.0",
|
|
44
43
|
"@commitlint/config-conventional": "^20.2.0",
|
|
45
|
-
"@rollup/plugin-commonjs": "^29.0.0",
|
|
46
|
-
"@rollup/plugin-json": "^6.1.0",
|
|
47
|
-
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
48
|
-
"@rollup/plugin-typescript": "^12.3.0",
|
|
49
44
|
"@types/chai": "^5.2.3",
|
|
50
45
|
"@types/express": "^5.0.6",
|
|
51
|
-
"@types/filenamify-url": "^2.0.1",
|
|
52
|
-
"@types/glob": "^9.0.0",
|
|
53
46
|
"@types/karma": "^6.3.0",
|
|
54
47
|
"@types/mocha": "^10.0.7",
|
|
55
48
|
"@types/node": "^25.0.3",
|
|
56
49
|
"@types/platform": "^1.3.4",
|
|
57
50
|
"@types/pngjs": "^6.0.5",
|
|
58
|
-
"@types/promise-polyfill": "^6.0.3",
|
|
59
51
|
"@types/serve-index": "^1.9.4",
|
|
60
52
|
"@typescript-eslint/eslint-plugin": "^8.50.0",
|
|
61
53
|
"@typescript-eslint/parser": "^8.50.0",
|
|
@@ -65,10 +57,10 @@
|
|
|
65
57
|
"body-parser": "^2.2.1",
|
|
66
58
|
"chai": "6.2.2",
|
|
67
59
|
"change-case": "^5.4.4",
|
|
68
|
-
"conventional-changelog
|
|
60
|
+
"conventional-changelog": "^7.2.1",
|
|
61
|
+
"conventional-changelog-conventionalcommits": "^9.3.1",
|
|
69
62
|
"cors": "^2.8.5",
|
|
70
63
|
"cz-conventional-changelog": "^3.3.0",
|
|
71
|
-
"es6-promise": "^4.2.8",
|
|
72
64
|
"eslint": "^9.13.0",
|
|
73
65
|
"eslint-config-prettier": "^10.1.8",
|
|
74
66
|
"eslint-plugin-prettier": "^5.5.4",
|
|
@@ -76,8 +68,6 @@
|
|
|
76
68
|
"filenamify-url": "4.0.0",
|
|
77
69
|
"glob": "^13.0.0",
|
|
78
70
|
"husky": "^9.1.7",
|
|
79
|
-
"jquery": "^3.5.1",
|
|
80
|
-
"js-polyfills": "^0.1.42",
|
|
81
71
|
"jsdom": "^29.1.1",
|
|
82
72
|
"karma": "^6.3.2",
|
|
83
73
|
"karma-chrome-launcher": "^3.1.0",
|
|
@@ -97,11 +87,9 @@
|
|
|
97
87
|
"puppeteer": "^24.34.0",
|
|
98
88
|
"replace-in-file": "^8.4.0",
|
|
99
89
|
"rimraf": "^6.0.1",
|
|
100
|
-
"
|
|
101
|
-
"rollup-plugin-sourcemaps": "^0.6.3",
|
|
90
|
+
"rolldown": "^1.1.2",
|
|
102
91
|
"serve-index": "^1.9.1",
|
|
103
92
|
"slash": "5.1.0",
|
|
104
|
-
"standard-version": "^9.5.0",
|
|
105
93
|
"ts-node": "^10.9.2",
|
|
106
94
|
"tsx": "^4.22.3",
|
|
107
95
|
"typedoc": "^0.28.19",
|
|
@@ -123,8 +111,8 @@
|
|
|
123
111
|
},
|
|
124
112
|
"scripts": {
|
|
125
113
|
"prebuild": "rimraf dist/ && rimraf build/ && mkdir -p dist && mkdir -p build",
|
|
126
|
-
"build": "tsc --module commonjs -p tsconfig.build.json &&
|
|
127
|
-
"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",
|
|
128
116
|
"build:minify": "uglifyjs --compress --comments /^!/ -o dist/html2canvas-pro.min.js --mangle -- dist/html2canvas-pro.js",
|
|
129
117
|
"build:reftest-result-list": "tsx scripts/create-reftest-result-list.ts",
|
|
130
118
|
"build:create-reftest-list": "tsx scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.js",
|
|
@@ -138,11 +126,10 @@
|
|
|
138
126
|
"reftests-diff": "mkdir -p tmp/snapshots && vitest run --config vitest.reftest.config.ts",
|
|
139
127
|
"prekarma": "node scripts/ensure-karma-prereqs.mjs",
|
|
140
128
|
"karma": "tsx tests/karma",
|
|
141
|
-
"watch": "
|
|
129
|
+
"watch": "rolldown -w",
|
|
142
130
|
"watch:unittest": "vitest",
|
|
143
131
|
"start": "tsx tests/server --port=8080 --cors=8081",
|
|
144
132
|
"commitlint": "commitlint --config .commitlintrc.json -e -V",
|
|
145
|
-
"tag": "sh scripts/create-tag.sh",
|
|
146
133
|
"docs:dev": "vitepress dev docs",
|
|
147
134
|
"docs:build": "vitepress build docs",
|
|
148
135
|
"docs:preview": "vitepress preview docs",
|
|
File without changes
|
package/dist/lib/invariant.js
DELETED
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const invariant: (assertion: boolean, error: string) => void;
|
package/src/__tests__/index.ts
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import html2canvas from '../index';
|
|
2
|
-
|
|
3
|
-
import { CanvasRenderer } from '../render/canvas/canvas-renderer';
|
|
4
|
-
import { DocumentCloner } from '../dom/document-cloner';
|
|
5
|
-
import { COLORS } from '../css/types/color';
|
|
6
|
-
|
|
7
|
-
vi.mock('../core/logger');
|
|
8
|
-
vi.mock('../css/layout/bounds');
|
|
9
|
-
vi.mock('../dom/document-cloner');
|
|
10
|
-
vi.mock('../dom/node-parser', () => {
|
|
11
|
-
return {
|
|
12
|
-
isBodyElement: () => false,
|
|
13
|
-
isHTMLElement: () => false,
|
|
14
|
-
parseTree: vi.fn().mockImplementation(() => {
|
|
15
|
-
return { styles: {}, restoreTree: vi.fn() };
|
|
16
|
-
})
|
|
17
|
-
};
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
vi.mock('../render/stacking-context');
|
|
21
|
-
vi.mock('../render/canvas/canvas-renderer');
|
|
22
|
-
|
|
23
|
-
describe('html2canvas', () => {
|
|
24
|
-
const element = {
|
|
25
|
-
ownerDocument: {
|
|
26
|
-
defaultView: {
|
|
27
|
-
document: {
|
|
28
|
-
createElement: () => ({ href: '' })
|
|
29
|
-
},
|
|
30
|
-
location: { href: 'http://localhost/' },
|
|
31
|
-
pageXOffset: 12,
|
|
32
|
-
pageYOffset: 34,
|
|
33
|
-
innerWidth: 800,
|
|
34
|
-
innerHeight: 600
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
} as unknown as HTMLElement;
|
|
38
|
-
|
|
39
|
-
it('should render with an element', async () => {
|
|
40
|
-
DocumentCloner.destroy = vi.fn().mockReturnValue(true);
|
|
41
|
-
await html2canvas(element);
|
|
42
|
-
expect(CanvasRenderer).toHaveBeenLastCalledWith(
|
|
43
|
-
expect.objectContaining({
|
|
44
|
-
cache: expect.any(Object),
|
|
45
|
-
logger: expect.any(Object),
|
|
46
|
-
windowBounds: expect.objectContaining({ left: 12, top: 34 })
|
|
47
|
-
}),
|
|
48
|
-
expect.objectContaining({
|
|
49
|
-
backgroundColor: 0xffffffff,
|
|
50
|
-
scale: 1,
|
|
51
|
-
height: 50,
|
|
52
|
-
width: 200,
|
|
53
|
-
x: 0,
|
|
54
|
-
y: 0,
|
|
55
|
-
canvas: undefined
|
|
56
|
-
})
|
|
57
|
-
);
|
|
58
|
-
expect(DocumentCloner.destroy).toBeCalled();
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it('should have transparent background with backgroundColor: null', async () => {
|
|
62
|
-
await html2canvas(element, { backgroundColor: null });
|
|
63
|
-
expect(CanvasRenderer).toHaveBeenLastCalledWith(
|
|
64
|
-
expect.anything(),
|
|
65
|
-
expect.objectContaining({
|
|
66
|
-
backgroundColor: COLORS.TRANSPARENT
|
|
67
|
-
})
|
|
68
|
-
);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('should use existing canvas when given as option', async () => {
|
|
72
|
-
const canvas = {} as HTMLCanvasElement;
|
|
73
|
-
await html2canvas(element, { canvas });
|
|
74
|
-
expect(CanvasRenderer).toHaveBeenLastCalledWith(
|
|
75
|
-
expect.anything(),
|
|
76
|
-
expect.objectContaining({
|
|
77
|
-
canvas
|
|
78
|
-
})
|
|
79
|
-
);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('should not remove cloned window when removeContainer: false', async () => {
|
|
83
|
-
DocumentCloner.destroy = vi.fn();
|
|
84
|
-
await html2canvas(element, { removeContainer: false });
|
|
85
|
-
expect(CanvasRenderer).toHaveBeenLastCalledWith(
|
|
86
|
-
expect.anything(),
|
|
87
|
-
expect.objectContaining({
|
|
88
|
-
backgroundColor: 0xffffffff,
|
|
89
|
-
scale: 1,
|
|
90
|
-
height: 50,
|
|
91
|
-
width: 200,
|
|
92
|
-
x: 0,
|
|
93
|
-
y: 0,
|
|
94
|
-
canvas: undefined
|
|
95
|
-
})
|
|
96
|
-
);
|
|
97
|
-
expect(DocumentCloner.destroy).not.toBeCalled();
|
|
98
|
-
});
|
|
99
|
-
});
|
package/src/config.ts
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { Cache } from './core/cache-storage';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Configuration options for Html2Canvas
|
|
5
|
-
*
|
|
6
|
-
* This class manages global configuration without using module-level static variables.
|
|
7
|
-
* Each html2canvas invocation can have its own configuration instance.
|
|
8
|
-
*/
|
|
9
|
-
export interface ConfigOptions {
|
|
10
|
-
/**
|
|
11
|
-
* Window object to use for DOM operations
|
|
12
|
-
*/
|
|
13
|
-
window?: Window;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* CSP nonce for inline styles
|
|
17
|
-
* See: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
|
|
18
|
-
*/
|
|
19
|
-
cspNonce?: string;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Cache instance to reuse across multiple calls
|
|
23
|
-
* Useful for avoiding redundant image loads
|
|
24
|
-
*/
|
|
25
|
-
cache?: Cache;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Html2Canvas Configuration
|
|
30
|
-
*
|
|
31
|
-
* Manages configuration state for html2canvas rendering.
|
|
32
|
-
* Eliminates the need for global static variables.
|
|
33
|
-
*/
|
|
34
|
-
export class Html2CanvasConfig {
|
|
35
|
-
readonly window: Window;
|
|
36
|
-
readonly cspNonce?: string;
|
|
37
|
-
readonly cache?: Cache;
|
|
38
|
-
|
|
39
|
-
constructor(options: ConfigOptions = {}) {
|
|
40
|
-
const resolvedWindow = options.window || (typeof window !== 'undefined' ? window : undefined);
|
|
41
|
-
|
|
42
|
-
if (!resolvedWindow) {
|
|
43
|
-
throw new Error('Window object is required but not available');
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
this.window = resolvedWindow;
|
|
47
|
-
this.cspNonce = options.cspNonce;
|
|
48
|
-
this.cache = options.cache;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Create configuration from an element
|
|
53
|
-
* Extracts window from element's owner document
|
|
54
|
-
*/
|
|
55
|
-
static fromElement(element: HTMLElement, options: Partial<ConfigOptions> = {}): Html2CanvasConfig {
|
|
56
|
-
const ownerDocument = element.ownerDocument;
|
|
57
|
-
|
|
58
|
-
if (!ownerDocument) {
|
|
59
|
-
throw new Error('Element is not attached to a document');
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const defaultView = ownerDocument.defaultView;
|
|
63
|
-
|
|
64
|
-
if (!defaultView) {
|
|
65
|
-
throw new Error('Document is not attached to a window');
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return new Html2CanvasConfig({
|
|
69
|
-
window: defaultView,
|
|
70
|
-
...options
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Clone configuration with override options
|
|
76
|
-
*/
|
|
77
|
-
clone(options: Partial<ConfigOptions> = {}): Html2CanvasConfig {
|
|
78
|
-
return new Html2CanvasConfig({
|
|
79
|
-
window: options.window || this.window,
|
|
80
|
-
cspNonce: options.cspNonce ?? this.cspNonce,
|
|
81
|
-
cache: options.cache ?? this.cache
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Default global configuration (for backward compatibility)
|
|
88
|
-
* @deprecated Use Html2CanvasConfig instances instead
|
|
89
|
-
*/
|
|
90
|
-
let _defaultConfig: Html2CanvasConfig | null = null;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Set default configuration
|
|
94
|
-
* @deprecated Pass configuration directly to html2canvas instead
|
|
95
|
-
*/
|
|
96
|
-
export function setDefaultConfig(config: Html2CanvasConfig): void {
|
|
97
|
-
console.warn('[html2canvas-pro] setDefaultConfig is deprecated. Pass configuration to html2canvas directly.');
|
|
98
|
-
_defaultConfig = config;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Get default configuration
|
|
103
|
-
* @deprecated Pass configuration directly to html2canvas instead
|
|
104
|
-
*/
|
|
105
|
-
export function getDefaultConfig(): Html2CanvasConfig | null {
|
|
106
|
-
return _defaultConfig;
|
|
107
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export class CacheStorage {}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { logger, Logger } from './logger';
|
|
2
|
-
|
|
3
|
-
export class Context {
|
|
4
|
-
readonly logger: Logger = logger;
|
|
5
|
-
|
|
6
|
-
readonly _cache: { [key: string]: Promise<any> } = {};
|
|
7
|
-
|
|
8
|
-
readonly cache: any;
|
|
9
|
-
|
|
10
|
-
constructor() {
|
|
11
|
-
this.cache = {
|
|
12
|
-
addImage: vi.fn().mockImplementation((src: string): Promise<void> => {
|
|
13
|
-
const result = Promise.resolve();
|
|
14
|
-
this._cache[src] = result;
|
|
15
|
-
return result;
|
|
16
|
-
})
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export class Logger {
|
|
2
|
-
debug(): void {}
|
|
3
|
-
|
|
4
|
-
static create(): void {}
|
|
5
|
-
|
|
6
|
-
static destroy(): void {}
|
|
7
|
-
|
|
8
|
-
static getInstance(): Logger {
|
|
9
|
-
return logger;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
info(): void {}
|
|
13
|
-
|
|
14
|
-
error(): void {}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const logger = new Logger();
|