@searpent/react-image-annotate 2.0.2 → 2.0.5

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 (186) hide show
  1. package/.babelrc +6 -0
  2. package/.env +1 -0
  3. package/.flowconfig +2 -0
  4. package/.github/workflows/release-on-master.yml +32 -0
  5. package/.github/workflows/test.yml +16 -0
  6. package/.prettierrc +3 -0
  7. package/.releaserc.js +18 -0
  8. package/.storybook/addons.js +2 -0
  9. package/.storybook/config.js +16 -0
  10. package/LICENSE +21 -0
  11. package/package.json +4 -1
  12. package/public/favicon.ico +0 -0
  13. package/public/index.html +38 -0
  14. package/src/Annotator/bike-pic.png +0 -0
  15. package/src/Annotator/bike-pic2.png +0 -0
  16. package/src/Annotator/dab-keyframes.story.json +1 -0
  17. package/src/Annotator/examplePhotos.js +7601 -0
  18. package/src/Annotator/index.js +291 -0
  19. package/src/Annotator/index.story.js +807 -0
  20. package/src/Annotator/poses.story.js +150 -0
  21. package/src/Annotator/reducers/combine-reducers.js +7 -0
  22. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +53 -0
  23. package/{Annotator → src/Annotator}/reducers/fix-twisted.js +5 -3
  24. package/src/Annotator/reducers/general-reducer.js +996 -0
  25. package/src/Annotator/reducers/get-active-image.js +21 -0
  26. package/src/Annotator/reducers/get-implied-video-regions.js +115 -0
  27. package/src/Annotator/reducers/history-handler.js +60 -0
  28. package/src/Annotator/reducers/image-reducer.js +23 -0
  29. package/src/Annotator/reducers/video-reducer.js +85 -0
  30. package/src/Annotator/video.story.js +51 -0
  31. package/src/ClassSelectionMenu/index.js +108 -0
  32. package/src/Crosshairs/index.js +64 -0
  33. package/src/DebugSidebarBox/index.js +36 -0
  34. package/src/DemoSite/Editor.js +235 -0
  35. package/src/DemoSite/ErrorBoundaryDialog.js +34 -0
  36. package/src/DemoSite/index.js +41 -0
  37. package/src/DemoSite/index.story.js +10 -0
  38. package/src/DemoSite/simple-segmentation-example.json +572 -0
  39. package/src/Editor/annotation-plugin/annotation.css +46 -0
  40. package/src/Editor/annotation-plugin/annotation.js +515 -0
  41. package/src/Editor/index.js +24 -0
  42. package/src/Editor/tools.js +6 -0
  43. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  44. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  45. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  46. package/src/FullImageSegmentationAnnotator/index.js +7 -0
  47. package/src/FullImageSegmentationAnnotator/index.story.js +177 -0
  48. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  49. package/src/GroupSelectorSidebarBox/index.js +48 -0
  50. package/src/HighlightBox/index.js +143 -0
  51. package/src/HistorySidebarBox/index.js +78 -0
  52. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  53. package/src/ImageCanvas/index.js +494 -0
  54. package/src/ImageCanvas/index.story.js +314 -0
  55. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  56. package/src/ImageCanvas/region-tools.js +171 -0
  57. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  58. package/{ImageCanvas → src/ImageCanvas}/styles.js +8 -12
  59. package/src/ImageCanvas/use-mouse.js +168 -0
  60. package/src/ImageCanvas/use-project-box.js +23 -0
  61. package/src/ImageCanvas/use-wasd-mode.js +50 -0
  62. package/src/ImageMask/index.js +127 -0
  63. package/src/ImageMask/load-image.js +32 -0
  64. package/src/ImageSelectorSidebarBox/index.js +54 -0
  65. package/src/KeyframeTimeline/get-time-string.js +25 -0
  66. package/src/KeyframeTimeline/index.js +223 -0
  67. package/src/KeyframesSelectorSidebarBox/index.js +93 -0
  68. package/src/LandingPage/content.md +57 -0
  69. package/src/LandingPage/github-markdown.css +964 -0
  70. package/src/LandingPage/index.js +147 -0
  71. package/src/MainLayout/icon-dictionary.js +79 -0
  72. package/src/MainLayout/index.js +510 -0
  73. package/src/MainLayout/index.story.js +240 -0
  74. package/{MainLayout → src/MainLayout}/styles.js +7 -6
  75. package/src/MainLayout/types.js +164 -0
  76. package/src/MainLayout/use-implied-video-regions.js +17 -0
  77. package/src/MetadataEditorSidebarBox/index.js +98 -0
  78. package/src/PageSelector/index.js +76 -0
  79. package/src/PageSelector/page-selector.css +69 -0
  80. package/src/PointDistances/index.js +90 -0
  81. package/src/PreventScrollToParents/index.js +48 -0
  82. package/src/PreventScrollToParents/index.story.js +23 -0
  83. package/src/RegionLabel/index.js +222 -0
  84. package/{RegionLabel → src/RegionLabel}/styles.js +15 -12
  85. package/src/RegionSelectAndTransformBoxes/index.js +234 -0
  86. package/src/RegionSelectorSidebarBox/index.js +216 -0
  87. package/{RegionSelectorSidebarBox → src/RegionSelectorSidebarBox}/styles.js +14 -13
  88. package/src/RegionShapes/index.js +254 -0
  89. package/src/RegionTags/index.js +134 -0
  90. package/src/SettingsDialog/index.js +58 -0
  91. package/src/SettingsProvider/index.js +48 -0
  92. package/src/Shortcuts/ShortcutField.js +44 -0
  93. package/src/Shortcuts/index.js +129 -0
  94. package/src/ShortcutsManager/index.js +162 -0
  95. package/src/Sidebar/index.js +117 -0
  96. package/src/SidebarBoxContainer/index.js +93 -0
  97. package/src/SmallToolButton/index.js +57 -0
  98. package/src/TagsSidebarBox/index.js +93 -0
  99. package/src/TaskDescriptionSidebarBox/index.js +43 -0
  100. package/src/Theme/index.js +36 -0
  101. package/src/VideoOrImageCanvasBackground/index.js +170 -0
  102. package/src/colors.js +32 -0
  103. package/src/hooks/use-colors.js +74 -0
  104. package/src/hooks/use-event-callback.js +11 -0
  105. package/src/hooks/use-exclude-pattern.js +27 -0
  106. package/src/hooks/use-load-image.js +21 -0
  107. package/src/hooks/use-window-size.js +46 -0
  108. package/{hooks → src/hooks}/xpattern.js +1 -1
  109. package/src/hooks/xpattern.png +0 -0
  110. package/src/index.js +18 -0
  111. package/src/lib.js +7 -0
  112. package/src/screenshot.png +0 -0
  113. package/src/site.css +5 -0
  114. package/src/stories.js +2 -0
  115. package/src/utils/filter-only-unique.js +5 -0
  116. package/src/utils/get-from-local-storage.js +7 -0
  117. package/src/utils/get-hotkey-help-text.js +11 -0
  118. package/src/utils/get-landmarks-with-transform.js +23 -0
  119. package/src/utils/photosToImages.js +40 -0
  120. package/src/utils/regions-to-blocks.js +14 -0
  121. package/src/utils/set-in-local-storage.js +6 -0
  122. package/Annotator/index.js +0 -161
  123. package/Annotator/reducers/combine-reducers.js +0 -14
  124. package/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -73
  125. package/Annotator/reducers/general-reducer.js +0 -1058
  126. package/Annotator/reducers/get-active-image.js +0 -27
  127. package/Annotator/reducers/get-implied-video-regions.js +0 -180
  128. package/Annotator/reducers/history-handler.js +0 -38
  129. package/Annotator/reducers/image-reducer.js +0 -20
  130. package/Annotator/reducers/video-reducer.js +0 -88
  131. package/ClassSelectionMenu/index.js +0 -135
  132. package/Crosshairs/index.js +0 -53
  133. package/DebugSidebarBox/index.js +0 -20
  134. package/DemoSite/Editor.js +0 -194
  135. package/DemoSite/ErrorBoundaryDialog.js +0 -64
  136. package/DemoSite/index.js +0 -40
  137. package/FullImageSegmentationAnnotator/index.js +0 -7
  138. package/HighlightBox/index.js +0 -99
  139. package/HistorySidebarBox/index.js +0 -71
  140. package/ImageCanvas/index.js +0 -424
  141. package/ImageCanvas/region-tools.js +0 -165
  142. package/ImageCanvas/use-mouse.js +0 -180
  143. package/ImageCanvas/use-project-box.js +0 -27
  144. package/ImageCanvas/use-wasd-mode.js +0 -62
  145. package/ImageMask/index.js +0 -133
  146. package/ImageMask/load-image.js +0 -25
  147. package/ImageSelectorSidebarBox/index.js +0 -60
  148. package/KeyframeTimeline/get-time-string.js +0 -27
  149. package/KeyframeTimeline/index.js +0 -233
  150. package/KeyframesSelectorSidebarBox/index.js +0 -93
  151. package/LandingPage/index.js +0 -159
  152. package/MainLayout/icon-dictionary.js +0 -104
  153. package/MainLayout/index.js +0 -352
  154. package/MainLayout/types.js +0 -0
  155. package/MainLayout/use-implied-video-regions.js +0 -13
  156. package/PointDistances/index.js +0 -73
  157. package/PreventScrollToParents/index.js +0 -51
  158. package/RegionLabel/index.js +0 -191
  159. package/RegionSelectAndTransformBoxes/index.js +0 -167
  160. package/RegionSelectorSidebarBox/index.js +0 -248
  161. package/RegionShapes/index.js +0 -274
  162. package/RegionTags/index.js +0 -138
  163. package/SettingsDialog/index.js +0 -52
  164. package/SettingsProvider/index.js +0 -53
  165. package/Shortcuts/ShortcutField.js +0 -46
  166. package/Shortcuts/index.js +0 -133
  167. package/ShortcutsManager/index.js +0 -155
  168. package/Sidebar/index.js +0 -69
  169. package/SidebarBoxContainer/index.js +0 -93
  170. package/SmallToolButton/index.js +0 -42
  171. package/TagsSidebarBox/index.js +0 -105
  172. package/TaskDescriptionSidebarBox/index.js +0 -58
  173. package/Theme/index.js +0 -30
  174. package/VideoOrImageCanvasBackground/index.js +0 -151
  175. package/colors.js +0 -14
  176. package/hooks/use-event-callback.js +0 -10
  177. package/hooks/use-exclude-pattern.js +0 -24
  178. package/hooks/use-load-image.js +0 -26
  179. package/hooks/use-window-size.js +0 -46
  180. package/index.js +0 -3
  181. package/lib.js +0 -3
  182. package/stories.js +0 -5
  183. package/utils/get-from-local-storage.js +0 -7
  184. package/utils/get-hotkey-help-text.js +0 -9
  185. package/utils/get-landmarks-with-transform.js +0 -40
  186. package/utils/set-in-local-storage.js +0 -3
@@ -1,424 +0,0 @@
1
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
2
- import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
- import React, { useRef, useState, useLayoutEffect, useEffect, useMemo } from "react";
5
- import { Matrix } from "transformation-matrix-js";
6
- import Crosshairs from "../Crosshairs";
7
- import { makeStyles } from "@mui/styles";
8
- import { createTheme, ThemeProvider } from "@mui/material/styles";
9
- import styles from "./styles";
10
- import PreventScrollToParents from "../PreventScrollToParents";
11
- import useWindowSize from "../hooks/use-window-size.js";
12
- import useMouse from "./use-mouse";
13
- import useProjectRegionBox from "./use-project-box";
14
- import useExcludePattern from "../hooks/use-exclude-pattern";
15
- import { useRafState } from "react-use";
16
- import PointDistances from "../PointDistances";
17
- import RegionTags from "../RegionTags";
18
- import RegionLabel from "../RegionLabel";
19
- import ImageMask from "../ImageMask";
20
- import RegionSelectAndTransformBoxes from "../RegionSelectAndTransformBoxes";
21
- import VideoOrImageCanvasBackground from "../VideoOrImageCanvasBackground";
22
- import useEventCallback from "use-event-callback";
23
- import RegionShapes from "../RegionShapes";
24
- import useWasdMode from "./use-wasd-mode";
25
- var theme = createTheme();
26
- var useStyles = makeStyles(function (theme) {
27
- return styles;
28
- });
29
-
30
- var getDefaultMat = function getDefaultMat() {
31
- var allowedArea = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
32
-
33
- var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
34
- iw = _ref.iw,
35
- ih = _ref.ih;
36
-
37
- var mat = Matrix.from(1, 0, 0, 1, -10, -10);
38
-
39
- if (allowedArea && iw) {
40
- mat = mat.translate(allowedArea.x * iw, allowedArea.y * ih).scaleU(allowedArea.w + 0.05);
41
- }
42
-
43
- return mat;
44
- };
45
-
46
- export var ImageCanvas = function ImageCanvas(_ref2) {
47
- var regions = _ref2.regions,
48
- imageSrc = _ref2.imageSrc,
49
- videoSrc = _ref2.videoSrc,
50
- videoTime = _ref2.videoTime,
51
- realSize = _ref2.realSize,
52
- showTags = _ref2.showTags,
53
- _ref2$onMouseMove = _ref2.onMouseMove,
54
- onMouseMove = _ref2$onMouseMove === void 0 ? function (p) {
55
- return null;
56
- } : _ref2$onMouseMove,
57
- _ref2$onMouseDown = _ref2.onMouseDown,
58
- onMouseDown = _ref2$onMouseDown === void 0 ? function (p) {
59
- return null;
60
- } : _ref2$onMouseDown,
61
- _ref2$onMouseUp = _ref2.onMouseUp,
62
- onMouseUp = _ref2$onMouseUp === void 0 ? function (p) {
63
- return null;
64
- } : _ref2$onMouseUp,
65
- _ref2$dragWithPrimary = _ref2.dragWithPrimary,
66
- dragWithPrimary = _ref2$dragWithPrimary === void 0 ? false : _ref2$dragWithPrimary,
67
- _ref2$zoomWithPrimary = _ref2.zoomWithPrimary,
68
- zoomWithPrimary = _ref2$zoomWithPrimary === void 0 ? false : _ref2$zoomWithPrimary,
69
- _ref2$createWithPrima = _ref2.createWithPrimary,
70
- createWithPrimary = _ref2$createWithPrima === void 0 ? false : _ref2$createWithPrima,
71
- _ref2$pointDistancePr = _ref2.pointDistancePrecision,
72
- pointDistancePrecision = _ref2$pointDistancePr === void 0 ? 0 : _ref2$pointDistancePr,
73
- regionClsList = _ref2.regionClsList,
74
- regionTagList = _ref2.regionTagList,
75
- showCrosshairs = _ref2.showCrosshairs,
76
- _ref2$showHighlightBo = _ref2.showHighlightBox,
77
- showHighlightBox = _ref2$showHighlightBo === void 0 ? true : _ref2$showHighlightBo,
78
- showPointDistances = _ref2.showPointDistances,
79
- allowedArea = _ref2.allowedArea,
80
- _ref2$RegionEditLabel = _ref2.RegionEditLabel,
81
- RegionEditLabel = _ref2$RegionEditLabel === void 0 ? null : _ref2$RegionEditLabel,
82
- _ref2$videoPlaying = _ref2.videoPlaying,
83
- videoPlaying = _ref2$videoPlaying === void 0 ? false : _ref2$videoPlaying,
84
- _ref2$showMask = _ref2.showMask,
85
- showMask = _ref2$showMask === void 0 ? true : _ref2$showMask,
86
- fullImageSegmentationMode = _ref2.fullImageSegmentationMode,
87
- autoSegmentationOptions = _ref2.autoSegmentationOptions,
88
- onImageOrVideoLoaded = _ref2.onImageOrVideoLoaded,
89
- onChangeRegion = _ref2.onChangeRegion,
90
- onBeginRegionEdit = _ref2.onBeginRegionEdit,
91
- onCloseRegionEdit = _ref2.onCloseRegionEdit,
92
- onBeginBoxTransform = _ref2.onBeginBoxTransform,
93
- onBeginMovePolygonPoint = _ref2.onBeginMovePolygonPoint,
94
- onAddPolygonPoint = _ref2.onAddPolygonPoint,
95
- onBeginMoveKeypoint = _ref2.onBeginMoveKeypoint,
96
- onSelectRegion = _ref2.onSelectRegion,
97
- onBeginMovePoint = _ref2.onBeginMovePoint,
98
- onDeleteRegion = _ref2.onDeleteRegion,
99
- onChangeVideoTime = _ref2.onChangeVideoTime,
100
- onChangeVideoPlaying = _ref2.onChangeVideoPlaying,
101
- onRegionClassAdded = _ref2.onRegionClassAdded,
102
- _ref2$zoomOnAllowedAr = _ref2.zoomOnAllowedArea,
103
- zoomOnAllowedArea = _ref2$zoomOnAllowedAr === void 0 ? true : _ref2$zoomOnAllowedAr,
104
- _ref2$modifyingAllowe = _ref2.modifyingAllowedArea,
105
- modifyingAllowedArea = _ref2$modifyingAllowe === void 0 ? false : _ref2$modifyingAllowe,
106
- keypointDefinitions = _ref2.keypointDefinitions,
107
- allowComments = _ref2.allowComments;
108
- var classes = useStyles();
109
- var canvasEl = useRef(null);
110
- var layoutParams = useRef({});
111
-
112
- var _useRafState = useRafState(false),
113
- _useRafState2 = _slicedToArray(_useRafState, 2),
114
- dragging = _useRafState2[0],
115
- changeDragging = _useRafState2[1];
116
-
117
- var _useRafState3 = useRafState(0),
118
- _useRafState4 = _slicedToArray(_useRafState3, 2),
119
- maskImagesLoaded = _useRafState4[0],
120
- changeMaskImagesLoaded = _useRafState4[1];
121
-
122
- var _useRafState5 = useRafState(null),
123
- _useRafState6 = _slicedToArray(_useRafState5, 2),
124
- zoomStart = _useRafState6[0],
125
- changeZoomStart = _useRafState6[1];
126
-
127
- var _useRafState7 = useRafState(null),
128
- _useRafState8 = _slicedToArray(_useRafState7, 2),
129
- zoomEnd = _useRafState8[0],
130
- changeZoomEnd = _useRafState8[1];
131
-
132
- var _useRafState9 = useRafState(getDefaultMat()),
133
- _useRafState10 = _slicedToArray(_useRafState9, 2),
134
- mat = _useRafState10[0],
135
- changeMat = _useRafState10[1];
136
-
137
- var maskImages = useRef({});
138
- var windowSize = useWindowSize();
139
- var getLatestMat = useEventCallback(function () {
140
- return mat;
141
- });
142
- useWasdMode({
143
- getLatestMat: getLatestMat,
144
- changeMat: changeMat
145
- });
146
-
147
- var _useMouse = useMouse({
148
- canvasEl: canvasEl,
149
- dragging: dragging,
150
- mat: mat,
151
- layoutParams: layoutParams,
152
- changeMat: changeMat,
153
- zoomStart: zoomStart,
154
- zoomEnd: zoomEnd,
155
- changeZoomStart: changeZoomStart,
156
- changeZoomEnd: changeZoomEnd,
157
- changeDragging: changeDragging,
158
- zoomWithPrimary: zoomWithPrimary,
159
- dragWithPrimary: dragWithPrimary,
160
- onMouseMove: onMouseMove,
161
- onMouseDown: onMouseDown,
162
- onMouseUp: onMouseUp
163
- }),
164
- mouseEvents = _useMouse.mouseEvents,
165
- mousePosition = _useMouse.mousePosition;
166
-
167
- useLayoutEffect(function () {
168
- return changeMat(mat.clone());
169
- }, [windowSize]);
170
- var innerMousePos = mat.applyToPoint(mousePosition.current.x, mousePosition.current.y);
171
- var projectRegionBox = useProjectRegionBox({
172
- layoutParams: layoutParams,
173
- mat: mat
174
- });
175
-
176
- var _useState = useState(),
177
- _useState2 = _slicedToArray(_useState, 2),
178
- imageDimensions = _useState2[0],
179
- changeImageDimensions = _useState2[1];
180
-
181
- var imageLoaded = Boolean(imageDimensions && imageDimensions.naturalWidth);
182
- var onVideoOrImageLoaded = useEventCallback(function (_ref3) {
183
- var naturalWidth = _ref3.naturalWidth,
184
- naturalHeight = _ref3.naturalHeight,
185
- duration = _ref3.duration;
186
- var dims = {
187
- naturalWidth: naturalWidth,
188
- naturalHeight: naturalHeight,
189
- duration: duration
190
- };
191
- if (onImageOrVideoLoaded) onImageOrVideoLoaded(dims);
192
- changeImageDimensions(dims); // Redundant update to fix rerendering issues
193
-
194
- setTimeout(function () {
195
- return changeImageDimensions(dims);
196
- }, 10);
197
- });
198
- var excludePattern = useExcludePattern();
199
- var canvas = canvasEl.current;
200
-
201
- if (canvas && imageLoaded) {
202
- var clientWidth = canvas.clientWidth,
203
- clientHeight = canvas.clientHeight;
204
- var fitScale = Math.max(imageDimensions.naturalWidth / (clientWidth - 20), imageDimensions.naturalHeight / (clientHeight - 20));
205
-
206
- var _iw = imageDimensions.naturalWidth / fitScale,
207
- _ih = imageDimensions.naturalHeight / fitScale;
208
-
209
- layoutParams.current = {
210
- iw: _iw,
211
- ih: _ih,
212
- fitScale: fitScale,
213
- canvasWidth: clientWidth,
214
- canvasHeight: clientHeight
215
- };
216
- }
217
-
218
- useEffect(function () {
219
- if (!imageLoaded) return;
220
- changeMat(getDefaultMat(zoomOnAllowedArea ? allowedArea : null, layoutParams.current)); // eslint-disable-next-line
221
- }, [imageLoaded]);
222
- useLayoutEffect(function () {
223
- if (!imageDimensions) return;
224
- var clientWidth = canvas.clientWidth,
225
- clientHeight = canvas.clientHeight;
226
- canvas.width = clientWidth;
227
- canvas.height = clientHeight;
228
- var context = canvas.getContext("2d");
229
- context.save();
230
- context.transform.apply(context, _toConsumableArray(mat.clone().inverse().toArray()));
231
- var _layoutParams$current = layoutParams.current,
232
- iw = _layoutParams$current.iw,
233
- ih = _layoutParams$current.ih;
234
-
235
- if (allowedArea) {
236
- // Pattern to indicate the NOT allowed areas
237
- var x = allowedArea.x,
238
- y = allowedArea.y,
239
- w = allowedArea.w,
240
- h = allowedArea.h;
241
- context.save();
242
- context.globalAlpha = 1;
243
- var outer = [[0, 0], [iw, 0], [iw, ih], [0, ih]];
244
- var inner = [[x * iw, y * ih], [x * iw + w * iw, y * ih], [x * iw + w * iw, y * ih + h * ih], [x * iw, y * ih + h * ih]];
245
- context.moveTo.apply(context, _toConsumableArray(outer[0]));
246
- outer.forEach(function (p) {
247
- return context.lineTo.apply(context, _toConsumableArray(p));
248
- });
249
- context.lineTo.apply(context, _toConsumableArray(outer[0]));
250
- context.closePath();
251
- inner.reverse();
252
- context.moveTo.apply(context, _toConsumableArray(inner[0]));
253
- inner.forEach(function (p) {
254
- return context.lineTo.apply(context, _toConsumableArray(p));
255
- });
256
- context.lineTo.apply(context, _toConsumableArray(inner[0]));
257
- context.fillStyle = excludePattern || "#f00";
258
- context.fill();
259
- context.restore();
260
- }
261
-
262
- context.restore();
263
- });
264
- var _layoutParams$current2 = layoutParams.current,
265
- iw = _layoutParams$current2.iw,
266
- ih = _layoutParams$current2.ih;
267
- var zoomBox = !zoomStart || !zoomEnd ? null : _objectSpread({}, mat.clone().inverse().applyToPoint(zoomStart.x, zoomStart.y), {
268
- w: (zoomEnd.x - zoomStart.x) / mat.a,
269
- h: (zoomEnd.y - zoomStart.y) / mat.d
270
- });
271
-
272
- if (zoomBox) {
273
- if (zoomBox.w < 0) {
274
- zoomBox.x += zoomBox.w;
275
- zoomBox.w *= -1;
276
- }
277
-
278
- if (zoomBox.h < 0) {
279
- zoomBox.y += zoomBox.h;
280
- zoomBox.h *= -1;
281
- }
282
- }
283
-
284
- var imagePosition = {
285
- topLeft: mat.clone().inverse().applyToPoint(0, 0),
286
- bottomRight: mat.clone().inverse().applyToPoint(iw, ih)
287
- };
288
- var highlightedRegion = useMemo(function () {
289
- var highlightedRegions = regions.filter(function (r) {
290
- return r.highlighted;
291
- });
292
- if (highlightedRegions.length !== 1) return null;
293
- return highlightedRegions[0];
294
- }, [regions]);
295
- return React.createElement(ThemeProvider, {
296
- theme: theme
297
- }, React.createElement("div", {
298
- style: {
299
- width: "100%",
300
- height: "100%",
301
- maxHeight: "calc(100vh - 68px)",
302
- position: "relative",
303
- overflow: "hidden",
304
- cursor: createWithPrimary ? "crosshair" : dragging ? "grabbing" : dragWithPrimary ? "grab" : zoomWithPrimary ? mat.a < 1 ? "zoom-out" : "zoom-in" : undefined
305
- }
306
- }, showCrosshairs && React.createElement(Crosshairs, {
307
- key: "crossHairs",
308
- mousePosition: mousePosition
309
- }), imageLoaded && !dragging && React.createElement(RegionSelectAndTransformBoxes, {
310
- key: "regionSelectAndTransformBoxes",
311
- regions: !modifyingAllowedArea || !allowedArea ? regions : [{
312
- type: "box",
313
- id: "$$allowed_area",
314
- cls: "allowed_area",
315
- highlighted: true,
316
- x: allowedArea.x,
317
- y: allowedArea.y,
318
- w: allowedArea.w,
319
- h: allowedArea.h,
320
- visible: true,
321
- color: "#ff0"
322
- }],
323
- mouseEvents: mouseEvents,
324
- projectRegionBox: projectRegionBox,
325
- dragWithPrimary: dragWithPrimary,
326
- createWithPrimary: createWithPrimary,
327
- zoomWithPrimary: zoomWithPrimary,
328
- onBeginMovePoint: onBeginMovePoint,
329
- onSelectRegion: onSelectRegion,
330
- layoutParams: layoutParams,
331
- mat: mat,
332
- onBeginBoxTransform: onBeginBoxTransform,
333
- onBeginMovePolygonPoint: onBeginMovePolygonPoint,
334
- onBeginMoveKeypoint: onBeginMoveKeypoint,
335
- onAddPolygonPoint: onAddPolygonPoint,
336
- showHighlightBox: showHighlightBox
337
- }), imageLoaded && showTags && !dragging && React.createElement(PreventScrollToParents, {
338
- key: "regionTags"
339
- }, React.createElement(RegionTags, {
340
- regions: regions,
341
- projectRegionBox: projectRegionBox,
342
- mouseEvents: mouseEvents,
343
- regionClsList: regionClsList,
344
- regionTagList: regionTagList,
345
- onBeginRegionEdit: onBeginRegionEdit,
346
- onChangeRegion: onChangeRegion,
347
- onCloseRegionEdit: onCloseRegionEdit,
348
- onDeleteRegion: onDeleteRegion,
349
- layoutParams: layoutParams,
350
- imageSrc: imageSrc,
351
- RegionEditLabel: RegionEditLabel,
352
- onRegionClassAdded: onRegionClassAdded,
353
- allowComments: allowComments
354
- })), !showTags && highlightedRegion && React.createElement("div", {
355
- key: "topLeftTag",
356
- className: classes.fixedRegionLabel
357
- }, React.createElement(RegionLabel, {
358
- disableClose: true,
359
- allowedClasses: regionClsList,
360
- allowedTags: regionTagList,
361
- onChange: onChangeRegion,
362
- onDelete: onDeleteRegion,
363
- editing: true,
364
- region: highlightedRegion,
365
- imageSrc: imageSrc,
366
- allowComments: allowComments
367
- })), zoomWithPrimary && zoomBox !== null && React.createElement("div", {
368
- key: "zoomBox",
369
- style: {
370
- position: "absolute",
371
- zIndex: 1,
372
- border: "1px solid #fff",
373
- pointerEvents: "none",
374
- left: zoomBox.x,
375
- top: zoomBox.y,
376
- width: zoomBox.w,
377
- height: zoomBox.h
378
- }
379
- }), showPointDistances && React.createElement(PointDistances, {
380
- key: "pointDistances",
381
- regions: regions,
382
- realSize: realSize,
383
- projectRegionBox: projectRegionBox,
384
- pointDistancePrecision: pointDistancePrecision
385
- }), React.createElement(PreventScrollToParents, Object.assign({
386
- style: {
387
- width: "100%",
388
- height: "100%"
389
- }
390
- }, mouseEvents), React.createElement(React.Fragment, null, fullImageSegmentationMode && React.createElement(ImageMask, {
391
- hide: !showMask,
392
- autoSegmentationOptions: autoSegmentationOptions,
393
- imagePosition: imagePosition,
394
- regionClsList: regionClsList,
395
- imageSrc: imageSrc,
396
- regions: regions
397
- }), React.createElement("canvas", {
398
- style: {
399
- opacity: 0.25
400
- },
401
- className: classes.canvas,
402
- ref: canvasEl
403
- }), React.createElement(RegionShapes, {
404
- mat: mat,
405
- keypointDefinitions: keypointDefinitions,
406
- imagePosition: imagePosition,
407
- regions: regions,
408
- fullSegmentationMode: fullImageSegmentationMode
409
- }), React.createElement(VideoOrImageCanvasBackground, {
410
- videoPlaying: videoPlaying,
411
- imagePosition: imagePosition,
412
- mouseEvents: mouseEvents,
413
- onLoad: onVideoOrImageLoaded,
414
- videoTime: videoTime,
415
- videoSrc: videoSrc,
416
- imageSrc: imageSrc,
417
- useCrossOrigin: fullImageSegmentationMode,
418
- onChangeVideoTime: onChangeVideoTime,
419
- onChangeVideoPlaying: onChangeVideoPlaying
420
- }))), React.createElement("div", {
421
- className: classes.zoomIndicator
422
- }, (1 / mat.a * 100).toFixed(0), "%")));
423
- };
424
- export default ImageCanvas;
@@ -1,165 +0,0 @@
1
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
2
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
- import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
4
- export var getEnclosingBox = function getEnclosingBox(region) {
5
- switch (region.type) {
6
- case "polygon":
7
- {
8
- var box = {
9
- x: Math.min.apply(Math, _toConsumableArray(region.points.map(function (_ref) {
10
- var _ref2 = _slicedToArray(_ref, 2),
11
- x = _ref2[0],
12
- y = _ref2[1];
13
-
14
- return x;
15
- }))),
16
- y: Math.min.apply(Math, _toConsumableArray(region.points.map(function (_ref3) {
17
- var _ref4 = _slicedToArray(_ref3, 2),
18
- x = _ref4[0],
19
- y = _ref4[1];
20
-
21
- return y;
22
- }))),
23
- w: 0,
24
- h: 0
25
- };
26
- box.w = Math.max.apply(Math, _toConsumableArray(region.points.map(function (_ref5) {
27
- var _ref6 = _slicedToArray(_ref5, 2),
28
- x = _ref6[0],
29
- y = _ref6[1];
30
-
31
- return x;
32
- }))) - box.x;
33
- box.h = Math.max.apply(Math, _toConsumableArray(region.points.map(function (_ref7) {
34
- var _ref8 = _slicedToArray(_ref7, 2),
35
- x = _ref8[0],
36
- y = _ref8[1];
37
-
38
- return y;
39
- }))) - box.y;
40
- return box;
41
- }
42
-
43
- case "keypoints":
44
- {
45
- var minX = Math.min.apply(Math, _toConsumableArray(Object.values(region.points).map(function (_ref9) {
46
- var x = _ref9.x,
47
- y = _ref9.y;
48
- return x;
49
- })));
50
- var minY = Math.min.apply(Math, _toConsumableArray(Object.values(region.points).map(function (_ref10) {
51
- var x = _ref10.x,
52
- y = _ref10.y;
53
- return y;
54
- })));
55
- var maxX = Math.max.apply(Math, _toConsumableArray(Object.values(region.points).map(function (_ref11) {
56
- var x = _ref11.x,
57
- y = _ref11.y;
58
- return x;
59
- })));
60
- var maxY = Math.max.apply(Math, _toConsumableArray(Object.values(region.points).map(function (_ref12) {
61
- var x = _ref12.x,
62
- y = _ref12.y;
63
- return y;
64
- })));
65
- return {
66
- x: minX,
67
- y: minY,
68
- w: maxX - minX,
69
- h: maxY - minY
70
- };
71
- }
72
-
73
- case "expanding-line":
74
- {
75
- var _box = {
76
- x: Math.min.apply(Math, _toConsumableArray(region.points.map(function (_ref13) {
77
- var x = _ref13.x,
78
- y = _ref13.y;
79
- return x;
80
- }))),
81
- y: Math.min.apply(Math, _toConsumableArray(region.points.map(function (_ref14) {
82
- var x = _ref14.x,
83
- y = _ref14.y;
84
- return y;
85
- }))),
86
- w: 0,
87
- h: 0
88
- };
89
- _box.w = Math.max.apply(Math, _toConsumableArray(region.points.map(function (_ref15) {
90
- var x = _ref15.x,
91
- y = _ref15.y;
92
- return x;
93
- }))) - _box.x;
94
- _box.h = Math.max.apply(Math, _toConsumableArray(region.points.map(function (_ref16) {
95
- var x = _ref16.x,
96
- y = _ref16.y;
97
- return y;
98
- }))) - _box.y;
99
- return _box;
100
- }
101
-
102
- case "line":
103
- {
104
- return {
105
- x: region.x1,
106
- y: region.y1,
107
- w: 0,
108
- h: 0
109
- };
110
- }
111
-
112
- case "box":
113
- {
114
- return {
115
- x: region.x,
116
- y: region.y,
117
- w: region.w,
118
- h: region.h
119
- };
120
- }
121
-
122
- case "point":
123
- {
124
- return {
125
- x: region.x,
126
- y: region.y,
127
- w: 0,
128
- h: 0
129
- };
130
- }
131
-
132
- default:
133
- {
134
- return {
135
- x: 0,
136
- y: 0,
137
- w: 0,
138
- h: 0
139
- };
140
- }
141
- }
142
-
143
- throw new Error("unknown region");
144
- };
145
- export var moveRegion = function moveRegion(region, x, y) {
146
- switch (region.type) {
147
- case "point":
148
- {
149
- return _objectSpread({}, region, {
150
- x: x,
151
- y: y
152
- });
153
- }
154
-
155
- case "box":
156
- {
157
- return _objectSpread({}, region, {
158
- x: x - region.w / 2,
159
- y: y - region.h / 2
160
- });
161
- }
162
- }
163
-
164
- return region;
165
- };