@glodon-aiot/dataset-annotation 3.10.0-alpha.22 → 3.10.0-alpha.23
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,25 +1,25 @@
|
|
|
1
1
|
var Pe = Object.defineProperty, Ue = Object.defineProperties;
|
|
2
|
-
var
|
|
2
|
+
var Xe = Object.getOwnPropertyDescriptors;
|
|
3
3
|
var le = Object.getOwnPropertySymbols;
|
|
4
|
-
var
|
|
5
|
-
var ge = (s,
|
|
6
|
-
for (var
|
|
7
|
-
|
|
4
|
+
var Fe = Object.prototype.hasOwnProperty, We = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var ge = (s, l, u) => l in s ? Pe(s, l, { enumerable: !0, configurable: !0, writable: !0, value: u }) : s[l] = u, q = (s, l) => {
|
|
6
|
+
for (var u in l || (l = {}))
|
|
7
|
+
Fe.call(l, u) && ge(s, u, l[u]);
|
|
8
8
|
if (le)
|
|
9
|
-
for (var
|
|
10
|
-
We.call(
|
|
9
|
+
for (var u of le(l))
|
|
10
|
+
We.call(l, u) && ge(s, u, l[u]);
|
|
11
11
|
return s;
|
|
12
|
-
}, he = (s,
|
|
12
|
+
}, he = (s, l) => Ue(s, Xe(l));
|
|
13
13
|
import { jsxs as Re, jsx as S } from "react/jsx-runtime";
|
|
14
|
-
import { useRef as
|
|
14
|
+
import { useRef as R, useState as A, useCallback as P, useEffect as h } from "react";
|
|
15
15
|
import { fabric as U } from "fabric";
|
|
16
|
-
import { useKeyPress as
|
|
16
|
+
import { useKeyPress as X } from "ahooks";
|
|
17
17
|
import Oe from "classnames";
|
|
18
18
|
import "./style.less.mjs";
|
|
19
|
-
import
|
|
20
|
-
import { useOCRLoadingIcon as
|
|
21
|
-
import { useRegionNameText as
|
|
22
|
-
import { useCropRegionImage as
|
|
19
|
+
import ye from "../components/Toolbar.mjs";
|
|
20
|
+
import { useOCRLoadingIcon as be } from "./hooks/useOCRLoadingIcon.mjs";
|
|
21
|
+
import { useRegionNameText as Ye } from "./hooks/useRegionNameText.mjs";
|
|
22
|
+
import { useCropRegionImage as je } from "./hooks/useCropRegionImage.mjs";
|
|
23
23
|
import { useDrawingMode as ze } from "./hooks/useDrawingMode.mjs";
|
|
24
24
|
import { useRegionLoader as He } from "./hooks/useRegionLoader.mjs";
|
|
25
25
|
import { useCanvasSetup as Ze } from "./hooks/useCanvasSetup.mjs";
|
|
@@ -36,42 +36,42 @@ import { canvasToImageCoords as tt, imageToCanvasCoords as ot } from "./utils/co
|
|
|
36
36
|
import { REGION_NAME_PREFIX as rt, DEFAULT_REGION_NAME as nt, ZOOM_PRECISION_ERROR as st, TEXT_LAYOUT_RECT_FILL_COLOR as it, TEXT_LAYOUT_RECT_STROKE_COLOR as ct, TRANSPARENT_FILL as at, BASE_STROKE_WIDTH as ft } from "../constants.mjs";
|
|
37
37
|
const Wt = ({
|
|
38
38
|
sample: s,
|
|
39
|
-
labelDefinitions:
|
|
40
|
-
labels:
|
|
39
|
+
labelDefinitions: l,
|
|
40
|
+
labels: u,
|
|
41
41
|
onImageLoad: pe,
|
|
42
|
-
onChange:
|
|
42
|
+
onChange: x,
|
|
43
43
|
onRegionSelect: J,
|
|
44
44
|
onRegionChange: H,
|
|
45
|
-
ocrRecognize:
|
|
46
|
-
activeLabelValue:
|
|
45
|
+
ocrRecognize: Te,
|
|
46
|
+
activeLabelValue: g,
|
|
47
47
|
onClearActive: Z,
|
|
48
48
|
selectedRegion: Q,
|
|
49
49
|
onAppendTextToActive: Ee,
|
|
50
50
|
readOnly: c
|
|
51
51
|
}) => {
|
|
52
52
|
var ue, me;
|
|
53
|
-
const V =
|
|
53
|
+
const V = R(null), T = R(null), [ve, Ce] = A(!0), [t, Ne] = A(), [D, Ie] = A(), [p, ee] = A(1), [E, _] = A(c || !1), [v, I] = A(!1), [K, Ae] = A({
|
|
54
54
|
left: 0,
|
|
55
55
|
top: 0
|
|
56
|
-
}),
|
|
56
|
+
}), F = R({
|
|
57
57
|
left: 0,
|
|
58
58
|
top: 0
|
|
59
|
-
}),
|
|
59
|
+
}), xe = R({
|
|
60
60
|
width: 0,
|
|
61
61
|
height: 0
|
|
62
|
-
}),
|
|
62
|
+
}), a = R(/* @__PURE__ */ new Map()), te = R(null), oe = R(void 0), re = R(!1), ne = R(!1), W = R({
|
|
63
63
|
width: 0,
|
|
64
64
|
height: 0
|
|
65
|
-
}), se =
|
|
66
|
-
updateOCRLoadingIcon:
|
|
67
|
-
ocrLoadingIconMapRef:
|
|
68
|
-
} =
|
|
65
|
+
}), se = R(!1), {
|
|
66
|
+
updateOCRLoadingIcon: ke,
|
|
67
|
+
ocrLoadingIconMapRef: k
|
|
68
|
+
} = be(t), {
|
|
69
69
|
updateRegionNameText: O,
|
|
70
70
|
regionNameTextMapRef: C
|
|
71
|
-
} =
|
|
72
|
-
|
|
71
|
+
} = Ye(t), ie = je(s == null ? void 0 : s.fileUrl), we = P((o) => {
|
|
72
|
+
t && (C.current.forEach((e, r) => {
|
|
73
73
|
const n = r.left || 0, i = r.top || 0;
|
|
74
|
-
|
|
74
|
+
e.set({
|
|
75
75
|
left: n,
|
|
76
76
|
// 与标注框左边对齐
|
|
77
77
|
top: i,
|
|
@@ -81,144 +81,144 @@ const Wt = ({
|
|
|
81
81
|
scaleY: 1 / o
|
|
82
82
|
// 反向缩放,抵消画布缩放
|
|
83
83
|
});
|
|
84
|
-
}),
|
|
85
|
-
}, [
|
|
84
|
+
}), t.renderAll());
|
|
85
|
+
}, [t]), {
|
|
86
86
|
updateCanvas: L
|
|
87
87
|
} = Ze({
|
|
88
88
|
sample: s,
|
|
89
89
|
image: D,
|
|
90
90
|
onImageLoad: pe,
|
|
91
91
|
canvasRef: V,
|
|
92
|
-
containerRef:
|
|
92
|
+
containerRef: T,
|
|
93
93
|
canvasInitializedRef: re,
|
|
94
|
-
bgImagePositionRef:
|
|
95
|
-
bgImageSizeRef:
|
|
96
|
-
rectMapRef:
|
|
94
|
+
bgImagePositionRef: F,
|
|
95
|
+
bgImageSizeRef: xe,
|
|
96
|
+
rectMapRef: a,
|
|
97
97
|
updateTextLayersRef: te,
|
|
98
|
-
onRectPositionUpdated:
|
|
98
|
+
onRectPositionUpdated: we,
|
|
99
99
|
setCanvas: Ne,
|
|
100
100
|
setImage: Ie,
|
|
101
101
|
setScale: ee,
|
|
102
102
|
setBgImagePosition: Ae,
|
|
103
103
|
setLoading: Ce
|
|
104
104
|
}), Me = P(() => {
|
|
105
|
-
const o = Array.from(
|
|
106
|
-
o.forEach((
|
|
107
|
-
|
|
108
|
-
}),
|
|
105
|
+
const o = Array.from(a.current.values());
|
|
106
|
+
o.forEach((e, r) => {
|
|
107
|
+
e.name = `${rt}${r + 1}`;
|
|
108
|
+
}), a.current.forEach((e, r) => {
|
|
109
109
|
const n = C.current.get(r);
|
|
110
|
-
n && (n.set("text",
|
|
111
|
-
}),
|
|
112
|
-
}, [
|
|
110
|
+
n && (n.set("text", e.name || nt), t == null || t.renderAll());
|
|
111
|
+
}), x && x(o);
|
|
112
|
+
}, [x, t]), {
|
|
113
113
|
zoom: Se
|
|
114
114
|
} = Ve({
|
|
115
|
-
canvas:
|
|
115
|
+
canvas: t,
|
|
116
116
|
setScale: ee,
|
|
117
117
|
isZoomingRef: se
|
|
118
|
-
}),
|
|
119
|
-
(o,
|
|
120
|
-
[
|
|
118
|
+
}), y = P(
|
|
119
|
+
(o, e) => tt(o, e, t, D, F),
|
|
120
|
+
[t, D, K]
|
|
121
121
|
// 添加 bgImagePosition 作为依赖,确保在图片位置更新后函数能正确工作
|
|
122
122
|
), $ = P(
|
|
123
|
-
(o,
|
|
124
|
-
[
|
|
123
|
+
(o, e) => ot(o, e, t, F),
|
|
124
|
+
[t, K]
|
|
125
125
|
// 添加 bgImagePosition 作为依赖,确保在图片位置更新后函数能正确工作
|
|
126
126
|
), {
|
|
127
|
-
updateTextLayers:
|
|
128
|
-
textLayersMapRef:
|
|
129
|
-
textLayoutContentMapRef:
|
|
127
|
+
updateTextLayers: b,
|
|
128
|
+
textLayersMapRef: m,
|
|
129
|
+
textLayoutContentMapRef: Y
|
|
130
130
|
} = Ke({
|
|
131
|
-
canvas:
|
|
131
|
+
canvas: t,
|
|
132
132
|
imageToCanvasCoords: $,
|
|
133
|
-
activeLabelValue:
|
|
133
|
+
activeLabelValue: g,
|
|
134
134
|
onAppendTextToActive: Ee
|
|
135
135
|
});
|
|
136
|
-
te.current =
|
|
136
|
+
te.current = b;
|
|
137
137
|
const {
|
|
138
138
|
performOCRIfNeeded: ce,
|
|
139
139
|
ocrRecognizingRef: ut
|
|
140
140
|
} = qe({
|
|
141
|
-
ocrRecognize:
|
|
142
|
-
onChange:
|
|
143
|
-
updateTextLayers:
|
|
144
|
-
canvas:
|
|
145
|
-
updateOCRLoadingIcon:
|
|
146
|
-
rectMapRef:
|
|
147
|
-
textLayersMapRef:
|
|
148
|
-
textLayoutContentMapRef:
|
|
141
|
+
ocrRecognize: Te,
|
|
142
|
+
onChange: x,
|
|
143
|
+
updateTextLayers: b,
|
|
144
|
+
canvas: t,
|
|
145
|
+
updateOCRLoadingIcon: ke,
|
|
146
|
+
rectMapRef: a,
|
|
147
|
+
textLayersMapRef: m,
|
|
148
|
+
textLayoutContentMapRef: Y
|
|
149
149
|
}), {
|
|
150
150
|
updateRegionShapeAndImage: ae
|
|
151
151
|
} = $e({
|
|
152
|
-
canvas:
|
|
152
|
+
canvas: t,
|
|
153
153
|
image: D,
|
|
154
154
|
draggable: E,
|
|
155
|
-
canvasToImageCoords:
|
|
155
|
+
canvasToImageCoords: y,
|
|
156
156
|
imageToCanvasCoords: $,
|
|
157
157
|
cropRegionImage: ie,
|
|
158
|
-
onChange:
|
|
158
|
+
onChange: x,
|
|
159
159
|
onRegionChange: H,
|
|
160
160
|
performOCRIfNeeded: ce,
|
|
161
|
-
updateTextLayers:
|
|
162
|
-
rectMapRef:
|
|
161
|
+
updateTextLayers: b,
|
|
162
|
+
rectMapRef: a,
|
|
163
163
|
regionNameTextMapRef: C,
|
|
164
|
-
ocrLoadingIconMapRef:
|
|
164
|
+
ocrLoadingIconMapRef: k
|
|
165
165
|
});
|
|
166
|
-
|
|
166
|
+
h(() => {
|
|
167
167
|
L();
|
|
168
|
-
}, [L]),
|
|
169
|
-
|
|
170
|
-
o.forEach((
|
|
171
|
-
|
|
168
|
+
}, [L]), h(() => {
|
|
169
|
+
t && (m.current.forEach((o) => {
|
|
170
|
+
o.forEach((e) => {
|
|
171
|
+
e.off("mousedown"), e.off("mouseover"), e.off("mouseout"), t.remove(e), Y.current.delete(e);
|
|
172
172
|
});
|
|
173
|
-
}),
|
|
174
|
-
|
|
175
|
-
}), C.current.clear(),
|
|
176
|
-
|
|
177
|
-
}),
|
|
178
|
-
|
|
179
|
-
}),
|
|
180
|
-
}, [
|
|
181
|
-
if (!
|
|
173
|
+
}), m.current.clear(), C.current.forEach((o) => {
|
|
174
|
+
t.remove(o);
|
|
175
|
+
}), C.current.clear(), k.current.forEach((o) => {
|
|
176
|
+
t.remove(o);
|
|
177
|
+
}), k.current.clear(), a.current.forEach((o, e) => {
|
|
178
|
+
e.off("modified"), e.off("moved"), t.remove(e);
|
|
179
|
+
}), a.current.clear(), ne.current = !1, oe.current = void 0, t.renderAll());
|
|
180
|
+
}, [t, s == null ? void 0 : s.id]), h(() => {
|
|
181
|
+
if (!T.current)
|
|
182
182
|
return;
|
|
183
183
|
W.current = {
|
|
184
|
-
width:
|
|
185
|
-
height:
|
|
184
|
+
width: T.current.offsetWidth,
|
|
185
|
+
height: T.current.offsetHeight
|
|
186
186
|
};
|
|
187
187
|
const o = new ResizeObserver(() => {
|
|
188
|
-
if (!
|
|
188
|
+
if (!T.current || se.current)
|
|
189
189
|
return;
|
|
190
|
-
if (
|
|
191
|
-
const
|
|
192
|
-
if (Math.abs(
|
|
190
|
+
if (t) {
|
|
191
|
+
const d = t.getZoom();
|
|
192
|
+
if (Math.abs(d - p) > st)
|
|
193
193
|
return;
|
|
194
194
|
}
|
|
195
|
-
const
|
|
196
|
-
(
|
|
197
|
-
width:
|
|
195
|
+
const e = T.current.offsetWidth, r = T.current.offsetHeight, n = W.current.width, i = W.current.height;
|
|
196
|
+
(e !== n || r !== i) && (W.current = {
|
|
197
|
+
width: e,
|
|
198
198
|
height: r
|
|
199
199
|
}, L());
|
|
200
200
|
});
|
|
201
|
-
return o.observe(
|
|
201
|
+
return o.observe(T.current), () => {
|
|
202
202
|
o.disconnect();
|
|
203
203
|
};
|
|
204
|
-
}, [L,
|
|
205
|
-
c || (
|
|
204
|
+
}, [L, t, p]), X("ctrl", () => {
|
|
205
|
+
c || (v && (I(!1), w()), _(!0));
|
|
206
206
|
}, {
|
|
207
207
|
events: ["keydown"]
|
|
208
|
-
}),
|
|
208
|
+
}), X("ctrl", () => {
|
|
209
209
|
c || _(!1);
|
|
210
210
|
}, {
|
|
211
211
|
events: ["keyup"]
|
|
212
|
-
}),
|
|
213
|
-
if (!
|
|
212
|
+
}), h(() => {
|
|
213
|
+
if (!t)
|
|
214
214
|
return;
|
|
215
|
-
const o = ft / p,
|
|
216
|
-
|
|
215
|
+
const o = ft / p, e = /* @__PURE__ */ new Set();
|
|
216
|
+
m.current.forEach((r) => {
|
|
217
217
|
r.forEach((n) => {
|
|
218
|
-
|
|
218
|
+
e.add(n);
|
|
219
219
|
});
|
|
220
|
-
}),
|
|
221
|
-
r instanceof U.Rect && !
|
|
220
|
+
}), t.getObjects().forEach((r) => {
|
|
221
|
+
r instanceof U.Rect && !e.has(r) && r.set({
|
|
222
222
|
strokeWidth: o,
|
|
223
223
|
strokeUniform: !0,
|
|
224
224
|
objectCaching: !1,
|
|
@@ -226,7 +226,7 @@ const Wt = ({
|
|
|
226
226
|
statefullCache: !1,
|
|
227
227
|
noScaleCache: !1
|
|
228
228
|
});
|
|
229
|
-
}),
|
|
229
|
+
}), m.current.forEach((r) => {
|
|
230
230
|
r.forEach((n) => {
|
|
231
231
|
n.set({
|
|
232
232
|
fill: it,
|
|
@@ -243,21 +243,21 @@ const Wt = ({
|
|
|
243
243
|
});
|
|
244
244
|
});
|
|
245
245
|
}), C.current.forEach((r, n) => {
|
|
246
|
-
const i = n.left || 0,
|
|
246
|
+
const i = n.left || 0, d = n.top || 0;
|
|
247
247
|
r.set({
|
|
248
248
|
left: i,
|
|
249
249
|
// 与标注框左边对齐
|
|
250
|
-
top:
|
|
250
|
+
top: d,
|
|
251
251
|
// 下边缘与标注框上边缘对齐(因为 originY 是 'bottom')
|
|
252
252
|
scaleX: 1 / p,
|
|
253
253
|
// 反向缩放,抵消画布缩放
|
|
254
254
|
scaleY: 1 / p
|
|
255
255
|
// 反向缩放,抵消画布缩放
|
|
256
256
|
});
|
|
257
|
-
const
|
|
258
|
-
if (
|
|
257
|
+
const f = k.current.get(n);
|
|
258
|
+
if (f) {
|
|
259
259
|
const N = n.getScaledWidth();
|
|
260
|
-
n.getScaledHeight(),
|
|
260
|
+
n.getScaledHeight(), f.set({
|
|
261
261
|
left: i,
|
|
262
262
|
// top 位置由动画控制,这里不更新
|
|
263
263
|
scaleX: 1 / p,
|
|
@@ -265,54 +265,54 @@ const Wt = ({
|
|
|
265
265
|
scaleY: 1 / p
|
|
266
266
|
// 反向缩放,抵消画布缩放,保持固定视觉粗细
|
|
267
267
|
});
|
|
268
|
-
const M =
|
|
268
|
+
const M = f.getObjects();
|
|
269
269
|
if (M && M.length > 0) {
|
|
270
|
-
const
|
|
270
|
+
const j = N * p;
|
|
271
271
|
M.forEach((z) => {
|
|
272
|
-
z instanceof U.Rect && z.set("width",
|
|
272
|
+
z instanceof U.Rect && z.set("width", j);
|
|
273
273
|
});
|
|
274
274
|
}
|
|
275
275
|
}
|
|
276
|
-
}),
|
|
277
|
-
}, [
|
|
278
|
-
canvas:
|
|
276
|
+
}), t.renderAll();
|
|
277
|
+
}, [t, p]), Be({
|
|
278
|
+
canvas: t,
|
|
279
279
|
draggable: E,
|
|
280
|
-
drawingMode:
|
|
281
|
-
textLayersMapRef:
|
|
280
|
+
drawingMode: v,
|
|
281
|
+
textLayersMapRef: m
|
|
282
282
|
});
|
|
283
283
|
const {
|
|
284
284
|
performDelete: B
|
|
285
285
|
} = Je({
|
|
286
|
-
canvas:
|
|
286
|
+
canvas: t,
|
|
287
287
|
onRegionChange: H,
|
|
288
288
|
updateRegionNames: Me,
|
|
289
|
-
rectMapRef:
|
|
290
|
-
textLayersMapRef:
|
|
291
|
-
textLayoutContentMapRef:
|
|
289
|
+
rectMapRef: a,
|
|
290
|
+
textLayersMapRef: m,
|
|
291
|
+
textLayoutContentMapRef: Y,
|
|
292
292
|
regionNameTextMapRef: C,
|
|
293
|
-
ocrLoadingIconMapRef:
|
|
293
|
+
ocrLoadingIconMapRef: k
|
|
294
294
|
}), {
|
|
295
295
|
createDeleteControl: G
|
|
296
296
|
} = Qe({
|
|
297
297
|
performDelete: B
|
|
298
298
|
});
|
|
299
299
|
Ge({
|
|
300
|
-
canvas:
|
|
300
|
+
canvas: t,
|
|
301
301
|
onRegionSelect: J,
|
|
302
302
|
createDeleteControl: G,
|
|
303
|
-
textLayersMapRef:
|
|
304
|
-
rectMapRef:
|
|
303
|
+
textLayersMapRef: m,
|
|
304
|
+
rectMapRef: a
|
|
305
305
|
});
|
|
306
306
|
const {
|
|
307
|
-
stopDraw:
|
|
307
|
+
stopDraw: w
|
|
308
308
|
} = ze({
|
|
309
|
-
canvas:
|
|
310
|
-
drawingMode:
|
|
309
|
+
canvas: t,
|
|
310
|
+
drawingMode: v,
|
|
311
311
|
draggable: E,
|
|
312
312
|
setDrawingMode: I,
|
|
313
|
-
canvasToImageCoords:
|
|
314
|
-
labelDefinitions:
|
|
315
|
-
onChange:
|
|
313
|
+
canvasToImageCoords: y,
|
|
314
|
+
labelDefinitions: l,
|
|
315
|
+
onChange: x,
|
|
316
316
|
cropRegionImage: ie,
|
|
317
317
|
updateRegionShapeAndImage: ae,
|
|
318
318
|
performOCRIfNeeded: ce,
|
|
@@ -320,19 +320,19 @@ const Wt = ({
|
|
|
320
320
|
updateRegionNameText: O,
|
|
321
321
|
onRegionChange: H,
|
|
322
322
|
onRegionSelect: J,
|
|
323
|
-
rectMapRef:
|
|
324
|
-
textLayersMapRef:
|
|
323
|
+
rectMapRef: a,
|
|
324
|
+
textLayersMapRef: m
|
|
325
325
|
});
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
}, [
|
|
329
|
-
c && (_(!0), I(!1),
|
|
330
|
-
}, [c,
|
|
331
|
-
if (!
|
|
326
|
+
h(() => {
|
|
327
|
+
g && (I(!1), w());
|
|
328
|
+
}, [g, w]), h(() => {
|
|
329
|
+
c && (_(!0), I(!1), w());
|
|
330
|
+
}, [c, w]), h(() => {
|
|
331
|
+
if (!t)
|
|
332
332
|
return;
|
|
333
333
|
const o = () => {
|
|
334
|
-
|
|
335
|
-
|
|
334
|
+
t.getObjects().forEach((e) => {
|
|
335
|
+
e instanceof U.Rect && e.selectable && (e.set({
|
|
336
336
|
lockMovementX: c,
|
|
337
337
|
lockMovementY: c,
|
|
338
338
|
lockScalingX: c,
|
|
@@ -340,125 +340,140 @@ const Wt = ({
|
|
|
340
340
|
hasControls: !c
|
|
341
341
|
// 在只读模式下,如果有 activeLabelValue,我们可能希望它保持选中状态
|
|
342
342
|
// 但不允许用户通过点击来取消选中或选中其他(这个由 canvas.selection 控制)
|
|
343
|
-
}), c &&
|
|
344
|
-
}),
|
|
343
|
+
}), c && e.controls);
|
|
344
|
+
}), t.requestRenderAll();
|
|
345
345
|
};
|
|
346
|
-
return o(),
|
|
347
|
-
|
|
346
|
+
return o(), t.on("object:added", o), () => {
|
|
347
|
+
t.off("object:added", o);
|
|
348
348
|
};
|
|
349
|
-
}, [
|
|
350
|
-
canvas:
|
|
349
|
+
}, [t, c]), He({
|
|
350
|
+
canvas: t,
|
|
351
351
|
sample: s,
|
|
352
352
|
image: D,
|
|
353
353
|
bgImagePosition: K,
|
|
354
354
|
canvasInitializedRef: re,
|
|
355
|
-
bgImagePositionRef:
|
|
355
|
+
bgImagePositionRef: F,
|
|
356
356
|
sampleRef: oe,
|
|
357
357
|
labelsLoadedRef: ne,
|
|
358
|
-
rectMapRef:
|
|
359
|
-
textLayersMapRef:
|
|
360
|
-
textLayoutContentMapRef:
|
|
358
|
+
rectMapRef: a,
|
|
359
|
+
textLayersMapRef: m,
|
|
360
|
+
textLayoutContentMapRef: Y,
|
|
361
361
|
regionNameTextMapRef: C,
|
|
362
|
-
ocrLoadingIconMapRef:
|
|
362
|
+
ocrLoadingIconMapRef: k,
|
|
363
363
|
imageToCanvasCoords: $,
|
|
364
364
|
updateRegionShapeAndImage: ae,
|
|
365
365
|
createDeleteControl: G,
|
|
366
366
|
updateRegionNameText: O,
|
|
367
|
-
updateTextLayers:
|
|
368
|
-
}),
|
|
369
|
-
if (!
|
|
367
|
+
updateTextLayers: b
|
|
368
|
+
}), h(() => {
|
|
369
|
+
if (!u || u.length === 0)
|
|
370
370
|
return;
|
|
371
371
|
let o = !1;
|
|
372
|
-
|
|
373
|
-
var
|
|
374
|
-
const n =
|
|
372
|
+
a.current.forEach((e, r) => {
|
|
373
|
+
var d, f;
|
|
374
|
+
const n = u.find((N) => N.id === e.id);
|
|
375
375
|
if (!n)
|
|
376
376
|
return;
|
|
377
|
-
const i = he(q(q({},
|
|
377
|
+
const i = he(q(q({}, e), n), {
|
|
378
378
|
// Keep shape from canvas to avoid desync
|
|
379
|
-
shape:
|
|
380
|
-
image: (
|
|
381
|
-
textLayouts: (
|
|
379
|
+
shape: e.shape,
|
|
380
|
+
image: (d = n.image) != null ? d : e.image,
|
|
381
|
+
textLayouts: (f = n.textLayouts) != null ? f : e.textLayouts
|
|
382
382
|
});
|
|
383
|
-
(i.name !==
|
|
384
|
-
}), o && (
|
|
385
|
-
}, [
|
|
386
|
-
canvas:
|
|
387
|
-
drawingMode:
|
|
383
|
+
(i.name !== e.name || i.content !== e.content || i.image !== e.image || i.textLayouts !== e.textLayouts) && (a.current.set(r, i), i.name !== e.name && O(r, i), o = !0);
|
|
384
|
+
}), o && (t == null || t.renderAll());
|
|
385
|
+
}, [u, t, O]), et({
|
|
386
|
+
canvas: t,
|
|
387
|
+
drawingMode: v,
|
|
388
388
|
draggable: E,
|
|
389
|
-
textLayersMapRef:
|
|
390
|
-
}),
|
|
391
|
-
if (
|
|
389
|
+
textLayersMapRef: m
|
|
390
|
+
}), h(() => {
|
|
391
|
+
if (t && Q === null) {
|
|
392
392
|
const o = /* @__PURE__ */ new Set();
|
|
393
|
-
|
|
393
|
+
m.current.forEach((r) => {
|
|
394
394
|
r.forEach((n) => {
|
|
395
395
|
o.add(n);
|
|
396
396
|
});
|
|
397
|
-
}),
|
|
397
|
+
}), t.getObjects().forEach((r) => {
|
|
398
398
|
r instanceof U.Rect && !o.has(r) && r.set({
|
|
399
399
|
fill: at
|
|
400
400
|
// 移除填充色
|
|
401
401
|
});
|
|
402
|
-
}),
|
|
402
|
+
}), t.getActiveObject() && (t.discardActiveObject(), t.renderAll());
|
|
403
403
|
}
|
|
404
|
-
}, [
|
|
404
|
+
}, [t, Q]), h(() => {
|
|
405
405
|
var r;
|
|
406
|
-
if (!
|
|
406
|
+
if (!t)
|
|
407
407
|
return;
|
|
408
|
-
const o = (r =
|
|
409
|
-
let
|
|
410
|
-
|
|
411
|
-
const
|
|
412
|
-
if (
|
|
413
|
-
const
|
|
408
|
+
const o = (r = g == null ? void 0 : g.region) == null ? void 0 : r.id;
|
|
409
|
+
let e = !1;
|
|
410
|
+
m.current.forEach((n, i) => {
|
|
411
|
+
const d = a.current.get(i);
|
|
412
|
+
if (d && n.length > 0) {
|
|
413
|
+
const f = o === d.id;
|
|
414
414
|
n.forEach((N) => {
|
|
415
|
-
N.visible !==
|
|
416
|
-
visible:
|
|
417
|
-
}),
|
|
415
|
+
N.visible !== f && (N.set({
|
|
416
|
+
visible: f
|
|
417
|
+
}), e = !0);
|
|
418
418
|
});
|
|
419
419
|
}
|
|
420
|
-
}),
|
|
421
|
-
}, [
|
|
422
|
-
|
|
420
|
+
}), e && t.renderAll();
|
|
421
|
+
}, [t, g]), h(() => {
|
|
422
|
+
var n, i;
|
|
423
|
+
if (!t)
|
|
423
424
|
return;
|
|
424
|
-
const o = (
|
|
425
|
+
const o = (n = g == null ? void 0 : g.region) == null ? void 0 : n.id;
|
|
426
|
+
if (!o)
|
|
427
|
+
return;
|
|
428
|
+
let e = null;
|
|
429
|
+
if (a.current.forEach((d, f) => {
|
|
430
|
+
d.id === o && (e = f);
|
|
431
|
+
}), !e)
|
|
432
|
+
return;
|
|
433
|
+
e.bringToFront(), ((i = m.current.get(e)) != null ? i : []).forEach((d) => {
|
|
434
|
+
d.bringToFront();
|
|
435
|
+
}), t.renderAll();
|
|
436
|
+
}, [t, g, a, m]), h(() => {
|
|
437
|
+
if (!t || !g || !Z)
|
|
438
|
+
return;
|
|
439
|
+
const o = (e) => {
|
|
425
440
|
var de;
|
|
426
|
-
const r = (de =
|
|
441
|
+
const r = (de = e.e) == null ? void 0 : de.target;
|
|
427
442
|
if ((r == null ? void 0 : r.tagName) === "INPUT" || (r == null ? void 0 : r.tagName) === "TEXTAREA")
|
|
428
443
|
return;
|
|
429
|
-
const n =
|
|
444
|
+
const n = t.getPointer(e.e), i = n.x, d = n.y, f = y(i, d), N = g.region, {
|
|
430
445
|
x: M,
|
|
431
|
-
y,
|
|
446
|
+
y: j,
|
|
432
447
|
width: z,
|
|
433
448
|
height: Le
|
|
434
449
|
} = N.shape;
|
|
435
|
-
|
|
450
|
+
f.x >= M && f.x <= M + z && f.y >= j && f.y <= j + Le || Z();
|
|
436
451
|
};
|
|
437
|
-
return
|
|
438
|
-
|
|
452
|
+
return t.on("mouse:down", o), () => {
|
|
453
|
+
t.off("mouse:down", o);
|
|
439
454
|
};
|
|
440
|
-
}, [
|
|
455
|
+
}, [t, g, Z, y]);
|
|
441
456
|
const fe = P((o) => {
|
|
442
|
-
const
|
|
443
|
-
if ((
|
|
457
|
+
const e = o.target;
|
|
458
|
+
if ((e == null ? void 0 : e.tagName) === "INPUT" || (e == null ? void 0 : e.tagName) === "TEXTAREA" || !t || c)
|
|
444
459
|
return;
|
|
445
|
-
const r =
|
|
460
|
+
const r = t.getActiveObject();
|
|
446
461
|
!r || !(r instanceof U.Rect) || B(r);
|
|
447
|
-
}, [
|
|
448
|
-
|
|
449
|
-
const
|
|
450
|
-
(
|
|
462
|
+
}, [t, B]);
|
|
463
|
+
X("Delete", fe), X("Backspace", fe), X("r", (o) => {
|
|
464
|
+
const e = o.target;
|
|
465
|
+
(e == null ? void 0 : e.tagName) === "INPUT" || (e == null ? void 0 : e.tagName) === "TEXTAREA" || e != null && e.isContentEditable || c || !v && !E && I(!0);
|
|
451
466
|
}, {
|
|
452
467
|
exactMatch: !1
|
|
453
468
|
// 允许大小写
|
|
454
469
|
});
|
|
455
470
|
const De = () => {
|
|
456
|
-
c || (
|
|
471
|
+
c || (v && (I(!1), w()), _(!E));
|
|
457
472
|
}, _e = () => {
|
|
458
|
-
c || (E && _(!1), I(!
|
|
473
|
+
c || (E && _(!1), I(!v));
|
|
459
474
|
};
|
|
460
|
-
return
|
|
461
|
-
|
|
475
|
+
return h(() => () => {
|
|
476
|
+
t && t.dispose();
|
|
462
477
|
}, []), /* @__PURE__ */ Re("div", {
|
|
463
478
|
style: {
|
|
464
479
|
width: "100%",
|
|
@@ -466,15 +481,15 @@ const Wt = ({
|
|
|
466
481
|
display: "flex",
|
|
467
482
|
position: "relative"
|
|
468
483
|
},
|
|
469
|
-
children: [
|
|
484
|
+
children: [ve && /* @__PURE__ */ S("div", {
|
|
470
485
|
className: "vlm-loading-overlay",
|
|
471
486
|
children: /* @__PURE__ */ S("div", {
|
|
472
487
|
className: "vlm-loading-spinner"
|
|
473
488
|
})
|
|
474
489
|
}), /* @__PURE__ */ S("div", {
|
|
475
490
|
className: "vlm-marker-toolbar",
|
|
476
|
-
children: /* @__PURE__ */ S(
|
|
477
|
-
drawingMode:
|
|
491
|
+
children: /* @__PURE__ */ S(ye, {
|
|
492
|
+
drawingMode: v,
|
|
478
493
|
draggable: E,
|
|
479
494
|
scale: p,
|
|
480
495
|
onToggleDrawingMode: _e,
|
|
@@ -484,7 +499,7 @@ const Wt = ({
|
|
|
484
499
|
readOnly: c
|
|
485
500
|
})
|
|
486
501
|
}), /* @__PURE__ */ Re("div", {
|
|
487
|
-
ref:
|
|
502
|
+
ref: T,
|
|
488
503
|
className: Oe({
|
|
489
504
|
"vlm-label-maker-wrap": !0,
|
|
490
505
|
draggable: E
|