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.
- package/CHANGELOG.md +23 -0
- package/dist/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/cli/index.mjs +12 -11
- package/dist/components/body/body.cjs +39 -0
- package/dist/components/body/body.d.cts +7 -0
- package/dist/components/body/body.d.mts +7 -0
- package/dist/components/body/body.mjs +37 -0
- package/dist/components/body/index.d.cts +1 -0
- package/dist/components/body/index.d.mts +1 -0
- package/dist/components/body/margin-properties.cjs +30 -0
- package/dist/components/body/margin-properties.mjs +29 -0
- package/dist/components/button/button.cjs +64 -0
- package/dist/components/button/button.d.cts +13 -0
- package/dist/components/button/button.d.mts +13 -0
- package/dist/components/button/button.mjs +62 -0
- package/dist/components/button/index.d.cts +1 -0
- package/dist/components/button/index.d.mts +1 -0
- package/dist/components/button/utils/parse-padding.cjs +90 -0
- package/dist/components/button/utils/parse-padding.mjs +90 -0
- package/dist/components/button/utils/px-to-pt.cjs +4 -0
- package/dist/components/button/utils/px-to-pt.mjs +4 -0
- package/dist/components/code-block/code-block.cjs +79 -0
- package/dist/components/code-block/code-block.d.cts +20 -0
- package/dist/components/code-block/code-block.d.mts +20 -0
- package/dist/components/code-block/code-block.mjs +77 -0
- package/dist/components/code-block/index.d.cts +3 -0
- package/dist/components/code-block/index.d.mts +3 -0
- package/dist/components/code-block/languages-available.d.cts +4 -0
- package/dist/components/code-block/languages-available.d.mts +4 -0
- package/dist/components/code-block/prism.cjs +14564 -0
- package/dist/components/code-block/prism.mjs +14562 -0
- package/dist/components/code-block/themes.cjs +2578 -0
- package/dist/components/code-block/themes.d.cts +4877 -0
- package/dist/components/code-block/themes.d.mts +4877 -0
- package/dist/components/code-block/themes.mjs +2541 -0
- package/dist/components/code-inline/code-inline.cjs +43 -0
- package/dist/components/code-inline/code-inline.d.cts +12 -0
- package/dist/components/code-inline/code-inline.d.mts +12 -0
- package/dist/components/code-inline/code-inline.mjs +41 -0
- package/dist/components/code-inline/index.d.cts +1 -0
- package/dist/components/code-inline/index.d.mts +1 -0
- package/dist/components/column/column.cjs +19 -0
- package/dist/components/column/column.d.cts +7 -0
- package/dist/components/column/column.d.mts +7 -0
- package/dist/components/column/column.mjs +17 -0
- package/dist/components/column/index.d.cts +1 -0
- package/dist/components/column/index.d.mts +1 -0
- package/dist/components/container/container.cjs +42 -0
- package/dist/components/container/container.d.cts +7 -0
- package/dist/components/container/container.d.mts +7 -0
- package/dist/components/container/container.mjs +40 -0
- package/dist/components/container/index.d.cts +1 -0
- package/dist/components/container/index.d.mts +1 -0
- package/dist/components/element-marker.cjs +8 -0
- package/dist/components/element-marker.mjs +7 -0
- package/dist/components/font/font.cjs +22 -0
- package/dist/components/font/font.d.cts +26 -0
- package/dist/components/font/font.d.mts +26 -0
- package/dist/components/font/font.mjs +21 -0
- package/dist/components/font/index.d.cts +1 -0
- package/dist/components/font/index.d.mts +1 -0
- package/dist/components/head/head.cjs +20 -0
- package/dist/components/head/head.d.cts +7 -0
- package/dist/components/head/head.d.mts +7 -0
- package/dist/components/head/head.mjs +18 -0
- package/dist/components/head/index.d.cts +1 -0
- package/dist/components/head/index.d.mts +1 -0
- package/dist/components/heading/heading.cjs +30 -0
- package/dist/components/heading/heading.d.cts +22 -0
- package/dist/components/heading/heading.d.mts +22 -0
- package/dist/components/heading/heading.mjs +28 -0
- package/dist/components/heading/index.d.cts +1 -0
- package/dist/components/heading/index.d.mts +1 -0
- package/dist/components/heading/utils/as.d.cts +16 -0
- package/dist/components/heading/utils/as.d.mts +16 -0
- package/dist/components/heading/utils/spaces.cjs +24 -0
- package/dist/components/heading/utils/spaces.d.cts +14 -0
- package/dist/components/heading/utils/spaces.d.mts +14 -0
- package/dist/components/heading/utils/spaces.mjs +24 -0
- package/dist/components/hr/hr.cjs +21 -0
- package/dist/components/hr/hr.d.cts +7 -0
- package/dist/components/hr/hr.d.mts +7 -0
- package/dist/components/hr/hr.mjs +19 -0
- package/dist/components/hr/index.d.cts +1 -0
- package/dist/components/hr/index.d.mts +1 -0
- package/dist/components/html/html.cjs +15 -0
- package/dist/components/html/html.d.cts +7 -0
- package/dist/components/html/html.d.mts +7 -0
- package/dist/components/html/html.mjs +13 -0
- package/dist/components/html/index.d.cts +1 -0
- package/dist/components/html/index.d.mts +1 -0
- package/dist/components/img/img.cjs +25 -0
- package/dist/components/img/img.d.cts +7 -0
- package/dist/components/img/img.d.mts +7 -0
- package/dist/components/img/img.mjs +23 -0
- package/dist/components/img/index.d.cts +1 -0
- package/dist/components/img/index.d.mts +1 -0
- package/dist/components/index.d.cts +24 -0
- package/dist/components/index.d.mts +24 -0
- package/dist/components/link/index.d.cts +1 -0
- package/dist/components/link/index.d.mts +1 -0
- package/dist/components/link/link.cjs +21 -0
- package/dist/components/link/link.d.cts +7 -0
- package/dist/components/link/link.d.mts +7 -0
- package/dist/components/link/link.mjs +19 -0
- package/dist/components/markdown/index.d.cts +1 -0
- package/dist/components/markdown/index.d.mts +1 -0
- package/dist/components/markdown/markdown.cjs +101 -0
- package/dist/components/markdown/markdown.d.cts +16 -0
- package/dist/components/markdown/markdown.d.mts +16 -0
- package/dist/components/markdown/markdown.mjs +99 -0
- package/dist/components/markdown/styles.cjs +92 -0
- package/dist/components/markdown/styles.d.cts +31 -0
- package/dist/components/markdown/styles.d.mts +31 -0
- package/dist/components/markdown/styles.mjs +92 -0
- package/dist/components/markdown/utils/parse-css-in-js-to-inline-css.cjs +60 -0
- package/dist/components/markdown/utils/parse-css-in-js-to-inline-css.mjs +60 -0
- package/dist/components/preview/index.d.cts +1 -0
- package/dist/components/preview/index.d.mts +1 -0
- package/dist/components/preview/preview.cjs +34 -0
- package/dist/components/preview/preview.d.cts +21 -0
- package/dist/components/preview/preview.d.mts +21 -0
- package/dist/components/preview/preview.mjs +31 -0
- package/dist/components/row/index.d.cts +1 -0
- package/dist/components/row/index.d.mts +1 -0
- package/dist/components/row/row.cjs +30 -0
- package/dist/components/row/row.d.cts +11 -0
- package/dist/components/row/row.d.mts +11 -0
- package/dist/components/row/row.mjs +28 -0
- package/dist/components/section/index.d.cts +1 -0
- package/dist/components/section/index.d.mts +1 -0
- package/dist/components/section/section.cjs +36 -0
- package/dist/components/section/section.d.cts +7 -0
- package/dist/components/section/section.d.mts +7 -0
- package/dist/components/section/section.mjs +34 -0
- package/dist/components/tailwind/hooks/use-suspended-promise.cjs +15 -0
- package/dist/components/tailwind/hooks/use-suspended-promise.mjs +15 -0
- package/dist/components/tailwind/index.d.cts +4 -0
- package/dist/components/tailwind/index.d.mts +4 -0
- package/dist/components/tailwind/inline-styles.cjs +11 -0
- package/dist/components/tailwind/inline-styles.d.cts +6 -0
- package/dist/components/tailwind/inline-styles.d.mts +6 -0
- package/dist/components/tailwind/inline-styles.mjs +11 -0
- package/dist/components/tailwind/sanitize-stylesheet.cjs +11 -0
- package/dist/components/tailwind/sanitize-stylesheet.d.cts +6 -0
- package/dist/components/tailwind/sanitize-stylesheet.d.mts +6 -0
- package/dist/components/tailwind/sanitize-stylesheet.mjs +11 -0
- package/dist/components/tailwind/tailwind.cjs +120 -0
- package/dist/components/tailwind/tailwind.d.cts +25 -0
- package/dist/components/tailwind/tailwind.d.mts +25 -0
- package/dist/components/tailwind/tailwind.mjs +117 -0
- package/dist/components/tailwind/utils/compatibility/get-react-property.cjs +10 -0
- package/dist/components/tailwind/utils/compatibility/get-react-property.mjs +10 -0
- package/dist/components/tailwind/utils/compatibility/sanitize-class-name.cjs +26 -0
- package/dist/components/tailwind/utils/compatibility/sanitize-class-name.mjs +26 -0
- package/dist/components/tailwind/utils/css/downlevel-for-email-clients.cjs +126 -0
- package/dist/components/tailwind/utils/css/downlevel-for-email-clients.mjs +125 -0
- package/dist/components/tailwind/utils/css/extract-rules-per-class.cjs +45 -0
- package/dist/components/tailwind/utils/css/extract-rules-per-class.mjs +44 -0
- package/dist/components/tailwind/utils/css/get-custom-properties.cjs +35 -0
- package/dist/components/tailwind/utils/css/get-custom-properties.mjs +34 -0
- package/dist/components/tailwind/utils/css/is-part-inlinable.cjs +10 -0
- package/dist/components/tailwind/utils/css/is-part-inlinable.mjs +9 -0
- package/dist/components/tailwind/utils/css/is-rule-inlinable.cjs +10 -0
- package/dist/components/tailwind/utils/css/is-rule-inlinable.mjs +9 -0
- package/dist/components/tailwind/utils/css/make-inline-styles-for.cjs +52 -0
- package/dist/components/tailwind/utils/css/make-inline-styles-for.mjs +51 -0
- package/dist/components/tailwind/utils/css/resolve-all-css-variables.cjs +89 -0
- package/dist/components/tailwind/utils/css/resolve-all-css-variables.mjs +88 -0
- package/dist/components/tailwind/utils/css/resolve-calc-expressions.cjs +92 -0
- package/dist/components/tailwind/utils/css/resolve-calc-expressions.mjs +91 -0
- package/dist/components/tailwind/utils/css/sanitize-declarations.cjs +310 -0
- package/dist/components/tailwind/utils/css/sanitize-declarations.mjs +309 -0
- package/dist/components/tailwind/utils/css/sanitize-non-inlinable-rules.cjs +46 -0
- package/dist/components/tailwind/utils/css/sanitize-non-inlinable-rules.mjs +45 -0
- package/dist/components/tailwind/utils/css/split-mixed-rule.cjs +41 -0
- package/dist/components/tailwind/utils/css/split-mixed-rule.mjs +40 -0
- package/dist/components/tailwind/utils/css/strip-empty-tailwind-vars.cjs +52 -0
- package/dist/components/tailwind/utils/css/strip-empty-tailwind-vars.mjs +51 -0
- package/dist/components/tailwind/utils/css/unwrap-value.cjs +7 -0
- package/dist/components/tailwind/utils/css/unwrap-value.mjs +7 -0
- package/dist/components/tailwind/utils/react/is-component.cjs +7 -0
- package/dist/components/tailwind/utils/react/is-component.mjs +7 -0
- package/dist/components/tailwind/utils/react/map-react-tree.cjs +32 -0
- package/dist/components/tailwind/utils/react/map-react-tree.mjs +30 -0
- package/dist/components/tailwind/utils/tailwindcss/clone-element-with-inlined-styles.cjs +37 -0
- package/dist/components/tailwind/utils/tailwindcss/clone-element-with-inlined-styles.mjs +35 -0
- package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.cjs +77 -0
- package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.d.cts +19 -0
- package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.d.mts +19 -0
- package/dist/components/tailwind/utils/tailwindcss/setup-tailwind.mjs +76 -0
- package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/index.cjs +901 -0
- package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/index.mjs +901 -0
- package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/preflight.cjs +398 -0
- package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/preflight.mjs +398 -0
- package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/theme.cjs +467 -0
- package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/theme.mjs +467 -0
- package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/utilities.cjs +6 -0
- package/dist/components/tailwind/utils/tailwindcss/tailwind-stylesheets/utilities.mjs +6 -0
- package/dist/components/tailwind/utils/text/from-dash-case-to-camel-case.cjs +6 -0
- package/dist/components/tailwind/utils/text/from-dash-case-to-camel-case.mjs +6 -0
- package/dist/components/text/index.d.cts +1 -0
- package/dist/components/text/index.d.mts +1 -0
- package/dist/components/text/text.cjs +43 -0
- package/dist/components/text/text.d.cts +7 -0
- package/dist/components/text/text.d.mts +7 -0
- package/dist/components/text/text.mjs +41 -0
- package/dist/components/text/utils/compute-margins.cjs +62 -0
- package/dist/components/text/utils/compute-margins.mjs +62 -0
- package/dist/index.cjs +85 -40759
- package/dist/index.d.cts +24 -5132
- package/dist/index.d.mts +24 -5132
- package/dist/index.mjs +23 -40676
- package/package.json +7 -6
- package/src/components/body/body.tsx +2 -0
- package/src/components/button/button.tsx +2 -0
- package/src/components/code-block/code-block.tsx +2 -0
- package/src/components/code-inline/code-inline.tsx +2 -0
- package/src/components/column/column.tsx +2 -0
- package/src/components/container/container.tsx +2 -0
- package/src/components/element-marker.ts +5 -0
- package/src/components/heading/heading.tsx +2 -0
- package/src/components/hr/hr.tsx +2 -0
- package/src/components/img/img.tsx +2 -0
- package/src/components/link/link.tsx +2 -0
- package/src/components/preview/preview.tsx +2 -0
- package/src/components/row/row.tsx +2 -0
- package/src/components/section/section.tsx +2 -0
- package/src/components/tailwind/utils/react/is-component.ts +2 -32
- package/src/components/text/text.tsx +2 -0
- 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,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,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 };
|