@searpent/react-image-annotate 2.3.4 → 2.3.6
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.
- package/Annotator/examplePhotos.js +28 -28
- package/Annotator/examplePhotos_repr.js +28 -28
- package/Annotator/index.js +40 -31
- package/Annotator/index.story_bugdemo_15_1.js +895 -773
- package/Annotator/index.story_repr.js +1048 -933
- package/Annotator/reducers/convert-expanding-line-to-polygon.js +15 -16
- package/ClassSelectionMenu/index.js +55 -35
- package/Crosshairs/index.js +30 -23
- package/DebugSidebarBox/index.js +40 -9
- package/DemoSite/Editor.js +124 -79
- package/DemoSite/ErrorBoundaryDialog.js +19 -6
- package/DemoSite/index.js +26 -17
- package/Editor/index.js +70 -36
- package/Editor/index_bugdemo_15_1.js +68 -35
- package/Editor/readOnly.js +178 -127
- package/Errorer/index.js +8 -3
- package/FullImageSegmentationAnnotator/index.js +6 -3
- package/GroupSelectorSidebarBox/index.js +48 -32
- package/GroupsEditorSidebarBox/index.js +75 -40
- package/HelpSidebarBox/index.js +24 -13
- package/HighlightBox/index.js +37 -30
- package/HistorySidebarBox/index.js +51 -29
- package/ImageCanvas/index.js +165 -130
- package/ImageMask/index.js +9 -6
- package/ImageSelectorSidebarBox/index.js +44 -26
- package/KeyframeTimeline/index.js +65 -45
- package/KeyframesSelectorSidebarBox/index.js +76 -54
- package/LandingPage/index.js +76 -38
- package/Locker/index.js +8 -3
- package/MainLayout/RightSidebarItemsWrapper.js +7 -4
- package/MainLayout/icon-dictionary.js +99 -66
- package/MainLayout/index.js +258 -196
- package/MainLayout/index_bugdemo_15_1.js +253 -195
- package/MetadataEditorSidebarBox/index.js +152 -102
- package/MetadataEditorSidebarBox/index_14_01_25.js +152 -102
- package/MetadataEditorSidebarBox/index_repr.js +183 -128
- package/PageSelector/UpdatedBySemaphore.js +95 -0
- package/PageSelector/index.js +181 -97
- package/PageSelector/page-selector.css +118 -2
- package/PointDistances/index.js +45 -33
- package/PreventScrollToParents/index.js +16 -9
- package/RegionLabel/index.js +217 -165
- package/RegionSelectAndTransformBoxes/index.js +131 -105
- package/RegionSelectorSidebarBox/index.js +243 -165
- package/RegionShapes/index.js +213 -153
- package/RegionTags/index.js +83 -69
- package/SettingsDialog/index.js +50 -37
- package/SettingsProvider/index.js +8 -5
- package/Shortcuts/ShortcutField.js +21 -14
- package/Shortcuts/index.js +18 -12
- package/ShortcutsManager/index.js +7 -4
- package/Sidebar/index.js +46 -29
- package/SidebarBoxContainer/index.js +14 -7
- package/SmallToolButton/index.js +23 -16
- package/TagsSidebarBox/index.js +41 -28
- package/TaskDescriptionSidebarBox/index.js +24 -13
- package/Theme/index.js +8 -3
- package/VideoOrImageCanvasBackground/index.js +30 -17
- package/package.json +1 -1
- package/utils/spellcheck-nspell.js +2 -2
|
@@ -23,32 +23,50 @@ export var ImageSelectorSidebarBox = function ImageSelectorSidebarBox(_ref) {
|
|
|
23
23
|
var images = _ref.images,
|
|
24
24
|
onSelect = _ref.onSelect;
|
|
25
25
|
var classes = useStyles();
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
26
|
+
return (
|
|
27
|
+
/*#__PURE__*/
|
|
28
|
+
React.createElement(ThemeProvider, {
|
|
29
|
+
theme: theme
|
|
30
|
+
},
|
|
31
|
+
/*#__PURE__*/
|
|
32
|
+
React.createElement(SidebarBoxContainer, {
|
|
33
|
+
title: "Images",
|
|
34
|
+
subTitle: "(".concat(images.length, ")"),
|
|
35
|
+
icon:
|
|
36
|
+
/*#__PURE__*/
|
|
37
|
+
React.createElement(CollectionsIcon, {
|
|
38
|
+
style: {
|
|
39
|
+
color: grey[700]
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
},
|
|
43
|
+
/*#__PURE__*/
|
|
44
|
+
React.createElement("div", null,
|
|
45
|
+
/*#__PURE__*/
|
|
46
|
+
React.createElement(List, null, images.map(function (img, i) {
|
|
47
|
+
return (
|
|
48
|
+
/*#__PURE__*/
|
|
49
|
+
React.createElement(ListItem, {
|
|
50
|
+
button: true,
|
|
51
|
+
onClick: function onClick() {
|
|
52
|
+
return onSelect(img);
|
|
53
|
+
},
|
|
54
|
+
dense: true,
|
|
55
|
+
key: i
|
|
56
|
+
},
|
|
57
|
+
/*#__PURE__*/
|
|
58
|
+
React.createElement("img", {
|
|
59
|
+
className: classes.img,
|
|
60
|
+
src: img.src
|
|
61
|
+
}),
|
|
62
|
+
/*#__PURE__*/
|
|
63
|
+
React.createElement(ListItemText, {
|
|
64
|
+
primary: img.name,
|
|
65
|
+
secondary: "".concat((img.regions || []).length, " Labels")
|
|
66
|
+
}))
|
|
67
|
+
);
|
|
68
|
+
})))))
|
|
69
|
+
);
|
|
52
70
|
};
|
|
53
71
|
|
|
54
72
|
var mapUsedImageProps = function mapUsedImageProps(a) {
|
|
@@ -182,52 +182,72 @@ export default (function (_ref10) {
|
|
|
182
182
|
}); // TODO skeleton
|
|
183
183
|
|
|
184
184
|
if (!duration) return null;
|
|
185
|
-
return
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
185
|
+
return (
|
|
186
|
+
/*#__PURE__*/
|
|
187
|
+
React.createElement(ThemeProvider, {
|
|
188
|
+
theme: theme
|
|
189
|
+
},
|
|
190
|
+
/*#__PURE__*/
|
|
191
|
+
React.createElement(Container, {
|
|
192
|
+
onMouseMove: onMouseMove,
|
|
193
|
+
onMouseUp: onMouseUp,
|
|
194
|
+
ref: ref
|
|
195
|
+
}, range(0, duration, majorInterval).map(function (a) {
|
|
196
|
+
return (
|
|
197
|
+
/*#__PURE__*/
|
|
198
|
+
React.createElement(React.Fragment, null,
|
|
199
|
+
/*#__PURE__*/
|
|
200
|
+
React.createElement(Tick, {
|
|
201
|
+
key: a,
|
|
202
|
+
style: {
|
|
203
|
+
left: a / duration * bounds.width,
|
|
204
|
+
height: "50%"
|
|
205
|
+
}
|
|
206
|
+
}),
|
|
207
|
+
/*#__PURE__*/
|
|
208
|
+
React.createElement(TickText, {
|
|
209
|
+
style: {
|
|
210
|
+
left: a / duration * bounds.width + 8,
|
|
211
|
+
bottom: "calc(50% - 12px)"
|
|
212
|
+
}
|
|
213
|
+
}, getTimeString(a)))
|
|
214
|
+
);
|
|
215
|
+
}), range(0, duration, minorInterval).filter(function (a) {
|
|
216
|
+
return !Number.isInteger(a / majorInterval);
|
|
217
|
+
}).map(function (a) {
|
|
218
|
+
return (
|
|
219
|
+
/*#__PURE__*/
|
|
220
|
+
React.createElement(Tick, {
|
|
221
|
+
key: a,
|
|
222
|
+
style: {
|
|
223
|
+
left: a / duration * bounds.width,
|
|
224
|
+
height: "25%"
|
|
225
|
+
}
|
|
226
|
+
})
|
|
227
|
+
);
|
|
228
|
+
}), keyframeTimes.map(function (kt) {
|
|
229
|
+
return (
|
|
230
|
+
/*#__PURE__*/
|
|
231
|
+
React.createElement(KeyframeMarker, {
|
|
232
|
+
onClick: function onClick() {
|
|
233
|
+
return onChangeCurrentTime(kt);
|
|
234
|
+
},
|
|
235
|
+
key: kt,
|
|
236
|
+
style: {
|
|
237
|
+
left: kt / duration * bounds.width
|
|
238
|
+
}
|
|
239
|
+
})
|
|
240
|
+
);
|
|
241
|
+
}),
|
|
242
|
+
/*#__PURE__*/
|
|
243
|
+
React.createElement(PositionCursor, {
|
|
244
|
+
onMouseDown: function onMouseDown(e) {
|
|
245
|
+
return changeDraggingTime(true);
|
|
218
246
|
},
|
|
219
|
-
key: kt,
|
|
220
247
|
style: {
|
|
221
|
-
|
|
248
|
+
cursor: draggingTime ? "grabbing" : "grab",
|
|
249
|
+
left: instantCurrentTime / duration * bounds.width
|
|
222
250
|
}
|
|
223
|
-
})
|
|
224
|
-
|
|
225
|
-
onMouseDown: function onMouseDown(e) {
|
|
226
|
-
return changeDraggingTime(true);
|
|
227
|
-
},
|
|
228
|
-
style: {
|
|
229
|
-
cursor: draggingTime ? "grabbing" : "grab",
|
|
230
|
-
left: instantCurrentTime / duration * bounds.width
|
|
231
|
-
}
|
|
232
|
-
}, getTimeString(instantCurrentTime))));
|
|
251
|
+
}, getTimeString(instantCurrentTime))))
|
|
252
|
+
);
|
|
233
253
|
});
|
|
@@ -54,66 +54,88 @@ var KeyframesSelectorSidebarBox = function KeyframesSelectorSidebarBox(_ref2) {
|
|
|
54
54
|
var keyframeTimes = Object.keys(keyframes).map(function (t) {
|
|
55
55
|
return parseInt(t);
|
|
56
56
|
});
|
|
57
|
-
return
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
paddingBottom: 0
|
|
72
|
-
}
|
|
73
|
-
}, React.createElement("button", {
|
|
74
|
-
type: "button",
|
|
75
|
-
onClick: function onClick(e) {
|
|
76
|
-
e.stopPropagation();
|
|
77
|
-
|
|
78
|
-
if (window.confirm("Are you really sure you want to delete all frames? This will remove all keyframes for this video.")) {
|
|
79
|
-
if (onDeleteAllKeyframes) {
|
|
80
|
-
onDeleteAllKeyframes();
|
|
57
|
+
return (
|
|
58
|
+
/*#__PURE__*/
|
|
59
|
+
React.createElement(ThemeProvider, {
|
|
60
|
+
theme: theme
|
|
61
|
+
},
|
|
62
|
+
/*#__PURE__*/
|
|
63
|
+
React.createElement(SidebarBoxContainer, {
|
|
64
|
+
title: "Keyframes",
|
|
65
|
+
subTitle: "",
|
|
66
|
+
icon:
|
|
67
|
+
/*#__PURE__*/
|
|
68
|
+
React.createElement(AddLocationIcon, {
|
|
69
|
+
style: {
|
|
70
|
+
color: colors.grey[700]
|
|
81
71
|
}
|
|
72
|
+
}),
|
|
73
|
+
expandedByDefault: true
|
|
74
|
+
}, keyframeTimes.length > 0 &&
|
|
75
|
+
/*#__PURE__*/
|
|
76
|
+
React.createElement("div", {
|
|
77
|
+
style: {
|
|
78
|
+
padding: 8,
|
|
79
|
+
paddingBottom: 0
|
|
82
80
|
}
|
|
83
81
|
},
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
background: "none",
|
|
88
|
-
border: "none",
|
|
89
|
-
cursor: "pointer",
|
|
90
|
-
padding: 0,
|
|
91
|
-
textDecoration: "underline"
|
|
92
|
-
}
|
|
93
|
-
}, "Delete all frames")), keyframeTimes.map(function (t) {
|
|
94
|
-
var _keyframes$t;
|
|
95
|
-
|
|
96
|
-
return React.createElement(KeyframeRow, {
|
|
97
|
-
fullWidth: true,
|
|
98
|
-
key: t,
|
|
99
|
-
className: currentVideoTime === t ? "current" : "",
|
|
100
|
-
onClick: function onClick() {
|
|
101
|
-
return onChangeVideoTime(t);
|
|
102
|
-
}
|
|
103
|
-
}, React.createElement("div", {
|
|
104
|
-
className: "time"
|
|
105
|
-
}, getTimeString(t, 2), React.createElement("span", {
|
|
106
|
-
className: "regionCount"
|
|
107
|
-
}, "(", (((_keyframes$t = keyframes[t]) === null || _keyframes$t === void 0 ? void 0 : _keyframes$t.regions) || []).length, ")")), React.createElement("div", {
|
|
108
|
-
className: "trash"
|
|
109
|
-
}, React.createElement(TrashIcon, {
|
|
82
|
+
/*#__PURE__*/
|
|
83
|
+
React.createElement("button", {
|
|
84
|
+
type: "button",
|
|
110
85
|
onClick: function onClick(e) {
|
|
111
|
-
onDeleteKeyframe(t);
|
|
112
86
|
e.stopPropagation();
|
|
87
|
+
|
|
88
|
+
if (window.confirm("Are you really sure you want to delete all frames? This will remove all keyframes for this video.")) {
|
|
89
|
+
if (onDeleteAllKeyframes) {
|
|
90
|
+
onDeleteAllKeyframes();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
113
93
|
},
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
94
|
+
style: {
|
|
95
|
+
fontSize: 12,
|
|
96
|
+
color: colors.red[700],
|
|
97
|
+
background: "none",
|
|
98
|
+
border: "none",
|
|
99
|
+
cursor: "pointer",
|
|
100
|
+
padding: 0,
|
|
101
|
+
textDecoration: "underline"
|
|
102
|
+
}
|
|
103
|
+
}, "Delete all frames")), keyframeTimes.map(function (t) {
|
|
104
|
+
var _keyframes$t;
|
|
105
|
+
|
|
106
|
+
return (
|
|
107
|
+
/*#__PURE__*/
|
|
108
|
+
React.createElement(KeyframeRow, {
|
|
109
|
+
fullWidth: true,
|
|
110
|
+
key: t,
|
|
111
|
+
className: currentVideoTime === t ? "current" : "",
|
|
112
|
+
onClick: function onClick() {
|
|
113
|
+
return onChangeVideoTime(t);
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
/*#__PURE__*/
|
|
117
|
+
React.createElement("div", {
|
|
118
|
+
className: "time"
|
|
119
|
+
}, getTimeString(t, 2),
|
|
120
|
+
/*#__PURE__*/
|
|
121
|
+
React.createElement("span", {
|
|
122
|
+
className: "regionCount"
|
|
123
|
+
}, "(", (((_keyframes$t = keyframes[t]) === null || _keyframes$t === void 0 ? void 0 : _keyframes$t.regions) || []).length, ")")),
|
|
124
|
+
/*#__PURE__*/
|
|
125
|
+
React.createElement("div", {
|
|
126
|
+
className: "trash"
|
|
127
|
+
},
|
|
128
|
+
/*#__PURE__*/
|
|
129
|
+
React.createElement(TrashIcon, {
|
|
130
|
+
onClick: function onClick(e) {
|
|
131
|
+
onDeleteKeyframe(t);
|
|
132
|
+
e.stopPropagation();
|
|
133
|
+
},
|
|
134
|
+
className: "icon"
|
|
135
|
+
})))
|
|
136
|
+
);
|
|
137
|
+
})))
|
|
138
|
+
);
|
|
117
139
|
};
|
|
118
140
|
|
|
119
141
|
export default KeyframesSelectorSidebarBox;
|
package/LandingPage/index.js
CHANGED
|
@@ -100,10 +100,13 @@ var Section = styled("div")(function (_ref9) {
|
|
|
100
100
|
var CodeBlock = function CodeBlock(_ref10) {
|
|
101
101
|
var language = _ref10.language,
|
|
102
102
|
value = _ref10.value;
|
|
103
|
-
return
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
return (
|
|
104
|
+
/*#__PURE__*/
|
|
105
|
+
React.createElement(SyntaxHighlighter, {
|
|
106
|
+
language: language,
|
|
107
|
+
style: docco
|
|
108
|
+
}, value)
|
|
109
|
+
);
|
|
107
110
|
};
|
|
108
111
|
|
|
109
112
|
function flatten(text, child) {
|
|
@@ -120,40 +123,75 @@ function HeadingRenderer(props) {
|
|
|
120
123
|
}
|
|
121
124
|
|
|
122
125
|
var LandingPage = function LandingPage() {
|
|
123
|
-
return
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
126
|
+
return (
|
|
127
|
+
/*#__PURE__*/
|
|
128
|
+
React.createElement(ThemeProvider, {
|
|
129
|
+
theme: theme
|
|
130
|
+
},
|
|
131
|
+
/*#__PURE__*/
|
|
132
|
+
React.createElement(RootContainer, null,
|
|
133
|
+
/*#__PURE__*/
|
|
134
|
+
React.createElement(Header, {
|
|
135
|
+
id: "about"
|
|
136
|
+
},
|
|
137
|
+
/*#__PURE__*/
|
|
138
|
+
React.createElement(ContentContainer, {
|
|
139
|
+
style: {
|
|
140
|
+
flexDirection: "row",
|
|
141
|
+
flexGrow: 1
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
/*#__PURE__*/
|
|
145
|
+
React.createElement(HeaderButton, {
|
|
146
|
+
href: "#features"
|
|
147
|
+
}, "Features"),
|
|
148
|
+
/*#__PURE__*/
|
|
149
|
+
React.createElement(HeaderButton, {
|
|
150
|
+
href: "#usage"
|
|
151
|
+
}, "Usage"),
|
|
152
|
+
/*#__PURE__*/
|
|
153
|
+
React.createElement(HeaderButton, {
|
|
154
|
+
href: "#props"
|
|
155
|
+
}, "Props"),
|
|
156
|
+
/*#__PURE__*/
|
|
157
|
+
React.createElement(HeaderButton, {
|
|
158
|
+
href: "./demo"
|
|
159
|
+
}, "Demo Playground"))),
|
|
160
|
+
/*#__PURE__*/
|
|
161
|
+
React.createElement(Hero, null,
|
|
162
|
+
/*#__PURE__*/
|
|
163
|
+
React.createElement(ContentContainer, null,
|
|
164
|
+
/*#__PURE__*/
|
|
165
|
+
React.createElement(HeroMain, null, "React Image Annotate"),
|
|
166
|
+
/*#__PURE__*/
|
|
167
|
+
React.createElement(HeroSub, null, "Powerful React component for image annotations with bounding boxes, tagging, classification, multiple images and polygon segmentation."),
|
|
168
|
+
/*#__PURE__*/
|
|
169
|
+
React.createElement(HeroButtons, null,
|
|
170
|
+
/*#__PURE__*/
|
|
171
|
+
React.createElement(GitHubButton, {
|
|
172
|
+
href: "https://github.com/waoai/react-image-annotate",
|
|
173
|
+
"data-size": "large",
|
|
174
|
+
"data-show-count": "true",
|
|
175
|
+
"aria-label": "Star waoai/react-image-annotate on GitHub"
|
|
176
|
+
}, "Star")))),
|
|
177
|
+
/*#__PURE__*/
|
|
178
|
+
React.createElement(ContentContainer, {
|
|
179
|
+
className: "markdown-body"
|
|
180
|
+
},
|
|
181
|
+
/*#__PURE__*/
|
|
182
|
+
React.createElement(Section, {
|
|
183
|
+
className: "markdown-body"
|
|
184
|
+
},
|
|
185
|
+
/*#__PURE__*/
|
|
186
|
+
React.createElement(Markdown, {
|
|
187
|
+
escapeHtml: false,
|
|
188
|
+
source: contentMd,
|
|
189
|
+
renderers: {
|
|
190
|
+
code: CodeBlock,
|
|
191
|
+
heading: HeadingRenderer
|
|
192
|
+
}
|
|
193
|
+
})))))
|
|
194
|
+
);
|
|
157
195
|
};
|
|
158
196
|
|
|
159
197
|
export default LandingPage;
|
package/Locker/index.js
CHANGED
|
@@ -3,9 +3,14 @@ import LockIcon from '@mui/icons-material/Lock';
|
|
|
3
3
|
import './locker.css';
|
|
4
4
|
|
|
5
5
|
function Locker() {
|
|
6
|
-
return
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
return (
|
|
7
|
+
/*#__PURE__*/
|
|
8
|
+
React.createElement("div", {
|
|
9
|
+
className: "locker"
|
|
10
|
+
},
|
|
11
|
+
/*#__PURE__*/
|
|
12
|
+
React.createElement(LockIcon, null))
|
|
13
|
+
);
|
|
9
14
|
}
|
|
10
15
|
|
|
11
16
|
export default Locker;
|
|
@@ -10,10 +10,13 @@ function RightSidebarItemsWrapper(_ref) {
|
|
|
10
10
|
parentEl.style.overflowY = "scroll";
|
|
11
11
|
}
|
|
12
12
|
}, []);
|
|
13
|
-
return
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
return (
|
|
14
|
+
/*#__PURE__*/
|
|
15
|
+
React.createElement("div", {
|
|
16
|
+
ref: elementRef,
|
|
17
|
+
id: "right-sidebar"
|
|
18
|
+
}, children)
|
|
19
|
+
);
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
export default RightSidebarItemsWrapper;
|