html2canvas-pro 2.0.4 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -6
- package/dist/html2canvas-pro.esm.js +10103 -9993
- package/dist/html2canvas-pro.esm.js.map +1 -1
- package/dist/html2canvas-pro.js +10102 -9993
- package/dist/html2canvas-pro.js.map +1 -1
- package/dist/html2canvas-pro.min.js +5 -5
- package/dist/lib/config.js +3 -4
- package/dist/lib/core/bitwise.js +0 -1
- package/dist/lib/core/cache-storage.js +36 -50
- package/dist/lib/core/context.js +0 -1
- package/dist/lib/core/debugger.js +0 -1
- package/dist/lib/core/features.js +2 -3
- package/dist/lib/core/logger.js +0 -1
- package/dist/lib/core/origin-checker.js +0 -1
- package/dist/lib/core/performance-monitor.js +1 -24
- package/dist/lib/core/render-element.js +210 -0
- package/dist/lib/core/util.js +0 -1
- package/dist/lib/core/validator.js +0 -1
- package/dist/lib/css/index.js +149 -90
- package/dist/lib/css/layout/bounds.js +0 -1
- package/dist/lib/css/layout/text.js +0 -1
- package/dist/lib/css/{ITypeDescriptor.js → property-descriptor.js} +0 -1
- package/dist/lib/css/property-descriptors/background-clip.js +0 -1
- package/dist/lib/css/property-descriptors/background-color.js +0 -1
- package/dist/lib/css/property-descriptors/background-image.js +0 -1
- package/dist/lib/css/property-descriptors/background-origin.js +0 -1
- package/dist/lib/css/property-descriptors/background-position.js +0 -1
- package/dist/lib/css/property-descriptors/background-repeat.js +0 -1
- package/dist/lib/css/property-descriptors/background-size.js +0 -1
- package/dist/lib/css/property-descriptors/border-color.js +0 -1
- package/dist/lib/css/property-descriptors/border-radius.js +0 -1
- package/dist/lib/css/property-descriptors/border-style.js +0 -1
- package/dist/lib/css/property-descriptors/border-width.js +0 -1
- package/dist/lib/css/property-descriptors/box-shadow.js +0 -1
- package/dist/lib/css/property-descriptors/clip-path.js +0 -1
- package/dist/lib/css/property-descriptors/color.js +0 -1
- package/dist/lib/css/property-descriptors/content.js +0 -1
- package/dist/lib/css/property-descriptors/counter-increment.js +0 -1
- package/dist/lib/css/property-descriptors/counter-reset.js +0 -1
- package/dist/lib/css/property-descriptors/direction.js +0 -1
- package/dist/lib/css/property-descriptors/display.js +0 -1
- package/dist/lib/css/property-descriptors/duration.js +0 -1
- package/dist/lib/css/property-descriptors/float.js +0 -1
- package/dist/lib/css/property-descriptors/font-family.js +0 -1
- package/dist/lib/css/property-descriptors/font-size.js +0 -1
- package/dist/lib/css/property-descriptors/font-style.js +0 -1
- package/dist/lib/css/property-descriptors/font-variant.js +0 -1
- package/dist/lib/css/property-descriptors/font-weight.js +0 -1
- package/dist/lib/css/property-descriptors/image-rendering.js +0 -1
- package/dist/lib/css/property-descriptors/letter-spacing.js +0 -1
- package/dist/lib/css/property-descriptors/line-break.js +0 -1
- package/dist/lib/css/property-descriptors/line-height.js +0 -1
- package/dist/lib/css/property-descriptors/list-style-image.js +0 -1
- package/dist/lib/css/property-descriptors/list-style-position.js +0 -1
- package/dist/lib/css/property-descriptors/list-style-type.js +0 -1
- package/dist/lib/css/property-descriptors/margin.js +0 -1
- package/dist/lib/css/property-descriptors/mix-blend-mode.js +31 -0
- package/dist/lib/css/property-descriptors/object-fit.js +0 -1
- package/dist/lib/css/property-descriptors/opacity.js +0 -1
- package/dist/lib/css/property-descriptors/overflow-wrap.js +0 -1
- package/dist/lib/css/property-descriptors/overflow.js +0 -1
- package/dist/lib/css/property-descriptors/padding.js +0 -1
- package/dist/lib/css/property-descriptors/paint-order.js +0 -1
- package/dist/lib/css/property-descriptors/position.js +0 -1
- package/dist/lib/css/property-descriptors/quotes.js +0 -1
- package/dist/lib/css/property-descriptors/rotate.js +0 -1
- package/dist/lib/css/property-descriptors/text-align.js +0 -1
- package/dist/lib/css/property-descriptors/text-decoration-color.js +0 -1
- package/dist/lib/css/property-descriptors/text-decoration-line.js +0 -1
- package/dist/lib/css/property-descriptors/text-decoration-style.js +0 -1
- package/dist/lib/css/property-descriptors/text-decoration-thickness.js +0 -1
- package/dist/lib/css/property-descriptors/text-overflow.js +0 -1
- package/dist/lib/css/property-descriptors/text-shadow.js +0 -1
- package/dist/lib/css/property-descriptors/text-transform.js +0 -1
- package/dist/lib/css/property-descriptors/text-underline-offset.js +0 -1
- package/dist/lib/css/property-descriptors/transform-origin.js +0 -1
- package/dist/lib/css/property-descriptors/transform.js +0 -1
- package/dist/lib/css/property-descriptors/visibility.js +0 -1
- package/dist/lib/css/property-descriptors/webkit-line-clamp.js +0 -1
- package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +0 -1
- package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +0 -1
- package/dist/lib/css/property-descriptors/word-break.js +0 -1
- package/dist/lib/css/property-descriptors/writing-mode.js +0 -1
- package/dist/lib/css/property-descriptors/z-index.js +0 -1
- package/dist/lib/css/syntax/parser.js +0 -1
- package/dist/lib/css/syntax/tokenizer.js +14 -1
- package/dist/lib/css/{IPropertyDescriptor.js → type-descriptor.js} +0 -1
- package/dist/lib/css/types/angle.js +0 -1
- package/dist/lib/css/types/color-math.js +0 -1
- package/dist/lib/css/types/color-spaces/a98.js +0 -1
- package/dist/lib/css/types/color-spaces/p3.js +0 -1
- package/dist/lib/css/types/color-spaces/pro-photo.js +0 -1
- package/dist/lib/css/types/color-spaces/rec2020.js +0 -1
- package/dist/lib/css/types/color-spaces/srgb.js +0 -1
- package/dist/lib/css/types/color-utilities.js +0 -1
- package/dist/lib/css/types/color.js +0 -1
- package/dist/lib/css/types/functions/-prefix-linear-gradient.js +0 -1
- package/dist/lib/css/types/functions/-prefix-radial-gradient.js +0 -1
- package/dist/lib/css/types/functions/-webkit-gradient.js +0 -1
- package/dist/lib/css/types/functions/counter.js +0 -1
- package/dist/lib/css/types/functions/gradient.js +0 -1
- package/dist/lib/css/types/functions/linear-gradient.js +0 -1
- package/dist/lib/css/types/functions/radial-gradient.js +0 -1
- package/dist/lib/css/types/image.js +0 -1
- package/dist/lib/css/types/index.js +0 -1
- package/dist/lib/css/types/length-percentage.js +0 -1
- package/dist/lib/css/types/length.js +0 -1
- package/dist/lib/css/types/time.js +0 -1
- package/dist/lib/dom/document-cloner.js +27 -22
- package/dist/lib/dom/dom-normalizer.js +0 -1
- package/dist/lib/dom/element-container.js +7 -6
- package/dist/lib/dom/elements/li-element-container.js +0 -1
- package/dist/lib/dom/elements/ol-element-container.js +0 -1
- package/dist/lib/dom/elements/select-element-container.js +0 -1
- package/dist/lib/dom/elements/textarea-element-container.js +0 -1
- package/dist/lib/dom/node-parser.js +37 -53
- package/dist/lib/dom/node-type-guards.js +62 -25
- package/dist/lib/dom/replaced-elements/canvas-element-container.js +0 -1
- package/dist/lib/dom/replaced-elements/iframe-element-container.js +0 -1
- package/dist/lib/dom/replaced-elements/image-element-container.js +0 -1
- package/dist/lib/dom/replaced-elements/index.js +0 -1
- package/dist/lib/dom/replaced-elements/input-element-container.js +0 -1
- package/dist/lib/dom/replaced-elements/pseudo-elements.js +0 -1
- package/dist/lib/dom/replaced-elements/svg-element-container.js +0 -1
- package/dist/lib/dom/text-container.js +0 -1
- package/dist/lib/index.js +32 -210
- package/dist/lib/options.js +2 -0
- package/dist/lib/render/background.js +0 -1
- package/dist/lib/render/bezier-curve.js +0 -1
- package/dist/lib/render/border.js +0 -1
- package/dist/lib/render/bound-curves.js +0 -1
- package/dist/lib/render/box-sizing.js +0 -1
- package/dist/lib/render/canvas/background-renderer.js +8 -24
- package/dist/lib/render/canvas/border-renderer.js +0 -1
- package/dist/lib/render/canvas/canvas-path.js +25 -0
- package/dist/lib/render/canvas/canvas-renderer.js +28 -97
- package/dist/lib/render/canvas/effects-renderer.js +3 -1
- package/dist/lib/render/canvas/foreignobject-renderer.js +13 -17
- package/dist/lib/render/canvas/text-renderer.js +61 -117
- package/dist/lib/render/effects.js +11 -2
- package/dist/lib/render/font-metrics.js +0 -1
- package/dist/lib/render/object-fit.js +87 -0
- package/dist/lib/render/path.js +0 -1
- package/dist/lib/render/renderer-interface.js +0 -1
- package/dist/lib/render/stacking-context.js +16 -8
- package/dist/lib/render/vector.js +0 -1
- package/dist/types/core/cache-storage.d.ts +5 -6
- package/dist/types/core/performance-monitor.d.ts +0 -11
- package/dist/types/core/render-element.d.ts +3 -0
- package/dist/types/css/index.d.ts +3 -0
- package/dist/types/css/property-descriptors/background-clip.d.ts +1 -1
- package/dist/types/css/property-descriptors/background-color.d.ts +1 -1
- package/dist/types/css/property-descriptors/background-image.d.ts +1 -1
- package/dist/types/css/property-descriptors/background-origin.d.ts +1 -1
- package/dist/types/css/property-descriptors/background-position.d.ts +1 -1
- package/dist/types/css/property-descriptors/background-repeat.d.ts +1 -1
- package/dist/types/css/property-descriptors/background-size.d.ts +1 -1
- package/dist/types/css/property-descriptors/border-color.d.ts +1 -1
- package/dist/types/css/property-descriptors/border-radius.d.ts +1 -1
- package/dist/types/css/property-descriptors/border-style.d.ts +1 -1
- package/dist/types/css/property-descriptors/border-width.d.ts +1 -1
- package/dist/types/css/property-descriptors/box-shadow.d.ts +1 -1
- package/dist/types/css/property-descriptors/clip-path.d.ts +1 -1
- package/dist/types/css/property-descriptors/color.d.ts +1 -1
- package/dist/types/css/property-descriptors/content.d.ts +1 -1
- package/dist/types/css/property-descriptors/counter-increment.d.ts +1 -1
- package/dist/types/css/property-descriptors/counter-reset.d.ts +1 -1
- package/dist/types/css/property-descriptors/direction.d.ts +1 -1
- package/dist/types/css/property-descriptors/display.d.ts +1 -1
- package/dist/types/css/property-descriptors/duration.d.ts +1 -1
- package/dist/types/css/property-descriptors/float.d.ts +1 -1
- package/dist/types/css/property-descriptors/font-family.d.ts +1 -1
- package/dist/types/css/property-descriptors/font-size.d.ts +1 -1
- package/dist/types/css/property-descriptors/font-style.d.ts +1 -1
- package/dist/types/css/property-descriptors/font-variant.d.ts +1 -1
- package/dist/types/css/property-descriptors/font-weight.d.ts +1 -1
- package/dist/types/css/property-descriptors/image-rendering.d.ts +1 -1
- package/dist/types/css/property-descriptors/letter-spacing.d.ts +1 -1
- package/dist/types/css/property-descriptors/line-break.d.ts +1 -1
- package/dist/types/css/property-descriptors/line-height.d.ts +1 -1
- package/dist/types/css/property-descriptors/list-style-image.d.ts +1 -1
- package/dist/types/css/property-descriptors/list-style-position.d.ts +1 -1
- package/dist/types/css/property-descriptors/list-style-type.d.ts +1 -1
- package/dist/types/css/property-descriptors/margin.d.ts +1 -1
- package/dist/types/css/property-descriptors/mix-blend-mode.d.ts +21 -0
- package/dist/types/css/property-descriptors/object-fit.d.ts +1 -1
- package/dist/types/css/property-descriptors/opacity.d.ts +1 -1
- package/dist/types/css/property-descriptors/overflow-wrap.d.ts +1 -1
- package/dist/types/css/property-descriptors/overflow.d.ts +1 -1
- package/dist/types/css/property-descriptors/padding.d.ts +1 -1
- package/dist/types/css/property-descriptors/paint-order.d.ts +1 -1
- package/dist/types/css/property-descriptors/position.d.ts +1 -1
- package/dist/types/css/property-descriptors/quotes.d.ts +1 -1
- package/dist/types/css/property-descriptors/rotate.d.ts +1 -1
- package/dist/types/css/property-descriptors/text-align.d.ts +1 -1
- package/dist/types/css/property-descriptors/text-decoration-color.d.ts +1 -1
- package/dist/types/css/property-descriptors/text-decoration-line.d.ts +1 -1
- package/dist/types/css/property-descriptors/text-decoration-style.d.ts +1 -1
- package/dist/types/css/property-descriptors/text-decoration-thickness.d.ts +1 -1
- package/dist/types/css/property-descriptors/text-overflow.d.ts +1 -1
- package/dist/types/css/property-descriptors/text-shadow.d.ts +1 -1
- package/dist/types/css/property-descriptors/text-transform.d.ts +1 -1
- package/dist/types/css/property-descriptors/text-underline-offset.d.ts +1 -1
- package/dist/types/css/property-descriptors/transform-origin.d.ts +1 -1
- package/dist/types/css/property-descriptors/transform.d.ts +1 -1
- package/dist/types/css/property-descriptors/visibility.d.ts +1 -1
- package/dist/types/css/property-descriptors/webkit-line-clamp.d.ts +1 -1
- package/dist/types/css/property-descriptors/webkit-text-stroke-color.d.ts +1 -1
- package/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts +1 -1
- package/dist/types/css/property-descriptors/word-break.d.ts +1 -1
- package/dist/types/css/property-descriptors/writing-mode.d.ts +1 -1
- package/dist/types/css/property-descriptors/z-index.d.ts +1 -1
- package/dist/types/css/syntax/tokenizer.d.ts +5 -0
- package/dist/types/css/types/angle.d.ts +1 -1
- package/dist/types/css/types/color.d.ts +1 -1
- package/dist/types/css/types/image.d.ts +1 -1
- package/dist/types/css/types/time.d.ts +1 -1
- package/dist/types/dom/element-container.d.ts +4 -11
- package/dist/types/dom/node-parser.d.ts +2 -15
- package/dist/types/dom/node-type-guards.d.ts +21 -22
- package/dist/types/index.d.ts +28 -48
- package/dist/types/options.d.ts +51 -0
- package/dist/types/render/canvas/background-renderer.d.ts +0 -6
- package/dist/types/render/canvas/canvas-path.d.ts +3 -0
- package/dist/types/render/canvas/canvas-renderer.d.ts +4 -2
- package/dist/types/render/canvas/foreignobject-renderer.d.ts +2 -3
- package/dist/types/render/canvas/text-renderer.d.ts +5 -0
- package/dist/types/render/effects.d.ts +9 -1
- package/dist/types/render/object-fit.d.ts +18 -0
- package/package.json +44 -44
- package/demo/image-smoothing-demo.html +0 -256
- package/demo/refactoring-test.html +0 -602
- package/dist/lib/__tests__/index.js +0 -85
- package/dist/lib/__tests__/index.js.map +0 -1
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/core/__mocks__/cache-storage.js +0 -7
- package/dist/lib/core/__mocks__/cache-storage.js.map +0 -1
- package/dist/lib/core/__mocks__/context.js +0 -19
- package/dist/lib/core/__mocks__/context.js.map +0 -1
- package/dist/lib/core/__mocks__/features.js +0 -12
- package/dist/lib/core/__mocks__/features.js.map +0 -1
- package/dist/lib/core/__mocks__/logger.js +0 -16
- package/dist/lib/core/__mocks__/logger.js.map +0 -1
- package/dist/lib/core/__tests__/cache-storage.js +0 -225
- package/dist/lib/core/__tests__/cache-storage.js.map +0 -1
- package/dist/lib/core/__tests__/cache-storage.test.js +0 -158
- package/dist/lib/core/__tests__/cache-storage.test.js.map +0 -1
- package/dist/lib/core/__tests__/logger.js +0 -27
- package/dist/lib/core/__tests__/logger.js.map +0 -1
- package/dist/lib/core/__tests__/validator.js +0 -296
- package/dist/lib/core/__tests__/validator.js.map +0 -1
- package/dist/lib/core/bitwise.js.map +0 -1
- package/dist/lib/core/cache-storage.js.map +0 -1
- package/dist/lib/core/context.js.map +0 -1
- package/dist/lib/core/debugger.js.map +0 -1
- package/dist/lib/core/features.js.map +0 -1
- package/dist/lib/core/logger.js.map +0 -1
- package/dist/lib/core/origin-checker.js.map +0 -1
- package/dist/lib/core/performance-monitor.js.map +0 -1
- package/dist/lib/core/util.js.map +0 -1
- package/dist/lib/core/validator.js.map +0 -1
- package/dist/lib/css/IPropertyDescriptor.js.map +0 -1
- package/dist/lib/css/ITypeDescriptor.js.map +0 -1
- package/dist/lib/css/index.js.map +0 -1
- package/dist/lib/css/layout/__mocks__/bounds.js +0 -9
- package/dist/lib/css/layout/__mocks__/bounds.js.map +0 -1
- package/dist/lib/css/layout/bounds.js.map +0 -1
- package/dist/lib/css/layout/text.js.map +0 -1
- package/dist/lib/css/property-descriptors/__tests__/background-tests.js +0 -49
- package/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +0 -1
- package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js +0 -273
- package/dist/lib/css/property-descriptors/__tests__/clip-path.test.js.map +0 -1
- package/dist/lib/css/property-descriptors/__tests__/font-family.js +0 -19
- package/dist/lib/css/property-descriptors/__tests__/font-family.js.map +0 -1
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js +0 -143
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-integration.test.js.map +0 -1
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js +0 -167
- package/dist/lib/css/property-descriptors/__tests__/image-rendering-performance.test.js.map +0 -1
- package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js +0 -61
- package/dist/lib/css/property-descriptors/__tests__/image-rendering.test.js.map +0 -1
- package/dist/lib/css/property-descriptors/__tests__/paint-order.js +0 -66
- package/dist/lib/css/property-descriptors/__tests__/paint-order.js.map +0 -1
- package/dist/lib/css/property-descriptors/__tests__/text-shadow.js +0 -82
- package/dist/lib/css/property-descriptors/__tests__/text-shadow.js.map +0 -1
- package/dist/lib/css/property-descriptors/__tests__/transform-tests.js +0 -14
- package/dist/lib/css/property-descriptors/__tests__/transform-tests.js.map +0 -1
- package/dist/lib/css/property-descriptors/background-clip.js.map +0 -1
- package/dist/lib/css/property-descriptors/background-color.js.map +0 -1
- package/dist/lib/css/property-descriptors/background-image.js.map +0 -1
- package/dist/lib/css/property-descriptors/background-origin.js.map +0 -1
- package/dist/lib/css/property-descriptors/background-position.js.map +0 -1
- package/dist/lib/css/property-descriptors/background-repeat.js.map +0 -1
- package/dist/lib/css/property-descriptors/background-size.js.map +0 -1
- package/dist/lib/css/property-descriptors/border-color.js.map +0 -1
- package/dist/lib/css/property-descriptors/border-radius.js.map +0 -1
- package/dist/lib/css/property-descriptors/border-style.js.map +0 -1
- package/dist/lib/css/property-descriptors/border-width.js.map +0 -1
- package/dist/lib/css/property-descriptors/box-shadow.js.map +0 -1
- package/dist/lib/css/property-descriptors/clip-path.js.map +0 -1
- package/dist/lib/css/property-descriptors/color.js.map +0 -1
- package/dist/lib/css/property-descriptors/content.js.map +0 -1
- package/dist/lib/css/property-descriptors/counter-increment.js.map +0 -1
- package/dist/lib/css/property-descriptors/counter-reset.js.map +0 -1
- package/dist/lib/css/property-descriptors/direction.js.map +0 -1
- package/dist/lib/css/property-descriptors/display.js.map +0 -1
- package/dist/lib/css/property-descriptors/duration.js.map +0 -1
- package/dist/lib/css/property-descriptors/float.js.map +0 -1
- package/dist/lib/css/property-descriptors/font-family.js.map +0 -1
- package/dist/lib/css/property-descriptors/font-size.js.map +0 -1
- package/dist/lib/css/property-descriptors/font-style.js.map +0 -1
- package/dist/lib/css/property-descriptors/font-variant.js.map +0 -1
- package/dist/lib/css/property-descriptors/font-weight.js.map +0 -1
- package/dist/lib/css/property-descriptors/image-rendering.js.map +0 -1
- package/dist/lib/css/property-descriptors/letter-spacing.js.map +0 -1
- package/dist/lib/css/property-descriptors/line-break.js.map +0 -1
- package/dist/lib/css/property-descriptors/line-height.js.map +0 -1
- package/dist/lib/css/property-descriptors/list-style-image.js.map +0 -1
- package/dist/lib/css/property-descriptors/list-style-position.js.map +0 -1
- package/dist/lib/css/property-descriptors/list-style-type.js.map +0 -1
- package/dist/lib/css/property-descriptors/margin.js.map +0 -1
- package/dist/lib/css/property-descriptors/object-fit.js.map +0 -1
- package/dist/lib/css/property-descriptors/opacity.js.map +0 -1
- package/dist/lib/css/property-descriptors/overflow-wrap.js.map +0 -1
- package/dist/lib/css/property-descriptors/overflow.js.map +0 -1
- package/dist/lib/css/property-descriptors/padding.js.map +0 -1
- package/dist/lib/css/property-descriptors/paint-order.js.map +0 -1
- package/dist/lib/css/property-descriptors/position.js.map +0 -1
- package/dist/lib/css/property-descriptors/quotes.js.map +0 -1
- package/dist/lib/css/property-descriptors/rotate.js.map +0 -1
- package/dist/lib/css/property-descriptors/text-align.js.map +0 -1
- package/dist/lib/css/property-descriptors/text-decoration-color.js.map +0 -1
- package/dist/lib/css/property-descriptors/text-decoration-line.js.map +0 -1
- package/dist/lib/css/property-descriptors/text-decoration-style.js.map +0 -1
- package/dist/lib/css/property-descriptors/text-decoration-thickness.js.map +0 -1
- package/dist/lib/css/property-descriptors/text-overflow.js.map +0 -1
- package/dist/lib/css/property-descriptors/text-shadow.js.map +0 -1
- package/dist/lib/css/property-descriptors/text-transform.js.map +0 -1
- package/dist/lib/css/property-descriptors/text-underline-offset.js.map +0 -1
- package/dist/lib/css/property-descriptors/transform-origin.js.map +0 -1
- package/dist/lib/css/property-descriptors/transform.js.map +0 -1
- package/dist/lib/css/property-descriptors/visibility.js.map +0 -1
- package/dist/lib/css/property-descriptors/webkit-line-clamp.js.map +0 -1
- package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js.map +0 -1
- package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js.map +0 -1
- package/dist/lib/css/property-descriptors/word-break.js.map +0 -1
- package/dist/lib/css/property-descriptors/writing-mode.js.map +0 -1
- package/dist/lib/css/property-descriptors/z-index.js.map +0 -1
- package/dist/lib/css/syntax/__tests__/tokernizer-tests.js +0 -26
- package/dist/lib/css/syntax/__tests__/tokernizer-tests.js.map +0 -1
- package/dist/lib/css/syntax/parser.js.map +0 -1
- package/dist/lib/css/syntax/tokenizer.js.map +0 -1
- package/dist/lib/css/types/__tests__/color-tests.js +0 -111
- package/dist/lib/css/types/__tests__/color-tests.js.map +0 -1
- package/dist/lib/css/types/__tests__/image-tests.js +0 -215
- package/dist/lib/css/types/__tests__/image-tests.js.map +0 -1
- package/dist/lib/css/types/angle.js.map +0 -1
- package/dist/lib/css/types/color-math.js.map +0 -1
- package/dist/lib/css/types/color-spaces/a98.js.map +0 -1
- package/dist/lib/css/types/color-spaces/p3.js.map +0 -1
- package/dist/lib/css/types/color-spaces/pro-photo.js.map +0 -1
- package/dist/lib/css/types/color-spaces/rec2020.js.map +0 -1
- package/dist/lib/css/types/color-spaces/srgb.js.map +0 -1
- package/dist/lib/css/types/color-utilities.js.map +0 -1
- package/dist/lib/css/types/color.js.map +0 -1
- package/dist/lib/css/types/functions/-prefix-linear-gradient.js.map +0 -1
- package/dist/lib/css/types/functions/-prefix-radial-gradient.js.map +0 -1
- package/dist/lib/css/types/functions/-webkit-gradient.js.map +0 -1
- package/dist/lib/css/types/functions/__tests__/radial-gradient.js +0 -63
- package/dist/lib/css/types/functions/__tests__/radial-gradient.js.map +0 -1
- package/dist/lib/css/types/functions/counter.js.map +0 -1
- package/dist/lib/css/types/functions/gradient.js.map +0 -1
- package/dist/lib/css/types/functions/linear-gradient.js.map +0 -1
- package/dist/lib/css/types/functions/radial-gradient.js.map +0 -1
- package/dist/lib/css/types/image.js.map +0 -1
- package/dist/lib/css/types/index.js.map +0 -1
- package/dist/lib/css/types/length-percentage.js.map +0 -1
- package/dist/lib/css/types/length.js.map +0 -1
- package/dist/lib/css/types/time.js.map +0 -1
- package/dist/lib/dom/__mocks__/document-cloner.js +0 -23
- package/dist/lib/dom/__mocks__/document-cloner.js.map +0 -1
- package/dist/lib/dom/__tests__/dom-normalizer.test.js +0 -113
- package/dist/lib/dom/__tests__/dom-normalizer.test.js.map +0 -1
- package/dist/lib/dom/__tests__/element-container.test.js +0 -109
- package/dist/lib/dom/__tests__/element-container.test.js.map +0 -1
- package/dist/lib/dom/document-cloner.js.map +0 -1
- package/dist/lib/dom/dom-normalizer.js.map +0 -1
- package/dist/lib/dom/element-container.js.map +0 -1
- package/dist/lib/dom/elements/li-element-container.js.map +0 -1
- package/dist/lib/dom/elements/ol-element-container.js.map +0 -1
- package/dist/lib/dom/elements/select-element-container.js.map +0 -1
- package/dist/lib/dom/elements/textarea-element-container.js.map +0 -1
- package/dist/lib/dom/node-parser.js.map +0 -1
- package/dist/lib/dom/node-type-guards.js.map +0 -1
- package/dist/lib/dom/replaced-elements/canvas-element-container.js.map +0 -1
- package/dist/lib/dom/replaced-elements/iframe-element-container.js.map +0 -1
- package/dist/lib/dom/replaced-elements/image-element-container.js.map +0 -1
- package/dist/lib/dom/replaced-elements/index.js.map +0 -1
- package/dist/lib/dom/replaced-elements/input-element-container.js.map +0 -1
- package/dist/lib/dom/replaced-elements/pseudo-elements.js.map +0 -1
- package/dist/lib/dom/replaced-elements/svg-element-container.js.map +0 -1
- package/dist/lib/dom/text-container.js.map +0 -1
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/invariant.js +0 -10
- package/dist/lib/invariant.js.map +0 -1
- package/dist/lib/render/background.js.map +0 -1
- package/dist/lib/render/bezier-curve.js.map +0 -1
- package/dist/lib/render/border.js.map +0 -1
- package/dist/lib/render/bound-curves.js.map +0 -1
- package/dist/lib/render/box-sizing.js.map +0 -1
- package/dist/lib/render/canvas/__tests__/background-renderer.test.js +0 -65
- package/dist/lib/render/canvas/__tests__/background-renderer.test.js.map +0 -1
- package/dist/lib/render/canvas/__tests__/border-renderer.test.js +0 -23
- package/dist/lib/render/canvas/__tests__/border-renderer.test.js.map +0 -1
- package/dist/lib/render/canvas/__tests__/effects-renderer.test.js +0 -30
- package/dist/lib/render/canvas/__tests__/effects-renderer.test.js.map +0 -1
- package/dist/lib/render/canvas/__tests__/text-renderer.test.js +0 -402
- package/dist/lib/render/canvas/__tests__/text-renderer.test.js.map +0 -1
- package/dist/lib/render/canvas/background-renderer.js.map +0 -1
- package/dist/lib/render/canvas/border-renderer.js.map +0 -1
- package/dist/lib/render/canvas/canvas-renderer.js.map +0 -1
- package/dist/lib/render/canvas/effects-renderer.js.map +0 -1
- package/dist/lib/render/canvas/foreignobject-renderer.js.map +0 -1
- package/dist/lib/render/canvas/text-renderer.js.map +0 -1
- package/dist/lib/render/effects.js.map +0 -1
- package/dist/lib/render/font-metrics.js.map +0 -1
- package/dist/lib/render/path.js.map +0 -1
- package/dist/lib/render/renderer-interface.js.map +0 -1
- package/dist/lib/render/renderer.js +0 -11
- package/dist/lib/render/renderer.js.map +0 -1
- package/dist/lib/render/stacking-context.js.map +0 -1
- package/dist/lib/render/vector.js.map +0 -1
- package/dist/types/__tests__/index.d.ts +0 -1
- package/dist/types/core/__mocks__/cache-storage.d.ts +0 -2
- package/dist/types/core/__mocks__/context.d.ts +0 -9
- package/dist/types/core/__mocks__/features.d.ts +0 -8
- package/dist/types/core/__mocks__/logger.d.ts +0 -9
- package/dist/types/core/__tests__/cache-storage.d.ts +0 -1
- package/dist/types/core/__tests__/cache-storage.test.d.ts +0 -1
- package/dist/types/core/__tests__/logger.d.ts +0 -1
- package/dist/types/core/__tests__/validator.d.ts +0 -1
- package/dist/types/css/layout/__mocks__/bounds.d.ts +0 -2
- package/dist/types/css/property-descriptors/__tests__/background-tests.d.ts +0 -1
- package/dist/types/css/property-descriptors/__tests__/clip-path.test.d.ts +0 -1
- package/dist/types/css/property-descriptors/__tests__/font-family.d.ts +0 -1
- package/dist/types/css/property-descriptors/__tests__/image-rendering-integration.test.d.ts +0 -1
- package/dist/types/css/property-descriptors/__tests__/image-rendering-performance.test.d.ts +0 -1
- package/dist/types/css/property-descriptors/__tests__/image-rendering.test.d.ts +0 -1
- package/dist/types/css/property-descriptors/__tests__/paint-order.d.ts +0 -1
- package/dist/types/css/property-descriptors/__tests__/text-shadow.d.ts +0 -1
- package/dist/types/css/property-descriptors/__tests__/transform-tests.d.ts +0 -1
- package/dist/types/css/syntax/__tests__/tokernizer-tests.d.ts +0 -1
- package/dist/types/css/types/__tests__/color-tests.d.ts +0 -1
- package/dist/types/css/types/__tests__/image-tests.d.ts +0 -1
- package/dist/types/css/types/functions/__tests__/radial-gradient.d.ts +0 -1
- package/dist/types/dom/__mocks__/document-cloner.d.ts +0 -6
- package/dist/types/dom/__tests__/dom-normalizer.test.d.ts +0 -1
- package/dist/types/dom/__tests__/element-container.test.d.ts +0 -1
- package/dist/types/invariant.d.ts +0 -1
- package/dist/types/render/canvas/__tests__/background-renderer.test.d.ts +0 -1
- package/dist/types/render/canvas/__tests__/border-renderer.test.d.ts +0 -1
- package/dist/types/render/canvas/__tests__/effects-renderer.test.d.ts +0 -1
- package/dist/types/render/canvas/__tests__/text-renderer.test.d.ts +0 -1
- package/dist/types/render/renderer.d.ts +0 -7
- package/eslint.config.js +0 -35
- package/jest.config.cjs +0 -5
- package/karma.conf.cjs +0 -300
- /package/dist/types/css/{IPropertyDescriptor.d.ts → property-descriptor.d.ts} +0 -0
- /package/dist/types/css/{ITypeDescriptor.d.ts → type-descriptor.d.ts} +0 -0
|
@@ -1,44 +1,81 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* DOM Node Type Guards
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
|
+
* All DOM node type guards consolidated here to eliminate duplication
|
|
6
|
+
* and provide a single source of truth for node type checking.
|
|
5
7
|
*/
|
|
6
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.isCustomElement = exports.isOLElement = exports.isLIElement = exports.isHTMLElementNode = exports.isSVGElementNode = exports.isTextNode = exports.isElementNode = void 0;
|
|
8
|
-
|
|
9
|
-
* Check if node is an Element
|
|
10
|
-
*/
|
|
9
|
+
exports.canHavePseudoElements = exports.isCustomElement = exports.isOLElement = exports.isLIElement = exports.isSlotElement = exports.isSelectElement = exports.isTextareaElement = exports.isScriptElement = exports.isStyleElement = exports.isIFrameElement = exports.isImageElement = exports.isVideoElement = exports.isCanvasElement = exports.isBodyElement = exports.isSVGElement = exports.isHTMLElement = exports.isInputElement = exports.isHTMLElementNode = exports.isSVGElementNode = exports.isTextNode = exports.isElementNode = void 0;
|
|
10
|
+
// --- Generic node type guards ---
|
|
11
11
|
const isElementNode = (node) => node.nodeType === Node.ELEMENT_NODE;
|
|
12
12
|
exports.isElementNode = isElementNode;
|
|
13
|
-
/**
|
|
14
|
-
* Check if node is a Text node
|
|
15
|
-
*/
|
|
16
13
|
const isTextNode = (node) => node.nodeType === Node.TEXT_NODE;
|
|
17
14
|
exports.isTextNode = isTextNode;
|
|
18
|
-
/**
|
|
19
|
-
* Check if element is an SVG element
|
|
20
|
-
*/
|
|
21
15
|
const isSVGElementNode = (element) => typeof element.className === 'object';
|
|
22
16
|
exports.isSVGElementNode = isSVGElementNode;
|
|
23
|
-
/**
|
|
24
|
-
* Check if node is an HTML element
|
|
25
|
-
*/
|
|
26
17
|
const isHTMLElementNode = (node) => (0, exports.isElementNode)(node) && typeof node.style !== 'undefined' && !(0, exports.isSVGElementNode)(node);
|
|
27
18
|
exports.isHTMLElementNode = isHTMLElementNode;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
19
|
+
// --- Tag name based type guards ---
|
|
20
|
+
const isInputElement = (node) => node.tagName === 'INPUT';
|
|
21
|
+
exports.isInputElement = isInputElement;
|
|
22
|
+
const isHTMLElement = (node) => node.tagName === 'HTML';
|
|
23
|
+
exports.isHTMLElement = isHTMLElement;
|
|
24
|
+
const isSVGElement = (node) => node.tagName === 'svg';
|
|
25
|
+
exports.isSVGElement = isSVGElement;
|
|
26
|
+
const isBodyElement = (node) => node.tagName === 'BODY';
|
|
27
|
+
exports.isBodyElement = isBodyElement;
|
|
28
|
+
const isCanvasElement = (node) => node.tagName === 'CANVAS';
|
|
29
|
+
exports.isCanvasElement = isCanvasElement;
|
|
30
|
+
const isVideoElement = (node) => node.tagName === 'VIDEO';
|
|
31
|
+
exports.isVideoElement = isVideoElement;
|
|
32
|
+
const isImageElement = (node) => node.tagName === 'IMG';
|
|
33
|
+
exports.isImageElement = isImageElement;
|
|
34
|
+
const isIFrameElement = (node) => node.tagName === 'IFRAME';
|
|
35
|
+
exports.isIFrameElement = isIFrameElement;
|
|
36
|
+
const isStyleElement = (node) => node.tagName === 'STYLE';
|
|
37
|
+
exports.isStyleElement = isStyleElement;
|
|
38
|
+
const isScriptElement = (node) => node.tagName === 'SCRIPT';
|
|
39
|
+
exports.isScriptElement = isScriptElement;
|
|
40
|
+
const isTextareaElement = (node) => node.tagName === 'TEXTAREA';
|
|
41
|
+
exports.isTextareaElement = isTextareaElement;
|
|
42
|
+
const isSelectElement = (node) => node.tagName === 'SELECT';
|
|
43
|
+
exports.isSelectElement = isSelectElement;
|
|
44
|
+
const isSlotElement = (node) => node.tagName === 'SLOT';
|
|
45
|
+
exports.isSlotElement = isSlotElement;
|
|
31
46
|
const isLIElement = (node) => node.tagName === 'LI';
|
|
32
47
|
exports.isLIElement = isLIElement;
|
|
33
|
-
/**
|
|
34
|
-
* Check if node is an OL element
|
|
35
|
-
*/
|
|
36
48
|
const isOLElement = (node) => node.tagName === 'OL';
|
|
37
49
|
exports.isOLElement = isOLElement;
|
|
38
|
-
/**
|
|
39
|
-
* Check if element is a custom element
|
|
40
|
-
* Custom elements must have a hyphen and cannot be SVG elements
|
|
41
|
-
*/
|
|
42
50
|
const isCustomElement = (element) => !(0, exports.isSVGElementNode)(element) && element.tagName.indexOf('-') > 0;
|
|
43
51
|
exports.isCustomElement = isCustomElement;
|
|
44
|
-
|
|
52
|
+
const VOID_OR_REPLACED_TAGS = new Set([
|
|
53
|
+
'IMG',
|
|
54
|
+
'VIDEO',
|
|
55
|
+
'AUDIO',
|
|
56
|
+
'CANVAS',
|
|
57
|
+
'IFRAME',
|
|
58
|
+
'INPUT',
|
|
59
|
+
'TEXTAREA',
|
|
60
|
+
'SELECT',
|
|
61
|
+
'BR',
|
|
62
|
+
'HR',
|
|
63
|
+
'META',
|
|
64
|
+
'LINK',
|
|
65
|
+
'BASE',
|
|
66
|
+
'COL',
|
|
67
|
+
'SOURCE',
|
|
68
|
+
'TRACK',
|
|
69
|
+
'WBR',
|
|
70
|
+
'AREA',
|
|
71
|
+
'PARAM',
|
|
72
|
+
'EMBED',
|
|
73
|
+
'OBJECT'
|
|
74
|
+
]);
|
|
75
|
+
/**
|
|
76
|
+
* Check if an element can have ::before / ::after pseudo-elements.
|
|
77
|
+
* Per the CSS spec, replaced elements and void elements cannot have pseudo-elements.
|
|
78
|
+
* SVG elements also do not support pseudo-elements.
|
|
79
|
+
*/
|
|
80
|
+
const canHavePseudoElements = (element) => !(0, exports.isSVGElementNode)(element) && !VOID_OR_REPLACED_TAGS.has(element.tagName);
|
|
81
|
+
exports.canHavePseudoElements = canHavePseudoElements;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=pseudo-elements.js.map
|
package/dist/lib/index.js
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.IMAGE_RENDERING = exports.PerformanceMonitor = exports.createDefaultValidator = exports.Validator = exports.Html2CanvasConfig = exports.
|
|
4
|
-
const bounds_1 = require("./css/layout/bounds");
|
|
5
|
-
const color_1 = require("./css/types/color");
|
|
6
|
-
const color_utilities_1 = require("./css/types/color-utilities");
|
|
7
|
-
const document_cloner_1 = require("./dom/document-cloner");
|
|
8
|
-
const node_parser_1 = require("./dom/node-parser");
|
|
9
|
-
const canvas_renderer_1 = require("./render/canvas/canvas-renderer");
|
|
10
|
-
const foreignobject_renderer_1 = require("./render/canvas/foreignobject-renderer");
|
|
11
|
-
const context_1 = require("./core/context");
|
|
3
|
+
exports.IMAGE_RENDERING = exports.PerformanceMonitor = exports.createDefaultValidator = exports.Validator = exports.Html2CanvasConfig = exports.html2canvas = void 0;
|
|
12
4
|
const config_1 = require("./config");
|
|
13
5
|
Object.defineProperty(exports, "Html2CanvasConfig", { enumerable: true, get: function () { return config_1.Html2CanvasConfig; } });
|
|
14
6
|
const validator_1 = require("./core/validator");
|
|
@@ -16,228 +8,58 @@ Object.defineProperty(exports, "createDefaultValidator", { enumerable: true, get
|
|
|
16
8
|
Object.defineProperty(exports, "Validator", { enumerable: true, get: function () { return validator_1.Validator; } });
|
|
17
9
|
const performance_monitor_1 = require("./core/performance-monitor");
|
|
18
10
|
Object.defineProperty(exports, "PerformanceMonitor", { enumerable: true, get: function () { return performance_monitor_1.PerformanceMonitor; } });
|
|
11
|
+
const render_element_1 = require("./core/render-element");
|
|
19
12
|
/**
|
|
20
|
-
*
|
|
13
|
+
* Renders an HTML element to a `<canvas>` element.
|
|
21
14
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
15
|
+
* The function clones the target element and its subtree into a hidden iframe,
|
|
16
|
+
* resolves all computed styles, and paints the result onto a canvas —
|
|
17
|
+
* producing a visual snapshot of the DOM as it appears in the browser.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* import html2canvas from 'html2canvas-pro';
|
|
22
|
+
*
|
|
23
|
+
* const canvas = await html2canvas(document.body, {
|
|
24
|
+
* backgroundColor: '#ffffff',
|
|
25
|
+
* scale: 2,
|
|
26
|
+
* useCORS: true
|
|
27
|
+
* });
|
|
28
|
+
* document.body.appendChild(canvas);
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @param element - The root HTMLElement to render.
|
|
32
|
+
* @param options - Rendering options.
|
|
33
|
+
* @param config - Advanced configuration. In most cases this is auto-created;
|
|
34
|
+
* only pass it if you need to share a cache across multiple calls.
|
|
35
|
+
* @returns A promise that resolves to the rendered HTMLCanvasElement.
|
|
36
|
+
*
|
|
37
|
+
* @throws {Error} If the element is not attached to a document.
|
|
38
|
+
* @throws {DOMException} If an {@link Options.signal|AbortSignal} was provided and the operation was aborted.
|
|
26
39
|
*/
|
|
27
40
|
const html2canvas = (element, options = {}, config) => {
|
|
28
|
-
// Create configuration from element if not provided
|
|
29
41
|
const finalConfig = config ||
|
|
30
42
|
config_1.Html2CanvasConfig.fromElement(element, {
|
|
31
43
|
cspNonce: options.cspNonce,
|
|
32
44
|
cache: options.cache
|
|
33
45
|
});
|
|
34
|
-
return renderElement(element, options, finalConfig);
|
|
46
|
+
return (0, render_element_1.renderElement)(element, options, finalConfig);
|
|
35
47
|
};
|
|
36
48
|
exports.html2canvas = html2canvas;
|
|
37
49
|
/**
|
|
38
|
-
* Set CSP nonce for inline styles
|
|
39
|
-
*
|
|
50
|
+
* Set CSP nonce for inline styles.
|
|
51
|
+
*
|
|
52
|
+
* @deprecated Since 2.0.0. Pass `cspNonce` in options instead:
|
|
53
|
+
* `html2canvas(element, { cspNonce: '...' })`
|
|
40
54
|
*/
|
|
41
55
|
const setCspNonce = (nonce) => {
|
|
42
56
|
console.warn('[html2canvas-pro] setCspNonce is deprecated. ' +
|
|
43
57
|
'Pass cspNonce in options instead: html2canvas(element, { cspNonce: "..." })');
|
|
44
|
-
// For backward compatibility, set default config
|
|
45
58
|
if (typeof window !== 'undefined') {
|
|
46
59
|
(0, config_1.setDefaultConfig)(new config_1.Html2CanvasConfig({ window, cspNonce: nonce }));
|
|
47
60
|
}
|
|
48
61
|
};
|
|
49
|
-
exports.setCspNonce = setCspNonce;
|
|
50
62
|
html2canvas.setCspNonce = setCspNonce;
|
|
51
63
|
exports.default = html2canvas;
|
|
52
64
|
var image_rendering_1 = require("./css/property-descriptors/image-rendering");
|
|
53
65
|
Object.defineProperty(exports, "IMAGE_RENDERING", { enumerable: true, get: function () { return image_rendering_1.IMAGE_RENDERING; } });
|
|
54
|
-
/**
|
|
55
|
-
* Coerce number-like option values for backward compatibility (e.g. string "2" from form/query).
|
|
56
|
-
* Mutates opts in place; callers should avoid reusing the same options object if they rely on original types.
|
|
57
|
-
*/
|
|
58
|
-
const coerceNumberOptions = (opts) => {
|
|
59
|
-
const numKeys = [
|
|
60
|
-
'scale',
|
|
61
|
-
'width',
|
|
62
|
-
'height',
|
|
63
|
-
'imageTimeout',
|
|
64
|
-
'x',
|
|
65
|
-
'y',
|
|
66
|
-
'windowWidth',
|
|
67
|
-
'windowHeight',
|
|
68
|
-
'scrollX',
|
|
69
|
-
'scrollY'
|
|
70
|
-
];
|
|
71
|
-
numKeys.forEach((key) => {
|
|
72
|
-
const v = opts[key];
|
|
73
|
-
if (v !== undefined && v !== null && typeof v !== 'number') {
|
|
74
|
-
const n = Number(v);
|
|
75
|
-
if (!Number.isNaN(n)) {
|
|
76
|
-
opts[key] = n;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
};
|
|
81
|
-
const renderElement = async (element, opts, config) => {
|
|
82
|
-
coerceNumberOptions(opts);
|
|
83
|
-
// Input validation (unless explicitly skipped)
|
|
84
|
-
if (!opts.skipValidation) {
|
|
85
|
-
const validator = opts.validator || (0, validator_1.createDefaultValidator)();
|
|
86
|
-
// Validate element
|
|
87
|
-
const elementValidation = validator.validateElement(element);
|
|
88
|
-
if (!elementValidation.valid) {
|
|
89
|
-
throw new Error(elementValidation.error);
|
|
90
|
-
}
|
|
91
|
-
// Validate options
|
|
92
|
-
const optionsValidation = validator.validateOptions(opts);
|
|
93
|
-
if (!optionsValidation.valid) {
|
|
94
|
-
throw new Error(`Invalid options: ${optionsValidation.error}`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
if (!element || typeof element !== 'object') {
|
|
98
|
-
throw new Error('Invalid element provided as first argument');
|
|
99
|
-
}
|
|
100
|
-
const ownerDocument = element.ownerDocument;
|
|
101
|
-
if (!ownerDocument) {
|
|
102
|
-
throw new Error(`Element is not attached to a Document`);
|
|
103
|
-
}
|
|
104
|
-
const defaultView = ownerDocument.defaultView;
|
|
105
|
-
if (!defaultView) {
|
|
106
|
-
throw new Error(`Document is not attached to a Window`);
|
|
107
|
-
}
|
|
108
|
-
const resourceOptions = {
|
|
109
|
-
allowTaint: opts.allowTaint ?? false,
|
|
110
|
-
imageTimeout: opts.imageTimeout ?? 15000,
|
|
111
|
-
proxy: opts.proxy,
|
|
112
|
-
useCORS: opts.useCORS ?? false,
|
|
113
|
-
customIsSameOrigin: opts.customIsSameOrigin
|
|
114
|
-
};
|
|
115
|
-
const contextOptions = {
|
|
116
|
-
logging: opts.logging ?? true,
|
|
117
|
-
cache: opts.cache ?? config.cache,
|
|
118
|
-
...resourceOptions
|
|
119
|
-
};
|
|
120
|
-
// Fallbacks for minimal window (e.g. element-like mocks) so we don't get NaN
|
|
121
|
-
const DEFAULT_WINDOW_WIDTH = 800;
|
|
122
|
-
const DEFAULT_WINDOW_HEIGHT = 600;
|
|
123
|
-
const DEFAULT_SCROLL = 0;
|
|
124
|
-
const win = defaultView;
|
|
125
|
-
const windowOptions = {
|
|
126
|
-
windowWidth: opts.windowWidth ?? win.innerWidth ?? DEFAULT_WINDOW_WIDTH,
|
|
127
|
-
windowHeight: opts.windowHeight ?? win.innerHeight ?? DEFAULT_WINDOW_HEIGHT,
|
|
128
|
-
scrollX: opts.scrollX ?? win.pageXOffset ?? DEFAULT_SCROLL,
|
|
129
|
-
scrollY: opts.scrollY ?? win.pageYOffset ?? DEFAULT_SCROLL
|
|
130
|
-
};
|
|
131
|
-
const windowBounds = new bounds_1.Bounds(windowOptions.scrollX, windowOptions.scrollY, windowOptions.windowWidth, windowOptions.windowHeight);
|
|
132
|
-
const context = new context_1.Context(contextOptions, windowBounds, config);
|
|
133
|
-
// Initialize performance monitoring if enabled
|
|
134
|
-
const performanceMonitoring = opts.enablePerformanceMonitoring ?? opts.logging ?? false;
|
|
135
|
-
const perfMonitor = new performance_monitor_1.PerformanceMonitor(context, performanceMonitoring);
|
|
136
|
-
perfMonitor.start('total', {
|
|
137
|
-
width: windowOptions.windowWidth,
|
|
138
|
-
height: windowOptions.windowHeight
|
|
139
|
-
});
|
|
140
|
-
const foreignObjectRendering = opts.foreignObjectRendering ?? false;
|
|
141
|
-
const cloneOptions = {
|
|
142
|
-
allowTaint: opts.allowTaint ?? false,
|
|
143
|
-
onclone: opts.onclone,
|
|
144
|
-
ignoreElements: opts.ignoreElements,
|
|
145
|
-
iframeContainer: opts.iframeContainer,
|
|
146
|
-
inlineImages: foreignObjectRendering,
|
|
147
|
-
copyStyles: foreignObjectRendering,
|
|
148
|
-
cspNonce: opts.cspNonce ?? config.cspNonce
|
|
149
|
-
};
|
|
150
|
-
context.logger.debug(`Starting document clone with size ${windowBounds.width}x${windowBounds.height} scrolled to ${-windowBounds.left},${-windowBounds.top}`);
|
|
151
|
-
perfMonitor.start('clone');
|
|
152
|
-
const documentCloner = new document_cloner_1.DocumentCloner(context, element, cloneOptions);
|
|
153
|
-
const clonedElement = documentCloner.clonedReferenceElement;
|
|
154
|
-
if (!clonedElement) {
|
|
155
|
-
throw new Error('Unable to find element in cloned iframe');
|
|
156
|
-
}
|
|
157
|
-
const container = await documentCloner.toIFrame(ownerDocument, windowBounds);
|
|
158
|
-
perfMonitor.end('clone');
|
|
159
|
-
const { width, height, left, top } = (0, node_parser_1.isBodyElement)(clonedElement) || (0, node_parser_1.isHTMLElement)(clonedElement)
|
|
160
|
-
? (0, bounds_1.parseDocumentSize)(clonedElement.ownerDocument)
|
|
161
|
-
: (0, bounds_1.parseBounds)(context, clonedElement);
|
|
162
|
-
const backgroundColor = parseBackgroundColor(context, clonedElement, opts.backgroundColor);
|
|
163
|
-
const renderOptions = {
|
|
164
|
-
canvas: opts.canvas,
|
|
165
|
-
backgroundColor,
|
|
166
|
-
scale: opts.scale ?? defaultView.devicePixelRatio ?? 1,
|
|
167
|
-
x: (opts.x ?? 0) + left,
|
|
168
|
-
y: (opts.y ?? 0) + top,
|
|
169
|
-
width: opts.width ?? Math.ceil(width),
|
|
170
|
-
height: opts.height ?? Math.ceil(height),
|
|
171
|
-
imageSmoothing: opts.imageSmoothing,
|
|
172
|
-
imageSmoothingQuality: opts.imageSmoothingQuality
|
|
173
|
-
};
|
|
174
|
-
let canvas;
|
|
175
|
-
let root;
|
|
176
|
-
try {
|
|
177
|
-
if (foreignObjectRendering) {
|
|
178
|
-
context.logger.debug(`Document cloned, using foreign object rendering`);
|
|
179
|
-
perfMonitor.start('render-foreignobject');
|
|
180
|
-
const renderer = new foreignobject_renderer_1.ForeignObjectRenderer(context, renderOptions);
|
|
181
|
-
canvas = await renderer.render(clonedElement);
|
|
182
|
-
perfMonitor.end('render-foreignobject');
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
context.logger.debug(`Document cloned, element located at ${left},${top} with size ${width}x${height} using computed rendering`);
|
|
186
|
-
context.logger.debug(`Starting DOM parsing`);
|
|
187
|
-
perfMonitor.start('parse');
|
|
188
|
-
root = (0, node_parser_1.parseTree)(context, clonedElement);
|
|
189
|
-
perfMonitor.end('parse');
|
|
190
|
-
if (backgroundColor === root.styles.backgroundColor) {
|
|
191
|
-
root.styles.backgroundColor = color_1.COLORS.TRANSPARENT;
|
|
192
|
-
}
|
|
193
|
-
context.logger.debug(`Starting renderer for element at ${renderOptions.x},${renderOptions.y} with size ${renderOptions.width}x${renderOptions.height}`);
|
|
194
|
-
perfMonitor.start('render');
|
|
195
|
-
const renderer = new canvas_renderer_1.CanvasRenderer(context, renderOptions);
|
|
196
|
-
canvas = await renderer.render(root);
|
|
197
|
-
perfMonitor.end('render');
|
|
198
|
-
}
|
|
199
|
-
perfMonitor.start('cleanup');
|
|
200
|
-
if (opts.removeContainer ?? true) {
|
|
201
|
-
if (!document_cloner_1.DocumentCloner.destroy(container)) {
|
|
202
|
-
context.logger.error(`Cannot detach cloned iframe as it is not in the DOM anymore`);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
perfMonitor.end('cleanup');
|
|
206
|
-
perfMonitor.end('total');
|
|
207
|
-
context.logger.debug(`Finished rendering`);
|
|
208
|
-
// Log performance summary if monitoring is enabled
|
|
209
|
-
if (performanceMonitoring) {
|
|
210
|
-
perfMonitor.logSummary();
|
|
211
|
-
}
|
|
212
|
-
return canvas;
|
|
213
|
-
}
|
|
214
|
-
finally {
|
|
215
|
-
// Restore DOM modifications (animations, transforms) in cloned document
|
|
216
|
-
if (root) {
|
|
217
|
-
root.restoreTree();
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
};
|
|
221
|
-
const parseBackgroundColor = (context, element, backgroundColorOverride) => {
|
|
222
|
-
const ownerDocument = element.ownerDocument;
|
|
223
|
-
// http://www.w3.org/TR/css3-background/#special-backgrounds
|
|
224
|
-
const documentBackgroundColor = ownerDocument.documentElement
|
|
225
|
-
? (0, color_1.parseColor)(context, getComputedStyle(ownerDocument.documentElement).backgroundColor)
|
|
226
|
-
: color_1.COLORS.TRANSPARENT;
|
|
227
|
-
const bodyBackgroundColor = ownerDocument.body
|
|
228
|
-
? (0, color_1.parseColor)(context, getComputedStyle(ownerDocument.body).backgroundColor)
|
|
229
|
-
: color_1.COLORS.TRANSPARENT;
|
|
230
|
-
const defaultBackgroundColor = typeof backgroundColorOverride === 'string'
|
|
231
|
-
? (0, color_1.parseColor)(context, backgroundColorOverride)
|
|
232
|
-
: backgroundColorOverride === null
|
|
233
|
-
? color_1.COLORS.TRANSPARENT
|
|
234
|
-
: 0xffffffff;
|
|
235
|
-
return element === ownerDocument.documentElement
|
|
236
|
-
? (0, color_utilities_1.isTransparent)(documentBackgroundColor)
|
|
237
|
-
? (0, color_utilities_1.isTransparent)(bodyBackgroundColor)
|
|
238
|
-
? defaultBackgroundColor
|
|
239
|
-
: bodyBackgroundColor
|
|
240
|
-
: documentBackgroundColor
|
|
241
|
-
: defaultBackgroundColor;
|
|
242
|
-
};
|
|
243
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -18,4 +18,3 @@ const contentBox = (element) => {
|
|
|
18
18
|
return bounds.add(paddingLeft + styles.borderLeftWidth, paddingTop + styles.borderTopWidth, -(styles.borderRightWidth + styles.borderLeftWidth + paddingLeft + paddingRight), -(styles.borderTopWidth + styles.borderBottomWidth + paddingTop + paddingBottom));
|
|
19
19
|
};
|
|
20
20
|
exports.contentBox = contentBox;
|
|
21
|
-
//# sourceMappingURL=box-sizing.js.map
|
|
@@ -16,8 +16,8 @@ const background_1 = require("../background");
|
|
|
16
16
|
const gradient_1 = require("../../css/types/functions/gradient");
|
|
17
17
|
const length_percentage_1 = require("../../css/types/length-percentage");
|
|
18
18
|
const color_utilities_1 = require("../../css/types/color-utilities");
|
|
19
|
-
const bezier_curve_1 = require("../bezier-curve");
|
|
20
19
|
const image_rendering_1 = require("../../css/property-descriptors/image-rendering");
|
|
20
|
+
const canvas_path_1 = require("./canvas-path");
|
|
21
21
|
/**
|
|
22
22
|
* Background Renderer
|
|
23
23
|
*
|
|
@@ -87,6 +87,9 @@ class BackgroundRenderer {
|
|
|
87
87
|
canvas.width = width;
|
|
88
88
|
canvas.height = height;
|
|
89
89
|
const ctx = canvas.getContext('2d');
|
|
90
|
+
if (!ctx) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
90
93
|
const gradient = ctx.createLinearGradient(x0, y0, x1, y1);
|
|
91
94
|
(0, gradient_1.processColorStops)(backgroundImage.stops, lineLength || 1).forEach((colorStop) => gradient.addColorStop(colorStop.stop, (0, color_utilities_1.asString)(colorStop.color)));
|
|
92
95
|
ctx.fillStyle = gradient;
|
|
@@ -168,6 +171,9 @@ class BackgroundRenderer {
|
|
|
168
171
|
canvas.width = Math.max(1, width);
|
|
169
172
|
canvas.height = Math.max(1, height);
|
|
170
173
|
const ctx = canvas.getContext('2d');
|
|
174
|
+
if (!ctx) {
|
|
175
|
+
return image;
|
|
176
|
+
}
|
|
171
177
|
// Apply image smoothing based on CSS image-rendering property
|
|
172
178
|
if (imageRendering === image_rendering_1.IMAGE_RENDERING.PIXELATED || imageRendering === image_rendering_1.IMAGE_RENDERING.CRISP_EDGES) {
|
|
173
179
|
this.context.logger.debug(`Disabling image smoothing for background image due to CSS image-rendering`);
|
|
@@ -194,29 +200,7 @@ class BackgroundRenderer {
|
|
|
194
200
|
* @param paths - Array of path points
|
|
195
201
|
*/
|
|
196
202
|
path(paths) {
|
|
197
|
-
this.ctx
|
|
198
|
-
this.formatPath(paths);
|
|
199
|
-
this.ctx.closePath();
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Format path points into canvas path
|
|
203
|
-
*
|
|
204
|
-
* @param paths - Array of path points
|
|
205
|
-
*/
|
|
206
|
-
formatPath(paths) {
|
|
207
|
-
paths.forEach((point, index) => {
|
|
208
|
-
const start = (0, bezier_curve_1.isBezierCurve)(point) ? point.start : point;
|
|
209
|
-
if (index === 0) {
|
|
210
|
-
this.ctx.moveTo(start.x, start.y);
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
this.ctx.lineTo(start.x, start.y);
|
|
214
|
-
}
|
|
215
|
-
if ((0, bezier_curve_1.isBezierCurve)(point)) {
|
|
216
|
-
this.ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);
|
|
217
|
-
}
|
|
218
|
-
});
|
|
203
|
+
(0, canvas_path_1.createCanvasPath)(this.ctx, paths);
|
|
219
204
|
}
|
|
220
205
|
}
|
|
221
206
|
exports.BackgroundRenderer = BackgroundRenderer;
|
|
222
|
-
//# sourceMappingURL=background-renderer.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCanvasPath = exports.formatCanvasPath = void 0;
|
|
4
|
+
const bezier_curve_1 = require("../bezier-curve");
|
|
5
|
+
const formatCanvasPath = (ctx, paths) => {
|
|
6
|
+
paths.forEach((point, index) => {
|
|
7
|
+
const start = (0, bezier_curve_1.isBezierCurve)(point) ? point.start : point;
|
|
8
|
+
if (index === 0) {
|
|
9
|
+
ctx.moveTo(start.x, start.y);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
ctx.lineTo(start.x, start.y);
|
|
13
|
+
}
|
|
14
|
+
if ((0, bezier_curve_1.isBezierCurve)(point)) {
|
|
15
|
+
ctx.bezierCurveTo(point.startControl.x, point.startControl.y, point.endControl.x, point.endControl.y, point.end.x, point.end.y);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
exports.formatCanvasPath = formatCanvasPath;
|
|
20
|
+
const createCanvasPath = (ctx, paths) => {
|
|
21
|
+
ctx.beginPath();
|
|
22
|
+
(0, exports.formatCanvasPath)(ctx, paths);
|
|
23
|
+
ctx.closePath();
|
|
24
|
+
};
|
|
25
|
+
exports.createCanvasPath = createCanvasPath;
|