@searpent/react-image-annotate 2.0.77 → 2.0.79

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 (224) hide show
  1. package/Annotator/exampleImages.js +41 -0
  2. package/Annotator/examplePhotos.js +6980 -0
  3. package/Annotator/index.js +417 -0
  4. package/Annotator/reducers/combine-reducers.js +14 -0
  5. package/Annotator/reducers/convert-expanding-line-to-polygon.js +73 -0
  6. package/{src/Annotator → Annotator}/reducers/fix-twisted.js +3 -5
  7. package/Annotator/reducers/general-reducer.js +1430 -0
  8. package/Annotator/reducers/get-active-image.js +27 -0
  9. package/Annotator/reducers/get-implied-video-regions.js +180 -0
  10. package/Annotator/reducers/history-handler.js +38 -0
  11. package/Annotator/reducers/image-reducer.js +20 -0
  12. package/Annotator/reducers/video-reducer.js +88 -0
  13. package/ClassSelectionMenu/index.js +140 -0
  14. package/Crosshairs/index.js +53 -0
  15. package/DebugSidebarBox/index.js +20 -0
  16. package/DemoSite/Editor.js +194 -0
  17. package/DemoSite/ErrorBoundaryDialog.js +64 -0
  18. package/DemoSite/index.js +40 -0
  19. package/Editor/annotation-plugin/annotation.js +702 -0
  20. package/Editor/index.js +93 -0
  21. package/Editor/readOnly.js +123 -0
  22. package/{src/Editor → Editor}/tools.js +2 -3
  23. package/Errorer/index.js +11 -0
  24. package/FullImageSegmentationAnnotator/index.js +7 -0
  25. package/GroupSelectorSidebarBox/index.js +63 -0
  26. package/GroupsEditorSidebarBox/index.js +138 -0
  27. package/HelpSidebarBox/index.js +58 -0
  28. package/HighlightBox/index.js +102 -0
  29. package/HistorySidebarBox/index.js +71 -0
  30. package/ImageCanvas/index.js +441 -0
  31. package/ImageCanvas/region-tools.js +165 -0
  32. package/{src/ImageCanvas → ImageCanvas}/styles.js +12 -8
  33. package/ImageCanvas/use-mouse.js +180 -0
  34. package/ImageCanvas/use-project-box.js +27 -0
  35. package/ImageCanvas/use-wasd-mode.js +62 -0
  36. package/ImageMask/index.js +133 -0
  37. package/ImageMask/load-image.js +25 -0
  38. package/ImageSelectorSidebarBox/index.js +60 -0
  39. package/KeyframeTimeline/get-time-string.js +27 -0
  40. package/KeyframeTimeline/index.js +233 -0
  41. package/KeyframesSelectorSidebarBox/index.js +93 -0
  42. package/LandingPage/index.js +159 -0
  43. package/Locker/index.js +11 -0
  44. package/MainLayout/RightSidebarItemsWrapper.js +19 -0
  45. package/MainLayout/icon-dictionary.js +104 -0
  46. package/MainLayout/index.js +526 -0
  47. package/{src/MainLayout → MainLayout}/styles.js +6 -7
  48. package/MainLayout/types.js +0 -0
  49. package/MainLayout/use-implied-video-regions.js +13 -0
  50. package/MetadataEditorSidebarBox/index.js +231 -0
  51. package/PageSelector/index.js +180 -0
  52. package/PointDistances/index.js +73 -0
  53. package/PreventScrollToParents/index.js +51 -0
  54. package/RegionLabel/index.js +232 -0
  55. package/{src/RegionLabel → RegionLabel}/styles.js +12 -15
  56. package/RegionSelectAndTransformBoxes/index.js +169 -0
  57. package/RegionSelectorSidebarBox/index.js +254 -0
  58. package/{src/RegionSelectorSidebarBox → RegionSelectorSidebarBox}/styles.js +13 -14
  59. package/RegionShapes/index.js +294 -0
  60. package/RegionTags/index.js +144 -0
  61. package/SettingsDialog/index.js +52 -0
  62. package/SettingsProvider/index.js +60 -0
  63. package/Shortcuts/ShortcutField.js +46 -0
  64. package/Shortcuts/index.js +133 -0
  65. package/ShortcutsManager/index.js +155 -0
  66. package/Sidebar/index.js +69 -0
  67. package/SidebarBoxContainer/index.js +93 -0
  68. package/SmallToolButton/index.js +42 -0
  69. package/TagsSidebarBox/index.js +105 -0
  70. package/TaskDescriptionSidebarBox/index.js +58 -0
  71. package/Theme/index.js +30 -0
  72. package/VideoOrImageCanvasBackground/index.js +151 -0
  73. package/colors.js +14 -0
  74. package/hooks/use-colors.js +127 -0
  75. package/hooks/use-event-callback.js +10 -0
  76. package/hooks/use-exclude-pattern.js +24 -0
  77. package/hooks/use-load-image.js +26 -0
  78. package/hooks/use-window-size.js +46 -0
  79. package/{src/hooks → hooks}/xpattern.js +1 -1
  80. package/index.js +3 -0
  81. package/lib.js +3 -0
  82. package/package.json +1 -1
  83. package/stories.js +5 -0
  84. package/utils/blocks-to-article.js +60 -0
  85. package/{src/utils → utils}/blocks-to-article.test.js +5 -8
  86. package/{src/utils → utils}/default-locked-until.js +2 -1
  87. package/{src/utils → utils}/filter-only-unique.js +1 -1
  88. package/utils/get-from-local-storage.js +7 -0
  89. package/utils/get-hotkey-help-text.js +9 -0
  90. package/utils/get-landmarks-with-transform.js +40 -0
  91. package/utils/photosToImages.js +85 -0
  92. package/utils/regions-groups.js +28 -0
  93. package/utils/regions-to-blocks.js +18 -0
  94. package/utils/saveable-actions-enum.js +3 -0
  95. package/utils/set-in-local-storage.js +3 -0
  96. package/utils/sleep.js +7 -0
  97. package/utils/uuid-to-hash.js +5 -0
  98. package/.babelrc +0 -6
  99. package/.env +0 -1
  100. package/.flowconfig +0 -2
  101. package/.github/workflows/release-on-master.yml +0 -32
  102. package/.github/workflows/test.yml +0 -16
  103. package/.prettierrc +0 -3
  104. package/.releaserc.js +0 -18
  105. package/.storybook/addons.js +0 -2
  106. package/.storybook/config.js +0 -16
  107. package/LICENSE +0 -21
  108. package/public/favicon.ico +0 -0
  109. package/public/index.html +0 -38
  110. package/src/Annotator/bike-pic.png +0 -0
  111. package/src/Annotator/bike-pic2.png +0 -0
  112. package/src/Annotator/dab-keyframes.story.json +0 -1
  113. package/src/Annotator/exampleImages.js +0 -48
  114. package/src/Annotator/examplePhotos.js +0 -7603
  115. package/src/Annotator/index.js +0 -380
  116. package/src/Annotator/index.story.js +0 -899
  117. package/src/Annotator/poses.story.js +0 -150
  118. package/src/Annotator/reducers/combine-reducers.js +0 -7
  119. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -53
  120. package/src/Annotator/reducers/general-reducer.js +0 -1228
  121. package/src/Annotator/reducers/get-active-image.js +0 -21
  122. package/src/Annotator/reducers/get-implied-video-regions.js +0 -115
  123. package/src/Annotator/reducers/history-handler.js +0 -60
  124. package/src/Annotator/reducers/image-reducer.js +0 -23
  125. package/src/Annotator/reducers/video-reducer.js +0 -85
  126. package/src/Annotator/video.story.js +0 -51
  127. package/src/ClassSelectionMenu/index.js +0 -112
  128. package/src/Crosshairs/index.js +0 -64
  129. package/src/DebugSidebarBox/index.js +0 -36
  130. package/src/DemoSite/Editor.js +0 -235
  131. package/src/DemoSite/ErrorBoundaryDialog.js +0 -34
  132. package/src/DemoSite/index.js +0 -41
  133. package/src/DemoSite/index.story.js +0 -10
  134. package/src/DemoSite/simple-segmentation-example.json +0 -572
  135. package/src/Editor/annotation-plugin/annotation.js +0 -546
  136. package/src/Editor/index.js +0 -50
  137. package/src/Editor/readOnly.js +0 -31
  138. package/src/Errorer/index.js +0 -13
  139. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  140. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  141. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  142. package/src/FullImageSegmentationAnnotator/index.js +0 -7
  143. package/src/FullImageSegmentationAnnotator/index.story.js +0 -177
  144. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  145. package/src/GroupSelectorSidebarBox/index.js +0 -48
  146. package/src/GroupsEditorSidebarBox/index.js +0 -108
  147. package/src/HelpSidebarBox/index.js +0 -43
  148. package/src/HighlightBox/index.js +0 -143
  149. package/src/HistorySidebarBox/index.js +0 -78
  150. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  151. package/src/ImageCanvas/index.js +0 -515
  152. package/src/ImageCanvas/index.story.js +0 -314
  153. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  154. package/src/ImageCanvas/region-tools.js +0 -171
  155. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  156. package/src/ImageCanvas/use-mouse.js +0 -168
  157. package/src/ImageCanvas/use-project-box.js +0 -23
  158. package/src/ImageCanvas/use-wasd-mode.js +0 -50
  159. package/src/ImageMask/index.js +0 -127
  160. package/src/ImageMask/load-image.js +0 -32
  161. package/src/ImageSelectorSidebarBox/index.js +0 -54
  162. package/src/KeyframeTimeline/get-time-string.js +0 -25
  163. package/src/KeyframeTimeline/index.js +0 -223
  164. package/src/KeyframesSelectorSidebarBox/index.js +0 -93
  165. package/src/LandingPage/content.md +0 -57
  166. package/src/LandingPage/github-markdown.css +0 -964
  167. package/src/LandingPage/index.js +0 -147
  168. package/src/Locker/index.js +0 -13
  169. package/src/MainLayout/RightSidebarItemsWrapper.js +0 -21
  170. package/src/MainLayout/icon-dictionary.js +0 -79
  171. package/src/MainLayout/index.js +0 -564
  172. package/src/MainLayout/index.story.js +0 -240
  173. package/src/MainLayout/types.js +0 -171
  174. package/src/MainLayout/use-implied-video-regions.js +0 -17
  175. package/src/MetadataEditorSidebarBox/index.js +0 -160
  176. package/src/PageSelector/index.js +0 -159
  177. package/src/PointDistances/index.js +0 -90
  178. package/src/PreventScrollToParents/index.js +0 -48
  179. package/src/PreventScrollToParents/index.story.js +0 -23
  180. package/src/RegionLabel/index.js +0 -236
  181. package/src/RegionSelectAndTransformBoxes/index.js +0 -236
  182. package/src/RegionSelectorSidebarBox/index.js +0 -220
  183. package/src/RegionShapes/index.js +0 -254
  184. package/src/RegionTags/index.js +0 -136
  185. package/src/SettingsDialog/index.js +0 -58
  186. package/src/SettingsProvider/index.js +0 -57
  187. package/src/Shortcuts/ShortcutField.js +0 -44
  188. package/src/Shortcuts/index.js +0 -129
  189. package/src/ShortcutsManager/index.js +0 -162
  190. package/src/Sidebar/index.js +0 -117
  191. package/src/SidebarBoxContainer/index.js +0 -93
  192. package/src/SmallToolButton/index.js +0 -57
  193. package/src/TagsSidebarBox/index.js +0 -93
  194. package/src/TaskDescriptionSidebarBox/index.js +0 -43
  195. package/src/Theme/index.js +0 -36
  196. package/src/VideoOrImageCanvasBackground/index.js +0 -170
  197. package/src/colors.js +0 -32
  198. package/src/hooks/use-colors.js +0 -95
  199. package/src/hooks/use-event-callback.js +0 -11
  200. package/src/hooks/use-exclude-pattern.js +0 -27
  201. package/src/hooks/use-load-image.js +0 -21
  202. package/src/hooks/use-window-size.js +0 -46
  203. package/src/hooks/xpattern.png +0 -0
  204. package/src/index.js +0 -18
  205. package/src/lib.js +0 -7
  206. package/src/screenshot.png +0 -0
  207. package/src/site.css +0 -5
  208. package/src/stories.js +0 -2
  209. package/src/utils/blocks-to-article.js +0 -61
  210. package/src/utils/get-from-local-storage.js +0 -7
  211. package/src/utils/get-hotkey-help-text.js +0 -11
  212. package/src/utils/get-landmarks-with-transform.js +0 -23
  213. package/src/utils/photosToImages.js +0 -67
  214. package/src/utils/regions-groups.js +0 -19
  215. package/src/utils/regions-to-blocks.js +0 -16
  216. package/src/utils/saveable-actions-enum.js +0 -5
  217. package/src/utils/set-in-local-storage.js +0 -6
  218. package/src/utils/sleep.js +0 -3
  219. package/src/utils/uuid-to-hash.js +0 -5
  220. /package/{src/Editor → Editor}/annotation-plugin/annotation.css +0 -0
  221. /package/{src/Errorer → Errorer}/errorer.css +0 -0
  222. /package/{src/Locker → Locker}/locker.css +0 -0
  223. /package/{src/PageSelector → PageSelector}/page-selector.css +0 -0
  224. /package/{src/utils → utils}/next-group-id.js +0 -0
@@ -0,0 +1,417 @@
1
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
4
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
5
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
6
+ import React, { useCallback, useEffect, useReducer } from "react";
7
+ import makeImmutable, { without } from "seamless-immutable";
8
+ import intersection from "lodash/intersection";
9
+ import MainLayout from "../MainLayout";
10
+ import SettingsProvider from "../SettingsProvider";
11
+ import combineReducers from "./reducers/combine-reducers.js";
12
+ import generalReducer from "./reducers/general-reducer.js";
13
+ import getFromLocalStorage from "../utils/get-from-local-storage";
14
+ import historyHandler from "./reducers/history-handler.js";
15
+ import imageReducer from "./reducers/image-reducer.js";
16
+ import useEventCallback from "use-event-callback";
17
+ import videoReducer from "./reducers/video-reducer.js";
18
+ import { reacalcActionsEnum } from "../utils/saveable-actions-enum";
19
+ import sleep from '../utils/sleep';
20
+ export var Annotator = function Annotator(_ref) {
21
+ var images = _ref.images,
22
+ allowedArea = _ref.allowedArea,
23
+ _ref$selectedImage = _ref.selectedImage,
24
+ selectedImage = _ref$selectedImage === void 0 ? images && images.length > 0 ? 0 : undefined : _ref$selectedImage,
25
+ showPointDistances = _ref.showPointDistances,
26
+ pointDistancePrecision = _ref.pointDistancePrecision,
27
+ _ref$showTags = _ref.showTags,
28
+ showTags = _ref$showTags === void 0 ? getFromLocalStorage("showTags", true) : _ref$showTags,
29
+ _ref$enabledTools = _ref.enabledTools,
30
+ enabledTools = _ref$enabledTools === void 0 ? ["select", "create-point", "create-box", "create-polygon", "create-line", "create-expanding-line", "show-mask"] : _ref$enabledTools,
31
+ _ref$selectedTool = _ref.selectedTool,
32
+ selectedTool = _ref$selectedTool === void 0 ? "select" : _ref$selectedTool,
33
+ _ref$regionTagList = _ref.regionTagList,
34
+ regionTagList = _ref$regionTagList === void 0 ? [] : _ref$regionTagList,
35
+ _ref$regionClsList = _ref.regionClsList,
36
+ regionClsList = _ref$regionClsList === void 0 ? [] : _ref$regionClsList,
37
+ _ref$imageTagList = _ref.imageTagList,
38
+ imageTagList = _ref$imageTagList === void 0 ? [] : _ref$imageTagList,
39
+ _ref$imageClsList = _ref.imageClsList,
40
+ imageClsList = _ref$imageClsList === void 0 ? [] : _ref$imageClsList,
41
+ _ref$keyframes = _ref.keyframes,
42
+ keyframes = _ref$keyframes === void 0 ? {} : _ref$keyframes,
43
+ _ref$taskDescription = _ref.taskDescription,
44
+ taskDescription = _ref$taskDescription === void 0 ? "" : _ref$taskDescription,
45
+ _ref$help = _ref.help,
46
+ help = _ref$help === void 0 ? "" : _ref$help,
47
+ _ref$fullImageSegment = _ref.fullImageSegmentationMode,
48
+ fullImageSegmentationMode = _ref$fullImageSegment === void 0 ? false : _ref$fullImageSegment,
49
+ RegionEditLabel = _ref.RegionEditLabel,
50
+ videoSrc = _ref.videoSrc,
51
+ _ref$videoTime = _ref.videoTime,
52
+ videoTime = _ref$videoTime === void 0 ? 0 : _ref$videoTime,
53
+ videoName = _ref.videoName,
54
+ onExit = _ref.onExit,
55
+ onNextImage = _ref.onNextImage,
56
+ onPrevImage = _ref.onPrevImage,
57
+ keypointDefinitions = _ref.keypointDefinitions,
58
+ _ref$autoSegmentation = _ref.autoSegmentationOptions,
59
+ autoSegmentationOptions = _ref$autoSegmentation === void 0 ? {
60
+ type: "autoseg"
61
+ } : _ref$autoSegmentation,
62
+ hideHeader = _ref.hideHeader,
63
+ hideHeaderText = _ref.hideHeaderText,
64
+ hideNext = _ref.hideNext,
65
+ hidePrev = _ref.hidePrev,
66
+ hideClone = _ref.hideClone,
67
+ hideSettings = _ref.hideSettings,
68
+ hideFullScreen = _ref.hideFullScreen,
69
+ hideSave = _ref.hideSave,
70
+ allowComments = _ref.allowComments,
71
+ onImagesChange = _ref.onImagesChange,
72
+ groups = _ref.groups,
73
+ onGroupSelect = _ref.onGroupSelect,
74
+ hideHistory = _ref.hideHistory,
75
+ hideNotEditingLabel = _ref.hideNotEditingLabel,
76
+ showEditor = _ref.showEditor,
77
+ showPageSelector = _ref.showPageSelector,
78
+ _ref$clsColors = _ref.clsColors,
79
+ clsColors = _ref$clsColors === void 0 ? {} : _ref$clsColors,
80
+ groupColors = _ref.groupColors,
81
+ onSelectedImageChange = _ref.onSelectedImageChange,
82
+ albumMetadata = _ref.albumMetadata,
83
+ metadataConfigs = _ref.metadataConfigs,
84
+ _ref$save = _ref.save,
85
+ save = _ref$save === void 0 ? function () {} : _ref$save,
86
+ _ref$fetchImage = _ref.fetchImage,
87
+ fetchImage = _ref$fetchImage === void 0 ? function () {} : _ref$fetchImage;
88
+
89
+ if (typeof selectedImage === "string") {
90
+ selectedImage = (images || []).findIndex(function (img) {
91
+ return img.src === selectedImage;
92
+ });
93
+ if (selectedImage === -1) selectedImage = undefined;
94
+ }
95
+
96
+ var annotationType = images ? "image" : "video";
97
+
98
+ var _useReducer = useReducer(historyHandler(combineReducers(annotationType === "image" ? imageReducer : videoReducer, generalReducer)), makeImmutable(_objectSpread({
99
+ annotationType: annotationType,
100
+ showTags: showTags,
101
+ allowedArea: allowedArea,
102
+ showPointDistances: showPointDistances,
103
+ pointDistancePrecision: pointDistancePrecision,
104
+ selectedTool: selectedTool,
105
+ fullImageSegmentationMode: fullImageSegmentationMode,
106
+ autoSegmentationOptions: autoSegmentationOptions,
107
+ mode: null,
108
+ taskDescription: taskDescription,
109
+ help: help,
110
+ showMask: true,
111
+ labelImages: imageClsList.length > 0 || imageTagList.length > 0,
112
+ regionClsList: regionClsList,
113
+ regionTagList: regionTagList,
114
+ imageClsList: imageClsList,
115
+ imageTagList: imageTagList,
116
+ currentVideoTime: videoTime,
117
+ enabledTools: enabledTools,
118
+ history: [],
119
+ videoName: videoName,
120
+ keypointDefinitions: keypointDefinitions,
121
+ allowComments: allowComments
122
+ }, annotationType === "image" ? {
123
+ selectedImage: selectedImage,
124
+ images: images,
125
+ selectedImageFrameTime: images && images.length > 0 ? images[0].frameTime : undefined
126
+ } : {
127
+ videoSrc: videoSrc,
128
+ keyframes: keyframes
129
+ }, {
130
+ imagesUpdatedAt: null,
131
+ imagesSavedAt: null,
132
+ albumMetadata: albumMetadata,
133
+ metadataConfigs: metadataConfigs,
134
+ toPollImages: _toConsumableArray(images.filter(function (i) {
135
+ return i.lockedUntil;
136
+ }).map(function (i) {
137
+ return i.id;
138
+ })),
139
+ toSaveImage: null
140
+ }))),
141
+ _useReducer2 = _slicedToArray(_useReducer, 2),
142
+ state = _useReducer2[0],
143
+ dispatchToReducer = _useReducer2[1];
144
+
145
+ var dispatch = useEventCallback(function (action) {
146
+ if (action.type === "HEADER_BUTTON_CLICKED") {
147
+ if (["Exit", "Done", "Save", "Complete"].includes(action.buttonName)) {
148
+ return onExit(without(state, "history"));
149
+ } else if (action.buttonName === "Next" && onNextImage) {
150
+ return onNextImage(without(state, "history"));
151
+ } else if (action.buttonName === "Prev" && onPrevImage) {
152
+ return onPrevImage(without(state, "history"));
153
+ }
154
+ }
155
+
156
+ dispatchToReducer(action);
157
+ });
158
+ var onRegionClassAdded = useEventCallback(function (cls) {
159
+ dispatchToReducer({
160
+ type: "ON_CLS_ADDED",
161
+ cls: cls
162
+ });
163
+ });
164
+
165
+ var handleMetadataChange = function handleMetadataChange(params) {
166
+ dispatchToReducer(_objectSpread({
167
+ type: "UPDATE_METADATA"
168
+ }, params));
169
+ };
170
+
171
+ var handleAddGroup = function handleAddGroup(group) {
172
+ dispatchToReducer({
173
+ type: "ADD_GROUP",
174
+ group: group
175
+ });
176
+ };
177
+
178
+ var handleRecalcClicked = useCallback(function (_ref2) {
179
+ var imageId = _ref2.imageId;
180
+ dispatchToReducer({
181
+ type: "RECALC_CLICKED",
182
+ imageId: imageId
183
+ });
184
+ }, [dispatchToReducer]); // detect on page change if anything changed, if so trigger save and recalc
185
+
186
+ useEffect(function () {
187
+ var selectedImage = state.selectedImage,
188
+ previouslySelectedImage = state.previouslySelectedImage,
189
+ lastAction = state.lastAction;
190
+
191
+ if ((lastAction === null || lastAction === void 0 ? void 0 : lastAction.type) === 'SELECT_IMAGE' && selectedImage !== previouslySelectedImage) {
192
+ var _state$images$previou, _state$images$previou2;
193
+
194
+ // save if previously selected image has any changes
195
+ if (((_state$images$previou = state.images[previouslySelectedImage]) === null || _state$images$previou === void 0 ? void 0 : (_state$images$previou2 = _state$images$previou.saveableActions) === null || _state$images$previou2 === void 0 ? void 0 : _state$images$previou2.length) > 0) {
196
+ var _state$images$previou3, _state$images$previou4;
197
+
198
+ // decide wheather recalc is needed
199
+ var triggerRecalc = intersection(reacalcActionsEnum, state.images[previouslySelectedImage].saveableActions).length > 0; // decide whether album metadata should be updated
200
+
201
+ var toSaveMetadata = [];
202
+
203
+ if ((_state$images$previou3 = state.images[previouslySelectedImage]) === null || _state$images$previou3 === void 0 ? void 0 : (_state$images$previou4 = _state$images$previou3.saveableActions) === null || _state$images$previou4 === void 0 ? void 0 : _state$images$previou4.includes("UPDATE_ALBUM_METADATA")) {
204
+ toSaveMetadata = state.albumMetadata;
205
+ } // set this image to be saved
206
+
207
+
208
+ dispatchToReducer({
209
+ type: "SAVE_IMAGE",
210
+ image: _objectSpread({}, state.images[previouslySelectedImage]),
211
+ triggerRecalc: triggerRecalc,
212
+ toSaveMetadata: toSaveMetadata
213
+ });
214
+ }
215
+ }
216
+ }, [state.previouslySelectedImage, state.selectedImage, state.images, state, save]); // handle save of image
217
+
218
+ useEffect(function () {
219
+ if (state.toSaveImage !== null) {
220
+ // metadata on album level
221
+ var saveHandler =
222
+ /*#__PURE__*/
223
+ function () {
224
+ var _ref3 = _asyncToGenerator(
225
+ /*#__PURE__*/
226
+ _regeneratorRuntime.mark(function _callee(image, triggerRecalc, albumMetadata) {
227
+ var _ref4, lockedUntil;
228
+
229
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
230
+ while (1) {
231
+ switch (_context.prev = _context.next) {
232
+ case 0:
233
+ dispatchToReducer({
234
+ type: "IMAGE_UPDATE_INIT",
235
+ imageId: image.id
236
+ });
237
+ _context.prev = 1;
238
+ _context.next = 4;
239
+ return save({
240
+ image: image,
241
+ triggerRecalc: triggerRecalc,
242
+ albumMetadata: albumMetadata
243
+ });
244
+
245
+ case 4:
246
+ _ref4 = _context.sent;
247
+ lockedUntil = _ref4.lockedUntil;
248
+ dispatchToReducer({
249
+ type: "IMAGE_UPDATE_SUCCESS",
250
+ imageId: image.id,
251
+ lockedUntil: lockedUntil
252
+ });
253
+ _context.next = 12;
254
+ break;
255
+
256
+ case 9:
257
+ _context.prev = 9;
258
+ _context.t0 = _context["catch"](1);
259
+ dispatchToReducer({
260
+ type: "IMAGE_UPDATE_FAIL",
261
+ imageId: image.id,
262
+ error: _context.t0
263
+ });
264
+
265
+ case 12:
266
+ case "end":
267
+ return _context.stop();
268
+ }
269
+ }
270
+ }, _callee, null, [[1, 9]]);
271
+ }));
272
+
273
+ return function saveHandler(_x, _x2, _x3) {
274
+ return _ref3.apply(this, arguments);
275
+ };
276
+ }();
277
+
278
+ var _state$toSaveImage = state.toSaveImage,
279
+ image = _state$toSaveImage.image,
280
+ triggerRecalc = _state$toSaveImage.triggerRecalc,
281
+ toSaveMetadata = _state$toSaveImage.toSaveMetadata;
282
+ saveHandler(image, triggerRecalc, toSaveMetadata);
283
+ }
284
+ }, [save, state.toSaveImage]); // polling of images
285
+
286
+ useEffect(function () {
287
+ if (state.toPollImages.length > 0) {
288
+ var polledImages = state.toPollImages.reduce(function (acc, imageId) {
289
+ function pollImage(_x4, _x5) {
290
+ return _pollImage.apply(this, arguments);
291
+ } // make recursive calling of polling function
292
+
293
+
294
+ function _pollImage() {
295
+ _pollImage = _asyncToGenerator(
296
+ /*#__PURE__*/
297
+ _regeneratorRuntime.mark(function _callee2(fetchImage, imageId) {
298
+ var tries,
299
+ _ref5,
300
+ image,
301
+ _args2 = arguments;
302
+
303
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
304
+ while (1) {
305
+ switch (_context2.prev = _context2.next) {
306
+ case 0:
307
+ tries = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : 5;
308
+
309
+ if (!(tries === 0)) {
310
+ _context2.next = 4;
311
+ break;
312
+ }
313
+
314
+ dispatchToReducer({
315
+ type: "IMAGE_POLL_TIMEOUT",
316
+ imageId: imageId
317
+ });
318
+ return _context2.abrupt("return");
319
+
320
+ case 4:
321
+ _context2.next = 6;
322
+ return fetchImage({
323
+ imageId: imageId
324
+ });
325
+
326
+ case 6:
327
+ _ref5 = _context2.sent;
328
+ image = _ref5.image;
329
+
330
+ if (image.lockedUntil) {
331
+ _context2.next = 11;
332
+ break;
333
+ }
334
+
335
+ dispatchToReducer({
336
+ type: "IMAGE_POLL_SUCCESS",
337
+ image: image
338
+ });
339
+ return _context2.abrupt("return");
340
+
341
+ case 11:
342
+ _context2.next = 13;
343
+ return sleep(5000);
344
+
345
+ case 13:
346
+ _context2.next = 15;
347
+ return pollImage(fetchImage, imageId, tries - 1);
348
+
349
+ case 15:
350
+ return _context2.abrupt("return", _context2.sent);
351
+
352
+ case 16:
353
+ case "end":
354
+ return _context2.stop();
355
+ }
356
+ }
357
+ }, _callee2);
358
+ }));
359
+ return _pollImage.apply(this, arguments);
360
+ }
361
+
362
+ pollImage(fetchImage, imageId, 10);
363
+ return imageId;
364
+ }, []);
365
+ dispatchToReducer({
366
+ type: "IMAGE_POLL_INIT",
367
+ imageIds: polledImages
368
+ });
369
+ }
370
+ }, [fetchImage, state.toPollImages]);
371
+ useEffect(function () {
372
+ if (selectedImage === undefined) return;
373
+ dispatchToReducer({
374
+ type: "SELECT_IMAGE",
375
+ imageIndex: selectedImage,
376
+ image: state.images[selectedImage]
377
+ }); // eslint-disable-next-line react-hooks/exhaustive-deps
378
+ }, [onImagesChange, selectedImage]);
379
+ if (!images && !videoSrc) return 'Missing required prop "images" or "videoSrc"';
380
+
381
+ var _ref6 = state.imagesSavedAt < state.imagesUpdatedAt ? [true, true] : [false, false],
382
+ _ref7 = _slicedToArray(_ref6, 2),
383
+ recalcActive = _ref7[0],
384
+ saveActive = _ref7[1];
385
+
386
+ return React.createElement(SettingsProvider, {
387
+ clsColors: clsColors,
388
+ groupColors: groupColors
389
+ }, React.createElement(MainLayout, {
390
+ RegionEditLabel: RegionEditLabel,
391
+ alwaysShowNextButton: Boolean(onNextImage),
392
+ alwaysShowPrevButton: Boolean(onPrevImage),
393
+ state: state,
394
+ dispatch: dispatch,
395
+ onRegionClassAdded: onRegionClassAdded,
396
+ hideHeader: hideHeader,
397
+ hideHeaderText: hideHeaderText,
398
+ hideNext: hideNext,
399
+ hidePrev: hidePrev,
400
+ hideClone: hideClone,
401
+ hideSettings: hideSettings,
402
+ hideFullScreen: hideFullScreen,
403
+ hideSave: hideSave,
404
+ groups: groups,
405
+ onGroupSelect: onGroupSelect,
406
+ hideHistory: hideHistory,
407
+ hideNotEditingLabel: hideNotEditingLabel,
408
+ showEditor: showEditor,
409
+ showPageSelector: showPageSelector,
410
+ saveActive: recalcActive,
411
+ recalcActive: saveActive,
412
+ onMetadataChange: handleMetadataChange,
413
+ onAddGroup: handleAddGroup,
414
+ onRecalcClick: handleRecalcClicked
415
+ }));
416
+ };
417
+ export default Annotator;
@@ -0,0 +1,14 @@
1
+ export default (function () {
2
+ for (var _len = arguments.length, reducers = new Array(_len), _key = 0; _key < _len; _key++) {
3
+ reducers[_key] = arguments[_key];
4
+ }
5
+
6
+ return function (state, action) {
7
+ for (var _i = 0, _reducers = reducers; _i < _reducers.length; _i++) {
8
+ var reducer = _reducers[_i];
9
+ state = reducer(state, action);
10
+ }
11
+
12
+ return state;
13
+ };
14
+ });
@@ -0,0 +1,73 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+
4
+ function clamp(num, min, max) {
5
+ return num <= min ? min : num >= max ? max : num;
6
+ }
7
+
8
+ export default (function (expandingLine) {
9
+ var expandingWidth = expandingLine.expandingWidth || 0.005;
10
+ var pointPairs = expandingLine.points.map(function (_ref, i) {
11
+ var x = _ref.x,
12
+ y = _ref.y,
13
+ angle = _ref.angle,
14
+ width = _ref.width;
15
+
16
+ if (!angle) {
17
+ var n = expandingLine.points[clamp(i + 1, 0, expandingLine.points.length - 1)];
18
+ var p = expandingLine.points[clamp(i - 1, 0, expandingLine.points.length - 1)];
19
+ angle = Math.atan2(p.x - n.x, p.y - n.y) + Math.PI / 2;
20
+ }
21
+
22
+ var dx = Math.sin(angle) * (width || expandingWidth) / 2;
23
+ var dy = Math.cos(angle) * (width || expandingWidth) / 2;
24
+ return [{
25
+ x: x + dx,
26
+ y: y + dy
27
+ }, {
28
+ x: x - dx,
29
+ y: y - dy
30
+ }];
31
+ });
32
+ var firstSection = pointPairs.map(function (_ref2) {
33
+ var _ref3 = _slicedToArray(_ref2, 2),
34
+ p1 = _ref3[0],
35
+ p2 = _ref3[1];
36
+
37
+ return p1;
38
+ });
39
+ var secondSection = pointPairs.map(function (_ref4) {
40
+ var _ref5 = _slicedToArray(_ref4, 2),
41
+ p1 = _ref5[0],
42
+ p2 = _ref5[1];
43
+
44
+ return p2;
45
+ }).asMutable();
46
+ secondSection.reverse();
47
+ var newPoints = firstSection.concat(secondSection).map(function (_ref6) {
48
+ var x = _ref6.x,
49
+ y = _ref6.y;
50
+ return [x, y];
51
+ });
52
+ return _objectSpread({}, expandingLine, {
53
+ type: "polygon",
54
+ open: false,
55
+ points: newPoints,
56
+ unfinished: undefined,
57
+ candidatePoint: undefined // let { expandingWidth = 0.005, points } = region
58
+ // expandingWidth = points.slice(-1)[0].width || expandingWidth
59
+ // const lastPoint = points.slice(-1)[0]
60
+ // return (
61
+ // <>
62
+ // <polygon
63
+ // points={
64
+ // .map((p) => `${p.x * iw} ${p.y * ih}`)
65
+ // .join(" ")}
66
+ // return {
67
+ // ...expandingLine,
68
+ // unfinished: undefined,
69
+ // candidatePoint: undefined,
70
+ // }
71
+
72
+ });
73
+ });
@@ -1,6 +1,4 @@
1
- // @flow
2
-
3
- export default (pointsWithAngles) => {
1
+ export default (function (pointsWithAngles) {
4
2
  // Adjacent angles should not have an angular distance of more than Math.PI
5
- return pointsWithAngles
6
- }
3
+ return pointsWithAngles;
4
+ });