@momo-kits/native-kits 0.161.1-beta.15-debug → 0.161.2-beta.1

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.
Files changed (139) hide show
  1. package/ios/Application/ApplicationEnvironment.swift +2 -6
  2. package/ios/Input/Input.swift +50 -21
  3. package/ios/Input/InputPhoneNumber.swift +17 -17
  4. package/ios/StatusBarTap/StatusBarTap.h +13 -0
  5. package/ios/StatusBarTap/StatusBarTap.m +75 -0
  6. package/ios/Typography/Text.swift +19 -14
  7. package/ios/Typography/Typography.swift +22 -1
  8. package/ios/native-kits.podspec +2 -1
  9. package/package.json +1 -1
  10. package/build.gradle.kts +0 -11
  11. package/compose/build.gradle.kts +0 -180
  12. package/compose/build.gradle.kts.backup +0 -180
  13. package/compose/compose.podspec +0 -47
  14. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +0 -116
  15. package/compose/src/commonMain/composeResources/font/momosignature.otf +0 -0
  16. package/compose/src/commonMain/composeResources/font/momotrustdisplay.otf +0 -0
  17. package/compose/src/commonMain/composeResources/font/sfprotext_black.otf +0 -0
  18. package/compose/src/commonMain/composeResources/font/sfprotext_black.ttf +0 -0
  19. package/compose/src/commonMain/composeResources/font/sfprotext_bold.ttf +0 -0
  20. package/compose/src/commonMain/composeResources/font/sfprotext_heavy.ttf +0 -0
  21. package/compose/src/commonMain/composeResources/font/sfprotext_light.ttf +0 -0
  22. package/compose/src/commonMain/composeResources/font/sfprotext_medium.ttf +0 -0
  23. package/compose/src/commonMain/composeResources/font/sfprotext_regular.ttf +0 -0
  24. package/compose/src/commonMain/composeResources/font/sfprotext_semibold.ttf +0 -0
  25. package/compose/src/commonMain/composeResources/font/sfprotext_thin.otf +0 -0
  26. package/compose/src/commonMain/composeResources/font/sfprotext_thin.ttf +0 -0
  27. package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.otf +0 -0
  28. package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.ttf +0 -0
  29. package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +0 -57
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +0 -115
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +0 -201
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +0 -222
  33. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +0 -48
  34. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +0 -86
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +0 -76
  36. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +0 -76
  37. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +0 -305
  38. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +0 -33
  39. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +0 -720
  40. package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +0 -121
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +0 -402
  42. package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +0 -69
  43. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +0 -157
  44. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +0 -85
  45. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +0 -32
  46. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +0 -340
  47. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +0 -194
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +0 -357
  49. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +0 -123
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -94
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +0 -136
  52. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +0 -224
  53. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +0 -543
  54. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +0 -23
  55. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +0 -76
  56. package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +0 -148
  57. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +0 -188
  58. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +0 -116
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +0 -448
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +0 -172
  61. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +0 -255
  62. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +0 -231
  63. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +0 -233
  64. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +0 -254
  65. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +0 -241
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +0 -364
  67. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +0 -108
  68. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +0 -56
  69. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +0 -41
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +0 -92
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +0 -40
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +0 -352
  73. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +0 -103
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +0 -338
  75. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +0 -70
  76. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +0 -87
  77. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +0 -96
  78. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +0 -348
  79. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +0 -256
  80. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +0 -494
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +0 -131
  82. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +0 -215
  83. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +0 -96
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +0 -531
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +0 -92
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +0 -130
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +0 -214
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +0 -590
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +0 -177
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +0 -192
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +0 -205
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +0 -29
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +0 -239
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +0 -191
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +0 -306
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -16
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -188
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -270
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -2
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -35
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -2
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -57
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -68
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +0 -11
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +0 -14
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -50
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +0 -51
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +0 -253
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -133
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -99
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -168
  113. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -333
  114. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -552
  115. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -161
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +0 -243
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +0 -86
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +0 -187
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +0 -279
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -80
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -306
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -32
  123. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -370
  124. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +0 -131
  125. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +0 -167
  126. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -45
  127. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
  128. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -62
  129. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +0 -15
  130. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -105
  131. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -176
  132. package/gradle/libs.versions.toml +0 -58
  133. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  134. package/gradle/wrapper/gradle-wrapper.properties +0 -8
  135. package/gradle.properties +0 -26
  136. package/gradlew +0 -252
  137. package/gradlew.bat +0 -94
  138. package/local.properties +0 -8
  139. package/settings.gradle.kts +0 -52
@@ -1,121 +0,0 @@
1
- package vn.momo.kits.application
2
-
3
- import androidx.compose.foundation.layout.Box
4
- import androidx.compose.foundation.layout.fillMaxSize
5
- import androidx.compose.foundation.layout.wrapContentSize
6
- import androidx.compose.runtime.Composable
7
- import androidx.compose.runtime.CompositionLocalProvider
8
- import androidx.compose.runtime.LaunchedEffect
9
- import androidx.compose.runtime.getValue
10
- import androidx.compose.runtime.mutableStateOf
11
- import androidx.compose.runtime.remember
12
- import androidx.compose.runtime.setValue
13
- import androidx.compose.runtime.staticCompositionLocalOf
14
- import androidx.compose.ui.Modifier
15
- import androidx.compose.ui.unit.Dp
16
- import vn.momo.kits.const.AppStatusBar
17
- import vn.momo.kits.const.AppTheme
18
- import vn.momo.kits.const.Theme
19
- import vn.momo.kits.const.ThemeAssets
20
- import vn.momo.kits.const.defaultTheme
21
- import vn.momo.kits.modifier.DeprecatedModifier
22
- import vn.momo.kits.platform.getStatusBarHeight
23
-
24
- @Deprecated("Use IMaxApi instead", ReplaceWith("IMaxApi"))
25
- interface ComposeApi {
26
- fun request(funcName: String, params: Any?): String
27
- fun request(funcName: String, params: Any?, onResponse: ((String) -> Unit)?): String
28
- fun requestCallback(funcName: String, params: Any?, onResponse: ((String) -> Unit)?)
29
- fun removeCallback(id: String)
30
- }
31
-
32
- class Navigator {
33
- fun push(content: @Composable () -> Unit) {
34
- //implement
35
- }
36
-
37
- fun present(content: @Composable () -> Unit) {
38
- //implement
39
- }
40
-
41
- fun reset(content: @Composable () -> Unit) {
42
- //implement
43
- }
44
-
45
- fun pop() {
46
- //implement
47
- }
48
-
49
- fun replace(content: @Composable () -> Unit) {
50
- //implement
51
- }
52
-
53
- fun popToTop() {
54
- //implement
55
- }
56
-
57
- fun showModal(
58
- onClose: () -> Unit = {},
59
- canBackgroundClose: Boolean = true,
60
- content: @Composable () -> Unit,
61
- ) {
62
- //implement
63
- }
64
-
65
- fun showBottomSheet(content: @Composable () -> Unit) {
66
- //implement
67
- }
68
- }
69
-
70
-
71
-
72
-
73
- @Deprecated("Use LocalApi instead", ReplaceWith("LocalApi"))
74
- val PlatformApi = staticCompositionLocalOf<Any?> { null }
75
-
76
-
77
- @Deprecated("Use NavigationContainer instead", ReplaceWith("NavigationContainer"))
78
- @Composable
79
- fun ApplicationContainer(
80
- theme: Theme = defaultTheme,
81
- composeApi: ComposeApi? = null,
82
- statusBarHeight: Dp? = AppStatusBar.current,
83
- applicationContext: MiniAppContext? = null,
84
- config: KitConfig? = null,
85
- language: String? = null,
86
- isWhiteList: Boolean = false,
87
- content: @Composable () -> Unit,
88
- ) {
89
- var appTheme by remember { mutableStateOf(theme) }
90
-
91
- LaunchedEffect(Unit) {
92
- try {
93
- val headerBar = config?.headerBar
94
- if (headerBar != null && appTheme.assets.headerBackground == null) {
95
- appTheme = appTheme.copy(
96
- assets = ThemeAssets(
97
- headerBackground = headerBar
98
- )
99
- )
100
- }
101
- } catch (e: Exception) {
102
- print("@@ == NavigationContainer get config error $e")
103
- }
104
- }
105
-
106
- val appStatusBarHeight = statusBarHeight ?: getStatusBarHeight()
107
-
108
- CompositionLocalProvider(
109
- AppTheme provides appTheme,
110
- PlatformApi provides composeApi,
111
- AppStatusBar provides appStatusBarHeight,
112
- ApplicationContext provides applicationContext,
113
- AppConfig provides config,
114
- AppLanguage provides language,
115
- ) {
116
- Box(Modifier.wrapContentSize().then(DeprecatedModifier())) {
117
- content()
118
- }
119
- }
120
-
121
- }
@@ -1,402 +0,0 @@
1
- package vn.momo.kits.application
2
-
3
- import androidx.compose.animation.core.Animatable
4
- import androidx.compose.animation.core.animateFloatAsState
5
- import androidx.compose.animation.core.tween
6
- import androidx.compose.foundation.ScrollState
7
- import androidx.compose.foundation.background
8
- import androidx.compose.foundation.gestures.detectTapGestures
9
- import androidx.compose.foundation.layout.Arrangement
10
- import androidx.compose.foundation.layout.Box
11
- import androidx.compose.foundation.layout.Column
12
- import androidx.compose.foundation.layout.Spacer
13
- import androidx.compose.foundation.layout.WindowInsets
14
- import androidx.compose.foundation.layout.asPaddingValues
15
- import androidx.compose.foundation.layout.aspectRatio
16
- import androidx.compose.foundation.layout.fillMaxSize
17
- import androidx.compose.foundation.layout.fillMaxWidth
18
- import androidx.compose.foundation.layout.height
19
- import androidx.compose.foundation.layout.ime
20
- import androidx.compose.foundation.layout.imePadding
21
- import androidx.compose.foundation.layout.navigationBars
22
- import androidx.compose.foundation.layout.offset
23
- import androidx.compose.foundation.layout.padding
24
- import androidx.compose.foundation.rememberScrollState
25
- import androidx.compose.foundation.verticalScroll
26
- import androidx.compose.runtime.Composable
27
- import androidx.compose.runtime.CompositionLocalProvider
28
- import androidx.compose.runtime.DisposableEffect
29
- import androidx.compose.runtime.LaunchedEffect
30
- import androidx.compose.runtime.getValue
31
- import androidx.compose.runtime.mutableStateOf
32
- import androidx.compose.runtime.remember
33
- import androidx.compose.runtime.setValue
34
- import androidx.compose.runtime.staticCompositionLocalOf
35
- import androidx.compose.ui.Alignment
36
- import androidx.compose.ui.Modifier
37
- import androidx.compose.ui.graphics.Color
38
- import androidx.compose.ui.input.pointer.pointerInput
39
- import androidx.compose.ui.layout.LayoutCoordinates
40
- import androidx.compose.ui.layout.onGloballyPositioned
41
- import androidx.compose.ui.platform.LocalDensity
42
- import androidx.compose.ui.platform.LocalSoftwareKeyboardController
43
- import androidx.compose.ui.unit.Dp
44
- import androidx.compose.ui.unit.IntOffset
45
- import androidx.compose.ui.unit.dp
46
- import androidx.compose.ui.zIndex
47
- import kotlinx.coroutines.CoroutineScope
48
- import kotlinx.coroutines.Dispatchers
49
- import kotlinx.coroutines.SupervisorJob
50
- import kotlinx.coroutines.cancel
51
- import kotlinx.coroutines.delay
52
- import kotlinx.coroutines.launch
53
- import vn.momo.kits.components.InputSearchProps
54
- import vn.momo.kits.const.AppNavigationBar
55
- import vn.momo.kits.const.AppTheme
56
- import vn.momo.kits.const.Colors
57
- import vn.momo.kits.const.Spacing
58
- import vn.momo.kits.modifier.DeprecatedModifier
59
- import vn.momo.kits.modifier.conditional
60
- import vn.momo.kits.modifier.shadow
61
- import vn.momo.kits.navigation.component.SnackBar
62
- import vn.momo.kits.platform.getOSVersion
63
- import vn.momo.kits.utils.getAppStatusBarHeight
64
-
65
- enum class HeaderType {
66
- DEFAULT,
67
- EXTENDED,
68
- NONE
69
- }
70
-
71
- const val HEADER_HEIGHT = 52
72
-
73
- @Deprecated("Use NavigationContainer(StackScreen) instead", ReplaceWith("NavigationContainer(StackScreen)"))
74
- @Composable
75
- fun Screen(
76
- backgroundColor: Color? = null,
77
- tintColor: Color? = null,
78
- headerTransparent: Boolean = false,
79
- fullScreenContent: Boolean = false,
80
- isBack: Boolean = true,
81
- headerType: HeaderType = HeaderType.DEFAULT,
82
- verticalArrangement: Arrangement.Vertical = Arrangement.Top,
83
- horizontalAlignment: Alignment.Horizontal = Alignment.Start,
84
- title: String = "Stack",
85
- titlePosition: TitlePosition = TitlePosition.LEFT,
86
- goBack: (() -> Unit)? = null,
87
- scrollable: Boolean = true,
88
- scrollState: ScrollState = rememberScrollState(),
89
- onContentLayout: ((LayoutCoordinates) -> Unit)? = null,
90
- useAvoidKeyboard: Boolean = true,
91
- footer: @Composable (() -> Unit)? = null,
92
- headerRight: @Composable (() -> Unit)? = null,
93
- fabProps: FabProps? = null,
94
- animatedHeader: AnimatedHeader? = null,
95
- layoutOffset: Dp = 56.dp,
96
- inputSearchProps: InputSearchProps? = null,
97
- useAnimationSearch: Boolean = false,
98
- headerRightWidth: Dp = 0.dp,
99
- content: @Composable () -> Unit,
100
- ) {
101
- val statusBarHeight = getAppStatusBarHeight()
102
- val keyboardController = LocalSoftwareKeyboardController.current
103
-
104
- val isKeyboardVisible = isKeyboardVisible()
105
- val indicator = getAppStatusBarHeight()
106
- val bottomPadding = if (isKeyboardVisible) 0.dp else indicator
107
-
108
- val headerHeight = if (animatedHeader !== null)
109
- with(LocalDensity.current) { layoutOffset.roundToPx() }
110
- else HEADER_HEIGHT
111
- val opacity by animateFloatAsState(
112
- targetValue = ((scrollState.value.toFloat() / headerHeight)).coerceIn(0f, 1f),
113
- )
114
-
115
- val headerAnimated =
116
- @Composable {
117
- Box(
118
- modifier = Modifier
119
- .fillMaxWidth()
120
- .aspectRatio(animatedHeader?.aspectRatio?.value ?: AnimatedHeaderRatio.RATIO_16_9.value)
121
- ) {
122
- animatedHeader?.composable?.invoke(scrollState.value)
123
- }
124
- }
125
- val helper = remember { ScreenHelper() }
126
-
127
- DisposableEffect(Unit) {
128
- onDispose { helper.dispose() }
129
- }
130
-
131
- CompositionLocalProvider(
132
- LocalScreenHelper provides helper
133
- ) {
134
- Box(
135
- Modifier.fillMaxSize()
136
- .background(backgroundColor ?: AppTheme.current.colors.background.default)
137
- .conditional(useAvoidKeyboard && getOSVersion() > 29) {
138
- imePadding()
139
- }.then(DeprecatedModifier())
140
- ) {
141
- val footerHeightPx = remember { mutableStateOf(0) }
142
-
143
- Box(Modifier.zIndex(1f)) {
144
- if (animatedHeader === null) {
145
- HeaderBackground(
146
- headerType = headerType,
147
- scrollState = scrollState.value,
148
- headerTransparent = headerTransparent
149
- )
150
- }
151
- }
152
-
153
- Box(Modifier.zIndex(5f)) {
154
- Header(
155
- headerType = headerType,
156
- title = title,
157
- titlePosition = titlePosition,
158
- headerRight = headerRight,
159
- headerRightWidth = headerRightWidth,
160
- goBack = goBack,
161
- opacity = opacity,
162
- animatedHeader = animatedHeader,
163
- inputSearchProps = inputSearchProps,
164
- scrollState = scrollState.value,
165
- useAnimationSearch = useAnimationSearch,
166
- tintColor = tintColor
167
- )
168
- }
169
-
170
- Box(Modifier.zIndex(2f).fillMaxSize()){
171
- Column(
172
- modifier = Modifier.fillMaxSize()
173
- .padding( top = when {
174
- animatedHeader != null -> 0.dp
175
- headerType == HeaderType.NONE -> 0.dp
176
- fullScreenContent -> 0.dp
177
- else -> statusBarHeight + HEADER_HEIGHT.dp
178
- })
179
- .pointerInput(Unit) {
180
- detectTapGestures(onTap = {
181
- keyboardController?.hide()
182
- })
183
- }
184
- .zIndex(1f),
185
- ) {
186
-
187
- Column(
188
- modifier = Modifier
189
- .conditional(scrollable) { weight(1f) }
190
- .conditional(onContentLayout != null) {
191
- onGloballyPositioned(onContentLayout ?: {})
192
- }
193
- .conditional(scrollable) { verticalScroll(scrollState) },
194
- verticalArrangement = verticalArrangement,
195
- horizontalAlignment = horizontalAlignment
196
- ) {
197
- Box {
198
- if (animatedHeader !== null) headerAnimated()
199
- Column {
200
- if (animatedHeader !== null) {
201
- Spacer(modifier = Modifier.padding(top = statusBarHeight + HEADER_HEIGHT.dp + layoutOffset))
202
- }
203
-
204
- if (useAnimationSearch && inputSearchProps != null && headerType == HeaderType.EXTENDED) {
205
- Spacer(modifier = Modifier.padding(top = (HEADER_HEIGHT.dp + Spacing.S)))
206
- }
207
- content()
208
- }
209
- }
210
- }
211
-
212
- footer?.let {
213
- val footerHeight = with(LocalDensity.current) { footerHeightPx.value.toDp() }
214
- Spacer(Modifier.height(footerHeight))
215
- }
216
- }
217
- }
218
-
219
- Box(Modifier.zIndex(4f).align(Alignment.BottomCenter)) {
220
- footer?.let {
221
- Footer(
222
- footer = footer,
223
- bottom = bottomPadding,
224
- onFooterMeasured = { footerHeightPx.value = it }
225
- )
226
- }
227
- }
228
-
229
- Column (Modifier.zIndex(6f)) {
230
- if (fabProps != null) {
231
- FloatingButton(
232
- scrollPosition = fabProps.scrollState?.value ?: scrollState.value,
233
- onClick = fabProps.onClick,
234
- containerColor = AppTheme.current.colors.primary,
235
- bottom = fabProps.bottom
236
- ?: if (footer != null) bottomPadding + 76.dp else bottomPadding + 12.dp,
237
- icon = fabProps.icon,
238
- iconColor = fabProps.iconColor,
239
- text = fabProps.label,
240
- size = fabProps.size,
241
- position = fabProps.position ?: FABPosition.END,
242
- )
243
- }
244
- }
245
-
246
- Box(
247
- modifier = Modifier
248
- .align(Alignment.BottomCenter)
249
- .zIndex(3f)
250
- ) {
251
- ScreenSnackBarHost(if (footer == null) 0 else footerHeightPx.value)
252
- }
253
- }
254
- }
255
- }
256
-
257
- @Composable
258
- internal fun isKeyboardVisible(): Boolean {
259
- val ime = WindowInsets.ime
260
- val density = LocalDensity.current
261
- val bottom = ime.getBottom(density)
262
- return bottom > 0
263
- }
264
-
265
- @Composable
266
- fun Footer(
267
- footer: @Composable (() -> Unit)? = null,
268
- bottom: Dp = 0.dp,
269
- onFooterMeasured: ((Int) -> Unit)? = null
270
- ) {
271
- Box(
272
- Modifier
273
- .shadow(
274
- color = Colors.black_20.copy(alpha = 0.05f),
275
- blurRadius = 24f,
276
- offsetX = 0.dp,
277
- offsetY = (-4).dp
278
- )
279
- .background(AppTheme.current.colors.background.surface)
280
- .onGloballyPositioned {
281
- onFooterMeasured?.invoke(it.size.height)
282
- }
283
- ) {
284
- Box(
285
- Modifier.fillMaxWidth()
286
- .padding(bottom = bottom)
287
- .padding(vertical = Spacing.S, horizontal = Spacing.M)
288
- ) {
289
- footer?.invoke()
290
- }
291
- }
292
- }
293
-
294
-
295
- class ScreenHelper {
296
-
297
- private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
298
-
299
- internal var snackBarState by mutableStateOf<SnackBarData?>(null)
300
-
301
- internal var requestHide by mutableStateOf(false)
302
-
303
- fun showSnackBar(snackBar: SnackBar, onDismiss: (() -> Unit)? = null) {
304
- scope.launch {
305
- requestHide = false
306
- snackBarState = SnackBarData(snackBar, onDismiss)
307
- }
308
- }
309
-
310
- fun hideSnackBar() {
311
- scope.launch {
312
- requestHide = true
313
- }
314
- }
315
-
316
- internal fun removeSnackBarNow() {
317
- snackBarState = null
318
- requestHide = false
319
- }
320
-
321
- fun dispose() {
322
- scope.cancel()
323
- }
324
- }
325
- data class SnackBarData(
326
- val type: SnackBar,
327
- val onDismiss: (() -> Unit)?
328
- )
329
-
330
- val LocalScreenHelper = staticCompositionLocalOf<ScreenHelper> {
331
- error("No Screen helper provided")
332
- }
333
-
334
- @Composable
335
- fun ScreenSnackBarHost(footerHeightPx: Int) {
336
- val helper = LocalScreenHelper.current
337
- val snackBarData = helper.snackBarState ?: return
338
- val density = LocalDensity.current
339
- val navigationBar = AppNavigationBar.current
340
-
341
- val footerHeight = if (footerHeightPx > 0) {
342
- footerHeightPx
343
- } else {
344
- with(density) {
345
- navigationBar.toPx()
346
- }
347
- }.toInt()
348
-
349
- var startPosition by remember { mutableStateOf(Float.MAX_VALUE) }
350
- val targetPosition = 0f
351
-
352
- var offsetY by remember { mutableStateOf(Animatable(startPosition)) }
353
-
354
- LaunchedEffect(startPosition) {
355
- if (startPosition != Float.MAX_VALUE){
356
- offsetY.snapTo(startPosition)
357
- offsetY.animateTo(targetPosition, tween(350))
358
- }
359
- }
360
-
361
- LaunchedEffect(helper.requestHide) {
362
- if (helper.requestHide) {
363
- offsetY.animateTo(startPosition, tween(200))
364
- helper.removeSnackBarNow()
365
- snackBarData.onDismiss?.invoke()
366
- }
367
- }
368
-
369
- LaunchedEffect(snackBarData.type.duration) {
370
- val duration = snackBarData.type.duration
371
- if (duration != null) {
372
- delay(duration)
373
- helper.hideSnackBar()
374
- }
375
- }
376
-
377
- DisposableEffect(Unit) {
378
- onDispose { snackBarData.onDismiss?.invoke() }
379
- }
380
-
381
- Box(
382
- modifier = Modifier
383
- .offset { IntOffset(0, offsetY.value.toInt() - footerHeight) }
384
- .onGloballyPositioned {
385
- if (startPosition != it.size.height.toFloat()) {
386
- startPosition = it.size.height.toFloat()
387
- offsetY = Animatable(startPosition)
388
- }
389
- }
390
- .fillMaxWidth()
391
- ) {
392
- when (val type = snackBarData.type) {
393
- is SnackBar.Custom -> type.content()
394
- is SnackBar.Toast -> {}
395
- }
396
- }
397
- }
398
-
399
-
400
-
401
-
402
-
@@ -1,69 +0,0 @@
1
- package vn.momo.kits.application
2
-
3
- import androidx.compose.animation.animateColorAsState
4
- import androidx.compose.animation.core.animateFloatAsState
5
- import androidx.compose.runtime.Composable
6
- import androidx.compose.runtime.getValue
7
- import androidx.compose.ui.graphics.Color
8
- import androidx.compose.ui.unit.Dp
9
- import androidx.compose.ui.unit.dp
10
- import vn.momo.kits.const.AppTheme
11
- import vn.momo.kits.const.Colors
12
- import vn.momo.kits.platform.getScreenDimensions
13
-
14
- data class HeaderAnimations(
15
- val opacity: Float,
16
- val backgroundSearch: Color,
17
- val translateX: Float,
18
- val width: Float,
19
- val translateY: Float
20
- )
21
-
22
- private const val SCREEN_PADDING = 12
23
- private const val BACK_WIDTH = 28
24
-
25
- @Deprecated("Use vn.momo.kits.navigation.component.Header instead", ReplaceWith("vn.momo.kits.navigation.component.Header"))
26
- @Composable
27
- fun useHeaderSearchAnimation(
28
- opacityAni: Float,
29
- scrollState: Int,
30
- headerRightWidth: Dp,
31
- isBack: Boolean
32
- ): HeaderAnimations {
33
- val screenWidth = getScreenDimensions().width
34
- val leftPosition = if (isBack) (BACK_WIDTH + 20).dp else 12.dp
35
- val searchWidth = screenWidth - (SCREEN_PADDING * 2)
36
-
37
- val backgroundSearch by animateColorAsState(
38
- targetValue = animateColor(
39
- Colors.black_01,
40
- AppTheme.current.colors.background.default,
41
- opacityAni
42
- ),
43
- )
44
-
45
- val animatedTranslateX by animateFloatAsState(
46
- targetValue = (scrollState / HEADER_HEIGHT * 1f).coerceIn(
47
- 0f,
48
- 1f
49
- ) * (leftPosition.value - 12) + 12,
50
- )
51
-
52
- val animatedWidth by animateFloatAsState(
53
- targetValue = (scrollState / HEADER_HEIGHT * 1f).coerceIn(
54
- 0f,
55
- 1f
56
- ) * ((searchWidth - leftPosition.value - headerRightWidth.value + 12) - searchWidth) + searchWidth,
57
- )
58
-
59
- val animatedTranslateY by animateFloatAsState(
60
- targetValue = (1 - (scrollState / HEADER_HEIGHT * 1f).coerceIn(0f, 1f)) * HEADER_HEIGHT
61
- )
62
- return HeaderAnimations(
63
- opacity = opacityAni,
64
- backgroundSearch = backgroundSearch,
65
- translateX = animatedTranslateX,
66
- width = animatedWidth,
67
- translateY = animatedTranslateY
68
- )
69
- }