@momo-kits/foundation 0.81.43 → 0.81.49

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 (48) hide show
  1. package/Application/BottomTab.tsx +29 -12
  2. package/Application/Components.tsx +178 -174
  3. package/Application/ModalScreen.tsx +4 -17
  4. package/Application/NavigationContainer.tsx +9 -30
  5. package/Application/Navigator.ts +14 -9
  6. package/Application/StackScreen.tsx +25 -28
  7. package/Application/index.ts +10 -1
  8. package/Application/types.ts +30 -17
  9. package/Application/utils.tsx +14 -0
  10. package/Assets/icon.json +83 -5
  11. package/Assets/icon_bank.json +506 -0
  12. package/Badge/Badge.tsx +1 -1
  13. package/Badge/BadgeRibbon.tsx +2 -2
  14. package/Badge/styles.ts +5 -2
  15. package/Button/index.tsx +4 -5
  16. package/CheckBox/index.tsx +1 -2
  17. package/Icon/index.tsx +7 -2
  18. package/Icon/types.ts +1 -1
  19. package/IconButton/index.tsx +0 -1
  20. package/Input/Input.tsx +26 -7
  21. package/Input/InputDropDown.tsx +1 -6
  22. package/Input/InputMoney.tsx +14 -6
  23. package/Input/InputOTP.tsx +12 -9
  24. package/Input/InputSearch.tsx +8 -12
  25. package/Input/InputTextArea.tsx +4 -6
  26. package/Input/common.tsx +5 -3
  27. package/Input/index.tsx +2 -6
  28. package/Input/styles.ts +1 -3
  29. package/Layout/Card.tsx +8 -9
  30. package/Layout/Item.tsx +0 -1
  31. package/Layout/ItemList.tsx +39 -33
  32. package/Layout/Screen.tsx +1 -3
  33. package/Layout/Section.tsx +4 -4
  34. package/Pagination/PaginationNumber.tsx +1 -1
  35. package/Pagination/PaginationScroll.tsx +0 -1
  36. package/Popup/PopupNotify.tsx +28 -32
  37. package/Popup/PopupPromotion.tsx +24 -28
  38. package/Radio/index.tsx +1 -2
  39. package/Skeleton/index.tsx +1 -1
  40. package/Switch/index.tsx +0 -1
  41. package/Tag/index.tsx +2 -4
  42. package/Text/index.tsx +2 -2
  43. package/Text/styles.ts +38 -0
  44. package/Text/types.ts +18 -24
  45. package/Title/index.tsx +2 -2
  46. package/package.json +2 -2
  47. package/publish.sh +1 -1
  48. package/verify.js +37 -39
@@ -1,4 +1,4 @@
1
- import React, {useEffect, useRef, useState} from 'react';
1
+ import React, {useContext, useEffect, useRef, useState} from 'react';
2
2
  import {BottomSheetModalProvider} from '@gorhom/bottom-sheet';
3
3
  import {SafeAreaProvider} from 'react-native-safe-area-context';
4
4
  import {
@@ -6,13 +6,13 @@ import {
6
6
  NavigationContainerRef,
7
7
  } from '@react-navigation/native';
8
8
  import {createStackNavigator} from '@react-navigation/stack';
9
- import {DeviceEventEmitter, NativeModules} from 'react-native';
9
+ import {DeviceEventEmitter} from 'react-native';
10
10
  import StackScreen from './StackScreen';
11
11
  import ModalScreen from './ModalScreen';
12
12
  import Navigator from './Navigator';
13
13
  import {getDialogOptions, getModalOptions, getStackOptions} from './utils';
14
14
  import {LocalizationObject, NavigationContainerProps} from './types';
15
- import {ApplicationContext} from './index';
15
+ import {ApplicationContext, MiniAppContext} from './index';
16
16
  import kitLocalization from '../Assets/language.json';
17
17
 
18
18
  const Stack = createStackNavigator();
@@ -23,43 +23,26 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
23
23
  options,
24
24
  maxApi,
25
25
  localization,
26
- trackingInfo,
27
26
  }) => {
27
+ const context = useContext(MiniAppContext);
28
28
  const navigationRef = React.useRef<NavigationContainerRef>(null);
29
29
  const navigator = useRef(new Navigator(navigationRef));
30
30
  const [showGrid, setShowGrid] = useState(false);
31
- const [language, setLanguage] = useState<'vi' | 'en'>('vi');
32
- const [config, setConfig] = useState<any>(undefined);
33
- let assets = theme.assets;
34
- if (config && theme.assets?.headerBackground) {
35
- assets = {...assets, headerBackground: config.navigationBar?.headerBar};
36
- }
31
+ const config = useRef<any>();
37
32
 
38
33
  /**
39
34
  * handle mini language & listen change
40
35
  * engine only shake to enable grid view
41
36
  */
42
37
  useEffect(() => {
43
- maxApi?.getLanguage?.((lang: 'vi' | 'en') => {
44
- setLanguage(lang);
45
- });
46
- const listener = maxApi?.observer?.('language', (lang: 'vi' | 'en') => {
47
- setLanguage(lang);
48
- });
49
38
  const subscription = DeviceEventEmitter.addListener(
50
39
  'onChangeGrid',
51
40
  enable => {
52
41
  setShowGrid(!!enable);
53
42
  },
54
43
  );
55
- try {
56
- const result = JSON.parse(
57
- NativeModules?.ConfigsModule?.getConfigSync?.('DESIGN_SYSTEM'),
58
- );
59
- setConfig(result);
60
- } catch (e) {}
44
+
61
45
  return () => {
62
- listener?.remove?.();
63
46
  subscription?.remove?.();
64
47
  };
65
48
  }, []);
@@ -68,13 +51,13 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
68
51
  * inject data for navigator
69
52
  */
70
53
  navigator.current.maxApi = maxApi;
71
- navigator.current.trackingInfo = trackingInfo;
72
54
 
73
55
  /**
74
56
  * translate
75
57
  * @param key
76
58
  */
77
59
  const translate = (key: string) => {
60
+ const language: 'vi' | 'en' = context?.language ?? 'vi';
78
61
  const mergedLocalization: LocalizationObject = {
79
62
  vi: {...localization?.vi, ...kitLocalization.vi},
80
63
  en: {...localization?.en, ...kitLocalization.en},
@@ -87,14 +70,10 @@ const NavigationContainer: React.FC<NavigationContainerProps> = ({
87
70
  <BottomSheetModalProvider>
88
71
  <ApplicationContext.Provider
89
72
  value={{
90
- theme: {
91
- ...theme,
92
- assets: assets,
93
- },
94
73
  navigator: navigator.current,
74
+ config: config.current,
75
+ theme,
95
76
  showGrid,
96
- language,
97
- config,
98
77
  translate,
99
78
  }}>
100
79
  <ReactNavigationContainer
@@ -4,15 +4,14 @@ import {
4
4
  HeaderToolkitProps,
5
5
  ModalParams,
6
6
  ScreenParams,
7
- TrackingInfo,
8
7
  } from './types';
9
8
 
10
9
  class Navigator {
11
10
  ref?: any;
12
11
  toolkitConfig?: HeaderToolkitProps;
13
12
  maxApi?: any;
14
- trackingInfo?: TrackingInfo;
15
13
  dismissData?: any;
14
+ toolkitCallback?: (item: any) => void;
16
15
 
17
16
  constructor(navigation: any) {
18
17
  this.ref = navigation;
@@ -111,15 +110,21 @@ class Navigator {
111
110
  };
112
111
 
113
112
  /**
114
- * request max api for mini app
115
- * @param func
116
- * @param args
113
+ * dismiss a feature data
114
+ * @param data
115
+ */
116
+ setDismissData = (data: any) => {
117
+ this.dismissData = data;
118
+ };
119
+
120
+ /**
121
+ * set callback function for toolkit
117
122
  * @param callback
118
123
  */
119
- requestApi = (func: any, args: any = [], callback: any) => {
120
- if (this.maxApi) {
121
- this.maxApi[func]?.(...args, callback);
122
- }
124
+ setToolkitCallback = (
125
+ callback: (item: {key: string; action: string}) => void,
126
+ ) => {
127
+ this.toolkitCallback = callback;
123
128
  };
124
129
  }
125
130
 
@@ -1,13 +1,15 @@
1
1
  import React, {useContext, useEffect, useLayoutEffect} from 'react';
2
2
  import {ScreenParams} from './types';
3
3
  import Navigation from './Navigation';
4
- import {ApplicationContext} from './index';
4
+ import {ApplicationContext, MiniAppContext} from './index';
5
5
  import {GridSystem} from '../Layout';
6
6
  import {useHeaderHeight} from '@react-navigation/stack';
7
7
 
8
8
  const StackScreen: React.FC<ScreenParams> = props => {
9
- const {screen: Component, options}: ScreenParams = props.route.params;
10
9
  const {theme, showGrid, navigator} = useContext(ApplicationContext);
10
+ const context = useContext(MiniAppContext);
11
+
12
+ const {screen: Component, options}: ScreenParams = props.route.params;
11
13
  const navigation = new Navigation(props.navigation, theme);
12
14
  const heightHeader = useHeaderHeight();
13
15
 
@@ -31,36 +33,31 @@ const StackScreen: React.FC<ScreenParams> = props => {
31
33
  * tracking for screen
32
34
  */
33
35
  useEffect(() => {
34
- if (navigator?.trackingInfo) {
35
- const tracking = {
36
- feature_code: navigator.trackingInfo.code,
37
- app_id: navigator.trackingInfo.appId,
38
- miniapp_version: navigator.trackingInfo.buildNumber,
39
- flow_partner_id: navigator.trackingInfo.flowPartnerId,
40
- screen_name: Component.name,
41
- };
36
+ const tracking = {
37
+ ...context,
38
+ screen_name: Component.name,
39
+ };
40
+
41
+ const routes = props.navigation.getState()?.routes || [];
42
+ const routesLength = routes.length;
43
+ let pre_screen_name = '';
44
+ if (routesLength > 1) {
45
+ pre_screen_name = routes[routesLength - 2]?.params?.screen?.name;
46
+ }
42
47
 
43
- const routes = props.navigation.getState()?.routes || [];
44
- const routesLength = routes.length;
45
- let pre_screen_name = '';
46
- if (routesLength > 1) {
47
- pre_screen_name = routes[routesLength - 2]?.params?.screen?.name;
48
- }
48
+ navigator?.maxApi?.trackEvent?.('service_frame_displayed', {
49
+ ...tracking,
50
+ pre_screen_name,
51
+ trigger_id: '111378000000000000',
52
+ });
49
53
 
50
- navigator?.maxApi?.trackEvent?.('service_frame_displayed', {
54
+ return props.navigation.addListener('beforeRemove', () => {
55
+ navigator?.maxApi?.trackEvent?.('service_icon_clicked', {
51
56
  ...tracking,
52
- pre_screen_name,
53
- trigger_id: '111378000000000000',
54
- });
55
-
56
- return props.navigation.addListener('beforeRemove', () => {
57
- navigator?.maxApi?.trackEvent?.('service_icon_clicked', {
58
- ...tracking,
59
- trigger_id: '111154000000000000',
60
- icon_name: 'back',
61
- });
57
+ trigger_id: '111154000000000000',
58
+ icon_name: 'back',
62
59
  });
63
- }
60
+ });
64
61
  }, []);
65
62
 
66
63
  return (
@@ -13,12 +13,21 @@ import {
13
13
  import BottomTab from './BottomTab';
14
14
  import {createContext} from 'react';
15
15
  import {defaultContext} from '../Consts';
16
+ import {MiniAppInfo} from './types';
16
17
 
17
18
  const ApplicationContext = createContext(defaultContext);
19
+ const MiniAppContext = createContext<MiniAppInfo>({
20
+ appId: '',
21
+ buildNumber: 0,
22
+ code: '',
23
+ toolkitConfig: {},
24
+ fromCode: '',
25
+ });
18
26
 
19
27
  export {
20
- NavigationContainer,
21
28
  ApplicationContext,
29
+ MiniAppContext,
30
+ NavigationContainer,
22
31
  Screen,
23
32
  BottomTab,
24
33
  NavigationButton,
@@ -67,10 +67,19 @@ export type Context = {
67
67
  theme: Theme;
68
68
  navigator?: Navigator;
69
69
  showGrid?: boolean;
70
- language?: 'vi' | 'en';
71
70
  translate?: (key: string) => string;
72
71
  };
73
72
 
73
+ export type MiniAppInfo = {
74
+ [key: string]: any;
75
+ code: string;
76
+ appId: string;
77
+ buildNumber: number;
78
+ flowPartnerId?: string;
79
+ toolkitConfig?: any;
80
+ fromCode?: string;
81
+ };
82
+
74
83
  export type LocalizationObject = {
75
84
  vi: {
76
85
  [key: string]: string;
@@ -80,21 +89,12 @@ export type LocalizationObject = {
80
89
  };
81
90
  };
82
91
 
83
- export type TrackingInfo = {
84
- [key: string]: any;
85
- code: string;
86
- appId: string;
87
- buildNumber: number;
88
- flowPartnerId?: string;
89
- };
90
-
91
92
  export type NavigationContainerProps = {
92
93
  screen: Screen;
93
94
  options?: NavigationOptions;
94
95
  theme: Theme;
95
96
  maxApi: any;
96
97
  localization?: LocalizationObject;
97
- trackingInfo?: TrackingInfo;
98
98
  };
99
99
 
100
100
  export type NavigationScreenProps = {
@@ -127,9 +127,20 @@ export type NavigationButtonProps = {
127
127
  tintColor?: string;
128
128
  useBorder?: boolean;
129
129
  onPress: () => void;
130
- accessibilityLabel?: string;
131
- badgeType?: 'dot' | 'number' | 'string';
132
- badgeValue?: number | string;
130
+ badgeType?: 'dot' | 'number';
131
+ badgeValue?: number;
132
+ };
133
+
134
+ export type PinnedToolType = {
135
+ key: string;
136
+ badgeValue?: number;
137
+ badgeType?: 'number' | 'dot';
138
+ };
139
+
140
+ export type RuntimeToolType = {
141
+ title: {vi: string; en: string};
142
+ icon: string;
143
+ key: string;
133
144
  };
134
145
 
135
146
  export interface NavigationOptions extends StackNavigationOptions {
@@ -138,12 +149,15 @@ export interface NavigationOptions extends StackNavigationOptions {
138
149
  surface?: boolean;
139
150
  hiddenBack?: boolean;
140
151
  customTitle?: TitleCustomProps;
152
+ toolkitParams?: {
153
+ pinnedTool?: PinnedToolType;
154
+ runtimeTools?: RuntimeToolType[];
155
+ };
141
156
  }
142
157
 
143
158
  export interface HeaderBackProps extends NavigationButtonProps {
144
159
  preventBack?: PopupNotifyProps;
145
160
  onPressLeftHeader?: () => void;
146
- accessibilityLabel?: string;
147
161
  }
148
162
 
149
163
  export type HeaderBackgroundProps = {
@@ -166,9 +180,7 @@ export type TitleCustomProps = {
166
180
  export type HeaderToolkitProps = {
167
181
  [key: string]: any;
168
182
  appCode: string;
169
- hidden: boolean;
170
- type: string;
171
- onAction?: (action: string) => void;
183
+ configs: any[];
172
184
  };
173
185
 
174
186
  export type HeaderAnimatedProps = {
@@ -188,6 +200,7 @@ export type BottomTabItemProps = {
188
200
  };
189
201
 
190
202
  export type BottomTabProps = {
203
+ nested?: boolean;
191
204
  tabs: BottomTabItemProps[];
192
205
  initialRouteName?: string;
193
206
  navigation: Navigation;
@@ -126,6 +126,20 @@ const getOptions = (params: NavigationOptions, theme: Theme) => {
126
126
  };
127
127
  }
128
128
 
129
+ options = {
130
+ ...options,
131
+ headerRight: (props: any) => {
132
+ return (
133
+ <HeaderToolkitAction
134
+ preventBack={params.preventBack}
135
+ pinnedTool={params.toolkitParams?.pinnedTool}
136
+ runtimeTools={params.toolkitParams?.runtimeTools}
137
+ {...props}
138
+ />
139
+ );
140
+ },
141
+ };
142
+
129
143
  return {
130
144
  ...params,
131
145
  ...options,
package/Assets/icon.json CHANGED
@@ -801,7 +801,7 @@
801
801
  "uri": "https://img.mservice.com.vn/app/img/kits/navigation_minus_circle_full.png"
802
802
  },
803
803
  "navigation_more_horiz": {
804
- "uri": "https://img.mservice.com.vn/app/img/kits/navigation_more_horiz.png"
804
+ "uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAgKADAAQAAAABAAAAgAAAAABIjgR3AAAFAklEQVR4Ae2aS4tcRRiGM2rEO14SY7wFURGc+CPEyyYJLnSlaCCKLgSzUNBNRAMSF0LIRhGDBMQQMAQ3Zin+A/VHKOIlTm4aJ5fx+VBCT5Puru9UleOE54OX7nO66n2rnj7dp+ucXrPGkoAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhLoTmCue8JYwNLS0m3s2ooeQXeiJfQj+h59NTc39zuP3Yr89ZhH/mYU+RdQ5H+HIn+Bx25F/u2YR/48ivzzKPK/RUfJP87j5VdM/EH0BTqHJtVZXjiI7mtNAM+H0BF0Hk2qyP8MbeqQ/zC+X6Jp+Yu8fgDd2zp/Rf2Y0E4UcEvrLxq+3GrQeL2OMvlnaL+jYf6b+E078Hl5Wf3J1gut8lfUh4nsWza13Mae2sET92Euclnr3Q3yP1nmmNvYVZu/ov2Z62u5+V6y9UtDJ4FbfPJra3tF/lu14fR/dmj+ivZj4A+gOKfVVnwd3pOdDH3inJ/52p80ztO8sHFA/jz9pp3vJ+WN7z/Jjvjh2KWu6OL6j+l7PKxt4H8NHu8O8InTx1UD+o13uY4d74zvLNh+nzYt+N6Az9sFeYOadFkGcsTewmh+Ri3egJjYGbSOJdLp2JhV5MdS7yfU4g2IuMiN/BjHzCI/vjF+QK34nsBrPfmLM8OTDVoBGo/dwo5Wb354x7fAk/GksGKd3XJu1+P3eGF2NNuGWr354XcTejSetK6WkEbHFhdZWlfGM9O2dJwZz0zbHvmlnk0/JaOhcYWrdWU8M21Lx5nxzLTtkV/q2e0AiMurrSvjmWlbOs6MZ6Ztj/xSz24HQFzbbl0Zz0zb0nFmPDNte+SXenY7AOLGSuvKeGbalo4z45lp2yO/1LPpL9WLoSyDbmTjV3T1xZ11T7LLsJuJ+wW1WomklmHMfx3ZsQy9ErWoY5hsYBl4roXZqEeXVQADPUnI56NBlc8PlK7BI4e2Czwcqswc7f4pnoujO6Y9p20c/IentUm+th/P5m9+cgy55nwK7kZ/oNo6gUH6Uih9NqG4q1dbCxjEfxhSRZ/7UYtL4b/hE99oq68Y+POopi7Q+ZmhM6fvjppw+kb+UxX5r1Tmx72EuKi2eosJ7BoIIeC/UTtzPHZX5O9skL9nYH68+a/W5v8v+jOR59CpBIjjtH261eDx2o7irl5pxdf+4E/++LjxehFlTofHaL913GdVbzOhO9BHKG5vTqo438cfSOJmTtPCcyP6GE07EOPA24vS5/xZg8XzLrQfTTsQ48D7AN06y6/V6y1vWBSNicnFjZ3H0KX+FPp15td2UeBYo3/z48bOZhSXbOOqXVy4ibX7N/9B/rXkPIHmUeSP/ik08s+yz5KABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISkIAEJCABCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIQAISuJwI/A2lzL3lHltsxwAAAABJRU5ErkJggg=="
805
805
  },
806
806
  "navigation_more_vert": {
807
807
  "uri": "https://img.mservice.com.vn/app/img/kits/navigation_more_vert.png"
@@ -822,7 +822,7 @@
822
822
  "uri": "https://img.mservice.com.vn/app/img/kits/navigation_scan.png"
823
823
  },
824
824
  "navigation_search": {
825
- "uri": "https://img.mservice.com.vn/app/img/kits/navigation_search.png"
825
+ "uri": "data:image/webp;base64,UklGRqwEAABXRUJQVlA4TKAEAAAvf8AfEDVIchtJkqT6/6fZ21hkukWeZouKkARJtmlbtm3btm3b741sjWzbtm3btm184xkLgiS5cZsGUuXbsJOAoPSD88dlwMVKiDwdxtRJ4UUP+XlwcpVn1A0I4dWOVnEMET7n62avxi24FD4tSyT9AJCpq/YI7oQjYZj3Bp2zU3A/dBDfF0y+bsBMGCK3KTpOwFyoR70h9Nreo+EvXyi7Ye4vmA7TaLcCQy4ohB90NoLaKqiEL1HbwOH84sdyqk+aQC5smHLkKViZWT8vXlACZQ/EfAcXOJa5bPO4uGm51A91wtzix3+w5I88UhfXAw5GL6Rh6Bvcu77smyD4N4okpNkXWIVGSPVXWz7DqyjYN+vEa3yZctrvunwjw9gGSmW3/EXx6ZILFiTM/BYx2FjwRqzabUHmhe1UtXBWS4RTBMW1xt/MLYm5eiGKXqSGnsX3ZwPNaMUsvYMYtGoL/eIymuGauS66JIzSmOMkP4NE9z9GeAdfELGdrxqK0cgj0sqM6Sa/a6NuxI5BCrENnHO763RvvF7jUlV4B8hOY7PHVvq/EQNSCJpHAyS1AQaWs8QZxHGq40oLu9a32IIU5Mc3dx7z76wGipNE0TT28W8WfnHd4hSrhz5MTSKvuW7C9q931W1Cqjo3KK/1Xpxx0ThVVBKTtWVLZhdU/9P8A3OUvIRheXDUmz4AwVFp0fKJsExgwmKUm8BJe26nmggb7XqpWr1t6BK1k7Al0togegyMTiKcCKjv2xwFliaRT7jUWQ3slyZeNnUmAjeTGCdM6wylAzGTqCcc68wGLieRSnjW2QrsjY6sieA6V4Hl0Q1noqx+xM5Xp4NC9hqYbcPXOgJiJ/CzjVmrg2pN5eIsk5YwGiUu4VZmI0E3imGipQtpeqS7Mwqhz7RnhlvFBQTahwu2nArmUGUm4TVMUmKkCRtIMA4jDVIQKpKX2Bov2XGiuQeVl+ahH2HxCD/eGhmpdp/ox2GOV4234PWe6CtUrTMmu9LIaxIkDAqIR75jqOAH4qMhdie299sGnAIaPkDeczWQe8fQNv/F4fAbJLZLZz/U5xQ9DaGDWLMvMq1zLv7mZDl8xMkgiGTU+gbfzDvX0csGFiceYNdAMQ1yyD1zz3AAMsrFdQOtHyCHUcRTb+Q3yBR2z/X7Wp3uxDvS7vj6AAtEu4OTKLAIr2Jg3W/2JsEyXGPrphKwCmds770kKhnewXuzhKITLMMJJ9iXYZX3vdBvlzANg3X4p5wK1CsjLpcfQ96OCV0juBL+6xVIFd2vawEMvEyl2fg+47xrQpIDroZHR1ZNGDJry5VPMBCusXZfjI83cDf2T2JOCxQSdb1VItAwzelXs8e2Vx5ajif5kvHVGvZLGMI9jrH9PWfsmAepWH9mLrH4mrJ2zYNAkLO7fOpjCHHRirfLA5G8In9usCX8x/Zm8zwHOnnhJr1d4E47rx9b24ncI2ARZClMrVFL9t344dKeZb1yBDL6ua+byl1jLl39vktXq8Ty/ET6+NRwHp84H59sXghPT24vhKcnqRfCw9MetPPs9EHyhfDUQKrhx2WS58GBkw030p/3/nUYBw=="
826
826
  },
827
827
  "navigation_search_add": {
828
828
  "uri": "https://img.mservice.com.vn/app/img/kits/navigation_search_add.png"
@@ -2640,7 +2640,7 @@
2640
2640
  "uri": "https://img.mservice.io/momo_app_v2/new_version/img/appx_icon/16_navigation_close_circle_full.png"
2641
2641
  },
2642
2642
  "16_navigation_close_circle": {
2643
- "uri": "https://img.mservice.io/momo_app_v2/new_version/img/appx_icon/16_navigation_close_circle.png"
2643
+ "uri": "data:image/webp;base64,UklGRkICAABXRUJQVlA4TDUCAAAvP8APEM8x//M//wzbRlKcvMws3D1DYBwIAASMF4YAQCHQAAED7AAg8AMYB0DhQCMgGAnwAARuAAHcAABsSCQMYAgFAFIhSQDYtJHKzMzMzB3//2mWbdmahaMVR/QfgiS5cZsB4DskKoXzC7H/FklUBov99fENkd/zoJJwTKqzegmDvEIn5Y706CFQEo3Y0dm9m0AL9yIHNC/CSkLTlvhY5+N50q2XslGo+8lZ5w3HrchshMJhWGStRMGrHm0yFuSOArKtYpyqbhWnjgFvdw84tbF+RSfo1x2rGeX1LBlDS5gpLyPcafAvfvoxK4kC/IM4BnjRsxGzFB/gPZh4g6+tjdnDl+b4S1wAfXYgEQzghIkePM1NYsHDeqZUvYFbk24I4NJbWs9ISFqqG+X5NG/Ch3lZE3/AyZG+zjxAtGvs4/27pid6e//R6A6UkZSOjpBUVebCSzWZ93NNCgE3g441SFVWmQqoJvNB4xhI4pXu5JdkqKHwVtRgnNcQQClNmP4P2kJRU9XghLaMAE8qKgNQpphRijTms2SgspRMGKlI44lkqbKXdBmpSOOuJKhcJXVGKtI4SK4qD0mJEWphHEDkqnwlWcYo3jgrCfTQv6H/Cf1B5HG7+D15UyHLW3zdyDurG+R1i75u0tdtRN9o2/SNAqZv0Pct8r5J37fJ5wbyuYV+biKf22znxpb93Eg+t5LPzeRzO/XeQL63UO9NLve2tXlvW4eU672xOliqe+NywInY/4owAA=="
2644
2644
  },
2645
2645
  "16_navigation_close": {
2646
2646
  "uri": "https://img.mservice.io/momo_app_v2/new_version/img/appx_icon/16_navigation_close.png"
@@ -3918,7 +3918,7 @@
3918
3918
  "uri": "https://img.mservice.com.vn/app/img/kits/Phonebook-outline.png"
3919
3919
  },
3920
3920
  "ic_back": {
3921
- "uri": "https://img.mservice.com.vn/momo_app_v2/new_version/img/appx_icon/ic_back_ios.png"
3921
+ "uri": "data:image/webp;base64,UklGRqIBAABXRUJQVlA4TJYBAAAvX8AXEFVActtIkjT//zRn9WzKYwOJRgQkAADLRtvOtm3btm3b9r1svWzbtm3btu27OHIkN26abK9JbpFIPuE+bAQmFS5c6qcQhrE34CPEZKHr9/kJf0SiUPENfAnNTcj4eH7FaRKiXoGBmyJ4PQILPUGwuwUmtHpgdLFV0RO1461eyDmQ2tsahZYTgY2tGZg54VjcWoabE4aprU1EOaEa3tpHnhOS7q1TNDkhaN66wpQTnKqtOxw5QRVsPeHvLRfSt16J9ZS49UGup/Ctb+o9BW790u/JbeufZU82/jecggWWvy3fnrT8bAX1pORrK7YnKe9byT1RetrKAe2hcqsM7PZwMVEP/h5A/Eb52039I3LfPlL/IUkvkHvA/7q+Lgm+t76u8ikm2/q+cC/37/e1/L5cTGHf1xUH1EX5ui4IqMLv69ID6up4X+AS01se0Ncc0Jcd0Ffm++JgIvxBX9+fS/TnKsHE8O1cqD/XKia+b+Zy/bniAXPRZlAd5ZjmA+bS1WDq51MVI+R2A4tKRx51UL6PD3EB"
3922
3922
  },
3923
3923
  "share": {
3924
3924
  "uri": "https://img.mservice.com.vn/app/img/mini-app-center/share.png"
@@ -3936,7 +3936,7 @@
3936
3936
  "uri": "https://img.mservice.com.vn/app/img/kits/error_mess_icon.png"
3937
3937
  },
3938
3938
  "media_fail": {
3939
- "uri": "https://static.momocdn.net/app/img/kits/media_fail.png"
3939
+ "uri": "data:image/png;base64,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"
3940
3940
  },
3941
3941
  "ic_checked": {
3942
3942
  "uri": "https://img.mservice.com.vn/app/img/kits/checked_ic.png"
@@ -3949,5 +3949,83 @@
3949
3949
  },
3950
3950
  "ic_money_bag": {
3951
3951
  "uri": "https://static.momocdn.net/app/img/kits/ic_money_bag.png"
3952
+ },
3953
+ "basic_flaged": {
3954
+ "uri": "https://static.momocdn.net/app/img/kits/basic_flaged.png"
3955
+ },
3956
+ "basic_user": {
3957
+ "uri": "https://static.momocdn.net/app/img/kits/basic_user.png"
3958
+ },
3959
+ "media_player_play_not": {
3960
+ "uri": "https://static.momocdn.net/app/img/kits/media_player_play_not.png"
3961
+ },
3962
+ "navigation_AR": {
3963
+ "uri": "https://static.momocdn.net/app/img/kits/navigation_AR.png"
3964
+ },
3965
+ "navigation_scan_barcode": {
3966
+ "uri": "https://static.momocdn.net/app/img/kits/navigation_scan_barcode.png"
3967
+ },
3968
+ "notifications_follow": {
3969
+ "uri": "https://static.momocdn.net/app/img/kits/notifications_follow.png"
3970
+ },
3971
+ "notifications_followed": {
3972
+ "uri": "https://static.momocdn.net/app/img/kits/notifications_followed.png"
3973
+ },
3974
+ "notifications_unfollow": {
3975
+ "uri": "https://static.momocdn.net/app/img/kits/notifications_unfollow.png"
3976
+ },
3977
+ "reaction_disliked": {
3978
+ "uri": "https://static.momocdn.net/app/img/kits/reaction_disliked.png"
3979
+ },
3980
+ "reaction_liked": {
3981
+ "uri": "https://static.momocdn.net/app/img/kits/reaction_liked.png"
3982
+ },
3983
+ "travel_247": {
3984
+ "uri": "https://static.momocdn.net/app/img/kits/travel_247.png"
3985
+ },
3986
+ "travel_children_area": {
3987
+ "uri": "https://static.momocdn.net/app/img/kits/travel_children_area.png"
3988
+ },
3989
+ "travel_cooker": {
3990
+ "uri": "https://static.momocdn.net/app/img/kits/travel_cooker.png"
3991
+ },
3992
+ "travel_dishwasher": {
3993
+ "uri": "https://static.momocdn.net/app/img/kits/travel_dishwasher.png"
3994
+ },
3995
+ "travel_electronic_stove": {
3996
+ "uri": "https://static.momocdn.net/app/img/kits/travel_electronic_stove.png"
3997
+ },
3998
+ "travel_friend_group": {
3999
+ "uri": "https://static.momocdn.net/app/img/kits/travel_friend_group.png"
4000
+ },
4001
+ "travel_gas_stove": {
4002
+ "uri": "https://static.momocdn.net/app/img/kits/travel_gas_stove.png"
4003
+ },
4004
+ "travel_kid_area": {
4005
+ "uri": "https://static.momocdn.net/app/img/kits/travel_kid_area.png"
4006
+ },
4007
+ "travel_led_Light": {
4008
+ "uri": "https://static.momocdn.net/app/img/kits/travel_led_Light.png"
4009
+ },
4010
+ "travel_light": {
4011
+ "uri": "https://static.momocdn.net/app/img/kits/travel_light.png"
4012
+ },
4013
+ "travel_music": {
4014
+ "uri": "https://static.momocdn.net/app/img/kits/travel_music.png"
4015
+ },
4016
+ "travel_outdoor_table": {
4017
+ "uri": "https://static.momocdn.net/app/img/kits/travel_outdoor_table.png"
4018
+ },
4019
+ "travel_private_room": {
4020
+ "uri": "https://static.momocdn.net/app/img/kits/travel_private_room.png"
4021
+ },
4022
+ "travel_romantic": {
4023
+ "uri": "https://static.momocdn.net/app/img/kits/travel_romantic.png"
4024
+ },
4025
+ "travel_smoking": {
4026
+ "uri": "https://static.momocdn.net/app/img/kits/travel_smoking.png"
4027
+ },
4028
+ "travel_suitcase": {
4029
+ "uri": "https://static.momocdn.net/app/img/kits/travel_suitcase.png"
3952
4030
  }
3953
4031
  }