@automattic/social-previews 2.0.0 → 2.0.1-beta.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 (97) hide show
  1. package/dist/cjs/helpers.js +10 -5
  2. package/dist/cjs/helpers.js.map +1 -1
  3. package/dist/cjs/index.js +1 -0
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/instagram-preview/constants.js +6 -0
  6. package/dist/cjs/instagram-preview/constants.js.map +1 -0
  7. package/dist/cjs/instagram-preview/icons/bookmark.js +9 -0
  8. package/dist/cjs/instagram-preview/icons/bookmark.js.map +1 -0
  9. package/dist/cjs/instagram-preview/icons/comment.js +9 -0
  10. package/dist/cjs/instagram-preview/icons/comment.js.map +1 -0
  11. package/dist/cjs/instagram-preview/icons/default-avatar.js +9 -0
  12. package/dist/cjs/instagram-preview/icons/default-avatar.js.map +1 -0
  13. package/dist/cjs/instagram-preview/icons/heart.js +9 -0
  14. package/dist/cjs/instagram-preview/icons/heart.js.map +1 -0
  15. package/dist/cjs/instagram-preview/icons/menu.js +9 -0
  16. package/dist/cjs/instagram-preview/icons/menu.js.map +1 -0
  17. package/dist/cjs/instagram-preview/icons/share.js +9 -0
  18. package/dist/cjs/instagram-preview/icons/share.js.map +1 -0
  19. package/dist/cjs/instagram-preview/index.js +6 -0
  20. package/dist/cjs/instagram-preview/index.js.map +1 -0
  21. package/dist/cjs/instagram-preview/post-preview.js +30 -0
  22. package/dist/cjs/instagram-preview/post-preview.js.map +1 -0
  23. package/dist/cjs/instagram-preview/previews.js +15 -0
  24. package/dist/cjs/instagram-preview/previews.js.map +1 -0
  25. package/dist/cjs/instagram-preview/style.scss +103 -0
  26. package/dist/cjs/instagram-preview/types.js +3 -0
  27. package/dist/cjs/instagram-preview/types.js.map +1 -0
  28. package/dist/esm/helpers.js +10 -5
  29. package/dist/esm/helpers.js.map +1 -1
  30. package/dist/esm/index.js +1 -0
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/esm/instagram-preview/constants.js +3 -0
  33. package/dist/esm/instagram-preview/constants.js.map +1 -0
  34. package/dist/esm/instagram-preview/icons/bookmark.js +5 -0
  35. package/dist/esm/instagram-preview/icons/bookmark.js.map +1 -0
  36. package/dist/esm/instagram-preview/icons/comment.js +5 -0
  37. package/dist/esm/instagram-preview/icons/comment.js.map +1 -0
  38. package/dist/esm/instagram-preview/icons/default-avatar.js +5 -0
  39. package/dist/esm/instagram-preview/icons/default-avatar.js.map +1 -0
  40. package/dist/esm/instagram-preview/icons/heart.js +5 -0
  41. package/dist/esm/instagram-preview/icons/heart.js.map +1 -0
  42. package/dist/esm/instagram-preview/icons/menu.js +5 -0
  43. package/dist/esm/instagram-preview/icons/menu.js.map +1 -0
  44. package/dist/esm/instagram-preview/icons/share.js +5 -0
  45. package/dist/esm/instagram-preview/icons/share.js.map +1 -0
  46. package/dist/esm/instagram-preview/index.js +3 -0
  47. package/dist/esm/instagram-preview/index.js.map +1 -0
  48. package/dist/esm/instagram-preview/post-preview.js +26 -0
  49. package/dist/esm/instagram-preview/post-preview.js.map +1 -0
  50. package/dist/esm/instagram-preview/previews.js +10 -0
  51. package/dist/esm/instagram-preview/previews.js.map +1 -0
  52. package/dist/esm/instagram-preview/style.scss +103 -0
  53. package/dist/esm/instagram-preview/types.js +2 -0
  54. package/dist/esm/instagram-preview/types.js.map +1 -0
  55. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  56. package/dist/tsconfig.tsbuildinfo +1 -1
  57. package/dist/types/helpers.d.ts +2 -1
  58. package/dist/types/helpers.d.ts.map +1 -1
  59. package/dist/types/index.d.ts +1 -0
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/dist/types/instagram-preview/constants.d.ts +3 -0
  62. package/dist/types/instagram-preview/constants.d.ts.map +1 -0
  63. package/dist/types/instagram-preview/icons/bookmark.d.ts +2 -0
  64. package/dist/types/instagram-preview/icons/bookmark.d.ts.map +1 -0
  65. package/dist/types/instagram-preview/icons/comment.d.ts +2 -0
  66. package/dist/types/instagram-preview/icons/comment.d.ts.map +1 -0
  67. package/dist/types/instagram-preview/icons/default-avatar.d.ts +2 -0
  68. package/dist/types/instagram-preview/icons/default-avatar.d.ts.map +1 -0
  69. package/dist/types/instagram-preview/icons/heart.d.ts +2 -0
  70. package/dist/types/instagram-preview/icons/heart.d.ts.map +1 -0
  71. package/dist/types/instagram-preview/icons/menu.d.ts +2 -0
  72. package/dist/types/instagram-preview/icons/menu.d.ts.map +1 -0
  73. package/dist/types/instagram-preview/icons/share.d.ts +2 -0
  74. package/dist/types/instagram-preview/icons/share.d.ts.map +1 -0
  75. package/dist/types/instagram-preview/index.d.ts +3 -0
  76. package/dist/types/instagram-preview/index.d.ts.map +1 -0
  77. package/dist/types/instagram-preview/post-preview.d.ts +4 -0
  78. package/dist/types/instagram-preview/post-preview.d.ts.map +1 -0
  79. package/dist/types/instagram-preview/previews.d.ts +3 -0
  80. package/dist/types/instagram-preview/previews.d.ts.map +1 -0
  81. package/dist/types/instagram-preview/types.d.ts +8 -0
  82. package/dist/types/instagram-preview/types.d.ts.map +1 -0
  83. package/package.json +1 -1
  84. package/src/helpers.ts +13 -8
  85. package/src/index.ts +1 -0
  86. package/src/instagram-preview/constants.tsx +2 -0
  87. package/src/instagram-preview/icons/bookmark.tsx +21 -0
  88. package/src/instagram-preview/icons/comment.tsx +20 -0
  89. package/src/instagram-preview/icons/default-avatar.tsx +10 -0
  90. package/src/instagram-preview/icons/heart.tsx +14 -0
  91. package/src/instagram-preview/icons/menu.tsx +24 -0
  92. package/src/instagram-preview/icons/share.tsx +30 -0
  93. package/src/instagram-preview/index.tsx +2 -0
  94. package/src/instagram-preview/post-preview.tsx +76 -0
  95. package/src/instagram-preview/previews.tsx +33 -0
  96. package/src/instagram-preview/style.scss +103 -0
  97. package/src/instagram-preview/types.ts +9 -0
@@ -0,0 +1,76 @@
1
+ import { __ } from '@wordpress/i18n';
2
+ import { preparePreviewText } from '../helpers';
3
+ import { FEED_TEXT_MAX_LENGTH, FEED_TEXT_MAX_LINES } from './constants';
4
+ import { Bookmark as BookmarkIcon } from './icons/bookmark';
5
+ import { Comment as CommentIcon } from './icons/comment';
6
+ import { DefaultAvatar } from './icons/default-avatar';
7
+ import { Heart as HeartIcon } from './icons/heart';
8
+ import { Menu as MenuIcon } from './icons/menu';
9
+ import { Share as ShareIcon } from './icons/share';
10
+ import { InstagramPreviewProps } from './types';
11
+
12
+ import './style.scss';
13
+
14
+ export function InstagramPostPreview( {
15
+ image,
16
+ name,
17
+ profileImage,
18
+ caption,
19
+ }: InstagramPreviewProps ) {
20
+ const username = name || 'username';
21
+
22
+ return (
23
+ <div className="instagram-preview__wrapper">
24
+ <section className="instagram-preview__container">
25
+ <div className="instagram-preview__header">
26
+ <div className="instagram-preview__header--avatar">
27
+ { profileImage ? <img src={ profileImage } alt="" /> : <DefaultAvatar /> }
28
+ </div>
29
+ <div className="instagram-preview__header--profile">
30
+ <div className="instagram-preview__header--profile-name">{ username }</div>
31
+ <div className="instagram-preview__header--profile-menu">
32
+ <MenuIcon />
33
+ </div>
34
+ </div>
35
+ </div>
36
+ <div className="instagram-preview__media">
37
+ <img className="instagram-preview__media--image" src={ image } alt="" />
38
+ </div>
39
+ <div className="instagram-preview__content">
40
+ <section className="instagram-preview__content--actions">
41
+ <div className="instagram-preview__content--actions-primary">
42
+ <HeartIcon />
43
+ <CommentIcon />
44
+ <ShareIcon />
45
+ </div>
46
+ <div className="instagram-preview__content--actions-secondary">
47
+ <BookmarkIcon />
48
+ </div>
49
+ </section>
50
+ <div className="instagram-preview__content--body">
51
+ <div className="instagram-preview__content--name">{ username }</div>
52
+ &nbsp;
53
+ { caption ? (
54
+ <div
55
+ className="instagram-preview__content--text"
56
+ // TODO: Replace `dangerouslySetInnerHTML` with `createInterpolateElement` inside `preparePreviewText`
57
+ // eslint-disable-next-line react/no-danger
58
+ dangerouslySetInnerHTML={ {
59
+ __html: preparePreviewText( caption, {
60
+ platform: 'instagram',
61
+ maxChars: FEED_TEXT_MAX_LENGTH,
62
+ maxLines: FEED_TEXT_MAX_LINES,
63
+ hyperlinkUrls: false,
64
+ } ),
65
+ } }
66
+ />
67
+ ) : null }
68
+ </div>
69
+ <div className="instagram-preview__content--footer">
70
+ <span>{ __( 'View one comment', 'social-previews' ) }</span>
71
+ </div>
72
+ </div>
73
+ </section>
74
+ </div>
75
+ );
76
+ }
@@ -0,0 +1,33 @@
1
+ import { __ } from '@wordpress/i18n';
2
+ import SectionHeading from '../shared/section-heading';
3
+ import { InstagramPostPreview } from './post-preview';
4
+ import type { InstagramPreviewsProps } from './types';
5
+
6
+ export const InstagramPreviews: React.FC< InstagramPreviewsProps > = ( {
7
+ headingLevel,
8
+ hideLinkPreview,
9
+ hidePostPreview,
10
+ ...props
11
+ } ) => {
12
+ return (
13
+ <div className="social-preview instagram-preview">
14
+ { ! hidePostPreview && (
15
+ <section className="social-preview__section instagram-preview__section">
16
+ <SectionHeading level={ headingLevel }>
17
+ {
18
+ // translators: refers to a social post on Instagram
19
+ __( 'Your post', 'social-previews' )
20
+ }
21
+ </SectionHeading>
22
+ <p className="social-preview__section-desc">
23
+ { __(
24
+ 'This is what your social post will look like on Instagram:',
25
+ 'social-previews'
26
+ ) }
27
+ </p>
28
+ <InstagramPostPreview { ...props } />
29
+ </section>
30
+ ) }
31
+ </div>
32
+ );
33
+ };
@@ -0,0 +1,103 @@
1
+
2
+
3
+ .instagram-preview {
4
+ &__wrapper {
5
+ padding: 20px;
6
+ background-color: #fff;
7
+ margin-inline: auto;
8
+ max-width: clamp(200px, 100%, 555px);
9
+ }
10
+
11
+ // When the preview is in a section of all previews
12
+ &__section &__wrapper {
13
+ padding: 0;
14
+ }
15
+
16
+ &__section.social-preview__section {
17
+ width: clamp(200px, 100%, 555px);
18
+ }
19
+
20
+ &__container {
21
+
22
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.08);
23
+ overflow: hidden;
24
+ }
25
+
26
+ &__header {
27
+
28
+ padding: 0.5rem 1rem;
29
+ display: flex;
30
+ gap: 0.5rem;
31
+
32
+ &--avatar {
33
+ display: flex;
34
+ align-items: center;
35
+ max-width: 32px;
36
+ max-height: 32px;
37
+ }
38
+
39
+ &--avatar img {
40
+ width: 100%;
41
+ height: 100%;
42
+ border-radius: 50%;
43
+ }
44
+
45
+ &--profile {
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: space-between;
49
+ flex-grow: 1;
50
+ }
51
+
52
+ &--profile-name {
53
+ font-weight: 700;
54
+ }
55
+ }
56
+
57
+ &__media {
58
+ display: flex;
59
+
60
+ &--image {
61
+ width: 100%;
62
+ aspect-ratio: 1;
63
+ object-fit: cover;
64
+ }
65
+ }
66
+
67
+ &__content {
68
+ display: flex;
69
+ flex-direction: column;
70
+ gap: 0.5rem;
71
+ padding: 0.5rem 1rem;
72
+
73
+ a {
74
+ text-decoration: none;
75
+ color: rgb(0, 55, 107);
76
+ }
77
+
78
+ &--actions {
79
+ display: flex;
80
+ justify-content: space-between;
81
+ }
82
+
83
+ &--actions-primary {
84
+ display: flex;
85
+ align-items: center;
86
+ gap: 1rem;
87
+ }
88
+
89
+ &--name {
90
+ font-weight: 600;
91
+ display: inline;
92
+ }
93
+
94
+ &--text {
95
+ display: inline;
96
+ }
97
+
98
+ &--footer {
99
+ font-weight: 400;
100
+ color: rgb(115, 115, 115);
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,9 @@
1
+ import { SocialPreviewBaseProps, SocialPreviewsBaseProps } from '../types';
2
+
3
+ export type InstagramPreviewProps = Pick< SocialPreviewBaseProps, 'image' > & {
4
+ name: string;
5
+ profileImage: string;
6
+ caption?: string;
7
+ };
8
+
9
+ export type InstagramPreviewsProps = InstagramPreviewProps & SocialPreviewsBaseProps;