@odoo/o-spreadsheet 18.3.46 → 18.3.47

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.
@@ -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 18.3.46
6
- * @date 2026-05-11T13:46:10.863Z
7
- * @hash c2bb3c8
5
+ * @version 18.3.47
6
+ * @date 2026-05-12T12:18:07.038Z
7
+ * @hash 8b8bc44
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -72315,6 +72315,6 @@ exports.stores = stores;
72315
72315
  exports.tokenColors = tokenColors;
72316
72316
  exports.tokenize = tokenize;
72317
72317
 
72318
- __info__.version = "18.3.46";
72319
- __info__.date = "2026-05-11T13:46:10.863Z";
72320
- __info__.hash = "c2bb3c8";
72318
+ __info__.version = "18.3.47";
72319
+ __info__.date = "2026-05-12T12:18:07.038Z";
72320
+ __info__.hash = "8b8bc44";
@@ -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 18.3.46
6
- * @date 2026-05-11T13:46:12.482Z
7
- * @hash c2bb3c8
5
+ * @version 18.3.47
6
+ * @date 2026-05-12T12:18:08.869Z
7
+ * @hash 8b8bc44
8
8
  */
9
9
  /* Originates from src/components/top_bar/top_bar.scss */
10
10
  @media (max-width: 900px) {
@@ -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 18.3.46
6
- * @date 2026-05-11T13:46:10.863Z
7
- * @hash c2bb3c8
5
+ * @version 18.3.47
6
+ * @date 2026-05-12T12:18:07.038Z
7
+ * @hash 8b8bc44
8
8
  */
9
9
 
10
10
  import { App, Component, blockDom, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, status, toRaw, useChildSubEnv, useComponent, useEffect, useEnv, useExternalListener, useRef, useState, useSubEnv, xml } from "@odoo/owl";
@@ -72083,6 +72083,6 @@ const chartHelpers = {
72083
72083
  //#endregion
72084
72084
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
72085
72085
 
72086
- __info__.version = "18.3.46";
72087
- __info__.date = "2026-05-11T13:46:10.863Z";
72088
- __info__.hash = "c2bb3c8";
72086
+ __info__.version = "18.3.47";
72087
+ __info__.date = "2026-05-12T12:18:07.038Z";
72088
+ __info__.hash = "8b8bc44";
@@ -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 18.3.46
6
- * @date 2026-05-11T13:46:10.863Z
7
- * @hash c2bb3c8
5
+ * @version 18.3.47
6
+ * @date 2026-05-12T12:18:07.038Z
7
+ * @hash 8b8bc44
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -72132,8 +72132,8 @@ exports.stores = stores;
72132
72132
  exports.tokenColors = tokenColors;
72133
72133
  exports.tokenize = tokenize;
72134
72134
 
72135
- __info__.version = "18.3.46";
72136
- __info__.date = "2026-05-11T13:46:10.863Z";
72137
- __info__.hash = "c2bb3c8";
72135
+ __info__.version = "18.3.47";
72136
+ __info__.date = "2026-05-12T12:18:07.038Z";
72137
+ __info__.hash = "8b8bc44";
72138
72138
 
72139
72139
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
@@ -3382,4 +3382,4 @@ You can download it directly instead.`,5),sticky:!1,type:`warning`});return}r=aw
3382
3382
  <Relationships xmlns="${rO.Relationships}">
3383
3383
  <Relationship ${q(e)} />
3384
3384
  </Relationships>
3385
- `),`_rels/.rels`)}function FK(e){let t={},n=[];for(let r of e.sheets){let e=r.name.slice(0,31);e=$t(e,n,{compute:(e,t)=>e.slice(0,31-String(t).length)+t}),n.push(e),e!==r.name&&(t[r.name]=e,r.name=e)}if(!Object.keys(t).length)return e;let r=Object.keys(t).sort((e,t)=>t.length-e.length),i=JSON.stringify(e);for(let e of r){let n=RegExp(`'?${at(e)}'?!`,`g`);i=i.replaceAll(n,n=>{let r=t[e];return n.replace(e,r)})}return JSON.parse(i)}function IK(e){for(let t of e.sheets)t.tables=t.tables.filter(e=>br(ar(e.range)).numberOfRows>1);return e}var LK=class extends Hd{corePlugins=[];statefulUIPlugins=[];range;session;isReplayingCommand=!1;renderers={};status=0;config;corePluginConfig;coreViewPluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},n={},r=[],i=new al,a=!1){let o=performance.now();console.debug(`##### Model creation #####`),super(),qi(),r=Nj(e,r);let s=Tj(e,a);this.state=new nG,this.uuidGenerator=i,this.config=this.setupConfig(n),this.session=this.setupSession(s.revisionId),this.coreGetters={},this.range=new AV(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.copyFormulaStringForSheet=this.range.copyFormulaStringForSheet.bind(this.range),this.getters={isReadonly:()=>this.config.mode===`readonly`||this.config.mode===`dashboard`,isDashboard:()=>this.config.mode===`dashboard`},this.selection=new eG(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(let e of tW.getAll())this.setupCorePlugin(e,s);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(r);for(let e of iW.getAll()){let t=this.setupCoreViewPlugin(e);this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(let e of rW.getAll()){let t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(let e of nW.getAll()){let 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(),n.snapshotRequested||e[`[Content_Types].xml`]&&!this.getters.isReadonly()){let e=performance.now();console.debug(`Snapshot requested`),this.session.snapshot(this.exportData()),this.garbageCollectExternalResources(),console.debug(`Snapshot taken in`,performance.now()-e,`ms`)}(0,t.markRaw)(this),console.debug(`Model created in`,performance.now()-o,`ms`),console.debug(`######`)}joinSession(){this.session.join(this.config.client)}async leaveSession(){let e=this.getters.isReadonly()?void 0:kt(()=>this.exportData());await this.session.leave(e)}setupUiPlugin(e){let t=new e(this.uiPluginConfig);for(let n of e.getters){if(!(n in t))throw Error(`Invalid getter name: ${n} for plugin ${t.constructor}`);if(n in this.getters)throw Error(`Getter "${n}" is already defined.`);this.getters[n]=t[n].bind(t)}for(let n of e.layers)this.renderers[n]||(this.renderers[n]=[]),this.renderers[n].push(t);return t}setupCoreViewPlugin(e){let t=new e(this.coreViewPluginConfig);for(let n of e.getters){if(!(n in t))throw Error(`Invalid getter name: ${n} for plugin ${t.constructor}`);if(n in this.getters)throw Error(`Getter "${n}" is already defined.`);this.getters[n]=t[n].bind(t)}return t}setupCorePlugin(e,t){let n=new e(this.corePluginConfig);for(let t of e.getters){if(!(t in n))throw Error(`Invalid getter name: ${t} for plugin ${n.constructor}`);if(t in this.coreGetters)throw Error(`Getter "${t}" is already defined.`);this.coreGetters[t]=n[t].bind(n)}n.import(t),this.corePlugins.push(n),this.coreHandlers.push(n),this.handlers.push(n)}onRemoteRevisionReceived({commands:e}){for(let t of e){let e=this.status;this.status=2,this.dispatchToHandlers(this.statefulUIPlugins,t),this.status=e}this.finalize()}setupSession(e){return new rU(XW({initialRevisionId:e,recordChanges:this.state.recordChanges.bind(this.state),dispatch:e=>{if(!this.checkDispatchAllowed(e).isSuccessful){this.dispatchToHandlers(this.coreHandlers,{type:`UNDO`,commands:[e]});return}this.isReplayingCommand=!0,this.dispatchToHandlers(this.coreHandlers,e),this.isReplayingCommand=!1}}),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){let t=e.client||{id:this.uuidGenerator.smallUuid(),name:O(`Anonymous`).toString()},n=e.transportService||new HW;return{...e,mode:e.mode||`normal`,custom:e.custom||{},external:this.setupExternalConfig(e.external||{}),transportService:n,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){let t=e.loadLocales||(()=>Promise.resolve(pa));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,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}}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){let t=ca(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some(e=>e!==`Success`)?new ua(t.flat()):ua.Success}checkDispatchAllowedCoreCommand(e){let 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(let e of this.handlers)e.finalize();this.status=0,this.trigger(`command-finalized`)}canDispatch=(e,t)=>this.checkDispatchAllowed(RK(e,t));dispatch=(e,t)=>{let n=RK(e,t),r=this.status;if(this.getters.isReadonly()&&!la(n))return new ua(`Readonly`);if(!this.session.canApplyOptimisticUpdate())return new ua(`WaitingSessionConfirmation`);switch(r){case 0:let t=this.checkDispatchAllowed(n);if(!t.isSuccessful)return this.trigger(`update`),t;this.status=1;let{changes:r,commands:i}=this.state.recordChanges(()=>{let t=performance.now();ca(n)&&this.state.addCommand(n),this.dispatchToHandlers(this.handlers,n),this.finalize();let r=performance.now()-t;r>5&&console.debug(e,r,`ms`)});this.session.save(n,i,r),this.status=0,this.trigger(`update`);break;case 1:if(ca(n)){let e=this.checkDispatchAllowed(n);if(!e.isSuccessful)return e;this.state.addCommand(n)}this.dispatchToHandlers(this.handlers,n);break;case 3:throw Error(`Cannot dispatch commands in the finalize state`);case 2:if(ca(n))throw Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,n)}return ua.Success};dispatchFromCorePlugin=(e,t)=>{let n=RK(e,t),r=this.status;this.status=2;let i=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(i,n),this.status=r,ua.Success};dispatchToHandlers(e,t){let n=ca(t);for(let r of e)!n&&r instanceof mV||r.beforeHandle(t);for(let r of e)!n&&r instanceof mV||r.handle(t);this.trigger(`command-dispatched`,t)}drawLayer(e,t){let n=this.renderers[t];if(n)for(let r of n)e.ctx.save(),r.drawLayer(e,t),e.ctx.restore()}exportData(){let e=Bj();for(let t of this.handlers)t instanceof mV&&t.export(e);return e.revisionId=this.session.getRevisionId()||`START_REVISION`,e=b(e),e}updateMode(e){this.config.mode=e,this.trigger(`update`)}exportXLSX(){this.dispatch(`EVALUATE_CELLS`);let e=Hj();for(let t of this.handlers)t instanceof pV&&t.exportForExcel(e);return e=b(e),EK(e)}garbageCollectExternalResources(){for(let e of this.corePlugins)e.garbageCollectExternalResources()}};function RK(e,t={}){let n=b(t);return n.type=e,n}let zK={},BK={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:26,HEADER_WIDTH:48,BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:96,DEFAULT_CELL_HEIGHT:23,SCROLLBAR_WIDTH:15},VK={autoCompleteProviders:oC,autofillModifiersRegistry:kC,autofillRulesRegistry:AC,cellMenuRegistry:MP,colMenuRegistry:TI,errorTypes:va,linkMenuRegistry:fM,functionRegistry:ix,featurePluginRegistry:nW,iconsOnCellRegistry:hO,statefulUIPluginRegistry:rW,coreViewsPluginRegistry:iW,corePluginRegistry:tW,rowMenuRegistry:AI,sidePanelRegistry:nB,figureRegistry:kD,chartSidePanelComponentRegistry:eR,chartComponentRegistry:RE,chartRegistry:LE,chartSubtypeRegistry:BE,topbarMenuRegistry:PI,topbarComponentRegistry:II,clickableCellRegistry:aW,otRegistry:FI,inverseCommandRegistry:FD,urlRegistry:ho,cellPopoverRegistry:BC,numberFormatMenuRegistry:EI,repeatLocalCommandTransformRegistry:LU,repeatCommandTransformRegistry:IU,clipboardHandlersRegistries:zd,pivotRegistry:bz,pivotTimeAdapterRegistry:qu,pivotSidePanelRegistry:Ez,pivotNormalizationValueRegistry:wd,supportedPivotPositionalFormulaRegistry:wC,pivotToFunctionValueRegistry:Td,migrationStepRegistry:bj,chartJsExtensionRegistry:pf},HK={arg:W,isEvaluationError:P,toBoolean:L,toJsDate:R,toNumber:F,toString:I,toNormalizedPivotValue:bd,toFunctionPivotValue:Sd,toXC:T,toZone:ar,toUnboundedZone:ir,toCartesian:Jn,numberToLetters:zn,lettersToNumber:Bn,UuidGenerator:al,formatValue:B,createCurrencyFormat:gs,ColorGenerator:Pn,computeTextWidth:Vc,createEmptyWorkbookData:Bj,createEmptySheet:zj,createEmptyExcelSheet:Vj,rgbaToHex:mn,colorToRGBA:hn,positionToZone:E,isDefined:C,isMatrix:A,lazy:kt,genericRepeat:RU,createAction:m,createActions:f,transformRangeData:Vd,deepEquals:w,overlap:_r,union:pr,isInside:vr,deepCopy:b,expandZoneOnInsertion:lr,reduceZoneOnDeletion:fr,unquote:ct,getMaxObjectId:fd,getFunctionsFromTokens:kx,getFirstPivotFunction:SC,getNumberOfPivotFunctions:CC,parseDimension:hd,isDateOrDatetimeField:gd,makeFieldProposal:_C,insertTokenAfterArgSeparator:yC,insertTokenAfterLeftParenthesis:bC,mergeContiguousZones:zr,getPivotHighlights:MI,pivotTimeAdapter:Ju,UNDO_REDO_PIVOT_COMMANDS:_H,createPivotFormula:yd,areDomainArgsFieldsValid:vd,splitReference:ac,sanitizeSheetName:ut,getUniqueText:$t,isNumber:Li,isDateTime:ai},UK={isMarkdownLink:gt,parseMarkdownLink:yt,markdownLink:vt,openLink:bo,urlRepresentation:yo},WK={Checkbox:Yj,Section:Q,RoundColorPicker:dL,ChartDataSeries:JI,ChartErrorSection:XI,ChartLabelRange:ZI,ChartTitle:cL,ChartPanel:rR,ChartFigure:HE,ChartJsComponent:HS,Grid:dV,GridOverlay:VB,ScorecardChart:aC,LineConfigPanel:VL,BarConfigPanel:$I,PieChartDesignPanel:HL,GenericChartConfigPanel:QI,ChartWithAxisDesignPanel:gL,GaugeChartConfigPanel:bL,GaugeChartDesignPanel:FL,ScorecardChartConfigPanel:GL,ScorecardChartDesignPanel:KL,GeoChartDesignPanel:zL,RadarChartDesignPanel:UL,WaterfallChartDesignPanel:$L,ComboChartDesignPanel:_L,FunnelChartDesignPanel:yL,ChartTypePicker:tR,FigureComponent:rB,Menu:EM,Popover:SM,SelectionInput:qI,ValidationMessages:YI,AddDimensionButton:UR,PivotDimensionGranularity:qR,PivotDimensionOrder:JR,PivotDimension:KR,PivotLayoutConfigurator:QR,PivotHTMLRenderer:fV,PivotDeferUpdate:VR,PivotTitleSection:$R,CogWheelMenu:GR,TextInput:WR,SidePanelCollapsible:tL,RadioSelection:uL,GeoChartRegionSelectSection:IL},GK={useDragAndDropListItems:RI,useHighlights:cR,useHighlightsOnHover:sR},KK={useStoreProvider:qd,DependencyContainer:Ud,CellPopoverStore:tM,ComposerFocusStore:nf,CellComposerStore:_B,FindAndReplaceStore:FR,HighlightStore:uC,DelayedHoveredCellStore:eM,HoveredTableStore:zB,ModelStore:Qd,NotificationStore:dC,RendererStore:$d,SelectionInputStore:KI,SpreadsheetStore:ef,useStore:V,useLocalStore:Jd,SidePanelStore:sV,PivotSidePanelStore:wz,PivotMeasureDisplayPanelStore:zR};function qK(e,t){return ix.add(e,t),{addFunction:(e,t)=>qK(e,t)}}let JK={DEFAULT_LOCALE:k,HIGHLIGHT_COLOR:_,PIVOT_TABLE_CONFIG:et,ChartTerms:uw},YK={...mD,...tE};e.AbstractCellClipboardHandler=gl,e.AbstractChart=US,e.AbstractFigureClipboardHandler=Ad,e.CellErrorType=j,e.CommandResult=fa,e.CorePlugin=mV,e.CoreViewPlugin=RV,e.DispatchResult=ua,e.EvaluationError=M,e.Model=LK,e.PivotRuntimeDefinition=ez,e.Registry=h,e.Revision=tU,e.SPREADSHEET_DIMENSIONS=BK,e.Spreadsheet=VW,e.SpreadsheetPivotTable=iz,e.UIPlugin=bH,e.__info__=zK,e.addFunction=qK,e.addRenderingLayer=_a,e.astToFormula=zv,e.chartHelpers=YK,e.compile=bx,e.compileTokens=xx,e.components=WK,e.constants=JK,e.convertAstNodes=Fv,e.coreTypes=sa,e.findCellInNewZone=kr,e.functionCache=yx,e.helpers=HK,e.hooks=GK,e.invalidateCFEvaluationCommands=ia,e.invalidateChartEvaluationCommands=na,e.invalidateDependenciesCommands=ra,e.invalidateEvaluationCommands=ta,e.iterateAstNodes=Iv,e.links=UK,e.load=Tj,e.parse=Nv,e.parseTokens=Pv,e.readonlyAllowedCommands=oa,e.registries=VK,e.setDefaultSheetViewSize=Qe,e.setTranslationMethod=Ki,e.stores=KK,e.tokenColors=mC,e.tokenize=bl,zK.version=`18.3.46`,zK.date=`2026-05-11T13:46:10.863Z`,zK.hash=`c2bb3c8`})(this.o_spreadsheet=this.o_spreadsheet||{},owl);
3385
+ `),`_rels/.rels`)}function FK(e){let t={},n=[];for(let r of e.sheets){let e=r.name.slice(0,31);e=$t(e,n,{compute:(e,t)=>e.slice(0,31-String(t).length)+t}),n.push(e),e!==r.name&&(t[r.name]=e,r.name=e)}if(!Object.keys(t).length)return e;let r=Object.keys(t).sort((e,t)=>t.length-e.length),i=JSON.stringify(e);for(let e of r){let n=RegExp(`'?${at(e)}'?!`,`g`);i=i.replaceAll(n,n=>{let r=t[e];return n.replace(e,r)})}return JSON.parse(i)}function IK(e){for(let t of e.sheets)t.tables=t.tables.filter(e=>br(ar(e.range)).numberOfRows>1);return e}var LK=class extends Hd{corePlugins=[];statefulUIPlugins=[];range;session;isReplayingCommand=!1;renderers={};status=0;config;corePluginConfig;coreViewPluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},n={},r=[],i=new al,a=!1){let o=performance.now();console.debug(`##### Model creation #####`),super(),qi(),r=Nj(e,r);let s=Tj(e,a);this.state=new nG,this.uuidGenerator=i,this.config=this.setupConfig(n),this.session=this.setupSession(s.revisionId),this.coreGetters={},this.range=new AV(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.copyFormulaStringForSheet=this.range.copyFormulaStringForSheet.bind(this.range),this.getters={isReadonly:()=>this.config.mode===`readonly`||this.config.mode===`dashboard`,isDashboard:()=>this.config.mode===`dashboard`},this.selection=new eG(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(let e of tW.getAll())this.setupCorePlugin(e,s);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(r);for(let e of iW.getAll()){let t=this.setupCoreViewPlugin(e);this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(let e of rW.getAll()){let t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(let e of nW.getAll()){let 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(),n.snapshotRequested||e[`[Content_Types].xml`]&&!this.getters.isReadonly()){let e=performance.now();console.debug(`Snapshot requested`),this.session.snapshot(this.exportData()),this.garbageCollectExternalResources(),console.debug(`Snapshot taken in`,performance.now()-e,`ms`)}(0,t.markRaw)(this),console.debug(`Model created in`,performance.now()-o,`ms`),console.debug(`######`)}joinSession(){this.session.join(this.config.client)}async leaveSession(){let e=this.getters.isReadonly()?void 0:kt(()=>this.exportData());await this.session.leave(e)}setupUiPlugin(e){let t=new e(this.uiPluginConfig);for(let n of e.getters){if(!(n in t))throw Error(`Invalid getter name: ${n} for plugin ${t.constructor}`);if(n in this.getters)throw Error(`Getter "${n}" is already defined.`);this.getters[n]=t[n].bind(t)}for(let n of e.layers)this.renderers[n]||(this.renderers[n]=[]),this.renderers[n].push(t);return t}setupCoreViewPlugin(e){let t=new e(this.coreViewPluginConfig);for(let n of e.getters){if(!(n in t))throw Error(`Invalid getter name: ${n} for plugin ${t.constructor}`);if(n in this.getters)throw Error(`Getter "${n}" is already defined.`);this.getters[n]=t[n].bind(t)}return t}setupCorePlugin(e,t){let n=new e(this.corePluginConfig);for(let t of e.getters){if(!(t in n))throw Error(`Invalid getter name: ${t} for plugin ${n.constructor}`);if(t in this.coreGetters)throw Error(`Getter "${t}" is already defined.`);this.coreGetters[t]=n[t].bind(n)}n.import(t),this.corePlugins.push(n),this.coreHandlers.push(n),this.handlers.push(n)}onRemoteRevisionReceived({commands:e}){for(let t of e){let e=this.status;this.status=2,this.dispatchToHandlers(this.statefulUIPlugins,t),this.status=e}this.finalize()}setupSession(e){return new rU(XW({initialRevisionId:e,recordChanges:this.state.recordChanges.bind(this.state),dispatch:e=>{if(!this.checkDispatchAllowed(e).isSuccessful){this.dispatchToHandlers(this.coreHandlers,{type:`UNDO`,commands:[e]});return}this.isReplayingCommand=!0,this.dispatchToHandlers(this.coreHandlers,e),this.isReplayingCommand=!1}}),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){let t=e.client||{id:this.uuidGenerator.smallUuid(),name:O(`Anonymous`).toString()},n=e.transportService||new HW;return{...e,mode:e.mode||`normal`,custom:e.custom||{},external:this.setupExternalConfig(e.external||{}),transportService:n,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){let t=e.loadLocales||(()=>Promise.resolve(pa));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,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}}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){let t=ca(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some(e=>e!==`Success`)?new ua(t.flat()):ua.Success}checkDispatchAllowedCoreCommand(e){let 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(let e of this.handlers)e.finalize();this.status=0,this.trigger(`command-finalized`)}canDispatch=(e,t)=>this.checkDispatchAllowed(RK(e,t));dispatch=(e,t)=>{let n=RK(e,t),r=this.status;if(this.getters.isReadonly()&&!la(n))return new ua(`Readonly`);if(!this.session.canApplyOptimisticUpdate())return new ua(`WaitingSessionConfirmation`);switch(r){case 0:let t=this.checkDispatchAllowed(n);if(!t.isSuccessful)return this.trigger(`update`),t;this.status=1;let{changes:r,commands:i}=this.state.recordChanges(()=>{let t=performance.now();ca(n)&&this.state.addCommand(n),this.dispatchToHandlers(this.handlers,n),this.finalize();let r=performance.now()-t;r>5&&console.debug(e,r,`ms`)});this.session.save(n,i,r),this.status=0,this.trigger(`update`);break;case 1:if(ca(n)){let e=this.checkDispatchAllowed(n);if(!e.isSuccessful)return e;this.state.addCommand(n)}this.dispatchToHandlers(this.handlers,n);break;case 3:throw Error(`Cannot dispatch commands in the finalize state`);case 2:if(ca(n))throw Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,n)}return ua.Success};dispatchFromCorePlugin=(e,t)=>{let n=RK(e,t),r=this.status;this.status=2;let i=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(i,n),this.status=r,ua.Success};dispatchToHandlers(e,t){let n=ca(t);for(let r of e)!n&&r instanceof mV||r.beforeHandle(t);for(let r of e)!n&&r instanceof mV||r.handle(t);this.trigger(`command-dispatched`,t)}drawLayer(e,t){let n=this.renderers[t];if(n)for(let r of n)e.ctx.save(),r.drawLayer(e,t),e.ctx.restore()}exportData(){let e=Bj();for(let t of this.handlers)t instanceof mV&&t.export(e);return e.revisionId=this.session.getRevisionId()||`START_REVISION`,e=b(e),e}updateMode(e){this.config.mode=e,this.trigger(`update`)}exportXLSX(){this.dispatch(`EVALUATE_CELLS`);let e=Hj();for(let t of this.handlers)t instanceof pV&&t.exportForExcel(e);return e=b(e),EK(e)}garbageCollectExternalResources(){for(let e of this.corePlugins)e.garbageCollectExternalResources()}};function RK(e,t={}){let n=b(t);return n.type=e,n}let zK={},BK={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:26,HEADER_WIDTH:48,BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:96,DEFAULT_CELL_HEIGHT:23,SCROLLBAR_WIDTH:15},VK={autoCompleteProviders:oC,autofillModifiersRegistry:kC,autofillRulesRegistry:AC,cellMenuRegistry:MP,colMenuRegistry:TI,errorTypes:va,linkMenuRegistry:fM,functionRegistry:ix,featurePluginRegistry:nW,iconsOnCellRegistry:hO,statefulUIPluginRegistry:rW,coreViewsPluginRegistry:iW,corePluginRegistry:tW,rowMenuRegistry:AI,sidePanelRegistry:nB,figureRegistry:kD,chartSidePanelComponentRegistry:eR,chartComponentRegistry:RE,chartRegistry:LE,chartSubtypeRegistry:BE,topbarMenuRegistry:PI,topbarComponentRegistry:II,clickableCellRegistry:aW,otRegistry:FI,inverseCommandRegistry:FD,urlRegistry:ho,cellPopoverRegistry:BC,numberFormatMenuRegistry:EI,repeatLocalCommandTransformRegistry:LU,repeatCommandTransformRegistry:IU,clipboardHandlersRegistries:zd,pivotRegistry:bz,pivotTimeAdapterRegistry:qu,pivotSidePanelRegistry:Ez,pivotNormalizationValueRegistry:wd,supportedPivotPositionalFormulaRegistry:wC,pivotToFunctionValueRegistry:Td,migrationStepRegistry:bj,chartJsExtensionRegistry:pf},HK={arg:W,isEvaluationError:P,toBoolean:L,toJsDate:R,toNumber:F,toString:I,toNormalizedPivotValue:bd,toFunctionPivotValue:Sd,toXC:T,toZone:ar,toUnboundedZone:ir,toCartesian:Jn,numberToLetters:zn,lettersToNumber:Bn,UuidGenerator:al,formatValue:B,createCurrencyFormat:gs,ColorGenerator:Pn,computeTextWidth:Vc,createEmptyWorkbookData:Bj,createEmptySheet:zj,createEmptyExcelSheet:Vj,rgbaToHex:mn,colorToRGBA:hn,positionToZone:E,isDefined:C,isMatrix:A,lazy:kt,genericRepeat:RU,createAction:m,createActions:f,transformRangeData:Vd,deepEquals:w,overlap:_r,union:pr,isInside:vr,deepCopy:b,expandZoneOnInsertion:lr,reduceZoneOnDeletion:fr,unquote:ct,getMaxObjectId:fd,getFunctionsFromTokens:kx,getFirstPivotFunction:SC,getNumberOfPivotFunctions:CC,parseDimension:hd,isDateOrDatetimeField:gd,makeFieldProposal:_C,insertTokenAfterArgSeparator:yC,insertTokenAfterLeftParenthesis:bC,mergeContiguousZones:zr,getPivotHighlights:MI,pivotTimeAdapter:Ju,UNDO_REDO_PIVOT_COMMANDS:_H,createPivotFormula:yd,areDomainArgsFieldsValid:vd,splitReference:ac,sanitizeSheetName:ut,getUniqueText:$t,isNumber:Li,isDateTime:ai},UK={isMarkdownLink:gt,parseMarkdownLink:yt,markdownLink:vt,openLink:bo,urlRepresentation:yo},WK={Checkbox:Yj,Section:Q,RoundColorPicker:dL,ChartDataSeries:JI,ChartErrorSection:XI,ChartLabelRange:ZI,ChartTitle:cL,ChartPanel:rR,ChartFigure:HE,ChartJsComponent:HS,Grid:dV,GridOverlay:VB,ScorecardChart:aC,LineConfigPanel:VL,BarConfigPanel:$I,PieChartDesignPanel:HL,GenericChartConfigPanel:QI,ChartWithAxisDesignPanel:gL,GaugeChartConfigPanel:bL,GaugeChartDesignPanel:FL,ScorecardChartConfigPanel:GL,ScorecardChartDesignPanel:KL,GeoChartDesignPanel:zL,RadarChartDesignPanel:UL,WaterfallChartDesignPanel:$L,ComboChartDesignPanel:_L,FunnelChartDesignPanel:yL,ChartTypePicker:tR,FigureComponent:rB,Menu:EM,Popover:SM,SelectionInput:qI,ValidationMessages:YI,AddDimensionButton:UR,PivotDimensionGranularity:qR,PivotDimensionOrder:JR,PivotDimension:KR,PivotLayoutConfigurator:QR,PivotHTMLRenderer:fV,PivotDeferUpdate:VR,PivotTitleSection:$R,CogWheelMenu:GR,TextInput:WR,SidePanelCollapsible:tL,RadioSelection:uL,GeoChartRegionSelectSection:IL},GK={useDragAndDropListItems:RI,useHighlights:cR,useHighlightsOnHover:sR},KK={useStoreProvider:qd,DependencyContainer:Ud,CellPopoverStore:tM,ComposerFocusStore:nf,CellComposerStore:_B,FindAndReplaceStore:FR,HighlightStore:uC,DelayedHoveredCellStore:eM,HoveredTableStore:zB,ModelStore:Qd,NotificationStore:dC,RendererStore:$d,SelectionInputStore:KI,SpreadsheetStore:ef,useStore:V,useLocalStore:Jd,SidePanelStore:sV,PivotSidePanelStore:wz,PivotMeasureDisplayPanelStore:zR};function qK(e,t){return ix.add(e,t),{addFunction:(e,t)=>qK(e,t)}}let JK={DEFAULT_LOCALE:k,HIGHLIGHT_COLOR:_,PIVOT_TABLE_CONFIG:et,ChartTerms:uw},YK={...mD,...tE};e.AbstractCellClipboardHandler=gl,e.AbstractChart=US,e.AbstractFigureClipboardHandler=Ad,e.CellErrorType=j,e.CommandResult=fa,e.CorePlugin=mV,e.CoreViewPlugin=RV,e.DispatchResult=ua,e.EvaluationError=M,e.Model=LK,e.PivotRuntimeDefinition=ez,e.Registry=h,e.Revision=tU,e.SPREADSHEET_DIMENSIONS=BK,e.Spreadsheet=VW,e.SpreadsheetPivotTable=iz,e.UIPlugin=bH,e.__info__=zK,e.addFunction=qK,e.addRenderingLayer=_a,e.astToFormula=zv,e.chartHelpers=YK,e.compile=bx,e.compileTokens=xx,e.components=WK,e.constants=JK,e.convertAstNodes=Fv,e.coreTypes=sa,e.findCellInNewZone=kr,e.functionCache=yx,e.helpers=HK,e.hooks=GK,e.invalidateCFEvaluationCommands=ia,e.invalidateChartEvaluationCommands=na,e.invalidateDependenciesCommands=ra,e.invalidateEvaluationCommands=ta,e.iterateAstNodes=Iv,e.links=UK,e.load=Tj,e.parse=Nv,e.parseTokens=Pv,e.readonlyAllowedCommands=oa,e.registries=VK,e.setDefaultSheetViewSize=Qe,e.setTranslationMethod=Ki,e.stores=KK,e.tokenColors=mC,e.tokenize=bl,zK.version=`18.3.47`,zK.date=`2026-05-12T12:18:07.038Z`,zK.hash=`8b8bc44`})(this.o_spreadsheet=this.o_spreadsheet||{},owl);
@@ -1,9 +1,9 @@
1
1
  <!--
2
2
  This file is generated by o-spreadsheet build tools. Do not edit it.
3
3
  @see https://github.com/odoo/o-spreadsheet
4
- @version 18.3.46
5
- @date 2026-05-11T13:46:11.644Z
6
- @hash c2bb3c8
4
+ @version 18.3.47
5
+ @date 2026-05-12T12:18:07.925Z
6
+ @hash 8b8bc44
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ValidationMessages">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/o-spreadsheet",
3
- "version": "18.3.46",
3
+ "version": "18.3.47",
4
4
  "description": "A spreadsheet component",
5
5
  "type": "module",
6
6
  "main": "dist/o-spreadsheet.cjs.js",
@@ -28,7 +28,7 @@
28
28
  "test:watch": "jest --watch",
29
29
  "prettier": "prettier . --write",
30
30
  "check-formatting": "prettier . --check && eslint",
31
- "postinstall": "husky install",
31
+ "prepare": "husky install",
32
32
  "watch": "npm-run-all -p watch:*",
33
33
  "watch:bundle": "npm run bundle:iife -- --watch",
34
34
  "watch:ts": "npm run build:js -- --watch",
@@ -86,7 +86,7 @@
86
86
  "jszip": "^3.6.0",
87
87
  "lint-staged": "^12.1.2",
88
88
  "live-server": "^1.2.1",
89
- "luxon": "^3.5.0",
89
+ "luxon": "3.5.0",
90
90
  "minimist": "^1.2.8",
91
91
  "mockdate": "^3.0.2",
92
92
  "node-watch": "^0.7.3",
@@ -134,8 +134,8 @@
134
134
  "xmlSelfClosingSpace": false
135
135
  },
136
136
  "dependencies": {
137
- "@odoo/owl": "2.8.1",
138
- "bootstrap": "^5.3.3",
137
+ "@odoo/owl": "2.8.2",
138
+ "bootstrap": "5.3.3",
139
139
  "font-awesome": "^4.7.0",
140
140
  "rbush": "^3.0.1"
141
141
  },