@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.
Files changed (106) hide show
  1. package/.claude/momo-native-kits-skill/SKILL.md +51 -0
  2. package/.claude/momo-native-kits-skill/evals/evals.json +95 -0
  3. package/.claude/momo-native-kits-skill/references/badge.md +52 -0
  4. package/.claude/momo-native-kits-skill/references/button.md +182 -0
  5. package/.claude/momo-native-kits-skill/references/card.md +48 -0
  6. package/.claude/momo-native-kits-skill/references/checkbox.md +51 -0
  7. package/.claude/momo-native-kits-skill/references/chip.md +48 -0
  8. package/.claude/momo-native-kits-skill/references/constants.md +260 -0
  9. package/.claude/momo-native-kits-skill/references/divider.md +26 -0
  10. package/.claude/momo-native-kits-skill/references/input.md +408 -0
  11. package/.claude/momo-native-kits-skill/references/navigation.md +475 -0
  12. package/.claude/momo-native-kits-skill/references/popup.md +97 -0
  13. package/.claude/momo-native-kits-skill/references/radio.md +60 -0
  14. package/.claude/momo-native-kits-skill/references/skeleton.md +40 -0
  15. package/.claude/momo-native-kits-skill/references/snackbar.md +54 -0
  16. package/.claude/momo-native-kits-skill/references/switch.md +62 -0
  17. package/.claude/momo-native-kits-skill/references/text.md +195 -0
  18. package/.claude/momo-native-kits-skill/references/tooltip.md +34 -0
  19. package/.claude/momo-native-kits-skill/references/trustbanner.md +61 -0
  20. package/.claude/momo-native-kits-skill/workspace/iteration-1/benchmark.json +20 -0
  21. package/.claude/momo-native-kits-skill/workspace/iteration-1/benchmark.md +13 -0
  22. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-0-button/eval_metadata.json +6 -0
  23. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-0-button/with_skill/outputs/ButtonExample.kt +55 -0
  24. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-0-button/without_skill/outputs/ButtonExample.kt +45 -0
  25. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-1-input/eval_metadata.json +6 -0
  26. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-1-input/with_skill/outputs/InputPhoneExample.kt +40 -0
  27. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-1-input/without_skill/outputs/InputPhoneExample.kt +42 -0
  28. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-2-bottomtab/eval_metadata.json +6 -0
  29. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-2-bottomtab/with_skill/outputs/BottomTabExample.kt +236 -0
  30. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-2-bottomtab/without_skill/outputs/BottomTabExample.kt +152 -0
  31. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-3-checkbox/eval_metadata.json +6 -0
  32. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-3-checkbox/with_skill/outputs/CheckBoxExample.kt +49 -0
  33. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-3-checkbox/without_skill/outputs/CheckBoxExample.kt +123 -0
  34. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-4-datetimepicker/eval_metadata.json +6 -0
  35. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-4-datetimepicker/with_skill/outputs/DateTimePickerExample.kt +318 -0
  36. package/.claude/momo-native-kits-skill/workspace/iteration-1/eval-4-datetimepicker/without_skill/outputs/DateTimePickerExample.kt +330 -0
  37. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-card/with_skill/outputs/CardExample.kt +124 -0
  38. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-card/without_skill/outputs/CardExample.kt +71 -0
  39. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-loginform/with_skill/outputs/LoginFormExample.kt +134 -0
  40. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-loginform/without_skill/outputs/LoginFormExample.kt +199 -0
  41. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-navcontainer/with_skill/outputs/NavigationContainerExample.kt +224 -0
  42. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-navcontainer/without_skill/outputs/NavigationContainerExample.kt +225 -0
  43. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-popup/with_skill/outputs/PopupExample.kt +79 -0
  44. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-popup/without_skill/outputs/PopupExample.kt +169 -0
  45. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-setoptions/eval_metadata.json +6 -0
  46. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-setoptions/with_skill/outputs/SetOptionsExample.kt +255 -0
  47. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-setoptions/without_skill/outputs/SetOptionsExample.kt +212 -0
  48. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-skeleton/with_skill/outputs/SkeletonExample.kt +199 -0
  49. package/.claude/momo-native-kits-skill/workspace/iteration-2/eval-skeleton/without_skill/outputs/SkeletonExample.kt +229 -0
  50. package/.claude/momo-native-kits-skill/workspace/iteration-3/benchmark.json +20 -0
  51. package/.claude/momo-native-kits-skill/workspace/iteration-3/benchmark.md +13 -0
  52. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-button/eval_metadata.json +22 -0
  53. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-button/with_skill/outputs/PrimaryButtonExample.kt +38 -0
  54. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-button/with_skill/timing.json +5 -0
  55. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-button/without_skill/outputs/PrimaryButtonExample.kt +83 -0
  56. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-button/without_skill/timing.json +5 -0
  57. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-navcontainer/eval_metadata.json +22 -0
  58. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-navcontainer/with_skill/outputs/NavigationContainerExample.kt +547 -0
  59. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-navcontainer/with_skill/timing.json +5 -0
  60. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-navcontainer/without_skill/outputs/MoMoNavigationContainer.kt +519 -0
  61. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-navcontainer/without_skill/timing.json +5 -0
  62. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-setoptions/eval_metadata.json +27 -0
  63. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-setoptions/with_skill/outputs/SetOptionsExample.kt +429 -0
  64. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-setoptions/with_skill/timing.json +5 -0
  65. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-setoptions/without_skill/outputs/SetOptionsExample.kt +353 -0
  66. package/.claude/momo-native-kits-skill/workspace/iteration-3/eval-setoptions/without_skill/timing.json +5 -0
  67. package/.claude/settings.local.json +35 -7
  68. package/compose/build.gradle.kts +1 -1
  69. package/gradle.properties +1 -1
  70. package/ios/Input/Input.swift +112 -50
  71. package/local.properties +1 -1
  72. package/package.json +1 -1
  73. package/.claude/momo-native-kits/SKILL.md +0 -87
  74. package/.claude/momo-native-kits/references/Badge.md +0 -39
  75. package/.claude/momo-native-kits/references/BadgeDot.md +0 -37
  76. package/.claude/momo-native-kits/references/BottomSheet.md +0 -51
  77. package/.claude/momo-native-kits/references/BottomTab.md +0 -65
  78. package/.claude/momo-native-kits/references/Button.md +0 -197
  79. package/.claude/momo-native-kits/references/CheckBox.md +0 -51
  80. package/.claude/momo-native-kits/references/Chip.md +0 -47
  81. package/.claude/momo-native-kits/references/Divider.md +0 -29
  82. package/.claude/momo-native-kits/references/HeaderTitle.md +0 -45
  83. package/.claude/momo-native-kits/references/HeaderType.md +0 -47
  84. package/.claude/momo-native-kits/references/Icon.md +0 -32
  85. package/.claude/momo-native-kits/references/Image.md +0 -38
  86. package/.claude/momo-native-kits/references/Information.md +0 -36
  87. package/.claude/momo-native-kits/references/Input.md +0 -334
  88. package/.claude/momo-native-kits/references/InputDropDown.md +0 -47
  89. package/.claude/momo-native-kits/references/InputMoney.md +0 -241
  90. package/.claude/momo-native-kits/references/InputOTP.md +0 -52
  91. package/.claude/momo-native-kits/references/InputPhoneNumber.md +0 -175
  92. package/.claude/momo-native-kits/references/InputSearch.md +0 -57
  93. package/.claude/momo-native-kits/references/InputTextArea.md +0 -46
  94. package/.claude/momo-native-kits/references/NavigationContainer.md +0 -51
  95. package/.claude/momo-native-kits/references/Navigator.md +0 -287
  96. package/.claude/momo-native-kits/references/PaginationDot.md +0 -28
  97. package/.claude/momo-native-kits/references/PaginationNumber.md +0 -28
  98. package/.claude/momo-native-kits/references/PopupNotify.md +0 -47
  99. package/.claude/momo-native-kits/references/Radio.md +0 -44
  100. package/.claude/momo-native-kits/references/Skeleton.md +0 -32
  101. package/.claude/momo-native-kits/references/Switch.md +0 -36
  102. package/.claude/momo-native-kits/references/Tag.md +0 -40
  103. package/.claude/momo-native-kits/references/Text.md +0 -37
  104. package/.claude/momo-native-kits/references/Title.md +0 -43
  105. package/.claude/momo-native-kits/references/Tooltip.md +0 -30
  106. package/building-skill-for-claude.md +0 -1190
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: momo-native-kits-skills
3
+ description: |
4
+ MoMo Native Kits UI Component Rendering - Generate correct, production-ready Kotlin/Compose code for MoMo UI Kit components.
5
+
6
+ Use when:
7
+ - User says "tạo button", "tạo nút bấm", "button component", "primary button"
8
+ - User says "tạo input", "tạo ô nhập liệu", "text field", "form input", "nhập số điện thoại"
9
+ - User says "tạo search", "ô tìm kiếm", "input search", "tìm kiếm"
10
+ - User says "tạo checkbox", "ô tick", "checkbox"
11
+ - User says "tạo radio", "nút chọn", "radio button"
12
+ - User says "tạo switch", "nút gạt", "toggle", "bật/tắt"
13
+ - User says "tạo chip", "chip", "label"
14
+ - User says "tạo card", "thẻ", "khung"
15
+ - User says "tạo divider", "đường kẻ", "phân cách", "line"
16
+ - User says "tạo skeleton", "loading view"
17
+ - User says "tạo badge", "thông báo", "nhãn", "nhãn hiệu"
18
+ - User says "tạo popup", "thông báo", "alert", "xác nhận"
19
+ - User says "tạo snackbar", "toast", "thông báo ngắn", "message"
20
+ - User says "tạo tooltip", "gợi ý", "help", "hướng dẫn"
21
+ - User says "tạo trustbanner", "bảo mật", "trust"
22
+ - User says "tạo navigation", "điều hướng", "Bottom Tab", "BottomNavigation", "tab bar"
23
+ - User says "NavigationContainer", "setOptions", "navigator.push", "pop", "present"
24
+ - User says "Header", "tiêu đề", "app bar", "header type"
25
+ - User says "Text", "Title", "typography", "font", "chữ"
26
+ - User says "màu sắc", "colors", "Spacing", "Radius", "theme"
27
+ ---
28
+
29
+ # MoMo Native Kits UI Components
30
+
31
+ ## Reference Files
32
+
33
+ | File | Description |
34
+ |------|-------------|
35
+ | [button.md](references/button.md) | Button - nút bấm |
36
+ | [input.md](references/input.md) | Input - các loại input |
37
+ | [text.md](references/text.md) | Text, Title, Typography |
38
+ | [checkbox.md](references/checkbox.md) | CheckBox - ô tick |
39
+ | [radio.md](references/radio.md) | Radio - nút chọn |
40
+ | [switch.md](references/switch.md) | Switch - nút gạt |
41
+ | [chip.md](references/chip.md) | Chip - tag, label |
42
+ | [card.md](references/card.md) | Card - thẻ, khung |
43
+ | [divider.md](references/divider.md) | Divider - đường kẻ |
44
+ | [skeleton.md](references/skeleton.md) | Skeleton - loading |
45
+ | [badge.md](references/badge.md) | Badge, BadgeDot |
46
+ | [trustbanner.md](references/trustbanner.md) | TrustBanner, Information |
47
+ | [popup.md](references/popup.md) | PopupNotify, PopupPromotion |
48
+ | [snackbar.md](references/snackbar.md) | SnackBar |
49
+ | [tooltip.md](references/tooltip.md) | Tooltip |
50
+ | [navigation.md](references/navigation.md) | Navigation, BottomTab, Header |
51
+ | [constants.md](references/constants.md) | Colors, Radius, Spacing, Typography |
@@ -0,0 +1,95 @@
1
+ {
2
+ "skill_name": "momo-native-kits-skills",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Show me how to create a primary button with text 'Đăng nhập' in MoMo Native Kits",
7
+ "expected_output": "Kotlin code for Button component with ButtonType.PRIMARY, title='Đăng nhập', proper imports from vn.momo.kits.components",
8
+ "files": []
9
+ },
10
+ {
11
+ "id": 2,
12
+ "prompt": "I need an input field for phone number with label 'Số điện thoại' and placeholder 'Nhập số điện thoại'",
13
+ "expected_output": "Kotlin code for Input component with label, placeholder, and keyboard type for phone",
14
+ "files": []
15
+ },
16
+ {
17
+ "id": 3,
18
+ "prompt": "How do I implement a bottom tab navigation with 4 tabs: Home, Wallet, History, Profile in MoMo app?",
19
+ "expected_output": "Kotlin code for BottomTab with BottomTabItem list, proper navigation setup",
20
+ "files": []
21
+ },
22
+ {
23
+ "id": 4,
24
+ "prompt": "Create a checkbox component for terms and conditions agreement",
25
+ "expected_output": "Kotlin code for CheckBox with label 'Tôi đồng ý với điều khoản'",
26
+ "files": []
27
+ },
28
+ {
29
+ "id": 5,
30
+ "prompt": "Show me how to use the DateTimePicker component for date selection",
31
+ "expected_output": "Kotlin code for DateTimePicker with selectedDate, onDateSelected parameters",
32
+ "files": []
33
+ },
34
+ {
35
+ "id": 6,
36
+ "prompt": "I need a search input field like the one in MoMo app",
37
+ "expected_output": "Kotlin code for InputSearch component with placeholder 'Tìm kiếm...'",
38
+ "files": []
39
+ },
40
+ {
41
+ "id": 7,
42
+ "prompt": "How to create a modal screen in MoMo Native Kits?",
43
+ "expected_output": "Kotlin code for ModalScreen with onDismiss handler",
44
+ "files": []
45
+ },
46
+ {
47
+ "id": 8,
48
+ "prompt": "Create a switch component for toggling dark mode",
49
+ "expected_output": "Kotlin code for Switch component with checked state and onCheckedChange callback",
50
+ "files": []
51
+ },
52
+ {
53
+ "id": 9,
54
+ "prompt": "How to use setOptions in MoMo navigation? Show me how to change header title dynamically",
55
+ "expected_output": "Kotlin code showing setOptions in LaunchedEffect(Unit) with LocalNavigation.current",
56
+ "files": []
57
+ },
58
+ {
59
+ "id": 10,
60
+ "prompt": "Create a login form with phone input and password input in MoMo Native Kits",
61
+ "expected_output": "Kotlin code with InputPhoneNumber, Input (password), and Button components",
62
+ "files": []
63
+ },
64
+ {
65
+ "id": 11,
66
+ "prompt": "How to implement NavigationContainer in MoMo app? Show me the correct pattern",
67
+ "expected_output": "Kotlin code with single NavigationContainer, initialScreen, and NavigationOptions",
68
+ "files": []
69
+ },
70
+ {
71
+ "id": 12,
72
+ "prompt": "Create a card component to display a list item with image and title",
73
+ "expected_output": "Kotlin code for Card with Image and Title inside",
74
+ "files": []
75
+ },
76
+ {
77
+ "id": 13,
78
+ "prompt": "Show me how to use Navigator to push and pop screens in MoMo",
79
+ "expected_output": "Kotlin code showing navigator.push(), navigator.pop(), navigator.present()",
80
+ "files": []
81
+ },
82
+ {
83
+ "id": 14,
84
+ "prompt": "Create a loading skeleton for a card component",
85
+ "expected_output": "Kotlin code with Skeleton components showing loading state",
86
+ "files": []
87
+ },
88
+ {
89
+ "id": 15,
90
+ "prompt": "How to show a popup notification for success message in MoMo?",
91
+ "expected_output": "Kotlin code with PopupNotify and PopupNotifyProps",
92
+ "files": []
93
+ }
94
+ ]
95
+ }
@@ -0,0 +1,52 @@
1
+ # Badge
2
+
3
+ **File:** `vn.momo/kits/components/Badge.kt`
4
+
5
+ ## Badge Parameters
6
+
7
+ ```kotlin
8
+ @Composable
9
+ fun Badge(
10
+ text: String, // Badge text
11
+ modifier: Modifier = Modifier,
12
+ type: BadgeType = BadgeType.RED
13
+ )
14
+
15
+ enum class BadgeType {
16
+ RED, // Error/new
17
+ GREEN, // Success
18
+ YELLOW, // Warning
19
+ BLUE, // Info
20
+ GRAY // Neutral
21
+ }
22
+ ```
23
+
24
+ ## BadgeDot Parameters
25
+
26
+ **File:** `vn.momo/kits/components/BadgeDot.kt`
27
+
28
+ ```kotlin
29
+ @Composable
30
+ fun BadgeDot(
31
+ modifier: Modifier = Modifier,
32
+ color: Color = Colors.red_02
33
+ )
34
+ ```
35
+
36
+ ## Badge Usage
37
+
38
+ ```kotlin
39
+ Row(verticalAlignment = Alignment.CenterVertically) {
40
+ Text(text = "New Feature")
41
+ Badge(text = "NEW", type = BadgeType.RED)
42
+ }
43
+ ```
44
+
45
+ ## BadgeDot Usage
46
+
47
+ ```kotlin
48
+ Row {
49
+ Icon(source = "ic_notification")
50
+ BadgeDot(color = Colors.red_02)
51
+ }
52
+ ```
@@ -0,0 +1,182 @@
1
+ # Button Component
2
+
3
+ ## Overview
4
+
5
+ The Button component is a core UI element in MoMo Native Kits for triggering actions. It supports multiple types, sizes, and states.
6
+
7
+ **Package:** `vn.momo.kits.components`
8
+
9
+ ## Button Types
10
+
11
+ | Type | Description | Use Case |
12
+ |------|-------------|----------|
13
+ | `PRIMARY` | Primary action button with filled background | Main CTA buttons |
14
+ | `SECONDARY` | Secondary action with border | Secondary actions |
15
+ | `TONAL` | Tonal background | Alternative primary actions |
16
+ | `OUTLINE` | Outline style | Tertiary actions |
17
+ | `DANGER` | Error/danger action | Destructive actions |
18
+ | `TEXT` | Text-only button | Subtle actions |
19
+ | `DISABLED` | Disabled state | Unavailable actions |
20
+
21
+ ## Button Sizes
22
+
23
+ | Size | Height | Radius | Padding | Width |
24
+ |------|--------|--------|---------|-------|
25
+ | `LARGE` | 48.dp | 4.dp | 16.dp | 128.dp |
26
+ | `MEDIUM` | 36.dp | 4.dp | 12.dp | 80.dp |
27
+ | `SMALL` | 28.dp | 4.dp | 8.dp | 60.dp |
28
+
29
+ ## Parameters
30
+
31
+ ```kotlin
32
+ @Composable
33
+ fun Button(
34
+ onClick: () -> Unit, // Required: Click handler
35
+ type: ButtonType = ButtonType.PRIMARY,
36
+ size: Size = Size.LARGE,
37
+ title: String = "Button", // Button text
38
+ iconLeft: String = "", // Left icon (icon name or URL)
39
+ iconRight: String = "", // Right icon (icon name or URL)
40
+ loading: Boolean = false, // Show loading spinner
41
+ useTintColor: Boolean = true, // Apply tint color to icons
42
+ isFull: Boolean = true, // Full width button
43
+ modifier: Modifier = Modifier
44
+ )
45
+ ```
46
+
47
+ ## Usage Examples
48
+
49
+ ### Basic Primary Button
50
+
51
+ ```kotlin
52
+ import vn.momo.kits.components.Button
53
+ import vn.momo.kits.components.ButtonType
54
+ import vn.momo.kits.components.Size
55
+
56
+ Button(
57
+ onClick = { /* Handle click */ },
58
+ title = "Đăng nhập",
59
+ type = ButtonType.PRIMARY,
60
+ size = Size.LARGE
61
+ )
62
+ ```
63
+
64
+ ### Button with Icon
65
+
66
+ ```kotlin
67
+ Button(
68
+ onClick = { /* Handle click */ },
69
+ title = "Tiếp tục",
70
+ iconRight = "arrow_right", // Icon name from MoMo icon system
71
+ type = ButtonType.PRIMARY,
72
+ size = Size.LARGE
73
+ )
74
+ ```
75
+
76
+ ### Loading Button
77
+
78
+ ```kotlin
79
+ var isLoading by remember { mutableStateOf(false) }
80
+
81
+ Button(
82
+ onClick = {
83
+ isLoading = true
84
+ // Perform async operation
85
+ isLoading = false
86
+ },
87
+ title = "Đăng nhập",
88
+ loading = isLoading,
89
+ type = ButtonType.PRIMARY
90
+ )
91
+ ```
92
+
93
+ ### Full Width Button
94
+
95
+ ```kotlin
96
+ Button(
97
+ onClick = { /* Handle click */ },
98
+ title = "Đăng ký ngay",
99
+ type = ButtonType.PRIMARY,
100
+ isFull = true,
101
+ modifier = Modifier
102
+ .fillMaxWidth()
103
+ .padding(horizontal = 16.dp)
104
+ )
105
+ ```
106
+
107
+ ### Danger Button (for destructive actions)
108
+
109
+ ```kotlin
110
+ Button(
111
+ onClick = { showDeleteConfirmation() },
112
+ title = "Xóa tài khoản",
113
+ type = ButtonType.DANGER,
114
+ size = Size.LARGE
115
+ )
116
+ ```
117
+
118
+ ### Disabled Button
119
+
120
+ ```kotlin
121
+ Button(
122
+ onClick = { /* Will not trigger */ },
123
+ title = "Không thể click",
124
+ type = ButtonType.DISABLED,
125
+ enabled = false
126
+ )
127
+ ```
128
+
129
+ ## Real World Example: Login Screen
130
+
131
+ ```kotlin
132
+ @Composable
133
+ fun LoginScreen() {
134
+ var isLoading by remember { mutableStateOf(false) }
135
+ val phoneNumber = remember { mutableStateOf("") }
136
+ val password = remember { mutableStateOf("") }
137
+
138
+ Column(
139
+ modifier = Modifier.padding(16.dp),
140
+ verticalArrangement = Arrangement.spacedBy(16.dp)
141
+ ) {
142
+ // Input fields would go here
143
+
144
+ Button(
145
+ onClick = {
146
+ isLoading = true
147
+ // Perform login
148
+ },
149
+ title = "Đăng nhập",
150
+ type = ButtonType.PRIMARY,
151
+ size = Size.LARGE,
152
+ isFull = true,
153
+ loading = isLoading,
154
+ modifier = Modifier.fillMaxWidth()
155
+ )
156
+
157
+ TextButton(
158
+ onClick = { /* Navigate to forgot password */ },
159
+ title = "Quên mật khẩu?",
160
+ type = ButtonType.TEXT
161
+ )
162
+ }
163
+ }
164
+ ```
165
+
166
+ ## Visual States
167
+
168
+ | State | Visual |
169
+ |-------|--------|
170
+ | Default | Full color background |
171
+ | Pressed | 50% opacity, slight scale down |
172
+ | Loading | Spinner replacing icons |
173
+ | Disabled | Gray background, 50% opacity |
174
+
175
+ ## Best Practices
176
+
177
+ 1. **Use PRIMARY for main CTA** - The most important action on screen
178
+ 2. **Use DANGER for destructive actions** - Delete, remove, logout
179
+ 3. **Use TEXT for subtle actions** - Links, secondary options
180
+ 4. **Set isFull = true for mobile** - Better touch targets
181
+ 5. **Always provide loading state** - For async operations > 200ms
182
+ 6. **Use consistent sizing** - LARGE for main CTAs, MEDIUM/SMALL for inline
@@ -0,0 +1,48 @@
1
+ # Card
2
+
3
+ **File:** `vn.momo.kits/layout/Card.kt`
4
+
5
+ ## Parameters
6
+
7
+ ```kotlin
8
+ @Composable
9
+ fun Card(
10
+ modifier: Modifier = Modifier,
11
+ onClick: (() -> Unit)? = null, // Optional click handler
12
+ elevation: Dp = 2.dp, // Shadow elevation
13
+ cornerRadius: Dp = Radius.M, // Corner radius
14
+ backgroundColor: Color = AppTheme.current.colors.background.surface
15
+ ) {
16
+ // Content goes here
17
+ }
18
+ ```
19
+
20
+ ## Basic
21
+
22
+ ```kotlin
23
+ Card(
24
+ modifier = Modifier.fillMaxWidth()
25
+ ) {
26
+ Column(modifier = Modifier.padding(16.dp)) {
27
+ Title(text = "Card Title", type = TitleType.TITLE_3)
28
+ Text(text = "Card content")
29
+ }
30
+ }
31
+ ```
32
+
33
+ ## Clickable
34
+
35
+ ```kotlin
36
+ Card(
37
+ onClick = { /* Navigate */ },
38
+ modifier = Modifier.fillMaxWidth()
39
+ ) {
40
+ Row(modifier = Modifier.padding(16.dp)) {
41
+ Image(source = "image.jpg")
42
+ Column(modifier = Modifier.padding(start = 12.dp)) {
43
+ Title(text = "Item Title")
44
+ Text(text = "Description")
45
+ }
46
+ }
47
+ }
48
+ ```
@@ -0,0 +1,51 @@
1
+ # CheckBox
2
+
3
+ **File:** `vn/momo/kits/components/CheckBox.kt`
4
+
5
+ ## Parameters
6
+
7
+ ```kotlin
8
+ @Composable
9
+ fun CheckBox(
10
+ checked: Boolean, // Required: Checked state
11
+ onCheckedChange: (Boolean) -> Unit, // Required: State change callback
12
+ modifier: Modifier = Modifier,
13
+ title: String = "", // Label text
14
+ enabled: Boolean = true // Enable/disable
15
+ )
16
+ ```
17
+
18
+ ## Usage
19
+
20
+ ```kotlin
21
+ var isChecked by remember { mutableStateOf(false) }
22
+
23
+ CheckBox(
24
+ checked = isChecked,
25
+ onCheckedChange = { isChecked = it },
26
+ title = "Đồng ý với điều khoản"
27
+ )
28
+ ```
29
+
30
+ ## With Button
31
+
32
+ ```kotlin
33
+ @Composable
34
+ fun TermsAgreement() {
35
+ var agreed by remember { mutableStateOf(false) }
36
+
37
+ Column {
38
+ CheckBox(
39
+ checked = agreed,
40
+ onCheckedChange = { agreed = it },
41
+ title = "Tôi đồng ý với Điều khoản sử dụng"
42
+ )
43
+
44
+ Button(
45
+ title = "Tiếp tục",
46
+ type = ButtonType.PRIMARY,
47
+ enabled = agreed
48
+ )
49
+ }
50
+ }
51
+ ```
@@ -0,0 +1,48 @@
1
+ # Chip
2
+
3
+ **File:** `vn/momo/kits/components/Chip.kt`
4
+
5
+ ## Parameters
6
+
7
+ ```kotlin
8
+ @Composable
9
+ fun Chip(
10
+ text: String, // Required: Chip text
11
+ modifier: Modifier = Modifier,
12
+ isSelected: Boolean = false, // Selected state
13
+ onClick: (() -> Unit)? = null, // Click handler
14
+ leadingIcon: String? = null // Optional leading icon
15
+ )
16
+ ```
17
+
18
+ ## Usage
19
+
20
+ ```kotlin
21
+ var selectedChips by remember { mutableStateOf(setOf("food")) }
22
+
23
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
24
+ listOf("food", "drink", "dessert", "snack").forEach { chip ->
25
+ Chip(
26
+ text = chip,
27
+ isSelected = chip in selectedChips,
28
+ onClick = {
29
+ selectedChips = if (chip in selectedChips) {
30
+ selectedChips - chip
31
+ } else {
32
+ selectedChips + chip
33
+ }
34
+ }
35
+ )
36
+ }
37
+ }
38
+ ```
39
+
40
+ ## With Icon
41
+
42
+ ```kotlin
43
+ Chip(
44
+ text = "With Icon",
45
+ leadingIcon = "ic_tag",
46
+ onClick = { /* Handle click */ }
47
+ )
48
+ ```