@odoo/o-spreadsheet 18.4.47 → 18.4.48

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.4.47
6
- * @date 2026-07-13T06:26:42.333Z
7
- * @hash 3aec012
5
+ * @version 18.4.48
6
+ * @date 2026-07-20T11:00:09.964Z
7
+ * @hash a4662a5
8
8
  */
9
9
  /* Originates from src/components/top_bar/top_bar.scss */
10
10
  @media (max-width: 1200px) {
@@ -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.4.47
6
- * @date 2026-07-13T06:26:40.784Z
7
- * @hash 3aec012
5
+ * @version 18.4.48
6
+ * @date 2026-07-20T11:00:08.319Z
7
+ * @hash a4662a5
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";
@@ -45155,7 +45155,7 @@ var ScorecardChartConfigPanel = class extends Component {
45155
45155
  return !!this.state.keyValueDispatchResult?.isCancelledBecause("InvalidScorecardKeyValue");
45156
45156
  }
45157
45157
  get isBaselineInvalid() {
45158
- return !!this.state.keyValueDispatchResult?.isCancelledBecause("InvalidScorecardBaseline");
45158
+ return !!this.state.baselineDispatchResult?.isCancelledBecause("InvalidScorecardBaseline");
45159
45159
  }
45160
45160
  onKeyValueRangeChanged(ranges) {
45161
45161
  this.keyValue = ranges[0];
@@ -75379,6 +75379,6 @@ const chartHelpers = {
75379
75379
  //#endregion
75380
75380
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, LocalTransportService, 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 };
75381
75381
 
75382
- __info__.version = "18.4.47";
75383
- __info__.date = "2026-07-13T06:26:40.784Z";
75384
- __info__.hash = "3aec012";
75382
+ __info__.version = "18.4.48";
75383
+ __info__.date = "2026-07-20T11:00:08.319Z";
75384
+ __info__.hash = "a4662a5";
@@ -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.4.47
6
- * @date 2026-07-13T06:26:40.784Z
7
- * @hash 3aec012
5
+ * @version 18.4.48
6
+ * @date 2026-07-20T11:00:08.319Z
7
+ * @hash a4662a5
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -45157,7 +45157,7 @@ stores.inject(MyMetaStore, storeInstance);
45157
45157
  return !!this.state.keyValueDispatchResult?.isCancelledBecause("InvalidScorecardKeyValue");
45158
45158
  }
45159
45159
  get isBaselineInvalid() {
45160
- return !!this.state.keyValueDispatchResult?.isCancelledBecause("InvalidScorecardBaseline");
45160
+ return !!this.state.baselineDispatchResult?.isCancelledBecause("InvalidScorecardBaseline");
45161
45161
  }
45162
45162
  onKeyValueRangeChanged(ranges) {
45163
45163
  this.keyValue = ranges[0];
@@ -75430,8 +75430,8 @@ exports.stores = stores;
75430
75430
  exports.tokenColors = tokenColors;
75431
75431
  exports.tokenize = tokenize;
75432
75432
 
75433
- __info__.version = "18.4.47";
75434
- __info__.date = "2026-07-13T06:26:40.784Z";
75435
- __info__.hash = "3aec012";
75433
+ __info__.version = "18.4.48";
75434
+ __info__.date = "2026-07-20T11:00:08.319Z";
75435
+ __info__.hash = "a4662a5";
75436
75436
 
75437
75437
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
@@ -1358,7 +1358,7 @@ stores.inject(MyMetaStore, storeInstance);
1358
1358
  height: 100%;
1359
1359
  }
1360
1360
  }
1361
- `;var Bz=class extends t.Component{static template=`o-spreadsheet-GaugeChartDesignPanel`;static components={SidePanelCollapsible:mO,Section:X,RoundColorPicker:rk,GeneralDesignEditor:kz,ChartErrorSection:_z,StandaloneComposer:YO};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};state;setup(){this.state=(0,t.useState)({sectionRuleCancelledReasons:new Set(this.checkSectionRuleFormulasAreValid(this.props.definition.sectionRule)),sectionRule:b(this.props.definition.sectionRule)})}get designErrorMessages(){return[...this.state.sectionRuleCancelledReasons||[]].filter(e=>e!==`NoChanges`).map(e=>jw.Errors[e]||jw.Errors.Unexpected)}get isRangeMinInvalid(){return!!(this.state.sectionRuleCancelledReasons?.has(`EmptyGaugeRangeMin`)||this.state.sectionRuleCancelledReasons?.has(`GaugeRangeMinNaN`))}get isRangeMaxInvalid(){return!!(this.state.sectionRuleCancelledReasons?.has(`EmptyGaugeRangeMax`)||this.state.sectionRuleCancelledReasons?.has(`GaugeRangeMaxNaN`))}get isLowerInflectionPointInvalid(){return!!this.state.sectionRuleCancelledReasons?.has(`GaugeLowerInflectionPointNaN`)}get isUpperInflectionPointInvalid(){return!!this.state.sectionRuleCancelledReasons?.has(`GaugeUpperInflectionPointNaN`)}updateSectionColor(e,t){let n=b(this.state.sectionRule);n.colors[e]=t,this.updateSectionRule(n)}updateSectionRule(e){this.state.sectionRuleCancelledReasons=new Set(this.checkSectionRuleFormulasAreValid(this.state.sectionRule));let t=this.props.updateChart(this.props.figureId,{sectionRule:e});if(t.isSuccessful)this.state.sectionRule=b(e);else for(let e of t.reasons)this.state.sectionRuleCancelledReasons.add(e)}onConfirmGaugeRange(e,t){this.state.sectionRule={...this.state.sectionRule,[e]:t},this.updateSectionRule(this.state.sectionRule)}getGaugeInflectionComposerProps(e){let t=e===`lowerColor`?`lowerInflectionPoint`:`upperInflectionPoint`,n=this.state.sectionRule[t];return{onConfirm:e=>{this.state.sectionRule={...this.state.sectionRule,[t]:{...n,value:e}},this.updateSectionRule(this.state.sectionRule)},composerContent:n.value,invalid:e===`lowerColor`?this.isLowerInflectionPointInvalid:this.isUpperInflectionPointInvalid,defaultRangeSheetId:this.sheetId,class:t,placeholder:E(`Value`),title:E(`Value or formula`)}}checkSectionRuleFormulasAreValid(e){let t=new Set;return this.valueIsValidNumber(e.rangeMin)||t.add(`GaugeRangeMinNaN`),this.valueIsValidNumber(e.rangeMax)||t.add(`GaugeRangeMaxNaN`),this.valueIsValidNumber(e.lowerInflectionPoint.value)||t.add(`GaugeLowerInflectionPointNaN`),this.valueIsValidNumber(e.upperInflectionPoint.value)||t.add(`GaugeUpperInflectionPointNaN`),t}valueIsValidNumber(e){let t=this.env.model.getters.getLocale();if(!e.startsWith(`=`))return Qi(e,t)!==void 0;let n=this.env.model.getters.evaluateFormula(this.sheetId,e);return Du(n)?!1:Qi(Tu(n),t)!==void 0}get sheetId(){let e=this.env.model.getters.getChart(this.props.figureId);if(!e)throw Error(`Chart not found with id `+this.props.figureId);return e.sheetId}},Vz=class extends t.Component{static template=`o-spreadsheet-GeoChartRegionSelectSection`;static components={Section:X};static props={figureId:String,definition:Object,updateChart:Function};updateSelectedRegion(e){let t=e.target.value;this.props.updateChart(this.props.figureId,{region:t})}get availableRegions(){return this.env.model.getters.getGeoChartAvailableRegions()}get selectedRegion(){return this.props.definition.region||this.availableRegions[0]?.id}},Hz=class extends yz{static template=`o-spreadsheet-GeoChartConfigPanel`;static components={...yz.components,GeoChartRegionSelectSection:Vz};get dataRanges(){return this.getDataSeriesRanges()}get disabledRanges(){return this.props.definition.dataSets.map((e,t)=>t>0)}getLabelRangeOptions(){return[{name:`dataSetsHaveTitle`,label:this.dataSetsHaveTitleLabel,value:this.props.definition.dataSetsHaveTitle,onChange:this.onUpdateDataSetsHaveTitle.bind(this)}]}};let Uz={minColor:`#FFF5EB`,midColor:`#FD8D3C`,maxColor:`#7F2704`};var Wz=class extends Pz{static template=`o-spreadsheet-GeoChartDesignPanel`;static components={...Pz.components,RoundColorPicker:rk};colorScalesChoices=jw.GeoChart.ColorScales;updateColorScaleType(e){let t=e.target.value;t===`custom`?this.updateColorScale(Uz):this.updateColorScale(t)}updateColorScale(e){this.props.updateChart(this.props.figureId,{colorScale:e})}updateMissingValueColor(e){this.props.updateChart(this.props.figureId,{missingValueColor:e})}updateLegendPosition(e){let t=e.target.value;this.props.updateChart(this.props.figureId,{legendPosition:t})}get selectedColorScale(){return typeof this.props.definition.colorScale==`object`?`custom`:this.props.definition.colorScale||`oranges`}get selectedMissingValueColor(){return this.props.definition.missingValueColor||`#ffffff`}get customColorScale(){if(typeof this.props.definition.colorScale==`object`)return this.props.definition.colorScale}getCustomColorScaleColor(e){return this.customColorScale?.[e]??``}setCustomColorScaleColor(e,t){!t&&e!==`midColor`&&(t=`#fff`);let n=this.customColorScale;n&&this.updateColorScale({...n,[e]:t})}},Gz=class extends yz{static template=`o-spreadsheet-HierarchicalChartConfigPanel`;static components={...yz.components};getLabelRangeOptions(){return[{name:`dataSetsHaveTitle`,label:this.dataSetsHaveTitleLabel,value:this.props.definition.dataSetsHaveTitle,onChange:this.onUpdateDataSetsHaveTitle.bind(this)}]}},Kz=class extends yz{static template=`o-spreadsheet-LineConfigPanel`;get canTreatLabelsAsText(){let e=this.env.model.getters.getChart(this.props.figureId);return e&&e instanceof XE?sT(e.getDefinition(),e.dataSets,e.labelRange,this.env.model.getters):!1}get stackedLabel(){return this.props.definition.fillArea?this.chartTerms.StackedAreaChart:this.chartTerms.StackedLineChart}getLabelRangeOptions(){let e=super.getLabelRangeOptions();return this.canTreatLabelsAsText&&e.push({name:`labelsAsText`,value:this.props.definition.labelsAsText,label:this.chartTerms.TreatLabelsAsText,onChange:this.onUpdateLabelsAsText.bind(this)}),e}onUpdateLabelsAsText(e){this.props.updateChart(this.props.figureId,{labelsAsText:e})}onUpdateStacked(e){this.props.updateChart(this.props.figureId,{stacked:e})}onUpdateCumulative(e){this.props.updateChart(this.props.figureId,{cumulative:e})}},qz=class extends Pz{static template=`o-spreadsheet-LineChartDesignPanel`;static components={...Pz.components,ChartShowDataMarkers:Fz}},Jz=class extends t.Component{static template=`o-spreadsheet.PieHoleSize`;static components={Section:X};static props={onValueChange:Function,value:Number};debouncedOnChange=Et(this.onChange.bind(this),100);onChange(e){isNaN(Number(e))||this.props.onValueChange(x(Number(e),0,95))}},Yz=class extends t.Component{static template=`o-spreadsheet-PieChartDesignPanel`;static components={GeneralDesignEditor:kz,Section:X,ChartLegend:Az,ChartShowValues:Nz,PieHoleSize:Jz};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};onPieHoleSizeChange(e){this.props.updateChart(this.props.figureId,{...this.props.definition,pieHolePercentage:e})}},Xz=class extends t.Component{static template=`o-spreadsheet-RadarChartDesignPanel`;static components={GeneralDesignEditor:kz,SeriesDesignEditor:jz,Section:X,ChartLegend:Az,ChartShowValues:Nz,ChartShowDataMarkers:Fz};static props={figureId:String,definition:Object,canUpdateChart:Function,updateChart:Function}},Zz=class extends yz{static template=`o-spreadsheet-ScatterConfigPanel`;get canTreatLabelsAsText(){let e=this.env.model.getters.getChart(this.props.figureId);return e&&e instanceof iD?sT(e.getDefinition(),e.dataSets,e.labelRange,this.env.model.getters):!1}onUpdateLabelsAsText(e){this.props.updateChart(this.props.figureId,{labelsAsText:e})}getLabelRangeOptions(){let e=super.getLabelRangeOptions();return this.canTreatLabelsAsText&&e.push({name:`labelsAsText`,value:this.props.definition.labelsAsText,label:this.chartTerms.TreatLabelsAsText,onChange:this.onUpdateLabelsAsText.bind(this)}),e}},Qz=class extends t.Component{static template=`o-spreadsheet-ScorecardChartConfigPanel`;static components={SelectionInput:fk,ChartErrorSection:_z,Section:X};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:Function};state=(0,t.useState)({keyValueDispatchResult:void 0,baselineDispatchResult:void 0});keyValue=this.props.definition.keyValue;baseline=this.props.definition.baseline;get errorMessages(){return[...this.state.keyValueDispatchResult?.reasons||[],...this.state.baselineDispatchResult?.reasons||[]].filter(e=>e!==`NoChanges`).map(e=>jw.Errors[e]||jw.Errors.Unexpected)}get isKeyValueInvalid(){return!!this.state.keyValueDispatchResult?.isCancelledBecause(`InvalidScorecardKeyValue`)}get isBaselineInvalid(){return!!this.state.keyValueDispatchResult?.isCancelledBecause(`InvalidScorecardBaseline`)}onKeyValueRangeChanged(e){this.keyValue=e[0],this.state.keyValueDispatchResult=this.props.canUpdateChart(this.props.figureId,{keyValue:this.keyValue})}updateKeyValueRange(){this.state.keyValueDispatchResult=this.props.updateChart(this.props.figureId,{keyValue:this.keyValue})}getKeyValueRange(){return this.keyValue||``}onBaselineRangeChanged(e){this.baseline=e[0],this.state.baselineDispatchResult=this.props.canUpdateChart(this.props.figureId,{baseline:this.baseline})}updateBaselineRange(){this.state.baselineDispatchResult=this.props.updateChart(this.props.figureId,{baseline:this.baseline})}getBaselineRange(){return this.baseline||``}updateBaselineMode(e){this.props.updateChart(this.props.figureId,{baselineMode:e.target.value})}},$z=class extends t.Component{static template=`o-spreadsheet-ScorecardChartDesignPanel`;static components={GeneralDesignEditor:kz,RoundColorPicker:rk,SidePanelCollapsible:mO,Section:X,Checkbox:vk,ChartTitle:Ez};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};get colorsSectionTitle(){return this.props.definition.baselineMode===`progress`?E(`Progress bar colors`):E(`Baseline colors`)}get humanizeNumbersLabel(){return E(`Humanize numbers`)}get defaultScorecardTitleFontSize(){return 14}updateHumanizeNumbers(e){this.props.updateChart(this.props.figureId,{humanize:e})}translate(e){return E(e)}setColor(e,t){switch(t){case`backgroundColor`:this.props.updateChart(this.props.figureId,{background:e});break;case`baselineColorDown`:this.props.updateChart(this.props.figureId,{baselineColorDown:e});break;case`baselineColorUp`:this.props.updateChart(this.props.figureId,{baselineColorUp:e});break}}get keyStyle(){return{align:`center`,fontSize:32,...this.props.definition.keyDescr}}get baselineStyle(){return{align:`center`,fontSize:16,...this.props.definition.baselineDescr}}setKeyText(e){this.props.updateChart(this.props.figureId,{keyDescr:{...this.props.definition.keyDescr,text:e}})}updateKeyStyle(e){let t={...this.keyStyle,...e};this.props.updateChart(this.props.figureId,{keyDescr:t})}setBaselineText(e){this.props.updateChart(this.props.figureId,{baselineDescr:{...this.props.definition.baselineDescr,text:e}})}updateBaselineStyle(e){let t={...this.baselineStyle,...e};this.props.updateChart(this.props.figureId,{baselineDescr:t})}},eB=class extends t.Component{static template=`o-spreadsheet-SunburstChartDesignPanel`;static components={GeneralDesignEditor:kz,Section:X,SidePanelCollapsible:mO,ChartShowValues:Nz,Checkbox:vk,TextStyler:Tz,RoundColorPicker:rk,ChartLegend:Az,PieHoleSize:Jz};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};defaults=eE;get showValues(){return this.props.definition.showValues??eE.showValues}get showLabels(){return this.props.definition.showLabels??eE.showLabels}get groupColors(){let e=this.props.figureId;return this.env.model.getters.getChartRuntime(e).chartJsConfig.data.datasets[0]?.groupColors||[]}onGroupColorChanged(e,t){let n=b(this.props.definition.groupColors)??[];n[e]=t,this.props.updateChart(this.props.figureId,{groupColors:n})}onPieHoleSizeChange(e){this.props.updateChart(this.props.figureId,{...this.props.definition,pieHolePercentage:e})}},tB=class extends t.Component{static template=`o-spreadsheet-TreeMapCategoryColors`;static components={Checkbox:vk,RoundColorPicker:rk};static props={figureId:String,definition:Object,onColorChanged:Function};get coloringOptions(){let e=this.props.definition.coloringOptions??US.coloringOptions;if(e.type!==`categoryColor`)throw Error(`Coloring options is not solid color`);return e}getTreeGroupAndColors(){return this.env.model.getters.getChartRuntime(this.props.figureId).chartJsConfig.data.datasets[0]?.groupColors||[]}onGroupColorChanged(e,t){let n=b(this.coloringOptions);n.colors[e]=t||void 0,this.props.onColorChanged(n)}useValueBasedGradient(e){if(this.coloringOptions.type!==`categoryColor`)throw Error(`Coloring options is not solid color`);this.props.onColorChanged({...this.coloringOptions,useValueBasedGradient:e})}},nB=class extends t.Component{static template=`o-spreadsheet-TreeMapColorScale`;static components={RoundColorPicker:rk};static props={figureId:String,definition:Object,onColorChanged:Function};get coloringOptions(){let e=this.props.definition.coloringOptions??US.coloringOptions;if(e.type!==`colorScale`)throw Error(`Coloring options is not a color scale`);return e}setColorScaleColor(e,t){this.props.onColorChanged({...this.coloringOptions,[e]:t})}};let rB={type:`colorScale`,minColor:`#FFF5EB`,midColor:`#FD8D3C`,maxColor:`#7F2704`},iB={type:`categoryColor`,colors:[],useValueBasedGradient:!0};var aB=class extends t.Component{static template=`o-spreadsheet-TreeMapChartDesignPanel`;static components={GeneralDesignEditor:kz,Section:X,SidePanelCollapsible:mO,ChartShowValues:Nz,Checkbox:vk,TextStyler:Tz,RoundColorPicker:rk,BadgeSelection:xz,TreeMapCategoryColors:tB,TreeMapColorScale:nB};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};savedColors={categoryColors:iB,colorScale:rB};defaults=US;get showHeaders(){return this.props.definition.showHeaders??US.showHeaders}get showValues(){return this.props.definition.showValues??US.showValues}get showLabels(){return this.props.definition.showLabels??US.showLabels}get coloringOptions(){return this.props.definition.coloringOptions??US.coloringOptions}changeColoringOption(e){let t=e===`categoryColor`?this.savedColors.categoryColors:this.savedColors.colorScale;this.props.updateChart(this.props.figureId,{coloringOptions:t})}onCategoryColorChange(e){this.savedColors.categoryColors=e,this.props.updateChart(this.props.figureId,{coloringOptions:e})}onColorScaleChange(e){this.savedColors.colorScale=e,this.props.updateChart(this.props.figureId,{coloringOptions:e})}get coloringOptionChoices(){return[{label:E(`Category color`),value:`categoryColor`},{label:E(`Color scale`),value:`colorScale`}]}},oB=class extends t.Component{static template=`o-spreadsheet-WaterfallChartDesignPanel`;static components={GeneralDesignEditor:kz,ChartShowValues:Nz,Checkbox:vk,SidePanelCollapsible:mO,Section:X,RoundColorPicker:rk,AxisDesignEditor:Dz,RadioSelection:Oz,ChartLegend:Az};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};axisChoices=PS;onUpdateShowSubTotals(e){this.props.updateChart(this.props.figureId,{showSubTotals:e})}onUpdateShowConnectorLines(e){this.props.updateChart(this.props.figureId,{showConnectorLines:e})}onUpdateFirstValueAsSubtotal(e){this.props.updateChart(this.props.figureId,{firstValueAsSubtotal:e})}updateColor(e,t){this.props.updateChart(this.props.figureId,{[e]:t})}get axesList(){return[{id:`x`,name:E(`Horizontal axis`)},{id:`y`,name:E(`Vertical axis`)}]}get positiveValuesColor(){return this.props.definition.positiveValuesColor||`#4EA7F2`}get negativeValuesColor(){return this.props.definition.negativeValuesColor||`#EA6175`}get subTotalValuesColor(){return this.props.definition.subTotalValuesColor||`#AAAAAA`}updateVerticalAxisPosition(e){this.props.updateChart(this.props.figureId,{verticalAxisPosition:e})}};let sB=new g;sB.add(`line`,{configuration:Kz,design:qz}).add(`scatter`,{configuration:Zz,design:Pz}).add(`bar`,{configuration:bz,design:Pz}).add(`combo`,{configuration:yz,design:Iz}).add(`pie`,{configuration:yz,design:Yz}).add(`gauge`,{configuration:zz,design:Bz}).add(`scorecard`,{configuration:Qz,design:$z}).add(`waterfall`,{configuration:yz,design:oB}).add(`pyramid`,{configuration:yz,design:Pz}).add(`radar`,{configuration:yz,design:Xz}).add(`sunburst`,{configuration:Gz,design:eB}).add(`geo`,{configuration:Hz,design:Wz}).add(`funnel`,{configuration:Lz,design:Rz}).add(`treemap`,{configuration:Gz,design:aB}),V`
1361
+ `;var Bz=class extends t.Component{static template=`o-spreadsheet-GaugeChartDesignPanel`;static components={SidePanelCollapsible:mO,Section:X,RoundColorPicker:rk,GeneralDesignEditor:kz,ChartErrorSection:_z,StandaloneComposer:YO};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};state;setup(){this.state=(0,t.useState)({sectionRuleCancelledReasons:new Set(this.checkSectionRuleFormulasAreValid(this.props.definition.sectionRule)),sectionRule:b(this.props.definition.sectionRule)})}get designErrorMessages(){return[...this.state.sectionRuleCancelledReasons||[]].filter(e=>e!==`NoChanges`).map(e=>jw.Errors[e]||jw.Errors.Unexpected)}get isRangeMinInvalid(){return!!(this.state.sectionRuleCancelledReasons?.has(`EmptyGaugeRangeMin`)||this.state.sectionRuleCancelledReasons?.has(`GaugeRangeMinNaN`))}get isRangeMaxInvalid(){return!!(this.state.sectionRuleCancelledReasons?.has(`EmptyGaugeRangeMax`)||this.state.sectionRuleCancelledReasons?.has(`GaugeRangeMaxNaN`))}get isLowerInflectionPointInvalid(){return!!this.state.sectionRuleCancelledReasons?.has(`GaugeLowerInflectionPointNaN`)}get isUpperInflectionPointInvalid(){return!!this.state.sectionRuleCancelledReasons?.has(`GaugeUpperInflectionPointNaN`)}updateSectionColor(e,t){let n=b(this.state.sectionRule);n.colors[e]=t,this.updateSectionRule(n)}updateSectionRule(e){this.state.sectionRuleCancelledReasons=new Set(this.checkSectionRuleFormulasAreValid(this.state.sectionRule));let t=this.props.updateChart(this.props.figureId,{sectionRule:e});if(t.isSuccessful)this.state.sectionRule=b(e);else for(let e of t.reasons)this.state.sectionRuleCancelledReasons.add(e)}onConfirmGaugeRange(e,t){this.state.sectionRule={...this.state.sectionRule,[e]:t},this.updateSectionRule(this.state.sectionRule)}getGaugeInflectionComposerProps(e){let t=e===`lowerColor`?`lowerInflectionPoint`:`upperInflectionPoint`,n=this.state.sectionRule[t];return{onConfirm:e=>{this.state.sectionRule={...this.state.sectionRule,[t]:{...n,value:e}},this.updateSectionRule(this.state.sectionRule)},composerContent:n.value,invalid:e===`lowerColor`?this.isLowerInflectionPointInvalid:this.isUpperInflectionPointInvalid,defaultRangeSheetId:this.sheetId,class:t,placeholder:E(`Value`),title:E(`Value or formula`)}}checkSectionRuleFormulasAreValid(e){let t=new Set;return this.valueIsValidNumber(e.rangeMin)||t.add(`GaugeRangeMinNaN`),this.valueIsValidNumber(e.rangeMax)||t.add(`GaugeRangeMaxNaN`),this.valueIsValidNumber(e.lowerInflectionPoint.value)||t.add(`GaugeLowerInflectionPointNaN`),this.valueIsValidNumber(e.upperInflectionPoint.value)||t.add(`GaugeUpperInflectionPointNaN`),t}valueIsValidNumber(e){let t=this.env.model.getters.getLocale();if(!e.startsWith(`=`))return Qi(e,t)!==void 0;let n=this.env.model.getters.evaluateFormula(this.sheetId,e);return Du(n)?!1:Qi(Tu(n),t)!==void 0}get sheetId(){let e=this.env.model.getters.getChart(this.props.figureId);if(!e)throw Error(`Chart not found with id `+this.props.figureId);return e.sheetId}},Vz=class extends t.Component{static template=`o-spreadsheet-GeoChartRegionSelectSection`;static components={Section:X};static props={figureId:String,definition:Object,updateChart:Function};updateSelectedRegion(e){let t=e.target.value;this.props.updateChart(this.props.figureId,{region:t})}get availableRegions(){return this.env.model.getters.getGeoChartAvailableRegions()}get selectedRegion(){return this.props.definition.region||this.availableRegions[0]?.id}},Hz=class extends yz{static template=`o-spreadsheet-GeoChartConfigPanel`;static components={...yz.components,GeoChartRegionSelectSection:Vz};get dataRanges(){return this.getDataSeriesRanges()}get disabledRanges(){return this.props.definition.dataSets.map((e,t)=>t>0)}getLabelRangeOptions(){return[{name:`dataSetsHaveTitle`,label:this.dataSetsHaveTitleLabel,value:this.props.definition.dataSetsHaveTitle,onChange:this.onUpdateDataSetsHaveTitle.bind(this)}]}};let Uz={minColor:`#FFF5EB`,midColor:`#FD8D3C`,maxColor:`#7F2704`};var Wz=class extends Pz{static template=`o-spreadsheet-GeoChartDesignPanel`;static components={...Pz.components,RoundColorPicker:rk};colorScalesChoices=jw.GeoChart.ColorScales;updateColorScaleType(e){let t=e.target.value;t===`custom`?this.updateColorScale(Uz):this.updateColorScale(t)}updateColorScale(e){this.props.updateChart(this.props.figureId,{colorScale:e})}updateMissingValueColor(e){this.props.updateChart(this.props.figureId,{missingValueColor:e})}updateLegendPosition(e){let t=e.target.value;this.props.updateChart(this.props.figureId,{legendPosition:t})}get selectedColorScale(){return typeof this.props.definition.colorScale==`object`?`custom`:this.props.definition.colorScale||`oranges`}get selectedMissingValueColor(){return this.props.definition.missingValueColor||`#ffffff`}get customColorScale(){if(typeof this.props.definition.colorScale==`object`)return this.props.definition.colorScale}getCustomColorScaleColor(e){return this.customColorScale?.[e]??``}setCustomColorScaleColor(e,t){!t&&e!==`midColor`&&(t=`#fff`);let n=this.customColorScale;n&&this.updateColorScale({...n,[e]:t})}},Gz=class extends yz{static template=`o-spreadsheet-HierarchicalChartConfigPanel`;static components={...yz.components};getLabelRangeOptions(){return[{name:`dataSetsHaveTitle`,label:this.dataSetsHaveTitleLabel,value:this.props.definition.dataSetsHaveTitle,onChange:this.onUpdateDataSetsHaveTitle.bind(this)}]}},Kz=class extends yz{static template=`o-spreadsheet-LineConfigPanel`;get canTreatLabelsAsText(){let e=this.env.model.getters.getChart(this.props.figureId);return e&&e instanceof XE?sT(e.getDefinition(),e.dataSets,e.labelRange,this.env.model.getters):!1}get stackedLabel(){return this.props.definition.fillArea?this.chartTerms.StackedAreaChart:this.chartTerms.StackedLineChart}getLabelRangeOptions(){let e=super.getLabelRangeOptions();return this.canTreatLabelsAsText&&e.push({name:`labelsAsText`,value:this.props.definition.labelsAsText,label:this.chartTerms.TreatLabelsAsText,onChange:this.onUpdateLabelsAsText.bind(this)}),e}onUpdateLabelsAsText(e){this.props.updateChart(this.props.figureId,{labelsAsText:e})}onUpdateStacked(e){this.props.updateChart(this.props.figureId,{stacked:e})}onUpdateCumulative(e){this.props.updateChart(this.props.figureId,{cumulative:e})}},qz=class extends Pz{static template=`o-spreadsheet-LineChartDesignPanel`;static components={...Pz.components,ChartShowDataMarkers:Fz}},Jz=class extends t.Component{static template=`o-spreadsheet.PieHoleSize`;static components={Section:X};static props={onValueChange:Function,value:Number};debouncedOnChange=Et(this.onChange.bind(this),100);onChange(e){isNaN(Number(e))||this.props.onValueChange(x(Number(e),0,95))}},Yz=class extends t.Component{static template=`o-spreadsheet-PieChartDesignPanel`;static components={GeneralDesignEditor:kz,Section:X,ChartLegend:Az,ChartShowValues:Nz,PieHoleSize:Jz};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};onPieHoleSizeChange(e){this.props.updateChart(this.props.figureId,{...this.props.definition,pieHolePercentage:e})}},Xz=class extends t.Component{static template=`o-spreadsheet-RadarChartDesignPanel`;static components={GeneralDesignEditor:kz,SeriesDesignEditor:jz,Section:X,ChartLegend:Az,ChartShowValues:Nz,ChartShowDataMarkers:Fz};static props={figureId:String,definition:Object,canUpdateChart:Function,updateChart:Function}},Zz=class extends yz{static template=`o-spreadsheet-ScatterConfigPanel`;get canTreatLabelsAsText(){let e=this.env.model.getters.getChart(this.props.figureId);return e&&e instanceof iD?sT(e.getDefinition(),e.dataSets,e.labelRange,this.env.model.getters):!1}onUpdateLabelsAsText(e){this.props.updateChart(this.props.figureId,{labelsAsText:e})}getLabelRangeOptions(){let e=super.getLabelRangeOptions();return this.canTreatLabelsAsText&&e.push({name:`labelsAsText`,value:this.props.definition.labelsAsText,label:this.chartTerms.TreatLabelsAsText,onChange:this.onUpdateLabelsAsText.bind(this)}),e}},Qz=class extends t.Component{static template=`o-spreadsheet-ScorecardChartConfigPanel`;static components={SelectionInput:fk,ChartErrorSection:_z,Section:X};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:Function};state=(0,t.useState)({keyValueDispatchResult:void 0,baselineDispatchResult:void 0});keyValue=this.props.definition.keyValue;baseline=this.props.definition.baseline;get errorMessages(){return[...this.state.keyValueDispatchResult?.reasons||[],...this.state.baselineDispatchResult?.reasons||[]].filter(e=>e!==`NoChanges`).map(e=>jw.Errors[e]||jw.Errors.Unexpected)}get isKeyValueInvalid(){return!!this.state.keyValueDispatchResult?.isCancelledBecause(`InvalidScorecardKeyValue`)}get isBaselineInvalid(){return!!this.state.baselineDispatchResult?.isCancelledBecause(`InvalidScorecardBaseline`)}onKeyValueRangeChanged(e){this.keyValue=e[0],this.state.keyValueDispatchResult=this.props.canUpdateChart(this.props.figureId,{keyValue:this.keyValue})}updateKeyValueRange(){this.state.keyValueDispatchResult=this.props.updateChart(this.props.figureId,{keyValue:this.keyValue})}getKeyValueRange(){return this.keyValue||``}onBaselineRangeChanged(e){this.baseline=e[0],this.state.baselineDispatchResult=this.props.canUpdateChart(this.props.figureId,{baseline:this.baseline})}updateBaselineRange(){this.state.baselineDispatchResult=this.props.updateChart(this.props.figureId,{baseline:this.baseline})}getBaselineRange(){return this.baseline||``}updateBaselineMode(e){this.props.updateChart(this.props.figureId,{baselineMode:e.target.value})}},$z=class extends t.Component{static template=`o-spreadsheet-ScorecardChartDesignPanel`;static components={GeneralDesignEditor:kz,RoundColorPicker:rk,SidePanelCollapsible:mO,Section:X,Checkbox:vk,ChartTitle:Ez};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};get colorsSectionTitle(){return this.props.definition.baselineMode===`progress`?E(`Progress bar colors`):E(`Baseline colors`)}get humanizeNumbersLabel(){return E(`Humanize numbers`)}get defaultScorecardTitleFontSize(){return 14}updateHumanizeNumbers(e){this.props.updateChart(this.props.figureId,{humanize:e})}translate(e){return E(e)}setColor(e,t){switch(t){case`backgroundColor`:this.props.updateChart(this.props.figureId,{background:e});break;case`baselineColorDown`:this.props.updateChart(this.props.figureId,{baselineColorDown:e});break;case`baselineColorUp`:this.props.updateChart(this.props.figureId,{baselineColorUp:e});break}}get keyStyle(){return{align:`center`,fontSize:32,...this.props.definition.keyDescr}}get baselineStyle(){return{align:`center`,fontSize:16,...this.props.definition.baselineDescr}}setKeyText(e){this.props.updateChart(this.props.figureId,{keyDescr:{...this.props.definition.keyDescr,text:e}})}updateKeyStyle(e){let t={...this.keyStyle,...e};this.props.updateChart(this.props.figureId,{keyDescr:t})}setBaselineText(e){this.props.updateChart(this.props.figureId,{baselineDescr:{...this.props.definition.baselineDescr,text:e}})}updateBaselineStyle(e){let t={...this.baselineStyle,...e};this.props.updateChart(this.props.figureId,{baselineDescr:t})}},eB=class extends t.Component{static template=`o-spreadsheet-SunburstChartDesignPanel`;static components={GeneralDesignEditor:kz,Section:X,SidePanelCollapsible:mO,ChartShowValues:Nz,Checkbox:vk,TextStyler:Tz,RoundColorPicker:rk,ChartLegend:Az,PieHoleSize:Jz};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};defaults=eE;get showValues(){return this.props.definition.showValues??eE.showValues}get showLabels(){return this.props.definition.showLabels??eE.showLabels}get groupColors(){let e=this.props.figureId;return this.env.model.getters.getChartRuntime(e).chartJsConfig.data.datasets[0]?.groupColors||[]}onGroupColorChanged(e,t){let n=b(this.props.definition.groupColors)??[];n[e]=t,this.props.updateChart(this.props.figureId,{groupColors:n})}onPieHoleSizeChange(e){this.props.updateChart(this.props.figureId,{...this.props.definition,pieHolePercentage:e})}},tB=class extends t.Component{static template=`o-spreadsheet-TreeMapCategoryColors`;static components={Checkbox:vk,RoundColorPicker:rk};static props={figureId:String,definition:Object,onColorChanged:Function};get coloringOptions(){let e=this.props.definition.coloringOptions??US.coloringOptions;if(e.type!==`categoryColor`)throw Error(`Coloring options is not solid color`);return e}getTreeGroupAndColors(){return this.env.model.getters.getChartRuntime(this.props.figureId).chartJsConfig.data.datasets[0]?.groupColors||[]}onGroupColorChanged(e,t){let n=b(this.coloringOptions);n.colors[e]=t||void 0,this.props.onColorChanged(n)}useValueBasedGradient(e){if(this.coloringOptions.type!==`categoryColor`)throw Error(`Coloring options is not solid color`);this.props.onColorChanged({...this.coloringOptions,useValueBasedGradient:e})}},nB=class extends t.Component{static template=`o-spreadsheet-TreeMapColorScale`;static components={RoundColorPicker:rk};static props={figureId:String,definition:Object,onColorChanged:Function};get coloringOptions(){let e=this.props.definition.coloringOptions??US.coloringOptions;if(e.type!==`colorScale`)throw Error(`Coloring options is not a color scale`);return e}setColorScaleColor(e,t){this.props.onColorChanged({...this.coloringOptions,[e]:t})}};let rB={type:`colorScale`,minColor:`#FFF5EB`,midColor:`#FD8D3C`,maxColor:`#7F2704`},iB={type:`categoryColor`,colors:[],useValueBasedGradient:!0};var aB=class extends t.Component{static template=`o-spreadsheet-TreeMapChartDesignPanel`;static components={GeneralDesignEditor:kz,Section:X,SidePanelCollapsible:mO,ChartShowValues:Nz,Checkbox:vk,TextStyler:Tz,RoundColorPicker:rk,BadgeSelection:xz,TreeMapCategoryColors:tB,TreeMapColorScale:nB};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};savedColors={categoryColors:iB,colorScale:rB};defaults=US;get showHeaders(){return this.props.definition.showHeaders??US.showHeaders}get showValues(){return this.props.definition.showValues??US.showValues}get showLabels(){return this.props.definition.showLabels??US.showLabels}get coloringOptions(){return this.props.definition.coloringOptions??US.coloringOptions}changeColoringOption(e){let t=e===`categoryColor`?this.savedColors.categoryColors:this.savedColors.colorScale;this.props.updateChart(this.props.figureId,{coloringOptions:t})}onCategoryColorChange(e){this.savedColors.categoryColors=e,this.props.updateChart(this.props.figureId,{coloringOptions:e})}onColorScaleChange(e){this.savedColors.colorScale=e,this.props.updateChart(this.props.figureId,{coloringOptions:e})}get coloringOptionChoices(){return[{label:E(`Category color`),value:`categoryColor`},{label:E(`Color scale`),value:`colorScale`}]}},oB=class extends t.Component{static template=`o-spreadsheet-WaterfallChartDesignPanel`;static components={GeneralDesignEditor:kz,ChartShowValues:Nz,Checkbox:vk,SidePanelCollapsible:mO,Section:X,RoundColorPicker:rk,AxisDesignEditor:Dz,RadioSelection:Oz,ChartLegend:Az};static props={figureId:String,definition:Object,updateChart:Function,canUpdateChart:{type:Function,optional:!0}};axisChoices=PS;onUpdateShowSubTotals(e){this.props.updateChart(this.props.figureId,{showSubTotals:e})}onUpdateShowConnectorLines(e){this.props.updateChart(this.props.figureId,{showConnectorLines:e})}onUpdateFirstValueAsSubtotal(e){this.props.updateChart(this.props.figureId,{firstValueAsSubtotal:e})}updateColor(e,t){this.props.updateChart(this.props.figureId,{[e]:t})}get axesList(){return[{id:`x`,name:E(`Horizontal axis`)},{id:`y`,name:E(`Vertical axis`)}]}get positiveValuesColor(){return this.props.definition.positiveValuesColor||`#4EA7F2`}get negativeValuesColor(){return this.props.definition.negativeValuesColor||`#EA6175`}get subTotalValuesColor(){return this.props.definition.subTotalValuesColor||`#AAAAAA`}updateVerticalAxisPosition(e){this.props.updateChart(this.props.figureId,{verticalAxisPosition:e})}};let sB=new g;sB.add(`line`,{configuration:Kz,design:qz}).add(`scatter`,{configuration:Zz,design:Pz}).add(`bar`,{configuration:bz,design:Pz}).add(`combo`,{configuration:yz,design:Iz}).add(`pie`,{configuration:yz,design:Yz}).add(`gauge`,{configuration:zz,design:Bz}).add(`scorecard`,{configuration:Qz,design:$z}).add(`waterfall`,{configuration:yz,design:oB}).add(`pyramid`,{configuration:yz,design:Pz}).add(`radar`,{configuration:yz,design:Xz}).add(`sunburst`,{configuration:Gz,design:eB}).add(`geo`,{configuration:Hz,design:Wz}).add(`funnel`,{configuration:Lz,design:Rz}).add(`treemap`,{configuration:Gz,design:aB}),V`
1362
1362
  .o-section .o-input.o-type-selector {
1363
1363
  height: 30px;
1364
1364
  padding-left: 35px;
@@ -3409,4 +3409,4 @@ You can download it directly instead.`,5),sticky:!1,type:`warning`});return}r=aw
3409
3409
  <Relationships xmlns="${bf.Relationships}">
3410
3410
  <Relationship ${K(e)} />
3411
3411
  </Relationships>
3412
- `),`_rels/.rels`)}function yJ(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(`'?${ot(e)}'?!`,`g`);i=i.replaceAll(n,n=>{let r=t[e];return n.replace(e,r)})}return JSON.parse(i)}function bJ(e){for(let t of e.sheets)t.tables=t.tables.filter(e=>js(ps(e.range)).numberOfRows>1);return e}var xJ=class extends Rd{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 gl,a=!1){let o=performance.now();console.debug(`##### Model creation #####`),super(),ir(),r=_N(e,r);let s=lN(e,a);this.state=new LK,this.uuidGenerator=i,this.config=this.setupConfig(n),this.session=this.setupSession(s.revisionId),this.coreGetters={},this.range=new vH(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 FK(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 oG.getAll())this.setupCorePlugin(e,s);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(r);for(let e of lG.getAll()){let t=this.setupCoreViewPlugin(e);this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(let e of cG.getAll()){let t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(let e of sG.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 oW(jK({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:E(`Anonymous`).toString()},n=e.transportService||new RG;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(Er));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=yr(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some(e=>e!==`Success`)?new xr(t.flat()):xr.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(SJ(e,t));dispatch=(e,t)=>{let n=SJ(e,t),r=this.status;if(this.getters.isReadonly()&&!br(n))return new xr(`Readonly`);if(!this.session.canApplyOptimisticUpdate())return new xr(`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();yr(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(yr(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(yr(n))throw Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,n)}return xr.Success};dispatchFromCorePlugin=(e,t)=>{let n=SJ(e,t),r=this.status;this.status=2;let i=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(i,n),this.status=r,xr.Success};dispatchToHandlers(e,t){let n=yr(t);for(let r of e)!n&&r instanceof nH||r.beforeHandle(t);for(let r of e)!n&&r instanceof nH||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=wN();for(let t of this.handlers)t instanceof nH&&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=EN();for(let t of this.handlers)t instanceof tH&&t.exportForExcel(e);return e=b(e),uJ(e)}garbageCollectExternalResources(){for(let e of this.corePlugins)e.garbageCollectExternalResources()}};function SJ(e,t={}){let n=b(t);return n.type=e,n}let CJ={},wJ={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:26,HEADER_WIDTH:48,DESKTOP_BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:96,DEFAULT_CELL_HEIGHT:23,SCROLLBAR_WIDTH:15},TJ={autoCompleteProviders:PO,autofillModifiersRegistry:dU,autofillRulesRegistry:fU,cellMenuRegistry:KI,colMenuRegistry:uR,errorTypes:Ri,linkMenuRegistry:Fk,functionRegistry:Ix,featurePluginRegistry:sG,iconsOnCellRegistry:tU,statefulUIPluginRegistry:cG,coreViewsPluginRegistry:lG,corePluginRegistry:oG,rowMenuRegistry:_R,sidePanelRegistry:GV,figureRegistry:sO,chartSidePanelComponentRegistry:sB,chartComponentRegistry:pD,chartRegistry:fD,chartSubtypeRegistry:hD,topbarMenuRegistry:IG,topbarComponentRegistry:LG,clickableCellRegistry:mG,otRegistry:EU,inverseCommandRegistry:hG,urlRegistry:Ir,cellPopoverRegistry:uO,numberFormatMenuRegistry:jG,repeatLocalCommandTransformRegistry:VW,repeatCommandTransformRegistry:BW,clipboardHandlersRegistries:Fd,pivotRegistry:bV,pivotTimeAdapterRegistry:Uu,pivotSidePanelRegistry:EV,pivotNormalizationValueRegistry:bd,supportedPivotPositionalFormulaRegistry:QV,pivotToFunctionValueRegistry:xd,migrationStepRegistry:iN,chartJsExtensionRegistry:lf},EJ={arg:U,isEvaluationError:j,toBoolean:P,toJsDate:F,toNumber:M,toString:N,toNormalizedPivotValue:gd,toFunctionPivotValue:vd,toXC:T,toZone:ps,toUnboundedZone:fs,toCartesian:Zn,numberToLetters:Hn,lettersToNumber:Un,UuidGenerator:gl,formatValue:L,createCurrencyFormat:ko,ColorGenerator:In,computeTextWidth:$c,createEmptyWorkbookData:wN,createEmptySheet:CN,createEmptyExcelSheet:TN,rgbaToHex:mn,colorToRGBA:hn,positionToZone:z,isDefined:C,isMatrix:Or,lazy:kt,genericRepeat:HW,createAction:m,createActions:f,transformRangeData:Ld,deepEquals:w,overlap:Ds,union:Cs,isInside:ks,deepCopy:b,expandZoneOnInsertion:ys,reduceZoneOnDeletion:Ss,unquote:lt,getMaxObjectId:cd,getFunctionsFromTokens:sS,getFirstPivotFunction:QB,getNumberOfPivotFunctions:eV,parseDimension:dd,isDateOrDatetimeField:fd,makeFieldProposal:qB,insertTokenAfterArgSeparator:YB,insertTokenAfterLeftParenthesis:XB,mergeContiguousZones:Qs,getPivotHighlights:AB,pivotTimeAdapter:Wu,UNDO_REDO_PIVOT_COMMANDS:cU,createPivotFormula:hd,areDomainArgsFieldsValid:md,splitReference:vc,sanitizeSheetName:dt,getUniqueText:$t,isNumber:Pi,isDateTime:ni},DJ={isMarkdownLink:_t,parseMarkdownLink:bt,markdownLink:yt,openLink:Vr,urlRepresentation:Br},OJ={Checkbox:vk,Section:X,RoundColorPicker:rk,ChartDataSeries:gz,ChartErrorSection:_z,ChartLabelRange:vz,ChartTitle:Ez,ChartPanel:uB,ChartFigure:aO,ChartJsComponent:xC,Grid:ZV,GridOverlay:JR,ScorecardChart:RC,LineConfigPanel:Kz,BarConfigPanel:bz,PieChartDesignPanel:Yz,GenericChartConfigPanel:yz,ChartWithAxisDesignPanel:Pz,LineChartDesignPanel:qz,GaugeChartConfigPanel:zz,GaugeChartDesignPanel:Bz,ScorecardChartConfigPanel:Qz,ScorecardChartDesignPanel:$z,GeoChartDesignPanel:Wz,RadarChartDesignPanel:Xz,WaterfallChartDesignPanel:oB,ComboChartDesignPanel:Iz,FunnelChartDesignPanel:Rz,ChartTypePicker:cB,FigureComponent:cO,MenuPopover:rO,Popover:$D,SelectionInput:fk,ValidationMessages:zR,AddDimensionButton:FB,PivotDimensionGranularity:zB,PivotDimensionOrder:BB,PivotDimension:RB,PivotLayoutConfigurator:WB,PivotHTMLRenderer:eH,PivotDeferUpdate:MB,PivotTitleSection:GB,CogWheelMenu:LB,TextInput:IB,SidePanelCollapsible:mO,RadioSelection:Oz,GeoChartRegionSelectSection:Vz,ChartDashboardMenu:iO,FullScreenChart:$V},kJ={useDragAndDropListItems:ak,useHighlights:pB,useHighlightsOnHover:fB},AJ={useStoreProvider:Ud,DependencyContainer:zd,CellPopoverStore:Ck,ComposerFocusStore:Qd,CellComposerStore:ER,FindAndReplaceStore:wB,HighlightStore:IO,DelayedHoveredCellStore:lO,HoveredTableStore:GR,ModelStore:Jd,NotificationStore:LO,RendererStore:Yd,SelectionInputStore:dk,SpreadsheetStore:Xd,useStore:B,useLocalStore:Wd,SidePanelStore:qV,PivotSidePanelStore:wV,PivotMeasureDisplayPanelStore:OB,ClientFocusStore:yR,GridRenderer:nz};function jJ(e,t){return Ix.add(e,t),{addFunction:(e,t)=>jJ(e,t)}}let MJ={DEFAULT_LOCALE:D,HIGHLIGHT_COLOR:v,PIVOT_TABLE_CONFIG:tt,ChartTerms:jw},NJ={...SD,...CE};e.AbstractCellClipboardHandler=Dl,e.AbstractChart=SC,e.AbstractFigureClipboardHandler=Ed,e.CellErrorType=k,e.ClientDisconnectedError=aW,e.CommandResult=Cr,e.CorePlugin=nH,e.CoreViewPlugin=EH,e.DispatchResult=xr,e.EvaluationError=A,e.LocalTransportService=RG,e.Model=xJ,e.PivotRuntimeDefinition=tV,e.Registry=g,e.Revision=iW,e.SPREADSHEET_DIMENSIONS=wJ,e.Spreadsheet=CK,e.SpreadsheetPivotTable=iV,e.UIPlugin=SU,e.__info__=CJ,e.addFunction=jJ,e.addRenderingLayer=jr,e.astToFormula=gy,e.chartHelpers=NJ,e.compile=Qx,e.compileTokens=$x,e.components=OJ,e.constants=MJ,e.convertAstNodes=fy,e.coreTypes=vr,e.findCellInNewZone=Bs,e.functionCache=Zx,e.helpers=EJ,e.hooks=kJ,e.invalidateCFEvaluationCommands=hr,e.invalidateChartEvaluationCommands=pr,e.invalidateDependenciesCommands=mr,e.invalidateEvaluationCommands=fr,e.iterateAstNodes=py,e.links=DJ,e.load=lN,e.parse=uy,e.parseTokens=dy,e.readonlyAllowedCommands=_r,e.registries=TJ,e.setDefaultSheetViewSize=$e,e.setTranslationMethod=rr,e.stores=AJ,e.tokenColors=VO,e.tokenize=jl,CJ.version=`18.4.47`,CJ.date=`2026-07-13T06:26:40.784Z`,CJ.hash=`3aec012`})(this.o_spreadsheet=this.o_spreadsheet||{},owl);
3412
+ `),`_rels/.rels`)}function yJ(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(`'?${ot(e)}'?!`,`g`);i=i.replaceAll(n,n=>{let r=t[e];return n.replace(e,r)})}return JSON.parse(i)}function bJ(e){for(let t of e.sheets)t.tables=t.tables.filter(e=>js(ps(e.range)).numberOfRows>1);return e}var xJ=class extends Rd{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 gl,a=!1){let o=performance.now();console.debug(`##### Model creation #####`),super(),ir(),r=_N(e,r);let s=lN(e,a);this.state=new LK,this.uuidGenerator=i,this.config=this.setupConfig(n),this.session=this.setupSession(s.revisionId),this.coreGetters={},this.range=new vH(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 FK(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 oG.getAll())this.setupCorePlugin(e,s);Object.assign(this.getters,this.coreGetters),this.session.loadInitialMessages(r);for(let e of lG.getAll()){let t=this.setupCoreViewPlugin(e);this.handlers.push(t),this.uiHandlers.push(t),this.coreHandlers.push(t)}for(let e of cG.getAll()){let t=this.setupUiPlugin(e);this.statefulUIPlugins.push(t),this.handlers.push(t),this.uiHandlers.push(t)}for(let e of sG.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 oW(jK({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:E(`Anonymous`).toString()},n=e.transportService||new RG;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(Er));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=yr(e)?this.checkDispatchAllowedCoreCommand(e):this.checkDispatchAllowedLocalCommand(e);return t.some(e=>e!==`Success`)?new xr(t.flat()):xr.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(SJ(e,t));dispatch=(e,t)=>{let n=SJ(e,t),r=this.status;if(this.getters.isReadonly()&&!br(n))return new xr(`Readonly`);if(!this.session.canApplyOptimisticUpdate())return new xr(`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();yr(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(yr(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(yr(n))throw Error(`A UI plugin cannot dispatch ${e} while handling a core command`);this.dispatchToHandlers(this.handlers,n)}return xr.Success};dispatchFromCorePlugin=(e,t)=>{let n=SJ(e,t),r=this.status;this.status=2;let i=this.isReplayingCommand?this.coreHandlers:this.handlers;return this.dispatchToHandlers(i,n),this.status=r,xr.Success};dispatchToHandlers(e,t){let n=yr(t);for(let r of e)!n&&r instanceof nH||r.beforeHandle(t);for(let r of e)!n&&r instanceof nH||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=wN();for(let t of this.handlers)t instanceof nH&&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=EN();for(let t of this.handlers)t instanceof tH&&t.exportForExcel(e);return e=b(e),uJ(e)}garbageCollectExternalResources(){for(let e of this.corePlugins)e.garbageCollectExternalResources()}};function SJ(e,t={}){let n=b(t);return n.type=e,n}let CJ={},wJ={MIN_ROW_HEIGHT:10,MIN_COL_WIDTH:5,HEADER_HEIGHT:26,HEADER_WIDTH:48,DESKTOP_BOTTOMBAR_HEIGHT:36,DEFAULT_CELL_WIDTH:96,DEFAULT_CELL_HEIGHT:23,SCROLLBAR_WIDTH:15},TJ={autoCompleteProviders:PO,autofillModifiersRegistry:dU,autofillRulesRegistry:fU,cellMenuRegistry:KI,colMenuRegistry:uR,errorTypes:Ri,linkMenuRegistry:Fk,functionRegistry:Ix,featurePluginRegistry:sG,iconsOnCellRegistry:tU,statefulUIPluginRegistry:cG,coreViewsPluginRegistry:lG,corePluginRegistry:oG,rowMenuRegistry:_R,sidePanelRegistry:GV,figureRegistry:sO,chartSidePanelComponentRegistry:sB,chartComponentRegistry:pD,chartRegistry:fD,chartSubtypeRegistry:hD,topbarMenuRegistry:IG,topbarComponentRegistry:LG,clickableCellRegistry:mG,otRegistry:EU,inverseCommandRegistry:hG,urlRegistry:Ir,cellPopoverRegistry:uO,numberFormatMenuRegistry:jG,repeatLocalCommandTransformRegistry:VW,repeatCommandTransformRegistry:BW,clipboardHandlersRegistries:Fd,pivotRegistry:bV,pivotTimeAdapterRegistry:Uu,pivotSidePanelRegistry:EV,pivotNormalizationValueRegistry:bd,supportedPivotPositionalFormulaRegistry:QV,pivotToFunctionValueRegistry:xd,migrationStepRegistry:iN,chartJsExtensionRegistry:lf},EJ={arg:U,isEvaluationError:j,toBoolean:P,toJsDate:F,toNumber:M,toString:N,toNormalizedPivotValue:gd,toFunctionPivotValue:vd,toXC:T,toZone:ps,toUnboundedZone:fs,toCartesian:Zn,numberToLetters:Hn,lettersToNumber:Un,UuidGenerator:gl,formatValue:L,createCurrencyFormat:ko,ColorGenerator:In,computeTextWidth:$c,createEmptyWorkbookData:wN,createEmptySheet:CN,createEmptyExcelSheet:TN,rgbaToHex:mn,colorToRGBA:hn,positionToZone:z,isDefined:C,isMatrix:Or,lazy:kt,genericRepeat:HW,createAction:m,createActions:f,transformRangeData:Ld,deepEquals:w,overlap:Ds,union:Cs,isInside:ks,deepCopy:b,expandZoneOnInsertion:ys,reduceZoneOnDeletion:Ss,unquote:lt,getMaxObjectId:cd,getFunctionsFromTokens:sS,getFirstPivotFunction:QB,getNumberOfPivotFunctions:eV,parseDimension:dd,isDateOrDatetimeField:fd,makeFieldProposal:qB,insertTokenAfterArgSeparator:YB,insertTokenAfterLeftParenthesis:XB,mergeContiguousZones:Qs,getPivotHighlights:AB,pivotTimeAdapter:Wu,UNDO_REDO_PIVOT_COMMANDS:cU,createPivotFormula:hd,areDomainArgsFieldsValid:md,splitReference:vc,sanitizeSheetName:dt,getUniqueText:$t,isNumber:Pi,isDateTime:ni},DJ={isMarkdownLink:_t,parseMarkdownLink:bt,markdownLink:yt,openLink:Vr,urlRepresentation:Br},OJ={Checkbox:vk,Section:X,RoundColorPicker:rk,ChartDataSeries:gz,ChartErrorSection:_z,ChartLabelRange:vz,ChartTitle:Ez,ChartPanel:uB,ChartFigure:aO,ChartJsComponent:xC,Grid:ZV,GridOverlay:JR,ScorecardChart:RC,LineConfigPanel:Kz,BarConfigPanel:bz,PieChartDesignPanel:Yz,GenericChartConfigPanel:yz,ChartWithAxisDesignPanel:Pz,LineChartDesignPanel:qz,GaugeChartConfigPanel:zz,GaugeChartDesignPanel:Bz,ScorecardChartConfigPanel:Qz,ScorecardChartDesignPanel:$z,GeoChartDesignPanel:Wz,RadarChartDesignPanel:Xz,WaterfallChartDesignPanel:oB,ComboChartDesignPanel:Iz,FunnelChartDesignPanel:Rz,ChartTypePicker:cB,FigureComponent:cO,MenuPopover:rO,Popover:$D,SelectionInput:fk,ValidationMessages:zR,AddDimensionButton:FB,PivotDimensionGranularity:zB,PivotDimensionOrder:BB,PivotDimension:RB,PivotLayoutConfigurator:WB,PivotHTMLRenderer:eH,PivotDeferUpdate:MB,PivotTitleSection:GB,CogWheelMenu:LB,TextInput:IB,SidePanelCollapsible:mO,RadioSelection:Oz,GeoChartRegionSelectSection:Vz,ChartDashboardMenu:iO,FullScreenChart:$V},kJ={useDragAndDropListItems:ak,useHighlights:pB,useHighlightsOnHover:fB},AJ={useStoreProvider:Ud,DependencyContainer:zd,CellPopoverStore:Ck,ComposerFocusStore:Qd,CellComposerStore:ER,FindAndReplaceStore:wB,HighlightStore:IO,DelayedHoveredCellStore:lO,HoveredTableStore:GR,ModelStore:Jd,NotificationStore:LO,RendererStore:Yd,SelectionInputStore:dk,SpreadsheetStore:Xd,useStore:B,useLocalStore:Wd,SidePanelStore:qV,PivotSidePanelStore:wV,PivotMeasureDisplayPanelStore:OB,ClientFocusStore:yR,GridRenderer:nz};function jJ(e,t){return Ix.add(e,t),{addFunction:(e,t)=>jJ(e,t)}}let MJ={DEFAULT_LOCALE:D,HIGHLIGHT_COLOR:v,PIVOT_TABLE_CONFIG:tt,ChartTerms:jw},NJ={...SD,...CE};e.AbstractCellClipboardHandler=Dl,e.AbstractChart=SC,e.AbstractFigureClipboardHandler=Ed,e.CellErrorType=k,e.ClientDisconnectedError=aW,e.CommandResult=Cr,e.CorePlugin=nH,e.CoreViewPlugin=EH,e.DispatchResult=xr,e.EvaluationError=A,e.LocalTransportService=RG,e.Model=xJ,e.PivotRuntimeDefinition=tV,e.Registry=g,e.Revision=iW,e.SPREADSHEET_DIMENSIONS=wJ,e.Spreadsheet=CK,e.SpreadsheetPivotTable=iV,e.UIPlugin=SU,e.__info__=CJ,e.addFunction=jJ,e.addRenderingLayer=jr,e.astToFormula=gy,e.chartHelpers=NJ,e.compile=Qx,e.compileTokens=$x,e.components=OJ,e.constants=MJ,e.convertAstNodes=fy,e.coreTypes=vr,e.findCellInNewZone=Bs,e.functionCache=Zx,e.helpers=EJ,e.hooks=kJ,e.invalidateCFEvaluationCommands=hr,e.invalidateChartEvaluationCommands=pr,e.invalidateDependenciesCommands=mr,e.invalidateEvaluationCommands=fr,e.iterateAstNodes=py,e.links=DJ,e.load=lN,e.parse=uy,e.parseTokens=dy,e.readonlyAllowedCommands=_r,e.registries=TJ,e.setDefaultSheetViewSize=$e,e.setTranslationMethod=rr,e.stores=AJ,e.tokenColors=VO,e.tokenize=jl,CJ.version=`18.4.48`,CJ.date=`2026-07-20T11:00:08.319Z`,CJ.hash=`a4662a5`})(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.4.47
5
- @date 2026-07-13T06:26:41.544Z
6
- @hash 3aec012
4
+ @version 18.4.48
5
+ @date 2026-07-20T11:00:09.134Z
6
+ @hash a4662a5
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.4.47",
3
+ "version": "18.4.48",
4
4
  "description": "A spreadsheet component",
5
5
  "type": "module",
6
6
  "main": "dist/o-spreadsheet.cjs.js",