@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.
@@ -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.9
6
- * @date 2026-08-21T15:33:39.385Z
7
- * @hash b48dbb3
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
- const color = point.options.backgroundColor ?? "#ffffff";
10312
- if (hexToHSLA(toHex(color)).a === 1) ctx.fillStyle = chartFontColor(color);
10313
- else ctx.fillStyle = "#000000";
10314
- const valueToDisplay = options.callback(Number(value), dataset, i);
10315
- ctx.fillText(valueToDisplay, xPosition, yPosition);
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
- if (selection.start !== selection.end) return;
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.debouncedHover(tokenIndex, hoveredRect);
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
- this.state.range = ranges[0];
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.baseNumber = void 0;
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 === "") strategy = "NOT_A_FORMULA";
51381
- else strategy = this.chooseStrategy(current, strategy, command.sheetId, getters);
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 === "") continue;
51427
- else strategy = this.chooseStrategy(current, strategy, sheetId, getters);
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 ranges) visited.delete(range);
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
- message = {
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
- const style = { zoom: `${this.env.model.getters.getViewportZoomLevel()}` };
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
- return sheet.backgroundColor ? cssPropertiesToCss({ "background-color": sheet.backgroundColor }) : "";
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 chartData = getPyramidChartData(definition, getChartData(getters, definition.dataSource), getters);
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(chartData.background || "#FFFFFF"),
79107
- fontColor: toXlsxHexColor(chartFontColor(chartData.background)),
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.9";
87763
- __info__.date = "2026-08-21T15:33:39.385Z";
87764
- __info__.hash = "b48dbb3";
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);