@searpent/react-image-annotate 2.0.10 → 2.0.13
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/Annotator/examplePhotos.js +6 -0
- package/Annotator/index.js +97 -74
- package/Annotator/reducers/general-reducer.js +16 -0
- package/GroupsEditorSidebarBox/index.js +137 -0
- package/ImageCanvas/index.js +3 -0
- package/MainLayout/index.js +15 -9
- package/PageSelector/index.js +60 -10
- package/PageSelector/page-selector.css +109 -7
- package/RegionLabel/index.js +31 -5
- package/RegionSelectAndTransformBoxes/index.js +4 -2
- package/RegionSelectorSidebarBox/index.js +7 -1
- package/RegionShapes/index.js +1 -1
- package/RegionTags/index.js +2 -0
- package/hooks/use-colors.js +3 -28
- package/package.json +1 -1
|
@@ -776,6 +776,12 @@ var examplePhotos = [{
|
|
|
776
776
|
"metadata": [{
|
|
777
777
|
"key": "page",
|
|
778
778
|
"value": "1"
|
|
779
|
+
}, {
|
|
780
|
+
"key": "section",
|
|
781
|
+
"value": "lokální zpravodajství"
|
|
782
|
+
}, {
|
|
783
|
+
"key": "mutation",
|
|
784
|
+
"value": "hřensko"
|
|
779
785
|
}]
|
|
780
786
|
}, {
|
|
781
787
|
"id": "431fc636-d6d1-4e20-a35b-cc7a201c1833",
|
package/Annotator/index.js
CHANGED
|
@@ -13,68 +13,82 @@ import historyHandler from "./reducers/history-handler.js";
|
|
|
13
13
|
import imageReducer from "./reducers/image-reducer.js";
|
|
14
14
|
import useEventCallback from "use-event-callback";
|
|
15
15
|
import videoReducer from "./reducers/video-reducer.js";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
16
|
+
|
|
17
|
+
function extractAllowedGroups(images) {
|
|
18
|
+
var allowedGroups = [];
|
|
19
|
+
images.forEach(function (image) {
|
|
20
|
+
return image.regions.forEach(function (_ref) {
|
|
21
|
+
var groupId = _ref.groupId;
|
|
22
|
+
|
|
23
|
+
if (!allowedGroups.includes(groupId)) {
|
|
24
|
+
allowedGroups.push(groupId);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
return allowedGroups;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export var Annotator = function Annotator(_ref2) {
|
|
32
|
+
var images = _ref2.images,
|
|
33
|
+
allowedArea = _ref2.allowedArea,
|
|
34
|
+
_ref2$selectedImage = _ref2.selectedImage,
|
|
35
|
+
selectedImage = _ref2$selectedImage === void 0 ? images && images.length > 0 ? 0 : undefined : _ref2$selectedImage,
|
|
36
|
+
showPointDistances = _ref2.showPointDistances,
|
|
37
|
+
pointDistancePrecision = _ref2.pointDistancePrecision,
|
|
38
|
+
_ref2$showTags = _ref2.showTags,
|
|
39
|
+
showTags = _ref2$showTags === void 0 ? getFromLocalStorage("showTags", true) : _ref2$showTags,
|
|
40
|
+
_ref2$enabledTools = _ref2.enabledTools,
|
|
41
|
+
enabledTools = _ref2$enabledTools === void 0 ? ["select", "create-point", "create-box", "create-polygon", "create-line", "create-expanding-line", "show-mask"] : _ref2$enabledTools,
|
|
42
|
+
_ref2$selectedTool = _ref2.selectedTool,
|
|
43
|
+
selectedTool = _ref2$selectedTool === void 0 ? "select" : _ref2$selectedTool,
|
|
44
|
+
_ref2$regionTagList = _ref2.regionTagList,
|
|
45
|
+
regionTagList = _ref2$regionTagList === void 0 ? [] : _ref2$regionTagList,
|
|
46
|
+
_ref2$regionClsList = _ref2.regionClsList,
|
|
47
|
+
regionClsList = _ref2$regionClsList === void 0 ? [] : _ref2$regionClsList,
|
|
48
|
+
_ref2$imageTagList = _ref2.imageTagList,
|
|
49
|
+
imageTagList = _ref2$imageTagList === void 0 ? [] : _ref2$imageTagList,
|
|
50
|
+
_ref2$imageClsList = _ref2.imageClsList,
|
|
51
|
+
imageClsList = _ref2$imageClsList === void 0 ? [] : _ref2$imageClsList,
|
|
52
|
+
_ref2$keyframes = _ref2.keyframes,
|
|
53
|
+
keyframes = _ref2$keyframes === void 0 ? {} : _ref2$keyframes,
|
|
54
|
+
_ref2$taskDescription = _ref2.taskDescription,
|
|
55
|
+
taskDescription = _ref2$taskDescription === void 0 ? "" : _ref2$taskDescription,
|
|
56
|
+
_ref2$fullImageSegmen = _ref2.fullImageSegmentationMode,
|
|
57
|
+
fullImageSegmentationMode = _ref2$fullImageSegmen === void 0 ? false : _ref2$fullImageSegmen,
|
|
58
|
+
RegionEditLabel = _ref2.RegionEditLabel,
|
|
59
|
+
videoSrc = _ref2.videoSrc,
|
|
60
|
+
_ref2$videoTime = _ref2.videoTime,
|
|
61
|
+
videoTime = _ref2$videoTime === void 0 ? 0 : _ref2$videoTime,
|
|
62
|
+
videoName = _ref2.videoName,
|
|
63
|
+
onExit = _ref2.onExit,
|
|
64
|
+
onNextImage = _ref2.onNextImage,
|
|
65
|
+
onPrevImage = _ref2.onPrevImage,
|
|
66
|
+
keypointDefinitions = _ref2.keypointDefinitions,
|
|
67
|
+
_ref2$autoSegmentatio = _ref2.autoSegmentationOptions,
|
|
68
|
+
autoSegmentationOptions = _ref2$autoSegmentatio === void 0 ? {
|
|
54
69
|
type: "autoseg"
|
|
55
|
-
} :
|
|
56
|
-
hideHeader =
|
|
57
|
-
hideHeaderText =
|
|
58
|
-
hideNext =
|
|
59
|
-
hidePrev =
|
|
60
|
-
hideClone =
|
|
61
|
-
hideSettings =
|
|
62
|
-
hideFullScreen =
|
|
63
|
-
hideSave =
|
|
64
|
-
allowComments =
|
|
65
|
-
onImagesChange =
|
|
66
|
-
groups =
|
|
67
|
-
onGroupSelect =
|
|
68
|
-
hideHistory =
|
|
69
|
-
hideNotEditingLabel =
|
|
70
|
-
showEditor =
|
|
71
|
-
showPageSelector =
|
|
72
|
-
clsColors =
|
|
73
|
-
groupColors =
|
|
74
|
-
onRecalc =
|
|
75
|
-
onSave =
|
|
76
|
-
|
|
77
|
-
metadata = _ref.metadata;
|
|
70
|
+
} : _ref2$autoSegmentatio,
|
|
71
|
+
hideHeader = _ref2.hideHeader,
|
|
72
|
+
hideHeaderText = _ref2.hideHeaderText,
|
|
73
|
+
hideNext = _ref2.hideNext,
|
|
74
|
+
hidePrev = _ref2.hidePrev,
|
|
75
|
+
hideClone = _ref2.hideClone,
|
|
76
|
+
hideSettings = _ref2.hideSettings,
|
|
77
|
+
hideFullScreen = _ref2.hideFullScreen,
|
|
78
|
+
hideSave = _ref2.hideSave,
|
|
79
|
+
allowComments = _ref2.allowComments,
|
|
80
|
+
onImagesChange = _ref2.onImagesChange,
|
|
81
|
+
groups = _ref2.groups,
|
|
82
|
+
onGroupSelect = _ref2.onGroupSelect,
|
|
83
|
+
hideHistory = _ref2.hideHistory,
|
|
84
|
+
hideNotEditingLabel = _ref2.hideNotEditingLabel,
|
|
85
|
+
showEditor = _ref2.showEditor,
|
|
86
|
+
showPageSelector = _ref2.showPageSelector,
|
|
87
|
+
clsColors = _ref2.clsColors,
|
|
88
|
+
groupColors = _ref2.groupColors,
|
|
89
|
+
onRecalc = _ref2.onRecalc,
|
|
90
|
+
onSave = _ref2.onSave,
|
|
91
|
+
metadata = _ref2.metadata;
|
|
78
92
|
|
|
79
93
|
if (typeof selectedImage === "string") {
|
|
80
94
|
selectedImage = (images || []).findIndex(function (img) {
|
|
@@ -83,6 +97,7 @@ export var Annotator = function Annotator(_ref) {
|
|
|
83
97
|
if (selectedImage === -1) selectedImage = undefined;
|
|
84
98
|
}
|
|
85
99
|
|
|
100
|
+
var allowedGroups = extractAllowedGroups(images);
|
|
86
101
|
var annotationType = images ? "image" : "video";
|
|
87
102
|
|
|
88
103
|
var _useReducer = useReducer(historyHandler(combineReducers(annotationType === "image" ? imageReducer : videoReducer, generalReducer)), makeImmutable(_objectSpread({
|
|
@@ -118,7 +133,8 @@ export var Annotator = function Annotator(_ref) {
|
|
|
118
133
|
}, {
|
|
119
134
|
imagesUpdatedAt: null,
|
|
120
135
|
imagesSavedAt: null,
|
|
121
|
-
metadata: metadata
|
|
136
|
+
metadata: metadata,
|
|
137
|
+
allowedGroups: allowedGroups || []
|
|
122
138
|
}))),
|
|
123
139
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
124
140
|
state = _useReducer2[0],
|
|
@@ -147,7 +163,7 @@ export var Annotator = function Annotator(_ref) {
|
|
|
147
163
|
var handleSaveClick =
|
|
148
164
|
/*#__PURE__*/
|
|
149
165
|
function () {
|
|
150
|
-
var
|
|
166
|
+
var _ref3 = _asyncToGenerator(
|
|
151
167
|
/*#__PURE__*/
|
|
152
168
|
_regeneratorRuntime.mark(function _callee(e) {
|
|
153
169
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
@@ -179,7 +195,7 @@ export var Annotator = function Annotator(_ref) {
|
|
|
179
195
|
}));
|
|
180
196
|
|
|
181
197
|
return function handleSaveClick(_x) {
|
|
182
|
-
return
|
|
198
|
+
return _ref3.apply(this, arguments);
|
|
183
199
|
};
|
|
184
200
|
}();
|
|
185
201
|
|
|
@@ -191,16 +207,23 @@ export var Annotator = function Annotator(_ref) {
|
|
|
191
207
|
}
|
|
192
208
|
};
|
|
193
209
|
|
|
194
|
-
var handleMetadataChange = function handleMetadataChange(
|
|
195
|
-
var name =
|
|
196
|
-
value =
|
|
197
|
-
imageIndex =
|
|
210
|
+
var handleMetadataChange = function handleMetadataChange(_ref4) {
|
|
211
|
+
var name = _ref4.name,
|
|
212
|
+
value = _ref4.value,
|
|
213
|
+
imageIndex = _ref4.imageIndex;
|
|
198
214
|
dispatchToReducer({
|
|
199
215
|
type: "UPDATE_METADATA",
|
|
200
216
|
name: name,
|
|
201
217
|
value: value,
|
|
202
218
|
imageIndex: imageIndex
|
|
203
219
|
});
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
var handleAddGroup = function handleAddGroup(group) {
|
|
223
|
+
dispatchToReducer({
|
|
224
|
+
type: "ADD_GROUP",
|
|
225
|
+
group: group
|
|
226
|
+
});
|
|
204
227
|
}; // trigger this on every BBox manipulation (there is currently no way to detect adding of new box!)
|
|
205
228
|
|
|
206
229
|
|
|
@@ -228,10 +251,10 @@ export var Annotator = function Annotator(_ref) {
|
|
|
228
251
|
}, [onImagesChange, selectedImage]);
|
|
229
252
|
if (!images && !videoSrc) return 'Missing required prop "images" or "videoSrc"';
|
|
230
253
|
|
|
231
|
-
var
|
|
232
|
-
|
|
233
|
-
recalcActive =
|
|
234
|
-
saveActive =
|
|
254
|
+
var _ref5 = state.imagesSavedAt < state.imagesUpdatedAt ? [true, true] : [false, false],
|
|
255
|
+
_ref6 = _slicedToArray(_ref5, 2),
|
|
256
|
+
recalcActive = _ref6[0],
|
|
257
|
+
saveActive = _ref6[1];
|
|
235
258
|
|
|
236
259
|
return React.createElement(SettingsProvider, {
|
|
237
260
|
clsColors: clsColors,
|
|
@@ -261,8 +284,8 @@ export var Annotator = function Annotator(_ref) {
|
|
|
261
284
|
onSave: handleSaveClick,
|
|
262
285
|
saveActive: recalcActive,
|
|
263
286
|
recalcActive: saveActive,
|
|
264
|
-
|
|
265
|
-
|
|
287
|
+
onMetadataChange: handleMetadataChange,
|
|
288
|
+
onAddGroup: handleAddGroup
|
|
266
289
|
}));
|
|
267
290
|
};
|
|
268
291
|
export default Annotator;
|
|
@@ -926,6 +926,15 @@ export default (function (state, action) {
|
|
|
926
926
|
}));
|
|
927
927
|
}
|
|
928
928
|
|
|
929
|
+
case "DELETE_GROUP":
|
|
930
|
+
{
|
|
931
|
+
var groupId = action.groupId;
|
|
932
|
+
if (groupId === null || groupId === undefined) return state;
|
|
933
|
+
return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), (activeImage.regions || []).filter(function (r) {
|
|
934
|
+
return r.groupId !== groupId;
|
|
935
|
+
}));
|
|
936
|
+
}
|
|
937
|
+
|
|
929
938
|
case "DELETE_SELECTED_REGION":
|
|
930
939
|
{
|
|
931
940
|
return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), (activeImage.regions || []).filter(function (r) {
|
|
@@ -1144,6 +1153,13 @@ export default (function (state, action) {
|
|
|
1144
1153
|
}
|
|
1145
1154
|
}
|
|
1146
1155
|
|
|
1156
|
+
case "ADD_GROUP":
|
|
1157
|
+
{
|
|
1158
|
+
var group = action.group;
|
|
1159
|
+
var newAllowedGroups = [].concat(_toConsumableArray(state.allowedGroups), [group]);
|
|
1160
|
+
return setIn(state, ["allowedGroups"], newAllowedGroups);
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1147
1163
|
default:
|
|
1148
1164
|
break;
|
|
1149
1165
|
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import React, { memo, useState } from "react";
|
|
3
|
+
import SidebarBoxContainer from "../SidebarBoxContainer";
|
|
4
|
+
import FilterNoneIcon from '@mui/icons-material/FilterNone';
|
|
5
|
+
import { styled } from "@mui/material/styles";
|
|
6
|
+
import { createTheme, ThemeProvider } from "@mui/material/styles";
|
|
7
|
+
import { grey } from "@mui/material/colors";
|
|
8
|
+
var theme = createTheme();
|
|
9
|
+
var GroupItemDiv = styled("div")(function (_ref) {
|
|
10
|
+
var theme = _ref.theme;
|
|
11
|
+
return {
|
|
12
|
+
display: "flex",
|
|
13
|
+
flexDirection: "column",
|
|
14
|
+
marginBottom: "1rem",
|
|
15
|
+
"& > label": {
|
|
16
|
+
fontSize: "1rem",
|
|
17
|
+
marginBottom: ".5rem",
|
|
18
|
+
textTransform: "capitalize"
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
var GroupItem = function GroupItem(_ref2) {
|
|
24
|
+
var group = _ref2.group;
|
|
25
|
+
return React.createElement(GroupItemDiv, null, group);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
var GroupList = function GroupList(_ref3) {
|
|
29
|
+
var groups = _ref3.groups;
|
|
30
|
+
return React.createElement("div", null, React.createElement("h2", null, "Groups"), groups.map(function (g) {
|
|
31
|
+
return React.createElement(GroupItem, {
|
|
32
|
+
key: g,
|
|
33
|
+
group: g
|
|
34
|
+
});
|
|
35
|
+
}));
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
var AddGroupFormDiv = styled("div")(function (_ref4) {
|
|
39
|
+
var theme = _ref4.theme;
|
|
40
|
+
return {
|
|
41
|
+
display: "flex",
|
|
42
|
+
flexDirection: "row"
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
var AddGroupFrom = function AddGroupFrom(_ref5) {
|
|
47
|
+
var onAddGroup = _ref5.onAddGroup;
|
|
48
|
+
|
|
49
|
+
var _useState = useState(""),
|
|
50
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
51
|
+
value = _useState2[0],
|
|
52
|
+
setValue = _useState2[1];
|
|
53
|
+
|
|
54
|
+
var handleChange = function handleChange(e) {
|
|
55
|
+
setValue(e.target.value);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
var handleSubmit = function handleSubmit(e) {
|
|
59
|
+
e.preventDefault();
|
|
60
|
+
onAddGroup(value);
|
|
61
|
+
setValue('');
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
return React.createElement(AddGroupFormDiv, null, React.createElement("form", {
|
|
65
|
+
onSubmit: handleSubmit,
|
|
66
|
+
style: {
|
|
67
|
+
display: "flex",
|
|
68
|
+
paddingRight: "6px"
|
|
69
|
+
}
|
|
70
|
+
}, React.createElement("input", {
|
|
71
|
+
type: "text",
|
|
72
|
+
value: value,
|
|
73
|
+
name: "new-group",
|
|
74
|
+
placeholder: "New group name",
|
|
75
|
+
onChange: handleChange,
|
|
76
|
+
style: {
|
|
77
|
+
marginRight: "1rem"
|
|
78
|
+
}
|
|
79
|
+
}), React.createElement("input", {
|
|
80
|
+
type: "submit",
|
|
81
|
+
value: "Create group"
|
|
82
|
+
})));
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
var DivContainer = styled("div")(function (_ref6) {
|
|
86
|
+
var theme = _ref6.theme;
|
|
87
|
+
return {
|
|
88
|
+
paddingLeft: 16,
|
|
89
|
+
paddingRight: 16,
|
|
90
|
+
fontSize: 12,
|
|
91
|
+
"& h1": {
|
|
92
|
+
fontSize: 18
|
|
93
|
+
},
|
|
94
|
+
"& h2": {
|
|
95
|
+
fontSize: 14
|
|
96
|
+
},
|
|
97
|
+
"& h3": {
|
|
98
|
+
fontSize: 12
|
|
99
|
+
},
|
|
100
|
+
"& h4": {
|
|
101
|
+
fontSize: 12
|
|
102
|
+
},
|
|
103
|
+
"& h5": {
|
|
104
|
+
fontSize: 12
|
|
105
|
+
},
|
|
106
|
+
"& h6": {
|
|
107
|
+
fontSize: 12
|
|
108
|
+
},
|
|
109
|
+
"& p": {
|
|
110
|
+
fontSize: 12
|
|
111
|
+
},
|
|
112
|
+
"& a": {},
|
|
113
|
+
"& img": {
|
|
114
|
+
width: "100%"
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
export var GroupsEditorSidebarBox = function GroupsEditorSidebarBox(_ref7) {
|
|
119
|
+
var groups = _ref7.groups,
|
|
120
|
+
onAddGroup = _ref7.onAddGroup;
|
|
121
|
+
return React.createElement(ThemeProvider, {
|
|
122
|
+
theme: theme
|
|
123
|
+
}, React.createElement(SidebarBoxContainer, {
|
|
124
|
+
title: "Groups",
|
|
125
|
+
icon: React.createElement(FilterNoneIcon, {
|
|
126
|
+
style: {
|
|
127
|
+
color: grey[700]
|
|
128
|
+
}
|
|
129
|
+
}),
|
|
130
|
+
expandedByDefault: true
|
|
131
|
+
}, React.createElement(DivContainer, null, React.createElement("h2", null, "Add new group"), React.createElement(AddGroupFrom, {
|
|
132
|
+
onAddGroup: onAddGroup
|
|
133
|
+
}), React.createElement(GroupList, {
|
|
134
|
+
groups: groups
|
|
135
|
+
}))));
|
|
136
|
+
};
|
|
137
|
+
export default memo(GroupsEditorSidebarBox);
|
package/ImageCanvas/index.js
CHANGED
|
@@ -96,6 +96,7 @@ export var ImageCanvas = function ImageCanvas(_ref2) {
|
|
|
96
96
|
onSelectRegion = _ref2.onSelectRegion,
|
|
97
97
|
onBeginMovePoint = _ref2.onBeginMovePoint,
|
|
98
98
|
onDeleteRegion = _ref2.onDeleteRegion,
|
|
99
|
+
onDeleteGroup = _ref2.onDeleteGroup,
|
|
99
100
|
onChangeVideoTime = _ref2.onChangeVideoTime,
|
|
100
101
|
onChangeVideoPlaying = _ref2.onChangeVideoPlaying,
|
|
101
102
|
onRegionClassAdded = _ref2.onRegionClassAdded,
|
|
@@ -349,6 +350,7 @@ export var ImageCanvas = function ImageCanvas(_ref2) {
|
|
|
349
350
|
onChangeRegion: onChangeRegion,
|
|
350
351
|
onCloseRegionEdit: onCloseRegionEdit,
|
|
351
352
|
onDeleteRegion: onDeleteRegion,
|
|
353
|
+
onDeleteGroup: onDeleteGroup,
|
|
352
354
|
layoutParams: layoutParams,
|
|
353
355
|
imageSrc: imageSrc,
|
|
354
356
|
RegionEditLabel: RegionEditLabel,
|
|
@@ -365,6 +367,7 @@ export var ImageCanvas = function ImageCanvas(_ref2) {
|
|
|
365
367
|
allowedTags: regionTagList,
|
|
366
368
|
onChange: onChangeRegion,
|
|
367
369
|
onDelete: onDeleteRegion,
|
|
370
|
+
onDeleteGroup: onDeleteGroup,
|
|
368
371
|
editing: true,
|
|
369
372
|
region: highlightedRegion,
|
|
370
373
|
imageSrc: imageSrc,
|
package/MainLayout/index.js
CHANGED
|
@@ -18,6 +18,7 @@ import SettingsDialog from "../SettingsDialog";
|
|
|
18
18
|
import TagsSidebarBox from "../TagsSidebarBox";
|
|
19
19
|
import TaskDescription from "../TaskDescriptionSidebarBox";
|
|
20
20
|
import MetadataEditor from "../MetadataEditorSidebarBox";
|
|
21
|
+
import GroupsEditor from "../GroupsEditorSidebarBox";
|
|
21
22
|
import Workspace from "react-material-workspace-layout/Workspace";
|
|
22
23
|
import classnames from "classnames";
|
|
23
24
|
import getActiveImage from "../Annotator/reducers/get-active-image";
|
|
@@ -32,7 +33,7 @@ import { useSettings } from "../SettingsProvider";
|
|
|
32
33
|
import { withHotKeys } from "react-hotkeys";
|
|
33
34
|
import Editor from "../Editor";
|
|
34
35
|
import regionsToBlocks from '../utils/regions-to-blocks';
|
|
35
|
-
import
|
|
36
|
+
import PageSelector from "../PageSelector"; // import Fullscreen from "../Fullscreen"
|
|
36
37
|
|
|
37
38
|
var emptyArr = [];
|
|
38
39
|
var theme = createTheme();
|
|
@@ -113,9 +114,8 @@ export var MainLayout = function MainLayout(_ref4) {
|
|
|
113
114
|
recalcActive = _ref4$recalcActive === void 0 ? false : _ref4$recalcActive,
|
|
114
115
|
_ref4$saveActive = _ref4.saveActive,
|
|
115
116
|
saveActive = _ref4$saveActive === void 0 ? false : _ref4$saveActive,
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
onMetadataChange = _ref4.onMetadataChange;
|
|
117
|
+
onMetadataChange = _ref4.onMetadataChange,
|
|
118
|
+
onAddGroup = _ref4.onAddGroup;
|
|
119
119
|
var classes = useStyles();
|
|
120
120
|
var settings = useSettings();
|
|
121
121
|
var fullScreenHandle = useFullScreenHandle();
|
|
@@ -209,6 +209,7 @@ export var MainLayout = function MainLayout(_ref4) {
|
|
|
209
209
|
onBeginRegionEdit: action("OPEN_REGION_EDITOR", "region"),
|
|
210
210
|
onCloseRegionEdit: action("CLOSE_REGION_EDITOR", "region"),
|
|
211
211
|
onDeleteRegion: action("DELETE_REGION", "region"),
|
|
212
|
+
onDeleteGroup: action("DELETE_GROUP", "groupId"),
|
|
212
213
|
onBeginBoxTransform: action("BEGIN_BOX_TRANSFORM", "box", "directions"),
|
|
213
214
|
onBeginMovePolygonPoint: action("BEGIN_MOVE_POLYGON_POINT", "polygon", "pointIndex"),
|
|
214
215
|
onBeginMoveKeypoint: action("BEGIN_MOVE_KEYPOINT", "region", "keypointId"),
|
|
@@ -223,7 +224,7 @@ export var MainLayout = function MainLayout(_ref4) {
|
|
|
223
224
|
onRegionClassAdded: onRegionClassAdded,
|
|
224
225
|
allowComments: state.allowComments,
|
|
225
226
|
hideNotEditingLabel: hideNotEditingLabel,
|
|
226
|
-
allowedGroups: allowedGroups
|
|
227
|
+
allowedGroups: state.allowedGroups
|
|
227
228
|
}));
|
|
228
229
|
var onClickIconSidebarItem = useEventCallback(function (item) {
|
|
229
230
|
dispatch({
|
|
@@ -280,7 +281,8 @@ export var MainLayout = function MainLayout(_ref4) {
|
|
|
280
281
|
isActive: idx === state.selectedImage,
|
|
281
282
|
pageNumber: (i === null || i === void 0 ? void 0 : (_i$metadata = i.metadata) === null || _i$metadata === void 0 ? void 0 : _i$metadata.find(function (md) {
|
|
282
283
|
return md.key === "page";
|
|
283
|
-
}).value) || null
|
|
284
|
+
}).value) || null,
|
|
285
|
+
metadata: i.metadata || []
|
|
284
286
|
};
|
|
285
287
|
});
|
|
286
288
|
|
|
@@ -314,13 +316,14 @@ export var MainLayout = function MainLayout(_ref4) {
|
|
|
314
316
|
display: 'flex',
|
|
315
317
|
flexDirection: 'row'
|
|
316
318
|
}
|
|
317
|
-
}, showPageSelector && React.createElement(
|
|
319
|
+
}, showPageSelector && React.createElement(PageSelector, {
|
|
318
320
|
pages: pages,
|
|
319
321
|
onPageClick: handlePageClick,
|
|
320
322
|
onRecalc: onRecalc,
|
|
321
323
|
onSave: onSave,
|
|
322
324
|
saveActive: saveActive,
|
|
323
|
-
recalcActive: recalcActive
|
|
325
|
+
recalcActive: recalcActive,
|
|
326
|
+
onMetadataChange: onMetadataChange
|
|
324
327
|
}), React.createElement(Workspace, {
|
|
325
328
|
allowFullscreen: true,
|
|
326
329
|
iconDictionary: iconDictionary,
|
|
@@ -356,7 +359,7 @@ export var MainLayout = function MainLayout(_ref4) {
|
|
|
356
359
|
onClickHeaderItem: onClickHeaderItem,
|
|
357
360
|
onClickIconSidebarItem: onClickIconSidebarItem,
|
|
358
361
|
selectedTools: [state.selectedTool, state.showTags && "show-tags", state.showMask && "show-mask"].filter(Boolean),
|
|
359
|
-
iconSidebarItems: [{
|
|
362
|
+
iconSidebarItems: !state.enabledTools ? [] : [{
|
|
360
363
|
name: "select",
|
|
361
364
|
helperText: "Select" + getHotkeyHelpText("select_tool"),
|
|
362
365
|
alwaysShowing: true
|
|
@@ -447,6 +450,9 @@ export var MainLayout = function MainLayout(_ref4) {
|
|
|
447
450
|
}), React.createElement(MetadataEditor, {
|
|
448
451
|
state: state,
|
|
449
452
|
onMetadataChange: onMetadataChange
|
|
453
|
+
}), React.createElement(GroupsEditor, {
|
|
454
|
+
groups: state.allowedGroups,
|
|
455
|
+
onAddGroup: onAddGroup
|
|
450
456
|
})].filter(Boolean)
|
|
451
457
|
}, canvas), showEditor && React.createElement(EditorWrapper, {
|
|
452
458
|
id: "editor-wrapper"
|
package/PageSelector/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import React, { useState } from 'react';
|
|
2
3
|
import classnames from "classnames";
|
|
3
4
|
|
|
4
5
|
require('./page-selector.css').toString();
|
|
@@ -25,17 +26,26 @@ function PageThumbnail(_ref) {
|
|
|
25
26
|
}, pageNumber)));
|
|
26
27
|
}
|
|
27
28
|
|
|
28
|
-
function
|
|
29
|
+
function PageSelector(_ref2) {
|
|
29
30
|
var pages = _ref2.pages,
|
|
30
31
|
onPageClick = _ref2.onPageClick,
|
|
31
32
|
onRecalc = _ref2.onRecalc,
|
|
32
33
|
onSave = _ref2.onSave,
|
|
33
34
|
recalcActive = _ref2.recalcActive,
|
|
34
|
-
saveActive = _ref2.saveActive
|
|
35
|
+
saveActive = _ref2.saveActive,
|
|
36
|
+
onMetadataChange = _ref2.onMetadataChange;
|
|
37
|
+
|
|
38
|
+
var _useState = useState(false),
|
|
39
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
40
|
+
showMetadata = _useState2[0],
|
|
41
|
+
setShowMetadata = _useState2[1];
|
|
42
|
+
|
|
35
43
|
return React.createElement("div", {
|
|
36
|
-
className:
|
|
44
|
+
className: classnames('page-selector', {
|
|
45
|
+
'page-selector--opened': showMetadata
|
|
46
|
+
})
|
|
37
47
|
}, React.createElement("div", {
|
|
38
|
-
className: "
|
|
48
|
+
className: "top-buttons"
|
|
39
49
|
}, React.createElement("button", {
|
|
40
50
|
onClick: onRecalc,
|
|
41
51
|
disabled: !recalcActive,
|
|
@@ -47,18 +57,58 @@ function PagesSelector(_ref2) {
|
|
|
47
57
|
}, "Save")), React.createElement("div", {
|
|
48
58
|
className: "pages"
|
|
49
59
|
}, pages.map(function (page, idx) {
|
|
50
|
-
|
|
60
|
+
var _page$metadata;
|
|
61
|
+
|
|
62
|
+
return React.createElement("div", {
|
|
63
|
+
className: "page-thumbnail__wrapper"
|
|
64
|
+
}, React.createElement(PageThumbnail, {
|
|
51
65
|
key: page.id,
|
|
52
66
|
src: page.src,
|
|
53
67
|
isActive: page.isActive,
|
|
54
68
|
onClick: function onClick() {
|
|
55
69
|
return onPageClick(idx);
|
|
56
70
|
}
|
|
57
|
-
})
|
|
58
|
-
|
|
71
|
+
}), showMetadata && React.createElement("div", {
|
|
72
|
+
className: "page-thumbnail__metadata"
|
|
73
|
+
}, React.createElement("h5", null, "Metadata"), page === null || page === void 0 ? void 0 : (_page$metadata = page.metadata) === null || _page$metadata === void 0 ? void 0 : _page$metadata.map(function (_ref3) {
|
|
74
|
+
var key = _ref3.key,
|
|
75
|
+
value = _ref3.value;
|
|
76
|
+
return React.createElement(React.Fragment, null, React.createElement("label", {
|
|
77
|
+
htmlFor: key
|
|
78
|
+
}, key), React.createElement("input", {
|
|
79
|
+
id: key,
|
|
80
|
+
type: "text",
|
|
81
|
+
value: value,
|
|
82
|
+
onChange: function onChange(e) {
|
|
83
|
+
return onMetadataChange({
|
|
84
|
+
name: key,
|
|
85
|
+
value: e.target.value,
|
|
86
|
+
imageIndex: idx
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}));
|
|
90
|
+
})));
|
|
91
|
+
})), React.createElement("div", {
|
|
92
|
+
className: "bottom-buttons"
|
|
93
|
+
}, React.createElement("div", {
|
|
94
|
+
className: "show-metadata-wrapper"
|
|
95
|
+
}, React.createElement("label", {
|
|
96
|
+
className: "switch mr-2"
|
|
97
|
+
}, React.createElement("input", {
|
|
98
|
+
id: "show-metadata",
|
|
99
|
+
type: "checkbox",
|
|
100
|
+
value: showMetadata,
|
|
101
|
+
onChange: function onChange() {
|
|
102
|
+
return setShowMetadata(function (prev) {
|
|
103
|
+
return !prev;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}), React.createElement("span", {
|
|
107
|
+
className: "slider round"
|
|
108
|
+
})), React.createElement("label", null, "Metadata"))));
|
|
59
109
|
}
|
|
60
110
|
|
|
61
|
-
|
|
111
|
+
PageSelector.defaultProps = {
|
|
62
112
|
onPageClick: function onPageClick() {},
|
|
63
113
|
onRecalc: function onRecalc() {},
|
|
64
114
|
onSave: function onSave() {},
|
|
@@ -66,4 +116,4 @@ PagesSelector.defaultProps = {
|
|
|
66
116
|
saveActive: false,
|
|
67
117
|
pageNumber: undefined
|
|
68
118
|
};
|
|
69
|
-
export default
|
|
119
|
+
export default PageSelector;
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
.page-selector {
|
|
2
2
|
height: 100vh;
|
|
3
3
|
overflow-y: scroll;
|
|
4
|
-
width: 10%;
|
|
4
|
+
max-width: 10%;
|
|
5
|
+
transition: max-width .5s;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.page-selector--opened {
|
|
9
|
+
max-width: 20%;
|
|
5
10
|
}
|
|
6
11
|
|
|
7
12
|
.pages {
|
|
@@ -9,6 +14,12 @@
|
|
|
9
14
|
padding: 1rem;
|
|
10
15
|
}
|
|
11
16
|
|
|
17
|
+
.page-thumbnail__wrapper {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: row;
|
|
20
|
+
align-items: flex-start;
|
|
21
|
+
}
|
|
22
|
+
|
|
12
23
|
.page-thumbnail {
|
|
13
24
|
margin-bottom: 1rem;
|
|
14
25
|
border-radius: .25rem !important;
|
|
@@ -21,6 +32,7 @@
|
|
|
21
32
|
.page-thumbnail:hover {
|
|
22
33
|
box-shadow: 0 0 2rem 0 #8898aa !important;
|
|
23
34
|
filter: grayscale(0);
|
|
35
|
+
transform: scale(1.075);
|
|
24
36
|
cursor: pointer;
|
|
25
37
|
opacity: 1;
|
|
26
38
|
}
|
|
@@ -34,7 +46,15 @@
|
|
|
34
46
|
width: 100%;
|
|
35
47
|
}
|
|
36
48
|
|
|
37
|
-
.
|
|
49
|
+
.page-thumbnail__metadata {
|
|
50
|
+
padding: 1rem;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.page-thumbnail__metadata * {
|
|
54
|
+
display: block;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.top-buttons {
|
|
38
58
|
background: linear-gradient(#8898aa, rgba(255, 255, 255, 0));
|
|
39
59
|
position: sticky;
|
|
40
60
|
top: 0;
|
|
@@ -45,21 +65,21 @@
|
|
|
45
65
|
z-index: 100;
|
|
46
66
|
}
|
|
47
67
|
|
|
48
|
-
.
|
|
68
|
+
.top-buttons button {
|
|
49
69
|
margin-bottom: 1rem;
|
|
50
70
|
width: 100%;
|
|
51
71
|
}
|
|
52
72
|
|
|
53
|
-
.
|
|
73
|
+
.top-buttons button:hover {
|
|
54
74
|
cursor: pointer;
|
|
55
75
|
}
|
|
56
76
|
|
|
57
|
-
.
|
|
77
|
+
.top-buttons button:disabled {
|
|
58
78
|
pointer-events: none;
|
|
59
79
|
opacity: .5;
|
|
60
80
|
}
|
|
61
81
|
|
|
62
|
-
.
|
|
82
|
+
.top-buttons button.info {
|
|
63
83
|
background-color: transparent;
|
|
64
84
|
border-radius: 0.5rem;
|
|
65
85
|
background-image: linear-gradient(310deg, #627594, #a8b8d8);
|
|
@@ -68,7 +88,7 @@
|
|
|
68
88
|
padding: 0.5rem 0;
|
|
69
89
|
}
|
|
70
90
|
|
|
71
|
-
.
|
|
91
|
+
.top-buttons button.success {
|
|
72
92
|
color: white;
|
|
73
93
|
background-image: linear-gradient(310deg, #2dce89, #2dcecc);
|
|
74
94
|
border-radius: 0.5rem;
|
|
@@ -76,6 +96,17 @@
|
|
|
76
96
|
padding: 0.5rem 0;
|
|
77
97
|
}
|
|
78
98
|
|
|
99
|
+
.bottom-buttons {
|
|
100
|
+
background: linear-gradient(rgba(255, 255, 255, 0), #8898aa);
|
|
101
|
+
position: sticky;
|
|
102
|
+
bottom: 0;
|
|
103
|
+
display: flex;
|
|
104
|
+
flex-direction: column;
|
|
105
|
+
padding: 1rem;
|
|
106
|
+
margin-bottom: 1rem;
|
|
107
|
+
z-index: 100;
|
|
108
|
+
}
|
|
109
|
+
|
|
79
110
|
|
|
80
111
|
.page-number-wrapper {
|
|
81
112
|
position: absolute;
|
|
@@ -93,4 +124,75 @@
|
|
|
93
124
|
.page-number {
|
|
94
125
|
font-size: 1.5rem;
|
|
95
126
|
font-weight: 800;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* toggle */
|
|
130
|
+
.switch {
|
|
131
|
+
position: relative;
|
|
132
|
+
display: inline-block;
|
|
133
|
+
width: 60px;
|
|
134
|
+
height: 34px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.switch input {
|
|
138
|
+
opacity: 0;
|
|
139
|
+
width: 0;
|
|
140
|
+
height: 0;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.slider {
|
|
144
|
+
position: absolute;
|
|
145
|
+
cursor: pointer;
|
|
146
|
+
top: 0;
|
|
147
|
+
left: 0;
|
|
148
|
+
right: 0;
|
|
149
|
+
bottom: 0;
|
|
150
|
+
background-color: #ccc;
|
|
151
|
+
-webkit-transition: .4s;
|
|
152
|
+
transition: .4s;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.slider:before {
|
|
156
|
+
position: absolute;
|
|
157
|
+
content: "";
|
|
158
|
+
height: 26px;
|
|
159
|
+
width: 26px;
|
|
160
|
+
left: 4px;
|
|
161
|
+
bottom: 4px;
|
|
162
|
+
background-color: white;
|
|
163
|
+
-webkit-transition: .4s;
|
|
164
|
+
transition: .4s;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
input:checked+.slider {
|
|
168
|
+
background-color: #2196F3;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
input:focus+.slider {
|
|
172
|
+
box-shadow: 0 0 1px #2196F3;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
input:checked+.slider:before {
|
|
176
|
+
-webkit-transform: translateX(26px);
|
|
177
|
+
-ms-transform: translateX(26px);
|
|
178
|
+
transform: translateX(26px);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* Rounded sliders */
|
|
182
|
+
.slider.round {
|
|
183
|
+
border-radius: 34px;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.slider.round:before {
|
|
187
|
+
border-radius: 50%;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.show-metadata-wrapper {
|
|
191
|
+
display: flex;
|
|
192
|
+
flex-direction: row;
|
|
193
|
+
align-items: center;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.mr-2 {
|
|
197
|
+
margin-right: 1rem;
|
|
96
198
|
}
|
package/RegionLabel/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
1
2
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
|
|
2
3
|
import React, { useRef, memo } from "react";
|
|
3
4
|
import Paper from "@mui/material/Paper";
|
|
@@ -7,7 +8,8 @@ import styles from "./styles";
|
|
|
7
8
|
import classnames from "classnames";
|
|
8
9
|
import IconButton from "@mui/material/IconButton";
|
|
9
10
|
import Button from "@mui/material/Button";
|
|
10
|
-
import
|
|
11
|
+
import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';
|
|
12
|
+
import DeleteForeverIcon from '@mui/icons-material/DeleteForever';
|
|
11
13
|
import CheckIcon from "@mui/icons-material/Check";
|
|
12
14
|
import TextField from "@mui/material/TextField";
|
|
13
15
|
import Select from "react-select";
|
|
@@ -29,7 +31,8 @@ export var RegionLabel = function RegionLabel(_ref) {
|
|
|
29
31
|
onRegionClassAdded = _ref.onRegionClassAdded,
|
|
30
32
|
allowComments = _ref.allowComments,
|
|
31
33
|
hideNotEditingLabel = _ref.hideNotEditingLabel,
|
|
32
|
-
allowedGroups = _ref.allowedGroups
|
|
34
|
+
allowedGroups = _ref.allowedGroups,
|
|
35
|
+
onDeleteGroup = _ref.onDeleteGroup;
|
|
33
36
|
var classes = useStyles();
|
|
34
37
|
var commentInputRef = useRef(null);
|
|
35
38
|
|
|
@@ -40,6 +43,12 @@ export var RegionLabel = function RegionLabel(_ref) {
|
|
|
40
43
|
};
|
|
41
44
|
|
|
42
45
|
if (hideNotEditingLabel && !editing) return null;
|
|
46
|
+
var allowedGroupsForSelect = allowedGroups.map(function (g) {
|
|
47
|
+
return {
|
|
48
|
+
value: "".concat(g),
|
|
49
|
+
label: "".concat(g)
|
|
50
|
+
};
|
|
51
|
+
});
|
|
43
52
|
return React.createElement(ThemeProvider, {
|
|
44
53
|
theme: theme
|
|
45
54
|
}, React.createElement(Paper, {
|
|
@@ -99,7 +108,24 @@ export var RegionLabel = function RegionLabel(_ref) {
|
|
|
99
108
|
},
|
|
100
109
|
size: "small",
|
|
101
110
|
variant: "outlined"
|
|
102
|
-
}, React.createElement(
|
|
111
|
+
}, React.createElement(DeleteOutlineIcon, {
|
|
112
|
+
style: {
|
|
113
|
+
marginTop: -8,
|
|
114
|
+
width: 16,
|
|
115
|
+
height: 16
|
|
116
|
+
}
|
|
117
|
+
})), React.createElement(IconButton, {
|
|
118
|
+
onClick: function onClick() {
|
|
119
|
+
return onDeleteGroup(region.groupId);
|
|
120
|
+
},
|
|
121
|
+
tabIndex: -1,
|
|
122
|
+
style: {
|
|
123
|
+
width: 22,
|
|
124
|
+
height: 22
|
|
125
|
+
},
|
|
126
|
+
size: "small",
|
|
127
|
+
variant: "outlined"
|
|
128
|
+
}, React.createElement(DeleteForeverIcon, {
|
|
103
129
|
style: {
|
|
104
130
|
marginTop: -8,
|
|
105
131
|
width: 16,
|
|
@@ -137,10 +163,10 @@ export var RegionLabel = function RegionLabel(_ref) {
|
|
|
137
163
|
}));
|
|
138
164
|
},
|
|
139
165
|
placeholder: "Group",
|
|
140
|
-
value:
|
|
166
|
+
value: allowedGroupsForSelect.find(function (g) {
|
|
141
167
|
return g.value === region.groupId;
|
|
142
168
|
}),
|
|
143
|
-
options:
|
|
169
|
+
options: _toConsumableArray(allowedGroupsForSelect)
|
|
144
170
|
}), (allowedTags || []).length > 0 && React.createElement("div", {
|
|
145
171
|
style: {
|
|
146
172
|
marginTop: 4
|
|
@@ -11,8 +11,10 @@ var TransformGrabber = styled("div")(function (_ref) {
|
|
|
11
11
|
return {
|
|
12
12
|
width: 8,
|
|
13
13
|
height: 8,
|
|
14
|
-
zIndex:
|
|
15
|
-
|
|
14
|
+
zIndex: 10,
|
|
15
|
+
backgroundColor: "#454545",
|
|
16
|
+
border: "2px solid black",
|
|
17
|
+
borderRadius: "50%",
|
|
16
18
|
position: "absolute"
|
|
17
19
|
};
|
|
18
20
|
});
|
|
@@ -18,6 +18,7 @@ import VisibleOffIcon from "@mui/icons-material/VisibilityOff";
|
|
|
18
18
|
import styles from "./styles";
|
|
19
19
|
import classnames from "classnames";
|
|
20
20
|
import isEqual from "lodash/isEqual";
|
|
21
|
+
import useColors from "../hooks/use-colors";
|
|
21
22
|
var theme = createTheme();
|
|
22
23
|
var useStyles = makeStyles(function (theme) {
|
|
23
24
|
return styles;
|
|
@@ -151,6 +152,11 @@ var Row = function Row(_ref4) {
|
|
|
151
152
|
color = _ref4.color,
|
|
152
153
|
cls = _ref4.cls,
|
|
153
154
|
index = _ref4.index;
|
|
155
|
+
|
|
156
|
+
var _useColors = useColors(),
|
|
157
|
+
groupColor = _useColors.groupColor;
|
|
158
|
+
|
|
159
|
+
var gc = groupColor(r.groupId);
|
|
154
160
|
return React.createElement(RowLayout, {
|
|
155
161
|
header: false,
|
|
156
162
|
highlighted: highlighted,
|
|
@@ -160,7 +166,7 @@ var Row = function Row(_ref4) {
|
|
|
160
166
|
order: "#".concat(index + 1),
|
|
161
167
|
classification: React.createElement(Chip, {
|
|
162
168
|
text: cls || "",
|
|
163
|
-
color: color || "
|
|
169
|
+
color: color || gc || "lime"
|
|
164
170
|
}),
|
|
165
171
|
area: "",
|
|
166
172
|
trash: React.createElement(TrashIcon, {
|
package/RegionShapes/index.js
CHANGED
|
@@ -56,7 +56,7 @@ var RegionComponents = {
|
|
|
56
56
|
width: Math.max(region.w * iw, 0),
|
|
57
57
|
height: Math.max(region.h * ih, 0),
|
|
58
58
|
stroke: colorAlpha(clsColor(region.cls), 0.85),
|
|
59
|
-
fill: region.groupHighlighted ? colorAlpha(
|
|
59
|
+
fill: region.groupHighlighted ? colorAlpha(clsColor(region.cls), 0.15) : colorAlpha(groupColor(region.groupId), 0.5)
|
|
60
60
|
}));
|
|
61
61
|
} else {
|
|
62
62
|
return React.createElement("g", {
|
package/RegionTags/index.js
CHANGED
|
@@ -29,6 +29,7 @@ export var RegionTags = function RegionTags(_ref) {
|
|
|
29
29
|
onChangeRegion = _ref.onChangeRegion,
|
|
30
30
|
onCloseRegionEdit = _ref.onCloseRegionEdit,
|
|
31
31
|
onDeleteRegion = _ref.onDeleteRegion,
|
|
32
|
+
onDeleteGroup = _ref.onDeleteGroup,
|
|
32
33
|
layoutParams = _ref.layoutParams,
|
|
33
34
|
imageSrc = _ref.imageSrc,
|
|
34
35
|
RegionEditLabel = _ref.RegionEditLabel,
|
|
@@ -128,6 +129,7 @@ export var RegionTags = function RegionTags(_ref) {
|
|
|
128
129
|
onChange: onChangeRegion,
|
|
129
130
|
onClose: onCloseRegionEdit,
|
|
130
131
|
onDelete: onDeleteRegion,
|
|
132
|
+
onDeleteGroup: onDeleteGroup,
|
|
131
133
|
editing: region.editingLabels,
|
|
132
134
|
region: region,
|
|
133
135
|
regions: regions,
|
package/hooks/use-colors.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useSettings } from "../SettingsProvider";
|
|
2
|
+
var DEFAULT_GROUP_COLOR = "#32CD32";
|
|
2
3
|
|
|
3
4
|
function defaultClsColor(cls) {
|
|
4
5
|
switch (cls) {
|
|
@@ -49,28 +50,6 @@ function defaultClsColor(cls) {
|
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
function defaultGroupColor(groupId) {
|
|
53
|
-
switch (groupId) {
|
|
54
|
-
case "0":
|
|
55
|
-
return "#FDDFDF";
|
|
56
|
-
|
|
57
|
-
case "1":
|
|
58
|
-
return "#FCF7DE";
|
|
59
|
-
|
|
60
|
-
case "2":
|
|
61
|
-
return "#DEFDE0";
|
|
62
|
-
|
|
63
|
-
case "3":
|
|
64
|
-
return "#DEF3FD";
|
|
65
|
-
|
|
66
|
-
case "4":
|
|
67
|
-
return "#F0DEFD";
|
|
68
|
-
|
|
69
|
-
default:
|
|
70
|
-
return "#F0DEFD";
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
53
|
var useColors = function useColors() {
|
|
75
54
|
var _useSettings = useSettings(),
|
|
76
55
|
clsColors = _useSettings.clsColors,
|
|
@@ -84,12 +63,8 @@ var useColors = function useColors() {
|
|
|
84
63
|
return defaultClsColor(cls);
|
|
85
64
|
};
|
|
86
65
|
|
|
87
|
-
var groupColor = function groupColor(
|
|
88
|
-
|
|
89
|
-
return groupColors[groupId];
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return defaultGroupColor(groupId);
|
|
66
|
+
var groupColor = function groupColor(idx) {
|
|
67
|
+
return groupColors[idx % groupColors.length] || DEFAULT_GROUP_COLOR;
|
|
93
68
|
};
|
|
94
69
|
|
|
95
70
|
return {
|