@searpent/react-image-annotate 2.0.5 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/Annotator/examplePhotos.js +6976 -0
  2. package/Annotator/index.js +268 -0
  3. package/Annotator/reducers/combine-reducers.js +14 -0
  4. package/Annotator/reducers/convert-expanding-line-to-polygon.js +73 -0
  5. package/{src/Annotator → Annotator}/reducers/fix-twisted.js +3 -5
  6. package/Annotator/reducers/general-reducer.js +1152 -0
  7. package/Annotator/reducers/get-active-image.js +27 -0
  8. package/Annotator/reducers/get-implied-video-regions.js +180 -0
  9. package/Annotator/reducers/history-handler.js +38 -0
  10. package/Annotator/reducers/image-reducer.js +20 -0
  11. package/Annotator/reducers/video-reducer.js +88 -0
  12. package/ClassSelectionMenu/index.js +135 -0
  13. package/Crosshairs/index.js +53 -0
  14. package/DebugSidebarBox/index.js +20 -0
  15. package/DemoSite/Editor.js +194 -0
  16. package/DemoSite/ErrorBoundaryDialog.js +64 -0
  17. package/DemoSite/index.js +40 -0
  18. package/{src/Editor → Editor}/annotation-plugin/annotation.css +0 -0
  19. package/Editor/annotation-plugin/annotation.js +613 -0
  20. package/Editor/index.js +57 -0
  21. package/{src/Editor → Editor}/tools.js +2 -3
  22. package/FullImageSegmentationAnnotator/index.js +7 -0
  23. package/GroupSelectorSidebarBox/index.js +63 -0
  24. package/HighlightBox/index.js +99 -0
  25. package/HistorySidebarBox/index.js +71 -0
  26. package/ImageCanvas/index.js +429 -0
  27. package/ImageCanvas/region-tools.js +165 -0
  28. package/{src/ImageCanvas → ImageCanvas}/styles.js +12 -8
  29. package/ImageCanvas/use-mouse.js +180 -0
  30. package/ImageCanvas/use-project-box.js +27 -0
  31. package/ImageCanvas/use-wasd-mode.js +62 -0
  32. package/ImageMask/index.js +133 -0
  33. package/ImageMask/load-image.js +25 -0
  34. package/ImageSelectorSidebarBox/index.js +60 -0
  35. package/KeyframeTimeline/get-time-string.js +27 -0
  36. package/KeyframeTimeline/index.js +233 -0
  37. package/KeyframesSelectorSidebarBox/index.js +93 -0
  38. package/LandingPage/index.js +159 -0
  39. package/MainLayout/icon-dictionary.js +104 -0
  40. package/MainLayout/index.js +469 -0
  41. package/{src/MainLayout → MainLayout}/styles.js +6 -7
  42. package/MainLayout/types.js +0 -0
  43. package/MainLayout/use-implied-video-regions.js +13 -0
  44. package/MetadataEditorSidebarBox/index.js +126 -0
  45. package/PageSelector/index.js +69 -0
  46. package/{src/PageSelector → PageSelector}/page-selector.css +18 -0
  47. package/PointDistances/index.js +73 -0
  48. package/PreventScrollToParents/index.js +51 -0
  49. package/RegionLabel/index.js +205 -0
  50. package/{src/RegionLabel → RegionLabel}/styles.js +12 -15
  51. package/RegionSelectAndTransformBoxes/index.js +167 -0
  52. package/RegionSelectorSidebarBox/index.js +248 -0
  53. package/{src/RegionSelectorSidebarBox → RegionSelectorSidebarBox}/styles.js +13 -14
  54. package/RegionShapes/index.js +294 -0
  55. package/RegionTags/index.js +142 -0
  56. package/SettingsDialog/index.js +52 -0
  57. package/SettingsProvider/index.js +58 -0
  58. package/Shortcuts/ShortcutField.js +46 -0
  59. package/Shortcuts/index.js +133 -0
  60. package/ShortcutsManager/index.js +155 -0
  61. package/Sidebar/index.js +69 -0
  62. package/SidebarBoxContainer/index.js +93 -0
  63. package/SmallToolButton/index.js +42 -0
  64. package/TagsSidebarBox/index.js +105 -0
  65. package/TaskDescriptionSidebarBox/index.js +58 -0
  66. package/Theme/index.js +30 -0
  67. package/VideoOrImageCanvasBackground/index.js +151 -0
  68. package/colors.js +14 -0
  69. package/hooks/use-colors.js +101 -0
  70. package/hooks/use-event-callback.js +10 -0
  71. package/hooks/use-exclude-pattern.js +24 -0
  72. package/hooks/use-load-image.js +26 -0
  73. package/hooks/use-window-size.js +46 -0
  74. package/{src/hooks → hooks}/xpattern.js +1 -1
  75. package/index.js +3 -0
  76. package/lib.js +3 -0
  77. package/package.json +1 -1
  78. package/stories.js +5 -0
  79. package/{src/utils → utils}/filter-only-unique.js +1 -1
  80. package/utils/get-from-local-storage.js +7 -0
  81. package/utils/get-hotkey-help-text.js +9 -0
  82. package/utils/get-landmarks-with-transform.js +40 -0
  83. package/utils/photosToImages.js +53 -0
  84. package/utils/regions-to-blocks.js +16 -0
  85. package/utils/set-in-local-storage.js +3 -0
  86. package/.babelrc +0 -6
  87. package/.env +0 -1
  88. package/.flowconfig +0 -2
  89. package/.github/workflows/release-on-master.yml +0 -32
  90. package/.github/workflows/test.yml +0 -16
  91. package/.prettierrc +0 -3
  92. package/.releaserc.js +0 -18
  93. package/.storybook/addons.js +0 -2
  94. package/.storybook/config.js +0 -16
  95. package/LICENSE +0 -21
  96. package/public/favicon.ico +0 -0
  97. package/public/index.html +0 -38
  98. package/src/Annotator/bike-pic.png +0 -0
  99. package/src/Annotator/bike-pic2.png +0 -0
  100. package/src/Annotator/dab-keyframes.story.json +0 -1
  101. package/src/Annotator/examplePhotos.js +0 -7601
  102. package/src/Annotator/index.js +0 -291
  103. package/src/Annotator/index.story.js +0 -807
  104. package/src/Annotator/poses.story.js +0 -150
  105. package/src/Annotator/reducers/combine-reducers.js +0 -7
  106. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -53
  107. package/src/Annotator/reducers/general-reducer.js +0 -996
  108. package/src/Annotator/reducers/get-active-image.js +0 -21
  109. package/src/Annotator/reducers/get-implied-video-regions.js +0 -115
  110. package/src/Annotator/reducers/history-handler.js +0 -60
  111. package/src/Annotator/reducers/image-reducer.js +0 -23
  112. package/src/Annotator/reducers/video-reducer.js +0 -85
  113. package/src/Annotator/video.story.js +0 -51
  114. package/src/ClassSelectionMenu/index.js +0 -108
  115. package/src/Crosshairs/index.js +0 -64
  116. package/src/DebugSidebarBox/index.js +0 -36
  117. package/src/DemoSite/Editor.js +0 -235
  118. package/src/DemoSite/ErrorBoundaryDialog.js +0 -34
  119. package/src/DemoSite/index.js +0 -41
  120. package/src/DemoSite/index.story.js +0 -10
  121. package/src/DemoSite/simple-segmentation-example.json +0 -572
  122. package/src/Editor/annotation-plugin/annotation.js +0 -515
  123. package/src/Editor/index.js +0 -24
  124. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  125. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  126. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  127. package/src/FullImageSegmentationAnnotator/index.js +0 -7
  128. package/src/FullImageSegmentationAnnotator/index.story.js +0 -177
  129. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  130. package/src/GroupSelectorSidebarBox/index.js +0 -48
  131. package/src/HighlightBox/index.js +0 -143
  132. package/src/HistorySidebarBox/index.js +0 -78
  133. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  134. package/src/ImageCanvas/index.js +0 -494
  135. package/src/ImageCanvas/index.story.js +0 -314
  136. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  137. package/src/ImageCanvas/region-tools.js +0 -171
  138. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  139. package/src/ImageCanvas/use-mouse.js +0 -168
  140. package/src/ImageCanvas/use-project-box.js +0 -23
  141. package/src/ImageCanvas/use-wasd-mode.js +0 -50
  142. package/src/ImageMask/index.js +0 -127
  143. package/src/ImageMask/load-image.js +0 -32
  144. package/src/ImageSelectorSidebarBox/index.js +0 -54
  145. package/src/KeyframeTimeline/get-time-string.js +0 -25
  146. package/src/KeyframeTimeline/index.js +0 -223
  147. package/src/KeyframesSelectorSidebarBox/index.js +0 -93
  148. package/src/LandingPage/content.md +0 -57
  149. package/src/LandingPage/github-markdown.css +0 -964
  150. package/src/LandingPage/index.js +0 -147
  151. package/src/MainLayout/icon-dictionary.js +0 -79
  152. package/src/MainLayout/index.js +0 -510
  153. package/src/MainLayout/index.story.js +0 -240
  154. package/src/MainLayout/types.js +0 -164
  155. package/src/MainLayout/use-implied-video-regions.js +0 -17
  156. package/src/MetadataEditorSidebarBox/index.js +0 -98
  157. package/src/PageSelector/index.js +0 -76
  158. package/src/PointDistances/index.js +0 -90
  159. package/src/PreventScrollToParents/index.js +0 -48
  160. package/src/PreventScrollToParents/index.story.js +0 -23
  161. package/src/RegionLabel/index.js +0 -222
  162. package/src/RegionSelectAndTransformBoxes/index.js +0 -234
  163. package/src/RegionSelectorSidebarBox/index.js +0 -216
  164. package/src/RegionShapes/index.js +0 -254
  165. package/src/RegionTags/index.js +0 -134
  166. package/src/SettingsDialog/index.js +0 -58
  167. package/src/SettingsProvider/index.js +0 -48
  168. package/src/Shortcuts/ShortcutField.js +0 -44
  169. package/src/Shortcuts/index.js +0 -129
  170. package/src/ShortcutsManager/index.js +0 -162
  171. package/src/Sidebar/index.js +0 -117
  172. package/src/SidebarBoxContainer/index.js +0 -93
  173. package/src/SmallToolButton/index.js +0 -57
  174. package/src/TagsSidebarBox/index.js +0 -93
  175. package/src/TaskDescriptionSidebarBox/index.js +0 -43
  176. package/src/Theme/index.js +0 -36
  177. package/src/VideoOrImageCanvasBackground/index.js +0 -170
  178. package/src/colors.js +0 -32
  179. package/src/hooks/use-colors.js +0 -74
  180. package/src/hooks/use-event-callback.js +0 -11
  181. package/src/hooks/use-exclude-pattern.js +0 -27
  182. package/src/hooks/use-load-image.js +0 -21
  183. package/src/hooks/use-window-size.js +0 -46
  184. package/src/hooks/xpattern.png +0 -0
  185. package/src/index.js +0 -18
  186. package/src/lib.js +0 -7
  187. package/src/screenshot.png +0 -0
  188. package/src/site.css +0 -5
  189. package/src/stories.js +0 -2
  190. package/src/utils/get-from-local-storage.js +0 -7
  191. package/src/utils/get-hotkey-help-text.js +0 -11
  192. package/src/utils/get-landmarks-with-transform.js +0 -23
  193. package/src/utils/photosToImages.js +0 -40
  194. package/src/utils/regions-to-blocks.js +0 -14
  195. package/src/utils/set-in-local-storage.js +0 -6
@@ -0,0 +1,248 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import React, { Fragment, useState, memo } from "react";
4
+ import SidebarBoxContainer from "../SidebarBoxContainer";
5
+ import { makeStyles } from "@mui/styles";
6
+ import { createTheme, ThemeProvider } from "@mui/material/styles";
7
+ import { styled } from "@mui/material/styles";
8
+ import { grey } from "@mui/material/colors";
9
+ import RegionIcon from "@mui/icons-material/PictureInPicture";
10
+ import Grid from "@mui/material/Grid";
11
+ import ReorderIcon from "@mui/icons-material/SwapVert";
12
+ import PieChartIcon from "@mui/icons-material/PieChart";
13
+ import TrashIcon from "@mui/icons-material/Delete";
14
+ import LockIcon from "@mui/icons-material/Lock";
15
+ import UnlockIcon from "@mui/icons-material/LockOpen";
16
+ import VisibleIcon from "@mui/icons-material/Visibility";
17
+ import VisibleOffIcon from "@mui/icons-material/VisibilityOff";
18
+ import styles from "./styles";
19
+ import classnames from "classnames";
20
+ import isEqual from "lodash/isEqual";
21
+ var theme = createTheme();
22
+ var useStyles = makeStyles(function (theme) {
23
+ return styles;
24
+ });
25
+ var HeaderSep = styled("div")(function (_ref) {
26
+ var theme = _ref.theme;
27
+ return {
28
+ borderTop: "1px solid ".concat(grey[200]),
29
+ marginTop: 2,
30
+ marginBottom: 2
31
+ };
32
+ });
33
+
34
+ var Chip = function Chip(_ref2) {
35
+ var color = _ref2.color,
36
+ text = _ref2.text;
37
+ var classes = useStyles();
38
+ return React.createElement("span", {
39
+ className: classes.chip
40
+ }, React.createElement("div", {
41
+ className: "color",
42
+ style: {
43
+ backgroundColor: color
44
+ }
45
+ }), React.createElement("div", {
46
+ className: "text"
47
+ }, text));
48
+ };
49
+
50
+ var RowLayout = function RowLayout(_ref3) {
51
+ var header = _ref3.header,
52
+ highlighted = _ref3.highlighted,
53
+ order = _ref3.order,
54
+ classification = _ref3.classification,
55
+ area = _ref3.area,
56
+ tags = _ref3.tags,
57
+ trash = _ref3.trash,
58
+ lock = _ref3.lock,
59
+ visible = _ref3.visible,
60
+ onClick = _ref3.onClick;
61
+ var classes = useStyles();
62
+
63
+ var _useState = useState(false),
64
+ _useState2 = _slicedToArray(_useState, 2),
65
+ mouseOver = _useState2[0],
66
+ changeMouseOver = _useState2[1];
67
+
68
+ return React.createElement("div", {
69
+ onClick: onClick,
70
+ onMouseEnter: function onMouseEnter() {
71
+ return changeMouseOver(true);
72
+ },
73
+ onMouseLeave: function onMouseLeave() {
74
+ return changeMouseOver(false);
75
+ },
76
+ className: classnames(classes.row, {
77
+ header: header,
78
+ highlighted: highlighted
79
+ })
80
+ }, React.createElement(Grid, {
81
+ container: true,
82
+ alignItems: "center"
83
+ }, React.createElement(Grid, {
84
+ item: true,
85
+ xs: 2
86
+ }, React.createElement("div", {
87
+ style: {
88
+ textAlign: "right",
89
+ paddingRight: 10
90
+ }
91
+ }, order)), React.createElement(Grid, {
92
+ item: true,
93
+ xs: 5
94
+ }, classification), React.createElement(Grid, {
95
+ item: true,
96
+ xs: 2
97
+ }, React.createElement("div", {
98
+ style: {
99
+ textAlign: "right",
100
+ paddingRight: 6
101
+ }
102
+ }, area)), React.createElement(Grid, {
103
+ item: true,
104
+ xs: 1
105
+ }, trash), React.createElement(Grid, {
106
+ item: true,
107
+ xs: 1
108
+ }, lock), React.createElement(Grid, {
109
+ item: true,
110
+ xs: 1
111
+ }, visible)));
112
+ };
113
+
114
+ var RowHeader = function RowHeader() {
115
+ return React.createElement(RowLayout, {
116
+ header: true,
117
+ highlighted: false,
118
+ order: React.createElement(ReorderIcon, {
119
+ className: "icon"
120
+ }),
121
+ classification: React.createElement("div", {
122
+ style: {
123
+ paddingLeft: 10
124
+ }
125
+ }, "Class"),
126
+ area: React.createElement(PieChartIcon, {
127
+ className: "icon"
128
+ }),
129
+ trash: React.createElement(TrashIcon, {
130
+ className: "icon"
131
+ }),
132
+ lock: React.createElement(LockIcon, {
133
+ className: "icon"
134
+ }),
135
+ visible: React.createElement(VisibleIcon, {
136
+ className: "icon"
137
+ })
138
+ });
139
+ };
140
+
141
+ var MemoRowHeader = memo(RowHeader);
142
+
143
+ var Row = function Row(_ref4) {
144
+ var r = _ref4.region,
145
+ highlighted = _ref4.highlighted,
146
+ onSelectRegion = _ref4.onSelectRegion,
147
+ onDeleteRegion = _ref4.onDeleteRegion,
148
+ onChangeRegion = _ref4.onChangeRegion,
149
+ visible = _ref4.visible,
150
+ locked = _ref4.locked,
151
+ color = _ref4.color,
152
+ cls = _ref4.cls,
153
+ index = _ref4.index;
154
+ return React.createElement(RowLayout, {
155
+ header: false,
156
+ highlighted: highlighted,
157
+ onClick: function onClick() {
158
+ return onSelectRegion(r);
159
+ },
160
+ order: "#".concat(index + 1),
161
+ classification: React.createElement(Chip, {
162
+ text: cls || "",
163
+ color: color || "#ddd"
164
+ }),
165
+ area: "",
166
+ trash: React.createElement(TrashIcon, {
167
+ onClick: function onClick() {
168
+ return onDeleteRegion(r);
169
+ },
170
+ className: "icon2"
171
+ }),
172
+ lock: r.locked ? React.createElement(LockIcon, {
173
+ onClick: function onClick() {
174
+ return onChangeRegion(_objectSpread({}, r, {
175
+ locked: false
176
+ }));
177
+ },
178
+ className: "icon2"
179
+ }) : React.createElement(UnlockIcon, {
180
+ onClick: function onClick() {
181
+ return onChangeRegion(_objectSpread({}, r, {
182
+ locked: true
183
+ }));
184
+ },
185
+ className: "icon2"
186
+ }),
187
+ visible: r.visible || r.visible === undefined ? React.createElement(VisibleIcon, {
188
+ onClick: function onClick() {
189
+ return onChangeRegion(_objectSpread({}, r, {
190
+ visible: false
191
+ }));
192
+ },
193
+ className: "icon2"
194
+ }) : React.createElement(VisibleOffIcon, {
195
+ onClick: function onClick() {
196
+ return onChangeRegion(_objectSpread({}, r, {
197
+ visible: true
198
+ }));
199
+ },
200
+ className: "icon2"
201
+ })
202
+ });
203
+ };
204
+
205
+ var MemoRow = memo(Row, function (prevProps, nextProps) {
206
+ return prevProps.highlighted === nextProps.highlighted && prevProps.visible === nextProps.visible && prevProps.locked === nextProps.locked && prevProps.id === nextProps.id && prevProps.index === nextProps.index && prevProps.cls === nextProps.cls && prevProps.color === nextProps.color;
207
+ });
208
+ var emptyArr = [];
209
+ export var RegionSelectorSidebarBox = function RegionSelectorSidebarBox(_ref5) {
210
+ var _ref5$regions = _ref5.regions,
211
+ regions = _ref5$regions === void 0 ? emptyArr : _ref5$regions,
212
+ onDeleteRegion = _ref5.onDeleteRegion,
213
+ onChangeRegion = _ref5.onChangeRegion,
214
+ onSelectRegion = _ref5.onSelectRegion;
215
+ var classes = useStyles();
216
+ return React.createElement(ThemeProvider, {
217
+ theme: theme
218
+ }, React.createElement(SidebarBoxContainer, {
219
+ title: "Regions",
220
+ subTitle: "",
221
+ icon: React.createElement(RegionIcon, {
222
+ style: {
223
+ color: grey[700]
224
+ }
225
+ }),
226
+ expandedByDefault: true
227
+ }, React.createElement("div", {
228
+ className: classes.container
229
+ }, React.createElement(MemoRowHeader, null), React.createElement(HeaderSep, null), regions.map(function (r, i) {
230
+ return React.createElement(MemoRow, Object.assign({
231
+ key: r.id
232
+ }, r, {
233
+ region: r,
234
+ index: i,
235
+ onSelectRegion: onSelectRegion,
236
+ onDeleteRegion: onDeleteRegion,
237
+ onChangeRegion: onChangeRegion
238
+ }));
239
+ }))));
240
+ };
241
+
242
+ var mapUsedRegionProperties = function mapUsedRegionProperties(r) {
243
+ return [r.id, r.color, r.locked, r.visible, r.highlighted];
244
+ };
245
+
246
+ export default memo(RegionSelectorSidebarBox, function (prevProps, nextProps) {
247
+ return isEqual((prevProps.regions || emptyArr).map(mapUsedRegionProperties), (nextProps.regions || emptyArr).map(mapUsedRegionProperties));
248
+ });
@@ -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(groupColor(region.groupId), 0.85) : 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.regionId,
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;