react-email 6.6.9 → 6.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  3. package/dist/cli/index.mjs +12 -11
  4. package/dist/components/body/body.cjs +39 -0
  5. package/dist/components/body/body.d.cts +7 -0
  6. package/dist/components/body/body.d.mts +7 -0
  7. package/dist/components/body/body.mjs +37 -0
  8. package/dist/components/body/index.d.cts +1 -0
  9. package/dist/components/body/index.d.mts +1 -0
  10. package/dist/components/body/margin-properties.cjs +30 -0
  11. package/dist/components/body/margin-properties.mjs +29 -0
  12. package/dist/components/button/button.cjs +64 -0
  13. package/dist/components/button/button.d.cts +13 -0
  14. package/dist/components/button/button.d.mts +13 -0
  15. package/dist/components/button/button.mjs +62 -0
  16. package/dist/components/button/index.d.cts +1 -0
  17. package/dist/components/button/index.d.mts +1 -0
  18. package/dist/components/button/utils/parse-padding.cjs +90 -0
  19. package/dist/components/button/utils/parse-padding.mjs +90 -0
  20. package/dist/components/button/utils/px-to-pt.cjs +4 -0
  21. package/dist/components/button/utils/px-to-pt.mjs +4 -0
  22. package/dist/components/code-block/code-block.cjs +79 -0
  23. package/dist/components/code-block/code-block.d.cts +20 -0
  24. package/dist/components/code-block/code-block.d.mts +20 -0
  25. package/dist/components/code-block/code-block.mjs +77 -0
  26. package/dist/components/code-block/index.d.cts +3 -0
  27. package/dist/components/code-block/index.d.mts +3 -0
  28. package/dist/components/code-block/languages-available.d.cts +4 -0
  29. package/dist/components/code-block/languages-available.d.mts +4 -0
  30. package/dist/components/code-block/prism.cjs +14564 -0
  31. package/dist/components/code-block/prism.mjs +14562 -0
  32. package/dist/components/code-block/themes.cjs +2578 -0
  33. package/dist/components/code-block/themes.d.cts +4877 -0
  34. package/dist/components/code-block/themes.d.mts +4877 -0
  35. package/dist/components/code-block/themes.mjs +2541 -0
  36. package/dist/components/code-inline/code-inline.cjs +43 -0
  37. package/dist/components/code-inline/code-inline.d.cts +12 -0
  38. package/dist/components/code-inline/code-inline.d.mts +12 -0
  39. package/dist/components/code-inline/code-inline.mjs +41 -0
  40. package/dist/components/code-inline/index.d.cts +1 -0
  41. package/dist/components/code-inline/index.d.mts +1 -0
  42. package/dist/components/column/column.cjs +19 -0
  43. package/dist/components/column/column.d.cts +7 -0
  44. package/dist/components/column/column.d.mts +7 -0
  45. package/dist/components/column/column.mjs +17 -0
  46. package/dist/components/column/index.d.cts +1 -0
  47. package/dist/components/column/index.d.mts +1 -0
  48. package/dist/components/container/container.cjs +42 -0
  49. package/dist/components/container/container.d.cts +7 -0
  50. package/dist/components/container/container.d.mts +7 -0
  51. package/dist/components/container/container.mjs +40 -0
  52. package/dist/components/container/index.d.cts +1 -0
  53. package/dist/components/container/index.d.mts +1 -0
  54. package/dist/components/element-marker.cjs +8 -0
  55. package/dist/components/element-marker.mjs +7 -0
  56. package/dist/components/font/font.cjs +22 -0
  57. package/dist/components/font/font.d.cts +26 -0
  58. package/dist/components/font/font.d.mts +26 -0
  59. package/dist/components/font/font.mjs +21 -0
  60. package/dist/components/font/index.d.cts +1 -0
  61. package/dist/components/font/index.d.mts +1 -0
  62. package/dist/components/head/head.cjs +20 -0
  63. package/dist/components/head/head.d.cts +7 -0
  64. package/dist/components/head/head.d.mts +7 -0
  65. package/dist/components/head/head.mjs +18 -0
  66. package/dist/components/head/index.d.cts +1 -0
  67. package/dist/components/head/index.d.mts +1 -0
  68. package/dist/components/heading/heading.cjs +30 -0
  69. package/dist/components/heading/heading.d.cts +22 -0
  70. package/dist/components/heading/heading.d.mts +22 -0
  71. package/dist/components/heading/heading.mjs +28 -0
  72. package/dist/components/heading/index.d.cts +1 -0
  73. package/dist/components/heading/index.d.mts +1 -0
  74. package/dist/components/heading/utils/as.d.cts +16 -0
  75. package/dist/components/heading/utils/as.d.mts +16 -0
  76. package/dist/components/heading/utils/spaces.cjs +24 -0
  77. package/dist/components/heading/utils/spaces.d.cts +14 -0
  78. package/dist/components/heading/utils/spaces.d.mts +14 -0
  79. package/dist/components/heading/utils/spaces.mjs +24 -0
  80. package/dist/components/hr/hr.cjs +21 -0
  81. package/dist/components/hr/hr.d.cts +7 -0
  82. package/dist/components/hr/hr.d.mts +7 -0
  83. package/dist/components/hr/hr.mjs +19 -0
  84. package/dist/components/hr/index.d.cts +1 -0
  85. package/dist/components/hr/index.d.mts +1 -0
  86. package/dist/components/html/html.cjs +15 -0
  87. package/dist/components/html/html.d.cts +7 -0
  88. package/dist/components/html/html.d.mts +7 -0
  89. package/dist/components/html/html.mjs +13 -0
  90. package/dist/components/html/index.d.cts +1 -0
  91. package/dist/components/html/index.d.mts +1 -0
  92. package/dist/components/img/img.cjs +25 -0
  93. package/dist/components/img/img.d.cts +7 -0
  94. package/dist/components/img/img.d.mts +7 -0
  95. package/dist/components/img/img.mjs +23 -0
  96. package/dist/components/img/index.d.cts +1 -0
  97. package/dist/components/img/index.d.mts +1 -0
  98. package/dist/components/index.d.cts +24 -0
  99. package/dist/components/index.d.mts +24 -0
  100. package/dist/components/link/index.d.cts +1 -0
  101. package/dist/components/link/index.d.mts +1 -0
  102. package/dist/components/link/link.cjs +21 -0
  103. package/dist/components/link/link.d.cts +7 -0
  104. package/dist/components/link/link.d.mts +7 -0
  105. package/dist/components/link/link.mjs +19 -0
  106. package/dist/components/markdown/index.d.cts +1 -0
  107. package/dist/components/markdown/index.d.mts +1 -0
  108. package/dist/components/markdown/markdown.cjs +101 -0
  109. package/dist/components/markdown/markdown.d.cts +16 -0
  110. package/dist/components/markdown/markdown.d.mts +16 -0
  111. package/dist/components/markdown/markdown.mjs +99 -0
  112. package/dist/components/markdown/styles.cjs +92 -0
  113. package/dist/components/markdown/styles.d.cts +31 -0
  114. package/dist/components/markdown/styles.d.mts +31 -0
  115. package/dist/components/markdown/styles.mjs +92 -0
  116. package/dist/components/markdown/utils/parse-css-in-js-to-inline-css.cjs +60 -0
  117. package/dist/components/markdown/utils/parse-css-in-js-to-inline-css.mjs +60 -0
  118. package/dist/components/preview/index.d.cts +1 -0
  119. package/dist/components/preview/index.d.mts +1 -0
  120. package/dist/components/preview/preview.cjs +34 -0
  121. package/dist/components/preview/preview.d.cts +21 -0
  122. package/dist/components/preview/preview.d.mts +21 -0
  123. package/dist/components/preview/preview.mjs +31 -0
  124. package/dist/components/row/index.d.cts +1 -0
  125. package/dist/components/row/index.d.mts +1 -0
  126. package/dist/components/row/row.cjs +30 -0
  127. package/dist/components/row/row.d.cts +11 -0
  128. package/dist/components/row/row.d.mts +11 -0
  129. package/dist/components/row/row.mjs +28 -0
  130. package/dist/components/section/index.d.cts +1 -0
  131. package/dist/components/section/index.d.mts +1 -0
  132. package/dist/components/section/section.cjs +36 -0
  133. package/dist/components/section/section.d.cts +7 -0
  134. package/dist/components/section/section.d.mts +7 -0
  135. package/dist/components/section/section.mjs +34 -0
  136. package/dist/components/tailwind/hooks/use-suspended-promise.cjs +15 -0
  137. package/dist/components/tailwind/hooks/use-suspended-promise.mjs +15 -0
  138. package/dist/components/tailwind/index.d.cts +4 -0
  139. package/dist/components/tailwind/index.d.mts +4 -0
  140. package/dist/components/tailwind/inline-styles.cjs +11 -0
  141. package/dist/components/tailwind/inline-styles.d.cts +6 -0
  142. package/dist/components/tailwind/inline-styles.d.mts +6 -0
  143. package/dist/components/tailwind/inline-styles.mjs +11 -0
  144. package/dist/components/tailwind/sanitize-stylesheet.cjs +11 -0
  145. package/dist/components/tailwind/sanitize-stylesheet.d.cts +6 -0
  146. package/dist/components/tailwind/sanitize-stylesheet.d.mts +6 -0
  147. package/dist/components/tailwind/sanitize-stylesheet.mjs +11 -0
  148. package/dist/components/tailwind/tailwind.cjs +120 -0
  149. package/dist/components/tailwind/tailwind.d.cts +25 -0
  150. package/dist/components/tailwind/tailwind.d.mts +25 -0
  151. package/dist/components/tailwind/tailwind.mjs +117 -0
  152. package/dist/components/tailwind/utils/compatibility/get-react-property.cjs +10 -0
  153. package/dist/components/tailwind/utils/compatibility/get-react-property.mjs +10 -0
  154. package/dist/components/tailwind/utils/compatibility/sanitize-class-name.cjs +26 -0
  155. package/dist/components/tailwind/utils/compatibility/sanitize-class-name.mjs +26 -0
  156. package/dist/components/tailwind/utils/css/downlevel-for-email-clients.cjs +126 -0
  157. package/dist/components/tailwind/utils/css/downlevel-for-email-clients.mjs +125 -0
  158. package/dist/components/tailwind/utils/css/extract-rules-per-class.cjs +45 -0
  159. package/dist/components/tailwind/utils/css/extract-rules-per-class.mjs +44 -0
  160. package/dist/components/tailwind/utils/css/get-custom-properties.cjs +35 -0
  161. package/dist/components/tailwind/utils/css/get-custom-properties.mjs +34 -0
  162. package/dist/components/tailwind/utils/css/is-part-inlinable.cjs +10 -0
  163. package/dist/components/tailwind/utils/css/is-part-inlinable.mjs +9 -0
  164. package/dist/components/tailwind/utils/css/is-rule-inlinable.cjs +10 -0
  165. package/dist/components/tailwind/utils/css/is-rule-inlinable.mjs +9 -0
  166. package/dist/components/tailwind/utils/css/make-inline-styles-for.cjs +52 -0
  167. package/dist/components/tailwind/utils/css/make-inline-styles-for.mjs +51 -0
  168. package/dist/components/tailwind/utils/css/resolve-all-css-variables.cjs +89 -0
  169. package/dist/components/tailwind/utils/css/resolve-all-css-variables.mjs +88 -0
  170. package/dist/components/tailwind/utils/css/resolve-calc-expressions.cjs +92 -0
  171. package/dist/components/tailwind/utils/css/resolve-calc-expressions.mjs +91 -0
  172. package/dist/components/tailwind/utils/css/sanitize-declarations.cjs +310 -0
  173. package/dist/components/tailwind/utils/css/sanitize-declarations.mjs +309 -0
  174. package/dist/components/tailwind/utils/css/sanitize-non-inlinable-rules.cjs +46 -0
  175. package/dist/components/tailwind/utils/css/sanitize-non-inlinable-rules.mjs +45 -0
  176. package/dist/components/tailwind/utils/css/split-mixed-rule.cjs +41 -0
  177. package/dist/components/tailwind/utils/css/split-mixed-rule.mjs +40 -0
  178. package/dist/components/tailwind/utils/css/strip-empty-tailwind-vars.cjs +52 -0
  179. package/dist/components/tailwind/utils/css/strip-empty-tailwind-vars.mjs +51 -0
  180. package/dist/components/tailwind/utils/css/unwrap-value.cjs +7 -0
  181. package/dist/components/tailwind/utils/css/unwrap-value.mjs +7 -0
  182. package/dist/components/tailwind/utils/react/is-component.cjs +7 -0
  183. package/dist/components/tailwind/utils/react/is-component.mjs +7 -0
  184. package/dist/components/tailwind/utils/react/map-react-tree.cjs +32 -0
  185. package/dist/components/tailwind/utils/react/map-react-tree.mjs +30 -0
  186. package/dist/components/tailwind/utils/tailwindcss/clone-element-with-inlined-styles.cjs +37 -0
  187. package/dist/components/tailwind/utils/tailwindcss/clone-element-with-inlined-styles.mjs +35 -0
  188. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.cjs +77 -0
  189. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.d.cts +19 -0
  190. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.d.mts +19 -0
  191. package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.mjs +76 -0
  192. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/index.cjs +901 -0
  193. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/index.mjs +901 -0
  194. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/preflight.cjs +398 -0
  195. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/preflight.mjs +398 -0
  196. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/theme.cjs +467 -0
  197. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/theme.mjs +467 -0
  198. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/utilities.cjs +6 -0
  199. package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/utilities.mjs +6 -0
  200. package/dist/components/tailwind/utils/text/from-dash-case-to-camel-case.cjs +6 -0
  201. package/dist/components/tailwind/utils/text/from-dash-case-to-camel-case.mjs +6 -0
  202. package/dist/components/text/index.d.cts +1 -0
  203. package/dist/components/text/index.d.mts +1 -0
  204. package/dist/components/text/text.cjs +43 -0
  205. package/dist/components/text/text.d.cts +7 -0
  206. package/dist/components/text/text.d.mts +7 -0
  207. package/dist/components/text/text.mjs +41 -0
  208. package/dist/components/text/utils/compute-margins.cjs +62 -0
  209. package/dist/components/text/utils/compute-margins.mjs +62 -0
  210. package/dist/index.cjs +85 -40759
  211. package/dist/index.d.cts +24 -5132
  212. package/dist/index.d.mts +24 -5132
  213. package/dist/index.mjs +23 -40676
  214. package/package.json +7 -6
  215. package/src/components/body/body.tsx +2 -0
  216. package/src/components/button/button.tsx +2 -0
  217. package/src/components/code-block/code-block.tsx +2 -0
  218. package/src/components/code-inline/code-inline.tsx +2 -0
  219. package/src/components/column/column.tsx +2 -0
  220. package/src/components/container/container.tsx +2 -0
  221. package/src/components/element-marker.ts +5 -0
  222. package/src/components/heading/heading.tsx +2 -0
  223. package/src/components/hr/hr.tsx +2 -0
  224. package/src/components/img/img.tsx +2 -0
  225. package/src/components/link/link.tsx +2 -0
  226. package/src/components/preview/preview.tsx +2 -0
  227. package/src/components/row/row.tsx +2 -0
  228. package/src/components/section/section.tsx +2 -0
  229. package/src/components/tailwind/utils/react/is-component.ts +2 -32
  230. package/src/components/text/text.tsx +2 -0
  231. package/tsdown.config.ts +31 -34
@@ -0,0 +1 @@
1
+ import { Section, SectionProps } from "./section.cjs";
@@ -0,0 +1 @@
1
+ import { Section, SectionProps } from "./section.mjs";
@@ -0,0 +1,36 @@
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_element_marker = require("../element-marker.cjs");
3
+ let react = require("react");
4
+ react = require_runtime.__toESM(react);
5
+ let react_jsx_runtime = require("react/jsx-runtime");
6
+ //#region src/components/section/section.tsx
7
+ const Section = react.forwardRef(({ children, style = {}, ...props }, ref) => {
8
+ const tdStyle = {};
9
+ const tableStyle = {};
10
+ const styleRecord = style;
11
+ for (const key in styleRecord) {
12
+ if (!Object.hasOwn(styleRecord, key)) continue;
13
+ const value = styleRecord[key];
14
+ if (key === "padding" || key === "paddingTop" || key === "paddingRight" || key === "paddingBottom" || key === "paddingLeft") tdStyle[key] = value;
15
+ else tableStyle[key] = value;
16
+ }
17
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("table", {
18
+ align: "center",
19
+ width: "100%",
20
+ border: 0,
21
+ cellPadding: "0",
22
+ cellSpacing: "0",
23
+ role: "presentation",
24
+ ...props,
25
+ ref,
26
+ style: tableStyle,
27
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tbody", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tr", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", {
28
+ style: tdStyle,
29
+ children
30
+ }) }) })
31
+ });
32
+ });
33
+ Section.displayName = "Section";
34
+ require_element_marker.markAsElement(Section);
35
+ //#endregion
36
+ exports.Section = Section;
@@ -0,0 +1,7 @@
1
+ import * as React$1 from "react";
2
+
3
+ //#region src/components/section/section.d.ts
4
+ type SectionProps = Readonly<React$1.ComponentPropsWithoutRef<'table'>>;
5
+ declare const Section: React$1.ForwardRefExoticComponent<Readonly<Omit<React$1.DetailedHTMLProps<React$1.TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>, "ref">> & React$1.RefAttributes<HTMLTableElement>>;
6
+ //#endregion
7
+ export { Section, SectionProps };
@@ -0,0 +1,7 @@
1
+ import * as React$1 from "react";
2
+
3
+ //#region src/components/section/section.d.ts
4
+ type SectionProps = Readonly<React$1.ComponentPropsWithoutRef<'table'>>;
5
+ declare const Section: React$1.ForwardRefExoticComponent<Readonly<Omit<React$1.DetailedHTMLProps<React$1.TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>, "ref">> & React$1.RefAttributes<HTMLTableElement>>;
6
+ //#endregion
7
+ export { Section, SectionProps };
@@ -0,0 +1,34 @@
1
+ import { markAsElement } from "../element-marker.mjs";
2
+ import * as React$1 from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/components/section/section.tsx
5
+ const Section = React$1.forwardRef(({ children, style = {}, ...props }, ref) => {
6
+ const tdStyle = {};
7
+ const tableStyle = {};
8
+ const styleRecord = style;
9
+ for (const key in styleRecord) {
10
+ if (!Object.hasOwn(styleRecord, key)) continue;
11
+ const value = styleRecord[key];
12
+ if (key === "padding" || key === "paddingTop" || key === "paddingRight" || key === "paddingBottom" || key === "paddingLeft") tdStyle[key] = value;
13
+ else tableStyle[key] = value;
14
+ }
15
+ return /* @__PURE__ */ jsx("table", {
16
+ align: "center",
17
+ width: "100%",
18
+ border: 0,
19
+ cellPadding: "0",
20
+ cellSpacing: "0",
21
+ role: "presentation",
22
+ ...props,
23
+ ref,
24
+ style: tableStyle,
25
+ children: /* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
26
+ style: tdStyle,
27
+ children
28
+ }) }) })
29
+ });
30
+ });
31
+ Section.displayName = "Section";
32
+ markAsElement(Section);
33
+ //#endregion
34
+ export { Section };
@@ -0,0 +1,15 @@
1
+ //#region src/components/tailwind/hooks/use-suspended-promise.ts
2
+ const promiseStates = /* @__PURE__ */ new Map();
3
+ function useSuspensedPromise(promiseFn, key) {
4
+ const previousState = promiseStates.get(key);
5
+ if (previousState) {
6
+ if ("error" in previousState) throw previousState.error;
7
+ if ("result" in previousState) return previousState.result;
8
+ throw previousState.promise;
9
+ }
10
+ const state = { promise: promiseFn().then((result) => state.result = result).catch((error) => state.error = error) };
11
+ promiseStates.set(key, state);
12
+ throw state.promise;
13
+ }
14
+ //#endregion
15
+ exports.useSuspensedPromise = useSuspensedPromise;
@@ -0,0 +1,15 @@
1
+ //#region src/components/tailwind/hooks/use-suspended-promise.ts
2
+ const promiseStates = /* @__PURE__ */ new Map();
3
+ function useSuspensedPromise(promiseFn, key) {
4
+ const previousState = promiseStates.get(key);
5
+ if (previousState) {
6
+ if ("error" in previousState) throw previousState.error;
7
+ if ("result" in previousState) return previousState.result;
8
+ throw previousState.promise;
9
+ }
10
+ const state = { promise: promiseFn().then((result) => state.result = result).catch((error) => state.error = error) };
11
+ promiseStates.set(key, state);
12
+ throw state.promise;
13
+ }
14
+ //#endregion
15
+ export { useSuspensedPromise };
@@ -0,0 +1,4 @@
1
+ import { inlineStyles } from "./inline-styles.cjs";
2
+ import { sanitizeStyleSheet } from "./sanitize-stylesheet.cjs";
3
+ import { EmailElementProps, Tailwind, TailwindConfig, TailwindProps, pixelBasedPreset } from "./tailwind.cjs";
4
+ import { TailwindSetup, setupTailwind } from "./utils/tailwindcss/setup-tailwind.cjs";
@@ -0,0 +1,4 @@
1
+ import { inlineStyles } from "./inline-styles.mjs";
2
+ import { sanitizeStyleSheet } from "./sanitize-stylesheet.mjs";
3
+ import { EmailElementProps, Tailwind, TailwindConfig, TailwindProps, pixelBasedPreset } from "./tailwind.mjs";
4
+ import { TailwindSetup, setupTailwind } from "./utils/tailwindcss/setup-tailwind.mjs";
@@ -0,0 +1,11 @@
1
+ const require_extract_rules_per_class = require("./utils/css/extract-rules-per-class.cjs");
2
+ const require_get_custom_properties = require("./utils/css/get-custom-properties.cjs");
3
+ const require_make_inline_styles_for = require("./utils/css/make-inline-styles-for.cjs");
4
+ //#region src/components/tailwind/inline-styles.ts
5
+ function inlineStyles(styleSheet, classes) {
6
+ const { inlinable: inlinableRules } = require_extract_rules_per_class.extractRulesPerClass(styleSheet, classes);
7
+ const customProperties = require_get_custom_properties.getCustomProperties(styleSheet);
8
+ return require_make_inline_styles_for.makeInlineStylesFor(Array.from(inlinableRules.values()).flat(), customProperties);
9
+ }
10
+ //#endregion
11
+ exports.inlineStyles = inlineStyles;
@@ -0,0 +1,6 @@
1
+ import { StyleSheet } from "css-tree";
2
+
3
+ //#region src/components/tailwind/inline-styles.d.ts
4
+ declare function inlineStyles(styleSheet: StyleSheet, classes: string[]): Record<string, string>;
5
+ //#endregion
6
+ export { inlineStyles };
@@ -0,0 +1,6 @@
1
+ import { StyleSheet } from "css-tree";
2
+
3
+ //#region src/components/tailwind/inline-styles.d.ts
4
+ declare function inlineStyles(styleSheet: StyleSheet, classes: string[]): Record<string, string>;
5
+ //#endregion
6
+ export { inlineStyles };
@@ -0,0 +1,11 @@
1
+ import { extractRulesPerClass } from "./utils/css/extract-rules-per-class.mjs";
2
+ import { getCustomProperties } from "./utils/css/get-custom-properties.mjs";
3
+ import { makeInlineStylesFor } from "./utils/css/make-inline-styles-for.mjs";
4
+ //#region src/components/tailwind/inline-styles.ts
5
+ function inlineStyles(styleSheet, classes) {
6
+ const { inlinable: inlinableRules } = extractRulesPerClass(styleSheet, classes);
7
+ const customProperties = getCustomProperties(styleSheet);
8
+ return makeInlineStylesFor(Array.from(inlinableRules.values()).flat(), customProperties);
9
+ }
10
+ //#endregion
11
+ export { inlineStyles };
@@ -0,0 +1,11 @@
1
+ const require_resolve_all_css_variables = require("./utils/css/resolve-all-css-variables.cjs");
2
+ const require_resolve_calc_expressions = require("./utils/css/resolve-calc-expressions.cjs");
3
+ const require_sanitize_declarations = require("./utils/css/sanitize-declarations.cjs");
4
+ //#region src/components/tailwind/sanitize-stylesheet.ts
5
+ function sanitizeStyleSheet(styleSheet) {
6
+ require_resolve_all_css_variables.resolveAllCssVariables(styleSheet);
7
+ require_resolve_calc_expressions.resolveCalcExpressions(styleSheet);
8
+ require_sanitize_declarations.sanitizeDeclarations(styleSheet);
9
+ }
10
+ //#endregion
11
+ exports.sanitizeStyleSheet = sanitizeStyleSheet;
@@ -0,0 +1,6 @@
1
+ import { StyleSheet } from "css-tree";
2
+
3
+ //#region src/components/tailwind/sanitize-stylesheet.d.ts
4
+ declare function sanitizeStyleSheet(styleSheet: StyleSheet): void;
5
+ //#endregion
6
+ export { sanitizeStyleSheet };
@@ -0,0 +1,6 @@
1
+ import { StyleSheet } from "css-tree";
2
+
3
+ //#region src/components/tailwind/sanitize-stylesheet.d.ts
4
+ declare function sanitizeStyleSheet(styleSheet: StyleSheet): void;
5
+ //#endregion
6
+ export { sanitizeStyleSheet };
@@ -0,0 +1,11 @@
1
+ import { resolveAllCssVariables } from "./utils/css/resolve-all-css-variables.mjs";
2
+ import { resolveCalcExpressions } from "./utils/css/resolve-calc-expressions.mjs";
3
+ import { sanitizeDeclarations } from "./utils/css/sanitize-declarations.mjs";
4
+ //#region src/components/tailwind/sanitize-stylesheet.ts
5
+ function sanitizeStyleSheet(styleSheet) {
6
+ resolveAllCssVariables(styleSheet);
7
+ resolveCalcExpressions(styleSheet);
8
+ sanitizeDeclarations(styleSheet);
9
+ }
10
+ //#endregion
11
+ export { sanitizeStyleSheet };
@@ -0,0 +1,120 @@
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_extract_rules_per_class = require("./utils/css/extract-rules-per-class.cjs");
3
+ const require_get_custom_properties = require("./utils/css/get-custom-properties.cjs");
4
+ const require_sanitize_stylesheet = require("./sanitize-stylesheet.cjs");
5
+ const require_use_suspended_promise = require("./hooks/use-suspended-promise.cjs");
6
+ const require_downlevel_for_email_clients = require("./utils/css/downlevel-for-email-clients.cjs");
7
+ const require_sanitize_non_inlinable_rules = require("./utils/css/sanitize-non-inlinable-rules.cjs");
8
+ const require_map_react_tree = require("./utils/react/map-react-tree.cjs");
9
+ const require_clone_element_with_inlined_styles = require("./utils/tailwindcss/clone-element-with-inlined-styles.cjs");
10
+ const require_setup_tailwind = require("./utils/tailwindcss/setup-tailwind.cjs");
11
+ let react = require("react");
12
+ react = require_runtime.__toESM(react);
13
+ let react_jsx_runtime = require("react/jsx-runtime");
14
+ let css_tree = require("css-tree");
15
+ //#region src/components/tailwind/tailwind.tsx
16
+ const pixelBasedPreset = { theme: { extend: {
17
+ fontSize: {
18
+ xs: ["12px", { lineHeight: "16px" }],
19
+ sm: ["14px", { lineHeight: "20px" }],
20
+ base: ["16px", { lineHeight: "24px" }],
21
+ lg: ["18px", { lineHeight: "28px" }],
22
+ xl: ["20px", { lineHeight: "28px" }],
23
+ "2xl": ["24px", { lineHeight: "32px" }],
24
+ "3xl": ["30px", { lineHeight: "36px" }],
25
+ "4xl": ["36px", { lineHeight: "36px" }],
26
+ "5xl": ["48px", { lineHeight: "1" }],
27
+ "6xl": ["60px", { lineHeight: "1" }],
28
+ "7xl": ["72px", { lineHeight: "1" }],
29
+ "8xl": ["96px", { lineHeight: "1" }],
30
+ "9xl": ["144px", { lineHeight: "1" }]
31
+ },
32
+ spacing: {
33
+ px: "1px",
34
+ 0: "0",
35
+ .5: "2px",
36
+ 1: "4px",
37
+ 1.5: "6px",
38
+ 2: "8px",
39
+ 2.5: "10px",
40
+ 3: "12px",
41
+ 3.5: "14px",
42
+ 4: "16px",
43
+ 5: "20px",
44
+ 6: "24px",
45
+ 7: "28px",
46
+ 8: "32px",
47
+ 9: "36px",
48
+ 10: "40px",
49
+ 11: "44px",
50
+ 12: "48px",
51
+ 14: "56px",
52
+ 16: "64px",
53
+ 20: "80px",
54
+ 24: "96px",
55
+ 28: "112px",
56
+ 32: "128px",
57
+ 36: "144px",
58
+ 40: "160px",
59
+ 44: "176px",
60
+ 48: "192px",
61
+ 52: "208px",
62
+ 56: "224px",
63
+ 60: "240px",
64
+ 64: "256px",
65
+ 72: "288px",
66
+ 80: "320px",
67
+ 96: "384px"
68
+ }
69
+ } } };
70
+ function Tailwind({ children, config, theme, utility }) {
71
+ const twConfigData = {
72
+ config,
73
+ cssConfigs: {
74
+ theme,
75
+ utility
76
+ }
77
+ };
78
+ const tailwindSetup = require_use_suspended_promise.useSuspensedPromise(() => require_setup_tailwind.setupTailwind(twConfigData), JSON.stringify(twConfigData, (_key, value) => typeof value === "function" ? value.toString() : value));
79
+ let classesUsed = [];
80
+ let mappedChildren = require_map_react_tree.mapReactTree(children, (node) => {
81
+ if (react.isValidElement(node)) {
82
+ if (node.props.className) {
83
+ const classes = node.props.className?.split(/\s+/);
84
+ classesUsed = [...classesUsed, ...classes];
85
+ tailwindSetup.addUtilities(classes);
86
+ }
87
+ }
88
+ return node;
89
+ });
90
+ const styleSheet = tailwindSetup.getStyleSheet();
91
+ require_sanitize_stylesheet.sanitizeStyleSheet(styleSheet);
92
+ const { inlinable: inlinableRules, nonInlinable: nonInlinableRules } = require_extract_rules_per_class.extractRulesPerClass(styleSheet, classesUsed);
93
+ const customProperties = require_get_custom_properties.getCustomProperties(styleSheet);
94
+ const nonInlineStyles = {
95
+ type: "StyleSheet",
96
+ children: new css_tree.List().fromArray(Array.from(nonInlinableRules.values()).flat())
97
+ };
98
+ require_sanitize_non_inlinable_rules.sanitizeNonInlinableRules(nonInlineStyles);
99
+ require_downlevel_for_email_clients.downlevelForEmailClients(nonInlineStyles);
100
+ const hasNonInlineStylesToApply = nonInlinableRules.size > 0;
101
+ let appliedNonInlineStyles = false;
102
+ mappedChildren = require_map_react_tree.mapReactTree(mappedChildren, (node) => {
103
+ if (react.isValidElement(node)) {
104
+ const elementWithInlinedStyles = require_clone_element_with_inlined_styles.cloneElementWithInlinedStyles(node, inlinableRules, nonInlinableRules, customProperties);
105
+ if (elementWithInlinedStyles.type === "head") {
106
+ appliedNonInlineStyles = true;
107
+ const styleElement = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("style", { dangerouslySetInnerHTML: { __html: (0, css_tree.generate)(nonInlineStyles) } });
108
+ return react.cloneElement(elementWithInlinedStyles, elementWithInlinedStyles.props, styleElement, elementWithInlinedStyles.props.children);
109
+ }
110
+ return elementWithInlinedStyles;
111
+ }
112
+ return node;
113
+ });
114
+ if (hasNonInlineStylesToApply && !appliedNonInlineStyles) throw new Error(`Tailwind: <head> not found inside <Tailwind>.
115
+ Move <Head /> inside <Tailwind>, or remove these classes that require a <head>: ${Array.from(nonInlinableRules.keys()).join(" ")}.`);
116
+ return mappedChildren;
117
+ }
118
+ //#endregion
119
+ exports.Tailwind = Tailwind;
120
+ exports.pixelBasedPreset = pixelBasedPreset;
@@ -0,0 +1,25 @@
1
+ import * as React$1 from "react";
2
+ import { Config } from "tailwindcss";
3
+
4
+ //#region src/components/tailwind/tailwind.d.ts
5
+ type TailwindConfig = Omit<Config, 'content'>;
6
+ interface EmailElementProps {
7
+ children?: React$1.ReactNode;
8
+ className?: string;
9
+ style?: React$1.CSSProperties;
10
+ }
11
+ declare const pixelBasedPreset: TailwindConfig;
12
+ interface TailwindProps {
13
+ children: React$1.ReactNode;
14
+ config?: TailwindConfig;
15
+ theme?: string;
16
+ utility?: string;
17
+ }
18
+ declare function Tailwind({
19
+ children,
20
+ config,
21
+ theme,
22
+ utility
23
+ }: TailwindProps): React$1.ReactNode;
24
+ //#endregion
25
+ export { EmailElementProps, Tailwind, TailwindConfig, TailwindProps, pixelBasedPreset };
@@ -0,0 +1,25 @@
1
+ import * as React$1 from "react";
2
+ import { Config } from "tailwindcss";
3
+
4
+ //#region src/components/tailwind/tailwind.d.ts
5
+ type TailwindConfig = Omit<Config, 'content'>;
6
+ interface EmailElementProps {
7
+ children?: React$1.ReactNode;
8
+ className?: string;
9
+ style?: React$1.CSSProperties;
10
+ }
11
+ declare const pixelBasedPreset: TailwindConfig;
12
+ interface TailwindProps {
13
+ children: React$1.ReactNode;
14
+ config?: TailwindConfig;
15
+ theme?: string;
16
+ utility?: string;
17
+ }
18
+ declare function Tailwind({
19
+ children,
20
+ config,
21
+ theme,
22
+ utility
23
+ }: TailwindProps): React$1.ReactNode;
24
+ //#endregion
25
+ export { EmailElementProps, Tailwind, TailwindConfig, TailwindProps, pixelBasedPreset };
@@ -0,0 +1,117 @@
1
+ import { extractRulesPerClass } from "./utils/css/extract-rules-per-class.mjs";
2
+ import { getCustomProperties } from "./utils/css/get-custom-properties.mjs";
3
+ import { sanitizeStyleSheet } from "./sanitize-stylesheet.mjs";
4
+ import { useSuspensedPromise } from "./hooks/use-suspended-promise.mjs";
5
+ import { downlevelForEmailClients } from "./utils/css/downlevel-for-email-clients.mjs";
6
+ import { sanitizeNonInlinableRules } from "./utils/css/sanitize-non-inlinable-rules.mjs";
7
+ import { mapReactTree } from "./utils/react/map-react-tree.mjs";
8
+ import { cloneElementWithInlinedStyles } from "./utils/tailwindcss/clone-element-with-inlined-styles.mjs";
9
+ import { setupTailwind } from "./utils/tailwindcss/setup-tailwind.mjs";
10
+ import * as React$1 from "react";
11
+ import { jsx } from "react/jsx-runtime";
12
+ import { List, generate } from "css-tree/dist/csstree.esm";
13
+ //#region src/components/tailwind/tailwind.tsx
14
+ const pixelBasedPreset = { theme: { extend: {
15
+ fontSize: {
16
+ xs: ["12px", { lineHeight: "16px" }],
17
+ sm: ["14px", { lineHeight: "20px" }],
18
+ base: ["16px", { lineHeight: "24px" }],
19
+ lg: ["18px", { lineHeight: "28px" }],
20
+ xl: ["20px", { lineHeight: "28px" }],
21
+ "2xl": ["24px", { lineHeight: "32px" }],
22
+ "3xl": ["30px", { lineHeight: "36px" }],
23
+ "4xl": ["36px", { lineHeight: "36px" }],
24
+ "5xl": ["48px", { lineHeight: "1" }],
25
+ "6xl": ["60px", { lineHeight: "1" }],
26
+ "7xl": ["72px", { lineHeight: "1" }],
27
+ "8xl": ["96px", { lineHeight: "1" }],
28
+ "9xl": ["144px", { lineHeight: "1" }]
29
+ },
30
+ spacing: {
31
+ px: "1px",
32
+ 0: "0",
33
+ .5: "2px",
34
+ 1: "4px",
35
+ 1.5: "6px",
36
+ 2: "8px",
37
+ 2.5: "10px",
38
+ 3: "12px",
39
+ 3.5: "14px",
40
+ 4: "16px",
41
+ 5: "20px",
42
+ 6: "24px",
43
+ 7: "28px",
44
+ 8: "32px",
45
+ 9: "36px",
46
+ 10: "40px",
47
+ 11: "44px",
48
+ 12: "48px",
49
+ 14: "56px",
50
+ 16: "64px",
51
+ 20: "80px",
52
+ 24: "96px",
53
+ 28: "112px",
54
+ 32: "128px",
55
+ 36: "144px",
56
+ 40: "160px",
57
+ 44: "176px",
58
+ 48: "192px",
59
+ 52: "208px",
60
+ 56: "224px",
61
+ 60: "240px",
62
+ 64: "256px",
63
+ 72: "288px",
64
+ 80: "320px",
65
+ 96: "384px"
66
+ }
67
+ } } };
68
+ function Tailwind({ children, config, theme, utility }) {
69
+ const twConfigData = {
70
+ config,
71
+ cssConfigs: {
72
+ theme,
73
+ utility
74
+ }
75
+ };
76
+ const tailwindSetup = useSuspensedPromise(() => setupTailwind(twConfigData), JSON.stringify(twConfigData, (_key, value) => typeof value === "function" ? value.toString() : value));
77
+ let classesUsed = [];
78
+ let mappedChildren = mapReactTree(children, (node) => {
79
+ if (React$1.isValidElement(node)) {
80
+ if (node.props.className) {
81
+ const classes = node.props.className?.split(/\s+/);
82
+ classesUsed = [...classesUsed, ...classes];
83
+ tailwindSetup.addUtilities(classes);
84
+ }
85
+ }
86
+ return node;
87
+ });
88
+ const styleSheet = tailwindSetup.getStyleSheet();
89
+ sanitizeStyleSheet(styleSheet);
90
+ const { inlinable: inlinableRules, nonInlinable: nonInlinableRules } = extractRulesPerClass(styleSheet, classesUsed);
91
+ const customProperties = getCustomProperties(styleSheet);
92
+ const nonInlineStyles = {
93
+ type: "StyleSheet",
94
+ children: new List().fromArray(Array.from(nonInlinableRules.values()).flat())
95
+ };
96
+ sanitizeNonInlinableRules(nonInlineStyles);
97
+ downlevelForEmailClients(nonInlineStyles);
98
+ const hasNonInlineStylesToApply = nonInlinableRules.size > 0;
99
+ let appliedNonInlineStyles = false;
100
+ mappedChildren = mapReactTree(mappedChildren, (node) => {
101
+ if (React$1.isValidElement(node)) {
102
+ const elementWithInlinedStyles = cloneElementWithInlinedStyles(node, inlinableRules, nonInlinableRules, customProperties);
103
+ if (elementWithInlinedStyles.type === "head") {
104
+ appliedNonInlineStyles = true;
105
+ const styleElement = /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: generate(nonInlineStyles) } });
106
+ return React$1.cloneElement(elementWithInlinedStyles, elementWithInlinedStyles.props, styleElement, elementWithInlinedStyles.props.children);
107
+ }
108
+ return elementWithInlinedStyles;
109
+ }
110
+ return node;
111
+ });
112
+ if (hasNonInlineStylesToApply && !appliedNonInlineStyles) throw new Error(`Tailwind: <head> not found inside <Tailwind>.
113
+ Move <Head /> inside <Tailwind>, or remove these classes that require a <head>: ${Array.from(nonInlinableRules.keys()).join(" ")}.`);
114
+ return mappedChildren;
115
+ }
116
+ //#endregion
117
+ export { Tailwind, pixelBasedPreset };
@@ -0,0 +1,10 @@
1
+ const require_from_dash_case_to_camel_case = require("../text/from-dash-case-to-camel-case.cjs");
2
+ //#region src/components/tailwind/utils/compatibility/get-react-property.ts
3
+ function getReactProperty(prop) {
4
+ const modifiedProp = prop.toLowerCase();
5
+ if (modifiedProp.startsWith("--")) return modifiedProp;
6
+ if (modifiedProp.startsWith("-ms-")) return require_from_dash_case_to_camel_case.fromDashCaseToCamelCase(modifiedProp.slice(1));
7
+ return require_from_dash_case_to_camel_case.fromDashCaseToCamelCase(modifiedProp);
8
+ }
9
+ //#endregion
10
+ exports.getReactProperty = getReactProperty;
@@ -0,0 +1,10 @@
1
+ import { fromDashCaseToCamelCase } from "../text/from-dash-case-to-camel-case.mjs";
2
+ //#region src/components/tailwind/utils/compatibility/get-react-property.ts
3
+ function getReactProperty(prop) {
4
+ const modifiedProp = prop.toLowerCase();
5
+ if (modifiedProp.startsWith("--")) return modifiedProp;
6
+ if (modifiedProp.startsWith("-ms-")) return fromDashCaseToCamelCase(modifiedProp.slice(1));
7
+ return fromDashCaseToCamelCase(modifiedProp);
8
+ }
9
+ //#endregion
10
+ export { getReactProperty };
@@ -0,0 +1,26 @@
1
+ //#region src/components/tailwind/utils/compatibility/sanitize-class-name.ts
2
+ const digitToNameMap = {
3
+ "0": "zero",
4
+ "1": "one",
5
+ "2": "two",
6
+ "3": "three",
7
+ "4": "four",
8
+ "5": "five",
9
+ "6": "six",
10
+ "7": "seven",
11
+ "8": "eight",
12
+ "9": "nine"
13
+ };
14
+ /**
15
+ * Replaces special characters to avoid problems on email clients.
16
+ *
17
+ * @param className - This should not come with any escaped charcters, it should come the same
18
+ * as is on the `className` attribute on React elements.
19
+ */
20
+ function sanitizeClassName(className) {
21
+ return className.replaceAll("+", "plus").replaceAll("[", "").replaceAll("%", "pc").replaceAll("]", "").replaceAll("(", "").replaceAll(")", "").replaceAll("!", "imprtnt").replaceAll(">", "gt").replaceAll("<", "lt").replaceAll("=", "eq").replace(/^[0-9]/, (digit) => {
22
+ return digitToNameMap[digit];
23
+ }).replace(/[^a-zA-Z0-9\-_]/g, "_");
24
+ }
25
+ //#endregion
26
+ exports.sanitizeClassName = sanitizeClassName;
@@ -0,0 +1,26 @@
1
+ //#region src/components/tailwind/utils/compatibility/sanitize-class-name.ts
2
+ const digitToNameMap = {
3
+ "0": "zero",
4
+ "1": "one",
5
+ "2": "two",
6
+ "3": "three",
7
+ "4": "four",
8
+ "5": "five",
9
+ "6": "six",
10
+ "7": "seven",
11
+ "8": "eight",
12
+ "9": "nine"
13
+ };
14
+ /**
15
+ * Replaces special characters to avoid problems on email clients.
16
+ *
17
+ * @param className - This should not come with any escaped charcters, it should come the same
18
+ * as is on the `className` attribute on React elements.
19
+ */
20
+ function sanitizeClassName(className) {
21
+ return className.replaceAll("+", "plus").replaceAll("[", "").replaceAll("%", "pc").replaceAll("]", "").replaceAll("(", "").replaceAll(")", "").replaceAll("!", "imprtnt").replaceAll(">", "gt").replaceAll("<", "lt").replaceAll("=", "eq").replace(/^[0-9]/, (digit) => {
22
+ return digitToNameMap[digit];
23
+ }).replace(/[^a-zA-Z0-9\-_]/g, "_");
24
+ }
25
+ //#endregion
26
+ export { sanitizeClassName };