# `popup`

```strand
element popup: surface
```

Anchored to its parent element; nests (tray menus).

It mounts its children only while shown.

Also every prop and event of [`surface`](/reference/elements/surface.html.md).

| Prop | Type | |
| --- | --- | --- |
| `trigger` | `PopupTrigger` | What opens it: `open` (the default), its `open:` prop; `hover`, the pointer. A `trigger: hover` popup opens while the pointer is on the element it is anchored to (after `delay`), stays open while the pointer is on that element or on the popup (popups opened from it too), and 200 ms more to cross the gap, or while a drag that started in it goes on. It never takes the keyboard, and opening one closes the other `trigger: hover` popup open from the same surface. Its `open:` (never two-way) opens it from code and holds it open while true; then the pointer holds it as usual. |
| `delay` | `duration` | How long the pointer rests on the element before a `trigger: hover` popup opens. At once by default. |
| `grace` | `duration` | How long a `trigger: hover` popup stays open after the pointer leaves both it and its element, to cross the gap. 200 ms by default. |
| `anchor` | `Anchor \| PopupAnchor` | Where it opens: below the element it is anchored to (the default; a submenu beside its row, on the side `left`, `right`, `top` or `bottom` names), or `pointer`, where the press on its element that opened it went down: a context menu at the click, down and to the right of it, kept inside the screen. Opened with no press (a key, a timer, a hover) it opens at its element; a later press on its element that leaves it open moves it there. |

| Event | |
| --- | --- |
| `on dismiss` | Escape or a click away closed it. |
