@depup/react-email 5.2.10-depup.0 → 6.9.0-depup.1

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 (404) hide show
  1. package/CHANGELOG.md +313 -0
  2. package/README.md +11 -10
  3. package/changes.json +21 -17
  4. package/dev/CHANGELOG.md +2 -0
  5. package/dev/index.js +1 -1
  6. package/dev/package.json +1 -1
  7. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  8. package/dist/cli/index.mjs +7801 -0
  9. package/dist/components/body/body.cjs +39 -0
  10. package/dist/components/body/body.d.cts +7 -0
  11. package/dist/components/body/body.d.mts +7 -0
  12. package/dist/components/body/body.mjs +37 -0
  13. package/dist/components/body/index.d.cts +1 -0
  14. package/dist/components/body/index.d.mts +1 -0
  15. package/dist/components/body/margin-properties.cjs +30 -0
  16. package/dist/components/body/margin-properties.mjs +29 -0
  17. package/dist/components/button/button.cjs +64 -0
  18. package/dist/components/button/button.d.cts +13 -0
  19. package/dist/components/button/button.d.mts +13 -0
  20. package/dist/components/button/button.mjs +62 -0
  21. package/dist/components/button/index.d.cts +1 -0
  22. package/dist/components/button/index.d.mts +1 -0
  23. package/dist/components/button/utils/parse-padding.cjs +90 -0
  24. package/dist/components/button/utils/parse-padding.mjs +90 -0
  25. package/dist/components/button/utils/px-to-pt.cjs +4 -0
  26. package/dist/components/button/utils/px-to-pt.mjs +4 -0
  27. package/dist/components/code-block/code-block.cjs +79 -0
  28. package/dist/components/code-block/code-block.d.cts +20 -0
  29. package/dist/components/code-block/code-block.d.mts +20 -0
  30. package/dist/components/code-block/code-block.mjs +77 -0
  31. package/dist/components/code-block/index.d.cts +3 -0
  32. package/dist/components/code-block/index.d.mts +3 -0
  33. package/dist/components/code-block/languages-available.d.cts +4 -0
  34. package/dist/components/code-block/languages-available.d.mts +4 -0
  35. package/dist/components/code-block/prism.cjs +14564 -0
  36. package/dist/components/code-block/prism.mjs +14562 -0
  37. package/dist/components/code-block/themes.cjs +2578 -0
  38. package/dist/components/code-block/themes.d.cts +4877 -0
  39. package/dist/components/code-block/themes.d.mts +4877 -0
  40. package/dist/components/code-block/themes.mjs +2541 -0
  41. package/dist/components/code-inline/code-inline.cjs +43 -0
  42. package/dist/components/code-inline/code-inline.d.cts +12 -0
  43. package/dist/components/code-inline/code-inline.d.mts +12 -0
  44. package/dist/components/code-inline/code-inline.mjs +41 -0
  45. package/dist/components/code-inline/index.d.cts +1 -0
  46. package/dist/components/code-inline/index.d.mts +1 -0
  47. package/dist/components/column/column.cjs +19 -0
  48. package/dist/components/column/column.d.cts +7 -0
  49. package/dist/components/column/column.d.mts +7 -0
  50. package/dist/components/column/column.mjs +17 -0
  51. package/dist/components/column/index.d.cts +1 -0
  52. package/dist/components/column/index.d.mts +1 -0
  53. package/dist/components/container/container.cjs +42 -0
  54. package/dist/components/container/container.d.cts +7 -0
  55. package/dist/components/container/container.d.mts +7 -0
  56. package/dist/components/container/container.mjs +40 -0
  57. package/dist/components/container/index.d.cts +1 -0
  58. package/dist/components/container/index.d.mts +1 -0
  59. package/dist/components/element-marker.cjs +8 -0
  60. package/dist/components/element-marker.mjs +7 -0
  61. package/dist/components/font/font.cjs +22 -0
  62. package/dist/components/font/font.d.cts +26 -0
  63. package/dist/components/font/font.d.mts +26 -0
  64. package/dist/components/font/font.mjs +21 -0
  65. package/dist/components/font/index.d.cts +1 -0
  66. package/dist/components/font/index.d.mts +1 -0
  67. package/dist/components/head/head.cjs +20 -0
  68. package/dist/components/head/head.d.cts +7 -0
  69. package/dist/components/head/head.d.mts +7 -0
  70. package/dist/components/head/head.mjs +18 -0
  71. package/dist/components/head/index.d.cts +1 -0
  72. package/dist/components/head/index.d.mts +1 -0
  73. package/dist/components/heading/heading.cjs +30 -0
  74. package/dist/components/heading/heading.d.cts +22 -0
  75. package/dist/components/heading/heading.d.mts +22 -0
  76. package/dist/components/heading/heading.mjs +28 -0
  77. package/dist/components/heading/index.d.cts +1 -0
  78. package/dist/components/heading/index.d.mts +1 -0
  79. package/dist/components/heading/utils/as.d.cts +16 -0
  80. package/dist/components/heading/utils/as.d.mts +16 -0
  81. package/dist/components/heading/utils/spaces.cjs +24 -0
  82. package/dist/components/heading/utils/spaces.d.cts +14 -0
  83. package/dist/components/heading/utils/spaces.d.mts +14 -0
  84. package/dist/components/heading/utils/spaces.mjs +24 -0
  85. package/dist/components/hr/hr.cjs +21 -0
  86. package/dist/components/hr/hr.d.cts +7 -0
  87. package/dist/components/hr/hr.d.mts +7 -0
  88. package/dist/components/hr/hr.mjs +19 -0
  89. package/dist/components/hr/index.d.cts +1 -0
  90. package/dist/components/hr/index.d.mts +1 -0
  91. package/dist/components/html/html.cjs +15 -0
  92. package/dist/components/html/html.d.cts +7 -0
  93. package/dist/components/html/html.d.mts +7 -0
  94. package/dist/components/html/html.mjs +13 -0
  95. package/dist/components/html/index.d.cts +1 -0
  96. package/dist/components/html/index.d.mts +1 -0
  97. package/dist/components/img/img.cjs +25 -0
  98. package/dist/components/img/img.d.cts +7 -0
  99. package/dist/components/img/img.d.mts +7 -0
  100. package/dist/components/img/img.mjs +23 -0
  101. package/dist/components/img/index.d.cts +1 -0
  102. package/dist/components/img/index.d.mts +1 -0
  103. package/dist/components/index.d.cts +24 -0
  104. package/dist/components/index.d.mts +24 -0
  105. package/dist/components/link/index.d.cts +1 -0
  106. package/dist/components/link/index.d.mts +1 -0
  107. package/dist/components/link/link.cjs +21 -0
  108. package/dist/components/link/link.d.cts +7 -0
  109. package/dist/components/link/link.d.mts +7 -0
  110. package/dist/components/link/link.mjs +19 -0
  111. package/dist/components/markdown/index.d.cts +1 -0
  112. package/dist/components/markdown/index.d.mts +1 -0
  113. package/dist/components/markdown/markdown.cjs +101 -0
  114. package/dist/components/markdown/markdown.d.cts +16 -0
  115. package/dist/components/markdown/markdown.d.mts +16 -0
  116. package/dist/components/markdown/markdown.mjs +99 -0
  117. package/dist/components/markdown/styles.cjs +92 -0
  118. package/dist/components/markdown/styles.d.cts +31 -0
  119. package/dist/components/markdown/styles.d.mts +31 -0
  120. package/dist/components/markdown/styles.mjs +92 -0
  121. package/dist/components/markdown/utils/parse-css-in-js-to-inline-css.cjs +60 -0
  122. package/dist/components/markdown/utils/parse-css-in-js-to-inline-css.mjs +60 -0
  123. package/dist/components/preview/index.d.cts +1 -0
  124. package/dist/components/preview/index.d.mts +1 -0
  125. package/dist/components/preview/preview.cjs +34 -0
  126. package/dist/components/preview/preview.d.cts +21 -0
  127. package/dist/components/preview/preview.d.mts +21 -0
  128. package/dist/components/preview/preview.mjs +31 -0
  129. package/dist/components/row/index.d.cts +1 -0
  130. package/dist/components/row/index.d.mts +1 -0
  131. package/dist/components/row/row.cjs +30 -0
  132. package/dist/components/row/row.d.cts +11 -0
  133. package/dist/components/row/row.d.mts +11 -0
  134. package/dist/components/row/row.mjs +28 -0
  135. package/dist/components/section/index.d.cts +1 -0
  136. package/dist/components/section/index.d.mts +1 -0
  137. package/dist/components/section/section.cjs +36 -0
  138. package/dist/components/section/section.d.cts +7 -0
  139. package/dist/components/section/section.d.mts +7 -0
  140. package/dist/components/section/section.mjs +34 -0
  141. package/dist/components/tailwind/hooks/use-suspended-promise.cjs +15 -0
  142. package/dist/components/tailwind/hooks/use-suspended-promise.mjs +15 -0
  143. package/dist/components/tailwind/index.d.cts +4 -0
  144. package/dist/components/tailwind/index.d.mts +4 -0
  145. package/dist/components/tailwind/inline-styles.cjs +11 -0
  146. package/dist/components/tailwind/inline-styles.d.cts +6 -0
  147. package/dist/components/tailwind/inline-styles.d.mts +6 -0
  148. package/dist/components/tailwind/inline-styles.mjs +11 -0
  149. package/dist/components/tailwind/sanitize-stylesheet.cjs +11 -0
  150. package/dist/components/tailwind/sanitize-stylesheet.d.cts +6 -0
  151. package/dist/components/tailwind/sanitize-stylesheet.d.mts +6 -0
  152. package/dist/components/tailwind/sanitize-stylesheet.mjs +11 -0
  153. package/dist/components/tailwind/tailwind.cjs +120 -0
  154. package/dist/components/tailwind/tailwind.d.cts +25 -0
  155. package/dist/components/tailwind/tailwind.d.mts +25 -0
  156. package/dist/components/tailwind/tailwind.mjs +117 -0
  157. package/dist/components/tailwind/utils/compatibility/get-react-property.cjs +10 -0
  158. package/dist/components/tailwind/utils/compatibility/get-react-property.mjs +10 -0
  159. package/dist/components/tailwind/utils/compatibility/sanitize-class-name.cjs +26 -0
  160. package/dist/components/tailwind/utils/compatibility/sanitize-class-name.mjs +26 -0
  161. package/dist/components/tailwind/utils/css/downlevel-for-email-clients.cjs +126 -0
  162. package/dist/components/tailwind/utils/css/downlevel-for-email-clients.mjs +125 -0
  163. package/dist/components/tailwind/utils/css/extract-rules-per-class.cjs +45 -0
  164. package/dist/components/tailwind/utils/css/extract-rules-per-class.mjs +44 -0
  165. package/dist/components/tailwind/utils/css/get-custom-properties.cjs +35 -0
  166. package/dist/components/tailwind/utils/css/get-custom-properties.mjs +34 -0
  167. package/dist/components/tailwind/utils/css/is-part-inlinable.cjs +10 -0
  168. package/dist/components/tailwind/utils/css/is-part-inlinable.mjs +9 -0
  169. package/dist/components/tailwind/utils/css/is-rule-inlinable.cjs +10 -0
  170. package/dist/components/tailwind/utils/css/is-rule-inlinable.mjs +9 -0
  171. package/dist/components/tailwind/utils/css/make-inline-styles-for.cjs +52 -0
  172. package/dist/components/tailwind/utils/css/make-inline-styles-for.mjs +51 -0
  173. package/dist/components/tailwind/utils/css/resolve-all-css-variables.cjs +89 -0
  174. package/dist/components/tailwind/utils/css/resolve-all-css-variables.mjs +88 -0
  175. package/dist/components/tailwind/utils/css/resolve-calc-expressions.cjs +92 -0
  176. package/dist/components/tailwind/utils/css/resolve-calc-expressions.mjs +91 -0
  177. package/dist/components/tailwind/utils/css/sanitize-declarations.cjs +310 -0
  178. package/dist/components/tailwind/utils/css/sanitize-declarations.mjs +309 -0
  179. package/dist/components/tailwind/utils/css/sanitize-non-inlinable-rules.cjs +46 -0
  180. package/dist/components/tailwind/utils/css/sanitize-non-inlinable-rules.mjs +45 -0
  181. package/dist/components/tailwind/utils/css/split-mixed-rule.cjs +41 -0
  182. package/dist/components/tailwind/utils/css/split-mixed-rule.mjs +40 -0
  183. package/dist/components/tailwind/utils/css/strip-empty-tailwind-vars.cjs +52 -0
  184. package/dist/components/tailwind/utils/css/strip-empty-tailwind-vars.mjs +51 -0
  185. package/dist/components/tailwind/utils/css/unwrap-value.cjs +7 -0
  186. package/dist/components/tailwind/utils/css/unwrap-value.mjs +7 -0
  187. package/dist/components/tailwind/utils/react/is-component.cjs +7 -0
  188. package/dist/components/tailwind/utils/react/is-component.mjs +7 -0
  189. package/dist/components/tailwind/utils/react/map-react-tree.cjs +32 -0
  190. package/dist/components/tailwind/utils/react/map-react-tree.mjs +30 -0
  191. package/dist/components/tailwind/utils/tailwindcss/clone-element-with-inlined-styles.cjs +37 -0
  192. package/dist/components/tailwind/utils/tailwindcss/clone-element-with-inlined-styles.mjs +35 -0
  193. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.cjs +77 -0
  194. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.d.cts +19 -0
  195. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.d.mts +19 -0
  196. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.mjs +76 -0
  197. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/index.cjs +901 -0
  198. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/index.mjs +901 -0
  199. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/preflight.cjs +398 -0
  200. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/preflight.mjs +398 -0
  201. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/theme.cjs +467 -0
  202. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/theme.mjs +467 -0
  203. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/utilities.cjs +6 -0
  204. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/utilities.mjs +6 -0
  205. package/dist/components/tailwind/utils/text/from-dash-case-to-camel-case.cjs +6 -0
  206. package/dist/components/tailwind/utils/text/from-dash-case-to-camel-case.mjs +6 -0
  207. package/dist/components/text/index.d.cts +1 -0
  208. package/dist/components/text/index.d.mts +1 -0
  209. package/dist/components/text/text.cjs +43 -0
  210. package/dist/components/text/text.d.cts +7 -0
  211. package/dist/components/text/text.d.mts +7 -0
  212. package/dist/components/text/text.mjs +41 -0
  213. package/dist/components/text/utils/compute-margins.cjs +62 -0
  214. package/dist/components/text/utils/compute-margins.mjs +62 -0
  215. package/dist/index.cjs +95 -0
  216. package/dist/index.d.cts +26 -0
  217. package/dist/index.d.mts +26 -0
  218. package/dist/index.mjs +25 -7326
  219. package/package.json +64 -32
  220. package/src/components/body/__snapshots__/body.spec.tsx.snap +23 -0
  221. package/src/components/body/body.spec.tsx +78 -0
  222. package/src/components/body/body.tsx +62 -0
  223. package/src/components/body/index.ts +1 -0
  224. package/src/components/body/margin-properties.ts +27 -0
  225. package/src/components/button/button.spec.tsx +53 -0
  226. package/src/components/button/button.tsx +114 -0
  227. package/src/components/button/index.ts +1 -0
  228. package/src/components/button/utils/parse-padding.ts +137 -0
  229. package/src/components/button/utils/px-to-pt.ts +4 -0
  230. package/src/components/button/utils/utils.spec.ts +153 -0
  231. package/src/components/code-block/code-block.tsx +136 -0
  232. package/src/components/code-block/index.ts +3 -0
  233. package/src/components/code-block/languages-available.ts +402 -0
  234. package/src/components/code-block/prism.ts +15618 -0
  235. package/src/components/code-block/themes.ts +4929 -0
  236. package/src/components/code-inline/code-inline.tsx +60 -0
  237. package/src/components/code-inline/index.ts +1 -0
  238. package/src/components/column/column.spec.tsx +28 -0
  239. package/src/components/column/column.tsx +17 -0
  240. package/src/components/column/index.ts +1 -0
  241. package/src/components/container/container.spec.tsx +33 -0
  242. package/src/components/container/container.tsx +59 -0
  243. package/src/components/container/index.ts +1 -0
  244. package/src/components/element-marker.ts +5 -0
  245. package/src/components/font/font.spec.tsx +63 -0
  246. package/src/components/font/font.tsx +76 -0
  247. package/src/components/font/index.ts +1 -0
  248. package/src/components/head/head.spec.tsx +34 -0
  249. package/src/components/head/head.tsx +15 -0
  250. package/src/components/head/index.ts +1 -0
  251. package/src/components/heading/heading.spec.tsx +32 -0
  252. package/src/components/heading/heading.tsx +31 -0
  253. package/src/components/heading/index.ts +1 -0
  254. package/src/components/heading/utils/as.ts +26 -0
  255. package/src/components/heading/utils/spaces.ts +64 -0
  256. package/src/components/heading/utils/utils.spec.ts +70 -0
  257. package/src/components/hr/hr.spec.tsx +22 -0
  258. package/src/components/hr/hr.tsx +23 -0
  259. package/src/components/hr/index.ts +1 -0
  260. package/src/components/html/html.spec.tsx +26 -0
  261. package/src/components/html/html.tsx +13 -0
  262. package/src/components/html/index.ts +1 -0
  263. package/src/components/img/img.spec.tsx +30 -0
  264. package/src/components/img/img.tsx +27 -0
  265. package/src/components/img/index.ts +1 -0
  266. package/src/components/index.ts +19 -0
  267. package/src/components/link/index.ts +1 -0
  268. package/src/components/link/link.spec.tsx +37 -0
  269. package/src/components/link/link.tsx +24 -0
  270. package/src/components/markdown/index.ts +1 -0
  271. package/src/components/markdown/markdown.spec.tsx +221 -0
  272. package/src/components/markdown/markdown.tsx +239 -0
  273. package/src/components/markdown/styles.ts +130 -0
  274. package/src/components/markdown/utils/parse-css-in-js-to-inline-css.spec.ts +42 -0
  275. package/src/components/markdown/utils/parse-css-in-js-to-inline-css.ts +73 -0
  276. package/src/components/preview/index.ts +1 -0
  277. package/src/components/preview/preview.spec.tsx +49 -0
  278. package/src/components/preview/preview.tsx +56 -0
  279. package/src/components/row/index.ts +1 -0
  280. package/src/components/row/row.spec.tsx +28 -0
  281. package/src/components/row/row.tsx +33 -0
  282. package/src/components/section/index.ts +1 -0
  283. package/src/components/section/section.spec.tsx +58 -0
  284. package/src/components/section/section.tsx +59 -0
  285. package/src/components/tailwind/e2e/integrations.spec.ts +44 -0
  286. package/src/components/tailwind/e2e/nextjs/README.md +9 -0
  287. package/src/components/tailwind/e2e/nextjs/emails/vercel-invite-user.tsx +151 -0
  288. package/src/components/tailwind/e2e/nextjs/next.config.mjs +6 -0
  289. package/src/components/tailwind/e2e/nextjs/package.json +24 -0
  290. package/src/components/tailwind/e2e/nextjs/src/app/favicon.ico +0 -0
  291. package/src/components/tailwind/e2e/nextjs/src/app/layout.tsx +23 -0
  292. package/src/components/tailwind/e2e/nextjs/src/app/page.tsx +7 -0
  293. package/src/components/tailwind/e2e/nextjs/tsconfig.json +27 -0
  294. package/src/components/tailwind/e2e/vite/README.md +9 -0
  295. package/src/components/tailwind/e2e/vite/emails/vercel-invite-user.tsx +151 -0
  296. package/src/components/tailwind/e2e/vite/index.html +13 -0
  297. package/src/components/tailwind/e2e/vite/package.json +25 -0
  298. package/src/components/tailwind/e2e/vite/public/vite.svg +1 -0
  299. package/src/components/tailwind/e2e/vite/src/App.tsx +10 -0
  300. package/src/components/tailwind/e2e/vite/src/main.tsx +9 -0
  301. package/src/components/tailwind/e2e/vite/src/vite-env.d.ts +1 -0
  302. package/src/components/tailwind/e2e/vite/tsconfig.json +25 -0
  303. package/src/components/tailwind/e2e/vite/tsconfig.node.json +11 -0
  304. package/src/components/tailwind/e2e/vite/vite.config.ts +7 -0
  305. package/src/components/tailwind/hooks/use-suspended-promise.ts +34 -0
  306. package/src/components/tailwind/hooks/use-suspensed-promise.spec.ts +263 -0
  307. package/src/components/tailwind/index.ts +4 -0
  308. package/src/components/tailwind/inline-styles.spec.ts +49 -0
  309. package/src/components/tailwind/inline-styles.ts +21 -0
  310. package/src/components/tailwind/sanitize-stylesheet.ts +10 -0
  311. package/src/components/tailwind/tailwind.spec.tsx +1390 -0
  312. package/src/components/tailwind/tailwind.tsx +178 -0
  313. package/src/components/tailwind/utils/__snapshots__/quick-safe-render-to-string.spec.tsx.snap +3 -0
  314. package/src/components/tailwind/utils/compatibility/escape-class-name.spec.ts +17 -0
  315. package/src/components/tailwind/utils/compatibility/escape-class-name.ts +18 -0
  316. package/src/components/tailwind/utils/compatibility/get-react-property.ts +15 -0
  317. package/src/components/tailwind/utils/compatibility/sanitize-class-name.spec.ts +7 -0
  318. package/src/components/tailwind/utils/compatibility/sanitize-class-name.ts +36 -0
  319. package/src/components/tailwind/utils/compatibility/unescape-class.ts +3 -0
  320. package/src/components/tailwind/utils/css/__snapshots__/extract-rules-matching-classes.spec.ts.snap +23 -0
  321. package/src/components/tailwind/utils/css/__snapshots__/remove-rule-duplicates-from-root.spec.ts.snap +3 -0
  322. package/src/components/tailwind/utils/css/__snapshots__/sanitize-non-inlinable-classes.spec.ts.snap +7 -0
  323. package/src/components/tailwind/utils/css/downlevel-for-email-clients.spec.ts +119 -0
  324. package/src/components/tailwind/utils/css/downlevel-for-email-clients.ts +244 -0
  325. package/src/components/tailwind/utils/css/extract-rules-per-class.spec.ts +232 -0
  326. package/src/components/tailwind/utils/css/extract-rules-per-class.ts +76 -0
  327. package/src/components/tailwind/utils/css/get-custom-properties.ts +49 -0
  328. package/src/components/tailwind/utils/css/is-part-inlinable.ts +15 -0
  329. package/src/components/tailwind/utils/css/is-rule-inlinable.ts +15 -0
  330. package/src/components/tailwind/utils/css/make-inline-styles-for.spec.ts +124 -0
  331. package/src/components/tailwind/utils/css/make-inline-styles-for.ts +73 -0
  332. package/src/components/tailwind/utils/css/resolve-all-css-variables.spec.ts +296 -0
  333. package/src/components/tailwind/utils/css/resolve-all-css-variables.ts +236 -0
  334. package/src/components/tailwind/utils/css/resolve-calc-expressions.spec.ts +36 -0
  335. package/src/components/tailwind/utils/css/resolve-calc-expressions.ts +147 -0
  336. package/src/components/tailwind/utils/css/sanitize-declarations.spec.ts +491 -0
  337. package/src/components/tailwind/utils/css/sanitize-declarations.ts +443 -0
  338. package/src/components/tailwind/utils/css/sanitize-non-inlinable-rules.spec.ts +72 -0
  339. package/src/components/tailwind/utils/css/sanitize-non-inlinable-rules.ts +48 -0
  340. package/src/components/tailwind/utils/css/split-mixed-rule.ts +68 -0
  341. package/src/components/tailwind/utils/css/strip-empty-tailwind-vars.spec.ts +128 -0
  342. package/src/components/tailwind/utils/css/strip-empty-tailwind-vars.ts +70 -0
  343. package/src/components/tailwind/utils/css/unwrap-value.ts +9 -0
  344. package/src/components/tailwind/utils/react/is-component.ts +12 -0
  345. package/src/components/tailwind/utils/react/map-react-tree.spec.tsx +58 -0
  346. package/src/components/tailwind/utils/react/map-react-tree.ts +58 -0
  347. package/src/components/tailwind/utils/tailwindcss/clone-element-with-inlined-styles.ts +61 -0
  348. package/src/components/tailwind/utils/tailwindcss/setup-tailwind.spec.ts +25 -0
  349. package/src/components/tailwind/utils/tailwindcss/setup-tailwind.ts +121 -0
  350. package/src/components/tailwind/utils/tailwindcss/tailwind-stylesheets/index.ts +900 -0
  351. package/src/components/tailwind/utils/tailwindcss/tailwind-stylesheets/preflight.ts +397 -0
  352. package/src/components/tailwind/utils/tailwindcss/tailwind-stylesheets/theme.ts +466 -0
  353. package/src/components/tailwind/utils/tailwindcss/tailwind-stylesheets/utilities.ts +5 -0
  354. package/src/components/tailwind/utils/text/from-dash-case-to-camel-case.ts +3 -0
  355. package/src/components/text/index.ts +1 -0
  356. package/src/components/text/text.spec.tsx +35 -0
  357. package/src/components/text/text.tsx +50 -0
  358. package/src/components/text/utils/compute-margins.spec.ts +67 -0
  359. package/src/components/text/utils/compute-margins.ts +102 -0
  360. package/src/index.ts +2 -110
  361. package/tsconfig.json +9 -4
  362. package/tsdown.config.ts +51 -6
  363. package/vitest.config.ts +1 -0
  364. package/vitest.e2e.config.ts +17 -0
  365. package/src/commands/build.ts +0 -269
  366. package/src/commands/dev.ts +0 -27
  367. package/src/commands/export.ts +0 -204
  368. package/src/commands/resend/reset.ts +0 -8
  369. package/src/commands/resend/setup.ts +0 -29
  370. package/src/commands/start.ts +0 -38
  371. package/src/utils/conf.ts +0 -9
  372. package/src/utils/esbuild/escape-string-for-regex.ts +0 -3
  373. package/src/utils/esbuild/renderring-utilities-exporter.ts +0 -63
  374. package/src/utils/get-emails-directory-metadata.spec.ts +0 -82
  375. package/src/utils/get-emails-directory-metadata.ts +0 -140
  376. package/src/utils/get-preview-server-location.ts +0 -50
  377. package/src/utils/index.ts +0 -2
  378. package/src/utils/packageJson.ts +0 -4
  379. package/src/utils/preview/get-env-variables-for-preview-app.ts +0 -20
  380. package/src/utils/preview/hot-reloading/create-dependency-graph.spec.ts +0 -226
  381. package/src/utils/preview/hot-reloading/create-dependency-graph.ts +0 -343
  382. package/src/utils/preview/hot-reloading/get-imported-modules.spec.ts +0 -151
  383. package/src/utils/preview/hot-reloading/get-imported-modules.ts +0 -49
  384. package/src/utils/preview/hot-reloading/resolve-path-aliases.spec.ts +0 -11
  385. package/src/utils/preview/hot-reloading/resolve-path-aliases.ts +0 -32
  386. package/src/utils/preview/hot-reloading/setup-hot-reloading.ts +0 -121
  387. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/data-to-import.json +0 -1
  388. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/file-a.ts +0 -5
  389. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/file-b.ts +0 -5
  390. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/general-importing-file.ts +0 -9
  391. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/outer-dependency.ts +0 -3
  392. package/src/utils/preview/hot-reloading/test/dependency-graph/inner/path-aliases.ts +0 -1
  393. package/src/utils/preview/hot-reloading/test/dependency-graph/outer.ts +0 -5
  394. package/src/utils/preview/hot-reloading/test/some-file.ts +0 -0
  395. package/src/utils/preview/hot-reloading/test/tsconfig.json +0 -8
  396. package/src/utils/preview/index.ts +0 -2
  397. package/src/utils/preview/serve-static-file.ts +0 -51
  398. package/src/utils/preview/start-dev-server.ts +0 -252
  399. package/src/utils/register-spinner-autostopping.ts +0 -28
  400. package/src/utils/style-text.ts +0 -11
  401. package/src/utils/tree.spec.ts +0 -29
  402. package/src/utils/tree.ts +0 -76
  403. package/src/utils/types/hot-reload-change.ts +0 -6
  404. package/src/utils/types/hot-reload-event.ts +0 -3
@@ -1,151 +0,0 @@
1
- import { promises as fs } from 'node:fs';
2
- import { getImportedModules } from './get-imported-modules.js';
3
-
4
- vi.mock('@babel/traverse', async () => {
5
- const traverse = await vi.importActual('@babel/traverse');
6
- return { default: traverse };
7
- });
8
-
9
- describe('getImportedModules()', () => {
10
- it('works with this test file', async () => {
11
- const contents = await fs.readFile(import.meta.filename, 'utf8');
12
-
13
- expect(getImportedModules(contents)).toEqual([
14
- 'node:fs',
15
- './get-imported-modules.js',
16
- ]);
17
- });
18
-
19
- it('works with direct exports', () => {
20
- const contents = `export * from './component-a';
21
- export { ComponentB } from './component-b';
22
-
23
- import { ComponentC } from './component-c';
24
- export { ComponentC }`;
25
- expect(getImportedModules(contents)).toEqual([
26
- './component-a',
27
- './component-b',
28
- './component-c',
29
- ]);
30
- });
31
-
32
- it('works with regular imports and double quotes', () => {
33
- const contents = `import {
34
- Body,
35
- Button,
36
- Container,
37
- Column,
38
- Head,
39
- Heading,
40
- Hr,
41
- Html,
42
- Img,
43
- Link,
44
- Preview,
45
- Row,
46
- Section,
47
- Text,
48
- } from "@react-email/components";
49
- import { Tailwind } from "@react-email/tailwind";
50
- import { Component } from '../../my-component';
51
-
52
- import * as React from "react";
53
- `;
54
- expect(getImportedModules(contents)).toEqual([
55
- '@react-email/components',
56
- '@react-email/tailwind',
57
- '../../my-component',
58
- 'react',
59
- ]);
60
- });
61
-
62
- it('works with regular imports and single quotes', () => {
63
- const contents = `import {
64
- Body,
65
- Button,
66
- Container,
67
- Column,
68
- Head,
69
- Heading,
70
- Hr,
71
- Html,
72
- Img,
73
- Link,
74
- Preview,
75
- Row,
76
- Section,
77
- Text,
78
- } from '@react-email/components';
79
- import { Tailwind } from '@react-email/tailwind';
80
- import { Component } from '../../my-component';
81
-
82
- import * as React from 'react';
83
- `;
84
- expect(getImportedModules(contents)).toEqual([
85
- '@react-email/components',
86
- '@react-email/tailwind',
87
- '../../my-component',
88
- 'react',
89
- ]);
90
- });
91
-
92
- it('works with commonjs require with double quotes', () => {
93
- const contents = `const {
94
- Body,
95
- Button,
96
- Container,
97
- Column,
98
- Head,
99
- Heading,
100
- Hr,
101
- Html,
102
- Img,
103
- Link,
104
- Preview,
105
- Row,
106
- Section,
107
- Text,
108
- } = require("@react-email/components");
109
- const { Tailwind } = require("@react-email/tailwind");
110
- const { Component } = require("../../my-component");
111
-
112
- const React = require("react");
113
- `;
114
- expect(getImportedModules(contents)).toEqual([
115
- '@react-email/components',
116
- '@react-email/tailwind',
117
- '../../my-component',
118
- 'react',
119
- ]);
120
- });
121
-
122
- it('works with commonjs require with single quotes', () => {
123
- const contents = `const {
124
- Body,
125
- Button,
126
- Container,
127
- Column,
128
- Head,
129
- Heading,
130
- Hr,
131
- Html,
132
- Img,
133
- Link,
134
- Preview,
135
- Row,
136
- Section,
137
- Text,
138
- } = require('@react-email/components');
139
- const { Tailwind } = require('@react-email/tailwind');
140
- const { Component } = require('../../my-component');
141
-
142
- const React = require('react');
143
- `;
144
- expect(getImportedModules(contents)).toEqual([
145
- '@react-email/components',
146
- '@react-email/tailwind',
147
- '../../my-component',
148
- 'react',
149
- ]);
150
- });
151
- });
@@ -1,49 +0,0 @@
1
- import { parse } from '@babel/parser';
2
-
3
- import traverseModule from '@babel/traverse';
4
-
5
- const traverse =
6
- // we keep this check here so that this still works with the dev:preview
7
- // script's use of tsx
8
- typeof traverseModule === 'function'
9
- ? traverseModule
10
- : traverseModule.default;
11
-
12
- export const getImportedModules = (contents: string) => {
13
- const importedPaths: string[] = [];
14
- const parsedContents = parse(contents, {
15
- sourceType: 'unambiguous',
16
- strictMode: false,
17
- errorRecovery: true,
18
- plugins: ['jsx', 'typescript', 'decorators'],
19
- });
20
-
21
- traverse(parsedContents, {
22
- ImportDeclaration({ node }) {
23
- importedPaths.push(node.source.value);
24
- },
25
- ExportAllDeclaration({ node }) {
26
- importedPaths.push(node.source.value);
27
- },
28
- ExportNamedDeclaration({ node }) {
29
- if (node.source) {
30
- importedPaths.push(node.source.value);
31
- }
32
- },
33
- TSExternalModuleReference({ node }) {
34
- importedPaths.push(node.expression.value);
35
- },
36
- CallExpression({ node }) {
37
- if ('name' in node.callee && node.callee.name === 'require') {
38
- if (node.arguments.length === 1) {
39
- const importPathNode = node.arguments[0]!;
40
- if (importPathNode!.type === 'StringLiteral') {
41
- importedPaths.push(importPathNode.value);
42
- }
43
- }
44
- }
45
- },
46
- });
47
-
48
- return importedPaths;
49
- };
@@ -1,11 +0,0 @@
1
- import path from 'node:path';
2
- import { resolvePathAliases } from './resolve-path-aliases.js';
3
-
4
- test('resolveImports()', async () => {
5
- expect(
6
- resolvePathAliases(
7
- ['@/some-file'],
8
- path.resolve(import.meta.dirname, './test'),
9
- ),
10
- ).toEqual(['./some-file']);
11
- });
@@ -1,32 +0,0 @@
1
- import path from 'node:path';
2
- import { createMatchPath, loadConfig } from 'tsconfig-paths';
3
-
4
- export const resolvePathAliases = (
5
- importPaths: string[],
6
- projectPath: string,
7
- ) => {
8
- const configLoadResult = loadConfig(projectPath);
9
-
10
- if (configLoadResult.resultType === 'success') {
11
- const matchPath = createMatchPath(
12
- configLoadResult.absoluteBaseUrl,
13
- configLoadResult.paths,
14
- );
15
- return importPaths.map((importedPath) => {
16
- const unaliasedPath = matchPath(importedPath, undefined, undefined, [
17
- '.tsx',
18
- '.ts',
19
- '.js',
20
- '.jsx',
21
- '.cjs',
22
- '.mjs',
23
- ]);
24
- if (unaliasedPath) {
25
- return `./${path.relative(projectPath, unaliasedPath)}`;
26
- }
27
- return importedPath;
28
- });
29
- }
30
-
31
- return importPaths;
32
- };
@@ -1,121 +0,0 @@
1
- import type http from 'node:http';
2
- import path from 'node:path';
3
- import { watch } from 'chokidar';
4
- import debounce from 'debounce';
5
- import { type Socket, Server as SocketServer } from 'socket.io';
6
- import type { HotReloadChange } from '../../types/hot-reload-change.js';
7
- import { createDependencyGraph } from './create-dependency-graph.js';
8
-
9
- export const setupHotreloading = async (
10
- devServer: http.Server,
11
- emailDirRelativePath: string,
12
- ) => {
13
- let clients: Socket[] = [];
14
- const io = new SocketServer(devServer);
15
-
16
- io.on('connection', (client) => {
17
- clients.push(client);
18
-
19
- client.on('disconnect', () => {
20
- clients = clients.filter((item) => item !== client);
21
- });
22
- });
23
-
24
- // used to keep track of all changes
25
- // and send them at once to the preview app through the web socket
26
- let changes = [] as HotReloadChange[];
27
-
28
- const reload = debounce(() => {
29
- // we detect these using the useHotreload hook on the Next app
30
- clients.forEach((client) => {
31
- client.emit(
32
- 'reload',
33
- changes.filter((change) =>
34
- // Ensures only changes inside the emails directory are emitted
35
- path
36
- .resolve(absolutePathToEmailsDirectory, change.filename)
37
- .startsWith(absolutePathToEmailsDirectory),
38
- ),
39
- );
40
- });
41
-
42
- changes = [];
43
- }, 150);
44
-
45
- const absolutePathToEmailsDirectory = path.resolve(
46
- process.cwd(),
47
- emailDirRelativePath,
48
- );
49
-
50
- const [dependencyGraph, updateDependencyGraph, { resolveDependentsOf }] =
51
- await createDependencyGraph(absolutePathToEmailsDirectory);
52
-
53
- const watcher = watch('', {
54
- ignoreInitial: true,
55
- cwd: absolutePathToEmailsDirectory,
56
- });
57
-
58
- const getFilesOutsideEmailsDirectory = () =>
59
- Object.keys(dependencyGraph).filter((p) =>
60
- path.relative(absolutePathToEmailsDirectory, p).startsWith('..'),
61
- );
62
- let filesOutsideEmailsDirectory = getFilesOutsideEmailsDirectory();
63
- // adds in to be watched separately all of the files that are outside of
64
- // the user's emails directory
65
- for (const p of filesOutsideEmailsDirectory) {
66
- watcher.add(p);
67
- }
68
-
69
- const exit = async () => {
70
- await watcher.close();
71
- };
72
- process.on('SIGINT', exit);
73
- process.on('uncaughtException', exit);
74
-
75
- watcher.on('all', async (event, relativePathToChangeTarget) => {
76
- const file = relativePathToChangeTarget.split(path.sep);
77
- if (file.length === 0) {
78
- return;
79
- }
80
- const pathToChangeTarget = path.resolve(
81
- absolutePathToEmailsDirectory,
82
- relativePathToChangeTarget,
83
- );
84
-
85
- await updateDependencyGraph(event, pathToChangeTarget);
86
-
87
- const newFilesOutsideEmailsDirectory = getFilesOutsideEmailsDirectory();
88
- // updates the files outside of the user's emails directory by unwatching
89
- // the inexistent ones and watching the new ones
90
- //
91
- // this is necessary to avoid the issue mentioned here https://github.com/resend/react-email/issues/1433#issuecomment-2177515290
92
- for (const p of filesOutsideEmailsDirectory) {
93
- if (!newFilesOutsideEmailsDirectory.includes(p)) {
94
- watcher.unwatch(p);
95
- }
96
- }
97
- for (const p of newFilesOutsideEmailsDirectory) {
98
- if (!filesOutsideEmailsDirectory.includes(p)) {
99
- watcher.add(p);
100
- }
101
- }
102
- filesOutsideEmailsDirectory = newFilesOutsideEmailsDirectory;
103
-
104
- changes.push({
105
- event,
106
- filename: relativePathToChangeTarget,
107
- });
108
-
109
- // These dependents are dependents resolved recursively, so even dependents of dependents
110
- // will be notified of this change so that we ensure that things are updated in the preview.
111
- for (const dependentPath of resolveDependentsOf(pathToChangeTarget)) {
112
- changes.push({
113
- event: 'change' as const,
114
- filename: path.relative(absolutePathToEmailsDirectory, dependentPath),
115
- });
116
- }
117
- reload();
118
- });
119
-
120
- return watcher;
121
- };
@@ -1,5 +0,0 @@
1
- /** biome-ignore-all lint/correctness/noUnusedImports: used in testing */
2
- /** biome-ignore-all lint/complexity/noUselessEmptyExport: used in testing */
3
- import * as _ from './file-b';
4
-
5
- export {};
@@ -1,5 +0,0 @@
1
- /** biome-ignore-all lint/correctness/noUnusedImports: used in testing */
2
- /** biome-ignore-all lint/complexity/noUselessEmptyExport: used in testing */
3
- import * as _ from './file-a';
4
-
5
- export {};
@@ -1,9 +0,0 @@
1
- /** biome-ignore-all lint/correctness/noUnusedImports: used in testing */
2
- /** biome-ignore-all lint/complexity/noUselessEmptyExport: used in testing */
3
-
4
- import _os from 'node:os';
5
- import _path from 'node:path';
6
- import * as _outer from '../outer';
7
- import _json from './data-to-import.json';
8
- import * as _a from './file-a';
9
- import * as _b from './file-b';
@@ -1,3 +0,0 @@
1
- /** biome-ignore-all lint/correctness/noUnusedImports: used in testing */
2
- /** biome-ignore-all lint/complexity/noUselessEmptyExport: used in testing */
3
- export {};
@@ -1,5 +0,0 @@
1
- /** biome-ignore-all lint/correctness/noUnusedImports: used in testing */
2
- /** biome-ignore-all lint/complexity/noUselessEmptyExport: used in testing */
3
- import * as _dependency from './inner/outer-dependency';
4
-
5
- export {};
File without changes
@@ -1,8 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "paths": {
4
- "@/*": ["./*"]
5
- }
6
- },
7
- "include": ["**/*.ts", "**/*.tsx"]
8
- }
@@ -1,2 +0,0 @@
1
- export * from './hot-reloading/setup-hot-reloading.js';
2
- export * from './start-dev-server.js';
@@ -1,51 +0,0 @@
1
- import { existsSync, promises as fs } from 'node:fs';
2
- import type http from 'node:http';
3
- import path from 'node:path';
4
- import type url from 'node:url';
5
- import { lookup } from 'mime-types';
6
-
7
- export const serveStaticFile = async (
8
- res: http.ServerResponse,
9
- parsedUrl: url.UrlWithParsedQuery,
10
- staticDirRelativePath: string,
11
- ) => {
12
- const pathname = parsedUrl.pathname!.replace('/static', './static');
13
- const ext = path.parse(pathname).ext;
14
-
15
- const staticBaseDir = path.resolve(process.cwd(), staticDirRelativePath);
16
- const fileAbsolutePath = path.resolve(staticBaseDir, pathname);
17
- if (!fileAbsolutePath.startsWith(staticBaseDir)) {
18
- res.statusCode = 403;
19
- res.end();
20
- return;
21
- }
22
-
23
- try {
24
- const fileHandle = await fs.open(fileAbsolutePath, 'r');
25
-
26
- const fileData = await fs.readFile(fileHandle);
27
-
28
- // if the file is found, set Content-type and send data
29
- res.setHeader('Content-type', lookup(ext) || 'text/plain');
30
- res.end(fileData);
31
-
32
- fileHandle.close();
33
- } catch (exception) {
34
- if (!existsSync(fileAbsolutePath)) {
35
- res.statusCode = 404;
36
- res.end();
37
- } else {
38
- const sanitizedFilePath = fileAbsolutePath.replace(/\n|\r/g, '');
39
- console.error(
40
- `Could not read file at %s to be served, here's the exception:`,
41
- sanitizedFilePath,
42
- exception,
43
- );
44
-
45
- res.statusCode = 500;
46
- res.end(
47
- 'Could not read file to be served! Check your terminal for more information.',
48
- );
49
- }
50
- }
51
- };