@searpent/react-image-annotate 2.0.76 → 2.0.78

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/{src/Editor → Editor}/annotation-plugin/annotation.css +20 -0
  20. package/Editor/annotation-plugin/annotation.js +697 -0
  21. package/Editor/index.js +93 -0
  22. package/Editor/readOnly.js +123 -0
  23. package/{src/Editor → Editor}/tools.js +2 -3
  24. package/Errorer/index.js +11 -0
  25. package/FullImageSegmentationAnnotator/index.js +7 -0
  26. package/GroupSelectorSidebarBox/index.js +63 -0
  27. package/GroupsEditorSidebarBox/index.js +138 -0
  28. package/HelpSidebarBox/index.js +58 -0
  29. package/HighlightBox/index.js +102 -0
  30. package/HistorySidebarBox/index.js +71 -0
  31. package/ImageCanvas/index.js +441 -0
  32. package/ImageCanvas/region-tools.js +165 -0
  33. package/{src/ImageCanvas → ImageCanvas}/styles.js +12 -8
  34. package/ImageCanvas/use-mouse.js +180 -0
  35. package/ImageCanvas/use-project-box.js +27 -0
  36. package/ImageCanvas/use-wasd-mode.js +62 -0
  37. package/ImageMask/index.js +133 -0
  38. package/ImageMask/load-image.js +25 -0
  39. package/ImageSelectorSidebarBox/index.js +60 -0
  40. package/KeyframeTimeline/get-time-string.js +27 -0
  41. package/KeyframeTimeline/index.js +233 -0
  42. package/KeyframesSelectorSidebarBox/index.js +93 -0
  43. package/LandingPage/index.js +159 -0
  44. package/Locker/index.js +11 -0
  45. package/MainLayout/RightSidebarItemsWrapper.js +19 -0
  46. package/MainLayout/icon-dictionary.js +104 -0
  47. package/MainLayout/index.js +526 -0
  48. package/{src/MainLayout → MainLayout}/styles.js +6 -7
  49. package/MainLayout/types.js +0 -0
  50. package/MainLayout/use-implied-video-regions.js +13 -0
  51. package/MetadataEditorSidebarBox/index.js +231 -0
  52. package/PageSelector/index.js +180 -0
  53. package/PointDistances/index.js +73 -0
  54. package/PreventScrollToParents/index.js +51 -0
  55. package/RegionLabel/index.js +232 -0
  56. package/{src/RegionLabel → RegionLabel}/styles.js +12 -15
  57. package/RegionSelectAndTransformBoxes/index.js +169 -0
  58. package/RegionSelectorSidebarBox/index.js +254 -0
  59. package/{src/RegionSelectorSidebarBox → RegionSelectorSidebarBox}/styles.js +13 -14
  60. package/RegionShapes/index.js +294 -0
  61. package/RegionTags/index.js +144 -0
  62. package/SettingsDialog/index.js +52 -0
  63. package/SettingsProvider/index.js +60 -0
  64. package/Shortcuts/ShortcutField.js +46 -0
  65. package/Shortcuts/index.js +133 -0
  66. package/ShortcutsManager/index.js +155 -0
  67. package/Sidebar/index.js +69 -0
  68. package/SidebarBoxContainer/index.js +93 -0
  69. package/SmallToolButton/index.js +42 -0
  70. package/TagsSidebarBox/index.js +105 -0
  71. package/TaskDescriptionSidebarBox/index.js +58 -0
  72. package/Theme/index.js +30 -0
  73. package/VideoOrImageCanvasBackground/index.js +151 -0
  74. package/colors.js +14 -0
  75. package/hooks/use-colors.js +127 -0
  76. package/hooks/use-event-callback.js +10 -0
  77. package/hooks/use-exclude-pattern.js +24 -0
  78. package/hooks/use-load-image.js +26 -0
  79. package/hooks/use-window-size.js +46 -0
  80. package/{src/hooks → hooks}/xpattern.js +1 -1
  81. package/index.js +3 -0
  82. package/lib.js +3 -0
  83. package/package.json +1 -1
  84. package/stories.js +5 -0
  85. package/utils/blocks-to-article.js +60 -0
  86. package/{src/utils → utils}/blocks-to-article.test.js +5 -8
  87. package/{src/utils → utils}/default-locked-until.js +2 -1
  88. package/{src/utils → utils}/filter-only-unique.js +1 -1
  89. package/utils/get-from-local-storage.js +7 -0
  90. package/utils/get-hotkey-help-text.js +9 -0
  91. package/utils/get-landmarks-with-transform.js +40 -0
  92. package/utils/photosToImages.js +85 -0
  93. package/utils/regions-groups.js +28 -0
  94. package/utils/regions-to-blocks.js +18 -0
  95. package/utils/saveable-actions-enum.js +3 -0
  96. package/utils/set-in-local-storage.js +3 -0
  97. package/utils/sleep.js +7 -0
  98. package/utils/uuid-to-hash.js +5 -0
  99. package/.babelrc +0 -6
  100. package/.env +0 -1
  101. package/.flowconfig +0 -2
  102. package/.github/workflows/release-on-master.yml +0 -32
  103. package/.github/workflows/test.yml +0 -16
  104. package/.prettierrc +0 -3
  105. package/.releaserc.js +0 -18
  106. package/.storybook/addons.js +0 -2
  107. package/.storybook/config.js +0 -16
  108. package/LICENSE +0 -21
  109. package/public/favicon.ico +0 -0
  110. package/public/index.html +0 -38
  111. package/src/Annotator/bike-pic.png +0 -0
  112. package/src/Annotator/bike-pic2.png +0 -0
  113. package/src/Annotator/dab-keyframes.story.json +0 -1
  114. package/src/Annotator/exampleImages.js +0 -48
  115. package/src/Annotator/examplePhotos.js +0 -7603
  116. package/src/Annotator/index.js +0 -380
  117. package/src/Annotator/index.story.js +0 -877
  118. package/src/Annotator/poses.story.js +0 -150
  119. package/src/Annotator/reducers/combine-reducers.js +0 -7
  120. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -53
  121. package/src/Annotator/reducers/general-reducer.js +0 -1228
  122. package/src/Annotator/reducers/get-active-image.js +0 -21
  123. package/src/Annotator/reducers/get-implied-video-regions.js +0 -115
  124. package/src/Annotator/reducers/history-handler.js +0 -60
  125. package/src/Annotator/reducers/image-reducer.js +0 -23
  126. package/src/Annotator/reducers/video-reducer.js +0 -85
  127. package/src/Annotator/video.story.js +0 -51
  128. package/src/ClassSelectionMenu/index.js +0 -112
  129. package/src/Crosshairs/index.js +0 -64
  130. package/src/DebugSidebarBox/index.js +0 -36
  131. package/src/DemoSite/Editor.js +0 -235
  132. package/src/DemoSite/ErrorBoundaryDialog.js +0 -34
  133. package/src/DemoSite/index.js +0 -41
  134. package/src/DemoSite/index.story.js +0 -10
  135. package/src/DemoSite/simple-segmentation-example.json +0 -572
  136. package/src/Editor/annotation-plugin/annotation.js +0 -536
  137. package/src/Editor/index.js +0 -50
  138. package/src/Editor/readOnly.js +0 -21
  139. package/src/Errorer/index.js +0 -13
  140. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  141. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  142. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  143. package/src/FullImageSegmentationAnnotator/index.js +0 -7
  144. package/src/FullImageSegmentationAnnotator/index.story.js +0 -177
  145. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  146. package/src/GroupSelectorSidebarBox/index.js +0 -48
  147. package/src/GroupsEditorSidebarBox/index.js +0 -108
  148. package/src/HelpSidebarBox/index.js +0 -43
  149. package/src/HighlightBox/index.js +0 -143
  150. package/src/HistorySidebarBox/index.js +0 -78
  151. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  152. package/src/ImageCanvas/index.js +0 -515
  153. package/src/ImageCanvas/index.story.js +0 -314
  154. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  155. package/src/ImageCanvas/region-tools.js +0 -171
  156. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  157. package/src/ImageCanvas/use-mouse.js +0 -168
  158. package/src/ImageCanvas/use-project-box.js +0 -23
  159. package/src/ImageCanvas/use-wasd-mode.js +0 -50
  160. package/src/ImageMask/index.js +0 -127
  161. package/src/ImageMask/load-image.js +0 -32
  162. package/src/ImageSelectorSidebarBox/index.js +0 -54
  163. package/src/KeyframeTimeline/get-time-string.js +0 -25
  164. package/src/KeyframeTimeline/index.js +0 -223
  165. package/src/KeyframesSelectorSidebarBox/index.js +0 -93
  166. package/src/LandingPage/content.md +0 -57
  167. package/src/LandingPage/github-markdown.css +0 -964
  168. package/src/LandingPage/index.js +0 -147
  169. package/src/Locker/index.js +0 -13
  170. package/src/MainLayout/RightSidebarItemsWrapper.js +0 -21
  171. package/src/MainLayout/icon-dictionary.js +0 -79
  172. package/src/MainLayout/index.js +0 -564
  173. package/src/MainLayout/index.story.js +0 -240
  174. package/src/MainLayout/types.js +0 -171
  175. package/src/MainLayout/use-implied-video-regions.js +0 -17
  176. package/src/MetadataEditorSidebarBox/index.js +0 -160
  177. package/src/PageSelector/index.js +0 -159
  178. package/src/PointDistances/index.js +0 -90
  179. package/src/PreventScrollToParents/index.js +0 -48
  180. package/src/PreventScrollToParents/index.story.js +0 -23
  181. package/src/RegionLabel/index.js +0 -236
  182. package/src/RegionSelectAndTransformBoxes/index.js +0 -236
  183. package/src/RegionSelectorSidebarBox/index.js +0 -220
  184. package/src/RegionShapes/index.js +0 -254
  185. package/src/RegionTags/index.js +0 -136
  186. package/src/SettingsDialog/index.js +0 -58
  187. package/src/SettingsProvider/index.js +0 -57
  188. package/src/Shortcuts/ShortcutField.js +0 -44
  189. package/src/Shortcuts/index.js +0 -129
  190. package/src/ShortcutsManager/index.js +0 -162
  191. package/src/Sidebar/index.js +0 -117
  192. package/src/SidebarBoxContainer/index.js +0 -93
  193. package/src/SmallToolButton/index.js +0 -57
  194. package/src/TagsSidebarBox/index.js +0 -93
  195. package/src/TaskDescriptionSidebarBox/index.js +0 -43
  196. package/src/Theme/index.js +0 -36
  197. package/src/VideoOrImageCanvasBackground/index.js +0 -170
  198. package/src/colors.js +0 -32
  199. package/src/hooks/use-colors.js +0 -75
  200. package/src/hooks/use-event-callback.js +0 -11
  201. package/src/hooks/use-exclude-pattern.js +0 -27
  202. package/src/hooks/use-load-image.js +0 -21
  203. package/src/hooks/use-window-size.js +0 -46
  204. package/src/hooks/xpattern.png +0 -0
  205. package/src/index.js +0 -18
  206. package/src/lib.js +0 -7
  207. package/src/screenshot.png +0 -0
  208. package/src/site.css +0 -5
  209. package/src/stories.js +0 -2
  210. package/src/utils/blocks-to-article.js +0 -61
  211. package/src/utils/get-from-local-storage.js +0 -7
  212. package/src/utils/get-hotkey-help-text.js +0 -11
  213. package/src/utils/get-landmarks-with-transform.js +0 -23
  214. package/src/utils/photosToImages.js +0 -67
  215. package/src/utils/regions-groups.js +0 -19
  216. package/src/utils/regions-to-blocks.js +0 -16
  217. package/src/utils/saveable-actions-enum.js +0 -5
  218. package/src/utils/set-in-local-storage.js +0 -6
  219. package/src/utils/sleep.js +0 -3
  220. package/src/utils/uuid-to-hash.js +0 -5
  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
+ });