@momo-kits/native-kits 0.157.1-skill.1-debug → 0.157.1-skill.3-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/momo-native-kits-skill/SKILL.md +51 -0
- package/.claude/momo-native-kits-skill/evals/evals.json +95 -0
- package/.claude/momo-native-kits-skill/references/badge.md +52 -0
- package/.claude/momo-native-kits-skill/references/button.md +182 -0
- package/.claude/momo-native-kits-skill/references/card.md +48 -0
- package/.claude/momo-native-kits-skill/references/checkbox.md +51 -0
- package/.claude/momo-native-kits-skill/references/chip.md +48 -0
- package/.claude/momo-native-kits-skill/references/constants.md +260 -0
- package/.claude/momo-native-kits-skill/references/divider.md +26 -0
- package/.claude/momo-native-kits-skill/references/input.md +408 -0
- package/.claude/momo-native-kits-skill/references/navigation.md +475 -0
- package/.claude/momo-native-kits-skill/references/popup.md +97 -0
- package/.claude/momo-native-kits-skill/references/radio.md +60 -0
- package/.claude/momo-native-kits-skill/references/skeleton.md +40 -0
- package/.claude/momo-native-kits-skill/references/snackbar.md +54 -0
- package/.claude/momo-native-kits-skill/references/switch.md +62 -0
- package/.claude/momo-native-kits-skill/references/text.md +195 -0
- package/.claude/momo-native-kits-skill/references/tooltip.md +34 -0
- package/.claude/momo-native-kits-skill/references/trustbanner.md +61 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/benchmark.json +20 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/benchmark.md +13 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-0-button/eval_metadata.json +6 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-0-button/with_skill/outputs/ButtonExample.kt +55 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-0-button/without_skill/outputs/ButtonExample.kt +45 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-1-input/eval_metadata.json +6 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-1-input/with_skill/outputs/InputPhoneExample.kt +40 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-1-input/without_skill/outputs/InputPhoneExample.kt +42 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-2-bottomtab/eval_metadata.json +6 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-2-bottomtab/with_skill/outputs/BottomTabExample.kt +236 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-2-bottomtab/without_skill/outputs/BottomTabExample.kt +152 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-3-checkbox/eval_metadata.json +6 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-3-checkbox/with_skill/outputs/CheckBoxExample.kt +49 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-3-checkbox/without_skill/outputs/CheckBoxExample.kt +123 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-4-datetimepicker/eval_metadata.json +6 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-4-datetimepicker/with_skill/outputs/DateTimePickerExample.kt +318 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-4-datetimepicker/without_skill/outputs/DateTimePickerExample.kt +330 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-card/with_skill/outputs/CardExample.kt +124 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-card/without_skill/outputs/CardExample.kt +71 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-loginform/with_skill/outputs/LoginFormExample.kt +134 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-loginform/without_skill/outputs/LoginFormExample.kt +199 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-navcontainer/with_skill/outputs/NavigationContainerExample.kt +224 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-navcontainer/without_skill/outputs/NavigationContainerExample.kt +225 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-popup/with_skill/outputs/PopupExample.kt +79 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-popup/without_skill/outputs/PopupExample.kt +169 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-setoptions/eval_metadata.json +6 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-setoptions/with_skill/outputs/SetOptionsExample.kt +255 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-setoptions/without_skill/outputs/SetOptionsExample.kt +212 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-skeleton/with_skill/outputs/SkeletonExample.kt +199 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-skeleton/without_skill/outputs/SkeletonExample.kt +229 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/benchmark.json +20 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/benchmark.md +13 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-button/eval_metadata.json +22 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-button/with_skill/outputs/PrimaryButtonExample.kt +38 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-button/with_skill/timing.json +5 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-button/without_skill/outputs/PrimaryButtonExample.kt +83 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-button/without_skill/timing.json +5 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-navcontainer/eval_metadata.json +22 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-navcontainer/with_skill/outputs/NavigationContainerExample.kt +547 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-navcontainer/with_skill/timing.json +5 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-navcontainer/without_skill/outputs/MoMoNavigationContainer.kt +519 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-navcontainer/without_skill/timing.json +5 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-setoptions/eval_metadata.json +27 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-setoptions/with_skill/outputs/SetOptionsExample.kt +429 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-setoptions/with_skill/timing.json +5 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-setoptions/without_skill/outputs/SetOptionsExample.kt +353 -0
- package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-setoptions/without_skill/timing.json +5 -0
- package/.claude/settings.local.json +35 -7
- package/compose/build.gradle.kts +1 -1
- package/gradle.properties +1 -1
- package/ios/Input/Input.swift +112 -50
- package/local.properties +1 -1
- package/package.json +1 -1
- package/.claude/momo-native-kits/SKILL.md +0 -87
- package/.claude/momo-native-kits/references/Badge.md +0 -39
- package/.claude/momo-native-kits/references/BadgeDot.md +0 -37
- package/.claude/momo-native-kits/references/BottomSheet.md +0 -51
- package/.claude/momo-native-kits/references/BottomTab.md +0 -65
- package/.claude/momo-native-kits/references/Button.md +0 -197
- package/.claude/momo-native-kits/references/CheckBox.md +0 -51
- package/.claude/momo-native-kits/references/Chip.md +0 -47
- package/.claude/momo-native-kits/references/Divider.md +0 -29
- package/.claude/momo-native-kits/references/HeaderTitle.md +0 -45
- package/.claude/momo-native-kits/references/HeaderType.md +0 -47
- package/.claude/momo-native-kits/references/Icon.md +0 -32
- package/.claude/momo-native-kits/references/Image.md +0 -38
- package/.claude/momo-native-kits/references/Information.md +0 -36
- package/.claude/momo-native-kits/references/Input.md +0 -334
- package/.claude/momo-native-kits/references/InputDropDown.md +0 -47
- package/.claude/momo-native-kits/references/InputMoney.md +0 -241
- package/.claude/momo-native-kits/references/InputOTP.md +0 -52
- package/.claude/momo-native-kits/references/InputPhoneNumber.md +0 -175
- package/.claude/momo-native-kits/references/InputSearch.md +0 -57
- package/.claude/momo-native-kits/references/InputTextArea.md +0 -46
- package/.claude/momo-native-kits/references/NavigationContainer.md +0 -51
- package/.claude/momo-native-kits/references/Navigator.md +0 -287
- package/.claude/momo-native-kits/references/PaginationDot.md +0 -28
- package/.claude/momo-native-kits/references/PaginationNumber.md +0 -28
- package/.claude/momo-native-kits/references/PopupNotify.md +0 -47
- package/.claude/momo-native-kits/references/Radio.md +0 -44
- package/.claude/momo-native-kits/references/Skeleton.md +0 -32
- package/.claude/momo-native-kits/references/Switch.md +0 -36
- package/.claude/momo-native-kits/references/Tag.md +0 -40
- package/.claude/momo-native-kits/references/Text.md +0 -37
- package/.claude/momo-native-kits/references/Title.md +0 -43
- package/.claude/momo-native-kits/references/Tooltip.md +0 -30
- package/building-skill-for-claude.md +0 -1190
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# SnackBar
|
|
2
|
+
|
|
3
|
+
**File:** `vn.momo.kits/navigation/component/SnackBar.kt`
|
|
4
|
+
|
|
5
|
+
## Parameters
|
|
6
|
+
|
|
7
|
+
```kotlin
|
|
8
|
+
@Composable
|
|
9
|
+
fun SnackBar(
|
|
10
|
+
message: String,
|
|
11
|
+
modifier: Modifier = Modifier,
|
|
12
|
+
actionLabel: String? = null,
|
|
13
|
+
onActionClick: (() -> Unit)? = null,
|
|
14
|
+
duration: SnackBarDuration = SnackBarDuration.SHORT,
|
|
15
|
+
isError: Boolean = false
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
enum class SnackBarDuration {
|
|
19
|
+
SHORT, // 2 seconds
|
|
20
|
+
LONG, // 5 seconds
|
|
21
|
+
INDEFINITE // Until dismissed
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Basic
|
|
26
|
+
|
|
27
|
+
```kotlin
|
|
28
|
+
SnackBar(
|
|
29
|
+
message = "Item deleted",
|
|
30
|
+
duration = SnackBarDuration.SHORT
|
|
31
|
+
)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## With Action
|
|
35
|
+
|
|
36
|
+
```kotlin
|
|
37
|
+
SnackBar(
|
|
38
|
+
message = "Message deleted",
|
|
39
|
+
actionLabel = "Undo",
|
|
40
|
+
onActionClick = { /* undo */ },
|
|
41
|
+
duration = SnackBarDuration.SHORT
|
|
42
|
+
)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Error
|
|
46
|
+
|
|
47
|
+
```kotlin
|
|
48
|
+
SnackBar(
|
|
49
|
+
message = "Something went wrong",
|
|
50
|
+
isError = true,
|
|
51
|
+
actionLabel = "OK",
|
|
52
|
+
onActionClick = { /* dismiss */ }
|
|
53
|
+
)
|
|
54
|
+
```
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Switch
|
|
2
|
+
|
|
3
|
+
**File:** `vn.momo/kits/components/Switch.kt`
|
|
4
|
+
|
|
5
|
+
## Parameters
|
|
6
|
+
|
|
7
|
+
```kotlin
|
|
8
|
+
@Composable
|
|
9
|
+
fun Switch(
|
|
10
|
+
checked: Boolean, // Required: Checked state
|
|
11
|
+
onCheckedChange: (Boolean) -> Unit,// Required: State change callback
|
|
12
|
+
modifier: Modifier = Modifier,
|
|
13
|
+
enabled: Boolean = true
|
|
14
|
+
)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```kotlin
|
|
20
|
+
var isEnabled by remember { mutableStateOf(false) }
|
|
21
|
+
|
|
22
|
+
Row(
|
|
23
|
+
modifier = Modifier.fillMaxWidth(),
|
|
24
|
+
horizontalArrangement = Arrangement.SpaceBetween,
|
|
25
|
+
verticalAlignment = Alignment.CenterVertically
|
|
26
|
+
) {
|
|
27
|
+
Text(text = "Dark Mode")
|
|
28
|
+
Switch(
|
|
29
|
+
checked = isEnabled,
|
|
30
|
+
onCheckedChange = { isEnabled = it }
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Settings Toggle
|
|
36
|
+
|
|
37
|
+
```kotlin
|
|
38
|
+
@Composable
|
|
39
|
+
fun NotificationSettings() {
|
|
40
|
+
var pushEnabled by remember { mutableStateOf(true) }
|
|
41
|
+
var emailEnabled by remember { mutableStateOf(false) }
|
|
42
|
+
|
|
43
|
+
Column {
|
|
44
|
+
SettingRow("Push Notifications", pushEnabled) { pushEnabled = it }
|
|
45
|
+
Divider()
|
|
46
|
+
SettingRow("Email Notifications", emailEnabled) { emailEnabled = it }
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@Composable
|
|
51
|
+
fun SettingRow(title: String, checked: Boolean, onCheckedChange: (Boolean) -> Unit) {
|
|
52
|
+
Row(
|
|
53
|
+
modifier = Modifier
|
|
54
|
+
.fillMaxWidth()
|
|
55
|
+
.padding(16.dp),
|
|
56
|
+
horizontalArrangement = Arrangement.SpaceBetween
|
|
57
|
+
) {
|
|
58
|
+
Text(text = title)
|
|
59
|
+
Switch(checked = checked, onCheckedChange = onCheckedChange)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Display Components - Text & Typography
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
MoMo Native Kits provides text and typography components for consistent text styling across the app.
|
|
6
|
+
|
|
7
|
+
**Package:** `vn.momo.kits.components`
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Text Component
|
|
12
|
+
|
|
13
|
+
**File:** `vn/momo/kits/components/Text.kt`
|
|
14
|
+
|
|
15
|
+
### Parameters
|
|
16
|
+
|
|
17
|
+
```kotlin
|
|
18
|
+
@Composable
|
|
19
|
+
fun Text(
|
|
20
|
+
text: String, // Required: Text content
|
|
21
|
+
modifier: Modifier = Modifier,
|
|
22
|
+
color: Color = AppTheme.current.colors.text.default,
|
|
23
|
+
style: TextStyle = Typography.bodyDefault,
|
|
24
|
+
maxLines: Int = Int.MAX_VALUE,
|
|
25
|
+
overflow: TextOverflow = TextOverflow.Clip
|
|
26
|
+
)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Usage Examples
|
|
30
|
+
|
|
31
|
+
```kotlin
|
|
32
|
+
import vn.momo.kits.components.Text
|
|
33
|
+
import vn.momo.kits.const.Typography
|
|
34
|
+
import vn.momo.kits.const.Colors
|
|
35
|
+
|
|
36
|
+
// Basic text
|
|
37
|
+
Text(text = "Hello World")
|
|
38
|
+
|
|
39
|
+
// With custom style
|
|
40
|
+
Text(
|
|
41
|
+
text = "Styled text",
|
|
42
|
+
style = Typography.bodyBold
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
// With custom color
|
|
46
|
+
Text(
|
|
47
|
+
text = "Colored text",
|
|
48
|
+
color = Colors.pink_01
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
// With max lines
|
|
52
|
+
Text(
|
|
53
|
+
text = "Long text that might overflow",
|
|
54
|
+
maxLines = 2,
|
|
55
|
+
overflow = TextOverflow.Ellipsis
|
|
56
|
+
)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Title Component
|
|
62
|
+
|
|
63
|
+
**File:** `vn/momo/kits/components/Title.kt`
|
|
64
|
+
|
|
65
|
+
### Parameters
|
|
66
|
+
|
|
67
|
+
```kotlin
|
|
68
|
+
@Composable
|
|
69
|
+
fun Title(
|
|
70
|
+
text: String, // Required: Title text
|
|
71
|
+
modifier: Modifier = Modifier,
|
|
72
|
+
type: TitleType = TitleType.TITLE_1, // Title type/size
|
|
73
|
+
color: Color = AppTheme.current.colors.text.default
|
|
74
|
+
)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Title Types
|
|
78
|
+
|
|
79
|
+
| Type | Use Case |
|
|
80
|
+
|------|----------|
|
|
81
|
+
| `TITLE_1` | Main page titles |
|
|
82
|
+
| `TITLE_2` | Section headers |
|
|
83
|
+
| `TITLE_3` | Subsection headers |
|
|
84
|
+
| `TITLE_4` | Card titles |
|
|
85
|
+
| `TITLE_5` | Small titles |
|
|
86
|
+
| `TITLE_6` | Tiny titles |
|
|
87
|
+
|
|
88
|
+
### Usage Examples
|
|
89
|
+
|
|
90
|
+
```kotlin
|
|
91
|
+
import vn.momo.kits.components.Title
|
|
92
|
+
import vn.momo.kits.components.TitleType
|
|
93
|
+
|
|
94
|
+
// Main title
|
|
95
|
+
Title(
|
|
96
|
+
text = "Trang chủ",
|
|
97
|
+
type = TitleType.TITLE_1
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
// Section header
|
|
101
|
+
Title(
|
|
102
|
+
text = "Danh sách khuyến mãi",
|
|
103
|
+
type = TitleType.TITLE_2
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
// Card title
|
|
107
|
+
Title(
|
|
108
|
+
text = "Ưu đãi đặc biệt",
|
|
109
|
+
type = TitleType.TITLE_4
|
|
110
|
+
)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Typography System
|
|
116
|
+
|
|
117
|
+
**File:** `vn.momo/kits/const/Typography.kt`
|
|
118
|
+
|
|
119
|
+
The typography system provides consistent text styles across the app.
|
|
120
|
+
|
|
121
|
+
### Available Styles
|
|
122
|
+
|
|
123
|
+
| Style | Use Case |
|
|
124
|
+
|-------|----------|
|
|
125
|
+
| `headlineDefault` | Large headlines |
|
|
126
|
+
| `headlineDefaultBold` | Bold headlines |
|
|
127
|
+
| `titleDefault` | Default titles |
|
|
128
|
+
| `titleDefaultBold` | Bold titles |
|
|
129
|
+
| `bodyDefault` | Body text |
|
|
130
|
+
| `bodyBold` | Bold body text |
|
|
131
|
+
| `bodySmall` | Small body text |
|
|
132
|
+
| `actionDefault` | Action text |
|
|
133
|
+
| `actionDefaultBold` | Bold action text |
|
|
134
|
+
| `captionDefault` | Captions |
|
|
135
|
+
| `captionBold` | Bold captions |
|
|
136
|
+
|
|
137
|
+
### Usage
|
|
138
|
+
|
|
139
|
+
```kotlin
|
|
140
|
+
import vn.momo.kits.const.Typography
|
|
141
|
+
|
|
142
|
+
Text(
|
|
143
|
+
text = "Body text",
|
|
144
|
+
style = Typography.bodyDefault
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
Text(
|
|
148
|
+
text = "Caption",
|
|
149
|
+
style = Typography.captionDefault
|
|
150
|
+
)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Real World Example
|
|
156
|
+
|
|
157
|
+
```kotlin
|
|
158
|
+
@Composable
|
|
159
|
+
fun ArticleCard() {
|
|
160
|
+
Column(modifier = Modifier.padding(16.dp)) {
|
|
161
|
+
Title(
|
|
162
|
+
text = "Khuyến mãi mùa hè",
|
|
163
|
+
type = TitleType.TITLE_2
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
Spacer(modifier = Modifier.height(8.dp))
|
|
167
|
+
|
|
168
|
+
Text(
|
|
169
|
+
text = "Giảm giá lên đến 50% cho tất cả sản phẩm mùa hè. Áp dụng từ ngày 15/06 đến 30/08.",
|
|
170
|
+
style = Typography.bodyDefault,
|
|
171
|
+
color = AppTheme.current.colors.text.secondary,
|
|
172
|
+
maxLines = 3,
|
|
173
|
+
overflow = TextOverflow.Ellipsis
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
Spacer(modifier = Modifier.height(8.dp))
|
|
177
|
+
|
|
178
|
+
Text(
|
|
179
|
+
text = "Còn 2 ngày",
|
|
180
|
+
style = Typography.captionDefault,
|
|
181
|
+
color = Colors.pink_01
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Best Practices
|
|
190
|
+
|
|
191
|
+
1. **Use Title for headings** - Semantic hierarchy
|
|
192
|
+
2. **Use Typography constants** - Consistent styling
|
|
193
|
+
3. **Use AppTheme colors** - Theme-aware text colors
|
|
194
|
+
4. **Limit maxLines with overflow** - Prevent layout issues
|
|
195
|
+
5. **Use appropriate title type** - Match visual hierarchy
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Tooltip
|
|
2
|
+
|
|
3
|
+
**File:** `vn.momo.kits/components/Tooltip.kt`
|
|
4
|
+
|
|
5
|
+
## Parameters
|
|
6
|
+
|
|
7
|
+
```kotlin
|
|
8
|
+
@Composable
|
|
9
|
+
fun Tooltip(
|
|
10
|
+
text: String,
|
|
11
|
+
modifier: Modifier = Modifier,
|
|
12
|
+
position: TooltipPosition = TooltipPosition.BOTTOM
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
enum class TooltipPosition {
|
|
16
|
+
TOP, BOTTOM, LEFT, RIGHT
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```kotlin
|
|
23
|
+
Row {
|
|
24
|
+
IconButton(
|
|
25
|
+
icon = "ic_help",
|
|
26
|
+
onClick = { /* Show help */ }
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
Tooltip(
|
|
30
|
+
text = "Click to get help",
|
|
31
|
+
position = TooltipPosition.RIGHT
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# TrustBanner
|
|
2
|
+
|
|
3
|
+
**File:** `vn.momo.kits/components/TrustBanner.kt`
|
|
4
|
+
|
|
5
|
+
## Parameters
|
|
6
|
+
|
|
7
|
+
```kotlin
|
|
8
|
+
@Composable
|
|
9
|
+
fun TrustBanner(
|
|
10
|
+
modifier: Modifier = Modifier,
|
|
11
|
+
title: String = "",
|
|
12
|
+
description: String = "",
|
|
13
|
+
icon: String? = null
|
|
14
|
+
)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```kotlin
|
|
20
|
+
TrustBanner(
|
|
21
|
+
title = "Bảo mật thanh toán",
|
|
22
|
+
description = "Thông tin được mã hóa SSL",
|
|
23
|
+
icon = "ic_shield"
|
|
24
|
+
)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# Information
|
|
30
|
+
|
|
31
|
+
**File:** `vn.momo/kits/components/Information.kt`
|
|
32
|
+
|
|
33
|
+
## Parameters
|
|
34
|
+
|
|
35
|
+
```kotlin
|
|
36
|
+
@Composable
|
|
37
|
+
fun Information(
|
|
38
|
+
title: String,
|
|
39
|
+
modifier: Modifier = Modifier,
|
|
40
|
+
description: String? = null,
|
|
41
|
+
icon: String? = null,
|
|
42
|
+
type: InfoType = InfoType.INFO
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
enum class InfoType {
|
|
46
|
+
SUCCESS,
|
|
47
|
+
WARNING,
|
|
48
|
+
ERROR,
|
|
49
|
+
INFO
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Usage
|
|
54
|
+
|
|
55
|
+
```kotlin
|
|
56
|
+
Information(
|
|
57
|
+
title = "Thành công",
|
|
58
|
+
description = "Giao dịch đã được xử lý",
|
|
59
|
+
type = InfoType.SUCCESS
|
|
60
|
+
)
|
|
61
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"metadata": {
|
|
3
|
+
"skill_name": "momo-native-kits-skills",
|
|
4
|
+
"skill_path": "<path/to/skill>",
|
|
5
|
+
"executor_model": "<model-name>",
|
|
6
|
+
"analyzer_model": "<model-name>",
|
|
7
|
+
"timestamp": "2026-03-16T07:03:41Z",
|
|
8
|
+
"evals_run": [],
|
|
9
|
+
"runs_per_configuration": 3
|
|
10
|
+
},
|
|
11
|
+
"runs": [],
|
|
12
|
+
"run_summary": {
|
|
13
|
+
"delta": {
|
|
14
|
+
"pass_rate": "+0.00",
|
|
15
|
+
"time_seconds": "+0.0",
|
|
16
|
+
"tokens": "+0"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"notes": []
|
|
20
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Skill Benchmark: momo-native-kits-skills
|
|
2
|
+
|
|
3
|
+
**Model**: <model-name>
|
|
4
|
+
**Date**: 2026-03-16T07:03:41Z
|
|
5
|
+
**Evals**: (3 runs each per configuration)
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
| Metric | Config A | Config B | Delta |
|
|
10
|
+
|--------|------------|---------------|-------|
|
|
11
|
+
| Pass Rate | 0% ± 0% | 0% ± 0% | +0.00 |
|
|
12
|
+
| Time | 0.0s ± 0.0s | 0.0s ± 0.0s | +0.0s |
|
|
13
|
+
| Tokens | 0 ± 0 | 0 ± 0 | +0 |
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
package com.example
|
|
2
|
+
|
|
3
|
+
import androidx.compose.foundation.layout.fillMaxWidth
|
|
4
|
+
import androidx.compose.foundation.layout.padding
|
|
5
|
+
import androidx.compose.runtime.Composable
|
|
6
|
+
import androidx.compose.ui.Modifier
|
|
7
|
+
import androidx.compose.ui.unit.dp
|
|
8
|
+
import vn.momo.kits.components.Button
|
|
9
|
+
import vn.momo.kits.components.ButtonType
|
|
10
|
+
import vn.momo.kits.components.Size
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Example: Primary Button with text 'Đăng nhập'
|
|
14
|
+
*
|
|
15
|
+
* This demonstrates how to create a primary button in MoMo Native Kits
|
|
16
|
+
* with the Vietnamese text "Đăng nhập" (Login).
|
|
17
|
+
*/
|
|
18
|
+
@Composable
|
|
19
|
+
fun LoginButtonExample() {
|
|
20
|
+
Button(
|
|
21
|
+
onClick = {
|
|
22
|
+
// Handle login action
|
|
23
|
+
},
|
|
24
|
+
title = "Đăng nhập",
|
|
25
|
+
type = ButtonType.PRIMARY,
|
|
26
|
+
size = Size.LARGE,
|
|
27
|
+
isFull = true,
|
|
28
|
+
modifier = Modifier
|
|
29
|
+
.fillMaxWidth()
|
|
30
|
+
.padding(horizontal = 16.dp)
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Alternative example: Primary button with additional customization
|
|
36
|
+
*/
|
|
37
|
+
@Composable
|
|
38
|
+
fun LoginButtonWithIconsExample() {
|
|
39
|
+
Button(
|
|
40
|
+
onClick = {
|
|
41
|
+
// Handle login action
|
|
42
|
+
},
|
|
43
|
+
title = "Đăng nhập",
|
|
44
|
+
type = ButtonType.PRIMARY,
|
|
45
|
+
size = Size.LARGE,
|
|
46
|
+
iconLeft = "user", // Optional: Add icon on the left
|
|
47
|
+
iconRight = "arrow_right", // Optional: Add icon on the right
|
|
48
|
+
loading = false, // Set to true when processing login
|
|
49
|
+
isFull = true,
|
|
50
|
+
useTintColor = true,
|
|
51
|
+
modifier = Modifier
|
|
52
|
+
.fillMaxWidth()
|
|
53
|
+
.padding(horizontal = 16.dp)
|
|
54
|
+
)
|
|
55
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
package com.momo.example
|
|
2
|
+
|
|
3
|
+
import androidx.compose.foundation.layout.fillWidth
|
|
4
|
+
import androidx.compose.foundation.layout.height
|
|
5
|
+
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
6
|
+
import androidx.compose.material3.Button
|
|
7
|
+
import androidx.compose.material3.ButtonDefaults
|
|
8
|
+
import androidx.compose.material3.Text
|
|
9
|
+
import androidx.compose.runtime.Composable
|
|
10
|
+
import androidx.compose.ui.Modifier
|
|
11
|
+
import androidx.compose.ui.graphics.Color
|
|
12
|
+
import androidx.compose.ui.text.font.FontWeight
|
|
13
|
+
import androidx.compose.ui.unit.dp
|
|
14
|
+
import androidx.compose.ui.unit.sp
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Primary button with Vietnamese text "Đăng nhập" (Login)
|
|
18
|
+
*/
|
|
19
|
+
@Composable
|
|
20
|
+
fun PrimaryLoginButton(
|
|
21
|
+
onClick: () -> Unit,
|
|
22
|
+
modifier: Modifier = Modifier
|
|
23
|
+
) {
|
|
24
|
+
Button(
|
|
25
|
+
onClick = onClick,
|
|
26
|
+
modifier = modifier
|
|
27
|
+
.fillWidth()
|
|
28
|
+
.height(48.dp),
|
|
29
|
+
shape = RoundedCornerShape(8.dp),
|
|
30
|
+
colors = ButtonDefaults.buttonColors(
|
|
31
|
+
containerColor = Color(0xFFAD0000), // MoMo's primary red color
|
|
32
|
+
contentColor = Color.White
|
|
33
|
+
),
|
|
34
|
+
elevation = ButtonDefaults.buttonElevation(
|
|
35
|
+
defaultElevation = 2.dp,
|
|
36
|
+
pressedElevation = 4.dp
|
|
37
|
+
)
|
|
38
|
+
) {
|
|
39
|
+
Text(
|
|
40
|
+
text = "Đăng nhập",
|
|
41
|
+
fontSize = 16.sp,
|
|
42
|
+
fontWeight = FontWeight.SemiBold
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
package com.example
|
|
2
|
+
|
|
3
|
+
import androidx.compose.foundation.layout.Column
|
|
4
|
+
import androidx.compose.foundation.layout.fillMaxWidth
|
|
5
|
+
import androidx.compose.foundation.layout.padding
|
|
6
|
+
import androidx.compose.foundation.text.KeyboardOptions
|
|
7
|
+
import androidx.compose.runtime.Composable
|
|
8
|
+
import androidx.compose.runtime.getValue
|
|
9
|
+
import androidx.compose.runtime.mutableStateOf
|
|
10
|
+
import androidx.compose.runtime.remember
|
|
11
|
+
import androidx.compose.runtime.setValue
|
|
12
|
+
import androidx.compose.ui.Modifier
|
|
13
|
+
import androidx.compose.ui.text.input.KeyboardType
|
|
14
|
+
import androidx.compose.ui.unit.dp
|
|
15
|
+
import vn.momo.kits.components.Input
|
|
16
|
+
|
|
17
|
+
@Composable
|
|
18
|
+
fun InputPhoneExample() {
|
|
19
|
+
var phoneNumber by remember { mutableStateOf("") }
|
|
20
|
+
|
|
21
|
+
Column(
|
|
22
|
+
modifier = Modifier
|
|
23
|
+
.fillMaxWidth()
|
|
24
|
+
.padding(16.dp)
|
|
25
|
+
) {
|
|
26
|
+
Input(
|
|
27
|
+
value = phoneNumber,
|
|
28
|
+
onValueChange = { newValue ->
|
|
29
|
+
// Filter to only allow digits
|
|
30
|
+
phoneNumber = newValue.filter { it.isDigit() }
|
|
31
|
+
},
|
|
32
|
+
modifier = Modifier.fillMaxWidth(),
|
|
33
|
+
inputSize = vn.momo.kits.components.InputSize.LARGE,
|
|
34
|
+
label = "Số điện thoại",
|
|
35
|
+
placeholder = "Nhập số điện thoại",
|
|
36
|
+
keyboardType = KeyboardType.Phone,
|
|
37
|
+
maxLength = 10
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
package com.example.input
|
|
2
|
+
|
|
3
|
+
import androidx.compose.foundation.layout.Column
|
|
4
|
+
import androidx.compose.foundation.layout.fillMaxWidth
|
|
5
|
+
import androidx.compose.foundation.layout.padding
|
|
6
|
+
import androidx.compose.foundation.text.KeyboardOptions
|
|
7
|
+
import androidx.compose.material.OutlinedTextField
|
|
8
|
+
import androidx.compose.material.Text
|
|
9
|
+
import androidx.compose.runtime.Composable
|
|
10
|
+
import androidx.compose.runtime.getValue
|
|
11
|
+
import androidx.compose.runtime.mutableStateOf
|
|
12
|
+
import androidx.compose.runtime.remember
|
|
13
|
+
import androidx.compose.runtime.setValue
|
|
14
|
+
import androidx.compose.ui.Modifier
|
|
15
|
+
import androidx.compose.ui.text.input.KeyboardType
|
|
16
|
+
import androidx.compose.ui.unit.dp
|
|
17
|
+
|
|
18
|
+
@Composable
|
|
19
|
+
fun InputPhoneExample() {
|
|
20
|
+
var phoneNumber by remember { mutableStateOf("") }
|
|
21
|
+
|
|
22
|
+
Column(
|
|
23
|
+
modifier = Modifier
|
|
24
|
+
.fillMaxWidth()
|
|
25
|
+
.padding(16.dp)
|
|
26
|
+
) {
|
|
27
|
+
OutlinedTextField(
|
|
28
|
+
value = phoneNumber,
|
|
29
|
+
onValueChange = { newValue ->
|
|
30
|
+
// Filter to only allow numeric characters
|
|
31
|
+
phoneNumber = newValue.filter { it.isDigit() }
|
|
32
|
+
},
|
|
33
|
+
label = { Text("Số điện thoại") },
|
|
34
|
+
placeholder = { Text("Nhập số điện thoại") },
|
|
35
|
+
keyboardOptions = KeyboardOptions(
|
|
36
|
+
keyboardType = KeyboardType.Phone
|
|
37
|
+
),
|
|
38
|
+
singleLine = true,
|
|
39
|
+
modifier = Modifier.fillMaxWidth()
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
}
|