html2canvas-pro 2.4.4 → 2.5.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/README.md +115 -13
- package/dist/html2canvas-pro.cjs +3246 -1601
- package/dist/html2canvas-pro.cjs.map +1 -1
- package/dist/html2canvas-pro.esm.js +3246 -1601
- package/dist/html2canvas-pro.esm.js.map +1 -1
- package/dist/html2canvas-pro.js +3242 -1597
- package/dist/html2canvas-pro.js.map +1 -1
- package/dist/html2canvas-pro.min.js +5 -5
- package/dist/types/core/cache-storage.d.ts +4 -1
- package/dist/types/core/context.d.ts +10 -1
- package/dist/types/core/render-element.d.ts +11 -0
- package/dist/types/core/util.d.ts +6 -0
- package/dist/types/css/index.d.ts +77 -46
- package/dist/types/css/parse.d.ts +15 -0
- package/dist/types/css/property-descriptors/accent-color.d.ts +5 -0
- package/dist/types/css/property-descriptors/backdrop-filter.d.ts +9 -0
- package/dist/types/css/property-descriptors/background-blend-mode.d.ts +16 -16
- package/dist/types/css/property-descriptors/border-image-width.d.ts +36 -0
- package/dist/types/css/property-descriptors/clip-path.d.ts +16 -2
- package/dist/types/css/property-descriptors/isolation.d.ts +6 -0
- package/dist/types/css/property-descriptors/mask.d.ts +25 -0
- package/dist/types/css/property-descriptors/mix-blend-mode.d.ts +16 -16
- package/dist/types/css/property-descriptors/outline.d.ts +15 -0
- package/dist/types/css/property-descriptors/text-emphasis.d.ts +22 -0
- package/dist/types/css/property-descriptors/text-shadow.d.ts +1 -1
- package/dist/types/css/property-descriptors/webkit-box-reflect.d.ts +19 -0
- package/dist/types/css/property-descriptors/webkit-text-fill-color.d.ts +9 -0
- package/dist/types/css/syntax/token-constants.d.ts +1 -1
- package/dist/types/css/types/color-math.d.ts +7 -1
- package/dist/types/css/types/color-spaces/a98.d.ts +2 -1
- package/dist/types/css/types/color-spaces/p3.d.ts +5 -4
- package/dist/types/css/types/color-spaces/pro-photo.d.ts +5 -4
- package/dist/types/css/types/color-spaces/rec2020.d.ts +5 -4
- package/dist/types/css/types/color-spaces/srgb.d.ts +5 -4
- package/dist/types/css/types/color-utilities.d.ts +11 -11
- package/dist/types/css/types/color.d.ts +1 -0
- package/dist/types/css/types/functions/conic-gradient.d.ts +11 -0
- package/dist/types/css/types/functions/image-set.d.ts +11 -0
- package/dist/types/css/types/functions/repeating-radial-gradient.d.ts +8 -0
- package/dist/types/css/types/image.d.ts +15 -2
- package/dist/types/css/types/safe-eval.d.ts +0 -6
- package/dist/types/dom/copy-css-styles.d.ts +8 -0
- package/dist/types/dom/document-cloner.d.ts +3 -13
- package/dist/types/dom/iframe-mount.d.ts +37 -0
- package/dist/types/dom/pseudo-content.d.ts +33 -0
- package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +2 -2
- package/dist/types/options.d.ts +8 -2
- package/dist/types/render/canvas/background-renderer.d.ts +19 -0
- package/dist/types/render/canvas/border-image-renderer.d.ts +50 -1
- package/dist/types/render/canvas/box-shadow-geometry.d.ts +3 -0
- package/dist/types/render/canvas/box-shadow-painter.d.ts +13 -0
- package/dist/types/render/canvas/box-shadow-transform.d.ts +16 -0
- package/dist/types/render/canvas/canvas-renderer.d.ts +21 -15
- package/dist/types/render/canvas/mask-renderer.d.ts +36 -0
- package/dist/types/render/canvas/text-clip-renderer.d.ts +36 -0
- package/dist/types/render/canvas/text-renderer.d.ts +22 -0
- package/dist/types/render/stacking-context.d.ts +4 -1
- package/package.json +39 -40
- package/dist/lib/config.js +0 -49
- package/dist/lib/core/abort-helper.js +0 -20
- package/dist/lib/core/background-parser.js +0 -41
- package/dist/lib/core/bitwise.js +0 -5
- package/dist/lib/core/cache-storage.js +0 -283
- package/dist/lib/core/config-assembler.js +0 -88
- package/dist/lib/core/constants.js +0 -25
- package/dist/lib/core/context.js +0 -19
- package/dist/lib/core/debugger.js +0 -27
- package/dist/lib/core/features.js +0 -190
- package/dist/lib/core/logger.js +0 -56
- package/dist/lib/core/lru-map.js +0 -66
- package/dist/lib/core/origin-checker.js +0 -53
- package/dist/lib/core/performance-monitor.js +0 -185
- package/dist/lib/core/render-element.js +0 -131
- package/dist/lib/core/util.js +0 -4
- package/dist/lib/core/validator.js +0 -500
- package/dist/lib/css/grouped/background-styles.js +0 -36
- package/dist/lib/css/grouped/border-styles.js +0 -75
- package/dist/lib/css/grouped/font-styles.js +0 -93
- package/dist/lib/css/grouped/layout-styles.js +0 -127
- package/dist/lib/css/index.js +0 -339
- package/dist/lib/css/layout/bounds.js +0 -52
- package/dist/lib/css/layout/text.js +0 -133
- package/dist/lib/css/property-descriptor.js +0 -2
- package/dist/lib/css/property-descriptors/background-blend-mode.js +0 -41
- package/dist/lib/css/property-descriptors/background-clip.js +0 -25
- package/dist/lib/css/property-descriptors/background-color.js +0 -10
- package/dist/lib/css/property-descriptors/background-image.js +0 -24
- package/dist/lib/css/property-descriptors/background-origin.js +0 -23
- package/dist/lib/css/property-descriptors/background-position.js +0 -19
- package/dist/lib/css/property-descriptors/background-repeat.js +0 -33
- package/dist/lib/css/property-descriptors/background-size.js +0 -23
- package/dist/lib/css/property-descriptors/border-color.js +0 -14
- package/dist/lib/css/property-descriptors/border-image-repeat.js +0 -42
- package/dist/lib/css/property-descriptors/border-image-slice.js +0 -45
- package/dist/lib/css/property-descriptors/border-image-source.js +0 -22
- package/dist/lib/css/property-descriptors/border-radius.js +0 -15
- package/dist/lib/css/property-descriptors/border-style.js +0 -26
- package/dist/lib/css/property-descriptors/border-width.js +0 -20
- package/dist/lib/css/property-descriptors/box-decoration-break.js +0 -18
- package/dist/lib/css/property-descriptors/box-shadow.js +0 -54
- package/dist/lib/css/property-descriptors/clip-path.js +0 -189
- package/dist/lib/css/property-descriptors/color.js +0 -10
- package/dist/lib/css/property-descriptors/content.js +0 -19
- package/dist/lib/css/property-descriptors/counter-increment.js +0 -35
- package/dist/lib/css/property-descriptors/counter-reset.js +0 -18
- package/dist/lib/css/property-descriptors/direction.js +0 -18
- package/dist/lib/css/property-descriptors/display.js +0 -81
- package/dist/lib/css/property-descriptors/duration.js +0 -14
- package/dist/lib/css/property-descriptors/filter.js +0 -86
- package/dist/lib/css/property-descriptors/float.js +0 -22
- package/dist/lib/css/property-descriptors/font-family.js +0 -47
- package/dist/lib/css/property-descriptors/font-size.js +0 -10
- package/dist/lib/css/property-descriptors/font-style.js +0 -20
- package/dist/lib/css/property-descriptors/font-variant-ligatures.js +0 -34
- package/dist/lib/css/property-descriptors/font-variant.js +0 -13
- package/dist/lib/css/property-descriptors/font-weight.js +0 -25
- package/dist/lib/css/property-descriptors/image-rendering.js +0 -33
- package/dist/lib/css/property-descriptors/letter-spacing.js +0 -21
- package/dist/lib/css/property-descriptors/line-break.js +0 -23
- package/dist/lib/css/property-descriptors/line-height.js +0 -24
- package/dist/lib/css/property-descriptors/list-style-image.js +0 -17
- package/dist/lib/css/property-descriptors/list-style-position.js +0 -18
- package/dist/lib/css/property-descriptors/list-style-type.js +0 -122
- package/dist/lib/css/property-descriptors/margin.js +0 -13
- package/dist/lib/css/property-descriptors/mix-blend-mode.js +0 -31
- package/dist/lib/css/property-descriptors/object-fit.js +0 -28
- package/dist/lib/css/property-descriptors/object-position.js +0 -42
- package/dist/lib/css/property-descriptors/opacity.js +0 -16
- package/dist/lib/css/property-descriptors/overflow-wrap.js +0 -18
- package/dist/lib/css/property-descriptors/overflow.js +0 -27
- package/dist/lib/css/property-descriptors/padding.js +0 -14
- package/dist/lib/css/property-descriptors/paint-order.js +0 -33
- package/dist/lib/css/property-descriptors/position.js +0 -22
- package/dist/lib/css/property-descriptors/quotes.js +0 -41
- package/dist/lib/css/property-descriptors/rotate.js +0 -27
- package/dist/lib/css/property-descriptors/text-align.js +0 -21
- package/dist/lib/css/property-descriptors/text-decoration-color.js +0 -10
- package/dist/lib/css/property-descriptors/text-decoration-line.js +0 -28
- package/dist/lib/css/property-descriptors/text-decoration-style.js +0 -24
- package/dist/lib/css/property-descriptors/text-decoration-thickness.js +0 -26
- package/dist/lib/css/property-descriptors/text-overflow.js +0 -18
- package/dist/lib/css/property-descriptors/text-shadow.js +0 -46
- package/dist/lib/css/property-descriptors/text-transform.js +0 -20
- package/dist/lib/css/property-descriptors/text-underline-offset.js +0 -23
- package/dist/lib/css/property-descriptors/transform-origin.js +0 -24
- package/dist/lib/css/property-descriptors/transform.js +0 -57
- package/dist/lib/css/property-descriptors/visibility.js +0 -20
- package/dist/lib/css/property-descriptors/webkit-line-clamp.js +0 -26
- package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +0 -10
- package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +0 -16
- package/dist/lib/css/property-descriptors/white-space.js +0 -32
- package/dist/lib/css/property-descriptors/word-break.js +0 -26
- package/dist/lib/css/property-descriptors/writing-mode.js +0 -28
- package/dist/lib/css/property-descriptors/z-index.js +0 -19
- package/dist/lib/css/property-descriptors/zoom.js +0 -18
- package/dist/lib/css/syntax/parser.js +0 -141
- package/dist/lib/css/syntax/token-constants.js +0 -214
- package/dist/lib/css/syntax/token-singletons.js +0 -36
- package/dist/lib/css/syntax/token-types.js +0 -10
- package/dist/lib/css/syntax/tokenizer.js +0 -502
- package/dist/lib/css/type-descriptor.js +0 -2
- package/dist/lib/css/types/angle.js +0 -80
- package/dist/lib/css/types/color-math.js +0 -25
- package/dist/lib/css/types/color-spaces/a98.js +0 -78
- package/dist/lib/css/types/color-spaces/p3.js +0 -86
- package/dist/lib/css/types/color-spaces/pro-photo.js +0 -83
- package/dist/lib/css/types/color-spaces/rec2020.js +0 -85
- package/dist/lib/css/types/color-spaces/srgb.js +0 -79
- package/dist/lib/css/types/color-utilities.js +0 -342
- package/dist/lib/css/types/color.js +0 -400
- package/dist/lib/css/types/functions/-prefix-linear-gradient.js +0 -32
- package/dist/lib/css/types/functions/-prefix-radial-gradient.js +0 -83
- package/dist/lib/css/types/functions/-webkit-gradient.js +0 -59
- package/dist/lib/css/types/functions/counter.js +0 -367
- package/dist/lib/css/types/functions/gradient.js +0 -163
- package/dist/lib/css/types/functions/linear-gradient.js +0 -27
- package/dist/lib/css/types/functions/radial-gradient.js +0 -90
- package/dist/lib/css/types/functions/repeating-linear-gradient.js +0 -9
- package/dist/lib/css/types/image.js +0 -62
- package/dist/lib/css/types/index.js +0 -2
- package/dist/lib/css/types/length-percentage.js +0 -197
- package/dist/lib/css/types/length.js +0 -5
- package/dist/lib/css/types/safe-eval.js +0 -80
- package/dist/lib/css/types/time.js +0 -17
- package/dist/lib/dom/document-cloner.js +0 -618
- package/dist/lib/dom/dom-normalizer.js +0 -115
- package/dist/lib/dom/element-container.js +0 -71
- package/dist/lib/dom/elements/li-element-container.js +0 -11
- package/dist/lib/dom/elements/ol-element-container.js +0 -12
- package/dist/lib/dom/elements/select-element-container.js +0 -12
- package/dist/lib/dom/elements/textarea-element-container.js +0 -11
- package/dist/lib/dom/node-parser.js +0 -125
- package/dist/lib/dom/node-type-guards.js +0 -81
- package/dist/lib/dom/replaced-elements/canvas-element-container.js +0 -13
- package/dist/lib/dom/replaced-elements/iframe-element-container.js +0 -38
- package/dist/lib/dom/replaced-elements/image-element-container.js +0 -14
- package/dist/lib/dom/replaced-elements/index.js +0 -2
- package/dist/lib/dom/replaced-elements/input-element-container.js +0 -89
- package/dist/lib/dom/replaced-elements/svg-element-container.js +0 -57
- package/dist/lib/dom/slot-cloner.js +0 -176
- package/dist/lib/dom/text-container.js +0 -35
- package/dist/lib/index.js +0 -49
- package/dist/lib/options.js +0 -2
- package/dist/lib/render/background.js +0 -188
- package/dist/lib/render/bezier-curve.js +0 -34
- package/dist/lib/render/border.js +0 -104
- package/dist/lib/render/bound-curves.js +0 -188
- package/dist/lib/render/box-sizing.js +0 -20
- package/dist/lib/render/canvas/background-renderer.js +0 -338
- package/dist/lib/render/canvas/border-image-renderer.js +0 -153
- package/dist/lib/render/canvas/border-renderer.js +0 -184
- package/dist/lib/render/canvas/canvas-path.js +0 -25
- package/dist/lib/render/canvas/canvas-renderer.js +0 -633
- package/dist/lib/render/canvas/content-renderer.js +0 -270
- package/dist/lib/render/canvas/effects-renderer.js +0 -171
- package/dist/lib/render/canvas/filter-surface.js +0 -270
- package/dist/lib/render/canvas/font-utils.js +0 -46
- package/dist/lib/render/canvas/foreignobject-renderer.js +0 -38
- package/dist/lib/render/canvas/surface-bounds.js +0 -64
- package/dist/lib/render/canvas/text/text-decoration-renderer.js +0 -99
- package/dist/lib/render/canvas/text-renderer.js +0 -486
- package/dist/lib/render/effects.js +0 -231
- package/dist/lib/render/font-metrics.js +0 -53
- package/dist/lib/render/object-fit.js +0 -91
- package/dist/lib/render/path.js +0 -26
- package/dist/lib/render/renderer-interface.js +0 -2
- package/dist/lib/render/stacking-context.js +0 -341
- package/dist/lib/render/vector.js +0 -16
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseStackingContexts = exports.buildClipPathEffect = exports.resolveAxisRadius = exports.hasOverflowClip = exports.ElementPaint = exports.StackingContext = void 0;
|
|
4
|
-
const bitwise_1 = require("../core/bitwise");
|
|
5
|
-
const bound_curves_1 = require("./bound-curves");
|
|
6
|
-
const effects_1 = require("./effects");
|
|
7
|
-
const path_1 = require("./path");
|
|
8
|
-
const ol_element_container_1 = require("../dom/elements/ol-element-container");
|
|
9
|
-
const li_element_container_1 = require("../dom/elements/li-element-container");
|
|
10
|
-
const counter_1 = require("../css/types/functions/counter");
|
|
11
|
-
const length_percentage_1 = require("../css/types/length-percentage");
|
|
12
|
-
const mix_blend_mode_1 = require("../css/property-descriptors/mix-blend-mode");
|
|
13
|
-
class StackingContext {
|
|
14
|
-
constructor(container) {
|
|
15
|
-
this.element = container;
|
|
16
|
-
this.inlineLevel = [];
|
|
17
|
-
this.nonInlineLevel = [];
|
|
18
|
-
this.negativeZIndex = [];
|
|
19
|
-
this.zeroOrAutoZIndexOrTransformedOrOpacity = [];
|
|
20
|
-
this.positiveZIndex = [];
|
|
21
|
-
this.nonPositionedFloats = [];
|
|
22
|
-
this.nonPositionedInlineLevel = [];
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
exports.StackingContext = StackingContext;
|
|
26
|
-
class ElementPaint {
|
|
27
|
-
constructor(container, parent) {
|
|
28
|
-
this.container = container;
|
|
29
|
-
this.parent = parent;
|
|
30
|
-
this.effects = [];
|
|
31
|
-
this.curves = new bound_curves_1.BoundCurves(this.container);
|
|
32
|
-
if (this.container.styles.opacity < 1) {
|
|
33
|
-
this.effects.push(new effects_1.OpacityEffect(this.container.styles.opacity));
|
|
34
|
-
}
|
|
35
|
-
if (this.container.styles.rotate !== null) {
|
|
36
|
-
const origin = this.container.styles.transformOrigin;
|
|
37
|
-
const offsetX = this.container.bounds.left + (0, length_percentage_1.getAbsoluteValue)(origin[0], this.container.bounds.width);
|
|
38
|
-
const offsetY = this.container.bounds.top + (0, length_percentage_1.getAbsoluteValue)(origin[1], this.container.bounds.height);
|
|
39
|
-
// Apply rotate property if present
|
|
40
|
-
const angle = this.container.styles.rotate;
|
|
41
|
-
const rad = (angle * Math.PI) / 180;
|
|
42
|
-
const cos = Math.cos(rad);
|
|
43
|
-
const sin = Math.sin(rad);
|
|
44
|
-
const rotateMatrix = [cos, sin, -sin, cos, 0, 0];
|
|
45
|
-
this.effects.push(new effects_1.TransformEffect(offsetX, offsetY, rotateMatrix));
|
|
46
|
-
}
|
|
47
|
-
if (this.container.styles.transform !== null) {
|
|
48
|
-
const origin = this.container.styles.transformOrigin;
|
|
49
|
-
const offsetX = this.container.bounds.left + (0, length_percentage_1.getAbsoluteValue)(origin[0], this.container.bounds.width);
|
|
50
|
-
const offsetY = this.container.bounds.top + (0, length_percentage_1.getAbsoluteValue)(origin[1], this.container.bounds.height);
|
|
51
|
-
const matrix = this.container.styles.transform;
|
|
52
|
-
this.effects.push(new effects_1.TransformEffect(offsetX, offsetY, matrix));
|
|
53
|
-
}
|
|
54
|
-
if ((0, exports.hasOverflowClip)(this.container.styles)) {
|
|
55
|
-
const borderBox = (0, bound_curves_1.calculateBorderBoxPath)(this.curves);
|
|
56
|
-
const paddingBox = (0, bound_curves_1.calculatePaddingBoxPath)(this.curves);
|
|
57
|
-
if ((0, path_1.equalPath)(borderBox, paddingBox)) {
|
|
58
|
-
this.effects.push(new effects_1.ClipEffect(borderBox, 2 /* EffectTarget.BACKGROUND_BORDERS */ | 4 /* EffectTarget.CONTENT */));
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
this.effects.push(new effects_1.ClipEffect(borderBox, 2 /* EffectTarget.BACKGROUND_BORDERS */));
|
|
62
|
-
this.effects.push(new effects_1.ClipEffect(paddingBox, 4 /* EffectTarget.CONTENT */));
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (this.container.styles.clipPath.type !== 0 /* CLIP_PATH_TYPE.NONE */) {
|
|
66
|
-
const clipPathEffect = (0, exports.buildClipPathEffect)(this.container.styles.clipPath, this.container.bounds);
|
|
67
|
-
if (clipPathEffect) {
|
|
68
|
-
this.effects.push(clipPathEffect);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (this.container.styles.mixBlendMode !== mix_blend_mode_1.MIX_BLEND_MODE.NORMAL) {
|
|
72
|
-
this.effects.push(new effects_1.BlendEffect(this.container.styles.mixBlendMode));
|
|
73
|
-
}
|
|
74
|
-
if (this.container.styles.filter !== null) {
|
|
75
|
-
this.effects.push(new effects_1.FilterEffect(this.container.styles.filter));
|
|
76
|
-
}
|
|
77
|
-
if (this.container.styles.zoom !== 1) {
|
|
78
|
-
const origin = this.container.styles.transformOrigin;
|
|
79
|
-
const offsetX = this.container.bounds.left + (0, length_percentage_1.getAbsoluteValue)(origin[0], this.container.bounds.width);
|
|
80
|
-
const offsetY = this.container.bounds.top + (0, length_percentage_1.getAbsoluteValue)(origin[1], this.container.bounds.height);
|
|
81
|
-
const z = this.container.styles.zoom;
|
|
82
|
-
const zoomMatrix = [z, 0, 0, z, 0, 0];
|
|
83
|
-
this.effects.push(new effects_1.TransformEffect(offsetX, offsetY, zoomMatrix));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
getEffects(target, surfaceRoot) {
|
|
87
|
-
let inFlow = [2 /* POSITION.ABSOLUTE */, 3 /* POSITION.FIXED */].indexOf(this.container.styles.position) === -1;
|
|
88
|
-
let parent = this === surfaceRoot ? null : this.parent;
|
|
89
|
-
const sourceEffects = (paint) => paint.effects.filter((effect) => paint !== surfaceRoot || (!(0, effects_1.isFilterEffect)(effect) && !(0, effects_1.isOpacityEffect)(effect)));
|
|
90
|
-
const effects = sourceEffects(this);
|
|
91
|
-
while (parent) {
|
|
92
|
-
const croplessEffects = sourceEffects(parent).filter((effect) => !(0, effects_1.isClipEffect)(effect));
|
|
93
|
-
if (inFlow || parent.container.styles.position !== 0 /* POSITION.STATIC */ || !parent.parent) {
|
|
94
|
-
inFlow = [2 /* POSITION.ABSOLUTE */, 3 /* POSITION.FIXED */].indexOf(parent.container.styles.position) === -1;
|
|
95
|
-
if ((0, exports.hasOverflowClip)(parent.container.styles)) {
|
|
96
|
-
const borderBox = (0, bound_curves_1.calculateBorderBoxPath)(parent.curves);
|
|
97
|
-
const paddingBox = (0, bound_curves_1.calculatePaddingBoxPath)(parent.curves);
|
|
98
|
-
if (!(0, path_1.equalPath)(borderBox, paddingBox)) {
|
|
99
|
-
effects.unshift(new effects_1.ClipEffect(paddingBox, 2 /* EffectTarget.BACKGROUND_BORDERS */ | 4 /* EffectTarget.CONTENT */));
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
effects.unshift(...croplessEffects);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
effects.unshift(...croplessEffects);
|
|
106
|
-
}
|
|
107
|
-
parent = parent === surfaceRoot ? null : parent.parent;
|
|
108
|
-
}
|
|
109
|
-
return effects.filter((effect) => (0, bitwise_1.contains)(effect.target, target));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
exports.ElementPaint = ElementPaint;
|
|
113
|
-
/** @internal – exported for testing only. */
|
|
114
|
-
const hasOverflowClip = (styles) => styles.overflowX !== 0 /* OVERFLOW.VISIBLE */ || styles.overflowY !== 0 /* OVERFLOW.VISIBLE */;
|
|
115
|
-
exports.hasOverflowClip = hasOverflowClip;
|
|
116
|
-
/**
|
|
117
|
-
* Resolve a `closest-side` or `farthest-side` shape-radius keyword to pixels
|
|
118
|
-
* for a single axis. Used by both `circle()` (per-axis) and `ellipse()`.
|
|
119
|
-
*
|
|
120
|
-
* @param r - The ShapeRadius (keyword or length-percentage).
|
|
121
|
-
* @param center - Absolute center coordinate on this axis (cx or cy).
|
|
122
|
-
* @param start - Absolute start of the reference box on this axis.
|
|
123
|
-
* @param end - Absolute end of the reference box on this axis.
|
|
124
|
-
* @param dimRef - Reference dimension for resolving a length-percentage value.
|
|
125
|
-
* @internal – exported for testing only.
|
|
126
|
-
*/
|
|
127
|
-
const resolveAxisRadius = (r, center, start, end, dimRef) => {
|
|
128
|
-
if (r === 'closest-side')
|
|
129
|
-
return Math.min(center - start, end - center);
|
|
130
|
-
if (r === 'farthest-side')
|
|
131
|
-
return Math.max(center - start, end - center);
|
|
132
|
-
return (0, length_percentage_1.getAbsoluteValue)(r, dimRef);
|
|
133
|
-
};
|
|
134
|
-
exports.resolveAxisRadius = resolveAxisRadius;
|
|
135
|
-
/**
|
|
136
|
-
* Convert a parsed ClipPathValue + element bounds into a ClipPathEffect whose
|
|
137
|
-
* `applyClip` callback draws the clip shape directly onto the canvas context.
|
|
138
|
-
*
|
|
139
|
-
* All coordinates are computed in page-absolute space at construction time so
|
|
140
|
-
* the callback itself is allocation-free and executes synchronously.
|
|
141
|
-
* @internal – exported for testing only.
|
|
142
|
-
*/
|
|
143
|
-
const buildClipPathEffect = (clipPath, bounds) => {
|
|
144
|
-
const { left: bLeft, top: bTop, width: bWidth, height: bHeight } = bounds;
|
|
145
|
-
switch (clipPath.type) {
|
|
146
|
-
case 1 /* CLIP_PATH_TYPE.INSET */: {
|
|
147
|
-
const iLeft = (0, length_percentage_1.getAbsoluteValue)(clipPath.left, bWidth);
|
|
148
|
-
const iTop = (0, length_percentage_1.getAbsoluteValue)(clipPath.top, bHeight);
|
|
149
|
-
const x = bLeft + iLeft;
|
|
150
|
-
const y = bTop + iTop;
|
|
151
|
-
// Clamp to zero: per CSS spec, overlapping insets produce an empty shape.
|
|
152
|
-
const w = Math.max(0, bWidth - iLeft - (0, length_percentage_1.getAbsoluteValue)(clipPath.right, bWidth));
|
|
153
|
-
const h = Math.max(0, bHeight - iTop - (0, length_percentage_1.getAbsoluteValue)(clipPath.bottom, bHeight));
|
|
154
|
-
return new effects_1.ClipPathEffect((ctx) => {
|
|
155
|
-
ctx.beginPath();
|
|
156
|
-
ctx.rect(x, y, w, h);
|
|
157
|
-
ctx.clip();
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
case 2 /* CLIP_PATH_TYPE.CIRCLE */: {
|
|
161
|
-
const cx = bLeft + (0, length_percentage_1.getAbsoluteValue)(clipPath.cx, bWidth);
|
|
162
|
-
const cy = bTop + (0, length_percentage_1.getAbsoluteValue)(clipPath.cy, bHeight);
|
|
163
|
-
let r;
|
|
164
|
-
if (clipPath.radius === 'closest-side') {
|
|
165
|
-
r = Math.min(cx - bLeft, cy - bTop, bLeft + bWidth - cx, bTop + bHeight - cy);
|
|
166
|
-
}
|
|
167
|
-
else if (clipPath.radius === 'farthest-side') {
|
|
168
|
-
r = Math.max(cx - bLeft, cy - bTop, bLeft + bWidth - cx, bTop + bHeight - cy);
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
// Per CSS spec, percentage is relative to sqrt(w² + h²) / sqrt(2).
|
|
172
|
-
r = (0, length_percentage_1.getAbsoluteValue)(clipPath.radius, Math.sqrt(bWidth * bWidth + bHeight * bHeight) / Math.SQRT2);
|
|
173
|
-
}
|
|
174
|
-
return new effects_1.ClipPathEffect((ctx) => {
|
|
175
|
-
ctx.beginPath();
|
|
176
|
-
ctx.arc(cx, cy, Math.max(0, r), 0, Math.PI * 2);
|
|
177
|
-
ctx.clip();
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
case 3 /* CLIP_PATH_TYPE.ELLIPSE */: {
|
|
181
|
-
const cx = bLeft + (0, length_percentage_1.getAbsoluteValue)(clipPath.cx, bWidth);
|
|
182
|
-
const cy = bTop + (0, length_percentage_1.getAbsoluteValue)(clipPath.cy, bHeight);
|
|
183
|
-
const rx = (0, exports.resolveAxisRadius)(clipPath.rx, cx, bLeft, bLeft + bWidth, bWidth);
|
|
184
|
-
const ry = (0, exports.resolveAxisRadius)(clipPath.ry, cy, bTop, bTop + bHeight, bHeight);
|
|
185
|
-
return new effects_1.ClipPathEffect((ctx) => {
|
|
186
|
-
ctx.beginPath();
|
|
187
|
-
ctx.ellipse(cx, cy, Math.max(0, rx), Math.max(0, ry), 0, 0, Math.PI * 2);
|
|
188
|
-
ctx.clip();
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
case 4 /* CLIP_PATH_TYPE.POLYGON */: {
|
|
192
|
-
// Pre-compute all vertices in page-absolute coordinates.
|
|
193
|
-
const absPoints = clipPath.points.map(([px, py]) => [bLeft + (0, length_percentage_1.getAbsoluteValue)(px, bWidth), bTop + (0, length_percentage_1.getAbsoluteValue)(py, bHeight)]);
|
|
194
|
-
return new effects_1.ClipPathEffect((ctx) => {
|
|
195
|
-
ctx.beginPath();
|
|
196
|
-
if (absPoints.length > 0) {
|
|
197
|
-
ctx.moveTo(absPoints[0][0], absPoints[0][1]);
|
|
198
|
-
for (let i = 1; i < absPoints.length; i++) {
|
|
199
|
-
ctx.lineTo(absPoints[i][0], absPoints[i][1]);
|
|
200
|
-
}
|
|
201
|
-
ctx.closePath();
|
|
202
|
-
}
|
|
203
|
-
// Calling clip() with an empty path (zero points) is intentional:
|
|
204
|
-
// it clips the entire region to nothing, which is the correct
|
|
205
|
-
// behaviour for a degenerate polygon() per the CSS spec.
|
|
206
|
-
ctx.clip();
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
case 5 /* CLIP_PATH_TYPE.PATH */: {
|
|
210
|
-
// path() coordinates are in the element's local space (0,0 = element top-left).
|
|
211
|
-
// We temporarily translate the canvas origin to the element's position, clip
|
|
212
|
-
// with the Path2D, then restore only the transform matrix (not the clipping
|
|
213
|
-
// region) via setTransform so the clip persists for the enclosing
|
|
214
|
-
// ctx.save() / ctx.restore() pair managed by EffectsRenderer.
|
|
215
|
-
//
|
|
216
|
-
// When the element also has a CSS transform, that transform was already applied
|
|
217
|
-
// by a preceding TransformEffect, so the path coordinates end up correctly in
|
|
218
|
-
// the element's transformed local space — matching browser behaviour.
|
|
219
|
-
const { d } = clipPath;
|
|
220
|
-
let cachedPath = null;
|
|
221
|
-
return new effects_1.ClipPathEffect((ctx) => {
|
|
222
|
-
try {
|
|
223
|
-
if (!cachedPath) {
|
|
224
|
-
cachedPath = new Path2D(d);
|
|
225
|
-
}
|
|
226
|
-
const savedTransform = ctx.getTransform();
|
|
227
|
-
ctx.translate(bLeft, bTop);
|
|
228
|
-
ctx.clip(cachedPath);
|
|
229
|
-
ctx.setTransform(savedTransform);
|
|
230
|
-
}
|
|
231
|
-
catch (_e) {
|
|
232
|
-
// Path2D or getTransform/setTransform not supported in this environment.
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
case 0 /* CLIP_PATH_TYPE.NONE */:
|
|
237
|
-
return null;
|
|
238
|
-
default: {
|
|
239
|
-
// Exhaustiveness guard: if a new CLIP_PATH_TYPE is added in the future
|
|
240
|
-
// without a corresponding case above, TypeScript will raise a compile-time
|
|
241
|
-
// error here rather than silently falling through.
|
|
242
|
-
const _exhaustive = clipPath;
|
|
243
|
-
void _exhaustive;
|
|
244
|
-
return null;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
|
-
exports.buildClipPathEffect = buildClipPathEffect;
|
|
249
|
-
const parseStackTree = (parent, stackingContext, realStackingContext, listItems) => {
|
|
250
|
-
parent.container.elements.forEach((child) => {
|
|
251
|
-
const treatAsRealStackingContext = child.createsRealStackingContext;
|
|
252
|
-
const createsStackingContext = child.createsStackingContext;
|
|
253
|
-
const paintContainer = new ElementPaint(child, parent);
|
|
254
|
-
if ((0, bitwise_1.contains)(child.styles.display, 2048 /* DISPLAY.LIST_ITEM */)) {
|
|
255
|
-
listItems.push(paintContainer);
|
|
256
|
-
}
|
|
257
|
-
const listOwnerItems = child.isListOwner ? [] : listItems;
|
|
258
|
-
if (treatAsRealStackingContext || createsStackingContext) {
|
|
259
|
-
const parentStack = treatAsRealStackingContext || child.styles.isPositioned() ? realStackingContext : stackingContext;
|
|
260
|
-
const stack = new StackingContext(paintContainer);
|
|
261
|
-
if (child.styles.isPositioned() || child.styles.opacity < 1 || child.styles.isTransformed()) {
|
|
262
|
-
const order = child.styles.zIndex.order;
|
|
263
|
-
if (order < 0) {
|
|
264
|
-
let index = 0;
|
|
265
|
-
parentStack.negativeZIndex.some((current, i) => {
|
|
266
|
-
if (order > current.element.container.styles.zIndex.order) {
|
|
267
|
-
index = i;
|
|
268
|
-
return false;
|
|
269
|
-
}
|
|
270
|
-
else if (index > 0) {
|
|
271
|
-
return true;
|
|
272
|
-
}
|
|
273
|
-
return false;
|
|
274
|
-
});
|
|
275
|
-
parentStack.negativeZIndex.splice(index, 0, stack);
|
|
276
|
-
}
|
|
277
|
-
else if (order > 0) {
|
|
278
|
-
let index = 0;
|
|
279
|
-
parentStack.positiveZIndex.some((current, i) => {
|
|
280
|
-
if (order >= current.element.container.styles.zIndex.order) {
|
|
281
|
-
index = i + 1;
|
|
282
|
-
return false;
|
|
283
|
-
}
|
|
284
|
-
else if (index > 0) {
|
|
285
|
-
return true;
|
|
286
|
-
}
|
|
287
|
-
return false;
|
|
288
|
-
});
|
|
289
|
-
parentStack.positiveZIndex.splice(index, 0, stack);
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
parentStack.zeroOrAutoZIndexOrTransformedOrOpacity.push(stack);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
if (child.styles.isFloating()) {
|
|
297
|
-
parentStack.nonPositionedFloats.push(stack);
|
|
298
|
-
}
|
|
299
|
-
else {
|
|
300
|
-
parentStack.nonPositionedInlineLevel.push(stack);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
parseStackTree(paintContainer, stack, treatAsRealStackingContext ? stack : realStackingContext, listOwnerItems);
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
if (child.styles.isInlineLevel()) {
|
|
307
|
-
stackingContext.inlineLevel.push(paintContainer);
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
stackingContext.nonInlineLevel.push(paintContainer);
|
|
311
|
-
}
|
|
312
|
-
parseStackTree(paintContainer, stackingContext, realStackingContext, listOwnerItems);
|
|
313
|
-
}
|
|
314
|
-
if (child.isListOwner) {
|
|
315
|
-
processListItems(child, listOwnerItems);
|
|
316
|
-
}
|
|
317
|
-
});
|
|
318
|
-
};
|
|
319
|
-
const processListItems = (owner, elements) => {
|
|
320
|
-
let numbering = owner instanceof ol_element_container_1.OLElementContainer ? owner.start : 1;
|
|
321
|
-
const reversed = owner instanceof ol_element_container_1.OLElementContainer ? owner.reversed : false;
|
|
322
|
-
for (let i = 0; i < elements.length; i++) {
|
|
323
|
-
const item = elements[i];
|
|
324
|
-
if (item.container instanceof li_element_container_1.LIElementContainer &&
|
|
325
|
-
typeof item.container.value === 'number' &&
|
|
326
|
-
item.container.value !== 0) {
|
|
327
|
-
numbering = item.container.value;
|
|
328
|
-
}
|
|
329
|
-
item.listValue = (0, counter_1.createCounterText)(numbering, item.container.styles.listStyleType, true);
|
|
330
|
-
numbering += reversed ? -1 : 1;
|
|
331
|
-
}
|
|
332
|
-
};
|
|
333
|
-
const parseStackingContexts = (container) => {
|
|
334
|
-
const paintContainer = new ElementPaint(container, null);
|
|
335
|
-
const root = new StackingContext(paintContainer);
|
|
336
|
-
const listItems = [];
|
|
337
|
-
parseStackTree(paintContainer, root, root, listItems);
|
|
338
|
-
processListItems(paintContainer.container, listItems);
|
|
339
|
-
return root;
|
|
340
|
-
};
|
|
341
|
-
exports.parseStackingContexts = parseStackingContexts;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isVector = exports.Vector = void 0;
|
|
4
|
-
class Vector {
|
|
5
|
-
constructor(x, y) {
|
|
6
|
-
this.type = 0 /* PathType.VECTOR */;
|
|
7
|
-
this.x = x;
|
|
8
|
-
this.y = y;
|
|
9
|
-
}
|
|
10
|
-
add(deltaX, deltaY) {
|
|
11
|
-
return new Vector(this.x + deltaX, this.y + deltaY);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
exports.Vector = Vector;
|
|
15
|
-
const isVector = (path) => path.type === 0 /* PathType.VECTOR */;
|
|
16
|
-
exports.isVector = isVector;
|