@fto-consult/expo-ui 6.76.6 → 6.77.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.
@@ -27,8 +27,6 @@ module.exports = (opts)=>{
27
27
  r["$components"] = r["$components"] || r["$ecomponents"];
28
28
  r["$elayouts"] = path.resolve(expo,"layouts");
29
29
  r["$emedia"] = path.resolve(expo,"media");
30
- r["$epdf"] = path.resolve(expo,"pdf");
31
- r.$pdf = r.$pdf || r.$epdf;
32
30
  r["$enavigation"] = path.resolve(expo,"navigation");
33
31
  r["$escreens"] = path.resolve(expo,"screens");
34
32
  ///les screens principaux de l'application
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fto-consult/expo-ui",
3
- "version": "6.76.6",
3
+ "version": "6.77.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.61.23",
74
+ "@fto-consult/common": "^3.62.2",
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",
@@ -514,7 +514,7 @@ const DatagridFactory = (Factory)=>{
514
514
  <View testID={testID+"_AccordionHeader"} style={[styles.accordionHeader]} ref={(el)=>{
515
515
  this.layoutRef.current = el;
516
516
  }} onLayout={this.updateLayout.bind(this)}>
517
- {this.props.showActions !== false ? <DatagridActions
517
+ {this.canRenderActions() ? <DatagridActions
518
518
  testID={testID+"_Actions"}
519
519
  pointerEvents = {pointerEvents}
520
520
  title = {this.renderDataSourceSelector()}
@@ -11,7 +11,7 @@ import {showConfirm} from "$ecomponents/Dialog";
11
11
  import Label from "$ecomponents/Label";
12
12
  import Icon,{COPY_ICON,CHECKED_ICON,UNCHECKED_ICON} from "$ecomponents/Icon";
13
13
  import filterUtils from "$cfilters";
14
- import {sortBy,isDecimal,defaultVal,sanitizeSheetName,extendObj,isObjOrArray,isObj,defaultNumber,defaultStr,isFunction,defaultBool,defaultArray,defaultObj,isNonNullString,defaultDecimal} from "$cutils";
14
+ import {sortBy,isDecimal,defaultVal,sanitizeSheetName,extendObj,isObjOrArray,isObj,isDataURL,defaultNumber,defaultStr,isFunction,defaultBool,defaultArray,defaultObj,isNonNullString,defaultDecimal} from "$cutils";
15
15
  import {Datagrid as DatagridContentLoader} from "$ecomponents/ContentLoader";
16
16
  import React from "$react";
17
17
  import DateLib from "$lib/date";
@@ -43,6 +43,8 @@ import {convertToSQL} 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} from "$cpdf";
47
+ import {isWeb,isMobileNative} from "$cplatform";
46
48
 
47
49
  export const TIMEOUT = 100;
48
50
 
@@ -1755,11 +1757,25 @@ export default class CommonDatagridComponent extends AppComponent {
1755
1757
  },
1756
1758
  }
1757
1759
  }
1758
- SetExportOptions({excel}){
1760
+ SetExportOptions({excel,pdf}){
1759
1761
  const skey = excel ? "export-to-excel":"export-to-other";
1760
1762
  const isOnlytotal = this.state.displayOnlySectionListHeaders;
1761
1763
  const displayOnlyHeader = this.canDisplayOnlySectionListHeaders() && isOnlytotal;
1762
1764
  const sData = defaultObj(this.getSessionData(skey));
1765
+ const sFields = pdf ? extendObj({},pdfFields) : {};
1766
+ const pdfConfig = this.getPdfConfig();
1767
+ delete sFields.code;
1768
+ delete sFields.label;
1769
+ if(!isDataURL(pdfConfig.logo)){
1770
+ delete sFields.displayLogo;
1771
+ delete sFields.logoWidth;
1772
+ }
1773
+ const rPdfFields = pdf ? {
1774
+ pdfDocumentTitle : {
1775
+ text : "Titre du document",
1776
+ multiple : true,
1777
+ },
1778
+ } : {};
1763
1779
  return new Promise((resolve,reject)=>{
1764
1780
  return DialogProvider.open({
1765
1781
  title : `Paramètre d'export ${excel?"excel":"pdf"}`,
@@ -1782,6 +1798,8 @@ export default class CommonDatagridComponent extends AppComponent {
1782
1798
  defaultValue : 0,
1783
1799
  type : "switch",
1784
1800
  } : null,
1801
+ ...rPdfFields,
1802
+ ...sFields,
1785
1803
  },
1786
1804
  actions : [{text:'Exporter',icon : "check"}],
1787
1805
  onSuccess: (args)=>{
@@ -1789,6 +1807,8 @@ export default class CommonDatagridComponent extends AppComponent {
1789
1807
  args.displayOnlyHeader = displayOnlyHeader;
1790
1808
  args.isOnlytotal = isOnlytotal;
1791
1809
  args.sessionData = sData;
1810
+ args.pdfConfig = pdfConfig;
1811
+ args = this.handleTableExport({...args,excel,pdf});
1792
1812
  DialogProvider.close();
1793
1813
  resolve(args);
1794
1814
  return args;
@@ -1799,126 +1819,167 @@ export default class CommonDatagridComponent extends AppComponent {
1799
1819
  }
1800
1820
  /***@see : https://docs.sheetjs.com/docs/api/utilities */
1801
1821
  exportToExcel(){
1802
- return this.SetExportOptions({excel:true}).then(({sessionKeyName,isOnlytotal,displayOnlyHeader,data:config})=>{
1803
- this.setSessionData(sessionKeyName,config);
1804
- config.fileName = sprintf(config.fileName);
1805
- config.sheetName = sanitizeSheetName(config.sheetName);
1806
- const data = [];
1807
- let totalColumns = 0;
1808
- const cols = {};
1809
- Preloader.open("préparation des données...");
1810
- const footers = this.getFooters();
1811
- const hasFields = !!config.fields.length;
1812
- const fields = config.fields;
1813
- if(displayOnlyHeader && config.aggregatedValues){
1814
- const fValues = this.getFooterValues();
1815
- const headers = ["Fonction d'agrégation"];
1816
- const aggregatorFunctions = this.aggregatorFunctions;
1817
- Object.map(footers,(f,i)=>{
1818
- if(hasFields && !fields.includes(i)) return;
1819
- const col = this.state.columns[i];
1820
- if(!col || col.visible === false) return;
1821
- headers.push(defaultStr(col.label,col.text));
1822
- cols[i] = col;
1822
+ return this.SetExportOptions({excel:true}).then((opts)=>{
1823
+ const {data,config} = opts;
1824
+ const wb = XLSX.utils.book_new();
1825
+ const ws = XLSX.utils.aoa_to_sheet(data);
1826
+ XLSX.utils.book_append_sheet(wb, ws, config.sheetName);
1827
+ FileSystem.writeExcel({...config,workbook:wb}).then(({path})=>{
1828
+ if(isNonNullString(path)){
1829
+ notify.success("Fichier enregistré dans le répertoire {0}".sprintf(path))
1830
+ }
1831
+ }).finally(()=>{
1832
+ Preloader.close();
1833
+ });
1834
+ }).finally(Preloader.close);
1835
+ }
1836
+ getPdfConfig(){
1837
+ const opts = typeof this.props.pdfConfig =="function"? this.props.pdfConfig({context:this}) : null;
1838
+ if(isObj(opts)) return opts;
1839
+ return defaultObj(this.props.pdfConfig);
1840
+ }
1841
+ exportToPdf(){
1842
+ return this.SetExportOptions({excel:false,pdf:true}).then((opts)=>{
1843
+ const {data,config:cConfig,pdfConfig} = opts;
1844
+ const config = extendObj({},pdfConfig,cConfig);
1845
+ data[0] = createTableHeader(data[0],config);
1846
+ const pdfDocumentTitle = defaultStr(APP.sprintf(config.pdfDocumentTitle)).trim();
1847
+ const content = [{
1848
+ table : {
1849
+ body : data,
1850
+ }
1851
+ }];
1852
+ if(pdfDocumentTitle){
1853
+ content.unshift({
1854
+ text : pdfDocumentTitle,
1855
+ fontSize : 16,
1856
+ color : "red",
1857
+ bold : true,
1858
+ margin : pageHeaderMargin,
1859
+ })
1860
+ }
1861
+ const pdf = createPDF({
1862
+ content,
1863
+ },config);
1864
+ if(isWeb()){
1865
+ return pdf.open();
1866
+ }
1867
+ return;
1868
+ FileSystem.writeExcel({...config,workbook:wb}).then(({path})=>{
1869
+ if(isNonNullString(path)){
1870
+ notify.success("Fichier enregistré dans le répertoire {0}".sprintf(path))
1871
+ }
1872
+ })
1873
+ }).finally(Preloader.close);
1874
+ }
1875
+ handleTableExport({sessionKeyName,excel,pdf,isOnlytotal,displayOnlyHeader,data:config}){
1876
+ this.setSessionData(sessionKeyName,config);
1877
+ config.fileName = sprintf(config.fileName);
1878
+ config.sheetName = sanitizeSheetName(config.sheetName);
1879
+ const data = [];
1880
+ let totalColumns = 0;
1881
+ const cols = {};
1882
+ Preloader.open("préparation des données...");
1883
+ const footers = this.getFooters();
1884
+ const hasFields = !!config.fields.length;
1885
+ const fields = config.fields;
1886
+ const headers = [];
1887
+ if(displayOnlyHeader && config.aggregatedValues){
1888
+ const fValues = this.getFooterValues();
1889
+ headers.push("Fonction d'agrégation");
1890
+ const aggregatorFunctions = this.aggregatorFunctions;
1891
+ Object.map(footers,(f,i)=>{
1892
+ if(hasFields && !fields.includes(i)) return;
1893
+ const col = this.state.columns[i];
1894
+ if(!col || col.visible === false) return;
1895
+ headers.push(defaultStr(col.label,col.text));
1896
+ cols[i] = col;
1897
+ });
1898
+ data.push(headers);
1899
+ Object.map(aggregatorFunctions,(ag,i)=>{
1900
+ const d = [defaultStr(ag.label,ag.text,i)];
1901
+ Object.map(fValues,(footer,field)=>{
1902
+ if(!cols[field]) return;
1903
+ d.push(defaultNumber(footer[i]))
1823
1904
  });
1824
- data.push(headers);
1825
- Object.map(aggregatorFunctions,(ag,i)=>{
1826
- const d = [defaultStr(ag.label,ag.text,i)];
1827
- Object.map(fValues,(footer,field)=>{
1828
- if(!cols[field]) return;
1829
- d.push(defaultNumber(footer[i]))
1830
- });
1831
- data.push(d);
1832
- })
1833
- } else {
1834
- const headers = [];
1835
- const hFooters = defaultObj(this.sectionListHeaderFooters);
1836
- const agFunc = this.state.aggregatorFunction;
1837
- const canExportOnlyTotal = isOnlytotal || (config.exportOnlyTotal && displayOnlyHeader);
1838
- if(canExportOnlyTotal){
1839
- headers.push("");
1840
- }
1841
- Object.map(this.state.columns,(col,i)=>{
1842
- if(hasFields && !fields.includes(i)) return;
1843
- if(!isObj(col) || col.visible === false || this.isSelectableColumn(col,i) || i === this.getIndexColumnName()) return;
1844
- if(canExportOnlyTotal && !(i in footers)) return;
1845
- cols[i] = col;
1846
- headers.push(defaultStr(col.label,col.text));
1847
- totalColumns++;
1848
- })
1849
- data.push(headers);
1850
- Object.map(this.state.data,(dat,index)=>{
1851
- ///si l'on a a faire à une colonne de type entete
1852
- const d = [];
1853
- if(dat.isSectionListHeader){
1854
- if(!config.displayTotals && !canExportOnlyTotal) return;
1855
- const {sectionListHeaderKey:key} = dat;
1856
- const val = key === this.emptySectionListHeaderValue ? this.getEmptySectionListHeaderValue() : key;
1857
- d.push(val);
1858
- if(!canExportOnlyTotal){
1859
- for(let i = 1;i<totalColumns;i++){
1860
- d.push(null);
1861
- }
1862
- data.push(d);
1863
- } else {
1864
- const hF = hFooters[key];
1865
- if(isObj(hF) && isNonNullString(agFunc)){
1866
- const dd = [];
1867
- Object.map(cols,(col,i)=>{
1868
- if(i in hF){
1869
- const ff = hF[i];
1870
- dd.push(defaultNumber(ff[agFunc]));
1871
- } else {
1872
- dd.push(null);
1873
- }
1874
- });
1875
- if(canExportOnlyTotal){
1876
- dd.unshift(val);
1877
- data.push(dd);
1878
- } else {
1879
- data.push(d);
1880
- data.push(dd);
1881
- }
1905
+ data.push(d);
1906
+ })
1907
+ } else {
1908
+ const hFooters = defaultObj(this.sectionListHeaderFooters);
1909
+ const agFunc = this.state.aggregatorFunction;
1910
+ const canExportOnlyTotal = isOnlytotal || (config.exportOnlyTotal && displayOnlyHeader);
1911
+ if(canExportOnlyTotal){
1912
+ headers.push("");
1913
+ }
1914
+ Object.map(this.state.columns,(col,i)=>{
1915
+ if(hasFields && !fields.includes(i)) return;
1916
+ if(!isObj(col) || col.visible === false || this.isSelectableColumn(col,i) || i === this.getIndexColumnName()) return;
1917
+ if(canExportOnlyTotal && !(i in footers)) return;
1918
+ cols[i] = col;
1919
+ headers.push(defaultStr(col.label,col.text));
1920
+ totalColumns++;
1921
+ });
1922
+ data.push(headers);
1923
+ Object.map(this.state.data,(dat,index)=>{
1924
+ ///si l'on a a faire à une colonne de type entete
1925
+ const d = [];
1926
+ if(dat.isSectionListHeader){
1927
+ if(!config.displayTotals && !canExportOnlyTotal) return;
1928
+ const {sectionListHeaderKey:key} = dat;
1929
+ const val = key === this.emptySectionListHeaderValue ? this.getEmptySectionListHeaderValue() : key;
1930
+ d.push(val);
1931
+ if(!canExportOnlyTotal){
1932
+ for(let i = 1;i<totalColumns;i++){
1933
+ d.push(null);
1934
+ }
1935
+ data.push(d);
1936
+ } else {
1937
+ const hF = hFooters[key];
1938
+ if(isObj(hF) && isNonNullString(agFunc)){
1939
+ const dd = [];
1940
+ Object.map(cols,(col,i)=>{
1941
+ if(i in hF){
1942
+ const ff = hF[i];
1943
+ dd.push(defaultNumber(ff[agFunc]));
1944
+ } else {
1945
+ dd.push(null);
1946
+ }
1947
+ });
1948
+ if(canExportOnlyTotal){
1949
+ dd.unshift(val);
1950
+ data.push(dd);
1882
1951
  } else {
1883
1952
  data.push(d);
1953
+ data.push(dd);
1884
1954
  }
1955
+ } else {
1956
+ data.push(d);
1885
1957
  }
1886
- } else if(!canExportOnlyTotal) {
1887
- Object.map(cols,(col,i)=>{
1888
- const isDateField = defaultStr(col.type).toLowerCase().contains("date");
1889
- d.push(this.renderRowCell({
1890
- data : dat,
1891
- rowData : dat,
1892
- rowCounterIndex : index,
1893
- rowIndex : index,
1894
- formatValue : false,
1895
- renderRowCell : false,
1896
- columnField : defaultStr(col.field,i),
1897
- columnDef :{
1898
- ...col,
1899
- ...(isDateField?{format:config.dateFormat}:{})
1900
- }
1901
- }));
1902
- })
1903
- data.push(d);
1904
1958
  }
1905
- });
1906
- }
1907
- const wb = XLSX.utils.book_new();
1908
- const ws = XLSX.utils.aoa_to_sheet(data);
1909
- XLSX.utils.book_append_sheet(wb, ws, config.sheetName);
1910
- FileSystem.writeExcel({...config,workbook:wb}).then(({path})=>{
1911
- if(isNonNullString(path)){
1912
- notify.success("Fichier enregistré dans le répertoire {0}".sprintf(path))
1959
+ } else if(!canExportOnlyTotal) {
1960
+ Object.map(cols,(col,i)=>{
1961
+ const isDateField = defaultStr(col.type).toLowerCase().contains("date");
1962
+ d.push(this.renderRowCell({
1963
+ data : dat,
1964
+ rowData : dat,
1965
+ rowCounterIndex : index,
1966
+ rowIndex : index,
1967
+ formatValue : false,
1968
+ renderRowCell : false,
1969
+ columnField : defaultStr(col.field,i),
1970
+ columnDef :{
1971
+ ...col,
1972
+ ...(isDateField?{format:config.dateFormat}:{})
1973
+ }
1974
+ }));
1975
+ })
1976
+ data.push(d);
1913
1977
  }
1914
- }).finally(()=>{
1915
- Preloader.close();
1916
- })
1917
- })
1918
- }
1919
- exportToPdf(){
1920
-
1921
- }
1978
+ });
1979
+ }
1980
+ return {data,headers,config}
1981
+ }
1982
+
1922
1983
  renderExportableMenu(){
1923
1984
  if(this.isDashboard() || !defaultStr(this.state.displayType).toLowerCase().contains("table")) return null;
1924
1985
  const items = [];
@@ -1929,7 +1990,7 @@ export default class CommonDatagridComponent extends AppComponent {
1929
1990
  onPress: this.exportToExcel.bind(this),
1930
1991
  })
1931
1992
  }
1932
- if(false && this.canExportToPDF()){
1993
+ if(this.canExportToPDF()){
1933
1994
  items.push({
1934
1995
  text : "Exporter au format pdf",
1935
1996
  icon : "file-pdf-box",
@@ -3781,6 +3842,9 @@ export default class CommonDatagridComponent extends AppComponent {
3781
3842
  key = {props.rowKey}
3782
3843
  />
3783
3844
  }
3845
+ canRenderActions(){
3846
+ return this.props.showActions !== false && this.props.renderActions !== false;
3847
+ }
3784
3848
  renderSelectFieldCell(args){
3785
3849
  return this.renderSelectFieldCell(args);
3786
3850
  }
@@ -3918,6 +3982,11 @@ CommonDatagridComponent.propTypes = {
3918
3982
  PropTypes.bool,
3919
3983
  PropTypes.object,
3920
3984
  ]),
3985
+ /*** alias à show actions */
3986
+ renderActions : PropTypes.oneOfType([
3987
+ PropTypes.bool,
3988
+ PropTypes.func,
3989
+ ]),
3921
3990
  showActions : PropTypes.bool,//si on affichera les actions du datagrid
3922
3991
  /*** affiche ou masque les filtres */
3923
3992
  showFilters : PropTypes.bool,
@@ -4010,6 +4079,13 @@ CommonDatagridComponent.propTypes = {
4010
4079
  PropTypes.string,
4011
4080
  PropTypes.bool
4012
4081
  ]),
4082
+ /*** cette props permet de récupérer les options supplémentaires à passer à la fonction createPDF de pdfmake */
4083
+ pdfConfig : PropTypes.oneOfType([
4084
+ PropTypes.func, //si fonction, function({context})=><Object>
4085
+ PropTypes.shape({
4086
+ logo : PropTypes.string, //les options d'impression au format pdf
4087
+ })
4088
+ ]),
4013
4089
  /*** si le rendu du datagrid est exportable */
4014
4090
  exportable : PropTypes.bool,
4015
4091
  baseId : PropTypes.string,
@@ -291,7 +291,7 @@ const DatagridFactory = (Factory)=>{
291
291
  return <DatagridProvider context={this}>
292
292
  <View style={[styles.container,{flex:1}]} testID={testID+"_TableContainer"} pointerEvents={pointerEvents}>
293
293
  <View ref={(el)=>{this.layoutRef.current = el;}} testID={testID+"_LayoutContainer"}>
294
- {this.props.showActions !== false ? <DatagridActions
294
+ {this.canRenderActions() ? <DatagridActions
295
295
  pointerEvents = {pointerEvents}
296
296
  title = {this.renderDataSourceSelector()}
297
297
  actions = {actions}
@@ -257,7 +257,6 @@ export default class FormDataComponent extends AppComponent{
257
257
  ignoreFields, //la liste des champs à ignorer lors du parcours des champs
258
258
  toolbarProps,
259
259
  text,
260
- showActionsOnTop,
261
260
  getFieldProps, ///pour ajouter des champs supplémentaires aux props de la field
262
261
  title,
263
262
  onMount,
@@ -1 +1 @@
1
- module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.75.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.61.7","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.18","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.1.1","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-gesture-handler":{"version":"2.12.1","url":"https://github.com/software-mansion/react-native-gesture-handler#readme","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.1","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.77.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.61.23","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.18","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.1.1","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-gesture-handler":{"version":"2.12.1","url":"https://github.com/software-mansion/react-native-gesture-handler#readme","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.1","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"}};
File without changes