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.mjs CHANGED
@@ -360,7 +360,7 @@ class Cache {
360
360
  }
361
361
  const cache = new Cache();
362
362
 
363
- var version = "6.7.12";
363
+ var version = "6.7.14";
364
364
 
365
365
  // use this syntax so babel plugin see this import here
366
366
  const VERSION = version;
@@ -1808,7 +1808,8 @@ const composeMatrix = options => {
1808
1808
  const loadImage = function (url) {
1809
1809
  let {
1810
1810
  signal,
1811
- crossOrigin = null
1811
+ crossOrigin = null,
1812
+ fallbackToEmptyImage = false
1812
1813
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1813
1814
  return new Promise(function (resolve, reject) {
1814
1815
  if (signal && signal.aborted) {
@@ -1825,9 +1826,12 @@ const loadImage = function (url) {
1825
1826
  once: true
1826
1827
  });
1827
1828
  }
1828
- const done = function () {
1829
+ const cleanup = function () {
1829
1830
  img.onload = img.onerror = null;
1830
1831
  abort && (signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', abort));
1832
+ };
1833
+ const done = function () {
1834
+ cleanup();
1831
1835
  resolve(img);
1832
1836
  };
1833
1837
  if (!url) {
@@ -1836,8 +1840,15 @@ const loadImage = function (url) {
1836
1840
  }
1837
1841
  img.onload = done;
1838
1842
  img.onerror = function () {
1839
- abort && (signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', abort));
1840
- reject(new FabricError(`Error loading ${img.src}`));
1843
+ const failedSrc = img.src;
1844
+ cleanup();
1845
+ if (fallbackToEmptyImage) {
1846
+ log('warn', 'Image failed to load, continuing with an empty image source', failedSrc);
1847
+ img.src = '';
1848
+ resolve(img);
1849
+ return;
1850
+ }
1851
+ reject(new FabricError(`Error loading ${failedSrc}`));
1841
1852
  };
1842
1853
  crossOrigin && (img.crossOrigin = crossOrigin);
1843
1854
  img.src = url;
@@ -3063,25 +3074,28 @@ class StaticCanvas extends createCollectionMixin(CommonMethods) {
3063
3074
  */
3064
3075
  _createPathForText() {
3065
3076
  const pathMarkups = [];
3066
- let instance,
3067
- i,
3068
- len,
3069
- objects = this._objects;
3070
- for (i = 0, len = objects.length; i < len; i++) {
3071
- instance = objects[i];
3077
+ const objects = [];
3078
+ this._objects.forEach(function add(object) {
3079
+ objects.push(object);
3080
+ if (isCollection(object)) {
3081
+ object._objects.forEach(add);
3082
+ }
3083
+ });
3084
+ objects.forEach(instance => {
3072
3085
  if (instance.excludeFromExport) {
3073
- continue;
3086
+ return;
3074
3087
  }
3075
3088
  if (!isTextObject(instance) || !instance.path) {
3076
- continue;
3089
+ return;
3077
3090
  }
3078
- let pathId = `TEXTPATH_${instance.id}`;
3079
- let pathMarkup = instance.path._toSVG();
3080
- let index = pathMarkup.indexOf('COMMON_PARTS');
3091
+ const pathId = `TEXTPATH_${instance.id}`;
3092
+ const pathMarkup = instance.path._toSVG();
3093
+ const index = pathMarkup.indexOf('COMMON_PARTS');
3094
+
3081
3095
  // 加上id, 和路径偏移
3082
3096
  pathMarkup[index] = ['id="' + pathId + '" ', 'transform="translate(' + -instance.path.pathOffset.x + ',' + -instance.path.pathOffset.y + ')" '].join('');
3083
3097
  pathMarkups.push(pathMarkup.join(''));
3084
- }
3098
+ });
3085
3099
  return pathMarkups.join('\n');
3086
3100
  }
3087
3101
  createSVGClipPathMarkup(options) {
@@ -4040,9 +4054,13 @@ class Pattern {
4040
4054
  patternTransform,
4041
4055
  ...otherOptions
4042
4056
  } = _ref2;
4057
+ const {
4058
+ crossOrigin
4059
+ } = otherOptions;
4043
4060
  const img = await loadImage(source, {
4044
4061
  ...options,
4045
- crossOrigin: otherOptions.crossOrigin
4062
+ crossOrigin,
4063
+ fallbackToEmptyImage: true
4046
4064
  });
4047
4065
  return new this({
4048
4066
  ...otherOptions,
@@ -5030,13 +5048,17 @@ class FabricObjectSVGExportMixin {
5030
5048
  commonPieces = [styleInfo, vectorEffect, noStyle ? '' : this.addPaintOrder(), ' ', additionalTransform ? `transform="${additionalTransform}" ` : ''].join('');
5031
5049
 
5032
5050
  // James added shadow 放在上面
5051
+ // 文本等调用方已经通过 withShadow 挂载 filter 时,避免再额外复制一份可见对象,
5052
+ // 但仍然需要输出 filter 定义,否则普通 SVG 会丢失阴影。
5033
5053
  if (shadow) {
5054
+ markup.push(shadow.toSVG(this));
5055
+ }
5056
+ if (shadow && !withShadow) {
5034
5057
  const styleInfoWithShadow = 'style="' + this.getSvgStyles(false) + '" ';
5035
5058
  const commonPiecesWithShadow = [styleInfoWithShadow, vectorEffect, noStyle ? '' : this.addPaintOrder(), ' ', additionalTransform ? 'transform="' + additionalTransform + '" ' : ''].join('');
5036
5059
  const objectMarkupCopy = JSON.parse(JSON.stringify(objectMarkup));
5037
5060
  objectMarkupCopy[index] = commonPiecesWithShadow;
5038
5061
  markup.push(objectMarkupCopy.join(''));
5039
- markup.push(shadow.toSVG(this));
5040
5062
  }
5041
5063
  // objectMarkup中是导出主对象(如path)的svg,index下标是style,放在commonPieces
5042
5064
  objectMarkup[index] = commonPieces;
@@ -25944,11 +25966,13 @@ class FabricImage extends FabricObject {
25944
25966
  } = _ref;
25945
25967
  return Promise.all([loadImage(src, {
25946
25968
  ...options,
25947
- crossOrigin
25969
+ crossOrigin,
25970
+ fallbackToEmptyImage: true
25948
25971
  }), f && enlivenObjects(f, options),
25949
25972
  // TODO: redundant - handled by enlivenObjectEnlivables
25950
25973
  rf && enlivenObjects([rf], options), enlivenObjectEnlivables(object, options)]).then(_ref2 => {
25951
- let [el, filters = [], [resizeFilter] = [], hydratedProps = {}] = _ref2;
25974
+ let [el, filters = [], resizeFilters = [], hydratedProps = {}] = _ref2;
25975
+ const [resizeFilter] = resizeFilters;
25952
25976
  return new this(el, {
25953
25977
  ...object,
25954
25978
  // TODO: this creates a difference between image creation and restoring from JSON