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.
Files changed (133) 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 +3391 -1491
  5. package/dist/html2canvas-pro.esm.js.map +1 -1
  6. package/dist/html2canvas-pro.js +3394 -1490
  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 +4 -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__/clip-path.test.js +273 -0
  36. package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js.map +1 -0
  37. package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js +142 -0
  38. package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js.map +1 -0
  39. package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js +167 -0
  40. package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js.map +1 -0
  41. package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js +61 -0
  42. package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js.map +1 -0
  43. package/dist/lib/css/property-descriptors/clip-path.js +190 -0
  44. package/dist/lib/css/property-descriptors/clip-path.js.map +1 -0
  45. package/dist/lib/css/property-descriptors/image-rendering.js +34 -0
  46. package/dist/lib/css/property-descriptors/image-rendering.js.map +1 -0
  47. package/dist/lib/css/types/__tests__/image-tests.js +7 -1
  48. package/dist/lib/css/types/__tests__/image-tests.js.map +1 -1
  49. package/dist/lib/css/types/color-math.js +26 -0
  50. package/dist/lib/css/types/color-math.js.map +1 -0
  51. package/dist/lib/css/types/color-spaces/srgb.js +6 -6
  52. package/dist/lib/css/types/color-spaces/srgb.js.map +1 -1
  53. package/dist/lib/css/types/color-utilities.js +13 -22
  54. package/dist/lib/css/types/color-utilities.js.map +1 -1
  55. package/dist/lib/dom/__tests__/dom-normalizer.test.js +113 -0
  56. package/dist/lib/dom/__tests__/dom-normalizer.test.js.map +1 -0
  57. package/dist/lib/dom/__tests__/element-container.test.js +109 -0
  58. package/dist/lib/dom/__tests__/element-container.test.js.map +1 -0
  59. package/dist/lib/dom/document-cloner.js +3 -3
  60. package/dist/lib/dom/document-cloner.js.map +1 -1
  61. package/dist/lib/dom/dom-normalizer.js +116 -0
  62. package/dist/lib/dom/dom-normalizer.js.map +1 -0
  63. package/dist/lib/dom/element-container.js +32 -15
  64. package/dist/lib/dom/element-container.js.map +1 -1
  65. package/dist/lib/dom/node-parser.js +16 -20
  66. package/dist/lib/dom/node-parser.js.map +1 -1
  67. package/dist/lib/dom/node-type-guards.js +44 -0
  68. package/dist/lib/dom/node-type-guards.js.map +1 -0
  69. package/dist/lib/dom/replaced-elements/iframe-element-container.js +5 -4
  70. package/dist/lib/dom/replaced-elements/iframe-element-container.js.map +1 -1
  71. package/dist/lib/index.js +148 -41
  72. package/dist/lib/index.js.map +1 -1
  73. package/dist/lib/render/canvas/__tests__/background-renderer.test.js +65 -0
  74. package/dist/lib/render/canvas/__tests__/background-renderer.test.js.map +1 -0
  75. package/dist/lib/render/canvas/__tests__/border-renderer.test.js +23 -0
  76. package/dist/lib/render/canvas/__tests__/border-renderer.test.js.map +1 -0
  77. package/dist/lib/render/canvas/__tests__/effects-renderer.test.js +30 -0
  78. package/dist/lib/render/canvas/__tests__/effects-renderer.test.js.map +1 -0
  79. package/dist/lib/render/canvas/__tests__/text-renderer.test.js +310 -0
  80. package/dist/lib/render/canvas/__tests__/text-renderer.test.js.map +1 -0
  81. package/dist/lib/render/canvas/background-renderer.js +222 -0
  82. package/dist/lib/render/canvas/background-renderer.js.map +1 -0
  83. package/dist/lib/render/canvas/border-renderer.js +185 -0
  84. package/dist/lib/render/canvas/border-renderer.js.map +1 -0
  85. package/dist/lib/render/canvas/canvas-renderer.js +61 -689
  86. package/dist/lib/render/canvas/canvas-renderer.js.map +1 -1
  87. package/dist/lib/render/canvas/effects-renderer.js +94 -0
  88. package/dist/lib/render/canvas/effects-renderer.js.map +1 -0
  89. package/dist/lib/render/canvas/text-renderer.js +575 -0
  90. package/dist/lib/render/canvas/text-renderer.js.map +1 -0
  91. package/dist/lib/render/effects.js +17 -1
  92. package/dist/lib/render/effects.js.map +1 -1
  93. package/dist/lib/render/renderer-interface.js +3 -0
  94. package/dist/lib/render/renderer-interface.js.map +1 -0
  95. package/dist/lib/render/stacking-context.js +131 -0
  96. package/dist/lib/render/stacking-context.js.map +1 -1
  97. package/dist/types/config.d.ts +54 -0
  98. package/dist/types/core/__tests__/cache-storage.test.d.ts +1 -0
  99. package/dist/types/core/__tests__/validator.d.ts +1 -0
  100. package/dist/types/core/cache-storage.d.ts +42 -1
  101. package/dist/types/core/context.d.ts +5 -1
  102. package/dist/types/core/origin-checker.d.ts +33 -0
  103. package/dist/types/core/performance-monitor.d.ts +131 -0
  104. package/dist/types/core/validator.d.ts +132 -0
  105. package/dist/types/css/index.d.ts +4 -0
  106. package/dist/types/css/property-descriptors/__tests__/clip-path.test.d.ts +1 -0
  107. package/dist/types/css/property-descriptors/__tests__/image-rendering-integration.test.d.ts +1 -0
  108. package/dist/types/css/property-descriptors/__tests__/image-rendering-performance.test.d.ts +1 -0
  109. package/dist/types/css/property-descriptors/__tests__/image-rendering.test.d.ts +1 -0
  110. package/dist/types/css/property-descriptors/clip-path.d.ts +62 -0
  111. package/dist/types/css/property-descriptors/image-rendering.d.ts +8 -0
  112. package/dist/types/css/types/color-math.d.ts +12 -0
  113. package/dist/types/css/types/color-utilities.d.ts +2 -3
  114. package/dist/types/dom/__tests__/dom-normalizer.test.d.ts +1 -0
  115. package/dist/types/dom/__tests__/element-container.test.d.ts +1 -0
  116. package/dist/types/dom/dom-normalizer.d.ts +62 -0
  117. package/dist/types/dom/element-container.d.ts +20 -1
  118. package/dist/types/dom/node-parser.d.ts +2 -7
  119. package/dist/types/dom/node-type-guards.d.ts +33 -0
  120. package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +4 -1
  121. package/dist/types/index.d.ts +48 -3
  122. package/dist/types/render/canvas/__tests__/background-renderer.test.d.ts +1 -0
  123. package/dist/types/render/canvas/__tests__/border-renderer.test.d.ts +1 -0
  124. package/dist/types/render/canvas/__tests__/effects-renderer.test.d.ts +1 -0
  125. package/dist/types/render/canvas/__tests__/text-renderer.test.d.ts +1 -0
  126. package/dist/types/render/canvas/background-renderer.d.ts +87 -0
  127. package/dist/types/render/canvas/border-renderer.d.ts +67 -0
  128. package/dist/types/render/canvas/canvas-renderer.d.ts +19 -23
  129. package/dist/types/render/canvas/effects-renderer.d.ts +65 -0
  130. package/dist/types/render/canvas/text-renderer.d.ts +75 -0
  131. package/dist/types/render/effects.d.ts +15 -1
  132. package/dist/types/render/renderer-interface.d.ts +26 -0
  133. package/package.json +2 -1
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const assert_1 = require("assert");
4
+ const parser_1 = require("../../syntax/parser");
5
+ const clip_path_1 = require("../clip-path");
6
+ /** Helper that runs a CSS value string through the clipPath descriptor. */
7
+ const parse = (css) => {
8
+ const token = parser_1.Parser.parseValue(css);
9
+ return clip_path_1.clipPath.parse(null, token);
10
+ };
11
+ describe('clip-path property descriptor', () => {
12
+ // ------------------------------------------------------------------ none
13
+ describe('none / fallbacks', () => {
14
+ it('should return NONE for "none"', () => {
15
+ (0, assert_1.strictEqual)(parse('none').type, 0 /* CLIP_PATH_TYPE.NONE */);
16
+ });
17
+ it('should return NONE for unknown ident', () => {
18
+ (0, assert_1.strictEqual)(parse('auto').type, 0 /* CLIP_PATH_TYPE.NONE */);
19
+ });
20
+ it('should return NONE for unsupported function', () => {
21
+ // url() is not yet supported
22
+ (0, assert_1.strictEqual)(parse('url(#mask)').type, 0 /* CLIP_PATH_TYPE.NONE */);
23
+ });
24
+ });
25
+ // ----------------------------------------------------------------- inset
26
+ describe('inset()', () => {
27
+ it('should parse a single length (all sides equal)', () => {
28
+ const result = parse('inset(10px)');
29
+ if (result.type !== 1 /* CLIP_PATH_TYPE.INSET */)
30
+ throw new Error('wrong type');
31
+ (0, assert_1.strictEqual)(result.top.number, 10);
32
+ (0, assert_1.strictEqual)(result.right.number, 10);
33
+ (0, assert_1.strictEqual)(result.bottom.number, 10);
34
+ (0, assert_1.strictEqual)(result.left.number, 10);
35
+ });
36
+ it('should parse two values (top/bottom | left/right)', () => {
37
+ const result = parse('inset(10px 20%)');
38
+ if (result.type !== 1 /* CLIP_PATH_TYPE.INSET */)
39
+ throw new Error('wrong type');
40
+ (0, assert_1.strictEqual)(result.top.number, 10);
41
+ (0, assert_1.strictEqual)(result.right.number, 20);
42
+ (0, assert_1.strictEqual)(result.bottom.number, 10);
43
+ (0, assert_1.strictEqual)(result.left.number, 20);
44
+ });
45
+ it('should parse four values', () => {
46
+ const result = parse('inset(5px 10px 15px 20px)');
47
+ if (result.type !== 1 /* CLIP_PATH_TYPE.INSET */)
48
+ throw new Error('wrong type');
49
+ (0, assert_1.strictEqual)(result.top.number, 5);
50
+ (0, assert_1.strictEqual)(result.right.number, 10);
51
+ (0, assert_1.strictEqual)(result.bottom.number, 15);
52
+ (0, assert_1.strictEqual)(result.left.number, 20);
53
+ });
54
+ it('should parse three values (top | left/right | bottom)', () => {
55
+ const result = parse('inset(5px 10px 15px)');
56
+ if (result.type !== 1 /* CLIP_PATH_TYPE.INSET */)
57
+ throw new Error('wrong type');
58
+ (0, assert_1.strictEqual)(result.top.number, 5);
59
+ (0, assert_1.strictEqual)(result.right.number, 10);
60
+ (0, assert_1.strictEqual)(result.bottom.number, 15);
61
+ (0, assert_1.strictEqual)(result.left.number, 10, 'left should mirror right');
62
+ });
63
+ it('should ignore the "round" clause', () => {
64
+ const result = parse('inset(10px round 5px)');
65
+ if (result.type !== 1 /* CLIP_PATH_TYPE.INSET */)
66
+ throw new Error('wrong type');
67
+ (0, assert_1.strictEqual)(result.top.number, 10);
68
+ });
69
+ it('should parse percentage values', () => {
70
+ const result = parse('inset(25%)');
71
+ if (result.type !== 1 /* CLIP_PATH_TYPE.INSET */)
72
+ throw new Error('wrong type');
73
+ (0, assert_1.strictEqual)(result.top.type, 16 /* TokenType.PERCENTAGE_TOKEN */);
74
+ (0, assert_1.strictEqual)(result.top.number, 25);
75
+ });
76
+ it('should parse overlapping insets (>50% each side) — clamping to 0 is done at render time', () => {
77
+ // The parser stores the raw values; buildClipPathEffect clamps w/h to Math.max(0, …).
78
+ const result = parse('inset(60%)');
79
+ if (result.type !== 1 /* CLIP_PATH_TYPE.INSET */)
80
+ throw new Error('wrong type');
81
+ (0, assert_1.strictEqual)(result.top.number, 60);
82
+ (0, assert_1.strictEqual)(result.right.number, 60);
83
+ });
84
+ });
85
+ // ---------------------------------------------------------------- circle
86
+ describe('circle()', () => {
87
+ it('should default to closest-side radius and 50% 50% center', () => {
88
+ const result = parse('circle()');
89
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
90
+ throw new Error('wrong type');
91
+ (0, assert_1.strictEqual)(result.radius, 'closest-side');
92
+ (0, assert_1.strictEqual)(result.cx.number, 50);
93
+ (0, assert_1.strictEqual)(result.cy.number, 50);
94
+ });
95
+ it('should parse a percentage radius', () => {
96
+ const result = parse('circle(50%)');
97
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
98
+ throw new Error('wrong type');
99
+ (0, assert_1.ok)(result.radius !== 'closest-side' && result.radius !== 'farthest-side');
100
+ (0, assert_1.strictEqual)(result.radius.number, 50);
101
+ });
102
+ it('should parse closest-side keyword', () => {
103
+ const result = parse('circle(closest-side)');
104
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
105
+ throw new Error('wrong type');
106
+ (0, assert_1.strictEqual)(result.radius, 'closest-side');
107
+ });
108
+ it('should parse farthest-side keyword', () => {
109
+ const result = parse('circle(farthest-side)');
110
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
111
+ throw new Error('wrong type');
112
+ (0, assert_1.strictEqual)(result.radius, 'farthest-side');
113
+ });
114
+ it('should parse "at" position', () => {
115
+ const result = parse('circle(50% at 30% 70%)');
116
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
117
+ throw new Error('wrong type');
118
+ (0, assert_1.strictEqual)(result.cx.number, 30);
119
+ (0, assert_1.strictEqual)(result.cy.number, 70);
120
+ });
121
+ it('should parse "at center" as 50% 50%', () => {
122
+ const result = parse('circle(at center)');
123
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
124
+ throw new Error('wrong type');
125
+ (0, assert_1.strictEqual)(result.cx.number, 50);
126
+ (0, assert_1.strictEqual)(result.cy.number, 50);
127
+ });
128
+ it('should parse "at left top" as 0 0', () => {
129
+ const result = parse('circle(at left top)');
130
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
131
+ throw new Error('wrong type');
132
+ (0, assert_1.strictEqual)(result.cx.number, 0);
133
+ (0, assert_1.strictEqual)(result.cy.number, 0);
134
+ });
135
+ it('should parse "at top" as cx=50% cy=0 (top is y-axis)', () => {
136
+ const result = parse('circle(at top)');
137
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
138
+ throw new Error('wrong type');
139
+ (0, assert_1.strictEqual)(result.cx.number, 50, 'cx should default to 50% (center)');
140
+ (0, assert_1.strictEqual)(result.cy.number, 0, 'cy should be 0 (top)');
141
+ });
142
+ it('should parse "at bottom" as cx=50% cy=100%', () => {
143
+ const result = parse('circle(at bottom)');
144
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
145
+ throw new Error('wrong type');
146
+ (0, assert_1.strictEqual)(result.cx.number, 50);
147
+ (0, assert_1.strictEqual)(result.cy.number, 100);
148
+ });
149
+ it('should parse "at right" as cx=100% cy=50%', () => {
150
+ const result = parse('circle(at right)');
151
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
152
+ throw new Error('wrong type');
153
+ (0, assert_1.strictEqual)(result.cx.number, 100);
154
+ (0, assert_1.strictEqual)(result.cy.number, 50);
155
+ });
156
+ it('should parse "at top left" (reversed order) as cx=0 cy=0', () => {
157
+ const result = parse('circle(at top left)');
158
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
159
+ throw new Error('wrong type');
160
+ (0, assert_1.strictEqual)(result.cx.number, 0);
161
+ (0, assert_1.strictEqual)(result.cy.number, 0);
162
+ });
163
+ it('should parse mixed "at top 30%" as cx=30% cy=0', () => {
164
+ const result = parse('circle(at top 30%)');
165
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
166
+ throw new Error('wrong type');
167
+ (0, assert_1.strictEqual)(result.cx.number, 30, 'cx should be the length-percentage');
168
+ (0, assert_1.strictEqual)(result.cy.number, 0, 'cy should be 0 (top)');
169
+ });
170
+ it('should parse "at center 30%" as cx=50% cy=30%', () => {
171
+ const result = parse('circle(at center 30%)');
172
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
173
+ throw new Error('wrong type');
174
+ (0, assert_1.strictEqual)(result.cx.number, 50);
175
+ (0, assert_1.strictEqual)(result.cy.number, 30);
176
+ });
177
+ it('should parse "at 30% center" as cx=30% cy=50%', () => {
178
+ const result = parse('circle(at 30% center)');
179
+ if (result.type !== 2 /* CLIP_PATH_TYPE.CIRCLE */)
180
+ throw new Error('wrong type');
181
+ (0, assert_1.strictEqual)(result.cx.number, 30);
182
+ (0, assert_1.strictEqual)(result.cy.number, 50);
183
+ });
184
+ });
185
+ // --------------------------------------------------------------- ellipse
186
+ describe('ellipse()', () => {
187
+ it('should default both radii to closest-side and center to 50% 50%', () => {
188
+ const result = parse('ellipse()');
189
+ if (result.type !== 3 /* CLIP_PATH_TYPE.ELLIPSE */)
190
+ throw new Error('wrong type');
191
+ (0, assert_1.strictEqual)(result.rx, 'closest-side');
192
+ (0, assert_1.strictEqual)(result.ry, 'closest-side');
193
+ (0, assert_1.strictEqual)(result.cx.number, 50);
194
+ (0, assert_1.strictEqual)(result.cy.number, 50);
195
+ });
196
+ it('should parse two length-percentage radii', () => {
197
+ const result = parse('ellipse(40% 30%)');
198
+ if (result.type !== 3 /* CLIP_PATH_TYPE.ELLIPSE */)
199
+ throw new Error('wrong type');
200
+ (0, assert_1.ok)(result.rx !== 'closest-side' && result.rx !== 'farthest-side');
201
+ (0, assert_1.ok)(result.ry !== 'closest-side' && result.ry !== 'farthest-side');
202
+ (0, assert_1.strictEqual)(result.rx.number, 40);
203
+ (0, assert_1.strictEqual)(result.ry.number, 30);
204
+ });
205
+ it('should parse radii and "at" position', () => {
206
+ const result = parse('ellipse(40px 20px at 50% 50%)');
207
+ if (result.type !== 3 /* CLIP_PATH_TYPE.ELLIPSE */)
208
+ throw new Error('wrong type');
209
+ (0, assert_1.strictEqual)(result.rx.number, 40);
210
+ (0, assert_1.strictEqual)(result.ry.number, 20);
211
+ (0, assert_1.strictEqual)(result.cx.number, 50);
212
+ (0, assert_1.strictEqual)(result.cy.number, 50);
213
+ });
214
+ });
215
+ // -------------------------------------------------------------- polygon
216
+ describe('polygon()', () => {
217
+ it('should parse a triangle', () => {
218
+ const result = parse('polygon(0% 0%, 100% 0%, 50% 100%)');
219
+ if (result.type !== 4 /* CLIP_PATH_TYPE.POLYGON */)
220
+ throw new Error('wrong type');
221
+ (0, assert_1.strictEqual)(result.points.length, 3);
222
+ (0, assert_1.strictEqual)(result.points[0][0].number, 0);
223
+ (0, assert_1.strictEqual)(result.points[0][1].number, 0);
224
+ (0, assert_1.strictEqual)(result.points[1][0].number, 100);
225
+ (0, assert_1.strictEqual)(result.points[2][0].number, 50);
226
+ });
227
+ it('should skip a leading fill-rule keyword', () => {
228
+ const result = parse('polygon(evenodd, 0% 0%, 100% 50%, 0% 100%)');
229
+ if (result.type !== 4 /* CLIP_PATH_TYPE.POLYGON */)
230
+ throw new Error('wrong type');
231
+ (0, assert_1.strictEqual)(result.points.length, 3);
232
+ });
233
+ it('should parse pixel coordinates', () => {
234
+ const result = parse('polygon(10px 20px, 100px 20px, 100px 80px, 10px 80px)');
235
+ if (result.type !== 4 /* CLIP_PATH_TYPE.POLYGON */)
236
+ throw new Error('wrong type');
237
+ (0, assert_1.strictEqual)(result.points.length, 4);
238
+ (0, assert_1.strictEqual)(result.points[0][0].number, 10);
239
+ (0, assert_1.strictEqual)(result.points[0][1].number, 20);
240
+ });
241
+ it('should return empty points array for empty polygon', () => {
242
+ const result = parse('polygon()');
243
+ if (result.type !== 4 /* CLIP_PATH_TYPE.POLYGON */)
244
+ throw new Error('wrong type');
245
+ (0, assert_1.deepStrictEqual)(result.points, []);
246
+ });
247
+ });
248
+ // ------------------------------------------------------------------ path
249
+ describe('path()', () => {
250
+ it('should parse a valid SVG path string', () => {
251
+ const result = parse("path('M 0 0 L 100 0 L 100 100 Z')");
252
+ if (result.type !== 5 /* CLIP_PATH_TYPE.PATH */)
253
+ throw new Error('wrong type');
254
+ (0, assert_1.strictEqual)(result.d, 'M 0 0 L 100 0 L 100 100 Z');
255
+ });
256
+ it('should return NONE when no string is provided', () => {
257
+ (0, assert_1.strictEqual)(parse('path()').type, 0 /* CLIP_PATH_TYPE.NONE */);
258
+ });
259
+ });
260
+ // ---------------------------------------- initial value / descriptor meta
261
+ describe('descriptor metadata', () => {
262
+ it('should have name "clip-path"', () => {
263
+ (0, assert_1.strictEqual)(clip_path_1.clipPath.name, 'clip-path');
264
+ });
265
+ it('should have initial value "none"', () => {
266
+ (0, assert_1.strictEqual)(clip_path_1.clipPath.initialValue, 'none');
267
+ });
268
+ it('should not require vendor prefix', () => {
269
+ (0, assert_1.strictEqual)(clip_path_1.clipPath.prefix, false);
270
+ });
271
+ });
272
+ });
273
+ //# sourceMappingURL=clip-path.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clip-path.test.js","sourceRoot":"","sources":["../../../../../src/css/property-descriptors/__tests__/clip-path.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ const image_rendering_1 = require("../image-rendering");
5
+ /**
6
+ * Integration tests for image-rendering CSS property
7
+ * Tests actual DOM and canvas rendering behavior
8
+ */
9
+ (0, globals_1.describe)('image-rendering integration', () => {
10
+ let container;
11
+ let canvas;
12
+ let ctx;
13
+ (0, globals_1.beforeEach)(() => {
14
+ // Create test DOM elements
15
+ container = document.createElement('div');
16
+ document.body.appendChild(container);
17
+ // Create canvas for testing
18
+ canvas = document.createElement('canvas');
19
+ canvas.width = 100;
20
+ canvas.height = 100;
21
+ const context = canvas.getContext('2d');
22
+ if (!context) {
23
+ // Skip tests that require canvas in JSDOM environment
24
+ return;
25
+ }
26
+ ctx = context;
27
+ });
28
+ (0, globals_1.afterEach)(() => {
29
+ // Cleanup
30
+ if (container.parentNode) {
31
+ container.parentNode.removeChild(container);
32
+ }
33
+ });
34
+ (0, globals_1.describe)('Canvas context imageSmoothingEnabled', () => {
35
+ (0, globals_1.it)('should default to true', () => {
36
+ if (!ctx)
37
+ return; // Skip if canvas not available
38
+ (0, globals_1.expect)(ctx.imageSmoothingEnabled).toBe(true);
39
+ });
40
+ (0, globals_1.it)('should be settable to false', () => {
41
+ if (!ctx)
42
+ return; // Skip if canvas not available
43
+ ctx.imageSmoothingEnabled = false;
44
+ (0, globals_1.expect)(ctx.imageSmoothingEnabled).toBe(false);
45
+ });
46
+ (0, globals_1.it)('should be settable to true', () => {
47
+ if (!ctx)
48
+ return; // Skip if canvas not available
49
+ ctx.imageSmoothingEnabled = false;
50
+ ctx.imageSmoothingEnabled = true;
51
+ (0, globals_1.expect)(ctx.imageSmoothingEnabled).toBe(true);
52
+ });
53
+ });
54
+ (0, globals_1.describe)('Canvas context imageSmoothingQuality', () => {
55
+ (0, globals_1.it)('should accept "low" value', () => {
56
+ if (!ctx)
57
+ return; // Skip if canvas not available
58
+ ctx.imageSmoothingQuality = 'low';
59
+ (0, globals_1.expect)(ctx.imageSmoothingQuality).toBe('low');
60
+ });
61
+ (0, globals_1.it)('should accept "medium" value', () => {
62
+ if (!ctx)
63
+ return; // Skip if canvas not available
64
+ ctx.imageSmoothingQuality = 'medium';
65
+ (0, globals_1.expect)(ctx.imageSmoothingQuality).toBe('medium');
66
+ });
67
+ (0, globals_1.it)('should accept "high" value', () => {
68
+ if (!ctx)
69
+ return; // Skip if canvas not available
70
+ ctx.imageSmoothingQuality = 'high';
71
+ (0, globals_1.expect)(ctx.imageSmoothingQuality).toBe('high');
72
+ });
73
+ });
74
+ (0, globals_1.describe)('CSS image-rendering property', () => {
75
+ (0, globals_1.it)('should apply pixelated style to img element', () => {
76
+ const img = document.createElement('img');
77
+ img.style.imageRendering = 'pixelated';
78
+ container.appendChild(img);
79
+ (0, globals_1.expect)(img.style.imageRendering).toBe('pixelated');
80
+ });
81
+ (0, globals_1.it)('should apply crisp-edges style to img element', () => {
82
+ const img = document.createElement('img');
83
+ img.style.imageRendering = 'crisp-edges';
84
+ container.appendChild(img);
85
+ (0, globals_1.expect)(img.style.imageRendering).toBe('crisp-edges');
86
+ });
87
+ (0, globals_1.it)('should apply smooth style to img element', () => {
88
+ const img = document.createElement('img');
89
+ img.style.imageRendering = 'smooth';
90
+ container.appendChild(img);
91
+ // Note: Some browsers may normalize this value
92
+ (0, globals_1.expect)(['smooth', 'auto', '']).toContain(img.style.imageRendering);
93
+ });
94
+ });
95
+ (0, globals_1.describe)('IMAGE_RENDERING enum values', () => {
96
+ (0, globals_1.it)('should have correct enum values', () => {
97
+ (0, globals_1.expect)(image_rendering_1.IMAGE_RENDERING.AUTO).toBe(0);
98
+ (0, globals_1.expect)(image_rendering_1.IMAGE_RENDERING.CRISP_EDGES).toBe(1);
99
+ (0, globals_1.expect)(image_rendering_1.IMAGE_RENDERING.PIXELATED).toBe(2);
100
+ (0, globals_1.expect)(image_rendering_1.IMAGE_RENDERING.SMOOTH).toBe(3);
101
+ });
102
+ (0, globals_1.it)('should have distinct values', () => {
103
+ const values = [
104
+ image_rendering_1.IMAGE_RENDERING.AUTO,
105
+ image_rendering_1.IMAGE_RENDERING.CRISP_EDGES,
106
+ image_rendering_1.IMAGE_RENDERING.PIXELATED,
107
+ image_rendering_1.IMAGE_RENDERING.SMOOTH
108
+ ];
109
+ const uniqueValues = new Set(values);
110
+ (0, globals_1.expect)(uniqueValues.size).toBe(values.length);
111
+ });
112
+ });
113
+ (0, globals_1.describe)('Smoothing state preservation', () => {
114
+ (0, globals_1.it)('should preserve and restore smoothing state', () => {
115
+ if (!ctx)
116
+ return; // Skip if canvas not available
117
+ const originalState = ctx.imageSmoothingEnabled;
118
+ // Save state
119
+ ctx.save();
120
+ ctx.imageSmoothingEnabled = false;
121
+ (0, globals_1.expect)(ctx.imageSmoothingEnabled).toBe(false);
122
+ // Restore state
123
+ ctx.restore();
124
+ (0, globals_1.expect)(ctx.imageSmoothingEnabled).toBe(originalState);
125
+ });
126
+ (0, globals_1.it)('should handle multiple save/restore cycles', () => {
127
+ if (!ctx)
128
+ return; // Skip if canvas not available
129
+ ctx.imageSmoothingEnabled = true;
130
+ ctx.save();
131
+ ctx.imageSmoothingEnabled = false;
132
+ ctx.save();
133
+ ctx.imageSmoothingEnabled = true;
134
+ (0, globals_1.expect)(ctx.imageSmoothingEnabled).toBe(true);
135
+ ctx.restore();
136
+ (0, globals_1.expect)(ctx.imageSmoothingEnabled).toBe(false);
137
+ ctx.restore();
138
+ (0, globals_1.expect)(ctx.imageSmoothingEnabled).toBe(true);
139
+ });
140
+ });
141
+ });
142
+ //# sourceMappingURL=image-rendering-integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-rendering-integration.test.js","sourceRoot":"","sources":["../../../../../src/css/property-descriptors/__tests__/image-rendering-integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const globals_1 = require("@jest/globals");
4
+ /**
5
+ * Performance tests for image smoothing
6
+ * Measures the performance impact of enabling/disabling image smoothing
7
+ */
8
+ (0, globals_1.describe)('image-rendering performance', () => {
9
+ let canvas;
10
+ let ctx = null;
11
+ let testImage;
12
+ (0, globals_1.beforeEach)(() => {
13
+ ctx = null;
14
+ // Create test canvas (JSDOM throws on getContext('2d'), so catch and skip)
15
+ canvas = document.createElement('canvas');
16
+ canvas.width = 800;
17
+ canvas.height = 600;
18
+ let context = null;
19
+ try {
20
+ context = canvas.getContext('2d');
21
+ }
22
+ catch {
23
+ return;
24
+ }
25
+ if (!context) {
26
+ return;
27
+ }
28
+ ctx = context;
29
+ // Create a test image (using canvas as source)
30
+ testImage = document.createElement('canvas');
31
+ testImage.width = 100;
32
+ testImage.height = 100;
33
+ let testCtx = null;
34
+ try {
35
+ testCtx = testImage.getContext('2d');
36
+ }
37
+ catch {
38
+ // JSDOM: no canvas
39
+ }
40
+ if (testCtx) {
41
+ // Draw some test pattern
42
+ testCtx.fillStyle = 'red';
43
+ testCtx.fillRect(0, 0, 50, 50);
44
+ testCtx.fillStyle = 'blue';
45
+ testCtx.fillRect(50, 0, 50, 50);
46
+ testCtx.fillStyle = 'green';
47
+ testCtx.fillRect(0, 50, 50, 50);
48
+ testCtx.fillStyle = 'yellow';
49
+ testCtx.fillRect(50, 50, 50, 50);
50
+ }
51
+ });
52
+ const measureDrawTime = (smoothing, quality) => {
53
+ if (!ctx)
54
+ return 0; // Skip if canvas not available
55
+ ctx.imageSmoothingEnabled = smoothing;
56
+ if (quality) {
57
+ ctx.imageSmoothingQuality = quality;
58
+ }
59
+ const iterations = 100;
60
+ const startTime = performance.now();
61
+ for (let i = 0; i < iterations; i++) {
62
+ // Scale up the image (this is where smoothing matters)
63
+ ctx.drawImage(testImage, 0, 0, 100, 100, 0, 0, 400, 400);
64
+ }
65
+ const endTime = performance.now();
66
+ return (endTime - startTime) / iterations; // Average time per draw
67
+ };
68
+ (0, globals_1.it)('should measure performance with smoothing disabled', () => {
69
+ if (!ctx)
70
+ return; // Skip if canvas not available
71
+ const avgTime = measureDrawTime(false);
72
+ (0, globals_1.expect)(avgTime).toBeGreaterThan(0);
73
+ (0, globals_1.expect)(avgTime).toBeLessThan(100); // Should complete quickly
74
+ });
75
+ (0, globals_1.it)('should measure performance with smoothing enabled', () => {
76
+ if (!ctx)
77
+ return;
78
+ const avgTime = measureDrawTime(true);
79
+ (0, globals_1.expect)(avgTime).toBeGreaterThan(0);
80
+ (0, globals_1.expect)(avgTime).toBeLessThan(100);
81
+ });
82
+ (0, globals_1.it)('should measure performance with low quality smoothing', () => {
83
+ if (!ctx)
84
+ return;
85
+ const avgTime = measureDrawTime(true, 'low');
86
+ (0, globals_1.expect)(avgTime).toBeGreaterThan(0);
87
+ });
88
+ (0, globals_1.it)('should measure performance with medium quality smoothing', () => {
89
+ if (!ctx)
90
+ return;
91
+ const avgTime = measureDrawTime(true, 'medium');
92
+ (0, globals_1.expect)(avgTime).toBeGreaterThan(0);
93
+ });
94
+ (0, globals_1.it)('should measure performance with high quality smoothing', () => {
95
+ if (!ctx)
96
+ return;
97
+ const avgTime = measureDrawTime(true, 'high');
98
+ (0, globals_1.expect)(avgTime).toBeGreaterThan(0);
99
+ });
100
+ (0, globals_1.it)('should compare performance: disabled vs enabled', () => {
101
+ if (!ctx)
102
+ return;
103
+ const disabledTime = measureDrawTime(false);
104
+ const enabledTime = measureDrawTime(true);
105
+ // Performance should be reasonable in both cases
106
+ (0, globals_1.expect)(disabledTime).toBeLessThan(50);
107
+ (0, globals_1.expect)(enabledTime).toBeLessThan(50);
108
+ // Verify difference is within acceptable range
109
+ const difference = enabledTime - disabledTime;
110
+ (0, globals_1.expect)(Math.abs(difference)).toBeLessThan(30);
111
+ });
112
+ (0, globals_1.it)('should compare quality levels', () => {
113
+ if (!ctx)
114
+ return;
115
+ const lowTime = measureDrawTime(true, 'low');
116
+ const mediumTime = measureDrawTime(true, 'medium');
117
+ const highTime = measureDrawTime(true, 'high');
118
+ // All quality levels should complete reasonably fast
119
+ (0, globals_1.expect)(lowTime).toBeLessThan(50);
120
+ (0, globals_1.expect)(mediumTime).toBeLessThan(50);
121
+ (0, globals_1.expect)(highTime).toBeLessThan(50);
122
+ });
123
+ (0, globals_1.describe)('Large image performance', () => {
124
+ let largeTestImage;
125
+ (0, globals_1.beforeEach)(() => {
126
+ largeTestImage = document.createElement('canvas');
127
+ largeTestImage.width = 500;
128
+ largeTestImage.height = 500;
129
+ let testCtx = null;
130
+ try {
131
+ testCtx = largeTestImage.getContext('2d');
132
+ }
133
+ catch {
134
+ // JSDOM: no canvas
135
+ }
136
+ if (testCtx) {
137
+ // Draw a gradient pattern
138
+ const gradient = testCtx.createLinearGradient(0, 0, 500, 500);
139
+ gradient.addColorStop(0, 'red');
140
+ gradient.addColorStop(0.5, 'blue');
141
+ gradient.addColorStop(1, 'green');
142
+ testCtx.fillStyle = gradient;
143
+ testCtx.fillRect(0, 0, 500, 500);
144
+ }
145
+ });
146
+ (0, globals_1.it)('should handle large image with smoothing disabled', () => {
147
+ if (!ctx)
148
+ return;
149
+ ctx.imageSmoothingEnabled = false;
150
+ const startTime = performance.now();
151
+ ctx.drawImage(largeTestImage, 0, 0, 500, 500, 0, 0, 800, 600);
152
+ const duration = performance.now() - startTime;
153
+ (0, globals_1.expect)(duration).toBeLessThan(100);
154
+ });
155
+ (0, globals_1.it)('should handle large image with smoothing enabled', () => {
156
+ if (!ctx)
157
+ return;
158
+ ctx.imageSmoothingEnabled = true;
159
+ ctx.imageSmoothingQuality = 'high';
160
+ const startTime = performance.now();
161
+ ctx.drawImage(largeTestImage, 0, 0, 500, 500, 0, 0, 800, 600);
162
+ const duration = performance.now() - startTime;
163
+ (0, globals_1.expect)(duration).toBeLessThan(200); // Allow more time for high quality
164
+ });
165
+ });
166
+ });
167
+ //# sourceMappingURL=image-rendering-performance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-rendering-performance.test.js","sourceRoot":"","sources":["../../../../../src/css/property-descriptors/__tests__/image-rendering-performance.test.ts"],"names":[],"mappings":"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"}