From bc68071b0a6198cb37d46971a73003c679384c8a Mon Sep 17 00:00:00 2001 From: gabriel miranda Date: Wed, 19 Nov 2025 13:26:55 -0300 Subject: [PATCH] feat(web): wrap tailwind copy-paste component code with --- .../components/component-code-view.spec.tsx | 61 +++++++++++++++++++ .../src/components/component-code-view.tsx | 11 ++++ 2 files changed, 72 insertions(+) create mode 100644 apps/web/src/components/component-code-view.spec.tsx diff --git a/apps/web/src/components/component-code-view.spec.tsx b/apps/web/src/components/component-code-view.spec.tsx new file mode 100644 index 0000000000..7a8b768149 --- /dev/null +++ b/apps/web/src/components/component-code-view.spec.tsx @@ -0,0 +1,61 @@ +import { wrapWithTailwind } from './component-code-view'; + +const code = `
+
+ + What's new + + + Versatile Comfort + + + Experience ultimate comfort and versatility with our furniture + collection, designed to adapt to your ever-changing needs. + + + Read more + +
+
+ An aesthetic picture taken of an Iphone, flowers, glasses and a card that reads 'Gucci, bloom' coming out of a leathered bag with a ziper +
+
`; + +test('wrapWithTailwind()', () => { + expect(wrapWithTailwind(code)).toMatchInlineSnapshot(` + " +
+
+ + What's new + + + Versatile Comfort + + + Experience ultimate comfort and versatility with our furniture + collection, designed to adapt to your ever-changing needs. + + + Read more + +
+
+ An aesthetic picture taken of an Iphone, flowers, glasses and a card that reads 'Gucci, bloom' coming out of a leathered bag with a ziper +
+
+
" + `); +}); diff --git a/apps/web/src/components/component-code-view.tsx b/apps/web/src/components/component-code-view.tsx index 6e90043531..154285fa55 100644 --- a/apps/web/src/components/component-code-view.tsx +++ b/apps/web/src/components/component-code-view.tsx @@ -15,6 +15,12 @@ import { TabTrigger } from './tab-trigger'; type ReactCodeVariant = Exclude; +export function wrapWithTailwind(jsx: string) { + return ` +${jsx.replaceAll(/[^\n\r]*(\n|\r|\r\n)?/g, (match) => ` ${match}`)} +`; +} + export function ComponentCodeView({ component, }: { @@ -51,6 +57,11 @@ export function ComponentCodeView({ Object.keys(allReactEmailComponents), ); + if (selectedReactCodeVariant === 'tailwind') { + importsReactEmail.push('Tailwind'); + code = wrapWithTailwind(code); + } + let importStatements = ''; if (importsReactEmail.length > 0) {