react-email 1.4.2-canary.1 → 1.4.2-canary.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/.react-email/next-env.d.ts +0 -0
- package/.react-email/package.json +0 -0
- package/.react-email/postcss.config.js +0 -0
- package/.react-email/src/components/button.tsx +0 -0
- package/.react-email/src/components/code.tsx +0 -0
- package/.react-email/src/components/heading.tsx +0 -0
- package/.react-email/src/components/icon-base.tsx +0 -0
- package/.react-email/src/components/icon-button.tsx +0 -0
- package/.react-email/src/components/icon-check.tsx +0 -0
- package/.react-email/src/components/icon-clipboard.tsx +0 -0
- package/.react-email/src/components/icon-download.tsx +0 -0
- package/.react-email/src/components/index.ts +0 -0
- package/.react-email/src/components/layout.tsx +0 -0
- package/.react-email/src/components/logo.tsx +0 -0
- package/.react-email/src/components/send.tsx +0 -0
- package/.react-email/src/components/sidebar.tsx +0 -0
- package/.react-email/src/components/text.tsx +0 -0
- package/.react-email/src/components/tooltip-content.tsx +0 -0
- package/.react-email/src/components/tooltip.tsx +0 -0
- package/.react-email/src/components/topbar.tsx +0 -0
- package/.react-email/src/pages/_app.tsx +26 -0
- package/.react-email/src/pages/_document.tsx +0 -0
- package/.react-email/src/pages/index.tsx +0 -0
- package/.react-email/src/styles/globals.css +0 -0
- package/.react-email/src/utils/as.ts +0 -0
- package/.react-email/src/utils/copy-text-to-clipboard.ts +0 -0
- package/.react-email/src/utils/index.ts +0 -0
- package/.react-email/src/utils/unreachable.ts +0 -0
- package/.react-email/tailwind.config.js +0 -0
- package/.react-email/tsconfig.json +0 -0
- package/dist/commands/exportTemplates.js +20 -1
- package/emails/airbnb-review.tsx +163 -0
- package/emails/dropbox-reset-password.tsx +85 -0
- package/emails/google-play-policy-update.tsx +229 -0
- package/emails/koala-welcome.tsx +97 -0
- package/emails/linear-login-code.tsx +124 -0
- package/emails/notion-magic-link.tsx +133 -0
- package/emails/plaid-verify-identity.tsx +133 -0
- package/emails/raycast-magic-link.tsx +107 -0
- package/emails/static/airbnb-logo.png +0 -0
- package/emails/static/airbnb-review-user.jpg +0 -0
- package/emails/static/chat.png +0 -0
- package/emails/static/dropbox.png +0 -0
- package/emails/static/google-play-academy.png +0 -0
- package/emails/static/google-play-chat.png +0 -0
- package/emails/static/google-play-footer.png +0 -0
- package/emails/static/google-play-header.png +0 -0
- package/emails/static/google-play-icon.png +0 -0
- package/emails/static/google-play-logo.png +0 -0
- package/emails/static/google-play-pl.png +0 -0
- package/emails/static/google-play.png +0 -0
- package/emails/static/linear-logo.png +0 -0
- package/emails/static/notion-logo.png +0 -0
- package/emails/static/plaid.png +0 -0
- package/emails/static/raycast-bg.png +0 -0
- package/emails/static/raycast-logo.png +0 -0
- package/emails/static/stripe-logo.png +0 -0
- package/emails/static/twitch-icon-facebook.png +0 -0
- package/emails/static/twitch-icon-twitter.png +0 -0
- package/emails/static/twitch-logo.png +0 -0
- package/emails/static/vercel-arrow.png +0 -0
- package/emails/static/vercel-logo.png +0 -0
- package/emails/static/yelp-footer.png +0 -0
- package/emails/static/yelp-header.png +0 -0
- package/emails/static/yelp-logo.png +0 -0
- package/emails/stripe-welcome.tsx +152 -0
- package/emails/twitch-reset-password.tsx +138 -0
- package/emails/vercel-invite-user.tsx +196 -0
- package/emails/yelp-recent-login.tsx +158 -0
- package/package.json +4 -3
- package/source/commands/exportTemplates.ts +28 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Button } from '@react-email/button';
|
|
2
|
+
import { Container } from '@react-email/container';
|
|
3
|
+
import { Head } from '@react-email/head';
|
|
4
|
+
import { Hr } from '@react-email/hr';
|
|
5
|
+
import { Html } from '@react-email/html';
|
|
6
|
+
import { Img } from '@react-email/img';
|
|
7
|
+
import { Link } from '@react-email/link';
|
|
8
|
+
import { Preview } from '@react-email/preview';
|
|
9
|
+
import { Section } from '@react-email/section';
|
|
10
|
+
import { Text } from '@react-email/text';
|
|
11
|
+
import * as React from 'react';
|
|
12
|
+
|
|
13
|
+
export default function Email() {
|
|
14
|
+
return (
|
|
15
|
+
<Html>
|
|
16
|
+
<Head />
|
|
17
|
+
<Preview>You're now ready to make live transactions with Stripe!</Preview>
|
|
18
|
+
<Section style={main}>
|
|
19
|
+
<Container style={container}>
|
|
20
|
+
<Section style={box}>
|
|
21
|
+
<Img
|
|
22
|
+
src="/static/stripe-logo.png"
|
|
23
|
+
width="49"
|
|
24
|
+
height="21"
|
|
25
|
+
alt="Stripe"
|
|
26
|
+
/>
|
|
27
|
+
<Hr style={hr} />
|
|
28
|
+
<Text style={paragraph}>
|
|
29
|
+
Thanks for submitting your account information. You're now ready
|
|
30
|
+
to make live transactions with Stripe!
|
|
31
|
+
</Text>
|
|
32
|
+
<Text style={paragraph}>
|
|
33
|
+
You can view your payments and a variety of other information
|
|
34
|
+
about your account right from your dashboard.
|
|
35
|
+
</Text>
|
|
36
|
+
<Button
|
|
37
|
+
pX={10}
|
|
38
|
+
pY={10}
|
|
39
|
+
style={button}
|
|
40
|
+
href="https://dashboard.stripe.com/login"
|
|
41
|
+
>
|
|
42
|
+
View your Stripe Dashboard
|
|
43
|
+
</Button>
|
|
44
|
+
<Hr style={hr} />
|
|
45
|
+
<Text style={paragraph}>
|
|
46
|
+
If you haven't finished your integration, you might find our{' '}
|
|
47
|
+
<Link style={anchor} href="https://stripe.com/docs">
|
|
48
|
+
docs
|
|
49
|
+
</Link>{' '}
|
|
50
|
+
handy.
|
|
51
|
+
</Text>
|
|
52
|
+
<Text style={paragraph}>
|
|
53
|
+
Once you're ready to start accepting payments, you'll just need to
|
|
54
|
+
use your live{' '}
|
|
55
|
+
<Link
|
|
56
|
+
style={anchor}
|
|
57
|
+
href="https://dashboard.stripe.com/login?redirect=%2Fapikeys"
|
|
58
|
+
>
|
|
59
|
+
API keys
|
|
60
|
+
</Link>{' '}
|
|
61
|
+
instead of your test API keys. Your account can simultaneously be
|
|
62
|
+
used for both test and live requests, so you can continue testing
|
|
63
|
+
while accepting live payments. Check out our{' '}
|
|
64
|
+
<Link style={anchor} href="https://stripe.com/docs/dashboard">
|
|
65
|
+
tutorial about account basics
|
|
66
|
+
</Link>
|
|
67
|
+
.
|
|
68
|
+
</Text>
|
|
69
|
+
<Text style={paragraph}>
|
|
70
|
+
Finally, we've put together a{' '}
|
|
71
|
+
<Link
|
|
72
|
+
style={anchor}
|
|
73
|
+
href="https://stripe.com/docs/checklist/website"
|
|
74
|
+
>
|
|
75
|
+
quick checklist
|
|
76
|
+
</Link>{' '}
|
|
77
|
+
to ensure your website conforms to card network standards.
|
|
78
|
+
</Text>
|
|
79
|
+
<Text style={paragraph}>
|
|
80
|
+
We'll be here to help you with any step along the way. You can
|
|
81
|
+
find answers to most questions and get in touch with us on our{' '}
|
|
82
|
+
<Link style={anchor} href="https://support.stripe.com/">
|
|
83
|
+
support site
|
|
84
|
+
</Link>
|
|
85
|
+
.
|
|
86
|
+
</Text>
|
|
87
|
+
<Text style={paragraph}>— The Stripe team</Text>
|
|
88
|
+
<Hr style={hr} />
|
|
89
|
+
<Text style={footer}>
|
|
90
|
+
Stripe, 354 Oyster Point Blvd, South San Francisco, CA 94080
|
|
91
|
+
</Text>
|
|
92
|
+
</Section>
|
|
93
|
+
</Container>
|
|
94
|
+
</Section>
|
|
95
|
+
</Html>
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const main = {
|
|
100
|
+
backgroundColor: '#f6f9fc',
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const container = {
|
|
104
|
+
backgroundColor: '#ffffff',
|
|
105
|
+
margin: '0 auto',
|
|
106
|
+
padding: '20px 0 48px',
|
|
107
|
+
marginBottom: '64px',
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const box = {
|
|
111
|
+
padding: '0 48px',
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const hr = {
|
|
115
|
+
borderColor: '#e6ebf1',
|
|
116
|
+
margin: '20px 0',
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const paragraph = {
|
|
120
|
+
color: '#525f7f',
|
|
121
|
+
fontFamily:
|
|
122
|
+
'-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif',
|
|
123
|
+
fontSize: '16px',
|
|
124
|
+
lineHeight: '24px',
|
|
125
|
+
textAlign: 'left' as const,
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const anchor = {
|
|
129
|
+
color: '#556cd6',
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const button = {
|
|
133
|
+
backgroundColor: '#656ee8',
|
|
134
|
+
borderRadius: '5px',
|
|
135
|
+
color: '#fff',
|
|
136
|
+
fontFamily:
|
|
137
|
+
'-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif',
|
|
138
|
+
fontSize: '16px',
|
|
139
|
+
fontWeight: 'bold',
|
|
140
|
+
textDecoration: 'none',
|
|
141
|
+
textAlign: 'center' as const,
|
|
142
|
+
display: 'block',
|
|
143
|
+
width: '100%',
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const footer = {
|
|
147
|
+
color: '#8898aa',
|
|
148
|
+
fontFamily:
|
|
149
|
+
'-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif',
|
|
150
|
+
fontSize: '12px',
|
|
151
|
+
lineHeight: '16px',
|
|
152
|
+
};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Container } from '@react-email/container';
|
|
2
|
+
import { Head } from '@react-email/head';
|
|
3
|
+
import { Html } from '@react-email/html';
|
|
4
|
+
import { Img } from '@react-email/img';
|
|
5
|
+
import { Preview } from '@react-email/preview';
|
|
6
|
+
import { Section } from '@react-email/section';
|
|
7
|
+
import { Text } from '@react-email/text';
|
|
8
|
+
import { Link } from '@react-email/link';
|
|
9
|
+
import * as React from 'react';
|
|
10
|
+
|
|
11
|
+
export default function Email() {
|
|
12
|
+
return (
|
|
13
|
+
<Html>
|
|
14
|
+
<Head />
|
|
15
|
+
<Preview>Yelp recent login</Preview>
|
|
16
|
+
<Section style={main}>
|
|
17
|
+
<Container style={container}>
|
|
18
|
+
<Section style={logo}>
|
|
19
|
+
<Img width={114} src="/static/twitch-logo.png" />
|
|
20
|
+
</Section>
|
|
21
|
+
<div style={sectionsBorders}>
|
|
22
|
+
<Section style={sectionBorder} />
|
|
23
|
+
<Section style={sectionCenter} />
|
|
24
|
+
<Section style={sectionBorder} />
|
|
25
|
+
</div>
|
|
26
|
+
<Section style={content}>
|
|
27
|
+
<Text style={paragraph}>Hi zenorocha,</Text>
|
|
28
|
+
<Text style={paragraph}>
|
|
29
|
+
You updated the password for your Twitch account on June 23, 2022
|
|
30
|
+
4:06:00 pm UTC. If this was you, then no further action is
|
|
31
|
+
required.
|
|
32
|
+
</Text>
|
|
33
|
+
<Text style={paragraph}>
|
|
34
|
+
However if you did NOT perform this password change, please
|
|
35
|
+
<Link href="#" style={link}>
|
|
36
|
+
{' '}
|
|
37
|
+
reset your account password
|
|
38
|
+
</Link>{' '}
|
|
39
|
+
immediately.
|
|
40
|
+
</Text>
|
|
41
|
+
<Text style={paragraph}>
|
|
42
|
+
Remember to use a password that is both strong and unique to your
|
|
43
|
+
Twitch account. To learn more about how to create a strong and
|
|
44
|
+
unique password,
|
|
45
|
+
<Link href="#" style={link}>
|
|
46
|
+
{' '}
|
|
47
|
+
click here.
|
|
48
|
+
</Link>
|
|
49
|
+
</Text>
|
|
50
|
+
<Text style={paragraph}>
|
|
51
|
+
Still have questions? Please contact
|
|
52
|
+
<Link href="#" style={link}>
|
|
53
|
+
{' '}
|
|
54
|
+
Twitch Support
|
|
55
|
+
</Link>
|
|
56
|
+
</Text>
|
|
57
|
+
<Text style={paragraph}>
|
|
58
|
+
Thanks,
|
|
59
|
+
<br />
|
|
60
|
+
Twitch Support Team
|
|
61
|
+
</Text>
|
|
62
|
+
</Section>
|
|
63
|
+
</Container>
|
|
64
|
+
|
|
65
|
+
<Section style={footer}>
|
|
66
|
+
<div style={iconsSocial}>
|
|
67
|
+
<Img src="/static/twitch-icon-twitter.png" />
|
|
68
|
+
<Img src="/static/twitch-icon-facebook.png" />
|
|
69
|
+
</div>
|
|
70
|
+
<Text style={{ textAlign: 'center', color: '#706a7b' }}>
|
|
71
|
+
© 2022 Twitch, All Rights Reserved <br />
|
|
72
|
+
350 Bush Street, 2nd Floor, San Francisco, CA, 94104 - USA
|
|
73
|
+
</Text>
|
|
74
|
+
</Section>
|
|
75
|
+
</Section>
|
|
76
|
+
</Html>
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const fontFamily = 'HelveticaNeue,Helvetica,Arial,sans-serif';
|
|
81
|
+
|
|
82
|
+
const main = {
|
|
83
|
+
backgroundColor: '#efeef1',
|
|
84
|
+
fontFamily,
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const paragraph = {
|
|
88
|
+
lineHeight: 1.5,
|
|
89
|
+
fontSize: 14,
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const container = {
|
|
93
|
+
width: '580px',
|
|
94
|
+
margin: '30px auto',
|
|
95
|
+
backgroundColor: '#ffffff',
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const footer = {
|
|
99
|
+
width: '580px',
|
|
100
|
+
margin: '0 auto',
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const content = {
|
|
104
|
+
padding: '5px 50px 10px 60px',
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const logo = {
|
|
108
|
+
display: 'flex',
|
|
109
|
+
justifyContent: 'center',
|
|
110
|
+
alingItems: 'center',
|
|
111
|
+
padding: 30,
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const sectionsBorders = {
|
|
115
|
+
width: '100%',
|
|
116
|
+
display: 'flex',
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const sectionBorder = {
|
|
120
|
+
borderBottom: '1px solid rgb(238,238,238)',
|
|
121
|
+
width: '249px',
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const sectionCenter = {
|
|
125
|
+
borderBottom: '1px solid rgb(145,71,255)',
|
|
126
|
+
width: '102px',
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const iconsSocial = {
|
|
130
|
+
display: 'flex',
|
|
131
|
+
justifyContent: 'center',
|
|
132
|
+
alignItems: 'center',
|
|
133
|
+
gap: 15,
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
const link = {
|
|
137
|
+
textDecoration: 'underline',
|
|
138
|
+
};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { Button } from '@react-email/button';
|
|
2
|
+
import { Container } from '@react-email/container';
|
|
3
|
+
import { Head } from '@react-email/head';
|
|
4
|
+
import { Hr } from '@react-email/hr';
|
|
5
|
+
import { Html } from '@react-email/html';
|
|
6
|
+
import { Img } from '@react-email/img';
|
|
7
|
+
import { Link } from '@react-email/link';
|
|
8
|
+
import { Preview } from '@react-email/preview';
|
|
9
|
+
import { Section } from '@react-email/section';
|
|
10
|
+
import { Text } from '@react-email/text';
|
|
11
|
+
import * as React from 'react';
|
|
12
|
+
|
|
13
|
+
export default function Email() {
|
|
14
|
+
return (
|
|
15
|
+
<Html>
|
|
16
|
+
<Head />
|
|
17
|
+
<Preview>Join bukinoshita on Vercel</Preview>
|
|
18
|
+
<Section style={main}>
|
|
19
|
+
<Container style={container}>
|
|
20
|
+
<Section style={{ marginTop: '32px' }}>
|
|
21
|
+
<Img
|
|
22
|
+
src="/static/vercel-logo.png"
|
|
23
|
+
width="40"
|
|
24
|
+
height="37"
|
|
25
|
+
alt="Vercel"
|
|
26
|
+
style={logo}
|
|
27
|
+
/>
|
|
28
|
+
</Section>
|
|
29
|
+
<Text style={h1}>
|
|
30
|
+
Join <strong>My Project</strong> on <strong>Vercel</strong>
|
|
31
|
+
</Text>
|
|
32
|
+
<Text style={text}>Hello zenorocha,</Text>
|
|
33
|
+
<Text style={text}>
|
|
34
|
+
<strong>bukinoshita</strong> (
|
|
35
|
+
<Link href="mailto:bukinoshita@example.com" style={link}>
|
|
36
|
+
bukinoshita@example.com
|
|
37
|
+
</Link>
|
|
38
|
+
) has invited you to the <strong>My Project</strong> team on{' '}
|
|
39
|
+
<strong>Vercel</strong>.
|
|
40
|
+
</Text>
|
|
41
|
+
<table
|
|
42
|
+
style={spacing}
|
|
43
|
+
border={0}
|
|
44
|
+
cellPadding="0"
|
|
45
|
+
cellSpacing="10"
|
|
46
|
+
align="center"
|
|
47
|
+
>
|
|
48
|
+
<tr>
|
|
49
|
+
<td style={center} align="left" valign="middle">
|
|
50
|
+
<Img
|
|
51
|
+
style={avatar}
|
|
52
|
+
src="https://vercel.com/api/www/avatar/?u=zenorocha&s=240&format=png"
|
|
53
|
+
width="64"
|
|
54
|
+
height="64"
|
|
55
|
+
/>
|
|
56
|
+
</td>
|
|
57
|
+
<td style={center} align="left" valign="middle">
|
|
58
|
+
<Img
|
|
59
|
+
src="/static/vercel-arrow.png"
|
|
60
|
+
width="12"
|
|
61
|
+
height="9"
|
|
62
|
+
alt="invited you to"
|
|
63
|
+
/>
|
|
64
|
+
</td>
|
|
65
|
+
<td style={center} align="left" valign="middle">
|
|
66
|
+
<Img
|
|
67
|
+
style={avatar}
|
|
68
|
+
src="https://vercel.com/api/www/avatar/?teamId=team_3e17ZatpKJ1imLQdTyrLeBoX&s=240&format=png"
|
|
69
|
+
width="64"
|
|
70
|
+
height="64"
|
|
71
|
+
/>
|
|
72
|
+
</td>
|
|
73
|
+
</tr>
|
|
74
|
+
</table>
|
|
75
|
+
<Section style={{ textAlign: 'center' }}>
|
|
76
|
+
<Button
|
|
77
|
+
pX={20}
|
|
78
|
+
pY={12}
|
|
79
|
+
style={btn}
|
|
80
|
+
href="https://vercel.com/teams/invite/foo"
|
|
81
|
+
>
|
|
82
|
+
Join the team
|
|
83
|
+
</Button>
|
|
84
|
+
</Section>
|
|
85
|
+
<Text style={text}>
|
|
86
|
+
<br />
|
|
87
|
+
or copy and paste this URL into your browser:{' '}
|
|
88
|
+
<Link
|
|
89
|
+
href="https://vercel.com/teams/invite/foo"
|
|
90
|
+
target="_blank"
|
|
91
|
+
style={link}
|
|
92
|
+
rel="noreferrer"
|
|
93
|
+
>
|
|
94
|
+
https://vercel.com/teams/invite/foo
|
|
95
|
+
</Link>
|
|
96
|
+
</Text>
|
|
97
|
+
<Hr style={hr} />
|
|
98
|
+
<Text style={footer}>
|
|
99
|
+
This invitation was intended for{' '}
|
|
100
|
+
<span style={black}>zenorocha</span>.This invite was sent from{' '}
|
|
101
|
+
<span style={black}>204.13.186.218</span> located in{' '}
|
|
102
|
+
<span style={black}>São Paulo, Brazil</span>. If you were not
|
|
103
|
+
expecting this invitation, you can ignore this email. If you are
|
|
104
|
+
concerned about your account's safety, please reply to this email to
|
|
105
|
+
get in touch with us.
|
|
106
|
+
</Text>
|
|
107
|
+
</Container>
|
|
108
|
+
</Section>
|
|
109
|
+
</Html>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const main = {
|
|
114
|
+
backgroundColor: '#ffffff',
|
|
115
|
+
margin: '0 auto',
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const container = {
|
|
119
|
+
border: '1px solid #eaeaea',
|
|
120
|
+
borderRadius: '5px',
|
|
121
|
+
margin: '40px auto',
|
|
122
|
+
padding: '20px',
|
|
123
|
+
width: '465px',
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const logo = {
|
|
127
|
+
margin: '0 auto',
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const h1 = {
|
|
131
|
+
color: '#000',
|
|
132
|
+
fontFamily:
|
|
133
|
+
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
|
134
|
+
fontSize: '24px',
|
|
135
|
+
fontWeight: 'normal',
|
|
136
|
+
textAlign: 'center' as const,
|
|
137
|
+
margin: '30px 0',
|
|
138
|
+
padding: '0',
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
const avatar = {
|
|
142
|
+
borderRadius: '100%',
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const link = {
|
|
146
|
+
color: '#067df7',
|
|
147
|
+
textDecoration: 'none',
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const text = {
|
|
151
|
+
color: '#000',
|
|
152
|
+
fontFamily:
|
|
153
|
+
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
|
154
|
+
fontSize: '14px',
|
|
155
|
+
lineHeight: '24px',
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
const black = {
|
|
159
|
+
color: 'black',
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
const center = {
|
|
163
|
+
verticalAlign: 'middle',
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const btn = {
|
|
167
|
+
backgroundColor: '#000',
|
|
168
|
+
borderRadius: '5px',
|
|
169
|
+
color: '#fff',
|
|
170
|
+
fontFamily:
|
|
171
|
+
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
|
172
|
+
fontSize: '12px',
|
|
173
|
+
fontWeight: 500,
|
|
174
|
+
lineHeight: '50px',
|
|
175
|
+
textDecoration: 'none',
|
|
176
|
+
textAlign: 'center' as const,
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
const spacing = {
|
|
180
|
+
marginBottom: '26px',
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
const hr = {
|
|
184
|
+
border: 'none',
|
|
185
|
+
borderTop: '1px solid #eaeaea',
|
|
186
|
+
margin: '26px 0',
|
|
187
|
+
width: '100%',
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
const footer = {
|
|
191
|
+
color: '#666666',
|
|
192
|
+
fontFamily:
|
|
193
|
+
"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
|
|
194
|
+
fontSize: '12px',
|
|
195
|
+
lineHeight: '24px',
|
|
196
|
+
};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { Container } from '@react-email/container';
|
|
2
|
+
import { Button } from '@react-email/button';
|
|
3
|
+
import { Head } from '@react-email/head';
|
|
4
|
+
import { Html } from '@react-email/html';
|
|
5
|
+
import { Img } from '@react-email/img';
|
|
6
|
+
import { Preview } from '@react-email/preview';
|
|
7
|
+
import { Section } from '@react-email/section';
|
|
8
|
+
import { Text } from '@react-email/text';
|
|
9
|
+
import * as React from 'react';
|
|
10
|
+
|
|
11
|
+
export default function Email() {
|
|
12
|
+
return (
|
|
13
|
+
<Html>
|
|
14
|
+
<Head />
|
|
15
|
+
<Preview>Yelp recent login</Preview>
|
|
16
|
+
<Section style={main}>
|
|
17
|
+
<Container style={container}>
|
|
18
|
+
<Section style={logo}>
|
|
19
|
+
<Img src="/static/yelp-logo.png" />
|
|
20
|
+
</Section>
|
|
21
|
+
|
|
22
|
+
<Section style={content}>
|
|
23
|
+
<Img width={620} src="/static/yelp-header.png" />
|
|
24
|
+
|
|
25
|
+
<Section style={boxInfos}>
|
|
26
|
+
<Section>
|
|
27
|
+
<Text
|
|
28
|
+
style={{
|
|
29
|
+
...paragraph,
|
|
30
|
+
fontSize: 32,
|
|
31
|
+
fontWeight: 'bold',
|
|
32
|
+
textAlign: 'center',
|
|
33
|
+
}}
|
|
34
|
+
>
|
|
35
|
+
Hi Zeno,
|
|
36
|
+
</Text>
|
|
37
|
+
<Text
|
|
38
|
+
style={{
|
|
39
|
+
...paragraph,
|
|
40
|
+
fontSize: 26,
|
|
41
|
+
fontWeight: 'bold',
|
|
42
|
+
textAlign: 'center',
|
|
43
|
+
}}
|
|
44
|
+
>
|
|
45
|
+
We noticed a recent login to your Yelp account.
|
|
46
|
+
</Text>
|
|
47
|
+
</Section>
|
|
48
|
+
|
|
49
|
+
<Section>
|
|
50
|
+
<Text style={paragraph}>
|
|
51
|
+
<b>Time: </b>Today, September 7, 2022, 10:58 am {'('}
|
|
52
|
+
US/Pacific
|
|
53
|
+
{')'}
|
|
54
|
+
</Text>
|
|
55
|
+
<Text style={{ ...paragraph, marginTop: -5 }}>
|
|
56
|
+
<b>Device: </b>Chrome on Mac OS X
|
|
57
|
+
</Text>
|
|
58
|
+
<Text style={{ ...paragraph, marginTop: -5 }}>
|
|
59
|
+
<b>Location: </b>Upland, California, United States
|
|
60
|
+
</Text>
|
|
61
|
+
<Text
|
|
62
|
+
style={{
|
|
63
|
+
...paragraph,
|
|
64
|
+
color: 'rgb(0,0,0, 0.5)',
|
|
65
|
+
fontSize: 14,
|
|
66
|
+
marginTop: -5,
|
|
67
|
+
}}
|
|
68
|
+
>
|
|
69
|
+
*Approximate geographic location based on IP address:
|
|
70
|
+
47.149.53.167
|
|
71
|
+
</Text>
|
|
72
|
+
</Section>
|
|
73
|
+
|
|
74
|
+
<Text style={paragraph}>
|
|
75
|
+
If this was you, there's nothing else you need to do.
|
|
76
|
+
</Text>
|
|
77
|
+
<Text style={{ ...paragraph, marginTop: -5 }}>
|
|
78
|
+
If this wasn't you or if you have additional questions, please
|
|
79
|
+
see our support page.
|
|
80
|
+
</Text>
|
|
81
|
+
<Section style={containerButton}>
|
|
82
|
+
<Button style={button}>Learn More</Button>
|
|
83
|
+
</Section>
|
|
84
|
+
</Section>
|
|
85
|
+
</Section>
|
|
86
|
+
|
|
87
|
+
<Section style={containerImageFooter}>
|
|
88
|
+
<Img width={620} src="/static/yelp-footer.png" />
|
|
89
|
+
</Section>
|
|
90
|
+
|
|
91
|
+
<Text
|
|
92
|
+
style={{
|
|
93
|
+
...paragraph,
|
|
94
|
+
textAlign: 'center',
|
|
95
|
+
fontSize: 12,
|
|
96
|
+
color: 'rgb(0,0,0, 0.7)',
|
|
97
|
+
}}
|
|
98
|
+
>
|
|
99
|
+
© 2022 | Yelp Inc., 350 Mission Street, San Francisco, CA 94105,
|
|
100
|
+
U.S.A. | www.yelp.com
|
|
101
|
+
</Text>
|
|
102
|
+
</Container>
|
|
103
|
+
</Section>
|
|
104
|
+
</Html>
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const fontFamily =
|
|
109
|
+
'-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif';
|
|
110
|
+
|
|
111
|
+
const main = {
|
|
112
|
+
backgroundColor: '#fff',
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const paragraph = {
|
|
116
|
+
fontSize: 16,
|
|
117
|
+
fontFamily,
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const container = {
|
|
121
|
+
width: '620px',
|
|
122
|
+
margin: '0 auto',
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const logo = {
|
|
126
|
+
padding: '30px 20px',
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const containerButton = {
|
|
130
|
+
display: 'flex',
|
|
131
|
+
justifyContent: 'center',
|
|
132
|
+
width: '100%',
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
const button = {
|
|
136
|
+
backgroundColor: '#e00707',
|
|
137
|
+
padding: '12px 30px',
|
|
138
|
+
borderRadius: 3,
|
|
139
|
+
color: '#FFF',
|
|
140
|
+
fontWeight: 'bold',
|
|
141
|
+
border: '1px solid rgb(0,0,0, 0.1)',
|
|
142
|
+
fontFamily,
|
|
143
|
+
cursor: 'pointer',
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const content = {
|
|
147
|
+
border: '1px solid rgb(0,0,0, 0.1)',
|
|
148
|
+
borderRadius: '3px',
|
|
149
|
+
overflow: 'hidden',
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
const boxInfos = {
|
|
153
|
+
padding: '20px 40px',
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const containerImageFooter = {
|
|
157
|
+
padding: '45px 0 0 0',
|
|
158
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-email",
|
|
3
|
-
"version": "1.4.2-canary.
|
|
3
|
+
"version": "1.4.2-canary.2",
|
|
4
4
|
"description": "A live preview of your emails right in your browser.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"email": "./dist/index.js"
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
"log-symbols": "4.1.0",
|
|
40
40
|
"ora": "5.4.1",
|
|
41
41
|
"read-pkg": "5.2.0",
|
|
42
|
-
"shelljs": "0.8.5"
|
|
42
|
+
"shelljs": "0.8.5",
|
|
43
|
+
"tree-node-cli": "^1.6.0"
|
|
43
44
|
},
|
|
44
45
|
"devDependencies": {
|
|
45
46
|
"@types/node": "18.11.9",
|
|
@@ -47,4 +48,4 @@
|
|
|
47
48
|
"prettier": "2.7.1",
|
|
48
49
|
"ts-node": "10.9.1"
|
|
49
50
|
}
|
|
50
|
-
}
|
|
51
|
+
}
|