@mirrormedia/lilith-draft-editor 2.3.0 → 3.0.0

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 (27) hide show
  1. package/lib/hooks.js +34 -0
  2. package/lib/website/mirrordaily/README.md +3 -0
  3. package/lib/website/mirrordaily/block-renderer/background-image-block.js +93 -0
  4. package/lib/website/mirrordaily/block-renderer/background-video-block.js +93 -0
  5. package/lib/website/mirrordaily/block-renderer/color-box-block.js +86 -0
  6. package/lib/website/mirrordaily/block-renderer/embedded-code-block.js +88 -0
  7. package/lib/website/mirrordaily/block-renderer/image-block.js +108 -0
  8. package/lib/website/mirrordaily/block-renderer/info-box-block.js +86 -0
  9. package/lib/website/mirrordaily/block-renderer/side-index-block.js +90 -0
  10. package/lib/website/mirrordaily/block-renderer/slideshow-block.js +150 -0
  11. package/lib/website/mirrordaily/block-renderer/table-block.js +408 -0
  12. package/lib/website/mirrordaily/block-renderer-fn.js +151 -0
  13. package/lib/website/mirrordaily/draft-editor.js +972 -0
  14. package/lib/website/mirrordaily/entity-decorator.js +27 -0
  15. package/lib/website/mirrordaily/index.js +16 -0
  16. package/lib/website/mirrordaily/selector/align-selector.js +71 -0
  17. package/lib/website/mirrordaily/selector/audio-selector.js +283 -0
  18. package/lib/website/mirrordaily/selector/image-selector.js +451 -0
  19. package/lib/website/mirrordaily/selector/pagination.js +82 -0
  20. package/lib/website/mirrordaily/selector/post-selector.js +321 -0
  21. package/lib/website/mirrordaily/selector/search-box.js +46 -0
  22. package/lib/website/mirrordaily/selector/video-selector.js +326 -0
  23. package/lib/website/mirrordaily/shared-style/index.js +17 -0
  24. package/lib/website/mirrordaily/theme/index.js +28 -0
  25. package/lib/website/mirrormedia/draft-editor.js +0 -4
  26. package/lib/website/readr/draft-editor.js +0 -4
  27. package/package.json +3 -2
@@ -0,0 +1,451 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ImageSelector = ImageSelector;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
11
+
12
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
13
+
14
+ var _fields = require("@keystone-ui/fields");
15
+
16
+ var _modals = require("@keystone-ui/modals");
17
+
18
+ var _apollo = require("@keystone-6/core/admin-ui/apollo");
19
+
20
+ var _alignSelector = require("./align-selector");
21
+
22
+ var _searchBox = require("./search-box");
23
+
24
+ var _pagination = require("./pagination");
25
+
26
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
+
28
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
+
30
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
+
32
+ const imagesQuery = (0, _apollo.gql)`
33
+ query Photos($searchText: String!, $take: Int, $skip: Int) {
34
+ photosCount(where: { name: { contains: $searchText } })
35
+ photos(
36
+ where: { name: { contains: $searchText } }
37
+ orderBy: { id: desc }
38
+ take: $take
39
+ skip: $skip
40
+ ) {
41
+ id
42
+ name
43
+ imageFile {
44
+ url
45
+ width
46
+ height
47
+ }
48
+ resized {
49
+ original
50
+ w480
51
+ w800
52
+ w1200
53
+ w1600
54
+ w2400
55
+ }
56
+ resizedWebp {
57
+ original
58
+ w480
59
+ w800
60
+ w1200
61
+ w1600
62
+ w2400
63
+ }
64
+ }
65
+ }
66
+ `;
67
+ const _ = {
68
+ debounce: _debounce.default
69
+ };
70
+ const ImageSearchBox = (0, _styledComponents.default)(_searchBox.SearchBox)`
71
+ margin-top: 10px;
72
+ `;
73
+ const ImageSelectionWrapper = _styledComponents.default.div`
74
+ overflow: auto;
75
+ margin-top: 10px;
76
+ `;
77
+ const ImageBlockMetaWrapper = _styledComponents.default.div``;
78
+ const ImageGridsWrapper = _styledComponents.default.div`
79
+ display: flex;
80
+ flex-wrap: wrap;
81
+ overflow: auto;
82
+ margin-top: 5px;
83
+ `;
84
+ const ImageGridWrapper = _styledComponents.default.div`
85
+ flex: 0 0 33.3333%;
86
+ cursor: pointer;
87
+ padding: 0 10px 10px;
88
+ `;
89
+ const ImageMetaGridsWrapper = _styledComponents.default.div`
90
+ display: flex;
91
+ flex-wrap: wrap;
92
+ overflow: auto;
93
+ `;
94
+ const ImageMetaGridWrapper = _styledComponents.default.div`
95
+ flex: 0 0 33.3333%;
96
+ cursor: pointer;
97
+ padding: 0 10px 10px;
98
+ `;
99
+ const Image = _styledComponents.default.img`
100
+ display: block;
101
+ width: 100%;
102
+ aspect-ratio: 2;
103
+ object-fit: cover;
104
+ `;
105
+ const Label = _styledComponents.default.label`
106
+ display: block;
107
+ margin: 10px 0;
108
+ font-weight: 600;
109
+ `;
110
+ const SeparationLine = _styledComponents.default.div`
111
+ border: #e1e5e9 1px solid;
112
+ margin-top: 10px;
113
+ margin-bottom: 10px;
114
+ `;
115
+ const ImageSelected = _styledComponents.default.div`
116
+ height: 1.4rem;
117
+ `;
118
+ const ErrorWrapper = _styledComponents.default.div`
119
+ & * {
120
+ margin: 0;
121
+ }
122
+ `;
123
+ const ImageName = _styledComponents.default.p`
124
+ text-align: center;
125
+ `;
126
+
127
+ function ImageGrids(props) {
128
+ const {
129
+ images,
130
+ selected,
131
+ onSelect
132
+ } = props;
133
+ return /*#__PURE__*/_react.default.createElement(ImageGridsWrapper, null, images.map(image => {
134
+ return /*#__PURE__*/_react.default.createElement(ImageGrid, {
135
+ key: image.id,
136
+ isSelected: !!(selected !== null && selected !== void 0 && selected.find(selectedImage => selectedImage.id === image.id)),
137
+ onSelect: () => onSelect(image),
138
+ image: image
139
+ });
140
+ }));
141
+ }
142
+
143
+ function ImageGrid(props) {
144
+ var _image$resized;
145
+
146
+ const {
147
+ image,
148
+ onSelect,
149
+ isSelected
150
+ } = props;
151
+ return /*#__PURE__*/_react.default.createElement(ImageGridWrapper, {
152
+ key: image === null || image === void 0 ? void 0 : image.id,
153
+ onClick: () => onSelect(image)
154
+ }, /*#__PURE__*/_react.default.createElement(ImageSelected, null, isSelected ? /*#__PURE__*/_react.default.createElement("i", {
155
+ className: "fas fa-check-circle"
156
+ }) : null), /*#__PURE__*/_react.default.createElement(Image, {
157
+ src: image === null || image === void 0 ? void 0 : (_image$resized = image.resized) === null || _image$resized === void 0 ? void 0 : _image$resized.w800,
158
+ onError: e => {
159
+ var _image$imageFile;
160
+
161
+ return e.currentTarget.src = image === null || image === void 0 ? void 0 : (_image$imageFile = image.imageFile) === null || _image$imageFile === void 0 ? void 0 : _image$imageFile.url;
162
+ }
163
+ }));
164
+ }
165
+
166
+ function ImageMetaGrids(props) {
167
+ const {
168
+ imageMetas,
169
+ onChange,
170
+ enableCaption,
171
+ enableUrl
172
+ } = props;
173
+ return /*#__PURE__*/_react.default.createElement(ImageMetaGridsWrapper, null, imageMetas.map(imageMeta => {
174
+ var _imageMeta$image;
175
+
176
+ return /*#__PURE__*/_react.default.createElement(ImageMetaGrid, {
177
+ key: imageMeta === null || imageMeta === void 0 ? void 0 : (_imageMeta$image = imageMeta.image) === null || _imageMeta$image === void 0 ? void 0 : _imageMeta$image.id,
178
+ imageMeta: imageMeta,
179
+ enableCaption: enableCaption,
180
+ enableUrl: enableUrl,
181
+ onChange: onChange
182
+ });
183
+ }));
184
+ }
185
+
186
+ function ImageMetaGrid(props) {
187
+ var _image$resized2;
188
+
189
+ const {
190
+ imageMeta,
191
+ enableCaption,
192
+ enableUrl,
193
+ onChange
194
+ } = props;
195
+ const {
196
+ image,
197
+ desc,
198
+ url
199
+ } = imageMeta;
200
+ return /*#__PURE__*/_react.default.createElement(ImageMetaGridWrapper, null, /*#__PURE__*/_react.default.createElement(Image, {
201
+ src: image === null || image === void 0 ? void 0 : (_image$resized2 = image.resized) === null || _image$resized2 === void 0 ? void 0 : _image$resized2.w800,
202
+ onError: e => {
203
+ var _image$imageFile2;
204
+
205
+ return e.currentTarget.src = image === null || image === void 0 ? void 0 : (_image$imageFile2 = image.imageFile) === null || _image$imageFile2 === void 0 ? void 0 : _image$imageFile2.url;
206
+ }
207
+ }), /*#__PURE__*/_react.default.createElement(ImageName, null, image === null || image === void 0 ? void 0 : image.name), enableCaption && /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, {
208
+ htmlFor: "caption"
209
+ }, "Image Caption:"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
210
+ id: "caption",
211
+ type: "text",
212
+ placeholder: image === null || image === void 0 ? void 0 : image.name,
213
+ defaultValue: desc,
214
+ onChange: _.debounce(e => {
215
+ onChange({
216
+ image,
217
+ desc: e.target.value,
218
+ url
219
+ });
220
+ })
221
+ })), enableUrl && /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, {
222
+ htmlFor: "url"
223
+ }, "Url:"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
224
+ id: "url",
225
+ type: "text",
226
+ placeholder: "(Optional)",
227
+ defaultValue: url,
228
+ onChange: _.debounce(e => {
229
+ onChange({
230
+ image,
231
+ desc,
232
+ url: e.target.value
233
+ });
234
+ })
235
+ })));
236
+ }
237
+
238
+ function DelayInput(props) {
239
+ const {
240
+ delay,
241
+ onChange
242
+ } = props;
243
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, null, "Slideshow delay:"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
244
+ type: "number",
245
+ placeholder: "\u8ACB\u8F38\u5165\u81EA\u52D5\u5207\u63DB\u79D2\u6578",
246
+ step: "0.5",
247
+ min: "1",
248
+ value: delay,
249
+ onChange: e => {
250
+ onChange(e.target.value);
251
+ }
252
+ }));
253
+ }
254
+
255
+ function ImageSelector(props) {
256
+ const {
257
+ enableMultiSelect = false,
258
+ enableCaption = false,
259
+ enableUrl = false,
260
+ enableAlignment = false,
261
+ enableDelay = false,
262
+ onChange,
263
+ initialSelected = [],
264
+ initialAlign,
265
+ initialDelay
266
+ } = props;
267
+ const [queryImages, {
268
+ loading,
269
+ error,
270
+ data: {
271
+ photos: images = [],
272
+ photosCount: imagesCount = 0
273
+ } = {}
274
+ }] = (0, _apollo.useLazyQuery)(imagesQuery, {
275
+ fetchPolicy: 'no-cache'
276
+ });
277
+ const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
278
+
279
+ const [searchText, setSearchText] = (0, _react.useState)('');
280
+ const [selected, setSelected] = (0, _react.useState)(initialSelected);
281
+ const [delay, setDelay] = (0, _react.useState)(initialDelay ?? '5');
282
+ const [align, setAlign] = (0, _react.useState)(initialAlign);
283
+ const contentWrapperRef = (0, _react.useRef)(null);
284
+ const pageSize = 18;
285
+ const options = [{
286
+ value: undefined,
287
+ label: 'default',
288
+ isDisabled: false
289
+ }, {
290
+ value: 'left',
291
+ label: 'left',
292
+ isDisabled: false
293
+ }, {
294
+ value: 'right',
295
+ label: 'right',
296
+ isDisabled: false
297
+ }];
298
+
299
+ const onSave = () => {
300
+ let adjustedDelay = +delay;
301
+ adjustedDelay = adjustedDelay < 1 ? 1 : adjustedDelay;
302
+ onChange(selected, align, adjustedDelay);
303
+ };
304
+
305
+ const onCancel = () => {
306
+ onChange([]);
307
+ };
308
+
309
+ const onSearchBoxChange = async searchInput => {
310
+ setSearchText(searchInput);
311
+ setCurrentPage(1);
312
+ };
313
+
314
+ const onDealyChange = delay => {
315
+ setDelay(delay);
316
+ };
317
+
318
+ const onAlignSelectChange = align => {
319
+ setAlign(align);
320
+ };
321
+
322
+ const onAlignSelectOpen = () => {
323
+ var _contentWrapperRef$cu;
324
+
325
+ const scrollWrapper = (_contentWrapperRef$cu = contentWrapperRef.current) === null || _contentWrapperRef$cu === void 0 ? void 0 : _contentWrapperRef$cu.parentElement;
326
+
327
+ if (scrollWrapper) {
328
+ scrollWrapper.scrollTop = scrollWrapper.scrollHeight;
329
+ }
330
+ };
331
+
332
+ const onImageMetaChange = imageEntityWithMeta => {
333
+ if (enableMultiSelect) {
334
+ const foundIndex = selected.findIndex(ele => {
335
+ var _ele$image, _imageEntityWithMeta$;
336
+
337
+ return (ele === null || ele === void 0 ? void 0 : (_ele$image = ele.image) === null || _ele$image === void 0 ? void 0 : _ele$image.id) === (imageEntityWithMeta === null || imageEntityWithMeta === void 0 ? void 0 : (_imageEntityWithMeta$ = imageEntityWithMeta.image) === null || _imageEntityWithMeta$ === void 0 ? void 0 : _imageEntityWithMeta$.id);
338
+ });
339
+
340
+ if (foundIndex !== -1) {
341
+ selected[foundIndex] = imageEntityWithMeta;
342
+ setSelected(selected);
343
+ }
344
+
345
+ return;
346
+ }
347
+
348
+ setSelected([imageEntityWithMeta]);
349
+ };
350
+
351
+ const onImagesGridSelect = imageEntity => {
352
+ setSelected(selected => {
353
+ const filterdSelected = selected.filter(ele => {
354
+ var _ele$image2;
355
+
356
+ return ((_ele$image2 = ele.image) === null || _ele$image2 === void 0 ? void 0 : _ele$image2.id) !== imageEntity.id;
357
+ }); // deselect the image
358
+
359
+ if (filterdSelected.length !== selected.length) {
360
+ return filterdSelected;
361
+ } // add new selected one
362
+
363
+
364
+ if (enableMultiSelect) {
365
+ return selected.concat([{
366
+ image: imageEntity,
367
+ desc: ''
368
+ }]);
369
+ } // single select
370
+
371
+
372
+ return [{
373
+ image: imageEntity,
374
+ desc: ''
375
+ }];
376
+ });
377
+ };
378
+
379
+ const selectedImages = selected.map(ele => {
380
+ return ele.image;
381
+ });
382
+ (0, _react.useEffect)(() => {
383
+ if (currentPage !== 0) {
384
+ queryImages({
385
+ variables: {
386
+ searchText: searchText,
387
+ skip: (currentPage - 1) * pageSize,
388
+ take: pageSize
389
+ }
390
+ });
391
+ }
392
+ }, [currentPage, searchText]);
393
+
394
+ let searchResult = /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(ImageGrids, {
395
+ images: images,
396
+ selected: selectedImages,
397
+ onSelect: onImagesGridSelect
398
+ }), /*#__PURE__*/_react.default.createElement(_pagination.Pagination, {
399
+ currentPage: currentPage,
400
+ total: imagesCount,
401
+ pageSize: pageSize,
402
+ onChange: pageIndex => {
403
+ setCurrentPage(pageIndex);
404
+ }
405
+ }));
406
+
407
+ if (loading) {
408
+ searchResult = /*#__PURE__*/_react.default.createElement("p", null, "searching...");
409
+ }
410
+
411
+ if (error) {
412
+ var _imagesQuery$loc, _imagesQuery$loc$sour;
413
+
414
+ searchResult = /*#__PURE__*/_react.default.createElement(ErrorWrapper, null, /*#__PURE__*/_react.default.createElement("h3", null, "Errors occurs in the `images` query"), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Message:"), /*#__PURE__*/_react.default.createElement("div", null, error.message), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Stack:"), /*#__PURE__*/_react.default.createElement("div", null, error.stack), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Query:"), /*#__PURE__*/_react.default.createElement("pre", null, imagesQuery === null || imagesQuery === void 0 ? void 0 : (_imagesQuery$loc = imagesQuery.loc) === null || _imagesQuery$loc === void 0 ? void 0 : (_imagesQuery$loc$sour = _imagesQuery$loc.source) === null || _imagesQuery$loc$sour === void 0 ? void 0 : _imagesQuery$loc$sour.body)));
415
+ }
416
+
417
+ return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
418
+ isOpen: true
419
+ }, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
420
+ title: "Select image",
421
+ actions: {
422
+ cancel: {
423
+ label: 'Cancel',
424
+ action: onCancel
425
+ },
426
+ confirm: {
427
+ label: 'Confirm',
428
+ action: onSave
429
+ }
430
+ }
431
+ }, /*#__PURE__*/_react.default.createElement("div", {
432
+ ref: contentWrapperRef
433
+ }, /*#__PURE__*/_react.default.createElement(ImageSearchBox, {
434
+ onChange: onSearchBoxChange
435
+ }), /*#__PURE__*/_react.default.createElement(ImageSelectionWrapper, null, /*#__PURE__*/_react.default.createElement("div", null, searchResult), !!selected.length && /*#__PURE__*/_react.default.createElement(SeparationLine, null), /*#__PURE__*/_react.default.createElement(ImageMetaGrids, {
436
+ imageMetas: selected,
437
+ onChange: onImageMetaChange,
438
+ enableCaption: enableCaption,
439
+ enableUrl: enableUrl
440
+ })), /*#__PURE__*/_react.default.createElement(ImageBlockMetaWrapper, null, (enableDelay || enableAlignment) && /*#__PURE__*/_react.default.createElement(SeparationLine, null), enableDelay && /*#__PURE__*/_react.default.createElement(DelayInput, {
441
+ delay: delay,
442
+ onChange: onDealyChange
443
+ }), enableAlignment && /*#__PURE__*/_react.default.createElement(_alignSelector.AlignSelector // @ts-ignore: align could be undefined
444
+ , {
445
+ align: align // @ts-ignore: option with undefined value
446
+ ,
447
+ options: options,
448
+ onChange: onAlignSelectChange,
449
+ onOpen: onAlignSelectOpen
450
+ })))));
451
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Pagination = Pagination;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const PaginationWrapper = _styledComponents.default.div`
15
+ display: flex;
16
+ justify-content: end;
17
+ `;
18
+ const Arrows = _styledComponents.default.div`
19
+ display: flex;
20
+ `;
21
+ const ArrowButtonWrapper = _styledComponents.default.a`
22
+ color: #415269;
23
+ cursor: pointer;
24
+ ${({
25
+ disable
26
+ }) => {
27
+ if (disable) {
28
+ return `
29
+ pointer-events: none;
30
+ opacity: 0.65;
31
+ cursor: unset;
32
+ `;
33
+ }
34
+ }}
35
+ `;
36
+
37
+ function Pagination({
38
+ currentPage,
39
+ total,
40
+ pageSize,
41
+ onChange
42
+ }) {
43
+ const minPage = 1;
44
+ const limit = Math.ceil(total / pageSize);
45
+ const nextPage = currentPage + 1;
46
+ const prevPage = currentPage - 1; // Don't render the pagiantion component if the pageSize is greater than the total number of items in the list.
47
+
48
+ if (total <= pageSize) return null;
49
+ return /*#__PURE__*/_react.default.createElement(PaginationWrapper, null, /*#__PURE__*/_react.default.createElement("div", null, currentPage, " of ", limit, " pages"), /*#__PURE__*/_react.default.createElement(Arrows, null, /*#__PURE__*/_react.default.createElement(ArrowButtonWrapper, {
50
+ onClick: () => {
51
+ onChange(prevPage);
52
+ },
53
+ disable: prevPage < minPage
54
+ }, /*#__PURE__*/_react.default.createElement("svg", {
55
+ "aria-hidden": "true",
56
+ focusable: "false",
57
+ height: "24px",
58
+ width: "24px",
59
+ role: "img",
60
+ viewBox: "0 0 24 24",
61
+ xmlns: "http://www.w3.org/2000/svg",
62
+ className: "css-bztyua"
63
+ }, /*#__PURE__*/_react.default.createElement("polyline", {
64
+ points: "15 18 9 12 15 6"
65
+ }), ' ')), /*#__PURE__*/_react.default.createElement(ArrowButtonWrapper, {
66
+ onClick: () => {
67
+ onChange(nextPage);
68
+ },
69
+ disable: nextPage > limit
70
+ }, /*#__PURE__*/_react.default.createElement("svg", {
71
+ "aria-hidden": "true",
72
+ focusable: "false",
73
+ height: "24px",
74
+ width: "24px",
75
+ role: "img",
76
+ viewBox: "0 0 24 24",
77
+ xmlns: "http://www.w3.org/2000/svg",
78
+ className: "css-bztyua"
79
+ }, /*#__PURE__*/_react.default.createElement("polyline", {
80
+ points: "9 18 15 12 9 6"
81
+ })))));
82
+ }