@searpent/react-image-annotate 2.0.2 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/.babelrc +6 -0
  2. package/.env +1 -0
  3. package/.flowconfig +2 -0
  4. package/.github/workflows/release-on-master.yml +32 -0
  5. package/.github/workflows/test.yml +16 -0
  6. package/.prettierrc +3 -0
  7. package/.releaserc.js +18 -0
  8. package/.storybook/addons.js +2 -0
  9. package/.storybook/config.js +16 -0
  10. package/LICENSE +21 -0
  11. package/package.json +4 -1
  12. package/public/favicon.ico +0 -0
  13. package/public/index.html +38 -0
  14. package/src/Annotator/bike-pic.png +0 -0
  15. package/src/Annotator/bike-pic2.png +0 -0
  16. package/src/Annotator/dab-keyframes.story.json +1 -0
  17. package/src/Annotator/examplePhotos.js +7601 -0
  18. package/src/Annotator/index.js +291 -0
  19. package/src/Annotator/index.story.js +807 -0
  20. package/src/Annotator/poses.story.js +150 -0
  21. package/src/Annotator/reducers/combine-reducers.js +7 -0
  22. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +53 -0
  23. package/{Annotator → src/Annotator}/reducers/fix-twisted.js +5 -3
  24. package/src/Annotator/reducers/general-reducer.js +996 -0
  25. package/src/Annotator/reducers/get-active-image.js +21 -0
  26. package/src/Annotator/reducers/get-implied-video-regions.js +115 -0
  27. package/src/Annotator/reducers/history-handler.js +60 -0
  28. package/src/Annotator/reducers/image-reducer.js +23 -0
  29. package/src/Annotator/reducers/video-reducer.js +85 -0
  30. package/src/Annotator/video.story.js +51 -0
  31. package/src/ClassSelectionMenu/index.js +108 -0
  32. package/src/Crosshairs/index.js +64 -0
  33. package/src/DebugSidebarBox/index.js +36 -0
  34. package/src/DemoSite/Editor.js +235 -0
  35. package/src/DemoSite/ErrorBoundaryDialog.js +34 -0
  36. package/src/DemoSite/index.js +41 -0
  37. package/src/DemoSite/index.story.js +10 -0
  38. package/src/DemoSite/simple-segmentation-example.json +572 -0
  39. package/src/Editor/annotation-plugin/annotation.css +46 -0
  40. package/src/Editor/annotation-plugin/annotation.js +515 -0
  41. package/src/Editor/index.js +24 -0
  42. package/src/Editor/tools.js +6 -0
  43. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  44. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  45. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  46. package/src/FullImageSegmentationAnnotator/index.js +7 -0
  47. package/src/FullImageSegmentationAnnotator/index.story.js +177 -0
  48. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  49. package/src/GroupSelectorSidebarBox/index.js +48 -0
  50. package/src/HighlightBox/index.js +143 -0
  51. package/src/HistorySidebarBox/index.js +78 -0
  52. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  53. package/src/ImageCanvas/index.js +494 -0
  54. package/src/ImageCanvas/index.story.js +314 -0
  55. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  56. package/src/ImageCanvas/region-tools.js +171 -0
  57. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  58. package/{ImageCanvas → src/ImageCanvas}/styles.js +8 -12
  59. package/src/ImageCanvas/use-mouse.js +168 -0
  60. package/src/ImageCanvas/use-project-box.js +23 -0
  61. package/src/ImageCanvas/use-wasd-mode.js +50 -0
  62. package/src/ImageMask/index.js +127 -0
  63. package/src/ImageMask/load-image.js +32 -0
  64. package/src/ImageSelectorSidebarBox/index.js +54 -0
  65. package/src/KeyframeTimeline/get-time-string.js +25 -0
  66. package/src/KeyframeTimeline/index.js +223 -0
  67. package/src/KeyframesSelectorSidebarBox/index.js +93 -0
  68. package/src/LandingPage/content.md +57 -0
  69. package/src/LandingPage/github-markdown.css +964 -0
  70. package/src/LandingPage/index.js +147 -0
  71. package/src/MainLayout/icon-dictionary.js +79 -0
  72. package/src/MainLayout/index.js +510 -0
  73. package/src/MainLayout/index.story.js +240 -0
  74. package/{MainLayout → src/MainLayout}/styles.js +7 -6
  75. package/src/MainLayout/types.js +164 -0
  76. package/src/MainLayout/use-implied-video-regions.js +17 -0
  77. package/src/MetadataEditorSidebarBox/index.js +98 -0
  78. package/src/PageSelector/index.js +76 -0
  79. package/src/PageSelector/page-selector.css +69 -0
  80. package/src/PointDistances/index.js +90 -0
  81. package/src/PreventScrollToParents/index.js +48 -0
  82. package/src/PreventScrollToParents/index.story.js +23 -0
  83. package/src/RegionLabel/index.js +222 -0
  84. package/{RegionLabel → src/RegionLabel}/styles.js +15 -12
  85. package/src/RegionSelectAndTransformBoxes/index.js +234 -0
  86. package/src/RegionSelectorSidebarBox/index.js +216 -0
  87. package/{RegionSelectorSidebarBox → src/RegionSelectorSidebarBox}/styles.js +14 -13
  88. package/src/RegionShapes/index.js +254 -0
  89. package/src/RegionTags/index.js +134 -0
  90. package/src/SettingsDialog/index.js +58 -0
  91. package/src/SettingsProvider/index.js +48 -0
  92. package/src/Shortcuts/ShortcutField.js +44 -0
  93. package/src/Shortcuts/index.js +129 -0
  94. package/src/ShortcutsManager/index.js +162 -0
  95. package/src/Sidebar/index.js +117 -0
  96. package/src/SidebarBoxContainer/index.js +93 -0
  97. package/src/SmallToolButton/index.js +57 -0
  98. package/src/TagsSidebarBox/index.js +93 -0
  99. package/src/TaskDescriptionSidebarBox/index.js +43 -0
  100. package/src/Theme/index.js +36 -0
  101. package/src/VideoOrImageCanvasBackground/index.js +170 -0
  102. package/src/colors.js +32 -0
  103. package/src/hooks/use-colors.js +74 -0
  104. package/src/hooks/use-event-callback.js +11 -0
  105. package/src/hooks/use-exclude-pattern.js +27 -0
  106. package/src/hooks/use-load-image.js +21 -0
  107. package/src/hooks/use-window-size.js +46 -0
  108. package/{hooks → src/hooks}/xpattern.js +1 -1
  109. package/src/hooks/xpattern.png +0 -0
  110. package/src/index.js +18 -0
  111. package/src/lib.js +7 -0
  112. package/src/screenshot.png +0 -0
  113. package/src/site.css +5 -0
  114. package/src/stories.js +2 -0
  115. package/src/utils/filter-only-unique.js +5 -0
  116. package/src/utils/get-from-local-storage.js +7 -0
  117. package/src/utils/get-hotkey-help-text.js +11 -0
  118. package/src/utils/get-landmarks-with-transform.js +23 -0
  119. package/src/utils/photosToImages.js +40 -0
  120. package/src/utils/regions-to-blocks.js +14 -0
  121. package/src/utils/set-in-local-storage.js +6 -0
  122. package/Annotator/index.js +0 -161
  123. package/Annotator/reducers/combine-reducers.js +0 -14
  124. package/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -73
  125. package/Annotator/reducers/general-reducer.js +0 -1058
  126. package/Annotator/reducers/get-active-image.js +0 -27
  127. package/Annotator/reducers/get-implied-video-regions.js +0 -180
  128. package/Annotator/reducers/history-handler.js +0 -38
  129. package/Annotator/reducers/image-reducer.js +0 -20
  130. package/Annotator/reducers/video-reducer.js +0 -88
  131. package/ClassSelectionMenu/index.js +0 -135
  132. package/Crosshairs/index.js +0 -53
  133. package/DebugSidebarBox/index.js +0 -20
  134. package/DemoSite/Editor.js +0 -194
  135. package/DemoSite/ErrorBoundaryDialog.js +0 -64
  136. package/DemoSite/index.js +0 -40
  137. package/FullImageSegmentationAnnotator/index.js +0 -7
  138. package/HighlightBox/index.js +0 -99
  139. package/HistorySidebarBox/index.js +0 -71
  140. package/ImageCanvas/index.js +0 -424
  141. package/ImageCanvas/region-tools.js +0 -165
  142. package/ImageCanvas/use-mouse.js +0 -180
  143. package/ImageCanvas/use-project-box.js +0 -27
  144. package/ImageCanvas/use-wasd-mode.js +0 -62
  145. package/ImageMask/index.js +0 -133
  146. package/ImageMask/load-image.js +0 -25
  147. package/ImageSelectorSidebarBox/index.js +0 -60
  148. package/KeyframeTimeline/get-time-string.js +0 -27
  149. package/KeyframeTimeline/index.js +0 -233
  150. package/KeyframesSelectorSidebarBox/index.js +0 -93
  151. package/LandingPage/index.js +0 -159
  152. package/MainLayout/icon-dictionary.js +0 -104
  153. package/MainLayout/index.js +0 -352
  154. package/MainLayout/types.js +0 -0
  155. package/MainLayout/use-implied-video-regions.js +0 -13
  156. package/PointDistances/index.js +0 -73
  157. package/PreventScrollToParents/index.js +0 -51
  158. package/RegionLabel/index.js +0 -191
  159. package/RegionSelectAndTransformBoxes/index.js +0 -167
  160. package/RegionSelectorSidebarBox/index.js +0 -248
  161. package/RegionShapes/index.js +0 -274
  162. package/RegionTags/index.js +0 -138
  163. package/SettingsDialog/index.js +0 -52
  164. package/SettingsProvider/index.js +0 -53
  165. package/Shortcuts/ShortcutField.js +0 -46
  166. package/Shortcuts/index.js +0 -133
  167. package/ShortcutsManager/index.js +0 -155
  168. package/Sidebar/index.js +0 -69
  169. package/SidebarBoxContainer/index.js +0 -93
  170. package/SmallToolButton/index.js +0 -42
  171. package/TagsSidebarBox/index.js +0 -105
  172. package/TaskDescriptionSidebarBox/index.js +0 -58
  173. package/Theme/index.js +0 -30
  174. package/VideoOrImageCanvasBackground/index.js +0 -151
  175. package/colors.js +0 -14
  176. package/hooks/use-event-callback.js +0 -10
  177. package/hooks/use-exclude-pattern.js +0 -24
  178. package/hooks/use-load-image.js +0 -26
  179. package/hooks/use-window-size.js +0 -46
  180. package/index.js +0 -3
  181. package/lib.js +0 -3
  182. package/stories.js +0 -5
  183. package/utils/get-from-local-storage.js +0 -7
  184. package/utils/get-hotkey-help-text.js +0 -9
  185. package/utils/get-landmarks-with-transform.js +0 -40
  186. package/utils/set-in-local-storage.js +0 -3
@@ -1,167 +0,0 @@
1
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import React, { Fragment, memo } from "react";
3
- import HighlightBox from "../HighlightBox";
4
- import { styled } from "@mui/material/styles";
5
- import { createTheme, ThemeProvider } from "@mui/material/styles";
6
- import PreventScrollToParents from "../PreventScrollToParents";
7
- import Tooltip from "@mui/material/Tooltip";
8
- var theme = createTheme();
9
- var TransformGrabber = styled("div")(function (_ref) {
10
- var theme = _ref.theme;
11
- return {
12
- width: 8,
13
- height: 8,
14
- zIndex: 2,
15
- border: "2px solid #FFF",
16
- position: "absolute"
17
- };
18
- });
19
- var boxCursorMap = [["nw-resize", "n-resize", "ne-resize"], ["w-resize", "grab", "e-resize"], ["sw-resize", "s-resize", "se-resize"]];
20
-
21
- var arePropsEqual = function arePropsEqual(prev, next) {
22
- return prev.region === next.region && prev.dragWithPrimary === next.dragWithPrimary && prev.createWithPrimary === next.createWithPrimary && prev.zoomWithPrimary === next.zoomWithPrimary && prev.mat === next.mat;
23
- };
24
-
25
- export var RegionSelectAndTransformBox = memo(function (_ref2) {
26
- var r = _ref2.region,
27
- mouseEvents = _ref2.mouseEvents,
28
- projectRegionBox = _ref2.projectRegionBox,
29
- dragWithPrimary = _ref2.dragWithPrimary,
30
- createWithPrimary = _ref2.createWithPrimary,
31
- zoomWithPrimary = _ref2.zoomWithPrimary,
32
- onBeginMovePoint = _ref2.onBeginMovePoint,
33
- onSelectRegion = _ref2.onSelectRegion,
34
- layoutParams = _ref2.layoutParams,
35
- _ref2$fullImageSegmen = _ref2.fullImageSegmentationMode,
36
- fullImageSegmentationMode = _ref2$fullImageSegmen === void 0 ? false : _ref2$fullImageSegmen,
37
- mat = _ref2.mat,
38
- onBeginBoxTransform = _ref2.onBeginBoxTransform,
39
- onBeginMovePolygonPoint = _ref2.onBeginMovePolygonPoint,
40
- onBeginMoveKeypoint = _ref2.onBeginMoveKeypoint,
41
- onAddPolygonPoint = _ref2.onAddPolygonPoint,
42
- showHighlightBox = _ref2.showHighlightBox;
43
- var pbox = projectRegionBox(r);
44
- var _layoutParams$current = layoutParams.current,
45
- iw = _layoutParams$current.iw,
46
- ih = _layoutParams$current.ih;
47
- return React.createElement(ThemeProvider, {
48
- theme: theme
49
- }, React.createElement(Fragment, null, React.createElement(PreventScrollToParents, null, showHighlightBox && r.type !== "polygon" && React.createElement(HighlightBox, {
50
- region: r,
51
- mouseEvents: mouseEvents,
52
- dragWithPrimary: dragWithPrimary,
53
- createWithPrimary: createWithPrimary,
54
- zoomWithPrimary: zoomWithPrimary,
55
- onBeginMovePoint: onBeginMovePoint,
56
- onSelectRegion: onSelectRegion,
57
- pbox: pbox
58
- }), r.type === "box" && !dragWithPrimary && !zoomWithPrimary && !r.locked && r.highlighted && mat.a < 1.2 && [[0, 0], [0.5, 0], [1, 0], [1, 0.5], [1, 1], [0.5, 1], [0, 1], [0, 0.5], [0.5, 0.5]].map(function (_ref3, i) {
59
- var _ref4 = _slicedToArray(_ref3, 2),
60
- px = _ref4[0],
61
- py = _ref4[1];
62
-
63
- return React.createElement(TransformGrabber, Object.assign({
64
- key: i
65
- }, mouseEvents, {
66
- onMouseDown: function onMouseDown(e) {
67
- if (e.button === 0) return onBeginBoxTransform(r, [px * 2 - 1, py * 2 - 1]);
68
- mouseEvents.onMouseDown(e);
69
- },
70
- style: {
71
- left: pbox.x - 4 - 2 + pbox.w * px,
72
- top: pbox.y - 4 - 2 + pbox.h * py,
73
- cursor: boxCursorMap[py * 2][px * 2],
74
- borderRadius: px === 0.5 && py === 0.5 ? 4 : undefined
75
- }
76
- }));
77
- }), r.type === "polygon" && !dragWithPrimary && !zoomWithPrimary && !r.locked && r.highlighted && r.points.map(function (_ref5, i) {
78
- var _ref6 = _slicedToArray(_ref5, 2),
79
- px = _ref6[0],
80
- py = _ref6[1];
81
-
82
- var proj = mat.clone().inverse().applyToPoint(px * iw, py * ih);
83
- return React.createElement(TransformGrabber, Object.assign({
84
- key: i
85
- }, mouseEvents, {
86
- onMouseDown: function onMouseDown(e) {
87
- if (e.button === 0 && (!r.open || i === 0)) return onBeginMovePolygonPoint(r, i);
88
- mouseEvents.onMouseDown(e);
89
- },
90
- style: {
91
- cursor: !r.open ? "move" : i === 0 ? "pointer" : undefined,
92
- zIndex: 10,
93
- pointerEvents: r.open && i === r.points.length - 1 ? "none" : undefined,
94
- left: proj.x - 4,
95
- top: proj.y - 4
96
- }
97
- }));
98
- }), r.type === "polygon" && r.highlighted && !dragWithPrimary && !zoomWithPrimary && !r.locked && !r.open && r.points.length > 1 && r.points.map(function (p1, i) {
99
- return [p1, r.points[(i + 1) % r.points.length]];
100
- }).map(function (_ref7) {
101
- var _ref8 = _slicedToArray(_ref7, 2),
102
- p1 = _ref8[0],
103
- p2 = _ref8[1];
104
-
105
- return [(p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2];
106
- }).map(function (pa, i) {
107
- var proj = mat.clone().inverse().applyToPoint(pa[0] * iw, pa[1] * ih);
108
- return React.createElement(TransformGrabber, Object.assign({
109
- key: i
110
- }, mouseEvents, {
111
- onMouseDown: function onMouseDown(e) {
112
- if (e.button === 0) return onAddPolygonPoint(r, pa, i + 1);
113
- mouseEvents.onMouseDown(e);
114
- },
115
- style: {
116
- cursor: "copy",
117
- zIndex: 10,
118
- left: proj.x - 4,
119
- top: proj.y - 4,
120
- border: "2px dotted #fff",
121
- opacity: 0.5
122
- }
123
- }));
124
- }), r.type === "keypoints" && !dragWithPrimary && !zoomWithPrimary && !r.locked && r.highlighted && Object.entries(r.points).map(function (_ref9, i) {
125
- var _ref10 = _slicedToArray(_ref9, 2),
126
- keypointId = _ref10[0],
127
- _ref10$ = _ref10[1],
128
- px = _ref10$.x,
129
- py = _ref10$.y;
130
-
131
- var proj = mat.clone().inverse().applyToPoint(px * iw, py * ih);
132
- return React.createElement(Tooltip, {
133
- title: keypointId,
134
- key: i
135
- }, React.createElement(TransformGrabber, Object.assign({
136
- key: i
137
- }, mouseEvents, {
138
- onMouseDown: function onMouseDown(e) {
139
- if (e.button === 0 && (!r.open || i === 0)) return onBeginMoveKeypoint(r, keypointId);
140
- mouseEvents.onMouseDown(e);
141
- },
142
- style: {
143
- cursor: !r.open ? "move" : i === 0 ? "pointer" : undefined,
144
- zIndex: 10,
145
- pointerEvents: r.open && i === r.points.length - 1 ? "none" : undefined,
146
- left: proj.x - 4,
147
- top: proj.y - 4
148
- }
149
- })));
150
- }))));
151
- }, arePropsEqual);
152
- export var RegionSelectAndTransformBoxes = memo(function (props) {
153
- return props.regions.filter(function (r) {
154
- return r.visible || r.visible === undefined;
155
- }).filter(function (r) {
156
- return !r.locked;
157
- }).map(function (r, i) {
158
- return React.createElement(RegionSelectAndTransformBox, Object.assign({
159
- key: r.id
160
- }, props, {
161
- region: r
162
- }));
163
- });
164
- }, function (n, p) {
165
- return n.regions === p.regions && n.mat === p.mat;
166
- });
167
- export default RegionSelectAndTransformBoxes;
@@ -1,248 +0,0 @@
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,274 +0,0 @@
1
- import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import React, { memo } from "react";
3
- import colorAlpha from "color-alpha";
4
-
5
- function clamp(num, min, max) {
6
- return num <= min ? min : num >= max ? max : num;
7
- }
8
-
9
- var RegionComponents = {
10
- point: memo(function (_ref) {
11
- var region = _ref.region,
12
- iw = _ref.iw,
13
- ih = _ref.ih;
14
- return React.createElement("g", {
15
- transform: "translate(".concat(region.x * iw, " ").concat(region.y * ih, ")")
16
- }, React.createElement("path", {
17
- d: "M0 8L8 0L0 -8L-8 0Z",
18
- strokeWidth: 2,
19
- stroke: region.color,
20
- fill: "transparent"
21
- }));
22
- }),
23
- line: memo(function (_ref2) {
24
- var region = _ref2.region,
25
- iw = _ref2.iw,
26
- ih = _ref2.ih;
27
- return React.createElement("g", {
28
- transform: "translate(".concat(region.x1 * iw, " ").concat(region.y1 * ih, ")")
29
- }, React.createElement("line", {
30
- strokeWidth: 2,
31
- x1: 0,
32
- y1: 0,
33
- x2: (region.x2 - region.x1) * iw,
34
- y2: (region.y2 - region.y1) * ih,
35
- stroke: colorAlpha(region.color, 0.75),
36
- fill: colorAlpha(region.color, 0.25)
37
- }));
38
- }),
39
- box: memo(function (_ref3) {
40
- var region = _ref3.region,
41
- iw = _ref3.iw,
42
- ih = _ref3.ih;
43
- return React.createElement("g", {
44
- transform: "translate(".concat(region.x * iw, " ").concat(region.y * ih, ")")
45
- }, React.createElement("rect", {
46
- strokeWidth: 2,
47
- x: 0,
48
- y: 0,
49
- width: Math.max(region.w * iw, 0),
50
- height: Math.max(region.h * ih, 0),
51
- stroke: colorAlpha(region.color, 0.75),
52
- fill: colorAlpha(region.color, 0.25)
53
- }));
54
- }),
55
- polygon: memo(function (_ref4) {
56
- var region = _ref4.region,
57
- iw = _ref4.iw,
58
- ih = _ref4.ih,
59
- fullSegmentationMode = _ref4.fullSegmentationMode;
60
- var Component = region.open ? "polyline" : "polygon";
61
- var alphaBase = fullSegmentationMode ? 0.5 : 1;
62
- return React.createElement(Component, {
63
- points: region.points.map(function (_ref5) {
64
- var _ref6 = _slicedToArray(_ref5, 2),
65
- x = _ref6[0],
66
- y = _ref6[1];
67
-
68
- return [x * iw, y * ih];
69
- }).map(function (a) {
70
- return a.join(" ");
71
- }).join(" "),
72
- strokeWidth: 2,
73
- stroke: colorAlpha(region.color, 0.75),
74
- fill: colorAlpha(region.color, 0.25)
75
- });
76
- }),
77
- keypoints: function keypoints(_ref7) {
78
- var region = _ref7.region,
79
- iw = _ref7.iw,
80
- ih = _ref7.ih,
81
- keypointDefinitions = _ref7.keypointDefinitions;
82
- var points = region.points,
83
- keypointsDefinitionId = region.keypointsDefinitionId;
84
-
85
- if (!keypointDefinitions[keypointsDefinitionId]) {
86
- throw new Error("No definition for keypoint configuration \"".concat(keypointsDefinitionId, "\""));
87
- }
88
-
89
- var _keypointDefinitions$ = keypointDefinitions[keypointsDefinitionId],
90
- landmarks = _keypointDefinitions$.landmarks,
91
- connections = _keypointDefinitions$.connections;
92
- return React.createElement("g", null, Object.entries(points).map(function (_ref8, i) {
93
- var _ref9 = _slicedToArray(_ref8, 2),
94
- keypointId = _ref9[0],
95
- _ref9$ = _ref9[1],
96
- x = _ref9$.x,
97
- y = _ref9$.y;
98
-
99
- return React.createElement("g", {
100
- key: i,
101
- transform: "translate(".concat(x * iw, " ").concat(y * ih, ")")
102
- }, React.createElement("path", {
103
- d: "M0 8L8 0L0 -8L-8 0Z",
104
- strokeWidth: 2,
105
- stroke: landmarks[keypointId].color,
106
- fill: "transparent"
107
- }));
108
- }), connections.map(function (_ref10) {
109
- var _ref11 = _slicedToArray(_ref10, 2),
110
- kp1Id = _ref11[0],
111
- kp2Id = _ref11[1];
112
-
113
- var kp1 = points[kp1Id];
114
- var kp2 = points[kp2Id];
115
- var midPoint = {
116
- x: (kp1.x + kp2.x) / 2,
117
- y: (kp1.y + kp2.y) / 2
118
- };
119
- return React.createElement("g", {
120
- key: "".concat(kp1.x, ",").concat(kp1.y, ".").concat(kp2.x, ",").concat(kp2.y)
121
- }, React.createElement("line", {
122
- x1: kp1.x * iw,
123
- y1: kp1.y * ih,
124
- x2: midPoint.x * iw,
125
- y2: midPoint.y * ih,
126
- strokeWidth: 2,
127
- stroke: landmarks[kp1Id].color
128
- }), React.createElement("line", {
129
- x1: kp2.x * iw,
130
- y1: kp2.y * ih,
131
- x2: midPoint.x * iw,
132
- y2: midPoint.y * ih,
133
- strokeWidth: 2,
134
- stroke: landmarks[kp2Id].color
135
- }));
136
- }));
137
- },
138
- "expanding-line": memo(function (_ref12) {
139
- var region = _ref12.region,
140
- iw = _ref12.iw,
141
- ih = _ref12.ih;
142
- var _region$expandingWidt = region.expandingWidth,
143
- expandingWidth = _region$expandingWidt === void 0 ? 0.005 : _region$expandingWidt,
144
- points = region.points;
145
- expandingWidth = points.slice(-1)[0].width || expandingWidth;
146
- var pointPairs = points.map(function (_ref13, i) {
147
- var x = _ref13.x,
148
- y = _ref13.y,
149
- angle = _ref13.angle,
150
- width = _ref13.width;
151
-
152
- if (!angle) {
153
- var n = points[clamp(i + 1, 0, points.length - 1)];
154
- var p = points[clamp(i - 1, 0, points.length - 1)];
155
- angle = Math.atan2(p.x - n.x, p.y - n.y) + Math.PI / 2;
156
- }
157
-
158
- var dx = Math.sin(angle) * (width || expandingWidth) / 2;
159
- var dy = Math.cos(angle) * (width || expandingWidth) / 2;
160
- return [{
161
- x: x + dx,
162
- y: y + dy
163
- }, {
164
- x: x - dx,
165
- y: y - dy
166
- }];
167
- });
168
- var firstSection = pointPairs.map(function (_ref14) {
169
- var _ref15 = _slicedToArray(_ref14, 2),
170
- p1 = _ref15[0],
171
- p2 = _ref15[1];
172
-
173
- return p1;
174
- });
175
- var secondSection = pointPairs.map(function (_ref16) {
176
- var _ref17 = _slicedToArray(_ref16, 2),
177
- p1 = _ref17[0],
178
- p2 = _ref17[1];
179
-
180
- return p2;
181
- }).asMutable();
182
- secondSection.reverse();
183
- var lastPoint = points.slice(-1)[0];
184
- return React.createElement(React.Fragment, null, React.createElement("polygon", {
185
- points: firstSection.concat(region.candidatePoint ? [region.candidatePoint] : []).concat(secondSection).map(function (p) {
186
- return "".concat(p.x * iw, " ").concat(p.y * ih);
187
- }).join(" "),
188
- strokeWidth: 2,
189
- stroke: colorAlpha(region.color, 0.75),
190
- fill: colorAlpha(region.color, 0.25)
191
- }), points.map(function (_ref18, i) {
192
- var x = _ref18.x,
193
- y = _ref18.y,
194
- angle = _ref18.angle;
195
- return React.createElement("g", {
196
- key: i,
197
- transform: "translate(".concat(x * iw, " ").concat(y * ih, ") rotate(").concat(-(angle || 0) * 180 / Math.PI, ")")
198
- }, React.createElement("g", null, React.createElement("rect", {
199
- x: -5,
200
- y: -5,
201
- width: 10,
202
- height: 10,
203
- strokeWidth: 2,
204
- stroke: colorAlpha(region.color, 0.75),
205
- fill: colorAlpha(region.color, 0.25)
206
- })));
207
- }), React.createElement("rect", {
208
- x: lastPoint.x * iw - 8,
209
- y: lastPoint.y * ih - 8,
210
- width: 16,
211
- height: 16,
212
- strokeWidth: 4,
213
- stroke: colorAlpha(region.color, 0.5),
214
- fill: "transparent"
215
- }));
216
- }),
217
- pixel: function pixel() {
218
- return null;
219
- }
220
- };
221
- export var WrappedRegionList = memo(function (_ref19) {
222
- var regions = _ref19.regions,
223
- keypointDefinitions = _ref19.keypointDefinitions,
224
- iw = _ref19.iw,
225
- ih = _ref19.ih,
226
- fullSegmentationMode = _ref19.fullSegmentationMode;
227
- return regions.filter(function (r) {
228
- return r.visible !== false;
229
- }).map(function (r) {
230
- var Component = RegionComponents[r.type];
231
- return React.createElement(Component, {
232
- key: r.regionId,
233
- region: r,
234
- iw: iw,
235
- ih: ih,
236
- keypointDefinitions: keypointDefinitions,
237
- fullSegmentationMode: fullSegmentationMode
238
- });
239
- });
240
- }, function (n, p) {
241
- return n.regions === p.regions && n.iw === p.iw && n.ih === p.ih;
242
- });
243
- export var RegionShapes = function RegionShapes(_ref20) {
244
- var mat = _ref20.mat,
245
- imagePosition = _ref20.imagePosition,
246
- _ref20$regions = _ref20.regions,
247
- regions = _ref20$regions === void 0 ? [] : _ref20$regions,
248
- keypointDefinitions = _ref20.keypointDefinitions,
249
- fullSegmentationMode = _ref20.fullSegmentationMode;
250
- var iw = imagePosition.bottomRight.x - imagePosition.topLeft.x;
251
- var ih = imagePosition.bottomRight.y - imagePosition.topLeft.y;
252
- if (isNaN(iw) || isNaN(ih)) return null;
253
- return React.createElement("svg", {
254
- width: iw,
255
- height: ih,
256
- style: {
257
- position: "absolute",
258
- zIndex: 2,
259
- left: imagePosition.topLeft.x,
260
- top: imagePosition.topLeft.y,
261
- pointerEvents: "none",
262
- width: iw,
263
- height: ih
264
- }
265
- }, React.createElement(WrappedRegionList, {
266
- key: "wrapped-region-list",
267
- regions: regions,
268
- iw: iw,
269
- ih: ih,
270
- keypointDefinitions: keypointDefinitions,
271
- fullSegmentationMode: fullSegmentationMode
272
- }));
273
- };
274
- export default RegionShapes;