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)

@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)

@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 }