@odoo/o-spreadsheet 17.0.43 → 17.0.44

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 17.0.43
6
- * @date 2024-12-05T10:36:19.412Z
7
- * @hash 8344531
5
+ * @version 17.0.44
6
+ * @date 2024-12-19T07:46:10.942Z
7
+ * @hash 820f3cf
8
8
  */
9
9
 
10
10
  'use strict';
@@ -706,6 +706,7 @@ function removeFalsyAttributes(obj) {
706
706
  * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes
707
707
  */
708
708
  const whiteSpaceSpecialCharacters = [
709
+ " ",
709
710
  "\t",
710
711
  "\f",
711
712
  "\v",
@@ -720,17 +721,15 @@ const whiteSpaceSpecialCharacters = [
720
721
  String.fromCharCode(parseInt("3000", 16)),
721
722
  String.fromCharCode(parseInt("feff", 16)),
722
723
  ];
723
- const whiteSpaceRegexp = new RegExp(whiteSpaceSpecialCharacters.join("|") + "|(\r\n|\r|\n)", "g");
724
+ const whiteSpaceRegexp = new RegExp(whiteSpaceSpecialCharacters.join("|"), "g");
725
+ const newLineRegexp = /(\r\n|\r)/g;
724
726
  /**
725
- * Replace all the special spaces in a string (non-breaking, tabs, ...) by normal spaces, and all the
726
- * different newlines types by \n.
727
+ * Replace all different newlines characters by \n
727
728
  */
728
- function replaceSpecialSpaces(text) {
729
+ function replaceNewLines(text) {
729
730
  if (!text)
730
731
  return "";
731
- if (!whiteSpaceRegexp.test(text))
732
- return text;
733
- return text.replace(whiteSpaceRegexp, (match, newLine) => (newLine ? NEWLINE : " "));
732
+ return text.replace(newLineRegexp, NEWLINE);
734
733
  }
735
734
  /**
736
735
  * Determine if the numbers are consecutive.
@@ -7473,7 +7472,7 @@ LinkDisplay.props = {
7473
7472
  const POSTFIX_UNARY_OPERATORS = ["%"];
7474
7473
  const OPERATORS = "+,-,*,/,:,=,<>,>=,>,<=,<,^,&".split(",").concat(POSTFIX_UNARY_OPERATORS);
7475
7474
  function tokenize(str, locale = DEFAULT_LOCALE) {
7476
- str = replaceSpecialSpaces(str);
7475
+ str = replaceNewLines(str);
7477
7476
  const chars = new TokenizingChars(str);
7478
7477
  const result = [];
7479
7478
  while (!chars.isOver()) {
@@ -7620,12 +7619,12 @@ function tokenizeSpace(chars) {
7620
7619
  if (length) {
7621
7620
  return { type: "SPACE", value: NEWLINE.repeat(length) };
7622
7621
  }
7623
- while (chars.current === " ") {
7624
- length++;
7625
- chars.shift();
7622
+ let spaces = "";
7623
+ while (chars.current && chars.current.match(whiteSpaceRegexp)) {
7624
+ spaces += chars.shift();
7626
7625
  }
7627
- if (length) {
7628
- return { type: "SPACE", value: " ".repeat(length) };
7626
+ if (spaces) {
7627
+ return { type: "SPACE", value: spaces };
7629
7628
  }
7630
7629
  return null;
7631
7630
  }
@@ -21820,15 +21819,23 @@ class BarConfigPanel extends LineBarPieConfigPanel {
21820
21819
  }
21821
21820
  }
21822
21821
 
21822
+ /**
21823
+ * Start listening to pointer events and apply the given callbacks.
21824
+ *
21825
+ * @returns A function to remove the listeners.
21826
+ */
21823
21827
  function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
21824
- const _onMouseUp = (ev) => {
21825
- onMouseUp(ev);
21828
+ const removeListeners = () => {
21826
21829
  window.removeEventListener("mousedown", onMouseDown);
21827
21830
  window.removeEventListener("mouseup", _onMouseUp);
21828
21831
  window.removeEventListener("dragstart", _onDragStart);
21829
21832
  window.removeEventListener("mousemove", onMouseMove);
21830
21833
  window.removeEventListener("wheel", onMouseMove);
21831
21834
  };
21835
+ const _onMouseUp = (ev) => {
21836
+ onMouseUp(ev);
21837
+ removeListeners();
21838
+ };
21832
21839
  function _onDragStart(ev) {
21833
21840
  ev.preventDefault();
21834
21841
  }
@@ -21840,6 +21847,7 @@ function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
21840
21847
  // preventDefault() is not allowed in passive event handler.
21841
21848
  // https://chromestatus.com/feature/6662647093133312
21842
21849
  window.addEventListener("wheel", onMouseMove, { passive: false });
21850
+ return removeListeners;
21843
21851
  }
21844
21852
  /**
21845
21853
  * Function to be used during a mousedown event, this function allows to
@@ -28013,6 +28021,7 @@ class FiguresContainer extends owl.Component {
28013
28021
  draggedFigure: undefined,
28014
28022
  horizontalSnap: undefined,
28015
28023
  verticalSnap: undefined,
28024
+ cancelDnd: undefined,
28016
28025
  });
28017
28026
  setup() {
28018
28027
  owl.onMounted(() => {
@@ -28025,12 +28034,28 @@ class FiguresContainer extends owl.Component {
28025
28034
  // new rendering
28026
28035
  this.render();
28027
28036
  });
28037
+ owl.onWillUpdateProps(() => {
28038
+ const sheetId = this.env.model.getters.getActiveSheetId();
28039
+ const draggedFigureId = this.dnd.draggedFigure?.id;
28040
+ if (draggedFigureId && !this.env.model.getters.getFigure(sheetId, draggedFigureId)) {
28041
+ if (this.dnd.cancelDnd) {
28042
+ this.dnd.cancelDnd();
28043
+ }
28044
+ this.dnd.draggedFigure = undefined;
28045
+ this.dnd.horizontalSnap = undefined;
28046
+ this.dnd.verticalSnap = undefined;
28047
+ this.dnd.cancelDnd = undefined;
28048
+ }
28049
+ });
28028
28050
  }
28029
28051
  getVisibleFigures() {
28030
28052
  const visibleFigures = this.env.model.getters.getVisibleFigures();
28031
28053
  if (this.dnd.draggedFigure &&
28032
28054
  !visibleFigures.some((figure) => figure.id === this.dnd.draggedFigure?.id)) {
28033
- visibleFigures.push(this.env.model.getters.getFigure(this.env.model.getters.getActiveSheetId(), this.dnd.draggedFigure?.id));
28055
+ const draggedFigure = this.env.model.getters.getFigure(this.env.model.getters.getActiveSheetId(), this.dnd.draggedFigure?.id);
28056
+ if (draggedFigure) {
28057
+ visibleFigures.push(draggedFigure);
28058
+ }
28034
28059
  }
28035
28060
  return visibleFigures;
28036
28061
  }
@@ -28149,7 +28174,7 @@ class FiguresContainer extends owl.Component {
28149
28174
  this.dnd.verticalSnap = undefined;
28150
28175
  this.env.model.dispatch("UPDATE_FIGURE", { sheetId, id: figure.id, x, y });
28151
28176
  };
28152
- startDnd(onMouseMove, onMouseUp);
28177
+ this.dnd.cancelDnd = startDnd(onMouseMove, onMouseUp);
28153
28178
  }
28154
28179
  /**
28155
28180
  * Initialize the resize of a figure with mouse movements
@@ -28197,7 +28222,7 @@ class FiguresContainer extends owl.Component {
28197
28222
  this.dnd.horizontalSnap = undefined;
28198
28223
  this.dnd.verticalSnap = undefined;
28199
28224
  };
28200
- startDnd(onMouseMove, onMouseUp);
28225
+ this.dnd.cancelDnd = startDnd(onMouseMove, onMouseUp);
28201
28226
  }
28202
28227
  getOtherFigures(figId) {
28203
28228
  return this.getVisibleFigures().filter((f) => f.id !== figId);
@@ -31493,7 +31518,7 @@ function extractStyle(cell, data) {
31493
31518
  vertical: style.verticalAlign
31494
31519
  ? V_ALIGNMENT_EXPORT_CONVERSION_MAP[style.verticalAlign]
31495
31520
  : undefined,
31496
- wrapText: style.wrapping === "wrap",
31521
+ wrapText: style.wrapping === "wrap" || cell.content?.includes(NEWLINE) ? true : undefined,
31497
31522
  },
31498
31523
  };
31499
31524
  styles.font["strike"] = !!style?.strikethrough || undefined;
@@ -31922,9 +31947,8 @@ function convertRows(sheet, numberOfRows) {
31922
31947
  }
31923
31948
  return rows;
31924
31949
  }
31925
- /** Remove newlines (\n) in shared strings, We do not support them */
31926
31950
  function convertSharedStrings(xlsxSharedStrings) {
31927
- return xlsxSharedStrings.map((str) => str.replace(/\n/g, ""));
31951
+ return xlsxSharedStrings.map(replaceNewLines);
31928
31952
  }
31929
31953
  function convertCells(sheet, data, sheetDims, warningManager) {
31930
31954
  const cells = {};
@@ -32715,15 +32739,10 @@ class XlsxMiscExtractor extends XlsxBaseExtractor {
32715
32739
  getSharedStrings() {
32716
32740
  return this.mapOnElements({ parent: this.rootFile.file.xml, query: "si" }, (ssElement) => {
32717
32741
  // Shared string can either be a simple text, or a rich text (text with formatting, possibly in multiple parts)
32718
- if (ssElement.children[0].tagName === "t") {
32719
- return this.extractTextContent(ssElement) || "";
32720
- }
32721
32742
  // We don't support rich text formatting, we'll only extract the text
32722
- else {
32723
- return this.mapOnElements({ parent: ssElement, query: "t" }, (textElement) => {
32724
- return this.extractTextContent(textElement) || "";
32725
- }).join("");
32726
- }
32743
+ return this.mapOnElements({ parent: ssElement, query: "t" }, (textElement) => {
32744
+ return this.extractTextContent(textElement) || "";
32745
+ }).join("");
32727
32746
  });
32728
32747
  }
32729
32748
  }
@@ -36096,7 +36115,7 @@ class CellPlugin extends CorePlugin {
36096
36115
  const before = this.getters.getCell({ sheetId, col, row });
36097
36116
  const hasContent = "content" in after || "formula" in after;
36098
36117
  // Compute the new cell properties
36099
- const afterContent = hasContent ? replaceSpecialSpaces(after?.content) : before?.content || "";
36118
+ const afterContent = hasContent ? replaceNewLines(after?.content) : before?.content || "";
36100
36119
  let style;
36101
36120
  if (after.style !== undefined) {
36102
36121
  style = after.style || undefined;
@@ -50916,6 +50935,7 @@ class SheetViewPlugin extends UIPlugin {
50916
50935
  break;
50917
50936
  case "DELETE_SHEET":
50918
50937
  this.cleanViewports();
50938
+ this.sheetsWithDirtyViewports.delete(cmd.sheetId);
50919
50939
  break;
50920
50940
  case "ACTIVATE_SHEET":
50921
50941
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
@@ -53137,7 +53157,6 @@ css /* scss */ `
53137
53157
  height: fit-content;
53138
53158
  margin-top: -1px;
53139
53159
  border: 1px solid;
53140
- z-index: ${ComponentsImportance.TopBarComposer};
53141
53160
 
53142
53161
  .o-composer:empty:not(:focus):not(.active)::before {
53143
53162
  content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
@@ -53171,6 +53190,7 @@ class TopBarComposer extends owl.Component {
53171
53190
  }
53172
53191
  return cssPropertiesToCss({
53173
53192
  "border-color": SELECTION_BORDER_COLOR,
53193
+ "z-index": String(ComponentsImportance.TopBarComposer),
53174
53194
  });
53175
53195
  }
53176
53196
  }
@@ -56973,7 +56993,12 @@ function createSharedStrings(strings) {
56973
56993
  ["count", strings.length],
56974
56994
  ["uniqueCount", strings.length],
56975
56995
  ];
56976
- const stringNodes = strings.map((string) => escapeXml /*xml*/ `<si><t>${string}</t></si>`);
56996
+ const stringNodes = strings.map((string) => {
56997
+ if (string.trim() !== string) {
56998
+ return escapeXml /*xml*/ `<si><t xml:space="preserve">${string}</t></si>`;
56999
+ }
57000
+ return escapeXml /*xml*/ `<si><t>${string}</t></si>`;
57001
+ });
56977
57002
  const xml = escapeXml /*xml*/ `
56978
57003
  <sst ${formatAttributes(namespaces)}>
56979
57004
  ${joinXmlNodes(stringNodes)}
@@ -57684,6 +57709,6 @@ exports.setTranslationMethod = setTranslationMethod;
57684
57709
  exports.tokenize = tokenize;
57685
57710
 
57686
57711
 
57687
- __info__.version = "17.0.43";
57688
- __info__.date = "2024-12-05T10:36:19.412Z";
57689
- __info__.hash = "8344531";
57712
+ __info__.version = "17.0.44";
57713
+ __info__.date = "2024-12-19T07:46:10.942Z";
57714
+ __info__.hash = "820f3cf";
@@ -6386,6 +6386,7 @@ interface DndState {
6386
6386
  draggedFigure?: Figure;
6387
6387
  horizontalSnap?: Snap<HFigureAxisType>;
6388
6388
  verticalSnap?: Snap<VFigureAxisType>;
6389
+ cancelDnd: (() => void) | undefined;
6389
6390
  }
6390
6391
  /**
6391
6392
  * Each figure ⭐ is positioned inside a container `div` placed and sized
@@ -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 17.0.43
6
- * @date 2024-12-05T10:36:19.412Z
7
- * @hash 8344531
5
+ * @version 17.0.44
6
+ * @date 2024-12-19T07:46:10.942Z
7
+ * @hash 820f3cf
8
8
  */
9
9
 
10
10
  import { Component, useRef, onMounted, useEffect, onWillPatch, useState, onWillUpdateProps, onPatched, useComponent, useExternalListener, onWillUnmount, onWillStart, xml, useChildSubEnv, useSubEnv, markRaw } from '@odoo/owl';
@@ -704,6 +704,7 @@ function removeFalsyAttributes(obj) {
704
704
  * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes
705
705
  */
706
706
  const whiteSpaceSpecialCharacters = [
707
+ " ",
707
708
  "\t",
708
709
  "\f",
709
710
  "\v",
@@ -718,17 +719,15 @@ const whiteSpaceSpecialCharacters = [
718
719
  String.fromCharCode(parseInt("3000", 16)),
719
720
  String.fromCharCode(parseInt("feff", 16)),
720
721
  ];
721
- const whiteSpaceRegexp = new RegExp(whiteSpaceSpecialCharacters.join("|") + "|(\r\n|\r|\n)", "g");
722
+ const whiteSpaceRegexp = new RegExp(whiteSpaceSpecialCharacters.join("|"), "g");
723
+ const newLineRegexp = /(\r\n|\r)/g;
722
724
  /**
723
- * Replace all the special spaces in a string (non-breaking, tabs, ...) by normal spaces, and all the
724
- * different newlines types by \n.
725
+ * Replace all different newlines characters by \n
725
726
  */
726
- function replaceSpecialSpaces(text) {
727
+ function replaceNewLines(text) {
727
728
  if (!text)
728
729
  return "";
729
- if (!whiteSpaceRegexp.test(text))
730
- return text;
731
- return text.replace(whiteSpaceRegexp, (match, newLine) => (newLine ? NEWLINE : " "));
730
+ return text.replace(newLineRegexp, NEWLINE);
732
731
  }
733
732
  /**
734
733
  * Determine if the numbers are consecutive.
@@ -7471,7 +7470,7 @@ LinkDisplay.props = {
7471
7470
  const POSTFIX_UNARY_OPERATORS = ["%"];
7472
7471
  const OPERATORS = "+,-,*,/,:,=,<>,>=,>,<=,<,^,&".split(",").concat(POSTFIX_UNARY_OPERATORS);
7473
7472
  function tokenize(str, locale = DEFAULT_LOCALE) {
7474
- str = replaceSpecialSpaces(str);
7473
+ str = replaceNewLines(str);
7475
7474
  const chars = new TokenizingChars(str);
7476
7475
  const result = [];
7477
7476
  while (!chars.isOver()) {
@@ -7618,12 +7617,12 @@ function tokenizeSpace(chars) {
7618
7617
  if (length) {
7619
7618
  return { type: "SPACE", value: NEWLINE.repeat(length) };
7620
7619
  }
7621
- while (chars.current === " ") {
7622
- length++;
7623
- chars.shift();
7620
+ let spaces = "";
7621
+ while (chars.current && chars.current.match(whiteSpaceRegexp)) {
7622
+ spaces += chars.shift();
7624
7623
  }
7625
- if (length) {
7626
- return { type: "SPACE", value: " ".repeat(length) };
7624
+ if (spaces) {
7625
+ return { type: "SPACE", value: spaces };
7627
7626
  }
7628
7627
  return null;
7629
7628
  }
@@ -21818,15 +21817,23 @@ class BarConfigPanel extends LineBarPieConfigPanel {
21818
21817
  }
21819
21818
  }
21820
21819
 
21820
+ /**
21821
+ * Start listening to pointer events and apply the given callbacks.
21822
+ *
21823
+ * @returns A function to remove the listeners.
21824
+ */
21821
21825
  function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
21822
- const _onMouseUp = (ev) => {
21823
- onMouseUp(ev);
21826
+ const removeListeners = () => {
21824
21827
  window.removeEventListener("mousedown", onMouseDown);
21825
21828
  window.removeEventListener("mouseup", _onMouseUp);
21826
21829
  window.removeEventListener("dragstart", _onDragStart);
21827
21830
  window.removeEventListener("mousemove", onMouseMove);
21828
21831
  window.removeEventListener("wheel", onMouseMove);
21829
21832
  };
21833
+ const _onMouseUp = (ev) => {
21834
+ onMouseUp(ev);
21835
+ removeListeners();
21836
+ };
21830
21837
  function _onDragStart(ev) {
21831
21838
  ev.preventDefault();
21832
21839
  }
@@ -21838,6 +21845,7 @@ function startDnd(onMouseMove, onMouseUp, onMouseDown = () => { }) {
21838
21845
  // preventDefault() is not allowed in passive event handler.
21839
21846
  // https://chromestatus.com/feature/6662647093133312
21840
21847
  window.addEventListener("wheel", onMouseMove, { passive: false });
21848
+ return removeListeners;
21841
21849
  }
21842
21850
  /**
21843
21851
  * Function to be used during a mousedown event, this function allows to
@@ -28011,6 +28019,7 @@ class FiguresContainer extends Component {
28011
28019
  draggedFigure: undefined,
28012
28020
  horizontalSnap: undefined,
28013
28021
  verticalSnap: undefined,
28022
+ cancelDnd: undefined,
28014
28023
  });
28015
28024
  setup() {
28016
28025
  onMounted(() => {
@@ -28023,12 +28032,28 @@ class FiguresContainer extends Component {
28023
28032
  // new rendering
28024
28033
  this.render();
28025
28034
  });
28035
+ onWillUpdateProps(() => {
28036
+ const sheetId = this.env.model.getters.getActiveSheetId();
28037
+ const draggedFigureId = this.dnd.draggedFigure?.id;
28038
+ if (draggedFigureId && !this.env.model.getters.getFigure(sheetId, draggedFigureId)) {
28039
+ if (this.dnd.cancelDnd) {
28040
+ this.dnd.cancelDnd();
28041
+ }
28042
+ this.dnd.draggedFigure = undefined;
28043
+ this.dnd.horizontalSnap = undefined;
28044
+ this.dnd.verticalSnap = undefined;
28045
+ this.dnd.cancelDnd = undefined;
28046
+ }
28047
+ });
28026
28048
  }
28027
28049
  getVisibleFigures() {
28028
28050
  const visibleFigures = this.env.model.getters.getVisibleFigures();
28029
28051
  if (this.dnd.draggedFigure &&
28030
28052
  !visibleFigures.some((figure) => figure.id === this.dnd.draggedFigure?.id)) {
28031
- visibleFigures.push(this.env.model.getters.getFigure(this.env.model.getters.getActiveSheetId(), this.dnd.draggedFigure?.id));
28053
+ const draggedFigure = this.env.model.getters.getFigure(this.env.model.getters.getActiveSheetId(), this.dnd.draggedFigure?.id);
28054
+ if (draggedFigure) {
28055
+ visibleFigures.push(draggedFigure);
28056
+ }
28032
28057
  }
28033
28058
  return visibleFigures;
28034
28059
  }
@@ -28147,7 +28172,7 @@ class FiguresContainer extends Component {
28147
28172
  this.dnd.verticalSnap = undefined;
28148
28173
  this.env.model.dispatch("UPDATE_FIGURE", { sheetId, id: figure.id, x, y });
28149
28174
  };
28150
- startDnd(onMouseMove, onMouseUp);
28175
+ this.dnd.cancelDnd = startDnd(onMouseMove, onMouseUp);
28151
28176
  }
28152
28177
  /**
28153
28178
  * Initialize the resize of a figure with mouse movements
@@ -28195,7 +28220,7 @@ class FiguresContainer extends Component {
28195
28220
  this.dnd.horizontalSnap = undefined;
28196
28221
  this.dnd.verticalSnap = undefined;
28197
28222
  };
28198
- startDnd(onMouseMove, onMouseUp);
28223
+ this.dnd.cancelDnd = startDnd(onMouseMove, onMouseUp);
28199
28224
  }
28200
28225
  getOtherFigures(figId) {
28201
28226
  return this.getVisibleFigures().filter((f) => f.id !== figId);
@@ -31491,7 +31516,7 @@ function extractStyle(cell, data) {
31491
31516
  vertical: style.verticalAlign
31492
31517
  ? V_ALIGNMENT_EXPORT_CONVERSION_MAP[style.verticalAlign]
31493
31518
  : undefined,
31494
- wrapText: style.wrapping === "wrap",
31519
+ wrapText: style.wrapping === "wrap" || cell.content?.includes(NEWLINE) ? true : undefined,
31495
31520
  },
31496
31521
  };
31497
31522
  styles.font["strike"] = !!style?.strikethrough || undefined;
@@ -31920,9 +31945,8 @@ function convertRows(sheet, numberOfRows) {
31920
31945
  }
31921
31946
  return rows;
31922
31947
  }
31923
- /** Remove newlines (\n) in shared strings, We do not support them */
31924
31948
  function convertSharedStrings(xlsxSharedStrings) {
31925
- return xlsxSharedStrings.map((str) => str.replace(/\n/g, ""));
31949
+ return xlsxSharedStrings.map(replaceNewLines);
31926
31950
  }
31927
31951
  function convertCells(sheet, data, sheetDims, warningManager) {
31928
31952
  const cells = {};
@@ -32713,15 +32737,10 @@ class XlsxMiscExtractor extends XlsxBaseExtractor {
32713
32737
  getSharedStrings() {
32714
32738
  return this.mapOnElements({ parent: this.rootFile.file.xml, query: "si" }, (ssElement) => {
32715
32739
  // Shared string can either be a simple text, or a rich text (text with formatting, possibly in multiple parts)
32716
- if (ssElement.children[0].tagName === "t") {
32717
- return this.extractTextContent(ssElement) || "";
32718
- }
32719
32740
  // We don't support rich text formatting, we'll only extract the text
32720
- else {
32721
- return this.mapOnElements({ parent: ssElement, query: "t" }, (textElement) => {
32722
- return this.extractTextContent(textElement) || "";
32723
- }).join("");
32724
- }
32741
+ return this.mapOnElements({ parent: ssElement, query: "t" }, (textElement) => {
32742
+ return this.extractTextContent(textElement) || "";
32743
+ }).join("");
32725
32744
  });
32726
32745
  }
32727
32746
  }
@@ -36094,7 +36113,7 @@ class CellPlugin extends CorePlugin {
36094
36113
  const before = this.getters.getCell({ sheetId, col, row });
36095
36114
  const hasContent = "content" in after || "formula" in after;
36096
36115
  // Compute the new cell properties
36097
- const afterContent = hasContent ? replaceSpecialSpaces(after?.content) : before?.content || "";
36116
+ const afterContent = hasContent ? replaceNewLines(after?.content) : before?.content || "";
36098
36117
  let style;
36099
36118
  if (after.style !== undefined) {
36100
36119
  style = after.style || undefined;
@@ -50914,6 +50933,7 @@ class SheetViewPlugin extends UIPlugin {
50914
50933
  break;
50915
50934
  case "DELETE_SHEET":
50916
50935
  this.cleanViewports();
50936
+ this.sheetsWithDirtyViewports.delete(cmd.sheetId);
50917
50937
  break;
50918
50938
  case "ACTIVATE_SHEET":
50919
50939
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
@@ -53135,7 +53155,6 @@ css /* scss */ `
53135
53155
  height: fit-content;
53136
53156
  margin-top: -1px;
53137
53157
  border: 1px solid;
53138
- z-index: ${ComponentsImportance.TopBarComposer};
53139
53158
 
53140
53159
  .o-composer:empty:not(:focus):not(.active)::before {
53141
53160
  content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
@@ -53169,6 +53188,7 @@ class TopBarComposer extends Component {
53169
53188
  }
53170
53189
  return cssPropertiesToCss({
53171
53190
  "border-color": SELECTION_BORDER_COLOR,
53191
+ "z-index": String(ComponentsImportance.TopBarComposer),
53172
53192
  });
53173
53193
  }
53174
53194
  }
@@ -56971,7 +56991,12 @@ function createSharedStrings(strings) {
56971
56991
  ["count", strings.length],
56972
56992
  ["uniqueCount", strings.length],
56973
56993
  ];
56974
- const stringNodes = strings.map((string) => escapeXml /*xml*/ `<si><t>${string}</t></si>`);
56994
+ const stringNodes = strings.map((string) => {
56995
+ if (string.trim() !== string) {
56996
+ return escapeXml /*xml*/ `<si><t xml:space="preserve">${string}</t></si>`;
56997
+ }
56998
+ return escapeXml /*xml*/ `<si><t>${string}</t></si>`;
56999
+ });
56975
57000
  const xml = escapeXml /*xml*/ `
56976
57001
  <sst ${formatAttributes(namespaces)}>
56977
57002
  ${joinXmlNodes(stringNodes)}
@@ -57647,6 +57672,6 @@ const constants = {
57647
57672
  export { AbstractChart, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, tokenize };
57648
57673
 
57649
57674
 
57650
- __info__.version = "17.0.43";
57651
- __info__.date = "2024-12-05T10:36:19.412Z";
57652
- __info__.hash = "8344531";
57675
+ __info__.version = "17.0.44";
57676
+ __info__.date = "2024-12-19T07:46:10.942Z";
57677
+ __info__.hash = "820f3cf";