@jetprint/editor-sdk 1.0.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.
- package/dist/assets/perspective.wasm +0 -0
- package/dist/assets/wasm_exec.js +553 -0
- package/dist/components/Editor/assets/editorIcons.d.ts +32 -0
- package/dist/components/Editor/components/CanvasSection.vue.d.ts +253 -0
- package/dist/components/Editor/components/CanvasZoomToolbar.vue.d.ts +23 -0
- package/dist/components/Editor/components/EditorAddToCartDialog.vue.d.ts +28 -0
- package/dist/components/Editor/components/EditorDefaultCanvasAxisLines.vue.d.ts +34 -0
- package/dist/components/Editor/components/EditorDefaultCanvasRulers.vue.d.ts +44 -0
- package/dist/components/Editor/components/EditorIcon.vue.d.ts +7 -0
- package/dist/components/Editor/components/EditorSelectionShortcutFab.vue.d.ts +56 -0
- package/dist/components/Editor/components/EditorSidebar.vue.d.ts +548 -0
- package/dist/components/Editor/components/EditorTopbar.vue.d.ts +363 -0
- package/dist/components/Editor/components/EditorTopbarMockupScope.vue.d.ts +12 -0
- package/dist/components/Editor/components/GalleryPanel.vue.d.ts +9 -0
- package/dist/components/Editor/components/LiveThreePreviewPane.vue.d.ts +30 -0
- package/dist/components/Editor/components/PreviewPanel.vue.d.ts +312 -0
- package/dist/components/Editor/components/ShortcutSettingsModal.vue.d.ts +11 -0
- package/dist/components/Editor/components/SplitPieceHandAlignPanel.vue.d.ts +14 -0
- package/dist/components/Editor/components/TemplateModal.vue.d.ts +35 -0
- package/dist/components/Editor/components/Theme1AddTextPanel.vue.d.ts +190 -0
- package/dist/components/Editor/components/Theme1UploadPanel.vue.d.ts +120 -0
- package/dist/components/Editor/composables/index.d.ts +56 -0
- package/dist/components/Editor/composables/useCanvasEventWiring.d.ts +40 -0
- package/dist/components/Editor/composables/useCanvasHistory.d.ts +18 -0
- package/dist/components/Editor/composables/useCanvasManager.d.ts +29 -0
- package/dist/components/Editor/composables/useCanvasObjectHelpers.d.ts +34 -0
- package/dist/components/Editor/composables/useCanvasStateByDiecut.d.ts +50 -0
- package/dist/components/Editor/composables/useCanvasViewport.d.ts +89 -0
- package/dist/components/Editor/composables/useClearCanvas.d.ts +32 -0
- package/dist/components/Editor/composables/useCompleteScreenshot.d.ts +68 -0
- package/dist/components/Editor/composables/useCopyToDiecuts.d.ts +56 -0
- package/dist/components/Editor/composables/useDiecutManager.d.ts +46 -0
- package/dist/components/Editor/composables/useDiecutScreenshot.d.ts +50 -0
- package/dist/components/Editor/composables/useDownloadPng.d.ts +11 -0
- package/dist/components/Editor/composables/useEditorReset.d.ts +21 -0
- package/dist/components/Editor/composables/useEditorShortcuts.d.ts +80 -0
- package/dist/components/Editor/composables/useEditorTopbarContext.d.ts +3 -0
- package/dist/components/Editor/composables/useEditorWatchers.d.ts +99 -0
- package/dist/components/Editor/composables/useEventHandlers.d.ts +13 -0
- package/dist/components/Editor/composables/useFontLoader.d.ts +8 -0
- package/dist/components/Editor/composables/useGuideResources.d.ts +38 -0
- package/dist/components/Editor/composables/useImageHandler.d.ts +10 -0
- package/dist/components/Editor/composables/useLayerOperations.d.ts +52 -0
- package/dist/components/Editor/composables/useLayerSync.d.ts +32 -0
- package/dist/components/Editor/composables/useLicense.d.ts +11 -0
- package/dist/components/Editor/composables/useObjectAdder.d.ts +76 -0
- package/dist/components/Editor/composables/usePatternHandler.d.ts +31 -0
- package/dist/components/Editor/composables/usePreviewManager.d.ts +240 -0
- package/dist/components/Editor/composables/usePreviewRenderer.d.ts +111 -0
- package/dist/components/Editor/composables/usePreviewUpdateQueue.d.ts +62 -0
- package/dist/components/Editor/composables/useProductData.d.ts +166 -0
- package/dist/components/Editor/composables/useSplitPieceHandTool.d.ts +34 -0
- package/dist/components/Editor/composables/useTemplateLoader.d.ts +36 -0
- package/dist/components/Editor/composables/useTemplateManager.d.ts +48 -0
- package/dist/components/Editor/composables/useTextHandler.d.ts +19 -0
- package/dist/components/Editor/composables/useToolState.d.ts +101 -0
- package/dist/components/Editor/composables/useToolStateSync.d.ts +49 -0
- package/dist/components/Editor/composables/useWorkerManager.d.ts +11 -0
- package/dist/components/Editor/config/fontConfig.d.ts +8 -0
- package/dist/components/Editor/editorCanvasGuides.d.ts +22 -0
- package/dist/components/Editor/fabric/PatternLayer.d.ts +104 -0
- package/dist/components/Editor/index.vue.d.ts +167 -0
- package/dist/components/Editor/liveRender/ThreeRenderViewer.vue.d.ts +31 -0
- package/dist/components/Editor/liveRender/dataAdapter.d.ts +2 -0
- package/dist/components/Editor/liveRender/prefetch.worker.d.ts +15 -0
- package/dist/components/Editor/liveRender/render.worker.d.ts +1 -0
- package/dist/components/Editor/liveRender/types.d.ts +130 -0
- package/dist/components/Editor/utils/blob.d.ts +5 -0
- package/dist/components/Editor/utils/buildSplitPieceDesignClipBlobs.d.ts +75 -0
- package/dist/components/Editor/utils/colorLabels.d.ts +6 -0
- package/dist/components/Editor/utils/dataBuilders.d.ts +108 -0
- package/dist/components/Editor/utils/designRestoreScale.d.ts +42 -0
- package/dist/components/Editor/utils/editorShortcutChord.d.ts +9 -0
- package/dist/components/Editor/utils/editorShortcutIds.d.ts +2 -0
- package/dist/components/Editor/utils/editorShortcutRegistry.d.ts +15 -0
- package/dist/components/Editor/utils/editorSizeOptions.d.ts +27 -0
- package/dist/components/Editor/utils/fabricMainCanvasSnapshot.d.ts +48 -0
- package/dist/components/Editor/utils/fabricRulerMath.d.ts +35 -0
- package/dist/components/Editor/utils/fabricScreenshotToBlob.d.ts +7 -0
- package/dist/components/Editor/utils/imageLoader.d.ts +10 -0
- package/dist/components/Editor/utils/objectUtils.d.ts +11 -0
- package/dist/components/Editor/utils/pattern.d.ts +56 -0
- package/dist/components/Editor/utils/scaleSplitClassicGridVisual.d.ts +9 -0
- package/dist/components/Editor/utils/screenshot.d.ts +8 -0
- package/dist/components/Editor/utils/selectionVisual.d.ts +7 -0
- package/dist/components/Editor/utils/tintMaskWithColor.d.ts +4 -0
- package/dist/components/Editor/utils/uploadLimit.d.ts +4 -0
- package/dist/components/Editor/workers/copyDiecuts.worker.d.ts +38 -0
- package/dist/components/Editor/workers/maskWorker.d.ts +13 -0
- package/dist/components/Editor/workers/renderWorker.d.ts +1 -0
- package/dist/components/Editor/workers/zoneScreenshotWorker.d.ts +49 -0
- package/dist/composables/useEditorI18n.d.ts +18 -0
- package/dist/copyDiecuts.worker.js +67 -0
- package/dist/deform.worker.js +760 -0
- package/dist/editor-sdk.es.js +73923 -0
- package/dist/index.d.ts +446 -0
- package/dist/locales/builtin-messages.d.ts +2 -0
- package/dist/locales/editor-locales.d.ts +7 -0
- package/dist/locales/en.d.ts +5 -0
- package/dist/locales/ja-JP.d.ts +5 -0
- package/dist/locales/ko-KR.d.ts +5 -0
- package/dist/locales/vi-VN.d.ts +5 -0
- package/dist/locales/zh.d.ts +5 -0
- package/dist/maskWorker.js +51 -0
- package/dist/prefetch.worker.js +16 -0
- package/dist/render.worker.js +27266 -0
- package/dist/renderWorker.js +40368 -0
- package/dist/style.css +1 -0
- package/dist/types.d.ts +483 -0
- package/dist/utils/backgroundRenderer.d.ts +64 -0
- package/dist/utils/encryptJson.d.ts +31 -0
- package/dist/utils/environment.d.ts +29 -0
- package/dist/utils/errorHandler.d.ts +27 -0
- package/dist/utils/fileToken.d.ts +18 -0
- package/dist/utils/http.d.ts +31 -0
- package/dist/utils/jsonFileCache.d.ts +6 -0
- package/dist/utils/license/api.d.ts +74 -0
- package/dist/utils/license/deviceId.d.ts +25 -0
- package/dist/utils/license/index.d.ts +9 -0
- package/dist/utils/license/licenseManager.d.ts +63 -0
- package/dist/utils/license/licenseStore.d.ts +17 -0
- package/dist/utils/license/retry.d.ts +11 -0
- package/dist/utils/license/tokenRefresh.d.ts +34 -0
- package/dist/utils/mediaBlobCache.d.ts +6 -0
- package/dist/utils/protection/encryptedModules.generated.d.ts +27 -0
- package/dist/utils/protection/moduleLoader.d.ts +17 -0
- package/dist/utils/renderService/blend.d.ts +4 -0
- package/dist/utils/renderService/deform.d.ts +21 -0
- package/dist/utils/renderService/deform.worker.d.ts +7 -0
- package/dist/utils/renderService/image.d.ts +8 -0
- package/dist/utils/renderService/index.d.ts +12 -0
- package/dist/utils/renderService/mask.d.ts +13 -0
- package/dist/utils/renderService/prepareRenderData.d.ts +2 -0
- package/dist/utils/renderService/psdConverter.d.ts +6 -0
- package/dist/utils/renderService/render.d.ts +14 -0
- package/dist/utils/renderService/render.worker.d.ts +17 -0
- package/dist/utils/renderService/types.d.ts +236 -0
- package/dist/utils/renderService/workerManager.d.ts +33 -0
- package/dist/utils/renderedImagesDB.d.ts +61 -0
- package/dist/utils/storage.d.ts +27 -0
- package/dist/utils/threeRenderService/index.d.ts +6 -0
- package/dist/utils/url.d.ts +39 -0
- package/dist/utils/workerBase.d.ts +38 -0
- package/dist/utils/workerLoader.d.ts +24 -0
- package/dist/wasm/index.d.ts +5 -0
- package/dist/wasm/perspectiveLoader.d.ts +70 -0
- package/dist/wasm/perspectiveLoader.worker.d.ts +116 -0
- package/dist/zoneScreenshotWorker.js +82 -0
- package/package.json +54 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 预览管理 Composable
|
|
3
|
+
* 负责预览数据生成、渲染队列管理
|
|
4
|
+
*/
|
|
5
|
+
import { type Ref } from 'vue';
|
|
6
|
+
import type { Canvas } from 'fabric';
|
|
7
|
+
import type { IRenderByJson } from '../../../utils/renderService';
|
|
8
|
+
export declare function usePreviewManager(getCanvas: () => Canvas | null, fileBaseUrl?: string): {
|
|
9
|
+
previewRenderData: Ref<{
|
|
10
|
+
psdJson: {
|
|
11
|
+
canvasWidth: number;
|
|
12
|
+
canvasHeight: number;
|
|
13
|
+
layerList: {
|
|
14
|
+
name: string;
|
|
15
|
+
type: import("../../..").PsdLayerType;
|
|
16
|
+
blendMode?: string | undefined;
|
|
17
|
+
bounds?: {
|
|
18
|
+
top: number;
|
|
19
|
+
left: number;
|
|
20
|
+
bottom?: number | undefined;
|
|
21
|
+
right?: number | undefined;
|
|
22
|
+
width: number;
|
|
23
|
+
height: number;
|
|
24
|
+
} | undefined;
|
|
25
|
+
layerOrder?: number | undefined;
|
|
26
|
+
imagePath?: string | undefined;
|
|
27
|
+
vectorMask?: {
|
|
28
|
+
paths: {
|
|
29
|
+
open: boolean;
|
|
30
|
+
knots: {
|
|
31
|
+
linked: boolean;
|
|
32
|
+
points: number[];
|
|
33
|
+
}[];
|
|
34
|
+
fillRule?: string | undefined;
|
|
35
|
+
operation?: string | undefined;
|
|
36
|
+
}[];
|
|
37
|
+
points?: {
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
type?: number | undefined;
|
|
41
|
+
}[] | undefined;
|
|
42
|
+
invert?: boolean | undefined;
|
|
43
|
+
notLink?: boolean | undefined;
|
|
44
|
+
disable?: boolean | undefined;
|
|
45
|
+
fillStartsWithAllPixels?: boolean | undefined;
|
|
46
|
+
} | undefined;
|
|
47
|
+
children?: /*elided*/ any[] | undefined;
|
|
48
|
+
isSmartObject?: boolean | undefined;
|
|
49
|
+
size?: {
|
|
50
|
+
width: number;
|
|
51
|
+
height: number;
|
|
52
|
+
} | undefined;
|
|
53
|
+
placedLayer?: {
|
|
54
|
+
width: number;
|
|
55
|
+
height: number;
|
|
56
|
+
} | undefined;
|
|
57
|
+
originalWidth?: number | undefined;
|
|
58
|
+
originalHeight?: number | undefined;
|
|
59
|
+
meshPoints?: {
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
type?: number | undefined;
|
|
63
|
+
}[] | undefined;
|
|
64
|
+
transform?: number[] | undefined;
|
|
65
|
+
quiltSliceX?: number[] | undefined;
|
|
66
|
+
quiltSliceY?: number[] | undefined;
|
|
67
|
+
filterList?: {
|
|
68
|
+
type: string;
|
|
69
|
+
enabled: boolean;
|
|
70
|
+
filter?: {
|
|
71
|
+
puppetShapeList?: {
|
|
72
|
+
originalVertexArray: {
|
|
73
|
+
x: number;
|
|
74
|
+
y: number;
|
|
75
|
+
type?: number | undefined;
|
|
76
|
+
}[];
|
|
77
|
+
deformedVertexArray: {
|
|
78
|
+
x: number;
|
|
79
|
+
y: number;
|
|
80
|
+
type?: number | undefined;
|
|
81
|
+
}[];
|
|
82
|
+
indexArray: number[];
|
|
83
|
+
}[] | undefined;
|
|
84
|
+
} | undefined;
|
|
85
|
+
}[] | undefined;
|
|
86
|
+
id?: number | undefined;
|
|
87
|
+
opacity?: number | undefined;
|
|
88
|
+
clipping?: boolean | undefined;
|
|
89
|
+
}[];
|
|
90
|
+
};
|
|
91
|
+
materialList: {
|
|
92
|
+
layerName: string;
|
|
93
|
+
url: string;
|
|
94
|
+
sourceName?: string | undefined;
|
|
95
|
+
}[];
|
|
96
|
+
fabricScreenshotList: {
|
|
97
|
+
id: number;
|
|
98
|
+
name?: string | undefined;
|
|
99
|
+
url: string;
|
|
100
|
+
designImage?: {
|
|
101
|
+
readonly height: number;
|
|
102
|
+
readonly width: number;
|
|
103
|
+
close: {
|
|
104
|
+
(): void;
|
|
105
|
+
(): void;
|
|
106
|
+
};
|
|
107
|
+
} | undefined;
|
|
108
|
+
contentVersion?: number | string | undefined;
|
|
109
|
+
}[];
|
|
110
|
+
width?: number | undefined;
|
|
111
|
+
height?: number | undefined;
|
|
112
|
+
baseUrl?: string | undefined;
|
|
113
|
+
previewTier?: "fast" | "hd" | undefined;
|
|
114
|
+
hasPendingHdFollowup?: boolean | undefined;
|
|
115
|
+
maxImageSize?: number | undefined;
|
|
116
|
+
previewQuality?: "quick" | "normal" | undefined;
|
|
117
|
+
skipDeform?: boolean | undefined;
|
|
118
|
+
selectedColor?: string | undefined;
|
|
119
|
+
} | null, IRenderByJson | {
|
|
120
|
+
psdJson: {
|
|
121
|
+
canvasWidth: number;
|
|
122
|
+
canvasHeight: number;
|
|
123
|
+
layerList: {
|
|
124
|
+
name: string;
|
|
125
|
+
type: import("../../..").PsdLayerType;
|
|
126
|
+
blendMode?: string | undefined;
|
|
127
|
+
bounds?: {
|
|
128
|
+
top: number;
|
|
129
|
+
left: number;
|
|
130
|
+
bottom?: number | undefined;
|
|
131
|
+
right?: number | undefined;
|
|
132
|
+
width: number;
|
|
133
|
+
height: number;
|
|
134
|
+
} | undefined;
|
|
135
|
+
layerOrder?: number | undefined;
|
|
136
|
+
imagePath?: string | undefined;
|
|
137
|
+
vectorMask?: {
|
|
138
|
+
paths: {
|
|
139
|
+
open: boolean;
|
|
140
|
+
knots: {
|
|
141
|
+
linked: boolean;
|
|
142
|
+
points: number[];
|
|
143
|
+
}[];
|
|
144
|
+
fillRule?: string | undefined;
|
|
145
|
+
operation?: string | undefined;
|
|
146
|
+
}[];
|
|
147
|
+
points?: {
|
|
148
|
+
x: number;
|
|
149
|
+
y: number;
|
|
150
|
+
type?: number | undefined;
|
|
151
|
+
}[] | undefined;
|
|
152
|
+
invert?: boolean | undefined;
|
|
153
|
+
notLink?: boolean | undefined;
|
|
154
|
+
disable?: boolean | undefined;
|
|
155
|
+
fillStartsWithAllPixels?: boolean | undefined;
|
|
156
|
+
} | undefined;
|
|
157
|
+
children?: /*elided*/ any[] | undefined;
|
|
158
|
+
isSmartObject?: boolean | undefined;
|
|
159
|
+
size?: {
|
|
160
|
+
width: number;
|
|
161
|
+
height: number;
|
|
162
|
+
} | undefined;
|
|
163
|
+
placedLayer?: {
|
|
164
|
+
width: number;
|
|
165
|
+
height: number;
|
|
166
|
+
} | undefined;
|
|
167
|
+
originalWidth?: number | undefined;
|
|
168
|
+
originalHeight?: number | undefined;
|
|
169
|
+
meshPoints?: {
|
|
170
|
+
x: number;
|
|
171
|
+
y: number;
|
|
172
|
+
type?: number | undefined;
|
|
173
|
+
}[] | undefined;
|
|
174
|
+
transform?: number[] | undefined;
|
|
175
|
+
quiltSliceX?: number[] | undefined;
|
|
176
|
+
quiltSliceY?: number[] | undefined;
|
|
177
|
+
filterList?: {
|
|
178
|
+
type: string;
|
|
179
|
+
enabled: boolean;
|
|
180
|
+
filter?: {
|
|
181
|
+
puppetShapeList?: {
|
|
182
|
+
originalVertexArray: {
|
|
183
|
+
x: number;
|
|
184
|
+
y: number;
|
|
185
|
+
type?: number | undefined;
|
|
186
|
+
}[];
|
|
187
|
+
deformedVertexArray: {
|
|
188
|
+
x: number;
|
|
189
|
+
y: number;
|
|
190
|
+
type?: number | undefined;
|
|
191
|
+
}[];
|
|
192
|
+
indexArray: number[];
|
|
193
|
+
}[] | undefined;
|
|
194
|
+
} | undefined;
|
|
195
|
+
}[] | undefined;
|
|
196
|
+
id?: number | undefined;
|
|
197
|
+
opacity?: number | undefined;
|
|
198
|
+
clipping?: boolean | undefined;
|
|
199
|
+
}[];
|
|
200
|
+
};
|
|
201
|
+
materialList: {
|
|
202
|
+
layerName: string;
|
|
203
|
+
url: string;
|
|
204
|
+
sourceName?: string | undefined;
|
|
205
|
+
}[];
|
|
206
|
+
fabricScreenshotList: {
|
|
207
|
+
id: number;
|
|
208
|
+
name?: string | undefined;
|
|
209
|
+
url: string;
|
|
210
|
+
designImage?: {
|
|
211
|
+
readonly height: number;
|
|
212
|
+
readonly width: number;
|
|
213
|
+
close: {
|
|
214
|
+
(): void;
|
|
215
|
+
(): void;
|
|
216
|
+
};
|
|
217
|
+
} | undefined;
|
|
218
|
+
contentVersion?: number | string | undefined;
|
|
219
|
+
}[];
|
|
220
|
+
width?: number | undefined;
|
|
221
|
+
height?: number | undefined;
|
|
222
|
+
baseUrl?: string | undefined;
|
|
223
|
+
previewTier?: "fast" | "hd" | undefined;
|
|
224
|
+
hasPendingHdFollowup?: boolean | undefined;
|
|
225
|
+
maxImageSize?: number | undefined;
|
|
226
|
+
previewQuality?: "quick" | "normal" | undefined;
|
|
227
|
+
skipDeform?: boolean | undefined;
|
|
228
|
+
selectedColor?: string | undefined;
|
|
229
|
+
} | null>;
|
|
230
|
+
previewTitle: Ref<string, string>;
|
|
231
|
+
queuePreviewUpdate: (reason: string) => void;
|
|
232
|
+
buildInitialPreviewRenderData: () => Promise<void>;
|
|
233
|
+
getRenderDataForIndex: (index: number) => Promise<IRenderByJson | null>;
|
|
234
|
+
clearPreviewCache: () => void;
|
|
235
|
+
getPreviewCacheStats: () => {
|
|
236
|
+
bitmaps: number;
|
|
237
|
+
blobUrls: number;
|
|
238
|
+
screenshots: number;
|
|
239
|
+
};
|
|
240
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 预览渲染 Composable
|
|
3
|
+
* 抽离 buildInitialPreviewRenderData / getRenderDataForIndex / renderAllTemplates
|
|
4
|
+
* 多图(SPLIT):默认 buildMaskGroups + getInverseMaskUrl;若启用 Zone 截图管线且有分片 mask 则与 COMPLETE 同裁切路径。
|
|
5
|
+
* 单片(COMPLETE):SPLIT 分片 MASK+DOTTED 按 bounds 裁切,或 Zone 管线。
|
|
6
|
+
*/
|
|
7
|
+
import { type Ref } from 'vue';
|
|
8
|
+
import type { IRenderByJson, IMaterial } from '../../../utils/renderService';
|
|
9
|
+
import { type SplitPieceDesignClipBlob } from '../utils/buildSplitPieceDesignClipBlobs';
|
|
10
|
+
type TemplateItem = {
|
|
11
|
+
jsonURL?: string;
|
|
12
|
+
resources?: any[];
|
|
13
|
+
};
|
|
14
|
+
type MaskGroup = {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
};
|
|
18
|
+
type PreviewBuildOptions = {
|
|
19
|
+
commitHd?: boolean;
|
|
20
|
+
useCachedSplitScreenshotsOnly?: boolean;
|
|
21
|
+
};
|
|
22
|
+
type RenderDataForIndexOptions = {
|
|
23
|
+
skipSaveAndScreenshot?: boolean;
|
|
24
|
+
resetCompleteBatchCache?: boolean;
|
|
25
|
+
useCachedSplitScreenshotsOnly?: boolean;
|
|
26
|
+
};
|
|
27
|
+
export declare function usePreviewRenderer(options: {
|
|
28
|
+
usePreviewEffect: () => boolean;
|
|
29
|
+
templateItems: Ref<TemplateItem[]>;
|
|
30
|
+
previewTemplateIndex: Ref<number>;
|
|
31
|
+
selectedDiecutId: Ref<string>;
|
|
32
|
+
selectedMode: Ref<string>;
|
|
33
|
+
selectedColor: Ref<string>;
|
|
34
|
+
previewRenderData: Ref<IRenderByJson | null>;
|
|
35
|
+
toProxyUrl: (url: string) => string;
|
|
36
|
+
buildMaterialList: (resources?: any[]) => IMaterial[];
|
|
37
|
+
collectGroupIdByName: (layersList: any[], map?: Map<string, number>) => Map<string, number>;
|
|
38
|
+
buildMaskGroups: () => MaskGroup[];
|
|
39
|
+
getInverseMaskUrl: (groupId: string) => string;
|
|
40
|
+
/** 当前尺码下该分片设计截图的内容版本号:写入 fabricScreenshot.contentVersion,供预览签名区分尺码/检测改动 */
|
|
41
|
+
getInverseMaskVersion?: (groupId: string) => number;
|
|
42
|
+
getCanvas: () => any;
|
|
43
|
+
getEffectiveDiecutData: () => any;
|
|
44
|
+
loadImage: (url: string) => Promise<HTMLImageElement>;
|
|
45
|
+
guideResourceRole?: string;
|
|
46
|
+
/** 编辑区域宽度,用于单片合成图基准尺寸 */
|
|
47
|
+
getEditorAreaWidth?: () => number;
|
|
48
|
+
/** 当前选中尺码,多尺码时使 fabricScreenshotList id 与 psdJson 一致 */
|
|
49
|
+
getSelectedSize?: () => string;
|
|
50
|
+
saveCanvasState: (diecutId: string) => Promise<void>;
|
|
51
|
+
generateDiecutScreenshot: (diecutId: string, opts?: {
|
|
52
|
+
multiplier?: number;
|
|
53
|
+
useIdentityViewport?: boolean;
|
|
54
|
+
}) => Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* 从 diecut 的「已保存 JSON 状态」生成该 diecut 的 inverse mask blob。
|
|
57
|
+
* 修复 H22:buildInitialPreviewRenderData 在 SPLIT 模式发现缺失分片时,原 fallback
|
|
58
|
+
* 用当前画布生成(只含 active 分片内容)会污染其他分片的 inverse mask 为空。
|
|
59
|
+
* 改用此 API 时,会用该分片自己保存的 JSON 状态离屏渲染再裁切,保证内容正确。
|
|
60
|
+
*/
|
|
61
|
+
generateDiecutScreenshotFromSavedState?: (diecutId: string) => Promise<boolean>;
|
|
62
|
+
/** 与下载按钮相同的拿图逻辑,供 renderAllTemplates 复用 */
|
|
63
|
+
getPreviewImageBlobs?: () => Promise<Array<{
|
|
64
|
+
index: number;
|
|
65
|
+
blob: Blob;
|
|
66
|
+
}>>;
|
|
67
|
+
/** 分片 Guideline 内存副本(拖动后已写回 bounds),供截图与导出与画布一致 */
|
|
68
|
+
getCachedSplitGuidelineJson?: (templateJsonUrl: string) => Record<string, unknown> | null | undefined;
|
|
69
|
+
/** Zone 模式下分片实时位置与对应 MASK,供 COMPLETE 走实时裁切生成 fabricScreenshotList */
|
|
70
|
+
getZonesForScreenshot?: () => Array<{
|
|
71
|
+
id: number;
|
|
72
|
+
name?: string;
|
|
73
|
+
placed: {
|
|
74
|
+
left: number;
|
|
75
|
+
top: number;
|
|
76
|
+
width: number;
|
|
77
|
+
height: number;
|
|
78
|
+
};
|
|
79
|
+
maskUrl: string;
|
|
80
|
+
}>;
|
|
81
|
+
/** 为 true 时走 Zone 裁切 fabric 列表(COMPLETE 与 SPLIT 在开启 completeUsesZoneModel 时均可) */
|
|
82
|
+
isZonesMode?: () => boolean;
|
|
83
|
+
/**
|
|
84
|
+
* COMPLETE 拖动态:仅重建该 groupId 的 live 裁切,其余分片沿用 previewRenderData 中已有项。
|
|
85
|
+
*/
|
|
86
|
+
getDraggingLiveZoneGroupId?: () => string | null;
|
|
87
|
+
/** 画布对象拖动中:禁止 refreshZonesPreviewQuick(含 debounce timer 触发的二次调用) */
|
|
88
|
+
getIsDraggingObject?: () => boolean;
|
|
89
|
+
}): {
|
|
90
|
+
buildInitialPreviewRenderData: (buildOpts?: PreviewBuildOptions) => Promise<void>;
|
|
91
|
+
getRenderDataForIndex: (index: number, opts?: RenderDataForIndexOptions) => Promise<IRenderByJson | null>;
|
|
92
|
+
renderAllTemplates: () => Promise<Array<{
|
|
93
|
+
index: number;
|
|
94
|
+
bitmap: ImageBitmap | null;
|
|
95
|
+
blob?: Blob;
|
|
96
|
+
}>>;
|
|
97
|
+
resetCompleteModeBatchCache: () => void;
|
|
98
|
+
refreshCompletePreviewFromDesignClipBlobs: (clips: SplitPieceDesignClipBlob[]) => void;
|
|
99
|
+
refreshZonesPreviewQuick: (quickOpts?: {
|
|
100
|
+
/** 松手后拖动态已结束,用此 id 仅更新当前分片 */
|
|
101
|
+
focusZoneId?: string | null;
|
|
102
|
+
/** 为 true 时跳过低清预览最小间隔(松手尽快出图) */
|
|
103
|
+
skipMinInterval?: boolean;
|
|
104
|
+
}) => Promise<void>;
|
|
105
|
+
prewarmZonesPreviewQuick: (target?: any) => Promise<void>;
|
|
106
|
+
endZonesPreviewQuick: () => void;
|
|
107
|
+
clearZoneScreenshotCache: () => void;
|
|
108
|
+
disposeZoneScreenshotWorker: () => void;
|
|
109
|
+
getPreviewBuildInFlight: () => Promise<void> | null;
|
|
110
|
+
};
|
|
111
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 预览更新队列(默认 debounce;可选 immediate 立即执行完整管道)
|
|
3
|
+
* 负责 queuePreviewUpdate:保存当前 diecut 状态 -> 生成遮罩截图 -> 刷新预览 renderData
|
|
4
|
+
*/
|
|
5
|
+
export type QueuePreviewUpdateMeta = {
|
|
6
|
+
/** 日志 / 调试来源标识 */
|
|
7
|
+
source?: string;
|
|
8
|
+
startTime?: number;
|
|
9
|
+
/** 为 true 时跳过 debounce,立即执行保存 / 截图 / build(仍会取消尚未执行的 debounce 任务) */
|
|
10
|
+
immediate?: boolean;
|
|
11
|
+
/** 拖动中入队时保留:松手后由 flushDeferredPreviewAfterDrag 重放 */
|
|
12
|
+
deferredFromDrag?: boolean;
|
|
13
|
+
/** 为 false 时仅提交 quick preview renderData,不做 HD 预览构建 */
|
|
14
|
+
commitHd?: boolean;
|
|
15
|
+
/** 为 true 时不触发 generateDiecutScreenshot(极速松手已用 refreshZonesPreviewQuick 出图) */
|
|
16
|
+
skipDiecutScreenshot?: boolean;
|
|
17
|
+
/** 为 true 时不执行 buildInitialPreviewRenderData(避免松手后再跑一遍 Three) */
|
|
18
|
+
skipBuildPreview?: boolean;
|
|
19
|
+
};
|
|
20
|
+
type PreviewBuildOptions = {
|
|
21
|
+
commitHd?: boolean;
|
|
22
|
+
skipDiecutScreenshot?: boolean;
|
|
23
|
+
skipBuildPreview?: boolean;
|
|
24
|
+
};
|
|
25
|
+
export declare function usePreviewUpdateQueue(options: {
|
|
26
|
+
getSelectedDiecutId: () => string;
|
|
27
|
+
getHasCanvas: () => boolean;
|
|
28
|
+
saveCanvasState: (diecutId: string) => Promise<void>;
|
|
29
|
+
generateDiecutScreenshot: (diecutId: string, precapturedBaseBlob?: Blob | null) => Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* 后台截图前先同步捕获当前主画布像素。否则 generateDiecutScreenshot 内部 idle capture
|
|
32
|
+
* 可能晚于分片切换,导致用下一分片画布内容写入上一分片缓存。
|
|
33
|
+
*/
|
|
34
|
+
captureMainBaseBlob?: () => Promise<Blob | null>;
|
|
35
|
+
buildInitialPreviewRenderData: (opts?: PreviewBuildOptions) => Promise<void> | void;
|
|
36
|
+
delay?: number;
|
|
37
|
+
/** 为 true 时不入队(如批量还原设计时暂停预览刷新) */
|
|
38
|
+
shouldSkip?: () => boolean;
|
|
39
|
+
/**
|
|
40
|
+
* 为 true 时跳过 generateDiecutScreenshot(如 COMPLETE:预览 fabric 列表由 buildCompleteFabricScreenshotList 生成,不依赖 getInverseMaskUrl)
|
|
41
|
+
*/
|
|
42
|
+
shouldSkipDiecutScreenshot?: () => boolean;
|
|
43
|
+
/**
|
|
44
|
+
* generateDiecutScreenshot 成功后清除该 diecut 的 dirty 标记。
|
|
45
|
+
* 关键优化:user 改了 prev 分片后,queuePreviewUpdate 会异步触发 generateDiecutScreenshot 并 commit
|
|
46
|
+
* inverse-mask blob。如果不清 dirty,切换分片时 useEditorWatchers 内 isDiecutDirty(prev)=true
|
|
47
|
+
* 会触发第二次截图(冗余 1-2.5s)。
|
|
48
|
+
*/
|
|
49
|
+
consumeDiecutDirty?: (id: string) => void;
|
|
50
|
+
/** 画布对象拖动中:不入队执行截图/build,合并为松手后一次 */
|
|
51
|
+
getIsDraggingObject?: () => boolean;
|
|
52
|
+
/**
|
|
53
|
+
* 松手重放 `deferredWhileDrag` 时调用(与外层 `queuePreviewUpdateRef` 等包装层一致,例如统一注入 commitHd)
|
|
54
|
+
*/
|
|
55
|
+
replayDeferred?: (reason: string, meta?: QueuePreviewUpdateMeta) => void;
|
|
56
|
+
}): {
|
|
57
|
+
queuePreviewUpdate: (reason: string, meta?: QueuePreviewUpdateMeta) => void;
|
|
58
|
+
clearPending: () => void;
|
|
59
|
+
dispose: () => void;
|
|
60
|
+
flushDeferredPreviewAfterDrag: () => void;
|
|
61
|
+
};
|
|
62
|
+
export {};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { ProductItem, BasicInfo, DiecutResponse, DeformationResponse, ProductListApi, ProductDetailApi } from '../../../types';
|
|
2
|
+
export declare function useProductData(props: any, options?: {
|
|
3
|
+
productListApi?: ProductListApi;
|
|
4
|
+
productDetailApi?: ProductDetailApi;
|
|
5
|
+
productListPageSize?: number;
|
|
6
|
+
productListInitialPage?: number;
|
|
7
|
+
/** 仅当该 ID 在第一页列表中时才选中,否则 selectedProductIndex 设为 -1 */
|
|
8
|
+
initialProductId?: string | number;
|
|
9
|
+
}): {
|
|
10
|
+
isListMode: import("vue").ComputedRef<boolean>;
|
|
11
|
+
productItemsState: import("vue").Ref<{
|
|
12
|
+
id?: number | string | undefined;
|
|
13
|
+
name?: string | undefined;
|
|
14
|
+
description?: string | undefined;
|
|
15
|
+
coverImg?: string | undefined;
|
|
16
|
+
}[], ProductItem[] | {
|
|
17
|
+
id?: number | string | undefined;
|
|
18
|
+
name?: string | undefined;
|
|
19
|
+
description?: string | undefined;
|
|
20
|
+
coverImg?: string | undefined;
|
|
21
|
+
}[]>;
|
|
22
|
+
productTotal: import("vue").Ref<number, number>;
|
|
23
|
+
productPage: import("vue").Ref<number, number>;
|
|
24
|
+
productPageSize: import("vue").Ref<number, number>;
|
|
25
|
+
selectedProductIndex: import("vue").Ref<number, number>;
|
|
26
|
+
basicInfoState: import("vue").Ref<{
|
|
27
|
+
id?: number | string | undefined;
|
|
28
|
+
name?: string | undefined;
|
|
29
|
+
description?: string | undefined;
|
|
30
|
+
sizes?: string[] | undefined;
|
|
31
|
+
colors?: string[] | undefined;
|
|
32
|
+
colorNamesZh?: string[] | undefined;
|
|
33
|
+
colorNamesEn?: string[] | undefined;
|
|
34
|
+
colorsZh?: string[] | undefined;
|
|
35
|
+
coverImg?: string | undefined;
|
|
36
|
+
sku?: string | undefined;
|
|
37
|
+
} | null, BasicInfo | {
|
|
38
|
+
id?: number | string | undefined;
|
|
39
|
+
name?: string | undefined;
|
|
40
|
+
description?: string | undefined;
|
|
41
|
+
sizes?: string[] | undefined;
|
|
42
|
+
colors?: string[] | undefined;
|
|
43
|
+
colorNamesZh?: string[] | undefined;
|
|
44
|
+
colorNamesEn?: string[] | undefined;
|
|
45
|
+
colorsZh?: string[] | undefined;
|
|
46
|
+
coverImg?: string | undefined;
|
|
47
|
+
sku?: string | undefined;
|
|
48
|
+
} | null>;
|
|
49
|
+
diecutDataState: import("vue").Ref<{
|
|
50
|
+
msg?: string | undefined;
|
|
51
|
+
code?: number | undefined;
|
|
52
|
+
data?: {
|
|
53
|
+
jsonURL?: string | null | undefined;
|
|
54
|
+
size?: string | undefined;
|
|
55
|
+
type?: string | undefined;
|
|
56
|
+
resources?: {
|
|
57
|
+
groupId?: string | undefined;
|
|
58
|
+
groupName?: string | undefined;
|
|
59
|
+
fileName?: string | undefined;
|
|
60
|
+
url?: string | undefined;
|
|
61
|
+
type?: string | undefined;
|
|
62
|
+
width?: number | undefined;
|
|
63
|
+
height?: number | undefined;
|
|
64
|
+
}[] | null | undefined;
|
|
65
|
+
sizeMode?: string | undefined;
|
|
66
|
+
}[] | undefined;
|
|
67
|
+
} | null, DiecutResponse | {
|
|
68
|
+
msg?: string | undefined;
|
|
69
|
+
code?: number | undefined;
|
|
70
|
+
data?: {
|
|
71
|
+
jsonURL?: string | null | undefined;
|
|
72
|
+
size?: string | undefined;
|
|
73
|
+
type?: string | undefined;
|
|
74
|
+
resources?: {
|
|
75
|
+
groupId?: string | undefined;
|
|
76
|
+
groupName?: string | undefined;
|
|
77
|
+
fileName?: string | undefined;
|
|
78
|
+
url?: string | undefined;
|
|
79
|
+
type?: string | undefined;
|
|
80
|
+
width?: number | undefined;
|
|
81
|
+
height?: number | undefined;
|
|
82
|
+
}[] | null | undefined;
|
|
83
|
+
sizeMode?: string | undefined;
|
|
84
|
+
}[] | undefined;
|
|
85
|
+
} | null>;
|
|
86
|
+
deformationDataState: import("vue").Ref<{
|
|
87
|
+
msg?: string | undefined;
|
|
88
|
+
code?: number | undefined;
|
|
89
|
+
data?: {
|
|
90
|
+
size?: string | undefined;
|
|
91
|
+
sizeMode?: string | undefined;
|
|
92
|
+
infos?: {
|
|
93
|
+
name?: string | undefined;
|
|
94
|
+
jsonURL?: string | undefined;
|
|
95
|
+
sort?: number | undefined;
|
|
96
|
+
resources?: {
|
|
97
|
+
name?: string | undefined;
|
|
98
|
+
url?: string | undefined;
|
|
99
|
+
}[] | undefined;
|
|
100
|
+
}[] | null | undefined;
|
|
101
|
+
}[] | {
|
|
102
|
+
color?: string | undefined;
|
|
103
|
+
sizes?: {
|
|
104
|
+
size?: string | undefined;
|
|
105
|
+
sizeMode?: string | undefined;
|
|
106
|
+
infos?: {
|
|
107
|
+
name?: string | undefined;
|
|
108
|
+
jsonURL?: string | undefined;
|
|
109
|
+
sort?: number | undefined;
|
|
110
|
+
resources?: {
|
|
111
|
+
name?: string | undefined;
|
|
112
|
+
url?: string | undefined;
|
|
113
|
+
}[] | undefined;
|
|
114
|
+
}[] | null | undefined;
|
|
115
|
+
}[] | undefined;
|
|
116
|
+
}[] | undefined;
|
|
117
|
+
} | null, DeformationResponse | {
|
|
118
|
+
msg?: string | undefined;
|
|
119
|
+
code?: number | undefined;
|
|
120
|
+
data?: {
|
|
121
|
+
size?: string | undefined;
|
|
122
|
+
sizeMode?: string | undefined;
|
|
123
|
+
infos?: {
|
|
124
|
+
name?: string | undefined;
|
|
125
|
+
jsonURL?: string | undefined;
|
|
126
|
+
sort?: number | undefined;
|
|
127
|
+
resources?: {
|
|
128
|
+
name?: string | undefined;
|
|
129
|
+
url?: string | undefined;
|
|
130
|
+
}[] | undefined;
|
|
131
|
+
}[] | null | undefined;
|
|
132
|
+
}[] | {
|
|
133
|
+
color?: string | undefined;
|
|
134
|
+
sizes?: {
|
|
135
|
+
size?: string | undefined;
|
|
136
|
+
sizeMode?: string | undefined;
|
|
137
|
+
infos?: {
|
|
138
|
+
name?: string | undefined;
|
|
139
|
+
jsonURL?: string | undefined;
|
|
140
|
+
sort?: number | undefined;
|
|
141
|
+
resources?: {
|
|
142
|
+
name?: string | undefined;
|
|
143
|
+
url?: string | undefined;
|
|
144
|
+
}[] | undefined;
|
|
145
|
+
}[] | null | undefined;
|
|
146
|
+
}[] | undefined;
|
|
147
|
+
}[] | undefined;
|
|
148
|
+
} | null>;
|
|
149
|
+
lastProductKey: import("vue").Ref<string | null, string | null>;
|
|
150
|
+
effectiveBasicInfo: import("vue").ComputedRef<any>;
|
|
151
|
+
effectiveDiecutData: import("vue").ComputedRef<any>;
|
|
152
|
+
effectiveDeformationData: import("vue").ComputedRef<any>;
|
|
153
|
+
productItems: import("vue").ComputedRef<ProductItem[]>;
|
|
154
|
+
selectedProduct: import("vue").ComputedRef<ProductItem | undefined>;
|
|
155
|
+
hasProductTotal: import("vue").ComputedRef<boolean>;
|
|
156
|
+
totalProducts: import("vue").ComputedRef<number>;
|
|
157
|
+
totalPages: import("vue").ComputedRef<number>;
|
|
158
|
+
hasPrevPage: import("vue").ComputedRef<boolean>;
|
|
159
|
+
hasNextPage: import("vue").ComputedRef<boolean>;
|
|
160
|
+
loadProductList: (page?: number) => Promise<void>;
|
|
161
|
+
loadProductDetails: (productId: number | string) => Promise<void>;
|
|
162
|
+
changeProductPage: (nextPage: number) => Promise<void>;
|
|
163
|
+
getCurrentProductKey: (product: ProductItem | null, basicInfo: BasicInfo | null) => string | null;
|
|
164
|
+
hasProductChanged: (product: ProductItem | null, basicInfo: BasicInfo | null) => boolean;
|
|
165
|
+
resetForProductChange: () => void;
|
|
166
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* COMPLETE 分片蒙版「抓手模式」:关闭时不可拖;开启后双击某片进入可拖状态,再双击同一蒙版仅卸武装(不关闭抓手);Esc 退出抓手模式。
|
|
3
|
+
*/
|
|
4
|
+
import { type Ref } from 'vue';
|
|
5
|
+
import { type Canvas } from 'fabric';
|
|
6
|
+
export declare function useSplitPieceHandTool(options: {
|
|
7
|
+
getCanvas: () => Canvas | null;
|
|
8
|
+
isReadOnly: () => boolean;
|
|
9
|
+
/** 分片 Guideline 与画布蒙版同步中:勿因 selection 瞬态 disarm(applyEditorGuideLayers 会移除对象触发 cleared) */
|
|
10
|
+
shouldSuppressSelectionDisarm?: () => boolean;
|
|
11
|
+
/**
|
|
12
|
+
* 双击分片蒙版(或虚线映射到蒙版)时聚焦视口;抓手关闭时蒙版 evented:false,仍用几何命中。
|
|
13
|
+
* 抓手开启且本次双击为「退出武装」时不调用。
|
|
14
|
+
*/
|
|
15
|
+
onSplitMaskDoubleClickFocus?: (maskObject: any) => void;
|
|
16
|
+
/** 双击画布空白区域(非对象)时回调,可用于恢复视口与清理焦点提示 */
|
|
17
|
+
onCanvasBlankDoubleClick?: () => void;
|
|
18
|
+
/** 鼠标悬浮在分片(含虚线层)上时回调,用于显示交互提示 */
|
|
19
|
+
onSplitMaskHoverChange?: (payload: {
|
|
20
|
+
groupId: string;
|
|
21
|
+
partName: string;
|
|
22
|
+
clientX: number;
|
|
23
|
+
clientY: number;
|
|
24
|
+
} | null) => void;
|
|
25
|
+
}): {
|
|
26
|
+
handToolActive: Ref<boolean, boolean>;
|
|
27
|
+
applyMaskInteractionPolicy: () => void;
|
|
28
|
+
restoreArmedSplitMaskSelection: () => void;
|
|
29
|
+
isArmedMaskActiveOnCanvas: () => boolean;
|
|
30
|
+
getArmedGroupId: () => string | null;
|
|
31
|
+
attachToCanvas: () => void;
|
|
32
|
+
detachFromCanvas: () => void;
|
|
33
|
+
resetForNewCanvas: () => void;
|
|
34
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 模板加载/模式切换管理 Composable
|
|
3
|
+
* 负责模板 JSON 加载、画布重置、模式配置获取等
|
|
4
|
+
*/
|
|
5
|
+
import type { Canvas } from 'fabric';
|
|
6
|
+
import type { Ref, ComputedRef } from 'vue';
|
|
7
|
+
export interface TemplateItem {
|
|
8
|
+
jsonURL?: string;
|
|
9
|
+
resources?: any[];
|
|
10
|
+
type?: string;
|
|
11
|
+
size?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface UseTemplateLoaderOptions {
|
|
14
|
+
getCanvas: () => Canvas | null;
|
|
15
|
+
toProxyUrl: (url: string) => string;
|
|
16
|
+
templateModeOptions: ComputedRef<TemplateItem[]>;
|
|
17
|
+
selectedSize: Ref<string>;
|
|
18
|
+
selectedMode: Ref<string>;
|
|
19
|
+
setLoadingTemplate: (loading: boolean) => void;
|
|
20
|
+
templateError: Ref<string>;
|
|
21
|
+
loadCanvasJson: (json: any, onDone?: () => void | Promise<void>) => Promise<void>;
|
|
22
|
+
clearGuideResources: () => void;
|
|
23
|
+
renderGuideResources: (resources: any[]) => void;
|
|
24
|
+
/** 若提供则在 loadTemplateJson 完成后调用(如单片分片可拖动蒙版),否则仍用 renderGuideResources */
|
|
25
|
+
applyGuideLayers?: (filteredTemplateGuideResources: any[]) => void | Promise<void>;
|
|
26
|
+
isGuideResource: (resource: any) => boolean;
|
|
27
|
+
setZoom: (value: number) => void;
|
|
28
|
+
zoom: Ref<number>;
|
|
29
|
+
/** 模板 JSON 拉取成功后回调(用于保存快照时把 jsonURL 替换为解析对象) */
|
|
30
|
+
onTemplateJsonLoaded?: (jsonURL: string, json: unknown) => void;
|
|
31
|
+
}
|
|
32
|
+
export declare function useTemplateLoader(options: UseTemplateLoaderOptions): {
|
|
33
|
+
resetCanvasForTemplate: () => void;
|
|
34
|
+
getModeConfig: () => TemplateItem | null;
|
|
35
|
+
loadTemplateJson: (jsonURL: string, resources?: any[]) => Promise<void>;
|
|
36
|
+
};
|