react-email 6.7.0 → 6.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  3. package/dist/cli/index.mjs +3 -2
  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 +5 -4
  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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # react-email
2
2
 
3
+ ## 6.8.1
4
+
5
+ ## 6.8.0
6
+
7
+ ### Minor Changes
8
+
9
+ - 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.
10
+
11
+ ### Patch Changes
12
+
13
+ - 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.
14
+ - 7b32bf6: Fixed toolbar tabs not responding on statically built previews when the page was opened with a `toolbar-panel` query param in the URL.
15
+
3
16
  ## 6.7.0
4
17
 
5
18
  ### Minor 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;
@@ -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.7.0",
6536
+ version: "6.8.1",
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",
@@ -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.4.2",
6584
+ "jiti": "2.6.1",
6584
6585
  "log-symbols": "catalog:",
6585
6586
  "marked": "^15.0.12",
6586
6587
  "mime-types": "^3.0.0",
@@ -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>${"&#8202;".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>${"&#8202;".repeat(prSpaceCount)}&#8203;</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>${"&#8202;".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>${"&#8202;".repeat(prSpaceCount)}&#8203;</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 };
@@ -0,0 +1,4 @@
1
+ //#region src/components/button/utils/px-to-pt.ts
2
+ const pxToPt = (px) => typeof px === "number" && !Number.isNaN(Number(px)) ? px * 3 / 4 : void 0;
3
+ //#endregion
4
+ exports.pxToPt = pxToPt;
@@ -0,0 +1,4 @@
1
+ //#region src/components/button/utils/px-to-pt.ts
2
+ const pxToPt = (px) => typeof px === "number" && !Number.isNaN(Number(px)) ? px * 3 / 4 : void 0;
3
+ //#endregion
4
+ export { pxToPt };
@@ -0,0 +1,79 @@
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
+ const require_element_marker = require("../element-marker.cjs");
3
+ const require_prism = require("./prism.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/code-block/code-block.tsx
8
+ const stylesForToken = (token, theme) => {
9
+ let styles = { ...theme[token.type] };
10
+ const aliases = Array.isArray(token.alias) ? token.alias : [token.alias];
11
+ for (const alias of aliases) styles = {
12
+ ...styles,
13
+ ...theme[alias]
14
+ };
15
+ return styles;
16
+ };
17
+ const CodeBlockLine = ({ token, theme, inheritedStyles }) => {
18
+ if (token instanceof require_prism.Prism.Token) {
19
+ const styleForToken = {
20
+ ...inheritedStyles,
21
+ ...stylesForToken(token, theme)
22
+ };
23
+ if (token.content instanceof require_prism.Prism.Token) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
24
+ style: styleForToken,
25
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CodeBlockLine, {
26
+ theme,
27
+ token: token.content
28
+ })
29
+ });
30
+ if (typeof token.content === "string") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
31
+ style: styleForToken,
32
+ children: token.content
33
+ });
34
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: token.content.map((subToken, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CodeBlockLine, {
35
+ inheritedStyles: styleForToken,
36
+ theme,
37
+ token: subToken
38
+ }, i)) });
39
+ }
40
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
41
+ style: inheritedStyles,
42
+ children: token.replaceAll(" ", "\xA0‍​")
43
+ });
44
+ };
45
+ const CodeBlock = react.forwardRef(({ code, fontFamily, lineNumbers, theme, language, ...rest }, ref) => {
46
+ const languageGrammar = require_prism.Prism.languages[language];
47
+ if (typeof languageGrammar === "undefined") throw new Error(`CodeBlock: There is no language defined on Prism called ${language}`);
48
+ const tokensPerLine = code.split(/\r\n|\r|\n/gm).map((line) => require_prism.Prism.tokenize(line, languageGrammar));
49
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
50
+ ...rest,
51
+ ref,
52
+ style: {
53
+ ...theme.base,
54
+ width: "100%",
55
+ ...rest.style
56
+ },
57
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: tokensPerLine.map((tokensForLine, lineIndex) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [
58
+ lineNumbers ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
59
+ style: {
60
+ width: "2em",
61
+ height: "1em",
62
+ display: "inline-block",
63
+ fontFamily
64
+ },
65
+ children: lineIndex + 1
66
+ }) : null,
67
+ tokensForLine.map((token, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CodeBlockLine, {
68
+ inheritedStyles: { fontFamily },
69
+ theme,
70
+ token
71
+ }, i)),
72
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("br", {})
73
+ ] }, lineIndex)) })
74
+ });
75
+ });
76
+ CodeBlock.displayName = "CodeBlock";
77
+ require_element_marker.markAsElement(CodeBlock);
78
+ //#endregion
79
+ exports.CodeBlock = CodeBlock;