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

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