@directus/api 14.0.2 → 14.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 (47) hide show
  1. package/dist/__utils__/mock-env.d.ts +18 -0
  2. package/dist/__utils__/mock-env.js +41 -0
  3. package/dist/auth/drivers/oauth2.js +4 -2
  4. package/dist/auth/drivers/openid.js +4 -2
  5. package/dist/cli/load-extensions.js +1 -2
  6. package/dist/controllers/assets.js +10 -10
  7. package/dist/controllers/files.js +1 -5
  8. package/dist/database/index.js +2 -1
  9. package/dist/database/migrations/run.js +2 -2
  10. package/dist/database/system-data/collections/collections.yaml +1 -1
  11. package/dist/database/system-data/fields/settings.yaml +12 -13
  12. package/dist/database/system-data/fields/users.yaml +10 -10
  13. package/dist/env.d.ts +2 -4
  14. package/dist/env.js +12 -9
  15. package/dist/extensions/lib/get-extensions-path.d.ts +1 -0
  16. package/dist/extensions/lib/get-extensions-path.js +8 -0
  17. package/dist/extensions/lib/get-extensions.js +3 -2
  18. package/dist/extensions/lib/sync-extensions.d.ts +1 -0
  19. package/dist/extensions/lib/sync-extensions.js +59 -0
  20. package/dist/extensions/lib/sync-status.d.ts +10 -0
  21. package/dist/extensions/lib/sync-status.js +27 -0
  22. package/dist/extensions/manager.js +14 -5
  23. package/dist/logger.d.ts +2 -1
  24. package/dist/logger.js +13 -2
  25. package/dist/messenger.js +1 -3
  26. package/dist/request/validate-ip.js +1 -2
  27. package/dist/services/extensions.js +1 -1
  28. package/dist/services/files.d.ts +2 -2
  29. package/dist/services/files.js +90 -23
  30. package/dist/services/mail/index.js +5 -4
  31. package/dist/services/mail/templates/base.liquid +383 -138
  32. package/dist/services/mail/templates/password-reset.liquid +35 -17
  33. package/dist/services/mail/templates/user-invitation.liquid +32 -13
  34. package/dist/services/server.js +4 -0
  35. package/dist/storage/register-drivers.js +1 -2
  36. package/dist/storage/register-locations.js +1 -2
  37. package/dist/utils/get-auth-providers.d.ts +1 -1
  38. package/dist/utils/get-config-from-env.js +1 -2
  39. package/dist/utils/merge-permissions.js +11 -19
  40. package/dist/utils/sanitize-query.js +1 -2
  41. package/dist/utils/should-clear-cache.js +1 -2
  42. package/dist/utils/should-skip-cache.js +3 -4
  43. package/dist/utils/validate-env.js +1 -2
  44. package/dist/utils/validate-storage.js +12 -9
  45. package/package.json +16 -15
  46. package/dist/__mocks__/cache.d.mts +0 -5
  47. package/dist/__mocks__/cache.mjs +0 -7
@@ -1,162 +1,407 @@
1
- <!doctype html>
1
+ <!DOCTYPE html>
2
2
  <html lang="en">
3
- <head>
3
+ <head>
4
+ <title>{{ projectName }} Email Service</title>
4
5
 
5
- <title>{{ projectName }} Email Service</title>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
9
 
7
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
8
- <meta name="viewport" content="width=device-width, initial-scale=1">
9
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
10
+ <style type="text/css" id="hs-inline-css">
11
+ /*<![CDATA[*/
10
12
 
11
- <style type="text/css" id="hs-inline-css">
12
- /*<![CDATA[*/
13
+ /* CLIENT-SPECIFIC STYLES */
14
+ body, table, td, a {
15
+ -webkit-text-size-adjust: 100%;
16
+ -ms-text-size-adjust: 100%;
17
+ -webkit-font-smoothing: antialiased;
18
+ }
19
+ table,
20
+ td {
21
+ mso-table-lspace: 0pt;
22
+ mso-table-rspace: 0pt;
23
+ }
24
+ img {
25
+ -ms-interpolation-mode: bicubic;
26
+ }
27
+ s #content p {
28
+ margin: 0;
29
+ }
30
+ /* RESET STYLES */
31
+ img {
32
+ border: 0;
33
+ height: auto;
34
+ line-height: 100%;
35
+ outline: none;
36
+ text-decoration: none;
37
+ }
38
+ table {
39
+ border-collapse: collapse !important;
40
+ }
41
+ body {
42
+ height: 100% !important;
43
+ margin: 0 !important;
44
+ padding: 0 !important;
45
+ width: 100% !important;
46
+ }
13
47
 
14
- /* CLIENT-SPECIFIC STYLES */
15
- body, table, td, a {
16
- -webkit-text-size-adjust: 100%;
17
- -ms-text-size-adjust: 100%;
18
- -webkit-font-smoothing: antialiased;
19
- }
20
- table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }
21
- img { -ms-interpolation-mode: bicubic; }
48
+ /* iOS BLUE LINKS */
49
+ a[x-apple-data-detectors] {
50
+ color: inherit !important;
51
+ text-decoration: none !important;
52
+ font-size: inherit !important;
53
+ font-family: inherit !important;
54
+ font-weight: inherit !important;
55
+ line-height: inherit !important;
56
+ }
57
+ body a {
58
+ color: {{projectColor}};
59
+ text-decoration: underline;
60
+ }
61
+ body p {
62
+ color: #525252;
63
+ }
64
+ h1 {
65
+ font-size: 28px;
66
+ color: #171717;
67
+ font-weight: 700;
68
+ line-height: 32px;
69
+ margin: 0;
70
+ padding-bottom: 20px;
71
+ }
72
+ hr {
73
+ margin: 0;
74
+ width: 100%;
75
+ border-top: 1px solid #d3dae4;
76
+ border-bottom: none;
77
+ border-left: none;
78
+ border-right: none;
79
+ }
80
+ div.im,
81
+ span.im {
82
+ color: inherit !important;
83
+ }
22
84
 
23
- /* RESET STYLES */
24
- img { border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; }
25
- table { border-collapse: collapse !important; }
26
- body { height: 100% !important; margin: 0 !important; padding: 0 !important; width: 100% !important; }
85
+ /* MOBILE STYLES */
86
+ @media screen and (max-width: 600px) {
87
+ .img-max {
88
+ width: 100% !important;
89
+ max-width: 100% !important;
90
+ height: auto !important;
91
+ }
27
92
 
28
- /* iOS BLUE LINKS */
29
- a[x-apple-data-detectors] {
30
- color: inherit !important;
31
- text-decoration: none !important;
32
- font-size: inherit !important;
33
- font-family: inherit !important;
34
- font-weight: inherit !important;
35
- line-height: inherit !important;
36
- }
37
- body a {
38
- color: {{projectColor}};
39
- text-decoration: none;
40
- }
41
- hr {
42
- width:66%;
43
- margin:40px auto;
44
- border:1px solid #d3dae4;
45
- }
93
+ .max-width {
94
+ max-width: 100% !important;
95
+ }
46
96
 
47
- /* MOBILE STYLES */
48
- @media screen and (max-width: 600px) {
49
- .img-max {
50
- width: 100% !important;
51
- max-width: 100% !important;
52
- height: auto !important;
53
- }
97
+ #content {
98
+ padding-top: 30px !important;
99
+ padding-bottom: 30px !important;
100
+ }
101
+ }
54
102
 
55
- .max-width {
56
- max-width: 100% !important;
57
- }
103
+ /* DARK MODE */
104
+ /* @media (prefers-color-scheme: dark) {
105
+ #background {
106
+ background-color: #171717 !important;
107
+ }
108
+ #content {
109
+ background-color: #171717 !important;
110
+ color: #ffffff !important;
111
+ }
112
+ #footer {
113
+ background-color: #171717 !important;
114
+ color: #ffffff !important;
115
+ }
116
+ h1,
117
+ h2 {
118
+ color: #ffffff !important;
119
+ }
120
+ .link {
121
+ color: #ff99dd !important;
122
+ }
123
+ body a {
124
+ color: #ffffff !important;
125
+ }
126
+ body p {
127
+ color: #e7e5e4 !important;
128
+ }
129
+ .button {
130
+ background-color: #ffffff !important;
131
+ color: #171717 !important;
132
+ border-color: #171717 !important;
133
+ }
134
+ hr {
135
+ border-color: #334155 !important;
136
+ }
137
+ } */
58
138
 
59
- #content {
60
- padding-left: 5% !important;
61
- padding-right: 5% !important;
62
- padding-top: 30px !important;
63
- padding-bottom: 30px !important;
64
- }
65
- }
139
+ /* ANDROID CENTER FIX */
140
+ div[style*="margin: 16px 0;"] {
141
+ margin: 0 !important;
142
+ }
66
143
 
67
- /* DARK MODE */
68
- @media (prefers-color-scheme: dark) {
69
- #background {
70
- background-color: #172940 !important;
71
- }
72
- #content {
73
- background-color: #071930 !important;
74
- color: #FFFFFF !important;
75
- }
76
- .link {
77
- color: {{projectColor}} !important;
78
- }
79
- .button {
80
- background-color:#0BA582 !important;
81
- }
82
- hr {
83
- border:1px solid #172940 !important;
84
- }
85
- }
144
+ blockquote {
145
+ background: #f0f4f9 !important;
146
+ border-radius: 4px !important;
147
+ margin: 0 !important;
148
+ padding: 24px !important;
149
+ }
86
150
 
87
- /* ANDROID CENTER FIX */
88
- div[style*="margin: 16px 0;"] {
89
- margin: 0 !important;
90
- }
151
+ blockquote > p {
152
+ margin: 0 !important;
153
+ }
154
+ /*]]>*/
155
+ </style>
91
156
 
92
- blockquote {
93
- background: #f0f4f9 !important;
94
- border-radius: 4px !important;
95
- margin: 0 !important;
96
- padding: 24px !important;
97
- }
157
+ <meta name="generator" content="Directus" />
158
+ <meta name="x-apple-disable-message-reformatting" />
159
+ <meta name="robots" content="noindex,follow" />
160
+ </head>
161
+ <body
162
+ style="-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; height:100% !important; width:100% !important; margin:0 !important; padding:0; !important background-color:#f6f6f6"
163
+ bgcolor="#f6f6f6"
164
+ >
165
+ <!-- HIDDEN PREHEADER TEXT -->
166
+ <div
167
+ class="preview-text"
168
+ style="
169
+ display: none;
170
+ font-size: 1px;
171
+ color: #172940;
172
+ line-height: 1px;
173
+ max-height: 0px;
174
+ max-width: 0px;
175
+ opacity: 0;
176
+ overflow: hidden;
177
+ "
178
+ >
179
+ &nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌
180
+ </div>
98
181
 
99
- blockquote > p {
100
- margin: 0 !important;
101
- }
102
- /*]]>*/
103
- </style>
104
-
105
- <meta name="generator" content="Directus">
106
- <meta name="x-apple-disable-message-reformatting">
107
- <meta name="robots" content="noindex,follow">
108
-
109
- </head>
110
- <body style="-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; height:100% !important; width:100% !important; margin:0 !important; padding:0; !important background-color:#f6f6f6" bgcolor="#f6f6f6">
111
-
112
- <!-- HIDDEN PREHEADER TEXT -->
113
- <div class="preview-text" style="display:none;font-size:1px;color:#172940;line-height:1px;max-height:0px;max-width:0px;opacity:0;overflow:hidden;"> &nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌&nbsp;‌</div>
114
-
115
- <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%" style="-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; mso-table-lspace:0pt; mso-table-rspace:0pt; border-collapse:collapse !important">
116
- <tbody>
117
- <tr>
118
- <td id="background" align="center" valign="top" width="100%" bgcolor="#172940" style="-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; mso-table-lspace:0pt; mso-table-rspace:0pt; background-size:cover; padding:50px 15px 0 15px; background-color:#172940">
119
- <!--[if (gte mso 9)|(IE)]>
182
+ <table
183
+ role="presentation"
184
+ border="0"
185
+ cellpadding="0"
186
+ cellspacing="0"
187
+ width="100%"
188
+ style="
189
+ -webkit-text-size-adjust: 100%;
190
+ -ms-text-size-adjust: 100%;
191
+ mso-table-lspace: 0pt;
192
+ mso-table-rspace: 0pt;
193
+ border-collapse: collapse !important;
194
+ "
195
+ >
196
+ <tbody>
197
+ <tr>
198
+ <td
199
+ id="background"
200
+ align="center"
201
+ valign="top"
202
+ width="100%"
203
+ bgcolor="#ffffff"
204
+ style="
205
+ -webkit-text-size-adjust: 100%;
206
+ -ms-text-size-adjust: 100%;
207
+ mso-table-lspace: 0pt;
208
+ mso-table-rspace: 0pt;
209
+ background-size: cover;
210
+ padding: 30px 15px 0 15px;
211
+ background-color: #ffffff;
212
+ "
213
+ >
214
+ <!--[if (gte mso 9)|(IE)]>
120
215
  <table role="presentation" align="center" border="0" cellspacing="0" cellpadding="0" width="600">
121
216
  <tr>
122
217
  <td align="center" valign="top" width="600">
123
218
  <![endif]-->
124
- <table role="presentation" align="center" border="0" cellpadding="0" cellspacing="0" width="100%" style="-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; mso-table-lspace:0pt; mso-table-rspace:0pt; border-collapse:collapse !important; max-width:600px">
125
- <tbody>
126
- <tr>
127
- <td align="left" valign="top" style="-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; mso-table-lspace:0pt; mso-table-rspace:0pt; padding:0 0 30px 0">
128
- <table><tbody><tr><td align="center" valign="middle" style="background-color:{{ projectColor }};max-width:48px;max-height:48px;border-radius:4px;padding:6px;">
129
- <img id="logo" src="{{ projectLogo }}" alt="{{ projectName }} Logo" width="40" height="auto" border="0" style="-ms-interpolation-mode:bicubic; border:0; height:40px; line-height:100%; outline:none; text-decoration:none; display:block; width:40px; object-fit:contain;">
130
- </td></tr></tbody></table>
131
- </td>
132
- </tr>
133
- <tr>
134
- <td id="content" align="left" valign="top" style="-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; mso-table-lspace:0pt; mso-table-rspace:0pt; padding:40px 50px 50px 50px; font-family:Open Sans, Helvetica, Arial, sans-serif; border-radius:4px; box-shadow:0 4px 0 #15253A; background-color:#FFFFFE; color:#172940; font-size:15px; line-height:26px; margin:0" bgcolor="#FFFFFE">
135
- <div style="color: inherit; font-size: inherit; line-height: inherit;">
136
-
137
- {% block content %}{{ html }}{% endblock %}
219
+ <table
220
+ role="presentation"
221
+ align="center"
222
+ border="0"
223
+ cellpadding="0"
224
+ cellspacing="0"
225
+ width="100%"
226
+ style="
227
+ -webkit-text-size-adjust: 100%;
228
+ -ms-text-size-adjust: 100%;
229
+ mso-table-lspace: 0pt;
230
+ mso-table-rspace: 0pt;
231
+ border-collapse: collapse !important;
232
+ max-width: 600px;
233
+ "
234
+ >
235
+ <tbody>
236
+ <tr>
237
+ <td
238
+ align="left"
239
+ valign="top"
240
+ style="
241
+ -webkit-text-size-adjust: 100%;
242
+ -ms-text-size-adjust: 100%;
243
+ mso-table-lspace: 0pt;
244
+ mso-table-rspace: 0pt;
245
+ padding: 0 0 40px 0;
246
+ "
247
+ >
248
+ <table>
249
+ <tbody>
250
+ <tr>
251
+ <td align="center" valign="middle">
252
+ <img
253
+ id="logo"
254
+ src="{{ projectLogo }}"
255
+ alt="{{ projectName }} Logo"
256
+ width="40"
257
+ height="40"
258
+ border="0"
259
+ style="
260
+ -ms-interpolation-mode: bicubic;
261
+ border: 1px solid white;
262
+ border-radius: 8px;
263
+ height: 40px;
264
+ width: 40px;
265
+ line-height: 100%;
266
+ outline: none;
267
+ text-decoration: none;
268
+ display: block;
269
+ object-fit: contain;
270
+ padding: 10px;
271
+ background: {{ projectColor }}
272
+ "
273
+ />
274
+ </td>
275
+ </tr>
276
+ </tbody>
277
+ </table>
278
+ </td>
279
+ </tr>
280
+ <tr>
281
+ <td
282
+ id="content"
283
+ align="left"
284
+ valign="top"
285
+ style="
286
+ -webkit-text-size-adjust: 100%;
287
+ -ms-text-size-adjust: 100%;
288
+ mso-table-lspace: 0pt;
289
+ mso-table-rspace: 0pt;
290
+ font-family: -apple-system, BlinkMacSystemFont,
291
+ 'HelveticaNeue-Light', 'Helvetica Neue Light',
292
+ 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande',
293
+ sans-serif;
294
+ font-size: 16px;
295
+ line-height: 26px;
296
+ letter-spacing: 0.32px;
297
+ margin: 0;
298
+ color: #171717;
299
+ "
300
+ >
301
+ <div
302
+ style="
303
+ color: inherit;
304
+ font-size: inherit;
305
+ line-height: inherit;
306
+ "
307
+ >
308
+ {% block content %}{{ html }}{% endblock %}
309
+ </div>
138
310
 
139
- </div>
140
- </td>
141
- </tr>
142
- <tr>
143
- <td align="center" valign="middle" style="-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; mso-table-lspace:0pt; mso-table-rspace:0pt; padding:25px 0; font-family:Open Sans, Helvetica, Arial, sans-serif; color:#FFFFFE">
144
- <p style="margin-bottom: 1em; color: #A2B5CD;font-size: 12px; line-height: 16px;">
145
- Sent by the team at {{ projectName }}{% if url %} — <a style="-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; text-decoration:none; color:#A2B5CD" href="{{ url }}" target="_blank">Manage Your Account</a>{% endif %}<br>
146
- {% block footer %}{% endblock %}
147
- </p>
148
- </td>
149
- </tr>
150
- </tbody>
151
- </table>
152
- <!--[if (gte mso 9)|(IE)]>
311
+ <p style="padding: 20px 0 10px 0">All the best,</p>
312
+ <table border="0" cellpadding="0" cellspacing="0">
313
+ <tr>
314
+ <td align="center" valign="middle" style="">
315
+ <img
316
+ id="logo"
317
+ src="{{ projectLogo }}"
318
+ alt=""
319
+ width="22"
320
+ height="22"
321
+ border="0"
322
+ style="
323
+ -ms-interpolation-mode: bicubic;
324
+ border: 0;
325
+ height: 22px;
326
+ width: 22px;
327
+ outline: none;
328
+ text-decoration: none;
329
+ display: block;
330
+ object-fit: contain;
331
+ padding: 11px;
332
+ border-radius: 100%;
333
+ border: 1px solid #ffffff;
334
+ background: {{ projectColor }};
335
+ "
336
+ />
337
+ </td>
338
+ <td>
339
+ <p
340
+ style="
341
+ display: inline-block;
342
+ line-height: 20px;
343
+ padding-left: 8px;
344
+ margin: 0;
345
+ "
346
+ >
347
+ The {{ projectName }} Team<br /><span
348
+ style="color: #737373"
349
+ >Administrator</span
350
+ >
351
+ </p>
352
+ </td>
353
+ </tr>
354
+ </table>
355
+ <hr style="margin: 40px 0 20px 0" width="100%" />
356
+ </td>
357
+ </tr>
358
+ <tr>
359
+ <td
360
+ align="left"
361
+ valign="middle"
362
+ style="
363
+ -webkit-text-size-adjust: 100%;
364
+ -ms-text-size-adjust: 100%;
365
+ mso-table-lspace: 0pt;
366
+ mso-table-rspace: 0pt;
367
+ padding: 0 0 20px 0;
368
+ font-family: Open Sans, Helvetica, Arial, sans-serif;
369
+ "
370
+ >
371
+ <p
372
+ style="
373
+ margin: 10px 0;
374
+ font-size: 13px;
375
+ line-height: 16px;
376
+ color: #171717;
377
+ "
378
+ >
379
+ Sent by the team at {{ projectName }}{% if projectUrl != '' %} —
380
+ <a
381
+ style="
382
+ -webkit-text-size-adjust: 100%;
383
+ -ms-text-size-adjust: 100%;
384
+ text-decoration: underline;
385
+ color: #171717;
386
+ "
387
+ href="{{ projectUrl }}"
388
+ target="_blank"
389
+ >Manage Your Account</a
390
+ >{% endif %}<br />
391
+ {% block footer %}{% endblock %}
392
+ </p>
393
+ </td>
394
+ </tr>
395
+ </tbody>
396
+ </table>
397
+ <!--[if (gte mso 9)|(IE)]>
153
398
  </td>
154
399
  </tr>
155
400
  </table>
156
401
  <![endif]-->
157
- </td>
158
- </tr>
159
- </tbody>
160
- </table>
161
- </body>
402
+ </td>
403
+ </tr>
404
+ </tbody>
405
+ </table>
406
+ </body>
162
407
  </html>
@@ -1,24 +1,42 @@
1
- {% layout "base" %}
2
- {% block content %}
1
+ {% layout "base" %} {% block content %}
3
2
 
4
- <p>
5
- We have received a request to reset the password for your <i>{{ projectName }}</i> account. If you did not make this change, please contact one of your administrators. Otherwise, to complete the process, click the following link to confirm your email address and enter your new password.
6
- </p>
3
+ <h1>Reset your {{projectName}} password</h1>
7
4
 
8
- <p style="text-align: center; padding: 20px 0;">
9
- <a href="{{ url }}">
10
- <b>Reset Your Password</b>
11
- </a>
5
+ <p style="padding-bottom: 30px">
6
+ We have received a request to reset the password for your
7
+ <i>{{ projectName }}</i> account. If you did not make this change, please
8
+ contact one of your administrators. Otherwise, to complete the process, click
9
+ the following link to confirm your email address and enter your new password.
12
10
  </p>
13
11
 
14
- <p>
15
- <b>Important: This link will expire in 24 hours.</b>
16
- <br>
17
- </p>
12
+ <a
13
+ class="button"
14
+ rel="noopener"
15
+ target="_blank"
16
+ href="{{url}}"
17
+ style="
18
+ font-size: 16px;
19
+ font-weight: 600;
20
+ color: #ffffff;
21
+ text-decoration: none;
22
+ display: inline-block;
23
+ padding: 11px 24px;
24
+ border-radius: 8px;
25
+ background: #171717;
26
+ border: 1px solid #ffffff;
27
+ "
28
+ >
29
+ <!--[if mso]>
30
+ <i style="letter-spacing: 25px; mso-font-width: -100%; mso-text-raise: 30pt"
31
+ >&nbsp;</i
32
+ >
33
+ <![endif]-->
34
+ <span style="mso-text-raise: 15pt">Reset Your Password</span>
35
+ <!--[if mso]>
36
+ <i style="letter-spacing: 25px; mso-font-width: -100%">&nbsp;</i>
37
+ <![endif]-->
38
+ </a>
18
39
 
19
- <p>
20
- Thank you,<br>
21
- The {{ projectName }} Team
22
- </p>
40
+ <p style="padding-top: 30px">Important: This link will expire in 24 hours.</p>
23
41
 
24
42
  {% endblock %}
@@ -1,19 +1,38 @@
1
- {% layout "base" %}
2
- {% block content %}
1
+ {% layout "base" %} {% block content %}
3
2
 
4
- <p>
5
- You have been invited to join <i>{{ projectName }}</i>. Please click the button below to accept this invitation and join the project:
6
- </p>
3
+ <h1>You've been invited to {{ projectName }}</h1>
7
4
 
8
- <p style="text-align: center; padding: 20px 0;">
9
- <a href="{{ url }}">
10
- <b>Join {{ projectName }}</b>
11
- </a>
5
+ <p style="padding-bottom: 30px">
6
+ You have been invited to join <i>{{ projectName }}</i>. Please click the
7
+ button below to accept this invitation and join the project:
12
8
  </p>
13
9
 
14
- <p>
15
- Thank you,<br>
16
- The {{ projectName }} Team
17
- </p>
10
+ <a
11
+ class="button"
12
+ rel="noopener"
13
+ target="_blank"
14
+ href="{{url}}"
15
+ style="
16
+ font-size: 16px;
17
+ font-weight: 600;
18
+ color: #ffffff;
19
+ text-decoration: none;
20
+ display: inline-block;
21
+ padding: 11px 24px;
22
+ border-radius: 8px;
23
+ background: #171717;
24
+ border: 1px solid #ffffff;
25
+ "
26
+ >
27
+ <!--[if mso]>
28
+ <i style="letter-spacing: 25px; mso-font-width: -100%; mso-text-raise: 30pt"
29
+ >&nbsp;</i
30
+ >
31
+ <![endif]-->
32
+ <span style="mso-text-raise: 15pt">Join {{ projectName }}</span>
33
+ <!--[if mso]>
34
+ <i style="letter-spacing: 25px; mso-font-width: -100%">&nbsp;</i>
35
+ <![endif]-->
36
+ </a>
18
37
 
19
38
  {% endblock %}