@odoo/o-spreadsheet 17.0.36 → 17.0.38

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.36
6
- * @date 2024-08-26T13:49:04.635Z
7
- * @hash 6d5069e
5
+ * @version 17.0.38
6
+ * @date 2024-10-14T07:50:35.534Z
7
+ * @hash 8aa4b34
8
8
  */
9
9
 
10
10
  'use strict';
@@ -272,7 +272,7 @@ const DEFAULT_STYLE = {
272
272
  underline: false,
273
273
  fontSize: 10,
274
274
  fillColor: "",
275
- textColor: "#000000",
275
+ textColor: "",
276
276
  };
277
277
  const DEFAULT_VERTICAL_ALIGN = DEFAULT_STYLE.verticalAlign;
278
278
  const DEFAULT_WRAPPING_MODE = DEFAULT_STYLE.wrapping;
@@ -31421,6 +31421,18 @@ function convertOperator(operator) {
31421
31421
  // -------------------------------------
31422
31422
  // WORKSHEET HELPERS
31423
31423
  // -------------------------------------
31424
+ function getCellType(value) {
31425
+ switch (typeof value) {
31426
+ case "boolean":
31427
+ return "b";
31428
+ case "string":
31429
+ return "str";
31430
+ case "number":
31431
+ return "n";
31432
+ default:
31433
+ return undefined;
31434
+ }
31435
+ }
31424
31436
  function convertHeightToExcel(height) {
31425
31437
  return Math.round(HEIGHT_FACTOR * height * 100) / 100;
31426
31438
  }
@@ -44483,9 +44495,9 @@ class Session extends EventBus {
44483
44495
  /**
44484
44496
  * Notify the server that the user client left the collaborative session
44485
44497
  */
44486
- leave(data) {
44498
+ async leave(data) {
44487
44499
  if (Object.keys(this.clients).length === 1 && this.processedRevisions.size) {
44488
- this.snapshot(data());
44500
+ await this.snapshot(data());
44489
44501
  }
44490
44502
  delete this.clients[this.clientId];
44491
44503
  this.transportService.leave(this.clientId);
@@ -44498,12 +44510,12 @@ class Session extends EventBus {
44498
44510
  /**
44499
44511
  * Send a snapshot of the spreadsheet to the collaboration server
44500
44512
  */
44501
- snapshot(data) {
44513
+ async snapshot(data) {
44502
44514
  if (this.pendingMessages.length !== 0) {
44503
44515
  return;
44504
44516
  }
44505
44517
  const snapshotId = this.uuidGenerator.uuidv4();
44506
- this.transportService.sendMessage({
44518
+ await this.transportService.sendMessage({
44507
44519
  type: "SNAPSHOT",
44508
44520
  nextRevisionId: snapshotId,
44509
44521
  serverRevisionId: this.serverRevisionId,
@@ -44717,6 +44729,7 @@ class Session extends EventBus {
44717
44729
  case "REMOTE_REVISION":
44718
44730
  case "REVISION_REDONE":
44719
44731
  case "REVISION_UNDONE":
44732
+ case "SNAPSHOT_CREATED":
44720
44733
  return this.processedRevisions.has(message.nextRevisionId);
44721
44734
  default:
44722
44735
  return false;
@@ -49948,6 +49961,8 @@ class GridSelectionPlugin extends UIPlugin {
49948
49961
  this.selectedFigureId = null;
49949
49962
  break;
49950
49963
  }
49964
+ }
49965
+ finalize() {
49951
49966
  /** Any change to the selection has to be reflected in the selection processor. */
49952
49967
  this.selection.resetDefaultAnchor(this, deepCopy(this.gridSelection.anchor));
49953
49968
  }
@@ -50801,7 +50816,6 @@ class SheetViewPlugin extends UIPlugin {
50801
50816
  }
50802
50817
  }
50803
50818
  handle(cmd) {
50804
- this.cleanViewports();
50805
50819
  // changing the evaluation can hide/show rows because of data filters
50806
50820
  if (invalidateEvaluationCommands.has(cmd.type)) {
50807
50821
  for (const sheetId of this.getters.getSheetIds()) {
@@ -50817,6 +50831,7 @@ class SheetViewPlugin extends UIPlugin {
50817
50831
  break;
50818
50832
  case "UNDO":
50819
50833
  case "REDO":
50834
+ this.cleanViewports();
50820
50835
  for (const sheetId of this.getters.getSheetIds()) {
50821
50836
  this.sheetsWithDirtyViewports.add(sheetId);
50822
50837
  }
@@ -50870,6 +50885,9 @@ class SheetViewPlugin extends UIPlugin {
50870
50885
  }
50871
50886
  }
50872
50887
  break;
50888
+ case "DELETE_SHEET":
50889
+ this.cleanViewports();
50890
+ break;
50873
50891
  case "ACTIVATE_SHEET":
50874
50892
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
50875
50893
  break;
@@ -52011,6 +52029,17 @@ css /* scss */ `
52011
52029
  .o-bottom-bar-fade-in {
52012
52030
  background-image: linear-gradient(90deg, #cfcfcf, transparent 1%);
52013
52031
  }
52032
+
52033
+ .o-sheet-list {
52034
+ overflow-y: hidden;
52035
+ overflow-x: auto;
52036
+
52037
+ &::-webkit-scrollbar {
52038
+ display: none; /* Chrome */
52039
+ }
52040
+ -ms-overflow-style: none; /* IE and Edge */
52041
+ scrollbar-width: none; /* Firefox */
52042
+ }
52014
52043
  }
52015
52044
 
52016
52045
  .o-bottom-bar-arrows {
@@ -53893,7 +53922,7 @@ Spreadsheet.props = {
53893
53922
 
53894
53923
  class LocalTransportService {
53895
53924
  listeners = [];
53896
- sendMessage(message) {
53925
+ async sendMessage(message) {
53897
53926
  for (const { callback } of this.listeners) {
53898
53927
  callback(message);
53899
53928
  }
@@ -55780,17 +55809,13 @@ function addFormula(cell) {
55780
55809
  if (!formula) {
55781
55810
  return { attrs: [], node: escapeXml `` };
55782
55811
  }
55783
- const attrs = [];
55784
- let node = escapeXml ``;
55785
- let cycle = escapeXml ``;
55786
- const XlsxFormula = adaptFormulaToExcel(formula);
55787
- // hack for cycles : if we don't set a value (be it 0 or #VALUE!), it will appear as invisible on excel,
55788
- // Making it very hard for the client to find where the recursion is.
55789
- if (cell.value === CellErrorType.CircularDependency) {
55790
- attrs.push(["t", "str"]);
55791
- cycle = escapeXml /*xml*/ `<v>${cell.value}</v>`;
55812
+ const type = getCellType(cell.value);
55813
+ if (type === undefined) {
55814
+ return { attrs: [], node: escapeXml `` };
55792
55815
  }
55793
- node = escapeXml /*xml*/ `<f>${XlsxFormula}</f>${cycle}`;
55816
+ const attrs = [["t", type]];
55817
+ const XlsxFormula = adaptFormulaToExcel(formula);
55818
+ const node = escapeXml /*xml*/ `<f>${XlsxFormula}</f><v>${cell.value}</v>`;
55794
55819
  return { attrs, node };
55795
55820
  }
55796
55821
  function addContent(content, sharedStrings, forceString = false) {
@@ -57118,8 +57143,8 @@ class Model extends EventBus {
57118
57143
  joinSession() {
57119
57144
  this.session.join(this.config.client);
57120
57145
  }
57121
- leaveSession() {
57122
- this.session.leave(lazy(() => this.exportData()));
57146
+ async leaveSession() {
57147
+ await this.session.leave(lazy(() => this.exportData()));
57123
57148
  }
57124
57149
  setupUiPlugin(Plugin) {
57125
57150
  const plugin = new Plugin(this.uiPluginConfig);
@@ -57622,6 +57647,6 @@ exports.setTranslationMethod = setTranslationMethod;
57622
57647
  exports.tokenize = tokenize;
57623
57648
 
57624
57649
 
57625
- __info__.version = "17.0.36";
57626
- __info__.date = "2024-08-26T13:49:04.635Z";
57627
- __info__.hash = "6d5069e";
57650
+ __info__.version = "17.0.38";
57651
+ __info__.date = "2024-10-14T07:50:35.534Z";
57652
+ __info__.hash = "8aa4b34";
@@ -755,7 +755,7 @@ interface TransportService<T = any> {
755
755
  /**
756
756
  * Send a message to all clients
757
757
  */
758
- sendMessage: (message: T) => void;
758
+ sendMessage: (message: T) => Promise<void>;
759
759
  /**
760
760
  * Register a callback function which will be called each time
761
761
  * a new message is received.
@@ -852,11 +852,11 @@ declare class Session extends EventBus<CollaborativeEvent> {
852
852
  /**
853
853
  * Notify the server that the user client left the collaborative session
854
854
  */
855
- leave(data: Lazy<WorkbookData>): void;
855
+ leave(data: Lazy<WorkbookData>): Promise<void>;
856
856
  /**
857
857
  * Send a snapshot of the spreadsheet to the collaboration server
858
858
  */
859
- snapshot(data: WorkbookData): void;
859
+ snapshot(data: WorkbookData): Promise<void>;
860
860
  getClient(): Client;
861
861
  getConnectedClients(): Set<Client>;
862
862
  getRevisionId(): UID;
@@ -1261,7 +1261,7 @@ declare class Model extends EventBus<any> implements CommandDispatcher {
1261
1261
  private readonly coreHandlers;
1262
1262
  constructor(data?: any, config?: Partial<ModelConfig>, stateUpdateMessages?: StateUpdateMessage[], uuidGenerator?: UuidGenerator, verboseImport?: boolean);
1263
1263
  joinSession(): void;
1264
- leaveSession(): void;
1264
+ leaveSession(): Promise<void>;
1265
1265
  private setupUiPlugin;
1266
1266
  /**
1267
1267
  * Initialize and properly configure a plugin.
@@ -4949,6 +4949,7 @@ declare class GridSelectionPlugin extends UIPlugin {
4949
4949
  allowDispatch(cmd: LocalCommand): CommandResult;
4950
4950
  private handleEvent;
4951
4951
  handle(cmd: Command): void;
4952
+ finalize(): void;
4952
4953
  isGridSelectionActive(): boolean;
4953
4954
  getActiveSheet(): Readonly<Sheet>;
4954
4955
  getActiveSheetId(): UID;
@@ -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.36
6
- * @date 2024-08-26T13:49:04.635Z
7
- * @hash 6d5069e
5
+ * @version 17.0.38
6
+ * @date 2024-10-14T07:50:35.534Z
7
+ * @hash 8aa4b34
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';
@@ -270,7 +270,7 @@ const DEFAULT_STYLE = {
270
270
  underline: false,
271
271
  fontSize: 10,
272
272
  fillColor: "",
273
- textColor: "#000000",
273
+ textColor: "",
274
274
  };
275
275
  const DEFAULT_VERTICAL_ALIGN = DEFAULT_STYLE.verticalAlign;
276
276
  const DEFAULT_WRAPPING_MODE = DEFAULT_STYLE.wrapping;
@@ -31419,6 +31419,18 @@ function convertOperator(operator) {
31419
31419
  // -------------------------------------
31420
31420
  // WORKSHEET HELPERS
31421
31421
  // -------------------------------------
31422
+ function getCellType(value) {
31423
+ switch (typeof value) {
31424
+ case "boolean":
31425
+ return "b";
31426
+ case "string":
31427
+ return "str";
31428
+ case "number":
31429
+ return "n";
31430
+ default:
31431
+ return undefined;
31432
+ }
31433
+ }
31422
31434
  function convertHeightToExcel(height) {
31423
31435
  return Math.round(HEIGHT_FACTOR * height * 100) / 100;
31424
31436
  }
@@ -44481,9 +44493,9 @@ class Session extends EventBus {
44481
44493
  /**
44482
44494
  * Notify the server that the user client left the collaborative session
44483
44495
  */
44484
- leave(data) {
44496
+ async leave(data) {
44485
44497
  if (Object.keys(this.clients).length === 1 && this.processedRevisions.size) {
44486
- this.snapshot(data());
44498
+ await this.snapshot(data());
44487
44499
  }
44488
44500
  delete this.clients[this.clientId];
44489
44501
  this.transportService.leave(this.clientId);
@@ -44496,12 +44508,12 @@ class Session extends EventBus {
44496
44508
  /**
44497
44509
  * Send a snapshot of the spreadsheet to the collaboration server
44498
44510
  */
44499
- snapshot(data) {
44511
+ async snapshot(data) {
44500
44512
  if (this.pendingMessages.length !== 0) {
44501
44513
  return;
44502
44514
  }
44503
44515
  const snapshotId = this.uuidGenerator.uuidv4();
44504
- this.transportService.sendMessage({
44516
+ await this.transportService.sendMessage({
44505
44517
  type: "SNAPSHOT",
44506
44518
  nextRevisionId: snapshotId,
44507
44519
  serverRevisionId: this.serverRevisionId,
@@ -44715,6 +44727,7 @@ class Session extends EventBus {
44715
44727
  case "REMOTE_REVISION":
44716
44728
  case "REVISION_REDONE":
44717
44729
  case "REVISION_UNDONE":
44730
+ case "SNAPSHOT_CREATED":
44718
44731
  return this.processedRevisions.has(message.nextRevisionId);
44719
44732
  default:
44720
44733
  return false;
@@ -49946,6 +49959,8 @@ class GridSelectionPlugin extends UIPlugin {
49946
49959
  this.selectedFigureId = null;
49947
49960
  break;
49948
49961
  }
49962
+ }
49963
+ finalize() {
49949
49964
  /** Any change to the selection has to be reflected in the selection processor. */
49950
49965
  this.selection.resetDefaultAnchor(this, deepCopy(this.gridSelection.anchor));
49951
49966
  }
@@ -50799,7 +50814,6 @@ class SheetViewPlugin extends UIPlugin {
50799
50814
  }
50800
50815
  }
50801
50816
  handle(cmd) {
50802
- this.cleanViewports();
50803
50817
  // changing the evaluation can hide/show rows because of data filters
50804
50818
  if (invalidateEvaluationCommands.has(cmd.type)) {
50805
50819
  for (const sheetId of this.getters.getSheetIds()) {
@@ -50815,6 +50829,7 @@ class SheetViewPlugin extends UIPlugin {
50815
50829
  break;
50816
50830
  case "UNDO":
50817
50831
  case "REDO":
50832
+ this.cleanViewports();
50818
50833
  for (const sheetId of this.getters.getSheetIds()) {
50819
50834
  this.sheetsWithDirtyViewports.add(sheetId);
50820
50835
  }
@@ -50868,6 +50883,9 @@ class SheetViewPlugin extends UIPlugin {
50868
50883
  }
50869
50884
  }
50870
50885
  break;
50886
+ case "DELETE_SHEET":
50887
+ this.cleanViewports();
50888
+ break;
50871
50889
  case "ACTIVATE_SHEET":
50872
50890
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
50873
50891
  break;
@@ -52009,6 +52027,17 @@ css /* scss */ `
52009
52027
  .o-bottom-bar-fade-in {
52010
52028
  background-image: linear-gradient(90deg, #cfcfcf, transparent 1%);
52011
52029
  }
52030
+
52031
+ .o-sheet-list {
52032
+ overflow-y: hidden;
52033
+ overflow-x: auto;
52034
+
52035
+ &::-webkit-scrollbar {
52036
+ display: none; /* Chrome */
52037
+ }
52038
+ -ms-overflow-style: none; /* IE and Edge */
52039
+ scrollbar-width: none; /* Firefox */
52040
+ }
52012
52041
  }
52013
52042
 
52014
52043
  .o-bottom-bar-arrows {
@@ -53891,7 +53920,7 @@ Spreadsheet.props = {
53891
53920
 
53892
53921
  class LocalTransportService {
53893
53922
  listeners = [];
53894
- sendMessage(message) {
53923
+ async sendMessage(message) {
53895
53924
  for (const { callback } of this.listeners) {
53896
53925
  callback(message);
53897
53926
  }
@@ -55778,17 +55807,13 @@ function addFormula(cell) {
55778
55807
  if (!formula) {
55779
55808
  return { attrs: [], node: escapeXml `` };
55780
55809
  }
55781
- const attrs = [];
55782
- let node = escapeXml ``;
55783
- let cycle = escapeXml ``;
55784
- const XlsxFormula = adaptFormulaToExcel(formula);
55785
- // hack for cycles : if we don't set a value (be it 0 or #VALUE!), it will appear as invisible on excel,
55786
- // Making it very hard for the client to find where the recursion is.
55787
- if (cell.value === CellErrorType.CircularDependency) {
55788
- attrs.push(["t", "str"]);
55789
- cycle = escapeXml /*xml*/ `<v>${cell.value}</v>`;
55810
+ const type = getCellType(cell.value);
55811
+ if (type === undefined) {
55812
+ return { attrs: [], node: escapeXml `` };
55790
55813
  }
55791
- node = escapeXml /*xml*/ `<f>${XlsxFormula}</f>${cycle}`;
55814
+ const attrs = [["t", type]];
55815
+ const XlsxFormula = adaptFormulaToExcel(formula);
55816
+ const node = escapeXml /*xml*/ `<f>${XlsxFormula}</f><v>${cell.value}</v>`;
55792
55817
  return { attrs, node };
55793
55818
  }
55794
55819
  function addContent(content, sharedStrings, forceString = false) {
@@ -57116,8 +57141,8 @@ class Model extends EventBus {
57116
57141
  joinSession() {
57117
57142
  this.session.join(this.config.client);
57118
57143
  }
57119
- leaveSession() {
57120
- this.session.leave(lazy(() => this.exportData()));
57144
+ async leaveSession() {
57145
+ await this.session.leave(lazy(() => this.exportData()));
57121
57146
  }
57122
57147
  setupUiPlugin(Plugin) {
57123
57148
  const plugin = new Plugin(this.uiPluginConfig);
@@ -57585,6 +57610,6 @@ const constants = {
57585
57610
  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 };
57586
57611
 
57587
57612
 
57588
- __info__.version = "17.0.36";
57589
- __info__.date = "2024-08-26T13:49:04.635Z";
57590
- __info__.hash = "6d5069e";
57613
+ __info__.version = "17.0.38";
57614
+ __info__.date = "2024-10-14T07:50:35.534Z";
57615
+ __info__.hash = "8aa4b34";
@@ -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.36
6
- * @date 2024-08-26T13:49:04.635Z
7
- * @hash 6d5069e
5
+ * @version 17.0.38
6
+ * @date 2024-10-14T07:50:35.534Z
7
+ * @hash 8aa4b34
8
8
  */
9
9
 
10
10
  (function (exports, owl) {
@@ -271,7 +271,7 @@
271
271
  underline: false,
272
272
  fontSize: 10,
273
273
  fillColor: "",
274
- textColor: "#000000",
274
+ textColor: "",
275
275
  };
276
276
  const DEFAULT_VERTICAL_ALIGN = DEFAULT_STYLE.verticalAlign;
277
277
  const DEFAULT_WRAPPING_MODE = DEFAULT_STYLE.wrapping;
@@ -31420,6 +31420,18 @@
31420
31420
  // -------------------------------------
31421
31421
  // WORKSHEET HELPERS
31422
31422
  // -------------------------------------
31423
+ function getCellType(value) {
31424
+ switch (typeof value) {
31425
+ case "boolean":
31426
+ return "b";
31427
+ case "string":
31428
+ return "str";
31429
+ case "number":
31430
+ return "n";
31431
+ default:
31432
+ return undefined;
31433
+ }
31434
+ }
31423
31435
  function convertHeightToExcel(height) {
31424
31436
  return Math.round(HEIGHT_FACTOR * height * 100) / 100;
31425
31437
  }
@@ -44482,9 +44494,9 @@
44482
44494
  /**
44483
44495
  * Notify the server that the user client left the collaborative session
44484
44496
  */
44485
- leave(data) {
44497
+ async leave(data) {
44486
44498
  if (Object.keys(this.clients).length === 1 && this.processedRevisions.size) {
44487
- this.snapshot(data());
44499
+ await this.snapshot(data());
44488
44500
  }
44489
44501
  delete this.clients[this.clientId];
44490
44502
  this.transportService.leave(this.clientId);
@@ -44497,12 +44509,12 @@
44497
44509
  /**
44498
44510
  * Send a snapshot of the spreadsheet to the collaboration server
44499
44511
  */
44500
- snapshot(data) {
44512
+ async snapshot(data) {
44501
44513
  if (this.pendingMessages.length !== 0) {
44502
44514
  return;
44503
44515
  }
44504
44516
  const snapshotId = this.uuidGenerator.uuidv4();
44505
- this.transportService.sendMessage({
44517
+ await this.transportService.sendMessage({
44506
44518
  type: "SNAPSHOT",
44507
44519
  nextRevisionId: snapshotId,
44508
44520
  serverRevisionId: this.serverRevisionId,
@@ -44716,6 +44728,7 @@
44716
44728
  case "REMOTE_REVISION":
44717
44729
  case "REVISION_REDONE":
44718
44730
  case "REVISION_UNDONE":
44731
+ case "SNAPSHOT_CREATED":
44719
44732
  return this.processedRevisions.has(message.nextRevisionId);
44720
44733
  default:
44721
44734
  return false;
@@ -49947,6 +49960,8 @@
49947
49960
  this.selectedFigureId = null;
49948
49961
  break;
49949
49962
  }
49963
+ }
49964
+ finalize() {
49950
49965
  /** Any change to the selection has to be reflected in the selection processor. */
49951
49966
  this.selection.resetDefaultAnchor(this, deepCopy(this.gridSelection.anchor));
49952
49967
  }
@@ -50800,7 +50815,6 @@
50800
50815
  }
50801
50816
  }
50802
50817
  handle(cmd) {
50803
- this.cleanViewports();
50804
50818
  // changing the evaluation can hide/show rows because of data filters
50805
50819
  if (invalidateEvaluationCommands.has(cmd.type)) {
50806
50820
  for (const sheetId of this.getters.getSheetIds()) {
@@ -50816,6 +50830,7 @@
50816
50830
  break;
50817
50831
  case "UNDO":
50818
50832
  case "REDO":
50833
+ this.cleanViewports();
50819
50834
  for (const sheetId of this.getters.getSheetIds()) {
50820
50835
  this.sheetsWithDirtyViewports.add(sheetId);
50821
50836
  }
@@ -50869,6 +50884,9 @@
50869
50884
  }
50870
50885
  }
50871
50886
  break;
50887
+ case "DELETE_SHEET":
50888
+ this.cleanViewports();
50889
+ break;
50872
50890
  case "ACTIVATE_SHEET":
50873
50891
  this.sheetsWithDirtyViewports.add(cmd.sheetIdTo);
50874
50892
  break;
@@ -52010,6 +52028,17 @@
52010
52028
  .o-bottom-bar-fade-in {
52011
52029
  background-image: linear-gradient(90deg, #cfcfcf, transparent 1%);
52012
52030
  }
52031
+
52032
+ .o-sheet-list {
52033
+ overflow-y: hidden;
52034
+ overflow-x: auto;
52035
+
52036
+ &::-webkit-scrollbar {
52037
+ display: none; /* Chrome */
52038
+ }
52039
+ -ms-overflow-style: none; /* IE and Edge */
52040
+ scrollbar-width: none; /* Firefox */
52041
+ }
52013
52042
  }
52014
52043
 
52015
52044
  .o-bottom-bar-arrows {
@@ -53892,7 +53921,7 @@
53892
53921
 
53893
53922
  class LocalTransportService {
53894
53923
  listeners = [];
53895
- sendMessage(message) {
53924
+ async sendMessage(message) {
53896
53925
  for (const { callback } of this.listeners) {
53897
53926
  callback(message);
53898
53927
  }
@@ -55779,17 +55808,13 @@
55779
55808
  if (!formula) {
55780
55809
  return { attrs: [], node: escapeXml `` };
55781
55810
  }
55782
- const attrs = [];
55783
- let node = escapeXml ``;
55784
- let cycle = escapeXml ``;
55785
- const XlsxFormula = adaptFormulaToExcel(formula);
55786
- // hack for cycles : if we don't set a value (be it 0 or #VALUE!), it will appear as invisible on excel,
55787
- // Making it very hard for the client to find where the recursion is.
55788
- if (cell.value === CellErrorType.CircularDependency) {
55789
- attrs.push(["t", "str"]);
55790
- cycle = escapeXml /*xml*/ `<v>${cell.value}</v>`;
55811
+ const type = getCellType(cell.value);
55812
+ if (type === undefined) {
55813
+ return { attrs: [], node: escapeXml `` };
55791
55814
  }
55792
- node = escapeXml /*xml*/ `<f>${XlsxFormula}</f>${cycle}`;
55815
+ const attrs = [["t", type]];
55816
+ const XlsxFormula = adaptFormulaToExcel(formula);
55817
+ const node = escapeXml /*xml*/ `<f>${XlsxFormula}</f><v>${cell.value}</v>`;
55793
55818
  return { attrs, node };
55794
55819
  }
55795
55820
  function addContent(content, sharedStrings, forceString = false) {
@@ -57117,8 +57142,8 @@
57117
57142
  joinSession() {
57118
57143
  this.session.join(this.config.client);
57119
57144
  }
57120
- leaveSession() {
57121
- this.session.leave(lazy(() => this.exportData()));
57145
+ async leaveSession() {
57146
+ await this.session.leave(lazy(() => this.exportData()));
57122
57147
  }
57123
57148
  setupUiPlugin(Plugin) {
57124
57149
  const plugin = new Plugin(this.uiPluginConfig);
@@ -57621,9 +57646,9 @@
57621
57646
  exports.tokenize = tokenize;
57622
57647
 
57623
57648
 
57624
- __info__.version = "17.0.36";
57625
- __info__.date = "2024-08-26T13:49:04.635Z";
57626
- __info__.hash = "6d5069e";
57649
+ __info__.version = "17.0.38";
57650
+ __info__.date = "2024-10-14T07:50:35.534Z";
57651
+ __info__.hash = "8aa4b34";
57627
57652
 
57628
57653
 
57629
57654
  })(this.o_spreadsheet = this.o_spreadsheet || {}, owl);