@odoo/o-spreadsheet 19.4.0 → 19.4.2

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.0
6
- * @date 2026-06-29T08:47:48.150Z
7
- * @hash b0b4c40
5
+ * @version 19.4.2
6
+ * @date 2026-07-13T06:26:39.071Z
7
+ * @hash c83d4aa
8
8
  */
9
9
 
10
10
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -21792,10 +21792,10 @@ function toNormalizedPivotValue(dimension, groupValue) {
21792
21792
  type: dimension.type
21793
21793
  }));
21794
21794
  if (groupValueString.toLowerCase() === "false") return false;
21795
- return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension.granularity);
21795
+ return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension);
21796
21796
  }
21797
- function normalizeDateTime(value, granularity) {
21798
- return pivotTimeAdapter(granularity ?? "month").normalizeFunctionValue(value);
21797
+ function normalizeDateTime(value, dimension) {
21798
+ return pivotTimeAdapter(dimension.granularity ?? "month").normalizeFunctionValue(value);
21799
21799
  }
21800
21800
  function toFunctionPivotValue(value, dimension) {
21801
21801
  if (value === null) return `"null"`;
@@ -28056,7 +28056,7 @@ function filterInvalidCalendarDataPoints(labels, datasets) {
28056
28056
  */
28057
28057
  function filterInvalidHierarchicalPoints(values, hierarchy) {
28058
28058
  const numberOfDataPoints = Math.max(values.length, ...hierarchy.map((dataset) => dataset.data?.length || 0));
28059
- const isEmpty = (value) => value === null || value === "";
28059
+ const isEmpty = (value) => value === void 0 || value === null || value === "";
28060
28060
  const dataPointsIndexes = range(0, numberOfDataPoints).filter((dataPointIndex) => {
28061
28061
  const groups = hierarchy.map((dataset) => dataset.data?.[dataPointIndex]);
28062
28062
  if (isEmpty(groups[0]?.value)) return false;
@@ -58904,13 +58904,13 @@ var EvaluationConditionalFormatPlugin = class extends CoreViewPlugin {
58904
58904
  const minValue = this.parsePoint(sheetId, range, rule.minimum, "min");
58905
58905
  const midValue = rule.midpoint ? this.parsePoint(sheetId, range, rule.midpoint) : null;
58906
58906
  const maxValue = this.parsePoint(sheetId, range, rule.maximum, "max");
58907
- if (minValue === null || maxValue === null || minValue >= maxValue || midValue && (minValue >= midValue || midValue >= maxValue)) return;
58907
+ if (minValue === null || maxValue === null || minValue >= maxValue || midValue !== null && (minValue >= midValue || midValue >= maxValue)) return;
58908
58908
  const zone = this.getters.getRangeFromSheetXC(sheetId, range).zone;
58909
58909
  const colorThresholds = [{
58910
58910
  value: minValue,
58911
58911
  color: rule.minimum.color
58912
58912
  }];
58913
- if (rule.midpoint && midValue) colorThresholds.push({
58913
+ if (rule.midpoint && midValue !== null) colorThresholds.push({
58914
58914
  value: midValue,
58915
58915
  color: rule.midpoint.color
58916
58916
  });
@@ -66369,7 +66369,9 @@ var GridSelectionPlugin = class extends UIPlugin {
66369
66369
  ctx.lineWidth = 1.5 * thinLineWidth;
66370
66370
  const isDarkMode = this.getters.isDarkMode();
66371
66371
  for (const zone of zones) {
66372
+ if (!viewports.isZoneVisibleInViewport(sheetId, zone)) continue;
66372
66373
  const { x, y, width, height } = viewports.getVisibleRect(sheetId, zone);
66374
+ const currentLineWidth = ctx.lineWidth;
66373
66375
  if (!isDarkMode) ctx.globalCompositeOperation = "multiply";
66374
66376
  if (height === 0 || width === 0) ctx.lineWidth = 3 * thinLineWidth;
66375
66377
  if (height === 0 && width === 0) {
@@ -66383,6 +66385,7 @@ var GridSelectionPlugin = class extends UIPlugin {
66383
66385
  ctx.globalCompositeOperation = "source-over";
66384
66386
  ctx.strokeRect(x, y, width, height);
66385
66387
  }
66388
+ ctx.lineWidth = currentLineWidth;
66386
66389
  }
66387
66390
  ctx.globalCompositeOperation = "source-over";
66388
66391
  const position = renderingContext.activePosition;
@@ -66529,6 +66532,9 @@ var InternalViewport = class {
66529
66532
  this.adjustViewportZoneX();
66530
66533
  this.adjustViewportZoneY();
66531
66534
  }
66535
+ isZoneVisible(zone) {
66536
+ return intersection(zone, this) !== void 0;
66537
+ }
66532
66538
  /**
66533
66539
  *
66534
66540
  * Computes the visible coordinates & dimensions of a given zone inside the viewport
@@ -66809,6 +66815,9 @@ var ViewportCollection = class {
66809
66815
  isVisibleInViewport({ sheetId, col, row }) {
66810
66816
  return this.getSubViewports(sheetId).some((pane) => pane.isVisible(col, row));
66811
66817
  }
66818
+ isZoneVisibleInViewport(sheetId, zone) {
66819
+ return this.getSubViewports(sheetId).some((pane) => pane.isZoneVisible(zone));
66820
+ }
66812
66821
  getScrollBarWidth() {
66813
66822
  return 15 / this.zoomLevel;
66814
66823
  }
@@ -69700,10 +69709,13 @@ var SpreadsheetDashboard = class extends Component {
69700
69709
  return this.env.model.getters.getColDimensions(sheetId, right).end;
69701
69710
  }
69702
69711
  get dashboardStyle() {
69703
- return cssPropertiesToCss({ zoom: `${this.env.model.getters.getViewportZoomLevel()}` });
69712
+ const style = { zoom: `${this.env.model.getters.getViewportZoomLevel()}` };
69713
+ if (this.env.model.getters.getActiveSheet().backgroundColor) style["background-color"] = "transparent";
69714
+ return cssPropertiesToCss(style);
69704
69715
  }
69705
69716
  get backgroundStyle() {
69706
- return cssPropertiesToCss({ "background-color": this.env.model.getters.getActiveSheet().backgroundColor || "var(--os-white-bg)" });
69717
+ const sheet = this.env.model.getters.getActiveSheet();
69718
+ return sheet.backgroundColor ? cssPropertiesToCss({ "background-color": sheet.backgroundColor }) : "";
69707
69719
  }
69708
69720
  };
69709
69721
 
@@ -70882,18 +70894,28 @@ var NamedRangeSelector = class extends Component {
70882
70894
  return;
70883
70895
  }
70884
70896
  const activeSheetId = this.env.model.getters.getActiveSheetId();
70885
- if (activeSheetId !== sheetId) this.env.model.dispatch("ACTIVATE_SHEET", {
70886
- sheetIdFrom: activeSheetId,
70887
- sheetIdTo: sheetId
70888
- });
70889
- this.env.model.selection.selectCell(zone.right, zone.bottom);
70897
+ if (activeSheetId !== sheetId) {
70898
+ if (!this.env.model.getters.getSheet(sheetId).isVisible) {
70899
+ this.env.notifyUser({
70900
+ text: _t("The sheet on which the range is defined is hidden."),
70901
+ type: "info",
70902
+ sticky: false
70903
+ });
70904
+ return;
70905
+ }
70906
+ this.env.model.dispatch("ACTIVATE_SHEET", {
70907
+ sheetIdFrom: activeSheetId,
70908
+ sheetIdTo: sheetId
70909
+ });
70910
+ }
70911
+ this.env.model.selection.selectCell(zone.right, zone.bottom, { allowsHiddenSelection: true });
70890
70912
  this.env.model.selection.selectZone({
70891
70913
  cell: {
70892
70914
  col: zone.left,
70893
70915
  row: zone.top
70894
70916
  },
70895
70917
  zone
70896
- });
70918
+ }, { allowsHiddenSelection: true });
70897
70919
  }
70898
70920
  get selectionKey() {
70899
70921
  return `${this.env.model.getters.getActiveSheetId()}-${zoneToXc(this.selectedZone)}`;
@@ -87742,6 +87764,6 @@ exports.stores = stores;
87742
87764
  exports.tokenColors = tokenColors;
87743
87765
  exports.tokenize = tokenize;
87744
87766
 
87745
- __info__.version = "19.4.0";
87746
- __info__.date = "2026-06-29T08:47:48.150Z";
87747
- __info__.hash = "b0b4c40";
87767
+ __info__.version = "19.4.2";
87768
+ __info__.date = "2026-07-13T06:26:39.071Z";
87769
+ __info__.hash = "c83d4aa";
@@ -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.0
6
- * @date 2026-06-29T08:47:50.021Z
7
- * @hash b0b4c40
5
+ * @version 19.4.2
6
+ * @date 2026-07-13T06:26:40.770Z
7
+ * @hash c83d4aa
8
8
  */
9
9
  :root {
10
10
  --os-gray-100: light-dark(#f9fafb, #1b1d26);
@@ -2864,10 +2864,6 @@
2864
2864
  position: absolute;
2865
2865
  cursor: pointer;
2866
2866
  }
2867
-
2868
- .o-grid.o-dashboard-grid {
2869
- background-color: transparent;
2870
- }
2871
2867
  }
2872
2868
 
2873
2869
  /* Originates from src/components/dashboard/clickable_cell_sort_icon/clickable_cell_sort_icon.css */
@@ -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.0
6
- * @date 2026-06-29T08:47:48.150Z
7
- * @hash b0b4c40
5
+ * @version 19.4.2
6
+ * @date 2026-07-13T06:26:39.071Z
7
+ * @hash c83d4aa
8
8
  */
9
9
 
10
10
  import * as owl from "@odoo/owl";
@@ -21791,10 +21791,10 @@ function toNormalizedPivotValue(dimension, groupValue) {
21791
21791
  type: dimension.type
21792
21792
  }));
21793
21793
  if (groupValueString.toLowerCase() === "false") return false;
21794
- return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension.granularity);
21794
+ return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension);
21795
21795
  }
21796
- function normalizeDateTime(value, granularity) {
21797
- return pivotTimeAdapter(granularity ?? "month").normalizeFunctionValue(value);
21796
+ function normalizeDateTime(value, dimension) {
21797
+ return pivotTimeAdapter(dimension.granularity ?? "month").normalizeFunctionValue(value);
21798
21798
  }
21799
21799
  function toFunctionPivotValue(value, dimension) {
21800
21800
  if (value === null) return `"null"`;
@@ -28055,7 +28055,7 @@ function filterInvalidCalendarDataPoints(labels, datasets) {
28055
28055
  */
28056
28056
  function filterInvalidHierarchicalPoints(values, hierarchy) {
28057
28057
  const numberOfDataPoints = Math.max(values.length, ...hierarchy.map((dataset) => dataset.data?.length || 0));
28058
- const isEmpty = (value) => value === null || value === "";
28058
+ const isEmpty = (value) => value === void 0 || value === null || value === "";
28059
28059
  const dataPointsIndexes = range(0, numberOfDataPoints).filter((dataPointIndex) => {
28060
28060
  const groups = hierarchy.map((dataset) => dataset.data?.[dataPointIndex]);
28061
28061
  if (isEmpty(groups[0]?.value)) return false;
@@ -58719,13 +58719,13 @@ var EvaluationConditionalFormatPlugin = class extends CoreViewPlugin {
58719
58719
  const minValue = this.parsePoint(sheetId, range, rule.minimum, "min");
58720
58720
  const midValue = rule.midpoint ? this.parsePoint(sheetId, range, rule.midpoint) : null;
58721
58721
  const maxValue = this.parsePoint(sheetId, range, rule.maximum, "max");
58722
- if (minValue === null || maxValue === null || minValue >= maxValue || midValue && (minValue >= midValue || midValue >= maxValue)) return;
58722
+ if (minValue === null || maxValue === null || minValue >= maxValue || midValue !== null && (minValue >= midValue || midValue >= maxValue)) return;
58723
58723
  const zone = this.getters.getRangeFromSheetXC(sheetId, range).zone;
58724
58724
  const colorThresholds = [{
58725
58725
  value: minValue,
58726
58726
  color: rule.minimum.color
58727
58727
  }];
58728
- if (rule.midpoint && midValue) colorThresholds.push({
58728
+ if (rule.midpoint && midValue !== null) colorThresholds.push({
58729
58729
  value: midValue,
58730
58730
  color: rule.midpoint.color
58731
58731
  });
@@ -66184,7 +66184,9 @@ var GridSelectionPlugin = class extends UIPlugin {
66184
66184
  ctx.lineWidth = 1.5 * thinLineWidth;
66185
66185
  const isDarkMode = this.getters.isDarkMode();
66186
66186
  for (const zone of zones) {
66187
+ if (!viewports.isZoneVisibleInViewport(sheetId, zone)) continue;
66187
66188
  const { x, y, width, height } = viewports.getVisibleRect(sheetId, zone);
66189
+ const currentLineWidth = ctx.lineWidth;
66188
66190
  if (!isDarkMode) ctx.globalCompositeOperation = "multiply";
66189
66191
  if (height === 0 || width === 0) ctx.lineWidth = 3 * thinLineWidth;
66190
66192
  if (height === 0 && width === 0) {
@@ -66198,6 +66200,7 @@ var GridSelectionPlugin = class extends UIPlugin {
66198
66200
  ctx.globalCompositeOperation = "source-over";
66199
66201
  ctx.strokeRect(x, y, width, height);
66200
66202
  }
66203
+ ctx.lineWidth = currentLineWidth;
66201
66204
  }
66202
66205
  ctx.globalCompositeOperation = "source-over";
66203
66206
  const position = renderingContext.activePosition;
@@ -66344,6 +66347,9 @@ var InternalViewport = class {
66344
66347
  this.adjustViewportZoneX();
66345
66348
  this.adjustViewportZoneY();
66346
66349
  }
66350
+ isZoneVisible(zone) {
66351
+ return intersection(zone, this) !== void 0;
66352
+ }
66347
66353
  /**
66348
66354
  *
66349
66355
  * Computes the visible coordinates & dimensions of a given zone inside the viewport
@@ -66624,6 +66630,9 @@ var ViewportCollection = class {
66624
66630
  isVisibleInViewport({ sheetId, col, row }) {
66625
66631
  return this.getSubViewports(sheetId).some((pane) => pane.isVisible(col, row));
66626
66632
  }
66633
+ isZoneVisibleInViewport(sheetId, zone) {
66634
+ return this.getSubViewports(sheetId).some((pane) => pane.isZoneVisible(zone));
66635
+ }
66627
66636
  getScrollBarWidth() {
66628
66637
  return 15 / this.zoomLevel;
66629
66638
  }
@@ -69515,10 +69524,13 @@ var SpreadsheetDashboard = class extends Component {
69515
69524
  return this.env.model.getters.getColDimensions(sheetId, right).end;
69516
69525
  }
69517
69526
  get dashboardStyle() {
69518
- return cssPropertiesToCss({ zoom: `${this.env.model.getters.getViewportZoomLevel()}` });
69527
+ const style = { zoom: `${this.env.model.getters.getViewportZoomLevel()}` };
69528
+ if (this.env.model.getters.getActiveSheet().backgroundColor) style["background-color"] = "transparent";
69529
+ return cssPropertiesToCss(style);
69519
69530
  }
69520
69531
  get backgroundStyle() {
69521
- return cssPropertiesToCss({ "background-color": this.env.model.getters.getActiveSheet().backgroundColor || "var(--os-white-bg)" });
69532
+ const sheet = this.env.model.getters.getActiveSheet();
69533
+ return sheet.backgroundColor ? cssPropertiesToCss({ "background-color": sheet.backgroundColor }) : "";
69522
69534
  }
69523
69535
  };
69524
69536
 
@@ -70697,18 +70709,28 @@ var NamedRangeSelector = class extends Component {
70697
70709
  return;
70698
70710
  }
70699
70711
  const activeSheetId = this.env.model.getters.getActiveSheetId();
70700
- if (activeSheetId !== sheetId) this.env.model.dispatch("ACTIVATE_SHEET", {
70701
- sheetIdFrom: activeSheetId,
70702
- sheetIdTo: sheetId
70703
- });
70704
- this.env.model.selection.selectCell(zone.right, zone.bottom);
70712
+ if (activeSheetId !== sheetId) {
70713
+ if (!this.env.model.getters.getSheet(sheetId).isVisible) {
70714
+ this.env.notifyUser({
70715
+ text: _t("The sheet on which the range is defined is hidden."),
70716
+ type: "info",
70717
+ sticky: false
70718
+ });
70719
+ return;
70720
+ }
70721
+ this.env.model.dispatch("ACTIVATE_SHEET", {
70722
+ sheetIdFrom: activeSheetId,
70723
+ sheetIdTo: sheetId
70724
+ });
70725
+ }
70726
+ this.env.model.selection.selectCell(zone.right, zone.bottom, { allowsHiddenSelection: true });
70705
70727
  this.env.model.selection.selectZone({
70706
70728
  cell: {
70707
70729
  col: zone.left,
70708
70730
  row: zone.top
70709
70731
  },
70710
70732
  zone
70711
- });
70733
+ }, { allowsHiddenSelection: true });
70712
70734
  }
70713
70735
  get selectionKey() {
70714
70736
  return `${this.env.model.getters.getActiveSheetId()}-${zoneToXc(this.selectedZone)}`;
@@ -87463,6 +87485,6 @@ const chartHelpers = {
87463
87485
  //#endregion
87464
87486
  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 };
87465
87487
 
87466
- __info__.version = "19.4.0";
87467
- __info__.date = "2026-06-29T08:47:48.150Z";
87468
- __info__.hash = "b0b4c40";
87488
+ __info__.version = "19.4.2";
87489
+ __info__.date = "2026-07-13T06:26:39.071Z";
87490
+ __info__.hash = "c83d4aa";
@@ -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.0
6
- * @date 2026-06-29T08:47:48.150Z
7
- * @hash b0b4c40
5
+ * @version 19.4.2
6
+ * @date 2026-07-13T06:26:39.071Z
7
+ * @hash c83d4aa
8
8
  */
9
9
 
10
10
  (function(exports, _odoo_owl) {
@@ -21793,10 +21793,10 @@ set(value) {
21793
21793
  type: dimension.type
21794
21794
  }));
21795
21795
  if (groupValueString.toLowerCase() === "false") return false;
21796
- return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension.granularity);
21796
+ return pivotNormalizationValueRegistry.get(dimension.type)(groupValueString, dimension);
21797
21797
  }
21798
- function normalizeDateTime(value, granularity) {
21799
- return pivotTimeAdapter(granularity ?? "month").normalizeFunctionValue(value);
21798
+ function normalizeDateTime(value, dimension) {
21799
+ return pivotTimeAdapter(dimension.granularity ?? "month").normalizeFunctionValue(value);
21800
21800
  }
21801
21801
  function toFunctionPivotValue(value, dimension) {
21802
21802
  if (value === null) return `"null"`;
@@ -28057,7 +28057,7 @@ set(value) {
28057
28057
  */
28058
28058
  function filterInvalidHierarchicalPoints(values, hierarchy) {
28059
28059
  const numberOfDataPoints = Math.max(values.length, ...hierarchy.map((dataset) => dataset.data?.length || 0));
28060
- const isEmpty = (value) => value === null || value === "";
28060
+ const isEmpty = (value) => value === void 0 || value === null || value === "";
28061
28061
  const dataPointsIndexes = range(0, numberOfDataPoints).filter((dataPointIndex) => {
28062
28062
  const groups = hierarchy.map((dataset) => dataset.data?.[dataPointIndex]);
28063
28063
  if (isEmpty(groups[0]?.value)) return false;
@@ -58721,13 +58721,13 @@ set(value) {
58721
58721
  const minValue = this.parsePoint(sheetId, range, rule.minimum, "min");
58722
58722
  const midValue = rule.midpoint ? this.parsePoint(sheetId, range, rule.midpoint) : null;
58723
58723
  const maxValue = this.parsePoint(sheetId, range, rule.maximum, "max");
58724
- if (minValue === null || maxValue === null || minValue >= maxValue || midValue && (minValue >= midValue || midValue >= maxValue)) return;
58724
+ if (minValue === null || maxValue === null || minValue >= maxValue || midValue !== null && (minValue >= midValue || midValue >= maxValue)) return;
58725
58725
  const zone = this.getters.getRangeFromSheetXC(sheetId, range).zone;
58726
58726
  const colorThresholds = [{
58727
58727
  value: minValue,
58728
58728
  color: rule.minimum.color
58729
58729
  }];
58730
- if (rule.midpoint && midValue) colorThresholds.push({
58730
+ if (rule.midpoint && midValue !== null) colorThresholds.push({
58731
58731
  value: midValue,
58732
58732
  color: rule.midpoint.color
58733
58733
  });
@@ -66186,7 +66186,9 @@ set(value) {
66186
66186
  ctx.lineWidth = 1.5 * thinLineWidth;
66187
66187
  const isDarkMode = this.getters.isDarkMode();
66188
66188
  for (const zone of zones) {
66189
+ if (!viewports.isZoneVisibleInViewport(sheetId, zone)) continue;
66189
66190
  const { x, y, width, height } = viewports.getVisibleRect(sheetId, zone);
66191
+ const currentLineWidth = ctx.lineWidth;
66190
66192
  if (!isDarkMode) ctx.globalCompositeOperation = "multiply";
66191
66193
  if (height === 0 || width === 0) ctx.lineWidth = 3 * thinLineWidth;
66192
66194
  if (height === 0 && width === 0) {
@@ -66200,6 +66202,7 @@ set(value) {
66200
66202
  ctx.globalCompositeOperation = "source-over";
66201
66203
  ctx.strokeRect(x, y, width, height);
66202
66204
  }
66205
+ ctx.lineWidth = currentLineWidth;
66203
66206
  }
66204
66207
  ctx.globalCompositeOperation = "source-over";
66205
66208
  const position = renderingContext.activePosition;
@@ -66346,6 +66349,9 @@ set(value) {
66346
66349
  this.adjustViewportZoneX();
66347
66350
  this.adjustViewportZoneY();
66348
66351
  }
66352
+ isZoneVisible(zone) {
66353
+ return intersection(zone, this) !== void 0;
66354
+ }
66349
66355
  /**
66350
66356
  *
66351
66357
  * Computes the visible coordinates & dimensions of a given zone inside the viewport
@@ -66626,6 +66632,9 @@ set(value) {
66626
66632
  isVisibleInViewport({ sheetId, col, row }) {
66627
66633
  return this.getSubViewports(sheetId).some((pane) => pane.isVisible(col, row));
66628
66634
  }
66635
+ isZoneVisibleInViewport(sheetId, zone) {
66636
+ return this.getSubViewports(sheetId).some((pane) => pane.isZoneVisible(zone));
66637
+ }
66629
66638
  getScrollBarWidth() {
66630
66639
  return 15 / this.zoomLevel;
66631
66640
  }
@@ -69517,10 +69526,13 @@ set(value) {
69517
69526
  return this.env.model.getters.getColDimensions(sheetId, right).end;
69518
69527
  }
69519
69528
  get dashboardStyle() {
69520
- return cssPropertiesToCss({ zoom: `${this.env.model.getters.getViewportZoomLevel()}` });
69529
+ const style = { zoom: `${this.env.model.getters.getViewportZoomLevel()}` };
69530
+ if (this.env.model.getters.getActiveSheet().backgroundColor) style["background-color"] = "transparent";
69531
+ return cssPropertiesToCss(style);
69521
69532
  }
69522
69533
  get backgroundStyle() {
69523
- return cssPropertiesToCss({ "background-color": this.env.model.getters.getActiveSheet().backgroundColor || "var(--os-white-bg)" });
69534
+ const sheet = this.env.model.getters.getActiveSheet();
69535
+ return sheet.backgroundColor ? cssPropertiesToCss({ "background-color": sheet.backgroundColor }) : "";
69524
69536
  }
69525
69537
  };
69526
69538
 
@@ -70699,18 +70711,28 @@ set(value) {
70699
70711
  return;
70700
70712
  }
70701
70713
  const activeSheetId = this.env.model.getters.getActiveSheetId();
70702
- if (activeSheetId !== sheetId) this.env.model.dispatch("ACTIVATE_SHEET", {
70703
- sheetIdFrom: activeSheetId,
70704
- sheetIdTo: sheetId
70705
- });
70706
- this.env.model.selection.selectCell(zone.right, zone.bottom);
70714
+ if (activeSheetId !== sheetId) {
70715
+ if (!this.env.model.getters.getSheet(sheetId).isVisible) {
70716
+ this.env.notifyUser({
70717
+ text: _t("The sheet on which the range is defined is hidden."),
70718
+ type: "info",
70719
+ sticky: false
70720
+ });
70721
+ return;
70722
+ }
70723
+ this.env.model.dispatch("ACTIVATE_SHEET", {
70724
+ sheetIdFrom: activeSheetId,
70725
+ sheetIdTo: sheetId
70726
+ });
70727
+ }
70728
+ this.env.model.selection.selectCell(zone.right, zone.bottom, { allowsHiddenSelection: true });
70707
70729
  this.env.model.selection.selectZone({
70708
70730
  cell: {
70709
70731
  col: zone.left,
70710
70732
  row: zone.top
70711
70733
  },
70712
70734
  zone
70713
- });
70735
+ }, { allowsHiddenSelection: true });
70714
70736
  }
70715
70737
  get selectionKey() {
70716
70738
  return `${this.env.model.getters.getActiveSheetId()}-${zoneToXc(this.selectedZone)}`;
@@ -87559,8 +87581,8 @@ exports.stores = stores;
87559
87581
  exports.tokenColors = tokenColors;
87560
87582
  exports.tokenize = tokenize;
87561
87583
 
87562
- __info__.version = "19.4.0";
87563
- __info__.date = "2026-06-29T08:47:48.150Z";
87564
- __info__.hash = "b0b4c40";
87584
+ __info__.version = "19.4.2";
87585
+ __info__.date = "2026-07-13T06:26:39.071Z";
87586
+ __info__.hash = "c83d4aa";
87565
87587
 
87566
87588
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);