react-image-annotate-master-custom 0.0.1

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 (73) hide show
  1. package/Annotator/index.js +164 -0
  2. package/Annotator/reducers/combine-reducers.js +14 -0
  3. package/Annotator/reducers/convert-expanding-line-to-polygon.js +73 -0
  4. package/Annotator/reducers/fix-twisted.js +4 -0
  5. package/Annotator/reducers/general-reducer.js +1073 -0
  6. package/Annotator/reducers/get-active-image.js +27 -0
  7. package/Annotator/reducers/get-implied-video-regions.js +180 -0
  8. package/Annotator/reducers/history-handler.js +38 -0
  9. package/Annotator/reducers/image-reducer.js +20 -0
  10. package/Annotator/reducers/video-reducer.js +88 -0
  11. package/ClassSelectionMenu/index.js +135 -0
  12. package/Crosshairs/index.js +53 -0
  13. package/DebugSidebarBox/index.js +20 -0
  14. package/DemoSite/Editor.js +194 -0
  15. package/DemoSite/ErrorBoundaryDialog.js +64 -0
  16. package/DemoSite/index.js +69 -0
  17. package/FullImageSegmentationAnnotator/index.js +7 -0
  18. package/HighlightBox/index.js +105 -0
  19. package/HistorySidebarBox/index.js +71 -0
  20. package/ImageCanvas/index.js +428 -0
  21. package/ImageCanvas/region-tools.js +165 -0
  22. package/ImageCanvas/styles.js +31 -0
  23. package/ImageCanvas/use-mouse.js +180 -0
  24. package/ImageCanvas/use-project-box.js +27 -0
  25. package/ImageCanvas/use-wasd-mode.js +62 -0
  26. package/ImageMask/index.js +133 -0
  27. package/ImageMask/load-image.js +25 -0
  28. package/ImageSelectorSidebarBox/index.js +60 -0
  29. package/KeyframeTimeline/get-time-string.js +27 -0
  30. package/KeyframeTimeline/index.js +233 -0
  31. package/KeyframesSelectorSidebarBox/index.js +93 -0
  32. package/LandingPage/index.js +159 -0
  33. package/MainLayout/icon-dictionary.js +104 -0
  34. package/MainLayout/index.js +359 -0
  35. package/MainLayout/styles.js +25 -0
  36. package/MainLayout/types.js +0 -0
  37. package/MainLayout/use-implied-video-regions.js +13 -0
  38. package/PointDistances/index.js +73 -0
  39. package/PreventScrollToParents/index.js +51 -0
  40. package/README.md +101 -0
  41. package/RegionLabel/index.js +197 -0
  42. package/RegionLabel/styles.js +48 -0
  43. package/RegionSelectAndTransformBoxes/index.js +166 -0
  44. package/RegionSelectorSidebarBox/index.js +248 -0
  45. package/RegionSelectorSidebarBox/styles.js +53 -0
  46. package/RegionShapes/index.js +275 -0
  47. package/RegionTags/index.js +138 -0
  48. package/SettingsDialog/index.js +52 -0
  49. package/SettingsProvider/index.js +53 -0
  50. package/Shortcuts/ShortcutField.js +46 -0
  51. package/Shortcuts/index.js +133 -0
  52. package/ShortcutsManager/index.js +155 -0
  53. package/Sidebar/index.js +69 -0
  54. package/SidebarBoxContainer/index.js +93 -0
  55. package/SmallToolButton/index.js +42 -0
  56. package/TagsSidebarBox/index.js +105 -0
  57. package/TaskDescriptionSidebarBox/index.js +58 -0
  58. package/Theme/index.js +30 -0
  59. package/VideoOrImageCanvasBackground/index.js +151 -0
  60. package/colors.js +14 -0
  61. package/hooks/use-event-callback.js +10 -0
  62. package/hooks/use-exclude-pattern.js +24 -0
  63. package/hooks/use-load-image.js +26 -0
  64. package/hooks/use-window-size.js +46 -0
  65. package/hooks/xpattern.js +1 -0
  66. package/index.js +3 -0
  67. package/lib.js +3 -0
  68. package/package.json +91 -0
  69. package/stories.js +5 -0
  70. package/utils/get-from-local-storage.js +7 -0
  71. package/utils/get-hotkey-help-text.js +9 -0
  72. package/utils/get-landmarks-with-transform.js +40 -0
  73. package/utils/set-in-local-storage.js +3 -0
@@ -0,0 +1,197 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread";
2
+ import React, { useRef, memo } from "react";
3
+ import Paper from "@mui/material/Paper";
4
+ import { makeStyles } from "@mui/styles";
5
+ import { createTheme, ThemeProvider } from "@mui/material/styles";
6
+ import styles from "./styles";
7
+ import classnames from "classnames";
8
+ import IconButton from "@mui/material/IconButton";
9
+ import Button from "@mui/material/Button";
10
+ import TrashIcon from "@mui/icons-material/Delete";
11
+ import CheckIcon from "@mui/icons-material/Check";
12
+ import TextField from "@mui/material/TextField";
13
+ import Select from "react-select";
14
+ import CreatableSelect from "react-select/creatable";
15
+ import { asMutable } from "seamless-immutable";
16
+ var theme = createTheme();
17
+ var useStyles = makeStyles(function (theme) {
18
+ return styles;
19
+ });
20
+ export var RegionLabel = function RegionLabel(_ref) {
21
+ var region = _ref.region,
22
+ editing = _ref.editing,
23
+ allowedClasses = _ref.allowedClasses,
24
+ allowedTags = _ref.allowedTags,
25
+ onDelete = _ref.onDelete,
26
+ _onChange = _ref.onChange,
27
+ onClose = _ref.onClose,
28
+ onOpen = _ref.onOpen,
29
+ onRegionClassAdded = _ref.onRegionClassAdded,
30
+ allowComments = _ref.allowComments;
31
+ var classes = useStyles();
32
+ var commentInputRef = useRef(null);
33
+
34
+ var onCommentInputClick = function onCommentInputClick(_) {
35
+ // The TextField wraps the <input> tag with two divs
36
+ var commentInput = commentInputRef.current.children[0].children[0];
37
+ if (commentInput) return commentInput.focus();
38
+ };
39
+
40
+ return React.createElement(ThemeProvider, {
41
+ theme: theme
42
+ }, React.createElement(Paper, {
43
+ onClick: function onClick() {
44
+ return !editing ? onOpen(region) : null;
45
+ },
46
+ className: classnames(classes.regionInfo, {
47
+ highlighted: region.highlighted
48
+ })
49
+ }, React.createElement("div", {
50
+ style: {
51
+ display: "".concat(!editing ? "unset" : "none")
52
+ }
53
+ }, region.cls && React.createElement("div", {
54
+ className: "name"
55
+ }, React.createElement("div", {
56
+ className: "circle",
57
+ style: {
58
+ backgroundColor: region.color
59
+ }
60
+ }), region.cls), region.tags && React.createElement("div", {
61
+ className: "tags"
62
+ }, region.tags.map(function (t) {
63
+ return React.createElement("div", {
64
+ key: t,
65
+ className: "tag"
66
+ }, t);
67
+ }))), React.createElement("div", {
68
+ style: {
69
+ width: 200,
70
+ display: "".concat(editing ? "unset" : "none")
71
+ }
72
+ }, React.createElement("div", {
73
+ style: {
74
+ display: "flex",
75
+ flexDirection: "row"
76
+ }
77
+ }, React.createElement("div", {
78
+ style: {
79
+ display: "flex",
80
+ backgroundColor: region.color || "#888",
81
+ color: "#fff",
82
+ padding: 4,
83
+ paddingLeft: 8,
84
+ paddingRight: 8,
85
+ borderRadius: 4,
86
+ fontWeight: "bold",
87
+ textShadow: "0px 0px 5px rgba(0,0,0,0.4)"
88
+ }
89
+ }, region.type), React.createElement("div", {
90
+ style: {
91
+ flexGrow: 1
92
+ }
93
+ }), React.createElement(IconButton, {
94
+ onClick: function onClick() {
95
+ return onDelete(region);
96
+ },
97
+ tabIndex: -1,
98
+ style: {
99
+ width: 22,
100
+ height: 22
101
+ },
102
+ size: "small",
103
+ variant: "outlined",
104
+ id: "delete-region-".concat(region.id)
105
+ }, React.createElement(TrashIcon, {
106
+ style: {
107
+ marginTop: -8,
108
+ width: 16,
109
+ height: 16
110
+ }
111
+ }))), (allowedClasses || []).length > 0 && React.createElement("div", {
112
+ style: {
113
+ marginTop: 6
114
+ }
115
+ }, React.createElement(CreatableSelect, {
116
+ placeholder: "Classification",
117
+ onChange: function onChange(o, actionMeta) {
118
+ if (actionMeta.action == "create-option") {
119
+ onRegionClassAdded(o.value);
120
+ }
121
+
122
+ return _onChange(_objectSpread({}, region, {
123
+ cls: o.value
124
+ }));
125
+ },
126
+ value: region.cls ? {
127
+ label: region.cls,
128
+ value: region.cls
129
+ } : null,
130
+ options: asMutable(allowedClasses.map(function (c) {
131
+ return {
132
+ value: c,
133
+ label: c
134
+ };
135
+ }))
136
+ })), (allowedTags || []).length > 0 && React.createElement("div", {
137
+ style: {
138
+ marginTop: 4
139
+ }
140
+ }, React.createElement(Select, {
141
+ onChange: function onChange(newTags) {
142
+ return _onChange(_objectSpread({}, region, {
143
+ tags: newTags.map(function (t) {
144
+ return t.value;
145
+ })
146
+ }));
147
+ },
148
+ placeholder: "Tags",
149
+ value: (region.tags || []).map(function (c) {
150
+ return {
151
+ label: c,
152
+ value: c
153
+ };
154
+ }),
155
+ isMulti: true,
156
+ options: asMutable(allowedTags.map(function (c) {
157
+ return {
158
+ value: c,
159
+ label: c
160
+ };
161
+ }))
162
+ })), allowComments && React.createElement(TextField, {
163
+ InputProps: {
164
+ className: classes.commentBox
165
+ },
166
+ fullWidth: true,
167
+ multiline: true,
168
+ rows: 3,
169
+ ref: commentInputRef,
170
+ onClick: onCommentInputClick,
171
+ value: region.comment || "",
172
+ onChange: function onChange(event) {
173
+ return _onChange(_objectSpread({}, region, {
174
+ comment: event.target.value
175
+ }));
176
+ }
177
+ }), onClose && React.createElement("div", {
178
+ style: {
179
+ marginTop: 4,
180
+ display: "flex"
181
+ }
182
+ }, React.createElement("div", {
183
+ style: {
184
+ flexGrow: 1
185
+ }
186
+ }), React.createElement(Button, {
187
+ onClick: function onClick() {
188
+ return onClose(region);
189
+ },
190
+ size: "small",
191
+ variant: "contained",
192
+ color: "primary"
193
+ }, React.createElement(CheckIcon, null))))));
194
+ };
195
+ export default memo(RegionLabel, function (prevProps, nextProps) {
196
+ return prevProps.editing === nextProps.editing && prevProps.region === nextProps.region;
197
+ });
@@ -0,0 +1,48 @@
1
+ import { grey } from "@mui/material/colors";
2
+ export default {
3
+ regionInfo: {
4
+ fontSize: 12,
5
+ cursor: "default",
6
+ transition: "opacity 200ms",
7
+ opacity: 0.5,
8
+ "&:hover": {
9
+ opacity: 0.9,
10
+ cursor: "pointer"
11
+ },
12
+ "&.highlighted": {
13
+ opacity: 0.9,
14
+ "&:hover": {
15
+ opacity: 1
16
+ }
17
+ },
18
+ // pointerEvents: "none",
19
+ fontWeight: 600,
20
+ color: grey[900],
21
+ padding: 8,
22
+ "& .name": {
23
+ display: "flex",
24
+ flexDirection: "row",
25
+ alignItems: "center",
26
+ "& .circle": {
27
+ marginRight: 4,
28
+ boxShadow: "0px 0px 2px rgba(0,0,0,0.4)",
29
+ width: 10,
30
+ height: 10,
31
+ borderRadius: 5
32
+ }
33
+ },
34
+ "& .tags": {
35
+ "& .tag": {
36
+ color: grey[700],
37
+ display: "inline-block",
38
+ margin: 1,
39
+ fontSize: 10,
40
+ textDecoration: "underline"
41
+ }
42
+ }
43
+ },
44
+ commentBox: {
45
+ fontWeight: 400,
46
+ fontSize: 13
47
+ }
48
+ };
@@ -0,0 +1,166 @@
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((r) => !r.locked)
156
+ .map(function (r, i) {
157
+ return React.createElement(RegionSelectAndTransformBox, Object.assign({
158
+ key: r.id
159
+ }, props, {
160
+ region: r
161
+ }));
162
+ });
163
+ }, function (n, p) {
164
+ return n.regions === p.regions && n.mat === p.mat;
165
+ });
166
+ export default RegionSelectAndTransformBoxes;
@@ -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
+ });