From c362cefd0463d18e096c7a71a3fd6c0971c7f9fc Mon Sep 17 00:00:00 2001 From: Andrew Powell Date: Mon, 18 Sep 2023 20:39:50 -0400 Subject: [PATCH] feat(cli): initial version (#1) --- .eslintignore | 4 +- .eslintrc.js | 9 +- .vscode/settings.json | 4 +- .vscode/tailwind.json | 9 + apps/client/.eslintrc.json | 17 - apps/client/.prettierignore | 3 - apps/client/.prettierrc.js | 8 - apps/client/.vscode/settings.json | 4 - apps/client/emails/airbnb-review.tsx | 201 - apps/client/next-env.d.ts | 5 - apps/client/next.config.js | 11 - apps/client/package.json | 48 - apps/client/src/app/home.tsx | 28 - apps/client/src/app/layout.tsx | 24 - apps/client/src/app/page.tsx | 11 - apps/client/src/app/preview/[slug]/page.tsx | 57 - .../client/src/app/preview/[slug]/preview.tsx | 72 - apps/client/src/components/button.tsx | 85 - apps/client/src/components/code.tsx | 114 - apps/client/src/components/icon-base.tsx | 26 - apps/client/src/components/icon-button.tsx | 23 - apps/client/src/components/icon-check.tsx | 18 - apps/client/src/components/icon-clipboard.tsx | 39 - apps/client/src/components/icon-download.tsx | 18 - apps/client/src/components/logo.tsx | 71 - apps/client/src/components/send.tsx | 118 - apps/client/src/components/shell.tsx | 84 - apps/client/src/components/sidebar.tsx | 150 - .../client/src/components/tooltip-content.tsx | 32 - apps/client/src/styles/globals.css | 3 - .../src/utils/copy-text-to-clipboard.ts | 7 - apps/client/src/utils/get-emails.ts | 13 - apps/client/src/utils/index.ts | 3 - apps/client/src/utils/language-map.ts | 7 - apps/client/src/utils/unreachable.ts | 6 - apps/client/tsconfig.json | 32 - apps/client/yarn.lock | 3321 ----------------- deprecated/create-email/package.json | 33 - deprecated/create-email/readme.md | 34 - deprecated/create-email/src/index.js | 50 - deprecated/create-email/template/.gitignore | 1 - .../template/emails/notion-magic-link.tsx | 146 - .../template/emails/plaid-verify-identity.tsx | 154 - .../template/emails/vercel-invite-user.tsx | 136 - deprecated/create-email/template/package.json | 16 - deprecated/create-email/template/readme.md | 27 - .../template/static/notion-logo.png | Bin 1929 -> 0 bytes .../template/static/plaid-logo.png | Bin 3987 -> 0 bytes .../create-email/template/static/plaid.png | Bin 3987 -> 0 bytes .../template/static/stripe-logo.png | Bin 1813 -> 0 bytes .../template/static/vercel-arrow.png | Bin 426 -> 0 bytes .../template/static/vercel-logo.png | Bin 1178 -> 0 bytes .../template/static/vercel-team.png | Bin 3122 -> 0 bytes .../template/static/vercel-user.png | Bin 55726 -> 0 bytes deprecated/create-email/tsconfig.json | 1 - deprecated/react-email/package.json | 55 - deprecated/react-email/readme.md | 44 - deprecated/react-email/src/commands/dev.ts | 30 - deprecated/react-email/src/commands/export.ts | 83 - .../react-email/src/commands/preview.ts | 44 - deprecated/react-email/src/index.ts | 45 - .../src/utils/close-ora-on-sigint.ts | 7 - deprecated/react-email/src/utils/constants.ts | 25 - .../src/utils/convert-to-absolute-path.ts | 4 - .../react-email/src/utils/download-client.ts | 28 - .../src/utils/generate-email-preview.ts | 127 - deprecated/react-email/src/utils/index.ts | 8 - .../src/utils/install-dependencies.ts | 20 - .../react-email/src/utils/run-server.ts | 61 - .../src/utils/start-server-command.ts | 58 - .../react-email/src/utils/sync-package.ts | 20 - deprecated/react-email/src/utils/watcher.ts | 72 - package.json | 3 + packages/cli/app/.eslintrc.js | 6 + packages/cli/app/index.html | 14 + .../cli/app}/postcss.config.js | 4 +- packages/cli/app/src/App.css | 42 + packages/cli/app/src/App.old.tsx | 22 + .../app}/src/components/code-container.tsx | 64 +- packages/cli/app/src/components/code.tsx | 97 + .../cli/app}/src/components/heading.tsx | 76 +- packages/cli/app/src/components/icons.tsx | 113 + .../cli/app}/src/components/index.ts | 1 + packages/cli/app/src/components/logo.tsx | 38 + packages/cli/app/src/components/shell.tsx | 54 + packages/cli/app/src/components/sidebar.tsx | 145 + .../cli/app}/src/components/text.tsx | 66 +- .../app/src/components/tooltip-content.tsx | 27 + .../cli/app}/src/components/tooltip.tsx | 11 +- .../cli/app}/src/components/topbar.tsx | 60 +- packages/cli/app/src/css/cta.css | 9 + packages/cli/app/src/css/globals.css | 12 + packages/cli/app/src/css/monokai1.css | 118 + packages/cli/app/src/css/monokai2.css | 141 + packages/cli/app/src/css/monokai3.css | 248 ++ packages/cli/app/src/css/monokai4.css | 137 + packages/cli/app/src/error.tsx | 18 + .../as.ts => packages/cli/app/src/helpers.ts | 25 +- packages/cli/app/src/home.tsx | 38 + packages/cli/app/src/layout.tsx | 8 + packages/cli/app/src/main.tsx | 87 + packages/cli/app/src/preview.tsx | 72 + .../cli/app}/tailwind.config.js | 65 +- packages/cli/app/tsconfig.json | 25 + packages/cli/app/tsconfig.node.json | 10 + packages/cli/app/vite-env.d.ts | 1 + packages/cli/app/vite.config.ts | 9 + packages/cli/moon.yml | 41 + packages/cli/package.json | 68 + packages/cli/readme.md | 58 + packages/cli/scripts/test.ts | 5 + packages/cli/src/assets/email.mustache | 97 + packages/cli/src/commands/build.ts | 145 + packages/cli/src/commands/create.ts | 62 + packages/cli/src/commands/help.ts | 51 + packages/cli/src/commands/preview.ts | 64 + packages/cli/src/commands/types.ts | 5 + packages/cli/src/index.ts | 44 + packages/cli/tsconfig.json | 8 + packages/demo/package.json | 14 + packages/demo/readme.md | 64 + .../demo/src}/stripe-welcome.tsx | 164 +- pnpm-lock.yaml | 1952 +++++++++- shared/tsconfig.base.json | 17 +- shared/tsconfig.eslint.json | 4 +- 125 files changed, 4289 insertions(+), 6454 deletions(-) create mode 100644 .vscode/tailwind.json delete mode 100644 apps/client/.eslintrc.json delete mode 100644 apps/client/.prettierignore delete mode 100644 apps/client/.prettierrc.js delete mode 100644 apps/client/.vscode/settings.json delete mode 100644 apps/client/emails/airbnb-review.tsx delete mode 100644 apps/client/next-env.d.ts delete mode 100644 apps/client/next.config.js delete mode 100644 apps/client/package.json delete mode 100644 apps/client/src/app/home.tsx delete mode 100644 apps/client/src/app/layout.tsx delete mode 100644 apps/client/src/app/page.tsx delete mode 100644 apps/client/src/app/preview/[slug]/page.tsx delete mode 100644 apps/client/src/app/preview/[slug]/preview.tsx delete mode 100644 apps/client/src/components/button.tsx delete mode 100644 apps/client/src/components/code.tsx delete mode 100644 apps/client/src/components/icon-base.tsx delete mode 100644 apps/client/src/components/icon-button.tsx delete mode 100644 apps/client/src/components/icon-check.tsx delete mode 100644 apps/client/src/components/icon-clipboard.tsx delete mode 100644 apps/client/src/components/icon-download.tsx delete mode 100644 apps/client/src/components/logo.tsx delete mode 100644 apps/client/src/components/send.tsx delete mode 100644 apps/client/src/components/shell.tsx delete mode 100644 apps/client/src/components/sidebar.tsx delete mode 100644 apps/client/src/components/tooltip-content.tsx delete mode 100644 apps/client/src/styles/globals.css delete mode 100644 apps/client/src/utils/copy-text-to-clipboard.ts delete mode 100644 apps/client/src/utils/get-emails.ts delete mode 100644 apps/client/src/utils/index.ts delete mode 100644 apps/client/src/utils/language-map.ts delete mode 100644 apps/client/src/utils/unreachable.ts delete mode 100644 apps/client/tsconfig.json delete mode 100644 apps/client/yarn.lock delete mode 100644 deprecated/create-email/package.json delete mode 100644 deprecated/create-email/readme.md delete mode 100755 deprecated/create-email/src/index.js delete mode 100644 deprecated/create-email/template/.gitignore delete mode 100644 deprecated/create-email/template/emails/notion-magic-link.tsx delete mode 100644 deprecated/create-email/template/emails/plaid-verify-identity.tsx delete mode 100644 deprecated/create-email/template/emails/vercel-invite-user.tsx delete mode 100644 deprecated/create-email/template/package.json delete mode 100644 deprecated/create-email/template/readme.md delete mode 100644 deprecated/create-email/template/static/notion-logo.png delete mode 100644 deprecated/create-email/template/static/plaid-logo.png delete mode 100644 deprecated/create-email/template/static/plaid.png delete mode 100644 deprecated/create-email/template/static/stripe-logo.png delete mode 100644 deprecated/create-email/template/static/vercel-arrow.png delete mode 100644 deprecated/create-email/template/static/vercel-logo.png delete mode 100644 deprecated/create-email/template/static/vercel-team.png delete mode 100644 deprecated/create-email/template/static/vercel-user.png delete mode 120000 deprecated/create-email/tsconfig.json delete mode 100644 deprecated/react-email/package.json delete mode 100644 deprecated/react-email/readme.md delete mode 100644 deprecated/react-email/src/commands/dev.ts delete mode 100644 deprecated/react-email/src/commands/export.ts delete mode 100644 deprecated/react-email/src/commands/preview.ts delete mode 100644 deprecated/react-email/src/index.ts delete mode 100644 deprecated/react-email/src/utils/close-ora-on-sigint.ts delete mode 100644 deprecated/react-email/src/utils/constants.ts delete mode 100644 deprecated/react-email/src/utils/convert-to-absolute-path.ts delete mode 100644 deprecated/react-email/src/utils/download-client.ts delete mode 100644 deprecated/react-email/src/utils/generate-email-preview.ts delete mode 100644 deprecated/react-email/src/utils/index.ts delete mode 100644 deprecated/react-email/src/utils/install-dependencies.ts delete mode 100644 deprecated/react-email/src/utils/run-server.ts delete mode 100644 deprecated/react-email/src/utils/start-server-command.ts delete mode 100644 deprecated/react-email/src/utils/sync-package.ts delete mode 100644 deprecated/react-email/src/utils/watcher.ts create mode 100644 packages/cli/app/.eslintrc.js create mode 100644 packages/cli/app/index.html rename {apps/client => packages/cli/app}/postcss.config.js (68%) create mode 100644 packages/cli/app/src/App.css create mode 100644 packages/cli/app/src/App.old.tsx rename {apps/client => packages/cli/app}/src/components/code-container.tsx (66%) create mode 100644 packages/cli/app/src/components/code.tsx rename {apps/client => packages/cli/app}/src/components/heading.tsx (63%) create mode 100644 packages/cli/app/src/components/icons.tsx rename {apps/client => packages/cli/app}/src/components/index.ts (87%) create mode 100644 packages/cli/app/src/components/logo.tsx create mode 100644 packages/cli/app/src/components/shell.tsx create mode 100644 packages/cli/app/src/components/sidebar.tsx rename {apps/client => packages/cli/app}/src/components/text.tsx (76%) create mode 100644 packages/cli/app/src/components/tooltip-content.tsx rename {apps/client => packages/cli/app}/src/components/tooltip.tsx (68%) rename {apps/client => packages/cli/app}/src/components/topbar.tsx (67%) create mode 100644 packages/cli/app/src/css/cta.css create mode 100644 packages/cli/app/src/css/globals.css create mode 100644 packages/cli/app/src/css/monokai1.css create mode 100644 packages/cli/app/src/css/monokai2.css create mode 100644 packages/cli/app/src/css/monokai3.css create mode 100644 packages/cli/app/src/css/monokai4.css create mode 100644 packages/cli/app/src/error.tsx rename apps/client/src/utils/as.ts => packages/cli/app/src/helpers.ts (52%) create mode 100644 packages/cli/app/src/home.tsx create mode 100644 packages/cli/app/src/layout.tsx create mode 100644 packages/cli/app/src/main.tsx create mode 100644 packages/cli/app/src/preview.tsx rename {apps/client => packages/cli/app}/tailwind.config.js (72%) create mode 100644 packages/cli/app/tsconfig.json create mode 100644 packages/cli/app/tsconfig.node.json create mode 100644 packages/cli/app/vite-env.d.ts create mode 100644 packages/cli/app/vite.config.ts create mode 100644 packages/cli/moon.yml create mode 100644 packages/cli/package.json create mode 100644 packages/cli/readme.md create mode 100644 packages/cli/scripts/test.ts create mode 100644 packages/cli/src/assets/email.mustache create mode 100644 packages/cli/src/commands/build.ts create mode 100644 packages/cli/src/commands/create.ts create mode 100644 packages/cli/src/commands/help.ts create mode 100644 packages/cli/src/commands/preview.ts create mode 100644 packages/cli/src/commands/types.ts create mode 100644 packages/cli/src/index.ts create mode 100644 packages/cli/tsconfig.json create mode 100644 packages/demo/package.json create mode 100644 packages/demo/readme.md rename {deprecated/create-email/template/emails => packages/demo/src}/stripe-welcome.tsx (57%) diff --git a/.eslintignore b/.eslintignore index 7b8a9039..dff42c6c 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,4 +2,6 @@ apps node_modules dist -**/*spec.tsx \ No newline at end of file +**/*spec.tsx + +deprecated \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index 8aeb83dc..6db75136 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,6 +1,13 @@ module.exports = { extends: ['shellscape/typescript', 'plugin:import/typescript'], overrides: [ + { + files: ['*.d.ts'], + rules: { + 'no-underscore-dangle': 'off', + 'spaced-comment': 'off' + } + }, { files: ['*.ts', '*.tsx'], rules: { @@ -19,7 +26,7 @@ module.exports = { } ], parserOptions: { - project: ['./shared/tsconfig.eslint.json', './packages/*/tsconfig.json'], + project: ['./shared/tsconfig.eslint.json', './packages/**/tsconfig.json'], tsconfigRootDir: __dirname }, rules: { diff --git a/.vscode/settings.json b/.vscode/settings.json index 8b54f915..451c7c1f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,5 @@ { - "prettier.singleQuote": true + "prettier.singleQuote": true, + "typescript.tsdk": "node_modules/typescript/lib", + "css.customData": [".vscode/tailwind.json"] } diff --git a/.vscode/tailwind.json b/.vscode/tailwind.json new file mode 100644 index 00000000..64077edd --- /dev/null +++ b/.vscode/tailwind.json @@ -0,0 +1,9 @@ +{ + "version": 1.1, + "atDirectives": [ + { + "name": "@tailwind", + "description": "Use the @tailwind directive to insert Tailwind's `base`, `components`, `utilities`, and `screens` styles into your CSS." + } + ] +} diff --git a/apps/client/.eslintrc.json b/apps/client/.eslintrc.json deleted file mode 100644 index 943f99f7..00000000 --- a/apps/client/.eslintrc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": ["next", "prettier"], - "plugins": ["simple-import-sort", "unused-imports"], - "rules": { - "react/no-unescaped-entities": 0, - "react-hooks/rules-of-hooks": 0, - "no-unused-vars": "off", - "simple-import-sort/imports": [ - "error", - { - // The default grouping, but with no blank lines. - "groups": [["^\\u0000", "^@?\\w", "^", "^\\."]] - } - ], - "simple-import-sort/exports": "error" - } -} \ No newline at end of file diff --git a/apps/client/.prettierignore b/apps/client/.prettierignore deleted file mode 100644 index 621285d9..00000000 --- a/apps/client/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -.next -node_modules \ No newline at end of file diff --git a/apps/client/.prettierrc.js b/apps/client/.prettierrc.js deleted file mode 100644 index 14134b0c..00000000 --- a/apps/client/.prettierrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - quoteProps: 'consistent', - singleQuote: true, - trailingComma: 'all', - printWidth: 80, - useTabs: false, - bracketSpacing: true, -}; diff --git a/apps/client/.vscode/settings.json b/apps/client/.vscode/settings.json deleted file mode 100644 index d0679104..00000000 --- a/apps/client/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "typescript.tsdk": "node_modules/typescript/lib", - "typescript.enablePromptUseWorkspaceTsdk": true -} \ No newline at end of file diff --git a/apps/client/emails/airbnb-review.tsx b/apps/client/emails/airbnb-review.tsx deleted file mode 100644 index aabc1be1..00000000 --- a/apps/client/emails/airbnb-review.tsx +++ /dev/null @@ -1,201 +0,0 @@ -import { - Body, - Button, - Container, - Head, - Hr, - Html, - Img, - Link, - Preview, - Row, - Section, - Text, -} from '@react-email/components'; -import * as React from 'react'; - -interface AirbnbReviewEmailProps { - authorName?: string; - authorImage?: string; - reviewText?: string; -} - -const baseUrl = process.env.VERCEL_URL - ? `https://${process.env.VERCEL_URL}` - : ''; - -export const AirbnbReviewEmail = ({ - authorName, - authorImage, - reviewText, -}: AirbnbReviewEmailProps) => { - const previewText = `Read ${authorName}'s review`; - - return ( - - - {previewText} - - -
- -
- Airbnb -
-
- {authorName} -
-
- - 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. - - - - -
- -
- -
- - - 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 - -
-
-
-
- - - ); -}; - -AirbnbReviewEmail.PreviewProps = { - authorName: 'Alex', - authorImage: `${baseUrl}/static/airbnb-review-user.jpg`, - reviewText: `“Zeno was a great guest! Easy communication, the apartment was left - in great condition, very polite, and respectful of all house rules. - He’s welcome back anytime and would easily recommend him to any - 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', -}; - -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', - textDecoration: 'none', - textAlign: 'center' as const, - display: 'block', - width: '100%', -}; - -const link = { - ...paragraph, - color: '#ff5a5f', - display: 'block', -}; - -const reportLink = { - fontSize: '14px', - color: '#9ca299', - textDecoration: 'underline', -}; - -const hr = { - borderColor: '#cccccc', - margin: '20px 0', -}; - -const footer = { - color: '#9ca299', - fontSize: '14px', - marginBottom: '10px', -}; diff --git a/apps/client/next-env.d.ts b/apps/client/next-env.d.ts deleted file mode 100644 index 4f11a03d..00000000 --- a/apps/client/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/apps/client/next.config.js b/apps/client/next.config.js deleted file mode 100644 index 62cf7fe6..00000000 --- a/apps/client/next.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - reactStrictMode: true, - swcMinify: true, - experimental: { - appDir: true, - externalDir: true // compile files that are located next to the .react-email directory - }, -}; - -module.exports = nextConfig; \ No newline at end of file diff --git a/apps/client/package.json b/apps/client/package.json deleted file mode 100644 index efdfe8d5..00000000 --- a/apps/client/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "react-email-client", - "version": "0.0.14", - "description": "The React Email preview application", - "license": "MIT", - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "format:check": "prettier --check \"**/*.{ts,tsx,md}\"", - "format": "prettier --write \"**/*.{ts,tsx,md}\"" - }, - "engines": { - "node": ">=16.0.0" - }, - "dependencies": { - "@radix-ui/colors": "1.0.1", - "@radix-ui/react-collapsible": "1.0.3", - "@radix-ui/react-popover": "1.0.6", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-toggle-group": "1.0.4", - "@radix-ui/react-tooltip": "1.0.6", - "@react-email/render": "0.0.7", - "classnames": "2.3.2", - "framer-motion": "8.5.5", - "next": "13.4.10", - "prism-react-renderer": "1.3.5", - "react": "18.2.0", - "react-dom": "18.2.0" - }, - "devDependencies": { - "@types/classnames": "2.3.1", - "@types/node": "18.11.9", - "@types/react": "18.0.25", - "@types/react-dom": "18.0.9", - "autoprefixer": "10.4.14", - "eslint": "8.45.0", - "eslint-config-next": "13.4.10", - "eslint-config-prettier": "8.8.0", - "eslint-plugin-simple-import-sort": "10.0.0", - "eslint-plugin-unused-imports": "3.0.0", - "postcss": "8.4.26", - "prettier": "3.0.0", - "tailwindcss": "3.3.3", - "typescript": "5.1.6" - } -} diff --git a/apps/client/src/app/home.tsx b/apps/client/src/app/home.tsx deleted file mode 100644 index 7669d215..00000000 --- a/apps/client/src/app/home.tsx +++ /dev/null @@ -1,28 +0,0 @@ -'use client'; - -import Link from 'next/link'; -import { Button, Heading, Text } from '../components'; -import { Shell } from '../components/shell'; - -export default function Home({ navItems }) { - return ( - -
-
- - Welcome to the React Email preview! - - - To start developing your next email template, you can create a{' '} - .jsx or .tsx file under the "emails" - folder. - - - -
-
-
- ); -} diff --git a/apps/client/src/app/layout.tsx b/apps/client/src/app/layout.tsx deleted file mode 100644 index acfda733..00000000 --- a/apps/client/src/app/layout.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import '../styles/globals.css'; -import classnames from 'classnames'; -import { Inter } from 'next/font/google'; - -export const inter = Inter({ - subsets: ['latin'], - variable: '--font-inter', -}); - -export default function RootLayout({ - children, -}: { - children: React.ReactNode; -}) { - return ( - - -
- {children} -
- - - ); -} diff --git a/apps/client/src/app/page.tsx b/apps/client/src/app/page.tsx deleted file mode 100644 index 06fe4d5c..00000000 --- a/apps/client/src/app/page.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { getEmails } from '../utils/get-emails'; -import Home from './home'; - -export default async function Index() { - const { emails } = await getEmails(); - return ; -} - -export const metadata = { - title: 'React Email', -}; diff --git a/apps/client/src/app/preview/[slug]/page.tsx b/apps/client/src/app/preview/[slug]/page.tsx deleted file mode 100644 index 84af9bcb..00000000 --- a/apps/client/src/app/preview/[slug]/page.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { render } from '@react-email/render'; -import { promises as fs } from 'fs'; -import { dirname, join as pathJoin } from 'path'; -import { CONTENT_DIR, getEmails } from '../../../utils/get-emails'; -import Preview from './preview'; - -export const dynamicParams = true; - -export async function generateStaticParams() { - const { emails } = await getEmails(); - - const paths = emails.map((email) => { - return { slug: email }; - }); - - return paths; -} - -export default async function Page({ params }) { - const { emails, filenames } = await getEmails(); - const template = filenames.filter((email) => { - const [fileName] = email.split('.'); - return params.slug === fileName; - }); - - const Email = (await import(`../../../../emails/${params.slug}`)).default; - const previewProps = Email.PreviewProps || {} - const markup = render(, { pretty: true }); - const plainText = render(, { plainText: true }); - const basePath = pathJoin(process.cwd(), CONTENT_DIR); - const path = pathJoin(basePath, template[0]); - - // the file is actually just re-exporting the default export of the original file. We need to resolve this first - const exportTemplateFile: string = await fs.readFile(path, { - encoding: 'utf-8', - }); - const importPath = exportTemplateFile.match(/import Mail from '(.+)';/)![1]; - const originalFilePath = pathJoin(dirname(path), importPath); - - const reactMarkup: string = await fs.readFile(originalFilePath, { - encoding: 'utf-8', - }); - - return ( - - ); -} - -export async function generateMetadata({ params }) { - return { title: `${params.slug} — React Email` }; -} diff --git a/apps/client/src/app/preview/[slug]/preview.tsx b/apps/client/src/app/preview/[slug]/preview.tsx deleted file mode 100644 index be902d55..00000000 --- a/apps/client/src/app/preview/[slug]/preview.tsx +++ /dev/null @@ -1,72 +0,0 @@ -'use client'; - -import { usePathname, useRouter, useSearchParams } from 'next/navigation'; -import React from 'react'; -import { CodeContainer } from '../../../components/code-container'; -import { Shell } from '../../../components/shell'; -import { Tooltip } from '../../../components/tooltip'; - -export default function Preview({ - navItems, - slug, - markup, - reactMarkup, - plainText, -}) { - const router = useRouter(); - const pathname = usePathname(); - const searchParams = useSearchParams(); - const [activeView, setActiveView] = React.useState('desktop'); - const [activeLang, setActiveLang] = React.useState('jsx'); - - React.useEffect(() => { - const view = searchParams.get('view'); - const lang = searchParams.get('lang'); - - if (view === 'source' || view === 'desktop') { - setActiveView(view); - } - - if (lang === 'jsx' || lang === 'markup' || lang === 'markdown') { - setActiveLang(lang); - } - }, [searchParams]); - - const handleViewChange = (view: string) => { - setActiveView(view); - router.push(`${pathname}?view=${view}`); - }; - - const handleLangChange = (lang: string) => { - setActiveLang(lang); - router.push(`${pathname}?view=source&lang=${lang}`); - }; - - return ( - - {activeView === 'desktop' ? ( -