@odoo/o-spreadsheet 19.4.9 → 19.4.11
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 +350 -295
- package/dist/o_spreadsheet.css +17 -6
- package/dist/o_spreadsheet.esm.js +350 -295
- package/dist/o_spreadsheet.iife.js +350 -295
- package/dist/o_spreadsheet.min.iife.js +256 -256
- package/dist/o_spreadsheet.xml +7 -7
- package/dist/types/collaborative/session.d.ts +3 -1
- package/dist/types/constants.d.ts +1 -0
- package/dist/types/helpers/text_helper.d.ts +4 -0
- package/dist/types/plugins/core/carousel.d.ts +1 -1
- package/dist/types/plugins/core/squisher.d.ts +3 -0
- package/dist/types/types/collaborative/transport_service.d.ts +1 -0
- package/package.json +2 -2
|
@@ -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 19.4.
|
|
6
|
-
* @date 2026-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 19.4.11
|
|
6
|
+
* @date 2026-09-04T07:50:39.272Z
|
|
7
|
+
* @hash 7660254
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
(function(exports, _odoo_owl) {
|
|
@@ -447,6 +447,7 @@ _odoo_owl = __toESM(_odoo_owl, 1);
|
|
|
447
447
|
const COMPOSER_ASSISTANT_COLOR = "light-dark(#9B359B, #B972A6)";
|
|
448
448
|
const COLOR_TRANSPARENT = "#00000000";
|
|
449
449
|
const TABLE_HOVER_BACKGROUND_COLOR = "#017E8414";
|
|
450
|
+
const DEFAULT_CHART_BACKGROUND_COLOR = "#FFFFFF";
|
|
450
451
|
const CHART_WATERFALL_POSITIVE_COLOR = "#4EA7F2";
|
|
451
452
|
const CHART_WATERFALL_NEGATIVE_COLOR = "#EA6175";
|
|
452
453
|
const CHART_WATERFALL_SUBTOTAL_COLOR = "#AAAAAA";
|
|
@@ -7897,7 +7898,8 @@ set(value) {
|
|
|
7897
7898
|
"UPDATE_CHART",
|
|
7898
7899
|
"UPDATE_CHART_REGION",
|
|
7899
7900
|
"UPDATE_CAROUSEL_ACTIVE_ITEM",
|
|
7900
|
-
"UPDATE_PIVOT"
|
|
7901
|
+
"UPDATE_PIVOT",
|
|
7902
|
+
"UPDATE_COLOR_SCHEME"
|
|
7901
7903
|
]);
|
|
7902
7904
|
const lockedSheetAllowedCommands = /* @__PURE__ */ new Set([
|
|
7903
7905
|
"LOCK_SHEET",
|
|
@@ -8993,6 +8995,259 @@ set(value) {
|
|
|
8993
8995
|
}
|
|
8994
8996
|
};
|
|
8995
8997
|
|
|
8998
|
+
//#endregion
|
|
8999
|
+
//#region src/xlsx/constants.ts
|
|
9000
|
+
/** In XLSX color format (no #) */
|
|
9001
|
+
const AUTO_COLOR = "000000";
|
|
9002
|
+
const XLSX_ICONSET_MAP = {
|
|
9003
|
+
arrows: "3Arrows",
|
|
9004
|
+
smiley: "3Symbols",
|
|
9005
|
+
dots: "3TrafficLights1"
|
|
9006
|
+
};
|
|
9007
|
+
const NAMESPACE = {
|
|
9008
|
+
styleSheet: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
|
|
9009
|
+
sst: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
|
|
9010
|
+
Relationships: "http://schemas.openxmlformats.org/package/2006/relationships",
|
|
9011
|
+
Types: "http://schemas.openxmlformats.org/package/2006/content-types",
|
|
9012
|
+
worksheet: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
|
|
9013
|
+
workbook: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
|
|
9014
|
+
drawing: "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing",
|
|
9015
|
+
table: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
|
|
9016
|
+
revision: "http://schemas.microsoft.com/office/spreadsheetml/2014/revision",
|
|
9017
|
+
revision3: "http://schemas.microsoft.com/office/spreadsheetml/2016/revision3",
|
|
9018
|
+
markupCompatibility: "http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
9019
|
+
};
|
|
9020
|
+
const DRAWING_NS_A = "http://schemas.openxmlformats.org/drawingml/2006/main";
|
|
9021
|
+
const DRAWING_NS_C = "http://schemas.openxmlformats.org/drawingml/2006/chart";
|
|
9022
|
+
const CONTENT_TYPES = {
|
|
9023
|
+
workbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
|
9024
|
+
macroEnabledWorkbook: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
|
|
9025
|
+
templateWorkbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml",
|
|
9026
|
+
macroEnabledTemplateWorkbook: "application/vnd.ms-excel.template.macroEnabled.main+xml",
|
|
9027
|
+
excelAddInWorkbook: "application/vnd.ms-excel.addin.macroEnabled.main+xml",
|
|
9028
|
+
sheet: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
|
|
9029
|
+
metadata: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml",
|
|
9030
|
+
sharedStrings: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
|
|
9031
|
+
styles: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
|
|
9032
|
+
drawing: "application/vnd.openxmlformats-officedocument.drawing+xml",
|
|
9033
|
+
chart: "application/vnd.openxmlformats-officedocument.drawingml.chart+xml",
|
|
9034
|
+
themes: "application/vnd.openxmlformats-officedocument.theme+xml",
|
|
9035
|
+
table: "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml",
|
|
9036
|
+
pivot: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml",
|
|
9037
|
+
externalLink: "application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml"
|
|
9038
|
+
};
|
|
9039
|
+
const XLSX_RELATION_TYPE = {
|
|
9040
|
+
document: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
|
|
9041
|
+
sheet: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",
|
|
9042
|
+
metadata: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",
|
|
9043
|
+
sharedStrings: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",
|
|
9044
|
+
styles: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",
|
|
9045
|
+
drawing: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",
|
|
9046
|
+
chart: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",
|
|
9047
|
+
theme: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",
|
|
9048
|
+
table: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/table",
|
|
9049
|
+
hyperlink: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",
|
|
9050
|
+
image: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
|
|
9051
|
+
};
|
|
9052
|
+
const ARRAY_FORMULA_URI = "bdbb8cdc-fa1e-496e-a857-3c3f30c029c3";
|
|
9053
|
+
const RELATIONSHIP_NSR = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
|
|
9054
|
+
const HEIGHT_FACTOR = .75;
|
|
9055
|
+
/**
|
|
9056
|
+
* Excel says its default column width is 8.43 characters (64px)
|
|
9057
|
+
* which makes WIDTH_FACTOR = 0.1317, but it doesn't work well
|
|
9058
|
+
* 0.143 is a value from dev's experiments.
|
|
9059
|
+
*/
|
|
9060
|
+
const WIDTH_FACTOR = .143;
|
|
9061
|
+
/** unit : maximum number of characters a column can hold at the standard font size. What. */
|
|
9062
|
+
const EXCEL_DEFAULT_COL_WIDTH = 8.43;
|
|
9063
|
+
/** unit : points */
|
|
9064
|
+
const EXCEL_DEFAULT_ROW_HEIGHT = 12.75;
|
|
9065
|
+
const FORCE_DEFAULT_ARGS_FUNCTIONS = {
|
|
9066
|
+
FLOOR: [{
|
|
9067
|
+
type: "NUMBER",
|
|
9068
|
+
value: 1
|
|
9069
|
+
}],
|
|
9070
|
+
CEILING: [{
|
|
9071
|
+
type: "NUMBER",
|
|
9072
|
+
value: 1
|
|
9073
|
+
}],
|
|
9074
|
+
ROUND: [{
|
|
9075
|
+
type: "NUMBER",
|
|
9076
|
+
value: 0
|
|
9077
|
+
}],
|
|
9078
|
+
ROUNDUP: [{
|
|
9079
|
+
type: "NUMBER",
|
|
9080
|
+
value: 0
|
|
9081
|
+
}],
|
|
9082
|
+
ROUNDDOWN: [{
|
|
9083
|
+
type: "NUMBER",
|
|
9084
|
+
value: 0
|
|
9085
|
+
}],
|
|
9086
|
+
IFERROR: [{
|
|
9087
|
+
type: "NUMBER",
|
|
9088
|
+
value: 0
|
|
9089
|
+
}]
|
|
9090
|
+
};
|
|
9091
|
+
/**
|
|
9092
|
+
* This list contains all "future" functions that are not compatible with older versions of Excel
|
|
9093
|
+
* For more information, see https://docs.microsoft.com/en-us/openspecs/office_standards/ms-xlsx/5d1b6d44-6fc1-4ecd-8fef-0b27406cc2bf
|
|
9094
|
+
*/
|
|
9095
|
+
const NON_RETROCOMPATIBLE_FUNCTIONS = [
|
|
9096
|
+
"ACOT",
|
|
9097
|
+
"ACOTH",
|
|
9098
|
+
"AGGREGATE",
|
|
9099
|
+
"ARABIC",
|
|
9100
|
+
"BASE",
|
|
9101
|
+
"BETA.DIST",
|
|
9102
|
+
"BETA.INV",
|
|
9103
|
+
"BINOM.DIST",
|
|
9104
|
+
"BINOM.DIST.RANGE",
|
|
9105
|
+
"BINOM.INV",
|
|
9106
|
+
"BITAND",
|
|
9107
|
+
"BITLSHIFT",
|
|
9108
|
+
"BITOR",
|
|
9109
|
+
"BITRSHIFT",
|
|
9110
|
+
"BITXOR",
|
|
9111
|
+
"BYCOL",
|
|
9112
|
+
"BYROW",
|
|
9113
|
+
"CEILING.MATH",
|
|
9114
|
+
"CEILING.PRECISE",
|
|
9115
|
+
"CHISQ.DIST",
|
|
9116
|
+
"CHISQ.DIST.RT",
|
|
9117
|
+
"CHISQ.INV",
|
|
9118
|
+
"CHISQ.INV.RT",
|
|
9119
|
+
"CHISQ.TEST",
|
|
9120
|
+
"CHOOSECOLS",
|
|
9121
|
+
"CHOOSEROWS",
|
|
9122
|
+
"COMBINA",
|
|
9123
|
+
"CONCAT",
|
|
9124
|
+
"CONFIDENCE.NORM",
|
|
9125
|
+
"CONFIDENCE.T",
|
|
9126
|
+
"COT",
|
|
9127
|
+
"COTH",
|
|
9128
|
+
"COVARIANCE.P",
|
|
9129
|
+
"COVARIANCE.S",
|
|
9130
|
+
"CSC",
|
|
9131
|
+
"CSCH",
|
|
9132
|
+
"DAYS",
|
|
9133
|
+
"DECIMAL",
|
|
9134
|
+
"DROP",
|
|
9135
|
+
"ERF.PRECISE",
|
|
9136
|
+
"ERFC.PRECISE",
|
|
9137
|
+
"EXPAND",
|
|
9138
|
+
"EXPON.DIST",
|
|
9139
|
+
"F.DIST",
|
|
9140
|
+
"F.DIST.RT",
|
|
9141
|
+
"F.INV",
|
|
9142
|
+
"F.INV.RT",
|
|
9143
|
+
"F.TEST",
|
|
9144
|
+
"FIELDVALUE",
|
|
9145
|
+
"FILTERXML",
|
|
9146
|
+
"FLOOR.MATH",
|
|
9147
|
+
"FLOOR.PRECISE",
|
|
9148
|
+
"FORECAST.ETS",
|
|
9149
|
+
"FORECAST.ETS.CONFINT",
|
|
9150
|
+
"FORECAST.ETS.SEASONALITY",
|
|
9151
|
+
"FORECAST.ETS.STAT",
|
|
9152
|
+
"FORECAST.LINEAR",
|
|
9153
|
+
"FORMULATEXT",
|
|
9154
|
+
"GAMMA",
|
|
9155
|
+
"GAMMA.DIST",
|
|
9156
|
+
"GAMMA.INV",
|
|
9157
|
+
"GAMMALN.PRECISE",
|
|
9158
|
+
"GAUSS",
|
|
9159
|
+
"HSTACK",
|
|
9160
|
+
"HYPGEOM.DIST",
|
|
9161
|
+
"IFNA",
|
|
9162
|
+
"IFS",
|
|
9163
|
+
"IMCOSH",
|
|
9164
|
+
"IMCOT",
|
|
9165
|
+
"IMCSC",
|
|
9166
|
+
"IMCSCH",
|
|
9167
|
+
"IMSEC",
|
|
9168
|
+
"IMSECH",
|
|
9169
|
+
"IMSINH",
|
|
9170
|
+
"IMTAN",
|
|
9171
|
+
"ISFORMULA",
|
|
9172
|
+
"ISOMITTED",
|
|
9173
|
+
"ISOWEEKNUM",
|
|
9174
|
+
"LAMBDA",
|
|
9175
|
+
"LET",
|
|
9176
|
+
"LOGNORM.DIST",
|
|
9177
|
+
"LOGNORM.INV",
|
|
9178
|
+
"MAKEARRAY",
|
|
9179
|
+
"MAP",
|
|
9180
|
+
"MAXIFS",
|
|
9181
|
+
"MINIFS",
|
|
9182
|
+
"MODE.MULT",
|
|
9183
|
+
"MODE.SNGL",
|
|
9184
|
+
"MUNIT",
|
|
9185
|
+
"NEGBINOM.DIST",
|
|
9186
|
+
"NORM.DIST",
|
|
9187
|
+
"NORM.INV",
|
|
9188
|
+
"NORM.S.DIST",
|
|
9189
|
+
"NORM.S.INV",
|
|
9190
|
+
"NUMBERVALUE",
|
|
9191
|
+
"PDURATION",
|
|
9192
|
+
"PERCENTILE.EXC",
|
|
9193
|
+
"PERCENTILE.INC",
|
|
9194
|
+
"PERCENTRANK.EXC",
|
|
9195
|
+
"PERCENTRANK.INC",
|
|
9196
|
+
"PERMUTATIONA",
|
|
9197
|
+
"PHI",
|
|
9198
|
+
"POISSON.DIST",
|
|
9199
|
+
"PQSOURCE",
|
|
9200
|
+
"PYTHON_STR",
|
|
9201
|
+
"PYTHON_TYPE",
|
|
9202
|
+
"PYTHON_TYPENAME",
|
|
9203
|
+
"QUARTILE.EXC",
|
|
9204
|
+
"QUARTILE.INC",
|
|
9205
|
+
"QUERYSTRING",
|
|
9206
|
+
"RANDARRAY",
|
|
9207
|
+
"RANK.AVG",
|
|
9208
|
+
"RANK.EQ",
|
|
9209
|
+
"REDUCE",
|
|
9210
|
+
"RRI",
|
|
9211
|
+
"SCAN",
|
|
9212
|
+
"SEC",
|
|
9213
|
+
"SECH",
|
|
9214
|
+
"SEQUENCE",
|
|
9215
|
+
"SHEET",
|
|
9216
|
+
"SHEETS",
|
|
9217
|
+
"SKEW.P",
|
|
9218
|
+
"SORTBY",
|
|
9219
|
+
"STDEV.P",
|
|
9220
|
+
"STDEV.S",
|
|
9221
|
+
"SWITCH",
|
|
9222
|
+
"T.DIST",
|
|
9223
|
+
"T.DIST.2T",
|
|
9224
|
+
"T.DIST.RT",
|
|
9225
|
+
"T.INV",
|
|
9226
|
+
"T.INV.2T",
|
|
9227
|
+
"T.TEST",
|
|
9228
|
+
"TAKE",
|
|
9229
|
+
"TEXTAFTER",
|
|
9230
|
+
"TEXTBEFORE",
|
|
9231
|
+
"TEXTJOIN",
|
|
9232
|
+
"TEXTSPLIT",
|
|
9233
|
+
"TOCOL",
|
|
9234
|
+
"TOROW",
|
|
9235
|
+
"UNICHAR",
|
|
9236
|
+
"UNICODE",
|
|
9237
|
+
"UNIQUE",
|
|
9238
|
+
"VAR.P",
|
|
9239
|
+
"VAR.S",
|
|
9240
|
+
"VSTACK",
|
|
9241
|
+
"WEBSERVICE",
|
|
9242
|
+
"WEIBULL.DIST",
|
|
9243
|
+
"WRAPCOLS",
|
|
9244
|
+
"WRAPROWS",
|
|
9245
|
+
"XLOOKUP",
|
|
9246
|
+
"XOR",
|
|
9247
|
+
"Z.TEST"
|
|
9248
|
+
];
|
|
9249
|
+
const CONTENT_TYPES_FILE = "[Content_Types].xml";
|
|
9250
|
+
|
|
8996
9251
|
//#endregion
|
|
8997
9252
|
//#region src/helpers/color.ts
|
|
8998
9253
|
const RBA_REGEX = /rgba?\(|\s+|\)/gi;
|
|
@@ -9694,259 +9949,6 @@ set(value) {
|
|
|
9694
9949
|
return r << 16 | g << 8 | b;
|
|
9695
9950
|
}
|
|
9696
9951
|
|
|
9697
|
-
//#endregion
|
|
9698
|
-
//#region src/xlsx/constants.ts
|
|
9699
|
-
/** In XLSX color format (no #) */
|
|
9700
|
-
const AUTO_COLOR = "000000";
|
|
9701
|
-
const XLSX_ICONSET_MAP = {
|
|
9702
|
-
arrows: "3Arrows",
|
|
9703
|
-
smiley: "3Symbols",
|
|
9704
|
-
dots: "3TrafficLights1"
|
|
9705
|
-
};
|
|
9706
|
-
const NAMESPACE = {
|
|
9707
|
-
styleSheet: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
|
|
9708
|
-
sst: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
|
|
9709
|
-
Relationships: "http://schemas.openxmlformats.org/package/2006/relationships",
|
|
9710
|
-
Types: "http://schemas.openxmlformats.org/package/2006/content-types",
|
|
9711
|
-
worksheet: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
|
|
9712
|
-
workbook: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
|
|
9713
|
-
drawing: "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing",
|
|
9714
|
-
table: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
|
|
9715
|
-
revision: "http://schemas.microsoft.com/office/spreadsheetml/2014/revision",
|
|
9716
|
-
revision3: "http://schemas.microsoft.com/office/spreadsheetml/2016/revision3",
|
|
9717
|
-
markupCompatibility: "http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
9718
|
-
};
|
|
9719
|
-
const DRAWING_NS_A = "http://schemas.openxmlformats.org/drawingml/2006/main";
|
|
9720
|
-
const DRAWING_NS_C = "http://schemas.openxmlformats.org/drawingml/2006/chart";
|
|
9721
|
-
const CONTENT_TYPES = {
|
|
9722
|
-
workbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
|
|
9723
|
-
macroEnabledWorkbook: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
|
|
9724
|
-
templateWorkbook: "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml",
|
|
9725
|
-
macroEnabledTemplateWorkbook: "application/vnd.ms-excel.template.macroEnabled.main+xml",
|
|
9726
|
-
excelAddInWorkbook: "application/vnd.ms-excel.addin.macroEnabled.main+xml",
|
|
9727
|
-
sheet: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
|
|
9728
|
-
metadata: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml",
|
|
9729
|
-
sharedStrings: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
|
|
9730
|
-
styles: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
|
|
9731
|
-
drawing: "application/vnd.openxmlformats-officedocument.drawing+xml",
|
|
9732
|
-
chart: "application/vnd.openxmlformats-officedocument.drawingml.chart+xml",
|
|
9733
|
-
themes: "application/vnd.openxmlformats-officedocument.theme+xml",
|
|
9734
|
-
table: "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml",
|
|
9735
|
-
pivot: "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml",
|
|
9736
|
-
externalLink: "application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml"
|
|
9737
|
-
};
|
|
9738
|
-
const XLSX_RELATION_TYPE = {
|
|
9739
|
-
document: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
|
|
9740
|
-
sheet: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",
|
|
9741
|
-
metadata: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",
|
|
9742
|
-
sharedStrings: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",
|
|
9743
|
-
styles: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",
|
|
9744
|
-
drawing: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",
|
|
9745
|
-
chart: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",
|
|
9746
|
-
theme: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",
|
|
9747
|
-
table: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/table",
|
|
9748
|
-
hyperlink: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",
|
|
9749
|
-
image: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
|
|
9750
|
-
};
|
|
9751
|
-
const ARRAY_FORMULA_URI = "bdbb8cdc-fa1e-496e-a857-3c3f30c029c3";
|
|
9752
|
-
const RELATIONSHIP_NSR = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
|
|
9753
|
-
const HEIGHT_FACTOR = .75;
|
|
9754
|
-
/**
|
|
9755
|
-
* Excel says its default column width is 8.43 characters (64px)
|
|
9756
|
-
* which makes WIDTH_FACTOR = 0.1317, but it doesn't work well
|
|
9757
|
-
* 0.143 is a value from dev's experiments.
|
|
9758
|
-
*/
|
|
9759
|
-
const WIDTH_FACTOR = .143;
|
|
9760
|
-
/** unit : maximum number of characters a column can hold at the standard font size. What. */
|
|
9761
|
-
const EXCEL_DEFAULT_COL_WIDTH = 8.43;
|
|
9762
|
-
/** unit : points */
|
|
9763
|
-
const EXCEL_DEFAULT_ROW_HEIGHT = 12.75;
|
|
9764
|
-
const FORCE_DEFAULT_ARGS_FUNCTIONS = {
|
|
9765
|
-
FLOOR: [{
|
|
9766
|
-
type: "NUMBER",
|
|
9767
|
-
value: 1
|
|
9768
|
-
}],
|
|
9769
|
-
CEILING: [{
|
|
9770
|
-
type: "NUMBER",
|
|
9771
|
-
value: 1
|
|
9772
|
-
}],
|
|
9773
|
-
ROUND: [{
|
|
9774
|
-
type: "NUMBER",
|
|
9775
|
-
value: 0
|
|
9776
|
-
}],
|
|
9777
|
-
ROUNDUP: [{
|
|
9778
|
-
type: "NUMBER",
|
|
9779
|
-
value: 0
|
|
9780
|
-
}],
|
|
9781
|
-
ROUNDDOWN: [{
|
|
9782
|
-
type: "NUMBER",
|
|
9783
|
-
value: 0
|
|
9784
|
-
}],
|
|
9785
|
-
IFERROR: [{
|
|
9786
|
-
type: "NUMBER",
|
|
9787
|
-
value: 0
|
|
9788
|
-
}]
|
|
9789
|
-
};
|
|
9790
|
-
/**
|
|
9791
|
-
* This list contains all "future" functions that are not compatible with older versions of Excel
|
|
9792
|
-
* For more information, see https://docs.microsoft.com/en-us/openspecs/office_standards/ms-xlsx/5d1b6d44-6fc1-4ecd-8fef-0b27406cc2bf
|
|
9793
|
-
*/
|
|
9794
|
-
const NON_RETROCOMPATIBLE_FUNCTIONS = [
|
|
9795
|
-
"ACOT",
|
|
9796
|
-
"ACOTH",
|
|
9797
|
-
"AGGREGATE",
|
|
9798
|
-
"ARABIC",
|
|
9799
|
-
"BASE",
|
|
9800
|
-
"BETA.DIST",
|
|
9801
|
-
"BETA.INV",
|
|
9802
|
-
"BINOM.DIST",
|
|
9803
|
-
"BINOM.DIST.RANGE",
|
|
9804
|
-
"BINOM.INV",
|
|
9805
|
-
"BITAND",
|
|
9806
|
-
"BITLSHIFT",
|
|
9807
|
-
"BITOR",
|
|
9808
|
-
"BITRSHIFT",
|
|
9809
|
-
"BITXOR",
|
|
9810
|
-
"BYCOL",
|
|
9811
|
-
"BYROW",
|
|
9812
|
-
"CEILING.MATH",
|
|
9813
|
-
"CEILING.PRECISE",
|
|
9814
|
-
"CHISQ.DIST",
|
|
9815
|
-
"CHISQ.DIST.RT",
|
|
9816
|
-
"CHISQ.INV",
|
|
9817
|
-
"CHISQ.INV.RT",
|
|
9818
|
-
"CHISQ.TEST",
|
|
9819
|
-
"CHOOSECOLS",
|
|
9820
|
-
"CHOOSEROWS",
|
|
9821
|
-
"COMBINA",
|
|
9822
|
-
"CONCAT",
|
|
9823
|
-
"CONFIDENCE.NORM",
|
|
9824
|
-
"CONFIDENCE.T",
|
|
9825
|
-
"COT",
|
|
9826
|
-
"COTH",
|
|
9827
|
-
"COVARIANCE.P",
|
|
9828
|
-
"COVARIANCE.S",
|
|
9829
|
-
"CSC",
|
|
9830
|
-
"CSCH",
|
|
9831
|
-
"DAYS",
|
|
9832
|
-
"DECIMAL",
|
|
9833
|
-
"DROP",
|
|
9834
|
-
"ERF.PRECISE",
|
|
9835
|
-
"ERFC.PRECISE",
|
|
9836
|
-
"EXPAND",
|
|
9837
|
-
"EXPON.DIST",
|
|
9838
|
-
"F.DIST",
|
|
9839
|
-
"F.DIST.RT",
|
|
9840
|
-
"F.INV",
|
|
9841
|
-
"F.INV.RT",
|
|
9842
|
-
"F.TEST",
|
|
9843
|
-
"FIELDVALUE",
|
|
9844
|
-
"FILTERXML",
|
|
9845
|
-
"FLOOR.MATH",
|
|
9846
|
-
"FLOOR.PRECISE",
|
|
9847
|
-
"FORECAST.ETS",
|
|
9848
|
-
"FORECAST.ETS.CONFINT",
|
|
9849
|
-
"FORECAST.ETS.SEASONALITY",
|
|
9850
|
-
"FORECAST.ETS.STAT",
|
|
9851
|
-
"FORECAST.LINEAR",
|
|
9852
|
-
"FORMULATEXT",
|
|
9853
|
-
"GAMMA",
|
|
9854
|
-
"GAMMA.DIST",
|
|
9855
|
-
"GAMMA.INV",
|
|
9856
|
-
"GAMMALN.PRECISE",
|
|
9857
|
-
"GAUSS",
|
|
9858
|
-
"HSTACK",
|
|
9859
|
-
"HYPGEOM.DIST",
|
|
9860
|
-
"IFNA",
|
|
9861
|
-
"IFS",
|
|
9862
|
-
"IMCOSH",
|
|
9863
|
-
"IMCOT",
|
|
9864
|
-
"IMCSC",
|
|
9865
|
-
"IMCSCH",
|
|
9866
|
-
"IMSEC",
|
|
9867
|
-
"IMSECH",
|
|
9868
|
-
"IMSINH",
|
|
9869
|
-
"IMTAN",
|
|
9870
|
-
"ISFORMULA",
|
|
9871
|
-
"ISOMITTED",
|
|
9872
|
-
"ISOWEEKNUM",
|
|
9873
|
-
"LAMBDA",
|
|
9874
|
-
"LET",
|
|
9875
|
-
"LOGNORM.DIST",
|
|
9876
|
-
"LOGNORM.INV",
|
|
9877
|
-
"MAKEARRAY",
|
|
9878
|
-
"MAP",
|
|
9879
|
-
"MAXIFS",
|
|
9880
|
-
"MINIFS",
|
|
9881
|
-
"MODE.MULT",
|
|
9882
|
-
"MODE.SNGL",
|
|
9883
|
-
"MUNIT",
|
|
9884
|
-
"NEGBINOM.DIST",
|
|
9885
|
-
"NORM.DIST",
|
|
9886
|
-
"NORM.INV",
|
|
9887
|
-
"NORM.S.DIST",
|
|
9888
|
-
"NORM.S.INV",
|
|
9889
|
-
"NUMBERVALUE",
|
|
9890
|
-
"PDURATION",
|
|
9891
|
-
"PERCENTILE.EXC",
|
|
9892
|
-
"PERCENTILE.INC",
|
|
9893
|
-
"PERCENTRANK.EXC",
|
|
9894
|
-
"PERCENTRANK.INC",
|
|
9895
|
-
"PERMUTATIONA",
|
|
9896
|
-
"PHI",
|
|
9897
|
-
"POISSON.DIST",
|
|
9898
|
-
"PQSOURCE",
|
|
9899
|
-
"PYTHON_STR",
|
|
9900
|
-
"PYTHON_TYPE",
|
|
9901
|
-
"PYTHON_TYPENAME",
|
|
9902
|
-
"QUARTILE.EXC",
|
|
9903
|
-
"QUARTILE.INC",
|
|
9904
|
-
"QUERYSTRING",
|
|
9905
|
-
"RANDARRAY",
|
|
9906
|
-
"RANK.AVG",
|
|
9907
|
-
"RANK.EQ",
|
|
9908
|
-
"REDUCE",
|
|
9909
|
-
"RRI",
|
|
9910
|
-
"SCAN",
|
|
9911
|
-
"SEC",
|
|
9912
|
-
"SECH",
|
|
9913
|
-
"SEQUENCE",
|
|
9914
|
-
"SHEET",
|
|
9915
|
-
"SHEETS",
|
|
9916
|
-
"SKEW.P",
|
|
9917
|
-
"SORTBY",
|
|
9918
|
-
"STDEV.P",
|
|
9919
|
-
"STDEV.S",
|
|
9920
|
-
"SWITCH",
|
|
9921
|
-
"T.DIST",
|
|
9922
|
-
"T.DIST.2T",
|
|
9923
|
-
"T.DIST.RT",
|
|
9924
|
-
"T.INV",
|
|
9925
|
-
"T.INV.2T",
|
|
9926
|
-
"T.TEST",
|
|
9927
|
-
"TAKE",
|
|
9928
|
-
"TEXTAFTER",
|
|
9929
|
-
"TEXTBEFORE",
|
|
9930
|
-
"TEXTJOIN",
|
|
9931
|
-
"TEXTSPLIT",
|
|
9932
|
-
"TOCOL",
|
|
9933
|
-
"TOROW",
|
|
9934
|
-
"UNICHAR",
|
|
9935
|
-
"UNICODE",
|
|
9936
|
-
"UNIQUE",
|
|
9937
|
-
"VAR.P",
|
|
9938
|
-
"VAR.S",
|
|
9939
|
-
"VSTACK",
|
|
9940
|
-
"WEBSERVICE",
|
|
9941
|
-
"WEIBULL.DIST",
|
|
9942
|
-
"WRAPCOLS",
|
|
9943
|
-
"WRAPROWS",
|
|
9944
|
-
"XLOOKUP",
|
|
9945
|
-
"XOR",
|
|
9946
|
-
"Z.TEST"
|
|
9947
|
-
];
|
|
9948
|
-
const CONTENT_TYPES_FILE = "[Content_Types].xml";
|
|
9949
|
-
|
|
9950
9952
|
//#endregion
|
|
9951
9953
|
//#region src/helpers/figures/charts/chart_common.ts
|
|
9952
9954
|
const TREND_LINE_XAXIS_ID = "x1";
|
|
@@ -10212,10 +10214,10 @@ set(value) {
|
|
|
10212
10214
|
drawLineOrBarOrRadarChartValues(chart, options, ctx);
|
|
10213
10215
|
break;
|
|
10214
10216
|
case "bar":
|
|
10215
|
-
options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
|
|
10217
|
+
options.horizontal ? drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true }) : drawLineOrBarOrRadarChartValues(chart, options, ctx);
|
|
10216
10218
|
break;
|
|
10217
10219
|
case "pyramid":
|
|
10218
|
-
drawHorizontalBarChartValues(chart, options, ctx);
|
|
10220
|
+
drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: true });
|
|
10219
10221
|
break;
|
|
10220
10222
|
case "calendar":
|
|
10221
10223
|
drawBarChartValues(chart, options, ctx);
|
|
@@ -10224,7 +10226,7 @@ set(value) {
|
|
|
10224
10226
|
drawBubbleChartValues(chart, options, ctx);
|
|
10225
10227
|
break;
|
|
10226
10228
|
case "funnel":
|
|
10227
|
-
drawHorizontalBarChartValues(chart, options, ctx);
|
|
10229
|
+
drawHorizontalBarChartValues(chart, options, ctx, { offsetFromAxisOrigin: false });
|
|
10228
10230
|
break;
|
|
10229
10231
|
}
|
|
10230
10232
|
ctx.restore();
|
|
@@ -10299,23 +10301,33 @@ set(value) {
|
|
|
10299
10301
|
const yMax = chart.chartArea.bottom;
|
|
10300
10302
|
const yMin = chart.chartArea.top;
|
|
10301
10303
|
const textsPositions = {};
|
|
10304
|
+
const canDrawTextInsideBubble = (chartElement, textSize) => {
|
|
10305
|
+
const radius = chartElement.options.radius ?? globalThis.Chart?.defaults.elements.point.radius ?? 3;
|
|
10306
|
+
return textSize.height < radius * 2;
|
|
10307
|
+
};
|
|
10302
10308
|
for (const dataset of chart._metasets) for (let i = 0; i < dataset._parsed.length; i++) {
|
|
10303
10309
|
const value = dataset._parsed[i].y;
|
|
10304
10310
|
if (isNaN(value)) continue;
|
|
10311
|
+
const valueToDisplay = options.callback(Number(value), dataset, i);
|
|
10305
10312
|
const point = dataset.data[i];
|
|
10306
10313
|
const xPosition = point.x;
|
|
10307
10314
|
let yPosition = Math.max(Math.min(point.y, yMax), yMin);
|
|
10315
|
+
const textSize = getTextDimensions(valueToDisplay, ctx);
|
|
10316
|
+
if (!canDrawTextInsideBubble(point, textSize)) yPosition = value < 0 ? point.y + 10 : point.y - 10;
|
|
10308
10317
|
if (!textsPositions[xPosition]) textsPositions[xPosition] = [];
|
|
10309
10318
|
for (const otherPosition of textsPositions[xPosition] || []) if (Math.abs(otherPosition - yPosition) < MINIMAL_VERTICAL_DISTANCE) yPosition = otherPosition + MINIMAL_VERTICAL_DISTANCE * (value < 0 ? 1 : -1);
|
|
10310
10319
|
textsPositions[xPosition].push(yPosition);
|
|
10311
|
-
|
|
10312
|
-
|
|
10313
|
-
|
|
10314
|
-
|
|
10315
|
-
|
|
10320
|
+
if (canDrawTextInsideBubble(point, textSize)) {
|
|
10321
|
+
ctx.strokeStyle = point.options.backgroundColor;
|
|
10322
|
+
ctx.fillStyle = options.background(Number(value), dataset, i) || "#ffffff";
|
|
10323
|
+
} else {
|
|
10324
|
+
ctx.strokeStyle = options.background(Number(value), dataset, i) || "#ffffff";
|
|
10325
|
+
ctx.fillStyle = point.options.backgroundColor;
|
|
10326
|
+
}
|
|
10327
|
+
drawTextWithBackground(valueToDisplay, xPosition, yPosition, ctx);
|
|
10316
10328
|
}
|
|
10317
10329
|
}
|
|
10318
|
-
function drawHorizontalBarChartValues(chart, options, ctx) {
|
|
10330
|
+
function drawHorizontalBarChartValues(chart, options, ctx, args) {
|
|
10319
10331
|
const textsPositions = {};
|
|
10320
10332
|
for (const dataset of chart._metasets) {
|
|
10321
10333
|
if (isTrendLineAxis(dataset.xAxisID) || isLineOverlayOnBarChart(options, dataset)) continue;
|
|
@@ -10330,7 +10342,7 @@ set(value) {
|
|
|
10330
10342
|
const distanceFromAxisOrigin = Math.abs(point.x - xZeroLine);
|
|
10331
10343
|
const PADDING = 3;
|
|
10332
10344
|
let xPosition;
|
|
10333
|
-
if (distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
|
|
10345
|
+
if (args.offsetFromAxisOrigin && distanceFromAxisOrigin < textWidth) xPosition = value < 0 ? xZeroLine - textWidth / 2 - PADDING : xZeroLine + textWidth / 2 + PADDING;
|
|
10334
10346
|
else xPosition = value < 0 ? point.x + point.width / 2 : point.x - point.width / 2;
|
|
10335
10347
|
if (!textsPositions[yPosition]) textsPositions[yPosition] = [];
|
|
10336
10348
|
for (const otherPosition of textsPositions[yPosition]) if (Math.abs(otherPosition - xPosition) < textWidth) xPosition = value < 0 ? otherPosition - textWidth - PADDING : otherPosition + textWidth + PADDING;
|
|
@@ -10365,6 +10377,9 @@ set(value) {
|
|
|
10365
10377
|
drawTextWithBackground(displayValue, x, y, ctx);
|
|
10366
10378
|
}
|
|
10367
10379
|
}
|
|
10380
|
+
function getTextDimensions(text, ctx) {
|
|
10381
|
+
return computeCachedTextDimension(ctx, text, computeTextFont({ fontSize: globalThis.Chart?.defaults.font.size ?? 12 }, "px"));
|
|
10382
|
+
}
|
|
10368
10383
|
|
|
10369
10384
|
//#endregion
|
|
10370
10385
|
//#region src/types/chart/tree_map_chart.ts
|
|
@@ -11216,6 +11231,7 @@ set(value) {
|
|
|
11216
11231
|
hidden,
|
|
11217
11232
|
borderColor,
|
|
11218
11233
|
backgroundColor: borderColor,
|
|
11234
|
+
pointBackgroundColor: borderColor,
|
|
11219
11235
|
pointRadius: definition.hideDataMarkers ? 0 : 3
|
|
11220
11236
|
};
|
|
11221
11237
|
if (fill) {
|
|
@@ -31290,9 +31306,10 @@ set(value) {
|
|
|
31290
31306
|
compositionActive = false;
|
|
31291
31307
|
spreadsheetRect = useSpreadsheetRect();
|
|
31292
31308
|
lastHoveredTokenIndex = void 0;
|
|
31293
|
-
debouncedHover = debounce((tokenIndex, hoveredRect) => {
|
|
31309
|
+
debouncedHover = debounce((tokenIndex, composerContent, hoveredRect) => {
|
|
31294
31310
|
const selection = this.contentHelper.getCurrentSelection();
|
|
31295
|
-
|
|
31311
|
+
const currentContent = this.props.composerStore.currentContent;
|
|
31312
|
+
if (selection.start !== selection.end || currentContent !== composerContent) return;
|
|
31296
31313
|
const currentHoveredContext = this.props.composerStore.hoveredTokens;
|
|
31297
31314
|
this.props.composerStore.hoverToken(tokenIndex);
|
|
31298
31315
|
if (!deepEquals(currentHoveredContext, this.props.composerStore.hoveredTokens)) this.composerState.hoveredRect = hoveredRect;
|
|
@@ -31612,7 +31629,8 @@ set(value) {
|
|
|
31612
31629
|
onTokenHover(tokenIndex, hoveredRect) {
|
|
31613
31630
|
if (this.lastHoveredTokenIndex !== tokenIndex) {
|
|
31614
31631
|
this.lastHoveredTokenIndex = tokenIndex;
|
|
31615
|
-
this.
|
|
31632
|
+
const composerContent = this.props.composerStore.currentContent;
|
|
31633
|
+
this.debouncedHover(tokenIndex, composerContent, hoveredRect);
|
|
31616
31634
|
}
|
|
31617
31635
|
}
|
|
31618
31636
|
/**
|
|
@@ -37066,7 +37084,7 @@ set(value) {
|
|
|
37066
37084
|
get currentSheetMatchesCount() {
|
|
37067
37085
|
const { activeSheetMatchesCount: count, activeSheetHiddenMatchesCount: hidden, searchOptions } = this.store;
|
|
37068
37086
|
const sheetName = this.env.model.getters.getSheetName(this.env.model.getters.getActiveSheetId());
|
|
37069
|
-
let label = count === 1 ? _t("1 match in %(sheetName)s", { sheetName }) : _t("%(count)s matches in %(sheetName)s", {
|
|
37087
|
+
let label = count === 1 ? _t("1 match in '%(sheetName)s'", { sheetName }) : _t("%(count)s matches in '%(sheetName)s'", {
|
|
37070
37088
|
count,
|
|
37071
37089
|
sheetName
|
|
37072
37090
|
});
|
|
@@ -37078,10 +37096,10 @@ set(value) {
|
|
|
37078
37096
|
if (!range) return "";
|
|
37079
37097
|
const { specificRangeMatchesCount: count, specificRangeHiddenMatchesCount: hidden, searchOptions } = this.store;
|
|
37080
37098
|
const { sheetId, zone } = range;
|
|
37081
|
-
let label = count === 1 ? _t("1 match in range %(range)s of %(sheetName)s", {
|
|
37099
|
+
let label = count === 1 ? _t("1 match in range %(range)s of '%(sheetName)s'", {
|
|
37082
37100
|
range: zoneToXc(zone),
|
|
37083
37101
|
sheetName: this.env.model.getters.getSheetName(sheetId)
|
|
37084
|
-
}) : _t("%(count)s matches in range %(range)s of %(sheetName)s", {
|
|
37102
|
+
}) : _t("%(count)s matches in range %(range)s of '%(sheetName)s'", {
|
|
37085
37103
|
count,
|
|
37086
37104
|
range: zoneToXc(zone),
|
|
37087
37105
|
sheetName: this.env.model.getters.getSheetName(sheetId)
|
|
@@ -41268,7 +41286,13 @@ set(value) {
|
|
|
41268
41286
|
}
|
|
41269
41287
|
onSelectionChanged(ranges) {
|
|
41270
41288
|
this.state.rangeHasChanged = true;
|
|
41271
|
-
|
|
41289
|
+
if (ranges.length === 0) {
|
|
41290
|
+
this.state.range = void 0;
|
|
41291
|
+
return;
|
|
41292
|
+
}
|
|
41293
|
+
const sheetId = this.env.model.getters.getActiveSheetId();
|
|
41294
|
+
const range = this.env.model.getters.getRangeFromSheetXC(sheetId, ranges[0]);
|
|
41295
|
+
this.state.range = this.env.model.getters.getRangeString(range, "forceSheetReference", { useBoundedReference: true });
|
|
41272
41296
|
}
|
|
41273
41297
|
onSelectionConfirmed() {
|
|
41274
41298
|
if (this.state.range) {
|
|
@@ -51027,6 +51051,7 @@ set(value) {
|
|
|
51027
51051
|
return "Success";
|
|
51028
51052
|
case "UPDATE_CAROUSEL":
|
|
51029
51053
|
if (!this.carousels[cmd.sheetId]?.[cmd.figureId]) return "InvalidFigureId";
|
|
51054
|
+
for (const item of cmd.definition.items) if (item.type === "chart" && !this.getters.getChart(item.chartId)) return "ChartDoesNotExist";
|
|
51030
51055
|
return "Success";
|
|
51031
51056
|
}
|
|
51032
51057
|
return "Success";
|
|
@@ -51131,6 +51156,7 @@ set(value) {
|
|
|
51131
51156
|
baseFormulaWasTransformed = false;
|
|
51132
51157
|
rangeToStringOptions = { doNotSimplifyRange: true };
|
|
51133
51158
|
baseNumber = void 0;
|
|
51159
|
+
baseNumberFormat = void 0;
|
|
51134
51160
|
constructor(getters) {
|
|
51135
51161
|
this.getters = getters;
|
|
51136
51162
|
}
|
|
@@ -51165,6 +51191,11 @@ set(value) {
|
|
|
51165
51191
|
this.baseFormulaWasTransformed = false;
|
|
51166
51192
|
}
|
|
51167
51193
|
}
|
|
51194
|
+
/** Reset the base number literal chain, so the next literal number cannot be squished as an offset of it */
|
|
51195
|
+
resetBaseNumber() {
|
|
51196
|
+
this.baseNumber = void 0;
|
|
51197
|
+
this.baseNumberFormat = void 0;
|
|
51198
|
+
}
|
|
51168
51199
|
/**
|
|
51169
51200
|
* Takes a cell and squish their formulas against the previous one (in the previous call).
|
|
51170
51201
|
* We should call this method for each cell in the sheet, in order from top to bottom, then from left to right (all cells of a columns, for each columns left to right).
|
|
@@ -51203,8 +51234,9 @@ set(value) {
|
|
|
51203
51234
|
if (typeof cell.parsedValue === "number" && cell.parsedValue % 1 === 0) {
|
|
51204
51235
|
this.resetBaseFormula();
|
|
51205
51236
|
const numberValue = cell.parsedValue;
|
|
51206
|
-
if (this.baseNumber === void 0) {
|
|
51237
|
+
if (this.baseNumber === void 0 || cell.format !== this.baseNumberFormat) {
|
|
51207
51238
|
this.baseNumber = numberValue;
|
|
51239
|
+
this.baseNumberFormat = cell.format;
|
|
51208
51240
|
return cell.content;
|
|
51209
51241
|
}
|
|
51210
51242
|
const numberOffset = numberValue - this.baseNumber;
|
|
@@ -51215,7 +51247,7 @@ set(value) {
|
|
|
51215
51247
|
}
|
|
51216
51248
|
}
|
|
51217
51249
|
this.resetBaseFormula();
|
|
51218
|
-
this.
|
|
51250
|
+
this.resetBaseNumber();
|
|
51219
51251
|
return cell.content;
|
|
51220
51252
|
}
|
|
51221
51253
|
squishCommand(command) {
|
|
@@ -51224,6 +51256,8 @@ set(value) {
|
|
|
51224
51256
|
const squished = this.squish(cell, command.sheetId);
|
|
51225
51257
|
return typeof squished === "string" ? command.content : squished;
|
|
51226
51258
|
}
|
|
51259
|
+
this.resetBaseFormula();
|
|
51260
|
+
this.resetBaseNumber();
|
|
51227
51261
|
return command.content;
|
|
51228
51262
|
}
|
|
51229
51263
|
/**
|
|
@@ -51377,8 +51411,10 @@ set(value) {
|
|
|
51377
51411
|
continue;
|
|
51378
51412
|
}
|
|
51379
51413
|
const current = command.content;
|
|
51380
|
-
if (current === void 0 || current === null || current === "")
|
|
51381
|
-
|
|
51414
|
+
if (current === void 0 || current === null || current === "") {
|
|
51415
|
+
this.rebase();
|
|
51416
|
+
strategy = "NOT_A_FORMULA";
|
|
51417
|
+
} else strategy = this.chooseStrategy(current, strategy, command.sheetId, getters);
|
|
51382
51418
|
let targetPositions;
|
|
51383
51419
|
if (command.type === "SQUISHED_UPDATE_CELL" && "targetRange" in command) {
|
|
51384
51420
|
const [start, end] = command.targetRange.split(":");
|
|
@@ -51423,8 +51459,11 @@ set(value) {
|
|
|
51423
51459
|
let strategy;
|
|
51424
51460
|
for (const { key } of keys) {
|
|
51425
51461
|
const current = squished[key];
|
|
51426
|
-
if (current === void 0 || current === null || current === "")
|
|
51427
|
-
|
|
51462
|
+
if (current === void 0 || current === null || current === "") {
|
|
51463
|
+
this.rebase();
|
|
51464
|
+
strategy = void 0;
|
|
51465
|
+
continue;
|
|
51466
|
+
} else strategy = this.chooseStrategy(current, strategy, sheetId, getters);
|
|
51428
51467
|
const parts = key.split(":");
|
|
51429
51468
|
const targetPositions = parts.length === 1 ? expandXc(key) : expandRange(parts[0], parts[1]);
|
|
51430
51469
|
yield* this.applyStrategy(strategy, targetPositions, current, sheetId, getters);
|
|
@@ -51470,6 +51509,9 @@ set(value) {
|
|
|
51470
51509
|
case "FIRST_OFFSET":
|
|
51471
51510
|
strategy = "COMBINE_OFFSET";
|
|
51472
51511
|
break;
|
|
51512
|
+
case "COMBINE_OFFSET":
|
|
51513
|
+
case "OFFSET_NUMBER": break;
|
|
51514
|
+
default: throw new Error(`Cannot unsquish an offset without a preceding base cell: ${strategy}`);
|
|
51473
51515
|
}
|
|
51474
51516
|
}
|
|
51475
51517
|
return strategy;
|
|
@@ -56537,6 +56579,7 @@ set(value) {
|
|
|
56537
56579
|
}
|
|
56538
56580
|
getCellsDependingOn(ranges, visited = new RangeSet()) {
|
|
56539
56581
|
visited = visited.copy();
|
|
56582
|
+
let initialRangesToRemove = visited.copy();
|
|
56540
56583
|
const queue = Array.from(ranges).reverse();
|
|
56541
56584
|
while (queue.length > 0) {
|
|
56542
56585
|
const range = queue.pop();
|
|
@@ -56552,8 +56595,9 @@ set(value) {
|
|
|
56552
56595
|
for (const interval of overlappingIntervals) impactedRanges.add(interval.dependents);
|
|
56553
56596
|
}
|
|
56554
56597
|
queue.push(...impactedRanges.difference(visited));
|
|
56598
|
+
initialRangesToRemove = initialRangesToRemove.difference(impactedRanges);
|
|
56555
56599
|
}
|
|
56556
|
-
for (const range of
|
|
56600
|
+
for (const range of initialRangesToRemove) visited.delete(range);
|
|
56557
56601
|
return visited;
|
|
56558
56602
|
}
|
|
56559
56603
|
getOrCreateIntervalTree(sheetId, col) {
|
|
@@ -62148,6 +62192,7 @@ set(value) {
|
|
|
62148
62192
|
transportService;
|
|
62149
62193
|
serverRevisionId;
|
|
62150
62194
|
commandSquisher;
|
|
62195
|
+
shouldVerifySquish;
|
|
62151
62196
|
/**
|
|
62152
62197
|
* Positions of the others client.
|
|
62153
62198
|
*/
|
|
@@ -62181,13 +62226,15 @@ set(value) {
|
|
|
62181
62226
|
* between all connected clients
|
|
62182
62227
|
* @param serverRevisionId
|
|
62183
62228
|
* @param commandSquisher used to squish and unsquish commands to reduce the size of messages sent to the server
|
|
62229
|
+
* @param shouldVerifySquish either the commands should be unsquished and verified before being sent to the server
|
|
62184
62230
|
*/
|
|
62185
|
-
constructor(revisions, transportService, serverRevisionId = DEFAULT_REVISION_ID, commandSquisher) {
|
|
62231
|
+
constructor(revisions, transportService, serverRevisionId = DEFAULT_REVISION_ID, commandSquisher, shouldVerifySquish = true) {
|
|
62186
62232
|
super();
|
|
62187
62233
|
this.revisions = revisions;
|
|
62188
62234
|
this.transportService = transportService;
|
|
62189
62235
|
this.serverRevisionId = serverRevisionId;
|
|
62190
62236
|
this.commandSquisher = commandSquisher;
|
|
62237
|
+
this.shouldVerifySquish = shouldVerifySquish;
|
|
62191
62238
|
}
|
|
62192
62239
|
canApplyOptimisticUpdate() {
|
|
62193
62240
|
return !this.waitingUndoRedoAck;
|
|
@@ -62443,10 +62490,20 @@ set(value) {
|
|
|
62443
62490
|
this.revisions.rebase(revision.id);
|
|
62444
62491
|
revision = this.revisions.get(message.nextRevisionId);
|
|
62445
62492
|
}
|
|
62446
|
-
|
|
62493
|
+
const squishedCommands = this.commandSquisher.squish(revision.commands);
|
|
62494
|
+
if (!squishedCommands.some((x) => x.type === "SQUISHED_UPDATE_CELL")) message = {
|
|
62447
62495
|
...message,
|
|
62448
62496
|
commands: revision.commands
|
|
62449
62497
|
};
|
|
62498
|
+
else if (this.shouldVerifySquish && !deepEquals(revision.commands, this.commandSquisher.unsquish(squishedCommands))) message = {
|
|
62499
|
+
...message,
|
|
62500
|
+
commands: revision.commands,
|
|
62501
|
+
squishedFailed: true
|
|
62502
|
+
};
|
|
62503
|
+
else message = {
|
|
62504
|
+
...message,
|
|
62505
|
+
commands: squishedCommands
|
|
62506
|
+
};
|
|
62450
62507
|
}
|
|
62451
62508
|
if (this.isReplayingInitialRevisions) throw new Error(`Trying to send a new revision while replaying initial revision. This can lead to endless dispatches every time the spreadsheet is open.
|
|
62452
62509
|
${JSON.stringify(message)}`);
|
|
@@ -69679,13 +69736,12 @@ set(value) {
|
|
|
69679
69736
|
return this.env.model.getters.getColDimensions(sheetId, right).end;
|
|
69680
69737
|
}
|
|
69681
69738
|
get dashboardStyle() {
|
|
69682
|
-
|
|
69683
|
-
if (this.env.model.getters.getActiveSheet().backgroundColor) style["background-color"] = "transparent";
|
|
69684
|
-
return cssPropertiesToCss(style);
|
|
69739
|
+
return cssPropertiesToCss({ zoom: `${this.env.model.getters.getViewportZoomLevel()}` });
|
|
69685
69740
|
}
|
|
69686
69741
|
get backgroundStyle() {
|
|
69687
69742
|
const sheet = this.env.model.getters.getActiveSheet();
|
|
69688
|
-
|
|
69743
|
+
const theme = this.env.model.getters.getSpreadsheetTheme();
|
|
69744
|
+
return cssPropertiesToCss({ "background-color": sheet.backgroundColor || theme.backgroundColor });
|
|
69689
69745
|
}
|
|
69690
69746
|
};
|
|
69691
69747
|
|
|
@@ -70217,7 +70273,7 @@ set(value) {
|
|
|
70217
70273
|
if (!this.getters.isDashboard()) {
|
|
70218
70274
|
ctx.strokeStyle = GRAY_400;
|
|
70219
70275
|
ctx.lineWidth = 1;
|
|
70220
|
-
ctx.strokeRect(x, y, figure.width, figure.height);
|
|
70276
|
+
ctx.strokeRect(x + .5, y + .5, figure.width - 1, figure.height - 1);
|
|
70221
70277
|
}
|
|
70222
70278
|
}
|
|
70223
70279
|
}
|
|
@@ -79097,14 +79153,13 @@ set(value) {
|
|
|
79097
79153
|
},
|
|
79098
79154
|
getDefinitionForExcel(getters, definition, { dataSets, labelRange }) {
|
|
79099
79155
|
if (definition.dataSource.type !== "range") return;
|
|
79100
|
-
const
|
|
79101
|
-
const { dataSetsValues } = chartData;
|
|
79156
|
+
const { dataSetsValues } = getPyramidChartData(definition, getChartData(getters, definition.dataSource), getters);
|
|
79102
79157
|
const maxValue = Math.max(...dataSetsValues.map((dataSet) => Math.max(...dataSet.data.map((cell) => isNumberResult(cell) ? Math.abs(cell.value) : -Infinity))));
|
|
79103
79158
|
return {
|
|
79104
79159
|
...definition,
|
|
79105
79160
|
horizontal: true,
|
|
79106
|
-
backgroundColor: toXlsxHexColor(
|
|
79107
|
-
fontColor: toXlsxHexColor(chartFontColor(
|
|
79161
|
+
backgroundColor: toXlsxHexColor(definition.background || "#FFFFFF"),
|
|
79162
|
+
fontColor: toXlsxHexColor(chartFontColor(definition.background)),
|
|
79108
79163
|
dataSets,
|
|
79109
79164
|
labelRange,
|
|
79110
79165
|
verticalAxis: getDefinedAxis(definition),
|
|
@@ -87759,8 +87814,8 @@ exports.stores = stores;
|
|
|
87759
87814
|
exports.tokenColors = tokenColors;
|
|
87760
87815
|
exports.tokenize = tokenize;
|
|
87761
87816
|
|
|
87762
|
-
__info__.version = "19.4.
|
|
87763
|
-
__info__.date = "2026-
|
|
87764
|
-
__info__.hash = "
|
|
87817
|
+
__info__.version = "19.4.11";
|
|
87818
|
+
__info__.date = "2026-09-04T07:50:39.272Z";
|
|
87819
|
+
__info__.hash = "7660254";
|
|
87765
87820
|
|
|
87766
87821
|
})(this.o_spreadsheet = this.o_spreadsheet || {}, owl);
|