@rowsncolumns/spreadsheet 10.6.0 → 10.6.5
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/cjs/api/cf-data-bar.d.ts +73 -0
- package/dist/cjs/api/cf-data-bar.d.ts.map +1 -0
- package/dist/cjs/api/cf-data-bar.js +182 -0
- package/dist/cjs/api/cf-icons.d.ts +73 -0
- package/dist/cjs/api/cf-icons.d.ts.map +1 -0
- package/dist/cjs/api/cf-icons.js +322 -0
- package/dist/cjs/api/cf-overlays.d.ts +89 -3
- package/dist/cjs/api/cf-overlays.d.ts.map +1 -1
- package/dist/cjs/api/cf-overlays.js +256 -80
- package/dist/cjs/api/cf-priority.d.ts +34 -0
- package/dist/cjs/api/cf-priority.d.ts.map +1 -0
- package/dist/cjs/api/cf-priority.js +94 -0
- package/dist/cjs/api/heatmap.d.ts +7 -1
- package/dist/cjs/api/heatmap.d.ts.map +1 -1
- package/dist/cjs/api/heatmap.js +27 -11
- package/dist/cjs/api/selections.d.ts +2 -2
- package/dist/cjs/api/validation.d.ts +6 -0
- package/dist/cjs/api/validation.d.ts.map +1 -1
- package/dist/cjs/api/validation.js +10 -1
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +194 -51
- package/dist/cjs/components/canvas-grid/overflow.d.ts +37 -0
- package/dist/cjs/components/canvas-grid/overflow.d.ts.map +1 -0
- package/dist/cjs/components/canvas-grid/overflow.js +49 -0
- package/dist/cjs/components/canvas-grid/page-breaks.d.ts +15 -0
- package/dist/cjs/components/canvas-grid/page-breaks.d.ts.map +1 -0
- package/dist/cjs/components/canvas-grid/page-breaks.js +77 -0
- package/dist/cjs/components/canvas-grid/typings.d.ts +25 -0
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell/alignment.d.ts +83 -1
- package/dist/cjs/components/cell/alignment.d.ts.map +1 -1
- package/dist/cjs/components/cell/alignment.js +182 -1
- package/dist/cjs/components/cell/cell-background.d.ts +18 -0
- package/dist/cjs/components/cell/cell-background.d.ts.map +1 -1
- package/dist/cjs/components/cell/cell-background.js +145 -59
- package/dist/cjs/components/cell/cell-backgrounds.d.ts.map +1 -1
- package/dist/cjs/components/cell/cell-backgrounds.js +5 -1
- package/dist/cjs/components/cell/cell-text-runs.d.ts +12 -5
- package/dist/cjs/components/cell/cell-text-runs.d.ts.map +1 -1
- package/dist/cjs/components/cell/cell-text-runs.js +19 -21
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +392 -45
- package/dist/cjs/components/cell/number-format-layout.d.ts +35 -0
- package/dist/cjs/components/cell/number-format-layout.d.ts.map +1 -0
- package/dist/cjs/components/cell/number-format-layout.js +106 -0
- package/dist/cjs/components/cell/typings.d.ts +22 -0
- package/dist/cjs/components/cell/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.js +2 -2
- package/dist/cjs/components/cell-filter/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-filter/index.js +3 -3
- package/dist/cjs/components/cell-overlay/index.d.ts +20 -0
- package/dist/cjs/components/cell-overlay/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-overlay/index.js +155 -28
- package/dist/cjs/components/cf-icon-preview/index.d.ts +16 -0
- package/dist/cjs/components/cf-icon-preview/index.d.ts.map +1 -0
- package/dist/cjs/components/cf-icon-preview/index.js +48 -0
- package/dist/cjs/components/embeds/embed-component.d.ts.map +1 -1
- package/dist/cjs/components/embeds/embed-component.js +3 -2
- package/dist/cjs/components/hidden-markers/index.d.ts.map +1 -1
- package/dist/cjs/components/hidden-markers/index.js +8 -7
- package/dist/cjs/components/hidden-markers/style.d.ts +7 -0
- package/dist/cjs/components/hidden-markers/style.d.ts.map +1 -1
- package/dist/cjs/components/hidden-markers/style.js +13 -2
- package/dist/cjs/components/protect-sheet-dialog/index.d.ts +67 -0
- package/dist/cjs/components/protect-sheet-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/protect-sheet-dialog/index.js +196 -0
- package/dist/cjs/components/toolbar/types.d.ts +1 -1
- package/dist/cjs/components/toolbar/types.d.ts.map +1 -1
- package/dist/cjs/config.d.ts +13 -1
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +15 -3
- package/dist/cjs/helpers.d.ts +15 -5
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +51 -35
- package/dist/cjs/hooks/use-border-styles.d.ts.map +1 -1
- package/dist/cjs/hooks/use-border-styles.js +5 -28
- package/dist/cjs/hooks/use-cell-renderer.d.ts +35 -3
- package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-cell-renderer.js +85 -47
- package/dist/cjs/hooks/use-conditional-formatting.d.ts +13 -1
- package/dist/cjs/hooks/use-conditional-formatting.d.ts.map +1 -1
- package/dist/cjs/hooks/use-conditional-formatting.js +281 -230
- package/dist/cjs/index.d.ts +5 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +5 -0
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/themes.d.ts +8 -0
- package/dist/cjs/themes.d.ts.map +1 -1
- package/dist/cjs/themes.js +21 -3
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +81 -4
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/api/cf-data-bar.d.ts +73 -0
- package/dist/esm/api/cf-data-bar.d.ts.map +1 -0
- package/dist/esm/api/cf-data-bar.js +178 -0
- package/dist/esm/api/cf-icons.d.ts +73 -0
- package/dist/esm/api/cf-icons.d.ts.map +1 -0
- package/dist/esm/api/cf-icons.js +306 -0
- package/dist/esm/api/cf-overlays.d.ts +89 -3
- package/dist/esm/api/cf-overlays.d.ts.map +1 -1
- package/dist/esm/api/cf-overlays.js +223 -67
- package/dist/esm/api/cf-priority.d.ts +34 -0
- package/dist/esm/api/cf-priority.d.ts.map +1 -0
- package/dist/esm/api/cf-priority.js +61 -0
- package/dist/esm/api/heatmap.d.ts +7 -1
- package/dist/esm/api/heatmap.d.ts.map +1 -1
- package/dist/esm/api/heatmap.js +24 -9
- package/dist/esm/api/selections.d.ts +2 -2
- package/dist/esm/api/validation.d.ts +6 -0
- package/dist/esm/api/validation.d.ts.map +1 -1
- package/dist/esm/api/validation.js +6 -0
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +163 -47
- package/dist/esm/components/canvas-grid/overflow.d.ts +37 -0
- package/dist/esm/components/canvas-grid/overflow.d.ts.map +1 -0
- package/dist/esm/components/canvas-grid/overflow.js +39 -0
- package/dist/esm/components/canvas-grid/page-breaks.d.ts +15 -0
- package/dist/esm/components/canvas-grid/page-breaks.d.ts.map +1 -0
- package/dist/esm/components/canvas-grid/page-breaks.js +50 -0
- package/dist/esm/components/canvas-grid/typings.d.ts +25 -0
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell/alignment.d.ts +83 -1
- package/dist/esm/components/cell/alignment.d.ts.map +1 -1
- package/dist/esm/components/cell/alignment.js +143 -1
- package/dist/esm/components/cell/cell-background.d.ts +18 -0
- package/dist/esm/components/cell/cell-background.d.ts.map +1 -1
- package/dist/esm/components/cell/cell-background.js +110 -41
- package/dist/esm/components/cell/cell-backgrounds.d.ts.map +1 -1
- package/dist/esm/components/cell/cell-backgrounds.js +5 -1
- package/dist/esm/components/cell/cell-text-runs.d.ts +12 -5
- package/dist/esm/components/cell/cell-text-runs.d.ts.map +1 -1
- package/dist/esm/components/cell/cell-text-runs.js +19 -24
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +352 -46
- package/dist/esm/components/cell/number-format-layout.d.ts +35 -0
- package/dist/esm/components/cell/number-format-layout.d.ts.map +1 -0
- package/dist/esm/components/cell/number-format-layout.js +99 -0
- package/dist/esm/components/cell/typings.d.ts +22 -0
- package/dist/esm/components/cell/typings.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.js +2 -2
- package/dist/esm/components/cell-filter/index.d.ts.map +1 -1
- package/dist/esm/components/cell-filter/index.js +4 -4
- package/dist/esm/components/cell-overlay/index.d.ts +20 -0
- package/dist/esm/components/cell-overlay/index.d.ts.map +1 -1
- package/dist/esm/components/cell-overlay/index.js +111 -25
- package/dist/esm/components/cf-icon-preview/index.d.ts +16 -0
- package/dist/esm/components/cf-icon-preview/index.d.ts.map +1 -0
- package/dist/esm/components/cf-icon-preview/index.js +41 -0
- package/dist/esm/components/embeds/embed-component.d.ts.map +1 -1
- package/dist/esm/components/embeds/embed-component.js +4 -3
- package/dist/esm/components/hidden-markers/index.d.ts.map +1 -1
- package/dist/esm/components/hidden-markers/index.js +9 -8
- package/dist/esm/components/hidden-markers/style.d.ts +7 -0
- package/dist/esm/components/hidden-markers/style.d.ts.map +1 -1
- package/dist/esm/components/hidden-markers/style.js +8 -1
- package/dist/esm/components/protect-sheet-dialog/index.d.ts +67 -0
- package/dist/esm/components/protect-sheet-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/protect-sheet-dialog/index.js +154 -0
- package/dist/esm/components/toolbar/types.d.ts +1 -1
- package/dist/esm/components/toolbar/types.d.ts.map +1 -1
- package/dist/esm/config.d.ts +13 -1
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +13 -1
- package/dist/esm/helpers.d.ts +15 -5
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +48 -32
- package/dist/esm/hooks/use-border-styles.d.ts.map +1 -1
- package/dist/esm/hooks/use-border-styles.js +5 -26
- package/dist/esm/hooks/use-cell-renderer.d.ts +35 -3
- package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-cell-renderer.js +83 -42
- package/dist/esm/hooks/use-conditional-formatting.d.ts +13 -1
- package/dist/esm/hooks/use-conditional-formatting.d.ts.map +1 -1
- package/dist/esm/hooks/use-conditional-formatting.js +215 -120
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/themes.d.ts +8 -0
- package/dist/esm/themes.d.ts.map +1 -1
- package/dist/esm/themes.js +20 -3
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +81 -4
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/spreadsheet.min.css +1 -1
- package/package.json +4 -4
|
@@ -6,13 +6,15 @@ var grid_1 = require("@rowsncolumns/grid");
|
|
|
6
6
|
var utils_1 = require("@rowsncolumns/utils");
|
|
7
7
|
var isNil_1 = tslib_1.__importDefault(require("lodash/isNil"));
|
|
8
8
|
var react_1 = require("react");
|
|
9
|
-
var
|
|
9
|
+
var cf_data_bar_1 = require("../api/cf-data-bar");
|
|
10
10
|
var cf_engine_1 = require("../api/cf-engine");
|
|
11
|
+
var cf_overlays_1 = require("../api/cf-overlays");
|
|
12
|
+
var cf_priority_1 = require("../api/cf-priority");
|
|
11
13
|
var cf_window_1 = require("../api/cf-window");
|
|
12
14
|
var heatmap_1 = require("../api/heatmap");
|
|
13
15
|
var validation_1 = require("../api/validation");
|
|
14
|
-
var themes_1 = require("../themes");
|
|
15
16
|
var config_1 = require("../config");
|
|
17
|
+
var themes_1 = require("../themes");
|
|
16
18
|
/**
|
|
17
19
|
* Merge a lower-priority rule's format under an already-applied one, per
|
|
18
20
|
* property (Excel's stacking): every property the higher-priority format
|
|
@@ -52,8 +54,28 @@ var definedEntries = function (obj) {
|
|
|
52
54
|
}
|
|
53
55
|
return out;
|
|
54
56
|
};
|
|
57
|
+
/** The k-th value a top/bottom-N rule ranks against, from full-range statistics. */
|
|
58
|
+
var fullRangeRankValue = function (stats, rule) {
|
|
59
|
+
var _a;
|
|
60
|
+
var top = rule.type === "TOP";
|
|
61
|
+
if (stats.sorted) {
|
|
62
|
+
var n = stats.sorted.length;
|
|
63
|
+
if (!n)
|
|
64
|
+
return undefined;
|
|
65
|
+
var k = Math.min(n, Math.max(1, rule.isPercent ? Math.ceil((rule.rank / 100) * n) : rule.rank));
|
|
66
|
+
return top ? stats.sorted[n - k] : stats.sorted[k - 1];
|
|
67
|
+
}
|
|
68
|
+
var value = (_a = stats.rankValue) === null || _a === void 0 ? void 0 : _a.call(stats, rule.rank, top, !!rule.isPercent);
|
|
69
|
+
return value !== undefined && Number.isFinite(value) ? value : undefined;
|
|
70
|
+
};
|
|
55
71
|
var useConditionalFormatting = function (_a) {
|
|
56
|
-
var sheetId = _a.sheetId, theme = _a.theme, conditionalFormats = _a.conditionalFormats, locale = _a.locale, getValidationValue = _a.getValidationValue, isNumberValue = _a.isNumberValue, getSheetRowCount = _a.getSheetRowCount, getSheetColumnCount = _a.getSheetColumnCount, evaluationWindow = _a.window, getConditionalFormatResult = _a.getConditionalFormatResult;
|
|
72
|
+
var sheetId = _a.sheetId, theme = _a.theme, conditionalFormats = _a.conditionalFormats, locale = _a.locale, getValidationValue = _a.getValidationValue, isNumberValue = _a.isNumberValue, getSheetRowCount = _a.getSheetRowCount, getSheetColumnCount = _a.getSheetColumnCount, evaluationWindow = _a.window, getConditionalFormatResult = _a.getConditionalFormatResult, getConditionalFormatRuleStats = _a.getConditionalFormatRuleStats;
|
|
73
|
+
// Whole-range statistics of windowed rules, keyed by rule id. An entry is
|
|
74
|
+
// reused while the rule object and the data getters are unchanged —
|
|
75
|
+
// scrolling (a new window) re-runs the memo below without re-scanning the
|
|
76
|
+
// full range, and any edit (new getter identity) or rule change
|
|
77
|
+
// invalidates it.
|
|
78
|
+
var fullRangeStatsCache = (0, react_1.useRef)(new Map());
|
|
57
79
|
var previousEffectiveValueMap = (0, react_1.useRef)(undefined);
|
|
58
80
|
// Lazy initialization
|
|
59
81
|
var getPreviousValueMap = (0, react_1.useCallback)(function () {
|
|
@@ -83,26 +105,13 @@ var useConditionalFormatting = function (_a) {
|
|
|
83
105
|
}, [getSheetRowCount, getSheetColumnCount]);
|
|
84
106
|
return (0, react_1.useMemo)(function () {
|
|
85
107
|
var e_2, _a;
|
|
86
|
-
var _b, _c, _d, _e, _f, _g;
|
|
108
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
87
109
|
var formattingByCell = new Map();
|
|
88
110
|
if (!conditionalFormats) {
|
|
89
111
|
return formattingByCell;
|
|
90
112
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
.sort(function (left, right) {
|
|
94
|
-
var _a, _b;
|
|
95
|
-
var leftPriority = (_a = left.rule.priority) !== null && _a !== void 0 ? _a : Number.POSITIVE_INFINITY;
|
|
96
|
-
var rightPriority = (_b = right.rule.priority) !== null && _b !== void 0 ? _b : Number.POSITIVE_INFINITY;
|
|
97
|
-
if (leftPriority === rightPriority) {
|
|
98
|
-
return left.index - right.index;
|
|
99
|
-
}
|
|
100
|
-
return leftPriority - rightPriority;
|
|
101
|
-
})
|
|
102
|
-
.map(function (_a) {
|
|
103
|
-
var rule = _a.rule;
|
|
104
|
-
return rule;
|
|
105
|
-
});
|
|
113
|
+
// Excel precedence: the first rule (lowest `priority`) is evaluated first and wins conflicts.
|
|
114
|
+
var sortedRules = (0, cf_priority_1.sortConditionalFormatRules)(conditionalFormats);
|
|
106
115
|
var rules = evaluationWindow
|
|
107
116
|
? (0, cf_window_1.windowConditionalFormatRules)({
|
|
108
117
|
rules: sortedRules,
|
|
@@ -161,13 +170,94 @@ var useConditionalFormatting = function (_a) {
|
|
|
161
170
|
finally { if (e_3) throw e_3.error; }
|
|
162
171
|
}
|
|
163
172
|
};
|
|
173
|
+
// Every numeric covered cell of a rule on this sheet, across all of its
|
|
174
|
+
// (clamped) ranges — the population Excel resolves cfvo thresholds over.
|
|
175
|
+
var collectRuleNumbers = function (rule) {
|
|
176
|
+
var e_4, _a, e_5, _b;
|
|
177
|
+
var cells = [];
|
|
178
|
+
try {
|
|
179
|
+
for (var _c = tslib_1.__values(rule.ranges), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
180
|
+
var range = _d.value;
|
|
181
|
+
if ((range === null || range === void 0 ? void 0 : range.sheetId) !== sheetId)
|
|
182
|
+
continue;
|
|
183
|
+
try {
|
|
184
|
+
for (var _e = (e_5 = void 0, tslib_1.__values((0, utils_1.iterateCellsInRange)(clampRange(range)))), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
185
|
+
var _g = tslib_1.__read(_f.value, 2), rowIndex = _g[0], columnIndex = _g[1];
|
|
186
|
+
var v = getValidationValue(sheetId, rowIndex, columnIndex, rule);
|
|
187
|
+
if (!(0, isNil_1.default)(v) &&
|
|
188
|
+
typeof v !== "boolean" &&
|
|
189
|
+
isNumberValue(sheetId, rowIndex, columnIndex) &&
|
|
190
|
+
Number.isFinite(Number(v))) {
|
|
191
|
+
cells.push({ rowIndex: rowIndex, columnIndex: columnIndex, value: Number(v) });
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
196
|
+
finally {
|
|
197
|
+
try {
|
|
198
|
+
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
199
|
+
}
|
|
200
|
+
finally { if (e_5) throw e_5.error; }
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
205
|
+
finally {
|
|
206
|
+
try {
|
|
207
|
+
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
208
|
+
}
|
|
209
|
+
finally { if (e_4) throw e_4.error; }
|
|
210
|
+
}
|
|
211
|
+
return cells;
|
|
212
|
+
};
|
|
213
|
+
// FORMULA cfvo thresholds: a constant or a single same-sheet cell
|
|
214
|
+
// reference (`=$B$1`) — the forms Excel's rule dialog produces.
|
|
215
|
+
var resolveFormula = function (formula) {
|
|
216
|
+
var match = /^=?\s*\$?([A-Z]{1,3})\$?(\d+)\s*$/i.exec(formula);
|
|
217
|
+
if (!match)
|
|
218
|
+
return undefined;
|
|
219
|
+
var cell = (0, utils_1.addressToCell)("".concat(match[1]).concat(match[2]));
|
|
220
|
+
if (!cell)
|
|
221
|
+
return undefined;
|
|
222
|
+
var value = getValidationValue(sheetId, cell.rowIndex, cell.columnIndex);
|
|
223
|
+
var num = typeof value === "boolean" ? NaN : Number(value);
|
|
224
|
+
return (0, isNil_1.default)(value) || value === "" || !Number.isFinite(num)
|
|
225
|
+
? undefined
|
|
226
|
+
: num;
|
|
227
|
+
};
|
|
228
|
+
var originalRuleById = new Map(sortedRules.map(function (rule) { return [rule.id, rule]; }));
|
|
229
|
+
// Statistics over the rule's FULL range when the window cut it (Excel
|
|
230
|
+
// resolves thresholds over every covered cell, not the visible slice);
|
|
231
|
+
// `undefined` for a rule evaluated whole, whose loaded values are exact.
|
|
232
|
+
var fullRangeStats = function (rule) {
|
|
233
|
+
var _a;
|
|
234
|
+
var original = originalRuleById.get(rule.id);
|
|
235
|
+
if (!original || original === rule)
|
|
236
|
+
return undefined;
|
|
237
|
+
var cache = fullRangeStatsCache.current;
|
|
238
|
+
var hit = cache.get(rule.id);
|
|
239
|
+
if (hit &&
|
|
240
|
+
hit.rule === original &&
|
|
241
|
+
hit.getValidationValue === getValidationValue &&
|
|
242
|
+
hit.isNumberValue === isNumberValue) {
|
|
243
|
+
return hit.stats;
|
|
244
|
+
}
|
|
245
|
+
var stats = (_a = getConditionalFormatRuleStats === null || getConditionalFormatRuleStats === void 0 ? void 0 : getConditionalFormatRuleStats(sheetId, original)) !== null && _a !== void 0 ? _a : (0, cf_overlays_1.buildCfRangeStats)(collectRuleNumbers(original).map(function (cell) { return cell.value; }));
|
|
246
|
+
cache.set(rule.id, {
|
|
247
|
+
rule: original,
|
|
248
|
+
getValidationValue: getValidationValue,
|
|
249
|
+
isNumberValue: isNumberValue,
|
|
250
|
+
stats: stats,
|
|
251
|
+
});
|
|
252
|
+
return stats;
|
|
253
|
+
};
|
|
164
254
|
// There can be conditions applied
|
|
165
255
|
// to the same range
|
|
166
256
|
// So to get previous value, we have to save it
|
|
167
257
|
// in a key based on condition index
|
|
168
258
|
var conditionIndex = 0;
|
|
169
259
|
var _loop_1 = function (rule) {
|
|
170
|
-
var
|
|
260
|
+
var e_6, _p, e_7, _q, e_8, _r, e_9, _s, e_10, _t, e_11, _u, e_12, _v, e_13, _w, e_14, _x, e_15, _y, e_16, _z, e_17, _0;
|
|
171
261
|
var engineStamped = (_b = engineStampedRuleIds === null || engineStampedRuleIds === void 0 ? void 0 : engineStampedRuleIds.has(rule.id)) !== null && _b !== void 0 ? _b : false;
|
|
172
262
|
var ranges = rule.ranges, enabled = rule.enabled, booleanRule = rule.booleanRule, gradientRule = rule.gradientRule, topBottomRule = rule.topBottomRule, distinctRule = rule.distinctRule, iconSetRule = rule.iconSetRule, dataBarRule = rule.dataBarRule;
|
|
173
263
|
// Only look for enabled rules
|
|
@@ -176,7 +266,7 @@ var useConditionalFormatting = function (_a) {
|
|
|
176
266
|
}
|
|
177
267
|
if (booleanRule) {
|
|
178
268
|
try {
|
|
179
|
-
for (var ranges_1 = (
|
|
269
|
+
for (var ranges_1 = (e_6 = void 0, tslib_1.__values(ranges)), ranges_1_1 = ranges_1.next(); !ranges_1_1.done; ranges_1_1 = ranges_1.next()) {
|
|
180
270
|
var range = ranges_1_1.value;
|
|
181
271
|
// Only pick current sheet
|
|
182
272
|
if ((range === null || range === void 0 ? void 0 : range.sheetId) !== sheetId) {
|
|
@@ -197,8 +287,8 @@ var useConditionalFormatting = function (_a) {
|
|
|
197
287
|
if (isAboveBelowAverage) {
|
|
198
288
|
var numericValues = [];
|
|
199
289
|
try {
|
|
200
|
-
for (var
|
|
201
|
-
var
|
|
290
|
+
for (var _1 = (e_7 = void 0, tslib_1.__values((0, utils_1.iterateCellsInRange)(clampedRange))), _2 = _1.next(); !_2.done; _2 = _1.next()) {
|
|
291
|
+
var _3 = tslib_1.__read(_2.value, 2), rowIndex = _3[0], columnIndex = _3[1];
|
|
202
292
|
var value = getValidationValue(sheetId, rowIndex, columnIndex, rule);
|
|
203
293
|
if (!(0, isNil_1.default)(value) &&
|
|
204
294
|
isNumberValue(sheetId, rowIndex, columnIndex) &&
|
|
@@ -207,17 +297,20 @@ var useConditionalFormatting = function (_a) {
|
|
|
207
297
|
}
|
|
208
298
|
}
|
|
209
299
|
}
|
|
210
|
-
catch (
|
|
300
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
211
301
|
finally {
|
|
212
302
|
try {
|
|
213
|
-
if (
|
|
303
|
+
if (_2 && !_2.done && (_q = _1.return)) _q.call(_1);
|
|
214
304
|
}
|
|
215
|
-
finally { if (
|
|
305
|
+
finally { if (e_7) throw e_7.error; }
|
|
306
|
+
}
|
|
307
|
+
var above = conditionType === "NUMBER_ABOVE_AVERAGE";
|
|
308
|
+
var fullStats = fullRangeStats(rule);
|
|
309
|
+
if (fullStats) {
|
|
310
|
+
averageValue = (0, cf_overlays_1.averageBoundFromStats)(fullStats, above, booleanRule.stdDev);
|
|
216
311
|
}
|
|
217
|
-
if (numericValues.length) {
|
|
218
|
-
averageValue =
|
|
219
|
-
numericValues.reduce(function (sum, entry) { return sum + entry; }, 0) /
|
|
220
|
-
numericValues.length;
|
|
312
|
+
else if (numericValues.length) {
|
|
313
|
+
averageValue = (0, cf_overlays_1.averageBound)(numericValues, above, booleanRule.stdDev);
|
|
221
314
|
}
|
|
222
315
|
}
|
|
223
316
|
// Formula path vs sync path: see `isConditionalFormatFormulaRule`
|
|
@@ -229,8 +322,8 @@ var useConditionalFormatting = function (_a) {
|
|
|
229
322
|
(0, validation_1.shouldUsePreviousValue)((_d = booleanRule === null || booleanRule === void 0 ? void 0 : booleanRule.condition) === null || _d === void 0 ? void 0 : _d.type);
|
|
230
323
|
try {
|
|
231
324
|
// Iterate all cells within this range
|
|
232
|
-
for (var
|
|
233
|
-
var
|
|
325
|
+
for (var _4 = (e_8 = void 0, tslib_1.__values((0, utils_1.iterateCellsInRange)(clampedRange))), _5 = _4.next(); !_5.done; _5 = _4.next()) {
|
|
326
|
+
var _6 = tslib_1.__read(_5.value, 2), rowIndex = _6[0], columnIndex = _6[1];
|
|
234
327
|
var effectiveValue = getValidationValue(sheetId, rowIndex, columnIndex, rule);
|
|
235
328
|
var satisfies = false;
|
|
236
329
|
if (booleanRule === null || booleanRule === void 0 ? void 0 : booleanRule.condition) {
|
|
@@ -240,10 +333,15 @@ var useConditionalFormatting = function (_a) {
|
|
|
240
333
|
isNumberValue(sheetId, rowIndex, columnIndex)) {
|
|
241
334
|
var numericValue = Number(effectiveValue);
|
|
242
335
|
if (Number.isFinite(numericValue)) {
|
|
336
|
+
var inclusive = booleanRule.equalAverage === true;
|
|
243
337
|
satisfies =
|
|
244
338
|
conditionType === "NUMBER_ABOVE_AVERAGE"
|
|
245
|
-
?
|
|
246
|
-
|
|
339
|
+
? inclusive
|
|
340
|
+
? numericValue >= averageValue
|
|
341
|
+
: numericValue > averageValue
|
|
342
|
+
: inclusive
|
|
343
|
+
? numericValue <= averageValue
|
|
344
|
+
: numericValue < averageValue;
|
|
247
345
|
}
|
|
248
346
|
}
|
|
249
347
|
}
|
|
@@ -272,21 +370,21 @@ var useConditionalFormatting = function (_a) {
|
|
|
272
370
|
}
|
|
273
371
|
}
|
|
274
372
|
}
|
|
275
|
-
catch (
|
|
373
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
276
374
|
finally {
|
|
277
375
|
try {
|
|
278
|
-
if (
|
|
376
|
+
if (_5 && !_5.done && (_r = _4.return)) _r.call(_4);
|
|
279
377
|
}
|
|
280
|
-
finally { if (
|
|
378
|
+
finally { if (e_8) throw e_8.error; }
|
|
281
379
|
}
|
|
282
380
|
}
|
|
283
381
|
}
|
|
284
|
-
catch (
|
|
382
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
285
383
|
finally {
|
|
286
384
|
try {
|
|
287
|
-
if (ranges_1_1 && !ranges_1_1.done && (
|
|
385
|
+
if (ranges_1_1 && !ranges_1_1.done && (_p = ranges_1.return)) _p.call(ranges_1);
|
|
288
386
|
}
|
|
289
|
-
finally { if (
|
|
387
|
+
finally { if (e_6) throw e_6.error; }
|
|
290
388
|
}
|
|
291
389
|
}
|
|
292
390
|
else if (gradientRule) {
|
|
@@ -294,7 +392,7 @@ var useConditionalFormatting = function (_a) {
|
|
|
294
392
|
var values = [];
|
|
295
393
|
try {
|
|
296
394
|
// Get colors from all ranges initially
|
|
297
|
-
for (var ranges_2 = (
|
|
395
|
+
for (var ranges_2 = (e_9 = void 0, tslib_1.__values(ranges)), ranges_2_1 = ranges_2.next(); !ranges_2_1.done; ranges_2_1 = ranges_2.next()) {
|
|
298
396
|
var range = ranges_2_1.value;
|
|
299
397
|
// Only pick current sheet
|
|
300
398
|
if ((range === null || range === void 0 ? void 0 : range.sheetId) !== sheetId) {
|
|
@@ -321,18 +419,18 @@ var useConditionalFormatting = function (_a) {
|
|
|
321
419
|
values.push(rangeValues);
|
|
322
420
|
}
|
|
323
421
|
}
|
|
324
|
-
catch (
|
|
422
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
325
423
|
finally {
|
|
326
424
|
try {
|
|
327
|
-
if (ranges_2_1 && !ranges_2_1.done && (
|
|
425
|
+
if (ranges_2_1 && !ranges_2_1.done && (_s = ranges_2.return)) _s.call(ranges_2);
|
|
328
426
|
}
|
|
329
|
-
finally { if (
|
|
427
|
+
finally { if (e_9) throw e_9.error; }
|
|
330
428
|
}
|
|
331
|
-
var colors = (0, heatmap_1.getGradientColors)(values, gradientRule, theme);
|
|
429
|
+
var colors = (0, heatmap_1.getGradientColors)(values, gradientRule, theme, fullRangeStats(rule));
|
|
332
430
|
var rangeIndex = 0;
|
|
333
431
|
try {
|
|
334
432
|
// Apply colors
|
|
335
|
-
for (var ranges_3 = (
|
|
433
|
+
for (var ranges_3 = (e_10 = void 0, tslib_1.__values(ranges)), ranges_3_1 = ranges_3.next(); !ranges_3_1.done; ranges_3_1 = ranges_3.next()) {
|
|
336
434
|
var range = ranges_3_1.value;
|
|
337
435
|
// Only pick current sheet
|
|
338
436
|
if (range.sheetId !== sheetId) {
|
|
@@ -359,17 +457,17 @@ var useConditionalFormatting = function (_a) {
|
|
|
359
457
|
rangeIndex++;
|
|
360
458
|
}
|
|
361
459
|
}
|
|
362
|
-
catch (
|
|
460
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
363
461
|
finally {
|
|
364
462
|
try {
|
|
365
|
-
if (ranges_3_1 && !ranges_3_1.done && (
|
|
463
|
+
if (ranges_3_1 && !ranges_3_1.done && (_t = ranges_3.return)) _t.call(ranges_3);
|
|
366
464
|
}
|
|
367
|
-
finally { if (
|
|
465
|
+
finally { if (e_10) throw e_10.error; }
|
|
368
466
|
}
|
|
369
467
|
}
|
|
370
468
|
else if (topBottomRule) {
|
|
371
469
|
var _loop_2 = function (range) {
|
|
372
|
-
var e_18,
|
|
470
|
+
var e_18, _12, e_19, _13;
|
|
373
471
|
if (range.sheetId !== sheetId) {
|
|
374
472
|
return "continue";
|
|
375
473
|
}
|
|
@@ -383,8 +481,8 @@ var useConditionalFormatting = function (_a) {
|
|
|
383
481
|
}
|
|
384
482
|
var numericCells = [];
|
|
385
483
|
try {
|
|
386
|
-
for (var
|
|
387
|
-
var
|
|
484
|
+
for (var _14 = (e_18 = void 0, tslib_1.__values((0, utils_1.iterateCellsInRange)(clampedRange))), _15 = _14.next(); !_15.done; _15 = _14.next()) {
|
|
485
|
+
var _16 = tslib_1.__read(_15.value, 2), rowIndex = _16[0], columnIndex = _16[1];
|
|
388
486
|
var value = getValidationValue(sheetId, rowIndex, columnIndex, rule);
|
|
389
487
|
if (!(0, isNil_1.default)(value) &&
|
|
390
488
|
isNumberValue(sheetId, rowIndex, columnIndex) &&
|
|
@@ -400,7 +498,7 @@ var useConditionalFormatting = function (_a) {
|
|
|
400
498
|
catch (e_18_1) { e_18 = { error: e_18_1 }; }
|
|
401
499
|
finally {
|
|
402
500
|
try {
|
|
403
|
-
if (
|
|
501
|
+
if (_15 && !_15.done && (_12 = _14.return)) _12.call(_14);
|
|
404
502
|
}
|
|
405
503
|
finally { if (e_18) throw e_18.error; }
|
|
406
504
|
}
|
|
@@ -416,7 +514,11 @@ var useConditionalFormatting = function (_a) {
|
|
|
416
514
|
? b.value - a.value
|
|
417
515
|
: a.value - b.value;
|
|
418
516
|
});
|
|
419
|
-
|
|
517
|
+
// A windowed rule ranks against its full range.
|
|
518
|
+
var fullStats = fullRangeStats(rule);
|
|
519
|
+
var thresholdValue = fullStats
|
|
520
|
+
? fullRangeRankValue(fullStats, topBottomRule)
|
|
521
|
+
: (_g = sorted[Math.min(desiredRank - 1, sorted.length - 1)]) === null || _g === void 0 ? void 0 : _g.value;
|
|
420
522
|
if (thresholdValue === undefined) {
|
|
421
523
|
return "continue";
|
|
422
524
|
}
|
|
@@ -441,28 +543,28 @@ var useConditionalFormatting = function (_a) {
|
|
|
441
543
|
catch (e_19_1) { e_19 = { error: e_19_1 }; }
|
|
442
544
|
finally {
|
|
443
545
|
try {
|
|
444
|
-
if (numericCells_1_1 && !numericCells_1_1.done && (
|
|
546
|
+
if (numericCells_1_1 && !numericCells_1_1.done && (_13 = numericCells_1.return)) _13.call(numericCells_1);
|
|
445
547
|
}
|
|
446
548
|
finally { if (e_19) throw e_19.error; }
|
|
447
549
|
}
|
|
448
550
|
};
|
|
449
551
|
try {
|
|
450
|
-
for (var ranges_4 = (
|
|
552
|
+
for (var ranges_4 = (e_11 = void 0, tslib_1.__values(ranges)), ranges_4_1 = ranges_4.next(); !ranges_4_1.done; ranges_4_1 = ranges_4.next()) {
|
|
451
553
|
var range = ranges_4_1.value;
|
|
452
554
|
_loop_2(range);
|
|
453
555
|
}
|
|
454
556
|
}
|
|
455
|
-
catch (
|
|
557
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
456
558
|
finally {
|
|
457
559
|
try {
|
|
458
|
-
if (ranges_4_1 && !ranges_4_1.done && (
|
|
560
|
+
if (ranges_4_1 && !ranges_4_1.done && (_u = ranges_4.return)) _u.call(ranges_4);
|
|
459
561
|
}
|
|
460
|
-
finally { if (
|
|
562
|
+
finally { if (e_11) throw e_11.error; }
|
|
461
563
|
}
|
|
462
564
|
}
|
|
463
565
|
else if (distinctRule) {
|
|
464
566
|
try {
|
|
465
|
-
for (var ranges_5 = (
|
|
567
|
+
for (var ranges_5 = (e_12 = void 0, tslib_1.__values(ranges)), ranges_5_1 = ranges_5.next(); !ranges_5_1.done; ranges_5_1 = ranges_5.next()) {
|
|
466
568
|
var range = ranges_5_1.value;
|
|
467
569
|
if (range.sheetId !== sheetId) {
|
|
468
570
|
continue;
|
|
@@ -477,8 +579,8 @@ var useConditionalFormatting = function (_a) {
|
|
|
477
579
|
}
|
|
478
580
|
var occurrences = new Map();
|
|
479
581
|
try {
|
|
480
|
-
for (var
|
|
481
|
-
var
|
|
582
|
+
for (var _7 = (e_13 = void 0, tslib_1.__values((0, utils_1.iterateCellsInRange)(clampedRange))), _8 = _7.next(); !_8.done; _8 = _7.next()) {
|
|
583
|
+
var _9 = tslib_1.__read(_8.value, 2), rowIndex = _9[0], columnIndex = _9[1];
|
|
482
584
|
var value = getValidationValue(sheetId, rowIndex, columnIndex, rule);
|
|
483
585
|
if ((0, isNil_1.default)(value)) {
|
|
484
586
|
continue;
|
|
@@ -494,24 +596,24 @@ var useConditionalFormatting = function (_a) {
|
|
|
494
596
|
occurrences.get(key).push({ rowIndex: rowIndex, columnIndex: columnIndex });
|
|
495
597
|
}
|
|
496
598
|
}
|
|
497
|
-
catch (
|
|
599
|
+
catch (e_13_1) { e_13 = { error: e_13_1 }; }
|
|
498
600
|
finally {
|
|
499
601
|
try {
|
|
500
|
-
if (
|
|
602
|
+
if (_8 && !_8.done && (_w = _7.return)) _w.call(_7);
|
|
501
603
|
}
|
|
502
|
-
finally { if (
|
|
604
|
+
finally { if (e_13) throw e_13.error; }
|
|
503
605
|
}
|
|
504
606
|
var shouldFormat = function (count) {
|
|
505
607
|
return distinctRule.type === "DUPLICATE" ? count > 1 : count === 1;
|
|
506
608
|
};
|
|
507
609
|
try {
|
|
508
|
-
for (var
|
|
509
|
-
var cells =
|
|
610
|
+
for (var _10 = (e_14 = void 0, tslib_1.__values(occurrences.values())), _11 = _10.next(); !_11.done; _11 = _10.next()) {
|
|
611
|
+
var cells = _11.value;
|
|
510
612
|
if (!shouldFormat(cells.length)) {
|
|
511
613
|
continue;
|
|
512
614
|
}
|
|
513
615
|
try {
|
|
514
|
-
for (var cells_1 = (
|
|
616
|
+
for (var cells_1 = (e_15 = void 0, tslib_1.__values(cells)), cells_1_1 = cells_1.next(); !cells_1_1.done; cells_1_1 = cells_1.next()) {
|
|
515
617
|
var cell = cells_1_1.value;
|
|
516
618
|
var cellId = (0, grid_1.cellIdentifier)(cell.rowIndex, cell.columnIndex);
|
|
517
619
|
if (stopCells.has(cellId)) {
|
|
@@ -523,218 +625,166 @@ var useConditionalFormatting = function (_a) {
|
|
|
523
625
|
}
|
|
524
626
|
}
|
|
525
627
|
}
|
|
526
|
-
catch (
|
|
628
|
+
catch (e_15_1) { e_15 = { error: e_15_1 }; }
|
|
527
629
|
finally {
|
|
528
630
|
try {
|
|
529
|
-
if (cells_1_1 && !cells_1_1.done && (
|
|
631
|
+
if (cells_1_1 && !cells_1_1.done && (_y = cells_1.return)) _y.call(cells_1);
|
|
530
632
|
}
|
|
531
|
-
finally { if (
|
|
633
|
+
finally { if (e_15) throw e_15.error; }
|
|
532
634
|
}
|
|
533
635
|
}
|
|
534
636
|
}
|
|
535
|
-
catch (
|
|
637
|
+
catch (e_14_1) { e_14 = { error: e_14_1 }; }
|
|
536
638
|
finally {
|
|
537
639
|
try {
|
|
538
|
-
if (
|
|
640
|
+
if (_11 && !_11.done && (_x = _10.return)) _x.call(_10);
|
|
539
641
|
}
|
|
540
|
-
finally { if (
|
|
642
|
+
finally { if (e_14) throw e_14.error; }
|
|
541
643
|
}
|
|
542
644
|
}
|
|
543
645
|
}
|
|
544
|
-
catch (
|
|
646
|
+
catch (e_12_1) { e_12 = { error: e_12_1 }; }
|
|
545
647
|
finally {
|
|
546
648
|
try {
|
|
547
|
-
if (ranges_5_1 && !ranges_5_1.done && (
|
|
649
|
+
if (ranges_5_1 && !ranges_5_1.done && (_v = ranges_5.return)) _v.call(ranges_5);
|
|
548
650
|
}
|
|
549
|
-
finally { if (
|
|
651
|
+
finally { if (e_12) throw e_12.error; }
|
|
550
652
|
}
|
|
551
653
|
}
|
|
552
654
|
else if (iconSetRule) {
|
|
553
|
-
var
|
|
554
|
-
if (!
|
|
655
|
+
var iconCount_1 = (_h = cf_overlays_1.ICON_SET_GLYPHS[iconSetRule.iconSet]) === null || _h === void 0 ? void 0 : _h.length;
|
|
656
|
+
if (!iconCount_1) {
|
|
555
657
|
conditionIndex++;
|
|
556
658
|
return "continue";
|
|
557
659
|
}
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
var
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
cellValues.push({ rowIndex: rowIndex, columnIndex: columnIndex, value: num });
|
|
582
|
-
if (num < rangeMin)
|
|
583
|
-
rangeMin = num;
|
|
584
|
-
if (num > rangeMax)
|
|
585
|
-
rangeMax = num;
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
catch (e_20_1) { e_20 = { error: e_20_1 }; }
|
|
590
|
-
finally {
|
|
591
|
-
try {
|
|
592
|
-
if (_19 && !_19.done && (_16 = _18.return)) _16.call(_18);
|
|
593
|
-
}
|
|
594
|
-
finally { if (e_20) throw e_20.error; }
|
|
660
|
+
// Thresholds resolve over the rule's whole applies-to range.
|
|
661
|
+
var cellValues = collectRuleNumbers(rule);
|
|
662
|
+
if (cellValues.length === 0) {
|
|
663
|
+
conditionIndex++;
|
|
664
|
+
return "continue";
|
|
665
|
+
}
|
|
666
|
+
var stats_1 = (_j = fullRangeStats(rule)) !== null && _j !== void 0 ? _j : (0, cf_overlays_1.buildCfRangeStats)(cellValues.map(function (cell) { return cell.value; }));
|
|
667
|
+
var thresholds = iconSetRule.thresholds
|
|
668
|
+
.slice(0, iconCount_1 - 1)
|
|
669
|
+
.map(function (t) { return (0, cf_overlays_1.resolveCfThreshold)(t, stats_1, { resolveFormula: resolveFormula }); });
|
|
670
|
+
var strict = iconSetRule.thresholds
|
|
671
|
+
.slice(0, iconCount_1 - 1)
|
|
672
|
+
.map(function (t) { return t.gte === false; });
|
|
673
|
+
var hideValue = iconSetRule.showValue === false;
|
|
674
|
+
// The icon a bucket shows: the custom mix when set, else the
|
|
675
|
+
// family's icon (reversed when asked).
|
|
676
|
+
var bucketIcon = function (bucket) {
|
|
677
|
+
var _a;
|
|
678
|
+
var custom = (_a = iconSetRule.icons) === null || _a === void 0 ? void 0 : _a[bucket];
|
|
679
|
+
if (custom) {
|
|
680
|
+
return custom.iconSet === "NoIcons"
|
|
681
|
+
? undefined
|
|
682
|
+
: { iconSet: custom.iconSet, iconId: custom.iconId };
|
|
595
683
|
}
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
var glyphIndex = Math.min(bucket, orderedGlyphs.length - 1);
|
|
610
|
-
var glyph = orderedGlyphs[glyphIndex];
|
|
611
|
-
var color = orderedColors[Math.min(bucket, orderedColors.length - 1)];
|
|
684
|
+
return {
|
|
685
|
+
iconSet: iconSetRule.iconSet,
|
|
686
|
+
iconId: iconSetRule.reverse ? iconCount_1 - 1 - bucket : bucket,
|
|
687
|
+
};
|
|
688
|
+
};
|
|
689
|
+
try {
|
|
690
|
+
for (var cellValues_1 = (e_16 = void 0, tslib_1.__values(cellValues)), cellValues_1_1 = cellValues_1.next(); !cellValues_1_1.done; cellValues_1_1 = cellValues_1.next()) {
|
|
691
|
+
var cell = cellValues_1_1.value;
|
|
692
|
+
var cellId = (0, grid_1.cellIdentifier)(cell.rowIndex, cell.columnIndex);
|
|
693
|
+
if (stopCells.has(cellId))
|
|
694
|
+
continue;
|
|
695
|
+
var icon = bucketIcon((0, cf_overlays_1.pickIconBucket)(cell.value, thresholds, strict));
|
|
696
|
+
if (icon) {
|
|
612
697
|
layerFormat(cellId, {
|
|
613
|
-
// iconSet + iconId
|
|
614
|
-
//
|
|
615
|
-
|
|
616
|
-
conditionalIcon: {
|
|
617
|
-
glyph: glyph,
|
|
618
|
-
color: color,
|
|
619
|
-
iconSet: iconSetRule.iconSet,
|
|
620
|
-
iconId: glyphIndex,
|
|
621
|
-
},
|
|
698
|
+
// iconSet + iconId drive the painter and the icon column
|
|
699
|
+
// filter; `glyph` / `color` are the text stand-ins.
|
|
700
|
+
conditionalIcon: tslib_1.__assign({ glyph: (_l = (_k = cf_overlays_1.ICON_SET_GLYPHS[icon.iconSet]) === null || _k === void 0 ? void 0 : _k[icon.iconId]) !== null && _l !== void 0 ? _l : "", color: (_m = cf_overlays_1.ICON_SET_COLORS[icon.iconSet]) === null || _m === void 0 ? void 0 : _m[icon.iconId], iconSet: icon.iconSet, iconId: icon.iconId }, (hideValue ? { hideValue: hideValue } : {})),
|
|
622
701
|
});
|
|
623
|
-
if (rule.stopIfTrue)
|
|
624
|
-
stopCells.add(cellId);
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
catch (e_21_1) { e_21 = { error: e_21_1 }; }
|
|
628
|
-
finally {
|
|
629
|
-
try {
|
|
630
|
-
if (cellValues_2_1 && !cellValues_2_1.done && (_17 = cellValues_2.return)) _17.call(cellValues_2);
|
|
631
702
|
}
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
};
|
|
635
|
-
try {
|
|
636
|
-
for (var ranges_6 = (e_14 = void 0, tslib_1.__values(ranges)), ranges_6_1 = ranges_6.next(); !ranges_6_1.done; ranges_6_1 = ranges_6.next()) {
|
|
637
|
-
var range = ranges_6_1.value;
|
|
638
|
-
_loop_3(range);
|
|
703
|
+
if (rule.stopIfTrue)
|
|
704
|
+
stopCells.add(cellId);
|
|
639
705
|
}
|
|
640
706
|
}
|
|
641
|
-
catch (
|
|
707
|
+
catch (e_16_1) { e_16 = { error: e_16_1 }; }
|
|
642
708
|
finally {
|
|
643
709
|
try {
|
|
644
|
-
if (
|
|
710
|
+
if (cellValues_1_1 && !cellValues_1_1.done && (_z = cellValues_1.return)) _z.call(cellValues_1);
|
|
645
711
|
}
|
|
646
|
-
finally { if (
|
|
712
|
+
finally { if (e_16) throw e_16.error; }
|
|
647
713
|
}
|
|
648
714
|
}
|
|
649
715
|
else if (dataBarRule) {
|
|
716
|
+
// Excel resolves a data bar's bounds over the rule's whole applies-to
|
|
717
|
+
// range (every area of a multi-area rule together).
|
|
718
|
+
var cellValues = collectRuleNumbers(rule);
|
|
719
|
+
if (cellValues.length === 0) {
|
|
720
|
+
conditionIndex++;
|
|
721
|
+
return "continue";
|
|
722
|
+
}
|
|
723
|
+
var stats = (_o = fullRangeStats(rule)) !== null && _o !== void 0 ? _o : (0, cf_overlays_1.buildCfRangeStats)(cellValues.map(function (cell) { return cell.value; }));
|
|
724
|
+
var resolvedMin = (0, cf_overlays_1.resolveCfThreshold)(dataBarRule.minpoint, stats, {
|
|
725
|
+
role: "min",
|
|
726
|
+
resolveFormula: resolveFormula,
|
|
727
|
+
});
|
|
728
|
+
var resolvedMax = (0, cf_overlays_1.resolveCfThreshold)(dataBarRule.maxpoint, stats, {
|
|
729
|
+
role: "max",
|
|
730
|
+
resolveFormula: resolveFormula,
|
|
731
|
+
});
|
|
732
|
+
var min = Number.isFinite(resolvedMin) ? resolvedMin : stats.min;
|
|
733
|
+
var max = Number.isFinite(resolvedMax) ? resolvedMax : stats.max;
|
|
650
734
|
var barColor = (0, themes_1.getStringifiedColor)(dataBarRule.color, theme);
|
|
651
735
|
var negativeColor = dataBarRule.negativeColor
|
|
652
736
|
? (0, themes_1.getStringifiedColor)(dataBarRule.negativeColor, theme)
|
|
653
|
-
:
|
|
737
|
+
: barColor;
|
|
654
738
|
var borderColor = dataBarRule.borderColor
|
|
655
739
|
? (0, themes_1.getStringifiedColor)(dataBarRule.borderColor, theme)
|
|
656
740
|
: undefined;
|
|
741
|
+
var negativeBorderColor = dataBarRule.negativeBorderColor
|
|
742
|
+
? (0, themes_1.getStringifiedColor)(dataBarRule.negativeBorderColor, theme)
|
|
743
|
+
: borderColor;
|
|
744
|
+
var axisColor = dataBarRule.axisColor
|
|
745
|
+
? (0, themes_1.getStringifiedColor)(dataBarRule.axisColor, theme)
|
|
746
|
+
: undefined;
|
|
657
747
|
var direction = dataBarRule.direction === "rightToLeft"
|
|
658
748
|
? "rightToLeft"
|
|
659
749
|
: "leftToRight";
|
|
750
|
+
var hideValue = dataBarRule.showValue === false;
|
|
660
751
|
try {
|
|
661
|
-
for (var
|
|
662
|
-
var
|
|
663
|
-
|
|
752
|
+
for (var cellValues_2 = (e_17 = void 0, tslib_1.__values(cellValues)), cellValues_2_1 = cellValues_2.next(); !cellValues_2_1.done; cellValues_2_1 = cellValues_2.next()) {
|
|
753
|
+
var cell = cellValues_2_1.value;
|
|
754
|
+
var cellId = (0, grid_1.cellIdentifier)(cell.rowIndex, cell.columnIndex);
|
|
755
|
+
if (stopCells.has(cellId))
|
|
664
756
|
continue;
|
|
665
|
-
var
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
Number.isFinite(Number(v))) {
|
|
676
|
-
var num = Number(v);
|
|
677
|
-
cellValues.push({ rowIndex: rowIndex, columnIndex: columnIndex, value: num });
|
|
678
|
-
if (num < rangeMin)
|
|
679
|
-
rangeMin = num;
|
|
680
|
-
if (num > rangeMax)
|
|
681
|
-
rangeMax = num;
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
catch (e_16_1) { e_16 = { error: e_16_1 }; }
|
|
686
|
-
finally {
|
|
687
|
-
try {
|
|
688
|
-
if (_9 && !_9.done && (_v = _8.return)) _v.call(_8);
|
|
689
|
-
}
|
|
690
|
-
finally { if (e_16) throw e_16.error; }
|
|
691
|
-
}
|
|
692
|
-
if (cellValues.length === 0)
|
|
757
|
+
var geometry = (0, cf_data_bar_1.computeDataBarGeometry)({
|
|
758
|
+
value: cell.value,
|
|
759
|
+
min: min,
|
|
760
|
+
max: max,
|
|
761
|
+
axisPosition: dataBarRule.axisPosition,
|
|
762
|
+
minLength: dataBarRule.minLength,
|
|
763
|
+
maxLength: dataBarRule.maxLength,
|
|
764
|
+
direction: direction,
|
|
765
|
+
});
|
|
766
|
+
if (!geometry)
|
|
693
767
|
continue;
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
? Math.abs(resolvedMin)
|
|
707
|
-
: Math.max(resolvedMin, resolvedMax));
|
|
708
|
-
layerFormat(cellId, {
|
|
709
|
-
conditionalDataBar: {
|
|
710
|
-
color: isNegative
|
|
711
|
-
? negativeColor
|
|
712
|
-
: barColor,
|
|
713
|
-
fillFraction: fill,
|
|
714
|
-
negative: isNegative,
|
|
715
|
-
borderColor: borderColor,
|
|
716
|
-
direction: direction,
|
|
717
|
-
},
|
|
718
|
-
});
|
|
719
|
-
if (rule.stopIfTrue)
|
|
720
|
-
stopCells.add(cellId);
|
|
721
|
-
}
|
|
722
|
-
}
|
|
723
|
-
catch (e_17_1) { e_17 = { error: e_17_1 }; }
|
|
724
|
-
finally {
|
|
725
|
-
try {
|
|
726
|
-
if (cellValues_1_1 && !cellValues_1_1.done && (_w = cellValues_1.return)) _w.call(cellValues_1);
|
|
727
|
-
}
|
|
728
|
-
finally { if (e_17) throw e_17.error; }
|
|
729
|
-
}
|
|
768
|
+
layerFormat(cellId, {
|
|
769
|
+
conditionalDataBar: tslib_1.__assign(tslib_1.__assign({ color: geometry.negative ? negativeColor : barColor, fillFraction: geometry.barEnd - geometry.barStart, negative: geometry.negative, borderColor: geometry.negative
|
|
770
|
+
? negativeBorderColor
|
|
771
|
+
: borderColor, direction: direction, barStart: geometry.barStart, barEnd: geometry.barEnd, gradient: dataBarRule.gradient !== false }, (geometry.axisPosition !== undefined
|
|
772
|
+
? {
|
|
773
|
+
axisPosition: geometry.axisPosition,
|
|
774
|
+
axisColor: axisColor !== null && axisColor !== void 0 ? axisColor : "#000000",
|
|
775
|
+
}
|
|
776
|
+
: {})), (hideValue ? { hideValue: hideValue } : {})),
|
|
777
|
+
});
|
|
778
|
+
if (rule.stopIfTrue)
|
|
779
|
+
stopCells.add(cellId);
|
|
730
780
|
}
|
|
731
781
|
}
|
|
732
|
-
catch (
|
|
782
|
+
catch (e_17_1) { e_17 = { error: e_17_1 }; }
|
|
733
783
|
finally {
|
|
734
784
|
try {
|
|
735
|
-
if (
|
|
785
|
+
if (cellValues_2_1 && !cellValues_2_1.done && (_0 = cellValues_2.return)) _0.call(cellValues_2);
|
|
736
786
|
}
|
|
737
|
-
finally { if (
|
|
787
|
+
finally { if (e_17) throw e_17.error; }
|
|
738
788
|
}
|
|
739
789
|
}
|
|
740
790
|
conditionIndex++;
|
|
@@ -766,6 +816,7 @@ var useConditionalFormatting = function (_a) {
|
|
|
766
816
|
getSheetColumnCount,
|
|
767
817
|
evaluationWindow,
|
|
768
818
|
getConditionalFormatResult,
|
|
819
|
+
getConditionalFormatRuleStats,
|
|
769
820
|
]);
|
|
770
821
|
};
|
|
771
822
|
exports.useConditionalFormatting = useConditionalFormatting;
|