@fto-consult/expo-ui 6.31.9 → 6.32.2
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/package.json +2 -2
- package/src/components/Dropdown/index.js +1 -1
- package/src/components/Form/Fields/SelectFontIcon.js +25 -0
- package/src/components/Form/Fields/index.js +4 -1
- package/src/components/Form/FormData/componentsTypes.js +1 -0
- package/src/components/Icon/Font.js +66 -48
- package/src/components/Icon/SelectFontIcon.js +74 -0
- package/src/components/Menu/Menu.js +7 -7
- package/src/components/SimpleSelect/index.js +1 -1
- package/src/screens/Help/openLibraries.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fto-consult/expo-ui",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.32.2",
|
|
4
4
|
"description": "Bibliothèque de composants UI Expo,react-native",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"@expo/html-elements": "^0.5.1",
|
|
69
69
|
"@expo/vector-icons": "^13.0.0",
|
|
70
70
|
"@faker-js/faker": "^8.0.2",
|
|
71
|
-
"@fto-consult/common": "^3.
|
|
71
|
+
"@fto-consult/common": "^3.33.0",
|
|
72
72
|
"@pchmn/expo-material3-theme": "^1.3.1",
|
|
73
73
|
"@react-native-async-storage/async-storage": "1.18.2",
|
|
74
74
|
"@react-native-community/datetimepicker": "7.2.0",
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import SelectField from "./SelectField";
|
|
2
|
+
import SelectFontIcon from "$ecomponents/Icon/SelectFontIcon";
|
|
3
|
+
|
|
4
|
+
export default class FormFieldSelectFontIcon extends SelectField{
|
|
5
|
+
_render (props){
|
|
6
|
+
return <SelectFontIcon
|
|
7
|
+
{...props}
|
|
8
|
+
ref = {(el)=>{
|
|
9
|
+
this._field = el;
|
|
10
|
+
}}
|
|
11
|
+
onMount = {({context})=>{
|
|
12
|
+
this._field = context;
|
|
13
|
+
}}
|
|
14
|
+
onChange = {(args)=>{
|
|
15
|
+
this.validateWithCallOnChange(args);
|
|
16
|
+
if(typeof props.onChange =='function'){
|
|
17
|
+
props.onChange(args);
|
|
18
|
+
}
|
|
19
|
+
}}
|
|
20
|
+
/>
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
FormFieldSelectFontIcon.propTypes = {
|
|
24
|
+
...SelectField.propTypes,
|
|
25
|
+
}
|
|
@@ -19,6 +19,7 @@ import "$cutils";
|
|
|
19
19
|
import React from "$react";
|
|
20
20
|
import SelectDateFormat from "./SelectDateFormat";
|
|
21
21
|
import CurrencyFormat from "./CurrencyFormat";
|
|
22
|
+
import SelectFontIcon from "./SelectFontIcon"
|
|
22
23
|
|
|
23
24
|
const defFormFields = {
|
|
24
25
|
Field,
|
|
@@ -41,6 +42,7 @@ const defFormFields = {
|
|
|
41
42
|
,Tel
|
|
42
43
|
,SelectDateFormat
|
|
43
44
|
,Html
|
|
45
|
+
,SelectFontIcon,
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
export default defFormFields;
|
|
@@ -65,7 +67,8 @@ export {
|
|
|
65
67
|
,Image
|
|
66
68
|
,Tel
|
|
67
69
|
,SelectDateFormat
|
|
68
|
-
,Html
|
|
70
|
+
,Html,
|
|
71
|
+
SelectFontIcon,
|
|
69
72
|
}
|
|
70
73
|
|
|
71
74
|
export const extendFields = (fields)=>{
|
|
@@ -38,33 +38,19 @@ const FontIcon = React.forwardRef(({icon,name,testID,color,iconColor,iconStyle,b
|
|
|
38
38
|
const fStyle = StyleSheet.flatten(style) || {};
|
|
39
39
|
color = theme.Colors.isValid(color)? color : Colors.isValid(iconColor)?iconColor : fStyle.color || theme.colors.text;
|
|
40
40
|
backgroundColor = theme.Colors.isValid(backgroundColor)? backgroundColor : fStyle.backgroundColor || 'transparent';
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const isZocial = isIcon(name,"zocial");
|
|
50
|
-
let Icon = isMaterial ? MaterialIcons :
|
|
51
|
-
isFa ? FontAwesome5 :
|
|
52
|
-
isFontisto ? Fontisto :
|
|
53
|
-
isAnt ? AntDesign :
|
|
54
|
-
isFoundation ? Foundation :
|
|
55
|
-
isIonicons ? Ionicons :
|
|
56
|
-
isOcticons ? Octicons:
|
|
57
|
-
isSimpleLineIcons ? SimpleLineIcons :
|
|
58
|
-
isZocial ? Zocial :
|
|
59
|
-
MaterialCommunityIcons;
|
|
41
|
+
let Icon = MaterialCommunityIcons,iconSetName = "";
|
|
42
|
+
for(let i in IconsSetsByPrefix){
|
|
43
|
+
if(isIcon(name,i)){
|
|
44
|
+
iconSetName = i;
|
|
45
|
+
Icon = fontsObjects[IconsSetsByPrefix[i]] || Icon;
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
60
49
|
if(!icon || !Icon){
|
|
61
50
|
console.warn("Icone non définie pour le composant FontIcon, icon [{0}], merci de spécifier une icone supportée par la liste du module https://github.com/expo/vector-icons/MaterialCommunityIcons".sprintf(icon),props);
|
|
62
51
|
return null;
|
|
63
52
|
}
|
|
64
|
-
const iconName = icon.ltrim("
|
|
65
|
-
.ltrim("fa-").ltrim("ant-").ltrim("fontisto-")
|
|
66
|
-
.ltrim("foundation-").ltrim("ionic-").ltrim("octicons-")
|
|
67
|
-
.ltrim("simple-line-").ltrim("zocial-").trim();
|
|
53
|
+
const iconName = icon.trim().ltrim(iconSetName+"-").ltrim("-").trim();
|
|
68
54
|
return <Icon {...props}
|
|
69
55
|
ref = {ref}
|
|
70
56
|
testID = {testID}
|
|
@@ -102,26 +88,39 @@ export const isIcon = (name,iconSet)=>{
|
|
|
102
88
|
}
|
|
103
89
|
|
|
104
90
|
export default theme.withStyles(FontIcon,{displayName:FontIcon.displayName,mode:'normal'});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
Object.map(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
91
|
+
|
|
92
|
+
export const fontsObjects = {
|
|
93
|
+
MaterialCommunityIcons,
|
|
94
|
+
FontAwesome5,
|
|
95
|
+
AntDesign,
|
|
96
|
+
Fontisto,
|
|
97
|
+
Foundation,
|
|
98
|
+
Ionicons,
|
|
99
|
+
MaterialIcons,
|
|
100
|
+
Octicons,
|
|
101
|
+
SimpleLineIcons,
|
|
102
|
+
Zocial,
|
|
103
|
+
}
|
|
104
|
+
export const fonts = Object.values(fontsObjects).map(f=>f.font);
|
|
105
|
+
export const fontsByIndex = Object.keys(fontsObjects);
|
|
106
|
+
|
|
107
|
+
/*** les prefix des icons sets */
|
|
108
|
+
export const IconsSetsByPrefix = {
|
|
109
|
+
material : "MaterialIcons",
|
|
110
|
+
fa : "FontAwesome5",
|
|
111
|
+
ant : "AntDesign",
|
|
112
|
+
foundation : "Foundation",
|
|
113
|
+
fontisto : "Fontisto",
|
|
114
|
+
ionic : "Ionicons",
|
|
115
|
+
octicons : "Octicons",
|
|
116
|
+
'simple-line' : "SimpleLineIcons",
|
|
117
|
+
zocial : "Zocial",
|
|
118
|
+
}
|
|
119
|
+
export const IconsSetNamesToPrefix = {};
|
|
120
|
+
Object.keys(IconsSetsByPrefix).map((k)=>{
|
|
121
|
+
IconsSetNamesToPrefix[IconsSetsByPrefix[k]] = k;
|
|
122
|
+
})
|
|
123
|
+
export const loadedIconsSetsNames = [];
|
|
125
124
|
|
|
126
125
|
/*** chage les fonts liés à l'application
|
|
127
126
|
* @param {function} filter, le filtre prenant en paramètr ele fontAsset en suite et le nom de la font en question
|
|
@@ -129,14 +128,33 @@ Object.map(fonts,(f,k)=>{
|
|
|
129
128
|
*/
|
|
130
129
|
export function loadFonts(filter) {
|
|
131
130
|
filter = typeof filter =='function'? filter : (f,name,nameLower)=> name.toLowerCase().contains("material") ? true : false;
|
|
132
|
-
return Promise.all(fonts.map(font => {
|
|
131
|
+
return Promise.all(fonts.map((font,index) => {
|
|
133
132
|
if(!isObj(font)) return Promise.reject({message:'Invalid font'});
|
|
133
|
+
const iconSetName = fontsByIndex[index];
|
|
134
134
|
const fontName = Object.keys(font)[0]?.toLowerCase();
|
|
135
|
-
|
|
135
|
+
const iconSetNameLower = iconSetName.toLocaleLowerCase();
|
|
136
|
+
if(!isNonNullString(fontName) || (!iconSetNameLower.toLowerCase().contains("material") && !filter(font,iconSetName,iconSetNameLower))) return Promise.resolve({
|
|
136
137
|
status : false,
|
|
137
138
|
message : 'Font {0} introuvable'.sprintf(fontName)
|
|
138
139
|
});
|
|
139
|
-
return FontAsset.loadAsync(font)
|
|
140
|
-
|
|
140
|
+
return FontAsset.loadAsync(font).then((f)=>{
|
|
141
|
+
loadedIconsSetsNames.push(iconSetName);
|
|
142
|
+
return f;
|
|
143
|
+
});
|
|
144
|
+
}));
|
|
141
145
|
};
|
|
142
|
-
|
|
146
|
+
|
|
147
|
+
/*** retourne la liste des icones qui ont été chargées par l'application */
|
|
148
|
+
export const getLoadedIconsSets = ()=>{
|
|
149
|
+
const loadedIconsSets = {};
|
|
150
|
+
loadedIconsSetsNames.map((iconSetName)=>{
|
|
151
|
+
loadedIconsSets[iconSetName] = {
|
|
152
|
+
prefix : IconsSetNamesToPrefix[iconSetName] || '',
|
|
153
|
+
iconSetName,
|
|
154
|
+
icons : isObj(fontsObjects[iconSetName]?.glyphMap)? Object.keys(fontsObjects[iconSetName]?.glyphMap) : []
|
|
155
|
+
};
|
|
156
|
+
});
|
|
157
|
+
return loadedIconsSets
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export const getLoadedFonts = x=> loadedFontsRef.current;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import React from "$react";
|
|
2
|
+
import Dropdown from "$ecomponents/Dropdown";
|
|
3
|
+
import {defaultObj,defaultVal,isNonNullString} from "$cutils";
|
|
4
|
+
import PropTypes from "prop-types";
|
|
5
|
+
import {getLoadedIconsSets} from "./Font";
|
|
6
|
+
import {View} from "react-native";
|
|
7
|
+
import Icon from "./Icon";
|
|
8
|
+
import Label from "$ecomponents/Label";
|
|
9
|
+
import theme from "$theme";
|
|
10
|
+
import {copyTextToClipboard} from "$clipboard/utils";
|
|
11
|
+
import { StyleSheet } from "react-native";
|
|
12
|
+
|
|
13
|
+
const SelectFontIconComponent = React.forwardRef((props,ref)=>{
|
|
14
|
+
const items = React.useMemo(()=>{
|
|
15
|
+
const sets = getLoadedIconsSets();
|
|
16
|
+
const items = [];
|
|
17
|
+
Object.map(sets,({prefix,iconSetName,icons})=>{
|
|
18
|
+
prefix = typeof prefix =='string'? prefix.trim() : "";
|
|
19
|
+
if(prefix){
|
|
20
|
+
prefix = prefix.rtrim("-")+"-"
|
|
21
|
+
}
|
|
22
|
+
icons.map((icon)=>{
|
|
23
|
+
if(!isNonNullString(icon)) return;
|
|
24
|
+
icon = icon.trim();
|
|
25
|
+
items.push({
|
|
26
|
+
realIcon : icon,
|
|
27
|
+
iconSetName,
|
|
28
|
+
icon : `${prefix}${icon.trim().ltrim("-")}`,
|
|
29
|
+
})
|
|
30
|
+
});
|
|
31
|
+
})
|
|
32
|
+
return items;
|
|
33
|
+
},[])
|
|
34
|
+
return <Dropdown
|
|
35
|
+
dialogProps = {{title:'Sélectionner une icone'}}
|
|
36
|
+
{...props}
|
|
37
|
+
type = {'select'}
|
|
38
|
+
items ={items}
|
|
39
|
+
getItemValue ={({item})=>item.icon}
|
|
40
|
+
renderText = {({item})=>item.icon}
|
|
41
|
+
renderItem = {({item})=>{
|
|
42
|
+
const {icon,iconSetName} = item;
|
|
43
|
+
return <View testID="RN_SELECTFontIconContainer" style={[theme.styles.row,styles.content,theme.styles.justifyContentSpaceBetween,theme.styles.alignItemsCenter]}>
|
|
44
|
+
<View style={[theme.styles.row,theme.styles.justifyContentFlexStart,theme.styles.alignItemsCenter]}>
|
|
45
|
+
<Icon size={35} primary name={icon}/>
|
|
46
|
+
<View>
|
|
47
|
+
<Label textBold>{icon}</Label>
|
|
48
|
+
<Label>{iconSetName}</Label>
|
|
49
|
+
</View>
|
|
50
|
+
</View>
|
|
51
|
+
<Icon size={25} name="content-copy" title={`Copier la valeur [${icon}] dans le presse papier`} onPress={(e)=>{
|
|
52
|
+
copyTextToClipboard(icon);
|
|
53
|
+
}}/>
|
|
54
|
+
</View>
|
|
55
|
+
}}
|
|
56
|
+
/>
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
SelectFontIconComponent.displayName ="SelectFontIconComponent";
|
|
60
|
+
|
|
61
|
+
export default SelectFontIconComponent;
|
|
62
|
+
|
|
63
|
+
SelectFontIconComponent.propTypes = {
|
|
64
|
+
...Dropdown.propTypes,
|
|
65
|
+
imageProps : PropTypes.object, ///les props à appliquer aux images affichées
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const styles = StyleSheet.create({
|
|
69
|
+
content : {
|
|
70
|
+
flexGrow : 1,
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
|
|
@@ -253,7 +253,7 @@ class _Menu extends AppComponent {
|
|
|
253
253
|
children,
|
|
254
254
|
statusBarHeight,
|
|
255
255
|
onDismiss,
|
|
256
|
-
|
|
256
|
+
withScrollView:canHandleScroll,
|
|
257
257
|
overlayAccessibilityLabel,
|
|
258
258
|
sameWidth,
|
|
259
259
|
minWidth:customMinWidth,
|
|
@@ -324,7 +324,7 @@ class _Menu extends AppComponent {
|
|
|
324
324
|
left = windowLayout.width - SCREEN_INDENT - menuLayout.width;
|
|
325
325
|
}
|
|
326
326
|
}
|
|
327
|
-
const
|
|
327
|
+
const withScrollView = canHandleScroll !== false? true : false;
|
|
328
328
|
|
|
329
329
|
// If the menu is larger than available vertical space,
|
|
330
330
|
// calculate the height of scrollable view
|
|
@@ -342,7 +342,7 @@ class _Menu extends AppComponent {
|
|
|
342
342
|
top <= windowLayout.height - top
|
|
343
343
|
) {
|
|
344
344
|
// Scrollable menu should be below the anchor (expands downwards)
|
|
345
|
-
if(
|
|
345
|
+
if(withScrollView){
|
|
346
346
|
scrollableMenuHeight =
|
|
347
347
|
windowLayout.height - top - SCREEN_INDENT - additionalVerticalValue;
|
|
348
348
|
}
|
|
@@ -363,14 +363,14 @@ class _Menu extends AppComponent {
|
|
|
363
363
|
additionalVerticalValue
|
|
364
364
|
) {
|
|
365
365
|
// Scrollable menu should be above the anchor (expands upwards)
|
|
366
|
-
if(
|
|
366
|
+
if(withScrollView){
|
|
367
367
|
scrollableMenuHeight =
|
|
368
368
|
top + anchorLayout.height - SCREEN_INDENT + additionalVerticalValue;
|
|
369
369
|
}
|
|
370
370
|
}
|
|
371
371
|
|
|
372
372
|
// Scrollable menu max height
|
|
373
|
-
if(
|
|
373
|
+
if(withScrollView){
|
|
374
374
|
scrollableMenuHeight = scrollableMenuHeight > windowLayout.height - 2 * SCREEN_INDENT
|
|
375
375
|
? windowLayout.height - 2 * SCREEN_INDENT
|
|
376
376
|
: scrollableMenuHeight;
|
|
@@ -435,7 +435,7 @@ class _Menu extends AppComponent {
|
|
|
435
435
|
opacity: opacityAnimation,
|
|
436
436
|
transform: scaleTransforms,
|
|
437
437
|
borderRadius: theme.roundness,
|
|
438
|
-
...(scrollableMenuHeight &&
|
|
438
|
+
...(scrollableMenuHeight && withScrollView ? { height: scrollableMenuHeight } : {}),
|
|
439
439
|
};
|
|
440
440
|
|
|
441
441
|
//- (sameWidth ? anchorLayout.height : 0)
|
|
@@ -537,7 +537,7 @@ export default Menu;
|
|
|
537
537
|
|
|
538
538
|
Menu.propTypes = {
|
|
539
539
|
minWidth : PropTypes.number,///la longueur minimale du menu
|
|
540
|
-
|
|
540
|
+
withScrollView : PropTypes.bool, //si le contenu est scrollable
|
|
541
541
|
/**
|
|
542
542
|
* Whether the _Menu is currently visible.
|
|
543
543
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.31.
|
|
1
|
+
module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.31.9","repository":{"type":"git","url":"git+https://github.com/borispipo/expo-ui.git"},"homepage":"https://github.com/borispipo/expo-ui#readme"},"@emotion/native":{"version":"11.11.0","url":"https://emotion.sh","license":"MIT"},"@emotion/react":{"version":"11.11.1","url":"https://github.com/emotion-js/emotion/tree/main/packages/react","license":"MIT"},"@expo/html-elements":{"version":"0.5.1","url":"https://github.com/expo/expo/tree/main/packages/html-elements","license":"MIT"},"@expo/metro-config":{"version":"0.10.7","url":"https://github.com/expo/expo.git","license":"MIT"},"@expo/vector-icons":{"version":"13.0.0","url":"https://expo.github.io/vector-icons","license":"MIT"},"@expo/webpack-config":{"version":"19.0.0","url":"https://github.com/expo/expo-cli.git","license":"MIT"},"@faker-js/faker":{"version":"8.0.2","url":"https://github.com/faker-js/faker.git","license":"MIT"},"@fto-consult/common":{"version":"3.32.9","url":"https://github.com/borispipo/common#readme","license":"ISC"},"@pchmn/expo-material3-theme":{"version":"1.3.1","url":"https://github.com/pchmn/expo-material3-theme#readme","license":"MIT"},"@react-native-async-storage/async-storage":{"version":"1.18.2","url":"https://github.com/react-native-async-storage/async-storage#readme","license":"MIT"},"@react-native-community/datetimepicker":{"version":"7.2.0","url":"https://github.com/react-native-community/datetimepicker#readme","license":"MIT"},"@react-native-community/netinfo":{"version":"9.3.10","url":"https://github.com/react-native-netinfo/react-native-netinfo#readme","license":"MIT"},"@react-native/assets-registry":{"version":"0.72.0","url":"git@github.com:facebook/react-native.git","license":"MIT"},"@react-navigation/native":{"version":"6.1.7","url":"https://reactnavigation.org","license":"MIT"},"@react-navigation/native-stack":{"version":"6.9.13","url":"https://github.com/software-mansion/react-native-screens#readme","license":"MIT"},"@shopify/flash-list":{"version":"1.4.3","url":"https://shopify.github.io/flash-list/","license":"MIT"},"apexcharts":{"version":"3.42.0","url":"https://apexcharts.com","license":"MIT"},"babel-plugin-inline-dotenv":{"version":"1.7.0","url":"https://github.com/brysgo/babel-plugin-inline-dotenv#readme","license":"ISC"},"babel-plugin-module-resolver":{"version":"5.0.0","url":"https://github.com/tleunen/babel-plugin-module-resolver.git","license":"MIT"},"expo":{"version":"49.0.9","url":"https://github.com/expo/expo/tree/main/packages/expo","license":"MIT"},"expo-camera":{"version":"13.4.2","url":"https://docs.expo.dev/versions/latest/sdk/camera/","license":"MIT"},"expo-clipboard":{"version":"4.3.1","url":"https://docs.expo.dev/versions/latest/sdk/clipboard","license":"MIT"},"expo-font":{"version":"11.4.0","url":"https://docs.expo.dev/versions/latest/sdk/font/","license":"MIT"},"expo-image-picker":{"version":"14.3.2","url":"https://docs.expo.dev/versions/latest/sdk/imagepicker/","license":"MIT"},"expo-linking":{"version":"5.0.2","url":"https://docs.expo.dev/versions/latest/sdk/linking","license":"MIT"},"expo-sqlite":{"version":"11.3.2","url":"https://docs.expo.dev/versions/latest/sdk/sqlite/","license":"MIT"},"expo-status-bar":{"version":"1.6.0","url":"https://docs.expo.dev/versions/latest/sdk/status-bar/","license":"MIT"},"expo-system-ui":{"version":"2.4.0","url":"https://docs.expo.dev/versions/latest/sdk/system-ui","license":"MIT"},"expo-web-browser":{"version":"12.3.2","url":"https://docs.expo.dev/versions/latest/sdk/webbrowser/","license":"MIT"},"file-saver":{"version":"2.0.5","url":"https://github.com/eligrey/FileSaver.js#readme","license":"MIT"},"fs-extra":{"version":"11.1.1","url":"https://github.com/jprichardson/node-fs-extra","license":"MIT"},"google-libphonenumber":{"version":"3.2.33","url":"https://ruimarinho.github.io/google-libphonenumber/","license":"(MIT AND Apache-2.0)"},"htmlparser2-without-node-native":{"version":"3.9.2","url":"git://github.com/fb55/htmlparser2.git","license":"MIT"},"pdfmake":{"version":"0.2.7","url":"http://pdfmake.org","license":"MIT"},"process":{"version":"0.11.10","url":"git://github.com/shtylman/node-process.git","license":"MIT"},"prop-types":{"version":"15.8.1","url":"https://facebook.github.io/react/","license":"MIT"},"react":{"version":"18.2.0","url":"https://reactjs.org/","license":"MIT"},"react-content-loader":{"version":"6.2.1","url":"https://github.com/danilowoz/react-content-loader","license":"MIT"},"react-dom":{"version":"18.2.0","url":"https://reactjs.org/","license":"MIT"},"react-native":{"version":"0.72.4","license":"MIT"},"react-native-big-list":{"version":"1.6.1","url":"https://marcocesarato.github.io/react-native-big-list-docs/","license":"GPL-3.0-or-later"},"react-native-blob-util":{"version":"0.18.6","url":"https://github.com/RonRadtke/react-native-blob-util","license":"MIT"},"react-native-gesture-handler":{"version":"2.12.1","url":"https://github.com/software-mansion/react-native-gesture-handler#readme","license":"MIT"},"react-native-iphone-x-helper":{"version":"1.3.1","url":"https://github.com/ptelad/react-native-iphone-x-helper#readme","license":"MIT"},"react-native-mime-types":{"version":"2.4.0","license":"MIT"},"react-native-paper":{"version":"5.10.4","url":"https://callstack.github.io/react-native-paper","license":"MIT"},"react-native-paper-dates":{"version":"0.18.26","url":"https://github.com/web-ridge/react-native-paper-dates#readme","license":"MIT"},"react-native-reanimated":{"version":"3.3.0","url":"https://github.com/software-mansion/react-native-reanimated#readme","license":"MIT"},"react-native-safe-area-context":{"version":"4.6.3","url":"https://github.com/th3rdwave/react-native-safe-area-context#readme","license":"MIT"},"react-native-screens":{"version":"3.22.1","url":"https://github.com/software-mansion/react-native-screens#readme","license":"MIT"},"react-native-svg":{"version":"13.9.0","url":"https://github.com/react-native-community/react-native-svg","license":"MIT"},"react-native-web":{"version":"0.19.7","url":"git://github.com/necolas/react-native-web.git","license":"MIT"},"react-native-webview":{"version":"13.2.2","url":"https://github.com/react-native-webview/react-native-webview#readme","license":"MIT"},"react-virtuoso":{"version":"4.5.1","url":"https://virtuoso.dev/","license":"MIT"},"sharp-cli":{"version":"4.1.1","url":"https://github.com/vseventer/sharp-cli","license":"MIT"},"tippy.js":{"version":"6.3.7","url":"https://atomiks.github.io/tippyjs/","license":"MIT"},"uninstall":{"version":"0.0.0","license":"MIT"},"websql":{"version":"2.0.3","url":"git://github.com/nolanlawson/node-websql.git","license":"Apache-2.0"},"xlsx":{"version":"0.18.5","url":"https://sheetjs.com/","license":"Apache-2.0"}};
|