@react-email/ui 6.8.0 → 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.
Files changed (80) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/diagnostics/route-bundle-stats.json +10 -9
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  14. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/page/server-reference-manifest.json +1 -1
  16. package/.next/server/app/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/preview/[...slug]/page/server-reference-manifest.json +8 -8
  18. package/.next/server/app/preview/[...slug]/page.js +5 -4
  19. package/.next/server/app/preview/[...slug]/page.js.nft.json +1 -1
  20. package/.next/server/app/preview/[...slug]/page_client-reference-manifest.js +1 -1
  21. 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
  22. package/.next/server/chunks/ssr/0kci_next_dist_esm_build_templates_app-page_13jevt-.js.map +1 -0
  23. package/.next/server/chunks/ssr/[root-of-the-server]__0jx5d~g._.js +2 -2
  24. package/.next/server/chunks/ssr/[root-of-the-server]__0k6754k._.js +1 -1
  25. package/.next/server/chunks/ssr/[root-of-the-server]__0k6754k._.js.map +1 -1
  26. package/.next/server/chunks/ssr/{[root-of-the-server]__0d.h7dp._.js → [root-of-the-server]__13sdo3r._.js} +2 -2
  27. package/.next/server/chunks/ssr/_03liear._.js +1 -1
  28. package/.next/server/chunks/ssr/_03liear._.js.map +1 -1
  29. package/.next/server/chunks/ssr/_06p~r0t._.js +1 -1
  30. package/.next/server/chunks/ssr/_06p~r0t._.js.map +1 -1
  31. package/.next/server/chunks/ssr/_0au~b4w._.js +1 -1
  32. package/.next/server/chunks/ssr/_0au~b4w._.js.map +1 -1
  33. package/.next/server/chunks/ssr/_0bb37hq._.js +1 -1
  34. package/.next/server/chunks/ssr/_0bb37hq._.js.map +1 -1
  35. package/.next/server/chunks/ssr/_0jzzir7._.js +1 -1
  36. package/.next/server/chunks/ssr/_0jzzir7._.js.map +1 -1
  37. package/.next/server/chunks/ssr/_0o5084b._.js +5 -5
  38. package/.next/server/chunks/ssr/_0o5084b._.js.map +1 -1
  39. package/.next/server/chunks/ssr/_0z2_2b7._.js +1 -1
  40. package/.next/server/chunks/ssr/_0z2_2b7._.js.map +1 -1
  41. package/.next/server/chunks/ssr/packages_ui_src_0.ov~_x._.js +3 -0
  42. package/.next/server/chunks/ssr/packages_ui_src_0.ov~_x._.js.map +1 -0
  43. package/.next/server/chunks/ssr/packages_ui_src_11mz0xt._.js +3 -0
  44. package/.next/server/chunks/ssr/packages_ui_src_11mz0xt._.js.map +1 -0
  45. package/.next/server/middleware-build-manifest.js +3 -3
  46. package/.next/server/pages/500.html +1 -1
  47. package/.next/server/server-reference-manifest.js +1 -1
  48. package/.next/server/server-reference-manifest.json +9 -9
  49. package/.next/static/chunks/{0xfhv_nejv2yt.js → 0.__jzgiil6q7.js} +1 -1
  50. package/.next/static/chunks/00ecsosfoo~be.css +3 -0
  51. package/.next/static/chunks/{15~kc67eqdve8.js → 0cr8lx05fcstc.js} +1 -1
  52. package/.next/static/chunks/0nhnu1wkjtfwe.js +1 -0
  53. package/.next/static/chunks/{0m-l5t15j5bnl.js → 0ntsvdyzr-1u3.js} +1 -1
  54. package/.next/static/chunks/0owottqfmsjwp.js +42 -0
  55. package/.next/trace +1 -1
  56. package/.next/trace-build +1 -1
  57. package/.next/types/routes.d.ts +3 -1
  58. package/.next/types/validator.ts +9 -0
  59. package/package.json +2 -2
  60. package/src/app/preview/[...slug]/preview.tsx +126 -104
  61. package/src/app/preview/layout.tsx +9 -0
  62. package/src/components/code.tsx +2 -2
  63. package/src/components/icons/icon-panel-right.tsx +19 -0
  64. package/src/components/json-editor.tsx +71 -0
  65. package/src/components/preview-props-editor.tsx +101 -0
  66. package/src/components/preview-props-panel.tsx +31 -0
  67. package/src/components/toolbar/copy-for-ai.tsx +3 -3
  68. package/src/components/toolbar/toolbar-button.tsx +2 -2
  69. package/src/components/toolbar.tsx +231 -65
  70. package/src/components/topbar/props-panel-toggle.tsx +31 -0
  71. package/src/contexts/props-panel.tsx +61 -0
  72. package/src/hooks/use-hot-reload.ts +11 -10
  73. package/.next/server/chunks/ssr/0kci_next_dist_esm_build_templates_app-page_0o.jt0x.js.map +0 -1
  74. package/.next/static/chunks/0l15-vshddb6t.css +0 -3
  75. package/.next/static/chunks/0o7gbl8p~22d1.js +0 -42
  76. package/src/components/toolbar/preview-props-editor.tsx +0 -102
  77. /package/.next/server/chunks/ssr/{[root-of-the-server]__0d.h7dp._.js.map → [root-of-the-server]__13sdo3r._.js.map} +0 -0
  78. /package/.next/static/{RcXkYVVpqLeGe0HK28j4o → c8jFxxcwBv319fqx4lN5X}/_buildManifest.js +0 -0
  79. /package/.next/static/{RcXkYVVpqLeGe0HK28j4o → c8jFxxcwBv319fqx4lN5X}/_clientMiddlewareManifest.js +0 -0
  80. /package/.next/static/{RcXkYVVpqLeGe0HK28j4o → 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&apos;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
- };