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.
Files changed (59) hide show
  1. package/dist/index.js +45 -21
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.min.js +1 -1
  4. package/dist/index.min.js.map +1 -1
  5. package/dist/index.min.mjs +1 -1
  6. package/dist/index.min.mjs.map +1 -1
  7. package/dist/index.mjs +45 -21
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/index.node.cjs +45 -21
  10. package/dist/index.node.cjs.map +1 -1
  11. package/dist/index.node.mjs +45 -21
  12. package/dist/index.node.mjs.map +1 -1
  13. package/dist/package.json.min.mjs +1 -1
  14. package/dist/package.json.mjs +1 -1
  15. package/dist/src/Pattern/Pattern.d.ts.map +1 -1
  16. package/dist/src/Pattern/Pattern.min.mjs +1 -1
  17. package/dist/src/Pattern/Pattern.min.mjs.map +1 -1
  18. package/dist/src/Pattern/Pattern.mjs +5 -1
  19. package/dist/src/Pattern/Pattern.mjs.map +1 -1
  20. package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
  21. package/dist/src/canvas/StaticCanvas.min.mjs +1 -1
  22. package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
  23. package/dist/src/canvas/StaticCanvas.mjs +15 -12
  24. package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
  25. package/dist/src/shapes/Image.d.ts +2 -2
  26. package/dist/src/shapes/Image.d.ts.map +1 -1
  27. package/dist/src/shapes/Image.min.mjs +1 -1
  28. package/dist/src/shapes/Image.min.mjs.map +1 -1
  29. package/dist/src/shapes/Image.mjs +4 -2
  30. package/dist/src/shapes/Image.mjs.map +1 -1
  31. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
  32. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs +1 -1
  33. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
  34. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +5 -1
  35. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
  36. package/dist/src/util/misc/objectEnlive.d.ts +6 -1
  37. package/dist/src/util/misc/objectEnlive.d.ts.map +1 -1
  38. package/dist/src/util/misc/objectEnlive.min.mjs +1 -1
  39. package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
  40. package/dist/src/util/misc/objectEnlive.mjs +16 -5
  41. package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
  42. package/dist-extensions/src/Pattern/Pattern.d.ts.map +1 -1
  43. package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +1 -1
  44. package/dist-extensions/src/shapes/Image.d.ts +2 -2
  45. package/dist-extensions/src/shapes/Image.d.ts.map +1 -1
  46. package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
  47. package/dist-extensions/src/util/misc/objectEnlive.d.ts +6 -1
  48. package/dist-extensions/src/util/misc/objectEnlive.d.ts.map +1 -1
  49. package/package.json +33 -33
  50. package/src/Pattern/Pattern.spec.ts +63 -0
  51. package/src/Pattern/Pattern.ts +3 -1
  52. package/src/canvas/StaticCanvas.spec.ts +23 -0
  53. package/src/canvas/StaticCanvas.ts +19 -12
  54. package/src/shapes/Image.spec.ts +21 -2
  55. package/src/shapes/Image.ts +24 -12
  56. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +5 -1
  57. package/src/shapes/Text/TextSVGExportMixin.spec.ts +16 -0
  58. package/src/util/misc/objectEnlive.spec.ts +49 -2
  59. package/src/util/misc/objectEnlive.ts +29 -5
@@ -416,7 +416,7 @@ class Cache {
416
416
  }
417
417
  const cache = new Cache();
418
418
 
419
- var version = "6.7.12";
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 done = function () {
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
- abort && (signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', abort));
1896
- reject(new FabricError(`Error loading ${img.src}`));
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
- let instance,
3123
- i,
3124
- len,
3125
- objects = this._objects;
3126
- for (i = 0, len = objects.length; i < len; i++) {
3127
- instance = objects[i];
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
- continue;
3142
+ return;
3130
3143
  }
3131
3144
  if (!isTextObject(instance) || !instance.path) {
3132
- continue;
3145
+ return;
3133
3146
  }
3134
- let pathId = `TEXTPATH_${instance.id}`;
3135
- let pathMarkup = instance.path._toSVG();
3136
- let index = pathMarkup.indexOf('COMMON_PARTS');
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: otherOptions.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 = [], [resizeFilter] = [], hydratedProps = {}] = _ref2;
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