@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.
- package/compose/build.gradle.kts +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +15 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +15 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +1 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +4 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +11 -9
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +56 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +167 -0
- package/example/ios/Example.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/Example.xcscheme +32 -0
- package/example/ios/Example.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/WorkspaceSettings.xcsettings +16 -0
- package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +6 -0
- package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +5 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/Pods-Example.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SDWebImage.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SkeletonUI.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/lottie-ios-LottiePrivacyInfo.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/lottie-ios.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +60 -0
- package/gradle.properties +1 -1
- package/local.properties +2 -2
- package/package.json +1 -1
- package/.claude/settings.local.json +0 -11
- package/.claude/skills/design-system/SKILL.md +0 -88
- package/.claude/skills/design-system/references/components/avatar.md +0 -134
- package/.claude/skills/design-system/references/components/badge.md +0 -127
- package/.claude/skills/design-system/references/components/bottom-tab.md +0 -177
- package/.claude/skills/design-system/references/components/bottomsheet.md +0 -170
- package/.claude/skills/design-system/references/components/button.md +0 -206
- package/.claude/skills/design-system/references/components/carousel.md +0 -117
- package/.claude/skills/design-system/references/components/checkbox.md +0 -98
- package/.claude/skills/design-system/references/components/chip.md +0 -146
- package/.claude/skills/design-system/references/components/collapse.md +0 -120
- package/.claude/skills/design-system/references/components/date-picker.md +0 -119
- package/.claude/skills/design-system/references/components/divider.md +0 -84
- package/.claude/skills/design-system/references/components/icon.md +0 -130
- package/.claude/skills/design-system/references/components/image.md +0 -81
- package/.claude/skills/design-system/references/components/information.md +0 -107
- package/.claude/skills/design-system/references/components/input-dropdown.md +0 -138
- package/.claude/skills/design-system/references/components/input-money.md +0 -157
- package/.claude/skills/design-system/references/components/input-otp.md +0 -132
- package/.claude/skills/design-system/references/components/input-phone-number.md +0 -140
- package/.claude/skills/design-system/references/components/input-search.md +0 -124
- package/.claude/skills/design-system/references/components/input-text-area.md +0 -133
- package/.claude/skills/design-system/references/components/input.md +0 -152
- package/.claude/skills/design-system/references/components/loader.md +0 -87
- package/.claude/skills/design-system/references/components/pagination.md +0 -105
- package/.claude/skills/design-system/references/components/popup-notify.md +0 -128
- package/.claude/skills/design-system/references/components/progress-info.md +0 -114
- package/.claude/skills/design-system/references/components/radio.md +0 -86
- package/.claude/skills/design-system/references/components/rating.md +0 -126
- package/.claude/skills/design-system/references/components/skeleton.md +0 -120
- package/.claude/skills/design-system/references/components/slider.md +0 -141
- package/.claude/skills/design-system/references/components/snackbar.md +0 -97
- package/.claude/skills/design-system/references/components/stepper.md +0 -100
- package/.claude/skills/design-system/references/components/steps.md +0 -91
- package/.claude/skills/design-system/references/components/suggest-action.md +0 -95
- package/.claude/skills/design-system/references/components/swipe.md +0 -121
- package/.claude/skills/design-system/references/components/switch.md +0 -98
- package/.claude/skills/design-system/references/components/tab-view.md +0 -120
- package/.claude/skills/design-system/references/components/tag.md +0 -118
- package/.claude/skills/design-system/references/components/text.md +0 -151
- package/.claude/skills/design-system/references/components/toast.md +0 -99
- package/.claude/skills/design-system/references/components/tooltip.md +0 -138
- package/.claude/skills/design-system/references/components/top-nav-miniapp.md +0 -94
- package/.claude/skills/design-system/references/components/top-nav.md +0 -226
- package/.claude/skills/design-system/references/components/uploader.md +0 -115
- package/.claude/skills/design-system/references/navigation/bottom-tab.md +0 -131
- package/.claude/skills/design-system/references/navigation/bottomsheet.md +0 -161
- package/.claude/skills/design-system/references/navigation/modal.md +0 -133
- package/.claude/skills/design-system/references/navigation/navigation-options.md +0 -225
- package/.claude/skills/design-system/references/navigation/navigator.md +0 -111
- package/.claude/skills/design-system/references/navigation/setup.md +0 -134
- package/.claude/skills/design-system/references/navigation/stack.md +0 -128
- package/.claude/skills/design-system/references/spec-convention.md +0 -80
- package/.claude/skills/design-system/references/tokens/colors.md +0 -131
- package/.claude/skills/design-system/references/tokens/spacing-radius.md +0 -144
- package/.claude/skills/design-system/references/tokens/theme.md +0 -125
- package/.claude/skills/design-system/references/tokens/typography.md +0 -135
- package/.claude/skills/design-system-kits/SKILL.md +0 -102
- package/.claude/skills/design-system-kits/references/code-convention.md +0 -118
- package/.claude/skills/design-system-kits/references/components/avatar.md +0 -45
- package/.claude/skills/design-system-kits/references/components/badge.md +0 -27
- package/.claude/skills/design-system-kits/references/components/button.md +0 -65
- package/.claude/skills/design-system-kits/references/components/carousel.md +0 -51
- package/.claude/skills/design-system-kits/references/components/checkbox.md +0 -39
- package/.claude/skills/design-system-kits/references/components/chip.md +0 -54
- package/.claude/skills/design-system-kits/references/components/collapse.md +0 -63
- package/.claude/skills/design-system-kits/references/components/date-picker.md +0 -36
- package/.claude/skills/design-system-kits/references/components/divider.md +0 -21
- package/.claude/skills/design-system-kits/references/components/icon.md +0 -382
- package/.claude/skills/design-system-kits/references/components/image.md +0 -62
- package/.claude/skills/design-system-kits/references/components/information.md +0 -61
- package/.claude/skills/design-system-kits/references/components/input-dropdown.md +0 -92
- package/.claude/skills/design-system-kits/references/components/input-money.md +0 -128
- package/.claude/skills/design-system-kits/references/components/input-otp.md +0 -85
- package/.claude/skills/design-system-kits/references/components/input-phone-number.md +0 -96
- package/.claude/skills/design-system-kits/references/components/input-search.md +0 -127
- package/.claude/skills/design-system-kits/references/components/input-text-area.md +0 -100
- package/.claude/skills/design-system-kits/references/components/input.md +0 -126
- package/.claude/skills/design-system-kits/references/components/loader.md +0 -41
- package/.claude/skills/design-system-kits/references/components/pagination.md +0 -47
- package/.claude/skills/design-system-kits/references/components/popup-notify.md +0 -69
- package/.claude/skills/design-system-kits/references/components/popup-promotion.md +0 -35
- package/.claude/skills/design-system-kits/references/components/progress-info.md +0 -55
- package/.claude/skills/design-system-kits/references/components/radio.md +0 -42
- package/.claude/skills/design-system-kits/references/components/rating.md +0 -36
- package/.claude/skills/design-system-kits/references/components/skeleton.md +0 -25
- package/.claude/skills/design-system-kits/references/components/slider.md +0 -53
- package/.claude/skills/design-system-kits/references/components/snackbar.md +0 -52
- package/.claude/skills/design-system-kits/references/components/stepper.md +0 -46
- package/.claude/skills/design-system-kits/references/components/steps.md +0 -57
- package/.claude/skills/design-system-kits/references/components/suggest-action.md +0 -44
- package/.claude/skills/design-system-kits/references/components/swipe.md +0 -44
- package/.claude/skills/design-system-kits/references/components/switch.md +0 -43
- package/.claude/skills/design-system-kits/references/components/tab-view.md +0 -56
- package/.claude/skills/design-system-kits/references/components/tag.md +0 -50
- package/.claude/skills/design-system-kits/references/components/text.md +0 -56
- package/.claude/skills/design-system-kits/references/components/toast.md +0 -51
- package/.claude/skills/design-system-kits/references/components/tooltip.md +0 -95
- package/.claude/skills/design-system-kits/references/components/uploader.md +0 -48
- package/.claude/skills/design-system-kits/references/design-spec-structure.md +0 -356
- package/.claude/skills/design-system-kits/references/design-spec-to-code.md +0 -596
- package/.claude/skills/design-system-kits/references/navigation/bottom-tab.md +0 -155
- package/.claude/skills/design-system-kits/references/navigation/bottomsheet.md +0 -94
- package/.claude/skills/design-system-kits/references/navigation/modal.md +0 -125
- package/.claude/skills/design-system-kits/references/navigation/navigation-options.md +0 -430
- package/.claude/skills/design-system-kits/references/navigation/navigator.md +0 -177
- package/.claude/skills/design-system-kits/references/navigation/setup.md +0 -94
- package/.claude/skills/design-system-kits/references/navigation/stack.md +0 -152
- package/.claude/skills/design-system-kits/references/screen-layout-rule.md +0 -125
- package/.claude/skills/design-system-kits/references/tokens/colors.md +0 -183
- package/.claude/skills/design-system-kits/references/tokens/spacing-radius.md +0 -45
- package/.claude/skills/design-system-kits/references/tokens/theme.md +0 -97
- package/.claude/skills/design-system-kits/references/tokens/typography.md +0 -105
- package/.claude/skills/vibe-design/SKILL.md +0 -306
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# Switch
|
|
2
|
-
|
|
3
|
-
## React Native
|
|
4
|
-
|
|
5
|
-
```tsx
|
|
6
|
-
import { Switch } from '@momo-kits/foundation';
|
|
7
|
-
|
|
8
|
-
<Switch
|
|
9
|
-
value={enabled} // current toggle state (default: false)
|
|
10
|
-
onChange={(enabled) => setEnabled(enabled)} // called with new boolean value
|
|
11
|
-
disabled={false} // disable the switch (default: false)
|
|
12
|
-
style={{}} // optional custom styles
|
|
13
|
-
accessibilityLabel="toggle_notifications" // accessibility label
|
|
14
|
-
params={{ field: 'notifications' }} // auto tracking params
|
|
15
|
-
/>
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Compose
|
|
19
|
-
|
|
20
|
-
```kotlin
|
|
21
|
-
import vn.momo.kits.components.Switch
|
|
22
|
-
|
|
23
|
-
Switch(
|
|
24
|
-
value = isEnabled, // current toggle state (default: false)
|
|
25
|
-
onChange = { enabled -> }, // called with new boolean value
|
|
26
|
-
disabled = false, // disable the switch (default: false)
|
|
27
|
-
title = "Notifications", // optional label text
|
|
28
|
-
accessibilityId = "toggle_notifications", // automation ID
|
|
29
|
-
modifier = Modifier, // optional modifier
|
|
30
|
-
)
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Same API naming on both platforms (`value`, `onChange`). Compose adds `title` and `accessibilityId`.
|
|
34
|
-
|
|
35
|
-
## Key Differences
|
|
36
|
-
|
|
37
|
-
| Feature | React Native | Compose |
|
|
38
|
-
|---------|-------------|---------|
|
|
39
|
-
| Value prop | `value` | `value` |
|
|
40
|
-
| Change handler | `onChange` | `onChange` |
|
|
41
|
-
| Label | Not built-in (wrap in `Text`) | `title` param |
|
|
42
|
-
| Automation ID | `accessibilityLabel` | `accessibilityId` |
|
|
43
|
-
| Modifier/Style | `style` prop | `modifier` param |
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# TabView
|
|
2
|
-
|
|
3
|
-
## React Native
|
|
4
|
-
|
|
5
|
-
```tsx
|
|
6
|
-
import { TabView } from '@momo-kits/tab-view';
|
|
7
|
-
|
|
8
|
-
<TabView
|
|
9
|
-
tabs={[
|
|
10
|
-
{ title: 'Tab 1', component: <Tab1 /> },
|
|
11
|
-
{ title: 'Tab 2', icon: '24_info', badgeValue: 3 },
|
|
12
|
-
]}
|
|
13
|
-
scrollable={false}
|
|
14
|
-
type="default"
|
|
15
|
-
initialPage={0}
|
|
16
|
-
onPressTabItem={(index) => {}}
|
|
17
|
-
direction="row"
|
|
18
|
-
fitContent={false}
|
|
19
|
-
/>
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Compose
|
|
23
|
-
|
|
24
|
-
```kotlin
|
|
25
|
-
import vn.momo.kits.components.TabView
|
|
26
|
-
import vn.momo.kits.components.TabViewItem
|
|
27
|
-
import vn.momo.kits.components.TabViewType
|
|
28
|
-
import vn.momo.kits.components.TabViewDirection
|
|
29
|
-
|
|
30
|
-
TabView(
|
|
31
|
-
tabs = listOf(
|
|
32
|
-
TabViewItem(title = "Tab 1", content = { Text("Content 1") }),
|
|
33
|
-
TabViewItem(title = "Tab 2", icon = "24_info", badgeValue = "3", content = { Text("Content 2") }),
|
|
34
|
-
),
|
|
35
|
-
initialPage = 0,
|
|
36
|
-
type = TabViewType.DEFAULT, // DEFAULT | CARD
|
|
37
|
-
scrollable = false,
|
|
38
|
-
fitContent = false,
|
|
39
|
-
selectedColor = null,
|
|
40
|
-
unselectedColor = null,
|
|
41
|
-
direction = TabViewDirection.ROW, // ROW | COLUMN
|
|
42
|
-
userScrollEnabled = true,
|
|
43
|
-
onPressTabItem = { index -> },
|
|
44
|
-
onPageSelected = { index -> },
|
|
45
|
-
)
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Key Differences
|
|
49
|
-
|
|
50
|
-
| Feature | React Native | Compose |
|
|
51
|
-
|---------|-------------|---------|
|
|
52
|
-
| Content | `component` prop | `content` slot |
|
|
53
|
-
| Lazy rendering | Built-in | `mutableStateListOf` tracks visited pages |
|
|
54
|
-
| Indicator animation | Native | `animateDpAsState` (200ms) |
|
|
55
|
-
| Direction | `string` | `TabViewDirection` enum |
|
|
56
|
-
| Type | `string` | `TabViewType` enum |
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# Tag
|
|
2
|
-
|
|
3
|
-
## React Native
|
|
4
|
-
|
|
5
|
-
```tsx
|
|
6
|
-
import { Tag } from '@momo-kits/foundation';
|
|
7
|
-
|
|
8
|
-
<Tag
|
|
9
|
-
label="Active"
|
|
10
|
-
size="large" // 'medium'|'large' (default: 'large')
|
|
11
|
-
color="green" // 'default'|'orange'|'green'|'red'|'blue'|'grey'
|
|
12
|
-
icon="icon_name" // optional left icon
|
|
13
|
-
customColor={Colors.pink_03} // overrides color (use _03 tint recommended)
|
|
14
|
-
accessibilityLabel="tag_active"
|
|
15
|
-
style={{ marginRight: Spacing.S }} // optional custom style
|
|
16
|
-
/>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Compose
|
|
20
|
-
|
|
21
|
-
```kotlin
|
|
22
|
-
import vn.momo.kits.components.Tag
|
|
23
|
-
import vn.momo.kits.components.TagSize
|
|
24
|
-
import vn.momo.kits.components.TagColor
|
|
25
|
-
|
|
26
|
-
Tag(
|
|
27
|
-
label = "Active",
|
|
28
|
-
size = TagSize.Medium, // Large(24f), Medium(18f)
|
|
29
|
-
color = TagColor.Green, // Default, Orange, Green, Red, Blue, Grey
|
|
30
|
-
customColor = Colors.pink_03, // overrides color when provided
|
|
31
|
-
)
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
### TagSize (Compose)
|
|
35
|
-
|
|
36
|
-
| Value | Height |
|
|
37
|
-
|-------|--------|
|
|
38
|
-
| `Large` | 24f |
|
|
39
|
-
| `Medium` | 18f |
|
|
40
|
-
|
|
41
|
-
### TagColor (Compose)
|
|
42
|
-
|
|
43
|
-
| Value | Background | Text |
|
|
44
|
-
|-------|-----------|------|
|
|
45
|
-
| `Default` | black_04 | black_17 |
|
|
46
|
-
| `Orange` | orange_08 | orange_03 |
|
|
47
|
-
| `Green` | green_08 | green_03 |
|
|
48
|
-
| `Red` | red_08 | red_03 |
|
|
49
|
-
| `Blue` | blue_08 | blue_03 |
|
|
50
|
-
| `Grey` | black_04 | black_12 |
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# Text
|
|
2
|
-
|
|
3
|
-
## React Native
|
|
4
|
-
|
|
5
|
-
```tsx
|
|
6
|
-
import { Text } from '@momo-kits/foundation';
|
|
7
|
-
|
|
8
|
-
<Text typography="body_default_regular" color={Colors.black_17} fontFamily="MomoTrustDisplay" maxScaleRate={1.5} style={{}}>Label</Text>
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
### Props
|
|
12
|
-
|
|
13
|
-
Extends `TextProps` (React Native `Text`). Plus:
|
|
14
|
-
|
|
15
|
-
| Prop | Type | Default | Description |
|
|
16
|
-
| -------------- | ---------------------- | ------------------------ | ---------------------- |
|
|
17
|
-
| `typography` | `Typography` | `'body_default_regular'` | Typography token |
|
|
18
|
-
| `color` | `string` | theme text color | Text color |
|
|
19
|
-
| `fontFamily` | `string` | theme font | Custom font family |
|
|
20
|
-
| `maxScaleRate` | `number` | — | Max font scale rate |
|
|
21
|
-
| `style` | `StyleProp<TextStyle>` | — | Additional text styles |
|
|
22
|
-
| `children` | `ReactNode` | — | Text content |
|
|
23
|
-
|
|
24
|
-
## Compose
|
|
25
|
-
|
|
26
|
-
```kotlin
|
|
27
|
-
import vn.momo.kits.components.Text
|
|
28
|
-
import vn.momo.kits.const.Typography
|
|
29
|
-
|
|
30
|
-
Text(text = "Label", style = Typography.bodyDefaultRegular)
|
|
31
|
-
Text(text = "Title", style = Typography.headlineDefaultBold)
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Signature:
|
|
35
|
-
|
|
36
|
-
```kotlin
|
|
37
|
-
@Composable
|
|
38
|
-
fun Text(
|
|
39
|
-
text: String,
|
|
40
|
-
color: Color? = null,
|
|
41
|
-
style: TextStyle = Typography.bodyDefaultRegular,
|
|
42
|
-
modifier: Modifier = Modifier,
|
|
43
|
-
textAlign: TextAlign? = TextAlign.Start,
|
|
44
|
-
maxLines: Int = Int.MAX_VALUE,
|
|
45
|
-
overflow: TextOverflow = TextOverflow.Clip,
|
|
46
|
-
textDecoration: TextDecoration? = null,
|
|
47
|
-
onTextLayout: ((TextLayoutResult) -> Unit)? = null,
|
|
48
|
-
fontFamily: String? = null,
|
|
49
|
-
minLines: Int = 1,
|
|
50
|
-
letterSpacing: TextUnit = TextUnit.Unspecified,
|
|
51
|
-
softWrap: Boolean = true,
|
|
52
|
-
accessibilityId: String? = null,
|
|
53
|
-
)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
> **Note:** NO `token` parameter. Use `style = Typography.xxx` instead.
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# Toast
|
|
2
|
-
|
|
3
|
-
## React Native
|
|
4
|
-
|
|
5
|
-
```tsx
|
|
6
|
-
import { ApplicationContext } from '@momo-kits/foundation';
|
|
7
|
-
|
|
8
|
-
navigator?.maxApi?.showToast({
|
|
9
|
-
title: 'Saved successfully',
|
|
10
|
-
type: 'success', // 'success'|'warning'|'network'|'default'
|
|
11
|
-
undoTitle: "Back",
|
|
12
|
-
onUndoPress: () => { },
|
|
13
|
-
});
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Compose
|
|
17
|
-
|
|
18
|
-
Toast uses the **MaxApi bridge** — no standalone Composable:
|
|
19
|
-
|
|
20
|
-
```kotlin
|
|
21
|
-
import vn.momo.kits.navigation.LocalMaxApi
|
|
22
|
-
|
|
23
|
-
@Composable
|
|
24
|
-
fun ToastExample() {
|
|
25
|
-
val maxApi = LocalMaxApi.current
|
|
26
|
-
|
|
27
|
-
Button(
|
|
28
|
-
title = "Show toast",
|
|
29
|
-
onClick = {
|
|
30
|
-
maxApi?.showToast(
|
|
31
|
-
params = mapOf(
|
|
32
|
-
"title" to "Saved successfully",
|
|
33
|
-
"type" to "success",
|
|
34
|
-
"undoTitle" to "Undo",
|
|
35
|
-
),
|
|
36
|
-
callback = { result -> },
|
|
37
|
-
)
|
|
38
|
-
}
|
|
39
|
-
)
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
> `LocalMaxApi` is `null` outside a properly set up navigation tree. For inline banner notifications use **SnackBar** (`snackbar.md`).
|
|
44
|
-
|
|
45
|
-
## Key Differences
|
|
46
|
-
|
|
47
|
-
| Feature | React Native | Compose |
|
|
48
|
-
|---------|-------------|---------|
|
|
49
|
-
| API | `navigator.maxApi` | `LocalMaxApi.current` |
|
|
50
|
-
| Inline composable | Not available | Not available |
|
|
51
|
-
| Navigation dependency | Required | Required |
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# Tooltip
|
|
2
|
-
|
|
3
|
-
## React Native
|
|
4
|
-
|
|
5
|
-
```tsx
|
|
6
|
-
import { Tooltip } from '@momo-kits/animated-tooltip';
|
|
7
|
-
import type { TooltipRef, TooltipButton } from '@momo-kits/tooltip';
|
|
8
|
-
|
|
9
|
-
const tooltipRef = useRef<TooltipRef>(null);
|
|
10
|
-
|
|
11
|
-
<Tooltip
|
|
12
|
-
ref={tooltipRef}
|
|
13
|
-
placement="top" // 'top' | 'bottom' | 'left' | 'right' (default: 'top')
|
|
14
|
-
align="center" // 'start' | 'center' | 'end' (default: 'center')
|
|
15
|
-
title="Title"
|
|
16
|
-
description="Helpful hint"
|
|
17
|
-
buttons={[
|
|
18
|
-
{ title: 'Action', onPress: () => {} },
|
|
19
|
-
]}
|
|
20
|
-
onVisibleChange={(visible) => {}}
|
|
21
|
-
onPressClose={() => {}}
|
|
22
|
-
accessibilityLabel="info_tooltip"
|
|
23
|
-
containerStyle={{}}
|
|
24
|
-
>
|
|
25
|
-
<Button title="Info" type="text" />
|
|
26
|
-
</Tooltip>
|
|
27
|
-
|
|
28
|
-
// Ref methods
|
|
29
|
-
tooltipRef.current?.show();
|
|
30
|
-
tooltipRef.current?.hide();
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Package: `@momo-kits/animated-tooltip`
|
|
34
|
-
|
|
35
|
-
### Types
|
|
36
|
-
|
|
37
|
-
```tsx
|
|
38
|
-
type TooltipButton = {
|
|
39
|
-
title?: string;
|
|
40
|
-
icon?: string;
|
|
41
|
-
onPress?: () => void;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
type TooltipRef = {
|
|
45
|
-
show: () => void;
|
|
46
|
-
hide: () => void;
|
|
47
|
-
};
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Compose
|
|
51
|
-
|
|
52
|
-
```kotlin
|
|
53
|
-
import vn.momo.kits.components.Tooltip
|
|
54
|
-
import vn.momo.kits.components.TooltipButton
|
|
55
|
-
import vn.momo.kits.components.rememberTooltipState
|
|
56
|
-
|
|
57
|
-
val state = rememberTooltipState()
|
|
58
|
-
|
|
59
|
-
Tooltip(
|
|
60
|
-
state = state,
|
|
61
|
-
title = "Title", // optional tooltip title
|
|
62
|
-
description = "Helpful hint", // tooltip description text
|
|
63
|
-
buttons = listOf( // optional action buttons
|
|
64
|
-
TooltipButton(title = "Action", onPress = { })
|
|
65
|
-
),
|
|
66
|
-
placement = TooltipPlacement.TOP, // TOP | BOTTOM | LEFT | RIGHT (default: TOP)
|
|
67
|
-
align = TooltipAlign.CENTER, // START | CENTER | END (default: CENTER)
|
|
68
|
-
onVisibleChange = { visible -> }, // visibility change callback
|
|
69
|
-
onPressClose = {}, // close button pressed callback
|
|
70
|
-
modifier = Modifier,
|
|
71
|
-
) {
|
|
72
|
-
Button(
|
|
73
|
-
title = "Show tooltip",
|
|
74
|
-
onClick = { state.show() },
|
|
75
|
-
size = Size.SMALL,
|
|
76
|
-
)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// State methods
|
|
80
|
-
state.show()
|
|
81
|
-
state.hide()
|
|
82
|
-
state.toggle()
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### Types
|
|
86
|
-
|
|
87
|
-
```kotlin
|
|
88
|
-
enum class TooltipPlacement { TOP, BOTTOM, LEFT, RIGHT }
|
|
89
|
-
enum class TooltipAlign { START, CENTER, END }
|
|
90
|
-
data class TooltipButton(
|
|
91
|
-
val title: String? = null,
|
|
92
|
-
val icon: String? = null,
|
|
93
|
-
val onPress: (() -> Unit)? = null,
|
|
94
|
-
)
|
|
95
|
-
```
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# Uploader
|
|
2
|
-
|
|
3
|
-
## React Native
|
|
4
|
-
|
|
5
|
-
```tsx
|
|
6
|
-
import { Uploader } from '@momo-kits/uploader';
|
|
7
|
-
|
|
8
|
-
<Uploader
|
|
9
|
-
images={files}
|
|
10
|
-
numberOfImages={5}
|
|
11
|
-
disabled={false}
|
|
12
|
-
width={64}
|
|
13
|
-
height={64}
|
|
14
|
-
onAdd={() => launchImagePicker()}
|
|
15
|
-
onCancel={(image, index) => removeFile(index)}
|
|
16
|
-
onPressImage={(image, index) => previewImage(image)}
|
|
17
|
-
/>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Compose
|
|
21
|
-
|
|
22
|
-
```kotlin
|
|
23
|
-
import vn.momo.kits.components.Uploader
|
|
24
|
-
import vn.momo.kits.components.UploadImage
|
|
25
|
-
|
|
26
|
-
Uploader(
|
|
27
|
-
images = listOf(
|
|
28
|
-
UploadImage(uri = "https://...", loading = false),
|
|
29
|
-
),
|
|
30
|
-
numberOfImages = 5,
|
|
31
|
-
disabled = false,
|
|
32
|
-
width = 64.dp,
|
|
33
|
-
height = 64.dp,
|
|
34
|
-
onAdd = { launchPicker() },
|
|
35
|
-
onCancel = { image, index -> }, // null = hide cancel button
|
|
36
|
-
onPressImage = { image, index -> },
|
|
37
|
-
)
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Key Differences
|
|
41
|
-
|
|
42
|
-
| Feature | React Native | Compose |
|
|
43
|
-
|---------|-------------|---------|
|
|
44
|
-
| Image data | `{ uri, loading }[]` | `List<UploadImage>` |
|
|
45
|
-
| Cancel button | Always shown | `onCancel = null` hides it |
|
|
46
|
-
| Layout | Fixed grid | Horizontal scroll row |
|
|
47
|
-
| Dashed border | Built-in | `Modifier.dashedBorder` |
|
|
48
|
-
| Loading overlay | Built-in | White 40% + `Skeleton` |
|