1- import React , { useEffect , useState } from " react" ;
1+ import React , { useEffect , useState } from ' react' ;
22
33export function useMediaValues (
44 medias : number [ ] | undefined ,
@@ -36,27 +36,28 @@ export function useMediaValues(
3636
3737 // Apply Listeners
3838 for ( const mediaQuery of mediaQueries ) {
39- mediaQuery . addEventListener ( " change" , onSizeChange ) ;
39+ mediaQuery . addEventListener ( ' change' , onSizeChange ) ;
4040 }
4141
4242 return ( ) => {
4343 for ( const mediaQuery of mediaQueries ) {
44- mediaQuery . removeEventListener ( " change" , onSizeChange ) ;
44+ mediaQuery . removeEventListener ( ' change' , onSizeChange ) ;
4545 }
4646 } ;
4747 } , [ values . columns , values . gap ] ) ;
4848
4949 return values ;
5050}
5151
52- export type MasonryProps < T > = React . ComponentPropsWithoutRef < " div" > & {
52+ export type MasonryProps < T > = React . ComponentPropsWithoutRef < ' div' > & {
5353 items : T [ ] ;
5454 render : ( item : T , idx : number ) => React . ReactNode ;
5555 config : {
5656 columns : number | number [ ] ;
5757 gap : number | number [ ] ;
5858 media ?: number [ ] ;
5959 } ;
60+ as ?: React . ElementType ;
6061} ;
6162
6263export function createSafeArray ( data : number | number [ ] ) {
@@ -67,6 +68,7 @@ export function Masonry<T>({
6768 items = [ ] ,
6869 render,
6970 config,
71+ as : Component = 'div' ,
7072 ...rest
7173} : MasonryProps < T > ) {
7274 const { columns, gap } = useMediaValues (
@@ -81,11 +83,11 @@ export function Masonry<T>({
8183 const dataColumns = createDataColumns < T > ( chunks , columns ) ;
8284
8385 return (
84- < div
86+ < Component
8587 { ...rest }
8688 style = { {
87- display : " grid" ,
88- alignItems : " start" ,
89+ display : ' grid' ,
90+ alignItems : ' start' ,
8991 gridColumnGap : gap ,
9092 gridTemplateColumns : `repeat(${ columns } , minmax(0, 1fr))` ,
9193 } }
@@ -95,7 +97,7 @@ export function Masonry<T>({
9597 { column . map ( ( item , idx ) => render ( item , idx ) ) }
9698 </ MasonryRow >
9799 ) ) }
98- </ div >
100+ </ Component >
99101 ) ;
100102}
101103
@@ -109,9 +111,9 @@ export function MasonryRow({
109111 return (
110112 < div
111113 style = { {
112- display : " grid" ,
114+ display : ' grid' ,
113115 rowGap : gap ,
114- gridTemplateColumns : " minmax(0, 1fr)" ,
116+ gridTemplateColumns : ' minmax(0, 1fr)' ,
115117 } }
116118 >
117119 { children }
0 commit comments