customforge 0.1.0-alpha.1 → 0.1.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/CHANGELOG.md +79 -24
- package/LICENSES/NunitoSans-OFL.txt +93 -0
- package/LICENSES/plain-mug-CC-BY-4.0.txt +11 -0
- package/README.md +592 -290
- package/README.zh-CN.md +589 -290
- package/dist/NunitoSans-Variable.ttf +0 -0
- package/dist/ProductCustomizer-4ytA68eg.js +2350 -0
- package/dist/ProductCustomizer-4ytA68eg.js.map +1 -0
- package/dist/bridge/TextureBridge.d.ts +1 -1
- package/dist/core/api.d.ts +94 -0
- package/dist/core/api.d.ts.map +1 -0
- package/dist/core/config.d.ts +3 -12
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/design.d.ts.map +1 -1
- package/dist/core/types.d.ts +217 -8
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/uv.d.ts +8 -0
- package/dist/core/uv.d.ts.map +1 -0
- package/dist/cup_decal_small_margins.glb +0 -0
- package/dist/customizer/ProductCustomizer.d.ts +174 -7
- package/dist/customizer/ProductCustomizer.d.ts.map +1 -1
- package/dist/editor/DesignEditor.d.ts +224 -14
- package/dist/editor/DesignEditor.d.ts.map +1 -1
- package/dist/editor/DesignHistory.d.ts +27 -0
- package/dist/editor/DesignHistory.d.ts.map +1 -0
- package/dist/editor/uvBounds.d.ts +15 -0
- package/dist/editor/uvBounds.d.ts.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1108
- package/dist/index.js.map +1 -1
- package/dist/style.css +2123 -11
- package/dist/viewer/ProductViewer.d.ts +37 -6
- package/dist/viewer/ProductViewer.d.ts.map +1 -1
- package/dist/viewer/uvLayout.d.ts +11 -0
- package/dist/viewer/uvLayout.d.ts.map +1 -0
- package/dist/workbench/CustomForgeWorkbench.d.ts +205 -0
- package/dist/workbench/CustomForgeWorkbench.d.ts.map +1 -0
- package/dist/workbench/assets/catalog.d.ts +8 -0
- package/dist/workbench/assets/catalog.d.ts.map +1 -0
- package/dist/workbench/config.d.ts +96 -0
- package/dist/workbench/config.d.ts.map +1 -0
- package/dist/workbench/icons.d.ts +4 -0
- package/dist/workbench/icons.d.ts.map +1 -0
- package/dist/workbench/index.d.ts +25 -0
- package/dist/workbench/index.d.ts.map +1 -0
- package/dist/workbench/template.d.ts +3 -0
- package/dist/workbench/template.d.ts.map +1 -0
- package/dist/workbench/types.d.ts +542 -0
- package/dist/workbench/types.d.ts.map +1 -0
- package/dist/workbench.js +3052 -0
- package/dist/workbench.js.map +1 -0
- package/package.json +77 -71
|
@@ -1,18 +1,34 @@
|
|
|
1
|
-
import { Canvas
|
|
2
|
-
import type { AddImageOptions, AddTextOptions, DesignDocument } from '../core/types';
|
|
1
|
+
import { Canvas } from 'fabric';
|
|
2
|
+
import type { AddImageOptions, AddTextOptions, CanvasBounds, DesignCanvas as DesignCanvasSize, DesignDocument, DesignObject, EditorAppearance, HistoryState, ImageDesignObject, TextDesignObject, UpdateObjectTransformOptions, UpdateTextOptions } from '../core/types';
|
|
3
|
+
import type { UvLayout } from '../core/uv';
|
|
3
4
|
/** 二维编辑器内部初始化配置 */
|
|
4
5
|
interface DesignEditorOptions {
|
|
5
6
|
/** 画布逻辑宽度,单位为像素 */
|
|
6
7
|
width: number;
|
|
7
8
|
/** 画布逻辑高度,单位为像素 */
|
|
8
9
|
height: number;
|
|
10
|
+
/** 最多保留的撤销步骤数量 */
|
|
11
|
+
historyLimit: number;
|
|
12
|
+
/** 编辑画布的无障碍名称 */
|
|
13
|
+
ariaLabel?: string;
|
|
14
|
+
/** 未提供内容时添加到画布的默认文字 */
|
|
15
|
+
defaultText?: string;
|
|
16
|
+
/** 空文字对象的默认名称 */
|
|
17
|
+
textObjectName?: string;
|
|
18
|
+
/** 普通图片对象的默认名称 */
|
|
19
|
+
imageObjectName?: string;
|
|
20
|
+
/** 背景图片对象的默认名称 */
|
|
21
|
+
backgroundObjectName?: string;
|
|
22
|
+
/** 选择框、对象控制点和 UV 辅助层外观 */
|
|
23
|
+
appearance?: EditorAppearance;
|
|
9
24
|
}
|
|
10
25
|
type RenderListener = () => void;
|
|
11
|
-
type SelectionListener = (
|
|
26
|
+
type SelectionListener = (objectIds: string[]) => void;
|
|
27
|
+
type HistoryListener = (state: HistoryState) => void;
|
|
12
28
|
/**
|
|
13
29
|
* 基于 Fabric.js 的二维纹理编辑器
|
|
14
30
|
*
|
|
15
|
-
*
|
|
31
|
+
* 负责基础纹理、UV 区域辅助层、文字、图片、对象选择和 PNG 导出
|
|
16
32
|
* 显示尺寸可以响应容器变化,内部逻辑尺寸保持不变
|
|
17
33
|
*/
|
|
18
34
|
export declare class DesignEditor {
|
|
@@ -21,21 +37,48 @@ export declare class DesignEditor {
|
|
|
21
37
|
private readonly host;
|
|
22
38
|
private readonly width;
|
|
23
39
|
private readonly height;
|
|
40
|
+
private readonly defaultText;
|
|
41
|
+
private readonly textObjectName;
|
|
42
|
+
private readonly imageObjectName;
|
|
43
|
+
private readonly backgroundObjectName;
|
|
44
|
+
private readonly appearance;
|
|
45
|
+
private editableBounds;
|
|
24
46
|
private readonly renderListeners;
|
|
25
47
|
private readonly selectionListeners;
|
|
48
|
+
private readonly historyListeners;
|
|
26
49
|
private readonly objectIds;
|
|
50
|
+
private readonly objectsById;
|
|
51
|
+
private readonly objectNames;
|
|
52
|
+
private readonly objectLocks;
|
|
27
53
|
private readonly usedObjectIds;
|
|
28
54
|
private readonly imageSources;
|
|
55
|
+
private readonly imageRoles;
|
|
29
56
|
private readonly resizeObserver;
|
|
57
|
+
private readonly history;
|
|
58
|
+
private readonly uvOverlay;
|
|
59
|
+
private readonly textureRenderer;
|
|
60
|
+
private readonly textureCanvasElement;
|
|
61
|
+
private readonly textureContext;
|
|
62
|
+
private historySignature;
|
|
63
|
+
private historyTimer?;
|
|
64
|
+
private historyBusy;
|
|
65
|
+
private renderingTexture;
|
|
30
66
|
private objectIdSequence;
|
|
31
67
|
/**
|
|
32
68
|
* @param host 二维编辑器挂载容器
|
|
33
|
-
* @param options
|
|
69
|
+
* @param options 画布逻辑尺寸和历史容量
|
|
34
70
|
*/
|
|
35
71
|
constructor(host: HTMLElement, options: DesignEditorOptions);
|
|
36
|
-
/** 供 Three.js 创建 CanvasTexture
|
|
72
|
+
/** 供 Three.js 创建 CanvasTexture 的纯设计画布,不包含选择框和变换控件 */
|
|
37
73
|
get textureCanvas(): HTMLCanvasElement;
|
|
38
|
-
/**
|
|
74
|
+
/**
|
|
75
|
+
* 在交互画布上显示目标 Mesh 的 UV 可打印区域,但不写入实时纹理或导出图片
|
|
76
|
+
*
|
|
77
|
+
* @param layout 从当前目标 Mesh 提取的 UV 布局
|
|
78
|
+
* @param flipY 是否按照垂直翻转后的纹理方向显示
|
|
79
|
+
*/
|
|
80
|
+
setUvLayout(layout: UvLayout, flipY: boolean): void;
|
|
81
|
+
/** 当前画布中设计对象的数量,不包含产品基础纹理 */
|
|
39
82
|
get objectCount(): number;
|
|
40
83
|
/**
|
|
41
84
|
* 订阅 Fabric Canvas 完成渲染事件
|
|
@@ -47,12 +90,135 @@ export declare class DesignEditor {
|
|
|
47
90
|
/**
|
|
48
91
|
* 订阅画布选中状态变化
|
|
49
92
|
*
|
|
50
|
-
* @param listener
|
|
93
|
+
* @param listener 接收当前选中对象 ID 的函数
|
|
51
94
|
* @returns 用于取消本次订阅的函数
|
|
52
95
|
*/
|
|
53
96
|
onSelectionChange(listener: SelectionListener): () => void;
|
|
54
97
|
/**
|
|
55
|
-
*
|
|
98
|
+
* 订阅撤销与重做可用状态变化
|
|
99
|
+
*
|
|
100
|
+
* @param listener 接收最新历史状态的函数
|
|
101
|
+
* @returns 用于取消本次订阅的函数
|
|
102
|
+
*/
|
|
103
|
+
onHistoryChange(listener: HistoryListener): () => void;
|
|
104
|
+
/** 当前是否存在可以撤销的设计快照 */
|
|
105
|
+
get canUndo(): boolean;
|
|
106
|
+
/** 当前是否存在可以重做的设计快照 */
|
|
107
|
+
get canRedo(): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* 返回当前对象的独立 Design JSON 快照
|
|
110
|
+
*
|
|
111
|
+
* @returns 按画布层级从后到前排列的对象数组
|
|
112
|
+
*/
|
|
113
|
+
getObjects(): DesignObject[];
|
|
114
|
+
/** 返回当前逻辑画布尺寸 */
|
|
115
|
+
getCanvasSize(): DesignCanvasSize;
|
|
116
|
+
/** 返回当前 UV 可打印区域的独立包围框 */
|
|
117
|
+
getPrintableBounds(): CanvasBounds;
|
|
118
|
+
/** 当前选中对象的 ID,按画布层级从后到前排列 */
|
|
119
|
+
getSelectedObjectIds(): string[];
|
|
120
|
+
/**
|
|
121
|
+
* 按稳定 ID 选中一个可见对象
|
|
122
|
+
*
|
|
123
|
+
* @param id Design JSON 中的对象 ID
|
|
124
|
+
* @returns 是否找到并选中了对象
|
|
125
|
+
*/
|
|
126
|
+
selectObject(id: string): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* 按稳定 ID 同时选中多个可见对象
|
|
129
|
+
*
|
|
130
|
+
* 所有 ID 都必须有效且对象可见,否则保持原选区不变
|
|
131
|
+
*
|
|
132
|
+
* @param ids 对象 ID,空数组表示清除选区
|
|
133
|
+
* @returns 是否应用了请求的选区
|
|
134
|
+
*/
|
|
135
|
+
selectObjects(ids: readonly string[]): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* 清除当前画布选区,不修改设计内容或历史记录
|
|
138
|
+
*
|
|
139
|
+
* @returns 清除前是否存在选中对象
|
|
140
|
+
*/
|
|
141
|
+
clearSelection(): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* 按稳定 ID 删除一个对象
|
|
144
|
+
*
|
|
145
|
+
* @param id Design JSON 中的对象 ID
|
|
146
|
+
* @returns 是否找到并删除了对象
|
|
147
|
+
*/
|
|
148
|
+
removeObject(id: string): boolean;
|
|
149
|
+
/**
|
|
150
|
+
* 将对象移动到指定图层索引
|
|
151
|
+
*
|
|
152
|
+
* @param id Design JSON 中的对象 ID
|
|
153
|
+
* @param index 从 0 开始的索引,0 表示最底层
|
|
154
|
+
* @returns 对象层级是否发生变化
|
|
155
|
+
*/
|
|
156
|
+
moveObject(id: string, index: number): boolean;
|
|
157
|
+
/**
|
|
158
|
+
* 将现有图片转换为铺满当前 UV 可打印区域的设计背景
|
|
159
|
+
*
|
|
160
|
+
* 转换会替换已有设计背景、重置旋转、锁定对象并移动到最底层
|
|
161
|
+
*
|
|
162
|
+
* @param id Design JSON 中的图片对象 ID
|
|
163
|
+
* @returns 是否找到普通图片并完成转换
|
|
164
|
+
*/
|
|
165
|
+
setImageAsBackground(id: string): boolean;
|
|
166
|
+
/**
|
|
167
|
+
* 修改对象在图层面板中的名称
|
|
168
|
+
*
|
|
169
|
+
* @param id Design JSON 中的对象 ID
|
|
170
|
+
* @param name 非空图层名称
|
|
171
|
+
* @returns 是否找到并更新了对象
|
|
172
|
+
*/
|
|
173
|
+
renameObject(id: string, name: string): boolean;
|
|
174
|
+
/**
|
|
175
|
+
* 修改对象是否参与渲染
|
|
176
|
+
*
|
|
177
|
+
* @param id Design JSON 中的对象 ID
|
|
178
|
+
* @param visible 是否参与二维画布、三维纹理和 PNG 渲染
|
|
179
|
+
* @returns 是否找到并更新了对象
|
|
180
|
+
*/
|
|
181
|
+
setObjectVisibility(id: string, visible: boolean): boolean;
|
|
182
|
+
/**
|
|
183
|
+
* 修改对象是否允许通过画布控件变换
|
|
184
|
+
*
|
|
185
|
+
* @param id Design JSON 中的对象 ID
|
|
186
|
+
* @param locked 是否锁定移动、缩放、旋转、倾斜和文字编辑
|
|
187
|
+
* @returns 是否找到并更新了对象
|
|
188
|
+
*/
|
|
189
|
+
setObjectLocked(id: string, locked: boolean): boolean;
|
|
190
|
+
/**
|
|
191
|
+
* 更新对象中心位置、缩放、旋转和翻转
|
|
192
|
+
*
|
|
193
|
+
* 对象最终仍会约束在逻辑画布内,连续调用会合并为一个历史步骤
|
|
194
|
+
*
|
|
195
|
+
* @param id Design JSON 中的对象 ID
|
|
196
|
+
* @param options 要更新的变换字段
|
|
197
|
+
* @returns 约束后的对象快照,找不到对象时返回 undefined
|
|
198
|
+
* @throws 数值无效或缩放倍数不大于零时抛出错误
|
|
199
|
+
*/
|
|
200
|
+
updateObjectTransform(id: string, options: UpdateObjectTransformOptions): DesignObject | undefined;
|
|
201
|
+
/**
|
|
202
|
+
* 修改已有文字对象的内容和排版样式
|
|
203
|
+
*
|
|
204
|
+
* 连续调用会在短暂空闲后合并为一个历史步骤
|
|
205
|
+
* 字体必须由消费页面提前加载,否则浏览器会使用回退字体
|
|
206
|
+
*
|
|
207
|
+
* @param id Design JSON 中的对象 ID
|
|
208
|
+
* @param options 要修改的文字属性,未传字段保持不变
|
|
209
|
+
* @returns 是否找到并更新了文字对象
|
|
210
|
+
* @throws 字号、行高、字距、字重或 CSS 颜色不符合约束时抛出错误
|
|
211
|
+
*/
|
|
212
|
+
updateText(id: string, options: UpdateTextOptions): boolean;
|
|
213
|
+
/**
|
|
214
|
+
* 让一个未锁定文字对象进入画布内联编辑状态
|
|
215
|
+
*
|
|
216
|
+
* @param id Design JSON 中的对象 ID
|
|
217
|
+
* @returns 是否找到文字对象并进入编辑状态
|
|
218
|
+
*/
|
|
219
|
+
editText(id: string): boolean;
|
|
220
|
+
/**
|
|
221
|
+
* 设置铺满画布的基础纹理,不传地址时恢复透明背景
|
|
56
222
|
*
|
|
57
223
|
* 背景纹理不参与对象选择,但会包含在实时纹理和 PNG 导出中
|
|
58
224
|
*
|
|
@@ -67,25 +233,26 @@ export declare class DesignEditor {
|
|
|
67
233
|
* 对象过大时会等比缩小,越界时会自动移回画布
|
|
68
234
|
*
|
|
69
235
|
* @param options 文字内容、位置和样式
|
|
70
|
-
* @returns
|
|
236
|
+
* @returns 创建后的可持久化文字对象快照
|
|
71
237
|
*/
|
|
72
|
-
addText(options?: AddTextOptions):
|
|
238
|
+
addText(options?: AddTextOptions): TextDesignObject;
|
|
73
239
|
/**
|
|
74
240
|
* 加载、添加并选中一个图片对象
|
|
75
241
|
*
|
|
242
|
+
* role 为 background 时替换已有设计背景、铺满当前 UV 可打印区域并默认锁定在最底层
|
|
76
243
|
* 图片位置使用画布像素坐标,原点位于图片中心
|
|
77
244
|
* 对象过大时会等比缩小,越界时会自动移回画布
|
|
78
245
|
* 远程图片必须提供正确的 CORS 响应头才能安全导出 PNG
|
|
79
246
|
*
|
|
80
247
|
* @param options 图片地址、中心位置和显示宽度
|
|
81
|
-
* @returns
|
|
248
|
+
* @returns 创建后的可持久化图片对象快照
|
|
82
249
|
* @throws 图片加载失败或被 CORS 策略阻止时抛出错误
|
|
83
250
|
*/
|
|
84
|
-
addImage(options: AddImageOptions): Promise<
|
|
251
|
+
addImage(options: AddImageOptions): Promise<ImageDesignObject>;
|
|
85
252
|
/**
|
|
86
253
|
* 返回与 Fabric.js 无关的当前设计快照
|
|
87
254
|
*
|
|
88
|
-
*
|
|
255
|
+
* 文档包含设计背景等设计对象和逻辑画布尺寸,不包含产品基础纹理或模型配置
|
|
89
256
|
*
|
|
90
257
|
* @returns 可以安全传给 JSON.stringify 的 Design JSON 文档
|
|
91
258
|
* @throws 画布包含不支持的对象或非字符串文字填充时抛出错误
|
|
@@ -100,6 +267,21 @@ export declare class DesignEditor {
|
|
|
100
267
|
* @throws Schema 无效、画布尺寸不匹配或图片无法加载时抛出错误
|
|
101
268
|
*/
|
|
102
269
|
loadDesign(value: unknown): Promise<void>;
|
|
270
|
+
private replaceDesign;
|
|
271
|
+
/**
|
|
272
|
+
* 恢复上一个设计快照
|
|
273
|
+
*
|
|
274
|
+
* @returns 是否成功恢复了一个历史步骤
|
|
275
|
+
*/
|
|
276
|
+
undo(): Promise<boolean>;
|
|
277
|
+
/**
|
|
278
|
+
* 恢复下一个设计快照
|
|
279
|
+
*
|
|
280
|
+
* @returns 是否成功恢复了一个历史步骤
|
|
281
|
+
*/
|
|
282
|
+
redo(): Promise<boolean>;
|
|
283
|
+
/** 以当前设计为起点清空撤销与重做历史 */
|
|
284
|
+
clearHistory(): void;
|
|
103
285
|
/**
|
|
104
286
|
* 删除当前对象或多选选区
|
|
105
287
|
*
|
|
@@ -113,17 +295,45 @@ export declare class DesignEditor {
|
|
|
113
295
|
* @throws 画布被无 CORS 授权的远程图片污染时抛出安全错误
|
|
114
296
|
*/
|
|
115
297
|
exportTexture(filename?: string): void;
|
|
298
|
+
/**
|
|
299
|
+
* 返回不含选择框和 UV 辅助层的 PNG Data URL
|
|
300
|
+
*
|
|
301
|
+
* @returns 与逻辑画布同尺寸的 PNG Data URL
|
|
302
|
+
* @throws 远程图片污染 Canvas 时抛出安全错误
|
|
303
|
+
*/
|
|
304
|
+
getTextureDataUrl(): string;
|
|
305
|
+
/**
|
|
306
|
+
* 异步返回不含选择框和 UV 辅助层的 PNG Blob
|
|
307
|
+
*
|
|
308
|
+
* @returns 与逻辑画布同尺寸的 PNG Blob
|
|
309
|
+
* @throws 远程图片污染 Canvas 或浏览器无法编码时抛出错误
|
|
310
|
+
*/
|
|
311
|
+
getTextureBlob(): Promise<Blob>;
|
|
116
312
|
/** 释放 ResizeObserver、事件监听和 Fabric Canvas */
|
|
117
313
|
destroy(): void;
|
|
118
314
|
private addAndSelect;
|
|
119
315
|
private registerObject;
|
|
316
|
+
private unregisterObject;
|
|
120
317
|
private createObjectId;
|
|
121
318
|
private serializeObject;
|
|
122
319
|
private serializeTransform;
|
|
123
320
|
private createObjectFromDesign;
|
|
124
321
|
private loadImage;
|
|
322
|
+
private createObjectName;
|
|
323
|
+
private applyObjectLock;
|
|
324
|
+
private notifySelectionChange;
|
|
325
|
+
private removeDesignBackgrounds;
|
|
326
|
+
private scheduleHistoryCommit;
|
|
327
|
+
private flushHistoryCommit;
|
|
328
|
+
private commitHistory;
|
|
329
|
+
private notifyHistoryChange;
|
|
125
330
|
private constrainObjectToCanvas;
|
|
126
331
|
private resizeDisplay;
|
|
332
|
+
private applySelection;
|
|
333
|
+
private objectControlAppearance;
|
|
334
|
+
private validateTransformOptions;
|
|
335
|
+
private fitImageToEditableBounds;
|
|
336
|
+
private renderTextureCanvas;
|
|
127
337
|
private markRenderState;
|
|
128
338
|
}
|
|
129
339
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DesignEditor.d.ts","sourceRoot":"","sources":["../../src/editor/DesignEditor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"DesignEditor.d.ts","sourceRoot":"","sources":["../../src/editor/DesignEditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { HistoryState } from '../core/types';
|
|
2
|
+
/** 固定容量的设计快照历史 */
|
|
3
|
+
export declare class DesignHistory<T> {
|
|
4
|
+
private readonly limit;
|
|
5
|
+
private entries;
|
|
6
|
+
private index;
|
|
7
|
+
/**
|
|
8
|
+
* @param initial 初始设计快照
|
|
9
|
+
* @param limit 最多保留的撤销步骤数量
|
|
10
|
+
*/
|
|
11
|
+
constructor(initial: T, limit: number);
|
|
12
|
+
/** 当前撤销与重做可用状态 */
|
|
13
|
+
get state(): HistoryState;
|
|
14
|
+
/** 当前步骤之前的快照 */
|
|
15
|
+
peekUndo(): T | undefined;
|
|
16
|
+
/** 当前步骤之后的快照 */
|
|
17
|
+
peekRedo(): T | undefined;
|
|
18
|
+
/** 添加新快照并丢弃当前步骤之后的重做分支 */
|
|
19
|
+
push(snapshot: T): void;
|
|
20
|
+
/** 在目标快照成功恢复后确认一次撤销 */
|
|
21
|
+
confirmUndo(): void;
|
|
22
|
+
/** 在目标快照成功恢复后确认一次重做 */
|
|
23
|
+
confirmRedo(): void;
|
|
24
|
+
/** 以当前快照重新开始历史记录 */
|
|
25
|
+
reset(snapshot: T): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=DesignHistory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignHistory.d.ts","sourceRoot":"","sources":["../../src/editor/DesignHistory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,kBAAkB;AAClB,qBAAa,aAAa,CAAC,CAAC;IAQF,OAAO,CAAC,QAAQ,CAAC,KAAK;IAP9C,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,KAAK,CAAI;IAEjB;;;OAGG;IACH,YAAY,OAAO,EAAE,CAAC,EAAmB,KAAK,EAAE,MAAM,EAKrD;IAED,kBAAkB;IAClB,IAAI,KAAK,IAAI,YAAY,CAKxB;IAED,gBAAgB;IAChB,QAAQ,IAAI,CAAC,GAAG,SAAS,CAExB;IAED,gBAAgB;IAChB,QAAQ,IAAI,CAAC,GAAG,SAAS,CAExB;IAED,0BAA0B;IAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAOtB;IAED,uBAAuB;IACvB,WAAW,IAAI,IAAI,CAIlB;IAED,uBAAuB;IACvB,WAAW,IAAI,IAAI,CAIlB;IAED,oBAAoB;IACpB,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAGvB;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UvLayout } from '../core/uv';
|
|
2
|
+
import type { ObjectBounds } from './objectBounds';
|
|
3
|
+
/**
|
|
4
|
+
* 将 UV 三角形的坐标范围转换为逻辑画布包围框
|
|
5
|
+
*
|
|
6
|
+
* UV 坐标会限制在 0 到 1 之间;布局为空、无效或退化时回退到整张画布
|
|
7
|
+
*
|
|
8
|
+
* @param layout 当前可打印 Mesh 的 UV 布局
|
|
9
|
+
* @param flipY 是否按照垂直翻转后的纹理方向计算
|
|
10
|
+
* @param canvasWidth 逻辑画布宽度
|
|
11
|
+
* @param canvasHeight 逻辑画布高度
|
|
12
|
+
* @returns 当前 UV 可打印区域在逻辑画布中的轴对齐包围框
|
|
13
|
+
*/
|
|
14
|
+
export declare function calculateUvCanvasBounds(layout: UvLayout, flipY: boolean, canvasWidth: number, canvasHeight: number): ObjectBounds;
|
|
15
|
+
//# sourceMappingURL=uvBounds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uvBounds.d.ts","sourceRoot":"","sources":["../../src/editor/uvBounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAMlD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,YAAY,CAmCd"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import './style.css';
|
|
2
2
|
import { ProductCustomizer } from './customizer/ProductCustomizer';
|
|
3
|
+
import type { ProductCustomizerApi } from './core/api';
|
|
3
4
|
import type { CustomizerOptions } from './core/types';
|
|
4
5
|
/**
|
|
5
6
|
* 创建产品定制器实例并完成模型、编辑器和纹理同步初始化
|
|
@@ -24,7 +25,8 @@ import type { CustomizerOptions } from './core/types';
|
|
|
24
25
|
* })
|
|
25
26
|
* ```
|
|
26
27
|
*/
|
|
27
|
-
export declare function createCustomizer(options: CustomizerOptions): Promise<
|
|
28
|
+
export declare function createCustomizer(options: CustomizerOptions): Promise<ProductCustomizerApi>;
|
|
28
29
|
export { ProductCustomizer };
|
|
29
|
-
export type {
|
|
30
|
+
export type { CustomizerEventListener, ProductCustomizerApi, } from './core/api';
|
|
31
|
+
export type { AddImageOptions, AddTextOptions, CanvasBounds, CustomizerAppearance, CustomizerEventMap, CustomizerEventName, CustomizerOptions, CustomizerState, DesignCanvas, DesignDocument, DesignImageRole, DesignObject, DesignObjectState, DesignObjectTransform, ElementTarget, ImageDesignObject, EditorAppearance, HistoryState, ProductConfiguration, ProductViewState, ResolvedProductConfiguration, TextAlignment, TextDesignObject, TextFontStyle, TextFontWeight, UpdateObjectTransformOptions, UpdateTextOptions, Vector3Value, ViewerAppearance, } from './core/types';
|
|
30
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAC5B,YAAY,EACV,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,4BAA4B,EAC5B,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,4BAA4B,EAC5B,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,cAAc,CAAA"}
|