Masonry layout
The Masonry component arranges children in a responsive multi-column layout. Items flow top-to-bottom, then left-to-right, with columns automatically adapting to container width.
Props:
columns-- maximum number of columns (default: 3)gap-- space between columns and items; accepts CSS lengths or theme tokens like$space-3(default: "16px")columnGap-- overridesgapfor horizontal spacing between columnsrowGap-- overridesgapfor vertical spacing between itemsminColumnWidth-- minimum column width before reducing columns (default: "250px")
Basic: colored boxes with varying heights
<App>
<Masonry columns="4" gap="$space-3" minColumnWidth="150px">
<Card padding="$space-2" backgroundColor="$color-primary-100" height="120px">
<Text>Card 1 -- short</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-success-100" height="200px">
<Text>Card 2 -- tall</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-warn-100" height="160px">
<Text>Card 3 -- medium</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-danger-100" height="100px">
<Text>Card 4 -- short</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-info-100" height="240px">
<Text>Card 5 -- very tall</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-secondary-100" height="140px">
<Text>Card 6 -- medium</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-primary-200" height="180px">
<Text>Card 7 -- tall</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-success-200" height="110px">
<Text>Card 8 -- short</Text>
</Card>
</Masonry>
</App><App>
<Masonry columns="4" gap="$space-3" minColumnWidth="150px">
<Card padding="$space-2" backgroundColor="$color-primary-100" height="120px">
<Text>Card 1 -- short</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-success-100" height="200px">
<Text>Card 2 -- tall</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-warn-100" height="160px">
<Text>Card 3 -- medium</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-danger-100" height="100px">
<Text>Card 4 -- short</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-info-100" height="240px">
<Text>Card 5 -- very tall</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-secondary-100" height="140px">
<Text>Card 6 -- medium</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-primary-200" height="180px">
<Text>Card 7 -- tall</Text>
</Card>
<Card padding="$space-2" backgroundColor="$color-success-200" height="110px">
<Text>Card 8 -- short</Text>
</Card>
</Masonry>
</App>Content cards: simulated event listings
<App>
<Masonry columns="3" gap="$space-4" rowGap="0" minColumnWidth="250px">
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Jazz in the Park</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">March 22, 2026 · 7:00 PM</Text>
<Text>Enjoy an evening of live jazz under the stars at Juilliard Park. Bring a blanket and a picnic.</Text>
</VStack>
</Card>
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Farmers Market Opening Day</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">April 1, 2026 · 9:00 AM</Text>
<Text>The weekly farmers market kicks off its spring season with over 50 local vendors, live music, and cooking demonstrations featuring seasonal produce.</Text>
</VStack>
</Card>
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Art Walk</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">March 28, 2026 · 5:00 PM</Text>
<Text>Downtown galleries open their doors for a self-guided art walk.</Text>
</VStack>
</Card>
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Community Cleanup Day</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">April 5, 2026 · 8:00 AM</Text>
<Text>Join neighbors for a morning of park cleanup and trail maintenance. Gloves and bags provided. Coffee and donuts afterwards.</Text>
</VStack>
</Card>
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Spring Concert Series</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">April 12, 2026 · 6:30 PM</Text>
<Text>The beloved local band returns for the first show of the spring concert series at the amphitheater.</Text>
</VStack>
</Card>
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Book Sale</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">March 30, 2026 · 10:00 AM</Text>
<Text>Library book sale -- thousands of used books, DVDs, and vinyl records. All proceeds support library programs.</Text>
</VStack>
</Card>
</Masonry>
</App><App>
<Masonry columns="3" gap="$space-4" rowGap="0" minColumnWidth="250px">
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Jazz in the Park</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">March 22, 2026 · 7:00 PM</Text>
<Text>Enjoy an evening of live jazz under the stars at Juilliard Park. Bring a blanket and a picnic.</Text>
</VStack>
</Card>
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Farmers Market Opening Day</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">April 1, 2026 · 9:00 AM</Text>
<Text>The weekly farmers market kicks off its spring season with over 50 local vendors, live music, and cooking demonstrations featuring seasonal produce.</Text>
</VStack>
</Card>
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Art Walk</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">March 28, 2026 · 5:00 PM</Text>
<Text>Downtown galleries open their doors for a self-guided art walk.</Text>
</VStack>
</Card>
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Community Cleanup Day</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">April 5, 2026 · 8:00 AM</Text>
<Text>Join neighbors for a morning of park cleanup and trail maintenance. Gloves and bags provided. Coffee and donuts afterwards.</Text>
</VStack>
</Card>
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Spring Concert Series</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">April 12, 2026 · 6:30 PM</Text>
<Text>The beloved local band returns for the first show of the spring concert series at the amphitheater.</Text>
</VStack>
</Card>
<Card padding="$space-3">
<VStack gap="$space-1">
<Text fontWeight="bold">Book Sale</Text>
<Text fontSize="$fontSize-small" color="$textColor-secondary">March 30, 2026 · 10:00 AM</Text>
<Text>Library book sale -- thousands of used books, DVDs, and vinyl records. All proceeds support library programs.</Text>
</VStack>
</Card>
</Masonry>
</App>