@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,483 @@
1
+ import type { Component, ComputedRef, InjectionKey, Ref } from 'vue';
2
+ import type { EditorLocale } from './locales/editor-locales';
3
+ export type ProductItem = {
4
+ id?: number | string;
5
+ name?: string;
6
+ description?: string;
7
+ coverImg?: string;
8
+ };
9
+ export type BasicInfo = {
10
+ id?: number | string;
11
+ name?: string;
12
+ description?: string;
13
+ sizes?: string[];
14
+ colors?: string[];
15
+ /** 与 colors 下标对应的中文名(如 basic 接口 colorNamesZh) */
16
+ colorNamesZh?: string[];
17
+ /** 与 colors 下标对应的英文名,常与 colors 相同 */
18
+ colorNamesEn?: string[];
19
+ /** 部分详情接口字段,语义同 colorNamesZh */
20
+ colorsZh?: string[];
21
+ coverImg?: string;
22
+ /** 产品 SKU 编码(如 QYB37) */
23
+ sku?: string;
24
+ };
25
+ export type DiecutResource = {
26
+ groupId?: string;
27
+ groupName?: string;
28
+ fileName?: string;
29
+ url?: string;
30
+ type?: string;
31
+ width?: number;
32
+ height?: number;
33
+ };
34
+ export type DiecutItem = {
35
+ jsonURL?: string | null;
36
+ size?: string;
37
+ type?: string;
38
+ resources?: DiecutResource[] | null;
39
+ sizeMode?: string;
40
+ };
41
+ export type DiecutResponse = {
42
+ msg?: string;
43
+ code?: number;
44
+ data?: DiecutItem[];
45
+ };
46
+ /**
47
+ * 与刀板接口 `data[]` 单项字段一致。
48
+ * 已通过画布加载的模板:`jsonURL` 为解析后的 PSD/Comp JSON 对象;否则仍为接口返回的 URL 字符串。
49
+ */
50
+ export type DiecutStateMapDataItem = {
51
+ jsonURL?: string | Record<string, unknown> | null;
52
+ /** 内联 jsonURL 为对象时保留原模板 URL,供还原进页写入 templateJsonByUrlKey */
53
+ _originalSplitTemplateJsonURL?: string;
54
+ size?: string;
55
+ type?: string;
56
+ resources?: DiecutResource[] | null;
57
+ sizeMode?: string;
58
+ };
59
+ export type DeformationInfo = {
60
+ name?: string;
61
+ jsonURL?: string;
62
+ sort?: number;
63
+ resources?: Array<{
64
+ name?: string;
65
+ url?: string;
66
+ }>;
67
+ };
68
+ export type DeformationGroup = {
69
+ size?: string;
70
+ sizeMode?: string;
71
+ infos?: DeformationInfo[] | null;
72
+ };
73
+ export type DeformationSizeGroup = {
74
+ size?: string;
75
+ sizeMode?: string;
76
+ infos?: DeformationInfo[] | null;
77
+ };
78
+ export type DeformationColorGroup = {
79
+ color?: string;
80
+ sizes?: DeformationSizeGroup[];
81
+ };
82
+ export type DeformationResponse = {
83
+ msg?: string;
84
+ code?: number;
85
+ data?: DeformationGroup[] | DeformationColorGroup[];
86
+ };
87
+ /** 编辑器界面皮肤(与图库筛选 theme 无关) */
88
+ export type EditorUiTheme = 'default' | 'theme1';
89
+ export declare const EDITOR_UI_THEMES: readonly EditorUiTheme[];
90
+ export declare function isEditorUiTheme(value: string): value is EditorUiTheme;
91
+ /** 未设置或省略 `options.uiTheme` 时视为 `theme1`;仅显式 `'default'` 为靛蓝默认主题。 */
92
+ export declare function resolveEditorUiTheme(uiTheme: EditorUiTheme | undefined): EditorUiTheme;
93
+ /** 阶梯价区间(白板详情) */
94
+ export type WhiteboardPriceRangeForCart = {
95
+ unitPrice: number;
96
+ minQuantity: number;
97
+ maxQuantity: number;
98
+ };
99
+ /**
100
+ * 加购弹窗所需白板/产品信息(与常见 getWhiteboardDetail 返回 data 对齐;宿主可传更全字段)。
101
+ */
102
+ export type WhiteboardDetailForCart = {
103
+ whiteboardId: string;
104
+ name: string;
105
+ coverImg?: string | null;
106
+ sizes?: string[] | null;
107
+ colors?: string[] | null;
108
+ colorsZh?: string[] | null;
109
+ colorNamesZh?: string[] | null;
110
+ colorNamesEn?: string[] | null;
111
+ colorValues?: string[] | null;
112
+ priceRanges?: WhiteboardPriceRangeForCart[] | null;
113
+ productNo?: string | null;
114
+ sku?: string;
115
+ };
116
+ export type AddToCartLineItem = {
117
+ size: string;
118
+ quantity: number;
119
+ color?: string;
120
+ };
121
+ export type AddToCartSubmitInput = {
122
+ formData: FormData;
123
+ mode: 'create' | 'edit';
124
+ editMeta?: {
125
+ psTaskId: string;
126
+ whiteboardId: string;
127
+ };
128
+ };
129
+ export type AddToCartSubmitResult = {
130
+ code?: number;
131
+ msg?: string;
132
+ addedCount?: number;
133
+ psTaskCode?: string;
134
+ };
135
+ export type AddToCartFetchDetailResult = {
136
+ ok: true;
137
+ data: WhiteboardDetailForCart;
138
+ } | {
139
+ ok: false;
140
+ msg?: string;
141
+ };
142
+ export type AddToCartSubmitResponse = {
143
+ ok: true;
144
+ result?: AddToCartSubmitResult;
145
+ } | {
146
+ ok: false;
147
+ msg?: string;
148
+ };
149
+ /** 宿主注入:拉白板详情 + 提交 FormData(新建/编辑加车) */
150
+ export type EditorAddToCartAdapter = {
151
+ fetchDetail: (whiteboardId: string) => Promise<AddToCartFetchDetailResult>;
152
+ submit: (input: AddToCartSubmitInput) => Promise<AddToCartSubmitResponse>;
153
+ /** 后台渲染完成后,按颜色类型追加资源图(cover__{colorKey}、design__{colorKey}) */
154
+ appendResources?: (psTaskCode: string, formData: FormData) => Promise<void>;
155
+ };
156
+ export type EditorOptions = {
157
+ showTopbar?: boolean;
158
+ showSidebar?: boolean;
159
+ showPreview?: boolean;
160
+ enableGrid?: boolean;
161
+ usePreviewEffect?: boolean;
162
+ /**
163
+ * 为 true 时,预览区使用常驻 WebGL(Three.js + OrbitControls)展示与 renderByJsonWithThree 一致的合成图,
164
+ * 并跳过右上角 Worker 小图渲染(仍可走大图/下载等路径)。默认 false。
165
+ */
166
+ useLiveWebglPreview?: boolean;
167
+ /** 与 useLiveWebglPreview 配套:主线程 renderByJsonWithThree 内部分辨率边长,默认 640,范围建议 256~1024 */
168
+ liveWebglInternalRenderSize?: number;
169
+ showPreviewDownload?: boolean;
170
+ showImageButton?: boolean;
171
+ /** 为 true 时,顶部「图片」选文件直接加入画布,不调用图库上传(即使已注入 galleryApi) */
172
+ topbarImageSkipGallery?: boolean;
173
+ /**
174
+ * 进入编辑器时左侧栏默认选中的 tab id(须为内置或 customSidebarTabs 中的 id)。
175
+ * 若未设置或 id 无效,则沿用默认:theme1 为 productDetail(无产品列表 Tab);有 galleryApi 时为 gallery;列表模式为 product;否则为 layer。
176
+ */
177
+ initialSidebarTab?: string;
178
+ /** 为 true 时顶栏隐藏颜色/尺码/文字/清空及加车/保存(宿主配合不传回调) */
179
+ readOnly?: boolean;
180
+ /** 为 true 时禁止在 Classic / Zone 模式之间切换,但保留其它编辑能力 */
181
+ lockTemplateModeSwitch?: boolean;
182
+ /**
183
+ * 界面主题:省略时与 `theme1` 相同(粉主色 + 藏青保存);显式 `'default'` 为现有靛蓝/蓝配色。
184
+ */
185
+ uiTheme?: EditorUiTheme;
186
+ /** 为 true 时在顶栏「清空画布」右侧显示界面主题下拉,变更时向宿主 emit `update:uiTheme` */
187
+ showUiThemeSelect?: boolean;
188
+ /**
189
+ * theme1「上传」Tab:用户通过内置 file input 选图后,将 `File` 交给宿主上传;完成后请调用编辑器 `defineExpose` 的 `addImageFromUrl(url)` 加入画布。
190
+ */
191
+ onTheme1UploadLocalFiles?: (file: File) => void | Promise<void>;
192
+ /**
193
+ * 内置加购弹窗:注入 fetchDetail + submit 后,顶栏与 theme1 Mockup「加购」走 SDK 弹窗。
194
+ * 配置后不再调用 props.onAddToCart(由宿主只传 adapter + 成功/失败回调即可)。
195
+ */
196
+ addToCart?: EditorAddToCartAdapter;
197
+ /** 编辑任务流:如有 psTaskId,json 文件名使用 design-${psTaskId};designName 用于弹窗展示已有设计名称 */
198
+ addToCartEditMeta?: {
199
+ psTaskId?: string;
200
+ designName?: string;
201
+ };
202
+ /**
203
+ * 价格展示用货币符号(如 ¥、$、元),由宿主传入。
204
+ * 未设置时内置加购弹窗默认使用 ¥。
205
+ */
206
+ currencySymbol?: string;
207
+ /**
208
+ * 顶栏左侧整块替换为传入组件(与 `#topbar-left` 插槽二选一:插槽优先)。
209
+ * 注入 `EDITOR_TOPBAR_CONTEXT_KEY` 可调用保存/加购等。
210
+ */
211
+ topbarLeftComponent?: Component;
212
+ topbarLeftProps?: Record<string, unknown>;
213
+ /**
214
+ * 顶栏右侧整块替换为传入组件(与 `#topbar-right` 插槽二选一:插槽优先)。
215
+ */
216
+ topbarRightComponent?: Component;
217
+ topbarRightProps?: Record<string, unknown>;
218
+ /**
219
+ * 为 true 时进入实时渲染模式:中间画布区仅显示纯 fabric canvas(无刀板选择/复制等辅助 UI),
220
+ * 右侧预览区替换为 liveRenderComponent(宿主传入的 ThreeRenderViewer 等 3D 实时变形渲染组件)。
221
+ * 默认 false。
222
+ */
223
+ isLiveRender?: boolean;
224
+ /** 实时渲染模式下右侧预览区使用的组件(如 ThreeRenderViewer);需与 isLiveRender 配合使用 */
225
+ liveRenderComponent?: Component;
226
+ /** 传给 liveRenderComponent 的额外 props(fileToken / newDataList / designPic 等由 Editor 内部自动注入) */
227
+ liveRenderComponentProps?: Record<string, unknown>;
228
+ /** 为 true 时隐藏顶栏「实时渲染 / 退出渲染」切换按钮(仍可通过 options.isLiveRender 等控制模式) */
229
+ hideLiveRenderTopbarToggle?: boolean;
230
+ /** 为 false 时隐藏顶栏「快捷键」入口与自定义快捷键 Modal;默认 true */
231
+ showShortcutSettings?: boolean;
232
+ };
233
+ /** getDiecutStateMap() 的返回类型:画布状态 + 当前选中的颜色、尺码、单片/多片模式 + 刀板 data(jsonURL 已解析时内联对象) */
234
+ export type DiecutStateMapResult = {
235
+ stateMap: Record<string, unknown>;
236
+ selectedColor: string;
237
+ selectedSize: string;
238
+ /** theme1 复选:当前勾选的颜色(含 all 占位) */
239
+ selectedColors?: string[];
240
+ /** theme1 复选:当前勾选的尺码(含 all 占位) */
241
+ selectedSizes?: string[];
242
+ /** 当前模板模式:'COMPLETE'(单片)或 'SPLIT'(多片) */
243
+ selectedMode: 'COMPLETE' | 'SPLIT';
244
+ /** fabric 逻辑画布宽度(与导出 JSON 坐标系一致) */
245
+ designCanvasSize: number;
246
+ /** fabric 逻辑画布高度;缺省还原时按 CANVAS_LOGICAL_HEIGHT(2000) 处理 */
247
+ designCanvasHeight?: number;
248
+ /** 当前 SDK 版本号 */
249
+ version: string;
250
+ /** 与 `client/whiteboard/diecut` 响应中的 `data` 字段结构一致 */
251
+ data: DiecutStateMapDataItem[];
252
+ };
253
+ /** 按颜色分组的全部模板渲染结果 */
254
+ export type RenderAllTemplatesByColorGroup = {
255
+ color: string;
256
+ templates: Array<{
257
+ index: number;
258
+ blob: Blob;
259
+ name?: string;
260
+ }>;
261
+ };
262
+ /** 编辑器向内置加购弹窗暴露的能力(由 Editor 内部组装) */
263
+ export type EditorAddToCartEditorBridge = {
264
+ getWhiteboardId: () => string;
265
+ getSelectedColor: () => string;
266
+ getSelectedSize: () => string;
267
+ getSelectedColors?: () => string[];
268
+ getSelectedSizes?: () => string[];
269
+ getSku: () => string;
270
+ getProductName: () => string;
271
+ getDiecutStateMap: () => DiecutStateMapResult;
272
+ renderAllTemplates: () => Promise<Array<{
273
+ index: number;
274
+ bitmap: ImageBitmap | null;
275
+ blob?: Blob | null;
276
+ }>>;
277
+ getCurrentPreviewImageBlob: (opts?: {
278
+ renderSize?: number;
279
+ }) => Promise<Blob | null>;
280
+ getPreviewImageBlobByIndex?: (index: number, opts?: {
281
+ renderSize?: number;
282
+ }) => Promise<Blob | null>;
283
+ collectRenderBundle: () => Promise<import('./utils/renderedImagesDB').RenderBundle>;
284
+ /** 渲染当前尺码下所有颜色的全部模板,按颜色分组(与保存设计后台 renderByJson 一致) */
285
+ renderAllTemplatesByColor?: () => Promise<RenderAllTemplatesByColorGroup[]>;
286
+ setSelectedColor?: (color: string) => void;
287
+ setSelectedSize?: (size: string) => void;
288
+ getColorOptions?: () => string[];
289
+ };
290
+ /** 内置左侧栏 tab id,自定义 tab 的 id 不得与这些冲突 */
291
+ export declare const EDITOR_BUILTIN_SIDEBAR_TAB_IDS: readonly ["add", "addText", "gallery", "layer", "product", "productDetail", "upload"];
292
+ /**
293
+ * 左侧栏扩展 Tab:传入 Vue 组件作为内容区;id 勿与内置 id(含 productDetail、addText、upload)重复。
294
+ */
295
+ export type CustomSidebarTabDef = {
296
+ id: string;
297
+ label: string;
298
+ component: Component;
299
+ props?: Record<string, unknown>;
300
+ iconComponent?: Component;
301
+ };
302
+ /** inject 用:自定义侧栏面板内可获取与画布相关的能力 */
303
+ export type EditorSidebarContext = {
304
+ getDiecutStateMap: () => DiecutStateMapResult;
305
+ /** 按图片 URL 向当前画布添加图片(与图库选图行为一致) */
306
+ addImageFromUrl: (url: string) => void | Promise<void>;
307
+ };
308
+ export declare const EDITOR_SIDEBAR_CONTEXT_KEY: InjectionKey<EditorSidebarContext>;
309
+ /** Topbar / theme1 Mockup 顶栏自定义区 inject:保存、加购与能力位与内置按钮一致 */
310
+ export type EditorTopbarContext = {
311
+ readOnly: ComputedRef<boolean>;
312
+ uiTheme: ComputedRef<EditorUiTheme>;
313
+ locale: Ref<EditorLocale>;
314
+ productName: ComputedRef<string>;
315
+ requestSaveDesign: () => void | Promise<void>;
316
+ requestAddToCart: () => void | Promise<void>;
317
+ /** 进入「全部尺码 / 颜色」分组大图预览(Next) */
318
+ requestNextPreview?: () => void | Promise<void>;
319
+ canSave: ComputedRef<boolean>;
320
+ canAddToCart: ComputedRef<boolean>;
321
+ /** 是否显示 Next(theme1 非只读,有可分组预览的尺码/颜色) */
322
+ canNextPreview?: ComputedRef<boolean>;
323
+ /** 当前是否在 theme1 全屏 Mockup 顶栏内(便于宿主区分样式) */
324
+ isMockup: ComputedRef<boolean>;
325
+ /** 当前是否处于实时渲染模式 */
326
+ isLiveRender: ComputedRef<boolean>;
327
+ /** 切换实时渲染模式 */
328
+ toggleLiveRender: () => void;
329
+ /** 是否支持实时渲染模式(宿主传入了 liveRenderComponent) */
330
+ canLiveRender: ComputedRef<boolean>;
331
+ };
332
+ export declare const EDITOR_TOPBAR_CONTEXT_KEY: InjectionKey<EditorTopbarContext>;
333
+ export type EditorProps = {
334
+ product?: ProductItem | null;
335
+ basicInfo?: BasicInfo | null;
336
+ diecutData?: DiecutResponse | null;
337
+ deformationData?: DeformationResponse | null;
338
+ options?: EditorOptions;
339
+ productListApi?: ProductListApi;
340
+ productDetailApi?: ProductDetailApi;
341
+ productListPageSize?: number;
342
+ productListInitialPage?: number;
343
+ /** 进入页面时默认选中的产品 ID(来自 URL)。仅当该产品在第一页列表中时才选中,否则不选 */
344
+ initialProductId?: string | number;
345
+ fileBaseUrl?: string;
346
+ fileToken?: string | null;
347
+ onObjectModified?: (getDiecutStateMap: () => DiecutStateMapResult) => void;
348
+ onRenderAllTemplates?: (renderMethod: () => Promise<Array<{
349
+ index: number;
350
+ bitmap: ImageBitmap | null;
351
+ }>>) => Promise<Array<{
352
+ index: number;
353
+ bitmap: ImageBitmap | null;
354
+ }> | void>;
355
+ /** 保存设计:传入则在 Topbar 显示按钮,点击时调用 */
356
+ onSaveDesign?: () => void | Promise<void>;
357
+ /** 加入购物车:传入则在 Topbar「保存设计」左侧显示按钮,点击时调用 */
358
+ onAddToCart?: () => void | Promise<void>;
359
+ /** 内置加购成功(如顶栏提示);仅 options.addToCart 生效时由 Editor 调用 */
360
+ onAddToCartSuccess?: (payload?: {
361
+ addedCount?: number;
362
+ psTaskCode?: string;
363
+ }) => void;
364
+ /** 内置加购失败或校验失败;仅 options.addToCart 生效时由 Editor 调用 */
365
+ onAddToCartError?: (msg?: string) => void;
366
+ /** 返回(如上一页):传入则在 Topbar 显示,点击时调用 */
367
+ onGoHome?: () => void;
368
+ /** 首次模板加载完成后调用(用于从 completeJsonUrl 还原设计);可 async,SDK 会 await */
369
+ onTemplateReady?: () => void | Promise<void>;
370
+ /**
371
+ * 界面语言,与主应用一致:zh-CN | en-US | ja-JP | ko-KR | vi-VN;兼容旧值 zh / en。
372
+ * 切换语言时可通过 @update:locale 同步宿主。
373
+ */
374
+ locale?: string;
375
+ /** 覆盖内置文案,key 与 sdk locales 一致 */
376
+ messages?: Record<string, string>;
377
+ /** 左侧栏额外 Tab(竖条 + 内容区由宿主传入 Vue 组件) */
378
+ customSidebarTabs?: CustomSidebarTabDef[];
379
+ };
380
+ export type ProductListResult = {
381
+ rows: ProductItem[];
382
+ total?: number;
383
+ };
384
+ export type ProductListApi = (page: number, pageSize: number) => Promise<ProductListResult>;
385
+ export type ProductDetailResult = {
386
+ basicInfo?: BasicInfo | null;
387
+ diecutData?: DiecutResponse | null;
388
+ deformationData?: DeformationResponse | null;
389
+ };
390
+ export type ProductDetailApi = (productId: number | string) => Promise<ProductDetailResult>;
391
+ export type LicenseConfig = {
392
+ licenseKey: string;
393
+ apiBaseUrl: string;
394
+ timeout?: number;
395
+ enableAutoRefresh?: boolean;
396
+ refreshThreshold?: number;
397
+ onError?: (error: string) => void;
398
+ onSuccess?: () => void;
399
+ onTokenRefresh?: (token: string) => void;
400
+ };
401
+ export interface GalleryMaterialItem {
402
+ id: string;
403
+ parentId: string;
404
+ name: string;
405
+ type: number;
406
+ fileUrl: string | null;
407
+ fileType?: string | null;
408
+ fileSize?: string | null;
409
+ imageWidth?: number | null;
410
+ imageHeight?: number | null;
411
+ createTime?: string;
412
+ children?: GalleryMaterialItem[];
413
+ }
414
+ export interface GalleryFilterOptionsData {
415
+ theme?: Array<{
416
+ label: string;
417
+ value: string;
418
+ }>;
419
+ style?: Array<{
420
+ label: string;
421
+ value: string;
422
+ }>;
423
+ process?: Array<{
424
+ label: string;
425
+ value: string;
426
+ }>;
427
+ designArea?: Array<{
428
+ label: string;
429
+ value: string;
430
+ }>;
431
+ }
432
+ export interface GalleryApi {
433
+ getMaterialTree: () => Promise<{
434
+ data?: {
435
+ code?: number;
436
+ data?: GalleryMaterialItem[];
437
+ };
438
+ }>;
439
+ getMaterialPage: (params: {
440
+ parentId: string | number;
441
+ pageNum: number;
442
+ pageSize: number;
443
+ name?: string;
444
+ orderBy?: 'updateTime_desc' | 'updateTime_asc' | 'fileSize_desc' | 'fileSize_asc';
445
+ }) => Promise<{
446
+ data?: {
447
+ code?: number;
448
+ rows?: GalleryMaterialItem[];
449
+ total?: number;
450
+ };
451
+ }>;
452
+ uploadMaterial: (file: File, parentId: string | number) => Promise<unknown>;
453
+ getPublicTree: () => Promise<{
454
+ data?: {
455
+ code?: number;
456
+ data?: GalleryMaterialItem[];
457
+ };
458
+ }>;
459
+ getFilterOptions: () => Promise<{
460
+ data?: {
461
+ code?: number;
462
+ data?: GalleryFilterOptionsData;
463
+ };
464
+ }>;
465
+ getPublicPage: (params: {
466
+ parentId: string | number;
467
+ pageNum: number;
468
+ pageSize: number;
469
+ name?: string;
470
+ theme?: string;
471
+ style?: string;
472
+ process?: string;
473
+ designArea?: string;
474
+ fileFormat?: string;
475
+ orderBy?: string;
476
+ }) => Promise<{
477
+ data?: {
478
+ code?: number;
479
+ rows?: GalleryMaterialItem[];
480
+ total?: number;
481
+ };
482
+ }>;
483
+ }
@@ -0,0 +1,64 @@
1
+ import { type RenderBundle, type FabricScreenshotBlob } from './renderedImagesDB';
2
+ import { getLicenseInfo } from './license/licenseStore';
3
+ export interface BackgroundRenderJob {
4
+ taskId: string;
5
+ /** 完整渲染数据包(优先使用:后台直接调用 renderByJson 合成) */
6
+ renderBundle?: RenderBundle;
7
+ /** 旧路径:由编辑器实时渲染(renderBundle 不存在时回退) */
8
+ renderAllTemplates?: () => Promise<Array<{
9
+ index: number;
10
+ blob: Blob;
11
+ }>>;
12
+ /** 由调用方提供的图片上传函数,避免 SDK 依赖主项目 API */
13
+ uploadImages?: (taskId: string, images: Array<{
14
+ index: number;
15
+ blob: Blob;
16
+ fileName: string;
17
+ }>) => Promise<void>;
18
+ /** 所有模板渲染完成且 cover 图片上传完成后调用,用于上传 fabricScreenshotList */
19
+ onDesignScreenshotsReady?: (taskId: string, fabricScreenshots: FabricScreenshotBlob[]) => Promise<void>;
20
+ /**
21
+ * 增量上传回调。渲染过程中每产生一批图片就调用一次。
22
+ * - 第1张渲染完成时立即调用(batchIndex=0)
23
+ * - 之后每渲染完成3张调用一次
24
+ * - 最后不满3张的剩余图片也会调用一次
25
+ */
26
+ onBatchReady?: (taskId: string, images: Array<{
27
+ index: number;
28
+ blob: Blob;
29
+ fileName: string;
30
+ }>, batchIndex: number) => Promise<void>;
31
+ designName?: string;
32
+ /** 预先快照的 license(在组件卸载前捕获,避免渲染时 license 已被清除) */
33
+ licenseSnapshot?: ReturnType<typeof getLicenseInfo>;
34
+ /** 渲染+上传完成后回调,用于链式触发其他颜色的渲染 */
35
+ onComplete?: () => Promise<void>;
36
+ /** 图片命名参数,传入后封面图使用 {sku}-{size}-{color}-{designCode}-c-{index}.jpg 格式 */
37
+ imageNaming?: {
38
+ sku: string;
39
+ size: string;
40
+ color: string;
41
+ designCode: string;
42
+ };
43
+ }
44
+ /**
45
+ * 保存成功后立刻写入占位任务(rendering、images: []),再异步 collectRenderBundle。
46
+ * 避免用户先于 collect 进入「我的设计」时 IndexedDB 尚无记录,getRenderTask 为空、列表无法轮询。
47
+ */
48
+ export declare function putRenderTaskPlaceholder(taskId: string): Promise<void>;
49
+ export declare function startBackgroundRender(job: BackgroundRenderJob): Promise<void>;
50
+ /** 将 renderBundle 内所有模板合成为 Blob 列表(不写 IndexedDB,供多颜色同步渲染) */
51
+ export declare function renderBundleToBlobs(bundle: RenderBundle, licenseSnapshot?: ReturnType<typeof getLicenseInfo>): Promise<Array<{
52
+ index: number;
53
+ blob: Blob;
54
+ }>>;
55
+ export declare function resumePendingTasks(renderAllTemplatesFactory?: (taskId: string) => () => Promise<Array<{
56
+ index: number;
57
+ blob: Blob;
58
+ }>>, uploadImages?: BackgroundRenderJob['uploadImages']): Promise<void>;
59
+ export declare function cleanup(): Promise<void>;
60
+ /**
61
+ * 包装 startBackgroundRender,返回一个 Promise,在渲染+上传+onComplete 全部完成后 resolve。
62
+ * 用于多颜色顺序渲染:当前颜色完成后再启动下一个颜色。
63
+ */
64
+ export declare function startBackgroundRenderAsync(job: BackgroundRenderJob): Promise<void>;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 生成固定密钥
3
+ * 使用固定的基础字符串,确保每次生成的密钥都相同
4
+ * 这样加密和解密可以使用相同的密钥
5
+ */
6
+ export declare function generateFixedKey(): string;
7
+ /**
8
+ * 获取加密密钥
9
+ * 优先使用环境变量,如果没有则使用固定密钥
10
+ */
11
+ export declare function getEncryptionKey(): string;
12
+ /**
13
+ * 清理 JSON 数据,确保所有 blob URL 都被替换为 base64
14
+ * @param jsonData - 要处理的 JSON 数据
15
+ * @returns 处理后的 JSON 数据
16
+ */
17
+ export declare function cleanBlobUrls(jsonData: unknown): unknown;
18
+ /**
19
+ * 加密 JSON 数据
20
+ * @param jsonData - 要加密的 JSON 对象
21
+ * @param key - 加密密钥(可选,默认使用固定密钥)
22
+ * @returns 加密后的字符串(Base64 格式)
23
+ */
24
+ export declare function encryptJsonData(jsonData: unknown, key?: string): string;
25
+ /**
26
+ * 解密 JSON 数据
27
+ * @param encryptedData - 加密后的字符串
28
+ * @param key - 解密密钥(可选,默认使用固定密钥)
29
+ * @returns 解密后的 JSON 对象
30
+ */
31
+ export declare function decryptJsonData<T = unknown>(encryptedData: string, key?: string): T;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 环境检测工具
3
+ */
4
+ export declare class Environment {
5
+ /**
6
+ * 是否在浏览器环境
7
+ */
8
+ static isBrowser(): boolean;
9
+ /**
10
+ * 是否在 Worker 环境
11
+ */
12
+ static isWorker(): boolean;
13
+ /**
14
+ * 是否支持 localStorage
15
+ */
16
+ static hasLocalStorage(): boolean;
17
+ /**
18
+ * 是否支持 Canvas
19
+ */
20
+ static hasCanvas(): boolean;
21
+ /**
22
+ * 获取当前域名
23
+ */
24
+ static getDomain(): string;
25
+ /**
26
+ * 获取当前源(origin)
27
+ */
28
+ static getOrigin(): string;
29
+ }
@@ -0,0 +1,27 @@
1
+ export declare enum ErrorLevel {
2
+ INFO = "info",
3
+ WARN = "warn",
4
+ ERROR = "error"
5
+ }
6
+ export interface ErrorOptions {
7
+ level?: ErrorLevel;
8
+ context?: string;
9
+ metadata?: Record<string, any>;
10
+ }
11
+ /**
12
+ * 统一的错误处理工具
13
+ */
14
+ export declare class ErrorHandler {
15
+ /**
16
+ * 处理错误
17
+ */
18
+ static handle(error: any, options?: ErrorOptions): string;
19
+ /**
20
+ * 提取错误信息
21
+ */
22
+ private static extractErrorMessage;
23
+ /**
24
+ * 创建错误对象
25
+ */
26
+ static createError(message: string, originalError?: any): Error;
27
+ }
@@ -0,0 +1,18 @@
1
+ export declare function getFileToken(): string | null;
2
+ export declare function isFileTokenExpired(bufferMs?: number): boolean;
3
+ export declare function clearFileToken(): void;
4
+ type FileTokenFetchers = {
5
+ fetchFileToken: () => Promise<any>;
6
+ fetchFileTokenRefresh?: () => Promise<any>;
7
+ };
8
+ export declare function setFileTokenFetchers(fetchers: FileTokenFetchers | null): void;
9
+ export declare function setExternalFileToken(token: string | null): void;
10
+ export declare function getExternalFileToken(): string | null;
11
+ export declare function getFileTokenFetchers(): FileTokenFetchers | null;
12
+ export declare function ensureFileToken(): Promise<string | null>;
13
+ export declare function appendFileTokenToUrl(url: string, token?: string | null): string;
14
+ export declare function appendFileTokenIfPresent(url: string): string;
15
+ export declare function stripFileTokenParam(url: string): string;
16
+ export declare function withFileToken(url: string): Promise<string>;
17
+ export declare function fetchWithFileToken(url: string, options?: RequestInit): Promise<Response>;
18
+ export {};
@@ -0,0 +1,31 @@
1
+ export interface HttpOptions {
2
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
3
+ headers?: Record<string, string>;
4
+ body?: any;
5
+ timeout?: number;
6
+ }
7
+ export interface HttpResponse<T = any> {
8
+ success: boolean;
9
+ data?: T;
10
+ error?: string;
11
+ }
12
+ /**
13
+ * 统一的 HTTP 请求工具
14
+ */
15
+ export declare class HttpClient {
16
+ baseUrl: string;
17
+ private defaultTimeout;
18
+ constructor(baseUrl: string, timeout?: number);
19
+ /**
20
+ * 发送 HTTP 请求
21
+ */
22
+ request<T = any>(endpoint: string, options?: HttpOptions): Promise<HttpResponse<T>>;
23
+ /**
24
+ * POST 请求
25
+ */
26
+ post<T = any>(endpoint: string, body?: any, options?: Omit<HttpOptions, 'method' | 'body'>): Promise<HttpResponse<T>>;
27
+ /**
28
+ * GET 请求
29
+ */
30
+ get<T = any>(endpoint: string, options?: Omit<HttpOptions, 'method'>): Promise<HttpResponse<T>>;
31
+ }