@searpent/react-image-annotate 2.0.75 → 2.0.76

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