@momo-kits/native-kits 0.162.2-sp.7-debug → 0.162.2-sp.8-debug
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/.claude/settings.local.json +15 -1
- package/CLAUDE.md +78 -0
- package/compose/build.gradle.kts +12 -31
- package/compose/build.gradle.kts.backup +11 -30
- package/compose/compose.podspec +1 -1
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +7 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +2 -7
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +8 -11
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +6 -24
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +4 -19
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +1 -10
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +2 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +6 -17
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +6 -101
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +269 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +8 -19
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +8 -33
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +22 -25
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +27 -29
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +3 -26
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +30 -31
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +3 -13
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -5
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +3 -11
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +3 -18
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +11 -11
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +42 -65
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +69 -26
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +1 -5
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +84 -59
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +13 -71
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +10 -51
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +6 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +4 -21
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +16 -75
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +5 -26
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +3 -11
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +16 -40
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +3 -9
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +0 -28
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +2 -13
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +4 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +4 -10
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +3 -28
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +8 -47
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +4 -25
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +2 -11
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +1 -17
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +1 -6
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +50 -111
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +1 -5
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +1 -5
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +1 -12
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +4 -96
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +5 -7
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +2 -12
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +9 -21
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +2 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +9 -14
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +8 -11
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitFontScale.kt +22 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +11 -20
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -5
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +94 -4
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +2 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +3 -7
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +9 -15
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +36 -24
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +48 -33
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +67 -61
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +6 -13
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +13 -31
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +6 -24
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +11 -6
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +2 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +9 -6
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +3 -13
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +3 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +1 -40
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +0 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +9 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -8
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +2 -17
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +3 -3
- package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +2 -3
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +66 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -2
- package/gradle/libs.versions.toml +2 -0
- package/gradle.properties +1 -1
- package/ios/Application/ApplicationEnvironment.swift +4 -2
- package/ios/Application/Components.swift +16 -0
- package/ios/Application/Localize.swift +277 -0
- package/ios/Application/MaxApi.swift +18 -0
- package/ios/Application/Navigation/BottomTab/BottomTab.swift +1 -0
- package/ios/Application/Navigation/NavigationContainer.swift +27 -3
- package/ios/Application/Navigation/Navigator.swift +50 -29
- package/ios/Application/Navigation/Overplay/BottomSheet.swift +87 -19
- package/ios/Application/Navigation/Overplay/ModalScreen.swift +6 -0
- package/ios/Application/Navigation/Tracking/ScreenTracker.swift +117 -0
- package/ios/Application/Screen.swift +1 -1
- package/ios/Application/StackScreen.swift +49 -1
- package/ios/Badge/BadgeRibbon.swift +80 -0
- package/ios/Button/Button.swift +68 -12
- package/ios/Carousel/Carousel.swift +16 -1
- package/ios/Checkbox/Checkbox.swift +14 -20
- package/ios/Chip/Chip.swift +35 -26
- package/ios/Collapse/Collapse.swift +11 -1
- package/ios/Colors+Radius+Spacing/Colors.swift +9 -6
- package/ios/Colors+Radius+Spacing/Spacing.swift +3 -1
- package/ios/DateTimePicker/DateTimePicker.swift +4 -2
- package/ios/DateTimePicker/WheelPicker.swift +7 -3
- package/ios/Extensions/ActiveOpacityButtonStyle.swift +14 -0
- package/ios/Extensions/Color++.swift +5 -2
- package/ios/Icon/Icon.swift +5 -1
- package/ios/IconButton/IconButton.swift +35 -7
- package/ios/Image/Image.swift +16 -3
- package/ios/Information/Information.swift +3 -1
- package/ios/Input/ErrorView.swift +3 -1
- package/ios/Input/Input.swift +31 -8
- package/ios/Input/InputPhoneNumber.swift +14 -3
- package/ios/Input/InputSearch.swift +7 -1
- package/ios/Input/InputTextArea.swift +78 -34
- package/ios/InputDropDown/InputDropDown.swift +4 -1
- package/ios/InputMoney/InputMoney.swift +16 -4
- package/ios/PARITY_AUDIT.md +641 -0
- package/ios/Popup/PopupDisplay.swift +3 -4
- package/ios/Popup/PopupNotify.swift +3 -4
- package/ios/Popup/PopupPromotion.swift +16 -8
- package/ios/ProgressInfo/ProgressInfo.swift +4 -2
- package/ios/Radio/Radio.swift +12 -13
- package/ios/Rating/Rating.swift +1 -1
- package/ios/Stepper/Stepper.swift +2 -2
- package/ios/Steps/Steps.swift +22 -6
- package/ios/SuggestAction/SuggestAction.swift +5 -3
- package/ios/Swipeable/SwipeCell.swift +5 -3
- package/ios/Switch/Switch.swift +53 -28
- package/ios/TabView/TabView.swift +18 -14
- package/ios/Template/TrustBanner/TrustBanner.swift +6 -7
- package/ios/Tooltip/Tooltip.swift +3 -0
- package/ios/Typography/FontScaleStore.swift +19 -0
- package/ios/Typography/Text.swift +3 -0
- package/ios/Typography/Typography.swift +8 -5
- package/ios/Uploader/Uploader.swift +0 -9
- package/ios/native-kits.podspec +1 -1
- package/ios-demo/MoMoUIKitsDemo.podspec +1 -1
- package/package.json +1 -1
- package/ios/Colors+Radius+Spacing/MoMoUIKitsResources.swift +0 -2
|
@@ -45,8 +45,8 @@ import androidx.compose.ui.layout.onGloballyPositioned
|
|
|
45
45
|
import androidx.compose.ui.platform.LocalDensity
|
|
46
46
|
import androidx.compose.ui.unit.Dp
|
|
47
47
|
import androidx.compose.ui.unit.dp
|
|
48
|
-
import androidx.compose.ui.unit.min
|
|
49
48
|
import androidx.compose.ui.zIndex
|
|
49
|
+
import kotlinx.coroutines.flow.Flow
|
|
50
50
|
import vn.momo.kits.components.InputSearch
|
|
51
51
|
import vn.momo.kits.const.AppNavigationBar
|
|
52
52
|
import vn.momo.kits.const.AppStatusBar
|
|
@@ -69,8 +69,9 @@ import vn.momo.kits.platform.supportsImePadding
|
|
|
69
69
|
import vn.momo.kits.navigation.tracking.ScreenTracker
|
|
70
70
|
import vn.momo.kits.navigation.tracking.ScreenTrackingState
|
|
71
71
|
import kotlinx.coroutines.delay
|
|
72
|
-
import vn.momo.kits.application.
|
|
72
|
+
import vn.momo.kits.application.LocalContext
|
|
73
73
|
import kotlin.time.Clock
|
|
74
|
+
import kotlin.time.Duration.Companion.milliseconds
|
|
74
75
|
import kotlin.time.ExperimentalTime
|
|
75
76
|
|
|
76
77
|
internal val LocalFooterHeightPx = staticCompositionLocalOf { mutableIntStateOf(0) }
|
|
@@ -88,17 +89,20 @@ internal fun StackScreen(
|
|
|
88
89
|
) {
|
|
89
90
|
val navigator = LocalNavigator.current
|
|
90
91
|
val maxApi = LocalMaxApi.current
|
|
91
|
-
val context =
|
|
92
|
+
val context = LocalContext.current
|
|
92
93
|
val statusBar = AppStatusBar.current
|
|
93
94
|
val density = LocalDensity.current
|
|
94
|
-
val
|
|
95
|
+
val screenRegistry = LocalDynamicScreenRegistry.current
|
|
96
|
+
val navigation = remember { Navigation(id = id, bottomTabIndex = bottomTabIndex, initOptions = navigationOptions, registry = screenRegistry) }
|
|
95
97
|
|
|
96
98
|
val options by navigation.currentOptions
|
|
99
|
+
val isBottomTabChild = bottomTabIndex != -1
|
|
100
|
+
val isBottomTabRoot = navigation.isBottomTabRoot
|
|
97
101
|
|
|
98
102
|
// Auto tracking state
|
|
99
103
|
val trackingState = remember {
|
|
100
104
|
ScreenTrackingState().apply {
|
|
101
|
-
|
|
105
|
+
time = Clock.System.now().toEpochMilliseconds()
|
|
102
106
|
}
|
|
103
107
|
}
|
|
104
108
|
|
|
@@ -119,8 +123,8 @@ internal fun StackScreen(
|
|
|
119
123
|
)
|
|
120
124
|
|
|
121
125
|
// Track screen displayed after 2 seconds (debounce)
|
|
122
|
-
delay(2000)
|
|
123
|
-
val loadTime = Clock.System.now().toEpochMilliseconds() - trackingState.
|
|
126
|
+
delay(2000.milliseconds)
|
|
127
|
+
val loadTime = Clock.System.now().toEpochMilliseconds() - trackingState.time
|
|
124
128
|
ScreenTracker.trackScreenDisplayed(
|
|
125
129
|
maxApi = maxApi,
|
|
126
130
|
context = context,
|
|
@@ -130,7 +134,7 @@ internal fun StackScreen(
|
|
|
130
134
|
)
|
|
131
135
|
|
|
132
136
|
// Track screen interacted after displayed
|
|
133
|
-
val interactionTime = Clock.System.now().toEpochMilliseconds() - trackingState.
|
|
137
|
+
val interactionTime = Clock.System.now().toEpochMilliseconds() - trackingState.time
|
|
134
138
|
ScreenTracker.trackScreenInteracted(
|
|
135
139
|
maxApi = maxApi,
|
|
136
140
|
context = context,
|
|
@@ -191,7 +195,7 @@ internal fun StackScreen(
|
|
|
191
195
|
}
|
|
192
196
|
|
|
193
197
|
Column(Modifier.zIndex(2f).fillMaxSize()) {
|
|
194
|
-
MainContent(content = content)
|
|
198
|
+
MainContent(content = content, isBottomTab = isBottomTabRoot)
|
|
195
199
|
FooterContent()
|
|
196
200
|
}
|
|
197
201
|
|
|
@@ -199,21 +203,23 @@ internal fun StackScreen(
|
|
|
199
203
|
FloatingContent()
|
|
200
204
|
}
|
|
201
205
|
|
|
202
|
-
OverplayView(
|
|
206
|
+
OverplayView(isBottomTabChild = isBottomTabChild, id = id)
|
|
203
207
|
}
|
|
204
208
|
}
|
|
205
209
|
}
|
|
206
210
|
|
|
211
|
+
@Suppress("FrequentlyChangingValue")
|
|
207
212
|
@Composable
|
|
208
|
-
fun FloatingContent() {
|
|
213
|
+
internal fun FloatingContent() {
|
|
209
214
|
val options = LocalOptions.current
|
|
210
215
|
val density = LocalDensity.current
|
|
211
216
|
val footerHeightPx = LocalFooterHeightPx.current
|
|
212
217
|
val scrollState = LocalScrollState.current
|
|
218
|
+
val navigationBar = AppNavigationBar.current
|
|
213
219
|
|
|
214
220
|
val fabProps = options.floatingButtonProps ?: return
|
|
215
221
|
val bottomPadding = fabProps.bottom
|
|
216
|
-
?: (Spacing.M + if (options.footerComponent != null) with(density) { footerHeightPx.intValue.toDp() } else
|
|
222
|
+
?: (Spacing.M + if (options.footerComponent != null) with(density) { footerHeightPx.intValue.toDp() } else navigationBar)
|
|
217
223
|
|
|
218
224
|
FloatingButton(
|
|
219
225
|
scrollPosition = fabProps.scrollState?.value ?: scrollState.value,
|
|
@@ -229,11 +235,12 @@ fun FloatingContent() {
|
|
|
229
235
|
}
|
|
230
236
|
|
|
231
237
|
@Composable
|
|
232
|
-
fun ColumnScope.MainContent(content: @Composable () -> Unit) {
|
|
238
|
+
internal fun ColumnScope.MainContent(content: @Composable () -> Unit, isBottomTab: Boolean) {
|
|
233
239
|
val options = LocalOptions.current
|
|
234
240
|
val inputSearchType = getInputSearchType(options)
|
|
235
241
|
val density = LocalDensity.current
|
|
236
242
|
val scrollState = LocalScrollState.current
|
|
243
|
+
val navigationBar = AppNavigationBar.current
|
|
237
244
|
|
|
238
245
|
Spacer(
|
|
239
246
|
Modifier.height(
|
|
@@ -257,6 +264,7 @@ fun ColumnScope.MainContent(content: @Composable () -> Unit) {
|
|
|
257
264
|
.conditional(options.scrollData.scrollable && options.scrollData.scrollState is ScrollState) {
|
|
258
265
|
verticalScroll(scrollState)
|
|
259
266
|
}
|
|
267
|
+
.padding(bottom = if (options.footerComponent != null || isBottomTab) 0.dp else navigationBar)
|
|
260
268
|
) {
|
|
261
269
|
ScreenContent(content = content)
|
|
262
270
|
}
|
|
@@ -264,7 +272,7 @@ fun ColumnScope.MainContent(content: @Composable () -> Unit) {
|
|
|
264
272
|
}
|
|
265
273
|
|
|
266
274
|
@Composable
|
|
267
|
-
fun ScreenContent(content: @Composable () -> Unit) {
|
|
275
|
+
internal fun ScreenContent(content: @Composable () -> Unit) {
|
|
268
276
|
val scrollState = LocalScrollState.current
|
|
269
277
|
val options = LocalOptions.current
|
|
270
278
|
|
|
@@ -284,7 +292,7 @@ fun ScreenContent(content: @Composable () -> Unit) {
|
|
|
284
292
|
}
|
|
285
293
|
|
|
286
294
|
@Composable
|
|
287
|
-
fun FooterContent() {
|
|
295
|
+
internal fun FooterContent() {
|
|
288
296
|
val options = LocalOptions.current
|
|
289
297
|
if (options.footerComponent != null) {
|
|
290
298
|
val keyboardSize = keyboardSizeState()
|
|
@@ -294,18 +302,18 @@ fun FooterContent() {
|
|
|
294
302
|
}
|
|
295
303
|
|
|
296
304
|
@Composable
|
|
297
|
-
fun keyboardSizeState(): State<Dp> {
|
|
305
|
+
internal fun keyboardSizeState(): State<Dp> {
|
|
298
306
|
val bottom = WindowInsets.ime.asPaddingValues()
|
|
299
307
|
return rememberUpdatedState(bottom.calculateBottomPadding())
|
|
300
308
|
}
|
|
301
309
|
|
|
302
310
|
@Composable
|
|
303
|
-
fun OverplayView(
|
|
311
|
+
internal fun OverplayView(isBottomTabChild: Boolean, id: Int) {
|
|
304
312
|
val overplayType = OverplayComponentRegistry.getOverplayType()
|
|
305
313
|
|
|
306
314
|
if (overplayType != null) {
|
|
307
315
|
Box(Modifier.zIndex(if (overplayType == OverplayComponentType.SNACK_BAR) 3f else 7f).fillMaxSize()) {
|
|
308
|
-
if (
|
|
316
|
+
if (isBottomTabChild) return@Box
|
|
309
317
|
if (OverplayComponentRegistry.currentRootId() != id) return@Box
|
|
310
318
|
OverplayComponentRegistry.OverlayComponent()
|
|
311
319
|
}
|
|
@@ -355,8 +363,9 @@ data class InputSearchLayoutParams(
|
|
|
355
363
|
val endPadding: Dp
|
|
356
364
|
)
|
|
357
365
|
|
|
366
|
+
@Suppress("FrequentlyChangingValue")
|
|
358
367
|
@Composable
|
|
359
|
-
fun SearchAnimated(
|
|
368
|
+
internal fun SearchAnimated(
|
|
360
369
|
isScrollInProgress: Boolean
|
|
361
370
|
) {
|
|
362
371
|
val scrollState = LocalScrollState.current
|
|
@@ -469,64 +478,61 @@ private fun quantize(value: Int, stepPx: Int): Int {
|
|
|
469
478
|
}
|
|
470
479
|
|
|
471
480
|
@Composable
|
|
472
|
-
fun LazyListState.proxyScrollState(
|
|
481
|
+
internal fun LazyListState.proxyScrollState(
|
|
473
482
|
thresholdPx: Int = 200,
|
|
474
483
|
stepPx: Int = 4
|
|
475
|
-
): Pair<ScrollState, Boolean>
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
if (scrollState.value != desired) {
|
|
489
|
-
scrollState.scrollTo(desired.coerceAtLeast(0))
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
val inProgress = remember { mutableStateOf(false) }
|
|
495
|
-
LaunchedEffect(this, thresholdPx) {
|
|
496
|
-
snapshotFlow { isScrollInProgress }
|
|
497
|
-
.collect { progressing ->
|
|
498
|
-
inProgress.value = if (locked.value) false else progressing
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
return scrollState to inProgress.value
|
|
503
|
-
}
|
|
484
|
+
): Pair<ScrollState, Boolean> = proxyScroll(
|
|
485
|
+
source = this,
|
|
486
|
+
thresholdPx = thresholdPx,
|
|
487
|
+
stepPx = stepPx,
|
|
488
|
+
isScrollInProgress = { isScrollInProgress },
|
|
489
|
+
rawTargetFlow = {
|
|
490
|
+
snapshotFlow {
|
|
491
|
+
if (firstVisibleItemIndex == 0) firstVisibleItemScrollOffset
|
|
492
|
+
else SCROLLED_PAST_FIRST_ITEM_THRESHOLD
|
|
493
|
+
}
|
|
494
|
+
},
|
|
495
|
+
)
|
|
504
496
|
|
|
505
497
|
@Composable
|
|
506
|
-
fun ScrollState.proxyLimitedScrollState(
|
|
498
|
+
internal fun ScrollState.proxyLimitedScrollState(
|
|
507
499
|
thresholdPx: Int = 200,
|
|
508
500
|
stepPx: Int = 4
|
|
501
|
+
): Pair<ScrollState, Boolean> = proxyScroll(
|
|
502
|
+
source = this,
|
|
503
|
+
thresholdPx = thresholdPx,
|
|
504
|
+
stepPx = stepPx,
|
|
505
|
+
isScrollInProgress = { isScrollInProgress },
|
|
506
|
+
rawTargetFlow = { snapshotFlow { value } },
|
|
507
|
+
)
|
|
508
|
+
|
|
509
|
+
@Composable
|
|
510
|
+
private fun proxyScroll(
|
|
511
|
+
source: Any,
|
|
512
|
+
thresholdPx: Int,
|
|
513
|
+
stepPx: Int,
|
|
514
|
+
isScrollInProgress: () -> Boolean,
|
|
515
|
+
rawTargetFlow: () -> Flow<Int>,
|
|
509
516
|
): Pair<ScrollState, Boolean> {
|
|
510
517
|
val proxy = rememberScrollState()
|
|
511
518
|
val locked = remember { mutableStateOf(false) }
|
|
512
519
|
|
|
513
|
-
LaunchedEffect(
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
if (locked.value != shouldLock) locked.value = shouldLock
|
|
520
|
+
LaunchedEffect(source, proxy, thresholdPx, stepPx) {
|
|
521
|
+
rawTargetFlow().collect { rawTarget ->
|
|
522
|
+
val shouldLock = rawTarget > thresholdPx
|
|
523
|
+
if (locked.value != shouldLock) locked.value = shouldLock
|
|
518
524
|
|
|
519
|
-
|
|
525
|
+
val desired = if (shouldLock) thresholdPx else quantize(rawTarget, stepPx)
|
|
520
526
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
}
|
|
527
|
+
if (proxy.value != desired) {
|
|
528
|
+
proxy.scrollTo(desired.coerceAtLeast(0))
|
|
524
529
|
}
|
|
530
|
+
}
|
|
525
531
|
}
|
|
526
532
|
|
|
527
533
|
val inProgress = remember { mutableStateOf(false) }
|
|
528
|
-
LaunchedEffect(
|
|
529
|
-
snapshotFlow { isScrollInProgress }
|
|
534
|
+
LaunchedEffect(source, thresholdPx) {
|
|
535
|
+
snapshotFlow { isScrollInProgress() }
|
|
530
536
|
.collect { progressing ->
|
|
531
537
|
inProgress.value = if (locked.value) false else progressing
|
|
532
538
|
}
|
|
@@ -6,13 +6,7 @@ import androidx.compose.animation.fadeOut
|
|
|
6
6
|
import androidx.compose.animation.scaleIn
|
|
7
7
|
import androidx.compose.animation.scaleOut
|
|
8
8
|
import androidx.compose.foundation.background
|
|
9
|
-
import androidx.compose.foundation.layout
|
|
10
|
-
import androidx.compose.foundation.layout.Column
|
|
11
|
-
import androidx.compose.foundation.layout.Spacer
|
|
12
|
-
import androidx.compose.foundation.layout.fillMaxSize
|
|
13
|
-
import androidx.compose.foundation.layout.fillMaxWidth
|
|
14
|
-
import androidx.compose.foundation.layout.height
|
|
15
|
-
import androidx.compose.foundation.layout.padding
|
|
9
|
+
import androidx.compose.foundation.layout.*
|
|
16
10
|
import androidx.compose.runtime.Composable
|
|
17
11
|
import androidx.compose.runtime.LaunchedEffect
|
|
18
12
|
import androidx.compose.ui.Alignment
|
|
@@ -29,15 +23,14 @@ import vn.momo.kits.navigation.LocalNavigator
|
|
|
29
23
|
import vn.momo.kits.navigation.NavigationOptions
|
|
30
24
|
import vn.momo.kits.navigation.StackScreen
|
|
31
25
|
import vn.momo.kits.navigation.component.HeaderType
|
|
32
|
-
import vn.momo.kits.platform.getScreenHeight
|
|
33
26
|
|
|
34
27
|
private var bottomTabOptionItems : MutableList<NavigationOptions?> = mutableListOf()
|
|
35
|
-
fun setBottomTabOption(index: Int, options: NavigationOptions){
|
|
28
|
+
internal fun setBottomTabOption(index: Int, options: NavigationOptions){
|
|
36
29
|
if (index in bottomTabOptionItems.indices) {
|
|
37
30
|
bottomTabOptionItems[index] = options
|
|
38
31
|
}
|
|
39
32
|
}
|
|
40
|
-
fun getBottomTabOption(index: Int): NavigationOptions? {
|
|
33
|
+
internal fun getBottomTabOption(index: Int): NavigationOptions? {
|
|
41
34
|
return if (index in bottomTabOptionItems.indices) {
|
|
42
35
|
bottomTabOptionItems[index]
|
|
43
36
|
} else null
|
|
@@ -58,15 +51,15 @@ fun BottomTab(
|
|
|
58
51
|
|
|
59
52
|
|
|
60
53
|
LaunchedEffect(Unit){
|
|
54
|
+
navigation.markAsBottomTabRoot()
|
|
61
55
|
navigation.setOptions(
|
|
62
56
|
headerType = HeaderType.None
|
|
63
57
|
)
|
|
64
58
|
}
|
|
65
59
|
|
|
66
|
-
Box(modifier = Modifier.
|
|
60
|
+
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.BottomCenter) {
|
|
67
61
|
Box(modifier = Modifier
|
|
68
62
|
.fillMaxSize()
|
|
69
|
-
.padding(bottom = BOTTOM_TAB_BAR_HEIGHT.dp + AppNavigationBar.current)
|
|
70
63
|
) {
|
|
71
64
|
NavHost(
|
|
72
65
|
navController = navController,
|
|
@@ -133,7 +126,7 @@ fun BottomTab(
|
|
|
133
126
|
onTabSelected = {
|
|
134
127
|
val currentRoute = navController.currentBackStackEntry?.destination?.route
|
|
135
128
|
val targetRoute = "option$it"
|
|
136
|
-
if (currentRoute != targetRoute){
|
|
129
|
+
if (currentRoute != targetRoute) {
|
|
137
130
|
navController.navigate(targetRoute)
|
|
138
131
|
}
|
|
139
132
|
}
|
|
@@ -5,19 +5,7 @@ import androidx.compose.animation.core.animateDpAsState
|
|
|
5
5
|
import androidx.compose.animation.core.tween
|
|
6
6
|
import androidx.compose.foundation.background
|
|
7
7
|
import androidx.compose.foundation.border
|
|
8
|
-
import androidx.compose.foundation.layout
|
|
9
|
-
import androidx.compose.foundation.layout.Box
|
|
10
|
-
import androidx.compose.foundation.layout.Column
|
|
11
|
-
import androidx.compose.foundation.layout.Row
|
|
12
|
-
import androidx.compose.foundation.layout.RowScope
|
|
13
|
-
import androidx.compose.foundation.layout.Spacer
|
|
14
|
-
import androidx.compose.foundation.layout.fillMaxSize
|
|
15
|
-
import androidx.compose.foundation.layout.fillMaxWidth
|
|
16
|
-
import androidx.compose.foundation.layout.height
|
|
17
|
-
import androidx.compose.foundation.layout.offset
|
|
18
|
-
import androidx.compose.foundation.layout.padding
|
|
19
|
-
import androidx.compose.foundation.layout.size
|
|
20
|
-
import androidx.compose.foundation.layout.width
|
|
8
|
+
import androidx.compose.foundation.layout.*
|
|
21
9
|
import androidx.compose.foundation.shape.CircleShape
|
|
22
10
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
23
11
|
import androidx.compose.runtime.Composable
|
|
@@ -32,26 +20,20 @@ import androidx.compose.ui.text.style.TextOverflow
|
|
|
32
20
|
import androidx.compose.ui.unit.dp
|
|
33
21
|
import androidx.navigation.NavController
|
|
34
22
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
|
35
|
-
import vn.momo.kits.components.Badge
|
|
36
|
-
import vn.momo.kits.components.Icon
|
|
37
|
-
import vn.momo.kits.components.Text
|
|
38
|
-
import vn.momo.kits.const.AppTheme
|
|
39
|
-
import vn.momo.kits.const.Colors
|
|
40
|
-
import vn.momo.kits.const.Radius
|
|
41
|
-
import vn.momo.kits.const.Spacing
|
|
42
23
|
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
43
|
-
import vn.momo.kits.components
|
|
44
|
-
import vn.momo.kits.
|
|
45
|
-
import vn.momo.kits.
|
|
24
|
+
import vn.momo.kits.components.*
|
|
25
|
+
import vn.momo.kits.const.*
|
|
26
|
+
import vn.momo.kits.modifier.InternalApi
|
|
46
27
|
import vn.momo.kits.modifier.conditional
|
|
47
28
|
import vn.momo.kits.modifier.noFeedbackClickable
|
|
48
29
|
import vn.momo.kits.platform.getScreenDimensions
|
|
49
30
|
|
|
50
|
-
val floatingButtonWidth = 75.dp
|
|
31
|
+
internal val floatingButtonWidth = 75.dp
|
|
32
|
+
@InternalApi
|
|
51
33
|
const val BOTTOM_TAB_BAR_HEIGHT = 64
|
|
52
34
|
|
|
53
35
|
@Composable
|
|
54
|
-
fun BottomTabBar(
|
|
36
|
+
internal fun BottomTabBar(
|
|
55
37
|
items: List<BottomTabItem>,
|
|
56
38
|
floatingButton: BottomTabFloatingButton? = null,
|
|
57
39
|
navController: NavController,
|
|
@@ -91,11 +73,11 @@ fun BottomTabBar(
|
|
|
91
73
|
horizontalArrangement = Arrangement.SpaceAround,
|
|
92
74
|
) {
|
|
93
75
|
if (floatingButton == null) {
|
|
94
|
-
|
|
76
|
+
RenderTabBarItem(items, 0, items.size, selectedIndex, onTabSelected)
|
|
95
77
|
} else {
|
|
96
|
-
|
|
78
|
+
RenderTabBarItem(items, 0, mid, selectedIndex, onTabSelected)
|
|
97
79
|
Spacer(modifier = Modifier.width(floatingButtonWidth).padding(horizontal = Spacing.XXS))
|
|
98
|
-
|
|
80
|
+
RenderTabBarItem(items, mid, items.size, selectedIndex, onTabSelected)
|
|
99
81
|
}
|
|
100
82
|
}
|
|
101
83
|
|
|
@@ -124,7 +106,7 @@ fun BottomTabBar(
|
|
|
124
106
|
}
|
|
125
107
|
|
|
126
108
|
@Composable
|
|
127
|
-
fun RowScope.
|
|
109
|
+
internal fun RowScope.RenderTabBarItem(
|
|
128
110
|
items: List<BottomTabItem>,
|
|
129
111
|
fromIndex: Int,
|
|
130
112
|
toIndex: Int,
|
|
@@ -143,7 +125,7 @@ fun RowScope.renderTabBarItem(
|
|
|
143
125
|
}
|
|
144
126
|
|
|
145
127
|
@Composable
|
|
146
|
-
fun TabBarItem(item: BottomTabItem, selected: Boolean, onClick: () -> Unit) {
|
|
128
|
+
internal fun TabBarItem(item: BottomTabItem, selected: Boolean, onClick: () -> Unit) {
|
|
147
129
|
fun isNumber(label: String): Boolean {
|
|
148
130
|
val numberRegex = "^\\d+$".toRegex()
|
|
149
131
|
return numberRegex.matches(label)
|
|
@@ -203,7 +185,7 @@ fun TabBarItem(item: BottomTabItem, selected: Boolean, onClick: () -> Unit) {
|
|
|
203
185
|
}
|
|
204
186
|
|
|
205
187
|
@Composable
|
|
206
|
-
fun FloatingButton(data: BottomTabFloatingButton) {
|
|
188
|
+
internal fun FloatingButton(data: BottomTabFloatingButton) {
|
|
207
189
|
Column(
|
|
208
190
|
modifier = Modifier
|
|
209
191
|
.width(floatingButtonWidth)
|
|
@@ -1,40 +1,21 @@
|
|
|
1
1
|
package vn.momo.kits.navigation.component
|
|
2
2
|
|
|
3
|
-
import androidx.compose.animation
|
|
3
|
+
import androidx.compose.animation.*
|
|
4
4
|
import androidx.compose.animation.core.CubicBezierEasing
|
|
5
5
|
import androidx.compose.animation.core.LinearEasing
|
|
6
6
|
import androidx.compose.animation.core.animateDpAsState
|
|
7
7
|
import androidx.compose.animation.core.tween
|
|
8
|
-
import androidx.compose.animation.expandHorizontally
|
|
9
|
-
import androidx.compose.animation.fadeIn
|
|
10
|
-
import androidx.compose.animation.fadeOut
|
|
11
|
-
import androidx.compose.animation.shrinkHorizontally
|
|
12
8
|
import androidx.compose.foundation.ScrollState
|
|
13
9
|
import androidx.compose.foundation.background
|
|
14
10
|
import androidx.compose.foundation.border
|
|
15
11
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
|
16
|
-
import androidx.compose.foundation.layout
|
|
17
|
-
import androidx.compose.foundation.layout.Box
|
|
18
|
-
import androidx.compose.foundation.layout.Row
|
|
19
|
-
import androidx.compose.foundation.layout.Spacer
|
|
20
|
-
import androidx.compose.foundation.layout.fillMaxSize
|
|
21
|
-
import androidx.compose.foundation.layout.height
|
|
22
|
-
import androidx.compose.foundation.layout.offset
|
|
23
|
-
import androidx.compose.foundation.layout.padding
|
|
24
|
-
import androidx.compose.foundation.layout.sizeIn
|
|
25
|
-
import androidx.compose.foundation.layout.width
|
|
12
|
+
import androidx.compose.foundation.layout.*
|
|
26
13
|
import androidx.compose.material3.AlertDialogDefaults
|
|
27
14
|
import androidx.compose.material3.FloatingActionButton
|
|
28
15
|
import androidx.compose.material3.FloatingActionButtonDefaults
|
|
29
16
|
import androidx.compose.material3.FloatingActionButtonElevation
|
|
30
|
-
import androidx.compose.runtime
|
|
31
|
-
import androidx.compose.runtime.LaunchedEffect
|
|
32
|
-
import androidx.compose.runtime.getValue
|
|
33
|
-
import androidx.compose.runtime.mutableStateOf
|
|
34
|
-
import androidx.compose.runtime.remember
|
|
35
|
-
import androidx.compose.runtime.rememberCoroutineScope
|
|
17
|
+
import androidx.compose.runtime.*
|
|
36
18
|
import androidx.compose.runtime.saveable.rememberSaveable
|
|
37
|
-
import androidx.compose.runtime.setValue
|
|
38
19
|
import androidx.compose.ui.Alignment
|
|
39
20
|
import androidx.compose.ui.Modifier
|
|
40
21
|
import androidx.compose.ui.graphics.Color
|
|
@@ -50,6 +31,7 @@ import vn.momo.kits.components.Text
|
|
|
50
31
|
import vn.momo.kits.const.Colors
|
|
51
32
|
import vn.momo.kits.const.Typography
|
|
52
33
|
import vn.momo.kits.modifier.conditional
|
|
34
|
+
import kotlin.time.Duration.Companion.milliseconds
|
|
53
35
|
|
|
54
36
|
enum class FABSize { SMALL, DEFAULT }
|
|
55
37
|
enum class FABPosition { END, CENTER }
|
|
@@ -73,7 +55,7 @@ private val FabIconSizeDefault = 24.dp
|
|
|
73
55
|
private val FabPaddingHorizontal = 12.dp
|
|
74
56
|
|
|
75
57
|
@Composable
|
|
76
|
-
fun FloatingButton(
|
|
58
|
+
internal fun FloatingButton(
|
|
77
59
|
scrollPosition: Int,
|
|
78
60
|
bottom: Dp,
|
|
79
61
|
onClick: () -> Unit,
|
|
@@ -106,7 +88,7 @@ fun FloatingButton(
|
|
|
106
88
|
coroutineScope.launch {
|
|
107
89
|
scrollStateFlow.collectLatest { newScroll ->
|
|
108
90
|
isExpanded = newScroll <= lastScrollPosition
|
|
109
|
-
delay(100)
|
|
91
|
+
delay(100.milliseconds)
|
|
110
92
|
lastScrollPosition = newScroll
|
|
111
93
|
}
|
|
112
94
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
package vn.momo.kits.navigation.component
|
|
2
2
|
|
|
3
|
+
import vn.momo.kits.modifier.InternalApi
|
|
4
|
+
|
|
3
5
|
import androidx.compose.animation.core.animateFloatAsState
|
|
4
6
|
import androidx.compose.foundation.background
|
|
5
7
|
import androidx.compose.foundation.border
|
|
@@ -42,12 +44,14 @@ import vn.momo.kits.navigation.LocalOptions
|
|
|
42
44
|
import vn.momo.kits.navigation.LocalScrollState
|
|
43
45
|
import vn.momo.kits.navigation.getInputSearchType
|
|
44
46
|
|
|
47
|
+
@InternalApi
|
|
45
48
|
const val HEADER_HEIGHT = 52
|
|
46
|
-
enum class InputSearchType { None, Header, Animated }
|
|
49
|
+
internal enum class InputSearchType { None, Header, Animated }
|
|
47
50
|
enum class TitlePosition { LEFT, CENTER }
|
|
48
51
|
|
|
52
|
+
@Suppress("FrequentlyChangingValue")
|
|
49
53
|
@Composable
|
|
50
|
-
fun Header(onBackHandler: (() -> Unit)? = null) {
|
|
54
|
+
internal fun Header(onBackHandler: (() -> Unit)? = null) {
|
|
51
55
|
val options = LocalOptions.current
|
|
52
56
|
val navigator = LocalNavigator.current
|
|
53
57
|
val scrollState = LocalScrollState.current
|
|
@@ -106,7 +110,7 @@ fun Header(onBackHandler: (() -> Unit)? = null) {
|
|
|
106
110
|
backgroundButton = headerColor.backgroundButton,
|
|
107
111
|
tintIconColor = headerColor.tintIconColor,
|
|
108
112
|
onBackHandler = {
|
|
109
|
-
|
|
113
|
+
navigator.onBackSafe { }
|
|
110
114
|
}
|
|
111
115
|
)
|
|
112
116
|
Spacer(Modifier.width(Spacing.S))
|
|
@@ -168,7 +172,7 @@ private fun BackButton(borderColor: Color, backgroundButton: Color, tintIconColo
|
|
|
168
172
|
}
|
|
169
173
|
|
|
170
174
|
@Composable
|
|
171
|
-
fun HeaderContent(
|
|
175
|
+
internal fun HeaderContent(
|
|
172
176
|
headerTitle: HeaderTitle,
|
|
173
177
|
tintIconColor: Color,
|
|
174
178
|
titlePosition: TitlePosition = TitlePosition.LEFT,
|
|
@@ -199,7 +203,7 @@ fun HeaderContent(
|
|
|
199
203
|
}
|
|
200
204
|
|
|
201
205
|
@Composable
|
|
202
|
-
fun VerticalShadow(opacity: Float){
|
|
206
|
+
internal fun VerticalShadow(opacity: Float){
|
|
203
207
|
if(opacity == 1f){
|
|
204
208
|
Box(modifier = Modifier
|
|
205
209
|
.fillMaxWidth()
|
|
@@ -282,8 +286,9 @@ data class HeaderBackProps(
|
|
|
282
286
|
val preventBack: PopupNotifyProps? = null,
|
|
283
287
|
)
|
|
284
288
|
|
|
289
|
+
@InternalApi
|
|
285
290
|
data class HeaderColor(val tintIconColor: Color, val backgroundButton: Color, val borderColor: Color)
|
|
286
|
-
fun getHeaderColor(headerType: HeaderType, opacity: Float, tintColor: Color?, defaultColor: Color): HeaderColor{
|
|
291
|
+
internal fun getHeaderColor(headerType: HeaderType, opacity: Float, tintColor: Color?, defaultColor: Color): HeaderColor{
|
|
287
292
|
return if(headerType is HeaderType.Animated) {
|
|
288
293
|
if (opacity == 1f || !headerType.isSurface)
|
|
289
294
|
HeaderColor(
|
|
@@ -27,8 +27,9 @@ enum class AnimatedHeaderRatio(val value: Float){
|
|
|
27
27
|
RATIO_3_2(3f / 2f)
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
@Suppress("FrequentlyChangingValue")
|
|
30
31
|
@Composable
|
|
31
|
-
fun HeaderBackground() {
|
|
32
|
+
internal fun HeaderBackground() {
|
|
32
33
|
val density = LocalDensity.current
|
|
33
34
|
val theme = AppTheme.current
|
|
34
35
|
val options = LocalOptions.current
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
package vn.momo.kits.navigation.component
|
|
2
2
|
|
|
3
|
+
import vn.momo.kits.modifier.InternalApi
|
|
4
|
+
|
|
3
5
|
import androidx.compose.foundation.background
|
|
4
6
|
import androidx.compose.foundation.border
|
|
5
7
|
import androidx.compose.foundation.layout.Arrangement
|
|
@@ -24,7 +26,7 @@ import androidx.compose.ui.Modifier
|
|
|
24
26
|
import androidx.compose.ui.draw.clip
|
|
25
27
|
import androidx.compose.ui.graphics.Color
|
|
26
28
|
import androidx.compose.ui.unit.dp
|
|
27
|
-
import vn.momo.kits.application.
|
|
29
|
+
import vn.momo.kits.application.LocalContext
|
|
28
30
|
import vn.momo.kits.application.MiniAppContext
|
|
29
31
|
import vn.momo.kits.components.BadgeDot
|
|
30
32
|
import vn.momo.kits.components.DotSize
|
|
@@ -35,6 +37,7 @@ import vn.momo.kits.modifier.activeOpacityClickable
|
|
|
35
37
|
import vn.momo.kits.navigation.LocalMaxApi
|
|
36
38
|
|
|
37
39
|
@Composable
|
|
40
|
+
@InternalApi
|
|
38
41
|
fun HeaderRight(
|
|
39
42
|
headerRight: HeaderRight,
|
|
40
43
|
tintColor: Color? = null,
|
|
@@ -57,13 +60,13 @@ fun HeaderRight(
|
|
|
57
60
|
}
|
|
58
61
|
|
|
59
62
|
@Composable
|
|
60
|
-
fun Toolkit(
|
|
63
|
+
internal fun Toolkit(
|
|
61
64
|
headerRight: HeaderRight.Toolkit,
|
|
62
65
|
tintColor: Color? = null,
|
|
63
66
|
headerColor: HeaderColor
|
|
64
67
|
) {
|
|
65
68
|
val api = LocalMaxApi.current
|
|
66
|
-
val context =
|
|
69
|
+
val context = LocalContext.current
|
|
67
70
|
|
|
68
71
|
var isFavorite by remember { mutableStateOf(false) }
|
|
69
72
|
val isLoading by remember { mutableStateOf(false) }
|
|
@@ -186,7 +189,7 @@ fun Toolkit(
|
|
|
186
189
|
|
|
187
190
|
|
|
188
191
|
@Composable
|
|
189
|
-
fun NavigationButton(
|
|
192
|
+
internal fun NavigationButton(
|
|
190
193
|
disabled: Boolean,
|
|
191
194
|
icon: String,
|
|
192
195
|
showBadge: Boolean? = false,
|
|
@@ -300,7 +303,7 @@ data class Tool(
|
|
|
300
303
|
}
|
|
301
304
|
}
|
|
302
305
|
|
|
303
|
-
data class NavigationButtonConfig(
|
|
306
|
+
private data class NavigationButtonConfig(
|
|
304
307
|
val icon: String,
|
|
305
308
|
val onPress: () -> Unit
|
|
306
|
-
)
|
|
309
|
+
)
|