README.md

# Glizzy UI

<p align="center">
  <img src="public/glizzy.svg" alt="Glizzy UI Logo" width="400" />
</p>

<p align="center">
  <strong>A shadcn/ui-inspired UI library for Gleam and Lustre</strong>
</p>

<p align="center">
  <a href="https://hex.pm/packages/glizzy"><img src="https://img.shields.io/hexpm/v/glizzy" alt="Hex Version" /></a>
  <a href="https://hexdocs.pm/glizzy"><img src="https://img.shields.io/badge/docs-hexdocs.pm-blue" alt="Documentation" /></a>
  <a href="https://github.com/tantalumv/Glizzy/blob/main/LICENSE"><img src="https://img.shields.io/hexpm/l/glizzy" alt="License" /></a>
</p>

---

## What is Glizzy UI?

Glizzy UI is a comprehensive UI component library built for [Gleam](https://gleam.run) and [Lustre](https://lustre.dev). Inspired by [shadcn/ui](https://ui.shadcn.com), it provides beautifully designed, accessible, and customizable components for building modern web applications.

## Features

- **60+ Components** - Buttons, inputs, dialogs, navigation, layout, and more
- **Accessible** - WAI-ARIA compliant with keyboard navigation
- **Customizable** - Easy to theme and style
- **Type-Safe** - Full Gleam type safety
- **Zero Dependencies** - Built on Lustre 5.x

## Quick Start

### Installation

```bash
gleam add glizzy
```

### Usage

```gleam
import glizzy/ui/button
import lustre.{type Msg, element}
import lustre/element.{button, text}

fn view(msg: Msg) -> element(Msg) {
  button.button(
    ~{
      variant: button.Primary,
      size: button.Default,
      disabled: False,
      onclick: Some(Clicked),
    },
    [text("Click me!")],
  )
}
```

## Components

| Category | Components |
|----------|------------|
| **Core** | Button, Checkbox, Input, Radio, Select, Slider, Switch |
| **Forms** | Calendar, Date Field, Date Picker, Number Field, Search Field, Text Field, Time Field |
| **Layout** | Box, Cluster, Stack, Sequence, Centre, Aside, Divider, Separator |
| **Navigation** | Breadcrumbs, Link, Menu, Tabs, Toolbar |
| **Overlay** | Dialog, Modal, Popover, Tooltip, Disclosure |
| **Data Display** | Avatar, Badge, Chip, KBD, Table, Tree |
| **Feedback** | Alert, Meter, Progress Bar, Skeleton, Spinner, Toast |
| **Selection** | Autocomplete, Checkbox Group, Combobox, Grid List, List Box, Radio Group, Tag Group, Toggle Button |
| **Color** | Color Area, Color Field, Color Picker, Color Slider, Color Swatch, Color Wheel |
| **Advanced** | Drop Zone, File Trigger, Virtualizer, Split Panel |

## Documentation

- [Getting Started](docs/guides/getting_started.md)
- [Component Documentation](docs/index.md)
- [Accessibility Guide](docs/guides/accessibility.md)
- [Theming Guide](docs/guides/theming.md)
- [Keyboard Keymaps](docs/guides/keymaps.md)

## Examples

Check out the [example application](examples/lustre_app/) for a complete demo of all components.

```bash
cd examples/lustre_app
gleam run
```

## Development

### Build

```bash
gleam build
```

### Test

```bash
gleam test
```

### Format

```bash
gleam format
```

### E2E Tests

```bash
bun install
bunx playwright test
```

## License

MIT License - see [LICENSE](LICENSE) for details.

## Acknowledgments

- [shadcn/ui](https://ui.shadcn.com) - Design inspiration
- [Lustre](https://lustre.dev) - The Elm-inspired FRP library for Gleam
- [Gleam](https://gleam.run) - The friendly language for robust type systems