@fto-consult/expo-ui 6.77.0 → 6.77.2

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.2",
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.9",
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,sprintf as pdfSprintf} from "$cpdf";
47
+ import {isWeb,isMobileNative} from "$cplatform";
46
48
 
47
49
  export const TIMEOUT = 100;
48
50
 
@@ -366,7 +368,12 @@ export default class CommonDatagridComponent extends AppComponent {
366
368
  }
367
369
  /*** si une ligne peut être selectionable */
368
370
  canSelectRow(row){
369
- return isObj(row) && row.isSectionListHeader !== true ? true : false;
371
+ const s = isObj(row) && row.isSectionListHeader !== true ? true : false;
372
+ if(!s) return false;
373
+ if(typeof this.props.isRowSelectable =='function'){
374
+ return !!this.isRowSelected({row,rowData:row,context:this});
375
+ }
376
+ return true;
370
377
  }
371
378
  prepareSectionListColumns(props){
372
379
  props = defaultObj(props,this.props);
@@ -1755,11 +1762,25 @@ export default class CommonDatagridComponent extends AppComponent {
1755
1762
  },
1756
1763
  }
1757
1764
  }
1758
- SetExportOptions({excel}){
1765
+ SetExportOptions({excel,pdf}){
1759
1766
  const skey = excel ? "export-to-excel":"export-to-other";
1760
1767
  const isOnlytotal = this.state.displayOnlySectionListHeaders;
1761
1768
  const displayOnlyHeader = this.canDisplayOnlySectionListHeaders() && isOnlytotal;
1762
1769
  const sData = defaultObj(this.getSessionData(skey));
1770
+ const sFields = pdf ? extendObj({},pdfFields) : {};
1771
+ const pdfConfig = this.getPdfConfig();
1772
+ delete sFields.code;
1773
+ delete sFields.label;
1774
+ if(!isDataURL(pdfConfig.logo)){
1775
+ delete sFields.displayLogo;
1776
+ delete sFields.logoWidth;
1777
+ }
1778
+ const rPdfFields = pdf ? {
1779
+ pdfDocumentTitle : {
1780
+ text : "Titre du document",
1781
+ multiple : true,
1782
+ },
1783
+ } : {};
1763
1784
  return new Promise((resolve,reject)=>{
1764
1785
  return DialogProvider.open({
1765
1786
  title : `Paramètre d'export ${excel?"excel":"pdf"}`,
@@ -1782,6 +1803,8 @@ export default class CommonDatagridComponent extends AppComponent {
1782
1803
  defaultValue : 0,
1783
1804
  type : "switch",
1784
1805
  } : null,
1806
+ ...rPdfFields,
1807
+ ...sFields,
1785
1808
  },
1786
1809
  actions : [{text:'Exporter',icon : "check"}],
1787
1810
  onSuccess: (args)=>{
@@ -1789,6 +1812,8 @@ export default class CommonDatagridComponent extends AppComponent {
1789
1812
  args.displayOnlyHeader = displayOnlyHeader;
1790
1813
  args.isOnlytotal = isOnlytotal;
1791
1814
  args.sessionData = sData;
1815
+ args.pdfConfig = pdfConfig;
1816
+ args = this.handleTableExport({...args,excel,pdf});
1792
1817
  DialogProvider.close();
1793
1818
  resolve(args);
1794
1819
  return args;
@@ -1799,126 +1824,164 @@ export default class CommonDatagridComponent extends AppComponent {
1799
1824
  }
1800
1825
  /***@see : https://docs.sheetjs.com/docs/api/utilities */
1801
1826
  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;
1827
+ return this.SetExportOptions({excel:true}).then((opts)=>{
1828
+ const {data,config} = opts;
1829
+ const wb = XLSX.utils.book_new();
1830
+ const ws = XLSX.utils.aoa_to_sheet(data);
1831
+ XLSX.utils.book_append_sheet(wb, ws, config.sheetName);
1832
+ FileSystem.writeExcel({...config,workbook:wb}).then(({path})=>{
1833
+ if(isNonNullString(path)){
1834
+ notify.success("Fichier enregistré dans le répertoire {0}".sprintf(path))
1835
+ }
1836
+ }).finally(()=>{
1837
+ Preloader.close();
1838
+ });
1839
+ }).finally(Preloader.close);
1840
+ }
1841
+ getPdfConfig(){
1842
+ const opts = typeof this.props.pdfConfig =="function"? this.props.pdfConfig({context:this}) : null;
1843
+ if(isObj(opts)) return opts;
1844
+ return defaultObj(this.props.pdfConfig);
1845
+ }
1846
+ exportToPdf(){
1847
+ return this.SetExportOptions({excel:false,pdf:true}).then((opts)=>{
1848
+ const {data,config:cConfig,pdfConfig} = opts;
1849
+ const config = extendObj({},pdfConfig,cConfig);
1850
+ data[0] = createTableHeader(data[0],config);
1851
+ const pT = defaultStr(config.pdfDocumentTitle).trim();
1852
+ const pdfDocumentTitle = pT ? pdfSprintf(pT,{fontSize : 20,color : "red"}) : null;
1853
+ const content = [{
1854
+ table : {
1855
+ body : data,
1856
+ }
1857
+ }];
1858
+ if(pdfDocumentTitle){
1859
+ content.unshift(pdfDocumentTitle);
1860
+ }
1861
+ config.showPreloader = typeof config.showPreloader ==="function"? config.showPreloader : Preloader.open;
1862
+ config.hidePreloader = typeof config.hidePreloader =="function"? config.hidePreloader : Preloader.close;
1863
+ const pdf = createPDF({
1864
+ content,
1865
+ },config);
1866
+ if(isWeb()){
1867
+ return pdf.open();
1868
+ }
1869
+ return;
1870
+ FileSystem.writeExcel({...config,workbook:wb}).then(({path})=>{
1871
+ if(isNonNullString(path)){
1872
+ notify.success("Fichier enregistré dans le répertoire {0}".sprintf(path))
1873
+ }
1874
+ })
1875
+ }).finally(Preloader.close);
1876
+ }
1877
+ handleTableExport({sessionKeyName,excel,pdf,isOnlytotal,displayOnlyHeader,data:config}){
1878
+ this.setSessionData(sessionKeyName,config);
1879
+ config.fileName = sprintf(config.fileName);
1880
+ config.sheetName = sanitizeSheetName(config.sheetName);
1881
+ const data = [];
1882
+ let totalColumns = 0;
1883
+ const cols = {};
1884
+ Preloader.open("préparation des données...");
1885
+ const footers = this.getFooters();
1886
+ const hasFields = !!config.fields.length;
1887
+ const fields = config.fields;
1888
+ const headers = [];
1889
+ if(displayOnlyHeader && config.aggregatedValues){
1890
+ const fValues = this.getFooterValues();
1891
+ headers.push("Fonction d'agrégation");
1892
+ const aggregatorFunctions = this.aggregatorFunctions;
1893
+ Object.map(footers,(f,i)=>{
1894
+ if(hasFields && !fields.includes(i)) return;
1895
+ const col = this.state.columns[i];
1896
+ if(!col || col.visible === false) return;
1897
+ headers.push(defaultStr(col.label,col.text));
1898
+ cols[i] = col;
1899
+ });
1900
+ data.push(headers);
1901
+ Object.map(aggregatorFunctions,(ag,i)=>{
1902
+ const d = [defaultStr(ag.label,ag.text,i)];
1903
+ Object.map(fValues,(footer,field)=>{
1904
+ if(!cols[field]) return;
1905
+ d.push(defaultNumber(footer[i]))
1823
1906
  });
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
- }
1907
+ data.push(d);
1908
+ })
1909
+ } else {
1910
+ const hFooters = defaultObj(this.sectionListHeaderFooters);
1911
+ const agFunc = this.state.aggregatorFunction;
1912
+ const canExportOnlyTotal = isOnlytotal || (config.exportOnlyTotal && displayOnlyHeader);
1913
+ if(canExportOnlyTotal){
1914
+ headers.push("");
1915
+ }
1916
+ Object.map(this.state.columns,(col,i)=>{
1917
+ if(hasFields && !fields.includes(i)) return;
1918
+ if(!isObj(col) || col.visible === false || this.isSelectableColumn(col,i) || i === this.getIndexColumnName()) return;
1919
+ if(canExportOnlyTotal && !(i in footers)) return;
1920
+ cols[i] = col;
1921
+ headers.push(defaultStr(col.label,col.text));
1922
+ totalColumns++;
1923
+ });
1924
+ data.push(headers);
1925
+ Object.map(this.state.data,(dat,index)=>{
1926
+ ///si l'on a a faire à une colonne de type entete
1927
+ const d = [];
1928
+ if(dat.isSectionListHeader){
1929
+ if(!config.displayTotals && !canExportOnlyTotal) return;
1930
+ const {sectionListHeaderKey:key} = dat;
1931
+ const val = key === this.emptySectionListHeaderValue ? this.getEmptySectionListHeaderValue() : key;
1932
+ d.push(val);
1933
+ if(!canExportOnlyTotal){
1934
+ for(let i = 1;i<totalColumns;i++){
1935
+ d.push(null);
1936
+ }
1937
+ data.push(d);
1938
+ } else {
1939
+ const hF = hFooters[key];
1940
+ if(isObj(hF) && isNonNullString(agFunc)){
1941
+ const dd = [];
1942
+ Object.map(cols,(col,i)=>{
1943
+ if(i in hF){
1944
+ const ff = hF[i];
1945
+ dd.push(defaultNumber(ff[agFunc]));
1946
+ } else {
1947
+ dd.push(null);
1948
+ }
1949
+ });
1950
+ if(canExportOnlyTotal){
1951
+ dd.unshift(val);
1952
+ data.push(dd);
1882
1953
  } else {
1883
1954
  data.push(d);
1955
+ data.push(dd);
1884
1956
  }
1957
+ } else {
1958
+ data.push(d);
1885
1959
  }
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
1960
  }
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))
1961
+ } else if(!canExportOnlyTotal) {
1962
+ Object.map(cols,(col,i)=>{
1963
+ const isDateField = defaultStr(col.type).toLowerCase().contains("date");
1964
+ d.push(this.renderRowCell({
1965
+ data : dat,
1966
+ rowData : dat,
1967
+ rowCounterIndex : index,
1968
+ rowIndex : index,
1969
+ formatValue : false,
1970
+ renderRowCell : false,
1971
+ columnField : defaultStr(col.field,i),
1972
+ columnDef :{
1973
+ ...col,
1974
+ ...(isDateField?{format:config.dateFormat}:{})
1975
+ }
1976
+ }));
1977
+ })
1978
+ data.push(d);
1913
1979
  }
1914
- }).finally(()=>{
1915
- Preloader.close();
1916
- })
1917
- })
1918
- }
1919
- exportToPdf(){
1920
-
1921
- }
1980
+ });
1981
+ }
1982
+ return {data,headers,config}
1983
+ }
1984
+
1922
1985
  renderExportableMenu(){
1923
1986
  if(this.isDashboard() || !defaultStr(this.state.displayType).toLowerCase().contains("table")) return null;
1924
1987
  const items = [];
@@ -1929,7 +1992,7 @@ export default class CommonDatagridComponent extends AppComponent {
1929
1992
  onPress: this.exportToExcel.bind(this),
1930
1993
  })
1931
1994
  }
1932
- if(false && this.canExportToPDF()){
1995
+ if(this.canExportToPDF()){
1933
1996
  items.push({
1934
1997
  text : "Exporter au format pdf",
1935
1998
  icon : "file-pdf-box",
@@ -3873,6 +3936,7 @@ const chartDisplayType = PropTypes.oneOf(Object.keys(displayTypes).filter(type=>
3873
3936
  return typeof x =='object' && x && typeof x.disabled !== true && x.isChart === true && true || false;
3874
3937
  }));
3875
3938
  CommonDatagridComponent.propTypes = {
3939
+ isRowSelectable : PropTypes.func,//spécifie si la ligne rowData est selectionable : function({row,rowData,context})=><boolean>
3876
3940
  title : PropTypes.oneOfType([
3877
3941
  PropTypes.func,
3878
3942
  PropTypes.string,
@@ -4018,6 +4082,13 @@ CommonDatagridComponent.propTypes = {
4018
4082
  PropTypes.string,
4019
4083
  PropTypes.bool
4020
4084
  ]),
4085
+ /*** cette props permet de récupérer les options supplémentaires à passer à la fonction createPDF de pdfmake */
4086
+ pdfConfig : PropTypes.oneOfType([
4087
+ PropTypes.func, //si fonction, function({context})=><Object>
4088
+ PropTypes.shape({
4089
+ logo : PropTypes.string, //les options d'impression au format pdf
4090
+ })
4091
+ ]),
4021
4092
  /*** si le rendu du datagrid est exportable */
4022
4093
  exportable : PropTypes.bool,
4023
4094
  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