@ohos-ports/html2canvas-pro 0.0.0-stage → 2.3.2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +86 -2
- package/dist/html2canvas-pro.cjs +11191 -0
- package/dist/html2canvas-pro.cjs.map +1 -0
- package/dist/html2canvas-pro.esm.js +11182 -0
- package/dist/html2canvas-pro.esm.js.map +1 -0
- package/dist/html2canvas-pro.js +11196 -0
- package/dist/html2canvas-pro.js.map +1 -0
- package/dist/html2canvas-pro.min.js +10 -0
- package/dist/lib/config.js +49 -0
- package/dist/lib/core/abort-helper.js +20 -0
- package/dist/lib/core/background-parser.js +41 -0
- package/dist/lib/core/bitwise.js +5 -0
- package/dist/lib/core/cache-storage.js +268 -0
- package/dist/lib/core/config-assembler.js +88 -0
- package/dist/lib/core/constants.js +25 -0
- package/dist/lib/core/context.js +19 -0
- package/dist/lib/core/debugger.js +27 -0
- package/dist/lib/core/features.js +190 -0
- package/dist/lib/core/logger.js +56 -0
- package/dist/lib/core/lru-map.js +66 -0
- package/dist/lib/core/origin-checker.js +53 -0
- package/dist/lib/core/performance-monitor.js +185 -0
- package/dist/lib/core/render-element.js +132 -0
- package/dist/lib/core/util.js +4 -0
- package/dist/lib/core/validator.js +500 -0
- package/dist/lib/css/grouped/background-styles.js +36 -0
- package/dist/lib/css/grouped/border-styles.js +75 -0
- package/dist/lib/css/grouped/font-styles.js +93 -0
- package/dist/lib/css/grouped/layout-styles.js +127 -0
- package/dist/lib/css/index.js +330 -0
- package/dist/lib/css/layout/bounds.js +52 -0
- package/dist/lib/css/layout/text.js +133 -0
- package/dist/lib/css/property-descriptor.js +2 -0
- package/dist/lib/css/property-descriptors/background-blend-mode.js +41 -0
- package/dist/lib/css/property-descriptors/background-clip.js +23 -0
- package/dist/lib/css/property-descriptors/background-color.js +10 -0
- package/dist/lib/css/property-descriptors/background-image.js +24 -0
- package/dist/lib/css/property-descriptors/background-origin.js +23 -0
- package/dist/lib/css/property-descriptors/background-position.js +19 -0
- package/dist/lib/css/property-descriptors/background-repeat.js +33 -0
- package/dist/lib/css/property-descriptors/background-size.js +23 -0
- package/dist/lib/css/property-descriptors/border-color.js +14 -0
- package/dist/lib/css/property-descriptors/border-image-repeat.js +42 -0
- package/dist/lib/css/property-descriptors/border-image-slice.js +45 -0
- package/dist/lib/css/property-descriptors/border-image-source.js +22 -0
- package/dist/lib/css/property-descriptors/border-radius.js +15 -0
- package/dist/lib/css/property-descriptors/border-style.js +26 -0
- package/dist/lib/css/property-descriptors/border-width.js +20 -0
- package/dist/lib/css/property-descriptors/box-decoration-break.js +18 -0
- package/dist/lib/css/property-descriptors/box-shadow.js +54 -0
- package/dist/lib/css/property-descriptors/clip-path.js +189 -0
- package/dist/lib/css/property-descriptors/color.js +10 -0
- package/dist/lib/css/property-descriptors/content.js +19 -0
- package/dist/lib/css/property-descriptors/counter-increment.js +35 -0
- package/dist/lib/css/property-descriptors/counter-reset.js +18 -0
- package/dist/lib/css/property-descriptors/direction.js +18 -0
- package/dist/lib/css/property-descriptors/display.js +81 -0
- package/dist/lib/css/property-descriptors/duration.js +14 -0
- package/dist/lib/css/property-descriptors/filter.js +76 -0
- package/dist/lib/css/property-descriptors/float.js +22 -0
- package/dist/lib/css/property-descriptors/font-family.js +32 -0
- package/dist/lib/css/property-descriptors/font-size.js +10 -0
- package/dist/lib/css/property-descriptors/font-style.js +20 -0
- package/dist/lib/css/property-descriptors/font-variant-ligatures.js +34 -0
- package/dist/lib/css/property-descriptors/font-variant.js +13 -0
- package/dist/lib/css/property-descriptors/font-weight.js +25 -0
- package/dist/lib/css/property-descriptors/image-rendering.js +33 -0
- package/dist/lib/css/property-descriptors/letter-spacing.js +21 -0
- package/dist/lib/css/property-descriptors/line-break.js +23 -0
- package/dist/lib/css/property-descriptors/line-height.js +24 -0
- package/dist/lib/css/property-descriptors/list-style-image.js +17 -0
- package/dist/lib/css/property-descriptors/list-style-position.js +18 -0
- package/dist/lib/css/property-descriptors/list-style-type.js +122 -0
- package/dist/lib/css/property-descriptors/margin.js +13 -0
- package/dist/lib/css/property-descriptors/mix-blend-mode.js +31 -0
- package/dist/lib/css/property-descriptors/object-fit.js +28 -0
- package/dist/lib/css/property-descriptors/object-position.js +42 -0
- package/dist/lib/css/property-descriptors/opacity.js +16 -0
- package/dist/lib/css/property-descriptors/overflow-wrap.js +18 -0
- package/dist/lib/css/property-descriptors/overflow.js +27 -0
- package/dist/lib/css/property-descriptors/padding.js +14 -0
- package/dist/lib/css/property-descriptors/paint-order.js +33 -0
- package/dist/lib/css/property-descriptors/position.js +22 -0
- package/dist/lib/css/property-descriptors/quotes.js +41 -0
- package/dist/lib/css/property-descriptors/rotate.js +27 -0
- package/dist/lib/css/property-descriptors/text-align.js +21 -0
- package/dist/lib/css/property-descriptors/text-decoration-color.js +10 -0
- package/dist/lib/css/property-descriptors/text-decoration-line.js +28 -0
- package/dist/lib/css/property-descriptors/text-decoration-style.js +24 -0
- package/dist/lib/css/property-descriptors/text-decoration-thickness.js +26 -0
- package/dist/lib/css/property-descriptors/text-overflow.js +18 -0
- package/dist/lib/css/property-descriptors/text-shadow.js +46 -0
- package/dist/lib/css/property-descriptors/text-transform.js +20 -0
- package/dist/lib/css/property-descriptors/text-underline-offset.js +23 -0
- package/dist/lib/css/property-descriptors/transform-origin.js +24 -0
- package/dist/lib/css/property-descriptors/transform.js +57 -0
- package/dist/lib/css/property-descriptors/visibility.js +20 -0
- package/dist/lib/css/property-descriptors/webkit-line-clamp.js +26 -0
- package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +10 -0
- package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +16 -0
- package/dist/lib/css/property-descriptors/word-break.js +26 -0
- package/dist/lib/css/property-descriptors/writing-mode.js +28 -0
- package/dist/lib/css/property-descriptors/z-index.js +19 -0
- package/dist/lib/css/property-descriptors/zoom.js +18 -0
- package/dist/lib/css/syntax/parser.js +140 -0
- package/dist/lib/css/syntax/token-constants.js +214 -0
- package/dist/lib/css/syntax/token-singletons.js +36 -0
- package/dist/lib/css/syntax/token-types.js +10 -0
- package/dist/lib/css/syntax/tokenizer.js +502 -0
- package/dist/lib/css/type-descriptor.js +2 -0
- package/dist/lib/css/types/angle.js +80 -0
- package/dist/lib/css/types/color-math.js +25 -0
- package/dist/lib/css/types/color-spaces/a98.js +78 -0
- package/dist/lib/css/types/color-spaces/p3.js +86 -0
- package/dist/lib/css/types/color-spaces/pro-photo.js +83 -0
- package/dist/lib/css/types/color-spaces/rec2020.js +85 -0
- package/dist/lib/css/types/color-spaces/srgb.js +79 -0
- package/dist/lib/css/types/color-utilities.js +342 -0
- package/dist/lib/css/types/color.js +400 -0
- package/dist/lib/css/types/functions/-prefix-linear-gradient.js +32 -0
- package/dist/lib/css/types/functions/-prefix-radial-gradient.js +83 -0
- package/dist/lib/css/types/functions/-webkit-gradient.js +59 -0
- package/dist/lib/css/types/functions/counter.js +367 -0
- package/dist/lib/css/types/functions/gradient.js +163 -0
- package/dist/lib/css/types/functions/linear-gradient.js +27 -0
- package/dist/lib/css/types/functions/radial-gradient.js +90 -0
- package/dist/lib/css/types/functions/repeating-linear-gradient.js +9 -0
- package/dist/lib/css/types/image.js +62 -0
- package/dist/lib/css/types/index.js +2 -0
- package/dist/lib/css/types/length-percentage.js +197 -0
- package/dist/lib/css/types/length.js +5 -0
- package/dist/lib/css/types/safe-eval.js +80 -0
- package/dist/lib/css/types/time.js +17 -0
- package/dist/lib/dom/document-cloner.js +597 -0
- package/dist/lib/dom/dom-normalizer.js +115 -0
- package/dist/lib/dom/element-container.js +56 -0
- package/dist/lib/dom/elements/li-element-container.js +11 -0
- package/dist/lib/dom/elements/ol-element-container.js +12 -0
- package/dist/lib/dom/elements/select-element-container.js +12 -0
- package/dist/lib/dom/elements/textarea-element-container.js +11 -0
- package/dist/lib/dom/node-parser.js +112 -0
- package/dist/lib/dom/node-type-guards.js +81 -0
- package/dist/lib/dom/replaced-elements/canvas-element-container.js +13 -0
- package/dist/lib/dom/replaced-elements/iframe-element-container.js +38 -0
- package/dist/lib/dom/replaced-elements/image-element-container.js +14 -0
- package/dist/lib/dom/replaced-elements/index.js +2 -0
- package/dist/lib/dom/replaced-elements/input-element-container.js +89 -0
- package/dist/lib/dom/replaced-elements/svg-element-container.js +19 -0
- package/dist/lib/dom/slot-cloner.js +176 -0
- package/dist/lib/dom/text-container.js +35 -0
- package/dist/lib/index.js +49 -0
- package/dist/lib/options.js +2 -0
- package/dist/lib/render/background.js +188 -0
- package/dist/lib/render/bezier-curve.js +34 -0
- package/dist/lib/render/border.js +104 -0
- package/dist/lib/render/bound-curves.js +188 -0
- package/dist/lib/render/box-sizing.js +20 -0
- package/dist/lib/render/canvas/background-renderer.js +327 -0
- package/dist/lib/render/canvas/border-image-renderer.js +153 -0
- package/dist/lib/render/canvas/border-renderer.js +184 -0
- package/dist/lib/render/canvas/canvas-path.js +25 -0
- package/dist/lib/render/canvas/canvas-renderer.js +312 -0
- package/dist/lib/render/canvas/content-renderer.js +204 -0
- package/dist/lib/render/canvas/effects-renderer.js +171 -0
- package/dist/lib/render/canvas/font-utils.js +29 -0
- package/dist/lib/render/canvas/foreignobject-renderer.js +38 -0
- package/dist/lib/render/canvas/text/text-decoration-renderer.js +99 -0
- package/dist/lib/render/canvas/text-renderer.js +485 -0
- package/dist/lib/render/effects.js +231 -0
- package/dist/lib/render/font-metrics.js +53 -0
- package/dist/lib/render/object-fit.js +91 -0
- package/dist/lib/render/path.js +26 -0
- package/dist/lib/render/renderer-interface.js +2 -0
- package/dist/lib/render/stacking-context.js +340 -0
- package/dist/lib/render/vector.js +16 -0
- package/dist/types/config.d.ts +44 -0
- package/dist/types/core/abort-helper.d.ts +12 -0
- package/dist/types/core/background-parser.d.ts +16 -0
- package/dist/types/core/bitwise.d.ts +1 -0
- package/dist/types/core/cache-storage.d.ts +68 -0
- package/dist/types/core/config-assembler.d.ts +28 -0
- package/dist/types/core/constants.d.ts +22 -0
- package/dist/types/core/context.d.ts +22 -0
- package/dist/types/core/debugger.d.ts +8 -0
- package/dist/types/core/features.d.ts +12 -0
- package/dist/types/core/logger.d.ts +18 -0
- package/dist/types/core/lru-map.d.ts +37 -0
- package/dist/types/core/origin-checker.d.ts +33 -0
- package/dist/types/core/performance-monitor.d.ts +120 -0
- package/dist/types/core/render-element.d.ts +3 -0
- package/dist/types/core/util.d.ts +1 -0
- package/dist/types/core/validator.d.ts +130 -0
- package/dist/types/css/grouped/background-styles.d.ts +16 -0
- package/dist/types/css/grouped/border-styles.d.ts +31 -0
- package/dist/types/css/grouped/font-styles.d.ts +35 -0
- package/dist/types/css/grouped/layout-styles.d.ts +46 -0
- package/dist/types/css/index.d.ts +185 -0
- package/dist/types/css/layout/bounds.d.ts +14 -0
- package/dist/types/css/layout/text.d.ts +10 -0
- package/dist/types/css/property-descriptor.d.ts +40 -0
- package/dist/types/css/property-descriptors/background-blend-mode.d.ts +23 -0
- package/dist/types/css/property-descriptors/background-clip.d.ts +8 -0
- package/dist/types/css/property-descriptors/background-color.d.ts +2 -0
- package/dist/types/css/property-descriptors/background-image.d.ts +3 -0
- package/dist/types/css/property-descriptors/background-origin.d.ts +8 -0
- package/dist/types/css/property-descriptors/background-position.d.ts +5 -0
- package/dist/types/css/property-descriptors/background-repeat.d.ts +9 -0
- package/dist/types/css/property-descriptors/background-size.d.ts +11 -0
- package/dist/types/css/property-descriptors/border-color.d.ts +5 -0
- package/dist/types/css/property-descriptors/border-image-repeat.d.ts +12 -0
- package/dist/types/css/property-descriptors/border-image-slice.d.ts +10 -0
- package/dist/types/css/property-descriptors/border-image-source.d.ts +4 -0
- package/dist/types/css/property-descriptors/border-radius.d.ts +7 -0
- package/dist/types/css/property-descriptors/border-style.d.ts +12 -0
- package/dist/types/css/property-descriptors/border-width.d.ts +5 -0
- package/dist/types/css/property-descriptors/box-decoration-break.d.ts +6 -0
- package/dist/types/css/property-descriptors/box-shadow.d.ts +14 -0
- package/dist/types/css/property-descriptors/clip-path.d.ts +62 -0
- package/dist/types/css/property-descriptors/color.d.ts +2 -0
- package/dist/types/css/property-descriptors/content.d.ts +4 -0
- package/dist/types/css/property-descriptors/counter-increment.d.ts +10 -0
- package/dist/types/css/property-descriptors/counter-reset.d.ts +7 -0
- package/dist/types/css/property-descriptors/direction.d.ts +6 -0
- package/dist/types/css/property-descriptors/display.d.ts +35 -0
- package/dist/types/css/property-descriptors/duration.d.ts +2 -0
- package/dist/types/css/property-descriptors/filter.d.ts +3 -0
- package/dist/types/css/property-descriptors/float.d.ts +9 -0
- package/dist/types/css/property-descriptors/font-family.d.ts +4 -0
- package/dist/types/css/property-descriptors/font-size.d.ts +2 -0
- package/dist/types/css/property-descriptors/font-style.d.ts +7 -0
- package/dist/types/css/property-descriptors/font-variant-ligatures.d.ts +14 -0
- package/dist/types/css/property-descriptors/font-variant.d.ts +2 -0
- package/dist/types/css/property-descriptors/font-weight.d.ts +2 -0
- package/dist/types/css/property-descriptors/image-rendering.d.ts +8 -0
- package/dist/types/css/property-descriptors/letter-spacing.d.ts +2 -0
- package/dist/types/css/property-descriptors/line-break.d.ts +6 -0
- package/dist/types/css/property-descriptors/line-height.d.ts +4 -0
- package/dist/types/css/property-descriptors/list-style-image.d.ts +3 -0
- package/dist/types/css/property-descriptors/list-style-position.d.ts +6 -0
- package/dist/types/css/property-descriptors/list-style-type.d.ts +58 -0
- package/dist/types/css/property-descriptors/margin.d.ts +5 -0
- package/dist/types/css/property-descriptors/mix-blend-mode.d.ts +21 -0
- package/dist/types/css/property-descriptors/object-fit.d.ts +10 -0
- package/dist/types/css/property-descriptors/object-position.d.ts +4 -0
- package/dist/types/css/property-descriptors/opacity.d.ts +2 -0
- package/dist/types/css/property-descriptors/overflow-wrap.d.ts +6 -0
- package/dist/types/css/property-descriptors/overflow.d.ts +9 -0
- package/dist/types/css/property-descriptors/padding.d.ts +5 -0
- package/dist/types/css/property-descriptors/paint-order.d.ts +8 -0
- package/dist/types/css/property-descriptors/position.d.ts +9 -0
- package/dist/types/css/property-descriptors/quotes.d.ts +8 -0
- package/dist/types/css/property-descriptors/rotate.d.ts +3 -0
- package/dist/types/css/property-descriptors/text-align.d.ts +7 -0
- package/dist/types/css/property-descriptors/text-decoration-color.d.ts +2 -0
- package/dist/types/css/property-descriptors/text-decoration-line.d.ts +10 -0
- package/dist/types/css/property-descriptors/text-decoration-style.d.ts +9 -0
- package/dist/types/css/property-descriptors/text-decoration-thickness.d.ts +3 -0
- package/dist/types/css/property-descriptors/text-overflow.d.ts +6 -0
- package/dist/types/css/property-descriptors/text-shadow.d.ts +12 -0
- package/dist/types/css/property-descriptors/text-transform.d.ts +8 -0
- package/dist/types/css/property-descriptors/text-underline-offset.d.ts +3 -0
- package/dist/types/css/property-descriptors/transform-origin.d.ts +4 -0
- package/dist/types/css/property-descriptors/transform.d.ts +4 -0
- package/dist/types/css/property-descriptors/visibility.d.ts +7 -0
- package/dist/types/css/property-descriptors/webkit-line-clamp.d.ts +7 -0
- package/dist/types/css/property-descriptors/webkit-text-stroke-color.d.ts +2 -0
- package/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts +2 -0
- package/dist/types/css/property-descriptors/word-break.d.ts +7 -0
- package/dist/types/css/property-descriptors/writing-mode.d.ts +11 -0
- package/dist/types/css/property-descriptors/z-index.d.ts +7 -0
- package/dist/types/css/property-descriptors/zoom.d.ts +3 -0
- package/dist/types/css/syntax/parser.d.ts +34 -0
- package/dist/types/css/syntax/token-constants.d.ts +74 -0
- package/dist/types/css/syntax/token-singletons.d.ts +22 -0
- package/dist/types/css/syntax/token-types.d.ts +72 -0
- package/dist/types/css/syntax/tokenizer.d.ts +32 -0
- package/dist/types/css/type-descriptor.d.ts +6 -0
- package/dist/types/css/types/angle.d.ts +7 -0
- package/dist/types/css/types/color-math.d.ts +12 -0
- package/dist/types/css/types/color-spaces/a98.d.ts +39 -0
- package/dist/types/css/types/color-spaces/p3.d.ts +45 -0
- package/dist/types/css/types/color-spaces/pro-photo.d.ts +45 -0
- package/dist/types/css/types/color-spaces/rec2020.d.ts +45 -0
- package/dist/types/css/types/color-spaces/srgb.d.ts +38 -0
- package/dist/types/css/types/color-utilities.d.ts +107 -0
- package/dist/types/css/types/color.d.ts +8 -0
- package/dist/types/css/types/functions/-prefix-linear-gradient.d.ts +4 -0
- package/dist/types/css/types/functions/-prefix-radial-gradient.d.ts +4 -0
- package/dist/types/css/types/functions/-webkit-gradient.d.ts +4 -0
- package/dist/types/css/types/functions/counter.d.ts +10 -0
- package/dist/types/css/types/functions/gradient.d.ts +7 -0
- package/dist/types/css/types/functions/linear-gradient.d.ts +4 -0
- package/dist/types/css/types/functions/radial-gradient.d.ts +12 -0
- package/dist/types/css/types/functions/repeating-linear-gradient.d.ts +4 -0
- package/dist/types/css/types/image.d.ts +56 -0
- package/dist/types/css/types/index.d.ts +1 -0
- package/dist/types/css/types/length-percentage.d.ts +62 -0
- package/dist/types/css/types/length.d.ts +4 -0
- package/dist/types/css/types/safe-eval.d.ts +8 -0
- package/dist/types/css/types/time.d.ts +2 -0
- package/dist/types/dom/document-cloner.d.ts +57 -0
- package/dist/types/dom/dom-normalizer.d.ts +62 -0
- package/dist/types/dom/element-container.d.ts +31 -0
- package/dist/types/dom/elements/li-element-container.d.ts +6 -0
- package/dist/types/dom/elements/ol-element-container.d.ts +7 -0
- package/dist/types/dom/elements/select-element-container.d.ts +6 -0
- package/dist/types/dom/elements/textarea-element-container.d.ts +6 -0
- package/dist/types/dom/node-parser.d.ts +3 -0
- package/dist/types/dom/node-type-guards.d.ts +32 -0
- package/dist/types/dom/replaced-elements/canvas-element-container.d.ts +8 -0
- package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +14 -0
- package/dist/types/dom/replaced-elements/image-element-container.d.ts +8 -0
- package/dist/types/dom/replaced-elements/index.d.ts +4 -0
- package/dist/types/dom/replaced-elements/input-element-container.d.ts +14 -0
- package/dist/types/dom/replaced-elements/svg-element-container.d.ts +8 -0
- package/dist/types/dom/slot-cloner.d.ts +66 -0
- package/dist/types/dom/text-container.d.ts +8 -0
- package/dist/types/index.d.ts +36 -0
- package/dist/types/options.d.ts +62 -0
- package/dist/types/render/background.d.ts +16 -0
- package/dist/types/render/bezier-curve.d.ts +14 -0
- package/dist/types/render/border.d.ts +6 -0
- package/dist/types/render/bound-curves.d.ts +32 -0
- package/dist/types/render/box-sizing.d.ts +4 -0
- package/dist/types/render/canvas/background-renderer.d.ts +94 -0
- package/dist/types/render/canvas/border-image-renderer.d.ts +18 -0
- package/dist/types/render/canvas/border-renderer.d.ts +67 -0
- package/dist/types/render/canvas/canvas-path.d.ts +3 -0
- package/dist/types/render/canvas/canvas-renderer.d.ts +60 -0
- package/dist/types/render/canvas/content-renderer.d.ts +43 -0
- package/dist/types/render/canvas/effects-renderer.d.ts +90 -0
- package/dist/types/render/canvas/font-utils.d.ts +19 -0
- package/dist/types/render/canvas/foreignobject-renderer.d.ts +10 -0
- package/dist/types/render/canvas/text/text-decoration-renderer.d.ts +18 -0
- package/dist/types/render/canvas/text-renderer.d.ts +103 -0
- package/dist/types/render/effects.d.ts +112 -0
- package/dist/types/render/font-metrics.d.ts +11 -0
- package/dist/types/render/object-fit.d.ts +19 -0
- package/dist/types/render/path.d.ts +13 -0
- package/dist/types/render/renderer-interface.d.ts +28 -0
- package/dist/types/render/stacking-context.d.ts +49 -0
- package/dist/types/render/vector.d.ts +9 -0
- package/package.json +139 -4
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Context } from '../core/context';
|
|
2
|
+
/** Options subset needed by SlotCloner */
|
|
3
|
+
export interface SlotClonerOptions {
|
|
4
|
+
ignoreElements?: (element: Element) => boolean;
|
|
5
|
+
copyStyles: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Exported for reuse in document-cloner.ts */
|
|
8
|
+
export declare const IGNORE_ATTRIBUTE = "data-html2canvas-ignore";
|
|
9
|
+
/**
|
|
10
|
+
* Handles shadow DOM child cloning, slot assignment, and light DOM traversal.
|
|
11
|
+
* Extracted from DocumentCloner to reduce file size and improve separation of concerns.
|
|
12
|
+
*/
|
|
13
|
+
export declare class SlotCloner {
|
|
14
|
+
private readonly cloneNodeFn;
|
|
15
|
+
private readonly options;
|
|
16
|
+
private readonly context;
|
|
17
|
+
constructor(cloneNodeFn: (node: Node, copyStyles: boolean) => Node, options: SlotClonerOptions, context: Context);
|
|
18
|
+
appendChildNode(clone: HTMLElement | SVGElement, child: Node, copyStyles: boolean): void;
|
|
19
|
+
/**
|
|
20
|
+
* Clone child nodes from source element to clone element.
|
|
21
|
+
* Handles shadow DOM, slots, and light DOM appropriately.
|
|
22
|
+
*/
|
|
23
|
+
cloneChildNodes(node: Element, clone: HTMLElement | SVGElement, copyStyles: boolean): void;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a child node should be cloned based on filtering rules.
|
|
26
|
+
* Filters out: scripts, ignored elements, and optionally styles.
|
|
27
|
+
*/
|
|
28
|
+
private shouldCloneChild;
|
|
29
|
+
/**
|
|
30
|
+
* Check if a style element should be cloned based on copyStyles option.
|
|
31
|
+
*/
|
|
32
|
+
private shouldCloneStyleElement;
|
|
33
|
+
/**
|
|
34
|
+
* Safely append a cloned child to a target, applying all filtering rules.
|
|
35
|
+
*/
|
|
36
|
+
private safeAppendClonedChild;
|
|
37
|
+
/**
|
|
38
|
+
* Clone assigned nodes from a slot element to the target.
|
|
39
|
+
*/
|
|
40
|
+
private cloneAssignedNodes;
|
|
41
|
+
/**
|
|
42
|
+
* Clone fallback content from a slot element when no nodes are assigned.
|
|
43
|
+
*/
|
|
44
|
+
private cloneSlotFallbackContent;
|
|
45
|
+
/**
|
|
46
|
+
* Handle cloning of a slot element, including assigned nodes or fallback content.
|
|
47
|
+
*/
|
|
48
|
+
private cloneSlotElement;
|
|
49
|
+
/**
|
|
50
|
+
* Clone shadow DOM children to the target shadow root.
|
|
51
|
+
*/
|
|
52
|
+
private cloneShadowDOMChildren;
|
|
53
|
+
/**
|
|
54
|
+
* Clone light DOM children to the target element.
|
|
55
|
+
*/
|
|
56
|
+
private cloneLightDOMChildren;
|
|
57
|
+
/**
|
|
58
|
+
* Clone slot element as light DOM when shadow root creation failed.
|
|
59
|
+
*/
|
|
60
|
+
private cloneSlotElementAsLightDOM;
|
|
61
|
+
/**
|
|
62
|
+
* Clone shadow DOM content as light DOM when shadow root creation failed.
|
|
63
|
+
* This is a fallback mechanism to ensure content is not lost.
|
|
64
|
+
*/
|
|
65
|
+
private cloneShadowDOMAsLightDOM;
|
|
66
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CSSParsedDeclaration } from '../css/index';
|
|
2
|
+
import { TextBounds } from '../css/layout/text';
|
|
3
|
+
import { Context } from '../core/context';
|
|
4
|
+
export declare class TextContainer {
|
|
5
|
+
text: string;
|
|
6
|
+
textBounds: TextBounds[];
|
|
7
|
+
constructor(context: Context, node: Text, styles: CSSParsedDeclaration);
|
|
8
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Html2CanvasConfig, type ConfigOptions } from './config';
|
|
2
|
+
import { createDefaultValidator, Validator, type ValidationResult } from './core/validator';
|
|
3
|
+
import { PerformanceMonitor } from './core/performance-monitor';
|
|
4
|
+
import type { Options } from './options';
|
|
5
|
+
export type { Options };
|
|
6
|
+
/**
|
|
7
|
+
* Renders an HTML element to a `<canvas>` element.
|
|
8
|
+
*
|
|
9
|
+
* The function clones the target element and its subtree into a hidden iframe,
|
|
10
|
+
* resolves all computed styles, and paints the result onto a canvas —
|
|
11
|
+
* producing a visual snapshot of the DOM as it appears in the browser.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import html2canvas from 'html2canvas-pro';
|
|
16
|
+
*
|
|
17
|
+
* const canvas = await html2canvas(document.body, {
|
|
18
|
+
* backgroundColor: '#ffffff',
|
|
19
|
+
* scale: 2,
|
|
20
|
+
* useCORS: true
|
|
21
|
+
* });
|
|
22
|
+
* document.body.appendChild(canvas);
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @param element - The root HTMLElement to render.
|
|
26
|
+
* @param options - Rendering options.
|
|
27
|
+
* @param config - Advanced configuration. In most cases this is auto-created;
|
|
28
|
+
* only pass it if you need to share a cache across multiple calls.
|
|
29
|
+
* @returns A promise that resolves to the rendered HTMLCanvasElement.
|
|
30
|
+
*
|
|
31
|
+
* @throws {Error} If the element is not attached to a document.
|
|
32
|
+
* @throws {DOMException} If an {@link Options.signal|AbortSignal} was provided and the operation was aborted.
|
|
33
|
+
*/
|
|
34
|
+
declare const html2canvas: (element: HTMLElement, options?: Partial<Options>, config?: Html2CanvasConfig) => Promise<HTMLCanvasElement>;
|
|
35
|
+
export default html2canvas;
|
|
36
|
+
export { html2canvas, Html2CanvasConfig, ConfigOptions, Validator, ValidationResult, createDefaultValidator, PerformanceMonitor };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { CloneOptions, WindowOptions } from './dom/document-cloner';
|
|
2
|
+
import { RenderOptions } from './render/canvas/canvas-renderer';
|
|
3
|
+
import { ContextOptions } from './core/context';
|
|
4
|
+
import { Validator } from './core/validator';
|
|
5
|
+
/**
|
|
6
|
+
* Options passed to {@link html2canvas}.
|
|
7
|
+
*
|
|
8
|
+
* Combines clone, window, render, and context configuration into a single
|
|
9
|
+
* options object. All properties are optional.
|
|
10
|
+
*/
|
|
11
|
+
export type Options = CloneOptions & WindowOptions & RenderOptions & ContextOptions & {
|
|
12
|
+
/** Background color for the resulting canvas. Use `null` for transparent. */
|
|
13
|
+
backgroundColor: string | null;
|
|
14
|
+
/** Use foreignObject rendering (SVG-based) instead of the default Canvas 2D pipeline. */
|
|
15
|
+
foreignObjectRendering: boolean;
|
|
16
|
+
/** Whether to remove the cloned iframe after rendering. @default true */
|
|
17
|
+
removeContainer?: boolean;
|
|
18
|
+
/** CSP nonce for inline style elements. */
|
|
19
|
+
cspNonce?: string;
|
|
20
|
+
/** Custom input validator. */
|
|
21
|
+
validator?: Validator;
|
|
22
|
+
/** Skip pre-render validation of element and options. */
|
|
23
|
+
skipValidation?: boolean;
|
|
24
|
+
/** Enable performance monitoring and log a timing summary. */
|
|
25
|
+
enablePerformanceMonitoring?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* An AbortSignal that can be used to cancel an in-progress render.
|
|
28
|
+
* When the signal is aborted, the returned promise rejects with an
|
|
29
|
+
* `AbortError` DOMException.
|
|
30
|
+
*/
|
|
31
|
+
signal?: AbortSignal;
|
|
32
|
+
/**
|
|
33
|
+
* Enable/disable image smoothing (anti-aliasing) globally.
|
|
34
|
+
* - `false`: Pixel-perfect rendering for pixel art, sprites, and retro graphics
|
|
35
|
+
* - `true`: Smooth rendering for photos and high-quality images
|
|
36
|
+
* - CSS `image-rendering` property on individual elements takes precedence
|
|
37
|
+
* @default true (browser default)
|
|
38
|
+
*/
|
|
39
|
+
imageSmoothing?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Image smoothing quality level when imageSmoothing is enabled.
|
|
42
|
+
* - `'low'`: Faster, lower quality (good for preview)
|
|
43
|
+
* - `'medium'`: Balanced (default in most browsers)
|
|
44
|
+
* - `'high'`: Slower, best quality (good for final export)
|
|
45
|
+
*
|
|
46
|
+
* Browser support: Chrome 54+, Firefox 94+, Safari 17+
|
|
47
|
+
* Falls back gracefully in older browsers.
|
|
48
|
+
* @default browser default (usually 'low' or 'medium')
|
|
49
|
+
*/
|
|
50
|
+
imageSmoothingQuality?: 'low' | 'medium' | 'high';
|
|
51
|
+
/**
|
|
52
|
+
* Called when a resource fails to load (image, font, iframe, etc.).
|
|
53
|
+
* The render continues — this is a notification hook, not an abort.
|
|
54
|
+
*/
|
|
55
|
+
onError?: (error: Error) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Called at key milestones during the render pipeline.
|
|
58
|
+
* `phase` is one of: 'clone', 'parse', 'layout', 'render'.
|
|
59
|
+
* `progress` is 0..100 percentage estimate.
|
|
60
|
+
*/
|
|
61
|
+
onProgress?: (phase: string, progress: number) => void;
|
|
62
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Bounds } from '../css/layout/bounds';
|
|
2
|
+
import { BACKGROUND_ORIGIN } from '../css/property-descriptors/background-origin';
|
|
3
|
+
import { ElementContainer } from '../dom/element-container';
|
|
4
|
+
import { BackgroundSizeInfo } from '../css/property-descriptors/background-size';
|
|
5
|
+
import { Vector } from './vector';
|
|
6
|
+
import { BACKGROUND_REPEAT } from '../css/property-descriptors/background-repeat';
|
|
7
|
+
import { CSSValue } from '../css/syntax/parser';
|
|
8
|
+
import { Path } from './path';
|
|
9
|
+
import { BACKGROUND_CLIP } from '../css/property-descriptors/background-clip';
|
|
10
|
+
export declare const calculateBackgroundPositioningArea: (backgroundOrigin: BACKGROUND_ORIGIN, element: ElementContainer) => Bounds;
|
|
11
|
+
export declare const calculateBackgroundPaintingArea: (backgroundClip: BACKGROUND_CLIP, element: ElementContainer) => Bounds;
|
|
12
|
+
export declare const calculateBackgroundRendering: (container: ElementContainer, index: number, intrinsicSize: [number | null, number | null, number | null]) => [Path[], number, number, number, number];
|
|
13
|
+
export declare const isAuto: (token: CSSValue) => boolean;
|
|
14
|
+
export declare const calculateBackgroundSize: (size: BackgroundSizeInfo[], [intrinsicWidth, intrinsicHeight, intrinsicProportion]: [number | null, number | null, number | null], bounds: Bounds) => [number, number];
|
|
15
|
+
export declare const getBackgroundValueForIndex: <T>(values: T[], index: number) => T;
|
|
16
|
+
export declare const calculateBackgroundRepeatPath: (repeat: BACKGROUND_REPEAT, [x, y]: [number, number], [width, height]: [number, number], backgroundPositioningArea: Bounds, backgroundPaintingArea: Bounds) => [Vector, Vector, Vector, Vector];
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Vector } from './vector';
|
|
2
|
+
import { IPath, PathType, Path } from './path';
|
|
3
|
+
export declare class BezierCurve implements IPath {
|
|
4
|
+
type: PathType;
|
|
5
|
+
start: Vector;
|
|
6
|
+
startControl: Vector;
|
|
7
|
+
endControl: Vector;
|
|
8
|
+
end: Vector;
|
|
9
|
+
constructor(start: Vector, startControl: Vector, endControl: Vector, end: Vector);
|
|
10
|
+
subdivide(t: number, firstHalf: boolean): BezierCurve;
|
|
11
|
+
add(deltaX: number, deltaY: number): BezierCurve;
|
|
12
|
+
reverse(): BezierCurve;
|
|
13
|
+
}
|
|
14
|
+
export declare const isBezierCurve: (path: Path) => path is BezierCurve;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Path } from './path';
|
|
2
|
+
import { BoundCurves } from './bound-curves';
|
|
3
|
+
export declare const parsePathForBorder: (curves: BoundCurves, borderSide: number) => Path[];
|
|
4
|
+
export declare const parsePathForBorderDoubleOuter: (curves: BoundCurves, borderSide: number) => Path[];
|
|
5
|
+
export declare const parsePathForBorderDoubleInner: (curves: BoundCurves, borderSide: number) => Path[];
|
|
6
|
+
export declare const parsePathForBorderStroke: (curves: BoundCurves, borderSide: number) => Path[];
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ElementContainer } from '../dom/element-container';
|
|
2
|
+
import { Path } from './path';
|
|
3
|
+
export declare class BoundCurves {
|
|
4
|
+
readonly topLeftBorderDoubleOuterBox: Path;
|
|
5
|
+
readonly topRightBorderDoubleOuterBox: Path;
|
|
6
|
+
readonly bottomRightBorderDoubleOuterBox: Path;
|
|
7
|
+
readonly bottomLeftBorderDoubleOuterBox: Path;
|
|
8
|
+
readonly topLeftBorderDoubleInnerBox: Path;
|
|
9
|
+
readonly topRightBorderDoubleInnerBox: Path;
|
|
10
|
+
readonly bottomRightBorderDoubleInnerBox: Path;
|
|
11
|
+
readonly bottomLeftBorderDoubleInnerBox: Path;
|
|
12
|
+
readonly topLeftBorderStroke: Path;
|
|
13
|
+
readonly topRightBorderStroke: Path;
|
|
14
|
+
readonly bottomRightBorderStroke: Path;
|
|
15
|
+
readonly bottomLeftBorderStroke: Path;
|
|
16
|
+
readonly topLeftBorderBox: Path;
|
|
17
|
+
readonly topRightBorderBox: Path;
|
|
18
|
+
readonly bottomRightBorderBox: Path;
|
|
19
|
+
readonly bottomLeftBorderBox: Path;
|
|
20
|
+
readonly topLeftPaddingBox: Path;
|
|
21
|
+
readonly topRightPaddingBox: Path;
|
|
22
|
+
readonly bottomRightPaddingBox: Path;
|
|
23
|
+
readonly bottomLeftPaddingBox: Path;
|
|
24
|
+
readonly topLeftContentBox: Path;
|
|
25
|
+
readonly topRightContentBox: Path;
|
|
26
|
+
readonly bottomRightContentBox: Path;
|
|
27
|
+
readonly bottomLeftContentBox: Path;
|
|
28
|
+
constructor(element: ElementContainer);
|
|
29
|
+
}
|
|
30
|
+
export declare const calculateBorderBoxPath: (curves: BoundCurves) => Path[];
|
|
31
|
+
export declare const calculateContentBoxPath: (curves: BoundCurves) => Path[];
|
|
32
|
+
export declare const calculatePaddingBoxPath: (curves: BoundCurves) => Path[];
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering of element backgrounds including:
|
|
5
|
+
* - Background colors
|
|
6
|
+
* - Background images (URL)
|
|
7
|
+
* - Linear gradients
|
|
8
|
+
* - Radial gradients
|
|
9
|
+
* - Background patterns and repeats
|
|
10
|
+
*/
|
|
11
|
+
import { Context } from '../../core/context';
|
|
12
|
+
import { ElementContainer } from '../../dom/element-container';
|
|
13
|
+
/**
|
|
14
|
+
* Dependencies required for BackgroundRenderer
|
|
15
|
+
*/
|
|
16
|
+
export interface BackgroundRendererDependencies {
|
|
17
|
+
ctx: CanvasRenderingContext2D;
|
|
18
|
+
context: Context;
|
|
19
|
+
canvas: HTMLCanvasElement;
|
|
20
|
+
options: {
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
scale: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Background Renderer
|
|
28
|
+
*
|
|
29
|
+
* Specialized renderer for element backgrounds.
|
|
30
|
+
* Extracted from CanvasRenderer to improve code organization and maintainability.
|
|
31
|
+
*/
|
|
32
|
+
export declare class BackgroundRenderer {
|
|
33
|
+
private readonly ctx;
|
|
34
|
+
private readonly context;
|
|
35
|
+
private readonly canvas;
|
|
36
|
+
/**
|
|
37
|
+
* Instance-level LRU cache for background-image patterns.
|
|
38
|
+
* CanvasPatterns are tied to the rendering context and must not be
|
|
39
|
+
* shared across different render passes. This cache lives for the
|
|
40
|
+
* duration of one html2canvas() call.
|
|
41
|
+
*/
|
|
42
|
+
private readonly patternCache;
|
|
43
|
+
constructor(deps: BackgroundRendererDependencies);
|
|
44
|
+
/**
|
|
45
|
+
* Render background images for a container
|
|
46
|
+
* Supports URL images, linear gradients, and radial gradients
|
|
47
|
+
*
|
|
48
|
+
* @param container - Element container with background styles
|
|
49
|
+
*/
|
|
50
|
+
renderBackgroundImage(container: ElementContainer): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Render a URL-based background image
|
|
53
|
+
*/
|
|
54
|
+
private renderBackgroundURLImage;
|
|
55
|
+
/**
|
|
56
|
+
* Render a repeating linear gradient background.
|
|
57
|
+
* Renders one cycle of the gradient to a pattern canvas, then fills
|
|
58
|
+
* the background area using createPattern('repeat').
|
|
59
|
+
*/
|
|
60
|
+
private renderRepeatingLinearGradient;
|
|
61
|
+
/**
|
|
62
|
+
* Render a linear gradient background
|
|
63
|
+
*/
|
|
64
|
+
private renderLinearGradient;
|
|
65
|
+
/**
|
|
66
|
+
* Render a radial gradient background
|
|
67
|
+
*/
|
|
68
|
+
private renderRadialGradient;
|
|
69
|
+
/**
|
|
70
|
+
* Render a repeating pattern with offset
|
|
71
|
+
*
|
|
72
|
+
* @param path - Path to fill
|
|
73
|
+
* @param pattern - Canvas pattern or gradient
|
|
74
|
+
* @param offsetX - X offset for pattern
|
|
75
|
+
* @param offsetY - Y offset for pattern
|
|
76
|
+
*/
|
|
77
|
+
private renderRepeat;
|
|
78
|
+
/**
|
|
79
|
+
* Resize an image to target dimensions
|
|
80
|
+
*
|
|
81
|
+
* @param image - Source image
|
|
82
|
+
* @param width - Target width
|
|
83
|
+
* @param height - Target height
|
|
84
|
+
* @param imageRendering - CSS image-rendering property value
|
|
85
|
+
* @returns Resized canvas or original image
|
|
86
|
+
*/
|
|
87
|
+
private resizeImage;
|
|
88
|
+
/**
|
|
89
|
+
* Create a canvas path from path array
|
|
90
|
+
*
|
|
91
|
+
* @param paths - Array of path points
|
|
92
|
+
*/
|
|
93
|
+
private path;
|
|
94
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Border Image Renderer
|
|
3
|
+
*
|
|
4
|
+
* Renders CSS border-image using 9-slice scaling.
|
|
5
|
+
* The source image is divided into 9 regions (4 corners, 4 edges, 1 center)
|
|
6
|
+
* based on border-image-slice values, then each region is drawn to the
|
|
7
|
+
* corresponding area of the element's border box.
|
|
8
|
+
*/
|
|
9
|
+
import { BorderImageSlice } from '../../css/property-descriptors/border-image-slice';
|
|
10
|
+
import { BorderImageRepeat } from '../../css/property-descriptors/border-image-repeat';
|
|
11
|
+
import { Bounds } from '../../css/layout/bounds';
|
|
12
|
+
export declare class BorderImageRenderer {
|
|
13
|
+
private readonly ctx;
|
|
14
|
+
constructor(ctx: CanvasRenderingContext2D);
|
|
15
|
+
renderBorderImage(bounds: Bounds, image: HTMLImageElement, slice: BorderImageSlice, repeat: BorderImageRepeat, borderTopWidth: number, borderRightWidth: number, borderBottomWidth: number, borderLeftWidth: number): void;
|
|
16
|
+
private drawRegion;
|
|
17
|
+
private drawRepeatedEdge;
|
|
18
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Border Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering of element borders including:
|
|
5
|
+
* - Solid borders
|
|
6
|
+
* - Double borders
|
|
7
|
+
* - Dashed borders
|
|
8
|
+
* - Dotted borders
|
|
9
|
+
*/
|
|
10
|
+
import { Color } from '../../css/types/color';
|
|
11
|
+
import { BoundCurves } from '../bound-curves';
|
|
12
|
+
import { BORDER_STYLE } from '../../css/property-descriptors/border-style';
|
|
13
|
+
import { Path } from '../path';
|
|
14
|
+
/**
|
|
15
|
+
* Dependencies required for BorderRenderer
|
|
16
|
+
*/
|
|
17
|
+
export interface BorderRendererDependencies {
|
|
18
|
+
ctx: CanvasRenderingContext2D;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Path creation callbacks
|
|
22
|
+
* The main CanvasRenderer retains path() and formatPath() methods,
|
|
23
|
+
* so we inject them as callbacks to avoid duplication
|
|
24
|
+
*/
|
|
25
|
+
export interface PathCallbacks {
|
|
26
|
+
path(paths: Path[]): void;
|
|
27
|
+
formatPath(paths: Path[]): void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Border Renderer
|
|
31
|
+
*
|
|
32
|
+
* Specialized renderer for element borders.
|
|
33
|
+
* Extracted from CanvasRenderer to improve code organization and maintainability.
|
|
34
|
+
*/
|
|
35
|
+
export declare class BorderRenderer {
|
|
36
|
+
private readonly ctx;
|
|
37
|
+
private pathCallbacks;
|
|
38
|
+
constructor(deps: BorderRendererDependencies, pathCallbacks: PathCallbacks);
|
|
39
|
+
/**
|
|
40
|
+
* Render a solid border
|
|
41
|
+
*
|
|
42
|
+
* @param color - Border color
|
|
43
|
+
* @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
|
|
44
|
+
* @param curvePoints - Border curve points
|
|
45
|
+
*/
|
|
46
|
+
renderSolidBorder(color: Color, side: number, curvePoints: BoundCurves): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Render a double border
|
|
49
|
+
* Falls back to solid border if width is too small
|
|
50
|
+
*
|
|
51
|
+
* @param color - Border color
|
|
52
|
+
* @param width - Border width
|
|
53
|
+
* @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
|
|
54
|
+
* @param curvePoints - Border curve points
|
|
55
|
+
*/
|
|
56
|
+
renderDoubleBorder(color: Color, width: number, side: number, curvePoints: BoundCurves): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Render a dashed or dotted border
|
|
59
|
+
*
|
|
60
|
+
* @param color - Border color
|
|
61
|
+
* @param width - Border width
|
|
62
|
+
* @param side - Border side (0=top, 1=right, 2=bottom, 3=left)
|
|
63
|
+
* @param curvePoints - Border curve points
|
|
64
|
+
* @param style - Border style (DASHED or DOTTED)
|
|
65
|
+
*/
|
|
66
|
+
renderDashedDottedBorder(color: Color, width: number, side: number, curvePoints: BoundCurves, style: BORDER_STYLE): Promise<void>;
|
|
67
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ElementPaint, StackingContext } from '../stacking-context';
|
|
2
|
+
import { Color } from '../../css/types/color';
|
|
3
|
+
import { ElementContainer } from '../../dom/element-container';
|
|
4
|
+
import { Path } from '../path';
|
|
5
|
+
import { BoundCurves } from '../bound-curves';
|
|
6
|
+
import { ReplacedElementContainer } from '../../dom/replaced-elements';
|
|
7
|
+
import { Context } from '../../core/context';
|
|
8
|
+
export type RenderConfigurations = RenderOptions & {
|
|
9
|
+
backgroundColor: Color | null;
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
/**
|
|
12
|
+
* Enable/disable image smoothing (anti-aliasing).
|
|
13
|
+
* When disabled, images are rendered with pixel-perfect sharpness (no interpolation).
|
|
14
|
+
* CSS `image-rendering` property on individual elements takes precedence.
|
|
15
|
+
* @default browser default (usually true)
|
|
16
|
+
*/
|
|
17
|
+
imageSmoothing?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Image smoothing quality level when imageSmoothing is enabled.
|
|
20
|
+
* Higher quality may be slower for large images.
|
|
21
|
+
* Only supported in modern browsers (Chrome 54+, Firefox 94+, Safari 17+).
|
|
22
|
+
* Falls back gracefully in older browsers.
|
|
23
|
+
* @default browser default
|
|
24
|
+
*/
|
|
25
|
+
imageSmoothingQuality?: 'low' | 'medium' | 'high';
|
|
26
|
+
};
|
|
27
|
+
export interface RenderOptions {
|
|
28
|
+
scale: number;
|
|
29
|
+
canvas?: HTMLCanvasElement;
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
width: number;
|
|
33
|
+
height: number;
|
|
34
|
+
}
|
|
35
|
+
export declare class CanvasRenderer {
|
|
36
|
+
canvas: HTMLCanvasElement;
|
|
37
|
+
ctx: CanvasRenderingContext2D;
|
|
38
|
+
private readonly context;
|
|
39
|
+
private readonly options;
|
|
40
|
+
private readonly backgroundRenderer;
|
|
41
|
+
private readonly borderRenderer;
|
|
42
|
+
private readonly borderImageRenderer;
|
|
43
|
+
private readonly effectsRenderer;
|
|
44
|
+
private readonly textRenderer;
|
|
45
|
+
constructor(context: Context, options: RenderConfigurations);
|
|
46
|
+
renderStack(stack: StackingContext): Promise<void>;
|
|
47
|
+
renderNode(paint: ElementPaint): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Helper method to render text with paint order support
|
|
50
|
+
* Reduces code duplication in line-clamp and normal rendering
|
|
51
|
+
*/
|
|
52
|
+
renderReplacedElement(container: ReplacedElementContainer, curves: BoundCurves, image: HTMLImageElement | HTMLCanvasElement): void;
|
|
53
|
+
renderNodeContent(paint: ElementPaint): Promise<void>;
|
|
54
|
+
renderStackContent(stack: StackingContext): Promise<void>;
|
|
55
|
+
mask(paths: Path[]): void;
|
|
56
|
+
path(paths: Path[]): void;
|
|
57
|
+
formatPath(paths: Path[]): void;
|
|
58
|
+
renderNodeBackgroundAndBorders(paint: ElementPaint): Promise<void>;
|
|
59
|
+
render(element: ElementContainer): Promise<HTMLCanvasElement>;
|
|
60
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ElementPaint } from '../stacking-context';
|
|
2
|
+
import { ReplacedElementContainer } from '../../dom/replaced-elements';
|
|
3
|
+
import { ElementContainer } from '../../dom/element-container';
|
|
4
|
+
import { BoundCurves } from '../bound-curves';
|
|
5
|
+
import { Vector } from '../vector';
|
|
6
|
+
import { Context } from '../../core/context';
|
|
7
|
+
import { TextRenderer } from './text-renderer';
|
|
8
|
+
import { Color } from '../../css/types/color';
|
|
9
|
+
import { CSSParsedDeclaration } from '../../css/index';
|
|
10
|
+
/**
|
|
11
|
+
* Factory type for creating an iframe canvas renderer — avoids circular import
|
|
12
|
+
* from canvas-renderer.ts which in turn imports content-renderer.ts.
|
|
13
|
+
*/
|
|
14
|
+
type IframeRendererFactory = (context: Context, options: {
|
|
15
|
+
scale: number;
|
|
16
|
+
backgroundColor: Color | null;
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
}) => {
|
|
22
|
+
render: (element: ElementContainer) => Promise<HTMLCanvasElement>;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Render replaced elements: Image, Canvas, SVG, IFrame.
|
|
26
|
+
*/
|
|
27
|
+
export declare function renderReplacedElements(ctx: CanvasRenderingContext2D, context: Context, options: {
|
|
28
|
+
scale: number;
|
|
29
|
+
backgroundColor: Color | null;
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
width: number;
|
|
33
|
+
height: number;
|
|
34
|
+
}, iframeRendererFactory: IframeRendererFactory, container: ElementContainer, curves: BoundCurves, styles: CSSParsedDeclaration, renderReplacedElementFn: (container: ReplacedElementContainer, curves: BoundCurves, image: HTMLImageElement | HTMLCanvasElement) => void): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Render form element content: checkbox, radio, text input.
|
|
37
|
+
*/
|
|
38
|
+
export declare function renderFormElements(ctx: CanvasRenderingContext2D, textRenderer: TextRenderer, pathFn: (paths: Vector[]) => void, container: ElementContainer, styles: CSSParsedDeclaration): void;
|
|
39
|
+
/**
|
|
40
|
+
* Render list-item marker (image or text).
|
|
41
|
+
*/
|
|
42
|
+
export declare function renderListMarker(ctx: CanvasRenderingContext2D, context: Context, textRenderer: TextRenderer, paint: ElementPaint, container: ElementContainer, styles: CSSParsedDeclaration): Promise<void>;
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effects Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles rendering effects including:
|
|
5
|
+
* - Opacity effects
|
|
6
|
+
* - Transform effects (matrix transformations)
|
|
7
|
+
* - Clip effects (overflow / border-radius clipping via Path[])
|
|
8
|
+
* - Clip-path effects (CSS clip-path shapes: inset, circle, ellipse, polygon, path)
|
|
9
|
+
* - Blend effects (mix-blend-mode)
|
|
10
|
+
* - Filter effects (CSS filter functions)
|
|
11
|
+
*/
|
|
12
|
+
import { IElementEffect } from '../effects';
|
|
13
|
+
import { Path } from '../path';
|
|
14
|
+
/**
|
|
15
|
+
* Dependencies required for EffectsRenderer
|
|
16
|
+
*/
|
|
17
|
+
export interface EffectsRendererDependencies {
|
|
18
|
+
ctx: CanvasRenderingContext2D;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Path callback for clip effects
|
|
22
|
+
*/
|
|
23
|
+
export interface EffectsPathCallback {
|
|
24
|
+
path(paths: Path[]): void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Effects Renderer
|
|
28
|
+
*
|
|
29
|
+
* Manages rendering effects stack including opacity, transforms, and clipping.
|
|
30
|
+
* Extracted from CanvasRenderer to improve code organization and maintainability.
|
|
31
|
+
*
|
|
32
|
+
* ## Save/restore optimisation
|
|
33
|
+
*
|
|
34
|
+
* Canvas `save()` / `restore()` snapshot and restore the entire canvas state
|
|
35
|
+
* (transform matrix, clip region, compositing mode, filter, shadow, …) which
|
|
36
|
+
* is relatively expensive. The old implementation called `save()` / `restore()`
|
|
37
|
+
* for every single effect unconditionally.
|
|
38
|
+
*
|
|
39
|
+
* This implementation does a **batch pre-scan** before applying effects:
|
|
40
|
+
*
|
|
41
|
+
* | Effect type | Modifies | Reversible? | Needs save? |
|
|
42
|
+
* |--------------------|----------------------|---------------|-------------|
|
|
43
|
+
* | TransformEffect | transform matrix | ❌ irreversible | **YES** |
|
|
44
|
+
* | ClipEffect | clip region | ❌ cumulative | **YES** |
|
|
45
|
+
* | ClipPathEffect | clip region | ❌ cumulative | **YES** |
|
|
46
|
+
* | OpacityEffect | globalAlpha | ✅ scalar | NO |
|
|
47
|
+
* | BlendEffect | globalCompositeOp | ✅ scalar | NO |
|
|
48
|
+
* | FilterEffect | filter + shadow | ✅ string+vec | NO |
|
|
49
|
+
*
|
|
50
|
+
* When the batch contains *only* lightweight effects (opacity / blend / filter)
|
|
51
|
+
* we skip `save()` entirely and manually reset properties on pop.
|
|
52
|
+
*
|
|
53
|
+
* When the batch contains at least one heavyweight effect (transform / clip /
|
|
54
|
+
* clip-path) we call `save()` **once** before the first heavyweight effect and
|
|
55
|
+
* `restore()` **once** when that effect is popped.
|
|
56
|
+
*/
|
|
57
|
+
export declare class EffectsRenderer {
|
|
58
|
+
private readonly ctx;
|
|
59
|
+
private readonly pathCallback;
|
|
60
|
+
private readonly activeEffects;
|
|
61
|
+
/** Whether a canvas state save was performed for the current batch. */
|
|
62
|
+
private didSave;
|
|
63
|
+
/** Index (0-based, from start of activeEffects array) of the last
|
|
64
|
+
* heavyweight effect in the batch — the one whose pop triggers
|
|
65
|
+
* restore(). Set to -1 when no save was performed. */
|
|
66
|
+
private saveAtDepth;
|
|
67
|
+
constructor(deps: EffectsRendererDependencies, pathCallback: EffectsPathCallback);
|
|
68
|
+
/**
|
|
69
|
+
* Apply multiple effects.
|
|
70
|
+
* Clears existing effects and applies new ones.
|
|
71
|
+
*/
|
|
72
|
+
applyEffects(effects: IElementEffect[]): void;
|
|
73
|
+
/**
|
|
74
|
+
* Apply a single effect (called internally by applyEffects).
|
|
75
|
+
*/
|
|
76
|
+
private applyEffect;
|
|
77
|
+
/**
|
|
78
|
+
* Remove the most recent effect.
|
|
79
|
+
* Restores canvas state if needed.
|
|
80
|
+
*/
|
|
81
|
+
private popEffect;
|
|
82
|
+
/**
|
|
83
|
+
* Get the current number of active effects.
|
|
84
|
+
*/
|
|
85
|
+
getActiveEffectCount(): number;
|
|
86
|
+
/**
|
|
87
|
+
* Check if there are any active effects.
|
|
88
|
+
*/
|
|
89
|
+
hasActiveEffects(): boolean;
|
|
90
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Font measurement utility
|
|
3
|
+
*
|
|
4
|
+
* Provides Canvas API-based baseline measurement that works correctly with
|
|
5
|
+
* webfonts (which may not be loaded in the original document) and system fonts.
|
|
6
|
+
*
|
|
7
|
+
* Fallback chain:
|
|
8
|
+
* 1. fontBoundingBoxAscent — font-level metric (Chrome 99+, FF 116+, Safari 17.4+)
|
|
9
|
+
* 2. actualBoundingBoxAscent — glyph-level metric (widely supported)
|
|
10
|
+
* 3. fallback value — coarse CSS fallback
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Measure the baseline ascent for the currently set font.
|
|
14
|
+
*
|
|
15
|
+
* @param ctx - Canvas 2D rendering context with ctx.font already set
|
|
16
|
+
* @param fallback - Fallback value when no metrics are available (e.g. fontSize.number)
|
|
17
|
+
* @returns The distance from the text baseline to the top of the bounding box
|
|
18
|
+
*/
|
|
19
|
+
export declare const measureBaseline: (ctx: CanvasRenderingContext2D, fallback: number) => number;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RenderConfigurations } from './canvas-renderer';
|
|
2
|
+
import { Context } from '../../core/context';
|
|
3
|
+
export declare class ForeignObjectRenderer {
|
|
4
|
+
canvas: HTMLCanvasElement;
|
|
5
|
+
ctx: CanvasRenderingContext2D;
|
|
6
|
+
options: RenderConfigurations;
|
|
7
|
+
private readonly context;
|
|
8
|
+
constructor(context: Context, options: RenderConfigurations);
|
|
9
|
+
render(element: HTMLElement): Promise<HTMLCanvasElement>;
|
|
10
|
+
}
|