@momo-kits/native-kits 0.157.5 → 0.158.1-beta.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/.claude/settings.local.json +11 -0
- package/.claude/skills/design-system/SKILL.md +88 -0
- package/.claude/skills/design-system/references/components/avatar.md +134 -0
- package/.claude/skills/design-system/references/components/badge.md +127 -0
- package/.claude/skills/design-system/references/components/bottom-tab.md +177 -0
- package/.claude/skills/design-system/references/components/bottomsheet.md +170 -0
- package/.claude/skills/design-system/references/components/button.md +206 -0
- package/.claude/skills/design-system/references/components/carousel.md +117 -0
- package/.claude/skills/design-system/references/components/checkbox.md +98 -0
- package/.claude/skills/design-system/references/components/chip.md +146 -0
- package/.claude/skills/design-system/references/components/collapse.md +120 -0
- package/.claude/skills/design-system/references/components/date-picker.md +119 -0
- package/.claude/skills/design-system/references/components/divider.md +84 -0
- package/.claude/skills/design-system/references/components/icon.md +130 -0
- package/.claude/skills/design-system/references/components/image.md +81 -0
- package/.claude/skills/design-system/references/components/information.md +107 -0
- package/.claude/skills/design-system/references/components/input-dropdown.md +138 -0
- package/.claude/skills/design-system/references/components/input-money.md +157 -0
- package/.claude/skills/design-system/references/components/input-otp.md +132 -0
- package/.claude/skills/design-system/references/components/input-phone-number.md +140 -0
- package/.claude/skills/design-system/references/components/input-search.md +124 -0
- package/.claude/skills/design-system/references/components/input-text-area.md +133 -0
- package/.claude/skills/design-system/references/components/input.md +152 -0
- package/.claude/skills/design-system/references/components/loader.md +87 -0
- package/.claude/skills/design-system/references/components/pagination.md +105 -0
- package/.claude/skills/design-system/references/components/popup-notify.md +128 -0
- package/.claude/skills/design-system/references/components/progress-info.md +114 -0
- package/.claude/skills/design-system/references/components/radio.md +86 -0
- package/.claude/skills/design-system/references/components/rating.md +126 -0
- package/.claude/skills/design-system/references/components/skeleton.md +120 -0
- package/.claude/skills/design-system/references/components/slider.md +141 -0
- package/.claude/skills/design-system/references/components/snackbar.md +97 -0
- package/.claude/skills/design-system/references/components/stepper.md +100 -0
- package/.claude/skills/design-system/references/components/steps.md +91 -0
- package/.claude/skills/design-system/references/components/suggest-action.md +95 -0
- package/.claude/skills/design-system/references/components/swipe.md +121 -0
- package/.claude/skills/design-system/references/components/switch.md +98 -0
- package/.claude/skills/design-system/references/components/tab-view.md +120 -0
- package/.claude/skills/design-system/references/components/tag.md +118 -0
- package/.claude/skills/design-system/references/components/text.md +151 -0
- package/.claude/skills/design-system/references/components/toast.md +99 -0
- package/.claude/skills/design-system/references/components/tooltip.md +138 -0
- package/.claude/skills/design-system/references/components/top-nav-miniapp.md +94 -0
- package/.claude/skills/design-system/references/components/top-nav.md +226 -0
- package/.claude/skills/design-system/references/components/uploader.md +115 -0
- package/.claude/skills/design-system/references/navigation/bottom-tab.md +131 -0
- package/.claude/skills/design-system/references/navigation/bottomsheet.md +161 -0
- package/.claude/skills/design-system/references/navigation/modal.md +133 -0
- package/.claude/skills/design-system/references/navigation/navigation-options.md +225 -0
- package/.claude/skills/design-system/references/navigation/navigator.md +111 -0
- package/.claude/skills/design-system/references/navigation/setup.md +134 -0
- package/.claude/skills/design-system/references/navigation/stack.md +128 -0
- package/.claude/skills/design-system/references/spec-convention.md +80 -0
- package/.claude/skills/design-system/references/tokens/colors.md +131 -0
- package/.claude/skills/design-system/references/tokens/spacing-radius.md +144 -0
- package/.claude/skills/design-system/references/tokens/theme.md +125 -0
- package/.claude/skills/design-system/references/tokens/typography.md +135 -0
- package/.claude/skills/design-system-kits/SKILL.md +102 -0
- package/.claude/skills/design-system-kits/references/code-convention.md +118 -0
- package/.claude/skills/design-system-kits/references/components/avatar.md +45 -0
- package/.claude/skills/design-system-kits/references/components/badge.md +27 -0
- package/.claude/skills/design-system-kits/references/components/button.md +65 -0
- package/.claude/skills/design-system-kits/references/components/carousel.md +51 -0
- package/.claude/skills/design-system-kits/references/components/checkbox.md +39 -0
- package/.claude/skills/design-system-kits/references/components/chip.md +54 -0
- package/.claude/skills/design-system-kits/references/components/collapse.md +63 -0
- package/.claude/skills/design-system-kits/references/components/date-picker.md +36 -0
- package/.claude/skills/design-system-kits/references/components/divider.md +21 -0
- package/.claude/skills/design-system-kits/references/components/icon.md +382 -0
- package/.claude/skills/design-system-kits/references/components/image.md +62 -0
- package/.claude/skills/design-system-kits/references/components/information.md +61 -0
- package/.claude/skills/design-system-kits/references/components/input-dropdown.md +92 -0
- package/.claude/skills/design-system-kits/references/components/input-money.md +128 -0
- package/.claude/skills/design-system-kits/references/components/input-otp.md +85 -0
- package/.claude/skills/design-system-kits/references/components/input-phone-number.md +96 -0
- package/.claude/skills/design-system-kits/references/components/input-search.md +127 -0
- package/.claude/skills/design-system-kits/references/components/input-text-area.md +100 -0
- package/.claude/skills/design-system-kits/references/components/input.md +126 -0
- package/.claude/skills/design-system-kits/references/components/loader.md +41 -0
- package/.claude/skills/design-system-kits/references/components/pagination.md +47 -0
- package/.claude/skills/design-system-kits/references/components/popup-notify.md +69 -0
- package/.claude/skills/design-system-kits/references/components/popup-promotion.md +35 -0
- package/.claude/skills/design-system-kits/references/components/progress-info.md +55 -0
- package/.claude/skills/design-system-kits/references/components/radio.md +42 -0
- package/.claude/skills/design-system-kits/references/components/rating.md +36 -0
- package/.claude/skills/design-system-kits/references/components/skeleton.md +25 -0
- package/.claude/skills/design-system-kits/references/components/slider.md +53 -0
- package/.claude/skills/design-system-kits/references/components/snackbar.md +52 -0
- package/.claude/skills/design-system-kits/references/components/stepper.md +46 -0
- package/.claude/skills/design-system-kits/references/components/steps.md +57 -0
- package/.claude/skills/design-system-kits/references/components/suggest-action.md +44 -0
- package/.claude/skills/design-system-kits/references/components/swipe.md +44 -0
- package/.claude/skills/design-system-kits/references/components/switch.md +43 -0
- package/.claude/skills/design-system-kits/references/components/tab-view.md +56 -0
- package/.claude/skills/design-system-kits/references/components/tag.md +50 -0
- package/.claude/skills/design-system-kits/references/components/text.md +56 -0
- package/.claude/skills/design-system-kits/references/components/toast.md +51 -0
- package/.claude/skills/design-system-kits/references/components/tooltip.md +95 -0
- package/.claude/skills/design-system-kits/references/components/uploader.md +48 -0
- package/.claude/skills/design-system-kits/references/design-spec-structure.md +356 -0
- package/.claude/skills/design-system-kits/references/design-spec-to-code.md +596 -0
- package/.claude/skills/design-system-kits/references/navigation/bottom-tab.md +155 -0
- package/.claude/skills/design-system-kits/references/navigation/bottomsheet.md +94 -0
- package/.claude/skills/design-system-kits/references/navigation/modal.md +125 -0
- package/.claude/skills/design-system-kits/references/navigation/navigation-options.md +430 -0
- package/.claude/skills/design-system-kits/references/navigation/navigator.md +177 -0
- package/.claude/skills/design-system-kits/references/navigation/setup.md +94 -0
- package/.claude/skills/design-system-kits/references/navigation/stack.md +152 -0
- package/.claude/skills/design-system-kits/references/screen-layout-rule.md +125 -0
- package/.claude/skills/design-system-kits/references/tokens/colors.md +183 -0
- package/.claude/skills/design-system-kits/references/tokens/spacing-radius.md +45 -0
- package/.claude/skills/design-system-kits/references/tokens/theme.md +97 -0
- package/.claude/skills/design-system-kits/references/tokens/typography.md +105 -0
- package/.claude/skills/vibe-design/SKILL.md +306 -0
- package/build.gradle.kts +11 -0
- package/compose/build.gradle.kts +180 -0
- package/compose/build.gradle.kts.backup +180 -0
- package/compose/compose.podspec +54 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +117 -0
- package/compose/src/commonMain/composeResources/font/momosignature.otf +0 -0
- package/compose/src/commonMain/composeResources/font/momotrustdisplay.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_black.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_black.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_bold.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_heavy.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_light.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_medium.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_regular.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_semibold.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_thin.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_thin.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.ttf +0 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +57 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +107 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +201 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +222 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +48 -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 +305 -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 +720 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +121 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +405 -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 +85 -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 +340 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +198 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +357 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +123 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +94 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +136 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +224 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +543 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +23 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +148 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +188 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +116 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +448 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +172 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +255 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +231 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +233 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +254 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +241 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +364 -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 +92 -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 +352 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +103 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +338 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +70 -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 +17 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +96 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +348 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +256 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +494 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +131 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +215 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +96 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +531 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +92 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +130 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +214 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +590 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +177 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +192 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +205 -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 +239 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +191 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +306 -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 +188 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +285 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +2 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +35 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +2 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +50 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +68 -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 +14 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +50 -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 +239 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +119 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +98 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +161 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +331 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +497 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +162 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +243 -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 +187 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +279 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +80 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +306 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +32 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +370 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +132 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +46 -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 +62 -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 +88 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +161 -0
- package/gradle/libs.versions.toml +57 -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/Popup/PopupPromotion.swift +2 -2
- package/local.properties +8 -0
- package/package.json +1 -1
- package/settings.gradle.kts +52 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Loader
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Loader } from '@momo-kits/foundation';
|
|
7
|
+
|
|
8
|
+
<Loader type="spinner" /> // 'dot'|'spinner'
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Compose
|
|
12
|
+
|
|
13
|
+
```kotlin
|
|
14
|
+
import vn.momo.kits.components.Loader
|
|
15
|
+
import vn.momo.kits.components.LoaderType
|
|
16
|
+
import vn.momo.kits.components.ProgressBar
|
|
17
|
+
|
|
18
|
+
// Unified entry-point
|
|
19
|
+
Loader(
|
|
20
|
+
type = LoaderType.DOT, // DOT | SPINNER; default: DOT
|
|
21
|
+
tintColor = null,
|
|
22
|
+
modifier = Modifier,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
// Progress bar (determinate)
|
|
26
|
+
ProgressBar(
|
|
27
|
+
percent = 75f, // 0–100; clamped
|
|
28
|
+
color = null, // default: theme.primary
|
|
29
|
+
modifier = Modifier,
|
|
30
|
+
)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`Loader` (DOT/SPINNER) = indeterminate loading. `ProgressBar` = animated determinate progress bar.
|
|
34
|
+
|
|
35
|
+
## Key Differences
|
|
36
|
+
|
|
37
|
+
| Feature | React Native | Compose |
|
|
38
|
+
|---------|-------------|---------|
|
|
39
|
+
| Loading types | `type="dot"\|"spinner"` | `LoaderType` enum |
|
|
40
|
+
| Determinate progress | Not available | `ProgressBar` composable |
|
|
41
|
+
| Lottie | Built-in | `LottieAnimation` |
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Pagination
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Pagination, PaginationScroll } from '@momo-kits/foundation';
|
|
7
|
+
|
|
8
|
+
<Pagination
|
|
9
|
+
type="default" // 'default'|'black_white'|'number'|'scroll'; default: 'default'
|
|
10
|
+
activeIndex={currentPage}
|
|
11
|
+
dataLength={10}
|
|
12
|
+
style={{}}
|
|
13
|
+
/>
|
|
14
|
+
|
|
15
|
+
// PaginationScroll — wraps scrollable content with progress indicator
|
|
16
|
+
<PaginationScroll style={{}}>
|
|
17
|
+
{items.map(item => <Card key={item.id} />)}
|
|
18
|
+
</PaginationScroll>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Props
|
|
22
|
+
|
|
23
|
+
| Prop | Type | Default | Description |
|
|
24
|
+
|------|------|---------|-------------|
|
|
25
|
+
| `type` | `'default' \| 'black_white' \| 'number' \| 'scroll'` | `'default'` | Visual style variant |
|
|
26
|
+
| `activeIndex` | `number` | — | Currently active page index (0-based) |
|
|
27
|
+
| `dataLength` | `number` | — | Total number of pages |
|
|
28
|
+
| `style` | `ViewStyle` | — | Custom wrapper style |
|
|
29
|
+
|
|
30
|
+
> **Direct exports:** `PaginationDot`, `PaginationNumber`, `PaginationWhiteDot` are also exported individually for RN use.
|
|
31
|
+
> **PaginationScroll** wraps scrollable content with a progress indicator bar.
|
|
32
|
+
|
|
33
|
+
## Compose
|
|
34
|
+
|
|
35
|
+
```kotlin
|
|
36
|
+
import vn.momo.kits.components.PaginationDot
|
|
37
|
+
import vn.momo.kits.components.PaginationNumber
|
|
38
|
+
import vn.momo.kits.components.PaginationScroll
|
|
39
|
+
import vn.momo.kits.components.PaginationWhiteDot
|
|
40
|
+
|
|
41
|
+
PaginationDot(activeIndex = 1, dataLength = 5) // 0-based index
|
|
42
|
+
PaginationNumber(activeIndex = 2, dataLength = 10) // shows "3/10"
|
|
43
|
+
PaginationWhiteDot(activeIndex = 0, dataLength = 3) // with dark background pill
|
|
44
|
+
PaginationScroll(modifier = Modifier.fillMaxWidth()) {
|
|
45
|
+
// scrollable content here
|
|
46
|
+
}
|
|
47
|
+
```
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# PopupNotify (Dialog)
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { PopupNotify } from '@momo-kits/foundation';
|
|
7
|
+
|
|
8
|
+
<PopupNotify
|
|
9
|
+
title="Delete Item?" // dialog title (default: 'Title')
|
|
10
|
+
description="This action cannot be undone." // description text or ReactNode
|
|
11
|
+
image={imageSource} // optional image/illustration URL
|
|
12
|
+
error="" // optional error code text
|
|
13
|
+
primary={{
|
|
14
|
+
title: 'Delete',
|
|
15
|
+
onPress: handleDelete,
|
|
16
|
+
}}
|
|
17
|
+
secondary={{
|
|
18
|
+
title: 'Cancel',
|
|
19
|
+
onPress: handleCancel,
|
|
20
|
+
}}
|
|
21
|
+
buttonDirection="row" // 'row'|'column'|'auto' (default: 'row')
|
|
22
|
+
onIconClose={handleClose} // X button pressed callback
|
|
23
|
+
onRequestClose={handleClose} // back button or tap-outside callback
|
|
24
|
+
/>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Compose
|
|
28
|
+
|
|
29
|
+
```kotlin
|
|
30
|
+
import vn.momo.kits.components.PopupNotify
|
|
31
|
+
import vn.momo.kits.components.PopupNotifyProps
|
|
32
|
+
import vn.momo.kits.components.PopupAction
|
|
33
|
+
import vn.momo.kits.components.PopupActionDirection
|
|
34
|
+
|
|
35
|
+
// Show via navigator.showModal:
|
|
36
|
+
val navigator = LocalNavigator.current
|
|
37
|
+
|
|
38
|
+
navigator.showModal(content = {
|
|
39
|
+
PopupNotify(
|
|
40
|
+
props = PopupNotifyProps(
|
|
41
|
+
title = "Confirm Action", // dialog title (default: "Title")
|
|
42
|
+
description = "Are you sure you want to proceed?", // description text
|
|
43
|
+
image = "", // optional image URL
|
|
44
|
+
error = "", // optional error code text
|
|
45
|
+
primary = PopupAction(
|
|
46
|
+
title = "Confirm",
|
|
47
|
+
onPress = { handleConfirm() },
|
|
48
|
+
),
|
|
49
|
+
secondary = PopupAction(
|
|
50
|
+
title = "Cancel",
|
|
51
|
+
onPress = { navigator.pop() },
|
|
52
|
+
),
|
|
53
|
+
buttonDirection = PopupActionDirection.ROW, // ROW, COLUMN, AUTO (default: ROW)
|
|
54
|
+
onIconClose = { navigator.pop() }, // X button pressed callback (required)
|
|
55
|
+
isShowCloseIcon = true, // show/hide X button (default: true)
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
})
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Key Differences
|
|
62
|
+
|
|
63
|
+
| Feature | React Native | Compose |
|
|
64
|
+
|---------|-------------|---------|
|
|
65
|
+
| Rendering | `<PopupNotify>` as JSX | `navigator.showModal { PopupNotify(...) }` |
|
|
66
|
+
| Props | Direct props | Wrapped in `PopupNotifyProps` |
|
|
67
|
+
| Actions | JS objects `{ title, onPress }` | `PopupAction(title, onPress?)` |
|
|
68
|
+
| Dismiss | `onRequestClose` / `onIconClose` | `navigator.pop()` via `onIconClose` |
|
|
69
|
+
| Close icon visibility | Always shown when `onIconClose` is set | Via `isShowCloseIcon` param |
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# PopupPromotion
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { PopupPromotion } from '@momo-kits/foundation';
|
|
7
|
+
|
|
8
|
+
<PopupPromotion
|
|
9
|
+
image="https://example.com/promotion.jpg"
|
|
10
|
+
onIconClose={handleClose}
|
|
11
|
+
onRequestClose={handleClose}
|
|
12
|
+
onActionClick={handleAction}
|
|
13
|
+
/>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Compose
|
|
17
|
+
|
|
18
|
+
```kotlin
|
|
19
|
+
import vn.momo.kits.components.PopupPromotion
|
|
20
|
+
|
|
21
|
+
PopupPromotion(
|
|
22
|
+
source = "https://example.com/promotion.jpg",
|
|
23
|
+
onClose = { handleClose() },
|
|
24
|
+
onPress = { handleAction() },
|
|
25
|
+
)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Key Differences
|
|
29
|
+
|
|
30
|
+
| Feature | React Native | Compose |
|
|
31
|
+
|---------|-------------|---------|
|
|
32
|
+
| Image source | `image` | `source` |
|
|
33
|
+
| Close handler | `onIconClose` | `onClose` |
|
|
34
|
+
| Action click | `onActionClick` | `onPress` |
|
|
35
|
+
| Back button / touch-outside dismiss | `onRequestClose` | Not available |
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# ProgressInfo
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { ProgressInfo } from '@momo-kits/progress-info';
|
|
7
|
+
|
|
8
|
+
<ProgressInfo
|
|
9
|
+
steps={[
|
|
10
|
+
{ title: 'Step 1', description: 'Desc 1' },
|
|
11
|
+
{ title: 'Step 2', description: 'Desc 2' },
|
|
12
|
+
]}
|
|
13
|
+
horizontal={false}
|
|
14
|
+
size="large" // 'small' | 'large'
|
|
15
|
+
useNumber={false}
|
|
16
|
+
showTitle={true}
|
|
17
|
+
showDescription={true}
|
|
18
|
+
align="center"
|
|
19
|
+
/>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Compose
|
|
23
|
+
|
|
24
|
+
```kotlin
|
|
25
|
+
import vn.momo.kits.components.ProgressInfo
|
|
26
|
+
import vn.momo.kits.components.ProgressInfoItem
|
|
27
|
+
import vn.momo.kits.components.ProgressInfoSize
|
|
28
|
+
import vn.momo.kits.components.ProgressInfoAlign
|
|
29
|
+
|
|
30
|
+
ProgressInfo(
|
|
31
|
+
steps = listOf(
|
|
32
|
+
ProgressInfoItem(title = "Step 1", description = "Desc 1"),
|
|
33
|
+
ProgressInfoItem(title = "Step 2", description = "Desc 2"),
|
|
34
|
+
),
|
|
35
|
+
horizontal = false,
|
|
36
|
+
size = ProgressInfoSize.Large, // Small | Large
|
|
37
|
+
useNumber = false,
|
|
38
|
+
showTitle = true,
|
|
39
|
+
showDescription = true,
|
|
40
|
+
align = ProgressInfoAlign.Center, // Left | Right | Center | Stretch
|
|
41
|
+
customIcon = null,
|
|
42
|
+
modifier = Modifier,
|
|
43
|
+
)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> **Note:** Display-only indicator (no active state, no onPress). Use `Steps` for interactive variant.
|
|
47
|
+
|
|
48
|
+
## Key Differences
|
|
49
|
+
|
|
50
|
+
| Feature | React Native | Compose |
|
|
51
|
+
|---------|-------------|---------|
|
|
52
|
+
| Step data | `steps` array | `List<ProgressInfoItem>` |
|
|
53
|
+
| Size | `string` | `ProgressInfoSize` enum |
|
|
54
|
+
| Align | `string` | `ProgressInfoAlign` enum |
|
|
55
|
+
| Active / onPress | Not available | Display-only |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Radio
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Radio } from '@momo-kits/foundation';
|
|
7
|
+
|
|
8
|
+
<Radio
|
|
9
|
+
value="option1"
|
|
10
|
+
groupValue={selectedValue}
|
|
11
|
+
onChange={() => setSelectedValue("option1")} // caller sets the value
|
|
12
|
+
label="Option 1"
|
|
13
|
+
disabled={false}
|
|
14
|
+
style={{}}
|
|
15
|
+
params={{ field: 'option' }}
|
|
16
|
+
accessibilityState={{ disabled: false }}
|
|
17
|
+
accessibilityLabel="option_1"
|
|
18
|
+
/>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Compose
|
|
22
|
+
|
|
23
|
+
```kotlin
|
|
24
|
+
import vn.momo.kits.components.Radio
|
|
25
|
+
|
|
26
|
+
var selectedValue by remember { mutableStateOf("option1") }
|
|
27
|
+
|
|
28
|
+
Radio(
|
|
29
|
+
value = "option1",
|
|
30
|
+
groupValue = selectedValue,
|
|
31
|
+
onChange = { selectedValue = "option1" }, // caller sets the value
|
|
32
|
+
label = "Option A",
|
|
33
|
+
disabled = false,
|
|
34
|
+
modifier = Modifier,
|
|
35
|
+
)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
| Feature | React Native | Compose |
|
|
39
|
+
|---------|-------------|---------|
|
|
40
|
+
| Selection model | `value` + `groupValue` | `value` + `groupValue` |
|
|
41
|
+
| Change handler | `onChange()` caller sets value | `onChange()` caller sets value |
|
|
42
|
+
| Label prop | `label` | `label` |
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Rating
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Rating } from '@momo-kits/rating';
|
|
7
|
+
|
|
8
|
+
<Rating
|
|
9
|
+
numOfStars={5}
|
|
10
|
+
rating={4.5}
|
|
11
|
+
onRatingChange={(rating) => setRating(rating)}
|
|
12
|
+
size="large" // 'small'|'medium'|'large'
|
|
13
|
+
/>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Compose
|
|
17
|
+
|
|
18
|
+
```kotlin
|
|
19
|
+
import vn.momo.kits.components.Rating
|
|
20
|
+
import vn.momo.kits.components.RatingSize
|
|
21
|
+
|
|
22
|
+
Rating(
|
|
23
|
+
numOfStars = 5,
|
|
24
|
+
rating = 4.5f, // supports half stars
|
|
25
|
+
onRatingChange = { newRating -> }, // omit for read-only
|
|
26
|
+
size = RatingSize.LARGE, // SMALL | MEDIUM | LARGE
|
|
27
|
+
)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Key Differences
|
|
31
|
+
|
|
32
|
+
| Feature | React Native | Compose |
|
|
33
|
+
|---------|-------------|---------|
|
|
34
|
+
| Half stars | Yes | Yes |
|
|
35
|
+
| Size | `string` | `RatingSize` enum |
|
|
36
|
+
| Interactive | `onRatingChange` required | Optional |
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Skeleton
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Skeleton } from '@momo-kits/foundation';
|
|
7
|
+
|
|
8
|
+
<Skeleton style={{ width: 200, height: 20, borderRadius: 4 }} />
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Compose
|
|
12
|
+
|
|
13
|
+
```kotlin
|
|
14
|
+
import vn.momo.kits.components.Skeleton
|
|
15
|
+
|
|
16
|
+
Skeleton() // no params — fills maxWidth/maxHeight via BoxWithConstraints
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Key Differences
|
|
20
|
+
|
|
21
|
+
| Feature | React Native | Compose |
|
|
22
|
+
|---------|-------------|---------|
|
|
23
|
+
| Size | Via `style` prop | Fills parent via `BoxWithConstraints` |
|
|
24
|
+
| Dimensions | `width`, `height`, `borderRadius` in `style` | No params |
|
|
25
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Slider
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Slider } from '@momo-kits/slider';
|
|
7
|
+
|
|
8
|
+
<Slider
|
|
9
|
+
min={0}
|
|
10
|
+
max={100}
|
|
11
|
+
step={1}
|
|
12
|
+
low={25}
|
|
13
|
+
high={75}
|
|
14
|
+
minRange={0}
|
|
15
|
+
disableRange={false}
|
|
16
|
+
floatingLabel={false}
|
|
17
|
+
disabledHigh={false}
|
|
18
|
+
disabledLow={false}
|
|
19
|
+
onValueChanged={(low, high, byUser) => {}}
|
|
20
|
+
onSliderTouchStart={(low, high) => {}}
|
|
21
|
+
onSliderTouchEnd={(low, high) => {}}
|
|
22
|
+
/>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Compose
|
|
26
|
+
|
|
27
|
+
```kotlin
|
|
28
|
+
import vn.momo.kits.components.Slider
|
|
29
|
+
|
|
30
|
+
Slider(
|
|
31
|
+
min = 0f,
|
|
32
|
+
max = 100f,
|
|
33
|
+
step = 1f,
|
|
34
|
+
low = 25f,
|
|
35
|
+
high = 75f,
|
|
36
|
+
minRange = 0f,
|
|
37
|
+
disableRange = false, // single-thumb mode
|
|
38
|
+
floatingLabel = false, // show value label above thumb
|
|
39
|
+
disabled = false, // all interaction disabled
|
|
40
|
+
onValueChanged = { low, high, byUser -> },
|
|
41
|
+
onSliderTouchStart = { low, high -> },
|
|
42
|
+
onSliderTouchEnd = { low, high -> },
|
|
43
|
+
)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Key Differences
|
|
47
|
+
|
|
48
|
+
| Feature | React Native | Compose |
|
|
49
|
+
|---------|-------------|---------|
|
|
50
|
+
| Per-thumb disable | `disabledHigh` / `disabledLow` | `disabled` (global) |
|
|
51
|
+
| Gesture library | Built-in | `pointerInput` + `BoxWithConstraints` |
|
|
52
|
+
| Animation | Native driver | `animateFloatAsState` + spring |
|
|
53
|
+
| Thumb size | Fixed | Fixed (20dp thumb, 4dp track) |
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# SnackBar
|
|
2
|
+
|
|
3
|
+
## Compose
|
|
4
|
+
|
|
5
|
+
```kotlin
|
|
6
|
+
import vn.momo.kits.navigation.component.SnackBar
|
|
7
|
+
import vn.momo.kits.navigation.LocalNavigator
|
|
8
|
+
|
|
9
|
+
val navigator = LocalNavigator.current
|
|
10
|
+
|
|
11
|
+
navigator.showSnackBar(
|
|
12
|
+
SnackBar.Custom(
|
|
13
|
+
duration = 3000L,
|
|
14
|
+
content = {
|
|
15
|
+
Row(Modifier.fillMaxWidth().padding(Spacing.M)) {
|
|
16
|
+
Text("Operation completed!")
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
),
|
|
20
|
+
onDismiss = { } // called when snackbar is dismissed
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
navigator.hideSnackBar() // programmatically dismiss
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### SnackBar variants
|
|
27
|
+
|
|
28
|
+
```kotlin
|
|
29
|
+
// Custom content snackbar
|
|
30
|
+
SnackBar.Custom(
|
|
31
|
+
content = { Text("Done!") },
|
|
32
|
+
duration = 3000L,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
// Toast-only snackbar (no custom content — uses built-in styling)
|
|
36
|
+
SnackBar.Toast(duration = 3000L)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Screen-level via ScreenHelper
|
|
40
|
+
|
|
41
|
+
```kotlin
|
|
42
|
+
import vn.momo.kits.navigation.LocalScreenHelper
|
|
43
|
+
|
|
44
|
+
val screenHelper = LocalScreenHelper.current
|
|
45
|
+
screenHelper.showSnackBar(snackBar, onDismiss)
|
|
46
|
+
screenHelper.hideSnackBar()
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## React Native
|
|
50
|
+
|
|
51
|
+
SnackBar is not available in React Native. Use **Toast** instead.
|
|
52
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Stepper
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Stepper } from '@momo-kits/stepper';
|
|
7
|
+
|
|
8
|
+
<Stepper
|
|
9
|
+
value={quantity}
|
|
10
|
+
defaultValue={1}
|
|
11
|
+
min={1}
|
|
12
|
+
max={99}
|
|
13
|
+
step={1}
|
|
14
|
+
size="large"
|
|
15
|
+
disabled={false}
|
|
16
|
+
editable={false}
|
|
17
|
+
onValueChange={setQuantity}
|
|
18
|
+
/>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Compose
|
|
22
|
+
|
|
23
|
+
```kotlin
|
|
24
|
+
import vn.momo.kits.components.Stepper
|
|
25
|
+
import vn.momo.kits.components.StepperSize
|
|
26
|
+
|
|
27
|
+
Stepper(
|
|
28
|
+
defaultValue = 0, // clamped to min..max
|
|
29
|
+
min = 0,
|
|
30
|
+
max = 100,
|
|
31
|
+
step = 1,
|
|
32
|
+
disabled = false, // Boolean | BooleanArray
|
|
33
|
+
size = StepperSize.LARGE, // LARGE | SMALL
|
|
34
|
+
editable = false, // allow direct keyboard input
|
|
35
|
+
onValueChange = { newValue -> },
|
|
36
|
+
)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Key Differences
|
|
40
|
+
|
|
41
|
+
| Feature | React Native | Compose |
|
|
42
|
+
|---------|-------------|---------|
|
|
43
|
+
| Per-button disable | Not available | `BooleanArray([minus, plus])` |
|
|
44
|
+
| Auto-disable at bounds | Yes | Yes |
|
|
45
|
+
| Editable number input | `editable` prop | `editable` param |
|
|
46
|
+
| Size | `string` | `StepperSize` enum |
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Steps
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Steps } from '@momo-kits/step';
|
|
7
|
+
|
|
8
|
+
<Steps
|
|
9
|
+
steps={[
|
|
10
|
+
{ title: 'Info' },
|
|
11
|
+
{ title: 'Payment', description: 'Add payment method' },
|
|
12
|
+
{ title: 'Done', error: false, time: '10:30' },
|
|
13
|
+
]}
|
|
14
|
+
activeIndex={1}
|
|
15
|
+
horizontal={false}
|
|
16
|
+
size="large"
|
|
17
|
+
useNumber={false}
|
|
18
|
+
align="center"
|
|
19
|
+
customIcon="notifications_check"
|
|
20
|
+
onPress={(item, index) => {}}
|
|
21
|
+
disabled={false}
|
|
22
|
+
/>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Compose
|
|
26
|
+
|
|
27
|
+
```kotlin
|
|
28
|
+
import vn.momo.kits.components.Steps
|
|
29
|
+
import vn.momo.kits.components.StepItem
|
|
30
|
+
import vn.momo.kits.components.StepsSize
|
|
31
|
+
import vn.momo.kits.components.StepsAlign
|
|
32
|
+
|
|
33
|
+
Steps(
|
|
34
|
+
steps = listOf(
|
|
35
|
+
StepItem(title = "Info"),
|
|
36
|
+
StepItem(title = "Payment", description = "Add payment method"),
|
|
37
|
+
StepItem(title = "Done", error = false, time = "10:30"),
|
|
38
|
+
),
|
|
39
|
+
activeIndex = 1,
|
|
40
|
+
horizontal = false,
|
|
41
|
+
size = StepsSize.LARGE, // SMALL | LARGE
|
|
42
|
+
useNumber = false,
|
|
43
|
+
align = StepsAlign.CENTER, // LEFT | RIGHT | CENTER | STRETCH
|
|
44
|
+
customIcon = null,
|
|
45
|
+
disabled = false,
|
|
46
|
+
onPress = { stepItem, index -> },
|
|
47
|
+
)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Key Differences
|
|
51
|
+
|
|
52
|
+
| Feature | React Native | Compose |
|
|
53
|
+
|---------|-------------|---------|
|
|
54
|
+
| Step data | `{ title, description?, error?, time? }` | `StepItem` data class |
|
|
55
|
+
| Size | `string` | `StepsSize` enum |
|
|
56
|
+
| Align | `string` | `StepsAlign` enum |
|
|
57
|
+
| onPress | All steps | Completed steps only |
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# SuggestAction
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { SuggestAction } from '@momo-kits/suggest-action';
|
|
7
|
+
|
|
8
|
+
<SuggestAction
|
|
9
|
+
message="Don't forget to complete your profile!"
|
|
10
|
+
buttonTitle="Complete"
|
|
11
|
+
boldMessage="complete your profile"
|
|
12
|
+
image="https://..."
|
|
13
|
+
onPressButton={() => {}}
|
|
14
|
+
onClose={() => {}}
|
|
15
|
+
/>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Compose
|
|
19
|
+
|
|
20
|
+
```kotlin
|
|
21
|
+
import vn.momo.kits.components.SuggestAction
|
|
22
|
+
|
|
23
|
+
SuggestAction(
|
|
24
|
+
message = "Don't forget to complete your profile!",
|
|
25
|
+
buttonTitle = "Complete",
|
|
26
|
+
boldMessage = "complete your profile", // case-insensitive bold substring
|
|
27
|
+
image = "https://...",
|
|
28
|
+
visible = true,
|
|
29
|
+
onClose = { },
|
|
30
|
+
onPressButton = { },
|
|
31
|
+
modifier = Modifier,
|
|
32
|
+
)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
> Wrap in a state: `visible` controls show/hide with `AnimatedVisibility`.
|
|
36
|
+
|
|
37
|
+
## Key Differences
|
|
38
|
+
|
|
39
|
+
| Feature | React Native | Compose |
|
|
40
|
+
|---------|-------------|---------|
|
|
41
|
+
| Visibility | `ref?.show()` | `visible` state param |
|
|
42
|
+
| Animation | Built-in | `AnimatedVisibility` |
|
|
43
|
+
| Close button | Always shown | Always shown |
|
|
44
|
+
| Image size | Fixed | 32dp |
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Swipe
|
|
2
|
+
|
|
3
|
+
## React Native
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Swipe } from '@momo-kits/swipe';
|
|
7
|
+
|
|
8
|
+
<Swipe
|
|
9
|
+
rightActions={[
|
|
10
|
+
{ label: 'Delete', icon: '24_navigation_close', backgroundColor: Colors.red_03, onPress: onDelete },
|
|
11
|
+
]}
|
|
12
|
+
>
|
|
13
|
+
<ListItem />
|
|
14
|
+
</Swipe>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Compose
|
|
18
|
+
|
|
19
|
+
```kotlin
|
|
20
|
+
import vn.momo.kits.components.Swipe
|
|
21
|
+
import vn.momo.kits.components.SwipeAction
|
|
22
|
+
|
|
23
|
+
Swipe(
|
|
24
|
+
height = 56.dp,
|
|
25
|
+
itemRadius = 0.dp,
|
|
26
|
+
leftActions = listOf(SwipeAction(label = "Delete", icon = "24_navigation_close", onPress = { })),
|
|
27
|
+
rightActions = listOf(SwipeAction(label = "Archive", icon = "24_navigation_close", onPress = { })),
|
|
28
|
+
onSwipeableOpen = { },
|
|
29
|
+
onSwipeableClose = { },
|
|
30
|
+
onSwipeableLeftOpen = { },
|
|
31
|
+
onSwipeableRightOpen = { },
|
|
32
|
+
) {
|
|
33
|
+
ListItem()
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Key Differences
|
|
38
|
+
|
|
39
|
+
| Feature | React Native | Compose |
|
|
40
|
+
|---------|-------------|---------|
|
|
41
|
+
| Row height | `style.height` | `height` param (default 56dp) |
|
|
42
|
+
| Action limit | — | Max 3 per side |
|
|
43
|
+
| Animation | Native driver | `Animatable` + `tween(200)` |
|
|
44
|
+
| Gesture | Built-in swipeable | `detectHorizontalDragGestures` |
|