Back to Supabase

Tailwind theming

packages/ui/tailwind-theming.md

1.26.044.3 KB
Original Source

Tailwind theming

Supabase is migrating to use tailwind classes that use CSS properties. This is to support the concept of theming, so that:

  1. It is easy for the team to update the theme without changing 100s of files.
  2. We could offer custom or additional themes in future.

Primitives

We (the Supabase Design team ✨) define primitive color values using Figma Variables.

  • foreground
  • background
  • border
  • brand (could become primary)
  • destructive
  • warning

These values are exported from Figma as a .json file and transformed into tailwind utilities through some scripts under packages/ui/internals/tokens.

Primitives work the same way as any other color. They should follow some basic usage patterns such as foreground on text and background on surfaces, but they can also be combined with any tailwind utility to achieve more advanced layouts.

For example, foreground-light can also be applied on borders and backgrounds as border-foreground-light and bg-foreground-light, if needed.

Similarly, background and border primitives can be used on other tailwind utilities.

border-surface-100
bg-border-overlay
text-background-surface-100

Usage

The following tailwind classes are a combination of tailwind utilities and our primitives. They're under development and are likely to change but most are now in use and will probably be permanent fixtures.

Foreground (Text)

ValueUsage
foreground-{DEFAULT}Default text (DEFAULT is optional)
foreground-lightLight text
foreground-lighterLighter text
foreground-mutedMuted text

Examples:

text-foreground
text-foreground-light
text-foreground-lighter
text-foreground-muted
bg-foreground-light

Background

ValueUsage
{background}-{DEFAULT}Main body background (DEFAULT is optional)
{background}-surface-100Panels and surfaces on the same level of the main background
{background}-surface-200Surfaces that overlap the main content (ex. dropdowns)
{background}-surface-300Surfaces that are stacked above {background}-surface-200
{background}-alternativeAlternative background (inverted)
{background}-overlayOverlays, Dropdowns, Popovers
{background}-controlInputs, Radios, Checkboxes
{background}-button-{DEFAULT}Button default

The background part can be omitted when used on the bg tailwind utility.

Examples:

bg-surface-100
bg-overlay
bg-alternative
text-background-surface-100

Border

ValueUsage
border-{DEFAULT}Default border (DEFAULT is optional)
border-secondarySecondary border
border-alternativeAlternative border (inverted)
border-overlayOverlays, Dropdowns, Popovers
border-controlInputs, Radios, Checkboxes
border-strongHover, Focus
border-strongerHighlighted border
border-button-{DEFAULT}Button default border
border-button-hoverButton default border hover

Examples:

border-overlay
border-alternative
text-border-control

Brand

Value
200
300
400
500
DEFAULT
600
button

Destructive

Value
200
300
400
500
DEFAULT
600

Warning

Value
200
300
400
500
DEFAULT
600