@tracked/emails 0.1.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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +211 -0
  3. package/dist/emails/bodyweight-goal-reached.d.ts +14 -0
  4. package/dist/emails/bodyweight-goal-reached.d.ts.map +1 -0
  5. package/dist/emails/bodyweight-goal-reached.js +177 -0
  6. package/dist/emails/bodyweight-goal-reached.js.map +1 -0
  7. package/dist/emails/client-accepted-invitation.d.ts +10 -0
  8. package/dist/emails/client-accepted-invitation.d.ts.map +1 -0
  9. package/dist/emails/client-accepted-invitation.js +99 -0
  10. package/dist/emails/client-accepted-invitation.js.map +1 -0
  11. package/dist/emails/coach-invite.d.ts +10 -0
  12. package/dist/emails/coach-invite.d.ts.map +1 -0
  13. package/dist/emails/coach-invite.js +126 -0
  14. package/dist/emails/coach-invite.js.map +1 -0
  15. package/dist/emails/coach-removed-client.d.ts +8 -0
  16. package/dist/emails/coach-removed-client.d.ts.map +1 -0
  17. package/dist/emails/coach-removed-client.js +80 -0
  18. package/dist/emails/coach-removed-client.js.map +1 -0
  19. package/dist/emails/direct-message.d.ts +11 -0
  20. package/dist/emails/direct-message.d.ts.map +1 -0
  21. package/dist/emails/direct-message.js +103 -0
  22. package/dist/emails/direct-message.js.map +1 -0
  23. package/dist/emails/feature-discovery.d.ts +11 -0
  24. package/dist/emails/feature-discovery.d.ts.map +1 -0
  25. package/dist/emails/feature-discovery.js +121 -0
  26. package/dist/emails/feature-discovery.js.map +1 -0
  27. package/dist/emails/first-workout-assigned.d.ts +10 -0
  28. package/dist/emails/first-workout-assigned.d.ts.map +1 -0
  29. package/dist/emails/first-workout-assigned.js +98 -0
  30. package/dist/emails/first-workout-assigned.js.map +1 -0
  31. package/dist/emails/first-workout-completed.d.ts +11 -0
  32. package/dist/emails/first-workout-completed.d.ts.map +1 -0
  33. package/dist/emails/first-workout-completed.js +129 -0
  34. package/dist/emails/first-workout-completed.js.map +1 -0
  35. package/dist/emails/index.d.ts +7 -0
  36. package/dist/emails/index.d.ts.map +1 -0
  37. package/dist/emails/index.js +7 -0
  38. package/dist/emails/index.js.map +1 -0
  39. package/dist/emails/new-follower.d.ts +11 -0
  40. package/dist/emails/new-follower.d.ts.map +1 -0
  41. package/dist/emails/new-follower.js +98 -0
  42. package/dist/emails/new-follower.js.map +1 -0
  43. package/dist/emails/subscription-canceled.d.ts +10 -0
  44. package/dist/emails/subscription-canceled.d.ts.map +1 -0
  45. package/dist/emails/subscription-canceled.js +131 -0
  46. package/dist/emails/subscription-canceled.js.map +1 -0
  47. package/dist/emails/support-email.d.ts +8 -0
  48. package/dist/emails/support-email.d.ts.map +1 -0
  49. package/dist/emails/support-email.js +40 -0
  50. package/dist/emails/support-email.js.map +1 -0
  51. package/dist/emails/team-invite.d.ts +11 -0
  52. package/dist/emails/team-invite.d.ts.map +1 -0
  53. package/dist/emails/team-invite.js +100 -0
  54. package/dist/emails/team-invite.js.map +1 -0
  55. package/dist/emails/team-member-removed-email.d.ts +8 -0
  56. package/dist/emails/team-member-removed-email.d.ts.map +1 -0
  57. package/dist/emails/team-member-removed-email.js +97 -0
  58. package/dist/emails/team-member-removed-email.js.map +1 -0
  59. package/dist/emails/tracked-magic-link-activate.d.ts +7 -0
  60. package/dist/emails/tracked-magic-link-activate.d.ts.map +1 -0
  61. package/dist/emails/tracked-magic-link-activate.js +93 -0
  62. package/dist/emails/tracked-magic-link-activate.js.map +1 -0
  63. package/dist/emails/tracked-magic-link.d.ts +7 -0
  64. package/dist/emails/tracked-magic-link.d.ts.map +1 -0
  65. package/dist/emails/tracked-magic-link.js +101 -0
  66. package/dist/emails/tracked-magic-link.js.map +1 -0
  67. package/dist/emails/week-one-checkin.d.ts +10 -0
  68. package/dist/emails/week-one-checkin.d.ts.map +1 -0
  69. package/dist/emails/week-one-checkin.js +141 -0
  70. package/dist/emails/week-one-checkin.js.map +1 -0
  71. package/dist/emails/welcome.d.ts +8 -0
  72. package/dist/emails/welcome.d.ts.map +1 -0
  73. package/dist/emails/welcome.js +146 -0
  74. package/dist/emails/welcome.js.map +1 -0
  75. package/dist/index.d.ts +22 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +24 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/utils/email-validation.d.ts +48 -0
  80. package/dist/utils/email-validation.d.ts.map +1 -0
  81. package/dist/utils/email-validation.js +72 -0
  82. package/dist/utils/email-validation.js.map +1 -0
  83. package/dist/utils/index.d.ts +8 -0
  84. package/dist/utils/index.d.ts.map +1 -0
  85. package/dist/utils/index.js +8 -0
  86. package/dist/utils/index.js.map +1 -0
  87. package/dist/utils/username-validation.d.ts +54 -0
  88. package/dist/utils/username-validation.d.ts.map +1 -0
  89. package/dist/utils/username-validation.js +76 -0
  90. package/dist/utils/username-validation.js.map +1 -0
  91. package/package.json +78 -0
  92. package/src/emails/bodyweight-goal-reached.tsx +396 -0
  93. package/src/emails/client-accepted-invitation.tsx +258 -0
  94. package/src/emails/coach-invite.tsx +270 -0
  95. package/src/emails/coach-removed-client.tsx +212 -0
  96. package/src/emails/direct-message.tsx +249 -0
  97. package/src/emails/feature-discovery.tsx +289 -0
  98. package/src/emails/first-workout-assigned.tsx +255 -0
  99. package/src/emails/first-workout-completed.tsx +312 -0
  100. package/src/emails/index.tsx +6 -0
  101. package/src/emails/new-follower.tsx +260 -0
  102. package/src/emails/subscription-canceled.tsx +311 -0
  103. package/src/emails/support-email.tsx +80 -0
  104. package/src/emails/team-invite.tsx +262 -0
  105. package/src/emails/team-member-removed-email.tsx +240 -0
  106. package/src/emails/tracked-magic-link-activate.tsx +252 -0
  107. package/src/emails/tracked-magic-link.tsx +264 -0
  108. package/src/emails/week-one-checkin.tsx +353 -0
  109. package/src/emails/welcome.tsx +341 -0
  110. package/src/index.ts +57 -0
  111. package/src/utils/email-validation.test.ts +78 -0
  112. package/src/utils/email-validation.ts +80 -0
  113. package/src/utils/index.ts +13 -0
  114. package/src/utils/username-validation.test.ts +118 -0
  115. package/src/utils/username-validation.ts +89 -0
  116. package/static/tracked-logo.png +0 -0
@@ -0,0 +1,240 @@
1
+ import * as React from "react";
2
+ import {
3
+ Body,
4
+ Button,
5
+ Column,
6
+ Container,
7
+ Head,
8
+ Heading,
9
+ Hr,
10
+ Html,
11
+ Img,
12
+ Link,
13
+ Preview,
14
+ Row,
15
+ Section,
16
+ Tailwind,
17
+ Text,
18
+ } from "@react-email/components";
19
+
20
+ interface TeamMemberRemovedEmailProps {
21
+ teamName?: string;
22
+ websiteUrl?: string;
23
+ teamImage?: string;
24
+ }
25
+
26
+ const baseUrl = "https://tracked.gg/android-chrome-192x192.png";
27
+
28
+ export const TeamMemberRemovedEmail = ({
29
+ teamName = "Team Tracked Training",
30
+ websiteUrl = "https://www.tracked.training",
31
+ teamImage,
32
+ }: TeamMemberRemovedEmailProps) => {
33
+ return (
34
+ <Html>
35
+ <Head />
36
+ <Preview>Removed from the team</Preview>
37
+ <Body style={main}>
38
+ <Container style={container}>
39
+ <Section style={box}>
40
+ <Img src={`${baseUrl}`} width="40" height="40" alt="Tracked" />
41
+ <Hr style={hr} />
42
+ <Text style={heading}>Team membership revoked</Text>
43
+ <Text style={paragraph}>
44
+ The team owner has removed you from the team. If you believe this
45
+ was a mistake, please contact the team owner.
46
+ </Text>
47
+
48
+ <Text style={{ ...paragraph }}>
49
+ If this email was not expected, please ignore it. You can learn
50
+ more about the Tracked Training Platform by visiting our{" "}
51
+ <Link style={anchor} href={websiteUrl}>
52
+ website
53
+ </Link>
54
+ .
55
+ </Text>
56
+
57
+ <Row style={row}>
58
+ <Column style={column}>
59
+ <Button
60
+ style={appButton}
61
+ href="https://apps.apple.com/app/tracked-training/id6450913418"
62
+ >
63
+ <Img
64
+ src="https://cdn.trckd.ca/assets/app-store-black.png"
65
+ alt="Download on the App Store"
66
+ style={img}
67
+ />
68
+ </Button>
69
+ </Column>
70
+ <Column style={column}>
71
+ <Button
72
+ style={appButton}
73
+ href="https://play.google.com/store/apps/details?id=com.tracked.mobile"
74
+ >
75
+ <Img
76
+ src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png"
77
+ alt="Google Play"
78
+ style={img}
79
+ />
80
+ </Button>
81
+ </Column>
82
+ </Row>
83
+
84
+ <div
85
+ style={{
86
+ textAlign: "left" as const,
87
+ margin: "24px 0",
88
+ }}
89
+ >
90
+ <a
91
+ href="https://www.discord.gg/trackedgg"
92
+ style={{
93
+ backgroundColor: "#5865F2",
94
+ borderRadius: "8px",
95
+ fontSize: "16px",
96
+ fontWeight: "bold",
97
+ textDecoration: "none",
98
+ padding: "12px 32px",
99
+ display: "inline-block",
100
+ }}
101
+ >
102
+ <span style={{ color: "#ffffff", textDecoration: "none" }}>
103
+ Join our Discord Community
104
+ </span>
105
+ </a>
106
+ </div>
107
+
108
+ <Hr style={hr} />
109
+ <Text style={footer}>
110
+ Copyright © Tracked Training Platform Inc. <br /> 9101 Horne
111
+ Street, Vancouver, BC
112
+ </Text>
113
+
114
+ <Container>
115
+ <Link
116
+ href="https://tracked.gg/terms"
117
+ style={{ ...footer, paddingRight: 10 }}
118
+ >
119
+ Terms
120
+ </Link>
121
+ <Link style={{ ...footer, paddingRight: 10 }}> | </Link>
122
+ <Link
123
+ href="https://tracked.gg/privacy"
124
+ style={{ ...footer, paddingRight: 10 }}
125
+ >
126
+ Privacy
127
+ </Link>
128
+ <Link style={{ ...footer, paddingRight: 10 }}> | </Link>
129
+ <Link
130
+ href="https://tracked.gg/support"
131
+ style={{ ...footer, paddingRight: 10 }}
132
+ >
133
+ Support
134
+ </Link>
135
+ </Container>
136
+
137
+ <Text style={footer}>
138
+ This is a service notification by the Tracked Training Platform.
139
+ </Text>
140
+ </Section>
141
+ </Container>
142
+ </Body>
143
+ </Html>
144
+ );
145
+ };
146
+
147
+ export default TeamMemberRemovedEmail;
148
+
149
+ const main = {
150
+ backgroundColor: "#1e293b",
151
+ fontFamily:
152
+ '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif',
153
+ };
154
+
155
+ const container = {
156
+ backgroundColor: "#0f172a",
157
+ margin: "0 auto",
158
+ padding: "20px 0 48px",
159
+ marginBottom: "64px",
160
+ borderRadius: "5px",
161
+ };
162
+
163
+ const box = {
164
+ padding: "0 48px",
165
+ };
166
+
167
+ const row = {
168
+ display: "flex",
169
+ flexDirection: "row" as const,
170
+ };
171
+
172
+ const column = {
173
+ flex: "0 0 48%",
174
+ "@media (maxWidth: 600px)": {
175
+ flex: "0 0 100%",
176
+ marginBottom: "10px",
177
+ },
178
+ };
179
+
180
+ const img = {
181
+ maxWidth: "100%",
182
+ height: "auto",
183
+ };
184
+
185
+ const appButton = {
186
+ backgroundColor: "transparent",
187
+ borderRadius: "5px",
188
+ color: "#ffffff",
189
+ fontSize: "16px",
190
+ fontWeight: "bold",
191
+ textDecoration: "none",
192
+ textAlign: "center" as const,
193
+ display: "block",
194
+ width: "100%",
195
+ maxWidth: "150px",
196
+ };
197
+
198
+ const hr = {
199
+ borderColor: "#475569",
200
+ margin: "20px 0",
201
+ };
202
+
203
+ const paragraph = {
204
+ color: "#e2e8f0",
205
+
206
+ fontSize: "16px",
207
+ lineHeight: "24px",
208
+ textAlign: "left" as const,
209
+ };
210
+
211
+ const heading = {
212
+ color: "#e2e8f0",
213
+ fontSize: "24px",
214
+ lineHeight: "32px",
215
+ fontWeight: "bold",
216
+ textAlign: "left" as const,
217
+ };
218
+
219
+ const anchor = {
220
+ color: "#4ade80",
221
+ };
222
+
223
+ const button = {
224
+ backgroundColor: "#4ade80",
225
+ borderRadius: "5px",
226
+ color: "#0f172a",
227
+ fontSize: "16px",
228
+ fontWeight: "bold",
229
+ textDecoration: "none",
230
+ textAlign: "center" as const,
231
+ display: "block",
232
+ width: "100%",
233
+ padding: "16px 0",
234
+ };
235
+
236
+ const footer = {
237
+ color: "#8898aa",
238
+ fontSize: "12px",
239
+ lineHeight: "16px",
240
+ };
@@ -0,0 +1,252 @@
1
+ import React from "react";
2
+ import {
3
+ Body,
4
+ Button,
5
+ Column,
6
+ Container,
7
+ Head,
8
+ Hr,
9
+ Html,
10
+ Img,
11
+ Link,
12
+ Preview,
13
+ Row,
14
+ Section,
15
+ Text,
16
+ } from "@react-email/components";
17
+
18
+ interface Props {
19
+ activateButtonLink: string;
20
+ websiteUrl: string;
21
+ }
22
+
23
+ const baseUrl = "https://tracked.gg/android-chrome-192x192.png";
24
+
25
+ export const TrackedMagicLinkActivate = ({
26
+ activateButtonLink,
27
+ websiteUrl,
28
+ }: Props) => (
29
+ <Html>
30
+ <Head>
31
+ <meta name="color-scheme" content="light only" />
32
+ <meta name="supported-color-schemes" content="light only" />
33
+ </Head>
34
+ <Preview>
35
+ New activation requested for Tracked - The gym tracking platform
36
+ </Preview>
37
+ <Body style={main}>
38
+ <Container style={container}>
39
+ <Section style={box}>
40
+ <Row style={{ marginBottom: "8px" }}>
41
+ <Column style={{ width: "auto", verticalAlign: "middle" }}>
42
+ <Img src={`${baseUrl}`} width="28" height="28" alt="Tracked" />
43
+ </Column>
44
+ <Column style={{ width: "auto", verticalAlign: "middle", paddingLeft: "4px" }}>
45
+ <Text style={{
46
+ fontSize: "28px",
47
+ fontWeight: "900",
48
+ fontFamily: "Raleway, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
49
+ color: "#020617",
50
+ margin: "0",
51
+ lineHeight: "32px",
52
+ letterSpacing: "0.5px",
53
+ }}>
54
+ TRACKED
55
+ </Text>
56
+ </Column>
57
+ </Row>
58
+ <Hr style={hr} />
59
+ <Text style={paragraph}>Welcome to Tracked!</Text>
60
+ <Text style={paragraph}>
61
+ Press the button below to confirm your Tracked account email. You
62
+ will be redirected to the app.
63
+ </Text>
64
+ <div style={{ marginTop: "24px", marginBottom: "24px", textAlign: "left" as const }}>
65
+ <a
66
+ href={activateButtonLink}
67
+ style={{
68
+ backgroundColor: "#0f172a",
69
+ borderRadius: "8px",
70
+ fontSize: "16px",
71
+ fontWeight: "bold",
72
+ textDecoration: "none",
73
+ padding: "12px 32px",
74
+ display: "inline-block",
75
+ }}
76
+ >
77
+ <span style={{ color: "#ffffff", textDecoration: "none" }}>
78
+ Confirm Email
79
+ </span>
80
+ </a>
81
+ </div>
82
+
83
+ <Text style={{ ...paragraph }}>
84
+ If this email was not expected, please ignore it. You can learn more
85
+ about the Tracked Training Platform by visiting our{" "}
86
+ <Link style={anchor} href={websiteUrl}>
87
+ website
88
+ </Link>
89
+ .
90
+ </Text>
91
+
92
+ <Row style={row}>
93
+ <Column style={column}>
94
+ <Button
95
+ style={appButton}
96
+ href="https://apps.apple.com/app/tracked-training/id6450913418"
97
+ >
98
+ <Img
99
+ src="https://cdn.trckd.ca/assets/app-store-black.png"
100
+ alt="Download on the App Store"
101
+ style={img}
102
+ />
103
+ </Button>
104
+ </Column>
105
+ <Column style={column}>
106
+ <Button
107
+ style={appButton}
108
+ href="https://play.google.com/store/apps/details?id=com.tracked.mobile"
109
+ >
110
+ <Img
111
+ src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png"
112
+ alt="Google Play"
113
+ style={img}
114
+ />
115
+ </Button>
116
+ </Column>
117
+ </Row>
118
+
119
+ <div
120
+ style={{
121
+ textAlign: "left" as const,
122
+ margin: "24px 0",
123
+ }}
124
+ >
125
+ <a
126
+ href="https://www.discord.gg/trackedgg"
127
+ style={{
128
+ backgroundColor: "#5865F2",
129
+ borderRadius: "8px",
130
+ fontSize: "16px",
131
+ fontWeight: "bold",
132
+ textDecoration: "none",
133
+ padding: "12px 32px",
134
+ display: "inline-block",
135
+ }}
136
+ >
137
+ <span style={{ color: "#ffffff", textDecoration: "none" }}>
138
+ Join our Discord Community
139
+ </span>
140
+ </a>
141
+ </div>
142
+
143
+ <Hr style={hr} />
144
+ <Text style={footer}>
145
+ Copyright © Tracked Training Platform Inc. <br /> 9101 Horne
146
+ Street, Vancouver, BC
147
+ </Text>
148
+
149
+ <Container>
150
+ <Link
151
+ href="https://tracked.gg/terms"
152
+ style={{ ...footer, paddingRight: 10 }}
153
+ >
154
+ Terms
155
+ </Link>
156
+ <Link style={{ ...footer, paddingRight: 10 }}> | </Link>
157
+ <Link
158
+ href="https://tracked.gg/privacy"
159
+ style={{ ...footer, paddingRight: 10 }}
160
+ >
161
+ Privacy
162
+ </Link>
163
+ <Link style={{ ...footer, paddingRight: 10 }}> | </Link>
164
+ <Link
165
+ href="https://tracked.gg/support"
166
+ style={{ ...footer, paddingRight: 10 }}
167
+ >
168
+ Support
169
+ </Link>
170
+ </Container>
171
+
172
+ <Text style={footer}>
173
+ This is a service notification by the Tracked Training Platform.
174
+ </Text>
175
+ </Section>
176
+ </Container>
177
+ </Body>
178
+ </Html>
179
+ );
180
+
181
+ const main = {
182
+ backgroundColor: "#020617", // slate-950
183
+ fontFamily:
184
+ '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif',
185
+ };
186
+
187
+ const container = {
188
+ backgroundColor: "#020617", // slate-950
189
+ margin: "0 auto",
190
+ padding: "20px 0 48px",
191
+ marginBottom: "64px",
192
+ borderRadius: "8px",
193
+ };
194
+
195
+ const box = {
196
+ padding: "0 24px",
197
+ };
198
+
199
+ const hr = {
200
+ borderColor: "#4ade80", // green-400
201
+ margin: "24px 0",
202
+ borderWidth: "1px",
203
+ };
204
+
205
+ const anchor = {
206
+ color: "#4ade80", // green-400
207
+ textDecoration: "underline",
208
+ };
209
+
210
+ const paragraph = {
211
+ color: "#ffffff", // white
212
+ fontSize: "16px",
213
+ lineHeight: "24px",
214
+ textAlign: "left" as const,
215
+ };
216
+
217
+ const row = {
218
+ display: "flex",
219
+ flexDirection: "row" as const,
220
+ };
221
+
222
+ const column = {
223
+ flex: "0 0 48%",
224
+ "@media (maxWidth: 600px)": {
225
+ flex: "0 0 100%",
226
+ marginBottom: "10px",
227
+ },
228
+ };
229
+
230
+ const img = {
231
+ maxWidth: "100%",
232
+ height: "auto",
233
+ };
234
+
235
+ const appButton = {
236
+ backgroundColor: "transparent",
237
+ borderRadius: "8px",
238
+ color: "#ffffff", // white
239
+ fontSize: "16px",
240
+ fontWeight: "bold",
241
+ textDecoration: "none",
242
+ textAlign: "center" as const,
243
+ display: "block",
244
+ width: "100%",
245
+ maxWidth: "150px",
246
+ };
247
+
248
+ const footer = {
249
+ color: "#94a3b8", // slate-400 for subtle footer text
250
+ fontSize: "12px",
251
+ lineHeight: "16px",
252
+ };