@momo-kits/native-kits 0.157.1-debug → 0.157.1-skill.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/momo-native-kits/SKILL.md +87 -0
- package/.claude/momo-native-kits/references/Badge.md +39 -0
- package/.claude/momo-native-kits/references/BadgeDot.md +37 -0
- package/.claude/momo-native-kits/references/BottomSheet.md +51 -0
- package/.claude/momo-native-kits/references/BottomTab.md +65 -0
- package/.claude/momo-native-kits/references/Button.md +197 -0
- package/.claude/momo-native-kits/references/CheckBox.md +51 -0
- package/.claude/momo-native-kits/references/Chip.md +47 -0
- package/.claude/momo-native-kits/references/Divider.md +29 -0
- package/.claude/momo-native-kits/references/HeaderTitle.md +45 -0
- package/.claude/momo-native-kits/references/HeaderType.md +47 -0
- package/.claude/momo-native-kits/references/Icon.md +32 -0
- package/.claude/momo-native-kits/references/Image.md +38 -0
- package/.claude/momo-native-kits/references/Information.md +36 -0
- package/.claude/momo-native-kits/references/Input.md +334 -0
- package/.claude/momo-native-kits/references/InputDropDown.md +47 -0
- package/.claude/momo-native-kits/references/InputMoney.md +241 -0
- package/.claude/momo-native-kits/references/InputOTP.md +52 -0
- package/.claude/momo-native-kits/references/InputPhoneNumber.md +175 -0
- package/.claude/momo-native-kits/references/InputSearch.md +57 -0
- package/.claude/momo-native-kits/references/InputTextArea.md +46 -0
- package/.claude/momo-native-kits/references/NavigationContainer.md +51 -0
- package/.claude/momo-native-kits/references/Navigator.md +287 -0
- package/.claude/momo-native-kits/references/PaginationDot.md +28 -0
- package/.claude/momo-native-kits/references/PaginationNumber.md +28 -0
- package/.claude/momo-native-kits/references/PopupNotify.md +47 -0
- package/.claude/momo-native-kits/references/Radio.md +44 -0
- package/.claude/momo-native-kits/references/Skeleton.md +32 -0
- package/.claude/momo-native-kits/references/Switch.md +36 -0
- package/.claude/momo-native-kits/references/Tag.md +40 -0
- package/.claude/momo-native-kits/references/Text.md +37 -0
- package/.claude/momo-native-kits/references/Title.md +43 -0
- package/.claude/momo-native-kits/references/Tooltip.md +30 -0
- package/.claude/settings.local.json +13 -0
- package/building-skill-for-claude.md +1190 -0
- package/ios/Input/InputPhoneNumber.swift +2 -1
- package/package.json +1 -1
- package/build.gradle.kts +0 -11
- package/compose/build.gradle.kts +0 -180
- package/compose/build.gradle.kts.backup +0 -180
- package/compose/compose.podspec +0 -54
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +0 -110
- 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 +0 -57
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +0 -107
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +0 -201
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +0 -222
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +0 -48
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +0 -86
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +0 -76
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +0 -76
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +0 -305
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +0 -33
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +0 -720
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +0 -121
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +0 -405
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +0 -69
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +0 -85
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +0 -32
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +0 -340
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +0 -198
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +0 -339
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -94
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +0 -136
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +0 -543
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +0 -23
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +0 -76
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +0 -148
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +0 -188
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +0 -116
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +0 -448
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +0 -172
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +0 -255
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +0 -231
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +0 -233
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +0 -254
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +0 -241
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +0 -364
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +0 -56
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +0 -41
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +0 -92
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +0 -40
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +0 -352
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +0 -103
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +0 -70
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +0 -17
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +0 -96
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +0 -96
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +0 -92
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +0 -130
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +0 -214
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +0 -576
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +0 -177
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +0 -205
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +0 -29
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +0 -239
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +0 -191
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +0 -306
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -13
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -185
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -285
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -35
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -59
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -68
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +0 -11
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +0 -14
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -50
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +0 -51
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +0 -239
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -119
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -98
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -161
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -331
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -497
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -162
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +0 -243
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +0 -86
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +0 -187
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +0 -279
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -80
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -306
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -32
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -370
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +0 -132
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -42
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -62
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +0 -15
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -88
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -149
- package/gradle/libs.versions.toml +0 -57
- package/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/gradle/wrapper/gradle-wrapper.properties +0 -8
- package/gradle.properties +0 -26
- package/gradlew +0 -252
- package/gradlew.bat +0 -94
- package/settings.gradle.kts +0 -52
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: momo-native-kits
|
|
3
|
+
description: UI component library for MoMo Android Compose apps. Use when building or modifying Compose screens in MoMo app.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# momo-native-kits
|
|
7
|
+
|
|
8
|
+
## Objective
|
|
9
|
+
Build Compose UI screens using MoMo's internal component library.
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```kotlin
|
|
14
|
+
ComposeAppContainer(
|
|
15
|
+
initialScreen = { MyScreen() },
|
|
16
|
+
options = null, // optional
|
|
17
|
+
initialTheme = defaultTheme, // optional
|
|
18
|
+
applicationContext = null // optional
|
|
19
|
+
)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Note: `maxApi`, `config`, `language` are auto-injected internally.
|
|
23
|
+
|
|
24
|
+
## Components
|
|
25
|
+
|
|
26
|
+
### Actions
|
|
27
|
+
| Need | Component |
|
|
28
|
+
|------|-----------|
|
|
29
|
+
| Button | Button(type, title, onClick, loading) |
|
|
30
|
+
| Checkbox | CheckBox(checked, onCheckedChange) |
|
|
31
|
+
| Radio | Radio(value, groupValue, onChange) |
|
|
32
|
+
| Switch | Switch(value, onChange) |
|
|
33
|
+
|
|
34
|
+
### Inputs
|
|
35
|
+
| Need | Component |
|
|
36
|
+
|------|-----------|
|
|
37
|
+
| Text | Input(text, floatingValue, onChangeText) |
|
|
38
|
+
| Phone | InputPhoneNumber(text, onChangeText) |
|
|
39
|
+
| Money | InputMoney(text, floatingValue, onChangeText) |
|
|
40
|
+
| OTP | InputOTP(value, length, onChangeText) |
|
|
41
|
+
| Search | InputSearch(inputSearchProps) |
|
|
42
|
+
| Dropdown | InputDropDown(text, items, onItemSelected) |
|
|
43
|
+
|
|
44
|
+
### Navigation
|
|
45
|
+
| Need | Component |
|
|
46
|
+
|------|-----------|
|
|
47
|
+
| Container | NavigationContainer |
|
|
48
|
+
| Navigate | navigator.push { Screen() }, navigator.pop() |
|
|
49
|
+
| Bottom sheet | navigator.showBottomSheet { } |
|
|
50
|
+
| Modal | navigator.showModal { } |
|
|
51
|
+
|
|
52
|
+
### Display
|
|
53
|
+
| Need | Component |
|
|
54
|
+
|------|-----------|
|
|
55
|
+
| Badge | Badge(label) |
|
|
56
|
+
| Tag | Tag(label, color) |
|
|
57
|
+
| Icon | Icon(source, size) |
|
|
58
|
+
| Image | Image(source, modifier) |
|
|
59
|
+
| Text | Text(text, style) |
|
|
60
|
+
|
|
61
|
+
## Clarification Workflow
|
|
62
|
+
|
|
63
|
+
When prompt is ambiguous, ask:
|
|
64
|
+
|
|
65
|
+
1. **What component?** (button, input, navigation...)
|
|
66
|
+
2. **What for?** (confirm, cancel, search, select...)
|
|
67
|
+
3. **Any specific props?** (type, size, icons, error state...)
|
|
68
|
+
|
|
69
|
+
### Keywords to Map Intent
|
|
70
|
+
| Component | Keywords |
|
|
71
|
+
|-----------|----------|
|
|
72
|
+
| Button | confirm, submit, cancel, delete, danger |
|
|
73
|
+
| Input | text, name, email, form |
|
|
74
|
+
| InputPhoneNumber | phone, số điện thoại |
|
|
75
|
+
| InputMoney | money, tiền, vnd |
|
|
76
|
+
| InputOTP | otp, mã xác nhận |
|
|
77
|
+
| CheckBox | agree, terms, tick |
|
|
78
|
+
| Switch | toggle, bật tắt, on/off |
|
|
79
|
+
| BottomSheet | modal, popup, slide up |
|
|
80
|
+
|
|
81
|
+
### Rule: Never Guess
|
|
82
|
+
- DO ask clarifying questions first
|
|
83
|
+
- DO wait for confirmation before implementing
|
|
84
|
+
|
|
85
|
+
## References
|
|
86
|
+
|
|
87
|
+
See [references/](references/) for detailed component API.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: badge
|
|
3
|
+
description: Badge component for displaying count or label. Use when showing notification counts, status labels, or count indicators.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Badge
|
|
7
|
+
|
|
8
|
+
Badge component for displaying count or label.
|
|
9
|
+
|
|
10
|
+
## Keywords
|
|
11
|
+
|
|
12
|
+
badge, số đếm, notification badge, label
|
|
13
|
+
|
|
14
|
+
## API
|
|
15
|
+
|
|
16
|
+
```kotlin
|
|
17
|
+
@Composable
|
|
18
|
+
fun Badge(
|
|
19
|
+
label: String = "Label",
|
|
20
|
+
backgroundColor: Color? = null,
|
|
21
|
+
)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Features
|
|
25
|
+
|
|
26
|
+
- Shows "99+" when label > 99
|
|
27
|
+
|
|
28
|
+
## Examples
|
|
29
|
+
|
|
30
|
+
```kotlin
|
|
31
|
+
// Number badge
|
|
32
|
+
Badge(label = "5")
|
|
33
|
+
|
|
34
|
+
// Text badge
|
|
35
|
+
Badge(label = "New")
|
|
36
|
+
|
|
37
|
+
// Large number
|
|
38
|
+
Badge(label = "100") // Shows "99+"
|
|
39
|
+
```
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: badge-dot
|
|
3
|
+
description: Small dot badge for notifications. Use when showing presence indicator or unread notification dot.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# BadgeDot
|
|
7
|
+
|
|
8
|
+
Small dot badge for notifications.
|
|
9
|
+
|
|
10
|
+
## Keywords
|
|
11
|
+
|
|
12
|
+
dot, small dot, notification dot, chấm tròn
|
|
13
|
+
|
|
14
|
+
## API
|
|
15
|
+
|
|
16
|
+
```kotlin
|
|
17
|
+
@Composable
|
|
18
|
+
fun BadgeDot(
|
|
19
|
+
size: BadgeDotSize = BadgeDotSize.MEDIUM,
|
|
20
|
+
color: Color = AppTheme.current.colors.error.primary
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
enum class BadgeDotSize { SMALL, MEDIUM, LARGE }
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Examples
|
|
27
|
+
|
|
28
|
+
```kotlin
|
|
29
|
+
// Default (red dot)
|
|
30
|
+
BadgeDot()
|
|
31
|
+
|
|
32
|
+
// Small dot
|
|
33
|
+
BadgeDot(size = BadgeDotSize.SMALL)
|
|
34
|
+
|
|
35
|
+
// Large dot with custom color
|
|
36
|
+
BadgeDot(size = BadgeDotSize.LARGE, color = Colors.green_03)
|
|
37
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bottom-sheet
|
|
3
|
+
description: Bottom sheet component for sliding up content. Use when showing modal content that slides up from bottom.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# BottomSheet
|
|
7
|
+
|
|
8
|
+
Bottom sheet component for sliding up content.
|
|
9
|
+
|
|
10
|
+
## Keywords
|
|
11
|
+
|
|
12
|
+
bottom sheet, slide up, modal, popup
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```kotlin
|
|
17
|
+
navigator.showBottomSheet(
|
|
18
|
+
content = { /* Content */ },
|
|
19
|
+
isSurface: Boolean = false,
|
|
20
|
+
barrierDismissible: Boolean = true,
|
|
21
|
+
onDismiss: (() -> Unit)? = null,
|
|
22
|
+
bottomSheetHeader: BottomHeader? = null
|
|
23
|
+
)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## BottomHeader
|
|
27
|
+
|
|
28
|
+
```kotlin
|
|
29
|
+
// Title header
|
|
30
|
+
BottomHeader.Title(data = "Title")
|
|
31
|
+
|
|
32
|
+
// Custom header
|
|
33
|
+
BottomHeader.Custom { /* Composable */ }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Examples
|
|
37
|
+
|
|
38
|
+
```kotlin
|
|
39
|
+
// Simple bottom sheet
|
|
40
|
+
navigator.showBottomSheet {
|
|
41
|
+
Column(modifier = Modifier.padding(16.dp)) {
|
|
42
|
+
Text("Content")
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// With header
|
|
47
|
+
navigator.showBottomSheet(
|
|
48
|
+
bottomSheetHeader = BottomHeader.Title("Select"),
|
|
49
|
+
content = { SelectionList() }
|
|
50
|
+
)
|
|
51
|
+
```
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bottom-tab
|
|
3
|
+
description: Bottom tab navigation with optional floating button. Use when implementing bottom tab navigation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# BottomTab
|
|
7
|
+
|
|
8
|
+
Bottom tab navigation with optional floating button.
|
|
9
|
+
|
|
10
|
+
## Keywords
|
|
11
|
+
|
|
12
|
+
tab, tabs, bottom nav, tab bar
|
|
13
|
+
|
|
14
|
+
## API
|
|
15
|
+
|
|
16
|
+
```kotlin
|
|
17
|
+
@Composable
|
|
18
|
+
fun BottomTab(
|
|
19
|
+
items: List<BottomTabItem>,
|
|
20
|
+
floatingButton: BottomTabFloatingButton? = null
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
data class BottomTabItem(
|
|
24
|
+
val name: String,
|
|
25
|
+
val label: String,
|
|
26
|
+
val icon: String,
|
|
27
|
+
val showDot: Boolean = false,
|
|
28
|
+
val badgeLabel: String? = null,
|
|
29
|
+
val screen: @Composable () -> Unit,
|
|
30
|
+
val options: NavigationOptions? = null
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
data class BottomTabFloatingButton(
|
|
34
|
+
val icon: String,
|
|
35
|
+
val label: String,
|
|
36
|
+
val onPress: () -> Unit,
|
|
37
|
+
)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
|
|
42
|
+
```kotlin
|
|
43
|
+
BottomTab(
|
|
44
|
+
items = listOf(
|
|
45
|
+
BottomTabItem(
|
|
46
|
+
name = "home",
|
|
47
|
+
label = "Home",
|
|
48
|
+
icon = "home",
|
|
49
|
+
screen = { HomeScreen() }
|
|
50
|
+
),
|
|
51
|
+
BottomTabItem(
|
|
52
|
+
name = "wallet",
|
|
53
|
+
label = "Wallet",
|
|
54
|
+
icon = "wallet",
|
|
55
|
+
badgeLabel = "3",
|
|
56
|
+
screen = { WalletScreen() }
|
|
57
|
+
)
|
|
58
|
+
),
|
|
59
|
+
floatingButton = BottomTabFloatingButton(
|
|
60
|
+
icon = "qr_code",
|
|
61
|
+
label = "Scan",
|
|
62
|
+
onClick = { /* Scan QR */ }
|
|
63
|
+
)
|
|
64
|
+
)
|
|
65
|
+
```
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: button
|
|
3
|
+
description: Button component for user actions. Use when user needs to trigger an action (confirm, cancel, submit, delete).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Button
|
|
7
|
+
|
|
8
|
+
Button component for user actions with various styles and states.
|
|
9
|
+
|
|
10
|
+
## API
|
|
11
|
+
|
|
12
|
+
```kotlin
|
|
13
|
+
@Composable
|
|
14
|
+
fun Button(
|
|
15
|
+
onClick: () -> Unit,
|
|
16
|
+
type: ButtonType = ButtonType.PRIMARY,
|
|
17
|
+
size: Size = Size.LARGE,
|
|
18
|
+
iconRight: String = "",
|
|
19
|
+
iconLeft: String = "",
|
|
20
|
+
title: String = "Button",
|
|
21
|
+
loading: Boolean = false,
|
|
22
|
+
useTintColor: Boolean = true,
|
|
23
|
+
isFull: Boolean = true,
|
|
24
|
+
modifier: Modifier = Modifier,
|
|
25
|
+
)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Props
|
|
29
|
+
|
|
30
|
+
| Prop | Type | Default | Description |
|
|
31
|
+
|------|------|---------|-------------|
|
|
32
|
+
| `onClick` | `() -> Unit` | **Required** | Callback when button is clicked |
|
|
33
|
+
| `type` | `ButtonType` | `PRIMARY` | Button style variant |
|
|
34
|
+
| `size` | `Size` | `LARGE` | Button size (height) |
|
|
35
|
+
| `iconRight` | `String` | `""` | Icon name to show on right side |
|
|
36
|
+
| `iconLeft` | `String` | `""` | Icon name to show on left side |
|
|
37
|
+
| `title` | `String` | `"Button"` | Button text |
|
|
38
|
+
| `loading` | `Boolean` | `false` | Show loading spinner |
|
|
39
|
+
| `useTintColor` | `Boolean` | `true` | Apply tint color to icon |
|
|
40
|
+
| `isFull` | `Boolean` | `true` | Full width button |
|
|
41
|
+
| `modifier` | `Modifier` | `Modifier` | Compose modifier |
|
|
42
|
+
|
|
43
|
+
## ButtonType
|
|
44
|
+
|
|
45
|
+
| Type | Description | Background | Border |
|
|
46
|
+
|------|-------------|------------|--------|
|
|
47
|
+
| `PRIMARY` | Main action button | Primary color | None |
|
|
48
|
+
| `SECONDARY` | Secondary action | Surface color | 1dp border |
|
|
49
|
+
| `TONAL` | Tonal background | Tonal color | None |
|
|
50
|
+
| `OUTLINE` | Border only | Surface color | 1dp primary |
|
|
51
|
+
| `DANGER` | Warning/Delete | Error color | None |
|
|
52
|
+
| `TEXT` | Text only | Transparent | None |
|
|
53
|
+
| `DISABLED` | Disabled state | Disable color | None |
|
|
54
|
+
|
|
55
|
+
## Size
|
|
56
|
+
|
|
57
|
+
| Size | Height | Text Style | Icon Size |
|
|
58
|
+
|------|--------|------------|-----------|
|
|
59
|
+
| `LARGE` | 48dp | actionDefaultBold | 24dp |
|
|
60
|
+
| `MEDIUM` | 36dp | actionSBold | 16dp |
|
|
61
|
+
| `SMALL` | 28dp | actionXsBold | 16dp |
|
|
62
|
+
|
|
63
|
+
## States
|
|
64
|
+
|
|
65
|
+
- **Default**: Normal button state
|
|
66
|
+
- **Pressed**: 2dp padding shrink + 0.5f alpha animation
|
|
67
|
+
- **Loading**: 0.75f alpha, spinner replaces icon or title
|
|
68
|
+
- **Disabled**: `type = ButtonType.DISABLED` or `type = ButtonType.TEXT`
|
|
69
|
+
|
|
70
|
+
## Examples
|
|
71
|
+
|
|
72
|
+
### Basic Usage
|
|
73
|
+
|
|
74
|
+
```kotlin
|
|
75
|
+
// Primary button (default)
|
|
76
|
+
Button(onClick = { /* action */ }, title = "Confirm")
|
|
77
|
+
|
|
78
|
+
// Secondary button
|
|
79
|
+
Button(onClick = { /* action */ }, title = "Cancel", type = ButtonType.SECONDARY)
|
|
80
|
+
|
|
81
|
+
// Danger button
|
|
82
|
+
Button(onClick = { /* action */ }, title = "Delete", type = ButtonType.DANGER)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### With Icons
|
|
86
|
+
|
|
87
|
+
```kotlin
|
|
88
|
+
// Icon on left
|
|
89
|
+
Button(
|
|
90
|
+
onClick = { },
|
|
91
|
+
title = "Confirm",
|
|
92
|
+
iconLeft = "check"
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
// Icon on right
|
|
96
|
+
Button(
|
|
97
|
+
onClick = { },
|
|
98
|
+
title = "Next",
|
|
99
|
+
iconRight = "arrow_forward"
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
// Both icons
|
|
103
|
+
Button(
|
|
104
|
+
onClick = { },
|
|
105
|
+
title = "Send",
|
|
106
|
+
iconLeft = "send",
|
|
107
|
+
iconRight = "chevron_right"
|
|
108
|
+
)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Loading State
|
|
112
|
+
|
|
113
|
+
```kotlin
|
|
114
|
+
// Loading with spinner
|
|
115
|
+
Button(
|
|
116
|
+
onClick = { },
|
|
117
|
+
title = "Loading",
|
|
118
|
+
loading = true
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
// Loading with icon (spinner replaces icon)
|
|
122
|
+
Button(
|
|
123
|
+
onClick = { },
|
|
124
|
+
title = "Submit",
|
|
125
|
+
iconLeft = "save",
|
|
126
|
+
loading = true
|
|
127
|
+
)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Sizes
|
|
131
|
+
|
|
132
|
+
```kotlin
|
|
133
|
+
// Large button (default - 48dp)
|
|
134
|
+
Button(onClick = { }, title = "Large", size = Size.LARGE)
|
|
135
|
+
|
|
136
|
+
// Medium button (36dp)
|
|
137
|
+
Button(onClick = { }, title = "Medium", size = Size.MEDIUM)
|
|
138
|
+
|
|
139
|
+
// Small button (28dp)
|
|
140
|
+
Button(onClick = { }, title = "Small", size = Size.SMALL)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Full Width vs Auto Width
|
|
144
|
+
|
|
145
|
+
```kotlin
|
|
146
|
+
// Full width (default)
|
|
147
|
+
Button(onClick = { }, title = "Full Width", isFull = true)
|
|
148
|
+
|
|
149
|
+
// Auto width
|
|
150
|
+
Button(onClick = { }, title = "Auto", isFull = false)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Outline Button
|
|
154
|
+
|
|
155
|
+
```kotlin
|
|
156
|
+
Button(
|
|
157
|
+
onClick = { },
|
|
158
|
+
title = "Outline",
|
|
159
|
+
type = ButtonType.OUTLINE
|
|
160
|
+
)
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Text Button
|
|
164
|
+
|
|
165
|
+
```kotlin
|
|
166
|
+
Button(
|
|
167
|
+
onClick = { },
|
|
168
|
+
title = "Text Only",
|
|
169
|
+
type = ButtonType.TEXT
|
|
170
|
+
)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Disabled Button
|
|
174
|
+
|
|
175
|
+
```kotlin
|
|
176
|
+
// Using DISABLED type
|
|
177
|
+
Button(
|
|
178
|
+
onClick = { },
|
|
179
|
+
title = "Disabled",
|
|
180
|
+
type = ButtonType.DISABLED
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
// Or just don't provide onClick handler
|
|
184
|
+
Button(
|
|
185
|
+
onClick = { }, // Empty or no action
|
|
186
|
+
title = "No Action"
|
|
187
|
+
)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Icon Names
|
|
191
|
+
|
|
192
|
+
Common icons available:
|
|
193
|
+
- `check`, `close`, `arrow_back`, `arrow_forward`, `chevron_right`, `chevron_left`
|
|
194
|
+
- `add`, `remove`, `delete`, `edit`, `save`, `send`
|
|
195
|
+
- `home`, `settings`, `search`, `menu`, `more_vert`
|
|
196
|
+
|
|
197
|
+
Use icon names from MoMo's icon library.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: checkbox
|
|
3
|
+
description: Checkbox component for boolean selection. Use when user needs to select one or more options, agree to terms, or toggle boolean values.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CheckBox
|
|
7
|
+
|
|
8
|
+
Checkbox component for boolean selection.
|
|
9
|
+
|
|
10
|
+
## Keywords
|
|
11
|
+
|
|
12
|
+
checkbox, tick, tích chọn, check
|
|
13
|
+
|
|
14
|
+
## API
|
|
15
|
+
|
|
16
|
+
```kotlin
|
|
17
|
+
@Composable
|
|
18
|
+
fun CheckBox(
|
|
19
|
+
checked: Boolean = false,
|
|
20
|
+
onCheckedChange: (Boolean) -> Unit,
|
|
21
|
+
title: String = "",
|
|
22
|
+
indeterminate: Boolean = false,
|
|
23
|
+
disabled: Boolean = false,
|
|
24
|
+
)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## States
|
|
28
|
+
|
|
29
|
+
- Unchecked
|
|
30
|
+
- Checked
|
|
31
|
+
- Indeterminate
|
|
32
|
+
- Disabled
|
|
33
|
+
|
|
34
|
+
## Examples
|
|
35
|
+
|
|
36
|
+
```kotlin
|
|
37
|
+
var isChecked by remember { mutableStateOf(false) }
|
|
38
|
+
|
|
39
|
+
CheckBox(
|
|
40
|
+
checked = isChecked,
|
|
41
|
+
onCheckedChange = { isChecked = it },
|
|
42
|
+
title = "I agree"
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
// Indeterminate
|
|
46
|
+
CheckBox(
|
|
47
|
+
checked = isChecked,
|
|
48
|
+
indeterminate = true,
|
|
49
|
+
onCheckedChange = { isChecked = it }
|
|
50
|
+
)
|
|
51
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: chip
|
|
3
|
+
description: Selectable chip component. Use when displaying filter options, tags, or selectable categories.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Chip
|
|
7
|
+
|
|
8
|
+
Selectable chip component.
|
|
9
|
+
|
|
10
|
+
## Keywords
|
|
11
|
+
|
|
12
|
+
chip, filter, selectable, tag chọn
|
|
13
|
+
|
|
14
|
+
## API
|
|
15
|
+
|
|
16
|
+
```kotlin
|
|
17
|
+
@Composable
|
|
18
|
+
fun Chip(
|
|
19
|
+
label: String? = "Label",
|
|
20
|
+
iconLeft: String? = null,
|
|
21
|
+
iconRight: String? = null,
|
|
22
|
+
selected: Boolean = false,
|
|
23
|
+
onClick: () -> Unit = {},
|
|
24
|
+
size: ChipSize = ChipSize.LARGE,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
enum class ChipSize { SMALL, LARGE }
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Features
|
|
31
|
+
|
|
32
|
+
- Selected state with border
|
|
33
|
+
- Icon support (left/right)
|
|
34
|
+
- Two sizes
|
|
35
|
+
|
|
36
|
+
## Examples
|
|
37
|
+
|
|
38
|
+
```kotlin
|
|
39
|
+
// Unselected chip
|
|
40
|
+
Chip(label = "Tag", onClick = { })
|
|
41
|
+
|
|
42
|
+
// Selected chip
|
|
43
|
+
Chip(label = "Selected", selected = true, onClick = { })
|
|
44
|
+
|
|
45
|
+
// Chip with icon
|
|
46
|
+
Chip(label = "Filter", iconLeft = "filter", selected = true, onClick = { })
|
|
47
|
+
```
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: divider
|
|
3
|
+
description: Divider component for separating content. Use when needing to visually separate sections in a layout.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Divider
|
|
7
|
+
|
|
8
|
+
Divider component for separating content.
|
|
9
|
+
|
|
10
|
+
## Keywords
|
|
11
|
+
|
|
12
|
+
divider, line, đường kẻ, separator
|
|
13
|
+
|
|
14
|
+
## API
|
|
15
|
+
|
|
16
|
+
```kotlin
|
|
17
|
+
@Composable
|
|
18
|
+
fun Divider()
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Examples
|
|
22
|
+
|
|
23
|
+
```kotlin
|
|
24
|
+
Column {
|
|
25
|
+
Text("Content 1")
|
|
26
|
+
Divider()
|
|
27
|
+
Text("Content 2")
|
|
28
|
+
}
|
|
29
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: header-title
|
|
3
|
+
description: Header title component for navigation header. Use when setting screen title in navigation bar.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# HeaderTitle
|
|
7
|
+
|
|
8
|
+
Header title component for navigation header.
|
|
9
|
+
|
|
10
|
+
## Keywords
|
|
11
|
+
|
|
12
|
+
header title, tiêu đề header
|
|
13
|
+
|
|
14
|
+
## Types
|
|
15
|
+
|
|
16
|
+
```kotlin
|
|
17
|
+
// Simple title
|
|
18
|
+
HeaderTitle.Default("Title")
|
|
19
|
+
|
|
20
|
+
// With subtitle
|
|
21
|
+
HeaderTitle.SubTitle(title = "Title", subTitle = "Subtitle")
|
|
22
|
+
|
|
23
|
+
// User header
|
|
24
|
+
HeaderTitle.User(
|
|
25
|
+
title: String,
|
|
26
|
+
subTitle: String? = null,
|
|
27
|
+
image: List<String>? = null,
|
|
28
|
+
onPress: (() -> Unit)? = null
|
|
29
|
+
)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Examples
|
|
33
|
+
|
|
34
|
+
```kotlin
|
|
35
|
+
navigation.setOptions(
|
|
36
|
+
headerTitle = HeaderTitle.Default("Home")
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
navigation.setOptions(
|
|
40
|
+
headerTitle = HeaderTitle.SubTitle(
|
|
41
|
+
title = "Profile",
|
|
42
|
+
subTitle = "Personal"
|
|
43
|
+
)
|
|
44
|
+
)
|
|
45
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: header-type
|
|
3
|
+
description: Header type configuration for navigation. Use when customizing header appearance (transparent, default, none, or extended with search/buttons).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# HeaderType
|
|
7
|
+
|
|
8
|
+
Header type configuration for navigation.
|
|
9
|
+
|
|
10
|
+
## Keywords
|
|
11
|
+
|
|
12
|
+
header, transparent, header type
|
|
13
|
+
|
|
14
|
+
## Types
|
|
15
|
+
|
|
16
|
+
```kotlin
|
|
17
|
+
// Default header
|
|
18
|
+
HeaderType.Default()
|
|
19
|
+
|
|
20
|
+
// Extended header
|
|
21
|
+
HeaderType.Extended(
|
|
22
|
+
floatingButton: FloatingButtonProps? = null,
|
|
23
|
+
inputSearchProps: InputSearchProps? = null
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
// Transparent header
|
|
27
|
+
HeaderType.Transparent()
|
|
28
|
+
|
|
29
|
+
// No header
|
|
30
|
+
HeaderType.None()
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Examples
|
|
34
|
+
|
|
35
|
+
```kotlin
|
|
36
|
+
navigation.setOptions(
|
|
37
|
+
headerType = HeaderType.Default()
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
navigation.setOptions(
|
|
41
|
+
headerType = HeaderType.Transparent()
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
navigation.setOptions(
|
|
45
|
+
headerType = HeaderType.None()
|
|
46
|
+
)
|
|
47
|
+
```
|