@momo-kits/native-kits 0.167.1-beta.4-debug → 0.167.1-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/build.gradle.kts +0 -11
- package/compose/build.gradle.kts +0 -190
- package/compose/build.gradle.kts.backup +0 -190
- package/compose/compose.podspec +0 -47
- package/compose/src/androidMain/kotlin/vn/momo/kits/const/HostFont.android.kt +0 -19
- package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +0 -6
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/BackGesture.android.kt +0 -12
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +0 -7
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +0 -151
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +0 -52
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +0 -124
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +0 -183
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +0 -207
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +0 -39
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +0 -86
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +0 -76
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +0 -76
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +0 -293
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +0 -33
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +0 -831
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +0 -269
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +0 -110
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +0 -378
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/WidgetContainer.kt +0 -56
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +0 -69
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +0 -157
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +0 -82
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +0 -32
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +0 -338
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +0 -175
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +0 -356
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +0 -113
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -89
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +0 -128
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +0 -209
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +0 -542
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +0 -49
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +0 -76
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +0 -125
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +0 -231
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +0 -189
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +0 -475
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +0 -114
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +0 -266
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +0 -240
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +0 -223
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +0 -264
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +0 -185
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +0 -343
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +0 -108
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +0 -56
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +0 -41
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +0 -84
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +0 -40
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +0 -328
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +0 -97
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +0 -310
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +0 -59
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +0 -87
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +0 -21
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +0 -90
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +0 -323
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +0 -220
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +0 -473
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +0 -122
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +0 -199
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +0 -91
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +0 -552
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +0 -88
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +0 -125
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +0 -207
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +0 -498
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +0 -176
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +0 -182
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +0 -193
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +0 -29
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +0 -234
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +0 -188
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +0 -325
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/HostFont.kt +0 -16
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitDesignSystem.kt +0 -18
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitFontScale.kt +0 -22
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -16
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -188
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -296
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -52
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -38
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -39
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -52
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -66
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +0 -11
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +0 -104
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -48
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +0 -51
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +0 -299
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/HostBackGestureBridge.kt +0 -58
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -129
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -106
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -201
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -393
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +0 -8
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -595
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +0 -148
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +0 -35
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -175
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +0 -225
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +0 -86
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +0 -169
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +0 -358
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -83
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderJourney.kt +0 -106
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderLocation.kt +0 -75
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -309
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -37
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -364
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +0 -132
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +0 -127
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/BackGesture.kt +0 -12
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +0 -91
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +0 -9
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -71
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -55
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +0 -15
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -105
- package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +0 -40
- package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +0 -45
- package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +0 -32
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/BackGesture.ios.kt +0 -38
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +0 -66
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -213
- package/gradle/libs.versions.toml +0 -69
- package/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/gradle/wrapper/gradle-wrapper.properties +0 -8
- package/gradle.properties +0 -26
- package/gradlew +0 -252
- package/gradlew.bat +0 -94
- package/ios-demo/README.md +0 -120
- package/local.properties +0 -8
- package/settings.gradle.kts +0 -64
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
package vn.momo.kits.navigation
|
|
2
|
-
|
|
3
|
-
import androidx.compose.animation.core.Animatable
|
|
4
|
-
import androidx.compose.animation.core.CubicBezierEasing
|
|
5
|
-
import androidx.compose.animation.core.tween
|
|
6
|
-
import androidx.compose.foundation.background
|
|
7
|
-
import androidx.compose.foundation.border
|
|
8
|
-
import androidx.compose.foundation.clickable
|
|
9
|
-
import androidx.compose.foundation.interaction.MutableInteractionSource
|
|
10
|
-
import androidx.compose.foundation.layout.Box
|
|
11
|
-
import androidx.compose.foundation.layout.fillMaxSize
|
|
12
|
-
import androidx.compose.foundation.layout.wrapContentSize
|
|
13
|
-
import androidx.compose.runtime.*
|
|
14
|
-
import androidx.compose.ui.Alignment
|
|
15
|
-
import androidx.compose.ui.Modifier
|
|
16
|
-
import androidx.compose.ui.draw.alpha
|
|
17
|
-
import androidx.compose.ui.draw.scale
|
|
18
|
-
import androidx.compose.ui.graphics.Color
|
|
19
|
-
import androidx.compose.ui.unit.dp
|
|
20
|
-
import kotlinx.coroutines.launch
|
|
21
|
-
import vn.momo.kits.application.LocalContext
|
|
22
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
23
|
-
import vn.momo.kits.const.Colors
|
|
24
|
-
import vn.momo.kits.modifier.conditional
|
|
25
|
-
import vn.momo.kits.modifier.noFeedbackClickable
|
|
26
|
-
import vn.momo.kits.navigation.tracking.ScreenTracker
|
|
27
|
-
import vn.momo.kits.platform.BackHandler
|
|
28
|
-
|
|
29
|
-
@Composable
|
|
30
|
-
internal fun ModalScreen(
|
|
31
|
-
content: @Composable () -> Unit,
|
|
32
|
-
barrierDismissible: Boolean = true,
|
|
33
|
-
onDismiss: (() -> Unit)? = null
|
|
34
|
-
) {
|
|
35
|
-
val navigator = LocalNavigator.current
|
|
36
|
-
|
|
37
|
-
val alpha = remember { Animatable(0f) }
|
|
38
|
-
val scale = remember { Animatable(0.8f) }
|
|
39
|
-
|
|
40
|
-
val coroutineScope = rememberCoroutineScope()
|
|
41
|
-
|
|
42
|
-
val maxApi = LocalMaxApi.current
|
|
43
|
-
val context = LocalContext.current
|
|
44
|
-
|
|
45
|
-
DisposableEffect(Unit) {
|
|
46
|
-
ScreenTracker.trackPopupDisplayed(
|
|
47
|
-
maxApi = maxApi,
|
|
48
|
-
context = context,
|
|
49
|
-
parentScreenName = ScreenTracker.getLastScreenName()
|
|
50
|
-
)
|
|
51
|
-
onDispose { }
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
fun openEvent() {
|
|
55
|
-
coroutineScope.launch {
|
|
56
|
-
launch {
|
|
57
|
-
alpha.animateTo(
|
|
58
|
-
targetValue = 1f,
|
|
59
|
-
animationSpec = tween(durationMillis = 250)
|
|
60
|
-
)
|
|
61
|
-
}
|
|
62
|
-
launch {
|
|
63
|
-
scale.animateTo(
|
|
64
|
-
targetValue = 1f,
|
|
65
|
-
animationSpec = tween(
|
|
66
|
-
durationMillis = 250,
|
|
67
|
-
easing = CubicBezierEasing(0.2f, 0.0f, 0f, 1f)
|
|
68
|
-
)
|
|
69
|
-
)
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
fun closeEvent() {
|
|
75
|
-
coroutineScope.launch {
|
|
76
|
-
alpha.animateTo(
|
|
77
|
-
targetValue = 0f,
|
|
78
|
-
animationSpec = tween(durationMillis = 200)
|
|
79
|
-
)
|
|
80
|
-
scale.animateTo(
|
|
81
|
-
targetValue = 0.8f,
|
|
82
|
-
animationSpec = tween(durationMillis = 200)
|
|
83
|
-
)
|
|
84
|
-
OverplayComponentRegistry.hardClearAfterDismiss()
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
LaunchedEffect(Unit) {
|
|
89
|
-
openEvent()
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
DisposableEffect(Unit) {
|
|
93
|
-
OverplayComponentRegistry.bindClose { closeEvent() }
|
|
94
|
-
onDispose {
|
|
95
|
-
onDismiss?.invoke()
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
BackHandler(enabled = true) {
|
|
100
|
-
closeEvent()
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
Box(
|
|
104
|
-
modifier = Modifier
|
|
105
|
-
.fillMaxSize()
|
|
106
|
-
.background(Color.Black.copy(alpha = 0.6f * alpha.value))
|
|
107
|
-
.noFeedbackClickable {
|
|
108
|
-
if(barrierDismissible) closeEvent()
|
|
109
|
-
},
|
|
110
|
-
contentAlignment = Alignment.Center
|
|
111
|
-
) {
|
|
112
|
-
Box(
|
|
113
|
-
modifier = Modifier
|
|
114
|
-
.scale(scale.value)
|
|
115
|
-
.alpha(alpha.value)
|
|
116
|
-
.wrapContentSize()
|
|
117
|
-
.conditional(IsShowBaseLineDebug) {
|
|
118
|
-
border(1.dp, Colors.blue_03)
|
|
119
|
-
}
|
|
120
|
-
.clickable(
|
|
121
|
-
indication = null,
|
|
122
|
-
interactionSource = remember { MutableInteractionSource() }
|
|
123
|
-
) {},
|
|
124
|
-
contentAlignment = Alignment.Center
|
|
125
|
-
) {
|
|
126
|
-
content()
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
package vn.momo.kits.navigation
|
|
2
|
-
|
|
3
|
-
import androidx.compose.foundation.gestures.ScrollableState
|
|
4
|
-
import androidx.compose.runtime.*
|
|
5
|
-
import androidx.compose.ui.graphics.Color
|
|
6
|
-
import vn.momo.kits.navigation.bottomtab.setBottomTabOption
|
|
7
|
-
import vn.momo.kits.navigation.component.*
|
|
8
|
-
|
|
9
|
-
class Navigation(
|
|
10
|
-
val id: Int = -1,
|
|
11
|
-
val bottomTabIndex: Int = -1,
|
|
12
|
-
val initOptions: NavigationOptions? = null,
|
|
13
|
-
private val registry: DynamicScreenRegistry? = null
|
|
14
|
-
) {
|
|
15
|
-
private val _options = mutableStateOf(initOptions ?: NavigationOptions())
|
|
16
|
-
val currentOptions: State<NavigationOptions> get() = _options
|
|
17
|
-
val options: NavigationOptions get() = _options.value
|
|
18
|
-
|
|
19
|
-
private val _isBottomTabRoot = mutableStateOf(false)
|
|
20
|
-
internal val isBottomTabRoot: Boolean get() = _isBottomTabRoot.value
|
|
21
|
-
internal fun markAsBottomTabRoot() { _isBottomTabRoot.value = true }
|
|
22
|
-
|
|
23
|
-
fun setOptions(
|
|
24
|
-
onBackHandler: (() -> Unit)? = null,
|
|
25
|
-
hiddenBack: Boolean? = null,
|
|
26
|
-
headerBackProps: HeaderBackProps? = null,
|
|
27
|
-
headerTitle: HeaderTitle? = null,
|
|
28
|
-
titlePosition: TitlePosition? = null,
|
|
29
|
-
headerRight: HeaderRight? = null,
|
|
30
|
-
headerType: HeaderType? = null,
|
|
31
|
-
scrollData: ScrollData? = null,
|
|
32
|
-
backgroundColor: Color? = null,
|
|
33
|
-
tintColor: Color? = null,
|
|
34
|
-
footerComponent: (@Composable () -> Unit)? = null,
|
|
35
|
-
footerTransparent: Boolean? = null,
|
|
36
|
-
footerUseMargin: Boolean? = null,
|
|
37
|
-
floatingButtonProps: FloatingButtonProps? = null,
|
|
38
|
-
keyboardOptions: KeyboardOptions? = null
|
|
39
|
-
) {
|
|
40
|
-
updateOptions(
|
|
41
|
-
options.copy(
|
|
42
|
-
onBackHandler = onBackHandler ?: options.onBackHandler,
|
|
43
|
-
hiddenBack = hiddenBack ?: options.hiddenBack,
|
|
44
|
-
headerBackProps = headerBackProps ?: options.headerBackProps,
|
|
45
|
-
headerTitle = headerTitle ?: options.headerTitle,
|
|
46
|
-
titlePosition = titlePosition ?: options.titlePosition,
|
|
47
|
-
headerRight = headerRight ?: options.headerRight,
|
|
48
|
-
headerType = headerType ?: options.headerType,
|
|
49
|
-
scrollData = scrollData ?: options.scrollData,
|
|
50
|
-
backgroundColor = backgroundColor ?: options.backgroundColor,
|
|
51
|
-
tintColor = tintColor ?: options.tintColor,
|
|
52
|
-
footerComponent = footerComponent ?: options.footerComponent,
|
|
53
|
-
footerTransparent = footerTransparent ?: options.footerTransparent,
|
|
54
|
-
footerUseMargin = footerUseMargin ?: options.footerUseMargin,
|
|
55
|
-
floatingButtonProps = floatingButtonProps ?: options.floatingButtonProps,
|
|
56
|
-
keyboardOptions = keyboardOptions ?: options.keyboardOptions,
|
|
57
|
-
)
|
|
58
|
-
)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
fun setOptions(newOptions: NavigationOptions) {
|
|
62
|
-
updateOptions(newOptions)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
private fun updateOptions(updated: NavigationOptions) {
|
|
66
|
-
_options.value = updated
|
|
67
|
-
if (bottomTabIndex != -1) setBottomTabOption(bottomTabIndex, updated)
|
|
68
|
-
if (id != -1) registry?.setOptions(id, updated)
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
val LocalNavigation = staticCompositionLocalOf<Navigation> {
|
|
73
|
-
error("No NavigationStack provided")
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
@Stable
|
|
77
|
-
data class NavigationOptions(
|
|
78
|
-
val screenName: String? = null,
|
|
79
|
-
val onBackHandler: (() -> Unit)? = null,
|
|
80
|
-
val hiddenBack: Boolean = false,
|
|
81
|
-
val headerBackProps: HeaderBackProps = HeaderBackProps(),
|
|
82
|
-
val headerTitle: HeaderTitle = HeaderTitle.Default("Stack"),
|
|
83
|
-
val titlePosition: TitlePosition = TitlePosition.LEFT,
|
|
84
|
-
val headerRight: HeaderRight = HeaderRight.Toolkit(),
|
|
85
|
-
val headerType: HeaderType = HeaderType.Default(),
|
|
86
|
-
val scrollData: ScrollData = ScrollData(),
|
|
87
|
-
val backgroundColor: Color? = null,
|
|
88
|
-
val tintColor: Color? = null,
|
|
89
|
-
val footerComponent: @Composable (() -> Unit)? = null,
|
|
90
|
-
val footerTransparent: Boolean = false,
|
|
91
|
-
val footerUseMargin: Boolean = true,
|
|
92
|
-
val floatingButtonProps: FloatingButtonProps? = null,
|
|
93
|
-
val keyboardOptions: KeyboardOptions = KeyboardOptions()
|
|
94
|
-
) {
|
|
95
|
-
internal fun hasFooter() : Boolean = footerComponent != null
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
data class KeyboardOptions(
|
|
99
|
-
val keyboardShouldPersistTaps: Boolean = false,
|
|
100
|
-
val useAvoidKeyboard: Boolean = true
|
|
101
|
-
)
|
|
102
|
-
data class ScrollData(
|
|
103
|
-
val scrollable: Boolean = true,
|
|
104
|
-
val scrollState: ScrollableState? = null,
|
|
105
|
-
val scrollToTopCallback: (() -> Unit)? = null,
|
|
106
|
-
)
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
package vn.momo.kits.navigation
|
|
2
|
-
|
|
3
|
-
import androidx.compose.animation.core.tween
|
|
4
|
-
import androidx.compose.animation.fadeIn
|
|
5
|
-
import androidx.compose.animation.slideInVertically
|
|
6
|
-
import androidx.compose.animation.slideOutVertically
|
|
7
|
-
import androidx.compose.runtime.Composable
|
|
8
|
-
import androidx.compose.runtime.CompositionLocalProvider
|
|
9
|
-
import androidx.compose.runtime.DisposableEffect
|
|
10
|
-
import androidx.compose.runtime.LaunchedEffect
|
|
11
|
-
import androidx.compose.runtime.mutableStateOf
|
|
12
|
-
import androidx.compose.runtime.remember
|
|
13
|
-
import androidx.compose.runtime.saveable.rememberSaveable
|
|
14
|
-
import androidx.compose.runtime.staticCompositionLocalOf
|
|
15
|
-
import androidx.compose.ui.unit.Dp
|
|
16
|
-
import androidx.navigation.compose.NavHost
|
|
17
|
-
import androidx.navigation.compose.composable
|
|
18
|
-
import androidx.navigation.compose.rememberNavController
|
|
19
|
-
import androidx.navigation.toRoute
|
|
20
|
-
import kotlinx.coroutines.delay
|
|
21
|
-
import kotlinx.coroutines.flow.collectLatest
|
|
22
|
-
import vn.momo.kits.application.DesignSystemConfig
|
|
23
|
-
import vn.momo.kits.application.KitDesignSystemConfig
|
|
24
|
-
import vn.momo.kits.application.LocalContext
|
|
25
|
-
import vn.momo.kits.application.LocalDesignSystemConfig
|
|
26
|
-
import vn.momo.kits.application.LocalLocalize
|
|
27
|
-
import vn.momo.kits.application.Localize
|
|
28
|
-
import vn.momo.kits.application.MiniAppContext
|
|
29
|
-
import vn.momo.kits.const.AppNavigationBar
|
|
30
|
-
import vn.momo.kits.const.AppStatusBar
|
|
31
|
-
import vn.momo.kits.const.AppTheme
|
|
32
|
-
import vn.momo.kits.const.Theme
|
|
33
|
-
import vn.momo.kits.const.defaultTheme
|
|
34
|
-
import vn.momo.kits.platform.ProvideNavigationEventDispatcherOwner
|
|
35
|
-
import vn.momo.kits.platform.ProvideOsFontScale
|
|
36
|
-
import vn.momo.kits.utils.getAppStatusBarHeight
|
|
37
|
-
import vn.momo.kits.utils.getNavigationBarHeight
|
|
38
|
-
import vn.momo.maxapi.IMaxApi
|
|
39
|
-
import kotlin.time.Duration.Companion.milliseconds
|
|
40
|
-
|
|
41
|
-
@Composable
|
|
42
|
-
fun NavigationContainer(
|
|
43
|
-
initialScreenName: String,
|
|
44
|
-
initialScreen: @Composable () -> Unit,
|
|
45
|
-
maxApi: IMaxApi,
|
|
46
|
-
options: NavigationOptions? = null,
|
|
47
|
-
initialTheme: Theme = defaultTheme,
|
|
48
|
-
miniAppContext: MiniAppContext? = null,
|
|
49
|
-
setNavigator: ((Navigator) -> Unit)? = null,
|
|
50
|
-
statusBarHeight: Dp? = null,
|
|
51
|
-
localize: Localize? = null,
|
|
52
|
-
designSystemConfig: DesignSystemConfig? = null,
|
|
53
|
-
) {
|
|
54
|
-
val navController = rememberNavController()
|
|
55
|
-
val registry = remember { DynamicScreenRegistry() }
|
|
56
|
-
val navigator = remember { Navigator(navController = navController, maxApi = maxApi, registry = registry) }
|
|
57
|
-
val statusBarHeight = statusBarHeight ?: getAppStatusBarHeight()
|
|
58
|
-
val navigationBarHeight = getNavigationBarHeight()
|
|
59
|
-
|
|
60
|
-
val parentContext = LocalContext.current
|
|
61
|
-
val mergedContext = MiniAppContext.merge(parentContext, miniAppContext)
|
|
62
|
-
|
|
63
|
-
val stackTransition = remember { StackTransitionCoordinator() }
|
|
64
|
-
val theme = remember { mutableStateOf(initialTheme) }
|
|
65
|
-
val resolvedDesignSystemConfig =
|
|
66
|
-
designSystemConfig ?: LocalDesignSystemConfig.current ?: KitDesignSystemConfig.config
|
|
67
|
-
val headerBar = resolvedDesignSystemConfig?.headerBar
|
|
68
|
-
// RN parity: the theme's own header image wins; config headerBar is only the fallback.
|
|
69
|
-
val resolvedTheme = remember(theme.value, headerBar) {
|
|
70
|
-
if (theme.value.isHeaderImage() || headerBar.isNullOrEmpty()) {
|
|
71
|
-
theme.value
|
|
72
|
-
} else {
|
|
73
|
-
theme.value.copy(assets = theme.value.assets.copy(headerBackground = headerBar))
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
val fallbackLocalize = remember { Localize() }
|
|
77
|
-
|
|
78
|
-
val resolvedLocalize = localize ?: fallbackLocalize
|
|
79
|
-
|
|
80
|
-
LaunchedEffect(maxApi, resolvedLocalize) {
|
|
81
|
-
val api = maxApi ?: return@LaunchedEffect
|
|
82
|
-
runCatching {
|
|
83
|
-
api.getLanguage(callback = { data ->
|
|
84
|
-
if (parseLanguage(data) == Localize.EN) {
|
|
85
|
-
resolvedLocalize.changeLanguage(Localize.EN)
|
|
86
|
-
}
|
|
87
|
-
})
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
val screenId = rememberSaveable { registry.nextId() }
|
|
92
|
-
registry.bind(screenId, initialScreenName, initialScreen, options)
|
|
93
|
-
val startDestination = remember(screenId) { DynamicScreenRoute(screenId) }
|
|
94
|
-
|
|
95
|
-
ProvideOsFontScale {
|
|
96
|
-
ProvideNavigationEventDispatcherOwner(navigator) {
|
|
97
|
-
CompositionLocalProvider(
|
|
98
|
-
LocalNavigator provides navigator,
|
|
99
|
-
LocalDynamicScreenRegistry provides registry,
|
|
100
|
-
LocalMaxApi provides maxApi,
|
|
101
|
-
AppTheme provides resolvedTheme,
|
|
102
|
-
AppStatusBar provides statusBarHeight,
|
|
103
|
-
AppNavigationBar provides navigationBarHeight,
|
|
104
|
-
LocalContext provides mergedContext,
|
|
105
|
-
LocalDesignSystemConfig provides resolvedDesignSystemConfig,
|
|
106
|
-
LocalLocalize provides resolvedLocalize,
|
|
107
|
-
LocalStackTransition provides stackTransition,
|
|
108
|
-
) {
|
|
109
|
-
LaunchedEffect(Unit) {
|
|
110
|
-
setNavigator?.invoke(navigator)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
SwipeBackHaptic(maxApi)
|
|
114
|
-
|
|
115
|
-
LaunchedEffect(navController, registry) {
|
|
116
|
-
navController.currentBackStack.collectLatest { entries ->
|
|
117
|
-
delay(STACK_TRANSITION_DURATION.milliseconds)
|
|
118
|
-
val aliveIds = entries.mapNotNullTo(mutableSetOf()) { entry ->
|
|
119
|
-
runCatching { entry.toRoute<DynamicScreenRoute>().id }.getOrNull()
|
|
120
|
-
?: runCatching { entry.toRoute<DynamicDialogRoute>().id }.getOrNull()
|
|
121
|
-
}
|
|
122
|
-
aliveIds.add(screenId)
|
|
123
|
-
registry.retainOnly(aliveIds)
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
NavHost(
|
|
128
|
-
navController,
|
|
129
|
-
startDestination = startDestination,
|
|
130
|
-
enterTransition = { stackEnter() },
|
|
131
|
-
exitTransition = { stackExit() },
|
|
132
|
-
popEnterTransition = { stackPopEnter() },
|
|
133
|
-
popExitTransition = { stackPopExit() },
|
|
134
|
-
) {
|
|
135
|
-
composable<DynamicScreenRoute> { backStackEntry ->
|
|
136
|
-
val route = backStackEntry.toRoute<DynamicScreenRoute>()
|
|
137
|
-
val screen = registry.getScreen(route.id)
|
|
138
|
-
|
|
139
|
-
if (screen != null) {
|
|
140
|
-
StackTransitionDecor(id = route.id, isStackRoute = true) {
|
|
141
|
-
StackScreen(
|
|
142
|
-
id = route.id,
|
|
143
|
-
name = screen.name,
|
|
144
|
-
content = screen.content,
|
|
145
|
-
navigationOptions = screen.options
|
|
146
|
-
)
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
composable<DynamicDialogRoute>(
|
|
152
|
-
enterTransition = {
|
|
153
|
-
slideInVertically(
|
|
154
|
-
animationSpec = tween(300),
|
|
155
|
-
initialOffsetY = { it }
|
|
156
|
-
)
|
|
157
|
-
},
|
|
158
|
-
exitTransition = null,
|
|
159
|
-
popEnterTransition = { fadeIn(animationSpec = tween(0)) },
|
|
160
|
-
popExitTransition = {
|
|
161
|
-
slideOutVertically(
|
|
162
|
-
animationSpec = tween(300),
|
|
163
|
-
targetOffsetY = { it }
|
|
164
|
-
)
|
|
165
|
-
}
|
|
166
|
-
) { backStackEntry ->
|
|
167
|
-
val route = backStackEntry.toRoute<DynamicDialogRoute>()
|
|
168
|
-
val screen = registry.getScreen(route.id)
|
|
169
|
-
|
|
170
|
-
if (screen != null) {
|
|
171
|
-
StackTransitionDecor(id = route.id, isStackRoute = false) {
|
|
172
|
-
StackScreen(
|
|
173
|
-
id = route.id,
|
|
174
|
-
name = screen.name,
|
|
175
|
-
content = screen.content,
|
|
176
|
-
navigationOptions = screen.options
|
|
177
|
-
)
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
DisposableEffect(Unit) {
|
|
187
|
-
onDispose {
|
|
188
|
-
navigator.dispose()
|
|
189
|
-
registry.unregisterScreen(screenId)
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
val LocalMaxApi = staticCompositionLocalOf<IMaxApi?> { null }
|
|
195
|
-
|
|
196
|
-
private fun parseLanguage(raw: Map<String, Any?>?): String? {
|
|
197
|
-
val code = (raw?.get("response") as? String)?.trim()?.lowercase()
|
|
198
|
-
if (code.isNullOrEmpty()) return null
|
|
199
|
-
return if (code.startsWith(Localize.EN)) Localize.EN else Localize.VI
|
|
200
|
-
}
|
|
201
|
-
|