@momo-kits/native-kits 0.158.1-beta.1-debug → 0.158.1-beta.2-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 (139) hide show
  1. package/compose/build.gradle.kts +1 -1
  2. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +15 -1
  3. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +15 -1
  4. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +1 -0
  5. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +4 -1
  6. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +11 -9
  7. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +56 -1
  8. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +167 -0
  9. package/example/ios/Example.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/Example.xcscheme +32 -0
  10. package/example/ios/Example.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  11. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  12. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/WorkspaceSettings.xcsettings +16 -0
  13. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +6 -0
  14. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +5 -0
  15. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +58 -0
  16. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/Pods-Example.xcscheme +58 -0
  17. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SDWebImage.xcscheme +58 -0
  18. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +58 -0
  19. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SkeletonUI.xcscheme +58 -0
  20. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/lottie-ios-LottiePrivacyInfo.xcscheme +58 -0
  21. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/lottie-ios.xcscheme +58 -0
  22. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +60 -0
  23. package/gradle.properties +1 -1
  24. package/local.properties +2 -2
  25. package/package.json +1 -1
  26. package/.claude/settings.local.json +0 -11
  27. package/.claude/skills/design-system/SKILL.md +0 -88
  28. package/.claude/skills/design-system/references/components/avatar.md +0 -134
  29. package/.claude/skills/design-system/references/components/badge.md +0 -127
  30. package/.claude/skills/design-system/references/components/bottom-tab.md +0 -177
  31. package/.claude/skills/design-system/references/components/bottomsheet.md +0 -170
  32. package/.claude/skills/design-system/references/components/button.md +0 -206
  33. package/.claude/skills/design-system/references/components/carousel.md +0 -117
  34. package/.claude/skills/design-system/references/components/checkbox.md +0 -98
  35. package/.claude/skills/design-system/references/components/chip.md +0 -146
  36. package/.claude/skills/design-system/references/components/collapse.md +0 -120
  37. package/.claude/skills/design-system/references/components/date-picker.md +0 -119
  38. package/.claude/skills/design-system/references/components/divider.md +0 -84
  39. package/.claude/skills/design-system/references/components/icon.md +0 -130
  40. package/.claude/skills/design-system/references/components/image.md +0 -81
  41. package/.claude/skills/design-system/references/components/information.md +0 -107
  42. package/.claude/skills/design-system/references/components/input-dropdown.md +0 -138
  43. package/.claude/skills/design-system/references/components/input-money.md +0 -157
  44. package/.claude/skills/design-system/references/components/input-otp.md +0 -132
  45. package/.claude/skills/design-system/references/components/input-phone-number.md +0 -140
  46. package/.claude/skills/design-system/references/components/input-search.md +0 -124
  47. package/.claude/skills/design-system/references/components/input-text-area.md +0 -133
  48. package/.claude/skills/design-system/references/components/input.md +0 -152
  49. package/.claude/skills/design-system/references/components/loader.md +0 -87
  50. package/.claude/skills/design-system/references/components/pagination.md +0 -105
  51. package/.claude/skills/design-system/references/components/popup-notify.md +0 -128
  52. package/.claude/skills/design-system/references/components/progress-info.md +0 -114
  53. package/.claude/skills/design-system/references/components/radio.md +0 -86
  54. package/.claude/skills/design-system/references/components/rating.md +0 -126
  55. package/.claude/skills/design-system/references/components/skeleton.md +0 -120
  56. package/.claude/skills/design-system/references/components/slider.md +0 -141
  57. package/.claude/skills/design-system/references/components/snackbar.md +0 -97
  58. package/.claude/skills/design-system/references/components/stepper.md +0 -100
  59. package/.claude/skills/design-system/references/components/steps.md +0 -91
  60. package/.claude/skills/design-system/references/components/suggest-action.md +0 -95
  61. package/.claude/skills/design-system/references/components/swipe.md +0 -121
  62. package/.claude/skills/design-system/references/components/switch.md +0 -98
  63. package/.claude/skills/design-system/references/components/tab-view.md +0 -120
  64. package/.claude/skills/design-system/references/components/tag.md +0 -118
  65. package/.claude/skills/design-system/references/components/text.md +0 -151
  66. package/.claude/skills/design-system/references/components/toast.md +0 -99
  67. package/.claude/skills/design-system/references/components/tooltip.md +0 -138
  68. package/.claude/skills/design-system/references/components/top-nav-miniapp.md +0 -94
  69. package/.claude/skills/design-system/references/components/top-nav.md +0 -226
  70. package/.claude/skills/design-system/references/components/uploader.md +0 -115
  71. package/.claude/skills/design-system/references/navigation/bottom-tab.md +0 -131
  72. package/.claude/skills/design-system/references/navigation/bottomsheet.md +0 -161
  73. package/.claude/skills/design-system/references/navigation/modal.md +0 -133
  74. package/.claude/skills/design-system/references/navigation/navigation-options.md +0 -225
  75. package/.claude/skills/design-system/references/navigation/navigator.md +0 -111
  76. package/.claude/skills/design-system/references/navigation/setup.md +0 -134
  77. package/.claude/skills/design-system/references/navigation/stack.md +0 -128
  78. package/.claude/skills/design-system/references/spec-convention.md +0 -80
  79. package/.claude/skills/design-system/references/tokens/colors.md +0 -131
  80. package/.claude/skills/design-system/references/tokens/spacing-radius.md +0 -144
  81. package/.claude/skills/design-system/references/tokens/theme.md +0 -125
  82. package/.claude/skills/design-system/references/tokens/typography.md +0 -135
  83. package/.claude/skills/design-system-kits/SKILL.md +0 -102
  84. package/.claude/skills/design-system-kits/references/code-convention.md +0 -118
  85. package/.claude/skills/design-system-kits/references/components/avatar.md +0 -45
  86. package/.claude/skills/design-system-kits/references/components/badge.md +0 -27
  87. package/.claude/skills/design-system-kits/references/components/button.md +0 -65
  88. package/.claude/skills/design-system-kits/references/components/carousel.md +0 -51
  89. package/.claude/skills/design-system-kits/references/components/checkbox.md +0 -39
  90. package/.claude/skills/design-system-kits/references/components/chip.md +0 -54
  91. package/.claude/skills/design-system-kits/references/components/collapse.md +0 -63
  92. package/.claude/skills/design-system-kits/references/components/date-picker.md +0 -36
  93. package/.claude/skills/design-system-kits/references/components/divider.md +0 -21
  94. package/.claude/skills/design-system-kits/references/components/icon.md +0 -382
  95. package/.claude/skills/design-system-kits/references/components/image.md +0 -62
  96. package/.claude/skills/design-system-kits/references/components/information.md +0 -61
  97. package/.claude/skills/design-system-kits/references/components/input-dropdown.md +0 -92
  98. package/.claude/skills/design-system-kits/references/components/input-money.md +0 -128
  99. package/.claude/skills/design-system-kits/references/components/input-otp.md +0 -85
  100. package/.claude/skills/design-system-kits/references/components/input-phone-number.md +0 -96
  101. package/.claude/skills/design-system-kits/references/components/input-search.md +0 -127
  102. package/.claude/skills/design-system-kits/references/components/input-text-area.md +0 -100
  103. package/.claude/skills/design-system-kits/references/components/input.md +0 -126
  104. package/.claude/skills/design-system-kits/references/components/loader.md +0 -41
  105. package/.claude/skills/design-system-kits/references/components/pagination.md +0 -47
  106. package/.claude/skills/design-system-kits/references/components/popup-notify.md +0 -69
  107. package/.claude/skills/design-system-kits/references/components/popup-promotion.md +0 -35
  108. package/.claude/skills/design-system-kits/references/components/progress-info.md +0 -55
  109. package/.claude/skills/design-system-kits/references/components/radio.md +0 -42
  110. package/.claude/skills/design-system-kits/references/components/rating.md +0 -36
  111. package/.claude/skills/design-system-kits/references/components/skeleton.md +0 -25
  112. package/.claude/skills/design-system-kits/references/components/slider.md +0 -53
  113. package/.claude/skills/design-system-kits/references/components/snackbar.md +0 -52
  114. package/.claude/skills/design-system-kits/references/components/stepper.md +0 -46
  115. package/.claude/skills/design-system-kits/references/components/steps.md +0 -57
  116. package/.claude/skills/design-system-kits/references/components/suggest-action.md +0 -44
  117. package/.claude/skills/design-system-kits/references/components/swipe.md +0 -44
  118. package/.claude/skills/design-system-kits/references/components/switch.md +0 -43
  119. package/.claude/skills/design-system-kits/references/components/tab-view.md +0 -56
  120. package/.claude/skills/design-system-kits/references/components/tag.md +0 -50
  121. package/.claude/skills/design-system-kits/references/components/text.md +0 -56
  122. package/.claude/skills/design-system-kits/references/components/toast.md +0 -51
  123. package/.claude/skills/design-system-kits/references/components/tooltip.md +0 -95
  124. package/.claude/skills/design-system-kits/references/components/uploader.md +0 -48
  125. package/.claude/skills/design-system-kits/references/design-spec-structure.md +0 -356
  126. package/.claude/skills/design-system-kits/references/design-spec-to-code.md +0 -596
  127. package/.claude/skills/design-system-kits/references/navigation/bottom-tab.md +0 -155
  128. package/.claude/skills/design-system-kits/references/navigation/bottomsheet.md +0 -94
  129. package/.claude/skills/design-system-kits/references/navigation/modal.md +0 -125
  130. package/.claude/skills/design-system-kits/references/navigation/navigation-options.md +0 -430
  131. package/.claude/skills/design-system-kits/references/navigation/navigator.md +0 -177
  132. package/.claude/skills/design-system-kits/references/navigation/setup.md +0 -94
  133. package/.claude/skills/design-system-kits/references/navigation/stack.md +0 -152
  134. package/.claude/skills/design-system-kits/references/screen-layout-rule.md +0 -125
  135. package/.claude/skills/design-system-kits/references/tokens/colors.md +0 -183
  136. package/.claude/skills/design-system-kits/references/tokens/spacing-radius.md +0 -45
  137. package/.claude/skills/design-system-kits/references/tokens/theme.md +0 -97
  138. package/.claude/skills/design-system-kits/references/tokens/typography.md +0 -105
  139. package/.claude/skills/vibe-design/SKILL.md +0 -306
@@ -1,117 +0,0 @@
1
- # Carousel
2
-
3
- > Horizontal scrollable content container — snap-to-item behavior for banners, galleries, onboarding. Pairs with Pagination.
4
-
5
- **Package:** `@momo-kits/carousel`
6
- **Platform:** RN ✅ | Compose ❌ (use HorizontalPager)
7
- **Completeness:** need_update — thiếu Figma
8
- **Figma node:** [VERIFY]
9
-
10
- ---
11
-
12
- ## Props
13
-
14
- | Prop | Type | Values | Default | Description |
15
- |------|------|--------|---------|-------------|
16
- | `items` | array | — | required | Data array for carousel items |
17
- | `renderItem` | function | — | required | Render function per item [VERIFY] |
18
- | `autoPlay` | boolean | `true` \| `false` | `false` | Auto-advance between items |
19
- | `autoPlayInterval` | number | milliseconds | `3000` | Interval between auto-advances [VERIFY] |
20
- | `loop` | boolean | `true` \| `false` | `false` | Seamless wrap from last → first item [VERIFY] |
21
- | `showPagination` | boolean | `true` \| `false` | `true` | Show PaginationDot below carousel [VERIFY] |
22
- | `paginationType` | string | `"dot"` \| `"scroll"` | `"dot"` | Pagination variant (see Pagination component) [VERIFY] |
23
- | `peek` | number | dp | `0` | Amount of adjacent item visible at edges (16-24dp recommended) [VERIFY] |
24
- | `onChange` | function | — | — | Callback khi current item changes. `"onChange": "setState://currentBanner"` |
25
-
26
- ---
27
-
28
- ## States
29
-
30
- | State | Appearance |
31
- |-------|-----------|
32
- | **Idle** | Current item fully visible, pagination updated |
33
- | **Scrolling** | Items move horizontally, pagination animates |
34
- | **Auto-playing** | Items advance automatically at interval |
35
- | **Paused** | Auto-play paused due to user touch interaction |
36
-
37
- Auto-play pauses on user interaction, resumes after release.
38
-
39
- ---
40
-
41
- ## Variant-to-Context Map
42
-
43
- | Context | Khi nào dùng | Tránh khi | Ví dụ trong MoMo |
44
- |---------|-------------|-----------|-------------------|
45
- | **Promotional banners** | Featured content at screen top | Critical content every user must see | Banner khuyến mãi trên Home |
46
- | **Image gallery** | Browse product/service images | Long lists → dùng FlatList | Ảnh merchant, ảnh sản phẩm |
47
- | **Onboarding** | Step-by-step intro slides | Navigation between sections → dùng TabView | Welcome slides, feature intro |
48
-
49
- ---
50
-
51
- ## SSR Pattern
52
-
53
- ### Banner Carousel with Pagination
54
- ```json
55
- {
56
- "id": "banner_section",
57
- "type": "section",
58
- "children": [
59
- {
60
- "component": "Carousel",
61
- "props": {
62
- "items": "{{data.banners}}",
63
- "autoPlay": true,
64
- "autoPlayInterval": 5000,
65
- "loop": true,
66
- "showPagination": true,
67
- "paginationType": "dot",
68
- "peek": 0
69
- },
70
- "onChange": "setState://currentBanner"
71
- }
72
- ]
73
- }
74
- ```
75
-
76
- ### Image Gallery with Scroll Pagination
77
- ```json
78
- {
79
- "component": "Carousel",
80
- "props": {
81
- "items": "{{data.merchantImages}}",
82
- "autoPlay": false,
83
- "showPagination": true,
84
- "paginationType": "scroll",
85
- "peek": 16
86
- }
87
- }
88
- ```
89
-
90
- ---
91
-
92
- ## Accessibility
93
-
94
- - Items navigable via swipe gestures on assistive technology.
95
- - Auto-play MUST pause khi screen reader active.
96
- - Each item: descriptive accessible label.
97
- - Announce current position: "Mục 2 trong 5".
98
- - Provide way to pause auto-play without specific gesture.
99
-
100
- ---
101
-
102
- ## Usage Guidelines
103
-
104
- ### Do
105
- - Dùng cho promotional banners, image galleries, onboarding slides.
106
- - Always include pagination indicators.
107
- - Peek adjacent items → signal scrollability.
108
- - Keep 3-8 items — manageable count.
109
- - Auto-play interval ≥3 seconds.
110
-
111
- ### Don't
112
- - Không dùng cho long lists → dùng FlatList / LazyColumn.
113
- - Không dùng cho section navigation → dùng **TabView** / **BottomTab**.
114
- - Không set autoPlayInterval <3000ms — user cần time to read.
115
- - Không hide pagination khi >1 item.
116
- - Không nest carousels — scroll conflict.
117
- - Không rely on carousel cho critical content — items may be missed.
@@ -1,98 +0,0 @@
1
- # CheckBox
2
-
3
- > Multi-selection control — chọn nhiều options hoặc indicate agreement. Supports indeterminate state.
4
-
5
- **Package:** `@momo-kits/foundation`
6
- **Platform:** RN ✅ | Compose ✅
7
- **Completeness:** need_update — thiếu Figma
8
- **Figma node:** [VERIFY]
9
-
10
- ---
11
-
12
- ## Props
13
-
14
- | Prop | Type | Values | Default | Description |
15
- |------|------|--------|---------|-------------|
16
- | `checked` | boolean | `true` \| `false` | `false` | Checked state |
17
- | `indeterminate` | boolean | `true` \| `false` | `false` | Partial selection state (select-all parent) [VERIFY] |
18
- | `label` | string | — | — | Text label bên phải checkbox |
19
- | `disabled` | boolean | `true` \| `false` | `false` | Non-interactive state |
20
- | `onChange` | function | — | — | Callback khi toggle. `"onChange": "setState://option"` |
21
-
22
- ---
23
-
24
- ## States
25
-
26
- | State | Box Appearance | Icon | Label Color | Interactive |
27
- |-------|---------------|------|------------|-------------|
28
- | **Unchecked** | `Colors.black_04` border, no fill | none | `Colors.black_17` | true |
29
- | **Checked** | `Colors.pink_03` fill | white checkmark | `Colors.black_17` | true |
30
- | **Indeterminate** | `Colors.pink_03` fill | white minus | `Colors.black_17` | true |
31
- | **Disabled Unchecked** | `Colors.black_08` border, no fill | none | `Colors.black_08` | false |
32
- | **Disabled Checked** | `Colors.black_08` fill | white checkmark | `Colors.black_08` | false |
33
-
34
- ---
35
-
36
- ## Variant-to-Context Map
37
-
38
- | Context | Khi nào dùng | Tránh khi | Ví dụ trong MoMo |
39
- |---------|-------------|-----------|-------------------|
40
- | **Multi-select** | Chọn nhiều options từ list | Chọn 1 exclusive → dùng Radio | Chọn nhiều dịch vụ, filter multi-category |
41
- | **Agreement** | Consent/terms checkbox | — | "Tôi đồng ý điều khoản" trên form |
42
- | **Select all** | Parent checkbox cho group (indeterminate khi partial) | — | "Chọn tất cả" trên danh sách |
43
-
44
- ---
45
-
46
- ## SSR Pattern
47
-
48
- ### Agreement Checkbox
49
- ```json
50
- {
51
- "component": "CheckBox",
52
- "props": {
53
- "checked": "{{state.agreedToTerms}}",
54
- "label": "Tôi đồng ý với Điều khoản sử dụng"
55
- },
56
- "onChange": "setState://agreedToTerms"
57
- }
58
- ```
59
-
60
- ### Multi-select List
61
- ```json
62
- {
63
- "id": "service_options",
64
- "type": "section",
65
- "forEach": "{{data.services}}",
66
- "render": {
67
- "component": "CheckBox",
68
- "props": {
69
- "checked": "{{item.selected}}",
70
- "label": "{{item.name}}"
71
- },
72
- "onChange": "setState://toggleService={{item.id}}"
73
- }
74
- }
75
- ```
76
-
77
- ---
78
-
79
- ## Accessibility
80
-
81
- - Screen readers announce: label, state (checked/unchecked/indeterminate), role (checkbox).
82
- - Entire row (box + label) tappable.
83
- - State changes announce immediately.
84
-
85
- ---
86
-
87
- ## Usage Guidelines
88
-
89
- ### Do
90
- - Dùng cho selecting multiple options từ list.
91
- - Dùng cho agreement/consent checkboxes.
92
- - Dùng indeterminate cho "select all" parent.
93
- - Luôn provide visible label.
94
-
95
- ### Don't
96
- - Không dùng cho single on/off toggle → dùng **Switch**.
97
- - Không dùng cho mutually exclusive choices → dùng **Radio**.
98
- - Không dùng cho filter controls trong toolbar → dùng **Chip**.
@@ -1,146 +0,0 @@
1
- # Chip
2
-
3
- > Interactive filter/selection pill — toggle giữa selected/unselected khi tap.
4
-
5
- **Package:** `@momo-kits/chip`
6
- **Platform:** RN ✅ | Compose ✅
7
- **Completeness:** need_update — thiếu Figma
8
- **Figma node:** [VERIFY]
9
-
10
- ---
11
-
12
- ## Props
13
-
14
- | Prop | Type | Values | Default | Description |
15
- |------|------|--------|---------|-------------|
16
- | `label` | string | — | required | Display text. 1-3 words |
17
- | `size` | string | `"small"` \| `"large"` | `"small"` | Chip size |
18
- | `selected` | boolean | `true` \| `false` | `false` | Selection state |
19
- | `disabled` | boolean | `true` \| `false` | `false` | Non-interactive state |
20
- | `leftIcon` | string | icon name | — | Optional icon trước label |
21
- | `rightIcon` | string | icon name \| `"close"` | — | Optional icon sau label. `"close"` cho removable chip |
22
- | `onPress` | function | — | — | Tap handler — toggle selected state |
23
- | `onPressRightIcon` | function | — | — | Right icon tap — remove/deselect [VERIFY] |
24
-
25
- > **Lưu ý cho ui-composer:** Chip dùng package riêng `@momo-kits/chip`, không nằm trong `@momo-kits/foundation`.
26
-
27
- ---
28
-
29
- ## Variants
30
-
31
- | Variant | Background | Text Color | Icon Color | Usage |
32
- |---------|-----------|-----------|-----------|-------|
33
- | **Unselected** | `Colors.black_04` | `Colors.black_17` | `Colors.black_12` | Default resting state |
34
- | **Selected** | `Colors.pink_09` | `Colors.pink_03` | `Colors.pink_03` | Active / chosen state |
35
-
36
- ---
37
-
38
- ## States
39
-
40
- | State | Background | Text Color | Icon Color | Opacity | Interactive |
41
- |-------|-----------|-----------|-----------|---------|-------------|
42
- | **Unselected** | `Colors.black_04` | `Colors.black_17` | `Colors.black_12` | 1 | true |
43
- | **Selected** | `Colors.pink_09` | `Colors.pink_03` | `Colors.pink_03` | 1 | true |
44
- | **Pressed** | same as current | same as current | same as current | 0.8 | true |
45
- | **Disabled** | `Colors.black_04` | `Colors.black_08` | `Colors.black_08` | 0.5 | false |
46
-
47
- Transition giữa unselected ↔ selected là immediate (no animation).
48
-
49
- ---
50
-
51
- ## Variant-to-Context Map
52
-
53
- | Variant | Khi nào dùng | Tránh khi | Ví dụ trong MoMo |
54
- |---------|-------------|-----------|-------------------|
55
- | Unselected (default) | Chip chưa được chọn trong filter group | Chỉ có 1 chip đơn lẻ — không có group | Filter dịch vụ trên màn hình tìm kiếm (Tất cả / Chuyển tiền / Thanh toán) |
56
- | Selected | User đã chọn — active filter đang apply | Không có toggle behavior — dùng Tag | Filter "Chuyển tiền" đang active trong lịch sử GD |
57
- | Removable (rightIcon=close) | User remove selection bằng tap X | Label dài >3 từ — chip bị stretch | Địa chỉ đã chọn trong form giao hàng, tags đã pick |
58
-
59
- ---
60
-
61
- ## SSR Pattern
62
-
63
- ### Horizontal Filter Bar
64
- ```json
65
- {
66
- "id": "filter_chips",
67
- "type": "row",
68
- "scrollable": true,
69
- "spacing": "Spacing.XS",
70
- "forEach": "{{data.filterOptions}}",
71
- "render": {
72
- "component": "Chip",
73
- "props": {
74
- "label": "{{item.label}}",
75
- "size": "small",
76
- "selected": "{{state.selectedFilter == $index}}"
77
- },
78
- "onPress": "setState://selectedFilter=$index"
79
- }
80
- }
81
- ```
82
-
83
- ### Multi-select Wrap Group
84
- ```json
85
- {
86
- "id": "category_chips",
87
- "type": "wrap",
88
- "forEach": "{{data.categories}}",
89
- "render": {
90
- "component": "Chip",
91
- "props": {
92
- "label": "{{item.name}}",
93
- "size": "large",
94
- "selected": "{{item.selected}}",
95
- "leftIcon": "{{item.icon}}"
96
- },
97
- "onPress": "setState://toggleCategory={{item.id}}"
98
- }
99
- }
100
- ```
101
-
102
- ### Removable Tags
103
- ```json
104
- {
105
- "id": "selected_tags",
106
- "type": "wrap",
107
- "forEach": "{{state.selectedItems}}",
108
- "render": {
109
- "component": "Chip",
110
- "props": {
111
- "label": "{{item.name}}",
112
- "size": "small",
113
- "selected": true,
114
- "rightIcon": "close"
115
- },
116
- "onPressRightIcon": "setState://removeItem={{item.id}}"
117
- }
118
- }
119
- ```
120
-
121
- ---
122
-
123
- ## Accessibility
124
-
125
- - Mỗi chip cần accessible label gồm: text + current state (selected/not).
126
- - Role: `"button"` hoặc `"toggle"` — screen readers phải announce interactive nature.
127
- - Khi selected state thay đổi: announce "Selected" hoặc "Deselected".
128
- - Trong chip group: navigable as a group với clear boundaries.
129
-
130
- ---
131
-
132
- ## Usage Guidelines
133
-
134
- ### Do
135
- - Dùng Chip để filter content theo category, type, attribute.
136
- - Dùng cho multi-select — user pick từ set of options.
137
- - Dùng cho removable selections (dismiss bằng X icon).
138
- - Giữ label ngắn — 1-3 words.
139
- - Group related chips trong horizontal scrollable row hoặc wrapping layout.
140
-
141
- ### Don't
142
- - Không dùng cho static status display — dùng **Tag**.
143
- - Không dùng cho navigation actions — dùng **Button**.
144
- - Không dùng cho notification counts — dùng **Badge**.
145
- - Không nest interactive elements bên trong Chip.
146
- - Không dùng text label dài gây stretch chip.
@@ -1,120 +0,0 @@
1
- # Collapse
2
-
3
- > Expandable/collapsible content section — header + chevron toggle to show/hide content. Progressive disclosure.
4
-
5
- **Package:** `@momo-kits/collapse`
6
- **Platform:** RN ✅ | Compose ❌ (build with AnimatedVisibility)
7
- **Completeness:** need_update — thiếu Figma
8
- **Figma node:** [VERIFY]
9
-
10
- ---
11
-
12
- ## Props
13
-
14
- | Prop | Type | Values | Default | Description |
15
- |------|------|--------|---------|-------------|
16
- | `title` | string | — | required | Header text label |
17
- | `expanded` | boolean | `true` \| `false` | `false` | Controlled expand/collapse state |
18
- | `defaultExpanded` | boolean | `true` \| `false` | `false` | Initial state khi uncontrolled [VERIFY] |
19
- | `disabled` | boolean | `true` \| `false` | `false` | Non-interactive — header not tappable |
20
- | `showDivider` | boolean | `true` \| `false` | `false` | Show Divider between header and content [VERIFY] |
21
- | `children` | element | — | required | Content to show/hide — any components |
22
- | `onChange` | function | — | — | Callback khi toggle. `"onChange": "setState://expanded"` |
23
-
24
- ---
25
-
26
- ## States
27
-
28
- | State | Header | Chevron | Content | Interactive |
29
- |-------|--------|---------|---------|-------------|
30
- | **Collapsed** | `Colors.black_17` text | Down (0°) | Hidden | true |
31
- | **Expanded** | `Colors.black_17` text | Up (180°) | Visible | true |
32
- | **Pressed** | Opacity 0.8 | — | — | true |
33
- | **Disabled** | `Colors.black_08` text | `Colors.black_08` | Per current state | false |
34
-
35
- Chevron rotates smoothly (180°) on toggle. Content animates with height transition.
36
-
37
- ---
38
-
39
- ## Variant-to-Context Map
40
-
41
- | Context | Khi nào dùng | Tránh khi | Ví dụ trong MoMo |
42
- |---------|-------------|-----------|-------------------|
43
- | **FAQ / Help** | Q&A sections, supplementary info | Primary content → show directly | FAQ trong Help center |
44
- | **Advanced settings** | Secondary options user rarely needs | Critical settings → show always | Cài đặt nâng cao, tùy chọn bổ sung |
45
- | **Accordion** | Multiple collapse sections, one open at a time | Independent sections | Chi tiết giao dịch, điều khoản |
46
-
47
- ---
48
-
49
- ## SSR Pattern
50
-
51
- ### FAQ Section
52
- ```json
53
- {
54
- "id": "faq_section",
55
- "type": "section",
56
- "forEach": "{{data.faqs}}",
57
- "render": {
58
- "component": "Collapse",
59
- "props": {
60
- "title": "{{item.question}}",
61
- "expanded": false
62
- },
63
- "children": [
64
- {
65
- "component": "Text",
66
- "props": {
67
- "content": "{{item.answer}}",
68
- "typography": "body_default_regular"
69
- }
70
- }
71
- ]
72
- }
73
- }
74
- ```
75
-
76
- ### Transaction Details Accordion
77
- ```json
78
- {
79
- "component": "Collapse",
80
- "props": {
81
- "title": "Chi tiết giao dịch",
82
- "showDivider": true
83
- },
84
- "children": [
85
- {
86
- "component": "Text",
87
- "props": {
88
- "content": "{{data.transactionDetails}}",
89
- "typography": "body_s_regular"
90
- }
91
- }
92
- ]
93
- }
94
- ```
95
-
96
- ---
97
-
98
- ## Accessibility
99
-
100
- - Header role: button. Announce title + state ("Chi tiết giao dịch, collapsed").
101
- - Content hidden from accessibility tree khi collapsed.
102
- - Full header row is tap target, not just chevron.
103
- - State change announced on toggle.
104
-
105
- ---
106
-
107
- ## Usage Guidelines
108
-
109
- ### Do
110
- - Dùng cho secondary/supplementary content — FAQ, advanced settings, details.
111
- - Clear descriptive title — user knows what content is hidden.
112
- - Start collapsed by default unless content is expected to be read immediately.
113
- - Divider khi content is visually dense.
114
-
115
- ### Don't
116
- - Không hide primary/critical content trong collapse.
117
- - Không dùng cho navigation → dùng proper nav patterns.
118
- - Không nest collapse deeply (collapse trong collapse) — confusing UX.
119
- - Không dùng khi content chỉ 1-2 lines — show directly instead.
120
- - Không remove chevron icon — user cần visual indicator.
@@ -1,119 +0,0 @@
1
- # DatePicker
2
-
3
- > Calendar-based date selection — single date, date range, or multiple dates. Month grid (RN) or format-driven (Compose).
4
-
5
- **Package:** `@momo-kits/date-picker` (RN) / built-in (Compose)
6
- **Platform:** RN ✅ | Compose ✅
7
- **Completeness:** need_update — thiếu Figma
8
- **Figma node:** [VERIFY]
9
-
10
- ---
11
-
12
- ## Variant Axes
13
-
14
- | Axis | Options | Default |
15
- |------|---------|---------|
16
- | **Mode** | `single` · `range` · `multiple` | `single` |
17
- | **Platform** | RN (calendar grid) · Compose (format-driven DD-MM-YYYY) | per platform |
18
-
19
- ---
20
-
21
- ## Props
22
-
23
- | Prop | Type | Values | Default | Description |
24
- |------|------|--------|---------|-------------|
25
- | `mode` | string | `"single"` \| `"range"` \| `"multiple"` | `"single"` | Selection mode |
26
- | `value` | varies | Date (single), `{ start, end }` (range), `[Date]` (multiple) | — | Current selected value |
27
- | `minDate` | date | — | — | Earliest selectable date. Dates before → disabled |
28
- | `maxDate` | date | — | — | Latest selectable date. Dates after → disabled |
29
- | `format` | string | date format pattern | `"DD-MM-YYYY"` | Display format (Compose) [VERIFY] |
30
- | `showTimePicker` | boolean | `true` \| `false` | `false` | Include time selection (Compose: HH:mm) [VERIFY] |
31
- | `onChange` | function | — | — | Callback khi date selected. `"onChange": "setState://selectedDate"` |
32
-
33
- ---
34
-
35
- ## Day Cell States
36
-
37
- | State | Background | Text Color | Description |
38
- |-------|-----------|-----------|-------------|
39
- | **Default** | Transparent | `Colors.black_17` | Normal selectable date |
40
- | **Today** | Transparent | `Colors.pink_03` | Current date highlight |
41
- | **Selected** | `Colors.pink_03` circle | `Colors.white` | User-chosen date |
42
- | **Disabled** | Transparent | `Colors.black_08` | Outside min/max range |
43
- | **Range start** | `Colors.pink_03` (left-rounded) | `Colors.white` | First date in range |
44
- | **Range end** | `Colors.pink_03` (right-rounded) | `Colors.white` | Last date in range |
45
- | **In range** | `Colors.pink_09` (light pink) | `Colors.pink_03` | Dates between start/end |
46
- | **Other month** | Transparent | `Colors.black_08` | Adjacent month dates |
47
-
48
- ---
49
-
50
- ## Variant-to-Context Map
51
-
52
- | Mode | Khi nào dùng | Tránh khi | Ví dụ trong MoMo |
53
- |------|-------------|-----------|-------------------|
54
- | **single** | Pick one specific date | Date range needed | Chọn ngày sinh, ngày hẹn |
55
- | **range** | Select start + end date | Single date needed | Lọc lịch sử giao dịch, đặt phòng |
56
- | **multiple** | Select multiple individual dates | Continuous range → dùng range mode | Chọn nhiều ngày nghỉ |
57
-
58
- ---
59
-
60
- ## SSR Pattern
61
-
62
- ### Single Date Selection
63
- ```json
64
- {
65
- "component": "DatePicker",
66
- "props": {
67
- "mode": "single",
68
- "value": "{{state.selectedDate}}",
69
- "minDate": "{{data.today}}",
70
- "maxDate": "{{data.maxBookingDate}}"
71
- },
72
- "onChange": "setState://selectedDate"
73
- }
74
- ```
75
-
76
- ### Date Range Filter
77
- ```json
78
- {
79
- "component": "DatePicker",
80
- "props": {
81
- "mode": "range",
82
- "value": {
83
- "start": "{{state.startDate}}",
84
- "end": "{{state.endDate}}"
85
- },
86
- "minDate": "{{data.earliestTransaction}}"
87
- },
88
- "onChange": "setState://dateRange"
89
- }
90
- ```
91
-
92
- ---
93
-
94
- ## Accessibility
95
-
96
- - Each day cell announces full date: "26 tháng 3 năm 2026".
97
- - Selected dates announce selected state.
98
- - Disabled dates: announced as disabled, not focusable/tappable.
99
- - Navigation arrows: "Tháng trước", "Tháng sau".
100
- - Range mode: announce context "Ngày bắt đầu: 20 tháng 3. Ngày kết thúc: 26 tháng 3."
101
- - Today distinguishable: "Hôm nay, 20 tháng 3 năm 2026".
102
-
103
- ---
104
-
105
- ## Usage Guidelines
106
-
107
- ### Do
108
- - Dùng cho date selection trong forms, booking, scheduling.
109
- - Highlight today cho reference point.
110
- - Disable dates outside valid range.
111
- - Show selected date in text field bên ngoài calendar cho confirmation.
112
- - Range mode cho check-in/check-out, date filters.
113
-
114
- ### Don't
115
- - Không dùng cho time-only selection → dùng dedicated time picker.
116
- - Không allow selection of disabled dates.
117
- - Không show quá nhiều months — month-by-month navigation.
118
- - Không hide current month/year — user cần context.
119
- - Không dùng cho relative dates ("7 ngày gần nhất") → dùng **Chip** preset options.
@@ -1,84 +0,0 @@
1
- # Divider
2
-
3
- > Horizontal line separator — phân chia content sections hoặc list items.
4
-
5
- **Package:** `@momo-kits/foundation`
6
- **Platform:** RN ✅ | Compose ✅
7
- **Completeness:** done
8
- **Figma node:** [VERIFY]
9
-
10
- ---
11
-
12
- ## Props
13
-
14
- | Prop | Type | Values | Default | Description |
15
- |------|------|--------|---------|-------------|
16
- | `color` | string | `Colors.*` token | `"Colors.black_04"` | Line color [VERIFY] |
17
-
18
- > Divider là component đơn giản nhất — chỉ 1 prop optional. Full width of parent container by default.
19
-
20
- ---
21
-
22
- ## States
23
-
24
- | State | Color | Description |
25
- |-------|-------|-------------|
26
- | **Default** | `Colors.black_04` | Static, non-interactive |
27
-
28
- Divider chỉ có 1 state. Không interactive.
29
-
30
- ---
31
-
32
- ## Variant-to-Context Map
33
-
34
- | Context | Khi nào dùng | Tránh khi | Ví dụ trong MoMo |
35
- |---------|-------------|-----------|-------------------|
36
- | **List separator** | Phân cách items trong vertical list | Spacing đủ clear → không cần divider | Danh sách giao dịch, contacts list |
37
- | **Section boundary** | Phân chia content sections | Chỉ có 1 section → không cần | Phân chia "Thông tin" và "Số tiền" trong confirm screen |
38
-
39
- ---
40
-
41
- ## SSR Pattern
42
-
43
- ### List with Dividers
44
- ```json
45
- {
46
- "id": "transaction_list",
47
- "type": "section",
48
- "forEach": "{{data.transactions}}",
49
- "render": [
50
- {
51
- "component": "ListItem",
52
- "props": {
53
- "title": "{{item.title}}",
54
- "rightText": "{{item.amount}}"
55
- }
56
- },
57
- {
58
- "component": "Divider",
59
- "props": {}
60
- }
61
- ]
62
- }
63
- ```
64
-
65
- ---
66
-
67
- ## Accessibility
68
-
69
- - Divider là decorative — ẩn khỏi screen readers.
70
- - Không dùng divider để convey meaning — chỉ visual separator.
71
-
72
- ---
73
-
74
- ## Usage Guidelines
75
-
76
- ### Do
77
- - Dùng để separate list items trong vertical list.
78
- - Dùng sparingly — rely on spacing trước.
79
- - Parent layout control spacing above/below divider.
80
-
81
- ### Don't
82
- - Không dùng cho purely decorative khi spacing đủ.
83
- - Không stack multiple dividers.
84
- - Không đặt divider ở top/bottom container khi không cần separation.