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

# Controle popups com a Popup API

> Abra, feche e alterne popups do LanderLab a partir de botões, links e código personalizado. Referência completa da API JavaScript e dos links sem código para abrir e fechar popups.

A Popup API permite controlar qualquer popup com código, em vez de depender apenas dos gatilhos integrados (carregamento da página, atraso, rolagem, intenção de saída). Chame `window.llPopupsApi` a partir de um elemento Custom Code ou de qualquer script para abrir um popup com um botão, fechá-lo depois que um formulário for enviado ou conectar popups às suas próprias integrações.

<Note>
  **Use o ID do popup, não o nome.** Tudo na API identifica o popup pelo `id`. O **nome** do popup (o rótulo legível que você vê no editor) é apenas um metadado para análises e exibição - ele nunca é usado para selecionar o popup. Se você usar o nome, nada vai acontecer.
</Note>

***

## Passo 1 - Prepare o popup

Antes de controlar um popup com código, configure-o para que ele não entre em conflito com seus gatilhos e dê a ele um ID que você possa referenciar.

<Steps>
  <Step title="Defina o gatilho como Manual">
    Na aba **Popup** da barra lateral direita, defina o **Trigger** como **Manual** (somente botão). O popup nunca vai abrir automaticamente - ele só aparece quando o seu link ou script o abrir.

    <Tip>
      Você não *precisa* usar Manual. A API funciona em qualquer popup, independentemente do gatilho. O Manual apenas garante que o popup permaneça fechado até que você mesmo o abra.
    </Tip>
  </Step>

  <Step title="Copie o ID do popup">
    Todo popup já tem um ID exclusivo. Para encontrá-lo, abra o painel **Popups** na barra lateral esquerda, clique nos **três pontos (ações)** ao lado do seu popup e escolha **Copy ID**. Cole esse valor sempre que a API pedir o ID do popup.

    <Frame>
      <img src="https://mintcdn.com/landerlab-babdc23f/fgP40icRWa6qGg0H/images/image-35.png?fit=max&auto=format&n=fgP40icRWa6qGg0H&q=85&s=f28dda295445ca5b6f2491081455ef51" alt="Imagem 35" width="599" height="575" data-path="images/image-35.png" />
    </Frame>
  </Step>
</Steps>

***

## A API JavaScript (`window.llPopupsApi`)

Chame o objeto global `window.llPopupsApi` para abrir, fechar ou alternar um popup - em um evento personalizado, depois de um atraso que você controla ou a partir de outro script. Coloque o código em um elemento **Custom Code** na sua página.

```javascript theme={null}
// Open a specific popup
window.llPopupsApi.open('promo-popup-id');
```

### Seleção do alvo: o ID é opcional

Todo método aceita um ID de popup **opcional**:

* **Informe um ID** → a ação afeta apenas esse popup.
* **Omita o ID** → a ação afeta **todos os popups** da página.

```javascript theme={null}
window.llPopupsApi.close('promo-popup-id'); // close one popup
window.llPopupsApi.close();              // close all popups on the page
```

### Métodos

| Método         | O que faz                                                                                                                                                                                           |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `open(id?)`    | Força a abertura do popup. Reabre o popup mesmo que o visitante o tenha dispensado antes na sessão (a sua chamada explícita prevalece).                                                             |
| `close(id?)`   | Fecha o popup com a animação dele. **Não** define o cookie "stay dismissed" - o popup pode ser acionado novamente.                                                                                  |
| `dismiss(id?)` | Fecha o popup **e** o bloqueia: define o cookie de 30 dias se **Stay Dismissed** estiver ativado, ou a flag de sessão se **Show Once** estiver ativado. É isso que o botão de fechar integrado faz. |
| `toggle(id?)`  | Abre o popup se ele estiver fechado e o fecha se estiver aberto. (A abertura via toggle força a abertura, assim como `open`.)                                                                       |
| `get(id?)`     | Retorna o elemento HTML do popup quando você informa um ID (ou `null` se ele não for encontrado), ou um array com todos os elementos de popup quando você omite o ID.                               |

<Note>
  **`close` vs `dismiss`.** `close()` é um fechamento temporário - gatilhos automáticos como a intenção de saída ainda podem disparar novamente. `dismiss()` é permanente durante a sessão (e por até 30 dias com **Stay Dismissed**). Use `close()` para "talvez mais tarde" e `dismiss()` para "não mostrar novamente".
</Note>

### Exemplos

<CodeGroup>
  ```javascript Open from a button theme={null}
  // Wait until the page is ready before wiring things up.
  // DOMContentLoaded guarantees both your button and llPopupsApi exist.
  document.addEventListener('DOMContentLoaded', function () {
    const button = document.getElementById('my-button');

    button.addEventListener('click', function () {
      window.llPopupsApi.open('promo-popup-id');
    });
  });
  ```

  ```javascript Close after a delay theme={null}
  // Auto-close the popup 5 seconds after it opens
  window.llPopupsApi.open('promo-popup-id');
  setTimeout(function () {
    window.llPopupsApi.close('promo-popup-id');
  }, 5000);
  ```

  ```javascript Toggle / close all theme={null}
  // Toggle a single popup
  window.llPopupsApi.toggle('promo-popup-id');

  // Close every popup on the page at once
  window.llPopupsApi.close();
  ```

  ```javascript Get a popup element theme={null}
  // Pass an ID to get one element (or null if not found)
  const popup = window.llPopupsApi.get('promo-popup-id');

  // Omit the ID to get an array of every popup on the page
  const allPopups = window.llPopupsApi.get();
  ```
</CodeGroup>

***

## Bom saber

* **Execute seu código depois que a página estiver pronta.** `window.llPopupsApi` só existe depois que o script de popups é carregado. Envolva suas chamadas em um listener `DOMContentLoaded` — como no exemplo **Open from a button** acima — para que a API esteja disponível antes de você chamá-la.
* **Modo de pré-visualização.** Nas URLs de pré-visualização, o cookie "Stay Dismissed" e a flag "Show Once" nunca são lidos nem gravados, então o popup sempre aparece enquanto você está testando.
* **ESC para fechar.** Se **Close on ESC** estiver ativado para o popup, pressionar <kbd>Esc</kbd> fecha o popup aberto que estiver por cima - sem precisar de código.
* **A abertura prevalece sobre a dispensa.** Chamar `open()` reabre um popup mesmo depois que um visitante o dispensou, mas os gatilhos automáticos do próprio popup continuam respeitando a dispensa. Use `dismiss()` se quiser bloqueá-lo novamente.
