{"version":3,"file":"Image.cjs","names":["createVarsResolver","getRadius","polymorphicFactory","useProps","useStyles","Box","classes"],"sources":["../../../src/components/Image/Image.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport {\n  Box,\n  BoxProps,\n  createVarsResolver,\n  getRadius,\n  MantineRadius,\n  polymorphicFactory,\n  PolymorphicFactory,\n  StylesApiProps,\n  useProps,\n  useStyles,\n} from '../../core';\nimport classes from './Image.module.css';\n\nexport type ImageStylesNames = 'root';\nexport type ImageCssVariables = {\n  root: '--image-radius' | '--image-object-fit';\n};\n\nexport interface ImageProps extends BoxProps, StylesApiProps<ImageFactory> {\n  /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default 0 */\n  radius?: MantineRadius;\n\n  /** Controls `object-fit` style @default 'cover' */\n  fit?: React.CSSProperties['objectFit'];\n\n  /** Image url used as a fallback if the image cannot be loaded */\n  fallbackSrc?: string;\n\n  /** Image url */\n  src?: any;\n\n  /** Called when image fails to load */\n  onError?: (event: React.SyntheticEvent<HTMLImageElement, Event>) => void;\n}\n\nexport type ImageFactory = PolymorphicFactory<{\n  props: ImageProps;\n  defaultRef: HTMLImageElement;\n  defaultComponent: 'img';\n  stylesNames: ImageStylesNames;\n  vars: ImageCssVariables;\n}>;\n\nconst varsResolver = createVarsResolver<ImageFactory>((_, { radius, fit }) => ({\n  root: {\n    '--image-radius': radius === undefined ? undefined : getRadius(radius),\n    '--image-object-fit': fit,\n  },\n}));\n\nexport const Image = polymorphicFactory<ImageFactory>((_props) => {\n  const props = useProps('Image', null, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    onError,\n    src,\n    radius,\n    fit,\n    fallbackSrc,\n    mod,\n    attributes,\n    ...others\n  } = props;\n\n  const [error, setError] = useState(!src);\n\n  useEffect(() => setError(!src), [src]);\n\n  const getStyles = useStyles<ImageFactory>({\n    name: 'Image',\n    classes,\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    attributes,\n    vars,\n    varsResolver,\n  });\n\n  if (error && fallbackSrc) {\n    return (\n      <Box\n        component=\"img\"\n        src={fallbackSrc}\n        {...getStyles('root')}\n        onError={onError}\n        mod={['fallback', mod]}\n        {...others}\n      />\n    );\n  }\n\n  return (\n    <Box\n      component=\"img\"\n      {...getStyles('root')}\n      src={src}\n      onError={(event) => {\n        onError?.(event);\n        setError(true);\n      }}\n      mod={mod}\n      {...others}\n    />\n  );\n});\n\nImage.classes = classes;\nImage.varsResolver = varsResolver;\nImage.displayName = '@mantine/core/Image';\n"],"mappings":";;;;;;;;;;;;AA6CA,MAAM,eAAeA,6BAAAA,oBAAkC,GAAG,EAAE,QAAQ,WAAW,EAC7E,MAAM;CACJ,kBAAkB,WAAW,KAAA,IAAY,KAAA,IAAYC,iBAAAA,UAAU,OAAO;CACtE,sBAAsB;CACvB,EACF,EAAE;AAEH,MAAa,QAAQC,4BAAAA,oBAAkC,WAAW;CAChE,MAAM,QAAQC,kBAAAA,SAAS,SAAS,MAAM,OAAO;CAC7C,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,SACA,KACA,QACA,KACA,aACA,KACA,YACA,GAAG,WACD;CAEJ,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAAqB,CAAC,IAAI;AAExC,EAAA,GAAA,MAAA,iBAAgB,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;CAEtC,MAAM,YAAYC,mBAAAA,UAAwB;EACxC,MAAM;EACN,SAAA,qBAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,KAAI,SAAS,YACX,QACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,KAAD;EACE,WAAU;EACV,KAAK;EACL,GAAI,UAAU,OAAO;EACZ;EACT,KAAK,CAAC,YAAY,IAAI;EACtB,GAAI;EACJ,CAAA;AAIN,QACE,iBAAA,GAAA,kBAAA,KAACA,YAAAA,KAAD;EACE,WAAU;EACV,GAAI,UAAU,OAAO;EAChB;EACL,UAAU,UAAU;AAClB,aAAU,MAAM;AAChB,YAAS,KAAK;;EAEX;EACL,GAAI;EACJ,CAAA;EAEJ;AAEF,MAAM,UAAUC,qBAAAA;AAChB,MAAM,eAAe;AACrB,MAAM,cAAc"}