@searpent/react-image-annotate 2.0.77 → 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/Editor/annotation-plugin/annotation.js +697 -0
  20. package/Editor/index.js +93 -0
  21. package/Editor/readOnly.js +123 -0
  22. package/{src/Editor → Editor}/tools.js +2 -3
  23. package/Errorer/index.js +11 -0
  24. package/FullImageSegmentationAnnotator/index.js +7 -0
  25. package/GroupSelectorSidebarBox/index.js +63 -0
  26. package/GroupsEditorSidebarBox/index.js +138 -0
  27. package/HelpSidebarBox/index.js +58 -0
  28. package/HighlightBox/index.js +102 -0
  29. package/HistorySidebarBox/index.js +71 -0
  30. package/ImageCanvas/index.js +441 -0
  31. package/ImageCanvas/region-tools.js +165 -0
  32. package/{src/ImageCanvas → ImageCanvas}/styles.js +12 -8
  33. package/ImageCanvas/use-mouse.js +180 -0
  34. package/ImageCanvas/use-project-box.js +27 -0
  35. package/ImageCanvas/use-wasd-mode.js +62 -0
  36. package/ImageMask/index.js +133 -0
  37. package/ImageMask/load-image.js +25 -0
  38. package/ImageSelectorSidebarBox/index.js +60 -0
  39. package/KeyframeTimeline/get-time-string.js +27 -0
  40. package/KeyframeTimeline/index.js +233 -0
  41. package/KeyframesSelectorSidebarBox/index.js +93 -0
  42. package/LandingPage/index.js +159 -0
  43. package/Locker/index.js +11 -0
  44. package/MainLayout/RightSidebarItemsWrapper.js +19 -0
  45. package/MainLayout/icon-dictionary.js +104 -0
  46. package/MainLayout/index.js +526 -0
  47. package/{src/MainLayout → MainLayout}/styles.js +6 -7
  48. package/MainLayout/types.js +0 -0
  49. package/MainLayout/use-implied-video-regions.js +13 -0
  50. package/MetadataEditorSidebarBox/index.js +231 -0
  51. package/PageSelector/index.js +180 -0
  52. package/PointDistances/index.js +73 -0
  53. package/PreventScrollToParents/index.js +51 -0
  54. package/RegionLabel/index.js +232 -0
  55. package/{src/RegionLabel → RegionLabel}/styles.js +12 -15
  56. package/RegionSelectAndTransformBoxes/index.js +169 -0
  57. package/RegionSelectorSidebarBox/index.js +254 -0
  58. package/{src/RegionSelectorSidebarBox → RegionSelectorSidebarBox}/styles.js +13 -14
  59. package/RegionShapes/index.js +294 -0
  60. package/RegionTags/index.js +144 -0
  61. package/SettingsDialog/index.js +52 -0
  62. package/SettingsProvider/index.js +60 -0
  63. package/Shortcuts/ShortcutField.js +46 -0
  64. package/Shortcuts/index.js +133 -0
  65. package/ShortcutsManager/index.js +155 -0
  66. package/Sidebar/index.js +69 -0
  67. package/SidebarBoxContainer/index.js +93 -0
  68. package/SmallToolButton/index.js +42 -0
  69. package/TagsSidebarBox/index.js +105 -0
  70. package/TaskDescriptionSidebarBox/index.js +58 -0
  71. package/Theme/index.js +30 -0
  72. package/VideoOrImageCanvasBackground/index.js +151 -0
  73. package/colors.js +14 -0
  74. package/hooks/use-colors.js +127 -0
  75. package/hooks/use-event-callback.js +10 -0
  76. package/hooks/use-exclude-pattern.js +24 -0
  77. package/hooks/use-load-image.js +26 -0
  78. package/hooks/use-window-size.js +46 -0
  79. package/{src/hooks → hooks}/xpattern.js +1 -1
  80. package/index.js +3 -0
  81. package/lib.js +3 -0
  82. package/package.json +1 -1
  83. package/stories.js +5 -0
  84. package/utils/blocks-to-article.js +60 -0
  85. package/{src/utils → utils}/blocks-to-article.test.js +5 -8
  86. package/{src/utils → utils}/default-locked-until.js +2 -1
  87. package/{src/utils → utils}/filter-only-unique.js +1 -1
  88. package/utils/get-from-local-storage.js +7 -0
  89. package/utils/get-hotkey-help-text.js +9 -0
  90. package/utils/get-landmarks-with-transform.js +40 -0
  91. package/utils/photosToImages.js +85 -0
  92. package/utils/regions-groups.js +28 -0
  93. package/utils/regions-to-blocks.js +18 -0
  94. package/utils/saveable-actions-enum.js +3 -0
  95. package/utils/set-in-local-storage.js +3 -0
  96. package/utils/sleep.js +7 -0
  97. package/utils/uuid-to-hash.js +5 -0
  98. package/.babelrc +0 -6
  99. package/.env +0 -1
  100. package/.flowconfig +0 -2
  101. package/.github/workflows/release-on-master.yml +0 -32
  102. package/.github/workflows/test.yml +0 -16
  103. package/.prettierrc +0 -3
  104. package/.releaserc.js +0 -18
  105. package/.storybook/addons.js +0 -2
  106. package/.storybook/config.js +0 -16
  107. package/LICENSE +0 -21
  108. package/public/favicon.ico +0 -0
  109. package/public/index.html +0 -38
  110. package/src/Annotator/bike-pic.png +0 -0
  111. package/src/Annotator/bike-pic2.png +0 -0
  112. package/src/Annotator/dab-keyframes.story.json +0 -1
  113. package/src/Annotator/exampleImages.js +0 -48
  114. package/src/Annotator/examplePhotos.js +0 -7603
  115. package/src/Annotator/index.js +0 -380
  116. package/src/Annotator/index.story.js +0 -899
  117. package/src/Annotator/poses.story.js +0 -150
  118. package/src/Annotator/reducers/combine-reducers.js +0 -7
  119. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -53
  120. package/src/Annotator/reducers/general-reducer.js +0 -1228
  121. package/src/Annotator/reducers/get-active-image.js +0 -21
  122. package/src/Annotator/reducers/get-implied-video-regions.js +0 -115
  123. package/src/Annotator/reducers/history-handler.js +0 -60
  124. package/src/Annotator/reducers/image-reducer.js +0 -23
  125. package/src/Annotator/reducers/video-reducer.js +0 -85
  126. package/src/Annotator/video.story.js +0 -51
  127. package/src/ClassSelectionMenu/index.js +0 -112
  128. package/src/Crosshairs/index.js +0 -64
  129. package/src/DebugSidebarBox/index.js +0 -36
  130. package/src/DemoSite/Editor.js +0 -235
  131. package/src/DemoSite/ErrorBoundaryDialog.js +0 -34
  132. package/src/DemoSite/index.js +0 -41
  133. package/src/DemoSite/index.story.js +0 -10
  134. package/src/DemoSite/simple-segmentation-example.json +0 -572
  135. package/src/Editor/annotation-plugin/annotation.js +0 -546
  136. package/src/Editor/index.js +0 -50
  137. package/src/Editor/readOnly.js +0 -31
  138. package/src/Errorer/index.js +0 -13
  139. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  140. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  141. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  142. package/src/FullImageSegmentationAnnotator/index.js +0 -7
  143. package/src/FullImageSegmentationAnnotator/index.story.js +0 -177
  144. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  145. package/src/GroupSelectorSidebarBox/index.js +0 -48
  146. package/src/GroupsEditorSidebarBox/index.js +0 -108
  147. package/src/HelpSidebarBox/index.js +0 -43
  148. package/src/HighlightBox/index.js +0 -143
  149. package/src/HistorySidebarBox/index.js +0 -78
  150. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  151. package/src/ImageCanvas/index.js +0 -515
  152. package/src/ImageCanvas/index.story.js +0 -314
  153. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  154. package/src/ImageCanvas/region-tools.js +0 -171
  155. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  156. package/src/ImageCanvas/use-mouse.js +0 -168
  157. package/src/ImageCanvas/use-project-box.js +0 -23
  158. package/src/ImageCanvas/use-wasd-mode.js +0 -50
  159. package/src/ImageMask/index.js +0 -127
  160. package/src/ImageMask/load-image.js +0 -32
  161. package/src/ImageSelectorSidebarBox/index.js +0 -54
  162. package/src/KeyframeTimeline/get-time-string.js +0 -25
  163. package/src/KeyframeTimeline/index.js +0 -223
  164. package/src/KeyframesSelectorSidebarBox/index.js +0 -93
  165. package/src/LandingPage/content.md +0 -57
  166. package/src/LandingPage/github-markdown.css +0 -964
  167. package/src/LandingPage/index.js +0 -147
  168. package/src/Locker/index.js +0 -13
  169. package/src/MainLayout/RightSidebarItemsWrapper.js +0 -21
  170. package/src/MainLayout/icon-dictionary.js +0 -79
  171. package/src/MainLayout/index.js +0 -564
  172. package/src/MainLayout/index.story.js +0 -240
  173. package/src/MainLayout/types.js +0 -171
  174. package/src/MainLayout/use-implied-video-regions.js +0 -17
  175. package/src/MetadataEditorSidebarBox/index.js +0 -160
  176. package/src/PageSelector/index.js +0 -159
  177. package/src/PointDistances/index.js +0 -90
  178. package/src/PreventScrollToParents/index.js +0 -48
  179. package/src/PreventScrollToParents/index.story.js +0 -23
  180. package/src/RegionLabel/index.js +0 -236
  181. package/src/RegionSelectAndTransformBoxes/index.js +0 -236
  182. package/src/RegionSelectorSidebarBox/index.js +0 -220
  183. package/src/RegionShapes/index.js +0 -254
  184. package/src/RegionTags/index.js +0 -136
  185. package/src/SettingsDialog/index.js +0 -58
  186. package/src/SettingsProvider/index.js +0 -57
  187. package/src/Shortcuts/ShortcutField.js +0 -44
  188. package/src/Shortcuts/index.js +0 -129
  189. package/src/ShortcutsManager/index.js +0 -162
  190. package/src/Sidebar/index.js +0 -117
  191. package/src/SidebarBoxContainer/index.js +0 -93
  192. package/src/SmallToolButton/index.js +0 -57
  193. package/src/TagsSidebarBox/index.js +0 -93
  194. package/src/TaskDescriptionSidebarBox/index.js +0 -43
  195. package/src/Theme/index.js +0 -36
  196. package/src/VideoOrImageCanvasBackground/index.js +0 -170
  197. package/src/colors.js +0 -32
  198. package/src/hooks/use-colors.js +0 -95
  199. package/src/hooks/use-event-callback.js +0 -11
  200. package/src/hooks/use-exclude-pattern.js +0 -27
  201. package/src/hooks/use-load-image.js +0 -21
  202. package/src/hooks/use-window-size.js +0 -46
  203. package/src/hooks/xpattern.png +0 -0
  204. package/src/index.js +0 -18
  205. package/src/lib.js +0 -7
  206. package/src/screenshot.png +0 -0
  207. package/src/site.css +0 -5
  208. package/src/stories.js +0 -2
  209. package/src/utils/blocks-to-article.js +0 -61
  210. package/src/utils/get-from-local-storage.js +0 -7
  211. package/src/utils/get-hotkey-help-text.js +0 -11
  212. package/src/utils/get-landmarks-with-transform.js +0 -23
  213. package/src/utils/photosToImages.js +0 -67
  214. package/src/utils/regions-groups.js +0 -19
  215. package/src/utils/regions-to-blocks.js +0 -16
  216. package/src/utils/saveable-actions-enum.js +0 -5
  217. package/src/utils/set-in-local-storage.js +0 -6
  218. package/src/utils/sleep.js +0 -3
  219. package/src/utils/uuid-to-hash.js +0 -5
  220. /package/{src/Editor → Editor}/annotation-plugin/annotation.css +0 -0
  221. /package/{src/Errorer → Errorer}/errorer.css +0 -0
  222. /package/{src/Locker → Locker}/locker.css +0 -0
  223. /package/{src/PageSelector → PageSelector}/page-selector.css +0 -0
  224. /package/{src/utils → utils}/next-group-id.js +0 -0
@@ -1,5 +1,4 @@
1
- import { grey, blue, orange, purple } from "@mui/material/colors"
2
-
1
+ import { grey, blue, orange, purple } from "@mui/material/colors";
3
2
  export default {
4
3
  container: {
5
4
  fontSize: 11,
@@ -8,7 +7,7 @@ export default {
8
7
  "& .icon": {
9
8
  marginTop: 4,
10
9
  width: 16,
11
- height: 16,
10
+ height: 16
12
11
  },
13
12
  "& .icon2": {
14
13
  opacity: 0.5,
@@ -17,23 +16,23 @@ export default {
17
16
  transition: "200ms opacity",
18
17
  "&:hover": {
19
18
  cursor: "pointer",
20
- opacity: 1,
21
- },
22
- },
19
+ opacity: 1
20
+ }
21
+ }
23
22
  },
24
23
  row: {
25
24
  padding: 4,
26
25
  cursor: "pointer",
27
26
  "&.header:hover": {
28
- backgroundColor: "#fff",
27
+ backgroundColor: "#fff"
29
28
  },
30
29
  "&.highlighted": {
31
- backgroundColor: blue[100],
30
+ backgroundColor: blue[100]
32
31
  },
33
32
  "&:hover": {
34
33
  backgroundColor: blue[50],
35
- color: grey[800],
36
- },
34
+ color: grey[800]
35
+ }
37
36
  },
38
37
  chip: {
39
38
  display: "flex",
@@ -47,8 +46,8 @@ export default {
47
46
  borderRadius: 5,
48
47
  width: 10,
49
48
  height: 10,
50
- marginRight: 4,
49
+ marginRight: 4
51
50
  },
52
- "& .text": {},
53
- },
54
- }
51
+ "& .text": {}
52
+ }
53
+ };
@@ -0,0 +1,294 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import React, { memo } from "react";
3
+ import colorAlpha from "color-alpha";
4
+ import useColors from '../hooks/use-colors';
5
+
6
+ function clamp(num, min, max) {
7
+ return num <= min ? min : num >= max ? max : num;
8
+ }
9
+
10
+ var RegionComponents = {
11
+ point: memo(function (_ref) {
12
+ var region = _ref.region,
13
+ iw = _ref.iw,
14
+ ih = _ref.ih;
15
+ return React.createElement("g", {
16
+ transform: "translate(".concat(region.x * iw, " ").concat(region.y * ih, ")")
17
+ }, React.createElement("path", {
18
+ d: "M0 8L8 0L0 -8L-8 0Z",
19
+ strokeWidth: 2,
20
+ stroke: region.color,
21
+ fill: "transparent"
22
+ }));
23
+ }),
24
+ line: memo(function (_ref2) {
25
+ var region = _ref2.region,
26
+ iw = _ref2.iw,
27
+ ih = _ref2.ih;
28
+ return React.createElement("g", {
29
+ transform: "translate(".concat(region.x1 * iw, " ").concat(region.y1 * ih, ")")
30
+ }, React.createElement("line", {
31
+ strokeWidth: 2,
32
+ x1: 0,
33
+ y1: 0,
34
+ x2: (region.x2 - region.x1) * iw,
35
+ y2: (region.y2 - region.y1) * ih,
36
+ stroke: colorAlpha(region.color, 0.75),
37
+ fill: colorAlpha(region.color, 0.25)
38
+ }));
39
+ }),
40
+ box: memo(function (_ref3) {
41
+ var region = _ref3.region,
42
+ iw = _ref3.iw,
43
+ ih = _ref3.ih;
44
+
45
+ var _useColors = useColors(),
46
+ clsColor = _useColors.clsColor,
47
+ groupColor = _useColors.groupColor;
48
+
49
+ if (region.groupId !== undefined) {
50
+ return React.createElement("g", {
51
+ transform: "translate(".concat(region.x * iw, " ").concat(region.y * ih, ")")
52
+ }, React.createElement("rect", {
53
+ strokeWidth: region.groupHighlighted ? 3 : 0,
54
+ x: 0,
55
+ y: 0,
56
+ width: Math.max(region.w * iw, 0),
57
+ height: Math.max(region.h * ih, 0),
58
+ stroke: colorAlpha(clsColor(region.cls), 0.85),
59
+ fill: region.groupHighlighted ? colorAlpha(clsColor(region.cls), 0.15) : colorAlpha(groupColor(region.groupId), 0.5)
60
+ }));
61
+ } else {
62
+ return React.createElement("g", {
63
+ transform: "translate(".concat(region.x * iw, " ").concat(region.y * ih, ")")
64
+ }, React.createElement("rect", {
65
+ strokeWidth: 2,
66
+ x: 0,
67
+ y: 0,
68
+ width: Math.max(region.w * iw, 0),
69
+ height: Math.max(region.h * ih, 0),
70
+ stroke: colorAlpha(clsColor(region.cls), 0.85),
71
+ fill: colorAlpha(clsColor(region.cls), 0.85)
72
+ }));
73
+ }
74
+ }),
75
+ polygon: memo(function (_ref4) {
76
+ var region = _ref4.region,
77
+ iw = _ref4.iw,
78
+ ih = _ref4.ih,
79
+ fullSegmentationMode = _ref4.fullSegmentationMode;
80
+ var Component = region.open ? "polyline" : "polygon";
81
+ var alphaBase = fullSegmentationMode ? 0.5 : 1;
82
+ return React.createElement(Component, {
83
+ points: region.points.map(function (_ref5) {
84
+ var _ref6 = _slicedToArray(_ref5, 2),
85
+ x = _ref6[0],
86
+ y = _ref6[1];
87
+
88
+ return [x * iw, y * ih];
89
+ }).map(function (a) {
90
+ return a.join(" ");
91
+ }).join(" "),
92
+ strokeWidth: 2,
93
+ stroke: colorAlpha(region.color, 0.75),
94
+ fill: colorAlpha(region.color, 0.25)
95
+ });
96
+ }),
97
+ keypoints: function keypoints(_ref7) {
98
+ var region = _ref7.region,
99
+ iw = _ref7.iw,
100
+ ih = _ref7.ih,
101
+ keypointDefinitions = _ref7.keypointDefinitions;
102
+ var points = region.points,
103
+ keypointsDefinitionId = region.keypointsDefinitionId;
104
+
105
+ if (!keypointDefinitions[keypointsDefinitionId]) {
106
+ throw new Error("No definition for keypoint configuration \"".concat(keypointsDefinitionId, "\""));
107
+ }
108
+
109
+ var _keypointDefinitions$ = keypointDefinitions[keypointsDefinitionId],
110
+ landmarks = _keypointDefinitions$.landmarks,
111
+ connections = _keypointDefinitions$.connections;
112
+ return React.createElement("g", null, Object.entries(points).map(function (_ref8, i) {
113
+ var _ref9 = _slicedToArray(_ref8, 2),
114
+ keypointId = _ref9[0],
115
+ _ref9$ = _ref9[1],
116
+ x = _ref9$.x,
117
+ y = _ref9$.y;
118
+
119
+ return React.createElement("g", {
120
+ key: i,
121
+ transform: "translate(".concat(x * iw, " ").concat(y * ih, ")")
122
+ }, React.createElement("path", {
123
+ d: "M0 8L8 0L0 -8L-8 0Z",
124
+ strokeWidth: 2,
125
+ stroke: landmarks[keypointId].color,
126
+ fill: "transparent"
127
+ }));
128
+ }), connections.map(function (_ref10) {
129
+ var _ref11 = _slicedToArray(_ref10, 2),
130
+ kp1Id = _ref11[0],
131
+ kp2Id = _ref11[1];
132
+
133
+ var kp1 = points[kp1Id];
134
+ var kp2 = points[kp2Id];
135
+ var midPoint = {
136
+ x: (kp1.x + kp2.x) / 2,
137
+ y: (kp1.y + kp2.y) / 2
138
+ };
139
+ return React.createElement("g", {
140
+ key: "".concat(kp1.x, ",").concat(kp1.y, ".").concat(kp2.x, ",").concat(kp2.y)
141
+ }, React.createElement("line", {
142
+ x1: kp1.x * iw,
143
+ y1: kp1.y * ih,
144
+ x2: midPoint.x * iw,
145
+ y2: midPoint.y * ih,
146
+ strokeWidth: 2,
147
+ stroke: landmarks[kp1Id].color
148
+ }), React.createElement("line", {
149
+ x1: kp2.x * iw,
150
+ y1: kp2.y * ih,
151
+ x2: midPoint.x * iw,
152
+ y2: midPoint.y * ih,
153
+ strokeWidth: 2,
154
+ stroke: landmarks[kp2Id].color
155
+ }));
156
+ }));
157
+ },
158
+ "expanding-line": memo(function (_ref12) {
159
+ var region = _ref12.region,
160
+ iw = _ref12.iw,
161
+ ih = _ref12.ih;
162
+ var _region$expandingWidt = region.expandingWidth,
163
+ expandingWidth = _region$expandingWidt === void 0 ? 0.005 : _region$expandingWidt,
164
+ points = region.points;
165
+ expandingWidth = points.slice(-1)[0].width || expandingWidth;
166
+ var pointPairs = points.map(function (_ref13, i) {
167
+ var x = _ref13.x,
168
+ y = _ref13.y,
169
+ angle = _ref13.angle,
170
+ width = _ref13.width;
171
+
172
+ if (!angle) {
173
+ var n = points[clamp(i + 1, 0, points.length - 1)];
174
+ var p = points[clamp(i - 1, 0, points.length - 1)];
175
+ angle = Math.atan2(p.x - n.x, p.y - n.y) + Math.PI / 2;
176
+ }
177
+
178
+ var dx = Math.sin(angle) * (width || expandingWidth) / 2;
179
+ var dy = Math.cos(angle) * (width || expandingWidth) / 2;
180
+ return [{
181
+ x: x + dx,
182
+ y: y + dy
183
+ }, {
184
+ x: x - dx,
185
+ y: y - dy
186
+ }];
187
+ });
188
+ var firstSection = pointPairs.map(function (_ref14) {
189
+ var _ref15 = _slicedToArray(_ref14, 2),
190
+ p1 = _ref15[0],
191
+ p2 = _ref15[1];
192
+
193
+ return p1;
194
+ });
195
+ var secondSection = pointPairs.map(function (_ref16) {
196
+ var _ref17 = _slicedToArray(_ref16, 2),
197
+ p1 = _ref17[0],
198
+ p2 = _ref17[1];
199
+
200
+ return p2;
201
+ }).asMutable();
202
+ secondSection.reverse();
203
+ var lastPoint = points.slice(-1)[0];
204
+ return React.createElement(React.Fragment, null, React.createElement("polygon", {
205
+ points: firstSection.concat(region.candidatePoint ? [region.candidatePoint] : []).concat(secondSection).map(function (p) {
206
+ return "".concat(p.x * iw, " ").concat(p.y * ih);
207
+ }).join(" "),
208
+ strokeWidth: 2,
209
+ stroke: colorAlpha(region.color, 0.75),
210
+ fill: colorAlpha(region.color, 0.25)
211
+ }), points.map(function (_ref18, i) {
212
+ var x = _ref18.x,
213
+ y = _ref18.y,
214
+ angle = _ref18.angle;
215
+ return React.createElement("g", {
216
+ key: i,
217
+ transform: "translate(".concat(x * iw, " ").concat(y * ih, ") rotate(").concat(-(angle || 0) * 180 / Math.PI, ")")
218
+ }, React.createElement("g", null, React.createElement("rect", {
219
+ x: -5,
220
+ y: -5,
221
+ width: 10,
222
+ height: 10,
223
+ strokeWidth: 2,
224
+ stroke: colorAlpha(region.color, 0.75),
225
+ fill: colorAlpha(region.color, 0.25)
226
+ })));
227
+ }), React.createElement("rect", {
228
+ x: lastPoint.x * iw - 8,
229
+ y: lastPoint.y * ih - 8,
230
+ width: 16,
231
+ height: 16,
232
+ strokeWidth: 4,
233
+ stroke: colorAlpha(region.color, 0.5),
234
+ fill: "transparent"
235
+ }));
236
+ }),
237
+ pixel: function pixel() {
238
+ return null;
239
+ }
240
+ };
241
+ export var WrappedRegionList = memo(function (_ref19) {
242
+ var regions = _ref19.regions,
243
+ keypointDefinitions = _ref19.keypointDefinitions,
244
+ iw = _ref19.iw,
245
+ ih = _ref19.ih,
246
+ fullSegmentationMode = _ref19.fullSegmentationMode;
247
+ return regions.filter(function (r) {
248
+ return r.visible !== false;
249
+ }).map(function (r) {
250
+ var Component = RegionComponents[r.type];
251
+ return React.createElement(Component, {
252
+ key: r.id,
253
+ region: r,
254
+ iw: iw,
255
+ ih: ih,
256
+ keypointDefinitions: keypointDefinitions,
257
+ fullSegmentationMode: fullSegmentationMode
258
+ });
259
+ });
260
+ }, function (n, p) {
261
+ return n.regions === p.regions && n.iw === p.iw && n.ih === p.ih;
262
+ });
263
+ export var RegionShapes = function RegionShapes(_ref20) {
264
+ var mat = _ref20.mat,
265
+ imagePosition = _ref20.imagePosition,
266
+ _ref20$regions = _ref20.regions,
267
+ regions = _ref20$regions === void 0 ? [] : _ref20$regions,
268
+ keypointDefinitions = _ref20.keypointDefinitions,
269
+ fullSegmentationMode = _ref20.fullSegmentationMode;
270
+ var iw = imagePosition.bottomRight.x - imagePosition.topLeft.x;
271
+ var ih = imagePosition.bottomRight.y - imagePosition.topLeft.y;
272
+ if (isNaN(iw) || isNaN(ih)) return null;
273
+ return React.createElement("svg", {
274
+ width: iw,
275
+ height: ih,
276
+ style: {
277
+ position: "absolute",
278
+ zIndex: 2,
279
+ left: imagePosition.topLeft.x,
280
+ top: imagePosition.topLeft.y,
281
+ pointerEvents: "none",
282
+ width: iw,
283
+ height: ih
284
+ }
285
+ }, React.createElement(WrappedRegionList, {
286
+ key: "wrapped-region-list",
287
+ regions: regions,
288
+ iw: iw,
289
+ ih: ih,
290
+ keypointDefinitions: keypointDefinitions,
291
+ fullSegmentationMode: fullSegmentationMode
292
+ }));
293
+ };
294
+ export default RegionShapes;
@@ -0,0 +1,144 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
2
+ import React from "react";
3
+ import Paper from "@mui/material/Paper";
4
+ import DefaultRegionLabel from "../RegionLabel";
5
+ import LockIcon from "@mui/icons-material/Lock";
6
+
7
+ var copyWithout = function copyWithout(obj) {
8
+ var newObj = _objectSpread({}, obj);
9
+
10
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
11
+ args[_key - 1] = arguments[_key];
12
+ }
13
+
14
+ for (var _i = 0, _args = args; _i < _args.length; _i++) {
15
+ var arg = _args[_i];
16
+ delete newObj[arg];
17
+ }
18
+
19
+ return newObj;
20
+ };
21
+
22
+ export var RegionTags = function RegionTags(_ref) {
23
+ var regions = _ref.regions,
24
+ projectRegionBox = _ref.projectRegionBox,
25
+ mouseEvents = _ref.mouseEvents,
26
+ regionClsList = _ref.regionClsList,
27
+ regionTagList = _ref.regionTagList,
28
+ onBeginRegionEdit = _ref.onBeginRegionEdit,
29
+ onChangeRegion = _ref.onChangeRegion,
30
+ onCloseRegionEdit = _ref.onCloseRegionEdit,
31
+ onDeleteRegion = _ref.onDeleteRegion,
32
+ onDeleteGroup = _ref.onDeleteGroup,
33
+ layoutParams = _ref.layoutParams,
34
+ imageSrc = _ref.imageSrc,
35
+ RegionEditLabel = _ref.RegionEditLabel,
36
+ onRegionClassAdded = _ref.onRegionClassAdded,
37
+ allowComments = _ref.allowComments,
38
+ hideNotEditingLabel = _ref.hideNotEditingLabel,
39
+ allowedGroups = _ref.allowedGroups;
40
+ var RegionLabel = RegionEditLabel != null ? RegionEditLabel : DefaultRegionLabel;
41
+ return regions.filter(function (r) {
42
+ return r.visible || r.visible === undefined;
43
+ }).map(function (region) {
44
+ var pbox = projectRegionBox(region);
45
+ var _layoutParams$current = layoutParams.current,
46
+ iw = _layoutParams$current.iw,
47
+ ih = _layoutParams$current.ih;
48
+ var margin = 8;
49
+ if (region.highlighted && region.type === "box") margin += 6;
50
+ var labelBoxHeight = region.editingLabels && !region.locked ? 170 : region.tags ? 60 : 50;
51
+ var displayOnTop = pbox.y > labelBoxHeight;
52
+ var coords = displayOnTop ? {
53
+ left: pbox.x,
54
+ top: pbox.y - margin / 2
55
+ } : {
56
+ left: pbox.x,
57
+ top: pbox.y + pbox.h + margin / 2
58
+ };
59
+
60
+ if (region.locked) {
61
+ return React.createElement("div", {
62
+ key: region.id,
63
+ style: _objectSpread({
64
+ position: "absolute"
65
+ }, coords, {
66
+ zIndex: 10 + (region.editingLabels ? 5 : 0)
67
+ })
68
+ }, React.createElement(Paper, {
69
+ style: _objectSpread({
70
+ position: "absolute",
71
+ left: 0
72
+ }, displayOnTop ? {
73
+ bottom: 0
74
+ } : {
75
+ top: 0
76
+ }, {
77
+ zIndex: 10,
78
+ backgroundColor: "#fff",
79
+ borderRadius: 4,
80
+ padding: 2,
81
+ paddingBottom: 0,
82
+ opacity: 0.5,
83
+ pointerEvents: "none"
84
+ })
85
+ }, React.createElement(LockIcon, {
86
+ style: {
87
+ width: 16,
88
+ height: 16,
89
+ color: "#333"
90
+ }
91
+ })));
92
+ }
93
+
94
+ return React.createElement("div", {
95
+ key: region.id,
96
+ style: _objectSpread({
97
+ position: "absolute"
98
+ }, coords, {
99
+ zIndex: 10 + (region.editingLabels ? 5 : 0),
100
+ width: 200
101
+ }),
102
+ onMouseDown: function onMouseDown(e) {
103
+ return e.preventDefault();
104
+ },
105
+ onMouseUp: function onMouseUp(e) {
106
+ return e.preventDefault();
107
+ },
108
+ onMouseEnter: function onMouseEnter(e) {
109
+ if (region.editingLabels) {
110
+ mouseEvents.onMouseUp(e);
111
+ e.button = 1;
112
+ mouseEvents.onMouseUp(e);
113
+ }
114
+ }
115
+ }, React.createElement("div", Object.assign({
116
+ style: _objectSpread({
117
+ position: "absolute",
118
+ zIndex: 20,
119
+ left: 0
120
+ }, displayOnTop ? {
121
+ bottom: 0
122
+ } : {
123
+ top: 0
124
+ })
125
+ }, !region.editingLabels ? copyWithout(mouseEvents, "onMouseDown", "onMouseUp") : {}), React.createElement(RegionLabel, {
126
+ allowedClasses: regionClsList,
127
+ allowedTags: regionTagList,
128
+ onOpen: onBeginRegionEdit,
129
+ onChange: onChangeRegion,
130
+ onClose: onCloseRegionEdit,
131
+ onDelete: onDeleteRegion,
132
+ onDeleteGroup: onDeleteGroup,
133
+ editing: region.editingLabels,
134
+ region: region,
135
+ regions: regions,
136
+ imageSrc: imageSrc,
137
+ onRegionClassAdded: onRegionClassAdded,
138
+ allowComments: allowComments,
139
+ hideNotEditingLabel: hideNotEditingLabel,
140
+ allowedGroups: allowedGroups
141
+ })));
142
+ });
143
+ };
144
+ export default RegionTags;
@@ -0,0 +1,52 @@
1
+ import React from "react";
2
+ import Dialog from "@mui/material/Dialog";
3
+ import DialogTitle from "@mui/material/DialogTitle";
4
+ import DialogContent from "@mui/material/DialogContent";
5
+ import DialogActions from "@mui/material/DialogActions";
6
+ import Button from "@mui/material/Button";
7
+ import Survey from "material-survey/components/Survey";
8
+ import { useSettings } from "../SettingsProvider";
9
+ export var SettingsDialog = function SettingsDialog(_ref) {
10
+ var open = _ref.open,
11
+ onClose = _ref.onClose;
12
+ var settings = useSettings();
13
+ return React.createElement(Dialog, {
14
+ open: open || false,
15
+ onClose: onClose
16
+ }, React.createElement(DialogTitle, null, "Settings"), React.createElement(DialogContent, {
17
+ style: {
18
+ minWidth: 400
19
+ }
20
+ }, React.createElement(Survey, {
21
+ variant: "flat",
22
+ noActions: true,
23
+ defaultAnswers: settings,
24
+ onQuestionChange: function onQuestionChange(q, a, answers) {
25
+ return settings.changeSetting(q, a);
26
+ },
27
+ form: {
28
+ questions: [{
29
+ type: "boolean",
30
+ title: "Show Crosshairs",
31
+ name: "showCrosshairs"
32
+ }, {
33
+ type: "boolean",
34
+ title: "Show Highlight Box",
35
+ name: "showHighlightBox"
36
+ }, {
37
+ type: "boolean",
38
+ title: "WASD Mode",
39
+ name: "wasdMode"
40
+ }, {
41
+ type: "dropdown",
42
+ title: "Video Playback Speed",
43
+ name: "videoPlaybackSpeed",
44
+ defaultValue: "1x",
45
+ choices: ["0.25x", "0.5x", "1x", "2x"]
46
+ }]
47
+ }
48
+ })), React.createElement(DialogActions, null, React.createElement(Button, {
49
+ onClick: onClose
50
+ }, "Close")));
51
+ };
52
+ export default SettingsDialog;
@@ -0,0 +1,60 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
3
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
+ import React, { createContext, useContext, useState } from "react";
5
+ var defaultSettings = {
6
+ showCrosshairs: false,
7
+ showHighlightBox: true,
8
+ wasdMode: true
9
+ };
10
+ var DEFAULT_GROUP_COLORS = ["#3853F1", "#F6E54C", "#39D33C", "#CF24CF", "#22E3ED", "#EF3029"];
11
+ export var SettingsContext = createContext(defaultSettings);
12
+
13
+ var pullSettingsFromLocalStorage = function pullSettingsFromLocalStorage() {
14
+ if (!window || !window.localStorage) return {};
15
+ var settings = {};
16
+
17
+ for (var i = 0; i < window.localStorage.length; i++) {
18
+ var key = window.localStorage.key(i);
19
+
20
+ if (key.startsWith("settings_")) {
21
+ try {
22
+ settings[key.replace("settings_", "")] = JSON.parse(window.localStorage.getItem(key));
23
+ } catch (e) {}
24
+ }
25
+ }
26
+
27
+ return settings;
28
+ };
29
+
30
+ export var useSettings = function useSettings() {
31
+ return useContext(SettingsContext);
32
+ };
33
+ export var SettingsProvider = function SettingsProvider(_ref) {
34
+ var children = _ref.children,
35
+ clsColors = _ref.clsColors,
36
+ _ref$groupColors = _ref.groupColors,
37
+ groupColors = _ref$groupColors === void 0 ? DEFAULT_GROUP_COLORS : _ref$groupColors;
38
+
39
+ var _useState = useState(_objectSpread({}, function () {
40
+ return pullSettingsFromLocalStorage();
41
+ }, {
42
+ clsColors: clsColors,
43
+ groupColors: groupColors
44
+ })),
45
+ _useState2 = _slicedToArray(_useState, 2),
46
+ state = _useState2[0],
47
+ changeState = _useState2[1];
48
+
49
+ var changeSetting = function changeSetting(setting, value) {
50
+ changeState(_objectSpread({}, state, _defineProperty({}, setting, value)));
51
+ window.localStorage.setItem("settings_".concat(setting), JSON.stringify(value));
52
+ };
53
+
54
+ return React.createElement(SettingsContext.Provider, {
55
+ value: _objectSpread({}, state, {
56
+ changeSetting: changeSetting
57
+ })
58
+ }, children);
59
+ };
60
+ export default SettingsProvider;
@@ -0,0 +1,46 @@
1
+ import React from "react";
2
+ import TextField from "@mui/material/TextField";
3
+ import { makeStyles } from "@mui/styles";
4
+ import { createTheme, ThemeProvider } from "@mui/material/styles";
5
+ var theme = createTheme();
6
+ var useStyles = makeStyles(function (theme) {
7
+ return {
8
+ shortcutKeyFieldWrapper: {
9
+ paddingTop: 8,
10
+ display: "inline-flex",
11
+ width: "100%"
12
+ },
13
+ shortcutKeyText: {
14
+ lineHeight: 0
15
+ },
16
+ shortcutTextfield: {
17
+ width: "100%",
18
+ boxSizing: "border-box",
19
+ textAlign: "center"
20
+ }
21
+ };
22
+ });
23
+
24
+ var ShortcutField = function ShortcutField(_ref) {
25
+ var actionId = _ref.actionId,
26
+ actionName = _ref.actionName,
27
+ keyName = _ref.keyName,
28
+ onChangeShortcut = _ref.onChangeShortcut;
29
+ var classes = useStyles();
30
+ return React.createElement(ThemeProvider, {
31
+ theme: theme
32
+ }, React.createElement("div", {
33
+ className: classes.shortcutKeyFieldWrapper
34
+ }, React.createElement(TextField, {
35
+ variant: "outlined",
36
+ label: actionName,
37
+ className: classes.shortcutTextfield,
38
+ value: keyName,
39
+ onKeyPress: function onKeyPress(e) {
40
+ onChangeShortcut(actionId, e.key);
41
+ e.stopPropagation();
42
+ }
43
+ })));
44
+ };
45
+
46
+ export default ShortcutField;