AurumBottomSheet

Aurum's modal bottom sheet — the SwiftUI port of aurum-android's AurumBottomSheet, built on the native .sheet presentation with a self-sizing detent.

familySheets
platformiOS 17+ · SwiftUI
figmacomponent master ↗
sourceSources/Aurum/Component/Sheet/AurumBottomSheet.swift
code connectFigmaConnect/Sources/AurumFigmaConnect/AurumBottomSheet.figma.swift
snapshots2 baselines · iPhone 17 Pro · iOS 26.5

Aurum's modal bottom sheet — the SwiftUI port of aurum-android's AurumBottomSheet, built on the native .sheet presentation with a self-sizing detent.

- .strict — built-in 56 pt page header (title), the caller's content, optional sticky bottom button. Use for forms / filters / selections. Dismissal is via drag / scrim — no top-right close button. - .flexible — no header, content owns its own layout (full-bleed images, Lottie). Use for marketing / onboarding.

Platform notes vs Android: the drag indicator is the system one, drawn inside the card per iOS convention (Android floats a white pill on the scrim above the card); the scrim is the system dim (SwiftUI sheets don't expose a scrim colour). Corner radius, card colour, header anatomy, and the sticky-button slot are token-faithful.

Present via the modifier:

.aurumBottomSheet(isPresented: $showFilters, title: "Filter Transactions") { FilterList() } primaryButton: { AurumButton("Apply", isFullWidth: true) { apply() } }

Intended use

Use as the only bottom-sheet surface in feature code. Prefer over raw .sheet so the corner radius, page header, sizing, and light forcing are consistent across the app.

Do

  • Use .strict for any sheet hosting form inputs / lists / filters — the page header gives users a predictable anchor.
  • Pass primaryButton as an AurumButton (.medium for strict, .small for flexible).
  • Wrap long content in a ScrollView — the sheet sizes to content and does not scroll on its own.

Don’t

  • Use .flexible for forms / inputs — strict's page header anchors the title as a stable reference.
  • Render a custom drag handle inside content — the indicator is part of the contract.
  • Place a button inside content when primaryButton is the right slot — the bottom button is sticky and visually anchored.

Snapshots

Recorded on the pinned simulator — iPhone 17 Pro · iOS 26.5 · Xcode 26.6.

AurumBottomSheet — SheetOtpSnapshotTests · testBottomSheetFlexible
SheetOtpSnapshotTests · testBottomSheetFlexible
AurumBottomSheet — SheetOtpSnapshotTests · testBottomSheetStrict
SheetOtpSnapshotTests · testBottomSheetStrict

Code Connect

Mapped to Figma node 6002:939 ↗ — SwiftUI snippets appear in Dev Mode for the latest release.