{"version":3,"file":"Image.cjs","names":[],"sources":["../../../src/components/Image/Image.tsx"],"sourcesContent":["import type { ImgHTMLAttributes } from \"react\";\nimport { useState } from \"react\";\nimport { cn } from \"@/utils/cn\";\nimport styles from \"./Image.module.css\";\n\nexport interface ImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\"> {\n    /** Primary image source URL. */\n    src: string;\n    /** Fallback source swapped in once if the primary `src` fails to load. */\n    fallback?: string;\n    /** Alternative text describing the image (required for accessibility). */\n    alt: string;\n    /** When true (default) uses native lazy loading; otherwise loads eagerly. */\n    lazy?: boolean;\n}\n\n/**\n * Renders an `<img>` with native lazy loading and a one-shot fallback.\n *\n * On the first load error the source is swapped to `fallback` (when provided),\n * guarded so a failing fallback cannot loop the `onError` handler.\n *\n * @param src - The primary image source URL.\n * @param fallback - Optional source used once when `src` fails to load.\n * @param alt - Accessible alternative text for the image.\n * @param lazy - Whether to use `loading=\"lazy\"` (default `true`).\n * @returns The rendered image element.\n */\nexport function Image({\n    src,\n    fallback,\n    alt,\n    lazy = true,\n    className,\n    onError,\n    ...props\n}: ImageProps) {\n    const [currentSrc, setCurrentSrc] = useState<string>(src);\n    const [usedFallback, setUsedFallback] = useState<boolean>(false);\n\n    return (\n        <img\n            src={currentSrc}\n            alt={alt}\n            loading={lazy ? \"lazy\" : \"eager\"}\n            className={cn(styles.image, className)}\n            onError={(event) => {\n                if (fallback && !usedFallback && currentSrc !== fallback) {\n                    setUsedFallback(true);\n                    setCurrentSrc(fallback);\n                }\n                onError?.(event);\n            }}\n            {...props}\n        />\n    );\n}\n"],"mappings":"4HA4BA,SAAgB,EAAM,CAClB,MACA,WACA,MACA,OAAO,GACP,YACA,UACA,GAAG,GACQ,CACX,GAAM,CAAC,EAAY,IAAA,EAAiB,EAAA,SAAA,CAAiB,CAAG,EAClD,CAAC,EAAc,IAAA,EAAmB,EAAA,SAAA,CAAkB,EAAK,EAE/D,OACI,EAAA,EAAA,IAAA,CAAC,MAAD,CACI,IAAK,EACA,MACL,QAAS,EAAO,OAAS,QACzB,UAAW,EAAA,GAAG,EAAA,QAAO,MAAO,CAAS,EACrC,QAAU,GAAU,CACZ,GAAY,CAAC,GAAgB,IAAe,IAC5C,EAAgB,EAAI,EACpB,EAAc,CAAQ,GAE1B,IAAU,CAAK,CACnB,EACA,GAAI,CACP,CAAA,CAET"}