@fto-consult/expo-ui 6.95.2 → 7.0.0
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
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@fto-consult/expo-ui",
|
3
|
-
"version": "
|
3
|
+
"version": "7.0.0",
|
4
4
|
"description": "Bibliothèque de composants UI Expo,react-native",
|
5
5
|
"main": "main",
|
6
6
|
"scripts": {
|
@@ -71,7 +71,7 @@
|
|
71
71
|
"@expo/html-elements": "^0.5.1",
|
72
72
|
"@expo/vector-icons": "^13.0.0",
|
73
73
|
"@faker-js/faker": "^8.0.2",
|
74
|
-
"@fto-consult/common": "^3.
|
74
|
+
"@fto-consult/common": "^3.70.0",
|
75
75
|
"@pchmn/expo-material3-theme": "^1.3.1",
|
76
76
|
"@react-native-async-storage/async-storage": "1.18.2",
|
77
77
|
"@react-native-community/datetimepicker": "7.2.0",
|
@@ -42,7 +42,7 @@ export const usePrepareProps = (props)=>{
|
|
42
42
|
if(!id || !foreignKeyTable){
|
43
43
|
readOnly = true;
|
44
44
|
}
|
45
|
-
const fetchArgs = {type,columnType:type,isStructData,fetch,foreignKeyTable,foreignKeyColumn,data,id
|
45
|
+
const fetchArgs = {type,columnType:type,isStructData,fetch,foreignKeyTable,foreignKeyColumn,data,id};
|
46
46
|
const checkIfAllowed = ()=>{
|
47
47
|
if((isNonNullString(perm))){
|
48
48
|
if(!Auth.isAllowedFromString(perm))return false;
|
@@ -62,7 +62,7 @@ export const usePrepareProps = (props)=>{
|
|
62
62
|
return Promise.reject({msg:`type de données retournée par la fonction fetchForeignKeyData invalide, paramètres : table:${foreignKeyTable}, value:${id}`,fetchForeignData,foreignKeyTable,foreignKeyColumn,id,data});
|
63
63
|
}
|
64
64
|
const fetchData = (opts)=>{
|
65
|
-
return Promise.resolve(typeof fetchForeignData === 'function'? fetchForeignData({...fetchArgs,...defaultObj(opts)}) : undefined)
|
65
|
+
return Promise.resolve(typeof fetchForeignData === 'function'? fetchForeignData({...fetchArgs,...defaultObj(opts)}) : undefined);
|
66
66
|
}
|
67
67
|
const onPressLink = (event)=>{
|
68
68
|
React.stopEventPropagation(event);
|
@@ -71,7 +71,7 @@ export const usePrepareProps = (props)=>{
|
|
71
71
|
const r = typeof onPress =='function'? onPress(args) : undefined;
|
72
72
|
if(r === false) return;
|
73
73
|
openPreloader("traitement de la requête...");
|
74
|
-
Promise.resolve(r).then((opts)=>fetchData({...args,...defaultObj(opts)})).finally(closePreloader);
|
74
|
+
Promise.resolve(r).then((opts)=>fetchData({...args,...defaultObj(opts)})).then(navigate).finally(closePreloader);
|
75
75
|
}
|
76
76
|
rest.style = [rest.style,_styles.cursorPointer];
|
77
77
|
return {...rest,id,disabled,fetchData,navigate,isAllowed:checkIfAllowed,readOnly,testID,onPressLink}
|
package/src/context/Provider.js
CHANGED
@@ -272,16 +272,17 @@ const Provider = ({children,getTableData,handleHelpScreen,navigation,swrConfig,a
|
|
272
272
|
|
273
273
|
const isKeyboardShownRef = React.useRef(false);
|
274
274
|
const {screens} = navigation;
|
275
|
+
navigation.containerProps = defaultObj(navigation.containerProps);
|
275
276
|
navigation.screens = React.useMemo(()=>{
|
276
277
|
const r = prepareScreens({
|
277
278
|
tables:tablesData,
|
278
279
|
screens,
|
280
|
+
navigationContainerProps : navigation.containerProps,
|
279
281
|
TableDataScreen:components.TableDataScreen || components.TableDataScreenItem,
|
280
282
|
TableDataScreenList:components.TableDataScreenList||components.TableDataListScreen,
|
281
283
|
});
|
282
284
|
return [...r,...getMainScreens(handleHelpScreen)];
|
283
285
|
},[]);
|
284
|
-
navigation.containerProps = defaultObj(navigation.containerProps);
|
285
286
|
const {linking} = navigation;
|
286
287
|
React.useEffect(()=>{
|
287
288
|
const onScreenFocus = ({sanitizedName})=>{
|
package/src/context/TableData.js
CHANGED
@@ -4,16 +4,19 @@
|
|
4
4
|
import {getRouteOptions} from "$cnavigation";
|
5
5
|
import React from "$react";
|
6
6
|
import useExpo from "./hooks";
|
7
|
-
import {defaultStr,defaultBool,isObj,isNonNullString} from "$cutils";
|
8
|
-
import {getTableDataListRouteName,getTableDataRouteName,tableDataRouteName} from "$enavigation/utils";
|
7
|
+
import {defaultStr,defaultBool,isObj,extendObj,isNonNullString,defaultObj,defaultVal} from "$cutils";
|
8
|
+
import {getTableDataListRouteName,getTableDataRouteName,tableDataRouteName,tableDataLinkRouteName,sanitizeName} from "$enavigation/utils";
|
9
9
|
import {Form as FormLoader} from "$ecomponents/ContentLoader";
|
10
|
-
import { tableDataLinkRouteName } from "../navigation/utils";
|
11
10
|
import { useEffect,useState } from "react";
|
12
11
|
import { usePrepareProps } from "../components/TableLink";
|
13
12
|
import View from "$ecomponents/View";
|
14
13
|
import Label from "$ecomponents/Label";
|
15
14
|
import theme from "$theme";
|
16
15
|
import notify from "$notify";
|
16
|
+
import appConfig from "$capp/config";
|
17
|
+
import Screen from "$eScreen";
|
18
|
+
import { getStateFromPath } from "@react-navigation/native";
|
19
|
+
|
17
20
|
|
18
21
|
export function TableDataListScreen({tableName,table,screenName,...props}){
|
19
22
|
const {getTable} = useExpo();
|
@@ -34,6 +37,8 @@ export function TableDataListScreen({tableName,table,screenName,...props}){
|
|
34
37
|
|
35
38
|
TableDataListScreen.Stack = false;
|
36
39
|
|
40
|
+
const allFoundScreens = {}
|
41
|
+
|
37
42
|
const loopForScreen = (lScreens,screens,foundTables)=>{
|
38
43
|
screens = Array.isArray(screens)? screens : [];
|
39
44
|
foundTables = isObj(foundTables) ? foundTables : {};
|
@@ -50,15 +55,45 @@ const loopForScreen = (lScreens,screens,foundTables)=>{
|
|
50
55
|
}
|
51
56
|
|
52
57
|
/****
|
58
|
+
///@see https://reactnavigation.org/docs/configuring-links : for links configuration
|
53
59
|
prepare les différents écrans de l'application
|
54
60
|
@param {object} tables, les différentes tables de l'application
|
55
61
|
@param {Array} screens, les écrancs initiaux de l'application
|
56
62
|
@param {component} TableDataScreen, le composant react à utiliser pour le rendu TableDataScreen, d'un item du tableData
|
57
63
|
@return {Array}, la liste des écrans apprêtés
|
58
64
|
*/
|
59
|
-
export function prepareScreens ({tables,screens:screensProps,TableDataScreen,TableDataScreenList}){
|
60
|
-
const foundTables =
|
65
|
+
export function prepareScreens ({tables,screens:screensProps,navigationContainerProps:containerProps,TableDataScreen,TableDataScreenList}){
|
66
|
+
const foundTables = allFoundScreens;
|
67
|
+
Object.map(foundTables,(v,i)=>{delete foundTables[i]});
|
61
68
|
const screens = [];
|
69
|
+
|
70
|
+
///linking inintialization for config
|
71
|
+
containerProps.linking = defaultObj(containerProps.linking);
|
72
|
+
containerProps.linking.prefixes = Array.isArray(containerProps.linking.prefixes)? containerProps.linking.prefixes : [];
|
73
|
+
containerProps.linking.config = defaultObj(containerProps.linking.config);
|
74
|
+
if(!containerProps.linking.prefixes.length){
|
75
|
+
const appName = sanitizeName(appConfig.name);
|
76
|
+
if(appName){
|
77
|
+
containerProps.linking.prefixes.push(`${appName.rtrim("://")}://`);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
const {getStateFromPath:cGetStateFromPath} = containerProps.linking;
|
81
|
+
containerProps.linking.getStateFromPath = (path,config)=>{
|
82
|
+
const state = getStateFromPath(path,config);
|
83
|
+
if(typeof cGetStateFromPath =="function"){
|
84
|
+
extendObj(true,true,state,cGetStateFromPath(path,config));
|
85
|
+
}
|
86
|
+
const home = sanitizeName("Home");
|
87
|
+
state.routeNames = Array.isArray(state.routeNames)? state.routeNames : [];
|
88
|
+
state.routes = Array.isArray(state.routes)? state.routes : []
|
89
|
+
if(!state.routeNames.length){
|
90
|
+
state.routeNames.push(home);
|
91
|
+
state.routes.unshift({
|
92
|
+
key : home, name : home,
|
93
|
+
})
|
94
|
+
}
|
95
|
+
return state;
|
96
|
+
}
|
62
97
|
TableDataScreenComponentRef.current = React.isComponent(TableDataScreen)? TableDataScreen : TableDataScreenComponentRef.current;
|
63
98
|
TableDataScreenComponentRef.List = React.isComponent(TableDataScreenList)? TableDataScreenList : TableDataScreenComponentRef.List;
|
64
99
|
const Modal = defaultBool(TableDataScreenComponentRef.current?.Modal,TableDataScreenComponentRef.current?.modal,true)
|
@@ -71,77 +106,97 @@ export function prepareScreens ({tables,screens:screensProps,TableDataScreen,Tab
|
|
71
106
|
const screenName = getTableDataRouteName(i);
|
72
107
|
const listScreenName = getTableDataListRouteName(i);
|
73
108
|
if(!foundTables[screenName]){
|
74
|
-
|
109
|
+
foundTables[screenName] = {
|
75
110
|
Component : TableDataScreenItem,
|
76
111
|
screenName,
|
77
112
|
Modal
|
78
|
-
}
|
79
|
-
foundTables[screenName]
|
113
|
+
};
|
114
|
+
screens.push(foundTables[screenName]);
|
80
115
|
} else if(React.isComponent(foundTables[screenName])){
|
81
116
|
foundTables[screenName].Modal = defaultBool(foundTables[screenName]?.Modal,foundTables[screenName].modal,Modal)
|
82
117
|
}
|
83
118
|
if(!foundTables[listScreenName] && table.datagrid !== false){
|
84
|
-
|
119
|
+
foundTables[listScreenName] = {
|
85
120
|
Component : TableDataListScreen,
|
86
121
|
screenName : listScreenName,
|
87
122
|
Modal : ModalList,
|
88
123
|
withFab,
|
89
124
|
withNotifications,
|
90
|
-
}
|
91
|
-
foundTables[listScreenName]
|
125
|
+
};
|
126
|
+
screens.push(foundTables[listScreenName]);
|
92
127
|
}
|
93
128
|
});
|
94
129
|
if(!foundTables[tableDataLinkRouteName]){
|
95
|
-
|
130
|
+
foundTables[tableDataLinkRouteName] = {
|
96
131
|
Component : TableDataLinkScreen,
|
97
132
|
screenName : tableDataLinkRouteName,
|
98
133
|
Modal,
|
99
|
-
}
|
134
|
+
};
|
135
|
+
screens.push(foundTables[tableDataLinkRouteName])
|
100
136
|
}
|
101
137
|
return screens;
|
102
138
|
}
|
103
139
|
|
104
140
|
export {tableDataRouteName};
|
105
141
|
|
142
|
+
|
106
143
|
const TableDataScreenComponentRef = {current:null};
|
107
|
-
export const TableDataScreenItem = (props)=>{
|
144
|
+
export const TableDataScreenItem = ({fromTableDataLink,...props})=>{
|
108
145
|
const Item = React.useMemo(()=>{
|
109
146
|
return TableDataScreenComponentRef.current;
|
110
147
|
},[])
|
111
148
|
if(!React.isComponent(Item)) {
|
112
149
|
throw "Impossible de rendre le composant TableDataScreen, car la fonction registerApp n'a pas été initialisé avec un composant devant servir pour le rendu des TableData screens item";
|
113
150
|
}
|
114
|
-
const {params,data,tableName:tbName} = getRouteOptions(props);
|
151
|
+
const {params:cParams,data,tableName:tbName,table:tb2} = fromTableDataLink===true ? props : getRouteOptions(props);
|
152
|
+
const params = extendObj({},props.params,cParams);
|
115
153
|
const {getTable} = useExpo();
|
116
|
-
const tableName = defaultStr(params?.tableName,params?.table,tbName);
|
154
|
+
const tableName = defaultStr(params?.tableName,params?.table,tbName,tb2,props.tableName,props?.table);
|
117
155
|
const tableObj = getTable(tableName);
|
118
156
|
if(!isObj(tableObj)){
|
119
|
-
|
157
|
+
return <ScreenError {...props} tableName={tableName}/>
|
120
158
|
}
|
121
159
|
return <Item testID={"RN_TableDataScreenItem_"+(defaultStr(tableName)).toUpperCase()}{...props} tableObj={tableObj} data={data} tableName={tableName} {...params}/>
|
122
160
|
}
|
123
161
|
|
124
162
|
TableDataScreenItem.displayName = "TableDataScreenItem";
|
125
163
|
|
126
|
-
export function TableDataLinkScreen(
|
127
|
-
const {
|
164
|
+
export function TableDataLinkScreen(_p){
|
165
|
+
const {params,...p} = getRouteOptions(_p);
|
166
|
+
const foreignKeyTable = params.foreignKeyTable = params.tableName = defaultStr(params.foreignKeyTable,params?.tableName,params.table,p.foreignKeyTable,p.tableName,p.table);
|
167
|
+
const foreignKeyColumn = params.foreignKeyColumn = defaultStr(params.foreignKeyColumn,p.foreignKeyColumn);
|
168
|
+
const id = params.id = defaultVal(params.id,p.id,params.value,p.id);
|
169
|
+
const {navigate,fetchData,isAllowed,...props} = usePrepareProps({...p,...params,foreignKeyTable,foreignKeyColumn,id});
|
128
170
|
const [content,setContent] = useState(null);
|
129
171
|
const [data,setData] = useState(null);
|
130
172
|
const isLoading = !isObj(data);
|
173
|
+
params.data = data;
|
131
174
|
useEffect(()=>{
|
132
175
|
if(!isAllowed()){
|
133
176
|
setContent(<NotAllowed />)
|
134
177
|
return ()=>{};
|
135
178
|
}
|
136
|
-
fetchData().then(setData).catch(notify.error);
|
179
|
+
fetchData().then((data)=>{setData(data)}).catch(notify.error);
|
137
180
|
return ()=>{}
|
138
|
-
},[])
|
139
|
-
|
181
|
+
},[]);
|
182
|
+
const Component = React.useMemo(()=>{
|
183
|
+
const tableScreenName = getTableDataRouteName(foreignKeyTable);
|
184
|
+
const tableScreenP = tableScreenName && allFoundScreens[tableScreenName] || null;
|
185
|
+
if(!tableScreenP) return TableDataScreenItem;
|
186
|
+
if(React.isComponent(tableScreenP)) return tableScreenP;
|
187
|
+
if(React.isComponent(tableScreenP?.Component)){
|
188
|
+
return tableScreenP.Component;
|
189
|
+
}
|
190
|
+
return TableDataScreenItem;
|
191
|
+
},[foreignKeyTable]);
|
192
|
+
return <Component
|
140
193
|
children = {content||<FormLoader/>}
|
141
194
|
isLoading = {isLoading}
|
142
|
-
|
143
|
-
tableName = {defaultStr(props.foreignKeyTable,props.tableName,props.table)}
|
195
|
+
{..._p}
|
144
196
|
{...props}
|
197
|
+
fromTableDataLink
|
198
|
+
params = {params}
|
199
|
+
data = {data}
|
145
200
|
/>
|
146
201
|
}
|
147
202
|
|
@@ -152,4 +207,15 @@ function NotAllowed(){
|
|
152
207
|
return <View style={[theme.styles.flex1,theme.styles.h100,theme.styles.w100,theme.styles.justifyContentCenter,theme.styles.alignItemsCenter]}>
|
153
208
|
<Label error textBold fontSize={18}>Vous n'êtes pas autorisé à accéder à la resource demandée!!!Veuillez contacter votre administrateur.</Label>
|
154
209
|
</View>
|
210
|
+
}
|
211
|
+
|
212
|
+
export function ScreenError({tableName,...props}){
|
213
|
+
console.log("table data link with tableName ",tableName," has error for props ",props);
|
214
|
+
return <Screen {...props}>
|
215
|
+
<View style={[theme.styles.w100,theme.styles.p2,theme.styles.h100,theme.styles.justifyContentCenter,theme.styles.textAlignCenter]}>
|
216
|
+
<Label textBold error fontSize={18}>
|
217
|
+
{`Objet table invalide, impossible de rendre le contenu de la tableDataScreen liée à la table [${tableName?.toString()}]`}
|
218
|
+
</Label>
|
219
|
+
</View>
|
220
|
+
</Screen>
|
155
221
|
}
|
@@ -6,6 +6,8 @@ import {defaultObj} from "$cutils";
|
|
6
6
|
import {useDrawer} from "$ecomponents/Drawer";
|
7
7
|
import Icon from "$ecomponents/Icon";
|
8
8
|
import {useGetComponent} from "$econtext/hooks";
|
9
|
+
import {navigate as cNavigate,sanitizeName} from "$cnavigation";
|
10
|
+
import { StackActions } from '@react-navigation/native';
|
9
11
|
|
10
12
|
export * from "./utils";
|
11
13
|
|
@@ -20,10 +22,23 @@ const AppBarLayout = React.forwardRef(({backActionProps,withDrawer,withNotificat
|
|
20
22
|
Notifications = {withNotifications? Notifications:null}
|
21
23
|
{...props}
|
22
24
|
onBackActionPress = {(args)=>{
|
23
|
-
const {canGoBack,goBack} = args;
|
25
|
+
const {canGoBack,navigation,goBack} = args;
|
24
26
|
if(typeof props.onPress ==='function' && props.onPress(args) === false) return false;
|
25
|
-
if((backAction === true || backActionProps?.back === true)
|
26
|
-
|
27
|
+
if((backAction === true || backActionProps?.back === true)){
|
28
|
+
if(canGoBack()){
|
29
|
+
goBack();
|
30
|
+
return false;
|
31
|
+
}
|
32
|
+
const home = sanitizeName("Home");
|
33
|
+
console.log(navigation," is navigation heeee ",args);
|
34
|
+
if(typeof navigation?.dispatch =='function'){
|
35
|
+
try {
|
36
|
+
navigation.dispatch(StackActions.popToTop());
|
37
|
+
} catch(e){
|
38
|
+
console.log(e," has générated errordd for navigation");
|
39
|
+
//cNavigate(home);
|
40
|
+
}
|
41
|
+
}
|
27
42
|
return false;
|
28
43
|
}
|
29
44
|
if(!drawerRef || !drawerRef?.current) return false;
|
package/src/navigation/Stack.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
//import { createNativeStackNavigator } from '@react-navigation/native-stack';
|
2
|
-
import { createStackNavigator
|
2
|
+
import { createStackNavigator} from '@react-navigation/stack';
|
3
3
|
|
4
4
|
export const Stack = createStackNavigator()
|
5
5
|
//export const Stack = createNativeStackNavigator();
|
6
6
|
|
7
7
|
export default Stack;
|
8
8
|
|
9
|
-
export
|
9
|
+
export * from "@react-navigation/stack";
|
@@ -1 +1 @@
|
|
1
|
-
module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.
|
1
|
+
module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.95.2","repository":{"type":"git","url":"git+https://github.com/borispipo/expo-ui.git"},"homepage":"https://github.com/borispipo/expo-ui#readme"},"@babel/plugin-proposal-export-namespace-from":{"version":"7.18.9","url":"https://babel.dev/docs/en/next/babel-plugin-proposal-export-namespace-from","license":"MIT"},"@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.69.0","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.9","url":"https://reactnavigation.org","license":"MIT"},"@react-navigation/native-stack":{"version":"6.9.17","url":"https://github.com/software-mansion/react-native-screens#readme","license":"MIT"},"@react-navigation/stack":{"version":"6.3.20","url":"https://reactnavigation.org/docs/stack-navigator/","license":"MIT"},"@shopify/flash-list":{"version":"1.4.3","url":"https://shopify.github.io/flash-list/","license":"MIT"},"apexcharts":{"version":"3.44.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.21","url":"https://github.com/expo/expo/tree/main/packages/expo","license":"MIT"},"expo-camera":{"version":"13.4.4","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-sharing":{"version":"11.5.0","url":"https://docs.expo.dev/versions/latest/sdk/sharing/","license":"MIT"},"expo-sqlite":{"version":"11.3.3","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.2.0","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"},"is-plain-obj":{"version":"4.1.0","license":"MIT"},"js-base64":{"version":"3.7.5","license":"BSD-3-Clause"},"pdfmake":{"version":"0.2.8","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.6","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-get-random-values":{"version":"1.9.0","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.11.3","url":"https://callstack.github.io/react-native-paper","license":"MIT"},"react-native-paper-dates":{"version":"0.20.4","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.9","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.6.2","url":"https://virtuoso.dev/","license":"MIT"},"sharp-cli":{"version":"2.1.0","url":"https://github.com/vseventer/sharp-cli","license":"MIT"},"tippy.js":{"version":"6.3.7","url":"https://atomiks.github.io/tippyjs/","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"}};
|