@silly_yi/easyprint-designer 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.
@@ -0,0 +1,386 @@
1
+ interface PageConfig {
2
+ widthMm: number;
3
+ heightMm: number;
4
+ dpi: number;
5
+ background: string;
6
+ showGrid: boolean;
7
+ gridSizePx: number;
8
+ paper: string;
9
+ unit?: "mm" | "px" | "pt";
10
+ marginTop?: number;
11
+ marginBottom?: number;
12
+ marginLeft?: number;
13
+ marginRight?: number;
14
+ showPageNumber?: boolean;
15
+ pageNumberFormat?: string;
16
+ pageNumberPosition?: "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
17
+ pageNumberColor?: string;
18
+ pageNumberSize?: number;
19
+ }
20
+ type ElementType = "text" | "rect" | "line" | "image" | "table" | "barcode" | "qrcode";
21
+ interface TableCellConfig {
22
+ id: string;
23
+ text: string;
24
+ renderFn?: string;
25
+ rowSpan: number;
26
+ colSpan: number;
27
+ bgColor?: string;
28
+ color?: string;
29
+ hidden?: boolean;
30
+ fontFamily?: string;
31
+ fontSize?: number;
32
+ bold?: boolean;
33
+ italic?: boolean;
34
+ align?: "left" | "center" | "right";
35
+ valign?: "top" | "middle" | "bottom";
36
+ }
37
+ interface ElementConfig {
38
+ id: string;
39
+ type: ElementType;
40
+ x: number;
41
+ y: number;
42
+ w: number;
43
+ h: number;
44
+ rotation?: number;
45
+ locked?: boolean;
46
+ renderFn?: string;
47
+ fill?: string;
48
+ stroke?: string;
49
+ strokeWidth?: number;
50
+ strokeStyle?: "solid" | "dashed" | "dotted";
51
+ borderRadius?: number;
52
+ text?: string;
53
+ fontFamily?: string;
54
+ fontSize?: number;
55
+ color?: string;
56
+ align?: "left" | "center" | "right";
57
+ valign?: "top" | "middle" | "bottom";
58
+ bold?: boolean;
59
+ italic?: boolean;
60
+ src?: string;
61
+ objectFit?: "fill" | "contain" | "cover";
62
+ rows?: number;
63
+ cols?: number;
64
+ headerRows?: number;
65
+ dataRowRenderFn?: string;
66
+ showSummaryRow?: boolean;
67
+ summaryColumns?: number[];
68
+ borderColor?: string;
69
+ borderWidth?: number;
70
+ borderStyle?: "solid" | "dashed" | "dotted" | "none";
71
+ cells?: TableCellConfig[][];
72
+ colWidths?: number[];
73
+ rowHeights?: number[];
74
+ value?: string;
75
+ narrow?: number;
76
+ wide?: number;
77
+ quietZone?: number;
78
+ eccLevel?: "L" | "M" | "Q" | "H";
79
+ darkColor?: string;
80
+ lightColor?: string;
81
+ margin?: number;
82
+ }
83
+ interface DesignerOptions {
84
+ paper?: string;
85
+ pageWidthMm?: number;
86
+ pageHeightMm?: number;
87
+ dpi?: number;
88
+ gridSizePx?: number;
89
+ onSelect?: (el: ElementConfig | null) => void;
90
+ onChange?: (config: DesignerConfig) => void;
91
+ }
92
+ interface DesignerConfig {
93
+ version: number;
94
+ page: PageConfig;
95
+ elements: ElementConfig[];
96
+ }
97
+ interface PreviewerOptions$1 {
98
+ data?: any;
99
+ }
100
+ interface Point {
101
+ x: number;
102
+ y: number;
103
+ }
104
+ interface Rect {
105
+ x: number;
106
+ y: number;
107
+ w: number;
108
+ h: number;
109
+ }
110
+
111
+ declare const PAPER_PRESETS: {
112
+ key: string;
113
+ label: string;
114
+ wMm: number;
115
+ hMm: number;
116
+ }[];
117
+ declare const CODE39_PATTERNS: {
118
+ [key: string]: string;
119
+ };
120
+
121
+ declare class Renderer {
122
+ ctx: CanvasRenderingContext2D;
123
+ imageCache: {
124
+ [key: string]: HTMLImageElement;
125
+ };
126
+ lastDpiScale: number;
127
+ constructor(ctx: CanvasRenderingContext2D);
128
+ setDpiScale(scale: number): void;
129
+ getImage(src: string, onLoad?: () => void): HTMLImageElement | null;
130
+ clear(w: number, h: number): void;
131
+ drawGrid(page: PageConfig, w: number, h: number): void;
132
+ drawElement(el: ElementConfig, onInvalidate?: () => void): void;
133
+ drawGuideLines(guides: {
134
+ type: 'h' | 'v';
135
+ pos: number;
136
+ hideLine?: boolean;
137
+ distanceLines?: {
138
+ start: number;
139
+ end: number;
140
+ valuePx: number;
141
+ }[];
142
+ }[], w: number, h: number, unit?: "mm" | "px" | "pt", dpi?: number): void;
143
+ drawText(el: ElementConfig): void;
144
+ wrapText(ctx: CanvasRenderingContext2D, text: string, maxWidth: number): string[];
145
+ drawRect(el: ElementConfig): void;
146
+ drawLine(el: ElementConfig): void;
147
+ drawImage(el: ElementConfig, onInvalidate?: () => void): void;
148
+ drawTable(el: ElementConfig): void;
149
+ drawBarcode(el: ElementConfig): void;
150
+ drawQRCode(el: ElementConfig, onInvalidate?: () => void): void;
151
+ }
152
+
153
+ declare class Designer {
154
+ options: DesignerOptions;
155
+ $container: JQuery;
156
+ $root: JQuery;
157
+ $left: JQuery;
158
+ $center: JQuery;
159
+ $right: JQuery;
160
+ $toolbar: JQuery;
161
+ $stageScroll: JQuery;
162
+ $stage: JQuery;
163
+ $pageWrap: JQuery;
164
+ $page: JQuery;
165
+ $canvas: JQuery;
166
+ $overlay: JQuery;
167
+ $selection: JQuery;
168
+ $props: JQuery;
169
+ $layers: JQuery;
170
+ $contextMenu: JQuery;
171
+ page: PageConfig;
172
+ elements: ElementConfig[];
173
+ selectedIds: string[];
174
+ groupRotation: number;
175
+ tool: string;
176
+ zoom: number;
177
+ drag: {
178
+ mode: "move";
179
+ startX: number;
180
+ startY: number;
181
+ elIds: string[];
182
+ origins: {
183
+ [id: string]: {
184
+ x: number;
185
+ y: number;
186
+ w: number;
187
+ h: number;
188
+ };
189
+ };
190
+ } | null;
191
+ resize: {
192
+ handle: string;
193
+ startX: number;
194
+ startY: number;
195
+ elIds: string[];
196
+ origins: {
197
+ [id: string]: {
198
+ x: number;
199
+ y: number;
200
+ w: number;
201
+ h: number;
202
+ rotation: number;
203
+ fontSize?: number;
204
+ };
205
+ };
206
+ groupOrigin?: {
207
+ x: number;
208
+ y: number;
209
+ w: number;
210
+ h: number;
211
+ };
212
+ } | null;
213
+ rotate: {
214
+ startAngle: number;
215
+ startRotations: {
216
+ [id: string]: number;
217
+ };
218
+ elIds: string[];
219
+ cx: number;
220
+ cy: number;
221
+ origins?: {
222
+ [id: string]: {
223
+ x: number;
224
+ y: number;
225
+ };
226
+ };
227
+ groupRect?: {
228
+ w: number;
229
+ h: number;
230
+ };
231
+ currentDelta?: number;
232
+ groupStartAngle?: number;
233
+ } | null;
234
+ tableSelect: {
235
+ elId: string;
236
+ startR: number;
237
+ startC: number;
238
+ currentR: number;
239
+ currentC: number;
240
+ } | null;
241
+ tableResize: {
242
+ elId: string;
243
+ type: 'col' | 'row';
244
+ index: number;
245
+ startX: number;
246
+ startY: number;
247
+ originalSize: number;
248
+ nextOriginalSize?: number;
249
+ } | null;
250
+ tableEditMode: string | null;
251
+ marquee: {
252
+ startX: number;
253
+ startY: number;
254
+ currentX: number;
255
+ currentY: number;
256
+ } | null;
257
+ guideLines: {
258
+ type: 'h' | 'v';
259
+ pos: number;
260
+ hideLine?: boolean;
261
+ distanceLines?: {
262
+ start: number;
263
+ end: number;
264
+ valuePx: number;
265
+ }[];
266
+ }[];
267
+ selectedTableCells: {
268
+ r: number;
269
+ c: number;
270
+ }[];
271
+ ctx: CanvasRenderingContext2D;
272
+ renderer: Renderer;
273
+ _renderQueued: boolean;
274
+ _destroyed: boolean;
275
+ _changeTimer: any;
276
+ _history: string[];
277
+ _historyIndex: number;
278
+ constructor(container: HTMLElement | string, options?: DesignerOptions);
279
+ _buildDom(): void;
280
+ _bindEvents(): void;
281
+ _showContextMenu(e: JQuery.Event): void;
282
+ _handleContextMenuAction(action: string): void;
283
+ _mergeSelectedCells(el: ElementConfig): void;
284
+ _unmergeSelectedCells(el: ElementConfig): void;
285
+ _showInPlaceEdit(el: ElementConfig, targetCell?: {
286
+ r: number;
287
+ c: number;
288
+ }): void;
289
+ _pushHistory(): void;
290
+ undo(): void;
291
+ redo(): void;
292
+ _loadConfigInternal(config: DesignerConfig): void;
293
+ _syncStageSize(): void;
294
+ render(): void;
295
+ _renderPageNumber(ctx: CanvasRenderingContext2D, pagePxW: number, pagePxH: number): void;
296
+ _hitTest(mx: number, my: number): ElementConfig | null;
297
+ _hitTestTableCell(el: ElementConfig, mx: number, my: number): {
298
+ r: number;
299
+ c: number;
300
+ } | null;
301
+ _hitTestTableBorder(el: ElementConfig, mx: number, my: number): {
302
+ type: 'col' | 'row';
303
+ index: number;
304
+ } | null;
305
+ _toModelPoint(evt: JQuery.Event): Point;
306
+ _onStageMouseDown(evt: JQuery.Event): void;
307
+ _onHandleMouseDown(evt: JQuery.Event, handle: string): void;
308
+ _onRotateMouseDown(evt: JQuery.Event): void;
309
+ _onDocMouseMove(evt: JQuery.Event): void;
310
+ _onDocMouseUp(evt: JQuery.Event): void;
311
+ _syncSelectionBox(): void;
312
+ _renderLayers(): void;
313
+ _reorderLayer(srcId: string, targetId: string): void;
314
+ _renderProps(): void;
315
+ _renderField(scope: string, key: string, type: string, value: any, extra?: any, label?: string): string;
316
+ _onPropsChange(e?: JQuery.Event): void;
317
+ getSelected(): ElementConfig | null;
318
+ _updateSelectedTableCells(): void;
319
+ selectById(id: string | null): void;
320
+ toggleSelect(id: string): void;
321
+ addElement(el: ElementConfig): void;
322
+ removeSelected(): void;
323
+ getConfig(): DesignerConfig;
324
+ setConfig(config: DesignerConfig): void;
325
+ _emitChange(): void;
326
+ setZoom(z: number): void;
327
+ setTool(tool: string): void;
328
+ _showColorDialog(title: string, initialColor: string, onConfirm: (color: string) => void): void;
329
+ fillData(data: any): void;
330
+ _openJsonModal(title: string, content: string, onOk?: (val: string) => void): void;
331
+ }
332
+
333
+ interface PreviewerOptions {
334
+ data?: any;
335
+ }
336
+ declare class Previewer {
337
+ config: DesignerConfig;
338
+ data: any;
339
+ $container: JQuery<HTMLElement>;
340
+ pages: {
341
+ $page: JQuery<HTMLElement>;
342
+ $canvas: JQuery<HTMLElement>;
343
+ ctx: CanvasRenderingContext2D;
344
+ renderer: Renderer;
345
+ }[];
346
+ constructor(container: HTMLElement | string, config: DesignerConfig, options?: PreviewerOptions);
347
+ _createPage(): {
348
+ $page: any;
349
+ $canvas: any;
350
+ ctx: CanvasRenderingContext2D;
351
+ renderer: Renderer;
352
+ };
353
+ _buildDomAndRender(): void;
354
+ _renderPageNumbers(): void;
355
+ _evalRenderFn(fnBody: string, data: any, extraArgs?: {
356
+ rowIndex?: number;
357
+ colIndex?: number;
358
+ rowItem?: any;
359
+ }): any;
360
+ _populateElement(el: ElementConfig): ElementConfig;
361
+ _renderSplitTable(table: ElementConfig, firstPage: any, pagePxH: number): void;
362
+ /**
363
+ * Export the canvas as a JPEG image and trigger download
364
+ * If there are multiple pages, it exports a zip containing all pages.
365
+ */
366
+ exportJPG(filename?: string, quality?: number): Promise<void>;
367
+ /**
368
+ * Export the canvas as a PNG image and trigger download
369
+ * If there are multiple pages, it exports a zip containing all pages.
370
+ */
371
+ exportPNG(filename?: string): Promise<void>;
372
+ /**
373
+ * Export the canvas to a PDF document using jsPDF and trigger download
374
+ * Supports multiple pages
375
+ */
376
+ exportPDF(filename?: string): void;
377
+ /**
378
+ * Helper to trigger file download from data URL
379
+ */
380
+ private _downloadDataUrl;
381
+ }
382
+
383
+ declare function create(container: HTMLElement | string, options?: DesignerOptions): Designer;
384
+ declare function preview(container: HTMLElement | string, config: DesignerConfig, options?: PreviewerOptions$1): Previewer;
385
+
386
+ export { CODE39_PATTERNS, Designer, type DesignerConfig, type DesignerOptions, type ElementConfig, type ElementType, PAPER_PRESETS, type PageConfig, type Point, Previewer, type PreviewerOptions$1 as PreviewerOptions, type Rect, Renderer, type TableCellConfig, create, preview };