@momo-kits/foundation 0.162.2-beta.17 → 0.162.2-beta.18

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/Button/index.tsx CHANGED
@@ -49,12 +49,6 @@ export interface ButtonProps extends TouchableOpacityProps {
49
49
  iconRight?: string;
50
50
  iconLeft?: string;
51
51
  title: string;
52
- /**
53
- * When true, hides the label and renders only the centered icon.
54
- * `title` stays required and is used as the accessibility label.
55
- * Icon-only buttons hug their icon, so the `full` prop is ignored.
56
- */
57
- iconOnly?: boolean;
58
52
  tintColor?: string;
59
53
  loading?: boolean;
60
54
  onPress: () => void;
@@ -68,7 +62,6 @@ const Button: FC<ButtonProps> = ({
68
62
  full = true,
69
63
  iconRight,
70
64
  iconLeft,
71
- iconOnly = false,
72
65
  loading = false,
73
66
  title = 'Button',
74
67
  params,
@@ -270,8 +263,8 @@ const Button: FC<ButtonProps> = ({
270
263
  {
271
264
  width: iconSize,
272
265
  height: iconSize,
273
- marginRight: !iconOnly && isLeft ? space : 0,
274
- marginLeft: !iconOnly && !isLeft ? space : 0,
266
+ marginRight: isLeft ? space : 0,
267
+ marginLeft: isLeft ? 0 : space,
275
268
  },
276
269
  ];
277
270
 
@@ -319,14 +312,10 @@ const Button: FC<ButtonProps> = ({
319
312
  const sizeStyle = getSizeStyle();
320
313
  const typeStyle = getTypeStyle();
321
314
  const containerStyle: ViewStyle = StyleSheet.flatten([
322
- full && !iconOnly && { width: '100%' },
315
+ full && { width: '100%' },
323
316
  loading && { opacity: 0.75 },
324
317
  ]);
325
- const buttonStyle = StyleSheet.flatten([
326
- sizeStyle,
327
- typeStyle,
328
- iconOnly && styles.iconOnly,
329
- ]);
318
+ const buttonStyle = StyleSheet.flatten([sizeStyle, typeStyle]);
330
319
 
331
320
  const animatedStyle = useAnimatedStyle(() => {
332
321
  return {
@@ -363,8 +352,8 @@ const Button: FC<ButtonProps> = ({
363
352
  onPressOut={animateOut}
364
353
  >
365
354
  <Reanimated.View style={[buttonStyle, animatedStyle]}>
366
- {renderIcon('left')}
367
- {!iconOnly && renderTitle()}
355
+ {renderIcon('left')}
356
+ {renderTitle()}
368
357
  {renderIcon('right')}
369
358
  {gradientPros && (
370
359
  <LinearGradient {...gradientPros} style={styles.gradientView} />
package/Button/styles.ts CHANGED
@@ -29,9 +29,6 @@ export default StyleSheet.create({
29
29
  paddingHorizontal: 8,
30
30
  minWidth: 60,
31
31
  },
32
- iconOnly: {
33
- minWidth: 0,
34
- },
35
32
  leading: {
36
33
  overflow: 'hidden',
37
34
  alignItems: 'center',
@@ -9,7 +9,7 @@ import {
9
9
  ComponentContext,
10
10
  MiniAppContext,
11
11
  } from '../Context';
12
- import { Colors } from '../Consts';
12
+ import { Colors, Radius } from '../Consts';
13
13
  import { Icon } from '../Icon';
14
14
  import styles from './styles';
15
15
 
@@ -30,6 +30,11 @@ export interface IconButtonProps extends TouchableOpacityProps {
30
30
  */
31
31
  size?: 'large' | 'small';
32
32
 
33
+ /**
34
+ * Optional. Defines the shape of the IconButton. Defaults to 'circle'.
35
+ */
36
+ shape?: 'circle' | 'square' | 'rectangle';
37
+
33
38
  /**
34
39
  * Optional. Params auto tracking component.
35
40
  */
@@ -40,6 +45,7 @@ const IconButton: React.FC<IconButtonProps> = ({
40
45
  type = 'primary',
41
46
  icon,
42
47
  size,
48
+ shape = 'circle',
43
49
  params,
44
50
  ...rest
45
51
  }) => {
@@ -49,13 +55,25 @@ const IconButton: React.FC<IconButtonProps> = ({
49
55
  const showBaseLineDebug = context?.features?.showBaseLineDebug ?? false;
50
56
 
51
57
  /**
52
- * get size icon button
58
+ * get box size + border radius for icon button by size and shape.
59
+ * circle keeps the fully-rounded default; square/rectangle use Radius.S.
60
+ * rectangle is wider than tall.
53
61
  */
54
- const getSizeStyle = () => {
55
- if (size === 'small') {
56
- return styles.small;
62
+ const getShapeStyle = () => {
63
+ const box = size === 'small' ? 40 : 48;
64
+ switch (shape) {
65
+ case 'square':
66
+ return { width: box, height: box, borderRadius: Radius.S };
67
+ case 'rectangle':
68
+ return {
69
+ width: size === 'small' ? 48 : 56,
70
+ height: box,
71
+ borderRadius: Radius.S,
72
+ };
73
+ case 'circle':
74
+ default:
75
+ return { width: box, height: box, borderRadius: Radius.XL };
57
76
  }
58
- return styles.large;
59
77
  };
60
78
 
61
79
  /**
@@ -117,7 +135,11 @@ const IconButton: React.FC<IconButtonProps> = ({
117
135
  };
118
136
 
119
137
  const activeOpacity = type === 'disabled' ? 0.75 : 0.5;
120
- const buttonStyle = StyleSheet.flatten([getTypeStyle(), getSizeStyle()]);
138
+ const buttonStyle = StyleSheet.flatten([
139
+ getTypeStyle(),
140
+ getShapeStyle(),
141
+ styles.base,
142
+ ]);
121
143
  const iconSize = size === 'small' ? 16 : 24;
122
144
 
123
145
  return (
@@ -1,18 +1,8 @@
1
1
  import { StyleSheet } from 'react-native';
2
- import { Radius, Colors } from '../Consts';
2
+ import { Colors } from '../Consts';
3
3
 
4
4
  export default StyleSheet.create({
5
- large: {
6
- width: 48,
7
- height: 48,
8
- borderRadius: Radius.XL,
9
- justifyContent: 'center',
10
- alignItems: 'center',
11
- },
12
- small: {
13
- width: 40,
14
- height: 40,
15
- borderRadius: Radius.XL,
5
+ base: {
16
6
  justifyContent: 'center',
17
7
  alignItems: 'center',
18
8
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@momo-kits/foundation",
3
- "version": "0.162.2-beta.17",
3
+ "version": "0.162.2-beta.18",
4
4
  "description": "React Native Component Kits",
5
5
  "main": "index.ts",
6
6
  "scripts": {},
@@ -8,19 +8,19 @@
8
8
  "@momo-kits/foundation"
9
9
  ],
10
10
  "dependencies": {
11
+ "react-native-fast-image": "git+https://oauth2:TGi6oBj-LdzsKpLXQSoH@gitlab.mservice.com.vn/momo-platform/public/react-native-fast-image.git#v8.11.0",
11
12
  "@react-navigation/bottom-tabs": "7.4.2",
12
13
  "@react-navigation/core": "7.12.1",
13
14
  "@react-navigation/elements": "2.5.2",
14
15
  "@react-navigation/native": "7.1.14",
15
16
  "@react-navigation/routers": "7.4.1",
16
17
  "@react-navigation/stack": "7.4.2",
17
- "@shopify/flash-list": "2.1.0",
18
- "lottie-react-native": "7.2.4",
19
- "react-native-fast-image": "git+https://oauth2:TGi6oBj-LdzsKpLXQSoH@gitlab.mservice.com.vn/momo-platform/public/react-native-fast-image.git#v8.11.0",
20
18
  "react-native-gesture-handler": "2.27.1",
21
19
  "react-native-linear-gradient": "git+https://oauth2:TGi6oBj-LdzsKpLXQSoH@gitlab.mservice.com.vn/momo-platform/public/react-native-linear-gradient#v3.0.0",
22
20
  "react-native-reanimated": "4.2.2",
23
- "react-native-safe-area-context": "5.5.2"
21
+ "react-native-safe-area-context": "5.5.2",
22
+ "@shopify/flash-list": "2.1.0",
23
+ "lottie-react-native": "7.2.4"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "react-native": "*"
@@ -32,4 +32,4 @@
32
32
  "registry": "https://registry.npmjs.org/"
33
33
  },
34
34
  "license": "MoMo"
35
- }
35
+ }