@react-email/ui 6.9.2 → 6.9.3

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 (105) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +5 -6
  3. package/.next/diagnostics/route-bundle-stats.json +15 -18
  4. package/.next/fallback-build-manifest.json +3 -3
  5. package/.next/prerender-manifest.json +4 -4
  6. package/.next/server/app/_global-error/page/build-manifest.json +2 -3
  7. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  8. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/server/app/_not-found/page/build-manifest.json +2 -3
  15. package/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  16. package/.next/server/app/_not-found/page.js +1 -1
  17. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  18. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/page/build-manifest.json +2 -3
  20. package/.next/server/app/page/server-reference-manifest.json +1 -1
  21. package/.next/server/app/page.js +2 -2
  22. package/.next/server/app/page.js.nft.json +1 -1
  23. package/.next/server/app/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/preview/[...slug]/page/build-manifest.json +2 -3
  25. package/.next/server/app/preview/[...slug]/page/server-reference-manifest.json +8 -8
  26. package/.next/server/app/preview/[...slug]/page.js +3 -3
  27. package/.next/server/app/preview/[...slug]/page.js.nft.json +1 -1
  28. package/.next/server/app/preview/[...slug]/page_client-reference-manifest.js +1 -1
  29. package/.next/server/chunks/ssr/0vvp_@swc_helpers_cjs__interop_require_default_cjs_0l5yet_._.js +3 -0
  30. package/.next/server/chunks/ssr/0vvp_@swc_helpers_cjs__interop_require_default_cjs_0l5yet_._.js.map +1 -0
  31. package/.next/server/chunks/ssr/[root-of-the-server]__01fa6gd._.js +3 -0
  32. package/.next/server/chunks/ssr/[root-of-the-server]__01fa6gd._.js.map +1 -0
  33. package/.next/server/chunks/ssr/[root-of-the-server]__0jhwudd._.js +2 -2
  34. package/.next/server/chunks/ssr/{[root-of-the-server]__13ikv9r._.js → [root-of-the-server]__0v3hvp0._.js} +2 -2
  35. package/.next/server/chunks/ssr/[root-of-the-server]__0v3hvp0._.js.map +1 -0
  36. package/.next/server/chunks/ssr/{[root-of-the-server]__0cys_sj._.js → [root-of-the-server]__0w52y66._.js} +2 -2
  37. package/.next/server/chunks/ssr/[root-of-the-server]__0w52y66._.js.map +1 -0
  38. package/.next/server/chunks/ssr/{[root-of-the-server]__0_rkij2._.js → [root-of-the-server]__13647l6._.js} +2 -2
  39. package/.next/server/chunks/ssr/[root-of-the-server]__1gu4kfq._.js +3 -0
  40. package/.next/server/chunks/ssr/[root-of-the-server]__1gu4kfq._.js.map +1 -0
  41. package/.next/server/chunks/ssr/[root-of-the-server]__1lf0rrz._.js +160 -0
  42. package/.next/server/chunks/ssr/[root-of-the-server]__1lf0rrz._.js.map +1 -0
  43. package/.next/server/chunks/ssr/{[root-of-the-server]__0cr2yja._.js → [root-of-the-server]__1pl6cgf._.js} +1 -1
  44. package/.next/server/chunks/ssr/_06rdle6._.js +1 -1
  45. package/.next/server/chunks/ssr/_06rdle6._.js.map +1 -1
  46. package/.next/server/chunks/ssr/_070q1tt._.js +1 -1
  47. package/.next/server/chunks/ssr/_070q1tt._.js.map +1 -1
  48. package/.next/server/chunks/ssr/_0iztjpv._.js +1 -1
  49. package/.next/server/chunks/ssr/_0iztjpv._.js.map +1 -1
  50. package/.next/server/chunks/ssr/_0odge9f._.js +2 -2
  51. package/.next/server/chunks/ssr/_0odge9f._.js.map +1 -1
  52. package/.next/server/chunks/ssr/_14fryvc._.js +2 -2
  53. package/.next/server/chunks/ssr/_14fryvc._.js.map +1 -1
  54. package/.next/server/chunks/ssr/_1kmmici._.js +1 -1
  55. package/.next/server/chunks/ssr/_1kmmici._.js.map +1 -1
  56. package/.next/server/chunks/ssr/{node_modules__pnpm_0llhc4v._.js → node_modules__pnpm_0c8h56k._.js} +2 -2
  57. package/.next/server/chunks/ssr/node_modules__pnpm_0c8h56k._.js.map +1 -0
  58. package/.next/server/chunks/ssr/packages_ui_src_0h7q5rq._.js +7 -0
  59. package/.next/server/chunks/ssr/packages_ui_src_0h7q5rq._.js.map +1 -0
  60. package/.next/server/chunks/ssr/packages_ui_src_0k1vxrv._.js +7 -0
  61. package/.next/server/chunks/ssr/packages_ui_src_0k1vxrv._.js.map +1 -0
  62. package/.next/server/middleware-build-manifest.js +5 -6
  63. package/.next/server/pages/500.html +1 -1
  64. package/.next/server/server-reference-manifest.js +1 -1
  65. package/.next/server/server-reference-manifest.json +9 -9
  66. package/.next/static/chunks/{43pfi9jc61bl-.js → 1074n-guv52r0.js} +2 -2
  67. package/.next/static/chunks/11ig5v0klmdqv.js +22 -0
  68. package/.next/static/chunks/17bqo4uc7c7vt.js +9 -0
  69. package/.next/static/chunks/{1jzl5dvwbwp_k.js → 29564ab2ilk61.js} +2 -10
  70. package/.next/static/chunks/turbopack-2yf73s_vo1v6g.js +1 -0
  71. package/.next/trace +1 -1
  72. package/.next/trace-build +1 -1
  73. package/package.json +2 -2
  74. package/src/app/layout.tsx +2 -1
  75. package/src/app/page.tsx +26 -29
  76. package/src/app/preview/[...slug]/page.tsx +15 -18
  77. package/src/components/shell.tsx +10 -3
  78. package/src/components/sidebar/file-tree-directory.tsx +7 -0
  79. package/src/components/sidebar/sidebar.tsx +6 -2
  80. package/.next/server/chunks/ssr/17n9_next_dist_client_components_server-async-storage_0mk9pov.js +0 -3
  81. package/.next/server/chunks/ssr/17n9_next_dist_client_components_server-async-storage_0mk9pov.js.map +0 -1
  82. package/.next/server/chunks/ssr/[root-of-the-server]__0cys_sj._.js.map +0 -1
  83. package/.next/server/chunks/ssr/[root-of-the-server]__0ir6ce9._.js +0 -3
  84. package/.next/server/chunks/ssr/[root-of-the-server]__0ir6ce9._.js.map +0 -1
  85. package/.next/server/chunks/ssr/[root-of-the-server]__0m_3861._.js +0 -4
  86. package/.next/server/chunks/ssr/[root-of-the-server]__0m_3861._.js.map +0 -1
  87. package/.next/server/chunks/ssr/[root-of-the-server]__0udgrs1._.js +0 -3
  88. package/.next/server/chunks/ssr/[root-of-the-server]__0udgrs1._.js.map +0 -1
  89. package/.next/server/chunks/ssr/[root-of-the-server]__13ikv9r._.js.map +0 -1
  90. package/.next/server/chunks/ssr/_0m0kc0_._.js +0 -163
  91. package/.next/server/chunks/ssr/_0m0kc0_._.js.map +0 -1
  92. package/.next/server/chunks/ssr/_0q9ycte._.js +0 -163
  93. package/.next/server/chunks/ssr/_0q9ycte._.js.map +0 -1
  94. package/.next/server/chunks/ssr/node_modules__pnpm_08tmv5a._.js +0 -3
  95. package/.next/server/chunks/ssr/node_modules__pnpm_08tmv5a._.js.map +0 -1
  96. package/.next/server/chunks/ssr/node_modules__pnpm_0llhc4v._.js.map +0 -1
  97. package/.next/static/chunks/027pt-9-hlg6x.js +0 -22
  98. package/.next/static/chunks/2gkd1-tli0axa.js +0 -1
  99. package/.next/static/chunks/3ynf1lct058br.js +0 -1
  100. package/.next/static/chunks/turbopack-2j6s_670_ey7d.js +0 -1
  101. /package/.next/server/chunks/ssr/{[root-of-the-server]__0_rkij2._.js.map → [root-of-the-server]__13647l6._.js.map} +0 -0
  102. /package/.next/server/chunks/ssr/{[root-of-the-server]__0cr2yja._.js.map → [root-of-the-server]__1pl6cgf._.js.map} +0 -0
  103. /package/.next/static/{8Ho3WC7vZUZ-2eKXvbUWf → CA1Qu7TN6sX-l50jycBJF}/_buildManifest.js +0 -0
  104. /package/.next/static/{8Ho3WC7vZUZ-2eKXvbUWf → CA1Qu7TN6sX-l50jycBJF}/_clientMiddlewareManifest.js +0 -0
  105. /package/.next/static/{8Ho3WC7vZUZ-2eKXvbUWf → CA1Qu7TN6sX-l50jycBJF}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,{otherChunks:["static/chunks/3cv_n0mxa8_oo.js","static/chunks/11ig5v0klmdqv.js","static/chunks/1ts-k6w8iognw.js"],runtimeModuleIds:[22248]}]),(()=>{let e;if(!Array.isArray(globalThis.TURBOPACK))return;var t,r="/_next/",n=function(){if(null!=self.TURBOPACK_ASSET_SUFFIX)return self.TURBOPACK_ASSET_SUFFIX;let e=document?.currentScript?.getAttribute?.("src")??"",t=e.indexOf("?");return t>=0?e.slice(t):""}(),o=((t=o||{})[t.Runtime=0]="Runtime",t[t.Parent=1]="Parent",t[t.Update=2]="Update",t);let l=new WeakMap;function i(e,t){this.m=e,this.e=t}let u=i.prototype,s=Object.prototype.hasOwnProperty,c="u">typeof Symbol&&Symbol.toStringTag;function a(e,t,r){s.call(e,t)||Object.defineProperty(e,t,r)}function f(e,t){let r=e[t];return r||(r=p(t),e[t]=r),r}function p(e){return{exports:{},error:void 0,id:e,namespaceObject:void 0}}function d(e,t,r){a(e,"__esModule",{value:!0}),c&&a(e,c,{value:"Module"});let n=0;for(;n<t.length;){let r=t[n++],o=t[n++];if("number"==typeof o)if(0===o)a(e,r,{value:t[n++],enumerable:!0,writable:!1});else throw Error(`unexpected tag: ${o}`);else"function"==typeof t[n]?a(e,r,{get:o,set:t[n++],enumerable:!0}):a(e,r,{get:o,enumerable:!0})}r||Object.seal(e)}function h(e,t){(null!=t?f(this.c,t):this.m).exports=e}u.s=function(e,t,r){let n,o;null!=t?o=(n=f(this.c,t)).exports:(n=this.m,o=this.e),n.namespaceObject=o,d(o,e,r)},u.j=function(e,t){let r,n;null!=t?n=(r=f(this.c,t)).exports:(r=this.m,n=this.e);let o=function(e,t){let r=l.get(e);if(!r){l.set(e,r=[]);let n=e=>{if("default"!==e){for(let t of r)if(s.call(t,e))return t}};e.exports=e.namespaceObject=new Proxy(t,{get(e,t){if(s.call(e,t)||"default"===t||"__esModule"===t)return Reflect.get(e,t);let r=n(t);return r&&Reflect.get(r,t)},set:()=>!1,defineProperty:()=>!1,deleteProperty:()=>!1,has:(e,t)=>!!Reflect.has(e,t)||"default"!==t&&"__esModule"!==t&&void 0!==n(t),ownKeys(e){let t=Reflect.ownKeys(e);for(let e of r)for(let r of Reflect.ownKeys(e))"default"===r||t.includes(r)||t.push(r);return t},getOwnPropertyDescriptor(e,t){let r=Reflect.getOwnPropertyDescriptor(e,t);if(r||"default"===t||"__esModule"===t)return r;let o=n(t);if(o)return{enumerable:!0,configurable:!0,get:()=>Reflect.get(o,t)}}})}return r}(r,n);"object"==typeof e&&null!==e&&o.push(e)},u.v=h,u.n=function(e,t){let r;(r=null!=t?f(this.c,t):this.m).exports=r.namespaceObject=e};let m=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,y=[null,m({}),m([]),m(m)];function g(e,t,r){let n=[],o=-1;for(let t=e;("object"==typeof t||"function"==typeof t)&&!y.includes(t);t=m(t))for(let r of Object.getOwnPropertyNames(t))n.push(r,function(e,t){return()=>e[t]}(e,r)),-1===o&&"default"===r&&(o=n.length-1);return r&&o>=0||(o>=0?n.splice(o,1,0,e):n.push("default",0,e)),d(t,n),t}function b(e){let t=K(e,this.m);if(t.namespaceObject)return t.namespaceObject;let r=t.exports;return t.namespaceObject=g(r,"function"==typeof r?function(...e){return r.apply(this,e)}:Object.create(null),r&&r.__esModule)}function O(e){let t=e.indexOf("#");-1!==t&&(e=e.substring(0,t));let r=e.indexOf("?");return -1!==r&&(e=e.substring(0,r)),e}u.i=b,u.A=function(e){return this.r(e)(b.bind(this))},u.t="function"==typeof require?require:function(){throw Error("Unexpected use of runtime require")},u.r=function(e){return K(e,this.m).exports},u.f=function(e){function t(t){if(t=O(t),s.call(e,t))return e[t].module();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r}return t.keys=()=>Object.keys(e),t.resolve=t=>{if(t=O(t),s.call(e,t))return e[t].id();let r=Error(`Cannot find module '${t}'`);throw r.code="MODULE_NOT_FOUND",r},t.import=async e=>await t(e),t};let w=function(e){let t=new URL(e,"x:/"),r={};for(let e in t)r[e]=t[e];for(let t in r.href=e,r.pathname=e.replace(/[?#].*/,""),r.origin=r.protocol="",r.toString=r.toJSON=(...t)=>e,r)Object.defineProperty(this,t,{enumerable:!0,configurable:!0,value:r[t]})};function k(e,t){throw Error(`Invariant: ${t(e)}`)}w.prototype=URL.prototype,u.U=w,u.z=function(e){throw Error("dynamic usage of require is not supported")},u.g=globalThis;let v=i.prototype,R=new Map;u.M=R;let U=new Map,_=new Map,$=new Map;async function j(e,t,r){let n;if("string"==typeof r)return function(e,t,r){return T(e,t,r)}(e,t,E(r));let o=r.included||[],l=o.map(e=>!!R.has(e)||U.get(e));if(l.length>0&&l.every(e=>e))return void await Promise.all(l);for(let l of(n=T(e,t,E(r.path)),o))U.has(l)||U.set(l,n);await n}v.l=function(e){return j(o.Parent,this.m.id,e)};let P=Promise.resolve(void 0),C=new WeakMap;function T(t,r,n){let l=e.loadChunkCached(t,n),i=C.get(l);if(void 0===i){let e=C.set.bind(C,l,P);i=l.then(e).catch(e=>{let l;switch(t){case o.Runtime:l=`as a runtime dependency of chunk ${r}`;break;case o.Parent:l=`from module ${r}`;break;case o.Update:l="from an HMR update";break;default:k(t,e=>`Unknown source type: ${e}`)}let i=Error(`Failed to load chunk ${n} ${l}${e?`: ${e}`:""}`,e?{cause:e}:void 0);throw i.name="ChunkLoadError",i}),C.set(l,i)}return i}v.L=function(e){var t,r;return t=o.Parent,r=this.m.id,T(t,r,e)};v.R=function(e){let t=this.r(e);return t?.default??t},v.P=function(e){return`/ROOT/${e??""}`},v.F=function(e){return e?`file:///ROOT/${e.split("/").map(encodeURIComponent).join("/")}`:"file:///ROOT/"},v.q=function(e,t){h.call(this,`${e}${n}`,t)};let A=/[^A-Za-z0-9\-_.!~*'()/]/;function E(e,t=r){let o=A.test(e)?e.split("/").map(encodeURIComponent).join("/"):e;return`${t}${o}${n}`}function M(e,t){let r,n=e.indexOf("?");if(-1!==n)r=n;else{let t=e.indexOf("#");r=-1!==t?t:e.length}return r>=t.length&&e.startsWith(t,r-t.length)}v.b=r,v.X=n,v.h=E;function S(e){return M(e,".css")}let x={};u.c=x;let K=(e,t)=>{let r=x[e];if(r){if(r.error)throw r.error;return r}return N(e,o.Parent,t.id)};function N(e,t,r){let n=R.get(e);if("function"!=typeof n)throw Error(function(e,t,r){let n;switch(t){case 0:n=`as a runtime entry of chunk ${r}`;break;case 1:n=`because it was required from module ${r}`;break;case 2:n="because of an HMR update";break;default:k(t,e=>`Unknown source type: ${e}`)}return`Module ${e} was instantiated ${n}, but the module factory is not available.`}(e,t,r));let o=p(e),l=o.exports;x[e]=o;let u=new i(o,l);try{n(u,o,l)}catch(e){throw o.error=e,e}return o.namespaceObject&&o.exports!==o.namespaceObject&&g(o.exports,o.namespaceObject),o}function L(t){let r;if(!Array.isArray(t))return e.registerChunk(void 0,t);let n=function(e){if("string"==typeof e)return e;if(e)return{src:e.getAttribute("src")};if("u">typeof TURBOPACK_NEXT_CHUNK_URLS)return{src:TURBOPACK_NEXT_CHUNK_URLS.pop()};throw Error("chunk path empty but not in a worker")}(t[0]);return 2===t.length?r=t[1]:(r=void 0,!function(e,t){let r=1;for(;r<e.length;){let n,o=r+1;for(;o<e.length&&"function"!=typeof e[o];)o++;if(o===e.length)throw Error("malformed chunk format, expected a factory function");let l=e[o];for(let l=r;l<o;l++){let r=e[l],o=t.get(r);if(o){n=o;break}}let i=n??l,u=!1;for(let n=r;n<o;n++){let r=e[n];t.has(r)||(u||(i===l&&Object.defineProperty(l,"name",{value:"module evaluation"}),u=!0),t.set(r,i))}r=o+1}}(t,R)),e.registerChunk(n,r)}let B=new Map;function I(e){let t=B.get(e);if(!t){let r,n;t={resolved:!1,loadingStarted:!1,retryAttempts:0,promise:new Promise((e,t)=>{r=e,n=t}),resolve:()=>{t.resolved=!0,r()},reject:n},B.set(e,t)}return t}function q(e,t,r,n,o){!(null==n||n instanceof DOMException&&"NetworkError"===n.name)||r.retryAttempts>=1||B.get(t)!==r?(B.get(t)===r&&B.delete(t),r.reject(n)):(r.retryAttempts++,setTimeout(()=>{r.resolved||B.get(t)!==r||(o?o():(r.loadingStarted=!1,F(e,t)))},200+Math.floor(401*Math.random())))}function F(e,t){let r=I(t);if(r.loadingStarted)return r.promise;if(e===o.Runtime)return r.loadingStarted=!0,S(t)&&r.resolve(),r.promise;if("function"==typeof importScripts)if(S(t));else if(M(t,".js")){self.TURBOPACK_NEXT_CHUNK_URLS.push(t);try{importScripts(t)}catch(n){q(e,t,r,n)}}else throw Error(`can't infer type of chunk from URL ${t} in worker`);else{let n=decodeURI(t);if(S(t))if(document.querySelectorAll(`link[rel=stylesheet][href="${t}"],link[rel=stylesheet][href^="${t}?"],link[rel=stylesheet][href="${n}"],link[rel=stylesheet][href^="${n}?"]`).length>0)r.resolve();else{let n=()=>{let o=document.createElement("link");return o.rel="stylesheet",o.crossOrigin=null,o.href=t,o.onerror=()=>{let l=document.createComment("");o.replaceWith(l),q(e,t,r,void 0,()=>l.replaceWith(n()))},o.onload=()=>{r.resolve()},o};document.head.appendChild(n())}else if(M(t,".js")){let o=document.querySelectorAll(`script[src="${t}"],script[src^="${t}?"],script[src="${n}"],script[src^="${n}?"]`);if(o.length>0)for(let n of Array.from(o))n.addEventListener("error",()=>{n.remove(),q(e,t,r)},{once:!0});else{let n=document.createElement("script");n.crossOrigin=null,n.src=t,n.onerror=()=>{n.remove(),q(e,t,r)},document.head.appendChild(n)}}else throw Error(`can't infer type of chunk from URL ${t}`)}return r.loadingStarted=!0,r.promise}e={async registerChunk(e,t){let n;if(null!=e&&(n=function(e){if("string"==typeof e)return e;let t=decodeURIComponent(e.src.replace(/[?#].*$/,""));return t.startsWith(r)?t.slice(r.length):t}(e),I("string"==typeof e?E(e):e.src).resolve()),null!=t){for(let e of t.otherChunks)I(E("string"==typeof e?e:e.path));if(await Promise.all(t.otherChunks.map(e=>{var t;return t=n,j(o.Runtime,t,e)})),t.runtimeModuleIds.length>0)for(let e of t.runtimeModuleIds)!function(e,t){let r=x[t];if(r){if(r.error)throw r.error;return}N(t,o.Runtime,e)}(n,e)}},loadChunkCached:(e,t)=>F(e,t)};var D=globalThis.TURBOPACK;globalThis.TURBOPACK={push:L},D.forEach(L)})();
package/.next/trace CHANGED
@@ -1 +1 @@
1
- [{"name":"generate-buildid","duration":349,"timestamp":93305853,"id":4,"parentId":1,"tags":{},"startTime":1786135812511,"traceId":"d80f4c15348226fa"},{"name":"load-custom-routes","duration":556,"timestamp":93306407,"id":5,"parentId":1,"tags":{},"startTime":1786135812512,"traceId":"d80f4c15348226fa"},{"name":"create-dist-dir","duration":694,"timestamp":93306999,"id":6,"parentId":1,"tags":{},"startTime":1786135812512,"traceId":"d80f4c15348226fa"},{"name":"clean","duration":267,"timestamp":93308277,"id":7,"parentId":1,"tags":{},"startTime":1786135812513,"traceId":"d80f4c15348226fa"},{"name":"discover-routes","duration":5707,"timestamp":93328480,"id":8,"parentId":1,"tags":{},"startTime":1786135812534,"traceId":"d80f4c15348226fa"},{"name":"create-root-mapping","duration":80,"timestamp":93334233,"id":9,"parentId":1,"tags":{},"startTime":1786135812539,"traceId":"d80f4c15348226fa"},{"name":"generate-route-types","duration":11904,"timestamp":93335813,"id":10,"parentId":1,"tags":{},"startTime":1786135812541,"traceId":"d80f4c15348226fa"},{"name":"public-dir-conflict-check","duration":111,"timestamp":93347784,"id":11,"parentId":1,"tags":{},"startTime":1786135812553,"traceId":"d80f4c15348226fa"},{"name":"generate-routes-manifest","duration":1813,"timestamp":93347983,"id":12,"parentId":1,"tags":{},"startTime":1786135812553,"traceId":"d80f4c15348226fa"},{"name":"run-turbopack","duration":12420669,"timestamp":93353718,"id":14,"parentId":1,"tags":{},"startTime":1786135812559,"traceId":"d80f4c15348226fa"},{"name":"turbopack-build-events","duration":62,"timestamp":93622598,"id":15,"parentId":1,"tags":{},"startTime":1786135812828,"traceId":"d80f4c15348226fa"},{"name":"turbopack-persistence","duration":780000,"timestamp":105249720,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":3.2216839999999998,"persist_duration_ms":776.910998,"task_count":256,"bytes_written":99583685,"bytes_deleted":0},"startTime":1786135825236,"traceId":"d80f4c15348226fa"},{"name":"run-typescript","duration":7118397,"timestamp":105781366,"id":16,"parentId":1,"tags":{},"startTime":1786135824987,"traceId":"d80f4c15348226fa"},{"name":"generate-required-server-files","duration":661,"timestamp":112900315,"id":18,"parentId":1,"tags":{},"startTime":1786135832105,"traceId":"d80f4c15348226fa"},{"name":"check-static-error-page","duration":4661,"timestamp":112943145,"id":20,"parentId":19,"tags":{},"startTime":1786135832148,"traceId":"d80f4c15348226fa"},{"name":"is-page-static","duration":351183,"timestamp":112949490,"id":27,"parentId":22,"tags":{},"startTime":1786135832155,"traceId":"d80f4c15348226fa"},{"name":"check-page","duration":355504,"timestamp":112945258,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1786135832150,"traceId":"d80f4c15348226fa"},{"name":"is-page-static","duration":469488,"timestamp":112949175,"id":26,"parentId":21,"tags":{},"startTime":1786135832154,"traceId":"d80f4c15348226fa"},{"name":"check-page","duration":474619,"timestamp":112944093,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1786135832149,"traceId":"d80f4c15348226fa"},{"name":"is-page-static","duration":508602,"timestamp":112953730,"id":29,"parentId":24,"tags":{},"startTime":1786135832159,"traceId":"d80f4c15348226fa"},{"name":"check-page","duration":516839,"timestamp":112945537,"id":24,"parentId":19,"tags":{"page":"/"},"startTime":1786135832151,"traceId":"d80f4c15348226fa"},{"name":"is-page-static","duration":528893,"timestamp":112949566,"id":28,"parentId":23,"tags":{},"startTime":1786135832155,"traceId":"d80f4c15348226fa"},{"name":"check-page","duration":533082,"timestamp":112945431,"id":23,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1786135832151,"traceId":"d80f4c15348226fa"},{"name":"is-page-static","duration":811089,"timestamp":112953786,"id":30,"parentId":25,"tags":{},"startTime":1786135832159,"traceId":"d80f4c15348226fa"},{"name":"check-page","duration":819335,"timestamp":112945609,"id":25,"parentId":19,"tags":{"page":"/preview/[...slug]"},"startTime":1786135832151,"traceId":"d80f4c15348226fa"},{"name":"static-check","duration":822617,"timestamp":112942358,"id":19,"parentId":1,"tags":{},"startTime":1786135832148,"traceId":"d80f4c15348226fa"},{"name":"write-routes-manifest","duration":303,"timestamp":113768344,"id":32,"parentId":1,"tags":{},"startTime":1786135832974,"traceId":"d80f4c15348226fa"},{"name":"load-dotenv","duration":29,"timestamp":113777644,"id":35,"parentId":34,"tags":{},"startTime":1786135832983,"traceId":"d80f4c15348226fa"},{"name":"run-export-path-map","duration":489,"timestamp":113778797,"id":36,"parentId":34,"tags":{},"startTime":1786135832984,"traceId":"d80f4c15348226fa"},{"name":"next-export","duration":117421,"timestamp":113776700,"id":34,"parentId":1,"tags":{},"startTime":1786135832982,"traceId":"d80f4c15348226fa"},{"name":"move-exported-app-global-error-","duration":403,"timestamp":113895401,"id":37,"parentId":33,"tags":{},"startTime":1786135833101,"traceId":"d80f4c15348226fa"},{"name":"static-generation","duration":124446,"timestamp":113771597,"id":33,"parentId":1,"tags":{},"startTime":1786135832977,"traceId":"d80f4c15348226fa"},{"name":"write-routes-manifest","duration":229,"timestamp":113896177,"id":38,"parentId":1,"tags":{},"startTime":1786135833101,"traceId":"d80f4c15348226fa"},{"name":"print-tree-view","duration":2346,"timestamp":113908791,"id":39,"parentId":1,"tags":{},"startTime":1786135833114,"traceId":"d80f4c15348226fa"},{"name":"write-route-bundle-stats","duration":3153,"timestamp":113911153,"id":40,"parentId":1,"tags":{},"startTime":1786135833116,"traceId":"d80f4c15348226fa"},{"name":"telemetry-flush","duration":485994,"timestamp":113914321,"id":41,"parentId":1,"tags":{},"startTime":1786135833119,"traceId":"d80f4c15348226fa"},{"name":"next-build","duration":21157986,"timestamp":93242355,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1786135812448,"traceId":"d80f4c15348226fa"}]
1
+ [{"name":"generate-buildid","duration":232,"timestamp":257290188,"id":4,"parentId":1,"tags":{},"startTime":1787682663273,"traceId":"638766c0ae7fc41a"},{"name":"load-custom-routes","duration":354,"timestamp":257290581,"id":5,"parentId":1,"tags":{},"startTime":1787682663273,"traceId":"638766c0ae7fc41a"},{"name":"create-dist-dir","duration":572,"timestamp":257290959,"id":6,"parentId":1,"tags":{},"startTime":1787682663273,"traceId":"638766c0ae7fc41a"},{"name":"clean","duration":276,"timestamp":257292071,"id":7,"parentId":1,"tags":{},"startTime":1787682663274,"traceId":"638766c0ae7fc41a"},{"name":"discover-routes","duration":4236,"timestamp":257309687,"id":8,"parentId":1,"tags":{},"startTime":1787682663292,"traceId":"638766c0ae7fc41a"},{"name":"create-root-mapping","duration":45,"timestamp":257313954,"id":9,"parentId":1,"tags":{},"startTime":1787682663296,"traceId":"638766c0ae7fc41a"},{"name":"generate-route-types","duration":11763,"timestamp":257315232,"id":10,"parentId":1,"tags":{},"startTime":1787682663298,"traceId":"638766c0ae7fc41a"},{"name":"public-dir-conflict-check","duration":107,"timestamp":257327065,"id":11,"parentId":1,"tags":{},"startTime":1787682663309,"traceId":"638766c0ae7fc41a"},{"name":"generate-routes-manifest","duration":2214,"timestamp":257327275,"id":12,"parentId":1,"tags":{},"startTime":1787682663310,"traceId":"638766c0ae7fc41a"},{"name":"run-turbopack","duration":11844820,"timestamp":257333176,"id":14,"parentId":1,"tags":{},"startTime":1787682663315,"traceId":"638766c0ae7fc41a"},{"name":"turbopack-build-events","duration":88,"timestamp":257590339,"id":15,"parentId":1,"tags":{},"startTime":1787682663573,"traceId":"638766c0ae7fc41a"},{"name":"turbopack-persistence","duration":859000,"timestamp":268653936,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":3.318642,"persist_duration_ms":856.292069,"task_count":256,"bytes_written":98618006,"bytes_deleted":0},"startTime":1787682675502,"traceId":"638766c0ae7fc41a"},{"name":"run-typescript","duration":6851302,"timestamp":269183676,"id":16,"parentId":1,"tags":{},"startTime":1787682675166,"traceId":"638766c0ae7fc41a"},{"name":"generate-required-server-files","duration":707,"timestamp":276035564,"id":18,"parentId":1,"tags":{},"startTime":1787682682018,"traceId":"638766c0ae7fc41a"},{"name":"check-static-error-page","duration":4292,"timestamp":276064410,"id":20,"parentId":19,"tags":{},"startTime":1787682682047,"traceId":"638766c0ae7fc41a"},{"name":"is-page-static","duration":318280,"timestamp":276070353,"id":27,"parentId":22,"tags":{},"startTime":1787682682053,"traceId":"638766c0ae7fc41a"},{"name":"check-page","duration":322375,"timestamp":276066354,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1787682682049,"traceId":"638766c0ae7fc41a"},{"name":"is-page-static","duration":451830,"timestamp":276070076,"id":26,"parentId":21,"tags":{},"startTime":1787682682052,"traceId":"638766c0ae7fc41a"},{"name":"check-page","duration":456716,"timestamp":276065250,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1787682682048,"traceId":"638766c0ae7fc41a"},{"name":"is-page-static","duration":471755,"timestamp":276074181,"id":29,"parentId":24,"tags":{},"startTime":1787682682056,"traceId":"638766c0ae7fc41a"},{"name":"check-page","duration":479442,"timestamp":276066592,"id":24,"parentId":19,"tags":{"page":"/"},"startTime":1787682682049,"traceId":"638766c0ae7fc41a"},{"name":"is-page-static","duration":477798,"timestamp":276070418,"id":28,"parentId":23,"tags":{},"startTime":1787682682053,"traceId":"638766c0ae7fc41a"},{"name":"check-page","duration":481745,"timestamp":276066501,"id":23,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1787682682049,"traceId":"638766c0ae7fc41a"},{"name":"is-page-static","duration":788303,"timestamp":276074234,"id":30,"parentId":25,"tags":{},"startTime":1787682682057,"traceId":"638766c0ae7fc41a"},{"name":"check-page","duration":795960,"timestamp":276066644,"id":25,"parentId":19,"tags":{"page":"/preview/[...slug]"},"startTime":1787682682049,"traceId":"638766c0ae7fc41a"},{"name":"static-check","duration":799193,"timestamp":276063456,"id":19,"parentId":1,"tags":{},"startTime":1787682682046,"traceId":"638766c0ae7fc41a"},{"name":"write-routes-manifest","duration":1036,"timestamp":276866996,"id":32,"parentId":1,"tags":{},"startTime":1787682682849,"traceId":"638766c0ae7fc41a"},{"name":"load-dotenv","duration":26,"timestamp":276875283,"id":35,"parentId":34,"tags":{},"startTime":1787682682858,"traceId":"638766c0ae7fc41a"},{"name":"run-export-path-map","duration":282,"timestamp":276876367,"id":36,"parentId":34,"tags":{},"startTime":1787682682859,"traceId":"638766c0ae7fc41a"},{"name":"next-export","duration":107642,"timestamp":276874406,"id":34,"parentId":1,"tags":{},"startTime":1787682682857,"traceId":"638766c0ae7fc41a"},{"name":"move-exported-app-global-error-","duration":430,"timestamp":276983288,"id":37,"parentId":33,"tags":{},"startTime":1787682682966,"traceId":"638766c0ae7fc41a"},{"name":"static-generation","duration":113925,"timestamp":276870035,"id":33,"parentId":1,"tags":{},"startTime":1787682682852,"traceId":"638766c0ae7fc41a"},{"name":"write-routes-manifest","duration":249,"timestamp":276984106,"id":38,"parentId":1,"tags":{},"startTime":1787682682966,"traceId":"638766c0ae7fc41a"},{"name":"print-tree-view","duration":2151,"timestamp":276993497,"id":39,"parentId":1,"tags":{},"startTime":1787682682976,"traceId":"638766c0ae7fc41a"},{"name":"write-route-bundle-stats","duration":4140,"timestamp":276995669,"id":40,"parentId":1,"tags":{},"startTime":1787682682978,"traceId":"638766c0ae7fc41a"},{"name":"telemetry-flush","duration":485905,"timestamp":276999823,"id":41,"parentId":1,"tags":{},"startTime":1787682682982,"traceId":"638766c0ae7fc41a"},{"name":"next-build","duration":20252898,"timestamp":257232859,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1787682663215,"traceId":"638766c0ae7fc41a"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":12420669,"timestamp":93353718,"id":14,"parentId":1,"tags":{},"startTime":1786135812559,"traceId":"d80f4c15348226fa"},{"name":"turbopack-build-events","duration":62,"timestamp":93622598,"id":15,"parentId":1,"tags":{},"startTime":1786135812828,"traceId":"d80f4c15348226fa"},{"name":"turbopack-persistence","duration":780000,"timestamp":105249720,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":3.2216839999999998,"persist_duration_ms":776.910998,"task_count":256,"bytes_written":99583685,"bytes_deleted":0},"startTime":1786135825236,"traceId":"d80f4c15348226fa"},{"name":"run-typescript","duration":7118397,"timestamp":105781366,"id":16,"parentId":1,"tags":{},"startTime":1786135824987,"traceId":"d80f4c15348226fa"},{"name":"static-check","duration":822617,"timestamp":112942358,"id":19,"parentId":1,"tags":{},"startTime":1786135832148,"traceId":"d80f4c15348226fa"},{"name":"static-generation","duration":124446,"timestamp":113771597,"id":33,"parentId":1,"tags":{},"startTime":1786135832977,"traceId":"d80f4c15348226fa"},{"name":"telemetry-flush","duration":485994,"timestamp":113914321,"id":41,"parentId":1,"tags":{},"startTime":1786135833119,"traceId":"d80f4c15348226fa"},{"name":"next-build","duration":21157986,"timestamp":93242355,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1786135812448,"traceId":"d80f4c15348226fa"}]
1
+ [{"name":"run-turbopack","duration":11844820,"timestamp":257333176,"id":14,"parentId":1,"tags":{},"startTime":1787682663315,"traceId":"638766c0ae7fc41a"},{"name":"turbopack-build-events","duration":88,"timestamp":257590339,"id":15,"parentId":1,"tags":{},"startTime":1787682663573,"traceId":"638766c0ae7fc41a"},{"name":"turbopack-persistence","duration":859000,"timestamp":268653936,"id":16,"parentId":15,"tags":{"reason":"stop","snapshot_duration_ms":3.318642,"persist_duration_ms":856.292069,"task_count":256,"bytes_written":98618006,"bytes_deleted":0},"startTime":1787682675502,"traceId":"638766c0ae7fc41a"},{"name":"run-typescript","duration":6851302,"timestamp":269183676,"id":16,"parentId":1,"tags":{},"startTime":1787682675166,"traceId":"638766c0ae7fc41a"},{"name":"static-check","duration":799193,"timestamp":276063456,"id":19,"parentId":1,"tags":{},"startTime":1787682682046,"traceId":"638766c0ae7fc41a"},{"name":"static-generation","duration":113925,"timestamp":276870035,"id":33,"parentId":1,"tags":{},"startTime":1787682682852,"traceId":"638766c0ae7fc41a"},{"name":"telemetry-flush","duration":485905,"timestamp":276999823,"id":41,"parentId":1,"tags":{},"startTime":1787682682982,"traceId":"638766c0ae7fc41a"},{"name":"next-build","duration":20252898,"timestamp":257232859,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1787682663215,"traceId":"638766c0ae7fc41a"}]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-email/ui",
3
- "version": "6.9.2",
3
+ "version": "6.9.3",
4
4
  "description": "A live preview of your emails right in your browser.",
5
5
  "main": "./index.mjs",
6
6
  "files": [
@@ -73,7 +73,7 @@
73
73
  "typescript": "5.9.3",
74
74
  "use-debounce": "10.1.1",
75
75
  "zod": "4.3.6",
76
- "react-email": "6.9.2"
76
+ "react-email": "6.9.3"
77
77
  },
78
78
  "license": "MIT",
79
79
  "repository": {
@@ -1,6 +1,7 @@
1
1
  import './globals.css';
2
2
 
3
3
  import type { Metadata } from 'next';
4
+ import { Shell } from '../components/shell';
4
5
  import { EmailsProvider } from '../contexts/emails';
5
6
  import { WorkspaceProvider } from '../contexts/workspace';
6
7
  import { getEmailsDirectoryMetadata } from '../utils/get-emails-directory-metadata';
@@ -42,7 +43,7 @@ export default async function RootLayout({
42
43
  <EmailsProvider
43
44
  initialEmailsDirectoryMetadata={emailsDirectoryMetadata}
44
45
  >
45
- {children}
46
+ <Shell>{children}</Shell>
46
47
  </EmailsProvider>
47
48
  </WorkspaceProvider>
48
49
  </div>
package/src/app/page.tsx CHANGED
@@ -3,7 +3,6 @@ import Image from 'next/image';
3
3
  import Link from 'next/link';
4
4
  import { Button, Heading, Text } from '../components';
5
5
  import CodeSnippet from '../components/code-snippet';
6
- import { Shell } from '../components/shell';
7
6
  import { emailsDirectoryAbsolutePath } from './env';
8
7
  import logo from './logo.png';
9
8
 
@@ -11,34 +10,32 @@ export default function Home() {
11
10
  const baseEmailsDirectoryName = path.basename(emailsDirectoryAbsolutePath);
12
11
 
13
12
  return (
14
- <Shell>
15
- <div className="w-full h-full flex items-center justify-center p-8">
16
- <div className="-mt-10 relative max-w-lg flex flex-col items-center gap-3 text-center">
17
- <Image
18
- alt="React Email Icon"
19
- className="mb-8"
20
- height={144}
21
- src={logo}
22
- style={{
23
- borderRadius: 34,
24
- boxShadow: '0 .625rem 12.5rem 1.25rem #2B7CA080',
25
- }}
26
- width={141}
27
- />
28
- <Heading as="h2" size="6" weight="medium">
29
- Welcome to React Email
30
- </Heading>
31
- <Text as="p">
32
- To start developing your emails, you can create a<br />
33
- <CodeSnippet>.jsx</CodeSnippet> or <CodeSnippet>.tsx</CodeSnippet>{' '}
34
- file under your <CodeSnippet>{baseEmailsDirectoryName}</CodeSnippet>{' '}
35
- folder.
36
- </Text>
37
- <Button asChild className="mt-3" size="3">
38
- <Link href="https://react.email/docs">Check the docs</Link>
39
- </Button>
40
- </div>
13
+ <div className="w-full h-full flex items-center justify-center p-8">
14
+ <div className="-mt-10 relative max-w-lg flex flex-col items-center gap-3 text-center">
15
+ <Image
16
+ alt="React Email Icon"
17
+ className="mb-8"
18
+ height={144}
19
+ src={logo}
20
+ style={{
21
+ borderRadius: 34,
22
+ boxShadow: '0 .625rem 12.5rem 1.25rem #2B7CA080',
23
+ }}
24
+ width={141}
25
+ />
26
+ <Heading as="h2" size="6" weight="medium">
27
+ Welcome to React Email
28
+ </Heading>
29
+ <Text as="p">
30
+ To start developing your emails, you can create a<br />
31
+ <CodeSnippet>.jsx</CodeSnippet> or <CodeSnippet>.tsx</CodeSnippet>{' '}
32
+ file under your <CodeSnippet>{baseEmailsDirectoryName}</CodeSnippet>{' '}
33
+ folder.
34
+ </Text>
35
+ <Button asChild className="mt-3" size="3">
36
+ <Link href="https://react.email/docs">Check the docs</Link>
37
+ </Button>
41
38
  </div>
42
- </Shell>
39
+ </div>
43
40
  );
44
41
  }
@@ -7,7 +7,6 @@ import {
7
7
  } from '../../../actions/email-validation/check-compatibility';
8
8
  import { getEmailPathFromSlug } from '../../../actions/get-email-path-from-slug';
9
9
  import { renderEmailByPath } from '../../../actions/render-email-by-path';
10
- import { Shell } from '../../../components/shell';
11
10
  import { Toolbar } from '../../../components/toolbar';
12
11
  import type { LintingRow } from '../../../components/toolbar/linter';
13
12
  import type { SpamCheckingResult } from '../../../components/toolbar/spam-assassin';
@@ -135,23 +134,21 @@ This is most likely not an issue with the preview server. Maybe there was a typo
135
134
  emailPath={emailPath}
136
135
  serverRenderingResult={serverEmailRenderingResult}
137
136
  >
138
- <Shell currentEmailOpenSlug={slug}>
139
- {/* This suspense is so that this page doesn't throw warnings */}
140
- {/* on the build of the preview server de-opting into */}
141
- {/* client-side rendering on build */}
142
- <Suspense>
143
- <Preview emailTitle={path.basename(emailPath)} />
144
-
145
- <ToolbarProvider hasApiKey={(resendApiKey ?? '').trim().length > 0}>
146
- <Toolbar
147
- serverLintingRows={lintingRows}
148
- serverSpamCheckingResult={spamCheckingResult}
149
- serverCompatibilityResults={compatibilityCheckingResults}
150
- serverCompatibilityClients={getRelevantEmailClients()}
151
- />
152
- </ToolbarProvider>
153
- </Suspense>
154
- </Shell>
137
+ {/* This suspense is so that this page doesn't throw warnings */}
138
+ {/* on the build of the preview server de-opting into */}
139
+ {/* client-side rendering on build */}
140
+ <Suspense>
141
+ <Preview emailTitle={path.basename(emailPath)} />
142
+
143
+ <ToolbarProvider hasApiKey={(resendApiKey ?? '').trim().length > 0}>
144
+ <Toolbar
145
+ serverLintingRows={lintingRows}
146
+ serverSpamCheckingResult={spamCheckingResult}
147
+ serverCompatibilityResults={compatibilityCheckingResults}
148
+ serverCompatibilityClients={getRelevantEmailClients()}
149
+ />
150
+ </ToolbarProvider>
151
+ </Suspense>
155
152
  </PreviewProvider>
156
153
  );
157
154
  }
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { usePathname } from 'next/navigation';
3
4
  import * as React from 'react';
4
5
  import { cn } from '../utils';
5
6
  import { Logo } from './logo';
@@ -7,7 +8,6 @@ import { Sidebar } from './sidebar';
7
8
 
8
9
  interface ShellProps {
9
10
  children: React.ReactNode;
10
- currentEmailOpenSlug?: string;
11
11
  }
12
12
 
13
13
  interface ShellContextValue {
@@ -19,8 +19,16 @@ export const ShellContext = React.createContext<ShellContextValue | undefined>(
19
19
  undefined,
20
20
  );
21
21
 
22
- export const Shell = ({ children, currentEmailOpenSlug }: ShellProps) => {
22
+ export const Shell = ({ children }: ShellProps) => {
23
23
  const [sidebarToggled, setSidebarToggled] = React.useState(true);
24
+ const pathname = usePathname();
25
+
26
+ // 64rem is the `lg` breakpoint the drawer styles below are keyed to.
27
+ React.useEffect(() => {
28
+ if (window.matchMedia('(min-width: 64rem)').matches) return;
29
+
30
+ setSidebarToggled(true);
31
+ }, [pathname]);
24
32
 
25
33
  return (
26
34
  <ShellContext.Provider
@@ -73,7 +81,6 @@ export const Shell = ({ children, currentEmailOpenSlug }: ShellProps) => {
73
81
  'lg:w-0': !sidebarToggled,
74
82
  },
75
83
  )}
76
- currentEmailOpenSlug={currentEmailOpenSlug}
77
84
  />
78
85
  </React.Suspense>
79
86
  <main
@@ -35,6 +35,13 @@ export const FileTreeDirectory = ({
35
35
  doesDirectoryContainCurrentEmailOpen,
36
36
  );
37
37
 
38
+ React.useEffect(() => {
39
+ if (!doesDirectoryContainCurrentEmailOpen) return;
40
+
41
+ persistedOpenDirectories.add(directoryMetadata.absolutePath);
42
+ setOpen(true);
43
+ }, [doesDirectoryContainCurrentEmailOpen, directoryMetadata.absolutePath]);
44
+
38
45
  return (
39
46
  <Collapsible.Root
40
47
  className={cn('group', className)}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
  import { clsx } from 'clsx';
3
+ import { useParams } from 'next/navigation';
3
4
  import { useEmails } from '../../contexts/emails';
4
5
  import { cn } from '../../utils';
5
6
  import { Logo } from '../logo';
@@ -7,11 +8,14 @@ import { FileTree } from './file-tree';
7
8
 
8
9
  interface SidebarProps {
9
10
  className?: string;
10
- currentEmailOpenSlug?: string;
11
11
  }
12
12
 
13
- export const Sidebar = ({ className, currentEmailOpenSlug }: SidebarProps) => {
13
+ export const Sidebar = ({ className }: SidebarProps) => {
14
14
  const { emailsDirectoryMetadata } = useEmails();
15
+ const params = useParams();
16
+ const currentEmailOpenSlug = Array.isArray(params.slug)
17
+ ? decodeURIComponent(params.slug.join('/'))
18
+ : undefined;
15
19
 
16
20
  return (
17
21
  <aside
@@ -1,3 +0,0 @@
1
- module.exports=[37466,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={actionAsyncStorage:function(){return f.actionAsyncStorage},workAsyncStorage:function(){return g.workAsyncStorage},workUnitAsyncStorage:function(){return h.workUnitAsyncStorage}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(20635),g=a.r(56704),h=a.r(32319);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)}];
2
-
3
- //# sourceMappingURL=17n9_next_dist_client_components_server-async-storage_0mk9pov.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../node_modules/.pnpm/next%4016.3.0_%40babel%2Bcore%407.29.6_%40types%2Bnode%4022.19.18_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/client/components/server-async-storage.ts"],"sourcesContent":["// Client-safe access to the server-only async-storage singletons. On the\n// server these re-export the real storages; in the browser bundle this module\n// is aliased to `./server-async-storage.browser` (see\n// scripts/generate-browser-variant-aliases.mjs), which exports `undefined`\n// stubs so the AsyncLocalStorage modules are never bundled into the client.\n// Consumers must guard usage so the stubs are not dereferenced in the browser.\nexport { actionAsyncStorage } from '../../server/app-render/action-async-storage.external'\nexport { workAsyncStorage } from '../../server/app-render/work-async-storage.external'\nexport { workUnitAsyncStorage } from '../../server/app-render/work-unit-async-storage.external'\n"],"names":["actionAsyncStorage","workAsyncStorage","workUnitAsyncStorage"],"mappings":"qGAMSA,kBAAkB,CAAA,kBAAlBA,EAAAA,kBAAkB,EAClBC,gBAAgB,CAAA,kBAAhBA,EAAAA,gBAAgB,EAChBC,oBAAoB,CAAA,kBAApBA,EAAAA,oBAAoB,8EAFM,CAAA,CAAA,IAAA,OACF,CAAA,CAAA,IAAA,OACI,CAAA,CAAA,IAAA","ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../../node_modules/.pnpm/%40swc%2Bhelpers%400.5.15/node_modules/%40swc/helpers/cjs/_interop_require_default.cjs","../../../../../../node_modules/.pnpm/next%4016.3.0_%40babel%2Bcore%407.29.6_%40types%2Bnode%4022.19.18_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/dist/esm/build/templates/app-page.js%3Fpage%3D/page","../../../../../../packages/ui/src/app/favicon.ico.mjs%20%28structured%20image%20object%29","../../../../../../packages/ui/src/components/shell.tsx/__nextjs-internal-proxy.mjs"],"sourcesContent":["\"use strict\";\n\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nexports._ = _interop_require_default;\n","import { instrumentModuleGetter } from \"next/dist/server/app-render/module-loading/instrument-module-getter\";\nconst __TURBOPACK__icon__$23$0__ = instrumentModuleGetter(() => require(/*turbopackChunkingType: shared*/\"METADATA_0\"));\nconst __TURBOPACK__layout__$23$1__ = instrumentModuleGetter(() => require(/*turbopackChunkingType: shared*/\"MODULE_1\"));\nconst __TURBOPACK__not$2d$found__$23$2__ = instrumentModuleGetter(() => require(/*turbopackChunkingType: shared*/\"MODULE_2\"));\nconst __TURBOPACK__forbidden__$23$3__ = instrumentModuleGetter(() => require(/*turbopackChunkingType: shared*/\"MODULE_3\"));\nconst __TURBOPACK__unauthorized__$23$4__ = instrumentModuleGetter(() => require(/*turbopackChunkingType: shared*/\"MODULE_4\"));\nconst __TURBOPACK__global$2d$error__$23$5__ = instrumentModuleGetter(() => require(/*turbopackChunkingType: shared*/\"MODULE_5\"));\nconst __TURBOPACK__page__$23$6__ = instrumentModuleGetter(() => require(/*turbopackChunkingType: shared*/\"MODULE_6\"));\nimport { createAppPageEntrypoint } from \"next/dist/esm/build/templates/app-page-runtime\";\nimport { interopDefault } from \"next/dist/esm/server/app-render/interop-default\" with {\n 'turbopack-transition': 'next-server-utility'\n};\nconst tree = [\"\", {\n\"children\": [\"__PAGE__\", {\n}, {\n metadata: { }, \"page\": [__TURBOPACK__page__$23$6__, \"[project]/packages/ui/src/app/page.tsx\"],\n}, []],\n}, {\n metadata: { icon: [\n (async () => {\n const mod = interopDefault(await __TURBOPACK__icon__$23$0__());\n return [{\n url: \"/favicon.ico\" + `?${mod.src.split(\"/\").splice(-1)[0]}`,\n sizes: `${mod.width}x${mod.height}`,\n type: `image/x-icon`,\n }];\n }),\n ],\n }, \"layout\": [__TURBOPACK__layout__$23$1__, \"[project]/packages/ui/src/app/layout.tsx\"],\n \"not-found\": [__TURBOPACK__not$2d$found__$23$2__, \"[project]/node_modules/.pnpm/next@16.3.0_@babel+core@7.29.6_@types+node@22.19.18_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/builtin/not-found.js\"],\n \"forbidden\": [__TURBOPACK__forbidden__$23$3__, \"[project]/node_modules/.pnpm/next@16.3.0_@babel+core@7.29.6_@types+node@22.19.18_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/builtin/forbidden.js\"],\n \"unauthorized\": [__TURBOPACK__unauthorized__$23$4__, \"[project]/node_modules/.pnpm/next@16.3.0_@babel+core@7.29.6_@types+node@22.19.18_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/builtin/unauthorized.js\"],\n \"global-error\": [__TURBOPACK__global$2d$error__$23$5__, \"[project]/node_modules/.pnpm/next@16.3.0_@babel+core@7.29.6_@types+node@22.19.18_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/next/dist/client/components/builtin/global-error.js\"],\n}, []]\nconst __next_app_require__ = __turbopack_context__.r.bind(__turbopack_context__)\nconst __next_app_load_chunk__ = __turbopack_context__.l.bind(__turbopack_context__)\nconst entrypoint = createAppPageEntrypoint({\n tree,\n page: \"/page\",\n pathname: \"/\",\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__,\n interopDefault\n});\nexport const __next_app__ = entrypoint.__next_app__;\nexport const routeModule = entrypoint.routeModule;\nexport const handler = entrypoint.handler;\nexport * from \"next/dist/esm/server/app-render/entry-base\" with {\n 'turbopack-transition': 'next-server-utility'\n};\n\n//# sourceMappingURL=app-page.js.map\n","import src from \"IMAGE\";\nexport default { src, width: 32, height: 32 }\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const Shell = registerClientReference(\n function() { throw new Error(\"Attempted to call Shell() from the server but Shell is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/ui/src/components/shell.tsx\",\n \"Shell\",\n);\nexport const ShellContext = registerClientReference(\n function() { throw new Error(\"Attempted to call ShellContext() from the server but ShellContext is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/ui/src/components/shell.tsx\",\n \"ShellContext\",\n);\n"],"names":["_interop_require_default","obj","__esModule","default","exports","_","icon #0","layout #1","not-found #2","forbidden #3","unauthorized #4","global-error #5","page #6","tree","metadata","icon","mod","url","src","split","splice","sizes","width","height","type","__next_app_require__","__turbopack_context__","r","bind","__next_app_load_chunk__","l","entrypoint","page","pathname","require","loadChunk","interopDefault","__next_app__","routeModule","handler","Shell","Error","ShellContext"],"mappings":"oMAKAI,EAAQC,CAAC,CAHT,EAGYL,OAHsBC,AAAzBD,CAA4B,EACjC,OAAOC,GAAOA,EAAIC,UAAU,CAAGD,EAAM,CAAEE,QAASF,CAAI,CACxD,0BCJA,IAAA,EAAA,EAAA,CAAA,CAAA,MAQA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAsCA,EAAA,CAAA,CAAA,OA9CA,IAAMK,EAA6B,CAAA,EAAA,EAAA,sBAAA,AAAsB,EAAC,IAAA,EAAA,CAAA,CAAA,QACpDC,EAA+B,CAAA,EAAA,EAAA,sBAAA,AAAsB,EAAC,IAAA,EAAA,CAAA,CAAA,QACtDC,EAAqC,CAAA,EAAA,EAAA,sBAAA,AAAsB,EAAC,IAAA,EAAA,CAAA,CAAA,QAC5DC,EAAkC,CAAA,EAAA,EAAA,sBAAA,AAAsB,EAAC,IAAA,EAAA,CAAA,CAAA,QACzDC,EAAqC,CAAA,EAAA,EAAA,sBAAA,AAAsB,EAAC,IAAA,EAAA,CAAA,CAAA,QAC5DC,EAAwC,CAAA,EAAA,EAAA,sBAAsB,AAAtB,EAAuB,IAAA,EAAA,CAAA,CAAA,QAM/DE,EAAO,CAAC,GAAI,CAClB,SAAY,CAAC,WAAY,CACzB,EAAG,CACDC,SAAU,CAAG,EAAI,KAAQ,CARQ,CAAA,EAAA,EAAA,sBAAA,AAAsB,EAAC,IAAA,EAAA,CAAA,CAAA,QAQF,yCAAyC,AACjG,EAAG,EAAE,CAAC,AACN,EAAG,CACDA,SAAU,CAAKC,KAAM,CAChB,UACC,IAAMC,EAAM,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,MAAMV,KACjC,MAAO,CAAC,CACNW,IAAsB,CAAjB,AAAkB,aAAC,EAAED,EAAIE,GAAG,CAACC,KAAK,CAAC,KAAKC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA,CAAE,CAC5DC,MAAO,CAAA,EAAGL,EAAIM,KAAK,CAAC,CAAC,EAAEN,EAAIO,MAAM,CAAA,CAAE,CACnCC,KAAM,CAAC,YAAY,CAAC,AACtB,EAAE,AACJ,EACD,AACH,EAAI,OAAU,CAACjB,EAA8B,2CAA2C,CACxF,YAAa,CAACC,EAAoC,6LAA6L,CAC/O,UAAa,CAACC,EAAiC,6LAA6L,CAC5O,aAAgB,CAACC,EAAoC,gMAAgM,CACrP,eAAgB,CAACC,EAAuC,gMAC1D,AAD0P,EACvP,EAAE,CAAC,CACAc,EAAuBC,EAAsBC,CAAC,CAACC,IAAI,CAACF,GACpDG,EAA0BH,EAAsBI,CAAC,CAACF,IAAI,CAACF,GACvDK,EAAa,CAAA,EAAA,EAAA,uBAAA,AAAuB,EAAC,MACvClB,EACAmB,KAAM,QACNC,SAAU,IACVC,QAAST,EACTU,UAAWN,EACXO,eAAAA,EAAAA,cACJ,AADkB,GAELC,EAAeN,EAAWM,YAAY,CACtCC,EAAcP,EAAWO,WAAW,CACpCC,EAAUR,EAAWQ,OAAO,+8DC7C1B,CAAErB,IADjB,AACiBA,EADjB,CAAA,CAAA,OACiBA,OAAG,CAAEI,MAAO,GAAIC,OAAQ,EAAG,yFCA5C,IAAA,EAAA,EAAA,CAAA,CAAA,OACO,IAAMiB,EAAQ,CAAA,EAAA,EAAA,uBAAA,AAAuB,EACxC,WAAa,MAAM,AAAIC,MAAM,wNAA0N,EACvP,iDACA,SAESC,EAAe,CAAA,EAAA,EAAA,uBAAA,AAAuB,EAC/C,WAAa,MAAM,AAAID,MAAM,sOAAwO,EACrQ,iDACA","ignoreList":[0,1,3]}
@@ -1,3 +0,0 @@
1
- module.exports=[66680,(a,b,c)=>{b.exports=a.x("node:crypto",()=>require("node:crypto"))},2157,(a,b,c)=>{b.exports=a.x("node:fs",()=>require("node:fs"))},50227,(a,b,c)=>{b.exports=a.x("node:path",()=>require("node:path"))},75405,a=>{a.v({className:"inter_8a594245-module__h1XLeG__className",variable:"inter_8a594245-module__h1XLeG__variable"})},90994,a=>{"use strict";let b=process.env.REACT_EMAIL_INTERNAL_USER_PROJECT_LOCATION,c=process.env.REACT_EMAIL_INTERNAL_PREVIEW_SERVER_LOCATION,d=process.env.REACT_EMAIL_INTERNAL_EMAILS_DIR_ABSOLUTE_PATH,e=process.env.REACT_EMAIL_INTERNAL_RESEND_API_KEY,f="true"===process.env.NEXT_PUBLIC_IS_BUILDING,g="true"===process.env.NEXT_PUBLIC_IS_PREVIEW_DEVELOPMENT;a.s(["emailsDirectoryAbsolutePath",0,d,"isBuilding",0,f,"isPreviewDevelopment",0,g,"previewServerLocation",0,c,"resendApiKey",0,e,"userProjectLocation",0,b])},13213,a=>{a.v({className:"sfmono_4612e31-module__agt8MW__className",variable:"sfmono_4612e31-module__agt8MW__variable"})},87885,a=>{"use strict";var b=a.i(43834),c=a.i(74885),d=a.i(38897),e=a.i(37342),f=a.i(66680),g=a.i(90994),h=a.i(75405);let i={className:h.default.className,style:{fontFamily:"'Inter', 'Inter Fallback'",fontStyle:"normal"}};null!=h.default.variable&&(i.variable=h.default.variable);var j=a.i(13213);let k={className:j.default.className,style:{fontFamily:"'sfMono', 'sfMono Fallback'"}};async function l({children:a}){let h,j=await (0,e.getEmailsDirectoryMetadata)(g.emailsDirectoryAbsolutePath);if(void 0===j)throw Error(`Could not find the emails directory specified under ${g.emailsDirectoryAbsolutePath}!`);let m=(h=g.emailsDirectoryAbsolutePath,(0,f.createHash)("sha1").update(h).digest("hex").slice(0,12));return(0,b.jsx)("html",{className:`${i.variable} ${k.variable} font-sans`,lang:"en",children:(0,b.jsx)("body",{className:"relative h-screen bg-black text-slate-11 leading-loose selection:bg-cyan-5 selection:text-cyan-12",children:(0,b.jsx)("div",{className:"bg-linear-to-t from-slate-3 flex flex-col",children:(0,b.jsx)(d.WorkspaceProvider,{id:m,children:(0,b.jsx)(c.EmailsProvider,{initialEmailsDirectoryMetadata:j,children:a})})})})})}null!=j.default.variable&&(k.variable=j.default.variable),a.s(["default",0,l,"dynamic",0,"force-dynamic","metadata",0,{title:"React Email"}],87885)},55998,function(a){a.n(a.i(87885))},4534,a=>{"use strict";a.s(["EmailsProvider",()=>c,"useEmails",()=>d]);var b=a.i(53892);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call EmailsProvider() from the server but EmailsProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/ui/src/contexts/emails.tsx","EmailsProvider"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call useEmails() from the server but useEmails is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/ui/src/contexts/emails.tsx","useEmails")},74885,a=>{"use strict";var b=a.i(4534);a.n(b)},82224,a=>{"use strict";a.s(["WorkspaceProvider",()=>c,"useWorkspaceId",()=>d]);var b=a.i(53892);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call WorkspaceProvider() from the server but WorkspaceProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/ui/src/contexts/workspace.tsx","WorkspaceProvider"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call useWorkspaceId() from the server but useWorkspaceId is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/packages/ui/src/contexts/workspace.tsx","useWorkspaceId")},38897,a=>{"use strict";var b=a.i(82224);a.n(b)},37342,a=>{"use strict";var b=a.i(2157),c=a.i(50227);let d=async a=>{let d;try{d=await b.default.promises.open(a,"r")}catch(a){return console.warn(a),!1}if((await d.stat()).isDirectory())return await d.close(),!1;let{ext:e}=c.default.parse(a);if(".html"===e)return await d.close(),!0;if(![".js",".tsx",".jsx"].includes(e))return await d.close(),!1;let f=await d.readFile("utf8");await d.close();let g=/\bexport\s+default\b/gm.test(f),h=/\bmodule\.exports\s*=/gm.test(f),i=/\bexport\s+\{[^}]*\bdefault\b[^}]*\}/gm.test(f);return g||h||i},e=async(a,f=!1,g=!1,h=a)=>{if(!b.default.existsSync(a))return;let i=await b.default.promises.readdir(a,{withFileTypes:!0}),j=await Promise.all(i.map(b=>d(c.default.join(a,b.name)))),k=i.filter((a,b)=>j[b]).map(a=>f?a.name:a.name.replace(c.default.extname(a.name),"")),l=await Promise.all(i.filter(a=>a.isDirectory()&&!a.name.startsWith("_")&&"static"!==a.name).map(b=>e(c.default.join(a,b.name),f,!0,h))),m={absolutePath:a,relativePath:c.default.relative(h,a),directoryName:a.split(c.default.sep).pop(),emailFilenames:k,subDirectories:l};return g?(a=>{let b=a;for(;0===b.emailFilenames.length&&1===b.subDirectories.length;){let a=b.subDirectories[0];b={...a,directoryName:c.default.join(b.directoryName,a.directoryName)}}return b})(m):m};a.s(["getEmailsDirectoryMetadata",0,e])}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0ir6ce9._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["turbopack:///[next]/internal/font/google/inter_8a594245.module.css [app-rsc] (css module)","../../../../../../packages/ui/src/app/env.ts","turbopack:///[project]/packages/ui/src/app/sfmono_4612e31.module.css [app-rsc] (css module)","../../../../../../packages/ui/src/app/layout.tsx","../../../../../../packages/ui/src/utils/get-workspace-id.ts","turbopack:///[next]/internal/font/google/inter_8a594245.js","../../../../../../packages/ui/src/app/sfmono_4612e31.js","../../../../../../packages/ui/src/contexts/emails.tsx/__nextjs-internal-proxy.mjs","../../../../../../packages/ui/src/contexts/workspace.tsx/__nextjs-internal-proxy.mjs","../../../../../../packages/ui/src/utils/get-emails-directory-metadata.ts"],"sourcesContent":["__turbopack_context__.v({\n \"className\": \"inter_8a594245-module__h1XLeG__className\",\n \"variable\": \"inter_8a594245-module__h1XLeG__variable\",\n});\n","/** ONLY ACCESSIBLE ON THE SERVER */\nexport const userProjectLocation =\n process.env.REACT_EMAIL_INTERNAL_USER_PROJECT_LOCATION!;\n\n/** ONLY ACCESSIBLE ON THE SERVER */\nexport const previewServerLocation =\n process.env.REACT_EMAIL_INTERNAL_PREVIEW_SERVER_LOCATION!;\n\n/** ONLY ACCESSIBLE ON THE SERVER */\nexport const emailsDirectoryAbsolutePath =\n process.env.REACT_EMAIL_INTERNAL_EMAILS_DIR_ABSOLUTE_PATH!;\n\n/** ONLY ACCESSIBLE ON THE SERVER */\nexport const resendApiKey = process.env.REACT_EMAIL_INTERNAL_RESEND_API_KEY;\n\nexport const isBuilding = process.env.NEXT_PUBLIC_IS_BUILDING === 'true';\n\nexport const isPreviewDevelopment =\n process.env.NEXT_PUBLIC_IS_PREVIEW_DEVELOPMENT === 'true';\n","__turbopack_context__.v({\n \"className\": \"sfmono_4612e31-module__agt8MW__className\",\n \"variable\": \"sfmono_4612e31-module__agt8MW__variable\",\n});\n","import './globals.css';\n\nimport type { Metadata } from 'next';\nimport { EmailsProvider } from '../contexts/emails';\nimport { WorkspaceProvider } from '../contexts/workspace';\nimport { getEmailsDirectoryMetadata } from '../utils/get-emails-directory-metadata';\nimport { getWorkspaceId } from '../utils/get-workspace-id';\nimport { emailsDirectoryAbsolutePath } from './env';\nimport { inter, sfMono } from './fonts';\n\nexport const metadata: Metadata = {\n title: 'React Email',\n};\n\nexport const dynamic = 'force-dynamic';\n\nexport default async function RootLayout({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const emailsDirectoryMetadata = await getEmailsDirectoryMetadata(\n emailsDirectoryAbsolutePath,\n );\n\n if (typeof emailsDirectoryMetadata === 'undefined') {\n throw new Error(\n `Could not find the emails directory specified under ${emailsDirectoryAbsolutePath}!`,\n );\n }\n\n const workspaceId = getWorkspaceId(emailsDirectoryAbsolutePath);\n\n return (\n <html\n className={`${inter.variable} ${sfMono.variable} font-sans`}\n lang=\"en\"\n >\n <body className=\"relative h-screen bg-black text-slate-11 leading-loose selection:bg-cyan-5 selection:text-cyan-12\">\n <div className=\"bg-linear-to-t from-slate-3 flex flex-col\">\n <WorkspaceProvider id={workspaceId}>\n <EmailsProvider\n initialEmailsDirectoryMetadata={emailsDirectoryMetadata}\n >\n {children}\n </EmailsProvider>\n </WorkspaceProvider>\n </div>\n </body>\n </html>\n );\n}\n","import { createHash } from 'node:crypto';\n\n/**\n * Derives a short, stable identifier for a React Email project from its\n * absolute path. Used to namespace browser-side persistence (e.g. localStorage)\n * so multiple projects served on the same preview origin (typically\n * `http://localhost:3000`) don't share each other's cached state.\n *\n * The output is deterministic for a given path and short enough to embed in\n * storage keys without being noisy. It's not security-sensitive — collisions\n * would only cause a single bad UX (mixed caches), not a vulnerability.\n */\nexport const getWorkspaceId = (projectAbsolutePath: string): string =>\n createHash('sha1').update(projectAbsolutePath).digest('hex').slice(0, 12);\n","import cssModule from \"@vercel/turbopack-next/internal/font/google/cssmodule.module.css?{%22path%22:%22fonts.ts%22,%22import%22:%22Inter%22,%22arguments%22:[{%22subsets%22:[%22latin%22],%22variable%22:%22--font-inter%22,%22display%22:%22swap%22}],%22variableName%22:%22inter%22}\";\nconst fontData = {\n className: cssModule.className,\n style: {\n fontFamily: \"'Inter', 'Inter Fallback'\",\n fontStyle: \"normal\",\n\n },\n};\n\nif (cssModule.variable != null) {\n fontData.variable = cssModule.variable;\n}\n\nexport default fontData;\n","import cssModule from \"@vercel/turbopack-next/internal/font/local/cssmodule.module.css?{%22path%22:%22fonts.ts%22,%22import%22:%22%22,%22arguments%22:[{%22src%22:[{%22path%22:%22./fonts/SFMono/SFMonoLight.otf%22,%22weight%22:%22300%22},{%22path%22:%22./fonts/SFMono/SFMonoRegular.otf%22,%22weight%22:%22400%22},{%22path%22:%22./fonts/SFMono/SFMonoMedium.otf%22,%22weight%22:%22500%22},{%22path%22:%22./fonts/SFMono/SFMonoSemibold.otf%22,%22weight%22:%22600%22},{%22path%22:%22./fonts/SFMono/SFMonoBold.otf%22,%22weight%22:%22700%22},{%22path%22:%22./fonts/SFMono/SFMonoHeavy.otf%22,%22weight%22:%22800%22}],%22variable%22:%22--font-sf-mono%22,%22display%22:%22swap%22}],%22variableName%22:%22sfMono%22}\";\nconst fontData = {\n className: cssModule.className,\n style: {\n fontFamily: \"'sfMono', 'sfMono Fallback'\",\n \n },\n};\n\nif (cssModule.variable != null) {\n fontData.variable = cssModule.variable;\n}\n\nexport default fontData;\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const EmailsProvider = registerClientReference(\n function() { throw new Error(\"Attempted to call EmailsProvider() from the server but EmailsProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/ui/src/contexts/emails.tsx\",\n \"EmailsProvider\",\n);\nexport const useEmails = registerClientReference(\n function() { throw new Error(\"Attempted to call useEmails() from the server but useEmails is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/ui/src/contexts/emails.tsx\",\n \"useEmails\",\n);\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const WorkspaceProvider = registerClientReference(\n function() { throw new Error(\"Attempted to call WorkspaceProvider() from the server but WorkspaceProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/ui/src/contexts/workspace.tsx\",\n \"WorkspaceProvider\",\n);\nexport const useWorkspaceId = registerClientReference(\n function() { throw new Error(\"Attempted to call useWorkspaceId() from the server but useWorkspaceId is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/packages/ui/src/contexts/workspace.tsx\",\n \"useWorkspaceId\",\n);\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nconst isFileAnEmail = async (fullPath: string): Promise<boolean> => {\n let fileHandle: fs.promises.FileHandle;\n try {\n fileHandle = await fs.promises.open(fullPath, 'r');\n } catch (exception) {\n console.warn(exception);\n return false;\n }\n const stat = await fileHandle.stat();\n\n if (stat.isDirectory()) {\n await fileHandle.close();\n return false;\n }\n\n const { ext } = path.parse(fullPath);\n\n if (ext === '.html') {\n await fileHandle.close();\n return true;\n }\n\n if (!['.js', '.tsx', '.jsx'].includes(ext)) {\n await fileHandle.close();\n return false;\n }\n\n // check with a heuristic to see if the file has at least\n // a default export (ES6) or module.exports (CommonJS) or named exports (MDX)\n const fileContents = await fileHandle.readFile('utf8');\n\n await fileHandle.close();\n\n // Check for ES6 export default syntax\n const hasES6DefaultExport = /\\bexport\\s+default\\b/gm.test(fileContents);\n\n // Check for CommonJS module.exports syntax\n const hasCommonJSExport = /\\bmodule\\.exports\\s*=/gm.test(fileContents);\n\n // Check for named exports (used in MDX files) and ensure at least one is marked as default\n const hasNamedExport = /\\bexport\\s+\\{[^}]*\\bdefault\\b[^}]*\\}/gm.test(\n fileContents,\n );\n\n return hasES6DefaultExport || hasCommonJSExport || hasNamedExport;\n};\n\nexport interface EmailsDirectory {\n absolutePath: string;\n relativePath: string;\n directoryName: string;\n emailFilenames: string[];\n subDirectories: EmailsDirectory[];\n}\n\nconst mergeDirectoriesWithSubDirectories = (\n emailsDirectoryMetadata: EmailsDirectory,\n): EmailsDirectory => {\n let currentResultingMergedDirectory: EmailsDirectory =\n emailsDirectoryMetadata;\n\n while (\n currentResultingMergedDirectory.emailFilenames.length === 0 &&\n currentResultingMergedDirectory.subDirectories.length === 1\n ) {\n const onlySubDirectory = currentResultingMergedDirectory.subDirectories[0]!;\n currentResultingMergedDirectory = {\n ...onlySubDirectory,\n directoryName: path.join(\n currentResultingMergedDirectory.directoryName,\n onlySubDirectory.directoryName,\n ),\n };\n }\n\n return currentResultingMergedDirectory;\n};\n\nexport const getEmailsDirectoryMetadata = async (\n absolutePathToEmailsDirectory: string,\n keepFileExtensions = false,\n isSubDirectory = false,\n\n baseDirectoryPath = absolutePathToEmailsDirectory,\n): Promise<EmailsDirectory | undefined> => {\n if (!fs.existsSync(absolutePathToEmailsDirectory)) return;\n\n const dirents = await fs.promises.readdir(absolutePathToEmailsDirectory, {\n withFileTypes: true,\n });\n\n const isEmailPredicates = await Promise.all(\n dirents.map((dirent) =>\n isFileAnEmail(path.join(absolutePathToEmailsDirectory, dirent.name)),\n ),\n );\n const emailFilenames = dirents\n .filter((_, i) => isEmailPredicates[i])\n .map((dirent) =>\n keepFileExtensions\n ? dirent.name\n : dirent.name.replace(path.extname(dirent.name), ''),\n );\n\n const subDirectories = await Promise.all(\n dirents\n .filter(\n (dirent) =>\n dirent.isDirectory() &&\n !dirent.name.startsWith('_') &&\n dirent.name !== 'static',\n )\n .map((dirent) => {\n const direntAbsolutePath = path.join(\n absolutePathToEmailsDirectory,\n dirent.name,\n );\n\n return getEmailsDirectoryMetadata(\n direntAbsolutePath,\n keepFileExtensions,\n true,\n baseDirectoryPath,\n ) as Promise<EmailsDirectory>;\n }),\n );\n\n const emailsMetadata = {\n absolutePath: absolutePathToEmailsDirectory,\n relativePath: path.relative(\n baseDirectoryPath,\n absolutePathToEmailsDirectory,\n ),\n directoryName: absolutePathToEmailsDirectory.split(path.sep).pop()!,\n emailFilenames,\n subDirectories,\n } satisfies EmailsDirectory;\n\n return isSubDirectory\n ? mergeDirectoriesWithSubDirectories(emailsMetadata)\n : emailsMetadata;\n};\n"],"names":["userProjectLocation","process","env","REACT_EMAIL_INTERNAL_USER_PROJECT_LOCATION","previewServerLocation","REACT_EMAIL_INTERNAL_PREVIEW_SERVER_LOCATION","emailsDirectoryAbsolutePath","REACT_EMAIL_INTERNAL_EMAILS_DIR_ABSOLUTE_PATH","resendApiKey","REACT_EMAIL_INTERNAL_RESEND_API_KEY","isBuilding","NEXT_PUBLIC_IS_BUILDING","isPreviewDevelopment","NEXT_PUBLIC_IS_PREVIEW_DEVELOPMENT","getWorkspaceId","projectAbsolutePath","update","digest","slice","EmailsProvider","Error","useEmails","WorkspaceProvider","useWorkspaceId","isFileAnEmail","fullPath","fileHandle","promises","open","exception","console","warn","stat","isDirectory","close","ext","parse","includes","fileContents","readFile","hasES6DefaultExport","test","hasCommonJSExport","hasNamedExport","mergeDirectoriesWithSubDirectories","emailsDirectoryMetadata","currentResultingMergedDirectory","emailFilenames","length","subDirectories","onlySubDirectory","directoryName","join","getEmailsDirectoryMetadata","absolutePathToEmailsDirectory","keepFileExtensions","isSubDirectory","baseDirectoryPath","existsSync","dirents","readdir","withFileTypes","isEmailPredicates","Promise","all","map","dirent","name","filter","_","i","replace","extname","startsWith","direntAbsolutePath","emailsMetadata","absolutePath","relativePath","relative","split","sep","pop"],"mappings":"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","ignoreList":[0,5,7,8]}