# Changelog

O que mudou em cada versão do SDK React e da API, com o impacto para quem integra e o que fazer para atualizar.

[Abrir a versão HTML](https://rhizzalab.com/docs/changelog)

## Versões mais recentes

| Componente                | Versão     | Data       | Destaques                                                                      |
| ------------------------- | ---------- | ---------- | ------------------------------------------------------------------------------ |
| `@rhizzalab/report-react` | 0.30.0     | 28/09/2026 | Aba Marca no widget; apresentação salva junto com o modelo                     |
| API RhizzaDocs            | 28/09/2026 | 28/09/2026 | Dados da marca da empresa e de cada cliente; apresentação por versão do modelo |

> **Nota: Ordem de atualização**
>
> A API já está no ar com as mudanças abaixo e continua compatível com as versões anteriores do SDK. Atualize o pacote quando quiser as novidades do widget: `pnpm add @rhizzalab/report-react@0.30.0`.

## @rhizzalab/report-react 0.30.0

Versão MINOR e aditiva: nenhuma prop, método ou tipo existente mudou. Hosts que só atualizam a dependência passam a ver as novidades sem alterar código.

* Aba Marca na rail. A barra lateral esquerda ganhou uma terceira opção — Inserir, Modelo, Marca, Imagens, Tema — que mostra os dados da marca do cliente: logos para fundo claro e escuro, endereço, telefone, WhatsApp, site, Instagram e cores primária/secundária. Valores herdados do padrão da empresa aparecem com o selo “Padrão da empresa”.

* Inserir e copiar. Cada dado pode ser inserido no cursor do documento numa única ação desfazível (site e Instagram entram como link) ou copiado. O painel é somente leitura: o cadastro fica no portal ou na API.

* Temas usam a marca. Na sidebar do tema, textos ligados à marca mostram o selo “Marca · Endereço” (etc.), e a imagem de logo preenchida pelo servidor aparece como “Logo da marca”. O padrão automático de logo da biblioteca não sobrescreve esses slots.

* Apresentação salva no modelo. Tema, textos e imagens editáveis do tema e o sumário passam a ser salvos com a versão do modelo — trocar só a aparência já habilita salvar. Usa o protocolo 5 do bootstrap.

* Novos exports: `ReportClient.getBrandProfile?`, `EDITOR_BRAND_PROFILE_ENDPOINT_PATH`, os tipos `EditorBrandProfile` e `GetBrandProfileOptions`, e o painel `"brand"` em `openPanel`/`onPanelChange`.

> **Nota: Cliente customizado**
>
> A aba Marca aparece quando o cliente implementa `getBrandProfile` — o cliente HTTP embutido (`createReportClient`) já implementa. Um `ReportClient` próprio sem o método mantém a rail anterior.

## API — dados da marca

Com a mesma credencial da troca de token (desde a primeira), o backend do host registra os dados que os temas reutilizam. Todos os campos são opcionais e existem em dois níveis: o padrão da empresa e cada cliente, identificado pelo mesmo `workspaceId` enviado na troca de token. Na prévia e no PDF, cada campo usa o valor do cliente e, sem ele, o padrão da empresa.

| Método e rota                               | O que faz                                                                                  |
| ------------------------------------------- | ------------------------------------------------------------------------------------------ |
| `GET /v1/brand-profile`                     | Lê o padrão da empresa                                                                     |
| `PATCH /v1/brand-profile`                   | Atualiza campos; ausente mantém, `null` limpa                                              |
| `PUT /v1/brand-profile/logos/{variante}`    | Envia a logo: `light` (fundo claro) ou `dark` (fundo escuro), multipart com o campo `file` |
| `DELETE /v1/brand-profile/logos/{variante}` | Remove a logo (idempotente)                                                                |
| Qualquer rota acima + `?workspaceId=…`      | Mesma operação para um cliente                                                             |

```shell
curl -X PATCH "https://api.rhizzalab.com/v1/brand-profile?workspaceId=cliente-42" \
  -u "$RP_CLIENT_ID:$RP_CLIENT_SECRET" \
  -H "content-type: application/json" \
  -d '{"phone":"(11) 3333-4444","instagram":"@cliente","primaryColor":"#1d4ed8"}'

curl -X PUT "https://api.rhizzalab.com/v1/brand-profile/logos/light?workspaceId=cliente-42" \
  -u "$RP_CLIENT_ID:$RP_CLIENT_SECRET" \
  -F file=@logo.png
```

* Campos: `address`, `phone`, `whatsapp`, `website`, `instagram`, `primaryColor`, `secondaryColor` (`#rrggbb`) e as logos `light` e `dark`.

* Logos: JPEG, PNG ou WebP até 2 MB; a API guarda um PNG que cabe em 1024 px, sem recortar e preservando transparência.

* Servidor a servidor apenas: sem CORS de navegador; o `clientSecret` nunca sai do seu backend. Falha de autenticação é sempre `401 AUTH_REQUIRED`.

* Validação: `422 INVALID_DATA` com `issues` por campo (`/phone`, `/file`, `/workspaceId`). Limites: 60 requisições/min por credencial e IP; 30 escritas/min por empresa.

* O mesmo cadastro está no portal: página Dados da marca e aba Dados da marca no detalhe de cada cliente. O detalhe de cada credencial em Integrações traz exemplos prontos.

> **Nota: No construtor de temas**
>
> Um texto pode ser ligado a Endereço, Telefone, WhatsApp, Site ou Instagram; a imagem marcada “Usar como logo” escolhe Fundo claro ou Fundo escuro; e “Cores da marca” define quais cores do tema viram a primária e a secundária cadastradas. Tudo é resolvido no servidor, então prévia e PDF saem iguais.

## API — apresentação na versão do modelo

* Cada versão de modelo guarda a apresentação: tema, textos e ligações do tema, imagens por `assetId` e o sumário. Criar, copiar e versionar preservam esse estado, sem armazenar dados comerciais.

* O bootstrap envia `templatePresentation` somente no protocolo 5 (SDK 0.30.0). Protocolos 1–4 recebem o envelope anterior, então SDKs antigos continuam funcionando.

* Salvar como novo aceita `sourceTemplateRef: { id, version }` para herdar a versão do modelo realmente aplicado.
