@odoo/o-spreadsheet 17.1.11 → 17.1.12

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.1.11
6
- * @date 2024-04-10T12:27:11.107Z
7
- * @hash 246caf7
5
+ * @version 17.1.12
6
+ * @date 2024-04-18T16:45:30.109Z
7
+ * @hash 3e90776
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';
@@ -2475,6 +2475,15 @@ function matrixMap(matrix, fn) {
2475
2475
  }
2476
2476
  return generateMatrix(matrix.length, matrix[0].length, (col, row) => fn(matrix[col][row]));
2477
2477
  }
2478
+ function matrixForEach(matrix, fn) {
2479
+ const numberOfCols = matrix.length;
2480
+ const numberOfRows = matrix[0]?.length ?? 0;
2481
+ for (let col = 0; col < numberOfCols; col++) {
2482
+ for (let row = 0; row < numberOfRows; row++) {
2483
+ fn(matrix[col][row]);
2484
+ }
2485
+ }
2486
+ }
2478
2487
  function transposeMatrix(matrix) {
2479
2488
  if (!matrix.length) {
2480
2489
  return [];
@@ -8178,6 +8187,7 @@ class LinkEditor extends Component {
8178
8187
  this.save();
8179
8188
  }
8180
8189
  ev.stopPropagation();
8190
+ ev.preventDefault();
8181
8191
  break;
8182
8192
  case "Escape":
8183
8193
  this.cancel();
@@ -19760,7 +19770,7 @@ class FunctionRegistry extends Registry {
19760
19770
  }
19761
19771
  const descr = addMetaInfoFromArg(addDescr);
19762
19772
  validateArguments(descr.args);
19763
- this.mapping[name] = addErrorHandling(addResultHandling(addInputHandling(descr)), name);
19773
+ this.mapping[name] = addErrorHandling(addResultHandling(addInputHandling(descr), name), name);
19764
19774
  super.add(name, descr);
19765
19775
  return this;
19766
19776
  }
@@ -19799,9 +19809,7 @@ function handleError(e, functionName) {
19799
19809
  // so we fallback to a generic error
19800
19810
  if (hasStringValue(e) && isEvaluationError(e.value)) {
19801
19811
  if (hasStringMessage(e)) {
19802
- if (e.message?.includes("[[FUNCTION_NAME]]")) {
19803
- e.message = e.message.replace("[[FUNCTION_NAME]]", functionName);
19804
- }
19812
+ replaceFunctionNamePlaceholder(e, functionName);
19805
19813
  }
19806
19814
  return e;
19807
19815
  }
@@ -19816,21 +19824,29 @@ function hasStringMessage(obj) {
19816
19824
  return (obj?.message !== undefined &&
19817
19825
  typeof obj.message === "string");
19818
19826
  }
19819
- function addResultHandling(compute) {
19820
- return function (...args) {
19827
+ function addResultHandling(compute, functionName) {
19828
+ return function computeWithResultHandling(...args) {
19821
19829
  const result = compute.apply(this, args);
19822
19830
  if (!isMatrix(result)) {
19823
19831
  if (typeof result === "object" && result !== null && "value" in result) {
19832
+ replaceFunctionNamePlaceholder(result, functionName);
19824
19833
  return result;
19825
19834
  }
19826
19835
  return { value: result };
19827
19836
  }
19828
19837
  if (typeof result[0][0] === "object" && result[0][0] !== null && "value" in result[0][0]) {
19838
+ matrixForEach(result, (result) => replaceFunctionNamePlaceholder(result, functionName));
19829
19839
  return result;
19830
19840
  }
19831
19841
  return matrixMap(result, (row) => ({ value: row }));
19832
19842
  };
19833
19843
  }
19844
+ function replaceFunctionNamePlaceholder(fPayload, functionName) {
19845
+ // for performance reasons: change in place and only if needed
19846
+ if (fPayload.message?.includes("[[FUNCTION_NAME]]")) {
19847
+ fPayload.message = fPayload.message.replace("[[FUNCTION_NAME]]", functionName);
19848
+ }
19849
+ }
19834
19850
  const functionRegistry = new FunctionRegistry();
19835
19851
  for (let category of categories) {
19836
19852
  const fns = category.functions;
@@ -20202,6 +20218,332 @@ function interactiveAddFilter(env, sheetId, target) {
20202
20218
  }
20203
20219
  }
20204
20220
 
20221
+ function interactiveFreezeColumnsRows(env, dimension, base) {
20222
+ const sheetId = env.model.getters.getActiveSheetId();
20223
+ const cmd = dimension === "COL" ? "FREEZE_COLUMNS" : "FREEZE_ROWS";
20224
+ const result = env.model.dispatch(cmd, { sheetId, quantity: base });
20225
+ if (result.isCancelledBecause("MergeOverlap" /* CommandResult.MergeOverlap */)) {
20226
+ env.raiseError(MergeErrorMessage);
20227
+ }
20228
+ }
20229
+
20230
+ const hideCols = {
20231
+ name: HIDE_COLUMNS_NAME,
20232
+ execute: (env) => {
20233
+ const columns = env.model.getters.getElementsFromSelection("COL");
20234
+ env.model.dispatch("HIDE_COLUMNS_ROWS", {
20235
+ sheetId: env.model.getters.getActiveSheetId(),
20236
+ dimension: "COL",
20237
+ elements: columns,
20238
+ });
20239
+ },
20240
+ isVisible: NOT_ALL_VISIBLE_COLS_SELECTED,
20241
+ icon: "o-spreadsheet-Icon.HIDE_COL",
20242
+ };
20243
+ const unhideCols = {
20244
+ name: _t("Unhide columns"),
20245
+ execute: (env) => {
20246
+ const columns = env.model.getters.getElementsFromSelection("COL");
20247
+ env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20248
+ sheetId: env.model.getters.getActiveSheetId(),
20249
+ dimension: "COL",
20250
+ elements: columns,
20251
+ });
20252
+ },
20253
+ isVisible: (env) => {
20254
+ const hiddenCols = env.model.getters
20255
+ .getHiddenColsGroups(env.model.getters.getActiveSheetId())
20256
+ .flat();
20257
+ const currentCols = env.model.getters.getElementsFromSelection("COL");
20258
+ return currentCols.some((col) => hiddenCols.includes(col));
20259
+ },
20260
+ };
20261
+ const unhideAllCols = {
20262
+ name: _t("Unhide all columns"),
20263
+ execute: (env) => {
20264
+ const sheetId = env.model.getters.getActiveSheetId();
20265
+ env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20266
+ sheetId,
20267
+ dimension: "COL",
20268
+ elements: Array.from(Array(env.model.getters.getNumberCols(sheetId)).keys()),
20269
+ });
20270
+ },
20271
+ isVisible: (env) => env.model.getters.getHiddenColsGroups(env.model.getters.getActiveSheetId()).length > 0,
20272
+ };
20273
+ const hideRows = {
20274
+ name: HIDE_ROWS_NAME,
20275
+ execute: (env) => {
20276
+ const rows = env.model.getters.getElementsFromSelection("ROW");
20277
+ env.model.dispatch("HIDE_COLUMNS_ROWS", {
20278
+ sheetId: env.model.getters.getActiveSheetId(),
20279
+ dimension: "ROW",
20280
+ elements: rows,
20281
+ });
20282
+ },
20283
+ isVisible: NOT_ALL_VISIBLE_ROWS_SELECTED,
20284
+ icon: "o-spreadsheet-Icon.HIDE_ROW",
20285
+ };
20286
+ const unhideRows = {
20287
+ name: _t("Unhide rows"),
20288
+ execute: (env) => {
20289
+ const columns = env.model.getters.getElementsFromSelection("ROW");
20290
+ env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20291
+ sheetId: env.model.getters.getActiveSheetId(),
20292
+ dimension: "ROW",
20293
+ elements: columns,
20294
+ });
20295
+ },
20296
+ isVisible: (env) => {
20297
+ const hiddenRows = env.model.getters
20298
+ .getHiddenRowsGroups(env.model.getters.getActiveSheetId())
20299
+ .flat();
20300
+ const currentRows = env.model.getters.getElementsFromSelection("ROW");
20301
+ return currentRows.some((col) => hiddenRows.includes(col));
20302
+ },
20303
+ };
20304
+ const unhideAllRows = {
20305
+ name: _t("Unhide all rows"),
20306
+ execute: (env) => {
20307
+ const sheetId = env.model.getters.getActiveSheetId();
20308
+ env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20309
+ sheetId,
20310
+ dimension: "ROW",
20311
+ elements: Array.from(Array(env.model.getters.getNumberRows(sheetId)).keys()),
20312
+ });
20313
+ },
20314
+ isVisible: (env) => env.model.getters.getHiddenRowsGroups(env.model.getters.getActiveSheetId()).length > 0,
20315
+ };
20316
+ const unFreezePane = {
20317
+ name: _t("Unfreeze"),
20318
+ isVisible: (env) => {
20319
+ const { xSplit, ySplit } = env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId());
20320
+ return xSplit + ySplit > 0;
20321
+ },
20322
+ execute: (env) => env.model.dispatch("UNFREEZE_COLUMNS_ROWS", {
20323
+ sheetId: env.model.getters.getActiveSheetId(),
20324
+ }),
20325
+ icon: "o-spreadsheet-Icon.UNFREEZE",
20326
+ };
20327
+ const freezePane = {
20328
+ name: _t("Freeze"),
20329
+ icon: "o-spreadsheet-Icon.FREEZE",
20330
+ };
20331
+ const unFreezeRows = {
20332
+ name: _t("No rows"),
20333
+ execute: (env) => env.model.dispatch("UNFREEZE_ROWS", {
20334
+ sheetId: env.model.getters.getActiveSheetId(),
20335
+ }),
20336
+ isReadonlyAllowed: true,
20337
+ isVisible: (env) => !!env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId()).ySplit,
20338
+ };
20339
+ const freezeFirstRow = {
20340
+ name: _t("1 row"),
20341
+ execute: (env) => interactiveFreezeColumnsRows(env, "ROW", 1),
20342
+ isReadonlyAllowed: true,
20343
+ };
20344
+ const freezeSecondRow = {
20345
+ name: _t("2 rows"),
20346
+ execute: (env) => interactiveFreezeColumnsRows(env, "ROW", 2),
20347
+ isReadonlyAllowed: true,
20348
+ };
20349
+ const freezeCurrentRow = {
20350
+ name: _t("Up to current row"),
20351
+ execute: (env) => {
20352
+ const { bottom } = env.model.getters.getSelectedZone();
20353
+ interactiveFreezeColumnsRows(env, "ROW", bottom + 1);
20354
+ },
20355
+ isReadonlyAllowed: true,
20356
+ };
20357
+ const unFreezeCols = {
20358
+ name: _t("No columns"),
20359
+ execute: (env) => env.model.dispatch("UNFREEZE_COLUMNS", {
20360
+ sheetId: env.model.getters.getActiveSheetId(),
20361
+ }),
20362
+ isReadonlyAllowed: true,
20363
+ isVisible: (env) => !!env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId()).xSplit,
20364
+ };
20365
+ const freezeFirstCol = {
20366
+ name: _t("1 column"),
20367
+ execute: (env) => interactiveFreezeColumnsRows(env, "COL", 1),
20368
+ isReadonlyAllowed: true,
20369
+ };
20370
+ const freezeSecondCol = {
20371
+ name: _t("2 columns"),
20372
+ execute: (env) => interactiveFreezeColumnsRows(env, "COL", 2),
20373
+ isReadonlyAllowed: true,
20374
+ };
20375
+ const freezeCurrentCol = {
20376
+ name: _t("Up to current column"),
20377
+ execute: (env) => {
20378
+ const { right } = env.model.getters.getSelectedZone();
20379
+ interactiveFreezeColumnsRows(env, "COL", right + 1);
20380
+ },
20381
+ isReadonlyAllowed: true,
20382
+ };
20383
+ const viewGridlines = {
20384
+ name: (env) => env.model.getters.getGridLinesVisibility(env.model.getters.getActiveSheetId())
20385
+ ? _t("Hide gridlines")
20386
+ : _t("Show gridlines"),
20387
+ execute: (env) => {
20388
+ const sheetId = env.model.getters.getActiveSheetId();
20389
+ env.model.dispatch("SET_GRID_LINES_VISIBILITY", {
20390
+ sheetId,
20391
+ areGridLinesVisible: !env.model.getters.getGridLinesVisibility(sheetId),
20392
+ });
20393
+ },
20394
+ icon: "o-spreadsheet-Icon.SHOW_HIDE_GRID",
20395
+ };
20396
+ const viewFormulas = {
20397
+ name: (env) => env.model.getters.shouldShowFormulas() ? "Hide formulas" : _t("Show formulas"),
20398
+ execute: (env) => env.model.dispatch("SET_FORMULA_VISIBILITY", { show: !env.model.getters.shouldShowFormulas() }),
20399
+ isReadonlyAllowed: true,
20400
+ icon: "o-spreadsheet-Icon.SHOW_HIDE_FORMULA",
20401
+ };
20402
+ const createRemoveFilter = {
20403
+ name: (env) => selectionContainsFilter(env) ? _t("Remove selected filters") : _t("Create filter"),
20404
+ isActive: (env) => selectionContainsFilter(env),
20405
+ isEnabled: (env) => !cannotCreateFilter(env),
20406
+ execute: (env) => createRemoveFilterAction(env),
20407
+ icon: "o-spreadsheet-Icon.FILTER_ICON_INACTIVE",
20408
+ };
20409
+ const groupColumns = {
20410
+ name: (env) => {
20411
+ const selection = env.model.getters.getSelectedZone();
20412
+ if (selection.left === selection.right) {
20413
+ return _t("Group column %s", numberToLetters(selection.left));
20414
+ }
20415
+ return _t("Group columns %s - %s", numberToLetters(selection.left), numberToLetters(selection.right));
20416
+ },
20417
+ execute: (env) => groupHeadersAction(env, "COL"),
20418
+ isVisible: (env) => {
20419
+ const sheetId = env.model.getters.getActiveSheetId();
20420
+ const selection = env.model.getters.getSelectedZone();
20421
+ const groups = env.model.getters.getHeaderGroupsInZone(sheetId, "COL", selection);
20422
+ return (IS_ONLY_ONE_RANGE(env) &&
20423
+ !groups.some((group) => group.start === selection.left && group.end === selection.right));
20424
+ },
20425
+ icon: "o-spreadsheet-Icon.GROUP_COLUMNS",
20426
+ };
20427
+ const groupRows = {
20428
+ name: (env) => {
20429
+ const selection = env.model.getters.getSelectedZone();
20430
+ if (selection.top === selection.bottom) {
20431
+ return _t("Group row %s", String(selection.top + 1));
20432
+ }
20433
+ return _t("Group rows %s - %s", String(selection.top + 1), String(selection.bottom + 1));
20434
+ },
20435
+ execute: (env) => groupHeadersAction(env, "ROW"),
20436
+ isVisible: (env) => {
20437
+ const sheetId = env.model.getters.getActiveSheetId();
20438
+ const selection = env.model.getters.getSelectedZone();
20439
+ const groups = env.model.getters.getHeaderGroupsInZone(sheetId, "ROW", selection);
20440
+ return (IS_ONLY_ONE_RANGE(env) &&
20441
+ !groups.some((group) => group.start === selection.top && group.end === selection.bottom));
20442
+ },
20443
+ icon: "o-spreadsheet-Icon.GROUP_ROWS",
20444
+ };
20445
+ const ungroupColumns = {
20446
+ name: (env) => {
20447
+ const selection = env.model.getters.getSelectedZone();
20448
+ if (selection.left === selection.right) {
20449
+ return _t("Ungroup column %s", numberToLetters(selection.left));
20450
+ }
20451
+ return _t("Ungroup columns %s - %s", numberToLetters(selection.left), numberToLetters(selection.right));
20452
+ },
20453
+ execute: (env) => ungroupHeaders(env, "COL"),
20454
+ icon: "o-spreadsheet-Icon.UNGROUP_COLUMNS",
20455
+ };
20456
+ const ungroupRows = {
20457
+ name: (env) => {
20458
+ const selection = env.model.getters.getSelectedZone();
20459
+ if (selection.top === selection.bottom) {
20460
+ return _t("Ungroup row %s", String(selection.top + 1));
20461
+ }
20462
+ return _t("Ungroup rows %s - %s", String(selection.top + 1), String(selection.bottom + 1));
20463
+ },
20464
+ execute: (env) => ungroupHeaders(env, "ROW"),
20465
+ icon: "o-spreadsheet-Icon.UNGROUP_ROWS",
20466
+ };
20467
+ function selectionContainsFilter(env) {
20468
+ const sheetId = env.model.getters.getActiveSheetId();
20469
+ const selectedZones = env.model.getters.getSelectedZones();
20470
+ return env.model.getters.doesZonesContainFilter(sheetId, selectedZones);
20471
+ }
20472
+ function cannotCreateFilter(env) {
20473
+ return !areZonesContinuous(...env.model.getters.getSelectedZones());
20474
+ }
20475
+ function createRemoveFilterAction(env) {
20476
+ if (selectionContainsFilter(env)) {
20477
+ env.model.dispatch("REMOVE_FILTER_TABLE", {
20478
+ sheetId: env.model.getters.getActiveSheetId(),
20479
+ target: env.model.getters.getSelectedZones(),
20480
+ });
20481
+ return;
20482
+ }
20483
+ if (cannotCreateFilter(env)) {
20484
+ return;
20485
+ }
20486
+ env.model.selection.selectTableAroundSelection();
20487
+ const sheetId = env.model.getters.getActiveSheetId();
20488
+ const selection = env.model.getters.getSelectedZones();
20489
+ interactiveAddFilter(env, sheetId, selection);
20490
+ }
20491
+ function groupHeadersAction(env, dim) {
20492
+ const selection = env.model.getters.getSelectedZone();
20493
+ const sheetId = env.model.getters.getActiveSheetId();
20494
+ env.model.dispatch("GROUP_HEADERS", {
20495
+ sheetId,
20496
+ dimension: dim,
20497
+ start: dim === "COL" ? selection.left : selection.top,
20498
+ end: dim === "COL" ? selection.right : selection.bottom,
20499
+ });
20500
+ }
20501
+ function ungroupHeaders(env, dim) {
20502
+ const selection = env.model.getters.getSelectedZone();
20503
+ const sheetId = env.model.getters.getActiveSheetId();
20504
+ env.model.dispatch("UNGROUP_HEADERS", {
20505
+ sheetId,
20506
+ dimension: dim,
20507
+ start: dim === "COL" ? selection.left : selection.top,
20508
+ end: dim === "COL" ? selection.right : selection.bottom,
20509
+ });
20510
+ }
20511
+ function canUngroupHeaders(env, dimension) {
20512
+ const sheetId = env.model.getters.getActiveSheetId();
20513
+ const selection = env.model.getters.getSelectedZones();
20514
+ return (selection.length === 1 &&
20515
+ env.model.getters.getHeaderGroupsInZone(sheetId, dimension, selection[0]).length > 0);
20516
+ }
20517
+
20518
+ var ACTION_VIEW = /*#__PURE__*/Object.freeze({
20519
+ __proto__: null,
20520
+ canUngroupHeaders: canUngroupHeaders,
20521
+ createRemoveFilter: createRemoveFilter,
20522
+ createRemoveFilterAction: createRemoveFilterAction,
20523
+ freezeCurrentCol: freezeCurrentCol,
20524
+ freezeCurrentRow: freezeCurrentRow,
20525
+ freezeFirstCol: freezeFirstCol,
20526
+ freezeFirstRow: freezeFirstRow,
20527
+ freezePane: freezePane,
20528
+ freezeSecondCol: freezeSecondCol,
20529
+ freezeSecondRow: freezeSecondRow,
20530
+ groupColumns: groupColumns,
20531
+ groupRows: groupRows,
20532
+ hideCols: hideCols,
20533
+ hideRows: hideRows,
20534
+ unFreezeCols: unFreezeCols,
20535
+ unFreezePane: unFreezePane,
20536
+ unFreezeRows: unFreezeRows,
20537
+ ungroupColumns: ungroupColumns,
20538
+ ungroupRows: ungroupRows,
20539
+ unhideAllCols: unhideAllCols,
20540
+ unhideAllRows: unhideAllRows,
20541
+ unhideCols: unhideCols,
20542
+ unhideRows: unhideRows,
20543
+ viewFormulas: viewFormulas,
20544
+ viewGridlines: viewGridlines
20545
+ });
20546
+
20205
20547
  const sortRange = {
20206
20548
  name: _t("Sort range"),
20207
20549
  isVisible: IS_ONLY_ONE_RANGE,
@@ -20244,32 +20586,15 @@ const sortDescending = {
20244
20586
  },
20245
20587
  icon: "o-spreadsheet-Icon.SORT_DESCENDING",
20246
20588
  };
20247
- const addDataFilter = {
20248
- name: _t("Create filter"),
20249
- execute: (env) => {
20250
- const sheetId = env.model.getters.getActiveSheetId();
20251
- const selection = env.model.getters.getSelection().zones;
20252
- interactiveAddFilter(env, sheetId, selection);
20253
- },
20254
- isVisible: (env) => !SELECTION_CONTAINS_FILTER(env),
20589
+ const addRemoveDataFilter = {
20590
+ name: (env) => SELECTION_CONTAINS_FILTER(env) ? _t("Remove filter") : _t("Create filter"),
20591
+ execute: (env) => createRemoveFilterAction(env),
20255
20592
  isEnabled: (env) => {
20256
20593
  const selectedZones = env.model.getters.getSelectedZones();
20257
20594
  return areZonesContinuous(...selectedZones);
20258
20595
  },
20259
20596
  icon: "o-spreadsheet-Icon.MENU_FILTER_ICON",
20260
20597
  };
20261
- const removeDataFilter = {
20262
- name: _t("Remove filter"),
20263
- execute: (env) => {
20264
- const sheetId = env.model.getters.getActiveSheetId();
20265
- env.model.dispatch("REMOVE_FILTER_TABLE", {
20266
- sheetId,
20267
- target: env.model.getters.getSelectedZones(),
20268
- });
20269
- },
20270
- isVisible: SELECTION_CONTAINS_FILTER,
20271
- icon: "o-spreadsheet-Icon.MENU_FILTER_ICON",
20272
- };
20273
20598
  const splitToColumns = {
20274
20599
  name: _t("Split text to columns"),
20275
20600
  sequence: 1,
@@ -20681,331 +21006,6 @@ var ACTION_FORMAT = /*#__PURE__*/Object.freeze({
20681
21006
  textColor: textColor
20682
21007
  });
20683
21008
 
20684
- function interactiveFreezeColumnsRows(env, dimension, base) {
20685
- const sheetId = env.model.getters.getActiveSheetId();
20686
- const cmd = dimension === "COL" ? "FREEZE_COLUMNS" : "FREEZE_ROWS";
20687
- const result = env.model.dispatch(cmd, { sheetId, quantity: base });
20688
- if (result.isCancelledBecause("MergeOverlap" /* CommandResult.MergeOverlap */)) {
20689
- env.raiseError(MergeErrorMessage);
20690
- }
20691
- }
20692
-
20693
- const hideCols = {
20694
- name: HIDE_COLUMNS_NAME,
20695
- execute: (env) => {
20696
- const columns = env.model.getters.getElementsFromSelection("COL");
20697
- env.model.dispatch("HIDE_COLUMNS_ROWS", {
20698
- sheetId: env.model.getters.getActiveSheetId(),
20699
- dimension: "COL",
20700
- elements: columns,
20701
- });
20702
- },
20703
- isVisible: NOT_ALL_VISIBLE_COLS_SELECTED,
20704
- icon: "o-spreadsheet-Icon.HIDE_COL",
20705
- };
20706
- const unhideCols = {
20707
- name: _t("Unhide columns"),
20708
- execute: (env) => {
20709
- const columns = env.model.getters.getElementsFromSelection("COL");
20710
- env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20711
- sheetId: env.model.getters.getActiveSheetId(),
20712
- dimension: "COL",
20713
- elements: columns,
20714
- });
20715
- },
20716
- isVisible: (env) => {
20717
- const hiddenCols = env.model.getters
20718
- .getHiddenColsGroups(env.model.getters.getActiveSheetId())
20719
- .flat();
20720
- const currentCols = env.model.getters.getElementsFromSelection("COL");
20721
- return currentCols.some((col) => hiddenCols.includes(col));
20722
- },
20723
- };
20724
- const unhideAllCols = {
20725
- name: _t("Unhide all columns"),
20726
- execute: (env) => {
20727
- const sheetId = env.model.getters.getActiveSheetId();
20728
- env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20729
- sheetId,
20730
- dimension: "COL",
20731
- elements: Array.from(Array(env.model.getters.getNumberCols(sheetId)).keys()),
20732
- });
20733
- },
20734
- isVisible: (env) => env.model.getters.getHiddenColsGroups(env.model.getters.getActiveSheetId()).length > 0,
20735
- };
20736
- const hideRows = {
20737
- name: HIDE_ROWS_NAME,
20738
- execute: (env) => {
20739
- const rows = env.model.getters.getElementsFromSelection("ROW");
20740
- env.model.dispatch("HIDE_COLUMNS_ROWS", {
20741
- sheetId: env.model.getters.getActiveSheetId(),
20742
- dimension: "ROW",
20743
- elements: rows,
20744
- });
20745
- },
20746
- isVisible: NOT_ALL_VISIBLE_ROWS_SELECTED,
20747
- icon: "o-spreadsheet-Icon.HIDE_ROW",
20748
- };
20749
- const unhideRows = {
20750
- name: _t("Unhide rows"),
20751
- execute: (env) => {
20752
- const columns = env.model.getters.getElementsFromSelection("ROW");
20753
- env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20754
- sheetId: env.model.getters.getActiveSheetId(),
20755
- dimension: "ROW",
20756
- elements: columns,
20757
- });
20758
- },
20759
- isVisible: (env) => {
20760
- const hiddenRows = env.model.getters
20761
- .getHiddenRowsGroups(env.model.getters.getActiveSheetId())
20762
- .flat();
20763
- const currentRows = env.model.getters.getElementsFromSelection("ROW");
20764
- return currentRows.some((col) => hiddenRows.includes(col));
20765
- },
20766
- };
20767
- const unhideAllRows = {
20768
- name: _t("Unhide all rows"),
20769
- execute: (env) => {
20770
- const sheetId = env.model.getters.getActiveSheetId();
20771
- env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20772
- sheetId,
20773
- dimension: "ROW",
20774
- elements: Array.from(Array(env.model.getters.getNumberRows(sheetId)).keys()),
20775
- });
20776
- },
20777
- isVisible: (env) => env.model.getters.getHiddenRowsGroups(env.model.getters.getActiveSheetId()).length > 0,
20778
- };
20779
- const unFreezePane = {
20780
- name: _t("Unfreeze"),
20781
- isVisible: (env) => {
20782
- const { xSplit, ySplit } = env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId());
20783
- return xSplit + ySplit > 0;
20784
- },
20785
- execute: (env) => env.model.dispatch("UNFREEZE_COLUMNS_ROWS", {
20786
- sheetId: env.model.getters.getActiveSheetId(),
20787
- }),
20788
- icon: "o-spreadsheet-Icon.UNFREEZE",
20789
- };
20790
- const freezePane = {
20791
- name: _t("Freeze"),
20792
- icon: "o-spreadsheet-Icon.FREEZE",
20793
- };
20794
- const unFreezeRows = {
20795
- name: _t("No rows"),
20796
- execute: (env) => env.model.dispatch("UNFREEZE_ROWS", {
20797
- sheetId: env.model.getters.getActiveSheetId(),
20798
- }),
20799
- isReadonlyAllowed: true,
20800
- isVisible: (env) => !!env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId()).ySplit,
20801
- };
20802
- const freezeFirstRow = {
20803
- name: _t("1 row"),
20804
- execute: (env) => interactiveFreezeColumnsRows(env, "ROW", 1),
20805
- isReadonlyAllowed: true,
20806
- };
20807
- const freezeSecondRow = {
20808
- name: _t("2 rows"),
20809
- execute: (env) => interactiveFreezeColumnsRows(env, "ROW", 2),
20810
- isReadonlyAllowed: true,
20811
- };
20812
- const freezeCurrentRow = {
20813
- name: _t("Up to current row"),
20814
- execute: (env) => {
20815
- const { bottom } = env.model.getters.getSelectedZone();
20816
- interactiveFreezeColumnsRows(env, "ROW", bottom + 1);
20817
- },
20818
- isReadonlyAllowed: true,
20819
- };
20820
- const unFreezeCols = {
20821
- name: _t("No columns"),
20822
- execute: (env) => env.model.dispatch("UNFREEZE_COLUMNS", {
20823
- sheetId: env.model.getters.getActiveSheetId(),
20824
- }),
20825
- isReadonlyAllowed: true,
20826
- isVisible: (env) => !!env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId()).xSplit,
20827
- };
20828
- const freezeFirstCol = {
20829
- name: _t("1 column"),
20830
- execute: (env) => interactiveFreezeColumnsRows(env, "COL", 1),
20831
- isReadonlyAllowed: true,
20832
- };
20833
- const freezeSecondCol = {
20834
- name: _t("2 columns"),
20835
- execute: (env) => interactiveFreezeColumnsRows(env, "COL", 2),
20836
- isReadonlyAllowed: true,
20837
- };
20838
- const freezeCurrentCol = {
20839
- name: _t("Up to current column"),
20840
- execute: (env) => {
20841
- const { right } = env.model.getters.getSelectedZone();
20842
- interactiveFreezeColumnsRows(env, "COL", right + 1);
20843
- },
20844
- isReadonlyAllowed: true,
20845
- };
20846
- const viewGridlines = {
20847
- name: (env) => env.model.getters.getGridLinesVisibility(env.model.getters.getActiveSheetId())
20848
- ? _t("Hide gridlines")
20849
- : _t("Show gridlines"),
20850
- execute: (env) => {
20851
- const sheetId = env.model.getters.getActiveSheetId();
20852
- env.model.dispatch("SET_GRID_LINES_VISIBILITY", {
20853
- sheetId,
20854
- areGridLinesVisible: !env.model.getters.getGridLinesVisibility(sheetId),
20855
- });
20856
- },
20857
- icon: "o-spreadsheet-Icon.SHOW_HIDE_GRID",
20858
- };
20859
- const viewFormulas = {
20860
- name: (env) => env.model.getters.shouldShowFormulas() ? "Hide formulas" : _t("Show formulas"),
20861
- execute: (env) => env.model.dispatch("SET_FORMULA_VISIBILITY", { show: !env.model.getters.shouldShowFormulas() }),
20862
- isReadonlyAllowed: true,
20863
- icon: "o-spreadsheet-Icon.SHOW_HIDE_FORMULA",
20864
- };
20865
- const createRemoveFilter = {
20866
- name: (env) => selectionContainsFilter(env) ? _t("Remove selected filters") : _t("Create filter"),
20867
- isActive: (env) => selectionContainsFilter(env),
20868
- isEnabled: (env) => !cannotCreateFilter(env),
20869
- execute: (env) => createRemoveFilterAction(env),
20870
- icon: "o-spreadsheet-Icon.FILTER_ICON_INACTIVE",
20871
- };
20872
- const groupColumns = {
20873
- name: (env) => {
20874
- const selection = env.model.getters.getSelectedZone();
20875
- if (selection.left === selection.right) {
20876
- return _t("Group column %s", numberToLetters(selection.left));
20877
- }
20878
- return _t("Group columns %s - %s", numberToLetters(selection.left), numberToLetters(selection.right));
20879
- },
20880
- execute: (env) => groupHeadersAction(env, "COL"),
20881
- isVisible: (env) => {
20882
- const sheetId = env.model.getters.getActiveSheetId();
20883
- const selection = env.model.getters.getSelectedZone();
20884
- const groups = env.model.getters.getHeaderGroupsInZone(sheetId, "COL", selection);
20885
- return (IS_ONLY_ONE_RANGE(env) &&
20886
- !groups.some((group) => group.start === selection.left && group.end === selection.right));
20887
- },
20888
- icon: "o-spreadsheet-Icon.GROUP_COLUMNS",
20889
- };
20890
- const groupRows = {
20891
- name: (env) => {
20892
- const selection = env.model.getters.getSelectedZone();
20893
- if (selection.top === selection.bottom) {
20894
- return _t("Group row %s", String(selection.top + 1));
20895
- }
20896
- return _t("Group rows %s - %s", String(selection.top + 1), String(selection.bottom + 1));
20897
- },
20898
- execute: (env) => groupHeadersAction(env, "ROW"),
20899
- isVisible: (env) => {
20900
- const sheetId = env.model.getters.getActiveSheetId();
20901
- const selection = env.model.getters.getSelectedZone();
20902
- const groups = env.model.getters.getHeaderGroupsInZone(sheetId, "ROW", selection);
20903
- return (IS_ONLY_ONE_RANGE(env) &&
20904
- !groups.some((group) => group.start === selection.top && group.end === selection.bottom));
20905
- },
20906
- icon: "o-spreadsheet-Icon.GROUP_ROWS",
20907
- };
20908
- const ungroupColumns = {
20909
- name: (env) => {
20910
- const selection = env.model.getters.getSelectedZone();
20911
- if (selection.left === selection.right) {
20912
- return _t("Ungroup column %s", numberToLetters(selection.left));
20913
- }
20914
- return _t("Ungroup columns %s - %s", numberToLetters(selection.left), numberToLetters(selection.right));
20915
- },
20916
- execute: (env) => ungroupHeaders(env, "COL"),
20917
- icon: "o-spreadsheet-Icon.UNGROUP_COLUMNS",
20918
- };
20919
- const ungroupRows = {
20920
- name: (env) => {
20921
- const selection = env.model.getters.getSelectedZone();
20922
- if (selection.top === selection.bottom) {
20923
- return _t("Ungroup row %s", String(selection.top + 1));
20924
- }
20925
- return _t("Ungroup rows %s - %s", String(selection.top + 1), String(selection.bottom + 1));
20926
- },
20927
- execute: (env) => ungroupHeaders(env, "ROW"),
20928
- icon: "o-spreadsheet-Icon.UNGROUP_ROWS",
20929
- };
20930
- function selectionContainsFilter(env) {
20931
- const sheetId = env.model.getters.getActiveSheetId();
20932
- const selectedZones = env.model.getters.getSelectedZones();
20933
- return env.model.getters.doesZonesContainFilter(sheetId, selectedZones);
20934
- }
20935
- function cannotCreateFilter(env) {
20936
- return !areZonesContinuous(...env.model.getters.getSelectedZones());
20937
- }
20938
- function createRemoveFilterAction(env) {
20939
- if (selectionContainsFilter(env)) {
20940
- env.model.dispatch("REMOVE_FILTER_TABLE", {
20941
- sheetId: env.model.getters.getActiveSheetId(),
20942
- target: env.model.getters.getSelectedZones(),
20943
- });
20944
- return;
20945
- }
20946
- if (cannotCreateFilter(env)) {
20947
- return;
20948
- }
20949
- env.model.selection.selectTableAroundSelection();
20950
- const sheetId = env.model.getters.getActiveSheetId();
20951
- const selection = env.model.getters.getSelectedZones();
20952
- interactiveAddFilter(env, sheetId, selection);
20953
- }
20954
- function groupHeadersAction(env, dim) {
20955
- const selection = env.model.getters.getSelectedZone();
20956
- const sheetId = env.model.getters.getActiveSheetId();
20957
- env.model.dispatch("GROUP_HEADERS", {
20958
- sheetId,
20959
- dimension: dim,
20960
- start: dim === "COL" ? selection.left : selection.top,
20961
- end: dim === "COL" ? selection.right : selection.bottom,
20962
- });
20963
- }
20964
- function ungroupHeaders(env, dim) {
20965
- const selection = env.model.getters.getSelectedZone();
20966
- const sheetId = env.model.getters.getActiveSheetId();
20967
- env.model.dispatch("UNGROUP_HEADERS", {
20968
- sheetId,
20969
- dimension: dim,
20970
- start: dim === "COL" ? selection.left : selection.top,
20971
- end: dim === "COL" ? selection.right : selection.bottom,
20972
- });
20973
- }
20974
- function canUngroupHeaders(env, dimension) {
20975
- const sheetId = env.model.getters.getActiveSheetId();
20976
- const selection = env.model.getters.getSelectedZones();
20977
- return (selection.length === 1 &&
20978
- env.model.getters.getHeaderGroupsInZone(sheetId, dimension, selection[0]).length > 0);
20979
- }
20980
-
20981
- var ACTION_VIEW = /*#__PURE__*/Object.freeze({
20982
- __proto__: null,
20983
- canUngroupHeaders: canUngroupHeaders,
20984
- createRemoveFilter: createRemoveFilter,
20985
- freezeCurrentCol: freezeCurrentCol,
20986
- freezeCurrentRow: freezeCurrentRow,
20987
- freezeFirstCol: freezeFirstCol,
20988
- freezeFirstRow: freezeFirstRow,
20989
- freezePane: freezePane,
20990
- freezeSecondCol: freezeSecondCol,
20991
- freezeSecondRow: freezeSecondRow,
20992
- groupColumns: groupColumns,
20993
- groupRows: groupRows,
20994
- hideCols: hideCols,
20995
- hideRows: hideRows,
20996
- unFreezeCols: unFreezeCols,
20997
- unFreezePane: unFreezePane,
20998
- unFreezeRows: unFreezeRows,
20999
- ungroupColumns: ungroupColumns,
21000
- ungroupRows: ungroupRows,
21001
- unhideAllCols: unhideAllCols,
21002
- unhideAllRows: unhideAllRows,
21003
- unhideCols: unhideCols,
21004
- unhideRows: unhideRows,
21005
- viewFormulas: viewFormulas,
21006
- viewGridlines: viewGridlines
21007
- });
21008
-
21009
21009
  const colMenuRegistry = new MenuItemRegistry();
21010
21010
  colMenuRegistry
21011
21011
  .add("cut", {
@@ -21652,13 +21652,8 @@ topbarMenuRegistry
21652
21652
  sequence: 30,
21653
21653
  separator: true,
21654
21654
  })
21655
- .addChild("add_data_filter", ["data"], {
21656
- ...addDataFilter,
21657
- sequence: 40,
21658
- separator: true,
21659
- })
21660
- .addChild("remove_data_filter", ["data"], {
21661
- ...removeDataFilter,
21655
+ .addChild("add_remove_data_filter", ["data"], {
21656
+ ...addRemoveDataFilter,
21662
21657
  sequence: 40,
21663
21658
  separator: true,
21664
21659
  });
@@ -28343,6 +28338,10 @@ css /*SCSS*/ `
28343
28338
  height: 0px;
28344
28339
  }
28345
28340
  }
28341
+ .o-figure-container {
28342
+ -webkit-user-select: none; // safari
28343
+ user-select: none;
28344
+ }
28346
28345
  `;
28347
28346
  /**
28348
28347
  * Each figure ⭐ is positioned inside a container `div` placed and sized
@@ -49305,7 +49304,7 @@ class FilterEvaluationPlugin extends UIPlugin {
49305
49304
  "isFilterActive",
49306
49305
  ];
49307
49306
  filterValues = {};
49308
- hiddenRows = new Set();
49307
+ hiddenRows = {};
49309
49308
  isEvaluationDirty = false;
49310
49309
  allowDispatch(cmd) {
49311
49310
  switch (cmd.type) {
@@ -49348,11 +49347,11 @@ class FilterEvaluationPlugin extends UIPlugin {
49348
49347
  case "UNFOLD_HEADER_GROUP":
49349
49348
  case "FOLD_ALL_HEADER_GROUPS":
49350
49349
  case "UNFOLD_ALL_HEADER_GROUPS":
49351
- this.updateHiddenRows();
49350
+ this.updateHiddenRows(cmd.sheetId);
49352
49351
  break;
49353
49352
  case "UPDATE_FILTER":
49354
49353
  this.updateFilter(cmd);
49355
- this.updateHiddenRows();
49354
+ this.updateHiddenRows(cmd.sheetId);
49356
49355
  break;
49357
49356
  case "DUPLICATE_SHEET":
49358
49357
  const filterValues = {};
@@ -49372,15 +49371,14 @@ class FilterEvaluationPlugin extends UIPlugin {
49372
49371
  }
49373
49372
  finalize() {
49374
49373
  if (this.isEvaluationDirty) {
49375
- this.updateHiddenRows();
49374
+ for (const sheetId of this.getters.getSheetIds()) {
49375
+ this.updateHiddenRows(sheetId);
49376
+ }
49376
49377
  this.isEvaluationDirty = false;
49377
49378
  }
49378
49379
  }
49379
49380
  isRowFiltered(sheetId, row) {
49380
- if (sheetId !== this.getters.getActiveSheetId()) {
49381
- return false;
49382
- }
49383
- return this.hiddenRows.has(row);
49381
+ return !!this.hiddenRows[sheetId]?.has(row);
49384
49382
  }
49385
49383
  getCellBorderWithFilterBorder(position) {
49386
49384
  const { sheetId, col, row } = position;
@@ -49431,8 +49429,7 @@ class FilterEvaluationPlugin extends UIPlugin {
49431
49429
  this.filterValues[sheetId] = {};
49432
49430
  this.filterValues[sheetId][id] = hiddenValues;
49433
49431
  }
49434
- updateHiddenRows() {
49435
- const sheetId = this.getters.getActiveSheetId();
49432
+ updateHiddenRows(sheetId) {
49436
49433
  const filters = this.getters
49437
49434
  .getFilters(sheetId)
49438
49435
  .sort((filter1, filter2) => filter1.zoneWithHeaders.top - filter2.zoneWithHeaders.top);
@@ -49453,7 +49450,7 @@ class FilterEvaluationPlugin extends UIPlugin {
49453
49450
  }
49454
49451
  }
49455
49452
  }
49456
- this.hiddenRows = hiddenRows;
49453
+ this.hiddenRows[sheetId] = hiddenRows;
49457
49454
  }
49458
49455
  getCellValueAsString(sheetId, col, row) {
49459
49456
  const value = this.getters.getEvaluatedCell({ sheetId, col, row }).formattedValue;
@@ -50563,13 +50560,14 @@ class SheetViewPlugin extends UIPlugin {
50563
50560
  }
50564
50561
  }
50565
50562
  handleEvent(event) {
50563
+ const sheetId = this.getters.getActiveSheetId();
50566
50564
  if (event.options.scrollIntoView) {
50567
50565
  let { col, row } = findCellInNewZone(event.previousAnchor.zone, event.anchor.zone);
50568
50566
  if (event.mode === "updateAnchor") {
50569
50567
  const oldZone = event.previousAnchor.zone;
50570
50568
  const newZone = event.anchor.zone;
50571
50569
  // altering a zone should not move the viewport in a dimension that wasn't changed
50572
- const { top, bottom, left, right } = this.getters.getActiveMainViewport();
50570
+ const { top, bottom, left, right } = this.getMainInternalViewport(sheetId);
50573
50571
  if (oldZone.left === newZone.left && oldZone.right === newZone.right) {
50574
50572
  col = left > col || col > right ? left : col;
50575
50573
  }
@@ -50577,7 +50575,6 @@ class SheetViewPlugin extends UIPlugin {
50577
50575
  row = top > row || row > bottom ? top : row;
50578
50576
  }
50579
50577
  }
50580
- const sheetId = this.getters.getActiveSheetId();
50581
50578
  col = Math.min(col, this.getters.getNumberCols(sheetId) - 1);
50582
50579
  row = Math.min(row, this.getters.getNumberRows(sheetId) - 1);
50583
50580
  if (!this.sheetsWithDirtyViewports.has(sheetId)) {
@@ -50614,16 +50611,16 @@ class SheetViewPlugin extends UIPlugin {
50614
50611
  this.setSheetViewOffset(cmd.offsetX, cmd.offsetY);
50615
50612
  break;
50616
50613
  case "SHIFT_VIEWPORT_DOWN":
50617
- const { top } = this.getActiveMainViewport();
50618
50614
  const sheetId = this.getters.getActiveSheetId();
50619
- const shiftedOffsetY = this.clipOffsetY(this.getters.getRowDimensions(sheetId, top).start + this.sheetViewHeight);
50620
- this.shiftVertically(shiftedOffsetY);
50615
+ const { top, viewportHeight, offsetCorrectionY } = this.getMainInternalViewport(sheetId);
50616
+ const topRowDims = this.getters.getRowDimensions(sheetId, top);
50617
+ this.shiftVertically(topRowDims.start + viewportHeight - offsetCorrectionY);
50621
50618
  break;
50622
50619
  case "SHIFT_VIEWPORT_UP": {
50623
- const { top } = this.getActiveMainViewport();
50624
50620
  const sheetId = this.getters.getActiveSheetId();
50625
- const shiftedOffsetY = this.clipOffsetY(this.getters.getRowDimensions(sheetId, top).end - this.sheetViewHeight);
50626
- this.shiftVertically(shiftedOffsetY);
50621
+ const { top, viewportHeight, offsetCorrectionY } = this.getMainInternalViewport(sheetId);
50622
+ const topRowDims = this.getters.getRowDimensions(sheetId, top);
50623
+ this.shiftVertically(topRowDims.end - offsetCorrectionY - viewportHeight);
50627
50624
  break;
50628
50625
  }
50629
50626
  case "REMOVE_FILTER_TABLE":
@@ -51016,17 +51013,6 @@ class SheetViewPlugin extends UIPlugin {
51016
51013
  const { maxOffsetX, maxOffsetY } = this.getMaximumSheetOffset();
51017
51014
  Object.values(this.getSubViewports(sheetId)).forEach((viewport) => viewport.setViewportOffset(clip(offsetX, 0, maxOffsetX), clip(offsetY, 0, maxOffsetY)));
51018
51015
  }
51019
- /**
51020
- * Clip the vertical offset within the allowed range.
51021
- * Not above the sheet, nor below the sheet.
51022
- */
51023
- clipOffsetY(offsetY) {
51024
- const { height } = this.getMainViewportRect();
51025
- const maxOffset = height - this.sheetViewHeight;
51026
- offsetY = Math.min(offsetY, maxOffset);
51027
- offsetY = Math.max(offsetY, 0);
51028
- return offsetY;
51029
- }
51030
51016
  getViewportOffset(sheetId) {
51031
51017
  return {
51032
51018
  x: this.viewports[sheetId]?.bottomRight.offsetScrollbarX || 0,
@@ -51082,12 +51068,15 @@ class SheetViewPlugin extends UIPlugin {
51082
51068
  * viewport top.
51083
51069
  */
51084
51070
  shiftVertically(offset) {
51085
- const { top } = this.getActiveMainViewport();
51071
+ const sheetId = this.getters.getActiveSheetId();
51072
+ const { top } = this.getMainInternalViewport(sheetId);
51086
51073
  const { scrollX } = this.getActiveSheetScrollInfo();
51087
51074
  this.setSheetViewOffset(scrollX, offset);
51088
51075
  const { anchor } = this.getters.getSelection();
51089
- const deltaRow = this.getActiveMainViewport().top - top;
51090
- this.selection.selectCell(anchor.cell.col, anchor.cell.row + deltaRow);
51076
+ if (anchor.cell.row >= this.getters.getPaneDivisions(sheetId).ySplit) {
51077
+ const deltaRow = this.getMainInternalViewport(sheetId).top - top;
51078
+ this.selection.selectCell(anchor.cell.col, anchor.cell.row + deltaRow);
51079
+ }
51091
51080
  }
51092
51081
  getVisibleFigures() {
51093
51082
  const sheetId = this.getters.getActiveSheetId();
@@ -52018,7 +52007,6 @@ css /* scss */ `
52018
52007
  cursor: pointer;
52019
52008
  }
52020
52009
  `;
52021
- let tKey = 1;
52022
52010
  class SpreadsheetDashboard extends Component {
52023
52011
  static template = "o-spreadsheet-SpreadsheetDashboard";
52024
52012
  static props = {};
@@ -52097,13 +52085,9 @@ class SpreadsheetDashboard extends Component {
52097
52085
  coordinates: rect,
52098
52086
  position: { col, row },
52099
52087
  action,
52100
- // we can't rely on position only because a row or a column could
52101
- // be inserted at any time.
52102
- tKey: `${tKey}-${col}-${row}`,
52103
52088
  });
52104
52089
  }
52105
52090
  }
52106
- tKey++;
52107
52091
  return cells;
52108
52092
  }
52109
52093
  getClickableAction(position) {
@@ -57334,6 +57318,6 @@ const constants = {
57334
57318
  export { AbstractChart, CellErrorType, 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 };
57335
57319
 
57336
57320
 
57337
- __info__.version = "17.1.11";
57338
- __info__.date = "2024-04-10T12:27:11.107Z";
57339
- __info__.hash = "246caf7";
57321
+ __info__.version = "17.1.12";
57322
+ __info__.date = "2024-04-18T16:45:30.109Z";
57323
+ __info__.hash = "3e90776";