fabric-vectr 6.7.12 → 6.7.14
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/dist/index.js +45 -21
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +45 -21
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +45 -21
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +45 -21
- package/dist/index.node.mjs.map +1 -1
- package/dist/package.json.min.mjs +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/Pattern/Pattern.d.ts.map +1 -1
- package/dist/src/Pattern/Pattern.min.mjs +1 -1
- package/dist/src/Pattern/Pattern.min.mjs.map +1 -1
- package/dist/src/Pattern/Pattern.mjs +5 -1
- package/dist/src/Pattern/Pattern.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
- package/dist/src/canvas/StaticCanvas.min.mjs +1 -1
- package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.mjs +15 -12
- package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
- package/dist/src/shapes/Image.d.ts +2 -2
- package/dist/src/shapes/Image.d.ts.map +1 -1
- package/dist/src/shapes/Image.min.mjs +1 -1
- package/dist/src/shapes/Image.min.mjs.map +1 -1
- package/dist/src/shapes/Image.mjs +4 -2
- package/dist/src/shapes/Image.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +5 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.d.ts +6 -1
- package/dist/src/util/misc/objectEnlive.d.ts.map +1 -1
- package/dist/src/util/misc/objectEnlive.min.mjs +1 -1
- package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.mjs +16 -5
- package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
- package/dist-extensions/src/Pattern/Pattern.d.ts.map +1 -1
- package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Image.d.ts +2 -2
- package/dist-extensions/src/shapes/Image.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
- package/dist-extensions/src/util/misc/objectEnlive.d.ts +6 -1
- package/dist-extensions/src/util/misc/objectEnlive.d.ts.map +1 -1
- package/package.json +33 -33
- package/src/Pattern/Pattern.spec.ts +63 -0
- package/src/Pattern/Pattern.ts +3 -1
- package/src/canvas/StaticCanvas.spec.ts +23 -0
- package/src/canvas/StaticCanvas.ts +19 -12
- package/src/shapes/Image.spec.ts +21 -2
- package/src/shapes/Image.ts +24 -12
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +5 -1
- package/src/shapes/Text/TextSVGExportMixin.spec.ts +16 -0
- package/src/util/misc/objectEnlive.spec.ts +49 -2
- package/src/util/misc/objectEnlive.ts +29 -5
package/dist/index.node.mjs
CHANGED
|
@@ -416,7 +416,7 @@ class Cache {
|
|
|
416
416
|
}
|
|
417
417
|
const cache = new Cache();
|
|
418
418
|
|
|
419
|
-
var version = "6.7.
|
|
419
|
+
var version = "6.7.14";
|
|
420
420
|
|
|
421
421
|
// use this syntax so babel plugin see this import here
|
|
422
422
|
const VERSION = version;
|
|
@@ -1864,7 +1864,8 @@ const composeMatrix = options => {
|
|
|
1864
1864
|
const loadImage = function (url) {
|
|
1865
1865
|
let {
|
|
1866
1866
|
signal,
|
|
1867
|
-
crossOrigin = null
|
|
1867
|
+
crossOrigin = null,
|
|
1868
|
+
fallbackToEmptyImage = false
|
|
1868
1869
|
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
1869
1870
|
return new Promise(function (resolve, reject) {
|
|
1870
1871
|
if (signal && signal.aborted) {
|
|
@@ -1881,9 +1882,12 @@ const loadImage = function (url) {
|
|
|
1881
1882
|
once: true
|
|
1882
1883
|
});
|
|
1883
1884
|
}
|
|
1884
|
-
const
|
|
1885
|
+
const cleanup = function () {
|
|
1885
1886
|
img.onload = img.onerror = null;
|
|
1886
1887
|
abort && (signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', abort));
|
|
1888
|
+
};
|
|
1889
|
+
const done = function () {
|
|
1890
|
+
cleanup();
|
|
1887
1891
|
resolve(img);
|
|
1888
1892
|
};
|
|
1889
1893
|
if (!url) {
|
|
@@ -1892,8 +1896,15 @@ const loadImage = function (url) {
|
|
|
1892
1896
|
}
|
|
1893
1897
|
img.onload = done;
|
|
1894
1898
|
img.onerror = function () {
|
|
1895
|
-
|
|
1896
|
-
|
|
1899
|
+
const failedSrc = img.src;
|
|
1900
|
+
cleanup();
|
|
1901
|
+
if (fallbackToEmptyImage) {
|
|
1902
|
+
log('warn', 'Image failed to load, continuing with an empty image source', failedSrc);
|
|
1903
|
+
img.src = '';
|
|
1904
|
+
resolve(img);
|
|
1905
|
+
return;
|
|
1906
|
+
}
|
|
1907
|
+
reject(new FabricError(`Error loading ${failedSrc}`));
|
|
1897
1908
|
};
|
|
1898
1909
|
crossOrigin && (img.crossOrigin = crossOrigin);
|
|
1899
1910
|
img.src = url;
|
|
@@ -3119,25 +3130,28 @@ let StaticCanvas$1 = class StaticCanvas extends createCollectionMixin(CommonMeth
|
|
|
3119
3130
|
*/
|
|
3120
3131
|
_createPathForText() {
|
|
3121
3132
|
const pathMarkups = [];
|
|
3122
|
-
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
|
|
3127
|
-
|
|
3133
|
+
const objects = [];
|
|
3134
|
+
this._objects.forEach(function add(object) {
|
|
3135
|
+
objects.push(object);
|
|
3136
|
+
if (isCollection(object)) {
|
|
3137
|
+
object._objects.forEach(add);
|
|
3138
|
+
}
|
|
3139
|
+
});
|
|
3140
|
+
objects.forEach(instance => {
|
|
3128
3141
|
if (instance.excludeFromExport) {
|
|
3129
|
-
|
|
3142
|
+
return;
|
|
3130
3143
|
}
|
|
3131
3144
|
if (!isTextObject(instance) || !instance.path) {
|
|
3132
|
-
|
|
3145
|
+
return;
|
|
3133
3146
|
}
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3147
|
+
const pathId = `TEXTPATH_${instance.id}`;
|
|
3148
|
+
const pathMarkup = instance.path._toSVG();
|
|
3149
|
+
const index = pathMarkup.indexOf('COMMON_PARTS');
|
|
3150
|
+
|
|
3137
3151
|
// 加上id, 和路径偏移
|
|
3138
3152
|
pathMarkup[index] = ['id="' + pathId + '" ', 'transform="translate(' + -instance.path.pathOffset.x + ',' + -instance.path.pathOffset.y + ')" '].join('');
|
|
3139
3153
|
pathMarkups.push(pathMarkup.join(''));
|
|
3140
|
-
}
|
|
3154
|
+
});
|
|
3141
3155
|
return pathMarkups.join('\n');
|
|
3142
3156
|
}
|
|
3143
3157
|
createSVGClipPathMarkup(options) {
|
|
@@ -4096,9 +4110,13 @@ class Pattern {
|
|
|
4096
4110
|
patternTransform,
|
|
4097
4111
|
...otherOptions
|
|
4098
4112
|
} = _ref2;
|
|
4113
|
+
const {
|
|
4114
|
+
crossOrigin
|
|
4115
|
+
} = otherOptions;
|
|
4099
4116
|
const img = await loadImage(source, {
|
|
4100
4117
|
...options,
|
|
4101
|
-
crossOrigin
|
|
4118
|
+
crossOrigin,
|
|
4119
|
+
fallbackToEmptyImage: true
|
|
4102
4120
|
});
|
|
4103
4121
|
return new this({
|
|
4104
4122
|
...otherOptions,
|
|
@@ -5086,13 +5104,17 @@ class FabricObjectSVGExportMixin {
|
|
|
5086
5104
|
commonPieces = [styleInfo, vectorEffect, noStyle ? '' : this.addPaintOrder(), ' ', additionalTransform ? `transform="${additionalTransform}" ` : ''].join('');
|
|
5087
5105
|
|
|
5088
5106
|
// James added shadow 放在上面
|
|
5107
|
+
// 文本等调用方已经通过 withShadow 挂载 filter 时,避免再额外复制一份可见对象,
|
|
5108
|
+
// 但仍然需要输出 filter 定义,否则普通 SVG 会丢失阴影。
|
|
5089
5109
|
if (shadow) {
|
|
5110
|
+
markup.push(shadow.toSVG(this));
|
|
5111
|
+
}
|
|
5112
|
+
if (shadow && !withShadow) {
|
|
5090
5113
|
const styleInfoWithShadow = 'style="' + this.getSvgStyles(false) + '" ';
|
|
5091
5114
|
const commonPiecesWithShadow = [styleInfoWithShadow, vectorEffect, noStyle ? '' : this.addPaintOrder(), ' ', additionalTransform ? 'transform="' + additionalTransform + '" ' : ''].join('');
|
|
5092
5115
|
const objectMarkupCopy = JSON.parse(JSON.stringify(objectMarkup));
|
|
5093
5116
|
objectMarkupCopy[index] = commonPiecesWithShadow;
|
|
5094
5117
|
markup.push(objectMarkupCopy.join(''));
|
|
5095
|
-
markup.push(shadow.toSVG(this));
|
|
5096
5118
|
}
|
|
5097
5119
|
// objectMarkup中是导出主对象(如path)的svg,index下标是style,放在commonPieces
|
|
5098
5120
|
objectMarkup[index] = commonPieces;
|
|
@@ -26000,11 +26022,13 @@ class FabricImage extends FabricObject {
|
|
|
26000
26022
|
} = _ref;
|
|
26001
26023
|
return Promise.all([loadImage(src, {
|
|
26002
26024
|
...options,
|
|
26003
|
-
crossOrigin
|
|
26025
|
+
crossOrigin,
|
|
26026
|
+
fallbackToEmptyImage: true
|
|
26004
26027
|
}), f && enlivenObjects(f, options),
|
|
26005
26028
|
// TODO: redundant - handled by enlivenObjectEnlivables
|
|
26006
26029
|
rf && enlivenObjects([rf], options), enlivenObjectEnlivables(object, options)]).then(_ref2 => {
|
|
26007
|
-
let [el, filters = [],
|
|
26030
|
+
let [el, filters = [], resizeFilters = [], hydratedProps = {}] = _ref2;
|
|
26031
|
+
const [resizeFilter] = resizeFilters;
|
|
26008
26032
|
return new this(el, {
|
|
26009
26033
|
...object,
|
|
26010
26034
|
// TODO: this creates a difference between image creation and restoring from JSON
|