@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,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` |