Skip to content

Commit bbb834a

Browse files
bmc08gtclaude
andcommitted
feat(nav): add WrapContentSheet support to navigation
Add WrapContentSheet interface, IsWrapContentSheet metadata key, and conditional fillMaxHeight/ScrimOverlay handling for wrap-content sheets. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 8440ade commit bbb834a

3 files changed

Lines changed: 15 additions & 2 deletions

File tree

ui/navigation/src/main/kotlin/com/getcode/navigation/NavMetadata.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ enum class NavMetadataKeys(val key: String, ) {
1616
IsNonDismissable("non_dismissable"),
1717
IsNonDraggable("non_draggable"),
1818
IsSheet("sheet"),
19+
IsWrapContentSheet("sheet_wrap_content"),
1920
IsSolitarySheet("sheet_solitary"),
2021
NavResultKey("navresult_key"),
2122
}
@@ -58,6 +59,7 @@ fun KClass<*>.metadata(): Map<String, Any> {
5859

5960
return mapOf(
6061
NavMetadataKeys.IsSheet.key to Sheet::class.java.isAssignableFrom(this.java),
62+
NavMetadataKeys.IsWrapContentSheet.key to WrapContentSheet::class.java.isAssignableFrom(this.java),
6163
NavMetadataKeys.IsSolitarySheet.key to SolitarySheet::class.java.isAssignableFrom(this.java),
6264
NavMetadataKeys.IsNonDismissable.key to NonDismissableRoute::class.java.isAssignableFrom(this.java),
6365
NavMetadataKeys.IsNonDraggable.key to NonDraggableRoute::class.java.isAssignableFrom(this.java),

ui/navigation/src/main/kotlin/com/getcode/navigation/Types.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.getcode.navigation
33
import androidx.navigation3.runtime.NavKey
44

55
interface Sheet: NavKey
6+
interface WrapContentSheet: NavKey
67
interface NonDismissableRoute: NavKey
78
interface NonDraggableRoute: NavKey
89
interface SolitarySheet: NavKey

ui/navigation/src/main/kotlin/com/getcode/navigation/scenes/ModalBottomSheetSceneStrategy.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,10 +224,18 @@ internal class ModalBottomSheetScene<T : Any> @OptIn(ExperimentalMaterial3Api::c
224224
)
225225
}
226226
}
227+
val isWrapContent =
228+
metadata[NavMetadataKeys.IsWrapContentSheet.key] as? Boolean ?: false
227229
Box(
228230
modifier = Modifier
229231
.fillMaxWidth()
230-
.fillMaxHeight(CodeTheme.dimens.modalHeightRatio)
232+
.then(
233+
if (!isWrapContent) {
234+
Modifier.fillMaxHeight(CodeTheme.dimens.modalHeightRatio)
235+
} else {
236+
Modifier
237+
}
238+
)
231239
) {
232240
SharedTransitionLayout {
233241
CompositionLocalProvider(
@@ -237,7 +245,9 @@ internal class ModalBottomSheetScene<T : Any> @OptIn(ExperimentalMaterial3Api::c
237245
) {
238246
entry.Content()
239247
}
240-
ScrimOverlay(scrim)
248+
if (!isWrapContent) {
249+
ScrimOverlay(scrim)
250+
}
241251
}
242252
}
243253
}

0 commit comments

Comments
 (0)