mirror of
https://github.com/supabase/supabase.git
synced 2026-10-10 11:55:05 +03:00
This PR migrates the whole monorepo to use Tailwind v4: - Removed `@tailwindcss/container-queries` plugin since it's included by default in v4, - Bump all instances of Tailwind to v4. Made minimal changes to the shared config to remove non-supported features (`alpha` mentions), - Migrate all apps to be compatible with v4 configs, - Fix the `typography.css` import in 3 apps, - Add missing rules which were included by default in v3, - Run `pnpm dlx @tailwindcss/upgrade` on all apps, which renames a lot of classes - Rename all misnamed classes according to https://tailwindcss.com/docs/upgrade-guide#renamed-utilities in all apps. --------- Co-authored-by: Jordi Enric <jordi.err@gmail.com>
144 lines
3.6 KiB
TypeScript
144 lines
3.6 KiB
TypeScript
import { cn } from 'ui'
|
|
import { range } from 'lib/helpers'
|
|
|
|
interface Props {
|
|
showHeading?: boolean
|
|
className?: string
|
|
align?: 'left' | 'center'
|
|
maskBackgroundColor?: 'hsl(var(--background-default)' | 'hsl(var(--background-alternative)'
|
|
}
|
|
|
|
const Logos: React.FC<Props> = ({ className, showHeading = true, align = 'center' }) => {
|
|
const gap = 'gap-4 lg:gap-8'
|
|
|
|
return (
|
|
<div className={cn('pb-14 md:pb-24', className)} suppressHydrationWarning>
|
|
<div className="max-w-md md:max-w-lg lg:max-w-2xl mx-auto">
|
|
<div
|
|
className={cn(
|
|
'relative w-full mx-auto max-w-4xl opacity-90 dark:opacity-70',
|
|
'overflow-hidden',
|
|
"before:content[''] before:absolute before:inset-0 before:w-full before:bg-[linear-gradient(to_right,hsl(var(--background-default))_0%,transparent_10%,transparent_90%,hsl(var(--background-default))_100%)] before:z-10",
|
|
'flex flex-nowrap justify-center',
|
|
'px-5 lg:px-12',
|
|
align === 'left' ? 'justify-start ml-0' : 'justify-center',
|
|
gap
|
|
)}
|
|
>
|
|
{range(0, 4).map((_, i) => (
|
|
<LogosRow
|
|
key={`logos-group-${i}`}
|
|
className={cn(
|
|
gap,
|
|
'flex flex-nowrap w-fit',
|
|
'animate-[marquee_90000ms_linear_both_infinite] will-change-transform',
|
|
'motion-reduce:animate-none motion-reduce:will-change-none'
|
|
)}
|
|
/>
|
|
))}
|
|
</div>
|
|
</div>
|
|
{showHeading && (
|
|
<p className="w-full text-center text-sm text-foreground-lighter mt-6 lg:mt-8">
|
|
Trusted by fast-growing companies worldwide
|
|
</p>
|
|
)}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
const logos = [
|
|
{
|
|
image: `/images/logos/publicity/mozilla.svg`,
|
|
alt: 'mozilla',
|
|
name: 'mozilla',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/github.svg`,
|
|
alt: 'github',
|
|
name: 'github',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/1password.svg`,
|
|
alt: '1password',
|
|
name: '1password',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/pwc.svg`,
|
|
alt: 'pwc',
|
|
name: 'pwc',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/pika.svg`,
|
|
alt: 'pika',
|
|
name: 'pika',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/humata.svg`,
|
|
alt: 'humata',
|
|
name: 'humata',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/udio.svg`,
|
|
alt: 'udio',
|
|
name: 'udio',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/langchain.svg`,
|
|
alt: 'langchain',
|
|
name: 'langchain',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/resend.svg`,
|
|
alt: 'resend',
|
|
name: 'resend',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/loops.svg`,
|
|
alt: 'loops',
|
|
name: 'loops',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/mobbin.svg`,
|
|
alt: 'mobbin',
|
|
name: 'mobbin',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/gopuff.svg`,
|
|
alt: 'gopuff',
|
|
name: 'gopuff',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/chatbase.svg`,
|
|
alt: 'chatbase',
|
|
name: 'chatbase',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/betashares.svg`,
|
|
alt: 'betashares',
|
|
name: 'betashares',
|
|
},
|
|
{
|
|
image: `/images/logos/publicity/submagic.svg`,
|
|
alt: 'submagic',
|
|
name: 'submagic',
|
|
},
|
|
]
|
|
|
|
const LogosRow: React.FC<{ className?: string }> = ({ className }) => (
|
|
<div className={cn(className)} suppressHydrationWarning>
|
|
{logos.map((logo) => (
|
|
<div key={`logos-group-${logo.name}`} className="h-12 lg:h-12 w-max inline-block!">
|
|
<img
|
|
src={logo.image}
|
|
alt={logo.alt}
|
|
className={'h-12 lg:h-12 min-h-12! lg:min-h-12! w-auto block'}
|
|
draggable={false}
|
|
/>
|
|
</div>
|
|
))}
|
|
</div>
|
|
)
|
|
|
|
export default Logos
|