@odoo/o-spreadsheet 19.1.1 → 19.2.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,8 +3,8 @@
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
5
  * @version 19.1.0-alpha.3
6
- * @date 2025-12-26T10:26:09.971Z
7
- * @hash e6313bd
6
+ * @date 2025-12-26T10:19:48.559Z
7
+ * @hash 3296c7e
8
8
  */
9
9
 
10
10
  class FunctionCodeBuilder {
@@ -51523,5 +51523,5 @@ export { BadExpressionError, BasePlugin, CellErrorType, CircularDependencyError,
51523
51523
 
51524
51524
 
51525
51525
  __info__.version = "19.1.0-alpha.3";
51526
- __info__.date = "2025-12-26T10:26:09.971Z";
51527
- __info__.hash = "e6313bd";
51526
+ __info__.date = "2025-12-26T10:19:48.559Z";
51527
+ __info__.hash = "3296c7e";
@@ -3,8 +3,8 @@
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
5
  * @version 19.1.0-alpha.3
6
- * @date 2025-12-26T10:26:09.971Z
7
- * @hash e6313bd
6
+ * @date 2025-12-26T10:19:48.559Z
7
+ * @hash 3296c7e
8
8
  */
9
9
 
10
10
  (function (exports) {
@@ -51635,8 +51635,8 @@
51635
51635
 
51636
51636
 
51637
51637
  __info__.version = "19.1.0-alpha.3";
51638
- __info__.date = "2025-12-26T10:26:09.971Z";
51639
- __info__.hash = "e6313bd";
51638
+ __info__.date = "2025-12-26T10:19:48.559Z";
51639
+ __info__.hash = "3296c7e";
51640
51640
 
51641
51641
 
51642
51642
  })(this.o_spreadsheet_engine = this.o_spreadsheet_engine || {});
@@ -814,4 +814,4 @@
814
814
  <tableParts count="${e.tables.length}">
815
815
  ${jE(a)}
816
816
  </tableParts>
817
- `}var QT;!function(e){e[e.Ready=0]="Ready",e[e.Running=1]="Running",e[e.RunningCore=2]="RunningCore",e[e.Finalizing=3]="Finalizing"}(QT||(QT={}));function JT(e,t={}){const r=re(t);return r.type=e,r}const ex={Background:0,Highlights:1,Clipboard:2,Chart:4,Autofill:5,Selection:6,Headers:100},tx=Ue(()=>Object.keys(ex).sort((e,t)=>ex[e]-ex[t]));const rx={};e.BadExpressionError=C,e.BasePlugin=Vs,e.CellErrorType=E,e.CircularDependencyError=I,e.DEFAULT_LOCALE=xr,e.DEFAULT_LOCALES=Tr,e.DivisionByZeroError=O,e.EvaluationError=S,e.FunctionCodeBuilder=t,e.FunctionRegistry=rm,e.InvalidReferenceError=T,e.Model=class extends Vm{corePlugins=[];statefulUIPlugins=[];range;session;isReplayingCommand=!1;renderers={};status=0;config;corePluginConfig;coreViewPluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},t={},r=[],n=new _o,o=!1){const s=performance.now();console.debug("##### Model creation #####"),super(),b(),r=Aw(e,r);const i=Tw(e,o);this.state=new YI,this.uuidGenerator=n,this.config=this.setupConfig(t),this.session=this.setupSession(i.revisionId),this.coreGetters={},this.range=new WI(this.coreGetters),this.coreGetters.getRangeString=this.range.getRangeString.bind(this.range),this.coreGetters.getRangeFromSheetXC=this.range.getRangeFromSheetXC.bind(this.range),this.coreGetters.createAdaptedRanges=this.range.createAdaptedRanges.bind(this.range),this.coreGetters.getRangeData=this.range.getRangeData.bind(this.range),this.coreGetters.getRangeDataFromXc=this.range.getRangeDataFromXc.bind(this.range),this.coreGetters.getRangeDataFromZone=this.range.getRangeDataFromZone.bind(this.range),this.coreGetters.getRangeFromRangeData=this.range.getRangeFromRangeData.bind(this.range),this.coreGetters.getRangeFromZone=this.range.getRangeFromZone.bind(this.range),this.coreGetters.recomputeRanges=this.range.recomputeRanges.bind(this.range),this.coreGetters.isRangeValid=this.range.isRangeValid.bind(this.range),this.coreGetters.extendRange=this.range.extendRange.bind(this.range),this.coreGetters.getRangesUnion=this.range.getRangesUnion.bind(this.range),this.coreGetters.removeRangesSheetPrefix=this.range.removeRangesSheetPrefix.bind(this.range),this.coreGetters.adaptFormulaStringDependencies=this.range.adaptFormulaStringDependencies.bind(this.range),this.coreGetters.copyFormulaStringForSheet=this.range.copyFormulaStringForSheet.bind(this.range),this.getters={isReadonly:()=>"readonly"===this.config.mode||"dashboard"===this.config.mode,isDashboard:()=>"dashboard"===this.config.mode},this.selection=new ZI(this.getters),this.coreHandlers.push(this.range),this.handlers.push(this.range),this.corePluginConfig=this.setupCorePluginConfig(),this.coreViewPluginConfig=this.setupCoreViewPluginConfig(),this.uiPluginConfig=this.setupUiPluginConfig();for(const e of BI.getAll())this.setupCorePlugin(e,i);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(r);for(const e of GI.getAll()){const t=this.setupCoreViewPlugin(e);this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(const e of $I.getAll()){const t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(const e of zI.getAll()){const t=this.setupUiPlugin(e);this.handlers.push(t),this.uiHandlers.push(t)}if(this.dispatch("START"),this.selection.observe(this,{handleEvent:()=>this.trigger("update")}),this.setupSessionEvents(),this.joinSession(),t.snapshotRequested||e["[Content_Types].xml"]&&!this.getters.isReadonly()){const e=performance.now();console.debug("Snapshot requested"),this.session.snapshot(this.exportData()),console.debug("Snapshot taken in",performance.now()-e,"ms")}console.debug("Model created in",performance.now()-s,"ms"),console.debug("######")}joinSession(){this.session.join(this.config.client)}async leaveSession(){const e=this.getters.isReadonly()?void 0:xe(()=>this.exportData());await this.session.leave(e)}setupUiPlugin(e){const t=new e(this.uiPluginConfig);for(const r of e.getters){if(!(r in t))throw new Error(`Invalid getter name: ${r} for plugin ${t.constructor}`);if(r in this.getters)throw new Error(`Getter "${r}" is already defined.`);this.getters[r]=t[r].bind(t)}for(const r of e.layers)this.renderers[r]||(this.renderers[r]=[]),this.renderers[r].push(t);return t}setupCoreViewPlugin(e){const t=new e(this.coreViewPluginConfig);for(const r of e.getters){if(!(r in t))throw new Error(`Invalid getter name: ${r} for plugin ${t.constructor}`);if(r in this.getters)throw new Error(`Getter "${r}" is already defined.`);this.getters[r]=t[r].bind(t)}return t}setupCorePlugin(e,t){const r=new e(this.corePluginConfig);for(const t of e.getters){if(!(t in r))throw new Error(`Invalid getter name: ${t} for plugin ${r.constructor}`);if(t in this.coreGetters)throw new Error(`Getter "${t}" is already defined.`);this.coreGetters[t]=r[t].bind(r)}r.import(t),this.corePlugins.push(r),this.coreHandlers.push(r),this.handlers.push(r)}onRemoteRevisionReceived({commands:e}){for(const t of e){const e=this.status;this.status=2,this.dispatchToHandlers(this.statefulUIPlugins,t),this.status=e}this.finalize()}setupSession(e){return new lv(vv({initialRevisionId:e,recordChanges:this.state.recordChanges.bind(this.state),dispatch:e=>{this.checkDispatchAllowed(e).isSuccessful?(this.isReplayingCommand=!0,this.dispatchToHandlers(this.coreHandlers,e),this.isReplayingCommand=!1):this.dispatchToHandlers(this.coreHandlers,{type:"UNDO",commands:[e]})}}),this.config.transportService,e)}setupSessionEvents(){this.session.on("remote-revision-received",this,this.onRemoteRevisionReceived),this.session.on("revision-undone",this,({commands:e})=>{this.dispatchFromCorePlugin("UNDO",{commands:e}),this.finalize()}),this.session.on("revision-redone",this,({commands:e})=>{this.dispatchFromCorePlugin("REDO",{commands:e}),this.finalize()}),this.session.on("unexpected-revision-id",this,()=>this.trigger("unexpected-revision-id")),this.session.on("collaborative-event-received",this,()=>{this.trigger("update")})}setupConfig(e){const t=e.client||{id:this.uuidGenerator.smallUuid(),name:v("Anonymous").toString()},r=e.transportService||new Nm,n="readonly"===e.mode||"dashboard"===e.mode;return{...e,mode:e.mode||"normal",custom:e.custom||{},external:this.setupExternalConfig(e.external||{}),transportService:n?new Mm(r):r,client:t,moveClient:()=>{},snapshotRequested:!1,notifyUI:e=>this.trigger("notify-ui",e),raiseBlockingErrorUI:e=>this.trigger("raise-error-ui",{text:e}),customColors:e.customColors||[]}}setupExternalConfig(e){const t=e.loadLocales||(()=>Promise.resolve(Tr));return{...e,loadLocales:t}}setupCorePluginConfig(){return{getters:this.coreGetters,stateObserver:this.state,range:this.range,dispatch:this.dispatchFromCorePlugin,canDispatch:this.canDispatch,custom:this.config.custom,external:this.config.external}}setupCoreViewPluginConfig(){return{getters:this.getters,stateObserver:this.state,custom:this.config.custom,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}setupUiPluginConfig(){return{getters:this.getters,stateObserver:this.state,dispatch:this.dispatch,canDispatch:this.canDispatch,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}checkDispatchAllowed(e){const t=Ds(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some(e=>"Success"!==e)?new Fs(t.flat()):Fs.Success}checkDispatchAllowedCoreCommand(e){const t=this.corePlugins.map(t=>t.allowDispatch(e));return t.push(this.range.allowDispatch(e)),t}checkDispatchAllowedLocalCommand(e){return this.uiHandlers.map(t=>t.allowDispatch(e))}finalize(){this.status=3;for(const e of this.handlers)e.finalize();this.status=0,this.trigger("command-finalized")}canDispatch=(e,t)=>this.checkDispatchAllowed(JT(e,t));dispatch=(e,t)=>{const r=JT(e,t),n=this.status;if(this.getters.isReadonly()&&(o=r,!Os.has(o.type)))return new Fs("Readonly");var o;if(!this.session.canApplyOptimisticUpdate())return new Fs("WaitingSessionConfirmation");switch(n){case 0:const t=this.checkDispatchAllowed(r);if(!t.isSuccessful)return this.trigger("update"),t;this.status=1;const{changes:n,commands:o}=this.state.recordChanges(()=>{const t=performance.now();Ds(r)&&this.state.addCommand(r),this.dispatchToHandlers(this.handlers,r),this.finalize();const n=performance.now()-t;n>5&&console.debug(e,n,"ms")});this.session.save(r,o,n),this.status=0,this.trigger("update");break;case 1:if(Ds(r)){const e=this.checkDispatchAllowed(r);if(!e.isSuccessful)return e;this.state.addCommand(r)}this.dispatchToHandlers(this.handlers,r);break;case 3:throw new Error("Cannot dispatch commands in the finalize state");case 2:if(Ds(r))throw new Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,r)}return Fs.Success};dispatchFromCorePlugin=(e,t)=>{const r=JT(e,t),n=this.status;this.status=2;const o=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(o,r),this.status=n,Fs.Success};dispatchToHandlers(e,t){const r=Ds(t);for(const n of e)!r&&n instanceof Nw||n.beforeHandle(t);for(const n of e)!r&&n instanceof Nw||n.handle(t);this.trigger("command-dispatched",t)}drawLayer(e,t){const r=this.renderers[t];if(r)for(const n of r)e.ctx.save(),n.drawLayer(e,t),e.ctx.restore()}exportData(){let e=Dw();for(const t of this.handlers)t instanceof Nw&&t.export(e);return e.revisionId=this.session.getRevisionId()||Y,e=re(e),e}updateMode(e){this.config.mode=e,this.trigger("update")}async exportXLSX(){this.dispatch("EVALUATE_CELLS");let e={...Dw(),sheets:[(t=Iw,r="Sheet1",{..._w(t,r),charts:[],images:[],cellValues:{}})]};var t,r;for(const t of this.handlers)t instanceof Vs&&await t.exportForExcel(e);return e=re(e),XT(e)}},e.NotAvailableError=x,e.NumberTooLargeError=_,e.OPERATOR_MAP=Rm,e.OP_PRIORITY=mm,e.OrderedLayers=tx,e.POSTFIX_UNARY_OPERATORS=Bl,e.Registry=h,e.Scope=n,e.SplillBlockedError=A,e.StateObserver=YI,e.TokenizingChars=Ze,e.UNARY_OPERATOR_MAP=Am,e.UnknownFunctionError=R,e.UuidGenerator=_o,e.__info__=rx,e._t=v,e.addRenderingLayer=function(e,t){if(ex[e])throw new Error(`Layer ${e} already exists`);ex[e]=t},e.batched=function(e){let t=!1;return async(...r)=>{t||(t=!0,await Promise.resolve(),t=!1,e(...r))}},e.borderStyles=["thin","medium","thick","dashed","dotted"],e.buildSheetLink=Ee,e.categories=om,e.cellReference=ho,e.chartStyleToCellStyle=function(e){return{bold:e.bold,italic:e.italic,fontSize:e.fontSize,textColor:e.color,align:e.align}},e.clip=ae,e.compile=_m,e.compileTokens=Dm,e.concat=Te,e.convertAstNodes=Sm,e.createEmptyStructure=Oo,e.debounce=Ie,e.deepCopy=re,e.deepEquals=Ae,e.deepEqualsArray=_e,e.errorTypes=w,e.escapeRegExp=te,e.findNextDefinedValue=function(e,t){let r=e.slice(t).find(e=>e);return r||(r=e.slice(0,t).reverse().find(e=>e)),r||""},e.functionCache=Om,e.getAddHeaderStartIndex=Re,e.getCanonicalSymbolName=se,e.getFormulaNumberRegex=Rt,e.getFullReference=To,e.getSearchRegex=function(e,t){let r=te(e);const n=t.matchCase?"":"i";return t.exactMatch&&(r=`^${r}$`),RegExp(r,n)},e.getUniqueText=Xe,e.getUnquotedSheetName=ne,e.groupConsecutive=ce,e.includesAll=De,e.insertItemsAtIndex=Be,e.isBoolean=he,e.isColHeader=wo,e.isColReference=yo,e.isConsecutive=ke,e.isDefined=Se,e.isFormula=Ke,e.isMarkdownLink=ge,e.isMatrix=D,e.isNotNull=function(e){return null!==e},e.isNumber=Ot,e.isNumberBetween=Ge,e.isObjectEmptyRecursive=Ce,e.isRowHeader=So,e.isRowReference=Eo,e.isSheetUrl=ye,e.isSingleCellReference=Co,e.isWebLink=me,e.iterateAstNodes=Cm,e.largeMax=We,e.largeMin=qe,e.lazy=xe,e.linkNext=ue,e.loopThroughReferenceType=function(e){if("REFERENCE"!==e.type)return e;const{xc:t,sheetName:r}=Io(e.value),[n,o]=t.split(":"),s=xo(n),i=o?`:${xo(o)}`:"";return{...e,value:To(r,s+i)}},e.mapAst=Tm,e.markdownLink=pe,e.memoize=Ue,e.parse=Em,e.parseMarkdownLink=be,e.parseNumber=Dt,e.parseSheetUrl=we,e.parseTokens=wm,e.percentile=Ft,e.range=le,e.rangeReference=vo,e.rangeTokenize=um,e.removeDuplicates=Ye,e.removeFalsyAttributes=Fe,e.removeIndexesFromArray=He,e.replaceItemAtIndex=ze,e.replaceNewLines=Pe,e.sanitizeSheetName=ie,e.setDefaultTranslationMethod=b,e.setTranslationMethod=function(e,t=()=>!0){g=e,m=t},e.setXcToFixedReferenceType=Ro,e.specialWhiteSpaceRegexp=Me,e.splitReference=Io,e.tokenize=$l,e.transpose2dPOJO=je,e.trimContent=$e,e.unquote=oe,e.whiteSpaceCharacters=Le,rx.version="19.1.0-alpha.3",rx.date="2025-12-26T10:26:09.971Z",rx.hash="e6313bd"}(this.o_spreadsheet_engine=this.o_spreadsheet_engine||{});
817
+ `}var QT;!function(e){e[e.Ready=0]="Ready",e[e.Running=1]="Running",e[e.RunningCore=2]="RunningCore",e[e.Finalizing=3]="Finalizing"}(QT||(QT={}));function JT(e,t={}){const r=re(t);return r.type=e,r}const ex={Background:0,Highlights:1,Clipboard:2,Chart:4,Autofill:5,Selection:6,Headers:100},tx=Ue(()=>Object.keys(ex).sort((e,t)=>ex[e]-ex[t]));const rx={};e.BadExpressionError=C,e.BasePlugin=Vs,e.CellErrorType=E,e.CircularDependencyError=I,e.DEFAULT_LOCALE=xr,e.DEFAULT_LOCALES=Tr,e.DivisionByZeroError=O,e.EvaluationError=S,e.FunctionCodeBuilder=t,e.FunctionRegistry=rm,e.InvalidReferenceError=T,e.Model=class extends Vm{corePlugins=[];statefulUIPlugins=[];range;session;isReplayingCommand=!1;renderers={};status=0;config;corePluginConfig;coreViewPluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},t={},r=[],n=new _o,o=!1){const s=performance.now();console.debug("##### Model creation #####"),super(),b(),r=Aw(e,r);const i=Tw(e,o);this.state=new YI,this.uuidGenerator=n,this.config=this.setupConfig(t),this.session=this.setupSession(i.revisionId),this.coreGetters={},this.range=new WI(this.coreGetters),this.coreGetters.getRangeString=this.range.getRangeString.bind(this.range),this.coreGetters.getRangeFromSheetXC=this.range.getRangeFromSheetXC.bind(this.range),this.coreGetters.createAdaptedRanges=this.range.createAdaptedRanges.bind(this.range),this.coreGetters.getRangeData=this.range.getRangeData.bind(this.range),this.coreGetters.getRangeDataFromXc=this.range.getRangeDataFromXc.bind(this.range),this.coreGetters.getRangeDataFromZone=this.range.getRangeDataFromZone.bind(this.range),this.coreGetters.getRangeFromRangeData=this.range.getRangeFromRangeData.bind(this.range),this.coreGetters.getRangeFromZone=this.range.getRangeFromZone.bind(this.range),this.coreGetters.recomputeRanges=this.range.recomputeRanges.bind(this.range),this.coreGetters.isRangeValid=this.range.isRangeValid.bind(this.range),this.coreGetters.extendRange=this.range.extendRange.bind(this.range),this.coreGetters.getRangesUnion=this.range.getRangesUnion.bind(this.range),this.coreGetters.removeRangesSheetPrefix=this.range.removeRangesSheetPrefix.bind(this.range),this.coreGetters.adaptFormulaStringDependencies=this.range.adaptFormulaStringDependencies.bind(this.range),this.coreGetters.copyFormulaStringForSheet=this.range.copyFormulaStringForSheet.bind(this.range),this.getters={isReadonly:()=>"readonly"===this.config.mode||"dashboard"===this.config.mode,isDashboard:()=>"dashboard"===this.config.mode},this.selection=new ZI(this.getters),this.coreHandlers.push(this.range),this.handlers.push(this.range),this.corePluginConfig=this.setupCorePluginConfig(),this.coreViewPluginConfig=this.setupCoreViewPluginConfig(),this.uiPluginConfig=this.setupUiPluginConfig();for(const e of BI.getAll())this.setupCorePlugin(e,i);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(r);for(const e of GI.getAll()){const t=this.setupCoreViewPlugin(e);this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(const e of $I.getAll()){const t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(const e of zI.getAll()){const t=this.setupUiPlugin(e);this.handlers.push(t),this.uiHandlers.push(t)}if(this.dispatch("START"),this.selection.observe(this,{handleEvent:()=>this.trigger("update")}),this.setupSessionEvents(),this.joinSession(),t.snapshotRequested||e["[Content_Types].xml"]&&!this.getters.isReadonly()){const e=performance.now();console.debug("Snapshot requested"),this.session.snapshot(this.exportData()),console.debug("Snapshot taken in",performance.now()-e,"ms")}console.debug("Model created in",performance.now()-s,"ms"),console.debug("######")}joinSession(){this.session.join(this.config.client)}async leaveSession(){const e=this.getters.isReadonly()?void 0:xe(()=>this.exportData());await this.session.leave(e)}setupUiPlugin(e){const t=new e(this.uiPluginConfig);for(const r of e.getters){if(!(r in t))throw new Error(`Invalid getter name: ${r} for plugin ${t.constructor}`);if(r in this.getters)throw new Error(`Getter "${r}" is already defined.`);this.getters[r]=t[r].bind(t)}for(const r of e.layers)this.renderers[r]||(this.renderers[r]=[]),this.renderers[r].push(t);return t}setupCoreViewPlugin(e){const t=new e(this.coreViewPluginConfig);for(const r of e.getters){if(!(r in t))throw new Error(`Invalid getter name: ${r} for plugin ${t.constructor}`);if(r in this.getters)throw new Error(`Getter "${r}" is already defined.`);this.getters[r]=t[r].bind(t)}return t}setupCorePlugin(e,t){const r=new e(this.corePluginConfig);for(const t of e.getters){if(!(t in r))throw new Error(`Invalid getter name: ${t} for plugin ${r.constructor}`);if(t in this.coreGetters)throw new Error(`Getter "${t}" is already defined.`);this.coreGetters[t]=r[t].bind(r)}r.import(t),this.corePlugins.push(r),this.coreHandlers.push(r),this.handlers.push(r)}onRemoteRevisionReceived({commands:e}){for(const t of e){const e=this.status;this.status=2,this.dispatchToHandlers(this.statefulUIPlugins,t),this.status=e}this.finalize()}setupSession(e){return new lv(vv({initialRevisionId:e,recordChanges:this.state.recordChanges.bind(this.state),dispatch:e=>{this.checkDispatchAllowed(e).isSuccessful?(this.isReplayingCommand=!0,this.dispatchToHandlers(this.coreHandlers,e),this.isReplayingCommand=!1):this.dispatchToHandlers(this.coreHandlers,{type:"UNDO",commands:[e]})}}),this.config.transportService,e)}setupSessionEvents(){this.session.on("remote-revision-received",this,this.onRemoteRevisionReceived),this.session.on("revision-undone",this,({commands:e})=>{this.dispatchFromCorePlugin("UNDO",{commands:e}),this.finalize()}),this.session.on("revision-redone",this,({commands:e})=>{this.dispatchFromCorePlugin("REDO",{commands:e}),this.finalize()}),this.session.on("unexpected-revision-id",this,()=>this.trigger("unexpected-revision-id")),this.session.on("collaborative-event-received",this,()=>{this.trigger("update")})}setupConfig(e){const t=e.client||{id:this.uuidGenerator.smallUuid(),name:v("Anonymous").toString()},r=e.transportService||new Nm,n="readonly"===e.mode||"dashboard"===e.mode;return{...e,mode:e.mode||"normal",custom:e.custom||{},external:this.setupExternalConfig(e.external||{}),transportService:n?new Mm(r):r,client:t,moveClient:()=>{},snapshotRequested:!1,notifyUI:e=>this.trigger("notify-ui",e),raiseBlockingErrorUI:e=>this.trigger("raise-error-ui",{text:e}),customColors:e.customColors||[]}}setupExternalConfig(e){const t=e.loadLocales||(()=>Promise.resolve(Tr));return{...e,loadLocales:t}}setupCorePluginConfig(){return{getters:this.coreGetters,stateObserver:this.state,range:this.range,dispatch:this.dispatchFromCorePlugin,canDispatch:this.canDispatch,custom:this.config.custom,external:this.config.external}}setupCoreViewPluginConfig(){return{getters:this.getters,stateObserver:this.state,custom:this.config.custom,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}setupUiPluginConfig(){return{getters:this.getters,stateObserver:this.state,dispatch:this.dispatch,canDispatch:this.canDispatch,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrency:this.config.defaultCurrency,customColors:this.config.customColors||[],external:this.config.external}}checkDispatchAllowed(e){const t=Ds(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some(e=>"Success"!==e)?new Fs(t.flat()):Fs.Success}checkDispatchAllowedCoreCommand(e){const t=this.corePlugins.map(t=>t.allowDispatch(e));return t.push(this.range.allowDispatch(e)),t}checkDispatchAllowedLocalCommand(e){return this.uiHandlers.map(t=>t.allowDispatch(e))}finalize(){this.status=3;for(const e of this.handlers)e.finalize();this.status=0,this.trigger("command-finalized")}canDispatch=(e,t)=>this.checkDispatchAllowed(JT(e,t));dispatch=(e,t)=>{const r=JT(e,t),n=this.status;if(this.getters.isReadonly()&&(o=r,!Os.has(o.type)))return new Fs("Readonly");var o;if(!this.session.canApplyOptimisticUpdate())return new Fs("WaitingSessionConfirmation");switch(n){case 0:const t=this.checkDispatchAllowed(r);if(!t.isSuccessful)return this.trigger("update"),t;this.status=1;const{changes:n,commands:o}=this.state.recordChanges(()=>{const t=performance.now();Ds(r)&&this.state.addCommand(r),this.dispatchToHandlers(this.handlers,r),this.finalize();const n=performance.now()-t;n>5&&console.debug(e,n,"ms")});this.session.save(r,o,n),this.status=0,this.trigger("update");break;case 1:if(Ds(r)){const e=this.checkDispatchAllowed(r);if(!e.isSuccessful)return e;this.state.addCommand(r)}this.dispatchToHandlers(this.handlers,r);break;case 3:throw new Error("Cannot dispatch commands in the finalize state");case 2:if(Ds(r))throw new Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,r)}return Fs.Success};dispatchFromCorePlugin=(e,t)=>{const r=JT(e,t),n=this.status;this.status=2;const o=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(o,r),this.status=n,Fs.Success};dispatchToHandlers(e,t){const r=Ds(t);for(const n of e)!r&&n instanceof Nw||n.beforeHandle(t);for(const n of e)!r&&n instanceof Nw||n.handle(t);this.trigger("command-dispatched",t)}drawLayer(e,t){const r=this.renderers[t];if(r)for(const n of r)e.ctx.save(),n.drawLayer(e,t),e.ctx.restore()}exportData(){let e=Dw();for(const t of this.handlers)t instanceof Nw&&t.export(e);return e.revisionId=this.session.getRevisionId()||Y,e=re(e),e}updateMode(e){this.config.mode=e,this.trigger("update")}async exportXLSX(){this.dispatch("EVALUATE_CELLS");let e={...Dw(),sheets:[(t=Iw,r="Sheet1",{..._w(t,r),charts:[],images:[],cellValues:{}})]};var t,r;for(const t of this.handlers)t instanceof Vs&&await t.exportForExcel(e);return e=re(e),XT(e)}},e.NotAvailableError=x,e.NumberTooLargeError=_,e.OPERATOR_MAP=Rm,e.OP_PRIORITY=mm,e.OrderedLayers=tx,e.POSTFIX_UNARY_OPERATORS=Bl,e.Registry=h,e.Scope=n,e.SplillBlockedError=A,e.StateObserver=YI,e.TokenizingChars=Ze,e.UNARY_OPERATOR_MAP=Am,e.UnknownFunctionError=R,e.UuidGenerator=_o,e.__info__=rx,e._t=v,e.addRenderingLayer=function(e,t){if(ex[e])throw new Error(`Layer ${e} already exists`);ex[e]=t},e.batched=function(e){let t=!1;return async(...r)=>{t||(t=!0,await Promise.resolve(),t=!1,e(...r))}},e.borderStyles=["thin","medium","thick","dashed","dotted"],e.buildSheetLink=Ee,e.categories=om,e.cellReference=ho,e.chartStyleToCellStyle=function(e){return{bold:e.bold,italic:e.italic,fontSize:e.fontSize,textColor:e.color,align:e.align}},e.clip=ae,e.compile=_m,e.compileTokens=Dm,e.concat=Te,e.convertAstNodes=Sm,e.createEmptyStructure=Oo,e.debounce=Ie,e.deepCopy=re,e.deepEquals=Ae,e.deepEqualsArray=_e,e.errorTypes=w,e.escapeRegExp=te,e.findNextDefinedValue=function(e,t){let r=e.slice(t).find(e=>e);return r||(r=e.slice(0,t).reverse().find(e=>e)),r||""},e.functionCache=Om,e.getAddHeaderStartIndex=Re,e.getCanonicalSymbolName=se,e.getFormulaNumberRegex=Rt,e.getFullReference=To,e.getSearchRegex=function(e,t){let r=te(e);const n=t.matchCase?"":"i";return t.exactMatch&&(r=`^${r}$`),RegExp(r,n)},e.getUniqueText=Xe,e.getUnquotedSheetName=ne,e.groupConsecutive=ce,e.includesAll=De,e.insertItemsAtIndex=Be,e.isBoolean=he,e.isColHeader=wo,e.isColReference=yo,e.isConsecutive=ke,e.isDefined=Se,e.isFormula=Ke,e.isMarkdownLink=ge,e.isMatrix=D,e.isNotNull=function(e){return null!==e},e.isNumber=Ot,e.isNumberBetween=Ge,e.isObjectEmptyRecursive=Ce,e.isRowHeader=So,e.isRowReference=Eo,e.isSheetUrl=ye,e.isSingleCellReference=Co,e.isWebLink=me,e.iterateAstNodes=Cm,e.largeMax=We,e.largeMin=qe,e.lazy=xe,e.linkNext=ue,e.loopThroughReferenceType=function(e){if("REFERENCE"!==e.type)return e;const{xc:t,sheetName:r}=Io(e.value),[n,o]=t.split(":"),s=xo(n),i=o?`:${xo(o)}`:"";return{...e,value:To(r,s+i)}},e.mapAst=Tm,e.markdownLink=pe,e.memoize=Ue,e.parse=Em,e.parseMarkdownLink=be,e.parseNumber=Dt,e.parseSheetUrl=we,e.parseTokens=wm,e.percentile=Ft,e.range=le,e.rangeReference=vo,e.rangeTokenize=um,e.removeDuplicates=Ye,e.removeFalsyAttributes=Fe,e.removeIndexesFromArray=He,e.replaceItemAtIndex=ze,e.replaceNewLines=Pe,e.sanitizeSheetName=ie,e.setDefaultTranslationMethod=b,e.setTranslationMethod=function(e,t=()=>!0){g=e,m=t},e.setXcToFixedReferenceType=Ro,e.specialWhiteSpaceRegexp=Me,e.splitReference=Io,e.tokenize=$l,e.transpose2dPOJO=je,e.trimContent=$e,e.unquote=oe,e.whiteSpaceCharacters=Le,rx.version="19.1.0-alpha.3",rx.date="2025-12-26T10:19:48.559Z",rx.hash="3296c7e"}(this.o_spreadsheet_engine=this.o_spreadsheet_engine||{});
@@ -2,9 +2,9 @@
2
2
  /*
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.1.1
6
- * @date 2025-12-26T10:27:38.836Z
7
- * @hash e6313bd
5
+ * @version 19.2.0-alpha.1
6
+ * @date 2025-12-26T10:21:24.024Z
7
+ * @hash 3296c7e
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f9fafb, #1b1d26);
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.1.1
6
- * @date 2025-12-26T10:26:46.141Z
7
- * @hash e6313bd
5
+ * @version 19.2.0-alpha.1
6
+ * @date 2025-12-26T10:20:28.360Z
7
+ * @hash 3296c7e
8
8
  */
9
9
 
10
10
  import { useEnv, useSubEnv, onWillUnmount, useComponent, status, Component, useRef, onMounted, useEffect, App, blockDom, useState, onPatched, useExternalListener, onWillUpdateProps, onWillStart, onWillPatch, xml, useChildSubEnv, markRaw, toRaw } from '@odoo/owl';
@@ -64891,13 +64891,16 @@ function downloadFile(dataUrl, fileName) {
64891
64891
  document.body.removeChild(a);
64892
64892
  }
64893
64893
  /**
64894
- * Detects if the current browser is Firefox
64894
+ * Detects the current browser brand and subsequent rendering engine
64895
64895
  */
64896
64896
  function isBrowserFirefox() {
64897
64897
  return /Firefox/i.test(navigator.userAgent);
64898
64898
  }
64899
+ function isBrowserChrome() {
64900
+ return /Chrome/i.test(navigator.userAgent);
64901
+ }
64899
64902
  function isBrowserSafari() {
64900
- return /Safari/i.test(navigator.userAgent);
64903
+ return !isBrowserChrome() && /Safari/i.test(navigator.userAgent);
64901
64904
  }
64902
64905
  // Mobile detection
64903
64906
  function maxTouchPoints() {
@@ -97895,6 +97898,6 @@ const chartHelpers = { ...CHART_HELPERS, ...CHART_RUNTIME_HELPERS };
97895
97898
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry$1 as Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, categories, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse$1 as parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
97896
97899
 
97897
97900
 
97898
- __info__.version = "19.1.1";
97899
- __info__.date = "2025-12-26T10:26:46.141Z";
97900
- __info__.hash = "e6313bd";
97901
+ __info__.version = "19.2.0-alpha.1";
97902
+ __info__.date = "2025-12-26T10:20:28.360Z";
97903
+ __info__.hash = "3296c7e";
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.1.1
6
- * @date 2025-12-26T10:26:46.141Z
7
- * @hash e6313bd
5
+ * @version 19.2.0-alpha.1
6
+ * @date 2025-12-26T10:20:28.360Z
7
+ * @hash 3296c7e
8
8
  */
9
9
 
10
10
  (function (exports, owl) {
@@ -64892,13 +64892,16 @@ stores.inject(MyMetaStore, storeInstance);
64892
64892
  document.body.removeChild(a);
64893
64893
  }
64894
64894
  /**
64895
- * Detects if the current browser is Firefox
64895
+ * Detects the current browser brand and subsequent rendering engine
64896
64896
  */
64897
64897
  function isBrowserFirefox() {
64898
64898
  return /Firefox/i.test(navigator.userAgent);
64899
64899
  }
64900
+ function isBrowserChrome() {
64901
+ return /Chrome/i.test(navigator.userAgent);
64902
+ }
64900
64903
  function isBrowserSafari() {
64901
- return /Safari/i.test(navigator.userAgent);
64904
+ return !isBrowserChrome() && /Safari/i.test(navigator.userAgent);
64902
64905
  }
64903
64906
  // Mobile detection
64904
64907
  function maxTouchPoints() {
@@ -97950,9 +97953,9 @@ stores.inject(MyMetaStore, storeInstance);
97950
97953
  exports.tokenize = tokenize;
97951
97954
 
97952
97955
 
97953
- __info__.version = "19.1.1";
97954
- __info__.date = "2025-12-26T10:26:46.141Z";
97955
- __info__.hash = "e6313bd";
97956
+ __info__.version = "19.2.0-alpha.1";
97957
+ __info__.date = "2025-12-26T10:20:28.360Z";
97958
+ __info__.hash = "3296c7e";
97956
97959
 
97957
97960
 
97958
97961
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);