diff --git a/public/build/assets/create-5a2ad8a8.js b/public/build/assets/create-5a2ad8a8.js deleted file mode 100644 index b0d95fa8ea..0000000000 --- a/public/build/assets/create-5a2ad8a8.js +++ /dev/null @@ -1 +0,0 @@ -import{a as h,d as b,g as w,l as S,f as v,b as k,G as T}from"./get-10f2a251.js";import{f as C,k as g,I as x,l as I,m as p}from"./vendor-5ec3da0f.js";function m(){return{id:"",name:"",alpine_name:""}}function L(){let t=C(new Date,"yyyy-MM-dd HH:mm");return{description:"",amount:"",currency_code:"EUR",foreign_amount:"",foreign_currency_code:"",source_account:m(),destination_account:m(),budget_id:null,category_name:"",piggy_bank_id:null,bill_id:null,tags:[],notes:"",internal_reference:"",external_url:"",hasLocation:!1,map:null,latitude:null,longitude:null,zoomLevel:null,marker:null,date:t,interest_date:"",book_date:"",process_date:"",due_date:"",payment_date:"",invoice_date:"",errors:{amount:[],foreign_amount:[],budget_id:[],category_name:[],piggy_bank_id:[]}}}function A(e,t){let o=[];for(let a in e)if(e.hasOwnProperty(a)){const n=e[a];let r={};r.description=n.description,r.source_name=n.source_account.name,r.destination_name=n.destination_account.name,r.amount=n.amount,r.currency_code=n.currency_code,r.date=n.date,r.interest_date=n.interest_date,r.book_date=n.book_date,r.process_date=n.process_date,r.due_date=n.due_date,r.payment_date=n.payment_date,r.invoice_date=n.invoice_date,r.budget_id=n.budget_id,r.category_name=n.category_name,r.piggy_bank_id=n.piggy_bank_id,n.hasLocation&&(r.longitude=n.longitude.toString(),r.latitude=n.latitude.toString(),r.zoom_level=n.zoomLevel),typeof n.foreign_currency_code<"u"&&n.foreign_currency_code.toString()!==""&&(r.foreign_currency_code=n.foreign_currency_code,typeof n.foreign_amount<"u"&&n.foreign_amount.toString()!==""&&(r.foreign_amount=n.foreign_amount),(typeof n.foreign_amount>"u"||n.foreign_amount.toString()==="")&&(delete r.foreign_amount,delete r.foreign_currency_code)),typeof n.source_account.id<"u"&&n.source_account.id.toString()!==""&&(r.source_id=n.source_account.id),typeof n.destination_account.id<"u"&&n.destination_account.id.toString()!==""&&(r.destination_id=n.destination_account.id),r.type=t,o.push(r)}return o}let O=class{post(t){let o="/api/v2/transactions";return h.post(o,t)}};class E{post(t,o,a){let n="/api/v1/attachments";return h.post(n,{filename:t,attachable_type:o,attachable_id:a})}upload(t,o){let a="./api/v1/attachments/"+t+"/upload";return axios.post(a,o)}}let q=class{list(t){return h.get("/api/v2/currencies",{params:t})}};class ${list(t){return h.get("/api/v2/budgets",{params:t})}}let l;const d={description:"/api/v2/autocomplete/transaction-descriptions",account:"/api/v2/autocomplete/accounts",category:"/api/v2/autocomplete/categories",tag:"/api/v2/autocomplete/tags"};let B=function(e,t){console.log("Now in uploadAttachments"),t=t.reverse();let o=[],a=0,n=[],r=document.querySelectorAll('input[name="attachments[]"]');console.log(r);for(const s in r)if(r.hasOwnProperty(s)&&/^0$|^[1-9]\d*$/.test(s)&&s<=4294967294){console.log("Now at attachment #"+s);for(const i in r[s].files)r[s].files.hasOwnProperty(i)&&/^0$|^[1-9]\d*$/.test(i)&&i<=4294967294&&(console.log("Will upload #"+i+" from attachment #"+s+" to transaction #"+t[s].transaction_journal_id),o.push({journal:t[s].transaction_journal_id,file:r[s].files[i]}),a++)}console.log("Found "+a+" attachments.");for(const s in o)o.hasOwnProperty(s)&&/^0$|^[1-9]\d*$/.test(s)&&s<=4294967294&&(console.log("Create file reader for file #"+s),function(i,c){let u=new FileReader;u.onloadend=function(f){f.target.readyState===FileReader.DONE&&(console.log("Done reading file #"+c),n.push({name:o[c].file.name,journal:o[c].journal,content:new Blob([f.target.result])}),n.length===a&&(console.log("Done reading file #"+c),P(n,e)))},u.readAsArrayBuffer(i.file)}(o[s],s));return a},P=function(e,t){let o=e.length,a=0;console.log("Will now upload "+o+" file(s) to journal with id #"+t);for(const n in e)if(e.hasOwnProperty(n)&&/^0$|^[1-9]\d*$/.test(n)&&n<=4294967294){console.log("Creating attachment #"+n);let r=new E;r.post(e[n].name,"TransactionJournal",e[n].journal).then(s=>{let i=parseInt(s.data.data.id);console.log("Created attachment #"+i+" for key #"+n),console.log("Uploading attachment #"+n),r.upload(i,e[n].content).then(c=>{if(a++,a===o){console.log("FINAL UPLOAD, redirect user to new transaction or reset form or whatever.");const u=new CustomEvent("upload-success",{some:"details"});document.dispatchEvent(u);return}console.log("Upload complete!")}).catch(c=>{console.error("Could not upload"),console.error(c),a++,a===o&&console.log("FINAL UPLOAD, redirect user to new transaction or reset form or whatever.")})}).catch(s=>{console.error("Could not create upload."),console.error(s),a++,a===o&&console.log("FINAL UPLOAD, redirect user to new transaction or reset form or whatever.")})}},M=function(){return{count:0,totalAmount:0,transactionType:"unknown",showSuccessMessage:!1,showErrorMessage:!1,defaultCurrency:{},entries:[],loadingCurrencies:!0,loadingBudgets:!0,loadingPiggyBanks:!0,loadingSubscriptions:!0,enabledCurrencies:[],nativeCurrencies:[],foreignCurrencies:[],budgets:[],piggyBanks:{},subscriptions:[],dateFields:["interest_date","book_date","process_date","due_date","payment_date","invoice_date"],foreignAmountEnabled:!0,filters:{source:[],destination:[]},errorMessageText:"",successMessageLink:"#",successMessageText:"",showError:!1,showSuccess:!1,showWaitMessage:!1,returnHereButton:!0,resetButton:!1,resetButtonEnabled:!1,rulesButton:!0,webhookButton:!0,submitting:!1,newGroupTitle:"",newGroupId:0,hasLocation:!1,latitude:51.959659235274,longitude:5.756805887265858,zoomLevel:13,detectTransactionType(){const e=this.entries[0].source_account.type??"unknown",t=this.entries[0].destination_account.type??"unknown";if(e==="unknown"&&t==="unknown"){this.transactionType="unknown",console.warn("Cannot infer transaction type from two unknown accounts.");return}if(e===t&&["Asset account","Loan","Debt","Mortgage"].includes(e)){this.transactionType="transfer",console.log('Transaction type is detected to be "'+this.transactionType+'".'),console.log("filter down currencies for transfer."),this.filterNativeCurrencies(this.entries[0].source_account.currency_code),this.filterForeignCurrencies(this.entries[0].destination_account.currency_code);return}if(e==="Asset account"&&["Expense account","Debt","Loan","Mortgage"].includes(t)){this.transactionType="withdrawal",console.log('[a] Transaction type is detected to be "'+this.transactionType+'".'),this.filterNativeCurrencies(this.entries[0].source_account.currency_code);return}if(e==="Asset account"&&t==="unknown"){this.transactionType="withdrawal",console.log('[b] Transaction type is detected to be "'+this.transactionType+'".'),console.log(this.entries[0].source_account),this.filterNativeCurrencies(this.entries[0].source_account.currency_code);return}if(["Debt","Loan","Mortgage"].includes(e)&&t==="Expense account"){this.transactionType="withdrawal",console.log('[c] Transaction type is detected to be "'+this.transactionType+'".'),this.filterNativeCurrencies(this.entries[0].source_account.currency_code);return}if(e==="Revenue account"&&["Asset account","Debt","Loan","Mortgage"].includes(t)){this.transactionType="deposit",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}if(["Debt","Loan","Mortgage"].includes(e)&&t==="Asset account"){this.transactionType="deposit",console.log('Transaction type is detected to be "'+this.transactionType+'".');return}console.warn('Unknown account combination between "'+e+'" and "'+t+'".')},selectSourceAccount(e,t){const o=parseInt(t._searchInput.attributes["data-index"].value);document.querySelector("#form")._x_dataStack[0].$data.entries[o].source_account={id:e.id,name:e.name,alpine_name:e.name,type:e.type,currency_code:e.currency_code},console.log("Changed source account into a known "+e.type.toLowerCase()),document.querySelector("#form")._x_dataStack[0].detectTransactionType()},filterForeignCurrencies(e){console.log('filterForeignCurrencies("'+e+'")');let t=[],o;for(let a in this.enabledCurrencies)if(this.enabledCurrencies.hasOwnProperty(a)){let n=this.enabledCurrencies[a];n.code===e&&(o=n)}t.push(o),this.foreignCurrencies=t,t.length===1&&t[0].code===this.entries[0].source_account.currency_code&&(console.log("Foreign currency is same as source currency. Disable foreign amount."),this.foreignAmountEnabled=!1),t.length===1&&t[0].code!==this.entries[0].source_account.currency_code&&(console.log("Foreign currency is NOT same as source currency. Enable foreign amount."),this.foreignAmountEnabled=!0);for(let a in this.entries)this.entries.hasOwnProperty(a)&&(this.entries[a].foreign_currency_code=e)},filterNativeCurrencies(e){console.log('filterNativeCurrencies("'+e+'")');let t=[],o;for(let a in this.enabledCurrencies)if(this.enabledCurrencies.hasOwnProperty(a)){let n=this.enabledCurrencies[a];n.code===e&&(o=n)}t.push(o),this.nativeCurrencies=t;for(let a in this.entries)this.entries.hasOwnProperty(a)&&(this.entries[a].currency_code=e)},changedAmount(e){const t=parseInt(e.target.dataset.index);this.entries[t].amount=parseFloat(e.target.value),this.totalAmount=0;for(let o in this.entries)this.entries.hasOwnProperty(o)&&(this.totalAmount=this.totalAmount+parseFloat(this.entries[o].amount));console.log("Changed amount to "+this.totalAmount)},selectDestAccount(e,t){const o=parseInt(t._searchInput.attributes["data-index"].value);document.querySelector("#form")._x_dataStack[0].$data.entries[o].destination_account={id:e.id,name:e.name,alpine_name:e.name,type:e.type,currency_code:e.currency_code},console.log("Changed destination account into a known "+e.type.toLowerCase()),document.querySelector("#form")._x_dataStack[0].detectTransactionType()},loadCurrencies(){this.enabledCurrencies=[],this.nativeCurrencies=[],this.foreignCurrencies=[],this.foreignCurrencies.push({id:0,name:"(no foreign currency)",code:"",default:!1,symbol:"",decimal_places:2}),console.log("Loading user currencies."),new q().list({}).then(t=>{for(let o in t.data.data)if(t.data.data.hasOwnProperty(o)){let a=t.data.data[o];if(a.attributes.enabled){let n={id:a.id,name:a.attributes.name,code:a.attributes.code,default:a.attributes.default,symbol:a.attributes.symbol,decimal_places:a.attributes.decimal_places};n.default&&(this.defaultCurrency=n),this.enabledCurrencies.push(n),this.nativeCurrencies.push(n),this.foreignCurrencies.push(n)}}this.loadingCurrencies=!1})},loadBudgets(){this.budgets=[],this.budgets.push({id:0,name:"(no budget)"}),console.log("Loading user budgets."),new $().list({}).then(t=>{for(let o in t.data.data)if(t.data.data.hasOwnProperty(o)){let a=t.data.data[o],n={id:a.id,name:a.attributes.name};this.budgets.push(n)}this.loadingBudgets=!1,console.log(this.budgets)})},loadPiggyBanks(){this.piggyBanks={};let e={0:{id:0,name:"(no group)",order:0,piggyBanks:[{id:0,name:"(no piggy bank)",order:0}]}};console.log("Loading user piggy banks."),new k().list({}).then(o=>{for(let a in o.data.data)if(o.data.data.hasOwnProperty(a)){let n=o.data.data[a],r=n.attributes.object_group_id??"0",s=n.attributes.object_group_title??"(no group)",i={id:n.id,name:n.attributes.name,order:n.attributes.order};e.hasOwnProperty(r)||(e[r]={id:r,name:s,order:n.attributes.object_group_order??0,piggyBanks:[]}),e[r].piggyBanks.push(i),e[r].piggyBanks.sort((c,u)=>c.order-u.order)}this.loadingPiggyBanks=!1,this.piggyBanks=Object.keys(e).sort().reduce((a,n)=>(a[n]=e[n],a),{})})},loadSubscriptions(){this.subscriptions={};let e={0:{id:0,name:"(no group)",order:0,subscriptions:[{id:0,name:"(no subscription)",order:0}]}};console.log("Loading user suscriptions."),new T().list({}).then(o=>{for(let a in o.data.data)if(o.data.data.hasOwnProperty(a)){let n=o.data.data[a],r=n.attributes.object_group_id??"0",s=n.attributes.object_group_title??"(no group)",i={id:n.id,name:n.attributes.name,order:n.attributes.order};e.hasOwnProperty(r)||(e[r]={id:r,name:s,order:n.attributes.object_group_order??0,subscriptions:[]}),e[r].subscriptions.push(i),e[r].subscriptions.sort((c,u)=>c.order-u.order)}this.loadingSubscriptions=!1,this.subscriptions=Object.keys(e).sort().reduce((a,n)=>(a[n]=e[n],a),{})})},changeSourceAccount(e,t){if(console.log("changeSourceAccount"),typeof e>"u"){const o=parseInt(t._searchInput.attributes["data-index"].value);if(document.querySelector("#form")._x_dataStack[0].$data.entries[o].source_account.name===t._searchInput.value){console.warn('Ignore hallucinated source account name change to "'+t._searchInput.value+'"'),document.querySelector("#form")._x_dataStack[0].detectTransactionType();return}document.querySelector("#form")._x_dataStack[0].$data.entries[o].source_account={name:t._searchInput.value,alpine_name:t._searchInput.value},console.log('Changed source account into a unknown account called "'+t._searchInput.value+'"'),document.querySelector("#form")._x_dataStack[0].detectTransactionType()}},changeDestAccount(e,t){if(document.querySelector("#form")._x_dataStack[0].$data.entries[0].destination_account,typeof e>"u"){const o=parseInt(t._searchInput.attributes["data-index"].value);if(document.querySelector("#form")._x_dataStack[0].$data.entries[o].destination_account.name===t._searchInput.value){console.warn('Ignore hallucinated destination account name change to "'+t._searchInput.value+'"'),document.querySelector("#form")._x_dataStack[0].detectTransactionType();return}document.querySelector("#form")._x_dataStack[0].$data.entries[o].destination_account={name:t._searchInput.value,alpine_name:t._searchInput.value},console.log('Changed destination account into a unknown account called "'+t._searchInput.value+'"'),document.querySelector("#form")._x_dataStack[0].detectTransactionType()}},changeCategory(e,t){const o=parseInt(t._searchInput.attributes["data-index"].value);if(typeof e<"u"&&e.name){document.querySelector("#form")._x_dataStack[0].$data.entries[o].category_name=e.name;return}document.querySelector("#form")._x_dataStack[0].$data.entries[o].category_name=t._searchInput.value},changeDescription(e,t){const o=parseInt(t._searchInput.attributes["data-index"].value);if(typeof e<"u"&&e.description){document.querySelector("#form")._x_dataStack[0].$data.entries[o].description=e.description;return}document.querySelector("#form")._x_dataStack[0].$data.entries[o].description=t._searchInput.value},addedSplit(){console.log("addedSplit"),g.init("input.ac-source",{server:d.account,serverParams:{types:this.filters.source},fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},hiddenInput:!0,preventBrowserAutocomplete:!0,highlightTyped:!0,liveServer:!0,onChange:this.changeSourceAccount,onSelectItem:this.selectSourceAccount,onRenderItem:function(e,t,o){return e.name_with_balance+'
'+l.t("firefly.account_type_"+e.type)+""}}),g.init("input.ac-category",{server:d.category,fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},valueField:"id",labelField:"name",highlightTyped:!0,onSelectItem:this.changeCategory,onChange:this.changeCategory}),g.init("input.ac-dest",{server:d.account,serverParams:{types:this.filters.destination},fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},hiddenInput:!0,preventBrowserAutocomplete:!0,liveServer:!0,highlightTyped:!0,onSelectItem:this.selectDestAccount,onChange:this.changeDestAccount,onRenderItem:function(e,t,o){return e.name_with_balance+'
'+l.t("firefly.account_type_"+e.type)+""}}),this.filters.destination=[],g.init("input.ac-description",{server:d.description,fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},valueField:"id",labelField:"description",highlightTyped:!0,onSelectItem:this.changeDescription,onChange:this.changeDescription})},processUpload(e){console.log("I am ALSO event listener for upload-success!"),console.log(e),this.showBarOrRedirect()},init(){Promise.all([w("language","en_US")]).then(e=>{l=new x;const t=e[0].replace("-","_");l.locale=t,S(l,t).then(()=>{this.addSplit()})}),this.loadCurrencies(),this.loadBudgets(),this.loadPiggyBanks(),this.loadSubscriptions(),document.addEventListener("upload-success",e=>{this.processUpload(e)}),this.filters.source=["Asset account","Loan","Debt","Mortgage","Revenue account"],this.filters.destination=["Expense account","Loan","Debt","Mortgage","Asset account"]},submitTransaction(){this.submitting=!0,this.showSuccessMessage=!1,this.showErrorMessage=!1,this.showWaitmessage=!1,this.detectTransactionType();let e=A(this.entries,this.transactionType),t={group_title:null,fire_webhooks:!1,apply_rules:!1,transactions:e};e.length>1&&(t.group_title=e[0].description);let o=new O;console.log(t),o.post(t).then(a=>{if(this.newGroupId=parseInt(a.data.data.id),this.newGroupTitle=t.group_title??t.transactions[0].description,B(this.newGroupId,a.data.data.attributes.transactions)>0){this.showWaitMessage=!0;return}this.showBarOrRedirect()}).catch(a=>{this.submitting=!1,console.log(a),typeof a.response<"u"&&this.parseErrors(a.response.data)})},showBarOrRedirect(){this.showWaitMessage=!1,this.submitting=!1,this.returnHereButton&&(this.showSuccessMessage=!0,this.successMessageLink="transactions/show/"+this.newGroupId,this.successMessageText=l.t("firefly.stored_journal_js",{description:this.newGroupTitle}),this.resetButton&&(this.entries=[],this.addSplit(),this.totalAmount=0)),this.returnHereButton||(window.location="transactions/show/"+this.newGroupId+"?transaction_group_id="+this.newGroupId+"&message=created")},parseErrors(e){this.setDefaultErrors(),this.showErrorMessage=!0,this.showSuccessMessage=!1,this.errorMessageText=l.t("firefly.errors_submission")+" "+e.message;let t,o;for(const a in e.errors)if(e.errors.hasOwnProperty(a)){if(a!=="group_title")switch(t=parseInt(a.split(".")[1]),o=a.split(".")[2],o){case"amount":case"date":case"budget_id":case"bill_id":case"description":case"tags":this.entries[t].errors[o]=e.errors[a];break;case"source_name":case"source_id":this.entries[t].errors.source_account=this.entries[t].errors.source_account.concat(e.errors[a]);break;case"destination_name":case"destination_id":this.entries[t].errors.destination_account=this.entries[t].errors.destination_account.concat(e.errors[a]);break;case"foreign_amount":case"foreign_currency_id":this.entries[t].errors.foreign_amount=this.entries[t].errors.foreign_amount.concat(e.errors[a]);break}typeof this.entries[t]<"u"&&(this.entries[t].errors.source_account=Array.from(new Set(this.entries[t].errors.source_account)),this.entries[t].errors.destination_account=Array.from(new Set(this.entries[t].errors.destination_account)))}console.log(this.entries[0].errors)},setDefaultErrors(){},addSplit(){this.entries.push(L()),setTimeout(()=>{I.init("select.ac-tags",{allowClear:!0,server:d.tag,liveServer:!0,clearEnd:!0,notFoundMessage:"(nothing found)",noCache:!0,fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}}});const e=this.entries.length-1;this.entries[e].map=p.map("mappie").setView([this.latitude,this.longitude],this.zoomLevel),p.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png",{maxZoom:19,attribution:'© OpenStreetMap'}).addTo(this.entries[e].map),this.entries[e].map.on("click",this.addPointToMap),this.entries[e].map.on("zoomend",this.saveZoomOfMap)},250)},removeSplit(e){this.entries.splice(e,1),document.querySelector("#split-0-tab").click()},formattedTotalAmount(){return v(this.totalAmount,"EUR")},clearLocation(e){e.preventDefault();const t=e.currentTarget,o=parseInt(t.attributes["data-index"].value);return this.entries[o].hasLocation=!1,this.entries[o].marker.remove(),!1},saveZoomOfMap(e){let t=parseInt(e.sourceTarget._container.attributes["data-index"].value),o=document.querySelector("#form")._x_dataStack[0].$data.entries[t].map;document.querySelector("#form")._x_dataStack[0].$data.entries[t].zoomLevel=o.getZoom(),console.log("New zoom level: "+o.getZoom())},addPointToMap(e){let t=parseInt(e.originalEvent.currentTarget.attributes["data-index"].value),o=document.querySelector("#form")._x_dataStack[0].$data.entries[t].map,a=document.querySelector("#form")._x_dataStack[0].$data.entries[t].hasLocation;if(console.log("Has location: "+a),a===!1){console.log("False!");const n=new p.marker(e.latlng,{draggable:!0});n.on("dragend",function(r){var s=r.target,i=s.getLatLng();s.setLatLng(new p.LatLng(i.lat,i.lng),{draggable:"true"}),document.querySelector("#form")._x_dataStack[0].$data.entries[t].latitude=i.lat,document.querySelector("#form")._x_dataStack[0].$data.entries[t].longitude=i.lng}),n.addTo(o),document.querySelector("#form")._x_dataStack[0].$data.entries[t].hasLocation=!0,document.querySelector("#form")._x_dataStack[0].$data.entries[t].marker=n,document.querySelector("#form")._x_dataStack[0].$data.entries[t].latitude=e.latlng.lat,document.querySelector("#form")._x_dataStack[0].$data.entries[t].longitude=e.latlng.lng,document.querySelector("#form")._x_dataStack[0].$data.entries[t].zoomLevel=o.getZoom()}}}},_={transactions:M,dates:b};function y(){Object.keys(_).forEach(e=>{console.log(`Loading page component "${e}"`);let t=_[e]();Alpine.data(e,()=>t)}),Alpine.start()}document.addEventListener("upload-success",e=>{console.log("I am event listener for upload-success"),console.log(e)});document.addEventListener("firefly-iii-bootstrapped",()=>{console.log("Loaded through event listener."),y()});window.bootstrapped&&(console.log("Loaded through window variable."),y()); diff --git a/public/build/assets/create-77b1cf47.js b/public/build/assets/create-77b1cf47.js new file mode 100644 index 0000000000..c36181154c --- /dev/null +++ b/public/build/assets/create-77b1cf47.js @@ -0,0 +1 @@ +import{a as g,d as k,g as x,l as P}from"./load-translations-23553922.js";import{f as C,k as I,I as T,l as h}from"./vendor-e194ad60.js";import{a as A,G as E,f as m}from"./get-748a816c.js";function _(){return{id:"",name:"",alpine_name:""}}function S(){return{description:[],amount:[],currency_code:[],foreign_amount:[],foreign_currency_code:[],source_account:[],destination_account:[],budget_id:[],category_name:[],piggy_bank_id:[],bill_id:[],tags:[],notes:[],internal_reference:[],external_url:[],latitude:[],longitude:[],zoom_level:[],date:[],interest_date:[],book_date:[],process_date:[],due_date:[],payment_date:[],invoice_date:[]}}function D(){let t=C(new Date,"yyyy-MM-dd HH:mm");return{description:"",amount:"",currency_code:"EUR",foreign_amount:"",foreign_currency_code:"",source_account:_(),destination_account:_(),budget_id:null,category_name:"",piggy_bank_id:null,bill_id:null,tags:[],notes:"",internal_reference:"",external_url:"",hasLocation:!1,map:null,latitude:null,longitude:null,zoomLevel:null,marker:null,date:t,interest_date:"",book_date:"",process_date:"",due_date:"",payment_date:"",invoice_date:"",errors:S()}}function $(e,t){let r=[];for(let o in e)if(e.hasOwnProperty(o)){const n=e[o];let a={};a.description=n.description,a.source_name=n.source_account.name,a.destination_name=n.destination_account.name,a.amount=n.amount,a.currency_code=n.currency_code,a.date=n.date,a.interest_date=n.interest_date,a.book_date=n.book_date,a.process_date=n.process_date,a.due_date=n.due_date,a.payment_date=n.payment_date,a.invoice_date=n.invoice_date,a.budget_id=n.budget_id,a.category_name=n.category_name,a.piggy_bank_id=n.piggy_bank_id,a.bill_id=n.bill_id,a.tags=n.tags,a.notes=n.notes,a.internal_reference=n.internal_reference,a.external_url=n.external_url,a.store_location=!1,n.hasLocation&&(a.store_location=!0,a.longitude=n.longitude.toString(),a.latitude=n.latitude.toString(),a.zoom_level=n.zoomLevel),typeof n.foreign_currency_code<"u"&&n.foreign_currency_code.toString()!==""&&(a.foreign_currency_code=n.foreign_currency_code,typeof n.foreign_amount<"u"&&n.foreign_amount.toString()!==""&&(a.foreign_amount=n.foreign_amount),(typeof n.foreign_amount>"u"||n.foreign_amount.toString()==="")&&(delete a.foreign_amount,delete a.foreign_currency_code)),typeof n.source_account.id<"u"&&n.source_account.id.toString()!==""&&(a.source_id=n.source_account.id),typeof n.destination_account.id<"u"&&n.destination_account.id.toString()!==""&&(a.destination_id=n.destination_account.id),a.type=t,r.push(a)}return r}let O=class{post(t){let r="/api/v2/transactions";return g.post(r,t)}},B=class{list(t){return g.get("/api/v2/currencies",{params:t})}};function L(){let e={page:1,limit:1337};return new B().list(e).then(r=>{let o={defaultCurrency:{},nativeCurrencies:[],foreignCurrencies:[],enabledCurrencies:[]};o.foreignCurrencies.push({id:0,name:"(no foreign currency)",code:"",default:!1,symbol:"",decimal_places:2});for(let n in r.data.data)if(r.data.data.hasOwnProperty(n)){let a=r.data.data[n];if(a.attributes.enabled){let i={id:a.id,name:a.attributes.name,code:a.attributes.code,default:a.attributes.default,symbol:a.attributes.symbol,decimal_places:a.attributes.decimal_places};i.default&&(o.defaultCurrency=i),o.enabledCurrencies.push(i),o.nativeCurrencies.push(i),o.foreignCurrencies.push(i)}}return o})}class q{list(t){return g.get("/api/v2/budgets",{params:t})}}function F(){let e={page:1,limit:1337};return new q().list(e).then(r=>{let o=[{id:0,name:"(no budget)"}];for(let n in r.data.data)if(r.data.data.hasOwnProperty(n)){let a=r.data.data[n],i={id:a.id,name:a.attributes.name};o.push(i)}return o})}function j(){let e={page:1,limit:1337};return new A().list(e).then(r=>{let o={0:{id:0,name:"(no group)",order:0,piggyBanks:[{id:0,name:"(no piggy bank)",order:0}]}};for(let n in r.data.data)if(r.data.data.hasOwnProperty(n)){let a=r.data.data[n],i=a.attributes.object_group_id??"0",s=a.attributes.object_group_title??"(no group)",c={id:a.id,name:a.attributes.name,order:a.attributes.order};o.hasOwnProperty(i)||(o[i]={id:i,name:s,order:a.attributes.object_group_order??0,piggyBanks:[]}),o[i].piggyBanks.push(c),o[i].piggyBanks.sort((u,d)=>u.order-d.order)}return Object.keys(o).sort().reduce((n,a)=>(n[a]=o[a],n),{})})}function R(){let e={page:1,limit:1337};return new E().list(e).then(r=>{let o={0:{id:0,name:"(no group)",order:0,subscriptions:[{id:0,name:"(no subscription)",order:0}]}};for(let n in r.data.data)if(r.data.data.hasOwnProperty(n)){let a=r.data.data[n],i=a.attributes.object_group_id??"0",s=a.attributes.object_group_title??"(no group)",c={id:a.id,name:a.attributes.name,order:a.attributes.order};o.hasOwnProperty(i)||(o[i]={id:i,name:s,order:a.attributes.object_group_order??0,subscriptions:[]}),o[i].subscriptions.push(c),o[i].subscriptions.sort((u,d)=>u.order-d.order)}return Object.keys(o).sort().reduce((n,a)=>(n[a]=o[a],n),{})})}function p(e){const t={server:e.serverUrl,serverParams:{},fetchOptions:{headers:{"X-CSRF-TOKEN":document.head.querySelector('meta[name="csrf-token"]').content}},hiddenInput:!0,preventBrowserAutocomplete:!0,highlightTyped:!0,liveServer:!0};typeof e.filters<"u"&&e.filters.length>0&&(t.serverParams.types=e.filters),typeof e.onRenderItem<"u"&&e.onRenderItem!==null&&(console.log("add on render item"),t.onRenderItem=e.onRenderItem),e.valueField&&(t.valueField=e.valueField),e.labelField&&(t.labelField=e.labelField),e.onSelectItem&&(t.onSelectItem=e.onSelectItem),e.onChange&&(t.onChange=e.onChange),I.init(e.selector,t)}function y(e,t){const r=parseInt(t._searchInput.attributes["data-index"].value);if(typeof e<"u"&&e.name){document.querySelector("#form")._x_dataStack[0].$data.entries[r].category_name=e.name;return}document.querySelector("#form")._x_dataStack[0].$data.entries[r].category_name=t._searchInput.value}function b(e,t){const r=parseInt(t._searchInput.attributes["data-index"].value);if(typeof e<"u"&&e.description){document.querySelector("#form")._x_dataStack[0].$data.entries[r].description=e.description;return}document.querySelector("#form")._x_dataStack[0].$data.entries[r].description=t._searchInput.value}function U(e,t){if(typeof e>"u"){const r=parseInt(t._searchInput.attributes["data-index"].value);if(document.querySelector("#form")._x_dataStack[0].$data.entries[r].destination_account.name===t._searchInput.value){console.warn('Ignore hallucinated destination account name change to "'+t._searchInput.value+'"');return}document.querySelector("#form")._x_dataStack[0].$data.entries[r].destination_account={name:t._searchInput.value,alpine_name:t._searchInput.value},document.querySelector("#form")._x_dataStack[0].changedDestinationAccount()}}function M(e,t){const r=parseInt(t._searchInput.attributes["data-index"].value);document.querySelector("#form")._x_dataStack[0].$data.entries[r].destination_account={id:e.id,name:e.name,alpine_name:e.name,type:e.type,currency_code:e.currency_code},document.querySelector("#form")._x_dataStack[0].changedDestinationAccount()}function N(e,t){if(typeof e>"u"){const r=parseInt(t._searchInput.attributes["data-index"].value);if(document.querySelector("#form")._x_dataStack[0].$data.entries[r].source_account.name===t._searchInput.value)return;document.querySelector("#form")._x_dataStack[0].$data.entries[r].source_account={name:t._searchInput.value,alpine_name:t._searchInput.value},document.querySelector("#form")._x_dataStack[0].changedSourceAccount()}}function G(e,t){const r=parseInt(t._searchInput.attributes["data-index"].value);document.querySelector("#form")._x_dataStack[0].$data.entries[r].source_account={id:e.id,name:e.name,alpine_name:e.name,type:e.type,currency_code:e.currency_code},document.querySelector("#form")._x_dataStack[0].changedSourceAccount()}class z{post(t,r,o){let n="/api/v1/attachments";return g.post(n,{filename:t,attachable_type:r,attachable_id:o})}upload(t,r){let o="./api/v1/attachments/"+t+"/upload";return axios.post(o,r)}}let H=function(e){let t=e.length,r=0,o=!1;for(const n in e)if(e.hasOwnProperty(n)&&/^0$|^[1-9]\d*$/.test(n)&&n<=4294967294&&o===!1){let a=new z;a.post(e[n].name,"TransactionJournal",e[n].journal).then(i=>{let s=parseInt(i.data.data.id);a.upload(s,e[n].content).then(c=>{if(r++,r===t){const u=new CustomEvent("upload-success",{some:"details"});document.dispatchEvent(u)}}).catch(c=>{console.error("Could not upload"),console.error(c),r++;const u=new CustomEvent("upload-failed",{error:c});document.dispatchEvent(u),o=!0})}).catch(i=>{console.error("Could not create upload."),console.error(i),r++;const s=new CustomEvent("upload-failed",{error:i});document.dispatchEvent(s),o=!0})}};function Z(e,t){t=t.reverse();let r=[],o=0,n=[],a=document.querySelectorAll('input[name="attachments[]"]');for(const i in a)if(a.hasOwnProperty(i)&&/^0$|^[1-9]\d*$/.test(i)&&i<=4294967294)for(const s in a[i].files)a[i].files.hasOwnProperty(s)&&/^0$|^[1-9]\d*$/.test(s)&&s<=4294967294&&(r.push({journal:t[i].transaction_journal_id,file:a[i].files[s]}),o++);for(const i in r)r.hasOwnProperty(i)&&/^0$|^[1-9]\d*$/.test(i)&&i<=4294967294&&function(s,c){let u=new FileReader;u.onloadend=function(d){d.target.readyState===FileReader.DONE&&(n.push({name:r[c].file.name,journal:r[c].journal,content:new Blob([d.target.result])}),n.length===o&&H(n))},u.readAsArrayBuffer(s.file)}(r[i],i);return o}function K(e,t,r){let o=[];for(let n in r)r.hasOwnProperty(n)&&o.push(r[n].replace(e,t));return o}function J(e,t,r){let o,n,a;for(const i in t)if(t.hasOwnProperty(i)){if(i==="group_title"){console.error("Cannot handle error in group title.");continue}if(o=parseInt(i.split(".")[1]),n=i.split(".")[2],a=K(i,n,t[i]),!r.hasOwnProperty(o)){console.error("Cannot handle errors in index #"+o);continue}switch(n){case"currency_code":case"foreign_currency_code":case"category_name":case"piggy_bank_id":case"notes":case"internal_reference":case"external_url":case"latitude":case"longitude":case"zoom_level":case"interest_date":case"book_date":case"process_date":case"due_date":case"payment_date":case"invoice_date":case"amount":case"date":case"budget_id":case"bill_id":case"description":case"tags":r[o].errors[n]=a;break;case"source_name":case"source_id":r[o].errors.source_account=r[o].errors.source_account.concat(a);break;case"type":r[o].errors.source_account=r[o].errors.source_account.concat([e.t("validation.bad_type_source")]),r[o].errors.destination_account=r[o].errors.destination_account.concat([e.t("validation.bad_type_destination")]);break;case"destination_name":case"destination_id":r[o].errors.destination_account=r[o].errors.destination_account.concat(a);break;case"foreign_amount":case"foreign_currency_id":r[o].errors.foreign_amount=r[o].errors.foreign_amount.concat(a);break}typeof r[o]<"u"&&(r[o].errors.source_account=Array.from(new Set(r[o].errors.source_account)),r[o].errors.destination_account=Array.from(new Set(r[o].errors.destination_account)))}return console.log(r[0].errors),r}let l;const f={description:"/api/v2/autocomplete/transaction-descriptions",account:"/api/v2/autocomplete/accounts",category:"/api/v2/autocomplete/categories",tag:"/api/v2/autocomplete/tags"};let V=function(){return{entries:[],formStates:{loadingCurrencies:!0,loadingBudgets:!0,loadingPiggyBanks:!0,loadingSubscriptions:!0,isSubmitting:!1,returnHereButton:!1,saveAsNewButton:!1,resetButton:!0,rulesButton:!0,webhooksButton:!0},formBehaviour:{formType:"create",foreignCurrencyEnabled:!0},formData:{defaultCurrency:null,enabledCurrencies:[],nativeCurrencies:[],foreignCurrencies:[],budgets:[],piggyBanks:[],subscriptions:[]},groupProperties:{transactionType:"unknown",title:null,id:null,totalAmount:0},notifications:{error:{show:!1,text:"",url:""},success:{show:!1,text:"",url:""},wait:{show:!1,text:""}},filters:{source:[],destination:[]},changedDateTime(e){console.log("changedDateTime")},changedDescription(e){console.log("changedDescription")},changedDestinationAccount(e){this.detectTransactionType()},changedSourceAccount(e){this.detectTransactionType()},detectTransactionType(){const e=this.entries[0].source_account.type??"unknown",t=this.entries[0].destination_account.type??"unknown";if(e==="unknown"&&t==="unknown"){this.groupProperties.transactionType="unknown",console.warn("Cannot infer transaction type from two unknown accounts.");return}if(e===t&&["Asset account","Loan","Debt","Mortgage"].includes(e)){this.groupProperties.transactionType="transfer",console.log('Transaction type is detected to be "'+this.groupProperties.transactionType+'".'),console.log("filter down currencies for transfer."),this.filterNativeCurrencies(this.entries[0].source_account.currency_code),this.filterForeignCurrencies(this.entries[0].destination_account.currency_code);return}if(e==="Asset account"&&["Expense account","Debt","Loan","Mortgage"].includes(t)){this.groupProperties.transactionType="withdrawal",console.log('[a] Transaction type is detected to be "'+this.groupProperties.transactionType+'".'),this.filterNativeCurrencies(this.entries[0].source_account.currency_code);return}if(e==="Asset account"&&t==="unknown"){this.groupProperties.transactionType="withdrawal",console.log('[b] Transaction type is detected to be "'+this.groupProperties.transactionType+'".'),console.log(this.entries[0].source_account),this.filterNativeCurrencies(this.entries[0].source_account.currency_code);return}if(["Debt","Loan","Mortgage"].includes(e)&&t==="Expense account"){this.groupProperties.transactionType="withdrawal",console.log('[c] Transaction type is detected to be "'+this.groupProperties.transactionType+'".'),this.filterNativeCurrencies(this.entries[0].source_account.currency_code);return}if(e==="Revenue account"&&["Asset account","Debt","Loan","Mortgage"].includes(t)){this.groupProperties.transactionType="deposit",console.log('Transaction type is detected to be "'+this.groupProperties.transactionType+'".');return}if(["Debt","Loan","Mortgage"].includes(e)&&t==="Asset account"){this.groupProperties.transactionType="deposit",console.log('Transaction type is detected to be "'+this.groupProperties.transactionType+'".');return}console.warn('Unknown account combination between "'+e+'" and "'+t+'".')},formattedTotalAmount(){return this.entries.length===0?m(this.groupProperties.totalAmount,"EUR"):m(this.groupProperties.totalAmount,this.entries[0].currency_code??"EUR")},filterForeignCurrencies(e){let t=[],r;for(let o in this.formData.enabledCurrencies)if(this.formData.enabledCurrencies.hasOwnProperty(o)){let n=this.formData.enabledCurrencies[o];n.code===e&&(r=n)}t.push(r),this.formData.foreignCurrencies=t,t.length===1&&t[0].code===this.entries[0].source_account.currency_code&&(console.log("Foreign currency is same as source currency. Disable foreign amount."),this.formBehaviour.foreignCurrencyEnabled=!1),t.length===1&&t[0].code!==this.entries[0].source_account.currency_code&&(console.log("Foreign currency is NOT same as source currency. Enable foreign amount."),this.formBehaviour.foreignCurrencyEnabled=!0);for(let o in this.entries)this.entries.hasOwnProperty(o)&&(this.entries[o].foreign_currency_code=e)},filterNativeCurrencies(e){let t=[],r;for(let o in this.formData.enabledCurrencies)if(this.formData.enabledCurrencies.hasOwnProperty(o)){let n=this.formData.enabledCurrencies[o];n.code===e&&(r=n)}t.push(r),this.formData.nativeCurrencies=t;for(let o in this.entries)this.entries.hasOwnProperty(o)&&(this.entries[o].currency_code=e)},changedAmount(e){const t=parseInt(e.target.dataset.index);this.entries[t].amount=parseFloat(e.target.value),this.groupProperties.totalAmount=0;for(let r in this.entries)this.entries.hasOwnProperty(r)&&(this.groupProperties.totalAmount=this.groupProperties.totalAmount+parseFloat(this.entries[r].amount))},addedSplit(){const e=function(t,r,o){return t.name_with_balance+'
'+l.t("firefly.account_type_"+t.type)+""};console.log(this.filters),p({selector:"input.ac-source",serverUrl:f.account,filters:this.filters.source,onRenderItem:e,onChange:N,onSelectItem:G}),p({selector:"input.ac-dest",serverUrl:f.account,filters:this.filters.destination,onRenderItem:e,onChange:U,onSelectItem:M}),p({selector:"input.ac-category",serverUrl:f.category,valueField:"id",labelField:"name",onChange:y,onSelectItem:y}),p({selector:"input.ac-description",serverUrl:f.description,valueField:"id",labelField:"description",onChange:b,onSelectItem:b})},processUpload(e){this.showMessageOrRedirectUser()},processUploadError(e){this.notifications.success.show=!1,this.notifications.wait.show=!1,this.notifications.error.show=!0,this.formStates.isSubmitting=!1,this.notifications.error.text=l.t("firefly.errors_upload"),console.error(e)},init(){Promise.all([x("language","en_US")]).then(e=>{l=new T;const t=e[0].replace("-","_");l.locale=t,P(l,t).then(()=>{this.addSplit()})}),L().then(e=>{this.formStates.loadingCurrencies=!1,this.formData.defaultCurrency=e.defaultCurrency,this.formData.enabledCurrencies=e.enabledCurrencies,this.formData.nativeCurrencies=e.nativeCurrencies,this.formData.foreignCurrencies=e.foreignCurrencies}),F().then(e=>{this.formData.budgets=e,this.formStates.loadingBudgets=!1}),j().then(e=>{this.formData.piggyBanks=e,this.formStates.loadingPiggyBanks=!1}),R().then(e=>{this.formData.subscriptions=e,this.formStates.loadingSubscriptions=!1}),document.addEventListener("upload-success",e=>{this.processUpload(e),document.querySelectorAll("input[type=file]").value=""}),document.addEventListener("upload-error",e=>{this.processUploadError(e)}),this.filters.source=["Asset account","Loan","Debt","Mortgage","Revenue account"],this.filters.destination=["Expense account","Loan","Debt","Mortgage","Asset account"]},submitTransaction(){this.notifications.error.show=!1,this.notifications.success.show=!1,this.notifications.wait.show=!1;for(let o in this.entries)this.entries.hasOwnProperty(o)&&(this.entries[o].errors=S());this.formStates.isSubmitting=!0,this.detectTransactionType();let e=$(this.entries,this.groupProperties.transactionType),t={group_title:this.groupProperties.title,fire_webhooks:this.formStates.webhooksButton,apply_rules:this.formStates.rulesButton,transactions:e};this.groupProperties.title===null&&e.length>1&&(t.group_title=e[0].description);let r=new O;console.log(t),r.post(t).then(o=>{const n=o.data.data;if(this.groupProperties.id=parseInt(n.id),this.groupProperties.title=n.attributes.group_title??n.attributes.transactions[0].description,Z(this.groupProperties.id,n.attributes.transactions)>0){this.notifications.wait.show=!0,this.notifications.wait.text=l.t("firefly.wait_attachments");return}this.showMessageOrRedirectUser()}).catch(o=>{this.submitting=!1,console.log(o),typeof o.response<"u"&&this.parseErrors(o.response.data)})},showMessageOrRedirectUser(){if(this.notifications.error.show=!1,this.notifications.success.show=!1,this.notifications.wait.show=!1,this.formStates.returnHereButton){this.notifications.success.show=!0,this.notifications.success.url="transactions/show/"+this.groupProperties.id,this.notifications.success.text=l.t("firefly.stored_journal_js",{description:this.groupProperties.title}),this.formStates.resetButton&&(this.entries=[],this.addSplit(),this.groupProperties.totalAmount=0);return}window.location="transactions/show/"+this.groupProperties.id+"?transaction_group_id="+this.groupProperties.id+"&message=created"},parseErrors(e){this.notifications.error.show=!0,this.notifications.success.show=!1,this.notifications.wait.show=!1,this.formStates.isSubmitting=!1,this.notifications.error.text=l.t("firefly.errors_submission",{errorMessage:e.message}),e.hasOwnProperty("errors")&&(this.entries=J(l,e.errors,this.entries))},addSplit(){this.entries.push(D())},removeSplit(e){this.entries.splice(e,1),document.querySelector("#split-0-tab").click()},clearLocation(e){e.preventDefault();const t=e.currentTarget,r=parseInt(t.attributes["data-index"].value);return this.entries[r].hasLocation=!1,this.entries[r].marker.remove(),!1},saveZoomOfMap(e){let t=parseInt(e.sourceTarget._container.attributes["data-index"].value),r=document.querySelector("#form")._x_dataStack[0].$data.entries[t].map;document.querySelector("#form")._x_dataStack[0].$data.entries[t].zoomLevel=r.getZoom(),console.log("New zoom level: "+r.getZoom())},addPointToMap(e){let t=parseInt(e.originalEvent.currentTarget.attributes["data-index"].value),r=document.querySelector("#form")._x_dataStack[0].$data.entries[t].map,o=document.querySelector("#form")._x_dataStack[0].$data.entries[t].hasLocation;if(console.log("Has location: "+o),o===!1){console.log("False!");const n=new h.marker(e.latlng,{draggable:!0});n.on("dragend",function(a){var i=a.target,s=i.getLatLng();i.setLatLng(new h.LatLng(s.lat,s.lng),{draggable:"true"}),document.querySelector("#form")._x_dataStack[0].$data.entries[t].latitude=s.lat,document.querySelector("#form")._x_dataStack[0].$data.entries[t].longitude=s.lng}),n.addTo(r),document.querySelector("#form")._x_dataStack[0].$data.entries[t].hasLocation=!0,document.querySelector("#form")._x_dataStack[0].$data.entries[t].marker=n,document.querySelector("#form")._x_dataStack[0].$data.entries[t].latitude=e.latlng.lat,document.querySelector("#form")._x_dataStack[0].$data.entries[t].longitude=e.latlng.lng,document.querySelector("#form")._x_dataStack[0].$data.entries[t].zoomLevel=r.getZoom()}}}},w={transactions:V,dates:k};function v(){Object.keys(w).forEach(e=>{console.log(`Loading page component "${e}"`);let t=w[e]();Alpine.data(e,()=>t)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{console.log("Loaded through event listener."),v()});window.bootstrapped&&(console.log("Loaded through window variable."),v()); diff --git a/public/build/assets/dashboard-a55f7472.js b/public/build/assets/dashboard-a55f7472.js new file mode 100644 index 0000000000..26f99c1023 --- /dev/null +++ b/public/build/assets/dashboard-a55f7472.js @@ -0,0 +1 @@ +import{a as k,g as b,P as Pt,l as z,d as kt}from"./load-translations-23553922.js";import{f as g,G as Dt,a as xt}from"./get-748a816c.js";import{f,C as m,a as A,I as H,S as Ot,F as Mt,L as St,b as Ft,A as At,B as Bt,T as $t,P as jt,c as It,i as Wt,p as Vt,d as Kt,e as Et,g as Lt,h as Gt,j as Tt}from"./vendor-e194ad60.js";class Rt{get(t,n,a){return k.get("/api/v2/summary/basic",{params:{start:t,end:n,code:a}})}}function D(e,t,n){const a=f(t,"y-MM-dd")+"_"+f(n,"y-MM-dd")+"_"+e;return console.log("getCacheKey: "+a),String(a)}let Q=!1;const Ut=()=>({balanceBox:{amounts:[],subtitles:[]},billBox:{paid:[],unpaid:[]},leftBox:{left:[],perDay:[]},netBox:{net:[]},autoConversion:!1,loading:!1,boxData:null,boxOptions:null,getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D("dashboard-boxes-data",e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){this.boxData=o,this.generateOptions(this.boxData);return}new Rt().get(f(e,"yyyy-MM-dd"),f(t,"yyyy-MM-dd"),null).then(i=>{this.boxData=i.data,window.store.set(n,i.data),this.generateOptions(this.boxData)})},generateOptions(e){this.balanceBox={amounts:[],subtitles:[]},this.billBox={paid:[],unpaid:[]},this.leftBox={left:[],perDay:[]},this.netBox={net:[]};let t={};for(const n in e)if(e.hasOwnProperty(n)){const a=e[n];if(!a.hasOwnProperty("key"))continue;let o=a.key;if(this.autoConversion){if(o.startsWith("balance-in-native")){this.balanceBox.amounts.push(g(a.value,a.currency_code)),t.hasOwnProperty(a.currency_code)||(t[a.currency_code]="");continue}if(o.startsWith("spent-in-native")){t.hasOwnProperty(a.currency_code)||(t[a.currency_code]=""),t[a.currency_code]=t[a.currency_code]+g(a.value,a.currency_code);continue}if(o.startsWith("earned-in-native")){t.hasOwnProperty(a.currency_code)||(t[a.currency_code]=""),t[a.currency_code]=g(a.value,a.currency_code)+" + "+t[a.currency_code];continue}if(o.startsWith("bills-unpaid-in-native")){this.billBox.unpaid.push(g(a.value,a.currency_code));continue}if(o.startsWith("bills-paid-in-native")){this.billBox.paid.push(g(a.value,a.currency_code));continue}if(o.startsWith("left-to-spend-in-native")){this.leftBox.left.push(g(a.value,a.currency_code));continue}if(o.startsWith("left-per-day-to-spend-in-native")){this.leftBox.perDay.push(g(a.value,a.currency_code));continue}if(o.startsWith("net-worth-in-native")){this.netBox.net.push(g(a.value,a.currency_code));continue}}if(!this.autoConversion&&!o.endsWith("native")){if(o.startsWith("balance-in-")){this.balanceBox.amounts.push(g(a.value,a.currency_code));continue}if(o.startsWith("spent-in-")){t.hasOwnProperty(a.currency_code)||(t[a.currency_code]=""),t[a.currency_code]=t[a.currency_code]+g(a.value,a.currency_code);continue}if(o.startsWith("earned-in-")){t.hasOwnProperty(a.currency_code)||(t[a.currency_code]=""),t[a.currency_code]=g(a.value,a.currency_code)+" + "+t[a.currency_code];continue}if(o.startsWith("bills-unpaid-in-")){this.billBox.unpaid.push(g(a.value,a.currency_code));continue}if(o.startsWith("bills-paid-in-")){this.billBox.paid.push(g(a.value,a.currency_code));continue}if(o.startsWith("left-to-spend-in-")){this.leftBox.left.push(g(a.value,a.currency_code));continue}if(o.startsWith("left-per-day-to-spend-in-")){this.leftBox.perDay.push(g(a.value,a.currency_code));continue}o.startsWith("net-worth-in-")&&this.netBox.net.push(g(a.value,a.currency_code))}}for(let n in t)t.hasOwnProperty(n)&&this.balanceBox.subtitles.push(t[n]);this.loading=!1},loadBoxes(){if(this.loading!==!0){if(this.loading=!0,this.boxData===null){this.getFreshData();return}this.generateOptions(this.boxData),this.loading=!1}},init(){Promise.all([b("viewRange"),b("autoConversion",!1)]).then(e=>{Q=!0,this.autoConversion=e[1],this.loadBoxes()}),window.store.observe("end",()=>{Q&&(this.boxData=null,this.loadBoxes())}),window.store.observe("autoConversion",e=>{Q&&(this.autoConversion=e,this.loadBoxes())})}});class qt{put(t,n){let a="/api/v1/preferences/"+t;return k.put(a,{data:n})}}function Nt(e,t=null){window.store.set(e,t),new qt().put(e,t).then(a=>{}).catch(()=>{new Pt().post(e,t).then(o=>{})})}let Yt=class{dashboard(t,n){let a=f(t,"y-MM-dd"),o=f(n,"y-MM-dd");return k.get("/api/v2/chart/account/dashboard",{params:{start:a,end:o}})}expense(t,n){let a=f(t,"y-MM-dd"),o=f(n,"y-MM-dd");return k.get("/api/v2/chart/account/expense-dashboard",{params:{start:a,end:o}})}},ht=class{get(t,n){let a={date:f(n,"y-MM-dd").slice(0,10)};return n?k.get("/api/v2/accounts/"+t,{params:a}):k.get("/api/v2/accounts/"+t)}transactions(t,n){const a={page:n.page??1};return n.hasOwnProperty("start")&&(a.start=f(n.start,"y-MM-dd")),n.hasOwnProperty("end")&&(a.end=f(n.end,"y-MM-dd")),k.get("/api/v2/accounts/"+t+"/transactions",{params:a})}};function J(e){return e==="sankey"?{type:"sankey",data:{datasets:[]},options:{animations:!1}}:e==="pie"?{type:"pie",data:{datasets:[]}}:e==="column"?{type:"bar",data:{labels:[],datasets:[]},options:{plugins:{tooltip:{callbacks:{label:function(t){let n=t.dataset.currency_code;return g(t.raw,n)}}}},maintainAspectRatio:!1,scales:{}}}:e==="line"?{options:{plugins:{tooltip:{callbacks:{label:function(t){let n=t.dataset.currency_code;return g(t.raw,n)}}}},maintainAspectRatio:!1,scales:{x:{type:"time",time:{tooltipFormat:"PP"}}}},type:"line",data:{labels:[],datasets:[]}}:{}}let Y=new m("#36a2eb"),V=new m("#ff6384"),R=new m("#4bc0c0"),bt=new m("#ff9f40"),zt=new m("#9966ff"),Ht=new m("#ffcd56"),Jt=new m("#c9cbcf"),gt=0;window.theme==="dark"&&(V.darken(.3).desaturate(.3),R.darken(.3).desaturate(.3),Y.darken(.3).desaturate(.3),bt.darken(.3).desaturate(.3));let X=[V,bt,Y,R,zt,Ht,Jt,R];function j(e,t){let n={borderColor:V.rgbString(),backgroundColor:V.rgbString()},a;switch(e){default:let r=Math.floor(gt/2)%X.length;a=new m(X[r].rgbString()),a.lighten(.38),n={borderColor:X[r].hexString(),backgroundColor:a.hexString()};break;case"spent":a=new m(Y.rgbString()),a.lighten(.38),n={borderColor:Y.rgbString(),backgroundColor:a.rgbString()};break;case"left":a=new m(R.rgbString()),a.lighten(.38),n={borderColor:R.rgbString(),backgroundColor:a.rgbString()};break;case"overspent":a=new m(V.rgbString()),a.lighten(.22),n={borderColor:V.rgbString(),backgroundColor:a.rgbString()};break}return gt++,t==="border"?n.borderColor:t==="background"?n.backgroundColor:"#FF0000"}let B=[],K=null,tt=null,et=!1;const Zt=()=>({loading:!1,loadingAccounts:!1,accountList:[],autoConversion:!1,chartOptions:null,switchAutoConversion(){this.autoConversion=!this.autoConversion,Nt("autoConversion",this.autoConversion)},getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D("dashboard-accounts-chart",e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){console.log(o),this.drawChart(this.generateOptions(o)),this.loading=!1;return}new Yt().dashboard(e,t,null).then(i=>{this.chartData=i.data,window.store.set(n,i.data),console.log(i.data),this.drawChart(this.generateOptions(this.chartData)),this.loading=!1})},generateOptions(e){B=[];let t=J("line");for(let n=0;n0){this.loadingAccounts=!1;return}const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D("dashboard-accounts-data",e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){this.accountList=o,this.loadingAccounts=!1;return}const r=10;let i=0,l=0,u=[];Promise.all([b("frontpageAccounts")]).then(d=>{i=d[0].length;for(let h in d[0]){let c=d[0];if(c.hasOwnProperty(h)){let p=c[h];new ht().get(p,new Date(window.store.get("end"))).then(v=>{let C=v.data.data;const Ct={page:1,start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))};new ht().transactions(C.id,Ct).then(st=>{let lt=[];for(let $=0;$=r);$++){let M=st.data.data[$],ut={title:M.attributes.group_title===null?"":M.attributes.group_title,id:M.id,transactions:[]};for(let Z=0;Z$.order-M.order),this.accountList=u,this.loadingAccounts=!1,window.store.set(n,u))})})}}})},init(){Promise.all([b("viewRange","1M"),b("autoConversion",!1),b("language","en_US")]).then(e=>{this.autoConversion=e[1],et=!0,this.loadChart(),this.loadAccounts()}),window.store.observe("end",()=>{et&&(tt=null,this.accountList=[],this.loadChart(),this.loadAccounts())}),window.store.observe("autoConversion",()=>{et&&(this.loadChart(),this.loadAccounts())})}});let Qt=class{dashboard(t,n){let a=f(t,"y-MM-dd"),o=f(n,"y-MM-dd");return k.get("/api/v2/chart/budget/dashboard",{params:{start:a,end:o}})}},E=[],U=null,S=null,at=!1,I;const Xt=()=>({loading:!1,autoConversion:!1,loadChart(){if(this.loading!==!0){if(this.loading=!0,S!==null){this.drawChart(this.generateOptions(S)),this.loading=!1;return}this.getFreshData()}},drawChart(e){if(U!==null){U.data.datasets=e.data.datasets,U.update();return}U=new A(document.querySelector("#budget-chart"),e)},getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D("dashboard-budgets-chart",e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){S=o,this.drawChart(this.generateOptions(S)),this.loading=!1;return}new Qt().dashboard(e,t,null).then(i=>{S=i.data,this.drawChart(this.generateOptions(S)),window.store.set(n,S),this.loading=!1})},generateOptions(e){E=[];let t=J("column");t.options.locale=window.store.get("locale").replace("_","-"),t.options.plugins={tooltip:{callbacks:{title:function(n){return n.label},label:function(n){let a=n.dataset.label||"";return a&&(a+=": "),a+" "+g(n.parsed.y,E[n.parsed.x]??"EUR")}}}},t.data={labels:[],datasets:[{label:I.t("firefly.spent"),data:[],borderWidth:1,stack:1,backgroundColor:j("spent","background"),borderColor:j("spent","border")},{label:I.t("firefly.left"),data:[],borderWidth:1,stack:1,backgroundColor:j("left","background"),borderColor:j("left","border")},{label:I.t("firefly.overspent"),data:[],borderWidth:1,stack:1,backgroundColor:j("overspent","background"),borderColor:j("overspent","border")}]};for(const n in e)if(e.hasOwnProperty(n)){let a=e[n],o=a.label+" ("+a.currency_code+")";t.data.labels.push(o),this.autoConversion&&(E.push(a.native_currency_code),t.data.datasets[0].data.push(parseFloat(a.native_entries.spent)*-1),t.data.datasets[1].data.push(parseFloat(a.native_entries.left)),t.data.datasets[2].data.push(parseFloat(a.native_entries.overspent))),this.autoConversion||(E.push(a.currency_code),t.data.datasets[0].data.push(parseFloat(a.entries.spent)*-1),t.data.datasets[1].data.push(parseFloat(a.entries.left)),t.data.datasets[2].data.push(parseFloat(a.entries.overspent)))}return t.options.scales={y:{ticks:{callback:function(n){return g(n,E[0]??"EUR")}}}},t},init(){Promise.all([b("autoConversion",!1),b("language","en_US")]).then(e=>{I=new H;const t=e[1].replace("-","_");I.locale=t,z(I,t).then(()=>{this.autoConversion=e[0],at=!0,this.loading===!1&&this.loadChart()})}),window.store.observe("end",()=>{at&&this.loading===!1&&(S=null,this.loadChart())}),window.store.observe("autoConversion",e=>{at&&(this.autoConversion=e,this.loading===!1&&this.loadChart())})}});class te{dashboard(t,n){let a=f(t,"y-MM-dd"),o=f(n,"y-MM-dd");return k.get("/api/v2/chart/category/dashboard",{params:{start:a,end:o}})}}let ft=[],L=null,W=null,nt=!1;const ee=()=>({loading:!1,autoConversion:!1,generateOptions(e){ft=[];let t=J("column"),n={};for(const o in e)if(e.hasOwnProperty(o)){let r=e[o],i=r.currency_code;this.autoConversion&&(i=r.native_currency_code),n.hasOwnProperty(i)||(n[i]={name:i,yAxisID:"",data:{}},ft.push(i))}for(const o in e)if(e.hasOwnProperty(o)){let r=e[o],i=r.currency_code;this.autoConversion&&(i=r.native_currency_code);for(const l in n)if(n.hasOwnProperty(l)){let u=0;i===l&&(u=parseFloat(r.amount),""+r.currency_code,this.autoConversion&&(u=parseFloat(r.native_amount),""+r.native_currency_code)),n[l].data.hasOwnProperty(r.label)&&(n[l].data[r.label]=n[l].data[r.label]+u),n[l].data.hasOwnProperty(r.label)||(n[l].data[r.label]=u)}t.data.labels.includes(r.label)||t.data.labels.push(r.label)}let a=0;for(const o in n){let r="y"+o,i={label:o,currency_code:o,yAxisID:r,data:[]};for(const l in n[o].data)i.data.push(n[o].data[l]);t.data.datasets.push(i),t.options.scales.hasOwnProperty(r)||(t.options.scales[r]={beginAtZero:!0,type:"linear",position:a===1?"right":"left",ticks:{callback:function(l,u,d){return g(l,o)}}},a++)}return t},drawChart(e){if(L!==null){L.options=e.options,L.data=e.data,L.update();return}L=new A(document.querySelector("#category-chart"),e)},getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D("dashboard-categories-chart",e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){W=o,this.drawChart(this.generateOptions(W)),this.loading=!1;return}new te().dashboard(e,t,null).then(i=>{W=i.data,this.drawChart(this.generateOptions(i.data)),window.store.set(n,W),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,W!==null){this.drawChart(this.generateOptions(W)),this.loading=!1;return}this.getFreshData()}},init(){Promise.all([b("autoConversion",!1)]).then(e=>{this.autoConversion=e[0],nt=!0,this.loadChart()}),window.store.observe("end",()=>{nt&&(this.chartData=null,this.loadChart())}),window.store.observe("autoConversion",e=>{nt&&(this.autoConversion=e,this.loadChart())})}});class ae{list(t){return k.get("/api/v2/transactions",{params:t})}}A.register({SankeyController:Ot,Flow:Mt});const pt="dashboard-sankey-data";let y,ot=!1,q=null,x=[],_=!1,s={category:null,unknown_category:null,in:null,out:null,unknown_source:null,unknown_dest:null,unknown_account:null,expense_account:null,revenue_account:null,budget:null,unknown_budget:null,all_money:null};const _t=function(e){return e.includes(s.revenue_account)?"forestgreen":e.includes("("+s.in+",")?"green":e.includes(s.budget)||e.includes(s.unknown_budget)?"Orchid":e.includes("("+s.out+",")?"MediumOrchid":e.includes(s.all_money)?"blue":"red"};function G(e,t,n,a){if(e==="category"&&t!==null&&n==="in")return s.category+' "'+t+'" ('+s.in+(_?", "+a+")":")");if(e==="category"&&t===null&&n==="in")return s.unknown_category+" ("+s.in+(_?", "+a+")":")");if(e==="category"&&t!==null&&n==="out")return s.category+' "'+t+'" ('+s.out+(_?", "+a+")":")");if(e==="category"&&t===null&&n==="out")return s.unknown_category+" ("+s.out+(_?", "+a+")":")");if(e==="account"&&t===null&&n==="in")return s.unknown_source+(_?" ("+a+")":"");if(e==="account"&&t!==null&&n==="in")return s.revenue_account+'"'+t+'"'+(_?" ("+a+")":"");if(e==="account"&&t===null&&n==="out")return s.unknown_dest+(_?" ("+a+")":"");if(e==="account"&&t!==null&&n==="out")return s.expense_account+' "'+t+'"'+(_?" ("+a+")":"");if(e==="budget"&&t!==null)return s.budget+' "'+t+'"'+(_?" ("+a+")":"");if(e==="budget"&&t===null)return s.unknown_budget+(_?" ("+a+")":"");console.error('Cannot handle: type:"'+e+'", dir: "'+n+'"')}function T(e,t,n){if(e==="category"&&t!==null)return s.category+' "'+t+'"'+(_?" ("+n+")":"");if(e==="category"&&t===null)return s.unknown_category+(_?" ("+n+")":"");if(e==="account"&&t===null)return s.unknown_account+(_?" ("+n+")":"");if(e==="account"&&t!==null)return t+(_?" ("+n+")":"");if(e==="budget"&&t!==null)return s.budget+' "'+t+'"'+(_?" ("+n+")":"");if(e==="budget"&&t===null)return s.unknown_budget+(_?" ("+n+")":"");console.error('Cannot handle: type:"'+e+'"')}const ne=()=>({loading:!1,autoConversion:!1,generateOptions(){let e=J("sankey"),t={},n={};for(let o in x)if(x.hasOwnProperty(o)){let r=x[o];for(let i in r.attributes.transactions)if(r.attributes.transactions.hasOwnProperty(i)){let l=r.attributes.transactions[i],u=this.autoConversion?l.native_currency_code:l.currency_code,d=this.autoConversion?parseFloat(l.native_amount):parseFloat(l.amount),h;if(l.type==="deposit"){let c=G("category",l.category_name,"in",u),p=G("account",l.source_name,"in",u);n[c]=T("category",l.category_name,u),n[p]=T("account",l.source_name,u),h=p+"-"+c+"-"+u,t.hasOwnProperty(h)||(t[h]={from:p,to:c,amount:0}),t[h].amount+=d,h=c+"-"+s.all_money+"-"+u,t.hasOwnProperty(h)||(t[h]={from:c,to:s.all_money+(this.autoConversion?" ("+u+")":""),amount:0}),t[h].amount+=d}if(l.type==="withdrawal"){let c=G("budget",l.budget_name,"out",u);n[c]=T("budget",l.budget_name,u),h=s.all_money+"-"+c+"-"+u,t.hasOwnProperty(h)||(t[h]={from:s.all_money+(this.autoConversion?" ("+u+")":""),to:c,amount:0}),t[h].amount+=d;let p=G("category",l.category_name,"out",u);n[p]=T("category",l.category_name,u),h=c+"-"+p+"-"+u,t.hasOwnProperty(h)||(t[h]={from:c,to:p,amount:0}),t[h].amount+=d;let v=G("account",l.destination_name,"out",u);n[v]=T("account",l.destination_name,u),h=p+"-"+v+"-"+u,t.hasOwnProperty(h)||(t[h]={from:p,to:v,amount:0}),t[h].amount+=d}}}let a={label:"Firefly III dashboard sankey chart",data:[],colorFrom:o=>_t(o.dataset.data[o.dataIndex]?o.dataset.data[o.dataIndex].from:""),colorTo:o=>_t(o.dataset.data[o.dataIndex]?o.dataset.data[o.dataIndex].to:""),colorMode:"gradient",labels:n,size:"min"};for(let o in t)if(t.hasOwnProperty(o)){let r=t[o];a.data.push({from:r.from,to:r.to,flow:r.amount})}return e.data.datasets.push(a),e},drawChart(e){if(q!==null){q.data.datasets=e.data.datasets,q.update();return}q=new A(document.querySelector("#sankey-chart"),e)},getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D(pt,e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){x=o,this.drawChart(this.generateOptions()),this.loading=!1;return}let r={start:f(e,"y-MM-dd"),end:f(t,"y-MM-dd"),type:"withdrawal,deposit",page:1};this.downloadTransactions(r)},downloadTransactions(e){const t=new Date(window.store.get("start")),n=new Date(window.store.get("end")),a=D(pt,t,n);new ae().list(e).then(r=>{if(x=[...x,...r.data.data],parseInt(r.data.meta.pagination.total_pages)>e.page){e.page++,this.downloadTransactions(e);return}window.store.set(a,x),this.drawChart(this.generateOptions()),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,x.length!==0){this.drawChart(this.generateOptions()),this.loading=!1;return}this.getFreshData()}},init(){x=[],Promise.all([b("autoConversion",!1),b("language","en_US")]).then(e=>{this.autoConversion=e[0],_=e[0],y=new H;const t=e[1].replace("-","_");y.locale=t,z(y,t).then(()=>{s.all_money=y.t("firefly.all_money"),s.category=y.t("firefly.category"),s.in=y.t("firefly.money_flowing_in"),s.out=y.t("firefly.money_flowing_out"),s.unknown_category=y.t("firefly.unknown_category_plain"),s.unknown_source=y.t("firefly.unknown_source_plain"),s.unknown_dest=y.t("firefly.unknown_dest_plain"),s.unknown_account=y.t("firefly.unknown_any_plain"),s.unknown_budget=y.t("firefly.unknown_budget_plain"),s.expense_account=y.t("firefly.expense_account"),s.revenue_account=y.t("firefly.revenue_account"),s.budget=y.t("firefly.budget"),ot=!0,this.loadChart()})}),window.store.observe("end",()=>{ot&&(this.transactions=[],this.loadChart())}),window.store.observe("autoConversion",e=>{ot&&(this.autoConversion=e,this.loadChart())})}});let rt=!1,F,w={};function wt(e){return new Dt().list(e).then(n=>{let a=n.data.data;for(let o in a)if(a.hasOwnProperty(o)){let r=a[o];if(r.attributes.active&&r.attributes.pay_dates.length>0){let i=r.attributes.object_group_id===null?0:r.attributes.object_group_id,l=r.attributes.object_group_title===null?F.t("firefly.default_group_title_name_plain"):r.attributes.object_group_title,u=r.attributes.object_group_order===null?0:r.attributes.object_group_order;w.hasOwnProperty(i)||(w[i]={id:i,title:l,order:u,payment_info:{},bills:[]});let d={id:r.id,name:r.attributes.name,amount_min:r.attributes.amount_min,amount_max:r.attributes.amount_max,amount:(parseFloat(r.attributes.amount_max)+parseFloat(r.attributes.amount_min))/2,currency_code:r.attributes.currency_code,native_amount_min:r.attributes.native_amount_min,native_amount_max:r.attributes.native_amount_max,native_amount:(parseFloat(r.attributes.native_amount_max)+parseFloat(r.attributes.native_amount_min))/2,native_currency_code:r.attributes.native_currency_code,transactions:[],pay_dates:r.attributes.pay_dates,paid:r.attributes.paid_dates.length>0};d.expected_amount=e.autoConversion?g(d.native_amount,d.native_currency_code):g(d.amount,d.currency_code),d.expected_times=F.t("firefly.subscr_expected_x_times",{times:r.attributes.pay_dates.length,amount:d.expected_amount});for(let h in r.attributes.paid_dates)if(r.attributes.paid_dates.hasOwnProperty(h)){const c=r.attributes.paid_dates[h];let p=100;e.autoConversion&&(p=Math.round(-100+parseFloat(c.native_amount)*-1/parseFloat(d.native_amount)*100)),e.autoConversion||(p=Math.round(-100+parseFloat(c.amount)*-1/parseFloat(d.amount)*100));let v={amount:e.autoConversion?g(c.native_amount,c.native_currency_code):g(c.amount,c.currency_code),percentage:p,date:f(new Date(c.date),"PP"),foreign_amount:null};c.foreign_currency_code!==null&&(v.foreign_amount=e.autoConversion?c.foreign_native_amount:c.foreign_amount,v.foreign_currency_code=e.autoConversion?c.native_currency_code:c.foreign_currency_code),d.transactions.push(v)}if(w[i].bills.push(d),r.attributes.paid_dates.length===0){const h=r.attributes.pay_dates.length*d.amount,c=r.attributes.pay_dates.length*d.native_amount;w[i].payment_info.hasOwnProperty(d.currency_code)||(w[i].payment_info[d.currency_code]={currency_code:d.currency_code,paid:0,unpaid:0,native_currency_code:d.native_currency_code,native_paid:0,native_unpaid:0}),w[i].payment_info[d.currency_code].unpaid+=h,w[i].payment_info[d.currency_code].native_unpaid+=c}if(r.attributes.paid_dates.length>0){for(let h in r.attributes.paid_dates)if(r.attributes.paid_dates.hasOwnProperty(h)){let c=r.attributes.paid_dates[h];w[i].payment_info.hasOwnProperty(c.currency_code)||(w[i].payment_info[c.currency_code]={currency_code:d.currency_code,paid:0,unpaid:0,native_currency_code:d.native_currency_code,native_paid:0,native_unpaid:0});const p=parseFloat(c.amount)*-1,v=parseFloat(c.native_amount)*-1;w[i].payment_info[c.currency_code].paid+=p,w[i].payment_info[c.currency_code].native_paid+=v}}}}return parseInt(n.data.meta.pagination.total_pages)>e.page?(e.page++,wt(e)):Promise.resolve()})}const oe=()=>({loading:!1,autoConversion:!1,subscriptions:[],startSubscriptions(){this.loading=!0;let e=new Date(window.store.get("start")),t=new Date(window.store.get("end"));const n=window.store.get("cacheValid");let a=window.store.get(D("subscriptions-data-dashboard",e,t));n&&typeof a<"u",w={},this.subscriptions=[],console.log("cache is invalid, must download");let o={start:f(e,"y-MM-dd"),end:f(t,"y-MM-dd"),autoConversion:this.autoConversion,page:1};wt(o).then(()=>{console.log("Done with download!");let r=Object.values(w);for(let i in r)if(r.hasOwnProperty(i)){let l=r[i];const u=Object.keys(l.payment_info);l.col_size=u.length===1?"col-6 offset-3":"col-6",l.chart_width=u.length===1?"50%":"100%",l.payment_length=u.length,this.subscriptions.push(l)}this.loading=!1})},drawPieChart(e,t,n){let a="#pie_"+e+"_"+n.currency_code;const o=this.autoConversion?n.native_unpaid:n.unpaid,r=this.autoConversion?n.native_paid:n.paid,i=this.autoConversion?n.native_currency_code:n.currency_code,u={type:"doughnut",data:{labels:[F.t("firefly.paid"),F.t("firefly.unpaid")],datasets:[{label:F.t("firefly.subscriptions_in_group",{title:t}),data:[r,o],backgroundColor:["rgb(54, 162, 235)","rgb(255, 99, 132)"],hoverOffset:4}]},options:{plugins:{tooltip:{callbacks:{label:function(h){return h.dataset.label+": "+g(h.raw,i)}}}}}};var d=A.getChart(document.querySelector(a));typeof d<"u"&&d.destroy(),new A(document.querySelector(a),u)},init(){console.log("subscriptions init"),Promise.all([b("autoConversion",!1),b("language","en_US")]).then(e=>{console.log("subscriptions after promises"),this.autoConversion=e[0],rt=!0,F=new H;const t=e[1].replace("-","_");F.locale=t,z(F,t).then(()=>{this.loading===!1&&this.startSubscriptions()})}),window.store.observe("end",()=>{rt&&(console.log("subscriptions observe end"),this.loading===!1&&this.startSubscriptions())}),window.store.observe("autoConversion",e=>{rt&&(console.log("subscriptions observe autoConversion"),this.autoConversion=e,this.loading===!1&&this.startSubscriptions())})}});let O={},it=!1,N;const yt="dashboard-piggies-data",re=()=>({loading:!1,autoConversion:!1,sankeyGrouping:"account",piggies:[],getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D(yt,e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){O=o,this.parsePiggies(),this.loading=!1;return}let r={start:f(e,"y-MM-dd"),end:f(t,"y-MM-dd"),page:1};this.downloadPiggyBanks(r)},downloadPiggyBanks(e){const t=new Date(window.store.get("start")),n=new Date(window.store.get("end")),a=D(yt,t,n);new xt().list(e).then(r=>{if(O=[...O,...r.data.data],parseInt(r.data.meta.pagination.total_pages)>e.page){e.page++,this.downloadPiggyBanks(e);return}window.store.set(a,O),this.parsePiggies(),this.loading=!1})},parsePiggies(){let e=[];for(let t in O)if(O.hasOwnProperty(t)){let n=O[t];if(n.attributes.percentage>=100||n.attributes.percentage===0)continue;let a=n.object_group_title??N.t("firefly.default_group_title_name_plain");e.hasOwnProperty(a)||(e[a]={id:n.object_group_id??0,title:a,order:n.object_group_order??0,piggies:[]});let o={id:n.id,name:n.attributes.name,percentage:parseInt(n.attributes.percentage),amount:this.autoConversion?n.attributes.native_current_amount:n.attributes.current_amount,left_to_save:this.autoConversion?n.attributes.native_left_to_save:n.attributes.left_to_save,target_amount:this.autoConversion?n.attributes.native_target_amount:n.attributes.target_amount,save_per_month:this.autoConversion?n.attributes.native_save_per_month:n.attributes.save_per_month,currency_code:this.autoConversion?n.attributes.native_currency_code:n.attributes.currency_code};e[a].piggies.push(o)}this.piggies=Object.values(e)},loadPiggyBanks(){if(this.loading!==!0){if(this.loading=!0,this.piggies.length!==0){this.parsePiggies(),this.loading=!1;return}this.getFreshData()}},init(){O=[],Promise.all([b("autoConversion",!1),b("language","en_US")]).then(e=>{N=new H;const t=e[1].replace("-","_");N.locale=t,z(N,t).then(()=>{it=!0,this.autoConversion=e[0],this.loadPiggyBanks()})}),window.store.observe("end",()=>{it&&(O=[],this.loadPiggyBanks())}),window.store.observe("autoConversion",e=>{it&&(this.autoConversion=e,this.loadPiggyBanks())})}});A.register({LineController:St,LineElement:Ft,ArcElement:At,BarController:Bt,TimeScale:$t,PieController:jt,BarElement:It,Filler:Wt,Colors:Vt,LinearScale:Kt,CategoryScale:Et,PointElement:Lt,Tooltip:Gt,Legend:Tt});const vt={dates:kt,boxes:Ut,accounts:Zt,budgets:Xt,categories:ee,sankey:ne,subscriptions:oe,piggies:re};function mt(e){Object.keys(e).forEach(t=>{console.log(`Loading page component "${t}"`);let n=e[t]();Alpine.data(t,()=>n)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{mt(vt)});window.bootstrapped&&mt(vt); diff --git a/public/build/assets/dashboard-f6763ad9.js b/public/build/assets/dashboard-f6763ad9.js deleted file mode 100644 index a8568cdbdd..0000000000 --- a/public/build/assets/dashboard-f6763ad9.js +++ /dev/null @@ -1 +0,0 @@ -import{a as k,f as g,g as y,P as Pt,l as z,G as kt,b as Dt,d as xt}from"./get-10f2a251.js";import{f,C as m,a as A,I as H,S as Ot,F as Mt,L as St,b as Ft,A as At,B as Bt,T as $t,P as jt,c as It,i as Wt,p as Vt,d as Kt,e as Et,g as Lt,h as Gt,j as Tt}from"./vendor-5ec3da0f.js";class Rt{get(t,n,a){return k.get("/api/v2/summary/basic",{params:{start:t,end:n,code:a}})}}function D(e,t,n){const a=f(t,"y-MM-dd")+"_"+f(n,"y-MM-dd")+"_"+e;return console.log("getCacheKey: "+a),String(a)}let Q=!1;const Ut=()=>({balanceBox:{amounts:[],subtitles:[]},billBox:{paid:[],unpaid:[]},leftBox:{left:[],perDay:[]},netBox:{net:[]},autoConversion:!1,loading:!1,boxData:null,boxOptions:null,getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D("dashboard-boxes-data",e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){this.boxData=o,this.generateOptions(this.boxData);return}new Rt().get(f(e,"yyyy-MM-dd"),f(t,"yyyy-MM-dd"),null).then(i=>{this.boxData=i.data,window.store.set(n,i.data),this.generateOptions(this.boxData)})},generateOptions(e){this.balanceBox={amounts:[],subtitles:[]},this.billBox={paid:[],unpaid:[]},this.leftBox={left:[],perDay:[]},this.netBox={net:[]};let t={};for(const n in e)if(e.hasOwnProperty(n)){const a=e[n];if(!a.hasOwnProperty("key"))continue;let o=a.key;if(this.autoConversion){if(o.startsWith("balance-in-native")){this.balanceBox.amounts.push(g(a.value,a.currency_code)),t.hasOwnProperty(a.currency_code)||(t[a.currency_code]="");continue}if(o.startsWith("spent-in-native")){t.hasOwnProperty(a.currency_code)||(t[a.currency_code]=""),t[a.currency_code]=t[a.currency_code]+g(a.value,a.currency_code);continue}if(o.startsWith("earned-in-native")){t.hasOwnProperty(a.currency_code)||(t[a.currency_code]=""),t[a.currency_code]=g(a.value,a.currency_code)+" + "+t[a.currency_code];continue}if(o.startsWith("bills-unpaid-in-native")){this.billBox.unpaid.push(g(a.value,a.currency_code));continue}if(o.startsWith("bills-paid-in-native")){this.billBox.paid.push(g(a.value,a.currency_code));continue}if(o.startsWith("left-to-spend-in-native")){this.leftBox.left.push(g(a.value,a.currency_code));continue}if(o.startsWith("left-per-day-to-spend-in-native")){this.leftBox.perDay.push(g(a.value,a.currency_code));continue}if(o.startsWith("net-worth-in-native")){this.netBox.net.push(g(a.value,a.currency_code));continue}}if(!this.autoConversion&&!o.endsWith("native")){if(o.startsWith("balance-in-")){this.balanceBox.amounts.push(g(a.value,a.currency_code));continue}if(o.startsWith("spent-in-")){t.hasOwnProperty(a.currency_code)||(t[a.currency_code]=""),t[a.currency_code]=t[a.currency_code]+g(a.value,a.currency_code);continue}if(o.startsWith("earned-in-")){t.hasOwnProperty(a.currency_code)||(t[a.currency_code]=""),t[a.currency_code]=g(a.value,a.currency_code)+" + "+t[a.currency_code];continue}if(o.startsWith("bills-unpaid-in-")){this.billBox.unpaid.push(g(a.value,a.currency_code));continue}if(o.startsWith("bills-paid-in-")){this.billBox.paid.push(g(a.value,a.currency_code));continue}if(o.startsWith("left-to-spend-in-")){this.leftBox.left.push(g(a.value,a.currency_code));continue}if(o.startsWith("left-per-day-to-spend-in-")){this.leftBox.perDay.push(g(a.value,a.currency_code));continue}o.startsWith("net-worth-in-")&&this.netBox.net.push(g(a.value,a.currency_code))}}for(let n in t)t.hasOwnProperty(n)&&this.balanceBox.subtitles.push(t[n]);this.loading=!1},loadBoxes(){if(this.loading!==!0){if(this.loading=!0,this.boxData===null){this.getFreshData();return}this.generateOptions(this.boxData),this.loading=!1}},init(){Promise.all([y("viewRange"),y("autoConversion",!1)]).then(e=>{Q=!0,this.autoConversion=e[1],this.loadBoxes()}),window.store.observe("end",()=>{Q&&(this.boxData=null,this.loadBoxes())}),window.store.observe("autoConversion",e=>{Q&&(this.autoConversion=e,this.loadBoxes())})}});class qt{put(t,n){let a="/api/v1/preferences/"+t;return k.put(a,{data:n})}}function Nt(e,t=null){window.store.set(e,t),new qt().put(e,t).then(a=>{}).catch(()=>{new Pt().post(e,t).then(o=>{})})}let Yt=class{dashboard(t,n){let a=f(t,"y-MM-dd"),o=f(n,"y-MM-dd");return k.get("/api/v2/chart/account/dashboard",{params:{start:a,end:o}})}expense(t,n){let a=f(t,"y-MM-dd"),o=f(n,"y-MM-dd");return k.get("/api/v2/chart/account/expense-dashboard",{params:{start:a,end:o}})}},ht=class{get(t,n){let a={date:f(n,"y-MM-dd").slice(0,10)};return n?k.get("/api/v2/accounts/"+t,{params:a}):k.get("/api/v2/accounts/"+t)}transactions(t,n){const a={page:n.page??1};return n.hasOwnProperty("start")&&(a.start=f(n.start,"y-MM-dd")),n.hasOwnProperty("end")&&(a.end=f(n.end,"y-MM-dd")),k.get("/api/v2/accounts/"+t+"/transactions",{params:a})}};function J(e){return e==="sankey"?{type:"sankey",data:{datasets:[]},options:{animations:!1}}:e==="pie"?{type:"pie",data:{datasets:[]}}:e==="column"?{type:"bar",data:{labels:[],datasets:[]},options:{plugins:{tooltip:{callbacks:{label:function(t){let n=t.dataset.currency_code;return g(t.raw,n)}}}},maintainAspectRatio:!1,scales:{}}}:e==="line"?{options:{plugins:{tooltip:{callbacks:{label:function(t){let n=t.dataset.currency_code;return g(t.raw,n)}}}},maintainAspectRatio:!1,scales:{x:{type:"time",time:{tooltipFormat:"PP"}}}},type:"line",data:{labels:[],datasets:[]}}:{}}let Y=new m("#36a2eb"),V=new m("#ff6384"),R=new m("#4bc0c0"),yt=new m("#ff9f40"),zt=new m("#9966ff"),Ht=new m("#ffcd56"),Jt=new m("#c9cbcf"),gt=0;window.theme==="dark"&&(V.darken(.3).desaturate(.3),R.darken(.3).desaturate(.3),Y.darken(.3).desaturate(.3),yt.darken(.3).desaturate(.3));let X=[V,yt,Y,R,zt,Ht,Jt,R];function j(e,t){let n={borderColor:V.rgbString(),backgroundColor:V.rgbString()},a;switch(e){default:let r=Math.floor(gt/2)%X.length;a=new m(X[r].rgbString()),a.lighten(.38),n={borderColor:X[r].hexString(),backgroundColor:a.hexString()};break;case"spent":a=new m(Y.rgbString()),a.lighten(.38),n={borderColor:Y.rgbString(),backgroundColor:a.rgbString()};break;case"left":a=new m(R.rgbString()),a.lighten(.38),n={borderColor:R.rgbString(),backgroundColor:a.rgbString()};break;case"overspent":a=new m(V.rgbString()),a.lighten(.22),n={borderColor:V.rgbString(),backgroundColor:a.rgbString()};break}return gt++,t==="border"?n.borderColor:t==="background"?n.backgroundColor:"#FF0000"}let B=[],K=null,tt=null,et=!1;const Zt=()=>({loading:!1,loadingAccounts:!1,accountList:[],autoConversion:!1,chartOptions:null,switchAutoConversion(){this.autoConversion=!this.autoConversion,Nt("autoConversion",this.autoConversion)},getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D("dashboard-accounts-chart",e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){console.log(o),this.drawChart(this.generateOptions(o)),this.loading=!1;return}new Yt().dashboard(e,t,null).then(i=>{this.chartData=i.data,window.store.set(n,i.data),console.log(i.data),this.drawChart(this.generateOptions(this.chartData)),this.loading=!1})},generateOptions(e){B=[];let t=J("line");for(let n=0;n0){this.loadingAccounts=!1;return}const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D("dashboard-accounts-data",e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){this.accountList=o,this.loadingAccounts=!1;return}const r=10;let i=0,l=0,u=[];Promise.all([y("frontpageAccounts")]).then(d=>{i=d[0].length;for(let h in d[0]){let c=d[0];if(c.hasOwnProperty(h)){let p=c[h];new ht().get(p,new Date(window.store.get("end"))).then(v=>{let C=v.data.data;const Ct={page:1,start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))};new ht().transactions(C.id,Ct).then(st=>{let lt=[];for(let $=0;$=r);$++){let M=st.data.data[$],ut={title:M.attributes.group_title===null?"":M.attributes.group_title,id:M.id,transactions:[]};for(let Z=0;Z$.order-M.order),this.accountList=u,this.loadingAccounts=!1,window.store.set(n,u))})})}}})},init(){Promise.all([y("viewRange","1M"),y("autoConversion",!1),y("language","en_US")]).then(e=>{this.autoConversion=e[1],et=!0,this.loadChart(),this.loadAccounts()}),window.store.observe("end",()=>{et&&(tt=null,this.accountList=[],this.loadChart(),this.loadAccounts())}),window.store.observe("autoConversion",()=>{et&&(this.loadChart(),this.loadAccounts())})}});let Qt=class{dashboard(t,n){let a=f(t,"y-MM-dd"),o=f(n,"y-MM-dd");return k.get("/api/v2/chart/budget/dashboard",{params:{start:a,end:o}})}},E=[],U=null,S=null,at=!1,I;const Xt=()=>({loading:!1,autoConversion:!1,loadChart(){if(this.loading!==!0){if(this.loading=!0,S!==null){this.drawChart(this.generateOptions(S)),this.loading=!1;return}this.getFreshData()}},drawChart(e){if(U!==null){U.data.datasets=e.data.datasets,U.update();return}U=new A(document.querySelector("#budget-chart"),e)},getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D("dashboard-budgets-chart",e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){S=o,this.drawChart(this.generateOptions(S)),this.loading=!1;return}new Qt().dashboard(e,t,null).then(i=>{S=i.data,this.drawChart(this.generateOptions(S)),window.store.set(n,S),this.loading=!1})},generateOptions(e){E=[];let t=J("column");t.options.locale=window.store.get("locale").replace("_","-"),t.options.plugins={tooltip:{callbacks:{title:function(n){return n.label},label:function(n){let a=n.dataset.label||"";return a&&(a+=": "),a+" "+g(n.parsed.y,E[n.parsed.x]??"EUR")}}}},t.data={labels:[],datasets:[{label:I.t("firefly.spent"),data:[],borderWidth:1,stack:1,backgroundColor:j("spent","background"),borderColor:j("spent","border")},{label:I.t("firefly.left"),data:[],borderWidth:1,stack:1,backgroundColor:j("left","background"),borderColor:j("left","border")},{label:I.t("firefly.overspent"),data:[],borderWidth:1,stack:1,backgroundColor:j("overspent","background"),borderColor:j("overspent","border")}]};for(const n in e)if(e.hasOwnProperty(n)){let a=e[n],o=a.label+" ("+a.currency_code+")";t.data.labels.push(o),this.autoConversion&&(E.push(a.native_currency_code),t.data.datasets[0].data.push(parseFloat(a.native_entries.spent)*-1),t.data.datasets[1].data.push(parseFloat(a.native_entries.left)),t.data.datasets[2].data.push(parseFloat(a.native_entries.overspent))),this.autoConversion||(E.push(a.currency_code),t.data.datasets[0].data.push(parseFloat(a.entries.spent)*-1),t.data.datasets[1].data.push(parseFloat(a.entries.left)),t.data.datasets[2].data.push(parseFloat(a.entries.overspent)))}return t.options.scales={y:{ticks:{callback:function(n){return g(n,E[0]??"EUR")}}}},t},init(){Promise.all([y("autoConversion",!1),y("language","en_US")]).then(e=>{I=new H;const t=e[1].replace("-","_");I.locale=t,z(I,t).then(()=>{this.autoConversion=e[0],at=!0,this.loading===!1&&this.loadChart()})}),window.store.observe("end",()=>{at&&this.loading===!1&&(S=null,this.loadChart())}),window.store.observe("autoConversion",e=>{at&&(this.autoConversion=e,this.loading===!1&&this.loadChart())})}});class te{dashboard(t,n){let a=f(t,"y-MM-dd"),o=f(n,"y-MM-dd");return k.get("/api/v2/chart/category/dashboard",{params:{start:a,end:o}})}}let ft=[],L=null,W=null,nt=!1;const ee=()=>({loading:!1,autoConversion:!1,generateOptions(e){ft=[];let t=J("column"),n={};for(const o in e)if(e.hasOwnProperty(o)){let r=e[o],i=r.currency_code;this.autoConversion&&(i=r.native_currency_code),n.hasOwnProperty(i)||(n[i]={name:i,yAxisID:"",data:{}},ft.push(i))}for(const o in e)if(e.hasOwnProperty(o)){let r=e[o],i=r.currency_code;this.autoConversion&&(i=r.native_currency_code);for(const l in n)if(n.hasOwnProperty(l)){let u=0;i===l&&(u=parseFloat(r.amount),""+r.currency_code,this.autoConversion&&(u=parseFloat(r.native_amount),""+r.native_currency_code)),n[l].data.hasOwnProperty(r.label)&&(n[l].data[r.label]=n[l].data[r.label]+u),n[l].data.hasOwnProperty(r.label)||(n[l].data[r.label]=u)}t.data.labels.includes(r.label)||t.data.labels.push(r.label)}let a=0;for(const o in n){let r="y"+o,i={label:o,currency_code:o,yAxisID:r,data:[]};for(const l in n[o].data)i.data.push(n[o].data[l]);t.data.datasets.push(i),t.options.scales.hasOwnProperty(r)||(t.options.scales[r]={beginAtZero:!0,type:"linear",position:a===1?"right":"left",ticks:{callback:function(l,u,d){return g(l,o)}}},a++)}return t},drawChart(e){if(L!==null){L.options=e.options,L.data=e.data,L.update();return}L=new A(document.querySelector("#category-chart"),e)},getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D("dashboard-categories-chart",e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){W=o,this.drawChart(this.generateOptions(W)),this.loading=!1;return}new te().dashboard(e,t,null).then(i=>{W=i.data,this.drawChart(this.generateOptions(i.data)),window.store.set(n,W),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,W!==null){this.drawChart(this.generateOptions(W)),this.loading=!1;return}this.getFreshData()}},init(){Promise.all([y("autoConversion",!1)]).then(e=>{this.autoConversion=e[0],nt=!0,this.loadChart()}),window.store.observe("end",()=>{nt&&(this.chartData=null,this.loadChart())}),window.store.observe("autoConversion",e=>{nt&&(this.autoConversion=e,this.loadChart())})}});class ae{list(t){return k.get("/api/v2/transactions",{params:t})}}A.register({SankeyController:Ot,Flow:Mt});const pt="dashboard-sankey-data";let b,ot=!1,q=null,x=[],_=!1,s={category:null,unknown_category:null,in:null,out:null,unknown_source:null,unknown_dest:null,unknown_account:null,expense_account:null,revenue_account:null,budget:null,unknown_budget:null,all_money:null};const _t=function(e){return e.includes(s.revenue_account)?"forestgreen":e.includes("("+s.in+",")?"green":e.includes(s.budget)||e.includes(s.unknown_budget)?"Orchid":e.includes("("+s.out+",")?"MediumOrchid":e.includes(s.all_money)?"blue":"red"};function G(e,t,n,a){if(e==="category"&&t!==null&&n==="in")return s.category+' "'+t+'" ('+s.in+(_?", "+a+")":")");if(e==="category"&&t===null&&n==="in")return s.unknown_category+" ("+s.in+(_?", "+a+")":")");if(e==="category"&&t!==null&&n==="out")return s.category+' "'+t+'" ('+s.out+(_?", "+a+")":")");if(e==="category"&&t===null&&n==="out")return s.unknown_category+" ("+s.out+(_?", "+a+")":")");if(e==="account"&&t===null&&n==="in")return s.unknown_source+(_?" ("+a+")":"");if(e==="account"&&t!==null&&n==="in")return s.revenue_account+'"'+t+'"'+(_?" ("+a+")":"");if(e==="account"&&t===null&&n==="out")return s.unknown_dest+(_?" ("+a+")":"");if(e==="account"&&t!==null&&n==="out")return s.expense_account+' "'+t+'"'+(_?" ("+a+")":"");if(e==="budget"&&t!==null)return s.budget+' "'+t+'"'+(_?" ("+a+")":"");if(e==="budget"&&t===null)return s.unknown_budget+(_?" ("+a+")":"");console.error('Cannot handle: type:"'+e+'", dir: "'+n+'"')}function T(e,t,n){if(e==="category"&&t!==null)return s.category+' "'+t+'"'+(_?" ("+n+")":"");if(e==="category"&&t===null)return s.unknown_category+(_?" ("+n+")":"");if(e==="account"&&t===null)return s.unknown_account+(_?" ("+n+")":"");if(e==="account"&&t!==null)return t+(_?" ("+n+")":"");if(e==="budget"&&t!==null)return s.budget+' "'+t+'"'+(_?" ("+n+")":"");if(e==="budget"&&t===null)return s.unknown_budget+(_?" ("+n+")":"");console.error('Cannot handle: type:"'+e+'"')}const ne=()=>({loading:!1,autoConversion:!1,generateOptions(){let e=J("sankey"),t={},n={};for(let o in x)if(x.hasOwnProperty(o)){let r=x[o];for(let i in r.attributes.transactions)if(r.attributes.transactions.hasOwnProperty(i)){let l=r.attributes.transactions[i],u=this.autoConversion?l.native_currency_code:l.currency_code,d=this.autoConversion?parseFloat(l.native_amount):parseFloat(l.amount),h;if(l.type==="deposit"){let c=G("category",l.category_name,"in",u),p=G("account",l.source_name,"in",u);n[c]=T("category",l.category_name,u),n[p]=T("account",l.source_name,u),h=p+"-"+c+"-"+u,t.hasOwnProperty(h)||(t[h]={from:p,to:c,amount:0}),t[h].amount+=d,h=c+"-"+s.all_money+"-"+u,t.hasOwnProperty(h)||(t[h]={from:c,to:s.all_money+(this.autoConversion?" ("+u+")":""),amount:0}),t[h].amount+=d}if(l.type==="withdrawal"){let c=G("budget",l.budget_name,"out",u);n[c]=T("budget",l.budget_name,u),h=s.all_money+"-"+c+"-"+u,t.hasOwnProperty(h)||(t[h]={from:s.all_money+(this.autoConversion?" ("+u+")":""),to:c,amount:0}),t[h].amount+=d;let p=G("category",l.category_name,"out",u);n[p]=T("category",l.category_name,u),h=c+"-"+p+"-"+u,t.hasOwnProperty(h)||(t[h]={from:c,to:p,amount:0}),t[h].amount+=d;let v=G("account",l.destination_name,"out",u);n[v]=T("account",l.destination_name,u),h=p+"-"+v+"-"+u,t.hasOwnProperty(h)||(t[h]={from:p,to:v,amount:0}),t[h].amount+=d}}}let a={label:"Firefly III dashboard sankey chart",data:[],colorFrom:o=>_t(o.dataset.data[o.dataIndex]?o.dataset.data[o.dataIndex].from:""),colorTo:o=>_t(o.dataset.data[o.dataIndex]?o.dataset.data[o.dataIndex].to:""),colorMode:"gradient",labels:n,size:"min"};for(let o in t)if(t.hasOwnProperty(o)){let r=t[o];a.data.push({from:r.from,to:r.to,flow:r.amount})}return e.data.datasets.push(a),e},drawChart(e){if(q!==null){q.data.datasets=e.data.datasets,q.update();return}q=new A(document.querySelector("#sankey-chart"),e)},getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D(pt,e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){x=o,this.drawChart(this.generateOptions()),this.loading=!1;return}let r={start:f(e,"y-MM-dd"),end:f(t,"y-MM-dd"),type:"withdrawal,deposit",page:1};this.downloadTransactions(r)},downloadTransactions(e){const t=new Date(window.store.get("start")),n=new Date(window.store.get("end")),a=D(pt,t,n);new ae().list(e).then(r=>{if(x=[...x,...r.data.data],parseInt(r.data.meta.pagination.total_pages)>e.page){e.page++,this.downloadTransactions(e);return}window.store.set(a,x),this.drawChart(this.generateOptions()),this.loading=!1})},loadChart(){if(this.loading!==!0){if(this.loading=!0,x.length!==0){this.drawChart(this.generateOptions()),this.loading=!1;return}this.getFreshData()}},init(){x=[],Promise.all([y("autoConversion",!1),y("language","en_US")]).then(e=>{this.autoConversion=e[0],_=e[0],b=new H;const t=e[1].replace("-","_");b.locale=t,z(b,t).then(()=>{s.all_money=b.t("firefly.all_money"),s.category=b.t("firefly.category"),s.in=b.t("firefly.money_flowing_in"),s.out=b.t("firefly.money_flowing_out"),s.unknown_category=b.t("firefly.unknown_category_plain"),s.unknown_source=b.t("firefly.unknown_source_plain"),s.unknown_dest=b.t("firefly.unknown_dest_plain"),s.unknown_account=b.t("firefly.unknown_any_plain"),s.unknown_budget=b.t("firefly.unknown_budget_plain"),s.expense_account=b.t("firefly.expense_account"),s.revenue_account=b.t("firefly.revenue_account"),s.budget=b.t("firefly.budget"),ot=!0,this.loadChart()})}),window.store.observe("end",()=>{ot&&(this.transactions=[],this.loadChart())}),window.store.observe("autoConversion",e=>{ot&&(this.autoConversion=e,this.loadChart())})}});let rt=!1,F,w={};function wt(e){return new kt().list(e).then(n=>{let a=n.data.data;for(let o in a)if(a.hasOwnProperty(o)){let r=a[o];if(r.attributes.active&&r.attributes.pay_dates.length>0){let i=r.attributes.object_group_id===null?0:r.attributes.object_group_id,l=r.attributes.object_group_title===null?F.t("firefly.default_group_title_name_plain"):r.attributes.object_group_title,u=r.attributes.object_group_order===null?0:r.attributes.object_group_order;w.hasOwnProperty(i)||(w[i]={id:i,title:l,order:u,payment_info:{},bills:[]});let d={id:r.id,name:r.attributes.name,amount_min:r.attributes.amount_min,amount_max:r.attributes.amount_max,amount:(parseFloat(r.attributes.amount_max)+parseFloat(r.attributes.amount_min))/2,currency_code:r.attributes.currency_code,native_amount_min:r.attributes.native_amount_min,native_amount_max:r.attributes.native_amount_max,native_amount:(parseFloat(r.attributes.native_amount_max)+parseFloat(r.attributes.native_amount_min))/2,native_currency_code:r.attributes.native_currency_code,transactions:[],pay_dates:r.attributes.pay_dates,paid:r.attributes.paid_dates.length>0};d.expected_amount=e.autoConversion?g(d.native_amount,d.native_currency_code):g(d.amount,d.currency_code),d.expected_times=F.t("firefly.subscr_expected_x_times",{times:r.attributes.pay_dates.length,amount:d.expected_amount});for(let h in r.attributes.paid_dates)if(r.attributes.paid_dates.hasOwnProperty(h)){const c=r.attributes.paid_dates[h];let p=100;e.autoConversion&&(p=Math.round(-100+parseFloat(c.native_amount)*-1/parseFloat(d.native_amount)*100)),e.autoConversion||(p=Math.round(-100+parseFloat(c.amount)*-1/parseFloat(d.amount)*100));let v={amount:e.autoConversion?g(c.native_amount,c.native_currency_code):g(c.amount,c.currency_code),percentage:p,date:f(new Date(c.date),"PP"),foreign_amount:null};c.foreign_currency_code!==null&&(v.foreign_amount=e.autoConversion?c.foreign_native_amount:c.foreign_amount,v.foreign_currency_code=e.autoConversion?c.native_currency_code:c.foreign_currency_code),d.transactions.push(v)}if(w[i].bills.push(d),r.attributes.paid_dates.length===0){const h=r.attributes.pay_dates.length*d.amount,c=r.attributes.pay_dates.length*d.native_amount;w[i].payment_info.hasOwnProperty(d.currency_code)||(w[i].payment_info[d.currency_code]={currency_code:d.currency_code,paid:0,unpaid:0,native_currency_code:d.native_currency_code,native_paid:0,native_unpaid:0}),w[i].payment_info[d.currency_code].unpaid+=h,w[i].payment_info[d.currency_code].native_unpaid+=c}if(r.attributes.paid_dates.length>0){for(let h in r.attributes.paid_dates)if(r.attributes.paid_dates.hasOwnProperty(h)){let c=r.attributes.paid_dates[h];w[i].payment_info.hasOwnProperty(c.currency_code)||(w[i].payment_info[c.currency_code]={currency_code:d.currency_code,paid:0,unpaid:0,native_currency_code:d.native_currency_code,native_paid:0,native_unpaid:0});const p=parseFloat(c.amount)*-1,v=parseFloat(c.native_amount)*-1;w[i].payment_info[c.currency_code].paid+=p,w[i].payment_info[c.currency_code].native_paid+=v}}}}return parseInt(n.data.meta.pagination.total_pages)>e.page?(e.page++,wt(e)):Promise.resolve()})}const oe=()=>({loading:!1,autoConversion:!1,subscriptions:[],startSubscriptions(){this.loading=!0;let e=new Date(window.store.get("start")),t=new Date(window.store.get("end"));const n=window.store.get("cacheValid");let a=window.store.get(D("subscriptions-data-dashboard",e,t));n&&typeof a<"u",w={},this.subscriptions=[],console.log("cache is invalid, must download");let o={start:f(e,"y-MM-dd"),end:f(t,"y-MM-dd"),autoConversion:this.autoConversion,page:1};wt(o).then(()=>{console.log("Done with download!");let r=Object.values(w);for(let i in r)if(r.hasOwnProperty(i)){let l=r[i];const u=Object.keys(l.payment_info);l.col_size=u.length===1?"col-6 offset-3":"col-6",l.chart_width=u.length===1?"50%":"100%",l.payment_length=u.length,this.subscriptions.push(l)}this.loading=!1})},drawPieChart(e,t,n){let a="#pie_"+e+"_"+n.currency_code;const o=this.autoConversion?n.native_unpaid:n.unpaid,r=this.autoConversion?n.native_paid:n.paid,i=this.autoConversion?n.native_currency_code:n.currency_code,u={type:"doughnut",data:{labels:[F.t("firefly.paid"),F.t("firefly.unpaid")],datasets:[{label:F.t("firefly.subscriptions_in_group",{title:t}),data:[r,o],backgroundColor:["rgb(54, 162, 235)","rgb(255, 99, 132)"],hoverOffset:4}]},options:{plugins:{tooltip:{callbacks:{label:function(h){return h.dataset.label+": "+g(h.raw,i)}}}}}};var d=A.getChart(document.querySelector(a));typeof d<"u"&&d.destroy(),new A(document.querySelector(a),u)},init(){console.log("subscriptions init"),Promise.all([y("autoConversion",!1),y("language","en_US")]).then(e=>{console.log("subscriptions after promises"),this.autoConversion=e[0],rt=!0,F=new H;const t=e[1].replace("-","_");F.locale=t,z(F,t).then(()=>{this.loading===!1&&this.startSubscriptions()})}),window.store.observe("end",()=>{rt&&(console.log("subscriptions observe end"),this.loading===!1&&this.startSubscriptions())}),window.store.observe("autoConversion",e=>{rt&&(console.log("subscriptions observe autoConversion"),this.autoConversion=e,this.loading===!1&&this.startSubscriptions())})}});let O={},it=!1,N;const bt="dashboard-piggies-data",re=()=>({loading:!1,autoConversion:!1,sankeyGrouping:"account",piggies:[],getFreshData(){const e=new Date(window.store.get("start")),t=new Date(window.store.get("end")),n=D(bt,e,t),a=window.store.get("cacheValid");let o=window.store.get(n);if(a&&typeof o<"u"){O=o,this.parsePiggies(),this.loading=!1;return}let r={start:f(e,"y-MM-dd"),end:f(t,"y-MM-dd"),page:1};this.downloadPiggyBanks(r)},downloadPiggyBanks(e){const t=new Date(window.store.get("start")),n=new Date(window.store.get("end")),a=D(bt,t,n);new Dt().list(e).then(r=>{if(O=[...O,...r.data.data],parseInt(r.data.meta.pagination.total_pages)>e.page){e.page++,this.downloadPiggyBanks(e);return}window.store.set(a,O),this.parsePiggies(),this.loading=!1})},parsePiggies(){let e=[];for(let t in O)if(O.hasOwnProperty(t)){let n=O[t];if(n.attributes.percentage>=100||n.attributes.percentage===0)continue;let a=n.object_group_title??N.t("firefly.default_group_title_name_plain");e.hasOwnProperty(a)||(e[a]={id:n.object_group_id??0,title:a,order:n.object_group_order??0,piggies:[]});let o={id:n.id,name:n.attributes.name,percentage:parseInt(n.attributes.percentage),amount:this.autoConversion?n.attributes.native_current_amount:n.attributes.current_amount,left_to_save:this.autoConversion?n.attributes.native_left_to_save:n.attributes.left_to_save,target_amount:this.autoConversion?n.attributes.native_target_amount:n.attributes.target_amount,save_per_month:this.autoConversion?n.attributes.native_save_per_month:n.attributes.save_per_month,currency_code:this.autoConversion?n.attributes.native_currency_code:n.attributes.currency_code};e[a].piggies.push(o)}this.piggies=Object.values(e)},loadPiggyBanks(){if(this.loading!==!0){if(this.loading=!0,this.piggies.length!==0){this.parsePiggies(),this.loading=!1;return}this.getFreshData()}},init(){O=[],Promise.all([y("autoConversion",!1),y("language","en_US")]).then(e=>{N=new H;const t=e[1].replace("-","_");N.locale=t,z(N,t).then(()=>{it=!0,this.autoConversion=e[0],this.loadPiggyBanks()})}),window.store.observe("end",()=>{it&&(O=[],this.loadPiggyBanks())}),window.store.observe("autoConversion",e=>{it&&(this.autoConversion=e,this.loadPiggyBanks())})}});A.register({LineController:St,LineElement:Ft,ArcElement:At,BarController:Bt,TimeScale:$t,PieController:jt,BarElement:It,Filler:Wt,Colors:Vt,LinearScale:Kt,CategoryScale:Et,PointElement:Lt,Tooltip:Gt,Legend:Tt});const vt={dates:xt,boxes:Ut,accounts:Zt,budgets:Xt,categories:ee,sankey:ne,subscriptions:oe,piggies:re};function mt(e){Object.keys(e).forEach(t=>{console.log(`Loading page component "${t}"`);let n=e[t]();Alpine.data(t,()=>n)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{mt(vt)});window.bootstrapped&&mt(vt); diff --git a/public/build/assets/edit-83707812.js b/public/build/assets/edit-83707812.js new file mode 100644 index 0000000000..f05edc5eab --- /dev/null +++ b/public/build/assets/edit-83707812.js @@ -0,0 +1 @@ +import{d as l,g as i,l as r}from"./load-translations-23553922.js";import{I as s}from"./vendor-e194ad60.js";let t,d=function(){return{entries:[],init(){Promise.all([i("language","en_US")]).then(e=>{t=new s;const o=e[0].replace("-","_");t.locale=o,r(t,o).then(()=>{})})}}},a={transactions:d,dates:l};function n(){Object.keys(a).forEach(e=>{console.log(`Loading page component "${e}"`);let o=a[e]();Alpine.data(e,()=>o)}),Alpine.start()}document.addEventListener("firefly-iii-bootstrapped",()=>{console.log("Loaded through event listener."),n()});window.bootstrapped&&(console.log("Loaded through window variable."),n()); diff --git a/public/build/assets/get-10f2a251.js b/public/build/assets/get-10f2a251.js deleted file mode 100644 index bf5a2e6a00..0000000000 --- a/public/build/assets/get-10f2a251.js +++ /dev/null @@ -1 +0,0 @@ -import{n as y,s as l,o as d,q as f,r as A,t as w,u as b,v as _,w as N,x as D,y as c,z as i,D as C,E as P,f as B,G as x,H as O,J as E,K as S,M as G,N as T,O as U,Q as W,R as I,U as $,V as q,W as L,X as Q,Y as V,Z as Y,_ as j,$ as z,a0 as X,a1 as F,a2 as H,a3 as J,a4 as K,a5 as Z,a6 as tt,a7 as et,a8 as at,a9 as st,aa as nt,ab as rt,ac as dt,ad as lt,ae as it,af as ot,ag as ut}from"./vendor-5ec3da0f.js";const v="/",o=y.create({baseURL:v,withCredentials:!0});y.defaults.withCredentials=!0;y.defaults.baseURL=v;class R{getByName(t){return o.get("/api/v1/preferences/"+t)}getByNameNow(t){return o.get("/api/v1/preferences/"+t)}postByName(t,a){return o.post("/api/v1/preferences",{name:t,data:a})}}class k{post(t,a){let s="/api/v1/preferences";return o.post(s,{name:t,data:a})}}function gt(e,t=null){return new R().getByName(e).then(s=>Promise.resolve(m(e,s))).catch(()=>{new k().post(e,t).then(u=>Promise.resolve(m(e,u)))})}function m(e,t){return t.data.data.attributes.data}function h(e,t=null){const a=window.store.get("cacheValid");if(a&&window.hasOwnProperty(e))return Promise.resolve(window[e]);const s=window.store.get(e);return a&&typeof s<"u"?Promise.resolve(s):new R().getByName(e).then(g=>Promise.resolve(M(e,g))).catch(()=>{new k().post(e,t).then(n=>Promise.resolve(M(e,n)))})}function M(e,t){let a=t.data.data.attributes.data;return window.store.set(e,a),a}function ct(e,t){let a,s;switch(e){case"last365":a=l(c(t,365)),s=d(t);break;case"last90":a=l(c(t,90)),s=d(t);break;case"last30":a=l(c(t,30)),s=d(t);break;case"last7":a=l(c(t,7)),s=d(t);break;case"YTD":a=D(t),s=d(t);break;case"QTD":a=f(t),s=d(t);break;case"MTD":a=w(t),s=d(t);break;case"1D":a=l(t),s=d(t);break;case"1W":a=l(_(t,{weekStartsOn:1})),s=d(N(t,{weekStartsOn:1}));break;case"1M":a=l(w(t)),s=d(b(t));break;case"3M":a=l(f(t)),s=d(A(t));break;case"6M":t.getMonth()<=5&&(a=new Date(t),a.setMonth(0),a.setDate(1),a=l(a),s=new Date(t),s.setMonth(5),s.setDate(30),s=d(a)),t.getMonth()>5&&(a=new Date(t),a.setMonth(6),a.setDate(1),a=l(a),s=new Date(t),s.setMonth(11),s.setDate(31),s=d(a));break;case"1Y":a=new Date(t),a.setMonth(0),a.setDate(1),a=l(a),s=new Date(t),s.setMonth(11),s.setDate(31),s=d(s);break}return{start:a,end:s}}i.addPlugin(C);window.bootstrapped=!1;window.store=i;gt("lastActivity").then(e=>{const t=i.get("lastActivity");i.set("cacheValid",t===e),i.set("lastActivity",e),console.log("Server value: "+e),console.log("Local value: "+t),console.log("Cache valid: "+(t===e))}).then(()=>{Promise.all([h("viewRange"),h("darkMode"),h("locale"),h("language")]).then(e=>{if(!i.get("start")||!i.get("end")){const a=ct(e[0],new Date);i.set("start",a.start),i.set("end",a.end)}window.__localeId__=e[2],i.set("language",e[3]),i.set("locale",e[3]);const t=new Event("firefly-iii-bootstrapped");document.dispatchEvent(t),window.bootstrapped=!0})});window.axios=y;window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest";window.Alpine=P;const p={bg:x,cs:O,da:E,de:S,el:G,enGB:T,enUS:U,es:W,ca:I,fi:$,fr:q,hu:L,id:Q,it:V,ja:Y,ko:j,nb:z,nn:X,nl:F,pl:H,ptBR:J,pt:K,ro:Z,ru:tt,sk:et,sl:at,sv:st,tr:nt,uk:rt,vi:dt,zhTW:lt,zhCN:it};function r(e,t="PP"){let a=window.__localeId__.replace("_","");return B(e,t,{locale:p[a]??p[a.slice(0,2)]??p.enUS})}const ht=()=>({range:{start:null,end:null},defaultRange:{start:null,end:null},language:"en_US",init(){this.range={start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))},this.defaultRange={start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))},this.language=window.store.get("language"),this.locale=window.store.get("locale"),this.locale=this.locale==="equal"?this.language:this.locale,window.__localeId__=this.language,this.buildDateRange(),window.store.observe("start",e=>{this.range.start=new Date(e)}),window.store.observe("end",e=>{this.range.end=new Date(e),this.buildDateRange()})},buildDateRange(){let e=this.getNextRange(),t=this.getPrevRange(),a=this.lastDays(7),s=this.lastDays(30),u=this.mtd(),g=this.ytd(),n=document.getElementsByClassName("daterange-holder")[0];n.textContent=r(this.range.start)+" - "+r(this.range.end),n.setAttribute("data-start",r(this.range.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(this.range.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-current")[0],n.textContent=r(this.defaultRange.start)+" - "+r(this.defaultRange.end),n.setAttribute("data-start",r(this.defaultRange.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(this.defaultRange.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-next")[0],n.textContent=r(e.start)+" - "+r(e.end),n.setAttribute("data-start",r(e.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(e.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-prev")[0],n.textContent=r(t.start)+" - "+r(t.end),n.setAttribute("data-start",r(t.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(t.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-7d")[0],n.setAttribute("data-start",r(a.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(a.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-90d")[0],n.setAttribute("data-start",r(s.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(s.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-mtd")[0],n.setAttribute("data-start",r(u.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(u.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-ytd")[0],n.setAttribute("data-start",r(g.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(g.end,"yyyy-MM-dd"))},getNextRange(){let e=w(this.range.start),t=ot(e,1),a=b(t);return{start:t,end:a}},getPrevRange(){let e=w(this.range.start),t=ut(e,1),a=b(t);return{start:t,end:a}},ytd(){let e=new Date;return{start:D(this.range.start),end:e}},mtd(){let e=new Date;return{start:w(this.range.start),end:e}},lastDays(e){let t=new Date;return{start:c(t,e),end:t}},changeDateRange(e){e.preventDefault();let t=e.currentTarget,a=new Date(t.getAttribute("data-start")),s=new Date(t.getAttribute("data-end"));return window.store.set("start",a),window.store.set("end",s),!1}});function yt(e,t){let a=window.__localeId__.replace("_","-");return Intl.NumberFormat(a,{style:"currency",currency:t}).format(e)}async function pt(e,t){{t=t.replace("-","_");const s=await(await fetch(`./v2/i18n/${t}.json`)).json();e.store(s)}}let bt=class{list(t){return o.get("/api/v2/subscriptions",{params:t})}paid(t){return o.get("/api/v2/subscriptions/sum/paid",{params:t})}unpaid(t){return o.get("/api/v2/subscriptions/sum/unpaid",{params:t})}};class mt{list(t){return o.get("/api/v2/piggy-banks",{params:t})}}export{bt as G,k as P,o as a,mt as b,ht as d,yt as f,h as g,pt as l}; diff --git a/public/build/assets/get-748a816c.js b/public/build/assets/get-748a816c.js new file mode 100644 index 0000000000..70975bcf9c --- /dev/null +++ b/public/build/assets/get-748a816c.js @@ -0,0 +1 @@ +import{a as r}from"./load-translations-23553922.js";function i(s,a){let t=window.__localeId__.replace("_","-");return Intl.NumberFormat(t,{style:"currency",currency:a}).format(s)}let p=class{list(a){return r.get("/api/v2/subscriptions",{params:a})}paid(a){return r.get("/api/v2/subscriptions/sum/paid",{params:a})}unpaid(a){return r.get("/api/v2/subscriptions/sum/unpaid",{params:a})}};class u{list(a){return r.get("/api/v2/piggy-banks",{params:a})}}export{p as G,u as a,i as f}; diff --git a/public/build/assets/load-translations-23553922.js b/public/build/assets/load-translations-23553922.js new file mode 100644 index 0000000000..5170a6cf8b --- /dev/null +++ b/public/build/assets/load-translations-23553922.js @@ -0,0 +1 @@ +import{m as y,s as l,n as d,o as b,q as k,r as c,t as f,u as N,v as C,w as D,x as g,y as i,z as P,D as _,f as B,E as x,G as O,H as E,J as S,K as T,M as U,N as W,O as q,Q as L,R as Q,U as V,V as Y,W as $,X as j,Y as z,Z as I,_ as X,$ as G,a0 as H,a1 as F,a2 as J,a3 as K,a4 as Z,a5 as tt,a6 as et,a7 as at,a8 as st,a9 as nt,aa as rt,ab as dt,ac as lt,ad as it,ae as ot,af as ut}from"./vendor-e194ad60.js";const v="/",h=y.create({baseURL:v,withCredentials:!0});y.defaults.withCredentials=!0;y.defaults.baseURL=v;class R{getByName(t){return h.get("/api/v1/preferences/"+t)}getByNameNow(t){return h.get("/api/v1/preferences/"+t)}postByName(t,e){return h.post("/api/v1/preferences",{name:t,data:e})}}class A{post(t,e){let s="/api/v1/preferences";return h.post(s,{name:t,data:e})}}function gt(a,t=null){return new R().getByName(a).then(s=>Promise.resolve(p(a,s))).catch(()=>{new A().post(a,t).then(o=>Promise.resolve(p(a,o)))})}function p(a,t){return t.data.data.attributes.data}function w(a,t=null){const e=window.store.get("cacheValid");if(e&&window.hasOwnProperty(a))return Promise.resolve(window[a]);const s=window.store.get(a);return e&&typeof s<"u"?Promise.resolve(s):new R().getByName(a).then(u=>Promise.resolve(m(a,u))).catch(()=>{new A().post(a,t).then(n=>Promise.resolve(m(a,n)))})}function m(a,t){let e=t.data.data.attributes.data;return window.store.set(a,e),e}function ct(a,t){let e,s;switch(a){case"last365":e=l(g(t,365)),s=d(t);break;case"last90":e=l(g(t,90)),s=d(t);break;case"last30":e=l(g(t,30)),s=d(t);break;case"last7":e=l(g(t,7)),s=d(t);break;case"YTD":e=D(t),s=d(t);break;case"QTD":e=b(t),s=d(t);break;case"MTD":e=c(t),s=d(t);break;case"1D":e=l(t),s=d(t);break;case"1W":e=l(N(t,{weekStartsOn:1})),s=d(C(t,{weekStartsOn:1}));break;case"1M":e=l(c(t)),s=d(f(t));break;case"3M":e=l(b(t)),s=d(k(t));break;case"6M":t.getMonth()<=5&&(e=new Date(t),e.setMonth(0),e.setDate(1),e=l(e),s=new Date(t),s.setMonth(5),s.setDate(30),s=d(e)),t.getMonth()>5&&(e=new Date(t),e.setMonth(6),e.setDate(1),e=l(e),s=new Date(t),s.setMonth(11),s.setDate(31),s=d(e));break;case"1Y":e=new Date(t),e.setMonth(0),e.setDate(1),e=l(e),s=new Date(t),s.setMonth(11),s.setDate(31),s=d(s);break}return{start:e,end:s}}i.addPlugin(P);window.bootstrapped=!1;window.store=i;gt("lastActivity").then(a=>{const t=i.get("lastActivity");i.set("cacheValid",t===a),i.set("lastActivity",a),console.log("Server value: "+a),console.log("Local value: "+t),console.log("Cache valid: "+(t===a))}).then(()=>{Promise.all([w("viewRange"),w("darkMode"),w("locale"),w("language")]).then(a=>{if(!i.get("start")||!i.get("end")){const e=ct(a[0],new Date);i.set("start",e.start),i.set("end",e.end)}window.__localeId__=a[2],i.set("language",a[3]),i.set("locale",a[3]);const t=new Event("firefly-iii-bootstrapped");document.dispatchEvent(t),window.bootstrapped=!0})});window.axios=y;window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest";window.Alpine=_;const M={bg:x,cs:O,da:E,de:S,el:T,enGB:U,enUS:W,es:q,ca:L,fi:Q,fr:V,hu:Y,id:$,it:j,ja:z,ko:I,nb:X,nn:G,nl:H,pl:F,ptBR:J,pt:K,ro:Z,ru:tt,sk:et,sl:at,sv:st,tr:nt,uk:rt,vi:dt,zhTW:lt,zhCN:it};function r(a,t="PP"){let e=window.__localeId__.replace("_","");return B(a,t,{locale:M[e]??M[e.slice(0,2)]??M.enUS})}const ht=()=>({range:{start:null,end:null},defaultRange:{start:null,end:null},language:"en_US",init(){this.range={start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))},this.defaultRange={start:new Date(window.store.get("start")),end:new Date(window.store.get("end"))},this.language=window.store.get("language"),this.locale=window.store.get("locale"),this.locale=this.locale==="equal"?this.language:this.locale,window.__localeId__=this.language,this.buildDateRange(),window.store.observe("start",a=>{this.range.start=new Date(a)}),window.store.observe("end",a=>{this.range.end=new Date(a),this.buildDateRange()})},buildDateRange(){let a=this.getNextRange(),t=this.getPrevRange(),e=this.lastDays(7),s=this.lastDays(30),o=this.mtd(),u=this.ytd(),n=document.getElementsByClassName("daterange-holder")[0];n.textContent=r(this.range.start)+" - "+r(this.range.end),n.setAttribute("data-start",r(this.range.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(this.range.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-current")[0],n.textContent=r(this.defaultRange.start)+" - "+r(this.defaultRange.end),n.setAttribute("data-start",r(this.defaultRange.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(this.defaultRange.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-next")[0],n.textContent=r(a.start)+" - "+r(a.end),n.setAttribute("data-start",r(a.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(a.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-prev")[0],n.textContent=r(t.start)+" - "+r(t.end),n.setAttribute("data-start",r(t.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(t.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-7d")[0],n.setAttribute("data-start",r(e.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(e.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-90d")[0],n.setAttribute("data-start",r(s.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(s.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-mtd")[0],n.setAttribute("data-start",r(o.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(o.end,"yyyy-MM-dd")),n=document.getElementsByClassName("daterange-ytd")[0],n.setAttribute("data-start",r(u.start,"yyyy-MM-dd")),n.setAttribute("data-end",r(u.end,"yyyy-MM-dd"))},getNextRange(){let a=c(this.range.start),t=ot(a,1),e=f(t);return{start:t,end:e}},getPrevRange(){let a=c(this.range.start),t=ut(a,1),e=f(t);return{start:t,end:e}},ytd(){let a=new Date;return{start:D(this.range.start),end:a}},mtd(){let a=new Date;return{start:c(this.range.start),end:a}},lastDays(a){let t=new Date;return{start:g(t,a),end:t}},changeDateRange(a){a.preventDefault();let t=a.currentTarget,e=new Date(t.getAttribute("data-start")),s=new Date(t.getAttribute("data-end"));return window.store.set("start",e),window.store.set("end",s),!1}});async function yt(a,t){{t=t.replace("-","_");const s=await(await fetch(`./v2/i18n/${t}.json`)).json();a.store(s)}}export{A as P,h as a,ht as d,w as g,yt as l}; diff --git a/public/build/assets/vendor-5ec3da0f.js b/public/build/assets/vendor-e194ad60.js similarity index 81% rename from public/build/assets/vendor-5ec3da0f.js rename to public/build/assets/vendor-e194ad60.js index 744c0454fe..d459cd3e55 100644 --- a/public/build/assets/vendor-5ec3da0f.js +++ b/public/build/assets/vendor-e194ad60.js @@ -1,52 +1,52 @@ -var ra=Object.defineProperty;var aa=(e,t,n)=>t in e?ra(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Y=(e,t,n)=>(aa(e,typeof t!="symbol"?t+"":t,n),n);function bind$4(e,t){return function(){return e.apply(t,arguments)}}const{toString:toString$7}=Object.prototype,{getPrototypeOf}=Object,kindOf=(e=>t=>{const n=toString$7.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),kindOfTest=e=>(e=e.toLowerCase(),t=>kindOf(t)===e),typeOfTest=e=>t=>typeof t===e,{isArray:isArray$d}=Array,isUndefined=typeOfTest("undefined");function isBuffer$3(e){return e!==null&&!isUndefined(e)&&e.constructor!==null&&!isUndefined(e.constructor)&&isFunction$6(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const isArrayBuffer=kindOfTest("ArrayBuffer");function isArrayBufferView(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&isArrayBuffer(e.buffer),t}const isString$1=typeOfTest("string"),isFunction$6=typeOfTest("function"),isNumber$1=typeOfTest("number"),isObject$c=e=>e!==null&&typeof e=="object",isBoolean=e=>e===!0||e===!1,isPlainObject=e=>{if(kindOf(e)!=="object")return!1;const t=getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},isDate$1=kindOfTest("Date"),isFile=kindOfTest("File"),isBlob=kindOfTest("Blob"),isFileList=kindOfTest("FileList"),isStream=e=>isObject$c(e)&&isFunction$6(e.pipe),isFormData=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||isFunction$6(e.append)&&((t=kindOf(e))==="formdata"||t==="object"&&isFunction$6(e.toString)&&e.toString()==="[object FormData]"))},isURLSearchParams=kindOfTest("URLSearchParams"),trim$2=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function forEach(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let i,r;if(typeof e!="object"&&(e=[e]),isArray$d(e))for(i=0,r=e.length;i0;)if(r=n[i],t===r.toLowerCase())return r;return null}const _global=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),isContextDefined=e=>!isUndefined(e)&&e!==_global;function merge$1(){const{caseless:e}=isContextDefined(this)&&this||{},t={},n=(i,r)=>{const a=e&&findKey$1(t,r)||r;isPlainObject(t[a])&&isPlainObject(i)?t[a]=merge$1(t[a],i):isPlainObject(i)?t[a]=merge$1({},i):isArray$d(i)?t[a]=i.slice():t[a]=i};for(let i=0,r=arguments.length;i(forEach(t,(r,a)=>{n&&isFunction$6(r)?e[a]=bind$4(r,n):e[a]=r},{allOwnKeys:i}),e),stripBOM=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),inherits=(e,t,n,i)=>{e.prototype=Object.create(t.prototype,i),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject=(e,t,n,i)=>{let r,a,o;const l={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),a=r.length;a-- >0;)o=r[a],(!i||i(o,e,t))&&!l[o]&&(t[o]=e[o],l[o]=!0);e=n!==!1&&getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},endsWith=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const i=e.indexOf(t,n);return i!==-1&&i===n},toArray=e=>{if(!e)return null;if(isArray$d(e))return e;let t=e.length;if(!isNumber$1(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},isTypedArray$3=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&getPrototypeOf(Uint8Array)),forEachEntry=(e,t)=>{const i=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=i.next())&&!r.done;){const a=r.value;t.call(e,a[0],a[1])}},matchAll=(e,t)=>{let n;const i=[];for(;(n=e.exec(t))!==null;)i.push(n);return i},isHTMLForm=kindOfTest("HTMLFormElement"),toCamelCase=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,i,r){return i.toUpperCase()+r}),hasOwnProperty$c=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),isRegExp=kindOfTest("RegExp"),reduceDescriptors=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),i={};forEach(n,(r,a)=>{let o;(o=t(r,a,e))!==!1&&(i[a]=o||r)}),Object.defineProperties(e,i)},freezeMethods=e=>{reduceDescriptors(e,(t,n)=>{if(isFunction$6(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const i=e[n];if(isFunction$6(i)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},toObjectSet=(e,t)=>{const n={},i=r=>{r.forEach(a=>{n[a]=!0})};return isArray$d(e)?i(e):i(String(e).split(t)),n},noop$4=()=>{},toFiniteNumber=(e,t)=>(e=+e,Number.isFinite(e)?e:t),ALPHA="abcdefghijklmnopqrstuvwxyz",DIGIT="0123456789",ALPHABET={DIGIT,ALPHA,ALPHA_DIGIT:ALPHA+ALPHA.toUpperCase()+DIGIT},generateString=(e=16,t=ALPHABET.ALPHA_DIGIT)=>{let n="";const{length:i}=t;for(;e--;)n+=t[Math.random()*i|0];return n};function isSpecCompliantForm(e){return!!(e&&isFunction$6(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const toJSONObject=e=>{const t=new Array(10),n=(i,r)=>{if(isObject$c(i)){if(t.indexOf(i)>=0)return;if(!("toJSON"in i)){t[r]=i;const a=isArray$d(i)?[]:{};return forEach(i,(o,l)=>{const u=n(o,r+1);!isUndefined(u)&&(a[l]=u)}),t[r]=void 0,a}}return i};return n(e,0)},isAsyncFn=kindOfTest("AsyncFunction"),isThenable=e=>e&&(isObject$c(e)||isFunction$6(e))&&isFunction$6(e.then)&&isFunction$6(e.catch),utils$1={isArray:isArray$d,isArrayBuffer,isBuffer:isBuffer$3,isFormData,isArrayBufferView,isString:isString$1,isNumber:isNumber$1,isBoolean,isObject:isObject$c,isPlainObject,isUndefined,isDate:isDate$1,isFile,isBlob,isRegExp,isFunction:isFunction$6,isStream,isURLSearchParams,isTypedArray:isTypedArray$3,isFileList,forEach,merge:merge$1,extend,trim:trim$2,stripBOM,inherits,toFlatObject,kindOf,kindOfTest,endsWith,toArray,forEachEntry,matchAll,isHTMLForm,hasOwnProperty:hasOwnProperty$c,hasOwnProp:hasOwnProperty$c,reduceDescriptors,freezeMethods,toObjectSet,toCamelCase,noop:noop$4,toFiniteNumber,findKey:findKey$1,global:_global,isContextDefined,ALPHABET,generateString,isSpecCompliantForm,toJSONObject,isAsyncFn,isThenable};function AxiosError(e,t,n,i,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),i&&(this.request=i),r&&(this.response=r)}utils$1.inherits(AxiosError,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:utils$1.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const prototype$1=AxiosError.prototype,descriptors$1={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{descriptors$1[e]={value:e}});Object.defineProperties(AxiosError,descriptors$1);Object.defineProperty(prototype$1,"isAxiosError",{value:!0});AxiosError.from=(e,t,n,i,r,a)=>{const o=Object.create(prototype$1);return utils$1.toFlatObject(e,o,function(u){return u!==Error.prototype},l=>l!=="isAxiosError"),AxiosError.call(o,e.message,t,n,i,r),o.cause=e,o.name=e.name,a&&Object.assign(o,a),o};const httpAdapter=null;function isVisitable(e){return utils$1.isPlainObject(e)||utils$1.isArray(e)}function removeBrackets(e){return utils$1.endsWith(e,"[]")?e.slice(0,-2):e}function renderKey(e,t,n){return e?e.concat(t).map(function(r,a){return r=removeBrackets(r),!n&&a?"["+r+"]":r}).join(n?".":""):t}function isFlatArray(e){return utils$1.isArray(e)&&!e.some(isVisitable)}const predicates=utils$1.toFlatObject(utils$1,{},null,function(t){return/^is[A-Z]/.test(t)});function toFormData(e,t,n){if(!utils$1.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=utils$1.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(E,x){return!utils$1.isUndefined(x[E])});const i=n.metaTokens,r=n.visitor||m,a=n.dots,o=n.indexes,u=(n.Blob||typeof Blob<"u"&&Blob)&&utils$1.isSpecCompliantForm(t);if(!utils$1.isFunction(r))throw new TypeError("visitor must be a function");function d(w){if(w===null)return"";if(utils$1.isDate(w))return w.toISOString();if(!u&&utils$1.isBlob(w))throw new AxiosError("Blob is not supported. Use a Buffer instead.");return utils$1.isArrayBuffer(w)||utils$1.isTypedArray(w)?u&&typeof Blob=="function"?new Blob([w]):Buffer.from(w):w}function m(w,E,x){let M=w;if(w&&!x&&typeof w=="object"){if(utils$1.endsWith(E,"{}"))E=i?E:E.slice(0,-2),w=JSON.stringify(w);else if(utils$1.isArray(w)&&isFlatArray(w)||(utils$1.isFileList(w)||utils$1.endsWith(E,"[]"))&&(M=utils$1.toArray(w)))return E=removeBrackets(E),M.forEach(function(R,W){!(utils$1.isUndefined(R)||R===null)&&t.append(o===!0?renderKey([E],W,a):o===null?E:E+"[]",d(R))}),!1}return isVisitable(w)?!0:(t.append(renderKey(x,E,a),d(w)),!1)}const g=[],_=Object.assign(predicates,{defaultVisitor:m,convertValue:d,isVisitable});function v(w,E){if(!utils$1.isUndefined(w)){if(g.indexOf(w)!==-1)throw Error("Circular reference detected in "+E.join("."));g.push(w),utils$1.forEach(w,function(M,S){(!(utils$1.isUndefined(M)||M===null)&&r.call(t,M,utils$1.isString(S)?S.trim():S,E,_))===!0&&v(M,E?E.concat(S):[S])}),g.pop()}}if(!utils$1.isObject(e))throw new TypeError("data must be an object");return v(e),t}function encode$1(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(i){return t[i]})}function AxiosURLSearchParams(e,t){this._pairs=[],e&&toFormData(e,this,t)}const prototype=AxiosURLSearchParams.prototype;prototype.append=function(t,n){this._pairs.push([t,n])};prototype.toString=function(t){const n=t?function(i){return t.call(this,i,encode$1)}:encode$1;return this._pairs.map(function(r){return n(r[0])+"="+n(r[1])},"").join("&")};function encode(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function buildURL(e,t,n){if(!t)return e;const i=n&&n.encode||encode,r=n&&n.serialize;let a;if(r?a=r(t,n):a=utils$1.isURLSearchParams(t)?t.toString():new AxiosURLSearchParams(t,n).toString(i),a){const o=e.indexOf("#");o!==-1&&(e=e.slice(0,o)),e+=(e.indexOf("?")===-1?"?":"&")+a}return e}class InterceptorManager{constructor(){this.handlers=[]}use(t,n,i){return this.handlers.push({fulfilled:t,rejected:n,synchronous:i?i.synchronous:!1,runWhen:i?i.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){utils$1.forEach(this.handlers,function(i){i!==null&&t(i)})}}const InterceptorManager$1=InterceptorManager,transitionalDefaults={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},URLSearchParams$1=typeof URLSearchParams<"u"?URLSearchParams:AxiosURLSearchParams,FormData$1=typeof FormData<"u"?FormData:null,Blob$1=typeof Blob<"u"?Blob:null,platform$1={isBrowser:!0,classes:{URLSearchParams:URLSearchParams$1,FormData:FormData$1,Blob:Blob$1},protocols:["http","https","file","blob","url","data"]},hasBrowserEnv=typeof window<"u"&&typeof document<"u",hasStandardBrowserEnv=(e=>hasBrowserEnv&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),hasStandardBrowserWebWorkerEnv=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),utils=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv,hasStandardBrowserEnv,hasStandardBrowserWebWorkerEnv},Symbol.toStringTag,{value:"Module"})),platform={...utils,...platform$1};function toURLEncodedForm(e,t){return toFormData(e,new platform.classes.URLSearchParams,Object.assign({visitor:function(n,i,r,a){return platform.isNode&&utils$1.isBuffer(n)?(this.append(i,n.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)}},t))}function parsePropPath(e){return utils$1.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function arrayToObject(e){const t={},n=Object.keys(e);let i;const r=n.length;let a;for(i=0;i=n.length;return o=!o&&utils$1.isArray(r)?r.length:o,u?(utils$1.hasOwnProp(r,o)?r[o]=[r[o],i]:r[o]=i,!l):((!r[o]||!utils$1.isObject(r[o]))&&(r[o]=[]),t(n,i,r[o],a)&&utils$1.isArray(r[o])&&(r[o]=arrayToObject(r[o])),!l)}if(utils$1.isFormData(e)&&utils$1.isFunction(e.entries)){const n={};return utils$1.forEachEntry(e,(i,r)=>{t(parsePropPath(i),r,n,0)}),n}return null}function stringifySafely(e,t,n){if(utils$1.isString(e))try{return(t||JSON.parse)(e),utils$1.trim(e)}catch(i){if(i.name!=="SyntaxError")throw i}return(n||JSON.stringify)(e)}const defaults$1={transitional:transitionalDefaults,adapter:["xhr","http"],transformRequest:[function(t,n){const i=n.getContentType()||"",r=i.indexOf("application/json")>-1,a=utils$1.isObject(t);if(a&&utils$1.isHTMLForm(t)&&(t=new FormData(t)),utils$1.isFormData(t))return r&&r?JSON.stringify(formDataToJSON(t)):t;if(utils$1.isArrayBuffer(t)||utils$1.isBuffer(t)||utils$1.isStream(t)||utils$1.isFile(t)||utils$1.isBlob(t))return t;if(utils$1.isArrayBufferView(t))return t.buffer;if(utils$1.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(a){if(i.indexOf("application/x-www-form-urlencoded")>-1)return toURLEncodedForm(t,this.formSerializer).toString();if((l=utils$1.isFileList(t))||i.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return toFormData(l?{"files[]":t}:t,u&&new u,this.formSerializer)}}return a||r?(n.setContentType("application/json",!1),stringifySafely(t)):t}],transformResponse:[function(t){const n=this.transitional||defaults$1.transitional,i=n&&n.forcedJSONParsing,r=this.responseType==="json";if(t&&utils$1.isString(t)&&(i&&!this.responseType||r)){const o=!(n&&n.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(l){if(o)throw l.name==="SyntaxError"?AxiosError.from(l,AxiosError.ERR_BAD_RESPONSE,this,null,this.response):l}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:platform.classes.FormData,Blob:platform.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};utils$1.forEach(["delete","get","head","post","put","patch"],e=>{defaults$1.headers[e]={}});const defaults$2=defaults$1,ignoreDuplicateOf=utils$1.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),parseHeaders=e=>{const t={};let n,i,r;return e&&e.split(` -`).forEach(function(o){r=o.indexOf(":"),n=o.substring(0,r).trim().toLowerCase(),i=o.substring(r+1).trim(),!(!n||t[n]&&ignoreDuplicateOf[n])&&(n==="set-cookie"?t[n]?t[n].push(i):t[n]=[i]:t[n]=t[n]?t[n]+", "+i:i)}),t},$internals=Symbol("internals");function normalizeHeader(e){return e&&String(e).trim().toLowerCase()}function normalizeValue(e){return e===!1||e==null?e:utils$1.isArray(e)?e.map(normalizeValue):String(e)}function parseTokens(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let i;for(;i=n.exec(e);)t[i[1]]=i[2];return t}const isValidHeaderName=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function matchHeaderValue(e,t,n,i,r){if(utils$1.isFunction(i))return i.call(this,t,n);if(r&&(t=n),!!utils$1.isString(t)){if(utils$1.isString(i))return t.indexOf(i)!==-1;if(utils$1.isRegExp(i))return i.test(t)}}function formatHeader(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,i)=>n.toUpperCase()+i)}function buildAccessors(e,t){const n=utils$1.toCamelCase(" "+t);["get","set","has"].forEach(i=>{Object.defineProperty(e,i+n,{value:function(r,a,o){return this[i].call(this,t,r,a,o)},configurable:!0})})}class AxiosHeaders{constructor(t){t&&this.set(t)}set(t,n,i){const r=this;function a(l,u,d){const m=normalizeHeader(u);if(!m)throw new Error("header name must be a non-empty string");const g=utils$1.findKey(r,m);(!g||r[g]===void 0||d===!0||d===void 0&&r[g]!==!1)&&(r[g||u]=normalizeValue(l))}const o=(l,u)=>utils$1.forEach(l,(d,m)=>a(d,m,u));return utils$1.isPlainObject(t)||t instanceof this.constructor?o(t,n):utils$1.isString(t)&&(t=t.trim())&&!isValidHeaderName(t)?o(parseHeaders(t),n):t!=null&&a(n,t,i),this}get(t,n){if(t=normalizeHeader(t),t){const i=utils$1.findKey(this,t);if(i){const r=this[i];if(!n)return r;if(n===!0)return parseTokens(r);if(utils$1.isFunction(n))return n.call(this,r,i);if(utils$1.isRegExp(n))return n.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=normalizeHeader(t),t){const i=utils$1.findKey(this,t);return!!(i&&this[i]!==void 0&&(!n||matchHeaderValue(this,this[i],i,n)))}return!1}delete(t,n){const i=this;let r=!1;function a(o){if(o=normalizeHeader(o),o){const l=utils$1.findKey(i,o);l&&(!n||matchHeaderValue(i,i[l],l,n))&&(delete i[l],r=!0)}}return utils$1.isArray(t)?t.forEach(a):a(t),r}clear(t){const n=Object.keys(this);let i=n.length,r=!1;for(;i--;){const a=n[i];(!t||matchHeaderValue(this,this[a],a,t,!0))&&(delete this[a],r=!0)}return r}normalize(t){const n=this,i={};return utils$1.forEach(this,(r,a)=>{const o=utils$1.findKey(i,a);if(o){n[o]=normalizeValue(r),delete n[a];return}const l=t?formatHeader(a):String(a).trim();l!==a&&delete n[a],n[l]=normalizeValue(r),i[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return utils$1.forEach(this,(i,r)=>{i!=null&&i!==!1&&(n[r]=t&&utils$1.isArray(i)?i.join(", "):i)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const i=new this(t);return n.forEach(r=>i.set(r)),i}static accessor(t){const i=(this[$internals]=this[$internals]={accessors:{}}).accessors,r=this.prototype;function a(o){const l=normalizeHeader(o);i[l]||(buildAccessors(r,o),i[l]=!0)}return utils$1.isArray(t)?t.forEach(a):a(t),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils$1.reduceDescriptors(AxiosHeaders.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(i){this[n]=i}}});utils$1.freezeMethods(AxiosHeaders);const AxiosHeaders$1=AxiosHeaders;function transformData(e,t){const n=this||defaults$2,i=t||n,r=AxiosHeaders$1.from(i.headers);let a=i.data;return utils$1.forEach(e,function(l){a=l.call(n,a,r.normalize(),t?t.status:void 0)}),r.normalize(),a}function isCancel(e){return!!(e&&e.__CANCEL__)}function CanceledError(e,t,n){AxiosError.call(this,e??"canceled",AxiosError.ERR_CANCELED,t,n),this.name="CanceledError"}utils$1.inherits(CanceledError,AxiosError,{__CANCEL__:!0});function settle(e,t,n){const i=n.config.validateStatus;!n.status||!i||i(n.status)?e(n):t(new AxiosError("Request failed with status code "+n.status,[AxiosError.ERR_BAD_REQUEST,AxiosError.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}const cookies=platform.hasStandardBrowserEnv?{write(e,t,n,i,r,a){const o=[e+"="+encodeURIComponent(t)];utils$1.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),utils$1.isString(i)&&o.push("path="+i),utils$1.isString(r)&&o.push("domain="+r),a===!0&&o.push("secure"),document.cookie=o.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function isAbsoluteURL(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function combineURLs(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function buildFullPath(e,t){return e&&!isAbsoluteURL(t)?combineURLs(e,t):t}const isURLSameOrigin=platform.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");let i;function r(a){let o=a;return t&&(n.setAttribute("href",o),o=n.href),n.setAttribute("href",o),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return i=r(window.location.href),function(o){const l=utils$1.isString(o)?r(o):o;return l.protocol===i.protocol&&l.host===i.host}}():function(){return function(){return!0}}();function parseProtocol(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function speedometer(e,t){e=e||10;const n=new Array(e),i=new Array(e);let r=0,a=0,o;return t=t!==void 0?t:1e3,function(u){const d=Date.now(),m=i[a];o||(o=d),n[r]=u,i[r]=d;let g=a,_=0;for(;g!==r;)_+=n[g++],g=g%e;if(r=(r+1)%e,r===a&&(a=(a+1)%e),d-o{const a=r.loaded,o=r.lengthComputable?r.total:void 0,l=a-n,u=i(l),d=a<=o;n=a;const m={loaded:a,total:o,progress:o?a/o:void 0,bytes:l,rate:u||void 0,estimated:u&&o&&d?(o-a)/u:void 0,event:r};m[t?"download":"upload"]=!0,e(m)}}const isXHRAdapterSupported=typeof XMLHttpRequest<"u",xhrAdapter=isXHRAdapterSupported&&function(e){return new Promise(function(n,i){let r=e.data;const a=AxiosHeaders$1.from(e.headers).normalize();let{responseType:o,withXSRFToken:l}=e,u;function d(){e.cancelToken&&e.cancelToken.unsubscribe(u),e.signal&&e.signal.removeEventListener("abort",u)}let m;if(utils$1.isFormData(r)){if(platform.hasStandardBrowserEnv||platform.hasStandardBrowserWebWorkerEnv)a.setContentType(!1);else if((m=a.getContentType())!==!1){const[E,...x]=m?m.split(";").map(M=>M.trim()).filter(Boolean):[];a.setContentType([E||"multipart/form-data",...x].join("; "))}}let g=new XMLHttpRequest;if(e.auth){const E=e.auth.username||"",x=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";a.set("Authorization","Basic "+btoa(E+":"+x))}const _=buildFullPath(e.baseURL,e.url);g.open(e.method.toUpperCase(),buildURL(_,e.params,e.paramsSerializer),!0),g.timeout=e.timeout;function v(){if(!g)return;const E=AxiosHeaders$1.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders()),M={data:!o||o==="text"||o==="json"?g.responseText:g.response,status:g.status,statusText:g.statusText,headers:E,config:e,request:g};settle(function(R){n(R),d()},function(R){i(R),d()},M),g=null}if("onloadend"in g?g.onloadend=v:g.onreadystatechange=function(){!g||g.readyState!==4||g.status===0&&!(g.responseURL&&g.responseURL.indexOf("file:")===0)||setTimeout(v)},g.onabort=function(){g&&(i(new AxiosError("Request aborted",AxiosError.ECONNABORTED,e,g)),g=null)},g.onerror=function(){i(new AxiosError("Network Error",AxiosError.ERR_NETWORK,e,g)),g=null},g.ontimeout=function(){let x=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const M=e.transitional||transitionalDefaults;e.timeoutErrorMessage&&(x=e.timeoutErrorMessage),i(new AxiosError(x,M.clarifyTimeoutError?AxiosError.ETIMEDOUT:AxiosError.ECONNABORTED,e,g)),g=null},platform.hasStandardBrowserEnv&&(l&&utils$1.isFunction(l)&&(l=l(e)),l||l!==!1&&isURLSameOrigin(_))){const E=e.xsrfHeaderName&&e.xsrfCookieName&&cookies.read(e.xsrfCookieName);E&&a.set(e.xsrfHeaderName,E)}r===void 0&&a.setContentType(null),"setRequestHeader"in g&&utils$1.forEach(a.toJSON(),function(x,M){g.setRequestHeader(M,x)}),utils$1.isUndefined(e.withCredentials)||(g.withCredentials=!!e.withCredentials),o&&o!=="json"&&(g.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&g.addEventListener("progress",progressEventReducer(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&g.upload&&g.upload.addEventListener("progress",progressEventReducer(e.onUploadProgress)),(e.cancelToken||e.signal)&&(u=E=>{g&&(i(!E||E.type?new CanceledError(null,e,g):E),g.abort(),g=null)},e.cancelToken&&e.cancelToken.subscribe(u),e.signal&&(e.signal.aborted?u():e.signal.addEventListener("abort",u)));const w=parseProtocol(_);if(w&&platform.protocols.indexOf(w)===-1){i(new AxiosError("Unsupported protocol "+w+":",AxiosError.ERR_BAD_REQUEST,e));return}g.send(r||null)})},knownAdapters={http:httpAdapter,xhr:xhrAdapter};utils$1.forEach(knownAdapters,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const renderReason=e=>`- ${e}`,isResolvedHandle=e=>utils$1.isFunction(e)||e===null||e===!1,adapters$1={getAdapter:e=>{e=utils$1.isArray(e)?e:[e];const{length:t}=e;let n,i;const r={};for(let a=0;a`adapter ${l} `+(u===!1?"is not supported by the environment":"is not available in the build"));let o=t?a.length>1?`since : +var ia=Object.defineProperty;var ra=(e,t,n)=>t in e?ia(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Y=(e,t,n)=>(ra(e,typeof t!="symbol"?t+"":t,n),n);function bind$4(e,t){return function(){return e.apply(t,arguments)}}const{toString:toString$7}=Object.prototype,{getPrototypeOf}=Object,kindOf=(e=>t=>{const n=toString$7.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),kindOfTest=e=>(e=e.toLowerCase(),t=>kindOf(t)===e),typeOfTest=e=>t=>typeof t===e,{isArray:isArray$d}=Array,isUndefined=typeOfTest("undefined");function isBuffer$3(e){return e!==null&&!isUndefined(e)&&e.constructor!==null&&!isUndefined(e.constructor)&&isFunction$6(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const isArrayBuffer=kindOfTest("ArrayBuffer");function isArrayBufferView(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&isArrayBuffer(e.buffer),t}const isString$1=typeOfTest("string"),isFunction$6=typeOfTest("function"),isNumber$1=typeOfTest("number"),isObject$c=e=>e!==null&&typeof e=="object",isBoolean=e=>e===!0||e===!1,isPlainObject=e=>{if(kindOf(e)!=="object")return!1;const t=getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},isDate$1=kindOfTest("Date"),isFile=kindOfTest("File"),isBlob=kindOfTest("Blob"),isFileList=kindOfTest("FileList"),isStream=e=>isObject$c(e)&&isFunction$6(e.pipe),isFormData=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||isFunction$6(e.append)&&((t=kindOf(e))==="formdata"||t==="object"&&isFunction$6(e.toString)&&e.toString()==="[object FormData]"))},isURLSearchParams=kindOfTest("URLSearchParams"),trim$2=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function forEach(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let i,r;if(typeof e!="object"&&(e=[e]),isArray$d(e))for(i=0,r=e.length;i0;)if(r=n[i],t===r.toLowerCase())return r;return null}const _global=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),isContextDefined=e=>!isUndefined(e)&&e!==_global;function merge$1(){const{caseless:e}=isContextDefined(this)&&this||{},t={},n=(i,r)=>{const a=e&&findKey$1(t,r)||r;isPlainObject(t[a])&&isPlainObject(i)?t[a]=merge$1(t[a],i):isPlainObject(i)?t[a]=merge$1({},i):isArray$d(i)?t[a]=i.slice():t[a]=i};for(let i=0,r=arguments.length;i(forEach(t,(r,a)=>{n&&isFunction$6(r)?e[a]=bind$4(r,n):e[a]=r},{allOwnKeys:i}),e),stripBOM=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),inherits=(e,t,n,i)=>{e.prototype=Object.create(t.prototype,i),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject=(e,t,n,i)=>{let r,a,o;const l={};if(t=t||{},e==null)return t;do{for(r=Object.getOwnPropertyNames(e),a=r.length;a-- >0;)o=r[a],(!i||i(o,e,t))&&!l[o]&&(t[o]=e[o],l[o]=!0);e=n!==!1&&getPrototypeOf(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},endsWith=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const i=e.indexOf(t,n);return i!==-1&&i===n},toArray=e=>{if(!e)return null;if(isArray$d(e))return e;let t=e.length;if(!isNumber$1(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},isTypedArray$3=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&getPrototypeOf(Uint8Array)),forEachEntry=(e,t)=>{const i=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=i.next())&&!r.done;){const a=r.value;t.call(e,a[0],a[1])}},matchAll=(e,t)=>{let n;const i=[];for(;(n=e.exec(t))!==null;)i.push(n);return i},isHTMLForm=kindOfTest("HTMLFormElement"),toCamelCase=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,i,r){return i.toUpperCase()+r}),hasOwnProperty$c=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),isRegExp=kindOfTest("RegExp"),reduceDescriptors=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),i={};forEach(n,(r,a)=>{let o;(o=t(r,a,e))!==!1&&(i[a]=o||r)}),Object.defineProperties(e,i)},freezeMethods=e=>{reduceDescriptors(e,(t,n)=>{if(isFunction$6(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const i=e[n];if(isFunction$6(i)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},toObjectSet=(e,t)=>{const n={},i=r=>{r.forEach(a=>{n[a]=!0})};return isArray$d(e)?i(e):i(String(e).split(t)),n},noop$4=()=>{},toFiniteNumber=(e,t)=>(e=+e,Number.isFinite(e)?e:t),ALPHA="abcdefghijklmnopqrstuvwxyz",DIGIT="0123456789",ALPHABET={DIGIT,ALPHA,ALPHA_DIGIT:ALPHA+ALPHA.toUpperCase()+DIGIT},generateString=(e=16,t=ALPHABET.ALPHA_DIGIT)=>{let n="";const{length:i}=t;for(;e--;)n+=t[Math.random()*i|0];return n};function isSpecCompliantForm(e){return!!(e&&isFunction$6(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const toJSONObject=e=>{const t=new Array(10),n=(i,r)=>{if(isObject$c(i)){if(t.indexOf(i)>=0)return;if(!("toJSON"in i)){t[r]=i;const a=isArray$d(i)?[]:{};return forEach(i,(o,l)=>{const u=n(o,r+1);!isUndefined(u)&&(a[l]=u)}),t[r]=void 0,a}}return i};return n(e,0)},isAsyncFn=kindOfTest("AsyncFunction"),isThenable=e=>e&&(isObject$c(e)||isFunction$6(e))&&isFunction$6(e.then)&&isFunction$6(e.catch),utils$1={isArray:isArray$d,isArrayBuffer,isBuffer:isBuffer$3,isFormData,isArrayBufferView,isString:isString$1,isNumber:isNumber$1,isBoolean,isObject:isObject$c,isPlainObject,isUndefined,isDate:isDate$1,isFile,isBlob,isRegExp,isFunction:isFunction$6,isStream,isURLSearchParams,isTypedArray:isTypedArray$3,isFileList,forEach,merge:merge$1,extend,trim:trim$2,stripBOM,inherits,toFlatObject,kindOf,kindOfTest,endsWith,toArray,forEachEntry,matchAll,isHTMLForm,hasOwnProperty:hasOwnProperty$c,hasOwnProp:hasOwnProperty$c,reduceDescriptors,freezeMethods,toObjectSet,toCamelCase,noop:noop$4,toFiniteNumber,findKey:findKey$1,global:_global,isContextDefined,ALPHABET,generateString,isSpecCompliantForm,toJSONObject,isAsyncFn,isThenable};function AxiosError(e,t,n,i,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),i&&(this.request=i),r&&(this.response=r)}utils$1.inherits(AxiosError,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:utils$1.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const prototype$1=AxiosError.prototype,descriptors$1={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{descriptors$1[e]={value:e}});Object.defineProperties(AxiosError,descriptors$1);Object.defineProperty(prototype$1,"isAxiosError",{value:!0});AxiosError.from=(e,t,n,i,r,a)=>{const o=Object.create(prototype$1);return utils$1.toFlatObject(e,o,function(u){return u!==Error.prototype},l=>l!=="isAxiosError"),AxiosError.call(o,e.message,t,n,i,r),o.cause=e,o.name=e.name,a&&Object.assign(o,a),o};const httpAdapter=null;function isVisitable(e){return utils$1.isPlainObject(e)||utils$1.isArray(e)}function removeBrackets(e){return utils$1.endsWith(e,"[]")?e.slice(0,-2):e}function renderKey(e,t,n){return e?e.concat(t).map(function(r,a){return r=removeBrackets(r),!n&&a?"["+r+"]":r}).join(n?".":""):t}function isFlatArray(e){return utils$1.isArray(e)&&!e.some(isVisitable)}const predicates=utils$1.toFlatObject(utils$1,{},null,function(t){return/^is[A-Z]/.test(t)});function toFormData(e,t,n){if(!utils$1.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=utils$1.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function($,x){return!utils$1.isUndefined(x[$])});const i=n.metaTokens,r=n.visitor||m,a=n.dots,o=n.indexes,u=(n.Blob||typeof Blob<"u"&&Blob)&&utils$1.isSpecCompliantForm(t);if(!utils$1.isFunction(r))throw new TypeError("visitor must be a function");function h(w){if(w===null)return"";if(utils$1.isDate(w))return w.toISOString();if(!u&&utils$1.isBlob(w))throw new AxiosError("Blob is not supported. Use a Buffer instead.");return utils$1.isArrayBuffer(w)||utils$1.isTypedArray(w)?u&&typeof Blob=="function"?new Blob([w]):Buffer.from(w):w}function m(w,$,x){let M=w;if(w&&!x&&typeof w=="object"){if(utils$1.endsWith($,"{}"))$=i?$:$.slice(0,-2),w=JSON.stringify(w);else if(utils$1.isArray(w)&&isFlatArray(w)||(utils$1.isFileList(w)||utils$1.endsWith($,"[]"))&&(M=utils$1.toArray(w)))return $=removeBrackets($),M.forEach(function(R,W){!(utils$1.isUndefined(R)||R===null)&&t.append(o===!0?renderKey([$],W,a):o===null?$:$+"[]",h(R))}),!1}return isVisitable(w)?!0:(t.append(renderKey(x,$,a),h(w)),!1)}const g=[],_=Object.assign(predicates,{defaultVisitor:m,convertValue:h,isVisitable});function v(w,$){if(!utils$1.isUndefined(w)){if(g.indexOf(w)!==-1)throw Error("Circular reference detected in "+$.join("."));g.push(w),utils$1.forEach(w,function(M,T){(!(utils$1.isUndefined(M)||M===null)&&r.call(t,M,utils$1.isString(T)?T.trim():T,$,_))===!0&&v(M,$?$.concat(T):[T])}),g.pop()}}if(!utils$1.isObject(e))throw new TypeError("data must be an object");return v(e),t}function encode$1(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(i){return t[i]})}function AxiosURLSearchParams(e,t){this._pairs=[],e&&toFormData(e,this,t)}const prototype=AxiosURLSearchParams.prototype;prototype.append=function(t,n){this._pairs.push([t,n])};prototype.toString=function(t){const n=t?function(i){return t.call(this,i,encode$1)}:encode$1;return this._pairs.map(function(r){return n(r[0])+"="+n(r[1])},"").join("&")};function encode(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function buildURL(e,t,n){if(!t)return e;const i=n&&n.encode||encode,r=n&&n.serialize;let a;if(r?a=r(t,n):a=utils$1.isURLSearchParams(t)?t.toString():new AxiosURLSearchParams(t,n).toString(i),a){const o=e.indexOf("#");o!==-1&&(e=e.slice(0,o)),e+=(e.indexOf("?")===-1?"?":"&")+a}return e}class InterceptorManager{constructor(){this.handlers=[]}use(t,n,i){return this.handlers.push({fulfilled:t,rejected:n,synchronous:i?i.synchronous:!1,runWhen:i?i.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){utils$1.forEach(this.handlers,function(i){i!==null&&t(i)})}}const InterceptorManager$1=InterceptorManager,transitionalDefaults={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},URLSearchParams$1=typeof URLSearchParams<"u"?URLSearchParams:AxiosURLSearchParams,FormData$1=typeof FormData<"u"?FormData:null,Blob$1=typeof Blob<"u"?Blob:null,platform$1={isBrowser:!0,classes:{URLSearchParams:URLSearchParams$1,FormData:FormData$1,Blob:Blob$1},protocols:["http","https","file","blob","url","data"]},hasBrowserEnv=typeof window<"u"&&typeof document<"u",hasStandardBrowserEnv=(e=>hasBrowserEnv&&["ReactNative","NativeScript","NS"].indexOf(e)<0)(typeof navigator<"u"&&navigator.product),hasStandardBrowserWebWorkerEnv=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),utils=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv,hasStandardBrowserEnv,hasStandardBrowserWebWorkerEnv},Symbol.toStringTag,{value:"Module"})),platform={...utils,...platform$1};function toURLEncodedForm(e,t){return toFormData(e,new platform.classes.URLSearchParams,Object.assign({visitor:function(n,i,r,a){return platform.isNode&&utils$1.isBuffer(n)?(this.append(i,n.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)}},t))}function parsePropPath(e){return utils$1.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function arrayToObject(e){const t={},n=Object.keys(e);let i;const r=n.length;let a;for(i=0;i=n.length;return o=!o&&utils$1.isArray(r)?r.length:o,u?(utils$1.hasOwnProp(r,o)?r[o]=[r[o],i]:r[o]=i,!l):((!r[o]||!utils$1.isObject(r[o]))&&(r[o]=[]),t(n,i,r[o],a)&&utils$1.isArray(r[o])&&(r[o]=arrayToObject(r[o])),!l)}if(utils$1.isFormData(e)&&utils$1.isFunction(e.entries)){const n={};return utils$1.forEachEntry(e,(i,r)=>{t(parsePropPath(i),r,n,0)}),n}return null}function stringifySafely(e,t,n){if(utils$1.isString(e))try{return(t||JSON.parse)(e),utils$1.trim(e)}catch(i){if(i.name!=="SyntaxError")throw i}return(n||JSON.stringify)(e)}const defaults$1={transitional:transitionalDefaults,adapter:["xhr","http"],transformRequest:[function(t,n){const i=n.getContentType()||"",r=i.indexOf("application/json")>-1,a=utils$1.isObject(t);if(a&&utils$1.isHTMLForm(t)&&(t=new FormData(t)),utils$1.isFormData(t))return r&&r?JSON.stringify(formDataToJSON(t)):t;if(utils$1.isArrayBuffer(t)||utils$1.isBuffer(t)||utils$1.isStream(t)||utils$1.isFile(t)||utils$1.isBlob(t))return t;if(utils$1.isArrayBufferView(t))return t.buffer;if(utils$1.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(a){if(i.indexOf("application/x-www-form-urlencoded")>-1)return toURLEncodedForm(t,this.formSerializer).toString();if((l=utils$1.isFileList(t))||i.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return toFormData(l?{"files[]":t}:t,u&&new u,this.formSerializer)}}return a||r?(n.setContentType("application/json",!1),stringifySafely(t)):t}],transformResponse:[function(t){const n=this.transitional||defaults$1.transitional,i=n&&n.forcedJSONParsing,r=this.responseType==="json";if(t&&utils$1.isString(t)&&(i&&!this.responseType||r)){const o=!(n&&n.silentJSONParsing)&&r;try{return JSON.parse(t)}catch(l){if(o)throw l.name==="SyntaxError"?AxiosError.from(l,AxiosError.ERR_BAD_RESPONSE,this,null,this.response):l}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:platform.classes.FormData,Blob:platform.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};utils$1.forEach(["delete","get","head","post","put","patch"],e=>{defaults$1.headers[e]={}});const defaults$2=defaults$1,ignoreDuplicateOf=utils$1.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),parseHeaders=e=>{const t={};let n,i,r;return e&&e.split(` +`).forEach(function(o){r=o.indexOf(":"),n=o.substring(0,r).trim().toLowerCase(),i=o.substring(r+1).trim(),!(!n||t[n]&&ignoreDuplicateOf[n])&&(n==="set-cookie"?t[n]?t[n].push(i):t[n]=[i]:t[n]=t[n]?t[n]+", "+i:i)}),t},$internals=Symbol("internals");function normalizeHeader(e){return e&&String(e).trim().toLowerCase()}function normalizeValue(e){return e===!1||e==null?e:utils$1.isArray(e)?e.map(normalizeValue):String(e)}function parseTokens(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let i;for(;i=n.exec(e);)t[i[1]]=i[2];return t}const isValidHeaderName=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function matchHeaderValue(e,t,n,i,r){if(utils$1.isFunction(i))return i.call(this,t,n);if(r&&(t=n),!!utils$1.isString(t)){if(utils$1.isString(i))return t.indexOf(i)!==-1;if(utils$1.isRegExp(i))return i.test(t)}}function formatHeader(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,i)=>n.toUpperCase()+i)}function buildAccessors(e,t){const n=utils$1.toCamelCase(" "+t);["get","set","has"].forEach(i=>{Object.defineProperty(e,i+n,{value:function(r,a,o){return this[i].call(this,t,r,a,o)},configurable:!0})})}class AxiosHeaders{constructor(t){t&&this.set(t)}set(t,n,i){const r=this;function a(l,u,h){const m=normalizeHeader(u);if(!m)throw new Error("header name must be a non-empty string");const g=utils$1.findKey(r,m);(!g||r[g]===void 0||h===!0||h===void 0&&r[g]!==!1)&&(r[g||u]=normalizeValue(l))}const o=(l,u)=>utils$1.forEach(l,(h,m)=>a(h,m,u));return utils$1.isPlainObject(t)||t instanceof this.constructor?o(t,n):utils$1.isString(t)&&(t=t.trim())&&!isValidHeaderName(t)?o(parseHeaders(t),n):t!=null&&a(n,t,i),this}get(t,n){if(t=normalizeHeader(t),t){const i=utils$1.findKey(this,t);if(i){const r=this[i];if(!n)return r;if(n===!0)return parseTokens(r);if(utils$1.isFunction(n))return n.call(this,r,i);if(utils$1.isRegExp(n))return n.exec(r);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=normalizeHeader(t),t){const i=utils$1.findKey(this,t);return!!(i&&this[i]!==void 0&&(!n||matchHeaderValue(this,this[i],i,n)))}return!1}delete(t,n){const i=this;let r=!1;function a(o){if(o=normalizeHeader(o),o){const l=utils$1.findKey(i,o);l&&(!n||matchHeaderValue(i,i[l],l,n))&&(delete i[l],r=!0)}}return utils$1.isArray(t)?t.forEach(a):a(t),r}clear(t){const n=Object.keys(this);let i=n.length,r=!1;for(;i--;){const a=n[i];(!t||matchHeaderValue(this,this[a],a,t,!0))&&(delete this[a],r=!0)}return r}normalize(t){const n=this,i={};return utils$1.forEach(this,(r,a)=>{const o=utils$1.findKey(i,a);if(o){n[o]=normalizeValue(r),delete n[a];return}const l=t?formatHeader(a):String(a).trim();l!==a&&delete n[a],n[l]=normalizeValue(r),i[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return utils$1.forEach(this,(i,r)=>{i!=null&&i!==!1&&(n[r]=t&&utils$1.isArray(i)?i.join(", "):i)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const i=new this(t);return n.forEach(r=>i.set(r)),i}static accessor(t){const i=(this[$internals]=this[$internals]={accessors:{}}).accessors,r=this.prototype;function a(o){const l=normalizeHeader(o);i[l]||(buildAccessors(r,o),i[l]=!0)}return utils$1.isArray(t)?t.forEach(a):a(t),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils$1.reduceDescriptors(AxiosHeaders.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(i){this[n]=i}}});utils$1.freezeMethods(AxiosHeaders);const AxiosHeaders$1=AxiosHeaders;function transformData(e,t){const n=this||defaults$2,i=t||n,r=AxiosHeaders$1.from(i.headers);let a=i.data;return utils$1.forEach(e,function(l){a=l.call(n,a,r.normalize(),t?t.status:void 0)}),r.normalize(),a}function isCancel(e){return!!(e&&e.__CANCEL__)}function CanceledError(e,t,n){AxiosError.call(this,e??"canceled",AxiosError.ERR_CANCELED,t,n),this.name="CanceledError"}utils$1.inherits(CanceledError,AxiosError,{__CANCEL__:!0});function settle(e,t,n){const i=n.config.validateStatus;!n.status||!i||i(n.status)?e(n):t(new AxiosError("Request failed with status code "+n.status,[AxiosError.ERR_BAD_REQUEST,AxiosError.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}const cookies=platform.hasStandardBrowserEnv?{write(e,t,n,i,r,a){const o=[e+"="+encodeURIComponent(t)];utils$1.isNumber(n)&&o.push("expires="+new Date(n).toGMTString()),utils$1.isString(i)&&o.push("path="+i),utils$1.isString(r)&&o.push("domain="+r),a===!0&&o.push("secure"),document.cookie=o.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function isAbsoluteURL(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function combineURLs(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function buildFullPath(e,t){return e&&!isAbsoluteURL(t)?combineURLs(e,t):t}const isURLSameOrigin=platform.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");let i;function r(a){let o=a;return t&&(n.setAttribute("href",o),o=n.href),n.setAttribute("href",o),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return i=r(window.location.href),function(o){const l=utils$1.isString(o)?r(o):o;return l.protocol===i.protocol&&l.host===i.host}}():function(){return function(){return!0}}();function parseProtocol(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function speedometer(e,t){e=e||10;const n=new Array(e),i=new Array(e);let r=0,a=0,o;return t=t!==void 0?t:1e3,function(u){const h=Date.now(),m=i[a];o||(o=h),n[r]=u,i[r]=h;let g=a,_=0;for(;g!==r;)_+=n[g++],g=g%e;if(r=(r+1)%e,r===a&&(a=(a+1)%e),h-o{const a=r.loaded,o=r.lengthComputable?r.total:void 0,l=a-n,u=i(l),h=a<=o;n=a;const m={loaded:a,total:o,progress:o?a/o:void 0,bytes:l,rate:u||void 0,estimated:u&&o&&h?(o-a)/u:void 0,event:r};m[t?"download":"upload"]=!0,e(m)}}const isXHRAdapterSupported=typeof XMLHttpRequest<"u",xhrAdapter=isXHRAdapterSupported&&function(e){return new Promise(function(n,i){let r=e.data;const a=AxiosHeaders$1.from(e.headers).normalize();let{responseType:o,withXSRFToken:l}=e,u;function h(){e.cancelToken&&e.cancelToken.unsubscribe(u),e.signal&&e.signal.removeEventListener("abort",u)}let m;if(utils$1.isFormData(r)){if(platform.hasStandardBrowserEnv||platform.hasStandardBrowserWebWorkerEnv)a.setContentType(!1);else if((m=a.getContentType())!==!1){const[$,...x]=m?m.split(";").map(M=>M.trim()).filter(Boolean):[];a.setContentType([$||"multipart/form-data",...x].join("; "))}}let g=new XMLHttpRequest;if(e.auth){const $=e.auth.username||"",x=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";a.set("Authorization","Basic "+btoa($+":"+x))}const _=buildFullPath(e.baseURL,e.url);g.open(e.method.toUpperCase(),buildURL(_,e.params,e.paramsSerializer),!0),g.timeout=e.timeout;function v(){if(!g)return;const $=AxiosHeaders$1.from("getAllResponseHeaders"in g&&g.getAllResponseHeaders()),M={data:!o||o==="text"||o==="json"?g.responseText:g.response,status:g.status,statusText:g.statusText,headers:$,config:e,request:g};settle(function(R){n(R),h()},function(R){i(R),h()},M),g=null}if("onloadend"in g?g.onloadend=v:g.onreadystatechange=function(){!g||g.readyState!==4||g.status===0&&!(g.responseURL&&g.responseURL.indexOf("file:")===0)||setTimeout(v)},g.onabort=function(){g&&(i(new AxiosError("Request aborted",AxiosError.ECONNABORTED,e,g)),g=null)},g.onerror=function(){i(new AxiosError("Network Error",AxiosError.ERR_NETWORK,e,g)),g=null},g.ontimeout=function(){let x=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const M=e.transitional||transitionalDefaults;e.timeoutErrorMessage&&(x=e.timeoutErrorMessage),i(new AxiosError(x,M.clarifyTimeoutError?AxiosError.ETIMEDOUT:AxiosError.ECONNABORTED,e,g)),g=null},platform.hasStandardBrowserEnv&&(l&&utils$1.isFunction(l)&&(l=l(e)),l||l!==!1&&isURLSameOrigin(_))){const $=e.xsrfHeaderName&&e.xsrfCookieName&&cookies.read(e.xsrfCookieName);$&&a.set(e.xsrfHeaderName,$)}r===void 0&&a.setContentType(null),"setRequestHeader"in g&&utils$1.forEach(a.toJSON(),function(x,M){g.setRequestHeader(M,x)}),utils$1.isUndefined(e.withCredentials)||(g.withCredentials=!!e.withCredentials),o&&o!=="json"&&(g.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&g.addEventListener("progress",progressEventReducer(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&g.upload&&g.upload.addEventListener("progress",progressEventReducer(e.onUploadProgress)),(e.cancelToken||e.signal)&&(u=$=>{g&&(i(!$||$.type?new CanceledError(null,e,g):$),g.abort(),g=null)},e.cancelToken&&e.cancelToken.subscribe(u),e.signal&&(e.signal.aborted?u():e.signal.addEventListener("abort",u)));const w=parseProtocol(_);if(w&&platform.protocols.indexOf(w)===-1){i(new AxiosError("Unsupported protocol "+w+":",AxiosError.ERR_BAD_REQUEST,e));return}g.send(r||null)})},knownAdapters={http:httpAdapter,xhr:xhrAdapter};utils$1.forEach(knownAdapters,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const renderReason=e=>`- ${e}`,isResolvedHandle=e=>utils$1.isFunction(e)||e===null||e===!1,adapters$1={getAdapter:e=>{e=utils$1.isArray(e)?e:[e];const{length:t}=e;let n,i;const r={};for(let a=0;a`adapter ${l} `+(u===!1?"is not supported by the environment":"is not available in the build"));let o=t?a.length>1?`since : `+a.map(renderReason).join(` -`):" "+renderReason(a[0]):"as no adapter specified";throw new AxiosError("There is no suitable adapter to dispatch the request "+o,"ERR_NOT_SUPPORT")}return i},adapters:knownAdapters};function throwIfCancellationRequested(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new CanceledError(null,e)}function dispatchRequest(e){return throwIfCancellationRequested(e),e.headers=AxiosHeaders$1.from(e.headers),e.data=transformData.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),adapters$1.getAdapter(e.adapter||defaults$2.adapter)(e).then(function(i){return throwIfCancellationRequested(e),i.data=transformData.call(e,e.transformResponse,i),i.headers=AxiosHeaders$1.from(i.headers),i},function(i){return isCancel(i)||(throwIfCancellationRequested(e),i&&i.response&&(i.response.data=transformData.call(e,e.transformResponse,i.response),i.response.headers=AxiosHeaders$1.from(i.response.headers))),Promise.reject(i)})}const headersToObject=e=>e instanceof AxiosHeaders$1?e.toJSON():e;function mergeConfig(e,t){t=t||{};const n={};function i(d,m,g){return utils$1.isPlainObject(d)&&utils$1.isPlainObject(m)?utils$1.merge.call({caseless:g},d,m):utils$1.isPlainObject(m)?utils$1.merge({},m):utils$1.isArray(m)?m.slice():m}function r(d,m,g){if(utils$1.isUndefined(m)){if(!utils$1.isUndefined(d))return i(void 0,d,g)}else return i(d,m,g)}function a(d,m){if(!utils$1.isUndefined(m))return i(void 0,m)}function o(d,m){if(utils$1.isUndefined(m)){if(!utils$1.isUndefined(d))return i(void 0,d)}else return i(void 0,m)}function l(d,m,g){if(g in t)return i(d,m);if(g in e)return i(void 0,d)}const u={url:a,method:a,data:a,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:l,headers:(d,m)=>r(headersToObject(d),headersToObject(m),!0)};return utils$1.forEach(Object.keys(Object.assign({},e,t)),function(m){const g=u[m]||r,_=g(e[m],t[m],m);utils$1.isUndefined(_)&&g!==l||(n[m]=_)}),n}const VERSION$1="1.6.3",validators$1={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{validators$1[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}});const deprecatedWarnings={};validators$1.transitional=function(t,n,i){function r(a,o){return"[Axios v"+VERSION$1+"] Transitional option '"+a+"'"+o+(i?". "+i:"")}return(a,o,l)=>{if(t===!1)throw new AxiosError(r(o," has been removed"+(n?" in "+n:"")),AxiosError.ERR_DEPRECATED);return n&&!deprecatedWarnings[o]&&(deprecatedWarnings[o]=!0,console.warn(r(o," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(a,o,l):!0}};function assertOptions(e,t,n){if(typeof e!="object")throw new AxiosError("options must be an object",AxiosError.ERR_BAD_OPTION_VALUE);const i=Object.keys(e);let r=i.length;for(;r-- >0;){const a=i[r],o=t[a];if(o){const l=e[a],u=l===void 0||o(l,a,e);if(u!==!0)throw new AxiosError("option "+a+" must be "+u,AxiosError.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new AxiosError("Unknown option "+a,AxiosError.ERR_BAD_OPTION)}}const validator={assertOptions,validators:validators$1},validators=validator.validators;class Axios{constructor(t){this.defaults=t,this.interceptors={request:new InterceptorManager$1,response:new InterceptorManager$1}}request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=mergeConfig(this.defaults,n);const{transitional:i,paramsSerializer:r,headers:a}=n;i!==void 0&&validator.assertOptions(i,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),r!=null&&(utils$1.isFunction(r)?n.paramsSerializer={serialize:r}:validator.assertOptions(r,{encode:validators.function,serialize:validators.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let o=a&&utils$1.merge(a.common,a[n.method]);a&&utils$1.forEach(["delete","get","head","post","put","patch","common"],w=>{delete a[w]}),n.headers=AxiosHeaders$1.concat(o,a);const l=[];let u=!0;this.interceptors.request.forEach(function(E){typeof E.runWhen=="function"&&E.runWhen(n)===!1||(u=u&&E.synchronous,l.unshift(E.fulfilled,E.rejected))});const d=[];this.interceptors.response.forEach(function(E){d.push(E.fulfilled,E.rejected)});let m,g=0,_;if(!u){const w=[dispatchRequest.bind(this),void 0];for(w.unshift.apply(w,l),w.push.apply(w,d),_=w.length,m=Promise.resolve(n);g<_;)m=m.then(w[g++],w[g++]);return m}_=l.length;let v=n;for(g=0;g<_;){const w=l[g++],E=l[g++];try{v=w(v)}catch(x){E.call(this,x);break}}try{m=dispatchRequest.call(this,v)}catch(w){return Promise.reject(w)}for(g=0,_=d.length;g<_;)m=m.then(d[g++],d[g++]);return m}getUri(t){t=mergeConfig(this.defaults,t);const n=buildFullPath(t.baseURL,t.url);return buildURL(n,t.params,t.paramsSerializer)}}utils$1.forEach(["delete","get","head","options"],function(t){Axios.prototype[t]=function(n,i){return this.request(mergeConfig(i||{},{method:t,url:n,data:(i||{}).data}))}});utils$1.forEach(["post","put","patch"],function(t){function n(i){return function(a,o,l){return this.request(mergeConfig(l||{},{method:t,headers:i?{"Content-Type":"multipart/form-data"}:{},url:a,data:o}))}}Axios.prototype[t]=n(),Axios.prototype[t+"Form"]=n(!0)});const Axios$1=Axios;class CancelToken{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let n;this.promise=new Promise(function(a){n=a});const i=this;this.promise.then(r=>{if(!i._listeners)return;let a=i._listeners.length;for(;a-- >0;)i._listeners[a](r);i._listeners=null}),this.promise.then=r=>{let a;const o=new Promise(l=>{i.subscribe(l),a=l}).then(r);return o.cancel=function(){i.unsubscribe(a)},o},t(function(a,o,l){i.reason||(i.reason=new CanceledError(a,o,l),n(i.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new CancelToken(function(r){t=r}),cancel:t}}}const CancelToken$1=CancelToken;function spread(e){return function(n){return e.apply(null,n)}}function isAxiosError(e){return utils$1.isObject(e)&&e.isAxiosError===!0}const HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode).forEach(([e,t])=>{HttpStatusCode[t]=e});const HttpStatusCode$1=HttpStatusCode;function createInstance(e){const t=new Axios$1(e),n=bind$4(Axios$1.prototype.request,t);return utils$1.extend(n,Axios$1.prototype,t,{allOwnKeys:!0}),utils$1.extend(n,t,null,{allOwnKeys:!0}),n.create=function(r){return createInstance(mergeConfig(e,r))},n}const axios=createInstance(defaults$2);axios.Axios=Axios$1;axios.CanceledError=CanceledError;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel;axios.VERSION=VERSION$1;axios.toFormData=toFormData;axios.AxiosError=AxiosError;axios.Cancel=axios.CanceledError;axios.all=function(t){return Promise.all(t)};axios.spread=spread;axios.isAxiosError=isAxiosError;axios.mergeConfig=mergeConfig;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=e=>formDataToJSON(utils$1.isHTMLForm(e)?new FormData(e):e);axios.getAdapter=adapters$1.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;const axios$1=axios;var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var assign=make_assign(),create$2=make_create(),trim$1=make_trim(),Global$5=typeof window<"u"?window:commonjsGlobal,util$7={assign,create:create$2,trim:trim$1,bind:bind$3,slice:slice$2,each:each$9,map:map$2,pluck:pluck$1,isList:isList$1,isFunction:isFunction$5,isObject:isObject$b,Global:Global$5};function make_assign(){return Object.assign?Object.assign:function(t,n,i,r){for(var a=1;a"u"?null:console;if(e){var t=e.warn?e.warn:e.log;t.apply(e,arguments)}}function createStore(e,t,n){n||(n=""),e&&!isList(e)&&(e=[e]),t&&!isList(t)&&(t=[t]);var i=n?"__storejs_"+n+"_":"",r=n?new RegExp("^"+i):null,a=/^[a-zA-Z0-9_\-]*$/;if(!a.test(n))throw new Error("store.js namespaces can only have alphanumerics + underscores and dashes");var o={_namespacePrefix:i,_namespaceRegexp:r,_testStorage:function(u){try{var d="__storejs__test__";u.write(d,d);var m=u.read(d)===d;return u.remove(d),m}catch{return!1}},_assignPluginFnProp:function(u,d){var m=this[d];this[d]=function(){var _=slice$1(arguments,0),v=this;function w(){if(m)return each$8(arguments,function(x,M){_[M]=x}),m.apply(v,_)}var E=[w].concat(_);return u.apply(v,E)}},_serialize:function(u){return JSON.stringify(u)},_deserialize:function(u,d){if(!u)return d;var m="";try{m=JSON.parse(u)}catch{m=u}return m!==void 0?m:d},_addStorage:function(u){this.enabled||this._testStorage(u)&&(this.storage=u,this.enabled=!0)},_addPlugin:function(u){var d=this;if(isList(u)){each$8(u,function(_){d._addPlugin(_)});return}var m=pluck(this.plugins,function(_){return u===_});if(!m){if(this.plugins.push(u),!isFunction$4(u))throw new Error("Plugins must be function values that return objects");var g=u.call(this);if(!isObject$a(g))throw new Error("Plugins must return an object of function properties");each$8(g,function(_,v){if(!isFunction$4(_))throw new Error("Bad plugin property: "+v+" from plugin "+u.name+". Plugins should only return functions.");d._assignPluginFnProp(_,v)})}},addStorage:function(u){_warn("store.addStorage(storage) is deprecated. Use createStore([storages])"),this._addStorage(u)}},l=create$1(o,storeAPI,{plugins:[]});return l.raw={},each$8(l,function(u,d){isFunction$4(u)&&(l.raw[d]=bind$2(l,u))}),each$8(e,function(u){l._addStorage(u)}),each$8(t,function(u){l._addPlugin(u)}),l}var util$5=util$7,Global$4=util$5.Global,localStorage_1={name:"localStorage",read:read$6,write:write$6,each:each$7,remove:remove$5,clearAll:clearAll$5};function localStorage(){return Global$4.localStorage}function read$6(e){return localStorage().getItem(e)}function write$6(e,t){return localStorage().setItem(e,t)}function each$7(e){for(var t=localStorage().length-1;t>=0;t--){var n=localStorage().key(t);e(read$6(n),n)}}function remove$5(e){return localStorage().removeItem(e)}function clearAll$5(){return localStorage().clear()}var util$4=util$7,Global$3=util$4.Global,oldFFGlobalStorage={name:"oldFF-globalStorage",read:read$5,write:write$5,each:each$6,remove:remove$4,clearAll:clearAll$4},globalStorage=Global$3.globalStorage;function read$5(e){return globalStorage[e]}function write$5(e,t){globalStorage[e]=t}function each$6(e){for(var t=globalStorage.length-1;t>=0;t--){var n=globalStorage.key(t);e(globalStorage[n],n)}}function remove$4(e){return globalStorage.removeItem(e)}function clearAll$4(){each$6(function(e,t){delete globalStorage[e]})}var util$3=util$7,Global$2=util$3.Global,oldIEUserDataStorage={name:"oldIE-userDataStorage",write:write$4,read:read$4,each:each$5,remove:remove$3,clearAll:clearAll$3},storageName="storejs",doc$1=Global$2.document,_withStorageEl=_makeIEStorageElFunction(),disable=(Global$2.navigator?Global$2.navigator.userAgent:"").match(/ (MSIE 8|MSIE 9|MSIE 10)\./);function write$4(e,t){if(!disable){var n=fixKey(e);_withStorageEl(function(i){i.setAttribute(n,t),i.save(storageName)})}}function read$4(e){if(!disable){var t=fixKey(e),n=null;return _withStorageEl(function(i){n=i.getAttribute(t)}),n}}function each$5(e){_withStorageEl(function(t){for(var n=t.XMLDocument.documentElement.attributes,i=n.length-1;i>=0;i--){var r=n[i];e(t.getAttribute(r.name),r.name)}})}function remove$3(e){var t=fixKey(e);_withStorageEl(function(n){n.removeAttribute(t),n.save(storageName)})}function clearAll$3(){_withStorageEl(function(e){var t=e.XMLDocument.documentElement.attributes;e.load(storageName);for(var n=t.length-1;n>=0;n--)e.removeAttribute(t[n].name);e.save(storageName)})}var forbiddenCharsRegex=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g");function fixKey(e){return e.replace(/^\d/,"___$&").replace(forbiddenCharsRegex,"___")}function _makeIEStorageElFunction(){if(!doc$1||!doc$1.documentElement||!doc$1.documentElement.addBehavior)return null;var e="script",t,n,i;try{n=new ActiveXObject("htmlfile"),n.open(),n.write("<"+e+">document.w=window'),n.close(),t=n.w.frames[0].document,i=t.createElement("div")}catch{i=doc$1.createElement("div"),t=doc$1.body}return function(r){var a=[].slice.call(arguments,0);a.unshift(i),t.appendChild(i),i.addBehavior("#default#userData"),i.load(storageName),r.apply(this,a),t.removeChild(i)}}var util$2=util$7,Global$1=util$2.Global,trim=util$2.trim,cookieStorage={name:"cookieStorage",read:read$3,write:write$3,each:each$4,remove:remove$2,clearAll:clearAll$2},doc=Global$1.document;function read$3(e){if(!e||!_has(e))return null;var t="(?:^|.*;\\s*)"+escape(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";return unescape(doc.cookie.replace(new RegExp(t),"$1"))}function each$4(e){for(var t=doc.cookie.split(/; ?/g),n=t.length-1;n>=0;n--)if(trim(t[n])){var i=t[n].split("="),r=unescape(i[0]),a=unescape(i[1]);e(a,r)}}function write$3(e,t){e&&(doc.cookie=escape(e)+"="+escape(t)+"; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/")}function remove$2(e){!e||!_has(e)||(doc.cookie=escape(e)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/")}function clearAll$2(){each$4(function(e,t){remove$2(t)})}function _has(e){return new RegExp("(?:^|;\\s*)"+escape(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(doc.cookie)}var util$1=util$7,Global=util$1.Global,sessionStorage_1={name:"sessionStorage",read:read$2,write:write$2,each:each$3,remove:remove$1,clearAll:clearAll$1};function sessionStorage(){return Global.sessionStorage}function read$2(e){return sessionStorage().getItem(e)}function write$2(e,t){return sessionStorage().setItem(e,t)}function each$3(e){for(var t=sessionStorage().length-1;t>=0;t--){var n=sessionStorage().key(t);e(read$2(n),n)}}function remove$1(e){return sessionStorage().removeItem(e)}function clearAll$1(){return sessionStorage().clear()}var memoryStorage_1={name:"memoryStorage",read:read$1,write:write$1,each:each$2,remove,clearAll},memoryStorage={};function read$1(e){return memoryStorage[e]}function write$1(e,t){memoryStorage[e]=t}function each$2(e){for(var t in memoryStorage)memoryStorage.hasOwnProperty(t)&&e(memoryStorage[t],t)}function remove(e){delete memoryStorage[e]}function clearAll(e){memoryStorage={}}var all=[localStorage_1,oldFFGlobalStorage,oldIEUserDataStorage,cookieStorage,sessionStorage_1,memoryStorage_1],json2$1={},hasRequiredJson2;function requireJson2(){return hasRequiredJson2||(hasRequiredJson2=1,typeof JSON!="object"&&(JSON={}),function(){var rx_one=/^[\],:{}\s]*$/,rx_two=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,rx_three=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,rx_four=/(?:^|:|,)(?:\s*\[)+/g,rx_escapable=/[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,rx_dangerous=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;function f(e){return e<10?"0"+e:e}function this_value(){return this.valueOf()}typeof Date.prototype.toJSON!="function"&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},Boolean.prototype.toJSON=this_value,Number.prototype.toJSON=this_value,String.prototype.toJSON=this_value);var gap,indent,meta,rep;function quote(e){return rx_escapable.lastIndex=0,rx_escapable.test(e)?'"'+e.replace(rx_escapable,function(t){var n=meta[t];return typeof n=="string"?n:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function str(e,t){var n,i,r,a,o=gap,l,u=t[e];switch(u&&typeof u=="object"&&typeof u.toJSON=="function"&&(u=u.toJSON(e)),typeof rep=="function"&&(u=rep.call(t,e,u)),typeof u){case"string":return quote(u);case"number":return isFinite(u)?String(u):"null";case"boolean":case"null":return String(u);case"object":if(!u)return"null";if(gap+=indent,l=[],Object.prototype.toString.apply(u)==="[object Array]"){for(a=u.length,n=0;ne instanceof AxiosHeaders$1?e.toJSON():e;function mergeConfig(e,t){t=t||{};const n={};function i(h,m,g){return utils$1.isPlainObject(h)&&utils$1.isPlainObject(m)?utils$1.merge.call({caseless:g},h,m):utils$1.isPlainObject(m)?utils$1.merge({},m):utils$1.isArray(m)?m.slice():m}function r(h,m,g){if(utils$1.isUndefined(m)){if(!utils$1.isUndefined(h))return i(void 0,h,g)}else return i(h,m,g)}function a(h,m){if(!utils$1.isUndefined(m))return i(void 0,m)}function o(h,m){if(utils$1.isUndefined(m)){if(!utils$1.isUndefined(h))return i(void 0,h)}else return i(void 0,m)}function l(h,m,g){if(g in t)return i(h,m);if(g in e)return i(void 0,h)}const u={url:a,method:a,data:a,baseURL:o,transformRequest:o,transformResponse:o,paramsSerializer:o,timeout:o,timeoutMessage:o,withCredentials:o,withXSRFToken:o,adapter:o,responseType:o,xsrfCookieName:o,xsrfHeaderName:o,onUploadProgress:o,onDownloadProgress:o,decompress:o,maxContentLength:o,maxBodyLength:o,beforeRedirect:o,transport:o,httpAgent:o,httpsAgent:o,cancelToken:o,socketPath:o,responseEncoding:o,validateStatus:l,headers:(h,m)=>r(headersToObject(h),headersToObject(m),!0)};return utils$1.forEach(Object.keys(Object.assign({},e,t)),function(m){const g=u[m]||r,_=g(e[m],t[m],m);utils$1.isUndefined(_)&&g!==l||(n[m]=_)}),n}const VERSION$1="1.6.3",validators$1={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{validators$1[e]=function(i){return typeof i===e||"a"+(t<1?"n ":" ")+e}});const deprecatedWarnings={};validators$1.transitional=function(t,n,i){function r(a,o){return"[Axios v"+VERSION$1+"] Transitional option '"+a+"'"+o+(i?". "+i:"")}return(a,o,l)=>{if(t===!1)throw new AxiosError(r(o," has been removed"+(n?" in "+n:"")),AxiosError.ERR_DEPRECATED);return n&&!deprecatedWarnings[o]&&(deprecatedWarnings[o]=!0,console.warn(r(o," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(a,o,l):!0}};function assertOptions(e,t,n){if(typeof e!="object")throw new AxiosError("options must be an object",AxiosError.ERR_BAD_OPTION_VALUE);const i=Object.keys(e);let r=i.length;for(;r-- >0;){const a=i[r],o=t[a];if(o){const l=e[a],u=l===void 0||o(l,a,e);if(u!==!0)throw new AxiosError("option "+a+" must be "+u,AxiosError.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new AxiosError("Unknown option "+a,AxiosError.ERR_BAD_OPTION)}}const validator={assertOptions,validators:validators$1},validators=validator.validators;class Axios{constructor(t){this.defaults=t,this.interceptors={request:new InterceptorManager$1,response:new InterceptorManager$1}}request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=mergeConfig(this.defaults,n);const{transitional:i,paramsSerializer:r,headers:a}=n;i!==void 0&&validator.assertOptions(i,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),r!=null&&(utils$1.isFunction(r)?n.paramsSerializer={serialize:r}:validator.assertOptions(r,{encode:validators.function,serialize:validators.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let o=a&&utils$1.merge(a.common,a[n.method]);a&&utils$1.forEach(["delete","get","head","post","put","patch","common"],w=>{delete a[w]}),n.headers=AxiosHeaders$1.concat(o,a);const l=[];let u=!0;this.interceptors.request.forEach(function($){typeof $.runWhen=="function"&&$.runWhen(n)===!1||(u=u&&$.synchronous,l.unshift($.fulfilled,$.rejected))});const h=[];this.interceptors.response.forEach(function($){h.push($.fulfilled,$.rejected)});let m,g=0,_;if(!u){const w=[dispatchRequest.bind(this),void 0];for(w.unshift.apply(w,l),w.push.apply(w,h),_=w.length,m=Promise.resolve(n);g<_;)m=m.then(w[g++],w[g++]);return m}_=l.length;let v=n;for(g=0;g<_;){const w=l[g++],$=l[g++];try{v=w(v)}catch(x){$.call(this,x);break}}try{m=dispatchRequest.call(this,v)}catch(w){return Promise.reject(w)}for(g=0,_=h.length;g<_;)m=m.then(h[g++],h[g++]);return m}getUri(t){t=mergeConfig(this.defaults,t);const n=buildFullPath(t.baseURL,t.url);return buildURL(n,t.params,t.paramsSerializer)}}utils$1.forEach(["delete","get","head","options"],function(t){Axios.prototype[t]=function(n,i){return this.request(mergeConfig(i||{},{method:t,url:n,data:(i||{}).data}))}});utils$1.forEach(["post","put","patch"],function(t){function n(i){return function(a,o,l){return this.request(mergeConfig(l||{},{method:t,headers:i?{"Content-Type":"multipart/form-data"}:{},url:a,data:o}))}}Axios.prototype[t]=n(),Axios.prototype[t+"Form"]=n(!0)});const Axios$1=Axios;class CancelToken{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let n;this.promise=new Promise(function(a){n=a});const i=this;this.promise.then(r=>{if(!i._listeners)return;let a=i._listeners.length;for(;a-- >0;)i._listeners[a](r);i._listeners=null}),this.promise.then=r=>{let a;const o=new Promise(l=>{i.subscribe(l),a=l}).then(r);return o.cancel=function(){i.unsubscribe(a)},o},t(function(a,o,l){i.reason||(i.reason=new CanceledError(a,o,l),n(i.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new CancelToken(function(r){t=r}),cancel:t}}}const CancelToken$1=CancelToken;function spread(e){return function(n){return e.apply(null,n)}}function isAxiosError(e){return utils$1.isObject(e)&&e.isAxiosError===!0}const HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode).forEach(([e,t])=>{HttpStatusCode[t]=e});const HttpStatusCode$1=HttpStatusCode;function createInstance(e){const t=new Axios$1(e),n=bind$4(Axios$1.prototype.request,t);return utils$1.extend(n,Axios$1.prototype,t,{allOwnKeys:!0}),utils$1.extend(n,t,null,{allOwnKeys:!0}),n.create=function(r){return createInstance(mergeConfig(e,r))},n}const axios=createInstance(defaults$2);axios.Axios=Axios$1;axios.CanceledError=CanceledError;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel;axios.VERSION=VERSION$1;axios.toFormData=toFormData;axios.AxiosError=AxiosError;axios.Cancel=axios.CanceledError;axios.all=function(t){return Promise.all(t)};axios.spread=spread;axios.isAxiosError=isAxiosError;axios.mergeConfig=mergeConfig;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=e=>formDataToJSON(utils$1.isHTMLForm(e)?new FormData(e):e);axios.getAdapter=adapters$1.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;const axios$1=axios;var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var assign=make_assign(),create$2=make_create(),trim$1=make_trim(),Global$5=typeof window<"u"?window:commonjsGlobal,util$7={assign,create:create$2,trim:trim$1,bind:bind$3,slice:slice$2,each:each$9,map:map$2,pluck:pluck$1,isList:isList$1,isFunction:isFunction$5,isObject:isObject$b,Global:Global$5};function make_assign(){return Object.assign?Object.assign:function(t,n,i,r){for(var a=1;a"u"?null:console;if(e){var t=e.warn?e.warn:e.log;t.apply(e,arguments)}}function createStore(e,t,n){n||(n=""),e&&!isList(e)&&(e=[e]),t&&!isList(t)&&(t=[t]);var i=n?"__storejs_"+n+"_":"",r=n?new RegExp("^"+i):null,a=/^[a-zA-Z0-9_\-]*$/;if(!a.test(n))throw new Error("store.js namespaces can only have alphanumerics + underscores and dashes");var o={_namespacePrefix:i,_namespaceRegexp:r,_testStorage:function(u){try{var h="__storejs__test__";u.write(h,h);var m=u.read(h)===h;return u.remove(h),m}catch{return!1}},_assignPluginFnProp:function(u,h){var m=this[h];this[h]=function(){var _=slice$1(arguments,0),v=this;function w(){if(m)return each$8(arguments,function(x,M){_[M]=x}),m.apply(v,_)}var $=[w].concat(_);return u.apply(v,$)}},_serialize:function(u){return JSON.stringify(u)},_deserialize:function(u,h){if(!u)return h;var m="";try{m=JSON.parse(u)}catch{m=u}return m!==void 0?m:h},_addStorage:function(u){this.enabled||this._testStorage(u)&&(this.storage=u,this.enabled=!0)},_addPlugin:function(u){var h=this;if(isList(u)){each$8(u,function(_){h._addPlugin(_)});return}var m=pluck(this.plugins,function(_){return u===_});if(!m){if(this.plugins.push(u),!isFunction$4(u))throw new Error("Plugins must be function values that return objects");var g=u.call(this);if(!isObject$a(g))throw new Error("Plugins must return an object of function properties");each$8(g,function(_,v){if(!isFunction$4(_))throw new Error("Bad plugin property: "+v+" from plugin "+u.name+". Plugins should only return functions.");h._assignPluginFnProp(_,v)})}},addStorage:function(u){_warn("store.addStorage(storage) is deprecated. Use createStore([storages])"),this._addStorage(u)}},l=create$1(o,storeAPI,{plugins:[]});return l.raw={},each$8(l,function(u,h){isFunction$4(u)&&(l.raw[h]=bind$2(l,u))}),each$8(e,function(u){l._addStorage(u)}),each$8(t,function(u){l._addPlugin(u)}),l}var util$5=util$7,Global$4=util$5.Global,localStorage_1={name:"localStorage",read:read$6,write:write$6,each:each$7,remove:remove$5,clearAll:clearAll$5};function localStorage(){return Global$4.localStorage}function read$6(e){return localStorage().getItem(e)}function write$6(e,t){return localStorage().setItem(e,t)}function each$7(e){for(var t=localStorage().length-1;t>=0;t--){var n=localStorage().key(t);e(read$6(n),n)}}function remove$5(e){return localStorage().removeItem(e)}function clearAll$5(){return localStorage().clear()}var util$4=util$7,Global$3=util$4.Global,oldFFGlobalStorage={name:"oldFF-globalStorage",read:read$5,write:write$5,each:each$6,remove:remove$4,clearAll:clearAll$4},globalStorage=Global$3.globalStorage;function read$5(e){return globalStorage[e]}function write$5(e,t){globalStorage[e]=t}function each$6(e){for(var t=globalStorage.length-1;t>=0;t--){var n=globalStorage.key(t);e(globalStorage[n],n)}}function remove$4(e){return globalStorage.removeItem(e)}function clearAll$4(){each$6(function(e,t){delete globalStorage[e]})}var util$3=util$7,Global$2=util$3.Global,oldIEUserDataStorage={name:"oldIE-userDataStorage",write:write$4,read:read$4,each:each$5,remove:remove$3,clearAll:clearAll$3},storageName="storejs",doc$1=Global$2.document,_withStorageEl=_makeIEStorageElFunction(),disable=(Global$2.navigator?Global$2.navigator.userAgent:"").match(/ (MSIE 8|MSIE 9|MSIE 10)\./);function write$4(e,t){if(!disable){var n=fixKey(e);_withStorageEl(function(i){i.setAttribute(n,t),i.save(storageName)})}}function read$4(e){if(!disable){var t=fixKey(e),n=null;return _withStorageEl(function(i){n=i.getAttribute(t)}),n}}function each$5(e){_withStorageEl(function(t){for(var n=t.XMLDocument.documentElement.attributes,i=n.length-1;i>=0;i--){var r=n[i];e(t.getAttribute(r.name),r.name)}})}function remove$3(e){var t=fixKey(e);_withStorageEl(function(n){n.removeAttribute(t),n.save(storageName)})}function clearAll$3(){_withStorageEl(function(e){var t=e.XMLDocument.documentElement.attributes;e.load(storageName);for(var n=t.length-1;n>=0;n--)e.removeAttribute(t[n].name);e.save(storageName)})}var forbiddenCharsRegex=new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]","g");function fixKey(e){return e.replace(/^\d/,"___$&").replace(forbiddenCharsRegex,"___")}function _makeIEStorageElFunction(){if(!doc$1||!doc$1.documentElement||!doc$1.documentElement.addBehavior)return null;var e="script",t,n,i;try{n=new ActiveXObject("htmlfile"),n.open(),n.write("<"+e+">document.w=window'),n.close(),t=n.w.frames[0].document,i=t.createElement("div")}catch{i=doc$1.createElement("div"),t=doc$1.body}return function(r){var a=[].slice.call(arguments,0);a.unshift(i),t.appendChild(i),i.addBehavior("#default#userData"),i.load(storageName),r.apply(this,a),t.removeChild(i)}}var util$2=util$7,Global$1=util$2.Global,trim=util$2.trim,cookieStorage={name:"cookieStorage",read:read$3,write:write$3,each:each$4,remove:remove$2,clearAll:clearAll$2},doc=Global$1.document;function read$3(e){if(!e||!_has(e))return null;var t="(?:^|.*;\\s*)"+escape(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";return unescape(doc.cookie.replace(new RegExp(t),"$1"))}function each$4(e){for(var t=doc.cookie.split(/; ?/g),n=t.length-1;n>=0;n--)if(trim(t[n])){var i=t[n].split("="),r=unescape(i[0]),a=unescape(i[1]);e(a,r)}}function write$3(e,t){e&&(doc.cookie=escape(e)+"="+escape(t)+"; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/")}function remove$2(e){!e||!_has(e)||(doc.cookie=escape(e)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/")}function clearAll$2(){each$4(function(e,t){remove$2(t)})}function _has(e){return new RegExp("(?:^|;\\s*)"+escape(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=").test(doc.cookie)}var util$1=util$7,Global=util$1.Global,sessionStorage_1={name:"sessionStorage",read:read$2,write:write$2,each:each$3,remove:remove$1,clearAll:clearAll$1};function sessionStorage(){return Global.sessionStorage}function read$2(e){return sessionStorage().getItem(e)}function write$2(e,t){return sessionStorage().setItem(e,t)}function each$3(e){for(var t=sessionStorage().length-1;t>=0;t--){var n=sessionStorage().key(t);e(read$2(n),n)}}function remove$1(e){return sessionStorage().removeItem(e)}function clearAll$1(){return sessionStorage().clear()}var memoryStorage_1={name:"memoryStorage",read:read$1,write:write$1,each:each$2,remove,clearAll},memoryStorage={};function read$1(e){return memoryStorage[e]}function write$1(e,t){memoryStorage[e]=t}function each$2(e){for(var t in memoryStorage)memoryStorage.hasOwnProperty(t)&&e(memoryStorage[t],t)}function remove(e){delete memoryStorage[e]}function clearAll(e){memoryStorage={}}var all=[localStorage_1,oldFFGlobalStorage,oldIEUserDataStorage,cookieStorage,sessionStorage_1,memoryStorage_1],json2$1={},hasRequiredJson2;function requireJson2(){return hasRequiredJson2||(hasRequiredJson2=1,typeof JSON!="object"&&(JSON={}),function(){var rx_one=/^[\],:{}\s]*$/,rx_two=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,rx_three=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,rx_four=/(?:^|:|,)(?:\s*\[)+/g,rx_escapable=/[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,rx_dangerous=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;function f(e){return e<10?"0"+e:e}function this_value(){return this.valueOf()}typeof Date.prototype.toJSON!="function"&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null},Boolean.prototype.toJSON=this_value,Number.prototype.toJSON=this_value,String.prototype.toJSON=this_value);var gap,indent,meta,rep;function quote(e){return rx_escapable.lastIndex=0,rx_escapable.test(e)?'"'+e.replace(rx_escapable,function(t){var n=meta[t];return typeof n=="string"?n:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function str(e,t){var n,i,r,a,o=gap,l,u=t[e];switch(u&&typeof u=="object"&&typeof u.toJSON=="function"&&(u=u.toJSON(e)),typeof rep=="function"&&(u=rep.call(t,e,u)),typeof u){case"string":return quote(u);case"number":return isFinite(u)?String(u):"null";case"boolean":case"null":return String(u);case"object":if(!u)return"null";if(gap+=indent,l=[],Object.prototype.toString.apply(u)==="[object Array]"){for(a=u.length,n=0;nlastFlushedIndex&&queue.splice(t,1)}function queueFlush(){!flushing&&!flushPending&&(flushPending=!0,queueMicrotask(flushJobs))}function flushJobs(){flushPending=!1,flushing=!0;for(let e=0;ee.effect(t,{scheduler:n=>{shouldSchedule?scheduler(n):n()}}),raw=e.raw}function overrideEffect(e){effect$3=e}function elementBoundEffect(e){let t=()=>{};return[i=>{let r=effect$3(i);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(a=>a())}),e._x_effects.add(r),t=()=>{r!==void 0&&(e._x_effects.delete(r),release(r))},r},()=>{t()}]}function dispatch(e,t,n={}){e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0,cancelable:!0}))}function walk(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(r=>walk(r,t));return}let n=!1;if(t(e,()=>n=!0),n)return;let i=e.firstElementChild;for(;i;)walk(i,t),i=i.nextElementSibling}function warn(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var started=!1;function start$1(){started&&warn("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),started=!0,document.body||warn("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `