useImageMode @astryx-svelte/core v0.3.0 · hooks
Usage
Detects whether an image is predominantly dark or light by sampling pixels via OffscreenCanvas. Uses APCA perceptual lightness (sRGB linearization + power curve) for accurate detection, especially on saturated colors. Runs entirely off the paint path: no visible canvas, no layout thrash. Supports regional sampling for detecting luminance where text overlays will appear. Returns null while loading and falls back gracefully on CORS or network errors.tsimport { hooks } from '@astryx-svelte/core/hooks';
Best practices
| Guidance | Practices |
|---|---|
| Do | Pair with MediaTheme to automatically adapt text color over dynamic background images. |
| Do | Use the region option to sample only the area where text overlays will appear for more accurate results. |
| Don't | Use for images that change rapidly (e.g., video frames); each src change triggers a new fetch and analysis. |
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
src Required | () => string | null | — | Image source URL to analyze. When null/undefined, returns the fallback value. |
options | () => UseImageModeOptions | — | Optional configuration for image analysis. |
options.region | ImageSampleRegion | — | Region to sample within the image using normalized 0-1 coordinates ({ x, y, width, height }). Defaults to the full image. |
options.threshold | number | 0.5 | Luminance threshold for the dark/light split. Below = dark, above = light. |
options.fallback | 'dark' | 'light' | null | Fallback value while loading or on error. |
Returns
| Field | Type | Default | Description |
|---|---|---|---|
mode | 'dark' | 'light' | — | Detected luminance mode of the image. Returns null while loading or if src is null/undefined. |