@odoo/o-spreadsheet 17.0.18 → 17.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,9 +2,9 @@
2
2
  /**
3
3
  * This file is generated by o-spreadsheet build tools. Do not edit it.
4
4
  * @see https://github.com/odoo/o-spreadsheet
5
- * @version 17.0.18
6
- * @date 2024-04-10T13:28:23.664Z
7
- * @hash 6294758
5
+ * @version 17.0.19
6
+ * @date 2024-04-18T16:41:42.291Z
7
+ * @hash 9f3317a
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';
@@ -8118,6 +8118,7 @@ class LinkEditor extends Component {
8118
8118
  this.save();
8119
8119
  }
8120
8120
  ev.stopPropagation();
8121
+ ev.preventDefault();
8121
8122
  break;
8122
8123
  case "Escape":
8123
8124
  this.cancel();
@@ -19900,6 +19901,332 @@ function interactiveAddFilter(env, sheetId, target) {
19900
19901
  }
19901
19902
  }
19902
19903
 
19904
+ function interactiveFreezeColumnsRows(env, dimension, base) {
19905
+ const sheetId = env.model.getters.getActiveSheetId();
19906
+ const cmd = dimension === "COL" ? "FREEZE_COLUMNS" : "FREEZE_ROWS";
19907
+ const result = env.model.dispatch(cmd, { sheetId, quantity: base });
19908
+ if (result.isCancelledBecause("MergeOverlap" /* CommandResult.MergeOverlap */)) {
19909
+ env.raiseError(MergeErrorMessage);
19910
+ }
19911
+ }
19912
+
19913
+ const hideCols = {
19914
+ name: HIDE_COLUMNS_NAME,
19915
+ execute: (env) => {
19916
+ const columns = env.model.getters.getElementsFromSelection("COL");
19917
+ env.model.dispatch("HIDE_COLUMNS_ROWS", {
19918
+ sheetId: env.model.getters.getActiveSheetId(),
19919
+ dimension: "COL",
19920
+ elements: columns,
19921
+ });
19922
+ },
19923
+ isVisible: NOT_ALL_VISIBLE_COLS_SELECTED,
19924
+ icon: "o-spreadsheet-Icon.HIDE_COL",
19925
+ };
19926
+ const unhideCols = {
19927
+ name: _t("Unhide columns"),
19928
+ execute: (env) => {
19929
+ const columns = env.model.getters.getElementsFromSelection("COL");
19930
+ env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
19931
+ sheetId: env.model.getters.getActiveSheetId(),
19932
+ dimension: "COL",
19933
+ elements: columns,
19934
+ });
19935
+ },
19936
+ isVisible: (env) => {
19937
+ const hiddenCols = env.model.getters
19938
+ .getHiddenColsGroups(env.model.getters.getActiveSheetId())
19939
+ .flat();
19940
+ const currentCols = env.model.getters.getElementsFromSelection("COL");
19941
+ return currentCols.some((col) => hiddenCols.includes(col));
19942
+ },
19943
+ };
19944
+ const unhideAllCols = {
19945
+ name: _t("Unhide all columns"),
19946
+ execute: (env) => {
19947
+ const sheetId = env.model.getters.getActiveSheetId();
19948
+ env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
19949
+ sheetId,
19950
+ dimension: "COL",
19951
+ elements: Array.from(Array(env.model.getters.getNumberCols(sheetId)).keys()),
19952
+ });
19953
+ },
19954
+ isVisible: (env) => env.model.getters.getHiddenColsGroups(env.model.getters.getActiveSheetId()).length > 0,
19955
+ };
19956
+ const hideRows = {
19957
+ name: HIDE_ROWS_NAME,
19958
+ execute: (env) => {
19959
+ const rows = env.model.getters.getElementsFromSelection("ROW");
19960
+ env.model.dispatch("HIDE_COLUMNS_ROWS", {
19961
+ sheetId: env.model.getters.getActiveSheetId(),
19962
+ dimension: "ROW",
19963
+ elements: rows,
19964
+ });
19965
+ },
19966
+ isVisible: NOT_ALL_VISIBLE_ROWS_SELECTED,
19967
+ icon: "o-spreadsheet-Icon.HIDE_ROW",
19968
+ };
19969
+ const unhideRows = {
19970
+ name: _t("Unhide rows"),
19971
+ execute: (env) => {
19972
+ const columns = env.model.getters.getElementsFromSelection("ROW");
19973
+ env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
19974
+ sheetId: env.model.getters.getActiveSheetId(),
19975
+ dimension: "ROW",
19976
+ elements: columns,
19977
+ });
19978
+ },
19979
+ isVisible: (env) => {
19980
+ const hiddenRows = env.model.getters
19981
+ .getHiddenRowsGroups(env.model.getters.getActiveSheetId())
19982
+ .flat();
19983
+ const currentRows = env.model.getters.getElementsFromSelection("ROW");
19984
+ return currentRows.some((col) => hiddenRows.includes(col));
19985
+ },
19986
+ };
19987
+ const unhideAllRows = {
19988
+ name: _t("Unhide all rows"),
19989
+ execute: (env) => {
19990
+ const sheetId = env.model.getters.getActiveSheetId();
19991
+ env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
19992
+ sheetId,
19993
+ dimension: "ROW",
19994
+ elements: Array.from(Array(env.model.getters.getNumberRows(sheetId)).keys()),
19995
+ });
19996
+ },
19997
+ isVisible: (env) => env.model.getters.getHiddenRowsGroups(env.model.getters.getActiveSheetId()).length > 0,
19998
+ };
19999
+ const unFreezePane = {
20000
+ name: _t("Unfreeze"),
20001
+ isVisible: (env) => {
20002
+ const { xSplit, ySplit } = env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId());
20003
+ return xSplit + ySplit > 0;
20004
+ },
20005
+ execute: (env) => env.model.dispatch("UNFREEZE_COLUMNS_ROWS", {
20006
+ sheetId: env.model.getters.getActiveSheetId(),
20007
+ }),
20008
+ icon: "o-spreadsheet-Icon.UNFREEZE",
20009
+ };
20010
+ const freezePane = {
20011
+ name: _t("Freeze"),
20012
+ icon: "o-spreadsheet-Icon.FREEZE",
20013
+ };
20014
+ const unFreezeRows = {
20015
+ name: _t("No rows"),
20016
+ execute: (env) => env.model.dispatch("UNFREEZE_ROWS", {
20017
+ sheetId: env.model.getters.getActiveSheetId(),
20018
+ }),
20019
+ isReadonlyAllowed: true,
20020
+ isVisible: (env) => !!env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId()).ySplit,
20021
+ };
20022
+ const freezeFirstRow = {
20023
+ name: _t("1 row"),
20024
+ execute: (env) => interactiveFreezeColumnsRows(env, "ROW", 1),
20025
+ isReadonlyAllowed: true,
20026
+ };
20027
+ const freezeSecondRow = {
20028
+ name: _t("2 rows"),
20029
+ execute: (env) => interactiveFreezeColumnsRows(env, "ROW", 2),
20030
+ isReadonlyAllowed: true,
20031
+ };
20032
+ const freezeCurrentRow = {
20033
+ name: _t("Up to current row"),
20034
+ execute: (env) => {
20035
+ const { bottom } = env.model.getters.getSelectedZone();
20036
+ interactiveFreezeColumnsRows(env, "ROW", bottom + 1);
20037
+ },
20038
+ isReadonlyAllowed: true,
20039
+ };
20040
+ const unFreezeCols = {
20041
+ name: _t("No columns"),
20042
+ execute: (env) => env.model.dispatch("UNFREEZE_COLUMNS", {
20043
+ sheetId: env.model.getters.getActiveSheetId(),
20044
+ }),
20045
+ isReadonlyAllowed: true,
20046
+ isVisible: (env) => !!env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId()).xSplit,
20047
+ };
20048
+ const freezeFirstCol = {
20049
+ name: _t("1 column"),
20050
+ execute: (env) => interactiveFreezeColumnsRows(env, "COL", 1),
20051
+ isReadonlyAllowed: true,
20052
+ };
20053
+ const freezeSecondCol = {
20054
+ name: _t("2 columns"),
20055
+ execute: (env) => interactiveFreezeColumnsRows(env, "COL", 2),
20056
+ isReadonlyAllowed: true,
20057
+ };
20058
+ const freezeCurrentCol = {
20059
+ name: _t("Up to current column"),
20060
+ execute: (env) => {
20061
+ const { right } = env.model.getters.getSelectedZone();
20062
+ interactiveFreezeColumnsRows(env, "COL", right + 1);
20063
+ },
20064
+ isReadonlyAllowed: true,
20065
+ };
20066
+ const viewGridlines = {
20067
+ name: (env) => env.model.getters.getGridLinesVisibility(env.model.getters.getActiveSheetId())
20068
+ ? _t("Hide gridlines")
20069
+ : _t("Show gridlines"),
20070
+ execute: (env) => {
20071
+ const sheetId = env.model.getters.getActiveSheetId();
20072
+ env.model.dispatch("SET_GRID_LINES_VISIBILITY", {
20073
+ sheetId,
20074
+ areGridLinesVisible: !env.model.getters.getGridLinesVisibility(sheetId),
20075
+ });
20076
+ },
20077
+ icon: "o-spreadsheet-Icon.SHOW_HIDE_GRID",
20078
+ };
20079
+ const viewFormulas = {
20080
+ name: (env) => env.model.getters.shouldShowFormulas() ? "Hide formulas" : _t("Show formulas"),
20081
+ execute: (env) => env.model.dispatch("SET_FORMULA_VISIBILITY", { show: !env.model.getters.shouldShowFormulas() }),
20082
+ isReadonlyAllowed: true,
20083
+ icon: "o-spreadsheet-Icon.SHOW_HIDE_FORMULA",
20084
+ };
20085
+ const createRemoveFilter = {
20086
+ name: (env) => selectionContainsFilter(env) ? _t("Remove selected filters") : _t("Create filter"),
20087
+ isActive: (env) => selectionContainsFilter(env),
20088
+ isEnabled: (env) => !cannotCreateFilter(env),
20089
+ execute: (env) => createRemoveFilterAction(env),
20090
+ icon: "o-spreadsheet-Icon.FILTER_ICON_INACTIVE",
20091
+ };
20092
+ const groupColumns = {
20093
+ name: (env) => {
20094
+ const selection = env.model.getters.getSelectedZone();
20095
+ if (selection.left === selection.right) {
20096
+ return _t("Group column %s", numberToLetters(selection.left));
20097
+ }
20098
+ return _t("Group columns %s - %s", numberToLetters(selection.left), numberToLetters(selection.right));
20099
+ },
20100
+ execute: (env) => groupHeadersAction(env, "COL"),
20101
+ isVisible: (env) => {
20102
+ const sheetId = env.model.getters.getActiveSheetId();
20103
+ const selection = env.model.getters.getSelectedZone();
20104
+ const groups = env.model.getters.getHeaderGroupsInZone(sheetId, "COL", selection);
20105
+ return (IS_ONLY_ONE_RANGE(env) &&
20106
+ !groups.some((group) => group.start === selection.left && group.end === selection.right));
20107
+ },
20108
+ icon: "o-spreadsheet-Icon.GROUP_COLUMNS",
20109
+ };
20110
+ const groupRows = {
20111
+ name: (env) => {
20112
+ const selection = env.model.getters.getSelectedZone();
20113
+ if (selection.top === selection.bottom) {
20114
+ return _t("Group row %s", String(selection.top + 1));
20115
+ }
20116
+ return _t("Group rows %s - %s", String(selection.top + 1), String(selection.bottom + 1));
20117
+ },
20118
+ execute: (env) => groupHeadersAction(env, "ROW"),
20119
+ isVisible: (env) => {
20120
+ const sheetId = env.model.getters.getActiveSheetId();
20121
+ const selection = env.model.getters.getSelectedZone();
20122
+ const groups = env.model.getters.getHeaderGroupsInZone(sheetId, "ROW", selection);
20123
+ return (IS_ONLY_ONE_RANGE(env) &&
20124
+ !groups.some((group) => group.start === selection.top && group.end === selection.bottom));
20125
+ },
20126
+ icon: "o-spreadsheet-Icon.GROUP_ROWS",
20127
+ };
20128
+ const ungroupColumns = {
20129
+ name: (env) => {
20130
+ const selection = env.model.getters.getSelectedZone();
20131
+ if (selection.left === selection.right) {
20132
+ return _t("Ungroup column %s", numberToLetters(selection.left));
20133
+ }
20134
+ return _t("Ungroup columns %s - %s", numberToLetters(selection.left), numberToLetters(selection.right));
20135
+ },
20136
+ execute: (env) => ungroupHeaders(env, "COL"),
20137
+ icon: "o-spreadsheet-Icon.UNGROUP_COLUMNS",
20138
+ };
20139
+ const ungroupRows = {
20140
+ name: (env) => {
20141
+ const selection = env.model.getters.getSelectedZone();
20142
+ if (selection.top === selection.bottom) {
20143
+ return _t("Ungroup row %s", String(selection.top + 1));
20144
+ }
20145
+ return _t("Ungroup rows %s - %s", String(selection.top + 1), String(selection.bottom + 1));
20146
+ },
20147
+ execute: (env) => ungroupHeaders(env, "ROW"),
20148
+ icon: "o-spreadsheet-Icon.UNGROUP_ROWS",
20149
+ };
20150
+ function selectionContainsFilter(env) {
20151
+ const sheetId = env.model.getters.getActiveSheetId();
20152
+ const selectedZones = env.model.getters.getSelectedZones();
20153
+ return env.model.getters.doesZonesContainFilter(sheetId, selectedZones);
20154
+ }
20155
+ function cannotCreateFilter(env) {
20156
+ return !areZonesContinuous(...env.model.getters.getSelectedZones());
20157
+ }
20158
+ function createRemoveFilterAction(env) {
20159
+ if (selectionContainsFilter(env)) {
20160
+ env.model.dispatch("REMOVE_FILTER_TABLE", {
20161
+ sheetId: env.model.getters.getActiveSheetId(),
20162
+ target: env.model.getters.getSelectedZones(),
20163
+ });
20164
+ return;
20165
+ }
20166
+ if (cannotCreateFilter(env)) {
20167
+ return;
20168
+ }
20169
+ env.model.selection.selectTableAroundSelection();
20170
+ const sheetId = env.model.getters.getActiveSheetId();
20171
+ const selection = env.model.getters.getSelectedZones();
20172
+ interactiveAddFilter(env, sheetId, selection);
20173
+ }
20174
+ function groupHeadersAction(env, dim) {
20175
+ const selection = env.model.getters.getSelectedZone();
20176
+ const sheetId = env.model.getters.getActiveSheetId();
20177
+ env.model.dispatch("GROUP_HEADERS", {
20178
+ sheetId,
20179
+ dimension: dim,
20180
+ start: dim === "COL" ? selection.left : selection.top,
20181
+ end: dim === "COL" ? selection.right : selection.bottom,
20182
+ });
20183
+ }
20184
+ function ungroupHeaders(env, dim) {
20185
+ const selection = env.model.getters.getSelectedZone();
20186
+ const sheetId = env.model.getters.getActiveSheetId();
20187
+ env.model.dispatch("UNGROUP_HEADERS", {
20188
+ sheetId,
20189
+ dimension: dim,
20190
+ start: dim === "COL" ? selection.left : selection.top,
20191
+ end: dim === "COL" ? selection.right : selection.bottom,
20192
+ });
20193
+ }
20194
+ function canUngroupHeaders(env, dimension) {
20195
+ const sheetId = env.model.getters.getActiveSheetId();
20196
+ const selection = env.model.getters.getSelectedZones();
20197
+ return (selection.length === 1 &&
20198
+ env.model.getters.getHeaderGroupsInZone(sheetId, dimension, selection[0]).length > 0);
20199
+ }
20200
+
20201
+ var ACTION_VIEW = /*#__PURE__*/Object.freeze({
20202
+ __proto__: null,
20203
+ canUngroupHeaders: canUngroupHeaders,
20204
+ createRemoveFilter: createRemoveFilter,
20205
+ createRemoveFilterAction: createRemoveFilterAction,
20206
+ freezeCurrentCol: freezeCurrentCol,
20207
+ freezeCurrentRow: freezeCurrentRow,
20208
+ freezeFirstCol: freezeFirstCol,
20209
+ freezeFirstRow: freezeFirstRow,
20210
+ freezePane: freezePane,
20211
+ freezeSecondCol: freezeSecondCol,
20212
+ freezeSecondRow: freezeSecondRow,
20213
+ groupColumns: groupColumns,
20214
+ groupRows: groupRows,
20215
+ hideCols: hideCols,
20216
+ hideRows: hideRows,
20217
+ unFreezeCols: unFreezeCols,
20218
+ unFreezePane: unFreezePane,
20219
+ unFreezeRows: unFreezeRows,
20220
+ ungroupColumns: ungroupColumns,
20221
+ ungroupRows: ungroupRows,
20222
+ unhideAllCols: unhideAllCols,
20223
+ unhideAllRows: unhideAllRows,
20224
+ unhideCols: unhideCols,
20225
+ unhideRows: unhideRows,
20226
+ viewFormulas: viewFormulas,
20227
+ viewGridlines: viewGridlines
20228
+ });
20229
+
19903
20230
  const sortRange = {
19904
20231
  name: _t("Sort range"),
19905
20232
  isVisible: IS_ONLY_ONE_RANGE,
@@ -19942,32 +20269,15 @@ const sortDescending = {
19942
20269
  },
19943
20270
  icon: "o-spreadsheet-Icon.SORT_DESCENDING",
19944
20271
  };
19945
- const addDataFilter = {
19946
- name: _t("Create filter"),
19947
- execute: (env) => {
19948
- const sheetId = env.model.getters.getActiveSheetId();
19949
- const selection = env.model.getters.getSelection().zones;
19950
- interactiveAddFilter(env, sheetId, selection);
19951
- },
19952
- isVisible: (env) => !SELECTION_CONTAINS_FILTER(env),
20272
+ const addRemoveDataFilter = {
20273
+ name: (env) => SELECTION_CONTAINS_FILTER(env) ? _t("Remove filter") : _t("Create filter"),
20274
+ execute: (env) => createRemoveFilterAction(env),
19953
20275
  isEnabled: (env) => {
19954
20276
  const selectedZones = env.model.getters.getSelectedZones();
19955
20277
  return areZonesContinuous(...selectedZones);
19956
20278
  },
19957
20279
  icon: "o-spreadsheet-Icon.MENU_FILTER_ICON",
19958
20280
  };
19959
- const removeDataFilter = {
19960
- name: _t("Remove filter"),
19961
- execute: (env) => {
19962
- const sheetId = env.model.getters.getActiveSheetId();
19963
- env.model.dispatch("REMOVE_FILTER_TABLE", {
19964
- sheetId,
19965
- target: env.model.getters.getSelectedZones(),
19966
- });
19967
- },
19968
- isVisible: SELECTION_CONTAINS_FILTER,
19969
- icon: "o-spreadsheet-Icon.MENU_FILTER_ICON",
19970
- };
19971
20281
  const splitToColumns = {
19972
20282
  name: _t("Split text to columns"),
19973
20283
  sequence: 1,
@@ -20373,331 +20683,6 @@ var ACTION_FORMAT = /*#__PURE__*/Object.freeze({
20373
20683
  textColor: textColor
20374
20684
  });
20375
20685
 
20376
- function interactiveFreezeColumnsRows(env, dimension, base) {
20377
- const sheetId = env.model.getters.getActiveSheetId();
20378
- const cmd = dimension === "COL" ? "FREEZE_COLUMNS" : "FREEZE_ROWS";
20379
- const result = env.model.dispatch(cmd, { sheetId, quantity: base });
20380
- if (result.isCancelledBecause("MergeOverlap" /* CommandResult.MergeOverlap */)) {
20381
- env.raiseError(MergeErrorMessage);
20382
- }
20383
- }
20384
-
20385
- const hideCols = {
20386
- name: HIDE_COLUMNS_NAME,
20387
- execute: (env) => {
20388
- const columns = env.model.getters.getElementsFromSelection("COL");
20389
- env.model.dispatch("HIDE_COLUMNS_ROWS", {
20390
- sheetId: env.model.getters.getActiveSheetId(),
20391
- dimension: "COL",
20392
- elements: columns,
20393
- });
20394
- },
20395
- isVisible: NOT_ALL_VISIBLE_COLS_SELECTED,
20396
- icon: "o-spreadsheet-Icon.HIDE_COL",
20397
- };
20398
- const unhideCols = {
20399
- name: _t("Unhide columns"),
20400
- execute: (env) => {
20401
- const columns = env.model.getters.getElementsFromSelection("COL");
20402
- env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20403
- sheetId: env.model.getters.getActiveSheetId(),
20404
- dimension: "COL",
20405
- elements: columns,
20406
- });
20407
- },
20408
- isVisible: (env) => {
20409
- const hiddenCols = env.model.getters
20410
- .getHiddenColsGroups(env.model.getters.getActiveSheetId())
20411
- .flat();
20412
- const currentCols = env.model.getters.getElementsFromSelection("COL");
20413
- return currentCols.some((col) => hiddenCols.includes(col));
20414
- },
20415
- };
20416
- const unhideAllCols = {
20417
- name: _t("Unhide all columns"),
20418
- execute: (env) => {
20419
- const sheetId = env.model.getters.getActiveSheetId();
20420
- env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20421
- sheetId,
20422
- dimension: "COL",
20423
- elements: Array.from(Array(env.model.getters.getNumberCols(sheetId)).keys()),
20424
- });
20425
- },
20426
- isVisible: (env) => env.model.getters.getHiddenColsGroups(env.model.getters.getActiveSheetId()).length > 0,
20427
- };
20428
- const hideRows = {
20429
- name: HIDE_ROWS_NAME,
20430
- execute: (env) => {
20431
- const rows = env.model.getters.getElementsFromSelection("ROW");
20432
- env.model.dispatch("HIDE_COLUMNS_ROWS", {
20433
- sheetId: env.model.getters.getActiveSheetId(),
20434
- dimension: "ROW",
20435
- elements: rows,
20436
- });
20437
- },
20438
- isVisible: NOT_ALL_VISIBLE_ROWS_SELECTED,
20439
- icon: "o-spreadsheet-Icon.HIDE_ROW",
20440
- };
20441
- const unhideRows = {
20442
- name: _t("Unhide rows"),
20443
- execute: (env) => {
20444
- const columns = env.model.getters.getElementsFromSelection("ROW");
20445
- env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20446
- sheetId: env.model.getters.getActiveSheetId(),
20447
- dimension: "ROW",
20448
- elements: columns,
20449
- });
20450
- },
20451
- isVisible: (env) => {
20452
- const hiddenRows = env.model.getters
20453
- .getHiddenRowsGroups(env.model.getters.getActiveSheetId())
20454
- .flat();
20455
- const currentRows = env.model.getters.getElementsFromSelection("ROW");
20456
- return currentRows.some((col) => hiddenRows.includes(col));
20457
- },
20458
- };
20459
- const unhideAllRows = {
20460
- name: _t("Unhide all rows"),
20461
- execute: (env) => {
20462
- const sheetId = env.model.getters.getActiveSheetId();
20463
- env.model.dispatch("UNHIDE_COLUMNS_ROWS", {
20464
- sheetId,
20465
- dimension: "ROW",
20466
- elements: Array.from(Array(env.model.getters.getNumberRows(sheetId)).keys()),
20467
- });
20468
- },
20469
- isVisible: (env) => env.model.getters.getHiddenRowsGroups(env.model.getters.getActiveSheetId()).length > 0,
20470
- };
20471
- const unFreezePane = {
20472
- name: _t("Unfreeze"),
20473
- isVisible: (env) => {
20474
- const { xSplit, ySplit } = env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId());
20475
- return xSplit + ySplit > 0;
20476
- },
20477
- execute: (env) => env.model.dispatch("UNFREEZE_COLUMNS_ROWS", {
20478
- sheetId: env.model.getters.getActiveSheetId(),
20479
- }),
20480
- icon: "o-spreadsheet-Icon.UNFREEZE",
20481
- };
20482
- const freezePane = {
20483
- name: _t("Freeze"),
20484
- icon: "o-spreadsheet-Icon.FREEZE",
20485
- };
20486
- const unFreezeRows = {
20487
- name: _t("No rows"),
20488
- execute: (env) => env.model.dispatch("UNFREEZE_ROWS", {
20489
- sheetId: env.model.getters.getActiveSheetId(),
20490
- }),
20491
- isReadonlyAllowed: true,
20492
- isVisible: (env) => !!env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId()).ySplit,
20493
- };
20494
- const freezeFirstRow = {
20495
- name: _t("1 row"),
20496
- execute: (env) => interactiveFreezeColumnsRows(env, "ROW", 1),
20497
- isReadonlyAllowed: true,
20498
- };
20499
- const freezeSecondRow = {
20500
- name: _t("2 rows"),
20501
- execute: (env) => interactiveFreezeColumnsRows(env, "ROW", 2),
20502
- isReadonlyAllowed: true,
20503
- };
20504
- const freezeCurrentRow = {
20505
- name: _t("Up to current row"),
20506
- execute: (env) => {
20507
- const { bottom } = env.model.getters.getSelectedZone();
20508
- interactiveFreezeColumnsRows(env, "ROW", bottom + 1);
20509
- },
20510
- isReadonlyAllowed: true,
20511
- };
20512
- const unFreezeCols = {
20513
- name: _t("No columns"),
20514
- execute: (env) => env.model.dispatch("UNFREEZE_COLUMNS", {
20515
- sheetId: env.model.getters.getActiveSheetId(),
20516
- }),
20517
- isReadonlyAllowed: true,
20518
- isVisible: (env) => !!env.model.getters.getPaneDivisions(env.model.getters.getActiveSheetId()).xSplit,
20519
- };
20520
- const freezeFirstCol = {
20521
- name: _t("1 column"),
20522
- execute: (env) => interactiveFreezeColumnsRows(env, "COL", 1),
20523
- isReadonlyAllowed: true,
20524
- };
20525
- const freezeSecondCol = {
20526
- name: _t("2 columns"),
20527
- execute: (env) => interactiveFreezeColumnsRows(env, "COL", 2),
20528
- isReadonlyAllowed: true,
20529
- };
20530
- const freezeCurrentCol = {
20531
- name: _t("Up to current column"),
20532
- execute: (env) => {
20533
- const { right } = env.model.getters.getSelectedZone();
20534
- interactiveFreezeColumnsRows(env, "COL", right + 1);
20535
- },
20536
- isReadonlyAllowed: true,
20537
- };
20538
- const viewGridlines = {
20539
- name: (env) => env.model.getters.getGridLinesVisibility(env.model.getters.getActiveSheetId())
20540
- ? _t("Hide gridlines")
20541
- : _t("Show gridlines"),
20542
- execute: (env) => {
20543
- const sheetId = env.model.getters.getActiveSheetId();
20544
- env.model.dispatch("SET_GRID_LINES_VISIBILITY", {
20545
- sheetId,
20546
- areGridLinesVisible: !env.model.getters.getGridLinesVisibility(sheetId),
20547
- });
20548
- },
20549
- icon: "o-spreadsheet-Icon.SHOW_HIDE_GRID",
20550
- };
20551
- const viewFormulas = {
20552
- name: (env) => env.model.getters.shouldShowFormulas() ? "Hide formulas" : _t("Show formulas"),
20553
- execute: (env) => env.model.dispatch("SET_FORMULA_VISIBILITY", { show: !env.model.getters.shouldShowFormulas() }),
20554
- isReadonlyAllowed: true,
20555
- icon: "o-spreadsheet-Icon.SHOW_HIDE_FORMULA",
20556
- };
20557
- const createRemoveFilter = {
20558
- name: (env) => selectionContainsFilter(env) ? _t("Remove selected filters") : _t("Create filter"),
20559
- isActive: (env) => selectionContainsFilter(env),
20560
- isEnabled: (env) => !cannotCreateFilter(env),
20561
- execute: (env) => createRemoveFilterAction(env),
20562
- icon: "o-spreadsheet-Icon.FILTER_ICON_INACTIVE",
20563
- };
20564
- const groupColumns = {
20565
- name: (env) => {
20566
- const selection = env.model.getters.getSelectedZone();
20567
- if (selection.left === selection.right) {
20568
- return _t("Group column %s", numberToLetters(selection.left));
20569
- }
20570
- return _t("Group columns %s - %s", numberToLetters(selection.left), numberToLetters(selection.right));
20571
- },
20572
- execute: (env) => groupHeadersAction(env, "COL"),
20573
- isVisible: (env) => {
20574
- const sheetId = env.model.getters.getActiveSheetId();
20575
- const selection = env.model.getters.getSelectedZone();
20576
- const groups = env.model.getters.getHeaderGroupsInZone(sheetId, "COL", selection);
20577
- return (IS_ONLY_ONE_RANGE(env) &&
20578
- !groups.some((group) => group.start === selection.left && group.end === selection.right));
20579
- },
20580
- icon: "o-spreadsheet-Icon.GROUP_COLUMNS",
20581
- };
20582
- const groupRows = {
20583
- name: (env) => {
20584
- const selection = env.model.getters.getSelectedZone();
20585
- if (selection.top === selection.bottom) {
20586
- return _t("Group row %s", String(selection.top + 1));
20587
- }
20588
- return _t("Group rows %s - %s", String(selection.top + 1), String(selection.bottom + 1));
20589
- },
20590
- execute: (env) => groupHeadersAction(env, "ROW"),
20591
- isVisible: (env) => {
20592
- const sheetId = env.model.getters.getActiveSheetId();
20593
- const selection = env.model.getters.getSelectedZone();
20594
- const groups = env.model.getters.getHeaderGroupsInZone(sheetId, "ROW", selection);
20595
- return (IS_ONLY_ONE_RANGE(env) &&
20596
- !groups.some((group) => group.start === selection.top && group.end === selection.bottom));
20597
- },
20598
- icon: "o-spreadsheet-Icon.GROUP_ROWS",
20599
- };
20600
- const ungroupColumns = {
20601
- name: (env) => {
20602
- const selection = env.model.getters.getSelectedZone();
20603
- if (selection.left === selection.right) {
20604
- return _t("Ungroup column %s", numberToLetters(selection.left));
20605
- }
20606
- return _t("Ungroup columns %s - %s", numberToLetters(selection.left), numberToLetters(selection.right));
20607
- },
20608
- execute: (env) => ungroupHeaders(env, "COL"),
20609
- icon: "o-spreadsheet-Icon.UNGROUP_COLUMNS",
20610
- };
20611
- const ungroupRows = {
20612
- name: (env) => {
20613
- const selection = env.model.getters.getSelectedZone();
20614
- if (selection.top === selection.bottom) {
20615
- return _t("Ungroup row %s", String(selection.top + 1));
20616
- }
20617
- return _t("Ungroup rows %s - %s", String(selection.top + 1), String(selection.bottom + 1));
20618
- },
20619
- execute: (env) => ungroupHeaders(env, "ROW"),
20620
- icon: "o-spreadsheet-Icon.UNGROUP_ROWS",
20621
- };
20622
- function selectionContainsFilter(env) {
20623
- const sheetId = env.model.getters.getActiveSheetId();
20624
- const selectedZones = env.model.getters.getSelectedZones();
20625
- return env.model.getters.doesZonesContainFilter(sheetId, selectedZones);
20626
- }
20627
- function cannotCreateFilter(env) {
20628
- return !areZonesContinuous(...env.model.getters.getSelectedZones());
20629
- }
20630
- function createRemoveFilterAction(env) {
20631
- if (selectionContainsFilter(env)) {
20632
- env.model.dispatch("REMOVE_FILTER_TABLE", {
20633
- sheetId: env.model.getters.getActiveSheetId(),
20634
- target: env.model.getters.getSelectedZones(),
20635
- });
20636
- return;
20637
- }
20638
- if (cannotCreateFilter(env)) {
20639
- return;
20640
- }
20641
- env.model.selection.selectTableAroundSelection();
20642
- const sheetId = env.model.getters.getActiveSheetId();
20643
- const selection = env.model.getters.getSelectedZones();
20644
- interactiveAddFilter(env, sheetId, selection);
20645
- }
20646
- function groupHeadersAction(env, dim) {
20647
- const selection = env.model.getters.getSelectedZone();
20648
- const sheetId = env.model.getters.getActiveSheetId();
20649
- env.model.dispatch("GROUP_HEADERS", {
20650
- sheetId,
20651
- dimension: dim,
20652
- start: dim === "COL" ? selection.left : selection.top,
20653
- end: dim === "COL" ? selection.right : selection.bottom,
20654
- });
20655
- }
20656
- function ungroupHeaders(env, dim) {
20657
- const selection = env.model.getters.getSelectedZone();
20658
- const sheetId = env.model.getters.getActiveSheetId();
20659
- env.model.dispatch("UNGROUP_HEADERS", {
20660
- sheetId,
20661
- dimension: dim,
20662
- start: dim === "COL" ? selection.left : selection.top,
20663
- end: dim === "COL" ? selection.right : selection.bottom,
20664
- });
20665
- }
20666
- function canUngroupHeaders(env, dimension) {
20667
- const sheetId = env.model.getters.getActiveSheetId();
20668
- const selection = env.model.getters.getSelectedZones();
20669
- return (selection.length === 1 &&
20670
- env.model.getters.getHeaderGroupsInZone(sheetId, dimension, selection[0]).length > 0);
20671
- }
20672
-
20673
- var ACTION_VIEW = /*#__PURE__*/Object.freeze({
20674
- __proto__: null,
20675
- canUngroupHeaders: canUngroupHeaders,
20676
- createRemoveFilter: createRemoveFilter,
20677
- freezeCurrentCol: freezeCurrentCol,
20678
- freezeCurrentRow: freezeCurrentRow,
20679
- freezeFirstCol: freezeFirstCol,
20680
- freezeFirstRow: freezeFirstRow,
20681
- freezePane: freezePane,
20682
- freezeSecondCol: freezeSecondCol,
20683
- freezeSecondRow: freezeSecondRow,
20684
- groupColumns: groupColumns,
20685
- groupRows: groupRows,
20686
- hideCols: hideCols,
20687
- hideRows: hideRows,
20688
- unFreezeCols: unFreezeCols,
20689
- unFreezePane: unFreezePane,
20690
- unFreezeRows: unFreezeRows,
20691
- ungroupColumns: ungroupColumns,
20692
- ungroupRows: ungroupRows,
20693
- unhideAllCols: unhideAllCols,
20694
- unhideAllRows: unhideAllRows,
20695
- unhideCols: unhideCols,
20696
- unhideRows: unhideRows,
20697
- viewFormulas: viewFormulas,
20698
- viewGridlines: viewGridlines
20699
- });
20700
-
20701
20686
  const colMenuRegistry = new MenuItemRegistry();
20702
20687
  colMenuRegistry
20703
20688
  .add("cut", {
@@ -21340,13 +21325,8 @@ topbarMenuRegistry
21340
21325
  sequence: 30,
21341
21326
  separator: true,
21342
21327
  })
21343
- .addChild("add_data_filter", ["data"], {
21344
- ...addDataFilter,
21345
- sequence: 40,
21346
- separator: true,
21347
- })
21348
- .addChild("remove_data_filter", ["data"], {
21349
- ...removeDataFilter,
21328
+ .addChild("add_remove_data_filter", ["data"], {
21329
+ ...addRemoveDataFilter,
21350
21330
  sequence: 40,
21351
21331
  separator: true,
21352
21332
  });
@@ -27849,6 +27829,10 @@ css /*SCSS*/ `
27849
27829
  height: 0px;
27850
27830
  }
27851
27831
  }
27832
+ .o-figure-container {
27833
+ -webkit-user-select: none; // safari
27834
+ user-select: none;
27835
+ }
27852
27836
  `;
27853
27837
  /**
27854
27838
  * Each figure ⭐ is positioned inside a container `div` placed and sized
@@ -48925,7 +48909,7 @@ class FilterEvaluationPlugin extends UIPlugin {
48925
48909
  "isFilterActive",
48926
48910
  ];
48927
48911
  filterValues = {};
48928
- hiddenRows = new Set();
48912
+ hiddenRows = {};
48929
48913
  isEvaluationDirty = false;
48930
48914
  allowDispatch(cmd) {
48931
48915
  switch (cmd.type) {
@@ -48968,11 +48952,11 @@ class FilterEvaluationPlugin extends UIPlugin {
48968
48952
  case "UNFOLD_HEADER_GROUP":
48969
48953
  case "FOLD_ALL_HEADER_GROUPS":
48970
48954
  case "UNFOLD_ALL_HEADER_GROUPS":
48971
- this.updateHiddenRows();
48955
+ this.updateHiddenRows(cmd.sheetId);
48972
48956
  break;
48973
48957
  case "UPDATE_FILTER":
48974
48958
  this.updateFilter(cmd);
48975
- this.updateHiddenRows();
48959
+ this.updateHiddenRows(cmd.sheetId);
48976
48960
  break;
48977
48961
  case "DUPLICATE_SHEET":
48978
48962
  const filterValues = {};
@@ -48992,15 +48976,14 @@ class FilterEvaluationPlugin extends UIPlugin {
48992
48976
  }
48993
48977
  finalize() {
48994
48978
  if (this.isEvaluationDirty) {
48995
- this.updateHiddenRows();
48979
+ for (const sheetId of this.getters.getSheetIds()) {
48980
+ this.updateHiddenRows(sheetId);
48981
+ }
48996
48982
  this.isEvaluationDirty = false;
48997
48983
  }
48998
48984
  }
48999
48985
  isRowFiltered(sheetId, row) {
49000
- if (sheetId !== this.getters.getActiveSheetId()) {
49001
- return false;
49002
- }
49003
- return this.hiddenRows.has(row);
48986
+ return !!this.hiddenRows[sheetId]?.has(row);
49004
48987
  }
49005
48988
  getCellBorderWithFilterBorder(position) {
49006
48989
  const { sheetId, col, row } = position;
@@ -49051,8 +49034,7 @@ class FilterEvaluationPlugin extends UIPlugin {
49051
49034
  this.filterValues[sheetId] = {};
49052
49035
  this.filterValues[sheetId][id] = hiddenValues;
49053
49036
  }
49054
- updateHiddenRows() {
49055
- const sheetId = this.getters.getActiveSheetId();
49037
+ updateHiddenRows(sheetId) {
49056
49038
  const filters = this.getters
49057
49039
  .getFilters(sheetId)
49058
49040
  .sort((filter1, filter2) => filter1.zoneWithHeaders.top - filter2.zoneWithHeaders.top);
@@ -49073,7 +49055,7 @@ class FilterEvaluationPlugin extends UIPlugin {
49073
49055
  }
49074
49056
  }
49075
49057
  }
49076
- this.hiddenRows = hiddenRows;
49058
+ this.hiddenRows[sheetId] = hiddenRows;
49077
49059
  }
49078
49060
  getCellValueAsString(sheetId, col, row) {
49079
49061
  const value = this.getters.getEvaluatedCell({ sheetId, col, row }).formattedValue;
@@ -50214,13 +50196,14 @@ class SheetViewPlugin extends UIPlugin {
50214
50196
  }
50215
50197
  }
50216
50198
  handleEvent(event) {
50199
+ const sheetId = this.getters.getActiveSheetId();
50217
50200
  if (event.options.scrollIntoView) {
50218
50201
  let { col, row } = findCellInNewZone(event.previousAnchor.zone, event.anchor.zone);
50219
50202
  if (event.mode === "updateAnchor") {
50220
50203
  const oldZone = event.previousAnchor.zone;
50221
50204
  const newZone = event.anchor.zone;
50222
50205
  // altering a zone should not move the viewport in a dimension that wasn't changed
50223
- const { top, bottom, left, right } = this.getters.getActiveMainViewport();
50206
+ const { top, bottom, left, right } = this.getMainInternalViewport(sheetId);
50224
50207
  if (oldZone.left === newZone.left && oldZone.right === newZone.right) {
50225
50208
  col = left > col || col > right ? left : col;
50226
50209
  }
@@ -50228,7 +50211,6 @@ class SheetViewPlugin extends UIPlugin {
50228
50211
  row = top > row || row > bottom ? top : row;
50229
50212
  }
50230
50213
  }
50231
- const sheetId = this.getters.getActiveSheetId();
50232
50214
  col = Math.min(col, this.getters.getNumberCols(sheetId) - 1);
50233
50215
  row = Math.min(row, this.getters.getNumberRows(sheetId) - 1);
50234
50216
  if (!this.sheetsWithDirtyViewports.has(sheetId)) {
@@ -50265,16 +50247,16 @@ class SheetViewPlugin extends UIPlugin {
50265
50247
  this.setSheetViewOffset(cmd.offsetX, cmd.offsetY);
50266
50248
  break;
50267
50249
  case "SHIFT_VIEWPORT_DOWN":
50268
- const { top } = this.getActiveMainViewport();
50269
50250
  const sheetId = this.getters.getActiveSheetId();
50270
- const shiftedOffsetY = this.clipOffsetY(this.getters.getRowDimensions(sheetId, top).start + this.sheetViewHeight);
50271
- this.shiftVertically(shiftedOffsetY);
50251
+ const { top, viewportHeight, offsetCorrectionY } = this.getMainInternalViewport(sheetId);
50252
+ const topRowDims = this.getters.getRowDimensions(sheetId, top);
50253
+ this.shiftVertically(topRowDims.start + viewportHeight - offsetCorrectionY);
50272
50254
  break;
50273
50255
  case "SHIFT_VIEWPORT_UP": {
50274
- const { top } = this.getActiveMainViewport();
50275
50256
  const sheetId = this.getters.getActiveSheetId();
50276
- const shiftedOffsetY = this.clipOffsetY(this.getters.getRowDimensions(sheetId, top).end - this.sheetViewHeight);
50277
- this.shiftVertically(shiftedOffsetY);
50257
+ const { top, viewportHeight, offsetCorrectionY } = this.getMainInternalViewport(sheetId);
50258
+ const topRowDims = this.getters.getRowDimensions(sheetId, top);
50259
+ this.shiftVertically(topRowDims.end - offsetCorrectionY - viewportHeight);
50278
50260
  break;
50279
50261
  }
50280
50262
  case "REMOVE_FILTER_TABLE":
@@ -50667,17 +50649,6 @@ class SheetViewPlugin extends UIPlugin {
50667
50649
  const { maxOffsetX, maxOffsetY } = this.getMaximumSheetOffset();
50668
50650
  Object.values(this.getSubViewports(sheetId)).forEach((viewport) => viewport.setViewportOffset(clip(offsetX, 0, maxOffsetX), clip(offsetY, 0, maxOffsetY)));
50669
50651
  }
50670
- /**
50671
- * Clip the vertical offset within the allowed range.
50672
- * Not above the sheet, nor below the sheet.
50673
- */
50674
- clipOffsetY(offsetY) {
50675
- const { height } = this.getMainViewportRect();
50676
- const maxOffset = height - this.sheetViewHeight;
50677
- offsetY = Math.min(offsetY, maxOffset);
50678
- offsetY = Math.max(offsetY, 0);
50679
- return offsetY;
50680
- }
50681
50652
  getViewportOffset(sheetId) {
50682
50653
  return {
50683
50654
  x: this.viewports[sheetId]?.bottomRight.offsetScrollbarX || 0,
@@ -50733,12 +50704,15 @@ class SheetViewPlugin extends UIPlugin {
50733
50704
  * viewport top.
50734
50705
  */
50735
50706
  shiftVertically(offset) {
50736
- const { top } = this.getActiveMainViewport();
50707
+ const sheetId = this.getters.getActiveSheetId();
50708
+ const { top } = this.getMainInternalViewport(sheetId);
50737
50709
  const { scrollX } = this.getActiveSheetScrollInfo();
50738
50710
  this.setSheetViewOffset(scrollX, offset);
50739
50711
  const { anchor } = this.getters.getSelection();
50740
- const deltaRow = this.getActiveMainViewport().top - top;
50741
- this.selection.selectCell(anchor.cell.col, anchor.cell.row + deltaRow);
50712
+ if (anchor.cell.row >= this.getters.getPaneDivisions(sheetId).ySplit) {
50713
+ const deltaRow = this.getMainInternalViewport(sheetId).top - top;
50714
+ this.selection.selectCell(anchor.cell.col, anchor.cell.row + deltaRow);
50715
+ }
50742
50716
  }
50743
50717
  getVisibleFigures() {
50744
50718
  const sheetId = this.getters.getActiveSheetId();
@@ -51669,7 +51643,6 @@ css /* scss */ `
51669
51643
  cursor: pointer;
51670
51644
  }
51671
51645
  `;
51672
- let tKey = 1;
51673
51646
  class SpreadsheetDashboard extends Component {
51674
51647
  static template = "o-spreadsheet-SpreadsheetDashboard";
51675
51648
  static components = {
@@ -51747,13 +51720,9 @@ class SpreadsheetDashboard extends Component {
51747
51720
  coordinates: rect,
51748
51721
  position: { col, row },
51749
51722
  action,
51750
- // we can't rely on position only because a row or a column could
51751
- // be inserted at any time.
51752
- tKey: `${tKey}-${col}-${row}`,
51753
51723
  });
51754
51724
  }
51755
51725
  }
51756
- tKey++;
51757
51726
  return cells;
51758
51727
  }
51759
51728
  getClickableAction(position) {
@@ -57024,6 +56993,6 @@ const constants = {
57024
56993
  export { AbstractChart, CommandResult, CorePlugin, DispatchResult, EvaluationError, Model, Registry, Revision, SPREADSHEET_DIMENSIONS, Spreadsheet, UIPlugin, __info__, addFunction, astToFormula, compile, compileTokens, components, constants, convertAstNodes, coreTypes, findCellInNewZone, functionCache, helpers, hooks, invalidateCFEvaluationCommands, invalidateDependenciesCommands, invalidateEvaluationCommands, iterateAstNodes, links, load, parse, parseTokens, readonlyAllowedCommands, registries, setDefaultSheetViewSize, setTranslationMethod, tokenize };
57025
56994
 
57026
56995
 
57027
- __info__.version = "17.0.18";
57028
- __info__.date = "2024-04-10T13:28:23.664Z";
57029
- __info__.hash = "6294758";
56996
+ __info__.version = "17.0.19";
56997
+ __info__.date = "2024-04-18T16:41:42.291Z";
56998
+ __info__.hash = "9f3317a";