@odoo/o-spreadsheet 19.4.5 → 19.4.7

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 19.4.5
6
- * @date 2026-07-30T06:55:39.923Z
7
- * @hash 9308e17
5
+ * @version 19.4.7
6
+ * @date 2026-08-12T09:16:40.949Z
7
+ * @hash 65642fe
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -5958,6 +5958,9 @@ var FunctionRegistry = class extends Registry {
5958
5958
  }
5959
5959
  };
5960
5960
  const functionRegistry = new FunctionRegistry();
5961
+ /** Formulas using one of these functions are never squished: they are always exported
5962
+ * as a full formula string, and they don't become the base formula of the next cells. */
5963
+ const NonSquishableFunctionRegistry = new Registry();
5961
5964
 
5962
5965
  //#endregion
5963
5966
  //#region src/helpers/references.ts
@@ -8916,6 +8919,25 @@ const funnelTooltipPositioner = function(elements) {
8916
8919
  };
8917
8920
  };
8918
8921
 
8922
+ //#endregion
8923
+ //#region src/components/figures/chart/chartJs/chartjs_geo_projection_plugin.ts
8924
+ /**
8925
+ * ChartJS plugin to apply custom changes to a d3 projection.
8926
+ *
8927
+ * We pass the projection as a string instead of a customized d3 object so
8928
+ * Chart.js creates a fresh projection instance. Custom changes (e.g. rotation)
8929
+ * are then applied in `beforeUpdate`.
8930
+ *
8931
+ * This is important because Chart.js mutates the projection instance at runtime,
8932
+ * and a customize d3 projection object would not be copied during deepCopy.
8933
+ */
8934
+ const geoProjectionPlugin = {
8935
+ id: "geoProjection",
8936
+ beforeUpdate(chart) {
8937
+ if (chart.options?.scales?.projection?.projection === "conicConformal") chart.scales?.projection?.projection?.rotate([100, 0]);
8938
+ }
8939
+ };
8940
+
8919
8941
  //#endregion
8920
8942
  //#region src/components/figures/chart/chartJs/chartjs_minor_grid_plugin.ts
8921
8943
  const chartMinorGridPlugin = {
@@ -10719,7 +10741,7 @@ function getGeoChartScales(definition, args) {
10719
10741
  const format = axisFormats?.y || axisFormats?.y1;
10720
10742
  return {
10721
10743
  projection: {
10722
- projection: getGeoChartProjection(region?.defaultProjection || "mercator"),
10744
+ projection: region?.defaultProjection || "mercator",
10723
10745
  axis: "x"
10724
10746
  },
10725
10747
  color: {
@@ -10771,10 +10793,6 @@ function getFunnelChartScales(definition, args) {
10771
10793
  }
10772
10794
  };
10773
10795
  }
10774
- function getGeoChartProjection(projection) {
10775
- if (globalThis.ChartGeo && projection === "conicConformal") return globalThis.ChartGeo.geoConicConformal().rotate([100, 0]);
10776
- return projection;
10777
- }
10778
10796
  function getChartAxisTitleRuntime(design) {
10779
10797
  if (design?.title?.text) {
10780
10798
  const { text, color, align, italic, bold } = design.title;
@@ -11735,6 +11753,10 @@ chartJsExtensionRegistry.add("chartBackgroundPlugin", {
11735
11753
  register: (Chart) => Chart.register(chartBackgroundPlugin),
11736
11754
  unregister: (Chart) => Chart.unregister(chartBackgroundPlugin)
11737
11755
  });
11756
+ chartJsExtensionRegistry.add("geoProjectionPlugin", {
11757
+ register: (Chart) => Chart.register(geoProjectionPlugin),
11758
+ unregister: (Chart) => Chart.unregister(geoProjectionPlugin)
11759
+ });
11738
11760
  var ChartJsComponent = class extends Component {
11739
11761
  static template = "o-spreadsheet-ChartJsComponent";
11740
11762
  props = (0, _odoo_owl.useProps)({
@@ -15584,7 +15606,7 @@ var FigureComponent = class extends Component {
15584
15606
  figures.push({
15585
15607
  sheetId,
15586
15608
  figureId,
15587
- ...this.postionInBoundary(this.env.model.getters.getFigureUI(sheetId, figure), ev.key, ev.shiftKey)
15609
+ ...this.positionInBoundary(sheetId, this.env.model.getters.getFigureUI(sheetId, figure), ev.key, ev.shiftKey)
15588
15610
  });
15589
15611
  }
15590
15612
  this.env.model.dispatch("MOVE_FIGURES", { figures });
@@ -15604,21 +15626,23 @@ var FigureComponent = class extends Component {
15604
15626
  break;
15605
15627
  }
15606
15628
  }
15607
- postionInBoundary(position, key, shift) {
15608
- const sheetId = this.env.model.getters.getActiveSheetId();
15629
+ positionInBoundary(sheetId, figure, key, shift) {
15609
15630
  const shiftAmount = shift ? 1 : 5;
15610
- let { col, row, offset } = position;
15631
+ let { col, row, offset } = figure;
15611
15632
  offset = { ...offset };
15633
+ const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
15612
15634
  switch (key) {
15613
15635
  case "ArrowUp":
15614
15636
  if (offset.y < shiftAmount) {
15615
15637
  row--;
15638
+ while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
15616
15639
  offset.y = this.env.model.getters.getRowSize(sheetId, row) - shiftAmount + offset.y;
15617
15640
  } else offset.y -= shiftAmount;
15618
15641
  break;
15619
15642
  case "ArrowLeft":
15620
15643
  if (offset.x < shiftAmount) {
15621
15644
  col--;
15645
+ while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
15622
15646
  offset.x = this.env.model.getters.getColSize(sheetId, col) - shiftAmount + offset.x;
15623
15647
  } else offset.x -= shiftAmount;
15624
15648
  break;
@@ -15626,6 +15650,7 @@ var FigureComponent = class extends Component {
15626
15650
  const rowSize = this.env.model.getters.getRowSize(sheetId, row);
15627
15651
  if (offset.y + shiftAmount >= rowSize) {
15628
15652
  row++;
15653
+ while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
15629
15654
  offset.y = offset.y + shiftAmount - rowSize;
15630
15655
  } else offset.y += shiftAmount;
15631
15656
  break;
@@ -15633,9 +15658,24 @@ var FigureComponent = class extends Component {
15633
15658
  const colSize = this.env.model.getters.getColSize(sheetId, col);
15634
15659
  if (offset.x + shiftAmount >= colSize) {
15635
15660
  col++;
15661
+ while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
15636
15662
  offset.x = offset.x + shiftAmount - colSize;
15637
15663
  } else offset.x += shiftAmount;
15638
15664
  }
15665
+ if (col < 0) {
15666
+ col = 0;
15667
+ offset.x = 0;
15668
+ } else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
15669
+ col = maxAnchor.col;
15670
+ offset.x = maxAnchor.offset.x;
15671
+ }
15672
+ if (row < 0) {
15673
+ row = 0;
15674
+ offset.y = 0;
15675
+ } else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
15676
+ row = maxAnchor.row;
15677
+ offset.y = maxAnchor.offset.y;
15678
+ }
15639
15679
  return {
15640
15680
  col,
15641
15681
  row,
@@ -46021,7 +46061,13 @@ var CellComposerStore = class extends AbstractComposerStore {
46021
46061
  const cell = this.getters.getEvaluatedCell(position);
46022
46062
  if (cell.link && !isFormula(content)) content = markdownLink(content, cell.link.url);
46023
46063
  const currentFormat = this.getters.getCell(position)?.format;
46024
- const afterFormat = currentFormat === "@" || currentFormat && isDateTimeFormat(currentFormat) ? void 0 : detectDateFormat(content, this.getters.getLocale());
46064
+ const isCurrentFormatDate = currentFormat && isDateTimeFormat(currentFormat);
46065
+ const contentDateFormat = detectDateFormat(content, this.getters.getLocale());
46066
+ let afterFormat;
46067
+ if (currentFormat !== "@") {
46068
+ if (contentDateFormat && !isCurrentFormatDate) afterFormat = contentDateFormat;
46069
+ else if (isCurrentFormatDate && isNumber(content, this.getters.getLocale())) afterFormat = "";
46070
+ }
46025
46071
  this.addHeadersForSpreadingFormula(content);
46026
46072
  result = this.model.dispatch("UPDATE_CELL", {
46027
46073
  ...this.currentEditedCell,
@@ -51107,7 +51153,8 @@ var Squisher = class {
51107
51153
  * The result of this method is:
51108
51154
  * - if the cell is not a formula, returns the content as is and resets the base formula
51109
51155
  * - if the cell is a formula:
51110
- * - if there is no previous formula, or the normalized formula is different from the previous one, resets the base formula to this one and returns the full formula string
51156
+ * - if there is no previous formula, or the normalized formula is different from the previous one or it contains blacklisted functions (see NonSquishableFunctionRegistry),
51157
+ * resets the base formula to this one and returns the full formula string
51111
51158
  * - else, compares the literal values and range dependencies to the previous formula, and for each parameter:
51112
51159
  * - for numbers: returns a relative change (+N or -N) if possible, else the full number or "=" if unchanged
51113
51160
  * - for strings: returns the full string if changed, else "="
@@ -51115,6 +51162,10 @@ var Squisher = class {
51115
51162
  * */
51116
51163
  squish(cell, forSheetId) {
51117
51164
  if (cell.isFormula) {
51165
+ if (NonSquishableFunctionRegistry.getAll().some((functionName) => cell.compiledFormula.usesSymbol(functionName))) {
51166
+ this.resetBaseFormula();
51167
+ return cell.compiledFormula.toFormulaString(this.getters, this.rangeToStringOptions);
51168
+ }
51118
51169
  let numbers = [];
51119
51170
  let strings = [];
51120
51171
  let references = [];
@@ -62559,7 +62610,7 @@ var Session = class extends EventBus {
62559
62610
  }
62560
62611
  message = {
62561
62612
  ...message,
62562
- commands: this.commandSquisher.squish(revision.commands)
62613
+ commands: revision.commands
62563
62614
  };
62564
62615
  }
62565
62616
  if (this.isReplayingInitialRevisions) throw new Error(`Trying to send a new revision while replaying initial revision. This can lead to endless dispatches every time the spreadsheet is open.
@@ -67876,6 +67927,10 @@ function inverseCreateFigure(cmd) {
67876
67927
  }
67877
67928
  function inverseCreateChart(cmd) {
67878
67929
  return [{
67930
+ type: "DELETE_CHART",
67931
+ chartId: cmd.chartId,
67932
+ sheetId: cmd.sheetId
67933
+ }, {
67879
67934
  type: "DELETE_FIGURE",
67880
67935
  figureId: cmd.figureId,
67881
67936
  sheetId: cmd.sheetId
@@ -87565,7 +87620,8 @@ const registries = {
87565
87620
  migrationStepRegistry,
87566
87621
  chartJsExtensionRegistry,
87567
87622
  onIterationEndEvaluationRegistry,
87568
- specificRangeTransformRegistry
87623
+ specificRangeTransformRegistry,
87624
+ NonSquishableFunctionRegistry
87569
87625
  };
87570
87626
  const helpers = {
87571
87627
  arg,
@@ -87712,7 +87768,8 @@ const components = {
87712
87768
  FullScreenFigure,
87713
87769
  NumberInput,
87714
87770
  TopBar,
87715
- Composer
87771
+ Composer,
87772
+ CarouselFigure
87716
87773
  };
87717
87774
  const hooks = {
87718
87775
  useDragAndDropListItems,
@@ -87866,6 +87923,6 @@ exports.stores = stores;
87866
87923
  exports.tokenColors = tokenColors;
87867
87924
  exports.tokenize = tokenize;
87868
87925
 
87869
- __info__.version = "19.4.5";
87870
- __info__.date = "2026-07-30T06:55:39.923Z";
87871
- __info__.hash = "9308e17";
87926
+ __info__.version = "19.4.7";
87927
+ __info__.date = "2026-08-12T09:16:40.949Z";
87928
+ __info__.hash = "65642fe";
@@ -2,9 +2,9 @@
2
2
  /*
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.4.5
6
- * @date 2026-07-30T06:55:41.389Z
7
- * @hash 9308e17
5
+ * @version 19.4.7
6
+ * @date 2026-08-12T09:16:42.630Z
7
+ * @hash 65642fe
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f9fafb, #1b1d26);
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 19.4.5
6
- * @date 2026-07-30T06:55:39.923Z
7
- * @hash 9308e17
5
+ * @version 19.4.7
6
+ * @date 2026-08-12T09:16:40.949Z
7
+ * @hash 65642fe
8
8
  */
9
9
 
10
10
  import * as owl from "@odoo/owl";
@@ -5957,6 +5957,9 @@ var FunctionRegistry = class extends Registry {
5957
5957
  }
5958
5958
  };
5959
5959
  const functionRegistry = new FunctionRegistry();
5960
+ /** Formulas using one of these functions are never squished: they are always exported
5961
+ * as a full formula string, and they don't become the base formula of the next cells. */
5962
+ const NonSquishableFunctionRegistry = new Registry();
5960
5963
 
5961
5964
  //#endregion
5962
5965
  //#region src/helpers/references.ts
@@ -8915,6 +8918,25 @@ const funnelTooltipPositioner = function(elements) {
8915
8918
  };
8916
8919
  };
8917
8920
 
8921
+ //#endregion
8922
+ //#region src/components/figures/chart/chartJs/chartjs_geo_projection_plugin.ts
8923
+ /**
8924
+ * ChartJS plugin to apply custom changes to a d3 projection.
8925
+ *
8926
+ * We pass the projection as a string instead of a customized d3 object so
8927
+ * Chart.js creates a fresh projection instance. Custom changes (e.g. rotation)
8928
+ * are then applied in `beforeUpdate`.
8929
+ *
8930
+ * This is important because Chart.js mutates the projection instance at runtime,
8931
+ * and a customize d3 projection object would not be copied during deepCopy.
8932
+ */
8933
+ const geoProjectionPlugin = {
8934
+ id: "geoProjection",
8935
+ beforeUpdate(chart) {
8936
+ if (chart.options?.scales?.projection?.projection === "conicConformal") chart.scales?.projection?.projection?.rotate([100, 0]);
8937
+ }
8938
+ };
8939
+
8918
8940
  //#endregion
8919
8941
  //#region src/components/figures/chart/chartJs/chartjs_minor_grid_plugin.ts
8920
8942
  const chartMinorGridPlugin = {
@@ -10718,7 +10740,7 @@ function getGeoChartScales(definition, args) {
10718
10740
  const format = axisFormats?.y || axisFormats?.y1;
10719
10741
  return {
10720
10742
  projection: {
10721
- projection: getGeoChartProjection(region?.defaultProjection || "mercator"),
10743
+ projection: region?.defaultProjection || "mercator",
10722
10744
  axis: "x"
10723
10745
  },
10724
10746
  color: {
@@ -10770,10 +10792,6 @@ function getFunnelChartScales(definition, args) {
10770
10792
  }
10771
10793
  };
10772
10794
  }
10773
- function getGeoChartProjection(projection) {
10774
- if (globalThis.ChartGeo && projection === "conicConformal") return globalThis.ChartGeo.geoConicConformal().rotate([100, 0]);
10775
- return projection;
10776
- }
10777
10795
  function getChartAxisTitleRuntime(design) {
10778
10796
  if (design?.title?.text) {
10779
10797
  const { text, color, align, italic, bold } = design.title;
@@ -11734,6 +11752,10 @@ chartJsExtensionRegistry.add("chartBackgroundPlugin", {
11734
11752
  register: (Chart) => Chart.register(chartBackgroundPlugin),
11735
11753
  unregister: (Chart) => Chart.unregister(chartBackgroundPlugin)
11736
11754
  });
11755
+ chartJsExtensionRegistry.add("geoProjectionPlugin", {
11756
+ register: (Chart) => Chart.register(geoProjectionPlugin),
11757
+ unregister: (Chart) => Chart.unregister(geoProjectionPlugin)
11758
+ });
11737
11759
  var ChartJsComponent = class extends Component {
11738
11760
  static template = "o-spreadsheet-ChartJsComponent";
11739
11761
  props = useProps({
@@ -15583,7 +15605,7 @@ var FigureComponent = class extends Component {
15583
15605
  figures.push({
15584
15606
  sheetId,
15585
15607
  figureId,
15586
- ...this.postionInBoundary(this.env.model.getters.getFigureUI(sheetId, figure), ev.key, ev.shiftKey)
15608
+ ...this.positionInBoundary(sheetId, this.env.model.getters.getFigureUI(sheetId, figure), ev.key, ev.shiftKey)
15587
15609
  });
15588
15610
  }
15589
15611
  this.env.model.dispatch("MOVE_FIGURES", { figures });
@@ -15603,21 +15625,23 @@ var FigureComponent = class extends Component {
15603
15625
  break;
15604
15626
  }
15605
15627
  }
15606
- postionInBoundary(position, key, shift) {
15607
- const sheetId = this.env.model.getters.getActiveSheetId();
15628
+ positionInBoundary(sheetId, figure, key, shift) {
15608
15629
  const shiftAmount = shift ? 1 : 5;
15609
- let { col, row, offset } = position;
15630
+ let { col, row, offset } = figure;
15610
15631
  offset = { ...offset };
15632
+ const maxAnchor = this.env.model.getters.getMaxAnchorOffset(sheetId, figure.height, figure.width);
15611
15633
  switch (key) {
15612
15634
  case "ArrowUp":
15613
15635
  if (offset.y < shiftAmount) {
15614
15636
  row--;
15637
+ while (row > 0 && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row--;
15615
15638
  offset.y = this.env.model.getters.getRowSize(sheetId, row) - shiftAmount + offset.y;
15616
15639
  } else offset.y -= shiftAmount;
15617
15640
  break;
15618
15641
  case "ArrowLeft":
15619
15642
  if (offset.x < shiftAmount) {
15620
15643
  col--;
15644
+ while (col > 0 && this.env.model.getters.isColHiddenByUser(sheetId, col)) col--;
15621
15645
  offset.x = this.env.model.getters.getColSize(sheetId, col) - shiftAmount + offset.x;
15622
15646
  } else offset.x -= shiftAmount;
15623
15647
  break;
@@ -15625,6 +15649,7 @@ var FigureComponent = class extends Component {
15625
15649
  const rowSize = this.env.model.getters.getRowSize(sheetId, row);
15626
15650
  if (offset.y + shiftAmount >= rowSize) {
15627
15651
  row++;
15652
+ while (row <= maxAnchor.row && this.env.model.getters.isRowHiddenByUser(sheetId, row)) row++;
15628
15653
  offset.y = offset.y + shiftAmount - rowSize;
15629
15654
  } else offset.y += shiftAmount;
15630
15655
  break;
@@ -15632,9 +15657,24 @@ var FigureComponent = class extends Component {
15632
15657
  const colSize = this.env.model.getters.getColSize(sheetId, col);
15633
15658
  if (offset.x + shiftAmount >= colSize) {
15634
15659
  col++;
15660
+ while (col <= maxAnchor.col && this.env.model.getters.isColHiddenByUser(sheetId, col)) col++;
15635
15661
  offset.x = offset.x + shiftAmount - colSize;
15636
15662
  } else offset.x += shiftAmount;
15637
15663
  }
15664
+ if (col < 0) {
15665
+ col = 0;
15666
+ offset.x = 0;
15667
+ } else if (col > maxAnchor.col || col === maxAnchor.col && offset.x > maxAnchor.offset.x) {
15668
+ col = maxAnchor.col;
15669
+ offset.x = maxAnchor.offset.x;
15670
+ }
15671
+ if (row < 0) {
15672
+ row = 0;
15673
+ offset.y = 0;
15674
+ } else if (row > maxAnchor.row || row === maxAnchor.row && offset.y > maxAnchor.offset.y) {
15675
+ row = maxAnchor.row;
15676
+ offset.y = maxAnchor.offset.y;
15677
+ }
15638
15678
  return {
15639
15679
  col,
15640
15680
  row,
@@ -46020,7 +46060,13 @@ var CellComposerStore = class extends AbstractComposerStore {
46020
46060
  const cell = this.getters.getEvaluatedCell(position);
46021
46061
  if (cell.link && !isFormula(content)) content = markdownLink(content, cell.link.url);
46022
46062
  const currentFormat = this.getters.getCell(position)?.format;
46023
- const afterFormat = currentFormat === "@" || currentFormat && isDateTimeFormat(currentFormat) ? void 0 : detectDateFormat(content, this.getters.getLocale());
46063
+ const isCurrentFormatDate = currentFormat && isDateTimeFormat(currentFormat);
46064
+ const contentDateFormat = detectDateFormat(content, this.getters.getLocale());
46065
+ let afterFormat;
46066
+ if (currentFormat !== "@") {
46067
+ if (contentDateFormat && !isCurrentFormatDate) afterFormat = contentDateFormat;
46068
+ else if (isCurrentFormatDate && isNumber(content, this.getters.getLocale())) afterFormat = "";
46069
+ }
46024
46070
  this.addHeadersForSpreadingFormula(content);
46025
46071
  result = this.model.dispatch("UPDATE_CELL", {
46026
46072
  ...this.currentEditedCell,
@@ -51106,7 +51152,8 @@ var Squisher = class {
51106
51152
  * The result of this method is:
51107
51153
  * - if the cell is not a formula, returns the content as is and resets the base formula
51108
51154
  * - if the cell is a formula:
51109
- * - if there is no previous formula, or the normalized formula is different from the previous one, resets the base formula to this one and returns the full formula string
51155
+ * - if there is no previous formula, or the normalized formula is different from the previous one or it contains blacklisted functions (see NonSquishableFunctionRegistry),
51156
+ * resets the base formula to this one and returns the full formula string
51110
51157
  * - else, compares the literal values and range dependencies to the previous formula, and for each parameter:
51111
51158
  * - for numbers: returns a relative change (+N or -N) if possible, else the full number or "=" if unchanged
51112
51159
  * - for strings: returns the full string if changed, else "="
@@ -51114,6 +51161,10 @@ var Squisher = class {
51114
51161
  * */
51115
51162
  squish(cell, forSheetId) {
51116
51163
  if (cell.isFormula) {
51164
+ if (NonSquishableFunctionRegistry.getAll().some((functionName) => cell.compiledFormula.usesSymbol(functionName))) {
51165
+ this.resetBaseFormula();
51166
+ return cell.compiledFormula.toFormulaString(this.getters, this.rangeToStringOptions);
51167
+ }
51117
51168
  let numbers = [];
51118
51169
  let strings = [];
51119
51170
  let references = [];
@@ -62374,7 +62425,7 @@ var Session = class extends EventBus {
62374
62425
  }
62375
62426
  message = {
62376
62427
  ...message,
62377
- commands: this.commandSquisher.squish(revision.commands)
62428
+ commands: revision.commands
62378
62429
  };
62379
62430
  }
62380
62431
  if (this.isReplayingInitialRevisions) throw new Error(`Trying to send a new revision while replaying initial revision. This can lead to endless dispatches every time the spreadsheet is open.
@@ -67691,6 +67742,10 @@ function inverseCreateFigure(cmd) {
67691
67742
  }
67692
67743
  function inverseCreateChart(cmd) {
67693
67744
  return [{
67745
+ type: "DELETE_CHART",
67746
+ chartId: cmd.chartId,
67747
+ sheetId: cmd.sheetId
67748
+ }, {
67694
67749
  type: "DELETE_FIGURE",
67695
67750
  figureId: cmd.figureId,
67696
67751
  sheetId: cmd.sheetId
@@ -87380,7 +87435,8 @@ const registries = {
87380
87435
  migrationStepRegistry,
87381
87436
  chartJsExtensionRegistry,
87382
87437
  onIterationEndEvaluationRegistry,
87383
- specificRangeTransformRegistry
87438
+ specificRangeTransformRegistry,
87439
+ NonSquishableFunctionRegistry
87384
87440
  };
87385
87441
  const helpers = {
87386
87442
  arg,
@@ -87527,7 +87583,8 @@ const components = {
87527
87583
  FullScreenFigure,
87528
87584
  NumberInput,
87529
87585
  TopBar,
87530
- Composer
87586
+ Composer,
87587
+ CarouselFigure
87531
87588
  };
87532
87589
  const hooks = {
87533
87590
  useDragAndDropListItems,
@@ -87587,6 +87644,6 @@ const chartHelpers = {
87587
87644
  //#endregion
87588
87645
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, BadExpressionError, CHART_TYPES, CellErrorType, CellValueType, CircularDependencyError, ClientDisconnectedError, ClipboardMIMEType, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DEFAULT_LOCALE_DIGIT_GROUPING, DIRECTION, DispatchResult, DivisionByZeroError, EvaluationError, InvalidReferenceError, LocalTransportService, Model, NEXT_VALUE, NotAvailableError, NumberTooLargeError, OrderedLayers, PREVIOUS_VALUE, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, SplillBlockedError, Spreadsheet, SpreadsheetPivotTable, UIPlugin, UnknownFunctionError, __info__, addFunction, addRenderingLayer, astToFormula, availableConditionalFormatOperators, availableDataValidationOperators, availableFiltersOperators, borderPositions, borderStyles, canExecuteInReadonly, categories, chartHelpers, compatibility, components, composerFocusTypes, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, errorTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidSubtotalFormulasCommands, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, schemeToColorScale, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
87589
87646
 
87590
- __info__.version = "19.4.5";
87591
- __info__.date = "2026-07-30T06:55:39.923Z";
87592
- __info__.hash = "9308e17";
87647
+ __info__.version = "19.4.7";
87648
+ __info__.date = "2026-08-12T09:16:40.949Z";
87649
+ __info__.hash = "65642fe";