---
title: "ShelfWidgetStageScaffold, DroppyKit"
description: "An asymmetric cutout-wrapping layout with a full-height leading stage (artwork or drop target) and cutout-cleared trailing column."
canonical: "https://getdroppy.app/docs/droppykit/api/shelf-widget-stage-scaffold"
last-updated: "2026-09-09"
---

# ShelfWidgetStageScaffold

An asymmetric cutout-wrapping layout with a full-height leading stage (artwork or drop target) and cutout-cleared trailing column.

`@MainActor struct ShelfWidgetStageScaffold<Stage, Trailing, Content, Footer> where Stage : View, Trailing : View, Content : View, Footer : View`

When wrapped around a notch or camera island pill, the leading `stage` stays at the top-leading corner and clamps strictly within `wrap.bandWidth` so it never touches the hardware cutout, optional `trailing` controls sit inside the top-trailing wing, and `content` + `footer` center vertically below the cutout floor. Outside wrapped mounts, `stage` and the right column align normally across the full card height.

Available from DroppyKit 1.24.0; a droplet that uses it declares `minAPI` 1.24.0.

## Initializers

### init(stageWidth:spacing:stage:content:)

`@MainActor init(stageWidth: CGFloat? = nil, spacing: CGFloat = DroppySpacing.md, @ViewBuilder stage: () -> Stage, @ViewBuilder content: () -> Content)`

### init(stageWidth:spacing:stage:content:footer:)

`@MainActor init(stageWidth: CGFloat? = nil, spacing: CGFloat = DroppySpacing.md, @ViewBuilder stage: () -> Stage, @ViewBuilder content: () -> Content, @ViewBuilder footer: () -> Footer)`

### init(stageWidth:spacing:stage:trailing:content:)

`@MainActor init(stageWidth: CGFloat? = nil, spacing: CGFloat = DroppySpacing.md, @ViewBuilder stage: () -> Stage, @ViewBuilder trailing: () -> Trailing, @ViewBuilder content: () -> Content)`

### init(stageWidth:spacing:stage:trailing:content:footer:)

`@MainActor init(stageWidth: CGFloat? = nil, spacing: CGFloat = DroppySpacing.md, @ViewBuilder stage: () -> Stage, @ViewBuilder trailing: () -> Trailing, @ViewBuilder content: () -> Content, @ViewBuilder footer: () -> Footer)`

## Properties

### body

`@MainActor var body: some View { get }`
