2.4 KiB
2.4 KiB
OpenSpec Change: enterprise-react-image
- Change ID: enterprise-react-image
- Package:
@suaveplan/react-image - Category: react
- Target path:
react/media/react-image - Status: PROPOSED
- Date: 2026-04-24
- Reference spec:
/mnt/s/web/suaveplan/enterprise/react-image.md
Summary
Deliver @suaveplan/react-image on genesis from scratch at enterprise quality. Zero-external-runtime React image UI library: base Image (lazy, blurhash, skeleton, srcSet), Avatar/AvatarGroup (initials fallback, status), ImageComparison (slider), ImageCropper (drag handles), ImageFilter (CSS filter presets), ImageGallery (masonry), ImageMagnifier, ImageOverlay, ImagePlaceholder, Lightbox (thumbnails, controls), ZoomImage. Supporting hooks: useImageLoader, useImagePreloader, useImageDimensions, useImageColor, useLightbox. Utils: blurhashToDataURL, decodeBlurhash, getFilterCSS.
Current-state audit (genesis)
Package does not exist on genesis — fresh build.
Available workspace deps on genesis
| Package | Role |
|---|---|
@suaveplan/error (workspace:^) |
ImageError |
@suaveplan/react-translate (workspace:^) |
i18n |
zod (catalog:forms) |
Image config schemas |
@opentelemetry/api (catalog:observability) |
image.load span |
External: tslib catalog:build. React 18 peer.
Public API surface
11 components, 5 hooks, 3 utils — all listed in Summary above.
New additions for genesis
ImageError— codes:IMAGE_LOAD_FAILED,IMAGE_DECODE_FAILED,IMAGE_CROP_INVALID.- OTel
image.loadspan — attributes:image.src,image.format. - Stories — every component with default, loading, error, interactive, playground.
- Playwright E2E —
Imagelazy-loads on scroll;ImageCropperdrag handles;Lightboxkeyboard navigation.
File layout
react/media/react-image/
package.json
tsconfig.json
vitest.config.ts
src/
index.ts
components/
image/ avatar/ image-comparison/ image-cropper/
image-filter/ image-gallery/ image-magnifier/
image-overlay/ image-placeholder/ lightbox/ zoom-image/
hooks/
use-image-loader/ use-image-preloader/ use-image-dimensions/
use-image-color/ use-lightbox/
utils/
blurhash/ filter-presets/
types/
e2e/
image.spec.ts