customized-fabric 1.9.3 → 1.9.5

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.
@@ -0,0 +1,9 @@
1
+ export declare const QR_CODE_OBJECT_ATTRIBUTES: {
2
+ name: string;
3
+ type: string;
4
+ stroke: {
5
+ stroke: string;
6
+ strokeDashArray: number[];
7
+ strokeWidth: number;
8
+ };
9
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QR_CODE_OBJECT_ATTRIBUTES = void 0;
4
+ exports.QR_CODE_OBJECT_ATTRIBUTES = {
5
+ name: "QR code",
6
+ type: "QR_CODE",
7
+ stroke: {
8
+ stroke: "#333",
9
+ strokeDashArray: [5, 5],
10
+ strokeWidth: 1,
11
+ },
12
+ };
@@ -0,0 +1,41 @@
1
+ import { fabric } from "fabric";
2
+ import { QRCodeSettings, IQRCodeOptions } from "./interfaces";
3
+ import { ObjectId } from "../utils/objectId";
4
+ export declare const toQRCodeObject: (object: QRCode) => {
5
+ _id: ObjectId | undefined;
6
+ id: ObjectId | undefined;
7
+ personalizeId: number | undefined;
8
+ layerId: number | undefined;
9
+ name: string | undefined;
10
+ locked: boolean | undefined;
11
+ isAdditional: boolean | undefined;
12
+ layoutGroupId: string | undefined;
13
+ layoutGroupName: string | undefined;
14
+ qrCodeSettings: QRCodeSettings | undefined;
15
+ };
16
+ export default class QRCode extends fabric.Group {
17
+ _id?: ObjectId;
18
+ layerId?: number;
19
+ locked?: boolean;
20
+ imageFile?: File;
21
+ isAdditional?: boolean;
22
+ imageObject?: fabric.Image;
23
+ layoutGroupId?: string;
24
+ layoutGroupName?: string;
25
+ qrCodeData?: string;
26
+ qrCodeMargin?: number;
27
+ qrCodeEyeShape?: string;
28
+ qrCodeDataShape?: string;
29
+ qrCodeBackgroundColor?: string;
30
+ qrCodeDataColor?: string;
31
+ qrCodeEffectRatio?: number;
32
+ getSettings?: (attribute: string) => any;
33
+ setSizes?: (options: {
34
+ width?: number;
35
+ height?: number;
36
+ }) => void;
37
+ loadImage?: (imageInput: File | string) => Promise<void>;
38
+ fitImage?: (image: fabric.Image, cover?: boolean) => void;
39
+ getQRCodeAttributes?: () => QRCodeSettings;
40
+ constructor(options?: IQRCodeOptions);
41
+ }
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toQRCodeObject = void 0;
4
+ const fabric_1 = require("fabric");
5
+ const constants_1 = require("./constants");
6
+ const utils_1 = require("../utils");
7
+ const objectId_1 = require("../utils/objectId");
8
+ const QRCodeClass = fabric_1.fabric.util.createClass(fabric_1.fabric.Group, {
9
+ initialize: async function (options) {
10
+ this.rectObject = new fabric_1.fabric.Rect({
11
+ width: options?.width,
12
+ height: options?.height,
13
+ fill: undefined,
14
+ originX: "center",
15
+ originY: "center",
16
+ objectCaching: false,
17
+ ...constants_1.QR_CODE_OBJECT_ATTRIBUTES.stroke,
18
+ });
19
+ const group = new fabric_1.fabric.Group([this.rectObject]);
20
+ this.set(group);
21
+ this.on("scaling", () => {
22
+ let width = this.width * this.scaleX;
23
+ let height = this.height * this.scaleY;
24
+ this.setSizes({ width, height });
25
+ this.canvas?.renderAll();
26
+ });
27
+ const qrCodeSettings = { ...(options?.qrCodeSettings ?? {}) };
28
+ Object.keys(qrCodeSettings).map((key) => {
29
+ const newKey = `qrCode${key.charAt(0).toUpperCase() + key.slice(1)}`;
30
+ qrCodeSettings[newKey] = qrCodeSettings[key];
31
+ delete qrCodeSettings[key];
32
+ });
33
+ this.set({
34
+ _id: new objectId_1.ObjectId().toString(),
35
+ name: constants_1.QR_CODE_OBJECT_ATTRIBUTES.name,
36
+ type: constants_1.QR_CODE_OBJECT_ATTRIBUTES.type,
37
+ ...options,
38
+ layerId: options?.personalizeId ?? options?.layerId,
39
+ ...qrCodeSettings,
40
+ });
41
+ if (options?.isOriginal) {
42
+ this.rectObject?.set({ strokeWidth: 0 });
43
+ }
44
+ else {
45
+ if (options?.hideStroke) {
46
+ this.rectObject?.set({ strokeWidth: 0 });
47
+ }
48
+ if (options?.imageFile) {
49
+ this.loadImage(options?.imageFile);
50
+ }
51
+ }
52
+ this.fire("scaling");
53
+ },
54
+ loadImage: async function (image) {
55
+ const loadedImage = await (0, utils_1.loadImage)(image);
56
+ if (loadedImage?.width && loadedImage?.height) {
57
+ loadedImage.set({
58
+ originX: "center",
59
+ originY: "center",
60
+ });
61
+ this.remove(this.imageObject);
62
+ this.imageObject = loadedImage;
63
+ this.add(this.imageObject);
64
+ this.fitImage(this.imageObject);
65
+ this.canvas?.renderAll();
66
+ }
67
+ },
68
+ setSizes: function (options) {
69
+ const { width, height } = options;
70
+ const attributes = {
71
+ scaleX: 1,
72
+ scaleY: 1,
73
+ };
74
+ if (width) {
75
+ attributes.width = width;
76
+ }
77
+ if (height) {
78
+ attributes.height = height;
79
+ }
80
+ this.set(attributes);
81
+ this.rectObject?.set(attributes);
82
+ this.fitImage(this.imageObject);
83
+ this.canvas?.renderAll?.();
84
+ },
85
+ fitImage: function (image, cover = false) {
86
+ if (image) {
87
+ const imageScaleX = this.width / (image?.width ?? 1);
88
+ const imageScaleY = this.height / (image?.height ?? 1);
89
+ if (cover) {
90
+ imageScaleX < imageScaleY
91
+ ? image.set({ scaleX: imageScaleY, scaleY: imageScaleY })
92
+ : image.set({ scaleX: imageScaleX, scaleY: imageScaleX });
93
+ }
94
+ else {
95
+ imageScaleX > imageScaleY
96
+ ? image.set({ scaleX: imageScaleY, scaleY: imageScaleY })
97
+ : image.set({ scaleX: imageScaleX, scaleY: imageScaleX });
98
+ }
99
+ }
100
+ },
101
+ getSettings: function (attribute) {
102
+ return this.get(attribute);
103
+ },
104
+ getQRCodeAttributes: function () {
105
+ return {
106
+ data: this?.qrCodeData,
107
+ margin: this?.qrCodeMargin,
108
+ eyeShape: this?.qrCodeEyeShape,
109
+ dataShape: this?.qrCodeDataShape,
110
+ backgroundColor: this?.qrCodeBackgroundColor,
111
+ dataColor: this?.qrCodeDataColor,
112
+ effectRatio: this?.qrCodeEffectRatio,
113
+ };
114
+ },
115
+ });
116
+ const toQRCodeObject = (object) => {
117
+ return {
118
+ _id: object?._id,
119
+ id: object?._id,
120
+ personalizeId: object?.layerId,
121
+ layerId: object?.layerId,
122
+ name: object?.name,
123
+ locked: object?.locked,
124
+ isAdditional: object?.isAdditional,
125
+ layoutGroupId: object?.layoutGroupId,
126
+ layoutGroupName: object?.layoutGroupName,
127
+ qrCodeSettings: object.getQRCodeAttributes?.(),
128
+ };
129
+ };
130
+ exports.toQRCodeObject = toQRCodeObject;
131
+ class QRCode extends fabric_1.fabric.Group {
132
+ constructor(options) {
133
+ super();
134
+ return new QRCodeClass(options);
135
+ }
136
+ }
137
+ exports.default = QRCode;
@@ -0,0 +1,20 @@
1
+ import { ObjectId } from "../utils/objectId";
2
+ export interface QRCodeSettings {
3
+ data?: string;
4
+ margin?: string;
5
+ eyeShape?: string;
6
+ dataShape?: string;
7
+ backgroundColor?: string;
8
+ dataColor?: string;
9
+ effectRatio?: string;
10
+ }
11
+ export interface IQRCodeOptions extends fabric.IGroupOptions {
12
+ _id?: ObjectId;
13
+ personalizeId?: number;
14
+ layerId: number;
15
+ imageFile?: File;
16
+ isOriginal?: boolean;
17
+ isAdditional?: boolean;
18
+ hideStroke?: boolean;
19
+ qrCodeSettings?: QRCodeSettings;
20
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -6,5 +6,6 @@ export declare const OBJECT_TYPES: {
6
6
  activeSelection: string;
7
7
  layoutGroup: string;
8
8
  calendar: string;
9
+ qrCode: string;
9
10
  };
10
11
  export declare const MAX_TEXTURE_SIZE = 20000;
package/lib/constants.js CHANGED
@@ -6,14 +6,16 @@ const constants_2 = require("./ClipartObject/constants");
6
6
  const constants_3 = require("./CurvedTextObject/constants");
7
7
  const constants_4 = require("./ImagePlaceholderObject/constants");
8
8
  const constants_5 = require("./LayoutGroupObject/constants");
9
- const constants_6 = require("./TextInputObject/constants");
9
+ const constants_6 = require("./QRCodeObject/constants");
10
+ const constants_7 = require("./TextInputObject/constants");
10
11
  exports.OBJECT_TYPES = {
11
- textInput: constants_6.TEXT_INPUT_OBJECT_ATTRIBUTES.type,
12
+ textInput: constants_7.TEXT_INPUT_OBJECT_ATTRIBUTES.type,
12
13
  curvedText: constants_3.CURVED_TEXT_OBJECT_ATTRIBUTES.type,
13
14
  clipart: constants_2.CLIPART_OBJECT_ATTRIBUTES.type,
14
15
  imagePlaceHolder: constants_4.IMAGE_PLACEHOLDER_OBJECT_ATTRIBUTES.type,
15
16
  activeSelection: "activeSelection",
16
17
  layoutGroup: constants_5.LAYOUT_GROUP_OBJECT_ATTRIBUTES.type,
17
18
  calendar: constants_1.CALENDAR_OBJECT_ATTRIBUTES.type,
19
+ qrCode: constants_6.QR_CODE_OBJECT_ATTRIBUTES.type,
18
20
  };
19
21
  exports.MAX_TEXTURE_SIZE = 20000;
package/lib/index.d.ts CHANGED
@@ -4,7 +4,8 @@ import Clipart from "./ClipartObject";
4
4
  import ImagePlaceholder from "./ImagePlaceholderObject";
5
5
  import LayoutGroup from "./LayoutGroupObject";
6
6
  import Calendar from "./CalendarObject";
7
+ import QRCode from "./QRCodeObject";
7
8
  import fabric, { lockObject, lockAllObjects, loadImageFromFile, loadImageFromUrl, getObject, asyncGetObject } from "./utils";
8
9
  import { OBJECT_TYPES } from "./constants";
9
10
  import { IMAGE_FILTER_TYPES } from "./ImagePlaceholderObject/constants";
10
- export { fabric, TextInput, Clipart, ImagePlaceholder, LayoutGroup, CurvedText, Calendar, lockObject, lockAllObjects, loadImageFromFile, loadImageFromUrl, getObject, asyncGetObject, OBJECT_TYPES, IMAGE_FILTER_TYPES, };
11
+ export { fabric, TextInput, Clipart, ImagePlaceholder, LayoutGroup, CurvedText, Calendar, QRCode, lockObject, lockAllObjects, loadImageFromFile, loadImageFromUrl, getObject, asyncGetObject, OBJECT_TYPES, IMAGE_FILTER_TYPES, };
package/lib/index.js CHANGED
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.IMAGE_FILTER_TYPES = exports.OBJECT_TYPES = exports.asyncGetObject = exports.getObject = exports.loadImageFromUrl = exports.loadImageFromFile = exports.lockAllObjects = exports.lockObject = exports.Calendar = exports.CurvedText = exports.LayoutGroup = exports.ImagePlaceholder = exports.Clipart = exports.TextInput = exports.fabric = void 0;
29
+ exports.IMAGE_FILTER_TYPES = exports.OBJECT_TYPES = exports.asyncGetObject = exports.getObject = exports.loadImageFromUrl = exports.loadImageFromFile = exports.lockAllObjects = exports.lockObject = exports.QRCode = exports.Calendar = exports.CurvedText = exports.LayoutGroup = exports.ImagePlaceholder = exports.Clipart = exports.TextInput = exports.fabric = void 0;
30
30
  const TextInputObject_1 = __importDefault(require("./TextInputObject"));
31
31
  exports.TextInput = TextInputObject_1.default;
32
32
  const CurvedTextObject_1 = __importDefault(require("./CurvedTextObject"));
@@ -39,6 +39,8 @@ const LayoutGroupObject_1 = __importDefault(require("./LayoutGroupObject"));
39
39
  exports.LayoutGroup = LayoutGroupObject_1.default;
40
40
  const CalendarObject_1 = __importDefault(require("./CalendarObject"));
41
41
  exports.Calendar = CalendarObject_1.default;
42
+ const QRCodeObject_1 = __importDefault(require("./QRCodeObject"));
43
+ exports.QRCode = QRCodeObject_1.default;
42
44
  const utils_1 = __importStar(require("./utils"));
43
45
  exports.fabric = utils_1.default;
44
46
  Object.defineProperty(exports, "lockObject", { enumerable: true, get: function () { return utils_1.lockObject; } });
@@ -6,6 +6,7 @@ import { ImageFilterType } from "../ImagePlaceholderObject/interfaces";
6
6
  import CurvedText from "../CurvedTextObject";
7
7
  import "./control.util";
8
8
  import Calendar from "../CalendarObject";
9
+ import QRCode from "../QRCodeObject";
9
10
  export declare const loadFontFromUrl: (url: string, name: string) => Promise<void>;
10
11
  export declare const isFontLoaded: (name: string) => boolean;
11
12
  export declare const loadImageFromFile: (image: File) => Promise<fabric.Image>;
@@ -19,8 +20,8 @@ export declare const lockAllObjects: (canvas: fabric.Canvas, locked: boolean, se
19
20
  export declare const getObject: (object: any, options?: {
20
21
  isOriginal?: boolean;
21
22
  hideStroke?: boolean;
22
- }) => Clipart | ImagePlaceholder | CurvedText | Calendar | TextInput | undefined;
23
+ }) => Clipart | ImagePlaceholder | CurvedText | Calendar | QRCode | TextInput | undefined;
23
24
  export declare const asyncGetObject: (object: any, options?: {
24
25
  isOriginal?: boolean;
25
- }) => Promise<Clipart | ImagePlaceholder | CurvedText | Calendar | TextInput | undefined>;
26
+ }) => Promise<Clipart | ImagePlaceholder | CurvedText | Calendar | QRCode | TextInput | undefined>;
26
27
  export default fabric;
@@ -32,6 +32,7 @@ const TextInputObject_1 = __importStar(require("../TextInputObject"));
32
32
  const CurvedTextObject_1 = __importStar(require("../CurvedTextObject"));
33
33
  require("./control.util");
34
34
  const CalendarObject_1 = __importStar(require("../CalendarObject"));
35
+ const QRCodeObject_1 = __importStar(require("../QRCodeObject"));
35
36
  const loadFontFromUrl = async (url, name) => {
36
37
  if (!name || !url)
37
38
  return;
@@ -166,6 +167,13 @@ const getObject = (object, options) => {
166
167
  });
167
168
  return calendarObject;
168
169
  }
170
+ case constants_1.OBJECT_TYPES.qrCode: {
171
+ const qrCodeObject = new QRCodeObject_1.default({
172
+ ...object,
173
+ ...options,
174
+ });
175
+ return qrCodeObject;
176
+ }
169
177
  default:
170
178
  return;
171
179
  }
@@ -215,11 +223,23 @@ const asyncGetObject = async (object, options) => {
215
223
  ...object,
216
224
  isOriginal: options?.isOriginal,
217
225
  });
218
- if (object?.calendarSettings?.url) {
219
- await calendarObject?.loadImage?.(object?.calendarSettings?.url);
226
+ const url = object?.calendarSettings?.url;
227
+ if (url) {
228
+ await calendarObject?.loadImage?.(url);
220
229
  }
221
230
  return calendarObject;
222
231
  }
232
+ case constants_1.OBJECT_TYPES.qrCode: {
233
+ const qrCodeObject = new QRCodeObject_1.default({
234
+ ...object,
235
+ isOriginal: options?.isOriginal,
236
+ });
237
+ const url = object?.qrCodeSettings?.url;
238
+ if (url) {
239
+ await qrCodeObject?.loadImage?.(url);
240
+ }
241
+ return qrCodeObject;
242
+ }
223
243
  default:
224
244
  return;
225
245
  }
@@ -243,6 +263,9 @@ fabric_1.fabric.Object.prototype.toObject = (function (toObject) {
243
263
  case constants_1.OBJECT_TYPES.calendar: {
244
264
  return fabric_1.fabric.util.object.extend(toObject.call(this), (0, CalendarObject_1.toCalendarObject)(this));
245
265
  }
266
+ case constants_1.OBJECT_TYPES.qrCode: {
267
+ return fabric_1.fabric.util.object.extend(toObject.call(this), (0, QRCodeObject_1.toQRCodeObject)(this));
268
+ }
246
269
  default: {
247
270
  return {};
248
271
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "customized-fabric",
3
- "version": "1.9.3",
3
+ "version": "1.9.5",
4
4
  "description": "Customized fabric",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",