diff --git a/apps/demo/emails/magic-links/aws-verify-email.tsx b/apps/demo/emails/magic-links/aws-verify-email.tsx
index ab93659440..8155680ee3 100644
--- a/apps/demo/emails/magic-links/aws-verify-email.tsx
+++ b/apps/demo/emails/magic-links/aws-verify-email.tsx
@@ -9,8 +9,10 @@ import {
Link,
Preview,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface AWSVerifyEmailProps {
verificationCode?: string;
@@ -26,59 +28,76 @@ export default function AWSVerifyEmail({
return (
- AWS Email Verification
-
-
-
-
-
-
- Verify your email address
-
- Thanks for starting the new AWS account creation process. We
- want to make sure it's really you. Please enter the following
- verification code when prompted. If you don't want to
- create an account, you can ignore this message.
-
-
- Verification code
-
- {verificationCode}
-
- (This code is valid for 10 minutes)
+
+
+ AWS Email Verification
+
+
+
+
+
+
+
+ Verify your email address
+
+
+ Thanks for starting the new AWS account creation process. We
+ want to make sure it's really you. Please enter the following
+ verification code when prompted. If you don't want to
+ create an account, you can ignore this message.
+
+
+
+ Verification code
+
+
+
+ {verificationCode}
+
+
+ (This code is valid for 10 minutes)
+
+
+
+
+
+
+ Amazon Web Services will never email you and ask you to
+ disclose or verify your password, credit card, or banking
+ account number.
-
-
-
- Amazon Web Services will never email you and ask you to disclose
- or verify your password, credit card, or banking account number.
-
-
-
-
- This message was produced and distributed by Amazon Web Services,
- Inc., 410 Terry Ave. North, Seattle, WA 98109. Β© 2022, Amazon Web
- Services, Inc.. All rights reserved. AWS is a registered trademark
- of{' '}
-
- Amazon.com
-
- , Inc. View our{' '}
-
- privacy policy
-
- .
-
-
-
+
+ This message was produced and distributed by Amazon Web Services,
+ Inc., 410 Terry Ave. North, Seattle, WA 98109. Β© 2022, Amazon Web
+ Services, Inc.. All rights reserved. AWS is a registered trademark
+ of{' '}
+
+ Amazon.com
+
+ , Inc. View our{' '}
+
+ privacy policy
+
+ .
+
+
+
+
);
}
@@ -86,90 +105,3 @@ export default function AWSVerifyEmail({
AWSVerifyEmail.PreviewProps = {
verificationCode: '596853',
} satisfies AWSVerifyEmailProps;
-
-const main = {
- backgroundColor: '#fff',
- color: '#212121',
-};
-
-const container = {
- padding: '20px',
- margin: '0 auto',
- backgroundColor: '#eee',
-};
-
-const h1 = {
- color: '#333',
- fontFamily:
- "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
- fontSize: '20px',
- fontWeight: 'bold',
- marginBottom: '15px',
-};
-
-const link = {
- color: '#2754C5',
- fontFamily:
- "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
- fontSize: '14px',
- textDecoration: 'underline',
-};
-
-const text = {
- color: '#333',
- fontFamily:
- "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
- fontSize: '14px',
- margin: '24px 0',
-};
-
-const imageSection = {
- backgroundColor: '#252f3d',
- display: 'flex',
- padding: '20px 0',
- alignItems: 'center',
- justifyContent: 'center',
-};
-
-const coverSection = { backgroundColor: '#fff' };
-
-const upperSection = { padding: '25px 35px' };
-
-const lowerSection = { padding: '25px 35px' };
-
-const footerText = {
- ...text,
- fontSize: '12px',
- padding: '0 20px',
-};
-
-const verifyText = {
- ...text,
- margin: 0,
- fontWeight: 'bold',
- textAlign: 'center' as const,
-};
-
-const codeText = {
- ...text,
- fontWeight: 'bold',
- fontSize: '36px',
- margin: '10px 0',
- textAlign: 'center' as const,
-};
-
-const validityText = {
- ...text,
- margin: '0px',
- textAlign: 'center' as const,
-};
-
-const verificationSection = {
- display: 'flex',
- alignItems: 'center',
- justifyContent: 'center',
-};
-
-const mainText = { ...text, marginBottom: '14px' };
-
-const cautionText = { ...text, margin: '0px' };
diff --git a/apps/demo/emails/magic-links/linear-login-code.tsx b/apps/demo/emails/magic-links/linear-login-code.tsx
index 6c6265daf6..1e94cb076d 100644
--- a/apps/demo/emails/magic-links/linear-login-code.tsx
+++ b/apps/demo/emails/magic-links/linear-login-code.tsx
@@ -10,8 +10,10 @@ import {
Link,
Preview,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface LinearLoginCodeEmailProps {
validationCode?: string;
@@ -26,33 +28,46 @@ export const LinearLoginCodeEmail = ({
}: LinearLoginCodeEmailProps) => (
- Your login code for Linear
-
-
- Your login code for Linear
-
-
- This link and code will only be valid for the next 5 minutes. If the
- link does not work, you can use the login verification code directly:
-
- {validationCode}
-
-
- Linear
-
-
-
+
+
+ Your login code for Linear
+
+
+
+ Your login code for Linear
+
+
+
+ This link and code will only be valid for the next 5 minutes. If the
+ link does not work, you can use the login verification code
+ directly:
+
+
+ {validationCode}
+
+
+
+ Linear
+
+
+
+
);
@@ -61,74 +76,3 @@ LinearLoginCodeEmail.PreviewProps = {
} as LinearLoginCodeEmailProps;
export default LinearLoginCodeEmail;
-
-const logo = {
- borderRadius: 21,
- width: 42,
- height: 42,
-};
-
-const main = {
- backgroundColor: '#ffffff',
- fontFamily:
- '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif',
-};
-
-const container = {
- margin: '0 auto',
- padding: '20px 0 48px',
- maxWidth: '560px',
-};
-
-const heading = {
- fontSize: '24px',
- letterSpacing: '-0.5px',
- lineHeight: '1.3',
- fontWeight: '400',
- color: '#484848',
- padding: '17px 0 0',
-};
-
-const paragraph = {
- margin: '0 0 15px',
- fontSize: '15px',
- lineHeight: '1.4',
- color: '#3c4149',
-};
-
-const buttonContainer = {
- padding: '27px 0 27px',
-};
-
-const button = {
- backgroundColor: '#5e6ad2',
- borderRadius: '3px',
- fontWeight: '600',
- color: '#fff',
- fontSize: '15px',
- textDecoration: 'none',
- textAlign: 'center' as const,
- display: 'block',
- padding: '11px 23px',
-};
-
-const reportLink = {
- fontSize: '14px',
- color: '#b4becc',
-};
-
-const hr = {
- borderColor: '#dfe1e4',
- margin: '42px 0 26px',
-};
-
-const code = {
- fontFamily: 'monospace',
- fontWeight: '700',
- padding: '1px 4px',
- backgroundColor: '#dfe1e4',
- letterSpacing: '-0.3px',
- fontSize: '21px',
- borderRadius: '4px',
- color: '#3c4149',
-};
diff --git a/apps/demo/emails/magic-links/notion-magic-link.tsx b/apps/demo/emails/magic-links/notion-magic-link.tsx
index 1fe5774d4c..ddbebb400b 100644
--- a/apps/demo/emails/magic-links/notion-magic-link.tsx
+++ b/apps/demo/emails/magic-links/notion-magic-link.tsx
@@ -7,8 +7,10 @@ import {
Img,
Link,
Preview,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface NotionMagicLinkEmailProps {
loginCode?: string;
@@ -23,66 +25,54 @@ export const NotionMagicLinkEmail = ({
}: NotionMagicLinkEmailProps) => (
- Log in with this magic link
-
- Login
-
- Click here to log in with this magic link
-
-
- Or, copy and paste this temporary login code:
-
- {loginCode}
-
- If you didn't try to login, you can safely ignore this email.
-
-
- Hint: You can set a permanent password in Settings & members β My
- account.
-
-
-
+
+
+ Log in with this magic link
+
+
+ Login
+
- Notion.so
+ Click here to log in with this magic link
- , the all-in-one-workspace
-
- for your notes, tasks, wikis, and databases.
-
-
-
+
+ Or, copy and paste this temporary login code:
+
+
+ {loginCode}
+
+
+ If you didn't try to login, you can safely ignore this email.
+
+
+ Hint: You can set a permanent password in Settings & members β My
+ account.
+
+
+
+
+ Notion.so
+
+ , the all-in-one-workspace
+
+ for your notes, tasks, wikis, and databases.
+
+
+
+
);
@@ -91,59 +81,3 @@ NotionMagicLinkEmail.PreviewProps = {
} as NotionMagicLinkEmailProps;
export default NotionMagicLinkEmail;
-
-const main = {
- backgroundColor: '#ffffff',
-};
-
-const container = {
- paddingLeft: '12px',
- paddingRight: '12px',
- margin: '0 auto',
-};
-
-const h1 = {
- color: '#333',
- fontFamily:
- "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
- fontSize: '24px',
- fontWeight: 'bold',
- margin: '40px 0',
- padding: '0',
-};
-
-const link = {
- color: '#2754C5',
- fontFamily:
- "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
- fontSize: '14px',
- textDecoration: 'underline',
-};
-
-const text = {
- color: '#333',
- fontFamily:
- "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
- fontSize: '14px',
- margin: '24px 0',
-};
-
-const footer = {
- color: '#898989',
- fontFamily:
- "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
- fontSize: '12px',
- lineHeight: '22px',
- marginTop: '12px',
- marginBottom: '24px',
-};
-
-const code = {
- display: 'inline-block',
- padding: '16px 4.5%',
- width: '90.5%',
- backgroundColor: '#f4f4f4',
- borderRadius: '5px',
- border: '1px solid #eee',
- color: '#333',
-};
diff --git a/apps/demo/emails/magic-links/plaid-verify-identity.tsx b/apps/demo/emails/magic-links/plaid-verify-identity.tsx
index cd967538d3..1be7fe2b58 100644
--- a/apps/demo/emails/magic-links/plaid-verify-identity.tsx
+++ b/apps/demo/emails/magic-links/plaid-verify-identity.tsx
@@ -7,8 +7,10 @@ import {
Img,
Link,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface PlaidVerifyIdentityEmailProps {
validationCode?: string;
@@ -23,33 +25,46 @@ export const PlaidVerifyIdentityEmail = ({
}: PlaidVerifyIdentityEmailProps) => (
-
-
- Verify Your Identity
-
- Enter the following code to finish linking Venmo.
-
-
- Not expecting this email?
-
- Contact{' '}
-
- login@plaid.com
- {' '}
- if you did not request this code.
+
+
+
+
+
+ Verify Your Identity
+
+
+ Enter the following code to finish linking Venmo.
+
+
+
+ Not expecting this email?
+
+
+ Contact{' '}
+
+ login@plaid.com
+ {' '}
+ if you did not request this code.
+
+
+
+ Securely powered by Plaid.
-
- Securely powered by Plaid.
-
+
+
);
@@ -58,99 +73,3 @@ PlaidVerifyIdentityEmail.PreviewProps = {
} as PlaidVerifyIdentityEmailProps;
export default PlaidVerifyIdentityEmail;
-
-const main = {
- backgroundColor: '#ffffff',
- fontFamily: 'HelveticaNeue,Helvetica,Arial,sans-serif',
-};
-
-const container = {
- backgroundColor: '#ffffff',
- border: '1px solid #eee',
- borderRadius: '5px',
- boxShadow: '0 5px 10px rgba(20,50,70,.2)',
- marginTop: '20px',
- maxWidth: '360px',
- margin: '0 auto',
- padding: '68px 0 130px',
-};
-
-const logo = {
- margin: '0 auto',
-};
-
-const tertiary = {
- color: '#0a85ea',
- fontSize: '11px',
- fontWeight: 700,
- fontFamily: 'HelveticaNeue,Helvetica,Arial,sans-serif',
- height: '16px',
- letterSpacing: '0',
- lineHeight: '16px',
- margin: '16px 8px 8px 8px',
- textTransform: 'uppercase' as const,
- textAlign: 'center' as const,
-};
-
-const secondary = {
- color: '#000',
- display: 'inline-block',
- fontFamily: 'HelveticaNeue-Medium,Helvetica,Arial,sans-serif',
- fontSize: '20px',
- fontWeight: 500,
- lineHeight: '24px',
- marginBottom: '0',
- marginTop: '0',
- textAlign: 'center' as const,
-};
-
-const codeContainer = {
- background: 'rgba(0,0,0,.05)',
- borderRadius: '4px',
- margin: '16px auto 14px',
- verticalAlign: 'middle',
- width: '280px',
-};
-
-const code = {
- color: '#000',
- fontFamily: 'HelveticaNeue-Bold',
- fontSize: '32px',
- fontWeight: 700,
- letterSpacing: '6px',
- lineHeight: '40px',
- paddingBottom: '8px',
- paddingTop: '8px',
- margin: '0 auto',
- display: 'block',
- textAlign: 'center' as const,
-};
-
-const paragraph = {
- color: '#444',
- fontSize: '15px',
- fontFamily: 'HelveticaNeue,Helvetica,Arial,sans-serif',
- letterSpacing: '0',
- lineHeight: '23px',
- padding: '0 40px',
- margin: '0',
- textAlign: 'center' as const,
-};
-
-const link = {
- color: '#444',
- textDecoration: 'underline',
-};
-
-const footer = {
- color: '#000',
- fontSize: '12px',
- fontWeight: 800,
- letterSpacing: '0',
- lineHeight: '23px',
- margin: '0',
- marginTop: '20px',
- fontFamily: 'HelveticaNeue,Helvetica,Arial,sans-serif',
- textAlign: 'center' as const,
- textTransform: 'uppercase' as const,
-};
diff --git a/apps/demo/emails/magic-links/raycast-magic-link.tsx b/apps/demo/emails/magic-links/raycast-magic-link.tsx
index 5a8e7c1b4e..1d091f0d1c 100644
--- a/apps/demo/emails/magic-links/raycast-magic-link.tsx
+++ b/apps/demo/emails/magic-links/raycast-magic-link.tsx
@@ -9,8 +9,10 @@ import {
Link,
Preview,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface RaycastMagicLinkEmailProps {
magicLink?: string;
@@ -25,47 +27,52 @@ export const RaycastMagicLinkEmail = ({
}: RaycastMagicLinkEmailProps) => (
- Log in with this magic link.
-
-
- πͺ Your magic link
-
-
-
- π Click here to sign in π
-
+
+
+ Log in with this magic link.
+
+
+
+ πͺ Your magic link
+
+
+
+
+ π Click here to sign in π
+
+
+
+ If you didn't request this, please ignore this email.
+
+
+
+ Best,
+ - Raycast Team
-
- If you didn't request this, please ignore this email.
+
+
+
+ Raycast Technologies Inc.
-
-
- Best,
- - Raycast Team
-
-
-
- Raycast Technologies Inc.
-
- 2093 Philadelphia Pike #3222, Claymont, DE 19703
-
-
-
+
+ 2093 Philadelphia Pike #3222, Claymont, DE 19703
+
+
+
+
);
@@ -74,47 +81,3 @@ RaycastMagicLinkEmail.PreviewProps = {
} as RaycastMagicLinkEmailProps;
export default RaycastMagicLinkEmail;
-
-const main = {
- backgroundColor: '#ffffff',
- fontFamily:
- '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif',
-};
-
-const container = {
- margin: '0 auto',
- padding: '20px 25px 48px',
- backgroundImage: 'url("/static/raycast-bg.png")',
- backgroundPosition: 'bottom',
- backgroundRepeat: 'no-repeat, no-repeat',
-};
-
-const heading = {
- fontSize: '28px',
- fontWeight: 'bold',
- marginTop: '48px',
-};
-
-const body = {
- margin: '24px 0',
-};
-
-const paragraph = {
- fontSize: '16px',
- lineHeight: '26px',
-};
-
-const link = {
- color: '#FF6363',
-};
-
-const hr = {
- borderColor: '#dddddd',
- marginTop: '48px',
-};
-
-const footer = {
- color: '#8898aa',
- fontSize: '12px',
- marginLeft: '4px',
-};
diff --git a/apps/demo/emails/magic-links/slack-confirm.tsx b/apps/demo/emails/magic-links/slack-confirm.tsx
index a9269416ac..01c3a7f546 100644
--- a/apps/demo/emails/magic-links/slack-confirm.tsx
+++ b/apps/demo/emails/magic-links/slack-confirm.tsx
@@ -10,8 +10,10 @@ import {
Preview,
Row,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface SlackConfirmEmailProps {
validationCode?: string;
@@ -26,121 +28,127 @@ export const SlackConfirmEmail = ({
}: SlackConfirmEmailProps) => (
- Confirm your email address
-
-
-
-
- Confirm your email address
-
- Your confirmation code is below - enter it in your open browser window
- and we'll help you get signed in.
-
+
+
+ Confirm your email address
+
+
+
+
+
+ Confirm your email address
+
+
+ Your confirmation code is below - enter it in your open browser
+ window and we'll help you get signed in.
+
-
+
-
- If you didn't request this email, there's nothing to worry about, you
- can safely ignore it.
-
+
+ If you didn't request this email, there's nothing to worry about,
+ you can safely ignore it.
+
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
- Our blog
-
- |
-
- Policies
-
- |
-
- Help center
-
- |
-
- Slack Community
-
-
- Β©2022 Slack Technologies, LLC, a Salesforce company.
- 500 Howard Street, San Francisco, CA 94105, USA
-
- All rights reserved.
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Our blog
+
+ |
+
+ Policies
+
+ |
+
+ Help center
+
+ |
+
+ Slack Community
+
+
+ Β©2022 Slack Technologies, LLC, a Salesforce company.
+ 500 Howard Street, San Francisco, CA 94105, USA
+
+ All rights reserved.
+
+
+
+
+
);
@@ -149,77 +157,3 @@ SlackConfirmEmail.PreviewProps = {
} as SlackConfirmEmailProps;
export default SlackConfirmEmail;
-
-const footerText = {
- fontSize: '12px',
- color: '#b7b7b7',
- lineHeight: '15px',
- textAlign: 'left' as const,
- marginBottom: '50px',
-};
-
-const footerLink = {
- color: '#b7b7b7',
- textDecoration: 'underline',
-};
-
-const footerLogos = {
- marginBottom: '32px',
- paddingLeft: '8px',
- paddingRight: '8px',
-};
-
-const socialMediaIcon = {
- display: 'inline',
- marginLeft: '8px',
-};
-
-const main = {
- backgroundColor: '#ffffff',
- margin: '0 auto',
- fontFamily:
- "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
-};
-
-const container = {
- margin: '0 auto',
- padding: '0px 20px',
-};
-
-const logoContainer = {
- marginTop: '32px',
-};
-
-const h1 = {
- color: '#1d1c1d',
- fontSize: '36px',
- fontWeight: '700',
- margin: '30px 0',
- padding: '0',
- lineHeight: '42px',
-};
-
-const heroText = {
- fontSize: '20px',
- lineHeight: '28px',
- marginBottom: '30px',
-};
-
-const codeBox = {
- background: 'rgb(245, 244, 245)',
- borderRadius: '4px',
- marginBottom: '30px',
- padding: '40px 10px',
-};
-
-const confirmationCodeText = {
- fontSize: '30px',
- textAlign: 'center' as const,
- verticalAlign: 'middle',
-};
-
-const text = {
- color: '#000',
- fontSize: '14px',
- lineHeight: '24px',
-};
diff --git a/apps/demo/emails/newsletters/codepen-challengers.tsx b/apps/demo/emails/newsletters/codepen-challengers.tsx
index d72e903041..af35271c89 100644
--- a/apps/demo/emails/newsletters/codepen-challengers.tsx
+++ b/apps/demo/emails/newsletters/codepen-challengers.tsx
@@ -11,8 +11,10 @@ import {
Preview,
Row,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
const baseUrl = process.env.VERCEL_URL
? `https://${process.env.VERCEL_URL}`
@@ -21,398 +23,263 @@ const baseUrl = process.env.VERCEL_URL
export const CodepenChallengersEmail = () => (
- #CodePenChallenge: Cubes
-
-
-
-
-
- View this Challenge on CodePen
-
-
-
- This week: #CodePenChallenge:{' '}
- Cubes
-
-
-
- The Shape challenge continues!
-
-
- Last week, we kicked things off with round shapes. We "rounded" up
- the Pens from week one in our{' '}
- #CodePenChallenge: Round collection.
+
+
+ #CodePenChallenge: Cubes
+
+
+
+
+
+
+ View this Challenge on CodePen
+
- This week, we move on to cubes π§
+
+ This week: #CodePenChallenge:{' '}
+ Cubes
+
+
+
+ The Shape challenge continues!
+
+
+ Last week, we kicked things off with round shapes. We "rounded" up
+ the Pens from week one in our{' '}
+
+ #CodePenChallenge: Round
+ {' '}
+ collection.
+
-
- Creating cubes in the browser is all about mastery of illusion. Take
- control of perspective and shadows and you can make the magic of 3D
- on a flat screen π§
-
+ This week, we move on to cubes π§
-
- This week is a fun chance to work on your CSS shape-building skills,
- or dig into a 3D JavaScript library like Three.js.
-
+
+ Creating cubes in the browser is all about mastery of illusion.
+ Take control of perspective and shadows and you can make the magic
+ of 3D on a flat screen π§
+
-
- This week's starter template features an ice cube emoji to help
- inspire a "cool" idea for your Pen. As always, the template is just
- as jumping off point. Feel free to incorporate the π§ in your
- creation, add more elements, or freeze it out completely and start
- over from scratch!
-
+
+ This week is a fun chance to work on your CSS shape-building
+ skills, or dig into a 3D JavaScript library like Three.js.
+
-
- πͺ Your Challenge: {' '}
-
- create a Pen that includes cube shapes.
-
-
+
+ This week's starter template features an ice cube emoji to help
+ inspire a "cool" idea for your Pen. As always, the template is
+ just as jumping off point. Feel free to incorporate the π§ in your
+ creation, add more elements, or freeze it out completely and start
+ over from scratch!
+
-
+
+ πͺ Your Challenge: {' '}
+
+ create a Pen that includes cube shapes.
+
+
-
-
- CodePen PRO combines a bunch of features that can help any
- front-end designer or developer at any experience level.
-
-
-
- Learn More
-
+
+
+
+
+ CodePen PRO combines a bunch of features that can help any
+ front-end designer or developer at any experience level.
+
+
+
+ Learn More
+
+
-
-
-
- To participate: {' '}
- Create a Pen β and tag it{' '}
-
- codepenchallenge
- {' '}
- and
-
- {' '}
- cpc-cubes
-
- . We'll be watching and gathering the Pens into a Collection, and
- sharing on Twitter and{' '}
- Instagram (Use the #CodePenChallenge tag
- on Twitter and Instagram as well).
-
-
-
-
- IDEAS!
-
-
- π
-
- This week we move from 2 dimensions to three! Maybe you could
- exercise your perspective in CSS
- to create a 3D cube. Or, you can try out creating 3D shapes in
- JavaScript, using WebGL or
- building a Three.js scene.
-
-
-
-
- π
-
- There's more to cubes than just six square sides. There are
- variations on the cube that could be fun to play with this
- week: cuboid shapes are
- hexahedrons with faces that aren't always squares. And if you
- want to really push the boundaries of shape, consider the 4
- dimensional tesseract!
-
-
-
-
- π
-
- Here's a mind-bending idea that can combine the round shapes
- from week one with this week's cube theme:{' '}
- Spherical Cubes π³ Solving
- longstanding mathematical mysteries is probably outside the
- scope of a CodePen challenge, but you could use front-end
- tools to explore fitting spheres into cubes, or vice-versa.
-
-
-
-
- RESOURCES!
-
-
- π
-
- Learn all about{' '}
- How CSS Perspective Works and
- how to build a 3D CSS cube from scratch in Amit Sheen's
- in-depth tutorial for CSS-Tricks. Or, check out stunning
- examples of WebGL cubes from Matthias Hurrle:{' '}
- Just Ice and{' '}
- Posing.
-
-
+
+ To participate: {' '}
+ Create a Pen β{' '}
+ and tag it{' '}
+
+ codepenchallenge
+ {' '}
+ and
+
+ {' '}
+ cpc-cubes
+
+ . We'll be watching and gathering the Pens into a Collection, and
+ sharing on{' '}
+ Twitter and{' '}
+ Instagram (Use
+ the #CodePenChallenge tag on Twitter and Instagram as well).
+
-
- π
-
- Want to go beyond the square cube? Draw inspiration from
- EntropyReversed's{' '}
- Pulsating Tesseract, Josetxu's{' '}
- Rainbow Cuboid Loader, or Ana
- Tudor's{' '}
- Pure CSS cuboid jellyfish.
+
+
+
+ IDEAS!
+
+
+ π
+
+ This week we move from 2 dimensions to three! Maybe you
+ could exercise your{' '}
+
+ perspective
+ {' '}
+ in CSS to create a 3D cube. Or, you can try out creating 3D
+ shapes in JavaScript, using{' '}
+ WebGL or
+ building a{' '}
+
+ Three.js scene
+
+ .
+
+
+
+
+ π
+
+ There's more to cubes than just six square sides. There are
+ variations on the cube that could be fun to play with this
+ week:{' '}
+
+ cuboid shapes
+ {' '}
+ are hexahedrons with faces that aren't always squares. And
+ if you want to really push the boundaries of shape, consider
+ the 4 dimensional{' '}
+
+ tesseract!
+
+
+
+
+
+ π
+
+ Here's a mind-bending idea that can combine the round shapes
+ from week one with this week's cube theme:{' '}
+
+ Spherical Cubes
+ {' '}
+ π³ Solving longstanding mathematical mysteries is probably
+ outside the scope of a CodePen challenge, but you could use
+ front-end tools to explore fitting spheres into cubes, or
+ vice-versa.
+
+
+
+
+
+ RESOURCES!
-
-
- π
-
- Did that spherical cubes concept pique your interest? Explore
- Ryan Mulligan's Cube Sphere,
- Munir Safi's{' '}
-
- 3D Sphere to Cube Animation With Virtual Trackball
- {' '}
- and Ana Tudor's{' '}
- Infinitely unpack prism for more
- mindbending cube concepts that test the boundaries of how
- shapes interact with each other.
-
-
-
-
-
+
+ π
+
+ Learn all about{' '}
+
+ How CSS Perspective Works
+ {' '}
+ and how to build a 3D CSS cube from scratch in Amit Sheen's
+ in-depth tutorial for CSS-Tricks. Or, check out stunning
+ examples of WebGL cubes from Matthias Hurrle:{' '}
+ Just Ice{' '}
+ and{' '}
+ Posing.
+
+
+
+
+ π
+
+ Want to go beyond the square cube? Draw inspiration from
+ EntropyReversed's{' '}
+
+ Pulsating Tesseract
+
+ , Josetxu's{' '}
+
+ Rainbow Cuboid Loader
+
+ , or Ana Tudor's{' '}
+
+ Pure CSS cuboid jellyfish
+
+ .
+
+
+
+
+ π
+
+ Did that spherical cubes concept pique your interest?
+ Explore Ryan Mulligan's{' '}
+
+ Cube Sphere
+
+ , Munir Safi's{' '}
+
+ 3D Sphere to Cube Animation With Virtual Trackball
+ {' '}
+ and Ana Tudor's{' '}
+
+ Infinitely unpack prism
+ {' '}
+ for more mindbending cube concepts that test the boundaries
+ of how shapes interact with each other.
+
+
+
+
+
-
+
+
+ Go to Challenge Page
+
+
-
-
- You can adjust your{' '}
- email preferences any time, or{' '}
- instantly opt out of emails of this
- kind. Need help with anything? Hit up{' '}
- support.
-
-
-
-
+
+
+ You can adjust your{' '}
+
+ email preferences
+ {' '}
+ any time, or{' '}
+
+ instantly opt out
+ {' '}
+ of emails of this kind. Need help with anything? Hit up{' '}
+
+ support
+
+ .
+
+
+
+
+
);
export default CodepenChallengersEmail;
-
-const main = {
- fontFamily: '"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif',
- backgroundColor: '#505050',
- margin: '0',
-};
-
-const imgHeader = {
- margin: 'auto',
- maxWidth: '100%',
-};
-
-const imgCube = {
- maxWidth: '100%',
-};
-
-const header = {
- width: '100%',
- backgroundColor: '#191919',
- margin: '0 auto',
- paddingBottom: '30px',
- zIndex: '999',
-};
-
-const container = {
- margin: '0 auto',
- width: '648px',
- maxWidth: '100%',
- position: 'relative' as const,
-};
-
-const challengeLink = {
- backgroundColor: '#505050',
- textAlign: 'center' as const,
- padding: '10px 0',
- fontSize: '13px',
- position: 'absolute' as const,
- width: '648px',
- maxWidth: '100%',
- top: '-28px',
- margin: '0 0 16px 0',
-};
-
-const link = {
- color: '#fff',
- cursor: 'pointer',
-};
-
-const blueLink = {
- color: '#15c',
- cursor: 'pointer',
-};
-
-const heading = {
- background: '#f0d361',
- padding: '30px',
- color: '#191919',
- fontWeight: '400',
- marginBottom: '0',
-};
-
-const section = {
- margin: '0',
- background: '#fff',
- padding: '0 24px',
-};
-
-const yellowSection = {
- background: '#f5d247',
- padding: '30px',
- fontSize: '18px',
- lineHeight: '1.5',
-};
-
-const text = {
- fontSize: '16px',
-};
-
-const cubeText = { fontSize: '32px', margin: '4px 0 0 0' };
-
-const yourChallenge = {
- fontSize: '16px',
- border: '6px solid #ebd473',
- padding: '20px',
- margin: '0 0 40px 0',
-};
-
-const sectionPro = {
- marginTop: '40px',
- marginBottom: '24px',
- textAlign: 'center' as const,
- background: '#0b112a',
- color: '#fff',
- padding: '35px 20px 30px 20px',
- border: '6px solid #2138c6',
-};
-
-const imagePro = { margin: '0 auto 30px auto' };
-
-const button = {
- background: '#2138c6',
- color: '#fff',
- border: '0',
- fontSize: '15px',
- lineHeight: '18px',
- cursor: 'pointer',
- borderRadius: '4px',
- padding: '12px',
-};
-
-const resourcesTitle = {
- fontWeight: '900',
- lineHeight: '1.1',
- marginTop: '-40px',
- fontSize: '18px',
-};
-
-const ideasTitle = {
- fontWeight: '900',
- lineHeight: '1.1',
- fontSize: '18px',
-};
-
-const ideas = {
- width: '50%',
- paddingRight: '10px',
-};
-
-const resources = {
- width: '50%',
- paddingLeft: '10px',
-};
-
-const card = {
- padding: '20px',
- margin: '0 0 20px 0',
- borderRadius: '10px',
- fontSize: '36px',
- textAlign: 'center' as const,
-};
-
-const yellowCard = {
- ...card,
- background: '#fff4c8',
- border: '1px solid #f4d247',
-};
-
-const blueCard = {
- ...card,
- background: '#d9f6ff',
- border: '1px solid #92bfd0',
-};
-
-const textCard = {
- fontSize: '13px',
- textAlign: 'left' as const,
-};
-
-const goToChallenge = {
- margin: '40px 0 120px 0',
- textAlign: 'center' as const,
-};
-
-const footerButton = {
- fontSize: '26px',
- color: '#15c',
- background: '#222',
- borderRadius: '4px',
- fontWeight: 'bold',
- cursor: 'pointer',
- padding: '15px 30px',
-};
-
-const footer = {
- background: '#fff',
- color: '#505050',
- padding: '0 24px',
- marginBottom: '48px',
-};
-
-const footerText = {
- fontSize: '13px',
-};
-
-const footerLink = {
- textDecoration: 'underline',
- color: '#505050',
- cursor: 'pointer',
-};
diff --git a/apps/demo/emails/newsletters/google-play-policy-update.tsx b/apps/demo/emails/newsletters/google-play-policy-update.tsx
index 079e50de8d..0db7403682 100644
--- a/apps/demo/emails/newsletters/google-play-policy-update.tsx
+++ b/apps/demo/emails/newsletters/google-play-policy-update.tsx
@@ -10,8 +10,10 @@ import {
Preview,
Row,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
const baseUrl = process.env.VERCEL_URL
? `https://${process.env.VERCEL_URL}`
@@ -20,171 +22,167 @@ const baseUrl = process.env.VERCEL_URL
export const GooglePlayPolicyUpdateEmail = () => (
- Google Play developers
-
-
-
-
-
-
-
-
-
-
-
-
- DEVELOPER UPDATE
- Hello Google Play Developer,
-
- We strive to make Google Play a safe and trusted experience for
- users.
-
-
- We've added clarifications to our{' '}
-
- Target API Level policy
-
- . Because this is a clarification, our enforcement standards and
- practices for this policy remain the same.
-
-
-
-
- Weβre noting exceptions to the{' '}
-
- Target API Level policy
-
- , which can be found in our updated{' '}
-
- Help Center article.
-
- These exceptions include permanently private apps and apps that
- target automotive or wearables form factors and are bundled within
- the same package.{' '}
-
- Learn more
-
-
-
-
-
- Weβre also extending the deadline to give you more time to adjust to
- these changes. Now, apps that target API level 29 or below will
- start experiencing reduced distribution starting Jan 31, 2023 {' '}
- instead of Nov 1, 2022. If you need more time to update your app,
- you can request an extension to keep your app discoverable to all
- users until May 1, 2023.
-
-
-
-
-
- Thank you,
-
- The Google Play team
-
-
-
-
-
- Connect with us
-
-
-
-
+
+
+ Google Play developers
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+ DEVELOPER UPDATE
+
+
+ Hello Google Play Developer,
+
+
+ We strive to make Google Play a safe and trusted experience for
+ users.
+
+
+ We've added clarifications to our{' '}
+
+ Target API Level policy
-
-
-
-
+ . Because this is a clarification, our enforcement standards and
+ practices for this policy remain the same.
+
+
+
+
+ We're noting exceptions to the{' '}
+
+ Target API Level policy
+
+ , which can be found in our updated{' '}
+
+ Help Center article.
-
-
-
-
-
-
-
-
-
- Β© 2022 Google LLC 1600 Amphitheatre Parkway, Mountain View, CA
- 94043, USA
-
-
- You have received this mandatory email service announcement to
- update you about important changes to your Google Play Developer
- account.
-
-
-
-
+ These exceptions include permanently private apps and apps that
+ target automotive or wearables form factors and are bundled within
+ the same package.{' '}
+
+ Learn more
+
+
+
+
+
+ We're also extending the deadline to give you more time to adjust
+ to these changes. Now, apps that target API level 29 or below will
+ start experiencing reduced distribution starting{' '}
+ Jan 31, 2023 instead of Nov 1, 2022. If you need more time
+ to update your app, you can request an extension to keep your app
+ discoverable to all users until May 1, 2023.
+
+
+
+
+
+
+ Thank you,
+
+
+ The Google Play team
+
+
+
+
+
+
+ Connect with us
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Β© 2022 Google LLC 1600 Amphitheatre Parkway, Mountain View, CA
+ 94043, USA
+
+
+ You have received this mandatory email service announcement to
+ update you about important changes to your Google Play Developer
+ account.
+
+
+
+
+
);
export default GooglePlayPolicyUpdateEmail;
-const main = {
- backgroundColor: '#dbddde',
- fontFamily:
- '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif',
-};
-
const sectionLogo = {
padding: '0 40px',
};
diff --git a/apps/demo/emails/newsletters/stack-overflow-tips.tsx b/apps/demo/emails/newsletters/stack-overflow-tips.tsx
index f7819747ea..465cd8c278 100644
--- a/apps/demo/emails/newsletters/stack-overflow-tips.tsx
+++ b/apps/demo/emails/newsletters/stack-overflow-tips.tsx
@@ -11,8 +11,10 @@ import {
Preview,
Row,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface StackOverflowTipsEmailProps {
tips?: { id: number; description: string }[];
@@ -47,107 +49,143 @@ export const StackOverflowTipsEmail = ({
}: StackOverflowTipsEmailProps) => (
- Stack overflow tips for searching
-
-
-
-
-
-
-
-
-
- Find what you want, faster
-
-
- Tips and tricks for searching on Stack Overflow
-
-
-
-
-
-
-
+
+
+ Stack overflow tips for searching
+
+
+
+
-
-
- Searching for solutions
-
-
- With more than 18 million questions, it's possible that someone has
- already provided a solution to the problem you're facing.{' '}
-
+
+
+
+
+ Find what you want, faster
+
+
+ Tips and tricks for searching on Stack Overflow
+
+
+
+
+
+
+
-
+
+
+ Searching for solutions
+
+
+ With more than 18 million questions, it's possible that someone
+ has already provided a solution to the problem you're facing.{' '}
+
+
+
+
+
+ Use the search bar at the top of the page to find what you need
+
+
+ Here are a few simple search tips to get you started:
+
+
+ {tips.map((tip) => (
+
+
+ {tip.description}
+
+
+ ))}
+
+
+
+ The more information you can put in the search bar, the more
+ likely you will be to either find the answer you need or feel
+ confident that no one else has asked the question before.
+
+
+
+
+
+ Take a break and read about the worst coder in the world
+
+
+
+
+
-
- Use the search bar at the top of the page to find what you need
-
-
- Here are a few simple search tips to get you started:
+
+
+ You're receiving this email because your Stack Overflow activity
+ triggered this tip or reminder.
-
- {tips.map((tip) => (
-
- {tip.description}
-
- ))}
-
-
- The more information you can put in the search bar, the more likely
- you will be to either find the answer you need or feel confident
- that no one else has asked the question before.
+
+ Unsubscribe from emails like this{' '}
+
+
+ Edit email settings{' '}
+
+
+ Contact us
+
+
+ Privacy
+
+
+
+
+
+
+ Stack Overflow , 110 William Street, 28th Floor, New
+ York, NY 10038
+
+
+ {'<3'}
-
-
-
-
- Take a break and read about the worst coder in the world
-
-
-
-
-
-
-
- You're receiving this email because your Stack Overflow activity
- triggered this tip or reminder.
-
-
-
- Unsubscribe from emails like this{' '}
-
-
- Edit email settings{' '}
-
-
- Contact us
-
-
- Privacy
-
-
-
-
-
-
- Stack Overflow , 110 William Street, 28th Floor, New
- York, NY 10038
-
- {'<3'}
-
-
+
+
);
@@ -156,136 +194,3 @@ StackOverflowTipsEmail.PreviewProps = {
} as StackOverflowTipsEmailProps;
export default StackOverflowTipsEmail;
-
-const main = {
- backgroundColor: '#f3f3f5',
- fontFamily: 'HelveticaNeue,Helvetica,Arial,sans-serif',
-};
-
-const headerContent = { padding: '20px 30px 15px' };
-
-const headerContentTitle = {
- color: '#fff',
- fontSize: '27px',
- fontWeight: 'bold',
- lineHeight: '27px',
-};
-
-const headerContentSubtitle = {
- color: '#fff',
- fontSize: '17px',
-};
-
-const headerImageContainer = {
- padding: '30px 10px',
-};
-
-const headerImage = {
- maxWidth: '100%',
-};
-
-const title = {
- margin: '0 0 15px',
- fontWeight: 'bold',
- fontSize: '21px',
- lineHeight: '21px',
- color: '#0c0d0e',
-};
-
-const paragraph = {
- fontSize: '15px',
- lineHeight: '21px',
- color: '#3c3f44',
-};
-
-const divider = {
- margin: '30px 0',
-};
-
-const container = {
- width: '680px',
- maxWidth: '100%',
- margin: '0 auto',
- backgroundColor: '#ffffff',
-};
-
-const footer = {
- width: '680px',
- maxWidth: '100%',
- margin: '32px auto 0 auto',
- padding: '0 30px',
-};
-
-const content = {
- padding: '30px 30px 40px 30px',
-};
-
-const logo = {
- display: 'flex',
- background: '#f3f3f5',
- padding: '20px 30px',
-};
-
-const header = {
- borderRadius: '5px 5px 0 0',
- display: 'flex',
- flexDireciont: 'column',
- backgroundColor: '#2b2d6e',
-};
-
-const buttonContainer = {
- marginTop: '24px',
- display: 'block',
-};
-
-const button = {
- backgroundColor: '#0095ff',
- border: '1px solid #0077cc',
- fontSize: '17px',
- lineHeight: '17px',
- padding: '13px 17px',
- borderRadius: '4px',
- maxWidth: '120px',
- color: '#fff',
-};
-
-const footerDivider = {
- ...divider,
- borderColor: '#d6d8db',
-};
-
-const footerText = {
- fontSize: '12px',
- lineHeight: '15px',
- color: '#9199a1',
- margin: '0',
-};
-
-const footerLink = {
- display: 'inline-block',
- color: '#9199a1',
- textDecoration: 'underline',
- fontSize: '12px',
- marginRight: '10px',
- marginBottom: '0',
- marginTop: '8px',
-};
-
-const footerAddress = {
- margin: '4px 0',
- fontSize: '12px',
- lineHeight: '15px',
- color: '#9199a1',
-};
-
-const footerHeart = {
- borderRadius: '1px',
- border: '1px solid #d6d9dc',
- padding: '4px 6px 3px 6px',
- fontSize: '11px',
- lineHeight: '11px',
- fontFamily: 'Consolas,monospace',
- color: '#e06c77',
- maxWidth: 'min-content',
- margin: '0 0 32px 0',
-};
diff --git a/apps/demo/emails/notifications/github-access-token.tsx b/apps/demo/emails/notifications/github-access-token.tsx
index ee85b69b38..adb8d18885 100644
--- a/apps/demo/emails/notifications/github-access-token.tsx
+++ b/apps/demo/emails/notifications/github-access-token.tsx
@@ -8,8 +8,10 @@ import {
Link,
Preview,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface GithubAccessTokenEmailProps {
username?: string;
@@ -24,44 +26,51 @@ export const GithubAccessTokenEmail = ({
}: GithubAccessTokenEmailProps) => (
-
- A fine-grained personal access token has been added to your account
-
-
-
-
-
- @{username} , a personal access was created on your
- account.
-
-
-
-
- Hey {username} !
-
-
- A fine-grained personal access token ( resend) was
- recently added to your account.
+
+
+
+ A fine-grained personal access token has been added to your account
+
+
+
+
+
+ @{username} , a personal access was created on your
+ account.
- View your token
-
-
- Your security audit log γ»{' '}
- Contact support
-
+
+
+ Hey {username} !
+
+
+ A fine-grained personal access token ( resend) was
+ recently added to your account.
+
+
+
+ View your token
+
+
+
+
+ Your security audit log
+ {' '}
+ γ»{' '}
+ Contact support
+
-
- GitHub, Inc. γ»88 Colin P Kelly Jr Street γ»San Francisco, CA 94107
-
-
-
+
+ GitHub, Inc. γ»88 Colin P Kelly Jr Street γ»San Francisco, CA 94107
+
+
+
+
);
@@ -70,58 +79,3 @@ GithubAccessTokenEmail.PreviewProps = {
} as GithubAccessTokenEmailProps;
export default GithubAccessTokenEmail;
-
-const main = {
- backgroundColor: '#ffffff',
- color: '#24292e',
- fontFamily:
- '-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',
-};
-
-const container = {
- maxWidth: '480px',
- margin: '0 auto',
- padding: '20px 0 48px',
-};
-
-const title = {
- fontSize: '24px',
- lineHeight: 1.25,
-};
-
-const section = {
- padding: '24px',
- border: 'solid 1px #dedede',
- borderRadius: '5px',
- textAlign: 'center' as const,
-};
-
-const text = {
- margin: '0 0 10px 0',
- textAlign: 'left' as const,
-};
-
-const button = {
- fontSize: '14px',
- backgroundColor: '#28a745',
- color: '#fff',
- lineHeight: 1.5,
- borderRadius: '0.5em',
- padding: '12px 24px',
-};
-
-const links = {
- textAlign: 'center' as const,
-};
-
-const link = {
- color: '#0366d6',
- fontSize: '12px',
-};
-
-const footer = {
- color: '#6a737d',
- fontSize: '12px',
- textAlign: 'center' as const,
- marginTop: '60px',
-};
diff --git a/apps/demo/emails/notifications/yelp-recent-login.tsx b/apps/demo/emails/notifications/yelp-recent-login.tsx
index 5b56a4a219..dc350ae55a 100644
--- a/apps/demo/emails/notifications/yelp-recent-login.tsx
+++ b/apps/demo/emails/notifications/yelp-recent-login.tsx
@@ -10,8 +10,10 @@ import {
Preview,
Row,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface YelpRecentLoginEmailProps {
userFirstName?: string;
@@ -39,106 +41,88 @@ export const YelpRecentLoginEmail = ({
return (
-
- Yelp recent login
-
-
-
-
-
-
-
+
+
+
+ Yelp recent login
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hi {userFirstName},
+
+
+ We noticed a recent login to your Yelp account.
+
+
+
+ Time:
+ {formattedDate}
+
+
+ Device:
+ {loginDevice}
+
+
+ Location:
+ {loginLocation}
+
+
+ *Approximate geographic location based on IP address:
+ {loginIp}
+
+
+
+ If this was you, there's nothing else you need to do.
+
+
+ If this wasn't you or if you have additional questions,
+ please see our support page.
+
+
+
+
+
+
+ Learn More
+
+
+
+
+
+
-
-
-
-
-
- Hi {userFirstName},
-
-
- We noticed a recent login to your Yelp account.
-
-
-
- Time:
- {formattedDate}
-
-
- Device:
- {loginDevice}
-
-
- Location:
- {loginLocation}
-
-
- *Approximate geographic location based on IP address:
- {loginIp}
-
-
-
- If this was you, there's nothing else you need to do.
-
-
- If this wasn't you or if you have additional questions, please
- see our support page.
-
-
-
-
-
- Learn More
-
-
-
-
-
-
-
-
-
- Β© 2022 | Yelp Inc., 350 Mission Street, San Francisco, CA 94105,
- U.S.A. | www.yelp.com
-
-
-
+
+
+
+ Β© 2022 | Yelp Inc., 350 Mission Street, San Francisco, CA 94105,
+ U.S.A. | www.yelp.com
+
+
+
+
);
};
@@ -152,51 +136,3 @@ YelpRecentLoginEmail.PreviewProps = {
} as YelpRecentLoginEmailProps;
export default YelpRecentLoginEmail;
-
-const main = {
- backgroundColor: '#fff',
- fontFamily:
- '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif',
-};
-
-const paragraph = {
- fontSize: 16,
-};
-
-const logo = {
- padding: '30px 20px',
-};
-
-const buttonContainer = {
- textAlign: 'center' as const,
-};
-
-const button = {
- backgroundColor: '#e00707',
- borderRadius: 3,
- color: '#FFF',
- fontWeight: 'bold',
- border: '1px solid rgb(0,0,0, 0.1)',
- cursor: 'pointer',
- display: 'inline-block',
- padding: '12px 30px',
- textDecoration: 'none',
-};
-
-const content = {
- border: '1px solid rgb(0,0,0, 0.1)',
- borderRadius: '3px',
- overflow: 'hidden',
-};
-
-const image = {
- maxWidth: '100%',
-};
-
-const boxInfos = {
- padding: '20px',
-};
-
-const containerImageFooter = {
- padding: '45px 0 0 0',
-};
diff --git a/apps/demo/emails/receipts/apple-receipt.tsx b/apps/demo/emails/receipts/apple-receipt.tsx
index 194a2c1348..0fe12f8992 100644
--- a/apps/demo/emails/receipts/apple-receipt.tsx
+++ b/apps/demo/emails/receipts/apple-receipt.tsx
@@ -10,8 +10,10 @@ import {
Preview,
Row,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
const baseUrl = process.env.VERCEL_URL
? `https://${process.env.VERCEL_URL}`
@@ -20,473 +22,313 @@ const baseUrl = process.env.VERCEL_URL
export const AppleReceiptEmail = () => (
- Apple Receipt
-
-
-
-
-
-
-
-
- Receipt
-
-
-
-
-
- Save 3% on all your Apple purchases with Apple Card.
- 1 {' '}
-
- Apply and use in minutes
+
+
+ Apple Receipt
+
+
+
+
+
+
+
+
+
+ Receipt
+
+
+
+
+
+
+ Save 3% on all your Apple purchases with Apple Card.
+ 1 {' '}
+
+ Apply and use in minutes
+
+ 2
+
+
+
+
+
+
+
+
+
+ APPLE ID
+
+
+ alan.turing@gmail.com
+
+
+
+
+
+
+
+ INVOICE DATE
+
+
+ 18 Jan 2023
+
+
+
+
+
+
+
+ ORDER ID
+
+
+ ML4F5L8522
+
+
+
+
+ DOCUMENT NO.
+
+
+ 186623754793
+
+
+
+
+
+
+
+ BILLED TO
+
+
+ Visa .... 7461 (Apple Pay)
+
+
+ Alan Turing
+
+
+ 2125 Chestnut St
+
+
+ San Francisco, CA 94123
+
+ USA
+
+
+
+
+
+
+
+
+
+
+
+ HBO Max: Stream TV & Movies
+
+
+ HBO Max Ad-Free (Monthly)
+
+
+ Renews Aug 20, 2023
+
+
+ Write a Review
+
+
+ |
+
+
+ Report a Problem
+
+
+
+
+
+ $14.99
+
+
+
+
+
+
+
+
+
+ TOTAL
+
+
+
+
+
+ $14.99
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Save 3% on all your Apple purchases.
+
+
+
+
+
+
+
+
+
+
+ Apply and use in minutes
+
+
+
+
+
+
+
+ 1. 3% savings is earned as Daily Cash and is transferred to your
+ Apple Cash card when transactions post to your Apple Card account.
+ If you do not have an Apple Cash card, Daily Cash can be applied by
+ you as a credit on your statement balance. 3% is the total amount of
+ Daily Cash earned for these purchases. See the Apple Card Customer
+ Agreement for more details on Daily Cash and qualifying
+ transactions.
+
+
+ 2. Subject to credit approval.
+
+
+ To access and use all the features of Apple Card, you must add Apple
+ Card to Wallet on an iPhone or iPad with iOS or iPadOS 13.2 or
+ later. Update to the latest version of iOS or iPadOS by going to
+ Settings > General > Software Update. Tap Download and
+ Install.
+
+
+ Available for qualifying applicants in the United States.
+
+
+ Apple Card is issued by Goldman Sachs Bank USA, Salt Lake City
+ Branch.
+
+
+ If you reside in the US territories, please call Goldman Sachs at
+ 877-255-5923 with questions about Apple Card.
+
+
+ Privacy: We use a
+
+ {' '}
+ Subscriber ID{' '}
- 2
+ to provide reports to developers.
+
+
+ Get help with subscriptions and purchases.
+
+ Visit Apple Support.
+
+
+
+ Learn how to{' '}
+
+ manage your password preferences
+ {' '}
+ for iTunes, Apple Books, and App Store purchases.
-
-
-
-
-
-
-
- APPLE ID
-
- alan.turing@gmail.com
-
-
-
-
-
-
- INVOICE DATE
- 18 Jan 2023
-
-
-
-
-
- ORDER ID
-
- ML4F5L8522
-
-
-
- DOCUMENT NO.
- 186623754793
-
-
-
-
-
- BILLED TO
-
- Visa .... 7461 (Apple Pay)
-
- Alan Turing
- 2125 Chestnut St
- San Francisco, CA 94123
- USA
-
-
-
-
-
-
-
-
-
-
- HBO Max: Stream TV & Movies
- HBO Max Ad-Free (Monthly)
- Renews Aug 20, 2023
-
- Write a Review
-
- |
-
- Report a Problem
-
-
-
- $14.99
-
-
-
-
-
-
-
- TOTAL
-
-
-
- $14.99
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Save 3% on all your Apple purchases.
-
-
-
-
-
-
-
+
+ {' '}
+ You have the option to stop receiving email receipts for your
+ subscription renewals. If you have opted out, you can still view
+ your receipts in your account under Purchase History. To manage
+ receipts or to opt in again, go to{' '}
+ Account Settings.
+
+
+
+
- Apply and use in minutes
-
-
-
-
-
-
- 1. 3% savings is earned as Daily Cash and is transferred to your Apple
- Cash card when transactions post to your Apple Card account. If you do
- not have an Apple Cash card, Daily Cash can be applied by you as a
- credit on your statement balance. 3% is the total amount of Daily Cash
- earned for these purchases. See the Apple Card Customer Agreement for
- more details on Daily Cash and qualifying transactions.
-
- 2. Subject to credit approval.
-
- To access and use all the features of Apple Card, you must add Apple
- Card to Wallet on an iPhone or iPad with iOS or iPadOS 13.2 or later.
- Update to the latest version of iOS or iPadOS by going to Settings
- > General > Software Update. Tap Download and Install.
-
-
- Available for qualifying applicants in the United States.
-
-
- Apple Card is issued by Goldman Sachs Bank USA, Salt Lake City Branch.
-
-
- If you reside in the US territories, please call Goldman Sachs at
- 877-255-5923 with questions about Apple Card.
-
-
- Privacy: We use a
-
- {' '}
- Subscriber ID{' '}
-
- to provide reports to developers.
-
-
- Get help with subscriptions and purchases.
-
- Visit Apple Support.
-
-
-
- Learn how to{' '}
-
- manage your password preferences
- {' '}
- for iTunes, Apple Books, and App Store purchases.
-
-
-
- {' '}
- You have the option to stop receiving email receipts for your
- subscription renewals. If you have opted out, you can still view your
- receipts in your account under Purchase History. To manage receipts or
- to opt in again, go to{' '}
- Account Settings.
-
-
-
-
-
-
-
-
-
- Account Settings β’{' '}
- Terms of Sale β’{' '}
-
- Privacy Policy{' '}
-
-
-
- Copyright Β© 2023 Apple Inc. {' '}
- All rights reserved
-
-
-
+
+
+
+
+ Account Settings β’{' '}
+ Terms of Sale β’{' '}
+
+ Privacy Policy{' '}
+
+
+
+ Copyright Β© 2023 Apple Inc. {' '}
+ All rights reserved
+
+
+
+
);
export default AppleReceiptEmail;
-
-const main = {
- fontFamily: '"Helvetica Neue",Helvetica,Arial,sans-serif',
- backgroundColor: '#ffffff',
-};
-
-const resetText = {
- margin: '0',
- padding: '0',
- lineHeight: 1.4,
-};
-
-const container = {
- margin: '0 auto',
- padding: '20px 0 48px',
- width: '660px',
- maxWidth: '100%',
-};
-
-const tableCell = { display: 'table-cell' };
-
-const heading = {
- fontSize: '32px',
- fontWeight: '300',
- color: '#888888',
-};
-
-const cupomText = {
- textAlign: 'center' as const,
- margin: '36px 0 40px 0',
- fontSize: '14px',
- fontWeight: '500',
- color: '#111111',
-};
-
-const supStyle = {
- fontWeight: '300',
-};
-
-const informationTable = {
- borderCollapse: 'collapse' as const,
- borderSpacing: '0px',
- color: 'rgb(51,51,51)',
- backgroundColor: 'rgb(250,250,250)',
- borderRadius: '3px',
- fontSize: '12px',
-};
-
-const informationTableRow = {
- minHeight: '46px',
-};
-
-const informationTableColumn = {
- paddingLeft: '20px',
- borderStyle: 'solid',
- borderColor: 'white',
- borderWidth: '0px 1px 1px 0px',
- minHeight: '44px',
-};
-
-const informationTableLabel = {
- ...resetText,
- color: 'rgb(102,102,102)',
- fontSize: '10px',
-};
-
-const informationTableValue = {
- fontSize: '12px',
- margin: '0',
- padding: '0',
- lineHeight: 1.4,
-};
-
-const productTitleTable = {
- ...informationTable,
- margin: '30px 0 15px 0',
- minHeight: '24px',
-};
-
-const productsTitle = {
- background: '#fafafa',
- paddingLeft: '10px',
- fontSize: '14px',
- fontWeight: '500',
- margin: '0',
-};
-
-const productIcon = {
- margin: '0 0 0 20px',
- borderRadius: '14px',
- border: '1px solid rgb(242,242,242)',
-};
-
-const productTitle = { fontSize: '12px', fontWeight: '600', ...resetText };
-
-const productDescription = {
- fontSize: '12px',
- color: 'rgb(102,102,102)',
- ...resetText,
-};
-
-const productLink = {
- fontSize: '12px',
- color: 'rgb(0,112,201)',
- textDecoration: 'none',
-};
-
-const divisor = {
- marginLeft: '4px',
- marginRight: '4px',
- color: 'rgb(51,51,51)',
- fontWeight: 200,
-};
-
-const productPriceTotal = {
- margin: '0',
- color: 'rgb(102,102,102)',
- fontSize: '10px',
- fontWeight: '600',
- padding: '0px 30px 0px 0px',
- textAlign: 'right' as const,
-};
-
-const productPrice = {
- fontSize: '12px',
- fontWeight: '600',
- margin: '0',
-};
-
-const productPriceLarge = {
- margin: '0px 20px 0px 0px',
- fontSize: '16px',
- fontWeight: '600',
- whiteSpace: 'nowrap' as const,
- textAlign: 'right' as const,
-};
-
-const productPriceWrapper = {
- display: 'table-cell',
- padding: '0px 20px 0px 0px',
- width: '100px',
- verticalAlign: 'top',
-};
-
-const productPriceLine = { margin: '30px 0 0 0' };
-
-const productPriceVerticalLine = {
- minHeight: '48px',
- paddingTop: '48px',
- borderLeft: '1px solid',
- borderColor: 'rgb(238,238,238)',
-};
-
-const productPriceLargeWrapper = { display: 'table-cell', width: '90px' };
-
-const productPriceLineBottom = { margin: '0 0 75px 0' };
-
-const block = { display: 'block' };
-
-const ctaTitle = {
- display: 'block',
- margin: '15px 0 0 0',
-};
-
-const ctaText = { fontSize: '24px', fontWeight: '500' };
-
-const walletWrapper = { display: 'table-cell', margin: '10px 0 0 0' };
-
-const walletLink = { color: 'rgb(0,126,255)', textDecoration: 'none' };
-
-const walletImage = {
- display: 'inherit',
- paddingRight: '8px',
- verticalAlign: 'middle',
-};
-
-const walletBottomLine = { margin: '65px 0 20px 0' };
-
-const footerText = {
- fontSize: '12px',
- color: 'rgb(102,102,102)',
- margin: '0',
- lineHeight: 'auto',
- marginBottom: '16px',
-};
-
-const footerTextCenter = {
- fontSize: '12px',
- color: 'rgb(102,102,102)',
- margin: '20px 0',
- lineHeight: 'auto',
- textAlign: 'center' as const,
-};
-
-const footerLink = { color: 'rgb(0,115,255)' };
-
-const footerIcon = { display: 'block', margin: '40px 0 0 0' };
-
-const footerLinksWrapper = {
- margin: '8px 0 0 0',
- textAlign: 'center' as const,
- fontSize: '12px',
- color: 'rgb(102,102,102)',
-};
-
-const footerCopyright = {
- margin: '25px 0 0 0',
- textAlign: 'center' as const,
- fontSize: '12px',
- color: 'rgb(102,102,102)',
-};
-
-const walletLinkText = {
- fontSize: '14px',
- fontWeight: '400',
- textDecoration: 'none',
-};
diff --git a/apps/demo/emails/receipts/nike-receipt.tsx b/apps/demo/emails/receipts/nike-receipt.tsx
index db13e06a87..d58e6a59a1 100644
--- a/apps/demo/emails/receipts/nike-receipt.tsx
+++ b/apps/demo/emails/receipts/nike-receipt.tsx
@@ -11,9 +11,10 @@ import {
Preview,
Row,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
-import type * as React from 'react';
+import tailwindConfig from '../tailwind.config';
const baseUrl = process.env.VERCEL_URL
? `https://${process.env.VERCEL_URL}`
@@ -22,442 +23,336 @@ const baseUrl = process.env.VERCEL_URL
export const NikeReceiptEmail = () => (
-
- Get your order summary, estimated delivery date and more
-
-
-
-
-
- Tracking Number
- 1ZV218970300071628
-
-
- Track Package
-
-
-
-
-
-
- It's On Its Way.
-
- You order's is on its way. Use the link above to track its progress.
-
-
- WeΒ΄ve also charged your payment method for the cost of your order
- and will be removing any authorization holds. For payment details,
- please visit your Orders page on Nike.com or in the Nike app.
-
-
-
-
- Shipping to: Alan Turing
-
- 2125 Chestnut St, San Francisco, CA 94123
-
-
-
-
-
-
-
-
-
-
- Brazil 2022/23 Stadium Away Women's Nike Dri-FIT Soccer Jersey
-
- Size L (12β14)
-
-
-
-
-
-
-
- Order Number
- C0106373851
-
-
- Order Date
- Sep 22, 2022
-
-
-
-
- Order Status
-
-
-
-
-
-
- Top Picks For You
-
-
-
-
-
- USWNT 2022/23 Stadium Home
-
-
- Women's Nike Dri-FIT Soccer Jersey
+
+
+
+ Get your order summary, estimated delivery date and more
+
+
+
+
+
+
+ Tracking Number
+
+
+ 1ZV218970300071628
+
+
+
+
+ Track Package
+
+
+
+
+
+
+
+
+ It's On Its Way.
+
+
+ You order's is on its way. Use the link above to track its
+ progress.
+
+
+ WeΒ΄ve also charged your payment method for the cost of your order
+ and will be removing any authorization holds. For payment details,
+ please visit your Orders page on Nike.com or in the Nike app.
+
+
+
+
+
+ Shipping to: Alan Turing
+
+
+ 2125 Chestnut St, San Francisco, CA 94123
+
+
+
+
+
+
+
+
+
+
+ Brazil 2022/23 Stadium Away Women's Nike Dri-FIT Soccer Jersey
+
+
+ Size L (12β14)
+
+
+
+
+
+
+
+
+
+ Order Number
+
+
+ C0106373851
+
+
+
+
+ Order Date
+
+
+ Sep 22, 2022
+
+
+
+
+
+
+ Order Status
+
+
+
+
+
+
+
+
+ Top Picks For You
-
-
-
-
- Brazil 2022/23 Stadium Goalkeeper
+
+
+
+
+
+ USWNT 2022/23 Stadium Home
+
+
+ Women's Nike Dri-FIT Soccer Jersey
+
+
+
+
+
+ Brazil 2022/23 Stadium Goalkeeper
+
+
+ Men's Nike Dri-FIT Short-Sleeve Football Shirt
+
+
+
+
+
+ FFF
+
+
+ Women's Soccer Jacket
+
+
+
+
+
+ FFF
+
+
+ Women's Nike Pre-Match Football Top
+
+
+
+
+
+
+
+ Get Help
+
+
+
+
+ Shipping Status
+
+
+
+
+ Shipping & Delivery
+
+
+
+
+ Returns & Exchanges
+
+
+
+
+
+
+ How to Return
+
+
+
+
+ Contact Options
+
+
+
+
+
+
+
+
+
+
+
+
+ 1-800-806-6453
+
+
+
+
+
+
+ 4 am - 11 pm PT
+
+
+
+
+
+
+
+
+ Nike.com
-
- Men's Nike Dri-FIT Short-Sleeve Football Shirt
+
+
+
+
+ Men
+
+
+
+
+ Women
+
+
+
+
+ Kids
+
+
+
+
+ Customize
+
+
+
+
+
+
+
+
+
+ Web Version
+
+
+
+
+ Privacy Policy
+
+
+
+
+
+ Please contact us if you have any questions. (If you reply to
+ this email, we won't be able to see it.)
-
-
-
- FFF
- Women's Soccer Jacket
-
-
-
- FFF
-
- Women's Nike Pre-Match Football Top
+
+
+
+ Β© 2022 Nike, Inc. All Rights Reserved.
-
-
-
-
-
-
- Get Help
-
-
-
-
- Shipping Status
-
-
-
-
- Shipping & Delivery
-
-
-
-
- Returns & Exchanges
-
-
-
-
-
-
- How to Return
-
-
-
-
- Contact Options
-
-
-
-
-
-
-
-
-
-
-
-
- 1-800-806-6453
-
-
-
-
-
-
- 4 am - 11 pm PT
+
+
+
+ NIKE, INC. One Bowerman Drive, Beaverton, Oregon 97005, USA.
-
-
-
-
-
-
- Nike.com
-
-
-
-
- Men
-
-
-
-
- Women
-
-
-
-
- Kids
-
-
-
-
- Customize
-
-
-
-
-
-
-
-
- Web Version
-
-
- Privacy Policy
-
-
-
-
- Please contact us if you have any questions. (If you reply to this
- email, we won't be able to see it.)
-
-
-
-
- Β© 2022 Nike, Inc. All Rights Reserved.
-
-
-
-
- NIKE, INC. One Bowerman Drive, Beaverton, Oregon 97005, USA.
-
-
-
-
-
+
+
+
+
+
);
export default NikeReceiptEmail;
-
-const paddingX = {
- paddingLeft: '40px',
- paddingRight: '40px',
-};
-
-const paddingY = {
- paddingTop: '22px',
- paddingBottom: '22px',
-};
-
-const paragraph = {
- margin: '0',
- lineHeight: '2',
-};
-
-const global = {
- paddingX,
- paddingY,
- defaultPadding: {
- ...paddingX,
- ...paddingY,
- },
- paragraphWithBold: { ...paragraph, fontWeight: 'bold' },
- heading: {
- fontSize: '32px',
- lineHeight: '1.3',
- fontWeight: '700',
- textAlign: 'center',
- letterSpacing: '-1px',
- } as React.CSSProperties,
- text: {
- ...paragraph,
- color: '#747474',
- fontWeight: '500',
- },
- button: {
- border: '1px solid #929292',
- fontSize: '16px',
- textDecoration: 'none',
- padding: '10px 0px',
- width: '220px',
- display: 'block',
- textAlign: 'center',
- fontWeight: 500,
- color: '#000',
- } as React.CSSProperties,
- hr: {
- borderColor: '#E5E5E5',
- margin: '0',
- },
-};
-
-const main = {
- backgroundColor: '#ffffff',
- fontFamily:
- '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif',
-};
-
-const container = {
- margin: '10px auto',
- width: '600px',
- maxWidth: '100%',
- border: '1px solid #E5E5E5',
-};
-
-const track = {
- container: {
- padding: '22px 40px',
- backgroundColor: '#F7F7F7',
- },
- number: {
- margin: '12px 0 0 0',
- fontWeight: 500,
- lineHeight: '1.4',
- color: '#6F6F6F',
- },
-};
-
-const message = {
- padding: '40px 74px',
- textAlign: 'center',
-} as React.CSSProperties;
-
-const adressTitle = {
- ...paragraph,
- fontSize: '15px',
- fontWeight: 'bold',
-};
-
-const recomendationsText = {
- margin: '0',
- fontSize: '15px',
- lineHeight: '1',
- paddingLeft: '10px',
- paddingRight: '10px',
-};
-
-const recomendations = {
- container: {
- padding: '20px 0',
- },
- product: {
- verticalAlign: 'top',
- textAlign: 'left' as const,
- paddingLeft: '2px',
- paddingRight: '2px',
- },
- title: { ...recomendationsText, paddingTop: '12px', fontWeight: '500' },
- text: {
- ...recomendationsText,
- paddingTop: '4px',
- color: '#747474',
- },
-};
-
-const menu = {
- container: {
- paddingLeft: '20px',
- paddingRight: '20px',
- paddingTop: '20px',
- backgroundColor: '#F7F7F7',
- },
- content: {
- ...paddingY,
- paddingLeft: '20px',
- paddingRight: '20px',
- },
- title: {
- paddingLeft: '20px',
- paddingRight: '20px',
- fontWeight: 'bold',
- },
- text: {
- fontSize: '13.5px',
- marginTop: 0,
- fontWeight: 500,
- color: '#000',
- },
- tel: {
- paddingLeft: '20px',
- paddingRight: '20px',
- paddingTop: '32px',
- paddingBottom: '22px',
- },
-};
-
-const categories = {
- container: {
- width: '370px',
- margin: 'auto',
- paddingTop: '12px',
- },
- text: {
- fontWeight: '500',
- color: '#000',
- },
-};
-
-const footer = {
- policy: {
- width: '166px',
- margin: 'auto',
- },
- text: {
- margin: '0',
- color: '#AFAFAF',
- fontSize: '13px',
- textAlign: 'center',
- } as React.CSSProperties,
-};
diff --git a/apps/demo/emails/reset-password/dropbox-reset-password.tsx b/apps/demo/emails/reset-password/dropbox-reset-password.tsx
index 91a4ef6d83..907fe6e021 100644
--- a/apps/demo/emails/reset-password/dropbox-reset-password.tsx
+++ b/apps/demo/emails/reset-password/dropbox-reset-password.tsx
@@ -8,8 +8,10 @@ import {
Link,
Preview,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface DropboxResetPasswordEmailProps {
userFirstname?: string;
@@ -27,39 +29,48 @@ export const DropboxResetPasswordEmail = ({
return (
- Dropbox reset your password
-
-
-
- Hi {userFirstname},
-
- Someone recently requested a password change for your Dropbox
- account. If this was you, you can set a new password here:
-
-
- Reset password
-
-
- If you don't want to change your password or didn't
- request this, just ignore and delete this message.
-
-
- To keep your account secure, please don't forward this email
- to anyone. See our Help Center for{' '}
-
- more security tips.
-
-
- Happy Dropboxing!
-
-
-
+
+
+ Dropbox reset your password
+
+
+
+
+ Hi {userFirstname},
+
+
+ Someone recently requested a password change for your Dropbox
+ account. If this was you, you can set a new password here:
+
+
+ Reset password
+
+
+ If you don't want to change your password or didn't
+ request this, just ignore and delete this message.
+
+
+ To keep your account secure, please don't forward this
+ email to anyone. See our Help Center for{' '}
+
+ more security tips.
+
+
+
+ Happy Dropboxing!
+
+
+
+
+
);
};
@@ -69,41 +80,6 @@ DropboxResetPasswordEmail.PreviewProps = {
resetPasswordLink: 'https://www.dropbox.com',
} as DropboxResetPasswordEmailProps;
-export default DropboxResetPasswordEmail;
-
-const main = {
- backgroundColor: '#f6f9fc',
- padding: '10px 0',
-};
+DropboxResetPasswordEmail.tailwindConfig = tailwindConfig;
-const container = {
- backgroundColor: '#ffffff',
- border: '1px solid #f0f0f0',
- padding: '45px',
-};
-
-const text = {
- fontSize: '16px',
- fontFamily:
- "'Open Sans', 'HelveticaNeue-Light', 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif",
- fontWeight: '300',
- color: '#404040',
- lineHeight: '26px',
-};
-
-const button = {
- backgroundColor: '#007ee6',
- borderRadius: '4px',
- color: '#fff',
- fontFamily: "'Open Sans', 'Helvetica Neue', Arial",
- fontSize: '15px',
- textDecoration: 'none',
- textAlign: 'center' as const,
- display: 'block',
- width: '210px',
- padding: '14px 7px',
-};
-
-const anchor = {
- textDecoration: 'underline',
-};
+export default DropboxResetPasswordEmail;
diff --git a/apps/demo/emails/reset-password/twitch-reset-password.tsx b/apps/demo/emails/reset-password/twitch-reset-password.tsx
index 60eb156c32..de99963778 100644
--- a/apps/demo/emails/reset-password/twitch-reset-password.tsx
+++ b/apps/demo/emails/reset-password/twitch-reset-password.tsx
@@ -9,8 +9,10 @@ import {
Preview,
Row,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface TwitchResetPasswordEmailProps {
username?: string;
@@ -33,83 +35,85 @@ export const TwitchResetPasswordEmail = ({
return (
- You updated the password for your Twitch account
-
-
-
-
-
+
+
+ You updated the password for your Twitch account
+
+
+
+
+
+
+ Hi {username},
+
+ You updated the password for your Twitch account on{' '}
+ {formattedDate}. If this was you, then no further action is
+ required.
+
+
+ However if you did NOT perform this password change, please{' '}
+
+ reset your account password
+ {' '}
+ immediately.
+
+
+ Remember to use a password that is both strong and unique to
+ your Twitch account. To learn more about how to create a strong
+ and unique password,{' '}
+
+ click here.
+
+
+
+ Still have questions? Please contact{' '}
+
+ Twitch Support
+
+
+
+ Thanks,
+
+ Twitch Support Team
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+ Β© 2022 Twitch, All Rights Reserved
+ 350 Bush Street, 2nd Floor, San Francisco, CA, 94104 - USA
+
-
- Hi {username},
-
- You updated the password for your Twitch account on{' '}
- {formattedDate}. If this was you, then no further action is
- required.
-
-
- However if you did NOT perform this password change, please{' '}
-
- reset your account password
- {' '}
- immediately.
-
-
- Remember to use a password that is both strong and unique to your
- Twitch account. To learn more about how to create a strong and
- unique password,{' '}
-
- click here.
-
-
-
- Still have questions? Please contact{' '}
-
- Twitch Support
-
-
-
- Thanks,
-
- Twitch Support Team
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Β© 2022 Twitch, All Rights Reserved
- 350 Bush Street, 2nd Floor, San Francisco, CA, 94104 - USA
-
-
-
-
+
+
);
};
@@ -120,56 +124,3 @@ TwitchResetPasswordEmail.PreviewProps = {
} as TwitchResetPasswordEmailProps;
export default TwitchResetPasswordEmail;
-
-const fontFamily = 'HelveticaNeue,Helvetica,Arial,sans-serif';
-
-const main = {
- backgroundColor: '#efeef1',
- fontFamily,
-};
-
-const paragraph = {
- lineHeight: 1.5,
- fontSize: 14,
-};
-
-const container = {
- maxWidth: '580px',
- margin: '30px auto',
- backgroundColor: '#ffffff',
-};
-
-const footer = {
- maxWidth: '580px',
- margin: '0 auto',
-};
-
-const content = {
- padding: '5px 20px 10px 20px',
-};
-
-const logo = {
- padding: 30,
-};
-
-const logoImg = {
- margin: '0 auto',
-};
-
-const sectionsBorders = {
- width: '100%',
-};
-
-const sectionBorder = {
- borderBottom: '1px solid rgb(238,238,238)',
- width: '249px',
-};
-
-const sectionCenter = {
- borderBottom: '1px solid rgb(145,71,255)',
- width: '102px',
-};
-
-const link = {
- textDecoration: 'underline',
-};
diff --git a/apps/demo/emails/reviews/airbnb-review.tsx b/apps/demo/emails/reviews/airbnb-review.tsx
index 52381120bd..d345f8d646 100644
--- a/apps/demo/emails/reviews/airbnb-review.tsx
+++ b/apps/demo/emails/reviews/airbnb-review.tsx
@@ -10,8 +10,10 @@ import {
Preview,
Row,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface AirbnbReviewEmailProps {
authorName?: string;
@@ -34,78 +36,100 @@ export const AirbnbReviewEmail = ({
- {previewText}
-
-
-
-
-
-
-
-
-
- Here's what {authorName} wrote
- {reviewText}
-
- Now that the review period is over, weβve posted {authorName}
- βs review to your Airbnb profile.
-
-
- While itβs too late to write a review of your own, you can send
- your feedback to {authorName} using your Airbnb message thread.
-
-
-
- Send My Feedback
-
-
-
-
-
-
-
-
-
- Common questions
-
-
-
- How do reviews work?
-
-
-
-
- How do star ratings work?
+
+
+ {previewText}
+
+
+
+
+
+
+
+
+
+
+ Here's what {authorName} wrote
+
+
+ {reviewText}
+
+
+ Now that the review period is over, we've posted {authorName}
+ 's review to your Airbnb profile.
+
+
+ While it's too late to write a review of your own, you can
+ send your feedback to {authorName} using your Airbnb message
+ thread.
+
+
+
+ Send My Feedback
+
+
+
+
+
+
+
+
+
+ Common questions
+
+
+
+ How do reviews work?
+
+
+
+
+ How do star ratings work?
+
+
+
+
+ Can I leave a review after 14 days?
+
+
+
+
+ Airbnb, Inc., 888 Brannan St, San Francisco, CA 94103
+
+
+ Report unsafe behavior
-
-
-
- Can I leave a review after 14 days?
-
-
-
-
- Airbnb, Inc., 888 Brannan St, San Francisco, CA 94103
-
-
- Report unsafe behavior
-
-
-
-
-
+
+
+
+
+
);
};
@@ -119,77 +143,6 @@ AirbnbReviewEmail.PreviewProps = {
host!β`,
} as AirbnbReviewEmailProps;
-export default AirbnbReviewEmail;
-
-const main = {
- backgroundColor: '#ffffff',
- fontFamily:
- '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif',
-};
-
-const container = {
- margin: '0 auto',
- padding: '20px 0 48px',
- width: '580px',
- maxWidth: '100%',
-};
-
-const userImage = {
- margin: '0 auto',
- marginBottom: '16px',
- borderRadius: '50%',
-};
-
-const heading = {
- fontSize: '32px',
- lineHeight: '1.3',
- fontWeight: '700',
- color: '#484848',
-};
-
-const paragraph = {
- fontSize: '18px',
- lineHeight: '1.4',
- color: '#484848',
-};
-
-const review = {
- ...paragraph,
- padding: '24px',
- backgroundColor: '#f2f3f3',
- borderRadius: '4px',
-};
-
-const button = {
- backgroundColor: '#ff5a5f',
- borderRadius: '3px',
- color: '#fff',
- fontSize: '18px',
- padding: '19px 30px',
- textDecoration: 'none',
- textAlign: 'center' as const,
- display: 'block',
-};
-
-const link = {
- ...paragraph,
- color: '#ff5a5f',
- display: 'block',
-};
-
-const reportLink = {
- fontSize: '14px',
- color: '#9ca299',
- textDecoration: 'underline',
-};
+AirbnbReviewEmail.tailwindConfig = tailwindConfig;
-const hr = {
- borderColor: '#cccccc',
- margin: '20px 0',
-};
-
-const footer = {
- color: '#9ca299',
- fontSize: '14px',
- marginBottom: '10px',
-};
+export default AirbnbReviewEmail;
diff --git a/apps/demo/emails/reviews/amazon-review.tsx b/apps/demo/emails/reviews/amazon-review.tsx
index 08fb4a2ffb..02da9acef4 100644
--- a/apps/demo/emails/reviews/amazon-review.tsx
+++ b/apps/demo/emails/reviews/amazon-review.tsx
@@ -10,8 +10,10 @@ import {
Preview,
Row,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface AmazonReviewEmailProps {
titleText?: string;
@@ -38,204 +40,158 @@ export const AmazonReviewEmail = ({
- Amazon Review
-
-
-
-
-
+
+
+ Amazon Review
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {titleText}
+
+ {reviewText}
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
- {titleText}
- {reviewText}
-
-
-
-
-
-
-
-
-
-
-
-
- 14 Habits of Highly Productive Developers (English Edition)
-
- Start with rating this product
-
- {reviwStars.map((star, index) => (
+
+
+
+
+ 14 Habits of Highly Productive Developers (English Edition)
+
+ Start with rating this product
+
+ {reviwStars.map((star, index) => (
+
+ ))}
+
+
+ Your reviews will be posted on Amazon using your public
+ name.
+ Check your public name.
+
+
+
+
+
+
+
+
+
+ How about evaluating a previous purchase?{' '}
+
+ View more
+
+
+
+
+
+
+
+
+
+
+
- ))}
-
-
- Your reviews will be posted on Amazon using your public name.
- Check your public name.
+
+
+
+ {socialMediaIcons.map((src, index) => (
+
+ ))}
+
+
+
+
+
+
+
+ Customer reviews must adhere to the{' '}
+
+ Community Guidelines
+ {' '}
+ .
-
-
-
-
-
-
-
-
- How about evaluating a previous purchase?{' '}
- View more
+
+ We hope this message was helpful to you. However, if you
+ prefer not to receive this type of communication from{' '}
+
+ Amazon.com
+ {' '}
+ at{' '}
+
+ alanturing@gmail.com{' '}
+
+ ,{' '}
+
+ click here
+ {' '}
+ .
-
-
-
-
-
-
-
-
-
-
-
-
-
- {socialMediaIcons.map((src, index) => (
-
- ))}
-
-
-
-
-
-
-
- Customer reviews must adhere to the{' '}
- Community Guidelines .
-
-
- We hope this message was helpful to you. However, if you prefer
- not to receive this type of communication from{' '}
- Amazon.com at{' '}
- alanturing@gmail.com ,{' '}
- click here .
-
-
- Please note that product prices and availability are subject to
- change.
-
-
- Β© 2023 Amazon.com, Inc. or its affiliates. Amazon and all
- associated marks are trademarks of Amazon.com, Inc. or its
- affiliates.
-
- Reference: 706784740
-
-
-
-
+
+ Please note that product prices and availability are subject
+ to change.
+
+
+ Β© 2023 Amazon.com, Inc. or its affiliates. Amazon and all
+ associated marks are trademarks of Amazon.com, Inc. or its
+ affiliates.
+
+
+ Reference: 706784740
+
+
+
+
+
+
);
};
-export default AmazonReviewEmail;
-
-const main = {
- fontFamily: 'Ember,Helvetica,Arial,sans-seri',
- backgroundColor: '#ffffff',
-};
-
-const container = {
- borderTop: '4px solid #FF9900',
- margin: '0 auto',
- padding: '20px',
- width: '640px',
-};
-
-const title = {
- color: '#232f3e',
- fontSize: '36px',
- lineHeight: '38px',
- fontWeight: '400',
- margin: '20px 0',
-};
-
-const ratingContent = {
- paddingLeft: '30px',
-};
+AmazonReviewEmail.tailwindConfig = tailwindConfig;
-const rating = {
- display: 'inline-block',
-};
-
-const previewPurchase = {
- background: '#008296',
- color: '#ffffff',
- padding: '8px 0',
-};
-
-const previewPurchaseLink = {
- color: '#ffffff',
- textDecoration: 'underline',
- cursor: 'pointer',
-};
-
-const socialMedia = {
- display: 'inline-block',
- marginLeft: '10px',
-};
-
-const communityLink = {
- color: '#666666',
- textDecoration: 'underline',
- cursor: 'pointer',
-};
-
-const clickHereLink = {
- color: '#999999',
- textDecoration: 'underline',
- cursor: 'pointer',
-};
-
-const urlLink = {
- color: '#1155cc',
- textDecoration: 'underline',
- cursor: 'pointer',
-};
-
-const footerText = {
- fontSize: '10px',
- color: '#666666',
- margin: '8px 0',
-};
+export default AmazonReviewEmail;
diff --git a/apps/demo/emails/tailwind.config.ts b/apps/demo/emails/tailwind.config.ts
new file mode 100644
index 0000000000..6568f85368
--- /dev/null
+++ b/apps/demo/emails/tailwind.config.ts
@@ -0,0 +1,93 @@
+import { pixelBasedPreset, type TailwindConfig } from '@react-email/components';
+
+export default {
+ presets: [pixelBasedPreset],
+ theme: {
+ fontFamily: {
+ amazon: ['Ember', 'Helvetica', 'Arial', 'sans-serif'],
+ koala: [
+ '-apple-system',
+ 'BlinkMacSystemFont',
+ 'Segoe UI',
+ 'Roboto',
+ 'Oxygen-Sans',
+ 'Ubuntu',
+ 'Cantarell',
+ 'Helvetica Neue',
+ 'sans-serif',
+ ],
+ raycast:
+ '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif',
+ slack:
+ "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
+ twitch: ['HelveticaNeue', 'Helvetica', 'Arial', 'sans-serif'],
+ 'stack-overflow': ['Helvetica Neue', 'Helvetica', 'Arial', 'sans-serif'],
+ 'stack-overflow-mono': 'Consolas,monospace',
+ github:
+ '-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',
+ yelp: [
+ '-apple-system',
+ 'BlinkMacSystemFont',
+ '"Segoe UI"',
+ 'Roboto',
+ 'Oxygen-Sans',
+ 'Ubuntu',
+ 'Cantarell',
+ '"Helvetica Neue"',
+ 'sans-serif',
+ ],
+ nike: [
+ '-apple-system',
+ 'BlinkMacSystemFont',
+ '"Segoe UI"',
+ 'Roboto',
+ 'Oxygen-Sans',
+ 'Ubuntu',
+ 'Cantarell',
+ '"Helvetica Neue"',
+ 'sans-serif',
+ ],
+ linear:
+ '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif',
+ stripe: [
+ '-apple-system',
+ 'BlinkMacSystemFont',
+ '"Segoe UI"',
+ 'Roboto',
+ '"Helvetica Neue"',
+ 'Ubuntu',
+ 'sans-serif',
+ ],
+ notion:
+ "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
+ aws: "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif",
+ airbnb: [
+ '-apple-system',
+ 'BlinkMacSystemFont',
+ '"Segoe UI"',
+ 'Roboto',
+ 'Oxygen-Sans',
+ 'Ubuntu',
+ 'Cantarell',
+ '"Helvetica Neue"',
+ 'sans-serif',
+ ],
+ apple: ['"Helvetica Neue"', 'Helvetica', 'Arial', 'sans-serif'],
+ dropbox: [
+ 'Open Sans',
+ 'HelveticaNeue-Light',
+ 'Helvetica Neue Light',
+ 'Helvetica Neue',
+ 'Helvetica',
+ 'Arial',
+ 'Lucida Grande',
+ 'sans-serif',
+ ],
+ 'dropbox-sans': ['Open Sans', 'Helvetica Neue', 'Arial'],
+ codepen: '"Google Sans",Roboto,RobotoDraft,Helvetica,Arial,sans-serif',
+ plaid: 'HelveticaNeue,Helvetica,Arial,sans-serif',
+ google:
+ '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif',
+ },
+ },
+} satisfies TailwindConfig;
diff --git a/apps/demo/emails/welcome/koala-welcome.tsx b/apps/demo/emails/welcome/koala-welcome.tsx
index 5ec1ebe0bc..1267a887ae 100644
--- a/apps/demo/emails/welcome/koala-welcome.tsx
+++ b/apps/demo/emails/welcome/koala-welcome.tsx
@@ -8,8 +8,10 @@ import {
Img,
Preview,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
interface KoalaWelcomeEmailProps {
userFirstname: string;
@@ -24,39 +26,47 @@ export const KoalaWelcomeEmail = ({
}: KoalaWelcomeEmailProps) => (
-
- The sales intelligence platform that helps you uncover qualified leads.
-
-
-
- Hi {userFirstname},
-
- Welcome to Koala, the sales intelligence platform that helps you
- uncover qualified leads and close deals faster.
-
-
-
- Best,
-
- The Koala team
-
-
-
- 470 Noor Ave STE B #1148, South San Francisco, CA 94080
-
-
-
+
+
+
+ The sales intelligence platform that helps you uncover qualified
+ leads.
+
+
+
+
+ Hi {userFirstname},
+
+
+ Welcome to Koala, the sales intelligence platform that helps you
+ uncover qualified leads and close deals faster.
+
+
+
+ Best,
+
+ The Koala team
+
+
+
+ 470 Noor Ave STE B #1148, South San Francisco, CA 94080
+
+
+
+
);
@@ -65,48 +75,3 @@ KoalaWelcomeEmail.PreviewProps = {
} as KoalaWelcomeEmailProps;
export default KoalaWelcomeEmail;
-
-const main = {
- backgroundColor: '#ffffff',
- fontFamily:
- '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif',
-};
-
-const container = {
- margin: '0 auto',
- padding: '20px 0 48px',
-};
-
-const logo = {
- margin: '0 auto',
-};
-
-const paragraph = {
- fontSize: '16px',
- lineHeight: '26px',
-};
-
-const btnContainer = {
- textAlign: 'center' as const,
-};
-
-const button = {
- backgroundColor: '#5F51E8',
- borderRadius: '3px',
- color: '#fff',
- fontSize: '16px',
- textDecoration: 'none',
- textAlign: 'center' as const,
- display: 'block',
- padding: '12px',
-};
-
-const hr = {
- borderColor: '#cccccc',
- margin: '20px 0',
-};
-
-const footer = {
- color: '#8898aa',
- fontSize: '12px',
-};
diff --git a/apps/demo/emails/welcome/stripe-welcome.tsx b/apps/demo/emails/welcome/stripe-welcome.tsx
index 9422531e01..1ceac00d5d 100644
--- a/apps/demo/emails/welcome/stripe-welcome.tsx
+++ b/apps/demo/emails/welcome/stripe-welcome.tsx
@@ -9,8 +9,10 @@ import {
Link,
Preview,
Section,
+ Tailwind,
Text,
} from '@react-email/components';
+import tailwindConfig from '../tailwind.config';
const baseUrl = process.env.VERCEL_URL
? `https://${process.env.VERCEL_URL}`
@@ -19,138 +21,98 @@ const baseUrl = process.env.VERCEL_URL
export const StripeWelcomeEmail = () => (
- You're now ready to make live transactions with Stripe!
-
-
-
-
-
- Thanks for submitting your account information. You're now ready to
- make live transactions with Stripe!
-
-
- You can view your payments and a variety of other information about
- your account right from your dashboard.
-
-
- View your Stripe Dashboard
-
-
-
- If you haven't finished your integration, you might find our{' '}
-
+
+
+ You're now ready to make live transactions with Stripe!
+
+
+
+
+
+
+ Thanks for submitting your account information. You're now ready
+ to make live transactions with Stripe!
+
+
+ You can view your payments and a variety of other information
+ about your account right from your dashboard.
+
+
- docs
- {' '}
- handy.
-
-
- Once you're ready to start accepting payments, you'll just need to
- use your live{' '}
-
- API keys
- {' '}
- instead of your test API keys. Your account can simultaneously be
- used for both test and live requests, so you can continue testing
- while accepting live payments. Check out our{' '}
-
- tutorial about account basics
-
- .
-
-
- Finally, we've put together a{' '}
-
- quick checklist
- {' '}
- to ensure your website conforms to card network standards.
-
-
- We'll be here to help you with any step along the way. You can find
- answers to most questions and get in touch with us on our{' '}
-
- support site
-
- .
-
- β The Stripe team
-
-
- Stripe, 354 Oyster Point Blvd, South San Francisco, CA 94080
-
-
-
-
+ View your Stripe Dashboard
+
+
+
+ If you haven't finished your integration, you might find our{' '}
+
+ docs
+ {' '}
+ handy.
+
+
+ Once you're ready to start accepting payments, you'll just need to
+ use your live{' '}
+
+ API keys
+ {' '}
+ instead of your test API keys. Your account can simultaneously be
+ used for both test and live requests, so you can continue testing
+ while accepting live payments. Check out our{' '}
+
+ tutorial about account basics
+
+ .
+
+
+ Finally, we've put together a{' '}
+
+ quick checklist
+ {' '}
+ to ensure your website conforms to card network standards.
+
+
+ We'll be here to help you with any step along the way. You can
+ find answers to most questions and get in touch with us on our{' '}
+
+ support site
+
+ .
+
+
+ β The Stripe team
+
+
+
+ Stripe, 354 Oyster Point Blvd, South San Francisco, CA 94080
+
+
+
+
+
);
export default StripeWelcomeEmail;
-
-const main = {
- backgroundColor: '#f6f9fc',
- fontFamily:
- '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif',
-};
-
-const container = {
- backgroundColor: '#ffffff',
- margin: '0 auto',
- padding: '20px 0 48px',
- marginBottom: '64px',
-};
-
-const box = {
- padding: '0 48px',
-};
-
-const hr = {
- borderColor: '#e6ebf1',
- margin: '20px 0',
-};
-
-const paragraph = {
- color: '#525f7f',
-
- fontSize: '16px',
- lineHeight: '24px',
- textAlign: 'left' as const,
-};
-
-const anchor = {
- color: '#556cd6',
-};
-
-const button = {
- backgroundColor: '#656ee8',
- borderRadius: '5px',
- color: '#fff',
- fontSize: '16px',
- fontWeight: 'bold',
- textDecoration: 'none',
- textAlign: 'center' as const,
- display: 'block',
- padding: '10px',
-};
-
-const footer = {
- color: '#8898aa',
- fontSize: '12px',
- lineHeight: '16px',
-};
diff --git a/apps/demo/package.json b/apps/demo/package.json
index 79ff536b09..c5e35d446c 100644
--- a/apps/demo/package.json
+++ b/apps/demo/package.json
@@ -9,15 +9,15 @@
"export": "email-dev export"
},
"dependencies": {
- "@react-email/components": "workspace:*",
+ "@react-email/components": "npm:@react-email/components@1.0.0-tailwindv4.5",
+ "email-dev": "workspace:*",
"react": "^19",
- "react-dom": "^19",
- "email-dev": "workspace:*"
+ "react-dom": "^19"
},
"devDependencies": {
"@react-email/preview-server": "workspace:*",
- "next": "^15.3.2",
"@types/react": "^19",
- "@types/react-dom": "^19"
+ "@types/react-dom": "^19",
+ "next": "^15.3.2"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b93c205785..055178be78 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -57,8 +57,8 @@ importers:
apps/demo:
dependencies:
'@react-email/components':
- specifier: workspace:*
- version: link:../../packages/components
+ specifier: npm:@react-email/components@1.0.0-tailwindv4.5
+ version: 1.0.0-tailwindv4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
email-dev:
specifier: workspace:*
version: link:../../packages/react-email/dev
@@ -168,7 +168,7 @@ importers:
version: 1.2.3(@types/react@19.0.1)(react@19.0.0)
'@radix-ui/react-tabs':
specifier: ^1.1.0
- version: 1.1.13(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ version: 1.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@radix-ui/react-tooltip':
specifier: 1.2.8
version: 1.2.8(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -456,10 +456,10 @@ importers:
version: 13.1.0
fs-extra:
specifier: ^11.1.1
- version: 11.3.2
+ version: 11.3.0
log-symbols:
specifier: ^7.0.0
- version: 7.0.1
+ version: 7.0.0
ora:
specifier: ^8.0.0
version: 8.2.0
@@ -788,16 +788,16 @@ importers:
version: 2.0.0
esbuild:
specifier: ^0.25.0
- version: 0.25.10
+ version: 0.25.0
glob:
specifier: ^11.0.0
- version: 11.0.3
+ version: 11.0.1
jiti:
specifier: 2.4.2
version: 2.4.2
log-symbols:
specifier: ^7.0.0
- version: 7.0.1
+ version: 7.0.0
mime-types:
specifier: ^3.0.0
version: 3.0.1
@@ -1478,6 +1478,12 @@ packages:
cpu: [ppc64]
os: [aix]
+ '@esbuild/aix-ppc64@0.25.0':
+ resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/aix-ppc64@0.25.10':
resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
engines: {node: '>=18'}
@@ -1490,6 +1496,12 @@ packages:
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.25.0':
+ resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm64@0.25.10':
resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
engines: {node: '>=18'}
@@ -1502,6 +1514,12 @@ packages:
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.25.0':
+ resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-arm@0.25.10':
resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
engines: {node: '>=18'}
@@ -1514,6 +1532,12 @@ packages:
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.25.0':
+ resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/android-x64@0.25.10':
resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
engines: {node: '>=18'}
@@ -1526,6 +1550,12 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.25.0':
+ resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-arm64@0.25.10':
resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
engines: {node: '>=18'}
@@ -1538,6 +1568,12 @@ packages:
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.25.0':
+ resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.25.10':
resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
engines: {node: '>=18'}
@@ -1550,6 +1586,12 @@ packages:
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.25.0':
+ resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-arm64@0.25.10':
resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
engines: {node: '>=18'}
@@ -1562,6 +1604,12 @@ packages:
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.25.0':
+ resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.25.10':
resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
engines: {node: '>=18'}
@@ -1574,6 +1622,12 @@ packages:
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.25.0':
+ resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm64@0.25.10':
resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
engines: {node: '>=18'}
@@ -1586,6 +1640,12 @@ packages:
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.25.0':
+ resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-arm@0.25.10':
resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
engines: {node: '>=18'}
@@ -1598,6 +1658,12 @@ packages:
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.25.0':
+ resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-ia32@0.25.10':
resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
engines: {node: '>=18'}
@@ -1610,6 +1676,12 @@ packages:
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.25.0':
+ resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-loong64@0.25.10':
resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
engines: {node: '>=18'}
@@ -1622,6 +1694,12 @@ packages:
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.25.0':
+ resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.25.10':
resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
engines: {node: '>=18'}
@@ -1634,6 +1712,12 @@ packages:
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.25.0':
+ resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.25.10':
resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
engines: {node: '>=18'}
@@ -1646,6 +1730,12 @@ packages:
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.25.0':
+ resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.25.10':
resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
engines: {node: '>=18'}
@@ -1658,6 +1748,12 @@ packages:
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.25.0':
+ resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-s390x@0.25.10':
resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
engines: {node: '>=18'}
@@ -1670,12 +1766,24 @@ packages:
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.25.0':
+ resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/linux-x64@0.25.10':
resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
+ '@esbuild/netbsd-arm64@0.25.0':
+ resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
'@esbuild/netbsd-arm64@0.25.10':
resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
engines: {node: '>=18'}
@@ -1688,12 +1796,24 @@ packages:
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.25.0':
+ resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/netbsd-x64@0.25.10':
resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
+ '@esbuild/openbsd-arm64@0.25.0':
+ resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-arm64@0.25.10':
resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
engines: {node: '>=18'}
@@ -1706,6 +1826,12 @@ packages:
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.25.0':
+ resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.25.10':
resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
engines: {node: '>=18'}
@@ -1724,6 +1850,12 @@ packages:
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.25.0':
+ resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/sunos-x64@0.25.10':
resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
engines: {node: '>=18'}
@@ -1736,6 +1868,12 @@ packages:
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.25.0':
+ resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-arm64@0.25.10':
resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
engines: {node: '>=18'}
@@ -1748,6 +1886,12 @@ packages:
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.25.0':
+ resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-ia32@0.25.10':
resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
engines: {node: '>=18'}
@@ -1760,6 +1904,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.25.0':
+ resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@esbuild/win32-x64@0.25.10':
resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
engines: {node: '>=18'}
@@ -2295,14 +2445,6 @@ packages:
'@types/node':
optional: true
- '@isaacs/balanced-match@4.0.1':
- resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
- engines: {node: 20 || >=22}
-
- '@isaacs/brace-expansion@5.0.0':
- resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
- engines: {node: 20 || >=22}
-
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -2781,6 +2923,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-collection@1.1.1':
+ resolution: {integrity: sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==}
+ peerDependencies:
+ '@types/react': ^19.0.1
+ '@types/react-dom': ^19.0.1
+ react: ^19.0.0
+ react-dom: ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-collection@1.1.7':
resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
peerDependencies:
@@ -3210,6 +3365,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-roving-focus@1.1.1':
+ resolution: {integrity: sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==}
+ peerDependencies:
+ '@types/react': ^19.0.1
+ '@types/react-dom': ^19.0.1
+ react: ^19.0.0
+ react-dom: ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-roving-focus@1.1.11':
resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==}
peerDependencies:
@@ -3276,6 +3444,19 @@ packages:
'@types/react-dom':
optional: true
+ '@radix-ui/react-tabs@1.1.2':
+ resolution: {integrity: sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ==}
+ peerDependencies:
+ '@types/react': ^19.0.1
+ '@types/react-dom': ^19.0.1
+ react: ^19.0.0
+ react-dom: ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
'@radix-ui/react-toggle-group@1.1.0':
resolution: {integrity: sha512-PpTJV68dZU2oqqgq75Uzto5o/XfOVgkrJ9rulVmfTKxWp3HfUjHE6CP/WLRR4AzPX9HWxw7vFow2me85Yu+Naw==}
peerDependencies:
@@ -3512,6 +3693,100 @@ packages:
'@radix-ui/rect@1.1.1':
resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
+ '@react-email/body@0.1.1-tailwindv4.0':
+ resolution: {integrity: sha512-9yWjQmQw6/XLeus6vnr4rB09hVlJUW0+MwCT8aqngfIfDNcxF0muzmGG4wyUwhtFtoxnECEaivVhjvuJDCEnuw==}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/button@0.2.1-tailwindv4.0':
+ resolution: {integrity: sha512-Dl8JfMsYApz+Jd3z4TTHeeLVak0dxu8Ms7gWy8fwT9/tu49ULGYWf7t1AEYtHG1OH4HN2UrGIDErJn1ACMR8TQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/code-block@0.1.1-tailwindv4.0':
+ resolution: {integrity: sha512-X9NV4lKKmGQobRU5t4B+OVe+RUtsOQ9Ej5HorFWFA0a3M0kaD8bbAvWgSD58S7mA2pFlwqhg7ti2ifMmQD+3Pw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/code-inline@0.0.6-tailwindv4.0':
+ resolution: {integrity: sha512-2cZ1tzmVfKe4O3Xom/yEgBfNGrGS763xDLnhCter8R2GYUNBUEjJjAz/pXLiFjpqvSWPPH3elwowqURIB3orjQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/column@0.0.13':
+ resolution: {integrity: sha512-Lqq17l7ShzJG/d3b1w/+lVO+gp2FM05ZUo/nW0rjxB8xBICXOVv6PqjDnn3FXKssvhO5qAV20lHM6S+spRhEwQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/components@1.0.0-tailwindv4.5':
+ resolution: {integrity: sha512-q12JqHQk0r1ET4g5TS9pETKz38NrNCzdQlUp4rilpdfO8D5Ivjd5ly6ft7jRN+op7H+bmBl+bDkSJq8qfncmzQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/container@0.0.16-tailwindv4.0':
+ resolution: {integrity: sha512-RUgvF17EDOgjxwvPejNRf3j9w4PplHfBecRa/5vpL3QdTWrETIBIXDJCprStTNkjo81y+sD49iDwDcKuohMjWw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/font@0.0.9':
+ resolution: {integrity: sha512-4zjq23oT9APXkerqeslPH3OZWuh5X4crHK6nx82mVHV2SrLba8+8dPEnWbaACWTNjOCbcLIzaC9unk7Wq2MIXw==}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/head@0.0.12':
+ resolution: {integrity: sha512-X2Ii6dDFMF+D4niNwMAHbTkeCjlYYnMsd7edXOsi0JByxt9wNyZ9EnhFiBoQdqkE+SMDcu8TlNNttMrf5sJeMA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/heading@0.0.16-tailwindv4.0':
+ resolution: {integrity: sha512-WbcKUHcCkyoaQZceNf/RmhSe/qqnRJnWrg13IFwCM3/7i7zFqMZz7XiLsyraOeqKPafb3K9/OZW3iM7oYy0TiA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/hr@0.0.12-tailwindv4.0':
+ resolution: {integrity: sha512-N4cmqCuNt/35WjwiTsAl2YjMn/0JEF5BIkgdW5NbT3bypJq9uD6IuDrZuoQdhQF/U6nXKoAnDDM0olOJI5Fvfg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/html@0.0.11':
+ resolution: {integrity: sha512-qJhbOQy5VW5qzU74AimjAR9FRFQfrMa7dn4gkEXKMB/S9xZN8e1yC1uA9C15jkXI/PzmJ0muDIWmFwatm5/+VA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/img@0.0.12-tailwindv4.0':
+ resolution: {integrity: sha512-fyux6rY919CvYyQ3naIwIFEFwWsLVhwOdUDOrVkpjypB/5f4E39niM74xaMr/u1CNcWsxINwxlryp44tjAHGhw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/link@0.0.13-tailwindv4.0':
+ resolution: {integrity: sha512-undFRiSltzPPdMmk/9OhAitDMqPxASiKo3ee9MSPUHyMz8VsaJmy8TPgOH/j6D30TObfcmH0fCQTrWH28qqbJw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/markdown@0.0.15':
+ resolution: {integrity: sha512-UQA9pVm5sbflgtg3EX3FquUP4aMBzmLReLbGJ6DZQZnAskBF36aI56cRykDq1o+1jT+CKIK1CducPYziaXliag==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/preview@0.0.14-tailwindv4.0':
+ resolution: {integrity: sha512-20IIqdGeSGGWAy0hKvAS2XoQX1muE1K8wLYVyJBFNpX/ghuKUeSDno72Xb8egUFHGlDVwM5q735j7bXpH1/bgg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
'@react-email/render@1.0.6':
resolution: {integrity: sha512-zNueW5Wn/4jNC1c5LFgXzbUdv5Lhms+FWjOvWAhal7gx5YVf0q6dPJ0dnR70+ifo59gcMLwCZEaTS9EEuUhKvQ==}
engines: {node: '>=18.0.0'}
@@ -3519,12 +3794,31 @@ packages:
react: ^19.0.0
react-dom: ^19.0.0
+ '@react-email/render@1.3.2':
+ resolution: {integrity: sha512-oq8/BD/I/YspeuBjjdLJG6xaf9tsPYk+VWu8/mX9xWbRN0t0ExKSVm9sEBL6RsCpndQA2jbY2VgPEreIrzUgqw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+ react-dom: ^19.0.0
+
+ '@react-email/row@0.0.12':
+ resolution: {integrity: sha512-HkCdnEjvK3o+n0y0tZKXYhIXUNPDx+2vq1dJTmqappVHXS5tXS6W5JOPZr5j+eoZ8gY3PShI2LWj5rWF7ZEtIQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
'@react-email/section@0.0.14':
resolution: {integrity: sha512-+fYWLb4tPU1A/+GE5J1+SEMA7/wR3V30lQ+OR9t2kAJqNrARDbMx0bLnYnR1QL5TiFRz0pCF05SQUobk6gHEDQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: ^19.0.0
+ '@react-email/section@0.0.16':
+ resolution: {integrity: sha512-FjqF9xQ8FoeUZYKSdt8sMIKvoT9XF8BrzhT3xiFKdEMwYNbsDflcjfErJe3jb7Wj/es/lKTbV5QR1dnLzGpL3w==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
'@react-email/tailwind@0.0.12':
resolution: {integrity: sha512-s8Ch7GL30qRKScn9NWwItMqxjtzbyUtCnXfC6sL2YTVtulbfvZZ06W+aA0S6f7fdrVlOOlQzZuK/sVaQCHhcSw==}
engines: {node: '>=18.0.0'}
@@ -3537,6 +3831,18 @@ packages:
peerDependencies:
react: ^19.0.0
+ '@react-email/tailwind@2.0.0-tailwindv4.3':
+ resolution: {integrity: sha512-uuTYJY+UZdq6mtq/wh2CANjsYv79DpcgVLFg5yBlME0DNHO+nQ5IHVNckVvWlvs2maS6IP8sUYWxuFgYqUvf6w==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
+ '@react-email/text@0.1.6-tailwindv4.0':
+ resolution: {integrity: sha512-IVoq2zqCzokjbeEtpFw0VgfL2z7O2K+BTG8nWMZKofUf8UX66X3JwdOGRw/K6U3XS6IahE9gy3yycX7rqn3gKw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^19.0.0
+
'@react-spring/animated@9.7.5':
resolution: {integrity: sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==}
peerDependencies:
@@ -4488,16 +4794,12 @@ packages:
resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
engines: {node: '>=12'}
- ansi-regex@6.2.2:
- resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
- engines: {node: '>=12'}
-
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
- ansi-styles@6.2.3:
- resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
engines: {node: '>=12'}
ansis@4.1.0:
@@ -5364,6 +5666,11 @@ packages:
engines: {node: '>=12'}
hasBin: true
+ esbuild@0.25.0:
+ resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
esbuild@0.25.10:
resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
engines: {node: '>=18'}
@@ -5686,8 +5993,8 @@ packages:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
- fs-extra@11.3.2:
- resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
+ fs-extra@11.3.0:
+ resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
engines: {node: '>=14.14'}
fs-extra@7.0.1:
@@ -5793,8 +6100,8 @@ packages:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
- glob@11.0.3:
- resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==}
+ glob@11.0.1:
+ resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==}
engines: {node: 20 || >=22}
hasBin: true
@@ -6287,8 +6594,8 @@ packages:
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
- jackspeak@4.1.1:
- resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
+ jackspeak@4.1.0:
+ resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==}
engines: {node: 20 || >=22}
jest-worker@27.5.1:
@@ -6371,8 +6678,8 @@ packages:
jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
- jsonfile@6.2.0:
- resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+ jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
jsonpath-plus@10.3.0:
resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==}
@@ -6473,8 +6780,8 @@ packages:
resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
engines: {node: '>=18'}
- log-symbols@7.0.1:
- resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==}
+ log-symbols@7.0.0:
+ resolution: {integrity: sha512-zrc91EDk2M+2AXo/9BTvK91pqb7qrPg2nX/Hy+u8a5qQlbaOflCKO+6SqgZ+M+xUFxGdKTgwnGiL96b1W3ikRA==}
engines: {node: '>=18'}
longest-streak@3.1.0:
@@ -6497,8 +6804,8 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.2.2:
- resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==}
+ lru-cache@11.1.0:
+ resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==}
engines: {node: 20 || >=22}
lru-cache@5.1.1:
@@ -6786,8 +7093,8 @@ packages:
resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- minimatch@10.0.3:
- resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
+ minimatch@10.0.1:
+ resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
engines: {node: 20 || >=22}
minimatch@3.0.8:
@@ -7523,6 +7830,16 @@ packages:
'@types/react':
optional: true
+ react-remove-scroll@2.6.2:
+ resolution: {integrity: sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': ^19.0.1
+ react: ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
react-remove-scroll@2.6.3:
resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==}
engines: {node: '>=10'}
@@ -8103,10 +8420,6 @@ packages:
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
engines: {node: '>=12'}
- strip-ansi@7.1.2:
- resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
- engines: {node: '>=12'}
-
strip-bom-string@1.0.0:
resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
engines: {node: '>=0.10.0'}
@@ -8206,6 +8519,9 @@ packages:
engines: {node: '>=14.0.0'}
hasBin: true
+ tailwindcss@4.1.12:
+ resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==}
+
tapable@2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
@@ -8967,8 +9283,8 @@ packages:
resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
engines: {node: '>=18'}
- yoctocolors@2.1.2:
- resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
+ yoctocolors@2.1.1:
+ resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==}
engines: {node: '>=18'}
zod-package-json@1.1.0:
@@ -9624,120 +9940,183 @@ snapshots:
'@esbuild/aix-ppc64@0.19.11':
optional: true
+ '@esbuild/aix-ppc64@0.25.0':
+ optional: true
+
'@esbuild/aix-ppc64@0.25.10':
optional: true
'@esbuild/android-arm64@0.19.11':
optional: true
+ '@esbuild/android-arm64@0.25.0':
+ optional: true
+
'@esbuild/android-arm64@0.25.10':
optional: true
'@esbuild/android-arm@0.19.11':
optional: true
+ '@esbuild/android-arm@0.25.0':
+ optional: true
+
'@esbuild/android-arm@0.25.10':
optional: true
'@esbuild/android-x64@0.19.11':
optional: true
+ '@esbuild/android-x64@0.25.0':
+ optional: true
+
'@esbuild/android-x64@0.25.10':
optional: true
'@esbuild/darwin-arm64@0.19.11':
optional: true
+ '@esbuild/darwin-arm64@0.25.0':
+ optional: true
+
'@esbuild/darwin-arm64@0.25.10':
optional: true
'@esbuild/darwin-x64@0.19.11':
optional: true
+ '@esbuild/darwin-x64@0.25.0':
+ optional: true
+
'@esbuild/darwin-x64@0.25.10':
optional: true
'@esbuild/freebsd-arm64@0.19.11':
optional: true
+ '@esbuild/freebsd-arm64@0.25.0':
+ optional: true
+
'@esbuild/freebsd-arm64@0.25.10':
optional: true
'@esbuild/freebsd-x64@0.19.11':
optional: true
+ '@esbuild/freebsd-x64@0.25.0':
+ optional: true
+
'@esbuild/freebsd-x64@0.25.10':
optional: true
'@esbuild/linux-arm64@0.19.11':
optional: true
+ '@esbuild/linux-arm64@0.25.0':
+ optional: true
+
'@esbuild/linux-arm64@0.25.10':
optional: true
'@esbuild/linux-arm@0.19.11':
optional: true
+ '@esbuild/linux-arm@0.25.0':
+ optional: true
+
'@esbuild/linux-arm@0.25.10':
optional: true
'@esbuild/linux-ia32@0.19.11':
optional: true
+ '@esbuild/linux-ia32@0.25.0':
+ optional: true
+
'@esbuild/linux-ia32@0.25.10':
optional: true
'@esbuild/linux-loong64@0.19.11':
optional: true
+ '@esbuild/linux-loong64@0.25.0':
+ optional: true
+
'@esbuild/linux-loong64@0.25.10':
optional: true
'@esbuild/linux-mips64el@0.19.11':
optional: true
+ '@esbuild/linux-mips64el@0.25.0':
+ optional: true
+
'@esbuild/linux-mips64el@0.25.10':
optional: true
'@esbuild/linux-ppc64@0.19.11':
optional: true
+ '@esbuild/linux-ppc64@0.25.0':
+ optional: true
+
'@esbuild/linux-ppc64@0.25.10':
optional: true
'@esbuild/linux-riscv64@0.19.11':
optional: true
+ '@esbuild/linux-riscv64@0.25.0':
+ optional: true
+
'@esbuild/linux-riscv64@0.25.10':
optional: true
'@esbuild/linux-s390x@0.19.11':
optional: true
+ '@esbuild/linux-s390x@0.25.0':
+ optional: true
+
'@esbuild/linux-s390x@0.25.10':
optional: true
'@esbuild/linux-x64@0.19.11':
optional: true
+ '@esbuild/linux-x64@0.25.0':
+ optional: true
+
'@esbuild/linux-x64@0.25.10':
optional: true
+ '@esbuild/netbsd-arm64@0.25.0':
+ optional: true
+
'@esbuild/netbsd-arm64@0.25.10':
optional: true
'@esbuild/netbsd-x64@0.19.11':
optional: true
+ '@esbuild/netbsd-x64@0.25.0':
+ optional: true
+
'@esbuild/netbsd-x64@0.25.10':
optional: true
+ '@esbuild/openbsd-arm64@0.25.0':
+ optional: true
+
'@esbuild/openbsd-arm64@0.25.10':
optional: true
'@esbuild/openbsd-x64@0.19.11':
optional: true
+ '@esbuild/openbsd-x64@0.25.0':
+ optional: true
+
'@esbuild/openbsd-x64@0.25.10':
optional: true
@@ -9747,24 +10126,36 @@ snapshots:
'@esbuild/sunos-x64@0.19.11':
optional: true
+ '@esbuild/sunos-x64@0.25.0':
+ optional: true
+
'@esbuild/sunos-x64@0.25.10':
optional: true
'@esbuild/win32-arm64@0.19.11':
optional: true
+ '@esbuild/win32-arm64@0.25.0':
+ optional: true
+
'@esbuild/win32-arm64@0.25.10':
optional: true
'@esbuild/win32-ia32@0.19.11':
optional: true
+ '@esbuild/win32-ia32@0.25.0':
+ optional: true
+
'@esbuild/win32-ia32@0.25.10':
optional: true
'@esbuild/win32-x64@0.19.11':
optional: true
+ '@esbuild/win32-x64@0.25.0':
+ optional: true
+
'@esbuild/win32-x64@0.25.10':
optional: true
@@ -10192,17 +10583,11 @@ snapshots:
optionalDependencies:
'@types/node': 22.14.1
- '@isaacs/balanced-match@4.0.1': {}
-
- '@isaacs/brace-expansion@5.0.0':
- dependencies:
- '@isaacs/balanced-match': 4.0.1
-
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.2
+ strip-ansi: 7.1.0
strip-ansi-cjs: strip-ansi@6.0.1
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
@@ -10368,7 +10753,7 @@ snapshots:
'@mintlify/validation': 0.1.398
chalk: 5.4.0
detect-port: 1.6.1
- fs-extra: 11.3.2
+ fs-extra: 11.3.0
inquirer: 12.4.2(@types/node@22.14.1)
js-yaml: 4.1.0
ora: 6.1.2
@@ -10437,7 +10822,7 @@ snapshots:
dependencies:
'@mintlify/common': 1.0.428(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@mintlify/prebuild': 1.0.543(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.8.3)
- fs-extra: 11.3.2
+ fs-extra: 11.3.0
unist-util-visit: 4.1.2
transitivePeerDependencies:
- '@types/react'
@@ -10496,7 +10881,7 @@ snapshots:
axios: 1.7.9
chalk: 5.4.0
favicons: 7.2.0
- fs-extra: 11.3.2
+ fs-extra: 11.3.0
gray-matter: 4.0.3
js-yaml: 4.1.0
mdast: 3.0.0
@@ -10523,7 +10908,7 @@ snapshots:
chalk: 5.4.0
chokidar: 3.6.0
express: 4.21.2
- fs-extra: 11.3.2
+ fs-extra: 11.3.0
got: 13.0.0
gray-matter: 4.0.3
is-online: 10.0.0
@@ -10551,7 +10936,7 @@ snapshots:
dependencies:
'@mintlify/common': 1.0.428(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@mintlify/openapi-parser': 0.0.7
- fs-extra: 11.3.2
+ fs-extra: 11.3.0
hast-util-to-mdast: 10.1.2
js-yaml: 4.1.0
mdast-util-mdx-jsx: 3.2.0
@@ -10869,6 +11254,18 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.1
+ '@radix-ui/react-collection@1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-slot': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.1
+
'@radix-ui/react-collection@1.1.7(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.1)(react@19.0.0)
@@ -10934,7 +11331,7 @@ snapshots:
aria-hidden: 1.2.4
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
- react-remove-scroll: 2.6.3(@types/react@19.0.1)(react@19.0.0)
+ react-remove-scroll: 2.6.2(@types/react@19.0.1)(react@19.0.0)
optionalDependencies:
'@types/react': 19.0.1
'@types/react-dom': 19.0.1
@@ -11282,6 +11679,23 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.1
+ '@radix-ui/react-roving-focus@1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.1
+ '@radix-ui/react-collection': 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-id': 1.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.1
+
'@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
@@ -11365,6 +11779,22 @@ snapshots:
'@types/react': 19.0.1
'@types/react-dom': 19.0.1
+ '@radix-ui/react-tabs@1.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.1
+ '@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-id': 1.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-roving-focus': 1.1.1(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.0.1)(react@19.0.0)
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+ '@types/react-dom': 19.0.1
+
'@radix-ui/react-toggle-group@1.1.0(@types/react-dom@19.0.1)(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/primitive': 1.1.0
@@ -11573,6 +12003,94 @@ snapshots:
'@radix-ui/rect@1.1.1': {}
+ '@react-email/body@0.1.1-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/button@0.2.1-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/code-block@0.1.1-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ prismjs: 1.30.0
+ react: 19.0.0
+
+ '@react-email/code-inline@0.0.6-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/column@0.0.13(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/components@1.0.0-tailwindv4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ '@react-email/body': 0.1.1-tailwindv4.0(react@19.0.0)
+ '@react-email/button': 0.2.1-tailwindv4.0(react@19.0.0)
+ '@react-email/code-block': 0.1.1-tailwindv4.0(react@19.0.0)
+ '@react-email/code-inline': 0.0.6-tailwindv4.0(react@19.0.0)
+ '@react-email/column': 0.0.13(react@19.0.0)
+ '@react-email/container': 0.0.16-tailwindv4.0(react@19.0.0)
+ '@react-email/font': 0.0.9(react@19.0.0)
+ '@react-email/head': 0.0.12(react@19.0.0)
+ '@react-email/heading': 0.0.16-tailwindv4.0(react@19.0.0)
+ '@react-email/hr': 0.0.12-tailwindv4.0(react@19.0.0)
+ '@react-email/html': 0.0.11(react@19.0.0)
+ '@react-email/img': 0.0.12-tailwindv4.0(react@19.0.0)
+ '@react-email/link': 0.0.13-tailwindv4.0(react@19.0.0)
+ '@react-email/markdown': 0.0.15(react@19.0.0)
+ '@react-email/preview': 0.0.14-tailwindv4.0(react@19.0.0)
+ '@react-email/render': 1.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@react-email/row': 0.0.12(react@19.0.0)
+ '@react-email/section': 0.0.16(react@19.0.0)
+ '@react-email/tailwind': 2.0.0-tailwindv4.3(react@19.0.0)
+ '@react-email/text': 0.1.6-tailwindv4.0(react@19.0.0)
+ react: 19.0.0
+ transitivePeerDependencies:
+ - react-dom
+
+ '@react-email/container@0.0.16-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/font@0.0.9(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/head@0.0.12(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/heading@0.0.16-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/hr@0.0.12-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/html@0.0.11(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/img@0.0.12-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/link@0.0.13-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
+ '@react-email/markdown@0.0.15(react@19.0.0)':
+ dependencies:
+ md-to-react-email: 5.0.5(react@19.0.0)
+ react: 19.0.0
+
+ '@react-email/preview@0.0.14-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
'@react-email/render@1.0.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
html-to-text: 9.0.5
@@ -11581,10 +12099,26 @@ snapshots:
react-dom: 19.0.0(react@19.0.0)
react-promise-suspense: 0.3.4
+ '@react-email/render@1.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ dependencies:
+ html-to-text: 9.0.5
+ prettier: 3.5.3
+ react: 19.0.0
+ react-dom: 19.0.0(react@19.0.0)
+ react-promise-suspense: 0.3.4
+
+ '@react-email/row@0.0.12(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
'@react-email/section@0.0.14(react@19.0.0)':
dependencies:
react: 19.0.0
+ '@react-email/section@0.0.16(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
'@react-email/tailwind@0.0.12(react@19.0.0)':
dependencies:
react: 19.0.0
@@ -11597,6 +12131,15 @@ snapshots:
dependencies:
react: 19.0.0
+ '@react-email/tailwind@2.0.0-tailwindv4.3(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+ tailwindcss: 4.1.12
+
+ '@react-email/text@0.1.6-tailwindv4.0(react@19.0.0)':
+ dependencies:
+ react: 19.0.0
+
'@react-spring/animated@9.7.5(react@19.0.0)':
dependencies:
'@react-spring/shared': 9.7.5(react@19.0.0)
@@ -11817,7 +12360,7 @@ snapshots:
ajv: 8.13.0
ajv-draft-04: 1.0.0(ajv@8.13.0)
ajv-formats: 3.0.1(ajv@8.13.0)
- fs-extra: 11.3.2
+ fs-extra: 11.3.0
import-lazy: 4.0.0
jju: 1.4.0
resolve: 1.22.9
@@ -12665,13 +13208,11 @@ snapshots:
ansi-regex@6.1.0: {}
- ansi-regex@6.2.2: {}
-
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
- ansi-styles@6.2.3: {}
+ ansi-styles@6.2.1: {}
ansis@4.1.0: {}
@@ -13600,6 +14141,34 @@ snapshots:
'@esbuild/win32-ia32': 0.19.11
'@esbuild/win32-x64': 0.19.11
+ esbuild@0.25.0:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.0
+ '@esbuild/android-arm': 0.25.0
+ '@esbuild/android-arm64': 0.25.0
+ '@esbuild/android-x64': 0.25.0
+ '@esbuild/darwin-arm64': 0.25.0
+ '@esbuild/darwin-x64': 0.25.0
+ '@esbuild/freebsd-arm64': 0.25.0
+ '@esbuild/freebsd-x64': 0.25.0
+ '@esbuild/linux-arm': 0.25.0
+ '@esbuild/linux-arm64': 0.25.0
+ '@esbuild/linux-ia32': 0.25.0
+ '@esbuild/linux-loong64': 0.25.0
+ '@esbuild/linux-mips64el': 0.25.0
+ '@esbuild/linux-ppc64': 0.25.0
+ '@esbuild/linux-riscv64': 0.25.0
+ '@esbuild/linux-s390x': 0.25.0
+ '@esbuild/linux-x64': 0.25.0
+ '@esbuild/netbsd-arm64': 0.25.0
+ '@esbuild/netbsd-x64': 0.25.0
+ '@esbuild/openbsd-arm64': 0.25.0
+ '@esbuild/openbsd-x64': 0.25.0
+ '@esbuild/sunos-x64': 0.25.0
+ '@esbuild/win32-arm64': 0.25.0
+ '@esbuild/win32-ia32': 0.25.0
+ '@esbuild/win32-x64': 0.25.0
+
esbuild@0.25.10:
optionalDependencies:
'@esbuild/aix-ppc64': 0.25.10
@@ -13993,10 +14562,10 @@ snapshots:
fresh@0.5.2: {}
- fs-extra@11.3.2:
+ fs-extra@11.3.0:
dependencies:
graceful-fs: 4.2.11
- jsonfile: 6.2.0
+ jsonfile: 6.1.0
universalify: 2.0.1
fs-extra@7.0.1:
@@ -14120,11 +14689,11 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
- glob@11.0.3:
+ glob@11.0.1:
dependencies:
foreground-child: 3.3.1
- jackspeak: 4.1.1
- minimatch: 10.0.3
+ jackspeak: 4.1.0
+ minimatch: 10.0.1
minipass: 7.1.2
package-json-from-dist: 1.0.1
path-scurry: 2.0.0
@@ -14722,7 +15291,7 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
- jackspeak@4.1.1:
+ jackspeak@4.1.0:
dependencies:
'@isaacs/cliui': 8.0.2
@@ -14804,7 +15373,7 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.11
- jsonfile@6.2.0:
+ jsonfile@6.1.0:
dependencies:
universalify: 2.0.1
optionalDependencies:
@@ -14896,10 +15465,10 @@ snapshots:
chalk: 5.4.0
is-unicode-supported: 1.3.0
- log-symbols@7.0.1:
+ log-symbols@7.0.0:
dependencies:
is-unicode-supported: 2.1.0
- yoctocolors: 2.1.2
+ yoctocolors: 2.1.1
longest-streak@3.1.0: {}
@@ -14915,7 +15484,7 @@ snapshots:
lru-cache@10.4.3: {}
- lru-cache@11.2.2: {}
+ lru-cache@11.1.0: {}
lru-cache@5.1.1:
dependencies:
@@ -15471,9 +16040,9 @@ snapshots:
mimic-response@4.0.0: {}
- minimatch@10.0.3:
+ minimatch@10.0.1:
dependencies:
- '@isaacs/brace-expansion': 5.0.0
+ brace-expansion: 2.0.1
minimatch@3.0.8:
dependencies:
@@ -15948,7 +16517,7 @@ snapshots:
path-scurry@2.0.0:
dependencies:
- lru-cache: 11.2.2
+ lru-cache: 11.1.0
minipass: 7.1.2
path-to-regexp@0.1.12: {}
@@ -16315,6 +16884,17 @@ snapshots:
optionalDependencies:
'@types/react': 19.0.1
+ react-remove-scroll@2.6.2(@types/react@19.0.1)(react@19.0.0):
+ dependencies:
+ react: 19.0.0
+ react-remove-scroll-bar: 2.3.8(@types/react@19.0.1)(react@19.0.0)
+ react-style-singleton: 2.2.3(@types/react@19.0.1)(react@19.0.0)
+ tslib: 2.8.1
+ use-callback-ref: 1.3.3(@types/react@19.0.1)(react@19.0.0)
+ use-sidecar: 1.1.3(@types/react@19.0.1)(react@19.0.0)
+ optionalDependencies:
+ '@types/react': 19.0.1
+
react-remove-scroll@2.6.3(@types/react@19.0.1)(react@19.0.0):
dependencies:
react: 19.0.0
@@ -17149,7 +17729,7 @@ snapshots:
dependencies:
eastasianwidth: 0.2.0
emoji-regex: 9.2.2
- strip-ansi: 7.1.2
+ strip-ansi: 7.1.0
string-width@7.2.0:
dependencies:
@@ -17201,10 +17781,6 @@ snapshots:
dependencies:
ansi-regex: 6.1.0
- strip-ansi@7.1.2:
- dependencies:
- ansi-regex: 6.2.2
-
strip-bom-string@1.0.0: {}
strip-bom@3.0.0: {}
@@ -17376,6 +17952,8 @@ snapshots:
transitivePeerDependencies:
- ts-node
+ tailwindcss@4.1.12: {}
+
tapable@2.2.1: {}
tar-fs@3.0.8:
@@ -18196,9 +18774,9 @@ snapshots:
wrap-ansi@8.1.0:
dependencies:
- ansi-styles: 6.2.3
+ ansi-styles: 6.2.1
string-width: 5.1.2
- strip-ansi: 7.1.2
+ strip-ansi: 7.1.0
wrappy@1.0.2: {}
@@ -18273,7 +18851,7 @@ snapshots:
yoctocolors-cjs@2.1.2: {}
- yoctocolors@2.1.2: {}
+ yoctocolors@2.1.1: {}
zod-package-json@1.1.0:
dependencies: