@pooder/vue 4.3.0 → 4.3.1

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,89 +1,89 @@
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";
1
+ import { defineComponent as B, ref as T, onMounted as V, onUnmounted as O, createElementBlock as P, openBlock as k, createElementVNode as j, provide as $, createVNode as q } from "vue";
2
+ import { Pooder as G } from "@pooder/core";
3
3
  export * from "@pooder/core";
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";
4
+ import { CanvasService as J, SceneLayoutService as K, BackgroundTool as Q, SizeTool as Z, ImageTool as ee, WhiteInkTool as te, DielineTool as ne, RulerTool as re, FeatureTool as oe } from "@pooder/kit";
5
5
  export * from "@pooder/kit";
6
- const se = /* @__PURE__ */ O({
6
+ const ie = /* @__PURE__ */ B({
7
7
  __name: "CanvasArea",
8
8
  emits: ["canvas-ready", "resize"],
9
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) {
10
+ const m = l, r = T(null), o = T(null);
11
+ let i = null;
12
+ return V(() => {
13
+ if (r.value && o.value) {
14
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) => {
15
+ o.value.width = u, o.value.height = f, m("canvas-ready", o.value), i = new ResizeObserver((v) => {
16
16
  for (const p of v) {
17
17
  const { width: w, height: y } = p.contentRect;
18
18
  m("resize", w, y);
19
19
  }
20
- }), o.observe(r.value);
20
+ }), i.observe(r.value);
21
21
  }
22
- }), N(() => {
23
- o && o.disconnect();
22
+ }), O(() => {
23
+ i && i.disconnect();
24
24
  }), (u, f) => (k(), P("div", {
25
25
  ref_key: "container",
26
26
  ref: r,
27
27
  class: "pooder-canvas-area"
28
28
  }, [
29
- $("canvas", {
29
+ j("canvas", {
30
30
  ref_key: "canvas",
31
- ref: i
31
+ ref: o
32
32
  }, null, 512)
33
33
  ], 512));
34
34
  }
35
- }), R = (h, l) => {
35
+ }), N = (h, l) => {
36
36
  const m = h.__vccOpts || h;
37
- for (const [r, i] of l)
38
- m[r] = i;
37
+ for (const [r, o] of l)
38
+ m[r] = o;
39
39
  return m;
40
- }, de = /* @__PURE__ */ R(se, [["__scopeId", "data-v-9668bbd7"]]), me = { class: "pooder-editor" }, F = "SceneLayoutService", B = "SceneVisibilityService", ue = /* @__PURE__ */ O({
40
+ }, ae = /* @__PURE__ */ N(ie, [["__scopeId", "data-v-203ff8d9"]]), ce = { class: "pooder-editor" }, I = "SceneLayoutService", se = /* @__PURE__ */ B({
41
41
  __name: "PooderEditor",
42
42
  emits: ["image-change"],
43
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) => {
44
+ const r = new G();
45
+ $("pooder", r);
46
+ const o = r.getService("CommandService"), i = r.getService("ConfigurationService"), u = r.getService("WorkbenchService"), f = m, v = i.onAnyChange((e) => {
47
47
  e.key === "image.items" && f("image-change", e.value);
48
48
  }), p = (e) => {
49
- o.import(e);
50
- }, w = () => o.export(), y = () => o.get("image.items", []), A = async (e) => {
49
+ i.import(e);
50
+ }, w = () => i.export(), y = () => i.get("image.items", []), R = async (e) => {
51
51
  try {
52
- const t = await i.executeCommand(
52
+ const t = await o.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: (o.get("image.items") || []).length,
58
+ imageCount: (i.get("image.items") || []).length,
59
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 i.executeCommand("upsertImage", e, {
64
+ }, D = async (e, t) => await o.executeCommand("upsertImage", e, {
65
65
  id: t?.id,
66
66
  mode: t?.mode,
67
67
  addOptions: t?.addOptions,
68
68
  fitOnAdd: t?.fitOnAdd
69
- }), b = async (e, t) => (await _(e, {
69
+ }), _ = async (e, t) => (await D(e, {
70
70
  mode: "add",
71
71
  addOptions: t,
72
72
  fitOnAdd: !0
73
- })).id, U = async (e, t) => await i.executeCommand("updateImage", e, t), z = async () => await i.executeCommand("clearImages"), C = async (e) => await i.executeCommand(
73
+ })).id, A = async (e, t) => await o.executeCommand("updateImage", e, t), U = async () => await o.executeCommand("clearImages"), C = async (e) => await o.executeCommand(
74
74
  "exportUserCroppedImage",
75
75
  e
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);
76
+ ), z = async (e, t) => await o.executeCommand("focusImage", e, t), x = (e, t) => {
77
+ i.update("dieline.shape", "custom"), i.update("dieline.pathData", e.pathData);
78
78
  const n = Number(e.imageWidth ?? t?.width ?? 0), a = Number(e.imageHeight ?? t?.height ?? 0);
79
- o.update(
79
+ i.update(
80
80
  "dieline.customSourceWidthPx",
81
81
  Number.isFinite(n) && n > 0 ? n : void 0
82
- ), o.update(
82
+ ), i.update(
83
83
  "dieline.customSourceHeightPx",
84
84
  Number.isFinite(a) && a > 0 ? a : void 0
85
- ), o.update("size.cutMode", "trim"), o.update("size.cutMarginMm", 0);
86
- }, D = (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) => {
85
+ ), i.update("size.cutMode", "trim"), i.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) => {
87
87
  const n = e.rawBounds || e.baseBounds || null;
88
88
  if (!n)
89
89
  return {
@@ -105,8 +105,8 @@ const se = /* @__PURE__ */ O({
105
105
  coverageX: t.width > 0 ? n.width / t.width : 0,
106
106
  coverageY: t.height > 0 ? n.height / t.height : 0
107
107
  };
108
- }, L = (e) => {
109
- if (!D(e.rawBounds) || !D(e.baseBounds))
108
+ }, M = (e) => {
109
+ if (!b(e.rawBounds) || !b(e.baseBounds))
110
110
  return null;
111
111
  const t = e.rawBounds, n = e.baseBounds;
112
112
  return {
@@ -115,8 +115,8 @@ const se = /* @__PURE__ */ O({
115
115
  right: t.x + t.width - (n.x + n.width),
116
116
  bottom: t.y + t.height - (n.y + n.height)
117
117
  };
118
- }, V = (e, t, n) => {
119
- const a = E(e, t), c = L(e), s = c ? {
118
+ }, W = (e, t, n) => {
119
+ const a = E(e, t), c = M(e), s = c ? {
120
120
  left: c.left - n,
121
121
  top: c.top - n,
122
122
  right: c.right - n,
@@ -132,7 +132,7 @@ const se = /* @__PURE__ */ O({
132
132
  marginDeltaFromExpected: s,
133
133
  marginAsymmetry: d
134
134
  };
135
- }, W = async (e, t, n) => {
135
+ }, L = async (e, t, n) => {
136
136
  if (!e.length) return null;
137
137
  const a = await C({
138
138
  multiplier: n?.multiplier ?? 2,
@@ -141,14 +141,14 @@ const se = /* @__PURE__ */ O({
141
141
  }), c = a?.url;
142
142
  if (!c) return null;
143
143
  try {
144
- const s = await i.executeCommand("detectEdge", c, {
144
+ const s = await o.executeCommand("detectEdge", c, {
145
145
  expand: n?.detect?.expand ?? 0,
146
146
  smoothing: n?.detect?.smoothing ?? !0,
147
147
  simplifyTolerance: n?.detect?.simplifyTolerance ?? 2,
148
148
  threshold: n?.detect?.threshold,
149
149
  debug: !1
150
150
  });
151
- return s ? V(
151
+ return s ? W(
152
152
  s,
153
153
  a,
154
154
  t
@@ -161,15 +161,15 @@ const se = /* @__PURE__ */ O({
161
161
  importConfig: p,
162
162
  exportConfig: w,
163
163
  getImages: y,
164
- generateCutImage: A,
165
- addImage: b,
166
- upsertImage: _,
167
- updateImage: U,
168
- clearImages: z,
164
+ generateCutImage: R,
165
+ addImage: _,
166
+ upsertImage: D,
167
+ updateImage: A,
168
+ clearImages: U,
169
169
  exportUserCroppedImage: C,
170
- focusImage: M,
170
+ focusImage: z,
171
171
  detectDieline: async (e) => {
172
- const t = await i.executeCommand("detectEdge", e, {
172
+ const t = await o.executeCommand("detectEdge", e, {
173
173
  expand: 10,
174
174
  // 安全距离(像素)
175
175
  smoothing: !0,
@@ -188,7 +188,7 @@ const se = /* @__PURE__ */ O({
188
188
  if (!d)
189
189
  return console.warn("[PooderEditor] detectDielineFromFrame no source image"), null;
190
190
  try {
191
- const g = await i.executeCommand("detectEdge", d, {
191
+ const g = await o.executeCommand("detectEdge", d, {
192
192
  expand: e?.detect?.expand ?? 0,
193
193
  smoothing: e?.detect?.smoothing ?? !0,
194
194
  simplifyTolerance: e?.detect?.simplifyTolerance ?? 2,
@@ -199,12 +199,12 @@ const se = /* @__PURE__ */ O({
199
199
  return console.warn(
200
200
  "[PooderEditor] detectDielineFromFrame detectEdge returned null"
201
201
  ), null;
202
- const I = E(g, s);
202
+ const F = E(g, s);
203
203
  if (e?.commit === !1)
204
204
  return {
205
205
  ...g,
206
206
  ...n ? { sourceImage: s } : {},
207
- ...a ? { diagnostics: I } : {}
207
+ ...a ? { diagnostics: F } : {}
208
208
  };
209
209
  x(g, s);
210
210
  const X = {
@@ -217,7 +217,7 @@ const se = /* @__PURE__ */ O({
217
217
  threshold: e?.detect?.threshold
218
218
  }
219
219
  };
220
- let S = await W(
220
+ let S = await L(
221
221
  s.imageIds,
222
222
  c,
223
223
  X
@@ -230,14 +230,14 @@ const se = /* @__PURE__ */ O({
230
230
  ), {
231
231
  ...g,
232
232
  ...n ? { sourceImage: s } : {},
233
- ...a ? { diagnostics: I, postCommitDiagnostics: S } : {}
233
+ ...a ? { diagnostics: F, postCommitDiagnostics: S } : {}
234
234
  };
235
235
  } finally {
236
236
  d && !n && URL.revokeObjectURL(d);
237
237
  }
238
238
  },
239
239
  uploadAndDetectEdge: async (e, t) => {
240
- const n = await b(e), a = await i.executeCommand("detectEdge", e, {
240
+ const n = await _(e), a = await o.executeCommand("detectEdge", e, {
241
241
  expand: t?.expand ?? 10,
242
242
  smoothing: t?.smoothing ?? !0,
243
243
  simplifyTolerance: t?.simplifyTolerance ?? 2
@@ -249,32 +249,29 @@ const se = /* @__PURE__ */ O({
249
249
  on: (e, t) => r.eventBus.on(e, t),
250
250
  off: (e, t) => r.eventBus.off(e, t),
251
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),
252
+ executeCommand: (e, ...t) => o.executeCommand(e, ...t),
253
+ getConfig: (e) => i.get(e),
254
+ updateConfig: (e, t) => i.update(e, t),
255
255
  services: {
256
256
  workbench: u,
257
- command: i,
258
- config: o
257
+ command: o,
258
+ config: i
259
259
  }
260
260
  });
261
261
  const Y = (e) => {
262
- const t = new K(e, {
262
+ const t = new J(e, {
263
263
  eventBus: r.eventBus
264
264
  });
265
- r.registerService(t, "CanvasService"), r.registerService(new Q(), F), r.registerService(
265
+ r.registerService(t, "CanvasService"), r.registerService(new K(), I), [
266
+ new Q(),
266
267
  new Z(),
267
- B
268
- ), [
269
268
  new ee(),
269
+ // new FilmTool(),
270
270
  new te(),
271
+ // new MirrorTool(),
271
272
  new ne(),
272
- // new FilmTool(),
273
273
  new re(),
274
- new ie(),
275
- new oe(),
276
- new ae(),
277
- new ce()
274
+ new oe()
278
275
  ].forEach((a) => {
279
276
  r.extensionManager.register(a);
280
277
  });
@@ -282,16 +279,16 @@ const se = /* @__PURE__ */ O({
282
279
  const n = r.getService("CanvasService");
283
280
  n && n.resize(e, t);
284
281
  };
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, {
282
+ return O(() => {
283
+ v.dispose(), r.extensionManager.destroy(), r.unregisterService(I), r.unregisterService("CanvasService");
284
+ }), (e, t) => (k(), P("div", ce, [
285
+ q(ae, {
289
286
  onCanvasReady: Y,
290
287
  onResize: H
291
288
  })
292
289
  ]));
293
290
  }
294
- }), we = /* @__PURE__ */ R(ue, [["__scopeId", "data-v-77a7de32"]]);
291
+ }), fe = /* @__PURE__ */ N(se, [["__scopeId", "data-v-32ae317e"]]);
295
292
  export {
296
- we as PooderEditor
293
+ fe as PooderEditor
297
294
  };
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
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 h=p,r=s.ref(null),o=s.ref(null);let i=null;return s.onMounted(()=>{if(r.value&&o.value){const{clientWidth:f,clientHeight:y}=r.value;o.value.width=f,o.value.height=y,h("canvas-ready",o.value),i=new ResizeObserver(C=>{for(const S of C){const{width:b,height:x}=S.contentRect;h("resize",b,x)}}),i.observe(r.value)}}),s.onUnmounted(()=>{i&&i.disconnect()}),(f,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 h=d.__vccOpts||d;for(const[r,o]of p)h[r]=o;return h},j=O(U,[["__scopeId","data-v-9668bbd7"]]),A={class:"pooder-editor"},I="SceneLayoutService",T="SceneVisibilityService",M=O(s.defineComponent({__name:"PooderEditor",emits:["image-change"],setup(d,{expose:p,emit:h}){const r=new w.Pooder;s.provide("pooder",r);const o=r.getService("CommandService"),i=r.getService("ConfigurationService"),f=r.getService("WorkbenchService"),y=h,C=i.onAnyChange(e=>{e.key==="image.items"&&y("image-change",e.value)}),S=e=>{i.import(e)},b=()=>i.export(),x=()=>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:b,getImages:x,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 f.switchTool(e),deactivateTool:async()=>await f.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:f,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-77a7de32"]]);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"})}));
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 R=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 x of C){const{width:b,height:S}=x.contentRect;f("resize",b,S)}}),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))}}),E=(d,p)=>{const f=d.__vccOpts||d;for(const[r,o]of p)f[r]=o;return f},U=E(R,[["__scopeId","data-v-203ff8d9"]]),j={class:"pooder-editor"},T="SceneLayoutService",A=E(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)}),x=e=>{i.import(e)},b=()=>i.export(),S=()=>i.get("image.items",[]),z=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,M=async(e,t)=>await o.executeCommand("updateImage",e,t),W=async()=>await o.executeCommand("clearImages"),_=async e=>await o.executeCommand("exportUserCroppedImage",e),L=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),a=Number(e.imageHeight??t?.height??0);i.update("dieline.customSourceWidthPx",Number.isFinite(n)&&n>0?n:void 0),i.update("dieline.customSourceHeightPx",Number.isFinite(a)&&a>0?a: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,I=(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 a=t.width/2,c=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-a,centerOffsetY:g-c,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 a=I(e,t),c=Y(e),u=c?{left:c.left-n,top:c.top-n,right:c.right-n,bottom:c.bottom-n}:null,g=c?{x:c.right-c.left,y:c.bottom-c.top}:null;return{frame:a,margin:c,expectedExpand:n,marginDeltaFromExpected:u,marginAsymmetry:g}},V=async(e,t,n)=>{if(!e.length)return null;const a=await _({multiplier:n?.multiplier??2,format:n?.format??"png",imageIds:e}),c=a?.url;if(!c)return null;try{const u=await o.executeCommand("detectEdge",c,{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,a,t):null}finally{URL.revokeObjectURL(c)}};p({importConfig:x,exportConfig:b,getImages:S,generateCutImage:z,addImage:F,upsertImage:P,updateImage:M,clearImages:W,exportUserCroppedImage:_,focusImage:L,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,a=e?.inspect?.includeDiagnostics===!0,c=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 N=I(v,u);if(e?.commit===!1)return{...v,...n?{sourceImage:u}:{},...a?{diagnostics:N}:{}};D(v,u);const k={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 O=await V(u.imageIds,c,k);return O?console.info("[PooderEditor] detectDielineFromFrame post-commit diagnostics",O):u.imageIds.length>0&&console.warn("[PooderEditor] detectDielineFromFrame post-commit detectEdge returned null"),{...v,...n?{sourceImage:u}:{},...a?{diagnostics:N,postCommitDiagnostics:O}:{}}}finally{g&&!n&&URL.revokeObjectURL(g)}},uploadAndDetectEdge:async(e,t)=>{const n=await F(e),a=await o.executeCommand("detectEdge",e,{expand:t?.expand??10,smoothing:t?.smoothing??!0,simplifyTolerance:t?.simplifyTolerance??2});return a?(D(a),{imageId:n,url:e,pathData:a.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 X=e=>{const t=new m.CanvasService(e,{eventBus:r.eventBus});r.registerService(t,"CanvasService"),r.registerService(new m.SceneLayoutService,T),[new m.BackgroundTool,new m.SizeTool,new m.ImageTool,new m.WhiteInkTool,new m.DielineTool,new m.RulerTool,new m.FeatureTool].forEach(a=>{r.extensionManager.register(a)})},q=(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("CanvasService")}),(e,t)=>(s.openBlock(),s.createElementBlock("div",j,[s.createVNode(U,{onCanvasReady:X,onResize:q})]))}}),[["__scopeId","data-v-32ae317e"]]);l.PooderEditor=A,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"})}));
package/dist/vue.css CHANGED
@@ -1 +1 @@
1
- .pooder-canvas-area[data-v-9668bbd7]{flex:1;width:100%;height:100%;min-height:650px;min-width:650px;overflow:hidden;background:#ececec;position:relative}canvas[data-v-9668bbd7]{display:block}.pooder-editor[data-v-77a7de32]{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-32ae317e]{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.3.0",
3
+ "version": "4.3.1",
4
4
  "main": "./dist/index.umd.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "types": "./dist/index.d.ts",
@@ -19,8 +19,8 @@
19
19
  "access": "public"
20
20
  },
21
21
  "dependencies": {
22
- "@pooder/kit": "5.4.0",
23
- "@pooder/core": "2.2.0"
22
+ "@pooder/core": "2.2.0",
23
+ "@pooder/kit": "6.0.0"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "vue": "^3.0.0"