Skip to content

Commit 344e223

Browse files
committed
chore(repo): shore up linting, fix dependency issues
1 parent 84adf0f commit 344e223

File tree

90 files changed

+802
-822
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+802
-822
lines changed

.eslintcache

+1
Large diffs are not rendered by default.

.eslintignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
# Note: We're ignoring this while we get the rest of the repo setup
2-
apps
2+
apps
3+
node_modules
4+
dist
5+
**/*spec.tsx

.eslintrc.js

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
module.exports = {
2+
extends: ['shellscape/typescript', 'plugin:import/typescript'],
3+
overrides: [
4+
{
5+
files: ['*.ts', '*.tsx'],
6+
rules: {
7+
'no-shadow': 'off',
8+
'no-undef': 'off'
9+
}
10+
},
11+
{
12+
files: ['**/scripts/**', '**/test/**'],
13+
rules: {
14+
'import/extensions': 'off',
15+
'import/no-extraneous-dependencies': 'off',
16+
'import/no-unresolved': 'off',
17+
'no-console': 'off'
18+
}
19+
}
20+
],
21+
parserOptions: {
22+
project: ['./shared/tsconfig.eslint.json', './packages/*/tsconfig.json'],
23+
tsconfigRootDir: __dirname
24+
},
25+
rules: {
26+
'@typescript-eslint/no-unused-vars': [
27+
'error',
28+
{
29+
args: 'after-used',
30+
argsIgnorePattern: '^_',
31+
caughtErrorsIgnorePattern: '^_',
32+
ignoreRestSiblings: true,
33+
vars: 'local',
34+
varsIgnorePattern: '^_'
35+
}
36+
]
37+
}
38+
};

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
22

3+
.moon/cache
4+
35
# dependencies
46
node_modules
57
.pnp
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"aliases":{"@jsx-email/body":"body","@jsx-email/button":"button","@jsx-email/column":"column","@jsx-email/components":"components","@jsx-email/container":"container","@jsx-email/font":"font","@jsx-email/head":"head","@jsx-email/heading":"heading","@jsx-email/hr":"hr","@jsx-email/html":"html","@jsx-email/img":"img","@jsx-email/link":"link","@jsx-email/markdown":"markdown","@jsx-email/preview":"preview","@jsx-email/render":"render","@jsx-email/row":"row","@jsx-email/section":"section","@jsx-email/tailwind":"tailwind","@jsx-email/text":"text","jsx-email":"jsx-email"},"sources":{"body":"packages/body","button":"packages/button","column":"packages/column","components":"packages/components","container":"packages/container","font":"packages/font","head":"packages/head","heading":"packages/heading","hr":"packages/hr","html":"packages/html","img":"packages/img","jsx-email":".","link":"packages/link","markdown":"packages/markdown","preview":"packages/preview","render":"packages/render","row":"packages/row","section":"packages/section","tailwind":"packages/tailwind","text":"packages/text"},"configs":{"./moon.yml":"a1478373f281f92e49e5e33f0f00c95abdb7e331",".moon/tasks.yml":"335b021dfb212814ecea0240ca1aeb9e561e614a",".moon/toolchain.yml":"78713d1808f28f25f8366ba56991e5e45d2dcaba",".moon/workspace.yml":"b1861b6db4fc24f6472e14007595c43058cfbcbb"},"inContainer":false,"version":"1.12.1"}]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"aliases":{},"dependencies":{"@babel/core":"7.21.8","@babel/preset-react":"7.22.5","@react-email/render":"0.0.6","@types/jest":"29.5.3","@types/react":"18.0.20","@types/react-dom":"18.0.6","babel-jest":"28.1.3","eslint":"8.45.0","eslint-config-shellscape":"^6.0.1","husky":"^8.0.3","jest":"28.1.3","lint-staged":"13.2.2","prettier":"3.0.0","ts-jest":"28.0.8","tsup":"7.1.0","typescript":"5.1.6"},"name":"jsx-email"}]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"aliases":{"@jsx-email/body":"body","@jsx-email/button":"button","@jsx-email/column":"column","@jsx-email/components":"components","@jsx-email/container":"container","@jsx-email/font":"font","@jsx-email/head":"head","@jsx-email/heading":"heading","@jsx-email/hr":"hr","@jsx-email/html":"html","@jsx-email/img":"img","@jsx-email/link":"link","@jsx-email/markdown":"markdown","@jsx-email/preview":"preview","@jsx-email/render":"render","@jsx-email/row":"row","@jsx-email/section":"section","@jsx-email/tailwind":"tailwind","@jsx-email/text":"text","jsx-email":"jsx-email"},"sources":{"body":"packages/body","button":"packages/button","column":"packages/column","components":"packages/components","container":"packages/container","font":"packages/font","head":"packages/head","heading":"packages/heading","hr":"packages/hr","html":"packages/html","img":"packages/img","jsx-email":".","link":"packages/link","markdown":"packages/markdown","preview":"packages/preview","render":"packages/render","row":"packages/row","section":"packages/section","tailwind":"packages/tailwind","text":"packages/text"},"configs":{"./moon.yml":"27d8231b7068bb8e9de5762f49278f17e574d43a",".moon/tasks.yml":"335b021dfb212814ecea0240ca1aeb9e561e614a",".moon/toolchain.yml":"78713d1808f28f25f8366ba56991e5e45d2dcaba",".moon/workspace.yml":"b1861b6db4fc24f6472e14007595c43058cfbcbb"},"inContainer":false,"version":"1.12.1"}]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"aliases":{},"dependencies":{"@babel/core":"7.21.8","@babel/preset-react":"7.22.5","@react-email/render":"0.0.6","@types/jest":"29.5.3","@types/react":"18.0.20","@types/react-dom":"18.0.6","babel-jest":"28.1.3","eslint":"8.45.0","eslint-config-shellscape":"^6.0.1","husky":"^8.0.3","jest":"28.1.3","lint-staged":"13.2.2","prettier":"3.0.0","ts-jest":"28.0.8","tsup":"7.1.0","typescript":"5.1.6"},"name":"jsx-email"},{"aliases":{},"dependencies":{"react":"^18.2.0"},"name":"@jsx-email/html"},{"aliases":{},"dependencies":{"md-to-react-email":"4.0.0","react":"^18.2.0"},"name":"@jsx-email/markdown"},{"aliases":{},"dependencies":{"@radix-ui/react-slot":"1.0.2","react":"18.2.0"},"name":"@jsx-email/heading"}]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"aliases":{},"dependencies":{"@babel/core":"7.21.8","@babel/preset-react":"7.22.5","@react-email/render":"0.0.6","@types/jest":"29.5.3","@types/react":"18.0.20","@types/react-dom":"18.0.6","babel-jest":"28.1.3","eslint":"8.45.0","eslint-config-shellscape":"^6.0.1","husky":"^8.0.3","jest":"28.1.3","lint-staged":"13.2.2","prettier":"3.0.0","ts-jest":"28.0.8","tsup":"7.1.0","typescript":"5.1.6"},"name":"jsx-email"},{"aliases":{},"dependencies":{"react":"^18.2.0"},"name":"@jsx-email/html"},{"aliases":{},"dependencies":{"react":"^18.2.0"},"name":"@jsx-email/row"},{"aliases":{},"dependencies":{"md-to-react-email":"4.0.0","react":"^18.2.0"},"name":"@jsx-email/markdown"},{"aliases":{},"dependencies":{"@radix-ui/react-slot":"1.0.2","react":"18.2.0"},"name":"@jsx-email/heading"}]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"aliases":{},"dependencies":{"@babel/core":"7.21.8","@babel/preset-react":"7.22.5","@react-email/render":"0.0.6","@types/jest":"29.5.3","@types/react":"18.0.20","@types/react-dom":"18.0.6","babel-jest":"28.1.3","eslint":"8.45.0","eslint-config-shellscape":"^6.0.1","husky":"^8.0.3","jest":"28.1.3","lint-staged":"13.2.2","prettier":"3.0.0","ts-jest":"28.0.8","tsup":"7.1.0","typescript":"5.1.6"},"name":"jsx-email"},{"aliases":{},"dependencies":{"react":"^18.2.0"},"name":"@jsx-email/html"},{"aliases":{},"dependencies":{"@radix-ui/react-slot":"1.0.2","react":"18.2.0"},"name":"@jsx-email/heading"}]

.moon/cache/runReport.json

+1-1
Large diffs are not rendered by default.

.moon/cache/states/depsNode.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"lastHash":"d359b11eb594d24389499b619af18bd3fcd89b6f94dd0ba80d78e81c3aba7b52","lastInstallTime":1693875045042}
1+
{"lastHash":"f5b10df205f9cab1cbe9d4ee852fe4608357e4a8418cb7709c604df08ac40bd5","lastInstallTime":1693878126514}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"exitCode":0,"hash":"","lastRunTime":1693878216146,"target":"jsx-email:lint.js"}

.moon/cache/states/jsx-email/lint.js/stderr.log

Whitespace-only changes.

.moon/cache/states/jsx-email/lint.js/stdout.log

Whitespace-only changes.

.moon/cache/states/jsx-email/snapshot.json

+1-1
Large diffs are not rendered by default.

.moon/cache/states/partialProjectGraph.json

+1-1
Large diffs are not rendered by default.

.moon/cache/states/projects.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"lastHash":"54714cc08d8c0071457fa9f8760fa16f0b65fcd7a57894dc20f5252b299f30d8","projects":{"column":"packages/column","preview":"packages/preview","head":"packages/head","tailwind":"packages/tailwind","react-email":"packages/react-email","button":"packages/button","create-email":"packages/create-email","html":"packages/html","components":"packages/components","hr":"packages/hr","container":"packages/container","img":"packages/img","markdown":"packages/markdown","render":"packages/render","heading":"packages/heading","link":"packages/link","section":"packages/section","body":"packages/body","row":"packages/row","text":"packages/text","font":"packages/font"}}
1+
{"lastHash":"75df404b5cb0b5aef70483c6d84f5f52d85b3b5ce7fa3c39834ab52a3ff24a36","projects":{"column":"packages/column","preview":"packages/preview","head":"packages/head","tailwind":"packages/tailwind","button":"packages/button","html":"packages/html","components":"packages/components","hr":"packages/hr","container":"packages/container","img":"packages/img","markdown":"packages/markdown","render":"packages/render","heading":"packages/heading","link":"packages/link","section":"packages/section","body":"packages/body","jsx-email":".","row":"packages/row","font":"packages/font","text":"packages/text"}}
+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"lastVersions":{},"lastVersionCheckTime":1693875406933}
1+
{"lastVersions":{},"lastVersionCheckTime":1693878214454}

.prettierrc.js

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
module.exports = {
2-
quoteProps: 'consistent',
3-
singleQuote: true,
4-
trailingComma: 'all',
5-
printWidth: 80,
6-
useTabs: false,
7-
bracketSpacing: true,
8-
};
1+
// Note: This file is necessary so that prettier writes which happen in hooks and scripts match the
2+
// same config that we're using from the eslint-config package.
3+
module.exports = require('eslint-config-shellscape/prettier');

moon.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ tasks:
5151
cache: false
5252

5353
lint.js:
54-
command: 'eslint --cache apps infra packages services --ext .js,.ts,.tsx'
54+
command: 'eslint --cache packages --ext .js,.ts,.tsx'
5555
env:
5656
NODE_OPTIONS: '--max-old-space-size=16384'
5757
options:

packages/body/src/body.spec.tsx

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
import { Body } from "./index";
2-
import { render } from "@jsx-email/render";
1+
import { render } from '@jsx-email/render';
32

4-
describe("render", () => {
3+
import { Body } from './index';
4+
5+
describe('render', () => {
56
beforeEach(() => {
67
jest.restoreAllMocks();
78
jest.resetModules();
89
});
910

10-
it("renders the <Body> component", () => {
11+
it('renders the <Body> component', () => {
1112
const actualOutput = render(<Body>Lorem ipsum</Body>);
1213
expect(actualOutput).toMatchInlineSnapshot(
13-
`"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\" \\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\"><body data-id=\\"__react-email-body\\">Lorem ipsum</body>"`,
14+
`"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\" \\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\"><body data-id=\\"__react-email-body\\">Lorem ipsum</body>"`
1415
);
1516
});
1617
});

packages/body/src/body.tsx

+8-18
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,13 @@
1-
import * as React from "react";
1+
import * as React from 'react';
22

3-
type RootProps = React.ComponentPropsWithoutRef<"body">;
3+
type RootProps = React.ComponentPropsWithoutRef<'body'>;
44

55
export interface BodyProps extends RootProps {}
66

7-
export const Body: React.FC<Readonly<BodyProps>> = ({
8-
children,
9-
style,
10-
...props
11-
}) => {
12-
const styleDefault = {
13-
wordSpacing: "normal",
14-
...style,
15-
};
16-
return (
17-
<body {...props} data-id="__react-email-body" style={style}>
18-
{children}
19-
</body>
20-
);
21-
};
7+
export const Body: React.FC<Readonly<BodyProps>> = ({ children, style, ...props }) => (
8+
<body {...props} data-id="__react-email-body" style={style}>
9+
{children}
10+
</body>
11+
);
2212

23-
Body.displayName = "Body";
13+
Body.displayName = 'Body';

packages/body/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./body";
1+
export * from './body';

packages/button/src/button.spec.tsx

+9-10
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
import { Button } from "./index";
2-
import { render } from "@jsx-email/render";
1+
import { render } from '@jsx-email/render';
32

4-
describe("render", () => {
3+
import { Button } from './index';
4+
5+
describe('render', () => {
56
beforeEach(() => {
67
jest.restoreAllMocks();
78
jest.resetModules();
89
});
910

10-
it("renders the <Button> component", () => {
11-
const actualOutput = render(
12-
<Button pX={20} pY={12} href="https://example.com" />,
13-
);
11+
it('renders the <Button> component', () => {
12+
const actualOutput = render(<Button pX={20} pY={12} href="https://example.com" />);
1413
expect(actualOutput).toMatchInlineSnapshot(
15-
`"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\" \\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\"><a href=\\"https://example.com\\" data-id=\\"react-email-button\\" target=\\"_blank\\" style=\\"line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:12px 20px\\"><span><!--[if mso]><i style=\\"letter-spacing: 20px;mso-font-width:-100%;mso-text-raise:18\\" hidden>&nbsp;</i><![endif]--></span><span style=\\"max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:9px\\"></span><span><!--[if mso]><i style=\\"letter-spacing: 20px;mso-font-width:-100%\\" hidden>&nbsp;</i><![endif]--></span></a>"`,
14+
`"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\" \\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\"><a href=\\"https://example.com\\" data-id=\\"react-email-button\\" target=\\"_blank\\" style=\\"line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:12px 20px\\"><span><!--[if mso]><i style=\\"letter-spacing: 20px;mso-font-width:-100%;mso-text-raise:18\\" hidden>&nbsp;</i><![endif]--></span><span style=\\"max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:9px\\"></span><span><!--[if mso]><i style=\\"letter-spacing: 20px;mso-font-width:-100%\\" hidden>&nbsp;</i><![endif]--></span></a>"`
1615
);
1716
});
1817

19-
it("renders the <Button> component with no padding value", () => {
18+
it('renders the <Button> component with no padding value', () => {
2019
const actualOutput = render(<Button href="https://example.com" />);
2120
expect(actualOutput).toMatchInlineSnapshot(
22-
`"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\" \\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\"><a href=\\"https://example.com\\" data-id=\\"react-email-button\\" target=\\"_blank\\" style=\\"line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:0px 0px\\"><span><!--[if mso]><i style=\\"letter-spacing: 0px;mso-font-width:-100%;mso-text-raise:0\\" hidden>&nbsp;</i><![endif]--></span><span style=\\"max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:0\\"></span><span><!--[if mso]><i style=\\"letter-spacing: 0px;mso-font-width:-100%\\" hidden>&nbsp;</i><![endif]--></span></a>"`,
21+
`"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\" \\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\"><a href=\\"https://example.com\\" data-id=\\"react-email-button\\" target=\\"_blank\\" style=\\"line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:0px 0px\\"><span><!--[if mso]><i style=\\"letter-spacing: 0px;mso-font-width:-100%;mso-text-raise:0\\" hidden>&nbsp;</i><![endif]--></span><span style=\\"max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:0\\"></span><span><!--[if mso]><i style=\\"letter-spacing: 0px;mso-font-width:-100%\\" hidden>&nbsp;</i><![endif]--></span></a>"`
2322
);
2423
});
2524
});

packages/button/src/button.tsx

+35-39
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,42 @@
1-
import * as React from "react";
2-
import { pxToPt } from "./utils";
1+
import * as React from 'react';
32

4-
type ButtonElement = React.ElementRef<"a">;
5-
type RootProps = React.ComponentPropsWithoutRef<"a">;
3+
import { pxToPt } from './utils';
4+
5+
type ButtonElement = React.ElementRef<'a'>;
6+
type RootProps = React.ComponentPropsWithoutRef<'a'>;
67

78
export interface ButtonProps extends RootProps {
89
pX?: number;
910
pY?: number;
1011
}
1112

13+
const buttonStyle = (style?: React.CSSProperties & { pX: number; pY: number }) => {
14+
const { pY, pX, ...rest } = style || {};
15+
16+
return {
17+
...rest,
18+
display: 'inline-block',
19+
lineHeight: '100%',
20+
maxWidth: '100%',
21+
padding: `${pY}px ${pX}px`,
22+
textDecoration: 'none'
23+
};
24+
};
25+
26+
const buttonTextStyle = (pY?: number) => {
27+
const paddingY = pY || 0;
28+
29+
return {
30+
display: 'inline-block',
31+
lineHeight: '120%',
32+
maxWidth: '100%',
33+
msoPaddingAlt: '0px',
34+
msoTextRaise: pxToPt(paddingY.toString())
35+
};
36+
};
37+
1238
export const Button = React.forwardRef<ButtonElement, Readonly<ButtonProps>>(
13-
(
14-
{ children, style, pX = 0, pY = 0, target = "_blank", ...props },
15-
forwardedRef,
16-
) => {
39+
({ children, style, pX = 0, pY = 0, target = '_blank', ...props }, forwardedRef) => {
1740
const y = (pY || 0) * 2;
1841
const textRaise = pxToPt(y.toString());
1942

@@ -27,45 +50,18 @@ export const Button = React.forwardRef<ButtonElement, Readonly<ButtonProps>>(
2750
>
2851
<span
2952
dangerouslySetInnerHTML={{
30-
__html: `<!--[if mso]><i style="letter-spacing: ${pX}px;mso-font-width:-100%;mso-text-raise:${textRaise}" hidden>&nbsp;</i><![endif]-->`,
53+
__html: `<!--[if mso]><i style="letter-spacing: ${pX}px;mso-font-width:-100%;mso-text-raise:${textRaise}" hidden>&nbsp;</i><![endif]-->`
3154
}}
3255
/>
3356
<span style={buttonTextStyle(pY)}>{children}</span>
3457
<span
3558
dangerouslySetInnerHTML={{
36-
__html: `<!--[if mso]><i style="letter-spacing: ${pX}px;mso-font-width:-100%" hidden>&nbsp;</i><![endif]-->`,
59+
__html: `<!--[if mso]><i style="letter-spacing: ${pX}px;mso-font-width:-100%" hidden>&nbsp;</i><![endif]-->`
3760
}}
3861
/>
3962
</a>
4063
);
41-
},
64+
}
4265
);
4366

44-
Button.displayName = "Button";
45-
46-
const buttonStyle = (
47-
style?: React.CSSProperties & { pY: number; pX: number },
48-
) => {
49-
const { pY, pX, ...rest } = style || {};
50-
51-
return {
52-
...rest,
53-
lineHeight: "100%",
54-
textDecoration: "none",
55-
display: "inline-block",
56-
maxWidth: "100%",
57-
padding: `${pY}px ${pX}px`,
58-
};
59-
};
60-
61-
const buttonTextStyle = (pY?: number) => {
62-
const paddingY = pY || 0;
63-
64-
return {
65-
maxWidth: "100%",
66-
display: "inline-block",
67-
lineHeight: "120%",
68-
msoPaddingAlt: "0px",
69-
msoTextRaise: pxToPt(paddingY.toString()),
70-
};
71-
};
67+
Button.displayName = 'Button';

packages/button/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./button";
1+
export * from './button';

packages/button/src/utils/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./px-to-pt";
1+
export * from './px-to-pt';

packages/column/src/column.spec.tsx

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
import { Column } from "./index";
2-
import { render } from "@jsx-email/render";
1+
import { render } from '@jsx-email/render';
32

4-
describe("render", () => {
3+
import { Column } from './index';
4+
5+
describe('render', () => {
56
beforeEach(() => {
67
jest.restoreAllMocks();
78
jest.resetModules();
89
});
910

10-
it("renders the <Column> component", () => {
11+
it('renders the <Column> component', () => {
1112
const actualOutput = render(<Column>Lorem ipsum</Column>);
1213
expect(actualOutput).toMatchInlineSnapshot(
13-
`"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\" \\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\"><td data-id=\\"__react-email-column\\">Lorem ipsum</td>"`,
14+
`"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\" \\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\"><td data-id=\\"__react-email-column\\">Lorem ipsum</td>"`
1415
);
1516
});
1617
});

packages/column/src/column.tsx

+9-16
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,16 @@
1-
import * as React from "react";
1+
import * as React from 'react';
22

3-
type ColumnElement = React.ElementRef<"td">;
4-
type RootProps = React.ComponentPropsWithoutRef<"td">;
3+
type ColumnElement = React.ElementRef<'td'>;
4+
type RootProps = React.ComponentPropsWithoutRef<'td'>;
55

66
export interface ColumnProps extends RootProps {}
77

88
export const Column = React.forwardRef<ColumnElement, Readonly<ColumnProps>>(
9-
({ children, style, ...props }, forwardedRef) => {
10-
return (
11-
<td
12-
{...props}
13-
ref={forwardedRef}
14-
data-id="__react-email-column"
15-
style={style}
16-
>
17-
{children}
18-
</td>
19-
);
20-
},
9+
({ children, style, ...props }, forwardedRef) => (
10+
<td {...props} ref={forwardedRef} data-id="__react-email-column" style={style}>
11+
{children}
12+
</td>
13+
)
2114
);
2215

23-
Column.displayName = "Column";
16+
Column.displayName = 'Column';

packages/column/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./column";
1+
export * from './column';

0 commit comments

Comments
 (0)