Files
supabase/apps/www/components/Pricing/ComputePricingTable.tsx
Danny White ec53175b8a refactor(ui): rename text-brand to text-primary (#50564)
## What kind of change does this PR introduce?

Refactor. Follow-up to #49871.

## What is the current behavior?

Branded (green) text still uses the `text-brand` classname while the
colour comes from `--primary`.

## What is the new behavior?

**Rename-only:** `text-brand` → `text-primary` across callsites and
docs. Leftover `bg-brand` / `border-brand` alias to `brand-default`. No
intentional colour changes in this PR.

This better matches how we treat our green in other components and
props, like `variant="primary"` for green buttons.

## To test

On light mode: smoke-test that branded text still looks like #49871
(readable green, not the bright fill).

-
[Homepage](https://zone-www-dot-com-git-dnywh-depr-316-text-brand-de2380-supabase.vercel.app/):
“Scale to millions” uses `text-primary`
- [Docs
homepage](https://docs-git-dnywh-depr-316-text-brand-to-primary-supabase.vercel.app/docs):
branded links like “More on self-hosting” are still readable
- [Typography
docs](https://design-system-git-dnywh-depr-316-text-brand-to-primary-supabase.vercel.app/design-system/docs/typography):
documents `text-primary`
- [Colour
usage](https://design-system-git-dnywh-depr-316-text-brand-to-primary-supabase.vercel.app/design-system/docs/color-usage):
`text-primary` is visibly darker than `bg-brand-default` _on light mode_
- [Studio auth
providers](https://studio-staging-git-dnywh-depr-316-text-brand-to-60fa6c-supabase.vercel.app/dashboard/project/_/auth/providers):
enabled provider badge text readable; status dot stays bright green

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Style**
* Updated branded text, link hover states, icons, badges, indicators,
and highlighted content across the Design System, Docs, Studio, Learn,
UI Library, and marketing experiences to use the primary theme color.
* Updated syntax highlighting and table-of-contents styling for
consistent primary-color presentation.
  * Refined brand color fallback behavior for bright fills and borders.

* **Documentation**
* Updated color-usage and typography guidance to recommend the primary
text utility.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-09-22 16:19:03 +10:00

102 lines
3.2 KiB
TypeScript

import pricingAddOn from '~/data/PricingAddOnTable.json'
import Link from 'next/link'
import { Fragment, useMemo } from 'react'
import { cn } from 'ui'
const ComputePricingTable = () => {
const columnNames = useMemo(
() =>
pricingAddOn.database.rows.map((row) =>
row.columns.map((column) => ({ key: column.key, title: column.title }))
)[0],
[]
)
return (
<>
<div className="p-5">
<table className="text-foreground m-0 hidden w-full table-auto overflow-hidden rounded-b lg:table text-xs">
<thead>
<tr>
{columnNames.map((column) => (
<th key={column.key} className="p-3 text-left font-medium">
{column.title}
</th>
))}
</tr>
</thead>
<tbody>
{pricingAddOn.database.rows.map((row, i) => (
<Fragment key={`row-${i}`}>
{i === 0 && (
<tr>
<td className="pb-1 bg-border-strong px-3 py-1 -mr-1 border-l-4 border-strong">
<span>First instance is free on paid plans</span>
</td>
</tr>
)}
<tr
key={i}
className={cn(
i % 2 === 0 ? 'bg-surface-100 rounded-lg' : '',
i === 0 ? 'border-4 border-strong' : ''
)}
>
{row.columns.map((column) => (
<td
key={column.key}
className="p-3"
translate={column.key === 'pricing' ? 'no' : undefined}
>
{column.url ? (
<Link
href={column.url}
className="underline text-primary hover:text-brand-600"
target="_blank"
>
{column.value}
</Link>
) : (
column.value
)}
</td>
))}
</tr>
</Fragment>
))}
</tbody>
</table>
</div>
<table className="text-foreground m-0 -mt-20 lg:mt-0 w-full table-auto overflow-hidden rounded-b lg:hidden text-xs">
<tbody>
{pricingAddOn.database.rows.map((row, i) => (
<Fragment key={i}>
{row.columns.map((column) => (
<tr key={column.key}>
<th
className={`py-3 pl-4 text-left font-medium ${
column.key === 'plan' ? 'pt-16 lg:pt-3' : ''
}`}
>
{column.title}
</th>
<td
className={`px-4 py-3 ${
column.key === 'plan' ? 'text-primary pt-16 lg:pt-3' : ''
}`}
>
{column.value}
</td>
</tr>
))}
</Fragment>
))}
</tbody>
</table>
</>
)
}
export default ComputePricingTable