labellife-design-tool 0.1.0

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 (85) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +128 -0
  3. package/dist/lib/CanvasEditor.d.ts +8 -0
  4. package/dist/lib/CanvasEditor.d.ts.map +1 -0
  5. package/dist/lib/components/Header.d.ts +17 -0
  6. package/dist/lib/components/Header.d.ts.map +1 -0
  7. package/dist/lib/components/LeftMenu.d.ts +13 -0
  8. package/dist/lib/components/LeftMenu.d.ts.map +1 -0
  9. package/dist/lib/components/TemplateInputModal.d.ts +10 -0
  10. package/dist/lib/components/TemplateInputModal.d.ts.map +1 -0
  11. package/dist/lib/components/header/AppName.d.ts +4 -0
  12. package/dist/lib/components/header/AppName.d.ts.map +1 -0
  13. package/dist/lib/components/header/ExportButton.d.ts +8 -0
  14. package/dist/lib/components/header/ExportButton.d.ts.map +1 -0
  15. package/dist/lib/components/header/HistoryControls.d.ts +10 -0
  16. package/dist/lib/components/header/HistoryControls.d.ts.map +1 -0
  17. package/dist/lib/components/header/ZoomControls.d.ts +10 -0
  18. package/dist/lib/components/header/ZoomControls.d.ts.map +1 -0
  19. package/dist/lib/components/sidebar/RightSidebar.d.ts +16 -0
  20. package/dist/lib/components/sidebar/RightSidebar.d.ts.map +1 -0
  21. package/dist/lib/config.d.ts +11 -0
  22. package/dist/lib/config.d.ts.map +1 -0
  23. package/dist/lib/constants/CanvasPresets.d.ts +6 -0
  24. package/dist/lib/constants/CanvasPresets.d.ts.map +1 -0
  25. package/dist/lib/constants/DefaultColors.d.ts +2 -0
  26. package/dist/lib/constants/DefaultColors.d.ts.map +1 -0
  27. package/dist/lib/constants/FontFamilies.d.ts +2 -0
  28. package/dist/lib/constants/FontFamilies.d.ts.map +1 -0
  29. package/dist/lib/constants/index.d.ts +4 -0
  30. package/dist/lib/constants/index.d.ts.map +1 -0
  31. package/dist/lib/elements/EditableTextElement.d.ts +10 -0
  32. package/dist/lib/elements/EditableTextElement.d.ts.map +1 -0
  33. package/dist/lib/elements/ShapeElement.d.ts +10 -0
  34. package/dist/lib/elements/ShapeElement.d.ts.map +1 -0
  35. package/dist/lib/elements/UrlImageElement.d.ts +10 -0
  36. package/dist/lib/elements/UrlImageElement.d.ts.map +1 -0
  37. package/dist/lib/elements/index.d.ts +4 -0
  38. package/dist/lib/elements/index.d.ts.map +1 -0
  39. package/dist/lib/index.css +1109 -0
  40. package/dist/lib/index.js +4052 -0
  41. package/dist/lib/lib/index.d.ts +11 -0
  42. package/dist/lib/lib/index.d.ts.map +1 -0
  43. package/dist/lib/panels/BackgroundPanel.d.ts +11 -0
  44. package/dist/lib/panels/BackgroundPanel.d.ts.map +1 -0
  45. package/dist/lib/panels/DesignPanel.d.ts +15 -0
  46. package/dist/lib/panels/DesignPanel.d.ts.map +1 -0
  47. package/dist/lib/panels/ElementPanel.d.ts +8 -0
  48. package/dist/lib/panels/ElementPanel.d.ts.map +1 -0
  49. package/dist/lib/panels/ExportPanel.d.ts +10 -0
  50. package/dist/lib/panels/ExportPanel.d.ts.map +1 -0
  51. package/dist/lib/panels/ImagePanel.d.ts +13 -0
  52. package/dist/lib/panels/ImagePanel.d.ts.map +1 -0
  53. package/dist/lib/panels/TextPanel.d.ts +11 -0
  54. package/dist/lib/panels/TextPanel.d.ts.map +1 -0
  55. package/dist/lib/panels/VariablesPanel.d.ts +11 -0
  56. package/dist/lib/panels/VariablesPanel.d.ts.map +1 -0
  57. package/dist/lib/types/CanvasDesign.d.ts +13 -0
  58. package/dist/lib/types/CanvasDesign.d.ts.map +1 -0
  59. package/dist/lib/types/CanvasEditor.d.ts +6 -0
  60. package/dist/lib/types/CanvasEditor.d.ts.map +1 -0
  61. package/dist/lib/types/CanvasElement.d.ts +80 -0
  62. package/dist/lib/types/CanvasElement.d.ts.map +1 -0
  63. package/dist/lib/types/Config.d.ts +19 -0
  64. package/dist/lib/types/Config.d.ts.map +1 -0
  65. package/dist/lib/types/Feature.d.ts +4 -0
  66. package/dist/lib/types/Feature.d.ts.map +1 -0
  67. package/dist/lib/types/MenuElement.d.ts +7 -0
  68. package/dist/lib/types/MenuElement.d.ts.map +1 -0
  69. package/dist/lib/types/Page.d.ts +9 -0
  70. package/dist/lib/types/Page.d.ts.map +1 -0
  71. package/dist/lib/types/Panel.d.ts +17 -0
  72. package/dist/lib/types/Panel.d.ts.map +1 -0
  73. package/dist/lib/types/ShapeType.d.ts +2 -0
  74. package/dist/lib/types/ShapeType.d.ts.map +1 -0
  75. package/dist/lib/types/ToolType.d.ts +3 -0
  76. package/dist/lib/types/ToolType.d.ts.map +1 -0
  77. package/dist/lib/types/UnsplashSearchResult.d.ts +11 -0
  78. package/dist/lib/types/UnsplashSearchResult.d.ts.map +1 -0
  79. package/dist/lib/types/UserInput.d.ts +21 -0
  80. package/dist/lib/types/UserInput.d.ts.map +1 -0
  81. package/dist/lib/types/index.d.ts +12 -0
  82. package/dist/lib/types/index.d.ts.map +1 -0
  83. package/dist/lib/utils/exportImportUtils.d.ts +24 -0
  84. package/dist/lib/utils/exportImportUtils.d.ts.map +1 -0
  85. package/package.json +91 -0
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Canvas Editor Library
3
+ * Main entry point for npm package
4
+ */
5
+ export { default as CanvasEditor } from '../CanvasEditor';
6
+ export * from '../types';
7
+ export { exportToPNG, exportToJPG, exportToJSON, importFromJSON, findRequiredInputs, replaceUserInputs, convertTemplateToCanvasDesign, } from '../utils/exportImportUtils';
8
+ export * from '../elements';
9
+ export { FONT_FAMILIES, DEFAULT_COLORS, CANVAS_PRESETS } from '../constants';
10
+ export { setUnsplashAccessKey, getUnsplashAccessKey } from '../config';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG1D,cAAc,UAAU,CAAC;AAGzB,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,4BAA4B,CAAC;AAGpC,cAAc,aAAa,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG7E,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { CanvasDesign, Page } from '../types';
3
+ interface BackgroundPanelProps {
4
+ design: CanvasDesign;
5
+ currentPage: Page;
6
+ setDesign: (design: CanvasDesign | ((prev: CanvasDesign) => CanvasDesign)) => void;
7
+ onSetUnsplashBackground: () => void;
8
+ }
9
+ declare const BackgroundPanel: React.FC<BackgroundPanelProps>;
10
+ export default BackgroundPanel;
11
+ //# sourceMappingURL=BackgroundPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackgroundPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/BackgroundPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAE9C,UAAU,oBAAoB;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,CAAC,KAAK,IAAI,CAAC;IACnF,uBAAuB,EAAE,MAAM,IAAI,CAAC;CACrC;AAED,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA4DnD,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { CanvasDesign, Page, CanvasElement } from '../types';
3
+ import { Config } from '../types/Config';
4
+ interface DesignPanelProps {
5
+ design: CanvasDesign;
6
+ currentPage: Page;
7
+ selectedElement: CanvasElement | undefined | null;
8
+ setDesign: (design: CanvasDesign | ((prev: CanvasDesign) => CanvasDesign)) => void;
9
+ updateElement: (id: string, attrs: Partial<CanvasElement>) => void;
10
+ onSetUnsplashBackground: () => void;
11
+ config?: Config;
12
+ }
13
+ declare const DesignPanel: React.FC<DesignPanelProps>;
14
+ export default DesignPanel;
15
+ //# sourceMappingURL=DesignPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/DesignPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG7D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,UAAU,gBAAgB;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,IAAI,CAAC;IAClB,eAAe,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;IAClD,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,CAAC,KAAK,IAAI,CAAC;IACnF,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IACnE,uBAAuB,EAAE,MAAM,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA+H3C,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { ShapeType } from "../types";
3
+ interface ElementPanelProps {
4
+ onAddShape: (shapeType: ShapeType) => void;
5
+ }
6
+ declare const ElementPanel: React.FC<ElementPanelProps>;
7
+ export default ElementPanel;
8
+ //# sourceMappingURL=ElementPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElementPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/ElementPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,UAAU,iBAAiB;IACzB,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CAC5C;AAED,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAuI7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ interface ExportPanelProps {
3
+ onExportToPNG: () => void;
4
+ onExportToJPG: () => void;
5
+ onExportToJSON: () => void;
6
+ onImportJSON: () => void;
7
+ }
8
+ declare const ExportPanel: React.FC<ExportPanelProps>;
9
+ export default ExportPanel;
10
+ //# sourceMappingURL=ExportPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/ExportPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,gBAAgB;IACxB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqC3C,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import { CanvasElement } from "../types";
3
+ interface ImagePanelProps {
4
+ selectedElement: CanvasElement | undefined | null;
5
+ updateElement: (id: string, attrs: Partial<CanvasElement>) => void;
6
+ onUploadClick: () => void;
7
+ onUnsplashClick: () => void;
8
+ canvasWidth: number;
9
+ canvasHeight: number;
10
+ }
11
+ declare const ImagePanel: React.FC<ImagePanelProps>;
12
+ export default ImagePanel;
13
+ //# sourceMappingURL=ImagePanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImagePanel.d.ts","sourceRoot":"","sources":["../../../src/panels/ImagePanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAa,MAAM,UAAU,CAAC;AAIpD,UAAU,eAAe;IACvB,eAAe,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IACnE,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAiVzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import { CanvasElement, ToolType } from "../types";
3
+ interface TextPanelProps {
4
+ selectedElement: CanvasElement | undefined | null;
5
+ updateElement: (id: string, attrs: Partial<CanvasElement>) => void;
6
+ setTool: (tool: ToolType) => void;
7
+ onAddText: () => void;
8
+ }
9
+ declare const TextPanel: React.FC<TextPanelProps>;
10
+ export default TextPanel;
11
+ //# sourceMappingURL=TextPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/TextPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAI3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAanD,UAAU,cAAc;IACtB,eAAe,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IACnE,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAGD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAsSvC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { Config } from '../types/Config';
3
+ import { CanvasDesign } from '../types';
4
+ interface VariablesPanelProps {
5
+ config: Config;
6
+ design: CanvasDesign;
7
+ setDesign: (design: CanvasDesign | ((prev: CanvasDesign) => CanvasDesign)) => void;
8
+ }
9
+ declare const VariablesPanel: React.FC<VariablesPanelProps>;
10
+ export default VariablesPanel;
11
+ //# sourceMappingURL=VariablesPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VariablesPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/VariablesPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,CAAC,KAAK,IAAI,CAAC;CACpF;AAED,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAmEjD,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Page } from './Page';
2
+ import { UserInputConfig } from './UserInput';
3
+ export interface CanvasDesign {
4
+ id: string;
5
+ name: string;
6
+ width: number;
7
+ height: number;
8
+ pages: Page[];
9
+ fonts: string[];
10
+ colors: string[];
11
+ templateInputs?: UserInputConfig[];
12
+ }
13
+ //# sourceMappingURL=CanvasDesign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasDesign.d.ts","sourceRoot":"","sources":["../../../src/types/CanvasDesign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,eAAe,EAAE,CAAC;CACpC"}
@@ -0,0 +1,6 @@
1
+ import { Feature } from "./Feature";
2
+ export interface CanvasEditor {
3
+ name: string;
4
+ enabledFeatures: Array<Feature>;
5
+ }
6
+ //# sourceMappingURL=CanvasEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasEditor.d.ts","sourceRoot":"","sources":["../../../src/types/CanvasEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;CAClC"}
@@ -0,0 +1,80 @@
1
+ import { ShapeType } from './ShapeType';
2
+ export interface CanvasElement {
3
+ id: string;
4
+ type: "text" | "image" | "shape" | "line";
5
+ name: string;
6
+ x: number;
7
+ y: number;
8
+ width?: number;
9
+ height?: number;
10
+ rotation: number;
11
+ scaleX?: number;
12
+ scaleY?: number;
13
+ visible: boolean;
14
+ locked: boolean;
15
+ opacity: number;
16
+ text?: string;
17
+ fontSize?: number;
18
+ fontFamily?: string;
19
+ fontStyle?: string;
20
+ textDecoration?: string;
21
+ fill?: string;
22
+ stroke?: string;
23
+ strokeWidth?: number;
24
+ align?: string;
25
+ verticalAlign?: string;
26
+ lineHeight?: number;
27
+ letterSpacing?: number;
28
+ strikethrough?: boolean;
29
+ textCase?: "uppercase" | "lowercase" | "capitalize" | "none";
30
+ textWidth?: number;
31
+ textHeight?: number;
32
+ src?: string;
33
+ cropX?: number;
34
+ cropY?: number;
35
+ cropWidth?: number;
36
+ cropHeight?: number;
37
+ cornerRadius?: number;
38
+ filters?: {
39
+ blur?: number;
40
+ brightness?: number;
41
+ contrast?: number;
42
+ saturation?: number;
43
+ hue?: number;
44
+ sepia?: boolean;
45
+ grayscale?: boolean;
46
+ };
47
+ mask?: {
48
+ type: ShapeType;
49
+ };
50
+ shapeType?: ShapeType;
51
+ innerRadius?: number;
52
+ outerRadius?: number;
53
+ points?: number[];
54
+ numPoints?: number;
55
+ tension?: number;
56
+ closed?: boolean;
57
+ sides?: number;
58
+ pointerLength?: number;
59
+ pointerWidth?: number;
60
+ dash?: number[];
61
+ pathData?: string;
62
+ pathNaturalWidth?: number;
63
+ pathNaturalHeight?: number;
64
+ userInput?: {
65
+ required: boolean;
66
+ type: "image" | "text" | "number" | "color" | "url";
67
+ id: string;
68
+ label: string;
69
+ property?: string;
70
+ placeholder?: string;
71
+ defaultValue?: string;
72
+ accept?: string;
73
+ maxSize?: number;
74
+ maxLength?: number;
75
+ minLength?: number;
76
+ helpText?: string;
77
+ order?: number;
78
+ };
79
+ }
80
+ //# sourceMappingURL=CanvasElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasElement.d.ts","sourceRoot":"","sources":["../../../src/types/CanvasElement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface Config {
2
+ export?: {
3
+ png?: boolean;
4
+ jpg?: boolean;
5
+ json?: boolean;
6
+ };
7
+ multiPage?: boolean;
8
+ designSize?: {
9
+ width?: boolean;
10
+ height?: boolean;
11
+ };
12
+ variables?: boolean;
13
+ steps?: {
14
+ name: string;
15
+ type: "text" | "image";
16
+ variable: string;
17
+ }[];
18
+ }
19
+ //# sourceMappingURL=Config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../src/types/Config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;CACL"}
@@ -0,0 +1,4 @@
1
+ export interface Feature {
2
+ name: "pages" | "export" | "import" | "text" | "image" | "shape";
3
+ }
4
+ //# sourceMappingURL=Feature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Feature.d.ts","sourceRoot":"","sources":["../../../src/types/Feature.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;CACnE"}
@@ -0,0 +1,7 @@
1
+ export interface MenuElement {
2
+ icon: string;
3
+ name: string;
4
+ label: string;
5
+ enabled: boolean;
6
+ }
7
+ //# sourceMappingURL=MenuElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuElement.d.ts","sourceRoot":"","sources":["../../../src/types/MenuElement.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CACpB"}
@@ -0,0 +1,9 @@
1
+ import { CanvasElement } from "./CanvasElement";
2
+ export interface Page {
3
+ id: string;
4
+ name: string;
5
+ elements: CanvasElement[];
6
+ background: string;
7
+ backgroundImageObject?: HTMLImageElement;
8
+ }
9
+ //# sourceMappingURL=Page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Page.d.ts","sourceRoot":"","sources":["../../../src/types/Page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,gBAAgB,CAAC;CAC1C"}
@@ -0,0 +1,17 @@
1
+ import { CanvasDesign } from "./CanvasDesign";
2
+ export interface Panel {
3
+ icon: string;
4
+ name: string;
5
+ design: CanvasDesign;
6
+ enabled: boolean;
7
+ }
8
+ import React from 'react';
9
+ export interface PanelConfig {
10
+ id: string;
11
+ title: string;
12
+ icon?: React.ElementType;
13
+ component: React.ComponentType<any>;
14
+ props?: Record<string, any>;
15
+ }
16
+ export type ActivePanelId = "elements" | "design" | "text" | "image" | "export" | string;
17
+ //# sourceMappingURL=Panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../src/types/Panel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,WAAW,KAAK;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAaD,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ export type ShapeType = "rect" | "circle" | "triangle" | "star" | "polygon" | "line" | "arrow" | "pentagon" | "octagon" | "nonagon" | "decagon" | "hendecagon" | "dodecagon" | "rectangle" | "right-triangle" | "isosceles-triangle" | "scalene-triangle" | "dashed-line" | "dotted-line" | "custom-path";
2
+ //# sourceMappingURL=ShapeType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShapeType.d.ts","sourceRoot":"","sources":["../../../src/types/ShapeType.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,QAAQ,GACR,UAAU,GACV,MAAM,GACN,SAAS,GACT,MAAM,GACN,OAAO,GACP,UAAU,GACV,SAAS,GACT,SAAS,GACT,SAAS,GACT,YAAY,GACZ,WAAW,GACX,WAAW,GACX,gBAAgB,GAChB,oBAAoB,GACpB,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export interface ToolType {
2
+ }
3
+ //# sourceMappingURL=ToolType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolType.d.ts","sourceRoot":"","sources":["../../../src/types/ToolType.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;CACxB"}
@@ -0,0 +1,11 @@
1
+ export interface UnsplashSearchResult {
2
+ id: string;
3
+ urls: {
4
+ regular: string;
5
+ thumb: string;
6
+ };
7
+ user: {
8
+ name: string;
9
+ };
10
+ }
11
+ //# sourceMappingURL=UnsplashSearchResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnsplashSearchResult.d.ts","sourceRoot":"","sources":["../../../src/types/UnsplashSearchResult.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH"}
@@ -0,0 +1,21 @@
1
+ export interface UserInputConfig {
2
+ required: boolean;
3
+ type: "image" | "text" | "number" | "color" | "url";
4
+ id: string;
5
+ label: string;
6
+ property?: string;
7
+ placeholder?: string;
8
+ defaultValue?: string;
9
+ accept?: string;
10
+ maxSize?: number;
11
+ maxLength?: number;
12
+ minLength?: number;
13
+ helpText?: string;
14
+ order?: number;
15
+ }
16
+ export interface UserInputItem {
17
+ config: UserInputConfig;
18
+ elementId: string;
19
+ elementType: string;
20
+ }
21
+ //# sourceMappingURL=UserInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserInput.d.ts","sourceRoot":"","sources":["../../../src/types/UserInput.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,12 @@
1
+ export * from './CanvasDesign';
2
+ export * from './CanvasEditor';
3
+ export * from './CanvasElement';
4
+ export * from './Feature';
5
+ export * from './MenuElement';
6
+ export * from './Page';
7
+ export * from './Panel';
8
+ export * from './ToolType';
9
+ export * from './UnsplashSearchResult';
10
+ export * from './ShapeType';
11
+ export * from './UserInput';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type CanvasDesign } from "../types/CanvasDesign";
2
+ import { type UserInputItem } from "../types/UserInput";
3
+ import Konva from "konva";
4
+ /**
5
+ * Converts a template JSON format to CanvasDesign format
6
+ * Handles differences like:
7
+ * - "children" instead of "elements" in pages
8
+ * - Missing top-level "id" and "name" fields
9
+ * - Other structural variations
10
+ */
11
+ export declare function convertTemplateToCanvasDesign(json: any): CanvasDesign;
12
+ /**
13
+ * Finds all elements that require user input
14
+ */
15
+ export declare function findRequiredInputs(design: CanvasDesign): UserInputItem[];
16
+ /**
17
+ * Replaces user input values in the design
18
+ */
19
+ export declare function replaceUserInputs(design: CanvasDesign, collectedInputs: Record<string, any>): CanvasDesign;
20
+ export declare const exportToPNG: (stage: Konva.Stage, design: CanvasDesign) => void;
21
+ export declare const exportToJPG: (stage: Konva.Stage, design: CanvasDesign) => void;
22
+ export declare const exportToJSON: (design: CanvasDesign) => void;
23
+ export declare const importFromJSON: (event: React.ChangeEvent<HTMLInputElement>, onLoad: (design: CanvasDesign) => void, onError: (message: string) => void, onInputsRequired?: (inputs: UserInputItem[], onComplete: (values: Record<string, any>) => void) => void) => void;
24
+ //# sourceMappingURL=exportImportUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportImportUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/exportImportUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,GAAG,GAAG,YAAY,CAkGrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,EAAE,CAsHxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACrC,YAAY,CAuDd;AAGD,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,CAAC,KAAK,EAAE,QAAQ,YAAY,SAanE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,CAAC,KAAK,EAAE,QAAQ,YAAY,SAiBnE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,YAAY,SAWhD,CAAC;AAEF,eAAO,MAAM,cAAc,GACvB,OAAO,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAC1C,QAAQ,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,EACtC,SAAS,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EAClC,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK,IAAI,SA0C1G,CAAC"}
package/package.json ADDED
@@ -0,0 +1,91 @@
1
+ {
2
+ "name": "labellife-design-tool",
3
+ "version": "0.1.0",
4
+ "description": "Professional canvas editor built with React, TypeScript, and Konva",
5
+ "main": "./dist/lib/index.js",
6
+ "module": "./dist/lib/index.js",
7
+ "types": "./dist/lib/lib/index.d.ts",
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/lib/index.js",
12
+ "types": "./dist/lib/lib/index.d.ts"
13
+ },
14
+ "./styles": "./dist/lib/index.css"
15
+ },
16
+ "files": [
17
+ "dist/lib",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "keywords": [
22
+ "canvas",
23
+ "editor",
24
+ "design",
25
+ "konva",
26
+ "react",
27
+ "typescript",
28
+ "design-editor",
29
+ "graphics-editor"
30
+ ],
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/LabelLife/drawing-tool"
34
+ },
35
+ "license": "MIT",
36
+ "scripts": {
37
+ "dev": "bun run --hot src/index.tsx",
38
+ "build": "bun run build:lib && bun run build:app",
39
+ "build:lib": "bun run build:lib:tsc && bun run build:lib:bundle",
40
+ "build:lib:tsc": "tsc -p tsconfig.lib.json",
41
+ "build:lib:bundle": "bun build src/lib/index.ts --outdir dist/lib --format esm --target browser --external react --external react-dom --external react-konva --external konva --external lucide-react --external i18next --external react-i18next --external i18next-browser-languagedetector --external react-image-crop",
42
+ "build:app": "bun build src/index.tsx --outdir dist/app --minify --splitting --target browser",
43
+ "build:css": "bun run scripts/build-css.ts",
44
+ "build:lib:all": "bun run build:lib && bun run build:css",
45
+ "start": "bun run dist/app/server.js",
46
+ "preview": "bun run build:app && bun run start",
47
+ "prepublishOnly": "bun run build:lib:all",
48
+ "test": "vitest",
49
+ "test:watch": "bun run test --watch",
50
+ "test:coverage": "bun run test --coverage",
51
+ "lint": "eslint src --ext .ts,.tsx",
52
+ "lint:fix": "eslint src --ext .ts,.tsx --fix",
53
+ "type-check": "tsc --noEmit",
54
+ "format": "prettier --write \"src/**/*.{ts,tsx,json,css}\"",
55
+ "format:check": "prettier --check \"src/**/*.{ts,tsx,json,css}\"",
56
+ "clean": "rm -rf dist coverage .turbo",
57
+ "docker:build": "docker build -t labellife-design-tool .",
58
+ "docker:run": "docker run -p 3000:3000 labellife-design-tool",
59
+ "docker:dev": "docker-compose --profile development up",
60
+ "docker:prod": "docker-compose --profile production up -d",
61
+ "docker:down": "docker-compose down"
62
+ },
63
+ "peerDependencies": {
64
+ "react": "^18.0.0 || ^19.0.0",
65
+ "react-dom": "^18.0.0 || ^19.0.0"
66
+ },
67
+ "dependencies": {
68
+ "@types/jest": "^30.0.0",
69
+ "bun-plugin-tailwind": "^0.0.14",
70
+ "i18next": "^23.12.2",
71
+ "i18next-browser-languagedetector": "^8.0.0",
72
+ "konva": "^9.3.20",
73
+ "lucide-react": "^0.511.0",
74
+ "react-i18next": "^15.0.0",
75
+ "react-image-crop": "^11.0.10",
76
+ "react-konva": "^19.0.4",
77
+ "tailwindcss": "^4.0.6"
78
+ },
79
+ "devDependencies": {
80
+ "@tailwindcss/postcss": "^4.1.17",
81
+ "@testing-library/jest-dom": "^6.6.3",
82
+ "@testing-library/react": "^16.3.0",
83
+ "@types/bun": "latest",
84
+ "@types/react": "^19",
85
+ "@types/react-dom": "^19",
86
+ "@vitejs/plugin-react": "^4.6.0",
87
+ "jsdom": "^26.1.0",
88
+ "postcss": "^8.5.6",
89
+ "vitest": "^3.2.4"
90
+ }
91
+ }