@searpent/react-image-annotate 2.0.0 → 2.0.3

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.
Files changed (174) hide show
  1. package/Annotator/index.js +169 -0
  2. package/Annotator/reducers/combine-reducers.js +14 -0
  3. package/Annotator/reducers/convert-expanding-line-to-polygon.js +73 -0
  4. package/{src/Annotator → Annotator}/reducers/fix-twisted.js +3 -5
  5. package/Annotator/reducers/general-reducer.js +1058 -0
  6. package/Annotator/reducers/get-active-image.js +27 -0
  7. package/Annotator/reducers/get-implied-video-regions.js +180 -0
  8. package/Annotator/reducers/history-handler.js +38 -0
  9. package/Annotator/reducers/image-reducer.js +20 -0
  10. package/Annotator/reducers/video-reducer.js +88 -0
  11. package/ClassSelectionMenu/index.js +135 -0
  12. package/Crosshairs/index.js +53 -0
  13. package/DebugSidebarBox/index.js +20 -0
  14. package/DemoSite/Editor.js +194 -0
  15. package/DemoSite/ErrorBoundaryDialog.js +64 -0
  16. package/DemoSite/index.js +40 -0
  17. package/FullImageSegmentationAnnotator/index.js +7 -0
  18. package/GroupSelectorSidebarBox/index.js +63 -0
  19. package/HighlightBox/index.js +99 -0
  20. package/HistorySidebarBox/index.js +71 -0
  21. package/ImageCanvas/index.js +424 -0
  22. package/ImageCanvas/region-tools.js +165 -0
  23. package/{src/ImageCanvas → ImageCanvas}/styles.js +12 -8
  24. package/ImageCanvas/use-mouse.js +180 -0
  25. package/ImageCanvas/use-project-box.js +27 -0
  26. package/ImageCanvas/use-wasd-mode.js +62 -0
  27. package/ImageMask/index.js +133 -0
  28. package/ImageMask/load-image.js +25 -0
  29. package/ImageSelectorSidebarBox/index.js +60 -0
  30. package/KeyframeTimeline/get-time-string.js +27 -0
  31. package/KeyframeTimeline/index.js +233 -0
  32. package/KeyframesSelectorSidebarBox/index.js +93 -0
  33. package/LandingPage/index.js +159 -0
  34. package/MainLayout/icon-dictionary.js +104 -0
  35. package/MainLayout/index.js +366 -0
  36. package/{src/MainLayout → MainLayout}/styles.js +6 -7
  37. package/MainLayout/types.js +0 -0
  38. package/MainLayout/use-implied-video-regions.js +13 -0
  39. package/PointDistances/index.js +73 -0
  40. package/PreventScrollToParents/index.js +51 -0
  41. package/RegionLabel/index.js +191 -0
  42. package/{src/RegionLabel → RegionLabel}/styles.js +12 -15
  43. package/RegionSelectAndTransformBoxes/index.js +167 -0
  44. package/RegionSelectorSidebarBox/index.js +248 -0
  45. package/{src/RegionSelectorSidebarBox → RegionSelectorSidebarBox}/styles.js +13 -14
  46. package/RegionShapes/index.js +274 -0
  47. package/RegionTags/index.js +138 -0
  48. package/SettingsDialog/index.js +52 -0
  49. package/SettingsProvider/index.js +53 -0
  50. package/Shortcuts/ShortcutField.js +46 -0
  51. package/Shortcuts/index.js +133 -0
  52. package/ShortcutsManager/index.js +155 -0
  53. package/Sidebar/index.js +69 -0
  54. package/SidebarBoxContainer/index.js +93 -0
  55. package/SmallToolButton/index.js +42 -0
  56. package/TagsSidebarBox/index.js +105 -0
  57. package/TaskDescriptionSidebarBox/index.js +58 -0
  58. package/Theme/index.js +30 -0
  59. package/VideoOrImageCanvasBackground/index.js +151 -0
  60. package/colors.js +14 -0
  61. package/hooks/use-event-callback.js +10 -0
  62. package/hooks/use-exclude-pattern.js +24 -0
  63. package/hooks/use-load-image.js +26 -0
  64. package/hooks/use-window-size.js +46 -0
  65. package/{src/hooks → hooks}/xpattern.js +1 -1
  66. package/index.js +3 -0
  67. package/lib.js +3 -0
  68. package/package.json +1 -1
  69. package/stories.js +5 -0
  70. package/utils/get-from-local-storage.js +7 -0
  71. package/utils/get-hotkey-help-text.js +9 -0
  72. package/utils/get-landmarks-with-transform.js +40 -0
  73. package/utils/set-in-local-storage.js +3 -0
  74. package/.babelrc +0 -6
  75. package/.env +0 -1
  76. package/.flowconfig +0 -2
  77. package/.github/workflows/release-on-master.yml +0 -32
  78. package/.github/workflows/test.yml +0 -16
  79. package/.prettierrc +0 -3
  80. package/.releaserc.js +0 -18
  81. package/.storybook/addons.js +0 -2
  82. package/.storybook/config.js +0 -16
  83. package/LICENSE +0 -21
  84. package/public/favicon.ico +0 -0
  85. package/public/index.html +0 -38
  86. package/src/Annotator/bike-pic.png +0 -0
  87. package/src/Annotator/bike-pic2.png +0 -0
  88. package/src/Annotator/dab-keyframes.story.json +0 -1
  89. package/src/Annotator/index.js +0 -206
  90. package/src/Annotator/index.story.js +0 -727
  91. package/src/Annotator/poses.story.js +0 -150
  92. package/src/Annotator/reducers/combine-reducers.js +0 -7
  93. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -53
  94. package/src/Annotator/reducers/general-reducer.js +0 -914
  95. package/src/Annotator/reducers/get-active-image.js +0 -21
  96. package/src/Annotator/reducers/get-implied-video-regions.js +0 -115
  97. package/src/Annotator/reducers/history-handler.js +0 -60
  98. package/src/Annotator/reducers/image-reducer.js +0 -23
  99. package/src/Annotator/reducers/video-reducer.js +0 -85
  100. package/src/Annotator/video.story.js +0 -51
  101. package/src/ClassSelectionMenu/index.js +0 -108
  102. package/src/Crosshairs/index.js +0 -64
  103. package/src/DebugSidebarBox/index.js +0 -36
  104. package/src/DemoSite/Editor.js +0 -235
  105. package/src/DemoSite/ErrorBoundaryDialog.js +0 -34
  106. package/src/DemoSite/index.js +0 -41
  107. package/src/DemoSite/index.story.js +0 -10
  108. package/src/DemoSite/simple-segmentation-example.json +0 -572
  109. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  110. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  111. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  112. package/src/FullImageSegmentationAnnotator/index.js +0 -7
  113. package/src/FullImageSegmentationAnnotator/index.story.js +0 -177
  114. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  115. package/src/HighlightBox/index.js +0 -143
  116. package/src/HistorySidebarBox/index.js +0 -78
  117. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  118. package/src/ImageCanvas/index.js +0 -488
  119. package/src/ImageCanvas/index.story.js +0 -214
  120. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  121. package/src/ImageCanvas/region-tools.js +0 -171
  122. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  123. package/src/ImageCanvas/use-mouse.js +0 -168
  124. package/src/ImageCanvas/use-project-box.js +0 -23
  125. package/src/ImageCanvas/use-wasd-mode.js +0 -50
  126. package/src/ImageMask/index.js +0 -127
  127. package/src/ImageMask/load-image.js +0 -32
  128. package/src/ImageSelectorSidebarBox/index.js +0 -54
  129. package/src/KeyframeTimeline/get-time-string.js +0 -25
  130. package/src/KeyframeTimeline/index.js +0 -223
  131. package/src/KeyframesSelectorSidebarBox/index.js +0 -93
  132. package/src/LandingPage/content.md +0 -57
  133. package/src/LandingPage/github-markdown.css +0 -964
  134. package/src/LandingPage/index.js +0 -147
  135. package/src/MainLayout/icon-dictionary.js +0 -79
  136. package/src/MainLayout/index.js +0 -420
  137. package/src/MainLayout/index.story.js +0 -240
  138. package/src/MainLayout/types.js +0 -156
  139. package/src/MainLayout/use-implied-video-regions.js +0 -17
  140. package/src/PointDistances/index.js +0 -90
  141. package/src/PreventScrollToParents/index.js +0 -48
  142. package/src/PreventScrollToParents/index.story.js +0 -23
  143. package/src/RegionLabel/index.js +0 -201
  144. package/src/RegionSelectAndTransformBoxes/index.js +0 -234
  145. package/src/RegionSelectorSidebarBox/index.js +0 -216
  146. package/src/RegionShapes/index.js +0 -236
  147. package/src/RegionTags/index.js +0 -130
  148. package/src/SettingsDialog/index.js +0 -58
  149. package/src/SettingsProvider/index.js +0 -44
  150. package/src/Shortcuts/ShortcutField.js +0 -44
  151. package/src/Shortcuts/index.js +0 -129
  152. package/src/ShortcutsManager/index.js +0 -162
  153. package/src/Sidebar/index.js +0 -117
  154. package/src/SidebarBoxContainer/index.js +0 -93
  155. package/src/SmallToolButton/index.js +0 -57
  156. package/src/TagsSidebarBox/index.js +0 -93
  157. package/src/TaskDescriptionSidebarBox/index.js +0 -43
  158. package/src/Theme/index.js +0 -36
  159. package/src/VideoOrImageCanvasBackground/index.js +0 -170
  160. package/src/colors.js +0 -32
  161. package/src/hooks/use-event-callback.js +0 -11
  162. package/src/hooks/use-exclude-pattern.js +0 -27
  163. package/src/hooks/use-load-image.js +0 -21
  164. package/src/hooks/use-window-size.js +0 -46
  165. package/src/hooks/xpattern.png +0 -0
  166. package/src/index.js +0 -18
  167. package/src/lib.js +0 -7
  168. package/src/screenshot.png +0 -0
  169. package/src/site.css +0 -5
  170. package/src/stories.js +0 -2
  171. package/src/utils/get-from-local-storage.js +0 -7
  172. package/src/utils/get-hotkey-help-text.js +0 -11
  173. package/src/utils/get-landmarks-with-transform.js +0 -23
  174. package/src/utils/set-in-local-storage.js +0 -6
@@ -0,0 +1,1058 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
4
+ import { moveRegion } from "../../ImageCanvas/region-tools.js";
5
+ import { getIn, setIn, updateIn } from "seamless-immutable";
6
+ import moment from "moment";
7
+ import isEqual from "lodash/isEqual";
8
+ import getActiveImage from "./get-active-image";
9
+ import { saveToHistory } from "./history-handler.js";
10
+ import colors from "../../colors";
11
+ import fixTwisted from "./fix-twisted";
12
+ import convertExpandingLineToPolygon from "./convert-expanding-line-to-polygon";
13
+ import clamp from "clamp";
14
+ import getLandmarksWithTransform from "../../utils/get-landmarks-with-transform";
15
+ import setInLocalStorage from "../../utils/set-in-local-storage";
16
+
17
+ var getRandomId = function getRandomId() {
18
+ return Math.random().toString().split(".")[1];
19
+ };
20
+
21
+ export default (function (state, action) {
22
+ if (state.allowedArea && state.selectedTool !== "modify-allowed-area" && ["MOUSE_DOWN", "MOUSE_UP", "MOUSE_MOVE"].includes(action.type)) {
23
+ var aa = state.allowedArea;
24
+ action.x = clamp(action.x, aa.x, aa.x + aa.w);
25
+ action.y = clamp(action.y, aa.y, aa.y + aa.h);
26
+ }
27
+
28
+ if (action.type === "ON_CLS_ADDED" && action.cls && action.cls !== "") {
29
+ var oldRegionClsList = state.regionClsList;
30
+
31
+ var newState = _objectSpread({}, state, {
32
+ regionClsList: oldRegionClsList.concat(action.cls)
33
+ });
34
+
35
+ return newState;
36
+ } // Throttle certain actions
37
+
38
+
39
+ if (action.type === "MOUSE_MOVE") {
40
+ if (Date.now() - (state.lastMouseMoveCall || 0) < 16) return state;
41
+ state = setIn(state, ["lastMouseMoveCall"], Date.now());
42
+ }
43
+
44
+ if (!action.type.includes("MOUSE")) {
45
+ state = setIn(state, ["lastAction"], action);
46
+ }
47
+
48
+ var _getActiveImage = getActiveImage(state),
49
+ currentImageIndex = _getActiveImage.currentImageIndex,
50
+ pathToActiveImage = _getActiveImage.pathToActiveImage,
51
+ activeImage = _getActiveImage.activeImage;
52
+
53
+ var getRegionIndex = function getRegionIndex(region) {
54
+ var regionId = typeof region === "string" || typeof region === "number" ? region : region.id;
55
+ if (!activeImage) return null;
56
+ var regionIndex = (activeImage.regions || []).findIndex(function (r) {
57
+ return r.id === regionId;
58
+ });
59
+ return regionIndex === -1 ? null : regionIndex;
60
+ };
61
+
62
+ var getRegion = function getRegion(regionId) {
63
+ if (!activeImage) return null;
64
+ var regionIndex = getRegionIndex(regionId);
65
+ if (regionIndex === null) return [null, null];
66
+ var region = activeImage.regions[regionIndex];
67
+ return [region, regionIndex];
68
+ };
69
+
70
+ var modifyRegion = function modifyRegion(regionId, obj) {
71
+ var _getRegion = getRegion(regionId),
72
+ _getRegion2 = _slicedToArray(_getRegion, 2),
73
+ region = _getRegion2[0],
74
+ regionIndex = _getRegion2[1];
75
+
76
+ if (!region) return state;
77
+
78
+ if (obj !== null) {
79
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", regionIndex]), _objectSpread({}, region, obj));
80
+ } else {
81
+ // delete region
82
+ var regions = activeImage.regions;
83
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), (regions || []).filter(function (r) {
84
+ return r.id !== region.id;
85
+ }));
86
+ }
87
+ };
88
+
89
+ var unselectRegions = function unselectRegions(state) {
90
+ if (!activeImage) return state;
91
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), (activeImage.regions || []).map(function (r) {
92
+ return _objectSpread({}, r, {
93
+ highlighted: false
94
+ });
95
+ }));
96
+ };
97
+
98
+ var closeEditors = function closeEditors(state) {
99
+ if (currentImageIndex === null) return state;
100
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), (activeImage.regions || []).map(function (r) {
101
+ return _objectSpread({}, r, {
102
+ editingLabels: false
103
+ });
104
+ }));
105
+ };
106
+
107
+ var setNewImage = function setNewImage(img, index) {
108
+ var _ref = typeof img === "object" ? img : {
109
+ src: img
110
+ },
111
+ src = _ref.src,
112
+ frameTime = _ref.frameTime;
113
+
114
+ return setIn(setIn(state, ["selectedImage"], index), ["selectedImageFrameTime"], frameTime);
115
+ };
116
+
117
+ switch (action.type) {
118
+ case "@@INIT":
119
+ {
120
+ return state;
121
+ }
122
+
123
+ case "SELECT_IMAGE":
124
+ {
125
+ return setNewImage(action.image, action.imageIndex);
126
+ }
127
+
128
+ case "SELECT_CLASSIFICATION":
129
+ {
130
+ return setIn(state, ["selectedCls"], action.cls);
131
+ }
132
+
133
+ case "CHANGE_REGION":
134
+ {
135
+ var regionIndex = getRegionIndex(action.region);
136
+ if (regionIndex === null) return state;
137
+ var oldRegion = activeImage.regions[regionIndex];
138
+
139
+ if (oldRegion.cls !== action.region.cls) {
140
+ state = saveToHistory(state, "Change Region Classification");
141
+ var clsIndex = state.regionClsList.indexOf(action.region.cls);
142
+
143
+ if (clsIndex !== -1) {
144
+ state = setIn(state, ["selectedCls"], action.region.cls);
145
+ action.region.color = colors[clsIndex % colors.length];
146
+ }
147
+ }
148
+
149
+ if (!isEqual(oldRegion.tags, action.region.tags)) {
150
+ state = saveToHistory(state, "Change Region Tags");
151
+ }
152
+
153
+ if (!isEqual(oldRegion.comment, action.region.comment)) {
154
+ state = saveToHistory(state, "Change Region Comment");
155
+ }
156
+
157
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", regionIndex]), action.region);
158
+ }
159
+
160
+ case "CHANGE_IMAGE":
161
+ {
162
+ if (!activeImage) return state;
163
+ var delta = action.delta;
164
+
165
+ for (var _i = 0, _Object$keys = Object.keys(delta); _i < _Object$keys.length; _i++) {
166
+ var key = _Object$keys[_i];
167
+ if (key === "cls") saveToHistory(state, "Change Image Class");
168
+ if (key === "tags") saveToHistory(state, "Change Image Tags");
169
+ state = setIn(state, [].concat(_toConsumableArray(pathToActiveImage), [key]), delta[key]);
170
+ }
171
+
172
+ return state;
173
+ }
174
+
175
+ case "SELECT_REGION":
176
+ {
177
+ var region = action.region;
178
+
179
+ var _regionIndex = getRegionIndex(action.region);
180
+
181
+ if (_regionIndex === null) return state;
182
+
183
+ var regions = _toConsumableArray(activeImage.regions || []).map(function (r) {
184
+ return _objectSpread({}, r, {
185
+ highlighted: r.id === region.id,
186
+ editingLabels: r.id === region.id
187
+ });
188
+ });
189
+
190
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), regions);
191
+ }
192
+
193
+ case "BEGIN_MOVE_POINT":
194
+ {
195
+ state = closeEditors(state);
196
+ return setIn(state, ["mode"], {
197
+ mode: "MOVE_REGION",
198
+ regionId: action.point.id
199
+ });
200
+ }
201
+
202
+ case "BEGIN_BOX_TRANSFORM":
203
+ {
204
+ var box = action.box,
205
+ directions = action.directions;
206
+ state = closeEditors(state);
207
+
208
+ if (directions[0] === 0 && directions[1] === 0) {
209
+ return setIn(state, ["mode"], {
210
+ mode: "MOVE_REGION",
211
+ regionId: box.id
212
+ });
213
+ } else {
214
+ return setIn(state, ["mode"], {
215
+ mode: "RESIZE_BOX",
216
+ regionId: box.id,
217
+ freedom: directions,
218
+ original: {
219
+ x: box.x,
220
+ y: box.y,
221
+ w: box.w,
222
+ h: box.h
223
+ }
224
+ });
225
+ }
226
+ }
227
+
228
+ case "BEGIN_MOVE_POLYGON_POINT":
229
+ {
230
+ var polygon = action.polygon,
231
+ pointIndex = action.pointIndex;
232
+ state = closeEditors(state);
233
+
234
+ if (state.mode && state.mode.mode === "DRAW_POLYGON" && pointIndex === 0) {
235
+ return setIn(modifyRegion(polygon, {
236
+ points: polygon.points.slice(0, -1),
237
+ open: false
238
+ }), ["mode"], null);
239
+ } else {
240
+ state = saveToHistory(state, "Move Polygon Point");
241
+ }
242
+
243
+ return setIn(state, ["mode"], {
244
+ mode: "MOVE_POLYGON_POINT",
245
+ regionId: polygon.id,
246
+ pointIndex: pointIndex
247
+ });
248
+ }
249
+
250
+ case "BEGIN_MOVE_KEYPOINT":
251
+ {
252
+ var _region = action.region,
253
+ keypointId = action.keypointId;
254
+ state = closeEditors(state);
255
+ state = saveToHistory(state, "Move Keypoint");
256
+ return setIn(state, ["mode"], {
257
+ mode: "MOVE_KEYPOINT",
258
+ regionId: _region.id,
259
+ keypointId: keypointId
260
+ });
261
+ }
262
+
263
+ case "ADD_POLYGON_POINT":
264
+ {
265
+ var _polygon = action.polygon,
266
+ point = action.point,
267
+ _pointIndex = action.pointIndex;
268
+
269
+ var _regionIndex2 = getRegionIndex(_polygon);
270
+
271
+ if (_regionIndex2 === null) return state;
272
+
273
+ var points = _toConsumableArray(_polygon.points);
274
+
275
+ points.splice(_pointIndex, 0, point);
276
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex2]), _objectSpread({}, _polygon, {
277
+ points: points
278
+ }));
279
+ }
280
+
281
+ case "MOUSE_MOVE":
282
+ {
283
+ var x = action.x,
284
+ y = action.y;
285
+ if (!state.mode) return state;
286
+ if (!activeImage) return state;
287
+ var _state = state,
288
+ mouseDownAt = _state.mouseDownAt;
289
+
290
+ switch (state.mode.mode) {
291
+ case "MOVE_POLYGON_POINT":
292
+ {
293
+ var _state$mode = state.mode,
294
+ _pointIndex2 = _state$mode.pointIndex,
295
+ regionId = _state$mode.regionId;
296
+
297
+ var _regionIndex3 = getRegionIndex(regionId);
298
+
299
+ if (_regionIndex3 === null) return state;
300
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex3, "points", _pointIndex2]), [x, y]);
301
+ }
302
+
303
+ case "MOVE_KEYPOINT":
304
+ {
305
+ var _state$mode2 = state.mode,
306
+ _keypointId = _state$mode2.keypointId,
307
+ _regionId = _state$mode2.regionId;
308
+
309
+ var _getRegion3 = getRegion(_regionId),
310
+ _getRegion4 = _slicedToArray(_getRegion3, 2),
311
+ _region2 = _getRegion4[0],
312
+ _regionIndex4 = _getRegion4[1];
313
+
314
+ if (_regionIndex4 === null) return state;
315
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex4, "points", _keypointId]), _objectSpread({}, _region2.points[_keypointId], {
316
+ x: x,
317
+ y: y
318
+ }));
319
+ }
320
+
321
+ case "MOVE_REGION":
322
+ {
323
+ var _regionId2 = state.mode.regionId;
324
+
325
+ if (_regionId2 === "$$allowed_area") {
326
+ var _state2 = state,
327
+ _state2$allowedArea = _state2.allowedArea,
328
+ w = _state2$allowedArea.w,
329
+ h = _state2$allowedArea.h;
330
+ return setIn(state, ["allowedArea"], {
331
+ x: x - w / 2,
332
+ y: y - h / 2,
333
+ w: w,
334
+ h: h
335
+ });
336
+ }
337
+
338
+ var _regionIndex5 = getRegionIndex(_regionId2);
339
+
340
+ if (_regionIndex5 === null) return state;
341
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex5]), moveRegion(activeImage.regions[_regionIndex5], x, y));
342
+ }
343
+
344
+ case "RESIZE_BOX":
345
+ {
346
+ var _state$mode3 = state.mode,
347
+ _regionId3 = _state$mode3.regionId,
348
+ _state$mode3$freedom = _slicedToArray(_state$mode3.freedom, 2),
349
+ xFree = _state$mode3$freedom[0],
350
+ yFree = _state$mode3$freedom[1],
351
+ _state$mode3$original = _state$mode3.original,
352
+ ox = _state$mode3$original.x,
353
+ oy = _state$mode3$original.y,
354
+ ow = _state$mode3$original.w,
355
+ oh = _state$mode3$original.h;
356
+
357
+ var dx = xFree === 0 ? ox : xFree === -1 ? Math.min(ox + ow, x) : ox;
358
+ var dw = xFree === 0 ? ow : xFree === -1 ? ow + (ox - dx) : Math.max(0, ow + (x - ox - ow));
359
+ var dy = yFree === 0 ? oy : yFree === -1 ? Math.min(oy + oh, y) : oy;
360
+ var dh = yFree === 0 ? oh : yFree === -1 ? oh + (oy - dy) : Math.max(0, oh + (y - oy - oh)); // determine if we should switch the freedom
361
+
362
+ if (dw <= 0.001) {
363
+ state = setIn(state, ["mode", "freedom"], [xFree * -1, yFree]);
364
+ }
365
+
366
+ if (dh <= 0.001) {
367
+ state = setIn(state, ["mode", "freedom"], [xFree, yFree * -1]);
368
+ }
369
+
370
+ if (_regionId3 === "$$allowed_area") {
371
+ return setIn(state, ["allowedArea"], {
372
+ x: dx,
373
+ w: dw,
374
+ y: dy,
375
+ h: dh
376
+ });
377
+ }
378
+
379
+ var _regionIndex6 = getRegionIndex(_regionId3);
380
+
381
+ if (_regionIndex6 === null) return state;
382
+ var _box = activeImage.regions[_regionIndex6];
383
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex6]), _objectSpread({}, _box, {
384
+ x: dx,
385
+ w: dw,
386
+ y: dy,
387
+ h: dh
388
+ }));
389
+ }
390
+
391
+ case "RESIZE_KEYPOINTS":
392
+ {
393
+ var _state$mode4 = state.mode,
394
+ _regionId4 = _state$mode4.regionId,
395
+ landmarks = _state$mode4.landmarks,
396
+ centerX = _state$mode4.centerX,
397
+ centerY = _state$mode4.centerY;
398
+ var distFromCenter = Math.sqrt(Math.pow(centerX - x, 2) + Math.pow(centerY - y, 2));
399
+ var scale = distFromCenter / 0.15;
400
+ return modifyRegion(_regionId4, {
401
+ points: getLandmarksWithTransform({
402
+ landmarks: landmarks,
403
+ center: {
404
+ x: centerX,
405
+ y: centerY
406
+ },
407
+ scale: scale
408
+ })
409
+ });
410
+ }
411
+
412
+ case "DRAW_POLYGON":
413
+ {
414
+ var _regionId5 = state.mode.regionId;
415
+
416
+ var _getRegion5 = getRegion(_regionId5),
417
+ _getRegion6 = _slicedToArray(_getRegion5, 2),
418
+ _region3 = _getRegion6[0],
419
+ _regionIndex7 = _getRegion6[1];
420
+
421
+ if (!_region3) return setIn(state, ["mode"], null);
422
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex7, "points", _region3.points.length - 1]), [x, y]);
423
+ }
424
+
425
+ case "DRAW_LINE":
426
+ {
427
+ var _regionId6 = state.mode.regionId;
428
+
429
+ var _getRegion7 = getRegion(_regionId6),
430
+ _getRegion8 = _slicedToArray(_getRegion7, 2),
431
+ _region4 = _getRegion8[0],
432
+ _regionIndex8 = _getRegion8[1];
433
+
434
+ if (!_region4) return setIn(state, ["mode"], null);
435
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex8]), _objectSpread({}, _region4, {
436
+ x2: x,
437
+ y2: y
438
+ }));
439
+ }
440
+
441
+ case "DRAW_EXPANDING_LINE":
442
+ {
443
+ var _regionId7 = state.mode.regionId;
444
+
445
+ var _getRegion9 = getRegion(_regionId7),
446
+ _getRegion10 = _slicedToArray(_getRegion9, 2),
447
+ expandingLine = _getRegion10[0],
448
+ _regionIndex9 = _getRegion10[1];
449
+
450
+ if (!expandingLine) return state;
451
+ var isMouseDown = Boolean(state.mouseDownAt);
452
+
453
+ if (isMouseDown) {
454
+ // If the mouse is down, set width/angle
455
+ var lastPoint = expandingLine.points.slice(-1)[0];
456
+ var mouseDistFromLastPoint = Math.sqrt(Math.pow(lastPoint.x - x, 2) + Math.pow(lastPoint.y - y, 2));
457
+ if (mouseDistFromLastPoint < 0.002 && !lastPoint.width) return state;
458
+
459
+ var _newState = setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex9, "points"]), expandingLine.points.slice(0, -1).concat([_objectSpread({}, lastPoint, {
460
+ width: mouseDistFromLastPoint * 2,
461
+ angle: Math.atan2(lastPoint.x - x, lastPoint.y - y)
462
+ })]));
463
+
464
+ return _newState;
465
+ } else {
466
+ // If mouse is up, move the next candidate point
467
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex9]), _objectSpread({}, expandingLine, {
468
+ candidatePoint: {
469
+ x: x,
470
+ y: y
471
+ }
472
+ }));
473
+ }
474
+
475
+ return state;
476
+ }
477
+
478
+ case "SET_EXPANDING_LINE_WIDTH":
479
+ {
480
+ var _regionId8 = state.mode.regionId;
481
+
482
+ var _getRegion11 = getRegion(_regionId8),
483
+ _getRegion12 = _slicedToArray(_getRegion11, 2),
484
+ _expandingLine = _getRegion12[0],
485
+ _regionIndex10 = _getRegion12[1];
486
+
487
+ if (!_expandingLine) return state;
488
+
489
+ var _lastPoint = _expandingLine.points.slice(-1)[0];
490
+
491
+ var _state3 = state,
492
+ _mouseDownAt = _state3.mouseDownAt;
493
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex10, "expandingWidth"]), Math.sqrt(Math.pow(_lastPoint.x - x, 2) + Math.pow(_lastPoint.y - y, 2)));
494
+ }
495
+
496
+ default:
497
+ return state;
498
+ }
499
+ }
500
+
501
+ case "MOUSE_DOWN":
502
+ {
503
+ if (!activeImage) return state;
504
+ var _x = action.x,
505
+ _y = action.y;
506
+ state = setIn(state, ["mouseDownAt"], {
507
+ x: _x,
508
+ y: _y
509
+ });
510
+
511
+ if (state.mode) {
512
+ switch (state.mode.mode) {
513
+ case "DRAW_POLYGON":
514
+ {
515
+ var _getRegion13 = getRegion(state.mode.regionId),
516
+ _getRegion14 = _slicedToArray(_getRegion13, 2),
517
+ _polygon2 = _getRegion14[0],
518
+ _regionIndex11 = _getRegion14[1];
519
+
520
+ if (!_polygon2) break;
521
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex11]), _objectSpread({}, _polygon2, {
522
+ points: _polygon2.points.concat([[_x, _y]])
523
+ }));
524
+ }
525
+
526
+ case "DRAW_LINE":
527
+ {
528
+ var _getRegion15 = getRegion(state.mode.regionId),
529
+ _getRegion16 = _slicedToArray(_getRegion15, 2),
530
+ line = _getRegion16[0],
531
+ _regionIndex12 = _getRegion16[1];
532
+
533
+ if (!line) break;
534
+ setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex12]), _objectSpread({}, line, {
535
+ x2: _x,
536
+ y2: _y
537
+ }));
538
+ return setIn(state, ["mode"], null);
539
+ }
540
+
541
+ case "DRAW_EXPANDING_LINE":
542
+ {
543
+ var _getRegion17 = getRegion(state.mode.regionId),
544
+ _getRegion18 = _slicedToArray(_getRegion17, 2),
545
+ _expandingLine2 = _getRegion18[0],
546
+ _regionIndex13 = _getRegion18[1];
547
+
548
+ if (!_expandingLine2) break;
549
+
550
+ var _lastPoint2 = _expandingLine2.points.slice(-1)[0];
551
+
552
+ if (_expandingLine2.points.length > 1 && Math.sqrt(Math.pow(_lastPoint2.x - _x, 2) + Math.pow(_lastPoint2.y - _y, 2)) < 0.002) {
553
+ if (!_lastPoint2.width) {
554
+ return setIn(state, ["mode"], {
555
+ mode: "SET_EXPANDING_LINE_WIDTH",
556
+ regionId: state.mode.regionId
557
+ });
558
+ } else {
559
+ return state.setIn([].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex13]), convertExpandingLineToPolygon(_expandingLine2)).setIn(["mode"], null);
560
+ }
561
+ } // Create new point
562
+
563
+
564
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex13, "points"]), _expandingLine2.points.concat([{
565
+ x: _x,
566
+ y: _y,
567
+ angle: null,
568
+ width: null
569
+ }]));
570
+ }
571
+
572
+ case "SET_EXPANDING_LINE_WIDTH":
573
+ {
574
+ var _getRegion19 = getRegion(state.mode.regionId),
575
+ _getRegion20 = _slicedToArray(_getRegion19, 2),
576
+ _expandingLine3 = _getRegion20[0],
577
+ _regionIndex14 = _getRegion20[1];
578
+
579
+ if (!_expandingLine3) break;
580
+ var expandingWidth = _expandingLine3.expandingWidth;
581
+ return state.setIn([].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex14]), convertExpandingLineToPolygon(_objectSpread({}, _expandingLine3, {
582
+ points: _expandingLine3.points.map(function (p) {
583
+ return p.width ? p : _objectSpread({}, p, {
584
+ width: expandingWidth
585
+ });
586
+ }),
587
+ expandingWidth: undefined
588
+ }))).setIn(["mode"], null);
589
+ }
590
+
591
+ default:
592
+ break;
593
+ }
594
+ }
595
+
596
+ var newRegion;
597
+ var defaultRegionCls = state.selectedCls,
598
+ defaultRegionColor = "#ff0000";
599
+
600
+ var _clsIndex = (state.regionClsList || []).indexOf(defaultRegionCls);
601
+
602
+ if (_clsIndex !== -1) {
603
+ defaultRegionColor = colors[_clsIndex % colors.length];
604
+ }
605
+
606
+ switch (state.selectedTool) {
607
+ case "create-point":
608
+ {
609
+ state = saveToHistory(state, "Create Point");
610
+ newRegion = {
611
+ type: "point",
612
+ x: _x,
613
+ y: _y,
614
+ highlighted: true,
615
+ editingLabels: true,
616
+ color: defaultRegionColor,
617
+ id: getRandomId(),
618
+ cls: defaultRegionCls
619
+ };
620
+ break;
621
+ }
622
+
623
+ case "create-box":
624
+ {
625
+ state = saveToHistory(state, "Create Box");
626
+ newRegion = {
627
+ type: "box",
628
+ x: _x,
629
+ y: _y,
630
+ w: 0,
631
+ h: 0,
632
+ highlighted: true,
633
+ editingLabels: false,
634
+ color: defaultRegionColor,
635
+ cls: defaultRegionCls,
636
+ id: getRandomId()
637
+ };
638
+ state = setIn(state, ["mode"], {
639
+ mode: "RESIZE_BOX",
640
+ editLabelEditorAfter: true,
641
+ regionId: newRegion.id,
642
+ freedom: [1, 1],
643
+ original: {
644
+ x: _x,
645
+ y: _y,
646
+ w: newRegion.w,
647
+ h: newRegion.h
648
+ },
649
+ isNew: true
650
+ });
651
+ break;
652
+ }
653
+
654
+ case "create-polygon":
655
+ {
656
+ if (state.mode && state.mode.mode === "DRAW_POLYGON") break;
657
+ state = saveToHistory(state, "Create Polygon");
658
+ newRegion = {
659
+ type: "polygon",
660
+ points: [[_x, _y], [_x, _y]],
661
+ open: true,
662
+ highlighted: true,
663
+ color: defaultRegionColor,
664
+ cls: defaultRegionCls,
665
+ id: getRandomId()
666
+ };
667
+ state = setIn(state, ["mode"], {
668
+ mode: "DRAW_POLYGON",
669
+ regionId: newRegion.id
670
+ });
671
+ break;
672
+ }
673
+
674
+ case "create-expanding-line":
675
+ {
676
+ state = saveToHistory(state, "Create Expanding Line");
677
+ newRegion = {
678
+ type: "expanding-line",
679
+ unfinished: true,
680
+ points: [{
681
+ x: _x,
682
+ y: _y,
683
+ angle: null,
684
+ width: null
685
+ }],
686
+ open: true,
687
+ highlighted: true,
688
+ color: defaultRegionColor,
689
+ cls: defaultRegionCls,
690
+ id: getRandomId()
691
+ };
692
+ state = setIn(state, ["mode"], {
693
+ mode: "DRAW_EXPANDING_LINE",
694
+ regionId: newRegion.id
695
+ });
696
+ break;
697
+ }
698
+
699
+ case "create-line":
700
+ {
701
+ if (state.mode && state.mode.mode === "DRAW_LINE") break;
702
+ state = saveToHistory(state, "Create Line");
703
+ newRegion = {
704
+ type: "line",
705
+ x1: _x,
706
+ y1: _y,
707
+ x2: _x,
708
+ y2: _y,
709
+ highlighted: true,
710
+ editingLabels: false,
711
+ color: defaultRegionColor,
712
+ cls: defaultRegionCls,
713
+ id: getRandomId()
714
+ };
715
+ state = setIn(state, ["mode"], {
716
+ mode: "DRAW_LINE",
717
+ regionId: newRegion.id
718
+ });
719
+ break;
720
+ }
721
+
722
+ case "create-keypoints":
723
+ {
724
+ state = saveToHistory(state, "Create Keypoints");
725
+
726
+ var _ref2 = Object.entries(state.keypointDefinitions),
727
+ _ref3 = _slicedToArray(_ref2, 1),
728
+ _ref3$ = _slicedToArray(_ref3[0], 2),
729
+ keypointsDefinitionId = _ref3$[0],
730
+ _ref3$$ = _ref3$[1],
731
+ _landmarks = _ref3$$.landmarks,
732
+ connections = _ref3$$.connections;
733
+
734
+ newRegion = {
735
+ type: "keypoints",
736
+ keypointsDefinitionId: keypointsDefinitionId,
737
+ points: getLandmarksWithTransform({
738
+ landmarks: _landmarks,
739
+ center: {
740
+ x: _x,
741
+ y: _y
742
+ },
743
+ scale: 1
744
+ }),
745
+ highlighted: true,
746
+ editingLabels: false,
747
+ id: getRandomId()
748
+ };
749
+ state = setIn(state, ["mode"], {
750
+ mode: "RESIZE_KEYPOINTS",
751
+ landmarks: _landmarks,
752
+ centerX: _x,
753
+ centerY: _y,
754
+ regionId: newRegion.id,
755
+ isNew: true
756
+ });
757
+ break;
758
+ }
759
+
760
+ default:
761
+ break;
762
+ }
763
+
764
+ var _regions = _toConsumableArray(getIn(state, pathToActiveImage).regions || []).map(function (r) {
765
+ return setIn(r, ["editingLabels"], false).setIn(["highlighted"], false);
766
+ }).concat(newRegion ? [newRegion] : []);
767
+
768
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), _regions);
769
+ }
770
+
771
+ case "MOUSE_UP":
772
+ {
773
+ var _x2 = action.x,
774
+ _y2 = action.y;
775
+
776
+ var _state4 = state,
777
+ _state4$mouseDownAt = _state4.mouseDownAt,
778
+ _mouseDownAt2 = _state4$mouseDownAt === void 0 ? {
779
+ x: _x2,
780
+ y: _y2
781
+ } : _state4$mouseDownAt;
782
+
783
+ if (!state.mode) return state;
784
+ state = setIn(state, ["mouseDownAt"], null);
785
+
786
+ switch (state.mode.mode) {
787
+ case "RESIZE_BOX":
788
+ {
789
+ if (state.mode.isNew) {
790
+ if (Math.abs(state.mode.original.x - _x2) < 0.002 || Math.abs(state.mode.original.y - _y2) < 0.002) {
791
+ return setIn(modifyRegion(state.mode.regionId, null), ["mode"], null);
792
+ }
793
+ }
794
+
795
+ if (state.mode.editLabelEditorAfter) {
796
+ return _objectSpread({}, modifyRegion(state.mode.regionId, {
797
+ editingLabels: true
798
+ }), {
799
+ mode: null
800
+ });
801
+ }
802
+ }
803
+
804
+ case "MOVE_REGION":
805
+ case "RESIZE_KEYPOINTS":
806
+ case "MOVE_POLYGON_POINT":
807
+ {
808
+ return _objectSpread({}, state, {
809
+ mode: null
810
+ });
811
+ }
812
+
813
+ case "MOVE_KEYPOINT":
814
+ {
815
+ return _objectSpread({}, state, {
816
+ mode: null
817
+ });
818
+ }
819
+
820
+ case "CREATE_POINT_LINE":
821
+ {
822
+ return state;
823
+ }
824
+
825
+ case "DRAW_EXPANDING_LINE":
826
+ {
827
+ var _getRegion21 = getRegion(state.mode.regionId),
828
+ _getRegion22 = _slicedToArray(_getRegion21, 2),
829
+ _expandingLine4 = _getRegion22[0],
830
+ _regionIndex15 = _getRegion22[1];
831
+
832
+ if (!_expandingLine4) return state;
833
+ var newExpandingLine = _expandingLine4;
834
+
835
+ var _lastPoint3 = _expandingLine4.points.length !== 0 ? _expandingLine4.points.slice(-1)[0] : _mouseDownAt2;
836
+
837
+ var jointStart;
838
+
839
+ if (_expandingLine4.points.length > 1) {
840
+ jointStart = _expandingLine4.points.slice(-2)[0];
841
+ } else {
842
+ jointStart = _lastPoint3;
843
+ }
844
+
845
+ var _mouseDistFromLastPoint = Math.sqrt(Math.pow(_lastPoint3.x - _x2, 2) + Math.pow(_lastPoint3.y - _y2, 2));
846
+
847
+ if (_mouseDistFromLastPoint > 0.002) {
848
+ // The user is drawing has drawn the width for the last point
849
+ var newPoints = _toConsumableArray(_expandingLine4.points);
850
+
851
+ for (var i = 0; i < newPoints.length - 1; i++) {
852
+ if (newPoints[i].width) continue;
853
+ newPoints[i] = _objectSpread({}, newPoints[i], {
854
+ width: _lastPoint3.width
855
+ });
856
+ }
857
+
858
+ newExpandingLine = setIn(_expandingLine4, ["points"], fixTwisted(newPoints));
859
+ } else {
860
+ return state;
861
+ }
862
+
863
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex15]), newExpandingLine);
864
+ }
865
+
866
+ default:
867
+ return state;
868
+ }
869
+ }
870
+
871
+ case "OPEN_REGION_EDITOR":
872
+ {
873
+ var _region5 = action.region;
874
+
875
+ var _regionIndex16 = getRegionIndex(action.region);
876
+
877
+ if (_regionIndex16 === null) return state;
878
+ var newRegions = setIn(activeImage.regions.map(function (r) {
879
+ return _objectSpread({}, r, {
880
+ highlighted: false,
881
+ editingLabels: false
882
+ });
883
+ }), [_regionIndex16], _objectSpread({}, (activeImage.regions || [])[_regionIndex16], {
884
+ highlighted: true,
885
+ editingLabels: true
886
+ }));
887
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), newRegions);
888
+ }
889
+
890
+ case "CLOSE_REGION_EDITOR":
891
+ {
892
+ var _region6 = action.region;
893
+
894
+ var _regionIndex17 = getRegionIndex(action.region);
895
+
896
+ if (_regionIndex17 === null) return state;
897
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions", _regionIndex17]), _objectSpread({}, (activeImage.regions || [])[_regionIndex17], {
898
+ editingLabels: false
899
+ }));
900
+ }
901
+
902
+ case "DELETE_REGION":
903
+ {
904
+ var _regionIndex18 = getRegionIndex(action.region);
905
+
906
+ if (_regionIndex18 === null) return state;
907
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), (activeImage.regions || []).filter(function (r) {
908
+ return r.id !== action.region.id;
909
+ }));
910
+ }
911
+
912
+ case "DELETE_SELECTED_REGION":
913
+ {
914
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), (activeImage.regions || []).filter(function (r) {
915
+ return !r.highlighted;
916
+ }));
917
+ }
918
+
919
+ case "HEADER_BUTTON_CLICKED":
920
+ {
921
+ var buttonName = action.buttonName.toLowerCase();
922
+
923
+ switch (buttonName) {
924
+ case "prev":
925
+ {
926
+ if (currentImageIndex === null) return state;
927
+ if (currentImageIndex === 0) return state;
928
+ return setNewImage(state.images[currentImageIndex - 1], currentImageIndex - 1);
929
+ }
930
+
931
+ case "next":
932
+ {
933
+ if (currentImageIndex === null) return state;
934
+ if (currentImageIndex === state.images.length - 1) return state;
935
+ return setNewImage(state.images[currentImageIndex + 1], currentImageIndex + 1);
936
+ }
937
+
938
+ case "clone":
939
+ {
940
+ if (currentImageIndex === null) return state;
941
+ if (currentImageIndex === state.images.length - 1) return state;
942
+ return setIn(setNewImage(state.images[currentImageIndex + 1], currentImageIndex + 1), ["images", currentImageIndex + 1, "regions"], activeImage.regions);
943
+ }
944
+
945
+ case "settings":
946
+ {
947
+ return setIn(state, ["settingsOpen"], !state.settingsOpen);
948
+ }
949
+
950
+ case "help":
951
+ {
952
+ return state;
953
+ }
954
+
955
+ case "fullscreen":
956
+ {
957
+ return setIn(state, ["fullScreen"], true);
958
+ }
959
+
960
+ case "exit fullscreen":
961
+ case "window":
962
+ {
963
+ return setIn(state, ["fullScreen"], false);
964
+ }
965
+
966
+ case "hotkeys":
967
+ {
968
+ return state;
969
+ }
970
+
971
+ case "exit":
972
+ case "done":
973
+ {
974
+ return state;
975
+ }
976
+
977
+ default:
978
+ return state;
979
+ }
980
+ }
981
+
982
+ case "SELECT_TOOL":
983
+ {
984
+ if (action.selectedTool === "show-tags") {
985
+ setInLocalStorage("showTags", !state.showTags);
986
+ return setIn(state, ["showTags"], !state.showTags);
987
+ } else if (action.selectedTool === "show-mask") {
988
+ return setIn(state, ["showMask"], !state.showMask);
989
+ }
990
+
991
+ if (action.selectedTool === "modify-allowed-area" && !state.allowedArea) {
992
+ state = setIn(state, ["allowedArea"], {
993
+ x: 0,
994
+ y: 0,
995
+ w: 1,
996
+ h: 1
997
+ });
998
+ }
999
+
1000
+ state = setIn(state, ["mode"], null);
1001
+ return setIn(state, ["selectedTool"], action.selectedTool);
1002
+ }
1003
+
1004
+ case "CANCEL":
1005
+ {
1006
+ var _state5 = state,
1007
+ mode = _state5.mode;
1008
+
1009
+ if (mode) {
1010
+ switch (mode.mode) {
1011
+ case "DRAW_EXPANDING_LINE":
1012
+ case "SET_EXPANDING_LINE_WIDTH":
1013
+ case "DRAW_POLYGON":
1014
+ {
1015
+ var _regionId9 = mode.regionId;
1016
+ return modifyRegion(_regionId9, null);
1017
+ }
1018
+
1019
+ case "MOVE_POLYGON_POINT":
1020
+ case "RESIZE_BOX":
1021
+ case "MOVE_REGION":
1022
+ {
1023
+ return setIn(state, ["mode"], null);
1024
+ }
1025
+
1026
+ default:
1027
+ return state;
1028
+ }
1029
+ } // Close any open boxes
1030
+
1031
+
1032
+ var _regions2 = activeImage.regions;
1033
+
1034
+ if (_regions2 && _regions2.some(function (r) {
1035
+ return r.editingLabels;
1036
+ })) {
1037
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), _regions2.map(function (r) {
1038
+ return _objectSpread({}, r, {
1039
+ editingLabels: false
1040
+ });
1041
+ }));
1042
+ } else if (_regions2) {
1043
+ return setIn(state, [].concat(_toConsumableArray(pathToActiveImage), ["regions"]), _regions2.map(function (r) {
1044
+ return _objectSpread({}, r, {
1045
+ highlighted: false
1046
+ });
1047
+ }));
1048
+ }
1049
+
1050
+ break;
1051
+ }
1052
+
1053
+ default:
1054
+ break;
1055
+ }
1056
+
1057
+ return state;
1058
+ });