@react-email/text
Version:
A block of text separated by blank spaces
1 lines • 5.32 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","names":["result: MarginResult","defaultMargins: React.CSSProperties"],"sources":["../src/utils/compute-margins.ts","../src/text.tsx"],"sourcesContent":["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\n/**\n * Parses all the values out of a margin string to get the value for all margin props in the four margin properties\n * @example e.g. \"10px\" =\\> mt: \"10px\", mr: \"10px\", mb: \"10px\", ml: \"10px\"\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 /**\n * we do this clunky way of spreading these default margins because\n * if we were to simply spread, the ordering of the margins would be lost\n *\n * ex:\n * ```js\n * { ...{ marginTop: '16px', marginBottom: '16px' }, ...{ marginTop: '24px' } }\n * // would result in\n * { marginTop: '24px', marginBottom: '16px' }\n * // not the expected\n * { marginBottom: '16px', marginTop: '24px' }\n * ```\n */\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"],"mappings":";;;;AAiBA,SAAS,iBAAiB,OAAiC;AACzD,KAAI,OAAO,UAAU,SACnB,QAAO;EACL,WAAW;EACX,cAAc;EACd,YAAY;EACZ,aAAa;EACd;AAEH,KAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,SAAS,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,MAAM;AAEnD,MAAI,OAAO,WAAW,EACpB,QAAO;GACL,WAAW,OAAO;GAClB,cAAc,OAAO;GACrB,YAAY,OAAO;GACnB,aAAa,OAAO;GACrB;AAGH,MAAI,OAAO,WAAW,EACpB,QAAO;GACL,WAAW,OAAO;GAClB,aAAa,OAAO;GACpB,cAAc,OAAO;GACrB,YAAY,OAAO;GACpB;AAGH,MAAI,OAAO,WAAW,EACpB,QAAO;GACL,WAAW,OAAO;GAClB,aAAa,OAAO;GACpB,cAAc,OAAO;GACrB,YAAY,OAAO;GACpB;AAGH,MAAI,OAAO,WAAW,EACpB,QAAO;GACL,WAAW,OAAO;GAClB,aAAa,OAAO;GACpB,cAAc,OAAO;GACrB,YAAY,OAAO;GACpB;;AAIL,QAAO;EACL,WAAW;EACX,cAAc;EACd,YAAY;EACZ,aAAa;EACd;;;;;;AAOH,SAAgB,eAAe,YAA4C;CACzE,IAAIA,SAAuB;EACzB,WAAW;EACX,aAAa;EACb,cAAc;EACd,YAAY;EACb;AAED,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,WAAW,CACnD,KAAI,QAAQ,SACV,UAAS,iBAAiB,MAAM;UACvB,QAAQ,YACjB,QAAO,YAAY;UACV,QAAQ,cACjB,QAAO,cAAc;UACZ,QAAQ,eACjB,QAAO,eAAe;UACb,QAAQ,aACjB,QAAO,aAAa;AAIxB,QAAO;;;;;AC/FT,MAAa,OAAO,MAAM,YACvB,EAAE,MAAO,GAAG,SAAS,QAAQ;;;;;;;;;;;;;;CAc5B,MAAMC,iBAAsC,EAAE;AAC9C,KAAI,OAAO,cAAc,OACvB,gBAAe,YAAY;AAE7B,KAAI,OAAO,iBAAiB,OAC1B,gBAAe,eAAe;CAEhC,MAAM,UAAU,eAAe;EAC7B,GAAG;EACH,GAAG;EACJ,CAAC;AAEF,QACE,oBAAC;EACC,GAAI;EACC;EACL,OAAO;GACL,UAAU;GACV,YAAY;GACZ,GAAG;GACH,GAAG;GACJ;GACD;EAGP;AAED,KAAK,cAAc"}