@react-email/ui 6.8.1 → 6.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/diagnostics/route-bundle-stats.json +10 -9
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/preview/[...slug]/page/server-reference-manifest.json +8 -8
- package/.next/server/app/preview/[...slug]/page.js +5 -4
- package/.next/server/app/preview/[...slug]/page.js.nft.json +1 -1
- package/.next/server/app/preview/[...slug]/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/ssr/{0kci_next_dist_esm_build_templates_app-page_0o.jt0x.js → 0kci_next_dist_esm_build_templates_app-page_13jevt-.js} +3 -3
- package/.next/server/chunks/ssr/0kci_next_dist_esm_build_templates_app-page_13jevt-.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0jx5d~g._.js +2 -2
- package/.next/server/chunks/ssr/[root-of-the-server]__0k6754k._.js +1 -1
- package/.next/server/chunks/ssr/[root-of-the-server]__0k6754k._.js.map +1 -1
- package/.next/server/chunks/ssr/{[root-of-the-server]__0d.h7dp._.js → [root-of-the-server]__13sdo3r._.js} +2 -2
- package/.next/server/chunks/ssr/_03liear._.js +1 -1
- package/.next/server/chunks/ssr/_03liear._.js.map +1 -1
- package/.next/server/chunks/ssr/_06p~r0t._.js +3 -3
- package/.next/server/chunks/ssr/_06p~r0t._.js.map +1 -1
- package/.next/server/chunks/ssr/_06x5yf8._.js +1 -1
- package/.next/server/chunks/ssr/_0au~b4w._.js +1 -1
- package/.next/server/chunks/ssr/_0au~b4w._.js.map +1 -1
- package/.next/server/chunks/ssr/_0bb37hq._.js +2 -2
- package/.next/server/chunks/ssr/_0bb37hq._.js.map +1 -1
- package/.next/server/chunks/ssr/_0jzzir7._.js +1 -1
- package/.next/server/chunks/ssr/_0jzzir7._.js.map +1 -1
- package/.next/server/chunks/ssr/_0o5084b._.js +5 -5
- package/.next/server/chunks/ssr/_0o5084b._.js.map +1 -1
- package/.next/server/chunks/ssr/_0z2_2b7._.js +1 -1
- package/.next/server/chunks/ssr/_0z2_2b7._.js.map +1 -1
- package/.next/server/chunks/ssr/packages_ui_src_0.ov~_x._.js +3 -0
- package/.next/server/chunks/ssr/packages_ui_src_0.ov~_x._.js.map +1 -0
- package/.next/server/chunks/ssr/packages_ui_src_11mz0xt._.js +3 -0
- package/.next/server/chunks/ssr/packages_ui_src_11mz0xt._.js.map +1 -0
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +9 -9
- package/.next/static/chunks/{08l40kl5rf2s2.js → 0.__jzgiil6q7.js} +1 -1
- package/.next/static/chunks/00ecsosfoo~be.css +3 -0
- package/.next/static/chunks/{15~kc67eqdve8.js → 0cr8lx05fcstc.js} +1 -1
- package/.next/static/chunks/0nhnu1wkjtfwe.js +1 -0
- package/.next/static/chunks/{0m-l5t15j5bnl.js → 0ntsvdyzr-1u3.js} +1 -1
- package/.next/static/chunks/0owottqfmsjwp.js +42 -0
- package/.next/trace +1 -1
- package/.next/trace-build +1 -1
- package/.next/types/routes.d.ts +3 -1
- package/.next/types/validator.ts +9 -0
- package/package.json +2 -2
- package/src/app/preview/[...slug]/preview.tsx +126 -104
- package/src/app/preview/layout.tsx +9 -0
- package/src/components/code.tsx +2 -2
- package/src/components/icons/icon-panel-right.tsx +19 -0
- package/src/components/json-editor.tsx +71 -0
- package/src/components/preview-props-editor.tsx +101 -0
- package/src/components/preview-props-panel.tsx +31 -0
- package/src/components/toolbar/copy-for-ai.tsx +0 -1
- package/src/components/toolbar.tsx +11 -31
- package/src/components/topbar/props-panel-toggle.tsx +31 -0
- package/src/contexts/props-panel.tsx +61 -0
- package/src/hooks/use-hot-reload.ts +11 -10
- package/.next/server/chunks/ssr/0kci_next_dist_esm_build_templates_app-page_0o.jt0x.js.map +0 -1
- package/.next/static/chunks/093u7_u99n-lp.css +0 -3
- package/.next/static/chunks/0nvn3s74q.6bx.js +0 -42
- package/src/components/toolbar/preview-props-editor.tsx +0 -102
- /package/.next/server/chunks/ssr/{[root-of-the-server]__0d.h7dp._.js.map → [root-of-the-server]__13sdo3r._.js.map} +0 -0
- /package/.next/static/{-9MO25vpro82XlxO0t34A → c8jFxxcwBv319fqx4lN5X}/_buildManifest.js +0 -0
- /package/.next/static/{-9MO25vpro82XlxO0t34A → c8jFxxcwBv319fqx4lN5X}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{-9MO25vpro82XlxO0t34A → c8jFxxcwBv319fqx4lN5X}/_ssgManifest.js +0 -0
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import * as React from 'react';
|
|
4
|
-
import { useDebouncedCallback } from 'use-debounce';
|
|
5
|
-
import { usePreviewContext } from '../../contexts/preview';
|
|
6
|
-
import { cn } from '../../utils';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* JSON editor for the props the preview renders with. Edits apply live and
|
|
10
|
-
* only affect the preview; the template's `PreviewProps` are not modified.
|
|
11
|
-
*/
|
|
12
|
-
export const PreviewPropsEditor = () => {
|
|
13
|
-
const {
|
|
14
|
-
renderedEmailMetadata,
|
|
15
|
-
previewPropsOverride,
|
|
16
|
-
setPreviewPropsOverride,
|
|
17
|
-
} = usePreviewContext();
|
|
18
|
-
|
|
19
|
-
const renderedPropsJson = JSON.stringify(
|
|
20
|
-
renderedEmailMetadata?.previewProps ?? {},
|
|
21
|
-
null,
|
|
22
|
-
2,
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
const [value, setValue] = React.useState(renderedPropsJson);
|
|
26
|
-
const [parseError, setParseError] = React.useState<string | undefined>(
|
|
27
|
-
undefined,
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
const hasOverride = previewPropsOverride !== undefined;
|
|
31
|
-
|
|
32
|
-
// Without an override active, the rendered props follow the template file
|
|
33
|
-
// (initial load, hot reload, reset), so the editor mirrors them.
|
|
34
|
-
React.useEffect(() => {
|
|
35
|
-
if (!hasOverride) {
|
|
36
|
-
setValue(renderedPropsJson);
|
|
37
|
-
setParseError(undefined);
|
|
38
|
-
}
|
|
39
|
-
}, [hasOverride, renderedPropsJson]);
|
|
40
|
-
|
|
41
|
-
const applyValue = useDebouncedCallback((newValue: string) => {
|
|
42
|
-
try {
|
|
43
|
-
const parsed = JSON.parse(newValue) as unknown;
|
|
44
|
-
if (
|
|
45
|
-
parsed === null ||
|
|
46
|
-
typeof parsed !== 'object' ||
|
|
47
|
-
Array.isArray(parsed)
|
|
48
|
-
) {
|
|
49
|
-
setParseError('Props must be a JSON object');
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
setParseError(undefined);
|
|
53
|
-
setPreviewPropsOverride(parsed as Record<string, unknown>);
|
|
54
|
-
} catch (exception) {
|
|
55
|
-
setParseError((exception as Error).message);
|
|
56
|
-
}
|
|
57
|
-
}, 400);
|
|
58
|
-
|
|
59
|
-
return (
|
|
60
|
-
<div className="flex h-full flex-col gap-2 pb-4">
|
|
61
|
-
<div className="flex items-center justify-between gap-4">
|
|
62
|
-
<p className="text-slate-11">
|
|
63
|
-
Edit the JSON props this preview renders with. Changes apply live and
|
|
64
|
-
do not modify the template's <code>PreviewProps</code>.
|
|
65
|
-
</p>
|
|
66
|
-
<button
|
|
67
|
-
className={cn(
|
|
68
|
-
'shrink-0 rounded-md border border-slate-6 px-2 py-1 text-slate-11 transition-colors',
|
|
69
|
-
'hover:border-slate-8 hover:text-slate-12',
|
|
70
|
-
'disabled:opacity-40 disabled:hover:border-slate-6 disabled:hover:text-slate-11',
|
|
71
|
-
)}
|
|
72
|
-
disabled={!hasOverride}
|
|
73
|
-
onClick={() => {
|
|
74
|
-
applyValue.cancel();
|
|
75
|
-
setPreviewPropsOverride(undefined);
|
|
76
|
-
}}
|
|
77
|
-
type="button"
|
|
78
|
-
>
|
|
79
|
-
Reset to defaults
|
|
80
|
-
</button>
|
|
81
|
-
</div>
|
|
82
|
-
<textarea
|
|
83
|
-
aria-invalid={parseError !== undefined}
|
|
84
|
-
aria-label="Preview props JSON"
|
|
85
|
-
className={cn(
|
|
86
|
-
'grow resize-none rounded-md border border-slate-6 bg-transparent p-2 font-mono text-xs text-slate-12 outline-none',
|
|
87
|
-
'focus:border-slate-8',
|
|
88
|
-
parseError !== undefined && 'border-red-9 focus:border-red-9',
|
|
89
|
-
)}
|
|
90
|
-
onChange={(event) => {
|
|
91
|
-
setValue(event.currentTarget.value);
|
|
92
|
-
applyValue(event.currentTarget.value);
|
|
93
|
-
}}
|
|
94
|
-
spellCheck={false}
|
|
95
|
-
value={value}
|
|
96
|
-
/>
|
|
97
|
-
{parseError !== undefined ? (
|
|
98
|
-
<p className="text-red-11">{parseError}</p>
|
|
99
|
-
) : null}
|
|
100
|
-
</div>
|
|
101
|
-
);
|
|
102
|
-
};
|
|
File without changes
|
|
File without changes
|
/package/.next/static/{-9MO25vpro82XlxO0t34A → c8jFxxcwBv319fqx4lN5X}/_clientMiddlewareManifest.js
RENAMED
|
File without changes
|
|
File without changes
|