{"version":3,"file":"index.mjs","names":["mergedStyles: MarginStyles","styles: MarginStyles"],"sources":["../src/utils/spaces.ts","../src/heading.tsx"],"sourcesContent":["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 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\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  // Check to ensure string value is a valid number\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","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"],"mappings":";;;;AAqBA,MAAa,cAAc,UAAgC;CACzD,MAAM,aAAa;EACjB,UAAU,MAAM,GAAG,CAAC,SAAS,CAAC;EAC9B,UAAU,MAAM,IAAI,CAAC,cAAc,cAAc,CAAC;EAClD,UAAU,MAAM,IAAI,CAAC,aAAa,eAAe,CAAC;EAClD,UAAU,MAAM,IAAI,CAAC,YAAY,CAAC;EAClC,UAAU,MAAM,IAAI,CAAC,cAAc,CAAC;EACpC,UAAU,MAAM,IAAI,CAAC,eAAe,CAAC;EACrC,UAAU,MAAM,IAAI,CAAC,aAAa,CAAC;EACpC;CAED,MAAMA,eAA6B,EAAE;AAErC,MAAK,MAAM,SAAS,WAClB,KAAI,OAAO,KAAK,MAAM,CAAC,SAAS,EAC9B,QAAO,OAAO,cAAc,MAAM;AAItC,QAAO;;AAGT,MAAa,aACX,OACA,eACG;CACH,MAAMC,SAAuB,EAAE;AAE/B,KAAI,UAAU,OACZ,QAAO;AAIT,KAAI,OAAO,MAAM,OAAO,WAAW,OAAO,MAAM,CAAC,CAAC,CAChD,QAAO;AAGT,MAAK,MAAM,YAAY,WACrB,QAAO,YAAY,GAAG,MAAM;AAG9B,QAAO;;;;;ACtDT,MAAa,UAAU,MAAM,YAKzB,EAAE,IAAI,MAAM,MAAM,UAAU,OAAO,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAI,GAAG,SACjE,QACG;AACH,QACE,oBAAC;EACC,GAAI;EACC;EACL,OAAO;GAAE,GAAG,WAAW;IAAE;IAAG;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI,CAAC;GAAE,GAAG;GAAO;EAEhE;GACG;EAGX;AAED,QAAQ,cAAc"}