@odoo/o-spreadsheet 17.0.17 → 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.
- package/dist/o-spreadsheet.cjs.js +424 -446
- package/dist/o-spreadsheet.d.ts +7 -7
- package/dist/o-spreadsheet.esm.js +424 -446
- package/dist/o-spreadsheet.iife.js +424 -446
- package/dist/o-spreadsheet.iife.min.js +272 -268
- package/dist/o_spreadsheet.xml +6 -5
- package/package.json +1 -1
|
@@ -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.
|
|
6
|
-
* @date 2024-04-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 17.0.19
|
|
6
|
+
* @date 2024-04-18T16:41:42.291Z
|
|
7
|
+
* @hash 9f3317a
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
'use strict';
|
|
@@ -650,7 +650,7 @@ function deepEquals(o1, o2) {
|
|
|
650
650
|
if (typeof o1 !== typeof o2)
|
|
651
651
|
return false;
|
|
652
652
|
if (typeof o1 !== "object")
|
|
653
|
-
return
|
|
653
|
+
return false;
|
|
654
654
|
// Objects can have different keys if the values are undefined
|
|
655
655
|
for (const key in o2) {
|
|
656
656
|
if (!(key in o1) && o2[key] !== undefined) {
|
|
@@ -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
|
|
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("
|
|
21346
|
-
...
|
|
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
|
});
|
|
@@ -26964,6 +26944,11 @@ class Composer extends owl.Component {
|
|
|
26964
26944
|
}
|
|
26965
26945
|
}
|
|
26966
26946
|
}
|
|
26947
|
+
onContextMenu(ev) {
|
|
26948
|
+
if (this.env.model.getters.getEditionMode() === "inactive") {
|
|
26949
|
+
this.props.onInputContextMenu?.(ev);
|
|
26950
|
+
}
|
|
26951
|
+
}
|
|
26967
26952
|
// ---------------------------------------------------------------------------
|
|
26968
26953
|
// Private
|
|
26969
26954
|
// ---------------------------------------------------------------------------
|
|
@@ -27201,6 +27186,7 @@ Composer.props = {
|
|
|
27201
27186
|
onComposerCellFocused: { type: Function, optional: true },
|
|
27202
27187
|
onComposerContentFocused: Function,
|
|
27203
27188
|
isDefaultFocus: { type: Boolean, optional: true },
|
|
27189
|
+
onInputContextMenu: { type: Function, optional: true },
|
|
27204
27190
|
};
|
|
27205
27191
|
|
|
27206
27192
|
const COMPOSER_BORDER_WIDTH = 3 * 0.4 * window.devicePixelRatio || 1;
|
|
@@ -27276,6 +27262,7 @@ class GridComposer extends owl.Component {
|
|
|
27276
27262
|
isDefaultFocus: true,
|
|
27277
27263
|
onComposerContentFocused: this.props.onComposerContentFocused,
|
|
27278
27264
|
onComposerCellFocused: this.props.onComposerCellFocused,
|
|
27265
|
+
onInputContextMenu: this.props.onInputContextMenu,
|
|
27279
27266
|
};
|
|
27280
27267
|
}
|
|
27281
27268
|
get containerStyle() {
|
|
@@ -27364,6 +27351,7 @@ GridComposer.props = {
|
|
|
27364
27351
|
onComposerContentFocused: Function,
|
|
27365
27352
|
gridDims: Object,
|
|
27366
27353
|
onComposerCellFocused: Function,
|
|
27354
|
+
onInputContextMenu: Function,
|
|
27367
27355
|
};
|
|
27368
27356
|
|
|
27369
27357
|
const CSS$1 = css /* scss */ `
|
|
@@ -27843,6 +27831,10 @@ css /*SCSS*/ `
|
|
|
27843
27831
|
height: 0px;
|
|
27844
27832
|
}
|
|
27845
27833
|
}
|
|
27834
|
+
.o-figure-container {
|
|
27835
|
+
-webkit-user-select: none; // safari
|
|
27836
|
+
user-select: none;
|
|
27837
|
+
}
|
|
27846
27838
|
`;
|
|
27847
27839
|
/**
|
|
27848
27840
|
* Each figure ⭐ is positioned inside a container `div` placed and sized
|
|
@@ -31317,29 +31309,12 @@ function convertWidthFromExcel(width) {
|
|
|
31317
31309
|
return width;
|
|
31318
31310
|
return Math.round((width / WIDTH_FACTOR) * 100) / 100;
|
|
31319
31311
|
}
|
|
31320
|
-
function convertBorderDescr(descr) {
|
|
31321
|
-
if (!descr) {
|
|
31322
|
-
return undefined;
|
|
31323
|
-
}
|
|
31324
|
-
return {
|
|
31325
|
-
style: descr.style,
|
|
31326
|
-
color: { rgb: descr.color },
|
|
31327
|
-
};
|
|
31328
|
-
}
|
|
31329
31312
|
function extractStyle(cell, data) {
|
|
31330
31313
|
let style = {};
|
|
31331
31314
|
if (cell.style) {
|
|
31332
31315
|
style = data.styles[cell.style];
|
|
31333
31316
|
}
|
|
31334
31317
|
const format = extractFormat(cell, data);
|
|
31335
|
-
const exportedBorder = {};
|
|
31336
|
-
if (cell.border) {
|
|
31337
|
-
const border = data.borders[cell.border];
|
|
31338
|
-
exportedBorder.left = convertBorderDescr(border.left);
|
|
31339
|
-
exportedBorder.right = convertBorderDescr(border.right);
|
|
31340
|
-
exportedBorder.bottom = convertBorderDescr(border.bottom);
|
|
31341
|
-
exportedBorder.top = convertBorderDescr(border.top);
|
|
31342
|
-
}
|
|
31343
31318
|
const styles = {
|
|
31344
31319
|
font: {
|
|
31345
31320
|
size: style?.fontSize || DEFAULT_FONT_SIZE,
|
|
@@ -31353,7 +31328,7 @@ function extractStyle(cell, data) {
|
|
|
31353
31328
|
}
|
|
31354
31329
|
: { reservedAttribute: "none" },
|
|
31355
31330
|
numFmt: format ? { format: format, id: 0 /* id not used for export */ } : undefined,
|
|
31356
|
-
border:
|
|
31331
|
+
border: cell.border || 0,
|
|
31357
31332
|
alignment: {
|
|
31358
31333
|
horizontal: style.align,
|
|
31359
31334
|
vertical: style.verticalAlign
|
|
@@ -31375,15 +31350,12 @@ function extractFormat(cell, data) {
|
|
|
31375
31350
|
return undefined;
|
|
31376
31351
|
}
|
|
31377
31352
|
function normalizeStyle(construct, styles) {
|
|
31378
|
-
const { id: fontId } = pushElement(styles["font"], construct.fonts);
|
|
31379
|
-
const { id: fillId } = pushElement(styles["fill"], construct.fills);
|
|
31380
|
-
const { id: borderId } = pushElement(styles["border"], construct.borders);
|
|
31381
31353
|
// Normalize this
|
|
31382
31354
|
const numFmtId = convertFormat(styles["numFmt"], construct.numFmts);
|
|
31383
31355
|
const style = {
|
|
31384
|
-
fontId,
|
|
31385
|
-
fillId,
|
|
31386
|
-
borderId,
|
|
31356
|
+
fontId: pushElement(styles.font, construct.fonts),
|
|
31357
|
+
fillId: pushElement(styles.fill, construct.fills),
|
|
31358
|
+
borderId: styles.border,
|
|
31387
31359
|
numFmtId,
|
|
31388
31360
|
alignment: {
|
|
31389
31361
|
vertical: styles.alignment.vertical,
|
|
@@ -31391,8 +31363,7 @@ function normalizeStyle(construct, styles) {
|
|
|
31391
31363
|
wrapText: styles.alignment.wrapText,
|
|
31392
31364
|
},
|
|
31393
31365
|
};
|
|
31394
|
-
|
|
31395
|
-
return id;
|
|
31366
|
+
return pushElement(style, construct.styles);
|
|
31396
31367
|
}
|
|
31397
31368
|
function convertFormat(format, numFmtStructure) {
|
|
31398
31369
|
if (!format) {
|
|
@@ -31400,8 +31371,7 @@ function convertFormat(format, numFmtStructure) {
|
|
|
31400
31371
|
}
|
|
31401
31372
|
let formatId = XLSX_FORMAT_MAP[format.format];
|
|
31402
31373
|
if (!formatId) {
|
|
31403
|
-
|
|
31404
|
-
formatId = id + FIRST_NUMFMT_ID;
|
|
31374
|
+
formatId = pushElement(format, numFmtStructure) + FIRST_NUMFMT_ID;
|
|
31405
31375
|
}
|
|
31406
31376
|
return formatId;
|
|
31407
31377
|
}
|
|
@@ -31426,20 +31396,15 @@ function addRelsToFile(relsFiles, path, rel) {
|
|
|
31426
31396
|
return id;
|
|
31427
31397
|
}
|
|
31428
31398
|
function pushElement(property, propertyList) {
|
|
31429
|
-
|
|
31430
|
-
|
|
31431
|
-
|
|
31399
|
+
let len = propertyList.length;
|
|
31400
|
+
const operator = typeof property === "object" ? deepEquals : (a, b) => a === b;
|
|
31401
|
+
for (let i = 0; i < len; i++) {
|
|
31402
|
+
if (operator(property, propertyList[i])) {
|
|
31403
|
+
return i;
|
|
31432
31404
|
}
|
|
31433
31405
|
}
|
|
31434
|
-
|
|
31435
|
-
|
|
31436
|
-
propertyList.push(property);
|
|
31437
|
-
elemId = propertyList.length - 1;
|
|
31438
|
-
}
|
|
31439
|
-
return {
|
|
31440
|
-
id: elemId,
|
|
31441
|
-
list: propertyList,
|
|
31442
|
-
};
|
|
31406
|
+
propertyList[propertyList.length] = property;
|
|
31407
|
+
return propertyList.length - 1;
|
|
31443
31408
|
}
|
|
31444
31409
|
const chartIds = [];
|
|
31445
31410
|
/**
|
|
@@ -32160,7 +32125,25 @@ function parseXML(xmlString, mimeType = "text/xml") {
|
|
|
32160
32125
|
}
|
|
32161
32126
|
return document;
|
|
32162
32127
|
}
|
|
32163
|
-
function
|
|
32128
|
+
function convertBorderDescr(descr) {
|
|
32129
|
+
if (!descr) {
|
|
32130
|
+
return undefined;
|
|
32131
|
+
}
|
|
32132
|
+
return {
|
|
32133
|
+
style: descr.style,
|
|
32134
|
+
color: { rgb: descr.color },
|
|
32135
|
+
};
|
|
32136
|
+
}
|
|
32137
|
+
function getDefaultXLSXStructure(data) {
|
|
32138
|
+
const xlsxBorders = Object.values(data.borders).map((border) => {
|
|
32139
|
+
return {
|
|
32140
|
+
left: convertBorderDescr(border.left),
|
|
32141
|
+
right: convertBorderDescr(border.right),
|
|
32142
|
+
bottom: convertBorderDescr(border.bottom),
|
|
32143
|
+
top: convertBorderDescr(border.top),
|
|
32144
|
+
};
|
|
32145
|
+
});
|
|
32146
|
+
const borders = [{}, ...xlsxBorders];
|
|
32164
32147
|
return {
|
|
32165
32148
|
relsFiles: [],
|
|
32166
32149
|
sharedStrings: [],
|
|
@@ -32183,7 +32166,7 @@ function getDefaultXLSXStructure() {
|
|
|
32183
32166
|
},
|
|
32184
32167
|
],
|
|
32185
32168
|
fills: [{ reservedAttribute: "none" }, { reservedAttribute: "gray125" }],
|
|
32186
|
-
borders
|
|
32169
|
+
borders,
|
|
32187
32170
|
numFmts: [],
|
|
32188
32171
|
dxfs: [],
|
|
32189
32172
|
};
|
|
@@ -37369,7 +37352,17 @@ class FiltersPlugin extends CorePlugin {
|
|
|
37369
37352
|
}
|
|
37370
37353
|
}
|
|
37371
37354
|
exportForExcel(data) {
|
|
37372
|
-
|
|
37355
|
+
for (const sheet of data.sheets) {
|
|
37356
|
+
for (const filterTable of this.getFilterTables(sheet.id)) {
|
|
37357
|
+
if (zoneToDimension(filterTable.zone).numberOfRows === 1) {
|
|
37358
|
+
continue;
|
|
37359
|
+
}
|
|
37360
|
+
sheet.filterTables.push({
|
|
37361
|
+
range: zoneToXc(filterTable.zone),
|
|
37362
|
+
filters: [],
|
|
37363
|
+
});
|
|
37364
|
+
}
|
|
37365
|
+
}
|
|
37373
37366
|
}
|
|
37374
37367
|
}
|
|
37375
37368
|
|
|
@@ -41098,7 +41091,9 @@ class Evaluator {
|
|
|
41098
41091
|
this.blockedArrayFormulas = new Set();
|
|
41099
41092
|
this.spreadingRelations = new SpreadingRelation();
|
|
41100
41093
|
this.formulaDependencies = lazy(() => {
|
|
41101
|
-
const dependencies = [...this.getAllCells()].flatMap((positionId) => this.getDirectDependencies(positionId)
|
|
41094
|
+
const dependencies = [...this.getAllCells()].flatMap((positionId) => this.getDirectDependencies(positionId)
|
|
41095
|
+
.filter((range) => !range.invalidSheetName && !range.invalidXc)
|
|
41096
|
+
.map((range) => ({
|
|
41102
41097
|
data: positionId,
|
|
41103
41098
|
boundingBox: {
|
|
41104
41099
|
zone: range.zone,
|
|
@@ -48916,7 +48911,7 @@ class FilterEvaluationPlugin extends UIPlugin {
|
|
|
48916
48911
|
"isFilterActive",
|
|
48917
48912
|
];
|
|
48918
48913
|
filterValues = {};
|
|
48919
|
-
hiddenRows =
|
|
48914
|
+
hiddenRows = {};
|
|
48920
48915
|
isEvaluationDirty = false;
|
|
48921
48916
|
allowDispatch(cmd) {
|
|
48922
48917
|
switch (cmd.type) {
|
|
@@ -48959,11 +48954,11 @@ class FilterEvaluationPlugin extends UIPlugin {
|
|
|
48959
48954
|
case "UNFOLD_HEADER_GROUP":
|
|
48960
48955
|
case "FOLD_ALL_HEADER_GROUPS":
|
|
48961
48956
|
case "UNFOLD_ALL_HEADER_GROUPS":
|
|
48962
|
-
this.updateHiddenRows();
|
|
48957
|
+
this.updateHiddenRows(cmd.sheetId);
|
|
48963
48958
|
break;
|
|
48964
48959
|
case "UPDATE_FILTER":
|
|
48965
48960
|
this.updateFilter(cmd);
|
|
48966
|
-
this.updateHiddenRows();
|
|
48961
|
+
this.updateHiddenRows(cmd.sheetId);
|
|
48967
48962
|
break;
|
|
48968
48963
|
case "DUPLICATE_SHEET":
|
|
48969
48964
|
const filterValues = {};
|
|
@@ -48983,15 +48978,14 @@ class FilterEvaluationPlugin extends UIPlugin {
|
|
|
48983
48978
|
}
|
|
48984
48979
|
finalize() {
|
|
48985
48980
|
if (this.isEvaluationDirty) {
|
|
48986
|
-
this.
|
|
48981
|
+
for (const sheetId of this.getters.getSheetIds()) {
|
|
48982
|
+
this.updateHiddenRows(sheetId);
|
|
48983
|
+
}
|
|
48987
48984
|
this.isEvaluationDirty = false;
|
|
48988
48985
|
}
|
|
48989
48986
|
}
|
|
48990
48987
|
isRowFiltered(sheetId, row) {
|
|
48991
|
-
|
|
48992
|
-
return false;
|
|
48993
|
-
}
|
|
48994
|
-
return this.hiddenRows.has(row);
|
|
48988
|
+
return !!this.hiddenRows[sheetId]?.has(row);
|
|
48995
48989
|
}
|
|
48996
48990
|
getCellBorderWithFilterBorder(position) {
|
|
48997
48991
|
const { sheetId, col, row } = position;
|
|
@@ -49042,8 +49036,7 @@ class FilterEvaluationPlugin extends UIPlugin {
|
|
|
49042
49036
|
this.filterValues[sheetId] = {};
|
|
49043
49037
|
this.filterValues[sheetId][id] = hiddenValues;
|
|
49044
49038
|
}
|
|
49045
|
-
updateHiddenRows() {
|
|
49046
|
-
const sheetId = this.getters.getActiveSheetId();
|
|
49039
|
+
updateHiddenRows(sheetId) {
|
|
49047
49040
|
const filters = this.getters
|
|
49048
49041
|
.getFilters(sheetId)
|
|
49049
49042
|
.sort((filter1, filter2) => filter1.zoneWithHeaders.top - filter2.zoneWithHeaders.top);
|
|
@@ -49064,7 +49057,7 @@ class FilterEvaluationPlugin extends UIPlugin {
|
|
|
49064
49057
|
}
|
|
49065
49058
|
}
|
|
49066
49059
|
}
|
|
49067
|
-
this.hiddenRows = hiddenRows;
|
|
49060
|
+
this.hiddenRows[sheetId] = hiddenRows;
|
|
49068
49061
|
}
|
|
49069
49062
|
getCellValueAsString(sheetId, col, row) {
|
|
49070
49063
|
const value = this.getters.getEvaluatedCell({ sheetId, col, row }).formattedValue;
|
|
@@ -50205,13 +50198,14 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
50205
50198
|
}
|
|
50206
50199
|
}
|
|
50207
50200
|
handleEvent(event) {
|
|
50201
|
+
const sheetId = this.getters.getActiveSheetId();
|
|
50208
50202
|
if (event.options.scrollIntoView) {
|
|
50209
50203
|
let { col, row } = findCellInNewZone(event.previousAnchor.zone, event.anchor.zone);
|
|
50210
50204
|
if (event.mode === "updateAnchor") {
|
|
50211
50205
|
const oldZone = event.previousAnchor.zone;
|
|
50212
50206
|
const newZone = event.anchor.zone;
|
|
50213
50207
|
// altering a zone should not move the viewport in a dimension that wasn't changed
|
|
50214
|
-
const { top, bottom, left, right } = this.
|
|
50208
|
+
const { top, bottom, left, right } = this.getMainInternalViewport(sheetId);
|
|
50215
50209
|
if (oldZone.left === newZone.left && oldZone.right === newZone.right) {
|
|
50216
50210
|
col = left > col || col > right ? left : col;
|
|
50217
50211
|
}
|
|
@@ -50219,7 +50213,6 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
50219
50213
|
row = top > row || row > bottom ? top : row;
|
|
50220
50214
|
}
|
|
50221
50215
|
}
|
|
50222
|
-
const sheetId = this.getters.getActiveSheetId();
|
|
50223
50216
|
col = Math.min(col, this.getters.getNumberCols(sheetId) - 1);
|
|
50224
50217
|
row = Math.min(row, this.getters.getNumberRows(sheetId) - 1);
|
|
50225
50218
|
if (!this.sheetsWithDirtyViewports.has(sheetId)) {
|
|
@@ -50256,16 +50249,16 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
50256
50249
|
this.setSheetViewOffset(cmd.offsetX, cmd.offsetY);
|
|
50257
50250
|
break;
|
|
50258
50251
|
case "SHIFT_VIEWPORT_DOWN":
|
|
50259
|
-
const { top } = this.getActiveMainViewport();
|
|
50260
50252
|
const sheetId = this.getters.getActiveSheetId();
|
|
50261
|
-
const
|
|
50262
|
-
this.
|
|
50253
|
+
const { top, viewportHeight, offsetCorrectionY } = this.getMainInternalViewport(sheetId);
|
|
50254
|
+
const topRowDims = this.getters.getRowDimensions(sheetId, top);
|
|
50255
|
+
this.shiftVertically(topRowDims.start + viewportHeight - offsetCorrectionY);
|
|
50263
50256
|
break;
|
|
50264
50257
|
case "SHIFT_VIEWPORT_UP": {
|
|
50265
|
-
const { top } = this.getActiveMainViewport();
|
|
50266
50258
|
const sheetId = this.getters.getActiveSheetId();
|
|
50267
|
-
const
|
|
50268
|
-
this.
|
|
50259
|
+
const { top, viewportHeight, offsetCorrectionY } = this.getMainInternalViewport(sheetId);
|
|
50260
|
+
const topRowDims = this.getters.getRowDimensions(sheetId, top);
|
|
50261
|
+
this.shiftVertically(topRowDims.end - offsetCorrectionY - viewportHeight);
|
|
50269
50262
|
break;
|
|
50270
50263
|
}
|
|
50271
50264
|
case "REMOVE_FILTER_TABLE":
|
|
@@ -50658,17 +50651,6 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
50658
50651
|
const { maxOffsetX, maxOffsetY } = this.getMaximumSheetOffset();
|
|
50659
50652
|
Object.values(this.getSubViewports(sheetId)).forEach((viewport) => viewport.setViewportOffset(clip(offsetX, 0, maxOffsetX), clip(offsetY, 0, maxOffsetY)));
|
|
50660
50653
|
}
|
|
50661
|
-
/**
|
|
50662
|
-
* Clip the vertical offset within the allowed range.
|
|
50663
|
-
* Not above the sheet, nor below the sheet.
|
|
50664
|
-
*/
|
|
50665
|
-
clipOffsetY(offsetY) {
|
|
50666
|
-
const { height } = this.getMainViewportRect();
|
|
50667
|
-
const maxOffset = height - this.sheetViewHeight;
|
|
50668
|
-
offsetY = Math.min(offsetY, maxOffset);
|
|
50669
|
-
offsetY = Math.max(offsetY, 0);
|
|
50670
|
-
return offsetY;
|
|
50671
|
-
}
|
|
50672
50654
|
getViewportOffset(sheetId) {
|
|
50673
50655
|
return {
|
|
50674
50656
|
x: this.viewports[sheetId]?.bottomRight.offsetScrollbarX || 0,
|
|
@@ -50724,12 +50706,15 @@ class SheetViewPlugin extends UIPlugin {
|
|
|
50724
50706
|
* viewport top.
|
|
50725
50707
|
*/
|
|
50726
50708
|
shiftVertically(offset) {
|
|
50727
|
-
const
|
|
50709
|
+
const sheetId = this.getters.getActiveSheetId();
|
|
50710
|
+
const { top } = this.getMainInternalViewport(sheetId);
|
|
50728
50711
|
const { scrollX } = this.getActiveSheetScrollInfo();
|
|
50729
50712
|
this.setSheetViewOffset(scrollX, offset);
|
|
50730
50713
|
const { anchor } = this.getters.getSelection();
|
|
50731
|
-
|
|
50732
|
-
|
|
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
|
+
}
|
|
50733
50718
|
}
|
|
50734
50719
|
getVisibleFigures() {
|
|
50735
50720
|
const sheetId = this.getters.getActiveSheetId();
|
|
@@ -51660,7 +51645,6 @@ css /* scss */ `
|
|
|
51660
51645
|
cursor: pointer;
|
|
51661
51646
|
}
|
|
51662
51647
|
`;
|
|
51663
|
-
let tKey = 1;
|
|
51664
51648
|
class SpreadsheetDashboard extends owl.Component {
|
|
51665
51649
|
static template = "o-spreadsheet-SpreadsheetDashboard";
|
|
51666
51650
|
static components = {
|
|
@@ -51738,13 +51722,9 @@ class SpreadsheetDashboard extends owl.Component {
|
|
|
51738
51722
|
coordinates: rect,
|
|
51739
51723
|
position: { col, row },
|
|
51740
51724
|
action,
|
|
51741
|
-
// we can't rely on position only because a row or a column could
|
|
51742
|
-
// be inserted at any time.
|
|
51743
|
-
tKey: `${tKey}-${col}-${row}`,
|
|
51744
51725
|
});
|
|
51745
51726
|
}
|
|
51746
51727
|
}
|
|
51747
|
-
tKey++;
|
|
51748
51728
|
return cells;
|
|
51749
51729
|
}
|
|
51750
51730
|
getClickableAction(position) {
|
|
@@ -55236,8 +55216,7 @@ function addContent(content, sharedStrings, forceString = false) {
|
|
|
55236
55216
|
attrs.push(["t", "b"]);
|
|
55237
55217
|
}
|
|
55238
55218
|
else if (forceString || !isNumber(value, DEFAULT_LOCALE)) {
|
|
55239
|
-
|
|
55240
|
-
value = id.toString();
|
|
55219
|
+
value = pushElement(content, sharedStrings);
|
|
55241
55220
|
attrs.push(["t", "s"]);
|
|
55242
55221
|
}
|
|
55243
55222
|
return { attrs, node: escapeXml /*xml*/ `<v>${value}</v>` };
|
|
@@ -55362,8 +55341,7 @@ function addCellIsRule(cf, rule, dxfs) {
|
|
|
55362
55341
|
if (rule.style.fillColor) {
|
|
55363
55342
|
dxf.fill = { fgColor: { rgb: rule.style.fillColor } };
|
|
55364
55343
|
}
|
|
55365
|
-
|
|
55366
|
-
ruleAttributes.push(["dxfId", id]);
|
|
55344
|
+
ruleAttributes.push(["dxfId", pushElement(dxf, dxfs)]);
|
|
55367
55345
|
return escapeXml /*xml*/ `
|
|
55368
55346
|
<conditionalFormatting sqref="${cf.ranges.join(" ")}">
|
|
55369
55347
|
<cfRule ${formatAttributes(ruleAttributes)}>
|
|
@@ -56172,7 +56150,7 @@ function addSheetViews(sheet) {
|
|
|
56172
56150
|
*/
|
|
56173
56151
|
function getXLSX(data) {
|
|
56174
56152
|
const files = [];
|
|
56175
|
-
const construct = getDefaultXLSXStructure();
|
|
56153
|
+
const construct = getDefaultXLSXStructure(data);
|
|
56176
56154
|
files.push(createWorkbook(data, construct));
|
|
56177
56155
|
files.push(...createWorksheets(data, construct));
|
|
56178
56156
|
files.push(createStylesSheet(construct));
|
|
@@ -57052,6 +57030,6 @@ exports.setTranslationMethod = setTranslationMethod;
|
|
|
57052
57030
|
exports.tokenize = tokenize;
|
|
57053
57031
|
|
|
57054
57032
|
|
|
57055
|
-
__info__.version = "17.0.
|
|
57056
|
-
__info__.date = "2024-04-
|
|
57057
|
-
__info__.hash = "
|
|
57033
|
+
__info__.version = "17.0.19";
|
|
57034
|
+
__info__.date = "2024-04-18T16:41:42.291Z";
|
|
57035
|
+
__info__.hash = "9f3317a";
|