@fto-consult/expo-ui 7.1.3 → 7.1.6

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.
@@ -93,6 +93,7 @@ module.exports = (opts)=>{
93
93
  r.$electron = r.$electron || r.$eelectron;
94
94
  r.$projectRoot = r.$eprojectRoot = projectRoot;
95
95
  r.$econtext = path.resolve(expo,"context");
96
+ r.$epdf = path.resolve(expo,"pdf");
96
97
  if(!r.$context){
97
98
  r.$context = r.$econtext;
98
99
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fto-consult/expo-ui",
3
- "version": "7.1.3",
3
+ "version": "7.1.6",
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.70.28",
74
+ "@fto-consult/common": "^3.71.15",
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",
@@ -200,7 +200,7 @@ const styles = StyleSheet.create({
200
200
  },
201
201
  renderedContent : {
202
202
  alignItems : 'center',
203
- justifyContent : 'center',
203
+ justifyContent : 'flex-start',
204
204
  paddingVertical : 2,
205
205
  paddingHorizontal : 0,
206
206
  paddingRight : 10,
@@ -208,7 +208,7 @@ const styles = StyleSheet.create({
208
208
  },
209
209
  right : {
210
210
  marginHorizontal : 0,
211
- paddingLeft:5,
211
+ paddingLeft:0,
212
212
  paddingRight : 0,
213
213
  paddingVertical : 5,
214
214
  fontSize:13,
@@ -43,8 +43,9 @@ import {parseMangoQueries} from "$ecomponents/Filter";
43
43
  import events from "../events";
44
44
  import {MORE_ICON} from "$ecomponents/Icon"
45
45
  import ActivityIndicator from "$ecomponents/ActivityIndicator";
46
- import {createPDF,createTableHeader,fields as pdfFields,pageHeaderMargin,sprintf as pdfSprintf} from "$cpdf";
46
+ import {createTableHeader,fields as pdfFields,pageHeaderMargin,sprintf as pdfSprintf} from "$cpdf";
47
47
  import {isWeb,isMobileNative} from "$cplatform";
48
+ import { createPDF,getFields as getPdfFields } from '../../../pdf';
48
49
 
49
50
  export const TIMEOUT = 100;
50
51
 
@@ -842,12 +843,12 @@ export default class CommonDatagridComponent extends AppComponent {
842
843
  }
843
844
  if(isFunction(print)){
844
845
  if(isFunction(printable)){
845
- printable = printable({context:this,props:this.props});
846
+ printable = printable({context:this,tableName:defaultStr(this.props.tableName,this.props.table),props:this.props});
846
847
  }
847
848
  if(printable !== false){
848
849
  r.push({
849
- icon : defaultVal(this.props.printIcon,'printer'),
850
- text : defaultVal(this.props.printButtonText,this.props.printText,'Imprimer'),
850
+ icon : defaultVal(this.props.printButtonIcon,'printer'),
851
+ text : defaultVal(this.props.printButtonText,this.props.printButtonLabel,'Imprimer'),
851
852
  onPress : ()=>{
852
853
  print({title:defaultStr(this.props.title),...defaultObj(printOptions),...sArgs});
853
854
  },
@@ -1765,20 +1766,8 @@ export default class CommonDatagridComponent extends AppComponent {
1765
1766
  const isOnlytotal = this.state.displayOnlySectionListHeaders;
1766
1767
  const displayOnlyHeader = this.canDisplayOnlySectionListHeaders() && isOnlytotal;
1767
1768
  const sData = defaultObj(this.getSessionData(skey));
1768
- const sFields = pdf ? extendObj({},pdfFields) : {};
1769
1769
  const pdfConfig = this.getPdfConfig();
1770
- delete sFields.code;
1771
- delete sFields.label;
1772
- if(!isDataURL(pdfConfig.logo)){
1773
- delete sFields.displayLogo;
1774
- delete sFields.logoWidth;
1775
- }
1776
- const rPdfFields = pdf ? {
1777
- pdfDocumentTitle : {
1778
- text : "Titre du document",
1779
- multiple : true,
1780
- },
1781
- } : {};
1770
+ const sFields = pdf ? getPdfFields (pdfConfig) : {};
1782
1771
  return new Promise((resolve,reject)=>{
1783
1772
  return DialogProvider.open({
1784
1773
  title : `Paramètre d'export ${excel?"excel":"pdf"}`,
@@ -1801,7 +1790,6 @@ export default class CommonDatagridComponent extends AppComponent {
1801
1790
  defaultValue : 0,
1802
1791
  type : "switch",
1803
1792
  } : null,
1804
- ...rPdfFields,
1805
1793
  ...sFields,
1806
1794
  },
1807
1795
  actions : [{text:'Exporter',icon : "check"}],
@@ -1856,11 +1844,7 @@ export default class CommonDatagridComponent extends AppComponent {
1856
1844
  if(pdfDocumentTitle){
1857
1845
  content.unshift(pdfDocumentTitle);
1858
1846
  }
1859
- config.showPreloader = typeof config.showPreloader ==="function"? config.showPreloader : Preloader.open;
1860
- config.hidePreloader = typeof config.hidePreloader =="function"? config.hidePreloader : Preloader.close;
1861
- const pdf = createPDF({
1862
- content,
1863
- },config);
1847
+ const pdf = createPDF({content},config);
1864
1848
  if(isWeb()){
1865
1849
  return pdf.open();
1866
1850
  }
@@ -4024,6 +4008,9 @@ CommonDatagridComponent.propTypes = {
4024
4008
  getRowKey : PropTypes.func,
4025
4009
  ///la fonction utilisée pour l'impression du datagrid
4026
4010
  print : PropTypes.func,
4011
+ printButtonIcon : PropTypes.oneOfType([PropTypes.string,PropTypes.element]),
4012
+ printButtonLabel : PropTypes.oneOfType([PropTypes.string,PropTypes.element]),
4013
+ printButtonText : PropTypes.oneOfType([PropTypes.string,PropTypes.element]),
4027
4014
  printOptions: PropTypes.object,
4028
4015
  /*** si le datagrid est imprimable */
4029
4016
  printable : PropTypes.oneOfType([
@@ -1,7 +1,10 @@
1
1
  import KeyboardAvoidingView from "../KeyboardAvoidingView";
2
2
  import React from "$react";
3
+ import {usePageDimensions} from "$cdimensions/utils";
3
4
 
4
5
  const DialogContentComponent = ({isPreloader,title,children,isFullScreen,...props})=>{
5
- return children;
6
+ usePageDimensions();
7
+ return React.useMemo(()=>children,[children]);
8
+ //return content;
6
9
  }
7
10
  export default DialogContentComponent;
@@ -69,7 +69,7 @@ export default class Field extends AppComponent {
69
69
  },
70
70
  isEditableBySymbol : {
71
71
  value : ()=>{
72
- return !!this[this.isEditableSymbol];
72
+ return typeof this[this.isEditableSymbol] ==='boolean'? this[this.isEditableSymbol] : true;
73
73
  }
74
74
  },
75
75
  isEnabledBySymbol : {
@@ -96,6 +96,7 @@ export default class Field extends AppComponent {
96
96
  },
97
97
  isDisabled : {
98
98
  value : ()=>{
99
+ console.log("checking disable ",this.name,!!this.state.isReadOnlyOrDisabled,!this.isEditableBySymbol())
99
100
  return !!this.state.isReadOnlyOrDisabled || !this.isEditableBySymbol();
100
101
  }, override : false,writable : false
101
102
  }
@@ -921,7 +922,7 @@ export default class Field extends AppComponent {
921
922
  rest.readOnly = readOnly;
922
923
  if(disabled || readOnly){
923
924
  this[this.isEditableSymbol] = false;
924
- }
925
+ } else delete this[this.isEditableSymbol];
925
926
  }
926
927
  if(this.state.isFieldVisible){
927
928
  if(isFunction(visible)){
@@ -337,7 +337,7 @@ export default class TableDataScreenComponent extends FormDataScreen{
337
337
  save2cloneAction : cCloneAction && save2cloneAction !== false ? true : false,
338
338
  isMobile : isMobOrTab,
339
339
  saveAction,
340
- save2closeAction : typeof save2cloneAction ==="boolean"? save2cloneAction : saveAction !== false,
340
+ save2closeAction : typeof save2closeAction ==="boolean"? save2closeAction : saveAction !== false,
341
341
  tableName,
342
342
  sessionName,
343
343
  table,
@@ -0,0 +1,178 @@
1
+ /**@see : https://github.com/pipwerks/PDFObject#readme */
2
+ let {Dialog} = require("$components/Dialog")
3
+ let Icon = require("$components/Icon")
4
+ require("./styles.css")
5
+ let PDFObject = require("pdfobject")
6
+ let {MenuButton} = require("$ui")
7
+ let isMSE = //checkEdge ? false :
8
+ window.navigator && typeof window.navigator.msSaveOrOpenBlob == "function" ? true : false;
9
+ class PDFViewer extends APP.Component {
10
+ constructor(props){
11
+ super(props);
12
+ APP.extend(this._events,{
13
+ resize : this.resetPos.bind(this)
14
+ })
15
+ this.autobind();
16
+ }
17
+
18
+ componentDidMount(){
19
+ super.componentDidMount();
20
+ this.updatePdfContent();
21
+ window.addEventListener('resize',this._events.resize, true)
22
+ this.resetPos();
23
+ }
24
+ resetPos (){
25
+ if(!this._isMounted()) return;
26
+ let pdfWrap = document.getElementById(this.pdfViewerWrapperDomId);
27
+ if(isDOMElement(pdfWrap)){
28
+ let parent = pdfWrap.parentNode;
29
+ let mP = pdfWrap.closest(".dialog.md-dialog-container");
30
+ if(isDOMElement(parent) && isDOMElement(mP)){
31
+ let maxHeight = mezr.height(parent);
32
+ let maxH2 = mezr.height(mP);
33
+ let min = Math.min(maxHeight,maxH2);
34
+ if(min == 0){
35
+ min = "100%";
36
+ } else min = min+"px";
37
+ pdfWrap.style.height = min;
38
+ }
39
+ }
40
+ }
41
+
42
+ componentDidUpdate(){
43
+ super.componentDidUpdate();
44
+ if(this.dialogRef && this.dialogRef.open){
45
+ this.dialogRef.open();
46
+ }
47
+ this.updatePdfContent()
48
+ this.resetPos();
49
+ }
50
+ componentWillUnmount(){
51
+ super.componentWillUnmount();
52
+ this.dialogRef = undefined;
53
+ window.removeEventListener('resize',this._events.resize, true)
54
+ this.clearEvents();
55
+ }
56
+ viewCapacitor (){
57
+ let f = window.PreviewAnyFile || (cordova && cordova.plugins.PreviewAnyFile);
58
+ if(f && f.preview){
59
+ f = f.preview;
60
+ let {file} = this.props;
61
+ APP.FILE.getCapacitorPDFromDataURL({content:file,fileName:this.props.fileName,success:({path})=>{
62
+ if(isFunction(f)){
63
+ f(
64
+ path,
65
+ function(win){},
66
+ function(err){
67
+ console.log(err," pdf viewer in cap android ios")
68
+ }
69
+ )
70
+ }
71
+ }})
72
+ }
73
+ }
74
+ updatePdfContent(){
75
+ let file = this.props.file;
76
+ if (isMSE) {
77
+ let b64 = dataURLToBase64(file);
78
+ if(b64){
79
+ var byteCharacters = atob(b64);
80
+ var byteNumbers = new Array(byteCharacters.length);
81
+ for (var i = 0; i < byteCharacters.length; i++) {
82
+ byteNumbers[i] = byteCharacters.charCodeAt(i);
83
+ }
84
+ var byteArray = new Uint8Array(byteNumbers);
85
+ var blob = new Blob([byteArray], {
86
+ type: 'application/pdf'
87
+ });
88
+ return window.navigator.msSaveOrOpenBlob(blob, defaultStr(this.props.title,'données-impr')+".pdf");
89
+ }
90
+ return null;
91
+ }
92
+ if(isElectron()){
93
+ return ELECTRON.PRINTER.preview({
94
+ content:this.props.file,
95
+ fileName : this.props.fileName,
96
+ fileExtension : 'pdf',
97
+ });
98
+ }
99
+ if(isCapacitor(true)){
100
+ return this.viewCapacitor();
101
+ }
102
+ let dom = document.getElementById(this.pdfViewerWrapperDomId);
103
+ if(isDOMElement(dom)){
104
+ try {
105
+ this.pdfInstance = PDFObject.embed(file,dom);
106
+ } catch (e){
107
+ console.log(e,' error on loading pdf file')
108
+ }
109
+ }
110
+ }
111
+ UNSAFE_componentWillReceiveProps(nexProps,prevProps){
112
+ if(nexProps.file && nexProps.file != this.state.file){
113
+ this._pageNumber = 1;
114
+ }
115
+ }
116
+ onPrint (args){
117
+ console.log(args,' was printed');
118
+ }
119
+ getPrintSettings(){
120
+ return defaultObj(this.props.printProps,this.props.printOptions);
121
+ }
122
+ render (){
123
+ if(isMSE || isElectron() || isCapacitor(true)) return null;
124
+ let {file,dialogProps,title,onPrint,printProps,printOptions,fileName,...rest} = this.props;
125
+ dialogProps = defaultObj(dialogProps);
126
+ dialogProps.contentProps = defaultObj(dialogProps.contentProps)
127
+ dialogProps.contentProps.id = defaultStr(dialogProps.contentProps.id,this.dialogWrapperParentId,uniqid('dialog-content-wrp-par'))
128
+ this.dialogWrapperParentId = dialogProps.contentProps.id;
129
+ dialogProps.contentProps.className = classNames(dialogProps.contentProps.className,'no-padding pdf-viewer-dialog-content')
130
+ dialogProps.className = classNames(dialogProps.className,'pdf-viewer-dialog')
131
+ dialogProps.title = defaultStr(dialogProps.title,title)
132
+ rest = defaultObj(rest)
133
+ let {actions} = dialogProps;
134
+ let acts = []
135
+ let mIts = []
136
+ if(mIts.length > 0){
137
+ acts.push(
138
+ <MenuButton
139
+ menuItems = {mIts}
140
+ flat
141
+ id = {uniqid("view-page-id-butt")}
142
+ >
143
+ {<Icon name="material-more_vert" title={"pages"}/>}
144
+ </MenuButton>
145
+ )
146
+ }
147
+ Object.map(actions,(a,i)=>{
148
+ if(!a) return;
149
+ acts.push(a);
150
+ })
151
+ this.pdfViewerWrapperDomId = defaultStr(this.pdfViewerWrapperDomId,uniqid("pdf-viewer-wrapper-id"))
152
+ return (
153
+ <Dialog
154
+ key = {_uniqid("dialog-pdf-viewer-key-id")}
155
+ {...dialogProps}
156
+ ref = {(el)=>{
157
+ if(el){
158
+ this.dialogRef = el;
159
+ }
160
+ }}
161
+ fullPage
162
+ visible
163
+ actions = {acts}
164
+ >
165
+ <div className="pdf-viewer-wrapper w100 h100" id={this.pdfViewerWrapperDomId}></div>
166
+ </Dialog>
167
+ );
168
+ }
169
+ }
170
+
171
+ module.exports = PDFViewer;
172
+ PDFViewer.PDFObject = PDFObject;
173
+
174
+ PDFViewer.propTypes = {
175
+ ...Document.propTypes,
176
+ /*** méthode appelée lorsque le document est imprimé */
177
+ onPrint : PropTypes.func,
178
+ }
@@ -0,0 +1,130 @@
1
+ import {createPDF as cCreatePdf,print as cPrint,fields as pdfFields} from "$cpdf";
2
+ import Preloader from "$preloader";
3
+ import {extendObj} from "$cutils";
4
+ import pdfMake from "$cpdf/pdfmake";
5
+ import notify from "$cnotify";
6
+ import DialogProvider from "$ecomponents/Form/FormData/DialogProvider";
7
+ import {isNonNullString,defaultObj,defaultStr} from "$cutils";
8
+ import session from "$session";
9
+
10
+ const {createPdf} = pdfMake;
11
+ pdfMake.createPdf = (docDefinition,...rest)=>{
12
+ try {
13
+ //@see : https://pdfmake.github.io/docs/0.1/getting-started/client-side/methods/
14
+ const pdf = createPdf(docDefinition,...rest);
15
+ pdf.print();
16
+ //pdf.open({}, window)
17
+ return pdf;
18
+ } catch(e){
19
+ console.log(e," generating pdf make create eerrror");
20
+ notify.error(e);
21
+ return null;
22
+ }
23
+ }
24
+
25
+ const prepareOptions = options =>{
26
+ options = Object.assign({},options);
27
+ if(typeof options.showPreloader !='function'){
28
+ options.showPreloader = Preloader.open;
29
+ }
30
+ if(typeof options.hidePreloader !=='function'){
31
+ options.hidePreloader = Preloader.close;
32
+ }
33
+ return options;
34
+ }
35
+
36
+ export const createPDF = (docDefinition,...rest)=>{
37
+ return cCreatePdf(prepareOptions(docDefinition),pdfMake,...rest);
38
+ }
39
+
40
+ export const print = (data,options,...rest)=>{
41
+ return cPrint(data,prepareOptions(options),pdfMake,...rest)
42
+ }
43
+
44
+ export const getFields = (config)=>{
45
+ config = Object.assign({},config);
46
+ const sFields = extendObj({},{
47
+ pdfDocumentTitle : {
48
+ text : "Titre du document",
49
+ multiple : true,
50
+ }
51
+ },pdfFields);
52
+ delete sFields.code;
53
+ delete sFields.label;
54
+ if(!isDataURL(config.logo)){
55
+ delete sFields.displayLogo;
56
+ delete sFields.logoWidth;
57
+ }
58
+ return sFields;
59
+ }
60
+
61
+ /**** get settings data
62
+ @paramm {multiple},
63
+ @param {object} formDataProps, les prpops à passer au DialogProvider
64
+ */
65
+ export const getPrintSettings = ({multiple,sessionName,formDataProps,...rest})=>{
66
+ formDataProps = Object.assign({},formDataProps);
67
+ const hasSession = isNonNullString(sessionName);
68
+ if(hasSession){
69
+ sessionName = sessionName.trim();
70
+ } else {
71
+ sessionName = "";
72
+ }
73
+ const sessionData = hasSession ? defaultObj(session.get(sessionName)) : {};
74
+ const config = {...sessionData,...defaultObj(formDataProps.data)};
75
+ const fields = extendObj(true,{},formDataProps.fields,{
76
+ duplicateDocOnPage : {
77
+ text :'Dupliquer le(s) document(s)',
78
+ type : 'switch',
79
+ defaultValue : 0,
80
+ onValidate : ({value,context}) =>{
81
+ if(context){
82
+ const pageBreakBeforeEachDoc = context.getField("pageBreakBeforeEachDoc");
83
+ if(pageBreakBeforeEachDoc){
84
+ if(value || multiple){
85
+ pageBreakBeforeEachDoc.enable();
86
+ } else {
87
+ pageBreakBeforeEachDoc.disable();
88
+ }
89
+ }
90
+ }
91
+ }
92
+ },
93
+ pageBreakBeforeEachDoc : {
94
+ text :'Saut de page par document',
95
+ type : 'switch',
96
+ defaultValue : 1,
97
+ checkedTooltip : 'Insérer un saut de page avant chaque nouveau document',
98
+ uncheckedTooltip : 'Ne pas insérer un saut de page avant chaque nouveau document',
99
+ getValidValue : ({context,data}) => {
100
+ if(!context || !context?.isDisabled) return;
101
+ const v = context?.isDisabled()?0 : context.getValue();
102
+ if(isObj(data)){
103
+ data.pageBreakBeforeEachDoc = v;
104
+ }
105
+ return v;
106
+ }
107
+ }
108
+ },getFields(formDataProps.data))
109
+ return new Promise((resolve,reject)=>{
110
+ return DialogProvider.open({
111
+ title : "Options d'impression",
112
+ ...formDataProps,
113
+ data : config,
114
+ fields,
115
+ onSuccess : (opts)=>{
116
+ const {data} = opts;
117
+ if(hasSession){
118
+ const sessionD = {};
119
+ for(let i in fields){
120
+ sessionD[i] = data[i];
121
+ }
122
+ session.set(sessionName,sessionD);
123
+ }
124
+ DialogProvider.close();
125
+ resolve({...opts,fields});
126
+ },
127
+ onCancel : reject,
128
+ })
129
+ });
130
+ }
@@ -1 +1 @@
1
- module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"7.1.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.70.28","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.2","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":"7.1.5","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.71.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.2","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"}};