@odoo/o-spreadsheet 18.4.0-alpha.7 → 18.4.0-alpha.8

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 18.4.0-alpha.7
6
- * @date 2025-06-06T09:32:44.285Z
7
- * @hash 2bfbe64
5
+ * @version 18.4.0-alpha.8
6
+ * @date 2025-06-12T09:53:48.133Z
7
+ * @hash 9b7a8d0
8
8
  */
9
9
 
10
10
  'use strict';
@@ -132,7 +132,7 @@ class Registry {
132
132
 
133
133
  const CANVAS_SHIFT = 0.5;
134
134
  // Colors
135
- const HIGHLIGHT_COLOR = "#37A850";
135
+ const HIGHLIGHT_COLOR = "#017E84";
136
136
  const BACKGROUND_GRAY_COLOR = "#f5f5f5";
137
137
  const BACKGROUND_HEADER_COLOR = "#F8F9FA";
138
138
  const BACKGROUND_HEADER_SELECTED_COLOR = "#E8EAED";
@@ -145,7 +145,7 @@ const CELL_BORDER_COLOR = "#E2E3E3";
145
145
  const BACKGROUND_CHART_COLOR = "#FFFFFF";
146
146
  const DISABLED_TEXT_COLOR = "#CACACA";
147
147
  const DEFAULT_COLOR_SCALE_MIDPOINT_COLOR = 0xb6d7a8;
148
- const LINK_COLOR = "#017E84";
148
+ const LINK_COLOR = HIGHLIGHT_COLOR;
149
149
  const FILTERS_COLOR = "#188038";
150
150
  const SEPARATOR_COLOR = "#E0E2E4";
151
151
  const ICONS_COLOR = "#4A4F59";
@@ -174,7 +174,7 @@ const BUTTON_HOVER_BG = GRAY_300;
174
174
  const BUTTON_HOVER_TEXT_COLOR = "#111827";
175
175
  const BUTTON_ACTIVE_BG = "#e6f2f3";
176
176
  const BUTTON_ACTIVE_TEXT_COLOR = "#111827";
177
- const ACTION_COLOR = "#017E84";
177
+ const ACTION_COLOR = HIGHLIGHT_COLOR;
178
178
  const ACTION_COLOR_HOVER = "#01585c";
179
179
  const ALERT_WARNING_BG = "#FBEBCC";
180
180
  const ALERT_WARNING_BORDER = "#F8E2B3";
@@ -1568,6 +1568,19 @@ class AlternatingColorGenerator extends ColorGenerator {
1568
1568
  this.palette = getAlternatingColorsPalette(paletteSize).filter((c) => !preferredColors.includes(c));
1569
1569
  }
1570
1570
  }
1571
+ class AlternatingColorMap {
1572
+ availableColors;
1573
+ colors = {};
1574
+ constructor(paletteSize = 12) {
1575
+ this.availableColors = new AlternatingColorGenerator(paletteSize);
1576
+ }
1577
+ get(id) {
1578
+ if (!this.colors[id]) {
1579
+ this.colors[id] = this.availableColors.next();
1580
+ }
1581
+ return this.colors[id];
1582
+ }
1583
+ }
1571
1584
  /**
1572
1585
  * Returns a function that maps a value to a color using a color scale defined by the given
1573
1586
  * color/threshold values pairs.
@@ -5007,7 +5020,9 @@ function isTextFormat(format) {
5007
5020
  }
5008
5021
 
5009
5022
  function evaluateLiteral(literalCell, localeFormat) {
5010
- const value = isTextFormat(localeFormat.format) ? literalCell.content : literalCell.parsedValue;
5023
+ const value = isTextFormat(localeFormat.format) && literalCell.parsedValue !== null
5024
+ ? literalCell.content
5025
+ : literalCell.parsedValue;
5011
5026
  const functionResult = { value, format: localeFormat.format };
5012
5027
  return createEvaluatedCell(functionResult, localeFormat.locale);
5013
5028
  }
@@ -5056,6 +5071,9 @@ function _createEvaluatedCell(functionResult, locale, cell) {
5056
5071
  if (isEvaluationError(value)) {
5057
5072
  return errorCell(value, message);
5058
5073
  }
5074
+ if (value === null) {
5075
+ return emptyCell(format);
5076
+ }
5059
5077
  if (isTextFormat(format)) {
5060
5078
  // TO DO:
5061
5079
  // with the next line, the value of the cell is transformed depending on the format.
@@ -5063,9 +5081,6 @@ function _createEvaluatedCell(functionResult, locale, cell) {
5063
5081
  // to interpret the value as a number.
5064
5082
  return textCell(toString(value), format, formattedValue);
5065
5083
  }
5066
- if (value === null) {
5067
- return emptyCell(format);
5068
- }
5069
5084
  if (typeof value === "number") {
5070
5085
  if (isDateTimeFormat(format || "")) {
5071
5086
  return dateTimeCell(value, format, formattedValue);
@@ -19353,8 +19368,9 @@ const PIVOT = {
19353
19368
  arg("include_total (boolean, default=TRUE)", _t("Whether to include total/sub-totals or not.")),
19354
19369
  arg("include_column_titles (boolean, default=TRUE)", _t("Whether to include the column titles or not.")),
19355
19370
  arg("column_count (number, optional)", _t("number of columns")),
19371
+ arg("include_measure_titles (boolean, default=TRUE)", _t("Whether to include the measure titles row or not.")),
19356
19372
  ],
19357
- compute: function (pivotFormulaId, rowCount = { value: 10000 }, includeTotal = { value: true }, includeColumnHeaders = { value: true }, columnCount = { value: Number.MAX_VALUE }) {
19373
+ compute: function (pivotFormulaId, rowCount = { value: 10000 }, includeTotal = { value: true }, includeColumnHeaders = { value: true }, columnCount = { value: Number.MAX_VALUE }, includeMeasureTitles = { value: true }) {
19358
19374
  const _pivotFormulaId = toString(pivotFormulaId);
19359
19375
  const _rowCount = toNumber(rowCount, this.locale);
19360
19376
  if (_rowCount < 0) {
@@ -19364,8 +19380,11 @@ const PIVOT = {
19364
19380
  if (_columnCount < 0) {
19365
19381
  return new EvaluationError(_t("The number of columns must be positive."));
19366
19382
  }
19367
- const _includeColumnHeaders = toBoolean(includeColumnHeaders);
19368
- const _includedTotal = toBoolean(includeTotal);
19383
+ const visibilityOptions = {
19384
+ displayColumnHeaders: toBoolean(includeColumnHeaders),
19385
+ displayTotals: toBoolean(includeTotal),
19386
+ displayMeasuresRow: toBoolean(includeMeasureTitles),
19387
+ };
19369
19388
  const pivotId = getPivotId(_pivotFormulaId, this.getters);
19370
19389
  const pivot = this.getters.getPivot(pivotId);
19371
19390
  const coreDefinition = this.getters.getPivotCoreDefinition(pivotId);
@@ -19376,9 +19395,15 @@ const PIVOT = {
19376
19395
  return error;
19377
19396
  }
19378
19397
  const table = pivot.getCollapsedTableStructure();
19379
- const cells = table.getPivotCells(_includedTotal, _includeColumnHeaders);
19380
- const headerRows = _includeColumnHeaders ? table.columns.length : 0;
19381
- const pivotTitle = this.getters.getPivotDisplayName(pivotId);
19398
+ const cells = table.getPivotCells(visibilityOptions);
19399
+ let headerRows = 0;
19400
+ if (visibilityOptions.displayColumnHeaders) {
19401
+ headerRows = table.columns.length - 1;
19402
+ }
19403
+ if (visibilityOptions.displayMeasuresRow) {
19404
+ headerRows++;
19405
+ }
19406
+ const pivotTitle = this.getters.getPivotName(pivotId);
19382
19407
  const tableHeight = Math.min(headerRows + _rowCount, cells[0].length);
19383
19408
  if (tableHeight === 0) {
19384
19409
  return [[{ value: pivotTitle }]];
@@ -19406,7 +19431,7 @@ const PIVOT = {
19406
19431
  }
19407
19432
  }
19408
19433
  }
19409
- if (_includeColumnHeaders) {
19434
+ if (visibilityOptions.displayColumnHeaders || visibilityOptions.displayMeasuresRow) {
19410
19435
  result[0][0] = { value: pivotTitle };
19411
19436
  }
19412
19437
  return result;
@@ -21745,10 +21770,22 @@ function drawPieChartValues(chart, options, ctx) {
21745
21770
  const midAngle = (startAngle + endAngle) / 2;
21746
21771
  const midRadius = (innerRadius + outerRadius) / 2;
21747
21772
  const x = bar.x + midRadius * Math.cos(midAngle);
21748
- const y = bar.y + midRadius * Math.sin(midAngle) + 7;
21773
+ const y = bar.y + midRadius * Math.sin(midAngle);
21774
+ const displayValue = options.callback(value, dataset, i);
21775
+ const textHeight = 12; // ChartJS default
21776
+ const textWidth = computeTextWidth(ctx, displayValue, { fontSize: textHeight }, "px");
21777
+ const radius = outerRadius - innerRadius;
21778
+ // Check if the text fits in the slice. Not perfect, but good enough heuristic.
21779
+ if (textWidth >= radius || radius < textHeight) {
21780
+ continue;
21781
+ }
21782
+ const sliceAngle = endAngle - startAngle;
21783
+ const midWidth = 2 * midRadius * Math.tan(sliceAngle / 2);
21784
+ if (sliceAngle < Math.PI / 2 && (textWidth >= midWidth || midWidth < textHeight)) {
21785
+ continue;
21786
+ }
21749
21787
  ctx.fillStyle = chartFontColor(options.background);
21750
21788
  ctx.strokeStyle = options.background || "#ffffff";
21751
- const displayValue = options.callback(value, dataset, i);
21752
21789
  drawTextWithBackground(displayValue, x, y, ctx);
21753
21790
  }
21754
21791
  }
@@ -34941,17 +34978,22 @@ class FilterMenuValueList extends owl.Component {
34941
34978
  static components = { FilterMenuValueItem };
34942
34979
  state = owl.useState({
34943
34980
  values: [],
34981
+ displayedValues: [],
34944
34982
  textFilter: "",
34945
34983
  selectedValue: undefined,
34984
+ numberOfDisplayedValues: 50,
34985
+ hasMoreValues: false,
34946
34986
  });
34947
34987
  searchBar = owl.useRef("filterMenuSearchBar");
34948
34988
  setup() {
34949
34989
  owl.onWillUpdateProps((nextProps) => {
34950
34990
  if (!deepEquals(nextProps.filterPosition, this.props.filterPosition)) {
34951
34991
  this.state.values = this.getFilterHiddenValues(nextProps.filterPosition);
34992
+ this.computeDisplayedValues();
34952
34993
  }
34953
34994
  });
34954
34995
  this.state.values = this.getFilterHiddenValues(this.props.filterPosition);
34996
+ this.computeDisplayedValues();
34955
34997
  }
34956
34998
  getFilterHiddenValues(position) {
34957
34999
  const sheetId = this.env.model.getters.getActiveSheetId();
@@ -34969,21 +35011,28 @@ class FilterMenuValueList extends owl.Component {
34969
35011
  }
34970
35012
  const cellValues = cells.map((val) => val.cellValue);
34971
35013
  const filterValues = filterValue?.filterType === "values" ? filterValue.hiddenValues : [];
34972
- const strValues = [...cellValues, ...filterValues];
34973
- const normalizedFilteredValues = filterValues.map(toLowerCase);
34974
- // Set with lowercase values to avoid duplicates
34975
- const normalizedValues = [...new Set(strValues.map(toLowerCase))];
34976
- const sortedValues = normalizedValues.sort((val1, val2) => val1.localeCompare(val2, undefined, { numeric: true, sensitivity: "base" }));
34977
- return sortedValues.map((normalizedValue) => {
34978
- let checked = false;
34979
- if (filterValue?.filterType !== "criterion") {
34980
- checked = normalizedFilteredValues.findIndex((val) => val === normalizedValue) === -1;
35014
+ const normalizedFilteredValues = new Set(filterValues.map(toLowerCase));
35015
+ const set = new Set();
35016
+ const values = [];
35017
+ const addValue = (value) => {
35018
+ const normalizedValue = toLowerCase(value);
35019
+ if (!set.has(normalizedValue)) {
35020
+ values.push({
35021
+ string: value || "",
35022
+ checked: filterValue?.filterType !== "criterion"
35023
+ ? !normalizedFilteredValues.has(normalizedValue)
35024
+ : false,
35025
+ normalizedValue,
35026
+ });
35027
+ set.add(normalizedValue);
34981
35028
  }
34982
- return {
34983
- checked,
34984
- string: strValues.find((val) => toLowerCase(val) === normalizedValue) || "",
34985
- };
34986
- });
35029
+ };
35030
+ cellValues.forEach(addValue);
35031
+ filterValues.forEach(addValue);
35032
+ return values.sort((val1, val2) => val1.normalizedValue.localeCompare(val2.normalizedValue, undefined, {
35033
+ numeric: true,
35034
+ sensitivity: "base",
35035
+ }));
34987
35036
  }
34988
35037
  checkValue(value) {
34989
35038
  this.state.selectedValue = value.string;
@@ -34995,25 +35044,37 @@ class FilterMenuValueList extends owl.Component {
34995
35044
  this.state.selectedValue = value.string;
34996
35045
  }
34997
35046
  selectAll() {
34998
- this.displayedValues.forEach((value) => (value.checked = true));
34999
- this.updateHiddenValues();
35047
+ this.state.displayedValues.forEach((value) => (value.checked = true));
35048
+ this.props.onUpdateHiddenValues([]);
35000
35049
  }
35001
35050
  clearAll() {
35002
- this.displayedValues.forEach((value) => (value.checked = false));
35003
- this.updateHiddenValues();
35051
+ this.state.displayedValues.forEach((value) => (value.checked = false));
35052
+ const hiddenValues = this.state.values.map((val) => val.string);
35053
+ this.props.onUpdateHiddenValues(hiddenValues);
35004
35054
  }
35005
35055
  updateHiddenValues() {
35006
35056
  const hiddenValues = this.state.values.filter((val) => !val.checked).map((val) => val.string);
35007
35057
  this.props.onUpdateHiddenValues(hiddenValues);
35008
35058
  }
35009
- get displayedValues() {
35010
- if (!this.state.textFilter) {
35011
- return this.state.values;
35012
- }
35013
- return fuzzyLookup(this.state.textFilter, this.state.values, (val) => val.string);
35059
+ updateSearch(ev) {
35060
+ const target = ev.target;
35061
+ this.state.textFilter = target.value;
35062
+ this.state.selectedValue = undefined;
35063
+ this.computeDisplayedValues();
35064
+ }
35065
+ computeDisplayedValues() {
35066
+ const values = !this.state.textFilter
35067
+ ? this.state.values
35068
+ : fuzzyLookup(this.state.textFilter, this.state.values, (val) => val.string);
35069
+ this.state.displayedValues = values.slice(0, this.state.numberOfDisplayedValues);
35070
+ this.state.hasMoreValues = values.length > this.state.numberOfDisplayedValues;
35071
+ }
35072
+ loadMoreValues() {
35073
+ this.state.numberOfDisplayedValues += 100;
35074
+ this.computeDisplayedValues();
35014
35075
  }
35015
35076
  onKeyDown(ev) {
35016
- const displayedValues = this.displayedValues;
35077
+ const displayedValues = this.state.displayedValues;
35017
35078
  if (displayedValues.length === 0)
35018
35079
  return;
35019
35080
  let selectedIndex = undefined;
@@ -38486,7 +38547,7 @@ class XlsxBaseExtractor {
38486
38547
  */
38487
38548
  handleMissingValue(parentElement, missingElementName, optionalArgs) {
38488
38549
  if (optionalArgs?.required) {
38489
- if (optionalArgs?.default) {
38550
+ if (optionalArgs?.default !== undefined) {
38490
38551
  this.warningManager.addParsingWarning(`Missing required ${missingElementName} in element <${parentElement.tagName}> of ${this.currentFile}, replacing it by the default value ${optionalArgs.default}`);
38491
38552
  }
38492
38553
  else {
@@ -48709,7 +48770,8 @@ css /* scss */ `
48709
48770
  input.o-font-size {
48710
48771
  outline: none;
48711
48772
  height: 20px;
48712
- width: 23px;
48773
+ width: 31px;
48774
+ text-align: center;
48713
48775
  }
48714
48776
  }
48715
48777
  .o-text-options > div {
@@ -53787,28 +53849,45 @@ class SpreadsheetPivotTable {
53787
53849
  getNumberOfDataColumns() {
53788
53850
  return this.columns.at(-1)?.length || 0;
53789
53851
  }
53790
- getPivotCells(includeTotal = true, includeColumnHeaders = true) {
53791
- const key = JSON.stringify({ includeTotal, includeColumnHeaders });
53852
+ getSkippedRows(visibilityOptions) {
53853
+ const skippedRows = new Set();
53854
+ if (!visibilityOptions.displayColumnHeaders) {
53855
+ for (let i = 0; i < this.columns.length - 1; i++) {
53856
+ skippedRows.add(i);
53857
+ }
53858
+ }
53859
+ if (!visibilityOptions.displayMeasuresRow) {
53860
+ skippedRows.add(this.columns.length - 1);
53861
+ }
53862
+ return skippedRows;
53863
+ }
53864
+ getPivotCells(visibilityOptions = {
53865
+ displayColumnHeaders: true,
53866
+ displayTotals: true,
53867
+ displayMeasuresRow: true,
53868
+ }) {
53869
+ const key = JSON.stringify(visibilityOptions);
53792
53870
  if (!this.pivotCells[key]) {
53871
+ const { displayTotals } = visibilityOptions;
53793
53872
  const numberOfDataRows = this.rows.length;
53794
53873
  const numberOfDataColumns = this.getNumberOfDataColumns();
53795
53874
  let pivotHeight = this.columns.length + numberOfDataRows;
53796
53875
  let pivotWidth = 1 /*(row headers)*/ + numberOfDataColumns;
53797
- if (!includeTotal && numberOfDataRows !== 1) {
53876
+ if (!displayTotals && numberOfDataRows !== 1) {
53798
53877
  pivotHeight -= 1;
53799
53878
  }
53800
- if (!includeTotal && numberOfDataColumns !== this.measures.length) {
53879
+ if (!displayTotals && numberOfDataColumns !== this.measures.length) {
53801
53880
  pivotWidth -= this.measures.length;
53802
53881
  }
53803
53882
  const domainArray = [];
53804
- const startRow = includeColumnHeaders ? 0 : this.columns.length;
53883
+ const skippedRows = this.getSkippedRows(visibilityOptions);
53805
53884
  for (let col = 0; col < pivotWidth; col++) {
53806
53885
  domainArray.push([]);
53807
- for (let row = startRow; row < pivotHeight; row++) {
53808
- if (!includeTotal && row === pivotHeight) {
53886
+ for (let row = 0; row < pivotHeight; row++) {
53887
+ if (skippedRows.has(row)) {
53809
53888
  continue;
53810
53889
  }
53811
- domainArray[col].push(this.getPivotCell(col, row, includeTotal));
53890
+ domainArray[col].push(this.getPivotCell(col, row, displayTotals));
53812
53891
  }
53813
53892
  }
53814
53893
  this.pivotCells[key] = domainArray;
@@ -61999,7 +62078,9 @@ class TablePlugin extends CorePlugin {
61999
62078
  const ranges = cmd.ranges.map((rangeData) => this.getters.getRangeFromRangeData(rangeData));
62000
62079
  const union = this.getters.getRangesUnion(ranges);
62001
62080
  const mergesInTarget = this.getters.getMergesInZone(cmd.sheetId, union.zone);
62002
- this.dispatch("REMOVE_MERGE", { sheetId: cmd.sheetId, target: mergesInTarget });
62081
+ if (mergesInTarget.length) {
62082
+ this.dispatch("REMOVE_MERGE", { sheetId: cmd.sheetId, target: mergesInTarget });
62083
+ }
62003
62084
  const id = this.consumeNextId();
62004
62085
  const config = cmd.config || DEFAULT_TABLE_CONFIG;
62005
62086
  const newTable = cmd.tableType === "dynamic"
@@ -62098,14 +62179,16 @@ class TablePlugin extends CorePlugin {
62098
62179
  const zoneToCheckIfEmpty = direction === "down"
62099
62180
  ? { ...zone, bottom: zone.bottom + 1, top: zone.bottom + 1 }
62100
62181
  : { ...zone, right: zone.right + 1, left: zone.right + 1 };
62101
- for (const position of positions(zoneToCheckIfEmpty)) {
62102
- const cellPosition = { sheetId, ...position };
62103
- // Since this plugin is loaded before CellPlugin, the getters still give us the old cell content
62104
- const cellContent = this.getters.getCell(cellPosition)?.content;
62105
- if (cellContent ||
62106
- this.getters.isInMerge(cellPosition) ||
62107
- this.getTablesOverlappingZones(sheetId, [positionToZone(position)]).length) {
62108
- return "none";
62182
+ for (let row = zoneToCheckIfEmpty.top; row <= zoneToCheckIfEmpty.bottom; row++) {
62183
+ for (let col = zoneToCheckIfEmpty.left; col <= zoneToCheckIfEmpty.right; col++) {
62184
+ const cellPosition = { sheetId, col, row };
62185
+ // Since this plugin is loaded before CellPlugin, the getters still give us the old cell content
62186
+ const cellContent = this.getters.getCell(cellPosition)?.content;
62187
+ if (cellContent ||
62188
+ this.getters.isInMerge(cellPosition) ||
62189
+ this.getTablesOverlappingZones(sheetId, [positionToZone(cellPosition)]).length) {
62190
+ return "none";
62191
+ }
62109
62192
  }
62110
62193
  }
62111
62194
  return direction;
@@ -67258,10 +67341,15 @@ class PivotUIPlugin extends CoreViewPlugin {
67258
67341
  const includeTotal = toScalar(args[2]);
67259
67342
  const shouldIncludeTotal = includeTotal === undefined ? true : toBoolean(includeTotal);
67260
67343
  const includeColumnHeaders = toScalar(args[3]);
67344
+ const includeMeasures = toScalar(args[5]);
67345
+ const shouldIncludeMeasures = includeMeasures === undefined ? true : toBoolean(includeMeasures);
67261
67346
  const shouldIncludeColumnHeaders = includeColumnHeaders === undefined ? true : toBoolean(includeColumnHeaders);
67262
- const pivotCells = pivot
67263
- .getCollapsedTableStructure()
67264
- .getPivotCells(shouldIncludeTotal, shouldIncludeColumnHeaders);
67347
+ const visibilityOptions = {
67348
+ displayColumnHeaders: shouldIncludeColumnHeaders,
67349
+ displayTotals: shouldIncludeTotal,
67350
+ displayMeasuresRow: shouldIncludeMeasures,
67351
+ };
67352
+ const pivotCells = pivot.getCollapsedTableStructure().getPivotCells(visibilityOptions);
67265
67353
  const pivotCol = position.col - mainPosition.col;
67266
67354
  const pivotRow = position.row - mainPosition.row;
67267
67355
  return pivotCells[pivotCol][pivotRow];
@@ -69483,8 +69571,7 @@ class CollaborativePlugin extends UIPlugin {
69483
69571
  "isFullySynchronized",
69484
69572
  ];
69485
69573
  static layers = ["Selection"];
69486
- availableColors = new AlternatingColorGenerator(12);
69487
- colors = {};
69574
+ colors = new AlternatingColorMap(12);
69488
69575
  session;
69489
69576
  constructor(config) {
69490
69577
  super(config);
@@ -69502,7 +69589,7 @@ class CollaborativePlugin extends UIPlugin {
69502
69589
  }
69503
69590
  getConnectedClients() {
69504
69591
  return [...this.session.getConnectedClients()].map((client) => {
69505
- return { ...client, color: this.colors[client.id] };
69592
+ return { ...client, color: this.colors.get(client.id) };
69506
69593
  });
69507
69594
  }
69508
69595
  isFullySynchronized() {
@@ -69531,10 +69618,7 @@ class CollaborativePlugin extends UIPlugin {
69531
69618
  client.position &&
69532
69619
  client.position.sheetId === sheetId &&
69533
69620
  this.isPositionValid(client.position)) {
69534
- if (!this.colors[client.id]) {
69535
- this.colors[client.id] = this.availableColors.next();
69536
- }
69537
- clients.push({ ...client, color: this.colors[client.id], position: client.position });
69621
+ clients.push({ ...client, position: client.position });
69538
69622
  }
69539
69623
  }
69540
69624
  return clients;
@@ -72408,9 +72492,10 @@ class FilterEvaluationPlugin extends UIPlugin {
72408
72492
  const filteredValues = filterValue.hiddenValues?.map(toLowerCase);
72409
72493
  if (!filteredValues)
72410
72494
  continue;
72495
+ const filteredValuesSet = new Set(filteredValues);
72411
72496
  for (let row = filteredZone.top; row <= filteredZone.bottom; row++) {
72412
72497
  const value = this.getCellValueAsString(sheetId, filter.col, row);
72413
- if (filteredValues.includes(value)) {
72498
+ if (filteredValuesSet.has(value)) {
72414
72499
  hiddenRows.add(row);
72415
72500
  }
72416
72501
  }
@@ -75092,7 +75177,7 @@ topbarMenuRegistry
75092
75177
  })
75093
75178
  .addChild("settings", ["file"], {
75094
75179
  name: _t("Settings"),
75095
- sequence: 100,
75180
+ sequence: 200,
75096
75181
  execute: (env) => env.openSidePanel("Settings"),
75097
75182
  isEnabled: (env) => !env.isSmall,
75098
75183
  icon: "o-spreadsheet-Icon.COG",
@@ -78001,7 +78086,7 @@ css /* scss */ `
78001
78086
 
78002
78087
  .o-spreadsheet-topbar {
78003
78088
  line-height: 1.2;
78004
- font-size: 13px;
78089
+ font-size: 14px;
78005
78090
  font-weight: 500;
78006
78091
  background-color: #fff;
78007
78092
 
@@ -83260,6 +83345,7 @@ exports.AbstractCellClipboardHandler = AbstractCellClipboardHandler;
83260
83345
  exports.AbstractChart = AbstractChart;
83261
83346
  exports.AbstractFigureClipboardHandler = AbstractFigureClipboardHandler;
83262
83347
  exports.CellErrorType = CellErrorType;
83348
+ exports.ClientDisconnectedError = ClientDisconnectedError;
83263
83349
  exports.CorePlugin = CorePlugin;
83264
83350
  exports.CoreViewPlugin = CoreViewPlugin;
83265
83351
  exports.DispatchResult = DispatchResult;
@@ -83306,6 +83392,6 @@ exports.tokenColors = tokenColors;
83306
83392
  exports.tokenize = tokenize;
83307
83393
 
83308
83394
 
83309
- __info__.version = "18.4.0-alpha.7";
83310
- __info__.date = "2025-06-06T09:32:44.285Z";
83311
- __info__.hash = "2bfbe64";
83395
+ __info__.version = "18.4.0-alpha.8";
83396
+ __info__.date = "2025-06-12T09:53:48.133Z";
83397
+ __info__.hash = "9b7a8d0";
@@ -761,6 +761,9 @@ interface Client {
761
761
  interface ClientWithPosition extends Client {
762
762
  position: ClientPosition;
763
763
  }
764
+ interface ClientWithColor extends Client {
765
+ color: Color;
766
+ }
764
767
  interface ClientPosition {
765
768
  sheetId: UID;
766
769
  col: HeaderIndex;
@@ -1085,6 +1088,11 @@ interface DimensionTreeNode {
1085
1088
  width: number;
1086
1089
  }
1087
1090
  type DimensionTree = DimensionTreeNode[];
1091
+ interface PivotVisibilityOptions {
1092
+ displayColumnHeaders: boolean;
1093
+ displayTotals: boolean;
1094
+ displayMeasuresRow: boolean;
1095
+ }
1088
1096
 
1089
1097
  interface GenericCriterion {
1090
1098
  type: GenericCriterionType;
@@ -1420,6 +1428,8 @@ declare class Revision implements RevisionData {
1420
1428
  get changes(): readonly HistoryChange[];
1421
1429
  }
1422
1430
 
1431
+ declare class ClientDisconnectedError extends Error {
1432
+ }
1423
1433
  declare class Session extends EventBus<CollaborativeEvent> {
1424
1434
  private revisions;
1425
1435
  private transportService;
@@ -5768,7 +5778,8 @@ declare class SpreadsheetPivotTable {
5768
5778
  * Get the number of columns leafs (i.e. the number of the last row of columns)
5769
5779
  */
5770
5780
  getNumberOfDataColumns(): number;
5771
- getPivotCells(includeTotal?: boolean, includeColumnHeaders?: boolean): PivotTableCell[][];
5781
+ private getSkippedRows;
5782
+ getPivotCells(visibilityOptions?: PivotVisibilityOptions): PivotTableCell[][];
5772
5783
  getRowTree(): DimensionTree;
5773
5784
  getColTree(): DimensionTree;
5774
5785
  private isTotalRow;
@@ -6021,20 +6032,18 @@ declare class AutomaticSumPlugin extends UIPlugin {
6021
6032
  private transpose;
6022
6033
  }
6023
6034
 
6024
- interface ClientToDisplay extends ClientWithPosition {
6025
- color: Color;
6035
+ interface ClientToDisplay extends Required<Client> {
6026
6036
  }
6027
6037
  declare class CollaborativePlugin extends UIPlugin {
6028
6038
  static getters: readonly ["getClientsToDisplay", "getClient", "getCurrentClient", "getConnectedClients", "isFullySynchronized"];
6029
6039
  static layers: readonly ["Selection"];
6030
- private availableColors;
6031
6040
  private colors;
6032
6041
  private session;
6033
6042
  constructor(config: UIPluginConfig);
6034
6043
  private isPositionValid;
6035
6044
  getClient(clientId: ClientId): Client;
6036
6045
  getCurrentClient(): Client;
6037
- getConnectedClients(): Client[];
6046
+ getConnectedClients(): ClientWithColor[];
6038
6047
  isFullySynchronized(): boolean;
6039
6048
  /**
6040
6049
  * Get the list of others connected clients which are present in the same sheet
@@ -13030,4 +13039,4 @@ declare const chartHelpers: {
13030
13039
  WaterfallChart: typeof WaterfallChart;
13031
13040
  };
13032
13041
 
13033
- export { AST, ASTFuncall, AboveAverageRule, AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, ActivateNextSheetCommand, ActivatePreviousSheetCommand, ActivateSheetCommand, AddColumnsRowsCommand, AddConditionalFormatCommand, AddDataValidationCommand, AddFunctionDescription, AddMergeCommand, AddPivotCommand, Aggregator, Alias, Align, AlphanumericIncrementModifier, AnchorOffset, AnchorZone, ApplyRangeChange, ApplyRangeChangeResult, Arg, ArgDefinition, ArgType, AutoFillCellCommand, AutofillAutoCommand, AutofillCellData, AutofillCommand, AutofillData, AutofillModifier, AutofillModifierImplementation, AutofillResult, AutofillSelectCommand, AutofillTableCommand, AutoresizeColumnsCommand, AutoresizeRowsCommand, AxesDesign, AxisDesign, AxisType, BeginsWithRule, BooleanCell, Border$1 as Border, BorderData, BorderDescr, BorderPosition, BorderStyle, Box, BoxTextContent, CHART_TYPES, CSSProperties, CancelledReason, Cell, CellErrorType, CellIsRule, CellPosition, CellValue, CellValueType, ChangeType, ChartAxisFormats, ChartCreationContext, ChartDatasetOrientation, ChartDefinition, ChartJSRuntime, ChartRuntime, ChartRuntimeGenerationArgs, ChartStyle, ChartType, ChartWithAxisDefinition, ChartWithDataSetDefinition, CleanClipBoardHighlightCommand, ClearCellCommand, ClearCellsCommand, ClearFormattingCommand, Client, ClientId, ClientJoinedMessage, ClientLeftMessage, ClientMovedMessage, ClientPosition, ClientWithPosition, ClipboardCell, ClipboardCellData, ClipboardData, ClipboardFigureData, ClipboardMIMEType, ClipboardOperation, ClipboardOptions, ClipboardPasteOptions, ClipboardPasteTarget, Cloneable, CollaborationMessage, CollaborativeEvent, CollaborativeEventReceived, CollaborativeEventTypes, Color, ColorScaleMidPointThreshold, ColorScaleRule, ColorScaleThreshold, ColorSheetCommand, Command, CommandDispatcher, CommandHandler, CommandResult, CommandTypes, CommonPivotCoreDefinition, CompiledFormula, ComposerFocusType, ComputeFunction, ComputedTableStyle, ConditionalFormat, ConditionalFormatInternal, ConditionalFormatRule, ConditionalFormatRuleInternal, ConditionalFormattingOperatorValues, ConsecutiveIndexes, ContainsTextRule, CopyCommand, CopyModifier, CopyPasteCellsAboveCommand, CopyPasteCellsOnLeftCommand, CoreCommand, CoreCommandDispatcher, CoreCommandTypes, CoreGetters, CorePlugin, CoreTable, CoreTableType, CoreViewCommand, CoreViewCommandTypes, CoreViewPlugin, CreateChartCommand, CreateFigureCommand, CreateImageOverCommand, CreateRevisionOptions, CreateSheetCommand, CreateTableCommand, CreateTableStyleCommand, CriterionFilter, Currency, CustomFormulaCriterion, CustomizedDataSet, CutCommand, DEFAULT_LOCALE, DEFAULT_LOCALES, DIRECTION, DOMCoordinates, DOMDimension, DataBarFill, DataBarRule, DataBarRuleInternal, DataFilterValue, DataSet, DataValidationCriterion, DataValidationCriterionType, DataValidationDateCriterion, DataValidationRule, DataValidationRuleData, DatasetDesign, DatasetValues, DateCriterionValue, DateIncrementModifier, DateIsAfterCriterion, DateIsBeforeCriterion, DateIsBetweenCriterion, DateIsCriterion, DateIsNotBetweenCriterion, DateIsOnOrAfterCriterion, DateIsOnOrBeforeCriterion, DateIsValidCriterion, DebouncedFunction, DeleteCellCommand, DeleteContentCommand, DeleteFigureCommand, DeleteSheetCommand, DeleteUnfilteredContentCommand, Dependencies, Dimension, DimensionTree, DimensionTreeNode, Direction$1 as Direction, DispatchResult, DuplicatePivotCommand, DuplicatePivotInNewSheetCommand, DuplicateSheetCommand, DynamicTable, EdgeScrollInfo, EditTextOptions, EditionMode, EmptyCell, EndsWithRule, EnrichedToken, EnsureRange, ErrorCell, EvalContext, EvaluateCellsCommand, EvaluateChartsCommand, EvaluatedCell, EvaluatedCriterion, EvaluatedDateCriterion, EvaluationError, ExcelChartDataset, ExcelChartDefinition, ExcelChartTrendConfiguration, ExcelChartType, ExcelFigureSize, ExcelFilterData, ExcelHeaderData, ExcelSheetData, ExcelTableData, ExcelTrendlineType, ExcelWorkbookData, ExpressionRule, Figure, FigureData, FigureInfo, FigureSize, FigureUI, Filter, FilterCriterionType, FilterId, FoldAllHeaderGroupsCommand, FoldHeaderGroupCommand, FoldHeaderGroupsInZoneCommand, Format, FormattedValue, FormulaCell, FormulaModifier, FormulaToExecute, FreezeColumnsCommand, FreezeRowsCommand, FunctionDescription, FunctionRegistry, FunctionResultNumber, FunctionResultObject, GeneratorCell, GenericCriterion, GenericCriterionType, GenericDateCriterion, GenericDefinition, GetSymbolValue, Getters, Granularity, GridClickModifiers, GridRenderingContext, GroupHeadersCommand, HSLA, HeaderData, HeaderDimensions, HeaderGroup, HeaderIndex, HeadersDependentCommand, HideColumnsRowsCommand, HideSheetCommand, Highlight$1 as Highlight, HistoryChange, IconSet, IconSetRule, IconThreshold, Image, Immutable, Increment, IncrementModifier, InformationNotification, InitPivotParams, InsertCellCommand, InsertNewPivotCommand, InsertPivotCommand, InsertPivotWithTableCommand, IsBetweenCriterion, IsCheckboxCriterion, IsEqualCriterion, IsGreaterOrEqualToCriterion, IsGreaterThanCriterion, IsLessOrEqualToCriterion, IsLessThanCriterion, IsNotBetweenCriterion, IsNotEqualCriterion, IsValueInListCriterion, IsValueInRangeCriterion, LabelValues, LayerName, Lazy, Link, LiteralCell, LocalCommand, LocalTransportService, Locale, LocaleCode, LocaleFormat, LookupCaches, Matrix, Maybe, MenuMouseEvent, Merge, Model, MoveColumnsRowsCommand, MoveConditionalFormatCommand, MoveRangeCommand, MoveSheetCommand, MoveViewportDownCommand, MoveViewportToCellCommand, MoveViewportUpCommand, NewLocalStateUpdateEvent, NotContainsTextRule, NotificationType, NumberCell, OSClipboardContent, Offset, OperationSequenceNode, OrderedLayers, PaintFormat, PaneDivision, ParsedOSClipboardContent, ParsedOsClipboardContentWithImageData, PasteCommand, PasteFromOSClipboardCommand, Pivot, PivotColRowDomain, PivotCollapsedDomains, PivotCoreDefinition, PivotCoreDimension, PivotCoreMeasure, PivotDimension$1 as PivotDimension, PivotDomain, PivotEmptyCell, PivotField, PivotFields, PivotHeaderCell, PivotMeasure, PivotMeasureDisplay, PivotMeasureDisplayType, PivotMeasureHeaderCell, PivotNode, PivotRuntimeDefinition, PivotSortedColumn, PivotStartPresenceTracking, PivotStopPresenceTracking, PivotTableCell, PivotTableColumn, PivotTableData, PivotTableRow, PivotTimeAdapter, PivotTimeAdapterNotNull, PivotValueCell, Pixel, PixelPosition, Position$1 as Position, PositionDependentCommand, PropsOf, RGBA, Range, RangeAdapter$1 as RangeAdapter, RangeCompiledFormula, RangeData, RangePart, RangeProvider, RangeStringOptions, RangesDependentCommand, Rect, RedoCommand, Ref, ReferenceDenormalizer, RefreshPivotCommand, Registry, RemoteRevisionMessage, RemoteRevisionReceivedEvent, RemoveColumnsRowsCommand, RemoveConditionalFormatCommand, RemoveDataValidationCommand, RemoveDuplicatesCommand, RemoveMergeCommand, RemovePivotCommand, RemoveTableCommand, RemoveTableStyleCommand, RenamePivotCommand, RenameSheetCommand, RepeatPasteCommand, ReplaceSearchCommand, RequestRedoCommand, RequestUndoCommand, ResizeColumnsRowsCommand, ResizeDirection, ResizeTableCommand, ResizeViewportCommand, Revision, RevisionAcknowledgedEvent, RevisionData, RevisionRedone, RevisionRedoneMessage, RevisionUndone, RevisionUndoneMessage, Row, SPREADSHEET_DIMENSIONS, ScrollDirection$1 as ScrollDirection, SelectFigureCommand, Selection$1 as Selection, SelectionStep, SetBorderCommand, SetBorderTargetCommand, SetContextualFormatCommand, SetDecimalCommand, SetDecimalStep, SetFormattingCommand, SetGridLinesVisibilityCommand, SetViewportOffsetCommand, SetZoneBordersCommand, Sheet, SheetDOMScrollInfo, SheetData, SheetDependentCommand, SheetEditingCommand, ShowFormulaCommand, ShowSheetCommand, SingleColorRule, SingleColorRules, SnapshotEvent, SortCommand, SortDirection, SortOptions, SplitPivotFormulaCommand, SplitTextIntoColumnsCommand, Spreadsheet, SpreadsheetChildEnv, SpreadsheetPivotCoreDefinition, SpreadsheetPivotTable, StartChangeHighlightCommand, StartCommand, StaticTable, StoreConstructor, StoreParams, Style, SumSelectionCommand, Table, TableBorder, TableConfig, TableData$1 as TableData, TableElementStyle, TableId, TableStyle, TableStyleData, TableStyleTemplateName, TargetDependentCommand, TechnicalName, TextCell, TextContainsCriterion, TextIsCriterion, TextIsEmailCriterion, TextIsLinkCriterion, TextNotContainsCriterion, TextRule, ThresholdType, TimePeriodRule, TitleDesign, ToggleCheckboxCommand, Token, Tooltip, Top10Rule, Transformation, TransformationFactory, TransportService, TrendConfiguration, TrendType, TrimWhitespaceCommand, UID, UIPlugin, UnGroupHeadersCommand, UnboundedZone, UndoCommand, UnexpectedRevisionIdEvent, UnfoldAllHeaderGroupsCommand, UnfoldHeaderGroupCommand, UnfoldHeaderGroupsInZoneCommand, UnfreezeColumnsCommand, UnfreezeColumnsRowsCommand, UnfreezeRowsCommand, UnhideColumnsRowsCommand, UpdateCellCommand, UpdateCellData, UpdateCellPositionCommand, UpdateChartCommand, UpdateFigureCommand, UpdateFilterCommand, UpdateLocaleCommand, UpdatePivotCommand, UpdateTableCommand, Validation, ValuesFilter, VerticalAlign, Viewport, WorkbookData, WorkbookHistory, Wrapping, Zone, ZoneDependentCommand, ZoneDimension, __info__, addFunction, addRenderingLayer, astToFormula, availableConditionalFormatOperators, availableDataValidationOperators, availableFiltersOperators, borderStyles, canExecuteInReadonly, chartHelpers, compile, compileTokens, components, constants, containsBlanksRule, containsErrorsRule, convertAstNodes, coreTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, helpers, hooks, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, notContainsBlanksRule, notContainsErrorsRule, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };
13042
+ export { AST, ASTFuncall, AboveAverageRule, AbstractCellClipboardHandler, AbstractChart, AbstractFigureClipboardHandler, ActivateNextSheetCommand, ActivatePreviousSheetCommand, ActivateSheetCommand, AddColumnsRowsCommand, AddConditionalFormatCommand, AddDataValidationCommand, AddFunctionDescription, AddMergeCommand, AddPivotCommand, Aggregator, Alias, Align, AlphanumericIncrementModifier, AnchorOffset, AnchorZone, ApplyRangeChange, ApplyRangeChangeResult, Arg, ArgDefinition, ArgType, AutoFillCellCommand, AutofillAutoCommand, AutofillCellData, AutofillCommand, AutofillData, AutofillModifier, AutofillModifierImplementation, AutofillResult, AutofillSelectCommand, AutofillTableCommand, AutoresizeColumnsCommand, AutoresizeRowsCommand, AxesDesign, AxisDesign, AxisType, BeginsWithRule, BooleanCell, Border$1 as Border, BorderData, BorderDescr, BorderPosition, BorderStyle, Box, BoxTextContent, CHART_TYPES, CSSProperties, CancelledReason, Cell, CellErrorType, CellIsRule, CellPosition, CellValue, CellValueType, ChangeType, ChartAxisFormats, ChartCreationContext, ChartDatasetOrientation, ChartDefinition, ChartJSRuntime, ChartRuntime, ChartRuntimeGenerationArgs, ChartStyle, ChartType, ChartWithAxisDefinition, ChartWithDataSetDefinition, CleanClipBoardHighlightCommand, ClearCellCommand, ClearCellsCommand, ClearFormattingCommand, Client, ClientDisconnectedError, ClientId, ClientJoinedMessage, ClientLeftMessage, ClientMovedMessage, ClientPosition, ClientWithColor, ClientWithPosition, ClipboardCell, ClipboardCellData, ClipboardData, ClipboardFigureData, ClipboardMIMEType, ClipboardOperation, ClipboardOptions, ClipboardPasteOptions, ClipboardPasteTarget, Cloneable, CollaborationMessage, CollaborativeEvent, CollaborativeEventReceived, CollaborativeEventTypes, Color, ColorScaleMidPointThreshold, ColorScaleRule, ColorScaleThreshold, ColorSheetCommand, Command, CommandDispatcher, CommandHandler, CommandResult, CommandTypes, CommonPivotCoreDefinition, CompiledFormula, ComposerFocusType, ComputeFunction, ComputedTableStyle, ConditionalFormat, ConditionalFormatInternal, ConditionalFormatRule, ConditionalFormatRuleInternal, ConditionalFormattingOperatorValues, ConsecutiveIndexes, ContainsTextRule, CopyCommand, CopyModifier, CopyPasteCellsAboveCommand, CopyPasteCellsOnLeftCommand, CoreCommand, CoreCommandDispatcher, CoreCommandTypes, CoreGetters, CorePlugin, CoreTable, CoreTableType, CoreViewCommand, CoreViewCommandTypes, CoreViewPlugin, CreateChartCommand, CreateFigureCommand, CreateImageOverCommand, CreateRevisionOptions, CreateSheetCommand, CreateTableCommand, CreateTableStyleCommand, CriterionFilter, Currency, CustomFormulaCriterion, CustomizedDataSet, CutCommand, DEFAULT_LOCALE, DEFAULT_LOCALES, DIRECTION, DOMCoordinates, DOMDimension, DataBarFill, DataBarRule, DataBarRuleInternal, DataFilterValue, DataSet, DataValidationCriterion, DataValidationCriterionType, DataValidationDateCriterion, DataValidationRule, DataValidationRuleData, DatasetDesign, DatasetValues, DateCriterionValue, DateIncrementModifier, DateIsAfterCriterion, DateIsBeforeCriterion, DateIsBetweenCriterion, DateIsCriterion, DateIsNotBetweenCriterion, DateIsOnOrAfterCriterion, DateIsOnOrBeforeCriterion, DateIsValidCriterion, DebouncedFunction, DeleteCellCommand, DeleteContentCommand, DeleteFigureCommand, DeleteSheetCommand, DeleteUnfilteredContentCommand, Dependencies, Dimension, DimensionTree, DimensionTreeNode, Direction$1 as Direction, DispatchResult, DuplicatePivotCommand, DuplicatePivotInNewSheetCommand, DuplicateSheetCommand, DynamicTable, EdgeScrollInfo, EditTextOptions, EditionMode, EmptyCell, EndsWithRule, EnrichedToken, EnsureRange, ErrorCell, EvalContext, EvaluateCellsCommand, EvaluateChartsCommand, EvaluatedCell, EvaluatedCriterion, EvaluatedDateCriterion, EvaluationError, ExcelChartDataset, ExcelChartDefinition, ExcelChartTrendConfiguration, ExcelChartType, ExcelFigureSize, ExcelFilterData, ExcelHeaderData, ExcelSheetData, ExcelTableData, ExcelTrendlineType, ExcelWorkbookData, ExpressionRule, Figure, FigureData, FigureInfo, FigureSize, FigureUI, Filter, FilterCriterionType, FilterId, FoldAllHeaderGroupsCommand, FoldHeaderGroupCommand, FoldHeaderGroupsInZoneCommand, Format, FormattedValue, FormulaCell, FormulaModifier, FormulaToExecute, FreezeColumnsCommand, FreezeRowsCommand, FunctionDescription, FunctionRegistry, FunctionResultNumber, FunctionResultObject, GeneratorCell, GenericCriterion, GenericCriterionType, GenericDateCriterion, GenericDefinition, GetSymbolValue, Getters, Granularity, GridClickModifiers, GridRenderingContext, GroupHeadersCommand, HSLA, HeaderData, HeaderDimensions, HeaderGroup, HeaderIndex, HeadersDependentCommand, HideColumnsRowsCommand, HideSheetCommand, Highlight$1 as Highlight, HistoryChange, IconSet, IconSetRule, IconThreshold, Image, Immutable, Increment, IncrementModifier, InformationNotification, InitPivotParams, InsertCellCommand, InsertNewPivotCommand, InsertPivotCommand, InsertPivotWithTableCommand, IsBetweenCriterion, IsCheckboxCriterion, IsEqualCriterion, IsGreaterOrEqualToCriterion, IsGreaterThanCriterion, IsLessOrEqualToCriterion, IsLessThanCriterion, IsNotBetweenCriterion, IsNotEqualCriterion, IsValueInListCriterion, IsValueInRangeCriterion, LabelValues, LayerName, Lazy, Link, LiteralCell, LocalCommand, LocalTransportService, Locale, LocaleCode, LocaleFormat, LookupCaches, Matrix, Maybe, MenuMouseEvent, Merge, Model, MoveColumnsRowsCommand, MoveConditionalFormatCommand, MoveRangeCommand, MoveSheetCommand, MoveViewportDownCommand, MoveViewportToCellCommand, MoveViewportUpCommand, NewLocalStateUpdateEvent, NotContainsTextRule, NotificationType, NumberCell, OSClipboardContent, Offset, OperationSequenceNode, OrderedLayers, PaintFormat, PaneDivision, ParsedOSClipboardContent, ParsedOsClipboardContentWithImageData, PasteCommand, PasteFromOSClipboardCommand, Pivot, PivotColRowDomain, PivotCollapsedDomains, PivotCoreDefinition, PivotCoreDimension, PivotCoreMeasure, PivotDimension$1 as PivotDimension, PivotDomain, PivotEmptyCell, PivotField, PivotFields, PivotHeaderCell, PivotMeasure, PivotMeasureDisplay, PivotMeasureDisplayType, PivotMeasureHeaderCell, PivotNode, PivotRuntimeDefinition, PivotSortedColumn, PivotStartPresenceTracking, PivotStopPresenceTracking, PivotTableCell, PivotTableColumn, PivotTableData, PivotTableRow, PivotTimeAdapter, PivotTimeAdapterNotNull, PivotValueCell, PivotVisibilityOptions, Pixel, PixelPosition, Position$1 as Position, PositionDependentCommand, PropsOf, RGBA, Range, RangeAdapter$1 as RangeAdapter, RangeCompiledFormula, RangeData, RangePart, RangeProvider, RangeStringOptions, RangesDependentCommand, Rect, RedoCommand, Ref, ReferenceDenormalizer, RefreshPivotCommand, Registry, RemoteRevisionMessage, RemoteRevisionReceivedEvent, RemoveColumnsRowsCommand, RemoveConditionalFormatCommand, RemoveDataValidationCommand, RemoveDuplicatesCommand, RemoveMergeCommand, RemovePivotCommand, RemoveTableCommand, RemoveTableStyleCommand, RenamePivotCommand, RenameSheetCommand, RepeatPasteCommand, ReplaceSearchCommand, RequestRedoCommand, RequestUndoCommand, ResizeColumnsRowsCommand, ResizeDirection, ResizeTableCommand, ResizeViewportCommand, Revision, RevisionAcknowledgedEvent, RevisionData, RevisionRedone, RevisionRedoneMessage, RevisionUndone, RevisionUndoneMessage, Row, SPREADSHEET_DIMENSIONS, ScrollDirection$1 as ScrollDirection, SelectFigureCommand, Selection$1 as Selection, SelectionStep, SetBorderCommand, SetBorderTargetCommand, SetContextualFormatCommand, SetDecimalCommand, SetDecimalStep, SetFormattingCommand, SetGridLinesVisibilityCommand, SetViewportOffsetCommand, SetZoneBordersCommand, Sheet, SheetDOMScrollInfo, SheetData, SheetDependentCommand, SheetEditingCommand, ShowFormulaCommand, ShowSheetCommand, SingleColorRule, SingleColorRules, SnapshotEvent, SortCommand, SortDirection, SortOptions, SplitPivotFormulaCommand, SplitTextIntoColumnsCommand, Spreadsheet, SpreadsheetChildEnv, SpreadsheetPivotCoreDefinition, SpreadsheetPivotTable, StartChangeHighlightCommand, StartCommand, StaticTable, StoreConstructor, StoreParams, Style, SumSelectionCommand, Table, TableBorder, TableConfig, TableData$1 as TableData, TableElementStyle, TableId, TableStyle, TableStyleData, TableStyleTemplateName, TargetDependentCommand, TechnicalName, TextCell, TextContainsCriterion, TextIsCriterion, TextIsEmailCriterion, TextIsLinkCriterion, TextNotContainsCriterion, TextRule, ThresholdType, TimePeriodRule, TitleDesign, ToggleCheckboxCommand, Token, Tooltip, Top10Rule, Transformation, TransformationFactory, TransportService, TrendConfiguration, TrendType, TrimWhitespaceCommand, UID, UIPlugin, UnGroupHeadersCommand, UnboundedZone, UndoCommand, UnexpectedRevisionIdEvent, UnfoldAllHeaderGroupsCommand, UnfoldHeaderGroupCommand, UnfoldHeaderGroupsInZoneCommand, UnfreezeColumnsCommand, UnfreezeColumnsRowsCommand, UnfreezeRowsCommand, UnhideColumnsRowsCommand, UpdateCellCommand, UpdateCellData, UpdateCellPositionCommand, UpdateChartCommand, UpdateFigureCommand, UpdateFilterCommand, UpdateLocaleCommand, UpdatePivotCommand, UpdateTableCommand, Validation, ValuesFilter, VerticalAlign, Viewport, WorkbookData, WorkbookHistory, Wrapping, Zone, ZoneDependentCommand, ZoneDimension, __info__, addFunction, addRenderingLayer, astToFormula, availableConditionalFormatOperators, availableDataValidationOperators, availableFiltersOperators, borderStyles, canExecuteInReadonly, chartHelpers, compile, compileTokens, components, constants, containsBlanksRule, containsErrorsRule, convertAstNodes, coreTypes, filterDateCriterionOperators, filterNumberCriterionOperators, filterTextCriterionOperators, findCellInNewZone, functionCache, helpers, hooks, invalidateBordersCommands, invalidateCFEvaluationCommands, invalidateChartEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, isCoreCommand, isHeadersDependant, isMatrix, isPositionDependent, isRangeDependant, isSheetDependent, isTargetDependent, isZoneDependent, iterateAstNodes, links, load, notContainsBlanksRule, notContainsErrorsRule, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, stores, tokenColors, tokenize };