@pooder/vue 4.2.6 → 4.2.8

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/index.es.js CHANGED
@@ -1,104 +1,89 @@
1
- import { defineComponent as O, ref as M, onMounted as K, onUnmounted as Y, createElementBlock as R, openBlock as X, createElementVNode as Q, provide as Z, createVNode as ee } from "vue";
2
- import { Pooder as te } from "@pooder/core";
1
+ import { defineComponent as O, ref as T, onMounted as j, onUnmounted as N, createElementBlock as P, openBlock as k, createElementVNode as $, provide as q, createVNode as G } from "vue";
2
+ import { Pooder as J } from "@pooder/core";
3
3
  export * from "@pooder/core";
4
- import { CanvasService as ne, SceneLayoutService as ie, SceneVisibilityService as oe, BackgroundTool as ae, SizeTool as re, ImageTool as ce, WhiteInkTool as se, MirrorTool as de, DielineTool as ue, RulerTool as me, FeatureTool as ge } from "@pooder/kit";
4
+ import { CanvasService as K, SceneLayoutService as Q, SceneVisibilityService as Z, BackgroundTool as ee, SizeTool as te, ImageTool as ne, WhiteInkTool as re, MirrorTool as ie, DielineTool as oe, RulerTool as ae, FeatureTool as ce } from "@pooder/kit";
5
5
  export * from "@pooder/kit";
6
- const le = /* @__PURE__ */ O({
6
+ const se = /* @__PURE__ */ O({
7
7
  __name: "CanvasArea",
8
8
  emits: ["canvas-ready", "resize"],
9
- setup(p, { emit: v }) {
10
- const g = v, a = M(null), c = M(null);
11
- let d = null;
12
- return K(() => {
13
- if (a.value && c.value) {
14
- const { clientWidth: f, clientHeight: C } = a.value;
15
- c.value.width = f, c.value.height = C, g("canvas-ready", c.value), d = new ResizeObserver((w) => {
16
- for (const b of w) {
17
- const { width: S, height: x } = b.contentRect;
18
- g("resize", S, x);
9
+ setup(h, { emit: l }) {
10
+ const m = l, r = T(null), i = T(null);
11
+ let o = null;
12
+ return j(() => {
13
+ if (r.value && i.value) {
14
+ const { clientWidth: u, clientHeight: f } = r.value;
15
+ i.value.width = u, i.value.height = f, m("canvas-ready", i.value), o = new ResizeObserver((v) => {
16
+ for (const p of v) {
17
+ const { width: w, height: y } = p.contentRect;
18
+ m("resize", w, y);
19
19
  }
20
- }), d.observe(a.value);
20
+ }), o.observe(r.value);
21
21
  }
22
- }), Y(() => {
23
- d && d.disconnect();
24
- }), (f, C) => (X(), R("div", {
22
+ }), N(() => {
23
+ o && o.disconnect();
24
+ }), (u, f) => (k(), P("div", {
25
25
  ref_key: "container",
26
- ref: a,
26
+ ref: r,
27
27
  class: "pooder-canvas-area"
28
28
  }, [
29
- Q("canvas", {
29
+ $("canvas", {
30
30
  ref_key: "canvas",
31
- ref: c
31
+ ref: i
32
32
  }, null, 512)
33
33
  ], 512));
34
34
  }
35
- }), A = (p, v) => {
36
- const g = p.__vccOpts || p;
37
- for (const [a, c] of v)
38
- g[a] = c;
39
- return g;
40
- }, he = /* @__PURE__ */ A(le, [["__scopeId", "data-v-203ff8d9"]]), fe = { class: "pooder-editor" }, T = "SceneLayoutService", B = "SceneVisibilityService", ve = "image.user", pe = /* @__PURE__ */ O({
35
+ }), R = (h, l) => {
36
+ const m = h.__vccOpts || h;
37
+ for (const [r, i] of l)
38
+ m[r] = i;
39
+ return m;
40
+ }, de = /* @__PURE__ */ R(se, [["__scopeId", "data-v-203ff8d9"]]), me = { class: "pooder-editor" }, F = "SceneLayoutService", B = "SceneVisibilityService", ue = /* @__PURE__ */ O({
41
41
  __name: "PooderEditor",
42
42
  emits: ["image-change"],
43
- setup(p, { expose: v, emit: g }) {
44
- const a = new te();
45
- Z("pooder", a);
46
- const c = a.getService("CommandService"), d = a.getService("ConfigurationService"), f = a.getService("WorkbenchService"), C = g, w = d.onAnyChange((e) => {
47
- e.key === "image.items" && C("image-change", e.value);
48
- }), b = (e) => {
49
- d.import(e);
50
- }, S = () => d.export(), x = () => d.get("image.items", []), k = async (e) => {
43
+ setup(h, { expose: l, emit: m }) {
44
+ const r = new J();
45
+ q("pooder", r);
46
+ const i = r.getService("CommandService"), o = r.getService("ConfigurationService"), u = r.getService("WorkbenchService"), f = m, v = o.onAnyChange((e) => {
47
+ e.key === "image.items" && f("image-change", e.value);
48
+ }), p = (e) => {
49
+ o.import(e);
50
+ }, w = () => o.export(), y = () => o.get("image.items", []), A = async (e) => {
51
51
  try {
52
- const t = await c.executeCommand(
52
+ const t = await i.executeCommand(
53
53
  "exportCutImage",
54
54
  e
55
55
  );
56
56
  return t || console.warn("[PooderEditor] generateCutImage returned null", {
57
57
  options: e,
58
- imageCount: (d.get("image.items") || []).length,
59
- hasCanvasService: !!a.getService("CanvasService")
58
+ imageCount: (o.get("image.items") || []).length,
59
+ hasCanvasService: !!r.getService("CanvasService")
60
60
  }), t;
61
61
  } catch (t) {
62
62
  throw console.error("[PooderEditor] generateCutImage failed", t), t;
63
63
  }
64
- }, _ = async (e, t) => await c.executeCommand("upsertImage", e, {
64
+ }, _ = async (e, t) => await i.executeCommand("upsertImage", e, {
65
65
  id: t?.id,
66
66
  mode: t?.mode,
67
67
  addOptions: t?.addOptions,
68
68
  fitOnAdd: t?.fitOnAdd
69
- }), I = async (e, t) => (await _(e, {
69
+ }), D = async (e, t) => (await _(e, {
70
70
  mode: "add",
71
71
  addOptions: t,
72
72
  fitOnAdd: !0
73
- })).id, W = async (e, t) => await c.executeCommand("updateImage", e, t), z = async () => await c.executeCommand("clearImages"), N = async (e) => await c.executeCommand(
73
+ })).id, U = async (e, t) => await i.executeCommand("updateImage", e, t), z = async () => await i.executeCommand("clearImages"), C = async (e) => await i.executeCommand(
74
74
  "exportUserCroppedImage",
75
75
  e
76
- ), P = async (e, t) => await c.executeCommand("focusImage", e, t), D = (e) => Math.max(-1, Math.min(2, e)), H = (e) => {
77
- const t = e?.cutRect;
78
- if (!t) return null;
79
- const n = Number(t.width), i = Number(t.height), r = Number(t.left), o = Number(t.top);
80
- return !Number.isFinite(n) || !Number.isFinite(i) || !Number.isFinite(r) || !Number.isFinite(o) || n <= 0 || i <= 0 ? null : { left: r, top: o, width: n, height: i };
81
- }, E = (e) => {
82
- if (!e) return [];
83
- const t = e.canvas.getObjects(), n = [];
84
- for (const i of t) {
85
- if (i?.data?.layerId !== ve) continue;
86
- const r = i?.data?.id;
87
- if (typeof r != "string") continue;
88
- const o = i.getCenterPoint ? i.getCenterPoint() : null, s = Number(o?.x ?? i.left), u = Number(o?.y ?? i.top), m = Number(i.scaleX), l = Number(i.width), h = Number(i.height);
89
- !Number.isFinite(s) || !Number.isFinite(u) || !Number.isFinite(m) || !Number.isFinite(l) || !Number.isFinite(h) || l <= 0 || h <= 0 || n.push({
90
- id: r,
91
- centerX: s,
92
- centerY: u,
93
- objectScale: m,
94
- sourceWidth: l,
95
- sourceHeight: h
96
- });
97
- }
98
- return n;
99
- }, y = (e) => {
100
- d.update("dieline.shape", "custom"), d.update("dieline.pathData", e.pathData), d.update("dieline.features", []), d.update("size.cutMode", "trim"), d.update("size.cutMarginMm", 0);
101
- }, j = (e, t) => {
76
+ ), M = async (e, t) => await i.executeCommand("focusImage", e, t), x = (e, t) => {
77
+ o.update("dieline.shape", "custom"), o.update("dieline.pathData", e.pathData);
78
+ const n = Number(e.imageWidth ?? t?.width ?? 0), a = Number(e.imageHeight ?? t?.height ?? 0);
79
+ o.update(
80
+ "dieline.customSourceWidthPx",
81
+ Number.isFinite(n) && n > 0 ? n : void 0
82
+ ), o.update(
83
+ "dieline.customSourceHeightPx",
84
+ Number.isFinite(a) && a > 0 ? a : void 0
85
+ ), o.update("size.cutMode", "trim"), o.update("size.cutMarginMm", 0);
86
+ }, b = (e) => !!e && Number.isFinite(e.x) && Number.isFinite(e.y) && Number.isFinite(e.width) && Number.isFinite(e.height) && e.width > 0 && e.height > 0, E = (e, t) => {
102
87
  const n = e.rawBounds || e.baseBounds || null;
103
88
  if (!n)
104
89
  return {
@@ -110,76 +95,81 @@ const le = /* @__PURE__ */ O({
110
95
  coverageX: 0,
111
96
  coverageY: 0
112
97
  };
113
- const i = t.width / 2, r = t.height / 2, o = n.x + n.width / 2, s = n.y + n.height / 2;
98
+ const a = t.width / 2, c = t.height / 2, s = n.x + n.width / 2, d = n.y + n.height / 2;
114
99
  return {
115
100
  sourceWidth: t.width,
116
101
  sourceHeight: t.height,
117
102
  detectedBounds: n,
118
- centerOffsetX: o - i,
119
- centerOffsetY: s - r,
103
+ centerOffsetX: s - a,
104
+ centerOffsetY: d - c,
120
105
  coverageX: t.width > 0 ? n.width / t.width : 0,
121
106
  coverageY: t.height > 0 ? n.height / t.height : 0
122
107
  };
123
- }, L = (e, t) => {
124
- const n = e.rawBounds || e.baseBounds, i = Number(e.imageWidth ?? 0), r = Number(e.imageHeight ?? 0);
125
- if (!n || !Number.isFinite(n.x) || !Number.isFinite(n.y) || !Number.isFinite(n.width) || !Number.isFinite(n.height) || n.width <= 0 || n.height <= 0 || i <= 0 || r <= 0)
126
- return { shiftX: 0, shiftY: 0 };
127
- const o = t.width / n.width, s = t.height / n.height, u = n.x + n.width / 2, m = n.y + n.height / 2, l = i / 2, h = r / 2;
108
+ }, L = (e) => {
109
+ if (!b(e.rawBounds) || !b(e.baseBounds))
110
+ return null;
111
+ const t = e.rawBounds, n = e.baseBounds;
128
112
  return {
129
- shiftX: (u - l) * o,
130
- shiftY: (m - h) * s
113
+ left: n.x - t.x,
114
+ top: n.y - t.y,
115
+ right: t.x + t.width - (n.x + n.width),
116
+ bottom: t.y + t.height - (n.y + n.height)
131
117
  };
132
- }, F = async (e, t, n = !1, i = "auto") => {
133
- if (!t.length) return;
134
- const r = await c.executeCommand("getSceneLayout"), o = H(r);
135
- if (!o) return;
136
- const { shiftX: s, shiftY: u } = L(e, o);
137
- n && console.info("[PooderEditor] detectDieline alignment", {
138
- frame: o,
139
- shiftX: s,
140
- shiftY: u,
141
- snapshotCount: t.length,
142
- baseBounds: e.baseBounds,
143
- rawBounds: e.rawBounds,
144
- imageWidth: e.imageWidth,
145
- imageHeight: e.imageHeight
146
- });
147
- for (const m of t) {
148
- const l = Math.max(
149
- o.width / Math.max(1, m.sourceWidth),
150
- o.height / Math.max(1, m.sourceHeight)
151
- ), h = Math.max(0.05, m.objectScale / l), q = m.centerX - s, G = m.centerY - u, J = D(
152
- (q - o.left) / Math.max(1, o.width)
153
- ), $ = D(
154
- (G - o.top) / Math.max(1, o.height)
155
- );
156
- await c.executeCommand(
157
- "updateImage",
158
- m.id,
159
- {
160
- scale: h,
161
- left: J,
162
- top: $
163
- },
164
- {
165
- target: i
166
- }
167
- );
118
+ }, V = (e, t, n) => {
119
+ const a = E(e, t), c = L(e), s = c ? {
120
+ left: c.left - n,
121
+ top: c.top - n,
122
+ right: c.right - n,
123
+ bottom: c.bottom - n
124
+ } : null, d = c ? {
125
+ x: c.right - c.left,
126
+ y: c.bottom - c.top
127
+ } : null;
128
+ return {
129
+ frame: a,
130
+ margin: c,
131
+ expectedExpand: n,
132
+ marginDeltaFromExpected: s,
133
+ marginAsymmetry: d
134
+ };
135
+ }, W = async (e, t, n) => {
136
+ if (!e.length) return null;
137
+ const a = await C({
138
+ multiplier: n?.multiplier ?? 2,
139
+ format: n?.format ?? "png",
140
+ imageIds: e
141
+ }), c = a?.url;
142
+ if (!c) return null;
143
+ try {
144
+ const s = await i.executeCommand("detectEdge", c, {
145
+ expand: n?.detect?.expand ?? 0,
146
+ smoothing: n?.detect?.smoothing ?? !0,
147
+ simplifyTolerance: n?.detect?.simplifyTolerance ?? 2,
148
+ threshold: n?.detect?.threshold,
149
+ debug: !1
150
+ });
151
+ return s ? V(
152
+ s,
153
+ a,
154
+ t
155
+ ) : null;
156
+ } finally {
157
+ URL.revokeObjectURL(c);
168
158
  }
169
159
  };
170
- v({
171
- importConfig: b,
172
- exportConfig: S,
173
- getImages: x,
174
- generateCutImage: k,
175
- addImage: I,
160
+ l({
161
+ importConfig: p,
162
+ exportConfig: w,
163
+ getImages: y,
164
+ generateCutImage: A,
165
+ addImage: D,
176
166
  upsertImage: _,
177
- updateImage: W,
167
+ updateImage: U,
178
168
  clearImages: z,
179
- exportUserCroppedImage: N,
180
- focusImage: P,
169
+ exportUserCroppedImage: C,
170
+ focusImage: M,
181
171
  detectDieline: async (e) => {
182
- const t = a.getService("CanvasService"), n = E(t), i = await c.executeCommand("detectEdge", e, {
172
+ const t = await i.executeCommand("detectEdge", e, {
183
173
  expand: 10,
184
174
  // 安全距离(像素)
185
175
  smoothing: !0,
@@ -187,126 +177,121 @@ const le = /* @__PURE__ */ O({
187
177
  simplifyTolerance: 2
188
178
  // 平滑度容差,值越大越圆润
189
179
  });
190
- if (i) {
191
- y(i);
192
- const o = (d.get("image.items") || []).find((s) => s.url === e);
193
- if (o?.id) {
194
- const s = n.filter(
195
- (u) => u.id === o.id
196
- );
197
- await F(i, s);
198
- }
199
- return i.pathData;
200
- }
201
- return null;
180
+ return t ? (x(t), t.pathData) : null;
202
181
  },
203
182
  detectDielineFromFrame: async (e) => {
204
- const t = e?.detect?.debug === !0, n = e?.inspect?.includeCroppedImage === !0, i = e?.inspect?.includeDiagnostics === !0, r = await N({
183
+ const t = e?.detect?.debug === !0, n = e?.inspect?.includeCroppedImage === !0, a = e?.inspect?.includeDiagnostics === !0, c = Math.max(0, Number(e?.detect?.expand ?? 0)), s = await C({
205
184
  multiplier: e?.export?.multiplier ?? 2,
206
185
  format: e?.export?.format ?? "png",
207
186
  imageIds: e?.export?.imageIds
208
- }), o = r?.url;
209
- if (!o) return null;
187
+ }), d = s?.url;
188
+ if (!d)
189
+ return console.warn("[PooderEditor] detectDielineFromFrame no source image"), null;
210
190
  try {
211
- t && console.info("[PooderEditor] detectDielineFromFrame sourceImage", {
212
- width: r.width,
213
- height: r.height,
214
- format: r.format,
215
- multiplier: r.multiplier,
216
- imageCount: r.imageIds.length
217
- });
218
- const s = await c.executeCommand("detectEdge", o, {
191
+ const g = await i.executeCommand("detectEdge", d, {
219
192
  expand: e?.detect?.expand ?? 0,
220
193
  smoothing: e?.detect?.smoothing ?? !0,
221
194
  simplifyTolerance: e?.detect?.simplifyTolerance ?? 2,
222
195
  threshold: e?.detect?.threshold,
223
- morphologyRadius: e?.detect?.morphologyRadius,
224
- connectRadiusMax: e?.detect?.connectRadiusMax,
225
- maskMode: e?.detect?.maskMode,
226
- whiteThreshold: e?.detect?.whiteThreshold,
227
- alphaOpaqueCutoff: e?.detect?.alphaOpaqueCutoff,
228
- noChannels: e?.detect?.noChannels,
229
- componentMode: e?.detect?.componentMode ?? "all",
230
- minComponentArea: e?.detect?.minComponentArea,
231
- forceConnected: e?.detect?.forceConnected ?? !0,
232
196
  debug: t
233
197
  });
234
- if (!s) return null;
235
- const u = j(s, r);
236
- return t && console.info(
237
- "[PooderEditor] detectDielineFromFrame diagnostics",
238
- u
239
- ), e?.commit === !1 ? {
240
- ...s,
241
- ...n ? { sourceImage: r } : {},
242
- ...i ? { diagnostics: u } : {}
243
- } : (y(s), {
244
- ...s,
245
- ...n ? { sourceImage: r } : {},
246
- ...i ? { diagnostics: u } : {}
247
- });
198
+ if (!g)
199
+ return console.warn(
200
+ "[PooderEditor] detectDielineFromFrame detectEdge returned null"
201
+ ), null;
202
+ const I = E(g, s);
203
+ if (e?.commit === !1)
204
+ return {
205
+ ...g,
206
+ ...n ? { sourceImage: s } : {},
207
+ ...a ? { diagnostics: I } : {}
208
+ };
209
+ x(g, s);
210
+ const X = {
211
+ multiplier: e?.export?.multiplier ?? 2,
212
+ format: e?.export?.format ?? "png",
213
+ detect: {
214
+ expand: e?.detect?.expand ?? 0,
215
+ smoothing: e?.detect?.smoothing ?? !0,
216
+ simplifyTolerance: e?.detect?.simplifyTolerance ?? 2,
217
+ threshold: e?.detect?.threshold
218
+ }
219
+ };
220
+ let S = await W(
221
+ s.imageIds,
222
+ c,
223
+ X
224
+ );
225
+ return S ? console.info(
226
+ "[PooderEditor] detectDielineFromFrame post-commit diagnostics",
227
+ S
228
+ ) : s.imageIds.length > 0 && console.warn(
229
+ "[PooderEditor] detectDielineFromFrame post-commit detectEdge returned null"
230
+ ), {
231
+ ...g,
232
+ ...n ? { sourceImage: s } : {},
233
+ ...a ? { diagnostics: I, postCommitDiagnostics: S } : {}
234
+ };
248
235
  } finally {
249
- o && !n && URL.revokeObjectURL(o);
236
+ d && !n && URL.revokeObjectURL(d);
250
237
  }
251
238
  },
252
239
  uploadAndDetectEdge: async (e, t) => {
253
- const n = a.getService("CanvasService"), i = await I(e), r = E(n).filter(
254
- (s) => s.id === i
255
- ), o = await c.executeCommand("detectEdge", e, {
240
+ const n = await D(e), a = await i.executeCommand("detectEdge", e, {
256
241
  expand: t?.expand ?? 10,
257
242
  smoothing: t?.smoothing ?? !0,
258
243
  simplifyTolerance: t?.simplifyTolerance ?? 2
259
244
  });
260
- return o ? (y(o), await F(o, r), { imageId: i, url: e, pathData: o.pathData }) : null;
245
+ return a ? (x(a), { imageId: n, url: e, pathData: a.pathData }) : null;
261
246
  },
262
- activateTool: async (e) => await f.switchTool(e),
263
- deactivateTool: async () => await f.deactivate(),
264
- on: (e, t) => a.eventBus.on(e, t),
265
- off: (e, t) => a.eventBus.off(e, t),
266
- emit: (e, t) => a.eventBus.emit(e, t),
267
- executeCommand: (e, ...t) => c.executeCommand(e, ...t),
268
- getConfig: (e) => d.get(e),
269
- updateConfig: (e, t) => d.update(e, t),
247
+ activateTool: async (e) => await u.switchTool(e),
248
+ deactivateTool: async () => await u.deactivate(),
249
+ on: (e, t) => r.eventBus.on(e, t),
250
+ off: (e, t) => r.eventBus.off(e, t),
251
+ emit: (e, t) => r.eventBus.emit(e, t),
252
+ executeCommand: (e, ...t) => i.executeCommand(e, ...t),
253
+ getConfig: (e) => o.get(e),
254
+ updateConfig: (e, t) => o.update(e, t),
270
255
  services: {
271
- workbench: f,
272
- command: c,
273
- config: d
256
+ workbench: u,
257
+ command: i,
258
+ config: o
274
259
  }
275
260
  });
276
- const U = (e) => {
277
- const t = new ne(e, {
278
- eventBus: a.eventBus
261
+ const Y = (e) => {
262
+ const t = new K(e, {
263
+ eventBus: r.eventBus
279
264
  });
280
- a.registerService(t, "CanvasService"), a.registerService(new ie(), T), a.registerService(
281
- new oe(),
265
+ r.registerService(t, "CanvasService"), r.registerService(new Q(), F), r.registerService(
266
+ new Z(),
282
267
  B
283
268
  ), [
284
- new ae(),
285
- new re(),
286
- new ce(),
269
+ new ee(),
270
+ new te(),
271
+ new ne(),
287
272
  // new FilmTool(),
288
- new se(),
289
- new de(),
290
- new ue(),
291
- new me(),
292
- new ge()
293
- ].forEach((i) => {
294
- a.extensionManager.register(i);
273
+ new re(),
274
+ new ie(),
275
+ new oe(),
276
+ new ae(),
277
+ new ce()
278
+ ].forEach((a) => {
279
+ r.extensionManager.register(a);
295
280
  });
296
- }, V = (e, t) => {
297
- const n = a.getService("CanvasService");
281
+ }, H = (e, t) => {
282
+ const n = r.getService("CanvasService");
298
283
  n && n.resize(e, t);
299
284
  };
300
- return Y(() => {
301
- w.dispose(), a.extensionManager.destroy(), a.unregisterService(B), a.unregisterService(T), a.unregisterService("CanvasService");
302
- }), (e, t) => (X(), R("div", fe, [
303
- ee(he, {
304
- onCanvasReady: U,
305
- onResize: V
285
+ return N(() => {
286
+ v.dispose(), r.extensionManager.destroy(), r.unregisterService(B), r.unregisterService(F), r.unregisterService("CanvasService");
287
+ }), (e, t) => (k(), P("div", me, [
288
+ G(de, {
289
+ onCanvasReady: Y,
290
+ onResize: H
306
291
  })
307
292
  ]));
308
293
  }
309
- }), _e = /* @__PURE__ */ A(pe, [["__scopeId", "data-v-2149abdf"]]);
294
+ }), we = /* @__PURE__ */ R(ue, [["__scopeId", "data-v-53ea55ea"]]);
310
295
  export {
311
- _e as PooderEditor
296
+ we as PooderEditor
312
297
  };
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(l,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("vue"),require("@pooder/core"),require("@pooder/kit")):typeof define=="function"&&define.amd?define(["exports","vue","@pooder/core","@pooder/kit"],u):(l=typeof globalThis<"u"?globalThis:l||self,u(l.PooderVue={},l.Vue,l.PooderCore,l.PooderKit))})(this,(function(l,u,S,h){"use strict";const j=u.defineComponent({__name:"CanvasArea",emits:["canvas-ready","resize"],setup(m,{emit:b}){const p=b,r=u.ref(null),c=u.ref(null);let d=null;return u.onMounted(()=>{if(r.value&&c.value){const{clientWidth:w,clientHeight:y}=r.value;c.value.width=w,c.value.height=y,p("canvas-ready",c.value),d=new ResizeObserver(x=>{for(const _ of x){const{width:I,height:E}=_.contentRect;p("resize",I,E)}}),d.observe(r.value)}}),u.onUnmounted(()=>{d&&d.disconnect()}),(w,y)=>(u.openBlock(),u.createElementBlock("div",{ref_key:"container",ref:r,class:"pooder-canvas-area"},[u.createElementVNode("canvas",{ref_key:"canvas",ref:c},null,512)],512))}}),D=(m,b)=>{const p=m.__vccOpts||m;for(const[r,c]of b)p[r]=c;return p},X=D(j,[["__scopeId","data-v-203ff8d9"]]),A={class:"pooder-editor"},O="SceneLayoutService",F="SceneVisibilityService",W="image.user",z=D(u.defineComponent({__name:"PooderEditor",emits:["image-change"],setup(m,{expose:b,emit:p}){const r=new S.Pooder;u.provide("pooder",r);const c=r.getService("CommandService"),d=r.getService("ConfigurationService"),w=r.getService("WorkbenchService"),y=p,x=d.onAnyChange(e=>{e.key==="image.items"&&y("image-change",e.value)}),_=e=>{d.import(e)},I=()=>d.export(),E=()=>d.get("image.items",[]),H=async e=>{try{const t=await c.executeCommand("exportCutImage",e);return t||console.warn("[PooderEditor] generateCutImage returned null",{options:e,imageCount:(d.get("image.items")||[]).length,hasCanvasService:!!r.getService("CanvasService")}),t}catch(t){throw console.error("[PooderEditor] generateCutImage failed",t),t}},T=async(e,t)=>await c.executeCommand("upsertImage",e,{id:t?.id,mode:t?.mode,addOptions:t?.addOptions,fitOnAdd:t?.fitOnAdd}),M=async(e,t)=>(await T(e,{mode:"add",addOptions:t,fitOnAdd:!0})).id,V=async(e,t)=>await c.executeCommand("updateImage",e,t),L=async()=>await c.executeCommand("clearImages"),B=async e=>await c.executeCommand("exportUserCroppedImage",e),U=async(e,t)=>await c.executeCommand("focusImage",e,t),P=e=>Math.max(-1,Math.min(2,e)),q=e=>{const t=e?.cutRect;if(!t)return null;const n=Number(t.width),o=Number(t.height),a=Number(t.left),i=Number(t.top);return!Number.isFinite(n)||!Number.isFinite(o)||!Number.isFinite(a)||!Number.isFinite(i)||n<=0||o<=0?null:{left:a,top:i,width:n,height:o}},Y=e=>{if(!e)return[];const t=e.canvas.getObjects(),n=[];for(const o of t){if(o?.data?.layerId!==W)continue;const a=o?.data?.id;if(typeof a!="string")continue;const i=o.getCenterPoint?o.getCenterPoint():null,s=Number(i?.x??o.left),g=Number(i?.y??o.top),f=Number(o.scaleX),v=Number(o.width),C=Number(o.height);!Number.isFinite(s)||!Number.isFinite(g)||!Number.isFinite(f)||!Number.isFinite(v)||!Number.isFinite(C)||v<=0||C<=0||n.push({id:a,centerX:s,centerY:g,objectScale:f,sourceWidth:v,sourceHeight:C})}return n},N=e=>{d.update("dieline.shape","custom"),d.update("dieline.pathData",e.pathData),d.update("dieline.features",[]),d.update("size.cutMode","trim"),d.update("size.cutMarginMm",0)},k=(e,t)=>{const n=e.rawBounds||e.baseBounds||null;if(!n)return{sourceWidth:t.width,sourceHeight:t.height,detectedBounds:null,centerOffsetX:0,centerOffsetY:0,coverageX:0,coverageY:0};const o=t.width/2,a=t.height/2,i=n.x+n.width/2,s=n.y+n.height/2;return{sourceWidth:t.width,sourceHeight:t.height,detectedBounds:n,centerOffsetX:i-o,centerOffsetY:s-a,coverageX:t.width>0?n.width/t.width:0,coverageY:t.height>0?n.height/t.height:0}},G=(e,t)=>{const n=e.rawBounds||e.baseBounds,o=Number(e.imageWidth??0),a=Number(e.imageHeight??0);if(!n||!Number.isFinite(n.x)||!Number.isFinite(n.y)||!Number.isFinite(n.width)||!Number.isFinite(n.height)||n.width<=0||n.height<=0||o<=0||a<=0)return{shiftX:0,shiftY:0};const i=t.width/n.width,s=t.height/n.height,g=n.x+n.width/2,f=n.y+n.height/2,v=o/2,C=a/2;return{shiftX:(g-v)*i,shiftY:(f-C)*s}},R=async(e,t,n=!1,o="auto")=>{if(!t.length)return;const a=await c.executeCommand("getSceneLayout"),i=q(a);if(!i)return;const{shiftX:s,shiftY:g}=G(e,i);n&&console.info("[PooderEditor] detectDieline alignment",{frame:i,shiftX:s,shiftY:g,snapshotCount:t.length,baseBounds:e.baseBounds,rawBounds:e.rawBounds,imageWidth:e.imageWidth,imageHeight:e.imageHeight});for(const f of t){const v=Math.max(i.width/Math.max(1,f.sourceWidth),i.height/Math.max(1,f.sourceHeight)),C=Math.max(.05,f.objectScale/v),$=f.centerX-s,Q=f.centerY-g,Z=P(($-i.left)/Math.max(1,i.width)),ee=P((Q-i.top)/Math.max(1,i.height));await c.executeCommand("updateImage",f.id,{scale:C,left:Z,top:ee},{target:o})}};b({importConfig:_,exportConfig:I,getImages:E,generateCutImage:H,addImage:M,upsertImage:T,updateImage:V,clearImages:L,exportUserCroppedImage:B,focusImage:U,detectDieline:async e=>{const t=r.getService("CanvasService"),n=Y(t),o=await c.executeCommand("detectEdge",e,{expand:10,smoothing:!0,simplifyTolerance:2});if(o){N(o);const i=(d.get("image.items")||[]).find(s=>s.url===e);if(i?.id){const s=n.filter(g=>g.id===i.id);await R(o,s)}return o.pathData}return null},detectDielineFromFrame:async e=>{const t=e?.detect?.debug===!0,n=e?.inspect?.includeCroppedImage===!0,o=e?.inspect?.includeDiagnostics===!0,a=await B({multiplier:e?.export?.multiplier??2,format:e?.export?.format??"png",imageIds:e?.export?.imageIds}),i=a?.url;if(!i)return null;try{t&&console.info("[PooderEditor] detectDielineFromFrame sourceImage",{width:a.width,height:a.height,format:a.format,multiplier:a.multiplier,imageCount:a.imageIds.length});const s=await c.executeCommand("detectEdge",i,{expand:e?.detect?.expand??0,smoothing:e?.detect?.smoothing??!0,simplifyTolerance:e?.detect?.simplifyTolerance??2,threshold:e?.detect?.threshold,morphologyRadius:e?.detect?.morphologyRadius,connectRadiusMax:e?.detect?.connectRadiusMax,maskMode:e?.detect?.maskMode,whiteThreshold:e?.detect?.whiteThreshold,alphaOpaqueCutoff:e?.detect?.alphaOpaqueCutoff,noChannels:e?.detect?.noChannels,componentMode:e?.detect?.componentMode??"all",minComponentArea:e?.detect?.minComponentArea,forceConnected:e?.detect?.forceConnected??!0,debug:t});if(!s)return null;const g=k(s,a);return t&&console.info("[PooderEditor] detectDielineFromFrame diagnostics",g),e?.commit===!1?{...s,...n?{sourceImage:a}:{},...o?{diagnostics:g}:{}}:(N(s),{...s,...n?{sourceImage:a}:{},...o?{diagnostics:g}:{}})}finally{i&&!n&&URL.revokeObjectURL(i)}},uploadAndDetectEdge:async(e,t)=>{const n=r.getService("CanvasService"),o=await M(e),a=Y(n).filter(s=>s.id===o),i=await c.executeCommand("detectEdge",e,{expand:t?.expand??10,smoothing:t?.smoothing??!0,simplifyTolerance:t?.simplifyTolerance??2});return i?(N(i),await R(i,a),{imageId:o,url:e,pathData:i.pathData}):null},activateTool:async e=>await w.switchTool(e),deactivateTool:async()=>await w.deactivate(),on:(e,t)=>r.eventBus.on(e,t),off:(e,t)=>r.eventBus.off(e,t),emit:(e,t)=>r.eventBus.emit(e,t),executeCommand:(e,...t)=>c.executeCommand(e,...t),getConfig:e=>d.get(e),updateConfig:(e,t)=>d.update(e,t),services:{workbench:w,command:c,config:d}});const J=e=>{const t=new h.CanvasService(e,{eventBus:r.eventBus});r.registerService(t,"CanvasService"),r.registerService(new h.SceneLayoutService,O),r.registerService(new h.SceneVisibilityService,F),[new h.BackgroundTool,new h.SizeTool,new h.ImageTool,new h.WhiteInkTool,new h.MirrorTool,new h.DielineTool,new h.RulerTool,new h.FeatureTool].forEach(o=>{r.extensionManager.register(o)})},K=(e,t)=>{const n=r.getService("CanvasService");n&&n.resize(e,t)};return u.onUnmounted(()=>{x.dispose(),r.extensionManager.destroy(),r.unregisterService(F),r.unregisterService(O),r.unregisterService("CanvasService")}),(e,t)=>(u.openBlock(),u.createElementBlock("div",A,[u.createVNode(X,{onCanvasReady:J,onResize:K})]))}}),[["__scopeId","data-v-2149abdf"]]);l.PooderEditor=z,Object.keys(S).forEach(m=>{m!=="default"&&!Object.prototype.hasOwnProperty.call(l,m)&&Object.defineProperty(l,m,{enumerable:!0,get:()=>S[m]})}),Object.keys(h).forEach(m=>{m!=="default"&&!Object.prototype.hasOwnProperty.call(l,m)&&Object.defineProperty(l,m,{enumerable:!0,get:()=>h[m]})}),Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(l,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("vue"),require("@pooder/core"),require("@pooder/kit")):typeof define=="function"&&define.amd?define(["exports","vue","@pooder/core","@pooder/kit"],s):(l=typeof globalThis<"u"?globalThis:l||self,s(l.PooderVue={},l.Vue,l.PooderCore,l.PooderKit))})(this,(function(l,s,w,m){"use strict";const U=s.defineComponent({__name:"CanvasArea",emits:["canvas-ready","resize"],setup(d,{emit:p}){const f=p,r=s.ref(null),o=s.ref(null);let i=null;return s.onMounted(()=>{if(r.value&&o.value){const{clientWidth:h,clientHeight:y}=r.value;o.value.width=h,o.value.height=y,f("canvas-ready",o.value),i=new ResizeObserver(C=>{for(const S of C){const{width:x,height:b}=S.contentRect;f("resize",x,b)}}),i.observe(r.value)}}),s.onUnmounted(()=>{i&&i.disconnect()}),(h,y)=>(s.openBlock(),s.createElementBlock("div",{ref_key:"container",ref:r,class:"pooder-canvas-area"},[s.createElementVNode("canvas",{ref_key:"canvas",ref:o},null,512)],512))}}),O=(d,p)=>{const f=d.__vccOpts||d;for(const[r,o]of p)f[r]=o;return f},j=O(U,[["__scopeId","data-v-203ff8d9"]]),A={class:"pooder-editor"},I="SceneLayoutService",T="SceneVisibilityService",M=O(s.defineComponent({__name:"PooderEditor",emits:["image-change"],setup(d,{expose:p,emit:f}){const r=new w.Pooder;s.provide("pooder",r);const o=r.getService("CommandService"),i=r.getService("ConfigurationService"),h=r.getService("WorkbenchService"),y=f,C=i.onAnyChange(e=>{e.key==="image.items"&&y("image-change",e.value)}),S=e=>{i.import(e)},x=()=>i.export(),b=()=>i.get("image.items",[]),V=async e=>{try{const t=await o.executeCommand("exportCutImage",e);return t||console.warn("[PooderEditor] generateCutImage returned null",{options:e,imageCount:(i.get("image.items")||[]).length,hasCanvasService:!!r.getService("CanvasService")}),t}catch(t){throw console.error("[PooderEditor] generateCutImage failed",t),t}},P=async(e,t)=>await o.executeCommand("upsertImage",e,{id:t?.id,mode:t?.mode,addOptions:t?.addOptions,fitOnAdd:t?.fitOnAdd}),F=async(e,t)=>(await P(e,{mode:"add",addOptions:t,fitOnAdd:!0})).id,z=async(e,t)=>await o.executeCommand("updateImage",e,t),L=async()=>await o.executeCommand("clearImages"),_=async e=>await o.executeCommand("exportUserCroppedImage",e),W=async(e,t)=>await o.executeCommand("focusImage",e,t),D=(e,t)=>{i.update("dieline.shape","custom"),i.update("dieline.pathData",e.pathData);const n=Number(e.imageWidth??t?.width??0),c=Number(e.imageHeight??t?.height??0);i.update("dieline.customSourceWidthPx",Number.isFinite(n)&&n>0?n:void 0),i.update("dieline.customSourceHeightPx",Number.isFinite(c)&&c>0?c:void 0),i.update("size.cutMode","trim"),i.update("size.cutMarginMm",0)},B=e=>!!e&&Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.width)&&Number.isFinite(e.height)&&e.width>0&&e.height>0,N=(e,t)=>{const n=e.rawBounds||e.baseBounds||null;if(!n)return{sourceWidth:t.width,sourceHeight:t.height,detectedBounds:null,centerOffsetX:0,centerOffsetY:0,coverageX:0,coverageY:0};const c=t.width/2,a=t.height/2,u=n.x+n.width/2,g=n.y+n.height/2;return{sourceWidth:t.width,sourceHeight:t.height,detectedBounds:n,centerOffsetX:u-c,centerOffsetY:g-a,coverageX:t.width>0?n.width/t.width:0,coverageY:t.height>0?n.height/t.height:0}},Y=e=>{if(!B(e.rawBounds)||!B(e.baseBounds))return null;const t=e.rawBounds,n=e.baseBounds;return{left:n.x-t.x,top:n.y-t.y,right:t.x+t.width-(n.x+n.width),bottom:t.y+t.height-(n.y+n.height)}},H=(e,t,n)=>{const c=N(e,t),a=Y(e),u=a?{left:a.left-n,top:a.top-n,right:a.right-n,bottom:a.bottom-n}:null,g=a?{x:a.right-a.left,y:a.bottom-a.top}:null;return{frame:c,margin:a,expectedExpand:n,marginDeltaFromExpected:u,marginAsymmetry:g}},X=async(e,t,n)=>{if(!e.length)return null;const c=await _({multiplier:n?.multiplier??2,format:n?.format??"png",imageIds:e}),a=c?.url;if(!a)return null;try{const u=await o.executeCommand("detectEdge",a,{expand:n?.detect?.expand??0,smoothing:n?.detect?.smoothing??!0,simplifyTolerance:n?.detect?.simplifyTolerance??2,threshold:n?.detect?.threshold,debug:!1});return u?H(u,c,t):null}finally{URL.revokeObjectURL(a)}};p({importConfig:S,exportConfig:x,getImages:b,generateCutImage:V,addImage:F,upsertImage:P,updateImage:z,clearImages:L,exportUserCroppedImage:_,focusImage:W,detectDieline:async e=>{const t=await o.executeCommand("detectEdge",e,{expand:10,smoothing:!0,simplifyTolerance:2});return t?(D(t),t.pathData):null},detectDielineFromFrame:async e=>{const t=e?.detect?.debug===!0,n=e?.inspect?.includeCroppedImage===!0,c=e?.inspect?.includeDiagnostics===!0,a=Math.max(0,Number(e?.detect?.expand??0)),u=await _({multiplier:e?.export?.multiplier??2,format:e?.export?.format??"png",imageIds:e?.export?.imageIds}),g=u?.url;if(!g)return console.warn("[PooderEditor] detectDielineFromFrame no source image"),null;try{const v=await o.executeCommand("detectEdge",g,{expand:e?.detect?.expand??0,smoothing:e?.detect?.smoothing??!0,simplifyTolerance:e?.detect?.simplifyTolerance??2,threshold:e?.detect?.threshold,debug:t});if(!v)return console.warn("[PooderEditor] detectDielineFromFrame detectEdge returned null"),null;const R=N(v,u);if(e?.commit===!1)return{...v,...n?{sourceImage:u}:{},...c?{diagnostics:R}:{}};D(v,u);const $={multiplier:e?.export?.multiplier??2,format:e?.export?.format??"png",detect:{expand:e?.detect?.expand??0,smoothing:e?.detect?.smoothing??!0,simplifyTolerance:e?.detect?.simplifyTolerance??2,threshold:e?.detect?.threshold}};let E=await X(u.imageIds,a,$);return E?console.info("[PooderEditor] detectDielineFromFrame post-commit diagnostics",E):u.imageIds.length>0&&console.warn("[PooderEditor] detectDielineFromFrame post-commit detectEdge returned null"),{...v,...n?{sourceImage:u}:{},...c?{diagnostics:R,postCommitDiagnostics:E}:{}}}finally{g&&!n&&URL.revokeObjectURL(g)}},uploadAndDetectEdge:async(e,t)=>{const n=await F(e),c=await o.executeCommand("detectEdge",e,{expand:t?.expand??10,smoothing:t?.smoothing??!0,simplifyTolerance:t?.simplifyTolerance??2});return c?(D(c),{imageId:n,url:e,pathData:c.pathData}):null},activateTool:async e=>await h.switchTool(e),deactivateTool:async()=>await h.deactivate(),on:(e,t)=>r.eventBus.on(e,t),off:(e,t)=>r.eventBus.off(e,t),emit:(e,t)=>r.eventBus.emit(e,t),executeCommand:(e,...t)=>o.executeCommand(e,...t),getConfig:e=>i.get(e),updateConfig:(e,t)=>i.update(e,t),services:{workbench:h,command:o,config:i}});const q=e=>{const t=new m.CanvasService(e,{eventBus:r.eventBus});r.registerService(t,"CanvasService"),r.registerService(new m.SceneLayoutService,I),r.registerService(new m.SceneVisibilityService,T),[new m.BackgroundTool,new m.SizeTool,new m.ImageTool,new m.WhiteInkTool,new m.MirrorTool,new m.DielineTool,new m.RulerTool,new m.FeatureTool].forEach(c=>{r.extensionManager.register(c)})},K=(e,t)=>{const n=r.getService("CanvasService");n&&n.resize(e,t)};return s.onUnmounted(()=>{C.dispose(),r.extensionManager.destroy(),r.unregisterService(T),r.unregisterService(I),r.unregisterService("CanvasService")}),(e,t)=>(s.openBlock(),s.createElementBlock("div",A,[s.createVNode(j,{onCanvasReady:q,onResize:K})]))}}),[["__scopeId","data-v-53ea55ea"]]);l.PooderEditor=M,Object.keys(w).forEach(d=>{d!=="default"&&!Object.prototype.hasOwnProperty.call(l,d)&&Object.defineProperty(l,d,{enumerable:!0,get:()=>w[d]})}),Object.keys(m).forEach(d=>{d!=="default"&&!Object.prototype.hasOwnProperty.call(l,d)&&Object.defineProperty(l,d,{enumerable:!0,get:()=>m[d]})}),Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})}));
@@ -14,6 +14,22 @@ interface DetectFrameDiagnostics {
14
14
  coverageX: number;
15
15
  coverageY: number;
16
16
  }
17
+ interface DetectMarginDiagnostics {
18
+ left: number;
19
+ top: number;
20
+ right: number;
21
+ bottom: number;
22
+ }
23
+ interface DetectPostCommitDiagnostics {
24
+ frame: DetectFrameDiagnostics;
25
+ margin: DetectMarginDiagnostics | null;
26
+ expectedExpand: number;
27
+ marginDeltaFromExpected: DetectMarginDiagnostics | null;
28
+ marginAsymmetry: {
29
+ x: number;
30
+ y: number;
31
+ } | null;
32
+ }
17
33
  interface ExportUserCroppedImageResult {
18
34
  url: string;
19
35
  width: number;
@@ -53,15 +69,6 @@ declare const _default: import('vue').DefineComponent<{}, {
53
69
  smoothing?: boolean;
54
70
  simplifyTolerance?: number;
55
71
  threshold?: number;
56
- morphologyRadius?: number;
57
- connectRadiusMax?: number;
58
- maskMode?: "auto" | "alpha" | "whitebg";
59
- whiteThreshold?: number;
60
- alphaOpaqueCutoff?: number;
61
- noChannels?: boolean;
62
- componentMode?: "largest" | "all";
63
- minComponentArea?: number;
64
- forceConnected?: boolean;
65
72
  debug?: boolean;
66
73
  };
67
74
  export?: {
@@ -76,6 +83,7 @@ declare const _default: import('vue').DefineComponent<{}, {
76
83
  commit?: boolean;
77
84
  }) => Promise<{
78
85
  diagnostics?: DetectFrameDiagnostics | undefined;
86
+ postCommitDiagnostics?: DetectPostCommitDiagnostics | null | undefined;
79
87
  sourceImage?: ExportUserCroppedImageResult | undefined;
80
88
  pathData: string;
81
89
  rawBounds?: DetectBounds;
@@ -92,8 +100,8 @@ declare const _default: import('vue').DefineComponent<{}, {
92
100
  url: string;
93
101
  pathData: string;
94
102
  } | null>;
95
- activateTool: (id: string | null) => Promise<import('../../core/src/index.ts/src/services/WorkbenchService').ToolSwitchResult>;
96
- deactivateTool: () => Promise<import('../../core/src/index.ts/src/services/WorkbenchService').ToolSwitchResult>;
103
+ activateTool: (id: string | null) => Promise<import('../../core/src/services/WorkbenchService').ToolSwitchResult>;
104
+ deactivateTool: () => Promise<import('../../core/src/services/WorkbenchService').ToolSwitchResult>;
97
105
  on: (event: string, handler: any) => void;
98
106
  off: (event: string, handler: any) => void;
99
107
  emit: (event: string, data: any) => void;
package/dist/vue.css CHANGED
@@ -1 +1 @@
1
- .pooder-canvas-area[data-v-203ff8d9]{flex:1;width:100%;height:100%;min-height:650px;min-width:650px;overflow:hidden;background:#ececec;position:relative}canvas[data-v-203ff8d9]{display:block}.pooder-editor[data-v-2149abdf]{display:flex;width:100%;height:100%;overflow:hidden}
1
+ .pooder-canvas-area[data-v-203ff8d9]{flex:1;width:100%;height:100%;min-height:650px;min-width:650px;overflow:hidden;background:#ececec;position:relative}canvas[data-v-203ff8d9]{display:block}.pooder-editor[data-v-53ea55ea]{display:flex;width:100%;height:100%;overflow:hidden}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pooder/vue",
3
- "version": "4.2.6",
3
+ "version": "4.2.8",
4
4
  "main": "./dist/index.umd.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "types": "./dist/index.d.ts",
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@pooder/core": "2.2.0",
23
- "@pooder/kit": "5.2.0"
23
+ "@pooder/kit": "5.3.1"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "vue": "^3.0.0"
@@ -1,2 +0,0 @@
1
- declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
2
- export default _default;
@@ -1,2 +0,0 @@
1
- declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
2
- export default _default;