Skip to content

Getting Started with Gea UI

Installation

bash
npm install @geajs/ui

@geajs/ui requires @geajs/core as a peer dependency:

bash
npm install @geajs/core

Tailwind CSS Setup

@geajs/ui uses Tailwind CSS v4 for styling. The theme CSS that ships with the library sets up Tailwind and all design tokens.

1. Install Tailwind and its Vite plugin

bash
npm install -D tailwindcss @tailwindcss/vite

Add the plugin to your vite.config.ts:

ts
import tailwindcss from '@tailwindcss/vite'
import { defineConfig } from 'vite'

export default defineConfig({
  plugins: [tailwindcss()],
})

2. Import the Theme CSS

Import the theme stylesheet once in your entry point. It sets up Tailwind, all semantic color tokens, and dark mode support:

ts
// main.ts
import '@geajs/ui/style.css'

3. (Optional) Extend with Your Own CSS

If you need additional Tailwind utilities or custom styles, create a CSS file and import it after the theme:

css
/* src/style.css */
/* your custom theme extensions or utilities */
ts
// main.ts
// make sure the theme is imported first
import '@geajs/ui/style.css'
import './style.css'

You don't have to @import "tailwindcss"; in your CSS file, it is already loaded by the theme.

Minimal Example

tsx
import { Component } from '@geajs/core'
import { Button, Card, CardHeader, CardTitle, CardContent } from '@geajs/ui'
import '@geajs/ui/style.css'

export default class App extends Component {
  template() {
    return (
      <Card>
        <CardHeader>
          <CardTitle>Welcome</CardTitle>
        </CardHeader>
        <CardContent>
          <p>Your Gea UI setup is working.</p>
          <Button>Get Started</Button>
        </CardContent>
      </Card>
    )
  }
}

The cn Utility

@geajs/ui exports a cn helper that merges class names with clsx and tailwind-merge. Use it when you need to conditionally compose Tailwind classes without conflicts:

tsx
import { cn } from '@geajs/ui'

const classes = cn(
  'px-4 py-2 rounded',
  isActive && 'bg-primary text-primary-foreground',
  isDisabled && 'opacity-50 pointer-events-none',
)

Released under the MIT License.