@jetprint/editor-sdk 1.2.3 → 1.2.4

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/types.d.ts CHANGED
@@ -195,10 +195,34 @@ export type EditorOptions = {
195
195
  uiTheme?: EditorUiTheme;
196
196
  /** 为 true 时在顶栏「清空画布」右侧显示界面主题下拉,变更时向宿主 emit `update:uiTheme` */
197
197
  showUiThemeSelect?: boolean;
198
+ /** 为 true 时在图层操作区显示「自动抠图」按钮(默认隐藏;第三方需显式开启) */
199
+ showBackgroundRemove?: boolean;
200
+ /**
201
+ * 自动抠图 · 服务端模式:传入则用它替代客户端 ONNX 推理(不加载 @imgly、不跑本地模型,最轻)。
202
+ * 入参原图 Blob,返回去背景后的图(Blob 或可 fetch 的 URL)。
203
+ */
204
+ backgroundRemoveProvider?: (input: Blob) => Promise<Blob | string>;
205
+ /**
206
+ * 自动抠图 · 客户端模式:@imgly ESM 运行时 URL(默认 jsdelivr CDN)。
207
+ * ort 运行时由此 URL 在运行时加载,**不进 SDK 包**;可指向自家 CDN/OSS 托管的 @imgly ESM 产物。
208
+ */
209
+ backgroundRemoveCdnUrl?: string;
210
+ /**
211
+ * 自动抠图 · 客户端模式:模型/wasm 加载基址(publicPath)。默认走 @imgly 官方 CDN;
212
+ * 可指向自家 OSS 或本地 public 目录(如 '/imgly/dist/')。
213
+ */
214
+ backgroundRemoveModelUrl?: string;
215
+ /** 自动抠图 · 模型变体,默认 'isnet_quint8'(42MB,体积小一半)。 */
216
+ backgroundRemoveModel?: 'isnet' | 'isnet_fp16' | 'isnet_quint8';
198
217
  /**
199
218
  * theme1「上传」Tab:用户通过内置 file input 选图后,将 `File` 交给宿主上传;完成后请调用编辑器 `defineExpose` 的 `addImageFromUrl(url)` 加入画布。
200
219
  */
201
220
  onTheme1UploadLocalFiles?: (file: File) => void | Promise<void>;
221
+ /**
222
+ * 无 galleryApi 的第三方:抠图(+描边)完成后回调最终结果图(File + 建议文件名)。
223
+ * 返回字符串(URL)则 SDK 用它作图层 savedSrc 持久化;返回 void 则由第三方自行保存、图层保留内存结果。
224
+ */
225
+ onBackgroundRemoveResult?: (file: File, suggestedName: string) => Promise<string | void> | string | void;
202
226
  /**
203
227
  * 内置加购弹窗:注入 fetchDetail + submit 后,顶栏与 theme1 Mockup「加购」走 SDK 弹窗。
204
228
  * 配置后不再调用 props.onAddToCart(由宿主只传 adapter + 成功/失败回调即可)。
@@ -3,7 +3,7 @@
3
3
  * 此文件由 vite-plugins/serverEncrypt.ts 在构建时自动生成
4
4
  * 请勿手动编辑
5
5
  *
6
- * 生成时间: 2026-06-22T08:13:45.537Z
6
+ * 生成时间: 2026-06-22T16:24:29.264Z
7
7
  * 构建模式: production
8
8
  * 加密模块数量: 13
9
9
  * 构建种子: Kx9mP2qR5s... (已隐藏)
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jetprint/editor-sdk",
3
- "version": "1.2.3",
3
+ "version": "1.2.4",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "scripts": {