{"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"}