# Book 3D

O item de catálogo como objeto: capa dura em WebGL com lombada curva, espessura vinda da contagem de páginas e praça. Cor derivada dos tokens da marca e do matiz da própria arte, sem asset baixado.

- Nome no registry: `book-3d`
- Tipo: componente
- Dependências npm: @react-three/drei@^9.122.0, @react-three/fiber@^8.18.0, three@^0.170.0
- Demo: https://ui.visantlabs.com/c/book-3d
- Categorias: conteudo, livro, 3d, webgl, catalogo, capa, objeto

## Quando usar

- Use quando: Mostrar livro, revista ou catálogo como objeto 3D com capa, lombada e espessura reais
- Evite quando: Muitos itens numa grade leve: spine-card ou book-shelf; item sem arte de capa, cover-art

## Instalar

```bash
npx shadcn@latest add @visant/book-3d
```

## Usar

```tsx
<rgbToHsl />
```

## API

### rgbToHsl

- `b: number`
- `g: number`
- `r: number`

### hslToCss

Sempre `rgb(…)`, nunca hex — o portão de cor do registry lê o CÓDIGO.

- `h: number`
- `l: number`
- `s: number`

### rgbToCss

- `b: number`
- `g: number`
- `r: number`

### paintBlock

- `back: string` — Fundo da contracapa.
- `board: string` — Cartão da capa — o degrau que aparece na praça e na quina.
- `cover: string` — Topo da lombada e da contracapa.
- `coverDark: string` — Pé da lombada, e o par escuro de todo gradiente.
- `paper: string` — Corte do miolo.
- `studio: string` — Fundo do estúdio virtual. Não é o fundo da PÁGINA (o canvas é transparente): é o que o ambiente reflete na capa.

### bookstage

- `seed: string` — Chave ESTÁVEL: slug > id > título. Título editado mudaria o objeto.
- `title: string`
- `art?: string` — A capa. Sem ela, o livro sai com a capa desenhada — nunca caixa cinza.
- `artColor?: string` — Cor curada da arte, se houver. Ganha da amostragem automática — uma pessoa (ou um extrator com noção de papel) sabe que o ocre da pedra é o assunto e o céu é o fundo; uma média não sabe.
- `mark?: string` — Marca d'água na contracapa. Uma linha curta, tipo o selo da editora.
- `onReady?: () => void` — Chamado no primeiro quadro em que o livro existe POR INTEIRO.
- `pages?: number` — Manda na espessura. Sem número, usa o livro de estante médio.

### Book3D

- `seed: string` — Chave ESTÁVEL: slug > id > título. Título editado mudaria o objeto.
- `title: string`
- `art?: string` — A capa. Sem ela, o livro sai com a capa desenhada — nunca caixa cinza.
- `artColor?: string` — Cor curada da arte, se houver. Ganha da amostragem automática — uma pessoa (ou um extrator com noção de papel) sabe que o ocre da pedra é o assunto e o céu é o fundo; uma média não sabe.
- `className?: string`
- `mark?: string` — Marca d'água na contracapa. Uma linha curta, tipo o selo da editora.
- `onReady?: () => void` — Chamado no primeiro quadro em que o livro existe POR INTEIRO.
- `pages?: number` — Manda na espessura. Sem número, usa o livro de estante médio.
