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
package/dist/index.js CHANGED
@@ -366,7 +366,7 @@
366
366
  }
367
367
  const cache = new Cache();
368
368
 
369
- var version = "6.7.12";
369
+ var version = "6.7.14";
370
370
 
371
371
  // use this syntax so babel plugin see this import here
372
372
  const VERSION = version;
@@ -1814,7 +1814,8 @@
1814
1814
  const loadImage = function (url) {
1815
1815
  let {
1816
1816
  signal,
1817
- crossOrigin = null
1817
+ crossOrigin = null,
1818
+ fallbackToEmptyImage = false
1818
1819
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1819
1820
  return new Promise(function (resolve, reject) {
1820
1821
  if (signal && signal.aborted) {
@@ -1831,9 +1832,12 @@
1831
1832
  once: true
1832
1833
  });
1833
1834
  }
1834
- const done = function () {
1835
+ const cleanup = function () {
1835
1836
  img.onload = img.onerror = null;
1836
1837
  abort && (signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', abort));
1838
+ };
1839
+ const done = function () {
1840
+ cleanup();
1837
1841
  resolve(img);
1838
1842
  };
1839
1843
  if (!url) {
@@ -1842,8 +1846,15 @@
1842
1846
  }
1843
1847
  img.onload = done;
1844
1848
  img.onerror = function () {
1845
- abort && (signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', abort));
1846
- reject(new FabricError(`Error loading ${img.src}`));
1849
+ const failedSrc = img.src;
1850
+ cleanup();
1851
+ if (fallbackToEmptyImage) {
1852
+ log('warn', 'Image failed to load, continuing with an empty image source', failedSrc);
1853
+ img.src = '';
1854
+ resolve(img);
1855
+ return;
1856
+ }
1857
+ reject(new FabricError(`Error loading ${failedSrc}`));
1847
1858
  };
1848
1859
  crossOrigin && (img.crossOrigin = crossOrigin);
1849
1860
  img.src = url;
@@ -3069,25 +3080,28 @@
3069
3080
  */
3070
3081
  _createPathForText() {
3071
3082
  const pathMarkups = [];
3072
- let instance,
3073
- i,
3074
- len,
3075
- objects = this._objects;
3076
- for (i = 0, len = objects.length; i < len; i++) {
3077
- instance = objects[i];
3083
+ const objects = [];
3084
+ this._objects.forEach(function add(object) {
3085
+ objects.push(object);
3086
+ if (isCollection(object)) {
3087
+ object._objects.forEach(add);
3088
+ }
3089
+ });
3090
+ objects.forEach(instance => {
3078
3091
  if (instance.excludeFromExport) {
3079
- continue;
3092
+ return;
3080
3093
  }
3081
3094
  if (!isTextObject(instance) || !instance.path) {
3082
- continue;
3095
+ return;
3083
3096
  }
3084
- let pathId = `TEXTPATH_${instance.id}`;
3085
- let pathMarkup = instance.path._toSVG();
3086
- let index = pathMarkup.indexOf('COMMON_PARTS');
3097
+ const pathId = `TEXTPATH_${instance.id}`;
3098
+ const pathMarkup = instance.path._toSVG();
3099
+ const index = pathMarkup.indexOf('COMMON_PARTS');
3100
+
3087
3101
  // 加上id, 和路径偏移
3088
3102
  pathMarkup[index] = ['id="' + pathId + '" ', 'transform="translate(' + -instance.path.pathOffset.x + ',' + -instance.path.pathOffset.y + ')" '].join('');
3089
3103
  pathMarkups.push(pathMarkup.join(''));
3090
- }
3104
+ });
3091
3105
  return pathMarkups.join('\n');
3092
3106
  }
3093
3107
  createSVGClipPathMarkup(options) {
@@ -4046,9 +4060,13 @@
4046
4060
  patternTransform,
4047
4061
  ...otherOptions
4048
4062
  } = _ref2;
4063
+ const {
4064
+ crossOrigin
4065
+ } = otherOptions;
4049
4066
  const img = await loadImage(source, {
4050
4067
  ...options,
4051
- crossOrigin: otherOptions.crossOrigin
4068
+ crossOrigin,
4069
+ fallbackToEmptyImage: true
4052
4070
  });
4053
4071
  return new this({
4054
4072
  ...otherOptions,
@@ -5036,13 +5054,17 @@
5036
5054
  commonPieces = [styleInfo, vectorEffect, noStyle ? '' : this.addPaintOrder(), ' ', additionalTransform ? `transform="${additionalTransform}" ` : ''].join('');
5037
5055
 
5038
5056
  // James added shadow 放在上面
5057
+ // 文本等调用方已经通过 withShadow 挂载 filter 时,避免再额外复制一份可见对象,
5058
+ // 但仍然需要输出 filter 定义,否则普通 SVG 会丢失阴影。
5039
5059
  if (shadow) {
5060
+ markup.push(shadow.toSVG(this));
5061
+ }
5062
+ if (shadow && !withShadow) {
5040
5063
  const styleInfoWithShadow = 'style="' + this.getSvgStyles(false) + '" ';
5041
5064
  const commonPiecesWithShadow = [styleInfoWithShadow, vectorEffect, noStyle ? '' : this.addPaintOrder(), ' ', additionalTransform ? 'transform="' + additionalTransform + '" ' : ''].join('');
5042
5065
  const objectMarkupCopy = JSON.parse(JSON.stringify(objectMarkup));
5043
5066
  objectMarkupCopy[index] = commonPiecesWithShadow;
5044
5067
  markup.push(objectMarkupCopy.join(''));
5045
- markup.push(shadow.toSVG(this));
5046
5068
  }
5047
5069
  // objectMarkup中是导出主对象(如path)的svg,index下标是style,放在commonPieces
5048
5070
  objectMarkup[index] = commonPieces;
@@ -25950,11 +25972,13 @@
25950
25972
  } = _ref;
25951
25973
  return Promise.all([loadImage(src, {
25952
25974
  ...options,
25953
- crossOrigin
25975
+ crossOrigin,
25976
+ fallbackToEmptyImage: true
25954
25977
  }), f && enlivenObjects(f, options),
25955
25978
  // TODO: redundant - handled by enlivenObjectEnlivables
25956
25979
  rf && enlivenObjects([rf], options), enlivenObjectEnlivables(object, options)]).then(_ref2 => {
25957
- let [el, filters = [], [resizeFilter] = [], hydratedProps = {}] = _ref2;
25980
+ let [el, filters = [], resizeFilters = [], hydratedProps = {}] = _ref2;
25981
+ const [resizeFilter] = resizeFilters;
25958
25982
  return new this(el, {
25959
25983
  ...object,
25960
25984
  // TODO: this creates a difference between image creation and restoring from JSON