@rowsncolumns/utils 9.2.35
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/LICENSE.md +100 -0
- package/dist/cjs/array.d.ts +3 -0
- package/dist/cjs/array.d.ts.map +1 -0
- package/dist/cjs/array.js +19 -0
- package/dist/cjs/cell-data-helpers.d.ts +19 -0
- package/dist/cjs/cell-data-helpers.d.ts.map +1 -0
- package/dist/cjs/cell-data-helpers.js +64 -0
- package/dist/cjs/color.d.ts +20 -0
- package/dist/cjs/color.d.ts.map +1 -0
- package/dist/cjs/color.js +168 -0
- package/dist/cjs/colors.d.ts +2 -0
- package/dist/cjs/colors.d.ts.map +1 -0
- package/dist/cjs/colors.js +78 -0
- package/dist/cjs/conditional-format.d.ts +49 -0
- package/dist/cjs/conditional-format.d.ts.map +1 -0
- package/dist/cjs/conditional-format.js +227 -0
- package/dist/cjs/content-hash.d.ts +16 -0
- package/dist/cjs/content-hash.d.ts.map +1 -0
- package/dist/cjs/content-hash.js +72 -0
- package/dist/cjs/data-validation.d.ts +54 -0
- package/dist/cjs/data-validation.d.ts.map +1 -0
- package/dist/cjs/data-validation.js +249 -0
- package/dist/cjs/date.d.ts +15 -0
- package/dist/cjs/date.d.ts.map +1 -0
- package/dist/cjs/date.js +56 -0
- package/dist/cjs/dom.d.ts +10 -0
- package/dist/cjs/dom.d.ts.map +1 -0
- package/dist/cjs/dom.js +97 -0
- package/dist/cjs/formatter.d.ts +22 -0
- package/dist/cjs/formatter.d.ts.map +1 -0
- package/dist/cjs/formatter.js +264 -0
- package/dist/cjs/formula-refs.d.ts +7 -0
- package/dist/cjs/formula-refs.d.ts.map +1 -0
- package/dist/cjs/formula-refs.js +54 -0
- package/dist/cjs/formula.d.ts +80 -0
- package/dist/cjs/formula.d.ts.map +1 -0
- package/dist/cjs/formula.js +401 -0
- package/dist/cjs/index.d.ts +24 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +26 -0
- package/dist/cjs/locale.d.ts +34 -0
- package/dist/cjs/locale.d.ts.map +1 -0
- package/dist/cjs/locale.js +260 -0
- package/dist/cjs/log.d.ts +4 -0
- package/dist/cjs/log.d.ts.map +1 -0
- package/dist/cjs/log.js +28 -0
- package/dist/cjs/memoize.d.ts +18 -0
- package/dist/cjs/memoize.d.ts.map +1 -0
- package/dist/cjs/memoize.js +128 -0
- package/dist/cjs/numbers.d.ts +19 -0
- package/dist/cjs/numbers.d.ts.map +1 -0
- package/dist/cjs/numbers.js +47 -0
- package/dist/cjs/selection.d.ts +88 -0
- package/dist/cjs/selection.d.ts.map +1 -0
- package/dist/cjs/selection.js +368 -0
- package/dist/cjs/shared-string-canonical.d.ts +18 -0
- package/dist/cjs/shared-string-canonical.d.ts.map +1 -0
- package/dist/cjs/shared-string-canonical.js +74 -0
- package/dist/cjs/sort.d.ts +15 -0
- package/dist/cjs/sort.d.ts.map +1 -0
- package/dist/cjs/sort.js +44 -0
- package/dist/cjs/string.d.ts +74 -0
- package/dist/cjs/string.d.ts.map +1 -0
- package/dist/cjs/string.js +237 -0
- package/dist/cjs/table-styles.d.ts +56 -0
- package/dist/cjs/table-styles.d.ts.map +1 -0
- package/dist/cjs/table-styles.js +362 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/typeguards.d.ts +4 -0
- package/dist/cjs/typeguards.d.ts.map +1 -0
- package/dist/cjs/typeguards.js +15 -0
- package/dist/cjs/uuid.d.ts +8 -0
- package/dist/cjs/uuid.d.ts.map +1 -0
- package/dist/cjs/uuid.js +30 -0
- package/dist/cjs/vitest.config.d.ts +3 -0
- package/dist/cjs/vitest.config.d.ts.map +1 -0
- package/dist/cjs/vitest.config.js +9 -0
- package/dist/esm/array.d.ts +3 -0
- package/dist/esm/array.d.ts.map +1 -0
- package/dist/esm/array.js +14 -0
- package/dist/esm/cell-data-helpers.d.ts +19 -0
- package/dist/esm/cell-data-helpers.d.ts.map +1 -0
- package/dist/esm/cell-data-helpers.js +39 -0
- package/dist/esm/color.d.ts +20 -0
- package/dist/esm/color.d.ts.map +1 -0
- package/dist/esm/color.js +152 -0
- package/dist/esm/colors.d.ts +2 -0
- package/dist/esm/colors.d.ts.map +1 -0
- package/dist/esm/colors.js +75 -0
- package/dist/esm/conditional-format.d.ts +49 -0
- package/dist/esm/conditional-format.d.ts.map +1 -0
- package/dist/esm/conditional-format.js +219 -0
- package/dist/esm/content-hash.d.ts +16 -0
- package/dist/esm/content-hash.d.ts.map +1 -0
- package/dist/esm/content-hash.js +68 -0
- package/dist/esm/data-validation.d.ts +54 -0
- package/dist/esm/data-validation.d.ts.map +1 -0
- package/dist/esm/data-validation.js +237 -0
- package/dist/esm/date.d.ts +15 -0
- package/dist/esm/date.d.ts.map +1 -0
- package/dist/esm/date.js +46 -0
- package/dist/esm/dom.d.ts +10 -0
- package/dist/esm/dom.d.ts.map +1 -0
- package/dist/esm/dom.js +90 -0
- package/dist/esm/formatter.d.ts +22 -0
- package/dist/esm/formatter.d.ts.map +1 -0
- package/dist/esm/formatter.js +253 -0
- package/dist/esm/formula-refs.d.ts +7 -0
- package/dist/esm/formula-refs.d.ts.map +1 -0
- package/dist/esm/formula-refs.js +49 -0
- package/dist/esm/formula.d.ts +80 -0
- package/dist/esm/formula.d.ts.map +1 -0
- package/dist/esm/formula.js +298 -0
- package/dist/esm/index.d.ts +24 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +23 -0
- package/dist/esm/locale.d.ts +34 -0
- package/dist/esm/locale.d.ts.map +1 -0
- package/dist/esm/locale.js +223 -0
- package/dist/esm/log.d.ts +4 -0
- package/dist/esm/log.d.ts.map +1 -0
- package/dist/esm/log.js +3 -0
- package/dist/esm/memoize.d.ts +18 -0
- package/dist/esm/memoize.d.ts.map +1 -0
- package/dist/esm/memoize.js +95 -0
- package/dist/esm/numbers.d.ts +19 -0
- package/dist/esm/numbers.d.ts.map +1 -0
- package/dist/esm/numbers.js +40 -0
- package/dist/esm/selection.d.ts +88 -0
- package/dist/esm/selection.d.ts.map +1 -0
- package/dist/esm/selection.js +311 -0
- package/dist/esm/shared-string-canonical.d.ts +18 -0
- package/dist/esm/shared-string-canonical.d.ts.map +1 -0
- package/dist/esm/shared-string-canonical.js +68 -0
- package/dist/esm/sort.d.ts +15 -0
- package/dist/esm/sort.d.ts.map +1 -0
- package/dist/esm/sort.js +39 -0
- package/dist/esm/string.d.ts +74 -0
- package/dist/esm/string.d.ts.map +1 -0
- package/dist/esm/string.js +213 -0
- package/dist/esm/table-styles.d.ts +56 -0
- package/dist/esm/table-styles.d.ts.map +1 -0
- package/dist/esm/table-styles.js +367 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/typeguards.d.ts +4 -0
- package/dist/esm/typeguards.d.ts.map +1 -0
- package/dist/esm/typeguards.js +7 -0
- package/dist/esm/uuid.d.ts +8 -0
- package/dist/esm/uuid.d.ts.map +1 -0
- package/dist/esm/uuid.js +25 -0
- package/dist/esm/vitest.config.d.ts +3 -0
- package/dist/esm/vitest.config.d.ts.map +1 -0
- package/dist/esm/vitest.config.js +7 -0
- package/package.json +49 -0
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.iterateSelections = exports.iterateCellsInRange = exports.iterateCells = exports.isAnArrowKey = exports.isValidFormula = exports.isAlternateFormula = exports.isBareFormulaExpression = exports.isAFormula = exports.setDefaultEnableAtFormula = exports.looksLikeMarkdown = exports.isBalancedParenthesis = exports.balanceFormula = exports.balanceQuotes = exports.balanceParentheses = void 0;
|
|
4
|
+
exports.combineIterators = combineIterators;
|
|
5
|
+
var tslib_1 = require("tslib");
|
|
6
|
+
var selection_1 = require("./selection");
|
|
7
|
+
/* Close parenthesis mapping */
|
|
8
|
+
var inverseParenMap = {
|
|
9
|
+
"(": ")",
|
|
10
|
+
"[": "]",
|
|
11
|
+
};
|
|
12
|
+
/* Check if a str is function parenthesis */
|
|
13
|
+
var isParen = function (char) { return "()[]".indexOf(char) !== -1; };
|
|
14
|
+
/* Check if a str is open parenthesis */
|
|
15
|
+
var isOpenParen = function (char) { return "(" === char || "[" === char; };
|
|
16
|
+
/**
|
|
17
|
+
* Add/remove parenthesis in formulas
|
|
18
|
+
* @param str
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
var balanceParentheses = function (str) {
|
|
22
|
+
var chars = str.split("");
|
|
23
|
+
var stack = [];
|
|
24
|
+
for (var i = 0; i < chars.length; i++) {
|
|
25
|
+
var char = chars[i];
|
|
26
|
+
if (isParen(char)) {
|
|
27
|
+
if (isOpenParen(char)) {
|
|
28
|
+
stack.push(char);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
if (stack.length !== 0)
|
|
32
|
+
stack.pop();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return str + stack.map(function (item) { return inverseParenMap[item]; }).join("");
|
|
37
|
+
};
|
|
38
|
+
exports.balanceParentheses = balanceParentheses;
|
|
39
|
+
/**
|
|
40
|
+
* Add closing quotes in formulas when a string is unterminated.
|
|
41
|
+
* Handles escaped quotes ("") inside strings.
|
|
42
|
+
*/
|
|
43
|
+
var balanceQuotes = function (str) {
|
|
44
|
+
var inString = false;
|
|
45
|
+
var openScopeCount = 0;
|
|
46
|
+
var stringStartScopeCount = 0;
|
|
47
|
+
for (var i = 0; i < str.length; i++) {
|
|
48
|
+
var char = str[i];
|
|
49
|
+
if (char === '"') {
|
|
50
|
+
if (inString && str[i + 1] === '"') {
|
|
51
|
+
i += 1;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
inString = !inString;
|
|
55
|
+
if (inString) {
|
|
56
|
+
stringStartScopeCount = openScopeCount;
|
|
57
|
+
}
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (!inString) {
|
|
61
|
+
if (isOpenParen(char)) {
|
|
62
|
+
openScopeCount++;
|
|
63
|
+
}
|
|
64
|
+
else if (char === ")" || char === "]") {
|
|
65
|
+
if (openScopeCount > 0)
|
|
66
|
+
openScopeCount--;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (!inString) {
|
|
71
|
+
return str;
|
|
72
|
+
}
|
|
73
|
+
var insertIndex = str.length;
|
|
74
|
+
while (insertIndex > 0 && /\s/.test(str[insertIndex - 1])) {
|
|
75
|
+
insertIndex -= 1;
|
|
76
|
+
}
|
|
77
|
+
var closeStart = insertIndex;
|
|
78
|
+
while (closeStart > 0) {
|
|
79
|
+
var char = str[closeStart - 1];
|
|
80
|
+
if (char !== ")" && char !== "]")
|
|
81
|
+
break;
|
|
82
|
+
closeStart -= 1;
|
|
83
|
+
}
|
|
84
|
+
var trailingParensCount = insertIndex - closeStart;
|
|
85
|
+
var parensToKeepOutside = Math.min(stringStartScopeCount, trailingParensCount);
|
|
86
|
+
var insertionPos = insertIndex - parensToKeepOutside;
|
|
87
|
+
return "".concat(str.slice(0, insertionPos), "\"").concat(str.slice(insertionPos));
|
|
88
|
+
};
|
|
89
|
+
exports.balanceQuotes = balanceQuotes;
|
|
90
|
+
/**
|
|
91
|
+
* Add/remove parenthesis and add closing quotes in formulas.
|
|
92
|
+
*/
|
|
93
|
+
var balanceFormula = function (str) {
|
|
94
|
+
return (0, exports.balanceParentheses)(str);
|
|
95
|
+
};
|
|
96
|
+
exports.balanceFormula = balanceFormula;
|
|
97
|
+
/**
|
|
98
|
+
* Check if parenthesis is balanced
|
|
99
|
+
* @param str
|
|
100
|
+
* @returns
|
|
101
|
+
*/
|
|
102
|
+
var isBalancedParenthesis = function (str) {
|
|
103
|
+
return (0, exports.balanceParentheses)(str).length === str.length;
|
|
104
|
+
};
|
|
105
|
+
exports.isBalancedParenthesis = isBalancedParenthesis;
|
|
106
|
+
var looksLikeMarkdown = function (text) {
|
|
107
|
+
var normalizedText = text.replace(/\\n/g, "\n").replace(/\\r/g, "\r");
|
|
108
|
+
var trimmedStart = normalizedText.trimStart();
|
|
109
|
+
if (!trimmedStart) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
var firstLine = trimmedStart.split("\n", 1)[0];
|
|
113
|
+
// Text starting with `---` is considered markdown (horizontal rule or front matter)
|
|
114
|
+
if (firstLine.startsWith("--")) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
// Front matter: starts with --- and another --- appears within a few lines.
|
|
118
|
+
if (/^---\s*$/.test(firstLine)) {
|
|
119
|
+
var lines = trimmedStart.split("\n").slice(1, 20);
|
|
120
|
+
if (lines.some(function (line) { return /^---\s*$/.test(line); })) {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
// Heuristic: if a front-matter-like start is followed by markdown markers,
|
|
124
|
+
// treat it as markdown even without a closing ---.
|
|
125
|
+
if (lines.some(function (line) {
|
|
126
|
+
return /^(#{1,6}\s|>\s|[-*]\s|\d+\.\s|\|)/.test(line.trimStart());
|
|
127
|
+
})) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Common markdown markers.
|
|
132
|
+
if (/^(#{1,6}\s|>\s|[-*]\s|\d+\.\s|\|)/.test(trimmedStart)) {
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
// Horizontal rule only (line with ---/***/___).
|
|
136
|
+
return /^(?:---|\*\*\*|___)\s*$/.test(firstLine);
|
|
137
|
+
};
|
|
138
|
+
exports.looksLikeMarkdown = looksLikeMarkdown;
|
|
139
|
+
var defaultEnableAtFormula = false;
|
|
140
|
+
var setDefaultEnableAtFormula = function (enable) {
|
|
141
|
+
defaultEnableAtFormula = enable !== null && enable !== void 0 ? enable : false;
|
|
142
|
+
};
|
|
143
|
+
exports.setDefaultEnableAtFormula = setDefaultEnableAtFormula;
|
|
144
|
+
/**
|
|
145
|
+
* Check if text is a formula
|
|
146
|
+
* @param text
|
|
147
|
+
* @returns
|
|
148
|
+
*/
|
|
149
|
+
var isAFormula = function (text) {
|
|
150
|
+
var textStr = String(text);
|
|
151
|
+
if ((0, exports.looksLikeMarkdown)(textStr)) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
// A formula's expression can never legitimately begin with a second "="
|
|
155
|
+
// right after the leading one — neither Excel nor Google Sheets has a token
|
|
156
|
+
// that starts an expression with "=". So "==", "===", "=== heading ===" and
|
|
157
|
+
// similar are decorative/label text, not a (broken) formula. Treat them as
|
|
158
|
+
// plain text instead of routing them through the calculator.
|
|
159
|
+
if (textStr.startsWith("==")) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
return !!textStr.startsWith("=") || (0, exports.isAlternateFormula)(textStr);
|
|
163
|
+
};
|
|
164
|
+
exports.isAFormula = isAFormula;
|
|
165
|
+
/* Quoted string literal, e.g. `"North Region"` (with `""` escapes). */
|
|
166
|
+
var STRING_LITERAL_ONLY = /^"(?:[^"]|"")*"$/;
|
|
167
|
+
/* Numeric literal, e.g. `42`, `-1.5`, `.5`, `1e3`, `12%`. */
|
|
168
|
+
var NUMERIC_LITERAL_ONLY = /^[+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:[eE][+-]?\d+)?%?$/;
|
|
169
|
+
/* Boolean literal. */
|
|
170
|
+
var BOOLEAN_LITERAL_ONLY = /^(?:TRUE|FALSE)$/i;
|
|
171
|
+
/* Formula operators that can only appear in an expression that needs
|
|
172
|
+
* the calculator (scanned outside quoted segments). */
|
|
173
|
+
var FORMULA_OPERATOR = /[+\-*/^&<>=]/;
|
|
174
|
+
/**
|
|
175
|
+
* Check if text is a formula-shaped expression stored WITHOUT the
|
|
176
|
+
* leading "=". OOXML defined names (`<definedName>` in workbook.xml)
|
|
177
|
+
* store their expressions bare — `OFFSET(Sheet1!$A$1,0,0,10)` rather
|
|
178
|
+
* than `=OFFSET(...)` — so `isAFormula` can't classify them.
|
|
179
|
+
*
|
|
180
|
+
* Returns false for anything that already resolves as a static value
|
|
181
|
+
* or plain reference today: quoted string / numeric / boolean
|
|
182
|
+
* literals, single-area range references (including external-workbook
|
|
183
|
+
* references like `'[1]Revenue'!$A$17`), and broken `#REF!`
|
|
184
|
+
* expressions. Returns true only for expressions that need the
|
|
185
|
+
* calculator: function calls and operator expressions.
|
|
186
|
+
* @param text
|
|
187
|
+
* @returns
|
|
188
|
+
*/
|
|
189
|
+
var isBareFormulaExpression = function (text) {
|
|
190
|
+
if (typeof text !== "string") {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
var trimmed = text.trim();
|
|
194
|
+
if (!trimmed || trimmed.startsWith("=")) {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
if (trimmed.includes("#REF!")) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
if (STRING_LITERAL_ONLY.test(trimmed) ||
|
|
201
|
+
NUMERIC_LITERAL_ONLY.test(trimmed) ||
|
|
202
|
+
BOOLEAN_LITERAL_ONLY.test(trimmed)) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
if ((0, selection_1.checkIfStringIsReference)(trimmed)) {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
// Function call or parenthesized sub-expression.
|
|
209
|
+
if (trimmed.includes("(")) {
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
// Operator expression like `Sheet1!$A$1*2`. Strip string literals
|
|
213
|
+
// and quoted sheet names first so `'My-Sheet'!$A$1` isn't misread
|
|
214
|
+
// as subtraction.
|
|
215
|
+
var scannable = trimmed
|
|
216
|
+
.replace(/"(?:[^"]|"")*"/g, "")
|
|
217
|
+
.replace(/'[^']*'/g, "");
|
|
218
|
+
return FORMULA_OPERATOR.test(scannable);
|
|
219
|
+
};
|
|
220
|
+
exports.isBareFormulaExpression = isBareFormulaExpression;
|
|
221
|
+
// Pre-compiled `\p{Sc}` (Unicode currency-symbol category) check. Used to
|
|
222
|
+
// distinguish currency input like `-$100` / `+€50` from formula-prefixed
|
|
223
|
+
// input like `-A1` / `+SUM(A1:B2)`. Wrapped in try/catch because some
|
|
224
|
+
// older JS engines don't support Unicode property escapes.
|
|
225
|
+
var CURRENCY_SYMBOL_START = (function () {
|
|
226
|
+
try {
|
|
227
|
+
return new RegExp("^\\p{Sc}", "u");
|
|
228
|
+
}
|
|
229
|
+
catch (_a) {
|
|
230
|
+
return /^[£$€¥₹₽₩₪₫₴₸₺₼₾₿]/;
|
|
231
|
+
}
|
|
232
|
+
})();
|
|
233
|
+
// Check if its alternate formula
|
|
234
|
+
// ie the text starts with +
|
|
235
|
+
var isAlternateFormula = function (text) {
|
|
236
|
+
// @ can be treated as formula in Excel (even if invalid), but is disabled by default here
|
|
237
|
+
if (text.startsWith("@"))
|
|
238
|
+
return defaultEnableAtFormula;
|
|
239
|
+
if (!text.startsWith("+") && !text.startsWith("-"))
|
|
240
|
+
return false;
|
|
241
|
+
// Remove the leading + and check if what remains is just a number
|
|
242
|
+
var afterSign = text.slice(1).trim();
|
|
243
|
+
// If it's empty or just a number literal, it's not a formula
|
|
244
|
+
// Also check with common thousands separators removed (comma and period)
|
|
245
|
+
// to handle locale-formatted numbers like "1,234" or "1.234"
|
|
246
|
+
if (!afterSign || !isNaN(Number(afterSign))) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
// Excel parity: a leading sign followed by a currency symbol is the start
|
|
250
|
+
// of a (possibly in-progress) currency negative / positive — `-$100`,
|
|
251
|
+
// `+€50`, `-£1,234.56`. Excel treats these as currency, not formulas,
|
|
252
|
+
// even mid-type (the bare `-$` shows as text until digits are added).
|
|
253
|
+
if (CURRENCY_SYMBOL_START.test(afterSign)) {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
// Check for numbers with thousands separators (e.g., "1,234" or "1.234,56")
|
|
257
|
+
// Strip commas and periods that look like thousands separators
|
|
258
|
+
var withoutThousandsSeparators = afterSign.replace(/[,.]/g, "");
|
|
259
|
+
if (/^\d+$/.test(withoutThousandsSeparators)) {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
// If there is whitespace with no letters, treat it as text unless it uses
|
|
263
|
+
// non-hyphen operators (phone numbers like "+1 224-535-1764").
|
|
264
|
+
var hasLetters = /[A-Za-z]/.test(afterSign);
|
|
265
|
+
if (/\s/.test(afterSign) && !hasLetters) {
|
|
266
|
+
return /[+*/^=<>]/.test(afterSign);
|
|
267
|
+
}
|
|
268
|
+
// Otherwise, it's a formula like +A1, +SUM(A1:B2), +1-2, etc.
|
|
269
|
+
return true;
|
|
270
|
+
};
|
|
271
|
+
exports.isAlternateFormula = isAlternateFormula;
|
|
272
|
+
// Check if its a valid formula
|
|
273
|
+
var isValidFormula = function (text) {
|
|
274
|
+
var str = String(text);
|
|
275
|
+
return str[0] === "=" && str.length > 1;
|
|
276
|
+
};
|
|
277
|
+
exports.isValidFormula = isValidFormula;
|
|
278
|
+
/**
|
|
279
|
+
* Check if a key is an Arrow key
|
|
280
|
+
* @param code
|
|
281
|
+
* @returns
|
|
282
|
+
*/
|
|
283
|
+
var isAnArrowKey = function (code) { return code.startsWith("Arrow"); };
|
|
284
|
+
exports.isAnArrowKey = isAnArrowKey;
|
|
285
|
+
/**
|
|
286
|
+
* Iterate over all cells in a bound
|
|
287
|
+
* @param bounds
|
|
288
|
+
* @param callback
|
|
289
|
+
*/
|
|
290
|
+
var iterateCells = function (top, right, bottom, left) {
|
|
291
|
+
var rowIndex, rightBound, columnIndex;
|
|
292
|
+
return tslib_1.__generator(this, function (_a) {
|
|
293
|
+
switch (_a.label) {
|
|
294
|
+
case 0:
|
|
295
|
+
rowIndex = top;
|
|
296
|
+
_a.label = 1;
|
|
297
|
+
case 1:
|
|
298
|
+
if (!(rowIndex <= bottom)) return [3 /*break*/, 6];
|
|
299
|
+
rightBound = typeof right === "function" ? right(rowIndex) : right;
|
|
300
|
+
columnIndex = left;
|
|
301
|
+
_a.label = 2;
|
|
302
|
+
case 2:
|
|
303
|
+
if (!(columnIndex <= rightBound)) return [3 /*break*/, 5];
|
|
304
|
+
return [4 /*yield*/, [rowIndex, columnIndex]];
|
|
305
|
+
case 3:
|
|
306
|
+
_a.sent();
|
|
307
|
+
_a.label = 4;
|
|
308
|
+
case 4:
|
|
309
|
+
columnIndex++;
|
|
310
|
+
return [3 /*break*/, 2];
|
|
311
|
+
case 5:
|
|
312
|
+
rowIndex++;
|
|
313
|
+
return [3 /*break*/, 1];
|
|
314
|
+
case 6: return [2 /*return*/];
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
};
|
|
318
|
+
exports.iterateCells = iterateCells;
|
|
319
|
+
function combineIterators() {
|
|
320
|
+
var _i, generators_1, generators_1_1, generator, e_1_1;
|
|
321
|
+
var e_1, _a;
|
|
322
|
+
var generators = [];
|
|
323
|
+
for (_i = 0; _i < arguments.length; _i++) {
|
|
324
|
+
generators[_i] = arguments[_i];
|
|
325
|
+
}
|
|
326
|
+
return tslib_1.__generator(this, function (_b) {
|
|
327
|
+
switch (_b.label) {
|
|
328
|
+
case 0:
|
|
329
|
+
_b.trys.push([0, 5, 6, 7]);
|
|
330
|
+
generators_1 = tslib_1.__values(generators), generators_1_1 = generators_1.next();
|
|
331
|
+
_b.label = 1;
|
|
332
|
+
case 1:
|
|
333
|
+
if (!!generators_1_1.done) return [3 /*break*/, 4];
|
|
334
|
+
generator = generators_1_1.value;
|
|
335
|
+
if (!generator) return [3 /*break*/, 3];
|
|
336
|
+
return [5 /*yield**/, tslib_1.__values(generator)];
|
|
337
|
+
case 2:
|
|
338
|
+
_b.sent();
|
|
339
|
+
_b.label = 3;
|
|
340
|
+
case 3:
|
|
341
|
+
generators_1_1 = generators_1.next();
|
|
342
|
+
return [3 /*break*/, 1];
|
|
343
|
+
case 4: return [3 /*break*/, 7];
|
|
344
|
+
case 5:
|
|
345
|
+
e_1_1 = _b.sent();
|
|
346
|
+
e_1 = { error: e_1_1 };
|
|
347
|
+
return [3 /*break*/, 7];
|
|
348
|
+
case 6:
|
|
349
|
+
try {
|
|
350
|
+
if (generators_1_1 && !generators_1_1.done && (_a = generators_1.return)) _a.call(generators_1);
|
|
351
|
+
}
|
|
352
|
+
finally { if (e_1) throw e_1.error; }
|
|
353
|
+
return [7 /*endfinally*/];
|
|
354
|
+
case 7: return [2 /*return*/];
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
var iterateCellsInRange = function (range) {
|
|
359
|
+
return (0, exports.iterateCells)(range.startRowIndex, range.endColumnIndex, range.endRowIndex, range.startColumnIndex);
|
|
360
|
+
};
|
|
361
|
+
exports.iterateCellsInRange = iterateCellsInRange;
|
|
362
|
+
/**
|
|
363
|
+
* Iterate all cells in multiple selections
|
|
364
|
+
* @param selections
|
|
365
|
+
* @returns
|
|
366
|
+
*/
|
|
367
|
+
var iterateSelections = function (selections) {
|
|
368
|
+
var selections_1, selections_1_1, selection, e_2_1;
|
|
369
|
+
var e_2, _a;
|
|
370
|
+
return tslib_1.__generator(this, function (_b) {
|
|
371
|
+
switch (_b.label) {
|
|
372
|
+
case 0:
|
|
373
|
+
_b.trys.push([0, 5, 6, 7]);
|
|
374
|
+
selections_1 = tslib_1.__values(selections), selections_1_1 = selections_1.next();
|
|
375
|
+
_b.label = 1;
|
|
376
|
+
case 1:
|
|
377
|
+
if (!!selections_1_1.done) return [3 /*break*/, 4];
|
|
378
|
+
selection = selections_1_1.value;
|
|
379
|
+
return [4 /*yield*/, (0, exports.iterateCellsInRange)(selection.range)];
|
|
380
|
+
case 2:
|
|
381
|
+
_b.sent();
|
|
382
|
+
_b.label = 3;
|
|
383
|
+
case 3:
|
|
384
|
+
selections_1_1 = selections_1.next();
|
|
385
|
+
return [3 /*break*/, 1];
|
|
386
|
+
case 4: return [3 /*break*/, 7];
|
|
387
|
+
case 5:
|
|
388
|
+
e_2_1 = _b.sent();
|
|
389
|
+
e_2 = { error: e_2_1 };
|
|
390
|
+
return [3 /*break*/, 7];
|
|
391
|
+
case 6:
|
|
392
|
+
try {
|
|
393
|
+
if (selections_1_1 && !selections_1_1.done && (_a = selections_1.return)) _a.call(selections_1);
|
|
394
|
+
}
|
|
395
|
+
finally { if (e_2) throw e_2.error; }
|
|
396
|
+
return [7 /*endfinally*/];
|
|
397
|
+
case 7: return [2 /*return*/];
|
|
398
|
+
}
|
|
399
|
+
});
|
|
400
|
+
};
|
|
401
|
+
exports.iterateSelections = iterateSelections;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export * from "./numbers";
|
|
2
|
+
export * from "./uuid";
|
|
3
|
+
export * from "./typeguards";
|
|
4
|
+
export * from "./string";
|
|
5
|
+
export * from "./formula";
|
|
6
|
+
export * from "./color";
|
|
7
|
+
export * from "./dom";
|
|
8
|
+
export * from "./locale";
|
|
9
|
+
export * from "./date";
|
|
10
|
+
export * from "./log";
|
|
11
|
+
export * from "./array";
|
|
12
|
+
export * from "./formatter";
|
|
13
|
+
export * from "./memoize";
|
|
14
|
+
export * from "./cell-data-helpers";
|
|
15
|
+
export * from "./selection";
|
|
16
|
+
export * from "./colors";
|
|
17
|
+
export * from "./formula-refs";
|
|
18
|
+
export * from "./sort";
|
|
19
|
+
export * from "./table-styles";
|
|
20
|
+
export * from "./conditional-format";
|
|
21
|
+
export * from "./data-validation";
|
|
22
|
+
export * from "./content-hash";
|
|
23
|
+
export * from "./shared-string-canonical";
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./numbers"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./uuid"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./typeguards"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./string"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./formula"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./color"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./dom"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./locale"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./date"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./log"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./array"), exports);
|
|
15
|
+
tslib_1.__exportStar(require("./formatter"), exports);
|
|
16
|
+
tslib_1.__exportStar(require("./memoize"), exports);
|
|
17
|
+
tslib_1.__exportStar(require("./cell-data-helpers"), exports);
|
|
18
|
+
tslib_1.__exportStar(require("./selection"), exports);
|
|
19
|
+
tslib_1.__exportStar(require("./colors"), exports);
|
|
20
|
+
tslib_1.__exportStar(require("./formula-refs"), exports);
|
|
21
|
+
tslib_1.__exportStar(require("./sort"), exports);
|
|
22
|
+
tslib_1.__exportStar(require("./table-styles"), exports);
|
|
23
|
+
tslib_1.__exportStar(require("./conditional-format"), exports);
|
|
24
|
+
tslib_1.__exportStar(require("./data-validation"), exports);
|
|
25
|
+
tslib_1.__exportStar(require("./content-hash"), exports);
|
|
26
|
+
tslib_1.__exportStar(require("./shared-string-canonical"), exports);
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export declare const getCurrentLocale: () => string;
|
|
2
|
+
export type DatePartType = "month" | "day" | "year";
|
|
3
|
+
/**
|
|
4
|
+
* PARSER metadata only: relative day/month order for a locale, with the
|
|
5
|
+
* year deliberately moved last so the date-parser's regex can use fixed
|
|
6
|
+
* capture-group positions. This ordering is WRONG for display in
|
|
7
|
+
* year-first locales (ja-JP, hu-HU, sv-SE, …) — formatting helpers must
|
|
8
|
+
* use the `formatToParts`-driven builders below instead.
|
|
9
|
+
*/
|
|
10
|
+
export declare const getLocaleDatePartsNotMemoized: (locale: string) => [DatePartType, string, string][];
|
|
11
|
+
export declare const getLocaleDateParts: (locale: string) => [DatePartType, string, string][];
|
|
12
|
+
/**
|
|
13
|
+
* Default numeric (short) date pattern for a locale, preserving the
|
|
14
|
+
* locale's field order, separators, literal text and zero-padding as
|
|
15
|
+
* reported by `Intl.DateTimeFormat(...).formatToParts()` — e.g.
|
|
16
|
+
* de-DE → `d.m.yyyy`, hu-HU → `yyyy. mm. dd.`, en-CA → `yyyy-mm-dd`.
|
|
17
|
+
*/
|
|
18
|
+
export declare const getDefaultDateFormat: (locale?: string) => string;
|
|
19
|
+
/**
|
|
20
|
+
* Default time pattern for a locale, honoring its 12/24-hour convention,
|
|
21
|
+
* separators and hour padding — e.g. en-US → `h:mm:ss AM/PM`,
|
|
22
|
+
* de-DE → `hh:mm:ss`, fi-FI → `h.mm.ss`.
|
|
23
|
+
*/
|
|
24
|
+
export declare const getDefaultTimeFormat: (locale?: string, precision?: "minute" | "second") => string;
|
|
25
|
+
export declare const getDefaultDateTimeFormat: (locale?: string) => string;
|
|
26
|
+
/**
|
|
27
|
+
* Long (full) date pattern for a locale, following the locale's own
|
|
28
|
+
* field placement and literal text — e.g. de-DE →
|
|
29
|
+
* `[$-de-DE]dddd, d. mmmm yyyy`, ja-JP → `[$-ja-JP]yyyy"年"m"月"d"日"dddd`.
|
|
30
|
+
* Localized weekday/month names are best-effort: they render through the
|
|
31
|
+
* spreadsheet formatter's own locale data via the `[$-locale]` tag.
|
|
32
|
+
*/
|
|
33
|
+
export declare const getLongDateFormat: (locale?: string) => string;
|
|
34
|
+
//# sourceMappingURL=locale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../../locale.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,cAU5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,GAAI,QAAQ,MAAM,qCAkC3D,CAAC;AAEF,eAAO,MAAM,kBAAkB,sDAAyC,CAAC;AAqFzE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,SAAQ,MAA2B,WAClC,CAAC;AAuCvC;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAQ,MAA2B,EACnC,YAAW,QAAQ,GAAG,QAAmB,WACS,CAAC;AAErD,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,WAEvD,CAAC;AA2CF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,SAAQ,MAA2B,WAClC,CAAC"}
|