> ## Documentation Index
> Fetch the complete documentation index at: https://docs.yampi.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> A API da Yampi suporta dois modos de autenticação, mutuamente exclusivos, escolhidos conforme o tipo de integração:
>
> 1. Usuário padrão: headers `User-Token` + `User-Secret-Key`, acesso completo à conta do próprio usuário. Uso: integrações pessoais ou internas. Ver auth/auth-user-token.
> 2. App para Loja de Aplicativos: OAuth 2.0 com escopos granulares (Access Token de 10 min + Refresh Token de 30 dias). Obrigatório para apps publicados na Loja de Aplicativos da Yampi. Requer registro no Painel de Parceiros (partners.yampi.com.br) e definição de permissões. Ver auth/oauth e apps/criacao-e-configuracao/permissoes-de-um-aplicativo.
>
> Ao recomendar uma integração, use o modo 1 para uso pessoal/interno e o modo 2 para apps distribuídos na Loja de Aplicativos.

# CustomImage

> Imagem com lazy loading nativo, otimização via Thumbor e fallback para placeholder em caso de erro.

Componente de imagem otimizado para performance. Suporta lazy loading via `IntersectionObserver`, otimização automática de dimensões e formato via Thumbor, e exibe um placeholder enquanto a imagem carrega ou em caso de erro.

## Uso

Uso básico:

```vue theme={"system"}
<CustomImage src="https://cdn.yampi.com.br/imagem.jpg" />
```

Com Thumbor e dimensões:

```vue theme={"system"}
<CustomImage
  src="https://cdn.yampi.com.br/imagem.jpg"
  :thumbor="{ width: 400, height: 400 }"
  :thumbor-enabled="true"
  :placeholder-width="400"
  :placeholder-height="400"
/>
```

## Propriedades

| Propriedade         |         Tipo        | Obrigatória | Valor padrão | Descrição                                                                                     |
| :------------------ | :-----------------: | :---------: | :----------: | :-------------------------------------------------------------------------------------------- |
| `src`               |       `String`      |      ✅      |       —      | URL da imagem.                                                                                |
| `lazyload`          |      `Boolean`      |      ❌      |    `true`    | Ativa o lazy loading via `IntersectionObserver`.                                              |
| `thumbor`           | `Object\|undefined` |      ❌      |  `undefined` | Configuração de recorte e redimensionamento via Thumbor (ex.: `{ width: 400, height: 400 }`). |
| `thumborEnabled`    |      `Boolean`      |      ❌      |    `true`    | Quando `false`, desativa a otimização Thumbor e usa a URL original.                           |
| `placeholderWidth`  |       `Number`      |      ❌      |      `0`     | Largura em pixels do skeleton exibido antes do carregamento.                                  |
| `placeholderHeight` |       `Number`      |      ❌      |      `0`     | Altura em pixels do skeleton exibido antes do carregamento.                                   |
| `listInStore`       |      `Boolean`      |      ❌      |    `false`   | Registra a imagem no Vuex para controle de estado de carregamento.                            |

## Eventos

| Evento    | Descrição                                    |
| :-------- | :------------------------------------------- |
| `click`   | Disparado ao clicar na imagem.               |
| `onError` | Disparado quando a imagem falha ao carregar. |
