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.
Files changed (123) hide show
  1. package/README.md +1 -0
  2. package/demo/image-smoothing-demo.html +256 -0
  3. package/demo/refactoring-test.html +602 -0
  4. package/dist/html2canvas-pro.esm.js +2846 -1238
  5. package/dist/html2canvas-pro.esm.js.map +1 -1
  6. package/dist/html2canvas-pro.js +2849 -1237
  7. package/dist/html2canvas-pro.js.map +1 -1
  8. package/dist/html2canvas-pro.min.js +5 -4
  9. package/dist/lib/__tests__/index.js +8 -2
  10. package/dist/lib/__tests__/index.js.map +1 -1
  11. package/dist/lib/config.js +72 -0
  12. package/dist/lib/config.js.map +1 -0
  13. package/dist/lib/core/__tests__/cache-storage.js +6 -3
  14. package/dist/lib/core/__tests__/cache-storage.js.map +1 -1
  15. package/dist/lib/core/__tests__/cache-storage.test.js +158 -0
  16. package/dist/lib/core/__tests__/cache-storage.test.js.map +1 -0
  17. package/dist/lib/core/__tests__/validator.js +296 -0
  18. package/dist/lib/core/__tests__/validator.js.map +1 -0
  19. package/dist/lib/core/cache-storage.js +130 -11
  20. package/dist/lib/core/cache-storage.js.map +1 -1
  21. package/dist/lib/core/context.js +5 -2
  22. package/dist/lib/core/context.js.map +1 -1
  23. package/dist/lib/core/debugger.js +3 -0
  24. package/dist/lib/core/debugger.js.map +1 -1
  25. package/dist/lib/core/origin-checker.js +54 -0
  26. package/dist/lib/core/origin-checker.js.map +1 -0
  27. package/dist/lib/core/performance-monitor.js +208 -0
  28. package/dist/lib/core/performance-monitor.js.map +1 -0
  29. package/dist/lib/core/validator.js +501 -0
  30. package/dist/lib/core/validator.js.map +1 -0
  31. package/dist/lib/css/index.js +2 -0
  32. package/dist/lib/css/index.js.map +1 -1
  33. package/dist/lib/css/property-descriptors/__tests__/background-tests.js +7 -1
  34. package/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +1 -1
  35. package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js +142 -0
  36. package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js.map +1 -0
  37. package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js +167 -0
  38. package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js.map +1 -0
  39. package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js +61 -0
  40. package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js.map +1 -0
  41. package/dist/lib/css/property-descriptors/image-rendering.js +34 -0
  42. package/dist/lib/css/property-descriptors/image-rendering.js.map +1 -0
  43. package/dist/lib/css/types/__tests__/image-tests.js +7 -1
  44. package/dist/lib/css/types/__tests__/image-tests.js.map +1 -1
  45. package/dist/lib/css/types/color-math.js +26 -0
  46. package/dist/lib/css/types/color-math.js.map +1 -0
  47. package/dist/lib/css/types/color-spaces/srgb.js +6 -6
  48. package/dist/lib/css/types/color-spaces/srgb.js.map +1 -1
  49. package/dist/lib/css/types/color-utilities.js +13 -22
  50. package/dist/lib/css/types/color-utilities.js.map +1 -1
  51. package/dist/lib/dom/__tests__/dom-normalizer.test.js +113 -0
  52. package/dist/lib/dom/__tests__/dom-normalizer.test.js.map +1 -0
  53. package/dist/lib/dom/__tests__/element-container.test.js +109 -0
  54. package/dist/lib/dom/__tests__/element-container.test.js.map +1 -0
  55. package/dist/lib/dom/document-cloner.js +152 -11
  56. package/dist/lib/dom/document-cloner.js.map +1 -1
  57. package/dist/lib/dom/dom-normalizer.js +80 -0
  58. package/dist/lib/dom/dom-normalizer.js.map +1 -0
  59. package/dist/lib/dom/element-container.js +32 -15
  60. package/dist/lib/dom/element-container.js.map +1 -1
  61. package/dist/lib/dom/node-parser.js +16 -20
  62. package/dist/lib/dom/node-parser.js.map +1 -1
  63. package/dist/lib/dom/node-type-guards.js +44 -0
  64. package/dist/lib/dom/node-type-guards.js.map +1 -0
  65. package/dist/lib/dom/replaced-elements/iframe-element-container.js +5 -4
  66. package/dist/lib/dom/replaced-elements/iframe-element-container.js.map +1 -1
  67. package/dist/lib/index.js +148 -41
  68. package/dist/lib/index.js.map +1 -1
  69. package/dist/lib/render/canvas/__tests__/background-renderer.test.js +65 -0
  70. package/dist/lib/render/canvas/__tests__/background-renderer.test.js.map +1 -0
  71. package/dist/lib/render/canvas/__tests__/border-renderer.test.js +23 -0
  72. package/dist/lib/render/canvas/__tests__/border-renderer.test.js.map +1 -0
  73. package/dist/lib/render/canvas/__tests__/effects-renderer.test.js +30 -0
  74. package/dist/lib/render/canvas/__tests__/effects-renderer.test.js.map +1 -0
  75. package/dist/lib/render/canvas/__tests__/text-renderer.test.js +63 -0
  76. package/dist/lib/render/canvas/__tests__/text-renderer.test.js.map +1 -0
  77. package/dist/lib/render/canvas/background-renderer.js +222 -0
  78. package/dist/lib/render/canvas/background-renderer.js.map +1 -0
  79. package/dist/lib/render/canvas/border-renderer.js +185 -0
  80. package/dist/lib/render/canvas/border-renderer.js.map +1 -0
  81. package/dist/lib/render/canvas/canvas-renderer.js +61 -689
  82. package/dist/lib/render/canvas/canvas-renderer.js.map +1 -1
  83. package/dist/lib/render/canvas/effects-renderer.js +89 -0
  84. package/dist/lib/render/canvas/effects-renderer.js.map +1 -0
  85. package/dist/lib/render/canvas/text-renderer.js +508 -0
  86. package/dist/lib/render/canvas/text-renderer.js.map +1 -0
  87. package/dist/lib/render/renderer-interface.js +3 -0
  88. package/dist/lib/render/renderer-interface.js.map +1 -0
  89. package/dist/types/config.d.ts +54 -0
  90. package/dist/types/core/__tests__/cache-storage.test.d.ts +1 -0
  91. package/dist/types/core/__tests__/validator.d.ts +1 -0
  92. package/dist/types/core/cache-storage.d.ts +42 -1
  93. package/dist/types/core/context.d.ts +5 -1
  94. package/dist/types/core/origin-checker.d.ts +33 -0
  95. package/dist/types/core/performance-monitor.d.ts +131 -0
  96. package/dist/types/core/validator.d.ts +132 -0
  97. package/dist/types/css/index.d.ts +2 -0
  98. package/dist/types/css/property-descriptors/__tests__/image-rendering-integration.test.d.ts +1 -0
  99. package/dist/types/css/property-descriptors/__tests__/image-rendering-performance.test.d.ts +1 -0
  100. package/dist/types/css/property-descriptors/__tests__/image-rendering.test.d.ts +1 -0
  101. package/dist/types/css/property-descriptors/image-rendering.d.ts +8 -0
  102. package/dist/types/css/types/color-math.d.ts +12 -0
  103. package/dist/types/css/types/color-utilities.d.ts +2 -3
  104. package/dist/types/dom/__tests__/dom-normalizer.test.d.ts +1 -0
  105. package/dist/types/dom/__tests__/element-container.test.d.ts +1 -0
  106. package/dist/types/dom/document-cloner.d.ts +46 -0
  107. package/dist/types/dom/dom-normalizer.d.ts +43 -0
  108. package/dist/types/dom/element-container.d.ts +20 -1
  109. package/dist/types/dom/node-parser.d.ts +2 -7
  110. package/dist/types/dom/node-type-guards.d.ts +33 -0
  111. package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +4 -1
  112. package/dist/types/index.d.ts +48 -3
  113. package/dist/types/render/canvas/__tests__/background-renderer.test.d.ts +1 -0
  114. package/dist/types/render/canvas/__tests__/border-renderer.test.d.ts +1 -0
  115. package/dist/types/render/canvas/__tests__/effects-renderer.test.d.ts +1 -0
  116. package/dist/types/render/canvas/__tests__/text-renderer.test.d.ts +1 -0
  117. package/dist/types/render/canvas/background-renderer.d.ts +87 -0
  118. package/dist/types/render/canvas/border-renderer.d.ts +67 -0
  119. package/dist/types/render/canvas/canvas-renderer.d.ts +19 -23
  120. package/dist/types/render/canvas/effects-renderer.d.ts +64 -0
  121. package/dist/types/render/canvas/text-renderer.d.ts +57 -0
  122. package/dist/types/render/renderer-interface.d.ts +26 -0
  123. package/package.json +2 -1
@@ -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
- declare const setCspNonce: (nonce: string) => void;
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>): Promise<HTMLCanvasElement>;
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,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": "1.6.6",
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",