@odoo/o-spreadsheet 18.2.34 → 18.2.36

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.2.34
6
- * @date 2025-11-12T14:15:32.431Z
7
- * @hash 9ca0c4c
5
+ * @version 18.2.36
6
+ * @date 2025-12-02T05:31:10.558Z
7
+ * @hash d385099
8
8
  */
9
9
 
10
10
  'use strict';
@@ -3448,7 +3448,6 @@ const invalidateEvaluationCommands = new Set([
3448
3448
  "REDO",
3449
3449
  "ADD_MERGE",
3450
3450
  "REMOVE_MERGE",
3451
- "DUPLICATE_SHEET",
3452
3451
  "UPDATE_LOCALE",
3453
3452
  "ADD_PIVOT",
3454
3453
  "UPDATE_PIVOT",
@@ -21166,6 +21165,7 @@ class AbstractComposerStore extends SpreadsheetStore {
21166
21165
  }
21167
21166
  this.selectionStart = start;
21168
21167
  this.selectionEnd = end;
21168
+ this.stopComposerRangeSelection();
21169
21169
  this.computeFormulaCursorContext();
21170
21170
  this.computeParenthesisRelatedToCursor();
21171
21171
  }
@@ -22210,7 +22210,6 @@ function insertTokenAfterArgSeparator(tokenAtCursor, value) {
22210
22210
  // replace the whole token
22211
22211
  start = tokenAtCursor.start;
22212
22212
  }
22213
- this.composer.stopComposerRangeSelection();
22214
22213
  this.composer.changeComposerCursorSelection(start, end);
22215
22214
  this.composer.replaceComposerCursorSelection(value);
22216
22215
  }
@@ -22228,7 +22227,6 @@ function insertTokenAfterLeftParenthesis(tokenAtCursor, value) {
22228
22227
  // replace the whole token
22229
22228
  start = tokenAtCursor.start;
22230
22229
  }
22231
- this.composer.stopComposerRangeSelection();
22232
22230
  this.composer.changeComposerCursorSelection(start, end);
22233
22231
  this.composer.replaceComposerCursorSelection(value);
22234
22232
  }
@@ -23354,29 +23352,34 @@ function chartToImage(runtime, figure, type) {
23354
23352
  canvas.setAttribute("height", figure.height.toString());
23355
23353
  // we have to add the canvas to the DOM otherwise it won't be rendered
23356
23354
  document.body.append(div);
23355
+ let imgContent = undefined;
23357
23356
  if ("chartJsConfig" in runtime) {
23357
+ const extensionsLoaded = areChartJSExtensionsLoaded();
23358
+ if (!extensionsLoaded) {
23359
+ registerChartJSExtensions();
23360
+ }
23358
23361
  const config = deepCopy(runtime.chartJsConfig);
23359
23362
  config.plugins = [backgroundColorChartJSPlugin];
23360
23363
  const chart = new window.Chart(canvas, config);
23361
- const imgContent = chart.toBase64Image();
23364
+ imgContent = chart.toBase64Image();
23362
23365
  chart.destroy();
23363
23366
  div.remove();
23364
- return imgContent;
23367
+ if (!extensionsLoaded) {
23368
+ unregisterChartJsExtensions();
23369
+ }
23365
23370
  }
23366
23371
  else if (type === "scorecard") {
23367
23372
  const design = getScorecardConfiguration(figure, runtime);
23368
23373
  drawScoreChart(design, canvas);
23369
- const imgContent = canvas.toDataURL();
23374
+ imgContent = canvas.toDataURL();
23370
23375
  div.remove();
23371
- return imgContent;
23372
23376
  }
23373
23377
  else if (type === "gauge") {
23374
23378
  drawGaugeChart(canvas, runtime);
23375
- const imgContent = canvas.toDataURL();
23379
+ imgContent = canvas.toDataURL();
23376
23380
  div.remove();
23377
- return imgContent;
23378
23381
  }
23379
- return undefined;
23382
+ return imgContent;
23380
23383
  }
23381
23384
  /**
23382
23385
  * Custom chart.js plugin to set the background color of the canvas
@@ -41385,7 +41388,6 @@ class Composer extends owl.Component {
41385
41388
  return;
41386
41389
  }
41387
41390
  const newSelection = this.contentHelper.getCurrentSelection();
41388
- this.props.composerStore.stopComposerRangeSelection();
41389
41391
  this.props.onComposerContentFocused();
41390
41392
  this.props.composerStore.changeComposerCursorSelection(newSelection.start, newSelection.end);
41391
41393
  this.processTokenAtCursor();
@@ -47514,7 +47516,6 @@ const dateGranularities = [
47514
47516
  pivotRegistry.add("SPREADSHEET", {
47515
47517
  ui: SpreadsheetPivot,
47516
47518
  definition: SpreadsheetPivotRuntimeDefinition,
47517
- externalData: false,
47518
47519
  dateGranularities: [...dateGranularities],
47519
47520
  datetimeGranularities: [...dateGranularities, "hour_number", "minute_number", "second_number"],
47520
47521
  isMeasureCandidate: (field) => field.type !== "boolean",
@@ -51374,7 +51375,10 @@ class AbstractResizer extends owl.Component {
51374
51375
  this.state.waitingForMove = false;
51375
51376
  }
51376
51377
  onMouseMove(ev) {
51377
- if (this.state.isResizing || this.state.isMoving || this.state.isSelecting) {
51378
+ if (this.env.model.getters.isReadonly() ||
51379
+ this.state.isResizing ||
51380
+ this.state.isMoving ||
51381
+ this.state.isSelecting) {
51378
51382
  return;
51379
51383
  }
51380
51384
  this._computeHandleDisplay(ev);
@@ -51427,6 +51431,10 @@ class AbstractResizer extends owl.Component {
51427
51431
  if (index < 0) {
51428
51432
  return;
51429
51433
  }
51434
+ if (this.env.model.getters.isReadonly()) {
51435
+ this._selectElement(index, false);
51436
+ return;
51437
+ }
51430
51438
  if (this.state.waitingForMove) {
51431
51439
  if (!this.env.model.getters.isGridSelectionActive()) {
51432
51440
  this._selectElement(index, false);
@@ -53128,24 +53136,24 @@ const DEFAULT_SIDE_PANEL_SIZE = 350;
53128
53136
  const MIN_SHEET_VIEW_WIDTH = 150;
53129
53137
  class SidePanelStore extends SpreadsheetStore {
53130
53138
  mutators = ["open", "toggle", "close", "changePanelSize", "resetPanelSize"];
53131
- initialPanelProps = {};
53139
+ currentPanelProps = {};
53132
53140
  componentTag = "";
53133
53141
  panelSize = DEFAULT_SIDE_PANEL_SIZE;
53134
53142
  get isOpen() {
53135
53143
  if (!this.componentTag) {
53136
53144
  return false;
53137
53145
  }
53138
- return this.computeState(this.componentTag, this.initialPanelProps).isOpen;
53146
+ return this.computeState(this.componentTag, this.currentPanelProps).isOpen;
53139
53147
  }
53140
53148
  get panelProps() {
53141
- const state = this.computeState(this.componentTag, this.initialPanelProps);
53149
+ const state = this.computeState(this.componentTag, this.currentPanelProps);
53142
53150
  if (state.isOpen) {
53143
53151
  return state.props ?? {};
53144
53152
  }
53145
53153
  return {};
53146
53154
  }
53147
53155
  get panelKey() {
53148
- const state = this.computeState(this.componentTag, this.initialPanelProps);
53156
+ const state = this.computeState(this.componentTag, this.currentPanelProps);
53149
53157
  if (state.isOpen) {
53150
53158
  return state.key;
53151
53159
  }
@@ -53157,10 +53165,10 @@ class SidePanelStore extends SpreadsheetStore {
53157
53165
  return;
53158
53166
  }
53159
53167
  if (this.isOpen && componentTag !== this.componentTag) {
53160
- this.initialPanelProps?.onCloseSidePanel?.();
53168
+ this.currentPanelProps?.onCloseSidePanel?.();
53161
53169
  }
53162
53170
  this.componentTag = componentTag;
53163
- this.initialPanelProps = state.props ?? {};
53171
+ this.currentPanelProps = state.props ?? {};
53164
53172
  }
53165
53173
  toggle(componentTag, panelProps) {
53166
53174
  if (this.isOpen && componentTag === this.componentTag) {
@@ -53171,8 +53179,8 @@ class SidePanelStore extends SpreadsheetStore {
53171
53179
  }
53172
53180
  }
53173
53181
  close() {
53174
- this.initialPanelProps.onCloseSidePanel?.();
53175
- this.initialPanelProps = {};
53182
+ this.currentPanelProps.onCloseSidePanel?.();
53183
+ this.currentPanelProps = {};
53176
53184
  this.componentTag = "";
53177
53185
  }
53178
53186
  changePanelSize(size, spreadsheetElWidth) {
@@ -53198,7 +53206,11 @@ class SidePanelStore extends SpreadsheetStore {
53198
53206
  };
53199
53207
  }
53200
53208
  else {
53201
- return customComputeState(this.getters, panelProps);
53209
+ const state = customComputeState(this.getters, panelProps);
53210
+ if (state.isOpen) {
53211
+ this.currentPanelProps = state.props ?? this.currentPanelProps;
53212
+ }
53213
+ return state;
53202
53214
  }
53203
53215
  }
53204
53216
  }
@@ -60001,10 +60013,17 @@ class PivotCorePlugin extends CorePlugin {
60001
60013
  if (!pivot) {
60002
60014
  continue;
60003
60015
  }
60004
- for (const measure of pivot.definition.measures) {
60016
+ const def = deepCopy(pivot.definition);
60017
+ for (const measure of def.measures) {
60005
60018
  if (measure.computedBy?.formula === formulaString) {
60006
- const measureIndex = pivot.definition.measures.indexOf(measure);
60007
- this.history.update("pivots", pivotId, "definition", "measures", measureIndex, "computedBy", { formula: newFormulaString, sheetId });
60019
+ const measureIndex = def.measures.indexOf(measure);
60020
+ if (measureIndex !== -1) {
60021
+ def.measures[measureIndex].computedBy = {
60022
+ formula: newFormulaString,
60023
+ sheetId,
60024
+ };
60025
+ }
60026
+ this.dispatch("UPDATE_PIVOT", { pivotId, pivot: def });
60008
60027
  }
60009
60028
  }
60010
60029
  }
@@ -60157,6 +60176,9 @@ class SpreadsheetPivotCorePlugin extends CorePlugin {
60157
60176
  const { sheetId, zone } = definition.dataSet;
60158
60177
  const range = this.getters.getRangeFromZone(sheetId, zone);
60159
60178
  const adaptedRange = adaptPivotRange(range, applyChange);
60179
+ if (adaptedRange === range) {
60180
+ return;
60181
+ }
60160
60182
  const dataSet = adaptedRange && {
60161
60183
  sheetId: adaptedRange.sheetId,
60162
60184
  zone: adaptedRange.zone,
@@ -63879,9 +63901,7 @@ class PivotUIPlugin extends CoreViewPlugin {
63879
63901
  handle(cmd) {
63880
63902
  if (invalidateEvaluationCommands.has(cmd.type)) {
63881
63903
  for (const pivotId of this.getters.getPivotIds()) {
63882
- if (!pivotRegistry.get(this.getters.getPivotCoreDefinition(pivotId).type).externalData) {
63883
- this.setupPivot(pivotId, { recreate: true });
63884
- }
63904
+ this.setupPivot(pivotId, { recreate: true });
63885
63905
  }
63886
63906
  }
63887
63907
  switch (cmd.type) {
@@ -64082,7 +64102,7 @@ class PivotUIPlugin extends CoreViewPlugin {
64082
64102
  pivot.init({ reload: true });
64083
64103
  }
64084
64104
  setupPivot(pivotId, { recreate } = { recreate: false }) {
64085
- const definition = this.getters.getPivotCoreDefinition(pivotId);
64105
+ const definition = deepCopy(this.getters.getPivotCoreDefinition(pivotId));
64086
64106
  if (!(pivotId in this.pivots)) {
64087
64107
  const Pivot = withPivotPresentationLayer(pivotRegistry.get(definition.type).ui);
64088
64108
  this.pivots[pivotId] = new Pivot(this.custom, { definition, getters: this.getters });
@@ -72680,7 +72700,7 @@ css /* scss */ `
72680
72700
  border-radius: 4px;
72681
72701
  font-weight: 500;
72682
72702
  font-size: 14px;
72683
- height: 32px;
72703
+ min-height: 32px;
72684
72704
  line-height: 16px;
72685
72705
  flex-grow: 1;
72686
72706
  background-color: ${BUTTON_BG};
@@ -77385,6 +77405,6 @@ exports.tokenColors = tokenColors;
77385
77405
  exports.tokenize = tokenize;
77386
77406
 
77387
77407
 
77388
- __info__.version = "18.2.34";
77389
- __info__.date = "2025-11-12T14:15:32.431Z";
77390
- __info__.hash = "9ca0c4c";
77408
+ __info__.version = "18.2.36";
77409
+ __info__.date = "2025-12-02T05:31:10.558Z";
77410
+ __info__.hash = "d385099";
@@ -6363,7 +6363,6 @@ type PivotDefinitionConstructor = new (definition: PivotCoreDefinition, fields:
6363
6363
  interface PivotRegistryItem {
6364
6364
  ui: PivotUIConstructor;
6365
6365
  definition: PivotDefinitionConstructor;
6366
- externalData: boolean;
6367
6366
  dateGranularities: string[];
6368
6367
  datetimeGranularities: string[];
6369
6368
  isMeasureCandidate: (field: PivotField) => boolean;
@@ -8658,7 +8657,7 @@ interface ClosedSidePanel {
8658
8657
  type SidePanelState = OpenSidePanel | ClosedSidePanel;
8659
8658
  declare class SidePanelStore extends SpreadsheetStore {
8660
8659
  mutators: readonly ["open", "toggle", "close", "changePanelSize", "resetPanelSize"];
8661
- initialPanelProps: SidePanelProps;
8660
+ currentPanelProps: SidePanelProps;
8662
8661
  componentTag: string;
8663
8662
  panelSize: number;
8664
8663
  get isOpen(): boolean;
@@ -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.2.34
6
- * @date 2025-11-12T14:15:32.431Z
7
- * @hash 9ca0c4c
5
+ * @version 18.2.36
6
+ * @date 2025-12-02T05:31:10.558Z
7
+ * @hash d385099
8
8
  */
9
9
 
10
10
  import { useEnv, useSubEnv, onWillUnmount, useComponent, status, Component, useRef, onMounted, useEffect, App, blockDom, useState, onPatched, onWillPatch, onWillUpdateProps, useExternalListener, onWillStart, xml, useChildSubEnv, markRaw, toRaw } from '@odoo/owl';
@@ -3446,7 +3446,6 @@ const invalidateEvaluationCommands = new Set([
3446
3446
  "REDO",
3447
3447
  "ADD_MERGE",
3448
3448
  "REMOVE_MERGE",
3449
- "DUPLICATE_SHEET",
3450
3449
  "UPDATE_LOCALE",
3451
3450
  "ADD_PIVOT",
3452
3451
  "UPDATE_PIVOT",
@@ -21164,6 +21163,7 @@ class AbstractComposerStore extends SpreadsheetStore {
21164
21163
  }
21165
21164
  this.selectionStart = start;
21166
21165
  this.selectionEnd = end;
21166
+ this.stopComposerRangeSelection();
21167
21167
  this.computeFormulaCursorContext();
21168
21168
  this.computeParenthesisRelatedToCursor();
21169
21169
  }
@@ -22208,7 +22208,6 @@ function insertTokenAfterArgSeparator(tokenAtCursor, value) {
22208
22208
  // replace the whole token
22209
22209
  start = tokenAtCursor.start;
22210
22210
  }
22211
- this.composer.stopComposerRangeSelection();
22212
22211
  this.composer.changeComposerCursorSelection(start, end);
22213
22212
  this.composer.replaceComposerCursorSelection(value);
22214
22213
  }
@@ -22226,7 +22225,6 @@ function insertTokenAfterLeftParenthesis(tokenAtCursor, value) {
22226
22225
  // replace the whole token
22227
22226
  start = tokenAtCursor.start;
22228
22227
  }
22229
- this.composer.stopComposerRangeSelection();
22230
22228
  this.composer.changeComposerCursorSelection(start, end);
22231
22229
  this.composer.replaceComposerCursorSelection(value);
22232
22230
  }
@@ -23352,29 +23350,34 @@ function chartToImage(runtime, figure, type) {
23352
23350
  canvas.setAttribute("height", figure.height.toString());
23353
23351
  // we have to add the canvas to the DOM otherwise it won't be rendered
23354
23352
  document.body.append(div);
23353
+ let imgContent = undefined;
23355
23354
  if ("chartJsConfig" in runtime) {
23355
+ const extensionsLoaded = areChartJSExtensionsLoaded();
23356
+ if (!extensionsLoaded) {
23357
+ registerChartJSExtensions();
23358
+ }
23356
23359
  const config = deepCopy(runtime.chartJsConfig);
23357
23360
  config.plugins = [backgroundColorChartJSPlugin];
23358
23361
  const chart = new window.Chart(canvas, config);
23359
- const imgContent = chart.toBase64Image();
23362
+ imgContent = chart.toBase64Image();
23360
23363
  chart.destroy();
23361
23364
  div.remove();
23362
- return imgContent;
23365
+ if (!extensionsLoaded) {
23366
+ unregisterChartJsExtensions();
23367
+ }
23363
23368
  }
23364
23369
  else if (type === "scorecard") {
23365
23370
  const design = getScorecardConfiguration(figure, runtime);
23366
23371
  drawScoreChart(design, canvas);
23367
- const imgContent = canvas.toDataURL();
23372
+ imgContent = canvas.toDataURL();
23368
23373
  div.remove();
23369
- return imgContent;
23370
23374
  }
23371
23375
  else if (type === "gauge") {
23372
23376
  drawGaugeChart(canvas, runtime);
23373
- const imgContent = canvas.toDataURL();
23377
+ imgContent = canvas.toDataURL();
23374
23378
  div.remove();
23375
- return imgContent;
23376
23379
  }
23377
- return undefined;
23380
+ return imgContent;
23378
23381
  }
23379
23382
  /**
23380
23383
  * Custom chart.js plugin to set the background color of the canvas
@@ -41383,7 +41386,6 @@ class Composer extends Component {
41383
41386
  return;
41384
41387
  }
41385
41388
  const newSelection = this.contentHelper.getCurrentSelection();
41386
- this.props.composerStore.stopComposerRangeSelection();
41387
41389
  this.props.onComposerContentFocused();
41388
41390
  this.props.composerStore.changeComposerCursorSelection(newSelection.start, newSelection.end);
41389
41391
  this.processTokenAtCursor();
@@ -47512,7 +47514,6 @@ const dateGranularities = [
47512
47514
  pivotRegistry.add("SPREADSHEET", {
47513
47515
  ui: SpreadsheetPivot,
47514
47516
  definition: SpreadsheetPivotRuntimeDefinition,
47515
- externalData: false,
47516
47517
  dateGranularities: [...dateGranularities],
47517
47518
  datetimeGranularities: [...dateGranularities, "hour_number", "minute_number", "second_number"],
47518
47519
  isMeasureCandidate: (field) => field.type !== "boolean",
@@ -51372,7 +51373,10 @@ class AbstractResizer extends Component {
51372
51373
  this.state.waitingForMove = false;
51373
51374
  }
51374
51375
  onMouseMove(ev) {
51375
- if (this.state.isResizing || this.state.isMoving || this.state.isSelecting) {
51376
+ if (this.env.model.getters.isReadonly() ||
51377
+ this.state.isResizing ||
51378
+ this.state.isMoving ||
51379
+ this.state.isSelecting) {
51376
51380
  return;
51377
51381
  }
51378
51382
  this._computeHandleDisplay(ev);
@@ -51425,6 +51429,10 @@ class AbstractResizer extends Component {
51425
51429
  if (index < 0) {
51426
51430
  return;
51427
51431
  }
51432
+ if (this.env.model.getters.isReadonly()) {
51433
+ this._selectElement(index, false);
51434
+ return;
51435
+ }
51428
51436
  if (this.state.waitingForMove) {
51429
51437
  if (!this.env.model.getters.isGridSelectionActive()) {
51430
51438
  this._selectElement(index, false);
@@ -53126,24 +53134,24 @@ const DEFAULT_SIDE_PANEL_SIZE = 350;
53126
53134
  const MIN_SHEET_VIEW_WIDTH = 150;
53127
53135
  class SidePanelStore extends SpreadsheetStore {
53128
53136
  mutators = ["open", "toggle", "close", "changePanelSize", "resetPanelSize"];
53129
- initialPanelProps = {};
53137
+ currentPanelProps = {};
53130
53138
  componentTag = "";
53131
53139
  panelSize = DEFAULT_SIDE_PANEL_SIZE;
53132
53140
  get isOpen() {
53133
53141
  if (!this.componentTag) {
53134
53142
  return false;
53135
53143
  }
53136
- return this.computeState(this.componentTag, this.initialPanelProps).isOpen;
53144
+ return this.computeState(this.componentTag, this.currentPanelProps).isOpen;
53137
53145
  }
53138
53146
  get panelProps() {
53139
- const state = this.computeState(this.componentTag, this.initialPanelProps);
53147
+ const state = this.computeState(this.componentTag, this.currentPanelProps);
53140
53148
  if (state.isOpen) {
53141
53149
  return state.props ?? {};
53142
53150
  }
53143
53151
  return {};
53144
53152
  }
53145
53153
  get panelKey() {
53146
- const state = this.computeState(this.componentTag, this.initialPanelProps);
53154
+ const state = this.computeState(this.componentTag, this.currentPanelProps);
53147
53155
  if (state.isOpen) {
53148
53156
  return state.key;
53149
53157
  }
@@ -53155,10 +53163,10 @@ class SidePanelStore extends SpreadsheetStore {
53155
53163
  return;
53156
53164
  }
53157
53165
  if (this.isOpen && componentTag !== this.componentTag) {
53158
- this.initialPanelProps?.onCloseSidePanel?.();
53166
+ this.currentPanelProps?.onCloseSidePanel?.();
53159
53167
  }
53160
53168
  this.componentTag = componentTag;
53161
- this.initialPanelProps = state.props ?? {};
53169
+ this.currentPanelProps = state.props ?? {};
53162
53170
  }
53163
53171
  toggle(componentTag, panelProps) {
53164
53172
  if (this.isOpen && componentTag === this.componentTag) {
@@ -53169,8 +53177,8 @@ class SidePanelStore extends SpreadsheetStore {
53169
53177
  }
53170
53178
  }
53171
53179
  close() {
53172
- this.initialPanelProps.onCloseSidePanel?.();
53173
- this.initialPanelProps = {};
53180
+ this.currentPanelProps.onCloseSidePanel?.();
53181
+ this.currentPanelProps = {};
53174
53182
  this.componentTag = "";
53175
53183
  }
53176
53184
  changePanelSize(size, spreadsheetElWidth) {
@@ -53196,7 +53204,11 @@ class SidePanelStore extends SpreadsheetStore {
53196
53204
  };
53197
53205
  }
53198
53206
  else {
53199
- return customComputeState(this.getters, panelProps);
53207
+ const state = customComputeState(this.getters, panelProps);
53208
+ if (state.isOpen) {
53209
+ this.currentPanelProps = state.props ?? this.currentPanelProps;
53210
+ }
53211
+ return state;
53200
53212
  }
53201
53213
  }
53202
53214
  }
@@ -59999,10 +60011,17 @@ class PivotCorePlugin extends CorePlugin {
59999
60011
  if (!pivot) {
60000
60012
  continue;
60001
60013
  }
60002
- for (const measure of pivot.definition.measures) {
60014
+ const def = deepCopy(pivot.definition);
60015
+ for (const measure of def.measures) {
60003
60016
  if (measure.computedBy?.formula === formulaString) {
60004
- const measureIndex = pivot.definition.measures.indexOf(measure);
60005
- this.history.update("pivots", pivotId, "definition", "measures", measureIndex, "computedBy", { formula: newFormulaString, sheetId });
60017
+ const measureIndex = def.measures.indexOf(measure);
60018
+ if (measureIndex !== -1) {
60019
+ def.measures[measureIndex].computedBy = {
60020
+ formula: newFormulaString,
60021
+ sheetId,
60022
+ };
60023
+ }
60024
+ this.dispatch("UPDATE_PIVOT", { pivotId, pivot: def });
60006
60025
  }
60007
60026
  }
60008
60027
  }
@@ -60155,6 +60174,9 @@ class SpreadsheetPivotCorePlugin extends CorePlugin {
60155
60174
  const { sheetId, zone } = definition.dataSet;
60156
60175
  const range = this.getters.getRangeFromZone(sheetId, zone);
60157
60176
  const adaptedRange = adaptPivotRange(range, applyChange);
60177
+ if (adaptedRange === range) {
60178
+ return;
60179
+ }
60158
60180
  const dataSet = adaptedRange && {
60159
60181
  sheetId: adaptedRange.sheetId,
60160
60182
  zone: adaptedRange.zone,
@@ -63877,9 +63899,7 @@ class PivotUIPlugin extends CoreViewPlugin {
63877
63899
  handle(cmd) {
63878
63900
  if (invalidateEvaluationCommands.has(cmd.type)) {
63879
63901
  for (const pivotId of this.getters.getPivotIds()) {
63880
- if (!pivotRegistry.get(this.getters.getPivotCoreDefinition(pivotId).type).externalData) {
63881
- this.setupPivot(pivotId, { recreate: true });
63882
- }
63902
+ this.setupPivot(pivotId, { recreate: true });
63883
63903
  }
63884
63904
  }
63885
63905
  switch (cmd.type) {
@@ -64080,7 +64100,7 @@ class PivotUIPlugin extends CoreViewPlugin {
64080
64100
  pivot.init({ reload: true });
64081
64101
  }
64082
64102
  setupPivot(pivotId, { recreate } = { recreate: false }) {
64083
- const definition = this.getters.getPivotCoreDefinition(pivotId);
64103
+ const definition = deepCopy(this.getters.getPivotCoreDefinition(pivotId));
64084
64104
  if (!(pivotId in this.pivots)) {
64085
64105
  const Pivot = withPivotPresentationLayer(pivotRegistry.get(definition.type).ui);
64086
64106
  this.pivots[pivotId] = new Pivot(this.custom, { definition, getters: this.getters });
@@ -72678,7 +72698,7 @@ css /* scss */ `
72678
72698
  border-radius: 4px;
72679
72699
  font-weight: 500;
72680
72700
  font-size: 14px;
72681
- height: 32px;
72701
+ min-height: 32px;
72682
72702
  line-height: 16px;
72683
72703
  flex-grow: 1;
72684
72704
  background-color: ${BUTTON_BG};
@@ -77338,6 +77358,6 @@ const chartHelpers = { ...CHART_HELPERS, ...CHART_RUNTIME_HELPERS };
77338
77358
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, CoreViewPlugin, DispatchResult, EvaluationError, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, chartHelpers, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
77339
77359
 
77340
77360
 
77341
- __info__.version = "18.2.34";
77342
- __info__.date = "2025-11-12T14:15:32.431Z";
77343
- __info__.hash = "9ca0c4c";
77361
+ __info__.version = "18.2.36";
77362
+ __info__.date = "2025-12-02T05:31:10.558Z";
77363
+ __info__.hash = "d385099";