@jetprint/editor-sdk 1.2.3 → 1.2.5
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/components/Editor/components/EditorAddToCartDialog.vue.d.ts +1 -0
- package/dist/components/Editor/components/EditorSidebar.vue.d.ts +35 -0
- package/dist/components/Editor/components/EditorTopbar.vue.d.ts +24 -0
- package/dist/components/Editor/components/EmbroideryStitchPanel.vue.d.ts +9 -0
- package/dist/components/Editor/components/PreviewPanel.vue.d.ts +1 -1
- package/dist/components/Editor/components/Theme1UploadPanel.vue.d.ts +35 -0
- package/dist/components/Editor/composables/useBackgroundRemoval.d.ts +62 -0
- package/dist/components/Editor/composables/useBrushRefine.d.ts +31 -0
- package/dist/components/Editor/composables/useCanvasStateByDiecut.d.ts +8 -0
- package/dist/components/Editor/composables/useCanvasViewport.d.ts +1 -0
- package/dist/components/Editor/composables/useEmbroidery.d.ts +57 -0
- package/dist/components/Editor/composables/usePreviewManager.d.ts +516 -0
- package/dist/components/Editor/composables/usePreviewRenderer.d.ts +2 -0
- package/dist/components/Editor/headless/headlessFontLoader.d.ts +7 -0
- package/dist/components/Editor/index.vue.d.ts +7 -5
- package/dist/components/Editor/liveRender/types.d.ts +4 -0
- package/dist/components/Editor/utils/editorSizeOptions.d.ts +6 -0
- package/dist/components/Editor/utils/embroideryStitch.d.ts +25 -0
- package/dist/components/Editor/utils/pattern.d.ts +1 -1
- package/dist/components/Editor/utils/pillow3dPreview.d.ts +37 -0
- package/dist/components/Editor/workers/embroidery.worker.d.ts +47 -0
- package/dist/editor-sdk.es.js +44069 -40951
- package/dist/index.d.ts +6 -0
- package/dist/style.css +1 -1
- package/dist/types.d.ts +54 -0
- package/dist/utils/backgroundRenderer.d.ts +6 -3
- package/dist/utils/protection/encryptedModules.generated.d.ts +1 -1
- package/dist/utils/renderService/layerEffects.d.ts +148 -0
- package/dist/utils/renderService/types.d.ts +4 -0
- package/dist/utils/renderedImagesDB.d.ts +3 -0
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -139,6 +139,8 @@ export type AddToCartSubmitResult = {
|
|
|
139
139
|
msg?: string;
|
|
140
140
|
addedCount?: number;
|
|
141
141
|
psTaskCode?: string;
|
|
142
|
+
/** 后端 PS 任务的设计字符串 ID(加购接口返回),宿主用于后台渲染 record 归属与恢复回报 */
|
|
143
|
+
psTaskId?: string;
|
|
142
144
|
};
|
|
143
145
|
export type AddToCartFetchDetailResult = {
|
|
144
146
|
ok: true;
|
|
@@ -195,10 +197,34 @@ export type EditorOptions = {
|
|
|
195
197
|
uiTheme?: EditorUiTheme;
|
|
196
198
|
/** 为 true 时在顶栏「清空画布」右侧显示界面主题下拉,变更时向宿主 emit `update:uiTheme` */
|
|
197
199
|
showUiThemeSelect?: boolean;
|
|
200
|
+
/** 为 true 时在图层操作区显示「自动抠图」按钮(默认隐藏;第三方需显式开启) */
|
|
201
|
+
showBackgroundRemove?: boolean;
|
|
202
|
+
/**
|
|
203
|
+
* 自动抠图 · 服务端模式:传入则用它替代客户端 ONNX 推理(不加载 @imgly、不跑本地模型,最轻)。
|
|
204
|
+
* 入参原图 Blob,返回去背景后的图(Blob 或可 fetch 的 URL)。
|
|
205
|
+
*/
|
|
206
|
+
backgroundRemoveProvider?: (input: Blob) => Promise<Blob | string>;
|
|
207
|
+
/**
|
|
208
|
+
* 自动抠图 · 客户端模式:@imgly ESM 运行时 URL(默认 jsdelivr CDN)。
|
|
209
|
+
* ort 运行时由此 URL 在运行时加载,**不进 SDK 包**;可指向自家 CDN/OSS 托管的 @imgly ESM 产物。
|
|
210
|
+
*/
|
|
211
|
+
backgroundRemoveCdnUrl?: string;
|
|
212
|
+
/**
|
|
213
|
+
* 自动抠图 · 客户端模式:模型/wasm 加载基址(publicPath)。默认走 @imgly 官方 CDN;
|
|
214
|
+
* 可指向自家 OSS 或本地 public 目录(如 '/imgly/dist/')。
|
|
215
|
+
*/
|
|
216
|
+
backgroundRemoveModelUrl?: string;
|
|
217
|
+
/** 自动抠图 · 模型变体(@imgly 1.7.0):'isnet_fp16' 质量最好(84MB) / 'isnet_quint8' 体积小一半(42MB) / 'isnet'。默认 'isnet_quint8'。 */
|
|
218
|
+
backgroundRemoveModel?: 'isnet' | 'isnet_fp16' | 'isnet_quint8';
|
|
198
219
|
/**
|
|
199
220
|
* theme1「上传」Tab:用户通过内置 file input 选图后,将 `File` 交给宿主上传;完成后请调用编辑器 `defineExpose` 的 `addImageFromUrl(url)` 加入画布。
|
|
200
221
|
*/
|
|
201
222
|
onTheme1UploadLocalFiles?: (file: File) => void | Promise<void>;
|
|
223
|
+
/**
|
|
224
|
+
* 无 galleryApi 的第三方:抠图(+描边)完成后回调最终结果图(File + 建议文件名)。
|
|
225
|
+
* 返回字符串(URL)则 SDK 用它作图层 savedSrc 持久化;返回 void 则由第三方自行保存、图层保留内存结果。
|
|
226
|
+
*/
|
|
227
|
+
onBackgroundRemoveResult?: (file: File, suggestedName: string) => Promise<string | void> | string | void;
|
|
202
228
|
/**
|
|
203
229
|
* 内置加购弹窗:注入 fetchDetail + submit 后,顶栏与 theme1 Mockup「加购」走 SDK 弹窗。
|
|
204
230
|
* 配置后不再调用 props.onAddToCart(由宿主只传 adapter + 成功/失败回调即可)。
|
|
@@ -251,6 +277,33 @@ export type DiecutStateMapResult = {
|
|
|
251
277
|
selectedSizes?: string[];
|
|
252
278
|
/** 当前模板模式:'COMPLETE'(单片)或 'SPLIT'(多片) */
|
|
253
279
|
selectedMode: 'COMPLETE' | 'SPLIT';
|
|
280
|
+
/** 特殊设计模式:none(正常) | embroidery(刺绣) | pillow3d(异形抱枕);P1 模式开关,随设计保存、加载还原 */
|
|
281
|
+
specialMode?: 'none' | 'embroidery' | 'pillow3d';
|
|
282
|
+
/** typeModel = specialMode 别名;Go 还原生成图时据此分派三种模式生成不同生产图 */
|
|
283
|
+
typeModel?: 'none' | 'embroidery' | 'pillow3d';
|
|
284
|
+
/** 刺绣意图数据(仅 specialMode==='embroidery'):色块+针法+量化参数,供后端确定性重建区域并生成刺绣文件 */
|
|
285
|
+
embroidery?: {
|
|
286
|
+
version: number;
|
|
287
|
+
/** 被刺绣化的原图来源 src */
|
|
288
|
+
sourceSrc: string;
|
|
289
|
+
/** 量化色数 + 颜色组合并阈值(Lab ΔE) + 工作尺寸;后端用同参数对原图确定性重量化得到相同色组 */
|
|
290
|
+
colorCount: number;
|
|
291
|
+
mergeColorDist: number;
|
|
292
|
+
maxWorkSize: number;
|
|
293
|
+
/** 每个颜色组:色值 / 面积 / 包围盒 / 所选针法 */
|
|
294
|
+
groups: Array<{
|
|
295
|
+
id: number;
|
|
296
|
+
color: [number, number, number];
|
|
297
|
+
area: number;
|
|
298
|
+
bbox: {
|
|
299
|
+
x: number;
|
|
300
|
+
y: number;
|
|
301
|
+
w: number;
|
|
302
|
+
h: number;
|
|
303
|
+
};
|
|
304
|
+
stitch: string;
|
|
305
|
+
}>;
|
|
306
|
+
};
|
|
254
307
|
/** fabric 逻辑画布宽度(与导出 JSON 坐标系一致) */
|
|
255
308
|
designCanvasSize: number;
|
|
256
309
|
/** fabric 逻辑画布高度;缺省还原时按 CANVAS_LOGICAL_HEIGHT(2000) 处理 */
|
|
@@ -370,6 +423,7 @@ export type EditorProps = {
|
|
|
370
423
|
onAddToCartSuccess?: (payload?: {
|
|
371
424
|
addedCount?: number;
|
|
372
425
|
psTaskCode?: string;
|
|
426
|
+
psTaskId?: string;
|
|
373
427
|
}) => void;
|
|
374
428
|
/** 内置加购失败或校验失败;仅 options.addToCart 生效时由 Editor 调用 */
|
|
375
429
|
onAddToCartError?: (msg?: string) => void;
|
|
@@ -2,6 +2,8 @@ import { type RenderBundle, type FabricScreenshotBlob } from './renderedImagesDB
|
|
|
2
2
|
import { getLicenseInfo } from './license/licenseStore';
|
|
3
3
|
export interface BackgroundRenderJob {
|
|
4
4
|
taskId: string;
|
|
5
|
+
/** 后端 PS 任务的设计字符串 ID(保存/加购接口返回),随 record 持久化,恢复渲染时回报后端用 */
|
|
6
|
+
psTaskId?: string;
|
|
5
7
|
/** 完整渲染数据包(优先使用:后台直接调用 renderByJson 合成) */
|
|
6
8
|
renderBundle?: RenderBundle;
|
|
7
9
|
/** 旧路径:由编辑器实时渲染(renderBundle 不存在时回退) */
|
|
@@ -9,12 +11,13 @@ export interface BackgroundRenderJob {
|
|
|
9
11
|
index: number;
|
|
10
12
|
blob: Blob;
|
|
11
13
|
}>>;
|
|
12
|
-
/** 由调用方提供的图片上传函数,避免 SDK 依赖主项目 API
|
|
14
|
+
/** 由调用方提供的图片上传函数,避免 SDK 依赖主项目 API。
|
|
15
|
+
* 第三参 psTaskId 为后端任务 ID,恢复渲染时用它拼 /ps/task/{psTaskId}/images 回报后端。 */
|
|
13
16
|
uploadImages?: (taskId: string, images: Array<{
|
|
14
17
|
index: number;
|
|
15
18
|
blob: Blob;
|
|
16
19
|
fileName: string;
|
|
17
|
-
}
|
|
20
|
+
}>, psTaskId?: string) => Promise<void>;
|
|
18
21
|
/** 所有模板渲染完成且 cover 图片上传完成后调用,用于上传 fabricScreenshotList */
|
|
19
22
|
onDesignScreenshotsReady?: (taskId: string, fabricScreenshots: FabricScreenshotBlob[]) => Promise<void>;
|
|
20
23
|
/**
|
|
@@ -45,7 +48,7 @@ export interface BackgroundRenderJob {
|
|
|
45
48
|
* 保存成功后立刻写入占位任务(rendering、images: []),再异步 collectRenderBundle。
|
|
46
49
|
* 避免用户先于 collect 进入「我的设计」时 IndexedDB 尚无记录,getRenderTask 为空、列表无法轮询。
|
|
47
50
|
*/
|
|
48
|
-
export declare function putRenderTaskPlaceholder(taskId: string): Promise<void>;
|
|
51
|
+
export declare function putRenderTaskPlaceholder(taskId: string, psTaskId?: string): Promise<void>;
|
|
49
52
|
export declare function startBackgroundRender(job: BackgroundRenderJob): Promise<void>;
|
|
50
53
|
/** 将 renderBundle 内所有模板合成为 Blob 列表(不写 IndexedDB,供多颜色同步渲染) */
|
|
51
54
|
export declare function renderBundleToBlobs(bundle: RenderBundle, licenseSnapshot?: ReturnType<typeof getLicenseInfo>, onBlob?: (img: {
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/** 同时兼容浏览器主线程与 Worker 两种 2D canvas */
|
|
2
|
+
export type CanvasLike = HTMLCanvasElement | OffscreenCanvas;
|
|
3
|
+
/** ag-psd 风格的数值: 可能是裸 number,也可能是 {value} 包装(可带 unit) */
|
|
4
|
+
export type NumLike = number | {
|
|
5
|
+
value: number;
|
|
6
|
+
unit?: string;
|
|
7
|
+
} | null | undefined;
|
|
8
|
+
/** 颜色 {r,g,b}(0-255) */
|
|
9
|
+
export interface EffectColor {
|
|
10
|
+
r: number;
|
|
11
|
+
g: number;
|
|
12
|
+
b: number;
|
|
13
|
+
}
|
|
14
|
+
/** bevel 纹理参数(由调用方从 lfx2 解析后传入;本模块不解析 PSD) */
|
|
15
|
+
export interface BevelTex {
|
|
16
|
+
depth: number;
|
|
17
|
+
scale?: number;
|
|
18
|
+
invert?: boolean;
|
|
19
|
+
align?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** 图案引用 */
|
|
22
|
+
export interface PatternRef {
|
|
23
|
+
id?: string;
|
|
24
|
+
}
|
|
25
|
+
/** 相位(图案偏移) */
|
|
26
|
+
export interface EffectPhase {
|
|
27
|
+
x?: number;
|
|
28
|
+
y?: number;
|
|
29
|
+
}
|
|
30
|
+
/** 投影 / 内阴影 */
|
|
31
|
+
export interface ShadowEffect {
|
|
32
|
+
enabled?: boolean;
|
|
33
|
+
color?: EffectColor;
|
|
34
|
+
blendMode?: string;
|
|
35
|
+
opacity?: number;
|
|
36
|
+
angle?: NumLike;
|
|
37
|
+
distance?: NumLike;
|
|
38
|
+
size?: NumLike;
|
|
39
|
+
}
|
|
40
|
+
/** 外发光 / 内发光 */
|
|
41
|
+
export interface GlowEffect {
|
|
42
|
+
enabled?: boolean;
|
|
43
|
+
color?: EffectColor;
|
|
44
|
+
blendMode?: string;
|
|
45
|
+
opacity?: number;
|
|
46
|
+
size?: NumLike;
|
|
47
|
+
}
|
|
48
|
+
/** 颜色叠加 */
|
|
49
|
+
export interface SolidFillEffect {
|
|
50
|
+
enabled?: boolean;
|
|
51
|
+
color?: EffectColor;
|
|
52
|
+
blendMode?: string;
|
|
53
|
+
opacity?: number;
|
|
54
|
+
}
|
|
55
|
+
/** 图案叠加 */
|
|
56
|
+
export interface PatternOverlayEffect {
|
|
57
|
+
enabled?: boolean;
|
|
58
|
+
pattern?: PatternRef;
|
|
59
|
+
blendMode?: string;
|
|
60
|
+
opacity?: number;
|
|
61
|
+
scale?: NumLike;
|
|
62
|
+
phase?: EffectPhase;
|
|
63
|
+
}
|
|
64
|
+
/** 光泽(satin) */
|
|
65
|
+
export interface SatinEffect {
|
|
66
|
+
enabled?: boolean;
|
|
67
|
+
color?: EffectColor;
|
|
68
|
+
blendMode?: string;
|
|
69
|
+
opacity?: number;
|
|
70
|
+
angle?: NumLike;
|
|
71
|
+
distance?: NumLike;
|
|
72
|
+
size?: NumLike;
|
|
73
|
+
}
|
|
74
|
+
/** 斜面与浮雕(bevel) */
|
|
75
|
+
export interface BevelEffect {
|
|
76
|
+
enabled?: boolean;
|
|
77
|
+
size?: NumLike;
|
|
78
|
+
soften?: NumLike;
|
|
79
|
+
strength?: NumLike;
|
|
80
|
+
depth?: NumLike;
|
|
81
|
+
angle?: NumLike;
|
|
82
|
+
altitude?: NumLike;
|
|
83
|
+
localLightingAngle?: NumLike;
|
|
84
|
+
localLightingAltitude?: NumLike;
|
|
85
|
+
technique?: string;
|
|
86
|
+
useShape?: boolean;
|
|
87
|
+
useTexture?: boolean;
|
|
88
|
+
pattern?: PatternRef;
|
|
89
|
+
scale?: NumLike;
|
|
90
|
+
phase?: EffectPhase;
|
|
91
|
+
highlightColor?: EffectColor;
|
|
92
|
+
shadowColor?: EffectColor;
|
|
93
|
+
highlightBlendMode?: string;
|
|
94
|
+
shadowBlendMode?: string;
|
|
95
|
+
highlightOpacity?: number;
|
|
96
|
+
shadowOpacity?: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 图层效果数据(由后端 JSON 提供,本模块仅消费)。
|
|
100
|
+
* 经 filterEnabledEffects 归一化后,multis 字段统一为数组。
|
|
101
|
+
* 原始后端数据中 patternOverlay 可能是单对象、solidFill/gradientOverlay 可能是数组,
|
|
102
|
+
* 这里用宽松类型同时兼容(filterEnabledEffects 负责统一)。
|
|
103
|
+
*/
|
|
104
|
+
export interface LayerEffects {
|
|
105
|
+
scale?: NumLike;
|
|
106
|
+
dropShadow?: ShadowEffect | ShadowEffect[];
|
|
107
|
+
outerGlow?: GlowEffect;
|
|
108
|
+
innerGlow?: GlowEffect;
|
|
109
|
+
innerShadow?: ShadowEffect | ShadowEffect[];
|
|
110
|
+
solidFill?: SolidFillEffect | SolidFillEffect[];
|
|
111
|
+
patternOverlay?: PatternOverlayEffect | PatternOverlayEffect[];
|
|
112
|
+
satin?: SatinEffect;
|
|
113
|
+
bevel?: BevelEffect;
|
|
114
|
+
gradientOverlay?: unknown;
|
|
115
|
+
stroke?: unknown;
|
|
116
|
+
[k: string]: unknown;
|
|
117
|
+
}
|
|
118
|
+
/** 归一化后的 effects(multis 已转数组) */
|
|
119
|
+
interface NormalizedEffects extends LayerEffects {
|
|
120
|
+
dropShadow?: ShadowEffect[];
|
|
121
|
+
innerShadow?: ShadowEffect[];
|
|
122
|
+
solidFill?: SolidFillEffect[];
|
|
123
|
+
patternOverlay?: PatternOverlayEffect[];
|
|
124
|
+
}
|
|
125
|
+
/** applyLayerEffects 选项: pattern/bevelTex 来源回调 + scale */
|
|
126
|
+
export interface ApplyEffectsOptions {
|
|
127
|
+
/** 取图案位图(patternOverlay / bevel useTexture);源码中的 g_bridgeData.patterns.get(id) */
|
|
128
|
+
getPatternCanvas?: (id: string) => CanvasLike | null;
|
|
129
|
+
/** 取 bevel 真实纹理参数;源码中的 g_bridgeData.bevelTex.get(id) */
|
|
130
|
+
getBevelTex?: (id: string) => BevelTex | null;
|
|
131
|
+
/** 额外缩放(可选,覆盖 eff.scale;不传则用 eff.scale) */
|
|
132
|
+
scale?: number;
|
|
133
|
+
}
|
|
134
|
+
/** 可绘制源(canvas 或 image),用作 drawImage 的输入 */
|
|
135
|
+
type Drawable = CanvasLike | HTMLImageElement | ImageBitmap;
|
|
136
|
+
export declare function _clamp01(v: number): number;
|
|
137
|
+
export declare function _vividLight(b: number, s: number): number;
|
|
138
|
+
export declare function _blendCh(mode: string, b: number, s: number): number;
|
|
139
|
+
export declare function filterEnabledEffects(eff: LayerEffects | null | undefined): NormalizedEffects | undefined;
|
|
140
|
+
/**
|
|
141
|
+
* 对"变形后 canvas"应用图层效果,返回新 canvas(供上层合成时 drawImage)。
|
|
142
|
+
* 每个效果独立 try/catch,失败不影响其余效果。
|
|
143
|
+
* pattern/bevelTex 通过 opts 回调传入(本模块不解析 PSD)。
|
|
144
|
+
* 行为与源码一致:假定 eff 已是 filterEnabledEffects 的输出(multis 为数组)。
|
|
145
|
+
*/
|
|
146
|
+
export declare function applyLayerEffects(bodyCanvas: Drawable, eff: LayerEffects | null | undefined, W: number, H: number, opts?: ApplyEffectsOptions): CanvasLike;
|
|
147
|
+
export declare function getBlendMode(m?: string): GlobalCompositeOperation;
|
|
148
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { LayerEffects } from './layerEffects';
|
|
1
2
|
export declare enum EPartType {
|
|
2
3
|
Drawing = 0,// 可绘制插画
|
|
3
4
|
Material = 1
|
|
@@ -75,6 +76,7 @@ export interface ISmartObject {
|
|
|
75
76
|
filterList?: IFilter[];
|
|
76
77
|
opacity?: number;
|
|
77
78
|
clipping?: boolean;
|
|
79
|
+
effects?: LayerEffects;
|
|
78
80
|
}
|
|
79
81
|
/** 裁片部位数据 */
|
|
80
82
|
export interface IPart {
|
|
@@ -105,6 +107,7 @@ export interface IPsdPartData {
|
|
|
105
107
|
opacity?: number;
|
|
106
108
|
clipping?: boolean;
|
|
107
109
|
layerOrder?: number;
|
|
110
|
+
effects?: LayerEffects;
|
|
108
111
|
}
|
|
109
112
|
/** 模特图数据 */
|
|
110
113
|
export interface IPsdModelData {
|
|
@@ -146,6 +149,7 @@ export interface IPsdJsonLayer {
|
|
|
146
149
|
id?: number;
|
|
147
150
|
opacity?: number;
|
|
148
151
|
clipping?: boolean;
|
|
152
|
+
effects?: LayerEffects;
|
|
149
153
|
}
|
|
150
154
|
export interface IPsdJsonData {
|
|
151
155
|
canvasWidth: number;
|
|
@@ -37,6 +37,9 @@ export interface RenderBundle {
|
|
|
37
37
|
}
|
|
38
38
|
export interface RenderTaskRecord {
|
|
39
39
|
taskId: string;
|
|
40
|
+
/** 后端 PS 任务的设计字符串 ID(保存/加购接口返回的 data.psTaskId),用于后端对账;
|
|
41
|
+
* 恢复渲染时按此 ID 回报 /ps/task/{psTaskId}/images,而非本地拼接的 taskId。 */
|
|
42
|
+
psTaskId?: string;
|
|
40
43
|
status: RenderTaskStatus;
|
|
41
44
|
images: RenderedImage[];
|
|
42
45
|
createdAt: number;
|