@unmail/react 0.1.2 → 0.1.3
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/dist/index.d.mts +222 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +3627 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +8 -10
- package/dist/chunk-Bp6m_JJh.js +0 -13
- package/dist/index.d.ts +0 -5120
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -20861
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["React","React","React","React","React","React","React","React","React","React","React","React","React","React","React","React","css","css","css","indexCss","preflightCss","themeCss","utilitiesCss","css","React"],"sources":["../src/components/body.tsx","../src/utils/parse-padding.ts","../src/utils/px-to-pt.ts","../src/components/button.tsx","../src/components/code-inline.tsx","../src/components/column.tsx","../src/components/container.tsx","../src/components/font.tsx","../src/components/head.tsx","../src/utils/spaces.ts","../src/components/heading.tsx","../src/components/hr.tsx","../src/components/html.tsx","../src/components/img.tsx","../src/components/link.tsx","../src/utils/markdown-styles.ts","../src/utils/parse-css-in-js-to-inline-css.ts","../src/components/markdown.tsx","../src/components/preview.tsx","../src/components/row.tsx","../src/components/section.tsx","../src/utils/compute-margins.ts","../src/components/text.tsx","../src/render/error-boundary.tsx","../src/render/plain-text-selectors.ts","../src/render/read-stream.ts","../src/render/render.tsx","../src/tailwind/utils/is-rule-inlinable.ts","../src/tailwind/utils/is-part-inlinable.ts","../src/tailwind/utils/split-mixed-rule.ts","../src/tailwind/utils/extract-rules-per-class.ts","../src/tailwind/utils/get-custom-properties.ts","../src/tailwind/utils/from-dash-case-to-camel-case.ts","../src/tailwind/utils/get-react-property.ts","../src/tailwind/utils/unwrap-value.ts","../src/tailwind/utils/make-inline-styles-for.ts","../src/tailwind/utils/resolve-all-css-variables.ts","../src/tailwind/utils/resolve-calc-expressions.ts","../src/tailwind/utils/sanitize-declarations.ts","../src/tailwind/sanitize-stylesheet.ts","../src/tailwind/use-suspended-promise.ts","../src/tailwind/utils/sanitize-class-name.ts","../src/tailwind/utils/sanitize-non-inlinable-rules.ts","../src/tailwind/is-component.ts","../src/tailwind/map-react-tree.ts","../src/tailwind/clone-element-with-inlined-styles.ts","../src/tailwind/css/index.ts","../src/tailwind/css/preflight.ts","../src/tailwind/css/theme.ts","../src/tailwind/css/utilities.ts","../src/tailwind/setup-tailwind.ts","../src/tailwind/tailwind.tsx"],"sourcesContent":["import * as React from 'react';\n\nconst marginProperties: (keyof React.CSSProperties)[] = [\n 'margin',\n 'marginTop',\n 'marginBottom',\n 'marginRight',\n 'marginLeft',\n 'marginInline',\n 'marginBlock',\n 'marginBlockStart',\n 'marginBlockEnd',\n 'marginInlineStart',\n 'marginInlineEnd',\n];\n\nexport type BodyProps = Readonly<React.HtmlHTMLAttributes<HTMLBodyElement>>;\n\nexport const Body = React.forwardRef<HTMLBodyElement, BodyProps>(\n ({ children, style, ...props }, ref) => {\n const bodyStyle: Record<string, string | number | undefined> = {\n background: style?.background,\n backgroundColor: style?.backgroundColor,\n };\n if (style) {\n for (const property of marginProperties) {\n bodyStyle[property] = style[property] !== undefined ? 0 : undefined;\n }\n }\n return (\n <body {...props} style={bodyStyle} ref={ref}>\n <table\n border={0}\n width=\"100%\"\n cellPadding=\"0\"\n cellSpacing=\"0\"\n role=\"presentation\"\n align=\"center\"\n >\n <tbody>\n <tr>\n <td style={style}>{children}</td>\n </tr>\n </tbody>\n </table>\n </body>\n );\n },\n);\n\nBody.displayName = 'Body';\n","type PaddingType = string | number | undefined;\n\ninterface PaddingProperties {\n padding?: PaddingType;\n paddingTop?: PaddingType;\n paddingRight?: PaddingType;\n paddingBottom?: PaddingType;\n paddingLeft?: PaddingType;\n}\n\nexport function convertToPx(value: PaddingType) {\n let px = 0;\n\n if (!value) {\n return px;\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n const matches = /^([\\d.]+)(px|em|rem|%)$/.exec(value);\n\n if (matches && matches.length === 3) {\n const numValue = Number.parseFloat(matches[1]);\n const unit = matches[2];\n\n switch (unit) {\n case 'px':\n return numValue;\n case 'em':\n case 'rem':\n px = numValue * 16;\n return px;\n case '%':\n px = (numValue / 100) * 600;\n return px;\n default:\n return numValue;\n }\n }\n return 0;\n}\n\nfunction parsePaddingValue(value: PaddingType) {\n if (typeof value === 'number')\n return {\n paddingTop: value,\n paddingBottom: value,\n paddingLeft: value,\n paddingRight: value,\n };\n\n if (typeof value === 'string') {\n const values = value.toString().trim().split(/\\s+/);\n\n if (values.length === 1) {\n return {\n paddingTop: values[0],\n paddingBottom: values[0],\n paddingLeft: values[0],\n paddingRight: values[0],\n };\n }\n\n if (values.length === 2) {\n return {\n paddingTop: values[0],\n paddingRight: values[1],\n paddingBottom: values[0],\n paddingLeft: values[1],\n };\n }\n\n if (values.length === 3) {\n return {\n paddingTop: values[0],\n paddingRight: values[1],\n paddingBottom: values[2],\n paddingLeft: values[1],\n };\n }\n\n if (values.length === 4) {\n return {\n paddingTop: values[0],\n paddingRight: values[1],\n paddingBottom: values[2],\n paddingLeft: values[3],\n };\n }\n }\n\n return {\n paddingTop: undefined,\n paddingBottom: undefined,\n paddingLeft: undefined,\n paddingRight: undefined,\n };\n}\n\nexport function parsePadding(properties: PaddingProperties) {\n let paddingTop: string | number | undefined;\n let paddingRight: string | number | undefined;\n let paddingBottom: string | number | undefined;\n let paddingLeft: string | number | undefined;\n\n for (const [key, value] of Object.entries(properties)) {\n if (key === 'padding') {\n ({ paddingTop, paddingBottom, paddingLeft, paddingRight } =\n parsePaddingValue(value));\n } else if (key === 'paddingTop') {\n paddingTop = value;\n } else if (key === 'paddingRight') {\n paddingRight = value;\n } else if (key === 'paddingBottom') {\n paddingBottom = value;\n } else if (key === 'paddingLeft') {\n paddingLeft = value;\n }\n }\n\n return {\n paddingTop: paddingTop ? convertToPx(paddingTop) : undefined,\n paddingRight: paddingRight ? convertToPx(paddingRight) : undefined,\n paddingBottom: paddingBottom ? convertToPx(paddingBottom) : undefined,\n paddingLeft: paddingLeft ? convertToPx(paddingLeft) : undefined,\n };\n}\n","export const pxToPt = (px: number | undefined): number | undefined =>\n typeof px === 'number' && !Number.isNaN(Number(px))\n ? (px * 3) / 4\n : undefined;\n","import * as React from 'react';\nimport { parsePadding } from '../utils/parse-padding';\nimport { pxToPt } from '../utils/px-to-pt';\n\nexport type ButtonProps = Readonly<React.ComponentPropsWithoutRef<'a'>>;\n\nconst maxFontWidth = 5;\n\nfunction computeFontWidthAndSpaceCount(expectedWidth: number) {\n if (expectedWidth === 0) return [0, 0] as const;\n\n let smallestSpaceCount = 0;\n\n const computeRequiredFontWidth = () => {\n if (smallestSpaceCount > 0) {\n return expectedWidth / smallestSpaceCount / 2;\n }\n return Number.POSITIVE_INFINITY;\n };\n\n while (computeRequiredFontWidth() > maxFontWidth) {\n smallestSpaceCount++;\n }\n\n return [computeRequiredFontWidth(), smallestSpaceCount] as const;\n}\n\ndeclare module 'react' {\n interface CSSProperties {\n msoPaddingAlt?: string | number | undefined;\n msoTextRaise?: string | number | undefined;\n }\n}\n\nexport const Button = React.forwardRef<HTMLAnchorElement, ButtonProps>(\n ({ children, style, target = '_blank', ...props }, ref) => {\n const { paddingTop, paddingRight, paddingBottom, paddingLeft } =\n parsePadding(style ?? {});\n\n const y = (paddingTop ?? 0) + (paddingBottom ?? 0);\n const textRaise = pxToPt(y);\n\n const [plFontWidth, plSpaceCount] = computeFontWidthAndSpaceCount(\n paddingLeft ?? 0,\n );\n const [prFontWidth, prSpaceCount] = computeFontWidthAndSpaceCount(\n paddingRight ?? 0,\n );\n\n return (\n <a\n {...props}\n ref={ref}\n style={{\n lineHeight: '100%',\n textDecoration: 'none',\n display: 'inline-block',\n maxWidth: '100%',\n msoPaddingAlt: '0px',\n ...style,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n }}\n target={target}\n >\n <span\n dangerouslySetInnerHTML={{\n __html: `<!--[if mso]><i style=\"mso-font-width:${\n plFontWidth * 100\n }%;mso-text-raise:${textRaise}\" hidden>${' '.repeat(\n plSpaceCount,\n )}</i><![endif]-->`,\n }}\n />\n <span\n style={{\n maxWidth: '100%',\n display: 'inline-block',\n lineHeight: '120%',\n msoPaddingAlt: '0px',\n msoTextRaise: pxToPt(paddingBottom),\n }}\n >\n {children}\n </span>\n <span\n dangerouslySetInnerHTML={{\n __html: `<!--[if mso]><i style=\"mso-font-width:${\n prFontWidth * 100\n }%\" hidden>${' '.repeat(\n prSpaceCount,\n )}​</i><![endif]-->`,\n }}\n />\n </a>\n );\n },\n);\n\nButton.displayName = 'Button';\n","import * as React from 'react';\n\ntype RootProps = React.ComponentPropsWithoutRef<'code'> &\n React.ComponentPropsWithoutRef<'span'>;\n\nexport type CodeInlineProps = Readonly<RootProps>;\n\n/**\n * Renders an inline `<code>` element with a compatibility fix for the\n * Orange.fr email client, which strips `<code>` tags.\n *\n * A hidden `<span>` fallback is revealed via CSS when the `<head>` (and its\n * `<meta>` tags) are removed — a behaviour specific to Orange.fr.\n */\nexport const CodeInline = React.forwardRef<HTMLSpanElement, CodeInlineProps>(\n ({ children, ...props }, ref) => {\n return (\n <>\n {/*\n Orange.fr email client fix:\n - <code class=\"cino\"> is hidden on Orange.fr via the meta ~ .cino selector\n - <span class=\"cio\"> is revealed on Orange.fr via the meta ~ .cio selector\n See: https://www.caniemail.com/features/html-code/\n */}\n <style>{`\n meta ~ .cino {\n display: none !important;\n opacity: 0 !important;\n }\n\n meta ~ .cio {\n display: block !important;\n }\n `}</style>\n\n {/* Does not render on Orange.fr */}\n <code\n {...props}\n className={`${props.className ? props.className : ''} cino`}\n >\n {children}\n </code>\n\n {/* Renders only on Orange.fr */}\n <span\n {...props}\n className={`${props.className ? props.className : ''} cio`}\n ref={ref}\n style={{ display: 'none', ...props.style }}\n >\n {children}\n </span>\n </>\n );\n },\n);\n\nCodeInline.displayName = 'CodeInline';\n","import * as React from 'react';\n\nexport type ColumnProps = Readonly<React.ComponentPropsWithoutRef<'td'>>;\n\nexport const Column = React.forwardRef<HTMLTableCellElement, ColumnProps>(\n ({ children, style, ...props }, ref) => {\n return (\n <td {...props} ref={ref} style={style}>\n {children}\n </td>\n );\n },\n);\n\nColumn.displayName = 'Column';\n","import * as React from 'react';\n\nexport type ContainerProps = Readonly<\n React.ComponentPropsWithoutRef<'table'>\n>;\n\nexport const Container = React.forwardRef<HTMLTableElement, ContainerProps>(\n ({ children, style, ...props }, ref) => {\n return (\n <table\n align=\"center\"\n width=\"100%\"\n {...props}\n border={0}\n cellPadding=\"0\"\n cellSpacing=\"0\"\n ref={ref}\n role=\"presentation\"\n style={{ maxWidth: '37.5em', ...style }}\n >\n <tbody>\n <tr style={{ width: '100%' }}>\n <td>{children}</td>\n </tr>\n </tbody>\n </table>\n );\n },\n);\n\nContainer.displayName = 'Container';\n","import type * as React from 'react';\n\ntype FallbackFont =\n | 'Arial'\n | 'Helvetica'\n | 'Verdana'\n | 'Georgia'\n | 'Times New Roman'\n | 'serif'\n | 'sans-serif'\n | 'monospace'\n | 'cursive'\n | 'fantasy';\n\ntype FontFormat =\n | 'woff'\n | 'woff2'\n | 'truetype'\n | 'opentype'\n | 'embedded-opentype'\n | 'svg';\n\ntype FontWeight = React.CSSProperties['fontWeight'];\ntype FontStyle = React.CSSProperties['fontStyle'];\n\nexport interface FontProps {\n /** The font you want to use. NOTE: Do not insert multiple fonts here, use fallbackFontFamily for that */\n fontFamily: string;\n /** An array is possible, but the order of the array is the priority order */\n fallbackFontFamily: FallbackFont | FallbackFont[];\n /** Not all clients support web fonts. For support check: https://www.caniemail.com/features/css-at-font-face/ */\n webFont?: {\n url: string;\n format: FontFormat;\n };\n /** Default: 'normal' */\n fontStyle?: FontStyle;\n /** Default: 400 */\n fontWeight?: FontWeight;\n}\n\n/** The component MUST be placed inside the <Head> component */\nexport const Font: React.FC<Readonly<FontProps>> = ({\n fontFamily,\n fallbackFontFamily,\n webFont,\n fontStyle = 'normal',\n fontWeight = 400,\n}) => {\n const src = webFont\n ? `src: url(${webFont.url}) format('${webFont.format}');`\n : '';\n\n const style = `\n @font-face {\n font-family: '${fontFamily}';\n font-style: ${fontStyle};\n font-weight: ${fontWeight};\n mso-font-alt: '${\n Array.isArray(fallbackFontFamily)\n ? fallbackFontFamily[0]\n : fallbackFontFamily\n }';\n ${src}\n }\n\n * {\n font-family: '${fontFamily}', ${\n Array.isArray(fallbackFontFamily)\n ? fallbackFontFamily.join(', ')\n : fallbackFontFamily\n };\n }\n `;\n return <style dangerouslySetInnerHTML={{ __html: style }} />;\n};\n","import * as React from 'react';\n\nexport type HeadProps = Readonly<React.ComponentPropsWithoutRef<'head'>>;\n\nexport const Head = React.forwardRef<HTMLHeadElement, HeadProps>(\n ({ children, ...props }, ref) => (\n <head {...props} ref={ref}>\n <meta content=\"text/html; charset=UTF-8\" httpEquiv=\"Content-Type\" />\n <meta name=\"x-apple-disable-message-reformatting\" />\n {children}\n </head>\n ),\n);\n\nHead.displayName = 'Head';\n","import type React from 'react';\n\ntype MarginCSSProperty =\n | 'margin'\n | 'marginLeft'\n | 'marginRight'\n | 'marginTop'\n | 'marginBottom';\n\ntype MarginStyles = Partial<Pick<React.CSSProperties, MarginCSSProperty>>;\n\nexport interface Margin {\n m?: number | string;\n mx?: number | string;\n my?: number | string;\n mt?: number | string;\n mr?: number | string;\n mb?: number | string;\n ml?: number | string;\n}\n\nexport const withSpace = (\n value: number | string | undefined,\n properties: MarginCSSProperty[],\n) => {\n const styles: MarginStyles = {};\n\n if (value === undefined) {\n return styles;\n }\n\n if (Number.isNaN(Number.parseFloat(String(value)))) {\n return styles;\n }\n\n for (const property of properties) {\n styles[property] = `${value}px` as React.CSSProperties[MarginCSSProperty];\n }\n\n return styles;\n};\n\nexport const withMargin = (props: Margin): MarginStyles => {\n const candidates = [\n withSpace(props.m, ['margin']),\n withSpace(props.mx, ['marginLeft', 'marginRight']),\n withSpace(props.my, ['marginTop', 'marginBottom']),\n withSpace(props.mt, ['marginTop']),\n withSpace(props.mr, ['marginRight']),\n withSpace(props.mb, ['marginBottom']),\n withSpace(props.ml, ['marginLeft']),\n ];\n\n const mergedStyles: MarginStyles = {};\n\n for (const style of candidates) {\n if (Object.keys(style).length > 0) {\n Object.assign(mergedStyles, style);\n }\n }\n\n return mergedStyles;\n};\n","import * as React from 'react';\nimport type { As } from '../utils/as';\nimport type { Margin } from '../utils/spaces';\nimport { withMargin } from '../utils/spaces';\n\nexport type HeadingAs = As<'h1', 'h2', 'h3', 'h4', 'h5', 'h6'>;\nexport type HeadingProps = HeadingAs & Margin;\n\nexport const Heading = React.forwardRef<\n HTMLHeadingElement,\n Readonly<HeadingProps>\n>(\n (\n { as: Tag = 'h1', children, style, m, mx, my, mt, mr, mb, ml, ...props },\n ref,\n ) => {\n return (\n <Tag\n {...props}\n ref={ref}\n style={{ ...withMargin({ m, mx, my, mt, mr, mb, ml }), ...style }}\n >\n {children}\n </Tag>\n );\n },\n);\n\nHeading.displayName = 'Heading';\n","import * as React from 'react';\n\nexport type HrProps = Readonly<React.ComponentPropsWithoutRef<'hr'>>;\n\nexport const Hr = React.forwardRef<HTMLHRElement, HrProps>(\n ({ style, ...props }, ref) => (\n <hr\n {...props}\n ref={ref}\n style={{\n width: '100%',\n border: 'none',\n borderTop: '1px solid #eaeaea',\n ...style,\n }}\n />\n ),\n);\n\nHr.displayName = 'Hr';\n","import * as React from 'react';\n\nexport type HtmlProps = Readonly<React.ComponentPropsWithoutRef<'html'>>;\n\nexport const Html = React.forwardRef<HTMLHtmlElement, HtmlProps>(\n ({ children, lang = 'en', dir = 'ltr', ...props }, ref) => (\n <html {...props} dir={dir} lang={lang} ref={ref}>\n {children}\n </html>\n ),\n);\n\nHtml.displayName = 'Html';\n","import * as React from 'react';\n\nexport type ImgProps = Readonly<React.ComponentPropsWithoutRef<'img'>>;\n\nexport const Img = React.forwardRef<HTMLImageElement, ImgProps>(\n ({ alt, src, width, height, style, ...props }, ref) => (\n <img\n {...props}\n alt={alt}\n height={height}\n ref={ref}\n src={src}\n style={{\n display: 'block',\n outline: 'none',\n border: 'none',\n textDecoration: 'none',\n ...style,\n }}\n width={width}\n />\n ),\n);\n\nImg.displayName = 'Img';\n","import * as React from 'react';\n\nexport type LinkProps = Readonly<React.ComponentPropsWithoutRef<'a'>>;\n\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n ({ target = '_blank', style, ...props }, ref) => (\n <a\n {...props}\n ref={ref}\n style={{\n color: '#067df7',\n textDecorationLine: 'none',\n ...style,\n }}\n target={target}\n >\n {props.children}\n </a>\n ),\n);\n\nLink.displayName = 'Link';\n","const emptyStyle = {};\n\nconst baseHeaderStyles = {\n fontWeight: '500',\n paddingTop: 20,\n};\n\nexport type MarkdownStylesType = {\n h1?: React.CSSProperties;\n h2?: React.CSSProperties;\n h3?: React.CSSProperties;\n h4?: React.CSSProperties;\n h5?: React.CSSProperties;\n h6?: React.CSSProperties;\n blockQuote?: React.CSSProperties;\n bold?: React.CSSProperties;\n italic?: React.CSSProperties;\n link?: React.CSSProperties;\n codeBlock?: React.CSSProperties;\n codeInline?: React.CSSProperties;\n p?: React.CSSProperties;\n li?: React.CSSProperties;\n ul?: React.CSSProperties;\n ol?: React.CSSProperties;\n image?: React.CSSProperties;\n br?: React.CSSProperties;\n hr?: React.CSSProperties;\n table?: React.CSSProperties;\n thead?: React.CSSProperties;\n tbody?: React.CSSProperties;\n tr?: React.CSSProperties;\n th?: React.CSSProperties;\n td?: React.CSSProperties;\n strikethrough?: React.CSSProperties;\n};\n\nconst codeInline = {\n color: '#212529',\n fontSize: '87.5%',\n display: 'inline' as const,\n background: ' #f8f8f8',\n fontFamily: 'SFMono-Regular,Menlo,Monaco,Consolas,monospace',\n};\n\nconst codeBlock = {\n ...codeInline,\n display: 'block' as const,\n paddingTop: 10,\n paddingRight: 10,\n paddingLeft: 10,\n paddingBottom: 1,\n marginBottom: 20,\n background: ' #f8f8f8',\n};\n\nexport const defaultMarkdownStyles: MarkdownStylesType = {\n h1: { ...baseHeaderStyles, fontSize: '2.5rem' },\n h2: { ...baseHeaderStyles, fontSize: '2rem' },\n h3: { ...baseHeaderStyles, fontSize: '1.75rem' },\n h4: { ...baseHeaderStyles, fontSize: '1.5rem' },\n h5: { ...baseHeaderStyles, fontSize: '1.25rem' },\n h6: { ...baseHeaderStyles, fontSize: '1rem' },\n blockQuote: {\n background: '#f9f9f9',\n borderLeft: '10px solid #ccc',\n margin: '1.5em 10px',\n padding: '1em 10px',\n },\n bold: { fontWeight: 'bold' },\n italic: { fontStyle: 'italic' },\n link: {\n color: '#007bff',\n textDecoration: 'underline',\n backgroundColor: 'transparent',\n },\n codeBlock: { ...codeBlock, wordWrap: 'break-word' },\n codeInline: { ...codeInline, wordWrap: 'break-word' },\n p: emptyStyle,\n li: emptyStyle,\n ul: emptyStyle,\n ol: emptyStyle,\n image: emptyStyle,\n br: emptyStyle,\n hr: emptyStyle,\n table: emptyStyle,\n thead: emptyStyle,\n tbody: emptyStyle,\n th: emptyStyle,\n td: emptyStyle,\n tr: emptyStyle,\n strikethrough: emptyStyle,\n};\n","function camelToKebabCase(str: string): string {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction escapeQuotes(value: unknown) {\n if (typeof value === 'string' && value.includes('\"')) {\n return value.replace(/\"/g, ''');\n }\n return value;\n}\n\nconst numericalCssProperties = [\n 'width',\n 'height',\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'padding',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'borderWidth',\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'outlineWidth',\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'fontSize',\n 'letterSpacing',\n 'wordSpacing',\n 'maxWidth',\n 'minWidth',\n 'maxHeight',\n 'minHeight',\n 'borderRadius',\n 'borderTopLeftRadius',\n 'borderTopRightRadius',\n 'borderBottomLeftRadius',\n 'borderBottomRightRadius',\n 'textIndent',\n 'gridColumnGap',\n 'gridRowGap',\n 'gridGap',\n 'translateX',\n 'translateY',\n];\n\nexport function parseCssInJsToInlineCss(\n cssProperties: React.CSSProperties | undefined,\n): string {\n if (!cssProperties) return '';\n\n return Object.entries(cssProperties)\n .map(([property, value]) => {\n if (\n typeof value === 'number' &&\n numericalCssProperties.includes(property)\n ) {\n return `${camelToKebabCase(property)}:${value}px`;\n }\n\n const escapedValue = escapeQuotes(value);\n return `${camelToKebabCase(property)}:${escapedValue}`;\n })\n .join(';');\n}\n","import { marked, Renderer } from 'marked';\nimport * as React from 'react';\nimport {\n type MarkdownStylesType,\n defaultMarkdownStyles,\n} from '../utils/markdown-styles';\nimport { parseCssInJsToInlineCss } from '../utils/parse-css-in-js-to-inline-css';\n\nexport type MarkdownProps = Readonly<{\n children: string;\n markdownCustomStyles?: MarkdownStylesType;\n markdownContainerStyles?: React.CSSProperties;\n}>;\n\nexport const Markdown = React.forwardRef<HTMLDivElement, MarkdownProps>(\n (\n { children, markdownContainerStyles, markdownCustomStyles, ...props },\n ref,\n ) => {\n const finalStyles = { ...defaultMarkdownStyles, ...markdownCustomStyles };\n\n const renderer = new Renderer();\n\n renderer.blockquote = ({ tokens }) => {\n const text = renderer.parser.parse(tokens);\n return `<blockquote${\n parseCssInJsToInlineCss(finalStyles.blockQuote) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.blockQuote)}\"`\n : ''\n }>\\n${text}</blockquote>\\n`;\n };\n\n renderer.br = () => {\n return `<br${\n parseCssInJsToInlineCss(finalStyles.br) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.br)}\"`\n : ''\n } />`;\n };\n\n renderer.code = ({ text }) => {\n const escaped = `${text.replace(/\\n$/, '')}\\n`;\n return `<pre${\n parseCssInJsToInlineCss(finalStyles.codeBlock) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.codeBlock)}\"`\n : ''\n }><code>${escaped}</code></pre>\\n`;\n };\n\n renderer.codespan = ({ text }) => {\n return `<code${\n parseCssInJsToInlineCss(finalStyles.codeInline) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.codeInline)}\"`\n : ''\n }>${text}</code>`;\n };\n\n renderer.del = ({ tokens }) => {\n const text = renderer.parser.parseInline(tokens);\n return `<del${\n parseCssInJsToInlineCss(finalStyles.strikethrough) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.strikethrough)}\"`\n : ''\n }>${text}</del>`;\n };\n\n renderer.em = ({ tokens }) => {\n const text = renderer.parser.parseInline(tokens);\n return `<em${\n parseCssInJsToInlineCss(finalStyles.italic) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.italic)}\"`\n : ''\n }>${text}</em>`;\n };\n\n renderer.heading = ({ tokens, depth }) => {\n const text = renderer.parser.parseInline(tokens);\n return `<h${depth}${\n parseCssInJsToInlineCss(\n finalStyles[`h${depth}` as keyof MarkdownStylesType],\n ) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(\n finalStyles[`h${depth}` as keyof MarkdownStylesType],\n )}\"`\n : ''\n }>${text}</h${depth}>`;\n };\n\n renderer.hr = () => {\n return `<hr${\n parseCssInJsToInlineCss(finalStyles.hr) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.hr)}\"`\n : ''\n } />\\n`;\n };\n\n renderer.image = ({ href, text, title }) => {\n return `<img src=\"${href.replaceAll('\"', '"')}\" alt=\"${text.replaceAll('\"', '"')}\"${\n title ? ` title=\"${title}\"` : ''\n }${\n parseCssInJsToInlineCss(finalStyles.image) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.image)}\"`\n : ''\n }>`;\n };\n\n renderer.link = ({ href, title, tokens }) => {\n const text = renderer.parser.parseInline(tokens);\n return `<a href=\"${href}\" target=\"_blank\"${\n title ? ` title=\"${title}\"` : ''\n }${\n parseCssInJsToInlineCss(finalStyles.link) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.link)}\"`\n : ''\n }>${text}</a>`;\n };\n\n renderer.listitem = ({ tokens }) => {\n const hasNestedList = tokens.some((token) => token.type === 'list');\n const text = hasNestedList\n ? renderer.parser.parse(tokens)\n : renderer.parser.parseInline(tokens);\n return `<li${\n parseCssInJsToInlineCss(finalStyles.li) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.li)}\"`\n : ''\n }>${text}</li>\\n`;\n };\n\n renderer.list = ({ items, ordered, start }) => {\n const type = ordered ? 'ol' : 'ul';\n const startAt = ordered && start !== 1 ? ` start=\"${start}\"` : '';\n const styles = parseCssInJsToInlineCss(\n finalStyles[ordered ? 'ol' : 'ul'],\n );\n return (\n `<${type}${startAt}${styles !== '' ? ` style=\"${styles}\"` : ''}>\\n` +\n items.map((item) => renderer.listitem(item)).join('') +\n `</${type}>\\n`\n );\n };\n\n renderer.paragraph = ({ tokens }) => {\n const text = renderer.parser.parseInline(tokens);\n return `<p${\n parseCssInJsToInlineCss(finalStyles.p) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.p)}\"`\n : ''\n }>${text}</p>\\n`;\n };\n\n renderer.strong = ({ tokens }) => {\n const text = renderer.parser.parseInline(tokens);\n return `<strong${\n parseCssInJsToInlineCss(finalStyles.bold) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.bold)}\"`\n : ''\n }>${text}</strong>`;\n };\n\n renderer.table = ({ header, rows }) => {\n const styleTable = parseCssInJsToInlineCss(finalStyles.table);\n const styleThead = parseCssInJsToInlineCss(finalStyles.thead);\n const styleTbody = parseCssInJsToInlineCss(finalStyles.tbody);\n\n const theadRow = renderer.tablerow({\n text: header.map((cell) => renderer.tablecell(cell)).join(''),\n });\n\n const tbodyRows = rows\n .map((row) =>\n renderer.tablerow({\n text: row.map((cell) => renderer.tablecell(cell)).join(''),\n }),\n )\n .join('');\n\n const thead = `<thead${styleThead ? ` style=\"${styleThead}\"` : ''}>\\n${theadRow}</thead>`;\n const tbody = `<tbody${styleTbody ? ` style=\"${styleTbody}\"` : ''}>${tbodyRows}</tbody>`;\n return `<table${styleTable ? ` style=\"${styleTable}\"` : ''}>\\n${thead}\\n${tbody}</table>\\n`;\n };\n\n renderer.tablecell = ({ tokens, align, header }) => {\n const text = renderer.parser.parseInline(tokens);\n const type = header ? 'th' : 'td';\n const tag = align\n ? `<${type} align=\"${align}\"${\n parseCssInJsToInlineCss(finalStyles.td) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.td)}\"`\n : ''\n }>`\n : `<${type}${\n parseCssInJsToInlineCss(finalStyles.td) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.td)}\"`\n : ''\n }>`;\n return `${tag}${text}</${type}>\\n`;\n };\n\n renderer.tablerow = ({ text }) => {\n return `<tr${\n parseCssInJsToInlineCss(finalStyles.tr) !== ''\n ? ` style=\"${parseCssInJsToInlineCss(finalStyles.tr)}\"`\n : ''\n }>\\n${text}</tr>\\n`;\n };\n\n return (\n <div\n {...props}\n dangerouslySetInnerHTML={{\n __html: marked.parse(children, {\n renderer,\n async: false,\n }),\n }}\n ref={ref}\n style={markdownContainerStyles}\n />\n );\n },\n);\n\nMarkdown.displayName = 'Markdown';\n","import * as React from 'react';\n\nexport type PreviewProps = Readonly<\n React.ComponentPropsWithoutRef<'div'> & {\n children: string | string[];\n }\n>;\n\nconst PREVIEW_MAX_LENGTH = 150;\n\nconst whiteSpaceCodes = '\\xa0\\u200C\\u200B\\u200D\\u200E\\u200F\\uFEFF';\n\nconst renderWhiteSpace = (text: string) => {\n if (text.length >= PREVIEW_MAX_LENGTH) {\n return null;\n }\n return <div>{whiteSpaceCodes.repeat(PREVIEW_MAX_LENGTH - text.length)}</div>;\n};\n\nexport const Preview = React.forwardRef<HTMLDivElement, PreviewProps>(\n ({ children = '', ...props }, ref) => {\n const text = (\n Array.isArray(children) ? children.join('') : children\n ).substring(0, PREVIEW_MAX_LENGTH);\n\n return (\n <div\n style={{\n display: 'none',\n overflow: 'hidden',\n lineHeight: '1px',\n opacity: 0,\n maxHeight: 0,\n maxWidth: 0,\n }}\n {...props}\n ref={ref}\n >\n {text}\n {renderWhiteSpace(text)}\n </div>\n );\n },\n);\n\nPreview.displayName = 'Preview';\n","import * as React from 'react';\n\nexport type RowProps = Readonly<\n React.ComponentPropsWithoutRef<'table'> & {\n children: React.ReactNode;\n }\n>;\n\nexport const Row = React.forwardRef<HTMLTableElement, RowProps>(\n ({ children, style, ...props }, ref) => {\n return (\n <table\n align=\"center\"\n width=\"100%\"\n border={0}\n cellPadding=\"0\"\n cellSpacing=\"0\"\n role=\"presentation\"\n {...props}\n ref={ref}\n style={style}\n >\n <tbody style={{ width: '100%' }}>\n <tr style={{ width: '100%' }}>{children}</tr>\n </tbody>\n </table>\n );\n },\n);\n\nRow.displayName = 'Row';\n","import * as React from 'react';\n\nexport type SectionProps = Readonly<React.ComponentPropsWithoutRef<'table'>>;\n\nexport const Section = React.forwardRef<HTMLTableElement, SectionProps>(\n ({ children, style, ...props }, ref) => {\n return (\n <table\n align=\"center\"\n width=\"100%\"\n border={0}\n cellPadding=\"0\"\n cellSpacing=\"0\"\n role=\"presentation\"\n {...props}\n ref={ref}\n style={style}\n >\n <tbody>\n <tr>\n <td>{children}</td>\n </tr>\n </tbody>\n </table>\n );\n },\n);\n\nSection.displayName = 'Section';\n","type MarginType = string | number | undefined;\n\ninterface MarginProperties {\n margin?: MarginType;\n marginTop?: MarginType;\n marginRight?: MarginType;\n marginBottom?: MarginType;\n marginLeft?: MarginType;\n}\n\ninterface MarginResult {\n marginTop: MarginType;\n marginRight: MarginType;\n marginBottom: MarginType;\n marginLeft: MarginType;\n}\n\nfunction parseMarginValue(value: MarginType): MarginResult {\n if (typeof value === 'number')\n return {\n marginTop: value,\n marginBottom: value,\n marginLeft: value,\n marginRight: value,\n };\n\n if (typeof value === 'string') {\n const values = value.toString().trim().split(/\\s+/);\n\n if (values.length === 1) {\n return {\n marginTop: values[0],\n marginBottom: values[0],\n marginLeft: values[0],\n marginRight: values[0],\n };\n }\n\n if (values.length === 2) {\n return {\n marginTop: values[0],\n marginRight: values[1],\n marginBottom: values[0],\n marginLeft: values[1],\n };\n }\n\n if (values.length === 3) {\n return {\n marginTop: values[0],\n marginRight: values[1],\n marginBottom: values[2],\n marginLeft: values[1],\n };\n }\n\n if (values.length === 4) {\n return {\n marginTop: values[0],\n marginRight: values[1],\n marginBottom: values[2],\n marginLeft: values[3],\n };\n }\n }\n\n return {\n marginTop: undefined,\n marginBottom: undefined,\n marginLeft: undefined,\n marginRight: undefined,\n };\n}\n\nexport function computeMargins(properties: MarginProperties): MarginResult {\n let result: MarginResult = {\n marginTop: undefined,\n marginRight: undefined,\n marginBottom: undefined,\n marginLeft: undefined,\n };\n\n for (const [key, value] of Object.entries(properties)) {\n if (key === 'margin') {\n result = parseMarginValue(value);\n } else if (key === 'marginTop') {\n result.marginTop = value;\n } else if (key === 'marginRight') {\n result.marginRight = value;\n } else if (key === 'marginBottom') {\n result.marginBottom = value;\n } else if (key === 'marginLeft') {\n result.marginLeft = value;\n }\n }\n\n return result;\n}\n","import * as React from 'react';\nimport { computeMargins } from '../utils/compute-margins';\n\nexport type TextProps = Readonly<React.ComponentPropsWithoutRef<'p'>>;\n\nexport const Text = React.forwardRef<HTMLParagraphElement, TextProps>(\n ({ style, ...props }, ref) => {\n const defaultMargins: React.CSSProperties = {};\n if (style?.marginTop === undefined) {\n defaultMargins.marginTop = '16px';\n }\n if (style?.marginBottom === undefined) {\n defaultMargins.marginBottom = '16px';\n }\n const margins = computeMargins({\n ...defaultMargins,\n ...style,\n });\n\n return (\n <p\n {...props}\n ref={ref}\n style={{\n fontSize: '14px',\n lineHeight: '24px',\n ...style,\n ...margins,\n }}\n />\n );\n },\n);\n\nText.displayName = 'Text';\n","import React from 'react';\n\nexport function createErrorBoundary(reject: (error: unknown) => void) {\n if (!React.Component) {\n return (props: { children?: React.ReactNode }) => <>{props.children}</>;\n }\n\n return class ErrorBoundary extends React.Component<{\n children: React.ReactNode;\n }> {\n componentDidCatch(error: unknown) {\n reject(error);\n }\n render() {\n return this.props.children;\n }\n };\n}\n","import type { SelectorDefinition } from 'html-to-text';\n\nexport const plainTextSelectors: SelectorDefinition[] = [\n { selector: 'img', format: 'skip' },\n {\n selector: '[data-skip-in-text]',\n format: 'skip',\n },\n {\n selector: 'a',\n options: { linkBrackets: false },\n },\n];\n","import { Writable } from 'node:stream';\nimport type {\n PipeableStream,\n ReactDOMServerReadableStream,\n} from 'react-dom/server.browser';\n\nexport async function readStream(\n stream: PipeableStream | ReactDOMServerReadableStream,\n): Promise<string> {\n let result = '';\n const decoder = new TextDecoder('utf-8');\n\n if ('pipeTo' in stream) {\n const writableStream = new WritableStream({\n write(chunk: BufferSource) {\n result += decoder.decode(chunk, { stream: true });\n },\n close() {\n result += decoder.decode();\n },\n });\n await stream.pipeTo(writableStream);\n } else {\n const writable = new Writable({\n write(chunk: BufferSource, _encoding, callback) {\n result += decoder.decode(chunk, { stream: true });\n callback();\n },\n final(callback) {\n result += decoder.decode();\n callback();\n },\n });\n await new Promise<void>((resolve, reject) => {\n writable.on('pipe', (source) => {\n source.on('error', (err: Error) => {\n writable.destroy(err);\n });\n });\n writable.on('error', reject);\n writable.on('close', () => {\n resolve();\n });\n stream.pipe(writable);\n });\n }\n\n return result;\n}\n","import { convert } from 'html-to-text';\nimport { Suspense } from 'react';\nimport { createErrorBoundary } from './error-boundary';\nimport type { RenderOptions } from './options';\nimport { plainTextSelectors } from './plain-text-selectors';\nimport { readStream } from './read-stream';\n\nconst doctype =\n '<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">';\n\nexport async function render(\n element: React.ReactElement,\n options?: RenderOptions,\n): Promise<string> {\n const reactDOMServer = await import('react-dom/server').then((m) => {\n if ('default' in m) {\n return m.default;\n }\n return m;\n });\n\n let markup!: string;\n await new Promise<void>((resolve, reject) => {\n if (\n Object.hasOwn(reactDOMServer, 'renderToReadableStream') &&\n typeof WritableStream !== 'undefined'\n ) {\n const ErrorBoundary = createErrorBoundary(reject);\n reactDOMServer\n .renderToReadableStream(\n <ErrorBoundary>\n <Suspense>{element}</Suspense>\n </ErrorBoundary>,\n {\n progressiveChunkSize: Number.POSITIVE_INFINITY,\n onError(error: unknown) {\n throw error;\n },\n },\n )\n .then((stream) => readStream(stream))\n .then((result) => {\n markup = result;\n resolve();\n })\n .catch(reject);\n } else {\n const ErrorBoundary = createErrorBoundary(reject);\n const stream = reactDOMServer.renderToPipeableStream(\n <ErrorBoundary>\n <Suspense>{element}</Suspense>\n </ErrorBoundary>,\n {\n async onAllReady() {\n markup = await readStream(stream);\n resolve();\n },\n onError(error: unknown) {\n reject(error);\n },\n progressiveChunkSize: Number.POSITIVE_INFINITY,\n },\n );\n }\n });\n\n if (options?.plainText) {\n return convert(markup, {\n selectors: plainTextSelectors,\n ...(options.plainText === true\n ? (options as { htmlToTextOptions?: Record<string, unknown> })\n .htmlToTextOptions\n : {}),\n });\n }\n\n const html = `${doctype}${markup.replace(/<!DOCTYPE.*?>/, '')}`;\n\n return html;\n}\n","import { find, type Rule } from 'css-tree';\n\nexport function isRuleInlinable(rule: Rule): boolean {\n const hasAtRuleInside = find(rule, (node) => node.type === 'Atrule') !== null;\n\n const hasPseudoSelector =\n find(\n rule,\n (node) =>\n node.type === 'PseudoClassSelector' ||\n node.type === 'PseudoElementSelector',\n ) !== null;\n\n return !hasAtRuleInside && !hasPseudoSelector;\n}\n","import { type CssNode, find } from 'css-tree';\n\nexport function isPartInlinable(part: CssNode): boolean {\n const hasAtRuleInside = find(part, (node) => node.type === 'Atrule') !== null;\n\n const hasPseudoSelector =\n find(\n part,\n (node) =>\n node.type === 'PseudoClassSelector' ||\n node.type === 'PseudoElementSelector',\n ) !== null;\n\n return !hasAtRuleInside && !hasPseudoSelector;\n}\n","import { type CssNode, clone, List, type Rule } from 'css-tree';\nimport { isPartInlinable } from './is-part-inlinable';\n\nexport function splitMixedRule(rule: Rule): {\n inlinablePart: Rule | null;\n nonInlinablePart: Rule | null;\n} {\n const ruleCloneInlinable = clone(rule) as Rule;\n const ruleCloneNonInlinable = clone(rule) as Rule;\n\n const inlinableParts: CssNode[] = [];\n const nonInlinableParts: CssNode[] = [];\n\n for (const part of ruleCloneInlinable.block.children.toArray()) {\n if (isPartInlinable(part)) {\n inlinableParts.push(part);\n } else {\n nonInlinableParts.push(part);\n }\n }\n\n const inlinablePart =\n inlinableParts.length > 0\n ? {\n ...ruleCloneInlinable,\n block: {\n type: 'Block' as const,\n children: new List<CssNode>().fromArray(inlinableParts),\n },\n }\n : null;\n\n const nonInlinablePart =\n nonInlinableParts.length > 0\n ? {\n ...ruleCloneNonInlinable,\n block: {\n type: 'Block' as const,\n children: new List<CssNode>().fromArray(nonInlinableParts),\n },\n }\n : null;\n\n return { inlinablePart, nonInlinablePart };\n}\n","import { type CssNode, type Rule, string, walk } from 'css-tree';\nimport { isRuleInlinable } from './is-rule-inlinable';\nimport { splitMixedRule } from './split-mixed-rule';\n\nexport function extractRulesPerClass(root: CssNode, classes: string[]) {\n const classSet = new Set(classes);\n\n const inlinableRules = new Map<string, Rule>();\n const nonInlinableRules = new Map<string, Rule>();\n walk(root, {\n visit: 'Rule',\n enter(rule) {\n const selectorClasses: string[] = [];\n walk(rule, {\n visit: 'ClassSelector',\n enter(classSelector) {\n selectorClasses.push(string.decode(classSelector.name));\n },\n });\n if (isRuleInlinable(rule)) {\n for (const className of selectorClasses) {\n if (classSet.has(className)) {\n inlinableRules.set(className, rule);\n }\n }\n } else {\n const { inlinablePart, nonInlinablePart } = splitMixedRule(rule);\n for (const className of selectorClasses) {\n if (!classSet.has(className)) continue;\n if (inlinablePart) {\n inlinableRules.set(className, inlinablePart);\n }\n if (nonInlinablePart) {\n nonInlinableRules.set(className, nonInlinablePart);\n }\n }\n }\n },\n });\n return {\n inlinable: inlinableRules,\n nonInlinable: nonInlinableRules,\n };\n}\n","import { type CssNode, type Declaration, generate, walk } from 'css-tree';\n\nexport interface CustomProperty {\n syntax?: Declaration;\n inherits?: Declaration;\n initialValue?: Declaration;\n}\n\nexport type CustomProperties = Map<string, CustomProperty>;\n\nexport function getCustomProperties(node: CssNode) {\n const customProperties = new Map<string, CustomProperty>();\n\n walk(node, {\n visit: 'Atrule',\n enter(atrule) {\n if (atrule.name === 'property' && atrule.prelude) {\n const prelude = generate(atrule.prelude);\n if (prelude.startsWith('--')) {\n let syntax: Declaration | undefined;\n let inherits: Declaration | undefined;\n let initialValue: Declaration | undefined;\n walk(atrule, {\n visit: 'Declaration',\n enter(declaration) {\n if (declaration.property === 'syntax') {\n syntax = declaration;\n }\n if (declaration.property === 'inherits') {\n inherits = declaration;\n }\n if (declaration.property === 'initial-value') {\n initialValue = declaration;\n }\n },\n });\n\n customProperties.set(prelude, {\n syntax,\n inherits,\n initialValue,\n });\n }\n }\n },\n });\n\n return customProperties;\n}\n","export const fromDashCaseToCamelCase = (text: string) => {\n return text.replace(/-(\\w|$)/g, (_, p1: string) => p1.toUpperCase());\n};\n","import { fromDashCaseToCamelCase } from './from-dash-case-to-camel-case';\n\nexport function getReactProperty(prop: string) {\n const modifiedProp = prop.toLowerCase();\n\n if (modifiedProp.startsWith('--')) {\n return modifiedProp;\n }\n\n if (modifiedProp.startsWith('-ms-')) {\n return fromDashCaseToCamelCase(modifiedProp.slice(1));\n }\n\n return fromDashCaseToCamelCase(modifiedProp);\n}\n","import type { Raw, Value } from 'css-tree';\n\nexport function unwrapValue(value: Value | Raw) {\n if (value.type === 'Value' && value.children.size === 1) {\n return value.children.first ?? value;\n }\n return value;\n}\n","import { type CssNode, type Declaration, generate, walk } from 'css-tree';\nimport { getReactProperty } from './get-react-property';\nimport type { CustomProperties } from './get-custom-properties';\nimport { unwrapValue } from './unwrap-value';\n\nexport function makeInlineStylesFor(\n inlinableRules: CssNode[],\n customProperties: CustomProperties,\n) {\n const styles: Record<string, string> = {};\n\n const localVariableDeclarations = new Map<string, Declaration>();\n for (const rule of inlinableRules) {\n walk(rule, {\n visit: 'Declaration',\n enter(declaration) {\n if (declaration.property.startsWith('--')) {\n localVariableDeclarations.set(declaration.property, declaration);\n }\n },\n });\n }\n\n for (const rule of inlinableRules) {\n walk(rule, {\n visit: 'Function',\n enter(func, funcParentListItem) {\n if (func.name === 'var') {\n let variableName: string | undefined;\n walk(func, {\n visit: 'Identifier',\n enter(identifier) {\n variableName = identifier.name;\n return this.break;\n },\n });\n if (variableName) {\n const definition = localVariableDeclarations.get(variableName);\n if (definition) {\n funcParentListItem.data = unwrapValue(definition.value);\n } else {\n const customProperty = customProperties.get(variableName);\n if (customProperty?.initialValue) {\n funcParentListItem.data = unwrapValue(\n customProperty.initialValue.value,\n );\n }\n }\n }\n }\n },\n });\n\n walk(rule, {\n visit: 'Declaration',\n enter(declaration) {\n if (declaration.property.startsWith('--')) {\n return;\n }\n styles[getReactProperty(declaration.property)] =\n generate(declaration.value) +\n (declaration.important ? '!important' : '');\n },\n });\n }\n\n return styles;\n}\n","import {\n type CssNode,\n type Declaration,\n generate,\n type List,\n type ListItem,\n parse,\n type Raw,\n type SelectorList,\n type Value,\n walk,\n} from 'css-tree';\n\ninterface VariableUse {\n declaration: Declaration;\n path: CssNode[];\n fallback?: string;\n variableName: string;\n raw: string;\n}\n\nexport interface VariableDefinition {\n declaration: Declaration;\n path: CssNode[];\n variableName: string;\n definition: string;\n}\n\nfunction doSelectorsIntersect(\n first: SelectorList | Raw,\n second: SelectorList | Raw,\n): boolean {\n const firstStringified = generate(first);\n const secondStringified = generate(second);\n if (firstStringified === secondStringified) {\n return true;\n }\n\n let hasSomeUniversal = false;\n const walker = (\n node: CssNode,\n _parentListItem: ListItem<CssNode>,\n parentList: List<CssNode>,\n ) => {\n if (hasSomeUniversal) return;\n if (node.type === 'PseudoClassSelector' && node.name === 'root') {\n hasSomeUniversal = true;\n }\n if (\n node.type === 'TypeSelector' &&\n node.name === '*' &&\n parentList.size === 1\n ) {\n hasSomeUniversal = true;\n }\n };\n walk(first, walker);\n walk(second, walker);\n\n if (hasSomeUniversal) {\n return true;\n }\n\n return false;\n}\n\nexport function resolveAllCssVariables(node: CssNode) {\n const variableDefinitions = new Set<VariableDefinition>();\n const variableUses = new Set<VariableUse>();\n\n const path: CssNode[] = [];\n\n walk(node, {\n leave() {\n path.shift();\n },\n enter(node: CssNode) {\n if (node.type === 'Declaration') {\n const declaration = node;\n // Ignores @layer (properties) { ... } to avoid variable resolution conflicts\n if (\n path.some(\n (ancestor) =>\n ancestor.type === 'Atrule' &&\n ancestor.name === 'layer' &&\n ancestor.prelude !== null &&\n generate(ancestor.prelude).includes('properties'),\n )\n ) {\n path.unshift(node);\n return;\n }\n\n if (/--[\\S]+/.test(declaration.property)) {\n variableDefinitions.add({\n declaration,\n path: [...path],\n variableName: declaration.property,\n definition: generate(declaration.value),\n });\n } else {\n function parseVariableUsesFrom(node: CssNode) {\n walk(node, {\n visit: 'Function',\n enter(funcNode) {\n if (funcNode.name === 'var') {\n const children = funcNode.children.toArray();\n const name = generate(children[0]);\n const fallback =\n // The second argument should be an \",\" Operator Node,\n // such that the actual fallback is only in the third argument\n children[2] ? generate(children[2]) : undefined;\n\n variableUses.add({\n declaration,\n path: [...path],\n fallback,\n variableName: name,\n raw: generate(funcNode),\n });\n\n if (fallback?.includes('var(')) {\n const parsedFallback = parse(fallback, {\n context: 'value',\n });\n\n parseVariableUsesFrom(parsedFallback);\n }\n }\n },\n });\n }\n\n parseVariableUsesFrom(declaration.value);\n }\n }\n path.unshift(node);\n },\n });\n\n for (const use of variableUses) {\n let hasReplaced = false;\n\n for (const definition of variableDefinitions) {\n if (use.variableName !== definition.variableName) {\n continue;\n }\n\n if (\n use.path[0]?.type === 'Block' &&\n use.path[1]?.type === 'Atrule' &&\n use.path[2]?.type === 'Block' &&\n use.path[3]?.type === 'Rule' &&\n definition.path[0].type === 'Block' &&\n definition.path[1].type === 'Rule' &&\n doSelectorsIntersect(use.path[3].prelude, definition.path[1].prelude)\n ) {\n use.declaration.value = parse(\n generate(use.declaration.value).replaceAll(\n use.raw,\n definition.definition,\n ),\n {\n context: 'value',\n },\n ) as Raw | Value;\n hasReplaced = true;\n break;\n }\n\n if (\n use.path[0]?.type === 'Block' &&\n use.path[1]?.type === 'Rule' &&\n definition.path[0]?.type === 'Block' &&\n definition.path[1]?.type === 'Rule' &&\n doSelectorsIntersect(use.path[1].prelude, definition.path[1].prelude)\n ) {\n use.declaration.value = parse(\n generate(use.declaration.value).replaceAll(\n use.raw,\n definition.definition,\n ),\n {\n context: 'value',\n },\n ) as Raw | Value;\n hasReplaced = true;\n break;\n }\n }\n\n if (!hasReplaced && use.fallback) {\n use.declaration.value = parse(\n generate(use.declaration.value).replaceAll(use.raw, use.fallback),\n { context: 'value' },\n ) as Raw | Value;\n }\n }\n}\n","import { type CssNode, walk } from 'css-tree';\n\n/**\n * Intentionally only resolves `*` and `/` operations without dealing with parenthesis,\n * because this is the only thing required to run Tailwind v4.\n */\nexport function resolveCalcExpressions(node: CssNode) {\n walk(node, {\n visit: 'Function',\n enter(func, funcListItem) {\n if (func.name === 'calc') {\n func.children.forEach((child, item) => {\n const left = item.prev;\n const right = item.next;\n if (\n left &&\n right &&\n child.type === 'Operator' &&\n (left.data.type === 'Dimension' ||\n left.data.type === 'Number' ||\n left.data.type === 'Percentage') &&\n (right.data.type === 'Dimension' ||\n right.data.type === 'Number' ||\n right.data.type === 'Percentage')\n ) {\n if (child.value === '*' || child.value === '/') {\n const value = (() => {\n if (child.value === '*') {\n return String(\n Number.parseFloat(left.data.value) *\n Number.parseFloat(right.data.value),\n );\n }\n if (right.data.value === '0') {\n return '0';\n }\n return String(\n Number.parseFloat(left.data.value) /\n Number.parseFloat(right.data.value),\n );\n })();\n if (\n left.data.type === 'Dimension' &&\n right.data.type === 'Number'\n ) {\n item.data = {\n type: 'Dimension',\n unit: left.data.unit,\n value,\n };\n func.children.remove(left);\n func.children.remove(right);\n } else if (\n left.data.type === 'Number' &&\n right.data.type === 'Dimension'\n ) {\n item.data = {\n type: 'Dimension',\n unit: right.data.unit,\n value,\n };\n func.children.remove(left);\n func.children.remove(right);\n } else if (\n left.data.type === 'Number' &&\n right.data.type === 'Number'\n ) {\n item.data = {\n type: 'Number',\n value,\n };\n func.children.remove(left);\n func.children.remove(right);\n } else if (\n left.data.type === 'Dimension' &&\n right.data.type === 'Dimension' &&\n left.data.unit === right.data.unit\n ) {\n if (child.value === '/') {\n item.data = {\n type: 'Number',\n value,\n };\n } else {\n item.data = {\n type: 'Dimension',\n unit: left.data.unit,\n value,\n };\n }\n func.children.remove(left);\n func.children.remove(right);\n } else if (\n left.data.type === 'Percentage' &&\n right.data.type === 'Number'\n ) {\n item.data = {\n type: 'Percentage',\n value,\n };\n func.children.remove(left);\n func.children.remove(right);\n } else if (\n left.data.type === 'Number' &&\n right.data.type === 'Percentage'\n ) {\n item.data = {\n type: 'Percentage',\n value,\n };\n func.children.remove(left);\n func.children.remove(right);\n } else if (\n left.data.type === 'Percentage' &&\n right.data.type === 'Percentage'\n ) {\n if (child.value === '/') {\n item.data = {\n type: 'Number',\n value,\n };\n } else {\n item.data = {\n type: 'Percentage',\n value,\n };\n }\n func.children.remove(left);\n func.children.remove(right);\n }\n }\n }\n });\n if (func.children.size === 1 && func.children.first) {\n funcListItem.data = func.children.first;\n }\n }\n },\n });\n}\n","import {\n type CssNode,\n type Declaration,\n type FunctionNode,\n generate,\n List,\n parse,\n type Raw,\n type Value,\n walk,\n} from 'css-tree';\n\nfunction rgbNode(\n r: number,\n g: number,\n b: number,\n alpha?: number,\n): FunctionNode {\n const children = new List<CssNode>();\n children.appendData({\n type: 'Number',\n value: r.toFixed(0),\n });\n children.appendData({\n type: 'Operator',\n value: ',',\n });\n children.appendData({\n type: 'Number',\n value: g.toFixed(0),\n });\n children.appendData({\n type: 'Operator',\n value: ',',\n });\n children.appendData({\n type: 'Number',\n value: b.toFixed(0),\n });\n if (alpha !== 1 && alpha !== undefined) {\n children.appendData({\n type: 'Operator',\n value: ',',\n });\n children.appendData({\n type: 'Number',\n value: alpha.toString(),\n });\n }\n\n return {\n type: 'Function',\n name: 'rgb',\n children,\n };\n}\n\nconst LAB_TO_LMS = {\n l: [0.3963377773761749, 0.2158037573099136],\n m: [-0.1055613458156586, -0.0638541728258133],\n s: [-0.0894841775298119, -1.2914855480194092],\n};\nconst LSM_TO_RGB = {\n r: [4.0767416360759583, -3.3077115392580629, 0.2309699031821043],\n g: [-1.2684379732850315, 2.6097573492876882, -0.341319376002657],\n b: [-0.0041960761386756, -0.7034186179359362, 1.7076146940746117],\n};\n\nfunction lrgbToRgb(input: number) {\n const absoluteNumber = Math.abs(input);\n const sign = input < 0 ? -1 : 1;\n\n if (absoluteNumber > 0.0031308) {\n return sign * (absoluteNumber ** (1 / 2.4) * 1.055 - 0.055);\n }\n\n return input * 12.92;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction oklchToOklab(oklch: { l: number; c: number; h: number }) {\n return {\n l: oklch.l,\n a: oklch.c * Math.cos((oklch.h / 180) * Math.PI),\n b: oklch.c * Math.sin((oklch.h / 180) * Math.PI),\n };\n}\n\n/** Convert oklch to RGB */\nfunction oklchToRgb(oklch: { l: number; c: number; h: number }) {\n const oklab = oklchToOklab(oklch);\n\n const l =\n (oklab.l + LAB_TO_LMS.l[0] * oklab.a + LAB_TO_LMS.l[1] * oklab.b) ** 3;\n const m =\n (oklab.l + LAB_TO_LMS.m[0] * oklab.a + LAB_TO_LMS.m[1] * oklab.b) ** 3;\n const s =\n (oklab.l + LAB_TO_LMS.s[0] * oklab.a + LAB_TO_LMS.s[1] * oklab.b) ** 3;\n\n const r =\n 255 *\n lrgbToRgb(\n LSM_TO_RGB.r[0] * l + LSM_TO_RGB.r[1] * m + LSM_TO_RGB.r[2] * s,\n );\n const g =\n 255 *\n lrgbToRgb(\n LSM_TO_RGB.g[0] * l + LSM_TO_RGB.g[1] * m + LSM_TO_RGB.g[2] * s,\n );\n const b =\n 255 *\n lrgbToRgb(\n LSM_TO_RGB.b[0] * l + LSM_TO_RGB.b[1] * m + LSM_TO_RGB.b[2] * s,\n );\n\n return {\n r: clamp(r, 0, 255),\n g: clamp(g, 0, 255),\n b: clamp(b, 0, 255),\n };\n}\n\nfunction separateShorthandDeclaration(\n shorthandToReplace: Declaration,\n [start, end]: [string, string],\n): Declaration {\n shorthandToReplace.property = start;\n\n const values =\n shorthandToReplace.value.type === 'Value'\n ? shorthandToReplace.value.children\n .toArray()\n .filter(\n (child) =>\n child.type === 'Dimension' ||\n child.type === 'Number' ||\n child.type === 'Percentage',\n )\n : [shorthandToReplace.value];\n let endValue = shorthandToReplace.value;\n if (values.length === 2) {\n endValue = {\n type: 'Value',\n children: new List<CssNode>().fromArray([values[1]]),\n };\n shorthandToReplace.value = {\n type: 'Value',\n children: new List<CssNode>().fromArray([values[0]]),\n };\n }\n\n return {\n type: 'Declaration',\n property: end,\n value: endValue,\n important: shorthandToReplace.important,\n };\n}\n\n/**\n * Does all the necessary transformations on a per-declaration basis to have the best email client\n * support possible:\n * - convert `rgb` with space-based syntax into comma-based\n * - convert `oklch` values into `rgb`\n * - convert hex values into `rgb`\n * - convert `color-mix(in oklab, rgb(...) opacity, transparent)` into `rgb` with alpha\n * - convert `padding-inline` into `padding-left` and `padding-right`\n * - convert `padding-block` into `padding-top` and `padding-bottom`\n * - convert `margin-inline` into `margin-left` and `margin-right`\n * - convert `margin-block` into `margin-top` and `margin-bottom`\n * - convert `border-radius: calc(infinity * 1px)` into `border-radius: 9999px`\n */\nexport function sanitizeDeclarations(nodeContainingDeclarations: CssNode) {\n walk(nodeContainingDeclarations, {\n visit: 'Declaration',\n enter(declaration, item, list) {\n if (declaration.value.type === 'Raw') {\n declaration.value = parse(declaration.value.value, {\n context: 'value',\n }) as Value | Raw;\n }\n if (\n /border-radius\\s*:\\s*calc\\s*\\(\\s*infinity\\s*\\*\\s*1px\\s*\\)/i.test(\n generate(declaration),\n )\n ) {\n declaration.value = parse('9999px', { context: 'value' }) as Value;\n }\n walk(declaration, {\n visit: 'Function',\n enter(func, funcParentListItem) {\n const children = func.children.toArray();\n if (func.name === 'oklch') {\n let l: number | undefined;\n let c: number | undefined;\n let h: number | undefined;\n let a: number | undefined;\n for (const child of children) {\n if (child.type === 'Number') {\n if (l === undefined) {\n l = Number.parseFloat(child.value);\n continue;\n }\n if (c === undefined) {\n c = Number.parseFloat(child.value);\n continue;\n }\n if (h === undefined) {\n h = Number.parseFloat(child.value);\n continue;\n }\n if (a === undefined) {\n a = Number.parseFloat(child.value);\n continue;\n }\n }\n if (child.type === 'Dimension' && child.unit === 'deg') {\n if (h === undefined) {\n h = Number.parseFloat(child.value);\n continue;\n }\n }\n if (child.type === 'Percentage') {\n if (l === undefined) {\n l = Number.parseFloat(child.value) / 100;\n continue;\n }\n if (a === undefined) {\n a = Number.parseFloat(child.value) / 100;\n }\n }\n }\n\n if (l === undefined || c === undefined || h === undefined) {\n throw new Error(\n 'Could not determine the parameters of an oklch() function.',\n {\n cause: declaration,\n },\n );\n }\n\n const rgb = oklchToRgb({ l, c, h });\n funcParentListItem.data = rgbNode(rgb.r, rgb.g, rgb.b, a);\n }\n\n if (func.name === 'rgb') {\n let r: number | undefined;\n let g: number | undefined;\n let b: number | undefined;\n let a: number | undefined;\n for (const child of children) {\n if (child.type === 'Number') {\n if (r === undefined) {\n r = Number.parseFloat(child.value);\n continue;\n }\n if (g === undefined) {\n g = Number.parseFloat(child.value);\n continue;\n }\n if (b === undefined) {\n b = Number.parseFloat(child.value);\n continue;\n }\n if (a === undefined) {\n a = Number.parseFloat(child.value);\n continue;\n }\n }\n if (child.type === 'Percentage') {\n if (r === undefined) {\n r = (Number.parseFloat(child.value) * 255) / 100;\n continue;\n }\n if (g === undefined) {\n g = (Number.parseFloat(child.value) * 255) / 100;\n continue;\n }\n if (b === undefined) {\n b = (Number.parseFloat(child.value) * 255) / 100;\n continue;\n }\n if (a === undefined) {\n a = Number.parseFloat(child.value) / 100;\n }\n }\n }\n\n if (r === undefined || g === undefined || b === undefined) {\n throw new Error(\n 'Could not determine the parameters of an rgb() function.',\n {\n cause: declaration,\n },\n );\n }\n\n if (a === undefined || a === 1) {\n funcParentListItem.data = rgbNode(r, g, b);\n } else {\n funcParentListItem.data = rgbNode(r, g, b, a);\n }\n }\n },\n });\n walk(declaration, {\n visit: 'Hash',\n enter(hash, hashParentListItem) {\n const hex = hash.value.trim();\n if (hex.length === 3) {\n const r = Number.parseInt(hex.charAt(0) + hex.charAt(0), 16);\n const g = Number.parseInt(hex.charAt(1) + hex.charAt(1), 16);\n const b = Number.parseInt(hex.charAt(2) + hex.charAt(2), 16);\n hashParentListItem.data = rgbNode(r, g, b);\n return;\n }\n if (hex.length === 4) {\n const r = Number.parseInt(hex.charAt(0) + hex.charAt(0), 16);\n const g = Number.parseInt(hex.charAt(1) + hex.charAt(1), 16);\n const b = Number.parseInt(hex.charAt(2) + hex.charAt(2), 16);\n const a = Number.parseInt(hex.charAt(3) + hex.charAt(3), 16) / 255;\n hashParentListItem.data = rgbNode(r, g, b, a);\n return;\n }\n if (hex.length === 5) {\n const r = Number.parseInt(hex.slice(0, 2), 16);\n const g = Number.parseInt(hex.charAt(2) + hex.charAt(2), 16);\n const b = Number.parseInt(hex.charAt(3) + hex.charAt(3), 16);\n const a = Number.parseInt(hex.charAt(4) + hex.charAt(4), 16) / 255;\n hashParentListItem.data = rgbNode(r, g, b, a);\n return;\n }\n if (hex.length === 6) {\n const r = Number.parseInt(hex.slice(0, 2), 16);\n const g = Number.parseInt(hex.slice(2, 4), 16);\n const b = Number.parseInt(hex.slice(4, 6), 16);\n hashParentListItem.data = rgbNode(r, g, b);\n return;\n }\n if (hex.length === 7) {\n const r = Number.parseInt(hex.slice(0, 2), 16);\n const g = Number.parseInt(hex.slice(2, 4), 16);\n const b = Number.parseInt(hex.slice(4, 6), 16);\n const a = Number.parseInt(hex.charAt(6) + hex.charAt(6), 16) / 255;\n hashParentListItem.data = rgbNode(r, g, b, a);\n return;\n }\n const r = Number.parseInt(hex.slice(0, 2), 16);\n const g = Number.parseInt(hex.slice(2, 4), 16);\n const b = Number.parseInt(hex.slice(4, 6), 16);\n const a = Number.parseInt(hex.slice(6, 8), 16) / 255;\n hashParentListItem.data = rgbNode(r, g, b, a);\n },\n });\n\n walk(declaration, {\n visit: 'Function',\n enter(func, parentListItem) {\n if (func.name === 'color-mix') {\n const children = func.children.toArray();\n const color: CssNode | undefined = children[3];\n const opacity: CssNode | undefined = children[4];\n if (\n func.children.last?.type === 'Identifier' &&\n func.children.last.name === 'transparent' &&\n color?.type === 'Function' &&\n color?.name === 'rgb' &&\n opacity\n ) {\n color.children.appendData({\n type: 'Operator',\n value: ',',\n });\n color.children.appendData(opacity);\n parentListItem.data = color;\n }\n }\n },\n });\n\n if (declaration.property === 'padding-inline') {\n const paddingRight = separateShorthandDeclaration(declaration, [\n 'padding-left',\n 'padding-right',\n ]);\n list.insertData(paddingRight, item);\n }\n if (declaration.property === 'padding-block') {\n const paddingBottom = separateShorthandDeclaration(declaration, [\n 'padding-top',\n 'padding-bottom',\n ]);\n list.insertData(paddingBottom, item);\n }\n if (declaration.property === 'margin-inline') {\n const marginRight = separateShorthandDeclaration(declaration, [\n 'margin-left',\n 'margin-right',\n ]);\n list.insertData(marginRight, item);\n }\n if (declaration.property === 'margin-block') {\n const marginBottom = separateShorthandDeclaration(declaration, [\n 'margin-top',\n 'margin-bottom',\n ]);\n list.insertData(marginBottom, item);\n }\n },\n });\n}\n","import type { StyleSheet } from 'css-tree';\nimport { resolveAllCssVariables } from './utils/resolve-all-css-variables';\nimport { resolveCalcExpressions } from './utils/resolve-calc-expressions';\nimport { sanitizeDeclarations } from './utils/sanitize-declarations';\n\nexport function sanitizeStyleSheet(styleSheet: StyleSheet) {\n resolveAllCssVariables(styleSheet);\n resolveCalcExpressions(styleSheet);\n sanitizeDeclarations(styleSheet);\n}\n","interface PromiseState {\n promise: Promise<unknown>;\n error?: unknown;\n result?: unknown;\n}\n\nconst promiseStates = new Map<string, PromiseState>();\n\nexport function useSuspensedPromise<Result>(\n promiseFn: () => Promise<Result>,\n key: string,\n) {\n const previousState = promiseStates.get(key);\n if (previousState) {\n if ('error' in previousState) {\n throw previousState.error;\n }\n\n if ('result' in previousState) {\n return previousState.result as Result;\n }\n\n throw previousState.promise;\n }\n\n const state: PromiseState = {\n promise: promiseFn()\n .then((result) => (state.result = result))\n .catch((error) => (state.error = error as unknown)),\n };\n promiseStates.set(key, state);\n\n throw state.promise;\n}\n","const digitToNameMap = {\n '0': 'zero',\n '1': 'one',\n '2': 'two',\n '3': 'three',\n '4': 'four',\n '5': 'five',\n '6': 'six',\n '7': 'seven',\n '8': 'eight',\n '9': 'nine',\n} as const;\n\nexport function sanitizeClassName(className: string) {\n return className\n .replaceAll('+', 'plus')\n .replaceAll('[', '')\n .replaceAll('%', 'pc')\n .replaceAll(']', '')\n .replaceAll('(', '')\n .replaceAll(')', '')\n .replaceAll('!', 'imprtnt')\n .replaceAll('>', 'gt')\n .replaceAll('<', 'lt')\n .replaceAll('=', 'eq')\n .replace(/^[0-9]/, (digit) => {\n return digitToNameMap[digit as keyof typeof digitToNameMap];\n })\n .replace(/[^a-zA-Z0-9\\-_]/g, '_');\n}\n","import { type CssNode, string, walk } from 'css-tree';\nimport { sanitizeClassName } from './sanitize-class-name';\nimport { isRuleInlinable } from './is-rule-inlinable';\n\n/**\n * Ensures the best email client support for non-inlinable rules:\n * 1. Converts all declarations in non-inlinable rules into !important\n * 2. Sanitizes class selectors of all non-inlinable rules\n */\nexport function sanitizeNonInlinableRules(node: CssNode) {\n walk(node, {\n visit: 'Rule',\n enter(rule) {\n if (!isRuleInlinable(rule)) {\n walk(rule.prelude, (node) => {\n if (node.type === 'ClassSelector') {\n const unescapedClassName = string.decode(node.name);\n node.name = sanitizeClassName(unescapedClassName);\n }\n });\n\n walk(rule, {\n visit: 'Declaration',\n enter(declaration) {\n declaration.important = true;\n },\n });\n }\n },\n });\n}\n","import { Body } from '../components/body';\nimport { Button } from '../components/button';\nimport { Container } from '../components/container';\nimport { Heading } from '../components/heading';\nimport { Hr } from '../components/hr';\nimport { Img } from '../components/img';\nimport { Link } from '../components/link';\nimport { Preview } from '../components/preview';\nimport { Text } from '../components/text';\n\n/**\n * Components that render standard HTML elements and should be treated as\n * elements (not traversed through) by the Tailwind tree mapper.\n */\nconst componentsToTreatAsElements: React.ReactElement['type'][] = [\n Body,\n Button,\n Container,\n Heading,\n Hr,\n Img,\n Link,\n Preview,\n Text,\n];\n\nexport const isComponent = (\n element: React.ReactElement,\n): element is React.ReactElement<unknown, React.FC<unknown>> => {\n return (\n (typeof element.type === 'function' ||\n // @ts-expect-error - we know this is a component that may have a render function\n element.type.render !== undefined) &&\n !componentsToTreatAsElements.includes(element.type)\n );\n};\n","import React from 'react';\nimport { isComponent } from './is-component';\n\n/**\n * Deep maps a React tree from a node, even through its components.\n * For all the components it finds, it renders them by directly calling them.\n *\n * @param process - Callback called every time a new element has been reached.\n * For components, this is called both before rendering (on props.children)\n * and after rendering.\n */\nexport function mapReactTree(\n value: React.ReactNode,\n process: (node: React.ReactNode) => React.ReactNode,\n): React.ReactNode {\n const mapped = React.Children.map(value, (node) => {\n if (React.isValidElement<{ children?: React.ReactNode }>(node)) {\n const newProps = { ...node.props };\n\n if (node.props.children && !isComponent(node)) {\n newProps.children = mapReactTree(node.props.children, process);\n }\n\n const processed = process(\n React.cloneElement(node, newProps, newProps.children),\n );\n\n if (\n React.isValidElement<{ children?: React.ReactNode }>(processed) &&\n isComponent(processed)\n ) {\n const OriginalComponent =\n typeof processed.type === 'object'\n ? // @ts-expect-error - we know this is a component with a render function\n (processed.type.render as React.FC)\n : (processed.type as React.FC);\n\n const rendered = OriginalComponent(processed.props);\n const mappedRenderedNode = mapReactTree(rendered, process);\n\n return mappedRenderedNode;\n }\n\n return processed;\n }\n\n return process(node);\n });\n\n return mapped && mapped.length === 1 ? mapped[0] : mapped;\n}\n","import type { Rule } from 'css-tree';\nimport React from 'react';\nimport type { EmailElementProps } from './tailwind';\nimport { sanitizeClassName } from './utils/sanitize-class-name';\nimport type { CustomProperties } from './utils/get-custom-properties';\nimport { makeInlineStylesFor } from './utils/make-inline-styles-for';\nimport { isComponent } from './is-component';\n\nexport function cloneElementWithInlinedStyles(\n element: React.ReactElement<EmailElementProps>,\n inlinableRules: Map<string, Rule>,\n nonInlinableRules: Map<string, Rule>,\n customProperties: CustomProperties,\n) {\n const propsToOverwrite: Partial<EmailElementProps> = {};\n\n if (element.props.className && !isComponent(element)) {\n const classes = element.props.className.trim().split(/\\s+/);\n\n const residualClasses: string[] = [];\n\n const rules: Rule[] = [];\n for (const className of classes) {\n const rule = inlinableRules.get(className);\n if (rule) {\n rules.push(rule);\n }\n if (nonInlinableRules.has(className)) {\n residualClasses.push(className);\n } else if (!rule) {\n residualClasses.push(className);\n }\n }\n\n const styles = makeInlineStylesFor(rules, customProperties);\n propsToOverwrite.style = {\n ...styles,\n ...element.props.style,\n };\n\n if (residualClasses.length > 0) {\n propsToOverwrite.className = residualClasses\n .map((className) => {\n if (nonInlinableRules.has(className)) {\n return sanitizeClassName(className);\n }\n return className;\n })\n .join(' ');\n } else {\n propsToOverwrite.className = undefined;\n }\n }\n\n const newProps = {\n ...element.props,\n ...propsToOverwrite,\n };\n\n return React.cloneElement(element, newProps, newProps.children);\n}\n","const css = `\n@layer theme, base, components, utilities;\n\n@layer theme {\n @theme default {\n --font-sans:\n ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\",\n \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-serif: ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif;\n --font-mono:\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-300: oklch(80.8% 0.114 19.571);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-red-800: oklch(44.4% 0.177 26.899);\n --color-red-900: oklch(39.6% 0.141 25.723);\n --color-red-950: oklch(25.8% 0.092 26.042);\n\n --color-orange-50: oklch(98% 0.016 73.684);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-300: oklch(83.7% 0.128 66.29);\n --color-orange-400: oklch(75% 0.183 55.934);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-orange-800: oklch(47% 0.157 37.304);\n --color-orange-900: oklch(40.8% 0.123 38.172);\n --color-orange-950: oklch(26.6% 0.079 36.259);\n\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-amber-900: oklch(41.4% 0.112 45.904);\n --color-amber-950: oklch(27.9% 0.077 45.635);\n\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-200: oklch(94.5% 0.129 101.54);\n --color-yellow-300: oklch(90.5% 0.182 98.111);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-yellow-800: oklch(47.6% 0.114 61.907);\n --color-yellow-900: oklch(42.1% 0.095 57.708);\n --color-yellow-950: oklch(28.6% 0.066 53.813);\n\n --color-lime-50: oklch(98.6% 0.031 120.757);\n --color-lime-100: oklch(96.7% 0.067 122.328);\n --color-lime-200: oklch(93.8% 0.127 124.321);\n --color-lime-300: oklch(89.7% 0.196 126.665);\n --color-lime-400: oklch(84.1% 0.238 128.85);\n --color-lime-500: oklch(76.8% 0.233 130.85);\n --color-lime-600: oklch(64.8% 0.2 131.684);\n --color-lime-700: oklch(53.2% 0.157 131.589);\n --color-lime-800: oklch(45.3% 0.124 130.933);\n --color-lime-900: oklch(40.5% 0.101 131.063);\n --color-lime-950: oklch(27.4% 0.072 132.109);\n\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-200: oklch(90.5% 0.093 164.15);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-emerald-800: oklch(43.2% 0.095 166.913);\n --color-emerald-900: oklch(37.8% 0.077 168.94);\n --color-emerald-950: oklch(26.2% 0.051 172.552);\n\n --color-teal-50: oklch(98.4% 0.014 180.72);\n --color-teal-100: oklch(95.3% 0.051 180.801);\n --color-teal-200: oklch(91% 0.096 180.426);\n --color-teal-300: oklch(85.5% 0.138 181.071);\n --color-teal-400: oklch(77.7% 0.152 181.912);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-teal-600: oklch(60% 0.118 184.704);\n --color-teal-700: oklch(51.1% 0.096 186.391);\n --color-teal-800: oklch(43.7% 0.078 188.216);\n --color-teal-900: oklch(38.6% 0.063 188.416);\n --color-teal-950: oklch(27.7% 0.046 192.524);\n\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-200: oklch(91.7% 0.08 205.041);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-500: oklch(71.5% 0.143 215.221);\n --color-cyan-600: oklch(60.9% 0.126 221.723);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-cyan-800: oklch(45% 0.085 224.283);\n --color-cyan-900: oklch(39.8% 0.07 227.392);\n --color-cyan-950: oklch(30.2% 0.056 229.695);\n\n --color-sky-50: oklch(97.7% 0.013 236.62);\n --color-sky-100: oklch(95.1% 0.026 236.824);\n --color-sky-200: oklch(90.1% 0.058 230.902);\n --color-sky-300: oklch(82.8% 0.111 230.318);\n --color-sky-400: oklch(74.6% 0.16 232.661);\n --color-sky-500: oklch(68.5% 0.169 237.323);\n --color-sky-600: oklch(58.8% 0.158 241.966);\n --color-sky-700: oklch(50% 0.134 242.749);\n --color-sky-800: oklch(44.3% 0.11 240.79);\n --color-sky-900: oklch(39.1% 0.09 240.876);\n --color-sky-950: oklch(29.3% 0.066 243.157);\n\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-blue-950: oklch(28.2% 0.091 267.935);\n\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-indigo-950: oklch(25.7% 0.09 281.288);\n\n --color-violet-50: oklch(96.9% 0.016 293.756);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-200: oklch(89.4% 0.057 293.283);\n --color-violet-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-500: oklch(60.6% 0.25 292.717);\n --color-violet-600: oklch(54.1% 0.281 293.009);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-violet-800: oklch(43.2% 0.232 292.759);\n --color-violet-900: oklch(38% 0.189 293.745);\n --color-violet-950: oklch(28.3% 0.141 291.089);\n\n --color-purple-50: oklch(97.7% 0.014 308.299);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-300: oklch(82.7% 0.119 306.383);\n --color-purple-400: oklch(71.4% 0.203 305.504);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-purple-800: oklch(43.8% 0.218 303.724);\n --color-purple-900: oklch(38.1% 0.176 304.987);\n --color-purple-950: oklch(29.1% 0.149 302.717);\n\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\n --color-fuchsia-200: oklch(90.3% 0.076 319.62);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-500: oklch(66.7% 0.295 322.15);\n --color-fuchsia-600: oklch(59.1% 0.293 322.896);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-fuchsia-800: oklch(45.2% 0.211 324.591);\n --color-fuchsia-900: oklch(40.1% 0.17 325.612);\n --color-fuchsia-950: oklch(29.3% 0.136 325.661);\n\n --color-pink-50: oklch(97.1% 0.014 343.198);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-200: oklch(89.9% 0.061 343.231);\n --color-pink-300: oklch(82.3% 0.12 346.018);\n --color-pink-400: oklch(71.8% 0.202 349.761);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-pink-800: oklch(45.9% 0.187 3.815);\n --color-pink-900: oklch(40.8% 0.153 2.432);\n --color-pink-950: oklch(28.4% 0.109 3.907);\n\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-300: oklch(81% 0.117 11.638);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-500: oklch(64.5% 0.246 16.439);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-rose-900: oklch(41% 0.159 10.272);\n --color-rose-950: oklch(27.1% 0.105 12.094);\n\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\n --color-slate-950: oklch(12.9% 0.042 264.695);\n\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n\n --color-zinc-50: oklch(98.5% 0 0);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-400: oklch(70.5% 0.015 286.067);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-700: oklch(37% 0.013 285.805);\n --color-zinc-800: oklch(27.4% 0.006 286.033);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-zinc-950: oklch(14.1% 0.005 285.823);\n\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-200: oklch(92.2% 0 0);\n --color-neutral-300: oklch(87% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-600: oklch(43.9% 0 0);\n --color-neutral-700: oklch(37.1% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-900: oklch(20.5% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n\n --color-stone-50: oklch(98.5% 0.001 106.423);\n --color-stone-100: oklch(97% 0.001 106.424);\n --color-stone-200: oklch(92.3% 0.003 48.717);\n --color-stone-300: oklch(86.9% 0.005 56.366);\n --color-stone-400: oklch(70.9% 0.01 56.259);\n --color-stone-500: oklch(55.3% 0.013 58.071);\n --color-stone-600: oklch(44.4% 0.011 73.639);\n --color-stone-700: oklch(37.4% 0.01 67.558);\n --color-stone-800: oklch(26.8% 0.007 34.298);\n --color-stone-900: oklch(21.6% 0.006 56.043);\n --color-stone-950: oklch(14.7% 0.004 49.25);\n\n --color-black: #000;\n --color-white: #fff;\n\n --spacing: 0.25rem;\n\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n --container-3xs: 16rem;\n --container-2xs: 18rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --text-8xl: 6rem;\n --text-8xl--line-height: 1;\n --text-9xl: 8rem;\n --text-9xl--line-height: 1;\n\n --font-weight-thin: 100;\n --font-weight-extralight: 200;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --font-weight-black: 900;\n\n --tracking-tighter: -0.05em;\n --tracking-tight: -0.025em;\n --tracking-normal: 0em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --leading-loose: 2;\n\n --radius-xs: 0.125rem;\n --radius-sm: 0.25rem;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n --radius-4xl: 2rem;\n\n --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\n --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-md:\n 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --shadow-lg:\n 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --shadow-xl:\n 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\n --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\n --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\n\n --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\n --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\n --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\n --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\n --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n\n --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15);\n --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2);\n --text-shadow-sm:\n 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075),\n 0px 2px 2px rgb(0 0 0 / 0.075);\n --text-shadow-md:\n 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1),\n 0px 2px 4px rgb(0 0 0 / 0.1);\n --text-shadow-lg:\n 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1),\n 0px 4px 8px rgb(0 0 0 / 0.1);\n\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\n --animate-spin: spin 1s linear infinite;\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --animate-bounce: bounce 1s infinite;\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n @keyframes bounce {\n 0%,\n 100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n }\n\n --blur-xs: 4px;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-lg: 16px;\n --blur-xl: 24px;\n --blur-2xl: 40px;\n --blur-3xl: 64px;\n\n --perspective-dramatic: 100px;\n --perspective-near: 300px;\n --perspective-normal: 500px;\n --perspective-midrange: 800px;\n --perspective-distant: 1200px;\n\n --aspect-video: 16 / 9;\n\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: --theme(--font-sans, initial);\n --default-font-feature-settings: --theme(\n --font-sans--font-feature-settings,\n initial\n );\n --default-font-variation-settings: --theme(\n --font-sans--font-variation-settings,\n initial\n );\n --default-mono-font-family: --theme(--font-mono, initial);\n --default-mono-font-feature-settings: --theme(\n --font-mono--font-feature-settings,\n initial\n );\n --default-mono-font-variation-settings: --theme(\n --font-mono--font-variation-settings,\n initial\n );\n }\n\n /* Deprecated */\n @theme default inline reference {\n --blur: 8px;\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\n --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);\n --radius: 0.25rem;\n --max-width-prose: 65ch;\n }\n}\n\n@layer base {\n /*\n 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n 2. Remove default margins and padding\n 3. Reset all borders.\n*/\n\n *,\n ::after,\n ::before,\n ::backdrop,\n ::file-selector-button {\n box-sizing: border-box; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 2 */\n border: 0 solid; /* 3 */\n }\n\n /*\n 1. Use a consistent sensible line-height in all browsers.\n 2. Prevent adjustments of font size after orientation changes in iOS.\n 3. Use a more readable tab size.\n 4. Use the user's configured \\`sans\\` font-family by default.\n 5. Use the user's configured \\`sans\\` font-feature-settings by default.\n 6. Use the user's configured \\`sans\\` font-variation-settings by default.\n 7. Disable tap highlights on iOS.\n*/\n\n html,\n :host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n tab-size: 4; /* 3 */\n font-family: --theme(\n --default-font-family,\n ui-sans-serif,\n system-ui,\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n \"Noto Color Emoji\"\n ); /* 4 */\n font-feature-settings: --theme(\n --default-font-feature-settings,\n normal\n ); /* 5 */\n font-variation-settings: --theme(\n --default-font-variation-settings,\n normal\n ); /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n }\n\n /*\n 1. Add the correct height in Firefox.\n 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n 3. Reset the default border style to a 1px solid border.\n*/\n\n hr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n }\n\n /*\n Add the correct text decoration in Chrome, Edge, and Safari.\n*/\n\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n\n /*\n Remove the default font size and weight for headings.\n*/\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n\n /*\n Reset links to optimize for opt-in styling instead of opt-out.\n*/\n\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n\n /*\n Add the correct font weight in Edge and Safari.\n*/\n\n b,\n strong {\n font-weight: bolder;\n }\n\n /*\n 1. Use the user's configured \\`mono\\` font-family by default.\n 2. Use the user's configured \\`mono\\` font-feature-settings by default.\n 3. Use the user's configured \\`mono\\` font-variation-settings by default.\n 4. Correct the odd \\`em\\` font sizing in all browsers.\n*/\n\n code,\n kbd,\n samp,\n pre {\n font-family: --theme(\n --default-mono-font-family,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n \"Liberation Mono\",\n \"Courier New\",\n monospace\n ); /* 1 */\n font-feature-settings: --theme(\n --default-mono-font-feature-settings,\n normal\n ); /* 2 */\n font-variation-settings: --theme(\n --default-mono-font-variation-settings,\n normal\n ); /* 3 */\n font-size: 1em; /* 4 */\n }\n\n /*\n Add the correct font size in all browsers.\n*/\n\n small {\n font-size: 80%;\n }\n\n /*\n Prevent \\`sub\\` and \\`sup\\` elements from affecting the line height in all browsers.\n*/\n\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n\n sub {\n bottom: -0.25em;\n }\n\n sup {\n top: -0.5em;\n }\n\n /*\n 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n 3. Remove gaps between table borders by default.\n*/\n\n table {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n }\n\n /*\n Use the modern Firefox focus style for all focusable elements.\n*/\n\n :-moz-focusring {\n outline: auto;\n }\n\n /*\n Add the correct vertical alignment in Chrome and Firefox.\n*/\n\n progress {\n vertical-align: baseline;\n }\n\n /*\n Add the correct display in Chrome and Safari.\n*/\n\n summary {\n display: list-item;\n }\n\n /*\n Make lists unstyled by default.\n*/\n\n ol,\n ul,\n menu {\n list-style: none;\n }\n\n /*\n 1. Make replaced elements \\`display: block\\` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n 2. Add \\`vertical - align: middle\\` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\n img,\n svg,\n video,\n canvas,\n audio,\n iframe,\n embed,\n object {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n }\n\n /*\n Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\n img,\n video {\n max-width: 100%;\n height: auto;\n }\n\n /*\n 1. Inherit font styles in all browsers.\n 2. Remove border radius in all browsers.\n 3. Remove background color in all browsers.\n 4. Ensure consistent opacity for disabled states in all browsers.\n*/\n\n button,\n input,\n select,\n optgroup,\n textarea,\n ::file-selector-button {\n font: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n border-radius: 0; /* 2 */\n background-color: transparent; /* 3 */\n opacity: 1; /* 4 */\n }\n\n /*\n Restore default font weight.\n*/\n\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n\n /*\n Restore indentation.\n*/\n\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n\n /*\n Restore space after button.\n*/\n\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n\n /*\n Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n*/\n\n ::placeholder {\n opacity: 1;\n }\n\n /*\n Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not\n crash when using \\`color - mix(…)\\` with \\`currentcolor\\`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)\n*/\n\n @supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or\n (contain-intrinsic-size: 1px) /* Safari 17+ */ {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n\n /*\n Prevent resizing textareas horizontally by default.\n*/\n\n textarea {\n resize: vertical;\n }\n\n /*\n Remove the inner padding in Chrome and Safari on macOS.\n*/\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n /*\n 1. Ensure date/time inputs have the same height when empty in iOS Safari.\n 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.\n*/\n\n ::-webkit-date-and-time-value {\n min-height: 1lh; /* 1 */\n text-align: inherit; /* 2 */\n }\n\n /*\n Prevent height from changing on date/time inputs in macOS Safari when the input is set to \\`display: block\\`.\n*/\n\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n\n /*\n Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.\n*/\n\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n\n ::-webkit-datetime-edit,\n ::-webkit-datetime-edit-year-field,\n ::-webkit-datetime-edit-month-field,\n ::-webkit-datetime-edit-day-field,\n ::-webkit-datetime-edit-hour-field,\n ::-webkit-datetime-edit-minute-field,\n ::-webkit-datetime-edit-second-field,\n ::-webkit-datetime-edit-millisecond-field,\n ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n\n /*\n Center dropdown marker shown on inputs with paired \\`<datalist>\\`s in Chrome. (https://github.com/tailwindlabs/tailwindcss/issues/18499)\n*/\n\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n\n /*\n Remove the additional \\`: invalid\\` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n :-moz-ui-invalid {\n box-shadow: none;\n }\n\n /*\n Correct the inability to style the border radius in iOS Safari.\n*/\n\n button,\n input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]),\n ::file-selector-button {\n appearance: button;\n }\n\n /*\n Correct the cursor style of increment and decrement buttons in Safari.\n*/\n\n ::-webkit-inner-spin-button,\n ::-webkit-outer-spin-button {\n height: auto;\n }\n\n /*\n Make elements with the HTML hidden attribute stay hidden by default.\n*/\n\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n\n@layer utilities {\n @tailwind utilities;\n}\n`;\n\nexport default css;\n","const css = `\n/*\n 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n 2. Remove default margins and padding\n 3. Reset all borders.\n*/\n\n*,\n::after,\n::before,\n::backdrop,\n::file-selector-button {\n box-sizing: border-box; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 2 */\n border: 0 solid; /* 3 */\n}\n\n/*\n 1. Use a consistent sensible line-height in all browsers.\n 2. Prevent adjustments of font size after orientation changes in iOS.\n 3. Use a more readable tab size.\n 4. Use the user's configured \\`sans\\` font-family by default.\n 5. Use the user's configured \\`sans\\` font-feature-settings by default.\n 6. Use the user's configured \\`sans\\` font-variation-settings by default.\n 7. Disable tap highlights on iOS.\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n tab-size: 4; /* 3 */\n font-family: --theme(\n --default-font-family,\n ui-sans-serif,\n system-ui,\n sans-serif,\n 'Apple Color Emoji',\n 'Segoe UI Emoji',\n 'Segoe UI Symbol',\n 'Noto Color Emoji'\n ); /* 4 */\n font-feature-settings: --theme(--default-font-feature-settings, normal); /* 5 */\n font-variation-settings: --theme(--default-font-variation-settings, normal); /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n 1. Add the correct height in Firefox.\n 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n 3. Reset the default border style to a 1px solid border.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\n Add the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\n Remove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\n Reset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n}\n\n/*\n Add the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n 1. Use the user's configured \\`mono\\` font-family by default.\n 2. Use the user's configured \\`mono\\` font-feature-settings by default.\n 3. Use the user's configured \\`mono\\` font-variation-settings by default.\n 4. Correct the odd \\`em\\` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: --theme(\n --default-mono-font-family,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n 'Liberation Mono',\n 'Courier New',\n monospace\n ); /* 1 */\n font-feature-settings: --theme(--default-mono-font-feature-settings, normal); /* 2 */\n font-variation-settings: --theme(--default-mono-font-variation-settings, normal); /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\n Add the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\n Prevent \\`sub\\` and \\`sup\\` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n 3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n Use the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\n Add the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\n Add the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\n Make lists unstyled by default.\n*/\n\nol,\nul,\nmenu {\n list-style: none;\n}\n\n/*\n 1. Make replaced elements \\`display: block\\` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n 2. Add \\`vertical-align: middle\\` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\n Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/*\n 1. Inherit font styles in all browsers.\n 2. Remove border radius in all browsers.\n 3. Remove background color in all browsers.\n 4. Ensure consistent opacity for disabled states in all browsers.\n*/\n\nbutton,\ninput,\nselect,\noptgroup,\ntextarea,\n::file-selector-button {\n font: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n border-radius: 0; /* 2 */\n background-color: transparent; /* 3 */\n opacity: 1; /* 4 */\n}\n\n/*\n Restore default font weight.\n*/\n\n:where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n}\n\n/*\n Restore indentation.\n*/\n\n:where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n}\n\n/*\n Restore space after button.\n*/\n\n::file-selector-button {\n margin-inline-end: 4px;\n}\n\n/*\n Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n*/\n\n::placeholder {\n opacity: 1;\n}\n\n/*\n Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not\n crash when using \\`color-mix(…)\\` with \\`currentcolor\\`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)\n*/\n\n@supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or\n (contain-intrinsic-size: 1px) /* Safari 17+ */ {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n}\n\n/*\n Prevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n Remove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n 1. Ensure date/time inputs have the same height when empty in iOS Safari.\n 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.\n*/\n\n::-webkit-date-and-time-value {\n min-height: 1lh; /* 1 */\n text-align: inherit; /* 2 */\n}\n\n/*\n Prevent height from changing on date/time inputs in macOS Safari when the input is set to \\`display: block\\`.\n*/\n\n::-webkit-datetime-edit {\n display: inline-flex;\n}\n\n/*\n Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.\n*/\n\n::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n}\n\n::-webkit-datetime-edit,\n::-webkit-datetime-edit-year-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-minute-field,\n::-webkit-datetime-edit-second-field,\n::-webkit-datetime-edit-millisecond-field,\n::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n}\n\n/*\n Center dropdown marker shown on inputs with paired \\`<datalist>\\`s in Chrome. (https://github.com/tailwindlabs/tailwindcss/issues/18499)\n*/\n\n::-webkit-calendar-picker-indicator {\n line-height: 1;\n}\n\n/*\n Remove the additional \\`:invalid\\` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\n Correct the inability to style the border radius in iOS Safari.\n*/\n\nbutton,\ninput:where([type='button'], [type='reset'], [type='submit']),\n::file-selector-button {\n appearance: button;\n}\n\n/*\n Correct the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n Make elements with the HTML hidden attribute stay hidden by default.\n*/\n\n[hidden]:where(:not([hidden='until-found'])) {\n display: none !important;\n}\n`;\n\nexport default css;\n","const css = `\n@theme default {\n --font-sans:\n ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n 'Noto Color Emoji';\n --font-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;\n --font-mono:\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',\n monospace;\n\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-300: oklch(80.8% 0.114 19.571);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-red-800: oklch(44.4% 0.177 26.899);\n --color-red-900: oklch(39.6% 0.141 25.723);\n --color-red-950: oklch(25.8% 0.092 26.042);\n\n --color-orange-50: oklch(98% 0.016 73.684);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-300: oklch(83.7% 0.128 66.29);\n --color-orange-400: oklch(75% 0.183 55.934);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-orange-800: oklch(47% 0.157 37.304);\n --color-orange-900: oklch(40.8% 0.123 38.172);\n --color-orange-950: oklch(26.6% 0.079 36.259);\n\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-amber-900: oklch(41.4% 0.112 45.904);\n --color-amber-950: oklch(27.9% 0.077 45.635);\n\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-200: oklch(94.5% 0.129 101.54);\n --color-yellow-300: oklch(90.5% 0.182 98.111);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-yellow-800: oklch(47.6% 0.114 61.907);\n --color-yellow-900: oklch(42.1% 0.095 57.708);\n --color-yellow-950: oklch(28.6% 0.066 53.813);\n\n --color-lime-50: oklch(98.6% 0.031 120.757);\n --color-lime-100: oklch(96.7% 0.067 122.328);\n --color-lime-200: oklch(93.8% 0.127 124.321);\n --color-lime-300: oklch(89.7% 0.196 126.665);\n --color-lime-400: oklch(84.1% 0.238 128.85);\n --color-lime-500: oklch(76.8% 0.233 130.85);\n --color-lime-600: oklch(64.8% 0.2 131.684);\n --color-lime-700: oklch(53.2% 0.157 131.589);\n --color-lime-800: oklch(45.3% 0.124 130.933);\n --color-lime-900: oklch(40.5% 0.101 131.063);\n --color-lime-950: oklch(27.4% 0.072 132.109);\n\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-200: oklch(90.5% 0.093 164.15);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-emerald-800: oklch(43.2% 0.095 166.913);\n --color-emerald-900: oklch(37.8% 0.077 168.94);\n --color-emerald-950: oklch(26.2% 0.051 172.552);\n\n --color-teal-50: oklch(98.4% 0.014 180.72);\n --color-teal-100: oklch(95.3% 0.051 180.801);\n --color-teal-200: oklch(91% 0.096 180.426);\n --color-teal-300: oklch(85.5% 0.138 181.071);\n --color-teal-400: oklch(77.7% 0.152 181.912);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-teal-600: oklch(60% 0.118 184.704);\n --color-teal-700: oklch(51.1% 0.096 186.391);\n --color-teal-800: oklch(43.7% 0.078 188.216);\n --color-teal-900: oklch(38.6% 0.063 188.416);\n --color-teal-950: oklch(27.7% 0.046 192.524);\n\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-200: oklch(91.7% 0.08 205.041);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-500: oklch(71.5% 0.143 215.221);\n --color-cyan-600: oklch(60.9% 0.126 221.723);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-cyan-800: oklch(45% 0.085 224.283);\n --color-cyan-900: oklch(39.8% 0.07 227.392);\n --color-cyan-950: oklch(30.2% 0.056 229.695);\n\n --color-sky-50: oklch(97.7% 0.013 236.62);\n --color-sky-100: oklch(95.1% 0.026 236.824);\n --color-sky-200: oklch(90.1% 0.058 230.902);\n --color-sky-300: oklch(82.8% 0.111 230.318);\n --color-sky-400: oklch(74.6% 0.16 232.661);\n --color-sky-500: oklch(68.5% 0.169 237.323);\n --color-sky-600: oklch(58.8% 0.158 241.966);\n --color-sky-700: oklch(50% 0.134 242.749);\n --color-sky-800: oklch(44.3% 0.11 240.79);\n --color-sky-900: oklch(39.1% 0.09 240.876);\n --color-sky-950: oklch(29.3% 0.066 243.157);\n\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-blue-950: oklch(28.2% 0.091 267.935);\n\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-indigo-950: oklch(25.7% 0.09 281.288);\n\n --color-violet-50: oklch(96.9% 0.016 293.756);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-200: oklch(89.4% 0.057 293.283);\n --color-violet-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-500: oklch(60.6% 0.25 292.717);\n --color-violet-600: oklch(54.1% 0.281 293.009);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-violet-800: oklch(43.2% 0.232 292.759);\n --color-violet-900: oklch(38% 0.189 293.745);\n --color-violet-950: oklch(28.3% 0.141 291.089);\n\n --color-purple-50: oklch(97.7% 0.014 308.299);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-300: oklch(82.7% 0.119 306.383);\n --color-purple-400: oklch(71.4% 0.203 305.504);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-purple-800: oklch(43.8% 0.218 303.724);\n --color-purple-900: oklch(38.1% 0.176 304.987);\n --color-purple-950: oklch(29.1% 0.149 302.717);\n\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\n --color-fuchsia-200: oklch(90.3% 0.076 319.62);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-500: oklch(66.7% 0.295 322.15);\n --color-fuchsia-600: oklch(59.1% 0.293 322.896);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-fuchsia-800: oklch(45.2% 0.211 324.591);\n --color-fuchsia-900: oklch(40.1% 0.17 325.612);\n --color-fuchsia-950: oklch(29.3% 0.136 325.661);\n\n --color-pink-50: oklch(97.1% 0.014 343.198);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-200: oklch(89.9% 0.061 343.231);\n --color-pink-300: oklch(82.3% 0.12 346.018);\n --color-pink-400: oklch(71.8% 0.202 349.761);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-pink-800: oklch(45.9% 0.187 3.815);\n --color-pink-900: oklch(40.8% 0.153 2.432);\n --color-pink-950: oklch(28.4% 0.109 3.907);\n\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-300: oklch(81% 0.117 11.638);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-500: oklch(64.5% 0.246 16.439);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-rose-900: oklch(41% 0.159 10.272);\n --color-rose-950: oklch(27.1% 0.105 12.094);\n\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\n --color-slate-950: oklch(12.9% 0.042 264.695);\n\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n\n --color-zinc-50: oklch(98.5% 0 0);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-400: oklch(70.5% 0.015 286.067);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-700: oklch(37% 0.013 285.805);\n --color-zinc-800: oklch(27.4% 0.006 286.033);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-zinc-950: oklch(14.1% 0.005 285.823);\n\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-200: oklch(92.2% 0 0);\n --color-neutral-300: oklch(87% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-600: oklch(43.9% 0 0);\n --color-neutral-700: oklch(37.1% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-900: oklch(20.5% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n\n --color-stone-50: oklch(98.5% 0.001 106.423);\n --color-stone-100: oklch(97% 0.001 106.424);\n --color-stone-200: oklch(92.3% 0.003 48.717);\n --color-stone-300: oklch(86.9% 0.005 56.366);\n --color-stone-400: oklch(70.9% 0.01 56.259);\n --color-stone-500: oklch(55.3% 0.013 58.071);\n --color-stone-600: oklch(44.4% 0.011 73.639);\n --color-stone-700: oklch(37.4% 0.01 67.558);\n --color-stone-800: oklch(26.8% 0.007 34.298);\n --color-stone-900: oklch(21.6% 0.006 56.043);\n --color-stone-950: oklch(14.7% 0.004 49.25);\n\n --color-black: #000;\n --color-white: #fff;\n\n --spacing: 0.25rem;\n\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n --container-3xs: 16rem;\n --container-2xs: 18rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --text-8xl: 6rem;\n --text-8xl--line-height: 1;\n --text-9xl: 8rem;\n --text-9xl--line-height: 1;\n\n --font-weight-thin: 100;\n --font-weight-extralight: 200;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --font-weight-black: 900;\n\n --tracking-tighter: -0.05em;\n --tracking-tight: -0.025em;\n --tracking-normal: 0em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --leading-loose: 2;\n\n --radius-xs: 0.125rem;\n --radius-sm: 0.25rem;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n --radius-4xl: 2rem;\n\n --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\n --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\n --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\n --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\n\n --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\n --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\n --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\n --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\n --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n\n --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15);\n --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2);\n --text-shadow-sm:\n 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075), 0px 2px 2px rgb(0 0 0 / 0.075);\n --text-shadow-md:\n 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1), 0px 2px 4px rgb(0 0 0 / 0.1);\n --text-shadow-lg:\n 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1), 0px 4px 8px rgb(0 0 0 / 0.1);\n\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\n --animate-spin: spin 1s linear infinite;\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --animate-bounce: bounce 1s infinite;\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n @keyframes bounce {\n 0%,\n 100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n }\n\n --blur-xs: 4px;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-lg: 16px;\n --blur-xl: 24px;\n --blur-2xl: 40px;\n --blur-3xl: 64px;\n\n --perspective-dramatic: 100px;\n --perspective-near: 300px;\n --perspective-normal: 500px;\n --perspective-midrange: 800px;\n --perspective-distant: 1200px;\n\n --aspect-video: 16 / 9;\n\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: --theme(--font-sans, initial);\n --default-font-feature-settings: --theme(--font-sans--font-feature-settings, initial);\n --default-font-variation-settings: --theme(--font-sans--font-variation-settings, initial);\n --default-mono-font-family: --theme(--font-mono, initial);\n --default-mono-font-feature-settings: --theme(--font-mono--font-feature-settings, initial);\n --default-mono-font-variation-settings: --theme(--font-mono--font-variation-settings, initial);\n}\n\n/* Deprecated */\n@theme default inline reference {\n --blur: 8px;\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\n --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);\n --radius: 0.25rem;\n --max-width-prose: 65ch;\n}\n`;\n\nexport default css;\n","const css = `\n@tailwind utilities;\n`;\n\nexport default css;\n","import { parse, type StyleSheet } from 'css-tree';\nimport { compile } from 'tailwindcss';\nimport type { TailwindConfig } from './tailwind';\nimport indexCss from './css/index';\nimport preflightCss from './css/preflight';\nimport themeCss from './css/theme';\nimport utilitiesCss from './css/utilities';\n\nexport type TailwindSetup = Awaited<ReturnType<typeof setupTailwind>>;\n\nexport async function setupTailwind(config: TailwindConfig) {\n const baseCss = `\n@layer theme, base, components, utilities;\n@import \"tailwindcss/theme.css\" layer(theme);\n@import \"tailwindcss/utilities.css\" layer(utilities);\n@config;\n`;\n const compiler = await compile(baseCss, {\n async loadModule(id, base, resourceHint) {\n if (resourceHint === 'config') {\n return {\n path: id,\n base: base,\n module: config,\n };\n }\n\n throw new Error(\n `NO-OP: should we implement support for ${resourceHint}?`,\n );\n },\n polyfills: 0, // All\n async loadStylesheet(id, base) {\n if (id === 'tailwindcss') {\n return {\n base,\n path: 'tailwindcss/index.css',\n content: indexCss,\n };\n }\n\n if (id === 'tailwindcss/preflight.css') {\n return {\n base,\n path: id,\n content: preflightCss,\n };\n }\n\n if (id === 'tailwindcss/theme.css') {\n return {\n base,\n path: id,\n content: themeCss,\n };\n }\n\n if (id === 'tailwindcss/utilities.css') {\n return {\n base,\n path: id,\n content: utilitiesCss,\n };\n }\n\n throw new Error(\n 'stylesheet not supported, you can only import the ones from tailwindcss',\n );\n },\n });\n\n let css: string = baseCss;\n\n return {\n addUtilities: function addUtilities(candidates: string[]): void {\n css = compiler.build(candidates);\n },\n getStyleSheet: function getCss() {\n return parse(css) as StyleSheet;\n },\n };\n}\n","import { type CssNode, generate, List, type StyleSheet } from 'css-tree';\nimport * as React from 'react';\nimport type { Config } from 'tailwindcss';\nimport { useSuspensedPromise } from './use-suspended-promise';\nimport { sanitizeStyleSheet } from './sanitize-stylesheet';\nimport { extractRulesPerClass } from './utils/extract-rules-per-class';\nimport { getCustomProperties } from './utils/get-custom-properties';\nimport { sanitizeNonInlinableRules } from './utils/sanitize-non-inlinable-rules';\nimport { mapReactTree } from './map-react-tree';\nimport { cloneElementWithInlinedStyles } from './clone-element-with-inlined-styles';\nimport { setupTailwind } from './setup-tailwind';\n\nexport type TailwindConfig = Omit<Config, 'content'>;\n\nexport interface TailwindProps {\n children: React.ReactNode;\n config?: TailwindConfig;\n}\n\nexport interface EmailElementProps {\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const pixelBasedPreset: TailwindConfig = {\n theme: {\n extend: {\n fontSize: {\n xs: ['12px', { lineHeight: '16px' }],\n sm: ['14px', { lineHeight: '20px' }],\n base: ['16px', { lineHeight: '24px' }],\n lg: ['18px', { lineHeight: '28px' }],\n xl: ['20px', { lineHeight: '28px' }],\n '2xl': ['24px', { lineHeight: '32px' }],\n '3xl': ['30px', { lineHeight: '36px' }],\n '4xl': ['36px', { lineHeight: '36px' }],\n '5xl': ['48px', { lineHeight: '1' }],\n '6xl': ['60px', { lineHeight: '1' }],\n '7xl': ['72px', { lineHeight: '1' }],\n '8xl': ['96px', { lineHeight: '1' }],\n '9xl': ['144px', { lineHeight: '1' }],\n },\n spacing: {\n px: '1px',\n 0: '0',\n 0.5: '2px',\n 1: '4px',\n 1.5: '6px',\n 2: '8px',\n 2.5: '10px',\n 3: '12px',\n 3.5: '14px',\n 4: '16px',\n 5: '20px',\n 6: '24px',\n 7: '28px',\n 8: '32px',\n 9: '36px',\n 10: '40px',\n 11: '44px',\n 12: '48px',\n 14: '56px',\n 16: '64px',\n 20: '80px',\n 24: '96px',\n 28: '112px',\n 32: '128px',\n 36: '144px',\n 40: '160px',\n 44: '176px',\n 48: '192px',\n 52: '208px',\n 56: '224px',\n 60: '240px',\n 64: '256px',\n 72: '288px',\n 80: '320px',\n 96: '384px',\n },\n },\n },\n};\n\nexport function Tailwind({ children, config }: TailwindProps) {\n const tailwindSetup = useSuspensedPromise(\n () => setupTailwind(config ?? {}),\n JSON.stringify(config, (_key, value) =>\n typeof value === 'function' ? value.toString() : value,\n ),\n );\n let classesUsed: string[] = [];\n\n let mappedChildren: React.ReactNode = mapReactTree(children, (node) => {\n if (React.isValidElement<EmailElementProps>(node)) {\n if (node.props.className) {\n const classes = node.props.className?.split(/\\s+/);\n classesUsed = [...classesUsed, ...classes];\n tailwindSetup.addUtilities(classes);\n }\n }\n\n return node;\n });\n\n const styleSheet = tailwindSetup.getStyleSheet();\n sanitizeStyleSheet(styleSheet);\n\n const { inlinable: inlinableRules, nonInlinable: nonInlinableRules } =\n extractRulesPerClass(styleSheet, classesUsed);\n\n const customProperties = getCustomProperties(styleSheet);\n\n const nonInlineStyles: StyleSheet = {\n type: 'StyleSheet',\n children: new List<CssNode>().fromArray(\n Array.from(nonInlinableRules.values()),\n ),\n };\n sanitizeNonInlinableRules(nonInlineStyles);\n\n const hasNonInlineStylesToApply = nonInlinableRules.size > 0;\n let appliedNonInlineStyles = false as boolean;\n\n mappedChildren = mapReactTree(mappedChildren, (node) => {\n if (React.isValidElement<EmailElementProps>(node)) {\n const elementWithInlinedStyles = cloneElementWithInlinedStyles(\n node,\n inlinableRules,\n nonInlinableRules,\n customProperties,\n );\n\n if (elementWithInlinedStyles.type === 'head') {\n appliedNonInlineStyles = true;\n\n const styleElement = (\n <style\n dangerouslySetInnerHTML={{ __html: generate(nonInlineStyles) }}\n />\n );\n\n return React.cloneElement(\n elementWithInlinedStyles,\n elementWithInlinedStyles.props,\n styleElement,\n elementWithInlinedStyles.props.children,\n );\n }\n\n return elementWithInlinedStyles;\n }\n\n return node;\n });\n\n if (hasNonInlineStylesToApply && !appliedNonInlineStyles) {\n throw new Error(\n `You are trying to use the following Tailwind classes that cannot be inlined: ${Array.from(\n nonInlinableRules.keys(),\n ).join(' ')}.\nFor the media queries to work properly on rendering, they need to be added into a <style> tag inside of a <head> tag.\nThe Tailwind component tried finding a <head> element but was unable to find it.\n\nMake sure that you have a <head> element at some point inside of the <Tailwind> component at any depth. \nThis can also be unmail's <Head> component.`,\n );\n }\n\n return mappedChildren;\n}\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAZ,MAAMC,QAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAZ,MAAMC,QAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAZ,MAAM,MAAM;;;;;;ACUZ,eAAsB,cAAc,QAAwB;CAC1D,MAAM,UAAU;;;;;;CAMhB,MAAM,WAAW,MAAM,QAAQ,SAAS;EACtC,MAAM,WAAW,IAAI,MAAM,cAAc;AACvC,OAAI,iBAAiB,SACnB,QAAO;IACL,MAAM;IACA;IACN,QAAQ;IACT;AAGH,SAAM,IAAI,MACR,0CAA0C,aAAa,GACxD;;EAEH,WAAW;EACX,MAAM,eAAe,IAAI,MAAM;AAC7B,OAAI,OAAO,cACT,QAAO;IACL;IACA,MAAM;IACN,SAASC;IACV;AAGH,OAAI,OAAO,4BACT,QAAO;IACL;IACA,MAAM;IACN,SAASC;IACV;AAGH,OAAI,OAAO,wBACT,QAAO;IACL;IACA,MAAM;IACN,SAASC;IACV;AAGH,OAAI,OAAO,4BACT,QAAO;IACL;IACA,MAAM;IACN,SAASC;IACV;AAGH,SAAM,IAAI,MACR,0EACD;;EAEJ,CAAC;CAEF,IAAIC,QAAc;AAElB,QAAO;EACL,cAAc,SAAS,aAAa,YAA4B;AAC9D,WAAM,SAAS,MAAM,WAAW;;EAElC,eAAe,SAAS,SAAS;AAC/B,UAAO,MAAMA,MAAI;;EAEpB;;;;;ACvDH,MAAa,mBAAmC,EAC9C,OAAO,EACL,QAAQ;CACN,UAAU;EACR,IAAI,CAAC,QAAQ,EAAE,YAAY,QAAQ,CAAC;EACpC,IAAI,CAAC,QAAQ,EAAE,YAAY,QAAQ,CAAC;EACpC,MAAM,CAAC,QAAQ,EAAE,YAAY,QAAQ,CAAC;EACtC,IAAI,CAAC,QAAQ,EAAE,YAAY,QAAQ,CAAC;EACpC,IAAI,CAAC,QAAQ,EAAE,YAAY,QAAQ,CAAC;EACpC,OAAO,CAAC,QAAQ,EAAE,YAAY,QAAQ,CAAC;EACvC,OAAO,CAAC,QAAQ,EAAE,YAAY,QAAQ,CAAC;EACvC,OAAO,CAAC,QAAQ,EAAE,YAAY,QAAQ,CAAC;EACvC,OAAO,CAAC,QAAQ,EAAE,YAAY,KAAK,CAAC;EACpC,OAAO,CAAC,QAAQ,EAAE,YAAY,KAAK,CAAC;EACpC,OAAO,CAAC,QAAQ,EAAE,YAAY,KAAK,CAAC;EACpC,OAAO,CAAC,QAAQ,EAAE,YAAY,KAAK,CAAC;EACpC,OAAO,CAAC,SAAS,EAAE,YAAY,KAAK,CAAC;EACtC;CACD,SAAS;EACP,IAAI;EACJ,GAAG;EACH,IAAK;EACL,GAAG;EACH,KAAK;EACL,GAAG;EACH,KAAK;EACL,GAAG;EACH,KAAK;EACL,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACL;CACF,EACF,EACF;AAED,SAAgB,SAAS,EAAE,UAAU,UAAyB;CAC5D,MAAM,gBAAgB,0BACd,cAAc,UAAU,EAAE,CAAC,EACjC,KAAK,UAAU,SAAS,MAAM,UAC5B,OAAO,UAAU,aAAa,MAAM,UAAU,GAAG,MAClD,CACF;CACD,IAAI,cAAwB,EAAE;CAE9B,IAAI,iBAAkC,aAAa,WAAW,SAAS;AACrE,MAAIC,QAAM,eAAkC,KAAK,EAC/C;OAAI,KAAK,MAAM,WAAW;IACxB,MAAM,UAAU,KAAK,MAAM,WAAW,MAAM,MAAM;AAClD,kBAAc,CAAC,GAAG,aAAa,GAAG,QAAQ;AAC1C,kBAAc,aAAa,QAAQ;;;AAIvC,SAAO;GACP;CAEF,MAAM,aAAa,cAAc,eAAe;AAChD,oBAAmB,WAAW;CAE9B,MAAM,EAAE,WAAW,gBAAgB,cAAc,sBAC/C,qBAAqB,YAAY,YAAY;CAE/C,MAAM,mBAAmB,oBAAoB,WAAW;CAExD,MAAM,kBAA8B;EAClC,MAAM;EACN,UAAU,IAAI,MAAe,CAAC,UAC5B,MAAM,KAAK,kBAAkB,QAAQ,CAAC,CACvC;EACF;AACD,2BAA0B,gBAAgB;CAE1C,MAAM,4BAA4B,kBAAkB,OAAO;CAC3D,IAAI,yBAAyB;AAE7B,kBAAiB,aAAa,iBAAiB,SAAS;AACtD,MAAIA,QAAM,eAAkC,KAAK,EAAE;GACjD,MAAM,2BAA2B,8BAC/B,MACA,gBACA,mBACA,iBACD;AAED,OAAI,yBAAyB,SAAS,QAAQ;AAC5C,6BAAyB;IAEzB,MAAM,eACJ,oBAAC,WACC,yBAAyB,EAAE,QAAQ,SAAS,gBAAgB,EAAE,GAC9D;AAGJ,WAAOA,QAAM,aACX,0BACA,yBAAyB,OACzB,cACA,yBAAyB,MAAM,SAChC;;AAGH,UAAO;;AAGT,SAAO;GACP;AAEF,KAAI,6BAA6B,CAAC,uBAChC,OAAM,IAAI,MACR,gFAAgF,MAAM,KACpF,kBAAkB,MAAM,CACzB,CAAC,KAAK,IAAI,CAAC;;;;;6CAMb;AAGH,QAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unmail/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Unstyled components for creating beautiful emails with React",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"scripts": {
|
|
21
|
-
"build": "tsdown src/index.ts --format esm --dts --external react --external react-dom --external
|
|
22
|
-
"dev": "tsdown src/index.ts --format esm --dts --watch",
|
|
21
|
+
"build": "tsdown src/index.ts --format esm --dts --external react --external react-dom --external html-to-text --external tailwindcss --external marked --external css-tree",
|
|
22
|
+
"dev": "tsdown src/index.ts --format esm --dts --watch --external react --external react-dom --external html-to-text --external tailwindcss --external marked --external css-tree",
|
|
23
23
|
"test": "vitest run",
|
|
24
24
|
"test:watch": "vitest"
|
|
25
25
|
},
|
|
@@ -28,24 +28,22 @@
|
|
|
28
28
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"prismjs": "^1.30.0"
|
|
31
|
+
"css-tree": "^3.1.0",
|
|
32
|
+
"html-to-text": "^9.0.5"
|
|
34
33
|
},
|
|
35
34
|
"optionalDependencies": {
|
|
36
|
-
"css-tree": "^3.1.0",
|
|
37
35
|
"marked": "^15.0.0",
|
|
38
36
|
"tailwindcss": "^4.1.18"
|
|
39
37
|
},
|
|
40
38
|
"devDependencies": {
|
|
41
|
-
"@types/css-tree": "^2.3.10",
|
|
42
39
|
"@types/html-to-text": "^9.0.4",
|
|
43
|
-
"@types/prismjs": "^1.26.6",
|
|
44
40
|
"@types/react": "^19.0.1",
|
|
45
41
|
"@types/react-dom": "^19.0.1",
|
|
46
42
|
"react": "^19.0.0",
|
|
47
43
|
"react-dom": "^19.0.0",
|
|
48
|
-
"tsconfig": "workspace:*"
|
|
44
|
+
"tsconfig": "workspace:*",
|
|
45
|
+
"tsdown": "0.20.3",
|
|
46
|
+
"vite": "7.3.1"
|
|
49
47
|
},
|
|
50
48
|
"publishConfig": {
|
|
51
49
|
"access": "public"
|
package/dist/chunk-Bp6m_JJh.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
//#region rolldown:runtime
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __export = (all) => {
|
|
4
|
-
let target = {};
|
|
5
|
-
for (var name in all) __defProp(target, name, {
|
|
6
|
-
get: all[name],
|
|
7
|
-
enumerable: true
|
|
8
|
-
});
|
|
9
|
-
return target;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
//#endregion
|
|
13
|
-
export { __export as t };
|