@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,48 @@
|
|
|
1
|
+
import type { BasicInfo, DeformationResponse, DeformationGroup, DeformationColorGroup } from '../../../types';
|
|
2
|
+
export declare function useTemplateManager(effectiveBasicInfo: () => BasicInfo | null, effectiveDeformationData: () => DeformationResponse | null): {
|
|
3
|
+
selectedTemplateIndex: import("vue").Ref<number, number>;
|
|
4
|
+
previewTemplateIndex: import("vue").Ref<number, number>;
|
|
5
|
+
selectedSize: import("vue").Ref<string, string>;
|
|
6
|
+
selectedColor: import("vue").Ref<string, string>;
|
|
7
|
+
selectedMode: import("vue").Ref<string, string>;
|
|
8
|
+
showTemplateModal: import("vue").Ref<boolean, boolean>;
|
|
9
|
+
loadingTemplate: import("vue").Ref<boolean, boolean>;
|
|
10
|
+
templateError: import("vue").Ref<string, string>;
|
|
11
|
+
isNewDeformationFormat: import("vue").ComputedRef<boolean>;
|
|
12
|
+
colorOptions: import("vue").ComputedRef<string[]>;
|
|
13
|
+
colorLabelByValue: import("vue").ComputedRef<Record<string, string>>;
|
|
14
|
+
sizeOptions: import("vue").ComputedRef<string[]>;
|
|
15
|
+
sizeOptionsFromDeformation: import("vue").ComputedRef<string[]>;
|
|
16
|
+
templateItems: import("vue").ComputedRef<{
|
|
17
|
+
id: string;
|
|
18
|
+
name: string | undefined;
|
|
19
|
+
resources: {
|
|
20
|
+
name?: string;
|
|
21
|
+
url?: string;
|
|
22
|
+
}[];
|
|
23
|
+
jsonURL: string | undefined;
|
|
24
|
+
thumb: any;
|
|
25
|
+
}[]>;
|
|
26
|
+
templateTotal: import("vue").ComputedRef<number>;
|
|
27
|
+
canPrevTemplate: import("vue").ComputedRef<boolean>;
|
|
28
|
+
canNextTemplate: import("vue").ComputedRef<boolean>;
|
|
29
|
+
selectedTemplate: import("vue").ComputedRef<{
|
|
30
|
+
id: string;
|
|
31
|
+
name: string | undefined;
|
|
32
|
+
resources: {
|
|
33
|
+
name?: string;
|
|
34
|
+
url?: string;
|
|
35
|
+
}[];
|
|
36
|
+
jsonURL: string | undefined;
|
|
37
|
+
thumb: any;
|
|
38
|
+
}>;
|
|
39
|
+
pickThumb: (resources?: any[]) => any;
|
|
40
|
+
getDeformationDataArray: () => DeformationGroup[] | DeformationColorGroup[];
|
|
41
|
+
goPrevTemplate: () => void;
|
|
42
|
+
goNextTemplate: () => void;
|
|
43
|
+
setPreviewTemplateIndex: (index: number) => void;
|
|
44
|
+
openTemplateModal: () => void;
|
|
45
|
+
closeTemplateModal: () => void;
|
|
46
|
+
selectTemplate: (index: number) => void;
|
|
47
|
+
setLoadingTemplate: (loading: boolean, error?: string) => void;
|
|
48
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Canvas } from 'fabric';
|
|
2
|
+
export declare function useTextHandler(getCanvas: () => Canvas | null, syncLayers: () => void, syncToolState: (obj?: any) => void): {
|
|
3
|
+
addText: () => Promise<void>;
|
|
4
|
+
addLabel: () => Promise<void>;
|
|
5
|
+
updateTextProp: (propName: string, value: any) => void;
|
|
6
|
+
applyTextStyle: (style: {
|
|
7
|
+
fontFamily?: string;
|
|
8
|
+
fontSize?: number;
|
|
9
|
+
fill?: string;
|
|
10
|
+
strokeWidth?: number;
|
|
11
|
+
stroke?: string;
|
|
12
|
+
charSpacing?: number;
|
|
13
|
+
lineHeight?: number;
|
|
14
|
+
fontWeight?: string | number;
|
|
15
|
+
fontStyle?: string;
|
|
16
|
+
textAlign?: string;
|
|
17
|
+
}) => void;
|
|
18
|
+
isTextObject: (obj: any) => boolean;
|
|
19
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export declare function useToolState(): {
|
|
2
|
+
imageToolState: import("vue").Ref<{
|
|
3
|
+
visible: boolean;
|
|
4
|
+
mode: string;
|
|
5
|
+
scale: number;
|
|
6
|
+
isPattern: boolean;
|
|
7
|
+
}, {
|
|
8
|
+
visible: boolean;
|
|
9
|
+
mode: string;
|
|
10
|
+
scale: number;
|
|
11
|
+
isPattern: boolean;
|
|
12
|
+
} | {
|
|
13
|
+
visible: boolean;
|
|
14
|
+
mode: string;
|
|
15
|
+
scale: number;
|
|
16
|
+
isPattern: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
layerToolState: import("vue").Ref<{
|
|
19
|
+
visible: boolean;
|
|
20
|
+
opacity: number;
|
|
21
|
+
}, {
|
|
22
|
+
visible: boolean;
|
|
23
|
+
opacity: number;
|
|
24
|
+
} | {
|
|
25
|
+
visible: boolean;
|
|
26
|
+
opacity: number;
|
|
27
|
+
}>;
|
|
28
|
+
textToolState: import("vue").Ref<{
|
|
29
|
+
visible: boolean;
|
|
30
|
+
fontFamily: string;
|
|
31
|
+
fontSize: number;
|
|
32
|
+
charSpacing: number;
|
|
33
|
+
lineHeight: number;
|
|
34
|
+
fill: string;
|
|
35
|
+
strokeWidth: number;
|
|
36
|
+
stroke: string;
|
|
37
|
+
textAlign: string;
|
|
38
|
+
fontWeight: string | number;
|
|
39
|
+
fontStyle: string;
|
|
40
|
+
underline: boolean;
|
|
41
|
+
padding: number;
|
|
42
|
+
}, {
|
|
43
|
+
visible: boolean;
|
|
44
|
+
fontFamily: string;
|
|
45
|
+
fontSize: number;
|
|
46
|
+
charSpacing: number;
|
|
47
|
+
lineHeight: number;
|
|
48
|
+
fill: string;
|
|
49
|
+
strokeWidth: number;
|
|
50
|
+
stroke: string;
|
|
51
|
+
textAlign: string;
|
|
52
|
+
fontWeight: string | number;
|
|
53
|
+
fontStyle: string;
|
|
54
|
+
underline: boolean;
|
|
55
|
+
padding: number;
|
|
56
|
+
} | {
|
|
57
|
+
visible: boolean;
|
|
58
|
+
fontFamily: string;
|
|
59
|
+
fontSize: number;
|
|
60
|
+
charSpacing: number;
|
|
61
|
+
lineHeight: number;
|
|
62
|
+
fill: string;
|
|
63
|
+
strokeWidth: number;
|
|
64
|
+
stroke: string;
|
|
65
|
+
textAlign: string;
|
|
66
|
+
fontWeight: string | number;
|
|
67
|
+
fontStyle: string;
|
|
68
|
+
underline: boolean;
|
|
69
|
+
padding: number;
|
|
70
|
+
}>;
|
|
71
|
+
showToolPanel: import("vue").ComputedRef<boolean>;
|
|
72
|
+
showImageTools: (mode?: string, scale?: number, isPattern?: boolean) => void;
|
|
73
|
+
showTextTools: (textObj?: any) => void;
|
|
74
|
+
showLayerTools: (opacity?: number) => void;
|
|
75
|
+
hideAllTools: () => void;
|
|
76
|
+
updateImageToolState: (updates: Partial<{
|
|
77
|
+
visible: boolean;
|
|
78
|
+
mode: string;
|
|
79
|
+
scale: number;
|
|
80
|
+
isPattern: boolean;
|
|
81
|
+
}>) => void;
|
|
82
|
+
updateTextToolState: (updates: Partial<{
|
|
83
|
+
visible: boolean;
|
|
84
|
+
fontFamily: string;
|
|
85
|
+
fontSize: number;
|
|
86
|
+
charSpacing: number;
|
|
87
|
+
lineHeight: number;
|
|
88
|
+
fill: string;
|
|
89
|
+
strokeWidth: number;
|
|
90
|
+
stroke: string;
|
|
91
|
+
textAlign: string;
|
|
92
|
+
fontWeight: string | number;
|
|
93
|
+
fontStyle: string;
|
|
94
|
+
underline: boolean;
|
|
95
|
+
padding: number;
|
|
96
|
+
}>) => void;
|
|
97
|
+
updateLayerToolState: (updates: Partial<{
|
|
98
|
+
visible: boolean;
|
|
99
|
+
opacity: number;
|
|
100
|
+
}>) => void;
|
|
101
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工具栏状态同步 Composable
|
|
3
|
+
* 根据当前选中的画布对象同步图片/图层/文本工具面板状态
|
|
4
|
+
*/
|
|
5
|
+
import type { Ref } from 'vue';
|
|
6
|
+
export interface ImageToolState {
|
|
7
|
+
visible: boolean;
|
|
8
|
+
mode: string;
|
|
9
|
+
scale: number;
|
|
10
|
+
isPattern: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface LayerToolState {
|
|
13
|
+
visible: boolean;
|
|
14
|
+
opacity: number;
|
|
15
|
+
}
|
|
16
|
+
export interface TextToolState {
|
|
17
|
+
visible: boolean;
|
|
18
|
+
fontFamily: string;
|
|
19
|
+
fontSize: number;
|
|
20
|
+
charSpacing: number;
|
|
21
|
+
lineHeight: number;
|
|
22
|
+
fill: string;
|
|
23
|
+
strokeWidth: number;
|
|
24
|
+
stroke: string;
|
|
25
|
+
textAlign: string;
|
|
26
|
+
fontWeight: string | number;
|
|
27
|
+
fontStyle: string;
|
|
28
|
+
underline: boolean;
|
|
29
|
+
padding: number;
|
|
30
|
+
}
|
|
31
|
+
export interface UseToolStateSyncOptions {
|
|
32
|
+
getCanvas: () => any;
|
|
33
|
+
imageToolState: Ref<ImageToolState>;
|
|
34
|
+
layerToolState: Ref<LayerToolState>;
|
|
35
|
+
textToolState: Ref<TextToolState>;
|
|
36
|
+
activeTab: Ref<string>;
|
|
37
|
+
activeLayerId: Ref<string | number | undefined>;
|
|
38
|
+
guideResourceRole?: string;
|
|
39
|
+
/** 非 theme1:选中对象时切到该 Tab(一般为 layer) */
|
|
40
|
+
selectionAutoTab?: Ref<'layer' | 'add'>;
|
|
41
|
+
/** theme1:文本 / 图片 / 其它 对应 addText、upload、productDetail */
|
|
42
|
+
isTheme1Layout?: Ref<boolean>;
|
|
43
|
+
}
|
|
44
|
+
export declare function useToolStateSync(options: UseToolStateSyncOptions): {
|
|
45
|
+
syncImageToolState: (active?: any, autoSwitchTab?: boolean) => void;
|
|
46
|
+
syncLayerToolState: (active?: any) => void;
|
|
47
|
+
syncTextToolState: (active?: any, autoSwitchTab?: boolean) => void;
|
|
48
|
+
updateActive: (autoSwitchTab?: boolean) => void;
|
|
49
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface UseWorkerManagerOptions {
|
|
2
|
+
maskWorkerPath?: string;
|
|
3
|
+
copyWorkerPath?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function useWorkerManager(options?: UseWorkerManagerOptions): {
|
|
6
|
+
ensureMaskWorker: () => void;
|
|
7
|
+
ensureCopyWorker: () => void;
|
|
8
|
+
renderMaskInWorker: (payload: any) => Promise<Blob | null>;
|
|
9
|
+
copyToDiecutsInWorker: (payload: any) => Promise<any>;
|
|
10
|
+
dispose: () => void;
|
|
11
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface FontEntry {
|
|
2
|
+
family: string;
|
|
3
|
+
googleSlug: string;
|
|
4
|
+
category: 'sans-serif' | 'serif' | 'display' | 'handwriting' | 'monospace';
|
|
5
|
+
}
|
|
6
|
+
export declare const GOOGLE_FONTS: FontEntry[];
|
|
7
|
+
export declare const ALL_FONTS: string[];
|
|
8
|
+
export declare const DEFAULT_FONT_FAMILY: string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type InjectionKey, type Ref } from 'vue';
|
|
2
|
+
export type FabricGuideItem = {
|
|
3
|
+
id: string;
|
|
4
|
+
kind: 'h' | 'v';
|
|
5
|
+
pos: number;
|
|
6
|
+
};
|
|
7
|
+
/** 画布上是否至少有一条用户标尺参考线(供顶栏等跨 provide 树使用,与 clear handler 同为单实例约定) */
|
|
8
|
+
export declare const userCanvasGuidesNonEmpty: Ref<boolean, boolean>;
|
|
9
|
+
export type EditorCanvasGuidesContext = {
|
|
10
|
+
guides: Ref<FabricGuideItem[]>;
|
|
11
|
+
dragPreview: Ref<{
|
|
12
|
+
kind: 'h' | 'v';
|
|
13
|
+
pos: number;
|
|
14
|
+
} | null>;
|
|
15
|
+
selectedGuideId: Ref<string | null>;
|
|
16
|
+
selectGuide: (id: string | null) => void;
|
|
17
|
+
removeGuide: (id: string) => void;
|
|
18
|
+
clearAllGuides: () => void;
|
|
19
|
+
};
|
|
20
|
+
export declare const EDITOR_CANVAS_GUIDES_KEY: InjectionKey<EditorCanvasGuidesContext>;
|
|
21
|
+
export declare function registerUserCanvasGuidesClearHandler(fn: (() => void) | null): void;
|
|
22
|
+
export declare function invokeUserCanvasGuidesClear(): void;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Rect } from 'fabric';
|
|
2
|
+
type PatternLayerOptions = ConstructorParameters<typeof Rect>[0] & {
|
|
3
|
+
patternElement?: CanvasImageSource | null;
|
|
4
|
+
patternTileWidth?: number;
|
|
5
|
+
patternTileHeight?: number;
|
|
6
|
+
patternScale?: number;
|
|
7
|
+
patternPhaseX?: number;
|
|
8
|
+
patternPhaseY?: number;
|
|
9
|
+
patternGapX?: number;
|
|
10
|
+
patternGapY?: number;
|
|
11
|
+
patternMode?: string;
|
|
12
|
+
patternSeed?: number;
|
|
13
|
+
patternTileFlipX?: boolean;
|
|
14
|
+
patternTileFlipY?: boolean;
|
|
15
|
+
patternTileAngle?: number;
|
|
16
|
+
};
|
|
17
|
+
export declare const DEFAULT_PATTERN_TILE_GAP = 0;
|
|
18
|
+
export declare const PATTERN_RENDER_MODE_SINGLE = "single";
|
|
19
|
+
export declare const PATTERN_RENDER_MODE_FULL = "full";
|
|
20
|
+
export declare function getPatternRenderMode(obj: any): string;
|
|
21
|
+
export declare function isPatternSingleRenderMode(obj: any): boolean;
|
|
22
|
+
export declare function setPatternRenderMode(obj: any, mode: string): void;
|
|
23
|
+
export declare function positiveModulo(value: number, size: number): number;
|
|
24
|
+
export type PatternTileMetrics = {
|
|
25
|
+
tileW: number;
|
|
26
|
+
tileH: number;
|
|
27
|
+
strideW: number;
|
|
28
|
+
strideH: number;
|
|
29
|
+
scale: number;
|
|
30
|
+
};
|
|
31
|
+
/** 与 PatternLayer._render 一致的平铺块尺寸与步长 */
|
|
32
|
+
export declare function resolvePatternTileMetrics(obj: any): PatternTileMetrics;
|
|
33
|
+
export type PatternTileGridLayout = PatternTileMetrics & {
|
|
34
|
+
centerX: number;
|
|
35
|
+
centerY: number;
|
|
36
|
+
sceneLeft: number;
|
|
37
|
+
sceneTop: number;
|
|
38
|
+
startSceneX: number;
|
|
39
|
+
startSceneY: number;
|
|
40
|
+
startX: number;
|
|
41
|
+
startY: number;
|
|
42
|
+
phaseX: number;
|
|
43
|
+
phaseY: number;
|
|
44
|
+
mode: string;
|
|
45
|
+
};
|
|
46
|
+
/** 与 PatternLayer._render 一致的网格锚点(startSceneX/Y,非裸 patternPhase) */
|
|
47
|
+
export declare function getPatternTileGridLayout(obj: any): PatternTileGridLayout;
|
|
48
|
+
/** 场景坐标 → 所在平铺格左上角(场景坐标),与绘制网格对齐 */
|
|
49
|
+
export declare function scenePointToPatternTileSceneOrigin(obj: any, sceneX: number, sceneY: number): {
|
|
50
|
+
left: number;
|
|
51
|
+
top: number;
|
|
52
|
+
tileW: number;
|
|
53
|
+
tileH: number;
|
|
54
|
+
};
|
|
55
|
+
export declare function getPatternLayerGap(obj: any): {
|
|
56
|
+
x: number;
|
|
57
|
+
y: number;
|
|
58
|
+
};
|
|
59
|
+
/** 平铺单元格基础变换(来自转平铺前图片的 flipX/flipY/angle) */
|
|
60
|
+
export declare function resolvePatternTileTransform(obj: any): {
|
|
61
|
+
flipX: boolean;
|
|
62
|
+
flipY: boolean;
|
|
63
|
+
angle: number;
|
|
64
|
+
};
|
|
65
|
+
export declare function resolvePatternTileFlip(obj: any): {
|
|
66
|
+
flipX: boolean;
|
|
67
|
+
flipY: boolean;
|
|
68
|
+
};
|
|
69
|
+
export declare function drawPatternTile(ctx: CanvasRenderingContext2D, source: CanvasImageSource, x: number, y: number, w: number, h: number, flipX?: boolean, flipY?: boolean, angle?: number): void;
|
|
70
|
+
/**
|
|
71
|
+
* 自定义平铺图层:只绘制当前对象本地可见区域内的 tile。
|
|
72
|
+
* 拖动时更新 patternPhaseX/Y,不移动对象几何,避免 fabric.Pattern offset 与 cover rect 混用。
|
|
73
|
+
*/
|
|
74
|
+
export declare class PatternLayer extends Rect {
|
|
75
|
+
customData?: Record<string, any>;
|
|
76
|
+
patternElement: CanvasImageSource | null;
|
|
77
|
+
patternTileWidth: number;
|
|
78
|
+
patternTileHeight: number;
|
|
79
|
+
patternScale: number;
|
|
80
|
+
patternPhaseX: number;
|
|
81
|
+
patternPhaseY: number;
|
|
82
|
+
patternGapX: number;
|
|
83
|
+
patternGapY: number;
|
|
84
|
+
patternMode: string;
|
|
85
|
+
patternSeed: number;
|
|
86
|
+
patternTileFlipX: boolean;
|
|
87
|
+
patternTileFlipY: boolean;
|
|
88
|
+
patternTileAngle: number;
|
|
89
|
+
/** mouse:down 锁定的可拖动平铺格左上角(场景坐标),与拖动幽灵块一致 */
|
|
90
|
+
patternActiveTileLeft: number | null;
|
|
91
|
+
patternActiveTileTop: number | null;
|
|
92
|
+
static type: string;
|
|
93
|
+
constructor(options?: PatternLayerOptions);
|
|
94
|
+
setActiveDragTile(sceneLeft: number, sceneTop: number): void;
|
|
95
|
+
clearActiveDragTile(): void;
|
|
96
|
+
setPatternElement(source: CanvasImageSource | null): void;
|
|
97
|
+
setPatternPhase(x: number, y: number): void;
|
|
98
|
+
setPatternGap(x: number, y: number): void;
|
|
99
|
+
_render(ctx: CanvasRenderingContext2D): void;
|
|
100
|
+
}
|
|
101
|
+
export declare function isPatternLayer(obj: any): obj is PatternLayer;
|
|
102
|
+
/** Fabric clone() 不会复制 patternElement 等运行时字段,需在 clone 后手动同步 */
|
|
103
|
+
export declare function copyPatternLayerRuntimeState(src: any, dst: any): boolean;
|
|
104
|
+
export {};
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import type { ProductItem, BasicInfo, DiecutResponse, DeformationResponse, EditorOptions, ProductListApi, ProductDetailApi, LicenseConfig, DiecutStateMapResult, GalleryApi, CustomSidebarTabDef, EditorUiTheme, RenderAllTemplatesByColorGroup } from '../../types';
|
|
2
|
+
import './editor.css';
|
|
3
|
+
type EditorProps = {
|
|
4
|
+
product?: ProductItem | null;
|
|
5
|
+
basicInfo?: BasicInfo | null;
|
|
6
|
+
diecutData?: DiecutResponse | null;
|
|
7
|
+
deformationData?: DeformationResponse | null;
|
|
8
|
+
options?: EditorOptions;
|
|
9
|
+
productListApi?: ProductListApi;
|
|
10
|
+
productDetailApi?: ProductDetailApi;
|
|
11
|
+
productListPageSize?: number;
|
|
12
|
+
productListInitialPage?: number;
|
|
13
|
+
/** 进入页面时默认选中的产品 ID(来自 URL),仅当在第一页列表中时才选中 */
|
|
14
|
+
initialProductId?: string | number;
|
|
15
|
+
fileBaseUrl?: string;
|
|
16
|
+
licenseConfig?: LicenseConfig;
|
|
17
|
+
fileToken?: string | null;
|
|
18
|
+
/** 画布变更时调用,传入 getter:调用可获取 { stateMap, selectedColor, selectedSize } */
|
|
19
|
+
onObjectModified?: (getDiecutStateMap: () => DiecutStateMapResult) => void;
|
|
20
|
+
onRenderAllTemplates?: (renderMethod: () => Promise<Array<{
|
|
21
|
+
index: number;
|
|
22
|
+
bitmap: ImageBitmap | null;
|
|
23
|
+
}>>) => Promise<Array<{
|
|
24
|
+
index: number;
|
|
25
|
+
bitmap: ImageBitmap | null;
|
|
26
|
+
}> | void>;
|
|
27
|
+
onSaveDesign?: () => void | Promise<void>;
|
|
28
|
+
onAddToCart?: () => void | Promise<void>;
|
|
29
|
+
onAddToCartSuccess?: (payload?: {
|
|
30
|
+
addedCount?: number;
|
|
31
|
+
psTaskCode?: string;
|
|
32
|
+
}) => void;
|
|
33
|
+
onAddToCartError?: (msg?: string) => void;
|
|
34
|
+
onGoHome?: () => void;
|
|
35
|
+
onTemplateReady?: () => void | Promise<void>;
|
|
36
|
+
/** 语言:与主应用一致,如 zh-CN、en-US、ja-JP、ko-KR、vi-VN;兼容旧值 zh / en */
|
|
37
|
+
locale?: string;
|
|
38
|
+
/** 自定义文案覆盖,key 与 locales 中一致 */
|
|
39
|
+
messages?: Record<string, string>;
|
|
40
|
+
/** 图库 API(我的图库/官方图库),传入则左侧栏显示图库 Tab */
|
|
41
|
+
galleryApi?: GalleryApi | null;
|
|
42
|
+
/** 左侧栏额外 Tab(竖条 + 内容区由宿主传入 Vue 组件) */
|
|
43
|
+
customSidebarTabs?: CustomSidebarTabDef[];
|
|
44
|
+
};
|
|
45
|
+
declare var __VLS_21: {}, __VLS_27: {}, __VLS_134: {}, __VLS_140: {};
|
|
46
|
+
type __VLS_Slots = {} & {
|
|
47
|
+
'topbar-left'?: (props: typeof __VLS_21) => any;
|
|
48
|
+
} & {
|
|
49
|
+
'topbar-right'?: (props: typeof __VLS_27) => any;
|
|
50
|
+
} & {
|
|
51
|
+
'topbar-left'?: (props: typeof __VLS_134) => any;
|
|
52
|
+
} & {
|
|
53
|
+
'topbar-right'?: (props: typeof __VLS_140) => any;
|
|
54
|
+
};
|
|
55
|
+
declare const __VLS_component: import("vue").DefineComponent<EditorProps, {
|
|
56
|
+
renderAllTemplates: () => Promise<Array<{
|
|
57
|
+
index: number;
|
|
58
|
+
bitmap: ImageBitmap | null;
|
|
59
|
+
blob?: Blob;
|
|
60
|
+
}>>;
|
|
61
|
+
renderAllTemplatesByColor: () => Promise<RenderAllTemplatesByColorGroup[]>;
|
|
62
|
+
collectRenderBundle: () => Promise<import("../../utils/renderedImagesDB").RenderBundle>;
|
|
63
|
+
collectRenderBundleForSize: (size: string) => Promise<import("../../utils/renderedImagesDB").RenderBundle>;
|
|
64
|
+
collectRenderBundlesForSizesColors: (sizes?: string[], colors?: string[]) => Promise<Array<{
|
|
65
|
+
size: string;
|
|
66
|
+
color: string;
|
|
67
|
+
bundle: any;
|
|
68
|
+
}>>;
|
|
69
|
+
renderEffectImagesForSizesColors: (sizes?: string[], colors?: string[]) => Promise<Array<{
|
|
70
|
+
size: string;
|
|
71
|
+
color: string;
|
|
72
|
+
index: number;
|
|
73
|
+
name?: string;
|
|
74
|
+
blob: Blob;
|
|
75
|
+
}>>;
|
|
76
|
+
triggerRenderAllTemplates: () => Promise<Array<{
|
|
77
|
+
index: number;
|
|
78
|
+
bitmap: ImageBitmap | null;
|
|
79
|
+
}>>;
|
|
80
|
+
getDiecutStateMap: () => DiecutStateMapResult;
|
|
81
|
+
getCurrentProductName: () => any;
|
|
82
|
+
getCurrentProductId: () => any;
|
|
83
|
+
getSku: () => any;
|
|
84
|
+
/** 当前尺码下是否同时存在单片与多片两种模板(与画布顶栏可切换模式一致);仅单片时宿主可跳过保存前模式确认 */
|
|
85
|
+
getHasDualTemplateModes: () => boolean;
|
|
86
|
+
getColorOptions: () => string[];
|
|
87
|
+
getSelectedColors: () => string[];
|
|
88
|
+
getSelectedSizes: () => string[];
|
|
89
|
+
setSelectedColor: (color: string) => void;
|
|
90
|
+
setSelectedSize: (size: string) => void;
|
|
91
|
+
setSelectedMode: (mode: unknown) => void;
|
|
92
|
+
loadCanvasJson: (json: any, onDone?: () => void | Promise<void>, loadOptions?: {
|
|
93
|
+
skipRender?: boolean;
|
|
94
|
+
}) => Promise<void>;
|
|
95
|
+
loadDesignStateMap: (payload: Record<string, unknown> | {
|
|
96
|
+
stateMap: Record<string, unknown>;
|
|
97
|
+
selectedColor?: string;
|
|
98
|
+
selectedSize?: string;
|
|
99
|
+
selectedColors?: string[];
|
|
100
|
+
selectedSizes?: string[];
|
|
101
|
+
selectedMode?: string;
|
|
102
|
+
designCanvasSize?: number;
|
|
103
|
+
designCanvasHeight?: number;
|
|
104
|
+
}) => Promise<void>;
|
|
105
|
+
getCurrentPreviewImageBlob: (opts?: {
|
|
106
|
+
renderSize?: number;
|
|
107
|
+
}) => Promise<Blob | null>;
|
|
108
|
+
getPreviewImageBlobByIndex: (index: number, opts?: {
|
|
109
|
+
renderSize?: number;
|
|
110
|
+
}) => Promise<Blob | null>;
|
|
111
|
+
/** 按图片 URL 加入画布(与图库选图一致);theme1 上传 Tab 宿主上传完成后调用 */
|
|
112
|
+
addImageFromUrl: (url: any) => Promise<void>;
|
|
113
|
+
/** 切换实时渲染模式 */
|
|
114
|
+
toggleLiveRender: () => void;
|
|
115
|
+
/** 获取当前是否处于实时渲染模式 */
|
|
116
|
+
getIsLiveRender: () => boolean;
|
|
117
|
+
/** 设置实时渲染模式 */
|
|
118
|
+
setIsLiveRender: (v: boolean) => void;
|
|
119
|
+
/** 获取预览渲染模式 */
|
|
120
|
+
getPreviewRenderMode: () => "fast" | "live";
|
|
121
|
+
/** 设置预览渲染模式 */
|
|
122
|
+
setPreviewRenderMode: (v: "fast" | "live") => void;
|
|
123
|
+
/** 获取实时渲染组件 ref */
|
|
124
|
+
getLiveRenderViewer: () => any;
|
|
125
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
126
|
+
"update:locale": (value: "zh-CN" | "en-US" | "ja-JP" | "ko-KR" | "vi-VN") => any;
|
|
127
|
+
"update:uiTheme": (value: EditorUiTheme) => any;
|
|
128
|
+
}, string, import("vue").PublicProps, Readonly<EditorProps> & Readonly<{
|
|
129
|
+
"onUpdate:locale"?: ((value: "zh-CN" | "en-US" | "ja-JP" | "ko-KR" | "vi-VN") => any) | undefined;
|
|
130
|
+
"onUpdate:uiTheme"?: ((value: EditorUiTheme) => any) | undefined;
|
|
131
|
+
}>, {
|
|
132
|
+
product: ProductItem | null;
|
|
133
|
+
fileToken: string | null;
|
|
134
|
+
onObjectModified: (getDiecutStateMap: () => DiecutStateMapResult) => void;
|
|
135
|
+
onTemplateReady: () => void | Promise<void>;
|
|
136
|
+
onSaveDesign: () => void | Promise<void>;
|
|
137
|
+
onAddToCart: () => void | Promise<void>;
|
|
138
|
+
onGoHome: () => void;
|
|
139
|
+
locale: string;
|
|
140
|
+
galleryApi: GalleryApi | null;
|
|
141
|
+
customSidebarTabs: CustomSidebarTabDef[];
|
|
142
|
+
basicInfo: BasicInfo | null;
|
|
143
|
+
diecutData: DiecutResponse | null;
|
|
144
|
+
deformationData: DeformationResponse | null;
|
|
145
|
+
options: EditorOptions;
|
|
146
|
+
licenseConfig: LicenseConfig;
|
|
147
|
+
onRenderAllTemplates: (renderMethod: () => Promise<Array<{
|
|
148
|
+
index: number;
|
|
149
|
+
bitmap: ImageBitmap | null;
|
|
150
|
+
}>>) => Promise<Array<{
|
|
151
|
+
index: number;
|
|
152
|
+
bitmap: ImageBitmap | null;
|
|
153
|
+
}> | void>;
|
|
154
|
+
onAddToCartSuccess: (payload?: {
|
|
155
|
+
addedCount?: number;
|
|
156
|
+
psTaskCode?: string;
|
|
157
|
+
}) => void;
|
|
158
|
+
onAddToCartError: (msg?: string) => void;
|
|
159
|
+
messages: Record<string, string>;
|
|
160
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
161
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
162
|
+
export default _default;
|
|
163
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
164
|
+
new (): {
|
|
165
|
+
$slots: S;
|
|
166
|
+
};
|
|
167
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type INewData } from "./types";
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
fileToken: string;
|
|
4
|
+
newDataList: INewData[];
|
|
5
|
+
designPic?: HTMLCanvasElement | null;
|
|
6
|
+
displayWidth?: number;
|
|
7
|
+
canvasWidth?: number;
|
|
8
|
+
};
|
|
9
|
+
declare function loadModelData(): Promise<void>;
|
|
10
|
+
declare function startBackgroundRenderWithCurrentDesign(): void;
|
|
11
|
+
declare function switchData(idx: number): Promise<void>;
|
|
12
|
+
declare function renderAsync(): Promise<void>;
|
|
13
|
+
declare function rerender(options?: {
|
|
14
|
+
incremental?: boolean;
|
|
15
|
+
}): Promise<void>;
|
|
16
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {
|
|
17
|
+
rerender: typeof rerender;
|
|
18
|
+
currentDataIndex: import("vue").Ref<number, number>;
|
|
19
|
+
loadModelData: typeof loadModelData;
|
|
20
|
+
renderAsync: typeof renderAsync;
|
|
21
|
+
switchData: typeof switchData;
|
|
22
|
+
startBackgroundRenderWithCurrentDesign: typeof startBackgroundRenderWithCurrentDesign;
|
|
23
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
24
|
+
"update:currentIndex": (value: number) => any;
|
|
25
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
26
|
+
"onUpdate:currentIndex"?: ((value: number) => any) | undefined;
|
|
27
|
+
}>, {
|
|
28
|
+
canvasWidth: number;
|
|
29
|
+
displayWidth: number;
|
|
30
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
31
|
+
export default _default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface PrefetchMessage {
|
|
2
|
+
type: 'prefetch';
|
|
3
|
+
dataList: {
|
|
4
|
+
jsonURL: string;
|
|
5
|
+
name: string;
|
|
6
|
+
}[];
|
|
7
|
+
currentIndex: number;
|
|
8
|
+
fileToken: string;
|
|
9
|
+
}
|
|
10
|
+
interface ResultMessage {
|
|
11
|
+
type: 'jsonReady' | 'complete' | 'error';
|
|
12
|
+
index?: number;
|
|
13
|
+
json?: any;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|