labellife-design-tool 1.1.6 → 1.1.7

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/README.md CHANGED
@@ -174,6 +174,23 @@ store.activePage.addElement({
174
174
  // Load templates
175
175
  await store.loadJSON(templateData);
176
176
 
177
+ // Export to blob
178
+ const pngBlob = await store.toBlob('png');
179
+ const jpgBlob = await store.toBlob('jpg');
180
+
181
+ // Download the blob
182
+ const downloadBlob = (blob: Blob, filename: string) => {
183
+ const url = URL.createObjectURL(blob);
184
+ const a = document.createElement('a');
185
+ a.href = url;
186
+ a.download = filename;
187
+ a.click();
188
+ URL.revokeObjectURL(url);
189
+ };
190
+
191
+ downloadBlob(pngBlob, 'design.png');
192
+ downloadBlob(jpgBlob, 'design.jpg');
193
+
177
194
  // Use with CanvasEditor (optional)
178
195
  <CanvasEditor name="Editor" config={{ panels: ["text", "elements"] }} />
179
196
 
@@ -316,6 +333,9 @@ interface SimpleStore {
316
333
  updateDesign(updates: Partial<CanvasDesign>): void;
317
334
  loadJSON(jsonData: any): Promise<void>;
318
335
 
336
+ // Export operations
337
+ toBlob(type?: 'png' | 'jpg'): Promise<Blob>;
338
+
319
339
  // Events
320
340
  on(event: 'designChanged' | 'activePageChanged' | 'activePanelChanged', callback: Function): void;
321
341
  off(event: string): void;
@@ -3971,6 +3971,35 @@ class SimpleCanvasStore {
3971
3971
  this._activePanelId = panelId;
3972
3972
  this.emit("activePanelChanged", panelId);
3973
3973
  }
3974
+ async toBlob(type = "png") {
3975
+ return new Promise((resolve, reject) => {
3976
+ try {
3977
+ Promise.resolve().then(() => exports_exportImportUtils).then(({ canvasToBlob: canvasToBlob2 }) => {
3978
+ const canvas = document.createElement("canvas");
3979
+ canvas.width = this._design.width;
3980
+ canvas.height = this._design.height;
3981
+ const ctx = canvas.getContext("2d");
3982
+ if (!ctx) {
3983
+ reject(new Error("Failed to get canvas context"));
3984
+ return;
3985
+ }
3986
+ ctx.fillStyle = "#ffffff";
3987
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
3988
+ const mimeType = type === "jpg" ? "image/jpeg" : "image/png";
3989
+ const quality = type === "jpg" ? 0.9 : undefined;
3990
+ canvas.toBlob((blob) => {
3991
+ if (blob) {
3992
+ resolve(blob);
3993
+ } else {
3994
+ reject(new Error("Failed to create blob"));
3995
+ }
3996
+ }, mimeType, quality);
3997
+ });
3998
+ } catch (error) {
3999
+ reject(error);
4000
+ }
4001
+ });
4002
+ }
3974
4003
  async loadJSON(jsonData) {
3975
4004
  return new Promise((resolve, reject) => {
3976
4005
  try {
@@ -3971,6 +3971,35 @@ class SimpleCanvasStore {
3971
3971
  this._activePanelId = panelId;
3972
3972
  this.emit("activePanelChanged", panelId);
3973
3973
  }
3974
+ async toBlob(type = "png") {
3975
+ return new Promise((resolve, reject) => {
3976
+ try {
3977
+ Promise.resolve().then(() => exports_exportImportUtils).then(({ canvasToBlob: canvasToBlob2 }) => {
3978
+ const canvas = document.createElement("canvas");
3979
+ canvas.width = this._design.width;
3980
+ canvas.height = this._design.height;
3981
+ const ctx = canvas.getContext("2d");
3982
+ if (!ctx) {
3983
+ reject(new Error("Failed to get canvas context"));
3984
+ return;
3985
+ }
3986
+ ctx.fillStyle = "#ffffff";
3987
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
3988
+ const mimeType = type === "jpg" ? "image/jpeg" : "image/png";
3989
+ const quality = type === "jpg" ? 0.9 : undefined;
3990
+ canvas.toBlob((blob) => {
3991
+ if (blob) {
3992
+ resolve(blob);
3993
+ } else {
3994
+ reject(new Error("Failed to create blob"));
3995
+ }
3996
+ }, mimeType, quality);
3997
+ });
3998
+ } catch (error) {
3999
+ reject(error);
4000
+ }
4001
+ });
4002
+ }
3974
4003
  async loadJSON(jsonData) {
3975
4004
  return new Promise((resolve, reject) => {
3976
4005
  try {
@@ -28,6 +28,7 @@ export declare class SimpleCanvasStore {
28
28
  updateElement(elementId: string, updates: Partial<CanvasElement>): void;
29
29
  deleteElement(elementId: string): void;
30
30
  openSidePanel(panelId: string | null): void;
31
+ toBlob(type?: 'png' | 'jpg'): Promise<Blob>;
31
32
  loadJSON(jsonData: any): Promise<void>;
32
33
  }
33
34
  export declare const createSimpleStore: (initialDesign?: Partial<CanvasDesign>) => SimpleCanvasStore;
@@ -1 +1 @@
1
- {"version":3,"file":"simpleStore.d.ts","sourceRoot":"","sources":["../../../src/store/simpleStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACtD;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,UAAU,CAAkC;gBAExC,aAAa,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAyBjD,EAAE,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAI9E,GAAG,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC;IAI/C,OAAO,CAAC,IAAI;IAQZ,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,UAAU,IAAI,IAAI,GAAG,IAAI,CAE5B;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,aAAa,IAAI,MAAM,GAAG,IAAI,CAEjC;IAGD,SAAS,CAAC,MAAM,EAAE,YAAY;IAa9B,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC;IAM3C,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM;IAcrC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE;IAmB7B,aAAa,CAAC,MAAM,EAAE,MAAM;IAU5B,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;IAuB1C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;IAWhE,aAAa,CAAC,SAAS,EAAE,MAAM;IAY/B,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9B,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CA0B7C;AAGD,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,OAAO,CAAC,YAAY,CAAC,KAAG,iBAEzE,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC"}
1
+ {"version":3,"file":"simpleStore.d.ts","sourceRoot":"","sources":["../../../src/store/simpleStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACtD;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,UAAU,CAAkC;gBAExC,aAAa,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAyBjD,EAAE,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAI9E,GAAG,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC;IAI/C,OAAO,CAAC,IAAI;IAQZ,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,UAAU,IAAI,IAAI,GAAG,IAAI,CAE5B;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,aAAa,IAAI,MAAM,GAAG,IAAI,CAEjC;IAGD,SAAS,CAAC,MAAM,EAAE,YAAY;IAa9B,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC;IAM3C,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM;IAcrC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE;IAmB7B,aAAa,CAAC,MAAM,EAAE,MAAM;IAU5B,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;IAuB1C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;IAWhE,aAAa,CAAC,SAAS,EAAE,MAAM;IAY/B,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9B,MAAM,CAAC,IAAI,GAAE,KAAK,GAAG,KAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA2ClD,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CA0B7C;AAGD,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,OAAO,CAAC,YAAY,CAAC,KAAG,iBAEzE,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "labellife-design-tool",
3
- "version": "1.1.6",
3
+ "version": "1.1.7",
4
4
  "description": "Professional canvas editor built with React, TypeScript, and Konva",
5
5
  "main": "./dist/lib/lib/index.js",
6
6
  "module": "./dist/lib/lib/index.js",