@searpent/react-image-annotate 2.0.5 → 2.0.8

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 (195) hide show
  1. package/Annotator/examplePhotos.js +6976 -0
  2. package/Annotator/index.js +268 -0
  3. package/Annotator/reducers/combine-reducers.js +14 -0
  4. package/Annotator/reducers/convert-expanding-line-to-polygon.js +73 -0
  5. package/{src/Annotator → Annotator}/reducers/fix-twisted.js +3 -5
  6. package/Annotator/reducers/general-reducer.js +1152 -0
  7. package/Annotator/reducers/get-active-image.js +27 -0
  8. package/Annotator/reducers/get-implied-video-regions.js +180 -0
  9. package/Annotator/reducers/history-handler.js +38 -0
  10. package/Annotator/reducers/image-reducer.js +20 -0
  11. package/Annotator/reducers/video-reducer.js +88 -0
  12. package/ClassSelectionMenu/index.js +135 -0
  13. package/Crosshairs/index.js +53 -0
  14. package/DebugSidebarBox/index.js +20 -0
  15. package/DemoSite/Editor.js +194 -0
  16. package/DemoSite/ErrorBoundaryDialog.js +64 -0
  17. package/DemoSite/index.js +40 -0
  18. package/{src/Editor → Editor}/annotation-plugin/annotation.css +0 -0
  19. package/Editor/annotation-plugin/annotation.js +613 -0
  20. package/Editor/index.js +57 -0
  21. package/{src/Editor → Editor}/tools.js +2 -3
  22. package/FullImageSegmentationAnnotator/index.js +7 -0
  23. package/GroupSelectorSidebarBox/index.js +63 -0
  24. package/HighlightBox/index.js +99 -0
  25. package/HistorySidebarBox/index.js +71 -0
  26. package/ImageCanvas/index.js +429 -0
  27. package/ImageCanvas/region-tools.js +165 -0
  28. package/{src/ImageCanvas → ImageCanvas}/styles.js +12 -8
  29. package/ImageCanvas/use-mouse.js +180 -0
  30. package/ImageCanvas/use-project-box.js +27 -0
  31. package/ImageCanvas/use-wasd-mode.js +62 -0
  32. package/ImageMask/index.js +133 -0
  33. package/ImageMask/load-image.js +25 -0
  34. package/ImageSelectorSidebarBox/index.js +60 -0
  35. package/KeyframeTimeline/get-time-string.js +27 -0
  36. package/KeyframeTimeline/index.js +233 -0
  37. package/KeyframesSelectorSidebarBox/index.js +93 -0
  38. package/LandingPage/index.js +159 -0
  39. package/MainLayout/icon-dictionary.js +104 -0
  40. package/MainLayout/index.js +469 -0
  41. package/{src/MainLayout → MainLayout}/styles.js +6 -7
  42. package/MainLayout/types.js +0 -0
  43. package/MainLayout/use-implied-video-regions.js +13 -0
  44. package/MetadataEditorSidebarBox/index.js +126 -0
  45. package/PageSelector/index.js +69 -0
  46. package/{src/PageSelector → PageSelector}/page-selector.css +18 -0
  47. package/PointDistances/index.js +73 -0
  48. package/PreventScrollToParents/index.js +51 -0
  49. package/RegionLabel/index.js +205 -0
  50. package/{src/RegionLabel → RegionLabel}/styles.js +12 -15
  51. package/RegionSelectAndTransformBoxes/index.js +167 -0
  52. package/RegionSelectorSidebarBox/index.js +248 -0
  53. package/{src/RegionSelectorSidebarBox → RegionSelectorSidebarBox}/styles.js +13 -14
  54. package/RegionShapes/index.js +294 -0
  55. package/RegionTags/index.js +142 -0
  56. package/SettingsDialog/index.js +52 -0
  57. package/SettingsProvider/index.js +58 -0
  58. package/Shortcuts/ShortcutField.js +46 -0
  59. package/Shortcuts/index.js +133 -0
  60. package/ShortcutsManager/index.js +155 -0
  61. package/Sidebar/index.js +69 -0
  62. package/SidebarBoxContainer/index.js +93 -0
  63. package/SmallToolButton/index.js +42 -0
  64. package/TagsSidebarBox/index.js +105 -0
  65. package/TaskDescriptionSidebarBox/index.js +58 -0
  66. package/Theme/index.js +30 -0
  67. package/VideoOrImageCanvasBackground/index.js +151 -0
  68. package/colors.js +14 -0
  69. package/hooks/use-colors.js +101 -0
  70. package/hooks/use-event-callback.js +10 -0
  71. package/hooks/use-exclude-pattern.js +24 -0
  72. package/hooks/use-load-image.js +26 -0
  73. package/hooks/use-window-size.js +46 -0
  74. package/{src/hooks → hooks}/xpattern.js +1 -1
  75. package/index.js +3 -0
  76. package/lib.js +3 -0
  77. package/package.json +1 -1
  78. package/stories.js +5 -0
  79. package/{src/utils → utils}/filter-only-unique.js +1 -1
  80. package/utils/get-from-local-storage.js +7 -0
  81. package/utils/get-hotkey-help-text.js +9 -0
  82. package/utils/get-landmarks-with-transform.js +40 -0
  83. package/utils/photosToImages.js +53 -0
  84. package/utils/regions-to-blocks.js +16 -0
  85. package/utils/set-in-local-storage.js +3 -0
  86. package/.babelrc +0 -6
  87. package/.env +0 -1
  88. package/.flowconfig +0 -2
  89. package/.github/workflows/release-on-master.yml +0 -32
  90. package/.github/workflows/test.yml +0 -16
  91. package/.prettierrc +0 -3
  92. package/.releaserc.js +0 -18
  93. package/.storybook/addons.js +0 -2
  94. package/.storybook/config.js +0 -16
  95. package/LICENSE +0 -21
  96. package/public/favicon.ico +0 -0
  97. package/public/index.html +0 -38
  98. package/src/Annotator/bike-pic.png +0 -0
  99. package/src/Annotator/bike-pic2.png +0 -0
  100. package/src/Annotator/dab-keyframes.story.json +0 -1
  101. package/src/Annotator/examplePhotos.js +0 -7601
  102. package/src/Annotator/index.js +0 -291
  103. package/src/Annotator/index.story.js +0 -807
  104. package/src/Annotator/poses.story.js +0 -150
  105. package/src/Annotator/reducers/combine-reducers.js +0 -7
  106. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -53
  107. package/src/Annotator/reducers/general-reducer.js +0 -996
  108. package/src/Annotator/reducers/get-active-image.js +0 -21
  109. package/src/Annotator/reducers/get-implied-video-regions.js +0 -115
  110. package/src/Annotator/reducers/history-handler.js +0 -60
  111. package/src/Annotator/reducers/image-reducer.js +0 -23
  112. package/src/Annotator/reducers/video-reducer.js +0 -85
  113. package/src/Annotator/video.story.js +0 -51
  114. package/src/ClassSelectionMenu/index.js +0 -108
  115. package/src/Crosshairs/index.js +0 -64
  116. package/src/DebugSidebarBox/index.js +0 -36
  117. package/src/DemoSite/Editor.js +0 -235
  118. package/src/DemoSite/ErrorBoundaryDialog.js +0 -34
  119. package/src/DemoSite/index.js +0 -41
  120. package/src/DemoSite/index.story.js +0 -10
  121. package/src/DemoSite/simple-segmentation-example.json +0 -572
  122. package/src/Editor/annotation-plugin/annotation.js +0 -515
  123. package/src/Editor/index.js +0 -24
  124. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  125. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  126. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  127. package/src/FullImageSegmentationAnnotator/index.js +0 -7
  128. package/src/FullImageSegmentationAnnotator/index.story.js +0 -177
  129. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  130. package/src/GroupSelectorSidebarBox/index.js +0 -48
  131. package/src/HighlightBox/index.js +0 -143
  132. package/src/HistorySidebarBox/index.js +0 -78
  133. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  134. package/src/ImageCanvas/index.js +0 -494
  135. package/src/ImageCanvas/index.story.js +0 -314
  136. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  137. package/src/ImageCanvas/region-tools.js +0 -171
  138. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  139. package/src/ImageCanvas/use-mouse.js +0 -168
  140. package/src/ImageCanvas/use-project-box.js +0 -23
  141. package/src/ImageCanvas/use-wasd-mode.js +0 -50
  142. package/src/ImageMask/index.js +0 -127
  143. package/src/ImageMask/load-image.js +0 -32
  144. package/src/ImageSelectorSidebarBox/index.js +0 -54
  145. package/src/KeyframeTimeline/get-time-string.js +0 -25
  146. package/src/KeyframeTimeline/index.js +0 -223
  147. package/src/KeyframesSelectorSidebarBox/index.js +0 -93
  148. package/src/LandingPage/content.md +0 -57
  149. package/src/LandingPage/github-markdown.css +0 -964
  150. package/src/LandingPage/index.js +0 -147
  151. package/src/MainLayout/icon-dictionary.js +0 -79
  152. package/src/MainLayout/index.js +0 -510
  153. package/src/MainLayout/index.story.js +0 -240
  154. package/src/MainLayout/types.js +0 -164
  155. package/src/MainLayout/use-implied-video-regions.js +0 -17
  156. package/src/MetadataEditorSidebarBox/index.js +0 -98
  157. package/src/PageSelector/index.js +0 -76
  158. package/src/PointDistances/index.js +0 -90
  159. package/src/PreventScrollToParents/index.js +0 -48
  160. package/src/PreventScrollToParents/index.story.js +0 -23
  161. package/src/RegionLabel/index.js +0 -222
  162. package/src/RegionSelectAndTransformBoxes/index.js +0 -234
  163. package/src/RegionSelectorSidebarBox/index.js +0 -216
  164. package/src/RegionShapes/index.js +0 -254
  165. package/src/RegionTags/index.js +0 -134
  166. package/src/SettingsDialog/index.js +0 -58
  167. package/src/SettingsProvider/index.js +0 -48
  168. package/src/Shortcuts/ShortcutField.js +0 -44
  169. package/src/Shortcuts/index.js +0 -129
  170. package/src/ShortcutsManager/index.js +0 -162
  171. package/src/Sidebar/index.js +0 -117
  172. package/src/SidebarBoxContainer/index.js +0 -93
  173. package/src/SmallToolButton/index.js +0 -57
  174. package/src/TagsSidebarBox/index.js +0 -93
  175. package/src/TaskDescriptionSidebarBox/index.js +0 -43
  176. package/src/Theme/index.js +0 -36
  177. package/src/VideoOrImageCanvasBackground/index.js +0 -170
  178. package/src/colors.js +0 -32
  179. package/src/hooks/use-colors.js +0 -74
  180. package/src/hooks/use-event-callback.js +0 -11
  181. package/src/hooks/use-exclude-pattern.js +0 -27
  182. package/src/hooks/use-load-image.js +0 -21
  183. package/src/hooks/use-window-size.js +0 -46
  184. package/src/hooks/xpattern.png +0 -0
  185. package/src/index.js +0 -18
  186. package/src/lib.js +0 -7
  187. package/src/screenshot.png +0 -0
  188. package/src/site.css +0 -5
  189. package/src/stories.js +0 -2
  190. package/src/utils/get-from-local-storage.js +0 -7
  191. package/src/utils/get-hotkey-help-text.js +0 -11
  192. package/src/utils/get-landmarks-with-transform.js +0 -23
  193. package/src/utils/photosToImages.js +0 -40
  194. package/src/utils/regions-to-blocks.js +0 -14
  195. package/src/utils/set-in-local-storage.js +0 -6
@@ -0,0 +1,268 @@
1
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
4
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
5
+ import React, { useEffect, useReducer } from "react";
6
+ import makeImmutable, { without } from "seamless-immutable";
7
+ import MainLayout from "../MainLayout";
8
+ import SettingsProvider from "../SettingsProvider";
9
+ import combineReducers from "./reducers/combine-reducers.js";
10
+ import generalReducer from "./reducers/general-reducer.js";
11
+ import getFromLocalStorage from "../utils/get-from-local-storage";
12
+ import historyHandler from "./reducers/history-handler.js";
13
+ import imageReducer from "./reducers/image-reducer.js";
14
+ import useEventCallback from "use-event-callback";
15
+ import videoReducer from "./reducers/video-reducer.js";
16
+ export var Annotator = function Annotator(_ref) {
17
+ var images = _ref.images,
18
+ allowedArea = _ref.allowedArea,
19
+ _ref$selectedImage = _ref.selectedImage,
20
+ selectedImage = _ref$selectedImage === void 0 ? images && images.length > 0 ? 0 : undefined : _ref$selectedImage,
21
+ showPointDistances = _ref.showPointDistances,
22
+ pointDistancePrecision = _ref.pointDistancePrecision,
23
+ _ref$showTags = _ref.showTags,
24
+ showTags = _ref$showTags === void 0 ? getFromLocalStorage("showTags", true) : _ref$showTags,
25
+ _ref$enabledTools = _ref.enabledTools,
26
+ enabledTools = _ref$enabledTools === void 0 ? ["select", "create-point", "create-box", "create-polygon", "create-line", "create-expanding-line", "show-mask"] : _ref$enabledTools,
27
+ _ref$selectedTool = _ref.selectedTool,
28
+ selectedTool = _ref$selectedTool === void 0 ? "select" : _ref$selectedTool,
29
+ _ref$regionTagList = _ref.regionTagList,
30
+ regionTagList = _ref$regionTagList === void 0 ? [] : _ref$regionTagList,
31
+ _ref$regionClsList = _ref.regionClsList,
32
+ regionClsList = _ref$regionClsList === void 0 ? [] : _ref$regionClsList,
33
+ _ref$imageTagList = _ref.imageTagList,
34
+ imageTagList = _ref$imageTagList === void 0 ? [] : _ref$imageTagList,
35
+ _ref$imageClsList = _ref.imageClsList,
36
+ imageClsList = _ref$imageClsList === void 0 ? [] : _ref$imageClsList,
37
+ _ref$keyframes = _ref.keyframes,
38
+ keyframes = _ref$keyframes === void 0 ? {} : _ref$keyframes,
39
+ _ref$taskDescription = _ref.taskDescription,
40
+ taskDescription = _ref$taskDescription === void 0 ? "" : _ref$taskDescription,
41
+ _ref$fullImageSegment = _ref.fullImageSegmentationMode,
42
+ fullImageSegmentationMode = _ref$fullImageSegment === void 0 ? false : _ref$fullImageSegment,
43
+ RegionEditLabel = _ref.RegionEditLabel,
44
+ videoSrc = _ref.videoSrc,
45
+ _ref$videoTime = _ref.videoTime,
46
+ videoTime = _ref$videoTime === void 0 ? 0 : _ref$videoTime,
47
+ videoName = _ref.videoName,
48
+ onExit = _ref.onExit,
49
+ onNextImage = _ref.onNextImage,
50
+ onPrevImage = _ref.onPrevImage,
51
+ keypointDefinitions = _ref.keypointDefinitions,
52
+ _ref$autoSegmentation = _ref.autoSegmentationOptions,
53
+ autoSegmentationOptions = _ref$autoSegmentation === void 0 ? {
54
+ type: "autoseg"
55
+ } : _ref$autoSegmentation,
56
+ hideHeader = _ref.hideHeader,
57
+ hideHeaderText = _ref.hideHeaderText,
58
+ hideNext = _ref.hideNext,
59
+ hidePrev = _ref.hidePrev,
60
+ hideClone = _ref.hideClone,
61
+ hideSettings = _ref.hideSettings,
62
+ hideFullScreen = _ref.hideFullScreen,
63
+ hideSave = _ref.hideSave,
64
+ allowComments = _ref.allowComments,
65
+ onImagesChange = _ref.onImagesChange,
66
+ groups = _ref.groups,
67
+ onGroupSelect = _ref.onGroupSelect,
68
+ hideHistory = _ref.hideHistory,
69
+ hideNotEditingLabel = _ref.hideNotEditingLabel,
70
+ showEditor = _ref.showEditor,
71
+ showPageSelector = _ref.showPageSelector,
72
+ clsColors = _ref.clsColors,
73
+ groupColors = _ref.groupColors,
74
+ onRecalc = _ref.onRecalc,
75
+ onSave = _ref.onSave,
76
+ allowedGroups = _ref.allowedGroups,
77
+ metadata = _ref.metadata;
78
+
79
+ if (typeof selectedImage === "string") {
80
+ selectedImage = (images || []).findIndex(function (img) {
81
+ return img.src === selectedImage;
82
+ });
83
+ if (selectedImage === -1) selectedImage = undefined;
84
+ }
85
+
86
+ var annotationType = images ? "image" : "video";
87
+
88
+ var _useReducer = useReducer(historyHandler(combineReducers(annotationType === "image" ? imageReducer : videoReducer, generalReducer)), makeImmutable(_objectSpread({
89
+ annotationType: annotationType,
90
+ showTags: showTags,
91
+ allowedArea: allowedArea,
92
+ showPointDistances: showPointDistances,
93
+ pointDistancePrecision: pointDistancePrecision,
94
+ selectedTool: selectedTool,
95
+ fullImageSegmentationMode: fullImageSegmentationMode,
96
+ autoSegmentationOptions: autoSegmentationOptions,
97
+ mode: null,
98
+ taskDescription: taskDescription,
99
+ showMask: true,
100
+ labelImages: imageClsList.length > 0 || imageTagList.length > 0,
101
+ regionClsList: regionClsList,
102
+ regionTagList: regionTagList,
103
+ imageClsList: imageClsList,
104
+ imageTagList: imageTagList,
105
+ currentVideoTime: videoTime,
106
+ enabledTools: enabledTools,
107
+ history: [],
108
+ videoName: videoName,
109
+ keypointDefinitions: keypointDefinitions,
110
+ allowComments: allowComments
111
+ }, annotationType === "image" ? {
112
+ selectedImage: selectedImage,
113
+ images: images,
114
+ selectedImageFrameTime: images && images.length > 0 ? images[0].frameTime : undefined
115
+ } : {
116
+ videoSrc: videoSrc,
117
+ keyframes: keyframes
118
+ }, {
119
+ imagesUpdatedAt: null,
120
+ imagesSavedAt: null,
121
+ metadata: metadata
122
+ }))),
123
+ _useReducer2 = _slicedToArray(_useReducer, 2),
124
+ state = _useReducer2[0],
125
+ dispatchToReducer = _useReducer2[1];
126
+
127
+ var dispatch = useEventCallback(function (action) {
128
+ if (action.type === "HEADER_BUTTON_CLICKED") {
129
+ if (["Exit", "Done", "Save", "Complete"].includes(action.buttonName)) {
130
+ return onExit(without(state, "history"));
131
+ } else if (action.buttonName === "Next" && onNextImage) {
132
+ return onNextImage(without(state, "history"));
133
+ } else if (action.buttonName === "Prev" && onPrevImage) {
134
+ return onPrevImage(without(state, "history"));
135
+ }
136
+ }
137
+
138
+ dispatchToReducer(action);
139
+ });
140
+ var onRegionClassAdded = useEventCallback(function (cls) {
141
+ dispatchToReducer({
142
+ type: "ON_CLS_ADDED",
143
+ cls: cls
144
+ });
145
+ });
146
+
147
+ var handleSaveClick =
148
+ /*#__PURE__*/
149
+ function () {
150
+ var _ref2 = _asyncToGenerator(
151
+ /*#__PURE__*/
152
+ _regeneratorRuntime.mark(function _callee(e) {
153
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
154
+ while (1) {
155
+ switch (_context.prev = _context.next) {
156
+ case 0:
157
+ e.preventDefault();
158
+
159
+ if (!onSave) {
160
+ _context.next = 5;
161
+ break;
162
+ }
163
+
164
+ _context.next = 4;
165
+ return onSave(state.images);
166
+
167
+ case 4:
168
+ dispatchToReducer({
169
+ type: "IMAGES_SAVED",
170
+ savedAt: new Date()
171
+ });
172
+
173
+ case 5:
174
+ case "end":
175
+ return _context.stop();
176
+ }
177
+ }
178
+ }, _callee);
179
+ }));
180
+
181
+ return function handleSaveClick(_x) {
182
+ return _ref2.apply(this, arguments);
183
+ };
184
+ }();
185
+
186
+ var handleRecalcClick = function handleRecalcClick(e) {
187
+ e.preventDefault();
188
+
189
+ if (onRecalc) {
190
+ onRecalc();
191
+ }
192
+ };
193
+
194
+ var handleMetadataChange = function handleMetadataChange(_ref3) {
195
+ var name = _ref3.name,
196
+ value = _ref3.value,
197
+ imageIndex = _ref3.imageIndex;
198
+ dispatchToReducer({
199
+ type: "UPDATE_METADATA",
200
+ name: name,
201
+ value: value,
202
+ imageIndex: imageIndex
203
+ });
204
+ }; // trigger this on every BBox manipulation (there is currently no way to detect adding of new box!)
205
+
206
+
207
+ useEffect(function () {
208
+ if (!state.lastAction || !["BEGIN_BOX_TRANSFORM", "CHANGE_REGION", "DELETE_REGION"].includes(state.lastAction.type)) {
209
+ return;
210
+ }
211
+
212
+ if (onImagesChange) {
213
+ onImagesChange(state.images);
214
+ }
215
+
216
+ dispatchToReducer({
217
+ type: "IMAGES_UPDATED",
218
+ updatedAt: new Date()
219
+ });
220
+ }, [onImagesChange, state.images, state.lastAction]);
221
+ useEffect(function () {
222
+ if (selectedImage === undefined) return;
223
+ dispatchToReducer({
224
+ type: "SELECT_IMAGE",
225
+ imageIndex: selectedImage,
226
+ image: state.images[selectedImage]
227
+ }); // eslint-disable-next-line react-hooks/exhaustive-deps
228
+ }, [onImagesChange, selectedImage]);
229
+ if (!images && !videoSrc) return 'Missing required prop "images" or "videoSrc"';
230
+
231
+ var _ref4 = state.imagesSavedAt < state.imagesUpdatedAt ? [true, true] : [false, false],
232
+ _ref5 = _slicedToArray(_ref4, 2),
233
+ recalcActive = _ref5[0],
234
+ saveActive = _ref5[1];
235
+
236
+ return React.createElement(SettingsProvider, {
237
+ clsColors: clsColors,
238
+ groupColors: groupColors
239
+ }, React.createElement(MainLayout, {
240
+ RegionEditLabel: RegionEditLabel,
241
+ alwaysShowNextButton: Boolean(onNextImage),
242
+ alwaysShowPrevButton: Boolean(onPrevImage),
243
+ state: state,
244
+ dispatch: dispatch,
245
+ onRegionClassAdded: onRegionClassAdded,
246
+ hideHeader: hideHeader,
247
+ hideHeaderText: hideHeaderText,
248
+ hideNext: hideNext,
249
+ hidePrev: hidePrev,
250
+ hideClone: hideClone,
251
+ hideSettings: hideSettings,
252
+ hideFullScreen: hideFullScreen,
253
+ hideSave: hideSave,
254
+ groups: groups,
255
+ onGroupSelect: onGroupSelect,
256
+ hideHistory: hideHistory,
257
+ hideNotEditingLabel: hideNotEditingLabel,
258
+ showEditor: showEditor,
259
+ showPageSelector: showPageSelector,
260
+ onRecalc: handleRecalcClick,
261
+ onSave: handleSaveClick,
262
+ saveActive: recalcActive,
263
+ recalcActive: saveActive,
264
+ allowedGroups: allowedGroups,
265
+ onMetadataChange: handleMetadataChange
266
+ }));
267
+ };
268
+ 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
+ });