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
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# react-email
|
|
2
2
|
|
|
3
|
+
## 6.8.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 9605c04: Add a Props tab to the preview toolbar for live-editing the props a template is rendered with. Edits re-render the preview without changing the template's `PreviewProps`, invalid JSON is flagged inline, and a reset restores the template defaults.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- d7743bc: Ship per-module build output with `sideEffects: false` so bundlers can tree-shake unused components. Importing a component no longer pulls prismjs, marked, and tailwindcss into the bundle unless `CodeBlock`, `Markdown`, or `Tailwind` is actually used.
|
|
12
|
+
- 7b32bf6: Fixed toolbar tabs not responding on statically built previews when the page was opened with a `toolbar-panel` query param in the URL.
|
|
13
|
+
|
|
14
|
+
## 6.7.0
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- b448c3b: Enable custom export extensions via --extension/-e (e.g. .blade.php).
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies [ba96cfa]
|
|
23
|
+
- Updated dependencies [58d8c08]
|
|
24
|
+
- @react-email/render@2.1.0
|
|
25
|
+
|
|
3
26
|
## 6.6.9
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.__toESM = __toESM;
|
package/dist/cli/index.mjs
CHANGED
|
@@ -6533,10 +6533,11 @@ const getTracingRootDir = async (usersProjectLocation) => {
|
|
|
6533
6533
|
//#region package.json
|
|
6534
6534
|
var package_default = {
|
|
6535
6535
|
name: "react-email",
|
|
6536
|
-
version: "6.
|
|
6536
|
+
version: "6.8.0",
|
|
6537
6537
|
description: "A live preview of your emails right in your browser.",
|
|
6538
6538
|
bin: { "email": "./dist/cli/index.mjs" },
|
|
6539
6539
|
type: "module",
|
|
6540
|
+
sideEffects: false,
|
|
6540
6541
|
types: "./dist/index.d.mts",
|
|
6541
6542
|
scripts: {
|
|
6542
6543
|
"build": "tsdown",
|
|
@@ -6572,7 +6573,7 @@ var package_default = {
|
|
|
6572
6573
|
dependencies: {
|
|
6573
6574
|
"@babel/parser": "catalog:",
|
|
6574
6575
|
"@babel/traverse": "catalog:",
|
|
6575
|
-
"@react-email/render": "workspace:>=2.0
|
|
6576
|
+
"@react-email/render": "workspace:>=2.1.0",
|
|
6576
6577
|
"chokidar": "^4.0.3",
|
|
6577
6578
|
"commander": "catalog:",
|
|
6578
6579
|
"conf": "^15.0.2",
|
|
@@ -6580,7 +6581,7 @@ var package_default = {
|
|
|
6580
6581
|
"debounce": "^2.0.0",
|
|
6581
6582
|
"esbuild": "^0.28.0",
|
|
6582
6583
|
"glob": "^13.0.6",
|
|
6583
|
-
"jiti": "2.
|
|
6584
|
+
"jiti": "2.6.1",
|
|
6584
6585
|
"log-symbols": "catalog:",
|
|
6585
6586
|
"marked": "^15.0.12",
|
|
6586
6587
|
"mime-types": "^3.0.0",
|
|
@@ -7541,7 +7542,7 @@ const renderWorkerSource = `
|
|
|
7541
7542
|
const { unlinkSync, writeFileSync } = require('node:fs');
|
|
7542
7543
|
const { parentPort, workerData } = require('node:worker_threads');
|
|
7543
7544
|
|
|
7544
|
-
const { templates, options } = workerData;
|
|
7545
|
+
const { templates, options, extension } = workerData;
|
|
7545
7546
|
|
|
7546
7547
|
(async () => {
|
|
7547
7548
|
for (const template of templates) {
|
|
@@ -7551,10 +7552,7 @@ const { templates, options } = workerData;
|
|
|
7551
7552
|
emailModule.reactEmailCreateReactElement(emailModule.default, {}),
|
|
7552
7553
|
options,
|
|
7553
7554
|
);
|
|
7554
|
-
const htmlPath = template.replace(
|
|
7555
|
-
'.cjs',
|
|
7556
|
-
options.plainText ? '.txt' : '.html',
|
|
7557
|
-
);
|
|
7555
|
+
const htmlPath = template.replace('.cjs', extension);
|
|
7558
7556
|
writeFileSync(htmlPath, rendered);
|
|
7559
7557
|
unlinkSync(template);
|
|
7560
7558
|
parentPort.postMessage({ type: 'progress', template });
|
|
@@ -7616,6 +7614,7 @@ const exportTemplates = async (pathToWhereEmailMarkupShouldBeDumped, emailsDirec
|
|
|
7616
7614
|
}
|
|
7617
7615
|
if (spinner) spinner.succeed();
|
|
7618
7616
|
const allBuiltTemplates = glob.sync(normalize$1(`${pathToWhereEmailMarkupShouldBeDumped}/**/*.cjs`), { absolute: true });
|
|
7617
|
+
const extension = options.extension && options.extension.length > 0 ? options.extension.startsWith(".") ? options.extension : `.${options.extension}` : options.plainText ? ".txt" : ".html";
|
|
7619
7618
|
if (spinner && allBuiltTemplates.length > 0) {
|
|
7620
7619
|
spinner.setText(`rendering ${allBuiltTemplates[0]?.split("/").pop()}`);
|
|
7621
7620
|
spinner.start();
|
|
@@ -7630,7 +7629,8 @@ const exportTemplates = async (pathToWhereEmailMarkupShouldBeDumped, emailsDirec
|
|
|
7630
7629
|
eval: true,
|
|
7631
7630
|
workerData: {
|
|
7632
7631
|
templates: batch,
|
|
7633
|
-
options
|
|
7632
|
+
options,
|
|
7633
|
+
extension
|
|
7634
7634
|
}
|
|
7635
7635
|
});
|
|
7636
7636
|
worker.on("message", (msg) => {
|
|
@@ -7786,10 +7786,11 @@ else {
|
|
|
7786
7786
|
program.command("dev").description("Starts the preview email development app").option("-d, --dir <path>", "Directory with your email templates", "./emails").option("-p --port <port>", "Port to run dev server on", "3000").option("-c, --clients <clients>", "Comma-separated list of email clients to show compatibility warnings for (overrides COMPATIBILITY_EMAIL_CLIENTS)", parseClientsOption).action(dev);
|
|
7787
7787
|
program.command("build").description("Copies the preview app for onto .react-email and builds it").option("-d, --dir <path>", "Directory with your email templates", "./emails").addOption(new Option("-p, --packageManager <name>").hideHelp()).action(build$1);
|
|
7788
7788
|
program.command("start").description("Runs the built preview app that is inside of \".react-email\"").action(start);
|
|
7789
|
-
program.command("export").description("Build the templates to the `out` directory").option("--outDir <path>", "Output directory", "out").option("-p, --pretty", "Pretty print the output", false).option("-t, --plainText", "Set output format as plain text", false).option("-d, --dir <path>", "Directory with your email templates", "./emails").option("-s, --silent", "To, or not to show a spinner with process information", false).action(({ outDir, pretty, plainText, silent, dir: srcDir }) => exportTemplates(outDir, srcDir, {
|
|
7789
|
+
program.command("export").description("Build the templates to the `out` directory").option("--outDir <path>", "Output directory", "out").option("-p, --pretty", "Pretty print the output", false).option("-t, --plainText", "Set output format as plain text", false).option("-d, --dir <path>", "Directory with your email templates", "./emails").option("-e, --extension <extension>", "Set a custom file extension for rendered emails (e.g. blade.php)").option("-s, --silent", "To, or not to show a spinner with process information", false).action(({ outDir, pretty, plainText, silent, dir: srcDir, extension }) => exportTemplates(outDir, srcDir, {
|
|
7790
7790
|
silent,
|
|
7791
7791
|
plainText,
|
|
7792
|
-
pretty
|
|
7792
|
+
pretty,
|
|
7793
|
+
extension
|
|
7793
7794
|
}));
|
|
7794
7795
|
const resend = program.command("resend");
|
|
7795
7796
|
resend.command("setup").description("Sets up the integration between the React Email CLI, and your Resend account through an API Key").action(resendSetup);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_element_marker = require("../element-marker.cjs");
|
|
3
|
+
const require_margin_properties = require("./margin-properties.cjs");
|
|
4
|
+
let react = require("react");
|
|
5
|
+
react = require_runtime.__toESM(react);
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
//#region src/components/body/body.tsx
|
|
8
|
+
const Body = react.forwardRef(({ children, style, ...props }, ref) => {
|
|
9
|
+
const bodyStyle = {
|
|
10
|
+
background: style?.background,
|
|
11
|
+
backgroundColor: style?.backgroundColor
|
|
12
|
+
};
|
|
13
|
+
if (style) for (const property of [...require_margin_properties.marginProperties, ...require_margin_properties.paddingProperties]) bodyStyle[property] = style[property] !== void 0 ? 0 : void 0;
|
|
14
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("body", {
|
|
15
|
+
...props,
|
|
16
|
+
dir: props.dir ?? "ltr",
|
|
17
|
+
lang: props.lang ?? "en",
|
|
18
|
+
style: bodyStyle,
|
|
19
|
+
ref,
|
|
20
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("table", {
|
|
21
|
+
border: 0,
|
|
22
|
+
width: "100%",
|
|
23
|
+
cellPadding: "0",
|
|
24
|
+
cellSpacing: "0",
|
|
25
|
+
role: "presentation",
|
|
26
|
+
align: "center",
|
|
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
|
+
dir: props.dir ?? "ltr",
|
|
29
|
+
lang: props.lang ?? "en",
|
|
30
|
+
style,
|
|
31
|
+
children
|
|
32
|
+
}) }) })
|
|
33
|
+
})
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
Body.displayName = "Body";
|
|
37
|
+
require_element_marker.markAsElement(Body);
|
|
38
|
+
//#endregion
|
|
39
|
+
exports.Body = Body;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/components/body/body.d.ts
|
|
4
|
+
type BodyProps = Readonly<React$1.HtmlHTMLAttributes<HTMLBodyElement>>;
|
|
5
|
+
declare const Body: React$1.ForwardRefExoticComponent<Readonly<React$1.HtmlHTMLAttributes<HTMLBodyElement>> & React$1.RefAttributes<HTMLBodyElement>>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { Body, BodyProps };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/components/body/body.d.ts
|
|
4
|
+
type BodyProps = Readonly<React$1.HtmlHTMLAttributes<HTMLBodyElement>>;
|
|
5
|
+
declare const Body: React$1.ForwardRefExoticComponent<Readonly<React$1.HtmlHTMLAttributes<HTMLBodyElement>> & React$1.RefAttributes<HTMLBodyElement>>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { Body, BodyProps };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { markAsElement } from "../element-marker.mjs";
|
|
2
|
+
import { marginProperties, paddingProperties } from "./margin-properties.mjs";
|
|
3
|
+
import * as React$1 from "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/body/body.tsx
|
|
6
|
+
const Body = React$1.forwardRef(({ children, style, ...props }, ref) => {
|
|
7
|
+
const bodyStyle = {
|
|
8
|
+
background: style?.background,
|
|
9
|
+
backgroundColor: style?.backgroundColor
|
|
10
|
+
};
|
|
11
|
+
if (style) for (const property of [...marginProperties, ...paddingProperties]) bodyStyle[property] = style[property] !== void 0 ? 0 : void 0;
|
|
12
|
+
return /* @__PURE__ */ jsx("body", {
|
|
13
|
+
...props,
|
|
14
|
+
dir: props.dir ?? "ltr",
|
|
15
|
+
lang: props.lang ?? "en",
|
|
16
|
+
style: bodyStyle,
|
|
17
|
+
ref,
|
|
18
|
+
children: /* @__PURE__ */ jsx("table", {
|
|
19
|
+
border: 0,
|
|
20
|
+
width: "100%",
|
|
21
|
+
cellPadding: "0",
|
|
22
|
+
cellSpacing: "0",
|
|
23
|
+
role: "presentation",
|
|
24
|
+
align: "center",
|
|
25
|
+
children: /* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
|
|
26
|
+
dir: props.dir ?? "ltr",
|
|
27
|
+
lang: props.lang ?? "en",
|
|
28
|
+
style,
|
|
29
|
+
children
|
|
30
|
+
}) }) })
|
|
31
|
+
})
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
Body.displayName = "Body";
|
|
35
|
+
markAsElement(Body);
|
|
36
|
+
//#endregion
|
|
37
|
+
export { Body };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { Body, BodyProps } from "./body.cjs";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { Body, BodyProps } from "./body.mjs";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region src/components/body/margin-properties.ts
|
|
2
|
+
const marginProperties = [
|
|
3
|
+
"margin",
|
|
4
|
+
"marginTop",
|
|
5
|
+
"marginBottom",
|
|
6
|
+
"marginRight",
|
|
7
|
+
"marginLeft",
|
|
8
|
+
"marginInline",
|
|
9
|
+
"marginBlock",
|
|
10
|
+
"marginBlockStart",
|
|
11
|
+
"marginBlockEnd",
|
|
12
|
+
"marginInlineStart",
|
|
13
|
+
"marginInlineEnd"
|
|
14
|
+
];
|
|
15
|
+
const paddingProperties = [
|
|
16
|
+
"padding",
|
|
17
|
+
"paddingTop",
|
|
18
|
+
"paddingBottom",
|
|
19
|
+
"paddingRight",
|
|
20
|
+
"paddingLeft",
|
|
21
|
+
"paddingInline",
|
|
22
|
+
"paddingBlock",
|
|
23
|
+
"paddingBlockStart",
|
|
24
|
+
"paddingBlockEnd",
|
|
25
|
+
"paddingInlineStart",
|
|
26
|
+
"paddingInlineEnd"
|
|
27
|
+
];
|
|
28
|
+
//#endregion
|
|
29
|
+
exports.marginProperties = marginProperties;
|
|
30
|
+
exports.paddingProperties = paddingProperties;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/components/body/margin-properties.ts
|
|
2
|
+
const marginProperties = [
|
|
3
|
+
"margin",
|
|
4
|
+
"marginTop",
|
|
5
|
+
"marginBottom",
|
|
6
|
+
"marginRight",
|
|
7
|
+
"marginLeft",
|
|
8
|
+
"marginInline",
|
|
9
|
+
"marginBlock",
|
|
10
|
+
"marginBlockStart",
|
|
11
|
+
"marginBlockEnd",
|
|
12
|
+
"marginInlineStart",
|
|
13
|
+
"marginInlineEnd"
|
|
14
|
+
];
|
|
15
|
+
const paddingProperties = [
|
|
16
|
+
"padding",
|
|
17
|
+
"paddingTop",
|
|
18
|
+
"paddingBottom",
|
|
19
|
+
"paddingRight",
|
|
20
|
+
"paddingLeft",
|
|
21
|
+
"paddingInline",
|
|
22
|
+
"paddingBlock",
|
|
23
|
+
"paddingBlockStart",
|
|
24
|
+
"paddingBlockEnd",
|
|
25
|
+
"paddingInlineStart",
|
|
26
|
+
"paddingInlineEnd"
|
|
27
|
+
];
|
|
28
|
+
//#endregion
|
|
29
|
+
export { marginProperties, paddingProperties };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_element_marker = require("../element-marker.cjs");
|
|
3
|
+
const require_parse_padding = require("./utils/parse-padding.cjs");
|
|
4
|
+
const require_px_to_pt = require("./utils/px-to-pt.cjs");
|
|
5
|
+
let react = require("react");
|
|
6
|
+
react = require_runtime.__toESM(react);
|
|
7
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
|
+
//#region src/components/button/button.tsx
|
|
9
|
+
const maxFontWidth = 5;
|
|
10
|
+
/**
|
|
11
|
+
* Computes a msoFontWidth \<= 5 and a count of space characters that,
|
|
12
|
+
* when applied, end up being as close to `expectedWidth` as possible.
|
|
13
|
+
*/
|
|
14
|
+
function computeFontWidthAndSpaceCount(expectedWidth) {
|
|
15
|
+
if (expectedWidth === 0) return [0, 0];
|
|
16
|
+
let smallestSpaceCount = 0;
|
|
17
|
+
const computeRequiredFontWidth = () => {
|
|
18
|
+
if (smallestSpaceCount > 0) return expectedWidth / smallestSpaceCount / 2;
|
|
19
|
+
return Number.POSITIVE_INFINITY;
|
|
20
|
+
};
|
|
21
|
+
while (computeRequiredFontWidth() > maxFontWidth) smallestSpaceCount++;
|
|
22
|
+
return [computeRequiredFontWidth(), smallestSpaceCount];
|
|
23
|
+
}
|
|
24
|
+
const Button = react.forwardRef(({ children, style, target = "_blank", ...props }, ref) => {
|
|
25
|
+
const { paddingTop, paddingRight, paddingBottom, paddingLeft } = require_parse_padding.parsePadding(style ?? {});
|
|
26
|
+
const textRaise = require_px_to_pt.pxToPt((paddingTop ?? 0) + (paddingBottom ?? 0));
|
|
27
|
+
const [plFontWidth, plSpaceCount] = computeFontWidthAndSpaceCount(paddingLeft ?? 0);
|
|
28
|
+
const [prFontWidth, prSpaceCount] = computeFontWidthAndSpaceCount(paddingRight ?? 0);
|
|
29
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
|
|
30
|
+
...props,
|
|
31
|
+
ref,
|
|
32
|
+
style: {
|
|
33
|
+
lineHeight: "100%",
|
|
34
|
+
textDecoration: "none",
|
|
35
|
+
display: "inline-block",
|
|
36
|
+
maxWidth: "100%",
|
|
37
|
+
msoPaddingAlt: "0px",
|
|
38
|
+
...style,
|
|
39
|
+
paddingTop,
|
|
40
|
+
paddingRight,
|
|
41
|
+
paddingBottom,
|
|
42
|
+
paddingLeft
|
|
43
|
+
},
|
|
44
|
+
target,
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: `<!--[if mso]><i style="mso-font-width:${plFontWidth * 100}%;mso-text-raise:${textRaise}px" hidden>${" ".repeat(plSpaceCount)}</i><![endif]-->` } }),
|
|
47
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
48
|
+
style: {
|
|
49
|
+
maxWidth: "100%",
|
|
50
|
+
display: "inline-block",
|
|
51
|
+
lineHeight: "120%",
|
|
52
|
+
msoPaddingAlt: "0px",
|
|
53
|
+
msoTextRaise: require_px_to_pt.pxToPt(paddingBottom)
|
|
54
|
+
},
|
|
55
|
+
children
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { dangerouslySetInnerHTML: { __html: `<!--[if mso]><i style="mso-font-width:${prFontWidth * 100}%" hidden>${" ".repeat(prSpaceCount)}​</i><![endif]-->` } })
|
|
58
|
+
]
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
Button.displayName = "Button";
|
|
62
|
+
require_element_marker.markAsElement(Button);
|
|
63
|
+
//#endregion
|
|
64
|
+
exports.Button = Button;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/components/button/button.d.ts
|
|
4
|
+
type ButtonProps = Readonly<React$1.ComponentPropsWithoutRef<'a'>>;
|
|
5
|
+
declare module 'react' {
|
|
6
|
+
interface CSSProperties {
|
|
7
|
+
msoPaddingAlt?: string | number | undefined;
|
|
8
|
+
msoTextRaise?: string | number | undefined;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
declare const Button: React$1.ForwardRefExoticComponent<Readonly<Omit<React$1.DetailedHTMLProps<React$1.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref">> & React$1.RefAttributes<HTMLAnchorElement>>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { Button, ButtonProps };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/components/button/button.d.ts
|
|
4
|
+
type ButtonProps = Readonly<React$1.ComponentPropsWithoutRef<'a'>>;
|
|
5
|
+
declare module 'react' {
|
|
6
|
+
interface CSSProperties {
|
|
7
|
+
msoPaddingAlt?: string | number | undefined;
|
|
8
|
+
msoTextRaise?: string | number | undefined;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
declare const Button: React$1.ForwardRefExoticComponent<Readonly<Omit<React$1.DetailedHTMLProps<React$1.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref">> & React$1.RefAttributes<HTMLAnchorElement>>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { Button, ButtonProps };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { markAsElement } from "../element-marker.mjs";
|
|
2
|
+
import { parsePadding } from "./utils/parse-padding.mjs";
|
|
3
|
+
import { pxToPt } from "./utils/px-to-pt.mjs";
|
|
4
|
+
import * as React$1 from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region src/components/button/button.tsx
|
|
7
|
+
const maxFontWidth = 5;
|
|
8
|
+
/**
|
|
9
|
+
* Computes a msoFontWidth \<= 5 and a count of space characters that,
|
|
10
|
+
* when applied, end up being as close to `expectedWidth` as possible.
|
|
11
|
+
*/
|
|
12
|
+
function computeFontWidthAndSpaceCount(expectedWidth) {
|
|
13
|
+
if (expectedWidth === 0) return [0, 0];
|
|
14
|
+
let smallestSpaceCount = 0;
|
|
15
|
+
const computeRequiredFontWidth = () => {
|
|
16
|
+
if (smallestSpaceCount > 0) return expectedWidth / smallestSpaceCount / 2;
|
|
17
|
+
return Number.POSITIVE_INFINITY;
|
|
18
|
+
};
|
|
19
|
+
while (computeRequiredFontWidth() > maxFontWidth) smallestSpaceCount++;
|
|
20
|
+
return [computeRequiredFontWidth(), smallestSpaceCount];
|
|
21
|
+
}
|
|
22
|
+
const Button = React$1.forwardRef(({ children, style, target = "_blank", ...props }, ref) => {
|
|
23
|
+
const { paddingTop, paddingRight, paddingBottom, paddingLeft } = parsePadding(style ?? {});
|
|
24
|
+
const textRaise = pxToPt((paddingTop ?? 0) + (paddingBottom ?? 0));
|
|
25
|
+
const [plFontWidth, plSpaceCount] = computeFontWidthAndSpaceCount(paddingLeft ?? 0);
|
|
26
|
+
const [prFontWidth, prSpaceCount] = computeFontWidthAndSpaceCount(paddingRight ?? 0);
|
|
27
|
+
return /* @__PURE__ */ jsxs("a", {
|
|
28
|
+
...props,
|
|
29
|
+
ref,
|
|
30
|
+
style: {
|
|
31
|
+
lineHeight: "100%",
|
|
32
|
+
textDecoration: "none",
|
|
33
|
+
display: "inline-block",
|
|
34
|
+
maxWidth: "100%",
|
|
35
|
+
msoPaddingAlt: "0px",
|
|
36
|
+
...style,
|
|
37
|
+
paddingTop,
|
|
38
|
+
paddingRight,
|
|
39
|
+
paddingBottom,
|
|
40
|
+
paddingLeft
|
|
41
|
+
},
|
|
42
|
+
target,
|
|
43
|
+
children: [
|
|
44
|
+
/* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: `<!--[if mso]><i style="mso-font-width:${plFontWidth * 100}%;mso-text-raise:${textRaise}px" hidden>${" ".repeat(plSpaceCount)}</i><![endif]-->` } }),
|
|
45
|
+
/* @__PURE__ */ jsx("span", {
|
|
46
|
+
style: {
|
|
47
|
+
maxWidth: "100%",
|
|
48
|
+
display: "inline-block",
|
|
49
|
+
lineHeight: "120%",
|
|
50
|
+
msoPaddingAlt: "0px",
|
|
51
|
+
msoTextRaise: pxToPt(paddingBottom)
|
|
52
|
+
},
|
|
53
|
+
children
|
|
54
|
+
}),
|
|
55
|
+
/* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: `<!--[if mso]><i style="mso-font-width:${prFontWidth * 100}%" hidden>${" ".repeat(prSpaceCount)}​</i><![endif]-->` } })
|
|
56
|
+
]
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
Button.displayName = "Button";
|
|
60
|
+
markAsElement(Button);
|
|
61
|
+
//#endregion
|
|
62
|
+
export { Button };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { Button, ButtonProps } from "./button.cjs";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { Button, ButtonProps } from "./button.mjs";
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
//#region src/components/button/utils/parse-padding.ts
|
|
2
|
+
/**
|
|
3
|
+
* converts padding value to `px` equivalent.
|
|
4
|
+
* @example "1em" =\> 16
|
|
5
|
+
*/
|
|
6
|
+
function convertToPx(value) {
|
|
7
|
+
let px = 0;
|
|
8
|
+
if (!value) return px;
|
|
9
|
+
if (typeof value === "number") return value;
|
|
10
|
+
const matches = /^([\d.]+)(px|em|rem|%)$/.exec(value);
|
|
11
|
+
if (matches && matches.length === 3) {
|
|
12
|
+
const numValue = Number.parseFloat(matches[1]);
|
|
13
|
+
switch (matches[2]) {
|
|
14
|
+
case "px": return numValue;
|
|
15
|
+
case "em":
|
|
16
|
+
case "rem":
|
|
17
|
+
px = numValue * 16;
|
|
18
|
+
return px;
|
|
19
|
+
case "%":
|
|
20
|
+
px = numValue / 100 * 600;
|
|
21
|
+
return px;
|
|
22
|
+
default: return numValue;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
function parsePaddingValue(value) {
|
|
28
|
+
if (typeof value === "number") return {
|
|
29
|
+
paddingTop: value,
|
|
30
|
+
paddingBottom: value,
|
|
31
|
+
paddingLeft: value,
|
|
32
|
+
paddingRight: value
|
|
33
|
+
};
|
|
34
|
+
if (typeof value === "string") {
|
|
35
|
+
const values = value.toString().trim().split(/\s+/);
|
|
36
|
+
if (values.length === 1) return {
|
|
37
|
+
paddingTop: values[0],
|
|
38
|
+
paddingBottom: values[0],
|
|
39
|
+
paddingLeft: values[0],
|
|
40
|
+
paddingRight: values[0]
|
|
41
|
+
};
|
|
42
|
+
if (values.length === 2) return {
|
|
43
|
+
paddingTop: values[0],
|
|
44
|
+
paddingRight: values[1],
|
|
45
|
+
paddingBottom: values[0],
|
|
46
|
+
paddingLeft: values[1]
|
|
47
|
+
};
|
|
48
|
+
if (values.length === 3) return {
|
|
49
|
+
paddingTop: values[0],
|
|
50
|
+
paddingRight: values[1],
|
|
51
|
+
paddingBottom: values[2],
|
|
52
|
+
paddingLeft: values[1]
|
|
53
|
+
};
|
|
54
|
+
if (values.length === 4) return {
|
|
55
|
+
paddingTop: values[0],
|
|
56
|
+
paddingRight: values[1],
|
|
57
|
+
paddingBottom: values[2],
|
|
58
|
+
paddingLeft: values[3]
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
paddingTop: void 0,
|
|
63
|
+
paddingBottom: void 0,
|
|
64
|
+
paddingLeft: void 0,
|
|
65
|
+
paddingRight: void 0
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Parses all the values out of a padding string to get the value for all padding props in `px`
|
|
70
|
+
* @example e.g. "10px" =\> pt: 10, pr: 10, pb: 10, pl: 10
|
|
71
|
+
*/
|
|
72
|
+
function parsePadding(properties) {
|
|
73
|
+
let paddingTop;
|
|
74
|
+
let paddingRight;
|
|
75
|
+
let paddingBottom;
|
|
76
|
+
let paddingLeft;
|
|
77
|
+
for (const [key, value] of Object.entries(properties)) if (key === "padding") ({paddingTop, paddingBottom, paddingLeft, paddingRight} = parsePaddingValue(value));
|
|
78
|
+
else if (key === "paddingTop") paddingTop = value;
|
|
79
|
+
else if (key === "paddingRight") paddingRight = value;
|
|
80
|
+
else if (key === "paddingBottom") paddingBottom = value;
|
|
81
|
+
else if (key === "paddingLeft") paddingLeft = value;
|
|
82
|
+
return {
|
|
83
|
+
paddingTop: paddingTop ? convertToPx(paddingTop) : void 0,
|
|
84
|
+
paddingRight: paddingRight ? convertToPx(paddingRight) : void 0,
|
|
85
|
+
paddingBottom: paddingBottom ? convertToPx(paddingBottom) : void 0,
|
|
86
|
+
paddingLeft: paddingLeft ? convertToPx(paddingLeft) : void 0
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
90
|
+
exports.parsePadding = parsePadding;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
//#region src/components/button/utils/parse-padding.ts
|
|
2
|
+
/**
|
|
3
|
+
* converts padding value to `px` equivalent.
|
|
4
|
+
* @example "1em" =\> 16
|
|
5
|
+
*/
|
|
6
|
+
function convertToPx(value) {
|
|
7
|
+
let px = 0;
|
|
8
|
+
if (!value) return px;
|
|
9
|
+
if (typeof value === "number") return value;
|
|
10
|
+
const matches = /^([\d.]+)(px|em|rem|%)$/.exec(value);
|
|
11
|
+
if (matches && matches.length === 3) {
|
|
12
|
+
const numValue = Number.parseFloat(matches[1]);
|
|
13
|
+
switch (matches[2]) {
|
|
14
|
+
case "px": return numValue;
|
|
15
|
+
case "em":
|
|
16
|
+
case "rem":
|
|
17
|
+
px = numValue * 16;
|
|
18
|
+
return px;
|
|
19
|
+
case "%":
|
|
20
|
+
px = numValue / 100 * 600;
|
|
21
|
+
return px;
|
|
22
|
+
default: return numValue;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
function parsePaddingValue(value) {
|
|
28
|
+
if (typeof value === "number") return {
|
|
29
|
+
paddingTop: value,
|
|
30
|
+
paddingBottom: value,
|
|
31
|
+
paddingLeft: value,
|
|
32
|
+
paddingRight: value
|
|
33
|
+
};
|
|
34
|
+
if (typeof value === "string") {
|
|
35
|
+
const values = value.toString().trim().split(/\s+/);
|
|
36
|
+
if (values.length === 1) return {
|
|
37
|
+
paddingTop: values[0],
|
|
38
|
+
paddingBottom: values[0],
|
|
39
|
+
paddingLeft: values[0],
|
|
40
|
+
paddingRight: values[0]
|
|
41
|
+
};
|
|
42
|
+
if (values.length === 2) return {
|
|
43
|
+
paddingTop: values[0],
|
|
44
|
+
paddingRight: values[1],
|
|
45
|
+
paddingBottom: values[0],
|
|
46
|
+
paddingLeft: values[1]
|
|
47
|
+
};
|
|
48
|
+
if (values.length === 3) return {
|
|
49
|
+
paddingTop: values[0],
|
|
50
|
+
paddingRight: values[1],
|
|
51
|
+
paddingBottom: values[2],
|
|
52
|
+
paddingLeft: values[1]
|
|
53
|
+
};
|
|
54
|
+
if (values.length === 4) return {
|
|
55
|
+
paddingTop: values[0],
|
|
56
|
+
paddingRight: values[1],
|
|
57
|
+
paddingBottom: values[2],
|
|
58
|
+
paddingLeft: values[3]
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
paddingTop: void 0,
|
|
63
|
+
paddingBottom: void 0,
|
|
64
|
+
paddingLeft: void 0,
|
|
65
|
+
paddingRight: void 0
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Parses all the values out of a padding string to get the value for all padding props in `px`
|
|
70
|
+
* @example e.g. "10px" =\> pt: 10, pr: 10, pb: 10, pl: 10
|
|
71
|
+
*/
|
|
72
|
+
function parsePadding(properties) {
|
|
73
|
+
let paddingTop;
|
|
74
|
+
let paddingRight;
|
|
75
|
+
let paddingBottom;
|
|
76
|
+
let paddingLeft;
|
|
77
|
+
for (const [key, value] of Object.entries(properties)) if (key === "padding") ({paddingTop, paddingBottom, paddingLeft, paddingRight} = parsePaddingValue(value));
|
|
78
|
+
else if (key === "paddingTop") paddingTop = value;
|
|
79
|
+
else if (key === "paddingRight") paddingRight = value;
|
|
80
|
+
else if (key === "paddingBottom") paddingBottom = value;
|
|
81
|
+
else if (key === "paddingLeft") paddingLeft = value;
|
|
82
|
+
return {
|
|
83
|
+
paddingTop: paddingTop ? convertToPx(paddingTop) : void 0,
|
|
84
|
+
paddingRight: paddingRight ? convertToPx(paddingRight) : void 0,
|
|
85
|
+
paddingBottom: paddingBottom ? convertToPx(paddingBottom) : void 0,
|
|
86
|
+
paddingLeft: paddingLeft ? convertToPx(paddingLeft) : void 0
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
90
|
+
export { parsePadding };
|