mirror of
https://github.com/supabase/supabase.git
synced 2026-10-14 13:49:09 +03:00
* migrate some www components to tokens * consolidate InteractiveShimmerCard to Panel component * update tokens in blog * update tokens in careers page * update tokens in customers section * update tokens in open-source section * update tokens in Realtime page * update tokens in Storage and Vector * update tokens in SplitCodeBlockCarousel * update tokens in PGCharts * remove unused css files * update tokens in Card * update tokens in Pricing page * clean up priving page imports * remove hardcoded theme vars * migrate first half of defaultTheme.ts to tokens * migrate second half of defaultTheme.ts to tokens * improve inputs * add foreground to text-light and text-lighter * add foreground to text-light and text-lighter * migrate docs components with styling tokens * migrate docs components with styling tokens * fix broken Repos component * fix broken classes in blog * update tokens on Button and other components * update tokens on IconPanel * update studio main layout base styling tokens * update tokens across studio, docs and www * update tokens across studio, docs and www * update ui/Panel to styling tokens * update ExampleProject and TableEditorMenu tokens * www vector page tokens * update studio UI tokens * update other studio UI tokens * update more studio UI tokens * change tokens here, change tokens there * finish updating colors with tokens variables * add gui sandbox for theme experimentation * use common package for www, docs and studio and fix Command K tokens * provide light mode default tokens options * fix conflict leftover * update loading line * fix className typo * fix prettier * update themeSandbox preset default values * fix text-background0 * prettier * update warningBanner with warning color * switch all border-border with border-default * improve border-secondary and foreground-muted in light mode * force ring color on toggle * fix button bg color and border-muted light token * fix input bg color * fix dark button hover * fix homepage product card * fix code-hike table header colors * button dark border * remove tabIndex leftover from homepage main ctas --------- Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com> Co-authored-by: Jonathan Summers-Muir <MildTomato@users.noreply.github.com>
114 lines
4.1 KiB
TypeScript
114 lines
4.1 KiB
TypeScript
import Image from 'next/image'
|
|
import Link from 'next/link'
|
|
import { Partner } from '~/types/partners'
|
|
|
|
export default function TileGrid({
|
|
partners,
|
|
hideCategories = false,
|
|
}: {
|
|
partners: Partner[]
|
|
hideCategories?: boolean
|
|
}) {
|
|
const partnersByCategory: { [category: string]: Partner[] } = {}
|
|
partners.forEach(
|
|
(p) => (partnersByCategory[p.category] = [...(partnersByCategory[p.category] ?? []), p])
|
|
)
|
|
|
|
const featuredPartners = partners.filter((p) => p.featured)
|
|
|
|
return (
|
|
<>
|
|
{featuredPartners.length > 0 ? (
|
|
<div
|
|
key="featured"
|
|
id="featured"
|
|
className={`space-y-8 ${hideCategories ? `pb-8 border-b mb-8` : ''}`}
|
|
>
|
|
<h2 className="h2">Featured</h2>
|
|
<div className="grid grid-cols-1 gap-5 lg:max-w-none lg:grid-cols-2 xl:grid-cols-3">
|
|
{featuredPartners?.map((p) => (
|
|
<Link key={p.slug} href={`/partners/${p.slug}`}>
|
|
<div
|
|
className="
|
|
bg-surface-100
|
|
hover:bg-surface-200
|
|
group flex h-full w-full flex-col rounded-xl border px-6
|
|
py-6 shadow
|
|
transition-all
|
|
hover:shadow-lg"
|
|
>
|
|
<div className="flex w-full space-x-6">
|
|
<div className="relative h-[40px] min-w-[40px] w-[40px] rounded-full overflow-hidden scale-100 transition-all group-hover:scale-110">
|
|
<Image
|
|
layout="fill"
|
|
objectFit="cover"
|
|
className="bg-surface-100"
|
|
src={p.logo}
|
|
alt={p.title}
|
|
/>
|
|
</div>
|
|
<div>
|
|
<h3 className="text-foreground-light group-hover:text-foreground mb-2 text-xl transition-colors">
|
|
{p.title}
|
|
</h3>
|
|
<p
|
|
className="text-foreground-lighter text-sm line-clamp-4 min-h-[80px]"
|
|
title={p.description}
|
|
>
|
|
{p.description}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</Link>
|
|
))}
|
|
</div>
|
|
</div>
|
|
) : null}
|
|
{Object.keys(partnersByCategory).map((category) => (
|
|
<div key={category} id={category.toLowerCase()} className="space-y-8">
|
|
{!hideCategories && <h2 className="h2">{category}</h2>}
|
|
<div className="grid grid-cols-1 gap-5 lg:max-w-none lg:grid-cols-2 xl:grid-cols-3">
|
|
{partnersByCategory[category].map((p) => (
|
|
<Link key={p.slug} href={`/partners/${p.slug}`}>
|
|
<div
|
|
className="
|
|
bg-surface-100
|
|
hover:bg-surface-200
|
|
group flex h-full w-full flex-col rounded-xl border px-6
|
|
py-6 shadow
|
|
transition-all
|
|
hover:shadow-lg"
|
|
>
|
|
<div className="flex w-full space-x-6">
|
|
<div className="relative h-[40px] min-w-[40px] w-[40px] rounded-full overflow-hidden scale-100 transition-all group-hover:scale-110">
|
|
<Image
|
|
layout="fill"
|
|
objectFit="cover"
|
|
className="bg-surface-100"
|
|
src={p.logo}
|
|
alt={p.title}
|
|
/>
|
|
</div>
|
|
<div>
|
|
<h3 className="text-light group-hover:text-foreground mb-2 text-xl transition-colors">
|
|
{p.title}
|
|
</h3>
|
|
<p
|
|
className="text-foreground-lighter text-sm line-clamp-4 min-h-[80px]"
|
|
title={p.description}
|
|
>
|
|
{p.description}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</Link>
|
|
))}
|
|
</div>
|
|
</div>
|
|
))}
|
|
</>
|
|
)
|
|
}
|