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