Part of #734. Decided: the library exports the component. The "keep the component tier in userland" position does not survive contact with the code — the library already exports Island, Render, RenderChild, Area, AddResources, AddContentButtons, and a component emitting a bare <img> with no class is exactly as style-free as those. Astro ships both tiers (<Image> + headless getImage()).
<Image node={imageNode} alt={t("alt.estate", { estate: title })}
layout="constrained" width={400} className={classes.estateImage} priority />
Out of scope: <Picture> (art direction, format switching) — a second component, later.
Part of #734. Decided: the library exports the component. The "keep the component tier in userland" position does not survive contact with the code — the library already exports
Island,Render,RenderChild,Area,AddResources,AddContentButtons, and a component emitting a bare<img>with no class is exactly as style-free as those. Astro ships both tiers (<Image>+ headlessgetImage()).getImageProps(Library image primitive: buildImageUrl + getImageProps #735): renders<img>, no styling, no wrapper element.loading="lazy"only when both intrinsic dimensions are known (lazy without reserved space causes CLS),priority→loading="eager"+fetchpriority="high".fallbackprop: module static asset rendered whennodeis missing.Imagecollides with design-systemImageat import sites in real modules. DecideImagevsJcrImage/ContentImage.Out of scope:
<Picture>(art direction, format switching) — a second component, later.