diff --git a/.gitignore b/.gitignore index 0c97e2a..204f277 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,17 @@ -Source/.svn -Source/GPUCache -Source/modeler-merge-marker -Source/.mendix-cache -Source/*.mpr.lock -Source/*.mpr.bak -Source/*.mpr.left* -Source/*.mpr.right* -Source/.settings -Source/deployment -Source/theme-cache -proxies -target -*.launch -.classpath -.project +Source/.svn +Source/GPUCache +Source/modeler-merge-marker +Source/.mendix-cache +Source/*.mpr.lock +Source/*.mpr.bak +Source/*.mpr.left* +Source/*.mpr.right* +Source/.settings +Source/deployment +Source/theme-cache +proxies +target +*.launch +.classpath +.project .vscode \ No newline at end of file diff --git a/LICENSE b/LICENSE index 02093c3..b6a0c2f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,9 +1,9 @@ -MIT License - -Copyright 2022 Mendix Technology B.V. - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - +MIT License + +Copyright 2022 Mendix Technology B.V. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index a3c34fd..fc21f72 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -Please see [Administration](https://docs.mendix.com/appstore/modules/administration/) in the Mendix documentation for details. +Please see [Administration](https://docs.mendix.com/appstore/modules/administration/) in the Mendix documentation for details. diff --git a/Source/.gitignore b/Source/.gitignore index 6f8153a..95df817 100644 --- a/Source/.gitignore +++ b/Source/.gitignore @@ -51,3 +51,5 @@ /administrationmodule.mpr.bak /administrationmodule.mpr.lock /nativemobile/builds/ +.DS_Store +/.svn/ diff --git a/Source/AdministrationModule.mpr b/Source/AdministrationModule.mpr index da7e479..d26201e 100644 Binary files a/Source/AdministrationModule.mpr and b/Source/AdministrationModule.mpr differ diff --git a/Source/javascriptsource/datawidgets/actions/Export_To_Excel.js b/Source/javascriptsource/datawidgets/actions/Export_To_Excel.js index c7fee5a..a16cb11 100644 --- a/Source/javascriptsource/datawidgets/actions/Export_To_Excel.js +++ b/Source/javascriptsource/datawidgets/actions/Export_To_Excel.js @@ -26,54 +26,57 @@ export async function Export_To_Excel(datagridName, fileName, sheetName, include return false; } - return new Promise((resolve, reject) => { - const stream = - window[window.DATAGRID_DATA_EXPORT][datagridName].create(); + const REGISTRY_NAME = "com.mendix.widgets.web.datagrid.export"; + const registry = window[REGISTRY_NAME]; + const controller = registry.get(datagridName); - let worksheet; - let headers; - const streamOptions = { limit: chunkSize }; - stream.process((msg) => { - if (!msg) { - return; - } + if (controller === undefined) { + return false; + } + + return new Promise((resolve) => { + function handler(req) { + let worksheet; + let headers; - switch (msg.type) { - case "columns": - headers = msg.payload.map(column => column.name); - if (includeColumnHeaders) { - worksheet = utils.aoa_to_sheet([headers]); - } - break; - case "data": - if (worksheet === undefined) { - worksheet = utils.aoa_to_sheet(msg.payload) - } else { - utils.sheet_add_aoa(worksheet, msg.payload, { origin: -1 }); - } - break; - case "end": - if (worksheet) { - // Set character width for each column - // https://docs.sheetjs.com/docs/csf/sheet#worksheet-object - worksheet["!cols"] = headers.map(header => ({ - wch: header.length + 10 - })); - const workbook = utils.book_new(); - utils.book_append_sheet(workbook, worksheet, sheetName === "" ? "Data" : sheetName); - writeFileXLSX(workbook, `${fileName}.xlsx`); - resolve(true); - } else { - resolve(false); - } - break; - case "aborted": + req.on("headers", (hds) => { + headers = hds.map(header => header.name); + if (includeColumnHeaders) { + worksheet = utils.aoa_to_sheet([headers]); + } + }); + + req.on("data", (data) => { + if (worksheet === undefined) { + worksheet = utils.aoa_to_sheet(data) + } else { + utils.sheet_add_aoa(worksheet, data, { origin: -1 }); + } + }); + + req.on("end", () => { + if (worksheet) { + // Set character width for each column + // https://docs.sheetjs.com/docs/csf/sheet#worksheet-object + worksheet["!cols"] = headers.map(header => ({ + wch: header.length + 10 + })); + const workbook = utils.book_new(); + utils.book_append_sheet(workbook, worksheet, sheetName === "" ? "Data" : sheetName); + writeFileXLSX(workbook, `${fileName}.xlsx`); + resolve(true); + } else { resolve(false); - break; - } - }, streamOptions); + } + }); + + req.on("abort", () => resolve(false)); + } - stream.start(); + controller.exportData(handler, { + withHeaders: true, + limit: chunkSize.toNumber() + }) }); // END USER CODE } diff --git a/Source/javascriptsource/datawidgets/actions/Reset_All_Filters.js b/Source/javascriptsource/datawidgets/actions/Reset_All_Filters.js new file mode 100644 index 0000000..243877e --- /dev/null +++ b/Source/javascriptsource/datawidgets/actions/Reset_All_Filters.js @@ -0,0 +1,26 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import "mx-global"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * @param {string} targetName - Name of the widget for which filters should be reset. Valid targets are: Data grid 2, Gallery. You can find filter name in widget settings in the "Common" group (Properties>Common>Name). + * @param {boolean} setToDefault - Set to default value. If true, filter will be set to its default value, otherwise it will be set to empty. + * @returns {Promise.} + */ +export async function Reset_All_Filters(targetName, setToDefault) { + // BEGIN USER CODE + const plugin = window["com.mendix.widgets.web.plugin.externalEvents"]; + if (plugin) { + plugin.emit(targetName, "reset.filters", setToDefault); + } + // END USER CODE +} diff --git a/Source/javascriptsource/datawidgets/actions/Reset_Filter.js b/Source/javascriptsource/datawidgets/actions/Reset_Filter.js new file mode 100644 index 0000000..b0d8eef --- /dev/null +++ b/Source/javascriptsource/datawidgets/actions/Reset_Filter.js @@ -0,0 +1,26 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import "mx-global"; +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * @param {string} targetName - Name of the filter to reset. Valid targets are: Number filter, Date filter, Text filter, Drop-down filter. You can find filter name in widget settings in the "Common" group (Properties>Common>Name). + * @param {boolean} setToDefault - Set to default value. If true, filter will be set to its default value, otherwise it will be set to empty. + * @returns {Promise.} + */ +export async function Reset_Filter(targetName, setToDefault) { + // BEGIN USER CODE + const plugin = window["com.mendix.widgets.web.plugin.externalEvents"]; + if (plugin) { + plugin.emit(targetName, "reset.value", setToDefault); + } + // END USER CODE +} diff --git a/Source/javascriptsource/datawidgets/actions/Set_Filter.js b/Source/javascriptsource/datawidgets/actions/Set_Filter.js new file mode 100644 index 0000000..2f2518d --- /dev/null +++ b/Source/javascriptsource/datawidgets/actions/Set_Filter.js @@ -0,0 +1,34 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import "mx-global"; +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * @param {string} targetName - Name of the filter to set. Valid targets are: Number filter, Date filter, Text filter, Drop-down filter. You can find filter name in widget settings in the "Common" group (Properties>Common>Name). + * @param {boolean} useDefaultValue - Determine the use of default value provided by the filter component itself. +If true, "Value" section will be ignored + * @param {"DataWidgets.Filter_Operators.contains"|"DataWidgets.Filter_Operators.startsWith"|"DataWidgets.Filter_Operators.endsWith"|"DataWidgets.Filter_Operators.between"|"DataWidgets.Filter_Operators.greater"|"DataWidgets.Filter_Operators.greaterEqual"|"DataWidgets.Filter_Operators.equal"|"DataWidgets.Filter_Operators.notEqual"|"DataWidgets.Filter_Operators.smaller"|"DataWidgets.Filter_Operators.smallerEqual"|"DataWidgets.Filter_Operators.empty"|"DataWidgets.Filter_Operators.notEmpty"} operators - Selected operators value. If filter has operators, this value will be applied. + * @param {string} stringValue - Value set for dropdown filter or text filter. Choose empty if not use. + * @param {Big} numberValue - Number value for number filter. Choose empty if not use. + * @param {Date} dateTimeValue - Date time value for date filter, can also be use as "start date". Choose empty if not use. + * @param {Date} dateTimeValue_2 - End date time value for range filter. Choose empty if not use. + * @returns {Promise.} + */ +export async function Set_Filter(targetName, useDefaultValue, operators, stringValue, numberValue, dateTimeValue, dateTimeValue_2) { + // BEGIN USER CODE + const plugin = window["com.mendix.widgets.web.plugin.externalEvents"]; + if (plugin) { + plugin.emit(targetName, "set.value", useDefaultValue, { + operators, stringValue, numberValue, dateTimeValue, dateTimeValue2: dateTimeValue_2 + }); + } + // END USER CODE +} diff --git a/Source/javascriptsource/datawidgets/actions/xlsx-export-tools.js b/Source/javascriptsource/datawidgets/actions/xlsx-export-tools.js index b8b500f..9536149 100644 --- a/Source/javascriptsource/datawidgets/actions/xlsx-export-tools.js +++ b/Source/javascriptsource/datawidgets/actions/xlsx-export-tools.js @@ -1,3 +1,3 @@ /*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ -var e=function(e){return String.fromCharCode(e)},t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function r(e){for(var r="",n=0,a=0,o=0,i=0,s=0,l=0,c=0,f=0;f>2,s=(3&n)<<4|(a=e.charCodeAt(f++))>>4,l=(15&a)<<2|(o=e.charCodeAt(f++))>>6,c=63&o,isNaN(a)?l=c=64:isNaN(o)&&(c=64),r+=t.charAt(i)+t.charAt(s)+t.charAt(l)+t.charAt(c);return r}function n(e){var r="",n=0,a=0,o=0,i=0,s=0,l=0;e=e.replace(/^data:([^\/]+\/[^\/]+)?;base64\,/,"").replace(/[^\w\+\/\=]/g,"");for(var c=0;c>4,r+=String.fromCharCode(n),a=(15&i)<<4|(s=t.indexOf(e.charAt(c++)))>>2,64!==s&&(r+=String.fromCharCode(a)),o=(3&s)<<6|(l=t.indexOf(e.charAt(c++))),64!==l&&(r+=String.fromCharCode(o));return r}var a=function(){return"undefined"!=typeof Buffer&&"undefined"!=typeof process&&void 0!==process.versions&&!!process.versions.node}(),o=function(){if("undefined"!=typeof Buffer){var e=!Buffer.from;if(!e)try{Buffer.from("foo","utf8")}catch(t){e=!0}return e?function(e,t){return t?new Buffer(e,t):new Buffer(e)}:Buffer.from.bind(Buffer)}return function(){}}(),i=function(){if("undefined"==typeof Buffer)return!1;var e=o([65,0]);return!!e&&1==e.toString("utf16le").length}();function s(e){return a?Buffer.alloc?Buffer.alloc(e):new Buffer(e):"undefined"!=typeof Uint8Array?new Uint8Array(e):new Array(e)}function l(e){return a?Buffer.allocUnsafe?Buffer.allocUnsafe(e):new Buffer(e):"undefined"!=typeof Uint8Array?new Uint8Array(e):new Array(e)}var c=function(e){return a?o(e,"binary"):e.split("").map((function(e){return 255&e.charCodeAt(0)}))};function f(e){if("undefined"==typeof ArrayBuffer)return c(e);for(var t=new ArrayBuffer(e.length),r=new Uint8Array(t),n=0;n!=e.length;++n)r[n]=255&e.charCodeAt(n);return t}var h=a?function(e){return Buffer.concat(e.map((function(e){return Buffer.isBuffer(e)?e:o(e)})))}:function(e){if("undefined"!=typeof Uint8Array){var t=0,r=0;for(t=0;t=0;)t+=e.charAt(r--);return t}function m(e,t){var r=""+e;return r.length>=t?r:ve("0",t-r.length)+r}function g(e,t){var r=""+e;return r.length>=t?r:ve(" ",t-r.length)+r}function v(e,t){var r=""+e;return r.length>=t?r:r+ve(" ",t-r.length)}var b=Math.pow(2,32);function x(e,t){return e>b||e<-b?function(e,t){var r=""+Math.round(e);return r.length>=t?r:ve("0",t-r.length)+r}(e,t):function(e,t){var r=""+e;return r.length>=t?r:ve("0",t-r.length)+r}(Math.round(e),t)}function w(e,t){return t=t||0,e.length>=7+t&&103==(32|e.charCodeAt(t))&&101==(32|e.charCodeAt(t+1))&&110==(32|e.charCodeAt(t+2))&&101==(32|e.charCodeAt(t+3))&&114==(32|e.charCodeAt(t+4))&&97==(32|e.charCodeAt(t+5))&&108==(32|e.charCodeAt(t+6))}var y=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],C=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];var S={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"上午/下午 "hh"時"mm"分"ss"秒 "'},k={5:37,6:38,7:39,8:40,23:0,24:0,25:0,26:0,27:14,28:14,29:14,30:14,31:14,50:14,51:14,52:14,53:14,54:14,55:14,56:14,57:14,58:14,59:1,60:2,61:3,62:4,67:9,68:10,69:12,70:13,71:14,72:14,73:15,74:16,75:17,76:20,77:21,78:22,79:45,80:46,81:47,82:0},_={5:'"$"#,##0_);\\("$"#,##0\\)',63:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',41:'_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'};function A(e,t,r){for(var n=e<0?-1:1,a=e*n,o=0,i=1,s=0,l=1,c=0,f=0,h=Math.floor(a);ct&&(c>t?(f=l,s=o):(f=c,s=i)),!r)return[0,n*s,f];var u=Math.floor(n*s/f);return[u,n*s-u*f,f]}function T(e,t,r){if(e>2958465||e<0)return null;var n=0|e,a=Math.floor(86400*(e-n)),o=0,i=[],s={D:n,T:a,u:86400*(e-n)-a,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(s.u)<1e-6&&(s.u=0),t&&t.date1904&&(n+=1462),s.u>.9999&&(s.u=0,86400==++a&&(s.T=a=0,++n,++s.D)),60===n)i=r?[1317,10,29]:[1900,2,29],o=3;else if(0===n)i=r?[1317,8,29]:[1900,1,0],o=6;else{n>60&&--n;var l=new Date(1900,0,1);l.setDate(l.getDate()+n-1),i=[l.getFullYear(),l.getMonth()+1,l.getDate()],o=l.getDay(),n<60&&(o=(o+6)%7),r&&(o=function(e,t){t[0]-=581;var r=e.getDay();e<60&&(r=(r+6)%7);return r}(l,i))}return s.y=i[0],s.m=i[1],s.d=i[2],s.S=a%60,a=Math.floor(a/60),s.M=a%60,a=Math.floor(a/60),s.H=a,s.q=o,s}function D(e){return-1==e.indexOf(".")?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)$/,"$1")}function O(e){var t,r=Math.floor(Math.log(Math.abs(e))*Math.LOG10E);return t=r>=-4&&r<=-1?e.toPrecision(10+r):Math.abs(r)<=9?function(e){var t=e<0?12:11,r=D(e.toFixed(12));return r.length<=t||(r=e.toPrecision(10)).length<=t?r:e.toExponential(5)}(e):10===r?e.toFixed(10).substr(0,12):function(e){var t=D(e.toFixed(11));return t.length>(e<0?12:11)||"0"===t||"-0"===t?e.toPrecision(6):t}(e),D(function(e){return-1==e.indexOf("E")?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)[Ee]/,"$1E").replace(/(E[+-])(\d)$/,"$10$2")}(t.toUpperCase()))}function E(e,t){switch(typeof e){case"string":return e;case"boolean":return e?"TRUE":"FALSE";case"number":return(0|e)===e?e.toString(10):O(e);case"undefined":return"";case"object":if(null==e)return"";if(e instanceof Date)return Z(14,fe(e,t&&t.date1904),t)}throw new Error("unsupported value in General format: "+e)}function F(e,t,r,n){var a,o="",i=0,s=0,l=r.y,c=0;switch(e){case 98:l=r.y+543;case 121:switch(t.length){case 1:case 2:a=l%100,c=2;break;default:a=l%1e4,c=4}break;case 109:switch(t.length){case 1:case 2:a=r.m,c=t.length;break;case 3:return C[r.m-1][1];case 5:return C[r.m-1][0];default:return C[r.m-1][2]}break;case 100:switch(t.length){case 1:case 2:a=r.d,c=t.length;break;case 3:return y[r.q][0];default:return y[r.q][1]}break;case 104:switch(t.length){case 1:case 2:a=1+(r.H+11)%12,c=t.length;break;default:throw"bad hour format: "+t}break;case 72:switch(t.length){case 1:case 2:a=r.H,c=t.length;break;default:throw"bad hour format: "+t}break;case 77:switch(t.length){case 1:case 2:a=r.M,c=t.length;break;default:throw"bad minute format: "+t}break;case 115:if("s"!=t&&"ss"!=t&&".0"!=t&&".00"!=t&&".000"!=t)throw"bad second format: "+t;return 0!==r.u||"s"!=t&&"ss"!=t?(s=n>=2?3===n?1e3:100:1===n?10:1,(i=Math.round(s*(r.S+r.u)))>=60*s&&(i=0),"s"===t?0===i?"0":""+i/s:(o=m(i,2+n),"ss"===t?o.substr(0,2):"."+o.substr(2,t.length-1))):m(r.S,t.length);case 90:switch(t){case"[h]":case"[hh]":a=24*r.D+r.H;break;case"[m]":case"[mm]":a=60*(24*r.D+r.H)+r.M;break;case"[s]":case"[ss]":a=60*(60*(24*r.D+r.H)+r.M)+Math.round(r.S+r.u);break;default:throw"bad abstime format: "+t}c=3===t.length?1:2;break;case 101:a=l,c=1}return c>0?m(a,c):""}function M(e){if(e.length<=3)return e;for(var t=e.length%3,r=e.substr(0,t);t!=e.length;t+=3)r+=(r.length>0?",":"")+e.substr(t,3);return r}var N=/%/g;function P(e,t){var r,n=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(0==t)return"0.0E+0";if(t<0)return"-"+P(e,-t);var a=e.indexOf(".");-1===a&&(a=e.indexOf("E"));var o=Math.floor(Math.log(t)*Math.LOG10E)%a;if(o<0&&(o+=a),-1===(r=(t/Math.pow(10,o)).toPrecision(n+1+(a+o)%a)).indexOf("e")){var i=Math.floor(Math.log(t)*Math.LOG10E);for(-1===r.indexOf(".")?r=r.charAt(0)+"."+r.substr(1)+"E+"+(i-r.length+o):r+="E+"+(i-o);"0."===r.substr(0,2);)r=(r=r.charAt(0)+r.substr(2,a)+"."+r.substr(2+a)).replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");r=r.replace(/\+-/,"-")}r=r.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,(function(e,t,r,n){return t+r+n.substr(0,(a+o)%a)+"."+n.substr(o)+"E"}))}else r=t.toExponential(n);return e.match(/E\+00$/)&&r.match(/e[+-]\d$/)&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),e.match(/E\-/)&&r.match(/e\+/)&&(r=r.replace(/e\+/,"e")),r.replace("e","E")}var I=/# (\?+)( ?)\/( ?)(\d+)/;var R=/^#*0*\.([0#]+)/,L=/\).*[0#]/,U=/\(###\) ###\\?-####/;function z(e){for(var t,r="",n=0;n!=e.length;++n)switch(t=e.charCodeAt(n)){case 35:break;case 63:r+=" ";break;case 48:r+="0";break;default:r+=String.fromCharCode(t)}return r}function j(e,t){var r=Math.pow(10,t);return""+Math.round(e*r)/r}function B(e,t){var r=e-Math.floor(e),n=Math.pow(10,t);return t<(""+Math.round(r*n)).length?0:Math.round(r*n)}function W(e,t,r){if(40===e.charCodeAt(0)&&!t.match(L)){var n=t.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return r>=0?W("n",n,r):"("+W("n",n,-r)+")"}if(44===t.charCodeAt(t.length-1))return function(e,t,r){for(var n=t.length-1;44===t.charCodeAt(n-1);)--n;return V(e,t.substr(0,n),r/Math.pow(10,3*(t.length-n)))}(e,t,r);if(-1!==t.indexOf("%"))return function(e,t,r){var n=t.replace(N,""),a=t.length-n.length;return V(e,n,r*Math.pow(10,2*a))+ve("%",a)}(e,t,r);if(-1!==t.indexOf("E"))return P(t,r);if(36===t.charCodeAt(0))return"$"+W(e,t.substr(" "==t.charAt(1)?2:1),r);var a,o,i,s,l=Math.abs(r),c=r<0?"-":"";if(t.match(/^00+$/))return c+x(l,t.length);if(t.match(/^[#?]+$/))return"0"===(a=x(r,0))&&(a=""),a.length>t.length?a:z(t.substr(0,t.length-a.length))+a;if(o=t.match(I))return function(e,t,r){var n=parseInt(e[4],10),a=Math.round(t*n),o=Math.floor(a/n),i=a-o*n,s=n;return r+(0===o?"":""+o)+" "+(0===i?ve(" ",e[1].length+1+e[4].length):g(i,e[1].length)+e[2]+"/"+e[3]+m(s,e[4].length))}(o,l,c);if(t.match(/^#+0+$/))return c+x(l,t.length-t.indexOf("0"));if(o=t.match(R))return a=j(r,o[1].length).replace(/^([^\.]+)$/,"$1."+z(o[1])).replace(/\.$/,"."+z(o[1])).replace(/\.(\d*)$/,(function(e,t){return"."+t+ve("0",z(o[1]).length-t.length)})),-1!==t.indexOf("0.")?a:a.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),o=t.match(/^(0*)\.(#*)$/))return c+j(l,o[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,o[1].length?"0.":".");if(o=t.match(/^#{1,3},##0(\.?)$/))return c+M(x(l,0));if(o=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+W(e,t,-r):M(""+(Math.floor(r)+function(e,t){return t<(""+Math.round((e-Math.floor(e))*Math.pow(10,t))).length?1:0}(r,o[1].length)))+"."+m(B(r,o[1].length),o[1].length);if(o=t.match(/^#,#*,#0/))return W(e,t.replace(/^#,#*,/,""),r);if(o=t.match(/^([0#]+)(\\?-([0#]+))+$/))return a=d(W(e,t.replace(/[\\-]/g,""),r)),i=0,d(d(t.replace(/\\/g,"")).replace(/[0#]/g,(function(e){return i-2147483648?""+(e>=0?0|e:e-1|0):""+Math.floor(e)}(r)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,(function(e){return"00,"+(e.length<3?m(0,3-e.length):"")+e}))+"."+m(i,o[1].length);switch(t){case"###,##0.00":return W(e,"#,##0.00",r);case"###,###":case"##,###":case"#,###":var p=M(x(l,0));return"0"!==p?c+p:"";case"###,###.00":return W(e,"###,##0.00",r).replace(/^0\./,".");case"#,###.00":return W(e,"#,##0.00",r).replace(/^0\./,".")}throw new Error("unsupported format |"+t+"|")}function H(e,t){var r,n=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(0==t)return"0.0E+0";if(t<0)return"-"+H(e,-t);var a=e.indexOf(".");-1===a&&(a=e.indexOf("E"));var o=Math.floor(Math.log(t)*Math.LOG10E)%a;if(o<0&&(o+=a),!(r=(t/Math.pow(10,o)).toPrecision(n+1+(a+o)%a)).match(/[Ee]/)){var i=Math.floor(Math.log(t)*Math.LOG10E);-1===r.indexOf(".")?r=r.charAt(0)+"."+r.substr(1)+"E+"+(i-r.length+o):r+="E+"+(i-o),r=r.replace(/\+-/,"-")}r=r.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,(function(e,t,r,n){return t+r+n.substr(0,(a+o)%a)+"."+n.substr(o)+"E"}))}else r=t.toExponential(n);return e.match(/E\+00$/)&&r.match(/e[+-]\d$/)&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),e.match(/E\-/)&&r.match(/e\+/)&&(r=r.replace(/e\+/,"e")),r.replace("e","E")}function X(e,t,r){if(40===e.charCodeAt(0)&&!t.match(L)){var n=t.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return r>=0?X("n",n,r):"("+X("n",n,-r)+")"}if(44===t.charCodeAt(t.length-1))return function(e,t,r){for(var n=t.length-1;44===t.charCodeAt(n-1);)--n;return V(e,t.substr(0,n),r/Math.pow(10,3*(t.length-n)))}(e,t,r);if(-1!==t.indexOf("%"))return function(e,t,r){var n=t.replace(N,""),a=t.length-n.length;return V(e,n,r*Math.pow(10,2*a))+ve("%",a)}(e,t,r);if(-1!==t.indexOf("E"))return H(t,r);if(36===t.charCodeAt(0))return"$"+X(e,t.substr(" "==t.charAt(1)?2:1),r);var a,o,i,s,l=Math.abs(r),c=r<0?"-":"";if(t.match(/^00+$/))return c+m(l,t.length);if(t.match(/^[#?]+$/))return a=""+r,0===r&&(a=""),a.length>t.length?a:z(t.substr(0,t.length-a.length))+a;if(o=t.match(I))return function(e,t,r){return r+(0===t?"":""+t)+ve(" ",e[1].length+2+e[4].length)}(o,l,c);if(t.match(/^#+0+$/))return c+m(l,t.length-t.indexOf("0"));if(o=t.match(R))return a=(a=(""+r).replace(/^([^\.]+)$/,"$1."+z(o[1])).replace(/\.$/,"."+z(o[1]))).replace(/\.(\d*)$/,(function(e,t){return"."+t+ve("0",z(o[1]).length-t.length)})),-1!==t.indexOf("0.")?a:a.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),o=t.match(/^(0*)\.(#*)$/))return c+(""+l).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,o[1].length?"0.":".");if(o=t.match(/^#{1,3},##0(\.?)$/))return c+M(""+l);if(o=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+X(e,t,-r):M(""+r)+"."+ve("0",o[1].length);if(o=t.match(/^#,#*,#0/))return X(e,t.replace(/^#,#*,/,""),r);if(o=t.match(/^([0#]+)(\\?-([0#]+))+$/))return a=d(X(e,t.replace(/[\\-]/g,""),r)),i=0,d(d(t.replace(/\\/g,"")).replace(/[0#]/g,(function(e){return i-1||"\\"==r&&"-"==e.charAt(t+1)&&"0#".indexOf(e.charAt(t+2))>-1););break;case"?":for(;e.charAt(++t)===r;);break;case"*":++t," "!=e.charAt(t)&&"*"!=e.charAt(t)||++t;break;case"(":case")":++t;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(;t-1;);break;default:++t}return!1}var q=/\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;function Y(e,t){if(null==t)return!1;var r=parseFloat(t[2]);switch(t[1]){case"=":if(e==r)return!0;break;case">":if(e>r)return!0;break;case"<":if(e":if(e!=r)return!0;break;case">=":if(e>=r)return!0;break;case"<=":if(e<=r)return!0}return!1}function K(e,t){var r=function(e){for(var t=[],r=!1,n=0,a=0;n-1&&--n,r.length>4)throw new Error("cannot find right format for |"+r.join("|")+"|");if("number"!=typeof t)return[4,4===r.length||a>-1?r[r.length-1]:"@"];switch(r.length){case 1:r=a>-1?["General","General","General",r[0]]:[r[0],r[0],r[0],"@"];break;case 2:r=a>-1?[r[0],r[0],r[0],r[1]]:[r[0],r[1],r[0],"@"];break;case 3:r=a>-1?[r[0],r[1],r[0],r[2]]:[r[0],r[1],r[2],"@"]}var o=t>0?r[0]:t<0?r[1]:r[2];if(-1===r[0].indexOf("[")&&-1===r[1].indexOf("["))return[n,o];if(null!=r[0].match(/\[[=<>]/)||null!=r[1].match(/\[[=<>]/)){var i=r[0].match(q),s=r[1].match(q);return Y(t,i)?[n,r[0]]:Y(t,s)?[n,r[1]]:[n,r[null!=i&&null!=s?2:1]]}return[n,o]}function Z(e,t,r){null==r&&(r={});var n="";switch(typeof e){case"string":n="m/d/yy"==e&&r.dateNF?r.dateNF:e;break;case"number":null==(n=14==e&&r.dateNF?r.dateNF:(null!=r.table?r.table:S)[e])&&(n=r.table&&r.table[k[e]]||S[k[e]]),null==n&&(n=_[e]||"General")}if(w(n,0))return E(t,r);t instanceof Date&&(t=fe(t,r.date1904));var a=K(n,t);if(w(a[1]))return E(t,r);if(!0===t)t="TRUE";else if(!1===t)t="FALSE";else if(""===t||null==t)return"";return function(e,t,r,n){for(var a,o,i,s=[],l="",c=0,f="",h="t",u="H";c=12?e.charAt(c+2):f),m.t="T",u="h",c+=3):"AM/PM"===e.substr(c,5).toUpperCase()?(null!=a&&(m.v=a.H>=12?"PM":"AM"),m.t="T",c+=5,u="h"):"上午/下午"===e.substr(c,5).toUpperCase()?(null!=a&&(m.v=a.H>=12?"下午":"上午"),m.t="T",c+=5,u="h"):(m.t="t",++c),null==a&&"T"===m.t)return"";s[s.length]=m,h=f;break;case"[":for(l=f;"]"!==e.charAt(c++)&&c-1&&(l=(l.match(/\$([^-\[\]]*)/)||[])[1]||"$",J(e)||(s[s.length]={t:"t",v:l}));break;case".":if(null!=a){for(l=f;++c-1;)l+=f;s[s.length]={t:"n",v:l};break;case"?":for(l=f;e.charAt(++c)===f;)l+=f;s[s.length]={t:f,v:l},h=f;break;case"*":++c," "!=e.charAt(c)&&"*"!=e.charAt(c)||++c;break;case"(":case")":s[s.length]={t:1===n?"t":f,v:f},++c;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(l=f;c-1;)l+=e.charAt(c);s[s.length]={t:"D",v:l};break;case" ":s[s.length]={t:f,v:f},++c;break;case"$":s[s.length]={t:"t",v:"$"},++c;break;default:if(-1===",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(f))throw new Error("unrecognized character "+f+" in "+e);s[s.length]={t:"t",v:f},++c}var g,v=0,b=0;for(c=s.length-1,h="t";c>=0;--c)switch(s[c].t){case"h":case"H":s[c].t=u,h="h",v<1&&(v=1);break;case"s":(g=s[c].v.match(/\.0+$/))&&(b=Math.max(b,g[0].length-1)),v<3&&(v=3);case"d":case"y":case"M":case"e":h=s[c].t;break;case"m":"s"===h&&(s[c].t="M",v<2&&(v=2));break;case"X":break;case"Z":v<1&&s[c].v.match(/[Hh]/)&&(v=1),v<2&&s[c].v.match(/[Mm]/)&&(v=2),v<3&&s[c].v.match(/[Ss]/)&&(v=3)}switch(v){case 0:break;case 1:a.u>=.5&&(a.u=0,++a.S),a.S>=60&&(a.S=0,++a.M),a.M>=60&&(a.M=0,++a.H);break;case 2:a.u>=.5&&(a.u=0,++a.S),a.S>=60&&(a.S=0,++a.M)}var x,y="";for(c=0;c0){40==y.charCodeAt(0)?(C=t<0&&45===y.charCodeAt(0)?-t:t,S=V("n",y,C)):(S=V("n",y,C=t<0&&n>1?-t:t),C<0&&s[0]&&"t"==s[0].t&&(S=S.substr(1),s[0].v="-"+s[0].v)),x=S.length-1;var _=s.length;for(c=0;c-1){_=c;break}var A=s.length;if(_===s.length&&-1===S.indexOf("E")){for(c=s.length-1;c>=0;--c)null!=s[c]&&-1!=="n?".indexOf(s[c].t)&&(x>=s[c].v.length-1?(x-=s[c].v.length,s[c].v=S.substr(x+1,s[c].v.length)):x<0?s[c].v="":(s[c].v=S.substr(0,x+1),x=-1),s[c].t="t",A=c);x>=0&&A=0;--c)if(null!=s[c]&&-1!=="n?".indexOf(s[c].t)){for(o=s[c].v.indexOf(".")>-1&&c===_?s[c].v.indexOf(".")-1:s[c].v.length-1,k=s[c].v.substr(o+1);o>=0;--o)x>=0&&("0"===s[c].v.charAt(o)||"#"===s[c].v.charAt(o))&&(k=S.charAt(x--)+k);s[c].v=k,s[c].t="t",A=c}for(x>=0&&A-1&&c===_?s[c].v.indexOf(".")+1:0,k=s[c].v.substr(0,o);o-1&&(C=n>1&&t<0&&c>0&&"-"===s[c-1].v?-t:t,s[c].v=V(s[c].t,s[c].v,C),s[c].t="t");var D="";for(c=0;c!==s.length;++c)null!=s[c]&&(D+=s[c].v);return D}(a[1],t,r,a[0])}function Q(e,t){if("number"!=typeof t){t=+t||-1;for(var r=0;r<392;++r)if(null!=S[r]){if(S[r]==e){t=r;break}}else t<0&&(t=r);t<0&&(t=391)}return S[t]=e,t}var ee={"d.m":"d\\.m"};var te=function(){var e={};e.version="1.2.0";var t=function(){for(var e=0,t=new Array(256),r=0;256!=r;++r)e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=r)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1,t[r]=e;return"undefined"!=typeof Int32Array?new Int32Array(t):t}();var r=function(e){var t=0,r=0,n=0,a="undefined"!=typeof Int32Array?new Int32Array(4096):new Array(4096);for(n=0;256!=n;++n)a[n]=e[n];for(n=0;256!=n;++n)for(r=e[n],t=256+n;t<4096;t+=256)r=a[t]=r>>>8^e[255&r];var o=[];for(n=1;16!=n;++n)o[n-1]="undefined"!=typeof Int32Array&&"function"==typeof a.subarray?a.subarray(256*n,256*n+256):a.slice(256*n,256*n+256);return o}(t),n=r[0],a=r[1],o=r[2],i=r[3],s=r[4],l=r[5],c=r[6],f=r[7],h=r[8],u=r[9],p=r[10],d=r[11],m=r[12],g=r[13],v=r[14];return e.table=t,e.bstr=function(e,r){for(var n=-1^r,a=0,o=e.length;a>>8^t[255&(n^e.charCodeAt(a++))];return~n},e.buf=function(e,r){for(var b=-1^r,x=e.length-15,w=0;w>8&255]^m[e[w++]^b>>16&255]^d[e[w++]^b>>>24]^p[e[w++]]^u[e[w++]]^h[e[w++]]^f[e[w++]]^c[e[w++]]^l[e[w++]]^s[e[w++]]^i[e[w++]]^o[e[w++]]^a[e[w++]]^n[e[w++]]^t[e[w++]];for(x+=15;w>>8^t[255&(b^e[w++])];return~b},e.str=function(e,r){for(var n=-1^r,a=0,o=e.length,i=0,s=0;a>>8^t[255&(n^i)]:i<2048?n=(n=n>>>8^t[255&(n^(192|i>>6&31))])>>>8^t[255&(n^(128|63&i))]:i>=55296&&i<57344?(i=64+(1023&i),s=1023&e.charCodeAt(a++),n=(n=(n=(n=n>>>8^t[255&(n^(240|i>>8&7))])>>>8^t[255&(n^(128|i>>2&63))])>>>8^t[255&(n^(128|s>>6&15|(3&i)<<4))])>>>8^t[255&(n^(128|63&s))]):n=(n=(n=n>>>8^t[255&(n^(224|i>>12&15))])>>>8^t[255&(n^(128|i>>6&63))])>>>8^t[255&(n^(128|63&i))];return~n},e}(),re=function(){var e,t={};function i(e){if("/"==e.charAt(e.length-1))return-1===e.slice(0,-1).indexOf("/")?e:i(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(0,t+1)}function f(e){if("/"==e.charAt(e.length-1))return f(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(t+1)}function d(e,t){"string"==typeof t&&(t=new Date(t));var r=t.getHours();r=(r=r<<6|t.getMinutes())<<5|t.getSeconds()>>>1,e.write_shift(2,r);var n=t.getFullYear()-1980;n=(n=n<<4|t.getMonth()+1)<<5|t.getDate(),e.write_shift(2,n)}function m(e){Tt(e,0);for(var t={},r=0;e.l<=e.length-4;){var n=e.read_shift(2),a=e.read_shift(2),o=e.l+a,i={};switch(n){case 21589:1&(r=e.read_shift(1))&&(i.mtime=e.read_shift(4)),a>5&&(2&r&&(i.atime=e.read_shift(4)),4&r&&(i.ctime=e.read_shift(4))),i.mtime&&(i.mt=new Date(1e3*i.mtime));break;case 1:var s=e.read_shift(4),l=e.read_shift(4);i.usz=l*Math.pow(2,32)+s,s=e.read_shift(4),l=e.read_shift(4),i.csz=l*Math.pow(2,32)+s}e.l=o,t[n]=i}return t}function g(){return e||(e=undefined)}function v(e,t){if(80==e[0]&&75==e[1])return ge(e,t);if(109==(32|e[0])&&105==(32|e[1]))return function(e,t){if("mime-version:"!=M(e.slice(0,13)).toLowerCase())throw new Error("Unsupported MAD header");var r=t&&t.root||"",n=(a&&Buffer.isBuffer(e)?e.toString("binary"):M(e)).split("\r\n"),o=0,i="";for(o=0;o0&&(r=(r=r.slice(0,r.length-1)).slice(0,r.lastIndexOf("/")+1),i.slice(0,r.length)!=r););var s=(n[1]||"").match(/boundary="(.*?)"/);if(!s)throw new Error("MAD cannot find boundary");var l="--"+(s[1]||""),c=[],f=[],h={FileIndex:c,FullPaths:f};C(h);var u,p=0;for(o=0;o=a&&(u-=a),!i[u]){l=[];var d=[];for(h=u;h>=0;){d[h]=!0,i[h]=!0,s[s.length]=h,l.push(e[h]);var m=r[Math.floor(4*h/n)];if(n<4+(p=4*h&c))throw new Error("FAT boundary crossed: "+h+" 4 "+n);if(!e[m])break;if(d[h=xt(e[m],p)])break}o[u]={nodes:s,data:Ye([l])}}return o}(v,i,f,c);i0&&s!==T&&(S[s].name="!MiniFAT"),S[f[0]].name="!FAT",S.fat_addrs=f,S.ssz=c;var k=[],_=[],A=[];!function(e,t,r,n,a,o,i,s){for(var l,c=0,f=n.length?2:0,h=t[e].data,u=0,p=0;u0&&c!==T&&(t[c].name="!StreamData")):m.size>=4096?(m.storage="fat",void 0===t[m.start]&&(t[m.start]=w(r,m.start,t.fat_addrs,t.ssz)),t[m.start].name=m.name,m.content=t[m.start].data.slice(0,m.size)):(m.storage="minifat",m.size<0?m.size=0:c!==T&&m.start!==T&&t[c]&&(m.content=b(m,t[c].data,(t[s]||{}).data))),m.content&&Tt(m.content,0),o[l]=m,i.push(m)}}(i,S,v,k,n,{},_,s),function(e,t,r){for(var n=0,a=0,o=0,i=0,s=0,l=r.length,c=[],f=[];n0&&i>=0;)o.push(t.slice(i*A,i*A+A)),a-=A,i=xt(r,4*i);return 0===o.length?Dt(0):h(o).slice(0,e.size)}function x(e,t,r,n,a){var o=T;if(e===T){if(0!==t)throw new Error("DIFAT chain shorter than expected")}else if(-1!==e){var i=r[e],s=(n>>>2)-1;if(!i)return;for(var l=0;l=1&&x(xt(i,n-4),t-1,r,n,a)}}function w(e,t,r,n,a){var o=[],i=[];a||(a=[]);var s=n-1,l=0,c=0;for(l=t;l>=0;){a[l]=!0,o[o.length]=l,i.push(e[l]);var f=r[Math.floor(4*l/n)];if(n<4+(c=4*l&s))throw new Error("FAT boundary crossed: "+l+" 4 "+n);if(!e[f])break;l=xt(e[f],c)}return{nodes:o,data:Ye([i])}}function y(e,t){return new Date(1e3*(bt(e,t+4)/1e7*Math.pow(2,32)+bt(e,t)/1e7-11644473600))}function C(e,t){var r=t||{},n=r.root||"Root Entry";if(e.FullPaths||(e.FullPaths=[]),e.FileIndex||(e.FileIndex=[]),e.FullPaths.length!==e.FileIndex.length)throw new Error("inconsistent CFB structure");0===e.FullPaths.length&&(e.FullPaths[0]=n+"/",e.FileIndex[0]={name:n,type:5}),r.CLSID&&(e.FileIndex[0].clsid=r.CLSID),function(e){var t="Sh33tJ5";if(re.find(e,"/"+t))return;var r=Dt(4);r[0]=55,r[1]=r[3]=50,r[2]=54,e.FileIndex.push({name:t,type:2,content:r,size:4,L:69,R:69,C:69}),e.FullPaths.push(e.FullPaths[0]+t),S(e)}(e)}function S(e,t){C(e);for(var r=!1,n=!1,a=e.FullPaths.length-1;a>=0;--a){var o=e.FileIndex[a];switch(o.type){case 0:n?r=!0:(e.FileIndex.pop(),e.FullPaths.pop());break;case 1:case 2:case 5:n=!0,isNaN(o.R*o.L*o.C)&&(r=!0),o.R>-1&&o.L>-1&&o.R==o.L&&(r=!0);break;default:r=!0}}if(r||t){var s=new Date(1987,1,19),l=0,c=Object.create?Object.create(null):{},h=[];for(a=0;a1?1:-1,p.size=0,p.type=5;else if("/"==d.slice(-1)){for(l=a+1;l=h.length?-1:l,l=a+1;l=h.length?-1:l,p.type=1}else i(e.FullPaths[a+1]||"")==i(d)&&(p.R=a+1),p.type=2}}}function k(e,t){var r=t||{};if("mad"==r.fileType)return function(e,t){for(var r=t||{},n=r.boundary||"SheetJS",o=["MIME-Version: 1.0",'Content-Type: multipart/related; boundary="'+(n="------="+n).slice(2)+'"',"","",""],i=e.FullPaths[0],s=i,l=e.FileIndex[0],c=1;c=32&&d<128&&++u;var g=u>=4*p/5;o.push(n),o.push("Content-Location: "+(r.root||"file:///C:/SheetJS/")+s),o.push("Content-Transfer-Encoding: "+(g?"quoted-printable":"base64")),o.push("Content-Type: "+xe(l,s)),o.push(""),o.push(g?ye(h):we(h))}return o.push(n+"--\r\n"),o.join("\r\n")}(e,r);if(S(e),"zip"===r.fileType)return function(e,t){var r=t||{},n=[],a=[],o=Dt(1),i=r.compression?8:0,s=0,l=0,f=0,u=0,p=0,m=e.FullPaths[0],g=m,v=e.FileIndex[0],b=[],x=0;for(l=1;l0&&(o<4096?t+=o+63>>6:r+=o+511>>9)}}for(var i=e.FullPaths.length+3>>2,s=t+127>>7,l=(t+7>>3)+r+i+s,c=l+127>>7,f=c<=109?0:Math.ceil((c-109)/127);l+c+f+127>>7>c;)f=++c<=109?0:Math.ceil((c-109)/127);var h=[1,f,c,s,i,r,t,0];return e.FileIndex[0].size=t<<6,h[7]=(e.FileIndex[0].start=h[0]+h[1]+h[2]+h[3]+h[4]+h[5])+(h[6]+7>>3),h}(e),o=Dt(n[7]<<9),i=0,s=0;for(i=0;i<8;++i)o.write_shift(1,O[i]);for(i=0;i<8;++i)o.write_shift(2,0);for(o.write_shift(2,62),o.write_shift(2,3),o.write_shift(2,65534),o.write_shift(2,9),o.write_shift(2,6),i=0;i<3;++i)o.write_shift(2,0);for(o.write_shift(4,0),o.write_shift(4,n[2]),o.write_shift(4,n[0]+n[1]+n[2]+n[3]-1),o.write_shift(4,0),o.write_shift(4,4096),o.write_shift(4,n[3]?n[0]+n[1]+n[2]-1:T),o.write_shift(4,n[3]),o.write_shift(-4,n[1]?n[0]-1:T),o.write_shift(4,n[1]),i=0;i<109;++i)o.write_shift(-4,i>9)));for(l(n[6]+7>>3);511&o.l;)o.write_shift(-4,F.ENDOFCHAIN);for(s=i=0,f=0;f=4096||(p.start=s,l(u+63>>6)));for(;511&o.l;)o.write_shift(-4,F.ENDOFCHAIN);for(i=0;i32&&(console.error("Name "+g+" will be truncated to "+g.slice(0,32)),g=g.slice(0,32)),u=2*(g.length+1),o.write_shift(64,g,"utf16le"),o.write_shift(2,u),o.write_shift(1,p.type),o.write_shift(1,p.color),o.write_shift(-4,p.L),o.write_shift(-4,p.R),o.write_shift(-4,p.C),p.clsid)o.write_shift(16,p.clsid,"hex");else for(f=0;f<4;++f)o.write_shift(4,0);o.write_shift(4,p.state||0),o.write_shift(4,0),o.write_shift(4,0),o.write_shift(4,0),o.write_shift(4,0),o.write_shift(4,p.start),o.write_shift(4,p.size),o.write_shift(4,0)}else{for(f=0;f<17;++f)o.write_shift(4,0);for(f=0;f<3;++f)o.write_shift(4,-1);for(f=0;f<12;++f)o.write_shift(4,0)}}for(i=1;i=4096)if(o.l=p.start+1<<9,a&&Buffer.isBuffer(p.content))p.content.copy(o,o.l,0,p.size),o.l+=p.size+511&-512;else{for(f=0;f0&&p.size<4096)if(a&&Buffer.isBuffer(p.content))p.content.copy(o,o.l,0,p.size),o.l+=p.size+63&-64;else{for(f=0;f>16|U>>8|U));function B(e,t){var r=z[255&e];return t<=8?r>>>8-t:(r=r<<8|z[e>>8&255],t<=16?r>>>16-t:(r=r<<8|z[e>>16&255])>>>24-t)}function W(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=6?0:e[n+1]<<8))>>>r&3}function H(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=5?0:e[n+1]<<8))>>>r&7}function X(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=3?0:e[n+1]<<8))>>>r&31}function V(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=1?0:e[n+1]<<8))>>>r&127}function G(e,t,r){var n=7&t,a=t>>>3,o=(1<>>n;return r<8-n?i&o:(i|=e[a+1]<<8-n,r<16-n?i&o:(i|=e[a+2]<<16-n,r<24-n?i&o:(i|=e[a+3]<<24-n)&o))}function J(e,t,r){var n=7&t,a=t>>>3;return n<=5?e[a]|=(7&r)<>8-n),t+3}function q(e,t,r){return r=(1&r)<<(7&t),e[t>>>3]|=r,t+1}function Y(e,t,r){var n=t>>>3;return r<<=7&t,e[n]|=255&r,r>>>=8,e[n+1]=r,t+8}function K(e,t,r){var n=t>>>3;return r<<=7&t,e[n]|=255&r,r>>>=8,e[n+1]=255&r,e[n+2]=r>>>8,t+16}function Z(e,t){var r=e.length,n=2*r>t?2*r:t+5,o=0;if(r>=t)return e;if(a){var i=l(n);if(e.copy)e.copy(i);else for(;o>n-h,i=(1<=0;--i)t[s|i<0;)t[t.l++]=e[r++]}return t.l}(t,r):function(t,r){for(var a=0,o=0,i=$?new Uint16Array(32768):[];o0;)r[r.l++]=t[o++];a=8*r.l}else{a=J(r,a,+!(o+s!=t.length)+2);for(var l=0;s-- >0;){var c=t[o],f=-1,h=0;if((f=i[l=32767&(l<<5^c)])&&((f|=-32768&o)>o&&(f-=32768),f2){(c=n[h])<=22?a=Y(r,a,z[c+1]>>1)-1:(Y(r,a,3),Y(r,a+=5,z[c-23]>>5),a+=3);var u=c<8?0:c-4>>2;u>0&&(K(r,a,h-I[c]),a+=u),c=e[o-f],a=Y(r,a,z[c]>>3),a-=3;var p=c<4?0:c-2>>1;p>0&&(K(r,a,o-f-R[c]),a+=p);for(var d=0;d>>3;return(e[n]|(r<=4?0:e[n+1]<<8))>>>r&15}(e,t+=5)+4;t+=4;for(var o=0,i=$?new Uint8Array(19):Q(19),s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],l=1,c=$?new Uint8Array(8):Q(8),f=$?new Uint8Array(8):Q(8),h=i.length,u=0;u>8-d;for(var m=(1<<7-d)-1;m>=0;--m)fe[p|m<>>=3){case 16:for(o=3+W(e,t),t+=2,p=g[g.length-1];o-- >0;)g.push(p);break;case 17:for(o=3+H(e,t),t+=3;o-- >0;)g.push(0);break;case 18:for(o=11+V(e,t),t+=7;o-- >0;)g.push(0);break;default:g.push(p),l>>0,c=0,f=0;0==(1&n);)if(n=H(e,r),r+=3,n>>>1!=0)for(n>>1==1?(c=9,f=5):(r=pe(e,r),c=he,f=ue);;){!t&&i>>1==1?ne[h]:le[h];if(r+=15&u,0==((u>>>=4)>>>8&255))a[o++]=u;else{if(256==u)break;var p=(u-=257)<8?0:u-4>>2;p>5&&(p=0);var d=o+I[u];p>0&&(d+=G(e,r,p),r+=p),h=G(e,r,f),r+=15&(u=n>>>1==1?ae[h]:ce[h]);var m=(u>>>=4)<4?0:u-2>>1,g=R[u];for(m>0&&(g+=G(e,r,m),r+=m),!t&&i>>3]|e[1+(r>>>3)]<<8;if(r+=32,v>0)for(!t&&i0;)a[o++]=e[r>>>3],r+=8}return t?[a,r+7>>>3]:[a.slice(0,o),r+7>>>3]}(e.slice(e.l||0),t);return e.l+=r[1],r[0]}function me(e,t){if(!e)throw new Error(t);"undefined"!=typeof console&&console.error(t)}function ge(e,t){var r=e;Tt(r,0);var n={FileIndex:[],FullPaths:[]};C(n,{root:t.root});for(var a=r.length-4;(80!=r[a]||75!=r[a+1]||5!=r[a+2]||6!=r[a+3])&&a>=0;)--a;r.l=a+4,r.l+=4;var o=r.read_shift(2);r.l+=6;var i=r.read_shift(4);for(r.l=i,a=0;a>>=5);r>>>=4,n.setMilliseconds(0),n.setFullYear(r+1980),n.setMonth(o-1),n.setDate(a);var i=31&t,s=63&(t>>>=5);return t>>>=6,n.setHours(t),n.setMinutes(s),n.setSeconds(i<<1),n}(e);if(8257&o)throw new Error("Unsupported ZIP encryption");e.read_shift(4);for(var l=e.read_shift(4),c=e.read_shift(4),f=e.read_shift(2),h=e.read_shift(2),u="",p=0;p>2,s=(3&n)<<4|(a=e[f++])>>4,l=(15&a)<<2|(o=e[f++])>>6,c=63&o,isNaN(a)?l=c=64:isNaN(o)&&(c=64),r+=t.charAt(i)+t.charAt(s)+t.charAt(l)+t.charAt(c);return r}(new Uint8Array(ne(a)));return chrome.downloads.download({url:l,filename:e,saveAs:!0})}}if("undefined"!=typeof $&&"undefined"!=typeof File&&"undefined"!=typeof Folder)try{var c=File(e);return c.open("w"),c.encoding="binary",Array.isArray(r)&&(r=function(e){if(Array.isArray(e))return e.map((function(e){return String.fromCharCode(e)})).join("");for(var t=[],r=0;r=60&&e<61)return e;var t=new Date;return t.setTime(24*(e>60?e:e+1)*60*60*1e3+se),t}var ue=/^(\d+):(\d+)(:\d+)?(\.\d+)?$/,pe=/^(\d+)-(\d+)-(\d+)$/,de=/^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)?(\.\d+)?$/;function me(e,t){if(e instanceof Date)return e;var r=e.match(ue);return r?new Date((t?ce:le)+1e3*(60*(60*parseInt(r[1],10)+parseInt(r[2],10))+(r[3]?parseInt(r[3].slice(1),10):0))+(r[4]?parseInt((r[4]+"000").slice(1,4),10):0)):(r=e.match(pe))?new Date(Date.UTC(+r[1],+r[2]-1,+r[3],0,0,0,0)):(r=e.match(de))?new Date(Date.UTC(+r[1],+r[2]-1,+r[3],+r[4],+r[5],r[6]&&parseInt(r[6].slice(1),10)||0,r[7]&&parseInt(r[7].slice(1),10)||0)):new Date(e)}function ge(e){if("undefined"!=typeof JSON&&!Array.isArray(e))return JSON.parse(JSON.stringify(e));if("object"!=typeof e||null==e)return e;if(e instanceof Date)return new Date(e.getTime());var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=ge(e[r]));return t}function ve(e,t){for(var r="";r.length3&&-1==Se.indexOf(t))return o}else if(t.replace(/[ap]m?/,"").match(/[a-z]/))return o;return i<0||i>8099||e.match(/[^-0-9:,\/\\\ ]/)?o:a}function _e(e){return new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()))}function Ae(e,t,r){if(e.FullPaths){var n;if("string"==typeof r)return n=a?o(r):function(e){for(var t=[],r=0,n=e.length+250,a=s(e.length+255),o=0;o>6&31,a[r++]=128|63&i;else if(i>=55296&&i<57344){i=64+(1023&i);var l=1023&e.charCodeAt(++o);a[r++]=240|i>>8&7,a[r++]=128|i>>2&63,a[r++]=128|l>>6&15|(3&i)<<4,a[r++]=128|63&l}else a[r++]=224|i>>12&15,a[r++]=128|i>>6&63,a[r++]=128|63&i;r>n&&(t.push(a.slice(0,r)),r=0,a=s(65535),n=65530)}return t.push(a.slice(0,r)),h(t)}(r),re.utils.cfb_add(e,t,n);re.utils.cfb_add(e,t,r)}else e.file(t,r)}var Te='\r\n',De=ie({""":'"',"'":"'",">":">","<":"<","&":"&"}),Oe=/[&<>'"]/g,Ee=/[\u0000-\u0008\u000b-\u001f\uFFFE-\uFFFF]/g;function Fe(e){return(e+"").replace(Oe,(function(e){return De[e]})).replace(Ee,(function(e){return"_x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+"_"}))}var Me=/[\u0000-\u001f]/g;function Ne(e){return(e+"").replace(Oe,(function(e){return De[e]})).replace(/\n/g,"
").replace(Me,(function(e){return"&#x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+";"}))}function Pe(e){for(var t="",r=0,n=0,a=0,o=0,i=0,s=0;r191&&n<224?(i=(31&n)<<6,i|=63&a,t+=String.fromCharCode(i)):(o=e.charCodeAt(r++),n<240?t+=String.fromCharCode((15&n)<<12|(63&a)<<6|63&o):(s=((7&n)<<18|(63&a)<<12|(63&o)<<6|63&(i=e.charCodeAt(r++)))-65536,t+=String.fromCharCode(55296+(s>>>10&1023)),t+=String.fromCharCode(56320+(1023&s)))));return t}function Ie(e){var t,r,n,a=s(2*e.length),o=1,i=0,l=0;for(r=0;r>>10&1023),t=56320+(1023&t)),0!==l&&(a[i++]=255&l,a[i++]=l>>>8,l=0),a[i++]=t%256,a[i++]=t>>>8;return a.slice(0,i).toString("ucs2")}function Re(e){return o(e,"binary").toString("utf8")}var Le="foo bar baz☃🍣",Ue=a&&(Re(Le)==Pe(Le)&&Re||Ie(Le)==Pe(Le)&&Ie)||Pe,$e=a?function(e){return o(e,"utf8").toString("binary")}:function(e){for(var t=[],r=0,n=0,a=0;r>6))),t.push(String.fromCharCode(128+(63&n)));break;case n>=55296&&n<57344:n-=55296,a=e.charCodeAt(r++)-56320+(n<<10),t.push(String.fromCharCode(240+(a>>18&7))),t.push(String.fromCharCode(144+(a>>12&63))),t.push(String.fromCharCode(128+(a>>6&63))),t.push(String.fromCharCode(128+(63&a)));break;default:t.push(String.fromCharCode(224+(n>>12))),t.push(String.fromCharCode(128+(n>>6&63))),t.push(String.fromCharCode(128+(63&n)))}return t.join("")},ze=function(){var e=[["nbsp"," "],["middot","·"],["quot",'"'],["apos","'"],["gt",">"],["lt","<"],["amp","&"]].map((function(e){return[new RegExp("&"+e[0]+";","ig"),e[1]]}));return function(t){for(var r=t.replace(/^[\t\n\r ]+/,"").replace(/[\t\n\r ]+$/,"").replace(/>\s+/g,">").replace(/\s+/g,"\n").replace(/<[^>]*>/g,""),n=0;n"+t+""}function We(e){return oe(e).map((function(t){return" "+t+'="'+e[t]+'"'})).join("")}function He(e,t,r){return"<"+e+(null!=r?We(r):"")+(null!=t?(t.match(je)?' xml:space="preserve"':"")+">"+t+""}function Xe(e,t){try{return e.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}return""}var Ve={CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",CT:"http://schemas.openxmlformats.org/package/2006/content-types",RELS:"http://schemas.openxmlformats.org/package/2006/relationships",TCMNT:"http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments",dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"},Ge=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"],Je={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"};var qe=function(e){for(var t=[],r=0;r0&&Buffer.isBuffer(e[0][0])?Buffer.concat(e[0].map((function(e){return Buffer.isBuffer(e)?e:o(e)}))):qe(e)}:qe,Ke=function(e,t,r){for(var n=[],a=t;a0?rt(e,t+4,t+4+r-1):""},at=nt,ot=function(e,t){var r=bt(e,t);return r>0?rt(e,t+4,t+4+r-1):""},it=ot,st=function(e,t){var r=2*bt(e,t);return r>0?rt(e,t+4,t+4+r-1):""},lt=st,ct=function(e,t){var r=bt(e,t);return r>0?Ze(e,t+4,t+4+r):""},ft=ct,ht=function(e,t){var r=bt(e,t);return r>0?rt(e,t+4,t+4+r):""},ut=ht,pt=function(e,t){return function(e,t){for(var r=1-2*(e[t+7]>>>7),n=((127&e[t+7])<<4)+(e[t+6]>>>4&15),a=15&e[t+6],o=5;o>=0;--o)a=256*a+e[t+o];return 2047==n?0==a?r*(1/0):NaN:(0==n?n=-1022:(n-=1023,a+=Math.pow(2,52)),r*Math.pow(2,n-52)*a)}(e,t)},dt=pt;a&&(at=function(e,t){if(!Buffer.isBuffer(e))return nt(e,t);var r=e.readUInt32LE(t);return r>0?e.toString("utf8",t+4,t+4+r-1):""},it=function(e,t){if(!Buffer.isBuffer(e))return ot(e,t);var r=e.readUInt32LE(t);return r>0?e.toString("utf8",t+4,t+4+r-1):""},lt=function(e,t){if(!Buffer.isBuffer(e)||!i)return st(e,t);var r=2*e.readUInt32LE(t);return e.toString("utf16le",t+4,t+4+r-1)},ft=function(e,t){if(!Buffer.isBuffer(e)||!i)return ct(e,t);var r=e.readUInt32LE(t);return e.toString("utf16le",t+4,t+4+r)},ut=function(e,t){if(!Buffer.isBuffer(e))return ht(e,t);var r=e.readUInt32LE(t);return e.toString("utf8",t+4,t+4+r)},dt=function(e,t){return Buffer.isBuffer(e)?e.readDoubleLE(t):pt(e,t)});var mt=function(e,t){return e[t]},gt=function(e,t){return 256*e[t+1]+e[t]},vt=function(e,t){var r=256*e[t+1]+e[t];return r<32768?r:-1*(65535-r+1)},bt=function(e,t){return e[t+3]*(1<<24)+(e[t+2]<<16)+(e[t+1]<<8)+e[t]},xt=function(e,t){return e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t]},wt=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};function yt(t,r){var n,o,s,l,c,f,h="",u=[];switch(r){case"dbcs":if(f=this.l,a&&Buffer.isBuffer(this)&&i)h=this.slice(this.l,this.l+2*t).toString("utf16le");else for(c=0;c0?xt:wt)(this,this.l),this.l+=4,n):(o=bt(this,this.l),this.l+=4,o);case 8:case-8:if("f"===r)return o=8==t?dt(this,this.l):dt([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]],0),this.l+=8,o;t=8;case 16:h=et(this,this.l,t)}}return this.l+=t,h}var Ct=function(e,t,r){e[r]=255&t,e[r+1]=t>>>8&255,e[r+2]=t>>>16&255,e[r+3]=t>>>24&255},St=function(e,t,r){e[r]=255&t,e[r+1]=t>>8&255,e[r+2]=t>>16&255,e[r+3]=t>>24&255},kt=function(e,t,r){e[r]=255&t,e[r+1]=t>>>8&255};function _t(e,t,r){var n=0,a=0;if("dbcs"===r){for(a=0;a!=t.length;++a)kt(this,t.charCodeAt(a),this.l+2*a);n=2*t.length}else if("sbcs"===r||"cpstr"==r){for(t=t.replace(/[^\x00-\x7F]/g,"_"),a=0;a!=t.length;++a)this[this.l+a]=255&t.charCodeAt(a);n=t.length}else{if("hex"===r){for(;a>8}for(;this.l>>=8,this[this.l+1]=255&t;break;case 3:n=3,this[this.l]=255&t,t>>>=8,this[this.l+1]=255&t,t>>>=8,this[this.l+2]=255&t;break;case 4:n=4,Ct(this,t,this.l);break;case 8:if(n=8,"f"===r){!function(e,t,r){var n=(t<0||1/t==-1/0?1:0)<<7,a=0,o=0,i=n?-t:t;isFinite(i)?0==i?a=o=0:(a=Math.floor(Math.log(i)/Math.LN2),o=i*Math.pow(2,52-a),a<=-1023&&(!isFinite(o)||o>4|n}(this,t,this.l);break}case 16:break;case-4:n=4,St(this,t,this.l)}}return this.l+=n,this}function At(e,t){var r=et(this,this.l,e.length>>1);if(r!==e)throw new Error(t+"Expected "+e+" saw "+r);this.l+=e.length>>1}function Tt(e,t){e.l=t,e.read_shift=yt,e.chk=At,e.write_shift=_t}function Dt(e){var t=s(e);return Tt(t,0),t}function Ot(e){return""+(e+1)}function Et(e){if(e<0)throw new Error("invalid column "+e);var t="";for(++e;e;e=Math.floor((e-1)/26))t=String.fromCharCode((e-1)%26+65)+t;return t}function Ft(e){for(var t=0,r=0,n=0;n=48&&a<=57?t=10*t+(a-48):a>=65&&a<=90&&(r=26*r+(a-64))}return{c:r-1,r:t-1}}function Mt(e){for(var t=e.c+1,r="";t;t=(t-1)/26|0)r=String.fromCharCode((t-1)%26+65)+r;return r+(e.r+1)}function Nt(e){var t=e.indexOf(":");return-1==t?{s:Ft(e),e:Ft(e)}:{s:Ft(e.slice(0,t)),e:Ft(e.slice(t+1))}}function Pt(e,t){return void 0===t||"number"==typeof t?Pt(e.s,e.e):("string"!=typeof e&&(e=Mt(e)),"string"!=typeof t&&(t=Mt(t)),e==t?e:e+":"+t)}function It(e){var t=Nt(e);return"$"+Et(t.s.c)+"$"+Ot(t.s.r)+":$"+Et(t.e.c)+"$"+Ot(t.e.r)}function Rt(e,t){if(!(e||t&&t.biff<=5&&t.biff>=2))throw new Error("empty sheet name");return/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(e)?"'"+e.replace(/'/g,"''")+"'":e}function Lt(e){var t={s:{c:0,r:0},e:{c:0,r:0}},r=0,n=0,a=0,o=e.length;for(r=0;n26);++n)r=26*r+a;for(t.s.c=--r,r=0;n9);++n)r=10*r+a;if(t.s.r=--r,n===o||10!=a)return t.e.c=t.s.c,t.e.r=t.s.r,t;for(++n,r=0;n!=o&&!((a=e.charCodeAt(n)-64)<1||a>26);++n)r=26*r+a;for(t.e.c=--r,r=0;n!=o&&!((a=e.charCodeAt(n)-48)<0||a>9);++n)r=10*r+a;return t.e.r=--r,t}function Ut(e,t){var r="d"==e.t&&t instanceof Date;if(null!=e.z)try{return e.w=Z(e.z,r?fe(t):t)}catch(e){}try{return e.w=Z((e.XF||{}).numFmtId||(r?14:0),r?fe(t):t)}catch(e){return""+t}}function $t(e,t,r){return null==e||null==e.t||"z"==e.t?"":void 0!==e.w?e.w:("d"==e.t&&!e.z&&r&&r.dateNF&&(e.z=r.dateNF),"e"==e.t?jt[e.v]||e.v:Ut(e,null==t?e.v:t))}function zt(e,t,r){var n=r||{},a=e?null!=e["!data"]:n.dense,o=e||{};a&&!o["!data"]&&(o["!data"]=[]);var i=0,s=0;if(o&&null!=n.origin){if("number"==typeof n.origin)i=n.origin;else{var l="string"==typeof n.origin?Ft(n.origin):n.origin;i=l.r,s=l.c}o["!ref"]||(o["!ref"]="A1:A1")}var c={s:{c:1e7,r:1e7},e:{c:0,r:0}};if(o["!ref"]){var f=Lt(o["!ref"]);c.s.c=f.s.c,c.s.r=f.s.r,c.e.c=Math.max(c.e.c,f.e.c),c.e.r=Math.max(c.e.r,f.e.r),-1==i&&(c.e.r=i=f.e.r+1)}for(var h=[],u=0;u!=t.length;++u)if(t[u]){if(!Array.isArray(t[u]))throw new Error("aoa_to_sheet expects an array of arrays");var p=i+u,d=""+(p+1);a&&(o["!data"][p]||(o["!data"][p]=[]),h=o["!data"][p]);for(var m=0;m!=t[u].length;++m)if(void 0!==t[u][m]){var g={v:t[u][m]},v=s+m;if(c.s.r>p&&(c.s.r=p),c.s.c>v&&(c.s.c=v),c.e.r0&&(n=e[r][0],o[o.length]=He("Override",null,{PartName:("/"==n[0]?"":"/")+n,ContentType:Wt[r][t.bookType]||Wt[r].xlsx}))},s=function(r){(e[r]||[]).forEach((function(e){o[o.length]=He("Override",null,{PartName:("/"==e[0]?"":"/")+e,ContentType:Wt[r][t.bookType]||Wt[r].xlsx})}))},l=function(t){(e[t]||[]).forEach((function(e){o[o.length]=He("Override",null,{PartName:("/"==e[0]?"":"/")+e,ContentType:a[t][0]})}))};return i("workbooks"),s("sheets"),s("charts"),l("themes"),["strs","styles"].forEach(i),["coreprops","extprops","custprops"].forEach(l),l("vba"),l("comments"),l("threadedcomments"),l("drawings"),s("metadata"),l("people"),!r&&o.length>2&&(o[o.length]="",o[1]=o[1].replace("/>",">")),o.join("")}var Xt={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",XPATH:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",XMISS:"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",XLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink",CXML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml",CXMLP:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",CMNT:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",SST:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",STY:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",THEME:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",CHART:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",CHARTEX:"http://schemas.microsoft.com/office/2014/relationships/chartEx",CS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet",WS:["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"],DS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet",MS:"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet",IMG:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",DRAW:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",XLMETA:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",TCMNT:"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment",PEOPLE:"http://schemas.microsoft.com/office/2017/10/relationships/person",CONN:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function Vt(e){var t=[Te,He("Relationships",null,{xmlns:Ve.RELS})];return oe(e["!id"]).forEach((function(r){t[t.length]=He("Relationship",null,e["!id"][r])})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function Gt(e,t,r,n,a,o){if(a||(a={}),e["!id"]||(e["!id"]={}),e["!idx"]||(e["!idx"]=1),t<0)for(t=e["!idx"];e["!id"]["rId"+t];++t);if(e["!idx"]=t+1,a.Id="rId"+t,a.Type=n,a.Target=r,o?a.TargetMode=o:[Xt.HLINK,Xt.XPATH,Xt.XMISS].indexOf(a.Type)>-1&&(a.TargetMode="External"),e["!id"][a.Id])throw new Error("Cannot rewrite rId "+t);return e["!id"][a.Id]=a,e[("/"+a.Target).replace("//","/")]=a,t}var Jt=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];function qt(e,t,r,n,a){null==a[e]&&null!=t&&""!==t&&(a[e]=t,t=Fe(t),n[n.length]=r?He(e,t,r):Be(e,t))}var Yt=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]];function Kt(e){var t=[Te,He("Properties",null,{xmlns:Ve.CUST_PROPS,"xmlns:vt":Ve.vt})];if(!e)return t.join("");var r=1;return oe(e).forEach((function(n){++r,t[t.length]=He("property",function(e,t){switch(typeof e){case"string":var r=He("vt:lpwstr",Fe(e));return t&&(r=r.replace(/"/g,"_x0022_")),r;case"number":return He((0|e)==e?"vt:i4":"vt:r8",Fe(String(e)));case"boolean":return He("vt:bool",e?"true":"false")}if(e instanceof Date)return He("vt:filetime",Xe(e));throw new Error("Unable to serialize "+e)}(e[n],!0),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:r,name:Fe(n)})})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}var Zt=/^\s|\s$|[\t\n\r]/;var Qt=6;var er=96;function tr(e){return 96*e/er}function rr(e,t){var r,n=[Te,He("styleSheet",null,{xmlns:Ge[0],"xmlns:vt":Ve.vt})];return e.SSF&&null!=(r=function(e){var t=[""];return[[5,8],[23,26],[41,44],[50,392]].forEach((function(r){for(var n=r[0];n<=r[1];++n)null!=e[n]&&(t[t.length]=He("numFmt",null,{numFmtId:n,formatCode:Fe(e[n])}))})),1===t.length?"":(t[t.length]="",t[0]=He("numFmts",null,{count:t.length-2}).replace("/>",">"),t.join(""))}(e.SSF))&&(n[n.length]=r),n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',(r=function(e){var t=[];return t[t.length]=He("cellXfs",null),e.forEach((function(e){t[t.length]=He("xf",null,e)})),t[t.length]="",2===t.length?"":(t[0]=He("cellXfs",null,{count:t.length-2}).replace("/>",">"),t.join(""))}(t.cellXfs))&&(n[n.length]=r),n[n.length]='',n[n.length]='',n[n.length]='',n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}function nr(e,t,r){var n=[21600,21600],a=["m0,0l0",n[1],n[0],n[1],n[0],"0xe"].join(","),o=[He("xml",null,{"xmlns:v":Je.v,"xmlns:o":Je.o,"xmlns:x":Je.x,"xmlns:mv":Je.mv}).replace(/\/>/,">"),He("o:shapelayout",He("o:idmap",null,{"v:ext":"edit",data:e}),{"v:ext":"edit"})],i=65536*e,s=t||[];return s.length>0&&o.push(He("v:shapetype",[He("v:stroke",null,{joinstyle:"miter"}),He("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202",coordsize:n.join(","),"o:spt":202,path:a})),s.forEach((function(e){++i,o.push(function(e,t,r){var n=Ft(e[0]),a={color2:"#BEFF82",type:"gradient"};"gradient"==a.type&&(a.angle="-180");var o="gradient"==a.type?He("o:fill",null,{type:"gradientUnscaled","v:ext":"view"}):null,i=He("v:fill",o,a),s={on:"t",obscured:"t"};return["",i,He("v:shadow",null,s),He("v:path",null,{"o:connecttype":"none"}),'
','',"","",Be("x:Anchor",[n.c+1,0,n.r+1,0,n.c+3,20,n.r+5,20].join(",")),Be("x:AutoFill","False"),Be("x:Row",String(n.r)),Be("x:Column",String(n.c)),e[1].hidden?"":"","",""].join("")}(e,i))})),o.push(""),o.join("")}function ar(e){var t=[Te,He("comments",null,{xmlns:Ge[0]})],r=[];return t.push(""),e.forEach((function(e){e[1].forEach((function(e){var n=Fe(e.a);-1==r.indexOf(n)&&(r.push(n),t.push(""+n+"")),e.T&&e.ID&&-1==r.indexOf("tc="+e.ID)&&(r.push("tc="+e.ID),t.push("tc="+e.ID+""))}))})),0==r.length&&(r.push("SheetJ5"),t.push("SheetJ5")),t.push(""),t.push(""),e.forEach((function(e){var n=0,a=[],o=0;if(e[1][0]&&e[1][0].T&&e[1][0].ID&&(n=r.indexOf("tc="+e[1][0].ID)),e[1].forEach((function(e){e.a&&(n=r.indexOf(Fe(e.a))),e.T&&++o,a.push(null==e.t?"":Fe(e.t))})),0===o)e[1].forEach((function(n){t.push(''),t.push(Be("t",null==n.t?"":Fe(n.t))),t.push("")}));else{e[1][0]&&e[1][0].T&&e[1][0].ID&&(n=r.indexOf("tc="+e[1][0].ID)),t.push('');for(var i="Comment:\n "+a[0]+"\n",s=1;s")}})),t.push(""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function or(e,t,r){var n=[Te,He("ThreadedComments",null,{xmlns:Ve.TCMNT}).replace(/[\/]>/,">")];return e.forEach((function(e){var a="";(e[1]||[]).forEach((function(o,i){if(o.T){o.a&&-1==t.indexOf(o.a)&&t.push(o.a);var s={ref:e[0],id:"{54EE7951-7262-4200-6969-"+("000000000000"+r.tcid++).slice(-12)+"}"};0==i?a=s.id:s.parentId=a,o.ID=s.id,o.a&&(s.personId="{54EE7950-7262-4200-6969-"+("000000000000"+t.indexOf(o.a)).slice(-12)+"}"),n.push(He("threadedComment",Be("text",o.t||""),s))}else delete o.ID}))})),n.push(""),n.join("")}var ir=["xlsb","xlsm","xlam","biff8","xla"],sr="undefined"!=typeof Map;function lr(e,t){var r,n,a={min:e+1,max:e+1},o=-1;return t.MDW&&(Qt=t.MDW),null!=t.width?a.customWidth=1:null!=t.wpx?(r=t.wpx,o=Math.floor((r-5)/Qt*100+.5)/100):null!=t.wch&&(o=t.wch),o>-1?(a.width=(n=o,Math.round((n*Qt+5)/Qt*256)/256),a.customWidth=1):null!=t.width&&(a.width=t.width),t.hidden&&(a.hidden=!0),null!=t.level&&(a.outlineLevel=a.level=t.level),a}function cr(e,t,r){var n,a,o=r.revssf[null!=t.z?t.z:"General"],i=60,s=e.length;if(null==o&&r.ssf)for(;i<392;++i)if(null==r.ssf[i]){n=t.z,a=i,Q(ee[n]||n,a),r.ssf[i]=t.z,r.revssf[t.z]=o=i;break}for(i=0;i!=s;++i)if(e[i].numFmtId===o)return i;return e[s]={numFmtId:o,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},s}function fr(e,t,r){if(e&&e["!ref"]){var n=Lt(e["!ref"]);if(n.e.c=0;--r)n=((0==(16384&n)?0:1)|n<<1&32767)^t[r];return 52811^n}(e.password).toString(16).toUpperCase()),He("sheetProtection",null,t)}function dr(e,t,r,n,a,o,i){if(e.c&&r["!comments"].push([t,e.c]),(void 0===e.v||"z"===e.t&&!(n||{}).sheetStubs)&&"string"!=typeof e.f&&void 0===e.z)return"";var s="",l=e.t,c=e.v;if("z"!==e.t)switch(e.t){case"b":s=e.v?"1":"0";break;case"n":isNaN(e.v)?(e.t="e",s=jt[e.v=36]):isFinite(e.v)?s=""+e.v:(e.t="e",s=jt[e.v=7]);break;case"e":s=jt[e.v];break;case"d":if(n&&n.cellDates){var f=me(e.v,i);s=f.toISOString(),f.getUTCFullYear()<1900&&(s=s.slice(s.indexOf("T")+1).replace("Z",""))}else(e=ge(e)).t="n",s=""+(e.v=fe(me(e.v,i),i));void 0===e.z&&(e.z=S[14]);break;default:s=e.v}var h="z"==e.t||null==e.v?"":Be("v",Fe(s)),u={r:t},p=cr(n.cellXfs,e,n);switch(0!==p&&(u.s=p),e.t){case"n":case"z":break;case"d":u.t="d";break;case"b":u.t="b";break;case"e":u.t="e";break;default:if(null==e.v){delete e.t;break}if(e.v.length>32767)throw new Error("Text length must not exceed 32767 characters");if(n&&n.bookSST){h=Be("v",""+function(e,t,r){var n=0,a=e.length;if(r){if(sr?r.has(t):Object.prototype.hasOwnProperty.call(r,t))for(var o=sr?r.get(t):r[t];n16383||f.e.r>1048575){if(t.WTF)throw new Error("Range "+c+" exceeds format limit A1:XFD1048576");f.e.c=Math.min(f.e.c,16383),f.e.r=Math.min(f.e.c,1048575),c=Pt(f)}n||(n={}),l["!comments"]=[];var h=[];!function(e,t,r,n,a){var o=!1,i={},s=null;if("xlsx"!==n.bookType&&t.vbaraw){var l=t.SheetNames[r];try{t.Workbook&&(l=t.Workbook.Sheets[r].CodeName||l)}catch(e){}o=!0,i.codeName=$e(Fe(l))}if(e&&e["!outline"]){var c={summaryBelow:1,summaryRight:1};e["!outline"].above&&(c.summaryBelow=0),e["!outline"].left&&(c.summaryRight=0),s=(s||"")+He("outlinePr",null,c)}(o||s)&&(a[a.length]=He("sheetPr",s,i))}(l,r,e,t,o),o[o.length]=He("dimension",null,{ref:c}),o[o.length]=function(e,t,r,n){var a={workbookViewId:"0"};return(((n||{}).Workbook||{}).Views||[])[0]&&(a.rightToLeft=n.Workbook.Views[0].RTL?"1":"0"),He("sheetViews",He("sheetView",null,a),{})}(0,0,0,r),t.sheetFormat&&(o[o.length]=He("sheetFormatPr",null,{defaultRowHeight:t.sheetFormat.defaultRowHeight||"16",baseColWidth:t.sheetFormat.baseColWidth||"10",outlineLevelRow:t.sheetFormat.outlineLevelRow||"7"})),null!=l["!cols"]&&l["!cols"].length>0&&(o[o.length]=function(e,t){for(var r,n=[""],a=0;a!=t.length;++a)(r=t[a])&&(n[n.length]=He("col",null,lr(a,r)));return n[n.length]="",n.join("")}(0,l["!cols"])),o[a=o.length]="",l["!links"]=[],null!=l["!ref"]&&(s=function(e,t,r,n){var a,o,i=[],s=[],l=Lt(e["!ref"]),c="",f="",h=[],u=0,p=0,d=e["!rows"],m=null!=e["!data"],g={r:f},v=-1,b=(((n||{}).Workbook||{}).WBProps||{}).date1904;for(p=l.s.c;p<=l.e.c;++p)h[p]=Et(p);for(u=l.s.r;u<=l.e.r;++u){for(s=[],f=Ot(u),p=l.s.c;p<=l.e.c;++p){a=h[p]+f;var x=m?(e["!data"][u]||[])[p]:e[a];void 0!==x&&null!=(c=dr(x,a,e,t,0,0,b))&&s.push(c)}(s.length>0||d&&d[u])&&(g={r:f},d&&d[u]&&((o=d[u]).hidden&&(g.hidden=1),v=-1,o.hpx?v=tr(o.hpx):o.hpt&&(v=o.hpt),v>-1&&(g.ht=v,g.customHeight=1),o.level&&(g.outlineLevel=o.level)),i[i.length]=He("row",s.join(""),g))}if(d)for(;u-1&&(g.ht=v,g.customHeight=1),o.level&&(g.outlineLevel=o.level),i[i.length]=He("row","",g));return i.join("")}(l,t,0,r),s.length>0&&(o[o.length]=s)),o.length>a+1&&(o[o.length]="",o[a]=o[a].replace("/>",">")),l["!protect"]&&(o[o.length]=pr(l["!protect"])),null!=l["!autofilter"]&&(o[o.length]=function(e,t,r,n){var a="string"==typeof e.ref?e.ref:Pt(e.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var o=r.Workbook.Names,i=Nt(a);i.s.r==i.e.r&&(i.e.r=Nt(t["!ref"]).e.r,a=Pt(i));for(var s=0;s0&&(o[o.length]=function(e){if(0===e.length)return"";for(var t='',r=0;r!=e.length;++r)t+='';return t+""}(l["!merges"]));var u,p,d=-1,m=-1;return l["!links"].length>0&&(o[o.length]="",l["!links"].forEach((function(e){e[1].Target&&(u={ref:e[0]},"#"!=e[1].Target.charAt(0)&&(m=Gt(n,-1,Fe(e[1].Target).replace(/#.*$/,""),Xt.HLINK),u["r:id"]="rId"+m),(d=e[1].Target.indexOf("#"))>-1&&(u.location=Fe(e[1].Target.slice(d+1))),e[1].Tooltip&&(u.tooltip=Fe(e[1].Tooltip)),u.display=e[1].display,o[o.length]=He("hyperlink",null,u))})),o[o.length]=""),delete l["!links"],null!=l["!margins"]&&(o[o.length]=(function(e,t){if(e){var r=[.7,.7,.75,.75,.3,.3];null==e.left&&(e.left=r[0]),null==e.right&&(e.right=r[1]),null==e.top&&(e.top=r[2]),null==e.bottom&&(e.bottom=r[3]),null==e.header&&(e.header=r[4]),null==e.footer&&(e.footer=r[5])}}(p=l["!margins"]),He("pageMargins",null,p))),t&&!t.ignoreEC&&null!=t.ignoreEC||(o[o.length]=Be("ignoredErrors",He("ignoredError",null,{numberStoredAsText:1,sqref:c}))),h.length>0&&(m=Gt(n,-1,"../drawings/drawing"+(e+1)+".xml",Xt.DRAW),o[o.length]=He("drawing",null,{"r:id":"rId"+m}),l["!drawing"]=h),l["!comments"].length>0&&(m=Gt(n,-1,"../drawings/vmlDrawing"+(e+1)+".vml",Xt.VML),o[o.length]=He("legacyDrawing",null,{"r:id":"rId"+m}),l["!legacy"]=m),o.length>1&&(o[o.length]="",o[1]=o[1].replace("/>",">")),o.join("")}var gr=[["allowRefreshQuery",!1,"bool"],["autoCompressPictures",!0,"bool"],["backupFile",!1,"bool"],["checkCompatibility",!1,"bool"],["CodeName",""],["date1904",!1,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",!1,"bool"],["hidePivotFieldList",!1,"bool"],["promptedSolutions",!1,"bool"],["publishItems",!1,"bool"],["refreshAllConnections",!1,"bool"],["saveExternalLinkValues",!0,"bool"],["showBorderUnselectedTables",!0,"bool"],["showInkAnnotation",!0,"bool"],["showObjects","all"],["showPivotChartFilter",!1,"bool"],["updateLinks","userSet"]],vr=":][*?/\\".split("");function br(e,t){try{if(""==e)throw new Error("Sheet name cannot be blank");if(e.length>31)throw new Error("Sheet name cannot exceed 31 chars");if(39==e.charCodeAt(0)||39==e.charCodeAt(e.length-1))throw new Error("Sheet name cannot start or end with apostrophe (')");if("history"==e.toLowerCase())throw new Error("Sheet name cannot be 'History'");vr.forEach((function(t){if(-1!=e.indexOf(t))throw new Error("Sheet name cannot contain : \\ / ? * [ ]")}))}catch(e){if(t)return!1;throw e}return!0}function xr(e){if(!e||!e.SheetNames||!e.Sheets)throw new Error("Invalid Workbook");if(!e.SheetNames.length)throw new Error("Workbook is empty");var t,r,n,a=e.Workbook&&e.Workbook.Sheets||[];t=e.SheetNames,r=a,n=!!e.vbaraw,t.forEach((function(e,a){br(e);for(var o=0;o22)throw new Error("Bad Code Name: Worksheet"+i)}}));for(var o=0;or||a[h].s.c>l||a[h].e.r1&&(i.rowspan=c),f>1&&(i.colspan=f),n.editable?d=''+d+"":p&&(i["data-t"]=p&&p.t||"z",null!=p.v&&(i["data-v"]=p.v instanceof Date?p.v.toISOString():p.v),null!=p.z&&(i["data-z"]=p.z),p.l&&"#"!=(p.l.Target||"#").charAt(0)&&(d=''+d+"")),i.id=(n.id||"sjs")+"-"+u,o.push(He("td",d,i))}}return""+o.join("")+""}function yr(e,t,r){var n=t.rows;if(!n)throw"Unsupported origin when "+t.tagName+" is not a TABLE";var a=r||{},o=null!=e["!data"],i=0,s=0;if(null!=a.origin)if("number"==typeof a.origin)i=a.origin;else{var l="string"==typeof a.origin?Ft(a.origin):a.origin;i=l.r,s=l.c}var c=Math.min(a.sheetRows||1e7,n.length),f={s:{r:0,c:0},e:{r:i,c:s}};if(e["!ref"]){var h=Nt(e["!ref"]);f.s.r=Math.min(f.s.r,h.s.r),f.s.c=Math.min(f.s.c,h.s.c),f.e.r=Math.max(f.e.r,h.e.r),f.e.c=Math.max(f.e.c,h.e.c),-1==i&&(f.e.r=i=h.e.r+1)}var u=[],p=0,d=e["!rows"]||(e["!rows"]=[]),m=0,g=0,v=0,b=0,x=0,w=0;for(e["!cols"]||(e["!cols"]=[]);m1||w>1)&&u.push({s:{r:g+i,c:b+s},e:{r:g+i+(x||1)-1,c:b+s+(w||1)-1}});var D={t:"s",v:_},O=k.getAttribute("data-t")||k.getAttribute("t")||"";null!=_&&(0==_.length?D.t=O||"z":a.raw||0==_.trim().length||"s"==O||("TRUE"===_?D={t:"b",v:!0}:"FALSE"===_?D={t:"b",v:!1}:isNaN(be(_))?isNaN(ke(_).getDate())||(D={t:"d",v:me(_)},a.UTC&&(D.v=_e(D.v)),a.cellDates||(D={t:"n",v:fe(D.v)}),D.z=a.dateNF||S[14]):D={t:"n",v:be(_)})),void 0===D.z&&null!=A&&(D.z=A);var E="",F=k.getElementsByTagName("A");if(F&&F.length)for(var M=0;M=c&&(e["!fullref"]=Pt((f.e.r=n.length-m+g-1+i,f))),e}function Cr(e,t){var r={};return(t||{}).dense&&(r["!data"]=[]),yr(r,e,t)}function Sr(e){var t="",r=function(e){return e.ownerDocument.defaultView&&"function"==typeof e.ownerDocument.defaultView.getComputedStyle?e.ownerDocument.defaultView.getComputedStyle:"function"==typeof getComputedStyle?getComputedStyle:null} -/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */(e);return r&&(t=r(e).getPropertyValue("display")),t||(t=e.style&&e.style.display),"none"===t}function kr(e){var t;(t=[["cellDates",!1],["bookSST",!1],["bookType","xlsx"],["compression",!1],["WTF",!1]],function(e){for(var r=0;r!=t.length;++r){var n=t[r];void 0===e[n[0]]&&(e[n[0]]=n[1]),"n"===n[2]&&(e[n[0]]=Number(e[n[0]]))}})(e)}function _r(e,t){var r;e&&!e.SSF&&(e.SSF=ge(S)),e&&e.SSF&&(r||(r={}),r[0]="General",r[1]="0",r[2]="0.00",r[3]="#,##0",r[4]="#,##0.00",r[9]="0%",r[10]="0.00%",r[11]="0.00E+00",r[12]="# ?/?",r[13]="# ??/??",r[14]="m/d/yy",r[15]="d-mmm-yy",r[16]="d-mmm",r[17]="mmm-yy",r[18]="h:mm AM/PM",r[19]="h:mm:ss AM/PM",r[20]="h:mm",r[21]="h:mm:ss",r[22]="m/d/yy h:mm",r[37]="#,##0 ;(#,##0)",r[38]="#,##0 ;[Red](#,##0)",r[39]="#,##0.00;(#,##0.00)",r[40]="#,##0.00;[Red](#,##0.00)",r[45]="mm:ss",r[46]="[h]:mm:ss",r[47]="mmss.0",r[48]="##0.0E+0",r[49]="@",r[56]='"上午/下午 "hh"時"mm"分"ss"秒 "',S=r,function(e){for(var t=0;392!=t;++t)void 0!==e[t]&&Q(e[t],t)}(e.SSF),t.revssf=function(e){for(var t=[],r=oe(e),n=0;n!==r.length;++n)t[e[r[n]]]=parseInt(r[n],10);return t}(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF),t.rels={},t.wbrels={},t.Strings=[],t.Strings.Count=0,t.Strings.Unique=0,sr?t.revStrings=new Map:(t.revStrings={},t.revStrings.foo=[],delete t.revStrings.foo);var n="xml",a=ir.indexOf(t.bookType)>-1,o={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""};kr(t=t||{});var i,s,l,c=re.utils.cfb_new(),f="",h=0;if(t.cellXfs=[],cr(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),Ae(c,f="docProps/core.xml",function(e,t){var r=t||{},n=[Te,He("cp:coreProperties",null,{"xmlns:cp":Ve.CORE_PROPS,"xmlns:dc":Ve.dc,"xmlns:dcterms":Ve.dcterms,"xmlns:dcmitype":Ve.dcmitype,"xmlns:xsi":Ve.xsi})],a={};if(!e&&!r.Props)return n.join("");e&&(null!=e.CreatedDate&&qt("dcterms:created","string"==typeof e.CreatedDate?e.CreatedDate:Xe(e.CreatedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},n,a),null!=e.ModifiedDate&&qt("dcterms:modified","string"==typeof e.ModifiedDate?e.ModifiedDate:Xe(e.ModifiedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},n,a));for(var o=0;o!=Jt.length;++o){var i=Jt[o],s=r.Props&&null!=r.Props[i[1]]?r.Props[i[1]]:e?e[i[1]]:null;!0===s?s="1":!1===s?s="0":"number"==typeof s&&(s=String(s)),null!=s&&qt(i[0],s,null,n,a)}return n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}(e.Props,t)),o.coreprops.push(f),Gt(t.rels,2,f,Xt.CORE_PROPS),f="docProps/app.xml",e.Props&&e.Props.SheetNames);else if(e.Workbook&&e.Workbook.Sheets){for(var u=[],p=0;pWorksheets")+l("vt:variant",l("vt:i4",String(i.Worksheets))),{size:2,baseType:"variant"})),s[s.length]=l("TitlesOfParts",l("vt:vector",i.SheetNames.map((function(e){return""+Fe(e)+""})).join(""),{size:i.Worksheets,baseType:"lpstr"})),s.length>2&&(s[s.length]="",s[1]=s[1].replace("/>",">")),s.join(""))),o.extprops.push(f),Gt(t.rels,3,f,Xt.EXT_PROPS),e.Custprops!==e.Props&&oe(e.Custprops||{}).length>0&&(Ae(c,f="docProps/custom.xml",Kt(e.Custprops)),o.custprops.push(f),Gt(t.rels,4,f,Xt.CUST_PROPS));var d,m,g=["SheetJ5"];for(t.tcid=0,h=1;h<=e.SheetNames.length;++h){var v={"!id":{}},b=e.Sheets[e.SheetNames[h-1]];(b||{})["!type"];if(Ae(c,f="xl/worksheets/sheet"+h+"."+n,mr(h-1,t,e,v)),o.sheets.push(f),Gt(t.wbrels,-1,"worksheets/sheet"+h+"."+n,Xt.WS[0]),b){var x=b["!comments"],w=!1,y="";if(x&&x.length>0){var C=!1;x.forEach((function(e){e[1].forEach((function(e){1==e.T&&(C=!0)}))})),C&&(Ae(c,y="xl/threadedComments/threadedComment"+h+".xml",or(x,g,t)),o.threadedcomments.push(y),Gt(v,-1,"../threadedComments/threadedComment"+h+".xml",Xt.TCMNT)),Ae(c,y="xl/comments"+h+"."+n,ar(x)),o.comments.push(y),Gt(v,-1,"../comments"+h+"."+n,Xt.CMNT),w=!0}b["!legacy"]&&w&&Ae(c,"xl/drawings/vmlDrawing"+h+".vml",nr(h,b["!comments"])),delete b["!comments"],delete b["!legacy"]}v["!id"].rId1&&Ae(c,(m=void 0,m=(d=f).lastIndexOf("/"),d.slice(0,m+1)+"_rels/"+d.slice(m+1)+".rels"),Vt(v))}return null!=t.Strings&&t.Strings.length>0&&(Ae(c,f="xl/sharedStrings."+n,function(e,t){if(!t.bookSST)return"";var r=[Te];r[r.length]=He("sst",null,{xmlns:Ge[0],count:e.Count,uniqueCount:e.Unique});for(var n=0;n!=e.length;++n)if(null!=e[n]){var a=e[n],o="";a.r?o+=a.r:(o+=""),o+="",r[r.length]=o}return r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}(t.Strings,t)),o.strs.push(f),Gt(t.wbrels,-1,"sharedStrings."+n,Xt.SST)),Ae(c,f="xl/workbook."+n,function(e){var t=[Te];t[t.length]=He("workbook",null,{xmlns:Ge[0],"xmlns:r":Ve.r});var r=e.Workbook&&(e.Workbook.Names||[]).length>0,n={codeName:"ThisWorkbook"};e.Workbook&&e.Workbook.WBProps&&(gr.forEach((function(t){null!=e.Workbook.WBProps[t[0]]&&e.Workbook.WBProps[t[0]]!=t[1]&&(n[t[0]]=e.Workbook.WBProps[t[0]])})),e.Workbook.WBProps.CodeName&&(n.codeName=e.Workbook.WBProps.CodeName,delete n.CodeName)),t[t.length]=He("workbookPr",null,n);var a=e.Workbook&&e.Workbook.Sheets||[],o=0;if(a&&a[0]&&a[0].Hidden){for(t[t.length]="",o=0;o!=e.SheetNames.length&&a[o]&&a[o].Hidden;++o);o==e.SheetNames.length&&(o=0),t[t.length]='',t[t.length]=""}for(t[t.length]="",o=0;o!=e.SheetNames.length;++o){var i={name:Fe(e.SheetNames[o].slice(0,31))};if(i.sheetId=""+(o+1),i["r:id"]="rId"+(o+1),a[o])switch(a[o].Hidden){case 1:i.state="hidden";break;case 2:i.state="veryHidden"}t[t.length]=He("sheet",null,i)}return t[t.length]="",r&&(t[t.length]="",e.Workbook&&e.Workbook.Names&&e.Workbook.Names.forEach((function(e){var r={name:e.Name};e.Comment&&(r.comment=e.Comment),null!=e.Sheet&&(r.localSheetId=""+e.Sheet),e.Hidden&&(r.hidden="1"),e.Ref&&(t[t.length]=He("definedName",Fe(e.Ref),r))})),t[t.length]=""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}(e)),o.workbooks.push(f),Gt(t.rels,1,f,Xt.WB),Ae(c,f="xl/theme/theme1.xml",function(e,t){if(t&&t.themeXLSX)return t.themeXLSX;if(e&&"string"==typeof e.raw)return e.raw;var r=[Te];return r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r.join("")}(e.Themes,t)),o.themes.push(f),Gt(t.wbrels,-1,"theme/theme1.xml",Xt.THEME),Ae(c,f="xl/styles."+n,rr(e,t)),o.styles.push(f),Gt(t.wbrels,-1,"styles."+n,Xt.STY),e.vbaraw&&a&&(Ae(c,f="xl/vbaProject.bin",e.vbaraw),o.vba.push(f),Gt(t.wbrels,-1,"vbaProject.bin",Xt.VBA)),Ae(c,f="xl/metadata."+n,function(){var e=[Te];return e.push('\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n'),e.join("")}()),o.metadata.push(f),Gt(t.wbrels,-1,"metadata."+n,Xt.XLMETA),g.length>1&&(Ae(c,f="xl/persons/person.xml",function(e){var t=[Te,He("personList",null,{xmlns:Ve.TCMNT,"xmlns:x":Ge[0]}).replace(/[\/]>/,">")];return e.forEach((function(e,r){t.push(He("person",null,{displayName:e,id:"{54EE7950-7262-4200-6969-"+("000000000000"+r).slice(-12)+"}",userId:e,providerId:"None"}))})),t.push(""),t.join("")}(g)),o.people.push(f),Gt(t.wbrels,-1,"persons/person.xml",Xt.PEOPLE)),Ae(c,"[Content_Types].xml",Ht(o,t)),Ae(c,"_rels/.rels",Vt(t.rels)),Ae(c,"xl/_rels/workbook.xml.rels",Vt(t.wbrels)),delete t.revssf,delete t.ssf,c}function Ar(e,t){var r=ge(t||{});return function(e,t){var r={},n=a?"nodebuffer":"undefined"!=typeof Uint8Array?"array":"string";t.compression&&(r.compression="DEFLATE");if(t.password)r.type=n;else switch(t.type){case"base64":r.type="base64";break;case"binary":r.type="string";break;case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");case"buffer":case"file":r.type=n;break;default:throw new Error("Unrecognized type "+t.type)}var o=e.FullPaths?re.write(e,{fileType:"zip",type:{nodebuffer:"buffer",string:"binary"}[r.type]||r.type,compression:!!t.compression}):e.generate(r);if("undefined"!=typeof Deno&&"string"==typeof o){if("binary"==t.type||"base64"==t.type)return o;o=new Uint8Array(f(o))}return t.password&&"undefined"!=typeof encrypt_agile?function(e,t){switch(t.type){case"base64":case"binary":break;case"buffer":case"array":t.type="";break;case"file":return ae(t.file,re.write(e,{type:a?"buffer":""}));case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");default:throw new Error("Unrecognized type "+t.type)}return re.write(e,t)}(encrypt_agile(o,t.password),t):"file"===t.type?ae(t.file,o):"string"==t.type?Ue(o):o}(_r(e,r),r)}function Tr(e,t){xr(e);var r=ge(t||{});if(r.cellStyles&&(r.cellNF=!0,r.sheetStubs=!0),"array"==r.type){r.type="binary";var n=Tr(e,r);return r.type="array",f(n)}return Ar(e,r)}function Dr(e,t,r){var n=r||{};return n.type="file",n.file=t,function(e){if(!e.bookType){var t=e.file.slice(e.file.lastIndexOf(".")).toLowerCase();t.match(/^\.[a-z]+$/)&&(e.bookType=t.slice(1)),e.bookType={xls:"biff8",htm:"html",slk:"sylk",socialcalc:"eth",Sh33tJS:"WTF"}[e.bookType]||e.bookType}}(n),Tr(e,n)}function Or(e,t,r,n,a,o,i){var s,l=Ot(r),c=i.defval,f=i.raw||!Object.prototype.hasOwnProperty.call(i,"raw"),h=!0,u=null!=e["!data"],p=1===a?[]:{};if(1!==a)if(Object.defineProperty)try{Object.defineProperty(p,"__rowNum__",{value:r,enumerable:!1})}catch(e){p.__rowNum__=r}else p.__rowNum__=r;if(!u||e["!data"][r])for(var d=t.s.c;d<=t.e.c;++d){var m=u?(e["!data"][r]||[])[d]:e[n[d]+l];if(null!=m&&void 0!==m.t){var g=m.v;switch(m.t){case"z":if(null==g)break;continue;case"e":g=0==g?null:void 0;break;case"s":case"b":case"n":if(!m.z||!J(m.z))break;if("number"==typeof(g=he(g)))break;case"d":i&&i.UTC||(s=g,g=new Date(s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate(),s.getUTCHours(),s.getUTCMinutes(),s.getUTCSeconds(),s.getUTCMilliseconds()));break;default:throw new Error("unrecognized type "+m.t)}if(null!=o[d]){if(null==g)if("e"==m.t&&null===g)p[o[d]]=null;else if(void 0!==c)p[o[d]]=c;else{if(!f||null!==g)continue;p[o[d]]=null}else p[o[d]]=f&&("n"!==m.t||"n"===m.t&&!1!==i.rawNumbers)?g:$t(m,g,i);null!=g&&(h=!1)}}else{if(void 0===c)continue;null!=o[d]&&(p[o[d]]=c)}}return{row:p,isempty:h}}function Er(e,t){if(null==e||null==e["!ref"])return[];var r={t:"n",v:0},n=0,a=1,o=[],i=0,s="",l={s:{r:0,c:0},e:{r:0,c:0}},c=t||{},f=null!=c.range?c.range:e["!ref"];switch(1===c.header?n=1:"A"===c.header?n=2:Array.isArray(c.header)?n=3:null==c.header&&(n=0),typeof f){case"string":l=Lt(f);break;case"number":(l=Lt(e["!ref"])).s.r=f;break;default:l=f}n>0&&(a=0);var h=Ot(l.s.r),u=[],p=[],d=0,m=0,g=null!=e["!data"],v=l.s.r,b=0,x={};g&&!e["!data"][v]&&(e["!data"][v]=[]);var w=c.skipHidden&&e["!cols"]||[],y=c.skipHidden&&e["!rows"]||[];for(b=l.s.c;b<=l.e.c;++b)if(!(w[b]||{}).hidden)switch(u[b]=Et(b),r=g?e["!data"][v][b]:e[u[b]+h],n){case 1:o[b]=b-l.s.c;break;case 2:o[b]=u[b];break;case 3:o[b]=c.header[b-l.s.c];break;default:if(null==r&&(r={w:"__EMPTY",t:"s"}),s=i=$t(r,null,c),m=x[i]||0){do{s=i+"_"+m++}while(x[s]);x[i]=m,x[s]=1}else x[i]=1;o[b]=s}for(v=l.s.r+a;v<=l.e.r;++v)if(!(y[v]||{}).hidden){var C=Or(e,l,v,u,n,o,c);(!1===C.isempty||(1===n?!1!==c.blankrows:c.blankrows))&&(p[d++]=C.row)}return p.length=d,p}!function(){try{return"undefined"==typeof Uint8Array||void 0===Uint8Array.prototype.subarray?"slice":"undefined"!=typeof Buffer?void 0===Buffer.prototype.subarray?"slice":("function"==typeof Buffer.from?Buffer.from([72,62]):new Buffer([72,62]))instanceof Uint8Array?"subarray":"slice":"subarray"}catch(e){return"slice"}}();var Fr=/"/g;function Mr(e,t,r,n,a,o,i,s){for(var l=!0,c=[],f="",h=Ot(r),u=null!=e["!data"],p=u&&e["!data"][r]||[],d=t.s.c;d<=t.e.c;++d)if(n[d]){var m=u?p[d]:e[n[d]+h];if(null==m)f="";else if(null!=m.v){l=!1,f=""+(s.rawNumbers&&"n"==m.t?m.v:$t(m,null,s));for(var g=0,v=0;g!==f.length;++g)if((v=f.charCodeAt(g))===a||v===o||34===v||s.forceQuotes){f='"'+f.replace(Fr,'""')+'"';break}"ID"==f&&(f='"ID"')}else null==m.f||m.F?f="":(l=!1,(f="="+m.f).indexOf(",")>=0&&(f='"'+f.replace(Fr,'""')+'"'));c.push(f)}return!1===s.blankrows&&l?null:c.join(i)}function Nr(e,t){var r=[],n=null==t?{}:t;if(null==e||null==e["!ref"])return"";for(var a=Lt(e["!ref"]),o=void 0!==n.FS?n.FS:",",i=o.charCodeAt(0),s=void 0!==n.RS?n.RS:"\n",l=s.charCodeAt(0),c=new RegExp(("|"==o?"\\|":o)+"+$"),f="",h=[],u=n.skipHidden&&e["!cols"]||[],p=n.skipHidden&&e["!rows"]||[],d=a.s.c;d<=a.e.c;++d)(u[d]||{}).hidden||(h[d]=Et(d));for(var m=0,g=a.s.r;g<=a.e.r;++g)(p[g]||{}).hidden||null!=(f=Mr(e,a,g,h,i,l,o,n))&&(n.strip&&(f=f.replace(c,"")),(f||!1!==n.blankrows)&&r.push((m++?s:"")+f));return r.join("")}function Pr(e,t,r){var n=r||{},a=e?null!=e["!data"]:n.dense,o=+!n.skipHeader,i=e||{};!e&&a&&(i["!data"]=[]);var s=0,l=0;if(i&&null!=n.origin)if("number"==typeof n.origin)s=n.origin;else{var c="string"==typeof n.origin?Ft(n.origin):n.origin;s=c.r,l=c.c}var f={s:{c:0,r:0},e:{c:l,r:s+t.length-1+o}};if(i["!ref"]){var h=Lt(i["!ref"]);f.e.c=Math.max(f.e.c,h.e.c),f.e.r=Math.max(f.e.r,h.e.r),-1==s&&(s=h.e.r+1,f.e.r=s+t.length-1+o)}else-1==s&&(s=0,f.e.r=t.length-1+o);var u=n.header||[],p=0,d=[];t.forEach((function(e,t){a&&!i["!data"][s+t+o]&&(i["!data"][s+t+o]=[]),a&&(d=i["!data"][s+t+o]),oe(e).forEach((function(r){-1==(p=u.indexOf(r))&&(u[p=u.length]=r);var c=e[r],f="z",h="",m=a?"":Et(l+p)+Ot(s+t+o),g=a?d[l+p]:i[m];!c||"object"!=typeof c||c instanceof Date?("number"==typeof c?f="n":"boolean"==typeof c?f="b":"string"==typeof c?f="s":c instanceof Date?(f="d",n.UTC||(c=_e(c)),n.cellDates||(f="n",c=fe(c)),h=null!=g&&g.z&&J(g.z)?g.z:n.dateNF||S[14]):null===c&&n.nullError&&(f="e",c=0),g?(g.t=f,g.v=c,delete g.w,delete g.R,h&&(g.z=h)):a?d[l+p]=g={t:f,v:c}:i[m]=g={t:f,v:c},h&&(g.z=h)):a?d[l+p]=c:i[m]=c}))})),f.e.c=Math.max(f.e.c,l+u.length-1);var m=Ot(s);if(a&&!i["!data"][s]&&(i["!data"][s]=[]),o)for(p=0;pSheetJS Table Export',a=null!=r.footer?r.footer:"",o=[n],i=Nt(e["!ref"]);o.push(function(e,t,r){return[].join("")+""}(0,0,r));for(var s=i.s.r;s<=i.e.r;++s)o.push(wr(e,i,s,r));return o.push(""+a),o.join("")},sheet_to_formulae:function(e){var t,r="",n="";if(null==e||null==e["!ref"])return[];var a,o=Lt(e["!ref"]),i="",s=[],l=[],c=null!=e["!data"];for(a=o.s.c;a<=o.e.c;++a)s[a]=Et(a);for(var f=o.s.r;f<=o.e.r;++f)for(i=Ot(f),a=o.s.c;a<=o.e.c;++a)if(r=s[a]+i,n="",void 0!==(t=c?(e["!data"][f]||[])[a]:e[r])){if(null!=t.F){if(r=t.F,!t.f)continue;n=t.f,-1==r.indexOf(":")&&(r=r+":"+r)}if(null!=t.f)n=t.f;else{if("z"==t.t)continue;if("n"==t.t&&null!=t.v)n=""+t.v;else if("b"==t.t)n=t.v?"TRUE":"FALSE";else if(void 0!==t.w)n="'"+t.w;else{if(void 0===t.v)continue;n="s"==t.t?"'"+t.v:""+t.v}}l[l.length]=r+"="+n}return l},sheet_to_row_object_array:Er,sheet_get_cell:Ir,book_new:function(){return{SheetNames:[],Sheets:{}}},book_append_sheet:function(e,t,r,n){var a=1;if(!r)for(;a<=65535&&-1!=e.SheetNames.indexOf(r="Sheet"+a);++a,r=void 0);if(!r||e.SheetNames.length>=65535)throw new Error("Too many worksheets");if(n&&e.SheetNames.indexOf(r)>=0){var o=r.match(/(^.*?)(\d+)$/);a=o&&+o[2]||0;var i=o&&o[1]||r;for(++a;a<=65535&&-1!=e.SheetNames.indexOf(r=i+a);++a);}if(br(r),e.SheetNames.indexOf(r)>=0)throw new Error("Worksheet with name |"+r+"| already exists!");return e.SheetNames.push(r),e.Sheets[r]=t,r},book_set_sheet_visibility:function(e,t,r){e.Workbook||(e.Workbook={}),e.Workbook.Sheets||(e.Workbook.Sheets=[]);var n=function(e,t){if("number"==typeof t){if(t>=0&&e.SheetNames.length>t)return t;throw new Error("Cannot find sheet # "+t)}if("string"==typeof t){var r=e.SheetNames.indexOf(t);if(r>-1)return r;throw new Error("Cannot find sheet name |"+t+"|")}throw new Error("Cannot find sheet |"+t+"|")}(e,t);switch(e.Workbook.Sheets[n]||(e.Workbook.Sheets[n]={}),r){case 0:case 1:case 2:break;default:throw new Error("Bad sheet visibility setting "+r)}e.Workbook.Sheets[n].Hidden=r},cell_set_number_format:function(e,t){return e.z=t,e},cell_set_hyperlink:Rr,cell_set_internal_link:function(e,t,r){return Rr(e,"#"+t,r)},cell_add_comment:function(e,t,r){e.c||(e.c=[]),e.c.push({t,a:r||"SheetJS"})},sheet_set_array_formula:function(e,t,r,n){for(var a="string"!=typeof t?t:Lt(t),o="string"==typeof t?t:Pt(t),i=a.s.r;i<=a.e.r;++i)for(var s=a.s.c;s<=a.e.c;++s){var l=Ir(e,i,s);l.t="n",l.F=o,delete l.v,i==a.s.r&&s==a.s.c&&(l.f=r,n&&(l.D=!0))}var c=Nt(e["!ref"]);return c.s.r>a.s.r&&(c.s.r=a.s.r),c.s.c>a.s.c&&(c.s.c=a.s.c),c.e.r>2,s=(3&n)<<4|(a=e.charCodeAt(f++))>>4,l=(15&a)<<2|(i=e.charCodeAt(f++))>>6,c=63&i,isNaN(a)?l=c=64:isNaN(i)&&(c=64),r+=t.charAt(o)+t.charAt(s)+t.charAt(l)+t.charAt(c);return r}function n(e){var r="",n=0,a=0,i=0,o=0,s=0,l=0;"data:"==e.slice(0,5)&&((c=e.slice(0,1024).indexOf(";base64,"))>-1&&(e=e.slice(c+8)));e=e.replace(/[^\w\+\/\=]/g,"");for(var c=0;c>4,r+=String.fromCharCode(n),a=(15&o)<<4|(s=t.indexOf(e.charAt(c++)))>>2,64!==s&&(r+=String.fromCharCode(a)),i=(3&s)<<6|(l=t.indexOf(e.charAt(c++))),64!==l&&(r+=String.fromCharCode(i));return r}var a=function(){return"undefined"!=typeof Buffer&&"undefined"!=typeof process&&void 0!==process.versions&&!!process.versions.node}(),i=function(){if("undefined"!=typeof Buffer){var e=!Buffer.from;if(!e)try{Buffer.from("foo","utf8")}catch(t){e=!0}return e?function(e,t){return t?new Buffer(e,t):new Buffer(e)}:Buffer.from.bind(Buffer)}return function(){}}(),o=function(){if("undefined"==typeof Buffer)return!1;var e=i([65,0]);return!!e&&1==e.toString("utf16le").length}();function s(e){return a?Buffer.alloc?Buffer.alloc(e):new Buffer(e):"undefined"!=typeof Uint8Array?new Uint8Array(e):new Array(e)}function l(e){return a?Buffer.allocUnsafe?Buffer.allocUnsafe(e):new Buffer(e):"undefined"!=typeof Uint8Array?new Uint8Array(e):new Array(e)}var c=function(e){return a?i(e,"binary"):e.split("").map((function(e){return 255&e.charCodeAt(0)}))};function f(e){if("undefined"==typeof ArrayBuffer)return c(e);for(var t=new ArrayBuffer(e.length),r=new Uint8Array(t),n=0;n!=e.length;++n)r[n]=255&e.charCodeAt(n);return t}var h=a?function(e){return Buffer.concat(e.map((function(e){return Buffer.isBuffer(e)?e:i(e)})))}:function(e){if("undefined"!=typeof Uint8Array){var t=0,r=0;for(t=0;t=0;)t+=e.charAt(r--);return t}function m(e,t){var r=""+e;return r.length>=t?r:ve("0",t-r.length)+r}function g(e,t){var r=""+e;return r.length>=t?r:ve(" ",t-r.length)+r}function v(e,t){var r=""+e;return r.length>=t?r:r+ve(" ",t-r.length)}var b=Math.pow(2,32);function x(e,t){return e>b||e<-b?function(e,t){var r=""+Math.round(e);return r.length>=t?r:ve("0",t-r.length)+r}(e,t):function(e,t){var r=""+e;return r.length>=t?r:ve("0",t-r.length)+r}(Math.round(e),t)}function w(e,t){return t=t||0,e.length>=7+t&&103==(32|e.charCodeAt(t))&&101==(32|e.charCodeAt(t+1))&&110==(32|e.charCodeAt(t+2))&&101==(32|e.charCodeAt(t+3))&&114==(32|e.charCodeAt(t+4))&&97==(32|e.charCodeAt(t+5))&&108==(32|e.charCodeAt(t+6))}var y=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],C=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];var S={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"上午/下午 "hh"時"mm"分"ss"秒 "'},k={5:37,6:38,7:39,8:40,23:0,24:0,25:0,26:0,27:14,28:14,29:14,30:14,31:14,50:14,51:14,52:14,53:14,54:14,55:14,56:14,57:14,58:14,59:1,60:2,61:3,62:4,67:9,68:10,69:12,70:13,71:14,72:14,73:15,74:16,75:17,76:20,77:21,78:22,79:45,80:46,81:47,82:0},_={5:'"$"#,##0_);\\("$"#,##0\\)',63:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',41:'_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'};function A(e,t,r){for(var n=e<0?-1:1,a=e*n,i=0,o=1,s=0,l=1,c=0,f=0,h=Math.floor(a);ct&&(c>t?(f=l,s=i):(f=c,s=o)),!r)return[0,n*s,f];var u=Math.floor(n*s/f);return[u,n*s-u*f,f]}function T(e,t,r){if(e>2958465||e<0)return null;var n=0|(e=function(e){var t=e.toPrecision(16);if(t.indexOf("e")>-1){var r=t.slice(0,t.indexOf("e"));return(r=r.indexOf(".")>-1?r.slice(0,"0."==r.slice(0,2)?17:16):r.slice(0,15)+ve("0",r.length-15))+t.slice(t.indexOf("e"))}var n=t.indexOf(".")>-1?t.slice(0,"0."==t.slice(0,2)?17:16):t.slice(0,15)+ve("0",t.length-15);return Number(n)}(e)),a=Math.floor(86400*(e-n)),i=0,o=[],s={D:n,T:a,u:86400*(e-n)-a,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(s.u)<1e-6&&(s.u=0),t&&t.date1904&&(n+=1462),s.u>.9999&&(s.u=0,86400==++a&&(s.T=a=0,++n,++s.D)),60===n)o=r?[1317,10,29]:[1900,2,29],i=3;else if(0===n)o=r?[1317,8,29]:[1900,1,0],i=6;else{n>60&&--n;var l=new Date(1900,0,1);l.setDate(l.getDate()+n-1),o=[l.getFullYear(),l.getMonth()+1,l.getDate()],i=l.getDay(),n<60&&(i=(i+6)%7),r&&(i=function(e,t){t[0]-=581;var r=e.getDay();e<60&&(r=(r+6)%7);return r}(l,o))}return s.y=o[0],s.m=o[1],s.d=o[2],s.S=a%60,a=Math.floor(a/60),s.M=a%60,a=Math.floor(a/60),s.H=a,s.q=i,s}function D(e){return-1==e.indexOf(".")?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)$/,"$1")}function O(e){if(!isFinite(e))return isNaN(e)?"#NUM!":"#DIV/0!";var t,r=Math.floor(Math.log(Math.abs(e))*Math.LOG10E);return t=r>=-4&&r<=-1?e.toPrecision(10+r):Math.abs(r)<=9?function(e){var t=e<0?12:11,r=D(e.toFixed(12));return r.length<=t||(r=e.toPrecision(10)).length<=t?r:e.toExponential(5)}(e):10===r?e.toFixed(10).substr(0,12):function(e){var t=D(e.toFixed(11));return t.length>(e<0?12:11)||"0"===t||"-0"===t?e.toPrecision(6):t}(e),D(function(e){return-1==e.indexOf("E")?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)[Ee]/,"$1E").replace(/(E[+-])(\d)$/,"$10$2")}(t.toUpperCase()))}function F(e,t){switch(typeof e){case"string":return e;case"boolean":return e?"TRUE":"FALSE";case"number":return(0|e)===e?e.toString(10):O(e);case"undefined":return"";case"object":if(null==e)return"";if(e instanceof Date)return K(14,fe(e,t&&t.date1904),t)}throw new Error("unsupported value in General format: "+e)}function E(e,t,r,n){var a,i="",o=0,s=0,l=r.y,c=0;switch(e){case 98:l=r.y+543;case 121:switch(t.length){case 1:case 2:a=l%100,c=2;break;default:a=l%1e4,c=4}break;case 109:switch(t.length){case 1:case 2:a=r.m,c=t.length;break;case 3:return C[r.m-1][1];case 5:return C[r.m-1][0];default:return C[r.m-1][2]}break;case 100:switch(t.length){case 1:case 2:a=r.d,c=t.length;break;case 3:return y[r.q][0];default:return y[r.q][1]}break;case 104:switch(t.length){case 1:case 2:a=1+(r.H+11)%12,c=t.length;break;default:throw"bad hour format: "+t}break;case 72:switch(t.length){case 1:case 2:a=r.H,c=t.length;break;default:throw"bad hour format: "+t}break;case 77:switch(t.length){case 1:case 2:a=r.M,c=t.length;break;default:throw"bad minute format: "+t}break;case 115:if("s"!=t&&"ss"!=t&&".0"!=t&&".00"!=t&&".000"!=t)throw"bad second format: "+t;return 0!==r.u||"s"!=t&&"ss"!=t?(s=n>=2?3===n?1e3:100:1===n?10:1,(o=Math.round(s*(r.S+r.u)))>=60*s&&(o=0),"s"===t?0===o?"0":""+o/s:(i=m(o,2+n),"ss"===t?i.substr(0,2):"."+i.substr(2,t.length-1))):m(r.S,t.length);case 90:switch(t){case"[h]":case"[hh]":a=24*r.D+r.H;break;case"[m]":case"[mm]":a=60*(24*r.D+r.H)+r.M;break;case"[s]":case"[ss]":a=60*(60*(24*r.D+r.H)+r.M)+(0==n?Math.round(r.S+r.u):r.S);break;default:throw"bad abstime format: "+t}c=3===t.length?1:2;break;case 101:a=l,c=1}return c>0?m(a,c):""}function M(e){if(e.length<=3)return e;for(var t=e.length%3,r=e.substr(0,t);t!=e.length;t+=3)r+=(r.length>0?",":"")+e.substr(t,3);return r}var N=/%/g;function I(e,t){var r,n=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(0==t)return"0.0E+0";if(t<0)return"-"+I(e,-t);var a=e.indexOf(".");-1===a&&(a=e.indexOf("E"));var i=Math.floor(Math.log(t)*Math.LOG10E)%a;if(i<0&&(i+=a),-1===(r=(t/Math.pow(10,i)).toPrecision(n+1+(a+i)%a)).indexOf("e")){var o=Math.floor(Math.log(t)*Math.LOG10E);for(-1===r.indexOf(".")?r=r.charAt(0)+"."+r.substr(1)+"E+"+(o-r.length+i):r+="E+"+(o-i);"0."===r.substr(0,2);)r=(r=r.charAt(0)+r.substr(2,a)+"."+r.substr(2+a)).replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");r=r.replace(/\+-/,"-")}r=r.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,(function(e,t,r,n){return t+r+n.substr(0,(a+i)%a)+"."+n.substr(i)+"E"}))}else r=t.toExponential(n);return e.match(/E\+00$/)&&r.match(/e[+-]\d$/)&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),e.match(/E\-/)&&r.match(/e\+/)&&(r=r.replace(/e\+/,"e")),r.replace("e","E")}var P=/# (\?+)( ?)\/( ?)(\d+)/;var R=/^#*0*\.([0#]+)/,L=/\)[^)]*[0#]/,U=/\(###\) ###\\?-####/;function z(e){for(var t,r="",n=0;n!=e.length;++n)switch(t=e.charCodeAt(n)){case 35:break;case 63:r+=" ";break;case 48:r+="0";break;default:r+=String.fromCharCode(t)}return r}function j(e,t){var r=Math.pow(10,t);return""+Math.round(e*r)/r}function B(e,t){var r=e-Math.floor(e),n=Math.pow(10,t);return t<(""+Math.round(r*n)).length?0:Math.round(r*n)}function W(e,t,r){if(40===e.charCodeAt(0)&&!t.match(L)){var n=t.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return r>=0?W("n",n,r):"("+W("n",n,-r)+")"}if(44===t.charCodeAt(t.length-1))return function(e,t,r){for(var n=t.length-1;44===t.charCodeAt(n-1);)--n;return V(e,t.substr(0,n),r/Math.pow(10,3*(t.length-n)))}(e,t,r);if(-1!==t.indexOf("%"))return function(e,t,r){var n=t.replace(N,""),a=t.length-n.length;return V(e,n,r*Math.pow(10,2*a))+ve("%",a)}(e,t,r);if(-1!==t.indexOf("E"))return I(t,r);if(36===t.charCodeAt(0))return"$"+W(e,t.substr(" "==t.charAt(1)?2:1),r);var a,i,o,s,l=Math.abs(r),c=r<0?"-":"";if(t.match(/^00+$/))return c+x(l,t.length);if(t.match(/^[#?]+$/))return"0"===(a=x(r,0))&&(a=""),a.length>t.length?a:z(t.substr(0,t.length-a.length))+a;if(i=t.match(P))return function(e,t,r){var n=parseInt(e[4],10),a=Math.round(t*n),i=Math.floor(a/n),o=a-i*n,s=n;return r+(0===i?"":""+i)+" "+(0===o?ve(" ",e[1].length+1+e[4].length):g(o,e[1].length)+e[2]+"/"+e[3]+m(s,e[4].length))}(i,l,c);if(t.match(/^#+0+$/))return c+x(l,t.length-t.indexOf("0"));if(i=t.match(R))return a=j(r,i[1].length).replace(/^([^\.]+)$/,"$1."+z(i[1])).replace(/\.$/,"."+z(i[1])).replace(/\.(\d*)$/,(function(e,t){return"."+t+ve("0",z(i[1]).length-t.length)})),-1!==t.indexOf("0.")?a:a.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),i=t.match(/^(0*)\.(#*)$/))return c+j(l,i[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,i[1].length?"0.":".");if(i=t.match(/^#{1,3},##0(\.?)$/))return c+M(x(l,0));if(i=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+W(e,t,-r):M(""+(Math.floor(r)+function(e,t){return t<(""+Math.round((e-Math.floor(e))*Math.pow(10,t))).length?1:0}(r,i[1].length)))+"."+m(B(r,i[1].length),i[1].length);if(i=t.match(/^#,#*,#0/))return W(e,t.replace(/^#,#*,/,""),r);if(i=t.match(/^([0#]+)(\\?-([0#]+))+$/))return a=d(W(e,t.replace(/[\\-]/g,""),r)),o=0,d(d(t.replace(/\\/g,"")).replace(/[0#]/g,(function(e){return o-2147483648?""+(e>=0?0|e:e-1|0):""+Math.floor(e)}(r)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,(function(e){return"00,"+(e.length<3?m(0,3-e.length):"")+e}))+"."+m(o,i[1].length);switch(t){case"###,##0.00":return W(e,"#,##0.00",r);case"###,###":case"##,###":case"#,###":var p=M(x(l,0));return"0"!==p?c+p:"";case"###,###.00":return W(e,"###,##0.00",r).replace(/^0\./,".");case"#,###.00":return W(e,"#,##0.00",r).replace(/^0\./,".")}throw new Error("unsupported format |"+t+"|")}function H(e,t){var r,n=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(0==t)return"0.0E+0";if(t<0)return"-"+H(e,-t);var a=e.indexOf(".");-1===a&&(a=e.indexOf("E"));var i=Math.floor(Math.log(t)*Math.LOG10E)%a;if(i<0&&(i+=a),!(r=(t/Math.pow(10,i)).toPrecision(n+1+(a+i)%a)).match(/[Ee]/)){var o=Math.floor(Math.log(t)*Math.LOG10E);-1===r.indexOf(".")?r=r.charAt(0)+"."+r.substr(1)+"E+"+(o-r.length+i):r+="E+"+(o-i),r=r.replace(/\+-/,"-")}r=r.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,(function(e,t,r,n){return t+r+n.substr(0,(a+i)%a)+"."+n.substr(i)+"E"}))}else r=t.toExponential(n);return e.match(/E\+00$/)&&r.match(/e[+-]\d$/)&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),e.match(/E\-/)&&r.match(/e\+/)&&(r=r.replace(/e\+/,"e")),r.replace("e","E")}function X(e,t,r){if(40===e.charCodeAt(0)&&!t.match(L)){var n=t.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return r>=0?X("n",n,r):"("+X("n",n,-r)+")"}if(44===t.charCodeAt(t.length-1))return function(e,t,r){for(var n=t.length-1;44===t.charCodeAt(n-1);)--n;return V(e,t.substr(0,n),r/Math.pow(10,3*(t.length-n)))}(e,t,r);if(-1!==t.indexOf("%"))return function(e,t,r){var n=t.replace(N,""),a=t.length-n.length;return V(e,n,r*Math.pow(10,2*a))+ve("%",a)}(e,t,r);if(-1!==t.indexOf("E"))return H(t,r);if(36===t.charCodeAt(0))return"$"+X(e,t.substr(" "==t.charAt(1)?2:1),r);var a,i,o,s,l=Math.abs(r),c=r<0?"-":"";if(t.match(/^00+$/))return c+m(l,t.length);if(t.match(/^[#?]+$/))return a=""+r,0===r&&(a=""),a.length>t.length?a:z(t.substr(0,t.length-a.length))+a;if(i=t.match(P))return function(e,t,r){return r+(0===t?"":""+t)+ve(" ",e[1].length+2+e[4].length)}(i,l,c);if(t.match(/^#+0+$/))return c+m(l,t.length-t.indexOf("0"));if(i=t.match(R))return a=(a=(""+r).replace(/^([^\.]+)$/,"$1."+z(i[1])).replace(/\.$/,"."+z(i[1]))).replace(/\.(\d*)$/,(function(e,t){return"."+t+ve("0",z(i[1]).length-t.length)})),-1!==t.indexOf("0.")?a:a.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),i=t.match(/^(0*)\.(#*)$/))return c+(""+l).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,i[1].length?"0.":".");if(i=t.match(/^#{1,3},##0(\.?)$/))return c+M(""+l);if(i=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+X(e,t,-r):M(""+r)+"."+ve("0",i[1].length);if(i=t.match(/^#,#*,#0/))return X(e,t.replace(/^#,#*,/,""),r);if(i=t.match(/^([0#]+)(\\?-([0#]+))+$/))return a=d(X(e,t.replace(/[\\-]/g,""),r)),o=0,d(d(t.replace(/\\/g,"")).replace(/[0#]/g,(function(e){return o-1||"\\"==r&&"-"==e.charAt(t+1)&&"0#".indexOf(e.charAt(t+2))>-1););break;case"?":for(;e.charAt(++t)===r;);break;case"*":++t," "!=e.charAt(t)&&"*"!=e.charAt(t)||++t;break;case"(":case")":++t;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(;t-1;);break;default:++t}return!1}var q=/\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;function Y(e,t){if(null==t)return!1;var r=parseFloat(t[2]);switch(t[1]){case"=":if(e==r)return!0;break;case">":if(e>r)return!0;break;case"<":if(e":if(e!=r)return!0;break;case">=":if(e>=r)return!0;break;case"<=":if(e<=r)return!0}return!1}function Z(e,t){var r=function(e){for(var t=[],r=!1,n=0,a=0;n-1&&--n,r.length>4)throw new Error("cannot find right format for |"+r.join("|")+"|");if("number"!=typeof t)return[4,4===r.length||a>-1?r[r.length-1]:"@"];switch("number"!=typeof t||isFinite(t)||(t=0),r.length){case 1:r=a>-1?["General","General","General",r[0]]:[r[0],r[0],r[0],"@"];break;case 2:r=a>-1?[r[0],r[0],r[0],r[1]]:[r[0],r[1],r[0],"@"];break;case 3:r=a>-1?[r[0],r[1],r[0],r[2]]:[r[0],r[1],r[2],"@"]}var i=t>0?r[0]:t<0?r[1]:r[2];if(-1===r[0].indexOf("[")&&-1===r[1].indexOf("["))return[n,i];if(null!=r[0].match(/\[[=<>]/)||null!=r[1].match(/\[[=<>]/)){var o=r[0].match(q),s=r[1].match(q);return Y(t,o)?[n,r[0]]:Y(t,s)?[n,r[1]]:[n,r[null!=o&&null!=s?2:1]]}return[n,i]}function K(e,t,r){null==r&&(r={});var n="";switch(typeof e){case"string":n="m/d/yy"==e&&r.dateNF?r.dateNF:e;break;case"number":null==(n=14==e&&r.dateNF?r.dateNF:(null!=r.table?r.table:S)[e])&&(n=r.table&&r.table[k[e]]||S[k[e]]),null==n&&(n=_[e]||"General")}if(w(n,0))return F(t,r);t instanceof Date&&(t=fe(t,r.date1904));var a=Z(n,t);if(w(a[1]))return F(t,r);if(!0===t)t="TRUE";else if(!1===t)t="FALSE";else{if(""===t||null==t)return"";if(isNaN(t)&&a[1].indexOf("0")>-1)return"#NUM!";if(!isFinite(t)&&a[1].indexOf("0")>-1)return"#DIV/0!"}return function(e,t,r,n){for(var a,i,o,s=[],l="",c=0,f="",h="t",u="H";c=12?e.charAt(c+2):f),m.t="T",u="h",c+=3):"AM/PM"===e.substr(c,5).toUpperCase()?(null!=a&&(m.v=a.H>=12?"PM":"AM"),m.t="T",c+=5,u="h"):"上午/下午"===e.substr(c,5).toUpperCase()?(null!=a&&(m.v=a.H>=12?"下午":"上午"),m.t="T",c+=5,u="h"):(m.t="t",++c),null==a&&"T"===m.t)return"";s[s.length]=m,h=f;break;case"[":for(l=f;"]"!==e.charAt(c++)&&c-1&&(l=(l.match(/\$([^-\[\]]*)/)||[])[1]||"$",J(e)||(s[s.length]={t:"t",v:l}));break;case".":if(null!=a){for(l=f;++c-1;)l+=f;s[s.length]={t:"n",v:l};break;case"?":for(l=f;e.charAt(++c)===f;)l+=f;s[s.length]={t:f,v:l},h=f;break;case"*":++c," "!=e.charAt(c)&&"*"!=e.charAt(c)||++c;break;case"(":case")":s[s.length]={t:1===n?"t":f,v:f},++c;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(l=f;c-1;)l+=e.charAt(c);s[s.length]={t:"D",v:l};break;case" ":s[s.length]={t:f,v:f},++c;break;case"$":s[s.length]={t:"t",v:"$"},++c;break;default:if(-1===",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(f))throw new Error("unrecognized character "+f+" in "+e);s[s.length]={t:"t",v:f},++c}var g,v,b=0,x=0;for(c=s.length-1,h="t";c>=0;--c)switch(s[c].t){case"h":case"H":s[c].t=u,h="h",b<1&&(b=1);break;case"s":(g=s[c].v.match(/\.0+$/))&&(x=Math.max(x,g[0].length-1),b=4),b<3&&(b=3);case"d":case"y":case"e":h=s[c].t;break;case"M":h=s[c].t,b<2&&(b=2);break;case"m":"s"===h&&(s[c].t="M",b<2&&(b=2));break;case"X":break;case"Z":b<1&&s[c].v.match(/[Hh]/)&&(b=1),b<2&&s[c].v.match(/[Mm]/)&&(b=2),b<3&&s[c].v.match(/[Ss]/)&&(b=3)}switch(b){case 0:break;case 1:case 2:case 3:a.u>=.5&&(a.u=0,++a.S),a.S>=60&&(a.S=0,++a.M),a.M>=60&&(a.M=0,++a.H),a.H>=24&&(a.H=0,++a.D,(v=T(a.D)).u=a.u,v.S=a.S,v.M=a.M,v.H=a.H,a=v);break;case 4:switch(x){case 1:a.u=Math.round(10*a.u)/10;break;case 2:a.u=Math.round(100*a.u)/100;break;case 3:a.u=Math.round(1e3*a.u)/1e3}a.u>=1&&(a.u=0,++a.S),a.S>=60&&(a.S=0,++a.M),a.M>=60&&(a.M=0,++a.H),a.H>=24&&(a.H=0,++a.D,(v=T(a.D)).u=a.u,v.S=a.S,v.M=a.M,v.H=a.H,a=v)}var y,C="";for(c=0;c0){40==C.charCodeAt(0)?(S=t<0&&45===C.charCodeAt(0)?-t:t,k=V("n",C,S)):(k=V("n",C,S=t<0&&n>1?-t:t),S<0&&s[0]&&"t"==s[0].t&&(k=k.substr(1),s[0].v="-"+s[0].v)),y=k.length-1;var A=s.length;for(c=0;c-1){A=c;break}var D=s.length;if(A===s.length&&-1===k.indexOf("E")){for(c=s.length-1;c>=0;--c)null!=s[c]&&-1!=="n?".indexOf(s[c].t)&&(y>=s[c].v.length-1?(y-=s[c].v.length,s[c].v=k.substr(y+1,s[c].v.length)):y<0?s[c].v="":(s[c].v=k.substr(0,y+1),y=-1),s[c].t="t",D=c);y>=0&&D=0;--c)if(null!=s[c]&&-1!=="n?".indexOf(s[c].t)){for(i=s[c].v.indexOf(".")>-1&&c===A?s[c].v.indexOf(".")-1:s[c].v.length-1,_=s[c].v.substr(i+1);i>=0;--i)y>=0&&("0"===s[c].v.charAt(i)||"#"===s[c].v.charAt(i))&&(_=k.charAt(y--)+_);s[c].v=_,s[c].t="t",D=c}for(y>=0&&D-1&&c===A?s[c].v.indexOf(".")+1:0,_=s[c].v.substr(0,i);i-1&&(S=n>1&&t<0&&c>0&&"-"===s[c-1].v?-t:t,s[c].v=V(s[c].t,s[c].v,S),s[c].t="t");var O="";for(c=0;c!==s.length;++c)null!=s[c]&&(O+=s[c].v);return O}(a[1],t,r,a[0])}function Q(e,t){if("number"!=typeof t){t=+t||-1;for(var r=0;r<392;++r)if(null!=S[r]){if(S[r]==e){t=r;break}}else t<0&&(t=r);t<0&&(t=391)}return S[t]=e,t}var ee={"d.m":"d\\.m"};var te=function(){var e={};e.version="1.2.0";var t=function(){for(var e=0,t=new Array(256),r=0;256!=r;++r)e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=r)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1,t[r]=e;return"undefined"!=typeof Int32Array?new Int32Array(t):t}();var r=function(e){var t=0,r=0,n=0,a="undefined"!=typeof Int32Array?new Int32Array(4096):new Array(4096);for(n=0;256!=n;++n)a[n]=e[n];for(n=0;256!=n;++n)for(r=e[n],t=256+n;t<4096;t+=256)r=a[t]=r>>>8^e[255&r];var i=[];for(n=1;16!=n;++n)i[n-1]="undefined"!=typeof Int32Array&&"function"==typeof a.subarray?a.subarray(256*n,256*n+256):a.slice(256*n,256*n+256);return i}(t),n=r[0],a=r[1],i=r[2],o=r[3],s=r[4],l=r[5],c=r[6],f=r[7],h=r[8],u=r[9],p=r[10],d=r[11],m=r[12],g=r[13],v=r[14];return e.table=t,e.bstr=function(e,r){for(var n=~r,a=0,i=e.length;a>>8^t[255&(n^e.charCodeAt(a++))];return~n},e.buf=function(e,r){for(var b=~r,x=e.length-15,w=0;w>8&255]^m[e[w++]^b>>16&255]^d[e[w++]^b>>>24]^p[e[w++]]^u[e[w++]]^h[e[w++]]^f[e[w++]]^c[e[w++]]^l[e[w++]]^s[e[w++]]^o[e[w++]]^i[e[w++]]^a[e[w++]]^n[e[w++]]^t[e[w++]];for(x+=15;w>>8^t[255&(b^e[w++])];return~b},e.str=function(e,r){for(var n=~r,a=0,i=e.length,o=0,s=0;a>>8^t[255&(n^o)]:o<2048?n=(n=n>>>8^t[255&(n^(192|o>>6&31))])>>>8^t[255&(n^(128|63&o))]:o>=55296&&o<57344?(o=64+(1023&o),s=1023&e.charCodeAt(a++),n=(n=(n=(n=n>>>8^t[255&(n^(240|o>>8&7))])>>>8^t[255&(n^(128|o>>2&63))])>>>8^t[255&(n^(128|s>>6&15|(3&o)<<4))])>>>8^t[255&(n^(128|63&s))]):n=(n=(n=n>>>8^t[255&(n^(224|o>>12&15))])>>>8^t[255&(n^(128|o>>6&63))])>>>8^t[255&(n^(128|63&o))];return~n},e}(),re=function(){var e,t={};function o(e){if("/"==e.charAt(e.length-1))return-1===e.slice(0,-1).indexOf("/")?e:o(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(0,t+1)}function f(e){if("/"==e.charAt(e.length-1))return f(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(t+1)}function d(e,t){"string"==typeof t&&(t=new Date(t));var r=t.getHours();r=(r=r<<6|t.getMinutes())<<5|t.getSeconds()>>>1,e.write_shift(2,r);var n=t.getFullYear()-1980;n=(n=n<<4|t.getMonth()+1)<<5|t.getDate(),e.write_shift(2,n)}function m(e){Tt(e,0);for(var t={},r=0;e.l<=e.length-4;){var n=e.read_shift(2),a=e.read_shift(2),i=e.l+a,o={};switch(n){case 21589:1&(r=e.read_shift(1))&&(o.mtime=e.read_shift(4)),a>5&&(2&r&&(o.atime=e.read_shift(4)),4&r&&(o.ctime=e.read_shift(4))),o.mtime&&(o.mt=new Date(1e3*o.mtime));break;case 1:var s=e.read_shift(4),l=e.read_shift(4);o.usz=l*Math.pow(2,32)+s,s=e.read_shift(4),l=e.read_shift(4),o.csz=l*Math.pow(2,32)+s}e.l=i,t[n]=o}return t}function g(){return e||(e=undefined)}function v(e,t){if(80==e[0]&&75==e[1])return ge(e,t);if(109==(32|e[0])&&105==(32|e[1]))return function(e,t){if("mime-version:"!=M(e.slice(0,13)).toLowerCase())throw new Error("Unsupported MAD header");var r=t&&t.root||"",n=(a&&Buffer.isBuffer(e)?e.toString("binary"):M(e)).split("\r\n"),i=0,o="";for(i=0;i0&&(r=(r=r.slice(0,r.length-1)).slice(0,r.lastIndexOf("/")+1),o.slice(0,r.length)!=r););var s=(n[1]||"").match(/boundary="(.*?)"/);if(!s)throw new Error("MAD cannot find boundary");var l="--"+(s[1]||""),c=[],f=[],h={FileIndex:c,FullPaths:f};C(h);var u,p=0;for(i=0;i=a&&(u-=a),!o[u]){l=[];var d=[];for(h=u;h>=0;){d[h]=!0,o[h]=!0,s[s.length]=h,l.push(e[h]);var m=r[Math.floor(4*h/n)];if(n<4+(p=4*h&c))throw new Error("FAT boundary crossed: "+h+" 4 "+n);if(!e[m])break;if(d[h=xt(e[m],p)])break}i[u]={nodes:s,data:Ye([l])}}return i}(v,o,f,c);o0&&s!==T&&(S[s].name="!MiniFAT"),S[f[0]].name="!FAT",S.fat_addrs=f,S.ssz=c;var k=[],_=[],A=[];!function(e,t,r,n,a,i,o,s){for(var l,c=0,f=n.length?2:0,h=t[e].data,u=0,p=0;u0&&c!==T&&(t[c].name="!StreamData")):m.size>=4096?(m.storage="fat",void 0===t[m.start]&&(t[m.start]=w(r,m.start,t.fat_addrs,t.ssz)),t[m.start].name=m.name,m.content=t[m.start].data.slice(0,m.size)):(m.storage="minifat",m.size<0?m.size=0:c!==T&&m.start!==T&&t[c]&&(m.content=b(m,t[c].data,(t[s]||{}).data))),m.content&&Tt(m.content,0),i[l]=m,o.push(m)}}(o,S,v,k,n,{},_,s),function(e,t,r){for(var n=0,a=0,i=0,o=0,s=0,l=r.length,c=[],f=[];n0&&o>=0;)i.push(t.slice(o*A,o*A+A)),a-=A,o=xt(r,4*o);return 0===i.length?Dt(0):h(i).slice(0,e.size)}function x(e,t,r,n,a){var i=T;if(e===T){if(0!==t)throw new Error("DIFAT chain shorter than expected")}else if(-1!==e){var o=r[e],s=(n>>>2)-1;if(!o)return;for(var l=0;l=1&&x(xt(o,n-4),t-1,r,n,a)}}function w(e,t,r,n,a){var i=[],o=[];a||(a=[]);var s=n-1,l=0,c=0;for(l=t;l>=0;){a[l]=!0,i[i.length]=l,o.push(e[l]);var f=r[Math.floor(4*l/n)];if(n<4+(c=4*l&s))throw new Error("FAT boundary crossed: "+l+" 4 "+n);if(!e[f])break;l=xt(e[f],c)}return{nodes:i,data:Ye([o])}}function y(e,t){return new Date(1e3*(bt(e,t+4)/1e7*Math.pow(2,32)+bt(e,t)/1e7-11644473600))}function C(e,t){var r=t||{},n=r.root||"Root Entry";if(e.FullPaths||(e.FullPaths=[]),e.FileIndex||(e.FileIndex=[]),e.FullPaths.length!==e.FileIndex.length)throw new Error("inconsistent CFB structure");0===e.FullPaths.length&&(e.FullPaths[0]=n+"/",e.FileIndex[0]={name:n,type:5}),r.CLSID&&(e.FileIndex[0].clsid=r.CLSID),function(e){var t="Sh33tJ5";if(re.find(e,"/"+t))return;var r=Dt(4);r[0]=55,r[1]=r[3]=50,r[2]=54,e.FileIndex.push({name:t,type:2,content:r,size:4,L:69,R:69,C:69}),e.FullPaths.push(e.FullPaths[0]+t),S(e)}(e)}function S(e,t){C(e);for(var r=!1,n=!1,a=e.FullPaths.length-1;a>=0;--a){var i=e.FileIndex[a];switch(i.type){case 0:n?r=!0:(e.FileIndex.pop(),e.FullPaths.pop());break;case 1:case 2:case 5:n=!0,isNaN(i.R*i.L*i.C)&&(r=!0),i.R>-1&&i.L>-1&&i.R==i.L&&(r=!0);break;default:r=!0}}if(r||t){var s=new Date(1987,1,19),l=0,c=Object.create?Object.create(null):{},h=[];for(a=0;a1?1:-1,p.size=0,p.type=5;else if("/"==d.slice(-1)){for(l=a+1;l=h.length?-1:l,l=a+1;l=h.length?-1:l,p.type=1}else o(e.FullPaths[a+1]||"")==o(d)&&(p.R=a+1),p.type=2}}}function k(e,t){var r=t||{};if("mad"==r.fileType)return function(e,t){for(var r=t||{},n=r.boundary||"SheetJS",i=["MIME-Version: 1.0",'Content-Type: multipart/related; boundary="'+(n="------="+n).slice(2)+'"',"","",""],o=e.FullPaths[0],s=o,l=e.FileIndex[0],c=1;c=32&&d<128&&++u;var g=u>=4*p/5;i.push(n),i.push("Content-Location: "+(r.root||"file:///C:/SheetJS/")+s),i.push("Content-Transfer-Encoding: "+(g?"quoted-printable":"base64")),i.push("Content-Type: "+xe(l,s)),i.push(""),i.push(g?ye(h):we(h))}return i.push(n+"--\r\n"),i.join("\r\n")}(e,r);if(S(e),"zip"===r.fileType)return function(e,t){var r=t||{},n=[],a=[],i=Dt(1),o=r.compression?8:0,s=0,l=0,f=0,u=0,p=0,m=e.FullPaths[0],g=m,v=e.FileIndex[0],b=[],x=0;for(l=1;l0&&(i<4096?t+=i+63>>6:r+=i+511>>9)}}for(var o=e.FullPaths.length+3>>2,s=t+127>>7,l=(t+7>>3)+r+o+s,c=l+127>>7,f=c<=109?0:Math.ceil((c-109)/127);l+c+f+127>>7>c;)f=++c<=109?0:Math.ceil((c-109)/127);var h=[1,f,c,s,o,r,t,0];return e.FileIndex[0].size=t<<6,h[7]=(e.FileIndex[0].start=h[0]+h[1]+h[2]+h[3]+h[4]+h[5])+(h[6]+7>>3),h}(e),i=Dt(n[7]<<9),o=0,s=0;for(o=0;o<8;++o)i.write_shift(1,O[o]);for(o=0;o<8;++o)i.write_shift(2,0);for(i.write_shift(2,62),i.write_shift(2,3),i.write_shift(2,65534),i.write_shift(2,9),i.write_shift(2,6),o=0;o<3;++o)i.write_shift(2,0);for(i.write_shift(4,0),i.write_shift(4,n[2]),i.write_shift(4,n[0]+n[1]+n[2]+n[3]-1),i.write_shift(4,0),i.write_shift(4,4096),i.write_shift(4,n[3]?n[0]+n[1]+n[2]-1:T),i.write_shift(4,n[3]),i.write_shift(-4,n[1]?n[0]-1:T),i.write_shift(4,n[1]),o=0;o<109;++o)i.write_shift(-4,o>9)));for(l(n[6]+7>>3);511&i.l;)i.write_shift(-4,E.ENDOFCHAIN);for(s=o=0,f=0;f=4096||(p.start=s,l(u+63>>6)));for(;511&i.l;)i.write_shift(-4,E.ENDOFCHAIN);for(o=0;o31&&(console.error("Name "+g+" will be truncated to "+g.slice(0,31)),g=g.slice(0,31)),u=2*(g.length+1),i.write_shift(64,g,"utf16le"),i.write_shift(2,u),i.write_shift(1,p.type),i.write_shift(1,p.color),i.write_shift(-4,p.L),i.write_shift(-4,p.R),i.write_shift(-4,p.C),p.clsid)i.write_shift(16,p.clsid,"hex");else for(f=0;f<4;++f)i.write_shift(4,0);i.write_shift(4,p.state||0),i.write_shift(4,0),i.write_shift(4,0),i.write_shift(4,0),i.write_shift(4,0),i.write_shift(4,p.start),i.write_shift(4,p.size),i.write_shift(4,0)}else{for(f=0;f<17;++f)i.write_shift(4,0);for(f=0;f<3;++f)i.write_shift(4,-1);for(f=0;f<12;++f)i.write_shift(4,0)}}for(o=1;o=4096)if(i.l=p.start+1<<9,a&&Buffer.isBuffer(p.content))p.content.copy(i,i.l,0,p.size),i.l+=p.size+511&-512;else{for(f=0;f0&&p.size<4096)if(a&&Buffer.isBuffer(p.content))p.content.copy(i,i.l,0,p.size),i.l+=p.size+63&-64;else{for(f=0;f>16|U>>8|U));function B(e,t){var r=z[255&e];return t<=8?r>>>8-t:(r=r<<8|z[e>>8&255],t<=16?r>>>16-t:(r=r<<8|z[e>>16&255])>>>24-t)}function W(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=6?0:e[n+1]<<8))>>>r&3}function H(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=5?0:e[n+1]<<8))>>>r&7}function X(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=3?0:e[n+1]<<8))>>>r&31}function V(e,t){var r=7&t,n=t>>>3;return(e[n]|(r<=1?0:e[n+1]<<8))>>>r&127}function G(e,t,r){var n=7&t,a=t>>>3,i=(1<>>n;return r<8-n?o&i:(o|=e[a+1]<<8-n,r<16-n?o&i:(o|=e[a+2]<<16-n,r<24-n?o&i:(o|=e[a+3]<<24-n)&i))}function J(e,t,r){var n=7&t,a=t>>>3;return n<=5?e[a]|=(7&r)<>8-n),t+3}function q(e,t,r){return r=(1&r)<<(7&t),e[t>>>3]|=r,t+1}function Y(e,t,r){var n=t>>>3;return r<<=7&t,e[n]|=255&r,r>>>=8,e[n+1]=r,t+8}function Z(e,t,r){var n=t>>>3;return r<<=7&t,e[n]|=255&r,r>>>=8,e[n+1]=255&r,e[n+2]=r>>>8,t+16}function K(e,t){var r=e.length,n=2*r>t?2*r:t+5,i=0;if(r>=t)return e;if(a){var o=l(n);if(e.copy)e.copy(o);else for(;i>n-h,o=(1<=0;--o)t[s|o<0;)t[t.l++]=e[r++]}return t.l}(t,r):function(t,r){for(var a=0,i=0,o=$?new Uint16Array(32768):[];i0;)r[r.l++]=t[i++];a=8*r.l}else{a=J(r,a,+!(i+s!=t.length)+2);for(var l=0;s-- >0;){var c=t[i],f=-1,h=0;if((f=o[l=32767&(l<<5^c)])&&((f|=-32768&i)>i&&(f-=32768),f2){(c=n[h])<=22?a=Y(r,a,z[c+1]>>1)-1:(Y(r,a,3),Y(r,a+=5,z[c-23]>>5),a+=3);var u=c<8?0:c-4>>2;u>0&&(Z(r,a,h-P[c]),a+=u),c=e[i-f],a=Y(r,a,z[c]>>3),a-=3;var p=c<4?0:c-2>>1;p>0&&(Z(r,a,i-f-R[c]),a+=p);for(var d=0;d>>3;return(e[n]|(r<=4?0:e[n+1]<<8))>>>r&15}(e,t+=5)+4;t+=4;for(var i=0,o=$?new Uint8Array(19):Q(19),s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],l=1,c=$?new Uint8Array(8):Q(8),f=$?new Uint8Array(8):Q(8),h=o.length,u=0;u>8-d;for(var m=(1<<7-d)-1;m>=0;--m)fe[p|m<>>=3){case 16:for(i=3+W(e,t),t+=2,p=g[g.length-1];i-- >0;)g.push(p);break;case 17:for(i=3+H(e,t),t+=3;i-- >0;)g.push(0);break;case 18:for(i=11+V(e,t),t+=7;i-- >0;)g.push(0);break;default:g.push(p),l>>0,c=0,f=0;!(1&n);)if(n=H(e,r),r+=3,n>>>1!=0)for(n>>1==1?(c=9,f=5):(r=pe(e,r),c=he,f=ue);;){!t&&o>>1==1?ne[h]:le[h];if(r+=15&u,(u>>>=4)>>>8&255){if(256==u)break;var p=(u-=257)<8?0:u-4>>2;p>5&&(p=0);var d=i+P[u];p>0&&(d+=G(e,r,p),r+=p),h=G(e,r,f),r+=15&(u=n>>>1==1?ae[h]:ce[h]);var m=(u>>>=4)<4?0:u-2>>1,g=R[u];for(m>0&&(g+=G(e,r,m),r+=m),!t&&o>>3]|e[1+(r>>>3)]<<8;if(r+=32,v>0)for(!t&&o0;)a[i++]=e[r>>>3],r+=8}return t?[a,r+7>>>3]:[a.slice(0,i),r+7>>>3]}(e.slice(e.l||0),t);return e.l+=r[1],r[0]}function me(e,t){if(!e)throw new Error(t);"undefined"!=typeof console&&console.error(t)}function ge(e,t){var r=e;Tt(r,0);var n={FileIndex:[],FullPaths:[]};C(n,{root:t.root});for(var a=r.length-4;(80!=r[a]||75!=r[a+1]||5!=r[a+2]||6!=r[a+3])&&a>=0;)--a;r.l=a+4,r.l+=4;var i=r.read_shift(2);r.l+=6;var o=r.read_shift(4);for(r.l=o,a=0;a>>=5);r>>>=4,n.setMilliseconds(0),n.setFullYear(r+1980),n.setMonth(i-1),n.setDate(a);var o=31&t,s=63&(t>>>=5);return t>>>=6,n.setHours(t),n.setMinutes(s),n.setSeconds(o<<1),n}(e);if(8257&i)throw new Error("Unsupported ZIP encryption");e.read_shift(4);for(var l=e.read_shift(4),c=e.read_shift(4),f=e.read_shift(2),h=e.read_shift(2),u="",p=0;p>2,s=(3&n)<<4|(a=e[f++])>>4,l=(15&a)<<2|(i=e[f++])>>6,c=63&i,isNaN(a)?l=c=64:isNaN(i)&&(c=64),r+=t.charAt(o)+t.charAt(s)+t.charAt(l)+t.charAt(c);return r}(new Uint8Array(ne(a)));return chrome.downloads.download({url:l,filename:e,saveAs:!0})}}if("undefined"!=typeof $&&"undefined"!=typeof File&&"undefined"!=typeof Folder)try{var c=File(e);return c.open("w"),c.encoding="binary",Array.isArray(r)&&(r=function(e){if(Array.isArray(e))return e.map((function(e){return String.fromCharCode(e)})).join("");for(var t=[],r=0;r=60&&e<61)return e;var t=new Date;return t.setTime(24*(e>60?e:e+1)*60*60*1e3+se),t}var ue=/^(\d+):(\d+)(:\d+)?(\.\d+)?$/,pe=/^(\d+)-(\d+)-(\d+)$/,de=/^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)?(\.\d+)?$/;function me(e,t){if(e instanceof Date)return e;var r=e.match(ue);return r?new Date((t?ce:le)+1e3*(60*(60*parseInt(r[1],10)+parseInt(r[2],10))+(r[3]?parseInt(r[3].slice(1),10):0))+(r[4]?parseInt((r[4]+"000").slice(1,4),10):0)):(r=e.match(pe))?new Date(Date.UTC(+r[1],+r[2]-1,+r[3],0,0,0,0)):(r=e.match(de))?new Date(Date.UTC(+r[1],+r[2]-1,+r[3],+r[4],+r[5],r[6]&&parseInt(r[6].slice(1),10)||0,r[7]&&parseInt((r[7]+"0000").slice(1,4),10)||0)):new Date(e)}function ge(e){if("undefined"!=typeof JSON&&!Array.isArray(e))return JSON.parse(JSON.stringify(e));if("object"!=typeof e||null==e)return e;if(e instanceof Date)return new Date(e.getTime());var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=ge(e[r]));return t}function ve(e,t){for(var r="";r.length3&&-1==Se.indexOf(t))return i}else if(t.replace(/[ap]m?/,"").match(/[a-z]/))return i;return o<0||o>8099||e.match(/[^-0-9:,\/\\\ ]/)?i:a}function _e(e){return new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()))}function Ae(e,t,r){if(e.FullPaths){var n;if(Array.isArray(r)&&"string"==typeof r[0]&&(r=r.join("")),"string"==typeof r)return n=a?i(r):function(e){for(var t=[],r=0,n=e.length+250,a=s(e.length+255),i=0;i>6&31,a[r++]=128|63&o;else if(o>=55296&&o<57344){o=64+(1023&o);var l=1023&e.charCodeAt(++i);a[r++]=240|o>>8&7,a[r++]=128|o>>2&63,a[r++]=128|l>>6&15|(3&o)<<4,a[r++]=128|63&l}else a[r++]=224|o>>12&15,a[r++]=128|o>>6&63,a[r++]=128|63&o;r>n&&(t.push(a.slice(0,r)),r=0,a=s(65535),n=65530)}return t.push(a.slice(0,r)),h(t)}(r),re.utils.cfb_add(e,t,n);re.utils.cfb_add(e,t,r)}else e.file(t,r)}var Te='\r\n',De=oe({""":'"',"'":"'",">":">","<":"<","&":"&"}),Oe=/[&<>'"]/g,Fe=/[\u0000-\u0008\u000b-\u001f\uFFFE-\uFFFF]/g;function Ee(e){return(e+"").replace(Oe,(function(e){return De[e]})).replace(Fe,(function(e){return"_x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+"_"}))}var Me=/[\u0000-\u001f]/g;function Ne(e){return(e+"").replace(Oe,(function(e){return De[e]})).replace(/\n/g,"
").replace(Me,(function(e){return"&#x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+";"}))}function Ie(e){for(var t="",r=0,n=0,a=0,i=0,o=0,s=0;r191&&n<224?(o=(31&n)<<6,o|=63&a,t+=String.fromCharCode(o)):(i=e.charCodeAt(r++),n<240?t+=String.fromCharCode((15&n)<<12|(63&a)<<6|63&i):(s=((7&n)<<18|(63&a)<<12|(63&i)<<6|63&(o=e.charCodeAt(r++)))-65536,t+=String.fromCharCode(55296+(s>>>10&1023)),t+=String.fromCharCode(56320+(1023&s)))));return t}function Pe(e){var t,r,n,a=s(2*e.length),i=1,o=0,l=0;for(r=0;r>>10&1023),t=56320+(1023&t)),0!==l&&(a[o++]=255&l,a[o++]=l>>>8,l=0),a[o++]=t%256,a[o++]=t>>>8;return a.slice(0,o).toString("ucs2")}function Re(e){return i(e,"binary").toString("utf8")}var Le="foo bar baz☃🍣",Ue=a&&(Re(Le)==Ie(Le)&&Re||Pe(Le)==Ie(Le)&&Pe)||Ie,$e=a?function(e){return i(e,"utf8").toString("binary")}:function(e){for(var t=[],r=0,n=0,a=0;r>6))),t.push(String.fromCharCode(128+(63&n)));break;case n>=55296&&n<57344:n-=55296,a=e.charCodeAt(r++)-56320+(n<<10),t.push(String.fromCharCode(240+(a>>18&7))),t.push(String.fromCharCode(144+(a>>12&63))),t.push(String.fromCharCode(128+(a>>6&63))),t.push(String.fromCharCode(128+(63&a)));break;default:t.push(String.fromCharCode(224+(n>>12))),t.push(String.fromCharCode(128+(n>>6&63))),t.push(String.fromCharCode(128+(63&n)))}return t.join("")},ze=function(){var e=[["nbsp"," "],["middot","·"],["quot",'"'],["apos","'"],["gt",">"],["lt","<"],["amp","&"]].map((function(e){return[new RegExp("&"+e[0]+";","ig"),e[1]]}));return function(t){for(var r=t.replace(/^[\t\n\r ]+/,"").replace(/(^|[^\t\n\r ])[\t\n\r ]+$/,"$1").replace(/>\s+/g,">").replace(/\b\s+/g,"\n").replace(/<[^<>]*>/g,""),n=0;n"+t+""}function We(e){return ie(e).map((function(t){return" "+t+'="'+e[t]+'"'})).join("")}function He(e,t,r){return"<"+e+(null!=r?We(r):"")+(null!=t?(t.match(je)?' xml:space="preserve"':"")+">"+t+""}function Xe(e,t){try{return e.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}return""}var Ve={CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",CT:"http://schemas.openxmlformats.org/package/2006/content-types",RELS:"http://schemas.openxmlformats.org/package/2006/relationships",TCMNT:"http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments",dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"},Ge=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"],Je={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"};var qe=function(e){for(var t=[],r=0;r0&&Buffer.isBuffer(e[0][0])?Buffer.concat(e[0].map((function(e){return Buffer.isBuffer(e)?e:i(e)}))):qe(e)}:qe,Ze=function(e,t,r){for(var n=[],a=t;a0?rt(e,t+4,t+4+r-1):""},at=nt,it=function(e,t){var r=bt(e,t);return r>0?rt(e,t+4,t+4+r-1):""},ot=it,st=function(e,t){var r=2*bt(e,t);return r>0?rt(e,t+4,t+4+r-1):""},lt=st,ct=function(e,t){var r=bt(e,t);return r>0?Ke(e,t+4,t+4+r):""},ft=ct,ht=function(e,t){var r=bt(e,t);return r>0?rt(e,t+4,t+4+r):""},ut=ht,pt=function(e,t){return function(e,t){for(var r=1-2*(e[t+7]>>>7),n=((127&e[t+7])<<4)+(e[t+6]>>>4&15),a=15&e[t+6],i=5;i>=0;--i)a=256*a+e[t+i];return 2047==n?0==a?r*(1/0):NaN:(0==n?n=-1022:(n-=1023,a+=Math.pow(2,52)),r*Math.pow(2,n-52)*a)}(e,t)},dt=pt;a&&(at=function(e,t){if(!Buffer.isBuffer(e))return nt(e,t);var r=e.readUInt32LE(t);return r>0?e.toString("utf8",t+4,t+4+r-1):""},ot=function(e,t){if(!Buffer.isBuffer(e))return it(e,t);var r=e.readUInt32LE(t);return r>0?e.toString("utf8",t+4,t+4+r-1):""},lt=function(e,t){if(!Buffer.isBuffer(e)||!o)return st(e,t);var r=2*e.readUInt32LE(t);return e.toString("utf16le",t+4,t+4+r-1)},ft=function(e,t){if(!Buffer.isBuffer(e)||!o)return ct(e,t);var r=e.readUInt32LE(t);return e.toString("utf16le",t+4,t+4+r)},ut=function(e,t){if(!Buffer.isBuffer(e))return ht(e,t);var r=e.readUInt32LE(t);return e.toString("utf8",t+4,t+4+r)},dt=function(e,t){return Buffer.isBuffer(e)?e.readDoubleLE(t):pt(e,t)});var mt=function(e,t){return e[t]},gt=function(e,t){return 256*e[t+1]+e[t]},vt=function(e,t){var r=256*e[t+1]+e[t];return r<32768?r:-1*(65535-r+1)},bt=function(e,t){return e[t+3]*(1<<24)+(e[t+2]<<16)+(e[t+1]<<8)+e[t]},xt=function(e,t){return e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t]},wt=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};function yt(t,r){var n,i,s,l,c,f,h="",u=[];switch(r){case"dbcs":if(f=this.l,a&&Buffer.isBuffer(this)&&o)h=this.slice(this.l,this.l+2*t).toString("utf16le");else for(c=0;c0?xt:wt)(this,this.l),this.l+=4,n);case 8:case-8:if("f"===r)return i=8==t?dt(this,this.l):dt([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]],0),this.l+=8,i;t=8;case 16:h=et(this,this.l,t)}}return this.l+=t,h}var Ct=function(e,t,r){e[r]=255&t,e[r+1]=t>>>8&255,e[r+2]=t>>>16&255,e[r+3]=t>>>24&255},St=function(e,t,r){e[r]=255&t,e[r+1]=t>>8&255,e[r+2]=t>>16&255,e[r+3]=t>>24&255},kt=function(e,t,r){e[r]=255&t,e[r+1]=t>>>8&255};function _t(e,t,r){var n=0,a=0;if("dbcs"===r){for(a=0;a!=t.length;++a)kt(this,t.charCodeAt(a),this.l+2*a);n=2*t.length}else if("sbcs"===r||"cpstr"==r){for(t=t.replace(/[^\x00-\x7F]/g,"_"),a=0;a!=t.length;++a)this[this.l+a]=255&t.charCodeAt(a);n=t.length}else{if("hex"===r){for(;a>8}for(;this.l>>=8,this[this.l+1]=255&t;break;case 3:n=3,this[this.l]=255&t,t>>>=8,this[this.l+1]=255&t,t>>>=8,this[this.l+2]=255&t;break;case 4:n=4,Ct(this,t,this.l);break;case 8:if(n=8,"f"===r){!function(e,t,r){var n=(t<0||1/t==-1/0?1:0)<<7,a=0,i=0,o=n?-t:t;isFinite(o)?0==o?a=i=0:(a=Math.floor(Math.log(o)/Math.LN2),i=o*Math.pow(2,52-a),a<=-1023&&(!isFinite(i)||i>4|n}(this,t,this.l);break}case 16:break;case-4:n=4,St(this,t,this.l)}}return this.l+=n,this}function At(e,t){var r=et(this,this.l,e.length>>1);if(r!==e)throw new Error(t+"Expected "+e+" saw "+r);this.l+=e.length>>1}function Tt(e,t){e.l=t,e.read_shift=yt,e.chk=At,e.write_shift=_t}function Dt(e){var t=s(e);return Tt(t,0),t}function Ot(e){return""+(e+1)}function Ft(e){if(e<0)throw new Error("invalid column "+e);var t="";for(++e;e;e=Math.floor((e-1)/26))t=String.fromCharCode((e-1)%26+65)+t;return t}function Et(e){for(var t=0,r=0,n=0;n=48&&a<=57?t=10*t+(a-48):a>=65&&a<=90&&(r=26*r+(a-64))}return{c:r-1,r:t-1}}function Mt(e){for(var t=e.c+1,r="";t;t=(t-1)/26|0)r=String.fromCharCode((t-1)%26+65)+r;return r+(e.r+1)}function Nt(e){var t=e.indexOf(":");return-1==t?{s:Et(e),e:Et(e)}:{s:Et(e.slice(0,t)),e:Et(e.slice(t+1))}}function It(e,t){return void 0===t||"number"==typeof t?It(e.s,e.e):("string"!=typeof e&&(e=Mt(e)),"string"!=typeof t&&(t=Mt(t)),e==t?e:e+":"+t)}function Pt(e){var t=Nt(e);return"$"+Ft(t.s.c)+"$"+Ot(t.s.r)+":$"+Ft(t.e.c)+"$"+Ot(t.e.r)}function Rt(e,t){if(!(e||t&&t.biff<=5&&t.biff>=2))throw new Error("empty sheet name");return/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(e)?"'"+e.replace(/'/g,"''")+"'":e}function Lt(e){var t={s:{c:0,r:0},e:{c:0,r:0}},r=0,n=0,a=0,i=e.length;for(r=0;n26);++n)r=26*r+a;for(t.s.c=--r,r=0;n9);++n)r=10*r+a;if(t.s.r=--r,n===i||10!=a)return t.e.c=t.s.c,t.e.r=t.s.r,t;for(++n,r=0;n!=i&&!((a=e.charCodeAt(n)-64)<1||a>26);++n)r=26*r+a;for(t.e.c=--r,r=0;n!=i&&!((a=e.charCodeAt(n)-48)<0||a>9);++n)r=10*r+a;return t.e.r=--r,t}function Ut(e,t){var r="d"==e.t&&t instanceof Date;if(null!=e.z)try{return e.w=K(e.z,r?fe(t):t)}catch(e){}try{return e.w=K((e.XF||{}).numFmtId||(r?14:0),r?fe(t):t)}catch(e){return""+t}}function $t(e,t,r){return null==e||null==e.t||"z"==e.t?"":void 0!==e.w?e.w:("d"==e.t&&!e.z&&r&&r.dateNF&&(e.z=r.dateNF),"e"==e.t?jt[e.v]||e.v:Ut(e,null==t?e.v:t))}function zt(e,t,r){var n=r||{},a=e?null!=e["!data"]:n.dense,i=e||(a?{"!data":[]}:{});a&&!i["!data"]&&(i["!data"]=[]);var o=0,s=0;if(i&&null!=n.origin)if("number"==typeof n.origin)o=n.origin;else{var l="string"==typeof n.origin?Et(n.origin):n.origin;o=l.r,s=l.c}var c={s:{c:1e7,r:1e7},e:{c:0,r:0}};if(i["!ref"]){var f=Lt(i["!ref"]);c.s.c=f.s.c,c.s.r=f.s.r,c.e.c=Math.max(c.e.c,f.e.c),c.e.r=Math.max(c.e.r,f.e.r),-1==o&&(c.e.r=o=i["!ref"]?f.e.r+1:0)}else c.s.c=c.e.c=c.s.r=c.e.r=0;for(var h=[],u=!1,p=0;p!=t.length;++p)if(t[p]){if(!Array.isArray(t[p]))throw new Error("aoa_to_sheet expects an array of arrays");var d=o+p;a&&(i["!data"][d]||(i["!data"][d]=[]),h=i["!data"][d]);for(var m=t[p],g=0;g!=m.length;++g)if(void 0!==m[g]){var v={v:m[g],t:""},b=s+g;if(c.s.r>d&&(c.s.r=d),c.s.c>b&&(c.s.c=b),c.e.r0&&(n=e[r][0],i[i.length]=He("Override",null,{PartName:("/"==n[0]?"":"/")+n,ContentType:Ht[r][t.bookType]||Ht[r].xlsx}))},s=function(r){(e[r]||[]).forEach((function(e){i[i.length]=He("Override",null,{PartName:("/"==e[0]?"":"/")+e,ContentType:Ht[r][t.bookType]||Ht[r].xlsx})}))},l=function(t){(e[t]||[]).forEach((function(e){i[i.length]=He("Override",null,{PartName:("/"==e[0]?"":"/")+e,ContentType:a[t][0]})}))};return o("workbooks"),s("sheets"),s("charts"),l("themes"),["strs","styles"].forEach(o),["coreprops","extprops","custprops"].forEach(l),l("vba"),l("comments"),l("threadedcomments"),l("drawings"),s("metadata"),l("people"),!r&&i.length>2&&(i[i.length]="",i[1]=i[1].replace("/>",">")),i.join("")}var Vt={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",XPATH:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",XMISS:"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",XLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink",CXML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml",CXMLP:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",CMNT:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",SST:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",STY:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",THEME:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",CHART:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",CHARTEX:"http://schemas.microsoft.com/office/2014/relationships/chartEx",CS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet",WS:["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"],DS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet",MS:"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet",IMG:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",DRAW:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",XLMETA:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",TCMNT:"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment",PEOPLE:"http://schemas.microsoft.com/office/2017/10/relationships/person",CONN:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function Gt(e){var t=[Te,He("Relationships",null,{xmlns:Ve.RELS})];return ie(e["!id"]).forEach((function(r){t[t.length]=He("Relationship",null,e["!id"][r])})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function Jt(e,t,r,n,a,i){if(a||(a={}),e["!id"]||(e["!id"]={}),e["!idx"]||(e["!idx"]=1),t<0)for(t=e["!idx"];e["!id"]["rId"+t];++t);if(e["!idx"]=t+1,a.Id="rId"+t,a.Type=n,a.Target=r,i?a.TargetMode=i:[Vt.HLINK,Vt.XPATH,Vt.XMISS].indexOf(a.Type)>-1&&(a.TargetMode="External"),e["!id"][a.Id])throw new Error("Cannot rewrite rId "+t);return e["!id"][a.Id]=a,e[("/"+a.Target).replace("//","/")]=a,t}var qt=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];function Yt(e,t,r,n,a){null==a[e]&&null!=t&&""!==t&&(a[e]=t,t=Ee(t),n[n.length]=r?He(e,t,r):Be(e,t))}var Zt=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]];function Kt(e){var t=[Te,He("Properties",null,{xmlns:Ve.CUST_PROPS,"xmlns:vt":Ve.vt})];if(!e)return t.join("");var r=1;return ie(e).forEach((function(n){++r,t[t.length]=He("property",function(e,t){switch(typeof e){case"string":var r=He("vt:lpwstr",Ee(e));return t&&(r=r.replace(/"/g,"_x0022_")),r;case"number":return He((0|e)==e?"vt:i4":"vt:r8",Ee(String(e)));case"boolean":return He("vt:bool",e?"true":"false")}if(e instanceof Date)return He("vt:filetime",Xe(e));throw new Error("Unable to serialize "+e)}(e[n],!0),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:r,name:Ee(n)})})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}var Qt=/^\s|\s$|[\t\n\r]/;var er=6;var tr=96;function rr(e){return 96*e/tr}function nr(e,t){var r,n=[Te,He("styleSheet",null,{xmlns:Ge[0],"xmlns:vt":Ve.vt})];return e.SSF&&null!=(r=function(e){var t=[""];return[[5,8],[23,26],[41,44],[50,392]].forEach((function(r){for(var n=r[0];n<=r[1];++n)null!=e[n]&&(t[t.length]=He("numFmt",null,{numFmtId:n,formatCode:Ee(e[n])}))})),1===t.length?"":(t[t.length]="",t[0]=He("numFmts",null,{count:t.length-2}).replace("/>",">"),t.join(""))}(e.SSF))&&(n[n.length]=r),n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',(r=function(e){var t=[];return t[t.length]=He("cellXfs",null),e.forEach((function(e){t[t.length]=He("xf",null,e)})),t[t.length]="",2===t.length?"":(t[0]=He("cellXfs",null,{count:t.length-2}).replace("/>",">"),t.join(""))}(t.cellXfs))&&(n[n.length]=r),n[n.length]='',n[n.length]='',n[n.length]='',n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}function ar(e,t,r){var n=[21600,21600],a=["m0,0l0",n[1],n[0],n[1],n[0],"0xe"].join(","),i=[He("xml",null,{"xmlns:v":Je.v,"xmlns:o":Je.o,"xmlns:x":Je.x,"xmlns:mv":Je.mv}).replace(/\/>/,">"),He("o:shapelayout",He("o:idmap",null,{"v:ext":"edit",data:e}),{"v:ext":"edit"})],o=65536*e,s=t||[];return s.length>0&&i.push(He("v:shapetype",[He("v:stroke",null,{joinstyle:"miter"}),He("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202",coordsize:n.join(","),"o:spt":202,path:a})),s.forEach((function(e){++o,i.push(function(e,t,r){var n=Et(e[0]),a={color2:"#BEFF82",type:"gradient"};"gradient"==a.type&&(a.angle="-180");var i="gradient"==a.type?He("o:fill",null,{type:"gradientUnscaled","v:ext":"view"}):null,o=He("v:fill",i,a),s={on:"t",obscured:"t"};return["",o,He("v:shadow",null,s),He("v:path",null,{"o:connecttype":"none"}),'
','',"","",Be("x:Anchor",[n.c+1,0,n.r+1,0,n.c+3,20,n.r+5,20].join(",")),Be("x:AutoFill","False"),Be("x:Row",String(n.r)),Be("x:Column",String(n.c)),e[1].hidden?"":"","",""].join("")}(e,o))})),i.push(""),i.join("")}function ir(e){var t=[Te,He("comments",null,{xmlns:Ge[0]})],r=[];return t.push(""),e.forEach((function(e){e[1].forEach((function(e){var n=Ee(e.a);-1==r.indexOf(n)&&(r.push(n),t.push(""+n+"")),e.T&&e.ID&&-1==r.indexOf("tc="+e.ID)&&(r.push("tc="+e.ID),t.push("tc="+e.ID+""))}))})),0==r.length&&(r.push("SheetJ5"),t.push("SheetJ5")),t.push(""),t.push(""),e.forEach((function(e){var n=0,a=[],i=0;if(e[1][0]&&e[1][0].T&&e[1][0].ID&&(n=r.indexOf("tc="+e[1][0].ID)),e[1].forEach((function(e){e.a&&(n=r.indexOf(Ee(e.a))),e.T&&++i,a.push(null==e.t?"":Ee(e.t))})),0===i)e[1].forEach((function(n){t.push(''),t.push(Be("t",null==n.t?"":Ee(n.t))),t.push("")}));else{e[1][0]&&e[1][0].T&&e[1][0].ID&&(n=r.indexOf("tc="+e[1][0].ID)),t.push('');for(var o="Comment:\n "+a[0]+"\n",s=1;s")}})),t.push(""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function or(e,t,r){var n=[Te,He("ThreadedComments",null,{xmlns:Ve.TCMNT}).replace(/[\/]>/,">")];return e.forEach((function(e){var a="";(e[1]||[]).forEach((function(i,o){if(i.T){i.a&&-1==t.indexOf(i.a)&&t.push(i.a);var s={ref:e[0],id:"{54EE7951-7262-4200-6969-"+("000000000000"+r.tcid++).slice(-12)+"}"};0==o?a=s.id:s.parentId=a,i.ID=s.id,i.a&&(s.personId="{54EE7950-7262-4200-6969-"+("000000000000"+t.indexOf(i.a)).slice(-12)+"}"),n.push(He("threadedComment",Be("text",i.t||""),s))}else delete i.ID}))})),n.push(""),n.join("")}var sr=["xlsb","xlsm","xlam","biff8","xla"];try{/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g}catch(e){}var lr="undefined"!=typeof Map;function cr(e,t){var r,n,a={min:e+1,max:e+1},i=-1;return t.MDW&&(er=t.MDW),null!=t.width?a.customWidth=1:null!=t.wpx?(r=t.wpx,i=Math.floor((r-5)/er*100+.5)/100):null!=t.wch&&(i=t.wch),i>-1?(a.width=(n=i,Math.round((n*er+5)/er*256)/256),a.customWidth=1):null!=t.width&&(a.width=t.width),t.hidden&&(a.hidden=!0),null!=t.level&&(a.outlineLevel=a.level=t.level),a}function fr(e,t,r){var n,a,i=r.revssf[null!=t.z?t.z:"General"],o=60,s=e.length;if(null==i&&r.ssf)for(;o<392;++o)if(null==r.ssf[o]){n=t.z,a=o,Q(ee[n]||n,a),r.ssf[o]=t.z,r.revssf[t.z]=i=o;break}for(o=0;o!=s;++o)if(e[o].numFmtId===i)return o;return e[s]={numFmtId:i,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},s}function hr(e,t,r){if(e&&e["!ref"]){var n=Lt(e["!ref"]);if(n.e.c=0;--r)n=((16384&n?1:0)|n<<1&32767)^t[r];return 52811^n}(e.password).toString(16).toUpperCase()),He("sheetProtection",null,t)}function mr(e,t,r,n,a,i,o){if(e.c&&r["!comments"].push([t,e.c]),(void 0===e.v||"z"===e.t&&!(n||{}).sheetStubs)&&"string"!=typeof e.f&&void 0===e.z)return"";var s="",l=e.t,c=e.v;if("z"!==e.t)switch(e.t){case"b":s=e.v?"1":"0";break;case"n":isNaN(e.v)?(e.t="e",s=jt[e.v=36]):isFinite(e.v)?s=""+e.v:(e.t="e",s=jt[e.v=7]);break;case"e":s=jt[e.v];break;case"d":if(n&&n.cellDates){var f=me(e.v,o);s=f.toISOString(),f.getUTCFullYear()<1900&&(s=s.slice(s.indexOf("T")+1).replace("Z",""))}else(e=ge(e)).t="n",s=""+(e.v=fe(me(e.v,o),o));void 0===e.z&&(e.z=S[14]);break;default:s=e.v}var h="z"==e.t||null==e.v?"":Be("v",Ee(s)),u={r:t},p=fr(n.cellXfs,e,n);switch(0!==p&&(u.s=p),e.t){case"n":case"z":break;case"d":u.t="d";break;case"b":u.t="b";break;case"e":u.t="e";break;default:if(null==e.v){delete e.t;break}if(e.v.length>32767)throw new Error("Text length must not exceed 32767 characters");if(n&&n.bookSST){h=Be("v",""+function(e,t,r){var n=0,a=e.length;if(r){if(lr?r.has(t):Object.prototype.hasOwnProperty.call(r,t))for(var i=lr?r.get(t):r[t];n16383||f.e.r>1048575){if(t.WTF)throw new Error("Range "+c+" exceeds format limit A1:XFD1048576");f.e.c=Math.min(f.e.c,16383),f.e.r=Math.min(f.e.c,1048575),c=It(f)}n||(n={}),l["!comments"]=[];var h=[];!function(e,t,r,n,a){var i=!1,o={},s=null;if("xlsx"!==n.bookType&&t.vbaraw){var l=t.SheetNames[r];try{t.Workbook&&(l=t.Workbook.Sheets[r].CodeName||l)}catch(e){}i=!0,o.codeName=$e(Ee(l))}if(e&&e["!outline"]){var c={summaryBelow:1,summaryRight:1};e["!outline"].above&&(c.summaryBelow=0),e["!outline"].left&&(c.summaryRight=0),s=(s||"")+He("outlinePr",null,c)}(i||s)&&(a[a.length]=He("sheetPr",s,o))}(l,r,e,t,i),i[i.length]=He("dimension",null,{ref:c}),i[i.length]=function(e,t,r,n){var a={workbookViewId:"0"};return(((n||{}).Workbook||{}).Views||[])[0]&&(a.rightToLeft=n.Workbook.Views[0].RTL?"1":"0"),He("sheetViews",He("sheetView",null,a),{})}(0,0,0,r),t.sheetFormat&&(i[i.length]=He("sheetFormatPr",null,{defaultRowHeight:t.sheetFormat.defaultRowHeight||"16",baseColWidth:t.sheetFormat.baseColWidth||"10",outlineLevelRow:t.sheetFormat.outlineLevelRow||"7"})),null!=l["!cols"]&&l["!cols"].length>0&&(i[i.length]=function(e,t){for(var r,n=[""],a=0;a!=t.length;++a)(r=t[a])&&(n[n.length]=He("col",null,cr(a,r)));return n[n.length]="",n.join("")}(0,l["!cols"])),i[a=i.length]="",l["!links"]=[],null!=l["!ref"]&&(s=function(e,t,r,n){var a,i,o=[],s=[],l=Lt(e["!ref"]),c="",f="",h=[],u=0,p=0,d=e["!rows"],m=null!=e["!data"],g=m?e["!data"]:[],v={r:f},b=-1,x=(((n||{}).Workbook||{}).WBProps||{}).date1904;for(p=l.s.c;p<=l.e.c;++p)h[p]=Ft(p);for(u=l.s.r;u<=l.e.r;++u){s=[],f=Ot(u);var w=m?g[u]:[];for(p=l.s.c;p<=l.e.c;++p){a=h[p]+f;var y=m?w[p]:e[a];void 0!==y&&null!=(c=mr(y,a,e,t,0,0,x))&&s.push(c)}(s.length>0||d&&d[u])&&(v={r:f},d&&d[u]&&((i=d[u]).hidden&&(v.hidden=1),b=-1,i.hpx?b=rr(i.hpx):i.hpt&&(b=i.hpt),b>-1&&(v.ht=b,v.customHeight=1),i.level&&(v.outlineLevel=i.level)),o[o.length]=He("row",s.join(""),v))}if(d)for(;u-1&&(v.ht=b,v.customHeight=1),i.level&&(v.outlineLevel=i.level),o[o.length]=He("row","",v));return o.join("")}(l,t,0,r),s.length>0&&(i[i.length]=s)),i.length>a+1&&(i[i.length]="",i[a]=i[a].replace("/>",">")),l["!protect"]&&(i[i.length]=dr(l["!protect"])),null!=l["!autofilter"]&&(i[i.length]=function(e,t,r,n){var a="string"==typeof e.ref?e.ref:It(e.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var i=r.Workbook.Names,o=Nt(a);o.s.r==o.e.r&&(o.e.r=Nt(t["!ref"]).e.r,a=It(o));for(var s=0;s0&&(i[i.length]=function(e){if(0===e.length)return"";for(var t='',r=0;r!=e.length;++r)t+='';return t+""}(l["!merges"]));var u,p,d=-1,m=-1;return l["!links"].length>0&&(i[i.length]="",l["!links"].forEach((function(e){e[1].Target&&(u={ref:e[0]},"#"!=e[1].Target.charAt(0)&&(m=Jt(n,-1,Ee(e[1].Target).replace(/#[\s\S]*$/,""),Vt.HLINK),u["r:id"]="rId"+m),(d=e[1].Target.indexOf("#"))>-1&&(u.location=Ee(e[1].Target.slice(d+1))),e[1].Tooltip&&(u.tooltip=Ee(e[1].Tooltip)),u.display=e[1].display,i[i.length]=He("hyperlink",null,u))})),i[i.length]=""),delete l["!links"],null!=l["!margins"]&&(i[i.length]=(function(e,t){if(e){var r=[.7,.7,.75,.75,.3,.3];null==e.left&&(e.left=r[0]),null==e.right&&(e.right=r[1]),null==e.top&&(e.top=r[2]),null==e.bottom&&(e.bottom=r[3]),null==e.header&&(e.header=r[4]),null==e.footer&&(e.footer=r[5])}}(p=l["!margins"]),He("pageMargins",null,p))),t&&!t.ignoreEC&&null!=t.ignoreEC||(i[i.length]=Be("ignoredErrors",He("ignoredError",null,{numberStoredAsText:1,sqref:c}))),h.length>0&&(m=Jt(n,-1,"../drawings/drawing"+(e+1)+".xml",Vt.DRAW),i[i.length]=He("drawing",null,{"r:id":"rId"+m}),l["!drawing"]=h),l["!comments"].length>0&&(m=Jt(n,-1,"../drawings/vmlDrawing"+(e+1)+".vml",Vt.VML),i[i.length]=He("legacyDrawing",null,{"r:id":"rId"+m}),l["!legacy"]=m),i.length>1&&(i[i.length]="",i[1]=i[1].replace("/>",">")),i.join("")}var vr=[["allowRefreshQuery",!1,"bool"],["autoCompressPictures",!0,"bool"],["backupFile",!1,"bool"],["checkCompatibility",!1,"bool"],["CodeName",""],["date1904",!1,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",!1,"bool"],["hidePivotFieldList",!1,"bool"],["promptedSolutions",!1,"bool"],["publishItems",!1,"bool"],["refreshAllConnections",!1,"bool"],["saveExternalLinkValues",!0,"bool"],["showBorderUnselectedTables",!0,"bool"],["showInkAnnotation",!0,"bool"],["showObjects","all"],["showPivotChartFilter",!1,"bool"],["updateLinks","userSet"]],br=":][*?/\\".split("");function xr(e,t){try{if(""==e)throw new Error("Sheet name cannot be blank");if(e.length>31)throw new Error("Sheet name cannot exceed 31 chars");if(39==e.charCodeAt(0)||39==e.charCodeAt(e.length-1))throw new Error("Sheet name cannot start or end with apostrophe (')");if("history"==e.toLowerCase())throw new Error("Sheet name cannot be 'History'");br.forEach((function(t){if(-1!=e.indexOf(t))throw new Error("Sheet name cannot contain : \\ / ? * [ ]")}))}catch(e){if(t)return!1;throw e}return!0}function wr(e){if(!e||!e.SheetNames||!e.Sheets)throw new Error("Invalid Workbook");if(!e.SheetNames.length)throw new Error("Workbook is empty");var t,r,n,a=e.Workbook&&e.Workbook.Sheets||[];t=e.SheetNames,r=a,n=!!e.vbaraw,t.forEach((function(e,a){xr(e);for(var i=0;i22)throw new Error("Bad Code Name: Worksheet"+o)}}));for(var i=0;ir||a[h].s.c>l||a[h].e.r1&&(o.rowspan=c),f>1&&(o.colspan=f),n.editable?d=''+d+"":p&&(o["data-t"]=p&&p.t||"z",null!=p.v&&(o["data-v"]=Ne(p.v instanceof Date?p.v.toISOString():p.v)),null!=p.z&&(o["data-z"]=p.z),p.l&&"#"!=(p.l.Target||"#").charAt(0)&&(d=''+d+"")),o.id=(n.id||"sjs")+"-"+u,i.push(He("td",d,o))}}return""+i.join("")+""}function Cr(e,t,r){var n=t.rows;if(!n)throw"Unsupported origin when "+t.tagName+" is not a TABLE";var a=r||{},i=null!=e["!data"],o=0,s=0;if(null!=a.origin)if("number"==typeof a.origin)o=a.origin;else{var l="string"==typeof a.origin?Et(a.origin):a.origin;o=l.r,s=l.c}var c=Math.min(a.sheetRows||1e7,n.length),f={s:{r:0,c:0},e:{r:o,c:s}};if(e["!ref"]){var h=Nt(e["!ref"]);f.s.r=Math.min(f.s.r,h.s.r),f.s.c=Math.min(f.s.c,h.s.c),f.e.r=Math.max(f.e.r,h.e.r),f.e.c=Math.max(f.e.c,h.e.c),-1==o&&(f.e.r=o=h.e.r+1)}var u=[],p=0,d=e["!rows"]||(e["!rows"]=[]),m=0,g=0,v=0,b=0,x=0,w=0;for(e["!cols"]||(e["!cols"]=[]);m1||w>1)&&u.push({s:{r:g+o,c:b+s},e:{r:g+o+(x||1)-1,c:b+s+(w||1)-1}});var D={t:"s",v:_},O=k.getAttribute("data-t")||k.getAttribute("t")||"";null!=_&&(0==_.length?D.t=O||"z":a.raw||0==_.trim().length||"s"==O||("e"==O&&jt[+_]?D={t:"e",v:+_,w:jt[+_]}:"TRUE"===_?D={t:"b",v:!0}:"FALSE"===_?D={t:"b",v:!1}:isNaN(be(_))?isNaN(ke(_).getDate())?35==_.charCodeAt(0)&&null!=Bt[_]&&(D={t:"e",v:Bt[_],w:_}):(D={t:"d",v:me(_)},a.UTC&&(D.v=_e(D.v)),a.cellDates||(D={t:"n",v:fe(D.v)}),D.z=a.dateNF||S[14]):D={t:"n",v:be(_)})),void 0===D.z&&null!=A&&(D.z=A);var F="",E=k.getElementsByTagName("A");if(E&&E.length)for(var M=0;M=c&&(e["!fullref"]=It((f.e.r=n.length-m+g-1+o,f))),e}function Sr(e,t){var r={};return(t||{}).dense&&(r["!data"]=[]),Cr(r,e,t)}function kr(e){var t="",r=function(e){return e.ownerDocument.defaultView&&"function"==typeof e.ownerDocument.defaultView.getComputedStyle?e.ownerDocument.defaultView.getComputedStyle:"function"==typeof getComputedStyle?getComputedStyle:null} +/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */(e);return r&&(t=r(e).getPropertyValue("display")),t||(t=e.style&&e.style.display),"none"===t}function _r(e){var t;(t=[["cellDates",!1],["bookSST",!1],["bookType","xlsx"],["compression",!1],["WTF",!1]],function(e){for(var r=0;r!=t.length;++r){var n=t[r];void 0===e[n[0]]&&(e[n[0]]=n[1]),"n"===n[2]&&(e[n[0]]=Number(e[n[0]]))}})(e)}function Ar(e,t){var r;e&&!e.SSF&&(e.SSF=ge(S)),e&&e.SSF&&(r||(r={}),r[0]="General",r[1]="0",r[2]="0.00",r[3]="#,##0",r[4]="#,##0.00",r[9]="0%",r[10]="0.00%",r[11]="0.00E+00",r[12]="# ?/?",r[13]="# ??/??",r[14]="m/d/yy",r[15]="d-mmm-yy",r[16]="d-mmm",r[17]="mmm-yy",r[18]="h:mm AM/PM",r[19]="h:mm:ss AM/PM",r[20]="h:mm",r[21]="h:mm:ss",r[22]="m/d/yy h:mm",r[37]="#,##0 ;(#,##0)",r[38]="#,##0 ;[Red](#,##0)",r[39]="#,##0.00;(#,##0.00)",r[40]="#,##0.00;[Red](#,##0.00)",r[45]="mm:ss",r[46]="[h]:mm:ss",r[47]="mmss.0",r[48]="##0.0E+0",r[49]="@",r[56]='"上午/下午 "hh"時"mm"分"ss"秒 "',S=r,function(e){for(var t=0;392!=t;++t)void 0!==e[t]&&Q(e[t],t)}(e.SSF),t.revssf=function(e){for(var t=[],r=ie(e),n=0;n!==r.length;++n)t[e[r[n]]]=parseInt(r[n],10);return t}(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF),t.rels={},t.wbrels={},t.Strings=[],t.Strings.Count=0,t.Strings.Unique=0,lr?t.revStrings=new Map:(t.revStrings={},t.revStrings.foo=[],delete t.revStrings.foo);var n="xml",a=sr.indexOf(t.bookType)>-1,i={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""};_r(t=t||{});var o,s,l,c=re.utils.cfb_new(),f="",h=0;if(t.cellXfs=[],fr(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),Ae(c,f="docProps/core.xml",function(e,t){var r=t||{},n=[Te,He("cp:coreProperties",null,{"xmlns:cp":Ve.CORE_PROPS,"xmlns:dc":Ve.dc,"xmlns:dcterms":Ve.dcterms,"xmlns:dcmitype":Ve.dcmitype,"xmlns:xsi":Ve.xsi})],a={};if(!e&&!r.Props)return n.join("");e&&(null!=e.CreatedDate&&Yt("dcterms:created","string"==typeof e.CreatedDate?e.CreatedDate:Xe(e.CreatedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},n,a),null!=e.ModifiedDate&&Yt("dcterms:modified","string"==typeof e.ModifiedDate?e.ModifiedDate:Xe(e.ModifiedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},n,a));for(var i=0;i!=qt.length;++i){var o=qt[i],s=r.Props&&null!=r.Props[o[1]]?r.Props[o[1]]:e?e[o[1]]:null;!0===s?s="1":!1===s?s="0":"number"==typeof s&&(s=String(s)),null!=s&&Yt(o[0],s,null,n,a)}return n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}(e.Props,t)),i.coreprops.push(f),Jt(t.rels,2,f,Vt.CORE_PROPS),f="docProps/app.xml",e.Props&&e.Props.SheetNames);else if(e.Workbook&&e.Workbook.Sheets){for(var u=[],p=0;pWorksheets")+l("vt:variant",l("vt:i4",String(o.Worksheets))),{size:2,baseType:"variant"})),s[s.length]=l("TitlesOfParts",l("vt:vector",o.SheetNames.map((function(e){return""+Ee(e)+""})).join(""),{size:o.Worksheets,baseType:"lpstr"})),s.length>2&&(s[s.length]="",s[1]=s[1].replace("/>",">")),s.join(""))),i.extprops.push(f),Jt(t.rels,3,f,Vt.EXT_PROPS),e.Custprops!==e.Props&&ie(e.Custprops||{}).length>0&&(Ae(c,f="docProps/custom.xml",Kt(e.Custprops)),i.custprops.push(f),Jt(t.rels,4,f,Vt.CUST_PROPS));var d,m,g=["SheetJ5"];for(t.tcid=0,h=1;h<=e.SheetNames.length;++h){var v={"!id":{}},b=e.Sheets[e.SheetNames[h-1]];(b||{})["!type"];if(Ae(c,f="xl/worksheets/sheet"+h+"."+n,gr(h-1,t,e,v)),i.sheets.push(f),Jt(t.wbrels,-1,"worksheets/sheet"+h+"."+n,Vt.WS[0]),b){var x=b["!comments"],w=!1,y="";if(x&&x.length>0){var C=!1;x.forEach((function(e){e[1].forEach((function(e){1==e.T&&(C=!0)}))})),C&&(Ae(c,y="xl/threadedComments/threadedComment"+h+".xml",or(x,g,t)),i.threadedcomments.push(y),Jt(v,-1,"../threadedComments/threadedComment"+h+".xml",Vt.TCMNT)),Ae(c,y="xl/comments"+h+"."+n,ir(x)),i.comments.push(y),Jt(v,-1,"../comments"+h+"."+n,Vt.CMNT),w=!0}b["!legacy"]&&w&&Ae(c,"xl/drawings/vmlDrawing"+h+".vml",ar(h,b["!comments"])),delete b["!comments"],delete b["!legacy"]}v["!id"].rId1&&Ae(c,(m=void 0,m=(d=f).lastIndexOf("/"),d.slice(0,m+1)+"_rels/"+d.slice(m+1)+".rels"),Gt(v))}return null!=t.Strings&&t.Strings.length>0&&(Ae(c,f="xl/sharedStrings."+n,function(e,t){if(!t.bookSST)return"";var r=[Te];r[r.length]=He("sst",null,{xmlns:Ge[0],count:e.Count,uniqueCount:e.Unique});for(var n=0;n!=e.length;++n)if(null!=e[n]){var a=e[n],i="";a.r?i+=a.r:(i+=""),i+="",r[r.length]=i}return r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}(t.Strings,t)),i.strs.push(f),Jt(t.wbrels,-1,"sharedStrings."+n,Vt.SST)),Ae(c,f="xl/workbook."+n,function(e){var t=[Te];t[t.length]=He("workbook",null,{xmlns:Ge[0],"xmlns:r":Ve.r});var r=e.Workbook&&(e.Workbook.Names||[]).length>0,n={codeName:"ThisWorkbook"};e.Workbook&&e.Workbook.WBProps&&(vr.forEach((function(t){null!=e.Workbook.WBProps[t[0]]&&e.Workbook.WBProps[t[0]]!=t[1]&&(n[t[0]]=e.Workbook.WBProps[t[0]])})),e.Workbook.WBProps.CodeName&&(n.codeName=e.Workbook.WBProps.CodeName,delete n.CodeName)),t[t.length]=He("workbookPr",null,n);var a=e.Workbook&&e.Workbook.Sheets||[],i=0;if(a&&a[0]&&a[0].Hidden){for(t[t.length]="",i=0;i!=e.SheetNames.length&&a[i]&&a[i].Hidden;++i);i==e.SheetNames.length&&(i=0),t[t.length]='',t[t.length]=""}for(t[t.length]="",i=0;i!=e.SheetNames.length;++i){var o={name:Ee(e.SheetNames[i].slice(0,31))};if(o.sheetId=""+(i+1),o["r:id"]="rId"+(i+1),a[i])switch(a[i].Hidden){case 1:o.state="hidden";break;case 2:o.state="veryHidden"}t[t.length]=He("sheet",null,o)}return t[t.length]="",r&&(t[t.length]="",e.Workbook&&e.Workbook.Names&&e.Workbook.Names.forEach((function(e){var r={name:e.Name};e.Comment&&(r.comment=e.Comment),null!=e.Sheet&&(r.localSheetId=""+e.Sheet),e.Hidden&&(r.hidden="1"),e.Ref&&(t[t.length]=He("definedName",Ee(e.Ref),r))})),t[t.length]=""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}(e)),i.workbooks.push(f),Jt(t.rels,1,f,Vt.WB),Ae(c,f="xl/theme/theme1.xml",function(e,t){if(t&&t.themeXLSX)return t.themeXLSX;if(e&&"string"==typeof e.raw)return e.raw;var r=[Te];return r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r.join("")}(e.Themes,t)),i.themes.push(f),Jt(t.wbrels,-1,"theme/theme1.xml",Vt.THEME),Ae(c,f="xl/styles."+n,nr(e,t)),i.styles.push(f),Jt(t.wbrels,-1,"styles."+n,Vt.STY),e.vbaraw&&a&&(Ae(c,f="xl/vbaProject.bin",e.vbaraw),i.vba.push(f),Jt(t.wbrels,-1,"vbaProject.bin",Vt.VBA)),Ae(c,f="xl/metadata."+n,function(){var e=[Te];return e.push('\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n'),e.join("")}()),i.metadata.push(f),Jt(t.wbrels,-1,"metadata."+n,Vt.XLMETA),g.length>1&&(Ae(c,f="xl/persons/person.xml",function(e){var t=[Te,He("personList",null,{xmlns:Ve.TCMNT,"xmlns:x":Ge[0]}).replace(/[\/]>/,">")];return e.forEach((function(e,r){t.push(He("person",null,{displayName:e,id:"{54EE7950-7262-4200-6969-"+("000000000000"+r).slice(-12)+"}",userId:e,providerId:"None"}))})),t.push(""),t.join("")}(g)),i.people.push(f),Jt(t.wbrels,-1,"persons/person.xml",Vt.PEOPLE)),Ae(c,"[Content_Types].xml",Xt(i,t)),Ae(c,"_rels/.rels",Gt(t.rels)),Ae(c,"xl/_rels/workbook.xml.rels",Gt(t.wbrels)),delete t.revssf,delete t.ssf,c}function Tr(e,t){var r=ge(t||{});return function(e,t){var r={},n=a?"nodebuffer":"undefined"!=typeof Uint8Array?"array":"string";t.compression&&(r.compression="DEFLATE");if(t.password)r.type=n;else switch(t.type){case"base64":r.type="base64";break;case"binary":r.type="string";break;case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");case"buffer":case"file":r.type=n;break;default:throw new Error("Unrecognized type "+t.type)}var i=e.FullPaths?re.write(e,{fileType:"zip",type:{nodebuffer:"buffer",string:"binary"}[r.type]||r.type,compression:!!t.compression}):e.generate(r);if("undefined"!=typeof Deno&&"string"==typeof i){if("binary"==t.type||"base64"==t.type)return i;i=new Uint8Array(f(i))}return t.password&&"undefined"!=typeof encrypt_agile?function(e,t){switch(t.type){case"base64":case"binary":break;case"buffer":case"array":t.type="";break;case"file":return ae(t.file,re.write(e,{type:a?"buffer":""}));case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");default:throw new Error("Unrecognized type "+t.type)}return re.write(e,t)}(encrypt_agile(i,t.password),t):"file"===t.type?ae(t.file,i):"string"==t.type?Ue(i):i}(Ar(e,r),r)}function Dr(e,t){wr(e);var r=ge(t||{});if(r.cellStyles&&(r.cellNF=!0,r.sheetStubs=!0),"array"==r.type){r.type="binary";var n=Dr(e,r);return r.type="array",f(n)}return Tr(e,r)}function Or(e,t,r){var n=r||{};return n.type="file",n.file=t,function(e){if(!e.bookType){var t=e.file.slice(e.file.lastIndexOf(".")).toLowerCase();t.match(/^\.[a-z]+$/)&&(e.bookType=t.slice(1)),e.bookType={xls:"biff8",htm:"html",slk:"sylk",socialcalc:"eth",Sh33tJS:"WTF"}[e.bookType]||e.bookType}}(n),Dr(e,n)}function Fr(e,t,r,n,a,i,o){var s,l=Ot(r),c=o.defval,f=o.raw||!Object.prototype.hasOwnProperty.call(o,"raw"),h=!0,u=null!=e["!data"],p=1===a?[]:{};if(1!==a)if(Object.defineProperty)try{Object.defineProperty(p,"__rowNum__",{value:r,enumerable:!1})}catch(e){p.__rowNum__=r}else p.__rowNum__=r;if(!u||e["!data"][r])for(var d=t.s.c;d<=t.e.c;++d){var m=u?(e["!data"][r]||[])[d]:e[n[d]+l];if(null!=m&&void 0!==m.t){var g=m.v;switch(m.t){case"z":if(null==g)break;continue;case"e":g=0==g?null:void 0;break;case"s":case"b":case"n":if(!m.z||!J(m.z))break;if("number"==typeof(g=he(g)))break;case"d":o&&(o.UTC||!1===o.raw)||(s=new Date(g),g=new Date(s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate(),s.getUTCHours(),s.getUTCMinutes(),s.getUTCSeconds(),s.getUTCMilliseconds()));break;default:throw new Error("unrecognized type "+m.t)}if(null!=i[d]){if(null==g)if("e"==m.t&&null===g)p[i[d]]=null;else if(void 0!==c)p[i[d]]=c;else{if(!f||null!==g)continue;p[i[d]]=null}else p[i[d]]=("n"===m.t&&"boolean"==typeof o.rawNumbers?o.rawNumbers:f)?g:$t(m,g,o);null!=g&&(h=!1)}}else{if(void 0===c)continue;null!=i[d]&&(p[i[d]]=c)}}return{row:p,isempty:h}}function Er(e,t){if(null==e||null==e["!ref"])return[];var r={t:"n",v:0},n=0,a=1,i=[],o=0,s="",l={s:{r:0,c:0},e:{r:0,c:0}},c=t||{},f=null!=c.range?c.range:e["!ref"];switch(1===c.header?n=1:"A"===c.header?n=2:Array.isArray(c.header)?n=3:null==c.header&&(n=0),typeof f){case"string":l=Lt(f);break;case"number":(l=Lt(e["!ref"])).s.r=f;break;default:l=f}n>0&&(a=0);var h=Ot(l.s.r),u=[],p=[],d=0,m=0,g=null!=e["!data"],v=l.s.r,b=0,x={};g&&!e["!data"][v]&&(e["!data"][v]=[]);var w=c.skipHidden&&e["!cols"]||[],y=c.skipHidden&&e["!rows"]||[];for(b=l.s.c;b<=l.e.c;++b)if(!(w[b]||{}).hidden)switch(u[b]=Ft(b),r=g?e["!data"][v][b]:e[u[b]+h],n){case 1:i[b]=b-l.s.c;break;case 2:i[b]=u[b];break;case 3:i[b]=c.header[b-l.s.c];break;default:if(null==r&&(r={w:"__EMPTY",t:"s"}),s=o=$t(r,null,c),m=x[o]||0){do{s=o+"_"+m++}while(x[s]);x[o]=m,x[s]=1}else x[o]=1;i[b]=s}for(v=l.s.r+a;v<=l.e.r;++v)if(!(y[v]||{}).hidden){var C=Fr(e,l,v,u,n,i,c);(!1===C.isempty||(1===n?!1!==c.blankrows:c.blankrows))&&(p[d++]=C.row)}return p.length=d,p}!function(){try{return"undefined"==typeof Uint8Array||void 0===Uint8Array.prototype.subarray?"slice":"undefined"!=typeof Buffer?void 0===Buffer.prototype.subarray?"slice":("function"==typeof Buffer.from?Buffer.from([72,62]):new Buffer([72,62]))instanceof Uint8Array?"subarray":"slice":"subarray"}catch(e){return"slice"}}();var Mr=/"/g;function Nr(e,t,r,n,a,i,o,s,l){for(var c=!0,f=[],h="",u=Ot(r),p=null!=e["!data"],d=p&&e["!data"][r]||[],m=t.s.c;m<=t.e.c;++m)if(n[m]){var g=p?d[m]:e[n[m]+u];if(null==g)h="";else if(null!=g.v){c=!1,h=""+(l.rawNumbers&&"n"==g.t?g.v:$t(g,null,l));for(var v=0,b=0;v!==h.length;++v)if((b=h.charCodeAt(v))===a||b===i||34===b||l.forceQuotes){h='"'+h.replace(Mr,'""')+'"';break}"ID"==h&&0==s&&0==f.length&&(h='"ID"')}else null==g.f||g.F?h="":(c=!1,(h="="+g.f).indexOf(",")>=0&&(h='"'+h.replace(Mr,'""')+'"'));f.push(h)}if(l.strip)for(;""===f[f.length-1];)--f.length;return!1===l.blankrows&&c?null:f.join(o)}function Ir(e,t){var r=[],n=null==t?{}:t;if(null==e||null==e["!ref"])return"";for(var a=Lt(e["!ref"]),i=void 0!==n.FS?n.FS:",",o=i.charCodeAt(0),s=void 0!==n.RS?n.RS:"\n",l=s.charCodeAt(0),c="",f=[],h=n.skipHidden&&e["!cols"]||[],u=n.skipHidden&&e["!rows"]||[],p=a.s.c;p<=a.e.c;++p)(h[p]||{}).hidden||(f[p]=Ft(p));for(var d=0,m=a.s.r;m<=a.e.r;++m)(u[m]||{}).hidden||null!=(c=Nr(e,a,m,f,o,l,i,d,n))&&(c||!1!==n.blankrows)&&r.push((d++?s:"")+c);return r.join("")}function Pr(e,t,r){var n=r||{},a=e?null!=e["!data"]:n.dense,i=+!n.skipHeader,o=e||{};!e&&a&&(o["!data"]=[]);var s=0,l=0;if(o&&null!=n.origin)if("number"==typeof n.origin)s=n.origin;else{var c="string"==typeof n.origin?Et(n.origin):n.origin;s=c.r,l=c.c}var f={s:{c:0,r:0},e:{c:l,r:s+t.length-1+i}};if(o["!ref"]){var h=Lt(o["!ref"]);f.e.c=Math.max(f.e.c,h.e.c),f.e.r=Math.max(f.e.r,h.e.r),-1==s&&(s=h.e.r+1,f.e.r=s+t.length-1+i)}else-1==s&&(s=0,f.e.r=t.length-1+i);var u=n.header||[],p=0,d=[];t.forEach((function(e,t){a&&!o["!data"][s+t+i]&&(o["!data"][s+t+i]=[]),a&&(d=o["!data"][s+t+i]),ie(e).forEach((function(r){-1==(p=u.indexOf(r))&&(u[p=u.length]=r);var c=e[r],f="z",h="",m=a?"":Ft(l+p)+Ot(s+t+i),g=a?d[l+p]:o[m];!c||"object"!=typeof c||c instanceof Date?("number"==typeof c?f="n":"boolean"==typeof c?f="b":"string"==typeof c?f="s":c instanceof Date?(f="d",n.UTC||(c=_e(c)),n.cellDates||(f="n",c=fe(c)),h=null!=g&&g.z&&J(g.z)?g.z:n.dateNF||S[14]):null===c&&n.nullError&&(f="e",c=0),g?(g.t=f,g.v=c,delete g.w,delete g.R,h&&(g.z=h)):a?d[l+p]=g={t:f,v:c}:o[m]=g={t:f,v:c},h&&(g.z=h)):a?d[l+p]=c:o[m]=c}))})),f.e.c=Math.max(f.e.c,l+u.length-1);var m=Ot(s);if(a&&!o["!data"][s]&&(o["!data"][s]=[]),i)for(p=0;p=65535)throw new Error("Too many worksheets");if(n&&e.SheetNames.indexOf(r)>=0&&r.length<32){var i=r.match(/\d+$/);a=i&&+i[0]||0;var o=i&&r.slice(0,i.index)||r;for(++a;a<=65535&&-1!=e.SheetNames.indexOf(r=o+a);++a);}if(xr(r),e.SheetNames.indexOf(r)>=0)throw new Error("Worksheet with name |"+r+"| already exists!");return e.SheetNames.push(r),e.Sheets[r]=t,r}function Ur(e,t,r){return t?(e.l={Target:t},r&&(e.l.Tooltip=r)):delete e.l,e}var $r={encode_col:Ft,encode_row:Ot,encode_cell:Mt,encode_range:It,decode_col:function(e){for(var t=e.replace(/^\$([A-Z])/,"$1"),r=0,n=0;n!==t.length;++n)r=26*r+t.charCodeAt(n)-64;return r-1},decode_row:function(e){return parseInt(e.replace(/\$(\d+)$/,"$1"),10)-1},split_cell:function(e){return e.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")},decode_cell:Et,decode_range:Nt,format_cell:$t,sheet_new:function(e){var t={};return(e||{}).dense&&(t["!data"]=[]),t},sheet_add_aoa:zt,sheet_add_json:Pr,sheet_add_dom:Cr,aoa_to_sheet:function(e,t){return zt(null,e,t)},json_to_sheet:function(e,t){return Pr(null,e,t)},table_to_sheet:Sr,table_to_book:function(e,t){return function(e,t){var r=t&&t.sheet?t.sheet:"Sheet1",n={};return n[r]=e,{SheetNames:[r],Sheets:n}}(Sr(e,t),t)},sheet_to_csv:Ir,sheet_to_txt:function(e,t){return t||(t={}),t.FS="\t",t.RS="\n",Ir(e,t)},sheet_to_json:Er,sheet_to_html:function(e,t){var r=t||{},n=null!=r.header?r.header:'SheetJS Table Export',a=null!=r.footer?r.footer:"",i=[n],o=Nt(e["!ref"]||"A1");if(i.push(function(e,t,r){return[].join("")+""}(0,0,r)),e["!ref"])for(var s=o.s.r;s<=o.e.r;++s)i.push(yr(e,o,s,r));return i.push(""+a),i.join("")},sheet_to_formulae:function(e,t){var r,n="",a="";if(null==e||null==e["!ref"])return[];var i,o=Lt(e["!ref"]),s="",l=[],c=[],f=null!=e["!data"];for(i=o.s.c;i<=o.e.c;++i)l[i]=Ft(i);for(var h=o.s.r;h<=o.e.r;++h)for(s=Ot(h),i=o.s.c;i<=o.e.c;++i)if(n=l[i]+s,a="",void 0!==(r=f?(e["!data"][h]||[])[i]:e[n])){if(null!=r.F){if(n=r.F,!r.f)continue;a=r.f,-1==n.indexOf(":")&&(n=n+":"+n)}if(null!=r.f)a=r.f;else{if(t&&!1===t.values)continue;if("z"==r.t)continue;if("n"==r.t&&null!=r.v)a=""+r.v;else if("b"==r.t)a=r.v?"TRUE":"FALSE";else if(void 0!==r.w)a="'"+r.w;else{if(void 0===r.v)continue;a="s"==r.t?"'"+r.v:""+r.v}}c[c.length]=n+"="+a}return c},sheet_to_row_object_array:Er,sheet_get_cell:Rr,book_new:function(e,t){var r={SheetNames:[],Sheets:{}};return e&&Lr(r,e,t||"Sheet1"),r},book_append_sheet:Lr,book_set_sheet_visibility:function(e,t,r){e.Workbook||(e.Workbook={}),e.Workbook.Sheets||(e.Workbook.Sheets=[]);var n=function(e,t){if("number"==typeof t){if(t>=0&&e.SheetNames.length>t)return t;throw new Error("Cannot find sheet # "+t)}if("string"==typeof t){var r=e.SheetNames.indexOf(t);if(r>-1)return r;throw new Error("Cannot find sheet name |"+t+"|")}throw new Error("Cannot find sheet |"+t+"|")}(e,t);switch(e.Workbook.Sheets[n]||(e.Workbook.Sheets[n]={}),r){case 0:case 1:case 2:break;default:throw new Error("Bad sheet visibility setting "+r)}e.Workbook.Sheets[n].Hidden=r},cell_set_number_format:function(e,t){return e.z=t,e},cell_set_hyperlink:Ur,cell_set_internal_link:function(e,t,r){return Ur(e,"#"+t,r)},cell_add_comment:function(e,t,r){e.c||(e.c=[]),e.c.push({t,a:r||"SheetJS"})},sheet_set_array_formula:function(e,t,r,n){for(var a="string"!=typeof t?t:Lt(t),i="string"==typeof t?t:It(t),o=a.s.r;o<=a.e.r;++o)for(var s=a.s.c;s<=a.e.c;++s){var l=Rr(e,o,s);l.t="n",l.F=i,delete l.v,o==a.s.r&&s==a.s.c&&(l.f=r,n&&(l.D=!0))}var c=Nt(e["!ref"]);return c.s.r>a.s.r&&(c.s.r=a.s.r),c.s.c>a.s.c&&(c.s.c=a.s.c),c.e.r} + */ +export async function Base64Decode(base64) { + // BEGIN USER CODE + return Base64.decode(base64); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/Base64DecodeToImage.js b/Source/javascriptsource/nanoflowcommons/actions/Base64DecodeToImage.js new file mode 100644 index 0000000..6c02bb0 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/Base64DecodeToImage.js @@ -0,0 +1,32 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import { Base64 } from 'js-base64'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * @param {string} base64 + * @param {MxObject} image + * @returns {Promise.} + */ +export async function Base64DecodeToImage(base64, image) { + // BEGIN USER CODE + if (!base64) { + throw new Error("base64 String should not be empty"); + } + if (!image) { + throw new Error("image should not be null"); + } + const blob = new Blob([Base64.toUint8Array(base64)], { type: "image/png" }); + return new Promise((resolve, reject) => { + mx.data.saveDocument(image.getGuid(), "camera image", {}, blob, () => resolve(true), reject); + }); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/Base64Encode.js b/Source/javascriptsource/nanoflowcommons/actions/Base64Encode.js new file mode 100644 index 0000000..dd15227 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/Base64Encode.js @@ -0,0 +1,22 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import { Base64 } from 'js-base64'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * @param {string} stringToEncode + * @returns {Promise.} + */ +export async function Base64Encode(stringToEncode) { + // BEGIN USER CODE + return Base64.encode(stringToEncode); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/CallPhoneNumber.js b/Source/javascriptsource/nanoflowcommons/actions/CallPhoneNumber.js new file mode 100644 index 0000000..34a9ae0 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/CallPhoneNumber.js @@ -0,0 +1,46 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * This action can be used to launch a phone app on the devices and initiate dialing of the specified phone number. The user has to confirm to initate the actual call. + * @param {string} phoneNumber - This field is required. + * @returns {Promise.} + */ +export async function CallPhoneNumber(phoneNumber) { + // BEGIN USER CODE + if (!phoneNumber) { + return Promise.reject(new Error("Input parameter 'Phone number' is required")); + } + const url = `tel:${encodeURI(phoneNumber)}`; + // Native platform + if (navigator && navigator.product === "ReactNative") { + const Linking = require("react-native").Linking; + return Linking.canOpenURL(url).then(supported => { + if (!supported) { + return false; + } + return Linking.openURL(url).then(() => true); + }); + } + // Hybrid platform + if (window && window.cordova) { + window.open(url, "_system"); + return Promise.resolve(true); + } + // Web platform + if (window) { + window.location.href = url; + return Promise.resolve(true); + } + return Promise.resolve(false); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/ClearCachedSessionData.js b/Source/javascriptsource/nanoflowcommons/actions/ClearCachedSessionData.js new file mode 100644 index 0000000..92b80f1 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/ClearCachedSessionData.js @@ -0,0 +1,24 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Clears saved session data from the local storage for offline native and PWAs. + * @returns {Promise.} + */ +export async function ClearCachedSessionData() { + // BEGIN USER CODE + if (mx.session && mx.session.clearCachedSessionData === undefined) { + return Promise.reject(new Error("JS action 'Clear cached session data' is not supported prior to Mendix client v9.14")); + } + await mx.session.clearCachedSessionData(); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/ClearLocalStorage.js b/Source/javascriptsource/nanoflowcommons/actions/ClearLocalStorage.js new file mode 100644 index 0000000..903e170 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/ClearLocalStorage.js @@ -0,0 +1,27 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * @returns {Promise.} + */ +export async function ClearLocalStorage() { + // BEGIN USER CODE + try { + localStorage.clear(); + return true; + } + catch (e) { + console.error(e); + return false; + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/DraftEmail.js b/Source/javascriptsource/nanoflowcommons/actions/DraftEmail.js new file mode 100644 index 0000000..cbd2840 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/DraftEmail.js @@ -0,0 +1,64 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Start drafting an email in the platform specified email client. This might work differently for each user depending on their platform and local configuration. + * @param {string} recipient - The recipient, or recipients, separated by comma's. + * @param {string} cc - The Carbon Copy recipient, or recipients, separated by comma's. + * @param {string} bcc - The Blind Carbon Copy recipient, or recipients, separated by comma's. + * @param {string} subject + * @param {string} body + * @returns {Promise.} + */ +export async function DraftEmail(recipient, cc, bcc, subject, body) { + // BEGIN USER CODE + let url = "mailto:"; + if (recipient) { + url += `${encodeURI(recipient)}?`; + } + if (cc) { + url += `cc=${encodeURIComponent(cc)}&`; + } + if (bcc) { + url += `bcc=${encodeURIComponent(bcc)}&`; + } + if (subject) { + url += `subject=${encodeURIComponent(subject)}&`; + } + if (body) { + url += `body=${encodeURIComponent(body)}&`; + } + // Remove the last '?' or '&' + url = url.slice(0, -1); + // Native platform + if (navigator && navigator.product === "ReactNative") { + const Linking = require("react-native").Linking; + return Linking.canOpenURL(url).then(supported => { + if (!supported) { + return false; + } + return Linking.openURL(url).then(() => true); + }); + } + // Hybrid platform + if (window && window.cordova) { + window.open(url, "_system"); + return Promise.resolve(true); + } + // Web platform + if (window) { + window.location.href = url; + return Promise.resolve(true); + } + return Promise.resolve(false); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/FindObjectWithGUID.js b/Source/javascriptsource/nanoflowcommons/actions/FindObjectWithGUID.js new file mode 100644 index 0000000..2e8c5e4 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/FindObjectWithGUID.js @@ -0,0 +1,22 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * @param {MxObject[]} list + * @param {string} objectGUID + * @returns {Promise.} + */ +export async function FindObjectWithGUID(list, objectGUID) { + // BEGIN USER CODE + return list.find(element => element.getGuid() === objectGUID); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GenerateUniqueID.js b/Source/javascriptsource/nanoflowcommons/actions/GenerateUniqueID.js new file mode 100644 index 0000000..990adaa --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GenerateUniqueID.js @@ -0,0 +1,62 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +const COUNTER_STORE = "idCounter"; +let locked = false; +let currentCounter; +function sleep(time) { + return new Promise(resolve => setTimeout(resolve, time)); +} +async function initializeCounter() { + currentCounter = JSON.parse((await getItem(COUNTER_STORE)) || "-1"); +} +async function getItem(key) { + if (navigator && navigator.product === "ReactNative") { + const AsyncStorage = (await import('@react-native-async-storage/async-storage')).default; + return AsyncStorage.getItem(key); + } + if (window) { + return window.localStorage.getItem(key); + } + throw new Error("No storage API available"); +} +async function setItem(key, value) { + if (navigator && navigator.product === "ReactNative") { + const AsyncStorage = (await import('@react-native-async-storage/async-storage')).default; + return AsyncStorage.setItem(key, value); + } + if (window) { + return window.localStorage.setItem(key, value); + } + throw new Error("No storage API available"); +} +// END EXTRA CODE + +/** + * Generates a unique ID based on the current session. + * @returns {Promise.} + */ +export async function GenerateUniqueID() { + // BEGIN USER CODE + const sessionId = mx.session.getConfig("sessionObjectId"); + const rnd = Math.round(Math.random() * 10000); + // eslint-disable-next-line no-unmodified-loop-condition + while (locked) { + await sleep(10); + } + locked = true; + if (typeof currentCounter === "undefined") { + await initializeCounter(); + } + await setItem(COUNTER_STORE, JSON.stringify(++currentCounter)); + locked = false; + return `${sessionId}:${currentCounter}:${rnd}`; + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GenerateUniqueID.json b/Source/javascriptsource/nanoflowcommons/actions/GenerateUniqueID.json new file mode 100644 index 0000000..431e88b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GenerateUniqueID.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-async-storage/async-storage": "2.0.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/Geocode.js b/Source/javascriptsource/nanoflowcommons/actions/Geocode.js new file mode 100644 index 0000000..0f55b1a --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/Geocode.js @@ -0,0 +1,119 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import Geodecoder from 'react-native-geocoder'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Geocoding is the process of converting addresses (like a street address) into geographic coordinates (latitude and longitude), which you can use to place markers on a map, or position the map. + * @param {string} address - This field is required. + * @param {"NanoflowCommons.GeocodingProvider.Google"|"NanoflowCommons.GeocodingProvider.Geocodio"|"NanoflowCommons.GeocodingProvider.LocationIQ"|"NanoflowCommons.GeocodingProvider.MapQuest"} geocodingProvider - This field is required for use on web. + * @param {string} providerApiKey - This field is required for use on web. Note that the keys are accessible by the end users and should be protected in other ways; for example restricted domain name. + * @returns {Promise.} + */ +export async function Geocode(address, geocodingProvider, providerApiKey) { + // BEGIN USER CODE + /** + * Documentation: + * - Native: https://github.com/devfd/react-native-geocoder + * - Google: https://developers.google.com/maps/documentation/geocoding/intro#GeocodingRequests + * - Geocodio: https://www.geocod.io/docs/#geocoding + * - LocationIQ: https://locationiq.com/docs-html/index.html#search-forward-geocoding + * - MapQuest: https://developer.mapquest.com/documentation/open/geocoding-api/address/get/ + */ + if (!address) { + return Promise.reject(new Error("Input parameter 'Address' is required")); + } + if (navigator && navigator.product === "ReactNative") { + return Geodecoder.geocodeAddress(address).then(results => { + if (results.length === 0) { + return Promise.reject(new Error("No results found")); + } + return createMxObject(String(results[0].position.lat), String(results[0].position.lng)); + }); + } + if (!geocodingProvider) { + return Promise.reject(new Error("Input parameter 'Geocoding provider' is required for use on web")); + } + if (!providerApiKey) { + return Promise.reject(new Error("Input parameter 'Provider api key' is required for use on web")); + } + const url = getApiUrl(geocodingProvider, address, providerApiKey); + return fetch(url) + .then(response => response.json().catch(() => response.text().then(text => { + return Promise.reject(new Error(text)); + }))) + .then(response => getLatLong(geocodingProvider, response)) + .then(latLong => createMxObject(latLong[0], latLong[1])) + .catch(error => Promise.reject(error)); + function getApiUrl(provider, query, key) { + query = encodeURIComponent(query); + key = encodeURIComponent(key); + switch (provider) { + case "Google": + return `https://maps.googleapis.com/maps/api/geocode/json?address=${query}&key=${key}`; + case "Geocodio": + return `https://api.geocod.io/v1.3/geocode?q=${query}&api_key=${key}`; + case "LocationIQ": + return `https://eu1.locationiq.com/v1/search.php?format=json&q=${query}&key=${key}`; + case "MapQuest": + return `https://open.mapquestapi.com/geocoding/v1/address?location=${query}&key=${key}`; + } + } + function getLatLong(provider, response) { + switch (provider) { + case "Google": + if (response.status !== "OK") { + throw new Error(response.error_message); + } + return [response.results[0].geometry.location.lat, response.results[0].geometry.location.lng]; + case "Geocodio": + if (response.error) { + throw new Error(response.error); + } + if (response.results.length === 0) { + throw new Error("No results found"); + } + return [response.results[0].location.lat, response.results[0].location.lng]; + case "LocationIQ": + if (response.error) { + throw new Error(response.error); + } + if (response.length === 0) { + throw new Error("No results found"); + } + return [response[0].lat, response[0].lon]; + case "MapQuest": + if (response.info.statuscode !== 0) { + throw new Error(response.info.messages.join(", ")); + } + if (response.results.length === 0) { + throw new Error("No results found"); + } + return [response.results[0].locations[0].latLng.lat, response.results[0].locations[0].latLng.lng]; + } + } + function createMxObject(lat, long) { + return new Promise((resolve, reject) => { + mx.data.create({ + entity: "NanoflowCommons.Position", + callback: mxObject => { + mxObject.set("Latitude", lat); + mxObject.set("Longitude", long); + resolve(mxObject); + }, + error: () => { + reject(new Error("Could not create 'NanoflowCommons.Position' object to store coordinates")); + } + }); + }); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/Geocode.json b/Source/javascriptsource/nanoflowcommons/actions/Geocode.json new file mode 100644 index 0000000..aa3b0e5 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/Geocode.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "react-native-geocoder": "0.5.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocation.js b/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocation.js new file mode 100644 index 0000000..ac1fc2f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocation.js @@ -0,0 +1,110 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import Geolocation from '@react-native-community/geolocation'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * This action retrieves the current geographical position of a user/device. + * + * Since this can compromise privacy, the position is not available unless the user approves it. The web browser will request the permission at the first time the location is requested. When denied by the user it will not prompt a second time. + * + * On hybrid and native platforms the permission can be requested with the `RequestLocationPermission` action. + * + * Best practices: + * https://developers.google.com/web/fundamentals/native-hardware/user-location/ + * @param {Big} timeout - The maximum length of time (in milliseconds) the device is allowed to take in order to return a location. If set as empty, default value will be 30 second timeout. + * @param {Big} maximumAge - The maximum age (in milliseconds) of a possible cached position that is acceptable to return. If set to 0, it means that the device cannot use a cached position and must attempt to retrieve the real current position. By default the device will always return a cached position regardless of its age. + * @param {boolean} highAccuracy - Use a higher accuracy method to determine the current location. Setting this to false saves battery life. + * @returns {Promise.} + */ +export async function GetCurrentLocation(timeout, maximumAge, highAccuracy) { + // BEGIN USER CODE + let reactNativeModule; + let geolocationModule; + if (navigator && navigator.product === "ReactNative") { + reactNativeModule = require("react-native"); + if (!reactNativeModule) { + return Promise.reject(new Error("React Native module could not be found")); + } + if (reactNativeModule.NativeModules.RNFusedLocation) { + geolocationModule = (await import('@react-native-community/geolocation')).default; + } + else if (reactNativeModule.NativeModules.RNCGeolocation) { + geolocationModule = Geolocation; + } + else { + return Promise.reject(new Error("Geolocation module could not be found")); + } + } + else if (navigator && navigator.geolocation) { + geolocationModule = navigator.geolocation; + } + else { + return Promise.reject(new Error("Geolocation module could not be found")); + } + return new Promise((resolve, reject) => { + const options = getOptions(); + geolocationModule === null || geolocationModule === void 0 ? void 0 : geolocationModule.getCurrentPosition(onSuccess, onError, options); + function onSuccess(position) { + mx.data.create({ + entity: "NanoflowCommons.Geolocation", + callback: mxObject => { + const geolocation = mapPositionToMxObject(mxObject, position); + resolve(geolocation); + }, + error: () => reject(new Error("Could not create 'NanoflowCommons.Geolocation' object to store location")) + }); + } + function onError(error) { + return reject(new Error(error.message)); + } + function getOptions() { + let timeoutNumber = timeout && Number(timeout.toString()); + const maximumAgeNumber = maximumAge && Number(maximumAge.toString()); + // If the timeout is 0 or undefined (empty), it causes a crash on iOS. + // If the timeout is undefined (empty); we set timeout to 30 sec (default timeout) + // If the timeout is 0; we set timeout to 1 hour (no timeout) + if ((reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Platform.OS) === "ios") { + if (timeoutNumber === undefined) { + timeoutNumber = 30000; + } + else if (timeoutNumber === 0) { + timeoutNumber = 3600000; + } + } + return { + timeout: timeoutNumber, + maximumAge: maximumAgeNumber, + enableHighAccuracy: highAccuracy + }; + } + function mapPositionToMxObject(mxObject, position) { + mxObject.set("Timestamp", new Date(position.timestamp)); + mxObject.set("Latitude", new Big(position.coords.latitude.toFixed(8))); + mxObject.set("Longitude", new Big(position.coords.longitude.toFixed(8))); + mxObject.set("Accuracy", new Big(position.coords.accuracy.toFixed(8))); + if (position.coords.altitude != null) { + mxObject.set("Altitude", new Big(position.coords.altitude.toFixed(8))); + } + if (position.coords.altitudeAccuracy != null && position.coords.altitudeAccuracy !== -1) { + mxObject.set("AltitudeAccuracy", new Big(position.coords.altitudeAccuracy.toFixed(8))); + } + if (position.coords.heading != null && position.coords.heading !== -1) { + mxObject.set("Heading", new Big(position.coords.heading.toFixed(8))); + } + if (position.coords.speed != null && position.coords.speed !== -1) { + mxObject.set("Speed", new Big(position.coords.speed.toFixed(8))); + } + return mxObject; + } + }); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocation.json b/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocation.json new file mode 100644 index 0000000..e070121 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocation.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-community/geolocation": "3.4.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocationMinimumAccuracy.js b/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocationMinimumAccuracy.js new file mode 100644 index 0000000..625a6e3 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocationMinimumAccuracy.js @@ -0,0 +1,143 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import Geolocation from '@react-native-community/geolocation'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * This action retrieves the current geographical position of a user/device with a minimum accuracy as parameter. If a position is not acquired with minimum accuracy within a specific timeout it will retrieve the last most precise location. + * + * Since this can compromise privacy, the position is not available unless the user approves it. The web browser will request the permission at the first time the location is requested. When denied by the user it will not prompt a second time. + * + * On hybrid and native platforms the permission can be requested with the `RequestLocationPermission` action. + * + * Best practices: + * https://developers.google.com/web/fundamentals/native-hardware/user-location/ + * @param {Big} timeout - The maximum length of time (in milliseconds) the device is allowed to take in order to return a location. If set as empty, default value will be 30 second timeout. + * @param {Big} maximumAge - The maximum age (in milliseconds) of a possible cached position that is acceptable to return. If set to 0, it means that the device cannot use a cached position and must attempt to retrieve the real current position. By default the device will always return a cached position regardless of its age. + * @param {boolean} highAccuracy - Use a higher accuracy method to determine the current location. Setting this to false saves battery life. + * @param {Big} minimumAccuracy - The minimum accuracy to be received in meters. Less amount of meters, more precise is the location. + * @returns {Promise.} + */ +export async function GetCurrentLocationMinimumAccuracy(timeout, maximumAge, highAccuracy, minimumAccuracy) { + // BEGIN USER CODE + let reactNativeModule; + let geolocationModule; + if (navigator && navigator.product === "ReactNative") { + reactNativeModule = require("react-native"); + if (!reactNativeModule) { + return Promise.reject(new Error("React Native module could not be found")); + } + if (reactNativeModule.NativeModules.RNFusedLocation) { + geolocationModule = (await import('@react-native-community/geolocation')).default; + } + else if (reactNativeModule.NativeModules.RNCGeolocation) { + geolocationModule = Geolocation; + } + else { + return Promise.reject(new Error("Geolocation module could not be found")); + } + } + else if (navigator && navigator.geolocation) { + geolocationModule = navigator.geolocation; + } + else { + return Promise.reject(new Error("Geolocation module could not be found")); + } + return new Promise((resolve, reject) => { + if (!geolocationModule) { + return reject(new Error("Geolocation module could not be found")); + } + const options = getOptions(); + // This action is only required while running in PWA or hybrid. + if (navigator && (!navigator.product || navigator.product !== "ReactNative")) { + // This ensures the browser will not ignore the maximumAge https://stackoverflow.com/questions/3397585/navigator-geolocation-getcurrentposition-sometimes-works-sometimes-doesnt/31916631#31916631 + geolocationModule.getCurrentPosition( + // eslint-disable-next-line @typescript-eslint/no-empty-function + () => { }, + // eslint-disable-next-line @typescript-eslint/no-empty-function + () => { }, {}); + } + const timeoutId = setTimeout(onTimeout, Number(timeout)); + const watchId = geolocationModule.watchPosition(onSuccess, onError, options); + let lastAccruedPosition; + function createGeolocationObject(position) { + mx.data.create({ + entity: "NanoflowCommons.Geolocation", + callback: mxObject => resolve(mapPositionToMxObject(mxObject, position)), + error: () => reject(new Error("Could not create 'NanoflowCommons.Geolocation' object to store location")) + }); + } + function onTimeout() { + geolocationModule === null || geolocationModule === void 0 ? void 0 : geolocationModule.clearWatch(watchId); + if (lastAccruedPosition) { + createGeolocationObject(lastAccruedPosition); + } + else { + reject(new Error("Timeout expired")); + } + } + function onSuccess(position) { + if (!minimumAccuracy || Number(minimumAccuracy) >= position.coords.accuracy) { + clearTimeout(timeoutId); + geolocationModule === null || geolocationModule === void 0 ? void 0 : geolocationModule.clearWatch(watchId); + createGeolocationObject(position); + } + else { + if (!lastAccruedPosition || position.coords.accuracy < lastAccruedPosition.coords.accuracy) { + lastAccruedPosition = position; + } + } + } + function onError(error) { + return reject(new Error(error.message)); + } + function getOptions() { + let timeoutNumber = timeout && Number(timeout.toString()); + const maximumAgeNumber = maximumAge && Number(maximumAge.toString()); + // If the timeout is 0 or undefined (empty), it causes a crash on iOS. + // If the timeout is undefined (empty); we set timeout to 30 sec (default timeout) + // If the timeout is 0; we set timeout to 1 hour (no timeout) + if ((reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Platform.OS) === "ios") { + if (timeoutNumber === undefined) { + timeoutNumber = 30000; + } + else if (timeoutNumber === 0) { + timeoutNumber = 3600000; + } + } + return { + timeout: timeoutNumber, + maximumAge: maximumAgeNumber, + enableHighAccuracy: highAccuracy + }; + } + function mapPositionToMxObject(mxObject, position) { + mxObject.set("Timestamp", new Date(position.timestamp)); + mxObject.set("Latitude", new Big(position.coords.latitude.toFixed(8))); + mxObject.set("Longitude", new Big(position.coords.longitude.toFixed(8))); + mxObject.set("Accuracy", new Big(position.coords.accuracy.toFixed(8))); + if (position.coords.altitude != null) { + mxObject.set("Altitude", new Big(position.coords.altitude.toFixed(8))); + } + if (position.coords.altitudeAccuracy != null && position.coords.altitudeAccuracy !== -1) { + mxObject.set("AltitudeAccuracy", new Big(position.coords.altitudeAccuracy.toFixed(8))); + } + if (position.coords.heading != null && position.coords.heading !== -1) { + mxObject.set("Heading", new Big(position.coords.heading.toFixed(8))); + } + if (position.coords.speed != null && position.coords.speed !== -1) { + mxObject.set("Speed", new Big(position.coords.speed.toFixed(8))); + } + return mxObject; + } + }); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocationMinimumAccuracy.json b/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocationMinimumAccuracy.json new file mode 100644 index 0000000..e070121 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetCurrentLocationMinimumAccuracy.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-community/geolocation": "3.4.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetGuid.js b/Source/javascriptsource/nanoflowcommons/actions/GetGuid.js new file mode 100644 index 0000000..36a208b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetGuid.js @@ -0,0 +1,25 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Get the Mendix Object GUID. + * @param {MxObject} entityObject - This field is required. + * @returns {Promise.} + */ +export async function GetGuid(entityObject) { + // BEGIN USER CODE + if (!entityObject) { + return Promise.reject(new Error("Input parameter 'Entity object' is required.")); + } + return Promise.resolve(entityObject.getGuid()); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetObjectByGuid.js b/Source/javascriptsource/nanoflowcommons/actions/GetObjectByGuid.js new file mode 100644 index 0000000..c388032 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetObjectByGuid.js @@ -0,0 +1,41 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Get a Mendix object by its GUID. + * @param {string} entity - This field is required. + * @param {string} objectGuid - This field is required. + * @returns {Promise.} + */ +export async function GetObjectByGuid(entity, objectGuid) { + // BEGIN USER CODE + if (!entity) { + return Promise.reject(new Error("Input parameter 'Entity' is required.")); + } + if (!objectGuid) { + return Promise.reject(new Error("Input parameter 'Object guid' is required.")); + } + return new Promise((resolve, reject) => { + mx.data.get({ + guid: objectGuid, + callback: object => { + if (object) { + resolve(object); + } + else { + reject(new Error("'Object guid' not found")); + } + } + }); + }); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetPlatform.js b/Source/javascriptsource/nanoflowcommons/actions/GetPlatform.js new file mode 100644 index 0000000..6c55d6b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetPlatform.js @@ -0,0 +1,29 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Get the client platform (NanoflowCommons.Platform) where the action is running. + * @returns {Promise.<"NanoflowCommons.Platform.Web"|"NanoflowCommons.Platform.Native_mobile"|"NanoflowCommons.Platform.Hybrid_mobile">} + */ +export async function GetPlatform() { + // BEGIN USER CODE + if (window && window.cordova) { + return Promise.resolve("Hybrid_mobile"); + } + else if (navigator && navigator.product === "ReactNative") { + return Promise.resolve("Native_mobile"); + } + else { + return Promise.resolve("Web"); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetRemoteUrl.js b/Source/javascriptsource/nanoflowcommons/actions/GetRemoteUrl.js new file mode 100644 index 0000000..014573c --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetRemoteUrl.js @@ -0,0 +1,20 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * @returns {Promise.} + */ +export async function GetRemoteUrl() { + // BEGIN USER CODE + return mx.remoteUrl; + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObject.js b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObject.js new file mode 100644 index 0000000..ad96dbc --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObject.js @@ -0,0 +1,101 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Store a Mendix object in device storage, identified by a unique key. Can be accessed by the GetStorageItemObject action. Please note that users can clear the device storage. + * @param {string} key - This field is required. + * @param {string} entity - This field is required. + * @returns {Promise.} + */ +export async function GetStorageItemObject(key, entity) { + // BEGIN USER CODE + if (!key) { + return Promise.reject(new Error("Input parameter 'Key' is required")); + } + if (!entity) { + return Promise.reject(new Error("Input parameter 'Entity' is required")); + } + return getItem(key).then(result => { + if (result === null) { + return Promise.reject(new Error(`Storage item '${key}' does not exist`)); + } + const value = JSON.parse(result); + return getOrCreateMxObject(entity, value).then(newObject => { + const newValue = serializeMxObject(newObject); + return setItem(key, JSON.stringify(newValue)).then(() => newObject); + }); + }); + function getItem(key) { + if (navigator && navigator.product === "ReactNative") { + return AsyncStorage.getItem(key); + } + if (window) { + const value = window.localStorage.getItem(key); + return Promise.resolve(value); + } + return Promise.reject(new Error("No storage API available")); + } + function setItem(key, value) { + if (navigator && navigator.product === "ReactNative") { + return AsyncStorage.setItem(key, value); + } + if (window) { + window.localStorage.setItem(key, value); + return Promise.resolve(); + } + return Promise.reject(new Error("No storage API available")); + } + function getOrCreateMxObject(entity, value) { + return getMxObject(value.guid).then(existingObject => { + if (existingObject) { + return existingObject; + } + else { + return createMxObject(entity, value); + } + }); + } + function getMxObject(guid) { + return new Promise((resolve, reject) => { + mx.data.get({ + guid, + callback: mxObject => resolve(mxObject), + error: error => reject(error) + }); + }); + } + function createMxObject(entity, value) { + return new Promise((resolve, reject) => { + mx.data.create({ + entity, + callback: mxObject => { + Object.keys(value) + .filter(attribute => attribute !== "guid") + .forEach(attributeName => { + const attributeValue = value[attributeName]; + mxObject.set(attributeName, attributeValue); + }); + resolve(mxObject); + }, + error: () => reject(new Error(`Could not create '${entity}' object`)) + }); + }); + } + function serializeMxObject(object) { + return object.getAttributes().reduce((accumulator, attributeName) => { + accumulator[attributeName] = object.get(attributeName); + return accumulator; + }, { guid: object.getGuid() }); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObject.json b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObject.json new file mode 100644 index 0000000..431e88b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObject.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-async-storage/async-storage": "2.0.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObjectList.js b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObjectList.js new file mode 100644 index 0000000..78e47b3 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObjectList.js @@ -0,0 +1,101 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Retrieve a local stored list of Mendix objects identified by a unique key. When objects are the client state it will be returned, if not they will be re-created. Note: when re-creating the local Mendix object the Mendix Object ID will never be the same. + * @param {string} key - This field is required. + * @param {string} entity - This field is required. + * @returns {Promise.} + */ +export async function GetStorageItemObjectList(key, entity) { + // BEGIN USER CODE + if (!key) { + return Promise.reject(new Error("Input parameter 'Key' is required")); + } + if (!entity) { + return Promise.reject(new Error("Input parameter 'Entity' is required")); + } + return getItem(key).then(result => { + if (result === null) { + return Promise.reject(new Error(`Storage item '${key}' does not exist`)); + } + const values = JSON.parse(result); + return Promise.all(values.map(value => getOrCreateMxObject(entity, value))).then(newObjects => { + const newValues = newObjects.map(newObject => serializeMxObject(newObject)); + return setItem(key, JSON.stringify(newValues)).then(() => newObjects); + }); + }); + function getItem(key) { + if (navigator && navigator.product === "ReactNative") { + return AsyncStorage.getItem(key); + } + if (window) { + const value = window.localStorage.getItem(key); + return Promise.resolve(value); + } + return Promise.reject(new Error("No storage API available")); + } + function setItem(key, value) { + if (navigator && navigator.product === "ReactNative") { + return AsyncStorage.setItem(key, value); + } + if (window) { + window.localStorage.setItem(key, value); + return Promise.resolve(); + } + return Promise.reject(new Error("No storage API available")); + } + function getOrCreateMxObject(entity, value) { + return getMxObject(value.guid).then(existingObject => { + if (existingObject) { + return existingObject; + } + else { + return createMxObject(entity, value); + } + }); + } + function getMxObject(guid) { + return new Promise((resolve, reject) => { + mx.data.get({ + guid, + callback: mxObject => resolve(mxObject), + error: error => reject(error) + }); + }); + } + function createMxObject(entity, value) { + return new Promise((resolve, reject) => { + mx.data.create({ + entity, + callback: mxObject => { + Object.keys(value) + .filter(attribute => attribute !== "guid") + .forEach(attributeName => { + const attributeValue = value[attributeName]; + mxObject.set(attributeName, attributeValue); + }); + resolve(mxObject); + }, + error: () => reject(new Error(`Could not create '${entity}' object`)) + }); + }); + } + function serializeMxObject(object) { + return object.getAttributes().reduce((accumulator, attributeName) => { + accumulator[attributeName] = object.get(attributeName); + return accumulator; + }, { guid: object.getGuid() }); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObjectList.json b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObjectList.json new file mode 100644 index 0000000..431e88b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemObjectList.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-async-storage/async-storage": "2.0.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemString.js b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemString.js new file mode 100644 index 0000000..2577ca1 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemString.js @@ -0,0 +1,42 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Retrieve a local stored string value identified by a unique key. This could be set via the SetStorageItemString JavaScript action. + * + * @param {string} key - This field is required. + * @returns {Promise.} + */ +export async function GetStorageItemString(key) { + // BEGIN USER CODE + if (!key) { + return Promise.reject(new Error("Input parameter 'Key' is required")); + } + return getItem(key).then(result => { + if (result === null) { + return Promise.reject(new Error(`Storage item '${key}' does not exist`)); + } + return result; + }); + async function getItem(key) { + if (navigator && navigator.product === "ReactNative") { + return AsyncStorage.getItem(key); + } + if (window) { + const value = window.localStorage.getItem(key); + return Promise.resolve(value); + } + return Promise.reject(new Error("No storage API available")); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemString.json b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemString.json new file mode 100644 index 0000000..431e88b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetStorageItemString.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-async-storage/async-storage": "2.0.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/GetStraightLineDistance.js b/Source/javascriptsource/nanoflowcommons/actions/GetStraightLineDistance.js new file mode 100644 index 0000000..f3e2c7e --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/GetStraightLineDistance.js @@ -0,0 +1,56 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +function deg2rad(deg) { + return deg.times(Math.PI / 180); +} +function kmToStatueMile(km) { + return km.div(1.609344); +} +function kmToNauticalMile(km) { + return km.div(1.852); +} +// END EXTRA CODE + +/** + * @param {Big} latitudePoint1 + * @param {Big} longitudePoint1 + * @param {Big} latitudePoint2 + * @param {Big} longitudePoint2 + * @param {"NanoflowCommons.Enum_DistanceUnit.KILOMETER"|"NanoflowCommons.Enum_DistanceUnit.STATUTE_MILE"|"NanoflowCommons.Enum_DistanceUnit.NAUTICAL_MILE"} unit + * @returns {Promise.} + */ +export async function GetStraightLineDistance(latitudePoint1, longitudePoint1, latitudePoint2, longitudePoint2, unit) { + // BEGIN USER CODE + const R = 6371; // Radius of the earth in km + const dLat = deg2rad(latitudePoint2.minus(latitudePoint1)).toNumber(); + const dLon = deg2rad(longitudePoint2.minus(longitudePoint1)).toNumber(); + const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(deg2rad(latitudePoint1).toNumber()) * + Math.cos(deg2rad(latitudePoint2).toNumber()) * + Math.sin(dLon / 2) * + Math.sin(dLon / 2); + const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + const d = new Big(R * c); // Distance in km + switch (unit) { + case "KILOMETER": { + return d; + } + case "STATUTE_MILE": { + return kmToStatueMile(d); + } + case "NAUTICAL_MILE": { + return kmToNauticalMile(d); + } + default: + throw new Error(`Unknown unit: ${unit}`); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/HideProgress.js b/Source/javascriptsource/nanoflowcommons/actions/HideProgress.js new file mode 100644 index 0000000..0c590e7 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/HideProgress.js @@ -0,0 +1,26 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Hides default progress bar + * @param {Big} identifier - Identifier of ui which should be hidden. This param is required + * @returns {Promise.} + */ +export async function HideProgress(identifier) { + // BEGIN USER CODE + if (identifier == null) { + return Promise.reject(new Error("Input parameter 'Identifier' is required")); + } + mx.ui.hideProgress(Number(identifier)); + return Promise.resolve(); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/IsConnectedToServer.js b/Source/javascriptsource/nanoflowcommons/actions/IsConnectedToServer.js new file mode 100644 index 0000000..717c5f7 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/IsConnectedToServer.js @@ -0,0 +1,27 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * @returns {Promise.} + */ +export async function IsConnectedToServer() { + // BEGIN USER CODE + try { + const response = await fetch(mx.remoteUrl); + return response.ok; + } + catch (err) { + console.error(err); + return false; + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/LICENSE b/Source/javascriptsource/nanoflowcommons/actions/LICENSE new file mode 100644 index 0000000..564e565 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/LICENSE @@ -0,0 +1,202 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Mendix BV + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/NavigateTo.js b/Source/javascriptsource/nanoflowcommons/actions/NavigateTo.js new file mode 100644 index 0000000..c2b022f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/NavigateTo.js @@ -0,0 +1,72 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Opens a navigation application on your device or a web browser showing Google Maps directions. + * @param {string} location - This field is required. + * @returns {Promise.} + */ +export async function NavigateTo(location) { + // BEGIN USER CODE + if (!location) { + return Promise.reject(new Error("Input parameter 'Location' is required")); + } + location = encodeURIComponent(location); + const iosUrl = `maps://maps.apple.com/?daddr=${location}`; + const androidUrl = `google.navigation:q=${location}`; + const webUrl = `https://maps.google.com/maps?daddr=${location}`; + // Native platform + if (navigator && navigator.product === "ReactNative") { + const Linking = require("react-native").Linking; + const Platform = require("react-native").Platform; + const url = Platform.select({ + ios: iosUrl, + default: androidUrl + }); + return Linking.canOpenURL(url).then(supported => { + if (!supported) { + return false; + } + return Linking.openURL(url).then(() => true); + }); + } + // Hybrid or mobile web platform + if (window && window.navigator.userAgent) { + // iOS platform + if (/iPad|iPhone|iPod/i.test(window.navigator.userAgent)) { + openUrl(iosUrl); + return Promise.resolve(true); + } + // Android platform + if (/android|sink/i.test(window.navigator.userAgent)) { + openUrl(androidUrl); + return Promise.resolve(true); + } + } + // Desktop web or other platform + if (window) { + window.location.href = webUrl; + return Promise.resolve(true); + } + return Promise.resolve(false); + function openUrl(url) { + // Hybrid platform + if (window && window.cordova) { + window.open(url, "_system"); + } + // Mobile web platform + if (window) { + window.location.href = url; + } + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/OpenMap.js b/Source/javascriptsource/nanoflowcommons/actions/OpenMap.js new file mode 100644 index 0000000..21eaf19 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/OpenMap.js @@ -0,0 +1,72 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Opens a map application on your device or a web browser showing Google Maps. + * @param {string} location - Can be either address, latitude/longitude (51.906, 4.488) or interest point.This field is required. + * @returns {Promise.} + */ +export async function OpenMap(location) { + // BEGIN USER CODE + if (!location) { + return Promise.reject(new Error("Input parameter 'Location' is required")); + } + location = encodeURIComponent(location); + const iosUrl = `maps://maps.apple.com/?q=${location}`; + const androidUrl = `geo:0,0?q=${location}`; + const webUrl = `https://maps.google.com/maps?q=${location}`; + // Native platform + if (navigator && navigator.product === "ReactNative") { + const Linking = require("react-native").Linking; + const Platform = require("react-native").Platform; + const url = Platform.select({ + ios: iosUrl, + default: androidUrl + }); + return Linking.canOpenURL(url).then(supported => { + if (!supported) { + return false; + } + return Linking.openURL(url).then(() => true); + }); + } + // Hybrid or mobile web platform + if (window && window.navigator.userAgent) { + // iOS platform + if (/iPad|iPhone|iPod/i.test(window.navigator.userAgent)) { + openUrl(iosUrl); + return Promise.resolve(true); + } + // Android platform + if (/android|sink/i.test(window.navigator.userAgent)) { + openUrl(androidUrl); + return Promise.resolve(true); + } + } + // Desktop web or other platform + if (window) { + window.location.href = webUrl; + return Promise.resolve(true); + } + return Promise.resolve(false); + function openUrl(url) { + // Hybrid platform + if (window && window.cordova) { + window.open(url, "_system"); + } + // Mobile web platform + if (window) { + window.location.href = url; + } + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/OpenURL.js b/Source/javascriptsource/nanoflowcommons/actions/OpenURL.js new file mode 100644 index 0000000..7ea14ff --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/OpenURL.js @@ -0,0 +1,45 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Opens the provided URL in the web browser. + * @param {string} url - This field is required. + * @returns {Promise.} + */ +export async function OpenURL(url) { + // BEGIN USER CODE + if (!url) { + return Promise.reject(new Error("Input parameter 'Url' is required")); + } + // Native platform + if (navigator && navigator.product === "ReactNative") { + const Linking = require("react-native").Linking; + return Linking.canOpenURL(url).then(supported => { + if (!supported) { + return false; + } + return Linking.openURL(url).then(() => true); + }); + } + // Hybrid platform + if (window && window.cordova) { + window.open(url, "_system"); + return Promise.resolve(true); + } + // Web platform + if (window) { + window.location.href = url; + return Promise.resolve(true); + } + return Promise.resolve(false); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/RefreshEntity.js b/Source/javascriptsource/nanoflowcommons/actions/RefreshEntity.js new file mode 100644 index 0000000..7af8641 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/RefreshEntity.js @@ -0,0 +1,30 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Updates an entity without needing to refresh the whole page via passing an entity. + * @param {string} entityToRefresh - Entity which will be refreshed. + * @returns {Promise.} + */ +export async function RefreshEntity(entityToRefresh) { + // BEGIN USER CODE + if (!entityToRefresh) { + return Promise.reject(new Error("EntityToRefresh parameter is required")); + } + return new Promise(resolve => { + mx.data.update({ + entity: entityToRefresh, + callback: () => resolve(true) + }); + }); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/RefreshObject.js b/Source/javascriptsource/nanoflowcommons/actions/RefreshObject.js new file mode 100644 index 0000000..9a819e3 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/RefreshObject.js @@ -0,0 +1,30 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Updates an entity object without needing to refresh the whole page via passing an entity object. + * @param {MxObject} objectToRefresh - Object which will be refreshed. + * @returns {Promise.} + */ +export async function RefreshObject(objectToRefresh) { + // BEGIN USER CODE + if (!objectToRefresh) { + return Promise.reject(new Error("ObjectToRefresh parameter is required")); + } + return new Promise(resolve => { + mx.data.update({ + guid: objectToRefresh.getGuid(), + callback: () => resolve(true) + }); + }); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/Reload.js b/Source/javascriptsource/nanoflowcommons/actions/Reload.js new file mode 100644 index 0000000..aa2fd72 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/Reload.js @@ -0,0 +1,25 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Reloads web and native applications. + * @returns {Promise.} + */ +export async function Reload() { + // BEGIN USER CODE + mx.reload(); + return new Promise(() => { + // Never resolve this pormise to ensure that the next action in the nanoflow (if any) + // will not be executed before the actual reload is happended. + }); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/RemoveStorageItem.js b/Source/javascriptsource/nanoflowcommons/actions/RemoveStorageItem.js new file mode 100644 index 0000000..67800d5 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/RemoveStorageItem.js @@ -0,0 +1,36 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Remove a content identified by a unique key. This could be set via any of the Set Storage Item JavaScript actions + * @param {string} key - This field is required. + * @returns {Promise.} + */ +export async function RemoveStorageItem(key) { + // BEGIN USER CODE + if (!key) { + return Promise.reject(new Error("Input parameter 'Key' is required")); + } + return removeItem(key).then(() => true); + function removeItem(key) { + if (navigator && navigator.product === "ReactNative") { + return AsyncStorage.removeItem(key); + } + if (window) { + window.localStorage.removeItem(key); + return Promise.resolve(); + } + return Promise.reject(new Error("No storage API available")); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/RemoveStorageItem.json b/Source/javascriptsource/nanoflowcommons/actions/RemoveStorageItem.json new file mode 100644 index 0000000..431e88b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/RemoveStorageItem.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-async-storage/async-storage": "2.0.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/RequestLocationPermission.js b/Source/javascriptsource/nanoflowcommons/actions/RequestLocationPermission.js new file mode 100644 index 0000000..4e5bc30 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/RequestLocationPermission.js @@ -0,0 +1,127 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import Geolocation from '@react-native-community/geolocation'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * On the native platform a request for permission should be made before the `GetCurrentLocation` action would work. + * @returns {Promise.} + */ +export async function RequestLocationPermission() { + // BEGIN USER CODE + var _a; + let reactNativeModule; + let geolocationModule; + const hasPermissionIOS = async () => { + const openSetting = () => { + reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Linking.openSettings().catch(() => { + reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Alert.alert("Unable to open settings."); + }); + }; + return geolocationModule + .requestAuthorization("whenInUse") + .then((status) => { + if (status === "granted") { + return true; + } + if (status === "denied") { + reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Alert.alert("Location permission denied."); + } + if (status === "disabled") { + reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Alert.alert("Location Services must be enabled to determine your location.", "", [ + { text: "Go to Settings", onPress: openSetting }, + { + text: "Don't Use Location" + } + ]); + } + return false; + }); + }; + const hasPermissionAndroid = async () => { + var _a, _b; + if (typeof ((_a = reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Platform) === null || _a === void 0 ? void 0 : _a.Version) === "number" && ((_b = reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Platform) === null || _b === void 0 ? void 0 : _b.Version) < 23) { + return true; + } + const androidLocationPermission = reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION; + if (!androidLocationPermission) { + return false; + } + return reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.PermissionsAndroid.check(androidLocationPermission).then(hasPermission => { + var _a; + return hasPermission + ? true + : (_a = reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.PermissionsAndroid) === null || _a === void 0 ? void 0 : _a.request(androidLocationPermission).then(status => { + if (status === (reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.PermissionsAndroid.RESULTS.GRANTED)) { + return true; + } + if (status === (reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.PermissionsAndroid.RESULTS.DENIED)) { + reactNativeModule.ToastAndroid.show("Location permission denied by user.", reactNativeModule.ToastAndroid.LONG); + } + else if (status === (reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN)) { + reactNativeModule.ToastAndroid.show("Location permission revoked by user.", reactNativeModule.ToastAndroid.LONG); + } + return false; + }); + }); + }; + const hasLocationPermission = async () => { + if ((reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Platform.OS) === "ios") { + const hasPermission = await hasPermissionIOS(); + return hasPermission; + } + if ((reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Platform.OS) === "android") { + const hasPermission = await hasPermissionAndroid(); + return hasPermission !== null && hasPermission !== void 0 ? hasPermission : false; + } + return Promise.reject(new Error("Unsupported platform")); + }; + const hasLocationPermissionForOldLibrary = async () => { + if ((reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.Platform.OS) === "android") { + const locationPermission = reactNativeModule.PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION; + return reactNativeModule.PermissionsAndroid.check(locationPermission).then(hasPermission => hasPermission + ? true + : reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.PermissionsAndroid.request(locationPermission).then(status => status === (reactNativeModule === null || reactNativeModule === void 0 ? void 0 : reactNativeModule.PermissionsAndroid.RESULTS.GRANTED))); + } + else if (geolocationModule) { + geolocationModule.requestAuthorization(() => { + return Promise.resolve(true); + }, (err) => { + return Promise.reject(err); + }); + } + return false; + }; + if (navigator && navigator.product === "ReactNative") { + reactNativeModule = require("react-native"); + if (!reactNativeModule) { + return Promise.reject(new Error("React Native module could not be found")); + } + if (reactNativeModule.NativeModules.RNFusedLocation) { + geolocationModule = (await import('@react-native-community/geolocation')).default; + return hasLocationPermission(); + } + else if (reactNativeModule.NativeModules.RNCGeolocation) { + geolocationModule = Geolocation; + return (_a = (await hasLocationPermissionForOldLibrary())) !== null && _a !== void 0 ? _a : false; + } + else { + return Promise.reject(new Error("Geolocation module could not be found")); + } + } + else if (navigator && navigator.geolocation) { + return Promise.reject(new Error("No permission request for location is required for web/hybrid platform")); + } + else { + return Promise.reject(new Error("Geolocation module could not be found")); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/RequestLocationPermission.json b/Source/javascriptsource/nanoflowcommons/actions/RequestLocationPermission.json new file mode 100644 index 0000000..e070121 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/RequestLocationPermission.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-community/geolocation": "3.4.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/ReverseGeocode.js b/Source/javascriptsource/nanoflowcommons/actions/ReverseGeocode.js new file mode 100644 index 0000000..e58da2f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/ReverseGeocode.js @@ -0,0 +1,109 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import Geodecoder from 'react-native-geocoder'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Reverse geocoding is the process of converting geographic coordinates (latitude and longitude) into a human-readable address. + * @param {string} latitude - This field is required. + * @param {string} longitude - This field is required. + * @param {"NanoflowCommons.GeocodingProvider.Google"|"NanoflowCommons.GeocodingProvider.Geocodio"|"NanoflowCommons.GeocodingProvider.LocationIQ"|"NanoflowCommons.GeocodingProvider.MapQuest"} geocodingProvider - This field is required for use on web. + * @param {string} providerApiKey - This field is required for use on web. Note that the keys are accessible by the end users and should be protected in other ways; for example restricted domain name. + * @returns {Promise.} + */ +export async function ReverseGeocode(latitude, longitude, geocodingProvider, providerApiKey) { + // BEGIN USER CODE + /** + * Documentation: + * - Native: https://github.com/devfd/react-native-geocoder + * - Google: https://developers.google.com/maps/documentation/geocoding/intro#ReverseGeocoding + * - Geocodio: https://www.geocod.io/docs/#reverse-geocoding + * - LocationIQ: https://locationiq.com/docs-html/index.html#reverse-geocoding + * - MapQuest: https://developer.mapquest.com/documentation/open/geocoding-api/address/get/ + */ + if (!latitude) { + return Promise.reject(new Error("Input parameter 'Latitude' is required")); + } + if (!longitude) { + return Promise.reject(new Error("Input parameter 'Longitude' is required")); + } + if (navigator && navigator.product === "ReactNative") { + const position = { lat: Number(latitude), lng: Number(longitude) }; + return Geodecoder.geocodePosition(position).then(results => { + if (results.length === 0) { + return Promise.reject(new Error("No results found")); + } + return results[0].formattedAddress; + }); + } + if (!geocodingProvider) { + return Promise.reject(new Error("Input parameter 'Geocoding provider' is required for use on web")); + } + if (!providerApiKey) { + return Promise.reject(new Error("Input parameter 'Provider api key' is required for use on web")); + } + latitude = encodeURIComponent(latitude); + longitude = encodeURIComponent(longitude); + providerApiKey = encodeURIComponent(providerApiKey); + const url = getApiUrl(geocodingProvider, latitude, longitude, providerApiKey); + return fetch(url) + .then(response => response.json().catch(() => response.text().then(text => { + return Promise.reject(new Error(text)); + }))) + .then(response => getAddress(geocodingProvider, response)) + .catch(error => Promise.reject(error)); + function getApiUrl(provider, lat, long, key) { + switch (provider) { + case "Google": + return `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${long}&key=${key}`; + case "Geocodio": + return `https://api.geocod.io/v1.3/reverse?q=${lat},${long}&api_key=${key}`; + case "LocationIQ": + return `https://eu1.locationiq.com/v1/reverse.php?format=json&lat=${lat}&lon=${long}&key=${key}`; + case "MapQuest": + return `https://www.mapquestapi.com/geocoding/v1/reverse?location=${lat},${long}&key=${key}`; + } + } + function getAddress(provider, response) { + switch (provider) { + case "Google": + if (response.status !== "OK") { + throw new Error(response.error_message); + } + return response.results[0].formatted_address; + case "Geocodio": + if (response.error) { + throw new Error(response.error); + } + if (response.results.length === 0) { + throw new Error("No results found"); + } + return response.results[0].formatted_address; + case "LocationIQ": + if (response.error) { + throw new Error(response.error); + } + return response.display_name; + case "MapQuest": + if (response.info.statuscode !== 0) { + throw new Error(response.info.messages.join(", ")); + } + if (response.results.length === 0) { + throw new Error("No results found"); + } + const location = response.results[0].locations[0]; + const city = location.adminArea5; + const country = location.adminArea1; + return `${location.street}, ${location.postalCode} ${city}, ${country}`; + } + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/ReverseGeocode.json b/Source/javascriptsource/nanoflowcommons/actions/ReverseGeocode.json new file mode 100644 index 0000000..aa3b0e5 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/ReverseGeocode.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "react-native-geocoder": "0.5.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/SendTextMessage.js b/Source/javascriptsource/nanoflowcommons/actions/SendTextMessage.js new file mode 100644 index 0000000..d70fc05 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/SendTextMessage.js @@ -0,0 +1,46 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Launches the text messaging app on your device. + * @param {string} phoneNumber - This field is required. + * @returns {Promise.} + */ +export async function SendTextMessage(phoneNumber) { + // BEGIN USER CODE + if (!phoneNumber) { + return Promise.reject(new Error("Input parameter 'Phone number' is required")); + } + const url = `sms:${encodeURI(phoneNumber)}`; + // Native platform + if (navigator && navigator.product === "ReactNative") { + const Linking = require("react-native").Linking; + return Linking.canOpenURL(url).then(supported => { + if (!supported) { + return false; + } + return Linking.openURL(url).then(() => true); + }); + } + // Hybrid platform + if (window && window.cordova) { + window.open(url, "_system"); + return Promise.resolve(true); + } + // Web platform + if (window) { + window.location.href = url; + return Promise.resolve(true); + } + return Promise.resolve(false); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObject.js b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObject.js new file mode 100644 index 0000000..a3d4355 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObject.js @@ -0,0 +1,47 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Store a Mendix object in device storage, identified by a unique key. Can be accesed by the GetStargeItemObject action. Please note that users can clear the device storage. + * @param {string} key - This field is required. + * @param {MxObject} value - This field is required. + * @returns {Promise.} + */ +export async function SetStorageItemObject(key, value) { + // BEGIN USER CODE + if (!key) { + return Promise.reject(new Error("Input parameter 'Key' is required")); + } + if (!value) { + return Promise.reject(new Error("Input parameter 'Value' is required")); + } + const serializedObject = serializeMxObject(value); + return setItem(key, JSON.stringify(serializedObject)); + function setItem(key, value) { + if (navigator && navigator.product === "ReactNative") { + return AsyncStorage.setItem(key, value); + } + if (window) { + window.localStorage.setItem(key, value); + return Promise.resolve(); + } + return Promise.reject(new Error("No storage API available")); + } + function serializeMxObject(object) { + return object.getAttributes().reduce((accumulator, attributeName) => { + accumulator[attributeName] = object.get(attributeName); + return accumulator; + }, { guid: object.getGuid() }); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObject.json b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObject.json new file mode 100644 index 0000000..431e88b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObject.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-async-storage/async-storage": "2.0.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObjectList.js b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObjectList.js new file mode 100644 index 0000000..b2c87c0 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObjectList.js @@ -0,0 +1,47 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Store a list of Mendix objects in device storage, identified by a unique key. Can be accessed by the GetStorageItemObject action. Please note that users can clear the device storage. + * @param {string} key - This field is required. + * @param {MxObject[]} value - This field is required. + * @returns {Promise.} + */ +export async function SetStorageItemObjectList(key, value) { + // BEGIN USER CODE + if (!key) { + return Promise.reject(new Error("Input parameter 'Key' is required")); + } + if (!value) { + return Promise.reject(new Error("Input parameter 'Value' is required")); + } + const serializedObjects = value.map(serializeMxObject); + return setItem(key, JSON.stringify(serializedObjects)); + function setItem(key, value) { + if (navigator && navigator.product === "ReactNative") { + return AsyncStorage.setItem(key, value); + } + if (window) { + window.localStorage.setItem(key, value); + return Promise.resolve(); + } + return Promise.reject(new Error("No storage API available")); + } + function serializeMxObject(object) { + return object.getAttributes().reduce((accumulator, attributeName) => { + accumulator[attributeName] = object.get(attributeName); + return accumulator; + }, { guid: object.getGuid() }); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObjectList.json b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObjectList.json new file mode 100644 index 0000000..431e88b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemObjectList.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-async-storage/async-storage": "2.0.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemString.js b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemString.js new file mode 100644 index 0000000..353c05f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemString.js @@ -0,0 +1,40 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Store a string value in the device storage, identified by a unique key. Can be accessed by the GetStorageItemObject action. Please note that users can clear the device storage. + * @param {string} key - This field is required. + * @param {string} value - This field is required. + * @returns {Promise.} + */ +export async function SetStorageItemString(key, value) { + // BEGIN USER CODE + if (!key) { + return Promise.reject(new Error("Input parameter 'Key' is required")); + } + if (!value) { + return Promise.reject(new Error("Input parameter 'Value' is required")); + } + return setItem(key, value); + function setItem(key, value) { + if (navigator && navigator.product === "ReactNative") { + return AsyncStorage.setItem(key, value); + } + if (window) { + window.localStorage.setItem(key, value); + return Promise.resolve(); + } + return Promise.reject(new Error("No storage API available")); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemString.json b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemString.json new file mode 100644 index 0000000..431e88b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/SetStorageItemString.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-async-storage/async-storage": "2.0.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/Share.js b/Source/javascriptsource/nanoflowcommons/actions/Share.js new file mode 100644 index 0000000..25ca948 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/Share.js @@ -0,0 +1,58 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Action to invoke the native sharing mechanism of the device. + * @param {string} url - The url to share. + * @param {string} text - The text to share. + * @param {string} title - An optional title for the message or url to share. Only some share targets use this value. + * @returns {Promise.} + */ +export async function Share(url, text, title) { + // BEGIN USER CODE + if (!text && !url) { + return Promise.reject(new Error("It is required to provide at least one of input parameters 'Text' and 'Url'")); + } + // Native platform + // Documentation https://facebook.github.io/react-native/docs/share + if (navigator && navigator.product === "ReactNative") { + const RNShare = require("react-native").Share; + const content = url && text ? { message: text + "\n" + url, title } : url ? { url, title } : { message: text, title }; + return RNShare.share(content).then(result => { + if (result.action === RNShare.dismissedAction) { + return false; + } + return true; + }); + } + // Web platform + // Documentation https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share + if (navigator && navigator.share) { + return navigator.share({ url, text, title }).then(() => true); + } + // Hybrid platform + // Documentation https://github.com/EddyVerbruggen/SocialSharing-PhoneGap-Plugin + if (window && window.plugins && window.plugins.socialsharing) { + return new Promise((resolve, reject) => { + window.plugins.socialsharing.shareWithOptions({ + message: text, + subject: title, + url + }, result => resolve(result.completed), errorMessage => reject(new Error(errorMessage))); + }); + } + if (document && document.location && document.location.protocol === "http:") { + return Promise.reject(new Error("This action requires a secure https: connection")); + } + return Promise.reject(new Error("This action is not supported by this browser")); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/ShowConfirmation.js b/Source/javascriptsource/nanoflowcommons/actions/ShowConfirmation.js new file mode 100644 index 0000000..9b7f35f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/ShowConfirmation.js @@ -0,0 +1,50 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Shows a confirmation dialog during the execution of a nanoflow, to make perform actions based on the user input. + * @param {string} titleCaption - Set to empty to use default text 'Confirmation'. (Only for native) + * @param {string} question - This field is required. + * @param {string} cancelButtonCaption - Set to empty to use default text 'Cancel'. + * @param {string} proceedButtonCaption - Set to empty to use default text 'OK'. + * @returns {Promise.} + */ +export async function ShowConfirmation(titleCaption, question, cancelButtonCaption, proceedButtonCaption) { + // BEGIN USER CODE + if (!question) { + return Promise.reject(new Error("Input parameter 'Question' is required")); + } + const cancel = cancelButtonCaption || "Cancel"; + const proceed = proceedButtonCaption || "OK"; + const title = titleCaption || "Confirmation"; + // Native platform + if (navigator && navigator.product === "ReactNative") { + const Alert = require("react-native").Alert; + return new Promise(resolve => { + Alert.alert(title, question, [ + { text: cancel, onPress: () => resolve(false), style: "cancel" }, + { text: proceed, onPress: () => resolve(true) } + ]); + }); + } + // Other platforms + return new Promise(resolve => { + mx.ui.confirmation({ + content: question, + proceed, + cancel, + handler: () => resolve(true), + onCancel: () => resolve(false) + }); + }); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/ShowProgress.js b/Source/javascriptsource/nanoflowcommons/actions/ShowProgress.js new file mode 100644 index 0000000..ff6a454 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/ShowProgress.js @@ -0,0 +1,27 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Shows default progress bar + * @param {string} message - The text to show while loading. + * @param {boolean} blocking - Block the user interface immediately. + * @returns {Promise.} + */ +export async function ShowProgress(message, blocking) { + // BEGIN USER CODE + const id = mx.ui.showProgress(message, blocking); + if (id !== undefined) { + return Promise.resolve(new Big(id)); + } + return Promise.reject(new Error("Could not open the loading dialog")); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/SignIn.js b/Source/javascriptsource/nanoflowcommons/actions/SignIn.js new file mode 100644 index 0000000..3bf29b9 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/SignIn.js @@ -0,0 +1,42 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Tries to login using a username and password. + * + * Returns an HTTP response status code, for example: + * - 200 when the login succeeds + * - 401 when the entered username or password is incorrect + * - 0 when the network connection is unavailable + * + * @param {string} username - This field is required. + * @param {string} password - This field is required. + * @param {boolean} [useAuthToken] - This field is optional. + * @returns {Promise.} + */ +export async function SignIn(username, password, useAuthToken) { + // BEGIN USER CODE + if (!username || !password) { + return Promise.resolve(new Big(401)); + } + return new Promise(resolve => { + const onSuccess = () => resolve(new Big(200)); + const onError = (error) => resolve(new Big(error.status)); + if (typeof useAuthToken === "undefined") { + mx.login(username, password, onSuccess, onError); + } + else { + mx.login2(username, password, useAuthToken, onSuccess, onError); + } + }); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/SignOut.js b/Source/javascriptsource/nanoflowcommons/actions/SignOut.js new file mode 100644 index 0000000..f9991e4 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/SignOut.js @@ -0,0 +1,28 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * If the user is logged in, logs out the user and restarts the client. + * + * If the user is not logged in, the return value is false + * + * @returns {Promise.} + */ +export async function SignOut() { + // BEGIN USER CODE + if (!mx.session.isGuest()) { + mx.logout(); + return Promise.resolve(true); + } + return Promise.resolve(false); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/StorageItemExists.js b/Source/javascriptsource/nanoflowcommons/actions/StorageItemExists.js new file mode 100644 index 0000000..13b7f6c --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/StorageItemExists.js @@ -0,0 +1,36 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; +import AsyncStorage from '@react-native-async-storage/async-storage'; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Check if an item exists in a device storage, identified by a unique key. The value could be set by a Set Storage Item action. + * @param {string} key - This field is required. + * @returns {Promise.} + */ +export async function StorageItemExists(key) { + // BEGIN USER CODE + if (!key) { + return Promise.reject(new Error("Input parameter 'Key' is required")); + } + return getItem(key).then(result => result !== null); + function getItem(key) { + if (navigator && navigator.product === "ReactNative") { + return AsyncStorage.getItem(key); + } + if (window) { + const value = window.localStorage.getItem(key); + return Promise.resolve(value); + } + return Promise.reject(new Error("No storage API available")); + } + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/StorageItemExists.json b/Source/javascriptsource/nanoflowcommons/actions/StorageItemExists.json new file mode 100644 index 0000000..431e88b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/StorageItemExists.json @@ -0,0 +1,5 @@ +{ + "nativeDependencies": { + "@react-native-async-storage/async-storage": "2.0.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/TimeBetween.js b/Source/javascriptsource/nanoflowcommons/actions/TimeBetween.js new file mode 100644 index 0000000..be6eaa6 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/TimeBetween.js @@ -0,0 +1,50 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * The TimeBetween function calculates the difference between the input Date and times in milliseconds, seconds, minutes, hours or days, depending on the unitOfTime. + * @param {Date} startDate + * @param {Date} endDate + * @param {string} unitOfTime - Must be one of: "MILLISECOND"|"SECOND"|"MINUTE"|"HOUR"|"DAY" + * @returns {Promise.} + */ +export async function TimeBetween(startDate, endDate, unitOfTime) { + // BEGIN USER CODE + if (startDate == null) { + throw new Error("Required field: startDate"); + } + if (endDate == null) { + throw new Error("Required field: endDate"); + } + if (unitOfTime == null) { + throw new Error("Required field: unitOfTime"); + } + const difference = endDate.getTime() - startDate.getTime(); + function getDiff(difference, unit) { + switch (unit) { + case "MILLISECOND": + return difference; + case "SECOND": + return difference / 1000; + case "MINUTE": + return difference / 60000; + case "HOUR": + return difference / 3600000; + case "DAY": + return difference / 86400000; + default: + throw new Error("Unit of time not supported: " + unit); + } + } + return new Big(getDiff(difference, unitOfTime)); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/ToggleSidebar.js b/Source/javascriptsource/nanoflowcommons/actions/ToggleSidebar.js new file mode 100644 index 0000000..c23337d --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/ToggleSidebar.js @@ -0,0 +1,25 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * @returns {Promise.} + */ +export async function ToggleSidebar() { + // BEGIN USER CODE + mx.ui.toggleSidebar(); + // Web platform + if (window && !(navigator && navigator.product === "ReactNative")) { + document.dispatchEvent(new CustomEvent("toggleSidebar")); + } + return Promise.resolve(); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/Wait.js b/Source/javascriptsource/nanoflowcommons/actions/Wait.js new file mode 100644 index 0000000..7c73358 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/Wait.js @@ -0,0 +1,27 @@ +// This file was generated by Mendix Studio Pro. +// +// WARNING: Only the following code will be retained when actions are regenerated: +// - the import list +// - the code between BEGIN USER CODE and END USER CODE +// - the code between BEGIN EXTRA CODE and END EXTRA CODE +// Other code you write will be lost the next time you deploy the project. +import { Big } from "big.js"; + +// BEGIN EXTRA CODE +// END EXTRA CODE + +/** + * Wait for number of milliseconds before continuing nanoflow execution. + * @param {Big} delay - The number of milliseconds to wait. This field is required. + * @returns {Promise.} + */ +export async function Wait(delay) { + // BEGIN USER CODE + if (delay == null) { + return Promise.reject(new Error("Input parameter 'delay' is required.")); + } + return new Promise(resolve => { + setTimeout(() => resolve(), Number(delay)); + }); + // END USER CODE +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/dependencies.json b/Source/javascriptsource/nanoflowcommons/actions/dependencies.json new file mode 100644 index 0000000..82516de --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/dependencies.json @@ -0,0 +1 @@ +[{"react-native-geocoder":{"version":"0.5.0","transitive":false,"url":"https://github.com/devfd/react-native-geocoder"}},{"@react-native-community/geolocation":{"version":"3.4.0","transitive":false,"url":"https://github.com/michalchudziak/react-native-geolocation#README.md"}},{"@react-native-async-storage/async-storage":{"version":"2.0.0","transitive":false,"url":"https://github.com/react-native-async-storage/async-storage#readme"}},{"merge-options":{"version":"3.0.4","transitive":true,"url":null}},{"is-plain-obj":{"version":"2.1.0","transitive":true,"url":null}},{"js-base64":{"version":"3.7.7","transitive":false,"url":null}}] \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/dependencies.txt b/Source/javascriptsource/nanoflowcommons/actions/dependencies.txt new file mode 100644 index 0000000..02f6e1b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/dependencies.txt @@ -0,0 +1,197 @@ +Name: react-native-geocoder +Version: 0.5.0 +License: MIT +Private: false +Description: react native geocoding and reverse geocoding +Repository: https://github.com/devfd/react-native-geocoder +Homepage: https://github.com/devfd/react-native-geocoder +License Copyright: +=== + +The MIT License (MIT) + +Copyright (c) 2015 Alexey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +--- + +Name: @react-native-community/geolocation +Version: 3.4.0 +License: MIT +Private: false +Description: React Native Geolocation Module for iOS and Android +Repository: https://github.com/michalchudziak/react-native-geolocation.git +Homepage: https://github.com/michalchudziak/react-native-geolocation#README.md +License Copyright: +=== + +MIT License + +Copyright (c) 2022-present, React Native Community + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +Name: @react-native-async-storage/async-storage +Version: 2.0.0 +License: MIT +Private: false +Description: Asynchronous, persistent, key-value storage system for React Native. +Repository: https://github.com/react-native-async-storage/async-storage.git +Homepage: https://github.com/react-native-async-storage/async-storage#readme +License Copyright: +=== + +MIT License + +Copyright (c) 2015-present, Facebook, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- + +Name: merge-options +Version: 3.0.4 +License: MIT +Private: false +Description: Merge Option Objects +Repository: schnittstabil/merge-options +License Copyright: +=== + +The MIT License (MIT) + +Copyright (c) Michael Mayer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +--- + +Name: is-plain-obj +Version: 2.1.0 +License: MIT +Private: false +Description: Check if a value is a plain object +Repository: sindresorhus/is-plain-obj +License Copyright: +=== + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +--- + +Name: js-base64 +Version: 3.7.7 +License: BSD-3-Clause +Private: false +Description: Yet another Base64 transcoder in pure-JS +Repository: git+https://github.com/dankogai/js-base64.git +License Copyright: +=== + +Copyright (c) 2014, Dan Kogai +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of {{{project}}} nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/LICENSE b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/LICENSE new file mode 100644 index 0000000..d902153 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2015-present, Facebook, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/README.md b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/README.md new file mode 100644 index 0000000..c6a10cc --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/README.md @@ -0,0 +1,52 @@ +# React Native Async Storage + +An asynchronous, unencrypted, persistent, key-value storage system for React +Native. + +## Supported platforms + +- Android +- iOS +- [macOS](https://github.com/react-native-async-storage/async-storage/releases/tag/v1.8.1) +- [Web](https://github.com/react-native-async-storage/async-storage/releases/tag/v1.9.0) +- [Windows](https://github.com/react-native-async-storage/async-storage/releases/tag/v1.10.0) + +## Getting Started + +Head over to the +[documentation](https://react-native-async-storage.github.io/async-storage/docs/install) +to learn more. + +## Running E2E locally + +### Android + +1. Create and start Android Emulator with Play services, API level 29 +2. Build app and run tests + ```shell + yarn bundle:android + yarn build:e2e:android + yarn test:e2e:android + ``` + +### iOS + +1. Create and start iPhone 14 simulator with iOS version 16.4 +2. Build app and run tests + ```shell + yarn bundle:ios + pod install --project-directory=example/ios + yarn build:e2e:ios + yarn test:e2e:ios + ``` + +## Contribution + +Pull requests are welcome. Please open an issue first to discuss what you would +like to change. + +See the [CONTRIBUTING](.github/CONTRIBUTING.md) file for more information. + +## License + +MIT diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.js new file mode 100644 index 0000000..2c9ef18 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.js @@ -0,0 +1,146 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _mergeOptions = _interopRequireDefault(require("merge-options")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) Nicolas Gallagher. + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// eslint-disable-next-line @typescript-eslint/ban-types + +// eslint-disable-next-line @typescript-eslint/ban-types + +const merge = _mergeOptions.default.bind({ + concatArrays: true, + ignoreUndefined: true +}); +function mergeLocalStorageItem(key, value) { + const oldValue = window.localStorage.getItem(key); + if (oldValue) { + const oldObject = JSON.parse(oldValue); + const newObject = JSON.parse(value); + const nextValue = JSON.stringify(merge(oldObject, newObject)); + window.localStorage.setItem(key, nextValue); + } else { + window.localStorage.setItem(key, value); + } +} +function createPromise(getValue, callback) { + return new Promise((resolve, reject) => { + try { + const value = getValue(); + callback === null || callback === void 0 ? void 0 : callback(null, value); + resolve(value); + } catch (err) { + callback === null || callback === void 0 ? void 0 : callback(err); + reject(err); + } + }); +} +function createPromiseAll(promises, callback, processResult) { + return Promise.all(promises).then(result => { + const value = (processResult === null || processResult === void 0 ? void 0 : processResult(result)) ?? null; + callback === null || callback === void 0 ? void 0 : callback(null, value); + return Promise.resolve(value); + }, errors => { + callback === null || callback === void 0 ? void 0 : callback(errors); + return Promise.reject(errors); + }); +} +const AsyncStorage = { + /** + * Fetches `key` value. + */ + getItem: (key, callback) => { + return createPromise(() => window.localStorage.getItem(key), callback); + }, + /** + * Sets `value` for `key`. + */ + setItem: (key, value, callback) => { + return createPromise(() => window.localStorage.setItem(key, value), callback); + }, + /** + * Removes a `key` + */ + removeItem: (key, callback) => { + return createPromise(() => window.localStorage.removeItem(key), callback); + }, + /** + * Merges existing value with input value, assuming they are stringified JSON. + */ + mergeItem: (key, value, callback) => { + return createPromise(() => mergeLocalStorageItem(key, value), callback); + }, + /** + * Erases *all* AsyncStorage for the domain. + */ + clear: callback => { + return createPromise(() => window.localStorage.clear(), callback); + }, + /** + * Gets *all* keys known to the app, for all callers, libraries, etc. + */ + getAllKeys: callback => { + return createPromise(() => { + const numberOfKeys = window.localStorage.length; + const keys = []; + for (let i = 0; i < numberOfKeys; i += 1) { + const key = window.localStorage.key(i) || ""; + keys.push(key); + } + return keys; + }, callback); + }, + /** + * (stub) Flushes any pending requests using a single batch call to get the data. + */ + flushGetRequests: () => undefined, + /** + * multiGet resolves to an array of key-value pair arrays that matches the + * input format of multiSet. + * + * multiGet(['k1', 'k2']) -> [['k1', 'val1'], ['k2', 'val2']] + */ + multiGet: (keys, callback) => { + const promises = keys.map(key => AsyncStorage.getItem(key)); + const processResult = result => result.map((value, i) => [keys[i], value]); + return createPromiseAll(promises, callback, processResult); + }, + /** + * Takes an array of key-value array pairs. + * multiSet([['k1', 'val1'], ['k2', 'val2']]) + */ + multiSet: (keyValuePairs, callback) => { + const promises = keyValuePairs.map(item => AsyncStorage.setItem(item[0], item[1])); + return createPromiseAll(promises, callback); + }, + /** + * Delete all the keys in the `keys` array. + */ + multiRemove: (keys, callback) => { + const promises = keys.map(key => AsyncStorage.removeItem(key)); + return createPromiseAll(promises, callback); + }, + /** + * Takes an array of key-value array pairs and merges them with existing + * values, assuming they are stringified JSON. + * + * multiMerge([['k1', 'val1'], ['k2', 'val2']]) + */ + multiMerge: (keyValuePairs, callback) => { + const promises = keyValuePairs.map(item => AsyncStorage.mergeItem(item[0], item[1])); + return createPromiseAll(promises, callback); + } +}; +var _default = AsyncStorage; +exports.default = _default; +//# sourceMappingURL=AsyncStorage.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.js.map new file mode 100644 index 0000000..ee9fedb --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_mergeOptions","_interopRequireDefault","require","obj","__esModule","default","merge","mergeOptions","bind","concatArrays","ignoreUndefined","mergeLocalStorageItem","key","value","oldValue","window","localStorage","getItem","oldObject","JSON","parse","newObject","nextValue","stringify","setItem","createPromise","getValue","callback","Promise","resolve","reject","err","createPromiseAll","promises","processResult","all","then","result","errors","AsyncStorage","removeItem","mergeItem","clear","getAllKeys","numberOfKeys","length","keys","i","push","flushGetRequests","undefined","multiGet","map","multiSet","keyValuePairs","item","multiRemove","multiMerge","_default","exports"],"sources":["AsyncStorage.ts"],"sourcesContent":["/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport mergeOptions from \"merge-options\";\nimport type {\n AsyncStorageStatic,\n MultiCallback,\n MultiGetCallback,\n} from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/ban-types\ntype OnMultiResult = Function;\n// eslint-disable-next-line @typescript-eslint/ban-types\ntype OnResult = Function;\n\nconst merge = mergeOptions.bind({\n concatArrays: true,\n ignoreUndefined: true,\n});\n\nfunction mergeLocalStorageItem(key: string, value: string) {\n const oldValue = window.localStorage.getItem(key);\n if (oldValue) {\n const oldObject = JSON.parse(oldValue);\n const newObject = JSON.parse(value);\n const nextValue = JSON.stringify(merge(oldObject, newObject));\n window.localStorage.setItem(key, nextValue);\n } else {\n window.localStorage.setItem(key, value);\n }\n}\n\nfunction createPromise(\n getValue: () => Result,\n callback?: Callback\n): Promise {\n return new Promise((resolve, reject) => {\n try {\n const value = getValue();\n callback?.(null, value);\n resolve(value);\n } catch (err) {\n callback?.(err);\n reject(err);\n }\n });\n}\n\nfunction createPromiseAll<\n ReturnType,\n Result,\n ResultProcessor extends OnMultiResult\n>(\n promises: Promise[],\n callback?: MultiCallback | MultiGetCallback,\n processResult?: ResultProcessor\n): Promise {\n return Promise.all(promises).then(\n (result) => {\n const value = processResult?.(result) ?? null;\n callback?.(null, value);\n return Promise.resolve(value);\n },\n (errors) => {\n callback?.(errors);\n return Promise.reject(errors);\n }\n );\n}\n\nconst AsyncStorage: AsyncStorageStatic = {\n /**\n * Fetches `key` value.\n */\n getItem: (key, callback) => {\n return createPromise(() => window.localStorage.getItem(key), callback);\n },\n\n /**\n * Sets `value` for `key`.\n */\n setItem: (key, value, callback) => {\n return createPromise(\n () => window.localStorage.setItem(key, value),\n callback\n );\n },\n\n /**\n * Removes a `key`\n */\n removeItem: (key, callback) => {\n return createPromise(() => window.localStorage.removeItem(key), callback);\n },\n\n /**\n * Merges existing value with input value, assuming they are stringified JSON.\n */\n mergeItem: (key, value, callback) => {\n return createPromise(() => mergeLocalStorageItem(key, value), callback);\n },\n\n /**\n * Erases *all* AsyncStorage for the domain.\n */\n clear: (callback) => {\n return createPromise(() => window.localStorage.clear(), callback);\n },\n\n /**\n * Gets *all* keys known to the app, for all callers, libraries, etc.\n */\n getAllKeys: (callback) => {\n return createPromise(() => {\n const numberOfKeys = window.localStorage.length;\n const keys: string[] = [];\n for (let i = 0; i < numberOfKeys; i += 1) {\n const key = window.localStorage.key(i) || \"\";\n keys.push(key);\n }\n return keys;\n }, callback);\n },\n\n /**\n * (stub) Flushes any pending requests using a single batch call to get the data.\n */\n flushGetRequests: () => undefined,\n\n /**\n * multiGet resolves to an array of key-value pair arrays that matches the\n * input format of multiSet.\n *\n * multiGet(['k1', 'k2']) -> [['k1', 'val1'], ['k2', 'val2']]\n */\n multiGet: (keys, callback) => {\n const promises = keys.map((key) => AsyncStorage.getItem(key));\n const processResult = (result: string[]) =>\n result.map((value, i) => [keys[i], value]);\n return createPromiseAll(promises, callback, processResult);\n },\n\n /**\n * Takes an array of key-value array pairs.\n * multiSet([['k1', 'val1'], ['k2', 'val2']])\n */\n multiSet: (keyValuePairs, callback) => {\n const promises = keyValuePairs.map((item) =>\n AsyncStorage.setItem(item[0], item[1])\n );\n return createPromiseAll(promises, callback);\n },\n\n /**\n * Delete all the keys in the `keys` array.\n */\n multiRemove: (keys, callback) => {\n const promises = keys.map((key) => AsyncStorage.removeItem(key));\n return createPromiseAll(promises, callback);\n },\n\n /**\n * Takes an array of key-value array pairs and merges them with existing\n * values, assuming they are stringified JSON.\n *\n * multiMerge([['k1', 'val1'], ['k2', 'val2']])\n */\n multiMerge: (keyValuePairs, callback) => {\n const promises = keyValuePairs.map((item) =>\n AsyncStorage.mergeItem(item[0], item[1])\n );\n return createPromiseAll(promises, callback);\n },\n};\n\nexport default AsyncStorage;\n"],"mappings":";;;;;;AAQA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAyC,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AARzC;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;;AAEA;;AAGA,MAAMG,KAAK,GAAGC,qBAAY,CAACC,IAAI,CAAC;EAC9BC,YAAY,EAAE,IAAI;EAClBC,eAAe,EAAE;AACnB,CAAC,CAAC;AAEF,SAASC,qBAAqBA,CAACC,GAAW,EAAEC,KAAa,EAAE;EACzD,MAAMC,QAAQ,GAAGC,MAAM,CAACC,YAAY,CAACC,OAAO,CAACL,GAAG,CAAC;EACjD,IAAIE,QAAQ,EAAE;IACZ,MAAMI,SAAS,GAAGC,IAAI,CAACC,KAAK,CAACN,QAAQ,CAAC;IACtC,MAAMO,SAAS,GAAGF,IAAI,CAACC,KAAK,CAACP,KAAK,CAAC;IACnC,MAAMS,SAAS,GAAGH,IAAI,CAACI,SAAS,CAACjB,KAAK,CAACY,SAAS,EAAEG,SAAS,CAAC,CAAC;IAC7DN,MAAM,CAACC,YAAY,CAACQ,OAAO,CAACZ,GAAG,EAAEU,SAAS,CAAC;EAC7C,CAAC,MAAM;IACLP,MAAM,CAACC,YAAY,CAACQ,OAAO,CAACZ,GAAG,EAAEC,KAAK,CAAC;EACzC;AACF;AAEA,SAASY,aAAaA,CACpBC,QAAsB,EACtBC,QAAmB,EACF;EACjB,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAI;MACF,MAAMjB,KAAK,GAAGa,QAAQ,CAAC,CAAC;MACxBC,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAG,IAAI,EAAEd,KAAK,CAAC;MACvBgB,OAAO,CAAChB,KAAK,CAAC;IAChB,CAAC,CAAC,OAAOkB,GAAG,EAAE;MACZJ,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGI,GAAG,CAAC;MACfD,MAAM,CAACC,GAAG,CAAC;IACb;EACF,CAAC,CAAC;AACJ;AAEA,SAASC,gBAAgBA,CAKvBC,QAA2B,EAC3BN,QAA2C,EAC3CO,aAA+B,EACV;EACrB,OAAON,OAAO,CAACO,GAAG,CAACF,QAAQ,CAAC,CAACG,IAAI,CAC9BC,MAAM,IAAK;IACV,MAAMxB,KAAK,GAAG,CAAAqB,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAGG,MAAM,CAAC,KAAI,IAAI;IAC7CV,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAG,IAAI,EAAEd,KAAK,CAAC;IACvB,OAAOe,OAAO,CAACC,OAAO,CAAChB,KAAK,CAAC;EAC/B,CAAC,EACAyB,MAAM,IAAK;IACVX,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGW,MAAM,CAAC;IAClB,OAAOV,OAAO,CAACE,MAAM,CAACQ,MAAM,CAAC;EAC/B,CACF,CAAC;AACH;AAEA,MAAMC,YAAgC,GAAG;EACvC;AACF;AACA;EACEtB,OAAO,EAAEA,CAACL,GAAG,EAAEe,QAAQ,KAAK;IAC1B,OAAOF,aAAa,CAAC,MAAMV,MAAM,CAACC,YAAY,CAACC,OAAO,CAACL,GAAG,CAAC,EAAEe,QAAQ,CAAC;EACxE,CAAC;EAED;AACF;AACA;EACEH,OAAO,EAAEA,CAACZ,GAAG,EAAEC,KAAK,EAAEc,QAAQ,KAAK;IACjC,OAAOF,aAAa,CAClB,MAAMV,MAAM,CAACC,YAAY,CAACQ,OAAO,CAACZ,GAAG,EAAEC,KAAK,CAAC,EAC7Cc,QACF,CAAC;EACH,CAAC;EAED;AACF;AACA;EACEa,UAAU,EAAEA,CAAC5B,GAAG,EAAEe,QAAQ,KAAK;IAC7B,OAAOF,aAAa,CAAC,MAAMV,MAAM,CAACC,YAAY,CAACwB,UAAU,CAAC5B,GAAG,CAAC,EAAEe,QAAQ,CAAC;EAC3E,CAAC;EAED;AACF;AACA;EACEc,SAAS,EAAEA,CAAC7B,GAAG,EAAEC,KAAK,EAAEc,QAAQ,KAAK;IACnC,OAAOF,aAAa,CAAC,MAAMd,qBAAqB,CAACC,GAAG,EAAEC,KAAK,CAAC,EAAEc,QAAQ,CAAC;EACzE,CAAC;EAED;AACF;AACA;EACEe,KAAK,EAAGf,QAAQ,IAAK;IACnB,OAAOF,aAAa,CAAC,MAAMV,MAAM,CAACC,YAAY,CAAC0B,KAAK,CAAC,CAAC,EAAEf,QAAQ,CAAC;EACnE,CAAC;EAED;AACF;AACA;EACEgB,UAAU,EAAGhB,QAAQ,IAAK;IACxB,OAAOF,aAAa,CAAC,MAAM;MACzB,MAAMmB,YAAY,GAAG7B,MAAM,CAACC,YAAY,CAAC6B,MAAM;MAC/C,MAAMC,IAAc,GAAG,EAAE;MACzB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,YAAY,EAAEG,CAAC,IAAI,CAAC,EAAE;QACxC,MAAMnC,GAAG,GAAGG,MAAM,CAACC,YAAY,CAACJ,GAAG,CAACmC,CAAC,CAAC,IAAI,EAAE;QAC5CD,IAAI,CAACE,IAAI,CAACpC,GAAG,CAAC;MAChB;MACA,OAAOkC,IAAI;IACb,CAAC,EAAEnB,QAAQ,CAAC;EACd,CAAC;EAED;AACF;AACA;EACEsB,gBAAgB,EAAEA,CAAA,KAAMC,SAAS;EAEjC;AACF;AACA;AACA;AACA;AACA;EACEC,QAAQ,EAAEA,CAACL,IAAI,EAAEnB,QAAQ,KAAK;IAC5B,MAAMM,QAAQ,GAAGa,IAAI,CAACM,GAAG,CAAExC,GAAG,IAAK2B,YAAY,CAACtB,OAAO,CAACL,GAAG,CAAC,CAAC;IAC7D,MAAMsB,aAAa,GAAIG,MAAgB,IACrCA,MAAM,CAACe,GAAG,CAAC,CAACvC,KAAK,EAAEkC,CAAC,KAAK,CAACD,IAAI,CAACC,CAAC,CAAC,EAAElC,KAAK,CAAC,CAAC;IAC5C,OAAOmB,gBAAgB,CAACC,QAAQ,EAAEN,QAAQ,EAAEO,aAAa,CAAC;EAC5D,CAAC;EAED;AACF;AACA;AACA;EACEmB,QAAQ,EAAEA,CAACC,aAAa,EAAE3B,QAAQ,KAAK;IACrC,MAAMM,QAAQ,GAAGqB,aAAa,CAACF,GAAG,CAAEG,IAAI,IACtChB,YAAY,CAACf,OAAO,CAAC+B,IAAI,CAAC,CAAC,CAAC,EAAEA,IAAI,CAAC,CAAC,CAAC,CACvC,CAAC;IACD,OAAOvB,gBAAgB,CAACC,QAAQ,EAAEN,QAAQ,CAAC;EAC7C,CAAC;EAED;AACF;AACA;EACE6B,WAAW,EAAEA,CAACV,IAAI,EAAEnB,QAAQ,KAAK;IAC/B,MAAMM,QAAQ,GAAGa,IAAI,CAACM,GAAG,CAAExC,GAAG,IAAK2B,YAAY,CAACC,UAAU,CAAC5B,GAAG,CAAC,CAAC;IAChE,OAAOoB,gBAAgB,CAACC,QAAQ,EAAEN,QAAQ,CAAC;EAC7C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACE8B,UAAU,EAAEA,CAACH,aAAa,EAAE3B,QAAQ,KAAK;IACvC,MAAMM,QAAQ,GAAGqB,aAAa,CAACF,GAAG,CAAEG,IAAI,IACtChB,YAAY,CAACE,SAAS,CAACc,IAAI,CAAC,CAAC,CAAC,EAAEA,IAAI,CAAC,CAAC,CAAC,CACzC,CAAC;IACD,OAAOvB,gBAAgB,CAACC,QAAQ,EAAEN,QAAQ,CAAC;EAC7C;AACF,CAAC;AAAC,IAAA+B,QAAA,GAEanB,YAAY;AAAAoB,OAAA,CAAAtD,OAAA,GAAAqD,QAAA"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.native.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.native.js new file mode 100644 index 0000000..d3d0d81 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.native.js @@ -0,0 +1,324 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _helpers = require("./helpers"); +var _RCTAsyncStorage = _interopRequireDefault(require("./RCTAsyncStorage")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +if (!_RCTAsyncStorage.default) { + throw new Error(`[@RNC/AsyncStorage]: NativeModule: AsyncStorage is null. + +To fix this issue try these steps: + + • Uninstall, rebuild and restart the app. + + • Run the packager with \`--reset-cache\` flag. + + • If you are using CocoaPods on iOS, run \`pod install\` in the \`ios\` directory, then rebuild and re-run the app. + + • Make sure your project's \`package.json\` depends on \`@react-native-async-storage/async-storage\`, even if you only depend on it indirectly through other dependencies. CLI only autolinks native modules found in your \`package.json\`. + + • If this happens while testing with Jest, check out how to integrate AsyncStorage here: https://react-native-async-storage.github.io/async-storage/docs/advanced/jest + +If none of these fix the issue, please open an issue on the GitHub repository: https://github.com/react-native-async-storage/async-storage/issues +`); +} + +/** + * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value + * storage system that is global to the app. It should be used instead of + * LocalStorage. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api + */ +const AsyncStorage = (() => { + let _getRequests = []; + let _getKeys = []; + let _immediate = null; + return { + /** + * Fetches an item for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#getitem + */ + getItem: (key, callback) => { + return new Promise((resolve, reject) => { + (0, _helpers.checkValidInput)(key); + _RCTAsyncStorage.default.multiGet([key], (errors, result) => { + var _result$; + // Unpack result to get value from [[key,value]] + const value = result !== null && result !== void 0 && (_result$ = result[0]) !== null && _result$ !== void 0 && _result$[1] ? result[0][1] : null; + const errs = (0, _helpers.convertErrors)(errors); + callback === null || callback === void 0 ? void 0 : callback(errs === null || errs === void 0 ? void 0 : errs[0], value); + if (errs) { + reject(errs[0]); + } else { + resolve(value); + } + }); + }); + }, + /** + * Sets the value for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#setitem + */ + setItem: (key, value, callback) => { + return new Promise((resolve, reject) => { + (0, _helpers.checkValidInput)(key, value); + _RCTAsyncStorage.default.multiSet([[key, value]], errors => { + const errs = (0, _helpers.convertErrors)(errors); + callback === null || callback === void 0 ? void 0 : callback(errs === null || errs === void 0 ? void 0 : errs[0]); + if (errs) { + reject(errs[0]); + } else { + resolve(); + } + }); + }); + }, + /** + * Removes an item for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#removeitem + */ + removeItem: (key, callback) => { + return new Promise((resolve, reject) => { + (0, _helpers.checkValidInput)(key); + _RCTAsyncStorage.default.multiRemove([key], errors => { + const errs = (0, _helpers.convertErrors)(errors); + callback === null || callback === void 0 ? void 0 : callback(errs === null || errs === void 0 ? void 0 : errs[0]); + if (errs) { + reject(errs[0]); + } else { + resolve(); + } + }); + }); + }, + /** + * Merges an existing `key` value with an input value, assuming both values + * are stringified JSON. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#mergeitem + */ + mergeItem: (key, value, callback) => { + return new Promise((resolve, reject) => { + (0, _helpers.checkValidInput)(key, value); + _RCTAsyncStorage.default.multiMerge([[key, value]], errors => { + const errs = (0, _helpers.convertErrors)(errors); + callback === null || callback === void 0 ? void 0 : callback(errs === null || errs === void 0 ? void 0 : errs[0]); + if (errs) { + reject(errs[0]); + } else { + resolve(); + } + }); + }); + }, + /** + * Erases *all* `AsyncStorage` for all clients, libraries, etc. You probably + * don't want to call this; use `removeItem` or `multiRemove` to clear only + * your app's keys. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#clear + */ + clear: callback => { + return new Promise((resolve, reject) => { + _RCTAsyncStorage.default.clear(error => { + const err = (0, _helpers.convertError)(error); + callback === null || callback === void 0 ? void 0 : callback(err); + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + }, + /** + * Gets *all* keys known to your app; for all callers, libraries, etc. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#getallkeys + */ + getAllKeys: callback => { + return new Promise((resolve, reject) => { + _RCTAsyncStorage.default.getAllKeys((error, keys) => { + const err = (0, _helpers.convertError)(error); + callback === null || callback === void 0 ? void 0 : callback(err, keys); + if (keys) { + resolve(keys); + } else { + reject(err); + } + }); + }); + }, + /** + * The following batched functions are useful for executing a lot of + * operations at once, allowing for native optimizations and provide the + * convenience of a single callback after all operations are complete. + * + * These functions return arrays of errors, potentially one for every key. + * For key-specific errors, the Error object will have a key property to + * indicate which key caused the error. + */ + + /** + * Flushes any pending requests using a single batch call to get the data. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#flushgetrequests + * */ + flushGetRequests: () => { + const getRequests = _getRequests; + const getKeys = _getKeys; + _getRequests = []; + _getKeys = []; + _RCTAsyncStorage.default.multiGet(getKeys, (errors, result) => { + // Even though the runtime complexity of this is theoretically worse vs if we used a map, + // it's much, much faster in practice for the data sets we deal with (we avoid + // allocating result pair arrays). This was heavily benchmarked. + // + // Is there a way to avoid using the map but fix the bug in this breaking test? + // https://github.com/facebook/react-native/commit/8dd8ad76579d7feef34c014d387bf02065692264 + const map = {}; + result === null || result === void 0 ? void 0 : result.forEach(([key, value]) => { + map[key] = value; + return value; + }); + const reqLength = getRequests.length; + + /** + * As mentioned few lines above, this method could be called with the array of potential error, + * in case of anything goes wrong. The problem is, if any of the batched calls fails + * the rest of them would fail too, but the error would be consumed by just one. The rest + * would simply return `undefined` as their result, rendering false negatives. + * + * In order to avoid this situation, in case of any call failing, + * the rest of them will be rejected as well (with the same error). + */ + const errorList = (0, _helpers.convertErrors)(errors); + const error = errorList !== null && errorList !== void 0 && errorList.length ? errorList[0] : null; + for (let i = 0; i < reqLength; i++) { + var _request$callback2, _request$resolve; + const request = getRequests[i]; + if (error) { + var _request$callback, _request$reject; + (_request$callback = request.callback) === null || _request$callback === void 0 ? void 0 : _request$callback.call(request, errorList); + (_request$reject = request.reject) === null || _request$reject === void 0 ? void 0 : _request$reject.call(request, error); + continue; + } + const requestResult = request.keys.map(key => [key, map[key]]); + (_request$callback2 = request.callback) === null || _request$callback2 === void 0 ? void 0 : _request$callback2.call(request, null, requestResult); + (_request$resolve = request.resolve) === null || _request$resolve === void 0 ? void 0 : _request$resolve.call(request, requestResult); + } + }); + }, + /** + * This allows you to batch the fetching of items given an array of `key` + * inputs. Your callback will be invoked with an array of corresponding + * key-value pairs found. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiget + */ + multiGet: (keys, callback) => { + if (!_immediate) { + _immediate = setImmediate(() => { + _immediate = null; + AsyncStorage.flushGetRequests(); + }); + } + const getRequest = { + keys: keys, + callback: callback, + // do we need this? + keyIndex: _getKeys.length + }; + const promiseResult = new Promise((resolve, reject) => { + getRequest.resolve = resolve; + getRequest.reject = reject; + }); + _getRequests.push(getRequest); + // avoid fetching duplicates + keys.forEach(key => { + if (_getKeys.indexOf(key) === -1) { + _getKeys.push(key); + } + }); + return promiseResult; + }, + /** + * Use this as a batch operation for storing multiple key-value pairs. When + * the operation completes you'll get a single callback with any errors. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiset + */ + multiSet: (keyValuePairs, callback) => { + (0, _helpers.checkValidArgs)(keyValuePairs, callback); + return new Promise((resolve, reject) => { + keyValuePairs.forEach(([key, value]) => { + (0, _helpers.checkValidInput)(key, value); + }); + _RCTAsyncStorage.default.multiSet(keyValuePairs, errors => { + const error = (0, _helpers.convertErrors)(errors); + callback === null || callback === void 0 ? void 0 : callback(error); + if (error) { + reject(error); + } else { + resolve(); + } + }); + }); + }, + /** + * Call this to batch the deletion of all keys in the `keys` array. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiremove + */ + multiRemove: (keys, callback) => { + return new Promise((resolve, reject) => { + keys.forEach(key => (0, _helpers.checkValidInput)(key)); + _RCTAsyncStorage.default.multiRemove(keys, errors => { + const error = (0, _helpers.convertErrors)(errors); + callback === null || callback === void 0 ? void 0 : callback(error); + if (error) { + reject(error); + } else { + resolve(); + } + }); + }); + }, + /** + * Batch operation to merge in existing and new values for a given set of + * keys. This assumes that the values are stringified JSON. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multimerge + */ + multiMerge: (keyValuePairs, callback) => { + return new Promise((resolve, reject) => { + _RCTAsyncStorage.default.multiMerge(keyValuePairs, errors => { + const error = (0, _helpers.convertErrors)(errors); + callback === null || callback === void 0 ? void 0 : callback(error); + if (error) { + reject(error); + } else { + resolve(); + } + }); + }); + } + }; +})(); +var _default = AsyncStorage; +exports.default = _default; +//# sourceMappingURL=AsyncStorage.native.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.native.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.native.js.map new file mode 100644 index 0000000..1a6d168 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/AsyncStorage.native.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_helpers","require","_RCTAsyncStorage","_interopRequireDefault","obj","__esModule","default","RCTAsyncStorage","Error","AsyncStorage","_getRequests","_getKeys","_immediate","getItem","key","callback","Promise","resolve","reject","checkValidInput","multiGet","errors","result","_result$","value","errs","convertErrors","setItem","multiSet","removeItem","multiRemove","mergeItem","multiMerge","clear","error","err","convertError","getAllKeys","keys","flushGetRequests","getRequests","getKeys","map","forEach","reqLength","length","errorList","i","_request$callback2","_request$resolve","request","_request$callback","_request$reject","call","requestResult","setImmediate","getRequest","keyIndex","promiseResult","push","indexOf","keyValuePairs","checkValidArgs","_default","exports"],"sources":["AsyncStorage.native.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n checkValidArgs,\n checkValidInput,\n convertError,\n convertErrors,\n} from \"./helpers\";\nimport RCTAsyncStorage from \"./RCTAsyncStorage\";\nimport type {\n AsyncStorageStatic,\n ErrorLike,\n KeyValuePair,\n MultiRequest,\n} from \"./types\";\n\nif (!RCTAsyncStorage) {\n throw new Error(`[@RNC/AsyncStorage]: NativeModule: AsyncStorage is null.\n\nTo fix this issue try these steps:\n\n • Uninstall, rebuild and restart the app.\n\n • Run the packager with \\`--reset-cache\\` flag.\n\n • If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory, then rebuild and re-run the app.\n\n • Make sure your project's \\`package.json\\` depends on \\`@react-native-async-storage/async-storage\\`, even if you only depend on it indirectly through other dependencies. CLI only autolinks native modules found in your \\`package.json\\`.\n\n • If this happens while testing with Jest, check out how to integrate AsyncStorage here: https://react-native-async-storage.github.io/async-storage/docs/advanced/jest\n\nIf none of these fix the issue, please open an issue on the GitHub repository: https://github.com/react-native-async-storage/async-storage/issues\n`);\n}\n\n/**\n * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value\n * storage system that is global to the app. It should be used instead of\n * LocalStorage.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api\n */\nconst AsyncStorage = ((): AsyncStorageStatic => {\n let _getRequests: MultiRequest[] = [];\n let _getKeys: string[] = [];\n let _immediate: ReturnType | null = null;\n\n return {\n /**\n * Fetches an item for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#getitem\n */\n getItem: (key, callback) => {\n return new Promise((resolve, reject) => {\n checkValidInput(key);\n RCTAsyncStorage.multiGet(\n [key],\n (errors?: ErrorLike[], result?: string[][]) => {\n // Unpack result to get value from [[key,value]]\n const value = result?.[0]?.[1] ? result[0][1] : null;\n const errs = convertErrors(errors);\n callback?.(errs?.[0], value);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve(value);\n }\n }\n );\n });\n },\n\n /**\n * Sets the value for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#setitem\n */\n setItem: (key, value, callback) => {\n return new Promise((resolve, reject) => {\n checkValidInput(key, value);\n RCTAsyncStorage.multiSet([[key, value]], (errors?: ErrorLike[]) => {\n const errs = convertErrors(errors);\n callback?.(errs?.[0]);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Removes an item for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#removeitem\n */\n removeItem: (key, callback) => {\n return new Promise((resolve, reject) => {\n checkValidInput(key);\n RCTAsyncStorage.multiRemove([key], (errors?: ErrorLike[]) => {\n const errs = convertErrors(errors);\n callback?.(errs?.[0]);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Merges an existing `key` value with an input value, assuming both values\n * are stringified JSON.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#mergeitem\n */\n mergeItem: (key, value, callback) => {\n return new Promise((resolve, reject) => {\n checkValidInput(key, value);\n RCTAsyncStorage.multiMerge([[key, value]], (errors?: ErrorLike[]) => {\n const errs = convertErrors(errors);\n callback?.(errs?.[0]);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Erases *all* `AsyncStorage` for all clients, libraries, etc. You probably\n * don't want to call this; use `removeItem` or `multiRemove` to clear only\n * your app's keys.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#clear\n */\n clear: (callback) => {\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.clear((error?: ErrorLike) => {\n const err = convertError(error);\n callback?.(err);\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Gets *all* keys known to your app; for all callers, libraries, etc.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#getallkeys\n */\n getAllKeys: (callback) => {\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.getAllKeys((error?: ErrorLike, keys?: string[]) => {\n const err = convertError(error);\n callback?.(err, keys);\n if (keys) {\n resolve(keys);\n } else {\n reject(err);\n }\n });\n });\n },\n\n /**\n * The following batched functions are useful for executing a lot of\n * operations at once, allowing for native optimizations and provide the\n * convenience of a single callback after all operations are complete.\n *\n * These functions return arrays of errors, potentially one for every key.\n * For key-specific errors, the Error object will have a key property to\n * indicate which key caused the error.\n */\n\n /**\n * Flushes any pending requests using a single batch call to get the data.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#flushgetrequests\n * */\n flushGetRequests: () => {\n const getRequests = _getRequests;\n const getKeys = _getKeys;\n\n _getRequests = [];\n _getKeys = [];\n\n RCTAsyncStorage.multiGet(\n getKeys,\n (errors?: ErrorLike[], result?: string[][]) => {\n // Even though the runtime complexity of this is theoretically worse vs if we used a map,\n // it's much, much faster in practice for the data sets we deal with (we avoid\n // allocating result pair arrays). This was heavily benchmarked.\n //\n // Is there a way to avoid using the map but fix the bug in this breaking test?\n // https://github.com/facebook/react-native/commit/8dd8ad76579d7feef34c014d387bf02065692264\n const map: Record = {};\n result?.forEach(([key, value]) => {\n map[key] = value;\n return value;\n });\n const reqLength = getRequests.length;\n\n /**\n * As mentioned few lines above, this method could be called with the array of potential error,\n * in case of anything goes wrong. The problem is, if any of the batched calls fails\n * the rest of them would fail too, but the error would be consumed by just one. The rest\n * would simply return `undefined` as their result, rendering false negatives.\n *\n * In order to avoid this situation, in case of any call failing,\n * the rest of them will be rejected as well (with the same error).\n */\n const errorList = convertErrors(errors);\n const error = errorList?.length ? errorList[0] : null;\n\n for (let i = 0; i < reqLength; i++) {\n const request = getRequests[i];\n if (error) {\n request.callback?.(errorList);\n request.reject?.(error);\n continue;\n }\n const requestResult = request.keys.map((key) => [\n key,\n map[key],\n ]);\n request.callback?.(null, requestResult);\n request.resolve?.(requestResult);\n }\n }\n );\n },\n\n /**\n * This allows you to batch the fetching of items given an array of `key`\n * inputs. Your callback will be invoked with an array of corresponding\n * key-value pairs found.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiget\n */\n multiGet: (keys, callback) => {\n if (!_immediate) {\n _immediate = setImmediate(() => {\n _immediate = null;\n AsyncStorage.flushGetRequests();\n });\n }\n\n const getRequest: MultiRequest = {\n keys: keys,\n callback: callback,\n // do we need this?\n keyIndex: _getKeys.length,\n };\n\n const promiseResult = new Promise(\n (resolve, reject) => {\n getRequest.resolve = resolve;\n getRequest.reject = reject;\n }\n );\n\n _getRequests.push(getRequest);\n // avoid fetching duplicates\n keys.forEach((key) => {\n if (_getKeys.indexOf(key) === -1) {\n _getKeys.push(key);\n }\n });\n\n return promiseResult;\n },\n\n /**\n * Use this as a batch operation for storing multiple key-value pairs. When\n * the operation completes you'll get a single callback with any errors.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiset\n */\n multiSet: (keyValuePairs, callback) => {\n checkValidArgs(keyValuePairs, callback);\n return new Promise((resolve, reject) => {\n keyValuePairs.forEach(([key, value]) => {\n checkValidInput(key, value);\n });\n\n RCTAsyncStorage.multiSet(keyValuePairs, (errors?: ErrorLike[]) => {\n const error = convertErrors(errors);\n callback?.(error);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Call this to batch the deletion of all keys in the `keys` array.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiremove\n */\n multiRemove: (keys, callback) => {\n return new Promise((resolve, reject) => {\n keys.forEach((key) => checkValidInput(key));\n\n RCTAsyncStorage.multiRemove(keys, (errors?: ErrorLike[]) => {\n const error = convertErrors(errors);\n callback?.(error);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Batch operation to merge in existing and new values for a given set of\n * keys. This assumes that the values are stringified JSON.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multimerge\n */\n multiMerge: (keyValuePairs, callback) => {\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.multiMerge(keyValuePairs, (errors?: ErrorLike[]) => {\n const error = convertErrors(errors);\n callback?.(error);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n },\n };\n})();\n\nexport default AsyncStorage;\n"],"mappings":";;;;;;AAOA,IAAAA,QAAA,GAAAC,OAAA;AAMA,IAAAC,gBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAgD,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAbhD;AACA;AACA;AACA;AACA;AACA;;AAgBA,IAAI,CAACG,wBAAe,EAAE;EACpB,MAAM,IAAIC,KAAK,CAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,YAAY,GAAG,CAAC,MAA0B;EAC9C,IAAIC,YAA4B,GAAG,EAAE;EACrC,IAAIC,QAAkB,GAAG,EAAE;EAC3B,IAAIC,UAAkD,GAAG,IAAI;EAE7D,OAAO;IACL;AACJ;AACA;AACA;AACA;IACIC,OAAO,EAAEA,CAACC,GAAG,EAAEC,QAAQ,KAAK;MAC1B,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtC,IAAAC,wBAAe,EAACL,GAAG,CAAC;QACpBP,wBAAe,CAACa,QAAQ,CACtB,CAACN,GAAG,CAAC,EACL,CAACO,MAAoB,EAAEC,MAAmB,KAAK;UAAA,IAAAC,QAAA;UAC7C;UACA,MAAMC,KAAK,GAAGF,MAAM,aAANA,MAAM,gBAAAC,QAAA,GAAND,MAAM,CAAG,CAAC,CAAC,cAAAC,QAAA,eAAXA,QAAA,CAAc,CAAC,CAAC,GAAGD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;UACpD,MAAMG,IAAI,GAAG,IAAAC,sBAAa,EAACL,MAAM,CAAC;UAClCN,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGU,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAG,CAAC,CAAC,EAAED,KAAK,CAAC;UAC5B,IAAIC,IAAI,EAAE;YACRP,MAAM,CAACO,IAAI,CAAC,CAAC,CAAC,CAAC;UACjB,CAAC,MAAM;YACLR,OAAO,CAACO,KAAK,CAAC;UAChB;QACF,CACF,CAAC;MACH,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIG,OAAO,EAAEA,CAACb,GAAG,EAAEU,KAAK,EAAET,QAAQ,KAAK;MACjC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtC,IAAAC,wBAAe,EAACL,GAAG,EAAEU,KAAK,CAAC;QAC3BjB,wBAAe,CAACqB,QAAQ,CAAC,CAAC,CAACd,GAAG,EAAEU,KAAK,CAAC,CAAC,EAAGH,MAAoB,IAAK;UACjE,MAAMI,IAAI,GAAG,IAAAC,sBAAa,EAACL,MAAM,CAAC;UAClCN,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGU,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAG,CAAC,CAAC,CAAC;UACrB,IAAIA,IAAI,EAAE;YACRP,MAAM,CAACO,IAAI,CAAC,CAAC,CAAC,CAAC;UACjB,CAAC,MAAM;YACLR,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIY,UAAU,EAAEA,CAACf,GAAG,EAAEC,QAAQ,KAAK;MAC7B,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtC,IAAAC,wBAAe,EAACL,GAAG,CAAC;QACpBP,wBAAe,CAACuB,WAAW,CAAC,CAAChB,GAAG,CAAC,EAAGO,MAAoB,IAAK;UAC3D,MAAMI,IAAI,GAAG,IAAAC,sBAAa,EAACL,MAAM,CAAC;UAClCN,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGU,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAG,CAAC,CAAC,CAAC;UACrB,IAAIA,IAAI,EAAE;YACRP,MAAM,CAACO,IAAI,CAAC,CAAC,CAAC,CAAC;UACjB,CAAC,MAAM;YACLR,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACIc,SAAS,EAAEA,CAACjB,GAAG,EAAEU,KAAK,EAAET,QAAQ,KAAK;MACnC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtC,IAAAC,wBAAe,EAACL,GAAG,EAAEU,KAAK,CAAC;QAC3BjB,wBAAe,CAACyB,UAAU,CAAC,CAAC,CAAClB,GAAG,EAAEU,KAAK,CAAC,CAAC,EAAGH,MAAoB,IAAK;UACnE,MAAMI,IAAI,GAAG,IAAAC,sBAAa,EAACL,MAAM,CAAC;UAClCN,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGU,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAG,CAAC,CAAC,CAAC;UACrB,IAAIA,IAAI,EAAE;YACRP,MAAM,CAACO,IAAI,CAAC,CAAC,CAAC,CAAC;UACjB,CAAC,MAAM;YACLR,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIgB,KAAK,EAAGlB,QAAQ,IAAK;MACnB,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCX,wBAAe,CAAC0B,KAAK,CAAEC,KAAiB,IAAK;UAC3C,MAAMC,GAAG,GAAG,IAAAC,qBAAY,EAACF,KAAK,CAAC;UAC/BnB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGoB,GAAG,CAAC;UACf,IAAIA,GAAG,EAAE;YACPjB,MAAM,CAACiB,GAAG,CAAC;UACb,CAAC,MAAM;YACLlB,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIoB,UAAU,EAAGtB,QAAQ,IAAK;MACxB,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCX,wBAAe,CAAC8B,UAAU,CAAC,CAACH,KAAiB,EAAEI,IAAe,KAAK;UACjE,MAAMH,GAAG,GAAG,IAAAC,qBAAY,EAACF,KAAK,CAAC;UAC/BnB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGoB,GAAG,EAAEG,IAAI,CAAC;UACrB,IAAIA,IAAI,EAAE;YACRrB,OAAO,CAACqB,IAAI,CAAC;UACf,CAAC,MAAM;YACLpB,MAAM,CAACiB,GAAG,CAAC;UACb;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAEI;AACJ;AACA;AACA;AACA;IACII,gBAAgB,EAAEA,CAAA,KAAM;MACtB,MAAMC,WAAW,GAAG9B,YAAY;MAChC,MAAM+B,OAAO,GAAG9B,QAAQ;MAExBD,YAAY,GAAG,EAAE;MACjBC,QAAQ,GAAG,EAAE;MAEbJ,wBAAe,CAACa,QAAQ,CACtBqB,OAAO,EACP,CAACpB,MAAoB,EAAEC,MAAmB,KAAK;QAC7C;QACA;QACA;QACA;QACA;QACA;QACA,MAAMoB,GAA2B,GAAG,CAAC,CAAC;QACtCpB,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEqB,OAAO,CAAC,CAAC,CAAC7B,GAAG,EAAEU,KAAK,CAAC,KAAK;UAChCkB,GAAG,CAAC5B,GAAG,CAAC,GAAGU,KAAK;UAChB,OAAOA,KAAK;QACd,CAAC,CAAC;QACF,MAAMoB,SAAS,GAAGJ,WAAW,CAACK,MAAM;;QAEpC;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;QACU,MAAMC,SAAS,GAAG,IAAApB,sBAAa,EAACL,MAAM,CAAC;QACvC,MAAMa,KAAK,GAAGY,SAAS,aAATA,SAAS,eAATA,SAAS,CAAED,MAAM,GAAGC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;QAErD,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,SAAS,EAAEG,CAAC,EAAE,EAAE;UAAA,IAAAC,kBAAA,EAAAC,gBAAA;UAClC,MAAMC,OAAO,GAAGV,WAAW,CAACO,CAAC,CAAC;UAC9B,IAAIb,KAAK,EAAE;YAAA,IAAAiB,iBAAA,EAAAC,eAAA;YACT,CAAAD,iBAAA,GAAAD,OAAO,CAACnC,QAAQ,cAAAoC,iBAAA,uBAAhBA,iBAAA,CAAAE,IAAA,CAAAH,OAAO,EAAYJ,SAAS,CAAC;YAC7B,CAAAM,eAAA,GAAAF,OAAO,CAAChC,MAAM,cAAAkC,eAAA,uBAAdA,eAAA,CAAAC,IAAA,CAAAH,OAAO,EAAUhB,KAAK,CAAC;YACvB;UACF;UACA,MAAMoB,aAAa,GAAGJ,OAAO,CAACZ,IAAI,CAACI,GAAG,CAAgB5B,GAAG,IAAK,CAC5DA,GAAG,EACH4B,GAAG,CAAC5B,GAAG,CAAC,CACT,CAAC;UACF,CAAAkC,kBAAA,GAAAE,OAAO,CAACnC,QAAQ,cAAAiC,kBAAA,uBAAhBA,kBAAA,CAAAK,IAAA,CAAAH,OAAO,EAAY,IAAI,EAAEI,aAAa,CAAC;UACvC,CAAAL,gBAAA,GAAAC,OAAO,CAACjC,OAAO,cAAAgC,gBAAA,uBAAfA,gBAAA,CAAAI,IAAA,CAAAH,OAAO,EAAWI,aAAa,CAAC;QAClC;MACF,CACF,CAAC;IACH,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIlC,QAAQ,EAAEA,CAACkB,IAAI,EAAEvB,QAAQ,KAAK;MAC5B,IAAI,CAACH,UAAU,EAAE;QACfA,UAAU,GAAG2C,YAAY,CAAC,MAAM;UAC9B3C,UAAU,GAAG,IAAI;UACjBH,YAAY,CAAC8B,gBAAgB,CAAC,CAAC;QACjC,CAAC,CAAC;MACJ;MAEA,MAAMiB,UAAwB,GAAG;QAC/BlB,IAAI,EAAEA,IAAI;QACVvB,QAAQ,EAAEA,QAAQ;QAClB;QACA0C,QAAQ,EAAE9C,QAAQ,CAACkC;MACrB,CAAC;MAED,MAAMa,aAAa,GAAG,IAAI1C,OAAO,CAC/B,CAACC,OAAO,EAAEC,MAAM,KAAK;QACnBsC,UAAU,CAACvC,OAAO,GAAGA,OAAO;QAC5BuC,UAAU,CAACtC,MAAM,GAAGA,MAAM;MAC5B,CACF,CAAC;MAEDR,YAAY,CAACiD,IAAI,CAACH,UAAU,CAAC;MAC7B;MACAlB,IAAI,CAACK,OAAO,CAAE7B,GAAG,IAAK;QACpB,IAAIH,QAAQ,CAACiD,OAAO,CAAC9C,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;UAChCH,QAAQ,CAACgD,IAAI,CAAC7C,GAAG,CAAC;QACpB;MACF,CAAC,CAAC;MAEF,OAAO4C,aAAa;IACtB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACI9B,QAAQ,EAAEA,CAACiC,aAAa,EAAE9C,QAAQ,KAAK;MACrC,IAAA+C,uBAAc,EAACD,aAAa,EAAE9C,QAAQ,CAAC;MACvC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtC2C,aAAa,CAAClB,OAAO,CAAC,CAAC,CAAC7B,GAAG,EAAEU,KAAK,CAAC,KAAK;UACtC,IAAAL,wBAAe,EAACL,GAAG,EAAEU,KAAK,CAAC;QAC7B,CAAC,CAAC;QAEFjB,wBAAe,CAACqB,QAAQ,CAACiC,aAAa,EAAGxC,MAAoB,IAAK;UAChE,MAAMa,KAAK,GAAG,IAAAR,sBAAa,EAACL,MAAM,CAAC;UACnCN,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGmB,KAAK,CAAC;UACjB,IAAIA,KAAK,EAAE;YACThB,MAAM,CAACgB,KAAK,CAAC;UACf,CAAC,MAAM;YACLjB,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIa,WAAW,EAAEA,CAACQ,IAAI,EAAEvB,QAAQ,KAAK;MAC/B,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCoB,IAAI,CAACK,OAAO,CAAE7B,GAAG,IAAK,IAAAK,wBAAe,EAACL,GAAG,CAAC,CAAC;QAE3CP,wBAAe,CAACuB,WAAW,CAACQ,IAAI,EAAGjB,MAAoB,IAAK;UAC1D,MAAMa,KAAK,GAAG,IAAAR,sBAAa,EAACL,MAAM,CAAC;UACnCN,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGmB,KAAK,CAAC;UACjB,IAAIA,KAAK,EAAE;YACThB,MAAM,CAACgB,KAAK,CAAC;UACf,CAAC,MAAM;YACLjB,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACIe,UAAU,EAAEA,CAAC6B,aAAa,EAAE9C,QAAQ,KAAK;MACvC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCX,wBAAe,CAACyB,UAAU,CAAC6B,aAAa,EAAGxC,MAAoB,IAAK;UAClE,MAAMa,KAAK,GAAG,IAAAR,sBAAa,EAACL,MAAM,CAAC;UACnCN,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGmB,KAAK,CAAC;UACjB,IAAIA,KAAK,EAAE;YACThB,MAAM,CAACgB,KAAK,CAAC;UACf,CAAC,MAAM;YACLjB,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;EACF,CAAC;AACH,CAAC,EAAE,CAAC;AAAC,IAAA8C,QAAA,GAEUtD,YAAY;AAAAuD,OAAA,CAAA1D,OAAA,GAAAyD,QAAA"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/NativeAsyncStorageModule.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/NativeAsyncStorageModule.js new file mode 100644 index 0000000..a5713dd --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/NativeAsyncStorageModule.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _reactNative = require("react-native"); +var _default = _reactNative.TurboModuleRegistry.get("RNCAsyncStorage"); +exports.default = _default; +//# sourceMappingURL=NativeAsyncStorageModule.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/NativeAsyncStorageModule.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/NativeAsyncStorageModule.js.map new file mode 100644 index 0000000..dc3d664 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/NativeAsyncStorageModule.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_reactNative","require","_default","TurboModuleRegistry","get","exports","default"],"sources":["NativeAsyncStorageModule.ts"],"sourcesContent":["import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\nimport type { ErrorLike } from \"./types\";\n\nexport interface Spec extends TurboModule {\n multiGet: (\n keys: string[],\n callback: (error?: ErrorLike[], result?: [string, string][]) => void\n ) => void;\n multiSet: (\n kvPairs: [string, string][],\n callback: (error?: ErrorLike[]) => void\n ) => void;\n multiRemove: (\n keys: readonly string[],\n callback: (error?: ErrorLike[]) => void\n ) => void;\n multiMerge: (\n kvPairs: [string, string][],\n callback: (error?: ErrorLike[]) => void\n ) => void;\n getAllKeys: (\n callback: (error?: ErrorLike[], result?: [string, string][]) => void\n ) => void;\n clear: (callback: (error?: ErrorLike[]) => void) => void;\n}\n\nexport default TurboModuleRegistry.get(\"RNCAsyncStorage\");\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GA0BpCC,gCAAmB,CAACC,GAAG,CAAO,iBAAiB,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAJ,QAAA"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/RCTAsyncStorage.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/RCTAsyncStorage.js new file mode 100644 index 0000000..f5d9f3e --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/RCTAsyncStorage.js @@ -0,0 +1,26 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _reactNative = require("react-native"); +var _shouldFallbackToLegacyNativeModule = require("./shouldFallbackToLegacyNativeModule"); +// TurboModuleRegistry falls back to NativeModules so we don't have to try go +// assign NativeModules' counterparts if TurboModuleRegistry would resolve +// with undefined. +let RCTAsyncStorage = _reactNative.TurboModuleRegistry ? _reactNative.TurboModuleRegistry.get("PlatformLocalStorage") || +// Support for external modules, like react-native-windows +_reactNative.TurboModuleRegistry.get("RNC_AsyncSQLiteDBStorage") || _reactNative.TurboModuleRegistry.get("RNCAsyncStorage") : _reactNative.NativeModules["PlatformLocalStorage"] || +// Support for external modules, like react-native-windows +_reactNative.NativeModules["RNC_AsyncSQLiteDBStorage"] || _reactNative.NativeModules["RNCAsyncStorage"]; +if (!RCTAsyncStorage && (0, _shouldFallbackToLegacyNativeModule.shouldFallbackToLegacyNativeModule)()) { + if (_reactNative.TurboModuleRegistry) { + RCTAsyncStorage = _reactNative.TurboModuleRegistry.get("AsyncSQLiteDBStorage") || _reactNative.TurboModuleRegistry.get("AsyncLocalStorage"); + } else { + RCTAsyncStorage = _reactNative.NativeModules["AsyncSQLiteDBStorage"] || _reactNative.NativeModules["AsyncLocalStorage"]; + } +} +var _default = RCTAsyncStorage; +exports.default = _default; +//# sourceMappingURL=RCTAsyncStorage.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/RCTAsyncStorage.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/RCTAsyncStorage.js.map new file mode 100644 index 0000000..aa8f043 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/RCTAsyncStorage.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_reactNative","require","_shouldFallbackToLegacyNativeModule","RCTAsyncStorage","TurboModuleRegistry","get","NativeModules","shouldFallbackToLegacyNativeModule","_default","exports","default"],"sources":["RCTAsyncStorage.ts"],"sourcesContent":["import { NativeModules, TurboModuleRegistry } from \"react-native\";\nimport { shouldFallbackToLegacyNativeModule } from \"./shouldFallbackToLegacyNativeModule\";\n\n// TurboModuleRegistry falls back to NativeModules so we don't have to try go\n// assign NativeModules' counterparts if TurboModuleRegistry would resolve\n// with undefined.\nlet RCTAsyncStorage = TurboModuleRegistry\n ? TurboModuleRegistry.get(\"PlatformLocalStorage\") || // Support for external modules, like react-native-windows\n TurboModuleRegistry.get(\"RNC_AsyncSQLiteDBStorage\") ||\n TurboModuleRegistry.get(\"RNCAsyncStorage\")\n : NativeModules[\"PlatformLocalStorage\"] || // Support for external modules, like react-native-windows\n NativeModules[\"RNC_AsyncSQLiteDBStorage\"] ||\n NativeModules[\"RNCAsyncStorage\"];\n\nif (!RCTAsyncStorage && shouldFallbackToLegacyNativeModule()) {\n if (TurboModuleRegistry) {\n RCTAsyncStorage =\n TurboModuleRegistry.get(\"AsyncSQLiteDBStorage\") ||\n TurboModuleRegistry.get(\"AsyncLocalStorage\");\n } else {\n RCTAsyncStorage =\n NativeModules[\"AsyncSQLiteDBStorage\"] ||\n NativeModules[\"AsyncLocalStorage\"];\n }\n}\n\nexport default RCTAsyncStorage;\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,mCAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA,IAAIE,eAAe,GAAGC,gCAAmB,GACrCA,gCAAmB,CAACC,GAAG,CAAC,sBAAsB,CAAC;AAAI;AACnDD,gCAAmB,CAACC,GAAG,CAAC,0BAA0B,CAAC,IACnDD,gCAAmB,CAACC,GAAG,CAAC,iBAAiB,CAAC,GAC1CC,0BAAa,CAAC,sBAAsB,CAAC;AAAI;AACzCA,0BAAa,CAAC,0BAA0B,CAAC,IACzCA,0BAAa,CAAC,iBAAiB,CAAC;AAEpC,IAAI,CAACH,eAAe,IAAI,IAAAI,sEAAkC,EAAC,CAAC,EAAE;EAC5D,IAAIH,gCAAmB,EAAE;IACvBD,eAAe,GACbC,gCAAmB,CAACC,GAAG,CAAC,sBAAsB,CAAC,IAC/CD,gCAAmB,CAACC,GAAG,CAAC,mBAAmB,CAAC;EAChD,CAAC,MAAM;IACLF,eAAe,GACbG,0BAAa,CAAC,sBAAsB,CAAC,IACrCA,0BAAa,CAAC,mBAAmB,CAAC;EACtC;AACF;AAAC,IAAAE,QAAA,GAEcL,eAAe;AAAAM,OAAA,CAAAC,OAAA,GAAAF,QAAA"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/helpers.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/helpers.js new file mode 100644 index 0000000..92d51f2 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/helpers.js @@ -0,0 +1,57 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.checkValidArgs = checkValidArgs; +exports.checkValidInput = checkValidInput; +exports.convertError = convertError; +exports.convertErrors = convertErrors; +function checkValidArgs(keyValuePairs, callback) { + if (!Array.isArray(keyValuePairs) || keyValuePairs.length === 0 || !Array.isArray(keyValuePairs[0])) { + throw new Error("[AsyncStorage] Expected array of key-value pairs as first argument to multiSet"); + } + if (callback && typeof callback !== "function") { + if (Array.isArray(callback)) { + throw new Error("[AsyncStorage] Expected function as second argument to multiSet. Did you forget to wrap key-value pairs in an array for the first argument?"); + } + throw new Error("[AsyncStorage] Expected function as second argument to multiSet"); + } +} +function checkValidInput(...input) { + const [key, value] = input; + if (typeof key !== "string") { + // eslint-disable-next-line no-console + console.warn(`[AsyncStorage] Using ${typeof key} type for key is not supported. This can lead to unexpected behavior/errors. Use string instead.\nKey passed: ${key}\n`); + } + if (input.length > 1 && typeof value !== "string") { + if (value == null) { + throw new Error(`[AsyncStorage] Passing null/undefined as value is not supported. If you want to remove value, Use .removeItem method instead.\nPassed value: ${value}\nPassed key: ${key}\n`); + } else { + // eslint-disable-next-line no-console + console.warn(`[AsyncStorage] The value for key "${key}" is not a string. This can lead to unexpected behavior/errors. Consider stringifying it.\nPassed value: ${value}\nPassed key: ${key}\n`); + } + } +} +function convertError(error) { + if (!error) { + return null; + } + const out = new Error(error.message); + out["key"] = error.key; + return out; +} +function convertErrors(errs) { + const errors = ensureArray(errs); + return errors ? errors.map(e => convertError(e)) : null; +} +function ensureArray(e) { + if (Array.isArray(e)) { + return e.length === 0 ? null : e; + } else if (e) { + return [e]; + } else { + return null; + } +} +//# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/helpers.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/helpers.js.map new file mode 100644 index 0000000..d40c144 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/helpers.js.map @@ -0,0 +1 @@ +{"version":3,"names":["checkValidArgs","keyValuePairs","callback","Array","isArray","length","Error","checkValidInput","input","key","value","console","warn","convertError","error","out","message","convertErrors","errs","errors","ensureArray","map","e"],"sources":["helpers.ts"],"sourcesContent":["import type { ErrorLike } from \"./types\";\n\nexport function checkValidArgs(\n keyValuePairs: readonly unknown[],\n callback: unknown\n) {\n if (\n !Array.isArray(keyValuePairs) ||\n keyValuePairs.length === 0 ||\n !Array.isArray(keyValuePairs[0])\n ) {\n throw new Error(\n \"[AsyncStorage] Expected array of key-value pairs as first argument to multiSet\"\n );\n }\n\n if (callback && typeof callback !== \"function\") {\n if (Array.isArray(callback)) {\n throw new Error(\n \"[AsyncStorage] Expected function as second argument to multiSet. Did you forget to wrap key-value pairs in an array for the first argument?\"\n );\n }\n\n throw new Error(\n \"[AsyncStorage] Expected function as second argument to multiSet\"\n );\n }\n}\n\nexport function checkValidInput(...input: unknown[]) {\n const [key, value] = input;\n\n if (typeof key !== \"string\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[AsyncStorage] Using ${typeof key} type for key is not supported. This can lead to unexpected behavior/errors. Use string instead.\\nKey passed: ${key}\\n`\n );\n }\n\n if (input.length > 1 && typeof value !== \"string\") {\n if (value == null) {\n throw new Error(\n `[AsyncStorage] Passing null/undefined as value is not supported. If you want to remove value, Use .removeItem method instead.\\nPassed value: ${value}\\nPassed key: ${key}\\n`\n );\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `[AsyncStorage] The value for key \"${key}\" is not a string. This can lead to unexpected behavior/errors. Consider stringifying it.\\nPassed value: ${value}\\nPassed key: ${key}\\n`\n );\n }\n }\n}\n\nexport function convertError(error?: ErrorLike): Error | null {\n if (!error) {\n return null;\n }\n\n const out = new Error(error.message) as Error & ErrorLike;\n out[\"key\"] = error.key;\n return out;\n}\n\nexport function convertErrors(\n errs?: ErrorLike[]\n): ReadonlyArray | null {\n const errors = ensureArray(errs);\n return errors ? errors.map((e) => convertError(e)) : null;\n}\n\nfunction ensureArray(e?: ErrorLike | ErrorLike[]): ErrorLike[] | null {\n if (Array.isArray(e)) {\n return e.length === 0 ? null : e;\n } else if (e) {\n return [e];\n } else {\n return null;\n }\n}\n"],"mappings":";;;;;;;;;AAEO,SAASA,cAAcA,CAC5BC,aAAiC,EACjCC,QAAiB,EACjB;EACA,IACE,CAACC,KAAK,CAACC,OAAO,CAACH,aAAa,CAAC,IAC7BA,aAAa,CAACI,MAAM,KAAK,CAAC,IAC1B,CAACF,KAAK,CAACC,OAAO,CAACH,aAAa,CAAC,CAAC,CAAC,CAAC,EAChC;IACA,MAAM,IAAIK,KAAK,CACb,gFACF,CAAC;EACH;EAEA,IAAIJ,QAAQ,IAAI,OAAOA,QAAQ,KAAK,UAAU,EAAE;IAC9C,IAAIC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,EAAE;MAC3B,MAAM,IAAII,KAAK,CACb,6IACF,CAAC;IACH;IAEA,MAAM,IAAIA,KAAK,CACb,iEACF,CAAC;EACH;AACF;AAEO,SAASC,eAAeA,CAAC,GAAGC,KAAgB,EAAE;EACnD,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,GAAGF,KAAK;EAE1B,IAAI,OAAOC,GAAG,KAAK,QAAQ,EAAE;IAC3B;IACAE,OAAO,CAACC,IAAI,CACT,wBAAuB,OAAOH,GAAI,iHAAgHA,GAAI,IACzJ,CAAC;EACH;EAEA,IAAID,KAAK,CAACH,MAAM,GAAG,CAAC,IAAI,OAAOK,KAAK,KAAK,QAAQ,EAAE;IACjD,IAAIA,KAAK,IAAI,IAAI,EAAE;MACjB,MAAM,IAAIJ,KAAK,CACZ,gJAA+II,KAAM,iBAAgBD,GAAI,IAC5K,CAAC;IACH,CAAC,MAAM;MACL;MACAE,OAAO,CAACC,IAAI,CACT,qCAAoCH,GAAI,4GAA2GC,KAAM,iBAAgBD,GAAI,IAChL,CAAC;IACH;EACF;AACF;AAEO,SAASI,YAAYA,CAACC,KAAiB,EAAgB;EAC5D,IAAI,CAACA,KAAK,EAAE;IACV,OAAO,IAAI;EACb;EAEA,MAAMC,GAAG,GAAG,IAAIT,KAAK,CAACQ,KAAK,CAACE,OAAO,CAAsB;EACzDD,GAAG,CAAC,KAAK,CAAC,GAAGD,KAAK,CAACL,GAAG;EACtB,OAAOM,GAAG;AACZ;AAEO,SAASE,aAAaA,CAC3BC,IAAkB,EACkB;EACpC,MAAMC,MAAM,GAAGC,WAAW,CAACF,IAAI,CAAC;EAChC,OAAOC,MAAM,GAAGA,MAAM,CAACE,GAAG,CAAEC,CAAC,IAAKT,YAAY,CAACS,CAAC,CAAC,CAAC,GAAG,IAAI;AAC3D;AAEA,SAASF,WAAWA,CAACE,CAA2B,EAAsB;EACpE,IAAInB,KAAK,CAACC,OAAO,CAACkB,CAAC,CAAC,EAAE;IACpB,OAAOA,CAAC,CAACjB,MAAM,KAAK,CAAC,GAAG,IAAI,GAAGiB,CAAC;EAClC,CAAC,MAAM,IAAIA,CAAC,EAAE;IACZ,OAAO,CAACA,CAAC,CAAC;EACZ,CAAC,MAAM;IACL,OAAO,IAAI;EACb;AACF"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/hooks.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/hooks.js new file mode 100644 index 0000000..d58e823 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/hooks.js @@ -0,0 +1,17 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.useAsyncStorage = useAsyncStorage; +var _AsyncStorage = _interopRequireDefault(require("./AsyncStorage")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function useAsyncStorage(key) { + return { + getItem: (...args) => _AsyncStorage.default.getItem(key, ...args), + setItem: (...args) => _AsyncStorage.default.setItem(key, ...args), + mergeItem: (...args) => _AsyncStorage.default.mergeItem(key, ...args), + removeItem: (...args) => _AsyncStorage.default.removeItem(key, ...args) + }; +} +//# sourceMappingURL=hooks.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/hooks.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/hooks.js.map new file mode 100644 index 0000000..8a5906b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/hooks.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_AsyncStorage","_interopRequireDefault","require","obj","__esModule","default","useAsyncStorage","key","getItem","args","AsyncStorage","setItem","mergeItem","removeItem"],"sources":["hooks.ts"],"sourcesContent":["import AsyncStorage from \"./AsyncStorage\";\nimport type { AsyncStorageHook } from \"./types\";\n\nexport function useAsyncStorage(key: string): AsyncStorageHook {\n return {\n getItem: (...args) => AsyncStorage.getItem(key, ...args),\n setItem: (...args) => AsyncStorage.setItem(key, ...args),\n mergeItem: (...args) => AsyncStorage.mergeItem(key, ...args),\n removeItem: (...args) => AsyncStorage.removeItem(key, ...args),\n };\n}\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA0C,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAGnC,SAASG,eAAeA,CAACC,GAAW,EAAoB;EAC7D,OAAO;IACLC,OAAO,EAAEA,CAAC,GAAGC,IAAI,KAAKC,qBAAY,CAACF,OAAO,CAACD,GAAG,EAAE,GAAGE,IAAI,CAAC;IACxDE,OAAO,EAAEA,CAAC,GAAGF,IAAI,KAAKC,qBAAY,CAACC,OAAO,CAACJ,GAAG,EAAE,GAAGE,IAAI,CAAC;IACxDG,SAAS,EAAEA,CAAC,GAAGH,IAAI,KAAKC,qBAAY,CAACE,SAAS,CAACL,GAAG,EAAE,GAAGE,IAAI,CAAC;IAC5DI,UAAU,EAAEA,CAAC,GAAGJ,IAAI,KAAKC,qBAAY,CAACG,UAAU,CAACN,GAAG,EAAE,GAAGE,IAAI;EAC/D,CAAC;AACH"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/index.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/index.js new file mode 100644 index 0000000..ebe7256 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/index.js @@ -0,0 +1,18 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +Object.defineProperty(exports, "useAsyncStorage", { + enumerable: true, + get: function () { + return _hooks.useAsyncStorage; + } +}); +var _AsyncStorage = _interopRequireDefault(require("./AsyncStorage")); +var _hooks = require("./hooks"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var _default = _AsyncStorage.default; +exports.default = _default; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/index.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/index.js.map new file mode 100644 index 0000000..66a7b64 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_AsyncStorage","_interopRequireDefault","require","_hooks","obj","__esModule","default","_default","AsyncStorage","exports"],"sources":["index.ts"],"sourcesContent":["import AsyncStorage from \"./AsyncStorage\";\n\nexport { useAsyncStorage } from \"./hooks\";\n\nexport type { AsyncStorageStatic } from \"./types\";\n\nexport default AsyncStorage;\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAA0C,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,IAAAG,QAAA,GAI3BC,qBAAY;AAAAC,OAAA,CAAAH,OAAA,GAAAC,QAAA"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/shouldFallbackToLegacyNativeModule.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/shouldFallbackToLegacyNativeModule.js new file mode 100644 index 0000000..0fd05f2 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/shouldFallbackToLegacyNativeModule.js @@ -0,0 +1,34 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.shouldFallbackToLegacyNativeModule = shouldFallbackToLegacyNativeModule; +var _reactNative = require("react-native"); +function shouldFallbackToLegacyNativeModule() { + var _NativeModules$Native; + const expoConstants = (_NativeModules$Native = _reactNative.NativeModules["NativeUnimoduleProxy"]) === null || _NativeModules$Native === void 0 || (_NativeModules$Native = _NativeModules$Native.modulesConstants) === null || _NativeModules$Native === void 0 ? void 0 : _NativeModules$Native.ExponentConstants; + if (expoConstants) { + /** + * In SDK <= 39, appOwnership is defined in managed apps but executionEnvironment is not. + * In bare React Native apps using expo-constants, appOwnership is never defined, so + * isLegacySdkVersion will be false in that context. + */ + const isLegacySdkVersion = expoConstants.appOwnership && !expoConstants.executionEnvironment; + + /** + * Expo managed apps don't include the @react-native-async-storage/async-storage + * native modules yet, but the API interface is the same, so we can use the version + * exported from React Native still. + * + * If in future releases (eg: @react-native-async-storage/async-storage >= 2.0.0) this + * will likely not be valid anymore, and the package will need to be included in the Expo SDK + * to continue to work. + */ + if (isLegacySdkVersion || ["storeClient", "standalone"].includes(expoConstants.executionEnvironment)) { + return true; + } + } + return false; +} +//# sourceMappingURL=shouldFallbackToLegacyNativeModule.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/shouldFallbackToLegacyNativeModule.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/shouldFallbackToLegacyNativeModule.js.map new file mode 100644 index 0000000..3b0bfa8 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/shouldFallbackToLegacyNativeModule.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_reactNative","require","shouldFallbackToLegacyNativeModule","_NativeModules$Native","expoConstants","NativeModules","modulesConstants","ExponentConstants","isLegacySdkVersion","appOwnership","executionEnvironment","includes"],"sources":["shouldFallbackToLegacyNativeModule.ts"],"sourcesContent":["import { NativeModules } from \"react-native\";\n\nexport function shouldFallbackToLegacyNativeModule(): boolean {\n const expoConstants =\n NativeModules[\"NativeUnimoduleProxy\"]?.modulesConstants?.ExponentConstants;\n\n if (expoConstants) {\n /**\n * In SDK <= 39, appOwnership is defined in managed apps but executionEnvironment is not.\n * In bare React Native apps using expo-constants, appOwnership is never defined, so\n * isLegacySdkVersion will be false in that context.\n */\n const isLegacySdkVersion =\n expoConstants.appOwnership && !expoConstants.executionEnvironment;\n\n /**\n * Expo managed apps don't include the @react-native-async-storage/async-storage\n * native modules yet, but the API interface is the same, so we can use the version\n * exported from React Native still.\n *\n * If in future releases (eg: @react-native-async-storage/async-storage >= 2.0.0) this\n * will likely not be valid anymore, and the package will need to be included in the Expo SDK\n * to continue to work.\n */\n if (\n isLegacySdkVersion ||\n [\"storeClient\", \"standalone\"].includes(expoConstants.executionEnvironment)\n ) {\n return true;\n }\n }\n\n return false;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,SAASC,kCAAkCA,CAAA,EAAY;EAAA,IAAAC,qBAAA;EAC5D,MAAMC,aAAa,IAAAD,qBAAA,GACjBE,0BAAa,CAAC,sBAAsB,CAAC,cAAAF,qBAAA,gBAAAA,qBAAA,GAArCA,qBAAA,CAAuCG,gBAAgB,cAAAH,qBAAA,uBAAvDA,qBAAA,CAAyDI,iBAAiB;EAE5E,IAAIH,aAAa,EAAE;IACjB;AACJ;AACA;AACA;AACA;IACI,MAAMI,kBAAkB,GACtBJ,aAAa,CAACK,YAAY,IAAI,CAACL,aAAa,CAACM,oBAAoB;;IAEnE;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI,IACEF,kBAAkB,IAClB,CAAC,aAAa,EAAE,YAAY,CAAC,CAACG,QAAQ,CAACP,aAAa,CAACM,oBAAoB,CAAC,EAC1E;MACA,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK;AACd"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/types.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/types.js new file mode 100644 index 0000000..2f0e414 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/types.js @@ -0,0 +1,2 @@ +"use strict"; +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/types.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/types.js.map new file mode 100644 index 0000000..d777c8a --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/commonjs/types.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["export type ErrorLike = {\n message: string;\n key?: string;\n};\n\nexport type Callback = (error?: Error | null) => void;\n\nexport type CallbackWithResult = (\n error?: Error | null,\n result?: T | null\n) => void;\n\nexport type KeyValuePair = [string, string | null];\n\nexport type MultiCallback = (errors?: readonly (Error | null)[] | null) => void;\n\nexport type MultiGetCallback = (\n errors?: readonly (Error | null)[] | null,\n result?: readonly KeyValuePair[]\n) => void;\n\nexport type MultiRequest = {\n keys: readonly string[];\n callback?: MultiGetCallback;\n keyIndex: number;\n resolve?: (result: readonly KeyValuePair[]) => void;\n reject?: (error?: ErrorLike) => void;\n};\n\nexport type AsyncStorageHook = {\n getItem: (callback?: CallbackWithResult) => Promise;\n setItem: (value: string, callback?: Callback) => Promise;\n mergeItem: (value: string, callback?: Callback) => Promise;\n removeItem: (callback?: Callback) => Promise;\n};\n\n/**\n * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value\n * storage system that is global to the app. It should be used instead of\n * LocalStorage.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api\n */\nexport type AsyncStorageStatic = {\n /**\n * Fetches an item for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#getitem\n */\n getItem: (\n key: string,\n callback?: CallbackWithResult\n ) => Promise;\n\n /**\n * Sets the value for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#setitem\n */\n setItem: (key: string, value: string, callback?: Callback) => Promise;\n\n /**\n * Removes an item for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#removeitem\n */\n removeItem: (key: string, callback?: Callback) => Promise;\n\n /**\n * Merges an existing `key` value with an input value, assuming both values\n * are stringified JSON.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#mergeitem\n */\n mergeItem: (key: string, value: string, callback?: Callback) => Promise;\n\n /**\n * Erases *all* `AsyncStorage` for all clients, libraries, etc. You probably\n * don't want to call this; use `removeItem` or `multiRemove` to clear only\n * your app's keys.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#clear\n */\n clear: (callback?: Callback) => Promise;\n\n /**\n * Gets *all* keys known to your app; for all callers, libraries, etc.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#getallkeys\n */\n getAllKeys: (\n callback?: CallbackWithResult\n ) => Promise;\n\n /**\n * The following batched functions are useful for executing a lot of\n * operations at once, allowing for native optimizations and provide the\n * convenience of a single callback after all operations are complete.\n *\n * These functions return arrays of errors, potentially one for every key.\n * For key-specific errors, the Error object will have a key property to\n * indicate which key caused the error.\n */\n\n /**\n * Flushes any pending requests using a single batch call to get the data.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#flushgetrequests\n * */\n flushGetRequests: () => void;\n\n /**\n * This allows you to batch the fetching of items given an array of `key`\n * inputs. Your callback will be invoked with an array of corresponding\n * key-value pairs found.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiget\n */\n multiGet: (\n keys: readonly string[],\n callback?: MultiGetCallback\n ) => Promise;\n\n /**\n * Use this as a batch operation for storing multiple key-value pairs. When\n * the operation completes you'll get a single callback with any errors.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiset\n */\n multiSet: (\n keyValuePairs: ReadonlyArray,\n callback?: MultiCallback\n ) => Promise;\n\n /**\n * Call this to batch the deletion of all keys in the `keys` array.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiremove\n */\n multiRemove: (\n keys: readonly string[],\n callback?: MultiCallback\n ) => Promise;\n\n /**\n * Batch operation to merge in existing and new values for a given set of\n * keys. This assumes that the values are stringified JSON.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multimerge\n */\n multiMerge: (\n keyValuePairs: [string, string][],\n callback?: MultiCallback\n ) => Promise;\n};\n"],"mappings":""} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.js new file mode 100644 index 0000000..cf33895 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.js @@ -0,0 +1,139 @@ +/** + * Copyright (c) Nicolas Gallagher. + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import mergeOptions from "merge-options"; + +// eslint-disable-next-line @typescript-eslint/ban-types + +// eslint-disable-next-line @typescript-eslint/ban-types + +const merge = mergeOptions.bind({ + concatArrays: true, + ignoreUndefined: true +}); +function mergeLocalStorageItem(key, value) { + const oldValue = window.localStorage.getItem(key); + if (oldValue) { + const oldObject = JSON.parse(oldValue); + const newObject = JSON.parse(value); + const nextValue = JSON.stringify(merge(oldObject, newObject)); + window.localStorage.setItem(key, nextValue); + } else { + window.localStorage.setItem(key, value); + } +} +function createPromise(getValue, callback) { + return new Promise((resolve, reject) => { + try { + const value = getValue(); + callback === null || callback === void 0 ? void 0 : callback(null, value); + resolve(value); + } catch (err) { + callback === null || callback === void 0 ? void 0 : callback(err); + reject(err); + } + }); +} +function createPromiseAll(promises, callback, processResult) { + return Promise.all(promises).then(result => { + const value = (processResult === null || processResult === void 0 ? void 0 : processResult(result)) ?? null; + callback === null || callback === void 0 ? void 0 : callback(null, value); + return Promise.resolve(value); + }, errors => { + callback === null || callback === void 0 ? void 0 : callback(errors); + return Promise.reject(errors); + }); +} +const AsyncStorage = { + /** + * Fetches `key` value. + */ + getItem: (key, callback) => { + return createPromise(() => window.localStorage.getItem(key), callback); + }, + /** + * Sets `value` for `key`. + */ + setItem: (key, value, callback) => { + return createPromise(() => window.localStorage.setItem(key, value), callback); + }, + /** + * Removes a `key` + */ + removeItem: (key, callback) => { + return createPromise(() => window.localStorage.removeItem(key), callback); + }, + /** + * Merges existing value with input value, assuming they are stringified JSON. + */ + mergeItem: (key, value, callback) => { + return createPromise(() => mergeLocalStorageItem(key, value), callback); + }, + /** + * Erases *all* AsyncStorage for the domain. + */ + clear: callback => { + return createPromise(() => window.localStorage.clear(), callback); + }, + /** + * Gets *all* keys known to the app, for all callers, libraries, etc. + */ + getAllKeys: callback => { + return createPromise(() => { + const numberOfKeys = window.localStorage.length; + const keys = []; + for (let i = 0; i < numberOfKeys; i += 1) { + const key = window.localStorage.key(i) || ""; + keys.push(key); + } + return keys; + }, callback); + }, + /** + * (stub) Flushes any pending requests using a single batch call to get the data. + */ + flushGetRequests: () => undefined, + /** + * multiGet resolves to an array of key-value pair arrays that matches the + * input format of multiSet. + * + * multiGet(['k1', 'k2']) -> [['k1', 'val1'], ['k2', 'val2']] + */ + multiGet: (keys, callback) => { + const promises = keys.map(key => AsyncStorage.getItem(key)); + const processResult = result => result.map((value, i) => [keys[i], value]); + return createPromiseAll(promises, callback, processResult); + }, + /** + * Takes an array of key-value array pairs. + * multiSet([['k1', 'val1'], ['k2', 'val2']]) + */ + multiSet: (keyValuePairs, callback) => { + const promises = keyValuePairs.map(item => AsyncStorage.setItem(item[0], item[1])); + return createPromiseAll(promises, callback); + }, + /** + * Delete all the keys in the `keys` array. + */ + multiRemove: (keys, callback) => { + const promises = keys.map(key => AsyncStorage.removeItem(key)); + return createPromiseAll(promises, callback); + }, + /** + * Takes an array of key-value array pairs and merges them with existing + * values, assuming they are stringified JSON. + * + * multiMerge([['k1', 'val1'], ['k2', 'val2']]) + */ + multiMerge: (keyValuePairs, callback) => { + const promises = keyValuePairs.map(item => AsyncStorage.mergeItem(item[0], item[1])); + return createPromiseAll(promises, callback); + } +}; +export default AsyncStorage; +//# sourceMappingURL=AsyncStorage.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.js.map new file mode 100644 index 0000000..8774af0 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.js.map @@ -0,0 +1 @@ +{"version":3,"names":["mergeOptions","merge","bind","concatArrays","ignoreUndefined","mergeLocalStorageItem","key","value","oldValue","window","localStorage","getItem","oldObject","JSON","parse","newObject","nextValue","stringify","setItem","createPromise","getValue","callback","Promise","resolve","reject","err","createPromiseAll","promises","processResult","all","then","result","errors","AsyncStorage","removeItem","mergeItem","clear","getAllKeys","numberOfKeys","length","keys","i","push","flushGetRequests","undefined","multiGet","map","multiSet","keyValuePairs","item","multiRemove","multiMerge"],"sources":["AsyncStorage.ts"],"sourcesContent":["/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport mergeOptions from \"merge-options\";\nimport type {\n AsyncStorageStatic,\n MultiCallback,\n MultiGetCallback,\n} from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/ban-types\ntype OnMultiResult = Function;\n// eslint-disable-next-line @typescript-eslint/ban-types\ntype OnResult = Function;\n\nconst merge = mergeOptions.bind({\n concatArrays: true,\n ignoreUndefined: true,\n});\n\nfunction mergeLocalStorageItem(key: string, value: string) {\n const oldValue = window.localStorage.getItem(key);\n if (oldValue) {\n const oldObject = JSON.parse(oldValue);\n const newObject = JSON.parse(value);\n const nextValue = JSON.stringify(merge(oldObject, newObject));\n window.localStorage.setItem(key, nextValue);\n } else {\n window.localStorage.setItem(key, value);\n }\n}\n\nfunction createPromise(\n getValue: () => Result,\n callback?: Callback\n): Promise {\n return new Promise((resolve, reject) => {\n try {\n const value = getValue();\n callback?.(null, value);\n resolve(value);\n } catch (err) {\n callback?.(err);\n reject(err);\n }\n });\n}\n\nfunction createPromiseAll<\n ReturnType,\n Result,\n ResultProcessor extends OnMultiResult\n>(\n promises: Promise[],\n callback?: MultiCallback | MultiGetCallback,\n processResult?: ResultProcessor\n): Promise {\n return Promise.all(promises).then(\n (result) => {\n const value = processResult?.(result) ?? null;\n callback?.(null, value);\n return Promise.resolve(value);\n },\n (errors) => {\n callback?.(errors);\n return Promise.reject(errors);\n }\n );\n}\n\nconst AsyncStorage: AsyncStorageStatic = {\n /**\n * Fetches `key` value.\n */\n getItem: (key, callback) => {\n return createPromise(() => window.localStorage.getItem(key), callback);\n },\n\n /**\n * Sets `value` for `key`.\n */\n setItem: (key, value, callback) => {\n return createPromise(\n () => window.localStorage.setItem(key, value),\n callback\n );\n },\n\n /**\n * Removes a `key`\n */\n removeItem: (key, callback) => {\n return createPromise(() => window.localStorage.removeItem(key), callback);\n },\n\n /**\n * Merges existing value with input value, assuming they are stringified JSON.\n */\n mergeItem: (key, value, callback) => {\n return createPromise(() => mergeLocalStorageItem(key, value), callback);\n },\n\n /**\n * Erases *all* AsyncStorage for the domain.\n */\n clear: (callback) => {\n return createPromise(() => window.localStorage.clear(), callback);\n },\n\n /**\n * Gets *all* keys known to the app, for all callers, libraries, etc.\n */\n getAllKeys: (callback) => {\n return createPromise(() => {\n const numberOfKeys = window.localStorage.length;\n const keys: string[] = [];\n for (let i = 0; i < numberOfKeys; i += 1) {\n const key = window.localStorage.key(i) || \"\";\n keys.push(key);\n }\n return keys;\n }, callback);\n },\n\n /**\n * (stub) Flushes any pending requests using a single batch call to get the data.\n */\n flushGetRequests: () => undefined,\n\n /**\n * multiGet resolves to an array of key-value pair arrays that matches the\n * input format of multiSet.\n *\n * multiGet(['k1', 'k2']) -> [['k1', 'val1'], ['k2', 'val2']]\n */\n multiGet: (keys, callback) => {\n const promises = keys.map((key) => AsyncStorage.getItem(key));\n const processResult = (result: string[]) =>\n result.map((value, i) => [keys[i], value]);\n return createPromiseAll(promises, callback, processResult);\n },\n\n /**\n * Takes an array of key-value array pairs.\n * multiSet([['k1', 'val1'], ['k2', 'val2']])\n */\n multiSet: (keyValuePairs, callback) => {\n const promises = keyValuePairs.map((item) =>\n AsyncStorage.setItem(item[0], item[1])\n );\n return createPromiseAll(promises, callback);\n },\n\n /**\n * Delete all the keys in the `keys` array.\n */\n multiRemove: (keys, callback) => {\n const promises = keys.map((key) => AsyncStorage.removeItem(key));\n return createPromiseAll(promises, callback);\n },\n\n /**\n * Takes an array of key-value array pairs and merges them with existing\n * values, assuming they are stringified JSON.\n *\n * multiMerge([['k1', 'val1'], ['k2', 'val2']])\n */\n multiMerge: (keyValuePairs, callback) => {\n const promises = keyValuePairs.map((item) =>\n AsyncStorage.mergeItem(item[0], item[1])\n );\n return createPromiseAll(promises, callback);\n },\n};\n\nexport default AsyncStorage;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,YAAY,MAAM,eAAe;;AAOxC;;AAEA;;AAGA,MAAMC,KAAK,GAAGD,YAAY,CAACE,IAAI,CAAC;EAC9BC,YAAY,EAAE,IAAI;EAClBC,eAAe,EAAE;AACnB,CAAC,CAAC;AAEF,SAASC,qBAAqBA,CAACC,GAAW,EAAEC,KAAa,EAAE;EACzD,MAAMC,QAAQ,GAAGC,MAAM,CAACC,YAAY,CAACC,OAAO,CAACL,GAAG,CAAC;EACjD,IAAIE,QAAQ,EAAE;IACZ,MAAMI,SAAS,GAAGC,IAAI,CAACC,KAAK,CAACN,QAAQ,CAAC;IACtC,MAAMO,SAAS,GAAGF,IAAI,CAACC,KAAK,CAACP,KAAK,CAAC;IACnC,MAAMS,SAAS,GAAGH,IAAI,CAACI,SAAS,CAAChB,KAAK,CAACW,SAAS,EAAEG,SAAS,CAAC,CAAC;IAC7DN,MAAM,CAACC,YAAY,CAACQ,OAAO,CAACZ,GAAG,EAAEU,SAAS,CAAC;EAC7C,CAAC,MAAM;IACLP,MAAM,CAACC,YAAY,CAACQ,OAAO,CAACZ,GAAG,EAAEC,KAAK,CAAC;EACzC;AACF;AAEA,SAASY,aAAaA,CACpBC,QAAsB,EACtBC,QAAmB,EACF;EACjB,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAI;MACF,MAAMjB,KAAK,GAAGa,QAAQ,CAAC,CAAC;MACxBC,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAG,IAAI,EAAEd,KAAK,CAAC;MACvBgB,OAAO,CAAChB,KAAK,CAAC;IAChB,CAAC,CAAC,OAAOkB,GAAG,EAAE;MACZJ,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGI,GAAG,CAAC;MACfD,MAAM,CAACC,GAAG,CAAC;IACb;EACF,CAAC,CAAC;AACJ;AAEA,SAASC,gBAAgBA,CAKvBC,QAA2B,EAC3BN,QAA2C,EAC3CO,aAA+B,EACV;EACrB,OAAON,OAAO,CAACO,GAAG,CAACF,QAAQ,CAAC,CAACG,IAAI,CAC9BC,MAAM,IAAK;IACV,MAAMxB,KAAK,GAAG,CAAAqB,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAGG,MAAM,CAAC,KAAI,IAAI;IAC7CV,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAG,IAAI,EAAEd,KAAK,CAAC;IACvB,OAAOe,OAAO,CAACC,OAAO,CAAChB,KAAK,CAAC;EAC/B,CAAC,EACAyB,MAAM,IAAK;IACVX,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGW,MAAM,CAAC;IAClB,OAAOV,OAAO,CAACE,MAAM,CAACQ,MAAM,CAAC;EAC/B,CACF,CAAC;AACH;AAEA,MAAMC,YAAgC,GAAG;EACvC;AACF;AACA;EACEtB,OAAO,EAAEA,CAACL,GAAG,EAAEe,QAAQ,KAAK;IAC1B,OAAOF,aAAa,CAAC,MAAMV,MAAM,CAACC,YAAY,CAACC,OAAO,CAACL,GAAG,CAAC,EAAEe,QAAQ,CAAC;EACxE,CAAC;EAED;AACF;AACA;EACEH,OAAO,EAAEA,CAACZ,GAAG,EAAEC,KAAK,EAAEc,QAAQ,KAAK;IACjC,OAAOF,aAAa,CAClB,MAAMV,MAAM,CAACC,YAAY,CAACQ,OAAO,CAACZ,GAAG,EAAEC,KAAK,CAAC,EAC7Cc,QACF,CAAC;EACH,CAAC;EAED;AACF;AACA;EACEa,UAAU,EAAEA,CAAC5B,GAAG,EAAEe,QAAQ,KAAK;IAC7B,OAAOF,aAAa,CAAC,MAAMV,MAAM,CAACC,YAAY,CAACwB,UAAU,CAAC5B,GAAG,CAAC,EAAEe,QAAQ,CAAC;EAC3E,CAAC;EAED;AACF;AACA;EACEc,SAAS,EAAEA,CAAC7B,GAAG,EAAEC,KAAK,EAAEc,QAAQ,KAAK;IACnC,OAAOF,aAAa,CAAC,MAAMd,qBAAqB,CAACC,GAAG,EAAEC,KAAK,CAAC,EAAEc,QAAQ,CAAC;EACzE,CAAC;EAED;AACF;AACA;EACEe,KAAK,EAAGf,QAAQ,IAAK;IACnB,OAAOF,aAAa,CAAC,MAAMV,MAAM,CAACC,YAAY,CAAC0B,KAAK,CAAC,CAAC,EAAEf,QAAQ,CAAC;EACnE,CAAC;EAED;AACF;AACA;EACEgB,UAAU,EAAGhB,QAAQ,IAAK;IACxB,OAAOF,aAAa,CAAC,MAAM;MACzB,MAAMmB,YAAY,GAAG7B,MAAM,CAACC,YAAY,CAAC6B,MAAM;MAC/C,MAAMC,IAAc,GAAG,EAAE;MACzB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,YAAY,EAAEG,CAAC,IAAI,CAAC,EAAE;QACxC,MAAMnC,GAAG,GAAGG,MAAM,CAACC,YAAY,CAACJ,GAAG,CAACmC,CAAC,CAAC,IAAI,EAAE;QAC5CD,IAAI,CAACE,IAAI,CAACpC,GAAG,CAAC;MAChB;MACA,OAAOkC,IAAI;IACb,CAAC,EAAEnB,QAAQ,CAAC;EACd,CAAC;EAED;AACF;AACA;EACEsB,gBAAgB,EAAEA,CAAA,KAAMC,SAAS;EAEjC;AACF;AACA;AACA;AACA;AACA;EACEC,QAAQ,EAAEA,CAACL,IAAI,EAAEnB,QAAQ,KAAK;IAC5B,MAAMM,QAAQ,GAAGa,IAAI,CAACM,GAAG,CAAExC,GAAG,IAAK2B,YAAY,CAACtB,OAAO,CAACL,GAAG,CAAC,CAAC;IAC7D,MAAMsB,aAAa,GAAIG,MAAgB,IACrCA,MAAM,CAACe,GAAG,CAAC,CAACvC,KAAK,EAAEkC,CAAC,KAAK,CAACD,IAAI,CAACC,CAAC,CAAC,EAAElC,KAAK,CAAC,CAAC;IAC5C,OAAOmB,gBAAgB,CAACC,QAAQ,EAAEN,QAAQ,EAAEO,aAAa,CAAC;EAC5D,CAAC;EAED;AACF;AACA;AACA;EACEmB,QAAQ,EAAEA,CAACC,aAAa,EAAE3B,QAAQ,KAAK;IACrC,MAAMM,QAAQ,GAAGqB,aAAa,CAACF,GAAG,CAAEG,IAAI,IACtChB,YAAY,CAACf,OAAO,CAAC+B,IAAI,CAAC,CAAC,CAAC,EAAEA,IAAI,CAAC,CAAC,CAAC,CACvC,CAAC;IACD,OAAOvB,gBAAgB,CAACC,QAAQ,EAAEN,QAAQ,CAAC;EAC7C,CAAC;EAED;AACF;AACA;EACE6B,WAAW,EAAEA,CAACV,IAAI,EAAEnB,QAAQ,KAAK;IAC/B,MAAMM,QAAQ,GAAGa,IAAI,CAACM,GAAG,CAAExC,GAAG,IAAK2B,YAAY,CAACC,UAAU,CAAC5B,GAAG,CAAC,CAAC;IAChE,OAAOoB,gBAAgB,CAACC,QAAQ,EAAEN,QAAQ,CAAC;EAC7C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACE8B,UAAU,EAAEA,CAACH,aAAa,EAAE3B,QAAQ,KAAK;IACvC,MAAMM,QAAQ,GAAGqB,aAAa,CAACF,GAAG,CAAEG,IAAI,IACtChB,YAAY,CAACE,SAAS,CAACc,IAAI,CAAC,CAAC,CAAC,EAAEA,IAAI,CAAC,CAAC,CAAC,CACzC,CAAC;IACD,OAAOvB,gBAAgB,CAACC,QAAQ,EAAEN,QAAQ,CAAC;EAC7C;AACF,CAAC;AAED,eAAeY,YAAY"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.native.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.native.js new file mode 100644 index 0000000..6ad7ba3 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.native.js @@ -0,0 +1,316 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { checkValidArgs, checkValidInput, convertError, convertErrors } from "./helpers"; +import RCTAsyncStorage from "./RCTAsyncStorage"; +if (!RCTAsyncStorage) { + throw new Error(`[@RNC/AsyncStorage]: NativeModule: AsyncStorage is null. + +To fix this issue try these steps: + + • Uninstall, rebuild and restart the app. + + • Run the packager with \`--reset-cache\` flag. + + • If you are using CocoaPods on iOS, run \`pod install\` in the \`ios\` directory, then rebuild and re-run the app. + + • Make sure your project's \`package.json\` depends on \`@react-native-async-storage/async-storage\`, even if you only depend on it indirectly through other dependencies. CLI only autolinks native modules found in your \`package.json\`. + + • If this happens while testing with Jest, check out how to integrate AsyncStorage here: https://react-native-async-storage.github.io/async-storage/docs/advanced/jest + +If none of these fix the issue, please open an issue on the GitHub repository: https://github.com/react-native-async-storage/async-storage/issues +`); +} + +/** + * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value + * storage system that is global to the app. It should be used instead of + * LocalStorage. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api + */ +const AsyncStorage = (() => { + let _getRequests = []; + let _getKeys = []; + let _immediate = null; + return { + /** + * Fetches an item for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#getitem + */ + getItem: (key, callback) => { + return new Promise((resolve, reject) => { + checkValidInput(key); + RCTAsyncStorage.multiGet([key], (errors, result) => { + var _result$; + // Unpack result to get value from [[key,value]] + const value = result !== null && result !== void 0 && (_result$ = result[0]) !== null && _result$ !== void 0 && _result$[1] ? result[0][1] : null; + const errs = convertErrors(errors); + callback === null || callback === void 0 ? void 0 : callback(errs === null || errs === void 0 ? void 0 : errs[0], value); + if (errs) { + reject(errs[0]); + } else { + resolve(value); + } + }); + }); + }, + /** + * Sets the value for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#setitem + */ + setItem: (key, value, callback) => { + return new Promise((resolve, reject) => { + checkValidInput(key, value); + RCTAsyncStorage.multiSet([[key, value]], errors => { + const errs = convertErrors(errors); + callback === null || callback === void 0 ? void 0 : callback(errs === null || errs === void 0 ? void 0 : errs[0]); + if (errs) { + reject(errs[0]); + } else { + resolve(); + } + }); + }); + }, + /** + * Removes an item for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#removeitem + */ + removeItem: (key, callback) => { + return new Promise((resolve, reject) => { + checkValidInput(key); + RCTAsyncStorage.multiRemove([key], errors => { + const errs = convertErrors(errors); + callback === null || callback === void 0 ? void 0 : callback(errs === null || errs === void 0 ? void 0 : errs[0]); + if (errs) { + reject(errs[0]); + } else { + resolve(); + } + }); + }); + }, + /** + * Merges an existing `key` value with an input value, assuming both values + * are stringified JSON. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#mergeitem + */ + mergeItem: (key, value, callback) => { + return new Promise((resolve, reject) => { + checkValidInput(key, value); + RCTAsyncStorage.multiMerge([[key, value]], errors => { + const errs = convertErrors(errors); + callback === null || callback === void 0 ? void 0 : callback(errs === null || errs === void 0 ? void 0 : errs[0]); + if (errs) { + reject(errs[0]); + } else { + resolve(); + } + }); + }); + }, + /** + * Erases *all* `AsyncStorage` for all clients, libraries, etc. You probably + * don't want to call this; use `removeItem` or `multiRemove` to clear only + * your app's keys. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#clear + */ + clear: callback => { + return new Promise((resolve, reject) => { + RCTAsyncStorage.clear(error => { + const err = convertError(error); + callback === null || callback === void 0 ? void 0 : callback(err); + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + }, + /** + * Gets *all* keys known to your app; for all callers, libraries, etc. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#getallkeys + */ + getAllKeys: callback => { + return new Promise((resolve, reject) => { + RCTAsyncStorage.getAllKeys((error, keys) => { + const err = convertError(error); + callback === null || callback === void 0 ? void 0 : callback(err, keys); + if (keys) { + resolve(keys); + } else { + reject(err); + } + }); + }); + }, + /** + * The following batched functions are useful for executing a lot of + * operations at once, allowing for native optimizations and provide the + * convenience of a single callback after all operations are complete. + * + * These functions return arrays of errors, potentially one for every key. + * For key-specific errors, the Error object will have a key property to + * indicate which key caused the error. + */ + + /** + * Flushes any pending requests using a single batch call to get the data. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#flushgetrequests + * */ + flushGetRequests: () => { + const getRequests = _getRequests; + const getKeys = _getKeys; + _getRequests = []; + _getKeys = []; + RCTAsyncStorage.multiGet(getKeys, (errors, result) => { + // Even though the runtime complexity of this is theoretically worse vs if we used a map, + // it's much, much faster in practice for the data sets we deal with (we avoid + // allocating result pair arrays). This was heavily benchmarked. + // + // Is there a way to avoid using the map but fix the bug in this breaking test? + // https://github.com/facebook/react-native/commit/8dd8ad76579d7feef34c014d387bf02065692264 + const map = {}; + result === null || result === void 0 ? void 0 : result.forEach(([key, value]) => { + map[key] = value; + return value; + }); + const reqLength = getRequests.length; + + /** + * As mentioned few lines above, this method could be called with the array of potential error, + * in case of anything goes wrong. The problem is, if any of the batched calls fails + * the rest of them would fail too, but the error would be consumed by just one. The rest + * would simply return `undefined` as their result, rendering false negatives. + * + * In order to avoid this situation, in case of any call failing, + * the rest of them will be rejected as well (with the same error). + */ + const errorList = convertErrors(errors); + const error = errorList !== null && errorList !== void 0 && errorList.length ? errorList[0] : null; + for (let i = 0; i < reqLength; i++) { + var _request$callback2, _request$resolve; + const request = getRequests[i]; + if (error) { + var _request$callback, _request$reject; + (_request$callback = request.callback) === null || _request$callback === void 0 ? void 0 : _request$callback.call(request, errorList); + (_request$reject = request.reject) === null || _request$reject === void 0 ? void 0 : _request$reject.call(request, error); + continue; + } + const requestResult = request.keys.map(key => [key, map[key]]); + (_request$callback2 = request.callback) === null || _request$callback2 === void 0 ? void 0 : _request$callback2.call(request, null, requestResult); + (_request$resolve = request.resolve) === null || _request$resolve === void 0 ? void 0 : _request$resolve.call(request, requestResult); + } + }); + }, + /** + * This allows you to batch the fetching of items given an array of `key` + * inputs. Your callback will be invoked with an array of corresponding + * key-value pairs found. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiget + */ + multiGet: (keys, callback) => { + if (!_immediate) { + _immediate = setImmediate(() => { + _immediate = null; + AsyncStorage.flushGetRequests(); + }); + } + const getRequest = { + keys: keys, + callback: callback, + // do we need this? + keyIndex: _getKeys.length + }; + const promiseResult = new Promise((resolve, reject) => { + getRequest.resolve = resolve; + getRequest.reject = reject; + }); + _getRequests.push(getRequest); + // avoid fetching duplicates + keys.forEach(key => { + if (_getKeys.indexOf(key) === -1) { + _getKeys.push(key); + } + }); + return promiseResult; + }, + /** + * Use this as a batch operation for storing multiple key-value pairs. When + * the operation completes you'll get a single callback with any errors. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiset + */ + multiSet: (keyValuePairs, callback) => { + checkValidArgs(keyValuePairs, callback); + return new Promise((resolve, reject) => { + keyValuePairs.forEach(([key, value]) => { + checkValidInput(key, value); + }); + RCTAsyncStorage.multiSet(keyValuePairs, errors => { + const error = convertErrors(errors); + callback === null || callback === void 0 ? void 0 : callback(error); + if (error) { + reject(error); + } else { + resolve(); + } + }); + }); + }, + /** + * Call this to batch the deletion of all keys in the `keys` array. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiremove + */ + multiRemove: (keys, callback) => { + return new Promise((resolve, reject) => { + keys.forEach(key => checkValidInput(key)); + RCTAsyncStorage.multiRemove(keys, errors => { + const error = convertErrors(errors); + callback === null || callback === void 0 ? void 0 : callback(error); + if (error) { + reject(error); + } else { + resolve(); + } + }); + }); + }, + /** + * Batch operation to merge in existing and new values for a given set of + * keys. This assumes that the values are stringified JSON. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multimerge + */ + multiMerge: (keyValuePairs, callback) => { + return new Promise((resolve, reject) => { + RCTAsyncStorage.multiMerge(keyValuePairs, errors => { + const error = convertErrors(errors); + callback === null || callback === void 0 ? void 0 : callback(error); + if (error) { + reject(error); + } else { + resolve(); + } + }); + }); + } + }; +})(); +export default AsyncStorage; +//# sourceMappingURL=AsyncStorage.native.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.native.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.native.js.map new file mode 100644 index 0000000..010f7d0 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/AsyncStorage.native.js.map @@ -0,0 +1 @@ +{"version":3,"names":["checkValidArgs","checkValidInput","convertError","convertErrors","RCTAsyncStorage","Error","AsyncStorage","_getRequests","_getKeys","_immediate","getItem","key","callback","Promise","resolve","reject","multiGet","errors","result","_result$","value","errs","setItem","multiSet","removeItem","multiRemove","mergeItem","multiMerge","clear","error","err","getAllKeys","keys","flushGetRequests","getRequests","getKeys","map","forEach","reqLength","length","errorList","i","_request$callback2","_request$resolve","request","_request$callback","_request$reject","call","requestResult","setImmediate","getRequest","keyIndex","promiseResult","push","indexOf","keyValuePairs"],"sources":["AsyncStorage.native.ts"],"sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n checkValidArgs,\n checkValidInput,\n convertError,\n convertErrors,\n} from \"./helpers\";\nimport RCTAsyncStorage from \"./RCTAsyncStorage\";\nimport type {\n AsyncStorageStatic,\n ErrorLike,\n KeyValuePair,\n MultiRequest,\n} from \"./types\";\n\nif (!RCTAsyncStorage) {\n throw new Error(`[@RNC/AsyncStorage]: NativeModule: AsyncStorage is null.\n\nTo fix this issue try these steps:\n\n • Uninstall, rebuild and restart the app.\n\n • Run the packager with \\`--reset-cache\\` flag.\n\n • If you are using CocoaPods on iOS, run \\`pod install\\` in the \\`ios\\` directory, then rebuild and re-run the app.\n\n • Make sure your project's \\`package.json\\` depends on \\`@react-native-async-storage/async-storage\\`, even if you only depend on it indirectly through other dependencies. CLI only autolinks native modules found in your \\`package.json\\`.\n\n • If this happens while testing with Jest, check out how to integrate AsyncStorage here: https://react-native-async-storage.github.io/async-storage/docs/advanced/jest\n\nIf none of these fix the issue, please open an issue on the GitHub repository: https://github.com/react-native-async-storage/async-storage/issues\n`);\n}\n\n/**\n * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value\n * storage system that is global to the app. It should be used instead of\n * LocalStorage.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api\n */\nconst AsyncStorage = ((): AsyncStorageStatic => {\n let _getRequests: MultiRequest[] = [];\n let _getKeys: string[] = [];\n let _immediate: ReturnType | null = null;\n\n return {\n /**\n * Fetches an item for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#getitem\n */\n getItem: (key, callback) => {\n return new Promise((resolve, reject) => {\n checkValidInput(key);\n RCTAsyncStorage.multiGet(\n [key],\n (errors?: ErrorLike[], result?: string[][]) => {\n // Unpack result to get value from [[key,value]]\n const value = result?.[0]?.[1] ? result[0][1] : null;\n const errs = convertErrors(errors);\n callback?.(errs?.[0], value);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve(value);\n }\n }\n );\n });\n },\n\n /**\n * Sets the value for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#setitem\n */\n setItem: (key, value, callback) => {\n return new Promise((resolve, reject) => {\n checkValidInput(key, value);\n RCTAsyncStorage.multiSet([[key, value]], (errors?: ErrorLike[]) => {\n const errs = convertErrors(errors);\n callback?.(errs?.[0]);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Removes an item for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#removeitem\n */\n removeItem: (key, callback) => {\n return new Promise((resolve, reject) => {\n checkValidInput(key);\n RCTAsyncStorage.multiRemove([key], (errors?: ErrorLike[]) => {\n const errs = convertErrors(errors);\n callback?.(errs?.[0]);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Merges an existing `key` value with an input value, assuming both values\n * are stringified JSON.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#mergeitem\n */\n mergeItem: (key, value, callback) => {\n return new Promise((resolve, reject) => {\n checkValidInput(key, value);\n RCTAsyncStorage.multiMerge([[key, value]], (errors?: ErrorLike[]) => {\n const errs = convertErrors(errors);\n callback?.(errs?.[0]);\n if (errs) {\n reject(errs[0]);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Erases *all* `AsyncStorage` for all clients, libraries, etc. You probably\n * don't want to call this; use `removeItem` or `multiRemove` to clear only\n * your app's keys.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#clear\n */\n clear: (callback) => {\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.clear((error?: ErrorLike) => {\n const err = convertError(error);\n callback?.(err);\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Gets *all* keys known to your app; for all callers, libraries, etc.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#getallkeys\n */\n getAllKeys: (callback) => {\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.getAllKeys((error?: ErrorLike, keys?: string[]) => {\n const err = convertError(error);\n callback?.(err, keys);\n if (keys) {\n resolve(keys);\n } else {\n reject(err);\n }\n });\n });\n },\n\n /**\n * The following batched functions are useful for executing a lot of\n * operations at once, allowing for native optimizations and provide the\n * convenience of a single callback after all operations are complete.\n *\n * These functions return arrays of errors, potentially one for every key.\n * For key-specific errors, the Error object will have a key property to\n * indicate which key caused the error.\n */\n\n /**\n * Flushes any pending requests using a single batch call to get the data.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#flushgetrequests\n * */\n flushGetRequests: () => {\n const getRequests = _getRequests;\n const getKeys = _getKeys;\n\n _getRequests = [];\n _getKeys = [];\n\n RCTAsyncStorage.multiGet(\n getKeys,\n (errors?: ErrorLike[], result?: string[][]) => {\n // Even though the runtime complexity of this is theoretically worse vs if we used a map,\n // it's much, much faster in practice for the data sets we deal with (we avoid\n // allocating result pair arrays). This was heavily benchmarked.\n //\n // Is there a way to avoid using the map but fix the bug in this breaking test?\n // https://github.com/facebook/react-native/commit/8dd8ad76579d7feef34c014d387bf02065692264\n const map: Record = {};\n result?.forEach(([key, value]) => {\n map[key] = value;\n return value;\n });\n const reqLength = getRequests.length;\n\n /**\n * As mentioned few lines above, this method could be called with the array of potential error,\n * in case of anything goes wrong. The problem is, if any of the batched calls fails\n * the rest of them would fail too, but the error would be consumed by just one. The rest\n * would simply return `undefined` as their result, rendering false negatives.\n *\n * In order to avoid this situation, in case of any call failing,\n * the rest of them will be rejected as well (with the same error).\n */\n const errorList = convertErrors(errors);\n const error = errorList?.length ? errorList[0] : null;\n\n for (let i = 0; i < reqLength; i++) {\n const request = getRequests[i];\n if (error) {\n request.callback?.(errorList);\n request.reject?.(error);\n continue;\n }\n const requestResult = request.keys.map((key) => [\n key,\n map[key],\n ]);\n request.callback?.(null, requestResult);\n request.resolve?.(requestResult);\n }\n }\n );\n },\n\n /**\n * This allows you to batch the fetching of items given an array of `key`\n * inputs. Your callback will be invoked with an array of corresponding\n * key-value pairs found.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiget\n */\n multiGet: (keys, callback) => {\n if (!_immediate) {\n _immediate = setImmediate(() => {\n _immediate = null;\n AsyncStorage.flushGetRequests();\n });\n }\n\n const getRequest: MultiRequest = {\n keys: keys,\n callback: callback,\n // do we need this?\n keyIndex: _getKeys.length,\n };\n\n const promiseResult = new Promise(\n (resolve, reject) => {\n getRequest.resolve = resolve;\n getRequest.reject = reject;\n }\n );\n\n _getRequests.push(getRequest);\n // avoid fetching duplicates\n keys.forEach((key) => {\n if (_getKeys.indexOf(key) === -1) {\n _getKeys.push(key);\n }\n });\n\n return promiseResult;\n },\n\n /**\n * Use this as a batch operation for storing multiple key-value pairs. When\n * the operation completes you'll get a single callback with any errors.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiset\n */\n multiSet: (keyValuePairs, callback) => {\n checkValidArgs(keyValuePairs, callback);\n return new Promise((resolve, reject) => {\n keyValuePairs.forEach(([key, value]) => {\n checkValidInput(key, value);\n });\n\n RCTAsyncStorage.multiSet(keyValuePairs, (errors?: ErrorLike[]) => {\n const error = convertErrors(errors);\n callback?.(error);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Call this to batch the deletion of all keys in the `keys` array.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiremove\n */\n multiRemove: (keys, callback) => {\n return new Promise((resolve, reject) => {\n keys.forEach((key) => checkValidInput(key));\n\n RCTAsyncStorage.multiRemove(keys, (errors?: ErrorLike[]) => {\n const error = convertErrors(errors);\n callback?.(error);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n },\n\n /**\n * Batch operation to merge in existing and new values for a given set of\n * keys. This assumes that the values are stringified JSON.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multimerge\n */\n multiMerge: (keyValuePairs, callback) => {\n return new Promise((resolve, reject) => {\n RCTAsyncStorage.multiMerge(keyValuePairs, (errors?: ErrorLike[]) => {\n const error = convertErrors(errors);\n callback?.(error);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n },\n };\n})();\n\nexport default AsyncStorage;\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACEA,cAAc,EACdC,eAAe,EACfC,YAAY,EACZC,aAAa,QACR,WAAW;AAClB,OAAOC,eAAe,MAAM,mBAAmB;AAQ/C,IAAI,CAACA,eAAe,EAAE;EACpB,MAAM,IAAIC,KAAK,CAAE;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,YAAY,GAAG,CAAC,MAA0B;EAC9C,IAAIC,YAA4B,GAAG,EAAE;EACrC,IAAIC,QAAkB,GAAG,EAAE;EAC3B,IAAIC,UAAkD,GAAG,IAAI;EAE7D,OAAO;IACL;AACJ;AACA;AACA;AACA;IACIC,OAAO,EAAEA,CAACC,GAAG,EAAEC,QAAQ,KAAK;MAC1B,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCd,eAAe,CAACU,GAAG,CAAC;QACpBP,eAAe,CAACY,QAAQ,CACtB,CAACL,GAAG,CAAC,EACL,CAACM,MAAoB,EAAEC,MAAmB,KAAK;UAAA,IAAAC,QAAA;UAC7C;UACA,MAAMC,KAAK,GAAGF,MAAM,aAANA,MAAM,gBAAAC,QAAA,GAAND,MAAM,CAAG,CAAC,CAAC,cAAAC,QAAA,eAAXA,QAAA,CAAc,CAAC,CAAC,GAAGD,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;UACpD,MAAMG,IAAI,GAAGlB,aAAa,CAACc,MAAM,CAAC;UAClCL,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGS,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAG,CAAC,CAAC,EAAED,KAAK,CAAC;UAC5B,IAAIC,IAAI,EAAE;YACRN,MAAM,CAACM,IAAI,CAAC,CAAC,CAAC,CAAC;UACjB,CAAC,MAAM;YACLP,OAAO,CAACM,KAAK,CAAC;UAChB;QACF,CACF,CAAC;MACH,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIE,OAAO,EAAEA,CAACX,GAAG,EAAES,KAAK,EAAER,QAAQ,KAAK;MACjC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCd,eAAe,CAACU,GAAG,EAAES,KAAK,CAAC;QAC3BhB,eAAe,CAACmB,QAAQ,CAAC,CAAC,CAACZ,GAAG,EAAES,KAAK,CAAC,CAAC,EAAGH,MAAoB,IAAK;UACjE,MAAMI,IAAI,GAAGlB,aAAa,CAACc,MAAM,CAAC;UAClCL,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGS,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAG,CAAC,CAAC,CAAC;UACrB,IAAIA,IAAI,EAAE;YACRN,MAAM,CAACM,IAAI,CAAC,CAAC,CAAC,CAAC;UACjB,CAAC,MAAM;YACLP,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIU,UAAU,EAAEA,CAACb,GAAG,EAAEC,QAAQ,KAAK;MAC7B,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCd,eAAe,CAACU,GAAG,CAAC;QACpBP,eAAe,CAACqB,WAAW,CAAC,CAACd,GAAG,CAAC,EAAGM,MAAoB,IAAK;UAC3D,MAAMI,IAAI,GAAGlB,aAAa,CAACc,MAAM,CAAC;UAClCL,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGS,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAG,CAAC,CAAC,CAAC;UACrB,IAAIA,IAAI,EAAE;YACRN,MAAM,CAACM,IAAI,CAAC,CAAC,CAAC,CAAC;UACjB,CAAC,MAAM;YACLP,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACIY,SAAS,EAAEA,CAACf,GAAG,EAAES,KAAK,EAAER,QAAQ,KAAK;MACnC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCd,eAAe,CAACU,GAAG,EAAES,KAAK,CAAC;QAC3BhB,eAAe,CAACuB,UAAU,CAAC,CAAC,CAAChB,GAAG,EAAES,KAAK,CAAC,CAAC,EAAGH,MAAoB,IAAK;UACnE,MAAMI,IAAI,GAAGlB,aAAa,CAACc,MAAM,CAAC;UAClCL,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGS,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAG,CAAC,CAAC,CAAC;UACrB,IAAIA,IAAI,EAAE;YACRN,MAAM,CAACM,IAAI,CAAC,CAAC,CAAC,CAAC;UACjB,CAAC,MAAM;YACLP,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIc,KAAK,EAAGhB,QAAQ,IAAK;MACnB,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCX,eAAe,CAACwB,KAAK,CAAEC,KAAiB,IAAK;UAC3C,MAAMC,GAAG,GAAG5B,YAAY,CAAC2B,KAAK,CAAC;UAC/BjB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGkB,GAAG,CAAC;UACf,IAAIA,GAAG,EAAE;YACPf,MAAM,CAACe,GAAG,CAAC;UACb,CAAC,MAAM;YACLhB,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIiB,UAAU,EAAGnB,QAAQ,IAAK;MACxB,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCX,eAAe,CAAC2B,UAAU,CAAC,CAACF,KAAiB,EAAEG,IAAe,KAAK;UACjE,MAAMF,GAAG,GAAG5B,YAAY,CAAC2B,KAAK,CAAC;UAC/BjB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGkB,GAAG,EAAEE,IAAI,CAAC;UACrB,IAAIA,IAAI,EAAE;YACRlB,OAAO,CAACkB,IAAI,CAAC;UACf,CAAC,MAAM;YACLjB,MAAM,CAACe,GAAG,CAAC;UACb;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAEI;AACJ;AACA;AACA;AACA;IACIG,gBAAgB,EAAEA,CAAA,KAAM;MACtB,MAAMC,WAAW,GAAG3B,YAAY;MAChC,MAAM4B,OAAO,GAAG3B,QAAQ;MAExBD,YAAY,GAAG,EAAE;MACjBC,QAAQ,GAAG,EAAE;MAEbJ,eAAe,CAACY,QAAQ,CACtBmB,OAAO,EACP,CAAClB,MAAoB,EAAEC,MAAmB,KAAK;QAC7C;QACA;QACA;QACA;QACA;QACA;QACA,MAAMkB,GAA2B,GAAG,CAAC,CAAC;QACtClB,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEmB,OAAO,CAAC,CAAC,CAAC1B,GAAG,EAAES,KAAK,CAAC,KAAK;UAChCgB,GAAG,CAACzB,GAAG,CAAC,GAAGS,KAAK;UAChB,OAAOA,KAAK;QACd,CAAC,CAAC;QACF,MAAMkB,SAAS,GAAGJ,WAAW,CAACK,MAAM;;QAEpC;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;QACU,MAAMC,SAAS,GAAGrC,aAAa,CAACc,MAAM,CAAC;QACvC,MAAMY,KAAK,GAAGW,SAAS,aAATA,SAAS,eAATA,SAAS,CAAED,MAAM,GAAGC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;QAErD,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,SAAS,EAAEG,CAAC,EAAE,EAAE;UAAA,IAAAC,kBAAA,EAAAC,gBAAA;UAClC,MAAMC,OAAO,GAAGV,WAAW,CAACO,CAAC,CAAC;UAC9B,IAAIZ,KAAK,EAAE;YAAA,IAAAgB,iBAAA,EAAAC,eAAA;YACT,CAAAD,iBAAA,GAAAD,OAAO,CAAChC,QAAQ,cAAAiC,iBAAA,uBAAhBA,iBAAA,CAAAE,IAAA,CAAAH,OAAO,EAAYJ,SAAS,CAAC;YAC7B,CAAAM,eAAA,GAAAF,OAAO,CAAC7B,MAAM,cAAA+B,eAAA,uBAAdA,eAAA,CAAAC,IAAA,CAAAH,OAAO,EAAUf,KAAK,CAAC;YACvB;UACF;UACA,MAAMmB,aAAa,GAAGJ,OAAO,CAACZ,IAAI,CAACI,GAAG,CAAgBzB,GAAG,IAAK,CAC5DA,GAAG,EACHyB,GAAG,CAACzB,GAAG,CAAC,CACT,CAAC;UACF,CAAA+B,kBAAA,GAAAE,OAAO,CAAChC,QAAQ,cAAA8B,kBAAA,uBAAhBA,kBAAA,CAAAK,IAAA,CAAAH,OAAO,EAAY,IAAI,EAAEI,aAAa,CAAC;UACvC,CAAAL,gBAAA,GAAAC,OAAO,CAAC9B,OAAO,cAAA6B,gBAAA,uBAAfA,gBAAA,CAAAI,IAAA,CAAAH,OAAO,EAAWI,aAAa,CAAC;QAClC;MACF,CACF,CAAC;IACH,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIhC,QAAQ,EAAEA,CAACgB,IAAI,EAAEpB,QAAQ,KAAK;MAC5B,IAAI,CAACH,UAAU,EAAE;QACfA,UAAU,GAAGwC,YAAY,CAAC,MAAM;UAC9BxC,UAAU,GAAG,IAAI;UACjBH,YAAY,CAAC2B,gBAAgB,CAAC,CAAC;QACjC,CAAC,CAAC;MACJ;MAEA,MAAMiB,UAAwB,GAAG;QAC/BlB,IAAI,EAAEA,IAAI;QACVpB,QAAQ,EAAEA,QAAQ;QAClB;QACAuC,QAAQ,EAAE3C,QAAQ,CAAC+B;MACrB,CAAC;MAED,MAAMa,aAAa,GAAG,IAAIvC,OAAO,CAC/B,CAACC,OAAO,EAAEC,MAAM,KAAK;QACnBmC,UAAU,CAACpC,OAAO,GAAGA,OAAO;QAC5BoC,UAAU,CAACnC,MAAM,GAAGA,MAAM;MAC5B,CACF,CAAC;MAEDR,YAAY,CAAC8C,IAAI,CAACH,UAAU,CAAC;MAC7B;MACAlB,IAAI,CAACK,OAAO,CAAE1B,GAAG,IAAK;QACpB,IAAIH,QAAQ,CAAC8C,OAAO,CAAC3C,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;UAChCH,QAAQ,CAAC6C,IAAI,CAAC1C,GAAG,CAAC;QACpB;MACF,CAAC,CAAC;MAEF,OAAOyC,aAAa;IACtB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACI7B,QAAQ,EAAEA,CAACgC,aAAa,EAAE3C,QAAQ,KAAK;MACrCZ,cAAc,CAACuD,aAAa,EAAE3C,QAAQ,CAAC;MACvC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCwC,aAAa,CAAClB,OAAO,CAAC,CAAC,CAAC1B,GAAG,EAAES,KAAK,CAAC,KAAK;UACtCnB,eAAe,CAACU,GAAG,EAAES,KAAK,CAAC;QAC7B,CAAC,CAAC;QAEFhB,eAAe,CAACmB,QAAQ,CAACgC,aAAa,EAAGtC,MAAoB,IAAK;UAChE,MAAMY,KAAK,GAAG1B,aAAa,CAACc,MAAM,CAAC;UACnCL,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGiB,KAAK,CAAC;UACjB,IAAIA,KAAK,EAAE;YACTd,MAAM,CAACc,KAAK,CAAC;UACf,CAAC,MAAM;YACLf,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIW,WAAW,EAAEA,CAACO,IAAI,EAAEpB,QAAQ,KAAK;MAC/B,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCiB,IAAI,CAACK,OAAO,CAAE1B,GAAG,IAAKV,eAAe,CAACU,GAAG,CAAC,CAAC;QAE3CP,eAAe,CAACqB,WAAW,CAACO,IAAI,EAAGf,MAAoB,IAAK;UAC1D,MAAMY,KAAK,GAAG1B,aAAa,CAACc,MAAM,CAAC;UACnCL,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGiB,KAAK,CAAC;UACjB,IAAIA,KAAK,EAAE;YACTd,MAAM,CAACc,KAAK,CAAC;UACf,CAAC,MAAM;YACLf,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACIa,UAAU,EAAEA,CAAC4B,aAAa,EAAE3C,QAAQ,KAAK;MACvC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;QACtCX,eAAe,CAACuB,UAAU,CAAC4B,aAAa,EAAGtC,MAAoB,IAAK;UAClE,MAAMY,KAAK,GAAG1B,aAAa,CAACc,MAAM,CAAC;UACnCL,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGiB,KAAK,CAAC;UACjB,IAAIA,KAAK,EAAE;YACTd,MAAM,CAACc,KAAK,CAAC;UACf,CAAC,MAAM;YACLf,OAAO,CAAC,CAAC;UACX;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;EACF,CAAC;AACH,CAAC,EAAE,CAAC;AAEJ,eAAeR,YAAY"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/NativeAsyncStorageModule.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/NativeAsyncStorageModule.js new file mode 100644 index 0000000..007ed82 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/NativeAsyncStorageModule.js @@ -0,0 +1,3 @@ +import { TurboModuleRegistry } from "react-native"; +export default TurboModuleRegistry.get("RNCAsyncStorage"); +//# sourceMappingURL=NativeAsyncStorageModule.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/NativeAsyncStorageModule.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/NativeAsyncStorageModule.js.map new file mode 100644 index 0000000..329d288 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/NativeAsyncStorageModule.js.map @@ -0,0 +1 @@ +{"version":3,"names":["TurboModuleRegistry","get"],"sources":["NativeAsyncStorageModule.ts"],"sourcesContent":["import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\nimport type { ErrorLike } from \"./types\";\n\nexport interface Spec extends TurboModule {\n multiGet: (\n keys: string[],\n callback: (error?: ErrorLike[], result?: [string, string][]) => void\n ) => void;\n multiSet: (\n kvPairs: [string, string][],\n callback: (error?: ErrorLike[]) => void\n ) => void;\n multiRemove: (\n keys: readonly string[],\n callback: (error?: ErrorLike[]) => void\n ) => void;\n multiMerge: (\n kvPairs: [string, string][],\n callback: (error?: ErrorLike[]) => void\n ) => void;\n getAllKeys: (\n callback: (error?: ErrorLike[], result?: [string, string][]) => void\n ) => void;\n clear: (callback: (error?: ErrorLike[]) => void) => void;\n}\n\nexport default TurboModuleRegistry.get(\"RNCAsyncStorage\");\n"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;AA0BlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,iBAAiB,CAAC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/RCTAsyncStorage.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/RCTAsyncStorage.js new file mode 100644 index 0000000..3d1a6c8 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/RCTAsyncStorage.js @@ -0,0 +1,20 @@ +import { NativeModules, TurboModuleRegistry } from "react-native"; +import { shouldFallbackToLegacyNativeModule } from "./shouldFallbackToLegacyNativeModule"; + +// TurboModuleRegistry falls back to NativeModules so we don't have to try go +// assign NativeModules' counterparts if TurboModuleRegistry would resolve +// with undefined. +let RCTAsyncStorage = TurboModuleRegistry ? TurboModuleRegistry.get("PlatformLocalStorage") || +// Support for external modules, like react-native-windows +TurboModuleRegistry.get("RNC_AsyncSQLiteDBStorage") || TurboModuleRegistry.get("RNCAsyncStorage") : NativeModules["PlatformLocalStorage"] || +// Support for external modules, like react-native-windows +NativeModules["RNC_AsyncSQLiteDBStorage"] || NativeModules["RNCAsyncStorage"]; +if (!RCTAsyncStorage && shouldFallbackToLegacyNativeModule()) { + if (TurboModuleRegistry) { + RCTAsyncStorage = TurboModuleRegistry.get("AsyncSQLiteDBStorage") || TurboModuleRegistry.get("AsyncLocalStorage"); + } else { + RCTAsyncStorage = NativeModules["AsyncSQLiteDBStorage"] || NativeModules["AsyncLocalStorage"]; + } +} +export default RCTAsyncStorage; +//# sourceMappingURL=RCTAsyncStorage.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/RCTAsyncStorage.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/RCTAsyncStorage.js.map new file mode 100644 index 0000000..cc0fecd --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/RCTAsyncStorage.js.map @@ -0,0 +1 @@ +{"version":3,"names":["NativeModules","TurboModuleRegistry","shouldFallbackToLegacyNativeModule","RCTAsyncStorage","get"],"sources":["RCTAsyncStorage.ts"],"sourcesContent":["import { NativeModules, TurboModuleRegistry } from \"react-native\";\nimport { shouldFallbackToLegacyNativeModule } from \"./shouldFallbackToLegacyNativeModule\";\n\n// TurboModuleRegistry falls back to NativeModules so we don't have to try go\n// assign NativeModules' counterparts if TurboModuleRegistry would resolve\n// with undefined.\nlet RCTAsyncStorage = TurboModuleRegistry\n ? TurboModuleRegistry.get(\"PlatformLocalStorage\") || // Support for external modules, like react-native-windows\n TurboModuleRegistry.get(\"RNC_AsyncSQLiteDBStorage\") ||\n TurboModuleRegistry.get(\"RNCAsyncStorage\")\n : NativeModules[\"PlatformLocalStorage\"] || // Support for external modules, like react-native-windows\n NativeModules[\"RNC_AsyncSQLiteDBStorage\"] ||\n NativeModules[\"RNCAsyncStorage\"];\n\nif (!RCTAsyncStorage && shouldFallbackToLegacyNativeModule()) {\n if (TurboModuleRegistry) {\n RCTAsyncStorage =\n TurboModuleRegistry.get(\"AsyncSQLiteDBStorage\") ||\n TurboModuleRegistry.get(\"AsyncLocalStorage\");\n } else {\n RCTAsyncStorage =\n NativeModules[\"AsyncSQLiteDBStorage\"] ||\n NativeModules[\"AsyncLocalStorage\"];\n }\n}\n\nexport default RCTAsyncStorage;\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,mBAAmB,QAAQ,cAAc;AACjE,SAASC,kCAAkC,QAAQ,sCAAsC;;AAEzF;AACA;AACA;AACA,IAAIC,eAAe,GAAGF,mBAAmB,GACrCA,mBAAmB,CAACG,GAAG,CAAC,sBAAsB,CAAC;AAAI;AACnDH,mBAAmB,CAACG,GAAG,CAAC,0BAA0B,CAAC,IACnDH,mBAAmB,CAACG,GAAG,CAAC,iBAAiB,CAAC,GAC1CJ,aAAa,CAAC,sBAAsB,CAAC;AAAI;AACzCA,aAAa,CAAC,0BAA0B,CAAC,IACzCA,aAAa,CAAC,iBAAiB,CAAC;AAEpC,IAAI,CAACG,eAAe,IAAID,kCAAkC,CAAC,CAAC,EAAE;EAC5D,IAAID,mBAAmB,EAAE;IACvBE,eAAe,GACbF,mBAAmB,CAACG,GAAG,CAAC,sBAAsB,CAAC,IAC/CH,mBAAmB,CAACG,GAAG,CAAC,mBAAmB,CAAC;EAChD,CAAC,MAAM;IACLD,eAAe,GACbH,aAAa,CAAC,sBAAsB,CAAC,IACrCA,aAAa,CAAC,mBAAmB,CAAC;EACtC;AACF;AAEA,eAAeG,eAAe"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/helpers.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/helpers.js new file mode 100644 index 0000000..1287b69 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/helpers.js @@ -0,0 +1,48 @@ +export function checkValidArgs(keyValuePairs, callback) { + if (!Array.isArray(keyValuePairs) || keyValuePairs.length === 0 || !Array.isArray(keyValuePairs[0])) { + throw new Error("[AsyncStorage] Expected array of key-value pairs as first argument to multiSet"); + } + if (callback && typeof callback !== "function") { + if (Array.isArray(callback)) { + throw new Error("[AsyncStorage] Expected function as second argument to multiSet. Did you forget to wrap key-value pairs in an array for the first argument?"); + } + throw new Error("[AsyncStorage] Expected function as second argument to multiSet"); + } +} +export function checkValidInput(...input) { + const [key, value] = input; + if (typeof key !== "string") { + // eslint-disable-next-line no-console + console.warn(`[AsyncStorage] Using ${typeof key} type for key is not supported. This can lead to unexpected behavior/errors. Use string instead.\nKey passed: ${key}\n`); + } + if (input.length > 1 && typeof value !== "string") { + if (value == null) { + throw new Error(`[AsyncStorage] Passing null/undefined as value is not supported. If you want to remove value, Use .removeItem method instead.\nPassed value: ${value}\nPassed key: ${key}\n`); + } else { + // eslint-disable-next-line no-console + console.warn(`[AsyncStorage] The value for key "${key}" is not a string. This can lead to unexpected behavior/errors. Consider stringifying it.\nPassed value: ${value}\nPassed key: ${key}\n`); + } + } +} +export function convertError(error) { + if (!error) { + return null; + } + const out = new Error(error.message); + out["key"] = error.key; + return out; +} +export function convertErrors(errs) { + const errors = ensureArray(errs); + return errors ? errors.map(e => convertError(e)) : null; +} +function ensureArray(e) { + if (Array.isArray(e)) { + return e.length === 0 ? null : e; + } else if (e) { + return [e]; + } else { + return null; + } +} +//# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/helpers.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/helpers.js.map new file mode 100644 index 0000000..af5d095 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/helpers.js.map @@ -0,0 +1 @@ +{"version":3,"names":["checkValidArgs","keyValuePairs","callback","Array","isArray","length","Error","checkValidInput","input","key","value","console","warn","convertError","error","out","message","convertErrors","errs","errors","ensureArray","map","e"],"sources":["helpers.ts"],"sourcesContent":["import type { ErrorLike } from \"./types\";\n\nexport function checkValidArgs(\n keyValuePairs: readonly unknown[],\n callback: unknown\n) {\n if (\n !Array.isArray(keyValuePairs) ||\n keyValuePairs.length === 0 ||\n !Array.isArray(keyValuePairs[0])\n ) {\n throw new Error(\n \"[AsyncStorage] Expected array of key-value pairs as first argument to multiSet\"\n );\n }\n\n if (callback && typeof callback !== \"function\") {\n if (Array.isArray(callback)) {\n throw new Error(\n \"[AsyncStorage] Expected function as second argument to multiSet. Did you forget to wrap key-value pairs in an array for the first argument?\"\n );\n }\n\n throw new Error(\n \"[AsyncStorage] Expected function as second argument to multiSet\"\n );\n }\n}\n\nexport function checkValidInput(...input: unknown[]) {\n const [key, value] = input;\n\n if (typeof key !== \"string\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[AsyncStorage] Using ${typeof key} type for key is not supported. This can lead to unexpected behavior/errors. Use string instead.\\nKey passed: ${key}\\n`\n );\n }\n\n if (input.length > 1 && typeof value !== \"string\") {\n if (value == null) {\n throw new Error(\n `[AsyncStorage] Passing null/undefined as value is not supported. If you want to remove value, Use .removeItem method instead.\\nPassed value: ${value}\\nPassed key: ${key}\\n`\n );\n } else {\n // eslint-disable-next-line no-console\n console.warn(\n `[AsyncStorage] The value for key \"${key}\" is not a string. This can lead to unexpected behavior/errors. Consider stringifying it.\\nPassed value: ${value}\\nPassed key: ${key}\\n`\n );\n }\n }\n}\n\nexport function convertError(error?: ErrorLike): Error | null {\n if (!error) {\n return null;\n }\n\n const out = new Error(error.message) as Error & ErrorLike;\n out[\"key\"] = error.key;\n return out;\n}\n\nexport function convertErrors(\n errs?: ErrorLike[]\n): ReadonlyArray | null {\n const errors = ensureArray(errs);\n return errors ? errors.map((e) => convertError(e)) : null;\n}\n\nfunction ensureArray(e?: ErrorLike | ErrorLike[]): ErrorLike[] | null {\n if (Array.isArray(e)) {\n return e.length === 0 ? null : e;\n } else if (e) {\n return [e];\n } else {\n return null;\n }\n}\n"],"mappings":"AAEA,OAAO,SAASA,cAAcA,CAC5BC,aAAiC,EACjCC,QAAiB,EACjB;EACA,IACE,CAACC,KAAK,CAACC,OAAO,CAACH,aAAa,CAAC,IAC7BA,aAAa,CAACI,MAAM,KAAK,CAAC,IAC1B,CAACF,KAAK,CAACC,OAAO,CAACH,aAAa,CAAC,CAAC,CAAC,CAAC,EAChC;IACA,MAAM,IAAIK,KAAK,CACb,gFACF,CAAC;EACH;EAEA,IAAIJ,QAAQ,IAAI,OAAOA,QAAQ,KAAK,UAAU,EAAE;IAC9C,IAAIC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,EAAE;MAC3B,MAAM,IAAII,KAAK,CACb,6IACF,CAAC;IACH;IAEA,MAAM,IAAIA,KAAK,CACb,iEACF,CAAC;EACH;AACF;AAEA,OAAO,SAASC,eAAeA,CAAC,GAAGC,KAAgB,EAAE;EACnD,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,GAAGF,KAAK;EAE1B,IAAI,OAAOC,GAAG,KAAK,QAAQ,EAAE;IAC3B;IACAE,OAAO,CAACC,IAAI,CACT,wBAAuB,OAAOH,GAAI,iHAAgHA,GAAI,IACzJ,CAAC;EACH;EAEA,IAAID,KAAK,CAACH,MAAM,GAAG,CAAC,IAAI,OAAOK,KAAK,KAAK,QAAQ,EAAE;IACjD,IAAIA,KAAK,IAAI,IAAI,EAAE;MACjB,MAAM,IAAIJ,KAAK,CACZ,gJAA+II,KAAM,iBAAgBD,GAAI,IAC5K,CAAC;IACH,CAAC,MAAM;MACL;MACAE,OAAO,CAACC,IAAI,CACT,qCAAoCH,GAAI,4GAA2GC,KAAM,iBAAgBD,GAAI,IAChL,CAAC;IACH;EACF;AACF;AAEA,OAAO,SAASI,YAAYA,CAACC,KAAiB,EAAgB;EAC5D,IAAI,CAACA,KAAK,EAAE;IACV,OAAO,IAAI;EACb;EAEA,MAAMC,GAAG,GAAG,IAAIT,KAAK,CAACQ,KAAK,CAACE,OAAO,CAAsB;EACzDD,GAAG,CAAC,KAAK,CAAC,GAAGD,KAAK,CAACL,GAAG;EACtB,OAAOM,GAAG;AACZ;AAEA,OAAO,SAASE,aAAaA,CAC3BC,IAAkB,EACkB;EACpC,MAAMC,MAAM,GAAGC,WAAW,CAACF,IAAI,CAAC;EAChC,OAAOC,MAAM,GAAGA,MAAM,CAACE,GAAG,CAAEC,CAAC,IAAKT,YAAY,CAACS,CAAC,CAAC,CAAC,GAAG,IAAI;AAC3D;AAEA,SAASF,WAAWA,CAACE,CAA2B,EAAsB;EACpE,IAAInB,KAAK,CAACC,OAAO,CAACkB,CAAC,CAAC,EAAE;IACpB,OAAOA,CAAC,CAACjB,MAAM,KAAK,CAAC,GAAG,IAAI,GAAGiB,CAAC;EAClC,CAAC,MAAM,IAAIA,CAAC,EAAE;IACZ,OAAO,CAACA,CAAC,CAAC;EACZ,CAAC,MAAM;IACL,OAAO,IAAI;EACb;AACF"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/hooks.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/hooks.js new file mode 100644 index 0000000..e4521f9 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/hooks.js @@ -0,0 +1,10 @@ +import AsyncStorage from "./AsyncStorage"; +export function useAsyncStorage(key) { + return { + getItem: (...args) => AsyncStorage.getItem(key, ...args), + setItem: (...args) => AsyncStorage.setItem(key, ...args), + mergeItem: (...args) => AsyncStorage.mergeItem(key, ...args), + removeItem: (...args) => AsyncStorage.removeItem(key, ...args) + }; +} +//# sourceMappingURL=hooks.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/hooks.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/hooks.js.map new file mode 100644 index 0000000..dd65620 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/hooks.js.map @@ -0,0 +1 @@ +{"version":3,"names":["AsyncStorage","useAsyncStorage","key","getItem","args","setItem","mergeItem","removeItem"],"sources":["hooks.ts"],"sourcesContent":["import AsyncStorage from \"./AsyncStorage\";\nimport type { AsyncStorageHook } from \"./types\";\n\nexport function useAsyncStorage(key: string): AsyncStorageHook {\n return {\n getItem: (...args) => AsyncStorage.getItem(key, ...args),\n setItem: (...args) => AsyncStorage.setItem(key, ...args),\n mergeItem: (...args) => AsyncStorage.mergeItem(key, ...args),\n removeItem: (...args) => AsyncStorage.removeItem(key, ...args),\n };\n}\n"],"mappings":"AAAA,OAAOA,YAAY,MAAM,gBAAgB;AAGzC,OAAO,SAASC,eAAeA,CAACC,GAAW,EAAoB;EAC7D,OAAO;IACLC,OAAO,EAAEA,CAAC,GAAGC,IAAI,KAAKJ,YAAY,CAACG,OAAO,CAACD,GAAG,EAAE,GAAGE,IAAI,CAAC;IACxDC,OAAO,EAAEA,CAAC,GAAGD,IAAI,KAAKJ,YAAY,CAACK,OAAO,CAACH,GAAG,EAAE,GAAGE,IAAI,CAAC;IACxDE,SAAS,EAAEA,CAAC,GAAGF,IAAI,KAAKJ,YAAY,CAACM,SAAS,CAACJ,GAAG,EAAE,GAAGE,IAAI,CAAC;IAC5DG,UAAU,EAAEA,CAAC,GAAGH,IAAI,KAAKJ,YAAY,CAACO,UAAU,CAACL,GAAG,EAAE,GAAGE,IAAI;EAC/D,CAAC;AACH"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/index.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/index.js new file mode 100644 index 0000000..65819a7 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/index.js @@ -0,0 +1,4 @@ +import AsyncStorage from "./AsyncStorage"; +export { useAsyncStorage } from "./hooks"; +export default AsyncStorage; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/index.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/index.js.map new file mode 100644 index 0000000..2151d8c --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["AsyncStorage","useAsyncStorage"],"sources":["index.ts"],"sourcesContent":["import AsyncStorage from \"./AsyncStorage\";\n\nexport { useAsyncStorage } from \"./hooks\";\n\nexport type { AsyncStorageStatic } from \"./types\";\n\nexport default AsyncStorage;\n"],"mappings":"AAAA,OAAOA,YAAY,MAAM,gBAAgB;AAEzC,SAASC,eAAe,QAAQ,SAAS;AAIzC,eAAeD,YAAY"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/shouldFallbackToLegacyNativeModule.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/shouldFallbackToLegacyNativeModule.js new file mode 100644 index 0000000..939a4b9 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/shouldFallbackToLegacyNativeModule.js @@ -0,0 +1,28 @@ +import { NativeModules } from "react-native"; +export function shouldFallbackToLegacyNativeModule() { + var _NativeModules$Native; + const expoConstants = (_NativeModules$Native = NativeModules["NativeUnimoduleProxy"]) === null || _NativeModules$Native === void 0 || (_NativeModules$Native = _NativeModules$Native.modulesConstants) === null || _NativeModules$Native === void 0 ? void 0 : _NativeModules$Native.ExponentConstants; + if (expoConstants) { + /** + * In SDK <= 39, appOwnership is defined in managed apps but executionEnvironment is not. + * In bare React Native apps using expo-constants, appOwnership is never defined, so + * isLegacySdkVersion will be false in that context. + */ + const isLegacySdkVersion = expoConstants.appOwnership && !expoConstants.executionEnvironment; + + /** + * Expo managed apps don't include the @react-native-async-storage/async-storage + * native modules yet, but the API interface is the same, so we can use the version + * exported from React Native still. + * + * If in future releases (eg: @react-native-async-storage/async-storage >= 2.0.0) this + * will likely not be valid anymore, and the package will need to be included in the Expo SDK + * to continue to work. + */ + if (isLegacySdkVersion || ["storeClient", "standalone"].includes(expoConstants.executionEnvironment)) { + return true; + } + } + return false; +} +//# sourceMappingURL=shouldFallbackToLegacyNativeModule.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/shouldFallbackToLegacyNativeModule.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/shouldFallbackToLegacyNativeModule.js.map new file mode 100644 index 0000000..2b53eb8 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/shouldFallbackToLegacyNativeModule.js.map @@ -0,0 +1 @@ +{"version":3,"names":["NativeModules","shouldFallbackToLegacyNativeModule","_NativeModules$Native","expoConstants","modulesConstants","ExponentConstants","isLegacySdkVersion","appOwnership","executionEnvironment","includes"],"sources":["shouldFallbackToLegacyNativeModule.ts"],"sourcesContent":["import { NativeModules } from \"react-native\";\n\nexport function shouldFallbackToLegacyNativeModule(): boolean {\n const expoConstants =\n NativeModules[\"NativeUnimoduleProxy\"]?.modulesConstants?.ExponentConstants;\n\n if (expoConstants) {\n /**\n * In SDK <= 39, appOwnership is defined in managed apps but executionEnvironment is not.\n * In bare React Native apps using expo-constants, appOwnership is never defined, so\n * isLegacySdkVersion will be false in that context.\n */\n const isLegacySdkVersion =\n expoConstants.appOwnership && !expoConstants.executionEnvironment;\n\n /**\n * Expo managed apps don't include the @react-native-async-storage/async-storage\n * native modules yet, but the API interface is the same, so we can use the version\n * exported from React Native still.\n *\n * If in future releases (eg: @react-native-async-storage/async-storage >= 2.0.0) this\n * will likely not be valid anymore, and the package will need to be included in the Expo SDK\n * to continue to work.\n */\n if (\n isLegacySdkVersion ||\n [\"storeClient\", \"standalone\"].includes(expoConstants.executionEnvironment)\n ) {\n return true;\n }\n }\n\n return false;\n}\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;AAE5C,OAAO,SAASC,kCAAkCA,CAAA,EAAY;EAAA,IAAAC,qBAAA;EAC5D,MAAMC,aAAa,IAAAD,qBAAA,GACjBF,aAAa,CAAC,sBAAsB,CAAC,cAAAE,qBAAA,gBAAAA,qBAAA,GAArCA,qBAAA,CAAuCE,gBAAgB,cAAAF,qBAAA,uBAAvDA,qBAAA,CAAyDG,iBAAiB;EAE5E,IAAIF,aAAa,EAAE;IACjB;AACJ;AACA;AACA;AACA;IACI,MAAMG,kBAAkB,GACtBH,aAAa,CAACI,YAAY,IAAI,CAACJ,aAAa,CAACK,oBAAoB;;IAEnE;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI,IACEF,kBAAkB,IAClB,CAAC,aAAa,EAAE,YAAY,CAAC,CAACG,QAAQ,CAACN,aAAa,CAACK,oBAAoB,CAAC,EAC1E;MACA,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK;AACd"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/types.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/types.js new file mode 100644 index 0000000..63b2c4c --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/types.js @@ -0,0 +1,2 @@ + +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/types.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/types.js.map new file mode 100644 index 0000000..d777c8a --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/module/types.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["export type ErrorLike = {\n message: string;\n key?: string;\n};\n\nexport type Callback = (error?: Error | null) => void;\n\nexport type CallbackWithResult = (\n error?: Error | null,\n result?: T | null\n) => void;\n\nexport type KeyValuePair = [string, string | null];\n\nexport type MultiCallback = (errors?: readonly (Error | null)[] | null) => void;\n\nexport type MultiGetCallback = (\n errors?: readonly (Error | null)[] | null,\n result?: readonly KeyValuePair[]\n) => void;\n\nexport type MultiRequest = {\n keys: readonly string[];\n callback?: MultiGetCallback;\n keyIndex: number;\n resolve?: (result: readonly KeyValuePair[]) => void;\n reject?: (error?: ErrorLike) => void;\n};\n\nexport type AsyncStorageHook = {\n getItem: (callback?: CallbackWithResult) => Promise;\n setItem: (value: string, callback?: Callback) => Promise;\n mergeItem: (value: string, callback?: Callback) => Promise;\n removeItem: (callback?: Callback) => Promise;\n};\n\n/**\n * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value\n * storage system that is global to the app. It should be used instead of\n * LocalStorage.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api\n */\nexport type AsyncStorageStatic = {\n /**\n * Fetches an item for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#getitem\n */\n getItem: (\n key: string,\n callback?: CallbackWithResult\n ) => Promise;\n\n /**\n * Sets the value for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#setitem\n */\n setItem: (key: string, value: string, callback?: Callback) => Promise;\n\n /**\n * Removes an item for a `key` and invokes a callback upon completion.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#removeitem\n */\n removeItem: (key: string, callback?: Callback) => Promise;\n\n /**\n * Merges an existing `key` value with an input value, assuming both values\n * are stringified JSON.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#mergeitem\n */\n mergeItem: (key: string, value: string, callback?: Callback) => Promise;\n\n /**\n * Erases *all* `AsyncStorage` for all clients, libraries, etc. You probably\n * don't want to call this; use `removeItem` or `multiRemove` to clear only\n * your app's keys.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#clear\n */\n clear: (callback?: Callback) => Promise;\n\n /**\n * Gets *all* keys known to your app; for all callers, libraries, etc.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#getallkeys\n */\n getAllKeys: (\n callback?: CallbackWithResult\n ) => Promise;\n\n /**\n * The following batched functions are useful for executing a lot of\n * operations at once, allowing for native optimizations and provide the\n * convenience of a single callback after all operations are complete.\n *\n * These functions return arrays of errors, potentially one for every key.\n * For key-specific errors, the Error object will have a key property to\n * indicate which key caused the error.\n */\n\n /**\n * Flushes any pending requests using a single batch call to get the data.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#flushgetrequests\n * */\n flushGetRequests: () => void;\n\n /**\n * This allows you to batch the fetching of items given an array of `key`\n * inputs. Your callback will be invoked with an array of corresponding\n * key-value pairs found.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiget\n */\n multiGet: (\n keys: readonly string[],\n callback?: MultiGetCallback\n ) => Promise;\n\n /**\n * Use this as a batch operation for storing multiple key-value pairs. When\n * the operation completes you'll get a single callback with any errors.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiset\n */\n multiSet: (\n keyValuePairs: ReadonlyArray,\n callback?: MultiCallback\n ) => Promise;\n\n /**\n * Call this to batch the deletion of all keys in the `keys` array.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multiremove\n */\n multiRemove: (\n keys: readonly string[],\n callback?: MultiCallback\n ) => Promise;\n\n /**\n * Batch operation to merge in existing and new values for a given set of\n * keys. This assumes that the values are stringified JSON.\n *\n * See https://react-native-async-storage.github.io/async-storage/docs/api#multimerge\n */\n multiMerge: (\n keyValuePairs: [string, string][],\n callback?: MultiCallback\n ) => Promise;\n};\n"],"mappings":""} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.d.ts new file mode 100644 index 0000000..f488015 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.d.ts @@ -0,0 +1,11 @@ +/** + * Copyright (c) Nicolas Gallagher. + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type { AsyncStorageStatic } from "./types"; +declare const AsyncStorage: AsyncStorageStatic; +export default AsyncStorage; +//# sourceMappingURL=AsyncStorage.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.d.ts.map new file mode 100644 index 0000000..9433b75 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"AsyncStorage.d.ts","sourceRoot":"","sources":["../../src/AsyncStorage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,SAAS,CAAC;AA8DjB,QAAA,MAAM,YAAY,EAAE,kBAuGnB,CAAC;AAEF,eAAe,YAAY,CAAC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.native.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.native.d.ts new file mode 100644 index 0000000..c43b4ee --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.native.d.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import type { AsyncStorageStatic } from "./types"; +/** + * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value + * storage system that is global to the app. It should be used instead of + * LocalStorage. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api + */ +declare const AsyncStorage: AsyncStorageStatic; +export default AsyncStorage; +//# sourceMappingURL=AsyncStorage.native.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.native.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.native.d.ts.map new file mode 100644 index 0000000..178328b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/AsyncStorage.native.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"AsyncStorage.native.d.ts","sourceRoot":"","sources":["../../src/AsyncStorage.native.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,SAAS,CAAC;AAqBjB;;;;;;GAMG;AACH,QAAA,MAAM,YAAY,oBAkTd,CAAC;AAEL,eAAe,YAAY,CAAC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/NativeAsyncStorageModule.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/NativeAsyncStorageModule.d.ts new file mode 100644 index 0000000..374b0dc --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/NativeAsyncStorageModule.d.ts @@ -0,0 +1,13 @@ +import type { TurboModule } from "react-native"; +import type { ErrorLike } from "./types"; +export interface Spec extends TurboModule { + multiGet: (keys: string[], callback: (error?: ErrorLike[], result?: [string, string][]) => void) => void; + multiSet: (kvPairs: [string, string][], callback: (error?: ErrorLike[]) => void) => void; + multiRemove: (keys: readonly string[], callback: (error?: ErrorLike[]) => void) => void; + multiMerge: (kvPairs: [string, string][], callback: (error?: ErrorLike[]) => void) => void; + getAllKeys: (callback: (error?: ErrorLike[], result?: [string, string][]) => void) => void; + clear: (callback: (error?: ErrorLike[]) => void) => void; +} +declare const _default: Spec | null; +export default _default; +//# sourceMappingURL=NativeAsyncStorageModule.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/NativeAsyncStorageModule.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/NativeAsyncStorageModule.d.ts.map new file mode 100644 index 0000000..849ba05 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/NativeAsyncStorageModule.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"NativeAsyncStorageModule.d.ts","sourceRoot":"","sources":["../../src/NativeAsyncStorageModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI,KACjE,IAAI,CAAC;IACV,QAAQ,EAAE,CACR,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAC3B,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,IAAI,KACpC,IAAI,CAAC;IACV,WAAW,EAAE,CACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,IAAI,KACpC,IAAI,CAAC;IACV,UAAU,EAAE,CACV,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAC3B,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,IAAI,KACpC,IAAI,CAAC;IACV,UAAU,EAAE,CACV,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI,KACjE,IAAI,CAAC;IACV,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CAC1D;;AAED,wBAAgE"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/RCTAsyncStorage.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/RCTAsyncStorage.d.ts new file mode 100644 index 0000000..f1b91cb --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/RCTAsyncStorage.d.ts @@ -0,0 +1,3 @@ +declare let RCTAsyncStorage: any; +export default RCTAsyncStorage; +//# sourceMappingURL=RCTAsyncStorage.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/RCTAsyncStorage.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/RCTAsyncStorage.d.ts.map new file mode 100644 index 0000000..415b9eb --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/RCTAsyncStorage.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"RCTAsyncStorage.d.ts","sourceRoot":"","sources":["../../src/RCTAsyncStorage.ts"],"names":[],"mappings":"AAMA,QAAA,IAAI,eAAe,KAMiB,CAAC;AAcrC,eAAe,eAAe,CAAC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/helpers.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/helpers.d.ts new file mode 100644 index 0000000..38e6923 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/helpers.d.ts @@ -0,0 +1,6 @@ +import type { ErrorLike } from "./types"; +export declare function checkValidArgs(keyValuePairs: readonly unknown[], callback: unknown): void; +export declare function checkValidInput(...input: unknown[]): void; +export declare function convertError(error?: ErrorLike): Error | null; +export declare function convertErrors(errs?: ErrorLike[]): ReadonlyArray | null; +//# sourceMappingURL=helpers.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/helpers.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/helpers.d.ts.map new file mode 100644 index 0000000..41bf511 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/helpers.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,wBAAgB,cAAc,CAC5B,aAAa,EAAE,SAAS,OAAO,EAAE,EACjC,QAAQ,EAAE,OAAO,QAuBlB;AAED,wBAAgB,eAAe,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,QAsBlD;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI,CAQ5D;AAED,wBAAgB,aAAa,CAC3B,IAAI,CAAC,EAAE,SAAS,EAAE,GACjB,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAGpC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/hooks.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/hooks.d.ts new file mode 100644 index 0000000..cedfcb9 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/hooks.d.ts @@ -0,0 +1,3 @@ +import type { AsyncStorageHook } from "./types"; +export declare function useAsyncStorage(key: string): AsyncStorageHook; +//# sourceMappingURL=hooks.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/hooks.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/hooks.d.ts.map new file mode 100644 index 0000000..9d9b5ea --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/hooks.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAO7D"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/index.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/index.d.ts new file mode 100644 index 0000000..9202bfc --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/index.d.ts @@ -0,0 +1,5 @@ +import AsyncStorage from "./AsyncStorage"; +export { useAsyncStorage } from "./hooks"; +export type { AsyncStorageStatic } from "./types"; +export default AsyncStorage; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/index.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/index.d.ts.map new file mode 100644 index 0000000..7752043 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,eAAe,YAAY,CAAC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/shouldFallbackToLegacyNativeModule.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/shouldFallbackToLegacyNativeModule.d.ts new file mode 100644 index 0000000..e1c4efa --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/shouldFallbackToLegacyNativeModule.d.ts @@ -0,0 +1,2 @@ +export declare function shouldFallbackToLegacyNativeModule(): boolean; +//# sourceMappingURL=shouldFallbackToLegacyNativeModule.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/shouldFallbackToLegacyNativeModule.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/shouldFallbackToLegacyNativeModule.d.ts.map new file mode 100644 index 0000000..929e56a --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/shouldFallbackToLegacyNativeModule.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"shouldFallbackToLegacyNativeModule.d.ts","sourceRoot":"","sources":["../../src/shouldFallbackToLegacyNativeModule.ts"],"names":[],"mappings":"AAEA,wBAAgB,kCAAkC,IAAI,OAAO,CA+B5D"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/types.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/types.d.ts new file mode 100644 index 0000000..c5d3a6b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/types.d.ts @@ -0,0 +1,114 @@ +export type ErrorLike = { + message: string; + key?: string; +}; +export type Callback = (error?: Error | null) => void; +export type CallbackWithResult = (error?: Error | null, result?: T | null) => void; +export type KeyValuePair = [string, string | null]; +export type MultiCallback = (errors?: readonly (Error | null)[] | null) => void; +export type MultiGetCallback = (errors?: readonly (Error | null)[] | null, result?: readonly KeyValuePair[]) => void; +export type MultiRequest = { + keys: readonly string[]; + callback?: MultiGetCallback; + keyIndex: number; + resolve?: (result: readonly KeyValuePair[]) => void; + reject?: (error?: ErrorLike) => void; +}; +export type AsyncStorageHook = { + getItem: (callback?: CallbackWithResult) => Promise; + setItem: (value: string, callback?: Callback) => Promise; + mergeItem: (value: string, callback?: Callback) => Promise; + removeItem: (callback?: Callback) => Promise; +}; +/** + * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value + * storage system that is global to the app. It should be used instead of + * LocalStorage. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api + */ +export type AsyncStorageStatic = { + /** + * Fetches an item for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#getitem + */ + getItem: (key: string, callback?: CallbackWithResult) => Promise; + /** + * Sets the value for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#setitem + */ + setItem: (key: string, value: string, callback?: Callback) => Promise; + /** + * Removes an item for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#removeitem + */ + removeItem: (key: string, callback?: Callback) => Promise; + /** + * Merges an existing `key` value with an input value, assuming both values + * are stringified JSON. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#mergeitem + */ + mergeItem: (key: string, value: string, callback?: Callback) => Promise; + /** + * Erases *all* `AsyncStorage` for all clients, libraries, etc. You probably + * don't want to call this; use `removeItem` or `multiRemove` to clear only + * your app's keys. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#clear + */ + clear: (callback?: Callback) => Promise; + /** + * Gets *all* keys known to your app; for all callers, libraries, etc. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#getallkeys + */ + getAllKeys: (callback?: CallbackWithResult) => Promise; + /** + * The following batched functions are useful for executing a lot of + * operations at once, allowing for native optimizations and provide the + * convenience of a single callback after all operations are complete. + * + * These functions return arrays of errors, potentially one for every key. + * For key-specific errors, the Error object will have a key property to + * indicate which key caused the error. + */ + /** + * Flushes any pending requests using a single batch call to get the data. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#flushgetrequests + * */ + flushGetRequests: () => void; + /** + * This allows you to batch the fetching of items given an array of `key` + * inputs. Your callback will be invoked with an array of corresponding + * key-value pairs found. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiget + */ + multiGet: (keys: readonly string[], callback?: MultiGetCallback) => Promise; + /** + * Use this as a batch operation for storing multiple key-value pairs. When + * the operation completes you'll get a single callback with any errors. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiset + */ + multiSet: (keyValuePairs: ReadonlyArray, callback?: MultiCallback) => Promise; + /** + * Call this to batch the deletion of all keys in the `keys` array. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiremove + */ + multiRemove: (keys: readonly string[], callback?: MultiCallback) => Promise; + /** + * Batch operation to merge in existing and new values for a given set of + * keys. This assumes that the values are stringified JSON. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multimerge + */ + multiMerge: (keyValuePairs: [string, string][], callback?: MultiCallback) => Promise; +}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/types.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/types.d.ts.map new file mode 100644 index 0000000..4b36f53 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/lib/typescript/types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;AAEtD,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAClC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,EACpB,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,KACd,IAAI,CAAC;AAEV,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,MAAM,CAAC,EAAE,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,EACzC,MAAM,CAAC,EAAE,SAAS,YAAY,EAAE,KAC7B,IAAI,CAAC;AAEV,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,KAAK,IAAI,CAAC;IACpD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3E,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;OAIG;IACH,OAAO,EAAE,CACP,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE5B;;;;OAIG;IACH,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5E;;;;OAIG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;;;OAKG;IACH,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;;;;OAMG;IACH,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C;;;;OAIG;IACH,UAAU,EAAE,CACV,QAAQ,CAAC,EAAE,kBAAkB,CAAC,SAAS,MAAM,EAAE,CAAC,KAC7C,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAEhC;;;;;;;;OAQG;IAEH;;;;SAIK;IACL,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAE7B;;;;;;OAMG;IACH,QAAQ,EAAE,CACR,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,QAAQ,CAAC,EAAE,gBAAgB,KACxB,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,QAAQ,EAAE,CACR,aAAa,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvD,QAAQ,CAAC,EAAE,aAAa,KACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB;;;;OAIG;IACH,WAAW,EAAE,CACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,QAAQ,CAAC,EAAE,aAAa,KACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB;;;;;OAKG;IACH,UAAU,EAAE,CACV,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EACjC,QAAQ,CAAC,EAAE,aAAa,KACrB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/macos/RNCAsyncStorage.xcodeproj/project.pbxproj b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/macos/RNCAsyncStorage.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8c2f897 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/macos/RNCAsyncStorage.xcodeproj/project.pbxproj @@ -0,0 +1,385 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1990B97A223993B0009E5EA1 /* RNCAsyncStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = B3E7B5881CC2AC0600A0062D /* RNCAsyncStorage.h */; }; + 1990B97B223993B0009E5EA1 /* RNCAsyncStorageDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1990B9402233FE3A009E5EA1 /* RNCAsyncStorageDelegate.h */; }; + 3893A2E123C509D1009200E3 /* RNCAsyncStorage.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = B3E7B5881CC2AC0600A0062D /* RNCAsyncStorage.h */; }; + 3893A2E223C509D1009200E3 /* RNCAsyncStorageDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1990B9402233FE3A009E5EA1 /* RNCAsyncStorageDelegate.h */; }; + 3893A2E523C50AFE009200E3 /* RNCAsyncStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = B3E7B5881CC2AC0600A0062D /* RNCAsyncStorage.h */; }; + 3893A2E623C50AFE009200E3 /* RNCAsyncStorageDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1990B9402233FE3A009E5EA1 /* RNCAsyncStorageDelegate.h */; }; + 3893A2E823C50AFE009200E3 /* RNCAsyncStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* RNCAsyncStorage.m */; }; + 3893A2EB23C50AFE009200E3 /* RNCAsyncStorage.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = B3E7B5881CC2AC0600A0062D /* RNCAsyncStorage.h */; }; + 3893A2EC23C50AFE009200E3 /* RNCAsyncStorageDelegate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1990B9402233FE3A009E5EA1 /* RNCAsyncStorageDelegate.h */; }; + B3E7B58A1CC2AC0600A0062D /* RNCAsyncStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* RNCAsyncStorage.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 3893A2EA23C50AFE009200E3 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = include/RNCAsyncStorage; + dstSubfolderSpec = 16; + files = ( + 3893A2EB23C50AFE009200E3 /* RNCAsyncStorage.h in CopyFiles */, + 3893A2EC23C50AFE009200E3 /* RNCAsyncStorageDelegate.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 58B511D91A9E6C8500147676 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + 3893A2E123C509D1009200E3 /* RNCAsyncStorage.h in CopyFiles */, + 3893A2E223C509D1009200E3 /* RNCAsyncStorageDelegate.h in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 134814201AA4EA6300B7C361 /* libRNCAsyncStorage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRNCAsyncStorage.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 1990B9402233FE3A009E5EA1 /* RNCAsyncStorageDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RNCAsyncStorageDelegate.h; path = ../ios/RNCAsyncStorageDelegate.h; sourceTree = ""; }; + 3893A2F023C50AFE009200E3 /* libRNCAsyncStorage-macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libRNCAsyncStorage-macOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + B3E7B5881CC2AC0600A0062D /* RNCAsyncStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RNCAsyncStorage.h; path = ../ios/RNCAsyncStorage.h; sourceTree = ""; }; + B3E7B5891CC2AC0600A0062D /* RNCAsyncStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RNCAsyncStorage.m; path = ../ios/RNCAsyncStorage.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 3893A2E923C50AFE009200E3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 58B511D81A9E6C8500147676 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 134814211AA4EA7D00B7C361 /* Products */ = { + isa = PBXGroup; + children = ( + 134814201AA4EA6300B7C361 /* libRNCAsyncStorage.a */, + ); + name = Products; + sourceTree = ""; + }; + 58B511D21A9E6C8500147676 = { + isa = PBXGroup; + children = ( + B3E7B5881CC2AC0600A0062D /* RNCAsyncStorage.h */, + B3E7B5891CC2AC0600A0062D /* RNCAsyncStorage.m */, + 1990B9402233FE3A009E5EA1 /* RNCAsyncStorageDelegate.h */, + 134814211AA4EA7D00B7C361 /* Products */, + 3893A2F023C50AFE009200E3 /* libRNCAsyncStorage-macOS.a */, + ); + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 19F94B1D2239A948006921A9 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1990B97A223993B0009E5EA1 /* RNCAsyncStorage.h in Headers */, + 1990B97B223993B0009E5EA1 /* RNCAsyncStorageDelegate.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3893A2E423C50AFE009200E3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3893A2E523C50AFE009200E3 /* RNCAsyncStorage.h in Headers */, + 3893A2E623C50AFE009200E3 /* RNCAsyncStorageDelegate.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 3893A2E323C50AFE009200E3 /* RNCAsyncStorage-macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3893A2ED23C50AFE009200E3 /* Build configuration list for PBXNativeTarget "RNCAsyncStorage-macOS" */; + buildPhases = ( + 3893A2E423C50AFE009200E3 /* Headers */, + 3893A2E723C50AFE009200E3 /* Sources */, + 3893A2E923C50AFE009200E3 /* Frameworks */, + 3893A2EA23C50AFE009200E3 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "RNCAsyncStorage-macOS"; + productName = RCTDataManager; + productReference = 3893A2F023C50AFE009200E3 /* libRNCAsyncStorage-macOS.a */; + productType = "com.apple.product-type.library.static"; + }; + 58B511DA1A9E6C8500147676 /* RNCAsyncStorage */ = { + isa = PBXNativeTarget; + buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RNCAsyncStorage" */; + buildPhases = ( + 19F94B1D2239A948006921A9 /* Headers */, + 58B511D71A9E6C8500147676 /* Sources */, + 58B511D81A9E6C8500147676 /* Frameworks */, + 58B511D91A9E6C8500147676 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RNCAsyncStorage; + productName = RCTDataManager; + productReference = 134814201AA4EA6300B7C361 /* libRNCAsyncStorage.a */; + productType = "com.apple.product-type.library.static"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 58B511D31A9E6C8500147676 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0830; + ORGANIZATIONNAME = Facebook; + TargetAttributes = { + 58B511DA1A9E6C8500147676 = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RNCAsyncStorage" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + ); + mainGroup = 58B511D21A9E6C8500147676; + productRefGroup = 58B511D21A9E6C8500147676; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 58B511DA1A9E6C8500147676 /* RNCAsyncStorage */, + 3893A2E323C50AFE009200E3 /* RNCAsyncStorage-macOS */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 3893A2E723C50AFE009200E3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3893A2E823C50AFE009200E3 /* RNCAsyncStorage.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 58B511D71A9E6C8500147676 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B3E7B58A1CC2AC0600A0062D /* RNCAsyncStorage.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 3893A2EE23C50AFE009200E3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native/React/**", + ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 3893A2EF23C50AFE009200E3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../node_modules/react-native/React/**", + ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 58B511ED1A9E6C8500147676 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 58B511EE1A9E6C8500147676 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 58B511F01A9E6C8500147676 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../../../React/**", + "$(SRCROOT)/../../react-native/React/**", + ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = RNCAsyncStorage; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos appletvsimulator appletvos"; + }; + name = Debug; + }; + 58B511F11A9E6C8500147676 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../../../React/**", + "$(SRCROOT)/../../react-native/React/**", + ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = RNCAsyncStorage; + SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos appletvsimulator appletvos"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 3893A2ED23C50AFE009200E3 /* Build configuration list for PBXNativeTarget "RNCAsyncStorage-macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3893A2EE23C50AFE009200E3 /* Debug */, + 3893A2EF23C50AFE009200E3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RNCAsyncStorage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 58B511ED1A9E6C8500147676 /* Debug */, + 58B511EE1A9E6C8500147676 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RNCAsyncStorage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 58B511F01A9E6C8500147676 /* Debug */, + 58B511F11A9E6C8500147676 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 58B511D31A9E6C8500147676 /* Project object */; +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/macos/RNCAsyncStorage.xcodeproj/xcshareddata/xcschemes/RNCAsyncStorage-macOS.xcscheme b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/macos/RNCAsyncStorage.xcodeproj/xcshareddata/xcschemes/RNCAsyncStorage-macOS.xcscheme new file mode 100644 index 0000000..817e512 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/macos/RNCAsyncStorage.xcodeproj/xcshareddata/xcschemes/RNCAsyncStorage-macOS.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/macos/RNCAsyncStorage.xcodeproj/xcshareddata/xcschemes/RNCAsyncStorage.xcscheme b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/macos/RNCAsyncStorage.xcodeproj/xcshareddata/xcschemes/RNCAsyncStorage.xcscheme new file mode 100644 index 0000000..7d809e3 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/macos/RNCAsyncStorage.xcodeproj/xcshareddata/xcschemes/RNCAsyncStorage.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/index.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/index.d.ts new file mode 100644 index 0000000..ac2614d --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/index.d.ts @@ -0,0 +1,29 @@ +/** +Check if a value is a plain object. + +An object is plain if it's created by either `{}`, `new Object()`, or `Object.create(null)`. + +@example +``` +import isPlainObject = require('is-plain-obj'); + +isPlainObject({foo: 'bar'}); +//=> true + +isPlainObject(new Object()); +//=> true + +isPlainObject(Object.create(null)); +//=> true + +isPlainObject([1, 2, 3]); +//=> false + +class Unicorn {} +isPlainObject(new Unicorn()); +//=> false +``` +*/ +declare function isPlainObj(value: unknown): value is object; + +export = isPlainObj; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/index.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/index.js new file mode 100644 index 0000000..95079ec --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = value => { + if (Object.prototype.toString.call(value) !== '[object Object]') { + return false; + } + + const prototype = Object.getPrototypeOf(value); + return prototype === null || prototype === Object.prototype; +}; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/license b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/license new file mode 100644 index 0000000..e7af2f7 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/package.json b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/package.json new file mode 100644 index 0000000..87512f1 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/package.json @@ -0,0 +1,38 @@ +{ + "name": "is-plain-obj", + "version": "2.1.0", + "description": "Check if a value is a plain object", + "license": "MIT", + "repository": "sindresorhus/is-plain-obj", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "object", + "is", + "check", + "test", + "type", + "plain", + "vanilla", + "pure", + "simple" + ], + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/readme.md b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/readme.md new file mode 100644 index 0000000..13571a8 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/is-plain-obj/readme.md @@ -0,0 +1,54 @@ +# is-plain-obj [![Build Status](https://travis-ci.org/sindresorhus/is-plain-obj.svg?branch=master)](https://travis-ci.org/sindresorhus/is-plain-obj) + +> Check if a value is a plain object + +An object is plain if it's created by either `{}`, `new Object()`, or `Object.create(null)`. + + +## Install + +``` +$ npm install is-plain-obj +``` + + +## Usage + +```js +const isPlainObject = require('is-plain-obj'); + +isPlainObject({foo: 'bar'}); +//=> true + +isPlainObject(new Object()); +//=> true + +isPlainObject(Object.create(null)); +//=> true + +isPlainObject([1, 2, 3]); +//=> false + +class Unicorn {} +isPlainObject(new Unicorn()); +//=> false +``` + + +## Related + +- [is-obj](https://github.com/sindresorhus/is-obj) - Check if a value is an object +- [is](https://github.com/sindresorhus/is) - Type check values + + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/index.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/index.d.ts new file mode 100644 index 0000000..0d308d4 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/index.d.ts @@ -0,0 +1,2 @@ +declare function mergeOptions(...options: any[]): any; +export = mergeOptions; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/index.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/index.js new file mode 100644 index 0000000..a040d73 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/index.js @@ -0,0 +1,171 @@ +'use strict'; +const isOptionObject = require('is-plain-obj'); + +const {hasOwnProperty} = Object.prototype; +const {propertyIsEnumerable} = Object; +const defineProperty = (object, name, value) => Object.defineProperty(object, name, { + value, + writable: true, + enumerable: true, + configurable: true +}); + +const globalThis = this; +const defaultMergeOptions = { + concatArrays: false, + ignoreUndefined: false +}; + +const getEnumerableOwnPropertyKeys = value => { + const keys = []; + + for (const key in value) { + if (hasOwnProperty.call(value, key)) { + keys.push(key); + } + } + + /* istanbul ignore else */ + if (Object.getOwnPropertySymbols) { + const symbols = Object.getOwnPropertySymbols(value); + + for (const symbol of symbols) { + if (propertyIsEnumerable.call(value, symbol)) { + keys.push(symbol); + } + } + } + + return keys; +}; + +function clone(value) { + if (Array.isArray(value)) { + return cloneArray(value); + } + + if (isOptionObject(value)) { + return cloneOptionObject(value); + } + + return value; +} + +function cloneArray(array) { + const result = array.slice(0, 0); + + getEnumerableOwnPropertyKeys(array).forEach(key => { + defineProperty(result, key, clone(array[key])); + }); + + return result; +} + +function cloneOptionObject(object) { + const result = Object.getPrototypeOf(object) === null ? Object.create(null) : {}; + + getEnumerableOwnPropertyKeys(object).forEach(key => { + defineProperty(result, key, clone(object[key])); + }); + + return result; +} + +/** + * @param {*} merged already cloned + * @param {*} source something to merge + * @param {string[]} keys keys to merge + * @param {Object} config Config Object + * @returns {*} cloned Object + */ +const mergeKeys = (merged, source, keys, config) => { + keys.forEach(key => { + if (typeof source[key] === 'undefined' && config.ignoreUndefined) { + return; + } + + // Do not recurse into prototype chain of merged + if (key in merged && merged[key] !== Object.getPrototypeOf(merged)) { + defineProperty(merged, key, merge(merged[key], source[key], config)); + } else { + defineProperty(merged, key, clone(source[key])); + } + }); + + return merged; +}; + +/** + * @param {*} merged already cloned + * @param {*} source something to merge + * @param {Object} config Config Object + * @returns {*} cloned Object + * + * see [Array.prototype.concat ( ...arguments )](http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.concat) + */ +const concatArrays = (merged, source, config) => { + let result = merged.slice(0, 0); + let resultIndex = 0; + + [merged, source].forEach(array => { + const indices = []; + + // `result.concat(array)` with cloning + for (let k = 0; k < array.length; k++) { + if (!hasOwnProperty.call(array, k)) { + continue; + } + + indices.push(String(k)); + + if (array === merged) { + // Already cloned + defineProperty(result, resultIndex++, array[k]); + } else { + defineProperty(result, resultIndex++, clone(array[k])); + } + } + + // Merge non-index keys + result = mergeKeys(result, array, getEnumerableOwnPropertyKeys(array).filter(key => !indices.includes(key)), config); + }); + + return result; +}; + +/** + * @param {*} merged already cloned + * @param {*} source something to merge + * @param {Object} config Config Object + * @returns {*} cloned Object + */ +function merge(merged, source, config) { + if (config.concatArrays && Array.isArray(merged) && Array.isArray(source)) { + return concatArrays(merged, source, config); + } + + if (!isOptionObject(source) || !isOptionObject(merged)) { + return clone(source); + } + + return mergeKeys(merged, source, getEnumerableOwnPropertyKeys(source), config); +} + +module.exports = function (...options) { + const config = merge(clone(defaultMergeOptions), (this !== globalThis && this) || {}, defaultMergeOptions); + let merged = {_: {}}; + + for (const option of options) { + if (option === undefined) { + continue; + } + + if (!isOptionObject(option)) { + throw new TypeError('`' + option + '` is not an Option Object'); + } + + merged = merge(merged, {_: option}, config); + } + + return merged._; +}; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/index.mjs b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/index.mjs new file mode 100644 index 0000000..4e4e692 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/index.mjs @@ -0,0 +1,8 @@ +/** + * Thin ESM wrapper for CJS named exports. + * + * Ref: https://redfin.engineering/node-modules-at-war-why-commonjs-and-es-modules-cant-get-along-9617135eeca1 + */ + +import mergeOptions from './index.js'; +export default mergeOptions; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/license b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/license new file mode 100644 index 0000000..9d340ba --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Michael Mayer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/index.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/index.d.ts new file mode 100644 index 0000000..ac2614d --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/index.d.ts @@ -0,0 +1,29 @@ +/** +Check if a value is a plain object. + +An object is plain if it's created by either `{}`, `new Object()`, or `Object.create(null)`. + +@example +``` +import isPlainObject = require('is-plain-obj'); + +isPlainObject({foo: 'bar'}); +//=> true + +isPlainObject(new Object()); +//=> true + +isPlainObject(Object.create(null)); +//=> true + +isPlainObject([1, 2, 3]); +//=> false + +class Unicorn {} +isPlainObject(new Unicorn()); +//=> false +``` +*/ +declare function isPlainObj(value: unknown): value is object; + +export = isPlainObj; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/index.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/index.js new file mode 100644 index 0000000..95079ec --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = value => { + if (Object.prototype.toString.call(value) !== '[object Object]') { + return false; + } + + const prototype = Object.getPrototypeOf(value); + return prototype === null || prototype === Object.prototype; +}; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/package.json b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/package.json new file mode 100644 index 0000000..87512f1 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/package.json @@ -0,0 +1,38 @@ +{ + "name": "is-plain-obj", + "version": "2.1.0", + "description": "Check if a value is a plain object", + "license": "MIT", + "repository": "sindresorhus/is-plain-obj", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=8" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "object", + "is", + "check", + "test", + "type", + "plain", + "vanilla", + "pure", + "simple" + ], + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/readme.md b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/readme.md new file mode 100644 index 0000000..13571a8 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/node_modules/is-plain-obj/readme.md @@ -0,0 +1,54 @@ +# is-plain-obj [![Build Status](https://travis-ci.org/sindresorhus/is-plain-obj.svg?branch=master)](https://travis-ci.org/sindresorhus/is-plain-obj) + +> Check if a value is a plain object + +An object is plain if it's created by either `{}`, `new Object()`, or `Object.create(null)`. + + +## Install + +``` +$ npm install is-plain-obj +``` + + +## Usage + +```js +const isPlainObject = require('is-plain-obj'); + +isPlainObject({foo: 'bar'}); +//=> true + +isPlainObject(new Object()); +//=> true + +isPlainObject(Object.create(null)); +//=> true + +isPlainObject([1, 2, 3]); +//=> false + +class Unicorn {} +isPlainObject(new Unicorn()); +//=> false +``` + + +## Related + +- [is-obj](https://github.com/sindresorhus/is-obj) - Check if a value is an object +- [is](https://github.com/sindresorhus/is) - Type check values + + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/package.json b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/package.json new file mode 100644 index 0000000..55367b3 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/package.json @@ -0,0 +1,59 @@ +{ + "name": "merge-options", + "version": "3.0.4", + "description": "Merge Option Objects", + "license": "MIT", + "repository": "schnittstabil/merge-options", + "author": { + "name": "Michael Mayer", + "email": "michael@schnittstabil.de" + }, + "engines": { + "node": ">=10" + }, + "scripts": { + "test": "xo && tsd && nyc ava", + "lint": "xo", + "unit": "ava", + "typecheck": "tsd", + "clean": "rimraf .nyc_output/ coverage/", + "coverage-html": "nyc ava && nyc report --reporter=html" + }, + "main": "./index.js", + "exports": { + "require": "./index.js", + "import": "./index.mjs" + }, + "files": [ + "index.d.ts", + "index.js", + "index.mjs" + ], + "keywords": [ + "merge", + "options", + "deep", + "plain", + "object", + "extend", + "clone" + ], + "devDependencies": { + "ava": "^3.11.1", + "coveralls": "^3.1.0", + "nyc": "^15.1.0", + "rimraf": "^3.0.2", + "tsd": "^0.13.1", + "xo": "^0.33.0" + }, + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "xo": { + "rules": { + "import/extensions": "off", + "import/no-useless-path-segments": "off", + "unicorn/import-index": "off" + } + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/readme.md b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/readme.md new file mode 100644 index 0000000..66d7043 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/node_modules/merge-options/readme.md @@ -0,0 +1,130 @@ +# merge-options [![Build Status](https://travis-ci.org/schnittstabil/merge-options.svg?branch=master)](https://travis-ci.org/schnittstabil/merge-options) [![Coverage Status](https://coveralls.io/repos/schnittstabil/merge-options/badge.svg?branch=master&service=github)](https://coveralls.io/github/schnittstabil/merge-options?branch=master) [![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) + + +> Merge Option Objects + +`merge-options` considers [plain objects](https://github.com/sindresorhus/is-plain-obj) as *Option Objects*, everything else as *Option Values*. + +## Install + +``` +$ npm install --save merge-options +``` + +## Usage + +```js +const mergeOptions = require('merge-options'); + +mergeOptions({foo: 0}, {bar: 1}, {baz: 2}, {bar: 3}) +//=> {foo: 0, bar: 3, baz: 2} + +mergeOptions({nested: {unicorns: 'none'}}, {nested: {unicorns: 'many'}}) +//=> {nested: {unicorns: 'many'}} + +mergeOptions({[Symbol.for('key')]: 0}, {[Symbol.for('key')]: 42}) +//=> {Symbol(key): 42} +``` + +### Usage with custom config + +```js +const mergeOptions = require('merge-options').bind({ignoreUndefined: true}); + +mergeOptions({foo: 'bar'}, {foo: undefined}) +//=> {foo: 'bar'} +``` + +## API + +### mergeOptions(option1, ...options)
mergeOptions.call(config, option1, ...options)
mergeOptions.apply(config, [option1, ...options]) + +`mergeOptions` recursively merges one or more *Option Objects* into a new one and returns that. The `options` are merged in order, thus *Option Values* of additional `options` take precedence over previous ones. + +The merging does not alter the passed `option` arguments, taking roughly the following steps: +* recursively cloning[1] *Option Objects* and [arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray) until reaching *Option Values* +* copying[1] references to *Option Values* to the result object + + +```js +const defaultOpts = { + fn: () => false, // functions are Option Values + promise: Promise.reject(new Error()), // all non-plain objects are Option Values + array: ['foo'], // arrays are Option Values + nested: {unicorns: 'none'} // {…} is plain, therefore an Option Object +}; + +const opts = { + fn: () => true, // [1] + promise: Promise.resolve('bar'), // [2] + array: ['baz'], // [3] + nested: {unicorns: 'many'} // [4] +}; + +mergeOptions(defaultOpts, opts) +//=> +{ + fn: [Function], // === [1] + promise: Promise { 'bar' }, // === [2] + array: ['baz'], // !== [3] (arrays are cloned) + nested: {unicorns: 'many'} // !== [4] (Option Objects are cloned) +} +``` + +#### config + +Type: `object` + +##### config.concatArrays + +Type: `boolean`
Default: `false` + +Concatenate arrays: + +```js +mergeOptions({src: ['src/**']}, {src: ['test/**']}) +//=> {src: ['test/**']} + +// Via call +mergeOptions.call({concatArrays: true}, {src: ['src/**']}, {src: ['test/**']}) +//=> {src: ['src/**', 'test/**']} + +// Via apply +mergeOptions.apply({concatArrays: true}, [{src: ['src/**']}, {src: ['test/**']}]) +//=> {src: ['src/**', 'test/**']} +``` + +##### config.ignoreUndefined + +Type: `boolean`
Default: `false` + +Ignore undefined values: + +```js +mergeOptions({foo: 'bar'}, {foo: undefined}) +//=> {foo: undefined} + +// Via call +mergeOptions.call({ignoreUndefined: true}, {foo: 'bar'}, {foo: undefined}) +//=> {foo: 'bar'} + +// Via apply +mergeOptions.apply({ignoreUndefined: true}, [{foo: 'bar'}, {foo: undefined}]) +//=> {foo: 'bar'} +``` + + +## Related + +* See [object-assign](https://github.com/sindresorhus/object-assign) if you need a ES2015 Object.assign() ponyfill +* See [deep-assign](https://github.com/sindresorhus/deep-assign) if you need to do Object.assign() recursively + +## Notes + +
    +
  1. copying and cloning take only enumerable own properties into account
  2. +
+ +## License + +MIT © [Michael Mayer](http://schnittstabil.de) diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/package.json b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/package.json new file mode 100644 index 0000000..b27b65e --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/package.json @@ -0,0 +1,127 @@ +{ + "name": "@react-native-async-storage/async-storage", + "version": "2.0.0", + "description": "Asynchronous, persistent, key-value storage system for React Native.", + "main": "lib/commonjs/index.js", + "module": "lib/module/index.js", + "react-native": "src/index.ts", + "types": "lib/typescript/index.d.ts", + "files": [ + "RNCAsyncStorage.podspec", + "android/", + "!android/.gradle", + "!android/build", + "ios/", + "jest/", + "lib/", + "macos/", + "src/", + "windows/" + ], + "author": "Krzysztof Borowy ", + "contributors": [ + "Evan Bacon (https://github.com/evanbacon)", + "Tommy Nguyen <4123478+tido64@users.noreply.github.com> (https://github.com/tido64)" + ], + "homepage": "https://github.com/react-native-async-storage/async-storage#readme", + "license": "MIT", + "keywords": [ + "react-native", + "react native", + "async storage", + "asyncstorage", + "storage" + ], + "repository": { + "type": "git", + "url": "https://github.com/react-native-async-storage/async-storage.git", + "directory": "packages/default-storage-backend" + }, + "scripts": { + "prepack": "yarn build", + "build": "bob build", + "start": "react-native start", + "start:android": "react-native run-android", + "start:ios": "react-native run-ios", + "start:macos": "react-native run-macos --project-path example/macos --scheme AsyncStorageExample", + "start:web": "expo start --web", + "start:windows": "install-windows-test-app -p example/windows && react-native run-windows --root example --logging --no-packager --no-telemetry", + "build:e2e:android": "scripts/android_e2e.sh 'build'", + "build:e2e:ios": "scripts/ios_e2e.sh 'build'", + "build:e2e:macos": "scripts/macos_e2e.sh 'build'", + "bundle:android": "scripts/android_e2e.sh 'bundle'", + "bundle:ios": "scripts/ios_e2e.sh 'bundle'", + "bundle:macos": "react-native bundle --entry-file index.ts --platform macos --dev false --bundle-output example/index.macos.jsbundle", + "test": "concurrently -n lint,ts yarn:test:lint yarn:test:ts", + "test:lint": "eslint $(git ls-files '*.js' '*.ts' '*.tsx')", + "test:ts": "tsc", + "test:e2e:android": "scripts/android_e2e.sh 'test'", + "test:e2e:ios": "scripts/ios_e2e.sh 'test'", + "test:e2e:macos": "scripts/macos_e2e.sh 'test'" + }, + "installConfig": { + "hoistingLimits": "workspaces" + }, + "dependencies": { + "merge-options": "^3.0.4" + }, + "peerDependencies": { + "react-native": "^0.0.0-0 || >=0.65 <1.0" + }, + "devDependencies": { + "@babel/core": "^7.20.0", + "@babel/preset-env": "^7.20.0", + "@react-native/babel-preset": "^0.73.19", + "@react-native/metro-config": "^0.73.3", + "@rnx-kit/metro-config": "^1.3.15", + "@types/lodash": "^4.14.184", + "@types/mocha": "^10.0.1", + "@types/react": "^18.0.0", + "@wdio/appium-service": "^8.24.0", + "@wdio/cli": "^8.24.0", + "@wdio/local-runner": "^8.24.0", + "@wdio/mocha-framework": "^8.11.0", + "@wdio/spec-reporter": "^8.24.0", + "appium": "2.2.2", + "appium-uiautomator2-driver": "^2.34.1", + "appium-xcuitest-driver": "^5.9.1", + "concurrently": "^8.2.2", + "eslint": "^8.54.0", + "expo": "^48.0.0", + "lodash": "^4.17.21", + "prettier": "2.8.8", + "react": "18.2.0", + "react-dom": "^18.2.0", + "react-native": "^0.73.0", + "react-native-builder-bob": "^0.18.0", + "react-native-macos": "^0.73.0", + "react-native-test-app": "^3.7.3", + "react-native-web": "~0.18.10", + "react-native-windows": "^0.73.0", + "react-test-renderer": "18.2.0", + "typescript": "^5.3.0", + "webdriverio": "^8.24.0" + }, + "react-native-builder-bob": { + "source": "src", + "output": "lib", + "targets": [ + "commonjs", + "module", + [ + "typescript", + { + "project": "tsconfig.build.json" + } + ] + ] + }, + "codegenConfig": { + "name": "rnasyncstorage", + "type": "modules", + "jsSrcsDir": "./src", + "android": { + "javaPackageName": "com.reactnativecommunity.asyncstorage" + } + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/AsyncStorage.native.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/AsyncStorage.native.ts new file mode 100644 index 0000000..6ba0f29 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/AsyncStorage.native.ts @@ -0,0 +1,356 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { + checkValidArgs, + checkValidInput, + convertError, + convertErrors, +} from "./helpers"; +import RCTAsyncStorage from "./RCTAsyncStorage"; +import type { + AsyncStorageStatic, + ErrorLike, + KeyValuePair, + MultiRequest, +} from "./types"; + +if (!RCTAsyncStorage) { + throw new Error(`[@RNC/AsyncStorage]: NativeModule: AsyncStorage is null. + +To fix this issue try these steps: + + • Uninstall, rebuild and restart the app. + + • Run the packager with \`--reset-cache\` flag. + + • If you are using CocoaPods on iOS, run \`pod install\` in the \`ios\` directory, then rebuild and re-run the app. + + • Make sure your project's \`package.json\` depends on \`@react-native-async-storage/async-storage\`, even if you only depend on it indirectly through other dependencies. CLI only autolinks native modules found in your \`package.json\`. + + • If this happens while testing with Jest, check out how to integrate AsyncStorage here: https://react-native-async-storage.github.io/async-storage/docs/advanced/jest + +If none of these fix the issue, please open an issue on the GitHub repository: https://github.com/react-native-async-storage/async-storage/issues +`); +} + +/** + * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value + * storage system that is global to the app. It should be used instead of + * LocalStorage. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api + */ +const AsyncStorage = ((): AsyncStorageStatic => { + let _getRequests: MultiRequest[] = []; + let _getKeys: string[] = []; + let _immediate: ReturnType | null = null; + + return { + /** + * Fetches an item for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#getitem + */ + getItem: (key, callback) => { + return new Promise((resolve, reject) => { + checkValidInput(key); + RCTAsyncStorage.multiGet( + [key], + (errors?: ErrorLike[], result?: string[][]) => { + // Unpack result to get value from [[key,value]] + const value = result?.[0]?.[1] ? result[0][1] : null; + const errs = convertErrors(errors); + callback?.(errs?.[0], value); + if (errs) { + reject(errs[0]); + } else { + resolve(value); + } + } + ); + }); + }, + + /** + * Sets the value for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#setitem + */ + setItem: (key, value, callback) => { + return new Promise((resolve, reject) => { + checkValidInput(key, value); + RCTAsyncStorage.multiSet([[key, value]], (errors?: ErrorLike[]) => { + const errs = convertErrors(errors); + callback?.(errs?.[0]); + if (errs) { + reject(errs[0]); + } else { + resolve(); + } + }); + }); + }, + + /** + * Removes an item for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#removeitem + */ + removeItem: (key, callback) => { + return new Promise((resolve, reject) => { + checkValidInput(key); + RCTAsyncStorage.multiRemove([key], (errors?: ErrorLike[]) => { + const errs = convertErrors(errors); + callback?.(errs?.[0]); + if (errs) { + reject(errs[0]); + } else { + resolve(); + } + }); + }); + }, + + /** + * Merges an existing `key` value with an input value, assuming both values + * are stringified JSON. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#mergeitem + */ + mergeItem: (key, value, callback) => { + return new Promise((resolve, reject) => { + checkValidInput(key, value); + RCTAsyncStorage.multiMerge([[key, value]], (errors?: ErrorLike[]) => { + const errs = convertErrors(errors); + callback?.(errs?.[0]); + if (errs) { + reject(errs[0]); + } else { + resolve(); + } + }); + }); + }, + + /** + * Erases *all* `AsyncStorage` for all clients, libraries, etc. You probably + * don't want to call this; use `removeItem` or `multiRemove` to clear only + * your app's keys. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#clear + */ + clear: (callback) => { + return new Promise((resolve, reject) => { + RCTAsyncStorage.clear((error?: ErrorLike) => { + const err = convertError(error); + callback?.(err); + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); + }, + + /** + * Gets *all* keys known to your app; for all callers, libraries, etc. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#getallkeys + */ + getAllKeys: (callback) => { + return new Promise((resolve, reject) => { + RCTAsyncStorage.getAllKeys((error?: ErrorLike, keys?: string[]) => { + const err = convertError(error); + callback?.(err, keys); + if (keys) { + resolve(keys); + } else { + reject(err); + } + }); + }); + }, + + /** + * The following batched functions are useful for executing a lot of + * operations at once, allowing for native optimizations and provide the + * convenience of a single callback after all operations are complete. + * + * These functions return arrays of errors, potentially one for every key. + * For key-specific errors, the Error object will have a key property to + * indicate which key caused the error. + */ + + /** + * Flushes any pending requests using a single batch call to get the data. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#flushgetrequests + * */ + flushGetRequests: () => { + const getRequests = _getRequests; + const getKeys = _getKeys; + + _getRequests = []; + _getKeys = []; + + RCTAsyncStorage.multiGet( + getKeys, + (errors?: ErrorLike[], result?: string[][]) => { + // Even though the runtime complexity of this is theoretically worse vs if we used a map, + // it's much, much faster in practice for the data sets we deal with (we avoid + // allocating result pair arrays). This was heavily benchmarked. + // + // Is there a way to avoid using the map but fix the bug in this breaking test? + // https://github.com/facebook/react-native/commit/8dd8ad76579d7feef34c014d387bf02065692264 + const map: Record = {}; + result?.forEach(([key, value]) => { + map[key] = value; + return value; + }); + const reqLength = getRequests.length; + + /** + * As mentioned few lines above, this method could be called with the array of potential error, + * in case of anything goes wrong. The problem is, if any of the batched calls fails + * the rest of them would fail too, but the error would be consumed by just one. The rest + * would simply return `undefined` as their result, rendering false negatives. + * + * In order to avoid this situation, in case of any call failing, + * the rest of them will be rejected as well (with the same error). + */ + const errorList = convertErrors(errors); + const error = errorList?.length ? errorList[0] : null; + + for (let i = 0; i < reqLength; i++) { + const request = getRequests[i]; + if (error) { + request.callback?.(errorList); + request.reject?.(error); + continue; + } + const requestResult = request.keys.map((key) => [ + key, + map[key], + ]); + request.callback?.(null, requestResult); + request.resolve?.(requestResult); + } + } + ); + }, + + /** + * This allows you to batch the fetching of items given an array of `key` + * inputs. Your callback will be invoked with an array of corresponding + * key-value pairs found. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiget + */ + multiGet: (keys, callback) => { + if (!_immediate) { + _immediate = setImmediate(() => { + _immediate = null; + AsyncStorage.flushGetRequests(); + }); + } + + const getRequest: MultiRequest = { + keys: keys, + callback: callback, + // do we need this? + keyIndex: _getKeys.length, + }; + + const promiseResult = new Promise( + (resolve, reject) => { + getRequest.resolve = resolve; + getRequest.reject = reject; + } + ); + + _getRequests.push(getRequest); + // avoid fetching duplicates + keys.forEach((key) => { + if (_getKeys.indexOf(key) === -1) { + _getKeys.push(key); + } + }); + + return promiseResult; + }, + + /** + * Use this as a batch operation for storing multiple key-value pairs. When + * the operation completes you'll get a single callback with any errors. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiset + */ + multiSet: (keyValuePairs, callback) => { + checkValidArgs(keyValuePairs, callback); + return new Promise((resolve, reject) => { + keyValuePairs.forEach(([key, value]) => { + checkValidInput(key, value); + }); + + RCTAsyncStorage.multiSet(keyValuePairs, (errors?: ErrorLike[]) => { + const error = convertErrors(errors); + callback?.(error); + if (error) { + reject(error); + } else { + resolve(); + } + }); + }); + }, + + /** + * Call this to batch the deletion of all keys in the `keys` array. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiremove + */ + multiRemove: (keys, callback) => { + return new Promise((resolve, reject) => { + keys.forEach((key) => checkValidInput(key)); + + RCTAsyncStorage.multiRemove(keys, (errors?: ErrorLike[]) => { + const error = convertErrors(errors); + callback?.(error); + if (error) { + reject(error); + } else { + resolve(); + } + }); + }); + }, + + /** + * Batch operation to merge in existing and new values for a given set of + * keys. This assumes that the values are stringified JSON. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multimerge + */ + multiMerge: (keyValuePairs, callback) => { + return new Promise((resolve, reject) => { + RCTAsyncStorage.multiMerge(keyValuePairs, (errors?: ErrorLike[]) => { + const error = convertErrors(errors); + callback?.(error); + if (error) { + reject(error); + } else { + resolve(); + } + }); + }); + }, + }; +})(); + +export default AsyncStorage; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/AsyncStorage.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/AsyncStorage.ts new file mode 100644 index 0000000..60a6a1a --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/AsyncStorage.ts @@ -0,0 +1,181 @@ +/** + * Copyright (c) Nicolas Gallagher. + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import mergeOptions from "merge-options"; +import type { + AsyncStorageStatic, + MultiCallback, + MultiGetCallback, +} from "./types"; + +// eslint-disable-next-line @typescript-eslint/ban-types +type OnMultiResult = Function; +// eslint-disable-next-line @typescript-eslint/ban-types +type OnResult = Function; + +const merge = mergeOptions.bind({ + concatArrays: true, + ignoreUndefined: true, +}); + +function mergeLocalStorageItem(key: string, value: string) { + const oldValue = window.localStorage.getItem(key); + if (oldValue) { + const oldObject = JSON.parse(oldValue); + const newObject = JSON.parse(value); + const nextValue = JSON.stringify(merge(oldObject, newObject)); + window.localStorage.setItem(key, nextValue); + } else { + window.localStorage.setItem(key, value); + } +} + +function createPromise( + getValue: () => Result, + callback?: Callback +): Promise { + return new Promise((resolve, reject) => { + try { + const value = getValue(); + callback?.(null, value); + resolve(value); + } catch (err) { + callback?.(err); + reject(err); + } + }); +} + +function createPromiseAll< + ReturnType, + Result, + ResultProcessor extends OnMultiResult +>( + promises: Promise[], + callback?: MultiCallback | MultiGetCallback, + processResult?: ResultProcessor +): Promise { + return Promise.all(promises).then( + (result) => { + const value = processResult?.(result) ?? null; + callback?.(null, value); + return Promise.resolve(value); + }, + (errors) => { + callback?.(errors); + return Promise.reject(errors); + } + ); +} + +const AsyncStorage: AsyncStorageStatic = { + /** + * Fetches `key` value. + */ + getItem: (key, callback) => { + return createPromise(() => window.localStorage.getItem(key), callback); + }, + + /** + * Sets `value` for `key`. + */ + setItem: (key, value, callback) => { + return createPromise( + () => window.localStorage.setItem(key, value), + callback + ); + }, + + /** + * Removes a `key` + */ + removeItem: (key, callback) => { + return createPromise(() => window.localStorage.removeItem(key), callback); + }, + + /** + * Merges existing value with input value, assuming they are stringified JSON. + */ + mergeItem: (key, value, callback) => { + return createPromise(() => mergeLocalStorageItem(key, value), callback); + }, + + /** + * Erases *all* AsyncStorage for the domain. + */ + clear: (callback) => { + return createPromise(() => window.localStorage.clear(), callback); + }, + + /** + * Gets *all* keys known to the app, for all callers, libraries, etc. + */ + getAllKeys: (callback) => { + return createPromise(() => { + const numberOfKeys = window.localStorage.length; + const keys: string[] = []; + for (let i = 0; i < numberOfKeys; i += 1) { + const key = window.localStorage.key(i) || ""; + keys.push(key); + } + return keys; + }, callback); + }, + + /** + * (stub) Flushes any pending requests using a single batch call to get the data. + */ + flushGetRequests: () => undefined, + + /** + * multiGet resolves to an array of key-value pair arrays that matches the + * input format of multiSet. + * + * multiGet(['k1', 'k2']) -> [['k1', 'val1'], ['k2', 'val2']] + */ + multiGet: (keys, callback) => { + const promises = keys.map((key) => AsyncStorage.getItem(key)); + const processResult = (result: string[]) => + result.map((value, i) => [keys[i], value]); + return createPromiseAll(promises, callback, processResult); + }, + + /** + * Takes an array of key-value array pairs. + * multiSet([['k1', 'val1'], ['k2', 'val2']]) + */ + multiSet: (keyValuePairs, callback) => { + const promises = keyValuePairs.map((item) => + AsyncStorage.setItem(item[0], item[1]) + ); + return createPromiseAll(promises, callback); + }, + + /** + * Delete all the keys in the `keys` array. + */ + multiRemove: (keys, callback) => { + const promises = keys.map((key) => AsyncStorage.removeItem(key)); + return createPromiseAll(promises, callback); + }, + + /** + * Takes an array of key-value array pairs and merges them with existing + * values, assuming they are stringified JSON. + * + * multiMerge([['k1', 'val1'], ['k2', 'val2']]) + */ + multiMerge: (keyValuePairs, callback) => { + const promises = keyValuePairs.map((item) => + AsyncStorage.mergeItem(item[0], item[1]) + ); + return createPromiseAll(promises, callback); + }, +}; + +export default AsyncStorage; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/NativeAsyncStorageModule.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/NativeAsyncStorageModule.ts new file mode 100644 index 0000000..be7e055 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/NativeAsyncStorageModule.ts @@ -0,0 +1,28 @@ +import type { TurboModule } from "react-native"; +import { TurboModuleRegistry } from "react-native"; +import type { ErrorLike } from "./types"; + +export interface Spec extends TurboModule { + multiGet: ( + keys: string[], + callback: (error?: ErrorLike[], result?: [string, string][]) => void + ) => void; + multiSet: ( + kvPairs: [string, string][], + callback: (error?: ErrorLike[]) => void + ) => void; + multiRemove: ( + keys: readonly string[], + callback: (error?: ErrorLike[]) => void + ) => void; + multiMerge: ( + kvPairs: [string, string][], + callback: (error?: ErrorLike[]) => void + ) => void; + getAllKeys: ( + callback: (error?: ErrorLike[], result?: [string, string][]) => void + ) => void; + clear: (callback: (error?: ErrorLike[]) => void) => void; +} + +export default TurboModuleRegistry.get("RNCAsyncStorage"); diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/RCTAsyncStorage.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/RCTAsyncStorage.ts new file mode 100644 index 0000000..1f78f2a --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/RCTAsyncStorage.ts @@ -0,0 +1,27 @@ +import { NativeModules, TurboModuleRegistry } from "react-native"; +import { shouldFallbackToLegacyNativeModule } from "./shouldFallbackToLegacyNativeModule"; + +// TurboModuleRegistry falls back to NativeModules so we don't have to try go +// assign NativeModules' counterparts if TurboModuleRegistry would resolve +// with undefined. +let RCTAsyncStorage = TurboModuleRegistry + ? TurboModuleRegistry.get("PlatformLocalStorage") || // Support for external modules, like react-native-windows + TurboModuleRegistry.get("RNC_AsyncSQLiteDBStorage") || + TurboModuleRegistry.get("RNCAsyncStorage") + : NativeModules["PlatformLocalStorage"] || // Support for external modules, like react-native-windows + NativeModules["RNC_AsyncSQLiteDBStorage"] || + NativeModules["RNCAsyncStorage"]; + +if (!RCTAsyncStorage && shouldFallbackToLegacyNativeModule()) { + if (TurboModuleRegistry) { + RCTAsyncStorage = + TurboModuleRegistry.get("AsyncSQLiteDBStorage") || + TurboModuleRegistry.get("AsyncLocalStorage"); + } else { + RCTAsyncStorage = + NativeModules["AsyncSQLiteDBStorage"] || + NativeModules["AsyncLocalStorage"]; + } +} + +export default RCTAsyncStorage; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/helpers.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/helpers.ts new file mode 100644 index 0000000..bb1d5fc --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/helpers.ts @@ -0,0 +1,79 @@ +import type { ErrorLike } from "./types"; + +export function checkValidArgs( + keyValuePairs: readonly unknown[], + callback: unknown +) { + if ( + !Array.isArray(keyValuePairs) || + keyValuePairs.length === 0 || + !Array.isArray(keyValuePairs[0]) + ) { + throw new Error( + "[AsyncStorage] Expected array of key-value pairs as first argument to multiSet" + ); + } + + if (callback && typeof callback !== "function") { + if (Array.isArray(callback)) { + throw new Error( + "[AsyncStorage] Expected function as second argument to multiSet. Did you forget to wrap key-value pairs in an array for the first argument?" + ); + } + + throw new Error( + "[AsyncStorage] Expected function as second argument to multiSet" + ); + } +} + +export function checkValidInput(...input: unknown[]) { + const [key, value] = input; + + if (typeof key !== "string") { + // eslint-disable-next-line no-console + console.warn( + `[AsyncStorage] Using ${typeof key} type for key is not supported. This can lead to unexpected behavior/errors. Use string instead.\nKey passed: ${key}\n` + ); + } + + if (input.length > 1 && typeof value !== "string") { + if (value == null) { + throw new Error( + `[AsyncStorage] Passing null/undefined as value is not supported. If you want to remove value, Use .removeItem method instead.\nPassed value: ${value}\nPassed key: ${key}\n` + ); + } else { + // eslint-disable-next-line no-console + console.warn( + `[AsyncStorage] The value for key "${key}" is not a string. This can lead to unexpected behavior/errors. Consider stringifying it.\nPassed value: ${value}\nPassed key: ${key}\n` + ); + } + } +} + +export function convertError(error?: ErrorLike): Error | null { + if (!error) { + return null; + } + + const out = new Error(error.message) as Error & ErrorLike; + out["key"] = error.key; + return out; +} + +export function convertErrors( + errs?: ErrorLike[] +): ReadonlyArray | null { + const errors = ensureArray(errs); + return errors ? errors.map((e) => convertError(e)) : null; +} + +function ensureArray(e?: ErrorLike | ErrorLike[]): ErrorLike[] | null { + if (Array.isArray(e)) { + return e.length === 0 ? null : e; + } else if (e) { + return [e]; + } else { + return null; + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/hooks.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/hooks.ts new file mode 100644 index 0000000..f430f53 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/hooks.ts @@ -0,0 +1,11 @@ +import AsyncStorage from "./AsyncStorage"; +import type { AsyncStorageHook } from "./types"; + +export function useAsyncStorage(key: string): AsyncStorageHook { + return { + getItem: (...args) => AsyncStorage.getItem(key, ...args), + setItem: (...args) => AsyncStorage.setItem(key, ...args), + mergeItem: (...args) => AsyncStorage.mergeItem(key, ...args), + removeItem: (...args) => AsyncStorage.removeItem(key, ...args), + }; +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/index.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/index.ts new file mode 100644 index 0000000..d38cb3b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/index.ts @@ -0,0 +1,7 @@ +import AsyncStorage from "./AsyncStorage"; + +export { useAsyncStorage } from "./hooks"; + +export type { AsyncStorageStatic } from "./types"; + +export default AsyncStorage; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/shouldFallbackToLegacyNativeModule.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/shouldFallbackToLegacyNativeModule.ts new file mode 100644 index 0000000..db53e0f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/shouldFallbackToLegacyNativeModule.ts @@ -0,0 +1,34 @@ +import { NativeModules } from "react-native"; + +export function shouldFallbackToLegacyNativeModule(): boolean { + const expoConstants = + NativeModules["NativeUnimoduleProxy"]?.modulesConstants?.ExponentConstants; + + if (expoConstants) { + /** + * In SDK <= 39, appOwnership is defined in managed apps but executionEnvironment is not. + * In bare React Native apps using expo-constants, appOwnership is never defined, so + * isLegacySdkVersion will be false in that context. + */ + const isLegacySdkVersion = + expoConstants.appOwnership && !expoConstants.executionEnvironment; + + /** + * Expo managed apps don't include the @react-native-async-storage/async-storage + * native modules yet, but the API interface is the same, so we can use the version + * exported from React Native still. + * + * If in future releases (eg: @react-native-async-storage/async-storage >= 2.0.0) this + * will likely not be valid anymore, and the package will need to be included in the Expo SDK + * to continue to work. + */ + if ( + isLegacySdkVersion || + ["storeClient", "standalone"].includes(expoConstants.executionEnvironment) + ) { + return true; + } + } + + return false; +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/types.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/types.ts new file mode 100644 index 0000000..5dd2a6c --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-async-storage/async-storage/src/types.ts @@ -0,0 +1,155 @@ +export type ErrorLike = { + message: string; + key?: string; +}; + +export type Callback = (error?: Error | null) => void; + +export type CallbackWithResult = ( + error?: Error | null, + result?: T | null +) => void; + +export type KeyValuePair = [string, string | null]; + +export type MultiCallback = (errors?: readonly (Error | null)[] | null) => void; + +export type MultiGetCallback = ( + errors?: readonly (Error | null)[] | null, + result?: readonly KeyValuePair[] +) => void; + +export type MultiRequest = { + keys: readonly string[]; + callback?: MultiGetCallback; + keyIndex: number; + resolve?: (result: readonly KeyValuePair[]) => void; + reject?: (error?: ErrorLike) => void; +}; + +export type AsyncStorageHook = { + getItem: (callback?: CallbackWithResult) => Promise; + setItem: (value: string, callback?: Callback) => Promise; + mergeItem: (value: string, callback?: Callback) => Promise; + removeItem: (callback?: Callback) => Promise; +}; + +/** + * `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value + * storage system that is global to the app. It should be used instead of + * LocalStorage. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api + */ +export type AsyncStorageStatic = { + /** + * Fetches an item for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#getitem + */ + getItem: ( + key: string, + callback?: CallbackWithResult + ) => Promise; + + /** + * Sets the value for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#setitem + */ + setItem: (key: string, value: string, callback?: Callback) => Promise; + + /** + * Removes an item for a `key` and invokes a callback upon completion. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#removeitem + */ + removeItem: (key: string, callback?: Callback) => Promise; + + /** + * Merges an existing `key` value with an input value, assuming both values + * are stringified JSON. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#mergeitem + */ + mergeItem: (key: string, value: string, callback?: Callback) => Promise; + + /** + * Erases *all* `AsyncStorage` for all clients, libraries, etc. You probably + * don't want to call this; use `removeItem` or `multiRemove` to clear only + * your app's keys. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#clear + */ + clear: (callback?: Callback) => Promise; + + /** + * Gets *all* keys known to your app; for all callers, libraries, etc. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#getallkeys + */ + getAllKeys: ( + callback?: CallbackWithResult + ) => Promise; + + /** + * The following batched functions are useful for executing a lot of + * operations at once, allowing for native optimizations and provide the + * convenience of a single callback after all operations are complete. + * + * These functions return arrays of errors, potentially one for every key. + * For key-specific errors, the Error object will have a key property to + * indicate which key caused the error. + */ + + /** + * Flushes any pending requests using a single batch call to get the data. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#flushgetrequests + * */ + flushGetRequests: () => void; + + /** + * This allows you to batch the fetching of items given an array of `key` + * inputs. Your callback will be invoked with an array of corresponding + * key-value pairs found. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiget + */ + multiGet: ( + keys: readonly string[], + callback?: MultiGetCallback + ) => Promise; + + /** + * Use this as a batch operation for storing multiple key-value pairs. When + * the operation completes you'll get a single callback with any errors. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiset + */ + multiSet: ( + keyValuePairs: ReadonlyArray, + callback?: MultiCallback + ) => Promise; + + /** + * Call this to batch the deletion of all keys in the `keys` array. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multiremove + */ + multiRemove: ( + keys: readonly string[], + callback?: MultiCallback + ) => Promise; + + /** + * Batch operation to merge in existing and new values for a given set of + * keys. This assumes that the values are stringified JSON. + * + * See https://react-native-async-storage.github.io/async-storage/docs/api#multimerge + */ + multiMerge: ( + keyValuePairs: [string, string][], + callback?: MultiCallback + ) => Promise; +}; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/LICENSE b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/LICENSE new file mode 100644 index 0000000..62269c8 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022-present, React Native Community + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/README.md b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/README.md new file mode 100644 index 0000000..6a37550 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/README.md @@ -0,0 +1,336 @@ +# `@react-native-community/geolocation` + +[![npm](https://img.shields.io/npm/v/@react-native-community/geolocation)](https://www.npmjs.com/package/@react-native-community/geolocation) ![Supports Android, iOS and web](https://img.shields.io/badge/platforms-android%20%7C%20ios%20%7C%20web-lightgrey.svg) ![MIT License](https://img.shields.io/npm/l/@react-native-community/geolocation.svg) + +The Geolocation API 📍 module for React Native that extends the [Geolocation web spec](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation). + +Supports TurboModules ⚡️ and legacy React Native architecture. + +Fully compatible with TypeScript. + +Supports modern [Play Services Location API](https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient.html). + + +## Supported platforms + +| Platform | Support | +|---|---| +| iOS | ✅ | +| Android | ✅ | +| Web | ✅ | +| Windows | ❌ | +| macOS | ❌ | + +## Compatibility +| React Native | RNC Geoloaction | +|---|---| +| >= 0.73.0 | >= 3.2.0 | +| >= 0.70.0 | >= 3.0.0 < 3.2.0 | +| >= 0.64.0 | 2.x.x | +| <= 0.63.0 | 1.x.x | + + +## Getting started + +`yarn add @react-native-community/geolocation` + +or + +`npm install @react-native-community/geolocation --save` + +## Configuration and Permissions + + + +### iOS + +You need to include `NSLocationWhenInUseUsageDescription` and `NSLocationAlwaysAndWhenInUseUsageDescription` in `Info.plist` to enable geolocation when using the app. If your app supports iOS 10 and earlier, the `NSLocationAlwaysUsageDescription` key is also required. If these keys are not present in the `Info.plist`, authorization requests fail immediately and silently. Geolocation is enabled by default when you create a project with `react-native init`. + +In order to enable geolocation in the background, you need to include the 'NSLocationAlwaysUsageDescription' key in Info.plist and add location as a background mode in the 'Capabilities' tab in Xcode. + +IOS >= 15 Positions will also contain a `mocked` boolean to indicate if position was created from a mock provider / software. + + +### Android + +To request access to location, you need to add the following line to your app's `AndroidManifest.xml`: + +`` + +or + +`` + +Android API >= 18 Positions will also contain a `mocked` boolean to indicate if position was created from a mock provider. + +

+ Android API >= 23 Requires an additional step to check for, and request + the ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permissions using + the PermissionsAndroid API. + Failure to do so may result in a hard crash. +

+ +
+ For React Native < 0.65 on Android we need to link manually + + +- android/settings.gradle +``` +include ':react-native-community-geolocation' +project(':react-native-community-geolocation').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/geolocation/android') +``` +- android/app/build.gradle +``` +dependencies { + ... + implementation project(':react-native-community-geolocation') +} +``` +- android/app/src/main/.../MainApplication.java + On imports section: +```java +import com.reactnativecommunity.geolocation.GeolocationPackage; +``` + In the class at `getPackages` method: +```java +@Override +protected List getPackages() { + @SuppressWarnings("UnnecessaryLocalVariable") + List packages = new PackageList(this).getPackages(); + // Packages that cannot be autolinked yet can be added manually here, for example: + packages.add(new GeolocationPackage()); // <== add this line + return packages; +} +``` +
+ +## Migrating from the core `react-native` module +This module was created when the Geolocation was split out from the core of React Native. As a browser polyfill, this API was available through the `navigator.geolocation` global - you didn't need to import it. To migrate to this module you need to follow the installation instructions above and change following code: + +```javascript +navigator.geolocation.setRNConfiguration(config); +``` + +to: + +```javascript +import Geolocation from '@react-native-community/geolocation'; + +Geolocation.setRNConfiguration(config); +``` + +If you need to have geolocation API aligned with the browser (cross-platform apps), or want to support backward compatibility, please consider adding following lines at the root level, for example at the top of your App.js file (only for [react native](https://reactnative.dev/docs/platform-specific-code.html#native-specific-extensions-ie-sharing-code-with-nodejs-and-web)): + +```javascript +navigator.geolocation = require('@react-native-community/geolocation'); +``` + +## Usage + +### Example + +```javascript +import Geolocation from '@react-native-community/geolocation'; + +Geolocation.getCurrentPosition(info => console.log(info)); +``` + +Check out the [example project](example) for more examples. + +## Methods + +### Summary + +* [`setRNConfiguration`](#setrnconfiguration) +* [`requestAuthorization`](#requestauthorization) +* [`getCurrentPosition`](#getcurrentposition) +* [`watchPosition`](#watchposition) +* [`clearWatch`](#clearwatch) +* [`stopObserving`](#stopobserving) + +--- + +### Details + +#### `setRNConfiguration()` + +Sets configuration options that will be used in all location requests. + + +```ts +Geolocation.setRNConfiguration( + config: { + skipPermissionRequests: boolean; + authorizationLevel?: 'always' | 'whenInUse' | 'auto'; + enableBackgroundLocationUpdates?: boolean; + locationProvider?: 'playServices' | 'android' | 'auto'; + } +) => void +``` + +Supported options: + +* `skipPermissionRequests` (boolean) - Defaults to `false`. If `true`, you must request permissions before using Geolocation APIs. +* `authorizationLevel` (string, iOS-only) - Either `"whenInUse"`, `"always"`, or `"auto"`. Changes whether the user will be asked to give "always" or "when in use" location services permission. Any other value or `auto` will use the default behaviour, where the permission level is based on the contents of your `Info.plist`. +* `enableBackgroundLocationUpdates` (boolean, iOS-only) - When using `skipPermissionRequests`, toggle wether to automatically enableBackgroundLocationUpdates. Defaults to true. +* `locationProvider` (string, Android-only) - Either `"playServices"`, `"android"`, or `"auto"`. Determines wether to use `Google’s Location Services API` or `Android’s Location API`. The `"auto"` mode defaults to `android`, and falls back to Android's Location API if play services aren't available. + +--- + +#### `requestAuthorization()` + +Request suitable Location permission. + +```ts + Geolocation.requestAuthorization( + success?: () => void, + error?: ( + error: { + code: number; + message: string; + PERMISSION_DENIED: number; + POSITION_UNAVAILABLE: number; + TIMEOUT: number; + } + ) => void + ) +``` + +On iOS if NSLocationAlwaysUsageDescription is set, it will request Always authorization, although if NSLocationWhenInUseUsageDescription is set, it will request InUse authorization. + +--- + +#### `getCurrentPosition()` + +Invokes the success callback once with the latest location info. + +```ts + Geolocation.getCurrentPosition( + success: ( + position: { + coords: { + latitude: number; + longitude: number; + altitude: number | null; + accuracy: number; + altitudeAccuracy: number | null; + heading: number | null; + speed: number | null; + }; + timestamp: number; + } + ) => void, + error?: ( + error: { + code: number; + message: string; + PERMISSION_DENIED: number; + POSITION_UNAVAILABLE: number; + TIMEOUT: number; + } + ) => void, + options?: { + timeout?: number; + maximumAge?: number; + enableHighAccuracy?: boolean; + } + ) +``` + + +Supported options: + +* `timeout` (ms) - Is a positive value representing the maximum length of time (in milliseconds) the device is allowed to take in order to return a position. Defaults to 10 minutes. +* `maximumAge` (ms) - Is a positive value indicating the maximum age in milliseconds of a possible cached position that is acceptable to return. If set to 0, it means that the device cannot use a cached position and must attempt to retrieve the real current position. If set to Infinity the device will always return a cached position regardless of its age. Defaults to INFINITY. +* `enableHighAccuracy` (bool) - Is a boolean representing if to use GPS or not. If set to true, a GPS position will be requested. If set to false, a WIFI location will be requested. + +--- + +#### `watchPosition()` + +Invokes the success callback whenever the location changes. Returns a `watchId` (number). + +```ts + Geolocation.watchPosition( + success: ( + position: { + coords: { + latitude: number; + longitude: number; + altitude: number | null; + accuracy: number; + altitudeAccuracy: number | null; + heading: number | null; + speed: number | null; + }; + timestamp: number; + } + ) => void, + error?: ( + error: { + code: number; + message: string; + PERMISSION_DENIED: number; + POSITION_UNAVAILABLE: number; + TIMEOUT: number; + } + ) => void, + options?: { + interval?: number; + fastestInterval?: number; + timeout?: number; + maximumAge?: number; + enableHighAccuracy?: boolean; + distanceFilter?: number; + useSignificantChanges?: boolean; + } + ) => number +``` + +Supported options: + +* `interval` (ms) -- (Android only) The rate in milliseconds at which your app prefers to receive location updates. Note that the location updates may be somewhat faster or slower than this rate to optimize for battery usage, or there may be no updates at all (if the device has no connectivity, for example). +* `fastestInterval` (ms) -- (Android only) The fastest rate in milliseconds at which your app can handle location updates. Unless your app benefits from receiving updates more quickly than the rate specified in `interval`, you don't need to set it. +* `timeout` (ms) - Is a positive value representing the maximum length of time (in milliseconds) the device is allowed to take in order to return a position. Defaults to 10 minutes. +* `maximumAge` (ms) - Is a positive value indicating the maximum age in milliseconds of a possible cached position that is acceptable to return. If set to 0, it means that the device cannot use a cached position and must attempt to retrieve the real current position. If set to Infinity the device will always return a cached position regardless of its age. Defaults to INFINITY. +* `enableHighAccuracy` (bool) - Is a boolean representing if to use GPS or not. If set to true, a GPS position will be requested. If set to false, a WIFI location will be requested. +* `distanceFilter` (m) - The minimum distance from the previous location to exceed before returning a new location. Set to 0 to not filter locations. Defaults to 100m. +* `useSignificantChanges` (bool) - Uses the battery-efficient native significant changes APIs to return locations. Locations will only be returned when the device detects a significant distance has been breached. Defaults to FALSE. + +--- + +#### `clearWatch()` + +Clears watch observer by id returned by `watchPosition()` + +```ts +Geolocation.clearWatch(watchID: number); +``` + +## Maintainers + +This module is developed and maintained by [michalchudziak](https://github.com/michalchudziak). + +I owe a lot to the fantastic React & React Native community, and I contribute back with my free time 👨🏼‍💼💻 so if you like the project, please star it ⭐️! + +If you need any help with this module, or anything else, feel free to reach out to me! I provide boutique consultancy services for React & React Native. Just visit my [website](https://michalchudziak.dev), or send me an email at [hello@michalchudziak.dev](mailto:hello@michalchudziak.dev) 🙏🏻 + +### Co-maintainers needed + +Due to personal commitments, recently I am unable to dedicate the necessary time to maintain this library as it deserves. I’m looking for passionate contributors to help keep the project alive and thriving. If you're interested in contributing or taking on a maintainer role, please reach out [hello@michalchudziak.dev](mailto:hello@michalchudziak.dev) — your support would mean a lot! + +## Contributors + +This module was extracted from `react-native` core. Please refer to https://github.com/react-native-community/react-native-geolocation/graphs/contributors for the complete list of contributors. + +## License +The library is released under the MIT licence. For more information see `LICENSE`. diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/NativeRNCGeolocation.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/NativeRNCGeolocation.ts new file mode 100644 index 0000000..8f6ab11 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/NativeRNCGeolocation.ts @@ -0,0 +1,65 @@ +import type { TurboModule } from 'react-native'; +import { TurboModuleRegistry } from 'react-native'; + +export type GeolocationConfiguration = { + skipPermissionRequests: boolean; + authorizationLevel?: 'always' | 'whenInUse' | 'auto'; + locationProvider?: 'playServices' | 'android' | 'auto'; + enableBackgroundLocationUpdates?: boolean; +}; + +export type GeolocationOptions = { + timeout?: number; + maximumAge?: number; + enableHighAccuracy?: boolean; + distanceFilter?: number; + useSignificantChanges?: boolean; + interval?: number; + fastestInterval?: number; +}; + +export type GeolocationResponse = { + coords: { + latitude: number; + longitude: number; + altitude: number | null; + accuracy: number; + altitudeAccuracy: number | null; + heading: number | null; + speed: number | null; + }; + timestamp: number; +}; + +export type GeolocationError = { + code: number; + message: string; + PERMISSION_DENIED: number; + POSITION_UNAVAILABLE: number; + TIMEOUT: number; +}; + +export interface Spec extends TurboModule { + setConfiguration(config: { + skipPermissionRequests: boolean; + authorizationLevel?: string; + enableBackgroundLocationUpdates?: string; + }): void; + requestAuthorization( + success: () => void, + error: (error: GeolocationError) => void + ): void; + getCurrentPosition( + options: GeolocationOptions, + position: (position: GeolocationResponse) => void, + error: (error: GeolocationError) => void + ): void; + startObserving(options: GeolocationOptions): void; + stopObserving(): void; + + // RCTEventEmitter + addListener: (eventName: string) => void; + removeListeners: (count: number) => void; +} + +export default TurboModuleRegistry.getEnforcing('RNCGeolocation'); diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/implementation.native.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/implementation.native.ts new file mode 100644 index 0000000..53b3c76 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/implementation.native.ts @@ -0,0 +1,153 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import type { EmitterSubscription } from 'react-native'; + +import GeolocationNativeInterface from './nativeInterface'; + +import invariant from 'invariant'; +import { logError, warning } from './utils'; + +import type { + GeolocationOptions, + GeolocationConfiguration, + GeolocationResponse, + GeolocationError, +} from './NativeRNCGeolocation'; + +const { RNCGeolocation, GeolocationEventEmitter } = GeolocationNativeInterface; + +let subscriptions: { + [key: number]: [EmitterSubscription, EmitterSubscription | null]; +} = {}; +let updatesEnabled = false; + +/** + * The Geolocation API extends the web spec: + * https://developer.mozilla.org/en-US/docs/Web/API/Geolocation + * + * See https://facebook.github.io/react-native/docs/geolocation.html + */ + +/* + * Sets configuration options that will be used in all location requests. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#setrnconfiguration + * + */ +export function setRNConfiguration(config: GeolocationConfiguration) { + RNCGeolocation.setConfiguration({ + ...config, + enableBackgroundLocationUpdates: + config?.enableBackgroundLocationUpdates ?? true, + authorizationLevel: + config?.authorizationLevel === 'auto' + ? undefined + : config.authorizationLevel, + locationProvider: + config?.locationProvider === 'auto' ? undefined : config.locationProvider, + }); +} + +/* + * Requests Location permissions based on the key configured on pList. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#requestauthorization + */ +export function requestAuthorization( + success: () => void = () => {}, + error: (error: GeolocationError) => void = logError +) { + RNCGeolocation.requestAuthorization(success, error); +} + +/* + * Invokes the success callback once with the latest location info. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#getcurrentposition + */ +export async function getCurrentPosition( + success: (position: GeolocationResponse) => void, + error: (error: GeolocationError) => void = logError, + options: GeolocationOptions = {} +) { + invariant( + typeof success === 'function', + 'Must provide a valid geo_success callback.' + ); + // Permission checks/requests are done on the native side + RNCGeolocation.getCurrentPosition(options, success, error); +} + +/* + * Invokes the success callback whenever the location changes. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#watchposition + */ +export function watchPosition( + success: (position: GeolocationResponse) => void, + error: (error: GeolocationError) => void = logError, + options: GeolocationOptions = {} +): number { + if (!updatesEnabled) { + RNCGeolocation.startObserving(options); + updatesEnabled = true; + } + const watchID = Object.keys(subscriptions).length + 1000; + subscriptions[watchID] = [ + GeolocationEventEmitter.addListener('geolocationDidChange', success), + error + ? GeolocationEventEmitter.addListener('geolocationError', error) + : null, + ]; + return watchID; +} + +/* + * Unsubscribes the watcher with the given watchID. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#clearwatch + */ +export function clearWatch(watchID: number) { + const sub = subscriptions[watchID]; + if (!sub) { + // Silently exit when the watchID is invalid or already cleared + // This is consistent with timers + return; + } + + sub[0].remove(); + // array element refinements not yet enabled in Flow + const sub1 = sub[1]; + sub1 && sub1.remove(); + + delete subscriptions[watchID]; + let noWatchers = Object.keys(subscriptions).length === 0; + if (noWatchers) { + stopObserving(); + } +} + +/* + * Stops observing for device location changes and removes all registered listeners. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#stopobserving + */ +export function stopObserving() { + if (updatesEnabled) { + RNCGeolocation.stopObserving(); + updatesEnabled = false; + Object.values(subscriptions).forEach(([sub, sub1]) => { + warning(false, 'Called stopObserving with existing subscriptions.'); + sub.remove(); + sub1 && sub1.remove(); + }); + subscriptions = {}; + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/implementation.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/implementation.ts new file mode 100644 index 0000000..468d598 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/implementation.ts @@ -0,0 +1,65 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import type { + GeolocationOptions, + GeolocationConfiguration, + GeolocationResponse, + GeolocationError, +} from './NativeRNCGeolocation'; + +export function setRNConfiguration(_config: GeolocationConfiguration) { + throw new Error('setRNConfiguration is not supported by the browser'); +} + +export function requestAuthorization( + _success?: () => void, + _error?: (error: GeolocationError) => void +) { + throw new Error('requestAuthorization is not supported by the browser'); +} + +export async function getCurrentPosition( + success: (position: GeolocationResponse) => void, + error?: (error: GeolocationError) => void, + options?: GeolocationOptions +) { + if (typeof success !== 'function') { + throw new Error('success callback must be a function'); + } else if (!navigator || !navigator.geolocation) { + console.error('Navigator is undefined'); + return; + } + navigator.geolocation.getCurrentPosition(success, error, options); +} + +export function watchPosition( + success: (position: GeolocationResponse) => void, + error?: (error: GeolocationError) => void, + options?: GeolocationOptions +): number { + if (typeof success !== 'function') { + throw new Error('success callback must be a function'); + } else if (!navigator || !navigator.geolocation) { + throw new Error('Navigator is undefined'); + } + return navigator.geolocation.watchPosition(success, error, options); +} + +export function clearWatch(watchID: number) { + if (!navigator || !navigator.geolocation) { + console.error('Navigator is undefined'); + return; + } + navigator.geolocation.clearWatch(watchID); +} + +export function stopObserving() { + throw new Error('stopObserving is not supported by the browser'); +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/index.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/index.ts new file mode 100644 index 0000000..9599da9 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/index.ts @@ -0,0 +1,82 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import * as GeolocationModule from './implementation'; + +import type { + GeolocationOptions, + GeolocationConfiguration, + GeolocationResponse, + GeolocationError, +} from './NativeRNCGeolocation'; + +const Geolocation = { + /** + * Invokes the success callback once with the latest location info. Supported + * options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool) + * On Android, this can return almost immediately if the location is cached or + * request an update, which might take a while. + */ + getCurrentPosition: function ( + success: (position: GeolocationResponse) => void, + error?: (error: GeolocationError) => void, + options?: GeolocationOptions + ) { + GeolocationModule.getCurrentPosition(success, error, options); + }, + + /** + * Invokes the success callback whenever the location changes. Supported + * options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool), distanceFilter(m) + */ + watchPosition: function ( + success: (position: GeolocationResponse) => void, + error?: (error: GeolocationError) => void, + options?: GeolocationOptions + ): number { + return GeolocationModule.watchPosition(success, error, options); + }, + + /** + * Clears the watch started by `watchPosition`. + */ + clearWatch: function (watchID: number) { + GeolocationModule.clearWatch(watchID); + }, + + /** + * @deprecated `ReactNativeGeolocation.stopObserving` is deprecated. Use `ReactNativeGeolocation.clearWatch` instead. + */ + stopObserving: function () { + console.warn( + '`ReactNativeGeolocation.stopObserving` is deprecated and should not be used. Use `ReactNativeGeolocation.clearWatch` instead.' + ); + GeolocationModule.stopObserving(); + }, + + requestAuthorization: function ( + success?: () => void, + error?: (error: GeolocationError) => void + ) { + GeolocationModule.requestAuthorization(success, error); + }, + + setRNConfiguration: function (config: GeolocationConfiguration) { + GeolocationModule.setRNConfiguration(config); + }, +}; + +export type { + GeolocationOptions, + GeolocationConfiguration, + GeolocationResponse, + GeolocationError, +}; + +export default Geolocation; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/nativeInterface.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/nativeInterface.ts new file mode 100644 index 0000000..df014f6 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/nativeInterface.ts @@ -0,0 +1,50 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import { NativeEventEmitter, NativeModules, Platform } from 'react-native'; + +const LINKING_ERROR = + `The package '@react-native-community/geolocation' doesn't seem to be linked. Make sure: \n\n` + + Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) + + '- You rebuilt the app after installing the package\n' + + '- You are not using Expo managed workflow\n'; + +// @ts-expect-error +const isTurboModuleEnabled = global.__turboModuleProxy != null; + +const RNCGeolocationModule = isTurboModuleEnabled + ? require('./NativeRNCGeolocation').default + : NativeModules.RNCGeolocation; + +const RNCGeolocation = RNCGeolocationModule + ? RNCGeolocationModule + : new Proxy( + {}, + { + get() { + throw new Error(LINKING_ERROR); + }, + } + ); + +/** + * We export the native interface in this way to give easy shared access to it between the + * JavaScript code and the tests + */ +let nativeEventEmitter: NativeEventEmitter | null = null; + +export default { + RNCGeolocation, + get GeolocationEventEmitter() { + if (!nativeEventEmitter) { + nativeEventEmitter = new NativeEventEmitter(RNCGeolocation); + } + return nativeEventEmitter; + }, +}; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/utils.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/utils.ts new file mode 100644 index 0000000..fac0cb7 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/js/utils.ts @@ -0,0 +1,55 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +'use strict'; + +/** + * Small utility that can be used as an error handler. You cannot just pass + * `console.error` as a failure callback - it's not properly bound. If passes an + * `Error` object, it will print the message and stack. + */ +export const logError = function (...args: unknown[]) { + if (args.length === 1 && args[0] instanceof Error) { + const err = args[0]; + console.error('Error: "' + err.message + '". Stack:\n' + err.stack); + } else { + console.error.apply(console, args); + } +}; + +/** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ +export const warning = __DEV__ + ? function (condition: boolean, format: string, ...args: any[]) { + if (format === undefined) { + throw new Error( + '`warning(condition, format, ...args)` requires a warning ' + + 'message argument' + ); + } + if (!condition) { + var argIndex = 0; + var message = + 'Warning: ' + format.replace(/%s/g, () => args[argIndex++]); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + } + } + : () => {}; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/NativeRNCGeolocation.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/NativeRNCGeolocation.js new file mode 100644 index 0000000..f24b3ad --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/NativeRNCGeolocation.js @@ -0,0 +1,9 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _reactNative = require("react-native"); +var _default = exports.default = _reactNative.TurboModuleRegistry.getEnforcing('RNCGeolocation'); +//# sourceMappingURL=NativeRNCGeolocation.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/NativeRNCGeolocation.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/NativeRNCGeolocation.js.map new file mode 100644 index 0000000..cfab74b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/NativeRNCGeolocation.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../js","sources":["NativeRNCGeolocation.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GA+DpCC,gCAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.js new file mode 100644 index 0000000..f29d0ed --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.js @@ -0,0 +1,54 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.clearWatch = clearWatch; +exports.getCurrentPosition = getCurrentPosition; +exports.requestAuthorization = requestAuthorization; +exports.setRNConfiguration = setRNConfiguration; +exports.stopObserving = stopObserving; +exports.watchPosition = watchPosition; +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +function setRNConfiguration(_config) { + throw new Error('setRNConfiguration is not supported by the browser'); +} +function requestAuthorization(_success, _error) { + throw new Error('requestAuthorization is not supported by the browser'); +} +async function getCurrentPosition(success, error, options) { + if (typeof success !== 'function') { + throw new Error('success callback must be a function'); + } else if (!navigator || !navigator.geolocation) { + console.error('Navigator is undefined'); + return; + } + navigator.geolocation.getCurrentPosition(success, error, options); +} +function watchPosition(success, error, options) { + if (typeof success !== 'function') { + throw new Error('success callback must be a function'); + } else if (!navigator || !navigator.geolocation) { + throw new Error('Navigator is undefined'); + } + return navigator.geolocation.watchPosition(success, error, options); +} +function clearWatch(watchID) { + if (!navigator || !navigator.geolocation) { + console.error('Navigator is undefined'); + return; + } + navigator.geolocation.clearWatch(watchID); +} +function stopObserving() { + throw new Error('stopObserving is not supported by the browser'); +} +//# sourceMappingURL=implementation.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.js.map new file mode 100644 index 0000000..eb1afab --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.js.map @@ -0,0 +1 @@ +{"version":3,"names":["setRNConfiguration","_config","Error","requestAuthorization","_success","_error","getCurrentPosition","success","error","options","navigator","geolocation","console","watchPosition","clearWatch","watchID","stopObserving"],"sourceRoot":"../../js","sources":["implementation.ts"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASO,SAASA,kBAAkBA,CAACC,OAAiC,EAAE;EACpE,MAAM,IAAIC,KAAK,CAAC,oDAAoD,CAAC;AACvE;AAEO,SAASC,oBAAoBA,CAClCC,QAAqB,EACrBC,MAA0C,EAC1C;EACA,MAAM,IAAIH,KAAK,CAAC,sDAAsD,CAAC;AACzE;AAEO,eAAeI,kBAAkBA,CACtCC,OAAgD,EAChDC,KAAyC,EACzCC,OAA4B,EAC5B;EACA,IAAI,OAAOF,OAAO,KAAK,UAAU,EAAE;IACjC,MAAM,IAAIL,KAAK,CAAC,qCAAqC,CAAC;EACxD,CAAC,MAAM,IAAI,CAACQ,SAAS,IAAI,CAACA,SAAS,CAACC,WAAW,EAAE;IAC/CC,OAAO,CAACJ,KAAK,CAAC,wBAAwB,CAAC;IACvC;EACF;EACAE,SAAS,CAACC,WAAW,CAACL,kBAAkB,CAACC,OAAO,EAAEC,KAAK,EAAEC,OAAO,CAAC;AACnE;AAEO,SAASI,aAAaA,CAC3BN,OAAgD,EAChDC,KAAyC,EACzCC,OAA4B,EACpB;EACR,IAAI,OAAOF,OAAO,KAAK,UAAU,EAAE;IACjC,MAAM,IAAIL,KAAK,CAAC,qCAAqC,CAAC;EACxD,CAAC,MAAM,IAAI,CAACQ,SAAS,IAAI,CAACA,SAAS,CAACC,WAAW,EAAE;IAC/C,MAAM,IAAIT,KAAK,CAAC,wBAAwB,CAAC;EAC3C;EACA,OAAOQ,SAAS,CAACC,WAAW,CAACE,aAAa,CAACN,OAAO,EAAEC,KAAK,EAAEC,OAAO,CAAC;AACrE;AAEO,SAASK,UAAUA,CAACC,OAAe,EAAE;EAC1C,IAAI,CAACL,SAAS,IAAI,CAACA,SAAS,CAACC,WAAW,EAAE;IACxCC,OAAO,CAACJ,KAAK,CAAC,wBAAwB,CAAC;IACvC;EACF;EACAE,SAAS,CAACC,WAAW,CAACG,UAAU,CAACC,OAAO,CAAC;AAC3C;AAEO,SAASC,aAAaA,CAAA,EAAG;EAC9B,MAAM,IAAId,KAAK,CAAC,+CAA+C,CAAC;AAClE","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.native.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.native.js new file mode 100644 index 0000000..a7e5336 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.native.js @@ -0,0 +1,129 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.clearWatch = clearWatch; +exports.getCurrentPosition = getCurrentPosition; +exports.requestAuthorization = requestAuthorization; +exports.setRNConfiguration = setRNConfiguration; +exports.stopObserving = stopObserving; +exports.watchPosition = watchPosition; +var _nativeInterface = _interopRequireDefault(require("./nativeInterface")); +var _invariant = _interopRequireDefault(require("invariant")); +var _utils = require("./utils"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +const { + RNCGeolocation, + GeolocationEventEmitter +} = _nativeInterface.default; +let subscriptions = {}; +let updatesEnabled = false; + +/** + * The Geolocation API extends the web spec: + * https://developer.mozilla.org/en-US/docs/Web/API/Geolocation + * + * See https://facebook.github.io/react-native/docs/geolocation.html + */ + +/* + * Sets configuration options that will be used in all location requests. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#setrnconfiguration + * + */ +function setRNConfiguration(config) { + RNCGeolocation.setConfiguration({ + ...config, + enableBackgroundLocationUpdates: config?.enableBackgroundLocationUpdates ?? true, + authorizationLevel: config?.authorizationLevel === 'auto' ? undefined : config.authorizationLevel, + locationProvider: config?.locationProvider === 'auto' ? undefined : config.locationProvider + }); +} + +/* + * Requests Location permissions based on the key configured on pList. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#requestauthorization + */ +function requestAuthorization(success = () => {}, error = _utils.logError) { + RNCGeolocation.requestAuthorization(success, error); +} + +/* + * Invokes the success callback once with the latest location info. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#getcurrentposition + */ +async function getCurrentPosition(success, error = _utils.logError, options = {}) { + (0, _invariant.default)(typeof success === 'function', 'Must provide a valid geo_success callback.'); + // Permission checks/requests are done on the native side + RNCGeolocation.getCurrentPosition(options, success, error); +} + +/* + * Invokes the success callback whenever the location changes. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#watchposition + */ +function watchPosition(success, error = _utils.logError, options = {}) { + if (!updatesEnabled) { + RNCGeolocation.startObserving(options); + updatesEnabled = true; + } + const watchID = Object.keys(subscriptions).length + 1000; + subscriptions[watchID] = [GeolocationEventEmitter.addListener('geolocationDidChange', success), error ? GeolocationEventEmitter.addListener('geolocationError', error) : null]; + return watchID; +} + +/* + * Unsubscribes the watcher with the given watchID. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#clearwatch + */ +function clearWatch(watchID) { + const sub = subscriptions[watchID]; + if (!sub) { + // Silently exit when the watchID is invalid or already cleared + // This is consistent with timers + return; + } + sub[0].remove(); + // array element refinements not yet enabled in Flow + const sub1 = sub[1]; + sub1 && sub1.remove(); + delete subscriptions[watchID]; + let noWatchers = Object.keys(subscriptions).length === 0; + if (noWatchers) { + stopObserving(); + } +} + +/* + * Stops observing for device location changes and removes all registered listeners. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#stopobserving + */ +function stopObserving() { + if (updatesEnabled) { + RNCGeolocation.stopObserving(); + updatesEnabled = false; + Object.values(subscriptions).forEach(([sub, sub1]) => { + (0, _utils.warning)(false, 'Called stopObserving with existing subscriptions.'); + sub.remove(); + sub1 && sub1.remove(); + }); + subscriptions = {}; + } +} +//# sourceMappingURL=implementation.native.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.native.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.native.js.map new file mode 100644 index 0000000..16f398f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/implementation.native.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_nativeInterface","_interopRequireDefault","require","_invariant","_utils","e","__esModule","default","RNCGeolocation","GeolocationEventEmitter","GeolocationNativeInterface","subscriptions","updatesEnabled","setRNConfiguration","config","setConfiguration","enableBackgroundLocationUpdates","authorizationLevel","undefined","locationProvider","requestAuthorization","success","error","logError","getCurrentPosition","options","invariant","watchPosition","startObserving","watchID","Object","keys","length","addListener","clearWatch","sub","remove","sub1","noWatchers","stopObserving","values","forEach","warning"],"sourceRoot":"../../js","sources":["implementation.native.ts"],"mappings":";;;;;;;;;;;AAWA,IAAAA,gBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAA4C,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAd5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgBA,MAAM;EAAEG,cAAc;EAAEC;AAAwB,CAAC,GAAGC,wBAA0B;AAE9E,IAAIC,aAEH,GAAG,CAAC,CAAC;AACN,IAAIC,cAAc,GAAG,KAAK;;AAE1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAACC,MAAgC,EAAE;EACnEN,cAAc,CAACO,gBAAgB,CAAC;IAC9B,GAAGD,MAAM;IACTE,+BAA+B,EAC7BF,MAAM,EAAEE,+BAA+B,IAAI,IAAI;IACjDC,kBAAkB,EAChBH,MAAM,EAAEG,kBAAkB,KAAK,MAAM,GACjCC,SAAS,GACTJ,MAAM,CAACG,kBAAkB;IAC/BE,gBAAgB,EACdL,MAAM,EAAEK,gBAAgB,KAAK,MAAM,GAAGD,SAAS,GAAGJ,MAAM,CAACK;EAC7D,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,oBAAoBA,CAClCC,OAAmB,GAAGA,CAAA,KAAM,CAAC,CAAC,EAC9BC,KAAwC,GAAGC,eAAQ,EACnD;EACAf,cAAc,CAACY,oBAAoB,CAACC,OAAO,EAAEC,KAAK,CAAC;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACO,eAAeE,kBAAkBA,CACtCH,OAAgD,EAChDC,KAAwC,GAAGC,eAAQ,EACnDE,OAA2B,GAAG,CAAC,CAAC,EAChC;EACA,IAAAC,kBAAS,EACP,OAAOL,OAAO,KAAK,UAAU,EAC7B,4CACF,CAAC;EACD;EACAb,cAAc,CAACgB,kBAAkB,CAACC,OAAO,EAAEJ,OAAO,EAAEC,KAAK,CAAC;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASK,aAAaA,CAC3BN,OAAgD,EAChDC,KAAwC,GAAGC,eAAQ,EACnDE,OAA2B,GAAG,CAAC,CAAC,EACxB;EACR,IAAI,CAACb,cAAc,EAAE;IACnBJ,cAAc,CAACoB,cAAc,CAACH,OAAO,CAAC;IACtCb,cAAc,GAAG,IAAI;EACvB;EACA,MAAMiB,OAAO,GAAGC,MAAM,CAACC,IAAI,CAACpB,aAAa,CAAC,CAACqB,MAAM,GAAG,IAAI;EACxDrB,aAAa,CAACkB,OAAO,CAAC,GAAG,CACvBpB,uBAAuB,CAACwB,WAAW,CAAC,sBAAsB,EAAEZ,OAAO,CAAC,EACpEC,KAAK,GACDb,uBAAuB,CAACwB,WAAW,CAAC,kBAAkB,EAAEX,KAAK,CAAC,GAC9D,IAAI,CACT;EACD,OAAOO,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASK,UAAUA,CAACL,OAAe,EAAE;EAC1C,MAAMM,GAAG,GAAGxB,aAAa,CAACkB,OAAO,CAAC;EAClC,IAAI,CAACM,GAAG,EAAE;IACR;IACA;IACA;EACF;EAEAA,GAAG,CAAC,CAAC,CAAC,CAACC,MAAM,CAAC,CAAC;EACf;EACA,MAAMC,IAAI,GAAGF,GAAG,CAAC,CAAC,CAAC;EACnBE,IAAI,IAAIA,IAAI,CAACD,MAAM,CAAC,CAAC;EAErB,OAAOzB,aAAa,CAACkB,OAAO,CAAC;EAC7B,IAAIS,UAAU,GAAGR,MAAM,CAACC,IAAI,CAACpB,aAAa,CAAC,CAACqB,MAAM,KAAK,CAAC;EACxD,IAAIM,UAAU,EAAE;IACdC,aAAa,CAAC,CAAC;EACjB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASA,aAAaA,CAAA,EAAG;EAC9B,IAAI3B,cAAc,EAAE;IAClBJ,cAAc,CAAC+B,aAAa,CAAC,CAAC;IAC9B3B,cAAc,GAAG,KAAK;IACtBkB,MAAM,CAACU,MAAM,CAAC7B,aAAa,CAAC,CAAC8B,OAAO,CAAC,CAAC,CAACN,GAAG,EAAEE,IAAI,CAAC,KAAK;MACpD,IAAAK,cAAO,EAAC,KAAK,EAAE,mDAAmD,CAAC;MACnEP,GAAG,CAACC,MAAM,CAAC,CAAC;MACZC,IAAI,IAAIA,IAAI,CAACD,MAAM,CAAC,CAAC;IACvB,CAAC,CAAC;IACFzB,aAAa,GAAG,CAAC,CAAC;EACpB;AACF","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/index.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/index.js new file mode 100644 index 0000000..814f8b3 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/index.js @@ -0,0 +1,57 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var GeolocationModule = _interopRequireWildcard(require("./implementation")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +const Geolocation = { + /** + * Invokes the success callback once with the latest location info. Supported + * options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool) + * On Android, this can return almost immediately if the location is cached or + * request an update, which might take a while. + */ + getCurrentPosition: function (success, error, options) { + GeolocationModule.getCurrentPosition(success, error, options); + }, + /** + * Invokes the success callback whenever the location changes. Supported + * options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool), distanceFilter(m) + */ + watchPosition: function (success, error, options) { + return GeolocationModule.watchPosition(success, error, options); + }, + /** + * Clears the watch started by `watchPosition`. + */ + clearWatch: function (watchID) { + GeolocationModule.clearWatch(watchID); + }, + /** + * @deprecated `ReactNativeGeolocation.stopObserving` is deprecated. Use `ReactNativeGeolocation.clearWatch` instead. + */ + stopObserving: function () { + console.warn('`ReactNativeGeolocation.stopObserving` is deprecated and should not be used. Use `ReactNativeGeolocation.clearWatch` instead.'); + GeolocationModule.stopObserving(); + }, + requestAuthorization: function (success, error) { + GeolocationModule.requestAuthorization(success, error); + }, + setRNConfiguration: function (config) { + GeolocationModule.setRNConfiguration(config); + } +}; +var _default = exports.default = Geolocation; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/index.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/index.js.map new file mode 100644 index 0000000..871720d --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["GeolocationModule","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Geolocation","getCurrentPosition","success","error","options","watchPosition","clearWatch","watchID","stopObserving","console","warn","requestAuthorization","setRNConfiguration","config","_default","exports"],"sourceRoot":"../../js","sources":["index.ts"],"mappings":";;;;;;AASA,IAAAA,iBAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAsD,SAAAC,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAH,wBAAAG,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AATtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAWA,MAAMW,WAAW,GAAG;EAClB;AACF;AACA;AACA;AACA;AACA;EACEC,kBAAkB,EAAE,SAAAA,CAClBC,OAAgD,EAChDC,KAAyC,EACzCC,OAA4B,EAC5B;IACA3B,iBAAiB,CAACwB,kBAAkB,CAACC,OAAO,EAAEC,KAAK,EAAEC,OAAO,CAAC;EAC/D,CAAC;EAED;AACF;AACA;AACA;EACEC,aAAa,EAAE,SAAAA,CACbH,OAAgD,EAChDC,KAAyC,EACzCC,OAA4B,EACpB;IACR,OAAO3B,iBAAiB,CAAC4B,aAAa,CAACH,OAAO,EAAEC,KAAK,EAAEC,OAAO,CAAC;EACjE,CAAC;EAED;AACF;AACA;EACEE,UAAU,EAAE,SAAAA,CAAUC,OAAe,EAAE;IACrC9B,iBAAiB,CAAC6B,UAAU,CAACC,OAAO,CAAC;EACvC,CAAC;EAED;AACF;AACA;EACEC,aAAa,EAAE,SAAAA,CAAA,EAAY;IACzBC,OAAO,CAACC,IAAI,CACV,+HACF,CAAC;IACDjC,iBAAiB,CAAC+B,aAAa,CAAC,CAAC;EACnC,CAAC;EAEDG,oBAAoB,EAAE,SAAAA,CACpBT,OAAoB,EACpBC,KAAyC,EACzC;IACA1B,iBAAiB,CAACkC,oBAAoB,CAACT,OAAO,EAAEC,KAAK,CAAC;EACxD,CAAC;EAEDS,kBAAkB,EAAE,SAAAA,CAAUC,MAAgC,EAAE;IAC9DpC,iBAAiB,CAACmC,kBAAkB,CAACC,MAAM,CAAC;EAC9C;AACF,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAA7B,OAAA,GASac,WAAW","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/nativeInterface.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/nativeInterface.js new file mode 100644 index 0000000..06edf50 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/nativeInterface.js @@ -0,0 +1,45 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _reactNative = require("react-native"); +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +const LINKING_ERROR = `The package '@react-native-community/geolocation' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({ + ios: "- You have run 'pod install'\n", + default: '' +}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo managed workflow\n'; + +// @ts-expect-error +const isTurboModuleEnabled = global.__turboModuleProxy != null; +const RNCGeolocationModule = isTurboModuleEnabled ? require('./NativeRNCGeolocation').default : _reactNative.NativeModules.RNCGeolocation; +const RNCGeolocation = RNCGeolocationModule ? RNCGeolocationModule : new Proxy({}, { + get() { + throw new Error(LINKING_ERROR); + } +}); + +/** + * We export the native interface in this way to give easy shared access to it between the + * JavaScript code and the tests + */ +let nativeEventEmitter = null; +var _default = exports.default = { + RNCGeolocation, + get GeolocationEventEmitter() { + if (!nativeEventEmitter) { + nativeEventEmitter = new _reactNative.NativeEventEmitter(RNCGeolocation); + } + return nativeEventEmitter; + } +}; +//# sourceMappingURL=nativeInterface.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/nativeInterface.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/nativeInterface.js.map new file mode 100644 index 0000000..86a868c --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/nativeInterface.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","isTurboModuleEnabled","global","__turboModuleProxy","RNCGeolocationModule","NativeModules","RNCGeolocation","Proxy","get","Error","nativeEventEmitter","_default","exports","GeolocationEventEmitter","NativeEventEmitter"],"sourceRoot":"../../js","sources":["nativeInterface.ts"],"mappings":";;;;;;AASA,IAAAA,YAAA,GAAAC,OAAA;AATA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMC,aAAa,GACjB,8FAA8F,GAC9FC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,6CAA6C;;AAE/C;AACA,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,kBAAkB,IAAI,IAAI;AAE9D,MAAMC,oBAAoB,GAAGH,oBAAoB,GAC7CN,OAAO,CAAC,wBAAwB,CAAC,CAACK,OAAO,GACzCK,0BAAa,CAACC,cAAc;AAEhC,MAAMA,cAAc,GAAGF,oBAAoB,GACvCA,oBAAoB,GACpB,IAAIG,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACb,aAAa,CAAC;EAChC;AACF,CACF,CAAC;;AAEL;AACA;AACA;AACA;AACA,IAAIc,kBAA6C,GAAG,IAAI;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAZ,OAAA,GAE1C;EACbM,cAAc;EACd,IAAIO,uBAAuBA,CAAA,EAAG;IAC5B,IAAI,CAACH,kBAAkB,EAAE;MACvBA,kBAAkB,GAAG,IAAII,+BAAkB,CAACR,cAAc,CAAC;IAC7D;IACA,OAAOI,kBAAkB;EAC3B;AACF,CAAC","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/utils.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/utils.js new file mode 100644 index 0000000..530a77c --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/utils.js @@ -0,0 +1,55 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +'use strict'; + +/** + * Small utility that can be used as an error handler. You cannot just pass + * `console.error` as a failure callback - it's not properly bound. If passes an + * `Error` object, it will print the message and stack. + */ +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.warning = exports.logError = void 0; +const logError = function (...args) { + if (args.length === 1 && args[0] instanceof Error) { + const err = args[0]; + console.error('Error: "' + err.message + '". Stack:\n' + err.stack); + } else { + console.error.apply(console, args); + } +}; + +/** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ +exports.logError = logError; +const warning = exports.warning = __DEV__ ? function (condition, format, ...args) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + if (!condition) { + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, () => args[argIndex++]); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + } +} : () => {}; +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/utils.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/utils.js.map new file mode 100644 index 0000000..dbf78df --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/commonjs/utils.js.map @@ -0,0 +1 @@ +{"version":3,"names":["Object","defineProperty","exports","value","warning","logError","args","length","Error","err","console","error","message","stack","apply","__DEV__","condition","format","undefined","argIndex","replace","x"],"sourceRoot":"../../js","sources":["utils.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;;AAEZ;AACA;AACA;AACA;AACA;AAJAA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,OAAA,GAAAF,OAAA,CAAAG,QAAA;AAKO,MAAMA,QAAQ,GAAG,SAAAA,CAAU,GAAGC,IAAe,EAAE;EACpD,IAAIA,IAAI,CAACC,MAAM,KAAK,CAAC,IAAID,IAAI,CAAC,CAAC,CAAC,YAAYE,KAAK,EAAE;IACjD,MAAMC,GAAG,GAAGH,IAAI,CAAC,CAAC,CAAC;IACnBI,OAAO,CAACC,KAAK,CAAC,UAAU,GAAGF,GAAG,CAACG,OAAO,GAAG,cAAc,GAAGH,GAAG,CAACI,KAAK,CAAC;EACtE,CAAC,MAAM;IACLH,OAAO,CAACC,KAAK,CAACG,KAAK,CAACJ,OAAO,EAAEJ,IAAI,CAAC;EACpC;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AALAJ,OAAA,CAAAG,QAAA,GAAAA,QAAA;AAMO,MAAMD,OAAO,GAAAF,OAAA,CAAAE,OAAA,GAAGW,OAAO,GAC1B,UAAUC,SAAkB,EAAEC,MAAc,EAAE,GAAGX,IAAW,EAAE;EAC5D,IAAIW,MAAM,KAAKC,SAAS,EAAE;IACxB,MAAM,IAAIV,KAAK,CACb,2DAA2D,GACzD,kBACJ,CAAC;EACH;EACA,IAAI,CAACQ,SAAS,EAAE;IACd,IAAIG,QAAQ,GAAG,CAAC;IAChB,IAAIP,OAAO,GACT,WAAW,GAAGK,MAAM,CAACG,OAAO,CAAC,KAAK,EAAE,MAAMd,IAAI,CAACa,QAAQ,EAAE,CAAC,CAAC;IAC7D,IAAI,OAAOT,OAAO,KAAK,WAAW,EAAE;MAClCA,OAAO,CAACC,KAAK,CAACC,OAAO,CAAC;IACxB;IACA,IAAI;MACF;MACA;MACA;MACA,MAAM,IAAIJ,KAAK,CAACI,OAAO,CAAC;IAC1B,CAAC,CAAC,OAAOS,CAAC,EAAE,CAAC;EACf;AACF,CAAC,GACD,MAAM,CAAC,CAAC","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/NativeRNCGeolocation.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/NativeRNCGeolocation.js new file mode 100644 index 0000000..fc275cd --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/NativeRNCGeolocation.js @@ -0,0 +1,3 @@ +import { TurboModuleRegistry } from 'react-native'; +export default TurboModuleRegistry.getEnforcing('RNCGeolocation'); +//# sourceMappingURL=NativeRNCGeolocation.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/NativeRNCGeolocation.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/NativeRNCGeolocation.js.map new file mode 100644 index 0000000..365759e --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/NativeRNCGeolocation.js.map @@ -0,0 +1 @@ +{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../js","sources":["NativeRNCGeolocation.ts"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;AA+DlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,gBAAgB,CAAC","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.js new file mode 100644 index 0000000..2e0eb0e --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.js @@ -0,0 +1,43 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +export function setRNConfiguration(_config) { + throw new Error('setRNConfiguration is not supported by the browser'); +} +export function requestAuthorization(_success, _error) { + throw new Error('requestAuthorization is not supported by the browser'); +} +export async function getCurrentPosition(success, error, options) { + if (typeof success !== 'function') { + throw new Error('success callback must be a function'); + } else if (!navigator || !navigator.geolocation) { + console.error('Navigator is undefined'); + return; + } + navigator.geolocation.getCurrentPosition(success, error, options); +} +export function watchPosition(success, error, options) { + if (typeof success !== 'function') { + throw new Error('success callback must be a function'); + } else if (!navigator || !navigator.geolocation) { + throw new Error('Navigator is undefined'); + } + return navigator.geolocation.watchPosition(success, error, options); +} +export function clearWatch(watchID) { + if (!navigator || !navigator.geolocation) { + console.error('Navigator is undefined'); + return; + } + navigator.geolocation.clearWatch(watchID); +} +export function stopObserving() { + throw new Error('stopObserving is not supported by the browser'); +} +//# sourceMappingURL=implementation.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.js.map new file mode 100644 index 0000000..1588e32 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.js.map @@ -0,0 +1 @@ +{"version":3,"names":["setRNConfiguration","_config","Error","requestAuthorization","_success","_error","getCurrentPosition","success","error","options","navigator","geolocation","console","watchPosition","clearWatch","watchID","stopObserving"],"sourceRoot":"../../js","sources":["implementation.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,OAAO,SAASA,kBAAkBA,CAACC,OAAiC,EAAE;EACpE,MAAM,IAAIC,KAAK,CAAC,oDAAoD,CAAC;AACvE;AAEA,OAAO,SAASC,oBAAoBA,CAClCC,QAAqB,EACrBC,MAA0C,EAC1C;EACA,MAAM,IAAIH,KAAK,CAAC,sDAAsD,CAAC;AACzE;AAEA,OAAO,eAAeI,kBAAkBA,CACtCC,OAAgD,EAChDC,KAAyC,EACzCC,OAA4B,EAC5B;EACA,IAAI,OAAOF,OAAO,KAAK,UAAU,EAAE;IACjC,MAAM,IAAIL,KAAK,CAAC,qCAAqC,CAAC;EACxD,CAAC,MAAM,IAAI,CAACQ,SAAS,IAAI,CAACA,SAAS,CAACC,WAAW,EAAE;IAC/CC,OAAO,CAACJ,KAAK,CAAC,wBAAwB,CAAC;IACvC;EACF;EACAE,SAAS,CAACC,WAAW,CAACL,kBAAkB,CAACC,OAAO,EAAEC,KAAK,EAAEC,OAAO,CAAC;AACnE;AAEA,OAAO,SAASI,aAAaA,CAC3BN,OAAgD,EAChDC,KAAyC,EACzCC,OAA4B,EACpB;EACR,IAAI,OAAOF,OAAO,KAAK,UAAU,EAAE;IACjC,MAAM,IAAIL,KAAK,CAAC,qCAAqC,CAAC;EACxD,CAAC,MAAM,IAAI,CAACQ,SAAS,IAAI,CAACA,SAAS,CAACC,WAAW,EAAE;IAC/C,MAAM,IAAIT,KAAK,CAAC,wBAAwB,CAAC;EAC3C;EACA,OAAOQ,SAAS,CAACC,WAAW,CAACE,aAAa,CAACN,OAAO,EAAEC,KAAK,EAAEC,OAAO,CAAC;AACrE;AAEA,OAAO,SAASK,UAAUA,CAACC,OAAe,EAAE;EAC1C,IAAI,CAACL,SAAS,IAAI,CAACA,SAAS,CAACC,WAAW,EAAE;IACxCC,OAAO,CAACJ,KAAK,CAAC,wBAAwB,CAAC;IACvC;EACF;EACAE,SAAS,CAACC,WAAW,CAACG,UAAU,CAACC,OAAO,CAAC;AAC3C;AAEA,OAAO,SAASC,aAAaA,CAAA,EAAG;EAC9B,MAAM,IAAId,KAAK,CAAC,+CAA+C,CAAC;AAClE","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.native.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.native.js new file mode 100644 index 0000000..2ffe4b0 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.native.js @@ -0,0 +1,117 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import GeolocationNativeInterface from './nativeInterface'; +import invariant from 'invariant'; +import { logError, warning } from './utils'; +const { + RNCGeolocation, + GeolocationEventEmitter +} = GeolocationNativeInterface; +let subscriptions = {}; +let updatesEnabled = false; + +/** + * The Geolocation API extends the web spec: + * https://developer.mozilla.org/en-US/docs/Web/API/Geolocation + * + * See https://facebook.github.io/react-native/docs/geolocation.html + */ + +/* + * Sets configuration options that will be used in all location requests. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#setrnconfiguration + * + */ +export function setRNConfiguration(config) { + RNCGeolocation.setConfiguration({ + ...config, + enableBackgroundLocationUpdates: config?.enableBackgroundLocationUpdates ?? true, + authorizationLevel: config?.authorizationLevel === 'auto' ? undefined : config.authorizationLevel, + locationProvider: config?.locationProvider === 'auto' ? undefined : config.locationProvider + }); +} + +/* + * Requests Location permissions based on the key configured on pList. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#requestauthorization + */ +export function requestAuthorization(success = () => {}, error = logError) { + RNCGeolocation.requestAuthorization(success, error); +} + +/* + * Invokes the success callback once with the latest location info. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#getcurrentposition + */ +export async function getCurrentPosition(success, error = logError, options = {}) { + invariant(typeof success === 'function', 'Must provide a valid geo_success callback.'); + // Permission checks/requests are done on the native side + RNCGeolocation.getCurrentPosition(options, success, error); +} + +/* + * Invokes the success callback whenever the location changes. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#watchposition + */ +export function watchPosition(success, error = logError, options = {}) { + if (!updatesEnabled) { + RNCGeolocation.startObserving(options); + updatesEnabled = true; + } + const watchID = Object.keys(subscriptions).length + 1000; + subscriptions[watchID] = [GeolocationEventEmitter.addListener('geolocationDidChange', success), error ? GeolocationEventEmitter.addListener('geolocationError', error) : null]; + return watchID; +} + +/* + * Unsubscribes the watcher with the given watchID. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#clearwatch + */ +export function clearWatch(watchID) { + const sub = subscriptions[watchID]; + if (!sub) { + // Silently exit when the watchID is invalid or already cleared + // This is consistent with timers + return; + } + sub[0].remove(); + // array element refinements not yet enabled in Flow + const sub1 = sub[1]; + sub1 && sub1.remove(); + delete subscriptions[watchID]; + let noWatchers = Object.keys(subscriptions).length === 0; + if (noWatchers) { + stopObserving(); + } +} + +/* + * Stops observing for device location changes and removes all registered listeners. + * + * See https://facebook.github.io/react-native/docs/geolocation.html#stopobserving + */ +export function stopObserving() { + if (updatesEnabled) { + RNCGeolocation.stopObserving(); + updatesEnabled = false; + Object.values(subscriptions).forEach(([sub, sub1]) => { + warning(false, 'Called stopObserving with existing subscriptions.'); + sub.remove(); + sub1 && sub1.remove(); + }); + subscriptions = {}; + } +} +//# sourceMappingURL=implementation.native.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.native.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.native.js.map new file mode 100644 index 0000000..0daa828 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/implementation.native.js.map @@ -0,0 +1 @@ +{"version":3,"names":["GeolocationNativeInterface","invariant","logError","warning","RNCGeolocation","GeolocationEventEmitter","subscriptions","updatesEnabled","setRNConfiguration","config","setConfiguration","enableBackgroundLocationUpdates","authorizationLevel","undefined","locationProvider","requestAuthorization","success","error","getCurrentPosition","options","watchPosition","startObserving","watchID","Object","keys","length","addListener","clearWatch","sub","remove","sub1","noWatchers","stopObserving","values","forEach"],"sourceRoot":"../../js","sources":["implementation.native.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA,OAAOA,0BAA0B,MAAM,mBAAmB;AAE1D,OAAOC,SAAS,MAAM,WAAW;AACjC,SAASC,QAAQ,EAAEC,OAAO,QAAQ,SAAS;AAS3C,MAAM;EAAEC,cAAc;EAAEC;AAAwB,CAAC,GAAGL,0BAA0B;AAE9E,IAAIM,aAEH,GAAG,CAAC,CAAC;AACN,IAAIC,cAAc,GAAG,KAAK;;AAE1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,MAAgC,EAAE;EACnEL,cAAc,CAACM,gBAAgB,CAAC;IAC9B,GAAGD,MAAM;IACTE,+BAA+B,EAC7BF,MAAM,EAAEE,+BAA+B,IAAI,IAAI;IACjDC,kBAAkB,EAChBH,MAAM,EAAEG,kBAAkB,KAAK,MAAM,GACjCC,SAAS,GACTJ,MAAM,CAACG,kBAAkB;IAC/BE,gBAAgB,EACdL,MAAM,EAAEK,gBAAgB,KAAK,MAAM,GAAGD,SAAS,GAAGJ,MAAM,CAACK;EAC7D,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAClCC,OAAmB,GAAGA,CAAA,KAAM,CAAC,CAAC,EAC9BC,KAAwC,GAAGf,QAAQ,EACnD;EACAE,cAAc,CAACW,oBAAoB,CAACC,OAAO,EAAEC,KAAK,CAAC;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,kBAAkBA,CACtCF,OAAgD,EAChDC,KAAwC,GAAGf,QAAQ,EACnDiB,OAA2B,GAAG,CAAC,CAAC,EAChC;EACAlB,SAAS,CACP,OAAOe,OAAO,KAAK,UAAU,EAC7B,4CACF,CAAC;EACD;EACAZ,cAAc,CAACc,kBAAkB,CAACC,OAAO,EAAEH,OAAO,EAAEC,KAAK,CAAC;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,aAAaA,CAC3BJ,OAAgD,EAChDC,KAAwC,GAAGf,QAAQ,EACnDiB,OAA2B,GAAG,CAAC,CAAC,EACxB;EACR,IAAI,CAACZ,cAAc,EAAE;IACnBH,cAAc,CAACiB,cAAc,CAACF,OAAO,CAAC;IACtCZ,cAAc,GAAG,IAAI;EACvB;EACA,MAAMe,OAAO,GAAGC,MAAM,CAACC,IAAI,CAAClB,aAAa,CAAC,CAACmB,MAAM,GAAG,IAAI;EACxDnB,aAAa,CAACgB,OAAO,CAAC,GAAG,CACvBjB,uBAAuB,CAACqB,WAAW,CAAC,sBAAsB,EAAEV,OAAO,CAAC,EACpEC,KAAK,GACDZ,uBAAuB,CAACqB,WAAW,CAAC,kBAAkB,EAAET,KAAK,CAAC,GAC9D,IAAI,CACT;EACD,OAAOK,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,UAAUA,CAACL,OAAe,EAAE;EAC1C,MAAMM,GAAG,GAAGtB,aAAa,CAACgB,OAAO,CAAC;EAClC,IAAI,CAACM,GAAG,EAAE;IACR;IACA;IACA;EACF;EAEAA,GAAG,CAAC,CAAC,CAAC,CAACC,MAAM,CAAC,CAAC;EACf;EACA,MAAMC,IAAI,GAAGF,GAAG,CAAC,CAAC,CAAC;EACnBE,IAAI,IAAIA,IAAI,CAACD,MAAM,CAAC,CAAC;EAErB,OAAOvB,aAAa,CAACgB,OAAO,CAAC;EAC7B,IAAIS,UAAU,GAAGR,MAAM,CAACC,IAAI,CAAClB,aAAa,CAAC,CAACmB,MAAM,KAAK,CAAC;EACxD,IAAIM,UAAU,EAAE;IACdC,aAAa,CAAC,CAAC;EACjB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,aAAaA,CAAA,EAAG;EAC9B,IAAIzB,cAAc,EAAE;IAClBH,cAAc,CAAC4B,aAAa,CAAC,CAAC;IAC9BzB,cAAc,GAAG,KAAK;IACtBgB,MAAM,CAACU,MAAM,CAAC3B,aAAa,CAAC,CAAC4B,OAAO,CAAC,CAAC,CAACN,GAAG,EAAEE,IAAI,CAAC,KAAK;MACpD3B,OAAO,CAAC,KAAK,EAAE,mDAAmD,CAAC;MACnEyB,GAAG,CAACC,MAAM,CAAC,CAAC;MACZC,IAAI,IAAIA,IAAI,CAACD,MAAM,CAAC,CAAC;IACvB,CAAC,CAAC;IACFvB,aAAa,GAAG,CAAC,CAAC;EACpB;AACF","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/index.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/index.js new file mode 100644 index 0000000..72bb1a4 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/index.js @@ -0,0 +1,49 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import * as GeolocationModule from './implementation'; +const Geolocation = { + /** + * Invokes the success callback once with the latest location info. Supported + * options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool) + * On Android, this can return almost immediately if the location is cached or + * request an update, which might take a while. + */ + getCurrentPosition: function (success, error, options) { + GeolocationModule.getCurrentPosition(success, error, options); + }, + /** + * Invokes the success callback whenever the location changes. Supported + * options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool), distanceFilter(m) + */ + watchPosition: function (success, error, options) { + return GeolocationModule.watchPosition(success, error, options); + }, + /** + * Clears the watch started by `watchPosition`. + */ + clearWatch: function (watchID) { + GeolocationModule.clearWatch(watchID); + }, + /** + * @deprecated `ReactNativeGeolocation.stopObserving` is deprecated. Use `ReactNativeGeolocation.clearWatch` instead. + */ + stopObserving: function () { + console.warn('`ReactNativeGeolocation.stopObserving` is deprecated and should not be used. Use `ReactNativeGeolocation.clearWatch` instead.'); + GeolocationModule.stopObserving(); + }, + requestAuthorization: function (success, error) { + GeolocationModule.requestAuthorization(success, error); + }, + setRNConfiguration: function (config) { + GeolocationModule.setRNConfiguration(config); + } +}; +export default Geolocation; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/index.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/index.js.map new file mode 100644 index 0000000..681e170 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["GeolocationModule","Geolocation","getCurrentPosition","success","error","options","watchPosition","clearWatch","watchID","stopObserving","console","warn","requestAuthorization","setRNConfiguration","config"],"sourceRoot":"../../js","sources":["index.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,KAAKA,iBAAiB,MAAM,kBAAkB;AASrD,MAAMC,WAAW,GAAG;EAClB;AACF;AACA;AACA;AACA;AACA;EACEC,kBAAkB,EAAE,SAAAA,CAClBC,OAAgD,EAChDC,KAAyC,EACzCC,OAA4B,EAC5B;IACAL,iBAAiB,CAACE,kBAAkB,CAACC,OAAO,EAAEC,KAAK,EAAEC,OAAO,CAAC;EAC/D,CAAC;EAED;AACF;AACA;AACA;EACEC,aAAa,EAAE,SAAAA,CACbH,OAAgD,EAChDC,KAAyC,EACzCC,OAA4B,EACpB;IACR,OAAOL,iBAAiB,CAACM,aAAa,CAACH,OAAO,EAAEC,KAAK,EAAEC,OAAO,CAAC;EACjE,CAAC;EAED;AACF;AACA;EACEE,UAAU,EAAE,SAAAA,CAAUC,OAAe,EAAE;IACrCR,iBAAiB,CAACO,UAAU,CAACC,OAAO,CAAC;EACvC,CAAC;EAED;AACF;AACA;EACEC,aAAa,EAAE,SAAAA,CAAA,EAAY;IACzBC,OAAO,CAACC,IAAI,CACV,+HACF,CAAC;IACDX,iBAAiB,CAACS,aAAa,CAAC,CAAC;EACnC,CAAC;EAEDG,oBAAoB,EAAE,SAAAA,CACpBT,OAAoB,EACpBC,KAAyC,EACzC;IACAJ,iBAAiB,CAACY,oBAAoB,CAACT,OAAO,EAAEC,KAAK,CAAC;EACxD,CAAC;EAEDS,kBAAkB,EAAE,SAAAA,CAAUC,MAAgC,EAAE;IAC9Dd,iBAAiB,CAACa,kBAAkB,CAACC,MAAM,CAAC;EAC9C;AACF,CAAC;AASD,eAAeb,WAAW","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/nativeInterface.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/nativeInterface.js new file mode 100644 index 0000000..ea816c0 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/nativeInterface.js @@ -0,0 +1,39 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import { NativeEventEmitter, NativeModules, Platform } from 'react-native'; +const LINKING_ERROR = `The package '@react-native-community/geolocation' doesn't seem to be linked. Make sure: \n\n` + Platform.select({ + ios: "- You have run 'pod install'\n", + default: '' +}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo managed workflow\n'; + +// @ts-expect-error +const isTurboModuleEnabled = global.__turboModuleProxy != null; +const RNCGeolocationModule = isTurboModuleEnabled ? require('./NativeRNCGeolocation').default : NativeModules.RNCGeolocation; +const RNCGeolocation = RNCGeolocationModule ? RNCGeolocationModule : new Proxy({}, { + get() { + throw new Error(LINKING_ERROR); + } +}); + +/** + * We export the native interface in this way to give easy shared access to it between the + * JavaScript code and the tests + */ +let nativeEventEmitter = null; +export default { + RNCGeolocation, + get GeolocationEventEmitter() { + if (!nativeEventEmitter) { + nativeEventEmitter = new NativeEventEmitter(RNCGeolocation); + } + return nativeEventEmitter; + } +}; +//# sourceMappingURL=nativeInterface.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/nativeInterface.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/nativeInterface.js.map new file mode 100644 index 0000000..d0082cf --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/nativeInterface.js.map @@ -0,0 +1 @@ +{"version":3,"names":["NativeEventEmitter","NativeModules","Platform","LINKING_ERROR","select","ios","default","isTurboModuleEnabled","global","__turboModuleProxy","RNCGeolocationModule","require","RNCGeolocation","Proxy","get","Error","nativeEventEmitter","GeolocationEventEmitter"],"sourceRoot":"../../js","sources":["nativeInterface.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,kBAAkB,EAAEC,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAE1E,MAAMC,aAAa,GACjB,8FAA8F,GAC9FD,QAAQ,CAACE,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,6CAA6C;;AAE/C;AACA,MAAMC,oBAAoB,GAAGC,MAAM,CAACC,kBAAkB,IAAI,IAAI;AAE9D,MAAMC,oBAAoB,GAAGH,oBAAoB,GAC7CI,OAAO,CAAC,wBAAwB,CAAC,CAACL,OAAO,GACzCL,aAAa,CAACW,cAAc;AAEhC,MAAMA,cAAc,GAAGF,oBAAoB,GACvCA,oBAAoB,GACpB,IAAIG,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACZ,aAAa,CAAC;EAChC;AACF,CACF,CAAC;;AAEL;AACA;AACA;AACA;AACA,IAAIa,kBAA6C,GAAG,IAAI;AAExD,eAAe;EACbJ,cAAc;EACd,IAAIK,uBAAuBA,CAAA,EAAG;IAC5B,IAAI,CAACD,kBAAkB,EAAE;MACvBA,kBAAkB,GAAG,IAAIhB,kBAAkB,CAACY,cAAc,CAAC;IAC7D;IACA,OAAOI,kBAAkB;EAC3B;AACF,CAAC","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/utils.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/utils.js new file mode 100644 index 0000000..277cf5e --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/utils.js @@ -0,0 +1,50 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +'use strict'; + +/** + * Small utility that can be used as an error handler. You cannot just pass + * `console.error` as a failure callback - it's not properly bound. If passes an + * `Error` object, it will print the message and stack. + */ +export const logError = function (...args) { + if (args.length === 1 && args[0] instanceof Error) { + const err = args[0]; + console.error('Error: "' + err.message + '". Stack:\n' + err.stack); + } else { + console.error.apply(console, args); + } +}; + +/** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ +export const warning = __DEV__ ? function (condition, format, ...args) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + if (!condition) { + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, () => args[argIndex++]); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + } +} : () => {}; +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/utils.js.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/utils.js.map new file mode 100644 index 0000000..b4d7d86 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/module/utils.js.map @@ -0,0 +1 @@ +{"version":3,"names":["logError","args","length","Error","err","console","error","message","stack","apply","warning","__DEV__","condition","format","undefined","argIndex","replace","x"],"sourceRoot":"../../js","sources":["utils.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;;AAEZ;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,QAAQ,GAAG,SAAAA,CAAU,GAAGC,IAAe,EAAE;EACpD,IAAIA,IAAI,CAACC,MAAM,KAAK,CAAC,IAAID,IAAI,CAAC,CAAC,CAAC,YAAYE,KAAK,EAAE;IACjD,MAAMC,GAAG,GAAGH,IAAI,CAAC,CAAC,CAAC;IACnBI,OAAO,CAACC,KAAK,CAAC,UAAU,GAAGF,GAAG,CAACG,OAAO,GAAG,cAAc,GAAGH,GAAG,CAACI,KAAK,CAAC;EACtE,CAAC,MAAM;IACLH,OAAO,CAACC,KAAK,CAACG,KAAK,CAACJ,OAAO,EAAEJ,IAAI,CAAC;EACpC;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMS,OAAO,GAAGC,OAAO,GAC1B,UAAUC,SAAkB,EAAEC,MAAc,EAAE,GAAGZ,IAAW,EAAE;EAC5D,IAAIY,MAAM,KAAKC,SAAS,EAAE;IACxB,MAAM,IAAIX,KAAK,CACb,2DAA2D,GACzD,kBACJ,CAAC;EACH;EACA,IAAI,CAACS,SAAS,EAAE;IACd,IAAIG,QAAQ,GAAG,CAAC;IAChB,IAAIR,OAAO,GACT,WAAW,GAAGM,MAAM,CAACG,OAAO,CAAC,KAAK,EAAE,MAAMf,IAAI,CAACc,QAAQ,EAAE,CAAC,CAAC;IAC7D,IAAI,OAAOV,OAAO,KAAK,WAAW,EAAE;MAClCA,OAAO,CAACC,KAAK,CAACC,OAAO,CAAC;IACxB;IACA,IAAI;MACF;MACA;MACA;MACA,MAAM,IAAIJ,KAAK,CAACI,OAAO,CAAC;IAC1B,CAAC,CAAC,OAAOU,CAAC,EAAE,CAAC;EACf;AACF,CAAC,GACD,MAAM,CAAC,CAAC","ignoreList":[]} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/NativeRNCGeolocation.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/NativeRNCGeolocation.d.ts new file mode 100644 index 0000000..65a100d --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/NativeRNCGeolocation.d.ts @@ -0,0 +1,51 @@ +import type { TurboModule } from 'react-native'; +export type GeolocationConfiguration = { + skipPermissionRequests: boolean; + authorizationLevel?: 'always' | 'whenInUse' | 'auto'; + locationProvider?: 'playServices' | 'android' | 'auto'; + enableBackgroundLocationUpdates?: boolean; +}; +export type GeolocationOptions = { + timeout?: number; + maximumAge?: number; + enableHighAccuracy?: boolean; + distanceFilter?: number; + useSignificantChanges?: boolean; + interval?: number; + fastestInterval?: number; +}; +export type GeolocationResponse = { + coords: { + latitude: number; + longitude: number; + altitude: number | null; + accuracy: number; + altitudeAccuracy: number | null; + heading: number | null; + speed: number | null; + }; + timestamp: number; +}; +export type GeolocationError = { + code: number; + message: string; + PERMISSION_DENIED: number; + POSITION_UNAVAILABLE: number; + TIMEOUT: number; +}; +export interface Spec extends TurboModule { + setConfiguration(config: { + skipPermissionRequests: boolean; + authorizationLevel?: string; + enableBackgroundLocationUpdates?: string; + }): void; + requestAuthorization(success: () => void, error: (error: GeolocationError) => void): void; + getCurrentPosition(options: GeolocationOptions, position: (position: GeolocationResponse) => void, error: (error: GeolocationError) => void): void; + startObserving(options: GeolocationOptions): void; + stopObserving(): void; + addListener: (eventName: string) => void; + removeListeners: (count: number) => void; +} +declare const _default: Spec; +export default _default; +//# sourceMappingURL=NativeRNCGeolocation.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/NativeRNCGeolocation.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/NativeRNCGeolocation.d.ts.map new file mode 100644 index 0000000..0475b54 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/NativeRNCGeolocation.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"NativeRNCGeolocation.d.ts","sourceRoot":"","sources":["../../../js/NativeRNCGeolocation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,MAAM,wBAAwB,GAAG;IACrC,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACrD,gBAAgB,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC;IACvD,+BAA+B,CAAC,EAAE,OAAO,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,gBAAgB,CAAC,MAAM,EAAE;QACvB,sBAAsB,EAAE,OAAO,CAAC;QAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,+BAA+B,CAAC,EAAE,MAAM,CAAC;KAC1C,GAAG,IAAI,CAAC;IACT,oBAAoB,CAClB,OAAO,EAAE,MAAM,IAAI,EACnB,KAAK,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GACvC,IAAI,CAAC;IACR,kBAAkB,CAChB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,EACjD,KAAK,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GACvC,IAAI,CAAC;IACR,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClD,aAAa,IAAI,IAAI,CAAC;IAGtB,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;;AAED,wBAAwE"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.d.ts new file mode 100644 index 0000000..c2fee94 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.d.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ +import type { GeolocationOptions, GeolocationConfiguration, GeolocationResponse, GeolocationError } from './NativeRNCGeolocation'; +export declare function setRNConfiguration(_config: GeolocationConfiguration): void; +export declare function requestAuthorization(_success?: () => void, _error?: (error: GeolocationError) => void): void; +export declare function getCurrentPosition(success: (position: GeolocationResponse) => void, error?: (error: GeolocationError) => void, options?: GeolocationOptions): Promise; +export declare function watchPosition(success: (position: GeolocationResponse) => void, error?: (error: GeolocationError) => void, options?: GeolocationOptions): number; +export declare function clearWatch(watchID: number): void; +export declare function stopObserving(): void; +//# sourceMappingURL=implementation.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.d.ts.map new file mode 100644 index 0000000..ef563ac --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"implementation.d.ts","sourceRoot":"","sources":["../../../js/implementation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAEhC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,wBAAwB,QAEnE;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,EACrB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,QAG3C;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,EAChD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,EACzC,OAAO,CAAC,EAAE,kBAAkB,iBAS7B;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,EAChD,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,EACzC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,CAOR;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,QAMzC;AAED,wBAAgB,aAAa,SAE5B"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.native.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.native.d.ts new file mode 100644 index 0000000..4bef407 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.native.d.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ +import type { GeolocationOptions, GeolocationConfiguration, GeolocationResponse, GeolocationError } from './NativeRNCGeolocation'; +/** + * The Geolocation API extends the web spec: + * https://developer.mozilla.org/en-US/docs/Web/API/Geolocation + * + * See https://facebook.github.io/react-native/docs/geolocation.html + */ +export declare function setRNConfiguration(config: GeolocationConfiguration): void; +export declare function requestAuthorization(success?: () => void, error?: (error: GeolocationError) => void): void; +export declare function getCurrentPosition(success: (position: GeolocationResponse) => void, error?: (error: GeolocationError) => void, options?: GeolocationOptions): Promise; +export declare function watchPosition(success: (position: GeolocationResponse) => void, error?: (error: GeolocationError) => void, options?: GeolocationOptions): number; +export declare function clearWatch(watchID: number): void; +export declare function stopObserving(): void; +//# sourceMappingURL=implementation.native.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.native.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.native.d.ts.map new file mode 100644 index 0000000..d3621a7 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/implementation.native.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"implementation.native.d.ts","sourceRoot":"","sources":["../../../js/implementation.native.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAShC;;;;;GAKG;AAQH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,QAYlE;AAOD,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,MAAM,IAAe,EAC9B,KAAK,GAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAe,QAGpD;AAOD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,EAChD,KAAK,GAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAe,EACnD,OAAO,GAAE,kBAAuB,iBAQjC;AAOD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,EAChD,KAAK,GAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAe,EACnD,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAaR;AAOD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,QAkBzC;AAOD,wBAAgB,aAAa,SAW5B"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/index.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/index.d.ts new file mode 100644 index 0000000..1896bd5 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/index.d.ts @@ -0,0 +1,36 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ +import type { GeolocationOptions, GeolocationConfiguration, GeolocationResponse, GeolocationError } from './NativeRNCGeolocation'; +declare const Geolocation: { + /** + * Invokes the success callback once with the latest location info. Supported + * options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool) + * On Android, this can return almost immediately if the location is cached or + * request an update, which might take a while. + */ + getCurrentPosition: (success: (position: GeolocationResponse) => void, error?: ((error: GeolocationError) => void) | undefined, options?: GeolocationOptions) => void; + /** + * Invokes the success callback whenever the location changes. Supported + * options: timeout (ms), maximumAge (ms), enableHighAccuracy (bool), distanceFilter(m) + */ + watchPosition: (success: (position: GeolocationResponse) => void, error?: ((error: GeolocationError) => void) | undefined, options?: GeolocationOptions) => number; + /** + * Clears the watch started by `watchPosition`. + */ + clearWatch: (watchID: number) => void; + /** + * @deprecated `ReactNativeGeolocation.stopObserving` is deprecated. Use `ReactNativeGeolocation.clearWatch` instead. + */ + stopObserving: () => void; + requestAuthorization: (success?: () => void, error?: ((error: GeolocationError) => void) | undefined) => void; + setRNConfiguration: (config: GeolocationConfiguration) => void; +}; +export type { GeolocationOptions, GeolocationConfiguration, GeolocationResponse, GeolocationError, }; +export default Geolocation; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/index.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/index.d.ts.map new file mode 100644 index 0000000..a31ee6e --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../js/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAEhC,QAAA,MAAM,WAAW;IACf;;;;;OAKG;6CAEmB,mBAAmB,KAAK,IAAI,mBAChC,gBAAgB,KAAK,IAAI,yBAC/B,kBAAkB;IAK9B;;;OAGG;wCAEmB,mBAAmB,KAAK,IAAI,mBAChC,gBAAgB,KAAK,IAAI,yBAC/B,kBAAkB,KAC3B,MAAM;IAIT;;OAEG;0BAC4B,MAAM;IAIrC;;OAEG;;qCASS,MAAM,IAAI,mBACJ,gBAAgB,KAAK,IAAI;iCAKL,wBAAwB;CAG/D,CAAC;AAEF,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,GACjB,CAAC;AAEF,eAAe,WAAW,CAAC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/nativeInterface.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/nativeInterface.d.ts new file mode 100644 index 0000000..21439b3 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/nativeInterface.d.ts @@ -0,0 +1,15 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ +import { NativeEventEmitter } from 'react-native'; +declare const _default: { + RNCGeolocation: any; + readonly GeolocationEventEmitter: NativeEventEmitter; +}; +export default _default; +//# sourceMappingURL=nativeInterface.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/nativeInterface.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/nativeInterface.d.ts.map new file mode 100644 index 0000000..d5b0890 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/nativeInterface.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"nativeInterface.d.ts","sourceRoot":"","sources":["../../../js/nativeInterface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,kBAAkB,EAA2B,MAAM,cAAc,CAAC;;;;;AAgC3E,wBAQE"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/utils.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/utils.d.ts new file mode 100644 index 0000000..c36799a --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/utils.d.ts @@ -0,0 +1,22 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ +/** + * Small utility that can be used as an error handler. You cannot just pass + * `console.error` as a failure callback - it's not properly bound. If passes an + * `Error` object, it will print the message and stack. + */ +export declare const logError: (...args: unknown[]) => void; +/** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ +export declare const warning: (condition: boolean, format: string, ...args: any[]) => void; +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/utils.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/utils.d.ts.map new file mode 100644 index 0000000..59af6bd --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/js/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../js/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;GAIG;AACH,eAAO,MAAM,QAAQ,YAAsB,OAAO,EAAE,SAOnD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,cACK,OAAO,UAAU,MAAM,WAAW,GAAG,EAAE,SAsBpD,CAAC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/NativeRNCGeolocation.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/NativeRNCGeolocation.d.ts new file mode 100644 index 0000000..9ae2ba0 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/NativeRNCGeolocation.d.ts @@ -0,0 +1,4 @@ +export const __esModule: boolean; +declare const _default: any; +export default _default; +//# sourceMappingURL=NativeRNCGeolocation.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/NativeRNCGeolocation.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/NativeRNCGeolocation.d.ts.map new file mode 100644 index 0000000..922bc6a --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/NativeRNCGeolocation.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"NativeRNCGeolocation.d.ts","sourceRoot":"","sources":["../../../commonjs/NativeRNCGeolocation.js"],"names":[],"mappings":""} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.d.ts new file mode 100644 index 0000000..d1e4e27 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.d.ts @@ -0,0 +1,16 @@ +export const __esModule: boolean; +export function clearWatch(watchID: any): void; +export function getCurrentPosition(success: any, error: any, options: any): Promise; +export function requestAuthorization(_success: any, _error: any): void; +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ +export function setRNConfiguration(_config: any): void; +export function stopObserving(): void; +export function watchPosition(success: any, error: any, options: any): number; +//# sourceMappingURL=implementation.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.d.ts.map new file mode 100644 index 0000000..df51342 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"implementation.d.ts","sourceRoot":"","sources":["../../../commonjs/implementation.js"],"names":[],"mappings":";AA2CA,+CAMC;AAvBD,0FAQC;AAXD,uEAEC;AAdD;;;;;;;GAOG;AAEH,uDAEC;AA4BD,sCAEC;AAjBD,8EAOC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.native.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.native.d.ts new file mode 100644 index 0000000..8f1da2f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.native.d.ts @@ -0,0 +1,14 @@ +export const __esModule: boolean; +export function clearWatch(watchID: any): void; +export function getCurrentPosition(success: any, error?: any, options?: {}): Promise; +export function requestAuthorization(success?: () => void, error?: any): void; +/** + * The Geolocation API extends the web spec: + * https://developer.mozilla.org/en-US/docs/Web/API/Geolocation + * + * See https://facebook.github.io/react-native/docs/geolocation.html + */ +export function setRNConfiguration(config: any): void; +export function stopObserving(): void; +export function watchPosition(success: any, error?: any, options?: {}): number; +//# sourceMappingURL=implementation.native.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.native.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.native.d.ts.map new file mode 100644 index 0000000..8b78bb2 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/implementation.native.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"implementation.native.d.ts","sourceRoot":"","sources":["../../../commonjs/implementation.native.js"],"names":[],"mappings":";AA6FA,+CAgBC;AA1CD,2FAIC;AAbD,8EAEC;AA7BD;;;;;GAKG;AAQH,sDAOC;AAiED,sCAWC;AAjDD,+EAQC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/index.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/index.d.ts new file mode 100644 index 0000000..33f34dc --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/index.d.ts @@ -0,0 +1,11 @@ +export const __esModule: boolean; +export default Geolocation; +declare namespace Geolocation { + function getCurrentPosition(success: any, error: any, options: any): void; + function watchPosition(success: any, error: any, options: any): any; + function clearWatch(watchID: any): void; + function stopObserving(): void; + function requestAuthorization(success: any, error: any): void; + function setRNConfiguration(config: any): void; +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/index.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/index.d.ts.map new file mode 100644 index 0000000..bc4b77a --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../commonjs/index.js"],"names":[],"mappings":";;;IAyBsB,0EAEnB;IAKc,oEAEd;IAIW,wCAEX;IAIc,+BAGd;IACqB,8DAErB;IACmB,+CAEnB"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/nativeInterface.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/nativeInterface.d.ts new file mode 100644 index 0000000..0a37e3f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/nativeInterface.d.ts @@ -0,0 +1,7 @@ +export const __esModule: boolean; +declare namespace _default { + export { RNCGeolocation }; +} +export default _default; +declare const RNCGeolocation: any; +//# sourceMappingURL=nativeInterface.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/nativeInterface.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/nativeInterface.d.ts.map new file mode 100644 index 0000000..008c7bb --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/nativeInterface.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"nativeInterface.d.ts","sourceRoot":"","sources":["../../../commonjs/nativeInterface.js"],"names":[],"mappings":";;;;;AAwBA,kCAIG"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/utils.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/utils.d.ts new file mode 100644 index 0000000..cf7d58d --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/utils.d.ts @@ -0,0 +1,4 @@ +export const __esModule: boolean; +export function warning(condition: any, format: any, ...args: any[]): void; +export function logError(...args: any[]): void; +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/utils.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/utils.d.ts.map new file mode 100644 index 0000000..435800f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/commonjs/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../commonjs/utils.js"],"names":[],"mappings":";AAoC4C,2EAiB3C;AAjCD,+CAOC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/NativeRNCGeolocation.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/NativeRNCGeolocation.d.ts new file mode 100644 index 0000000..3c91fc0 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/NativeRNCGeolocation.d.ts @@ -0,0 +1,3 @@ +declare const _default: import("react-native").TurboModule; +export default _default; +//# sourceMappingURL=NativeRNCGeolocation.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/NativeRNCGeolocation.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/NativeRNCGeolocation.d.ts.map new file mode 100644 index 0000000..d87a607 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/NativeRNCGeolocation.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"NativeRNCGeolocation.d.ts","sourceRoot":"","sources":["../../../module/NativeRNCGeolocation.js"],"names":[],"mappings":""} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.d.ts new file mode 100644 index 0000000..6df8315 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.d.ts @@ -0,0 +1,15 @@ +/** + * Copyright (c) React Native Community + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ +export function setRNConfiguration(_config: any): void; +export function requestAuthorization(_success: any, _error: any): void; +export function getCurrentPosition(success: any, error: any, options: any): Promise; +export function watchPosition(success: any, error: any, options: any): number; +export function clearWatch(watchID: any): void; +export function stopObserving(): void; +//# sourceMappingURL=implementation.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.d.ts.map new file mode 100644 index 0000000..c4f3e8e --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"implementation.d.ts","sourceRoot":"","sources":["../../../module/implementation.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,uDAEC;AACD,uEAEC;AACD,0FAQC;AACD,8EAOC;AACD,+CAMC;AACD,sCAEC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.native.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.native.d.ts new file mode 100644 index 0000000..4f23b48 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.native.d.ts @@ -0,0 +1,13 @@ +/** + * The Geolocation API extends the web spec: + * https://developer.mozilla.org/en-US/docs/Web/API/Geolocation + * + * See https://facebook.github.io/react-native/docs/geolocation.html + */ +export function setRNConfiguration(config: any): void; +export function requestAuthorization(success?: () => void, error?: (...args: any[]) => void): void; +export function getCurrentPosition(success: any, error?: (...args: any[]) => void, options?: {}): Promise; +export function watchPosition(success: any, error?: (...args: any[]) => void, options?: {}): number; +export function clearWatch(watchID: any): void; +export function stopObserving(): void; +//# sourceMappingURL=implementation.native.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.native.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.native.d.ts.map new file mode 100644 index 0000000..0764c2e --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/implementation.native.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"implementation.native.d.ts","sourceRoot":"","sources":["../../../module/implementation.native.js"],"names":[],"mappings":"AAmBA;;;;;GAKG;AAQH,sDAOC;AAOD,mGAEC;AAOD,gHAIC;AAOD,oGAQC;AAOD,+CAgBC;AAOD,sCAWC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/index.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/index.d.ts new file mode 100644 index 0000000..5ad7899 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/index.d.ts @@ -0,0 +1,10 @@ +export default Geolocation; +declare namespace Geolocation { + function getCurrentPosition(success: any, error: any, options: any): void; + function watchPosition(success: any, error: any, options: any): number; + function clearWatch(watchID: any): void; + function stopObserving(): void; + function requestAuthorization(success: any, error: any): void; + function setRNConfiguration(config: any): void; +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/index.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/index.d.ts.map new file mode 100644 index 0000000..5dc89fc --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../module/index.js"],"names":[],"mappings":";;IAiBsB,0EAEnB;IAKc,uEAEd;IAIW,wCAEX;IAIc,+BAGd;IACqB,8DAErB;IACmB,+CAEnB"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/nativeInterface.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/nativeInterface.d.ts new file mode 100644 index 0000000..07909b7 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/nativeInterface.d.ts @@ -0,0 +1,6 @@ +declare namespace _default { + export { RNCGeolocation }; +} +export default _default; +declare const RNCGeolocation: any; +//# sourceMappingURL=nativeInterface.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/nativeInterface.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/nativeInterface.d.ts.map new file mode 100644 index 0000000..50ba29a --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/nativeInterface.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"nativeInterface.d.ts","sourceRoot":"","sources":["../../../module/nativeInterface.js"],"names":[],"mappings":";;;;AAkBA,kCAIG"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/utils.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/utils.d.ts new file mode 100644 index 0000000..5625a74 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/utils.d.ts @@ -0,0 +1,3 @@ +export function logError(...args: any[]): void; +export function warning(condition: any, format: any, ...args: any[]): void; +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/utils.d.ts.map b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/utils.d.ts.map new file mode 100644 index 0000000..7e818b6 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/lib/typescript/lib/module/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../module/utils.js"],"names":[],"mappings":"AAgBO,+CAON;AAQgC,2EAiBhC"} \ No newline at end of file diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/package.json b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/package.json new file mode 100644 index 0000000..434c268 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/@react-native-community/geolocation/package.json @@ -0,0 +1,143 @@ +{ + "name": "@react-native-community/geolocation", + "version": "3.4.0", + "description": "React Native Geolocation Module for iOS and Android", + "react-native": "js/index", + "main": "lib/commonjs/index", + "module": "lib/module/index", + "types": "lib/typescript/js/index.d.ts", + "source": "js/index", + "files": [ + "lib/", + "js/", + "/android", + "!/android/build", + "/ios", + "/*.podspec" + ], + "author": "React Native Community", + "contributors": [ + "Michal Chudziak " + ], + "homepage": "https://github.com/michalchudziak/react-native-geolocation#README.md", + "license": "MIT", + "scripts": { + "start": "react-native start", + "test": "yarn validate:eslint && yarn validate:typescript && yarn test:jest", + "validate:eslint": "eslint \"**/*.{js,ts,tsx}\"", + "validate:typescript": "tsc --noEmit", + "test:jest": "jest js/", + "prepare": "bob build", + "example": "yarn --cwd example", + "bootstrap": "yarn example && yarn && yarn example pods" + }, + "repository": { + "type": "git", + "url": "https://github.com/michalchudziak/react-native-geolocation.git" + }, + "engines": { + "node": ">=18.0.0" + }, + "keywords": [ + "react-native", + "geolocation", + "location" + ], + "peerDependencies": { + "react": "*", + "react-native": "*" + }, + "devDependencies": { + "@babel/core": "^7.20.0", + "@babel/runtime": "^7.20.0", + "@react-native/babel-preset": "0.73.21", + "@react-native/eslint-config": "0.73.2", + "@react-native/metro-config": "0.73.5", + "@react-native/typescript-config": "0.73.1", + "@react-navigation/native": "^6.0.11", + "@react-navigation/native-stack": "^6.7.0", + "@semantic-release/git": "^7.0.16", + "@types/invariant": "^2.2.35", + "@types/jest": "^26.0.23", + "@types/react": "^18.2.6", + "@types/react-native": "^0.69.3", + "@types/react-test-renderer": "^18.0.0", + "@types/react-native-background-timer": "^2.0.0", + "babel-jest": "^29.6.3", + "babel-plugin-module-resolver": "^3.2.0", + "eslint": "^8.19.0", + "eslint-config-prettier": "^6.0.0", + "eslint-plugin-prettier": "3.0.1", + "jest": "^29.6.3", + "metro-react-native-babel-preset": "^0.72.3", + "prettier": "2.8.8", + "react": "18.2.0", + "react-native": "0.73.4", + "react-native-builder-bob": "^0.23.2", + "react-test-renderer": "18.2.0", + "semantic-release": "^15.13.21", + "typescript": "5.0.4" + }, + "jest": { + "preset": "react-native", + "modulePathIgnorePatterns": [ + "/lib/" + ], + "setupFilesAfterEnv": [ + "/jest.setup.js" + ], + "testEnvironment": "node" + }, + "eslintConfig": { + "root": true, + "extends": [ + "@react-native", + "prettier" + ], + "rules": { + "prettier/prettier": [ + "error", + { + "quoteProps": "consistent", + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "useTabs": false + } + ] + } + }, + "eslintIgnore": [ + "node_modules/", + "lib/" + ], + "prettier": { + "quoteProps": "consistent", + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "useTabs": false + }, + "react-native-builder-bob": { + "source": "js", + "output": "lib", + "targets": [ + "commonjs", + "module", + [ + "typescript", + { + "project": "tsconfig.build.json" + } + ] + ] + }, + "codegenConfig": { + "name": "RNCGeolocationSpec", + "type": "modules", + "jsSrcsDir": "js", + "android": { + "javaPackageName": "com.reactnativecommunity.geolocation" + } + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/CHANGELOG.md b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/CHANGELOG.md new file mode 100644 index 0000000..bc52f1c --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/CHANGELOG.md @@ -0,0 +1,69 @@ +2.2.4 / 2018-03-13 +================== + + * Use flow strict mode (i.e. `@flow strict`). + +2.2.3 / 2018-02-19 +================== + + * Change license from BSD+Patents to MIT. + +2.2.2 / 2016-11-15 +================== + + * Add LICENSE file. + * Misc housekeeping. + +2.2.1 / 2016-03-09 +================== + + * Use `NODE_ENV` variable instead of `__DEV__` to cache `process.env.NODE_ENV`. + +2.2.0 / 2015-11-17 +================== + + * Use `error.name` instead of `Invariant Violation`. + +2.1.3 / 2015-11-17 +================== + + * Remove `@provideModule` pragma. + +2.1.2 / 2015-10-27 +================== + + * Fix license. + +2.1.1 / 2015-09-20 +================== + + * Use correct SPDX license. + * Test "browser.js" using browserify. + * Switch from "envify" to "loose-envify". + +2.1.0 / 2015-06-03 +================== + + * Add "envify" as a dependency. + * Fixed license field in "package.json". + +2.0.0 / 2015-02-21 +================== + + * Switch to using the "browser" field. There are now browser and server versions that respect the "format" in production. + +1.0.2 / 2014-09-24 +================== + + * Added tests, npmignore and gitignore. + * Clarifications in README. + +1.0.1 / 2014-09-24 +================== + + * Actually include 'invariant.js'. + +1.0.0 / 2014-09-24 +================== + + * Initial release. diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/LICENSE b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/LICENSE new file mode 100644 index 0000000..188fb2b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-present, Facebook, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/README.md b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/README.md new file mode 100644 index 0000000..4f18354 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/README.md @@ -0,0 +1,37 @@ +# invariant + +[![Build Status](https://travis-ci.org/zertosh/invariant.svg?branch=master)](https://travis-ci.org/zertosh/invariant) + +A mirror of Facebook's `invariant` (e.g. [React](https://github.com/facebook/react/blob/v0.13.3/src/vendor/core/invariant.js), [flux](https://github.com/facebook/flux/blob/2.0.2/src/invariant.js)). + +A way to provide descriptive errors in development but generic errors in production. + +## Install + +With [npm](http://npmjs.org) do: + +```sh +npm install invariant +``` + +## `invariant(condition, message)` + +```js +var invariant = require('invariant'); + +invariant(someTruthyVal, 'This will not throw'); +// No errors + +invariant(someFalseyVal, 'This will throw an error with this message'); +// Error: Invariant Violation: This will throw an error with this message +``` + +**Note:** When `process.env.NODE_ENV` is not `production`, the message is required. If omitted, `invariant` will throw regardless of the truthiness of the condition. When `process.env.NODE_ENV` is `production`, the message is optional – so they can be minified away. + +### Browser + +When used with [browserify](https://github.com/substack/node-browserify), it'll use `browser.js` (instead of `invariant.js`) and the [envify](https://github.com/hughsk/envify) transform will inline the value of `process.env.NODE_ENV`. + +### Node + +The node version is optimized around the performance implications of accessing `process.env`. The value of `process.env.NODE_ENV` is cached, and repeatedly used instead of reading `process.env`. See [Server rendering is slower with npm react #812](https://github.com/facebook/react/issues/812) diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/browser.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/browser.js new file mode 100644 index 0000000..b3941bc --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/browser.js @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var invariant = function(condition, format, a, b, c, d, e, f) { + if (process.env.NODE_ENV !== 'production') { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } + + if (!condition) { + var error; + if (format === undefined) { + error = new Error( + 'Minified exception occurred; use the non-minified dev environment ' + + 'for the full error message and additional helpful warnings.' + ); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error( + format.replace(/%s/g, function() { return args[argIndex++]; }) + ); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +}; + +module.exports = invariant; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/invariant.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/invariant.js new file mode 100644 index 0000000..b543e9f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/invariant.js @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var NODE_ENV = process.env.NODE_ENV; + +var invariant = function(condition, format, a, b, c, d, e, f) { + if (NODE_ENV !== 'production') { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } + + if (!condition) { + var error; + if (format === undefined) { + error = new Error( + 'Minified exception occurred; use the non-minified dev environment ' + + 'for the full error message and additional helpful warnings.' + ); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error( + format.replace(/%s/g, function() { return args[argIndex++]; }) + ); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +}; + +module.exports = invariant; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/invariant.js.flow b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/invariant.js.flow new file mode 100644 index 0000000..462ab73 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/invariant.js.flow @@ -0,0 +1,7 @@ +/* @flow strict */ + +declare module.exports: ( + condition: any, + format?: string, + ...args: Array +) => void; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/package.json b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/package.json new file mode 100644 index 0000000..bb1499f --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/invariant/package.json @@ -0,0 +1,35 @@ +{ + "name": "invariant", + "version": "2.2.4", + "description": "invariant", + "keywords": [ + "test", + "invariant" + ], + "license": "MIT", + "author": "Andres Suarez ", + "files": [ + "browser.js", + "invariant.js", + "invariant.js.flow" + ], + "repository": "https://github.com/zertosh/invariant", + "scripts": { + "test": "NODE_ENV=production tap test/*.js && NODE_ENV=development tap test/*.js" + }, + "dependencies": { + "loose-envify": "^1.0.0" + }, + "devDependencies": { + "browserify": "^11.0.1", + "flow-bin": "^0.67.1", + "tap": "^1.4.0" + }, + "main": "invariant.js", + "browser": "browser.js", + "browserify": { + "transform": [ + "loose-envify" + ] + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/LICENSE.md b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/LICENSE.md new file mode 100644 index 0000000..fd579a4 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/LICENSE.md @@ -0,0 +1,27 @@ +Copyright (c) 2014, Dan Kogai +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of {{{project}}} nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/README.md b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/README.md new file mode 100644 index 0000000..19b0709 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/README.md @@ -0,0 +1,169 @@ +[![CI via GitHub Actions](https://github.com/dankogai/js-base64/actions/workflows/node.js.yml/badge.svg)](https://github.com/dankogai/js-base64/actions/workflows/node.js.yml) + +# base64.js + +Yet another [Base64] transcoder. + +[Base64]: http://en.wikipedia.org/wiki/Base64 + +## Install + +```shell +$ npm install --save js-base64 +``` + +## Usage + +### In Browser + +Locally… + +```html + +``` + +… or Directly from CDN. In which case you don't even need to install. + +```html + +``` + +This good old way loads `Base64` in the global context (`window`). Though `Base64.noConflict()` is made available, you should consider using ES6 Module to avoid tainting `window`. + +### As an ES6 Module + +locally… + +```javascript +import { Base64 } from 'js-base64'; +``` + +```javascript +// or if you prefer no Base64 namespace +import { encode, decode } from 'js-base64'; +``` + +or even remotely. + +```html + +``` + +```html + +``` + +### node.js (commonjs) + +```javascript +const {Base64} = require('js-base64'); +``` + +Unlike the case above, the global context is no longer modified. + +You can also use [esm] to `import` instead of `require`. + +[esm]: https://github.com/standard-things/esm + +```javascript +require=require('esm')(module); +import {Base64} from 'js-base64'; +``` + +## SYNOPSIS + +```javascript +let latin = 'dankogai'; +let utf8 = '小飼弾' +let u8s = new Uint8Array([100,97,110,107,111,103,97,105]); +Base64.encode(latin); // ZGFua29nYWk= +Base64.encode(latin, true); // ZGFua29nYWk skips padding +Base64.encodeURI(latin); // ZGFua29nYWk +Base64.btoa(latin); // ZGFua29nYWk= +Base64.btoa(utf8); // raises exception +Base64.fromUint8Array(u8s); // ZGFua29nYWk= +Base64.fromUint8Array(u8s, true); // ZGFua29nYW which is URI safe +Base64.encode(utf8); // 5bCP6aO85by+ +Base64.encode(utf8, true) // 5bCP6aO85by- +Base64.encodeURI(utf8); // 5bCP6aO85by- +``` + +```javascript +Base64.decode( 'ZGFua29nYWk=');// dankogai +Base64.decode( 'ZGFua29nYWk'); // dankogai +Base64.atob( 'ZGFua29nYWk=');// dankogai +Base64.atob( '5bCP6aO85by+');// '小飼弾' which is nonsense +Base64.toUint8Array('ZGFua29nYWk=');// u8s above +Base64.decode( '5bCP6aO85by+');// 小飼弾 +// note .decodeURI() is unnecessary since it accepts both flavors +Base64.decode( '5bCP6aO85by-');// 小飼弾 +``` + +```javascript +Base64.isValid(0); // false: 0 is not string +Base64.isValid(''); // true: a valid Base64-encoded empty byte +Base64.isValid('ZA=='); // true: a valid Base64-encoded 'd' +Base64.isValid('Z A='); // true: whitespaces are okay +Base64.isValid('ZA'); // true: padding ='s can be omitted +Base64.isValid('++'); // true: can be non URL-safe +Base64.isValid('--'); // true: or URL-safe +Base64.isValid('+-'); // false: can't mix both +``` + +### Built-in Extensions + +By default `Base64` leaves built-in prototypes untouched. But you can extend them as below. + +```javascript +// you have to explicitly extend String.prototype +Base64.extendString(); +// once extended, you can do the following +'dankogai'.toBase64(); // ZGFua29nYWk= +'小飼弾'.toBase64(); // 5bCP6aO85by+ +'小飼弾'.toBase64(true); // 5bCP6aO85by- +'小飼弾'.toBase64URI(); // 5bCP6aO85by- ab alias of .toBase64(true) +'小飼弾'.toBase64URL(); // 5bCP6aO85by- an alias of .toBase64URI() +'ZGFua29nYWk='.fromBase64(); // dankogai +'5bCP6aO85by+'.fromBase64(); // 小飼弾 +'5bCP6aO85by-'.fromBase64(); // 小飼弾 +'5bCP6aO85by-'.toUint8Array();// u8s above +``` + +```javascript +// you have to explicitly extend Uint8Array.prototype +Base64.extendUint8Array(); +// once extended, you can do the following +u8s.toBase64(); // 'ZGFua29nYWk=' +u8s.toBase64URI(); // 'ZGFua29nYWk' +u8s.toBase64URL(); // 'ZGFua29nYWk' an alias of .toBase64URI() +``` + +```javascript +// extend all at once +Base64.extendBuiltins() +``` + +## `.decode()` vs `.atob` (and `.encode()` vs `btoa()`) + +Suppose you have: + +``` +var pngBase64 = + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="; +``` + +Which is a Base64-encoded 1x1 transparent PNG, **DO NOT USE** `Base64.decode(pngBase64)`.  Use `Base64.atob(pngBase64)` instead.  `Base64.decode()` decodes to UTF-8 string while `Base64.atob()` decodes to bytes, which is compatible to browser built-in `atob()` (Which is absent in node.js).  The same rule applies to the opposite direction. + +Or even better, `Base64.toUint8Array(pngBase64)`. + +## Brief History + +* Since version 3.3 it is written in TypeScript. Now `base64.mjs` is compiled from `base64.ts` then `base64.js` is generated from `base64.mjs`. +* Since version 3.7 `base64.js` is ES5-compatible again (hence IE11-compatible). +* Since 3.0 `js-base64` switch to ES2015 module so it is no longer compatible with legacy browsers like IE (see above) diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.d.mts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.d.mts new file mode 100644 index 0000000..e44249c --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.d.mts @@ -0,0 +1,135 @@ +/** + * base64.ts + * + * Licensed under the BSD 3-Clause License. + * http://opensource.org/licenses/BSD-3-Clause + * + * References: + * http://en.wikipedia.org/wiki/Base64 + * + * @author Dan Kogai (https://github.com/dankogai) + */ +declare const version = "3.7.7"; +/** + * @deprecated use lowercase `version`. + */ +declare const VERSION = "3.7.7"; +/** + * polyfill version of `btoa` + */ +declare const btoaPolyfill: (bin: string) => string; +/** + * does what `window.btoa` of web browsers do. + * @param {String} bin binary string + * @returns {string} Base64-encoded string + */ +declare const _btoa: (bin: string) => string; +/** + * converts a Uint8Array to a Base64 string. + * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5 + * @returns {string} Base64 string + */ +declare const fromUint8Array: (u8a: Uint8Array, urlsafe?: boolean) => string; +/** + * @deprecated should have been internal use only. + * @param {string} src UTF-8 string + * @returns {string} UTF-16 string + */ +declare const utob: (u: string) => string; +/** + * converts a UTF-8-encoded string to a Base64 string. + * @param {boolean} [urlsafe] if `true` make the result URL-safe + * @returns {string} Base64 string + */ +declare const encode: (src: string, urlsafe?: boolean) => string; +/** + * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5. + * @returns {string} Base64 string + */ +declare const encodeURI: (src: string) => string; +/** + * @deprecated should have been internal use only. + * @param {string} src UTF-16 string + * @returns {string} UTF-8 string + */ +declare const btou: (b: string) => string; +/** + * polyfill version of `atob` + */ +declare const atobPolyfill: (asc: string) => string; +/** + * does what `window.atob` of web browsers do. + * @param {String} asc Base64-encoded string + * @returns {string} binary string + */ +declare const _atob: (asc: string) => string; +/** + * converts a Base64 string to a Uint8Array. + */ +declare const toUint8Array: (a: string) => Uint8Array; +/** + * converts a Base64 string to a UTF-8 string. + * @param {String} src Base64 string. Both normal and URL-safe are supported + * @returns {string} UTF-8 string + */ +declare const decode: (src: string) => string; +/** + * check if a value is a valid Base64 string + * @param {String} src a value to check + */ +declare const isValid: (src: any) => boolean; +/** + * extend String.prototype with relevant methods + */ +declare const extendString: () => void; +/** + * extend Uint8Array.prototype with relevant methods + */ +declare const extendUint8Array: () => void; +/** + * extend Builtin prototypes with relevant methods + */ +declare const extendBuiltins: () => void; +declare const gBase64: { + version: string; + VERSION: string; + atob: (asc: string) => string; + atobPolyfill: (asc: string) => string; + btoa: (bin: string) => string; + btoaPolyfill: (bin: string) => string; + fromBase64: (src: string) => string; + toBase64: (src: string, urlsafe?: boolean) => string; + encode: (src: string, urlsafe?: boolean) => string; + encodeURI: (src: string) => string; + encodeURL: (src: string) => string; + utob: (u: string) => string; + btou: (b: string) => string; + decode: (src: string) => string; + isValid: (src: any) => boolean; + fromUint8Array: (u8a: Uint8Array, urlsafe?: boolean) => string; + toUint8Array: (a: string) => Uint8Array; + extendString: () => void; + extendUint8Array: () => void; + extendBuiltins: () => void; +}; +export { version }; +export { VERSION }; +export { _atob as atob }; +export { atobPolyfill }; +export { _btoa as btoa }; +export { btoaPolyfill }; +export { decode as fromBase64 }; +export { encode as toBase64 }; +export { utob }; +export { encode }; +export { encodeURI }; +export { encodeURI as encodeURL }; +export { btou }; +export { decode }; +export { isValid }; +export { fromUint8Array }; +export { toUint8Array }; +export { extendString }; +export { extendUint8Array }; +export { extendBuiltins }; +export { gBase64 as Base64 }; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.d.ts b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.d.ts new file mode 100644 index 0000000..e44249c --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.d.ts @@ -0,0 +1,135 @@ +/** + * base64.ts + * + * Licensed under the BSD 3-Clause License. + * http://opensource.org/licenses/BSD-3-Clause + * + * References: + * http://en.wikipedia.org/wiki/Base64 + * + * @author Dan Kogai (https://github.com/dankogai) + */ +declare const version = "3.7.7"; +/** + * @deprecated use lowercase `version`. + */ +declare const VERSION = "3.7.7"; +/** + * polyfill version of `btoa` + */ +declare const btoaPolyfill: (bin: string) => string; +/** + * does what `window.btoa` of web browsers do. + * @param {String} bin binary string + * @returns {string} Base64-encoded string + */ +declare const _btoa: (bin: string) => string; +/** + * converts a Uint8Array to a Base64 string. + * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5 + * @returns {string} Base64 string + */ +declare const fromUint8Array: (u8a: Uint8Array, urlsafe?: boolean) => string; +/** + * @deprecated should have been internal use only. + * @param {string} src UTF-8 string + * @returns {string} UTF-16 string + */ +declare const utob: (u: string) => string; +/** + * converts a UTF-8-encoded string to a Base64 string. + * @param {boolean} [urlsafe] if `true` make the result URL-safe + * @returns {string} Base64 string + */ +declare const encode: (src: string, urlsafe?: boolean) => string; +/** + * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5. + * @returns {string} Base64 string + */ +declare const encodeURI: (src: string) => string; +/** + * @deprecated should have been internal use only. + * @param {string} src UTF-16 string + * @returns {string} UTF-8 string + */ +declare const btou: (b: string) => string; +/** + * polyfill version of `atob` + */ +declare const atobPolyfill: (asc: string) => string; +/** + * does what `window.atob` of web browsers do. + * @param {String} asc Base64-encoded string + * @returns {string} binary string + */ +declare const _atob: (asc: string) => string; +/** + * converts a Base64 string to a Uint8Array. + */ +declare const toUint8Array: (a: string) => Uint8Array; +/** + * converts a Base64 string to a UTF-8 string. + * @param {String} src Base64 string. Both normal and URL-safe are supported + * @returns {string} UTF-8 string + */ +declare const decode: (src: string) => string; +/** + * check if a value is a valid Base64 string + * @param {String} src a value to check + */ +declare const isValid: (src: any) => boolean; +/** + * extend String.prototype with relevant methods + */ +declare const extendString: () => void; +/** + * extend Uint8Array.prototype with relevant methods + */ +declare const extendUint8Array: () => void; +/** + * extend Builtin prototypes with relevant methods + */ +declare const extendBuiltins: () => void; +declare const gBase64: { + version: string; + VERSION: string; + atob: (asc: string) => string; + atobPolyfill: (asc: string) => string; + btoa: (bin: string) => string; + btoaPolyfill: (bin: string) => string; + fromBase64: (src: string) => string; + toBase64: (src: string, urlsafe?: boolean) => string; + encode: (src: string, urlsafe?: boolean) => string; + encodeURI: (src: string) => string; + encodeURL: (src: string) => string; + utob: (u: string) => string; + btou: (b: string) => string; + decode: (src: string) => string; + isValid: (src: any) => boolean; + fromUint8Array: (u8a: Uint8Array, urlsafe?: boolean) => string; + toUint8Array: (a: string) => Uint8Array; + extendString: () => void; + extendUint8Array: () => void; + extendBuiltins: () => void; +}; +export { version }; +export { VERSION }; +export { _atob as atob }; +export { atobPolyfill }; +export { _btoa as btoa }; +export { btoaPolyfill }; +export { decode as fromBase64 }; +export { encode as toBase64 }; +export { utob }; +export { encode }; +export { encodeURI }; +export { encodeURI as encodeURL }; +export { btou }; +export { decode }; +export { isValid }; +export { fromUint8Array }; +export { toUint8Array }; +export { extendString }; +export { extendUint8Array }; +export { extendBuiltins }; +export { gBase64 as Base64 }; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.js new file mode 100644 index 0000000..dc837a7 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.js @@ -0,0 +1,314 @@ +// +// THIS FILE IS AUTOMATICALLY GENERATED! DO NOT EDIT BY HAND! +// +; +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' + ? module.exports = factory() + : typeof define === 'function' && define.amd + ? define(factory) : + // cf. https://github.com/dankogai/js-base64/issues/119 + (function () { + // existing version for noConflict() + var _Base64 = global.Base64; + var gBase64 = factory(); + gBase64.noConflict = function () { + global.Base64 = _Base64; + return gBase64; + }; + if (global.Meteor) { // Meteor.js + Base64 = gBase64; + } + global.Base64 = gBase64; + })(); +}((typeof self !== 'undefined' ? self + : typeof window !== 'undefined' ? window + : typeof global !== 'undefined' ? global + : this), function () { + 'use strict'; + /** + * base64.ts + * + * Licensed under the BSD 3-Clause License. + * http://opensource.org/licenses/BSD-3-Clause + * + * References: + * http://en.wikipedia.org/wiki/Base64 + * + * @author Dan Kogai (https://github.com/dankogai) + */ + var version = '3.7.7'; + /** + * @deprecated use lowercase `version`. + */ + var VERSION = version; + var _hasBuffer = typeof Buffer === 'function'; + var _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined; + var _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined; + var b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + var b64chs = Array.prototype.slice.call(b64ch); + var b64tab = (function (a) { + var tab = {}; + a.forEach(function (c, i) { return tab[c] = i; }); + return tab; + })(b64chs); + var b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/; + var _fromCC = String.fromCharCode.bind(String); + var _U8Afrom = typeof Uint8Array.from === 'function' + ? Uint8Array.from.bind(Uint8Array) + : function (it) { return new Uint8Array(Array.prototype.slice.call(it, 0)); }; + var _mkUriSafe = function (src) { return src + .replace(/=/g, '').replace(/[+\/]/g, function (m0) { return m0 == '+' ? '-' : '_'; }); }; + var _tidyB64 = function (s) { return s.replace(/[^A-Za-z0-9\+\/]/g, ''); }; + /** + * polyfill version of `btoa` + */ + var btoaPolyfill = function (bin) { + // console.log('polyfilled'); + var u32, c0, c1, c2, asc = ''; + var pad = bin.length % 3; + for (var i = 0; i < bin.length;) { + if ((c0 = bin.charCodeAt(i++)) > 255 || + (c1 = bin.charCodeAt(i++)) > 255 || + (c2 = bin.charCodeAt(i++)) > 255) + throw new TypeError('invalid character found'); + u32 = (c0 << 16) | (c1 << 8) | c2; + asc += b64chs[u32 >> 18 & 63] + + b64chs[u32 >> 12 & 63] + + b64chs[u32 >> 6 & 63] + + b64chs[u32 & 63]; + } + return pad ? asc.slice(0, pad - 3) + "===".substring(pad) : asc; + }; + /** + * does what `window.btoa` of web browsers do. + * @param {String} bin binary string + * @returns {string} Base64-encoded string + */ + var _btoa = typeof btoa === 'function' ? function (bin) { return btoa(bin); } + : _hasBuffer ? function (bin) { return Buffer.from(bin, 'binary').toString('base64'); } + : btoaPolyfill; + var _fromUint8Array = _hasBuffer + ? function (u8a) { return Buffer.from(u8a).toString('base64'); } + : function (u8a) { + // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326 + var maxargs = 0x1000; + var strs = []; + for (var i = 0, l = u8a.length; i < l; i += maxargs) { + strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs))); + } + return _btoa(strs.join('')); + }; + /** + * converts a Uint8Array to a Base64 string. + * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5 + * @returns {string} Base64 string + */ + var fromUint8Array = function (u8a, urlsafe) { + if (urlsafe === void 0) { urlsafe = false; } + return urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a); + }; + // This trick is found broken https://github.com/dankogai/js-base64/issues/130 + // const utob = (src: string) => unescape(encodeURIComponent(src)); + // reverting good old fationed regexp + var cb_utob = function (c) { + if (c.length < 2) { + var cc = c.charCodeAt(0); + return cc < 0x80 ? c + : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6)) + + _fromCC(0x80 | (cc & 0x3f))) + : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f)) + + _fromCC(0x80 | ((cc >>> 6) & 0x3f)) + + _fromCC(0x80 | (cc & 0x3f))); + } + else { + var cc = 0x10000 + + (c.charCodeAt(0) - 0xD800) * 0x400 + + (c.charCodeAt(1) - 0xDC00); + return (_fromCC(0xf0 | ((cc >>> 18) & 0x07)) + + _fromCC(0x80 | ((cc >>> 12) & 0x3f)) + + _fromCC(0x80 | ((cc >>> 6) & 0x3f)) + + _fromCC(0x80 | (cc & 0x3f))); + } + }; + var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; + /** + * @deprecated should have been internal use only. + * @param {string} src UTF-8 string + * @returns {string} UTF-16 string + */ + var utob = function (u) { return u.replace(re_utob, cb_utob); }; + // + var _encode = _hasBuffer + ? function (s) { return Buffer.from(s, 'utf8').toString('base64'); } + : _TE + ? function (s) { return _fromUint8Array(_TE.encode(s)); } + : function (s) { return _btoa(utob(s)); }; + /** + * converts a UTF-8-encoded string to a Base64 string. + * @param {boolean} [urlsafe] if `true` make the result URL-safe + * @returns {string} Base64 string + */ + var encode = function (src, urlsafe) { + if (urlsafe === void 0) { urlsafe = false; } + return urlsafe + ? _mkUriSafe(_encode(src)) + : _encode(src); + }; + /** + * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5. + * @returns {string} Base64 string + */ + var encodeURI = function (src) { return encode(src, true); }; + // This trick is found broken https://github.com/dankogai/js-base64/issues/130 + // const btou = (src: string) => decodeURIComponent(escape(src)); + // reverting good old fationed regexp + var re_btou = /[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g; + var cb_btou = function (cccc) { + switch (cccc.length) { + case 4: + var cp = ((0x07 & cccc.charCodeAt(0)) << 18) + | ((0x3f & cccc.charCodeAt(1)) << 12) + | ((0x3f & cccc.charCodeAt(2)) << 6) + | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000; + return (_fromCC((offset >>> 10) + 0xD800) + + _fromCC((offset & 0x3FF) + 0xDC00)); + case 3: + return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12) + | ((0x3f & cccc.charCodeAt(1)) << 6) + | (0x3f & cccc.charCodeAt(2))); + default: + return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6) + | (0x3f & cccc.charCodeAt(1))); + } + }; + /** + * @deprecated should have been internal use only. + * @param {string} src UTF-16 string + * @returns {string} UTF-8 string + */ + var btou = function (b) { return b.replace(re_btou, cb_btou); }; + /** + * polyfill version of `atob` + */ + var atobPolyfill = function (asc) { + // console.log('polyfilled'); + asc = asc.replace(/\s+/g, ''); + if (!b64re.test(asc)) + throw new TypeError('malformed base64.'); + asc += '=='.slice(2 - (asc.length & 3)); + var u24, bin = '', r1, r2; + for (var i = 0; i < asc.length;) { + u24 = b64tab[asc.charAt(i++)] << 18 + | b64tab[asc.charAt(i++)] << 12 + | (r1 = b64tab[asc.charAt(i++)]) << 6 + | (r2 = b64tab[asc.charAt(i++)]); + bin += r1 === 64 ? _fromCC(u24 >> 16 & 255) + : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255) + : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255); + } + return bin; + }; + /** + * does what `window.atob` of web browsers do. + * @param {String} asc Base64-encoded string + * @returns {string} binary string + */ + var _atob = typeof atob === 'function' ? function (asc) { return atob(_tidyB64(asc)); } + : _hasBuffer ? function (asc) { return Buffer.from(asc, 'base64').toString('binary'); } + : atobPolyfill; + // + var _toUint8Array = _hasBuffer + ? function (a) { return _U8Afrom(Buffer.from(a, 'base64')); } + : function (a) { return _U8Afrom(_atob(a).split('').map(function (c) { return c.charCodeAt(0); })); }; + /** + * converts a Base64 string to a Uint8Array. + */ + var toUint8Array = function (a) { return _toUint8Array(_unURI(a)); }; + // + var _decode = _hasBuffer + ? function (a) { return Buffer.from(a, 'base64').toString('utf8'); } + : _TD + ? function (a) { return _TD.decode(_toUint8Array(a)); } + : function (a) { return btou(_atob(a)); }; + var _unURI = function (a) { return _tidyB64(a.replace(/[-_]/g, function (m0) { return m0 == '-' ? '+' : '/'; })); }; + /** + * converts a Base64 string to a UTF-8 string. + * @param {String} src Base64 string. Both normal and URL-safe are supported + * @returns {string} UTF-8 string + */ + var decode = function (src) { return _decode(_unURI(src)); }; + /** + * check if a value is a valid Base64 string + * @param {String} src a value to check + */ + var isValid = function (src) { + if (typeof src !== 'string') + return false; + var s = src.replace(/\s+/g, '').replace(/={0,2}$/, ''); + return !/[^\s0-9a-zA-Z\+/]/.test(s) || !/[^\s0-9a-zA-Z\-_]/.test(s); + }; + // + var _noEnum = function (v) { + return { + value: v, enumerable: false, writable: true, configurable: true + }; + }; + /** + * extend String.prototype with relevant methods + */ + var extendString = function () { + var _add = function (name, body) { return Object.defineProperty(String.prototype, name, _noEnum(body)); }; + _add('fromBase64', function () { return decode(this); }); + _add('toBase64', function (urlsafe) { return encode(this, urlsafe); }); + _add('toBase64URI', function () { return encode(this, true); }); + _add('toBase64URL', function () { return encode(this, true); }); + _add('toUint8Array', function () { return toUint8Array(this); }); + }; + /** + * extend Uint8Array.prototype with relevant methods + */ + var extendUint8Array = function () { + var _add = function (name, body) { return Object.defineProperty(Uint8Array.prototype, name, _noEnum(body)); }; + _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); }); + _add('toBase64URI', function () { return fromUint8Array(this, true); }); + _add('toBase64URL', function () { return fromUint8Array(this, true); }); + }; + /** + * extend Builtin prototypes with relevant methods + */ + var extendBuiltins = function () { + extendString(); + extendUint8Array(); + }; + var gBase64 = { + version: version, + VERSION: VERSION, + atob: _atob, + atobPolyfill: atobPolyfill, + btoa: _btoa, + btoaPolyfill: btoaPolyfill, + fromBase64: decode, + toBase64: encode, + encode: encode, + encodeURI: encodeURI, + encodeURL: encodeURI, + utob: utob, + btou: btou, + decode: decode, + isValid: isValid, + fromUint8Array: fromUint8Array, + toUint8Array: toUint8Array, + extendString: extendString, + extendUint8Array: extendUint8Array, + extendBuiltins: extendBuiltins + }; + // + // export Base64 to the namespace + // + // ES5 is yet to have Object.assign() that may make transpilers unhappy. + // gBase64.Base64 = Object.assign({}, gBase64); + gBase64.Base64 = {}; + Object.keys(gBase64).forEach(function (k) { return gBase64.Base64[k] = gBase64[k]; }); + return gBase64; +})); diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.mjs b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.mjs new file mode 100644 index 0000000..fe9cfa5 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/base64.mjs @@ -0,0 +1,294 @@ +/** + * base64.ts + * + * Licensed under the BSD 3-Clause License. + * http://opensource.org/licenses/BSD-3-Clause + * + * References: + * http://en.wikipedia.org/wiki/Base64 + * + * @author Dan Kogai (https://github.com/dankogai) + */ +const version = '3.7.7'; +/** + * @deprecated use lowercase `version`. + */ +const VERSION = version; +const _hasBuffer = typeof Buffer === 'function'; +const _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined; +const _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined; +const b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; +const b64chs = Array.prototype.slice.call(b64ch); +const b64tab = ((a) => { + let tab = {}; + a.forEach((c, i) => tab[c] = i); + return tab; +})(b64chs); +const b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/; +const _fromCC = String.fromCharCode.bind(String); +const _U8Afrom = typeof Uint8Array.from === 'function' + ? Uint8Array.from.bind(Uint8Array) + : (it) => new Uint8Array(Array.prototype.slice.call(it, 0)); +const _mkUriSafe = (src) => src + .replace(/=/g, '').replace(/[+\/]/g, (m0) => m0 == '+' ? '-' : '_'); +const _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\+\/]/g, ''); +/** + * polyfill version of `btoa` + */ +const btoaPolyfill = (bin) => { + // console.log('polyfilled'); + let u32, c0, c1, c2, asc = ''; + const pad = bin.length % 3; + for (let i = 0; i < bin.length;) { + if ((c0 = bin.charCodeAt(i++)) > 255 || + (c1 = bin.charCodeAt(i++)) > 255 || + (c2 = bin.charCodeAt(i++)) > 255) + throw new TypeError('invalid character found'); + u32 = (c0 << 16) | (c1 << 8) | c2; + asc += b64chs[u32 >> 18 & 63] + + b64chs[u32 >> 12 & 63] + + b64chs[u32 >> 6 & 63] + + b64chs[u32 & 63]; + } + return pad ? asc.slice(0, pad - 3) + "===".substring(pad) : asc; +}; +/** + * does what `window.btoa` of web browsers do. + * @param {String} bin binary string + * @returns {string} Base64-encoded string + */ +const _btoa = typeof btoa === 'function' ? (bin) => btoa(bin) + : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64') + : btoaPolyfill; +const _fromUint8Array = _hasBuffer + ? (u8a) => Buffer.from(u8a).toString('base64') + : (u8a) => { + // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326 + const maxargs = 0x1000; + let strs = []; + for (let i = 0, l = u8a.length; i < l; i += maxargs) { + strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs))); + } + return _btoa(strs.join('')); + }; +/** + * converts a Uint8Array to a Base64 string. + * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5 + * @returns {string} Base64 string + */ +const fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a); +// This trick is found broken https://github.com/dankogai/js-base64/issues/130 +// const utob = (src: string) => unescape(encodeURIComponent(src)); +// reverting good old fationed regexp +const cb_utob = (c) => { + if (c.length < 2) { + var cc = c.charCodeAt(0); + return cc < 0x80 ? c + : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6)) + + _fromCC(0x80 | (cc & 0x3f))) + : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f)) + + _fromCC(0x80 | ((cc >>> 6) & 0x3f)) + + _fromCC(0x80 | (cc & 0x3f))); + } + else { + var cc = 0x10000 + + (c.charCodeAt(0) - 0xD800) * 0x400 + + (c.charCodeAt(1) - 0xDC00); + return (_fromCC(0xf0 | ((cc >>> 18) & 0x07)) + + _fromCC(0x80 | ((cc >>> 12) & 0x3f)) + + _fromCC(0x80 | ((cc >>> 6) & 0x3f)) + + _fromCC(0x80 | (cc & 0x3f))); + } +}; +const re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g; +/** + * @deprecated should have been internal use only. + * @param {string} src UTF-8 string + * @returns {string} UTF-16 string + */ +const utob = (u) => u.replace(re_utob, cb_utob); +// +const _encode = _hasBuffer + ? (s) => Buffer.from(s, 'utf8').toString('base64') + : _TE + ? (s) => _fromUint8Array(_TE.encode(s)) + : (s) => _btoa(utob(s)); +/** + * converts a UTF-8-encoded string to a Base64 string. + * @param {boolean} [urlsafe] if `true` make the result URL-safe + * @returns {string} Base64 string + */ +const encode = (src, urlsafe = false) => urlsafe + ? _mkUriSafe(_encode(src)) + : _encode(src); +/** + * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5. + * @returns {string} Base64 string + */ +const encodeURI = (src) => encode(src, true); +// This trick is found broken https://github.com/dankogai/js-base64/issues/130 +// const btou = (src: string) => decodeURIComponent(escape(src)); +// reverting good old fationed regexp +const re_btou = /[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g; +const cb_btou = (cccc) => { + switch (cccc.length) { + case 4: + var cp = ((0x07 & cccc.charCodeAt(0)) << 18) + | ((0x3f & cccc.charCodeAt(1)) << 12) + | ((0x3f & cccc.charCodeAt(2)) << 6) + | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000; + return (_fromCC((offset >>> 10) + 0xD800) + + _fromCC((offset & 0x3FF) + 0xDC00)); + case 3: + return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12) + | ((0x3f & cccc.charCodeAt(1)) << 6) + | (0x3f & cccc.charCodeAt(2))); + default: + return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6) + | (0x3f & cccc.charCodeAt(1))); + } +}; +/** + * @deprecated should have been internal use only. + * @param {string} src UTF-16 string + * @returns {string} UTF-8 string + */ +const btou = (b) => b.replace(re_btou, cb_btou); +/** + * polyfill version of `atob` + */ +const atobPolyfill = (asc) => { + // console.log('polyfilled'); + asc = asc.replace(/\s+/g, ''); + if (!b64re.test(asc)) + throw new TypeError('malformed base64.'); + asc += '=='.slice(2 - (asc.length & 3)); + let u24, bin = '', r1, r2; + for (let i = 0; i < asc.length;) { + u24 = b64tab[asc.charAt(i++)] << 18 + | b64tab[asc.charAt(i++)] << 12 + | (r1 = b64tab[asc.charAt(i++)]) << 6 + | (r2 = b64tab[asc.charAt(i++)]); + bin += r1 === 64 ? _fromCC(u24 >> 16 & 255) + : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255) + : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255); + } + return bin; +}; +/** + * does what `window.atob` of web browsers do. + * @param {String} asc Base64-encoded string + * @returns {string} binary string + */ +const _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc)) + : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary') + : atobPolyfill; +// +const _toUint8Array = _hasBuffer + ? (a) => _U8Afrom(Buffer.from(a, 'base64')) + : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0))); +/** + * converts a Base64 string to a Uint8Array. + */ +const toUint8Array = (a) => _toUint8Array(_unURI(a)); +// +const _decode = _hasBuffer + ? (a) => Buffer.from(a, 'base64').toString('utf8') + : _TD + ? (a) => _TD.decode(_toUint8Array(a)) + : (a) => btou(_atob(a)); +const _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/')); +/** + * converts a Base64 string to a UTF-8 string. + * @param {String} src Base64 string. Both normal and URL-safe are supported + * @returns {string} UTF-8 string + */ +const decode = (src) => _decode(_unURI(src)); +/** + * check if a value is a valid Base64 string + * @param {String} src a value to check + */ +const isValid = (src) => { + if (typeof src !== 'string') + return false; + const s = src.replace(/\s+/g, '').replace(/={0,2}$/, ''); + return !/[^\s0-9a-zA-Z\+/]/.test(s) || !/[^\s0-9a-zA-Z\-_]/.test(s); +}; +// +const _noEnum = (v) => { + return { + value: v, enumerable: false, writable: true, configurable: true + }; +}; +/** + * extend String.prototype with relevant methods + */ +const extendString = function () { + const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body)); + _add('fromBase64', function () { return decode(this); }); + _add('toBase64', function (urlsafe) { return encode(this, urlsafe); }); + _add('toBase64URI', function () { return encode(this, true); }); + _add('toBase64URL', function () { return encode(this, true); }); + _add('toUint8Array', function () { return toUint8Array(this); }); +}; +/** + * extend Uint8Array.prototype with relevant methods + */ +const extendUint8Array = function () { + const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body)); + _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); }); + _add('toBase64URI', function () { return fromUint8Array(this, true); }); + _add('toBase64URL', function () { return fromUint8Array(this, true); }); +}; +/** + * extend Builtin prototypes with relevant methods + */ +const extendBuiltins = () => { + extendString(); + extendUint8Array(); +}; +const gBase64 = { + version: version, + VERSION: VERSION, + atob: _atob, + atobPolyfill: atobPolyfill, + btoa: _btoa, + btoaPolyfill: btoaPolyfill, + fromBase64: decode, + toBase64: encode, + encode: encode, + encodeURI: encodeURI, + encodeURL: encodeURI, + utob: utob, + btou: btou, + decode: decode, + isValid: isValid, + fromUint8Array: fromUint8Array, + toUint8Array: toUint8Array, + extendString: extendString, + extendUint8Array: extendUint8Array, + extendBuiltins: extendBuiltins +}; +// makecjs:CUT // +export { version }; +export { VERSION }; +export { _atob as atob }; +export { atobPolyfill }; +export { _btoa as btoa }; +export { btoaPolyfill }; +export { decode as fromBase64 }; +export { encode as toBase64 }; +export { utob }; +export { encode }; +export { encodeURI }; +export { encodeURI as encodeURL }; +export { btou }; +export { decode }; +export { isValid }; +export { fromUint8Array }; +export { toUint8Array }; +export { extendString }; +export { extendUint8Array }; +export { extendBuiltins }; +// and finally, +export { gBase64 as Base64 }; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/package.json b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/package.json new file mode 100644 index 0000000..477bbc5 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/js-base64/package.json @@ -0,0 +1,43 @@ +{ + "name": "js-base64", + "version": "3.7.7", + "description": "Yet another Base64 transcoder in pure-JS", + "main": "base64.js", + "module": "base64.mjs", + "types": "base64.d.ts", + "sideEffects": false, + "files": [ + "base64.js", + "base64.mjs", + "base64.d.ts", + "base64.d.mts" + ], + "exports": { + ".": { + "import": { + "types": "./base64.d.mts", + "default": "./base64.mjs" + }, + "require": { + "types": "./base64.d.ts", + "default": "./base64.js" + } + }, + "./package.json": "./package.json" + }, + "scripts": { + "test": "make clean && make test" + }, + "devDependencies": { + "@types/node": "^20.11.5", + "mocha": "^10.2.0", + "typescript": "^5.3.3" + }, + "repository": "git+https://github.com/dankogai/js-base64.git", + "keywords": [ + "base64", + "binary" + ], + "author": "Dan Kogai", + "license": "BSD-3-Clause" +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/LICENSE b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/LICENSE new file mode 100644 index 0000000..f27b176 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Alexey + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/README.md b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/README.md new file mode 100644 index 0000000..8ab2533 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/README.md @@ -0,0 +1,147 @@ + + +# react-native-geocoder + +[![CircleCI](https://circleci.com/gh/devfd/react-native-geocoder/tree/master.svg?style=shield)](https://circleci.com/gh/devfd/react-native-geocoder/tree/master) + +geocoding services for react native + + +## Version table +| Geocoder Version | RN | +| ------- |:----------| +| >=0.4.6 | >= 0.40.0 | +| <0.4.5 | <0.40.0 | + + +## Install +``` +npm install --save react-native-geocoder +``` +## iOS + +1. In the XCode's "Project navigator", right click on Libraries folder under your project ➜ `Add Files to <...>` +2. Go to `node_modules` ➜ `react-native-geocoder` and add `ios/RNGeocoder.xcodeproj` file +3. Add libRNGeocoder.a to "Build Phases" -> "Link Binary With Libraries" + +## Android +1. In `android/setting.gradle` + +```gradle +... +include ':react-native-geocoder', ':app' +project(':react-native-geocoder').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-geocoder/android') +``` + +3. In `android/app/build.gradle` + +```gradle +... +dependencies { + ... + compile project(':react-native-geocoder') +} +``` + +4. register module (in MainApplication.java) + +```java +import com.devfd.RNGeocoder.RNGeocoderPackage; // <--- import + +public class MainActivity extends ReactActivity { + ...... + + @Override + protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new RNGeocoderPackage()); // <------ add this + } + + ...... + +} + +``` + +## Usage +``` +import Geocoder from 'react-native-geocoder'; + +// Position Geocoding +var NY = { + lat: 40.7809261, + lng: -73.9637594 +}; + +Geocoder.geocodePosition(NY).then(res => { + // res is an Array of geocoding object (see below) +}) +.catch(err => console.log(err)) + +// Address Geocoding +Geocoder.geocodeAddress('New York').then(res => { + // res is an Array of geocoding object (see below) +}) +.catch(err => console.log(err)) +``` + +## Fallback to google maps geocoding + +Geocoding services might not be included in some Android devices (Kindle, some 4.1 devices, non-google devices). For those special cases the lib can fallback to the [online google maps geocoding service](https://developers.google.com/maps/documentation/geocoding/intro#Geocoding) + +```js +import Geocoder from 'react-native-geocoder'; +// simply add your google key +Geocoder.fallbackToGoogle(MY_KEY); + +// use the lib as usual +let ret = await Geocoder.geocodePosition({lat, lng}) +// you get the same results + +``` + +## With async / await +``` +try { + + const res = await Geocoder.geocodePosition(NY); + ... + + const res = await Geocoder.geocodeAddress('London'); + ... +} +catch(err) { + console.log(err); +} +``` + +## Geocoding object format +both iOS and Android will return the following object: + +```js +{ + position: {lat, lng}, + formattedAddress: String, // the full address + feature: String | null, // ex Yosemite Park, Eiffel Tower + streetNumber: String | null, + streetName: String | null, + postalCode: String | null, + locality: String | null, // city name + country: String, + countryCode: String + adminArea: String | null + subAdminArea: String | null, + subLocality: String | null +} +``` + +## Notes + +### iOS +iOS does not allow sending multiple geocoding requests simultaneously, hence if you send a second call, the first one will be cancelled. + +### Android +geocoding may not work on older android devices (4.1) and will not work if Google play services are not available. + + diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/index.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/index.js new file mode 100644 index 0000000..6bbbdfa --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/index.js @@ -0,0 +1,3 @@ +import Geocoder from './js/geocoder.js'; + +export default Geocoder; diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/js/geocoder.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/js/geocoder.js new file mode 100644 index 0000000..3a4563e --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/js/geocoder.js @@ -0,0 +1,34 @@ +import { NativeModules } from 'react-native'; +import GoogleApi from './googleApi.js'; + +const { RNGeocoder } = NativeModules; + +export default { + apiKey: null, + + fallbackToGoogle(key) { + this.apiKey = key; + }, + + geocodePosition(position) { + if (!position || !position.lat || !position.lng) { + return Promise.reject(new Error("invalid position: {lat, lng} required")); + } + + return RNGeocoder.geocodePosition(position).catch(err => { + if (!this.apiKey) { throw err; } + return GoogleApi.geocodePosition(this.apiKey, position); + }); + }, + + geocodeAddress(address) { + if (!address) { + return Promise.reject(new Error("address is null")); + } + + return RNGeocoder.geocodeAddress(address).catch(err => { + if (!this.apiKey) { throw err; } + return GoogleApi.geocodeAddress(this.apiKey, address); + }); + }, +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/js/googleApi.js b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/js/googleApi.js new file mode 100644 index 0000000..4358de7 --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/js/googleApi.js @@ -0,0 +1,87 @@ +const googleUrl = 'https://maps.google.com/maps/api/geocode/json'; + +function format(raw) { + const address = { + position: {}, + formattedAddress: raw.formatted_address || '', + feature: null, + streetNumber: null, + streetName: null, + postalCode: null, + locality: null, + country: null, + countryCode: null, + adminArea: null, + subAdminArea: null, + subLocality: null, + }; + + if (raw.geometry && raw.geometry.location) { + address.position = { + lat: raw.geometry.location.lat, + lng: raw.geometry.location.lng, + } + } + + raw.address_components.forEach(component => { + if (component.types.indexOf('route') !== -1) { + address.streetName = component.long_name; + } + else if (component.types.indexOf('street_number') !== -1) { + address.streetNumber = component.long_name; + } + else if (component.types.indexOf('country') !== -1) { + address.country = component.long_name; + address.countryCode = component.short_name; + } + else if (component.types.indexOf('locality') !== -1) { + address.locality = component.long_name; + } + else if (component.types.indexOf('postal_code') !== -1) { + address.postalCode = component.long_name; + } + else if (component.types.indexOf('administrative_area_level_1') !== -1) { + address.adminArea = component.long_name; + } + else if (component.types.indexOf('administrative_area_level_2') !== -1) { + address.subAdminArea = component.long_name; + } + else if (component.types.indexOf('sublocality') !== -1 || component.types.indexOf('sublocality_level_1') !== -1) { + address.subLocality = component.long_name; + } + else if (component.types.indexOf('point_of_interest') !== -1 || component.types.indexOf('colloquial_area') !== -1) { + address.feature = component.long_name; + } + }); + + return address; +} + +export default { + geocodePosition(apiKey, position) { + if (!apiKey || !position || !position.lat || !position.lng) { + return Promise.reject(new Error("invalid apiKey / position")); + } + + return this.geocodeRequest(`${googleUrl}?key=${apiKey}&latlng=${position.lat},${position.lng}`); + }, + + geocodeAddress(apiKey, address) { + if (!apiKey || !address) { + return Promise.reject(new Error("invalid apiKey / address")); + } + + return this.geocodeRequest(`${googleUrl}?key=${apiKey}&address=${encodeURI(address)}`); + }, + + async geocodeRequest(url) { + const res = await fetch(url); + const json = await res.json(); + + if (!json.results || json.status !== 'OK') { + return Promise.reject(new Error(`geocoding error ${json.status}, ${json.error_message}`)); + } + + return json.results.map(format); + } +} diff --git a/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/package.json b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/package.json new file mode 100644 index 0000000..22e016b --- /dev/null +++ b/Source/javascriptsource/nanoflowcommons/actions/node_modules/react-native-geocoder/package.json @@ -0,0 +1,43 @@ +{ + "name": "react-native-geocoder", + "version": "0.5.0", + "description": "react native geocoding and reverse geocoding", + "main": "index.js", + "scripts": { + "test": "mocha --recursive --require test/setup.js --reporter dot test/unit " + }, + "keywords": [ + "react-component", + "react-native", + "geocoding", + "ios", + "android" + ], + "author": { + "name": "devfd", + "email": "hello@devfd.me", + "url": "https://github.com/devfd" + }, + "repository": { + "type": "git", + "url": "https://github.com/devfd/react-native-geocoder" + }, + "bugs": { + "url": "https://github.com/devfd/react-native-geocoder/issues" + }, + "homepage": "https://github.com/devfd/react-native-geocoder", + "license": "MIT", + "devDependencies": { + "appium": "^1.5.3", + "babel-core": "^6.11.4", + "babel-polyfill": "^6.9.1", + "babel-preset-react-native": "^1.9.0", + "chai": "^3.5.0", + "colors": "^1.1.2", + "mocha": "^3.0.0", + "proxyquire": "^1.7.10", + "sinon": "^1.17.5", + "sinon-chai": "^2.8.0", + "wd": "^0.4.0" + } +} diff --git a/Source/javasource/system/actions/VerifyPassword.java b/Source/javasource/system/actions/VerifyPassword.java index e448ead..c4d7d06 100644 --- a/Source/javasource/system/actions/VerifyPassword.java +++ b/Source/javasource/system/actions/VerifyPassword.java @@ -12,12 +12,12 @@ import com.mendix.core.Core; import com.mendix.systemwideinterfaces.core.IUser; import com.mendix.systemwideinterfaces.core.IContext; -import com.mendix.webui.CustomJavaAction; +import com.mendix.systemwideinterfaces.core.UserAction; /** * Verifies that the specified user name/password combination is valid. */ -public class VerifyPassword extends CustomJavaAction +public class VerifyPassword extends UserAction { private final java.lang.String userName; private final java.lang.String password; diff --git a/Source/javasource/system/proxies/Error.java b/Source/javasource/system/proxies/Error.java index 3bfe38a..e4d3f8d 100644 --- a/Source/javasource/system/proxies/Error.java +++ b/Source/javasource/system/proxies/Error.java @@ -185,13 +185,13 @@ public final void setStacktrace(com.mendix.systemwideinterfaces.core.IContext co getMendixObject().setValue(context, MemberNames.Stacktrace.toString(), stacktrace); } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return errorMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/FileDocument.java b/Source/javasource/system/proxies/FileDocument.java index 360fe50..50c7487 100644 --- a/Source/javasource/system/proxies/FileDocument.java +++ b/Source/javasource/system/proxies/FileDocument.java @@ -213,7 +213,7 @@ public final void setDeleteAfterDownload(com.mendix.systemwideinterfaces.core.IC */ public final void getContents(com.mendix.systemwideinterfaces.core.IContext context, java.io.OutputStream outputStream) { - com.mendix.core.objectmanagement.member.MendixBinary binary = (com.mendix.core.objectmanagement.member.MendixBinary) getMendixObject().getMember(context, MemberNames.Contents.toString()); + com.mendix.core.objectmanagement.member.MendixBinary binary = (com.mendix.core.objectmanagement.member.MendixBinary) getMendixObject().getMember(MemberNames.Contents.toString()); binary.retrieveValue(context, outputStream); } @@ -232,7 +232,7 @@ public final void setContents(com.mendix.systemwideinterfaces.core.IContext cont if (getMendixObject().getState() == com.mendix.systemwideinterfaces.core.IMendixObject.ObjectState.INSTANTIATED) { try { commit(); } catch (com.mendix.core.CoreException ex) { } } - com.mendix.core.objectmanagement.member.MendixBinary binary = (com.mendix.core.objectmanagement.member.MendixBinary) getMendixObject().getMember(context, MemberNames.Contents.toString()); + com.mendix.core.objectmanagement.member.MendixBinary binary = (com.mendix.core.objectmanagement.member.MendixBinary) getMendixObject().getMember(MemberNames.Contents.toString()); binary.storeValue(context, inputStream, length); } @@ -308,13 +308,13 @@ public final void setSize(com.mendix.systemwideinterfaces.core.IContext context, getMendixObject().setValue(context, MemberNames.Size.toString(), size); } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return fileDocumentMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/HttpHeader.java b/Source/javasource/system/proxies/HttpHeader.java index 97f95ea..f4a9fe3 100644 --- a/Source/javasource/system/proxies/HttpHeader.java +++ b/Source/javasource/system/proxies/HttpHeader.java @@ -22,7 +22,8 @@ public enum MemberNames { Key("Key"), Value("Value"), - HttpHeaders("System.HttpHeaders"); + HttpHeaders("System.HttpHeaders"), + HttpHeader_ConsumedODataConfiguration("System.HttpHeader_ConsumedODataConfiguration"); private final java.lang.String metaName; @@ -193,13 +194,60 @@ public final void setHttpHeaders(com.mendix.systemwideinterfaces.core.IContext c } } - @Override + /** + * @throws com.mendix.core.CoreException + * @return value of HttpHeader_ConsumedODataConfiguration + */ + public final system.proxies.ConsumedODataConfiguration getHttpHeader_ConsumedODataConfiguration() throws com.mendix.core.CoreException + { + return getHttpHeader_ConsumedODataConfiguration(getContext()); + } + + /** + * @param context + * @return value of HttpHeader_ConsumedODataConfiguration + * @throws com.mendix.core.CoreException + */ + public final system.proxies.ConsumedODataConfiguration getHttpHeader_ConsumedODataConfiguration(com.mendix.systemwideinterfaces.core.IContext context) throws com.mendix.core.CoreException + { + system.proxies.ConsumedODataConfiguration result = null; + com.mendix.systemwideinterfaces.core.IMendixIdentifier identifier = getMendixObject().getValue(context, MemberNames.HttpHeader_ConsumedODataConfiguration.toString()); + if (identifier != null) { + result = system.proxies.ConsumedODataConfiguration.load(context, identifier); + } + return result; + } + + /** + * Set value of HttpHeader_ConsumedODataConfiguration + * @param httpheader_consumedodataconfiguration + */ + public final void setHttpHeader_ConsumedODataConfiguration(system.proxies.ConsumedODataConfiguration httpheader_consumedodataconfiguration) + { + setHttpHeader_ConsumedODataConfiguration(getContext(), httpheader_consumedodataconfiguration); + } + + /** + * Set value of HttpHeader_ConsumedODataConfiguration + * @param context + * @param httpheader_consumedodataconfiguration + */ + public final void setHttpHeader_ConsumedODataConfiguration(com.mendix.systemwideinterfaces.core.IContext context, system.proxies.ConsumedODataConfiguration httpheader_consumedodataconfiguration) + { + if (httpheader_consumedodataconfiguration == null) { + getMendixObject().setValue(context, MemberNames.HttpHeader_ConsumedODataConfiguration.toString(), null); + } else { + getMendixObject().setValue(context, MemberNames.HttpHeader_ConsumedODataConfiguration.toString(), httpheader_consumedodataconfiguration.getMendixObject().getId()); + } + } + + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return httpHeaderMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/HttpMessage.java b/Source/javasource/system/proxies/HttpMessage.java index c659f43..77852e2 100644 --- a/Source/javasource/system/proxies/HttpMessage.java +++ b/Source/javasource/system/proxies/HttpMessage.java @@ -151,13 +151,13 @@ public final void setContent(com.mendix.systemwideinterfaces.core.IContext conte getMendixObject().setValue(context, MemberNames.Content.toString(), content); } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return httpMessageMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/Language.java b/Source/javasource/system/proxies/Language.java index 26d510d..1a6480b 100644 --- a/Source/javasource/system/proxies/Language.java +++ b/Source/javasource/system/proxies/Language.java @@ -4,6 +4,9 @@ package system.proxies; +/** + * Language support for internationalization. + */ public class Language implements com.mendix.systemwideinterfaces.core.IEntityProxy { private final com.mendix.systemwideinterfaces.core.IMendixObject languageMendixObject; @@ -154,13 +157,13 @@ public final void setDescription(com.mendix.systemwideinterfaces.core.IContext c getMendixObject().setValue(context, MemberNames.Description.toString(), description); } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return languageMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/Paging.java b/Source/javasource/system/proxies/Paging.java index f626167..c1a0f22 100644 --- a/Source/javasource/system/proxies/Paging.java +++ b/Source/javasource/system/proxies/Paging.java @@ -256,13 +256,13 @@ public final void setHasMoreData(com.mendix.systemwideinterfaces.core.IContext c getMendixObject().setValue(context, MemberNames.HasMoreData.toString(), hasmoredata); } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return pagingMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/ScheduledEventInformation.java b/Source/javasource/system/proxies/ScheduledEventInformation.java index e9f9351..31c25cb 100644 --- a/Source/javasource/system/proxies/ScheduledEventInformation.java +++ b/Source/javasource/system/proxies/ScheduledEventInformation.java @@ -4,6 +4,9 @@ package system.proxies; +/** + * Information about Scheduled Events. + */ public class ScheduledEventInformation implements com.mendix.systemwideinterfaces.core.IEntityProxy { private final com.mendix.systemwideinterfaces.core.IMendixObject scheduledEventInformationMendixObject; @@ -322,13 +325,13 @@ public final void setScheduledEventInformation_XASInstance(com.mendix.systemwide } } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return scheduledEventInformationMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/Session.java b/Source/javasource/system/proxies/Session.java index 40dd7f4..51770a0 100644 --- a/Source/javasource/system/proxies/Session.java +++ b/Source/javasource/system/proxies/Session.java @@ -4,6 +4,9 @@ package system.proxies; +/** + * To manage user login information/other data under a context. + */ public class Session implements com.mendix.systemwideinterfaces.core.IEntityProxy { private final com.mendix.systemwideinterfaces.core.IMendixObject sessionMendixObject; @@ -239,13 +242,13 @@ public final void setSession_User(com.mendix.systemwideinterfaces.core.IContext } } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return sessionMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/SynchronizationError.java b/Source/javasource/system/proxies/SynchronizationError.java index a5e3a42..9f86dc2 100644 --- a/Source/javasource/system/proxies/SynchronizationError.java +++ b/Source/javasource/system/proxies/SynchronizationError.java @@ -228,13 +228,13 @@ public final void setObjectContent(com.mendix.systemwideinterfaces.core.IContext getMendixObject().setValue(context, MemberNames.ObjectContent.toString(), objectcontent); } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return synchronizationErrorMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/TimeZone.java b/Source/javasource/system/proxies/TimeZone.java index cb5f0f0..e9a66cb 100644 --- a/Source/javasource/system/proxies/TimeZone.java +++ b/Source/javasource/system/proxies/TimeZone.java @@ -4,6 +4,9 @@ package system.proxies; +/** + * Represents a time zone. + */ public class TimeZone implements com.mendix.systemwideinterfaces.core.IEntityProxy { private final com.mendix.systemwideinterfaces.core.IMendixObject timeZoneMendixObject; @@ -191,13 +194,13 @@ public final void setRawOffset(com.mendix.systemwideinterfaces.core.IContext con getMendixObject().setValue(context, MemberNames.RawOffset.toString(), rawoffset); } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return timeZoneMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/TokenInformation.java b/Source/javasource/system/proxies/TokenInformation.java index 7f8fa9d..6d26ff3 100644 --- a/Source/javasource/system/proxies/TokenInformation.java +++ b/Source/javasource/system/proxies/TokenInformation.java @@ -4,6 +4,9 @@ package system.proxies; +/** + * Authentication token to extract back the session. Helps in getting session data back for the specific user. + */ public class TokenInformation implements com.mendix.systemwideinterfaces.core.IEntityProxy { private final com.mendix.systemwideinterfaces.core.IMendixObject tokenInformationMendixObject; @@ -222,13 +225,13 @@ public final void setTokenInformation_User(com.mendix.systemwideinterfaces.core. } } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return tokenInformationMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/User.java b/Source/javasource/system/proxies/User.java index eef3679..497c031 100644 --- a/Source/javasource/system/proxies/User.java +++ b/Source/javasource/system/proxies/User.java @@ -551,13 +551,13 @@ public final void setUser_TimeZone(com.mendix.systemwideinterfaces.core.IContext } } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return userMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/UserReportInfo.java b/Source/javasource/system/proxies/UserReportInfo.java index 5947f3c..52d1fb5 100644 --- a/Source/javasource/system/proxies/UserReportInfo.java +++ b/Source/javasource/system/proxies/UserReportInfo.java @@ -4,6 +4,9 @@ package system.proxies; +/** + * User report information for license request. + */ public class UserReportInfo implements com.mendix.systemwideinterfaces.core.IEntityProxy { private final com.mendix.systemwideinterfaces.core.IMendixObject userReportInfoMendixObject; @@ -211,13 +214,13 @@ public final void setUserReportInfo_User(com.mendix.systemwideinterfaces.core.IC } } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return userReportInfoMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/UserRole.java b/Source/javasource/system/proxies/UserRole.java index 671e4ed..b23cf88 100644 --- a/Source/javasource/system/proxies/UserRole.java +++ b/Source/javasource/system/proxies/UserRole.java @@ -4,6 +4,9 @@ package system.proxies; +/** + * List of user roles in the application. `Administrator`/`User` or any custom roles. + */ public class UserRole implements com.mendix.systemwideinterfaces.core.IEntityProxy { private final com.mendix.systemwideinterfaces.core.IMendixObject userRoleMendixObject; @@ -244,13 +247,13 @@ public final void setgrantableRoles(com.mendix.systemwideinterfaces.core.IContex getMendixObject().setValue(context, MemberNames.grantableRoles.toString(), identifiers); } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return userRoleMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/javasource/system/proxies/XASInstance.java b/Source/javasource/system/proxies/XASInstance.java index ca249e2..ecd393f 100644 --- a/Source/javasource/system/proxies/XASInstance.java +++ b/Source/javasource/system/proxies/XASInstance.java @@ -4,6 +4,9 @@ package system.proxies; +/** + * Information about the nodes in a cluster of a Mendix application. + */ public class XASInstance implements com.mendix.systemwideinterfaces.core.IEntityProxy { private final com.mendix.systemwideinterfaces.core.IMendixObject xASInstanceMendixObject; @@ -265,13 +268,13 @@ public final void setCustomerName(com.mendix.systemwideinterfaces.core.IContext getMendixObject().setValue(context, MemberNames.CustomerName.toString(), customername); } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IMendixObject getMendixObject() { return xASInstanceMendixObject; } - @Override + @java.lang.Override public final com.mendix.systemwideinterfaces.core.IContext getContext() { return context; diff --git a/Source/themesource/atlas_core/.version b/Source/themesource/atlas_core/.version index f982feb..3f67e25 100644 --- a/Source/themesource/atlas_core/.version +++ b/Source/themesource/atlas_core/.version @@ -1 +1 @@ -3.14.0 +3.17.0 diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.badge.badge.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.badge.badge.json new file mode 100644 index 0000000..0a39384 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.badge.badge.json @@ -0,0 +1,10 @@ +{ + "Type": "Type", + "Render it as either a badge or a color label": "Render it as either a badge or a color label", + "Value": "Value", + "General": "General", + "On click": "On click", + "Events": "Events", + "Visibility": "Visibility", + "Common": "Common" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.badgebutton.badgebutton.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.badgebutton.badgebutton.json new file mode 100644 index 0000000..d49d33f --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.badgebutton.badgebutton.json @@ -0,0 +1,10 @@ +{ + "Caption": "Caption", + "General": "General", + "Value": "Value", + "Badge": "Badge", + "Visibility": "Visibility", + "On click": "On click", + "Events": "Events", + "Common": "Common" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.carousel.carousel.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.carousel.carousel.json new file mode 100644 index 0000000..c43a9a0 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.carousel.carousel.json @@ -0,0 +1,17 @@ +{ + "Carousel displaying images": "Carousel displaying images", + "Data source": "Data source", + "Content": "Content", + "Data Source": "Data Source", + "Pagination": "Pagination", + "Navigation controls": "Navigation controls", + "Auto play": "Auto play", + "Delay": "Delay", + "The amount of time to delay between automatically cycling an item (ms)": "The amount of time to delay between automatically cycling an item (ms)", + "Infinite loop": "Infinite loop", + "Animation": "Animation", + "Display": "Display", + "On click action": "On click action", + "Events": "Events", + "General": "General" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.colorpicker.colorpicker.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.colorpicker.colorpicker.json new file mode 100644 index 0000000..0134c92 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.colorpicker.colorpicker.json @@ -0,0 +1,24 @@ +{ + "Pick a color from color input": "Pick a color from color input", + "Color attribute": "Color attribute", + "The attribute containing a valid color, supported color formats are hexadecimal, rgb and rgba. Non-color formats such as ‘red’ are not supported.": "The attribute containing a valid color, supported color formats are hexadecimal, rgb and rgba. Non-color formats such as ‘red’ are not supported.", + "Data source": "Data source", + "Enable advanced options": "Enable advanced options", + "Display mode": "Display mode", + "The presentation of the color picker": "The presentation of the color picker", + "Picker type": "Picker type", + "The various different styles, for how the color picker should look when clicked.": "The various different styles, for how the color picker should look when clicked.", + "Color format": "Color format", + "The format that which the selected color will be saved as.": "The format that which the selected color will be saved as.", + "Default colors": "Default colors", + "This is a list of pre-defined colors used within the color picker.": "This is a list of pre-defined colors used within the color picker.", + "Color": "Color", + "Valid color value: #d0d0d0, rgb(115,159,159) or rgba(195,226,226,1)": "Valid color value: #d0d0d0, rgb(115,159,159) or rgba(195,226,226,1)", + "Invalid format message": "Invalid format message", + "Message shown when the user provides a wrong input, :colors: will be replaced by a sample format.": "Message shown when the user provides a wrong input, :colors: will be replaced by a sample format.", + "General": "General", + "Editability": "Editability", + "On change": "On change", + "Events": "Events", + "Visibility": "Visibility" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.maps.maps.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.maps.maps.json new file mode 100644 index 0000000..d36a922 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.maps.maps.json @@ -0,0 +1,60 @@ +{ + "Custom description please": "Custom description please", + "Enable advanced options": "Enable advanced options", + "General": "General", + "Marker": "Marker", + "A list of static locations on the map.": "A list of static locations on the map.", + "Location": "Location", + "Address": "Address", + "Address containing (a subset of) street, number, zipcode, city and country.": "Address containing (a subset of) street, number, zipcode, city and country.", + "Latitude": "Latitude", + "Decimal number from -90.0 to 90.0.": "Decimal number from -90.0 to 90.0.", + "Longitude": "Longitude", + "Decimal number from -180.0 to 180.0.": "Decimal number from -180.0 to 180.0.", + "Title": "Title", + "Title displayed when clicking the marker.": "Title displayed when clicking the marker.", + "On click": "On click", + "Events": "Events", + "Marker style": "Marker style", + "Image": "Image", + "Image that replaces the default icon.": "Image that replaces the default icon.", + "Visualization": "Visualization", + "Locations": "Locations", + "Marker list": "Marker list", + "A list of markers showing dynamic locations on the map.": "A list of markers showing dynamic locations on the map.", + "Data source": "Data source", + "Markers": "Markers", + "API Key": "API Key", + "API Key for usage of the map through the selected provider.Google Maps - https://developers.google.com/maps/documentation/javascript/get-api-key Map Box - https://docs.mapbox.com/help/getting-started/access-tokens/ Here Maps - https://developer.here.com/tutorials/getting-here-credentials/": "API Key for usage of the map through the selected provider.Google Maps - https://developers.google.com/maps/documentation/javascript/get-api-key Map Box - https://docs.mapbox.com/help/getting-started/access-tokens/ Here Maps - https://developer.here.com/tutorials/getting-here-credentials/", + "Geo location API key": "Geo location API key", + "Used to translate addresses to latitude and longitude. This API Key should be a Google Geocoding API Key found in https://developers.google.com/maps/documentation/geocoding/overview": "Used to translate addresses to latitude and longitude. This API Key should be a Google Geocoding API Key found in https://developers.google.com/maps/documentation/geocoding/overview", + "Show current location marker": "Show current location marker", + "Shows the user current location marker.": "Shows the user current location marker.", + "Configurations": "Configurations", + "Drag": "Drag", + "The center will move when end-users drag the map.": "The center will move when end-users drag the map.", + "Scroll to zoom": "Scroll to zoom", + "The map is zoomed with a mouse scroll.": "The map is zoomed with a mouse scroll.", + "Zoom": "Zoom", + "Show zoom controls [ + ] [ - ].": "Show zoom controls [ + ] [ - ].", + "Attribution control": "Attribution control", + "Add attributions to the map (credits).": "Add attributions to the map (credits).", + "Street view": "Street view", + "Enables the Street View control.": "Enables the Street View control.", + "Map type": "Map type", + "Enables switching between different map types.": "Enables switching between different map types.", + "Full screen": "Full screen", + "Rotate": "Rotate", + "Controls": "Controls", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Zoom level": "Zoom level", + "Dimensions": "Dimensions", + "Map provider": "Map provider", + "Google MapId key": "Google MapId key", + "Used to render and style the Google map. This MapId key from Google can be found in https://developers.google.com/maps/documentation/get-map-id": "Used to render and style the Google map. This MapId key from Google can be found in https://developers.google.com/maps/documentation/get-map-id", + "Advanced": "Advanced" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.progressbar.progressbar.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.progressbar.progressbar.json new file mode 100644 index 0000000..82e6b00 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.progressbar.progressbar.json @@ -0,0 +1,16 @@ +{ + "The widget lets you display a percentage as a bar": "The widget lets you display a percentage as a bar", + "Type": "Type", + "Current value": "Current value", + "Minimum value": "Minimum value", + "Maximum value": "Maximum value", + "General": "General", + "On click": "On click", + "Events": "Events", + "Show label": "Show label", + "Label type": "Label type", + "Note: If the Size of the progress bar is set to \"Small\" in the Appearance tab, then text and percentage labels will be shown in a tooltip and custom labels will be ignored.": "Note: If the Size of the progress bar is set to \"Small\" in the Appearance tab, then text and percentage labels will be shown in a tooltip and custom labels will be ignored.", + "Label text": "Label text", + "Custom label": "Custom label", + "Progress Label": "Progress Label" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.progresscircle.progresscircle.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.progresscircle.progresscircle.json new file mode 100644 index 0000000..e1c66ae --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.progresscircle.progresscircle.json @@ -0,0 +1,15 @@ +{ + "Displays a progress in a circle": "Displays a progress in a circle", + "Type": "Type", + "Current value": "Current value", + "Minimum value": "Minimum value", + "Maximum value": "Maximum value", + "General": "General", + "On click": "On click", + "Events": "Events", + "Show label": "Show label", + "Label type": "Label type", + "Label text": "Label text", + "Custom label": "Custom label", + "Progress Label": "Progress Label" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.rangeslider.rangeslider.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.rangeslider.rangeslider.json new file mode 100644 index 0000000..f539117 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.rangeslider.rangeslider.json @@ -0,0 +1,36 @@ +{ + "Change range of values using a slider": "Change range of values using a slider", + "Lower bound attribute": "Lower bound attribute", + "The lower bound value on the slider": "The lower bound value on the slider", + "Upper bound attribute": "Upper bound attribute", + "The upper bound value on the slider": "The upper bound value on the slider", + "Data source": "Data source", + "Enable advanced options": "Enable advanced options", + "Minimum value type": "Minimum value type", + "Minimum value": "Minimum value", + "Maximum value type": "Maximum value type", + "Maximum value": "Maximum value", + "Step size type": "Step size type", + "Step size": "Step size", + "Show tooltip": "Show tooltip", + "Lower bound tooltip type": "Lower bound tooltip type", + "By default tooltip shows current value. Choose 'Custom' to create your own template.": "By default tooltip shows current value. Choose 'Custom' to create your own template.", + "Tooltip": "Tooltip", + "Upper bound tooltip type": "Upper bound tooltip type", + "Tooltip always visible": "Tooltip always visible", + "When enabled tooltip is always visible to the user": "When enabled tooltip is always visible to the user", + "General": "General", + "Editability": "Editability", + "Visibility": "Visibility", + "Number of markers": "Number of markers", + "Marker ticks on the slider (visible when larger than 0)": "Marker ticks on the slider (visible when larger than 0)", + "Decimal places": "Decimal places", + "Number of decimal places for marker values": "Number of decimal places for marker values", + "Orientation": "Orientation", + "If orientation is 'Vertical', make sure that parent or slider itself has fixed height": "If orientation is 'Vertical', make sure that parent or slider itself has fixed height", + "Height unit": "Height unit", + "Height": "Height", + "Track": "Track", + "On change": "On change", + "Events": "Events" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.richtext.richtext.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.richtext.richtext.json new file mode 100644 index 0000000..37ad932 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.richtext.richtext.json @@ -0,0 +1,78 @@ +{ + "Rich inline or toolbar text editing": "Rich inline or toolbar text editing", + "Value attribute": "Value attribute", + "The attribute used for the content of the text editor, recommendation is to use an unlimited string data type.": "The attribute used for the content of the text editor, recommendation is to use an unlimited string data type.", + "Data source": "Data source", + "Menu bar": "Menu bar", + "Enable status bar": "Enable status bar", + "General": "General", + "Toolbar": "Toolbar", + "Mode": "Mode", + "Location": "Location", + "Enable quick toolbar": "Enable quick toolbar", + "Context menu": "Context menu", + "Read-only style": "Read-only style", + "How the rich text editor will appear in read-only mode.": "How the rich text editor will appear in read-only mode.", + "Editability": "Editability", + "Visibility": "Visibility", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Minimum height": "Minimum height", + "Editor's minimum height. The number value is in pixels.": "Editor's minimum height. The number value is in pixels.", + "Editor resize": "Editor resize", + "Dimensions": "Dimensions", + "On change": "On change", + "On enter": "On enter", + "On leave": "On leave", + "On key press": "On key press", + "Events": "Events", + "On change behavior": "On change behavior", + "Additional valid elements": "Additional valid elements", + "Additional sanitization rules to allow certain tag, sample: script[src|async]": "Additional sanitization rules to allow certain tag, sample: script[src|async]", + "Enable spell checking": "Enable spell checking", + "Highlight on focus": "Highlight on focus", + "Additional stylesheet": "Additional stylesheet", + "Additional stylesheet to be included in the rich text content": "Additional stylesheet to be included in the rich text content", + "Sandbox iframes": "Sandbox iframes", + "When enabled, all embedded media using iframes elements will be given the sandbox=\"\" attribute, applying all restrictions.": "When enabled, all embedded media using iframes elements will be given the sandbox=\"\" attribute, applying all restrictions.", + "Use relative URL Link": "Use relative URL Link", + "When enabled, same domain URL links will be converted into relative URL.": "When enabled, same domain URL links will be converted into relative URL.", + "Advanced": "Advanced", + "Toolbar group": "Toolbar group", + "Basic style": "Basic style", + "Extended style": "Extended style", + "Text alignment": "Text alignment", + "Clipboard": "Clipboard", + "Font style": "Font style", + "Paragraph": "Paragraph", + "Document": "Document", + "History": "History", + "Accordion": "Accordion", + "Code": "Code", + "Anchor": "Anchor", + "Text direction": "Text direction", + "Link": "Link", + "List": "List", + "Preview": "Preview", + "Table": "Table", + "Visual aid": "Visual aid", + "Media": "Media", + "Utility": "Utility", + "Emoticon": "Emoticon", + "Removal": "Removal", + "Advanced groups": "Advanced groups", + "Button": "Button", + "Button Type": "Button Type", + "Custom toolbar": "Custom toolbar", + "File": "File", + "Edit": "Edit", + "Insert": "Insert", + "View": "View", + "Format": "Format", + "Tools": "Tools", + "Help": "Help", + "Custom menubar": "Custom menubar" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.slider.slider.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.slider.slider.json new file mode 100644 index 0000000..937d270 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.slider.slider.json @@ -0,0 +1,35 @@ +{ + "Change a number value using a slider": "Change a number value using a slider", + "Value attribute": "Value attribute", + "Data source": "Data source", + "Enable advanced options": "Enable advanced options", + "Minimum value type": "Minimum value type", + "Minimum value": "Minimum value", + "The minimum value of the slider.": "The minimum value of the slider.", + "Maximum value type": "Maximum value type", + "Maximum value": "Maximum value", + "The maximum value of the slider.": "The maximum value of the slider.", + "Step size type": "Step size type", + "Step size": "Step size", + "Value to be added or subtracted on each step the slider makes. Must be greater than zero, and max - min should be evenly divisible by the step value.": "Value to be added or subtracted on each step the slider makes. Must be greater than zero, and max - min should be evenly divisible by the step value.", + "Show tooltip": "Show tooltip", + "Tooltip type": "Tooltip type", + "By default tooltip shows current value. Choose 'Custom' to create your own template.": "By default tooltip shows current value. Choose 'Custom' to create your own template.", + "Tooltip": "Tooltip", + "Tooltip always visible": "Tooltip always visible", + "When enabled tooltip is always visible to the user": "When enabled tooltip is always visible to the user", + "General": "General", + "Editability": "Editability", + "Visibility": "Visibility", + "Number of markers": "Number of markers", + "The number of marker ticks that appear along the slider’s track. (Visible when larger than 0)": "The number of marker ticks that appear along the slider’s track. (Visible when larger than 0)", + "Decimal places": "Decimal places", + "Number of decimal places for marker values": "Number of decimal places for marker values", + "Orientation": "Orientation", + "The orientation of the slider. If ‘Vertical’, make sure to set the either the height of the parent or slider to a fixed height.": "The orientation of the slider. If ‘Vertical’, make sure to set the either the height of the parent or slider to a fixed height.", + "Height unit": "Height unit", + "Height": "Height", + "Track": "Track", + "On change": "On change", + "Events": "Events" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.starrating.starrating.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.starrating.starrating.json new file mode 100644 index 0000000..768daad --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.starrating.starrating.json @@ -0,0 +1,12 @@ +{ + "Attribute": "Attribute", + "Empty icon": "Empty icon", + "Selected icon": "Selected icon", + "Amount": "Amount", + "The number of rating icons": "The number of rating icons", + "Animation": "Animation", + "General": "General", + "On change": "On change", + "Events": "Events", + "Common": "Common" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.switch.switch.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.switch.switch.json new file mode 100644 index 0000000..e5cc524 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.custom.switch.switch.json @@ -0,0 +1,11 @@ +{ + "Toggle a boolean attribute": "Toggle a boolean attribute", + "Boolean attribute": "Boolean attribute", + "Attribute to toggle": "Attribute to toggle", + "Data source": "Data source", + "On change": "On change", + "Action to be performed when the switch is toggled": "Action to be performed when the switch is toggled", + "Actions": "Actions", + "General": "General", + "Common": "Common" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.accessibilityhelper.accessibilityhelper.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.accessibilityhelper.accessibilityhelper.json new file mode 100644 index 0000000..201d7d7 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.accessibilityhelper.accessibilityhelper.json @@ -0,0 +1,14 @@ +{ + "Target selector": "Target selector", + "Selector to find the first HTML element you want to target which must be a valid CSS selector like '.mx-name-texbox1 input'": "Selector to find the first HTML element you want to target which must be a valid CSS selector like '.mx-name-texbox1 input'", + "Content": "Content", + "HTML Attributes": "HTML Attributes", + "HTML attribute": "HTML attribute", + "The HTML attribute to be set based on the condition. The following attributes are not allowed: 'class', 'style', 'widgetid', 'data-mendix-id'.": "The HTML attribute to be set based on the condition. The following attributes are not allowed: 'class', 'style', 'widgetid', 'data-mendix-id'.", + "Source type": "Source type", + "Expression value": "Expression value", + "Text value": "Text value", + "Condition": "Condition", + "Condition to determine if the HTML attribute must be set or not": "Condition to determine if the HTML attribute must be set or not", + "General": "General" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.accordion.accordion.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.accordion.accordion.json new file mode 100644 index 0000000..55ccf81 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.accordion.accordion.json @@ -0,0 +1,33 @@ +{ + "Toggle the display of sections of content.": "Toggle the display of sections of content.", + "Enable advanced options": "Enable advanced options", + "Groups": "Groups", + "Header": "Header", + "Text": "Text", + "Render mode": "Render mode", + "Content": "Content", + "Visible": "Visible", + "Dynamic class": "Dynamic class", + "Load content": "Load content", + "This property determines when the widgets should be rendered and data is fetched. The “Always” option will always load the widgets regardless whether the group is expanded. The “When expanded” option can reduce the initial (page) load time, but will increase the load time when expanding the group.": "This property determines when the widgets should be rendered and data is fetched. The “Always” option will always load the widgets regardless whether the group is expanded. The “When expanded” option can reduce the initial (page) load time, but will increase the load time when expanding the group.", + "General": "General", + "Start as": "Start as", + "Start as collapsed": "Start as collapsed", + "Collapsed": "Collapsed", + "Determines whether the group is collapsed or expanded. The 'Start as' properties override the attribute value for the initial state.": "Determines whether the group is collapsed or expanded. The 'Start as' properties override the attribute value for the initial state.", + "On change": "On change", + "Executes an action when the 'Collapsed' attribute value changes. Note: the 'Start as' properties can prevent execution of this action when the initial state changes.": "Executes an action when the 'Collapsed' attribute value changes. Note: the 'Start as' properties can prevent execution of this action when the initial state changes.", + "State": "State", + "Collapsible": "Collapsible", + "Expanded groups": "Expanded groups", + "Allow a single group or multiple groups to be expanded at the same time.": "Allow a single group or multiple groups to be expanded at the same time.", + "Animate": "Animate", + "Behavior": "Behavior", + "Show icon": "Show icon", + "Icon": "Icon", + "Expand icon": "Expand icon", + "Collapse icon": "Collapse icon", + "Animate icon": "Animate icon", + "Animate the icon when the group is collapsing or expanding.": "Animate the icon when the group is collapsing or expanding.", + "Visualization": "Visualization" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.areachart.areachart.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.areachart.areachart.json new file mode 100644 index 0000000..d3c2b8a --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.areachart.areachart.json @@ -0,0 +1,47 @@ +{ + "Create an area chart": "Create an area chart", + "Series": "Series", + "Add series and configure their properties": "Add series and configure their properties", + "Data set": "Data set", + "Data source": "Data source", + "Data points for a single series.": "Data points for a single series.", + "Data points for all series which will be divided into single series based on the Group by attribute value.": "Data points for all series which will be divided into single series based on the Group by attribute value.", + "Group by": "Group by", + "Data points within the same group form one series.": "Data points within the same group form one series.", + "Series name": "Series name", + "The series name displayed in the legend.": "The series name displayed in the legend.", + "X axis attribute": "X axis attribute", + "Y axis attribute": "Y axis attribute", + "Aggregation function": "Aggregation function", + "Defines how data is aggregated when multiple Y values are available for a single X value": "Defines how data is aggregated when multiple Y values are available for a single X value", + "Tooltip hover text": "Tooltip hover text", + "General": "General", + "Interpolation": "Interpolation", + "Line style": "Line style", + "Line color": "Line color", + "Marker color": "Marker color", + "Area fill color": "Area fill color", + "Appearance": "Appearance", + "On click action": "On click action", + "Events": "Events", + "Custom series options": "Custom series options", + "Advanced": "Advanced", + "Enable advanced options": "Enable advanced options", + "Show playground slot": "Show playground slot", + "Playground slot": "Playground slot", + "X axis label": "X axis label", + "Y axis label": "Y axis label", + "Show legend": "Show legend", + "Grid lines": "Grid lines", + "Visibility": "Visibility", + "Common": "Common", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Dimensions": "Dimensions", + "Enable theme folder config loading": "Enable theme folder config loading", + "Custom layout": "Custom layout", + "Custom configurations": "Custom configurations" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.barchart.barchart.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.barchart.barchart.json new file mode 100644 index 0000000..5e3a575 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.barchart.barchart.json @@ -0,0 +1,44 @@ +{ + "Create a bar chart": "Create a bar chart", + "Series": "Series", + "Add one or more lines. The order influences how lines overlay one another: the first line (from the top) is drawn lowest and other lines are drawn on top of it.": "Add one or more lines. The order influences how lines overlay one another: the first line (from the top) is drawn lowest and other lines are drawn on top of it.", + "Data set": "Data set", + "Data source": "Data source", + "Data points for a single line.": "Data points for a single line.", + "Data points for all lines which will be divided into single lines based on the Group by attribute value.": "Data points for all lines which will be divided into single lines based on the Group by attribute value.", + "Group by": "Group by", + "Data points within the same group form one line.": "Data points within the same group form one line.", + "Series name": "Series name", + "The line name displayed in the legend.": "The line name displayed in the legend.", + "X axis attribute": "X axis attribute", + "Y axis attribute": "Y axis attribute", + "Aggregation function": "Aggregation function", + "Defines how data is aggregated when multiple Y values are available for a single X value": "Defines how data is aggregated when multiple Y values are available for a single X value", + "Tooltip hover text": "Tooltip hover text", + "General": "General", + "Bar color": "Bar color", + "Appearance": "Appearance", + "On click action": "On click action", + "Events": "Events", + "Custom series options": "Custom series options", + "Advanced": "Advanced", + "Enable advanced options": "Enable advanced options", + "Show playground slot": "Show playground slot", + "Playground slot": "Playground slot", + "X axis label": "X axis label", + "Y axis label": "Y axis label", + "Bar format": "Bar format", + "Show legend": "Show legend", + "Grid lines": "Grid lines", + "Visibility": "Visibility", + "Common": "Common", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Dimensions": "Dimensions", + "Enable theme folder config loading": "Enable theme folder config loading", + "Custom layout": "Custom layout", + "Custom configurations": "Custom configurations" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.barcodescanner.barcodescanner.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.barcodescanner.barcodescanner.json new file mode 100644 index 0000000..6fd037a --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.barcodescanner.barcodescanner.json @@ -0,0 +1,24 @@ +{ + "The widget lets you scan a barcode": "The widget lets you scan a barcode", + "Scanned result": "Scanned result", + "The String attribute used to store the result of the scanned barcode.": "The String attribute used to store the result of the scanned barcode.", + "Show barcode mask": "Show barcode mask", + "Apply a mask to camera view, as a specific target area for the barcode.": "Apply a mask to camera view, as a specific target area for the barcode.", + "Use all barcode formats": "Use all barcode formats", + "Scan for all available barcode formats": "Scan for all available barcode formats", + "Enabled barcode formats": "Enabled barcode formats", + "Barcode format": "Barcode format", + "Barcode format which should be recognized by the scanner": "Barcode format which should be recognized by the scanner", + "Object list group": "Object list group", + "General": "General", + "On detect action": "On detect action", + "Action to trigger when the barcode has been successfully detected.": "Action to trigger when the barcode has been successfully detected.", + "Events": "Events", + "Common": "Common", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Dimensions": "Dimensions" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.bubblechart.bubblechart.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.bubblechart.bubblechart.json new file mode 100644 index 0000000..18a7121 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.bubblechart.bubblechart.json @@ -0,0 +1,47 @@ +{ + "Create a bubble chart": "Create a bubble chart", + "Data source": "Data source", + "Add one or more lines. The order influences how lines overlay one another: the first line (from the top) is drawn lowest and other lines are drawn on top of it.": "Add one or more lines. The order influences how lines overlay one another: the first line (from the top) is drawn lowest and other lines are drawn on top of it.", + "Data set": "Data set", + "Data points for a single line.": "Data points for a single line.", + "Data points for all lines which will be divided into single lines based on the Group by attribute value.": "Data points for all lines which will be divided into single lines based on the Group by attribute value.", + "Group by": "Group by", + "Data points within the same group form one line.": "Data points within the same group form one line.", + "Series name": "Series name", + "The line name displayed in the legend.": "The line name displayed in the legend.", + "X axis attribute": "X axis attribute", + "Y axis attribute": "Y axis attribute", + "Aggregation function": "Aggregation function", + "Defines how data is aggregated when multiple Y values are available for a single X value": "Defines how data is aggregated when multiple Y values are available for a single X value", + "Bubble size attribute": "Bubble size attribute", + "The value determines the bubble size": "The value determines the bubble size", + "Auto scale": "Auto scale", + "Scale factor": "Scale factor", + "When “Auto scale” is set to false, use the scale factor to determine the rendered size of the bubble, it will multiply the value of “bubble size” by this factor.": "When “Auto scale” is set to false, use the scale factor to determine the rendered size of the bubble, it will multiply the value of “bubble size” by this factor.", + "Tooltip hover text": "Tooltip hover text", + "General": "General", + "Marker color": "Marker color", + "Appearance": "Appearance", + "On click action": "On click action", + "Events": "Events", + "Custom series options": "Custom series options", + "Advanced": "Advanced", + "Enable advanced options": "Enable advanced options", + "Show playground slot": "Show playground slot", + "Playground slot": "Playground slot", + "X axis label": "X axis label", + "Y axis label": "Y axis label", + "Show legend": "Show legend", + "Grid lines": "Grid lines", + "Visibility": "Visibility", + "Common": "Common", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Dimensions": "Dimensions", + "Enable theme folder config loading": "Enable theme folder config loading", + "Custom layout": "Custom layout", + "Custom configurations": "Custom configurations" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.chartplayground.chartplayground.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.chartplayground.chartplayground.json new file mode 100644 index 0000000..a964983 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.chartplayground.chartplayground.json @@ -0,0 +1,3 @@ +{ + "A helper for easy and quick chart customization": "A helper for easy and quick chart customization" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.columnchart.columnchart.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.columnchart.columnchart.json new file mode 100644 index 0000000..9bcda6c --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.columnchart.columnchart.json @@ -0,0 +1,45 @@ +{ + "Create a column chart": "Create a column chart", + "Series": "Series", + "Add one or more columns. The order influences how columns overlay one another: the first column (from the top) is drawn lowest and other columns are drawn on top of it.": "Add one or more columns. The order influences how columns overlay one another: the first column (from the top) is drawn lowest and other columns are drawn on top of it.", + "Data set": "Data set", + "Data source": "Data source", + "Data points for a single column.": "Data points for a single column.", + "Data points for all columns which will be divided into single columns based on the Group by attribute value.": "Data points for all columns which will be divided into single columns based on the Group by attribute value.", + "Group by": "Group by", + "Data points within the same group form one column.": "Data points within the same group form one column.", + "Series name": "Series name", + "The column name displayed in the legend.": "The column name displayed in the legend.", + "X axis attribute": "X axis attribute", + "Y axis attribute": "Y axis attribute", + "Aggregation function": "Aggregation function", + "Defines how data is aggregated when multiple Y values are available for a single X value": "Defines how data is aggregated when multiple Y values are available for a single X value", + "Tooltip hover text": "Tooltip hover text", + "General": "General", + "Column color": "Column color", + "Appearance": "Appearance", + "On click action": "On click action", + "Events": "Events", + "Custom series options": "Custom series options", + "Advanced": "Advanced", + "Data Source": "Data Source", + "Enable advanced options": "Enable advanced options", + "Show playground slot": "Show playground slot", + "Playground slot": "Playground slot", + "X axis label": "X axis label", + "Y axis label": "Y axis label", + "Show legend": "Show legend", + "Grid lines": "Grid lines", + "Column format": "Column format", + "Visibility": "Visibility", + "Common": "Common", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Dimensions": "Dimensions", + "Enable theme folder config loading": "Enable theme folder config loading", + "Custom layout": "Custom layout", + "Custom configurations": "Custom configurations" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.combobox.combobox.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.combobox.combobox.json new file mode 100644 index 0000000..ae9d77c --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.combobox.combobox.json @@ -0,0 +1,58 @@ +{ + "Source": "Source", + "Type": "Type", + "Attribute": "Attribute", + "Selectable objects": "Selectable objects", + "Selection type": "Selection type", + "Data source": "Data source", + "Value": "Value", + "Default value": "Default value", + "Entity": "Entity", + "Caption type": "Caption type", + "Caption": "Caption", + "Values": "Values", + "Value to be set": "Value to be set", + "Custom content": "Custom content", + "Caption to be shown": "Caption to be shown", + "Static values": "Static values", + "Placeholder text": "Placeholder text", + "Filter type": "Filter type", + "No options text": "No options text", + "Clearable": "Clearable", + "Show footer": "Show footer", + "Footer content": "Footer content", + "General": "General", + "Selection method": "Selection method", + "Show selected items as": "Show selected items as", + "Show select all": "Show select all", + "Add a button to select/deselect all options.": "Add a button to select/deselect all options.", + "Caption for select all": "Caption for select all", + "Multiple-selection (reference set)": "Multiple-selection (reference set)", + "Label": "Label", + "Conditional visibility": "Conditional visibility", + "Read-only style": "Read-only style", + "How the combo box will appear in read-only mode.": "How the combo box will appear in read-only mode.", + "Editability": "Editability", + "On change action": "On change action", + "On enter action": "On enter action", + "On leave action": "On leave action", + "Events": "Events", + "Aria required": "Aria required", + "Accessibility": "Accessibility", + "Clear selection button": "Clear selection button", + "Used to clear all selected values.": "Used to clear all selected values.", + "Remove value button": "Remove value button", + "Used to remove individual selected values when using labels with multi-selection.": "Used to remove individual selected values when using labels with multi-selection.", + "Aria labels": "Aria labels", + "Selected value": "Selected value", + "Output example: \"Selected value: Avocado, Apple, Banana.\"": "Output example: \"Selected value: Avocado, Apple, Banana.\"", + "Options available": "Options available", + "Output example: \"Number of options available: 1\"": "Output example: \"Number of options available: 1\"", + "Instructions": "Instructions", + "Instructions to be read after announcing the status.": "Instructions to be read after announcing the status.", + "Accessibility status message": "Accessibility status message", + "Lazy loading": "Lazy loading", + "Loading type": "Loading type", + "Performance": "Performance", + "Advanced": "Advanced" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagrid.datagrid.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagrid.datagrid.json new file mode 100644 index 0000000..04aa95e --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagrid.datagrid.json @@ -0,0 +1,87 @@ +{ + "Enable advanced options": "Enable advanced options", + "Data source": "Data source", + "Refresh time (in seconds)": "Refresh time (in seconds)", + "Selection": "Selection", + "Selection method": "Selection method", + "Toggle on click": "Toggle on click", + "Defines item selection behavior.": "Defines item selection behavior.", + "Show (un)check all toggle": "Show (un)check all toggle", + "Show a checkbox in the grid header to check or uncheck multiple items.": "Show a checkbox in the grid header to check or uncheck multiple items.", + "General": "General", + "Columns": "Columns", + "Show": "Show", + "Attribute": "Attribute", + "Attribute is required if the column can be sorted or filtered": "Attribute is required if the column can be sorted or filtered", + "Custom content": "Custom content", + "Dynamic text": "Dynamic text", + "Export value": "Export value", + "Caption": "Caption", + "Tooltip": "Tooltip", + "Filter": "Filter", + "Reference": "Reference", + "Set the reference to enable filtering over association with the Drop-down filter widget.": "Set the reference to enable filtering over association with the Drop-down filter widget.", + "The options to show in the Drop-down filter widget.": "The options to show in the Drop-down filter widget.", + "Use lazy load": "Use lazy load", + "Lazy loading enables faster data grid loading, but with personalization enabled, value restoration will be limited.": "Lazy loading enables faster data grid loading, but with personalization enabled, value restoration will be limited.", + "Option caption": "Option caption", + "Visible": "Visible", + "Can sort": "Can sort", + "Can resize": "Can resize", + "Can reorder": "Can reorder", + "Can hide": "Can hide", + "Allow row events": "Allow row events", + "If set to yes, then all default events on the row, such as \"on click\" or selection, will be triggered when the user interacts with custom content.": "If set to yes, then all default events on the row, such as \"on click\" or selection, will be triggered when the user interacts with custom content.", + "Column capabilities": "Column capabilities", + "Column width": "Column width", + "Min width": "Min width", + "Min width value (px)": "Min width value (px)", + "Column size": "Column size", + "Alignment": "Alignment", + "Dynamic cell class": "Dynamic cell class", + "Wrap text": "Wrap text", + "Appearance": "Appearance", + "Show column filters": "Show column filters", + "Page size": "Page size", + "Pagination": "Pagination", + "Position of paging buttons": "Position of paging buttons", + "Show paging buttons": "Show paging buttons", + "Load more caption": "Load more caption", + "Empty list message": "Empty list message", + "Empty placeholder": "Empty placeholder", + "Dynamic row class": "Dynamic row class", + "Rows": "Rows", + "On click trigger": "On click trigger", + "On click action": "On click action", + "On selection change": "On selection change", + "Events": "Events", + "Sorting": "Sorting", + "Enable sorting for all columns unless specified otherwise in the column setting": "Enable sorting for all columns unless specified otherwise in the column setting", + "Resizing": "Resizing", + "Enable resizing for all columns unless specified otherwise in the column setting": "Enable resizing for all columns unless specified otherwise in the column setting", + "Reordering": "Reordering", + "Enable reordering for all columns unless specified otherwise in the column setting": "Enable reordering for all columns unless specified otherwise in the column setting", + "Hiding": "Hiding", + "Enable hiding for all columns unless specified otherwise in the column setting": "Enable hiding for all columns unless specified otherwise in the column setting", + "Store configuration in": "Store configuration in", + "When Browser local storage is selected, the configuration is scoped to a browser profile. This configuration is not tied to a Mendix user.": "When Browser local storage is selected, the configuration is scoped to a browser profile. This configuration is not tied to a Mendix user.", + "Attribute containing the personalized configuration of the capabilities. This configuration is automatically stored and loaded. The attribute requires Unlimited String.": "Attribute containing the personalized configuration of the capabilities. This configuration is automatically stored and loaded. The attribute requires Unlimited String.", + "On change": "On change", + "Configuration": "Configuration", + "Personalization": "Personalization", + "Filters": "Filters", + "The list of attributes is used by the filter widgets that are placed in the placeholder above the data grid. This enables filtering across multiple attributes or columns instead of limiting to a single column.": "The list of attributes is used by the filter widgets that are placed in the placeholder above the data grid. This enables filtering across multiple attributes or columns instead of limiting to a single column.", + "Filter attribute": "Filter attribute", + "Filters placeholder": "Filters placeholder", + "Grid wide filtering": "Grid wide filtering", + "Filter section": "Filter section", + "Assistive technology will read this upon reaching a filtering or sorting section.": "Assistive technology will read this upon reaching a filtering or sorting section.", + "Export progress": "Export progress", + "Assistive technology will read this upon reaching a export dialog.": "Assistive technology will read this upon reaching a export dialog.", + "Cancel data export": "Cancel data export", + "Assistive technology will read this upon reaching a cancel button.": "Assistive technology will read this upon reaching a cancel button.", + "Select row": "Select row", + "If selection is enabled, assistive technology will read this upon reaching a checkbox.": "If selection is enabled, assistive technology will read this upon reaching a checkbox.", + "Aria labels": "Aria labels", + "Accessibility": "Accessibility" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagriddatefilter.datagriddatefilter.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagriddatefilter.datagriddatefilter.json new file mode 100644 index 0000000..c441751 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagriddatefilter.datagriddatefilter.json @@ -0,0 +1,28 @@ +{ + "Enable advanced options": "Enable advanced options", + "Default value": "Default value", + "Default start date": "Default start date", + "Default end date": "Default end date", + "Default filter": "Default filter", + "Placeholder": "Placeholder", + "Adjustable by user": "Adjustable by user", + "General": "General", + "Saved attribute": "Saved attribute", + "Attribute used to store the last value of the filter.": "Attribute used to store the last value of the filter.", + "Saved start date attribute": "Saved start date attribute", + "Attribute used to store the last value of the start date filter.": "Attribute used to store the last value of the start date filter.", + "Saved end date attribute": "Saved end date attribute", + "Attribute used to store the last value of the end date filter.": "Attribute used to store the last value of the end date filter.", + "Configurations": "Configurations", + "On change": "On change", + "Action to be triggered when the value or filter changes.": "Action to be triggered when the value or filter changes.", + "Events": "Events", + "Comparison button caption": "Comparison button caption", + "Assistive technology will read this upon reaching the comparison button that triggers the filter type drop-down menu.": "Assistive technology will read this upon reaching the comparison button that triggers the filter type drop-down menu.", + "Calendar button caption": "Calendar button caption", + "Assistive technology will read this upon reaching the button that triggers the calendar.": "Assistive technology will read this upon reaching the button that triggers the calendar.", + "Input caption": "Input caption", + "Assistive technology will read this upon reaching the input element.": "Assistive technology will read this upon reaching the input element.", + "Screen reader": "Screen reader", + "Accessibility": "Accessibility" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagriddropdownfilter.datagriddropdownfilter.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagriddropdownfilter.datagriddropdownfilter.json new file mode 100644 index 0000000..4e799ca --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagriddropdownfilter.datagriddropdownfilter.json @@ -0,0 +1,22 @@ +{ + "Automatic options": "Automatic options", + "Show options based on the references or the enumeration values and captions.": "Show options based on the references or the enumeration values and captions.", + "Enable advanced options": "Enable advanced options", + "Default value": "Default value", + "Empty option caption will be shown by default or if configured default value matches none of the options": "Empty option caption will be shown by default or if configured default value matches none of the options", + "Options": "Options", + "Caption": "Caption", + "Value": "Value", + "Empty option caption": "Empty option caption", + "Multiselect": "Multiselect", + "General": "General", + "Saved attribute": "Saved attribute", + "Attribute used to store the last value of the filter. Associations are not supported.": "Attribute used to store the last value of the filter. Associations are not supported.", + "Configurations": "Configurations", + "On change": "On change", + "Action to be triggered when the value or filter changes.": "Action to be triggered when the value or filter changes.", + "Events": "Events", + "Input caption": "Input caption", + "Assistive technology will read this upon reaching the input element.": "Assistive technology will read this upon reaching the input element.", + "Accessibility": "Accessibility" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagridnumberfilter.datagridnumberfilter.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagridnumberfilter.datagridnumberfilter.json new file mode 100644 index 0000000..c8e6f27 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagridnumberfilter.datagridnumberfilter.json @@ -0,0 +1,23 @@ +{ + "Enable advanced options": "Enable advanced options", + "Default value": "Default value", + "Default filter": "Default filter", + "Placeholder": "Placeholder", + "Adjustable by user": "Adjustable by user", + "General": "General", + "Apply after (ms)": "Apply after (ms)", + "Wait this period before applying then change(s) to the filter": "Wait this period before applying then change(s) to the filter", + "On change behavior": "On change behavior", + "Saved attribute": "Saved attribute", + "Attribute used to store the last value of the filter.": "Attribute used to store the last value of the filter.", + "Configurations": "Configurations", + "On change": "On change", + "Action to be triggered when the value or filter changes.": "Action to be triggered when the value or filter changes.", + "Events": "Events", + "Comparison button caption": "Comparison button caption", + "Assistive technology will read this upon reaching the comparison button that triggers the filter type drop-down menu.": "Assistive technology will read this upon reaching the comparison button that triggers the filter type drop-down menu.", + "Input caption": "Input caption", + "Assistive technology will read this upon reaching the input element.": "Assistive technology will read this upon reaching the input element.", + "Screen reader": "Screen reader", + "Accessibility": "Accessibility" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagridtextfilter.datagridtextfilter.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagridtextfilter.datagridtextfilter.json new file mode 100644 index 0000000..c8e6f27 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.datagridtextfilter.datagridtextfilter.json @@ -0,0 +1,23 @@ +{ + "Enable advanced options": "Enable advanced options", + "Default value": "Default value", + "Default filter": "Default filter", + "Placeholder": "Placeholder", + "Adjustable by user": "Adjustable by user", + "General": "General", + "Apply after (ms)": "Apply after (ms)", + "Wait this period before applying then change(s) to the filter": "Wait this period before applying then change(s) to the filter", + "On change behavior": "On change behavior", + "Saved attribute": "Saved attribute", + "Attribute used to store the last value of the filter.": "Attribute used to store the last value of the filter.", + "Configurations": "Configurations", + "On change": "On change", + "Action to be triggered when the value or filter changes.": "Action to be triggered when the value or filter changes.", + "Events": "Events", + "Comparison button caption": "Comparison button caption", + "Assistive technology will read this upon reaching the comparison button that triggers the filter type drop-down menu.": "Assistive technology will read this upon reaching the comparison button that triggers the filter type drop-down menu.", + "Input caption": "Input caption", + "Assistive technology will read this upon reaching the input element.": "Assistive technology will read this upon reaching the input element.", + "Screen reader": "Screen reader", + "Accessibility": "Accessibility" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.dropdownsort.dropdownsort.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.dropdownsort.dropdownsort.json new file mode 100644 index 0000000..e2f29e5 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.dropdownsort.dropdownsort.json @@ -0,0 +1,9 @@ +{ + "Empty option caption": "Empty option caption", + "General": "General", + "Sort order button caption": "Sort order button caption", + "Assistive technology will read this upon reaching the sort order button.": "Assistive technology will read this upon reaching the sort order button.", + "Input caption": "Input caption", + "Assistive technology will read this upon reaching the input element.": "Assistive technology will read this upon reaching the input element.", + "Accessibility": "Accessibility" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.events.events.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.events.events.json new file mode 100644 index 0000000..73bcafc --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.events.events.json @@ -0,0 +1,11 @@ +{ + "Events": "Events", + "Action": "Action", + "Delay": "Delay", + "Timer delay to first action execution. Value is in milliseconds. If set to 0, action will be triggered immediately.": "Timer delay to first action execution. Value is in milliseconds. If set to 0, action will be triggered immediately.", + "Repeat": "Repeat", + "Interval between repeat action execution. Value is in milliseconds.": "Interval between repeat action execution. Value is in milliseconds.", + "Component load": "Component load", + "Attribute": "Attribute", + "On change": "On change" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.fieldset.fieldset.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.fieldset.fieldset.json new file mode 100644 index 0000000..d6b46c0 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.fieldset.fieldset.json @@ -0,0 +1,7 @@ +{ + "Legend": "Legend", + "Content": "Content", + "General": "General", + "Visibility": "Visibility", + "Common": "Common" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.fileuploader.fileuploader.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.fileuploader.fileuploader.json new file mode 100644 index 0000000..073e9ba --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.fileuploader.fileuploader.json @@ -0,0 +1,20 @@ +{ + "My widget description": "My widget description", + "Associated files": "Associated files", + "Action to create new files": "Action to create new files", + "Allowed file formats": "Allowed file formats", + "List of comma separated file formats. No restrictions if left empty.": "List of comma separated file formats. No restrictions if left empty.", + "Configuration mode": "Configuration mode", + "Predefined type": "Predefined type", + "Mime Type": "Mime Type", + "For example 'image/jpeg' or 'application/pdf'": "For example 'image/jpeg' or 'application/pdf'", + "Extensions list": "Extensions list", + "Comma separated list of extensions. For example: '.jpg,.jpeg'.": "Comma separated list of extensions. For example: '.jpg,.jpeg'.", + "Type description": "Type description", + "Shown to the end users to describe supported file types.": "Shown to the end users to describe supported file types.", + "General": "General", + "Maximum number of files": "Maximum number of files", + "Limit the number of file per one upload.": "Limit the number of file per one upload.", + "Maximum file size (MB)": "Maximum file size (MB)", + "Reject files that are bigger than specified size.": "Reject files that are bigger than specified size." +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.gallery.gallery.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.gallery.gallery.json new file mode 100644 index 0000000..b74acb9 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.gallery.gallery.json @@ -0,0 +1,39 @@ +{ + "Enable advanced options": "Enable advanced options", + "Data source": "Data source", + "Selection": "Selection", + "Item click toggles selection": "Item click toggles selection", + "Defines item selection behavior.": "Defines item selection behavior.", + "Content placeholder": "Content placeholder", + "General": "General", + "Desktop columns": "Desktop columns", + "Tablet columns": "Tablet columns", + "Phone columns": "Phone columns", + "Columns": "Columns", + "Page size": "Page size", + "Pagination": "Pagination", + "Position of paging buttons": "Position of paging buttons", + "Empty message": "Empty message", + "Empty placeholder": "Empty placeholder", + "Dynamic item class": "Dynamic item class", + "Items": "Items", + "On click trigger": "On click trigger", + "On click action": "On click action", + "On selection change": "On selection change", + "Events": "Events", + "Filters": "Filters", + "Filter attribute": "Filter attribute", + "Filters placeholder": "Filters placeholder", + "Filtering": "Filtering", + "Sort attributes": "Sort attributes", + "Attribute": "Attribute", + "Caption": "Caption", + "Sorting": "Sorting", + "Filter section": "Filter section", + "Assistive technology will read this upon reaching a filtering or sorting section.": "Assistive technology will read this upon reaching a filtering or sorting section.", + "Assistive technology will read this upon reaching an empty message section.": "Assistive technology will read this upon reaching an empty message section.", + "Content description": "Content description", + "Assistive technology will read this upon reaching gallery.": "Assistive technology will read this upon reaching gallery.", + "Aria labels": "Aria labels", + "Accessibility": "Accessibility" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.googletag.googletag.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.googletag.googletag.json new file mode 100644 index 0000000..1083242 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.googletag.googletag.json @@ -0,0 +1,20 @@ +{ + "Google tag integration widget": "Google tag integration widget", + "Widget mode": "Widget mode", + "The basic option automatically sends page view events. Place this widget in the layouts to automatically send events when pages are changed. The advanced option can be used for more control.": "The basic option automatically sends page view events. Place this widget in the layouts to automatically send events when pages are changed. The advanced option can be used for more control.", + "Tag ID": "Tag ID", + "Examples of tag IDs include GT-XXXXXXXXX, G-XXXXXXXXX, and AW-XXXXXXXXX": "Examples of tag IDs include GT-XXXXXXXXX, G-XXXXXXXXX, and AW-XXXXXXXXX", + "Parameters": "Parameters", + "Name": "Name", + "Value": "Value", + "Standard value": "Standard value", + "Custom value": "Custom value", + "General": "General", + "Share user ID": "Share user ID", + "Expose the authenticated User ID to uniquely identify individual users in Google Analytics.": "Expose the authenticated User ID to uniquely identify individual users in Google Analytics.", + "Command": "Command", + "Event can be used to send an event. Config can be used to configure advanced configuration parameters.": "Event can be used to send an event. Config can be used to configure advanced configuration parameters.", + "Event name": "Event name", + "Track page changes": "Track page changes", + "Send the event when the page is changed.": "Send the event when the page is changed." +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.heatmap.heatmap.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.heatmap.heatmap.json new file mode 100644 index 0000000..6ee2dc4 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.heatmap.heatmap.json @@ -0,0 +1,50 @@ +{ + "Renders a heatmap chart": "Renders a heatmap chart", + "Series": "Series", + "Value attribute": "Value attribute", + "The attribute used to display “heat” at an “x y” location.": "The attribute used to display “heat” at an “x y” location.", + "Data source": "Data source", + "X Axis Attribute": "X Axis Attribute", + "X Axis Sort Attribute": "X Axis Sort Attribute", + "Attribute to use for sorting the data. Sorting can only be used when data source is ‘Database’. For data source ‘Microflow’, the sorting should be done within the microflow.": "Attribute to use for sorting the data. Sorting can only be used when data source is ‘Database’. For data source ‘Microflow’, the sorting should be done within the microflow.", + "X Axis Sort Order": "X Axis Sort Order", + "Y Axis Attribute": "Y Axis Attribute", + "Y Axis Sort Attribute": "Y Axis Sort Attribute", + "Y Axis Sort Order": "Y Axis Sort Order", + "Axis": "Axis", + "Enable Advanced Options": "Enable Advanced Options", + "Show playground slot": "Show playground slot", + "Playground slot": "Playground slot", + "X axis label": "X axis label", + "Y axis label": "Y axis label", + "Show Scale": "Show Scale", + "Grid lines": "Grid lines", + "General": "General", + "Colors": "Colors", + "The percentages with the colors that should be applied. At least two values needs to be specified, for 0% and 100%, else the default colors are used.": "The percentages with the colors that should be applied. At least two values needs to be specified, for 0% and 100%, else the default colors are used.", + "Percentage": "Percentage", + "The percentage at which the color should be applied. This value must be between 0 and 100.": "The percentage at which the color should be applied. This value must be between 0 and 100.", + "Color": "Color", + "The CSS value e.g. blue, #48B0F7 or rgb(0,0,0)": "The CSS value e.g. blue, #48B0F7 or rgb(0,0,0)", + "Scale": "Scale", + "Smooth color": "Smooth color", + "Gradual color gradient between data points": "Gradual color gradient between data points", + "Show values": "Show values", + "Font value color": "Font value color", + "Visibility": "Visibility", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Dimensions": "Dimensions", + "On click action": "On click action", + "Tooltip hover text": "Tooltip hover text", + "Events": "Events", + "Enable theme folder config loading": "Enable theme folder config loading", + "Custom layout": "Custom layout", + "Custom configurations": "Custom configurations", + "Custom series options": "Custom series options", + "Advanced": "Advanced", + "Common": "Common" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.htmlelement.htmlelement.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.htmlelement.htmlelement.json new file mode 100644 index 0000000..11fdf8c --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.htmlelement.htmlelement.json @@ -0,0 +1,27 @@ +{ + "Displays custom HTML": "Displays custom HTML", + "Tag name": "Tag name", + "Custom tag": "Custom tag", + "Repeat element": "Repeat element", + "Repeat element for each item in data source.": "Repeat element for each item in data source.", + "Data source": "Data source", + "Content": "Content", + "HTML": "HTML", + "HTML element": "HTML element", + "Attributes": "Attributes", + "The HTML attributes that are added to the HTML element. For example: ‘title‘, ‘href‘. If ‘class’ or ‘style’ is added as attribute this is merged with the widget class/style property. For events (e.g. onClick) use the Events section.": "The HTML attributes that are added to the HTML element. For example: ‘title‘, ‘href‘. If ‘class’ or ‘style’ is added as attribute this is merged with the widget class/style property. For events (e.g. onClick) use the Events section.", + "Name": "Name", + "Value based on": "Value based on", + "Value": "Value", + "HTML attributes": "HTML attributes", + "General": "General", + "Events": "Events", + "Action": "Action", + "Event": "Event", + "Stop propagation": "Stop propagation", + "Prevent default": "Prevent default", + "Advanced": "Advanced", + "Sanitization configuration": "Sanitization configuration", + "Configuration for HTML sanitization in JSON format. Leave blank for default.": "Configuration for HTML sanitization in JSON format. Leave blank for default.", + "HTML Sanitization": "HTML Sanitization" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.image.image.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.image.image.json new file mode 100644 index 0000000..f72c6c1 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.image.image.json @@ -0,0 +1,34 @@ +{ + "Display an image and enlarge it on click.": "Display an image and enlarge it on click.", + "Image type": "Image type", + "Image source": "Image source", + "Default image": "Default image", + "This is the image that is displayed if no image is uploaded.": "This is the image that is displayed if no image is uploaded.", + "Image URL": "Image URL", + "The link of the external image.": "The link of the external image.", + "Icon": "Icon", + "The icon image.": "The icon image.", + "Background image": "Background image", + "Whether the image is rendered as a background. More content can be put inside, while design properties will have no effect.": "Whether the image is rendered as a background. More content can be put inside, while design properties will have no effect.", + "Place content here": "Place content here", + "Data source": "Data source", + "On click type": "On click type", + "On click": "On click", + "Events": "Events", + "Alternative text": "Alternative text", + "Alternative text of the image for accessibility purposes.": "Alternative text of the image for accessibility purposes.", + "Accessibility": "Accessibility", + "Conditional Visibility": "Conditional Visibility", + "General": "General", + "Width unit": "Width unit", + "Width": "Width", + "Height unit": "Height unit", + "Auto will keep the aspect ratio of the image.": "Auto will keep the aspect ratio of the image.", + "Height": "Height", + "Icon size": "Icon size", + "The size of the icon in pixels.": "The size of the icon in pixels.", + "Show": "Show", + "Responsive": "Responsive", + "Image will never get larger than its original size. It can become smaller.": "Image will never get larger than its original size. It can become smaller.", + "Dimensions": "Dimensions" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.languageselector.languageselector.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.languageselector.languageselector.json new file mode 100644 index 0000000..2c25814 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.languageselector.languageselector.json @@ -0,0 +1,15 @@ +{ + "Data source": "Data source", + "Recommended: Database data source with System.Language as entity.": "Recommended: Database data source with System.Language as entity.", + "Language caption": "Language caption", + "Recommended: $currentObject/Description.": "Recommended: $currentObject/Description.", + "Languages": "Languages", + "Menu position": "Menu position", + "The location of the menu relative to the current selected language (click area).": "The location of the menu relative to the current selected language (click area).", + "Open menu on": "Open menu on", + "Hide for single language": "Hide for single language", + "General": "General", + "Label caption": "Label caption", + "Assistive technology will read this upon reaching the input element.": "Assistive technology will read this upon reaching the input element.", + "Accessibility": "Accessibility" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.linechart.linechart.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.linechart.linechart.json new file mode 100644 index 0000000..15fd8c4 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.linechart.linechart.json @@ -0,0 +1,46 @@ +{ + "Create a line chart": "Create a line chart", + "Series": "Series", + "Add one or more lines. The order influences how lines overlay one another: the first line (from the top) is drawn lowest and other lines are drawn on top of it.": "Add one or more lines. The order influences how lines overlay one another: the first line (from the top) is drawn lowest and other lines are drawn on top of it.", + "Data set": "Data set", + "Data source": "Data source", + "Data points for a single line.": "Data points for a single line.", + "Data points for all lines which will be divided into single lines based on the Group by attribute value.": "Data points for all lines which will be divided into single lines based on the Group by attribute value.", + "Group by": "Group by", + "Data points within the same group form one line.": "Data points within the same group form one line.", + "Series name": "Series name", + "The line name displayed in the legend.": "The line name displayed in the legend.", + "X axis attribute": "X axis attribute", + "Y axis attribute": "Y axis attribute", + "Aggregation function": "Aggregation function", + "Defines how data is aggregated when multiple Y values are available for a single X value": "Defines how data is aggregated when multiple Y values are available for a single X value", + "Tooltip hover text": "Tooltip hover text", + "General": "General", + "Interpolation": "Interpolation", + "Line style": "Line style", + "Line color": "Line color", + "Marker color": "Marker color", + "Appearance": "Appearance", + "On click action": "On click action", + "Events": "Events", + "Custom series options": "Custom series options", + "Advanced": "Advanced", + "Enable advanced options": "Enable advanced options", + "Show playground slot": "Show playground slot", + "Playground slot": "Playground slot", + "X axis label": "X axis label", + "Y axis label": "Y axis label", + "Show legend": "Show legend", + "Grid lines": "Grid lines", + "Visibility": "Visibility", + "Common": "Common", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Dimensions": "Dimensions", + "Enable theme folder config loading": "Enable theme folder config loading", + "Custom layout": "Custom layout", + "Custom configurations": "Custom configurations" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.markdown.markdown.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.markdown.markdown.json new file mode 100644 index 0000000..3245228 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.markdown.markdown.json @@ -0,0 +1,8 @@ +{ + "Value attribute": "Value attribute", + "The attribute used for the content of the text editor, recommendation is to use an unlimited string data type.": "The attribute used for the content of the text editor, recommendation is to use an unlimited string data type.", + "Data source": "Data source", + "Label": "Label", + "Conditional visibility": "Conditional visibility", + "General": "General" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.piechart.piechart.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.piechart.piechart.json new file mode 100644 index 0000000..c46e223 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.piechart.piechart.json @@ -0,0 +1,33 @@ +{ + "Renders a pie or doughnut chart": "Renders a pie or doughnut chart", + "Series": "Series", + "Series name": "Series name", + "Value attribute": "Value attribute", + "Sort attribute": "Sort attribute", + "Sort order": "Sort order", + "Slice color": "Slice color", + "Data source": "Data source", + "Enable advanced options": "Enable advanced options", + "Show playground slot": "Show playground slot", + "Playground slot": "Playground slot", + "Show legend": "Show legend", + "Hole radius": "Hole radius", + "A percentage between 0 and 100 indicating the radius of the hole in the pie chart relative to the chart itself. Defaults to 0.": "A percentage between 0 and 100 indicating the radius of the hole in the pie chart relative to the chart itself. Defaults to 0.", + "Tooltip hover text": "Tooltip hover text", + "General": "General", + "Visibility": "Visibility", + "Common": "Common", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Dimensions": "Dimensions", + "On click action": "On click action", + "Events": "Events", + "Enable theme folder config loading": "Enable theme folder config loading", + "Custom layout": "Custom layout", + "Custom configurations": "Custom configurations", + "Custom series options": "Custom series options", + "Advanced": "Advanced" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.popupmenu.popupmenu.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.popupmenu.popupmenu.json new file mode 100644 index 0000000..ca6e75a --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.popupmenu.popupmenu.json @@ -0,0 +1,24 @@ +{ + "Displays a set of pre-defined items within the Pop-up menu": "Displays a set of pre-defined items within the Pop-up menu", + "Enable advanced options": "Enable advanced options", + "The area to open or close the menu.": "The area to open or close the menu.", + "Responsible for toggling the Pop-up menu.": "Responsible for toggling the Pop-up menu.", + "Menu items": "Menu items", + "The popup menu items.": "The popup menu items.", + "Item type": "Item type", + "Caption": "Caption", + "Visible": "Visible", + "On click action": "On click action", + "Style": "Style", + "An extra class will be added: \"popupmenu-basic-item-[style]\"": "An extra class will be added: \"popupmenu-basic-item-[style]\"", + "The popup menu custom items. To make sure the popup closes correctly after a click, do not configure clickable widgets inside the placeholders. Use the action property of this widget.": "The popup menu custom items. To make sure the popup closes correctly after a click, do not configure clickable widgets inside the placeholders. Use the action property of this widget.", + "Content": "Content", + "Open on": "Open on", + "Close on": "Close on", + "Menu position": "Menu position", + "The location of the menu relative to the click area.": "The location of the menu relative to the click area.", + "General": "General", + "Show preview": "Show preview", + "Use this to see a preview of the menu items while developing.": "Use this to see a preview of the menu items while developing.", + "Development": "Development" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.selectionhelper.selectionhelper.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.selectionhelper.selectionhelper.json new file mode 100644 index 0000000..c1e52c5 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.selectionhelper.selectionhelper.json @@ -0,0 +1,9 @@ +{ + "Style": "Style", + "Custom enables placeholders for using widgets for the different states.": "Custom enables placeholders for using widgets for the different states.", + "Check box caption": "Check box caption", + "All selected": "All selected", + "Some selected": "Some selected", + "None selected": "None selected", + "General": "General" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.timeline.timeline.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.timeline.timeline.json new file mode 100644 index 0000000..6f78a8e --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.timeline.timeline.json @@ -0,0 +1,34 @@ +{ + "Shows vertical timeline with events": "Shows vertical timeline with events", + "Data source": "Data source", + "Title": "Title", + "Description": "Description", + "Time Indication": "Time Indication", + "Data Source": "Data Source", + "Custom Visualization": "Custom Visualization", + "Enables free to model timeline.": "Enables free to model timeline.", + "Icon": "Icon", + "If no icon is configured, a circle will be rendered.": "If no icon is configured, a circle will be rendered.", + "Group Events": "Group Events", + "Shows a header between grouped events based on event date.": "Shows a header between grouped events based on event date.", + "Group Attribute": "Group Attribute", + "Will be used for grouping events, as a group header value. If events have no date time value, use \"Unscheduled events placement\" to control rendering.": "Will be used for grouping events, as a group header value. If events have no date time value, use \"Unscheduled events placement\" to control rendering.", + "Group by": "Group by", + "Group events based on day, month or year.": "Group events based on day, month or year.", + "Format": "Format", + "Format group header with current language's format": "Format group header with current language's format", + "Ungrouped events position": "Ungrouped events position", + "Position in the list of events without a date and time": "Position in the list of events without a date and time", + "General": "General", + "Content of the icon": "Content of the icon", + "Group header": "Group header", + "Content of the group header": "Content of the group header", + "Content of the title": "Content of the title", + "Event time": "Event time", + "Content of the event time": "Content of the event time", + "Content": "Content", + "Content of the description": "Content of the description", + "Custom": "Custom", + "On click": "On click", + "Events": "Events" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.timeseries.timeseries.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.timeseries.timeseries.json new file mode 100644 index 0000000..b374f38 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.timeseries.timeseries.json @@ -0,0 +1,52 @@ +{ + "Create a time series chart": "Create a time series chart", + "Series": "Series", + "Add one or more series. The order of series influences how lines overlay one another: the first line (from the top) is drawn lowest and other lines are drawn on top of it.": "Add one or more series. The order of series influences how lines overlay one another: the first line (from the top) is drawn lowest and other lines are drawn on top of it.", + "Data set": "Data set", + "Data source": "Data source", + "Data points for a single line.": "Data points for a single line.", + "Data points for all lines which will be divided into single lines based on the Group by attribute value.": "Data points for all lines which will be divided into single lines based on the Group by attribute value.", + "Series name": "Series name", + "The line name displayed in the legend.": "The line name displayed in the legend.", + "Group by": "Group by", + "Data points within the same group form one line.": "Data points within the same group form one line.", + "X axis attribute": "X axis attribute", + "Y axis attribute": "Y axis attribute", + "Aggregation function": "Aggregation function", + "Defines how data is aggregated when multiple Y values are available for a single X value": "Defines how data is aggregated when multiple Y values are available for a single X value", + "Tooltip hover text": "Tooltip hover text", + "General": "General", + "Interpolation": "Interpolation", + "Line style": "Line style", + "Line color": "Line color", + "Marker color": "Marker color", + "Fill area": "Fill area", + "Fill area between data point and x-axis": "Fill area between data point and x-axis", + "Area color": "Area color", + "By default, the border color with transparency is used": "By default, the border color with transparency is used", + "Appearance": "Appearance", + "On click action": "On click action", + "Events": "Events", + "Custom series options": "Custom series options", + "Advanced": "Advanced", + "Enable advanced options": "Enable advanced options", + "Show playground slot": "Show playground slot", + "Playground slot": "Playground slot", + "X axis label": "X axis label", + "Y axis label": "Y axis label", + "Show legend": "Show legend", + "Show range slider": "Show range slider", + "Grid lines": "Grid lines", + "Common": "Common", + "Width unit": "Width unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Height": "Height", + "Dimensions": "Dimensions", + "Enable theme folder config loading": "Enable theme folder config loading", + "Custom layout": "Custom layout", + "Custom configurations": "Custom configurations", + "Y-axis range mode": "Y-axis range mode", + "Controls the y-axis range. \"From zero\" starts the y-axis from zero. \"Auto\" sets the range based on the plotted values. \"Non-negative\" only shows a range of positive values. If the series \"Fill area\" property is set to \"yes\", the range mode is set to \"From zero\" by default.": "Controls the y-axis range. \"From zero\" starts the y-axis from zero. \"Auto\" sets the range based on the plotted values. \"Non-negative\" only shows a range of positive values. If the series \"Fill area\" property is set to \"yes\", the range mode is set to \"From zero\" by default." +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.tooltip.tooltip.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.tooltip.tooltip.json new file mode 100644 index 0000000..c14d02c --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.tooltip.tooltip.json @@ -0,0 +1,13 @@ +{ + "Trigger: place widgets here": "Trigger: place widgets here", + "Render method": "Render method", + "Tooltip content: place widgets here": "Tooltip content: place widgets here", + "Tooltip": "Tooltip", + "Tooltip position": "Tooltip position", + "How to position the tooltip in relation to the trigger element - at the top, to the left, at the bottom or to the right.": "How to position the tooltip in relation to the trigger element - at the top, to the left, at the bottom or to the right.", + "Arrow position": "Arrow position", + "How to position the tooltip arrow in relation to the tooltip - at the start, in the center or at the end.": "How to position the tooltip arrow in relation to the tooltip - at the start, in the center or at the end.", + "Open on": "Open on", + "How the tooltip is triggered - click, hover, hover and focus. On mobile device “hover” will be triggered on touch.": "How the tooltip is triggered - click, hover, hover and focus. On mobile device “hover” will be triggered on touch.", + "General": "General" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.treenode.treenode.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.treenode.treenode.json new file mode 100644 index 0000000..7f72846 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.treenode.treenode.json @@ -0,0 +1,23 @@ +{ + "Display a tree view structure": "Display a tree view structure", + "Enable advanced options": "Enable advanced options", + "Data source": "Data source", + "Header type": "Header type", + "Open node when": "Open node when", + "Define which part of the node, when clicked, should open or close this node. \"Header is clicked\" means the whole header is clickable, while \"Icon is clicked\" means only the icon is used to switch node state.": "Define which part of the node, when clicked, should open or close this node. \"Header is clicked\" means the whole header is clickable, while \"Icon is clicked\" means only the icon is used to switch node state.", + "Header": "Header", + "Header caption": "Header caption", + "Has children": "Has children", + "Indicate whether the node has children or is an end node. When set to yes, a composable region becomes available to define the child nodes.": "Indicate whether the node has children or is an end node. When set to yes, a composable region becomes available to define the child nodes.", + "Start expanded": "Start expanded", + "Place other Tree nodes here": "Place other Tree nodes here", + "Animate": "Animate", + "General": "General", + "Show icon": "Show icon", + "Expanded icon": "Expanded icon", + "Collapsed icon": "Collapsed icon", + "Animate icon": "Animate icon", + "Animate the icon when the group is collapsing or expanding.": "Animate the icon when the group is collapsing or expanding.", + "Icon": "Icon", + "Visualization": "Visualization" +} diff --git a/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.videoplayer.videoplayer.json b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.videoplayer.videoplayer.json new file mode 100644 index 0000000..e8cbc64 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/com.mendix.widget.web.videoplayer.videoplayer.json @@ -0,0 +1,29 @@ +{ + "Shows a video from YouTube, Vimeo, Dailymotion and Mp4": "Shows a video from YouTube, Vimeo, Dailymotion and Mp4", + "Type": "Type", + "Video URL": "Video URL", + "The web address of the video: YouTube, Vimeo, Dailymotion or MP4.": "The web address of the video: YouTube, Vimeo, Dailymotion or MP4.", + "Poster URL": "Poster URL", + "The web address of the poster image. A poster image is a custom preview image that will be shown in the player until the user starts the video.": "The web address of the poster image. A poster image is a custom preview image that will be shown in the player until the user starts the video.", + "Data source": "Data source", + "Common": "Common", + "General": "General", + "Auto start": "Auto start", + "Automatically start playing the video when the page loads.": "Automatically start playing the video when the page loads.", + "Show Controls": "Show Controls", + "Display video controls (control bar, display icons, dock buttons). Available for YouTube, Dailymotion and external videos.": "Display video controls (control bar, display icons, dock buttons). Available for YouTube, Dailymotion and external videos.", + "Muted": "Muted", + "Start the video on mute.": "Start the video on mute.", + "Loop": "Loop", + "Loop the video after it finishes. Available for YouTube, Vimeo, and external videos.": "Loop the video after it finishes. Available for YouTube, Vimeo, and external videos.", + "Controls": "Controls", + "Width Unit": "Width Unit", + "Percentage: portion of parent size. Pixels: absolute amount of pixels.": "Percentage: portion of parent size. Pixels: absolute amount of pixels.", + "Width": "Width", + "Height unit": "Height unit", + "Aspect ratio: ratio of width to height. Percentage of parent: portion of parent height. Percentage of width: portion of the width. Pixels: absolute amount of pixels.": "Aspect ratio: ratio of width to height. Percentage of parent: portion of parent height. Percentage of width: portion of the width. Pixels: absolute amount of pixels.", + "Aspect ratio": "Aspect ratio", + "16:9 (Widescreen, HD Video), 4:3 (Classic TV, Standard monitor), 3:2 (Classic film), 21:9 (Cinemascope), 1:1 (Square, Social media)": "16:9 (Widescreen, HD Video), 4:3 (Classic TV, Standard monitor), 3:2 (Classic film), 21:9 (Cinemascope), 1:1 (Square, Social media)", + "Height": "Height", + "Dimensions": "Dimensions" +} diff --git a/Source/themesource/atlas_core/locales/en-US/translation.json b/Source/themesource/atlas_core/locales/en-US/translation.json new file mode 100644 index 0000000..74c8810 --- /dev/null +++ b/Source/themesource/atlas_core/locales/en-US/translation.json @@ -0,0 +1,153 @@ +{ + "Add a shadow to this element": "Add a shadow to this element", + "Add alternating background colors to groups in the accordion.": "Add alternating background colors to groups in the accordion.", + "Align content": "Align content", + "Align content of this element left, right or center it. Align elements inside the container as a row or as a column.": "Align content of this element left, right or center it. Align elements inside the container as a row or as a column.", + "Align icon": "Align icon", + "Align self": "Align self", + "Align the image in the center of an element.": "Align the image in the center of an element.", + "Align the text.": "Align the text.", + "Alignment": "Alignment", + "All": "All", + "Android": "Android", + "Apply a shade to your background color": "Apply a shade to your background color", + "Auto": "Auto", + "Background Primary": "Background Primary", + "Background Secondary": "Background Secondary", + "Background color": "Background color", + "Bar color": "Bar color", + "Bold": "Bold", + "Border": "Border", + "Bordered": "Bordered", + "Borders": "Borders", + "Brand Danger": "Brand Danger", + "Brand Gradient": "Brand Gradient", + "Brand Primary": "Brand Primary", + "Brand Secondary": "Brand Secondary", + "Brand Success": "Brand Success", + "Brand Warning": "Brand Warning", + "Break long words and sentences into multiple lines.": "Break long words and sentences into multiple lines.", + "Callout style": "Callout style", + "Capitalize": "Capitalize", + "Center": "Center", + "Center align as a column": "Center align as a column", + "Center align as a row": "Center align as a row", + "Center image": "Center image", + "Change size of the rating icon/image. Default is medium.": "Change size of the rating icon/image. Default is medium.", + "Change the appearance of a label.": "Change the appearance of a label.", + "Change the appearance of cells in the table.": "Change the appearance of cells in the table.", + "Change the appearance of rows in the list view.": "Change the appearance of rows in the list view.", + "Change the appearance of the tab container": "Change the appearance of the tab container", + "Change the background color of the container.": "Change the background color of the container.", + "Change the border appearance. By default, only horizontal borders between groups are applied.": "Change the border appearance. By default, only horizontal borders between groups are applied.", + "Change the color of text.": "Change the color of text.", + "Change the fit of the image.": "Change the fit of the image.", + "Change the image style.": "Change the image style.", + "Change the letter case of the text.": "Change the letter case of the text.", + "Change the opacity of the image.": "Change the opacity of the image.", + "Change the position of the tabs": "Change the position of the tabs", + "Change the row spacing of the list view.": "Change the row spacing of the list view.", + "Change the spacing between cells to be compact.": "Change the spacing between cells to be compact.", + "Choose one of the following styles to change the appearance of the data grid.": "Choose one of the following styles to change the appearance of the data grid.", + "Choose one of the following styles to change the appearance of the groupbox.": "Choose one of the following styles to change the appearance of the groupbox.", + "Choose one of the following styles to change the appearance of the template grid.": "Choose one of the following styles to change the appearance of the template grid.", + "Choose the image fit.": "Choose the image fit.", + "Choose the style of your image.": "Choose the style of your image.", + "Circle": "Circle", + "Color": "Color", + "Color of the progress bar": "Color of the progress bar", + "Compact": "Compact", + "Contain": "Contain", + "Cover": "Cover", + "Danger": "Danger", + "Dark": "Dark", + "Desktop": "Desktop", + "Detail color": "Detail color", + "Device style": "Device style", + "Emphasize the text with a heavier or lighter font weight": "Emphasize the text with a heavier or lighter font weight", + "Enable data grid hover to make rows hoverable.": "Enable data grid hover to make rows hoverable.", + "Enable groupbox callout functionality to highlight importance of groupbox.": "Enable groupbox callout functionality to highlight importance of groupbox.", + "Enable template grid hover to make rows hoverable.": "Enable template grid hover to make rows hoverable.", + "Extend button to full width of container it is placed in.": "Extend button to full width of container it is placed in.", + "Fill": "Fill", + "Fit": "Fit", + "Float element left or right.": "Float element left or right.", + "Full width": "Full width", + "Header color": "Header color", + "Hide icons": "Hide icons", + "Hide navigation items icon": "Hide navigation items icon", + "Hide on device type": "Hide on device type", + "High": "High", + "Highlight row when hovering over it. Only useful when row is clickable.": "Highlight row when hovering over it. Only useful when row is clickable.", + "Horizontal": "Horizontal", + "Hover style": "Hover style", + "Image fit": "Image fit", + "Image style": "Image style", + "Increase or decrease row spacing in data grid row.": "Increase or decrease row spacing in data grid row.", + "Justify": "Justify", + "Justify tabs to 100% width": "Justify tabs to 100% width", + "L": "L", + "Large": "Large", + "Left": "Left", + "Left align as a column": "Left align as a column", + "Left align as a row": "Left align as a row", + "Letter case": "Letter case", + "Light": "Light", + "Lined": "Lined", + "Low": "Low", + "M": "M", + "Make groups in accordion more compact.": "Make groups in accordion more compact.", + "Make text smaller or larger.": "Make text smaller or larger.", + "Medium": "Medium", + "No styling": "No styling", + "No wrap": "No wrap", + "None": "None", + "Normal": "Normal", + "Opacity": "Opacity", + "Phone": "Phone", + "Pills": "Pills", + "Place icon right or on top button.": "Place icon right or on top button.", + "Primary": "Primary", + "Right": "Right", + "Right align as a column": "Right align as a column", + "Right align as a row": "Right align as a row", + "Rounded": "Rounded", + "Row size": "Row size", + "S": "S", + "Scale-down": "Scale-down", + "Semibold": "Semibold", + "Shade": "Shade", + "Shadow": "Shadow", + "Show widget as inline element.": "Show widget as inline element.", + "Size": "Size", + "Size buttons accordingly: Small, Medium, Large, Full width, etc.. ": "Size buttons accordingly: Small, Medium, Large, Full width, etc.. ", + "Size of the buttons": "Size of the buttons", + "Size of the progress bar": "Size of the progress bar", + "Small": "Small", + "Spacing": "Spacing", + "Square": "Square", + "Striped": "Striped", + "Striped bar": "Striped bar", + "Striped progress bar": "Striped progress bar", + "Style": "Style", + "Style button with transparent background, colored border, and colored text.": "Style button with transparent background, colored border, and colored text.", + "Success": "Success", + "Tab position": "Tab position", + "Tablet": "Tablet", + "The brand style affecting this element's appearance.": "The brand style affecting this element's appearance.", + "The general appearance of the switch. When no option selected iOS styles are applied": "The general appearance of the switch. When no option selected iOS styles are applied", + "The spacing around a widget": "The spacing around a widget", + "Thickness of the progress circle": "Thickness of the progress circle", + "Thumbnail": "Thumbnail", + "Top": "Top", + "Transparent": "Transparent", + "UPPER": "UPPER", + "Warning": "Warning", + "Weight": "Weight", + "White": "White", + "Wizard": "Wizard", + "Wrap": "Wrap", + "Wrap options": "Wrap options", + "iOS": "iOS", + "lower": "lower" +} diff --git a/Source/themesource/atlas_core/locales/metadata.json b/Source/themesource/atlas_core/locales/metadata.json new file mode 100644 index 0000000..db436bb --- /dev/null +++ b/Source/themesource/atlas_core/locales/metadata.json @@ -0,0 +1,50 @@ +{ + "WidgetsToBeTranslated": [ + "com.mendix.widget.custom.badge.badge", + "com.mendix.widget.custom.badgebutton.badgebutton", + "com.mendix.widget.custom.carousel.carousel", + "com.mendix.widget.custom.colorpicker.colorpicker", + "com.mendix.widget.custom.maps.maps", + "com.mendix.widget.custom.progressbar.progressbar", + "com.mendix.widget.custom.progresscircle.progresscircle", + "com.mendix.widget.custom.rangeslider.rangeslider", + "com.mendix.widget.custom.richtext.richtext", + "com.mendix.widget.custom.slider.slider", + "com.mendix.widget.custom.starrating.starrating", + "com.mendix.widget.custom.switch.switch", + "com.mendix.widget.web.accessibilityhelper.accessibilityhelper", + "com.mendix.widget.web.accordion.accordion", + "com.mendix.widget.web.areachart.areachart", + "com.mendix.widget.web.barchart.barchart", + "com.mendix.widget.web.barcodescanner.barcodescanner", + "com.mendix.widget.web.bubblechart.bubblechart", + "com.mendix.widget.web.chartplayground.chartplayground", + "com.mendix.widget.web.columnchart.columnchart", + "com.mendix.widget.web.combobox.combobox", + "com.mendix.widget.web.datagrid.datagrid", + "com.mendix.widget.web.datagriddatefilter.datagriddatefilter", + "com.mendix.widget.web.datagriddropdownfilter.datagriddropdownfilter", + "com.mendix.widget.web.datagridnumberfilter.datagridnumberfilter", + "com.mendix.widget.web.datagridtextfilter.datagridtextfilter", + "com.mendix.widget.web.dropdownsort.dropdownsort", + "com.mendix.widget.web.events.events", + "com.mendix.widget.web.fieldset.fieldset", + "com.mendix.widget.web.fileuploader.fileuploader", + "com.mendix.widget.web.gallery.gallery", + "com.mendix.widget.web.googletag.googletag", + "com.mendix.widget.web.heatmap.heatmap", + "com.mendix.widget.web.htmlelement.htmlelement", + "com.mendix.widget.web.image.image", + "com.mendix.widget.web.languageselector.languageselector", + "com.mendix.widget.web.linechart.linechart", + "com.mendix.widget.web.markdown.markdown", + "com.mendix.widget.web.piechart.piechart", + "com.mendix.widget.web.popupmenu.popupmenu", + "com.mendix.widget.web.selectionhelper.selectionhelper", + "com.mendix.widget.web.timeline.timeline", + "com.mendix.widget.web.timeseries.timeseries", + "com.mendix.widget.web.tooltip.tooltip", + "com.mendix.widget.web.treenode.treenode", + "com.mendix.widget.web.videoplayer.videoplayer" + ] +} diff --git a/Source/themesource/atlas_core/native/core/widgets/floatingactionbutton.js b/Source/themesource/atlas_core/native/core/widgets/floatingactionbutton.js index eda9fe7..2c0fff9 100644 --- a/Source/themesource/atlas_core/native/core/widgets/floatingactionbutton.js +++ b/Source/themesource/atlas_core/native/core/widgets/floatingactionbutton.js @@ -35,6 +35,14 @@ export const com_mendix_widget_native_floatingactionbutton_FloatingActionButton height: 2 } }, + buttonContainer: { + // All ViewStyle properties are allowed + width: floatingActionButton.button.size, + height: floatingActionButton.button.size, + borderRadius: floatingActionButton.button.size / 2, + justifyContent: "center", + alignItems: "center" + }, buttonIcon: { // Size and color are allowed size: floatingActionButton.buttonIcon.size, diff --git a/Source/themesource/atlas_core/native/core/widgets/tabcontainer.js b/Source/themesource/atlas_core/native/core/widgets/tabcontainer.js index 1f68372..68415e5 100644 --- a/Source/themesource/atlas_core/native/core/widgets/tabcontainer.js +++ b/Source/themesource/atlas_core/native/core/widgets/tabcontainer.js @@ -23,7 +23,7 @@ export const TabContainer = { pressOpacity: 0.8, pressColor: tabContainer.tabBar.pressColor, backgroundColor: tabContainer.tabBar.backgroundColor, - height: 48, + minHeight: 48, justifyContent: "center" }, indicator: { diff --git a/Source/themesource/atlas_core/native/variables.js b/Source/themesource/atlas_core/native/variables.js index 3d58bd5..42e5715 100644 --- a/Source/themesource/atlas_core/native/variables.js +++ b/Source/themesource/atlas_core/native/variables.js @@ -466,6 +466,13 @@ let floatingActionButton = { borderColor: brand.primary, backgroundColor: brand.primary }, + buttonContainer: { + heigh: 50, + width: 50, + borderRadius: 25, + justifyContent: "center", + alignItems: "center" + }, buttonIcon: { size: font.sizeLarge, color: contrast.lowest diff --git a/Source/themesource/atlas_core/web/_generated-exclusion-variables.scss b/Source/themesource/atlas_core/web/_generated-exclusion-variables.scss index 6ed7e64..2ca6203 100644 --- a/Source/themesource/atlas_core/web/_generated-exclusion-variables.scss +++ b/Source/themesource/atlas_core/web/_generated-exclusion-variables.scss @@ -1,2 +1,2 @@ -// THIS FILE IS AUTO-GENERATED. PLEASE DO NOT MODIFY THIS FILE. -$use-modern-client: false; +// THIS FILE IS AUTO-GENERATED. PLEASE DO NOT MODIFY THIS FILE. +$use-modern-client: false; \ No newline at end of file diff --git a/Source/themesource/atlas_core/web/core/helpers/_helper-classes.scss b/Source/themesource/atlas_core/web/core/helpers/_helper-classes.scss index e3b7d6f..8d25034 100644 --- a/Source/themesource/atlas_core/web/core/helpers/_helper-classes.scss +++ b/Source/themesource/atlas_core/web/core/helpers/_helper-classes.scss @@ -195,12 +195,18 @@ display: none #{$important-helpers-value}; } } + .profile-phone .hide-phone { + display: none #{$important-helpers-value}; + } @media (min-width: $screen-md) and (max-width: $screen-md-max) { .hide-tablet { display: none #{$important-helpers-value}; } } + .profile-tablet .hide-tablet { + display: none #{$important-helpers-value}; + } @media (min-width: $screen-lg) { .hide-desktop { diff --git a/Source/themesource/atlas_core/web/core/helpers/_navigation-bar.scss b/Source/themesource/atlas_core/web/core/helpers/_navigation-bar.scss index ccdda1a..533bc87 100644 --- a/Source/themesource/atlas_core/web/core/helpers/_navigation-bar.scss +++ b/Source/themesource/atlas_core/web/core/helpers/_navigation-bar.scss @@ -82,11 +82,12 @@ border: 0; box-shadow: 0px 2px 2px rgba(194, 196, 201, 0.30354); & > li.mx-navbar-subitem a { - padding: $spacing-small; - color: $navtopbar-color; border-radius: $border-radius-default; - margin-bottom: $spacing-small; + color: $navtopbar-color; + font-size: $navtopbar-sub-font-size; line-height: 1.2; + margin: 0 0 $spacing-small; + padding: $spacing-small; &:hover, &:focus { color: $navtopbar-color-hover; diff --git a/Source/themesource/atlas_core/web/core/widgets/_data-view.scss b/Source/themesource/atlas_core/web/core/widgets/_data-view.scss index 7404814..413ad5b 100644 --- a/Source/themesource/atlas_core/web/core/widgets/_data-view.scss +++ b/Source/themesource/atlas_core/web/core/widgets/_data-view.scss @@ -13,11 +13,16 @@ ========================================================================== */ .mx-dataview { - /* Dataview-content gives problems for nexted layout grid containers */ - > .mx-dataview-content > .mx-container-nested { - > .row { - margin-right: 0; - margin-left: 0; + display: flex; + flex-direction: column; + /* Dataview-content gives problems for nested layout grid containers */ + > .mx-dataview-content { + flex-grow: 1; + > .mx-container-nested { + > .row { + margin-right: 0; + margin-left: 0; + } } } @@ -29,7 +34,6 @@ } .mx-dataview-controls { - margin-top: $spacing-medium; padding: $spacing-medium 0 0; border-top: 1px solid $dataview-controls-border-color; border-radius: 0; @@ -44,6 +48,13 @@ } } + /* Fix for Dojo rendering in react client */ + [id^="mxui_widget_Wrapper"]:has(> .mx-button) { + .mx-button { + margin-right: $spacing-small; + } + } + background-color: inherit; } } diff --git a/Source/themesource/atlas_core/web/core/widgets/_modal.scss b/Source/themesource/atlas_core/web/core/widgets/_modal.scss index 29ffd5a..c7fa986 100644 --- a/Source/themesource/atlas_core/web/core/widgets/_modal.scss +++ b/Source/themesource/atlas_core/web/core/widgets/_modal.scss @@ -36,7 +36,7 @@ /* For IE8 and earlier */ color: $modal-header-color; text-shadow: none; - &:focus { + &:focus-visible { border-radius: 4px; outline: 2px solid $brand-primary; } diff --git a/Source/themesource/atlas_core/web/core/widgets/_pop-up-menu.scss b/Source/themesource/atlas_core/web/core/widgets/_pop-up-menu.scss index 1f77ea9..30f2111 100644 --- a/Source/themesource/atlas_core/web/core/widgets/_pop-up-menu.scss +++ b/Source/themesource/atlas_core/web/core/widgets/_pop-up-menu.scss @@ -14,9 +14,11 @@ .popupmenu { position: relative; display: inline-flex; + overflow: visible; } .popupmenu-trigger { + position: relative; cursor: pointer; } @@ -65,6 +67,17 @@ } } + ul.popupmenu-menu { + display: flex; + list-style-type: none; + padding-inline-start: 0; + z-index: 1; + } + + .table .td > .popupmenu { + overflow: visible; + } + .popupmenu-basic-divider { width: 100%; height: 1px; diff --git a/Source/themesource/atlas_core/web/core/widgets/_scroll-container-react.scss b/Source/themesource/atlas_core/web/core/widgets/_scroll-container-react.scss index 01e6bbc..451a43e 100644 --- a/Source/themesource/atlas_core/web/core/widgets/_scroll-container-react.scss +++ b/Source/themesource/atlas_core/web/core/widgets/_scroll-container-react.scss @@ -132,7 +132,7 @@ .mx-scrollcontainer-push:not(.mx-scrollcontainer-open) > .mx-scrollcontainer-toggleable, .mx-scrollcontainer-slide:not(.mx-scrollcontainer-open) > .mx-scrollcontainer-toggleable { flex-basis: var(--closed-sidebar-width, 0px); - overflow: clip; + overflow: hidden; } // For open sidebar - full width @@ -188,8 +188,16 @@ overflow-x: clip; } - .mx-scrollcontainer-wrapper:not(.mx-scrollcontainer-nested) { - -webkit-overflow-scrolling: touch; + .mx-scrollcontainer-wrapper { + height: 100%; + + &:not(.mx-scrollcontainer-nested) { + -webkit-overflow-scrolling: touch; + } + + & > .mx-placeholder { + height: 100%; + } } // for push aside and slide over the main part should be non-interactive if sidebar is open diff --git a/Source/themesource/atlas_core/web/layouts/_layout-atlas-responsive.scss b/Source/themesource/atlas_core/web/layouts/_layout-atlas-responsive.scss index 5b9a2e0..ad6945e 100644 --- a/Source/themesource/atlas_core/web/layouts/_layout-atlas-responsive.scss +++ b/Source/themesource/atlas_core/web/layouts/_layout-atlas-responsive.scss @@ -26,7 +26,7 @@ &.mx-navigationtree-has-items:hover > ul { position: absolute; z-index: 100; - top: 0; + top: $topbar-minimalheight; bottom: 0; left: $sidebar-icon-width; display: block; @@ -34,6 +34,7 @@ padding: $spacing-small 0; & > li.mx-navigationtree-has-items:hover > ul { + top: 0; left: 100%; } } @@ -187,6 +188,18 @@ @media (max-width: $screen-sm-max) { padding: 0 $spacing-small; } + + .mx-scrollcontainer-wrapper { + .mx-layoutgrid, + .mx-layoutgrid-fluid { + padding: 0 $gutter-size; + } + } + + .mx-icon-filled, + .mx-icon-lined { + font-size: 20px; + } } } diff --git a/Source/themesource/atlas_core/web/main.scss b/Source/themesource/atlas_core/web/main.scss index 29c24e1..563c96b 100644 --- a/Source/themesource/atlas_core/web/main.scss +++ b/Source/themesource/atlas_core/web/main.scss @@ -2,9 +2,9 @@ @import "exclusion-variables-defaults"; @import "../../../theme/web/exclusion-variables"; @import "generated-exclusion-variables"; +@import "../../../theme/web/custom-variables"; @import "variables"; @import "variables-css-mappings"; -@import "../../../theme/web/custom-variables"; // Font Family Import @if $font-family-import != false { diff --git a/Source/themesource/atlas_web_content/.version b/Source/themesource/atlas_web_content/.version new file mode 100644 index 0000000..1981190 --- /dev/null +++ b/Source/themesource/atlas_web_content/.version @@ -0,0 +1 @@ +3.8.0 diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_alert.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_alert.scss new file mode 100644 index 0000000..a07c84f --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_alert.scss @@ -0,0 +1,74 @@ +// +// DISCLAIMER: +// Do not change this file because it is core styling. +// Customizing core files will make updating Atlas much more difficult in the future. +// To customize any core styling, copy the part you want to customize to styles/web/sass/app/ so the core styling is overwritten. +// + +/* ========================================================================== + Alerts + + Default Bootstrap Alert boxes. Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages +========================================================================== */ + +.alert { + margin-top: 0; + padding: $spacing-medium; + border: 1px solid; + border-radius: $border-radius-default; + padding: $spacing-medium; +} + +.alert-icon { + font-size: $font-size-h3; +} + +.alert-title { + color: inherit; +} + +.alert-description { + color: inherit; +} + +//Variations + +.alert-primary, +.alert { + color: $alert-primary-color; + border-color: $alert-primary-border-color; + background-color: $alert-primary-bg; +} + +.alert-secondary { + color: $alert-secondary-color; + border-color: $alert-secondary-border-color; + background-color: $alert-secondary-bg; +} + +// Semantic variations +.alert-success { + color: $alert-success-color; + border-color: $alert-success-border-color; + background-color: $alert-success-bg; +} + +.alert-warning { + color: $alert-warning-color; + border-color: $alert-warning-border-color; + background-color: $alert-warning-bg; +} + +.alert-danger { + color: $alert-danger-color; + border-color: $alert-danger-border-color; + background-color: $alert-danger-bg; +} + +//== State +//## Styling when component is in certain state +//-------------------------------------------------------------------------------------------------------------------// +.has-error .alert { + margin-top: $spacing-small; + margin-bottom: 0; +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_breadcrumb.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_breadcrumb.scss new file mode 100644 index 0000000..d6a4bbf --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_breadcrumb.scss @@ -0,0 +1,45 @@ +/* ========================================================================== + Breadcrumbs + +========================================================================== */ +.breadcrumb { + //reset + margin: 0; + padding: 0; + border-radius: 0; + background-color: transparent; + font-size: $font-size-default; + margin-bottom: $spacing-large; +} + +//== Elements +//-------------------------------------------------------------------------------------------------------------------// +.breadcrumb-item { + display: inline-block; + margin: 0; + &:last-child { + color: $font-color-default; + a { + text-decoration: none; + } + } +} +.breadcrumb-item + .breadcrumb-item { + &::before { + display: inline-block; + padding-right: $spacing-small; + padding-left: $spacing-small; + content: "/"; + color: $gray-light; + } +} + +//== Variations +//-------------------------------------------------------------------------------------------------------------------// +.breadcrumb-large { + font-size: $font-size-h3; +} +.breadcrumb-underline { + padding-bottom: $spacing-medium; + border-bottom: 1px solid $border-color-default; +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_card.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_card.scss new file mode 100644 index 0000000..7f71a8f --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_card.scss @@ -0,0 +1,63 @@ +/* ========================================================================== + Cards + +========================================================================== */ +.card { + border: 0; + border-radius: $border-radius-default; + background-color: #ffffff; + overflow: hidden; + position: relative; + padding: $spacing-large; + margin-bottom: $spacing-large; +} + +//== Card components +//-------------------------------------------------------------------------------------------------------------------// +.card-body { + padding: $spacing-large; +} + +.card-overlay { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + background: rgba(0, 0, 0, 0.6); + background: linear-gradient( + to bottom, + rgba(255, 255, 255, 0) 0%, + rgba(250, 250, 250, 0) 8%, + rgba(0, 0, 0, 0.99) 121%, + #000 100% + ); + padding: $spacing-large; +} + +.card-title { +} + +.card-image { + width: 100%; + height: auto; +} + +.card-supportingtext { +} + +.card-action { +} + +.card-icon { + font-size: $font-size-h1; +} + +//== Variations +//-------------------------------------------------------------------------------------------------------------------// +.card-with-image { + overflow: hidden; +} + +.card-with-background { + position: relative; +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_chat.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_chat.scss new file mode 100644 index 0000000..2fe5ce9 --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_chat.scss @@ -0,0 +1,147 @@ +/* ========================================================================== + Chats + +========================================================================== */ +.chat { + display: flex; + flex-direction: column; + height: 100%; + background-color: $bg-color-secondary; +} + +//== Elements +//-------------------------------------------------------------------------------------------------------------------// +.chat-content { + display: flex; + overflow: auto; + flex: 1; + flex-direction: column; + justify-content: flex-end; + + .chat-list { + position: relative; + overflow: auto; + + ul { + display: flex; + flex-direction: column-reverse; + margin-bottom: $m-spacing-large; + } + + li { + padding: 15px 30px; + animation: fadeIn 0.2s; + background-color: transparent; + animation-fill-mode: both; + + &, + &:last-child { + border: 0; + } + } + + .mx-listview-loadMore { + position: absolute; + top: 0; + right: 0; + left: 0; + display: block; + width: 50%; + margin: 15px auto; + color: #ffffff; + background-color: $brand-primary; + box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.05); + } + } +} + +.chat-message { + display: flex; +} + +.chat-avatar { + margin: 0 20px 0 0; + border-radius: 50%; +} + +.chat-message-content { + display: inline-flex; + flex-direction: column; +} + +.chat-message-balloon { + position: relative; + display: flex; + flex-direction: column; + padding: 10px 15px; + border-radius: 5px; + background-color: $bg-color; + + &::after { + position: absolute; + top: 10px; + right: 100%; + width: 0; + height: 0; + content: ""; + border: 10px solid transparent; + border-top: 0; + border-right-color: $bg-color; + border-left: 0; + } +} + +.chat-message-time { + padding-top: 2px; + + .form-control-static { + border: 0; + } +} + +.chat-footer { + z-index: 1; + padding: $m-spacing-large; + background-color: $bg-color; + box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.05); +} + +.chat-input { + display: flex; + + .chat-textbox { + flex: 1; + margin-right: $spacing-large; + margin-bottom: 0; + + .form-control { + border: 0; + } + } +} + +//== Variations +//-------------------------------------------------------------------------------------------------------------------// +.chat-message-self { + justify-content: flex-end; + + .chat-avatar { + margin: 0 0 0 20px; + } + + .chat-message-balloon { + background-color: $color-primary-lighter; + + &::after { + left: 100%; + border: 10px solid transparent; + border-top: 0; + border-right: 0; + border-left-color: $color-primary-lighter; + } + } + + .chat-message-time { + text-align: right; + } +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_controlgroup.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_controlgroup.scss new file mode 100644 index 0000000..9ce1f84 --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_controlgroup.scss @@ -0,0 +1,25 @@ +/* ========================================================================== + Control Group + + A group of buttons next to eachother +========================================================================== */ +.controlgroup { + .btn, + .btn-group { + margin-right: $spacing-small; + margin-bottom: $spacing-small; + + &:last-child { + margin-right: 0; + } + .btn { + margin-right: 0; + margin-bottom: 0; + } + } + .btn-group { + .btn + .btn { + margin-left: -1px; + } + } +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_formblock.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_formblock.scss new file mode 100644 index 0000000..c6a2264 --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_formblock.scss @@ -0,0 +1,14 @@ +/* ========================================================================== + Form Block + + Used in default forms +========================================================================== */ +.formblock { + width: 100%; + margin-bottom: $spacing-large; +} + +//== Elements +//-------------------------------------------------------------------------------------------------------------------// +.form-title { +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_heroheader.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_heroheader.scss new file mode 100644 index 0000000..e5e8fd4 --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_heroheader.scss @@ -0,0 +1,41 @@ +/* ========================================================================== + Hero header + +========================================================================== */ + +.headerhero { + width: 100%; + min-height: $header-min-height; + background-color: $header-bg-color; + position: relative; + overflow: hidden; + padding: $spacing-large; + margin-bottom: $spacing-large; +} + +//== Elements +//-------------------------------------------------------------------------------------------------------------------// +.headerhero-title { + color: $header-text-color; +} + +.headerhero-subtitle { + color: $header-text-color; +} + +.headerhero-backgroundimage { + position: absolute; + z-index: 0; + top: 0; + height: 100%; + width: 100%; + filter: $header-bgimage-filter; +} + +.btn.headerhero-action { + color: $header-text-color; +} + +.heroheader-overlay { + z-index: 1; +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_master-detail.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_master-detail.scss new file mode 100644 index 0000000..4cb80dd --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_master-detail.scss @@ -0,0 +1,26 @@ +/* ========================================================================== + Master Detail + + A list with a listening dataview +========================================================================== */ +.masterdetail { + background: #fff; + .masterdetail-master { + border-right: 1px solid $border-color-default; + } + .masterdetail-detail { + padding: $spacing-large; + } +} + +//== Variations +//-------------------------------------------------------------------------------------------------------------------// +.masterdetail-vertical { + background: #fff; + .masterdetail-master { + border-bottom: 1px solid $border-color-default; + } + .masterdetail-detail { + padding: $spacing-large; + } +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_pageblocks.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_pageblocks.scss new file mode 100644 index 0000000..a1bfd9a --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_pageblocks.scss @@ -0,0 +1,28 @@ +/* ========================================================================== + Full page blocks + + Blocks that take up the full width and height +========================================================================== */ + +.fullpageblock { + position: relative; + height: 100%; + min-height: 100%; + + // Helper to make it fullheight + .fullheight { + height: 100% !important; + + & > .mx-dataview-content { + height: inherit !important; + } + } + + .fullpage-overlay { + position: absolute; + z-index: 10; + bottom: 0; + left: 0; + width: 100%; + } +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_pageheader.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_pageheader.scss new file mode 100644 index 0000000..f649e9a --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_pageheader.scss @@ -0,0 +1,21 @@ +/* ========================================================================== + Pageheader +========================================================================== */ + +//== Default +//-------------------------------------------------------------------------------------------------------------------// +.pageheader { + width: 100%; + margin-bottom: $spacing-large; +} + +//== Elements +//-------------------------------------------------------------------------------------------------------------------// +.pageheader-title { +} + +.pageheader-subtitle { +} + +.pageheader-image { +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_userprofile.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_userprofile.scss new file mode 100644 index 0000000..eee81f1 --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_userprofile.scss @@ -0,0 +1,12 @@ +/* ========================================================================== + User profile blocks + - +========================================================================== */ +.userprofile { + .userprofile-img { + } + .userprofile-title { + } + .userprofile-subtitle { + } +} diff --git a/Source/themesource/atlas_web_content/web/buildingblocks/_wizard.scss b/Source/themesource/atlas_web_content/web/buildingblocks/_wizard.scss new file mode 100644 index 0000000..91cd9d8 --- /dev/null +++ b/Source/themesource/atlas_web_content/web/buildingblocks/_wizard.scss @@ -0,0 +1,139 @@ +//Wizard +.wizard { + display: flex; + justify-content: space-between; + width: 100%; + margin-bottom: $spacing-large; +} + +//Wizard step +.wizard-step { + position: relative; + width: 100%; + display: flex; + align-items: center; +} + +//Wizard step number +.wizard-step-number { + position: relative; + z-index: 1; + display: flex; + justify-content: center; + align-items: center; + width: $wizard-step-number-size; + height: $wizard-step-number-size; + color: $wizard-default-step-color; + font-size: $wizard-step-number-font-size; + border-radius: 50%; + background-color: $wizard-default-bg; + border-color: $wizard-default-border-color; +} + +//Wizard step text +.wizard-step-text { + overflow: hidden; + white-space: nowrap; + text-decoration: none; + text-overflow: ellipsis; + color: $wizard-default-step-color; +} + +//Wizard circle +.wizard-circle .wizard-step { + flex-direction: column; + &::before { + position: absolute; + z-index: 0; + top: $wizard-step-number-size / 2; + display: block; + width: 100%; + height: 2px; + content: ""; + background-color: $wizard-default-border-color; + } +} + +//Wizard arrow +.wizard-arrow .wizard-step { + height: $wizard-step-height; + margin-left: calc(0px - (#{$wizard-step-height} / 2)); + padding-left: ($wizard-step-height / 2); + background-color: $wizard-default-bg; + justify-content: flex-start; + border: 1px solid $wizard-default-border-color; + &::before, + &::after { + position: absolute; + z-index: 1; + left: 100%; + margin-left: calc(0px - ((#{$wizard-step-height} / 2) - 1px)); + content: " "; + border-style: solid; + border-color: transparent; + } + &::after { + top: 0; + border-width: calc((#{$wizard-step-height} / 2) - 1px); + border-left-color: $wizard-default-bg; + } + &::before { + top: -1px; + border-width: $wizard-step-height / 2; + border-left-color: $wizard-default-border-color; + } + + &:first-child { + margin-left: 0; + padding-left: 0; + border-top-left-radius: $border-radius-default; + border-bottom-left-radius: $border-radius-default; + } + + &:last-child { + border-top-right-radius: $border-radius-default; + border-bottom-right-radius: $border-radius-default; + &::before, + &::after { + display: none; + } + } +} + +//Wizard states +.wizard-circle .wizard-step-active { + .wizard-step-number { + color: $wizard-active-color; + border-color: $wizard-active-border-color; + background-color: $wizard-active-bg; + } + .wizard-step-text { + color: $wizard-active-step-color; + } +} +.wizard-circle .wizard-step-visited { + .wizard-step-number { + color: $wizard-visited-color; + border-color: $wizard-visited-border-color; + background-color: $wizard-visited-bg; + } + .wizard-step-text { + color: $wizard-visited-step-color; + } +} + +.wizard-arrow .wizard-step-active { + background-color: $wizard-active-bg; + .wizard-step-text { + color: $wizard-active-color; + } + &::after { + border-left-color: $wizard-active-bg; + } +} + +.wizard-arrow .wizard-step-visited { + .wizard-step-text { + color: $link-color; + } +} diff --git a/Source/themesource/atlas_web_content/web/main.scss b/Source/themesource/atlas_web_content/web/main.scss new file mode 100644 index 0000000..df04c6f --- /dev/null +++ b/Source/themesource/atlas_web_content/web/main.scss @@ -0,0 +1,23 @@ +// Default variables +@import "../../atlas_core/web/variables"; +@import "../../../theme/web/custom-variables"; + +// Building blocks +@import "buildingblocks/alert"; +@import "buildingblocks/breadcrumb"; +@import "buildingblocks/card"; +@import "buildingblocks/chat"; +@import "buildingblocks/controlgroup"; +@import "buildingblocks/pageblocks"; +@import "buildingblocks/pageheader"; +@import "buildingblocks/heroheader"; +@import "buildingblocks/formblock"; +@import "buildingblocks/master-detail"; +@import "buildingblocks/userprofile"; +@import "buildingblocks/wizard"; + +// Page templates +@import "pagetemplates/login"; +@import "pagetemplates/list-tab"; +@import "pagetemplates/springboard"; +@import "pagetemplates/statuspage"; diff --git a/Source/themesource/atlas_web_content/web/pagetemplates/_list-tab.scss b/Source/themesource/atlas_web_content/web/pagetemplates/_list-tab.scss new file mode 100644 index 0000000..ff29615 --- /dev/null +++ b/Source/themesource/atlas_web_content/web/pagetemplates/_list-tab.scss @@ -0,0 +1,29 @@ +.listtab-tabs.mx-tabcontainer { + background: $bg-color-secondary; + .mx-tabcontainer-tabs { + background: $brand-primary; + margin-bottom: 0; + li { + > a { + color: #fff; + opacity: 0.6; + &:hover, + &:focus { + color: #fff; + } + } + &.active { + > a { + opacity: 1; + color: #fff; + border-color: #fff; + &:hover, + &:focus { + color: #fff; + border-color: #fff; + } + } + } + } + } +} diff --git a/Source/themesource/atlas_web_content/web/pagetemplates/_login.scss b/Source/themesource/atlas_web_content/web/pagetemplates/_login.scss new file mode 100644 index 0000000..d3dcb55 --- /dev/null +++ b/Source/themesource/atlas_web_content/web/pagetemplates/_login.scss @@ -0,0 +1,10 @@ +.login-formblock { + display: flex; + flex-direction: column; +} + +.login-form { + flex: 1; + display: flex; + flex-direction: column; +} diff --git a/Source/themesource/atlas_web_content/web/pagetemplates/_springboard.scss b/Source/themesource/atlas_web_content/web/pagetemplates/_springboard.scss new file mode 100644 index 0000000..eb30e1a --- /dev/null +++ b/Source/themesource/atlas_web_content/web/pagetemplates/_springboard.scss @@ -0,0 +1,22 @@ +.springboard-grid { + display: flex; + flex-direction: column; + .row { + flex: 1; + .col { + display: flex; + } + } +} + +.springboard-header { + flex: 1; + display: flex; + flex-direction: column; +} + +.springboard-card { + flex: 1; + display: flex; + flex-direction: column; +} diff --git a/Source/themesource/atlas_web_content/web/pagetemplates/_statuspage.scss b/Source/themesource/atlas_web_content/web/pagetemplates/_statuspage.scss new file mode 100644 index 0000000..de73a6e --- /dev/null +++ b/Source/themesource/atlas_web_content/web/pagetemplates/_statuspage.scss @@ -0,0 +1,19 @@ +.statuspage-section { + display: flex; + flex-direction: column; +} + +.statuspage-content { + flex: 1; +} + +.statuspage-icon { + color: #fff; +} + +.statuspage-subtitle { + opacity: 0.6; +} + +.statuspage-buttons { +} diff --git a/Source/themesource/datawidgets/.version b/Source/themesource/datawidgets/.version index a3ebb9f..8de9f11 100644 --- a/Source/themesource/datawidgets/.version +++ b/Source/themesource/datawidgets/.version @@ -1 +1 @@ -2.13.0 \ No newline at end of file +2.31.0 \ No newline at end of file diff --git a/Source/themesource/datawidgets/web/_datagrid-design-properties.scss b/Source/themesource/datawidgets/web/_datagrid-design-properties.scss index 6e15003..82d97c5 100644 --- a/Source/themesource/datawidgets/web/_datagrid-design-properties.scss +++ b/Source/themesource/datawidgets/web/_datagrid-design-properties.scss @@ -1,48 +1,48 @@ .table-compact { .th { - padding: $spacing-small; + padding: var(--spacing-small, $dg-spacing-small); .filter-selectors { - margin: 0 $spacing-small; + margin: 0 var(--spacing-small, $dg-spacing-small); } } &:has(.th .column-container .filter:not(:empty)) { .th { &.column-selector { - padding: $spacing-small 0; + padding: var(--spacing-small, $dg-spacing-small) 0; } &.widget-datagrid-col-select { - padding-bottom: calc($spacing-small + 11px); + padding-bottom: calc(var(--spacing-small, $dg-spacing-small) + 11px); } } } .td { - padding: $spacing-small; + padding: var(--spacing-small, $dg-spacing-small); } .dropdown-container .dropdown-list { - margin: 0 $spacing-small; + margin: 0 var(--spacing-small, $dg-spacing-small); } .column-selector { /* Column content */ .column-selector-content { - padding-right: $spacing-small; + padding-right: var(--spacing-small, $dg-spacing-small); } } } .table-striped { .tr:nth-child(odd) > .td { - background-color: $grid-bg-striped; + background-color: var(--grid-bg-striped, $dg-grid-bg-striped); } } .table-hover { .tr:hover > .td { - background-color: $grid-bg-hover; + background-color: var(--grid-bg-hover, $dg-grid-bg-hover); } } diff --git a/Source/themesource/datawidgets/web/_datagrid-dropdown-filter.scss b/Source/themesource/datawidgets/web/_datagrid-dropdown-filter.scss new file mode 100644 index 0000000..b77663d --- /dev/null +++ b/Source/themesource/datawidgets/web/_datagrid-dropdown-filter.scss @@ -0,0 +1,329 @@ +@mixin scroll-shadow { + background: + /* Shadow Cover TOP */ + linear-gradient(white 30%, rgba(255, 255, 255, 0)) center top, + /* Shadow Cover BOTTOM */ linear-gradient(rgba(255, 255, 255, 0), white 70%) center bottom, + /* Shadow TOP */ linear-gradient(0deg, rgba(255, 255, 255, 0.6), rgba(197, 197, 197, 0.6)) center top, + /* Shadow BOTTOM */ linear-gradient(180deg, rgba(255, 255, 255, 0.6), rgba(197, 197, 197, 0.6)) center bottom; + + background-repeat: no-repeat; + background-size: + 100% 70px, + 100% 70px, + 100% 35px, + 100% 35px; + background-attachment: local, local, scroll, scroll; +} + +@mixin btn-with-cross { + path { + stroke-width: 0; + } + &:hover { + color: var(--brand-primary, #264ae5); + path { + stroke-width: 1px; + } + } +} + +$root: ".widget-dropdown-filter"; + +#{$root} { + --wdf-outer-spacing: var(--dropdown-outer-spacing, 10px); + --wdf-spacing: var(--spacing-smaller, 4px); + --wdf-spacing-tiny: var(--spacing-smallest, 2px); + --wdf-popover-spacing: 0; + --wdf-popover-z-index: 50; + --wdf-popover-shadow: 0px 0px var(--wdf-outer-spacing) 0px var(--shadow-color-border, rgba(0, 0, 0, 0.2)); + --wdf-bd-radius: var(--dropdown-border-radius, 7px); + --wdf-menu-bg-color: var(--label-info-color, #ffffff); + --wdf-menu-max-height: var(--dropdown-menu-max-height, 320px); + --wdf-menu-item-padding: 6px 10px; + --wdf-highlighted-bg-color: var(--color-default-light, #f5f6f6); + --wdf-selected-bg-color: var(--color-primary-lighter, #e6eaff); + --wdf-button-spacing: 8px; + --wdf-color: var(--gray-dark, black); + --wdf-state-icon-size: 16px; + --wdf-toggle-width: calc(4px + var(--wdf-state-icon-size) + var(--wdf-button-spacing)); + --wdf-toggle-inline-end: var(--wdf-toggle-width); + --wdf-clear-margin: var(--wdf-toggle-inline-end); + --wdf-clear-inline-spacing: 6px; + --wdf-clear-border-width: 1px; + --wdf-clear-width: calc(14px + (var(--wdf-clear-inline-spacing) * 2) + var(--wdf-clear-border-width)); + --wdf-toggle-inline-end-clearable: calc(var(--wdf-clear-width) + var(--wdf-toggle-inline-end)); + --wdf-tag-padding: var(--wdf-spacing-tiny) var(--dropdown-outer-spacing, 10px); + + &.form-control { + display: flex; + min-width: 65px; + padding-block: var(--wdf-button-spacing); + padding-inline-end: var(--wdf-button-spacing); + padding-inline-start: var(--wdf-button-spacing); + } + + &-popover { + z-index: var(--wdf-popover-z-index); + box-shadow: var(--wdf-popover-shadow); + margin-top: var(--wdf-spacing); + border-radius: var(--wdf-bd-radius); + } + + &-menu-slot { + border-radius: inherit; + background-color: var(--wdf-menu-bg-color); + } + + &-menu { + @include scroll-shadow; + border-radius: inherit; + margin: 0; + padding: 0; + list-style-type: none; + max-height: var(--wdf-menu-max-height); + overflow-y: auto; + } + + &-menu-item { + display: flex; + flex-flow: row nowrap; + align-content: center; + align-items: center; + cursor: pointer; + user-select: none; + padding: var(--wdf-menu-item-padding); + height: fit-content; + overflow: hidden; + font-weight: normal; + color: var(--wdf-color); + + &:where([data-selected]) { + background-color: var(--wdf-selected-bg-color); + } + + &:where([data-highlighted]) { + background-color: var(--wdf-highlighted-bg-color); + } + } + + &-checkbox-slot { + display: flex; + margin-inline-end: var(--wdf-outer-spacing); + } + + &-input { + border: none; + flex: 1; + margin: 0; + min-width: 50px; + padding: 0; + } + + &-toggle, + &-clear { + background-color: transparent; + border: none; + } + + &-input, + &-toggle { + color: var(--wdf-color); + font-weight: normal; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + } + + &-clear { + @include btn-with-cross; + align-items: center; + align-self: center; + display: flex; + flex-shrink: 0; + justify-self: end; + margin-inline-end: var(--wdf-spacing); + padding: 3px 6px; + position: relative; + + &:has(+ #{$root}-state-icon), + &:has(+ #{$root}-toggle) { + border-inline-end: 1px solid var(--gray, #787d87); + } + } + + &-state-icon { + transition: transform 0.2s; + :where(#{$root}[data-expanded="true"]) & { + transform: rotate(180deg); + } + } + + &-input-container { + align-items: center; + display: flex; + flex: 1; + flex-flow: row wrap; + margin: 0; + min-width: 0; + overflow: hidden; + padding: 0; + position: relative; + } + + &-remove-icon { + cursor: pointer; + display: flex; + @include btn-with-cross; + } + + &-separator { + position: absolute; + margin-inline-end: var(--wdf-clear-margin); + background-color: var(--gray, #787d87); + justify-self: end; + inset-block: var(--wdf-button-spacing); + width: 1px; + } + + &-state-icon, + &-toggle { + align-items: center; + display: flex; + flex-shrink: 0; + justify-content: center; + padding-inline-end: 0; + padding-inline-start: 0; + } +} + +:where([data-highlighted]) #{$root}-checkbox:not(:checked)::after { + content: ""; + border-color: var(--form-input-bg-hover, #e7e7e9); +} + +/* Select variant */ +:where(#{$root}.variant-select) { + #{$root}-toggle { + display: block; + flex: 1 1 0; + justify-content: flex-start; + min-width: 0; + } + + #{$root}-state-icon { + align-self: center; + box-sizing: content-box; + justify-self: end; + pointer-events: none; + } + + #{$root}-input-container { + border: none; + background-color: transparent; + white-space: nowrap; + width: 100%; + } + + #{$root}-controls { + display: flex; + flex-shrink: 0; + align-items: center; + } +} + +:where(#{$root}.variant-select[data-empty]) { + --wdf-input-placeholder-color: rgb(117, 117, 117); + #{$root}-toggle { + color: var(--wdf-input-placeholder-color); + } +} + +/* Combobox variant */ +:where(#{$root}.variant-combobox) { + #{$root}-input { + border-radius: inherit; + padding-inline-start: 0; + padding-inline-end: 0; + } +} + +/* Tag Picker variant */ +:where(#{$root}.variant-tag-picker) { + #{$root}-selected-item { + align-items: center; + background-color: var(--color-primary-lighter, #e6eaff); + border-radius: 26px; + color: #000; + display: inline-flex; + flex-flow: row nowrap; + font-size: var(--font-size-small, 12px); + gap: 8px; + justify-content: center; + line-height: 1.334; + padding: var(--wdf-tag-padding); + &:focus-visible { + outline: var(--brand-primary, #264ae5) auto 1px; + } + } + + #{$root}-input { + flex-basis: 0; + min-width: 50px; + width: initial; + } + + #{$root}-clear { + border-color: transparent; + } +} + +/* Tag Picker variant text */ +:where(#{$root}.variant-tag-picker-text) { + #{$root}-selected-item { + background-color: transparent; + border-radius: 2px; + color: var(--wdf-color); + display: block; + overflow: hidden; + position: absolute; + bottom: 0; + left: 0; + right: 0; + top: 0; + text-overflow: ellipsis; + white-space: nowrap; + z-index: 0; + + &-hidden { + display: none; + } + + &:focus-visible { + outline: var(--brand-primary, #264ae5) solid 1px; + outline-offset: 2px; + } + } + + #{$root}-remove-icon { + padding: var(--wdf-spacing-tiny); + border-radius: 50%; + + path { + stroke-width: 1px; + } + } + + #{$root}-input { + background-color: transparent; + min-width: 75px; + opacity: 0; + width: 100%; + z-index: 1; + + &:focus, + &:not(:has(+ #{$root}-selected-item)) { + opacity: 1; + } + } +} diff --git a/Source/themesource/datawidgets/web/_datagrid-filters.scss b/Source/themesource/datawidgets/web/_datagrid-filters.scss index 38936bf..edba259 100644 --- a/Source/themesource/datawidgets/web/_datagrid-filters.scss +++ b/Source/themesource/datawidgets/web/_datagrid-filters.scss @@ -1,9 +1,10 @@ -$hover-color: #f8f8f8 !default; -$background-color: #fff !default; -$selected-color: #dadcde !default; -$border-color: #ced0d3 !default; +$dg-hover-color: #f8f8f8; +$dg-background-color: #fff; +$dg-selected-color: #dadcde; +$dg-border-color: #ced0d3; +$dg-spacing-small: 8px; $arrow: "resources/dropdown-arrow.svg"; -$item-min-height: 32px; +$dg-item-min-height: 32px; @import "date-picker"; @@ -21,6 +22,7 @@ $item-min-height: 32px; display: flex; flex-direction: row; flex-grow: 1; + position: relative; .filter-input { border-top-left-radius: 0; @@ -58,55 +60,23 @@ $item-min-height: 32px; padding-left: 4px; /* The font has spaces in the right side, so to align in the middle we need this */ } } - - .filter-selectors { - position: absolute; - width: max-content; - left: 0; - margin: 0 $spacing-small; - padding: 0; - background: $background-color; - z-index: 102; - border-radius: 8px; - list-style-type: none; - box-shadow: 0 2px 20px 1px rgba(5, 15, 129, 0.05), 0 2px 16px 0 rgba(33, 43, 54, 0.08); - overflow: hidden; - z-index: 102; - - li { - display: flex; - align-items: center; - font-weight: normal; - line-height: 32px; - cursor: pointer; - - .filter-label { - padding-right: 8px; - } - - &.filter-selected { - background-color: $hover-color; - color: $brand-primary; - } - - &:hover, - &:focus { - background-color: $hover-color; - } - } - } } } .filter-selectors { + position: absolute; + width: max-content; + left: 0; padding: 0; - background: $background-color; + margin: 0; + background: var(--bg-color-secondary, $dg-background-color); + z-index: 51; border-radius: 8px; list-style-type: none; box-shadow: 0 2px 20px 1px rgba(5, 15, 129, 0.05), 0 2px 16px 0 rgba(33, 43, 54, 0.08); overflow: hidden; - z-index: 102; + .filter-listitem, li { display: flex; align-items: center; @@ -119,13 +89,13 @@ $item-min-height: 32px; } &.filter-selected { - background-color: $hover-color; - color: $brand-primary; + background-color: var(--gray-lighter, $dg-hover-color); + color: var(--brand-primary, $dg-brand-primary); } &:hover, - &:focus { - background-color: $hover-color; + &.filter-highlighted { + background-color: var(--gray-lighter, $dg-hover-color); } } } @@ -139,9 +109,9 @@ $item-min-height: 32px; display: flex; align-items: center; font-weight: normal; - min-height: $item-min-height; + min-height: var(--spacing-larger, $dg-item-min-height); cursor: pointer; - padding: 0 $spacing-small; + padding: 0 var(--spacing-small, $dg-spacing-small); .filter-label { overflow: hidden; @@ -150,13 +120,13 @@ $item-min-height: 32px; } &.filter-selected { - background-color: $hover-color; - color: $brand-primary; + background-color: var(--gray-lighter, $dg-hover-color); + color: var(--brand-primary, $dg-brand-primary); } &:hover, &:focus { - background-color: $hover-color; + background-color: var(--gray-lighter, $dg-hover-color); } label { @@ -171,7 +141,7 @@ $item-min-height: 32px; } :not(.dropdown-content) > .dropdown-list { - background: $background-color; + background: var(--bg-color-secondary, $dg-background-color); border-radius: 8px; box-shadow: 0 2px 20px 1px rgba(5, 15, 129, 0.05), 0 2px 16px 0 rgba(33, 43, 54, 0.08); max-height: 40vh; @@ -179,15 +149,11 @@ $item-min-height: 32px; } .dropdown-content { - background: $background-color; + background: var(--bg-color-secondary, $dg-background-color); border-radius: 8px; box-shadow: 0 2px 20px 1px rgba(5, 15, 129, 0.05), 0 2px 16px 0 rgba(33, 43, 54, 0.08); max-height: 40vh; z-index: 140; - - &-section + &-section { - border-top: 1px solid $form-input-border-color; - } } .dropdown-footer { @@ -201,7 +167,7 @@ $item-min-height: 32px; display: flex; flex-flow: row nowrap; align-items: center; - padding: 0 $spacing-small; + padding: 0 var(--spacing-small, $dg-spacing-small); min-height: 40px; } @@ -230,9 +196,9 @@ $item-min-height: 32px; .dropdown-list { left: 0; - margin: 0 $spacing-small; + margin: 0 var(--spacing-small, $dg-spacing-small); padding: 0; - background: $background-color; + background: var(--bg-color-secondary, $dg-background-color); z-index: 102; border-radius: 8px; list-style-type: none; @@ -244,9 +210,9 @@ $item-min-height: 32px; display: flex; align-items: center; font-weight: normal; - min-height: $item-min-height; + min-height: var(--spacing-larger, $dg-item-min-height); cursor: pointer; - padding: 0 $spacing-small; + padding: 0 var(--spacing-small, $dg-spacing-small); .filter-label { overflow: hidden; @@ -255,13 +221,13 @@ $item-min-height: 32px; } &.filter-selected { - background-color: $hover-color; - color: $brand-primary; + background-color: var(--gray-lighter, $dg-hover-color); + color: var(--brand-primary, $dg-brand-primary); } &:hover, &:focus { - background-color: $hover-color; + background-color: var(--gray-lighter, $dg-hover-color); } label { diff --git a/Source/themesource/datawidgets/web/_datagrid-scroll.scss b/Source/themesource/datawidgets/web/_datagrid-scroll.scss deleted file mode 100644 index 911c85c..0000000 --- a/Source/themesource/datawidgets/web/_datagrid-scroll.scss +++ /dev/null @@ -1,25 +0,0 @@ -.sticky-sentinel { - &.container-stuck { - & + .widget-datagrid-grid, - & + .table { - .th { - position: -webkit-sticky; /* Safari */ - position: sticky; - z-index: 50; - } - } - } -} - -.widget-datagrid-content.infinite-loading { - overflow-y: auto; - margin-bottom: 20px; -} - -.table { - .table-content { - &.infinite-loading { - overflow-y: scroll; - } - } -} diff --git a/Source/themesource/datawidgets/web/_datagrid.scss b/Source/themesource/datawidgets/web/_datagrid.scss index f4458d8..c40d78d 100644 --- a/Source/themesource/datawidgets/web/_datagrid.scss +++ b/Source/themesource/datawidgets/web/_datagrid.scss @@ -1,32 +1,33 @@ -$background-color: #fff !default; -$icon-color: #606671 !default; -$icon-size: 14px !default; -$pagination-button-color: #3b4251 !default; -$pagination-caption-color: #0a1325 !default; -$dragging-color-effect: rgba(10, 19, 37, 0.8) !default; -$dragging-effect-size: 4px; - -$grid-bg-striped: #fafafb !default; -$grid-bg-hover: #f5f6f6 !default; -$spacing-small: 8px !default; -$spacing-medium: 16px !default; -$spacing-large: 24px !default; -$grid-border-color: #ced0d3 !default; - -$brand-primary: #264ae5 !default; -$brand-light: #e6eaff !default; -$grid-selected-row-background: $brand-light; +@import "export-alert"; +@import "export-progress"; +@import "pseudo-modal"; + +$dg-background-color: #fff; +$dg-icon-color: #606671; +$dg-icon-size: 14px; +$dg-pagination-button-color: #3b4251; +$dg-pagination-caption-color: #0a1325; +$dragging-color-effect: rgba(10, 19, 37, 0.8); +$dg-dragging-effect-size: 4px; + +$dg-grid-bg-striped: #fafafb; +$dg-grid-bg-hover: #f5f6f6; +$dg-spacing-small: 8px; +$dg-spacing-medium: 16px; +$dg-spacing-large: 24px; +$dg-grid-border-color: #ced0d3; + +$dg-brand-primary: #264ae5; +$dg-brand-light: #e6eaff; +$dg-grid-selected-row-background: $dg-brand-light; +$dg-skeleton-background: linear-gradient(90deg, rgba(194, 194, 194, 0.2) 0%, #d2d2d2 100%); + +$root: ".widget-datagrid"; .table { position: relative; border-width: 0; - background-color: $background-color; - - /* Table Content */ - .table-content { - display: grid; - position: relative; - } + background-color: var(--bg-color-secondary, $dg-background-color); /* Pseudo Row, to target this object please use .tr > .td or .tr > div */ .tr { @@ -34,16 +35,57 @@ $grid-selected-row-background: $brand-light; } /* Column Header */ + @at-root { + :where(.widget-datagrid-grid .th) { + display: flex; + align-items: flex-start; + background-color: var(--bg-color-secondary, $dg-background-color); + border-width: 0; + border-color: var(--grid-border-color, $dg-grid-border-color); + padding: var(--spacing-medium, $dg-spacing-medium); + top: 0; + min-width: 0; + position: relative; + } + } + .th { - display: flex; - align-items: flex-start; - font-weight: 600; - background-color: $background-color; - border-width: 0; - border-color: $grid-border-color; - padding: $spacing-medium; - top: 0; - min-width: 0; + &.dragging { + opacity: 0.5; + &.dragging-over-self { + opacity: 0.8; + } + } + + &.drop-after:after, + &.drop-before:after { + content: ""; + position: absolute; + top: 0; + height: 100%; + width: var(--spacing-smaller, $dg-dragging-effect-size); + background-color: $dragging-color-effect; + + z-index: 1; + } + + &.drop-before { + &:after { + left: 0; + } + &:not(:first-child):after { + transform: translateX(-50%); + } + } + + &.drop-after { + &:after { + right: 0; + } + &:not(:last-child):after { + transform: translateX(50%); + } + } /* Clickable column header (Sortable) */ .clickable { @@ -55,12 +97,13 @@ $grid-selected-row-background: $brand-light; padding: 0 4px; align-self: stretch; cursor: col-resize; + margin-right: -12px; &:hover .column-resizer-bar { - background-color: $brand-primary; + background-color: var(--brand-primary, $dg-brand-primary); } &:active .column-resizer-bar { - background-color: $brand-primary; + background-color: var(--brand-primary, $dg-brand-primary); } .column-resizer-bar { @@ -76,13 +119,6 @@ $grid-selected-row-background: $brand-light; flex-grow: 1; align-self: stretch; min-width: 0; - padding-left: $dragging-effect-size; - margin-left: -$dragging-effect-size; - /* Styles while dragging another column */ - &.dragging { - border-left: $dragging-effect-size solid $dragging-color-effect; - padding-left: 0; - } &:not(:has(.filter)) { .column-header { @@ -93,10 +129,10 @@ $grid-selected-row-background: $brand-light; /* Header text */ .column-header { - margin: 1px 1px 1px -$dragging-effect-size + 1px; - + margin: 1px 1px calc((-1 * var(--spacing-smaller, $dg-dragging-effect-size)) + 2px); display: flex; align-items: baseline; + font-weight: 600; span { min-width: 0; @@ -109,9 +145,9 @@ $grid-selected-row-background: $brand-light; svg { margin-left: 8px; - flex: 0 0 $icon-size; - color: $icon-color; - height: $icon-size; + flex: 0 0 var(--btn-font-size, $dg-icon-size); + color: var(--gray-dark, $dg-icon-color); + height: var(--btn-font-size, $dg-icon-size); align-self: center; } @@ -120,7 +156,7 @@ $grid-selected-row-background: $brand-light; } &:focus-visible { - outline: 1px solid $brand-primary; + outline: 1px solid var(--brand-primary, $dg-brand-primary); } } @@ -128,18 +164,9 @@ $grid-selected-row-background: $brand-light; .filter { display: flex; margin-top: 4px; - input:not([type="checkbox"]) { - font-weight: normal; - flex-grow: 1; - width: 100%; - } > .form-group { margin-bottom: 0; } - > .form-control { - flex: unset; - min-width: unset; - } } } @@ -147,7 +174,7 @@ $grid-selected-row-background: $brand-light; &:has(.th .column-container .filter:not(:empty)) { .th { &.column-selector { - padding: $spacing-medium 0; + padding: var(--spacing-medium, $dg-spacing-medium) 0; } /*adjust filter-selector icon to be mid-bottom aligned */ .column-selector-content { @@ -158,7 +185,7 @@ $grid-selected-row-background: $brand-light; /*adjust checkbox toggle to be mid-bottom aligned */ &.widget-datagrid-col-select { align-items: flex-end; - padding-bottom: calc($spacing-medium + 11px); + padding-bottom: calc(var(--spacing-medium, $dg-spacing-medium) + 11px); } } } @@ -170,7 +197,7 @@ $grid-selected-row-background: $brand-light; /* Column content */ .column-selector-content { align-self: center; - padding-right: $spacing-medium; + padding-right: var(--spacing-medium, $dg-spacing-medium); /* Button containing the eye icon */ .column-selector-button { $icon-margin: 7px; @@ -180,8 +207,8 @@ $grid-selected-row-background: $brand-light; padding: 0; margin: 0; - height: ($icon-size + $icon-margin * 2 + $icon-slack-size); - width: ($icon-size + $icon-margin * 2 + $icon-slack-size); + height: calc(var(--btn-font-size, $dg-icon-size) + $icon-margin * 2 + $icon-slack-size); + width: calc(var(--btn-font-size, $dg-icon-size) + $icon-margin * 2 + $icon-slack-size); svg { margin: $icon-margin; @@ -194,8 +221,11 @@ $grid-selected-row-background: $brand-light; right: 0; margin: 8px; padding: 0 16px; - background: $background-color; + background: var(--bg-color-secondary, $dg-background-color); z-index: 102; + overflow-y: auto; + width: fit-content; + max-width: 500px; border-radius: 3px; border: 1px solid transparent; list-style-type: none; @@ -211,6 +241,8 @@ $grid-selected-row-background: $brand-light; margin: 8px; font-weight: normal; white-space: nowrap; + overflow-x: hidden; + text-overflow: ellipsis; } } } @@ -222,10 +254,10 @@ $grid-selected-row-background: $brand-light; display: flex; justify-content: space-between; align-items: center; - padding: $spacing-medium; + padding: var(--spacing-medium, $dg-spacing-medium); border-style: solid; border-width: 0; - border-color: $grid-border-color; + border-color: var(--grid-border-color, $dg-grid-border-color); border-bottom-width: 1px; min-width: 0; @@ -234,11 +266,11 @@ $grid-selected-row-background: $brand-light; border-top-style: solid; } - &:focus { + &:focus-visible { outline-width: 1px; outline-style: solid; outline-offset: -1px; - outline-color: $brand-primary; + outline-color: var(--brand-primary, $dg-brand-primary); } &.clickable { @@ -288,13 +320,19 @@ $grid-selected-row-background: $brand-light; } } +:where(.table .th .filter input:not([type="checkbox"])) { + font-weight: normal; + flex-grow: 1; + width: 100%; +} + .pagination-bar { display: flex; justify-content: flex-end; white-space: nowrap; align-items: baseline; margin: 16px; - color: $pagination-caption-color; + color: $dg-pagination-caption-color; .paging-status { padding: 0 8px 8px; @@ -302,12 +340,12 @@ $grid-selected-row-background: $brand-light; .pagination-button { padding: 6px; - color: $pagination-button-color; + color: var(--gray-darker, $dg-pagination-button-color); border-color: transparent; background-color: transparent; &:hover { - color: $brand-primary; + color: var(--brand-primary, $dg-brand-primary); border-color: transparent; background-color: transparent; } @@ -322,7 +360,7 @@ $grid-selected-row-background: $brand-light; } &:focus-visible { - outline: 1px solid $brand-primary; + outline: 1px solid var(--brand-primary, $dg-brand-primary); } } .pagination-icon { @@ -341,8 +379,11 @@ $grid-selected-row-background: $brand-light; right: 0; margin: 8px 0; padding: 0 16px; - background: $background-color; + background: var(--bg-color-secondary, $dg-background-color); z-index: 102; + overflow-y: auto; + width: fit-content; + max-width: 500px; border-radius: 3px; border: 1px solid transparent; list-style-type: none; @@ -350,11 +391,6 @@ $grid-selected-row-background: $brand-light; -moz-box-shadow: 0 2px 20px 1px rgba(32, 43, 54, 0.08); box-shadow: 0 2px 20px 1px rgba(32, 43, 54, 0.08); - &.overflow { - height: 250px; - overflow-y: scroll; - } - li { display: flex; align-items: center; @@ -364,22 +400,155 @@ $grid-selected-row-background: $brand-light; margin: 8px; font-weight: normal; white-space: nowrap; + overflow-x: hidden; + text-overflow: ellipsis; } } } -.widget-datagrid { +#{$root} { + position: relative; + + &-grid { + display: grid !important; + } + + &-grid-head { + display: contents; + } + + &-grid-body { + display: contents; + } + &.widget-datagrid-selection-method-click { .tr.tr-selected .td { - background-color: $grid-selected-row-background; + background-color: $dg-grid-selected-row-background; + } + } + + .th.widget-datagrid-col-select, + .td.widget-datagrid-col-select { + align-items: center; + } + + &-exporting { + .widget-datagrid-top-bar, + .widget-datagrid-header, + .widget-datagrid-content, + .widget-datagrid-footer { + visibility: hidden; + + * { + transition: unset; + } + } + } + + &-col-select input:focus-visible { + outline-offset: 0; + } + + &-loader-container { + align-items: center; + background-color: rgba(255, 255, 255, 1); + display: flex; + height: 400px; + justify-content: center; + grid-column: 1/-1; + } + + &-skeleton, + &-spinner { + align-content: center; + align-items: center; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + overflow: hidden; + } + + &-skeleton { + padding: 2px var(--dropdown-outer-padding, 0); + overflow: hidden; + flex: 1; + + &-loader { + animation: skeleton-loading 1s linear infinite alternate; + background: var(--dg-skeleton-background, $dg-skeleton-background); + background-size: 300% 100%; + border-radius: 4px; + height: 16px; + width: 100%; + min-width: 32px; + max-width: 148px; + + &-small { + margin-right: 8px; + width: 16px; + } + } + } + + &-spinner { + justify-content: center; + width: 100%; + + &-margin { + margin: 52px 0; + } + + &-loader { + --widget-combobox-spinner-loader: conic-gradient(#0000 10%, #000), linear-gradient(#000 0 0) content-box; + animation: rotate 1s infinite linear; + aspect-ratio: 1; + background: var(--brand-primary, $dg-brand-primary); + border-radius: 50%; + mask: var(--widget-combobox-spinner-loader); + mask-composite: subtract; + + &-large { + height: 48px; + padding: 7px; + width: 48px; + } + &-medium { + height: 24px; + padding: 3.5px; + width: 24px; + } + + &-small { + height: 16px; + padding: 2.3px; + width: 16px; + } } } } -.widget-datagrid-col-select input:focus-visible { - outline-offset: 0; +.widget-datagrid .widget-datagrid-load-more { + display: block !important; + margin: 0 auto; } -.widget-datagrid-content { +:where(.widget-datagrid-grid.infinite-loading) { overflow-y: auto; } + +:where(.infinite-loading .widget-datagrid-grid-head .th) { + position: sticky; + z-index: 1; +} + +@keyframes skeleton-loading { + 0% { + background-position: right; + } +} + +@keyframes rotate { + to { + transform: rotate(1turn); + } +} diff --git a/Source/themesource/datawidgets/web/_date-picker.scss b/Source/themesource/datawidgets/web/_date-picker.scss index 5f09639..fb424da 100644 --- a/Source/themesource/datawidgets/web/_date-picker.scss +++ b/Source/themesource/datawidgets/web/_date-picker.scss @@ -1,16 +1,16 @@ /** Classes for React Date-Picker font-unit and color adjustments */ -$day-color: #555 !default; -$day-range-color: #000 !default; -$day-range-background: #eaeaea !default; -$outside-month-color: #c8c8c8 !default; -$text-color: #fff !default; -$border-color: #d7d7d7 !default; +$dg-day-color: #555; +$dg-day-range-color: #000; +$dg-day-range-background: #eaeaea; +$dg-outside-month-color: #c8c8c8; +$dg-text-color: #fff; +$dg-border-color: #d7d7d7; .react-datepicker { font-size: 1em; - border: 1px solid $border-color; + border: 1px solid $dg-border-color; } .react-datepicker-wrapper { @@ -25,7 +25,7 @@ $border-color: #d7d7d7 !default; .react-datepicker__header { padding-top: 0.8em; - background-color: $background-color; + background-color: var(--bg-color, $dg-background-color); border-color: transparent; } @@ -54,42 +54,49 @@ $border-color: #d7d7d7 !default; .react-datepicker__day, .react-datepicker__day--in-range { - color: $day-color; + color: $dg-day-color; border-radius: 50%; &:hover { border-radius: 50%; - color: $brand-primary; - background-color: $hover-color; + color: var(--brand-primary, $dg-brand-primary); + background-color: var(--gray-ligter, $dg-hover-color); } } .react-datepicker__day-name { - color: $brand-primary; + color: var(--brand-primary, $dg-brand-primary); font-weight: bold; } .react-datepicker__day--outside-month { - color: $outside-month-color; + color: $dg-outside-month-color; } .react-datepicker__day--today:not(.react-datepicker__day--in-range), .react-datepicker__day--keyboard-selected { - color: $brand-primary; - background-color: $hover-color; + color: var(--brand-primary, $dg-brand-primary); + background-color: var(--gray-ligter, $dg-hover-color); +} + +.react-datepicker__month-select:focus-visible, +.react-datepicker__year-select:focus-visible, +.react-datepicker__navigation:focus-visible, +.react-datepicker__day.react-datepicker__day--keyboard-selected { + outline: 1px solid var(--form-input-border-focus-color); } .react-datepicker__day--selected, .react-datepicker__day--range-start, .react-datepicker__day--range-end, .react-datepicker__day--in-selecting-range.react-datepicker__day--selecting-range-start { - background-color: $brand-primary; - color: $text-color; + background-color: var(--brand-primary, $dg-brand-primary); + color: var(--header-text-color, $dg-text-color); &:hover { border-radius: 50%; - background-color: $brand-primary; - color: $text-color; + background-color: var(--brand-primary, $dg-brand-primary); + color: var(--header-text-color, $dg-text-color); } } @@ -101,17 +108,17 @@ $border-color: #d7d7d7 !default; .react-datepicker__year-text--in-range, .react-datepicker__day--selecting-range-start ) { - background-color: $day-range-background; - color: $day-range-color; + background-color: $dg-day-range-background; + color: $dg-day-range-color; &:hover { - background-color: $brand-primary; - color: $text-color; + background-color: var(--brand-primary, $dg-brand-primary); + color: var(--header-text-color, $dg-text-color); } } button.react-datepicker__close-icon::after { - background-color: $brand-primary; + background-color: var(--brand-primary, $dg-brand-primary); } .react-datepicker__current-month { diff --git a/Source/themesource/datawidgets/web/_drop-down-sort.scss b/Source/themesource/datawidgets/web/_drop-down-sort.scss index fa91049..c622828 100644 --- a/Source/themesource/datawidgets/web/_drop-down-sort.scss +++ b/Source/themesource/datawidgets/web/_drop-down-sort.scss @@ -25,7 +25,7 @@ } .btn-sort { - padding: $spacing-small; + padding: var(--spacing-small, $dg-spacing-small); border-bottom-left-radius: 0; border-top-left-radius: 0; diff --git a/Source/themesource/datawidgets/web/_export-alert.scss b/Source/themesource/datawidgets/web/_export-alert.scss new file mode 100644 index 0000000..b94b48f --- /dev/null +++ b/Source/themesource/datawidgets/web/_export-alert.scss @@ -0,0 +1,45 @@ +$brand-primary: #264ae5 !default; + +.widget-datagrid-export-alert { + background-color: rgba(255, 255, 255, 1); + border-radius: 4px; + box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25); + display: flex; + flex-direction: column; + padding: 54px; + min-width: 200px; + max-width: 378px; + width: 100%; + position: relative; + + &-cancel { + position: absolute; + top: 10px; + right: 10px; + + // TODO: Hover styles + &.btn { + display: flex; + padding: 4px; + &:focus-visible { + outline: 1px solid $brand-primary; + } + } + } + + &-message { + color: rgba(38, 74, 229, 1); + font-size: 18px; + font-weight: 700; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + &-failed { + .widget-datagrid-export-progress-indicator { + background-color: rgba(227, 63, 78, 1); + } + } +} diff --git a/Source/themesource/datawidgets/web/_export-progress.scss b/Source/themesource/datawidgets/web/_export-progress.scss new file mode 100644 index 0000000..cb54a0b --- /dev/null +++ b/Source/themesource/datawidgets/web/_export-progress.scss @@ -0,0 +1,37 @@ +.widget-datagrid-export-progress { + align-items: center; + background-color: rgba(240, 241, 242, 1); + border-radius: 4px; + display: flex; + height: 18px; + overflow: hidden; + position: relative; + transform: translateZ(0); + width: 100%; + + &-indicator { + background-color: rgba(38, 74, 229, 1); + border-radius: 4px; + height: 17px; + transition: transform 100ms cubic-bezier(0.65, 0, 0.35, 1); + width: 100%; + } + + &-indicator-indeterminate { + animation: indeterminateAnimation 1s infinite linear; + transform-origin: 0% 50%; + transition: none; + } +} + +@keyframes indeterminateAnimation { + 0% { + transform: translateX(0) scaleX(0); + } + 40% { + transform: translateX(0) scaleX(0.4); + } + 100% { + transform: translateX(100%) scaleX(0.5); + } +} diff --git a/Source/themesource/datawidgets/web/_gallery-design-properties.scss b/Source/themesource/datawidgets/web/_gallery-design-properties.scss index f8e2f2c..0fc17c2 100644 --- a/Source/themesource/datawidgets/web/_gallery-design-properties.scss +++ b/Source/themesource/datawidgets/web/_gallery-design-properties.scss @@ -7,14 +7,14 @@ // All borders .widget-gallery-bordered-all { .widget-gallery-item { - border: 1px solid $grid-border-color; + border: 1px solid var(--grid-border-color, $dg-grid-border-color); } } // Vertical borders .widget-gallery-bordered-vertical { .widget-gallery-item { - border-color: $grid-border-color; + border-color: var(--grid-border-color, $dg-grid-border-color); border-style: solid; border-width: 0; border-left-width: 1px; @@ -25,7 +25,7 @@ // Horizontal orders .widget-gallery-bordered-horizontal { .widget-gallery-item { - border-color: $grid-border-color; + border-color: var(--grid-border-color, $dg-grid-border-color); border-style: solid; border-width: 0; border-top-width: 1px; @@ -37,7 +37,7 @@ .widget-gallery-hover { .widget-gallery-items { .widget-gallery-item:hover { - background-color: $grid-bg-hover; + background-color: var(--grid-bg-hover, $dg-grid-bg-hover); } } } @@ -45,7 +45,7 @@ // Striped styles .widget-gallery-striped { .widget-gallery-item:nth-child(odd) { - background-color: $grid-bg-striped; + background-color: var(--grid-bg-striped, $dg-grid-bg-striped); } .widget-gallery-item:nth-child(even) { background-color: #fff; @@ -62,21 +62,21 @@ // Grid spacing small .widget-gallery.widget-gallery-gridgap-small { .widget-gallery-items { - gap: $spacing-small; + gap: var(--spacing-small, $dg-spacing-small); } } // Grid spacing medium .widget-gallery.widget-gallery-gridgap-medium { .widget-gallery-items { - gap: $spacing-medium; + gap: var(--spacing-medium, $dg-spacing-medium); } } // Grid spacing large .widget-gallery.widget-gallery-gridgap-large { .widget-gallery-items { - gap: $spacing-large; + gap: var(--spacing-large, $dg-spacing-large); } } diff --git a/Source/themesource/datawidgets/web/_gallery.scss b/Source/themesource/datawidgets/web/_gallery.scss index 6c1df97..743dd90 100644 --- a/Source/themesource/datawidgets/web/_gallery.scss +++ b/Source/themesource/datawidgets/web/_gallery.scss @@ -3,10 +3,13 @@ Override styles of Gallery widget ========================================================================== */ +$gallery-screen-lg: 992px; +$gallery-screen-md: 768px; + @mixin grid-items($number, $suffix) { @for $i from 1 through $number { &.widget-gallery-#{$suffix}-#{$i} { - grid-template-columns: repeat($i, 1fr); + grid-template-columns: repeat($i, minmax(0, 1fr)); } } } @@ -22,26 +25,26 @@ .widget-gallery { .widget-gallery-items { display: grid; - grid-gap: $spacing-small; + grid-gap: var(--spacing-small, $dg-spacing-small); /* Desktop widths */ - @media screen and (min-width: $screen-lg) { + @media screen and (min-width: $gallery-screen-lg) { @include grid-items(12, "lg"); } /* Tablet widths */ - @media screen and (min-width: $screen-md) and (max-width: ($screen-lg - 1px)) { + @media screen and (min-width: $gallery-screen-md) and (max-width: ($gallery-screen-lg - 1px)) { @include grid-items(12, "md"); } /* Phone widths */ - @media screen and (max-width: ($screen-md - 1)) { + @media screen and (max-width: ($gallery-screen-md - 1)) { @include grid-items(12, "sm"); } } @@ -54,14 +57,14 @@ } &:focus-visible { - outline: 1px solid $brand-primary; + outline: 1px solid var(--brand-primary, $dg-brand-primary); outline-offset: -1px; } } &:not(.widget-gallery-disable-selected-items-highlight) { .widget-gallery-item.widget-gallery-clickable.widget-gallery-selected { - background: $brand-light; + background: $dg-brand-light; } } diff --git a/Source/themesource/datawidgets/web/_pseudo-modal.scss b/Source/themesource/datawidgets/web/_pseudo-modal.scss new file mode 100644 index 0000000..54c9190 --- /dev/null +++ b/Source/themesource/datawidgets/web/_pseudo-modal.scss @@ -0,0 +1,33 @@ +.widget-datagrid-modal { + &-overlay { + animation: fade-in 300ms cubic-bezier(0.16, 1, 0.3, 1); + background-color: rgba(128, 128, 128, 0.5); + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 50; + } + + &-main { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + z-index: 55; + } +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} diff --git a/Source/themesource/datawidgets/web/_tree-node-design-properties.scss b/Source/themesource/datawidgets/web/_tree-node-design-properties.scss index 7f267b1..92166b0 100644 --- a/Source/themesource/datawidgets/web/_tree-node-design-properties.scss +++ b/Source/themesource/datawidgets/web/_tree-node-design-properties.scss @@ -4,10 +4,12 @@ //== Design Properties //## Helper classes to change the look and feel of the component ========================================================================== */ +$dg-grid-border-color: #ced0d3; +$dg-grid-bg-hover: #f5f6f6; .widget-tree-node-hover { .widget-tree-node-branch:hover > .widget-tree-node-branch-header { - background-color: $grid-bg-hover; + background-color: var(--grid-bg-hover, $dg-grid-bg-hover); } } @@ -16,12 +18,12 @@ border-width: 0; border-bottom-width: 1px; border-bottom-style: solid; - border-bottom-color: $grid-border-color; + border-bottom-color: var(--grid-border-color, $dg-grid-border-color); } } .widget-tree-node-bordered-all { - border: 1px solid $grid-border-color; + border: 1px solid var(--grid-border-color, $dg-grid-border-color); border-radius: 8px; overflow: hidden; diff --git a/Source/themesource/datawidgets/web/main.scss b/Source/themesource/datawidgets/web/main.scss index dfcc61f..19fbcb8 100644 --- a/Source/themesource/datawidgets/web/main.scss +++ b/Source/themesource/datawidgets/web/main.scss @@ -1,8 +1,8 @@ @import "../../../theme/web/custom-variables"; @import "datagrid"; @import "datagrid-filters"; +@import "datagrid-dropdown-filter"; @import "datagrid-design-properties"; -@import "datagrid-scroll"; @import "drop-down-sort"; @import "gallery"; @import "gallery-design-properties"; diff --git a/Source/themesource/nanoflowcommons/.version b/Source/themesource/nanoflowcommons/.version new file mode 100644 index 0000000..09b254e --- /dev/null +++ b/Source/themesource/nanoflowcommons/.version @@ -0,0 +1 @@ +6.0.0 diff --git a/Source/themesource/nanoflowcommons/native/design-properties.json b/Source/themesource/nanoflowcommons/native/design-properties.json new file mode 100644 index 0000000..49d1a20 --- /dev/null +++ b/Source/themesource/nanoflowcommons/native/design-properties.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/Source/themesource/nanoflowcommons/native/main.js b/Source/themesource/nanoflowcommons/native/main.js new file mode 100644 index 0000000..b611ae1 --- /dev/null +++ b/Source/themesource/nanoflowcommons/native/main.js @@ -0,0 +1,2 @@ +import * as variables from "../../../theme/native/custom-variables"; + diff --git a/Source/themesource/nanoflowcommons/web/design-properties.json b/Source/themesource/nanoflowcommons/web/design-properties.json new file mode 100644 index 0000000..49d1a20 --- /dev/null +++ b/Source/themesource/nanoflowcommons/web/design-properties.json @@ -0,0 +1,3 @@ +{ + +} diff --git a/Source/themesource/nanoflowcommons/web/main.scss b/Source/themesource/nanoflowcommons/web/main.scss new file mode 100644 index 0000000..122370f --- /dev/null +++ b/Source/themesource/nanoflowcommons/web/main.scss @@ -0,0 +1,2 @@ +@import '../../../theme/web/custom-variables'; + diff --git a/Source/widgets/Badge.mpk b/Source/widgets/Badge.mpk new file mode 100644 index 0000000..aa63bb9 Binary files /dev/null and b/Source/widgets/Badge.mpk differ diff --git a/Source/widgets/Charts.mpk b/Source/widgets/Charts.mpk index 70b94cf..f68080b 100644 Binary files a/Source/widgets/Charts.mpk and b/Source/widgets/Charts.mpk differ diff --git a/Source/widgets/Maps.mpk b/Source/widgets/Maps.mpk index cb47146..3d0ed30 100644 Binary files a/Source/widgets/Maps.mpk and b/Source/widgets/Maps.mpk differ diff --git a/Source/widgets/ProgressBar.mpk b/Source/widgets/ProgressBar.mpk index b0c126c..3600d84 100644 Binary files a/Source/widgets/ProgressBar.mpk and b/Source/widgets/ProgressBar.mpk differ diff --git a/Source/widgets/ProgressCircle.mpk b/Source/widgets/ProgressCircle.mpk index d6f9697..3271044 100644 Binary files a/Source/widgets/ProgressCircle.mpk and b/Source/widgets/ProgressCircle.mpk differ diff --git a/Source/widgets/com.mendix.widget.native.Feedback.mpk b/Source/widgets/com.mendix.widget.native.Feedback.mpk index b16c6b4..67f2cfb 100644 Binary files a/Source/widgets/com.mendix.widget.native.Feedback.mpk and b/Source/widgets/com.mendix.widget.native.Feedback.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.Combobox.mpk b/Source/widgets/com.mendix.widget.web.Combobox.mpk index 30c26e8..bda4df5 100644 Binary files a/Source/widgets/com.mendix.widget.web.Combobox.mpk and b/Source/widgets/com.mendix.widget.web.Combobox.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.Datagrid.mpk b/Source/widgets/com.mendix.widget.web.Datagrid.mpk index 6a20a6f..2455e9f 100644 Binary files a/Source/widgets/com.mendix.widget.web.Datagrid.mpk and b/Source/widgets/com.mendix.widget.web.Datagrid.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.DatagridDateFilter.mpk b/Source/widgets/com.mendix.widget.web.DatagridDateFilter.mpk index 33e607a..075c3fb 100644 Binary files a/Source/widgets/com.mendix.widget.web.DatagridDateFilter.mpk and b/Source/widgets/com.mendix.widget.web.DatagridDateFilter.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.DatagridDropdownFilter.mpk b/Source/widgets/com.mendix.widget.web.DatagridDropdownFilter.mpk index 91226ba..d19bc68 100644 Binary files a/Source/widgets/com.mendix.widget.web.DatagridDropdownFilter.mpk and b/Source/widgets/com.mendix.widget.web.DatagridDropdownFilter.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.DatagridNumberFilter.mpk b/Source/widgets/com.mendix.widget.web.DatagridNumberFilter.mpk index 7d02981..36ef14a 100644 Binary files a/Source/widgets/com.mendix.widget.web.DatagridNumberFilter.mpk and b/Source/widgets/com.mendix.widget.web.DatagridNumberFilter.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.DatagridTextFilter.mpk b/Source/widgets/com.mendix.widget.web.DatagridTextFilter.mpk index a76ae61..b5dec47 100644 Binary files a/Source/widgets/com.mendix.widget.web.DatagridTextFilter.mpk and b/Source/widgets/com.mendix.widget.web.DatagridTextFilter.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.DropdownSort.mpk b/Source/widgets/com.mendix.widget.web.DropdownSort.mpk index 96ffa19..085f796 100644 Binary files a/Source/widgets/com.mendix.widget.web.DropdownSort.mpk and b/Source/widgets/com.mendix.widget.web.DropdownSort.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.Gallery.mpk b/Source/widgets/com.mendix.widget.web.Gallery.mpk index f827b52..9140946 100644 Binary files a/Source/widgets/com.mendix.widget.web.Gallery.mpk and b/Source/widgets/com.mendix.widget.web.Gallery.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.LanguageSelector.mpk b/Source/widgets/com.mendix.widget.web.LanguageSelector.mpk index fdc4834..55e53d0 100644 Binary files a/Source/widgets/com.mendix.widget.web.LanguageSelector.mpk and b/Source/widgets/com.mendix.widget.web.LanguageSelector.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.Timeline.mpk b/Source/widgets/com.mendix.widget.web.Timeline.mpk new file mode 100644 index 0000000..2d86239 Binary files /dev/null and b/Source/widgets/com.mendix.widget.web.Timeline.mpk differ diff --git a/Source/widgets/com.mendix.widget.web.TreeNode.mpk b/Source/widgets/com.mendix.widget.web.TreeNode.mpk index 12f9dd6..42b6df6 100644 Binary files a/Source/widgets/com.mendix.widget.web.TreeNode.mpk and b/Source/widgets/com.mendix.widget.web.TreeNode.mpk differ diff --git a/v10.6.0 b/v10.21.0 similarity index 100% rename from v10.6.0 rename to v10.21.0