@rowsncolumns/toolkit 24.5.4 → 24.5.6
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/autofilter-condition.js +6 -2
- package/dist/cjs/excel-parser/helpers.d.ts +9 -1
- package/dist/cjs/excel-parser/helpers.d.ts.map +1 -1
- package/dist/cjs/excel-parser/helpers.js +70 -16
- package/dist/cjs/excel-parser/interface.d.ts +9 -1
- package/dist/cjs/excel-parser/interface.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/conditional-formatting.js +61 -6
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/data-validations.js +13 -2
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts +8 -1
- package/dist/cjs/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/index.js +159 -26
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts +17 -2
- package/dist/cjs/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/styles.js +25 -14
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -1
- package/dist/cjs/excel-parser/plugins/xlsx/value-type-detection.js +19 -15
- package/dist/cjs/excel-parser/types.d.ts +5 -1
- package/dist/cjs/excel-parser/types.d.ts.map +1 -1
- package/dist/cjs/excel-parser/workbook.d.ts +1 -0
- package/dist/cjs/excel-parser/workbook.d.ts.map +1 -1
- package/dist/cjs/excel-parser/workbook.js +4 -0
- package/dist/cjs/excel-parser/worker.js +3 -0
- package/dist/cjs/exporter/xlsx/chart-builder.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/chart-builder.js +167 -53
- package/dist/cjs/exporter/xlsx/future-functions.d.ts +6 -7
- package/dist/cjs/exporter/xlsx/future-functions.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/future-functions.js +5 -261
- package/dist/cjs/exporter/xlsx/style-builder.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/style-builder.js +62 -19
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts +10 -2
- package/dist/cjs/exporter/xlsx/xlsx-export.d.ts.map +1 -1
- package/dist/cjs/exporter/xlsx/xlsx-export.js +404 -158
- package/dist/cjs/helpers/excel-formula-prefixes.d.ts +51 -0
- package/dist/cjs/helpers/excel-formula-prefixes.d.ts.map +1 -0
- package/dist/cjs/helpers/excel-formula-prefixes.js +548 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/autofilter-condition.js +6 -2
- package/dist/esm/excel-parser/helpers.d.ts +9 -1
- package/dist/esm/excel-parser/helpers.d.ts.map +1 -1
- package/dist/esm/excel-parser/helpers.js +65 -3
- package/dist/esm/excel-parser/interface.d.ts +9 -1
- package/dist/esm/excel-parser/interface.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/conditional-formatting.js +42 -1
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/data-validations.js +11 -2
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts +8 -1
- package/dist/esm/excel-parser/plugins/xlsx/index.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/index.js +109 -4
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts +17 -2
- package/dist/esm/excel-parser/plugins/xlsx/styles.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/styles.js +20 -8
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.d.ts.map +1 -1
- package/dist/esm/excel-parser/plugins/xlsx/value-type-detection.js +13 -9
- package/dist/esm/excel-parser/types.d.ts +5 -1
- package/dist/esm/excel-parser/types.d.ts.map +1 -1
- package/dist/esm/excel-parser/workbook.d.ts +1 -0
- package/dist/esm/excel-parser/workbook.d.ts.map +1 -1
- package/dist/esm/excel-parser/workbook.js +3 -0
- package/dist/esm/excel-parser/worker.js +3 -0
- package/dist/esm/exporter/xlsx/chart-builder.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/chart-builder.js +80 -0
- package/dist/esm/exporter/xlsx/future-functions.d.ts +6 -7
- package/dist/esm/exporter/xlsx/future-functions.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/future-functions.js +5 -261
- package/dist/esm/exporter/xlsx/style-builder.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/style-builder.js +56 -18
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts +10 -2
- package/dist/esm/exporter/xlsx/xlsx-export.d.ts.map +1 -1
- package/dist/esm/exporter/xlsx/xlsx-export.js +338 -106
- package/dist/esm/helpers/excel-formula-prefixes.d.ts +51 -0
- package/dist/esm/helpers/excel-formula-prefixes.d.ts.map +1 -0
- package/dist/esm/helpers/excel-formula-prefixes.js +531 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parse } from "@rowsncolumns/date-parser";
|
|
2
|
-
import { isAFormula, isNil, toDate,
|
|
2
|
+
import { isAFormula, isNil, toDate, toSerialFromParts, } from "@rowsncolumns/utils";
|
|
3
3
|
export const pattern_percent = "0%";
|
|
4
4
|
export const pattern_percent_decimal = "0.00%";
|
|
5
5
|
export const pattern_currency = '"$"#,##0';
|
|
@@ -80,18 +80,18 @@ export const createNumberValue = (value, numFormatType, locale) => {
|
|
|
80
80
|
const isDate = numFormatType === "DATE";
|
|
81
81
|
const isDateTime = numFormatType === "DATE_TIME";
|
|
82
82
|
if (typeof value !== "boolean" && (isDate || isDateTime)) {
|
|
83
|
+
// A number is already a serial — the Date type only changes its format;
|
|
84
|
+
// a `toDate`/`toSerial` round trip moved Excel's phantom 1900-02-29 (60)
|
|
85
|
+
// onto the 28th (rowsncolumns/spreadsheet#1026).
|
|
83
86
|
if (typeof value === "number") {
|
|
84
|
-
|
|
85
|
-
if (!isNil(dateValue) && dateValue instanceof Date) {
|
|
86
|
-
return toSerial(dateValue);
|
|
87
|
-
}
|
|
87
|
+
return value;
|
|
88
88
|
}
|
|
89
89
|
const dateValue = isDate
|
|
90
90
|
? validateDate(value, locale)
|
|
91
91
|
: validateDateTime(value);
|
|
92
92
|
if (dateValue) {
|
|
93
93
|
const { parts: { year, month, day, hour, minute, second }, } = dateValue;
|
|
94
|
-
return
|
|
94
|
+
return toSerialFromParts(year, month, day, hour, minute, second);
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
return convertToNumber(value);
|
|
@@ -198,12 +198,16 @@ export const validateDate = (value, locale) => {
|
|
|
198
198
|
if (!result)
|
|
199
199
|
return undefined;
|
|
200
200
|
const { dateValue } = result;
|
|
201
|
+
// Excel's phantom 1900-02-29: the parser's stand-in `Date` sits on the 28th
|
|
202
|
+
// with `excelLeapDay` set; report the typed day so the serial lands on 60
|
|
203
|
+
// (rowsncolumns/spreadsheet#1026).
|
|
204
|
+
const day = "excelLeapDay" in result && result.excelLeapDay ? 29 : dateValue.getDate();
|
|
201
205
|
return {
|
|
202
206
|
format: result.pattern,
|
|
203
207
|
parts: {
|
|
204
208
|
year: dateValue.getFullYear(),
|
|
205
209
|
month: dateValue.getMonth(),
|
|
206
|
-
day
|
|
210
|
+
day,
|
|
207
211
|
hour: dateValue.getHours(),
|
|
208
212
|
minute: dateValue.getMinutes(),
|
|
209
213
|
second: dateValue.getSeconds(),
|
|
@@ -374,13 +378,13 @@ export const detectValueTypeAndPattern = (value, locale) => {
|
|
|
374
378
|
const dateValue = validateDate(value, locale);
|
|
375
379
|
if (dateValue) {
|
|
376
380
|
const { parts: { year, month, day, hour, minute, second }, } = dateValue;
|
|
377
|
-
const numberValue =
|
|
381
|
+
const numberValue = toSerialFromParts(year, month, day, hour, minute, second);
|
|
378
382
|
return ["numberValue", "DATE", numberValue, dateValue.format];
|
|
379
383
|
}
|
|
380
384
|
const dateTimeValue = validateDateTime(value);
|
|
381
385
|
if (dateTimeValue) {
|
|
382
386
|
const { parts: { year, month, day, hour, minute, second }, } = dateTimeValue;
|
|
383
|
-
const numberValue =
|
|
387
|
+
const numberValue = toSerialFromParts(year, month, day, hour, minute, second);
|
|
384
388
|
return ["numberValue", "DATE_TIME", numberValue, dateTimeValue.format];
|
|
385
389
|
}
|
|
386
390
|
return ["stringValue"];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CellData, ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, NamedRange, ProtectedRange, Slicer, SpreadsheetTheme, TableView } from "@rowsncolumns/spreadsheet";
|
|
1
|
+
import type { CellData, ConditionalFormatRule, DataValidationRuleRecord, EmbeddedChart, NamedRange, ProtectedRange, Slicer, SpreadsheetTheme, TableView, WorkbookProtection } from "@rowsncolumns/spreadsheet";
|
|
2
2
|
import type { CommentThread, IterativeCalculationOptions, NamedCellStyle } from "@rowsncolumns/common-types";
|
|
3
3
|
import type { CustomTableStyle, EmbeddedObject } from "@rowsncolumns/spreadsheet";
|
|
4
4
|
import { type Sheet } from "@rowsncolumns/spreadsheet";
|
|
@@ -217,6 +217,8 @@ export type WorkerResponse = {
|
|
|
217
217
|
error?: string;
|
|
218
218
|
requiresRecalc?: boolean;
|
|
219
219
|
iterativeCalculationOptions?: IterativeCalculationOptions;
|
|
220
|
+
/** `<workbookProtection>` — Excel's "Protect Workbook" state, when present. */
|
|
221
|
+
workbookProtection?: WorkbookProtection;
|
|
220
222
|
/**
|
|
221
223
|
* The source workbook declared the 1904 date system. The emitted cell
|
|
222
224
|
* data is already converted to the 1900 system (date-formatted
|
|
@@ -349,6 +351,8 @@ export type WorkerResponse = {
|
|
|
349
351
|
namedRanges: NamedRange[];
|
|
350
352
|
requiresRecalc?: boolean;
|
|
351
353
|
iterativeCalculationOptions?: IterativeCalculationOptions;
|
|
354
|
+
/** `<workbookProtection>` — Excel's "Protect Workbook" state, when present. */
|
|
355
|
+
workbookProtection?: WorkbookProtection;
|
|
352
356
|
/** Source workbook was 1904-system; chunk data is 1900-system (see `PARSE_EXCEL_SUCCESS`). */
|
|
353
357
|
use1904?: boolean;
|
|
354
358
|
} | ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../excel-parser/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,qBAAqB,EACrB,wBAAwB,EACxB,aAAa,EACb,UAAU,EACV,cAAc,EACd,MAAM,EACN,gBAAgB,EAChB,SAAS,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../excel-parser/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,7 @@ export declare class WorkBook implements IWorkbookPlugin {
|
|
|
31
31
|
get sharedFormulaMap(): Map<string, [string, string]> | undefined;
|
|
32
32
|
requiresRecalc(): boolean;
|
|
33
33
|
getIterativeCalculationOptions(): import("@rowsncolumns/common-types").IterativeCalculationOptions | undefined;
|
|
34
|
+
getWorkbookProtection(): import("@rowsncolumns/spreadsheet").WorkbookProtection | undefined;
|
|
34
35
|
getUse1904Epoch(): boolean;
|
|
35
36
|
getSharedStrings(): string[];
|
|
36
37
|
processSheetData(chunkSize?: number, enableCellXfsRegistry?: boolean, enableSharedStrings?: boolean, onPhase?: (phase: string, sheetTitle?: string) => void): AsyncGenerator<import("./types").ProcessSheetDataResult, void, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbook.d.ts","sourceRoot":"","sources":["../../../excel-parser/workbook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,2BAA2B,IAAI,4BAA4B,EAC3D,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACV,+BAA+B,EAC/B,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAsBjB,qBAAa,QAAS,YAAW,eAAe;IAC9C,OAAO,CAAC,MAAM,CAAmB;;IAI3B,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAqB3E,OAAO;IAIP,aAAa;IAIb,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;IAIvD;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAe/C,QAAQ,CACZ,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAehC,QAAQ;IAIR,6EAA6E;IAC7E,kBAAkB;IAGlB,oBAAoB;IAIpB,0EAA0E;IAC1E,cAAc;IAId,QAAQ;IAIR,UAAU;IAIV,SAAS;IAIT,IAAI,cAAc,QAEjB;IAED,IAAI,aAAa,yBAEhB;IAED,IAAI,oBAAoB,kFAEvB;IAED,IAAI,gBAAgB,8CAEnB;IAED,cAAc;IAId,8BAA8B;IAI9B,eAAe;IAIf,gBAAgB;IAIhB,gBAAgB,CACd,SAAS,CAAC,EAAE,MAAM,EAClB,qBAAqB,CAAC,EAAE,OAAO,EAC/B,mBAAmB,CAAC,EAAE,OAAO,EAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI;IAUxD,wBAAwB,CAAC,OAAO,EAAE,+BAA+B;IAmBjE,kBAAkB,CAAC,OAAO,EAAE,MAAM;IAIlC,WAAW;IAIX,SAAS;IAIT,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM;IAgBzC,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM;IAgBnC,cAAc;IAId,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM;IAInC,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM;IAIlC,UAAU;IAIV,cAAc;IAId,aAAa;IAIb,gBAAgB;IAIV,aAAa;IAInB,cAAc,CAAC,MAAM,EAAE,GAAG;CAM3B;AAED,eAAO,MAAM,2BAA2B,qCAA+B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"workbook.d.ts","sourceRoot":"","sources":["../../../excel-parser/workbook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,2BAA2B,IAAI,4BAA4B,EAC3D,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EACV,+BAA+B,EAC/B,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAsBjB,qBAAa,QAAS,YAAW,eAAe;IAC9C,OAAO,CAAC,MAAM,CAAmB;;IAI3B,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAqB3E,OAAO;IAIP,aAAa;IAIb,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;IAIvD;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAe/C,QAAQ,CACZ,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAehC,QAAQ;IAIR,6EAA6E;IAC7E,kBAAkB;IAGlB,oBAAoB;IAIpB,0EAA0E;IAC1E,cAAc;IAId,QAAQ;IAIR,UAAU;IAIV,SAAS;IAIT,IAAI,cAAc,QAEjB;IAED,IAAI,aAAa,yBAEhB;IAED,IAAI,oBAAoB,kFAEvB;IAED,IAAI,gBAAgB,8CAEnB;IAED,cAAc;IAId,8BAA8B;IAI9B,qBAAqB;IAIrB,eAAe;IAIf,gBAAgB;IAIhB,gBAAgB,CACd,SAAS,CAAC,EAAE,MAAM,EAClB,qBAAqB,CAAC,EAAE,OAAO,EAC/B,mBAAmB,CAAC,EAAE,OAAO,EAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI;IAUxD,wBAAwB,CAAC,OAAO,EAAE,+BAA+B;IAmBjE,kBAAkB,CAAC,OAAO,EAAE,MAAM;IAIlC,WAAW;IAIX,SAAS;IAIT,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM;IAgBzC,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM;IAgBnC,cAAc;IAId,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM;IAInC,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM;IAIlC,UAAU;IAIV,cAAc;IAId,aAAa;IAIb,gBAAgB;IAIV,aAAa;IAInB,cAAc,CAAC,MAAM,EAAE,GAAG;CAM3B;AAED,eAAO,MAAM,2BAA2B,qCAA+B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -117,6 +117,9 @@ export class WorkBook {
|
|
|
117
117
|
getIterativeCalculationOptions() {
|
|
118
118
|
return this.plugin.getIterativeCalculationOptions();
|
|
119
119
|
}
|
|
120
|
+
getWorkbookProtection() {
|
|
121
|
+
return this.plugin.getWorkbookProtection?.();
|
|
122
|
+
}
|
|
120
123
|
getUse1904Epoch() {
|
|
121
124
|
return this.plugin.getUse1904Epoch();
|
|
122
125
|
}
|
|
@@ -176,6 +176,7 @@ const postOpenWorkbookComplete = async (s) => {
|
|
|
176
176
|
namedRanges: s.workbook.getNamedRanges(),
|
|
177
177
|
requiresRecalc: s.workbook.requiresRecalc(),
|
|
178
178
|
iterativeCalculationOptions: s.workbook.getIterativeCalculationOptions(),
|
|
179
|
+
workbookProtection: s.workbook.getWorkbookProtection(),
|
|
179
180
|
use1904: s.workbook.getUse1904Epoch(),
|
|
180
181
|
});
|
|
181
182
|
};
|
|
@@ -516,6 +517,7 @@ self.onmessage = async (e) => {
|
|
|
516
517
|
responseType: ResponseType.PARSE_EXCEL_SUCCESS,
|
|
517
518
|
requiresRecalc: workbook.requiresRecalc(),
|
|
518
519
|
iterativeCalculationOptions: workbook.getIterativeCalculationOptions(),
|
|
520
|
+
workbookProtection: workbook.getWorkbookProtection(),
|
|
519
521
|
use1904: workbook.getUse1904Epoch(),
|
|
520
522
|
});
|
|
521
523
|
// Pass theme back
|
|
@@ -804,6 +806,7 @@ self.onmessage = async (e) => {
|
|
|
804
806
|
responseType: ResponseType.PARSE_EXCEL_SUCCESS,
|
|
805
807
|
requiresRecalc: workbook.requiresRecalc(),
|
|
806
808
|
iterativeCalculationOptions: workbook.getIterativeCalculationOptions(),
|
|
809
|
+
workbookProtection: workbook.getWorkbookProtection(),
|
|
807
810
|
});
|
|
808
811
|
self.postMessage({
|
|
809
812
|
responseType: ResponseType.GET_THEME_SUCCESS,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-builder.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/chart-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AA63CnC;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,YAAY,EAAE,MAAM,GAAG,MAAM,KAC1B,MAAM,GAAG,SAAS,CAAC;AAExB,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,yBAAyB,sBAAsB,KAC9C,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"chart-builder.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/chart-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EAEd,MAAM,2BAA2B,CAAC;AA63CnC;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,YAAY,EAAE,MAAM,GAAG,MAAM,KAC1B,MAAM,GAAG,SAAS,CAAC;AAExB,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,yBAAyB,sBAAsB,KAC9C,MAAM,GAAG,SAwqBX,CAAC"}
|
|
@@ -1667,9 +1667,89 @@ export const buildChartXml = (input, sheetNameById, resolvePivotSourceName) => {
|
|
|
1667
1667
|
"a:srgbClr": { a$: { val: borderHex } },
|
|
1668
1668
|
};
|
|
1669
1669
|
}
|
|
1670
|
+
normalizeSeriesChildOrder(chartSpace["c:chartSpace"]?.["c:chart"]?.["c:plotArea"]);
|
|
1670
1671
|
const xml = chartBuilder.build(chartSpace);
|
|
1671
1672
|
return `${XML_DECLARATION}${xml}`;
|
|
1672
1673
|
};
|
|
1674
|
+
/**
|
|
1675
|
+
* The `CT_*Ser` child sequence (ECMA-376 §21.2.2.15 CT_BarSer, §21.2.2.106
|
|
1676
|
+
* CT_LineSer, §21.2.2.161 CT_ScatterSer, §21.2.2.135 CT_PieSer, §21.2.2.11
|
|
1677
|
+
* CT_AreaSer, §21.2.2.22 CT_BubbleSer, merged): every series type uses a
|
|
1678
|
+
* subset of this list in this order. The builders above assemble a series
|
|
1679
|
+
* node from a template plus late additions (`c:tx`, `c:cat`, trendlines,
|
|
1680
|
+
* `c:extLst`, …) in whatever order the features are applied, and the XML
|
|
1681
|
+
* builder emits keys in insertion order — Excel tolerates the resulting
|
|
1682
|
+
* misorder, but LibreOffice, Google Sheets and the python chart libraries
|
|
1683
|
+
* validate the sequence and reject the part.
|
|
1684
|
+
*/
|
|
1685
|
+
const SERIES_CHILD_ORDER = [
|
|
1686
|
+
"c:idx",
|
|
1687
|
+
"c:order",
|
|
1688
|
+
"c:tx",
|
|
1689
|
+
"c:spPr",
|
|
1690
|
+
"c:invertIfNegative",
|
|
1691
|
+
"c:pictureOptions",
|
|
1692
|
+
"c:marker",
|
|
1693
|
+
"c:explosion",
|
|
1694
|
+
"c:dPt",
|
|
1695
|
+
"c:dLbls",
|
|
1696
|
+
"c:trendline",
|
|
1697
|
+
"c:errBars",
|
|
1698
|
+
"c:cat",
|
|
1699
|
+
"c:val",
|
|
1700
|
+
"c:xVal",
|
|
1701
|
+
"c:yVal",
|
|
1702
|
+
"c:bubbleSize",
|
|
1703
|
+
"c:bubble3D",
|
|
1704
|
+
"c:shape",
|
|
1705
|
+
"c:smooth",
|
|
1706
|
+
"c:extLst",
|
|
1707
|
+
];
|
|
1708
|
+
const seriesChildRank = (key) => {
|
|
1709
|
+
if (key === "a$")
|
|
1710
|
+
return -1;
|
|
1711
|
+
const rank = SERIES_CHILD_ORDER.indexOf(key);
|
|
1712
|
+
return rank === -1 ? SERIES_CHILD_ORDER.length : rank;
|
|
1713
|
+
};
|
|
1714
|
+
/** Re-key one `<c:ser>` object node into schema order (stable for ties). */
|
|
1715
|
+
const reorderSeriesNode = (node) => {
|
|
1716
|
+
if (!node || typeof node !== "object" || Array.isArray(node))
|
|
1717
|
+
return;
|
|
1718
|
+
const keys = Object.keys(node);
|
|
1719
|
+
const sorted = [...keys].sort((a, b) => seriesChildRank(a) - seriesChildRank(b) || keys.indexOf(a) - keys.indexOf(b));
|
|
1720
|
+
if (sorted.every((key, i) => key === keys[i]))
|
|
1721
|
+
return;
|
|
1722
|
+
const entries = sorted.map((key) => [key, node[key]]);
|
|
1723
|
+
for (const key of keys)
|
|
1724
|
+
delete node[key];
|
|
1725
|
+
for (const [key, value] of entries)
|
|
1726
|
+
node[key] = value;
|
|
1727
|
+
};
|
|
1728
|
+
/**
|
|
1729
|
+
* Walk every chart-type container under `<c:plotArea>` (including the ones
|
|
1730
|
+
* nested in an `mc:AlternateContent` fallback) and put each `<c:ser>`'s
|
|
1731
|
+
* children into schema order.
|
|
1732
|
+
*/
|
|
1733
|
+
const normalizeSeriesChildOrder = (plotArea) => {
|
|
1734
|
+
const visit = (node, depth) => {
|
|
1735
|
+
if (!node || typeof node !== "object" || depth > 4)
|
|
1736
|
+
return;
|
|
1737
|
+
if (Array.isArray(node)) {
|
|
1738
|
+
node.forEach((item) => visit(item, depth));
|
|
1739
|
+
return;
|
|
1740
|
+
}
|
|
1741
|
+
const ser = node["c:ser"];
|
|
1742
|
+
if (ser) {
|
|
1743
|
+
(Array.isArray(ser) ? ser : [ser]).forEach(reorderSeriesNode);
|
|
1744
|
+
}
|
|
1745
|
+
for (const [key, value] of Object.entries(node)) {
|
|
1746
|
+
if (key === "c:ser" || key === "a$" || key === "t$")
|
|
1747
|
+
continue;
|
|
1748
|
+
visit(value, depth + 1);
|
|
1749
|
+
}
|
|
1750
|
+
};
|
|
1751
|
+
visit(plotArea, 0);
|
|
1752
|
+
};
|
|
1673
1753
|
/** `#RRGGBB` / `RRGGBB` → uppercase `RRGGBB`; anything else is not emitted. */
|
|
1674
1754
|
const toHex = (color) => {
|
|
1675
1755
|
if (typeof color !== "string")
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* qualified exactly once.
|
|
2
|
+
* Excel "future functions" — functions added after the Excel 2007 (.xlsx)
|
|
3
|
+
* file format was frozen — must be written into sheet XML behind a `_xlfn.`
|
|
4
|
+
* namespace prefix. The list and both directions of the transform live in
|
|
5
|
+
* `helpers/excel-formula-prefixes` (the importer strips what the exporter
|
|
6
|
+
* adds); this module keeps the exporter-side entry point.
|
|
8
7
|
*/
|
|
9
|
-
export
|
|
8
|
+
export { FUTURE_FUNCTION_NAMES, WORKSHEET_SCOPED_FUTURE_FUNCTIONS, qualifyFutureFunctions, } from "../../helpers/excel-formula-prefixes";
|
|
10
9
|
//# sourceMappingURL=future-functions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"future-functions.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/future-functions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"future-functions.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/future-functions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EACjC,sBAAsB,GACvB,MAAM,sCAAsC,CAAC"}
|
|
@@ -1,264 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Excel "future functions" — functions added after the Excel 2007 (.xlsx)
|
|
3
|
-
* file format was frozen
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the implicit-intersection operator (`=@DAYS(...)`) and evaluates `#NAME?`.
|
|
8
|
-
*
|
|
9
|
-
* The list follows Microsoft's documentation of `_xlfn.`-prefixed functions
|
|
10
|
-
* ("Issue: An _xlfn. prefix is displayed in front of a function in a
|
|
11
|
-
* formula", support.microsoft.com) plus the dynamic-array / LAMBDA-era and
|
|
12
|
-
* 2024 additions that ship with the same prefix convention.
|
|
3
|
+
* file format was frozen — must be written into sheet XML behind a `_xlfn.`
|
|
4
|
+
* namespace prefix. The list and both directions of the transform live in
|
|
5
|
+
* `helpers/excel-formula-prefixes` (the importer strips what the exporter
|
|
6
|
+
* adds); this module keeps the exporter-side entry point.
|
|
13
7
|
*/
|
|
14
|
-
|
|
15
|
-
"ACOT",
|
|
16
|
-
"ACOTH",
|
|
17
|
-
"AGGREGATE",
|
|
18
|
-
"ANCHORARRAY",
|
|
19
|
-
"ARABIC",
|
|
20
|
-
"ARRAYTOTEXT",
|
|
21
|
-
"BASE",
|
|
22
|
-
"BETA.DIST",
|
|
23
|
-
"BETA.INV",
|
|
24
|
-
"BINOM.DIST",
|
|
25
|
-
"BINOM.DIST.RANGE",
|
|
26
|
-
"BINOM.INV",
|
|
27
|
-
"BITAND",
|
|
28
|
-
"BITLSHIFT",
|
|
29
|
-
"BITOR",
|
|
30
|
-
"BITRSHIFT",
|
|
31
|
-
"BITXOR",
|
|
32
|
-
"BYCOL",
|
|
33
|
-
"BYROW",
|
|
34
|
-
"CEILING.MATH",
|
|
35
|
-
"CEILING.PRECISE",
|
|
36
|
-
"CHISQ.DIST",
|
|
37
|
-
"CHISQ.DIST.RT",
|
|
38
|
-
"CHISQ.INV",
|
|
39
|
-
"CHISQ.INV.RT",
|
|
40
|
-
"CHISQ.TEST",
|
|
41
|
-
"CHOOSECOLS",
|
|
42
|
-
"CHOOSEROWS",
|
|
43
|
-
"COMBINA",
|
|
44
|
-
"CONCAT",
|
|
45
|
-
"CONFIDENCE.NORM",
|
|
46
|
-
"CONFIDENCE.T",
|
|
47
|
-
"COT",
|
|
48
|
-
"COTH",
|
|
49
|
-
"COVARIANCE.P",
|
|
50
|
-
"COVARIANCE.S",
|
|
51
|
-
"CSC",
|
|
52
|
-
"CSCH",
|
|
53
|
-
"DAYS",
|
|
54
|
-
"DECIMAL",
|
|
55
|
-
"DETECTLANGUAGE",
|
|
56
|
-
"DROP",
|
|
57
|
-
"ENCODEURL",
|
|
58
|
-
"ERF.PRECISE",
|
|
59
|
-
"ERFC.PRECISE",
|
|
60
|
-
"EXPAND",
|
|
61
|
-
"EXPON.DIST",
|
|
62
|
-
"F.DIST",
|
|
63
|
-
"F.DIST.RT",
|
|
64
|
-
"F.INV",
|
|
65
|
-
"F.INV.RT",
|
|
66
|
-
"F.TEST",
|
|
67
|
-
"FIELDVALUE",
|
|
68
|
-
"FILTER",
|
|
69
|
-
"FILTERXML",
|
|
70
|
-
"FLOOR.MATH",
|
|
71
|
-
"FLOOR.PRECISE",
|
|
72
|
-
"FORECAST.ETS",
|
|
73
|
-
"FORECAST.ETS.CONFINT",
|
|
74
|
-
"FORECAST.ETS.SEASONALITY",
|
|
75
|
-
"FORECAST.ETS.STAT",
|
|
76
|
-
"FORECAST.LINEAR",
|
|
77
|
-
"FORMULATEXT",
|
|
78
|
-
"GAMMA",
|
|
79
|
-
"GAMMA.DIST",
|
|
80
|
-
"GAMMA.INV",
|
|
81
|
-
"GAMMALN.PRECISE",
|
|
82
|
-
"GAUSS",
|
|
83
|
-
"GROUPBY",
|
|
84
|
-
"HSTACK",
|
|
85
|
-
"HYPGEOM.DIST",
|
|
86
|
-
"IFNA",
|
|
87
|
-
"IFS",
|
|
88
|
-
"IMAGE",
|
|
89
|
-
"IMCOSH",
|
|
90
|
-
"IMCOT",
|
|
91
|
-
"IMCSC",
|
|
92
|
-
"IMCSCH",
|
|
93
|
-
"IMSEC",
|
|
94
|
-
"IMSECH",
|
|
95
|
-
"IMSINH",
|
|
96
|
-
"IMTAN",
|
|
97
|
-
"ISFORMULA",
|
|
98
|
-
"ISOMITTED",
|
|
99
|
-
"ISOWEEKNUM",
|
|
100
|
-
"LAMBDA",
|
|
101
|
-
"LET",
|
|
102
|
-
"LOGNORM.DIST",
|
|
103
|
-
"LOGNORM.INV",
|
|
104
|
-
"MAKEARRAY",
|
|
105
|
-
"MAP",
|
|
106
|
-
"MAXIFS",
|
|
107
|
-
"MINIFS",
|
|
108
|
-
"MODE.MULT",
|
|
109
|
-
"MODE.SNGL",
|
|
110
|
-
"MUNIT",
|
|
111
|
-
"NEGBINOM.DIST",
|
|
112
|
-
"NETWORKDAYS.INTL",
|
|
113
|
-
"NORM.DIST",
|
|
114
|
-
"NORM.INV",
|
|
115
|
-
"NORM.S.DIST",
|
|
116
|
-
"NORM.S.INV",
|
|
117
|
-
"NUMBERVALUE",
|
|
118
|
-
"PDURATION",
|
|
119
|
-
"PERCENTILE.EXC",
|
|
120
|
-
"PERCENTILE.INC",
|
|
121
|
-
"PERCENTOF",
|
|
122
|
-
"PERCENTRANK.EXC",
|
|
123
|
-
"PERCENTRANK.INC",
|
|
124
|
-
"PERMUTATIONA",
|
|
125
|
-
"PHI",
|
|
126
|
-
"PIVOTBY",
|
|
127
|
-
"POISSON.DIST",
|
|
128
|
-
"QUARTILE.EXC",
|
|
129
|
-
"QUARTILE.INC",
|
|
130
|
-
"QUERYSTRING",
|
|
131
|
-
"RANDARRAY",
|
|
132
|
-
"RANK.AVG",
|
|
133
|
-
"RANK.EQ",
|
|
134
|
-
"REDUCE",
|
|
135
|
-
"REGEXEXTRACT",
|
|
136
|
-
"REGEXREPLACE",
|
|
137
|
-
"REGEXTEST",
|
|
138
|
-
"RRI",
|
|
139
|
-
"SCAN",
|
|
140
|
-
"SEC",
|
|
141
|
-
"SECH",
|
|
142
|
-
"SEQUENCE",
|
|
143
|
-
"SHEET",
|
|
144
|
-
"SHEETS",
|
|
145
|
-
"SINGLE",
|
|
146
|
-
"SKEW.P",
|
|
147
|
-
"SORT",
|
|
148
|
-
"SORTBY",
|
|
149
|
-
"STDEV.P",
|
|
150
|
-
"STDEV.S",
|
|
151
|
-
"STOCKHISTORY",
|
|
152
|
-
"SWITCH",
|
|
153
|
-
"T.DIST",
|
|
154
|
-
"T.DIST.2T",
|
|
155
|
-
"T.DIST.RT",
|
|
156
|
-
"T.INV",
|
|
157
|
-
"T.INV.2T",
|
|
158
|
-
"T.TEST",
|
|
159
|
-
"TAKE",
|
|
160
|
-
"TEXTAFTER",
|
|
161
|
-
"TEXTBEFORE",
|
|
162
|
-
"TEXTJOIN",
|
|
163
|
-
"TEXTSPLIT",
|
|
164
|
-
"TOCOL",
|
|
165
|
-
"TOROW",
|
|
166
|
-
"TRANSLATE",
|
|
167
|
-
"TRIMRANGE",
|
|
168
|
-
"UNICHAR",
|
|
169
|
-
"UNICODE",
|
|
170
|
-
"UNIQUE",
|
|
171
|
-
"VALUETOTEXT",
|
|
172
|
-
"VAR.P",
|
|
173
|
-
"VAR.S",
|
|
174
|
-
"VSTACK",
|
|
175
|
-
"WEBSERVICE",
|
|
176
|
-
"WEIBULL.DIST",
|
|
177
|
-
"WORKDAY.INTL",
|
|
178
|
-
"WRAPCOLS",
|
|
179
|
-
"WRAPROWS",
|
|
180
|
-
"XLOOKUP",
|
|
181
|
-
"XMATCH",
|
|
182
|
-
"XOR",
|
|
183
|
-
"Z.TEST",
|
|
184
|
-
];
|
|
185
|
-
/**
|
|
186
|
-
* Future functions that Excel writes behind the worksheet-scope prefix
|
|
187
|
-
* (`_xlfn._xlws.`) rather than plain `_xlfn.` — the dynamic-array functions
|
|
188
|
-
* that also exist as worksheet-only names.
|
|
189
|
-
*/
|
|
190
|
-
const WORKSHEET_SCOPED_FUTURE_FUNCTIONS = new Set([
|
|
191
|
-
"FILTER",
|
|
192
|
-
"SORT",
|
|
193
|
-
]);
|
|
194
|
-
const QUALIFIED_BY_NAME = new Map(FUTURE_FUNCTION_NAMES.map((name) => [
|
|
195
|
-
name,
|
|
196
|
-
WORKSHEET_SCOPED_FUTURE_FUNCTIONS.has(name)
|
|
197
|
-
? `_xlfn._xlws.${name}`
|
|
198
|
-
: `_xlfn.${name}`,
|
|
199
|
-
]));
|
|
200
|
-
// Longest names first so `T.DIST.2T` wins over `T.DIST`. The match must be
|
|
201
|
-
// followed by `(` — a bare name (e.g. the defined name `DAYS`) is not a call.
|
|
202
|
-
const FUTURE_FUNCTION_REGEX = new RegExp("(" +
|
|
203
|
-
[...FUTURE_FUNCTION_NAMES]
|
|
204
|
-
.sort((a, b) => b.length - a.length)
|
|
205
|
-
.map((name) => name.replace(/\./g, "\\."))
|
|
206
|
-
.join("|") +
|
|
207
|
-
")(\\s*\\()", "gi");
|
|
208
|
-
// `\b` is not enough of a left boundary: it would match the `DAYS` in
|
|
209
|
-
// `_xlfn.DAYS` and in `MYDAYS`. The preceding character is checked by offset
|
|
210
|
-
// instead of being consumed by the pattern, so nested calls
|
|
211
|
-
// (`SORT(FILTER(...))`) still match after the enclosing one.
|
|
212
|
-
const FUTURE_FUNCTION_LEFT_BOUNDARY = /[A-Za-z0-9_.$]/;
|
|
213
|
-
function qualifySegment(segment) {
|
|
214
|
-
const stripped = segment
|
|
215
|
-
.replace(/_xlfn\./gi, "")
|
|
216
|
-
.replace(/_xlws\./gi, "")
|
|
217
|
-
.replace(/_xludf\./gi, "");
|
|
218
|
-
return stripped.replace(FUTURE_FUNCTION_REGEX, (match, name, open, offset) => {
|
|
219
|
-
if (offset > 0 &&
|
|
220
|
-
FUTURE_FUNCTION_LEFT_BOUNDARY.test(stripped[offset - 1])) {
|
|
221
|
-
return match;
|
|
222
|
-
}
|
|
223
|
-
const qualified = QUALIFIED_BY_NAME.get(name.toUpperCase());
|
|
224
|
-
return qualified ? qualified + open : match;
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Strip the `_xlfn.` / `_xlws.` / `_xludf.` prefixes and re-add the correct
|
|
229
|
-
* one to every future-function call in `formula`. Quoted spans are copied
|
|
230
|
-
* verbatim so string literals (`"…"`) and quoted sheet names (`'…'`) keep
|
|
231
|
-
* their original text; a doubled quote inside a span is an escaped quote.
|
|
232
|
-
* Because the strip pass runs first, already-qualified input comes out
|
|
233
|
-
* qualified exactly once.
|
|
234
|
-
*/
|
|
235
|
-
export function qualifyFutureFunctions(formula) {
|
|
236
|
-
let result = "";
|
|
237
|
-
let segmentStart = 0;
|
|
238
|
-
let index = 0;
|
|
239
|
-
while (index < formula.length) {
|
|
240
|
-
const char = formula[index];
|
|
241
|
-
if (char !== '"' && char !== "'") {
|
|
242
|
-
index++;
|
|
243
|
-
continue;
|
|
244
|
-
}
|
|
245
|
-
result += qualifySegment(formula.slice(segmentStart, index));
|
|
246
|
-
let end = index + 1;
|
|
247
|
-
while (end < formula.length) {
|
|
248
|
-
if (formula[end] === char) {
|
|
249
|
-
if (formula[end + 1] === char) {
|
|
250
|
-
end += 2;
|
|
251
|
-
continue;
|
|
252
|
-
}
|
|
253
|
-
break;
|
|
254
|
-
}
|
|
255
|
-
end++;
|
|
256
|
-
}
|
|
257
|
-
// An unterminated literal consumes the rest of the formula.
|
|
258
|
-
const literalEnd = end < formula.length ? end + 1 : formula.length;
|
|
259
|
-
result += formula.slice(index, literalEnd);
|
|
260
|
-
index = literalEnd;
|
|
261
|
-
segmentStart = literalEnd;
|
|
262
|
-
}
|
|
263
|
-
return result + qualifySegment(formula.slice(segmentStart));
|
|
264
|
-
}
|
|
8
|
+
export { FUTURE_FUNCTION_NAMES, WORKSHEET_SCOPED_FUTURE_FUNCTIONS, qualifyFutureFunctions, } from "../../helpers/excel-formula-prefixes";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style-builder.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/style-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EACR,UAAU,EACV,KAAK,EAEL,UAAU,EACV,gBAAgB,EAEjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"style-builder.d.ts","sourceRoot":"","sources":["../../../../exporter/xlsx/style-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EACR,UAAU,EACV,KAAK,EAEL,UAAU,EACV,gBAAgB,EAEjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,iCAAiC,CAAC;AA4F/D,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAKF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,eAAe,CAAC,EAAE,KAAK,CAAC;QACxB,SAAS,CAAC,EAAE,KAAK,CAAC;QAClB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,GACxC,aAAa,gBAAgB,KAC5B,sBAAsB,CAAC,UAAU,CAqBnC,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,KAAK,CAA+D;IAC5E,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,eAAe,CAErB;IACF,OAAO,CAAC,iBAAiB,CAAgC;IAEzD;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,EAAE;IAUlD;;;;;;;OAOG;IACH,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,EAAE;IAOtD,OAAO,CAAC,OAAO,CAOb;IAEF,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,MAAM,CAA6B;;IAU3C;;;;;;;OAOG;IACH,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;IASzC,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC7B,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC1B,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS;IACnC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,GAC/C,MAAM;IAsET,0BAA0B,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI;IAsCrD,OAAO,CAAC,iBAAiB;IAoCzB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,SAAS;IA2DjB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,YAAY;IAQpB,KAAK;CA6JN"}
|