# AGENTS.md — core-ui

Design-system primitives organized by Atomic Design. Only **generic components** (atoms, molecules, generic organisms) live here. Feature-specific components live in their respective feature packages.

## Responsibilities

- **Atoms** — Single HTML elements: Button, Input, Label, Card
- **Molecules** — Combinations: FormField (Label + Input), Badge, Avatar
- **Generic Organisms** — Reusable complex layouts: Modal, Tabs, NavigationMenu, CommandPalette
- **Templates** — Page layouts: AuthLayout, DashboardLayout, LandingLayout
- **Utilities** — `cn()` for className merging, design tokens, Tailwind config

## Feature-specific boundary

Feature-specific organisms (e.g., `ArticleCard`, `ArticleList`, `HeaderNavMenu`) live in their feature's `ui/` folder, NOT here. This boundary keeps `core-ui` framework-agnostic and reusable.

## Must NOT import

- Any feature package (`@repo/auth`, `@repo/blog`, etc.)
- Any app package
- `@repo/core-api`, `@repo/core-cms`, `@repo/core-trpc`

> Note: `@repo/core-trpc` is an optional package scaffolded via `pnpm turbo gen core-package trpc`. If not present, this constraint still applies to any future installation.

## Public exports

From `package.json`:

- `.` — all atoms, molecules, organisms, templates

Example usage:

```typescript
import { Button, Input, Label } from "@repo/core-ui";
import { FormField } from "@repo/core-ui";
import { Modal, Tabs } from "@repo/core-ui";
```

## Test conventions

- Tests colocated: `src/atoms/button/button.tsx` → `src/atoms/button/button.test.tsx`
- Vitest environment: `jsdom` (React component testing)
- Alias: `@/` resolves to `src/`
- Run: `pnpm test --filter @repo/core-ui`
- Storybook stories colocated: `src/atoms/button/button.stories.tsx`

## Structure

> To scaffold a new component, use `pnpm turbo gen core-ui-component` rather than creating files manually. The generator emits the 4-file pattern below and splices the export into the tier barrel.

```
src/
  atoms/
    {name}/
      {name}.tsx             # Component
      {name}.test.tsx        # Tests
      {name}.stories.tsx     # Storybook story
      index.ts               # Barrel export
  molecules/
    {name}/
      ...
  organisms/
    {name}/
      ...
  templates/
    {name}/
      ...
  lib/
    utils.ts                 # cn() and helpers
  index.ts                   # Re-exports everything
```
