@@ -3,9 +3,11 @@ import { ssr as ssrHtml, isServer } from "solid-js/web";
33import type { StartImageSource , StartImageTransformer , StartImageVariant } from "./types" ;
44
55export interface ImageProps < T > {
6- src : StartImageSource < T > ;
6+ src : {
7+ src : StartImageSource < T >
8+ transformer ?: StartImageTransformer < T >
9+ }
710 alt : string ;
8- transformer ?: StartImageTransformer < T > ;
911 fallback ?: ( visible : ( ) => boolean , onLoad : ( ) => void ) => JSX . Element ;
1012}
1113
@@ -25,13 +27,13 @@ function mergeImageVariantsToSrcSet(variants: StartImageVariant[]) {
2527
2628export function Image < T > ( props : ImageProps < T > ) : JSX . Element {
2729 if ( isServer ) {
28- const variants = props . transformer
29- ? props . transformer . transform ( props . src )
30+ const variants = props . src . transformer
31+ ? props . src . transformer . transform ( props . src . src )
3032 : [ ] ;
3133 const variantArray = Array . isArray ( variants ) ? variants : [ variants ] ;
3234
3335 let html = `<div data-start-image="container">` ;
34- html += `<div data-start-image="aspect-ratio" style="position:relative;padding-top:${ ( props . src . height * 100 ) / props . src . width } %;width:100%;height:0;overflow:hidden;">` ;
36+ html += `<div data-start-image="aspect-ratio" style="position:relative;padding-top:${ ( props . src . src . height * 100 ) / props . src . src . width } %;width:100%;height:0;overflow:hidden;">` ;
3537 html += `<picture data-start-picture="picture">` ;
3638
3739 if ( variantArray . length > 0 ) {
@@ -42,7 +44,7 @@ export function Image<T>(props: ImageProps<T>): JSX.Element {
4244 }
4345 }
4446
45- html += `<img data-start-image="image" src="${ props . src . source } " alt="${ props . alt } " style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;"/>` ;
47+ html += `<img data-start-image="image" src="${ props . src . src . source } " alt="${ props . alt } " style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain;"/>` ;
4648 html += `</picture></div></div>` ;
4749
4850 return ssrHtml ( html ) as unknown as JSX . Element ;
@@ -54,15 +56,15 @@ export function Image<T>(props: ImageProps<T>): JSX.Element {
5456 data-start-image = "aspect-ratio"
5557 style = { {
5658 position : "relative" ,
57- "padding-top" : `${ ( props . src . height * 100 ) / props . src . width } %` ,
59+ "padding-top" : `${ ( props . src . src . height * 100 ) / props . src . src . width } %` ,
5860 width : "100%" ,
5961 height : "0" ,
6062 overflow : "hidden" ,
6163 } }
6264 >
6365 < picture data-start-picture = "picture" >
64- { props . transformer && ( ( ) => {
65- const variants = props . transformer ! . transform ( props . src ) ;
66+ { props . src . transformer && ( ( ) => {
67+ const variants = props . src . transformer ! . transform ( props . src . src ) ;
6668 const variantArray = Array . isArray ( variants ) ? variants : [ variants ] ;
6769 const merged = mergeImageVariantsByType ( variantArray ) ;
6870 return Array . from ( merged ) . map ( ( [ type , vars ] ) => (
@@ -74,7 +76,7 @@ export function Image<T>(props: ImageProps<T>): JSX.Element {
7476 } ) ( ) }
7577 < img
7678 data-start-image = "image"
77- src = { props . src . source }
79+ src = { props . src . src . source }
7880 alt = { props . alt }
7981 style = { {
8082 position : "absolute" ,
0 commit comments