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