@odoo/o-spreadsheet 17.2.22 → 17.2.23

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.22
7
- * @date 2024-08-26T13:48:03.927Z
8
- * @hash 4157fb8
6
+ * @version 17.2.23
7
+ * @date 2024-09-05T09:32:03.325Z
8
+ * @hash e5e2be8
9
9
  */
10
10
 
11
11
  'use strict';
@@ -5787,9 +5787,11 @@ class CellClipboardHandler extends AbstractCellClipboardHandler {
5787
5787
  const targetCell = this.getters.getEvaluatedCell(target);
5788
5788
  const originFormat = origin.cell?.format ?? origin.evaluatedCell.format;
5789
5789
  if (clipboardOption?.pasteOption === "asValue") {
5790
- const locale = this.getters.getLocale();
5791
- const content = formatValue(origin.evaluatedCell.value, { locale });
5792
- this.dispatch("UPDATE_CELL", { ...target, content, format: originFormat });
5790
+ this.dispatch("UPDATE_CELL", {
5791
+ ...target,
5792
+ content: origin.evaluatedCell.value?.toString() || "",
5793
+ format: originFormat,
5794
+ });
5793
5795
  return;
5794
5796
  }
5795
5797
  if (clipboardOption?.pasteOption === "onlyFormat") {
@@ -37590,6 +37592,18 @@ function convertOperator(operator) {
37590
37592
  // -------------------------------------
37591
37593
  // WORKSHEET HELPERS
37592
37594
  // -------------------------------------
37595
+ function getCellType(value) {
37596
+ switch (typeof value) {
37597
+ case "boolean":
37598
+ return "b";
37599
+ case "string":
37600
+ return "str";
37601
+ case "number":
37602
+ return "n";
37603
+ default:
37604
+ return undefined;
37605
+ }
37606
+ }
37593
37607
  function convertHeightToExcel(height) {
37594
37608
  return Math.round(HEIGHT_FACTOR * height * 100) / 100;
37595
37609
  }
@@ -50425,9 +50439,9 @@ class Session extends EventBus {
50425
50439
  /**
50426
50440
  * Notify the server that the user client left the collaborative session
50427
50441
  */
50428
- leave(data) {
50442
+ async leave(data) {
50429
50443
  if (Object.keys(this.clients).length === 1 && this.processedRevisions.size) {
50430
- this.snapshot(data());
50444
+ await this.snapshot(data());
50431
50445
  }
50432
50446
  delete this.clients[this.clientId];
50433
50447
  this.transportService.leave(this.clientId);
@@ -50440,12 +50454,12 @@ class Session extends EventBus {
50440
50454
  /**
50441
50455
  * Send a snapshot of the spreadsheet to the collaboration server
50442
50456
  */
50443
- snapshot(data) {
50457
+ async snapshot(data) {
50444
50458
  if (this.pendingMessages.length !== 0) {
50445
50459
  return;
50446
50460
  }
50447
50461
  const snapshotId = this.uuidGenerator.uuidv4();
50448
- this.transportService.sendMessage({
50462
+ await this.transportService.sendMessage({
50449
50463
  type: "SNAPSHOT",
50450
50464
  nextRevisionId: snapshotId,
50451
50465
  serverRevisionId: this.serverRevisionId,
@@ -53214,6 +53228,8 @@ class GridSelectionPlugin extends UIPlugin {
53214
53228
  this.selectedFigureId = null;
53215
53229
  break;
53216
53230
  }
53231
+ }
53232
+ finalize() {
53217
53233
  /** Any change to the selection has to be reflected in the selection processor. */
53218
53234
  this.selection.resetDefaultAnchor(this, deepCopy(this.gridSelection.anchor));
53219
53235
  }
@@ -54042,7 +54058,6 @@ class SheetViewPlugin extends UIPlugin {
54042
54058
  }
54043
54059
  }
54044
54060
  handle(cmd) {
54045
- this.cleanViewports();
54046
54061
  // changing the evaluation can hide/show rows because of data filters
54047
54062
  if (invalidateEvaluationCommands.has(cmd.type)) {
54048
54063
  for (const sheetId of this.getters.getSheetIds()) {
@@ -54058,6 +54073,7 @@ class SheetViewPlugin extends UIPlugin {
54058
54073
  break;
54059
54074
  case "UNDO":
54060
54075
  case "REDO":
54076
+ this.cleanViewports();
54061
54077
  for (const sheetId of this.getters.getSheetIds()) {
54062
54078
  this.sheetsWithDirtyViewports.add(sheetId);
54063
54079
  }
@@ -54112,6 +54128,9 @@ class SheetViewPlugin extends UIPlugin {
54112
54128
  }
54113
54129
  }
54114
54130
  break;
54131
+ case "DELETE_SHEET":
54132
+ this.cleanViewports();
54133
+ break;
54115
54134
  case "ACTIVATE_SHEET":
54116
54135
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
54117
54136
  break;
@@ -55272,6 +55291,17 @@ css /* scss */ `
55272
55291
  .o-bottom-bar-fade-in {
55273
55292
  background-image: linear-gradient(90deg, #cfcfcf, transparent 1%);
55274
55293
  }
55294
+
55295
+ .o-sheet-list {
55296
+ overflow-y: hidden;
55297
+ overflow-x: auto;
55298
+
55299
+ &::-webkit-scrollbar {
55300
+ display: none; /* Chrome */
55301
+ }
55302
+ -ms-overflow-style: none; /* IE and Edge */
55303
+ scrollbar-width: none; /* Firefox */
55304
+ }
55275
55305
  }
55276
55306
 
55277
55307
  .o-bottom-bar-arrows {
@@ -57168,7 +57198,7 @@ class Spreadsheet extends owl.Component {
57168
57198
 
57169
57199
  class LocalTransportService {
57170
57200
  listeners = [];
57171
- sendMessage(message) {
57201
+ async sendMessage(message) {
57172
57202
  for (const { callback } of this.listeners) {
57173
57203
  callback(message);
57174
57204
  }
@@ -59005,17 +59035,13 @@ function addFormula(cell) {
59005
59035
  if (!formula) {
59006
59036
  return { attrs: [], node: escapeXml `` };
59007
59037
  }
59008
- const attrs = [];
59009
- let node = escapeXml ``;
59010
- let cycle = escapeXml ``;
59011
- const XlsxFormula = adaptFormulaToExcel(formula);
59012
- // hack for cycles : if we don't set a value (be it 0 or #VALUE!), it will appear as invisible on excel,
59013
- // Making it very hard for the client to find where the recursion is.
59014
- if (cell.value === CellErrorType.CircularDependency) {
59015
- attrs.push(["t", "str"]);
59016
- cycle = escapeXml /*xml*/ `<v>${cell.value}</v>`;
59038
+ const type = getCellType(cell.value);
59039
+ if (type === undefined) {
59040
+ return { attrs: [], node: escapeXml `` };
59017
59041
  }
59018
- node = escapeXml /*xml*/ `<f>${XlsxFormula}</f>${cycle}`;
59042
+ const attrs = [["t", type]];
59043
+ const XlsxFormula = adaptFormulaToExcel(formula);
59044
+ const node = escapeXml /*xml*/ `<f>${XlsxFormula}</f><v>${cell.value}</v>`;
59019
59045
  return { attrs, node };
59020
59046
  }
59021
59047
  function addContent(content, sharedStrings, forceString = false) {
@@ -60367,8 +60393,8 @@ class Model extends EventBus {
60367
60393
  joinSession() {
60368
60394
  this.session.join(this.config.client);
60369
60395
  }
60370
- leaveSession() {
60371
- this.session.leave(lazy(() => this.exportData()));
60396
+ async leaveSession() {
60397
+ await this.session.leave(lazy(() => this.exportData()));
60372
60398
  }
60373
60399
  setupUiPlugin(Plugin) {
60374
60400
  const plugin = new Plugin(this.uiPluginConfig);
@@ -60922,6 +60948,6 @@ exports.tokenColors = tokenColors;
60922
60948
  exports.tokenize = tokenize;
60923
60949
 
60924
60950
 
60925
- __info__.version = "17.2.22";
60926
- __info__.date = "2024-08-26T13:48:03.927Z";
60927
- __info__.hash = "4157fb8";
60951
+ __info__.version = "17.2.23";
60952
+ __info__.date = "2024-09-05T09:32:03.325Z";
60953
+ __info__.hash = "e5e2be8";
@@ -3354,7 +3354,7 @@ interface TransportService<T = any> {
3354
3354
  /**
3355
3355
  * Send a message to all clients
3356
3356
  */
3357
- sendMessage: (message: T) => void;
3357
+ sendMessage: (message: T) => Promise<void>;
3358
3358
  /**
3359
3359
  * Register a callback function which will be called each time
3360
3360
  * a new message is received.
@@ -3451,11 +3451,11 @@ declare class Session extends EventBus<CollaborativeEvent> {
3451
3451
  /**
3452
3452
  * Notify the server that the user client left the collaborative session
3453
3453
  */
3454
- leave(data: Lazy<WorkbookData>): void;
3454
+ leave(data: Lazy<WorkbookData>): Promise<void>;
3455
3455
  /**
3456
3456
  * Send a snapshot of the spreadsheet to the collaboration server
3457
3457
  */
3458
- snapshot(data: WorkbookData): void;
3458
+ snapshot(data: WorkbookData): Promise<void>;
3459
3459
  getClient(): Client;
3460
3460
  getConnectedClients(): Set<Client>;
3461
3461
  getRevisionId(): UID;
@@ -4227,6 +4227,7 @@ declare class GridSelectionPlugin extends UIPlugin {
4227
4227
  allowDispatch(cmd: LocalCommand): CommandResult;
4228
4228
  private handleEvent;
4229
4229
  handle(cmd: Command): void;
4230
+ finalize(): void;
4230
4231
  isGridSelectionActive(): boolean;
4231
4232
  getActiveSheet(): Readonly<Sheet>;
4232
4233
  getActiveSheetId(): UID;
@@ -5167,7 +5168,7 @@ declare class Model extends EventBus<any> implements CommandDispatcher {
5167
5168
  private readonly coreHandlers;
5168
5169
  constructor(data?: any, config?: Partial<ModelConfig>, stateUpdateMessages?: StateUpdateMessage[], uuidGenerator?: UuidGenerator, verboseImport?: boolean);
5169
5170
  joinSession(): void;
5170
- leaveSession(): void;
5171
+ leaveSession(): Promise<void>;
5171
5172
  private setupUiPlugin;
5172
5173
  /**
5173
5174
  * Initialize and properly configure a plugin.
@@ -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.22
7
- * @date 2024-08-26T13:48:03.927Z
8
- * @hash 4157fb8
6
+ * @version 17.2.23
7
+ * @date 2024-09-05T09:32:03.325Z
8
+ * @hash e5e2be8
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';
@@ -5785,9 +5785,11 @@ class CellClipboardHandler extends AbstractCellClipboardHandler {
5785
5785
  const targetCell = this.getters.getEvaluatedCell(target);
5786
5786
  const originFormat = origin.cell?.format ?? origin.evaluatedCell.format;
5787
5787
  if (clipboardOption?.pasteOption === "asValue") {
5788
- const locale = this.getters.getLocale();
5789
- const content = formatValue(origin.evaluatedCell.value, { locale });
5790
- this.dispatch("UPDATE_CELL", { ...target, content, format: originFormat });
5788
+ this.dispatch("UPDATE_CELL", {
5789
+ ...target,
5790
+ content: origin.evaluatedCell.value?.toString() || "",
5791
+ format: originFormat,
5792
+ });
5791
5793
  return;
5792
5794
  }
5793
5795
  if (clipboardOption?.pasteOption === "onlyFormat") {
@@ -37588,6 +37590,18 @@ function convertOperator(operator) {
37588
37590
  // -------------------------------------
37589
37591
  // WORKSHEET HELPERS
37590
37592
  // -------------------------------------
37593
+ function getCellType(value) {
37594
+ switch (typeof value) {
37595
+ case "boolean":
37596
+ return "b";
37597
+ case "string":
37598
+ return "str";
37599
+ case "number":
37600
+ return "n";
37601
+ default:
37602
+ return undefined;
37603
+ }
37604
+ }
37591
37605
  function convertHeightToExcel(height) {
37592
37606
  return Math.round(HEIGHT_FACTOR * height * 100) / 100;
37593
37607
  }
@@ -50423,9 +50437,9 @@ class Session extends EventBus {
50423
50437
  /**
50424
50438
  * Notify the server that the user client left the collaborative session
50425
50439
  */
50426
- leave(data) {
50440
+ async leave(data) {
50427
50441
  if (Object.keys(this.clients).length === 1 && this.processedRevisions.size) {
50428
- this.snapshot(data());
50442
+ await this.snapshot(data());
50429
50443
  }
50430
50444
  delete this.clients[this.clientId];
50431
50445
  this.transportService.leave(this.clientId);
@@ -50438,12 +50452,12 @@ class Session extends EventBus {
50438
50452
  /**
50439
50453
  * Send a snapshot of the spreadsheet to the collaboration server
50440
50454
  */
50441
- snapshot(data) {
50455
+ async snapshot(data) {
50442
50456
  if (this.pendingMessages.length !== 0) {
50443
50457
  return;
50444
50458
  }
50445
50459
  const snapshotId = this.uuidGenerator.uuidv4();
50446
- this.transportService.sendMessage({
50460
+ await this.transportService.sendMessage({
50447
50461
  type: "SNAPSHOT",
50448
50462
  nextRevisionId: snapshotId,
50449
50463
  serverRevisionId: this.serverRevisionId,
@@ -53212,6 +53226,8 @@ class GridSelectionPlugin extends UIPlugin {
53212
53226
  this.selectedFigureId = null;
53213
53227
  break;
53214
53228
  }
53229
+ }
53230
+ finalize() {
53215
53231
  /** Any change to the selection has to be reflected in the selection processor. */
53216
53232
  this.selection.resetDefaultAnchor(this, deepCopy(this.gridSelection.anchor));
53217
53233
  }
@@ -54040,7 +54056,6 @@ class SheetViewPlugin extends UIPlugin {
54040
54056
  }
54041
54057
  }
54042
54058
  handle(cmd) {
54043
- this.cleanViewports();
54044
54059
  // changing the evaluation can hide/show rows because of data filters
54045
54060
  if (invalidateEvaluationCommands.has(cmd.type)) {
54046
54061
  for (const sheetId of this.getters.getSheetIds()) {
@@ -54056,6 +54071,7 @@ class SheetViewPlugin extends UIPlugin {
54056
54071
  break;
54057
54072
  case "UNDO":
54058
54073
  case "REDO":
54074
+ this.cleanViewports();
54059
54075
  for (const sheetId of this.getters.getSheetIds()) {
54060
54076
  this.sheetsWithDirtyViewports.add(sheetId);
54061
54077
  }
@@ -54110,6 +54126,9 @@ class SheetViewPlugin extends UIPlugin {
54110
54126
  }
54111
54127
  }
54112
54128
  break;
54129
+ case "DELETE_SHEET":
54130
+ this.cleanViewports();
54131
+ break;
54113
54132
  case "ACTIVATE_SHEET":
54114
54133
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
54115
54134
  break;
@@ -55270,6 +55289,17 @@ css /* scss */ `
55270
55289
  .o-bottom-bar-fade-in {
55271
55290
  background-image: linear-gradient(90deg, #cfcfcf, transparent 1%);
55272
55291
  }
55292
+
55293
+ .o-sheet-list {
55294
+ overflow-y: hidden;
55295
+ overflow-x: auto;
55296
+
55297
+ &::-webkit-scrollbar {
55298
+ display: none; /* Chrome */
55299
+ }
55300
+ -ms-overflow-style: none; /* IE and Edge */
55301
+ scrollbar-width: none; /* Firefox */
55302
+ }
55273
55303
  }
55274
55304
 
55275
55305
  .o-bottom-bar-arrows {
@@ -57166,7 +57196,7 @@ class Spreadsheet extends Component {
57166
57196
 
57167
57197
  class LocalTransportService {
57168
57198
  listeners = [];
57169
- sendMessage(message) {
57199
+ async sendMessage(message) {
57170
57200
  for (const { callback } of this.listeners) {
57171
57201
  callback(message);
57172
57202
  }
@@ -59003,17 +59033,13 @@ function addFormula(cell) {
59003
59033
  if (!formula) {
59004
59034
  return { attrs: [], node: escapeXml `` };
59005
59035
  }
59006
- const attrs = [];
59007
- let node = escapeXml ``;
59008
- let cycle = escapeXml ``;
59009
- const XlsxFormula = adaptFormulaToExcel(formula);
59010
- // hack for cycles : if we don't set a value (be it 0 or #VALUE!), it will appear as invisible on excel,
59011
- // Making it very hard for the client to find where the recursion is.
59012
- if (cell.value === CellErrorType.CircularDependency) {
59013
- attrs.push(["t", "str"]);
59014
- cycle = escapeXml /*xml*/ `<v>${cell.value}</v>`;
59036
+ const type = getCellType(cell.value);
59037
+ if (type === undefined) {
59038
+ return { attrs: [], node: escapeXml `` };
59015
59039
  }
59016
- node = escapeXml /*xml*/ `<f>${XlsxFormula}</f>${cycle}`;
59040
+ const attrs = [["t", type]];
59041
+ const XlsxFormula = adaptFormulaToExcel(formula);
59042
+ const node = escapeXml /*xml*/ `<f>${XlsxFormula}</f><v>${cell.value}</v>`;
59017
59043
  return { attrs, node };
59018
59044
  }
59019
59045
  function addContent(content, sharedStrings, forceString = false) {
@@ -60365,8 +60391,8 @@ class Model extends EventBus {
60365
60391
  joinSession() {
60366
60392
  this.session.join(this.config.client);
60367
60393
  }
60368
- leaveSession() {
60369
- this.session.leave(lazy(() => this.exportData()));
60394
+ async leaveSession() {
60395
+ await this.session.leave(lazy(() => this.exportData()));
60370
60396
  }
60371
60397
  setupUiPlugin(Plugin) {
60372
60398
  const plugin = new Plugin(this.uiPluginConfig);
@@ -60879,6 +60905,6 @@ const constants = {
60879
60905
  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 };
60880
60906
 
60881
60907
 
60882
- __info__.version = "17.2.22";
60883
- __info__.date = "2024-08-26T13:48:03.927Z";
60884
- __info__.hash = "4157fb8";
60908
+ __info__.version = "17.2.23";
60909
+ __info__.date = "2024-09-05T09:32:03.325Z";
60910
+ __info__.hash = "e5e2be8";
@@ -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.22
7
- * @date 2024-08-26T13:48:03.927Z
8
- * @hash 4157fb8
6
+ * @version 17.2.23
7
+ * @date 2024-09-05T09:32:03.325Z
8
+ * @hash e5e2be8
9
9
  */
10
10
 
11
11
  (function (exports, owl) {
@@ -5786,9 +5786,11 @@
5786
5786
  const targetCell = this.getters.getEvaluatedCell(target);
5787
5787
  const originFormat = origin.cell?.format ?? origin.evaluatedCell.format;
5788
5788
  if (clipboardOption?.pasteOption === "asValue") {
5789
- const locale = this.getters.getLocale();
5790
- const content = formatValue(origin.evaluatedCell.value, { locale });
5791
- this.dispatch("UPDATE_CELL", { ...target, content, format: originFormat });
5789
+ this.dispatch("UPDATE_CELL", {
5790
+ ...target,
5791
+ content: origin.evaluatedCell.value?.toString() || "",
5792
+ format: originFormat,
5793
+ });
5792
5794
  return;
5793
5795
  }
5794
5796
  if (clipboardOption?.pasteOption === "onlyFormat") {
@@ -37589,6 +37591,18 @@ stores.inject(MyMetaStore, storeInstance);
37589
37591
  // -------------------------------------
37590
37592
  // WORKSHEET HELPERS
37591
37593
  // -------------------------------------
37594
+ function getCellType(value) {
37595
+ switch (typeof value) {
37596
+ case "boolean":
37597
+ return "b";
37598
+ case "string":
37599
+ return "str";
37600
+ case "number":
37601
+ return "n";
37602
+ default:
37603
+ return undefined;
37604
+ }
37605
+ }
37592
37606
  function convertHeightToExcel(height) {
37593
37607
  return Math.round(HEIGHT_FACTOR * height * 100) / 100;
37594
37608
  }
@@ -50424,9 +50438,9 @@ stores.inject(MyMetaStore, storeInstance);
50424
50438
  /**
50425
50439
  * Notify the server that the user client left the collaborative session
50426
50440
  */
50427
- leave(data) {
50441
+ async leave(data) {
50428
50442
  if (Object.keys(this.clients).length === 1 && this.processedRevisions.size) {
50429
- this.snapshot(data());
50443
+ await this.snapshot(data());
50430
50444
  }
50431
50445
  delete this.clients[this.clientId];
50432
50446
  this.transportService.leave(this.clientId);
@@ -50439,12 +50453,12 @@ stores.inject(MyMetaStore, storeInstance);
50439
50453
  /**
50440
50454
  * Send a snapshot of the spreadsheet to the collaboration server
50441
50455
  */
50442
- snapshot(data) {
50456
+ async snapshot(data) {
50443
50457
  if (this.pendingMessages.length !== 0) {
50444
50458
  return;
50445
50459
  }
50446
50460
  const snapshotId = this.uuidGenerator.uuidv4();
50447
- this.transportService.sendMessage({
50461
+ await this.transportService.sendMessage({
50448
50462
  type: "SNAPSHOT",
50449
50463
  nextRevisionId: snapshotId,
50450
50464
  serverRevisionId: this.serverRevisionId,
@@ -53213,6 +53227,8 @@ stores.inject(MyMetaStore, storeInstance);
53213
53227
  this.selectedFigureId = null;
53214
53228
  break;
53215
53229
  }
53230
+ }
53231
+ finalize() {
53216
53232
  /** Any change to the selection has to be reflected in the selection processor. */
53217
53233
  this.selection.resetDefaultAnchor(this, deepCopy(this.gridSelection.anchor));
53218
53234
  }
@@ -54041,7 +54057,6 @@ stores.inject(MyMetaStore, storeInstance);
54041
54057
  }
54042
54058
  }
54043
54059
  handle(cmd) {
54044
- this.cleanViewports();
54045
54060
  // changing the evaluation can hide/show rows because of data filters
54046
54061
  if (invalidateEvaluationCommands.has(cmd.type)) {
54047
54062
  for (const sheetId of this.getters.getSheetIds()) {
@@ -54057,6 +54072,7 @@ stores.inject(MyMetaStore, storeInstance);
54057
54072
  break;
54058
54073
  case "UNDO":
54059
54074
  case "REDO":
54075
+ this.cleanViewports();
54060
54076
  for (const sheetId of this.getters.getSheetIds()) {
54061
54077
  this.sheetsWithDirtyViewports.add(sheetId);
54062
54078
  }
@@ -54111,6 +54127,9 @@ stores.inject(MyMetaStore, storeInstance);
54111
54127
  }
54112
54128
  }
54113
54129
  break;
54130
+ case "DELETE_SHEET":
54131
+ this.cleanViewports();
54132
+ break;
54114
54133
  case "ACTIVATE_SHEET":
54115
54134
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
54116
54135
  break;
@@ -55271,6 +55290,17 @@ stores.inject(MyMetaStore, storeInstance);
55271
55290
  .o-bottom-bar-fade-in {
55272
55291
  background-image: linear-gradient(90deg, #cfcfcf, transparent 1%);
55273
55292
  }
55293
+
55294
+ .o-sheet-list {
55295
+ overflow-y: hidden;
55296
+ overflow-x: auto;
55297
+
55298
+ &::-webkit-scrollbar {
55299
+ display: none; /* Chrome */
55300
+ }
55301
+ -ms-overflow-style: none; /* IE and Edge */
55302
+ scrollbar-width: none; /* Firefox */
55303
+ }
55274
55304
  }
55275
55305
 
55276
55306
  .o-bottom-bar-arrows {
@@ -57167,7 +57197,7 @@ stores.inject(MyMetaStore, storeInstance);
57167
57197
 
57168
57198
  class LocalTransportService {
57169
57199
  listeners = [];
57170
- sendMessage(message) {
57200
+ async sendMessage(message) {
57171
57201
  for (const { callback } of this.listeners) {
57172
57202
  callback(message);
57173
57203
  }
@@ -59004,17 +59034,13 @@ stores.inject(MyMetaStore, storeInstance);
59004
59034
  if (!formula) {
59005
59035
  return { attrs: [], node: escapeXml `` };
59006
59036
  }
59007
- const attrs = [];
59008
- let node = escapeXml ``;
59009
- let cycle = escapeXml ``;
59010
- const XlsxFormula = adaptFormulaToExcel(formula);
59011
- // hack for cycles : if we don't set a value (be it 0 or #VALUE!), it will appear as invisible on excel,
59012
- // Making it very hard for the client to find where the recursion is.
59013
- if (cell.value === CellErrorType.CircularDependency) {
59014
- attrs.push(["t", "str"]);
59015
- cycle = escapeXml /*xml*/ `<v>${cell.value}</v>`;
59037
+ const type = getCellType(cell.value);
59038
+ if (type === undefined) {
59039
+ return { attrs: [], node: escapeXml `` };
59016
59040
  }
59017
- node = escapeXml /*xml*/ `<f>${XlsxFormula}</f>${cycle}`;
59041
+ const attrs = [["t", type]];
59042
+ const XlsxFormula = adaptFormulaToExcel(formula);
59043
+ const node = escapeXml /*xml*/ `<f>${XlsxFormula}</f><v>${cell.value}</v>`;
59018
59044
  return { attrs, node };
59019
59045
  }
59020
59046
  function addContent(content, sharedStrings, forceString = false) {
@@ -60366,8 +60392,8 @@ stores.inject(MyMetaStore, storeInstance);
60366
60392
  joinSession() {
60367
60393
  this.session.join(this.config.client);
60368
60394
  }
60369
- leaveSession() {
60370
- this.session.leave(lazy(() => this.exportData()));
60395
+ async leaveSession() {
60396
+ await this.session.leave(lazy(() => this.exportData()));
60371
60397
  }
60372
60398
  setupUiPlugin(Plugin) {
60373
60399
  const plugin = new Plugin(this.uiPluginConfig);
@@ -60921,9 +60947,9 @@ stores.inject(MyMetaStore, storeInstance);
60921
60947
  exports.tokenize = tokenize;
60922
60948
 
60923
60949
 
60924
- __info__.version = "17.2.22";
60925
- __info__.date = "2024-08-26T13:48:03.927Z";
60926
- __info__.hash = "4157fb8";
60950
+ __info__.version = "17.2.23";
60951
+ __info__.date = "2024-09-05T09:32:03.325Z";
60952
+ __info__.hash = "e5e2be8";
60927
60953
 
60928
60954
 
60929
60955
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);