# Popup interactions

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2F3PvdamgLTfrLR3s9LwmL%2F2.webp?alt=media&#x26;token=d702c5ba-b76f-46b2-a49f-710f93e141cd" alt="" width="563"><figcaption></figcaption></figure>

Popups provide a way to display a layer’s attributes on click or hover. Popups interactions are enabled by default for vector layers and disabled by default for raster layers. There are three types of popups for vector data: standard, iframe, and custom HTML. You can control and customize the popup behavior using the **`Interaction`** section of a layer’s style editor.

## Standard popups

{% embed url="<https://www.youtube.com/watch?v=pt191lOVt7A>" %}

#### Configure standard popups

1. In edit mode, open the style editor for the layer
2. Scroll to the bottom of the style editor to the **`Interaction`** section

   <figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FEFD2c4YZkXwXAAY4TbVU%2Fimage.png?alt=media&#x26;token=8c02c8b7-c10a-48bf-8c82-551b1b766574" alt="" width="309"><figcaption></figcaption></figure>
3. Click on the dropdown next to **`Contents`** to customize the layout and contents. Add a title, configure an image, and reorder, remove and format attributes. See [#content-settings](#content-settings "mention")for more info.&#x20;

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FmIVh1wN3BB9R0M5X0UBr%2FScreen%20Recording%202025-10-23%20at%202.44.00%E2%80%AFPM.gif?alt=media&#x26;token=79c6bcb1-cfc8-4910-8281-a46d6e733c9c" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Popups update in real time! Click on a feature to see changes as you make them.
{% endhint %}

#### Layouts

Felt provides two display options for the standard popup type: Table and List.&#x20;

* Table view is more compact and has keys and values displayed on the same row
* List view is less compact and has keys and values listed ordered in a list format

{% columns %}
{% column %}

<p align="center"><strong>Table</strong></p>

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FDKF27yIb1bipnUyjwAUB%2Fimage.png?alt=media&#x26;token=e4db0279-f255-4726-82ee-023e328dc569" alt="" width="477"><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

<p align="center"><strong>List</strong></p>

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fnh2cBcg9kGwdzS86b9R0%2Fimage.png?alt=media&#x26;token=46f92a51-0632-4770-a2c6-0c3baf37d7e8" alt="" width="470"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

#### Content Settings

Within the **`Contents`** settings, you can control what appears in the popup menus:

* Choose a layout
* Add, remove, and reorder attributes&#x20;
* Select a popup **`Title`** attribute
* Add an image attribute (must be a public image URL)
* Edit attribute names *(double-click on the attribute name)*&#x20;
* Format the values *(click **`123`** when hovering over an attribute)* &#x20;

## Custom HTML (with AI)

{% embed url="<https://www.youtube.com/watch?v=vXAL8FG2kuM>" %}

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact Sales](https://felt.com/sales).
{% endhint %}

Custom HTML popups allow you to customize the contents and layout of layer interactions within Felt. Share your vision and ideas with Felt's AI agent to design polished popups in no time. Adding prompts to Felt's AI LLM will automatically result in clean, standard HTML (Liquid), CSS, and JavaScript that you can further modify and extend. These popups can include photos, interactive charts, dropdowns, and more.

#### Create a custom popup

1. In edit mode, open the style editor for the layer
2. Scroll to the bottom of the style editor to the **`Interaction`** section
3. Click on the dropdown next to **`Type`** and select  **Custom HTML**
4. The **popup interface** will open

   <figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FmuEg4iDc7EZG3jItlFEm%2Fai-popup.webp?alt=media&#x26;token=e6c1a0a3-3ff4-4f1a-bcfb-c8378274165c" alt=""><figcaption></figcaption></figure>

   1. **the left side:** code editor (HTML/CSS/JS) and AI prompt area to chat with Felt AI (plus console logging for debugging)
   2. **the center:** previews (desktop & mobile available)&#x20;
   3. **the right side:** layout controls (see [#layout-options](#layout-options "mention"))
5. Describe what you the popup to display by typing in the AI prompt area (see [#prompt-examples](#prompt-examples "mention"))
6. Review the generated HTML/CSS code and preview the pop ups in both Desktop and Mobile mode. You can modify the code directly in the code editor, and all edits are applied immediately.
7. Click **Save** (top right) once you are finished editing the popup
8. Test the popup experience by clicking on a feature in your map

{% hint style="info" %}
All edits and changes are applied immediately to your previews, saved changes are applied immediately to the live map.&#x20;

You can always return to the configuration settings by clicking on `Edit...` in the `Content` row.
{% endhint %}

#### Prompt examples

* "Create a popup with tabs showing property details, demographics, and transit data in separate card layouts with the property photo at the top"
* "Show a bar chart comparing this location's sales data to regional averages"
* "Add an expandable section that shows basic info first, with a Show Details button"&#x20;

#### Examples

Create custom popups that reflect your organization's identity, with brand colors, photos, typography, and logos applied automatically.

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FmIhmnjkCwAU3fm21Yfqw%2F4.webp?alt=media&#x26;token=ba314032-508e-4e02-96b1-e48f73c68470" alt="" width="563"><figcaption></figcaption></figure>

Quickly create popups with expandable sections or tabbed navigation, so users can explore details of complex data without being overwhelmed.

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FxsrqeiyldGgHTIqX17X4%2F3.webp?alt=media&#x26;token=d2f415a9-591f-4c44-b1a2-3c203782a52d" alt="" width="563"><figcaption></figcaption></figure>

#### Write your own

You can also utilize pre-written HTML, CSS, and Javascript to control what appears when interacting with features. Felt uses the [Liquid Template Language](https://liquidjs.com/tutorials/intro-to-liquid.html) to make it easy to quickly build your custom HTML popups. Liquid includes features like iteration, conditional branching, and helpful [filters](https://liquidjs.com/filters/overview.html) to easily format text. Note: for security reasons, third-party iframe embeds might not work within custom HTML popups.

## iframe

Use iframe interactions to load and display external websites inside Felt when clicking or hovering on features in layers. iframe interactions can use attributes in your data to point to feature-specific URLs. You can also add URL-related attributes from your data by clicking the **`plus`** button in the editor and select the URL attribute.

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FII9QmQ2IchRogvwMIfxE%2Fimage.png?alt=media&#x26;token=39060d68-ca9c-4d22-bf4a-1137726fde76" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="success" %}
This feature is only available to customers on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact Sales](https://felt.com/sales).
{% endhint %}

#### Configure iframe popups

1. From the **`Interaction`** section of a layer’s style editor, set **`Type`** to **`iframe`**
2. The **popup interface** will open

   <figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fm6itSSfJCPVsIiA56AQI%2Fimage.png?alt=media&#x26;token=ee27baf6-5b97-44de-bc26-58452baa1a72" alt=""><figcaption></figcaption></figure>

   1. **the left side:** iframe builder (add attributes from the data with the **plus** sign)
   2. **the center:** previews (desktop & mobile available)&#x20;
   3. **the right side:** layout controls (see [#layout-options](#layout-options "mention"))
3. Configure your iframe URL from static text and/or attributes. See [#examples-1](#examples-1 "mention") below.&#x20;
   1. To add an attribute to the URL, click on the plus sign at the top of the builder and select the attribute to include in the iframe URL. Attributes have double curly brackets surrounding them.&#x20;

      <figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fw3VP2FaQP7ooCVHZuOVR%2Fimage.png?alt=media&#x26;token=0618d903-c785-4345-8470-81a926cf0028" alt="" width="563"><figcaption></figcaption></figure>
4. Review the URL and preview the popups in both Desktop and Mobile modes.&#x20;
5. Click **Save** (top right) once you are finished editing the popup
6. Test the popup experience by clicking on a feature in your map

{% hint style="info" %}
All edits and changes are applied immediately to your previews, saved changes are applied immediately to the live map.&#x20;

You can always return to the configuration settings by clicking on `Edit...` in the `Content` row.
{% endhint %}

#### Examples

iframe URLs can be created from static text, a URL attribute in the data, or a mix of static text and data attributes.&#x20;

**Static URLs**

Load a static URL into the builder to load the same website for all feature in the layer

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FxB3tXyLNHFDqc737eFNq%2Fimage.png?alt=media&#x26;token=90ec094f-c94f-4b4d-a121-1cc3335bf907" alt="" width="563"><figcaption></figcaption></figure>

**URL attribute**

Point to attribute URLs in the data so different features show their associated URLs. Attributes will have double curly brackets surrounding the attribute name in the builder to indicate dynamic data. &#x20;

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2F8IJxAh60E94ilEfqdfUy%2Fimage.png?alt=media&#x26;token=9209c418-8863-4609-b92f-b6c983524a30" alt="" width="563"><figcaption></figcaption></figure>

**Mix of static and dynamic attributes**&#x20;

In this example an attribute as used as part of a URL to load different content on a website per feature popup. The **`Unique Squirrel ID`** attribute is used to point each feature to a different URL. Attributes will have double curly brackets surrounding the attribute name in the builder to indicate dynamic data. &#x20;

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FuEukf6Eh7SZGEI6HMkpe%2Fimage%203.png?alt=media&#x26;token=392a276d-c531-4a7a-bdee-09979823334f" alt="" width="563"><figcaption></figcaption></figure>

#### Troubleshooting iframes that won’t load

When a URL won’t load within an iframe but loads normally otherwise, it is likely because the website’s response headers prevent the website from being embedded. To resolve the issue, add a [Content-Security Policy response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) to the embedded website.

## Layout options

{% hint style="success" %}
This feature is only available for Custom HTML and iframe popups on the [Enterprise plan](https://felt.com/pricing). To upgrade, [contact Sales](https://felt.com/sales).
{% endhint %}

Use the `Layout` control inside the setup modal to control where the popup is shown: popup card, left sidebar, right sidebar, or popup modal.&#x20;

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2F6PMKgX6lVeDgBRAXDAj7%2Fimage.png?alt=media&#x26;token=f75705ca-6aae-46aa-bb9c-82b13e90d77a" alt="" width="291"><figcaption></figcaption></figure>

You can provide an attribute to use as the title with the `Title` field and specify the width and height of the interaction’s container via the `Width` and `Height` input fields.

Use the `Header` setting to control the visibility of the top-bar.&#x20;

* **Standard** headers show the layer name, the Title, and overflow menu

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FkPiHFa9qhcKPMauDX9lT%2Fimage.png?alt=media&#x26;token=48ccd89a-243e-4ef2-816e-d542e0f6e95c" alt="" width="563"><figcaption></figcaption></figure>

* **Compact** headers show the overflow menu

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FpAfV0TuHSdcKxkfmMbKt%2FScreenshot%202025-09-12%20at%2012.14.49%E2%80%AFPM.png?alt=media&#x26;token=caa6861c-9ce4-4c00-926b-d8d68135f0f8" alt="" width="563"><figcaption></figcaption></figure>

* **None** removes any header option from the pop up

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2Fop9l2NyGVzVUfuRPbGNn%2Fimage.png?alt=media&#x26;token=b2075b60-5bdc-4e45-b69d-7ea62911f1d8" alt="" width="563"><figcaption></figcaption></figure>

Custom and iframe popup content can be shown in four different layouts: Popup, Modal, Right sidebar, or Left sidebar.&#x20;

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FV7lu1YlFS2R4CnfoGfi8%2Fimage%205.png?alt=media&#x26;token=8e63c76d-b26b-4b21-8b80-efda830f22b1" alt=""><figcaption><p>Clockwise from top left: popup, modal, right sidebar, left sidebar</p></figcaption></figure>

## Raster interactions

Raster layers have interactions disabled by default. To show raster pixel values on hover or click, click the dropdown next to the **`Show`** control within the **`Interaction`** section of your raster layer's style editor.

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FedtO8WPkUSm41Bz6REvg%2Fimage%206.png?alt=media&#x26;token=1182c0bc-535a-4893-a795-427c3e1fe312" alt="" width="375"><figcaption></figcaption></figure>

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FgqPm6tA47ewSpisSUC2m%2Fimage%207.png?alt=media&#x26;token=cd50bf51-f70f-464a-a28d-ccda17f207e2" alt="" width="375"><figcaption></figcaption></figure>

## Interaction behavior

Interactions can be shown on click, only when clicking on labels, or on both hover and click. Configure when interactions are shown using the `Show` control from within the `Interaction` section of the layer style editor.

Looking to turn off interactions on a layer? Click the "On click" dropdown next to `Show` and select **Never**.&#x20;

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FyChzVNLIBGdrUnWlZ0Lj%2Fimage.png?alt=media&#x26;token=be23be3a-36c9-498a-b75e-b07dc61450b6" alt=""><figcaption></figcaption></figure>

When clicking on area with overlapping interactive features, arrows are provided to step between features.

<figure><img src="https://217108486-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmRfGitkyjOEMvVsEyGWN%2Fuploads%2FkKYZPmD5mye4bne4wKR8%2Fimage%2010.png?alt=media&#x26;token=a070b0e6-5558-4ea2-b80e-9b637c12ea62" alt="" width="364"><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.felt.com/layers/popup-interactions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
