html2canvas-pro 1.6.0 → 1.6.2

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 (262) hide show
  1. package/dist/html2canvas-pro.esm.js +2509 -3036
  2. package/dist/html2canvas-pro.esm.js.map +1 -1
  3. package/dist/html2canvas-pro.js +2517 -3040
  4. package/dist/html2canvas-pro.js.map +1 -1
  5. package/dist/html2canvas-pro.min.js +6 -2
  6. package/dist/lib/__tests__/index.js +57 -122
  7. package/dist/lib/__tests__/index.js.map +1 -1
  8. package/dist/lib/core/__mocks__/cache-storage.js +2 -5
  9. package/dist/lib/core/__mocks__/cache-storage.js.map +1 -1
  10. package/dist/lib/core/__mocks__/context.js +7 -10
  11. package/dist/lib/core/__mocks__/context.js.map +1 -1
  12. package/dist/lib/core/__mocks__/logger.js +9 -17
  13. package/dist/lib/core/__mocks__/logger.js.map +1 -1
  14. package/dist/lib/core/__tests__/cache-storage.js +153 -351
  15. package/dist/lib/core/__tests__/cache-storage.js.map +1 -1
  16. package/dist/lib/core/__tests__/logger.js +12 -13
  17. package/dist/lib/core/__tests__/logger.js.map +1 -1
  18. package/dist/lib/core/bitwise.js +1 -1
  19. package/dist/lib/core/bitwise.js.map +1 -1
  20. package/dist/lib/core/cache-storage.js +92 -155
  21. package/dist/lib/core/cache-storage.js.map +1 -1
  22. package/dist/lib/core/context.js +8 -10
  23. package/dist/lib/core/context.js.map +1 -1
  24. package/dist/lib/core/debugger.js +5 -5
  25. package/dist/lib/core/debugger.js.map +1 -1
  26. package/dist/lib/core/features.js +65 -68
  27. package/dist/lib/core/features.js.map +1 -1
  28. package/dist/lib/core/logger.js +21 -56
  29. package/dist/lib/core/logger.js.map +1 -1
  30. package/dist/lib/css/index.js +98 -103
  31. package/dist/lib/css/index.js.map +1 -1
  32. package/dist/lib/css/layout/__mocks__/bounds.js +1 -1
  33. package/dist/lib/css/layout/__mocks__/bounds.js.map +1 -1
  34. package/dist/lib/css/layout/bounds.js +20 -21
  35. package/dist/lib/css/layout/bounds.js.map +1 -1
  36. package/dist/lib/css/layout/text.js +50 -58
  37. package/dist/lib/css/layout/text.js.map +1 -1
  38. package/dist/lib/css/property-descriptors/__tests__/background-tests.js +24 -29
  39. package/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +1 -1
  40. package/dist/lib/css/property-descriptors/__tests__/font-family.js +14 -20
  41. package/dist/lib/css/property-descriptors/__tests__/font-family.js.map +1 -1
  42. package/dist/lib/css/property-descriptors/__tests__/paint-order.js +61 -83
  43. package/dist/lib/css/property-descriptors/__tests__/paint-order.js.map +1 -1
  44. package/dist/lib/css/property-descriptors/__tests__/text-shadow.js +75 -87
  45. package/dist/lib/css/property-descriptors/__tests__/text-shadow.js.map +1 -1
  46. package/dist/lib/css/property-descriptors/__tests__/transform-tests.js +9 -13
  47. package/dist/lib/css/property-descriptors/__tests__/transform-tests.js.map +1 -1
  48. package/dist/lib/css/property-descriptors/background-clip.js +3 -3
  49. package/dist/lib/css/property-descriptors/background-clip.js.map +1 -1
  50. package/dist/lib/css/property-descriptors/background-color.js +1 -1
  51. package/dist/lib/css/property-descriptors/background-image.js +6 -6
  52. package/dist/lib/css/property-descriptors/background-image.js.map +1 -1
  53. package/dist/lib/css/property-descriptors/background-origin.js +3 -3
  54. package/dist/lib/css/property-descriptors/background-origin.js.map +1 -1
  55. package/dist/lib/css/property-descriptors/background-position.js +6 -6
  56. package/dist/lib/css/property-descriptors/background-position.js.map +1 -1
  57. package/dist/lib/css/property-descriptors/background-repeat.js +7 -9
  58. package/dist/lib/css/property-descriptors/background-repeat.js.map +1 -1
  59. package/dist/lib/css/property-descriptors/background-size.js +5 -7
  60. package/dist/lib/css/property-descriptors/background-size.js.map +1 -1
  61. package/dist/lib/css/property-descriptors/border-color.js +3 -3
  62. package/dist/lib/css/property-descriptors/border-color.js.map +1 -1
  63. package/dist/lib/css/property-descriptors/border-radius.js +5 -7
  64. package/dist/lib/css/property-descriptors/border-radius.js.map +1 -1
  65. package/dist/lib/css/property-descriptors/border-style.js +4 -4
  66. package/dist/lib/css/property-descriptors/border-style.js.map +1 -1
  67. package/dist/lib/css/property-descriptors/border-width.js +5 -5
  68. package/dist/lib/css/property-descriptors/border-width.js.map +1 -1
  69. package/dist/lib/css/property-descriptors/box-shadow.js +10 -10
  70. package/dist/lib/css/property-descriptors/box-shadow.js.map +1 -1
  71. package/dist/lib/css/property-descriptors/color.js +1 -1
  72. package/dist/lib/css/property-descriptors/content.js +2 -2
  73. package/dist/lib/css/property-descriptors/content.js.map +1 -1
  74. package/dist/lib/css/property-descriptors/counter-increment.js +10 -10
  75. package/dist/lib/css/property-descriptors/counter-increment.js.map +1 -1
  76. package/dist/lib/css/property-descriptors/counter-reset.js +9 -9
  77. package/dist/lib/css/property-descriptors/counter-reset.js.map +1 -1
  78. package/dist/lib/css/property-descriptors/direction.js +1 -1
  79. package/dist/lib/css/property-descriptors/direction.js.map +1 -1
  80. package/dist/lib/css/property-descriptors/display.js +4 -4
  81. package/dist/lib/css/property-descriptors/display.js.map +1 -1
  82. package/dist/lib/css/property-descriptors/duration.js +4 -4
  83. package/dist/lib/css/property-descriptors/duration.js.map +1 -1
  84. package/dist/lib/css/property-descriptors/float.js +1 -1
  85. package/dist/lib/css/property-descriptors/float.js.map +1 -1
  86. package/dist/lib/css/property-descriptors/font-family.js +6 -6
  87. package/dist/lib/css/property-descriptors/font-family.js.map +1 -1
  88. package/dist/lib/css/property-descriptors/font-size.js +1 -1
  89. package/dist/lib/css/property-descriptors/font-style.js +1 -1
  90. package/dist/lib/css/property-descriptors/font-style.js.map +1 -1
  91. package/dist/lib/css/property-descriptors/font-variant.js +3 -3
  92. package/dist/lib/css/property-descriptors/font-variant.js.map +1 -1
  93. package/dist/lib/css/property-descriptors/font-weight.js +2 -2
  94. package/dist/lib/css/property-descriptors/font-weight.js.map +1 -1
  95. package/dist/lib/css/property-descriptors/letter-spacing.js +1 -1
  96. package/dist/lib/css/property-descriptors/letter-spacing.js.map +1 -1
  97. package/dist/lib/css/property-descriptors/line-break.js +1 -1
  98. package/dist/lib/css/property-descriptors/line-break.js.map +1 -1
  99. package/dist/lib/css/property-descriptors/line-height.js +3 -3
  100. package/dist/lib/css/property-descriptors/line-height.js.map +1 -1
  101. package/dist/lib/css/property-descriptors/list-style-image.js +2 -2
  102. package/dist/lib/css/property-descriptors/list-style-image.js.map +1 -1
  103. package/dist/lib/css/property-descriptors/list-style-position.js +1 -1
  104. package/dist/lib/css/property-descriptors/list-style-position.js.map +1 -1
  105. package/dist/lib/css/property-descriptors/list-style-type.js +1 -1
  106. package/dist/lib/css/property-descriptors/list-style-type.js.map +1 -1
  107. package/dist/lib/css/property-descriptors/margin.js +3 -3
  108. package/dist/lib/css/property-descriptors/margin.js.map +1 -1
  109. package/dist/lib/css/property-descriptors/object-fit.js +4 -4
  110. package/dist/lib/css/property-descriptors/object-fit.js.map +1 -1
  111. package/dist/lib/css/property-descriptors/opacity.js +2 -2
  112. package/dist/lib/css/property-descriptors/opacity.js.map +1 -1
  113. package/dist/lib/css/property-descriptors/overflow-wrap.js +1 -1
  114. package/dist/lib/css/property-descriptors/overflow-wrap.js.map +1 -1
  115. package/dist/lib/css/property-descriptors/overflow.js +3 -3
  116. package/dist/lib/css/property-descriptors/overflow.js.map +1 -1
  117. package/dist/lib/css/property-descriptors/padding.js +3 -3
  118. package/dist/lib/css/property-descriptors/padding.js.map +1 -1
  119. package/dist/lib/css/property-descriptors/paint-order.js +6 -6
  120. package/dist/lib/css/property-descriptors/paint-order.js.map +1 -1
  121. package/dist/lib/css/property-descriptors/position.js +1 -1
  122. package/dist/lib/css/property-descriptors/position.js.map +1 -1
  123. package/dist/lib/css/property-descriptors/quotes.js +11 -11
  124. package/dist/lib/css/property-descriptors/quotes.js.map +1 -1
  125. package/dist/lib/css/property-descriptors/rotate.js +3 -3
  126. package/dist/lib/css/property-descriptors/rotate.js.map +1 -1
  127. package/dist/lib/css/property-descriptors/text-align.js +1 -1
  128. package/dist/lib/css/property-descriptors/text-align.js.map +1 -1
  129. package/dist/lib/css/property-descriptors/text-decoration-color.js +1 -1
  130. package/dist/lib/css/property-descriptors/text-decoration-line.js +4 -4
  131. package/dist/lib/css/property-descriptors/text-decoration-line.js.map +1 -1
  132. package/dist/lib/css/property-descriptors/text-shadow.js +10 -10
  133. package/dist/lib/css/property-descriptors/text-shadow.js.map +1 -1
  134. package/dist/lib/css/property-descriptors/text-transform.js +1 -1
  135. package/dist/lib/css/property-descriptors/text-transform.js.map +1 -1
  136. package/dist/lib/css/property-descriptors/transform-origin.js +6 -6
  137. package/dist/lib/css/property-descriptors/transform-origin.js.map +1 -1
  138. package/dist/lib/css/property-descriptors/transform.js +15 -15
  139. package/dist/lib/css/property-descriptors/transform.js.map +1 -1
  140. package/dist/lib/css/property-descriptors/visibility.js +1 -1
  141. package/dist/lib/css/property-descriptors/visibility.js.map +1 -1
  142. package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +1 -1
  143. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +3 -3
  144. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js.map +1 -1
  145. package/dist/lib/css/property-descriptors/word-break.js +1 -1
  146. package/dist/lib/css/property-descriptors/word-break.js.map +1 -1
  147. package/dist/lib/css/property-descriptors/z-index.js +3 -3
  148. package/dist/lib/css/property-descriptors/z-index.js.map +1 -1
  149. package/dist/lib/css/syntax/__tests__/tokernizer-tests.js +17 -25
  150. package/dist/lib/css/syntax/__tests__/tokernizer-tests.js.map +1 -1
  151. package/dist/lib/css/syntax/parser.js +50 -55
  152. package/dist/lib/css/syntax/parser.js.map +1 -1
  153. package/dist/lib/css/syntax/tokenizer.js +205 -214
  154. package/dist/lib/css/syntax/tokenizer.js.map +1 -1
  155. package/dist/lib/css/types/__tests__/color-tests.js +103 -167
  156. package/dist/lib/css/types/__tests__/color-tests.js.map +1 -1
  157. package/dist/lib/css/types/__tests__/image-tests.js +192 -217
  158. package/dist/lib/css/types/__tests__/image-tests.js.map +1 -1
  159. package/dist/lib/css/types/angle.js +13 -13
  160. package/dist/lib/css/types/angle.js.map +1 -1
  161. package/dist/lib/css/types/color-spaces/a98.js +18 -22
  162. package/dist/lib/css/types/color-spaces/a98.js.map +1 -1
  163. package/dist/lib/css/types/color-spaces/p3.js +17 -22
  164. package/dist/lib/css/types/color-spaces/p3.js.map +1 -1
  165. package/dist/lib/css/types/color-spaces/pro-photo.js +17 -21
  166. package/dist/lib/css/types/color-spaces/pro-photo.js.map +1 -1
  167. package/dist/lib/css/types/color-spaces/rec2020.js +15 -19
  168. package/dist/lib/css/types/color-spaces/rec2020.js.map +1 -1
  169. package/dist/lib/css/types/color-spaces/srgb.js +17 -23
  170. package/dist/lib/css/types/color-spaces/srgb.js.map +1 -1
  171. package/dist/lib/css/types/color-utilities.js +80 -103
  172. package/dist/lib/css/types/color-utilities.js.map +1 -1
  173. package/dist/lib/css/types/color.js +72 -66
  174. package/dist/lib/css/types/color.js.map +1 -1
  175. package/dist/lib/css/types/functions/-prefix-linear-gradient.js +11 -11
  176. package/dist/lib/css/types/functions/-prefix-linear-gradient.js.map +1 -1
  177. package/dist/lib/css/types/functions/-prefix-radial-gradient.js +16 -16
  178. package/dist/lib/css/types/functions/-prefix-radial-gradient.js.map +1 -1
  179. package/dist/lib/css/types/functions/-webkit-gradient.js +26 -26
  180. package/dist/lib/css/types/functions/-webkit-gradient.js.map +1 -1
  181. package/dist/lib/css/types/functions/__tests__/radial-gradient.js +57 -65
  182. package/dist/lib/css/types/functions/__tests__/radial-gradient.js.map +1 -1
  183. package/dist/lib/css/types/functions/counter.js +59 -65
  184. package/dist/lib/css/types/functions/counter.js.map +1 -1
  185. package/dist/lib/css/types/functions/gradient.js +51 -52
  186. package/dist/lib/css/types/functions/gradient.js.map +1 -1
  187. package/dist/lib/css/types/functions/linear-gradient.js +10 -10
  188. package/dist/lib/css/types/functions/linear-gradient.js.map +1 -1
  189. package/dist/lib/css/types/functions/radial-gradient.js +17 -17
  190. package/dist/lib/css/types/functions/radial-gradient.js.map +1 -1
  191. package/dist/lib/css/types/image.js +14 -14
  192. package/dist/lib/css/types/image.js.map +1 -1
  193. package/dist/lib/css/types/length-percentage.js +19 -27
  194. package/dist/lib/css/types/length-percentage.js.map +1 -1
  195. package/dist/lib/css/types/length.js +1 -3
  196. package/dist/lib/css/types/length.js.map +1 -1
  197. package/dist/lib/css/types/time.js +2 -2
  198. package/dist/lib/css/types/time.js.map +1 -1
  199. package/dist/lib/dom/__mocks__/document-cloner.js +7 -8
  200. package/dist/lib/dom/__mocks__/document-cloner.js.map +1 -1
  201. package/dist/lib/dom/document-cloner.js +195 -219
  202. package/dist/lib/dom/document-cloner.js.map +1 -1
  203. package/dist/lib/dom/element-container.js +8 -9
  204. package/dist/lib/dom/element-container.js.map +1 -1
  205. package/dist/lib/dom/elements/li-element-container.js +6 -24
  206. package/dist/lib/dom/elements/li-element-container.js.map +1 -1
  207. package/dist/lib/dom/elements/ol-element-container.js +7 -25
  208. package/dist/lib/dom/elements/ol-element-container.js.map +1 -1
  209. package/dist/lib/dom/elements/select-element-container.js +7 -25
  210. package/dist/lib/dom/elements/select-element-container.js.map +1 -1
  211. package/dist/lib/dom/elements/textarea-element-container.js +6 -24
  212. package/dist/lib/dom/elements/textarea-element-container.js.map +1 -1
  213. package/dist/lib/dom/node-parser.js +42 -46
  214. package/dist/lib/dom/node-parser.js.map +1 -1
  215. package/dist/lib/dom/replaced-elements/canvas-element-container.js +8 -26
  216. package/dist/lib/dom/replaced-elements/canvas-element-container.js.map +1 -1
  217. package/dist/lib/dom/replaced-elements/iframe-element-container.js +17 -35
  218. package/dist/lib/dom/replaced-elements/iframe-element-container.js.map +1 -1
  219. package/dist/lib/dom/replaced-elements/image-element-container.js +9 -27
  220. package/dist/lib/dom/replaced-elements/image-element-container.js.map +1 -1
  221. package/dist/lib/dom/replaced-elements/input-element-container.js +47 -59
  222. package/dist/lib/dom/replaced-elements/input-element-container.js.map +1 -1
  223. package/dist/lib/dom/replaced-elements/svg-element-container.js +14 -32
  224. package/dist/lib/dom/replaced-elements/svg-element-container.js.map +1 -1
  225. package/dist/lib/dom/text-container.js +7 -8
  226. package/dist/lib/dom/text-container.js.map +1 -1
  227. package/dist/lib/index.js +101 -156
  228. package/dist/lib/index.js.map +1 -1
  229. package/dist/lib/invariant.js +1 -1
  230. package/dist/lib/invariant.js.map +1 -1
  231. package/dist/lib/render/background.js +44 -47
  232. package/dist/lib/render/background.js.map +1 -1
  233. package/dist/lib/render/bezier-curve.js +18 -19
  234. package/dist/lib/render/bezier-curve.js.map +1 -1
  235. package/dist/lib/render/border.js +9 -9
  236. package/dist/lib/render/border.js.map +1 -1
  237. package/dist/lib/render/bound-curves.js +35 -36
  238. package/dist/lib/render/bound-curves.js.map +1 -1
  239. package/dist/lib/render/box-sizing.js +11 -11
  240. package/dist/lib/render/box-sizing.js.map +1 -1
  241. package/dist/lib/render/canvas/canvas-renderer.js +639 -918
  242. package/dist/lib/render/canvas/canvas-renderer.js.map +1 -1
  243. package/dist/lib/render/canvas/foreignobject-renderer.js +35 -101
  244. package/dist/lib/render/canvas/foreignobject-renderer.js.map +1 -1
  245. package/dist/lib/render/effects.js +12 -17
  246. package/dist/lib/render/effects.js.map +1 -1
  247. package/dist/lib/render/font-metrics.js +17 -18
  248. package/dist/lib/render/font-metrics.js.map +1 -1
  249. package/dist/lib/render/path.js +4 -4
  250. package/dist/lib/render/path.js.map +1 -1
  251. package/dist/lib/render/renderer.js +3 -4
  252. package/dist/lib/render/renderer.js.map +1 -1
  253. package/dist/lib/render/stacking-context.js +71 -73
  254. package/dist/lib/render/stacking-context.js.map +1 -1
  255. package/dist/lib/render/vector.js +6 -7
  256. package/dist/lib/render/vector.js.map +1 -1
  257. package/dist/types/dom/replaced-elements/input-element-container.d.ts +2 -0
  258. package/dist/types/index.d.ts +1 -0
  259. package/eslint.config.js +35 -0
  260. package/jest.config.cjs +5 -0
  261. package/karma.conf.cjs +295 -0
  262. package/package.json +32 -20
@@ -1,52 +1,16 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
3
  exports.copyCSSStyles = exports.DocumentCloner = void 0;
40
- var node_parser_1 = require("./node-parser");
41
- var parser_1 = require("../css/syntax/parser");
42
- var counter_1 = require("../css/types/functions/counter");
43
- var list_style_type_1 = require("../css/property-descriptors/list-style-type");
44
- var index_1 = require("../css/index");
45
- var quotes_1 = require("../css/property-descriptors/quotes");
46
- var debugger_1 = require("../core/debugger");
47
- var IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';
48
- var DocumentCloner = /** @class */ (function () {
49
- function DocumentCloner(context, element, options) {
4
+ const node_parser_1 = require("./node-parser");
5
+ const parser_1 = require("../css/syntax/parser");
6
+ const counter_1 = require("../css/types/functions/counter");
7
+ const list_style_type_1 = require("../css/property-descriptors/list-style-type");
8
+ const index_1 = require("../css/index");
9
+ const quotes_1 = require("../css/property-descriptors/quotes");
10
+ const debugger_1 = require("../core/debugger");
11
+ const IGNORE_ATTRIBUTE = 'data-html2canvas-ignore';
12
+ class DocumentCloner {
13
+ constructor(context, element, options) {
50
14
  this.context = context;
51
15
  this.options = options;
52
16
  this.scrolledElements = [];
@@ -58,66 +22,53 @@ var DocumentCloner = /** @class */ (function () {
58
22
  }
59
23
  this.documentElement = this.cloneNode(element.ownerDocument.documentElement, false);
60
24
  }
61
- DocumentCloner.prototype.toIFrame = function (ownerDocument, windowSize) {
62
- var _this = this;
63
- var iframe = createIFrameContainer(ownerDocument, windowSize);
25
+ toIFrame(ownerDocument, windowSize) {
26
+ const iframe = createIFrameContainer(ownerDocument, windowSize);
64
27
  if (!iframe.contentWindow) {
65
- return Promise.reject("Unable to find iframe window");
28
+ return Promise.reject(`Unable to find iframe window`);
66
29
  }
67
- var scrollX = ownerDocument.defaultView.pageXOffset;
68
- var scrollY = ownerDocument.defaultView.pageYOffset;
69
- var cloneWindow = iframe.contentWindow;
70
- var documentClone = cloneWindow.document;
30
+ const scrollX = ownerDocument.defaultView.pageXOffset;
31
+ const scrollY = ownerDocument.defaultView.pageYOffset;
32
+ const cloneWindow = iframe.contentWindow;
33
+ const documentClone = cloneWindow.document;
71
34
  /* Chrome doesn't detect relative background-images assigned in inline <style> sheets when fetched through getComputedStyle
72
35
  if window url is about:blank, we can assign the url to current by writing onto the document
73
36
  */
74
- var iframeLoad = iframeLoader(iframe).then(function () { return __awaiter(_this, void 0, void 0, function () {
75
- var onclone, referenceElement;
76
- return __generator(this, function (_a) {
77
- switch (_a.label) {
78
- case 0:
79
- this.scrolledElements.forEach(restoreNodeScroll);
80
- if (cloneWindow) {
81
- cloneWindow.scrollTo(windowSize.left, windowSize.top);
82
- if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&
83
- (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) {
84
- this.context.logger.warn('Unable to restore scroll position for cloned document');
85
- this.context.windowBounds = this.context.windowBounds.add(cloneWindow.scrollX - windowSize.left, cloneWindow.scrollY - windowSize.top, 0, 0);
86
- }
87
- }
88
- onclone = this.options.onclone;
89
- referenceElement = this.clonedReferenceElement;
90
- if (typeof referenceElement === 'undefined') {
91
- return [2 /*return*/, Promise.reject("Error finding the ".concat(this.referenceElement.nodeName, " in the cloned document"))];
92
- }
93
- if (!(documentClone.fonts && documentClone.fonts.ready)) return [3 /*break*/, 2];
94
- return [4 /*yield*/, documentClone.fonts.ready];
95
- case 1:
96
- _a.sent();
97
- _a.label = 2;
98
- case 2:
99
- if (!/(AppleWebKit)/g.test(navigator.userAgent)) return [3 /*break*/, 4];
100
- return [4 /*yield*/, imagesReady(documentClone)];
101
- case 3:
102
- _a.sent();
103
- _a.label = 4;
104
- case 4:
105
- if (typeof onclone === 'function') {
106
- return [2 /*return*/, Promise.resolve()
107
- .then(function () { return onclone(documentClone, referenceElement); })
108
- .then(function () { return iframe; })];
109
- }
110
- return [2 /*return*/, iframe];
37
+ const iframeLoad = iframeLoader(iframe).then(async () => {
38
+ this.scrolledElements.forEach(restoreNodeScroll);
39
+ if (cloneWindow) {
40
+ cloneWindow.scrollTo(windowSize.left, windowSize.top);
41
+ if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent) &&
42
+ (cloneWindow.scrollY !== windowSize.top || cloneWindow.scrollX !== windowSize.left)) {
43
+ this.context.logger.warn('Unable to restore scroll position for cloned document');
44
+ this.context.windowBounds = this.context.windowBounds.add(cloneWindow.scrollX - windowSize.left, cloneWindow.scrollY - windowSize.top, 0, 0);
111
45
  }
112
- });
113
- }); });
46
+ }
47
+ const onclone = this.options.onclone;
48
+ const referenceElement = this.clonedReferenceElement;
49
+ if (typeof referenceElement === 'undefined') {
50
+ return Promise.reject(`Error finding the ${this.referenceElement.nodeName} in the cloned document`);
51
+ }
52
+ if (documentClone.fonts && documentClone.fonts.ready) {
53
+ await documentClone.fonts.ready;
54
+ }
55
+ if (/(AppleWebKit)/g.test(navigator.userAgent)) {
56
+ await imagesReady(documentClone);
57
+ }
58
+ if (typeof onclone === 'function') {
59
+ return Promise.resolve()
60
+ .then(() => onclone(documentClone, referenceElement))
61
+ .then(() => iframe);
62
+ }
63
+ return iframe;
64
+ });
114
65
  /**
115
66
  * The baseURI of the document will be lost after documentClone.open().
116
67
  * We save it before open() to preserve the original base URI for resource resolution.
117
68
  * */
118
- var baseUri = documentClone.baseURI;
69
+ const baseUri = documentClone.baseURI;
119
70
  documentClone.open();
120
- documentClone.write("".concat(serializeDoctype(document.doctype), "<html></html>"));
71
+ documentClone.write(`${serializeDoctype(document.doctype)}<html></html>`);
121
72
  // Chrome scrolls the parent document for some reason after the write to the cloned window???
122
73
  restoreOwnerScroll(this.referenceElement.ownerDocument, scrollX, scrollY);
123
74
  /**
@@ -130,13 +81,13 @@ var DocumentCloner = /** @class */ (function () {
130
81
  * - Make sure adoptNode() is called after documentClone.open() and close()
131
82
  * - This allows Chrome to properly match and apply all CSS rules including mixed-case class selectors.
132
83
  * */
133
- var adoptedNode = documentClone.adoptNode(this.documentElement);
84
+ const adoptedNode = documentClone.adoptNode(this.documentElement);
134
85
  addBase(adoptedNode, baseUri);
135
86
  documentClone.replaceChild(adoptedNode, documentClone.documentElement);
136
87
  documentClone.close();
137
88
  return iframeLoad;
138
- };
139
- DocumentCloner.prototype.createElementClone = function (node) {
89
+ }
90
+ createElementClone(node) {
140
91
  if ((0, debugger_1.isDebugging)(node, 2 /* DebuggerType.CLONE */)) {
141
92
  debugger;
142
93
  }
@@ -149,7 +100,7 @@ var DocumentCloner = /** @class */ (function () {
149
100
  if ((0, node_parser_1.isStyleElement)(node)) {
150
101
  return this.createStyleClone(node);
151
102
  }
152
- var clone = node.cloneNode(false);
103
+ const clone = node.cloneNode(false);
153
104
  if ((0, node_parser_1.isImageElement)(clone)) {
154
105
  if ((0, node_parser_1.isImageElement)(node) && node.currentSrc && node.currentSrc !== node.src) {
155
106
  clone.src = node.currentSrc;
@@ -163,23 +114,49 @@ var DocumentCloner = /** @class */ (function () {
163
114
  return this.createCustomElementClone(clone);
164
115
  }
165
116
  return clone;
166
- };
167
- DocumentCloner.prototype.createCustomElementClone = function (node) {
168
- var clone = document.createElement('html2canvascustomelement');
117
+ }
118
+ createCustomElementClone(node) {
119
+ // Ensure html2canvascustomelement is defined
120
+ if (typeof window !== 'undefined' && !customElements.get('html2canvascustomelement')) {
121
+ try {
122
+ customElements.define('html2canvascustomelement', class extends HTMLElement {
123
+ constructor() {
124
+ super();
125
+ }
126
+ });
127
+ }
128
+ catch (e) {
129
+ // Already defined or cannot define
130
+ }
131
+ }
132
+ const clone = document.createElement('html2canvascustomelement');
169
133
  (0, exports.copyCSSStyles)(node.style, clone);
134
+ // Clone shadow DOM if it exists
135
+ // Fix for Issue #108: This is critical for Web Components with slots to work correctly
136
+ if (node.shadowRoot) {
137
+ try {
138
+ clone.attachShadow({ mode: 'open' });
139
+ // The actual shadow DOM content will be cloned in cloneChildNodes
140
+ }
141
+ catch (e) {
142
+ // Some elements cannot have shadow roots attached
143
+ // This can happen if the element doesn't support shadow DOM
144
+ this.context.logger.error('Failed to attach shadow root to custom element clone:', e);
145
+ }
146
+ }
170
147
  return clone;
171
- };
172
- DocumentCloner.prototype.createStyleClone = function (node) {
148
+ }
149
+ createStyleClone(node) {
173
150
  try {
174
- var sheet = node.sheet;
151
+ const sheet = node.sheet;
175
152
  if (sheet && sheet.cssRules) {
176
- var css = [].slice.call(sheet.cssRules, 0).reduce(function (css, rule) {
153
+ const css = [].slice.call(sheet.cssRules, 0).reduce((css, rule) => {
177
154
  if (rule && typeof rule.cssText === 'string') {
178
155
  return css + rule.cssText;
179
156
  }
180
157
  return css;
181
158
  }, '');
182
- var style = node.cloneNode(false);
159
+ const style = node.cloneNode(false);
183
160
  style.textContent = css;
184
161
  return style;
185
162
  }
@@ -192,34 +169,33 @@ var DocumentCloner = /** @class */ (function () {
192
169
  }
193
170
  }
194
171
  return node.cloneNode(false);
195
- };
196
- DocumentCloner.prototype.createCanvasClone = function (canvas) {
197
- var _a;
172
+ }
173
+ createCanvasClone(canvas) {
198
174
  if (this.options.inlineImages && canvas.ownerDocument) {
199
- var img = canvas.ownerDocument.createElement('img');
175
+ const img = canvas.ownerDocument.createElement('img');
200
176
  try {
201
177
  img.src = canvas.toDataURL();
202
178
  return img;
203
179
  }
204
180
  catch (e) {
205
- this.context.logger.info("Unable to inline canvas contents, canvas is tainted", canvas);
181
+ this.context.logger.info(`Unable to inline canvas contents, canvas is tainted`, canvas);
206
182
  }
207
183
  }
208
- var clonedCanvas = canvas.cloneNode(false);
184
+ const clonedCanvas = canvas.cloneNode(false);
209
185
  try {
210
186
  clonedCanvas.width = canvas.width;
211
187
  clonedCanvas.height = canvas.height;
212
- var ctx = canvas.getContext('2d');
213
- var clonedCtx = clonedCanvas.getContext('2d', { willReadFrequently: true });
188
+ const ctx = canvas.getContext('2d');
189
+ const clonedCtx = clonedCanvas.getContext('2d', { willReadFrequently: true });
214
190
  if (clonedCtx) {
215
191
  if (!this.options.allowTaint && ctx) {
216
192
  clonedCtx.putImageData(ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0);
217
193
  }
218
194
  else {
219
- var gl = (_a = canvas.getContext('webgl2')) !== null && _a !== void 0 ? _a : canvas.getContext('webgl');
195
+ const gl = canvas.getContext('webgl2') ?? canvas.getContext('webgl');
220
196
  if (gl) {
221
- var attribs = gl.getContextAttributes();
222
- if ((attribs === null || attribs === void 0 ? void 0 : attribs.preserveDrawingBuffer) === false) {
197
+ const attribs = gl.getContextAttributes();
198
+ if (attribs?.preserveDrawingBuffer === false) {
223
199
  this.context.logger.warn('Unable to clone WebGL context as it has preserveDrawingBuffer=false', canvas);
224
200
  }
225
201
  }
@@ -229,15 +205,15 @@ var DocumentCloner = /** @class */ (function () {
229
205
  return clonedCanvas;
230
206
  }
231
207
  catch (e) {
232
- this.context.logger.info("Unable to clone canvas as it is tainted", canvas);
208
+ this.context.logger.info(`Unable to clone canvas as it is tainted`, canvas);
233
209
  }
234
210
  return clonedCanvas;
235
- };
236
- DocumentCloner.prototype.createVideoClone = function (video) {
237
- var canvas = video.ownerDocument.createElement('canvas');
211
+ }
212
+ createVideoClone(video) {
213
+ const canvas = video.ownerDocument.createElement('canvas');
238
214
  canvas.width = video.offsetWidth;
239
215
  canvas.height = video.offsetHeight;
240
- var ctx = canvas.getContext('2d');
216
+ const ctx = canvas.getContext('2d');
241
217
  try {
242
218
  if (ctx) {
243
219
  ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
@@ -248,14 +224,14 @@ var DocumentCloner = /** @class */ (function () {
248
224
  return canvas;
249
225
  }
250
226
  catch (e) {
251
- this.context.logger.info("Unable to clone video as it is tainted", video);
227
+ this.context.logger.info(`Unable to clone video as it is tainted`, video);
252
228
  }
253
- var blankCanvas = video.ownerDocument.createElement('canvas');
229
+ const blankCanvas = video.ownerDocument.createElement('canvas');
254
230
  blankCanvas.width = video.offsetWidth;
255
231
  blankCanvas.height = video.offsetHeight;
256
232
  return blankCanvas;
257
- };
258
- DocumentCloner.prototype.appendChildNode = function (clone, child, copyStyles) {
233
+ }
234
+ appendChildNode(clone, child, copyStyles) {
259
235
  if (!(0, node_parser_1.isElementNode)(child) ||
260
236
  (!(0, node_parser_1.isScriptElement)(child) &&
261
237
  !child.hasAttribute(IGNORE_ATTRIBUTE) &&
@@ -264,43 +240,43 @@ var DocumentCloner = /** @class */ (function () {
264
240
  clone.appendChild(this.cloneNode(child, copyStyles));
265
241
  }
266
242
  }
267
- };
268
- DocumentCloner.prototype.cloneChildNodes = function (node, clone, copyStyles) {
269
- var _this = this;
270
- for (var child = node.shadowRoot ? node.shadowRoot.firstChild : node.firstChild; child; child = child.nextSibling) {
271
- if ((0, node_parser_1.isElementNode)(child) && (0, node_parser_1.isSlotElement)(child) && typeof child.assignedNodes === 'function') {
272
- var assignedNodes = child.assignedNodes();
273
- if (assignedNodes.length) {
274
- assignedNodes.forEach(function (assignedNode) { return _this.appendChildNode(clone, assignedNode, copyStyles); });
275
- }
276
- }
277
- else {
278
- this.appendChildNode(clone, child, copyStyles);
243
+ }
244
+ cloneChildNodes(node, clone, copyStyles) {
245
+ // Clone shadow DOM content if it exists
246
+ if (node.shadowRoot && clone.shadowRoot) {
247
+ for (let child = node.shadowRoot.firstChild; child; child = child.nextSibling) {
248
+ // Clone all shadow DOM children including <slot> elements
249
+ // The browser will automatically handle slot assignment
250
+ clone.shadowRoot.appendChild(this.cloneNode(child, copyStyles));
279
251
  }
280
252
  }
281
- };
282
- DocumentCloner.prototype.cloneNode = function (node, copyStyles) {
253
+ // Clone light DOM content (always, even if shadow DOM exists)
254
+ for (let child = node.firstChild; child; child = child.nextSibling) {
255
+ this.appendChildNode(clone, child, copyStyles);
256
+ }
257
+ }
258
+ cloneNode(node, copyStyles) {
283
259
  if ((0, node_parser_1.isTextNode)(node)) {
284
260
  return document.createTextNode(node.data);
285
261
  }
286
262
  if (!node.ownerDocument) {
287
263
  return node.cloneNode(false);
288
264
  }
289
- var window = node.ownerDocument.defaultView;
265
+ const window = node.ownerDocument.defaultView;
290
266
  if (window && (0, node_parser_1.isElementNode)(node) && ((0, node_parser_1.isHTMLElementNode)(node) || (0, node_parser_1.isSVGElementNode)(node))) {
291
- var clone = this.createElementClone(node);
267
+ const clone = this.createElementClone(node);
292
268
  clone.style.transitionProperty = 'none';
293
- var style = window.getComputedStyle(node);
294
- var styleBefore = window.getComputedStyle(node, ':before');
295
- var styleAfter = window.getComputedStyle(node, ':after');
269
+ const style = window.getComputedStyle(node);
270
+ const styleBefore = window.getComputedStyle(node, ':before');
271
+ const styleAfter = window.getComputedStyle(node, ':after');
296
272
  if (this.referenceElement === node && (0, node_parser_1.isHTMLElementNode)(clone)) {
297
273
  this.clonedReferenceElement = clone;
298
274
  }
299
275
  if ((0, node_parser_1.isBodyElement)(clone)) {
300
276
  createPseudoHideStyles(clone);
301
277
  }
302
- var counters = this.counters.parse(new index_1.CSSParsedCounterDeclaration(this.context, style));
303
- var before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE);
278
+ const counters = this.counters.parse(new index_1.CSSParsedCounterDeclaration(this.context, style));
279
+ const before = this.resolvePseudoContent(node, clone, styleBefore, PseudoElementType.BEFORE);
304
280
  if ((0, node_parser_1.isCustomElement)(node)) {
305
281
  copyStyles = true;
306
282
  }
@@ -310,7 +286,7 @@ var DocumentCloner = /** @class */ (function () {
310
286
  if (before) {
311
287
  clone.insertBefore(before, clone.firstChild);
312
288
  }
313
- var after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER);
289
+ const after = this.resolvePseudoContent(node, clone, styleAfter, PseudoElementType.AFTER);
314
290
  if (after) {
315
291
  clone.appendChild(after);
316
292
  }
@@ -329,58 +305,57 @@ var DocumentCloner = /** @class */ (function () {
329
305
  return clone;
330
306
  }
331
307
  return node.cloneNode(false);
332
- };
333
- DocumentCloner.prototype.resolvePseudoContent = function (node, clone, style, pseudoElt) {
334
- var _this = this;
308
+ }
309
+ resolvePseudoContent(node, clone, style, pseudoElt) {
335
310
  if (!style) {
336
311
  return;
337
312
  }
338
- var value = style.content;
339
- var document = clone.ownerDocument;
313
+ const value = style.content;
314
+ const document = clone.ownerDocument;
340
315
  if (!document || !value || value === 'none' || value === '-moz-alt-content' || style.display === 'none') {
341
316
  return;
342
317
  }
343
318
  this.counters.parse(new index_1.CSSParsedCounterDeclaration(this.context, style));
344
- var declaration = new index_1.CSSParsedPseudoDeclaration(this.context, style);
345
- var anonymousReplacedElement = document.createElement('html2canvaspseudoelement');
319
+ const declaration = new index_1.CSSParsedPseudoDeclaration(this.context, style);
320
+ const anonymousReplacedElement = document.createElement('html2canvaspseudoelement');
346
321
  (0, exports.copyCSSStyles)(style, anonymousReplacedElement);
347
- declaration.content.forEach(function (token) {
322
+ declaration.content.forEach((token) => {
348
323
  if (token.type === 0 /* TokenType.STRING_TOKEN */) {
349
324
  anonymousReplacedElement.appendChild(document.createTextNode(token.value));
350
325
  }
351
326
  else if (token.type === 22 /* TokenType.URL_TOKEN */) {
352
- var img = document.createElement('img');
327
+ const img = document.createElement('img');
353
328
  img.src = token.value;
354
329
  img.style.opacity = '1';
355
330
  anonymousReplacedElement.appendChild(img);
356
331
  }
357
332
  else if (token.type === 18 /* TokenType.FUNCTION */) {
358
333
  if (token.name === 'attr') {
359
- var attr = token.values.filter(parser_1.isIdentToken);
334
+ const attr = token.values.filter(parser_1.isIdentToken);
360
335
  if (attr.length) {
361
336
  anonymousReplacedElement.appendChild(document.createTextNode(node.getAttribute(attr[0].value) || ''));
362
337
  }
363
338
  }
364
339
  else if (token.name === 'counter') {
365
- var _a = token.values.filter(parser_1.nonFunctionArgSeparator), counter = _a[0], counterStyle = _a[1];
340
+ const [counter, counterStyle] = token.values.filter(parser_1.nonFunctionArgSeparator);
366
341
  if (counter && (0, parser_1.isIdentToken)(counter)) {
367
- var counterState = _this.counters.getCounterValue(counter.value);
368
- var counterType = counterStyle && (0, parser_1.isIdentToken)(counterStyle)
369
- ? list_style_type_1.listStyleType.parse(_this.context, counterStyle.value)
342
+ const counterState = this.counters.getCounterValue(counter.value);
343
+ const counterType = counterStyle && (0, parser_1.isIdentToken)(counterStyle)
344
+ ? list_style_type_1.listStyleType.parse(this.context, counterStyle.value)
370
345
  : 3 /* LIST_STYLE_TYPE.DECIMAL */;
371
346
  anonymousReplacedElement.appendChild(document.createTextNode((0, counter_1.createCounterText)(counterState, counterType, false)));
372
347
  }
373
348
  }
374
349
  else if (token.name === 'counters') {
375
- var _b = token.values.filter(parser_1.nonFunctionArgSeparator), counter = _b[0], delim = _b[1], counterStyle = _b[2];
350
+ const [counter, delim, counterStyle] = token.values.filter(parser_1.nonFunctionArgSeparator);
376
351
  if (counter && (0, parser_1.isIdentToken)(counter)) {
377
- var counterStates = _this.counters.getCounterValues(counter.value);
378
- var counterType_1 = counterStyle && (0, parser_1.isIdentToken)(counterStyle)
379
- ? list_style_type_1.listStyleType.parse(_this.context, counterStyle.value)
352
+ const counterStates = this.counters.getCounterValues(counter.value);
353
+ const counterType = counterStyle && (0, parser_1.isIdentToken)(counterStyle)
354
+ ? list_style_type_1.listStyleType.parse(this.context, counterStyle.value)
380
355
  : 3 /* LIST_STYLE_TYPE.DECIMAL */;
381
- var separator = delim && delim.type === 0 /* TokenType.STRING_TOKEN */ ? delim.value : '';
382
- var text = counterStates
383
- .map(function (value) { return (0, counter_1.createCounterText)(value, counterType_1, false); })
356
+ const separator = delim && delim.type === 0 /* TokenType.STRING_TOKEN */ ? delim.value : '';
357
+ const text = counterStates
358
+ .map((value) => (0, counter_1.createCounterText)(value, counterType, false))
384
359
  .join(separator);
385
360
  anonymousReplacedElement.appendChild(document.createTextNode(text));
386
361
  }
@@ -392,10 +367,10 @@ var DocumentCloner = /** @class */ (function () {
392
367
  else if (token.type === 20 /* TokenType.IDENT_TOKEN */) {
393
368
  switch (token.value) {
394
369
  case 'open-quote':
395
- anonymousReplacedElement.appendChild(document.createTextNode((0, quotes_1.getQuote)(declaration.quotes, _this.quoteDepth++, true)));
370
+ anonymousReplacedElement.appendChild(document.createTextNode((0, quotes_1.getQuote)(declaration.quotes, this.quoteDepth++, true)));
396
371
  break;
397
372
  case 'close-quote':
398
- anonymousReplacedElement.appendChild(document.createTextNode((0, quotes_1.getQuote)(declaration.quotes, --_this.quoteDepth, false)));
373
+ anonymousReplacedElement.appendChild(document.createTextNode((0, quotes_1.getQuote)(declaration.quotes, --this.quoteDepth, false)));
399
374
  break;
400
375
  default:
401
376
  // safari doesn't parse string tokens correctly because of lack of quotes
@@ -403,10 +378,10 @@ var DocumentCloner = /** @class */ (function () {
403
378
  }
404
379
  }
405
380
  });
406
- anonymousReplacedElement.className = "".concat(PSEUDO_HIDE_ELEMENT_CLASS_BEFORE, " ").concat(PSEUDO_HIDE_ELEMENT_CLASS_AFTER);
407
- var newClassName = pseudoElt === PseudoElementType.BEFORE
408
- ? " ".concat(PSEUDO_HIDE_ELEMENT_CLASS_BEFORE)
409
- : " ".concat(PSEUDO_HIDE_ELEMENT_CLASS_AFTER);
381
+ anonymousReplacedElement.className = `${PSEUDO_HIDE_ELEMENT_CLASS_BEFORE} ${PSEUDO_HIDE_ELEMENT_CLASS_AFTER}`;
382
+ const newClassName = pseudoElt === PseudoElementType.BEFORE
383
+ ? ` ${PSEUDO_HIDE_ELEMENT_CLASS_BEFORE}`
384
+ : ` ${PSEUDO_HIDE_ELEMENT_CLASS_AFTER}`;
410
385
  if ((0, node_parser_1.isSVGElementNode)(clone)) {
411
386
  clone.className.baseValue += newClassName;
412
387
  }
@@ -414,24 +389,23 @@ var DocumentCloner = /** @class */ (function () {
414
389
  clone.className += newClassName;
415
390
  }
416
391
  return anonymousReplacedElement;
417
- };
418
- DocumentCloner.destroy = function (container) {
392
+ }
393
+ static destroy(container) {
419
394
  if (container.parentNode) {
420
395
  container.parentNode.removeChild(container);
421
396
  return true;
422
397
  }
423
398
  return false;
424
- };
425
- return DocumentCloner;
426
- }());
399
+ }
400
+ }
427
401
  exports.DocumentCloner = DocumentCloner;
428
402
  var PseudoElementType;
429
403
  (function (PseudoElementType) {
430
404
  PseudoElementType[PseudoElementType["BEFORE"] = 0] = "BEFORE";
431
405
  PseudoElementType[PseudoElementType["AFTER"] = 1] = "AFTER";
432
406
  })(PseudoElementType || (PseudoElementType = {}));
433
- var createIFrameContainer = function (ownerDocument, bounds) {
434
- var cloneIframeContainer = ownerDocument.createElement('iframe');
407
+ const createIFrameContainer = (ownerDocument, bounds) => {
408
+ const cloneIframeContainer = ownerDocument.createElement('iframe');
435
409
  cloneIframeContainer.className = 'html2canvas-container';
436
410
  cloneIframeContainer.style.visibility = 'hidden';
437
411
  cloneIframeContainer.style.position = 'fixed';
@@ -445,8 +419,8 @@ var createIFrameContainer = function (ownerDocument, bounds) {
445
419
  ownerDocument.body.appendChild(cloneIframeContainer);
446
420
  return cloneIframeContainer;
447
421
  };
448
- var imageReady = function (img) {
449
- return new Promise(function (resolve) {
422
+ const imageReady = (img) => {
423
+ return new Promise((resolve) => {
450
424
  if (img.complete) {
451
425
  resolve();
452
426
  return;
@@ -459,19 +433,19 @@ var imageReady = function (img) {
459
433
  img.onerror = resolve;
460
434
  });
461
435
  };
462
- var imagesReady = function (document) {
436
+ const imagesReady = (document) => {
463
437
  return Promise.all([].slice.call(document.images, 0).map(imageReady));
464
438
  };
465
- var iframeLoader = function (iframe) {
466
- return new Promise(function (resolve, reject) {
467
- var cloneWindow = iframe.contentWindow;
439
+ const iframeLoader = (iframe) => {
440
+ return new Promise((resolve, reject) => {
441
+ const cloneWindow = iframe.contentWindow;
468
442
  if (!cloneWindow) {
469
- return reject("No window assigned for iframe");
443
+ return reject(`No window assigned for iframe`);
470
444
  }
471
- var documentClone = cloneWindow.document;
472
- cloneWindow.onload = iframe.onload = function () {
445
+ const documentClone = cloneWindow.document;
446
+ cloneWindow.onload = iframe.onload = () => {
473
447
  cloneWindow.onload = iframe.onload = null;
474
- var interval = setInterval(function () {
448
+ const interval = setInterval(() => {
475
449
  if (documentClone.body.childNodes.length > 0 && documentClone.readyState === 'complete') {
476
450
  clearInterval(interval);
477
451
  resolve(iframe);
@@ -480,15 +454,15 @@ var iframeLoader = function (iframe) {
480
454
  };
481
455
  });
482
456
  };
483
- var ignoredStyleProperties = [
457
+ const ignoredStyleProperties = [
484
458
  'all', // #2476
485
459
  'd', // #2483
486
460
  'content' // Safari shows pseudoelements if content is set
487
461
  ];
488
- var copyCSSStyles = function (style, target) {
462
+ const copyCSSStyles = (style, target) => {
489
463
  // Edge does not provide value for cssText
490
- for (var i = style.length - 1; i >= 0; i--) {
491
- var property = style.item(i);
464
+ for (let i = style.length - 1; i >= 0; i--) {
465
+ const property = style.item(i);
492
466
  // fix: Chrome_138 ignore custom properties
493
467
  if (ignoredStyleProperties.indexOf(property) === -1 && !property.startsWith('--')) {
494
468
  target.style.setProperty(property, style.getPropertyValue(property));
@@ -497,8 +471,8 @@ var copyCSSStyles = function (style, target) {
497
471
  return target;
498
472
  };
499
473
  exports.copyCSSStyles = copyCSSStyles;
500
- var serializeDoctype = function (doctype) {
501
- var str = '';
474
+ const serializeDoctype = (doctype) => {
475
+ let str = '';
502
476
  if (doctype) {
503
477
  str += '<!DOCTYPE ';
504
478
  if (doctype.name) {
@@ -508,48 +482,50 @@ var serializeDoctype = function (doctype) {
508
482
  str += doctype.internalSubset;
509
483
  }
510
484
  if (doctype.publicId) {
511
- str += "\"".concat(doctype.publicId, "\"");
485
+ str += `"${doctype.publicId}"`;
512
486
  }
513
487
  if (doctype.systemId) {
514
- str += "\"".concat(doctype.systemId, "\"");
488
+ str += `"${doctype.systemId}"`;
515
489
  }
516
490
  str += '>';
517
491
  }
518
492
  return str;
519
493
  };
520
- var restoreOwnerScroll = function (ownerDocument, x, y) {
494
+ const restoreOwnerScroll = (ownerDocument, x, y) => {
521
495
  if (ownerDocument &&
522
496
  ownerDocument.defaultView &&
523
497
  (x !== ownerDocument.defaultView.pageXOffset || y !== ownerDocument.defaultView.pageYOffset)) {
524
498
  ownerDocument.defaultView.scrollTo(x, y);
525
499
  }
526
500
  };
527
- var restoreNodeScroll = function (_a) {
528
- var element = _a[0], x = _a[1], y = _a[2];
501
+ const restoreNodeScroll = ([element, x, y]) => {
529
502
  element.scrollLeft = x;
530
503
  element.scrollTop = y;
531
504
  };
532
- var PSEUDO_BEFORE = ':before';
533
- var PSEUDO_AFTER = ':after';
534
- var PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';
535
- var PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';
536
- var PSEUDO_HIDE_ELEMENT_STYLE = "{\n content: \"\" !important;\n display: none !important;\n}";
537
- var createPseudoHideStyles = function (body) {
538
- createStyles(body, ".".concat(PSEUDO_HIDE_ELEMENT_CLASS_BEFORE).concat(PSEUDO_BEFORE).concat(PSEUDO_HIDE_ELEMENT_STYLE, "\n .").concat(PSEUDO_HIDE_ELEMENT_CLASS_AFTER).concat(PSEUDO_AFTER).concat(PSEUDO_HIDE_ELEMENT_STYLE));
505
+ const PSEUDO_BEFORE = ':before';
506
+ const PSEUDO_AFTER = ':after';
507
+ const PSEUDO_HIDE_ELEMENT_CLASS_BEFORE = '___html2canvas___pseudoelement_before';
508
+ const PSEUDO_HIDE_ELEMENT_CLASS_AFTER = '___html2canvas___pseudoelement_after';
509
+ const PSEUDO_HIDE_ELEMENT_STYLE = `{
510
+ content: "" !important;
511
+ display: none !important;
512
+ }`;
513
+ const createPseudoHideStyles = (body) => {
514
+ createStyles(body, `.${PSEUDO_HIDE_ELEMENT_CLASS_BEFORE}${PSEUDO_BEFORE}${PSEUDO_HIDE_ELEMENT_STYLE}
515
+ .${PSEUDO_HIDE_ELEMENT_CLASS_AFTER}${PSEUDO_AFTER}${PSEUDO_HIDE_ELEMENT_STYLE}`);
539
516
  };
540
- var createStyles = function (body, styles) {
541
- var document = body.ownerDocument;
517
+ const createStyles = (body, styles) => {
518
+ const document = body.ownerDocument;
542
519
  if (document) {
543
- var style = document.createElement('style');
520
+ const style = document.createElement('style');
544
521
  style.textContent = styles;
545
522
  body.appendChild(style);
546
523
  }
547
524
  };
548
- var addBase = function (targetELement, baseUri) {
549
- var _a;
550
- var baseNode = targetELement.ownerDocument.createElement('base');
525
+ const addBase = (targetELement, baseUri) => {
526
+ const baseNode = targetELement.ownerDocument.createElement('base');
551
527
  baseNode.href = baseUri;
552
- var headEle = targetELement.getElementsByTagName('head').item(0);
553
- headEle === null || headEle === void 0 ? void 0 : headEle.insertBefore(baseNode, (_a = headEle === null || headEle === void 0 ? void 0 : headEle.firstChild) !== null && _a !== void 0 ? _a : null);
528
+ const headEle = targetELement.getElementsByTagName('head').item(0);
529
+ headEle?.insertBefore(baseNode, headEle?.firstChild ?? null);
554
530
  };
555
531
  //# sourceMappingURL=document-cloner.js.map