UNPKG

@odoo/o-spreadsheet

Version:
1 lines 839 kB
!function(e){"use strict";class t{scope;code="";constructor(e=new n){this.scope=e}append(...e){this.code+=e.map(e=>e.toString()).join("\n")+"\n"}return(e){return new r(this.scope,this.code,e)}toString(){return o(this.code)}}class r{scope;returnExpression;code;constructor(e,t,r){this.scope=e,this.returnExpression=r,this.code=o(t)}toString(){return this.code}assignResultToVariable(){if(this.scope.isAlreadyDeclared(this.returnExpression))return this;const e=this.scope.nextVariableName(),r=new t(this.scope);return r.append(this.code),r.append(`const ${e} = ${this.returnExpression};`),r.return(e)}}class n{nextId=1;declaredVariables=new Set;nextVariableName(){const e="_"+this.nextId++;return this.declaredVariables.add(e),e}isAlreadyDeclared(e){return this.declaredVariables.has(e)}}function o(e){let t="",r=0;const n=e.split("\n").map(e=>e.trim()).filter(e=>""!==e);for(const e of n)e.startsWith("}")&&r--,t+="\t".repeat(r)+e+"\n",e.endsWith("{")&&r++;return t.trim()}const s=/(.*?)\((.*?)\)(.*)/,i=["ANY","BOOLEAN","DATE","NUMBER","STRING","RANGE","RANGE<BOOLEAN>","RANGE<DATE>","RANGE<NUMBER>","RANGE<STRING>","META","RANGE<META>"];function a(e,t="",r){return function(e,t,r){const n=e.match(s),o=n[1].trim();if(!o)throw new Error(`Function argument definition is missing a name: '${e}'.`);const a=[];let l,c=!1,u=!1;for(const e of n[2].split(",")){const t=e.trim().toUpperCase(),r=i.find(e=>t===e);r?a.push(r):"RANGE<ANY>"===t?a.push("RANGE"):"OPTIONAL"===t?c=!0:"REPEATING"===t?u=!0:t.startsWith("DEFAULT=")&&(l=e.trim().slice(8))}const h={name:o,description:t,type:a};(a.includes("ANY")||a.includes("RANGE"))&&(h.acceptErrors=!0);c&&(h.optional=!0);u&&(h.repeating=!0);void 0!==l&&(h.default=!0,h.defaultValue=l);a.some(e=>e.startsWith("RANGE"))&&(h.acceptMatrix=!0);a.every(e=>e.startsWith("RANGE"))&&(h.acceptMatrixOnly=!0);r&&r.length>0&&(h.proposalValues=r);return h}(e,t,r)}const l={};function c(e,t){const r=e.name,n=l[r]?.[t];return n||(l[r]||(l[r]={}),l[r][t]||(l[r][t]=function(e,t){const r={},n=e.nbrArgRepeating?Math.floor((t-e.minArgRequired)/e.nbrArgRepeating):0,o=e.nbrArgRepeating*n,s=t-e.minArgRequired-o;let i=0,a=0;for(let t=0;t<e.args.length;t++){const o=e.args[t];if(!o.optional&&!o.default||o.repeating){if(o.repeating){const s=o.optional?0:1;for(let o=0;o<n+s;o++)for(let n=0;n<e.nbrArgRepeating;n++)r[i]={index:t+n,repeatingGroupIndex:o},i++;t+=e.nbrArgRepeating-1;continue}r[i]={index:t},i++}else a<s&&(r[i]={index:t},i++),a++}return e=>r[e]}(e,t)),l[r][t])}const u=["META","RANGE<META>"];let h=class{content={};add(e,t){if(e in this.content)throw new Error(`${e} is already present in this registry!`);return this.replace(e,t)}replace(e,t){return this.content[e]=t,this}get(e){const t=this.content[e];if(!t&&!(e in this.content))throw new Error(`Cannot find ${e} in this registry!`);return t}contains(e){return e in this.content}getAll(){return Object.values(this.content)}getKeys(){return Object.keys(this.content)}remove(e){delete this.content[e]}};const d=e=>e,f=()=>!1;let g=d,m=f;function p(e,...t){if(1!==t.length||"object"!=typeof t[0]||t[0]instanceof String)t.length>0&&(e=e.replace(/\%s/g,()=>t.shift()));else{const r=t[0];e=e.replace(/\%\(([^\)]+)\)s/g,(e,t)=>r[t])}return e}function b(){g===d&&m===f&&(m=()=>!0)}const v=function(e,...t){return m()?p(g(e),...t):new y(e,t)};class y extends String{values;constructor(e,t){super(e),this.values=t}valueOf(){const e=super.valueOf();return m()?p(g(e),...this.values):p(e,...this.values)}toString(){return this.valueOf()}}const E={NotAvailable:"#N/A",InvalidReference:"#REF",BadExpression:"#BAD_EXPR",CircularDependency:"#CYCLE",UnknownFunction:"#NAME?",DivisionByZero:"#DIV/0!",InvalidNumber:"#NUM!",SpilledBlocked:"#SPILL!",GenericError:"#ERROR",NullError:"#NULL!"},w=new Set(Object.values(E));class S{message;value;constructor(e=v("Error"),t=E.GenericError){this.message=e,this.value=t,this.message=e.toString()}}class C extends S{constructor(e=v("Invalid expression")){super(e,E.BadExpression)}}class T extends S{constructor(e=v("Circular reference")){super(e,E.CircularDependency)}}class I extends S{constructor(e=v("Invalid reference")){super(e,E.InvalidReference)}}class x extends S{constructor(e=v("Data not available")){super(e,E.NotAvailable)}}class R extends S{constructor(e=v("Unknown function")){super(e,E.UnknownFunction)}}class A extends S{constructor(e=v("Spill range is not empty")){super(e,E.SpilledBlocked)}}class O extends S{constructor(e=v("Division by zero")){super(e,E.DivisionByZero)}}class _ extends S{constructor(e=v("Number too large")){super(e,E.InvalidNumber)}}function D(e){return Array.isArray(e)&&Array.isArray(e[0])}var F;e.DIRECTION=void 0,(F=e.DIRECTION||(e.DIRECTION={})).UP="up",F.DOWN="down",F.LEFT="left",F.RIGHT="right";const N="#017E84",M="#3266ca",V="#FFFFFF",L=N,P="#111827",k="#E7E9ED",U="#374151C2",H=N,B=20,z=16,$=["#000000","#434343","#666666","#999999","#B7B7B7","#CCCCCC","#D9D9D9","#EFEFEF","#F3F3F3","#FFFFFF","#980000","#FF0000","#FF9900","#FFFF00","#00FF00","#00FFFF","#4A86E8","#0000FF","#9900FF","#FF00FF","#E6B8AF","#F4CCCC","#FCE5CD","#FFF2CC","#D9EAD3","#D0E0E3","#C9DAF8","#CFE2F3","#D9D2E9","#EAD1DC","#DD7E6B","#EA9999","#F9CB9C","#FFE599","#B6D7A8","#A2C4C9","#A4C2F4","#9FC5E8","#B4A7D6","#D5A6BD","#CC4125","#E06666","#F6B26B","#FFD966","#93C47D","#76A5AF","#6D9EEB","#6FA8DC","#8E7CC3","#C27BA0","#A61C00","#CC0000","#E69138","#F1C232","#6AA84F","#45818E","#3C78D8","#3D85C6","#674EA7","#A64D79","#85200C","#990000","#B45F06","#BF9000","#38761D","#134F5C","#1155CC","#0B5394","#351C75","#741B47","#5B0F00","#660000","#783F04","#7F6000","#274E13","#0C343D","#1C4587","#073763","#20124D","#4C1130"],G=23,W="bottom",q=10,Z="'Roboto', arial",Y="START_REVISION",j="??",X=/'|\*|\?|\/|\\|\[|\]/,K="|";const Q="\n",J={hasFilters:!1,totalRow:!1,firstColumn:!0,lastColumn:!1,numberOfHeaders:1,bandedRows:!0,bandedColumns:!1,styleId:"TableStyleMedium5",automaticAutofill:!1},ee=new RegExp(X,"g");function te(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function re(e){switch(typeof e){case"object":{if(null===e)return e;if(function(e){return"clone"in e&&e.clone instanceof Function}(e))return e.clone();if(!(function(e){return"object"==typeof e&&null!==e&&(e?.constructor===Object||void 0===e?.constructor)}(e)||e instanceof Array))throw new Error("Unsupported type: only objects and arrays are supported");const t=Array.isArray(e)?new Array(e.length):{};if(Array.isArray(e))for(let r=0,n=e.length;r<n;r++)r in e&&(t[r]=re(e[r]));else for(const r in e)t[r]=re(e[r]);return t}case"number":case"string":case"boolean":case"function":case"undefined":return e;default:throw new Error("Unsupported type: "+typeof e)}}function ne(e){return oe(e,"'")}function oe(e,t='"'){return e.startsWith(t)&&(e=e.slice(1)),e.endsWith(t)&&(e=e.slice(0,-1)),e}function se(e){return e.match(/\w/g)?.length!==e.length&&(e=`'${e}'`),e}function ie(e,t=" "){return e.replace(ee,t)}function ae(e,t,r){return e<t?t:e>r?r:e}function le(e,t,r=1){if(t<=e&&r>0)return[];if(0===r)throw new Error("range() step must not be zero");const n=Math.ceil(Math.abs((t-e)/r)),o=Array(n);for(let t=0;t<n;t++)o[t]=e+t*r;return o}function ce(e){return e.reduce((e,t,r,n)=>{if(1===Math.abs(t-n[r-1])){e[e.length-1].push(t)}else e.push([t]);return e},[])}function*ue(e,t){t.next();for(const r of e){const e=t.next();yield{...r,next:e.done?void 0:e.value}}}function he(e){const t=e.toUpperCase();return"TRUE"===t||"FALSE"===t}const de=/^\[(.+)\]\((.+)\)$/,fe=/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/;function ge(e){return de.test(e)}function me(e){return fe.test(e)}function pe(e,t){return`[${e}](${t})`}function be(e){const t=e.match(de)||[],r=t[1],n=t[2];if(!r||!n)throw new Error(`Could not parse markdown link ${e}.`);return{label:r,url:n}}const ve="o-spreadsheet://";function ye(e){return e.startsWith(ve)}function Ee(e){return`${ve}${e}`}function we(e){if(e.startsWith(ve))return e.slice(16);throw new Error(`${e} is not a valid sheet link`)}function Se(e){return void 0!==e}function Ce(e){return void 0===e||Object.values(e).every(e=>"object"==typeof e?Ce(e):!e)}function Te(e,t,r){let n,o=!1;const s=function(){const s=this,i=Array.from(arguments);if(!o&&r)return o=!0,e.apply(s,i);clearTimeout(n),n=setTimeout(function(){n=void 0,o=!1,e.apply(s,i)},t)};return s.isDebouncePending=()=>void 0!==n,s.stopDebounce=()=>{clearTimeout(n)},s}function Ie(e){let t="";for(let r=0,n=e.length;r<n;r++)t+=e[r];return t}function xe(e){let t,r=!1;const n=()=>(r||(t=e instanceof Function?e():e,r=!0),t);return n.map=e=>xe(()=>e(n())),n}function Re(e,t){return"after"===e?t+1:t}function Ae(...e){if(e.length<=1)return!0;for(let t=1;t<e.length;t++)if(!Oe(e[0],e[t]))return!1;return!0}function Oe(e,t){if(e===t)return!0;if(e&&!t||t&&!e)return!1;if(typeof e!=typeof t)return!1;if("object"!=typeof e)return!1;for(const r in t)if(!(r in e)&&void 0!==t[r])return!1;for(const r in e){if(typeof e[r]!=typeof t[r])return!1;if("object"==typeof e[r]){if(!Oe(e[r],t[r]))return!1}else if(e[r]!==t[r])return!1}return!0}function _e(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!Ae(e[r],t[r]))return!1;return!0}function De(e,t){if(e.length<t.length)return!1;const r=new Set(e);return t.every(e=>r.has(e))}function Fe(e){if(!e)return e;const t={...e};return Object.keys(t).forEach(e=>!t[e]&&delete t[e]),t}const Ne=["\t","\f","\v",String.fromCharCode(parseInt("00a0",16)),String.fromCharCode(parseInt("1680",16)),String.fromCharCode(parseInt("2000",16)),String.fromCharCode(parseInt("200a",16)),String.fromCharCode(parseInt("2028",16)),String.fromCharCode(parseInt("2029",16)),String.fromCharCode(parseInt("202f",16)),String.fromCharCode(parseInt("205f",16)),String.fromCharCode(parseInt("3000",16)),String.fromCharCode(parseInt("feff",16))],Me=new RegExp(Ne.join("|"),"g"),Ve=/(\r\n|\r)/g,Le=Ne.concat([" "]);function Pe(e){return e?e.replace(Ve,Q):""}function ke(e){const t=Array.from(e).sort((e,t)=>e-t);for(let e=1;e<t.length;e++)if(t[e]-t[e-1]!==1)return!1;return!0}function Ue(e){const t=new Map,r=e.name?e.name+" (memoized)":"memoized";return{[r]:(...r)=>(t.has(r[0])||t.set(r[0],e(...r)),t.get(r[0]))}[r]}function He(e,t){const r=new Set(t),n=[];for(let t=0;t<e.length;t++)r.has(t)||n.push(e[t]);return n}function Be(e,t,r){return e.slice(0,r).concat(t).concat(e.slice(r))}function ze(e,t,r){const n=[...e];return n[r]=t,n}function $e(e){return e.split("\n").map(e=>e.replace(/\s+/g," ").trim()).join("\n")}function Ge(e,t,r){return t>r?Ge(e,r,t):e>=t&&e<=r}function We(e){let t=e.length;if(t<1e5)return Math.max(...e);let r=-1/0;for(;t--;)r=e[t]>r?e[t]:r;return r}function qe(e){let t=e.length;if(t<1e5)return Math.min(...e);let r=1/0;for(;t--;)r=e[t]<r?e[t]:r;return r}class Ze{text;currentIndex=0;current;constructor(e){this.text=e,this.current=e[0]}shift(){const e=this.current,t=this.text[++this.currentIndex];return this.current=t,e}advanceBy(e){this.currentIndex+=e,this.current=this.text[this.currentIndex]}isOver(){return this.currentIndex>=this.text.length}remaining(){return this.text.substring(this.currentIndex)}currentStartsWith(e){if(this.current!==e[0])return!1;for(let t=1;t<e.length;t++)if(this.text[this.currentIndex+t]!==e[t])return!1;return!0}}function Ye(e,t=e=>e){const r=new Set;return e.filter(e=>{const n=t(e);return!r.has(n)&&(r.add(n),!0)})}function je(e){const t={};for(const r in e)for(const n in e[r])t[n]||(t[n]={}),t[n][r]=e[r][n];return t}function Xe(e,t,r={}){const n=r.compute??((e,t)=>`${e} (${t})`),o=r.computeFirstOne??!1;let s=r.start??1,i=o?n(e,s):e;for(;t.includes(i);)i=n(e,s++);return i}function Ke(e){return e.startsWith("=")||e.startsWith("+")}class Qe{jsDate;constructor(e,t,r,n=0,o=0,s=0){this.jsDate=new Date(Date.UTC(e,t,r,n,o,s,0))}static fromTimestamp(e){const t=new Date(e);return new Qe(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds())}static now(){const e=new Date;return new Qe(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds())}toString(){return this.jsDate.toString()}toLocaleDateString(){return this.jsDate.toLocaleDateString()}getTime(){return this.jsDate.getTime()}getFullYear(){return this.jsDate.getUTCFullYear()}getMonth(){return this.jsDate.getUTCMonth()}getQuarter(){return Math.floor(this.getMonth()/3)+1}getDate(){return this.jsDate.getUTCDate()}getDay(){return this.jsDate.getUTCDay()}getHours(){return this.jsDate.getUTCHours()}getMinutes(){return this.jsDate.getUTCMinutes()}getSeconds(){return this.jsDate.getUTCSeconds()}getIsoWeek(){const e=new Date(this.jsDate.getTime()),t=e.getUTCDay()||7;e.setUTCDate(e.getUTCDate()+4-t);const r=new Date(Date.UTC(e.getUTCFullYear(),0,1));return Math.ceil(((e.getTime()-r.getTime())/864e5+1)/7)}setFullYear(e){return this.jsDate.setUTCFullYear(e)}setMonth(e){return this.jsDate.setUTCMonth(e)}setDate(e){return this.jsDate.setUTCDate(e)}setHours(e){return this.jsDate.setUTCHours(e)}setMinutes(e){return this.jsDate.setUTCMinutes(e)}setSeconds(e){return this.jsDate.setUTCSeconds(e)}}const Je=new Qe(1899,11,30),et=864e5,tt=2e3,rt=Qe.now().getFullYear(),nt=Qe.now().getMonth(),ot=Qe.fromTimestamp(0).getTime()-Je.getTime(),st=/^\d{1,2}(\/|-|\s)\d{1,2}((\/|-|\s)\d{1,4})?$/,it=/^\d{3,4}(\/|-|\s)\d{1,2}(\/|-|\s)\d{1,2}$/,at=Le.join(""),lt=new RegExp(`/|-|${Le.join("|")}`),ct=new RegExp(`^(\\d{1,4})[/${at}-](\\d{1,4})([/${at}-](\\d{1,4}))?$`),ut=/((\d+(:\d+)?(:\d+)?\s*(AM|PM))|(\d+:\d+(:\d+)?))$/;function ht(e,t){switch(typeof e){case"number":return e;case"string":return dt(e,t)?gt(e,t)?.value:!e||isNaN(Number(e))?void 0:Number(e);default:return}}function dt(e,t){return null!==gt(e,t)}const ft=new Map;function gt(e,t){return ft.has(t)||ft.set(t,new Map),ft.get(t).has(e)||ft.get(t).set(e,function(e,t){e=e.trim();let r=null;const n=e.match(ut);if(n){if(r=function(e){if(e=e.trim(),ut.test(e)){const t=/AM/i.test(e),r=/PM/i.test(e),n=(t||r?e.substring(0,e.length-2).trim():e).split(/:/),o=n.length>=2,s=3===n.length;let i=Number(n[0]),a=o?Number(n[1]):0,l=s?Number(n[2]):0,c=s?"hh:mm:ss":"hh:mm";if(t||r)c+=" a";else if(!o)return null;i>=12&&t?i-=12:i<12&&r&&(i+=12),a+=Math.floor(l/60),l%=60,i+=Math.floor(a/60),a%=60,i>=24&&(c="hhhh:mm:ss");return{value:i/24+a/1440+l/86400,format:c,jsDate:new Qe(1899,11,30,i,a,l)}}return null}(n[0]),null===r)return null;e=e.replace(n[0],"").trim()}let o=null;const s=function(e,t){const r=e.match(ct);if(!r)return null;const[,n,o,,s]=r;if(n.length>2&&s&&s.length>2)return null;if(n.length>2)return{year:n,month:o,day:s,dateString:e,type:"ymd"};const i=function(e){switch(e.dateFormat[0]){case"d":return"dmy";case"m":return"mdy";case"y":return"ymd"}throw new Error("Invalid date format in locale")}(t);if(!s)return o.length>2?{month:n,year:o,day:void 0,dateString:e,type:i}:"dmy"===i?{day:n,month:o,year:s,dateString:e,type:"dmy"}:{month:n,day:o,year:s,dateString:e,type:"mdy"};if(s.length>2)return"mdy"===i?{month:n,day:o,year:s,dateString:e,type:"mdy"}:{day:n,month:o,year:s,dateString:e,type:"dmy"};if("mdy"===i)return{month:n,day:o,year:s,dateString:e,type:"mdy"};if("ymd"===i)return{year:n,month:o,day:s,dateString:e,type:"ymd"};if("dmy"===i)return{day:n,month:o,year:s,dateString:e,type:"dmy"};return null}(e,t);if(s){const t=s.dateString.match(lt)[0];if(o=function(e,t){const{year:r,month:n,day:o}=e,s=function(e){if(!e)return nt;const t=Number(e);if(t>=1&&t<=12)return t-1;return null}(n),i=function(e){if(!e)return 1;const t=Number(e);if(t>=0&&t<=31)return t;return null}(o),a=function(e){if(!e)return rt;const t=Number(e);switch(e.length){case 1:return tt+t;case 2:return tt+(tt+t>rt+10?-100:0)+t;case 3:case 4:return t}return null}(r);if(null===a||null===s||null===i)return null;const l=2===n?.length&&s+1<10||2===o?.length&&i<10,c=2!==r?.length,u=new Qe(a,s,i);if(u.getMonth()!==s||u.getDate()!==i)return null;const h=u.getTime()-Je.getTime(),d=function(e,t,r,n){const o=e.year?n?"yyyy":"yy":void 0,s=e.month?r?"mm":"m":void 0,i=e.day?r?"dd":"d":void 0;switch(e.type){case"mdy":return[s,i,o].filter(Se).join(t);case"ymd":return[o,s,i].filter(Se).join(t);case"dmy":return[i,s,o].filter(Se).join(t)}}(e,t,l,c);return{value:Math.round(h/et),format:d,jsDate:u}}(s,t),null===o)return null;e=e.replace(s.dateString,"").trim()}if(""!==e||!o&&!r)return null;if(o&&o.jsDate&&r&&r.jsDate)return{value:o.value+r.value,format:o.format+" "+("hhhh:mm:ss"===r.format?"hh:mm:ss":r.format),jsDate:new Qe(o.jsDate.getFullYear()+r.jsDate.getFullYear()-1899,o.jsDate.getMonth()+r.jsDate.getMonth()-11,o.jsDate.getDate()+r.jsDate.getDate()-30,o.jsDate.getHours()+r.jsDate.getHours(),o.jsDate.getMinutes()+r.jsDate.getMinutes(),o.jsDate.getSeconds()+r.jsDate.getSeconds())};return o||r}(e,t)),ft.get(t).get(e)}function mt(e){const t=Math.trunc(e),r=Qe.fromTimestamp(t*et-ot);let n=e-t;n=n<0?1+n:n;const o=Math.round(24*n),s=Math.round(24*(n-o/24)*60),i=Math.round(24*(n-o/24-s/24/60)*60*60);return r.setHours(o),r.setMinutes(s),r.setSeconds(i),r}function pt(e){return Math.round(bt(e))}function bt(e){return(e.getTime()-Je.getTime())/et}function vt(e){return new Qe(e.getFullYear(),e.getMonth()+1,0).getDate()}function yt(e){return vt(e)===e.getDate()}function Et(e,t,r){const n=e.getFullYear(),o=e.getMonth(),s=e.getDate(),i=new Qe(n,o+t,1);return r&&s===vt(e)||s>vt(i)?i.setDate(vt(i)):i.setDate(s),i}function wt(e){const t=Math.trunc(e);return t%4==0&&t%100!=0||t%400==0}function St(e,t,r){if(e===t)return 0;if(e>t){const r=t;t=e,e=r}const n=mt(e),o=mt(t);let s=n.getDate(),i=o.getDate();const a=n.getMonth(),l=o.getMonth(),c=n.getFullYear(),u=o.getFullYear();let h=0,d=0;switch(r){case 0:31===s&&(s=30),30===s&&31===i&&(i=30),1===a&&s===(wt(c)?29:28)&&(s=30,1===l&&i===(wt(u)?29:28)&&(i=30)),h=c+(30*a+s)/360,d=u+(30*l+i)/360;break;case 1:let r=365;const n=c===u;if(!n&&!(c+1===u)||!n&&a<l||!n&&a===l&&s<i){let e=0,t=0;for(let r=c;r<=u;r++)e++,t+=wt(r)?366:365;r=t/e}else n?wt(c)&&(r=366):(wt(c)&&a<2&&(r=366),wt(u)&&(l>1||1===l&&29===i)&&(r=366));h=e/r,d=t/r;break;case 2:h=e/360,d=t/360;break;case 3:h=e/365,d=t/365;break;case 4:31===s&&(s=30),31===i&&(i=30),h=c+(30*a+s)/360,d=u+(30*l+i)/360}return d-h}function Ct(e,t){const r=12*(t.getFullYear()-e.getFullYear())+t.getMonth()-e.getMonth();return e.getDate()>t.getDate()?r-1:r}function Tt(e,t){const r=e.getTime(),n=t.getTime();return Math.floor((n-r)/et)}function It(e,t){const r=t.getFullYear()-e.getFullYear(),n=e.getMonth(),o=t.getMonth(),s=e.getDate(),i=t.getDate();return o>n||o===n&&i>=s?r:r-1}function xt(e,t,r){return t>r?xt(e,r,t):(e=Math.trunc(e),t=Math.trunc(t),r=Math.trunc(r),e>=t&&e<=r)}const Rt=Ue(function(e){return e=te(e),new RegExp(`(?:^-?\\d+(?:${e}?\\d*(?:(E|e)(\\+|-)?\\d+)?)?|^-?${e}\\d+)(?!\\w|!)`)}),At=Ue(function(e){const t=te(e.decimalSeparator),r="(?:\\s*"+`(?:\\d+(?:${te(e.thousandsSeparator||"")}\\d{3,})*(?:${t}\\d*)?)`+"|"+`(?:${t}\\d+)`+")(?:(e|E)(?:\\+|-)?(?:[0-9]|[0-9][0-9]|[12][0-9]{2}|30[0-7]))?(?:\\s*%)?",n="(?:\\s*-)?",o="(?:\\s*[\\$€])?",s="^(?:(?:"+[n+o+r,n+r+o,o+n+r].join(")|(?:")+"))$";return new RegExp(s,"i")});function Ot(e,t){return!!e&&At(t).test(e.trim())}const _t=Ue(function(e){return new RegExp(`[$€${te(e.thousandsSeparator||"")}]`,"g")});function Dt(e,t){e=e.replace(_t(t),""),"."!==t.decimalSeparator&&(e=e.replace(t.decimalSeparator,"."));let r=Number(e);return isNaN(r)&&e.includes("%")&&(r=Number(e.split("%")[0]),!isNaN(r))?r/100:r}function Ft(e,t,r){const n=[...e].sort((e,t)=>e-t);let o=(n.length+(r?-1:1))*t;if(r||o--,Number.isInteger(o))return n[o];const s=Math.ceil(o),i=Math.floor(o);return n[s]*(o-i)+n[i]*(s-o)}const Nt=["number","string","boolean","undefined"];function Mt(e){if(void 0!==e)return D(e)?e[0][0]?.format:e.format}function Vt(e){return"string"==typeof e&&w.has(e)}function Lt(e){return{value:E.NotAvailable,message:v("Did not find value '%s' in [[FUNCTION_NAME]] evaluation.",$t(e))}}const Pt=e=>v("The function [[FUNCTION_NAME]] expects a number value, but '%s' is a string, and cannot be coerced to a number.",e);function kt(e,t){const r=Yt(e);switch(typeof r){case"number":return r;case"boolean":return r?1:0;case"string":if(Ot(r,t)||""===r)return Dt(r,t);const e=gt(r,t);if(e)return e.value;throw new S(Pt(r));default:return 0}}function Ut(e,t){return mr(e).map(e=>e.map(e=>{if("number"!=typeof e.value){let r="";throw"object"==typeof e?r=v("Function [[FUNCTION_NAME]] expects number values for %s, but got an empty value.",t):"string"==typeof e?r=v("Function [[FUNCTION_NAME]] expects number values for %s, but got a string.",t):"boolean"==typeof e&&(r=v("Function [[FUNCTION_NAME]] expects number values for %s, but got a boolean.",t)),new S(r)}return e.value}))}function Ht(e,t){const r=Yt(e);if(""===r)throw new S(Pt(r));return kt(r,t)}function Bt(e,t){return Math.trunc(kt(e,t))}function zt(e,t){return Math.trunc(Ht(e,t))}function $t(e){const t=Yt(e);switch(typeof t){case"string":return t;case"number":return t.toString();case"boolean":return t?"TRUE":"FALSE";default:return""}}const Gt=Ue(function(e){return e.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"")}),Wt=e=>v("The function [[FUNCTION_NAME]] expects a boolean value, but '%s' is a text, and cannot be coerced to a boolean.",e);function qt(e){const t=Yt(e);switch(typeof t){case"boolean":return t;case"string":if(t){const e=t.toUpperCase();if("TRUE"===e)return!0;if("FALSE"===e)return!1;throw new S(Wt(t))}return!1;case"number":return!!t;default:return!1}}function Zt(e,t){return mt(kt(Yt(e),t))}function Yt(e){if("object"==typeof e&&null!==e&&"value"in e){if(Vt(e.value))throw e;return e.value}if(Vt(e))throw new S("",e);return e}function jt(e,t,r){for(const n of e)if(D(n)){const e=n.length,r=n[0].length;for(let o=0;o<r;o++)for(let r=0;r<e;r++)t(n[r][o])}else r(n)}function Xt(e,t){jt(e,e=>{if(Vt(e.value))throw e;t(e)},e=>{if(Vt(e?.value))throw e;t(e)})}function Kt(e,t,r){jt(e,e=>{if("number"==typeof e?.value&&t(e),Vt(e?.value))throw e},e=>{t({value:Ht(e,r),format:e?.format})})}function Qt(e,t,r,n,o="rowFirst"){let s=n;for(const n of e)if(D(n)){const e=n.length,r=n[0].length;if("rowFirst"===o)for(let o=0;o<r;o++)for(let r=0;r<e;r++)s=t(s,n[r][o]);else for(let o=0;o<e;o++)for(let e=0;e<r;e++)s=t(s,n[o][e])}else s=r(s,n);return s}function Jt(e,t,r,n="rowFirst"){return Qt(e,t,t,r,n)}function er(e,t,r,n){return Qt(e,(e,r)=>{const n=r?.value;if("number"==typeof n)return t(e,n);if(Vt(n))throw r;return e},(e,r)=>t(e,Ht(r,n)),r)}function tr(e,t,r,n){return Qt(e,(e,r)=>{const o=r?.value;if(null!=o){if("number"==typeof o)return t(e,o);if("boolean"==typeof o)return t(e,kt(o,n));if(Vt(o))throw r;return t(e,0)}return e},(e,r)=>t(e,kt(r,n)),r)}function rr(e,t,r){const n=Array(e);for(let o=0;o<e;o++){n[o]=Array(t);for(let e=0;e<t;e++)n[o][e]=r(o,e)}return n}function nr(e,t){return 0===e.length?[]:rr(e.length,e[0].length,(r,n)=>t(e[r][n]))}function or(e){return e.length?rr(e[0].length,e.length,(t,r)=>e[r][t]):[]}function sr(e,t,r=void 0){let n,o=1,s=1,i=1/0,a=1/0;for(let e=0;e<t.length;e++){const l=t[e];if(D(l)&&(void 0===r||r[e])){const r=l.length,c=l[0].length;1!==r||1!==c?(n??=new Array(t.length),1!==r&&1!==c?(n[e]="matrix",o=Math.max(o,r),s=Math.max(s,c),i=Math.min(i,r),a=Math.min(a,c)):1!==r?(n[e]="horizontal",o=Math.max(o,r),i=Math.min(i,r)):1!==c&&(n[e]="vertical",s=Math.max(s,c),a=Math.min(a,c))):t[e]=l[0][0]}}if(1===o&&1===s)return e(...t);return rr(o,s,(r,o)=>{if(r>i-1||o>a-1)return new x(v("Array arguments to [[FUNCTION_NAME]] are of different size."));const s=e(...(l=r,c=o,t.map((e,t)=>{switch(n?.[t]){case"matrix":return e[l][c];case"horizontal":return e[l][0];case"vertical":return e[0][c];case void 0:return e}})));var l,c;return D(s)?s[0][0]:s})}function ir(e,t){return function(e,t,r){for(const n of e)if(D(n)){const e=n.length,r=n[0].length;for(let o=0;o<r;o++)for(let r=0;r<e;r++)if(!t(n[r][o]??void 0))return}else if(!r(n))return}(e,e=>{const r=e?.value;if("boolean"==typeof r)return t(r);if("number"==typeof r)return t(!!r);if(Vt(r))throw e;return!0},e=>void 0===e||null===e.value||t(function(e){const t=Yt(e);if(""===t)throw new S(Wt(t));return qt(t)}(e)))}function ar(e,t){let r,n,o=e.substring(0,2);return"<="===o||">="===o||"<>"===o?(r=o,n=e.substring(2)):(o=e.substring(0,1),"<"===o||">"===o||"="===o?(r=o,n=e.substring(1)):(r="=",n=e)),Ot(n,t)||dt(n,t)?n=kt(n,t):"TRUE"!==n&&"FALSE"!==n||(n=qt(n)),{operator:r,operand:n}}const lr=Ue(function(e){if("*"===e)return/.+/;let t="",r="";for(const n of e)"?"===n&&"~"!==r?t+=".":"*"===n&&"~"!==r?t+=".*":("*"!==n&&"?"!==n||(t=t.slice(0,-1)),["^",".","[","]","$","(",")","*","+","?","|","{","}","\\"].includes(n)&&(t+="\\"),t+=n),r=n;return new RegExp("^"+t+"$","i")});function cr(e="",t,r){const{operator:n,operand:o}=t;if(void 0===o||null===e||null===o)return!1;if("number"==typeof o&&"="===n)return"string"==typeof e&&(Ot(e,r)||dt(e,r))?kt(e,r)===o:e===o;if("<>"===n||"="===n){let t;return t=typeof e==typeof o&&(""===e&&""===o||("string"==typeof e&&"string"==typeof o?lr(o).test(e):e===o)),"="===n?t:!t}if(typeof e==typeof o)switch(n){case"<":return e<o;case">":return e>o;case"<=":return e<=o;case">=":return e>=o}return!1}function ur(e,t,r,n=!1){const o=e.length;if(o%2==1)throw new S(v("Function [[FUNCTION_NAME]] expects criteria_range and criterion to be in pairs."));const s=mr(e[0]),i=s.length,a=s[0].length,l=[];for(let t=0;t<o-1;t+=2){const o=mr(e[t]);if(o.length!==i||o[0].length!==a)throw new S(v("Function [[FUNCTION_NAME]] expects criteria_range to have the same dimension"));const s=ar($t(e[t+1]),r);n&&"string"==typeof s.operand&&(s.operand+="*"),l.push(s)}for(let n=0;n<i;n++)for(let s=0;s<a;s++){let i=!0;for(let t=0;t<o-1;t+=2){if(i=cr(mr(e[t])[n][s].value??void 0,l[t/2],r),!i)break}i&&t(n,s)}}function hr(e,t,r,n,o,s){if(void 0===t||null===t.value)return-1;if(Vt(t.value))throw t;const i=fr(t.value),a=typeof i;let l,c,u,h,d,f,g=0,m=o-1;const p="desc"===n?t=>fr(s(e,o-t-1)):t=>fr(s(e,t));for(;m-g>=0;){for(u=Math.floor((g+m)/2),h=u,d=p(h),f=typeof d;g<h&&a!==f;)h--,d=p(h),f=typeof d;f===a&&null!=d?("strict"===r&&d===i?(l=d,c=h):"nextSmaller"===r&&d<=i?(null==l||l<d||l===d&&c<h)&&(l=d,c=h):"nextGreater"===r&&d>=i&&(void 0===l||l>d||l===d&&c<h)&&(l=d,c=h),d>i||"strict"===r&&d===i?m=h-1:g=u+1):g=u+1}return void 0===c?-1:"desc"===n?o-c-1:c}function dr(e,t,r,n,o,s,i=!1){if(void 0===t||null===t.value)return-1;if(Vt(t.value))throw t;const a=fr(t.value),l=i?(e,t)=>fr(o(e,n-t-1)):(e,t)=>fr(o(e,t)),c="wildcard"!==r||"string"!=typeof a||!(a.includes("*")||a.includes("?"));if(s&&c){const t=i?"reverseSearch":"forwardSearch";let o=s[t].get(e);if(void 0===o){o=new Map;for(let t=0;t<n;t++){const r=l(e,t)??null;o.has(r)||o.set(r,t)}s[t].set(e,o)}if(o.has(a)){const e=o.get(a);return i?n-e-1:e}if("strict"===r)return-1}const u=function(e,t,r,n,o){let s=r=>o(e,r)===t;if("wildcard"===r&&"string"==typeof t&&(t.includes("*")||t.includes("?"))){const r=lr(t);s=t=>{const n=o(e,t);return"string"==typeof n&&r.test(n)}}let i,a=-1;"nextSmaller"===r&&(s=r=>{const n=o(e,r);return(!i&&gr(t,n)>=0||gr(t,n)>=0&&gr(n,i)>0)&&(i=n,a=r),n===t});"nextGreater"===r&&(s=r=>{const n=o(e,r);return(!i&&gr(t,n)<=0||gr(t,n)<=0&&gr(n,i)<0)&&(i=n,a=r),n===t});for(let e=0;e<n;e++)if(s(e))return e;return a}(e,a,r,n,l);return i&&-1!==u?n-u-1:u}function fr(e){return"string"==typeof e?Gt(e):e}function gr(e,t){let r=Nt.indexOf(typeof e)-Nt.indexOf(typeof t);return 0===r&&("string"==typeof e&&"string"==typeof t?r=e.localeCompare(t):"number"==typeof e&&"number"==typeof t?r=e-t:"boolean"==typeof e&&"boolean"==typeof t&&(r=Number(e)-Number(t))),r}function mr(e){return void 0===e?[[]]:D(e)?e:[[e]]}function pr(e,t){return Jt(e,(e,r)=>(e.push(t(r)),e),[],"rowFirst")}function br(e){if(void 0===e)return!1;const{value:t}=e;return null!==t&&""!==t}const vr=v("[[FUNCTION_NAME]] has no valid input data.");function yr(e){return v("[[FUNCTION_NAME]] expects the provided values of %(argName)s to be a non-empty matrix.",{argName:e})}function Er(e){function t(...t){for(let r=0;r<t.length;r++){const n=t[r],o=c(e,t.length);if(!e.args[o(r).index??r].acceptErrors&&!D(n)&&Vt(n?.value))return n}try{return r.apply(this,t)}catch(t){return wr(t,e.name)}}function r(...t){this.debug;const r=e.compute.apply(this,t);return D(r)?"object"==typeof r[0][0]&&null!==r[0][0]&&"value"in r[0][0]?r:nr(r,e=>({value:e})):"object"==typeof r&&null!==r&&"value"in r?r:(e.name,{value:r})}return function(...r){const n=[],o=c(e,r.length);for(let t=0;t<r.length;t++){const s=o(t).index??-1,i=e.args[s];if(!D(r[t])&&i.acceptMatrixOnly)throw new C(v("Function %s expects the parameter '%s' to be reference to a cell or range.",e.name,(t+1).toString()));n.push(!i.acceptMatrix)}return function(t){D(t)?function(e,t){const r=e.length,n=e[0]?.length??0;for(let o=0;o<r;o++)for(let r=0;r<n;r++)t(e[o][r])}(t,t=>Sr(t,e.name)):Sr(t,e.name);return t}(sr(t.bind(this),r,n))}}function wr(e,t){return r=e,void 0!==r?.value&&"string"==typeof r.value&&Vt(e.value)?(Tr(e)&&Sr(e,t),e):(console.error(e),new S(Cr+(Tr(e)?" "+e.message:"")));var r}function Sr(e,t){e.message?.includes("[[FUNCTION_NAME]]")&&(e.message=e.message.replace("[[FUNCTION_NAME]]",t))}const Cr=v("An unexpected error occurred. Submit a support ticket at odoo.com/help.");function Tr(e){return void 0!==e?.message&&"string"==typeof e.message}const Ir=[{name:"English (US)",code:"en_US",thousandsSeparator:",",decimalSeparator:".",weekStart:7,dateFormat:"m/d/yyyy",timeFormat:"hh:mm:ss a",formulaArgSeparator:","},{name:"French",code:"fr_FR",thousandsSeparator:" ",decimalSeparator:",",weekStart:1,dateFormat:"dd/mm/yyyy",timeFormat:"hh:mm:ss",formulaArgSeparator:";"}],xr=Ir[0];function Rr(e){let t;if('"'===e.current?(e.shift(),t='"'):e.currentStartsWith("[$")&&(e.advanceBy(2),t="]"),!t)return null;let r="";for(;e.current&&e.current!==t;)r+=e.shift();if(e.current!==t)throw new Error("Unterminated string in format");return e.shift(),{type:"STRING",value:r}}const Ar=new Set("$+-/():!^&~{}<>= ");function Or(e){if("\\"===e.current){e.shift();const t=e.shift();if(!t)throw new Error("Unexpected end of format string");return{type:"CHAR",value:t}}return Ar.has(e.current)?{type:"CHAR",value:e.shift()}:null}function _r(e){return","===e.current?(e.shift(),{type:"THOUSANDS_SEPARATOR",value:","}):null}function Dr(e){return"@"===e.current?(e.shift(),{type:"TEXT_PLACEHOLDER",value:"@"}):null}function Fr(e){return"."===e.current?(e.shift(),{type:"DECIMAL_POINT",value:"."}):null}function Nr(e){return"%"===e.current?(e.shift(),{type:"PERCENT",value:"%"}):null}function Mr(e){return"e"===e.current?(e.shift(),{type:"SCIENTIFIC",value:"e"}):null}function Vr(e){if("0"===e.current||"#"===e.current){const t=e.current;return e.shift(),{type:"DIGIT",value:t}}return null}const Lr=new Set("dmqyhsa");function Pr(e){if(!Lr.has(e.current))return null;const t=e.current;let r="";for(;e.current===t;)r+=e.shift();return{type:"DATE_PART",value:r}}function kr(e){if("*"!==e.current)return null;e.shift();const t=e.shift();if(!t)throw new Error("Unexpected end of format string");return{type:"REPEATED_CHAR",value:t}}const Ur={};function Hr(e){let t=Ur[e];return void 0===t&&(t=function(e){const t=function(e){const t=new Ze(e),r=[];let n=[];for(r.push(n);!t.isOver();){if(";"===t.current){n=[],r.push(n),t.shift();continue}const e=Vr(t)||Rr(t)||Or(t)||_r(t)||Fr(t)||Nr(t)||Mr(t)||Pr(t)||Dr(t)||kr(t);if(!e)throw new Error("Unknown token at "+t.remaining());n.push(e)}return r}(e);for(const e of t){const t=e.filter(e=>"REPEATED_CHAR"===e.type);for(const e of t.slice(1))e.type="CHAR"}const r=zr(t[0])||Br(t[0])||$r(t[0]);if(!r)throw new Error("Invalid first format part of: "+e);if(t.length>1&&"text"===r.type)throw new Error("The first format in a multi-part format must be a number format: "+e);const n=zr(t[1])||Br(t[1]);if(t[1]?.length&&!n)throw new Error("Invalid second format part of: "+e);const o=zr(t[2])||Br(t[2]);if(t[2]?.length&&!o)throw new Error("Invalid third format part of: "+e);const s=$r(t[3]);if(t[3]?.length&&!s)throw new Error("Invalid fourth format part of: "+e);return{positive:r,negative:n,zero:o,text:s}}(e),Ur[e]=t),t}function Br(e){if(!e||!function(e){return e.every(e=>"DIGIT"===e.type||"DECIMAL_POINT"===e.type||"THOUSANDS_SEPARATOR"===e.type||"PERCENT"===e.type||"SCIENTIFIC"===e.type||"STRING"===e.type||"CHAR"===e.type||"REPEATED_CHAR"===e.type)}(e))return;const t=[];let r,n=t,o=0,s=!1,i=0,a=e.findLastIndex(e=>"DIGIT"===e.type),l=!1,c=0;for(let u=0;u<e.length;u++){const h=e[u];switch(h.type){case"DIGIT":n===t?n.push(h):c<20&&(n.push(h),c++);break;case"DECIMAL_POINT":if(n!==t)throw new Error("Multiple decimal points in a number format");r=[],n=r;break;case"SCIENTIFIC":s=!0;break;case"REPEATED_CHAR":case"CHAR":case"STRING":n.push(h);break;case"PERCENT":o++,n.push(h);break;case"THOUSANDS_SEPARATOR":u-1===a?(i+=1,a++,n.push(h)):"DIGIT"===e[u+1]?.type&&"DIGIT"===e[u-1]?.type?(n===t&&(l=!0),n.push(h)):n.push({type:"CHAR",value:","})}}return{type:"number",integerPart:t,decimalPart:r,percentSymbols:o,scientific:s,thousandsSeparator:l,magnitude:i}}function zr(e){const t=e&&function(e){return e.every(e=>"DATE_PART"===e.type||"DECIMAL_POINT"===e.type||"THOUSANDS_SEPARATOR"===e.type||"STRING"===e.type||"CHAR"===e.type||"REPEATED_CHAR"===e.type)}(e)?{type:"date",tokens:e}:void 0;if(!t||!e?.some(e=>"DATE_PART"===e.type))return;if(t.tokens.length&&t.tokens.every(e=>"DATE_PART"===e.type&&"a"===e.value))throw new Error("Invalid date format");const r=function(e){const t=e.filter(e=>"DATE_PART"===e.type);for(let e=0;e<t.length;e++)!t[e].value.startsWith("m")||t[e].value.length>2||(t[e-1]?.value.startsWith("h")||t[e+1]?.value.startsWith("s"))&&(t[e].value=t[e].value.replaceAll("m","M"));return e}(t.tokens.map(e=>"THOUSANDS_SEPARATOR"===e.type||"DECIMAL_POINT"===e.type?{type:"CHAR",value:e.value}:e));return{type:"date",tokens:r}}function $r(e){return e&&function(e){return e.every(e=>"STRING"===e.type||"TEXT_PLACEHOLDER"===e.type||"CHAR"===e.type||"REPEATED_CHAR"===e.type)}(e)?{type:"text",tokens:e}:void 0}function Gr(e){return[Wr(e.positive),Wr(e.negative),Wr(e.zero),Wr(e.text)].filter(Se).join(";")}function Wr(e){if(!e)return;let t="";const r="number"!==e.type?e.tokens:function(e){const t=[...e.integerPart];e.decimalPart&&(t.push({type:"DECIMAL_POINT",value:"."}),t.push(...e.decimalPart));e.scientific&&t.push({type:"SCIENTIFIC",value:"e"});return t}(e);for(const e of r)switch(e.type){case"STRING":t+=`[$${e.value}]`;break;case"CHAR":t+=qr(e.value)?`\\${e.value}`:e.value;break;case"REPEATED_CHAR":t+="*"+e.value;break;case"DATE_PART":t+="MM"===e.value?"mm":e.value;break;default:t+=e.value}return t}function qr(e){return!Ar.has(e)}const Zr="REPEATED_CHAR_PLACEHOLDER_",Yr={0:v("January"),1:v("February"),2:v("March"),3:v("April"),4:v("May"),5:v("June"),6:v("July"),7:v("August"),8:v("September"),9:v("October"),10:v("November"),11:v("December")},jr={0:v("Sunday"),1:v("Monday"),2:v("Tuesday"),3:v("Wednesday"),4:v("Thursday"),5:v("Friday"),6:v("Saturday")};function Xr(e,{format:t,locale:r,formatWidth:n}){switch("boolean"==typeof e&&(e=e?"TRUE":"FALSE"),typeof e){case"string":{if(e.includes('\\"')&&(e=e.replaceAll(/\\"/g,'"')),!t)return e;const r=Kr(e,Hr(t)).format;return r&&"text"===r.type?Qr(e,r,n):e}case"number":t||(t=ln(e));const o=Hr(t),{format:s,isNegativeFormat:i}=Kr(e,o);if(!s)return e.toString();if("text"===s.type)return Qr(e.toString(),s,n);if(i&&(e=Math.abs(e)),"date"===s.type)return Jr(function(e,t){const r=mt(e),n=t.tokens.some(e=>"DATE_PART"===e.type&&"a"===e.value);let o="";for(const e of t.tokens)switch(e.type){case"DATE_PART":o+=sn(r,e.value,n);break;case"REPEATED_CHAR":o+=Zr+e.value;break;default:o+=e.value}return o}(e,s),n);const a=e<0,l=Jr(function(e,t,r){if(!t.integerPart.length&&!t.decimalPart?.length)return"";if(e===1/0)return"∞"+(t.percentSymbols?"%":"");let n=Math.floor(Math.log10(Math.abs(e)));n===-1/0&&(n=0);t.scientific&&(e/=10**n);const o=2*t.percentSymbols-3*t.magnitude;e*=10**o;let s=0;void 0!==t.decimalPart&&(s=t.decimalPart.filter(e=>"DIGIT"===e.type).length);const{integerDigits:i,decimalDigits:a}=tn(Math.abs(e),s);let l=function(e,t,r){let n=t.integerPart;n.some(e=>"DIGIT"===e.type)||(n=[...n,{type:"DIGIT",value:"#"}]);"0"===e&&(e="");let o="";const s=n.findIndex(e=>"DIGIT"===e.type);let i=e.length-1;function a(t,n){if("0"===n&&(t=t||"0"),!t)return;const s=e.length-1-i;o=r&&s>0&&s%3==0?t+r+o:t+o}for(let t=n.length-1;t>=0;t--){const r=n[t];switch(r.type){case"DIGIT":if(a(e[i],r.value),i--,s===t)for(;i>=0;)a(e[i],"0"),i--;break;case"THOUSANDS_SEPARATOR":break;case"REPEATED_CHAR":o=Zr+r.value+o;break;default:o=r.value+o}}return o}(i,t,t.thousandsSeparator?r.thousandsSeparator:void 0);void 0!==t.decimalPart&&(l+=r.decimalSeparator+function(e,t){if(!t.decimalPart)return"";let r="",n=0;for(const o of t.decimalPart)switch(o.type){case"DIGIT":r+="#"===o.value?e[n]||"":e[n]||"0",n++;break;case"THOUSANDS_SEPARATOR":break;case"REPEATED_CHAR":r+=Zr+o.value;break;default:r+=o.value}return r}(a||"",t));if(t.scientific){l+="e"+(n>=0?"+":"-")+Math.abs(n).toString().padStart(2,"0")}return l}(Math.abs(e),s,r),n);return a?"-"+l:l;case"object":return""}}function Kr(e,t){let r,n=!1;switch(typeof e){case"number":e<0&&t.negative?(r=t.negative,n=!0):r=0===e&&t.zero?t.zero:t.positive;break;case"string":const o=t.text||t.positive;"text"===o.type&&(r=o)}return{format:r,isNegativeFormat:n}}function Qr(e,t,r){let n="";for(const r of t.tokens)switch(r.type){case"TEXT_PLACEHOLDER":n+=e;break;case"CHAR":case"STRING":n+=r.value;break;case"REPEATED_CHAR":n+=Zr+r.value}return Jr(n,r)}function Jr(e,t){const r=e.indexOf(Zr);if(-1===r)return e;const n=e.slice(0,r),o=e.slice(r+26+1),s=e[r+26];const{timesToRepeat:i,padding:a}=function(){if(!t)return{timesToRepeat:0,padding:""};const e=t.measureText(n+o),r=t.measureText(s),i=t.availableWidth-e;if(i<=0)return{timesToRepeat:0,padding:""};const a=Math.floor(i/r),l=i-a*r,c=t.measureText(" ");return{timesToRepeat:a,padding:" ".repeat(Math.floor(l/c))}}();return n+s.repeat(i)+a+o}const en=[];function tn(e,t=20){const r=e.toString();if(r.includes("e"))return function(e,t=20){let r=en[t];r||(r=new Intl.NumberFormat("en-US",{maximumFractionDigits:t,useGrouping:!1}),en[t]=r);const[n,o]=r.format(e).split(".");return{integerDigits:n,decimalDigits:o}}(e,t);if(Number.isInteger(e))return{integerDigits:r,decimalDigits:void 0};const n=r.indexOf(".");let o=r.substring(0,n),s=r.substring(n+1);if(0===t)return Number(s[0])>=5&&(o=(Number(o)+1).toString()),{integerDigits:o,decimalDigits:void 0};if(s.length>t){const{integerDigits:e,decimalDigits:r}=function(e,t){let r="0",n=e;const o=e.slice(0,t),s=t;if(Number(e[s])<5)return{integerDigits:r,decimalDigits:o};const i=o.match(nn)?.[0]||"",a=(Number(o)+1).toString(),l=o.slice(i.length),c=a.length>l.length;c&&!i?(r="1",n=void 0):n=c?i.slice(0,-1)+a:i+a;return{integerDigits:r,decimalDigits:n}}(s,t);s=r,"0"!==e&&(o=(Number(o)+Number(e)).toString())}return{integerDigits:o,decimalDigits:rn(s||"")}}function rn(e){let t=e.length-1;for(;t>=0&&"0"===e[t];)t--;return e.slice(0,t+1)||void 0}const nn=/^0+/;const on=Ue(function(e){if(!e)return!1;try{return"date"===Hr(e).positive.type}catch(e){return!1}});function sn(e,t,r){switch(t){case"d":return e.getDate();case"dd":return e.getDate().toString().padStart(2,"0");case"ddd":return jr[e.getDay()].slice(0,3);case"dddd":return jr[e.getDay()].toString();case"m":return e.getMonth()+1;case"mm":return String(e.getMonth()+1).padStart(2,"0");case"mmm":return Yr[e.getMonth()].slice(0,3);case"mmmm":return Yr[e.getMonth()].toString();case"mmmmm":return Yr[e.getMonth()].slice(0,1);case"qq":return v("Q%(quarter)s",{quarter:e.getQuarter()}).toString();case"qqqq":return v("Quarter %(quarter)s",{quarter:e.getQuarter()}).toString();case"yy":const n=String(e.getFullYear()).replace("-","").padStart(2,"0");return n.slice(n.length-2);case"yyyy":return e.getFullYear();case"hhhh":return Math.floor((e.getTime()-Je.getTime())/36e5).toString();case"hh":let o=e.getHours();return r&&(o=0===o?12:o>12?o-12:o),o.toString().padStart(2,"0");case"MM":return e.getMinutes().toString().padStart(2,"0");case"ss":return e.getSeconds().toString().padStart(2,"0");case"a":return e.getHours()>=12?"PM":"AM";default:throw new Error(`invalid date format token: ${t}`)}}const an=Ue(function(e){return new RegExp(`[0-9]+${te(e.decimalSeparator)}[0-9]`)});function ln(e){let{integerDigits:t,decimalDigits:r}=tn(e);if(!r)return"0";const n=t.replace("-","").length;if(n+2>11)return"0";const o=11-n-1;return({decimalDigits:r}=tn(e,Math.min(o,r.length))),r?"0."+"0".repeat(r.length):"0"}function cn(e,t){if(!dt(e,t))return;return gt(e,t).format}function un(e){const t=e.includes(".")?"0.00":"0",r=e.match(/[\$€]/);if(r){const n=e.match(/[\d]/),o="[$"+r.values().next().value+"]";return n.index<r.index?"#,##"+t+o:o+"#,##"+t}if(e.includes("%"))return t+"%"}function hn(e,t,r){let n=0;try{n=Math.abs(kt(e?.value,r))}catch(e){return""}const o=e?.format;if(void 0!==t){const e=t?.value;switch(e){case"k":return dn(o,1,"k");case"m":return dn(o,2,"m");case"b":return dn(o,3,"b");default:throw new S(v("The formatting unit should be 'k', 'm' or 'b'."))}}return n<1e5?dn(o,0,""):n<1e8?dn(o,1,"k"):n<1e11?dn(o,2,"m"):dn(o,3,"b")}function dn(e,t,r,n){const o=Hr(e||"#,##0");return Gr({positive:fn(o.positive,t,r),negative:o.negative?fn(o.negative,t,r):void 0,zero:o.zero?fn(o.zero,t,r):void 0,text:o.text})}function fn(e,t,r){if("number"!==e.type)return e;const n={type:"STRING",value:r};let o=[...e.integerPart];const s=o.findLastIndex(e=>"DIGIT"===e.type);if(-1===s)throw new Error("Cannot create a large number format from a format with no digit.");for(;"THOUSANDS_SEPARATOR"===o[s+1]?.type;)o=He(o,[s+1]);const i=o[s+1];o="STRING"===i?.type&&["m","k","b"].includes(i.value)?ze(o,n,s+1):Be(o,[n],s+1),t>0&&(o=Be(o,Array(t).fill({type:"THOUSANDS_SEPARATOR",value:","}),s+1));const a=e.percentSymbols-o.filter(e=>"PERCENT"===e.type).length;return o.push(...new Array(a).fill({type:"PERCENT",value:"%"})),{...e,integerPart:o,decimalPart:void 0,magnitude:t}}function gn(e,t){const r=Hr(e);return Gr(Hr(Gr({positive:mn(r.positive,t),negative:r.negative?mn(r.negative,t):void 0,zero:r.zero?mn(r.zero,t):void 0,text:r.text})))}function mn(e,t){return"number"!==e.type?e:t>0?function(e,t){let r=e.integerPart,n=e.decimalPart;if(!n){const e=r.findLastIndex(e=>"DIGIT"===e.type);n=r.slice(e+1),r=r.slice(0,e+1)}const o=le(0,t).map(()=>({type:"DIGIT",value:"0"})),s=n.findLastIndex(e=>"DIGIT"===e.type);n=-1===s?[...o,...n]:Be(n,o,s+1);return{...e,decimalPart:n,integerPart:r}}(e,t):function(e,t){let r=e.decimalPart;if(!r)return e;const n=[];let o=0;for(let e=r.length-1;e>=0&&!(o>=Math.abs(t));e--)"DIGIT"===r[e].type&&(o++,n.push(e));if(r=He(r,n),r.some(e=>"DIGIT"===e.type))return{...e,decimalPart:r};return{...e,decimalPart:void 0,integerPart:[...e.integerPart,...r]}}(e,Math.abs(t))}function pn(e){const t=Hr(e);for(const e of[t.positive,t.negative,t.zero])if(e&&"date"===e.type&&e.tokens.some(e=>"DATE_PART"===e.type&&e.value.includes("q")))return!1;return!0}function bn(e){if(!e)return!1;try{return"text"===Hr(e).positive.type}catch{return!1}}function vn(e,t,r){const n=e.value;switch(typeof n){case"number":return Xr(n,{locale:r,format:e.format});case"string":return Vt(n)?n:`"${n}"`;case"boolean":return n?"TRUE":"FALSE"}return t}function yn(e,t){if(!e)throw new S(t)}function En(e,t=v("Evaluation of function [[FUNCTION_NAME]] caused a divide by zero error.")){if(0===e)throw new O(t)}function wn(e){return 1===e.length||1===e[0].length}function Sn(...e){if(e.every(D)){const t=e[0].length,r=e[0][0].length;for(const n of e)if(n.length!==t||n[0].length!==r)return!1;return!0}return!e.some(e=>Array.isArray(e)&&(1!==e.length||1!==e[0].length))}function Cn(e){return e.length===e[0].length}const Tn=e=>v("The function [[FUNCTION_NAME]] expects a number value to be greater than or equal to 1, but receives %s.",e);function In(e){const t=Array(e);for(let r=0;r<e;r++)t[r]=Array(e).fill(0),t[r][r]=1;return t}function xn(e){if(e.length<1||e[0].length<1)throw new Error("invertMatrix: an empty matrix cannot be inverted.");if(e.length!==e[0].length)throw new Error("invertMatrix: only square matrices are invertible");let t=1;const r=e.length,n=In(r),o=e.map(e=>e.slice());for(let e=0;e<r;e++){let s=o[e][e];if(0===s){for(let s=e+1;s<r;s++)if(0!==o[e][s]){Rn(o,e,s),Rn(n,e,s),t*=-1;break}if(s=o[e][e],0===s)return{determinant:0}}for(let t=0;t<r;t++)o[t][e]=o[t][e]/s,n[t][e]=n[t][e]/s;t*=s;for(let t=0;t<r;t++){if(t===e)continue;const s=o[e][t];for(let i=0;i<r;i++)o[i][t]-=s*o[i][e],n[i][t]-=s*n[i][e]}}return{inverted:n,determinant:t}}function Rn(e,t,r){for(let n=0;n<e.length;n++){const o=e[n][t];e[n][t]=e[n][r],e[n][r]=o}}function An(e,t){if(e.length<1||t.length<1)throw new Error("multiplyMatrices: empty matrices cannot be multiplied.");if(e.length!==t[0].length)throw new Error("multiplyMatrices: incompatible matrices size.");const r=e[0].length,n=t.length,o=e.length,s=Array(n);for(let i=0;i<n;i++){s[i]=Array(r);for(let n=0;n<r;n++){let r=0;for(let s=0;s<o;s++)r+=e[s][n]*t[i][s];s[i][n]=r}}return s}function On(e){if(!D(e))return e;if(!_n(e))throw new Error("The value should be a scalar or a 1x1 matrix");return e[0][0]}function _n(e){return 1===e.length&&1===e[0].length}function Dn(e){return D(e)&&!_n(e)}function Fn(e,t){const r=e.map(mr),n=r.map(e=>e?.[0]?.length??0),o=Math.max(...n);if(t?.requireSameRowCount){const e=n[0];if(n.some(t=>t!==e))return new S(v("All ranges in [[FUNCTION_NAME]] must have the same number of columns (got %s).",n.join(", ")))}const s=[];for(const e of r)for(let t=0;t<e.length;t++){const r=Array(o).fill({value:null});for(let n=0;n<e[t].length;n++)r[n]=e[t][n];s.push(r)}return s}function Nn(e,t){const r=e.map(mr),n=r.map(e=>e?.length??0),o=Math.max(...n);if(t?.requireSameColCount){const e=n[0];if(n.some(t=>t!==e))return new S(v("All ranges in [[FUNCTION_NAME]] must have the same number of columns (got %s).",n.join(", ")))}const s=rr(o,r.reduce((e,t)=>e+(t?.[0]?.length??0),0),()=>({value:null}));let i=0;for(const e of r){for(let t=0;t<e.length;t++)for(let r=0;r<e[t].length;r++)s[t][i+r]=e[t][r];i+=e[0]?.length??0}return s}const Mn={description:v("Returns a result array constrained to a specific width and height."),args:[a("input_range (any, range<any>)",v("The range to constrain.")),a("rows (number)",v("The number of rows in the constrained array.")),a("columns (number)",v("The number of columns in the constrained array."))],compute:function(e,t,r){const n=mr(e),o=Bt(t?.value,this.locale),s=Bt(r?.value,this.locale);if(o<=0)return new S(v("The rows argument (%s) must be strictly positive.",o.toString()));if(s<=0)return new S(v("The columns argument (%s) must be strictly positive.",s.toString()));const i=Math.min(o,n[0].length);return rr(Math.min(s,n.length),i,(e,t)=>n[e][t])},isExported:!1},Vn={description:v("Appends ranges vertically and in sequence to return a larger array. All ranges must have the same number of columns."),args:[a("range (any, range<any>, repeating)",v("The range to be appended."))],compute:function(...e){return Nn(e,{requireSameColCount:!0})},isExported:!1,hidden:!0},Ln={description:v("Appends ranges horizontally and in sequence to return a larger array. All ranges must have the same number of rows."),args:[a("range (any, range<any>, repeating)",v("The range to be appended."))],compute:function(...e){return Fn(e,{requireSameRowCount:!0})},isExported:!1,hidden:!0},Pn={description:v("Creates a new array from the selected columns in the existing range."),args:[a("array (any, range<any>)",v("The array that contains the columns to be returned.")),a("col_num (number, range<number>, repeating)",v("The column index of the column to be returned."))],compute:function(e,...t){const r=mr(e),n=pr(t,e=>Bt(e?.value,this.locale)),o=n.filter(e=>0===e||r.length<Math.abs(e));if(0!==o.length)return new S(v("The columns arguments must be between -%s and %s (got %s), excluding 0.",r.length.toString(),r.length.toString(),o.join(",")));const s=Array(n.length);for(let e=0;e<n.length;e++)n[e]>0?s[e]=r[n[e]-1]:s[e]=r[r.length+n[e]];return s},isExported:!0},kn={description:v("Creates a new array from the selected rows in the existing range."),args:[a("array (any, range<any>)",v("The array that contains the rows to be returned.")),a("row_num (number, range<number>, repeating)",v("The row index of the row to be returned."))],compute:function(e,...t){const r=mr(e),n=pr(t,e=>Bt(e?.value,this.locale)),o=r.length,s=n.filter(e=>0===e||r[0].length<Math.abs(e));return 0!==s.length?new S(v("The rows arguments must be between -%s and %s (got %s), excluding 0.",r[0].length.toString(),r[0].length.toString(),s.join(","))):rr(o,n.length,(e,t)=>n[t]>0?r[e][n[t]-1]:r[e][r[e].length+n[t]])},isExported:!0},Un={description:v("Expands or pads an array to specified row and column dimensions."),args:[a("array (any, range<any>)",v("The array to expand.")),a("rows (number)",v("The number of rows in the expanded array. If missing, rows will not be expanded.")),a("columns (number, optional)",v("The number of columns in the expanded array. If missing, columns will not be expanded.")),a("pad_with (any, default=0)",v("The value with which to pad."))],compute:function(e,t,r,n={value:0}){const o=mr(e),s=Bt(t?.value,this.locale),i=void 0!==r?Bt(r.value,this.locale):o.length;return s<o[0].length?new S(v("The rows arguments (%s) must be greater or equal than the number of rows of the array.",s.toString())):i<o.length?new S(v("The columns arguments (%s) must be greater or equal than the number of columns of the array.",i.toString())):rr(i,s,(e,t)=>e>=o.length||t>=o[e].length?n:o[e][t])},isExported:!0},Hn={description:v("Flattens all the values from one or more ranges into a single column."),args:[a("range (any, range<any>, repeating)",v("The range to flatten."))],compute:function(...e){return[pr(e,e=>void 0===e?{value:""}:e)]},isExported:!1},Bn={description:v("Calculates the frequency distribution of a range."),args:[a("data (range<number>)",v("The array of ranges containing the values to be counted.")),a("classes (number, range<number>)",v("The range containing the set of classes."))],compute:functio