@odoo/o-spreadsheet 17.0.105 → 17.0.106

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 17.0.105
6
- * @date 2026-07-30T06:51:23.983Z
7
- * @hash 974b7fa
5
+ * @version 17.0.106
6
+ * @date 2026-08-29T09:12:26.343Z
7
+ * @hash c877406
8
8
  */
9
9
 
10
10
  import { Component, markRaw, onMounted, onPatched, onWillPatch, onWillStart, onWillUnmount, onWillUpdateProps, useChildSubEnv, useComponent, useEffect, useExternalListener, useRef, useState, useSubEnv, xml } from "@odoo/owl";
@@ -45684,6 +45684,9 @@ css`
45684
45684
  position: absolute;
45685
45685
  cursor: pointer;
45686
45686
  }
45687
+ .o-grid.o-dashboard-grid {
45688
+ background: #ffffff;
45689
+ }
45687
45690
  `;
45688
45691
  var SpreadsheetDashboard = class extends Component {
45689
45692
  static template = "o-spreadsheet-SpreadsheetDashboard";
@@ -50869,6 +50872,6 @@ const constants = { DEFAULT_LOCALE };
50869
50872
  //#endregion
50870
50873
  export { AbstractChart, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, tokenize };
50871
50874
 
50872
- __info__.version = "17.0.105";
50873
- __info__.date = "2026-07-30T06:51:23.983Z";
50874
- __info__.hash = "974b7fa";
50875
+ __info__.version = "17.0.106";
50876
+ __info__.date = "2026-08-29T09:12:26.343Z";
50877
+ __info__.hash = "c877406";
@@ -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 17.0.105
6
- * @date 2026-07-30T06:51:23.983Z
7
- * @hash 974b7fa
5
+ * @version 17.0.106
6
+ * @date 2026-08-29T09:12:26.343Z
7
+ * @hash c877406
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -45686,6 +45686,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
45686
45686
  position: absolute;
45687
45687
  cursor: pointer;
45688
45688
  }
45689
+ .o-grid.o-dashboard-grid {
45690
+ background: #ffffff;
45691
+ }
45689
45692
  `;
45690
45693
  var SpreadsheetDashboard = class extends _odoo_owl.Component {
45691
45694
  static template = "o-spreadsheet-SpreadsheetDashboard";
@@ -50907,8 +50910,8 @@ exports.setDefaultSheetViewSize = setDefaultSheetViewSize;
50907
50910
  exports.setTranslationMethod = setTranslationMethod;
50908
50911
  exports.tokenize = tokenize;
50909
50912
 
50910
- __info__.version = "17.0.105";
50911
- __info__.date = "2026-07-30T06:51:23.983Z";
50912
- __info__.hash = "974b7fa";
50913
+ __info__.version = "17.0.106";
50914
+ __info__.date = "2026-08-29T09:12:26.343Z";
50915
+ __info__.hash = "c877406";
50913
50916
 
50914
50917
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
@@ -1589,6 +1589,9 @@
1589
1589
  position: absolute;
1590
1590
  cursor: pointer;
1591
1591
  }
1592
+ .o-grid.o-dashboard-grid {
1593
+ background: #ffffff;
1594
+ }
1592
1595
  `;var Nj=class extends t.Component{static template=`o-spreadsheet-SpreadsheetDashboard`;static components={GridOverlay:bw,GridPopover:xw,Popover:lc,VerticalScrollBar:Pw,HorizontalScrollBar:Nw,FilterIconsOverlay:YC};onMouseWheel;canvasPosition;hoveredCell;setup(){let e=(0,t.useRef)(`grid`);this.canvasPosition=rc(e),this.hoveredCell=(0,t.useState)({col:void 0,row:void 0}),(0,t.useChildSubEnv)({getPopoverContainerRect:()=>this.getGridRect()}),Ew(`canvas`,this.env.model,()=>this.env.model.getters.getSheetViewDimension()),this.onMouseWheel=Dw((e,t)=>{this.moveCanvas(e,t),this.hoveredCell.col=void 0,this.hoveredCell.row=void 0})}onCellHovered({col:e,row:t}){this.hoveredCell.col=e,this.hoveredCell.row=t}get gridContainer(){let e=this.env.model.getters.getActiveSheetId(),{right:t}=this.env.model.getters.getSheetZone(e),{end:n}=this.env.model.getters.getColDimensions(e,t);return W({"max-width":`${n}px`})}get gridOverlayDimensions(){return W({height:`100%`,width:`100%`})}getCellClickableStyle(e){return W({top:`${e.y}px`,left:`${e.x}px`,width:`${e.width}px`,height:`${e.height}px`})}getClickableCells(){let e=[],t=this.env.model.getters.getActiveSheetId();for(let n of this.env.model.getters.getSheetViewVisibleCols())for(let r of this.env.model.getters.getSheetViewVisibleRows()){let i={sheetId:t,col:n,row:r},a=this.getClickableAction(i);if(!a)continue;let o;o=this.env.model.getters.isInMerge(i)?this.env.model.getters.getMerge(i):V({col:n,row:r});let s=this.env.model.getters.getVisibleRect(o);e.push({coordinates:s,position:{col:n,row:r},action:a})}return e}getClickableAction(e){for(let t of Cj.getAll().sort((e,t)=>e.sequence-t.sequence))if(t.condition(e,this.env))return t.execute;return!1}selectClickableCell(e){let{position:t,action:n}=e;n({...t,sheetId:this.env.model.getters.getActiveSheetId()},this.env)}onClosePopover(){this.env.model.dispatch(`CLOSE_CELL_POPOVER`)}onGridResized({height:e,width:t}){this.env.model.dispatch(`RESIZE_SHEETVIEW`,{width:t,height:e,gridOffsetX:0,gridOffsetY:0})}moveCanvas(e,t){let{scrollX:n,scrollY:r}=this.env.model.getters.getActiveSheetDOMScrollInfo();this.env.model.dispatch(`SET_VIEWPORT_OFFSET`,{offsetX:n+e,offsetY:r+t})}getGridRect(){return{...this.canvasPosition,...this.env.model.getters.getSheetViewDimensionWithHeaders()}}};Nj.props={},U`
1593
1596
  .o-header-group {
1594
1597
  .o-header-group-header {
@@ -2674,4 +2677,4 @@
2674
2677
  <Relationships xmlns="${Hw.Relationships}">
2675
2678
  <Relationship ${Y(e)} />
2676
2679
  </Relationships>
2677
- `),`_rels/.rels`)}var AN=class extends Bk{corePlugins=[];featurePlugins=[];statefulUIPlugins=[];coreViewsPlugins=[];range;session;isReplayingCommand=!1;renderers=[];status=0;config;corePluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},n={},r=[],i=new ko,a=!0){super(),v(),r=TO(e,r);let o=yO(e,a);this.state=new fM,this.uuidGenerator=i,this.config=this.setupConfig(n),this.session=this.setupSession(o.revisionId),this.coreGetters={},this.range=new uk(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.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.getters={isReadonly:()=>this.config.mode===`readonly`||this.config.mode===`dashboard`,isDashboard:()=>this.config.mode===`dashboard`},this.uuidGenerator.setIsFastStrategy(!0),this.selection=new dM(this.getters),this.coreHandlers.push(this.range),this.handlers.push(this.range),this.corePluginConfig=this.setupCorePluginConfig(),this.uiPluginConfig=this.setupUiPluginConfig();for(let e of yj.getAll())this.setupCorePlugin(e,o);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(r);for(let e of Sj.getAll()){let t=this.setupUiPlugin(e);this.coreViewsPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(let e of xj.getAll()){let t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(let e of bj.getAll()){let t=this.setupUiPlugin(e);this.featurePlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}this.uuidGenerator.setIsFastStrategy(!1),this.dispatch(`START`),this.selection.observe(this,{handleEvent:()=>this.trigger(`update`)}),this.setupSessionEvents(),this.joinSession(),n.snapshotRequested&&(this.session.snapshot(this.exportData()),this.garbageCollectExternalResources()),(0,t.markRaw)(this)}joinSession(){this.session.join(this.config.client)}async leaveSession(){let e=this.getters.isReadonly()?void 0:vt(()=>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)}let n=e.layers.map(e=>[t,e]);return this.renderers.push(...n),this.renderers.sort((e,t)=>e[1]-t[1]),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 uA(sM({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:y(`Anonymous`).toString()},n=e.transportService||new Qj;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})}}setupExternalConfig(e){let t=e.loadLocales||(()=>Promise.resolve(hr));return{...e,loadLocales:t}}setupCorePluginConfig(){return{getters:this.coreGetters,stateObserver:this.state,range:this.range,dispatch:this.dispatchFromCorePlugin,uuidGenerator:this.uuidGenerator,custom:this.config.custom,external:this.config.external}}setupUiPluginConfig(){return{getters:this.getters,stateObserver:this.state,dispatch:this.dispatch,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrencyFormat:this.config.defaultCurrencyFormat}}checkDispatchAllowed(e){let t=ur(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some(e=>e!==`Success`)?new fr(t.flat()):fr.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}canDispatch=(e,t)=>this.checkDispatchAllowed(jN(e,t));dispatch=(e,t)=>{let n=jN(e,t),r=this.status;if(this.getters.isReadonly()&&!dr(n))return new fr(`Readonly`);if(!this.session.canApplyOptimisticUpdate())return new fr(`WaitingSessionConfirmation`);switch(r){case 0:let t=this.checkDispatchAllowed(n);if(!t.isSuccessful)return t;this.status=1;let{changes:r,commands:i}=this.state.recordChanges(()=>{ur(n)&&this.state.addCommand(n),this.dispatchToHandlers(this.handlers,n),this.finalize()});this.session.save(n,i,r),this.status=0,this.trigger(`update`);break;case 1:if(ur(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(ur(n))throw Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,n)}return fr.Success};dispatchFromCorePlugin=(e,t)=>{let n=jN(e,t),r=this.status;this.status=2;let i=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(i,n),this.status=r,fr.Success};dispatchToHandlers(e,t){let n=ur(t);for(let r of e)!n&&r instanceof IO||r.beforeHandle(t);for(let r of e)!n&&r instanceof IO||r.handle(t)}drawGrid(e){for(let[t,n]of this.renderers)e.ctx.save(),t.drawGrid(e,n),e.ctx.restore()}exportData(){let e=MO();for(let t of this.handlers)t instanceof IO&&t.export(e);return e.revisionId=this.session.getRevisionId()||`START_REVISION`,e=S(e),e}updateMode(e){e!==`normal`&&this.dispatch(`CANCEL_EDITION`),this.config.mode=e,this.trigger(`update`)}exportXLSX(){this.dispatch(`EVALUATE_CELLS`);let e=PO();for(let t of this.handlers)t instanceof FO&&t.exportForExcel(e);return e=S(e),xN(e)}garbageCollectExternalResources(){for(let e of this.corePlugins)e.garbageCollectExternalResources()}};function jN(e,t={}){let n=S(t);return n.type=e,n}let MN={},NN={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:26,HEADER_WIDTH:48,TOPBAR_HEIGHT:63,BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:96,DEFAULT_CELL_HEIGHT:23,SCROLLBAR_WIDTH:15},PN={autofillModifiersRegistry:Ss,autofillRulesRegistry:Cs,cellMenuRegistry:db,colMenuRegistry:rS,linkMenuRegistry:sl,functionRegistry:Ny,featurePluginRegistry:bj,statefulUIPluginRegistry:xj,coreViewsPluginRegistry:Sj,corePluginRegistry:yj,rowMenuRegistry:oS,sidePanelRegistry:bC,figureRegistry:wu,chartSidePanelComponentRegistry:kS,chartComponentRegistry:vu,chartRegistry:_u,topbarMenuRegistry:cS,topbarComponentRegistry:xC,clickableCellRegistry:Cj,otRegistry:lS,inverseCommandRegistry:Au,urlRegistry:qa,cellPopoverRegistry:ul,numberFormatMenuRegistry:iS,repeatLocalCommandTransformRegistry:WA,repeatCommandTransformRegistry:$},FN={arg:K,toBoolean:F,toJsDate:I,toNumber:N,toString:P,toXC:O,toZone:ea,toUnboundedZone:Qi,toCartesian:rn,numberToLetters:D,lettersToNumber:en,UuidGenerator:ko,formatValue:z,createCurrencyFormat:Ei,computeTextWidth:_o,createEmptyWorkbookData:MO,createEmptySheet:jO,createEmptyExcelSheet:NO,getDefaultChartJsRuntime:Dl,chartFontColor:Jo,ChartColors:qo,EvaluationError:b,CellErrorLevel:te,getFillingMode:Ml,rgbaToHex:Kt,colorToRGBA:qt,positionToZone:V,isDefined:T,isMatrix:j,lazy:vt,genericRepeat:GA,createAction:Mo,createActions:Ao,transformRangeData:Po,deepEquals:E,isNumber:Yn,isDateTime:_n},IN={isMarkdownLink:at,parseMarkdownLink:ct,markdownLink:st,openLink:Qa,urlRepresentation:Za},LN={ChartPanel:AS,ChartFigure:bu,ChartJsComponent:Fo,Grid:Lw,GridOverlay:bw,ScorecardChart:xs,LineConfigPanel:TS,LineBarPieDesignPanel:xS,BarConfigPanel:gS,LineBarPieConfigPanel:hS,GaugeChartConfigPanel:CS,GaugeChartDesignPanel:wS,ScorecardChartConfigPanel:DS,ScorecardChartDesignPanel:OS,FigureComponent:SC,Menu:pc,SelectionInput:pS},RN={useDragAndDropListItems:FS};function zN(e,t){return Ny.add(e,t),{addFunction:(e,t)=>zN(e,t)}}let BN={DEFAULT_LOCALE:A};e.AbstractChart=Io,e.CommandResult=mr,e.CorePlugin=IO,e.DispatchResult=fr,e.EvaluationError=b,e.Model=AN,e.Registry=H,e.Revision=cA,e.SPREADSHEET_DIMENSIONS=NN,e.Spreadsheet=Zj,e.UIPlugin=Q,e.__info__=MN,e.addFunction=zN,e.astToFormula=ET,e.compile=NT,e.compileTokens=PT,e.components=LN,e.constants=BN,e.convertAstNodes=ST,e.coreTypes=lr,e.findCellInNewZone=Ta,e.functionCache=MT,e.helpers=FN,e.hooks=RN,e.invalidateCFEvaluationCommands=sr,e.invalidateDependenciesCommands=or,e.invalidateEvaluationCommands=ar,e.iterateAstNodes=CT,e.links=IN,e.load=yO,e.parse=bT,e.parseTokens=xT,e.readonlyAllowedCommands=cr,e.registries=PN,e.setDefaultSheetViewSize=Ke,e.setTranslationMethod=_,e.tokenize=vc,MN.version=`17.0.105`,MN.date=`2026-07-30T06:51:23.983Z`,MN.hash=`974b7fa`})(this.o_spreadsheet=this.o_spreadsheet||{},owl);
2680
+ `),`_rels/.rels`)}var AN=class extends Bk{corePlugins=[];featurePlugins=[];statefulUIPlugins=[];coreViewsPlugins=[];range;session;isReplayingCommand=!1;renderers=[];status=0;config;corePluginConfig;uiPluginConfig;state;selection;getters;coreGetters;uuidGenerator;handlers=[];uiHandlers=[];coreHandlers=[];constructor(e={},n={},r=[],i=new ko,a=!0){super(),v(),r=TO(e,r);let o=yO(e,a);this.state=new fM,this.uuidGenerator=i,this.config=this.setupConfig(n),this.session=this.setupSession(o.revisionId),this.coreGetters={},this.range=new uk(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.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.getters={isReadonly:()=>this.config.mode===`readonly`||this.config.mode===`dashboard`,isDashboard:()=>this.config.mode===`dashboard`},this.uuidGenerator.setIsFastStrategy(!0),this.selection=new dM(this.getters),this.coreHandlers.push(this.range),this.handlers.push(this.range),this.corePluginConfig=this.setupCorePluginConfig(),this.uiPluginConfig=this.setupUiPluginConfig();for(let e of yj.getAll())this.setupCorePlugin(e,o);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(r);for(let e of Sj.getAll()){let t=this.setupUiPlugin(e);this.coreViewsPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(let e of xj.getAll()){let t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(let e of bj.getAll()){let t=this.setupUiPlugin(e);this.featurePlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}this.uuidGenerator.setIsFastStrategy(!1),this.dispatch(`START`),this.selection.observe(this,{handleEvent:()=>this.trigger(`update`)}),this.setupSessionEvents(),this.joinSession(),n.snapshotRequested&&(this.session.snapshot(this.exportData()),this.garbageCollectExternalResources()),(0,t.markRaw)(this)}joinSession(){this.session.join(this.config.client)}async leaveSession(){let e=this.getters.isReadonly()?void 0:vt(()=>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)}let n=e.layers.map(e=>[t,e]);return this.renderers.push(...n),this.renderers.sort((e,t)=>e[1]-t[1]),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 uA(sM({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:y(`Anonymous`).toString()},n=e.transportService||new Qj;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})}}setupExternalConfig(e){let t=e.loadLocales||(()=>Promise.resolve(hr));return{...e,loadLocales:t}}setupCorePluginConfig(){return{getters:this.coreGetters,stateObserver:this.state,range:this.range,dispatch:this.dispatchFromCorePlugin,uuidGenerator:this.uuidGenerator,custom:this.config.custom,external:this.config.external}}setupUiPluginConfig(){return{getters:this.getters,stateObserver:this.state,dispatch:this.dispatch,selection:this.selection,moveClient:this.session.move.bind(this.session),custom:this.config.custom,uiActions:this.config,session:this.session,defaultCurrencyFormat:this.config.defaultCurrencyFormat}}checkDispatchAllowed(e){let t=ur(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some(e=>e!==`Success`)?new fr(t.flat()):fr.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}canDispatch=(e,t)=>this.checkDispatchAllowed(jN(e,t));dispatch=(e,t)=>{let n=jN(e,t),r=this.status;if(this.getters.isReadonly()&&!dr(n))return new fr(`Readonly`);if(!this.session.canApplyOptimisticUpdate())return new fr(`WaitingSessionConfirmation`);switch(r){case 0:let t=this.checkDispatchAllowed(n);if(!t.isSuccessful)return t;this.status=1;let{changes:r,commands:i}=this.state.recordChanges(()=>{ur(n)&&this.state.addCommand(n),this.dispatchToHandlers(this.handlers,n),this.finalize()});this.session.save(n,i,r),this.status=0,this.trigger(`update`);break;case 1:if(ur(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(ur(n))throw Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,n)}return fr.Success};dispatchFromCorePlugin=(e,t)=>{let n=jN(e,t),r=this.status;this.status=2;let i=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(i,n),this.status=r,fr.Success};dispatchToHandlers(e,t){let n=ur(t);for(let r of e)!n&&r instanceof IO||r.beforeHandle(t);for(let r of e)!n&&r instanceof IO||r.handle(t)}drawGrid(e){for(let[t,n]of this.renderers)e.ctx.save(),t.drawGrid(e,n),e.ctx.restore()}exportData(){let e=MO();for(let t of this.handlers)t instanceof IO&&t.export(e);return e.revisionId=this.session.getRevisionId()||`START_REVISION`,e=S(e),e}updateMode(e){e!==`normal`&&this.dispatch(`CANCEL_EDITION`),this.config.mode=e,this.trigger(`update`)}exportXLSX(){this.dispatch(`EVALUATE_CELLS`);let e=PO();for(let t of this.handlers)t instanceof FO&&t.exportForExcel(e);return e=S(e),xN(e)}garbageCollectExternalResources(){for(let e of this.corePlugins)e.garbageCollectExternalResources()}};function jN(e,t={}){let n=S(t);return n.type=e,n}let MN={},NN={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:26,HEADER_WIDTH:48,TOPBAR_HEIGHT:63,BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:96,DEFAULT_CELL_HEIGHT:23,SCROLLBAR_WIDTH:15},PN={autofillModifiersRegistry:Ss,autofillRulesRegistry:Cs,cellMenuRegistry:db,colMenuRegistry:rS,linkMenuRegistry:sl,functionRegistry:Ny,featurePluginRegistry:bj,statefulUIPluginRegistry:xj,coreViewsPluginRegistry:Sj,corePluginRegistry:yj,rowMenuRegistry:oS,sidePanelRegistry:bC,figureRegistry:wu,chartSidePanelComponentRegistry:kS,chartComponentRegistry:vu,chartRegistry:_u,topbarMenuRegistry:cS,topbarComponentRegistry:xC,clickableCellRegistry:Cj,otRegistry:lS,inverseCommandRegistry:Au,urlRegistry:qa,cellPopoverRegistry:ul,numberFormatMenuRegistry:iS,repeatLocalCommandTransformRegistry:WA,repeatCommandTransformRegistry:$},FN={arg:K,toBoolean:F,toJsDate:I,toNumber:N,toString:P,toXC:O,toZone:ea,toUnboundedZone:Qi,toCartesian:rn,numberToLetters:D,lettersToNumber:en,UuidGenerator:ko,formatValue:z,createCurrencyFormat:Ei,computeTextWidth:_o,createEmptyWorkbookData:MO,createEmptySheet:jO,createEmptyExcelSheet:NO,getDefaultChartJsRuntime:Dl,chartFontColor:Jo,ChartColors:qo,EvaluationError:b,CellErrorLevel:te,getFillingMode:Ml,rgbaToHex:Kt,colorToRGBA:qt,positionToZone:V,isDefined:T,isMatrix:j,lazy:vt,genericRepeat:GA,createAction:Mo,createActions:Ao,transformRangeData:Po,deepEquals:E,isNumber:Yn,isDateTime:_n},IN={isMarkdownLink:at,parseMarkdownLink:ct,markdownLink:st,openLink:Qa,urlRepresentation:Za},LN={ChartPanel:AS,ChartFigure:bu,ChartJsComponent:Fo,Grid:Lw,GridOverlay:bw,ScorecardChart:xs,LineConfigPanel:TS,LineBarPieDesignPanel:xS,BarConfigPanel:gS,LineBarPieConfigPanel:hS,GaugeChartConfigPanel:CS,GaugeChartDesignPanel:wS,ScorecardChartConfigPanel:DS,ScorecardChartDesignPanel:OS,FigureComponent:SC,Menu:pc,SelectionInput:pS},RN={useDragAndDropListItems:FS};function zN(e,t){return Ny.add(e,t),{addFunction:(e,t)=>zN(e,t)}}let BN={DEFAULT_LOCALE:A};e.AbstractChart=Io,e.CommandResult=mr,e.CorePlugin=IO,e.DispatchResult=fr,e.EvaluationError=b,e.Model=AN,e.Registry=H,e.Revision=cA,e.SPREADSHEET_DIMENSIONS=NN,e.Spreadsheet=Zj,e.UIPlugin=Q,e.__info__=MN,e.addFunction=zN,e.astToFormula=ET,e.compile=NT,e.compileTokens=PT,e.components=LN,e.constants=BN,e.convertAstNodes=ST,e.coreTypes=lr,e.findCellInNewZone=Ta,e.functionCache=MT,e.helpers=FN,e.hooks=RN,e.invalidateCFEvaluationCommands=sr,e.invalidateDependenciesCommands=or,e.invalidateEvaluationCommands=ar,e.iterateAstNodes=CT,e.links=IN,e.load=yO,e.parse=bT,e.parseTokens=xT,e.readonlyAllowedCommands=cr,e.registries=PN,e.setDefaultSheetViewSize=Ke,e.setTranslationMethod=_,e.tokenize=vc,MN.version=`17.0.106`,MN.date=`2026-08-29T09:12:26.343Z`,MN.hash=`c877406`})(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 17.0.105
5
- @date 2026-07-30T06:51:24.565Z
6
- @hash 974b7fa
4
+ @version 17.0.106
5
+ @date 2026-08-29T09:12:26.859Z
6
+ @hash c877406
7
7
  -->
8
8
  <odoo>
9
9
  <t t-name="o-spreadsheet-ActionButton">
@@ -597,7 +597,7 @@
597
597
 
598
598
  <t t-name="o-spreadsheet-SpreadsheetDashboard">
599
599
  <div
600
- class="o-grid o-two-columns"
600
+ class="o-grid o-dashboard-grid o-two-columns"
601
601
  tabindex="-1"
602
602
  t-on-wheel="onMouseWheel"
603
603
  t-on-click="onClosePopover">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odoo/o-spreadsheet",
3
- "version": "17.0.105",
3
+ "version": "17.0.106",
4
4
  "description": "A spreadsheet component",
5
5
  "type": "module",
6
6
  "main": "dist/o-spreadsheet.cjs.js",