@odoo/o-spreadsheet 17.2.28 → 17.2.30

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.
@@ -3,9 +3,9 @@
3
3
  /**
4
4
  * This file is generated by o-spreadsheet build tools. Do not edit it.
5
5
  * @see https://github.com/odoo/o-spreadsheet
6
- * @version 17.2.28
7
- * @date 2024-11-28T09:04:19.153Z
8
- * @hash fb1cbd8
6
+ * @version 17.2.30
7
+ * @date 2024-12-19T07:48:16.226Z
8
+ * @hash 9a9ae31
9
9
  */
10
10
 
11
11
  'use strict';
@@ -626,6 +626,7 @@ function removeFalsyAttributes(obj) {
626
626
  * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes
627
627
  */
628
628
  const whiteSpaceSpecialCharacters = [
629
+ " ",
629
630
  "\t",
630
631
  "\f",
631
632
  "\v",
@@ -640,17 +641,15 @@ const whiteSpaceSpecialCharacters = [
640
641
  String.fromCharCode(parseInt("3000", 16)),
641
642
  String.fromCharCode(parseInt("feff", 16)),
642
643
  ];
643
- const whiteSpaceRegexp = new RegExp(whiteSpaceSpecialCharacters.join("|") + "|(\r\n|\r|\n)", "g");
644
+ const whiteSpaceRegexp = new RegExp(whiteSpaceSpecialCharacters.join("|"), "g");
645
+ const newLineRegexp = /(\r\n|\r)/g;
644
646
  /**
645
- * Replace all the special spaces in a string (non-breaking, tabs, ...) by normal spaces, and all the
646
- * different newlines types by \n.
647
+ * Replace all different newlines characters by \n
647
648
  */
648
- function replaceSpecialSpaces(text) {
649
+ function replaceNewLines(text) {
649
650
  if (!text)
650
651
  return "";
651
- if (!whiteSpaceRegexp.test(text))
652
- return text;
653
- return text.replace(whiteSpaceRegexp, (match, newLine) => (newLine ? NEWLINE : " "));
652
+ return text.replace(newLineRegexp, NEWLINE);
654
653
  }
655
654
  /**
656
655
  * Determine if the numbers are consecutive.
@@ -5163,7 +5162,7 @@ class BorderClipboardHandler extends AbstractCellClipboardHandler {
5163
5162
  const POSTFIX_UNARY_OPERATORS = ["%"];
5164
5163
  const OPERATORS = "+,-,*,/,:,=,<>,>=,>,<=,<,^,&".split(",").concat(POSTFIX_UNARY_OPERATORS);
5165
5164
  function tokenize(str, locale = DEFAULT_LOCALE) {
5166
- str = replaceSpecialSpaces(str);
5165
+ str = replaceNewLines(str);
5167
5166
  const chars = new TokenizingChars(str);
5168
5167
  const result = [];
5169
5168
  while (!chars.isOver()) {
@@ -5310,12 +5309,12 @@ function tokenizeSpace(chars) {
5310
5309
  if (length) {
5311
5310
  return { type: "SPACE", value: NEWLINE.repeat(length) };
5312
5311
  }
5313
- while (chars.current === " ") {
5314
- length++;
5315
- chars.shift();
5312
+ let spaces = "";
5313
+ while (chars.current && chars.current.match(whiteSpaceRegexp)) {
5314
+ spaces += chars.shift();
5316
5315
  }
5317
- if (length) {
5318
- return { type: "SPACE", value: " ".repeat(length) };
5316
+ if (spaces) {
5317
+ return { type: "SPACE", value: spaces };
5319
5318
  }
5320
5319
  return null;
5321
5320
  }
@@ -18751,6 +18750,18 @@ const TEXT = {
18751
18750
  },
18752
18751
  isExported: true,
18753
18752
  };
18753
+ // -----------------------------------------------------------------------------
18754
+ // VALUE
18755
+ // -----------------------------------------------------------------------------
18756
+ const VALUE = {
18757
+ description: _t("Converts a string to a numeric value."),
18758
+ args: [arg("value (number)", _t("the string to be converted"))],
18759
+ returns: ["NUMBER"],
18760
+ compute: function (value) {
18761
+ return toNumber(value, this.locale);
18762
+ },
18763
+ isExported: true,
18764
+ };
18754
18765
 
18755
18766
  var text = /*#__PURE__*/Object.freeze({
18756
18767
  __proto__: null,
@@ -18773,7 +18784,8 @@ var text = /*#__PURE__*/Object.freeze({
18773
18784
  TEXT: TEXT,
18774
18785
  TEXTJOIN: TEXTJOIN,
18775
18786
  TRIM: TRIM,
18776
- UPPER: UPPER
18787
+ UPPER: UPPER,
18788
+ VALUE: VALUE
18777
18789
  });
18778
18790
 
18779
18791
  // -----------------------------------------------------------------------------
@@ -33515,6 +33527,7 @@ class FiguresContainer extends owl.Component {
33515
33527
  draggedFigure: undefined,
33516
33528
  horizontalSnap: undefined,
33517
33529
  verticalSnap: undefined,
33530
+ cancelDnd: undefined,
33518
33531
  });
33519
33532
  setup() {
33520
33533
  owl.onMounted(() => {
@@ -33527,12 +33540,28 @@ class FiguresContainer extends owl.Component {
33527
33540
  // new rendering
33528
33541
  this.render();
33529
33542
  });
33543
+ owl.onWillUpdateProps(() => {
33544
+ const sheetId = this.env.model.getters.getActiveSheetId();
33545
+ const draggedFigureId = this.dnd.draggedFigure?.id;
33546
+ if (draggedFigureId && !this.env.model.getters.getFigure(sheetId, draggedFigureId)) {
33547
+ if (this.dnd.cancelDnd) {
33548
+ this.dnd.cancelDnd();
33549
+ }
33550
+ this.dnd.draggedFigure = undefined;
33551
+ this.dnd.horizontalSnap = undefined;
33552
+ this.dnd.verticalSnap = undefined;
33553
+ this.dnd.cancelDnd = undefined;
33554
+ }
33555
+ });
33530
33556
  }
33531
33557
  getVisibleFigures() {
33532
33558
  const visibleFigures = this.env.model.getters.getVisibleFigures();
33533
33559
  if (this.dnd.draggedFigure &&
33534
33560
  !visibleFigures.some((figure) => figure.id === this.dnd.draggedFigure?.id)) {
33535
- visibleFigures.push(this.env.model.getters.getFigure(this.env.model.getters.getActiveSheetId(), this.dnd.draggedFigure?.id));
33561
+ const draggedFigure = this.env.model.getters.getFigure(this.env.model.getters.getActiveSheetId(), this.dnd.draggedFigure?.id);
33562
+ if (draggedFigure) {
33563
+ visibleFigures.push(draggedFigure);
33564
+ }
33536
33565
  }
33537
33566
  return visibleFigures;
33538
33567
  }
@@ -33651,7 +33680,7 @@ class FiguresContainer extends owl.Component {
33651
33680
  this.dnd.verticalSnap = undefined;
33652
33681
  this.env.model.dispatch("UPDATE_FIGURE", { sheetId, id: figure.id, x, y });
33653
33682
  };
33654
- startDnd(onMouseMove, onMouseUp);
33683
+ this.dnd.cancelDnd = startDnd(onMouseMove, onMouseUp);
33655
33684
  }
33656
33685
  /**
33657
33686
  * Initialize the resize of a figure with mouse movements
@@ -33699,7 +33728,7 @@ class FiguresContainer extends owl.Component {
33699
33728
  this.dnd.horizontalSnap = undefined;
33700
33729
  this.dnd.verticalSnap = undefined;
33701
33730
  };
33702
- startDnd(onMouseMove, onMouseUp);
33731
+ this.dnd.cancelDnd = startDnd(onMouseMove, onMouseUp);
33703
33732
  }
33704
33733
  getOtherFigures(figId) {
33705
33734
  return this.getVisibleFigures().filter((f) => f.id !== figId);
@@ -37659,7 +37688,7 @@ function extractStyle(cell, data) {
37659
37688
  vertical: style.verticalAlign
37660
37689
  ? V_ALIGNMENT_EXPORT_CONVERSION_MAP[style.verticalAlign]
37661
37690
  : undefined,
37662
- wrapText: style.wrapping === "wrap",
37691
+ wrapText: style.wrapping === "wrap" || cell.content?.includes(NEWLINE) ? true : undefined,
37663
37692
  },
37664
37693
  };
37665
37694
  styles.font["strike"] = !!style?.strikethrough || undefined;
@@ -38111,9 +38140,8 @@ function convertRows(sheet, numberOfRows, headerGroups) {
38111
38140
  }
38112
38141
  return rows;
38113
38142
  }
38114
- /** Remove newlines (\n) in shared strings, We do not support them */
38115
38143
  function convertSharedStrings(xlsxSharedStrings) {
38116
- return xlsxSharedStrings.map((str) => str.replace(/\n/g, ""));
38144
+ return xlsxSharedStrings.map(replaceNewLines);
38117
38145
  }
38118
38146
  function convertCells(sheet, data, sheetDims, warningManager) {
38119
38147
  const cells = {};
@@ -38955,15 +38983,10 @@ class XlsxMiscExtractor extends XlsxBaseExtractor {
38955
38983
  getSharedStrings() {
38956
38984
  return this.mapOnElements({ parent: this.rootFile.file.xml, query: "si" }, (ssElement) => {
38957
38985
  // Shared string can either be a simple text, or a rich text (text with formatting, possibly in multiple parts)
38958
- if (ssElement.children[0].tagName === "t") {
38959
- return this.extractTextContent(ssElement) || "";
38960
- }
38961
38986
  // We don't support rich text formatting, we'll only extract the text
38962
- else {
38963
- return this.mapOnElements({ parent: ssElement, query: "t" }, (textElement) => {
38964
- return this.extractTextContent(textElement) || "";
38965
- }).join("");
38966
- }
38987
+ return this.mapOnElements({ parent: ssElement, query: "t" }, (textElement) => {
38988
+ return this.extractTextContent(textElement) || "";
38989
+ }).join("");
38967
38990
  });
38968
38991
  }
38969
38992
  }
@@ -41857,7 +41880,7 @@ class CellPlugin extends CorePlugin {
41857
41880
  const before = this.getters.getCell({ sheetId, col, row });
41858
41881
  const hasContent = "content" in after || "formula" in after;
41859
41882
  // Compute the new cell properties
41860
- const afterContent = hasContent ? replaceSpecialSpaces(after?.content) : before?.content || "";
41883
+ const afterContent = hasContent ? replaceNewLines(after?.content) : before?.content || "";
41861
41884
  let style;
41862
41885
  if (after.style !== undefined) {
41863
41886
  style = after.style || undefined;
@@ -54179,6 +54202,7 @@ class SheetViewPlugin extends UIPlugin {
54179
54202
  break;
54180
54203
  case "DELETE_SHEET":
54181
54204
  this.cleanViewports();
54205
+ this.sheetsWithDirtyViewports.delete(cmd.sheetId);
54182
54206
  break;
54183
54207
  case "ACTIVATE_SHEET":
54184
54208
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
@@ -56149,7 +56173,7 @@ class ActionButton extends owl.Component {
56149
56173
  setup() {
56150
56174
  owl.onWillUpdateProps((nextProps) => {
56151
56175
  if (nextProps.action !== this.props.action) {
56152
- this.actionButton = createAction(this.props.action);
56176
+ this.actionButton = createAction(nextProps.action);
56153
56177
  }
56154
56178
  });
56155
56179
  }
@@ -56416,7 +56440,6 @@ css /* scss */ `
56416
56440
  height: fit-content;
56417
56441
  margin-top: -1px;
56418
56442
  border: 1px solid;
56419
- z-index: ${ComponentsImportance.TopBarComposer};
56420
56443
 
56421
56444
  .o-composer:empty:not(:focus):not(.active)::before {
56422
56445
  content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
@@ -56458,6 +56481,7 @@ class TopBarComposer extends owl.Component {
56458
56481
  }
56459
56482
  return cssPropertiesToCss({
56460
56483
  "border-color": SELECTION_BORDER_COLOR,
56484
+ "z-index": String(ComponentsImportance.TopBarComposer),
56461
56485
  });
56462
56486
  }
56463
56487
  get delimitation() {
@@ -60241,7 +60265,12 @@ function createSharedStrings(strings) {
60241
60265
  ["count", strings.length],
60242
60266
  ["uniqueCount", strings.length],
60243
60267
  ];
60244
- const stringNodes = strings.map((string) => escapeXml /*xml*/ `<si><t>${string}</t></si>`);
60268
+ const stringNodes = strings.map((string) => {
60269
+ if (string.trim() !== string) {
60270
+ return escapeXml /*xml*/ `<si><t xml:space="preserve">${string}</t></si>`;
60271
+ }
60272
+ return escapeXml /*xml*/ `<si><t>${string}</t></si>`;
60273
+ });
60245
60274
  const xml = escapeXml /*xml*/ `
60246
60275
  <sst ${formatAttributes(namespaces)}>
60247
60276
  ${joinXmlNodes(stringNodes)}
@@ -61006,6 +61035,6 @@ exports.tokenColors = tokenColors;
61006
61035
  exports.tokenize = tokenize;
61007
61036
 
61008
61037
 
61009
- __info__.version = "17.2.28";
61010
- __info__.date = "2024-11-28T09:04:19.153Z";
61011
- __info__.hash = "fb1cbd8";
61038
+ __info__.version = "17.2.30";
61039
+ __info__.date = "2024-12-19T07:48:16.226Z";
61040
+ __info__.hash = "9a9ae31";
@@ -7311,6 +7311,7 @@ interface DndState {
7311
7311
  draggedFigure?: Figure;
7312
7312
  horizontalSnap?: Snap<HFigureAxisType>;
7313
7313
  verticalSnap?: Snap<VFigureAxisType>;
7314
+ cancelDnd: (() => void) | undefined;
7314
7315
  }
7315
7316
  /**
7316
7317
  * Each figure ⭐ is positioned inside a container `div` placed and sized
@@ -3,9 +3,9 @@
3
3
  /**
4
4
  * This file is generated by o-spreadsheet build tools. Do not edit it.
5
5
  * @see https://github.com/odoo/o-spreadsheet
6
- * @version 17.2.28
7
- * @date 2024-11-28T09:04:19.153Z
8
- * @hash fb1cbd8
6
+ * @version 17.2.30
7
+ * @date 2024-12-19T07:48:16.226Z
8
+ * @hash 9a9ae31
9
9
  */
10
10
 
11
11
  import { useEnv, useSubEnv, onWillUnmount, useComponent, status, Component, useRef, onMounted, useEffect, useState, onPatched, onWillPatch, onWillUpdateProps, useExternalListener, onWillStart, xml, useChildSubEnv, markRaw } from '@odoo/owl';
@@ -624,6 +624,7 @@ function removeFalsyAttributes(obj) {
624
624
  * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes
625
625
  */
626
626
  const whiteSpaceSpecialCharacters = [
627
+ " ",
627
628
  "\t",
628
629
  "\f",
629
630
  "\v",
@@ -638,17 +639,15 @@ const whiteSpaceSpecialCharacters = [
638
639
  String.fromCharCode(parseInt("3000", 16)),
639
640
  String.fromCharCode(parseInt("feff", 16)),
640
641
  ];
641
- const whiteSpaceRegexp = new RegExp(whiteSpaceSpecialCharacters.join("|") + "|(\r\n|\r|\n)", "g");
642
+ const whiteSpaceRegexp = new RegExp(whiteSpaceSpecialCharacters.join("|"), "g");
643
+ const newLineRegexp = /(\r\n|\r)/g;
642
644
  /**
643
- * Replace all the special spaces in a string (non-breaking, tabs, ...) by normal spaces, and all the
644
- * different newlines types by \n.
645
+ * Replace all different newlines characters by \n
645
646
  */
646
- function replaceSpecialSpaces(text) {
647
+ function replaceNewLines(text) {
647
648
  if (!text)
648
649
  return "";
649
- if (!whiteSpaceRegexp.test(text))
650
- return text;
651
- return text.replace(whiteSpaceRegexp, (match, newLine) => (newLine ? NEWLINE : " "));
650
+ return text.replace(newLineRegexp, NEWLINE);
652
651
  }
653
652
  /**
654
653
  * Determine if the numbers are consecutive.
@@ -5161,7 +5160,7 @@ class BorderClipboardHandler extends AbstractCellClipboardHandler {
5161
5160
  const POSTFIX_UNARY_OPERATORS = ["%"];
5162
5161
  const OPERATORS = "+,-,*,/,:,=,<>,>=,>,<=,<,^,&".split(",").concat(POSTFIX_UNARY_OPERATORS);
5163
5162
  function tokenize(str, locale = DEFAULT_LOCALE) {
5164
- str = replaceSpecialSpaces(str);
5163
+ str = replaceNewLines(str);
5165
5164
  const chars = new TokenizingChars(str);
5166
5165
  const result = [];
5167
5166
  while (!chars.isOver()) {
@@ -5308,12 +5307,12 @@ function tokenizeSpace(chars) {
5308
5307
  if (length) {
5309
5308
  return { type: "SPACE", value: NEWLINE.repeat(length) };
5310
5309
  }
5311
- while (chars.current === " ") {
5312
- length++;
5313
- chars.shift();
5310
+ let spaces = "";
5311
+ while (chars.current && chars.current.match(whiteSpaceRegexp)) {
5312
+ spaces += chars.shift();
5314
5313
  }
5315
- if (length) {
5316
- return { type: "SPACE", value: " ".repeat(length) };
5314
+ if (spaces) {
5315
+ return { type: "SPACE", value: spaces };
5317
5316
  }
5318
5317
  return null;
5319
5318
  }
@@ -18749,6 +18748,18 @@ const TEXT = {
18749
18748
  },
18750
18749
  isExported: true,
18751
18750
  };
18751
+ // -----------------------------------------------------------------------------
18752
+ // VALUE
18753
+ // -----------------------------------------------------------------------------
18754
+ const VALUE = {
18755
+ description: _t("Converts a string to a numeric value."),
18756
+ args: [arg("value (number)", _t("the string to be converted"))],
18757
+ returns: ["NUMBER"],
18758
+ compute: function (value) {
18759
+ return toNumber(value, this.locale);
18760
+ },
18761
+ isExported: true,
18762
+ };
18752
18763
 
18753
18764
  var text = /*#__PURE__*/Object.freeze({
18754
18765
  __proto__: null,
@@ -18771,7 +18782,8 @@ var text = /*#__PURE__*/Object.freeze({
18771
18782
  TEXT: TEXT,
18772
18783
  TEXTJOIN: TEXTJOIN,
18773
18784
  TRIM: TRIM,
18774
- UPPER: UPPER
18785
+ UPPER: UPPER,
18786
+ VALUE: VALUE
18775
18787
  });
18776
18788
 
18777
18789
  // -----------------------------------------------------------------------------
@@ -33513,6 +33525,7 @@ class FiguresContainer extends Component {
33513
33525
  draggedFigure: undefined,
33514
33526
  horizontalSnap: undefined,
33515
33527
  verticalSnap: undefined,
33528
+ cancelDnd: undefined,
33516
33529
  });
33517
33530
  setup() {
33518
33531
  onMounted(() => {
@@ -33525,12 +33538,28 @@ class FiguresContainer extends Component {
33525
33538
  // new rendering
33526
33539
  this.render();
33527
33540
  });
33541
+ onWillUpdateProps(() => {
33542
+ const sheetId = this.env.model.getters.getActiveSheetId();
33543
+ const draggedFigureId = this.dnd.draggedFigure?.id;
33544
+ if (draggedFigureId && !this.env.model.getters.getFigure(sheetId, draggedFigureId)) {
33545
+ if (this.dnd.cancelDnd) {
33546
+ this.dnd.cancelDnd();
33547
+ }
33548
+ this.dnd.draggedFigure = undefined;
33549
+ this.dnd.horizontalSnap = undefined;
33550
+ this.dnd.verticalSnap = undefined;
33551
+ this.dnd.cancelDnd = undefined;
33552
+ }
33553
+ });
33528
33554
  }
33529
33555
  getVisibleFigures() {
33530
33556
  const visibleFigures = this.env.model.getters.getVisibleFigures();
33531
33557
  if (this.dnd.draggedFigure &&
33532
33558
  !visibleFigures.some((figure) => figure.id === this.dnd.draggedFigure?.id)) {
33533
- visibleFigures.push(this.env.model.getters.getFigure(this.env.model.getters.getActiveSheetId(), this.dnd.draggedFigure?.id));
33559
+ const draggedFigure = this.env.model.getters.getFigure(this.env.model.getters.getActiveSheetId(), this.dnd.draggedFigure?.id);
33560
+ if (draggedFigure) {
33561
+ visibleFigures.push(draggedFigure);
33562
+ }
33534
33563
  }
33535
33564
  return visibleFigures;
33536
33565
  }
@@ -33649,7 +33678,7 @@ class FiguresContainer extends Component {
33649
33678
  this.dnd.verticalSnap = undefined;
33650
33679
  this.env.model.dispatch("UPDATE_FIGURE", { sheetId, id: figure.id, x, y });
33651
33680
  };
33652
- startDnd(onMouseMove, onMouseUp);
33681
+ this.dnd.cancelDnd = startDnd(onMouseMove, onMouseUp);
33653
33682
  }
33654
33683
  /**
33655
33684
  * Initialize the resize of a figure with mouse movements
@@ -33697,7 +33726,7 @@ class FiguresContainer extends Component {
33697
33726
  this.dnd.horizontalSnap = undefined;
33698
33727
  this.dnd.verticalSnap = undefined;
33699
33728
  };
33700
- startDnd(onMouseMove, onMouseUp);
33729
+ this.dnd.cancelDnd = startDnd(onMouseMove, onMouseUp);
33701
33730
  }
33702
33731
  getOtherFigures(figId) {
33703
33732
  return this.getVisibleFigures().filter((f) => f.id !== figId);
@@ -37657,7 +37686,7 @@ function extractStyle(cell, data) {
37657
37686
  vertical: style.verticalAlign
37658
37687
  ? V_ALIGNMENT_EXPORT_CONVERSION_MAP[style.verticalAlign]
37659
37688
  : undefined,
37660
- wrapText: style.wrapping === "wrap",
37689
+ wrapText: style.wrapping === "wrap" || cell.content?.includes(NEWLINE) ? true : undefined,
37661
37690
  },
37662
37691
  };
37663
37692
  styles.font["strike"] = !!style?.strikethrough || undefined;
@@ -38109,9 +38138,8 @@ function convertRows(sheet, numberOfRows, headerGroups) {
38109
38138
  }
38110
38139
  return rows;
38111
38140
  }
38112
- /** Remove newlines (\n) in shared strings, We do not support them */
38113
38141
  function convertSharedStrings(xlsxSharedStrings) {
38114
- return xlsxSharedStrings.map((str) => str.replace(/\n/g, ""));
38142
+ return xlsxSharedStrings.map(replaceNewLines);
38115
38143
  }
38116
38144
  function convertCells(sheet, data, sheetDims, warningManager) {
38117
38145
  const cells = {};
@@ -38953,15 +38981,10 @@ class XlsxMiscExtractor extends XlsxBaseExtractor {
38953
38981
  getSharedStrings() {
38954
38982
  return this.mapOnElements({ parent: this.rootFile.file.xml, query: "si" }, (ssElement) => {
38955
38983
  // Shared string can either be a simple text, or a rich text (text with formatting, possibly in multiple parts)
38956
- if (ssElement.children[0].tagName === "t") {
38957
- return this.extractTextContent(ssElement) || "";
38958
- }
38959
38984
  // We don't support rich text formatting, we'll only extract the text
38960
- else {
38961
- return this.mapOnElements({ parent: ssElement, query: "t" }, (textElement) => {
38962
- return this.extractTextContent(textElement) || "";
38963
- }).join("");
38964
- }
38985
+ return this.mapOnElements({ parent: ssElement, query: "t" }, (textElement) => {
38986
+ return this.extractTextContent(textElement) || "";
38987
+ }).join("");
38965
38988
  });
38966
38989
  }
38967
38990
  }
@@ -41855,7 +41878,7 @@ class CellPlugin extends CorePlugin {
41855
41878
  const before = this.getters.getCell({ sheetId, col, row });
41856
41879
  const hasContent = "content" in after || "formula" in after;
41857
41880
  // Compute the new cell properties
41858
- const afterContent = hasContent ? replaceSpecialSpaces(after?.content) : before?.content || "";
41881
+ const afterContent = hasContent ? replaceNewLines(after?.content) : before?.content || "";
41859
41882
  let style;
41860
41883
  if (after.style !== undefined) {
41861
41884
  style = after.style || undefined;
@@ -54177,6 +54200,7 @@ class SheetViewPlugin extends UIPlugin {
54177
54200
  break;
54178
54201
  case "DELETE_SHEET":
54179
54202
  this.cleanViewports();
54203
+ this.sheetsWithDirtyViewports.delete(cmd.sheetId);
54180
54204
  break;
54181
54205
  case "ACTIVATE_SHEET":
54182
54206
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
@@ -56147,7 +56171,7 @@ class ActionButton extends Component {
56147
56171
  setup() {
56148
56172
  onWillUpdateProps((nextProps) => {
56149
56173
  if (nextProps.action !== this.props.action) {
56150
- this.actionButton = createAction(this.props.action);
56174
+ this.actionButton = createAction(nextProps.action);
56151
56175
  }
56152
56176
  });
56153
56177
  }
@@ -56414,7 +56438,6 @@ css /* scss */ `
56414
56438
  height: fit-content;
56415
56439
  margin-top: -1px;
56416
56440
  border: 1px solid;
56417
- z-index: ${ComponentsImportance.TopBarComposer};
56418
56441
 
56419
56442
  .o-composer:empty:not(:focus):not(.active)::before {
56420
56443
  content: url("data:image/svg+xml,${encodeURIComponent(FX_SVG)}");
@@ -56456,6 +56479,7 @@ class TopBarComposer extends Component {
56456
56479
  }
56457
56480
  return cssPropertiesToCss({
56458
56481
  "border-color": SELECTION_BORDER_COLOR,
56482
+ "z-index": String(ComponentsImportance.TopBarComposer),
56459
56483
  });
56460
56484
  }
56461
56485
  get delimitation() {
@@ -60239,7 +60263,12 @@ function createSharedStrings(strings) {
60239
60263
  ["count", strings.length],
60240
60264
  ["uniqueCount", strings.length],
60241
60265
  ];
60242
- const stringNodes = strings.map((string) => escapeXml /*xml*/ `<si><t>${string}</t></si>`);
60266
+ const stringNodes = strings.map((string) => {
60267
+ if (string.trim() !== string) {
60268
+ return escapeXml /*xml*/ `<si><t xml:space="preserve">${string}</t></si>`;
60269
+ }
60270
+ return escapeXml /*xml*/ `<si><t>${string}</t></si>`;
60271
+ });
60243
60272
  const xml = escapeXml /*xml*/ `
60244
60273
  <sst ${formatAttributes(namespaces)}>
60245
60274
  ${joinXmlNodes(stringNodes)}
@@ -60963,6 +60992,6 @@ const constants = {
60963
60992
  export { AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, CellErrorType, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, addRenderingLayer, astToFormula, 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 };
60964
60993
 
60965
60994
 
60966
- __info__.version = "17.2.28";
60967
- __info__.date = "2024-11-28T09:04:19.153Z";
60968
- __info__.hash = "fb1cbd8";
60995
+ __info__.version = "17.2.30";
60996
+ __info__.date = "2024-12-19T07:48:16.226Z";
60997
+ __info__.hash = "9a9ae31";