@odoo/o-spreadsheet 19.2.26 → 19.2.28

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.2.26
6
- * @date 2026-08-21T15:30:16.234Z
7
- * @hash b9d68c1
5
+ * @version 19.2.28
6
+ * @date 2026-09-04T07:33:57.749Z
7
+ * @hash 102af11
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f9fafb, #1b1d26);
@@ -21,7 +21,7 @@
21
21
  --os-black: light-dark(#000000, #ffffff);
22
22
  --os-white-bg: light-dark(#ffffff, var(--os-gray-200));
23
23
 
24
- --os-default-font: "Roboto", "Arial";
24
+ --os-default-font: "Roboto", "Arial", "Liberation Sans";
25
25
  --os-default-font-size: 10px;
26
26
  --os-link-color: light-dark(#017e84, #02c7b5);
27
27
  --os-link-hover-color: light-dark(#01585c, #4ed8cb);
@@ -1383,6 +1383,12 @@
1383
1383
  background-color: var(--os-action-color);
1384
1384
  border-color: var(--os-action-color) !important;
1385
1385
  }
1386
+
1387
+ &:focus {
1388
+ outline: none;
1389
+ box-shadow: 0 0 0 0.25rem rgba(113, 75, 103, 0.25);
1390
+ border-color: var(--os-action-color);
1391
+ }
1386
1392
  }
1387
1393
  }
1388
1394
  }
@@ -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.2.26
6
- * @date 2026-08-21T15:30:14.701Z
7
- * @hash b9d68c1
5
+ * @version 19.2.28
6
+ * @date 2026-09-04T07:33:56.173Z
7
+ * @hash 102af11
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, whenReady, xml } from "@odoo/owl";
@@ -8339,16 +8339,16 @@ const chartShowValuesPlugin = {
8339
8339
  drawLineOrBarOrRadarChartValues(chart, options, ctx);
8340
8340
  break;
8341
8341
  case "bar":
8342
- options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
8342
+ options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true }) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
8343
8343
  break;
8344
8344
  case "pyramid":
8345
- drawHorizontalBarChartValues(chart, options, ctx);
8345
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true });
8346
8346
  break;
8347
8347
  case "calendar":
8348
8348
  drawBarChartValues(chart, options, ctx);
8349
8349
  break;
8350
8350
  case "funnel":
8351
- drawHorizontalBarChartValues(chart, options, ctx);
8351
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: false });
8352
8352
  break;
8353
8353
  }
8354
8354
  ctx.restore();
@@ -8418,7 +8418,7 @@ function drawBarChartValues(chart, options, ctx) {
8418
8418
  }
8419
8419
  }
8420
8420
  }
8421
- function drawHorizontalBarChartValues(chart, options, ctx) {
8421
+ function drawHorizontalBarChartValues(chart, options, ctx, args) {
8422
8422
  const textsPositions = {};
8423
8423
  for (const dataset of chart._metasets) {
8424
8424
  if (isTrendLineAxis(dataset.xAxisID)) return;
@@ -8433,7 +8433,7 @@ function drawHorizontalBarChartValues(chart, options, ctx) {
8433
8433
  const distanceFromAxisOrigin = Math.abs(point.x - xZeroLine);
8434
8434
  const PADDING = 3;
8435
8435
  let xPosition;
8436
- if (distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
8436
+ if (args.offsetFromAxisOrigin && distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
8437
8437
  else xPosition = value < 0 ? point.x + point.width / 2 : point.x - point.width / 2;
8438
8438
  if (!textsPositions[yPosition]) textsPositions[yPosition] = [];
8439
8439
  for (const otherPosition of textsPositions[yPosition]) if (Math.abs(otherPosition - xPosition) < textWidth) xPosition = value < 0 ? otherPosition - textWidth - PADDING : otherPosition + textWidth + PADDING;
@@ -9172,6 +9172,7 @@ function getRadarChartDatasets(definition, args) {
9172
9172
  hidden,
9173
9173
  borderColor,
9174
9174
  backgroundColor: borderColor,
9175
+ pointBackgroundColor: borderColor,
9175
9176
  pointRadius: definition.hideDataMarkers ? 0 : 3
9176
9177
  };
9177
9178
  if (fill) {
@@ -32334,9 +32335,10 @@ var Composer = class extends Component {
32334
32335
  compositionActive = false;
32335
32336
  spreadsheetRect = useSpreadsheetRect();
32336
32337
  lastHoveredTokenIndex = void 0;
32337
- debouncedHover = debounce((tokenIndex, hoveredRect) => {
32338
+ debouncedHover = debounce((tokenIndex, composerContent, hoveredRect) => {
32338
32339
  const selection = this.contentHelper.getCurrentSelection();
32339
- if (selection.start !== selection.end) return;
32340
+ const currentContent = this.props.composerStore.currentContent;
32341
+ if (selection.start !== selection.end || currentContent !== composerContent) return;
32340
32342
  const currentHoveredContext = this.props.composerStore.hoveredTokens;
32341
32343
  this.props.composerStore.hoverToken(tokenIndex);
32342
32344
  if (!deepEquals(currentHoveredContext, this.props.composerStore.hoveredTokens)) this.composerState.hoveredRect = hoveredRect;
@@ -32654,7 +32656,8 @@ var Composer = class extends Component {
32654
32656
  onTokenHover(tokenIndex, hoveredRect) {
32655
32657
  if (this.lastHoveredTokenIndex !== tokenIndex) {
32656
32658
  this.lastHoveredTokenIndex = tokenIndex;
32657
- this.debouncedHover(tokenIndex, hoveredRect);
32659
+ const composerContent = this.props.composerStore.currentContent;
32660
+ this.debouncedHover(tokenIndex, composerContent, hoveredRect);
32658
32661
  }
32659
32662
  }
32660
32663
  /**
@@ -46227,7 +46230,13 @@ var PivotSpreadsheetSidePanel = class extends Component {
46227
46230
  }
46228
46231
  onSelectionChanged(ranges) {
46229
46232
  this.state.rangeHasChanged = true;
46230
- this.state.range = ranges[0];
46233
+ if (ranges.length === 0) {
46234
+ this.state.range = void 0;
46235
+ return;
46236
+ }
46237
+ const sheetId = this.env.model.getters.getActiveSheetId();
46238
+ const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
46239
+ this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
46231
46240
  }
46232
46241
  onSelectionConfirmed() {
46233
46242
  if (this.state.range) {
@@ -55772,6 +55781,7 @@ var CarouselPlugin = class extends CorePlugin {
55772
55781
  return "Success";
55773
55782
  case "UPDATE_CAROUSEL":
55774
55783
  if (!this.carousels[cmd.sheetId]?.[cmd.figureId]) return "InvalidFigureId";
55784
+ for (const item of cmd.definition.items) if (item.type === "chart" && !this.getters.getChart(item.chartId)) return "ChartDoesNotExist";
55775
55785
  return "Success";
55776
55786
  }
55777
55787
  return "Success";
@@ -60984,14 +60994,16 @@ var FormulaDependencyGraph = class {
60984
60994
  */
60985
60995
  getCellsDependingOn(ranges, visited = new RangeSet()) {
60986
60996
  visited = visited.copy();
60997
+ let initialRangesToRemove = visited.copy();
60987
60998
  const queue = Array.from(ranges).reverse();
60988
60999
  while (queue.length > 0) {
60989
61000
  const range = queue.pop();
60990
61001
  visited.add(range);
60991
61002
  const impactedRanges = this.rTree.search(range);
60992
61003
  queue.push(...impactedRanges.difference(visited));
61004
+ initialRangesToRemove = initialRangesToRemove.difference(impactedRanges);
60993
61005
  }
60994
- for (const range of ranges) visited.delete(range);
61006
+ for (const range of initialRangesToRemove) visited.delete(range);
60995
61007
  return visited;
60996
61008
  }
60997
61009
  };
@@ -81824,6 +81836,6 @@ const chartHelpers = {
81824
81836
  //#endregion
81825
81837
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, ClientDisconnectedError, CommandResult, CompiledFormula, CorePlugin, CoreViewPlugin, DEFAULT_LOCALE, DEFAULT_LOCALES, DispatchResult, EvaluationError, LocalTransportService, Model, PivotRuntimeDefinition, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, SpreadsheetPivotTable, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, canExecuteInReadonly, categories, chartHelpers, components, constants, convertAstNodes, coreTypes, createAutocompleteArgumentsProvider, findCellInNewZone, functionCache, getCaretDownSvg, getCaretUpSvg, helpers, hooks, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isSheetDependent, iterateAstNodes, links, load, lockedSheetAllowedCommands, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
81826
81838
 
81827
- __info__.version = "19.2.26";
81828
- __info__.date = "2026-08-21T15:30:14.701Z";
81829
- __info__.hash = "b9d68c1";
81839
+ __info__.version = "19.2.28";
81840
+ __info__.date = "2026-09-04T07:33:56.173Z";
81841
+ __info__.hash = "102af11";
@@ -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.2.26
6
- * @date 2026-08-21T15:30:14.701Z
7
- * @hash b9d68c1
5
+ * @version 19.2.28
6
+ * @date 2026-09-04T07:33:56.173Z
7
+ * @hash 102af11
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -8341,16 +8341,16 @@ stores.inject(MyMetaStore, storeInstance);
8341
8341
  drawLineOrBarOrRadarChartValues(chart, options, ctx);
8342
8342
  break;
8343
8343
  case "bar":
8344
- options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
8344
+ options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true }) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
8345
8345
  break;
8346
8346
  case "pyramid":
8347
- drawHorizontalBarChartValues(chart, options, ctx);
8347
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true });
8348
8348
  break;
8349
8349
  case "calendar":
8350
8350
  drawBarChartValues(chart, options, ctx);
8351
8351
  break;
8352
8352
  case "funnel":
8353
- drawHorizontalBarChartValues(chart, options, ctx);
8353
+ drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: false });
8354
8354
  break;
8355
8355
  }
8356
8356
  ctx.restore();
@@ -8420,7 +8420,7 @@ stores.inject(MyMetaStore, storeInstance);
8420
8420
  }
8421
8421
  }
8422
8422
  }
8423
- function drawHorizontalBarChartValues(chart, options, ctx) {
8423
+ function drawHorizontalBarChartValues(chart, options, ctx, args) {
8424
8424
  const textsPositions = {};
8425
8425
  for (const dataset of chart._metasets) {
8426
8426
  if (isTrendLineAxis(dataset.xAxisID)) return;
@@ -8435,7 +8435,7 @@ stores.inject(MyMetaStore, storeInstance);
8435
8435
  const distanceFromAxisOrigin = Math.abs(point.x - xZeroLine);
8436
8436
  const PADDING = 3;
8437
8437
  let xPosition;
8438
- if (distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
8438
+ if (args.offsetFromAxisOrigin && distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
8439
8439
  else xPosition = value < 0 ? point.x + point.width / 2 : point.x - point.width / 2;
8440
8440
  if (!textsPositions[yPosition]) textsPositions[yPosition] = [];
8441
8441
  for (const otherPosition of textsPositions[yPosition]) if (Math.abs(otherPosition - xPosition) < textWidth) xPosition = value < 0 ? otherPosition - textWidth - PADDING : otherPosition + textWidth + PADDING;
@@ -9174,6 +9174,7 @@ stores.inject(MyMetaStore, storeInstance);
9174
9174
  hidden,
9175
9175
  borderColor,
9176
9176
  backgroundColor: borderColor,
9177
+ pointBackgroundColor: borderColor,
9177
9178
  pointRadius: definition.hideDataMarkers ? 0 : 3
9178
9179
  };
9179
9180
  if (fill) {
@@ -32336,9 +32337,10 @@ stores.inject(MyMetaStore, storeInstance);
32336
32337
  compositionActive = false;
32337
32338
  spreadsheetRect = useSpreadsheetRect();
32338
32339
  lastHoveredTokenIndex = void 0;
32339
- debouncedHover = debounce((tokenIndex, hoveredRect) => {
32340
+ debouncedHover = debounce((tokenIndex, composerContent, hoveredRect) => {
32340
32341
  const selection = this.contentHelper.getCurrentSelection();
32341
- if (selection.start !== selection.end) return;
32342
+ const currentContent = this.props.composerStore.currentContent;
32343
+ if (selection.start !== selection.end || currentContent !== composerContent) return;
32342
32344
  const currentHoveredContext = this.props.composerStore.hoveredTokens;
32343
32345
  this.props.composerStore.hoverToken(tokenIndex);
32344
32346
  if (!deepEquals(currentHoveredContext, this.props.composerStore.hoveredTokens)) this.composerState.hoveredRect = hoveredRect;
@@ -32656,7 +32658,8 @@ stores.inject(MyMetaStore, storeInstance);
32656
32658
  onTokenHover(tokenIndex, hoveredRect) {
32657
32659
  if (this.lastHoveredTokenIndex !== tokenIndex) {
32658
32660
  this.lastHoveredTokenIndex = tokenIndex;
32659
- this.debouncedHover(tokenIndex, hoveredRect);
32661
+ const composerContent = this.props.composerStore.currentContent;
32662
+ this.debouncedHover(tokenIndex, composerContent, hoveredRect);
32660
32663
  }
32661
32664
  }
32662
32665
  /**
@@ -46229,7 +46232,13 @@ stores.inject(MyMetaStore, storeInstance);
46229
46232
  }
46230
46233
  onSelectionChanged(ranges) {
46231
46234
  this.state.rangeHasChanged = true;
46232
- this.state.range = ranges[0];
46235
+ if (ranges.length === 0) {
46236
+ this.state.range = void 0;
46237
+ return;
46238
+ }
46239
+ const sheetId = this.env.model.getters.getActiveSheetId();
46240
+ const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
46241
+ this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
46233
46242
  }
46234
46243
  onSelectionConfirmed() {
46235
46244
  if (this.state.range) {
@@ -55774,6 +55783,7 @@ stores.inject(MyMetaStore, storeInstance);
55774
55783
  return "Success";
55775
55784
  case "UPDATE_CAROUSEL":
55776
55785
  if (!this.carousels[cmd.sheetId]?.[cmd.figureId]) return "InvalidFigureId";
55786
+ for (const item of cmd.definition.items) if (item.type === "chart" && !this.getters.getChart(item.chartId)) return "ChartDoesNotExist";
55777
55787
  return "Success";
55778
55788
  }
55779
55789
  return "Success";
@@ -60986,14 +60996,16 @@ stores.inject(MyMetaStore, storeInstance);
60986
60996
  */
60987
60997
  getCellsDependingOn(ranges, visited = new RangeSet()) {
60988
60998
  visited = visited.copy();
60999
+ let initialRangesToRemove = visited.copy();
60989
61000
  const queue = Array.from(ranges).reverse();
60990
61001
  while (queue.length > 0) {
60991
61002
  const range = queue.pop();
60992
61003
  visited.add(range);
60993
61004
  const impactedRanges = this.rTree.search(range);
60994
61005
  queue.push(...impactedRanges.difference(visited));
61006
+ initialRangesToRemove = initialRangesToRemove.difference(impactedRanges);
60995
61007
  }
60996
- for (const range of ranges) visited.delete(range);
61008
+ for (const range of initialRangesToRemove) visited.delete(range);
60997
61009
  return visited;
60998
61010
  }
60999
61011
  };
@@ -81884,8 +81896,8 @@ exports.stores = stores;
81884
81896
  exports.tokenColors = tokenColors;
81885
81897
  exports.tokenize = tokenize;
81886
81898
 
81887
- __info__.version = "19.2.26";
81888
- __info__.date = "2026-08-21T15:30:14.701Z";
81889
- __info__.hash = "b9d68c1";
81899
+ __info__.version = "19.2.28";
81900
+ __info__.date = "2026-09-04T07:33:56.173Z";
81901
+ __info__.hash = "102af11";
81890
81902
 
81891
81903
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);