---
title: "ExpandedSurfaceContext, DroppyKit"
description: "What the host tells expanded-surface content about its mount."
canonical: "https://getdroppy.app/docs/droppykit/api/expanded-surface-context"
last-updated: "2026-09-09"
---

# ExpandedSurfaceContext

What the host tells expanded-surface content about its mount.

`struct ExpandedSurfaceContext`

Passed on every render pass, so read the live values rather than caching them. This is the same contract [`ShelfWidgetContext`](https://getdroppy.app/docs/droppykit/api/shelf-widget-context) sets, with the presentation identity added, because a takeover can outlive a single mount.

## Initializers

### init(availableSize:surface:displayID:isHostShelfTransitioning:isPreview:presentation:)

`init(availableSize: CGSize, surface: DropletSurfaceKind = .builtInNotch, displayID: UInt32, isHostShelfTransitioning: Bool = false, isPreview: Bool = false, presentation: ExpandedSurfacePresentation)`

Creates a context. Constructed by hosts, read by droplets.

## Properties

### availableSize

`let availableSize: CGSize`

The size the host is laying the surface out at. Lay out to this; it is the host's clamped answer to whatever you asked for through [`expandedSurfaceSize(_:fitting:)`](https://getdroppy.app/docs/droppykit/api/expanded-surface-providing#expanded-surface-size-fitting).

### displayID

`let displayID: UInt32`

The display hosting it.

### isHostShelfTransitioning

`let isHostShelfTransitioning: Bool`

True while the shelf's open or close spring is in flight. Freeze live content while true; host springs never compete with content animation.

### isPreview

`let isPreview: Bool`

True when the view is mounted in a non-interactive preview (settings mockups, the harness screenshot mode). Skip side effects.

### presentation

`let presentation: ExpandedSurfacePresentation`

The presentation this mount belongs to.

### surface

`let surface: DropletSurfaceKind`

The surface kind hosting it.
