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