@fto-consult/expo-ui 6.77.0 → 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.77.0",
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",
@@ -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",
@@ -4018,6 +4079,13 @@ CommonDatagridComponent.propTypes = {
4018
4079
  PropTypes.string,
4019
4080
  PropTypes.bool
4020
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
+ ]),
4021
4089
  /*** si le rendu du datagrid est exportable */
4022
4090
  exportable : PropTypes.bool,
4023
4091
  baseId : PropTypes.string,
@@ -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