diff --git a/.changeset/afraid-sides-agree.md b/.changeset/afraid-sides-agree.md new file mode 100644 index 0000000000..cc82c61116 --- /dev/null +++ b/.changeset/afraid-sides-agree.md @@ -0,0 +1,5 @@ +--- +"@react-email/preview-server": patch +--- + +fix `` not being flagged as incompatible diff --git a/.changeset/better-insects-like.md b/.changeset/better-insects-like.md new file mode 100644 index 0000000000..0bde211273 --- /dev/null +++ b/.changeset/better-insects-like.md @@ -0,0 +1,5 @@ +--- +"@react-email/preview-server": patch +--- + +fix the forced `color-scheme: dark` for the preview diff --git a/.changeset/common-goats-find.md b/.changeset/common-goats-find.md new file mode 100644 index 0000000000..6c7912dc17 --- /dev/null +++ b/.changeset/common-goats-find.md @@ -0,0 +1,6 @@ +--- +"@react-email/preview-server": patch +"react-email": patch +--- + +Use the same version for the preview-server and react-email diff --git a/.changeset/config.json b/.changeset/config.json index d896c865df..9f4df12f06 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,15 +1,16 @@ { "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", - "changelog": "@changesets/cli/changelog", - "commit": false, - "linked": [], "access": "public", "baseBranch": "main", - "updateInternalDependencies": "patch", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [["react-email", "@react-email/preview-server"]], "ignore": [ "@benchmarks/preview-server", "@benchmarks/tailwind-component", "demo", + "email-dev", "web" - ] + ], + "updateInternalDependencies": "patch" } diff --git a/.changeset/crazy-seas-eat.md b/.changeset/crazy-seas-eat.md new file mode 100644 index 0000000000..7761436aee --- /dev/null +++ b/.changeset/crazy-seas-eat.md @@ -0,0 +1,5 @@ +--- +"@react-email/components": minor +--- + +Update `@react-email/tailwind@1.1.0-canary.0` diff --git a/.changeset/deep-clowns-bet.md b/.changeset/deep-clowns-bet.md new file mode 100644 index 0000000000..3c6f842eee --- /dev/null +++ b/.changeset/deep-clowns-bet.md @@ -0,0 +1,5 @@ +--- +"@react-email/render": patch +--- + +fix browser version including errors in the output instead of throwing them diff --git a/.changeset/great-parrots-yell.md b/.changeset/great-parrots-yell.md new file mode 100644 index 0000000000..429c2c034d --- /dev/null +++ b/.changeset/great-parrots-yell.md @@ -0,0 +1,5 @@ +--- +"@react-email/tailwind": minor +--- + +Extract tailwind pseudo classes to stylesheet diff --git a/.changeset/hungry-phones-lick.md b/.changeset/hungry-phones-lick.md new file mode 100644 index 0000000000..6190dc8cb3 --- /dev/null +++ b/.changeset/hungry-phones-lick.md @@ -0,0 +1,5 @@ +--- +"@react-email/preview-server": patch +--- + +improved contrast for resizing handles, placed them around email template diff --git a/.changeset/kind-showers-exist.md b/.changeset/kind-showers-exist.md new file mode 100644 index 0000000000..1434a62b2f --- /dev/null +++ b/.changeset/kind-showers-exist.md @@ -0,0 +1,5 @@ +--- +"react-email": patch +--- + +fix static file serving security issue with logging diff --git a/.changeset/mighty-pigs-add.md b/.changeset/mighty-pigs-add.md new file mode 100644 index 0000000000..cf5a202598 --- /dev/null +++ b/.changeset/mighty-pigs-add.md @@ -0,0 +1,5 @@ +--- +"react-email": patch +--- + +Add support for hot reloading with tsconfig path aliases diff --git a/.changeset/petite-boxes-find.md b/.changeset/petite-boxes-find.md new file mode 100644 index 0000000000..a6a6db7d40 --- /dev/null +++ b/.changeset/petite-boxes-find.md @@ -0,0 +1,5 @@ +--- +"@react-email/preview-server": patch +--- + +fix hot reloading with collapsed directories diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000000..9989c70e2f --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,53 @@ +{ + "mode": "pre", + "tag": "canary", + "initialVersions": { + "@benchmarks/preview-server": "0.0.0", + "@benchmarks/tailwind-component": "0.0.0", + "@react-email/body": "0.0.11", + "@react-email/button": "0.0.19", + "@react-email/code-block": "0.0.13", + "@react-email/code-inline": "0.0.5", + "@react-email/column": "0.0.13", + "@react-email/components": "0.0.42", + "@react-email/container": "0.0.15", + "@react-email/font": "0.0.9", + "@react-email/head": "0.0.12", + "@react-email/heading": "0.0.15", + "@react-email/hr": "0.0.11", + "@react-email/html": "0.0.11", + "@react-email/img": "0.0.11", + "@react-email/link": "0.0.12", + "@react-email/markdown": "0.0.15", + "@react-email/preview": "0.0.13", + "@react-email/render": "1.1.2", + "@react-email/row": "0.0.12", + "@react-email/section": "0.0.16", + "@react-email/tailwind": "1.0.5", + "@react-email/text": "0.1.5", + "create-email": "1.2.1", + "demo": "0.0.0", + "docs": "0.0.0", + "react-email": "4.0.16", + "tsconfig": "0.0.0", + "web": "0.0.0", + "@react-email/preview-server": "4.1.0-canary.10", + "email-dev": "0.0.0" + }, + "changesets": [ + "afraid-sides-agree", + "better-insects-like", + "common-goats-find", + "crazy-seas-eat", + "deep-clowns-bet", + "great-parrots-yell", + "kind-showers-exist", + "mighty-pigs-add", + "petite-boxes-find", + "puny-chicken-argue", + "stupid-ghosts-decide", + "tasty-swans-taste", + "tidy-geese-cross", + "tiny-rice-give" + ] +} diff --git a/.changeset/puny-chicken-argue.md b/.changeset/puny-chicken-argue.md new file mode 100644 index 0000000000..cfd78a07a2 --- /dev/null +++ b/.changeset/puny-chicken-argue.md @@ -0,0 +1,5 @@ +--- +"react-email": minor +--- + +use a separate package for storing the preview server (@react-email/preview-server) diff --git a/.changeset/stupid-ghosts-decide.md b/.changeset/stupid-ghosts-decide.md new file mode 100644 index 0000000000..0f831b8f78 --- /dev/null +++ b/.changeset/stupid-ghosts-decide.md @@ -0,0 +1,5 @@ +--- +"react-email": patch +--- + +Fix prettier errors causing NextJS serialization error diff --git a/.changeset/tasty-swans-taste.md b/.changeset/tasty-swans-taste.md new file mode 100644 index 0000000000..fec9f52cfb --- /dev/null +++ b/.changeset/tasty-swans-taste.md @@ -0,0 +1,5 @@ +--- +"@react-email/components": minor +--- + +Updated @react-email/button@0.1.0-canary.0 diff --git a/.changeset/tidy-geese-cross.md b/.changeset/tidy-geese-cross.md new file mode 100644 index 0000000000..2558d752ee --- /dev/null +++ b/.changeset/tidy-geese-cross.md @@ -0,0 +1,5 @@ +--- +"react-email": patch +--- + +Pre-render email templates on hover diff --git a/.changeset/tiny-rice-give.md b/.changeset/tiny-rice-give.md new file mode 100644 index 0000000000..5daf11b7ce --- /dev/null +++ b/.changeset/tiny-rice-give.md @@ -0,0 +1,5 @@ +--- +"@react-email/button": minor +--- + +respect the order in which padding properties are defined diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 5940842a7d..370f054766 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -20,7 +20,7 @@ jobs: uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda - name: pnpm Cache id: pnpm-cache - uses: buildjet/cache@3e70d19e31d6a8030aeddf6ed8dbe601f94d09f4 + uses: buildjet/cache@9347ea1c7c1f331d397aa98b3894420448373372 with: path: | ~/.pnpm-store diff --git a/.github/workflows/preview-release.yml b/.github/workflows/preview-release.yml index eda5ee8085..e7749044a1 100644 --- a/.github/workflows/preview-release.yml +++ b/.github/workflows/preview-release.yml @@ -20,7 +20,7 @@ jobs: uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda - name: pnpm Cache id: pnpm-cache - uses: buildjet/cache@3e70d19e31d6a8030aeddf6ed8dbe601f94d09f4 + uses: buildjet/cache@9347ea1c7c1f331d397aa98b3894420448373372 with: path: | ~/.pnpm-store diff --git a/.github/workflows/release-canary.yml b/.github/workflows/release-canary.yml index a7ba292919..ef272335d1 100644 --- a/.github/workflows/release-canary.yml +++ b/.github/workflows/release-canary.yml @@ -27,7 +27,7 @@ jobs: corepack prepare pnpm@9.15.0 --activate pnpm config set script-shell "/usr/bin/bash" - name: pnpm Cache - uses: buildjet/cache@3e70d19e31d6a8030aeddf6ed8dbe601f94d09f4 + uses: buildjet/cache@9347ea1c7c1f331d397aa98b3894420448373372 with: path: | ~/.pnpm-store diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fe39bd5dcb..ed8a3897ff 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -22,7 +22,7 @@ jobs: uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda - name: pnpm Cache id: pnpm-cache - uses: buildjet/cache@3e70d19e31d6a8030aeddf6ed8dbe601f94d09f4 + uses: buildjet/cache@9347ea1c7c1f331d397aa98b3894420448373372 with: path: | ~/.pnpm-store diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index 1c64d39f98..af699de363 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -23,7 +23,7 @@ jobs: uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda - name: pnpm Cache id: pnpm-cache - uses: buildjet/cache@3e70d19e31d6a8030aeddf6ed8dbe601f94d09f4 + uses: buildjet/cache@9347ea1c7c1f331d397aa98b3894420448373372 with: path: | ~/.pnpm-store diff --git a/README.md b/README.md index a68467d544..6b52615bbd 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,13 @@ All components were tested using the most popular email clients. pnpm install ``` -#### Build and run packages +#### Build + +```sh +pnpm build +``` + +#### Run packages ```sh pnpm dev diff --git a/apps/demo/package.json b/apps/demo/package.json index a493d3a061..8529dd4a20 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -3,19 +3,20 @@ "version": "0.0.0", "private": true, "scripts": { - "build": "email build", - "dev": "email dev", - "start": "email start", - "export": "email export" + "build": "email-dev build", + "dev": "email-dev dev", + "start": "email-dev start", + "export": "email-dev export" }, "dependencies": { "@react-email/components": "workspace:*", "react": "^19", "react-dom": "^19", - "react-email": "workspace:*" + "email-dev": "workspace:*" }, "devDependencies": { - "next": "15.3.1", + "@react-email/preview-server": "workspace:*", + "next": "^15.3.2", "@types/react": "^19", "@types/react-dom": "^19", "tsx": "4.19.3" diff --git a/apps/web/components/customer-reviews/tailwind.tsx b/apps/web/components/customer-reviews/tailwind.tsx index 9daaf64892..897ef565d8 100644 --- a/apps/web/components/customer-reviews/tailwind.tsx +++ b/apps/web/components/customer-reviews/tailwind.tsx @@ -87,7 +87,7 @@ export const component = ( diff --git a/apps/web/package.json b/apps/web/package.json index ce813bfc25..59c37b3604 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -21,7 +21,7 @@ "@vercel/analytics": "1.5.0", "framer-motion": "12.7.4", "lucide-react": "^0.492.0", - "next": "15.3.1", + "next": "15.3.2", "prism-react-renderer": "2.4.1", "react": "^19", "react-dom": "^19", diff --git a/apps/web/src/components/template.tsx b/apps/web/src/components/template.tsx index 3a5194cc08..bf85fd3736 100644 --- a/apps/web/src/components/template.tsx +++ b/apps/web/src/components/template.tsx @@ -1,8 +1,8 @@ 'use client'; import classNames from 'classnames'; -import Image from 'next/image'; import type { ImageLoader } from 'next/image'; +import Image from 'next/image'; import Link from 'next/link'; import * as React from 'react'; import { Heading } from './heading'; diff --git a/apps/web/src/utils/spam-assassin/parse-pointing-table-rows.ts b/apps/web/src/utils/spam-assassin/parse-pointing-table-rows.ts index 3afa39b89e..0ccfdfa717 100644 --- a/apps/web/src/utils/spam-assassin/parse-pointing-table-rows.ts +++ b/apps/web/src/utils/spam-assassin/parse-pointing-table-rows.ts @@ -27,7 +27,7 @@ export const parsePointingTableRows = (response: string) => { const responseFromTableStart = response.slice( tableStartMatch.index + tableStartMatch[0].length, ); - let currentRow: Row | undefined = undefined; + let currentRow: Row | undefined; for (const line of responseFromTableStart.split(/\r\n|\n|\r/)) { if (line.trim().length === 0) break; diff --git a/biome.json b/biome.json index 21871acfbb..5c35171042 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.0.0-beta.1/schema.json", + "$schema": "https://biomejs.dev/schemas/2.0.0-beta.5/schema.json", "assist": { "actions": { "source": { @@ -31,7 +31,6 @@ "noCommaOperator": "error", "useNodejsImportProtocol": "error", "useAsConstAssertion": "error", - "useNumericLiterals": "error", "useEnumInitializers": "error", "useSelfClosingElements": "error", "useConst": "error", @@ -54,6 +53,7 @@ "noDelete": "off" }, "a11y": { + "noStaticElementInteractions": "off", "noSvgWithoutTitle": "off", "noAutofocus": "off" }, @@ -67,6 +67,7 @@ "useSortedClasses": "off" }, "complexity": { + "useNumericLiterals": "error", "noUselessFragments": "off", "noForEach": "off" }, @@ -87,7 +88,7 @@ "!**/pnpm-lock.yaml", "!**/.next", "!**/public", - "!packages/react-email/src/actions/email-validation/caniemail-data.ts", + "!packages/preview-server/src/actions/email-validation/caniemail-data.ts", "!**/.react-email/**/*", "!**/node_modules/**/*", "!**/*.d.ts", diff --git a/package.json b/package.json index 72f6cc8f16..d00baa351b 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "test:watch": "turbo run test:watch" }, "devDependencies": { - "@biomejs/biome": "2.0.0-beta.1", + "@biomejs/biome": "2.0.0-beta.5", "@changesets/cli": "2.29.4", "@types/node": "22.14.1", "@types/react": "19.0.1", diff --git a/packages/button/CHANGELOG.md b/packages/button/CHANGELOG.md index 4189b25812..a638815a30 100644 --- a/packages/button/CHANGELOG.md +++ b/packages/button/CHANGELOG.md @@ -1,5 +1,11 @@ # @react-email/button +## 0.1.0-canary.0 + +### Minor Changes + +- 11c4600: respect the order in which padding properties are defined + ## 0.0.19 ### Patch Changes diff --git a/packages/button/package.json b/packages/button/package.json index de052f9ef8..e071533bed 100644 --- a/packages/button/package.json +++ b/packages/button/package.json @@ -1,6 +1,6 @@ { "name": "@react-email/button", - "version": "0.0.19", + "version": "0.1.0-canary.0", "description": "A link that is styled to look like a button", "sideEffects": false, "main": "./dist/index.js", diff --git a/packages/button/src/__snapshots__/button.spec.tsx.snap b/packages/button/src/__snapshots__/button.spec.tsx.snap index 1b9e7cd7ed..817aa1733c 100644 --- a/packages/button/src/__snapshots__/button.spec.tsx.snap +++ b/packages/button/src/__snapshots__/button.spec.tsx.snap @@ -1,7 +1,7 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`"`; +exports[`