@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.
Files changed (149) hide show
  1. package/dist/assets/perspective.wasm +0 -0
  2. package/dist/assets/wasm_exec.js +553 -0
  3. package/dist/components/Editor/assets/editorIcons.d.ts +32 -0
  4. package/dist/components/Editor/components/CanvasSection.vue.d.ts +253 -0
  5. package/dist/components/Editor/components/CanvasZoomToolbar.vue.d.ts +23 -0
  6. package/dist/components/Editor/components/EditorAddToCartDialog.vue.d.ts +28 -0
  7. package/dist/components/Editor/components/EditorDefaultCanvasAxisLines.vue.d.ts +34 -0
  8. package/dist/components/Editor/components/EditorDefaultCanvasRulers.vue.d.ts +44 -0
  9. package/dist/components/Editor/components/EditorIcon.vue.d.ts +7 -0
  10. package/dist/components/Editor/components/EditorSelectionShortcutFab.vue.d.ts +56 -0
  11. package/dist/components/Editor/components/EditorSidebar.vue.d.ts +548 -0
  12. package/dist/components/Editor/components/EditorTopbar.vue.d.ts +363 -0
  13. package/dist/components/Editor/components/EditorTopbarMockupScope.vue.d.ts +12 -0
  14. package/dist/components/Editor/components/GalleryPanel.vue.d.ts +9 -0
  15. package/dist/components/Editor/components/LiveThreePreviewPane.vue.d.ts +30 -0
  16. package/dist/components/Editor/components/PreviewPanel.vue.d.ts +312 -0
  17. package/dist/components/Editor/components/ShortcutSettingsModal.vue.d.ts +11 -0
  18. package/dist/components/Editor/components/SplitPieceHandAlignPanel.vue.d.ts +14 -0
  19. package/dist/components/Editor/components/TemplateModal.vue.d.ts +35 -0
  20. package/dist/components/Editor/components/Theme1AddTextPanel.vue.d.ts +190 -0
  21. package/dist/components/Editor/components/Theme1UploadPanel.vue.d.ts +120 -0
  22. package/dist/components/Editor/composables/index.d.ts +56 -0
  23. package/dist/components/Editor/composables/useCanvasEventWiring.d.ts +40 -0
  24. package/dist/components/Editor/composables/useCanvasHistory.d.ts +18 -0
  25. package/dist/components/Editor/composables/useCanvasManager.d.ts +29 -0
  26. package/dist/components/Editor/composables/useCanvasObjectHelpers.d.ts +34 -0
  27. package/dist/components/Editor/composables/useCanvasStateByDiecut.d.ts +50 -0
  28. package/dist/components/Editor/composables/useCanvasViewport.d.ts +89 -0
  29. package/dist/components/Editor/composables/useClearCanvas.d.ts +32 -0
  30. package/dist/components/Editor/composables/useCompleteScreenshot.d.ts +68 -0
  31. package/dist/components/Editor/composables/useCopyToDiecuts.d.ts +56 -0
  32. package/dist/components/Editor/composables/useDiecutManager.d.ts +46 -0
  33. package/dist/components/Editor/composables/useDiecutScreenshot.d.ts +50 -0
  34. package/dist/components/Editor/composables/useDownloadPng.d.ts +11 -0
  35. package/dist/components/Editor/composables/useEditorReset.d.ts +21 -0
  36. package/dist/components/Editor/composables/useEditorShortcuts.d.ts +80 -0
  37. package/dist/components/Editor/composables/useEditorTopbarContext.d.ts +3 -0
  38. package/dist/components/Editor/composables/useEditorWatchers.d.ts +99 -0
  39. package/dist/components/Editor/composables/useEventHandlers.d.ts +13 -0
  40. package/dist/components/Editor/composables/useFontLoader.d.ts +8 -0
  41. package/dist/components/Editor/composables/useGuideResources.d.ts +38 -0
  42. package/dist/components/Editor/composables/useImageHandler.d.ts +10 -0
  43. package/dist/components/Editor/composables/useLayerOperations.d.ts +52 -0
  44. package/dist/components/Editor/composables/useLayerSync.d.ts +32 -0
  45. package/dist/components/Editor/composables/useLicense.d.ts +11 -0
  46. package/dist/components/Editor/composables/useObjectAdder.d.ts +76 -0
  47. package/dist/components/Editor/composables/usePatternHandler.d.ts +31 -0
  48. package/dist/components/Editor/composables/usePreviewManager.d.ts +240 -0
  49. package/dist/components/Editor/composables/usePreviewRenderer.d.ts +111 -0
  50. package/dist/components/Editor/composables/usePreviewUpdateQueue.d.ts +62 -0
  51. package/dist/components/Editor/composables/useProductData.d.ts +166 -0
  52. package/dist/components/Editor/composables/useSplitPieceHandTool.d.ts +34 -0
  53. package/dist/components/Editor/composables/useTemplateLoader.d.ts +36 -0
  54. package/dist/components/Editor/composables/useTemplateManager.d.ts +48 -0
  55. package/dist/components/Editor/composables/useTextHandler.d.ts +19 -0
  56. package/dist/components/Editor/composables/useToolState.d.ts +101 -0
  57. package/dist/components/Editor/composables/useToolStateSync.d.ts +49 -0
  58. package/dist/components/Editor/composables/useWorkerManager.d.ts +11 -0
  59. package/dist/components/Editor/config/fontConfig.d.ts +8 -0
  60. package/dist/components/Editor/editorCanvasGuides.d.ts +22 -0
  61. package/dist/components/Editor/fabric/PatternLayer.d.ts +104 -0
  62. package/dist/components/Editor/index.vue.d.ts +167 -0
  63. package/dist/components/Editor/liveRender/ThreeRenderViewer.vue.d.ts +31 -0
  64. package/dist/components/Editor/liveRender/dataAdapter.d.ts +2 -0
  65. package/dist/components/Editor/liveRender/prefetch.worker.d.ts +15 -0
  66. package/dist/components/Editor/liveRender/render.worker.d.ts +1 -0
  67. package/dist/components/Editor/liveRender/types.d.ts +130 -0
  68. package/dist/components/Editor/utils/blob.d.ts +5 -0
  69. package/dist/components/Editor/utils/buildSplitPieceDesignClipBlobs.d.ts +75 -0
  70. package/dist/components/Editor/utils/colorLabels.d.ts +6 -0
  71. package/dist/components/Editor/utils/dataBuilders.d.ts +108 -0
  72. package/dist/components/Editor/utils/designRestoreScale.d.ts +42 -0
  73. package/dist/components/Editor/utils/editorShortcutChord.d.ts +9 -0
  74. package/dist/components/Editor/utils/editorShortcutIds.d.ts +2 -0
  75. package/dist/components/Editor/utils/editorShortcutRegistry.d.ts +15 -0
  76. package/dist/components/Editor/utils/editorSizeOptions.d.ts +27 -0
  77. package/dist/components/Editor/utils/fabricMainCanvasSnapshot.d.ts +48 -0
  78. package/dist/components/Editor/utils/fabricRulerMath.d.ts +35 -0
  79. package/dist/components/Editor/utils/fabricScreenshotToBlob.d.ts +7 -0
  80. package/dist/components/Editor/utils/imageLoader.d.ts +10 -0
  81. package/dist/components/Editor/utils/objectUtils.d.ts +11 -0
  82. package/dist/components/Editor/utils/pattern.d.ts +56 -0
  83. package/dist/components/Editor/utils/scaleSplitClassicGridVisual.d.ts +9 -0
  84. package/dist/components/Editor/utils/screenshot.d.ts +8 -0
  85. package/dist/components/Editor/utils/selectionVisual.d.ts +7 -0
  86. package/dist/components/Editor/utils/tintMaskWithColor.d.ts +4 -0
  87. package/dist/components/Editor/utils/uploadLimit.d.ts +4 -0
  88. package/dist/components/Editor/workers/copyDiecuts.worker.d.ts +38 -0
  89. package/dist/components/Editor/workers/maskWorker.d.ts +13 -0
  90. package/dist/components/Editor/workers/renderWorker.d.ts +1 -0
  91. package/dist/components/Editor/workers/zoneScreenshotWorker.d.ts +49 -0
  92. package/dist/composables/useEditorI18n.d.ts +18 -0
  93. package/dist/copyDiecuts.worker.js +67 -0
  94. package/dist/deform.worker.js +760 -0
  95. package/dist/editor-sdk.es.js +73923 -0
  96. package/dist/index.d.ts +446 -0
  97. package/dist/locales/builtin-messages.d.ts +2 -0
  98. package/dist/locales/editor-locales.d.ts +7 -0
  99. package/dist/locales/en.d.ts +5 -0
  100. package/dist/locales/ja-JP.d.ts +5 -0
  101. package/dist/locales/ko-KR.d.ts +5 -0
  102. package/dist/locales/vi-VN.d.ts +5 -0
  103. package/dist/locales/zh.d.ts +5 -0
  104. package/dist/maskWorker.js +51 -0
  105. package/dist/prefetch.worker.js +16 -0
  106. package/dist/render.worker.js +27266 -0
  107. package/dist/renderWorker.js +40368 -0
  108. package/dist/style.css +1 -0
  109. package/dist/types.d.ts +483 -0
  110. package/dist/utils/backgroundRenderer.d.ts +64 -0
  111. package/dist/utils/encryptJson.d.ts +31 -0
  112. package/dist/utils/environment.d.ts +29 -0
  113. package/dist/utils/errorHandler.d.ts +27 -0
  114. package/dist/utils/fileToken.d.ts +18 -0
  115. package/dist/utils/http.d.ts +31 -0
  116. package/dist/utils/jsonFileCache.d.ts +6 -0
  117. package/dist/utils/license/api.d.ts +74 -0
  118. package/dist/utils/license/deviceId.d.ts +25 -0
  119. package/dist/utils/license/index.d.ts +9 -0
  120. package/dist/utils/license/licenseManager.d.ts +63 -0
  121. package/dist/utils/license/licenseStore.d.ts +17 -0
  122. package/dist/utils/license/retry.d.ts +11 -0
  123. package/dist/utils/license/tokenRefresh.d.ts +34 -0
  124. package/dist/utils/mediaBlobCache.d.ts +6 -0
  125. package/dist/utils/protection/encryptedModules.generated.d.ts +27 -0
  126. package/dist/utils/protection/moduleLoader.d.ts +17 -0
  127. package/dist/utils/renderService/blend.d.ts +4 -0
  128. package/dist/utils/renderService/deform.d.ts +21 -0
  129. package/dist/utils/renderService/deform.worker.d.ts +7 -0
  130. package/dist/utils/renderService/image.d.ts +8 -0
  131. package/dist/utils/renderService/index.d.ts +12 -0
  132. package/dist/utils/renderService/mask.d.ts +13 -0
  133. package/dist/utils/renderService/prepareRenderData.d.ts +2 -0
  134. package/dist/utils/renderService/psdConverter.d.ts +6 -0
  135. package/dist/utils/renderService/render.d.ts +14 -0
  136. package/dist/utils/renderService/render.worker.d.ts +17 -0
  137. package/dist/utils/renderService/types.d.ts +236 -0
  138. package/dist/utils/renderService/workerManager.d.ts +33 -0
  139. package/dist/utils/renderedImagesDB.d.ts +61 -0
  140. package/dist/utils/storage.d.ts +27 -0
  141. package/dist/utils/threeRenderService/index.d.ts +6 -0
  142. package/dist/utils/url.d.ts +39 -0
  143. package/dist/utils/workerBase.d.ts +38 -0
  144. package/dist/utils/workerLoader.d.ts +24 -0
  145. package/dist/wasm/index.d.ts +5 -0
  146. package/dist/wasm/perspectiveLoader.d.ts +70 -0
  147. package/dist/wasm/perspectiveLoader.worker.d.ts +116 -0
  148. package/dist/zoneScreenshotWorker.js +82 -0
  149. package/package.json +54 -0
@@ -0,0 +1,130 @@
1
+ export declare enum EPartType {
2
+ Drawing = 0,
3
+ Material = 1
4
+ }
5
+ export interface IPart {
6
+ id: number;
7
+ name: string;
8
+ url?: string;
9
+ designArea?: string;
10
+ pureUrl?: string;
11
+ width?: number;
12
+ height?: number;
13
+ partType?: EPartType;
14
+ }
15
+ export interface IPoint {
16
+ x: number;
17
+ y: number;
18
+ type?: number;
19
+ }
20
+ export interface IPuppetShape {
21
+ originalVertexArray: IPoint[];
22
+ deformedVertexArray: IPoint[];
23
+ indexArray: number[];
24
+ }
25
+ export interface IFilter {
26
+ type?: string;
27
+ enabled?: boolean;
28
+ filter?: {
29
+ puppetShapeList?: IPuppetShape[];
30
+ };
31
+ puppetShapeList?: IPuppetShape[];
32
+ }
33
+ export interface ISmartObject {
34
+ transform: number[];
35
+ meshPoints?: IPoint[];
36
+ bounds: IBounds;
37
+ quiltSliceX?: number[];
38
+ quiltSliceY?: number[];
39
+ size?: {
40
+ width: number;
41
+ height: number;
42
+ };
43
+ imagePath?: string;
44
+ filterList?: IFilter[];
45
+ puppet?: IFilter;
46
+ }
47
+ export interface IPsdPartData {
48
+ id: number;
49
+ partId?: number;
50
+ name: string;
51
+ vectorMaskPath?: IPoint[];
52
+ smartObjects?: ISmartObject[];
53
+ type: EPsdDataType;
54
+ width?: number;
55
+ height?: number;
56
+ x?: number;
57
+ y?: number;
58
+ url?: string;
59
+ blendMode?: string;
60
+ opacity?: number;
61
+ clipping?: boolean;
62
+ }
63
+ export interface IBounds {
64
+ top: number;
65
+ left: number;
66
+ bottom: number;
67
+ right: number;
68
+ width: number;
69
+ height: number;
70
+ }
71
+ export declare enum EPsdDataType {
72
+ Group = 0,
73
+ Layer = 1
74
+ }
75
+ export interface IPsdModelData {
76
+ width: number;
77
+ height: number;
78
+ psdPartData?: IPsdPartData[];
79
+ }
80
+ export interface IModelData {
81
+ parts: IPart[];
82
+ models: IPsdModelData[];
83
+ }
84
+ /** 与 dataAdapter.ts 中 INewData 一致,供 ThreeRenderViewer 使用 */
85
+ export interface INewData {
86
+ name: string;
87
+ jsonURL: string;
88
+ sort: number;
89
+ resources: {
90
+ name: string;
91
+ url: string;
92
+ }[];
93
+ }
94
+ export interface IDeformationLayer {
95
+ name: string;
96
+ type: string;
97
+ bounds: {
98
+ left: number;
99
+ top: number;
100
+ width: number;
101
+ height: number;
102
+ };
103
+ opacity?: number;
104
+ imagePath?: string;
105
+ layerOrder?: number;
106
+ id?: number;
107
+ children?: IDeformationLayer[];
108
+ isSmartObject?: boolean;
109
+ transform?: number[];
110
+ meshPoints?: {
111
+ x: number;
112
+ y: number;
113
+ }[];
114
+ quiltSliceX?: number[];
115
+ quiltSliceY?: number[];
116
+ size?: {
117
+ width: number;
118
+ height: number;
119
+ };
120
+ vectorMask?: any;
121
+ blendMode?: string;
122
+ clipping?: boolean;
123
+ filterList?: IFilter[];
124
+ puppet?: IFilter;
125
+ }
126
+ export interface IDeformationData {
127
+ canvasWidth: number;
128
+ canvasHeight: number;
129
+ layerList: IDeformationLayer[];
130
+ }
@@ -0,0 +1,5 @@
1
+ export declare const readBlobAsDataUrl: (blob: Blob) => Promise<string>;
2
+ export declare const loadImageFromBlob: (blob: Blob) => Promise<HTMLImageElement>;
3
+ /** 将 PNG/JPEG 等 data URL 转为 Blob(供 Fabric toDataURL 结果上传或调试) */
4
+ export declare const dataUrlToBlob: (dataUrl: string) => Blob;
5
+ export declare const canvasToBlob: (canvasEl: HTMLCanvasElement, type?: string, quality?: number) => Promise<Blob>;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * 主画布(无引导层)按 Guideline bounds 裁切 + MASK destination-in 抠格栅。
3
+ * DOTTED_LINE 仅供编辑器叠层示意,导出 Blob 不叠虚线,避免成品带绿线/稿线。
4
+ * 仅 DOTTED_LINE、无 MASK 时用其 alpha 做 destination-in 抠图(不叠画线)。
5
+ * 供单片预览 fabricScreenshotList 与调试导出共用。
6
+ * 导出主画布时 useIdentityViewport:优先离屏克隆 + 单位视口 toBlob(fabricMainCanvasSnapshot),
7
+ * 裁切用 mapGuidelineBoundsToTargetRect,与 Guideline 一致且不闪主画布。
8
+ */
9
+ import type { Canvas } from 'fabric';
10
+ import { type SplitMaskSliceEntry } from './dataBuilders';
11
+ export type SplitPieceDesignClipBlob = {
12
+ id: number;
13
+ name: string;
14
+ blob: Blob;
15
+ };
16
+ type PsdJson = {
17
+ canvasWidth?: number;
18
+ canvasHeight?: number;
19
+ layerList?: unknown[];
20
+ };
21
+ /** 分片抠图主画布 Fabric toBlob 倍率上限(平铺等场景提高清晰度,代价为体积/内存/耗时) */
22
+ export declare const SPLIT_PIECE_EXPORT_MULTIPLIER_MAX = 1;
23
+ /**
24
+ * 将分片导出倍率限制在 [1, SPLIT_PIECE_EXPORT_MULTIPLIER_MAX]。
25
+ * 未传或非法时默认用上限,以在可接受成本内尽量减轻平铺糊边。
26
+ */
27
+ export declare function clampSplitPieceExportMultiplier(n?: number): number;
28
+ export declare function splitSlicesReadyForClips(splitCfg: {
29
+ slicesByGroupId: Map<string, SplitMaskSliceEntry>;
30
+ }, childrenWithBounds: Array<{
31
+ id: number;
32
+ name: string;
33
+ bounds: {
34
+ left: number;
35
+ top: number;
36
+ width: number;
37
+ height: number;
38
+ };
39
+ }>): boolean;
40
+ /**
41
+ * 在已有主画布位图(与逻辑画布比例一致,如 Fabric toBlob)上按 SPLIT 配置生成每片 PNG Blob。
42
+ */
43
+ export declare function buildSplitPieceDesignClipBlobsFromBaseBitmap(baseBitmap: ImageBitmap, options: {
44
+ loadImage: (url: string) => Promise<HTMLImageElement>;
45
+ toProxyUrl: (url: string) => string;
46
+ psdJson: PsdJson;
47
+ layerList: unknown[];
48
+ childrenWithBounds: Array<{
49
+ id: number;
50
+ name: string;
51
+ bounds: {
52
+ left: number;
53
+ top: number;
54
+ width: number;
55
+ height: number;
56
+ };
57
+ }>;
58
+ slicesByGroupId: Map<string, SplitMaskSliceEntry>;
59
+ }): Promise<SplitPieceDesignClipBlob[]>;
60
+ /**
61
+ * 从当前 Fabric 画布导出:隐藏引导层整图 PNG → 按 SPLIT + Guideline 生成每片抠图 Blob。
62
+ */
63
+ export declare function buildSplitPieceDesignClipBlobs(options: {
64
+ canvas: Canvas;
65
+ diecutData: any;
66
+ selectedSize?: string;
67
+ toProxyUrl: (url: string) => string;
68
+ loadImage: (url: string) => Promise<HTMLImageElement>;
69
+ guideResourceRole?: string;
70
+ /** 主画布导出倍率,默认 {@link SPLIT_PIECE_EXPORT_MULTIPLIER_MAX},上限同常量 */
71
+ exportMultiplier?: number;
72
+ /** 已编辑的 Guideline 全量对象(与 templateJsonByUrlKey 同源);传入则不再 fetch jsonURL */
73
+ splitGuidelineJson?: Record<string, unknown> | null;
74
+ }): Promise<SplitPieceDesignClipBlob[]>;
75
+ export {};
@@ -0,0 +1,6 @@
1
+ import type { BasicInfo } from '../../../types';
2
+ /**
3
+ * 根据 basicInfo 中的 colors / colorNamesEn 下标解析展示用中文名。
4
+ * option 的 value 仍使用英文 color key(与 deformation 一致)。
5
+ */
6
+ export declare function resolveBasicInfoColorLabel(colorKey: string, basic: BasicInfo | null | undefined): string;
@@ -0,0 +1,108 @@
1
+ import type { IMaterial } from '../../../utils/renderService';
2
+ export declare const normalizeLayerName: (name: string) => string;
3
+ export declare const buildMaterialList: (resources?: any[]) => IMaterial[];
4
+ export type MaskResource = {
5
+ groupId?: string;
6
+ groupName?: string;
7
+ url?: string;
8
+ type?: string;
9
+ width?: number;
10
+ height?: number;
11
+ };
12
+ export type MaskGroup = {
13
+ id: string;
14
+ name: string;
15
+ mask?: MaskResource;
16
+ };
17
+ export declare const buildMaskGroups: (diecutData: any, selectedSize?: string | string[]) => MaskGroup[];
18
+ export type PsdLayer = {
19
+ id?: number;
20
+ name?: string;
21
+ type?: string;
22
+ children?: PsdLayer[];
23
+ bounds?: {
24
+ left?: number;
25
+ top?: number;
26
+ width?: number;
27
+ height?: number;
28
+ };
29
+ };
30
+ export declare const collectGroupIdByName: (layersList: PsdLayer[], map?: Map<string, number>) => Map<string, number>;
31
+ /**
32
+ * 单片(COMPLETE)模式下将 layerList 转为与多片一致的结构:把 split 的 children 提到顶层,去掉 complete 组
33
+ * 这样 psdJsonLayers 会得到 bg + Front/Left-1/Left-2/Back/Right 等顶层 Group,与多片一致
34
+ */
35
+ export declare const normalizeLayerListForComplete: (layerList: PsdLayer[] | undefined) => PsdLayer[];
36
+ /** 从刀板数据中取 COMPLETE 类型:jsonURL 用于拉取 PSD;用 MASK 资源做遮罩内部取图(与多图一致),DOTTED_LINE 仅作尺寸参考。多尺码时传 selectedSize 以匹配当前尺码的 groupId */
37
+ export declare const getCompleteDottedLine: (diecutData: any, selectedSize?: string | string[]) => {
38
+ jsonURL: string;
39
+ maskImageUrl: string;
40
+ maskWidth: number;
41
+ maskHeight: number;
42
+ } | null;
43
+ /** Guideline / 模板 JSON 的 PSD 画布尺寸(与单片预览裁切一致) */
44
+ export declare const getGuidelinePsdCanvasSize: (layerList: PsdLayer[] | undefined, psdJson: {
45
+ canvasWidth?: number;
46
+ canvasHeight?: number;
47
+ }) => {
48
+ psdW: number;
49
+ psdH: number;
50
+ };
51
+ export type GuidelineBounds = {
52
+ left: number;
53
+ top: number;
54
+ width: number;
55
+ height: number;
56
+ };
57
+ /**
58
+ * 将 Guideline 的 PSD 画布 (psdW×psdH) 等比装入目标矩形 (contain),返回统一缩放与居中偏移,
59
+ * 避免目标画布宽高比与 PSD 不一致时对坐标各向异性拉伸。
60
+ */
61
+ export declare const getGuidelineContainTransform: (psdW: number, psdH: number, targetW: number, targetH: number) => {
62
+ scale: number;
63
+ offsetX: number;
64
+ offsetY: number;
65
+ };
66
+ /** 将 PSD 坐标系下的 bounds 映射到目标画布上的轴对齐矩形(与分片蒙版 / 裁切同源) */
67
+ export declare const mapGuidelineBoundsToTargetRect: (bounds: GuidelineBounds, psdW: number, psdH: number, targetW: number, targetH: number) => {
68
+ left: number;
69
+ top: number;
70
+ width: number;
71
+ height: number;
72
+ };
73
+ /** 在 layerList 中找 name 为 "split" 的 Group,返回其 children(有 id 的 Group)及每个的有效 bounds */
74
+ export declare const getSplitChildrenWithBounds: (layerList: PsdLayer[] | undefined, layerName?: string) => Array<{
75
+ id: number;
76
+ name: string;
77
+ bounds: {
78
+ left: number;
79
+ top: number;
80
+ width: number;
81
+ height: number;
82
+ };
83
+ }>;
84
+ /** SPLIT 条目中按 groupId 聚合的蒙版/虚线资源,供单片预览按分片 destination-in(无整片 COMPLETE MASK 时) */
85
+ export type SplitMaskSliceEntry = {
86
+ groupId: string;
87
+ groupName: string;
88
+ maskUrl: string;
89
+ maskWidth: number;
90
+ maskHeight: number;
91
+ dottedLineUrl?: string;
92
+ dottedLineWidth?: number;
93
+ dottedLineHeight?: number;
94
+ };
95
+ /**
96
+ * 从刀板 data 中取 SPLIT:jsonURL 与 Guideline 一致;每 groupId 至少 MASK(含宽高)或 DOTTED_LINE(含 url,宽高可与 MASK 同源)之一。
97
+ * 若 SPLIT 缺失或任一组两者皆无有效尺寸,返回 null(调用方可回退为 COMPLETE 整图引导资源)。
98
+ */
99
+ export declare const getSplitMaskSlicesConfig: (diecutData: any, selectedSize?: string | string[]) => {
100
+ jsonURL: string;
101
+ slicesByGroupId: Map<string, SplitMaskSliceEntry>;
102
+ } | null;
103
+ /** Fabric 画布左上 → Guideline PSD 坐标(宽/高保持 PSD 不变,与 mapGuidelineBoundsToTargetRect 互逆) */
104
+ export declare function fabricTopLeftToGuidelinePsdBounds(fabricLeft: number, fabricTop: number, canvasW: number, canvasH: number, psdW: number, psdH: number, widthPsd: number, heightPsd: number): GuidelineBounds;
105
+ /**
106
+ * 按当前分片蒙版在 Fabric 上的 left/top,回写 Guideline JSON 中对应 group 的 PSD bounds(与 getSplitChildrenWithBounds 同源)
107
+ */
108
+ export declare function updateSplitPieceChildBoundsInPsdJson(psdJson: Record<string, unknown>, groupId: number, fabricLeft: number, fabricTop: number, canvasW: number, canvasH: number, splitLayerName?: string): boolean;
@@ -0,0 +1,42 @@
1
+ export type GuidelineContainTransform = {
2
+ scale: number;
3
+ offsetX: number;
4
+ offsetY: number;
5
+ };
6
+ export type MaskAnchorRect = {
7
+ left: number;
8
+ top: number;
9
+ width: number;
10
+ height: number;
11
+ };
12
+ export declare function isPatternRectObject(obj: any): boolean;
13
+ /** 平铺层:同步 patternPhase / patternScale / gap(与 useCanvasViewport 窗口 resize 同源) */
14
+ export declare function scalePatternLayerContentForContainResize(obj: any, oldT: GuidelineContainTransform, newT: GuidelineContainTransform, scaleRatio: number): boolean;
15
+ export declare function scalePatternLayerContentForMaskRectResize(obj: any, rect0: MaskAnchorRect, rect1: MaskAnchorRect, scaleRatio: number): boolean;
16
+ /** PatternLayer 用 width/height 定尺寸,还原时需与 phase 一并缩放覆盖矩形 */
17
+ export declare function applyMaskRectAnchoredPatternLayerGeometryRestore(obj: any, rect0: MaskAnchorRect, rect1: MaskAnchorRect): void;
18
+ export declare function applyPsdContainAwarePatternLayerGeometryRestore(obj: any, t0: GuidelineContainTransform, t1: GuidelineContainTransform): void;
19
+ export declare function scalePatternLayerContentForLogicalAxesResize(obj: any, sx: number, sy: number): boolean;
20
+ export declare function applyDesignRestoreLogicalAxesPatternLayerGeometryRestore(obj: any, sx: number, sy: number): void;
21
+ /** SPLIT 蒙版锚点:平铺内容与覆盖矩形一并映射 */
22
+ export declare function restorePatternLayerForMaskRectResize(obj: any, rect0: MaskAnchorRect, rect1: MaskAnchorRect): void;
23
+ /** PSD contain:平铺内容与覆盖矩形一并映射 */
24
+ export declare function restorePatternLayerForPsdContain(obj: any, t0: GuidelineContainTransform, t1: GuidelineContainTransform): void;
25
+ /** 逻辑画布宽高比变化:平铺内容与覆盖矩形一并映射 */
26
+ export declare function restorePatternLayerForLogicalAxes(obj: any, sx: number, sy: number): void;
27
+ /**
28
+ * 与分片蒙版/虚线同源:用 PSD 在「保存时画布」与「当前画布」上的 contain 变换 (T0→T1),
29
+ * 将用户对象的 left/top 与 scale 从保存坐标系映射到当前坐标系,避免仅用 W 比例导致与 mapGuidelineBoundsToTargetRect 不一致。
30
+ */
31
+ export declare function applyPsdContainAwareUserRestore(obj: any, t0: GuidelineContainTransform, t1: GuidelineContainTransform): void;
32
+ /**
33
+ * SPLIT 单片蒙版路径:与 `mapGuidelineBoundsToTargetRect` 得到的图稿区矩形 rect0(保存画布)→ rect1(当前画布)对齐。
34
+ * 以矩形左上角为锚做统一缩放,避免整 PSD 的 contain 与分片 `psdW×psdH` contain 不一致导致与刀线/绿线差一截。
35
+ */
36
+ export declare function applyMaskRectAnchoredUserRestore(obj: any, rect0: MaskAnchorRect, rect1: MaskAnchorRect): void;
37
+ /**
38
+ * 按保存时逻辑画布 → 当前逻辑画布映射还原对象。
39
+ * - 位置:left×sx、top×sy(宽高比与画布一致时 sy 常为 1)。
40
+ * - 缩放:scaleX/scaleY **同乘 sx**(以逻辑宽比为统一倍率),避免 sx≠sy 时对 X/Y 分别乘 scale 把原等比内容拉成扁条。
41
+ */
42
+ export declare function applyDesignRestoreLogicalAxesScale(obj: any, sx: number, sy: number): void;
@@ -0,0 +1,9 @@
1
+ /** 与 Ctrl/Cmd 统一为 Mod,便于跨平台存储与匹配 */
2
+ export declare const CHORD_MOD = "Mod";
3
+ /** 从 KeyboardEvent 生成稳定弦(顺序:Alt、Mod、Shift、code) */
4
+ export declare function chordFromKeyboardEvent(e: KeyboardEvent): string;
5
+ export declare function isModifierOnlyCode(code: string): boolean;
6
+ /** 将 Physical key code 转为展示用短标签 */
7
+ export declare function formatCodeToken(code: string): string;
8
+ /** 和弦展示:Win 为 Ctrl,Mac 为 ⌘ */
9
+ export declare function formatChordForDisplay(chord: string | null | undefined, isMac: boolean): string;
@@ -0,0 +1,2 @@
1
+ export declare const EDITOR_SHORTCUT_ACTION_IDS: readonly ["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"];
2
+ export type EditorShortcutActionId = (typeof EDITOR_SHORTCUT_ACTION_IDS)[number];
@@ -0,0 +1,15 @@
1
+ import type { EditorShortcutActionId } from './editorShortcutIds';
2
+ export type ShortcutRegistryItem = {
3
+ id: EditorShortcutActionId;
4
+ /** i18n:与 en/zh 等共用同一 key */
5
+ labelKey: string;
6
+ defaultChord: string;
7
+ aliasChords?: string[];
8
+ };
9
+ export type ShortcutRegistryCategory = {
10
+ /** i18n category title */
11
+ categoryKey: string;
12
+ items: ShortcutRegistryItem[];
13
+ };
14
+ export declare const EDITOR_SHORTCUT_REGISTRY: ShortcutRegistryCategory[];
15
+ export declare function getDefaultChordById(): Record<EditorShortcutActionId, string>;
@@ -0,0 +1,27 @@
1
+ /** 编辑器尺码:与刀板里的 "default" 占位一致,大小写不敏感 */
2
+ /** theme1 产品面板「全部」选项值(颜色 / 尺码共用) */
3
+ export declare const SKU_ALL_VALUE = "all";
4
+ export declare function isDefaultSizeLabel(s: string): boolean;
5
+ /** 与 isDefaultSizeLabel 同义,供颜色 SKU 复用 */
6
+ export declare const isDefaultSkuLabel: typeof isDefaultSizeLabel;
7
+ export declare function countConcreteSkuOptions(options: string[]): number;
8
+ /** 存在 ≥2 个具体 SKU(排除 default)时展示「全部」 */
9
+ export declare function shouldShowSkuAllOption(options: string[]): boolean;
10
+ export declare function appendSkuAllOptionIfNeeded(options: string[]): string[];
11
+ /** 解析为可用于 deformation / 刀版 / 预览 的具体 SKU;选中 all 时取第一个具体项 */
12
+ export declare function resolveConcreteSkuOption(selected: string, options: string[]): string;
13
+ /** 刀版 / SPLIT 筛选:选中「全部」尺码时不按 size 字段过滤 */
14
+ export declare function skuSizeFilterForDiecut(selectedSize?: string): string | undefined;
15
+ /** 刀版 data 项是否匹配当前尺码筛选(支持多选数组) */
16
+ export declare function skuMatchesDiecutFilter(selectedSize?: string | string[], itemSize?: string | null): boolean;
17
+ /** 多选列表展开「全部」为具体 SKU 值(不含 all 占位) */
18
+ export declare function normalizeSkuMultiSelection(selected: string[], allOptions: string[]): string[];
19
+ /** 复选框是否勾选 */
20
+ export declare function isSkuMultiOptionChecked(selected: string[], option: string, allOptions: string[]): boolean;
21
+ /** 切换复选项;至少保留一项 */
22
+ export declare function toggleSkuMultiSelection(selected: string[], option: string, allOptions: string[]): string[];
23
+ export declare function isValidSkuSelection(selected: string, options: string[]): boolean;
24
+ /** 存在具体尺码时从下拉/联动列表中移除 default,避免与 S、M 等并列 */
25
+ export declare function filterSizesHideDefaultWhenConcrete(sizes: string[]): string[];
26
+ /** 初始或修正选中值:有具体尺码时优先第一个具体尺码,否则保留 default 或首项 */
27
+ export declare function pickPreferredEditorSize(sizes: string[]): string;
@@ -0,0 +1,48 @@
1
+ import type { Canvas } from 'fabric';
2
+ export type ExportJsonStateToBlobOptions = {
3
+ /** 带 file token 的图片加载(与主编辑器一致);未提供则用默认 crossOrigin 加载 */
4
+ loadImage?: (url: string) => Promise<HTMLImageElement>;
5
+ /** 为 true 时不铺 Fabric 画布底色,导出 PNG 带透明通道(分片截图 / 预览贴图) */
6
+ transparentBackground?: boolean;
7
+ };
8
+ /**
9
+ * 从序列化的 JSON 状态离屏导出 PNG Blob(不修改主画布)。
10
+ * 用于复制到其他分片后,为目标分片生成独立的截图。
11
+ */
12
+ export declare function exportJsonStateToBlob(json: any, options?: ExportJsonStateToBlobOptions): Promise<Blob | null>;
13
+ export type FabricMainCanvasSnapshotOptions = {
14
+ guideResourceRole?: string;
15
+ /** 小于 1 时缩小导出,用于拖中轻预览以降低主线程耗时 */
16
+ multiplier?: number;
17
+ /**
18
+ * 为 true 时:优先离屏 StaticCanvas 克隆非引导层对象 + 单位视口 toBlob(不闪主画布);
19
+ * 失败时回退为临时 setViewportTransform([1,0,0,1,0,0]) 再导出并恢复。
20
+ */
21
+ useIdentityViewport?: boolean;
22
+ /** 为 true 时不铺 Fabric 画布底色,导出 PNG/WebP 蒙版外区域透明(分片截图、3D 预览) */
23
+ transparentBackground?: boolean;
24
+ };
25
+ /** 离屏 StaticCanvas 背景:分片导出透明,否则与主画布白底一致便于编辑区导出 */
26
+ export declare function resolveStaticCanvasBackgroundColor(srcAny: {
27
+ backgroundColor?: string | null;
28
+ }, transparentBackground?: boolean): string | undefined;
29
+ /** 设计导出在画布坐标系中的外接矩形(可含负 left/top),宽/高为 max−min */
30
+ export type DesignExportLogicalSize = {
31
+ minL: number;
32
+ minT: number;
33
+ maxR: number;
34
+ maxB: number;
35
+ width: number;
36
+ height: number;
37
+ };
38
+ /**
39
+ * 离屏导出 / Zone 裁切共用的逻辑外接框:包含画布 [0,cw)×[0,ch),并包住非引导层、背景、分片蒙版/虚线;
40
+ * 支持对象在负坐标(如蒙版移到画布左侧),此时 width = maxR−minL,与离屏 viewport 平移一致。
41
+ */
42
+ export declare function computeDesignExportLogicalSize(source: Canvas, guideRole?: string): DesignExportLogicalSize;
43
+ /**
44
+ * 从当前 Fabric 主画布导出 PNG Blob。
45
+ * 优先使用 Fabric 7 {@link StaticCanvas#toBlob} 的 `filter`,在离屏 canvas 上渲染(不修改引导层 visible),避免闪屏。
46
+ * 若运行环境无 `toBlob`,回退为临时隐藏引导层 + lowerCanvas `toBlob`。
47
+ */
48
+ export declare function exportMainFabricCanvasToPngBlob(canvas: Canvas, options?: FabricMainCanvasSnapshotOptions): Promise<Blob | null>;
@@ -0,0 +1,35 @@
1
+ import type { Canvas } from 'fabric';
2
+ /** 主刻度在屏幕上的目标间距(px) */
3
+ export declare const RULER_TARGET_MAJOR_PX = 72;
4
+ export declare function pickNiceStep(ideal: number): number;
5
+ /**
6
+ * 将场景坐标映射到 upper canvas 元素内的 CSS 像素(相对元素左上角,左上为 0)。
7
+ */
8
+ export declare function sceneToCssOnUpperCanvas(canvas: Canvas, sceneX: number, sceneY: number): {
9
+ x: number;
10
+ y: number;
11
+ };
12
+ export declare function getSceneXRange(canvas: Canvas): {
13
+ min: number;
14
+ max: number;
15
+ };
16
+ export declare function getSceneYRange(canvas: Canvas): {
17
+ min: number;
18
+ max: number;
19
+ };
20
+ export declare function formatRulerLabel(n: number): string;
21
+ /**
22
+ * 用文档客户端坐标映射到场景坐标(可落在视口外)。
23
+ * 从标尺拖参考线时指针常在标尺条上,须用真实 clientX/Y,勿夹到画布边角。
24
+ */
25
+ export declare function documentClientToSceneOnCanvas(canvas: Canvas, clientX: number, clientY: number): {
26
+ x: number;
27
+ y: number;
28
+ } | null;
29
+ /**
30
+ * 将视口客户端坐标转为 Fabric 场景坐标(点在 upper canvas 外时先夹到画布内,便于拖参考线到边缘)。
31
+ */
32
+ export declare function clientToSceneOnUpperCanvas(canvas: Canvas, clientX: number, clientY: number): {
33
+ x: number;
34
+ y: number;
35
+ } | null;
@@ -0,0 +1,7 @@
1
+ import type { IFabricScreenshot } from '../../../utils/renderService';
2
+ /**
3
+ * 将预览管线中的 fabricScreenshot 转为可持久化的 Blob。
4
+ * 顺序:inverseMask 高清缓存 → 可 fetch 的 url → designImage(极速预览兜底)。
5
+ */
6
+ export declare function fabricScreenshotToBlob(fs: IFabricScreenshot, getInverseMaskBlob?: (groupId: string) => Blob | undefined): Promise<Blob | null>;
7
+ export declare function isPersistableFabricScreenshotUrl(url: string | undefined): boolean;
@@ -0,0 +1,10 @@
1
+ type CreateImageLoaderOptions = {
2
+ getFileBaseUrl?: () => string;
3
+ };
4
+ export declare function createImageLoader(options?: CreateImageLoaderOptions): {
5
+ toProxyUrl: (url: string) => string;
6
+ resolveImageUrl: (url: string) => Promise<string>;
7
+ loadImage: (url: string) => Promise<HTMLImageElement>;
8
+ dispose: () => void;
9
+ };
10
+ export {};
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 画布对象判断与过滤工具
3
+ */
4
+ export declare const GUIDE_RESOURCE_ROLE = "guide-resource";
5
+ export declare const GUIDE_ROLE = "guide";
6
+ export declare const GRID_ROLE = "grid";
7
+ export declare function isTextObject(obj: any): boolean;
8
+ /** 普通图片或平铺 pattern 矩形 */
9
+ export declare function isImageLikeObject(obj: any): boolean;
10
+ export declare function isLayerToolTarget(obj: any, guideResourceRole?: string, guideRole?: string): boolean;
11
+ export declare function isCopyableJsonObject(obj: any, guideResourceRole?: string, guideRole?: string, gridRole?: string): boolean;
@@ -0,0 +1,56 @@
1
+ import { Pattern } from 'fabric';
2
+ export declare const normalizePatternScale: (value: number) => number;
3
+ export declare const normalizePatternMode: (mode: string) => string;
4
+ export declare const getPatternSourceSize: (source: any) => {
5
+ width: any;
6
+ height: any;
7
+ } | null;
8
+ /** 还原/重建平铺层时优先用保存的画布 tile 尺寸,避免用原图像素宽覆盖 patternTileWidth */
9
+ export declare function resolveSavedPatternTileSize(customData: Record<string, unknown> | undefined, sourceSize: {
10
+ width: number;
11
+ height: number;
12
+ } | null, runtime?: {
13
+ patternTileWidth?: number;
14
+ patternTileHeight?: number;
15
+ }): {
16
+ tw: number;
17
+ th: number;
18
+ };
19
+ export type PatternCoverRect = {
20
+ left: number;
21
+ top: number;
22
+ width: number;
23
+ height: number;
24
+ };
25
+ /** 平铺层单帧最多绘制的重复块数量,避免小图案/低缩放时一次渲染过多 tile */
26
+ export declare const MAX_PATTERN_TILE_COUNT = 400;
27
+ /**
28
+ * 将覆盖矩形缩小到不超过 maxTiles 个平铺块,保持原矩形中心不变。
29
+ */
30
+ export declare function clampPatternCoverRectToMaxTiles(cover: PatternCoverRect, scaledTileW: number, scaledTileH: number, maxTiles?: number): PatternCoverRect;
31
+ /** 当前视口在场景坐标系下的可见矩形 */
32
+ export declare function getViewportVisibleSceneRect(canvas: any): PatternCoverRect | null;
33
+ /** 按当前视口可见区域生成平铺覆盖矩形,并在四周至少扩展 extraTiles 个缩放后的 tile */
34
+ export declare function getPatternViewportCoverRect(canvas: any, tileWidth: number, tileHeight: number, scale: number, extraTiles?: number): PatternCoverRect | null;
35
+ export declare const setPatternCenterOffset: (pattern: any, rectW: number, rectH: number, tileWidth: number, tileHeight: number, scale: number) => void;
36
+ /**
37
+ * 还原:优先沿用 JSON / 画布对象 fill 上的 offsetX/Y(与普通图层几何一致);仅新建或无有效 offset 时按画布居中。
38
+ */
39
+ export declare const applyPatternOffsetFromSavedOrCenter: (pattern: any, canvasW: number, canvasH: number, tileWidth: number, tileHeight: number, scale: number, savedFill: any) => void;
40
+ export declare const buildPatternSource: (img: HTMLImageElement | HTMLCanvasElement, mode: string) => HTMLImageElement | HTMLCanvasElement;
41
+ export declare const createFabricPattern: (source: any, scale: number) => Pattern;
42
+ /** 默认图片加载(离屏导出等无 token 代理场景) */
43
+ export declare function loadImageElement(url: string): Promise<HTMLImageElement | null>;
44
+ /**
45
+ * loadFromJSON 后 PatternLayer 的 patternElement 会丢失,需从 customData.patternSource 重建。
46
+ * 主画布切换分片、离屏 JSON 导出截图共用。
47
+ */
48
+ export declare function rebuildPatternRectsOnCanvas(canvas: any, loadImageFn?: (url: string) => Promise<HTMLImageElement>): Promise<void>;
49
+ /** 从对象获取图案源 URL(图案矩形或图片的 savedSrc/src) */
50
+ export declare function getPatternSourceUrl(obj: any): string;
51
+ /**
52
+ * 克隆对象用于截图:对图案矩形会重建独立 Pattern;对普通图片若提供 resolveImageToDataUrl 则用 data URL 替换源,避免跨域污染 canvas(如加载设计后画布为 http 图)
53
+ */
54
+ export declare function cloneObjectForScreenshot(obj: any, loadImage: (url: string) => Promise<HTMLImageElement>, _canvasW: number, _canvasH: number,
55
+ /** 仅截图路径使用:将 http(s) 图片转为 data URL,避免 tainted canvas */
56
+ resolveImageToDataUrl?: (url: string) => Promise<string>): Promise<any>;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 经典模式(SPLIT)下模板里带 customData.role === 'grid' 的分片格视觉缩放。
3
+ * 整网以包围盒中心为基准缩小,避免逐格缩放导致错位。
4
+ */
5
+ export declare const SPLIT_CLASSIC_GRID_VISUAL_SCALE = 0.82;
6
+ /**
7
+ * 对当前画布上的 grid 层做一次视觉缩放(可重复调用:已打标则跳过)。
8
+ */
9
+ export declare function applySplitClassicGridVisualScale(canvas: any, scale?: number): void;
@@ -0,0 +1,8 @@
1
+ import type { MaskResource } from './dataBuilders';
2
+ export declare function buildScaledBlob(source: HTMLCanvasElement, maxEdge?: number, canvasToBlobFn?: (c: HTMLCanvasElement, type: string) => Promise<Blob>): Promise<{
3
+ blob: Blob;
4
+ width: number;
5
+ height: number;
6
+ } | null>;
7
+ export declare function buildMaskedScreenshotCanvas(baseSource: string | Blob, mask: MaskResource, canvasW: number, canvasH: number, loadImage: (src: string | Blob) => Promise<HTMLImageElement>): Promise<HTMLCanvasElement | null>;
8
+ export declare function buildMaskedScreenshotBlob(baseSource: string | Blob, mask: MaskResource, canvasW: number, canvasH: number, loadImage: (src: string | Blob) => Promise<HTMLImageElement>, canvasToBlobFn?: (c: HTMLCanvasElement, type: string) => Promise<Blob>): Promise<Blob | null>;
@@ -0,0 +1,7 @@
1
+ /** 用户可编辑图层选中框控制点样式(与 Fabric 默认 ~13px 区分) */
2
+ export declare const OBJECT_SELECTION_BORDER_SCALE_FACTOR = 3;
3
+ export declare const OBJECT_SELECTION_CORNER_SIZE = 30;
4
+ export declare const OBJECT_SELECTION_TOUCH_CORNER_SIZE = 36;
5
+ export declare function applyObjectSelectionVisual(obj: any): void;
6
+ /** 平铺层:隐藏 cover 外框与缩放/旋转控制点,仅保留 _render 内单格虚线提示 */
7
+ export declare function applyPatternLayerSelectionVisual(obj: any): void;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 将带 alpha 的 mask 图像染成纯色(保留轮廓),供填充工具生成 Fabric Image。
3
+ */
4
+ export declare function tintMaskWithColor(srcEl: HTMLImageElement | HTMLCanvasElement, color: string): HTMLCanvasElement | null;
@@ -0,0 +1,4 @@
1
+ export declare const MAX_IMAGE_UPLOAD_SIZE_MB = 20;
2
+ export declare const MAX_IMAGE_UPLOAD_BYTES: number;
3
+ export declare function isImageFileTooLarge(file: File | null | undefined): file is File;
4
+ export declare function formatImageUploadSizeLimit(): string;