@momo-kits/native-kits 0.0.2-alpha.1 → 0.0.2-alpha.1-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/build.gradle.kts +11 -0
- package/compose/build.gradle.kts +189 -0
- package/compose/build.gradle.kts.backup +189 -0
- package/compose/compose.podspec +47 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/const/HostFont.android.kt +19 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +6 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/BackGesture.android.kt +12 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +7 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +151 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +52 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +124 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +183 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +207 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +39 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +293 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +33 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +831 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +269 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +110 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +378 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/WidgetContainer.kt +65 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +69 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +157 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +82 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +32 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +338 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +175 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +356 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +113 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +89 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +128 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +209 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +542 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +49 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +125 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +231 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +189 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +475 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +114 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +266 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +240 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +223 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +264 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +185 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +343 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +108 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +56 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +41 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +84 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +40 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +328 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +97 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +310 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +59 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +87 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +21 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +90 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +323 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +220 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +473 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +122 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +199 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +91 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +552 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +88 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +125 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +207 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +498 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +176 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +182 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +193 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +29 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +234 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +188 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +325 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/HostFont.kt +16 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitDesignSystem.kt +18 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitFontScale.kt +22 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +12 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +16 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +194 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +282 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +54 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +51 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +41 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +52 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +66 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +11 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +104 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +48 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +51 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +299 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/HostBackGestureBridge.kt +58 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +129 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +106 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +211 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +398 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +8 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +595 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +148 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +40 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +184 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +225 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +169 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +357 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +83 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderJourney.kt +106 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderLocation.kt +75 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +326 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +39 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +364 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +132 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/ToolkitRequests.kt +33 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +135 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/BackGesture.kt +12 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +91 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +9 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +71 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +1329 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +55 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +15 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +105 -0
- package/compose/src/commonTest/kotlin/vn/momo/kits/navigation/component/ToolkitRequestsTest.kt +47 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +40 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +45 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +36 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/BackGesture.ios.kt +38 -0
- 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 +213 -0
- package/gradle/libs.versions.toml +71 -0
- package/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/gradle/wrapper/gradle-wrapper.properties +8 -0
- package/gradle.properties +26 -0
- package/gradlew +252 -0
- package/gradlew.bat +94 -0
- package/ios-demo/README.md +120 -0
- package/package.json +1 -1
- package/settings.gradle.kts +64 -0
package/build.gradle.kts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
plugins {
|
|
2
|
+
// this is necessary to avoid the plugins to be loaded multiple times
|
|
3
|
+
// in each subproject's classloader
|
|
4
|
+
alias(libs.plugins.android.application) apply false
|
|
5
|
+
alias(libs.plugins.android.kotlin.multiplatform.library) apply false
|
|
6
|
+
alias(libs.plugins.compose) apply false
|
|
7
|
+
alias(libs.plugins.kotlin.compose.compiler) apply false
|
|
8
|
+
alias(libs.plugins.jetbrains.kotlin.multiplatform) apply false
|
|
9
|
+
alias(libs.plugins.jetbrains.kotlin.serialization) apply false
|
|
10
|
+
alias(libs.plugins.vanniktech.mavenPublish) apply false
|
|
11
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
// import com.vanniktech.maven.publish.JavadocJar
|
|
2
|
+
// import com.vanniktech.maven.publish.KotlinMultiplatform
|
|
3
|
+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
4
|
+
|
|
5
|
+
plugins {
|
|
6
|
+
alias(libs.plugins.jetbrains.kotlin.multiplatform)
|
|
7
|
+
// AI-GENERATED START: use the AGP 9 Kotlin Multiplatform Android library target
|
|
8
|
+
alias(libs.plugins.android.kotlin.multiplatform.library)
|
|
9
|
+
// AI-GENERATED END: use the AGP 9 Kotlin Multiplatform Android library target
|
|
10
|
+
alias(libs.plugins.compose)
|
|
11
|
+
alias(libs.plugins.kotlin.compose.compiler)
|
|
12
|
+
// alias(libs.plugins.vanniktech.mavenPublish)
|
|
13
|
+
id(libs.plugins.jetbrains.kotlin.cocoapods.get().pluginId)
|
|
14
|
+
kotlin("plugin.serialization")
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
val gitlabName: String = findProperty("name") as String? ?: ""
|
|
18
|
+
val gitlabRepo: String = findProperty("repo") as String? ?: ""
|
|
19
|
+
val gitlabUrl: String = findProperty("url") as String? ?: ""
|
|
20
|
+
val gitlabGroup: String = findProperty("group") as String? ?: ""
|
|
21
|
+
val gitlabArtifactId: String = findProperty("artifact.id") as String? ?: ""
|
|
22
|
+
val gitlabVersion: String = findProperty("version") as String? ?: ""
|
|
23
|
+
val gitlabUser: String = findProperty("gitlab.user") as String? ?: ""
|
|
24
|
+
val gitlabKey: String = findProperty("gitlab.password") as String? ?: ""
|
|
25
|
+
|
|
26
|
+
kotlin {
|
|
27
|
+
// AI-GENERATED START: configure the AGP 9 Android target and host tests
|
|
28
|
+
android {
|
|
29
|
+
namespace = "vn.momo.kits.kits"
|
|
30
|
+
compileSdk = 35
|
|
31
|
+
minSdk = 24
|
|
32
|
+
androidResources.enable = true
|
|
33
|
+
withHostTest {}
|
|
34
|
+
compilerOptions {
|
|
35
|
+
jvmTarget.set(JvmTarget.JVM_17)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// AI-GENERATED END: configure the AGP 9 Android target and host tests
|
|
39
|
+
|
|
40
|
+
val fwName = gitlabArtifactId
|
|
41
|
+
val iosTargets = listOf(iosArm64(), iosSimulatorArm64())
|
|
42
|
+
iosTargets.forEach {
|
|
43
|
+
it.binaries.framework {
|
|
44
|
+
baseName = fwName
|
|
45
|
+
binaryOption("bundleId", "$gitlabGroup.$fwName")
|
|
46
|
+
isStatic = true
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
cocoapods {
|
|
51
|
+
version = "0.0.2-alpha.1-debug"
|
|
52
|
+
summary = "IOS Shared module"
|
|
53
|
+
homepage = "https://momo.vn"
|
|
54
|
+
ios.deploymentTarget = "15.0"
|
|
55
|
+
|
|
56
|
+
framework {
|
|
57
|
+
baseName = fwName
|
|
58
|
+
isStatic = true
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
pod("lottie-ios") {
|
|
62
|
+
moduleName = "Lottie"
|
|
63
|
+
version = "4.4.3"
|
|
64
|
+
extraOpts += listOf("-compiler-option", "-fmodules")
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
sourceSets {
|
|
69
|
+
all {
|
|
70
|
+
languageSettings.optIn("vn.momo.kits.modifier.InternalApi")
|
|
71
|
+
}
|
|
72
|
+
commonMain.dependencies {
|
|
73
|
+
implementation(compose.runtime)
|
|
74
|
+
implementation(compose.material)
|
|
75
|
+
implementation(compose.material3)
|
|
76
|
+
implementation(compose.components.resources)
|
|
77
|
+
implementation(libs.compose.ui.backhandler)
|
|
78
|
+
implementation(libs.ktor.client.core)
|
|
79
|
+
implementation(libs.jetbrains.coroutines.core)
|
|
80
|
+
implementation(libs.navigation.multiplatform)
|
|
81
|
+
implementation(libs.coil.multiplatform.compose)
|
|
82
|
+
implementation(libs.coil.multiplatform.core)
|
|
83
|
+
implementation(libs.coil.multiplatform.network.ktor)
|
|
84
|
+
implementation(libs.jetbrains.serialization.json)
|
|
85
|
+
implementation(libs.kotlinx.datetime)
|
|
86
|
+
api(libs.native.max.api)
|
|
87
|
+
implementation(libs.compottie)
|
|
88
|
+
implementation(libs.gif.image)
|
|
89
|
+
}
|
|
90
|
+
androidMain.dependencies {
|
|
91
|
+
implementation(libs.ktor.client.okhttp)
|
|
92
|
+
implementation(libs.airbnb.lottie)
|
|
93
|
+
}
|
|
94
|
+
iosMain.dependencies {
|
|
95
|
+
implementation(libs.ktor.client.darwin)
|
|
96
|
+
}
|
|
97
|
+
// AI-GENERATED START: verify toolkit request ownership
|
|
98
|
+
commonTest.dependencies {
|
|
99
|
+
implementation(kotlin("test"))
|
|
100
|
+
}
|
|
101
|
+
// AI-GENERATED END: verify toolkit request ownership
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
repositories {
|
|
106
|
+
google {
|
|
107
|
+
mavenContent {
|
|
108
|
+
includeGroupAndSubgroups("androidx")
|
|
109
|
+
includeGroupAndSubgroups("com.android")
|
|
110
|
+
includeGroupAndSubgroups("com.google")
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
mavenCentral()
|
|
114
|
+
maven { url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") }
|
|
115
|
+
maven {
|
|
116
|
+
url = uri("https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven")
|
|
117
|
+
credentials {username = "download_packages"; password = "gldt-bjDqLpU_sPcHDuXau2ws" }
|
|
118
|
+
}
|
|
119
|
+
maven {
|
|
120
|
+
url = uri("https://artifacts.mservice.com.vn/repository/maven-momo-app/")
|
|
121
|
+
credentials {
|
|
122
|
+
username = "viewer"
|
|
123
|
+
password = "viewer"
|
|
124
|
+
}
|
|
125
|
+
isAllowInsecureProtocol = true
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
compose {
|
|
130
|
+
resources {
|
|
131
|
+
publicResClass = true
|
|
132
|
+
packageOfResClass = "vn.momo.uikits.resources"
|
|
133
|
+
generateResClass = always
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// publishing {
|
|
138
|
+
// repositories {
|
|
139
|
+
// maven {
|
|
140
|
+
// name = "${gitlabRepo}Packages"
|
|
141
|
+
// credentials {
|
|
142
|
+
// username = gitlabUser
|
|
143
|
+
// password = gitlabKey
|
|
144
|
+
// }
|
|
145
|
+
// url = uri("$gitlabUrl")
|
|
146
|
+
// }
|
|
147
|
+
// }
|
|
148
|
+
// }
|
|
149
|
+
|
|
150
|
+
// mavenPublishing {
|
|
151
|
+
// configure(
|
|
152
|
+
// KotlinMultiplatform(
|
|
153
|
+
// javadocJar = JavadocJar.Empty(),
|
|
154
|
+
// // AI-GENERATED START: the AGP KMP target publishes a single Android variant
|
|
155
|
+
// sourcesJar = true,
|
|
156
|
+
// // AI-GENERATED END: the AGP KMP target publishes a single Android variant
|
|
157
|
+
// )
|
|
158
|
+
// )
|
|
159
|
+
//
|
|
160
|
+
// repositories {
|
|
161
|
+
// maven {
|
|
162
|
+
// name = "${gitlabRepo}Packages"
|
|
163
|
+
// credentials { username = gitlabUser; password = gitlabKey }
|
|
164
|
+
// url = uri("$gitlabUrl")
|
|
165
|
+
// }
|
|
166
|
+
// }
|
|
167
|
+
//
|
|
168
|
+
// coordinates(gitlabGroup.toString(), gitlabArtifactId, gitlabVersion.toString())
|
|
169
|
+
//
|
|
170
|
+
// pom {
|
|
171
|
+
// name = "$gitlabName Klib"
|
|
172
|
+
// description = "$gitlabName"
|
|
173
|
+
// url = "https://gitlab.mservice.com.vn"
|
|
174
|
+
// licenses {
|
|
175
|
+
// license {
|
|
176
|
+
// name = "The Apache License, Version 2.0"
|
|
177
|
+
// url = "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
|
178
|
+
// distribution = "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
|
179
|
+
// }
|
|
180
|
+
// }
|
|
181
|
+
// developers {
|
|
182
|
+
// developer {
|
|
183
|
+
// id = "kotlin-hands-on"
|
|
184
|
+
// name = "Kotlin Developer Advocate"
|
|
185
|
+
// url = "https://github.com/kotlin-hands-on/"
|
|
186
|
+
// }
|
|
187
|
+
// }
|
|
188
|
+
// }
|
|
189
|
+
// }
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import com.vanniktech.maven.publish.JavadocJar
|
|
2
|
+
import com.vanniktech.maven.publish.KotlinMultiplatform
|
|
3
|
+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
4
|
+
|
|
5
|
+
plugins {
|
|
6
|
+
alias(libs.plugins.jetbrains.kotlin.multiplatform)
|
|
7
|
+
// AI-GENERATED START: use the AGP 9 Kotlin Multiplatform Android library target
|
|
8
|
+
alias(libs.plugins.android.kotlin.multiplatform.library)
|
|
9
|
+
// AI-GENERATED END: use the AGP 9 Kotlin Multiplatform Android library target
|
|
10
|
+
alias(libs.plugins.compose)
|
|
11
|
+
alias(libs.plugins.kotlin.compose.compiler)
|
|
12
|
+
alias(libs.plugins.vanniktech.mavenPublish)
|
|
13
|
+
id(libs.plugins.jetbrains.kotlin.cocoapods.get().pluginId)
|
|
14
|
+
kotlin("plugin.serialization")
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
val gitlabName: String = findProperty("name") as String? ?: ""
|
|
18
|
+
val gitlabRepo: String = findProperty("repo") as String? ?: ""
|
|
19
|
+
val gitlabUrl: String = findProperty("url") as String? ?: ""
|
|
20
|
+
val gitlabGroup: String = findProperty("group") as String? ?: ""
|
|
21
|
+
val gitlabArtifactId: String = findProperty("artifact.id") as String? ?: ""
|
|
22
|
+
val gitlabVersion: String = findProperty("version") as String? ?: ""
|
|
23
|
+
val gitlabUser: String = findProperty("gitlab.user") as String? ?: ""
|
|
24
|
+
val gitlabKey: String = findProperty("gitlab.password") as String? ?: ""
|
|
25
|
+
|
|
26
|
+
kotlin {
|
|
27
|
+
// AI-GENERATED START: configure the AGP 9 Android target and host tests
|
|
28
|
+
android {
|
|
29
|
+
namespace = "$gitlabGroup.$gitlabArtifactId"
|
|
30
|
+
compileSdk = libs.versions.android.compileSdk.get().toInt()
|
|
31
|
+
minSdk = libs.versions.android.minSdk.get().toInt()
|
|
32
|
+
androidResources.enable = true
|
|
33
|
+
withHostTest {}
|
|
34
|
+
compilerOptions {
|
|
35
|
+
jvmTarget.set(JvmTarget.JVM_17)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// AI-GENERATED END: configure the AGP 9 Android target and host tests
|
|
39
|
+
|
|
40
|
+
val fwName = gitlabArtifactId
|
|
41
|
+
val iosTargets = listOf(iosArm64(), iosSimulatorArm64())
|
|
42
|
+
iosTargets.forEach {
|
|
43
|
+
it.binaries.framework {
|
|
44
|
+
baseName = fwName
|
|
45
|
+
binaryOption("bundleId", "$gitlabGroup.$fwName")
|
|
46
|
+
isStatic = true
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
cocoapods {
|
|
51
|
+
version = gitlabVersion
|
|
52
|
+
summary = "IOS Shared module"
|
|
53
|
+
homepage = "https://momo.vn"
|
|
54
|
+
ios.deploymentTarget = "15.0"
|
|
55
|
+
|
|
56
|
+
framework {
|
|
57
|
+
baseName = fwName
|
|
58
|
+
isStatic = true
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
pod("lottie-ios") {
|
|
62
|
+
moduleName = "Lottie"
|
|
63
|
+
version = "4.4.3"
|
|
64
|
+
extraOpts += listOf("-compiler-option", "-fmodules")
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
sourceSets {
|
|
69
|
+
all {
|
|
70
|
+
languageSettings.optIn("vn.momo.kits.modifier.InternalApi")
|
|
71
|
+
}
|
|
72
|
+
commonMain.dependencies {
|
|
73
|
+
implementation(compose.runtime)
|
|
74
|
+
implementation(compose.material)
|
|
75
|
+
implementation(compose.material3)
|
|
76
|
+
implementation(compose.components.resources)
|
|
77
|
+
implementation(libs.compose.ui.backhandler)
|
|
78
|
+
implementation(libs.ktor.client.core)
|
|
79
|
+
implementation(libs.jetbrains.coroutines.core)
|
|
80
|
+
implementation(libs.navigation.multiplatform)
|
|
81
|
+
implementation(libs.coil.multiplatform.compose)
|
|
82
|
+
implementation(libs.coil.multiplatform.core)
|
|
83
|
+
implementation(libs.coil.multiplatform.network.ktor)
|
|
84
|
+
implementation(libs.jetbrains.serialization.json)
|
|
85
|
+
implementation(libs.kotlinx.datetime)
|
|
86
|
+
api(libs.native.max.api)
|
|
87
|
+
implementation(libs.compottie)
|
|
88
|
+
implementation(libs.gif.image)
|
|
89
|
+
}
|
|
90
|
+
androidMain.dependencies {
|
|
91
|
+
implementation(libs.ktor.client.okhttp)
|
|
92
|
+
implementation(libs.airbnb.lottie)
|
|
93
|
+
}
|
|
94
|
+
iosMain.dependencies {
|
|
95
|
+
implementation(libs.ktor.client.darwin)
|
|
96
|
+
}
|
|
97
|
+
// AI-GENERATED START: verify toolkit request ownership
|
|
98
|
+
commonTest.dependencies {
|
|
99
|
+
implementation(kotlin("test"))
|
|
100
|
+
}
|
|
101
|
+
// AI-GENERATED END: verify toolkit request ownership
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
repositories {
|
|
106
|
+
google {
|
|
107
|
+
mavenContent {
|
|
108
|
+
includeGroupAndSubgroups("androidx")
|
|
109
|
+
includeGroupAndSubgroups("com.android")
|
|
110
|
+
includeGroupAndSubgroups("com.google")
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
mavenCentral()
|
|
114
|
+
maven { url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") }
|
|
115
|
+
maven {
|
|
116
|
+
url = uri("https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven")
|
|
117
|
+
credentials {username = "download_packages"; password = "gldt-bjDqLpU_sPcHDuXau2ws" }
|
|
118
|
+
}
|
|
119
|
+
maven {
|
|
120
|
+
url = uri("https://artifacts.mservice.com.vn/repository/maven-momo-app/")
|
|
121
|
+
credentials {
|
|
122
|
+
username = "viewer"
|
|
123
|
+
password = "viewer"
|
|
124
|
+
}
|
|
125
|
+
isAllowInsecureProtocol = true
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
compose {
|
|
130
|
+
resources {
|
|
131
|
+
publicResClass = true
|
|
132
|
+
packageOfResClass = "vn.momo.uikits.resources"
|
|
133
|
+
generateResClass = always
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
publishing {
|
|
138
|
+
repositories {
|
|
139
|
+
maven {
|
|
140
|
+
name = "${gitlabRepo}Packages"
|
|
141
|
+
credentials {
|
|
142
|
+
username = gitlabUser
|
|
143
|
+
password = gitlabKey
|
|
144
|
+
}
|
|
145
|
+
url = uri("$gitlabUrl")
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
mavenPublishing {
|
|
151
|
+
configure(
|
|
152
|
+
KotlinMultiplatform(
|
|
153
|
+
javadocJar = JavadocJar.Empty(),
|
|
154
|
+
// AI-GENERATED START: the AGP KMP target publishes a single Android variant
|
|
155
|
+
sourcesJar = true,
|
|
156
|
+
// AI-GENERATED END: the AGP KMP target publishes a single Android variant
|
|
157
|
+
)
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
repositories {
|
|
161
|
+
maven {
|
|
162
|
+
name = "${gitlabRepo}Packages"
|
|
163
|
+
credentials { username = gitlabUser; password = gitlabKey }
|
|
164
|
+
url = uri("$gitlabUrl")
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
coordinates(gitlabGroup.toString(), gitlabArtifactId, gitlabVersion.toString())
|
|
169
|
+
|
|
170
|
+
pom {
|
|
171
|
+
name = "$gitlabName Klib"
|
|
172
|
+
description = "$gitlabName"
|
|
173
|
+
url = "https://gitlab.mservice.com.vn"
|
|
174
|
+
licenses {
|
|
175
|
+
license {
|
|
176
|
+
name = "The Apache License, Version 2.0"
|
|
177
|
+
url = "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
|
178
|
+
distribution = "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
developers {
|
|
182
|
+
developer {
|
|
183
|
+
id = "kotlin-hands-on"
|
|
184
|
+
name = "Kotlin Developer Advocate"
|
|
185
|
+
url = "https://github.com/kotlin-hands-on/"
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
Pod::Spec.new do |spec|
|
|
2
|
+
spec.name = 'compose'
|
|
3
|
+
spec.version = '0.167.1-beta.4-debug'
|
|
4
|
+
spec.homepage = 'https://momo.vn'
|
|
5
|
+
spec.source = { :http=> ''}
|
|
6
|
+
spec.authors = ''
|
|
7
|
+
spec.license = ''
|
|
8
|
+
spec.summary = 'IOS Shared module'
|
|
9
|
+
spec.vendored_frameworks = 'build/cocoapods/framework/kits.framework'
|
|
10
|
+
spec.libraries = 'c++'
|
|
11
|
+
spec.ios.deployment_target = '15.0'
|
|
12
|
+
spec.dependency 'lottie-ios', '4.4.3'
|
|
13
|
+
if !Dir.exist?('build/cocoapods/framework/kits.framework') || Dir.empty?('build/cocoapods/framework/kits.framework')
|
|
14
|
+
raise "
|
|
15
|
+
Kotlin framework 'kits' doesn't exist yet, so a proper Xcode project can't be generated.
|
|
16
|
+
'pod install' should be executed after running ':generateDummyFramework' Gradle task:
|
|
17
|
+
./gradlew :compose:generateDummyFramework
|
|
18
|
+
Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)"
|
|
19
|
+
end
|
|
20
|
+
spec.xcconfig = {
|
|
21
|
+
'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO',
|
|
22
|
+
}
|
|
23
|
+
spec.pod_target_xcconfig = {
|
|
24
|
+
'KOTLIN_PROJECT_PATH' => ':compose',
|
|
25
|
+
'PRODUCT_MODULE_NAME' => 'kits',
|
|
26
|
+
}
|
|
27
|
+
spec.script_phases = [
|
|
28
|
+
{
|
|
29
|
+
:name => 'Build compose',
|
|
30
|
+
:execution_position => :before_compile,
|
|
31
|
+
:shell_path => '/bin/sh',
|
|
32
|
+
:script => <<-SCRIPT
|
|
33
|
+
if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then
|
|
34
|
+
echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\""
|
|
35
|
+
exit 0
|
|
36
|
+
fi
|
|
37
|
+
set -ev
|
|
38
|
+
REPO_ROOT="$PODS_TARGET_SRCROOT"
|
|
39
|
+
"$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \
|
|
40
|
+
-Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \
|
|
41
|
+
-Pkotlin.native.cocoapods.archs="$ARCHS" \
|
|
42
|
+
-Pkotlin.native.cocoapods.configuration="$CONFIGURATION"
|
|
43
|
+
SCRIPT
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
spec.resources = ['build/compose/cocoapods/compose-resources']
|
|
47
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
package vn.momo.kits.const
|
|
2
|
+
|
|
3
|
+
import androidx.compose.runtime.Composable
|
|
4
|
+
import androidx.compose.runtime.remember
|
|
5
|
+
import androidx.compose.ui.platform.LocalContext
|
|
6
|
+
import androidx.compose.ui.text.font.Font
|
|
7
|
+
import androidx.compose.ui.text.font.FontFamily
|
|
8
|
+
|
|
9
|
+
@Composable
|
|
10
|
+
internal actual fun hostFontFamily(fileName: String): FontFamily? {
|
|
11
|
+
val assets = LocalContext.current.applicationContext.assets
|
|
12
|
+
return remember(fileName) {
|
|
13
|
+
val path = "fonts/$fileName"
|
|
14
|
+
// AssetManager.open ném IOException nếu thiếu file; Font(path, assetManager) thì lỗi
|
|
15
|
+
// muộn lúc render nên phải kiểm tra tồn tại trước.
|
|
16
|
+
val exists = runCatching { assets.open(path).close() }.isSuccess
|
|
17
|
+
if (exists) FontFamily(Font(path = path, assetManager = assets)) else null
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package vn.momo.kits.platform
|
|
2
|
+
|
|
3
|
+
import androidx.compose.runtime.Composable
|
|
4
|
+
import androidx.compose.runtime.State
|
|
5
|
+
import androidx.compose.runtime.mutableStateOf
|
|
6
|
+
import androidx.compose.runtime.remember
|
|
7
|
+
|
|
8
|
+
// No passive observer at androidx.activity 1.10.x; a second callback would steal the gesture.
|
|
9
|
+
@Composable
|
|
10
|
+
actual fun rememberBackGestureProgress(): State<Float?> = remember { mutableStateOf(null) }
|
|
11
|
+
|
|
12
|
+
actual fun reportFloatingArrowBack(shouldUse: Boolean) = Unit
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
package vn.momo.kits.platform
|
|
2
|
+
|
|
3
|
+
import android.annotation.SuppressLint
|
|
4
|
+
import android.content.res.Resources
|
|
5
|
+
import android.graphics.BlurMaskFilter
|
|
6
|
+
import android.graphics.PorterDuff
|
|
7
|
+
import android.graphics.PorterDuffColorFilter
|
|
8
|
+
import android.os.Build
|
|
9
|
+
import androidx.compose.foundation.layout.Box
|
|
10
|
+
import androidx.compose.runtime.Composable
|
|
11
|
+
import androidx.compose.runtime.LaunchedEffect
|
|
12
|
+
import androidx.compose.runtime.getValue
|
|
13
|
+
import androidx.compose.runtime.rememberUpdatedState
|
|
14
|
+
import androidx.compose.runtime.snapshotFlow
|
|
15
|
+
import androidx.compose.ui.Modifier
|
|
16
|
+
import androidx.compose.ui.graphics.Color
|
|
17
|
+
import androidx.compose.ui.graphics.NativePaint
|
|
18
|
+
import androidx.compose.ui.graphics.toArgb
|
|
19
|
+
import androidx.compose.ui.platform.LocalConfiguration
|
|
20
|
+
import androidx.compose.ui.semantics.contentDescription
|
|
21
|
+
import androidx.compose.ui.semantics.semantics
|
|
22
|
+
import androidx.compose.ui.unit.Dp
|
|
23
|
+
import androidx.compose.ui.unit.dp
|
|
24
|
+
import com.airbnb.lottie.LottieProperty
|
|
25
|
+
import com.airbnb.lottie.compose.LottieAnimation
|
|
26
|
+
import com.airbnb.lottie.compose.LottieCompositionSpec
|
|
27
|
+
import com.airbnb.lottie.compose.animateLottieCompositionAsState
|
|
28
|
+
import com.airbnb.lottie.compose.rememberLottieComposition
|
|
29
|
+
import com.airbnb.lottie.compose.rememberLottieDynamicProperties
|
|
30
|
+
import com.airbnb.lottie.compose.rememberLottieDynamicProperty
|
|
31
|
+
import vn.momo.kits.const.AppNavigationBar
|
|
32
|
+
import vn.momo.kits.const.AppStatusBar
|
|
33
|
+
import vn.momo.kits.navigation.Navigator
|
|
34
|
+
import vn.momo.kits.utils.readJson
|
|
35
|
+
import androidx.activity.compose.BackHandler as AndroidBackHandler
|
|
36
|
+
|
|
37
|
+
actual fun getPlatformName(): String = "Android"
|
|
38
|
+
|
|
39
|
+
@Composable
|
|
40
|
+
actual fun getScreenDimensions(): ScreenDimension {
|
|
41
|
+
val config = LocalConfiguration.current
|
|
42
|
+
return ScreenDimension(
|
|
43
|
+
config.screenWidthDp, config.screenHeightDp
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
actual fun NativePaint.setMaskFilter(blurRadius: Float) {
|
|
48
|
+
this.maskFilter = BlurMaskFilter(blurRadius, BlurMaskFilter.Blur.NORMAL)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@SuppressLint("InternalInsetResource")
|
|
52
|
+
@Composable
|
|
53
|
+
actual fun getStatusBarHeight(): Dp {
|
|
54
|
+
val resourceId = Resources.getSystem().getIdentifier(
|
|
55
|
+
"status_bar_height",
|
|
56
|
+
"dimen",
|
|
57
|
+
"android"
|
|
58
|
+
)
|
|
59
|
+
return if(resourceId > 0) Resources.getSystem().getDimensionPixelSize(resourceId).dp else 0.dp
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@Composable
|
|
63
|
+
actual fun BackHandler(enabled: Boolean, onBack: () -> Unit) {
|
|
64
|
+
AndroidBackHandler(enabled = enabled, onBack = onBack)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@Composable
|
|
68
|
+
actual fun ProvideNavigationEventDispatcherOwner(navigator: Navigator, content: @Composable () -> Unit) {
|
|
69
|
+
content()
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@Composable
|
|
73
|
+
actual fun getScreenHeight(): Dp {
|
|
74
|
+
return getScreenDimensions().height.dp + if (getOSVersion() >= 35) 0.dp else AppStatusBar.current + AppNavigationBar.current
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
actual fun getOSVersion(): OSVersion = OSVersion.Android(sdk = Build.VERSION.SDK_INT)
|
|
78
|
+
|
|
79
|
+
@Composable
|
|
80
|
+
actual fun LottieAnimation(
|
|
81
|
+
path: String,
|
|
82
|
+
tintColor: Color?,
|
|
83
|
+
bgColor: Color?,
|
|
84
|
+
placedAsOverlay: Boolean,
|
|
85
|
+
iterations: Int,
|
|
86
|
+
isPlaying: Boolean,
|
|
87
|
+
onEvent: ((String) -> Unit)?,
|
|
88
|
+
modifier: Modifier,
|
|
89
|
+
useCompose: Boolean
|
|
90
|
+
) {
|
|
91
|
+
if (useCompose) {
|
|
92
|
+
ComposeLottieAnimation(path, tintColor, bgColor, iterations, isPlaying, onEvent, modifier)
|
|
93
|
+
return
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
val json = readJson(path)
|
|
97
|
+
|
|
98
|
+
if (json.isEmpty()) {
|
|
99
|
+
Box(modifier)
|
|
100
|
+
return
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
val composition by rememberLottieComposition(
|
|
104
|
+
LottieCompositionSpec.JsonString(json)
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
val colorFilter = PorterDuffColorFilter(
|
|
108
|
+
tintColor?.toArgb() ?: Color.White.toArgb(),
|
|
109
|
+
PorterDuff.Mode.SRC_ATOP
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
val dynamicProperties = rememberLottieDynamicProperties(
|
|
113
|
+
rememberLottieDynamicProperty(
|
|
114
|
+
property = LottieProperty.COLOR_FILTER,
|
|
115
|
+
value = colorFilter,
|
|
116
|
+
keyPath = arrayOf("**")
|
|
117
|
+
)
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
val lottieState = animateLottieCompositionAsState(
|
|
121
|
+
composition = composition,
|
|
122
|
+
iterations = iterations,
|
|
123
|
+
isPlaying = isPlaying,
|
|
124
|
+
restartOnPlay = false,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
val currentOnEvent by rememberUpdatedState(onEvent)
|
|
128
|
+
|
|
129
|
+
LaunchedEffect(isPlaying) {
|
|
130
|
+
currentOnEvent?.invoke(if (isPlaying) LottieEvent.Start else LottieEvent.Pause)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
LaunchedEffect(lottieState) {
|
|
134
|
+
var armed = false
|
|
135
|
+
snapshotFlow { lottieState.isAtEnd }.collect { atEnd ->
|
|
136
|
+
if (!atEnd) armed = true
|
|
137
|
+
else if (armed) { armed = false; currentOnEvent?.invoke(LottieEvent.Finish) }
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
LottieAnimation(
|
|
142
|
+
composition = composition,
|
|
143
|
+
progress = { lottieState.progress },
|
|
144
|
+
dynamicProperties = if (tintColor != null) dynamicProperties else null,
|
|
145
|
+
modifier = modifier
|
|
146
|
+
)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
actual fun NativePaint.setColor(color: Color){
|
|
150
|
+
this.color = color.toArgb()
|
|
151
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
package vn.momo.kits.application
|
|
2
|
+
|
|
3
|
+
import androidx.compose.foundation.background
|
|
4
|
+
import androidx.compose.foundation.layout.*
|
|
5
|
+
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
6
|
+
import androidx.compose.runtime.Composable
|
|
7
|
+
import androidx.compose.ui.Modifier
|
|
8
|
+
import androidx.compose.ui.graphics.Color
|
|
9
|
+
import androidx.compose.ui.unit.dp
|
|
10
|
+
import androidx.compose.ui.zIndex
|
|
11
|
+
import vn.momo.kits.components.InputSearch
|
|
12
|
+
import vn.momo.kits.components.InputSearchProps
|
|
13
|
+
import vn.momo.kits.const.Radius
|
|
14
|
+
import vn.momo.kits.const.Spacing
|
|
15
|
+
|
|
16
|
+
@Composable
|
|
17
|
+
internal fun AnimationSearchInput(
|
|
18
|
+
animations: HeaderAnimations,
|
|
19
|
+
inputSearchProps: InputSearchProps
|
|
20
|
+
) {
|
|
21
|
+
Box(
|
|
22
|
+
modifier = Modifier
|
|
23
|
+
.fillMaxWidth()
|
|
24
|
+
.offset(
|
|
25
|
+
x = animations.translateX.dp,
|
|
26
|
+
y = animations.translateY.dp
|
|
27
|
+
)
|
|
28
|
+
) {
|
|
29
|
+
Box(
|
|
30
|
+
modifier = Modifier
|
|
31
|
+
.height(HEADER_HEIGHT.dp)
|
|
32
|
+
.padding(vertical = Spacing.S)
|
|
33
|
+
.zIndex(1f)
|
|
34
|
+
) {
|
|
35
|
+
Box(
|
|
36
|
+
modifier = Modifier
|
|
37
|
+
.width(animations.width.dp)
|
|
38
|
+
.background(
|
|
39
|
+
color = animations.backgroundSearch,
|
|
40
|
+
shape = RoundedCornerShape(Radius.XL)
|
|
41
|
+
)
|
|
42
|
+
) {
|
|
43
|
+
InputSearch(
|
|
44
|
+
inputSearchProps = inputSearchProps.copy(
|
|
45
|
+
showButtonText = false,
|
|
46
|
+
backgroundColor = Color.Transparent
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|