@fto-consult/expo-ui 6.95.2 → 7.0.1

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": "6.95.2",
3
+ "version": "7.0.1",
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.69.0",
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,value: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).then(navigate)
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}
@@ -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})=>{
@@ -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 = defaultObj(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
- screens.push({
109
+ foundTables[screenName] = {
75
110
  Component : TableDataScreenItem,
76
111
  screenName,
77
112
  Modal
78
- })
79
- foundTables[screenName] = TableDataScreenItem;
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
- screens.push({
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] = TableDataListScreen;
125
+ };
126
+ screens.push(foundTables[listScreenName]);
92
127
  }
93
128
  });
94
129
  if(!foundTables[tableDataLinkRouteName]){
95
- screens.push({
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
- throw "Objet table invalide, impossible de rendre le contenu de la tableDataScreen liée à la table "+tableName;
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(p){
127
- const {navigate,fetchData,isAllowed,...props} = usePrepareProps(p);
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
- return <TableDataScreenItem
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
- data = {isLoading ? {}:data}
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) && canGoBack()){
26
- goBack();
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;
@@ -1,9 +1,9 @@
1
1
  //import { createNativeStackNavigator } from '@react-navigation/native-stack';
2
- import { createStackNavigator,CardStyleInterpolators } from '@react-navigation/stack';
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 {CardStyleInterpolators};
9
+ export * from "@react-navigation/stack";
@@ -1 +1 @@
1
- module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.93.0","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.68.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"}};
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"}};