@glodon-aiot/dataset-annotation 3.14.0-alpha.32 → 3.14.0-alpha.33

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.
@@ -1,57 +1,58 @@
1
- import { useCallback as pe, useRef as Q, useEffect as V } from "react";
2
- import { fabric as L } from "fabric";
3
- import { CROSSHAIR_LINE_COLOR as ke, CROSSHAIR_LINE_DASH_ARRAY as xe, CROSSHAIR_LINE_WIDTH as Ee, TEMP_RECT_FILL_COLOR as Le, RECT_STROKE_COLOR as a, TEMP_RECT_STROKE_DASH_ARRAY as je, TRANSPARENT_FILL as Re, REGION_NAME_PREFIX as Ae, BASE_STROKE_WIDTH as v } from "../../constants.mjs";
4
- const We = ({
1
+ import { useCallback as Ae, useRef as ne, useEffect as se } from "react";
2
+ import { fabric as T } from "fabric";
3
+ import { CROSSHAIR_LINE_COLOR as Ye, CROSSHAIR_LINE_DASH_ARRAY as Ce, CROSSHAIR_LINE_WIDTH as Xe, TEMP_RECT_FILL_COLOR as Se, RECT_STROKE_COLOR as ie, TEMP_RECT_STROKE_DASH_ARRAY as je, TRANSPARENT_FILL as Be, REGION_NAME_PREFIX as Ue, BASE_STROKE_WIDTH as le } from "../../constants.mjs";
4
+ const Ge = ({
5
5
  canvas: e,
6
- drawingMode: T,
7
- draggable: ee,
8
- setDrawingMode: te,
9
- canvasToImageCoords: oe,
10
- labelDefinitions: D,
11
- onChange: y,
12
- cropRegionImage: re,
13
- updateRegionShapeAndImage: X,
14
- performOCRIfNeeded: ie,
15
- createDeleteControl: ne,
16
- createOCRControl: le,
17
- updateRegionNameText: se,
18
- onRegionChange: N,
19
- onRegionSelect: S,
20
- rectMapRef: p,
21
- textLayersMapRef: ce,
22
- setupBoundaryCheck: de
6
+ drawingMode: y,
7
+ draggable: ce,
8
+ setDrawingMode: de,
9
+ canvasToImageCoords: ue,
10
+ labelDefinitions: J,
11
+ onChange: I,
12
+ cropRegionImage: fe,
13
+ updateRegionShapeAndImage: D,
14
+ performOCRIfNeeded: he,
15
+ createDeleteControl: me,
16
+ createOCRControl: ge,
17
+ updateRegionNameText: be,
18
+ onRegionChange: Q,
19
+ onRegionSelect: P,
20
+ rectMapRef: x,
21
+ textLayersMapRef: ke,
22
+ regionNameTextMapRef: v,
23
+ setupBoundaryCheck: pe
23
24
  }) => {
24
- const G = pe(() => {
25
- const k = /* @__PURE__ */ new Set();
26
- return ce.current.forEach((x) => {
27
- x.forEach((C) => {
28
- k.add(C);
25
+ const V = Ae(() => {
26
+ const L = /* @__PURE__ */ new Set();
27
+ return ke.current.forEach((w) => {
28
+ w.forEach((z) => {
29
+ L.add(z);
29
30
  });
30
- }), k;
31
- }, [ce]), n = Q({
31
+ }), L;
32
+ }, [ke]), i = ne({
32
33
  horizontal: null,
33
34
  vertical: null
34
- }), P = Q(null), ue = Q({
35
+ }), N = ne(null), Oe = ne({
35
36
  dleft: -1,
36
37
  dtop: -1,
37
38
  dw: 0,
38
39
  dh: 0,
39
40
  rect: null
40
- }), F = pe(() => {
41
+ }), G = Ae(() => {
41
42
  e && (e.skipTargetFind = !1);
42
43
  }, [e]);
43
- return V(() => {
44
- if (!e || !T || ee) {
45
- if (F(), e && !T) {
46
- n.current.horizontal && e.getObjects().includes(n.current.horizontal) && e.remove(n.current.horizontal), n.current.vertical && e.getObjects().includes(n.current.vertical) && e.remove(n.current.vertical), n.current = {
44
+ return se(() => {
45
+ if (!e || !y || ce) {
46
+ if (G(), e && !y) {
47
+ i.current.horizontal && e.getObjects().includes(i.current.horizontal) && e.remove(i.current.horizontal), i.current.vertical && e.getObjects().includes(i.current.vertical) && e.remove(i.current.vertical), i.current = {
47
48
  horizontal: null,
48
49
  vertical: null
49
50
  };
50
51
  const o = e.getActiveObject();
51
52
  e.selection = !1, e.skipTargetFind = !1;
52
- const r = G();
53
- e.getObjects().forEach((i) => {
54
- i instanceof L.Rect && r.has(i) ? i.set({
53
+ const s = V(), r = new Set(v.current.values());
54
+ e.getObjects().forEach((n) => {
55
+ n instanceof T.Rect && s.has(n) ? n.set({
55
56
  evented: !0,
56
57
  selectable: !1,
57
58
  lockMovementX: !0,
@@ -59,21 +60,47 @@ const We = ({
59
60
  lockScalingX: !0,
60
61
  lockScalingY: !0,
61
62
  lockRotation: !0
62
- }) : (i.set("evented", !0), i.set("selectable", !0), i instanceof L.Rect && i.set("hasControls", !0));
63
+ }) : r.has(n) ? n.set({
64
+ evented: !1,
65
+ selectable: !1,
66
+ lockMovementX: !0,
67
+ lockMovementY: !0,
68
+ lockScalingX: !1,
69
+ // 允许缩放,用于抵消画布缩放
70
+ lockScalingY: !1,
71
+ // 允许缩放,用于抵消画布缩放
72
+ lockRotation: !0,
73
+ hasControls: !1,
74
+ hasBorders: !1
75
+ }) : (n.set("evented", !0), n.set("selectable", !0), n instanceof T.Rect && n.set("hasControls", !0));
63
76
  }), o && e.getObjects().includes(o) && (e.setActiveObject(o), e.renderAll()), e.defaultCursor = "default";
64
77
  }
65
78
  return;
66
79
  }
67
- F(), e.selection = !1, e.skipTargetFind = !0, e.getActiveObject() && (e.discardActiveObject(), e.renderAll()), e.getObjects().forEach((o) => {
68
- o.set("evented", !1), o.set("selectable", !1), o instanceof L.Rect && o.hasControls && o.set("hasControls", !1);
69
- }), e.defaultCursor = "crosshair", e.setCursor("crosshair"), n.current.horizontal && e.getObjects().includes(n.current.horizontal) && e.remove(n.current.horizontal), n.current.vertical && e.getObjects().includes(n.current.vertical) && e.remove(n.current.vertical), n.current = {
80
+ G(), e.selection = !1, e.skipTargetFind = !0, e.getActiveObject() && (e.discardActiveObject(), e.renderAll());
81
+ const w = new Set(v.current.values());
82
+ e.getObjects().forEach((o) => {
83
+ w.has(o) ? o.set({
84
+ evented: !1,
85
+ selectable: !1,
86
+ lockMovementX: !0,
87
+ lockMovementY: !0,
88
+ lockScalingX: !1,
89
+ // 允许缩放,用于抵消画布缩放
90
+ lockScalingY: !1,
91
+ // 允许缩放,用于抵消画布缩放
92
+ lockRotation: !0,
93
+ hasControls: !1,
94
+ hasBorders: !1
95
+ }) : (o.set("evented", !1), o.set("selectable", !1), o instanceof T.Rect && o.hasControls && o.set("hasControls", !1));
96
+ }), e.defaultCursor = "crosshair", e.setCursor("crosshair"), i.current.horizontal && e.getObjects().includes(i.current.horizontal) && e.remove(i.current.horizontal), i.current.vertical && e.getObjects().includes(i.current.vertical) && e.remove(i.current.vertical), i.current = {
70
97
  horizontal: null,
71
98
  vertical: null
72
99
  };
73
- const x = e.getWidth(), C = e.getHeight(), E = e.getZoom(), j = x / E, R = C / E, A = Math.max(j, R) * 3, Z = Ee / E, z = new L.Line([-A, 0, A, 0], {
74
- stroke: ke,
75
- strokeWidth: Z,
76
- strokeDashArray: xe,
100
+ const z = e.getWidth(), S = e.getHeight(), E = e.getZoom(), j = z / E, $ = S / E, _ = Math.max(j, $) * 3, K = Xe / E, F = new T.Line([-_, 0, _, 0], {
101
+ stroke: Ye,
102
+ strokeWidth: K,
103
+ strokeDashArray: Ce,
77
104
  selectable: !1,
78
105
  evented: !1,
79
106
  excludeFromExport: !0,
@@ -82,10 +109,10 @@ const We = ({
82
109
  // 设置为 true,使线宽随缩放调整以保持视觉一致
83
110
  visible: !0
84
111
  // 画框模式下常显辅助线
85
- }), _ = new L.Line([0, -A, 0, A], {
86
- stroke: ke,
87
- strokeWidth: Z,
88
- strokeDashArray: xe,
112
+ }), Z = new T.Line([0, -_, 0, _], {
113
+ stroke: Ye,
114
+ strokeWidth: K,
115
+ strokeDashArray: Ce,
89
116
  selectable: !1,
90
117
  evented: !1,
91
118
  excludeFromExport: !0,
@@ -95,77 +122,94 @@ const We = ({
95
122
  visible: !0
96
123
  // 画框模式下常显辅助线
97
124
  });
98
- n.current = {
99
- horizontal: z,
100
- vertical: _
101
- }, e.add(z), e.add(_), z.sendToBack(), _.sendToBack();
102
- const M = (o, r) => {
103
- const i = n.current.horizontal, c = n.current.vertical;
104
- if (!i || !c)
125
+ i.current = {
126
+ horizontal: F,
127
+ vertical: Z
128
+ }, e.add(F), e.add(Z), F.sendToBack(), Z.sendToBack();
129
+ const R = (o, s) => {
130
+ const r = i.current.horizontal, n = i.current.vertical;
131
+ if (!r || !n)
105
132
  return;
106
- const h = e.getZoom(), g = e.getWidth(), s = e.getHeight(), O = g / h, w = s / h, b = Math.max(O, w) * 3;
107
- i.set({
108
- x1: o - b,
109
- y1: r,
110
- x2: o + b,
111
- y2: r,
133
+ const u = e.getZoom(), b = e.getWidth(), l = e.getHeight(), h = b / u, f = l / u, m = e.viewportTransform || [1, 0, 0, 1, 0, 0];
134
+ m[4] / u, m[5] / u;
135
+ const k = e.backgroundImage;
136
+ let g = h, p = f;
137
+ if (k) {
138
+ const a = k.getElement();
139
+ if (a != null && a.width && (a != null && a.height)) {
140
+ const re = k, Fe = re.scaleX || 1, Ze = re.scaleY || 1;
141
+ g = a.width * Fe, p = a.height * Ze;
142
+ }
143
+ }
144
+ const A = Math.max(h, f, g, p) * 10, M = m[3] || u, Y = m[5] || 0, d = 0, C = l, X = (d - Y) / M, H = (C - Y) / M;
145
+ let W = s;
146
+ s < X ? W = X : s > H && (W = H);
147
+ const q = m[0] || u, oe = m[4] || 0, We = 0, ye = b, Re = (We - oe) / q, Te = (ye - oe) / q;
148
+ let U = o;
149
+ isNaN(o) || !isFinite(o) ? U = (b / 2 - oe) / q : o < Re ? U = Re : o > Te && (U = Te);
150
+ const ze = -A, _e = h + A, He = -A, Ie = f + A;
151
+ r.set({
152
+ x1: ze,
153
+ y1: W,
154
+ x2: _e,
155
+ y2: W,
112
156
  visible: !0
113
157
  // 显示辅助线
114
- }), c.set({
115
- x1: o,
116
- y1: r - b,
117
- x2: o,
118
- y2: r + b,
158
+ }), r.setCoords(), n.set({
159
+ x1: U,
160
+ y1: He,
161
+ x2: U,
162
+ y2: Ie,
119
163
  visible: !0
120
164
  // 显示辅助线
121
- }), i.sendToBack(), c.sendToBack();
122
- const d = ue.current, f = d.rect && e.getObjects().includes(d.rect);
123
- if (d.rect && !e.getObjects().includes(d.rect) && d.dleft !== -1 && d.dtop !== -1 && d.dw > 0 && d.dh > 0 && e.add(d.rect), f && d.rect) {
124
- const m = Math.min(e.getObjects().indexOf(i), e.getObjects().indexOf(c));
125
- e.getObjects().indexOf(d.rect) <= m && e.moveTo(d.rect, m + 1);
165
+ }), n.setCoords(), r.sendToBack(), n.sendToBack(), e.renderAll();
166
+ const O = Oe.current, Pe = O.rect && e.getObjects().includes(O.rect);
167
+ if (O.rect && !e.getObjects().includes(O.rect) && O.dleft !== -1 && O.dtop !== -1 && O.dw > 0 && O.dh > 0 && e.add(O.rect), Pe && O.rect) {
168
+ const a = Math.min(e.getObjects().indexOf(r), e.getObjects().indexOf(n));
169
+ e.getObjects().indexOf(O.rect) <= a && e.moveTo(O.rect, a + 1);
126
170
  }
127
171
  e.renderAll();
128
172
  };
129
- if (P.current) {
130
- const r = e.getElement().getBoundingClientRect(), {
131
- clientX: i,
132
- clientY: c
133
- } = P.current;
134
- if (i >= r.left && i <= r.right && c >= r.top && c <= r.bottom) {
135
- const g = new MouseEvent("mousemove", {
173
+ if (N.current) {
174
+ const s = e.getElement().getBoundingClientRect(), {
175
+ clientX: r,
176
+ clientY: n
177
+ } = N.current;
178
+ if (r >= s.left && r <= s.right && n >= s.top && n <= s.bottom) {
179
+ const b = new MouseEvent("mousemove", {
136
180
  bubbles: !0,
137
181
  cancelable: !0,
138
- clientX: i,
139
- clientY: c
140
- }), s = e.getPointer(g);
141
- M(s.x, s.y);
182
+ clientX: r,
183
+ clientY: n
184
+ }), l = e.getPointer(b);
185
+ R(l.x, l.y);
142
186
  }
143
187
  }
144
- const t = ue.current, H = (o) => {
188
+ const t = Oe.current, B = (o) => {
145
189
  if (e.skipTargetFind && (t.dleft === -1 || t.dtop === -1)) {
146
- const r = e.getPointer(o.e);
147
- t.dleft = r.x, t.dtop = r.y;
190
+ const s = e.getPointer(o.e);
191
+ t.dleft = s.x, t.dtop = s.y;
148
192
  }
149
- }, U = (o) => {
150
- const r = e.getPointer(o.e);
151
- M(r.x, r.y);
152
- }, $ = (o) => {
153
- const r = e.getPointer(o.e);
193
+ }, Me = (o) => {
194
+ const s = e.getPointer(o.e);
195
+ R(s.x, s.y);
196
+ }, ee = (o) => {
197
+ const s = e.getPointer(o.e);
154
198
  if (t.dleft !== -1 && t.dtop !== -1) {
155
- let i = r.x, c = r.y;
156
- if (t.dw = Math.abs(i - t.dleft), t.dh = Math.abs(c - t.dtop), t.dw > 0 && t.dh > 0) {
157
- let h = t.dtop > c ? c : t.dtop, g = t.dleft > i ? i : t.dleft, s = t.dw, O = t.dh;
158
- if (!t.rect || t.rect.left !== g || t.rect.top !== h || t.rect.width !== s || t.rect.height !== O || !e.getObjects().includes(t.rect)) {
199
+ let r = s.x, n = s.y;
200
+ if (t.dw = Math.abs(r - t.dleft), t.dh = Math.abs(n - t.dtop), t.dw > 0 && t.dh > 0) {
201
+ let u = t.dtop > n ? n : t.dtop, b = t.dleft > r ? r : t.dleft, l = t.dw, h = t.dh;
202
+ if (!t.rect || t.rect.left !== b || t.rect.top !== u || t.rect.width !== l || t.rect.height !== h || !e.getObjects().includes(t.rect)) {
159
203
  t.rect && e.getObjects().includes(t.rect) && e.remove(t.rect);
160
- const f = e.getZoom(), m = v / f;
161
- t.rect = new L.Rect({
162
- left: g,
163
- top: h,
164
- width: s,
165
- height: O,
166
- fill: Le,
167
- stroke: a,
168
- strokeWidth: m,
204
+ const g = e.getZoom(), p = le / g;
205
+ t.rect = new T.Rect({
206
+ left: b,
207
+ top: u,
208
+ width: l,
209
+ height: h,
210
+ fill: Se,
211
+ stroke: ie,
212
+ strokeWidth: p,
169
213
  strokeUniform: !0,
170
214
  // 边框宽度不受缩放影响
171
215
  strokeDashArray: je,
@@ -177,37 +221,37 @@ const We = ({
177
221
  noScaleCache: !1
178
222
  }), e.add(t.rect);
179
223
  }
180
- const b = n.current.horizontal, d = n.current.vertical;
181
- if (t.rect && b && d && e.getObjects().includes(b) && e.getObjects().includes(d) && e.getObjects().includes(t.rect)) {
182
- const f = Math.min(e.getObjects().indexOf(b), e.getObjects().indexOf(d));
183
- e.getObjects().indexOf(t.rect) <= f && e.moveTo(t.rect, f + 1);
224
+ const m = i.current.horizontal, k = i.current.vertical;
225
+ if (t.rect && m && k && e.getObjects().includes(m) && e.getObjects().includes(k) && e.getObjects().includes(t.rect)) {
226
+ const g = Math.min(e.getObjects().indexOf(m), e.getObjects().indexOf(k));
227
+ e.getObjects().indexOf(t.rect) <= g && e.moveTo(t.rect, g + 1);
184
228
  }
185
229
  } else
186
230
  t.rect && e.getObjects().includes(t.rect) && (e.remove(t.rect), t.rect = null);
187
231
  }
188
- U(o);
189
- }, K = (o) => {
232
+ Me(o);
233
+ }, te = (o) => {
190
234
  if (t.dleft === -1 || t.dtop === -1) {
191
235
  t.dtop = -1, t.dleft = -1;
192
236
  return;
193
237
  }
194
- const r = e.getPointer(o.e);
195
- let i = r.x, c = r.y;
196
- if (t.dw = Math.abs(i - t.dleft), t.dh = Math.abs(c - t.dtop), t.dw === 0 || t.dh === 0) {
238
+ const s = e.getPointer(o.e);
239
+ let r = s.x, n = s.y;
240
+ if (t.dw = Math.abs(r - t.dleft), t.dh = Math.abs(n - t.dtop), t.dw === 0 || t.dh === 0) {
197
241
  t.rect && (e.remove(t.rect), e.renderAll()), t.dtop = -1, t.dleft = -1;
198
242
  return;
199
243
  }
200
- let h = t.dtop > c ? c : t.dtop, g = t.dleft > i ? i : t.dleft, s = t.dw, O = t.dh;
244
+ let u = t.dtop > n ? n : t.dtop, b = t.dleft > r ? r : t.dleft, l = t.dw, h = t.dh;
201
245
  t.rect && (e.remove(t.rect), t.rect = null);
202
- const w = oe(g, h), b = s, d = O, f = e.getZoom(), m = v / f, l = new L.Rect({
203
- left: g,
204
- top: h,
205
- width: s,
206
- height: O,
207
- fill: Re,
246
+ const f = ue(b, u), m = l, k = h, g = e.getZoom(), p = le / g, c = new T.Rect({
247
+ left: b,
248
+ top: u,
249
+ width: l,
250
+ height: h,
251
+ fill: Be,
208
252
  // 无填充色
209
- stroke: a,
210
- strokeWidth: m,
253
+ stroke: ie,
254
+ strokeWidth: p,
211
255
  strokeUniform: !0,
212
256
  // 边框宽度不受缩放影响
213
257
  selectable: !0,
@@ -227,91 +271,91 @@ const We = ({
227
271
  hasControls: !0
228
272
  // 启用控件
229
273
  });
230
- e.add(l), l.controls.deleteControl = ne(), l.controls.ocrControl = le(), l.set("hasControls", !1);
231
- const q = p.current.size, B = {};
232
- D == null || D.forEach((u) => {
233
- B[u.id] = "";
274
+ e.add(c), c.controls.deleteControl = me(), c.controls.ocrControl = ge(), c.set("hasControls", !1);
275
+ const A = x.current.size, M = {};
276
+ J == null || J.forEach((d) => {
277
+ M[d.id] = "";
234
278
  });
235
279
  const Y = {
236
280
  id: `region-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
237
- name: `${Ae}${q + 1}`,
281
+ name: `${Ue}${A + 1}`,
238
282
  // 设置名称:区域+(索引+1)
239
283
  shape: {
240
284
  name: "rect",
241
- x: Math.max(0, w.x),
242
- y: Math.max(0, w.y),
243
- width: b,
244
- height: d
285
+ x: Math.max(0, f.x),
286
+ y: Math.max(0, f.y),
287
+ width: m,
288
+ height: k
245
289
  },
246
- content: B
290
+ content: M
247
291
  };
248
- if (p.current.set(l, Y), se(l, Y), X(l), N) {
249
- const u = p.current.get(l);
250
- u && N(u, "create");
292
+ if (x.current.set(c, Y), be(c, Y), D(c), Q) {
293
+ const d = x.current.get(c);
294
+ d && Q(d, "create");
251
295
  }
252
- re(Y).then((u) => {
253
- if (u) {
254
- const W = p.current.get(l);
255
- if (W) {
256
- if (W.image = u, delete W.textLayouts, y) {
257
- const I = Array.from(p.current.values());
258
- y(I);
296
+ fe(Y).then((d) => {
297
+ if (d) {
298
+ const C = x.current.get(c);
299
+ if (C) {
300
+ if (C.image = d, delete C.textLayouts, I) {
301
+ const X = Array.from(x.current.values());
302
+ I(X);
259
303
  }
260
- ie(W, "create");
304
+ he(C, "create");
261
305
  }
262
306
  }
263
- }).catch((u) => {
264
- console.error("Failed to crop region image:", u);
265
- }), e.setActiveObject(l), e.renderAll(), setTimeout(() => {
266
- if (S) {
267
- const u = p.current.get(l);
268
- u && S(u);
307
+ }).catch((d) => {
308
+ console.error("Failed to crop region image:", d);
309
+ }), e.setActiveObject(c), e.renderAll(), setTimeout(() => {
310
+ if (P) {
311
+ const d = x.current.get(c);
312
+ d && P(d);
269
313
  }
270
314
  setTimeout(() => {
271
- if (e && l && e.getObjects().includes(l) && (e.setActiveObject(l), e.renderAll(), S)) {
272
- const u = p.current.get(l);
273
- u && S(u);
315
+ if (e && c && e.getObjects().includes(c) && (e.setActiveObject(c), e.renderAll(), P)) {
316
+ const d = x.current.get(c);
317
+ d && P(d);
274
318
  }
275
319
  }, 0);
276
- }, 0), de(l), l.on("modified", () => {
277
- X(l);
278
- }), l.on("moved", () => {
279
- X(l);
320
+ }, 0), pe(c), c.on("modified", () => {
321
+ D(c);
322
+ }), c.on("moved", () => {
323
+ D(c);
280
324
  }), setTimeout(() => {
281
- if (y) {
282
- const u = Array.from(p.current.values());
283
- y(u);
325
+ if (I) {
326
+ const d = Array.from(x.current.values());
327
+ I(d);
284
328
  }
285
- }, 0), t.dtop = -1, t.dleft = -1, e.selection = !1, te(!1);
286
- }, fe = (o) => {
287
- P.current = {
329
+ }, 0), t.dtop = -1, t.dleft = -1, e.selection = !1, de(!1);
330
+ }, ae = (o) => {
331
+ N.current = {
288
332
  clientX: o.clientX,
289
333
  clientY: o.clientY
290
334
  };
291
- const i = e.getElement().getBoundingClientRect(), c = o.clientX, h = o.clientY, g = c >= i.left && c <= i.right && h >= i.top && h <= i.bottom;
335
+ const r = e.getElement().getBoundingClientRect(), n = o.clientX, u = o.clientY, b = n >= r.left && n <= r.right && u >= r.top && u <= r.bottom;
292
336
  if (t.dleft !== -1 && t.dtop !== -1)
293
- if (g) {
294
- const s = e.getPointer(o);
295
- $({
337
+ if (b) {
338
+ const l = e.getPointer(o);
339
+ ee({
296
340
  e: o,
297
- pointer: s
341
+ pointer: l
298
342
  });
299
343
  } else {
300
- const s = e.getZoom(), O = e.viewportTransform ? e.viewportTransform[4] / s : 0, w = e.viewportTransform ? e.viewportTransform[5] / s : 0, b = e.getWidth() / s, d = e.getHeight() / s;
301
- let f = (c - i.left) / s - O, m = (h - i.top) / s - w;
302
- if (f = Math.max(0, Math.min(f, b)), m = Math.max(0, Math.min(m, d)), t.dw = Math.abs(f - t.dleft), t.dh = Math.abs(m - t.dtop), t.dw === 0 || t.dh === 0)
344
+ const l = e.getZoom(), h = e.viewportTransform ? e.viewportTransform[4] / l : 0, f = e.viewportTransform ? e.viewportTransform[5] / l : 0, m = e.getWidth() / l, k = e.getHeight() / l;
345
+ let g = (n - r.left) / l - h, p = (u - r.top) / l - f;
346
+ if (g = Math.max(0, Math.min(g, m)), p = Math.max(0, Math.min(p, k)), t.dw = Math.abs(g - t.dleft), t.dh = Math.abs(p - t.dtop), t.dw === 0 || t.dh === 0)
303
347
  return;
304
- let l = t.dtop > m ? m : t.dtop, q = t.dleft > f ? f : t.dleft, B = t.dw, Y = t.dh;
348
+ let c = t.dtop > p ? p : t.dtop, A = t.dleft > g ? g : t.dleft, M = t.dw, Y = t.dh;
305
349
  t.rect && e.remove(t.rect);
306
- const u = e.getZoom(), W = v / u;
307
- t.rect = new L.Rect({
308
- left: q,
309
- top: l,
310
- width: B,
350
+ const d = e.getZoom(), C = le / d;
351
+ t.rect = new T.Rect({
352
+ left: A,
353
+ top: c,
354
+ width: M,
311
355
  height: Y,
312
- fill: Le,
313
- stroke: a,
314
- strokeWidth: W,
356
+ fill: Se,
357
+ stroke: ie,
358
+ strokeWidth: C,
315
359
  strokeUniform: !0,
316
360
  strokeDashArray: je,
317
361
  selectable: !1,
@@ -320,46 +364,53 @@ const We = ({
320
364
  statefullCache: !1,
321
365
  noScaleCache: !1
322
366
  }), e.add(t.rect);
323
- const I = n.current.horizontal, J = n.current.vertical;
324
- if (I && J && e.getObjects().includes(I) && e.getObjects().includes(J)) {
325
- const Oe = Math.min(e.getObjects().indexOf(I), e.getObjects().indexOf(J));
326
- e.getObjects().indexOf(t.rect) < Oe && e.moveTo(t.rect, Oe + 1);
367
+ const X = i.current.horizontal, H = i.current.vertical;
368
+ if (X && H && e.getObjects().includes(X) && e.getObjects().includes(H)) {
369
+ const W = Math.min(e.getObjects().indexOf(X), e.getObjects().indexOf(H));
370
+ e.getObjects().indexOf(t.rect) < W && e.moveTo(t.rect, W + 1);
327
371
  }
328
372
  e.renderAll();
329
373
  }
330
- if (g && (t.dleft === -1 || t.dtop === -1)) {
331
- const s = e.getPointer(o);
332
- M(s.x, s.y);
374
+ if (t.dleft === -1 || t.dtop === -1) {
375
+ let l, h;
376
+ if (b) {
377
+ const f = e.getPointer(o);
378
+ l = f.x, h = f.y;
379
+ } else {
380
+ const f = e.getZoom(), m = e.viewportTransform ? e.viewportTransform[4] / f : 0, k = e.viewportTransform ? e.viewportTransform[5] / f : 0;
381
+ l = (n - r.left) / f - m, h = (u - r.top) / f - k;
382
+ }
383
+ R(l, h);
333
384
  }
334
- }, he = () => {
335
- }, me = (o) => {
336
- const r = e.getPointer(o.e);
337
- M(r.x, r.y);
338
- }, ge = (o) => {
339
- if (!T)
385
+ }, xe = () => {
386
+ }, Le = (o) => {
387
+ const s = e.getPointer(o.e);
388
+ R(s.x, s.y);
389
+ }, we = (o) => {
390
+ if (!y)
340
391
  return;
341
392
  e.skipTargetFind = !0, e.getActiveObject() && (e.discardActiveObject(), e.renderAll()), t.dtop = -1, t.dleft = -1, t.dw = 0, t.dh = 0;
342
- const i = e.getPointer(o.e);
343
- t.dleft = i.x, t.dtop = i.y;
393
+ const r = e.getPointer(o.e);
394
+ t.dleft = r.x, t.dtop = r.y;
344
395
  };
345
- e.on("mouse:down:before", ge), e.on("mouse:down", H), e.on("mouse:move", $), e.on("mouse:up", K), e.on("mouse:out", he), e.on("mouse:over", me), document.addEventListener("mousemove", fe);
346
- const be = (o) => {
396
+ e.on("mouse:down:before", we), e.on("mouse:down", B), e.on("mouse:move", ee), e.on("mouse:up", te), e.on("mouse:out", xe), e.on("mouse:over", Le), document.addEventListener("mousemove", ae);
397
+ const Ee = (o) => {
347
398
  if (t.dleft === -1 || t.dtop === -1)
348
399
  return;
349
- const r = e.getPointer(o);
350
- K({
400
+ const s = e.getPointer(o);
401
+ te({
351
402
  e: o,
352
- pointer: r
403
+ pointer: s
353
404
  });
354
405
  };
355
- return document.addEventListener("mouseup", be), () => {
356
- e.off("mouse:down:before", ge), e.off("mouse:down", H), e.off("mouse:move", $), e.off("mouse:up", K), e.off("mouse:out", he), e.off("mouse:over", me), document.removeEventListener("mousemove", fe), document.removeEventListener("mouseup", be), t.rect && (e.remove(t.rect), e.renderAll()), n.current.horizontal && e.getObjects().includes(n.current.horizontal) && e.remove(n.current.horizontal), n.current.vertical && e.getObjects().includes(n.current.vertical) && e.remove(n.current.vertical), n.current = {
406
+ return document.addEventListener("mouseup", Ee), () => {
407
+ e.off("mouse:down:before", we), e.off("mouse:down", B), e.off("mouse:move", ee), e.off("mouse:up", te), e.off("mouse:out", xe), e.off("mouse:over", Le), document.removeEventListener("mousemove", ae), document.removeEventListener("mouseup", Ee), t.rect && (e.remove(t.rect), e.renderAll()), i.current.horizontal && e.getObjects().includes(i.current.horizontal) && e.remove(i.current.horizontal), i.current.vertical && e.getObjects().includes(i.current.vertical) && e.remove(i.current.vertical), i.current = {
357
408
  horizontal: null,
358
409
  vertical: null
359
410
  }, e.skipTargetFind = !1, e.defaultCursor = "default";
360
- const o = G();
411
+ const o = V(), s = new Set(v.current.values());
361
412
  e.getObjects().forEach((r) => {
362
- r instanceof L.Rect && o.has(r) ? r.set({
413
+ r instanceof T.Rect && o.has(r) ? r.set({
363
414
  evented: !0,
364
415
  selectable: !1,
365
416
  lockMovementX: !0,
@@ -367,55 +418,67 @@ const We = ({
367
418
  lockScalingX: !0,
368
419
  lockScalingY: !0,
369
420
  lockRotation: !0
421
+ }) : s.has(r) ? r.set({
422
+ evented: !1,
423
+ selectable: !1,
424
+ lockMovementX: !0,
425
+ lockMovementY: !0,
426
+ lockScalingX: !1,
427
+ // 允许缩放,用于抵消画布缩放
428
+ lockScalingY: !1,
429
+ // 允许缩放,用于抵消画布缩放
430
+ lockRotation: !0,
431
+ hasControls: !1,
432
+ hasBorders: !1
370
433
  }) : (r.set("evented", !0), r.set("selectable", !0));
371
434
  });
372
435
  };
373
- }, [e, T, ee, F, oe, y, re, X, ie, ne, le, se, N, S, te, p, G, de]), V(() => {
436
+ }, [e, y, ce, G, ue, I, fe, D, he, me, ge, be, Q, P, de, x, V, v, pe]), se(() => {
374
437
  if (!e)
375
438
  return;
376
- const k = (x) => {
377
- P.current = {
378
- clientX: x.clientX,
379
- clientY: x.clientY
439
+ const L = (w) => {
440
+ N.current = {
441
+ clientX: w.clientX,
442
+ clientY: w.clientY
380
443
  };
381
444
  };
382
- return document.addEventListener("mousemove", k), () => {
383
- document.removeEventListener("mousemove", k);
445
+ return document.addEventListener("mousemove", L), () => {
446
+ document.removeEventListener("mousemove", L);
384
447
  };
385
- }, [e]), V(() => {
386
- if (!e || !T)
448
+ }, [e]), se(() => {
449
+ if (!e || !y)
387
450
  return;
388
- let k = e.getZoom();
389
- const x = () => {
390
- const E = n.current.horizontal, j = n.current.vertical;
391
- if (!E || !j)
451
+ let L = e.getZoom();
452
+ const w = () => {
453
+ const S = i.current.horizontal, E = i.current.vertical;
454
+ if (!S || !E)
392
455
  return;
393
- const R = e.getZoom();
394
- if (Math.abs(R - k) < 1e-3)
456
+ const j = e.getZoom();
457
+ if (Math.abs(j - L) < 1e-3)
395
458
  return;
396
- k = R;
397
- const A = Ee / R, Z = e.getWidth(), z = e.getHeight(), _ = Z / R, M = z / R, t = Math.max(_, M) * 3, H = (E.x1 + E.x2) / 2;
398
- E.y1, j.x1;
399
- const U = (j.y1 + j.y2) / 2;
400
- E.set({
401
- strokeWidth: A,
402
- x1: H - t,
403
- x2: H + t
404
- }), j.set({
405
- strokeWidth: A,
406
- y1: U - t,
407
- y2: U + t
459
+ L = j;
460
+ const $ = Xe / j, _ = e.getWidth(), K = e.getHeight(), F = _ / j, Z = K / j, R = Math.max(F, Z) * 3, t = (S.x1 + S.x2) / 2;
461
+ S.y1, E.x1;
462
+ const B = (E.y1 + E.y2) / 2;
463
+ S.set({
464
+ strokeWidth: $,
465
+ x1: t - R,
466
+ x2: t + R
467
+ }), E.set({
468
+ strokeWidth: $,
469
+ y1: B - R,
470
+ y2: B + R
408
471
  }), e.renderAll();
409
- }, C = () => {
410
- x();
472
+ }, z = () => {
473
+ w();
411
474
  };
412
- return e.on("after:render", C), x(), () => {
413
- e.off("after:render", C);
475
+ return e.on("after:render", z), w(), () => {
476
+ e.off("after:render", z);
414
477
  };
415
- }, [e, T]), {
416
- stopDraw: F
478
+ }, [e, y]), {
479
+ stopDraw: G
417
480
  };
418
481
  };
419
482
  export {
420
- We as useDrawingMode
483
+ Ge as useDrawingMode
421
484
  };