@automattic/social-previews 1.0.4 → 1.1.2

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/CHANGELOG.md CHANGED
@@ -1,23 +1,36 @@
1
1
  # Changelog
2
2
 
3
- #### v1.0.4 (2020-08-24)
3
+ ## v1.1.2 (2022-05-13)
4
+
5
+ - Dependency updates and internal code cleanup.
6
+
7
+ ## v1.1.1 (2021-04-05)
8
+
9
+ - Ensure that lengthy text doesn't overflow in the Twitter preview.
10
+
11
+ ## v1.1.0 (2020-09-10)
12
+
13
+ - Twitter: Add previewing for attached images, videos, or quoted tweets.
14
+ - Twitter: Add support for previewing entire threads.
15
+
16
+ ## v1.0.4 (2020-08-24)
4
17
 
5
18
  - Fixed Twitter styles for viewports < 600px in width
6
19
 
7
- #### v1.0.3 (2020-08-21)
20
+ ## v1.0.3 (2020-08-21)
8
21
 
9
22
  - Refreshed styles of Twitter, Facebook and Google previews to match their latest design.
10
23
 
11
- #### v1.0.2 (2020-08-03)
24
+ ## v1.0.2 (2020-08-03)
12
25
 
13
26
  - Remove `i18n-calypso` dependency by removing search preview header.
14
27
  - Strip html tags from descriptions for social previews.
15
28
  - Add helper function with enhanced regex for stripping html tags.
16
29
 
17
- #### v1.0.1 (2020-07-23)
30
+ ## v1.0.1 (2020-07-23)
18
31
 
19
32
  - Mark CSS and SCSS files as `sideEffects` to ensure they are not discarded during build processes tree-shaking.
20
33
 
21
- #### v1.0.0 (2020-07-22)
34
+ ## v1.0.0 (2020-07-22)
22
35
 
23
36
  - Initial release after extracting from Calypso.
package/README.md CHANGED
@@ -49,6 +49,44 @@ import { SearchPreview } from '@automattic/social-previews';
49
49
  />;
50
50
  ```
51
51
 
52
+ Twitter previews support the same properties for previewing a single tweet, but can also preview multiple tweets in the form of a Twitter thread. For that, the `tweets` property takes an array of tweets. Each item in this array can take additional information about the tweet, giving the preview a more native feel.
53
+
54
+ ```js
55
+ import { TwitterPreview } from '@automattic/social-previews';
56
+
57
+ const tweetTemplate = {
58
+ date: Date.now(),
59
+ name: 'My Account Name',
60
+ profileImage: 'https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png',
61
+ screenName: '@myAccount',
62
+ };
63
+
64
+ <TwitterPreview
65
+ tweets={ [
66
+ {
67
+ ...tweetTemplate,
68
+ text: 'This is the first tweet in a thread, it only has text in it.',
69
+ },
70
+ {
71
+ ...tweetTemplate,
72
+ text: 'The second tweet has some images attached, too!',
73
+ media: [
74
+ {
75
+ alt: 'The alt text for the first image.',
76
+ url: 'https://url.for.the/first/image.png',
77
+ type: 'image/png',
78
+ },
79
+ {
80
+ alt: 'The alt text for the second image.',
81
+ url: 'https://url.for.the/second/image.png',
82
+ type: 'image/png',
83
+ },
84
+ ],
85
+ },
86
+ ] }
87
+ />;
88
+ ```
89
+
52
90
  ## Properties
53
91
 
54
92
  There are a number of common properties used across all components:
@@ -1,93 +1,72 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.default = exports.FacebookPreview = void 0;
11
9
 
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
10
+ var _lodash = require("lodash");
19
11
 
20
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
21
13
 
22
- var _react = _interopRequireWildcard(require("react"));
23
-
24
- var _lodash = require("lodash");
14
+ var _react = require("react");
25
15
 
26
16
  var _helpers = require("../helpers");
27
17
 
28
18
  require("./style.scss");
29
19
 
30
- /**
31
- * External dependencies
32
- */
33
-
34
- /**
35
- * Style dependencies
36
- */
37
- var TITLE_LENGTH = 80;
38
- var DESCRIPTION_LENGTH = 200;
39
-
40
- var baseDomain = function baseDomain(url) {
41
- return url && url.replace(/^[^/]+[/]*/, '') // strip leading protocol
42
- .replace(/\/.*$/, '');
43
- }; // strip everything after the domain
44
-
45
-
46
- var facebookTitle = (0, _helpers.firstValid)((0, _helpers.shortEnough)(TITLE_LENGTH), (0, _helpers.hardTruncation)(TITLE_LENGTH));
47
- var facebookDescription = (0, _helpers.firstValid)((0, _helpers.shortEnough)(DESCRIPTION_LENGTH), (0, _helpers.hardTruncation)(DESCRIPTION_LENGTH));
48
-
49
- var FacebookPreview = /*#__PURE__*/function (_PureComponent) {
50
- (0, _inherits2.default)(FacebookPreview, _PureComponent);
51
-
52
- var _super = (0, _createSuper2.default)(FacebookPreview);
53
-
54
- function FacebookPreview() {
55
- (0, _classCallCheck2.default)(this, FacebookPreview);
56
- return _super.apply(this, arguments);
20
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
21
+
22
+ const TITLE_LENGTH = 80;
23
+ const DESCRIPTION_LENGTH = 200;
24
+
25
+ const baseDomain = url => url && url.replace(/^[^/]+[/]*/, '') // strip leading protocol
26
+ .replace(/\/.*$/, ''); // strip everything after the domain
27
+
28
+
29
+ const facebookTitle = (0, _helpers.firstValid)((0, _helpers.shortEnough)(TITLE_LENGTH), (0, _helpers.hardTruncation)(TITLE_LENGTH));
30
+ const facebookDescription = (0, _helpers.firstValid)((0, _helpers.shortEnough)(DESCRIPTION_LENGTH), (0, _helpers.hardTruncation)(DESCRIPTION_LENGTH));
31
+
32
+ class FacebookPreview extends _react.PureComponent {
33
+ render() {
34
+ const {
35
+ url,
36
+ type,
37
+ title,
38
+ description,
39
+ image,
40
+ author
41
+ } = this.props;
42
+ return (0, _jsxRuntime.jsx)("div", {
43
+ className: `facebook-preview facebook-preview__${type}`,
44
+ children: (0, _jsxRuntime.jsxs)("div", {
45
+ className: "facebook-preview__content",
46
+ children: [(0, _jsxRuntime.jsx)("div", {
47
+ className: "facebook-preview__image",
48
+ children: image && (0, _jsxRuntime.jsx)("img", {
49
+ alt: "Facebook Preview Thumbnail",
50
+ src: image
51
+ })
52
+ }), (0, _jsxRuntime.jsxs)("div", {
53
+ className: "facebook-preview__body",
54
+ children: [(0, _jsxRuntime.jsx)("div", {
55
+ className: "facebook-preview__url",
56
+ children: (0, _lodash.compact)([baseDomain(url), author]).join(' | ')
57
+ }), (0, _jsxRuntime.jsx)("div", {
58
+ className: "facebook-preview__title",
59
+ children: facebookTitle(title || '')
60
+ }), (0, _jsxRuntime.jsx)("div", {
61
+ className: "facebook-preview__description",
62
+ children: facebookDescription((0, _helpers.stripHtmlTags)(description))
63
+ })]
64
+ })]
65
+ })
66
+ });
57
67
  }
58
68
 
59
- (0, _createClass2.default)(FacebookPreview, [{
60
- key: "render",
61
- value: function render() {
62
- var _this$props = this.props,
63
- url = _this$props.url,
64
- type = _this$props.type,
65
- title = _this$props.title,
66
- description = _this$props.description,
67
- image = _this$props.image,
68
- author = _this$props.author;
69
- return /*#__PURE__*/_react.default.createElement("div", {
70
- className: "facebook-preview facebook-preview__".concat(type)
71
- }, /*#__PURE__*/_react.default.createElement("div", {
72
- className: "facebook-preview__content"
73
- }, /*#__PURE__*/_react.default.createElement("div", {
74
- className: "facebook-preview__image"
75
- }, image && /*#__PURE__*/_react.default.createElement("img", {
76
- alt: "Facebook Preview Thumbnail",
77
- src: image
78
- })), /*#__PURE__*/_react.default.createElement("div", {
79
- className: "facebook-preview__body"
80
- }, /*#__PURE__*/_react.default.createElement("div", {
81
- className: "facebook-preview__url"
82
- }, (0, _lodash.compact)([baseDomain(url), author]).join(' | ')), /*#__PURE__*/_react.default.createElement("div", {
83
- className: "facebook-preview__title"
84
- }, facebookTitle(title || '')), /*#__PURE__*/_react.default.createElement("div", {
85
- className: "facebook-preview__description"
86
- }, facebookDescription((0, _helpers.stripHtmlTags)(description))))));
87
- }
88
- }]);
89
- return FacebookPreview;
90
- }(_react.PureComponent);
69
+ }
91
70
 
92
71
  exports.FacebookPreview = FacebookPreview;
93
72
  FacebookPreview.propTypes = {
@@ -3,55 +3,36 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.stripHtmlTags = exports.firstValid = exports.hardTruncation = exports.truncatedAtSpace = exports.shortEnough = void 0;
6
+ exports.truncatedAtSpace = exports.stripHtmlTags = exports.shortEnough = exports.hardTruncation = exports.firstValid = void 0;
7
7
 
8
8
  var _lodash = require("lodash");
9
9
 
10
- /**
11
- * External dependencies
12
- */
13
- var shortEnough = function shortEnough(limit) {
14
- return function (title) {
15
- return title.length <= limit ? title : false;
16
- };
17
- };
10
+ const shortEnough = limit => title => title.length <= limit ? title : false;
18
11
 
19
12
  exports.shortEnough = shortEnough;
20
13
 
21
- var truncatedAtSpace = function truncatedAtSpace(lower, upper) {
22
- return function (fullTitle) {
23
- var title = fullTitle.slice(0, upper);
24
- var lastSpace = title.lastIndexOf(' ');
25
- return lastSpace > lower && lastSpace < upper ? title.slice(0, lastSpace).concat('…') : false;
26
- };
14
+ const truncatedAtSpace = (lower, upper) => fullTitle => {
15
+ const title = fullTitle.slice(0, upper);
16
+ const lastSpace = title.lastIndexOf(' ');
17
+ return lastSpace > lower && lastSpace < upper ? title.slice(0, lastSpace).concat('…') : false;
27
18
  };
28
19
 
29
20
  exports.truncatedAtSpace = truncatedAtSpace;
30
21
 
31
- var hardTruncation = function hardTruncation(limit) {
32
- return function (title) {
33
- return title.slice(0, limit).concat('…');
34
- };
35
- };
22
+ const hardTruncation = limit => title => title.slice(0, limit).concat('…');
36
23
 
37
24
  exports.hardTruncation = hardTruncation;
38
25
 
39
- var firstValid = function firstValid() {
26
+ const firstValid = function () {
40
27
  for (var _len = arguments.length, predicates = new Array(_len), _key = 0; _key < _len; _key++) {
41
28
  predicates[_key] = arguments[_key];
42
29
  }
43
30
 
44
- return function (a) {
45
- return (0, _lodash.find)(predicates, function (p) {
46
- return false !== p(a);
47
- })(a);
48
- };
31
+ return a => (0, _lodash.find)(predicates, p => false !== p(a))(a);
49
32
  };
50
33
 
51
34
  exports.firstValid = firstValid;
52
35
 
53
- var stripHtmlTags = function stripHtmlTags(description) {
54
- return description ? description.replace(/(<([^>]+)>)/gi, '') : '';
55
- };
36
+ const stripHtmlTags = description => description ? description.replace(/(<([^>]+)>)/gi, '') : '';
56
37
 
57
38
  exports.stripHtmlTags = stripHtmlTags;
package/dist/cjs/index.js CHANGED
@@ -1,26 +1,26 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  Object.defineProperty(exports, "FacebookPreview", {
9
9
  enumerable: true,
10
- get: function get() {
10
+ get: function () {
11
11
  return _facebookPreview.default;
12
12
  }
13
13
  });
14
- Object.defineProperty(exports, "TwitterPreview", {
14
+ Object.defineProperty(exports, "SearchPreview", {
15
15
  enumerable: true,
16
- get: function get() {
17
- return _twitterPreview.default;
16
+ get: function () {
17
+ return _searchPreview.default;
18
18
  }
19
19
  });
20
- Object.defineProperty(exports, "SearchPreview", {
20
+ Object.defineProperty(exports, "TwitterPreview", {
21
21
  enumerable: true,
22
- get: function get() {
23
- return _searchPreview.default;
22
+ get: function () {
23
+ return _twitterPreview.default;
24
24
  }
25
25
  });
26
26
 
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
 
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
@@ -9,47 +9,47 @@ exports.default = SearchPreview;
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
- var _react = _interopRequireDefault(require("react"));
13
-
14
12
  var _helpers = require("../helpers");
15
13
 
16
14
  require("./style.scss");
17
15
 
18
- /**
19
- * External dependencies
20
- */
16
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
21
17
 
22
- /**
23
- * Style dependencies
24
- */
25
- var URL_LENGTH = 68;
26
- var TITLE_LENGTH = 63;
27
- var DESCRIPTION_LENGTH = 160;
18
+ const URL_LENGTH = 68;
19
+ const TITLE_LENGTH = 63;
20
+ const DESCRIPTION_LENGTH = 160;
28
21
 
29
- var googleUrl = function googleUrl(url) {
30
- var breadcrumb = url.replace(/^[^/]+[/]*/, '').split('/').join(' › ');
31
- var truncateBreadcrumb = (0, _helpers.firstValid)((0, _helpers.shortEnough)(URL_LENGTH), (0, _helpers.hardTruncation)(URL_LENGTH));
22
+ const googleUrl = url => {
23
+ const breadcrumb = url.replace(/^[^/]+[/]*/, '').split('/').join(' › ');
24
+ const truncateBreadcrumb = (0, _helpers.firstValid)((0, _helpers.shortEnough)(URL_LENGTH), (0, _helpers.hardTruncation)(URL_LENGTH));
32
25
  return truncateBreadcrumb(breadcrumb);
33
26
  };
34
27
 
35
- var googleTitle = (0, _helpers.firstValid)((0, _helpers.shortEnough)(TITLE_LENGTH), (0, _helpers.truncatedAtSpace)(TITLE_LENGTH - 40, TITLE_LENGTH + 10), (0, _helpers.hardTruncation)(TITLE_LENGTH));
36
- var googleDescription = (0, _helpers.firstValid)((0, _helpers.shortEnough)(DESCRIPTION_LENGTH), (0, _helpers.truncatedAtSpace)(DESCRIPTION_LENGTH - 80, DESCRIPTION_LENGTH + 10), (0, _helpers.hardTruncation)(DESCRIPTION_LENGTH));
28
+ const googleTitle = (0, _helpers.firstValid)((0, _helpers.shortEnough)(TITLE_LENGTH), (0, _helpers.truncatedAtSpace)(TITLE_LENGTH - 40, TITLE_LENGTH + 10), (0, _helpers.hardTruncation)(TITLE_LENGTH));
29
+ const googleDescription = (0, _helpers.firstValid)((0, _helpers.shortEnough)(DESCRIPTION_LENGTH), (0, _helpers.truncatedAtSpace)(DESCRIPTION_LENGTH - 80, DESCRIPTION_LENGTH + 10), (0, _helpers.hardTruncation)(DESCRIPTION_LENGTH));
37
30
 
38
31
  function SearchPreview(_ref) {
39
- var description = _ref.description,
40
- title = _ref.title,
41
- url = _ref.url;
42
- return /*#__PURE__*/_react.default.createElement("div", {
43
- className: "search-preview"
44
- }, /*#__PURE__*/_react.default.createElement("div", {
45
- className: "search-preview__display"
46
- }, /*#__PURE__*/_react.default.createElement("div", {
47
- className: "search-preview__url"
48
- }, googleUrl(url), " \u25BE"), /*#__PURE__*/_react.default.createElement("div", {
49
- className: "search-preview__title"
50
- }, googleTitle(title)), /*#__PURE__*/_react.default.createElement("div", {
51
- className: "search-preview__description"
52
- }, googleDescription((0, _helpers.stripHtmlTags)(description)))));
32
+ let {
33
+ description,
34
+ title,
35
+ url
36
+ } = _ref;
37
+ return (0, _jsxRuntime.jsx)("div", {
38
+ className: "search-preview",
39
+ children: (0, _jsxRuntime.jsxs)("div", {
40
+ className: "search-preview__display",
41
+ children: [(0, _jsxRuntime.jsxs)("div", {
42
+ className: "search-preview__url",
43
+ children: [googleUrl(url), " \u25BE"]
44
+ }), (0, _jsxRuntime.jsx)("div", {
45
+ className: "search-preview__title",
46
+ children: googleTitle(title)
47
+ }), (0, _jsxRuntime.jsx)("div", {
48
+ className: "search-preview__description",
49
+ children: googleDescription((0, _helpers.stripHtmlTags)(description))
50
+ })]
51
+ })
52
+ });
53
53
  }
54
54
 
55
55
  SearchPreview.propTypes = {
@@ -1,101 +1,54 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.default = exports.TwitterPreview = void 0;
11
9
 
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
19
-
20
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
21
11
 
22
- var _react = _interopRequireWildcard(require("react"));
12
+ var _react = require("react");
23
13
 
24
- var _helpers = require("../helpers");
14
+ var _tweet = require("./tweet");
25
15
 
26
16
  require("./style.scss");
27
17
 
28
- /**
29
- * External dependencies
30
- */
31
-
32
- /**
33
- * Internal dependencies
34
- */
35
-
36
- /**
37
- * Style dependencies
38
- */
39
- var DESCRIPTION_LENGTH = 200;
40
-
41
- var baseDomain = function baseDomain(url) {
42
- return url.replace(/^[^/]+[/]*/, '') // strip leading protocol
43
- .replace(/\/.*$/, '');
44
- }; // strip everything after the domain
45
-
46
-
47
- var twitterDescription = (0, _helpers.firstValid)((0, _helpers.shortEnough)(DESCRIPTION_LENGTH), (0, _helpers.hardTruncation)(DESCRIPTION_LENGTH));
48
-
49
- var TwitterPreview = /*#__PURE__*/function (_PureComponent) {
50
- (0, _inherits2.default)(TwitterPreview, _PureComponent);
51
-
52
- var _super = (0, _createSuper2.default)(TwitterPreview);
53
-
54
- function TwitterPreview() {
55
- (0, _classCallCheck2.default)(this, TwitterPreview);
56
- return _super.apply(this, arguments);
18
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
19
+
20
+ class TwitterPreview extends _react.PureComponent {
21
+ render() {
22
+ // Previous versions expected passed props to be the Twitter Card details for a single tweet,
23
+ // rather than an array of tweets. If the tweet array isn't passed, we can construct it from
24
+ // the old props.
25
+ const tweets = this.props.tweets || [{
26
+ text: '',
27
+ media: [],
28
+ card: { ...this.props,
29
+ type: 'large_image_summary' === this.props.type ? 'summary_large_image' : this.props.type
30
+ },
31
+ date: Date.now(),
32
+ name: 'Account Name',
33
+ profileImage: 'https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png',
34
+ screenName: '@account'
35
+ }];
36
+ return (0, _jsxRuntime.jsx)("div", {
37
+ className: "twitter-preview",
38
+ children: tweets && tweets.map((tweet, index) => {
39
+ return (0, _jsxRuntime.jsx)(_tweet.Tweet, {
40
+ isLast: index + 1 === tweets.length,
41
+ ...tweet
42
+ }, `twitter-preview__tweet-${index}`);
43
+ })
44
+ });
57
45
  }
58
46
 
59
- (0, _createClass2.default)(TwitterPreview, [{
60
- key: "render",
61
- value: function render() {
62
- var _this$props = this.props,
63
- url = _this$props.url,
64
- title = _this$props.title,
65
- type = _this$props.type,
66
- description = _this$props.description,
67
- image = _this$props.image;
68
- var previewImageStyle = {
69
- backgroundImage: 'url(' + image + ')'
70
- };
71
- return /*#__PURE__*/_react.default.createElement("div", {
72
- className: "twitter-preview"
73
- }, /*#__PURE__*/_react.default.createElement("div", {
74
- className: "twitter-preview__".concat(type)
75
- }, image && /*#__PURE__*/_react.default.createElement("div", {
76
- className: "twitter-preview__image",
77
- style: previewImageStyle
78
- }), /*#__PURE__*/_react.default.createElement("div", {
79
- className: "twitter-preview__body"
80
- }, /*#__PURE__*/_react.default.createElement("div", {
81
- className: "twitter-preview__title"
82
- }, title), /*#__PURE__*/_react.default.createElement("div", {
83
- className: "twitter-preview__description"
84
- }, twitterDescription((0, _helpers.stripHtmlTags)(description))), /*#__PURE__*/_react.default.createElement("div", {
85
- className: "twitter-preview__url"
86
- }, baseDomain(url || '')))));
87
- }
88
- }]);
89
- return TwitterPreview;
90
- }(_react.PureComponent);
47
+ }
91
48
 
92
49
  exports.TwitterPreview = TwitterPreview;
93
50
  TwitterPreview.propTypes = {
94
- url: _propTypes.default.string,
95
- title: _propTypes.default.string,
96
- type: _propTypes.default.string,
97
- description: _propTypes.default.string,
98
- image: _propTypes.default.string
51
+ tweets: _propTypes.default.array
99
52
  };
100
53
  var _default = TwitterPreview;
101
54
  exports.default = _default;