Files
supabase__supabase/apps/studio/components/interfaces/Integrations/Integration/ConnectedResourceGroupSection.tsx
Danny White 476d4a5851 refactor(ui): drop redundant Button variant="default" props (#50161)
## What kind of change does this PR introduce?

Mechanical cleanup on top of the Button default-variant change (#50160).

## What is the current behavior?

Many callsites still pass `variant="default"` even though that is now
the component default.

## What is the new behavior?

Removes redundant static `variant="default"` from legacy `Button` and
`ButtonTooltip` callsites. Keeps explicit defaults where they document
the API:

- `button-default.tsx` and `button-sizes.tsx` demos
- `DocsButton`, which pins neutral styling at the wrapper boundary

## To test

Studio:

- [Auth → Rate
Limits](https://studio-staging-2s957kwc4-supabase.vercel.app/dashboard/project/_/auth/rate-limits):
dirty the form so Cancel appears; Cancel stays neutral, Save stays green
- [Project Settings → API
Keys](https://studio-staging-2s957kwc4-supabase.vercel.app/dashboard/project/_/settings/api-keys):
`DocsButton` in the header actions stays neutral

Design system:

- [Design system →
Button](https://design-system-git-dnywh-dc924ac1-supabase.vercel.app/design-system/docs/components/button):
`button-default` / `button-sizes` still show explicit default styling;
Primary (green) is restricted to the Primary section (and `asChild`)

WWW:

- [www → Brand
assets](https://zone-www-dot-com-git-dnywh-dc924ac1-supabase.vercel.app/brand-assets):
Download logo kit / Download button kit stay neutral
2026-09-11 17:05:26 +10:00

90 lines
3.1 KiB
TypeScript

import { Settings, Trash2, TriangleAlert } from 'lucide-react'
import Link from 'next/link'
import { Badge, Button } from 'ui'
import { Admonition } from 'ui-patterns/Admonition'
import { type ResourceGroup } from './MarketplaceIntegrationSettingsTab.types'
import { type ConnectedResource } from '@/components/interfaces/Integrations/Landing/Landing.utils'
export const ResourceGroupSection = ({
group,
onRemove,
}: {
group: ResourceGroup
onRemove: (resource: ConnectedResource) => void
}) => {
return (
<section className="flex flex-col gap-y-4 border-b py-8 first:pt-0 last:border-b-0">
<div className="flex flex-col gap-y-2">
<div className="flex items-center gap-x-2">
<h3 className="text-base text-foreground">{group.title}</h3>
{group.missing ? (
<Badge variant="warning" className="gap-x-1.5">
<TriangleAlert size={12} strokeWidth={1.5} />
Not connected
</Badge>
) : (
group.badge && (
<Badge variant="success" className="gap-x-1.5">
<span className="h-1.5 w-1.5 rounded-full bg-brand" />
{group.badge}
</Badge>
)
)}
</div>
<p className="text-sm text-foreground-light max-w-2xl">{group.description}</p>
</div>
<Admonition
type={group.missing ? 'warning' : 'default'}
className="m-0 max-w-2xl"
title={group.missing ? 'This resource is missing' : undefined}
>
{group.missing ? group.missingNote : group.note}
</Admonition>
{group.missing ? (
group.manageAction && (
<div className="max-w-2xl">
<Button asChild icon={<Settings />}>
<Link href={group.manageAction.href}>{group.manageAction.label}</Link>
</Button>
</div>
)
) : (
<div className="max-w-2xl divide-y rounded-md border bg-surface-100">
{group.items.map((item) => (
<div
key={item.resource.key}
className="flex items-center justify-between gap-x-4 px-4 py-3"
>
<div className="flex min-w-0 flex-col">
<code
className="truncate font-mono text-sm text-foreground"
title={item.identifier}
>
{item.identifier}
</code>
{item.meta && <span className="text-xs text-foreground-lighter">{item.meta}</span>}
</div>
<div className="flex shrink-0 items-center gap-x-2">
{group.manageAction && (
<Button asChild icon={<Settings />}>
<Link href={group.manageAction.href}>{group.manageAction.label}</Link>
</Button>
)}
<Button
icon={<Trash2 className="text-foreground-light" />}
onClick={() => onRemove(item.resource)}
>
Remove
</Button>
</div>
</div>
))}
</div>
)}
</section>
)
}