@odoo/o-spreadsheet 18.2.12 → 18.2.13
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 +158 -135
- package/dist/o-spreadsheet.d.ts +46 -45
- package/dist/o-spreadsheet.esm.js +158 -135
- package/dist/o-spreadsheet.iife.js +158 -135
- package/dist/o-spreadsheet.iife.min.js +385 -385
- package/dist/o_spreadsheet.xml +4 -3
- 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 18.2.
|
|
6
|
-
* @date 2025-05-
|
|
7
|
-
* @hash
|
|
5
|
+
* @version 18.2.13
|
|
6
|
+
* @date 2025-05-20T05:57:00.985Z
|
|
7
|
+
* @hash 9872529
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
'use strict';
|
|
@@ -1619,18 +1619,53 @@ function lettersToNumber(letters) {
|
|
|
1619
1619
|
let result = 0;
|
|
1620
1620
|
const l = letters.length;
|
|
1621
1621
|
for (let i = 0; i < l; i++) {
|
|
1622
|
-
const
|
|
1623
|
-
const colIndex = charCode >= 65 && charCode <= 90 ? charCode - 64 : charCode - 96;
|
|
1622
|
+
const colIndex = charToNumber(letters[i]);
|
|
1624
1623
|
result = result * 26 + colIndex;
|
|
1625
1624
|
}
|
|
1626
1625
|
return result - 1;
|
|
1627
1626
|
}
|
|
1627
|
+
function charToNumber(char) {
|
|
1628
|
+
const charCode = char.charCodeAt(0);
|
|
1629
|
+
return charCode >= 65 && charCode <= 90 ? charCode - 64 : charCode - 96;
|
|
1630
|
+
}
|
|
1628
1631
|
function isCharALetter(char) {
|
|
1629
1632
|
return (char >= "A" && char <= "Z") || (char >= "a" && char <= "z");
|
|
1630
1633
|
}
|
|
1631
1634
|
function isCharADigit(char) {
|
|
1632
1635
|
return char >= "0" && char <= "9";
|
|
1633
1636
|
}
|
|
1637
|
+
// we limit the max column to 3 letters and max row to 7 digits for performance reasons
|
|
1638
|
+
const MAX_COL = lettersToNumber("ZZZ");
|
|
1639
|
+
const MAX_ROW = 9999998;
|
|
1640
|
+
function consumeSpaces(chars) {
|
|
1641
|
+
while (chars.current === " ") {
|
|
1642
|
+
chars.advanceBy(1);
|
|
1643
|
+
}
|
|
1644
|
+
}
|
|
1645
|
+
function consumeLetters(chars) {
|
|
1646
|
+
if (chars.current === "$")
|
|
1647
|
+
chars.advanceBy(1);
|
|
1648
|
+
if (!chars.current || !isCharALetter(chars.current)) {
|
|
1649
|
+
return -1;
|
|
1650
|
+
}
|
|
1651
|
+
let colCoordinate = 0;
|
|
1652
|
+
while (chars.current && isCharALetter(chars.current)) {
|
|
1653
|
+
colCoordinate = colCoordinate * 26 + charToNumber(chars.shift());
|
|
1654
|
+
}
|
|
1655
|
+
return colCoordinate;
|
|
1656
|
+
}
|
|
1657
|
+
function consumeDigits(chars) {
|
|
1658
|
+
if (chars.current === "$")
|
|
1659
|
+
chars.advanceBy(1);
|
|
1660
|
+
if (!chars.current || !isCharADigit(chars.current)) {
|
|
1661
|
+
return -1;
|
|
1662
|
+
}
|
|
1663
|
+
let num = 0;
|
|
1664
|
+
while (chars.current && isCharADigit(chars.current)) {
|
|
1665
|
+
num = num * 10 + Number(chars.shift());
|
|
1666
|
+
}
|
|
1667
|
+
return num;
|
|
1668
|
+
}
|
|
1634
1669
|
/**
|
|
1635
1670
|
* Convert a "XC" coordinate to cartesian coordinates.
|
|
1636
1671
|
*
|
|
@@ -1641,33 +1676,17 @@ function isCharADigit(char) {
|
|
|
1641
1676
|
* Note: it also accepts lowercase coordinates, but not fixed references
|
|
1642
1677
|
*/
|
|
1643
1678
|
function toCartesian(xc) {
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
// Process letter part
|
|
1649
|
-
if (xc[i] === "$")
|
|
1650
|
-
i++;
|
|
1651
|
-
while (i < xc.length && isCharALetter(xc[i])) {
|
|
1652
|
-
letterPart += xc[i++];
|
|
1653
|
-
}
|
|
1654
|
-
if (letterPart.length === 0 || letterPart.length > 3) {
|
|
1655
|
-
// limit to max 3 letters for performance reasons
|
|
1679
|
+
const chars = new TokenizingChars(xc);
|
|
1680
|
+
consumeSpaces(chars);
|
|
1681
|
+
const letterPart = consumeLetters(chars);
|
|
1682
|
+
if (letterPart === -1 || !chars.current) {
|
|
1656
1683
|
throw new Error(`Invalid cell description: ${xc}`);
|
|
1657
1684
|
}
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
}
|
|
1664
|
-
if (i !== xc.length || numberPart.length === 0 || numberPart.length > 7) {
|
|
1665
|
-
// limit to max 7 numbers for performance reasons
|
|
1666
|
-
throw new Error(`Invalid cell description: ${xc}`);
|
|
1667
|
-
}
|
|
1668
|
-
const col = lettersToNumber(letterPart);
|
|
1669
|
-
const row = Number(numberPart) - 1;
|
|
1670
|
-
if (isNaN(row)) {
|
|
1685
|
+
const num = consumeDigits(chars);
|
|
1686
|
+
consumeSpaces(chars);
|
|
1687
|
+
const col = letterPart - 1;
|
|
1688
|
+
const row = num - 1;
|
|
1689
|
+
if (!chars.isOver() || col > MAX_COL || row > MAX_ROW) {
|
|
1671
1690
|
throw new Error(`Invalid cell description: ${xc}`);
|
|
1672
1691
|
}
|
|
1673
1692
|
return { col, row };
|
|
@@ -2079,67 +2098,6 @@ class LazyTranslatedString extends String {
|
|
|
2079
2098
|
}
|
|
2080
2099
|
}
|
|
2081
2100
|
|
|
2082
|
-
/** Reference of a cell (eg. A1, $B$5) */
|
|
2083
|
-
const cellReference = new RegExp(/\$?([A-Z]{1,3})\$?([0-9]{1,7})/, "i");
|
|
2084
|
-
// Same as above, but matches the exact string (nothing before or after)
|
|
2085
|
-
const singleCellReference = new RegExp(/^\$?([A-Z]{1,3})\$?([0-9]{1,7})$/, "i");
|
|
2086
|
-
/** Reference of a column header (eg. A, AB, $A) */
|
|
2087
|
-
const colHeader = new RegExp(/^\$?([A-Z]{1,3})+$/, "i");
|
|
2088
|
-
/** Reference of a row header (eg. 1, $1) */
|
|
2089
|
-
const rowHeader = new RegExp(/^\$?([0-9]{1,7})+$/, "i");
|
|
2090
|
-
/** Reference of a column (eg. A, $CA, Sheet1!B) */
|
|
2091
|
-
const colReference = new RegExp(/^\s*('.+'!|[^']+!)?\$?([A-Z]{1,3})$/, "i");
|
|
2092
|
-
/** Reference of a row (eg. 1, 59, Sheet1!9) */
|
|
2093
|
-
const rowReference = new RegExp(/^\s*('.+'!|[^']+!)?\$?([0-9]{1,7})$/, "i");
|
|
2094
|
-
/** Reference of a normal range or a full row range (eg. A1:B1, 1:$5, $A2:5) */
|
|
2095
|
-
const fullRowXc = /(\$?[A-Z]{1,3})?\$?[0-9]{1,7}\s*:\s*(\$?[A-Z]{1,3})?\$?[0-9]{1,7}\s*/i;
|
|
2096
|
-
/** Reference of a normal range or a column row range (eg. A1:B1, A:$B, $A1:C) */
|
|
2097
|
-
const fullColXc = /\$?[A-Z]{1,3}(\$?[0-9]{1,7})?\s*:\s*\$?[A-Z]{1,3}(\$?[0-9]{1,7})?\s*/i;
|
|
2098
|
-
/** Reference of a cell or a range, it can be a bounded range, a full row or a full column */
|
|
2099
|
-
const rangeReference = new RegExp(/^\s*('.+'!|[^']+!)?/.source +
|
|
2100
|
-
"(" +
|
|
2101
|
-
[cellReference.source, fullRowXc.source, fullColXc.source].join("|") +
|
|
2102
|
-
")" +
|
|
2103
|
-
/$/.source, "i");
|
|
2104
|
-
/**
|
|
2105
|
-
* Return true if the given xc is the reference of a column (e.g. A or AC or Sheet1!A)
|
|
2106
|
-
*/
|
|
2107
|
-
function isColReference(xc) {
|
|
2108
|
-
return colReference.test(xc);
|
|
2109
|
-
}
|
|
2110
|
-
/**
|
|
2111
|
-
* Return true if the given xc is the reference of a column (e.g. 1 or Sheet1!1)
|
|
2112
|
-
*/
|
|
2113
|
-
function isRowReference(xc) {
|
|
2114
|
-
return rowReference.test(xc);
|
|
2115
|
-
}
|
|
2116
|
-
function isColHeader(str) {
|
|
2117
|
-
return colHeader.test(str);
|
|
2118
|
-
}
|
|
2119
|
-
function isRowHeader(str) {
|
|
2120
|
-
return rowHeader.test(str);
|
|
2121
|
-
}
|
|
2122
|
-
/**
|
|
2123
|
-
* Return true if the given xc is the reference of a single cell,
|
|
2124
|
-
* without any specified sheet (e.g. A1)
|
|
2125
|
-
*/
|
|
2126
|
-
function isSingleCellReference(xc) {
|
|
2127
|
-
return singleCellReference.test(xc);
|
|
2128
|
-
}
|
|
2129
|
-
function splitReference(ref) {
|
|
2130
|
-
if (!ref.includes("!")) {
|
|
2131
|
-
return { xc: ref };
|
|
2132
|
-
}
|
|
2133
|
-
const parts = ref.split("!");
|
|
2134
|
-
const xc = parts.pop();
|
|
2135
|
-
const sheetName = getUnquotedSheetName(parts.join("!")) || undefined;
|
|
2136
|
-
return { sheetName, xc };
|
|
2137
|
-
}
|
|
2138
|
-
/** Return a reference SheetName!xc from the given arguments */
|
|
2139
|
-
function getFullReference(sheetName, xc) {
|
|
2140
|
-
return sheetName !== undefined ? `${getCanonicalSymbolName(sheetName)}!${xc}` : xc;
|
|
2141
|
-
}
|
|
2142
|
-
|
|
2143
2101
|
/**
|
|
2144
2102
|
* Convert from a cartesian reference to a Zone
|
|
2145
2103
|
* The range boundaries will be kept in the same order as the
|
|
@@ -2157,63 +2115,55 @@ function getFullReference(sheetName, xc) {
|
|
|
2157
2115
|
*
|
|
2158
2116
|
*/
|
|
2159
2117
|
function toZoneWithoutBoundaryChanges(xc) {
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
if (
|
|
2164
|
-
|
|
2165
|
-
}
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
if (xc.includes(":")) {
|
|
2169
|
-
[firstRangePart, secondRangePart] = xc.split(":");
|
|
2170
|
-
firstRangePart = firstRangePart.trim();
|
|
2171
|
-
secondRangePart = secondRangePart.trim();
|
|
2172
|
-
}
|
|
2173
|
-
else {
|
|
2174
|
-
firstRangePart = xc.trim();
|
|
2175
|
-
}
|
|
2118
|
+
const chars = new TokenizingChars(xc);
|
|
2119
|
+
consumeSpaces(chars);
|
|
2120
|
+
const sheetSeparatorIndex = xc.indexOf("!");
|
|
2121
|
+
if (sheetSeparatorIndex !== -1) {
|
|
2122
|
+
chars.advanceBy(sheetSeparatorIndex + 1);
|
|
2123
|
+
}
|
|
2124
|
+
const leftLetters = consumeLetters(chars);
|
|
2125
|
+
const leftNumbers = consumeDigits(chars);
|
|
2176
2126
|
let top, bottom, left, right;
|
|
2177
2127
|
let fullCol = false;
|
|
2178
2128
|
let fullRow = false;
|
|
2179
2129
|
let hasHeader = false;
|
|
2180
|
-
if (
|
|
2181
|
-
left = right =
|
|
2130
|
+
if (leftNumbers === -1) {
|
|
2131
|
+
left = right = leftLetters - 1;
|
|
2182
2132
|
top = bottom = 0;
|
|
2183
2133
|
fullCol = true;
|
|
2184
2134
|
}
|
|
2185
|
-
else if (
|
|
2186
|
-
top = bottom =
|
|
2135
|
+
else if (leftLetters === -1) {
|
|
2136
|
+
top = bottom = leftNumbers - 1;
|
|
2187
2137
|
left = right = 0;
|
|
2188
2138
|
fullRow = true;
|
|
2189
2139
|
}
|
|
2190
2140
|
else {
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
top = bottom = c.row;
|
|
2141
|
+
left = right = leftLetters - 1;
|
|
2142
|
+
top = bottom = leftNumbers - 1;
|
|
2194
2143
|
hasHeader = true;
|
|
2195
2144
|
}
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2145
|
+
consumeSpaces(chars);
|
|
2146
|
+
if (chars.current === ":") {
|
|
2147
|
+
chars.advanceBy(1);
|
|
2148
|
+
consumeSpaces(chars);
|
|
2149
|
+
const rightLetters = consumeLetters(chars);
|
|
2150
|
+
const rightNumbers = consumeDigits(chars);
|
|
2151
|
+
if (rightNumbers === -1) {
|
|
2152
|
+
right = rightLetters - 1;
|
|
2199
2153
|
fullCol = true;
|
|
2200
2154
|
}
|
|
2201
|
-
else if (
|
|
2202
|
-
bottom =
|
|
2155
|
+
else if (rightLetters === -1) {
|
|
2156
|
+
bottom = rightNumbers - 1;
|
|
2203
2157
|
fullRow = true;
|
|
2204
2158
|
}
|
|
2205
2159
|
else {
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
bottom = c.row;
|
|
2160
|
+
right = rightLetters - 1;
|
|
2161
|
+
bottom = rightNumbers - 1;
|
|
2209
2162
|
top = fullCol ? bottom : top;
|
|
2210
2163
|
left = fullRow ? right : left;
|
|
2211
2164
|
hasHeader = true;
|
|
2212
2165
|
}
|
|
2213
2166
|
}
|
|
2214
|
-
if (fullCol && fullRow) {
|
|
2215
|
-
throw new Error("Wrong zone xc. The zone cannot be at the same time a full column and a full row");
|
|
2216
|
-
}
|
|
2217
2167
|
const zone = {
|
|
2218
2168
|
top,
|
|
2219
2169
|
left,
|
|
@@ -2242,7 +2192,16 @@ function toZoneWithoutBoundaryChanges(xc) {
|
|
|
2242
2192
|
*/
|
|
2243
2193
|
function toUnboundedZone(xc) {
|
|
2244
2194
|
const zone = toZoneWithoutBoundaryChanges(xc);
|
|
2245
|
-
|
|
2195
|
+
const orderedZone = reorderZone(zone);
|
|
2196
|
+
const bottom = orderedZone.bottom;
|
|
2197
|
+
const right = orderedZone.right;
|
|
2198
|
+
if ((bottom !== undefined && bottom > MAX_ROW) || (right !== undefined && right > MAX_COL)) {
|
|
2199
|
+
throw new Error(`Range string out of bounds: ${xc}`); // limit the size of the zone for performance
|
|
2200
|
+
}
|
|
2201
|
+
if (bottom === undefined && right === undefined) {
|
|
2202
|
+
throw new Error("Wrong zone xc. The zone cannot be at the same time a full column and a full row");
|
|
2203
|
+
}
|
|
2204
|
+
return orderedZone;
|
|
2246
2205
|
}
|
|
2247
2206
|
/**
|
|
2248
2207
|
* Convert from a cartesian reference to a Zone.
|
|
@@ -5976,6 +5935,67 @@ function scrollDelay(value) {
|
|
|
5976
5935
|
return MIN_DELAY + (MAX_DELAY - MIN_DELAY) * Math.exp(-ACCELERATION * (value - 1));
|
|
5977
5936
|
}
|
|
5978
5937
|
|
|
5938
|
+
/** Reference of a cell (eg. A1, $B$5) */
|
|
5939
|
+
const cellReference = new RegExp(/\$?([A-Z]{1,3})\$?([0-9]{1,7})/, "i");
|
|
5940
|
+
// Same as above, but matches the exact string (nothing before or after)
|
|
5941
|
+
const singleCellReference = new RegExp(/^\$?([A-Z]{1,3})\$?([0-9]{1,7})$/, "i");
|
|
5942
|
+
/** Reference of a column header (eg. A, AB, $A) */
|
|
5943
|
+
const colHeader = new RegExp(/^\$?([A-Z]{1,3})+$/, "i");
|
|
5944
|
+
/** Reference of a row header (eg. 1, $1) */
|
|
5945
|
+
const rowHeader = new RegExp(/^\$?([0-9]{1,7})+$/, "i");
|
|
5946
|
+
/** Reference of a column (eg. A, $CA, Sheet1!B) */
|
|
5947
|
+
const colReference = new RegExp(/^\s*('.+'!|[^']+!)?\$?([A-Z]{1,3})$/, "i");
|
|
5948
|
+
/** Reference of a row (eg. 1, 59, Sheet1!9) */
|
|
5949
|
+
const rowReference = new RegExp(/^\s*('.+'!|[^']+!)?\$?([0-9]{1,7})$/, "i");
|
|
5950
|
+
/** Reference of a normal range or a full row range (eg. A1:B1, 1:$5, $A2:5) */
|
|
5951
|
+
const fullRowXc = /(\$?[A-Z]{1,3})?\$?[0-9]{1,7}\s*:\s*(\$?[A-Z]{1,3})?\$?[0-9]{1,7}\s*/i;
|
|
5952
|
+
/** Reference of a normal range or a column row range (eg. A1:B1, A:$B, $A1:C) */
|
|
5953
|
+
const fullColXc = /\$?[A-Z]{1,3}(\$?[0-9]{1,7})?\s*:\s*\$?[A-Z]{1,3}(\$?[0-9]{1,7})?\s*/i;
|
|
5954
|
+
/** Reference of a cell or a range, it can be a bounded range, a full row or a full column */
|
|
5955
|
+
const rangeReference = new RegExp(/^\s*('.+'!|[^']+!)?/.source +
|
|
5956
|
+
"(" +
|
|
5957
|
+
[cellReference.source, fullRowXc.source, fullColXc.source].join("|") +
|
|
5958
|
+
")" +
|
|
5959
|
+
/$/.source, "i");
|
|
5960
|
+
/**
|
|
5961
|
+
* Return true if the given xc is the reference of a column (e.g. A or AC or Sheet1!A)
|
|
5962
|
+
*/
|
|
5963
|
+
function isColReference(xc) {
|
|
5964
|
+
return colReference.test(xc);
|
|
5965
|
+
}
|
|
5966
|
+
/**
|
|
5967
|
+
* Return true if the given xc is the reference of a column (e.g. 1 or Sheet1!1)
|
|
5968
|
+
*/
|
|
5969
|
+
function isRowReference(xc) {
|
|
5970
|
+
return rowReference.test(xc);
|
|
5971
|
+
}
|
|
5972
|
+
function isColHeader(str) {
|
|
5973
|
+
return colHeader.test(str);
|
|
5974
|
+
}
|
|
5975
|
+
function isRowHeader(str) {
|
|
5976
|
+
return rowHeader.test(str);
|
|
5977
|
+
}
|
|
5978
|
+
/**
|
|
5979
|
+
* Return true if the given xc is the reference of a single cell,
|
|
5980
|
+
* without any specified sheet (e.g. A1)
|
|
5981
|
+
*/
|
|
5982
|
+
function isSingleCellReference(xc) {
|
|
5983
|
+
return singleCellReference.test(xc);
|
|
5984
|
+
}
|
|
5985
|
+
function splitReference(ref) {
|
|
5986
|
+
if (!ref.includes("!")) {
|
|
5987
|
+
return { xc: ref };
|
|
5988
|
+
}
|
|
5989
|
+
const parts = ref.split("!");
|
|
5990
|
+
const xc = parts.pop();
|
|
5991
|
+
const sheetName = getUnquotedSheetName(parts.join("!")) || undefined;
|
|
5992
|
+
return { sheetName, xc };
|
|
5993
|
+
}
|
|
5994
|
+
/** Return a reference SheetName!xc from the given arguments */
|
|
5995
|
+
function getFullReference(sheetName, xc) {
|
|
5996
|
+
return sheetName !== undefined ? `${getCanonicalSymbolName(sheetName)}!${xc}` : xc;
|
|
5997
|
+
}
|
|
5998
|
+
|
|
5979
5999
|
class RangeImpl {
|
|
5980
6000
|
getSheetSize;
|
|
5981
6001
|
_zone;
|
|
@@ -41159,12 +41179,13 @@ class StandaloneComposerStore extends AbstractComposerStore {
|
|
|
41159
41179
|
return res;
|
|
41160
41180
|
}
|
|
41161
41181
|
getComposerContent() {
|
|
41182
|
+
let content = this._currentContent;
|
|
41162
41183
|
if (this.editionMode === "inactive") {
|
|
41163
41184
|
// References in the content might not be linked to the current active sheet
|
|
41164
41185
|
// We here force the sheet name prefix for all references that are not in
|
|
41165
41186
|
// the current active sheet
|
|
41166
41187
|
const defaultRangeSheetId = this.args().defaultRangeSheetId;
|
|
41167
|
-
|
|
41188
|
+
content = rangeTokenize(this.args().content)
|
|
41168
41189
|
.map((token) => {
|
|
41169
41190
|
if (token.type === "REFERENCE") {
|
|
41170
41191
|
const range = this.getters.getRangeFromSheetXC(defaultRangeSheetId, token.value);
|
|
@@ -41174,7 +41195,7 @@ class StandaloneComposerStore extends AbstractComposerStore {
|
|
|
41174
41195
|
})
|
|
41175
41196
|
.join("");
|
|
41176
41197
|
}
|
|
41177
|
-
return this.
|
|
41198
|
+
return localizeContent(content, this.getters.getLocale());
|
|
41178
41199
|
}
|
|
41179
41200
|
stopEdition() {
|
|
41180
41201
|
this._stopEdition();
|
|
@@ -45449,6 +45470,9 @@ class PivotMeasureEditor extends owl.Component {
|
|
|
45449
45470
|
}
|
|
45450
45471
|
return undefined;
|
|
45451
45472
|
}
|
|
45473
|
+
get isCalculatedMeasureInvalid() {
|
|
45474
|
+
return this.env.model.getters.getMeasureCompiledFormula(this.props.measure).isBadExpression;
|
|
45475
|
+
}
|
|
45452
45476
|
}
|
|
45453
45477
|
|
|
45454
45478
|
css /* scss */ `
|
|
@@ -60951,10 +60975,9 @@ class Evaluator {
|
|
|
60951
60975
|
return this.evaluatedCells.keysForSheet(sheetId);
|
|
60952
60976
|
}
|
|
60953
60977
|
getArrayFormulaSpreadingOn(position) {
|
|
60954
|
-
const
|
|
60955
|
-
|
|
60956
|
-
|
|
60957
|
-
return this.spreadingRelations.isArrayFormula(position) ? position : undefined;
|
|
60978
|
+
const isEmpty = this.getEvaluatedCell(position).type === CellValueType.empty;
|
|
60979
|
+
if (isEmpty) {
|
|
60980
|
+
return undefined;
|
|
60958
60981
|
}
|
|
60959
60982
|
const arrayFormulas = this.spreadingRelations.searchFormulaPositionsSpreadingOn(position.sheetId, positionToZone(position));
|
|
60960
60983
|
return Array.from(arrayFormulas).find((position) => !this.blockedArrayFormulas.has(position));
|
|
@@ -76804,6 +76827,6 @@ exports.tokenColors = tokenColors;
|
|
|
76804
76827
|
exports.tokenize = tokenize;
|
|
76805
76828
|
|
|
76806
76829
|
|
|
76807
|
-
__info__.version = "18.2.
|
|
76808
|
-
__info__.date = "2025-05-
|
|
76809
|
-
__info__.hash = "
|
|
76830
|
+
__info__.version = "18.2.13";
|
|
76831
|
+
__info__.date = "2025-05-20T05:57:00.985Z";
|
|
76832
|
+
__info__.hash = "9872529";
|
package/dist/o-spreadsheet.d.ts
CHANGED
|
@@ -1275,6 +1275,51 @@ declare class ColorGenerator {
|
|
|
1275
1275
|
next(): string;
|
|
1276
1276
|
}
|
|
1277
1277
|
|
|
1278
|
+
interface SearchOptions {
|
|
1279
|
+
matchCase: boolean;
|
|
1280
|
+
exactMatch: boolean;
|
|
1281
|
+
searchFormulas: boolean;
|
|
1282
|
+
searchScope: "allSheets" | "activeSheet" | "specificRange";
|
|
1283
|
+
specificRange?: Range;
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
/**
|
|
1287
|
+
* Deep copy arrays, plain objects and primitive values.
|
|
1288
|
+
* Throws an error for other types such as class instances.
|
|
1289
|
+
* Sparse arrays remain sparse.
|
|
1290
|
+
*/
|
|
1291
|
+
declare function deepCopy<T>(obj: T): T;
|
|
1292
|
+
declare function unquote(string: string, quoteChar?: "'" | '"'): string;
|
|
1293
|
+
/** Replace the excel-excluded characters of a sheetName */
|
|
1294
|
+
declare function sanitizeSheetName(sheetName: string, replacementChar?: string): string;
|
|
1295
|
+
declare function isMarkdownLink(str: string): boolean;
|
|
1296
|
+
/**
|
|
1297
|
+
* Build a markdown link from a label and an url
|
|
1298
|
+
*/
|
|
1299
|
+
declare function markdownLink(label: string, url: string): string;
|
|
1300
|
+
declare function parseMarkdownLink(str: string): {
|
|
1301
|
+
url: string;
|
|
1302
|
+
label: string;
|
|
1303
|
+
};
|
|
1304
|
+
/**
|
|
1305
|
+
* This helper function can be used as a type guard when filtering arrays.
|
|
1306
|
+
* const foo: number[] = [1, 2, undefined, 4].filter(isDefined)
|
|
1307
|
+
*/
|
|
1308
|
+
declare function isDefined<T>(argument: T | undefined): argument is T;
|
|
1309
|
+
/**
|
|
1310
|
+
* Lazy value computed by the provided function.
|
|
1311
|
+
*/
|
|
1312
|
+
declare function lazy<T>(fn: (() => T) | T): Lazy<T>;
|
|
1313
|
+
/**
|
|
1314
|
+
* Compares two objects.
|
|
1315
|
+
*/
|
|
1316
|
+
declare function deepEquals(o1: any, o2: any): boolean;
|
|
1317
|
+
declare function getUniqueText(text: string, texts: string[], options?: {
|
|
1318
|
+
compute?: (text: string, increment: number) => string;
|
|
1319
|
+
start?: number;
|
|
1320
|
+
computeFirstOne?: boolean;
|
|
1321
|
+
}): string;
|
|
1322
|
+
|
|
1278
1323
|
/**
|
|
1279
1324
|
* Convert a (col) number to the corresponding letter.
|
|
1280
1325
|
*
|
|
@@ -1351,51 +1396,6 @@ declare function formatValue(value: CellValue, { format, locale, formatWidth }:
|
|
|
1351
1396
|
}): FormattedValue;
|
|
1352
1397
|
declare function createCurrencyFormat(currency: Partial<Currency>): Format;
|
|
1353
1398
|
|
|
1354
|
-
interface SearchOptions {
|
|
1355
|
-
matchCase: boolean;
|
|
1356
|
-
exactMatch: boolean;
|
|
1357
|
-
searchFormulas: boolean;
|
|
1358
|
-
searchScope: "allSheets" | "activeSheet" | "specificRange";
|
|
1359
|
-
specificRange?: Range;
|
|
1360
|
-
}
|
|
1361
|
-
|
|
1362
|
-
/**
|
|
1363
|
-
* Deep copy arrays, plain objects and primitive values.
|
|
1364
|
-
* Throws an error for other types such as class instances.
|
|
1365
|
-
* Sparse arrays remain sparse.
|
|
1366
|
-
*/
|
|
1367
|
-
declare function deepCopy<T>(obj: T): T;
|
|
1368
|
-
declare function unquote(string: string, quoteChar?: "'" | '"'): string;
|
|
1369
|
-
/** Replace the excel-excluded characters of a sheetName */
|
|
1370
|
-
declare function sanitizeSheetName(sheetName: string, replacementChar?: string): string;
|
|
1371
|
-
declare function isMarkdownLink(str: string): boolean;
|
|
1372
|
-
/**
|
|
1373
|
-
* Build a markdown link from a label and an url
|
|
1374
|
-
*/
|
|
1375
|
-
declare function markdownLink(label: string, url: string): string;
|
|
1376
|
-
declare function parseMarkdownLink(str: string): {
|
|
1377
|
-
url: string;
|
|
1378
|
-
label: string;
|
|
1379
|
-
};
|
|
1380
|
-
/**
|
|
1381
|
-
* This helper function can be used as a type guard when filtering arrays.
|
|
1382
|
-
* const foo: number[] = [1, 2, undefined, 4].filter(isDefined)
|
|
1383
|
-
*/
|
|
1384
|
-
declare function isDefined<T>(argument: T | undefined): argument is T;
|
|
1385
|
-
/**
|
|
1386
|
-
* Lazy value computed by the provided function.
|
|
1387
|
-
*/
|
|
1388
|
-
declare function lazy<T>(fn: (() => T) | T): Lazy<T>;
|
|
1389
|
-
/**
|
|
1390
|
-
* Compares two objects.
|
|
1391
|
-
*/
|
|
1392
|
-
declare function deepEquals(o1: any, o2: any): boolean;
|
|
1393
|
-
declare function getUniqueText(text: string, texts: string[], options?: {
|
|
1394
|
-
compute?: (text: string, increment: number) => string;
|
|
1395
|
-
start?: number;
|
|
1396
|
-
computeFirstOne?: boolean;
|
|
1397
|
-
}): string;
|
|
1398
|
-
|
|
1399
1399
|
/**
|
|
1400
1400
|
* Return true if the argument is a "number string".
|
|
1401
1401
|
*
|
|
@@ -10249,6 +10249,7 @@ declare class PivotMeasureEditor extends Component<Props$i> {
|
|
|
10249
10249
|
toggleMeasureVisibility(): void;
|
|
10250
10250
|
openShowValuesAs(): void;
|
|
10251
10251
|
getColoredSymbolToken(token: Token): Color | undefined;
|
|
10252
|
+
get isCalculatedMeasureInvalid(): boolean;
|
|
10252
10253
|
}
|
|
10253
10254
|
|
|
10254
10255
|
interface Props$h {
|