@fto-consult/expo-ui 8.71.0 → 8.73.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.
Files changed (28) hide show
  1. package/bin/create-app/dependencies.js +3 -3
  2. package/package.json +4 -4
  3. package/src/components/BottomSheet/Sheet.js +1 -1
  4. package/src/components/Button/Status.js +10 -1
  5. package/src/components/Datagrid/Accordion/index.js +1 -1
  6. package/src/components/Dialog/Dialog.js +5 -2
  7. package/src/components/DocumentPicker/index.js +111 -7
  8. package/src/components/Dropdown/index.js +35 -23
  9. package/src/components/Form/Fields/DocumentPicker.js +63 -0
  10. package/src/components/Form/Fields/Field.js +4 -6
  11. package/src/components/Form/Fields/Image.js +3 -22
  12. package/src/components/Form/Fields/SelectField.js +1 -1
  13. package/src/components/Form/Fields/SelectTableData/Component.js +23 -6
  14. package/src/components/Form/Fields/index.js +3 -1
  15. package/src/components/Form/FormData/componentsTypes.js +1 -0
  16. package/src/components/Form/utils/FormsManager.js +11 -5
  17. package/src/components/List/hooks.js +2 -2
  18. package/src/components/Menu/Menu.js +5 -3
  19. package/src/components/TableLink/index.js +8 -3
  20. package/src/layouts/Screen/TableData.js +1 -2
  21. package/src/media/Assets/utils.js +9 -2
  22. package/src/screens/Help/openLibraries.js +81 -124
  23. package/src/table-data/importer/parser.js +1824 -0
  24. package/src/{importer → table-data/importer}/run.js +0 -1
  25. /package/src/{importer → table-data/importer}/getSelectFieldValue.js +0 -0
  26. /package/src/{importer → table-data/importer}/index.js +0 -0
  27. /package/src/{importer → table-data/importer}/parseCSV.js +0 -0
  28. /package/src/{importer → table-data/importer}/validate.js +0 -0
@@ -81,7 +81,6 @@ const TableDataSelectField = React.forwardRef(({foreignKeyColumn,swrOptions,fore
81
81
  defaultFields.push(foreignKeyLabel);
82
82
  }
83
83
  const foreignKeyColumnValue = props.defaultValue;
84
- const defaultValueRef = React.useRef(props.multiple ? Object.toArray(foreignKeyColumnValue) : foreignKeyColumnValue);
85
84
  let isDisabled = defaultBool(props.disabled,props.readOnly,false);
86
85
  if(!isDisabled && props.readOnly === true){
87
86
  isDisabled = true;
@@ -112,17 +111,26 @@ const TableDataSelectField = React.forwardRef(({foreignKeyColumn,swrOptions,fore
112
111
  const fetchItemsRef = React.useRef(customFetchItem);
113
112
  fetchItemsRef.current = customFetchItem;
114
113
  swrOptions = Object.assign({},swrOptions);
114
+ const itemsRef = React.useRef([]);
115
+ const restOptionsRef = React.useRef({});
116
+ const fetchedResultRef = React.useRef({});
117
+ const isMountedRef = React.useRef(false);
115
118
  ///@see : https://swr.vercel.app/docs/revalidation#disable-automatic-revalidations
116
119
  const canDisable = isFilter || isDisabled;
117
120
  swrOptions.revalidateOnFocus = canDisable? false : typeof swrOptions.revalidateOnFocus === "boolean" ? swrOptions.revalidateOnFocus : false;
121
+ swrOptions.revalidateOnMount = typeof swrOptions.revalidateOnMount =="boolean"? swrOptions.revalidateOnMount : true;
118
122
  swrOptions.revalidateIfStale = canDisable? false : typeof swrOptions.revalidateIfStale ==="boolean"? swrOptions.revalidateIfStale : false;
119
123
  swrOptions.revalidateOnReconnect = canDisable ? false : typeof swrOptions.revalidateOnReconnect ==="boolean"? swrOptions.revalidateOnReconnect : false;
120
124
  swrOptions.refreshWhenHidden = canDisable ? false : typeof swrOptions.refreshWhenHidden =="boolean"? swrOptions.refreshWhenHidden : false;
125
+ swrOptions.dedupingInterval = canDisable ? 24*60*1000 : typeof swrOptions.dedupingInterval ==="number"? dedupingInterval : isMountedRef.current ? 60*1000:undefined;
121
126
  if(canDisable){
122
127
  swrOptions.refreshInterval = 30000*1000*60;
123
128
  }
124
- const restOptionsRef = React.useRef({});
125
- const fetchedResultRef = React.useRef({});
129
+ if(canDisable || typeof swrOptions.isVisible !="function"){
130
+ swrOptions.isVisible = () =>{
131
+ return canDisable ? false : !!!Object.size(itemsRef.current,true); //on rafraichit au focus uniquement lorsque la liste des items est vide
132
+ };
133
+ }
126
134
  restOptionsRef.current = {foreignKeyTable,foreignKeyColumn,foreignKeyLabel,foreignKeyColumnValue,sort,sortColumn,sortDir,foreignKeyTableObj:fKeyTable};
127
135
  const queryPathKey = isNonNullString(queryPath) ? setQueryParams(queryPath,{isstabledata:1,"stabledathkey":hashKey,foreignKeyColumn:defaultStr(foreignKeyColumn).toLowerCase()}) : null;
128
136
  const onFetchItemsRef = React.useRef();
@@ -131,6 +139,8 @@ const TableDataSelectField = React.forwardRef(({foreignKeyColumn,swrOptions,fore
131
139
  const fkeyFields = defaultObj(fKeyTable.fields);
132
140
  mutateFetchedItemsRef.current = mutateFetchedItems;
133
141
  const {isLoading:cIsLoading,data:fetchedItems,isValidating,refresh} = useSWR(hasErrors?null:queryPathKey,{
142
+ isSelectField : true,
143
+ fieldName : props.name,
134
144
  fetcher : (url,opts1)=>{
135
145
  if(typeof beforeFetchItems ==='function' && beforeFetchItems({fetchOptions}) === false) return Promise.resolve(fetchedResultRef.current);
136
146
  let opts = Object.clone(fetchOptions);
@@ -171,11 +181,17 @@ const TableDataSelectField = React.forwardRef(({foreignKeyColumn,swrOptions,fore
171
181
  });
172
182
  const isLoading = cIsLoading || isValidating;
173
183
  const items = React.useMemo(()=>{
184
+ if(isLoading) return itemsRef.current;
174
185
  const fItems = isObj(fetchedItems)? fetchedItems: fetchedResultRef.current;
175
- if(!isObj(fItems) || !Array.isArray(fItems.items)) return [];
176
- return fItems.items;
177
- },[fetchedItems]);
186
+ if(!isObj(fItems) || !Array.isArray(fItems.items)) {
187
+ itemsRef.current = [];
188
+ } else {
189
+ itemsRef.current = fItems.items;
190
+ }
191
+ return itemsRef.current;
192
+ },[fetchedItems,isLoading]);
178
193
  React.useEffect(()=>{
194
+ isMountedRef.current = true;
179
195
  if(!isLoading && !Object.size(items,true)){
180
196
  refresh();
181
197
  }
@@ -261,6 +277,7 @@ const TableDataSelectField = React.forwardRef(({foreignKeyColumn,swrOptions,fore
261
277
  dialogProps.title = ttitle;
262
278
  return <Dropdown
263
279
  {...props}
280
+ fetchOptions = {fetchOptions}
264
281
  items = {items}
265
282
  isFilter = {isFilter}
266
283
  showAdd = {showAdd}
@@ -19,7 +19,8 @@ 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
+ import SelectFontIcon from "./SelectFontIcon";
23
+ import DocumentPicker from "./DocumentPicker";
23
24
 
24
25
  const defFormFields = {
25
26
  Field,
@@ -43,6 +44,7 @@ const defFormFields = {
43
44
  ,SelectDateFormat
44
45
  ,Html
45
46
  ,SelectFontIcon,
47
+ DocumentPicker,
46
48
  }
47
49
 
48
50
  export default defFormFields;
@@ -30,6 +30,7 @@ export const getComponentTypes = ()=>{
30
30
  scheduler : Fields.Scheduler,
31
31
  default : Fields.TextField,
32
32
  selecticon : Fields.SelectFontIcon,
33
+ documentpicker : Fields.DocumentPicker,
33
34
  ...Fields,
34
35
  };
35
36
  }
@@ -20,14 +20,17 @@ if(!isObj(APP.FormsManager)){
20
20
  });
21
21
  observable(APP.FormsManager);
22
22
  addObserver(APP.FormsManager);
23
+ const fManager = APP.FormsManager;
23
24
  APP.FormsManager.on("mount",(formName,formObject)=>{
24
25
  formObject._fields = defaultObj(formObject._fields);
25
26
  formObject._actions= defaultObj(formObject._actions);
26
27
  APP.FormsManager.forms[formName] = formObject;
27
28
  APP.trigger("MOUNT_FORM",formName);
28
- }).on("unmount",(formName)=>{
29
+ });
30
+ fManager.on("unmount",(formName)=>{
29
31
  delete APP.FormsManager.forms[formName];
30
- }).on("registerField",(fieldName,formName,fieldObj)=>{
32
+ });
33
+ fManager.on("registerField",(fieldName,formName,fieldObj)=>{
31
34
  if(fieldObj && isObservable(fieldObj)){
32
35
  APP.FormsManager.forms[formName] = defaultObj(APP.FormsManager.forms[formName]);
33
36
  APP.FormsManager.forms[formName]._fields = defaultObj(APP.FormsManager.forms[formName]._fields);
@@ -36,13 +39,15 @@ if(!isObj(APP.FormsManager)){
36
39
  let formField = form._fields[fieldName];
37
40
  if(isFunction(formField.onRegister)) formField.onRegister(fieldName,fieldObj);
38
41
  }
39
- }).on("unregisterField",(fieldName,formName)=>{
42
+ });
43
+ fManager.on("unregisterField",(fieldName,formName)=>{
40
44
  if(isNonNullString(fieldName) && isNonNullString(formName)){
41
45
  APP.FormsManager.forms[formName] = defaultObj(APP.FormsManager.forms[formName]);
42
46
  APP.FormsManager.forms[formName]._fields = defaultObj(APP.FormsManager.forms[formName]._fields);
43
47
  delete APP.FormsManager.forms[formName]._fields[fieldName];
44
48
  }
45
- }).on("mountAction",(formName,actionObj)=>{
49
+ });
50
+ fManager.on("mountAction",(formName,actionObj)=>{
46
51
  if(!isNonNullString(formName) || !isObj(actionObj)) {
47
52
  console.error("MSForm Action, l'action, nom du formulaire non définit ",formName,actionObj)
48
53
  return;
@@ -50,7 +55,8 @@ if(!isObj(APP.FormsManager)){
50
55
  APP.FormsManager.actions = defaultObj(APP.FormsManager.actions);
51
56
  APP.FormsManager.actions[formName] = defaultObj(APP.FormsManager.actions[formName]);
52
57
  APP.FormsManager.actions[formName][actionObj.getId()] = actionObj;
53
- }).on("unmountAction",(formName,actionId)=>{
58
+ });
59
+ fManager.on("unmountAction",(formName,actionId)=>{
54
60
  if(!isNonNullString(formName) || !isNonNullString(actionId)) return;
55
61
  if(!isObj(APP.FormsManager.actions) || !isObj(APP.FormsManager.actions[formName])) return;
56
62
  delete APP.FormsManager.actions[formName][actionId]
@@ -1,7 +1,7 @@
1
1
  import React from "$react";
2
2
  import { prepareItems as customPrepareItems} from "./utils";
3
3
  import {defaultFunc,defaultBool,defaultDecimal} from "$cutils";
4
- import Dimensions,{isMobileMedia,useWindowDimensions} from "$cdimensions";
4
+ import Dimensions,{usePageDimensions} from "$cdimensions";
5
5
  import {grid} from "$theme";
6
6
  /**** retourne le contexte associé au composant List
7
7
 
@@ -25,7 +25,7 @@ export const useList = ({items,filter,prepareItems,...props})=>{
25
25
 
26
26
  export const useGetNumColumns = ({windowWidth,numColumns,responsive})=>{
27
27
  responsive = defaultBool(responsive,false);
28
- const dimensions = responsive ? useWindowDimensions() : Dimensions.get("window");
28
+ const dimensions = usePageDimensions(responsive)["window"];
29
29
  if(responsive){
30
30
  numColumns = grid.numColumns(windowWidth);
31
31
  } else {
@@ -56,7 +56,11 @@ class _Menu extends AppComponent {
56
56
  opacityAnimation: new Animated.Value(0),
57
57
  scaleAnimation: new Animated.ValueXY({ x: 0, y: 0 }),
58
58
  });
59
- this._events.RESIZE_PAGE = this.handleDismiss.bind(this);
59
+ Object.defineProperties(this._events,{
60
+ RESIZE_PAGE : {
61
+ value : this.handleDismiss.bind(this),
62
+ }
63
+ });
60
64
  }
61
65
 
62
66
  componentDidUpdate(prevProps) {
@@ -153,10 +157,8 @@ class _Menu extends AppComponent {
153
157
  } else {
154
158
  BackHandler.removeEventListener('hardwareBackPress', this.handleDismiss);
155
159
  }
156
-
157
160
  APP.off(RESIZE_PAGE,this._events.RESIZE_PAGE);
158
161
  this.clearEvents();
159
-
160
162
  this.isBrowser() &&
161
163
  document.removeEventListener('keyup', this.handleKeypress);
162
164
  };
@@ -20,11 +20,16 @@ import TouchableRipple from "$ecomponents/TouchableRipple";
20
20
  dans le champ isStructData
21
21
  */
22
22
  const TableLinKComponent = React.forwardRef(({containerProps,children,labelProps,...props},ref)=>{
23
- const {testID,onPressLink,disabled,readOnly,fetchData,navigate,isAllowed:checkIfAllowed,Component,...rest} = usePrepareProps(props);
23
+ const {testID,onPressLink,disabled,readOnly,fetchData,navigate,isAllowed:checkIfAllowed,onLongPres,Component,...rest} = usePrepareProps(props);
24
24
  containerProps = defaultObj(containerProps);
25
25
  labelProps = defaultObj(labelProps);
26
26
  const CP = disabled || readOnly ? View : TouchableRipple;
27
- return <CP testID={testID} onLongPres={(e)=>React.stopEventPropagation(e)} {...containerProps} onPress={disabled || readOnly? undefined : onPressLink} style={[styles.container,containerProps.style]}>
27
+ return <CP testID={testID} onLongPres={(e,...rest)=>{
28
+ React.stopEventPropagation(e);
29
+ if(typeof onLongPres =="function"){
30
+ onLongPres(e,...rest);
31
+ }
32
+ }} {...containerProps} onPress={disabled || readOnly? undefined : onPressLink} style={[styles.container,containerProps.style]}>
28
33
  <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}>
29
34
  <Label testID={testID+"_Label"} underlined primary {...labelProps} style={[_styles.lh15,labelProps.style]} disabled={disabled} readOnly={readOnly}>{children}</Label>
30
35
  </Tooltip>
@@ -90,7 +95,7 @@ TableLinKComponent.propTypes = {
90
95
  ///les props à utiliser pour afficher la table de données en cas de click sur le lien
91
96
  triggerProps : PropTypes.object,
92
97
  /*** l'id de la données à récupérer en cas de clic sur le lien */
93
- id : PropTypes.oneOfType([PropTypes.number,PropTypes.string]),
98
+ id : PropTypes.oneOfType([PropTypes.number,PropTypes.string,PropTypes.array,PropTypes.object]),
94
99
  routeName : PropTypes.string,///la route via laquelle on devra naviguer
95
100
  routeParam : PropTypes.object,///les props à passer à la route en question
96
101
  children : PropTypes.node
@@ -1,4 +1,4 @@
1
- import {defaultStr,isNumber,isPromise,defaultVal,extendObj,defaultObj,uniqid,isObj,isObjOrArray} from "$cutils";
1
+ import {defaultStr,isNumber,isPromise,defaultVal,extendObj,defaultObj,uniqid,isObj,isPlainObject,isObjOrArray} from "$cutils";
2
2
  import {FormData} from "$ecomponents/Form";
3
3
  import FormDataScreen from "./FormData";
4
4
  import ScreenContainer from "./Screen";
@@ -319,7 +319,6 @@ export default class TableDataScreenComponent extends FormDataScreen{
319
319
  delete fields[i];
320
320
  return;
321
321
  }
322
-
323
322
  }
324
323
  if(rest.archived === true){
325
324
  currentField.readOnly = true;
@@ -1,8 +1,8 @@
1
1
  import { Asset} from 'expo-asset';
2
- import {isObj,isNonNullString} from "$cutils";
2
+ import {isObj,isNonNullString,defaultStr} from "$cutils";
3
3
 
4
4
  export const loadAsset = async (asset)=>{
5
- if(isObj(asset) && isAssets(asset)){
5
+ if(isObj(asset) && (isAssets(asset) || isDocumentPickerAsset(asset))){
6
6
  return Promise.resolve(asset);
7
7
  }
8
8
  return await new Promise((resolve,reject)=>{
@@ -24,5 +24,12 @@ export const load = loadAsset;
24
24
  export const isAssets = (asset,staticAssets)=>{
25
25
  return isObj(asset) && "width" in (asset) && "height" in (asset) && isNonNullString(asset.uri) && (staticAssets ? asset.uri.contains("/static/"):true);
26
26
  }
27
+ export const isDocumentPickerAsset = (asset)=>{
28
+ if(isObj(asset) && assets.lastModified && assets.mimeType && assets.name && isNonNullString(assets.uri)){
29
+ asset.localUri = defaultStr(asset.localUri,asset.uri);
30
+ return true;
31
+ }
32
+ return false;
33
+ }
27
34
  export const isValid = isAssets;
28
35
  export const isValidAssets = isAssets;
@@ -1,22 +1,21 @@
1
1
  module.exports = {
2
2
  "@fto-consult/expo-ui": {
3
- "version": "8.70.6",
4
- "url": "https://github.com/borispipo/expo-ui#readme",
5
- "license": "ISC"
3
+ "name": "@fto-consult/expo-ui",
4
+ "version": "8.72.0",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/borispipo/expo-ui.git"
8
+ },
9
+ "homepage": "https://github.com/borispipo/expo-ui#readme"
6
10
  },
7
11
  "@babel/plugin-proposal-export-namespace-from": {
8
12
  "version": "7.18.9",
9
13
  "url": "https://babel.dev/docs/en/next/babel-plugin-proposal-export-namespace-from",
10
14
  "license": "MIT"
11
15
  },
12
- "@emotion/native": {
13
- "version": "11.11.0",
14
- "url": "https://emotion.sh",
15
- "license": "MIT"
16
- },
17
- "@expo/html-elements": {
18
- "version": "0.5.1",
19
- "url": "https://github.com/expo/expo/tree/main/packages/html-elements",
16
+ "@emotion/react": {
17
+ "version": "11.11.4",
18
+ "url": "https://github.com/emotion-js/emotion/tree/main/packages/react",
20
19
  "license": "MIT"
21
20
  },
22
21
  "@expo/metro-config": {
@@ -24,49 +23,24 @@ module.exports = {
24
23
  "url": "https://github.com/expo/expo.git",
25
24
  "license": "MIT"
26
25
  },
27
- "@expo/vector-icons": {
28
- "version": "14.0.0",
29
- "url": "https://expo.github.io/vector-icons",
30
- "license": "MIT"
31
- },
32
26
  "@expo/webpack-config": {
33
27
  "version": "19.0.1",
34
28
  "url": "https://github.com/expo/expo-webpack-integrations/tree/main/packages/webpack-config#readme",
35
29
  "license": "MIT"
36
30
  },
37
- "@pchmn/expo-material3-theme": {
38
- "version": "1.3.2",
39
- "url": "https://github.com/pchmn/expo-material3-theme#readme",
40
- "license": "MIT"
41
- },
42
- "@react-native-community/netinfo": {
43
- "version": "11.1.0",
44
- "url": "https://github.com/react-native-netinfo/react-native-netinfo#readme",
45
- "license": "MIT"
46
- },
47
- "@react-native/assets-registry": {
48
- "version": "0.72.0",
49
- "url": "git@github.com:facebook/react-native.git",
50
- "license": "MIT"
51
- },
52
- "@react-navigation/native": {
53
- "version": "6.1.17",
54
- "url": "https://reactnavigation.org",
55
- "license": "MIT"
56
- },
57
- "@react-navigation/native-stack": {
58
- "version": "6.9.26",
59
- "url": "https://github.com/software-mansion/react-native-screens#readme",
31
+ "@faker-js/faker": {
32
+ "version": "8.4.1",
33
+ "url": "https://github.com/faker-js/faker.git",
60
34
  "license": "MIT"
61
35
  },
62
- "@react-navigation/stack": {
63
- "version": "6.3.29",
64
- "url": "https://reactnavigation.org/docs/stack-navigator/",
65
- "license": "MIT"
36
+ "@fto-consult/common": {
37
+ "version": "4.43.4",
38
+ "url": "https://github.com/borispipo/common#readme",
39
+ "license": "ISC"
66
40
  },
67
- "@shopify/flash-list": {
68
- "version": "1.6.3",
69
- "url": "https://shopify.github.io/flash-list/",
41
+ "apexcharts": {
42
+ "version": "3.48.0",
43
+ "url": "https://apexcharts.com",
70
44
  "license": "MIT"
71
45
  },
72
46
  "babel-plugin-inline-dotenv": {
@@ -84,74 +58,48 @@ module.exports = {
84
58
  "url": "https://github.com/crypto-browserify/crypto-browserify",
85
59
  "license": "MIT"
86
60
  },
87
- "expo": {
88
- "version": "50.0.15",
89
- "url": "https://github.com/expo/expo/tree/main/packages/expo",
61
+ "file-saver": {
62
+ "version": "2.0.5",
63
+ "url": "https://github.com/eligrey/FileSaver.js#readme",
90
64
  "license": "MIT"
91
65
  },
92
- "expo-camera": {
93
- "version": "14.1.2",
94
- "url": "https://docs.expo.dev/versions/latest/sdk/camera/",
95
- "license": "MIT"
96
- },
97
- "expo-clipboard": {
98
- "version": "5.0.1",
99
- "url": "https://docs.expo.dev/versions/latest/sdk/clipboard",
100
- "license": "MIT"
101
- },
102
- "expo-document-picker": {
103
- "version": "11.10.1",
104
- "url": "https://docs.expo.dev/versions/latest/sdk/document-picker/",
105
- "license": "MIT"
106
- },
107
- "expo-font": {
108
- "version": "11.10.3",
109
- "url": "https://docs.expo.dev/versions/latest/sdk/font/",
110
- "license": "MIT"
111
- },
112
- "expo-image-picker": {
113
- "version": "14.7.1",
114
- "url": "https://docs.expo.dev/versions/latest/sdk/imagepicker/",
115
- "license": "MIT"
116
- },
117
- "expo-intent-launcher": {
118
- "version": "10.11.0",
119
- "url": "https://docs.expo.dev/versions/latest/sdk/intent-launcher/",
120
- "license": "MIT"
66
+ "google-libphonenumber": {
67
+ "version": "3.2.34",
68
+ "url": "https://ruimarinho.github.io/google-libphonenumber/",
69
+ "license": "(MIT AND Apache-2.0)"
121
70
  },
122
- "expo-linking": {
123
- "version": "6.2.2",
124
- "url": "https://docs.expo.dev/versions/latest/sdk/linking",
71
+ "html2canvas": {
72
+ "version": "1.4.1",
73
+ "url": "https://html2canvas.hertzen.com",
125
74
  "license": "MIT"
126
75
  },
127
- "expo-sharing": {
128
- "version": "11.10.0",
129
- "url": "https://docs.expo.dev/versions/latest/sdk/sharing/",
76
+ "htmlparser2-without-node-native": {
77
+ "version": "3.9.2",
78
+ "url": "git://github.com/fb55/htmlparser2.git",
130
79
  "license": "MIT"
131
80
  },
132
- "expo-sqlite": {
133
- "version": "13.4.0",
134
- "url": "https://docs.expo.dev/versions/latest/sdk/sqlite/",
81
+ "is-plain-obj": {
82
+ "version": "4.1.0",
135
83
  "license": "MIT"
136
84
  },
137
- "expo-status-bar": {
138
- "version": "1.11.1",
139
- "url": "https://docs.expo.dev/versions/latest/sdk/status-bar/",
85
+ "jsbarcode": {
86
+ "version": "3.11.6",
87
+ "url": "https://github.com/lindell/JsBarcode#readme",
140
88
  "license": "MIT"
141
89
  },
142
- "expo-system-ui": {
143
- "version": "2.9.3",
144
- "url": "https://docs.expo.dev/versions/latest/sdk/system-ui",
90
+ "prop-types": {
91
+ "version": "15.8.1",
92
+ "url": "https://facebook.github.io/react/",
145
93
  "license": "MIT"
146
94
  },
147
- "expo-web-browser": {
148
- "version": "12.8.2",
149
- "url": "https://docs.expo.dev/versions/latest/sdk/webbrowser/",
95
+ "react-content-loader": {
96
+ "version": "6.2.1",
97
+ "url": "https://github.com/danilowoz/react-content-loader",
150
98
  "license": "MIT"
151
99
  },
152
- "react-native": {
153
- "version": "0.73.6",
154
- "url": "https://reactnative.dev/",
100
+ "react-dom": {
101
+ "version": "18.2.0",
102
+ "url": "https://reactjs.org/",
155
103
  "license": "MIT"
156
104
  },
157
105
  "react-native-big-list": {
@@ -159,45 +107,44 @@ module.exports = {
159
107
  "url": "https://marcocesarato.github.io/react-native-big-list-docs/",
160
108
  "license": "GPL-3.0-or-later"
161
109
  },
162
- "react-native-blob-util": {
163
- "version": "0.18.6",
164
- "url": "https://github.com/RonRadtke/react-native-blob-util",
110
+ "react-native-iphone-x-helper": {
111
+ "version": "1.3.1",
112
+ "url": "https://github.com/ptelad/react-native-iphone-x-helper#readme",
165
113
  "license": "MIT"
166
114
  },
167
- "react-native-gesture-handler": {
168
- "version": "2.14.1",
169
- "url": "https://github.com/software-mansion/react-native-gesture-handler#readme",
115
+ "react-native-mime-types": {
116
+ "version": "2.5.0",
170
117
  "license": "MIT"
171
118
  },
172
- "react-native-reanimated": {
173
- "version": "3.6.2",
174
- "url": "https://github.com/software-mansion/react-native-reanimated#readme",
119
+ "react-native-paper": {
120
+ "version": "5.12.3",
121
+ "url": "https://callstack.github.io/react-native-paper",
175
122
  "license": "MIT"
176
123
  },
177
- "react-native-safe-area-context": {
178
- "version": "4.8.2",
179
- "url": "https://github.com/th3rdwave/react-native-safe-area-context#readme",
124
+ "react-native-paper-dates": {
125
+ "version": "0.22.7",
126
+ "url": "https://github.com/web-ridge/react-native-paper-dates#readme",
180
127
  "license": "MIT"
181
128
  },
182
- "react-native-screens": {
183
- "version": "3.29.0",
184
- "url": "https://github.com/software-mansion/react-native-screens#readme",
129
+ "react-native-web": {
130
+ "version": "0.19.10",
131
+ "url": "git://github.com/necolas/react-native-web.git",
185
132
  "license": "MIT"
186
133
  },
187
- "react-native-svg": {
188
- "version": "14.1.0",
189
- "url": "https://github.com/react-native-community/react-native-svg",
134
+ "react-virtuoso": {
135
+ "version": "4.7.9",
136
+ "url": "https://virtuoso.dev/",
190
137
  "license": "MIT"
191
138
  },
192
- "react-native-view-shot": {
193
- "version": "3.8.0",
194
- "url": "https://github.com/gre/react-native-view-shot",
139
+ "readable-stream": {
140
+ "version": "4.5.2",
141
+ "url": "https://github.com/nodejs/readable-stream",
195
142
  "license": "MIT"
196
143
  },
197
- "react-native-webview": {
198
- "version": "13.6.4",
199
- "url": "https://github.com/react-native-webview/react-native-webview#readme",
200
- "license": "MIT"
144
+ "sanitize-filename": {
145
+ "version": "1.6.3",
146
+ "url": "git@github.com:parshap/node-sanitize-filename.git",
147
+ "license": "WTFPL OR ISC"
201
148
  },
202
149
  "sharp-cli": {
203
150
  "version": "2.1.1",
@@ -209,9 +156,19 @@ module.exports = {
209
156
  "url": "https://github.com/browserify/stream-browserify",
210
157
  "license": "MIT"
211
158
  },
159
+ "tippy.js": {
160
+ "version": "6.3.7",
161
+ "url": "https://atomiks.github.io/tippyjs/",
162
+ "license": "MIT"
163
+ },
212
164
  "vm": {
213
165
  "version": "0.1.0",
214
166
  "url": "https://github.com/DiegoRBaquero/node-vm#readme",
215
167
  "license": "MIT"
168
+ },
169
+ "xlsx": {
170
+ "version": "0.18.5",
171
+ "url": "https://sheetjs.com/",
172
+ "license": "Apache-2.0"
216
173
  }
217
174
  };