@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,80 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
2
|
+
import type { Canvas } from 'fabric';
|
|
3
|
+
import type { EditorShortcutActionId } from '../utils/editorShortcutIds';
|
|
4
|
+
/** 供快捷键设置 Modal 绑定 */
|
|
5
|
+
export interface EditorShortcutsController {
|
|
6
|
+
recordingActionId: Ref<EditorShortcutActionId | null>;
|
|
7
|
+
conflictMessage: Ref<string>;
|
|
8
|
+
getEffectiveChord: (id: EditorShortcutActionId) => string | null;
|
|
9
|
+
clearBinding: (id: EditorShortcutActionId) => void;
|
|
10
|
+
restoreDefaults: () => void;
|
|
11
|
+
startRecording: (id: EditorShortcutActionId) => void;
|
|
12
|
+
cancelRecording: () => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function useEditorShortcuts(options: {
|
|
15
|
+
storageKey: string;
|
|
16
|
+
getBlocked: () => boolean;
|
|
17
|
+
getReadOnly: () => boolean;
|
|
18
|
+
getCanvas: () => Canvas | null;
|
|
19
|
+
/** 快捷键面板是否打开(打开时不触发画布动作,录制中除外) */
|
|
20
|
+
getPanelOpen: () => boolean;
|
|
21
|
+
onAction: (id: EditorShortcutActionId) => boolean | void;
|
|
22
|
+
}): {
|
|
23
|
+
custom: Ref<{
|
|
24
|
+
layer_crop?: string | undefined;
|
|
25
|
+
duplicate_layer?: string | undefined;
|
|
26
|
+
delete_selected_layer?: string | undefined;
|
|
27
|
+
layer_top?: string | undefined;
|
|
28
|
+
layer_bottom?: string | undefined;
|
|
29
|
+
layer_up?: string | undefined;
|
|
30
|
+
layer_down?: string | undefined;
|
|
31
|
+
undo?: string | undefined;
|
|
32
|
+
redo?: string | undefined;
|
|
33
|
+
nudge_up?: string | undefined;
|
|
34
|
+
nudge_down?: string | undefined;
|
|
35
|
+
nudge_left?: string | undefined;
|
|
36
|
+
nudge_right?: string | undefined;
|
|
37
|
+
add_text?: string | undefined;
|
|
38
|
+
clear_canvas?: string | undefined;
|
|
39
|
+
clear_guides?: string | undefined;
|
|
40
|
+
zoom_in?: string | undefined;
|
|
41
|
+
zoom_out?: string | undefined;
|
|
42
|
+
fit_canvas?: string | undefined;
|
|
43
|
+
export_png?: string | undefined;
|
|
44
|
+
}, Partial<Record<"layer_crop" | "duplicate_layer" | "delete_selected_layer" | "layer_top" | "layer_bottom" | "layer_up" | "layer_down" | "undo" | "redo" | "nudge_up" | "nudge_down" | "nudge_left" | "nudge_right" | "add_text" | "clear_canvas" | "clear_guides" | "zoom_in" | "zoom_out" | "fit_canvas" | "export_png", string>> | {
|
|
45
|
+
layer_crop?: string | undefined;
|
|
46
|
+
duplicate_layer?: string | undefined;
|
|
47
|
+
delete_selected_layer?: string | undefined;
|
|
48
|
+
layer_top?: string | undefined;
|
|
49
|
+
layer_bottom?: string | undefined;
|
|
50
|
+
layer_up?: string | undefined;
|
|
51
|
+
layer_down?: string | undefined;
|
|
52
|
+
undo?: string | undefined;
|
|
53
|
+
redo?: string | undefined;
|
|
54
|
+
nudge_up?: string | undefined;
|
|
55
|
+
nudge_down?: string | undefined;
|
|
56
|
+
nudge_left?: string | undefined;
|
|
57
|
+
nudge_right?: string | undefined;
|
|
58
|
+
add_text?: string | undefined;
|
|
59
|
+
clear_canvas?: string | undefined;
|
|
60
|
+
clear_guides?: string | undefined;
|
|
61
|
+
zoom_in?: string | undefined;
|
|
62
|
+
zoom_out?: string | undefined;
|
|
63
|
+
fit_canvas?: string | undefined;
|
|
64
|
+
export_png?: string | undefined;
|
|
65
|
+
}>;
|
|
66
|
+
disabled: Ref<("layer_crop" | "duplicate_layer" | "delete_selected_layer" | "layer_top" | "layer_bottom" | "layer_up" | "layer_down" | "undo" | "redo" | "nudge_up" | "nudge_down" | "nudge_left" | "nudge_right" | "add_text" | "clear_canvas" | "clear_guides" | "zoom_in" | "zoom_out" | "fit_canvas" | "export_png")[], ("layer_crop" | "duplicate_layer" | "delete_selected_layer" | "layer_top" | "layer_bottom" | "layer_up" | "layer_down" | "undo" | "redo" | "nudge_up" | "nudge_down" | "nudge_left" | "nudge_right" | "add_text" | "clear_canvas" | "clear_guides" | "zoom_in" | "zoom_out" | "fit_canvas" | "export_png")[]>;
|
|
67
|
+
recordingActionId: Ref<"layer_crop" | "duplicate_layer" | "delete_selected_layer" | "layer_top" | "layer_bottom" | "layer_up" | "layer_down" | "undo" | "redo" | "nudge_up" | "nudge_down" | "nudge_left" | "nudge_right" | "add_text" | "clear_canvas" | "clear_guides" | "zoom_in" | "zoom_out" | "fit_canvas" | "export_png" | null, "layer_crop" | "duplicate_layer" | "delete_selected_layer" | "layer_top" | "layer_bottom" | "layer_up" | "layer_down" | "undo" | "redo" | "nudge_up" | "nudge_down" | "nudge_left" | "nudge_right" | "add_text" | "clear_canvas" | "clear_guides" | "zoom_in" | "zoom_out" | "fit_canvas" | "export_png" | null>;
|
|
68
|
+
conflictMessage: Ref<string, string>;
|
|
69
|
+
hydrate: () => void;
|
|
70
|
+
getEffectiveChord: (id: EditorShortcutActionId) => string | null;
|
|
71
|
+
setCustomChord: (id: EditorShortcutActionId, chord: string) => boolean;
|
|
72
|
+
clearBinding: (id: EditorShortcutActionId) => void;
|
|
73
|
+
restoreDefaults: () => void;
|
|
74
|
+
startRecording: (id: EditorShortcutActionId) => void;
|
|
75
|
+
cancelRecording: () => void;
|
|
76
|
+
tryCommitRecording: (e: KeyboardEvent) => boolean;
|
|
77
|
+
install: () => void;
|
|
78
|
+
uninstall: () => void;
|
|
79
|
+
};
|
|
80
|
+
export type UseEditorShortcutsReturn = ReturnType<typeof useEditorShortcuts>;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor 统一 Watchers Composable
|
|
3
|
+
* 集中管理产品/模板/刀板/尺寸/颜色等响应式联动
|
|
4
|
+
*/
|
|
5
|
+
import { type Ref } from 'vue';
|
|
6
|
+
export interface UseEditorWatchersOptions {
|
|
7
|
+
props: {
|
|
8
|
+
options?: {
|
|
9
|
+
enableGrid?: boolean;
|
|
10
|
+
};
|
|
11
|
+
basicInfo?: any;
|
|
12
|
+
diecutData?: any;
|
|
13
|
+
deformationData?: any;
|
|
14
|
+
fileToken?: string | null;
|
|
15
|
+
};
|
|
16
|
+
showGrid: Ref<boolean>;
|
|
17
|
+
activeTab: Ref<string>;
|
|
18
|
+
getCanvas: () => any;
|
|
19
|
+
syncImageToolState: (active?: any, autoSwitchTab?: boolean) => void;
|
|
20
|
+
syncLayerToolState: (active?: any) => void;
|
|
21
|
+
syncTextToolState: (active?: any, autoSwitchTab?: boolean) => void;
|
|
22
|
+
selectedProductIndex: Ref<number>;
|
|
23
|
+
productItems: Ref<any[]>;
|
|
24
|
+
selectedProduct: Ref<any>;
|
|
25
|
+
isListMode: Ref<boolean>;
|
|
26
|
+
doResetForProduct: () => void;
|
|
27
|
+
loadProductDetails: (id: number | string) => Promise<void>;
|
|
28
|
+
sizeOptions: Ref<any[]>;
|
|
29
|
+
selectedSize: Ref<string>;
|
|
30
|
+
sizeOptionsFromDeformation: Ref<string[]>;
|
|
31
|
+
selectedColor: Ref<string>;
|
|
32
|
+
effectiveDeformationData: Ref<any>;
|
|
33
|
+
isNewDeformationFormat: Ref<boolean>;
|
|
34
|
+
colorOptions: Ref<string[]>;
|
|
35
|
+
templateItems: Ref<any[]>;
|
|
36
|
+
selectedTemplateIndex: Ref<number>;
|
|
37
|
+
previewTemplateIndex: Ref<number>;
|
|
38
|
+
templateModeOptions: Ref<any[]>;
|
|
39
|
+
selectedMode: Ref<string>;
|
|
40
|
+
diecutOptions: Ref<Array<{
|
|
41
|
+
id: string;
|
|
42
|
+
}>>;
|
|
43
|
+
selectedDiecutId: Ref<string>;
|
|
44
|
+
applyTemplateToCanvas: (template: any) => void;
|
|
45
|
+
buildInitialPreviewRenderData: (opts?: {
|
|
46
|
+
commitHd?: boolean;
|
|
47
|
+
useCachedSplitScreenshotsOnly?: boolean;
|
|
48
|
+
}) => Promise<void>;
|
|
49
|
+
saveCanvasState: (id: string, sizeOverride?: string) => Promise<void>;
|
|
50
|
+
restoreCanvasState: (id: string) => any;
|
|
51
|
+
restoreCanvasStateAsync?: (id: string) => Promise<boolean>;
|
|
52
|
+
/** 是否「多尺码不同设计版」(SIZE_SPECIFIC):决定切尺码是否需要按尺码 落盘/还原 画布 */
|
|
53
|
+
getIsPerSizeDesign?: () => boolean;
|
|
54
|
+
/** 切尺码后:为当前尺码所有已设计的非激活分片用保存状态离屏生成截图(补齐效果图) */
|
|
55
|
+
warmDesignedPieces?: () => Promise<void>;
|
|
56
|
+
onAfterCanvasRestored?: (diecutId: string) => void;
|
|
57
|
+
resetCanvasForTemplate: () => void;
|
|
58
|
+
setZoom: (v: number) => void;
|
|
59
|
+
zoom: Ref<number>;
|
|
60
|
+
/** Classic ↔ Zone 切换时恢复对应模式的视口缩放/平移 */
|
|
61
|
+
switchTemplateViewportMode?: (mode: string) => void;
|
|
62
|
+
/** 首次绑定当前模板模式(fitCanvas 后写入该模式默认视口) */
|
|
63
|
+
initTemplateViewportMode?: (mode: string) => void;
|
|
64
|
+
/** 换产品时重置两种模式的视口记忆 */
|
|
65
|
+
resetTemplateViewportByMode?: () => void;
|
|
66
|
+
/** 统一应用引导层(单片优先分片可拖动蒙版);COMPLETE 时 fallback 为整模板引导资源;SPLIT 仅刀版 Guideline+SPLIT */
|
|
67
|
+
applyEditorGuideLayers: (fallbackTemplateGuideResources?: any[]) => Promise<void>;
|
|
68
|
+
generateDiecutScreenshot: (id: string, snapshotOpts?: any, precapturedBaseBlob?: Blob | null) => Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* 在切换分片前同步截取主画布当前像素,用于喂给 fire-and-forget generateDiecutScreenshot,
|
|
71
|
+
* 避免内部 getCanvasBaseScreenshot 的 idleCallback 让 capture 推迟到 restore 完成后,
|
|
72
|
+
* 截到下一分片的像素污染 prev 分片 cache。
|
|
73
|
+
*/
|
|
74
|
+
captureMainBaseBlob?: () => Promise<Blob | null>;
|
|
75
|
+
loadTemplateJson: (url: string, resources?: any[]) => Promise<void>;
|
|
76
|
+
getModeConfig: () => {
|
|
77
|
+
jsonURL?: string;
|
|
78
|
+
resources?: any[];
|
|
79
|
+
} | null;
|
|
80
|
+
setExternalFileToken: (token: string | null) => void;
|
|
81
|
+
onTemplateReady?: () => void | Promise<void>;
|
|
82
|
+
/** 刀板切换流程中置 true,用于暂停 queuePreviewUpdate,避免 restore 时 object:added 触发预览 loading */
|
|
83
|
+
diecutSwitchInProgress: Ref<boolean>;
|
|
84
|
+
/**
|
|
85
|
+
* 切换刀板前取消预览 debounce(与 saveCanvasState(prev) 配合)。
|
|
86
|
+
* 否则 timer 可能在 selectedDiecutId 已指向新分片后才执行,把画布误存到新分片的 stateMap。
|
|
87
|
+
*/
|
|
88
|
+
clearPendingPreviewUpdate?: () => void;
|
|
89
|
+
/**
|
|
90
|
+
* Dirty 标记查询 / 消费。
|
|
91
|
+
* 切换分片时,如果 prev 分片自上次截图后用户没改过(not dirty),跳过 generateDiecutScreenshot —
|
|
92
|
+
* inverseMaskBlob 仍然有效,不需要重新生成。这是 Classic 模式切换分片慢的最大优化点
|
|
93
|
+
* (实测 shotPrev 占总切换时间 95%+,单次 360-2500ms)。
|
|
94
|
+
* 缺省(未传)时退化为旧行为:每次切换都截图,等价于"总是 dirty"。
|
|
95
|
+
*/
|
|
96
|
+
isDiecutDirty?: (id: string) => boolean;
|
|
97
|
+
consumeDiecutDirty?: (id: string) => void;
|
|
98
|
+
}
|
|
99
|
+
export declare function useEditorWatchers(options: UseEditorWatchersOptions): void;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Canvas } from 'fabric';
|
|
2
|
+
export interface EventHandlersOptions {
|
|
3
|
+
onObjectModified?: (fabricData: Record<string, unknown>) => void;
|
|
4
|
+
syncLayers?: () => void;
|
|
5
|
+
updateActive?: () => void;
|
|
6
|
+
syncToolStates?: (obj: any) => void;
|
|
7
|
+
queuePreviewUpdate?: (reason: string) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function useEventHandlers(getCanvas: () => Canvas | null, options?: EventHandlersOptions): {
|
|
10
|
+
setupCanvasEvents: () => void;
|
|
11
|
+
removeCanvasEvents: () => void;
|
|
12
|
+
setupKeyboardEvents: () => () => void;
|
|
13
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function loadFont(fontFamily: string): Promise<void>;
|
|
2
|
+
export declare function preloadAllFonts(): Promise<void>;
|
|
3
|
+
export declare function useFontLoader(): {
|
|
4
|
+
loadingFont: import("vue").Ref<string | null, string | null>;
|
|
5
|
+
loadFont: typeof loadFont;
|
|
6
|
+
loadedFonts: Set<string>;
|
|
7
|
+
preloadAllFonts: typeof preloadAllFonts;
|
|
8
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 引导资源渲染(MASK / DOTTED_LINE 等)
|
|
3
|
+
* 抽离 clearGuideResources / renderGuideResources,并维护 maskOverlay/maskClipPath 引用
|
|
4
|
+
*/
|
|
5
|
+
import { Image as FabricImage } from 'fabric';
|
|
6
|
+
import type { Canvas } from 'fabric';
|
|
7
|
+
type FabricImageInstance = InstanceType<typeof FabricImage> & {
|
|
8
|
+
customData?: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
export declare function useGuideResources(options: {
|
|
11
|
+
getCanvas: () => Canvas | null;
|
|
12
|
+
guideResourceRole: string;
|
|
13
|
+
isGuideResource: (res: any) => boolean;
|
|
14
|
+
bringObjectToFront: (obj: any) => void;
|
|
15
|
+
scaleResourceToCanvas: (img: any, resource: any) => void;
|
|
16
|
+
loadFabricImage: (src: string, callback: (img: FabricImageInstance) => void, opts?: {
|
|
17
|
+
crossOrigin?: string;
|
|
18
|
+
}) => void;
|
|
19
|
+
getGuideRect?: () => any;
|
|
20
|
+
/** 拉取 Guideline JSON(与 fileToken 代理一致) */
|
|
21
|
+
toProxyUrl: (url: string) => string;
|
|
22
|
+
/**
|
|
23
|
+
* 若已存在内存中的 Guideline(如拖动分片后写回 templateJsonByUrlKey),
|
|
24
|
+
* tryRender 优先使用其而非重新 fetch,使岛外压暗 / 蒙版位置与 bounds 一致。
|
|
25
|
+
*/
|
|
26
|
+
getCachedSplitGuidelineJson?: (templateJsonUrl: string) => Record<string, unknown> | null | undefined;
|
|
27
|
+
/** tryRender 解析出 psdJson 后写回缓存,供后续拖动与导出共用 */
|
|
28
|
+
setCachedSplitGuidelineJson?: (templateJsonUrl: string, json: Record<string, unknown>) => void;
|
|
29
|
+
}): {
|
|
30
|
+
clearGuideResources: () => void;
|
|
31
|
+
renderGuideResources: (resources?: any[]) => void;
|
|
32
|
+
tryRenderCompleteSplitPieceMaskGuides: (diecutData: any, selectedSize?: string | string[], restrictToGroupId?: string | null, overridePsdJson?: Record<string, unknown> | null) => Promise<boolean>;
|
|
33
|
+
syncCompleteSplitZoneDimToViewport: () => boolean;
|
|
34
|
+
restoreGuideStackOrder: () => void;
|
|
35
|
+
getMaskClipPath: () => any;
|
|
36
|
+
getMaskOverlay: () => any;
|
|
37
|
+
};
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Canvas } from 'fabric';
|
|
2
|
+
export declare function useImageHandler(getCanvas: () => Canvas | null, syncLayers: () => void, syncToolState: (obj?: any) => void): {
|
|
3
|
+
handleUpload: (event: any) => Promise<void>;
|
|
4
|
+
addImageFromUrl: (url: string) => Promise<void>;
|
|
5
|
+
addRect: () => void;
|
|
6
|
+
addCircle: () => void;
|
|
7
|
+
loadFabricImage: (src: string, callback: (img: any) => void, options?: {
|
|
8
|
+
crossOrigin?: string;
|
|
9
|
+
}) => Promise<void>;
|
|
10
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 图层操作管理 Composable
|
|
3
|
+
* 负责图层的选择、移动、复制、删除、变换等操作
|
|
4
|
+
*/
|
|
5
|
+
import type { Canvas } from 'fabric';
|
|
6
|
+
import type { Ref } from 'vue';
|
|
7
|
+
export interface UseLayerOperationsOptions {
|
|
8
|
+
getCanvas: () => Canvas | null;
|
|
9
|
+
layers: Ref<any[]>;
|
|
10
|
+
activeLayerId: Ref<string | number | undefined>;
|
|
11
|
+
activeTab: Ref<string>;
|
|
12
|
+
objectIndex: Ref<number>;
|
|
13
|
+
incrementObjectIndex: () => void;
|
|
14
|
+
isLayerToolTarget: (obj: any) => boolean;
|
|
15
|
+
syncLayers: () => void;
|
|
16
|
+
syncImageToolState: (active?: any, autoSwitchTab?: boolean) => void;
|
|
17
|
+
syncLayerToolState: (active?: any) => void;
|
|
18
|
+
syncTextToolState: (active?: any, autoSwitchTab?: boolean) => void;
|
|
19
|
+
queuePreviewUpdate: (reason: string, meta?: {
|
|
20
|
+
immediate?: boolean;
|
|
21
|
+
}) => void;
|
|
22
|
+
/** 与 handleObjectModified 中 notify 一致,用于不经过 Fabric 事件时仍通知父组件设计已变更 */
|
|
23
|
+
notifyDesignChanged?: () => void;
|
|
24
|
+
/** 复制等:置于用户层最顶、仍低于引导/遮罩 */
|
|
25
|
+
insertBelowGuideLayersTopMost: (obj: any) => void;
|
|
26
|
+
bringGuideLayersToFront: () => void;
|
|
27
|
+
/** 排序后恢复蒙版在底、压暗/虚线在上(避免 bringGuideLayersToFront 把半透明蒙版盖在设计上) */
|
|
28
|
+
restoreGuideStackOrder: () => void;
|
|
29
|
+
/** 平铺层缩放(与「平铺缩放」滑块同源) */
|
|
30
|
+
updateImagePatternScale?: (value: number) => void | Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export declare function useLayerOperations(options: UseLayerOperationsOptions): {
|
|
33
|
+
moveLayerInStack: (obj: any, direction: any) => boolean;
|
|
34
|
+
selectLayer: (layer: any) => void;
|
|
35
|
+
removeSelected: () => void;
|
|
36
|
+
deleteLayerById: (layer: any) => void;
|
|
37
|
+
deleteSelectedLayer: () => void;
|
|
38
|
+
moveLayerById: (layerId: any, direction: any) => Promise<void>;
|
|
39
|
+
duplicateLayerById: (layerId: any) => Promise<void>;
|
|
40
|
+
duplicateLayer: () => Promise<void>;
|
|
41
|
+
moveLayer: (direction: any) => Promise<void>;
|
|
42
|
+
flipLayer: (axis: any) => void;
|
|
43
|
+
rotateLayer: (direction?: string) => void;
|
|
44
|
+
scaleLayer: (direction: any) => void;
|
|
45
|
+
alignLayer: (position: any) => void;
|
|
46
|
+
centerLayer: () => void;
|
|
47
|
+
updateLayerOpacity: (value: any) => void;
|
|
48
|
+
nudgeSelectedLayer: (dx: number, dy: number, step?: number) => boolean;
|
|
49
|
+
toggleLayerVisibility: (layer: any) => void;
|
|
50
|
+
toggleLayerLock: (layer: any) => void;
|
|
51
|
+
reorderLayersByVisualMove: (fromIdx: number, toIdx: number) => void;
|
|
52
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 图层同步 Composable
|
|
3
|
+
* 维护 layers / activeLayerId,提供 syncLayers 供 useCanvasStateByDiecut 等使用
|
|
4
|
+
*/
|
|
5
|
+
import { type Ref } from 'vue';
|
|
6
|
+
export interface LayerItem {
|
|
7
|
+
id: string | number;
|
|
8
|
+
name: string;
|
|
9
|
+
object: any;
|
|
10
|
+
visible: boolean;
|
|
11
|
+
locked: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface UseLayerSyncOptions {
|
|
14
|
+
getCanvas: () => any;
|
|
15
|
+
}
|
|
16
|
+
export declare function useLayerSync(options: UseLayerSyncOptions): {
|
|
17
|
+
layers: Ref<{
|
|
18
|
+
id: string | number;
|
|
19
|
+
name: string;
|
|
20
|
+
object: any;
|
|
21
|
+
visible: boolean;
|
|
22
|
+
locked: boolean;
|
|
23
|
+
}[], LayerItem[] | {
|
|
24
|
+
id: string | number;
|
|
25
|
+
name: string;
|
|
26
|
+
object: any;
|
|
27
|
+
visible: boolean;
|
|
28
|
+
locked: boolean;
|
|
29
|
+
}[]>;
|
|
30
|
+
activeLayerId: Ref<string | number | undefined, string | number | undefined>;
|
|
31
|
+
syncLayers: () => void;
|
|
32
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LicenseConfig } from '../../../types';
|
|
2
|
+
export interface UseLicenseOptions {
|
|
3
|
+
/** 是否在成功/刷新时设置 globalThis 与 window 上的 LICENSE_TOKEN、LICENSE_API_URL */
|
|
4
|
+
setGlobalToken?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function useLicense(licenseConfig?: LicenseConfig, options?: UseLicenseOptions): {
|
|
7
|
+
licenseReady: import("vue").Ref<boolean, boolean>;
|
|
8
|
+
licenseError: import("vue").Ref<string | null, string | null>;
|
|
9
|
+
initializeLicense: () => Promise<void>;
|
|
10
|
+
cleanup: () => void;
|
|
11
|
+
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 对象添加管理 Composable
|
|
3
|
+
* 负责图片、文本、图形(矩形、圆形)的添加操作
|
|
4
|
+
*/
|
|
5
|
+
import type { Canvas } from 'fabric';
|
|
6
|
+
import { Image as FabricImage } from 'fabric';
|
|
7
|
+
import type { Ref } from 'vue';
|
|
8
|
+
import { type PsdLayer } from '../utils/dataBuilders';
|
|
9
|
+
export type FabricImageInstance = InstanceType<typeof FabricImage> & {
|
|
10
|
+
customData?: Record<string, unknown>;
|
|
11
|
+
};
|
|
12
|
+
export interface UseObjectAdderOptions {
|
|
13
|
+
getCanvas: () => Canvas | null;
|
|
14
|
+
objectIndex: Ref<number>;
|
|
15
|
+
incrementObjectIndex: () => void;
|
|
16
|
+
assignMeta: (obj: any, label: string) => void;
|
|
17
|
+
loadFabricImage: (src: string, callback: (img: FabricImageInstance) => void, options?: {
|
|
18
|
+
crossOrigin?: string;
|
|
19
|
+
}) => Promise<void>;
|
|
20
|
+
/** 平铺图案从 URL 加载 HTMLImageElement(还原设计时用 savedSrc / patternSource) */
|
|
21
|
+
loadImage: (url: string) => Promise<HTMLImageElement>;
|
|
22
|
+
moveLayerInStack: (obj: any, direction: string) => boolean;
|
|
23
|
+
bringGuideLayersToFront: () => void;
|
|
24
|
+
syncLayers: () => void;
|
|
25
|
+
syncImageToolState: (active?: any, autoSwitchTab?: boolean) => void;
|
|
26
|
+
syncLayerToolState: (active?: any) => void;
|
|
27
|
+
syncTextToolState: (active?: any, autoSwitchTab?: boolean) => void;
|
|
28
|
+
updateActive: () => void;
|
|
29
|
+
insertBelowGuideLayers: (obj: any) => void;
|
|
30
|
+
textToolState: Ref<{
|
|
31
|
+
strokeWidth?: number;
|
|
32
|
+
}>;
|
|
33
|
+
urlInput?: Ref<string>;
|
|
34
|
+
/**
|
|
35
|
+
* 当前模板 PSD(canvasWidth/canvasHeight 等);返回 null 时新增图片仍按 Fabric 全宽缩放(旧行为)。
|
|
36
|
+
*/
|
|
37
|
+
getGuidelinePsdCanvasSpec?: () => {
|
|
38
|
+
layerList?: PsdLayer[] | undefined;
|
|
39
|
+
psdJson: {
|
|
40
|
+
canvasWidth?: number;
|
|
41
|
+
canvasHeight?: number;
|
|
42
|
+
};
|
|
43
|
+
targetBounds?: {
|
|
44
|
+
left: number;
|
|
45
|
+
top: number;
|
|
46
|
+
width: number;
|
|
47
|
+
height: number;
|
|
48
|
+
};
|
|
49
|
+
fitMode?: 'maxSideToFragmentWidth';
|
|
50
|
+
} | null;
|
|
51
|
+
/** Zone 聚焦后新增对象应落在当前可见视口内;返回 null 时沿用 PSD/画布布局。 */
|
|
52
|
+
getNewObjectViewportRect?: () => NewObjectLayoutRect | null;
|
|
53
|
+
onUploadSizeExceeded?: (file: File) => void;
|
|
54
|
+
}
|
|
55
|
+
type FabricJsonObject = Record<string, any>;
|
|
56
|
+
type NewObjectLayoutRect = {
|
|
57
|
+
left: number;
|
|
58
|
+
top: number;
|
|
59
|
+
width: number;
|
|
60
|
+
height: number;
|
|
61
|
+
fitMode?: 'maxSideToFragmentWidth';
|
|
62
|
+
};
|
|
63
|
+
export declare function useObjectAdder(options: UseObjectAdderOptions): {
|
|
64
|
+
handleUpload: (event: any) => Promise<void>;
|
|
65
|
+
addImageFromUrl: (url: any) => Promise<void>;
|
|
66
|
+
handleUrlPaste: (event: any) => void;
|
|
67
|
+
addText: () => Promise<void>;
|
|
68
|
+
addLabel: () => Promise<void>;
|
|
69
|
+
addRect: () => void;
|
|
70
|
+
addCircle: () => void;
|
|
71
|
+
addImageFromJson: (jsonObj: FabricJsonObject) => Promise<FabricImageInstance | null>;
|
|
72
|
+
addTextFromJson: (jsonObj: FabricJsonObject) => any;
|
|
73
|
+
addPatternRectFromJson: (jsonObj: FabricJsonObject) => Promise<any>;
|
|
74
|
+
applyFabricJsonPropsToObject: (target: any, json: FabricJsonObject) => void;
|
|
75
|
+
};
|
|
76
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 图案铺设 Composable
|
|
3
|
+
* 负责图片平铺/取消平铺、图案缩放等
|
|
4
|
+
*/
|
|
5
|
+
import { getPatternSourceUrl } from '../utils/pattern';
|
|
6
|
+
export type FabricImageInstance = any;
|
|
7
|
+
export interface UsePatternHandlerOptions {
|
|
8
|
+
getCanvas: () => any;
|
|
9
|
+
loadImage: (url: string) => Promise<HTMLImageElement>;
|
|
10
|
+
loadFabricImage: (src: string, callback: (img: FabricImageInstance) => void, options?: {
|
|
11
|
+
crossOrigin?: string;
|
|
12
|
+
}) => Promise<void>;
|
|
13
|
+
syncLayers: () => void;
|
|
14
|
+
syncImageToolState: (obj?: any, autoSwitchTab?: boolean) => void;
|
|
15
|
+
updateActive: () => void;
|
|
16
|
+
insertBelowGuideLayers: (obj: any) => void;
|
|
17
|
+
bringGuideLayersToFront: () => void;
|
|
18
|
+
queuePreviewUpdate: (reason: string) => void;
|
|
19
|
+
/** 平铺 replace 期间跳过 object:added 的 insertBelowGuideLayers,避免栈序被二次打乱 */
|
|
20
|
+
runWithSuppressedObjectAddedGuideReorder?: (fn: () => void) => void;
|
|
21
|
+
}
|
|
22
|
+
/** 按当前 patternPhase 锚点重算 cover 几何(full 模式:以锚点格中心展开 4×4)并标记重绘 */
|
|
23
|
+
export declare function recenterPatternCoverFromPhase(obj: any): void;
|
|
24
|
+
/** 拖动结束后将 single 模式展开为完整平铺网格 */
|
|
25
|
+
export declare function expandPatternLayerToFullGrid(obj: any): void;
|
|
26
|
+
export declare function usePatternHandler(options: UsePatternHandlerOptions): {
|
|
27
|
+
applyImagePattern: (mode: any) => Promise<void>;
|
|
28
|
+
updateImagePatternScale: (value: any) => Promise<void>;
|
|
29
|
+
refreshPatternRectsForViewport: () => void;
|
|
30
|
+
getPatternSourceUrl: typeof getPatternSourceUrl;
|
|
31
|
+
};
|