Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
164 commits
Select commit Hold shift + click to select a range
1c09f5f
make mapReactTree support promise function components
gabrielmfern Aug 19, 2025
f76feb3
new standalone generateRootForClasses with tailwindcss v4's compile …
gabrielmfern Aug 19, 2025
c1910c3
update types
gabrielmfern Aug 19, 2025
c9b22f8
fix module resoltuion
gabrielmfern Aug 19, 2025
3162df5
update tailwind
gabrielmfern Aug 19, 2025
3d31304
use tsup
gabrielmfern Aug 19, 2025
8418fe9
attempt at fixing inline style resolution
gabrielmfern Aug 19, 2025
2df5e95
don't treat @layer at rules as media queries
gabrielmfern Aug 20, 2025
6839d74
filter for 'media' at ruels
gabrielmfern Aug 20, 2025
68d07e3
some initial work that runs at least
gabrielmfern Aug 25, 2025
c92e4e6
Merge branch 'main' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Aug 25, 2025
3079d5a
lint
gabrielmfern Aug 25, 2025
73439df
temporary change to build script for testing purposes
gabrielmfern Aug 25, 2025
6ea656f
refactored css variable resolution for simplicity and removing uneces…
gabrielmfern Aug 26, 2025
e0a6f6e
update generateRootForClasses tests
gabrielmfern Aug 26, 2025
8df61d6
WIP sanitize declarations dealing with oklch
gabrielmfern Aug 27, 2025
06ea3e3
get oklch to rgba conversion
gabrielmfern Aug 27, 2025
4932b04
remove safelist test, since there's no safelist anymore
gabrielmfern Aug 27, 2025
cbbd4f4
omit content from tailwind config
gabrielmfern Aug 27, 2025
32b8fdd
use a snapshot for first test
gabrielmfern Aug 27, 2025
e1a7164
fix layer at rules being ignored when inlining
gabrielmfern Aug 28, 2025
21a40cc
fix config not being loaded when generating styles
gabrielmfern Aug 28, 2025
90a4c6d
disable preflight
gabrielmfern Aug 28, 2025
aa161f3
update sanitize non inlinable classes to work with the new media quer…
gabrielmfern Aug 28, 2025
e4c7475
update style inlining with new checks for a rule being inlinable
gabrielmfern Aug 28, 2025
a8c0311
update plugin usage in tests to v4's
gabrielmfern Aug 28, 2025
b6c33a3
update snap
gabrielmfern Aug 28, 2025
1411495
separate block-inline shorthand properties into respective left-right…
gabrielmfern Aug 28, 2025
591b333
update snaps, use pretty on all comparisons
gabrielmfern Aug 28, 2025
ac8568e
add support for resolving to CSS Varible fallbacks
gabrielmfern Aug 28, 2025
568712d
use css-tree for isRuleInlinable
gabrielmfern Sep 3, 2025
0b898eb
use css-tree for makeInlineStylesFor
gabrielmfern Sep 3, 2025
a91da3c
use css-tree for removeRuelDuplicatesFromRoot
gabrielmfern Sep 3, 2025
b777038
use css-tree on the Tailwind component itself
gabrielmfern Sep 3, 2025
5a8761a
use css-tree and use toFixed in hex to rgb conversion
gabrielmfern Sep 3, 2025
21f02f1
fix regex for oklch, update tests
gabrielmfern Sep 3, 2025
cf23a98
update sanitizeNonInlinableClasses to use csstree
gabrielmfern Sep 3, 2025
31b74f7
use css-tree in resolve-all-css-variables tests
gabrielmfern Sep 3, 2025
82c724c
wip: resolving css variables with css tree 🤩
gabrielmfern Sep 3, 2025
c7c69e3
resolving css variables working with deeply nested fallbacks 👍
gabrielmfern Sep 4, 2025
bc21f52
use css-tree for generateRootForClasses ☄️
gabrielmfern Sep 4, 2025
946ff82
remove minify-css because csstree already does it
gabrielmfern Sep 4, 2025
291f6c8
update test
gabrielmfern Sep 4, 2025
ec867c5
update snap for parents populate
gabrielmfern Sep 4, 2025
bb00ef4
update all test snapshots, add todo item
gabrielmfern Sep 4, 2025
6bbfa3c
use in-house clone that ignores the `parent` property to avoid infint…
gabrielmfern Sep 4, 2025
011ad9f
fix types
gabrielmfern Sep 4, 2025
3a209d8
avoid sanitizing escaping \
gabrielmfern Sep 4, 2025
18e4c8c
WIP: update all test results
gabrielmfern Sep 5, 2025
dee61f7
increase coverage for sanitizeNonInlinableClasses tests
gabrielmfern Sep 5, 2025
66adff3
lint
gabrielmfern Sep 5, 2025
9fd2a5f
fix nested css rules being removed
gabrielmfern Sep 8, 2025
137d2c9
fix isRuleInlinable not properly separating :focus-like utilities
gabrielmfern Sep 8, 2025
aa612c8
update some of the snapshots
gabrielmfern Sep 8, 2025
c565b07
remove test that doesn't make sense anymore
gabrielmfern Sep 8, 2025
6634a40
decode class selectors when sanitizing them
gabrielmfern Sep 8, 2025
2b12d24
resolve simple calc expressions, like what tailwind v4 does for spacing
gabrielmfern Sep 8, 2025
15ebe8f
update all snapshots
gabrielmfern Sep 8, 2025
0b849ca
remove debugging log
gabrielmfern Sep 8, 2025
2854c9a
update test snapshots
gabrielmfern Sep 8, 2025
912be48
lint
gabrielmfern Sep 8, 2025
b9e4a4b
update remaining failing test snapshots, everything passes!
gabrielmfern Sep 8, 2025
0cbea0c
save parentList and parentListItem to nodes
gabrielmfern Sep 8, 2025
74cdbdd
remove empty parents when resolving variable uses and removing defini…
gabrielmfern Sep 8, 2025
95b80bd
fix clone's infinite loops
gabrielmfern Sep 8, 2025
84b0ef9
update snap
gabrielmfern Sep 8, 2025
5f66231
update snapshots
gabrielmfern Sep 8, 2025
bfcd9ac
lint
gabrielmfern Sep 8, 2025
2242771
update build process and dependencies placement
gabrielmfern Sep 8, 2025
113365b
Merge branch 'main' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Sep 8, 2025
a571e33
Merge branch 'main' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Sep 9, 2025
7f23250
add import.meta to global on preview server running environment
gabrielmfern Sep 9, 2025
19cd2f3
Merge branch 'main' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Sep 15, 2025
39f86a6
undo workflow change
gabrielmfern Sep 15, 2025
9d3674e
remove tests to fix csstree issue
gabrielmfern Sep 15, 2025
6bc4552
use nodeNext as module resolution instead of bundler
gabrielmfern Sep 15, 2025
4459b4b
remove dangling tsup.config
gabrielmfern Sep 15, 2025
2a37b87
Merge branch 'canary' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Sep 16, 2025
412cdf7
bundle css tree and hoist JSON imports throuhg a rolldown plugin
gabrielmfern Sep 16, 2025
49814c0
only use a single compiler from tailwindcss, and also reuse the same …
gabrielmfern Sep 17, 2025
d18142c
remove console.logs
gabrielmfern Sep 17, 2025
b9d55d5
fix non inline rules not being returned
gabrielmfern Sep 17, 2025
32c3af0
don't use async in mapReactTree anymore
gabrielmfern Sep 17, 2025
d7de09c
use the new setupTailwind, and new functions for a speed up
gabrielmfern Sep 17, 2025
e5f5730
lint
gabrielmfern Sep 17, 2025
060c2ca
remove now unused clone
gabrielmfern Sep 18, 2025
0511f1e
use css tree's parsing to sanitize declarations for performance
gabrielmfern Sep 18, 2025
12a65fb
remove hooks
gabrielmfern Sep 19, 2025
115b85b
update to using the new compat option that's cached
gabrielmfern Sep 19, 2025
90a1b74
don't use arrow functions for easier profiling
gabrielmfern Sep 19, 2025
dff22d3
lint
gabrielmfern Sep 19, 2025
bf8793c
update test snapshot
gabrielmfern Sep 19, 2025
8d72cb9
update snap
gabrielmfern Sep 19, 2025
6c38251
remove stale test
gabrielmfern Sep 19, 2025
6521fc4
first iteration of trying to only parse CSS once
gabrielmfern Sep 19, 2025
00497b1
Merge branch 'canary' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Sep 22, 2025
99b7ba8
add tailwindTreatAsElement for our components, and don't inline style…
gabrielmfern Sep 22, 2025
2a8af98
remove now useless comment
gabrielmfern Sep 22, 2025
6336899
do compatibility fixes in the Tailwind component directly
gabrielmfern Sep 22, 2025
7e2546d
don't treat all components as elements
gabrielmfern Sep 22, 2025
6f12b11
update tests
gabrielmfern Sep 22, 2025
03ebb9a
lint
gabrielmfern Sep 22, 2025
2cc5949
fix integration tests?
gabrielmfern Sep 22, 2025
4c32519
update snapshots
gabrielmfern Sep 22, 2025
11b3aeb
improve tests naming for sanitizeDeclarations
gabrielmfern Sep 23, 2025
105936e
fix function naming not being camel case
gabrielmfern Sep 23, 2025
8bda851
add support for percentage values for rgb channels
gabrielmfern Sep 23, 2025
9169023
add support for multiple values defined in margin-inline and margin-b…
gabrielmfern Sep 23, 2025
cfe50e3
do the same for padding-block and padding-inline, dedupe code
gabrielmfern Sep 23, 2025
521539a
support deg dimension for hue in oklch
gabrielmfern Sep 23, 2025
66b8c65
fix broken css tests for calc expressions
gabrielmfern Sep 23, 2025
f9d3024
fix test naming and remove outdated property
gabrielmfern Sep 23, 2025
43caa9d
use push, pop to avoid O(n) operations
gabrielmfern Sep 23, 2025
c62fc66
split classes in a more robust manner
gabrielmfern Sep 23, 2025
ab670a9
add sanitization to convert border-radius:calc(Infinity*1px) to 9999p…
gabrielmfern Sep 23, 2025
9603452
improve grammar
gabrielmfern Sep 23, 2025
ae5686c
fix alpha 0 on oklch being ignored
gabrielmfern Sep 23, 2025
75d3a29
improved test description
gabrielmfern Sep 23, 2025
b394cc5
improve test description
gabrielmfern Sep 23, 2025
b20abae
update snaps
gabrielmfern Sep 23, 2025
b94cfa7
lint
gabrielmfern Sep 23, 2025
3fbb824
fix border-radius: calc(Infinity * 1px) missing some cases because of…
gabrielmfern Sep 23, 2025
246754f
lint
gabrielmfern Sep 23, 2025
fd52f8b
update snapshots
gabrielmfern Sep 23, 2025
9a011b3
Merge branch 'canary' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Sep 24, 2025
aae5f85
Merge branch 'canary' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Sep 24, 2025
92ce8c8
initial version of shared tailwindcss instance for all component calls
gabrielmfern Sep 25, 2025
62ba18f
update the tests to be more stable with new API
gabrielmfern Sep 25, 2025
ab52bab
fix types
gabrielmfern Sep 25, 2025
b515178
fix variable resolution failing because of @layer (properties)
gabrielmfern Sep 25, 2025
2ffc51b
update snapshots
gabrielmfern Sep 25, 2025
67ddfb3
revert shared Tailwind component API
gabrielmfern Sep 25, 2025
2ce87dd
use a custom hook to handle suspending the tailwind setup promise
gabrielmfern Sep 25, 2025
4429bfc
lint
gabrielmfern Sep 25, 2025
c087837
Merge branch 'canary' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Sep 26, 2025
e169325
add proper treatment for wildcard selectors, without just matching as…
gabrielmfern Sep 26, 2025
5cf9e63
update ensuring that division of equal units resolves into just a number
gabrielmfern Sep 26, 2025
81edfcd
return 0 as evaluation when dividing by zero
gabrielmfern Sep 26, 2025
f662e24
improve error message
gabrielmfern Sep 26, 2025
9930898
lint
gabrielmfern Sep 26, 2025
d233d57
Merge branch 'canary' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Sep 26, 2025
f9f0eed
move css-tree to dev dependencies
gabrielmfern Sep 26, 2025
43b5fa6
update lock
gabrielmfern Sep 26, 2025
81a54d7
use tailwindv4.0 preview version
gabrielmfern Sep 26, 2025
fbe5f3f
missing update to tailwind dependency
gabrielmfern Sep 26, 2025
b3eb751
update lock
gabrielmfern Sep 26, 2025
8a807f0
fix tailwind config type being empty
gabrielmfern Oct 1, 2025
c51c147
bump to next testing version
gabrielmfern Oct 1, 2025
8e7596f
Revert "fix tailwind config type being empty"
gabrielmfern Oct 1, 2025
1041543
bump other components that were changed
gabrielmfern Oct 1, 2025
3acab21
update components dependencies
gabrielmfern Oct 1, 2025
bc778e2
Merge branch 'canary' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Oct 2, 2025
a1c860a
disable polyfills becuase they overcomplicate things
gabrielmfern Oct 3, 2025
01760cc
handle conversion of color-mix for transparency to just rgb(r,g,b,alpha)
gabrielmfern Oct 3, 2025
451958c
update snaps
gabrielmfern Oct 3, 2025
f18c1c2
add failing test
gabrielmfern Oct 3, 2025
41d36b9
add support for percentage in calc expressions
gabrielmfern Oct 3, 2025
5895a6c
don't keep any decimal portion to oklch converted numbers
gabrielmfern Oct 3, 2025
d95f0ed
lint
gabrielmfern Oct 3, 2025
9c62259
use extend for pixelBasedPreset
gabrielmfern Oct 3, 2025
6e3e58f
Merge branch 'canary' into chore/try-using-tailwind-v4-at-runtime
gabrielmfern Oct 3, 2025
0545536
update snaps
gabrielmfern Oct 3, 2025
c79502b
bump versions with fixes
gabrielmfern Oct 3, 2025
438d703
update snaps
gabrielmfern Oct 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/body/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/body",
"version": "0.1.0",
"version": "0.1.1-tailwindv4.0",
"description": "A React body component to wrap emails",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/body/src/body.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,4 @@ export const Body = React.forwardRef<HTMLBodyElement, BodyProps>(
);

Body.displayName = 'Body';
(Body as any).tailwindTreatAsElement = true;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need this?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It informs the Tailwind component that the component should have its classes inlined, and shouldn't have to be called to run on what it returns, I explain it a bit more in depth in the Performance section of the PR. We have this for the components that do style manipulation like Text, Button and the Body

2 changes: 1 addition & 1 deletion packages/button/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/button",
"version": "0.2.0",
"version": "0.2.1-tailwindv4.0",
"description": "A link that is styled to look like a button",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/button/src/button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,4 @@ export const Button = React.forwardRef<HTMLAnchorElement, ButtonProps>(
);

Button.displayName = 'Button';
(Button as any).tailwindTreatAsElement = true;
2 changes: 1 addition & 1 deletion packages/code-block/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/code-block",
"version": "0.1.0",
"version": "0.1.1-tailwindv4.0",
"description": "Display code with a selected theme and regex highlighting using Prism.js",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/code-block/src/code-block.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,4 @@ export const CodeBlock = React.forwardRef<HTMLPreElement, CodeBlockProps>(
);

CodeBlock.displayName = 'CodeBlock';
(CodeBlock as any).tailwindTreatAsElement = true;
2 changes: 1 addition & 1 deletion packages/code-inline/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/code-inline",
"version": "0.0.5",
"version": "0.0.6-tailwindv4.0",
"description": "Display a predictable inline code HTML element that works on all email clients",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/code-inline/src/code-inline.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,4 @@ export const CodeInline = React.forwardRef<HTMLSpanElement, CodeInlineProps>(
);

CodeInline.displayName = 'CodeInline';
(CodeInline as any).tailwindTreatAsElement = true;
26 changes: 13 additions & 13 deletions packages/components/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/components",
"version": "0.5.6-canary.0",
"version": "1.0.0-tailwindv4.4",
"description": "A collection of all components React Email.",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down Expand Up @@ -40,26 +40,26 @@
"node": ">=18.0.0"
},
"dependencies": {
"@react-email/body": "workspace:0.1.0",
"@react-email/button": "workspace:0.2.0",
"@react-email/code-block": "workspace:0.1.0",
"@react-email/code-inline": "workspace:0.0.5",
"@react-email/body": "workspace:0.1.1-tailwindv4.0",
"@react-email/button": "workspace:0.2.1-tailwindv4.0",
"@react-email/code-block": "workspace:0.1.1-tailwindv4.0",
"@react-email/code-inline": "workspace:0.0.6-tailwindv4.0",
"@react-email/column": "workspace:0.0.13",
"@react-email/container": "workspace:0.0.15",
"@react-email/container": "workspace:0.0.16-tailwindv4.0",
"@react-email/font": "workspace:0.0.9",
"@react-email/head": "workspace:0.0.12",
"@react-email/heading": "workspace:0.0.15",
"@react-email/hr": "workspace:0.0.11",
"@react-email/heading": "workspace:0.0.16-tailwindv4.0",
"@react-email/hr": "workspace:0.0.12-tailwindv4.0",
"@react-email/html": "workspace:0.0.11",
"@react-email/img": "workspace:0.0.11",
"@react-email/link": "workspace:0.0.12",
"@react-email/img": "workspace:0.0.12-tailwindv4.0",
"@react-email/link": "workspace:0.0.13-tailwindv4.0",
"@react-email/markdown": "workspace:0.0.15",
"@react-email/preview": "workspace:0.0.13",
"@react-email/preview": "workspace:0.0.14-tailwindv4.0",
"@react-email/render": "workspace:1.3.2-canary.0",
"@react-email/row": "workspace:0.0.12",
"@react-email/section": "workspace:0.0.16",
"@react-email/tailwind": "workspace:1.2.2",
"@react-email/text": "workspace:0.1.5"
"@react-email/tailwind": "workspace:2.0.0-tailwindv4.1",
"@react-email/text": "workspace:0.1.6-tailwindv4.0"
},
"peerDependencies": {
"react": "^18.0 || ^19.0 || ^19.0.0-rc"
Expand Down
2 changes: 1 addition & 1 deletion packages/container/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/container",
"version": "0.0.15",
"version": "0.0.16-tailwindv4.0",
"description": "A layout component that centers all the email content",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/container/src/container.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,4 @@ export const Container = React.forwardRef<HTMLTableElement, ContainerProps>(
);

Container.displayName = 'Container';
(Container as any).tailwindTreatAsElement = true;
2 changes: 1 addition & 1 deletion packages/heading/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/heading",
"version": "0.0.15",
"version": "0.0.16-tailwindv4.0",
"description": "A block of heading text",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/heading/src/heading.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,4 @@ export const Heading = React.forwardRef<
);

Heading.displayName = 'Heading';
(Heading as any).tailwindTreatAsElement = true;
2 changes: 1 addition & 1 deletion packages/hr/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/hr",
"version": "0.0.11",
"version": "0.0.12-tailwindv4.0",
"description": "Display a divider that separates content areas in your email",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/hr/src/hr.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ export const Hr = React.forwardRef<HTMLHRElement, HrProps>(
);

Hr.displayName = 'Hr';
(Hr as any).tailwindTreatAsElement = true;
2 changes: 1 addition & 1 deletion packages/img/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/img",
"version": "0.0.11",
"version": "0.0.12-tailwindv4.0",
"description": "Display an image in your email",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/img/src/img.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@ export const Img = React.forwardRef<HTMLImageElement, ImgProps>(
);

Img.displayName = 'Img';
(Img as any).tailwindTreatAsElement = true;
2 changes: 1 addition & 1 deletion packages/link/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/link",
"version": "0.0.12",
"version": "0.0.13-tailwindv4.0",
"description": "A hyperlink to web pages, email addresses, or anything else a URL can address",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/link/src/link.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ export const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
);

Link.displayName = 'Link';
(Link as any).tailwindTreatAsElement = true;
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ exports[`getEmailComponent() > with a demo email template 1`] = `
<meta name="x-apple-disable-message-reformatting" />
<!--$-->
</head>
<body
style='margin-left:auto;margin-right:auto;margin-top:auto;margin-bottom:auto;background-color:rgb(255,255,255);padding-left:8px;padding-right:8px;font-family:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"'>
<body style="background-color:rgb(255,255,255)">
<table
border="0"
width="100%"
Expand All @@ -24,7 +23,7 @@ exports[`getEmailComponent() > with a demo email template 1`] = `
<tbody>
<tr>
<td
style='margin-left:auto;margin-right:auto;margin-top:auto;margin-bottom:auto;background-color:rgb(255,255,255);padding-left:8px;padding-right:8px;font-family:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"'>
style='margin-right:auto;margin-left:auto;margin-bottom:auto;margin-top:auto;background-color:rgb(255,255,255);padding-right:8px;padding-left:8px;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"'>
<div
style="display:none;overflow:hidden;line-height:1px;opacity:0;max-height:0;max-width:0"
data-skip-in-text="true">
Expand All @@ -40,7 +39,7 @@ exports[`getEmailComponent() > with a demo email template 1`] = `
cellpadding="0"
cellspacing="0"
role="presentation"
style="margin-left:auto;margin-right:auto;margin-top:40px;margin-bottom:40px;max-width:465px;border-radius:0.25rem;border-width:1px;border-color:rgb(234,234,234);border-style:solid;padding:20px">
style="max-width:465px;margin-right:auto;margin-left:auto;margin-bottom:40px;margin-top:40px;border-radius:0.25rem;border-style:solid;border-width:1px;border-color:rgb(234,234,234);padding:20px">
<tbody>
<tr style="width:100%">
<td>
Expand All @@ -59,26 +58,26 @@ exports[`getEmailComponent() > with a demo email template 1`] = `
alt="Vercel Logo"
height="37"
src="/static/vercel-logo.png"
style="margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;display:block;outline:none;border:none;text-decoration:none"
style="display:block;outline:none;border:none;text-decoration:none;margin-right:auto;margin-left:auto;margin-bottom:0;margin-top:0"
width="40" />
</td>
</tr>
</tbody>
</table>
<h1
style="margin-left:0;margin-right:0;margin-top:30px;margin-bottom:30px;padding:0;text-align:center;font-weight:400;font-size:24px;color:rgb(0,0,0)">
style="margin-right:0;margin-left:0;margin-bottom:30px;margin-top:30px;padding:0;text-align:center;font-weight:400;font-size:24px;color:rgb(0,0,0)">
Join <strong>Enigma</strong> on <strong>Vercel</strong>
</h1>
<p
style="font-size:14px;color:rgb(0,0,0);line-height:24px;margin-top:16px;margin-bottom:16px">
style="font-size:14px;line-height:24px;color:rgb(0,0,0);margin-top:16px;margin-bottom:16px">
Hello
<!-- -->alanturing<!-- -->,
</p>
<p
style="font-size:14px;color:rgb(0,0,0);line-height:24px;margin-top:16px;margin-bottom:16px">
style="font-size:14px;line-height:24px;color:rgb(0,0,0);margin-top:16px;margin-bottom:16px">
<strong>Alan</strong> (<a
href="mailto:[email protected]"
style="color:rgb(37,99,235);text-decoration-line:none"
style="color:rgb(21,93,252);text-decoration-line:none"
target="_blank"
>[email protected]</a
>) has invited you to the <strong>Enigma</strong> team on<!-- -->
Expand Down Expand Up @@ -110,7 +109,7 @@ exports[`getEmailComponent() > with a demo email template 1`] = `
alt="alanturing&#x27;s profile picture"
height="64"
src="/static/vercel-user.png"
style="border-radius:9999px;display:block;outline:none;border:none;text-decoration:none"
style="display:block;outline:none;border:none;text-decoration:none;border-radius:9999px"
width="64" />
</td>
<td
Expand All @@ -130,7 +129,7 @@ exports[`getEmailComponent() > with a demo email template 1`] = `
alt="Enigma team logo"
height="64"
src="/static/vercel-team.png"
style="border-radius:9999px;display:block;outline:none;border:none;text-decoration:none"
style="display:block;outline:none;border:none;text-decoration:none;border-radius:9999px"
width="64" />
</td>
</tr>
Expand All @@ -153,7 +152,7 @@ exports[`getEmailComponent() > with a demo email template 1`] = `
<td>
<a
href="https://vercel.com"
style="border-radius:0.25rem;background-color:rgb(0,0,0);padding-left:20px;padding-right:20px;padding-top:12px;padding-bottom:12px;text-align:center;font-weight:600;font-size:12px;color:rgb(255,255,255);text-decoration-line:none;line-height:100%;text-decoration:none;display:inline-block;max-width:100%;mso-padding-alt:0px"
style="line-height:100%;text-decoration:none;display:inline-block;max-width:100%;mso-padding-alt:0px;border-radius:0.25rem;background-color:rgb(0,0,0);padding-right:20px;padding-left:20px;padding-bottom:12px;padding-top:12px;text-align:center;font-weight:600;font-size:12px;color:rgb(255,255,255);text-decoration-line:none"
target="_blank"
><span
><!--[if mso]><i style="mso-font-width:500%;mso-text-raise:18" hidden>&#8202;&#8202;</i><![endif]--></span
Expand All @@ -169,19 +168,19 @@ exports[`getEmailComponent() > with a demo email template 1`] = `
</tbody>
</table>
<p
style="font-size:14px;color:rgb(0,0,0);line-height:24px;margin-top:16px;margin-bottom:16px">
style="font-size:14px;line-height:24px;color:rgb(0,0,0);margin-top:16px;margin-bottom:16px">
or copy and paste this URL into your browser:<!-- -->
<a
href="https://vercel.com"
style="color:rgb(37,99,235);text-decoration-line:none"
style="color:rgb(21,93,252);text-decoration-line:none"
target="_blank"
>https://vercel.com</a
>
</p>
<hr
style="margin-left:0;margin-right:0;margin-top:26px;margin-bottom:26px;width:100%;border-width:1px;border-color:rgb(234,234,234);border-style:solid;border:none;border-top:1px solid #eaeaea" />
style="width:100%;border:none;border-top:1px solid #eaeaea;margin-right:0;margin-left:0;margin-bottom:26px;margin-top:26px;border-style:solid;border-width:1px;border-color:rgb(234,234,234)" />
<p
style="color:rgb(102,102,102);font-size:12px;line-height:24px;margin-top:16px;margin-bottom:16px">
style="font-size:12px;line-height:24px;color:rgb(102,102,102);margin-top:16px;margin-bottom:16px">
This invitation was intended for<!-- -->
<span style="color:rgb(0,0,0)">alanturing</span>. This
invite was sent from
Expand Down
2 changes: 1 addition & 1 deletion packages/preview/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@react-email/preview",
"version": "0.0.13",
"version": "0.0.14-tailwindv4.0",
"description": "A preview text that will be displayed in the inbox of the recipient",
"sideEffects": false,
"main": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions packages/preview/src/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export const Preview = React.forwardRef<HTMLDivElement, PreviewProps>(
);

Preview.displayName = 'Preview';
(Preview as any).tailwindTreatAsElement = true;

const whiteSpaceCodes = '\xa0\u200C\u200B\u200D\u200E\u200F\uFEFF';
export const renderWhiteSpace = (text: string) => {
Expand Down
Loading
Loading