@fto-consult/expo-ui 6.90.2 → 6.91.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": "6.90.2",
3
+ "version": "6.91.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.65.12",
74
+ "@fto-consult/common": "^3.66.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",
@@ -3,7 +3,7 @@ import * as events from "./evx";
3
3
 
4
4
  export const sanitize = (event)=>{
5
5
  if(!isNonNullString(event)) return "";
6
- return event.trim().toSnackCase();
6
+ return event.trim().toSnakeCase();
7
7
  }
8
8
  export * from "./evx";
9
9
 
@@ -0,0 +1,21 @@
1
+ import View from "$ecomponents/View";
2
+ import {forwardRef} from "react";
3
+ import { StyleSheet } from "react-native";
4
+
5
+ const HStackComponent = forwardRef(({style,...props},ref)=>{
6
+ return <View ref={ref} style={[styles.container,style]} {...props}/>
7
+ });
8
+
9
+ HStackComponent.displayName = "HStackComponent";
10
+
11
+ export default HStackComponent;
12
+
13
+ const styles = StyleSheet.create({
14
+ container : {
15
+ flexDirection:"row",
16
+ flexWrap : "wrap",
17
+ columnGap : 5,
18
+ alignItems : "center",
19
+ justifyContent : "flex-start",
20
+ }
21
+ })
@@ -0,0 +1,19 @@
1
+ import View from "$ecomponents/View";
2
+ import {forwardRef} from "react";
3
+ import { StyleSheet } from "react-native";
4
+
5
+ const VStackComponent = forwardRef(({style,...props},ref)=>{
6
+ return <View ref={ref} style={[styles.container,style]} {...props}/>
7
+ });
8
+
9
+ VStackComponent.displayName = "VStackComponent";
10
+
11
+ export default VStackComponent;
12
+
13
+ const styles = StyleSheet.create({
14
+ container : {
15
+ flexDirection:"column",
16
+ alignItems : "flex-start",
17
+ justifyContent : "flex-start",
18
+ }
19
+ })
@@ -0,0 +1,3 @@
1
+ export {default as VStack} from "./VStack";
2
+
3
+ export {default as HStack} from "./HStack";
@@ -18,59 +18,64 @@ import useContext from "$econtext/hooks";
18
18
  /***** la fonction fetchForeignData permet de spécifier s'il s'agit d'une données de structure où non
19
19
  dans le champ isStructData
20
20
  */
21
- const TableLinKComponent = React.forwardRef((props,ref)=>{
21
+ const TableLinKComponent = React.forwardRef(({containerProps,children,labelProps,...props},ref)=>{
22
+ const {testID,onPressLink,disabled,readOnly,fetchData,navigate,isAllowed:checkIfAllowed,Component,...rest} = usePrepareProps(props);
23
+ containerProps = defaultObj(containerProps);
24
+ labelProps = defaultObj(labelProps);
25
+ const CP = disabled || readOnly ? View : Pressable;
26
+ return <CP testID={testID} onLongPres={(e)=>React.stopEventPropagation(e)} {...containerProps} onPress={disabled || readOnly? undefined : onPressLink} style={[styles.container,containerProps.style]}>
27
+ <Tooltip testID={testID+"_Tooltip"} {...rest} style={[rest.style,{pointerEvents: disabled || readOnly ? 'none' : 'auto'}]} Component={Component} onPress={disabled || readOnly?undefined:onPressLink} ref={ref} readOnly={readOnly} disabled = {disabled}>
28
+ <Label testID={testID+"_Label"} underlined primary {...labelProps} style={[_styles.lh15,labelProps.style]} disabled={disabled} readOnly={readOnly}>{children}</Label>
29
+ </Tooltip>
30
+ </CP>
31
+ });
32
+
33
+ export const usePrepareProps = (props)=>{
22
34
  const {components:{tableLinkPropsMutator}} = useContext();
23
- let {disabled,readOnly,labelProps,server,containerProps,isStructData,type,perm,id,fetchForeignData,foreignKeyTable,foreignKeyColumn,data,testID,Component,routeName,routeParams,component,primary,triggerProps,onPress,children, ...rest} = tableLinkPropsMutator(props);
35
+ let {disabled,readOnly,labelProps,server,isStructData,type,perm,isAllowed,id,fetchForeignData,foreignKeyTable,foreignKeyColumn,data,testID,Component,routeName,routeParams,component,primary,triggerProps,onPress, ...rest} = tableLinkPropsMutator(props);
24
36
  testID = defaultStr(testID,"RN_TableDataLinkContainer")
25
37
  foreignKeyTable = defaultStr(foreignKeyTable).trim();
26
38
  foreignKeyColumn = defaultStr(foreignKeyColumn).trim();
27
39
  isStructData = isStructData || defaultStr(type).toLowerCase().replaceAll("_","").replaceAll("-","").includes("structdata");
28
- rest = defaultObj(rest);
29
- containerProps = defaultObj(containerProps)
30
- labelProps = defaultObj(labelProps);
31
40
  data = defaultObj(data);
32
41
  id = typeof id =='number'? String(id) : defaultStr(id);
33
42
  if(!id || !foreignKeyTable){
34
43
  readOnly = true;
35
44
  }
36
- const pointerEvents = disabled || readOnly ? 'none' : 'auto';
37
- const onPressLink = (event)=>{
38
- React.stopEventPropagation(event);
45
+ const fetchArgs = {type,columnType:type,isStructData,fetch,foreignKeyTable,foreignKeyColumn,data,id,value:id};
46
+ const checkIfAllowed = ()=>{
39
47
  if((isNonNullString(perm))){
40
- if(!Auth.isAllowedFromString(perm))return;
48
+ if(!Auth.isAllowedFromString(perm))return false;
41
49
  } else {
42
- if(!Auth[isStructData?"isStructDataAllowed":"isTableDataAllowed"]({table:foreignKeyTable,action:'read'})) return;
50
+ if(typeof isAllowed ==="function"){
51
+ if(!isAllowed(args)) return false;
52
+ } else if(!Auth[isStructData?"isStructDataAllowed":"isTableDataAllowed"]({table:foreignKeyTable,action:'read'})) return false;
43
53
  }
44
- const args = {...React.getOnPressArgs(event),...rest,type,columnType:type,isStructData,fetch,foreignKeyTable,foreignKeyColumn,data,id,value:id};
45
- let r = typeof onPress =='function'? onPress(args) : undefined;
46
- if(r === false) return;
47
- const cb = (a)=>{
48
- const r2 = typeof fetchForeignData === 'function'? fetchForeignData({...args,...defaultObj(a)}) : undefined;
49
- if(isPromise(r2)){
50
- return r2.then((data)=>{
51
- const nav = isStructData ? navigateToStructData : navigateToTableData;
52
- if(isObj(data) && (isNonNullString(foreignKeyColumn) ? data[foreignKeyColumn] !== undefined:true)){
53
- nav({tableName:foreignKeyTable,isStructData,data});
54
- }
55
- });
56
- }
57
- return Promise.reject({msg:'type de données retournée par la fonction fetchForeignKeyData invalide',fetchForeignData,foreignKeyTable,foreignKeyColumn,id,data});
54
+ return true;
55
+ }
56
+ const navigate = (data)=>{
57
+ const nav = isStructData ? navigateToStructData : navigateToTableData;
58
+ if(isObj(data) && (isNonNullString(foreignKeyColumn) ? data[foreignKeyColumn] !== undefined:true)){
59
+ nav({tableName:foreignKeyTable,isStructData,data});
60
+ return Promise.resolve({data,foreignKeyTable});
58
61
  }
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
+ }
64
+ const fetchData = (opts)=>{
65
+ return Promise.resolve(typeof fetchForeignData === 'function'? fetchForeignData({...fetchArgs,...defaultObj(opts)}) : undefined).then(navigate)
66
+ }
67
+ const onPressLink = (event)=>{
68
+ React.stopEventPropagation(event);
69
+ const args = {...React.getOnPressArgs(event),...fetchArgs};
70
+ if(checkIfAllowed() !== true) return;
71
+ const r = typeof onPress =='function'? onPress(args) : undefined;
72
+ if(r === false) return;
59
73
  openPreloader("traitement de la requête...");
60
- if(isPromise(r)){
61
- r.then(cb).finally(closePreloader);
62
- } else {
63
- cb().finally(closePreloader);
64
- }
74
+ Promise.resolve(r).then((opts)=>fetchData({...args,...defaultObj(opts)})).finally(closePreloader);
65
75
  }
66
- rest.style = [rest.style,{pointerEvents},_styles.cursorPointer];
67
- const CP = disabled || readOnly ? View : Pressable;
68
- return <CP testID={testID} onLongPres={(e)=>React.stopEventPropagation(e)} {...containerProps} onPress={disabled || readOnly? undefined : onPressLink} style={[styles.container,containerProps.style]}>
69
- <Tooltip testID={testID+"_Tooltip"} {...rest} Component={Component} onPress={disabled || readOnly?undefined:onPressLink} ref={ref} pointerEvents={pointerEvents} readOnly={readOnly} disabled = {disabled}>
70
- <Label testID={testID+"_Label"} underlined primary {...labelProps} style={[_styles.lh15,labelProps.style]} disabled={disabled} readOnly={readOnly}>{children}</Label>
71
- </Tooltip>
72
- </CP>
73
- });
76
+ rest.style = [rest.style,_styles.cursorPointer];
77
+ return {...rest,id,disabled,fetchData,navigate,isAllowed:checkIfAllowed,readOnly,testID,onPressLink}
78
+ }
74
79
 
75
80
  export default TableLinKComponent;
76
81
 
@@ -6,6 +6,14 @@ import React from "$react";
6
6
  import useExpo from "./hooks";
7
7
  import {defaultStr,defaultBool,isObj,isNonNullString} from "$cutils";
8
8
  import {getTableDataListRouteName,getTableDataRouteName,tableDataRouteName} from "$enavigation/utils";
9
+ import {Form as FormLoader} from "$ecomponents/ContentLoader";
10
+ import { tableDataLinkRouteName } from "../navigation/utils";
11
+ import { useEffect,useState } from "react";
12
+ import { usePrepareProps } from "../components/TableLink";
13
+ import View from "$ecomponents/View";
14
+ import Label from "$ecomponents/Label";
15
+ import theme from "$theme";
16
+ import notify from "$notify";
9
17
 
10
18
  export function TableDataListScreen({tableName,table,screenName,...props}){
11
19
  const {getTable} = useExpo();
@@ -81,6 +89,13 @@ export function prepareScreens ({tables,screens:screensProps,TableDataScreen,Tab
81
89
  foundTables[listScreenName] = TableDataListScreen;
82
90
  }
83
91
  });
92
+ if(!foundTables[tableDataLinkRouteName]){
93
+ screens.push({
94
+ Component : TableDataLinkScreen,
95
+ screenName : tableDataLinkRouteName,
96
+ Modal,
97
+ })
98
+ }
84
99
  return screens;
85
100
  }
86
101
 
@@ -103,6 +118,36 @@ export const TableDataScreenItem = (props)=>{
103
118
  }
104
119
  return <Item testID={"RN_TableDataScreenItem_"+(defaultStr(tableName)).toUpperCase()}{...props} tableObj={tableObj} data={data} tableName={tableName} {...params}/>
105
120
  }
106
- TableDataScreenItem.Modal = true;
107
121
 
108
122
  TableDataScreenItem.displayName = "TableDataScreenItem";
123
+
124
+ export function TableDataLinkScreen(p){
125
+ const {navigate,fetchData,isAllowed,...props} = usePrepareProps(p);
126
+ const [content,setContent] = useState(null);
127
+ const [data,setData] = useState(null);
128
+ const isLoading = !isObj(data);
129
+ useEffect(()=>{
130
+ if(!isAllowed()){
131
+ setContent(<NotAllowed />)
132
+ return ()=>{};
133
+ }
134
+ fetchData().then(setData).catch(notify.error);
135
+ return ()=>{}
136
+ },[])
137
+ return <TableDataScreenItem
138
+ children = {content||<FormLoader/>}
139
+ isLoading = {isLoading}
140
+ data = {isLoading ? {}:data}
141
+ tableName = {defaultStr(props.foreignKeyTable,props.tableName,props.table)}
142
+ {...props}
143
+ />
144
+ }
145
+
146
+ TableDataLinkScreen.screenName = tableDataLinkRouteName;
147
+ TableDataLinkScreen.Modal = true;
148
+
149
+ function NotAllowed(){
150
+ return <View style={[theme.styles.flex1,theme.styles.h100,theme.styles.w100,theme.styles.justifyContentCenter,theme.styles.alignItemsCenter]}>
151
+ <Label error textBold fontSize={18}>Vous n'êtes pas autorisé à accéder à la resource demandée!!!Veuillez contacter votre administrateur.</Label>
152
+ </View>
153
+ }
@@ -0,0 +1,36 @@
1
+ import Screen from "$eScreen";
2
+ import {Form as FormLoader} from "$ecomponents/ContentLoader";
3
+ import { tableDataLinkRouteName } from "../navigation/utils";
4
+ import { useEffect,useState } from "react";
5
+ import { usePrepareProps } from "../components/TableLink";
6
+ import View from "$ecomponents/View";
7
+ import Label from "$ecomponents/Label";
8
+ import theme from "$theme";
9
+ import Preloader from "$preloader";
10
+ import notify from "$notify";
11
+
12
+ export default function TableDataLinkScreen(p){
13
+ const {navigate,fetchData,isAllowed,...props} = usePrepareProps(p);
14
+ const [content,setContent] = useState(null);
15
+ useEffect(()=>{
16
+ if(!isAllowed()){
17
+ setContent(<NotAllowed />)
18
+ return ()=>{};
19
+ }
20
+ Preloader.open("traitement de la requête....");
21
+ fetchData().then(navigate).catch(notify.error).finally(Preloader.close);
22
+ return ()=>{}
23
+ },[])
24
+ return <Screen
25
+ children = {content||<FormLoader/>}
26
+ {...props}
27
+ />
28
+ }
29
+
30
+ function NotAllowed(){
31
+ return <View style={[theme.styles.flex1,theme.styles.h100,theme.styles.w100,theme.styles.justifyContentCenter,theme.styles.alignItemsCenter]}>
32
+ <Label error textBold fontSize={18}>Vous n'êtes pas autorisé à accéder à la resource demandée!!!Veuillez contacter votre administrateur.</Label>
33
+ </View>
34
+ }
35
+
36
+ TableDataLinkScreen.screenName = tableDataLinkRouteName;
@@ -5,9 +5,16 @@ import {navigate,sanitizeName} from "$cnavigation";
5
5
  import {isNonNullString,defaultStr,defaultObj,isObj} from "$cutils";
6
6
  import appConfig from "$capp/config";
7
7
 
8
- export const tableDataRouteName = 'TableData';
8
+ export const tableDataRouteName = 'table-data';
9
9
 
10
- export const structDataRouteName = 'StructData';
10
+ export const structDataRouteName = 'struct-data';
11
+
12
+ export const tableDataLinkRouteName = "table-data-link";
13
+
14
+ export const tableDataLinkScreenName = tableDataLinkRouteName;
15
+
16
+ export const structDataLinkRouteName = "struct-data-link";
17
+ export const structDataLinkScreeName = structDataLinkRouteName;
11
18
 
12
19
  const canCheckNavPerms = ()=> appConfig.get("checkNavigationPermsOnTableOrStructData")
13
20
 
@@ -49,6 +56,11 @@ export const navigateToTableData = (tableName,params)=>{
49
56
  export const navigateToStructData = (tableName,params)=>{
50
57
  return navigateToTableOrStructData(tableName,params,"structdata");
51
58
  }
59
+ /**** permet de naviguer ver un lien */
60
+ export const navigateToTableDataLink = (tableName,options)=>{
61
+ const opts = isNonNullString(tableName)? {tableName,table:tableName} : {};
62
+ return navigate(tableDataLinkRouteName,extendObj({},opts,options));
63
+ }
52
64
 
53
65
  export const buildScreenRoute = function(tableName,parent){
54
66
  if(isObj(tableName)){
@@ -75,11 +87,11 @@ export const getTableDataScreenName = getTableDataRouteName;
75
87
 
76
88
  /*** permet d'obtenir le lien vers l'écran table data permettant de lister les données de la table data */
77
89
  export const getTableDataListRouteName = function(tableName){
78
- return buildScreenRoute(tableName,tableDataRouteName+"/LIST/");
90
+ return buildScreenRoute(tableName,tableDataRouteName+"/list");
79
91
  }
80
92
 
81
93
  export const getStructDataListRouteName = function(tableName){
82
- return buildScreenRoute(tableName,structDataRouteName+"/LIST/");
94
+ return buildScreenRoute(tableName,structDataRouteName+"/list");
83
95
  }
84
96
 
85
97
  export const getTableDataListScreenName = getTableDataListRouteName;
@@ -1 +1 @@
1
- module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.87.3","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.65.12","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.90.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.65.12","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"}};