@omegagrid/plugin-xlsx 0.10.1 → 0.10.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omegagrid/plugin-xlsx",
3
- "version": "0.10.1",
3
+ "version": "0.10.2",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Xlsx import/export plugin",
6
6
  "main": "./dist/index.js",
@@ -27,9 +27,9 @@
27
27
  "_prepublish": "yarn test && yarn lint"
28
28
  },
29
29
  "dependencies": {
30
- "@omegagrid/core": "^0.10.1",
31
- "@omegagrid/editor": "^0.10.1",
32
- "@omegagrid/grid": "^0.10.1",
30
+ "@omegagrid/core": "^0.10.2",
31
+ "@omegagrid/editor": "^0.10.2",
32
+ "@omegagrid/grid": "^0.10.2",
33
33
  "lit": "^3.1.1",
34
34
  "lit-html": "^3.1.1",
35
35
  "ts-debounce": "^4.0.0"
@@ -1,7 +0,0 @@
1
- import { Plugin } from '@omegagrid/core';
2
- import { Editor } from '@omegagrid/editor';
3
- export declare class XlsxEditorPlugin extends Plugin<Editor> {
4
- static pluginName: string;
5
- init(editor: Editor): void;
6
- }
7
- //# sourceMappingURL=editorPlugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"editorPlugin.d.ts","sourceRoot":"","sources":["../src/editorPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAK3C,qBAAa,gBAAiB,SAAQ,MAAM,CAAC,MAAM,CAAC;IAEnD,MAAM,CAAC,UAAU,SAAU;IAE3B,IAAI,CAAC,MAAM,EAAE,MAAM;CAsBnB"}
@@ -1,27 +0,0 @@
1
- import { Plugin } from '@omegagrid/core';
2
- import { createModel } from './import';
3
- import { createWorkbook, exportXLSX } from './export';
4
- import { SheetjsLoader } from './loader';
5
- export class XlsxEditorPlugin extends Plugin {
6
- init(editor) {
7
- SheetjsLoader.get();
8
- editor.commands.add({
9
- group: 'plugin',
10
- name: 'export xlsx',
11
- exec: async () => {
12
- const models = editor.getGridContainer().model.models;
13
- const wb = await createWorkbook(Array.from(models, item => item[1]));
14
- exportXLSX(wb, 'export.xlsx');
15
- }
16
- });
17
- editor.addEventListener('drop', async (e) => {
18
- e.preventDefault();
19
- if (e.dataTransfer.files.length) {
20
- const file = e.dataTransfer.files[0];
21
- editor.setSourceData(await createModel(file));
22
- }
23
- });
24
- }
25
- }
26
- XlsxEditorPlugin.pluginName = 'xlsx';
27
- //# sourceMappingURL=editorPlugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"editorPlugin.js","sourceRoot":"","sources":["../src/editorPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,gBAAiB,SAAQ,MAAc;IAInD,IAAI,CAAC,MAAc;QAClB,aAAa,CAAC,GAAG,EAAE,CAAC;QAEpB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YACnB,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,KAAK,IAAI,EAAE;gBAChB,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;gBACtD,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,UAAU,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;YAC/B,CAAC;SACD,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,CAAY,EAAE,EAAE;YACtD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,aAAa,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/C,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;;AAtBM,2BAAU,GAAG,MAAM,CAAC","sourcesContent":["import { Plugin } from '@omegagrid/core';\nimport { Editor } from '@omegagrid/editor';\nimport { createModel } from './import';\nimport { createWorkbook, exportXLSX } from './export';\nimport { SheetjsLoader } from './loader';\n\nexport class XlsxEditorPlugin extends Plugin<Editor> {\n\n\tstatic pluginName = 'xlsx';\n\n\tinit(editor: Editor) {\n\t\tSheetjsLoader.get();\n\n\t\teditor.commands.add({\n\t\t\tgroup: 'plugin',\n\t\t\tname: 'export xlsx',\n\t\t\texec: async () => {\n\t\t\t\tconst models = editor.getGridContainer().model.models; \n\t\t\t\tconst wb = await createWorkbook(Array.from(models, item => item[1]));\n\t\t\t\texportXLSX(wb, 'export.xlsx');\n\t\t\t}\n\t\t});\n\n\t\teditor.addEventListener('drop', async (e: DragEvent) => {\n\t\t\te.preventDefault();\n\t\t\tif (e.dataTransfer.files.length) {\n\t\t\t\tconst file = e.dataTransfer.files[0];\n\t\t\t\teditor.setSourceData(await createModel(file));\n\t\t\t}\n\t\t});\n\t}\n\n}"]}
package/dist/export.d.ts DELETED
@@ -1,25 +0,0 @@
1
- import { GridModel, Style as OGStyle, PrintOptions } from '@omegagrid/grid';
2
- import { ExportOptions, ExportableGridModel, Style, ConditionalFormat } from './types';
3
- import type XLSXNS from 'xlsx';
4
- import type { CellObject, ColInfo, Range, RowInfo, WorkBook, WorkSheet } from 'xlsx';
5
- export declare function getWorksheetColumns(model: GridModel, exportOptions: ExportOptions): ColInfo[];
6
- export declare function getWorksheetRows(model: GridModel, exportOptions: ExportOptions): RowInfo[];
7
- export declare function getWorksheetMerges(model: GridModel, exportOptions: ExportOptions): Range[];
8
- export declare function getWorksheetHeaderCells(model: GridModel, exportOptions: ExportOptions): CellObject[][];
9
- export declare function convertStyle(style: OGStyle): Style;
10
- export declare function getWorksheetCells(model: GridModel, exportOptions?: ExportOptions): CellObject[][];
11
- export declare function getWorksheetConditionalFormats(model: GridModel): ConditionalFormat[];
12
- export declare function detectOutlineRowDirection(model: GridModel): 'above' | 'below';
13
- export declare function detectOutlineColumnDirection(model: GridModel): 'left' | 'right';
14
- export declare function convertMargins(margins: PrintOptions['margins']): {
15
- top: number;
16
- bottom: number;
17
- left: number;
18
- right: number;
19
- header: number;
20
- footer: number;
21
- };
22
- export declare function createWorksheet(model: GridModel, exportOptions?: ExportOptions): WorkSheet;
23
- export declare function createWorkbook(models: ExportableGridModel[], exportOptions?: ExportOptions): Promise<XLSXNS.WorkBook>;
24
- export declare function exportXLSX(wb: WorkBook, filename?: string): Promise<any>;
25
- //# sourceMappingURL=export.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAGA,OAAO,EACQ,SAAS,EACvB,KAAK,IAAI,OAAO,EAC8B,YAAY,EAE1D,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,EAA8B,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGnH,OAAO,KAAK,MAAM,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,EACX,UAAU,EAAE,OAAO,EAAiB,KAAK,EAAE,OAAO,EAClD,QAAQ,EAAE,SAAS,EACnB,MAAM,MAAM,CAAC;AAsCd,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,GAAI,OAAO,EAAE,CAO9F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,GAAI,OAAO,EAAE,CAW3F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,GAAI,KAAK,EAAE,CAyB3F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,GAAI,UAAU,EAAE,EAAE,CAyBvG;AAuBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAuBlD;AAgBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,aAAa,GAAI,UAAU,EAAE,EAAE,CAsFlG;AAYD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,SAAS,GAAI,iBAAiB,EAAE,CAiBrF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,GAAI,OAAO,GAAG,OAAO,CAa9E;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,SAAS,GAAI,MAAM,GAAG,OAAO,CAOhF;AAyBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC;;;;;;;EAW9D;AAqCD,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,aAAa,GAAI,SAAS,CA6B3F;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,mBAAmB,EAAE,EAAE,aAAa,CAAC,EAAE,aAAa,4BAoChG;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAE,MAAa,gBAMrE"}
package/dist/export.js DELETED
@@ -1,439 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { utils, paper, dates } from '@omegagrid/core';
3
- import { encodeColumn, CalculationModel, isLogicalOperator, CellRange } from '@omegagrid/grid';
4
- import { SheetjsLoader } from './loader';
5
- const DEFAULT_BORDER_COLOR = 'aaaaaa';
6
- const DEFAULT_BORDER_STYLE = {
7
- bottom: { style: 'thin', color: DEFAULT_BORDER_COLOR },
8
- top: { style: 'thin', color: DEFAULT_BORDER_COLOR },
9
- right: { style: 'thin', color: DEFAULT_BORDER_COLOR },
10
- left: { style: 'thin', color: DEFAULT_BORDER_COLOR }
11
- };
12
- const DEFAULT_EXPORT_OPTIONS = {
13
- exportHiddenRows: true,
14
- exportHiddenColumns: true,
15
- gridLines: true,
16
- defaultBorders: false,
17
- dropdownCells: 'value'
18
- };
19
- const headerCellStyle = {
20
- alignment: { vertical: 'center', horizontal: 'center' },
21
- bold: true
22
- };
23
- const cellTypeMap = {
24
- 'g': 'n',
25
- 'b': 'b',
26
- 't': 's',
27
- 'n': 'n',
28
- 'd': 'd',
29
- 'dt': 'd',
30
- 's': 's',
31
- 'm': 's',
32
- 'tm': 's',
33
- 'h': 's',
34
- 'a': 'z',
35
- };
36
- export function getWorksheetColumns(model, exportOptions) {
37
- const sourceColumns = exportOptions.exportHiddenColumns ? model.columns : model.visibleColumns;
38
- return sourceColumns.map(column => ({
39
- level: column.level,
40
- wpx: column.width,
41
- hidden: column.visibleIndex == null || model.visibleColumns[column.visibleIndex] != column
42
- }));
43
- }
44
- export function getWorksheetRows(model, exportOptions) {
45
- const sourceRows = exportOptions.exportHiddenRows ? model.rows : model.visibleRows;
46
- const offset = model.headerCount;
47
- const rows = new Array(sourceRows.length + offset);
48
- [...Array(offset).keys()].map(r => rows[r] = { level: 0 });
49
- sourceRows.map((row, r) => rows[r + offset] = {
50
- level: row.level,
51
- hpt: row.height * 0.75,
52
- hidden: row.visibleIndex == null || model.visibleRows[row.visibleIndex] != row
53
- });
54
- return rows;
55
- }
56
- export function getWorksheetMerges(model, exportOptions) {
57
- const offset = model.headerCount;
58
- // TODO - add same logic for rows
59
- const colIndex = exportOptions.exportHiddenColumns
60
- ? (cell) => cell.c
61
- : (cell) => model.columns[cell.c].visibleIndex;
62
- const mergedCells = [];
63
- model.merges.mergedCells.forEach(merge => {
64
- //if (model.merges.hiddenCells.get(cell.r)?.get(cell.c)) return;
65
- mergedCells.push({
66
- s: { c: colIndex(merge), r: merge.r + offset },
67
- e: { c: colIndex(merge) + merge.cs - 1, r: merge.r + offset + merge.rs - 1 }
68
- });
69
- });
70
- model.mergedHeaders.forEach(cell => {
71
- if (cell.h?.hidden)
72
- return;
73
- mergedCells.push({
74
- s: { c: colIndex(cell), r: cell.r },
75
- e: { c: colIndex(cell) + cell.cs - 1, r: cell.r + cell.rs - 1 }
76
- });
77
- });
78
- return mergedCells;
79
- }
80
- export function getWorksheetHeaderCells(model, exportOptions) {
81
- const count = model.headerCount;
82
- const sourceColumns = exportOptions.exportHiddenColumns ? model.columns : model.visibleColumns;
83
- const defaultBorder = getDefaultBorderStyle(exportOptions);
84
- return [...Array(count).keys()].map(r => sourceColumns.map((column) => {
85
- const header = column.header[r];
86
- const cell = { t: header ? 's' : 'z', s: headerCellStyle };
87
- if (header) {
88
- if (header.html)
89
- cell.h = `<span>${header.label}</span>`;
90
- else if (header.label != null)
91
- cell.v = header.label;
92
- else
93
- cell.t = 'z';
94
- }
95
- if (defaultBorder) {
96
- if (!cell.s)
97
- cell.s = {};
98
- cell.s = Object.assign({}, defaultBorder, cell.s);
99
- }
100
- if (header._style != null) {
101
- cell.s = Object.assign({}, cell.s, convertStyle(model.styles.get(header._style)));
102
- }
103
- return cell;
104
- }));
105
- }
106
- function convertStyleColor(color) {
107
- return { rgb: color };
108
- }
109
- function convertStyleBorder(border) {
110
- if (border.style == 'none')
111
- return null;
112
- return {
113
- style: border.style,
114
- color: convertStyleColor(border.color)
115
- };
116
- }
117
- function convertStyleCellBorder(border) {
118
- const s = {};
119
- if (border.bottom)
120
- s.bottom = convertStyleBorder(border.bottom);
121
- if (border.top)
122
- s.top = convertStyleBorder(border.top);
123
- if (border.right)
124
- s.right = convertStyleBorder(border.right);
125
- if (border.left)
126
- s.left = convertStyleBorder(border.left);
127
- return s;
128
- }
129
- export function convertStyle(style) {
130
- const s = {};
131
- if (style.color)
132
- s.color = convertStyleColor(style.color);
133
- if (style.bgColor)
134
- s.bgColor = convertStyleColor(style.bgColor);
135
- if (style.fgColor)
136
- s.fgColor = convertStyleColor(style.fgColor);
137
- if (style.patternType)
138
- s.patternType = style.patternType;
139
- if (style.alignment)
140
- s.alignment = style.alignment;
141
- if (style.bold != null)
142
- s.bold = style.bold;
143
- if (style.sz)
144
- s.sz = style.sz;
145
- if (style.bottom)
146
- s.bottom = convertStyleBorder(style.bottom);
147
- if (style.top)
148
- s.top = convertStyleBorder(style.top);
149
- if (style.right)
150
- s.right = convertStyleBorder(style.right);
151
- if (style.left)
152
- s.left = convertStyleBorder(style.left);
153
- if (style.angle != null)
154
- s.angle = style.angle;
155
- if (style.stops)
156
- s.stops = style.stops.map(stop => ({
157
- v: stop.v,
158
- rgb: stop.rgb
159
- }));
160
- return s;
161
- }
162
- function updateIndent(cellModel, cell) {
163
- const indent = cellModel.calculatedIndent;
164
- if (indent > 0) {
165
- if (!cell.s)
166
- cell.s = {};
167
- if (!cell.s.alignment)
168
- cell.s.alignment = {};
169
- cell.s.alignment.indent = indent;
170
- }
171
- }
172
- function getDefaultBorderStyle(exportOptions) {
173
- const defaultBorder = exportOptions.defaultBorders === true ? DEFAULT_BORDER_STYLE : exportOptions.defaultBorders;
174
- return defaultBorder ? convertStyleCellBorder(defaultBorder) : null;
175
- }
176
- export function getWorksheetCells(model, exportOptions) {
177
- exportOptions = getExportOptions(exportOptions);
178
- const hOffset = model.headerCount;
179
- const calculations = new CalculationModel(model);
180
- const data = new Array(hOffset + model.rows.length);
181
- const styles = new Map();
182
- const defaultBorder = getDefaultBorderStyle(exportOptions);
183
- const defaultDateFormat = model.options.dateFormat || 'yyyy-MM-dd';
184
- const dropdowDisplayValue = exportOptions.dropdownCells == 'displayValue';
185
- getWorksheetHeaderCells(model, exportOptions).forEach((row, r) => data[r] = row);
186
- const sourceRows = exportOptions.exportHiddenRows ? model.rows : model.visibleRows;
187
- const sourceColumns = exportOptions.exportHiddenColumns ? model.columns : model.visibleColumns;
188
- sourceRows.forEach((row, r) => data[r + hOffset] = sourceColumns.map((column) => {
189
- const cellModel = row.cell(column.index);
190
- const t = cellTypeMap[cellModel.type];
191
- const cellObj = { t: cellModel.hasValue ? t : 'z' };
192
- if (cellModel.hasFormula) {
193
- if (hOffset > 0) {
194
- // TODO - shift connected models
195
- cellObj.f = calculations.getFormula(cellModel).clone().shift({ index: 0, offset: hOffset, direction: 'down' }).toExcelString();
196
- }
197
- else {
198
- cellObj.f = (calculations
199
- ? calculations.getFormula(cellModel).toExcelString()
200
- : cellModel.formula);
201
- }
202
- if (cellModel.type == 'd') {
203
- cellObj.t = 'n';
204
- cellObj.z = cellModel.format ?? defaultDateFormat;
205
- }
206
- }
207
- else if (cellModel.hasValue && !cellModel.isSpilled) {
208
- if (cellObj.t == 's') {
209
- cellObj.v = dropdowDisplayValue ? cellModel.formattedValue.toString() : cellModel.value.toString();
210
- }
211
- else if (cellObj.t != 'z') {
212
- cellObj.v = cellModel.value;
213
- }
214
- if (cellModel.type == 'g') {
215
- cellObj.t = utils.isString(cellObj.v) ? 's' : 'n';
216
- }
217
- else if (cellModel.type == 'd') {
218
- if (utils.isNumber(cellObj.v))
219
- cellObj.t = 'n';
220
- }
221
- // html: cell.h = `<span>${cellModel.value}</span>`;
222
- }
223
- const style = cellModel.composedStyle;
224
- if (style) {
225
- if (!styles.has(style.id))
226
- styles.set(style.id, convertStyle(style));
227
- cellObj.s = { ...styles.get(style.id) };
228
- }
229
- updateIndent(cellModel, cellObj);
230
- if (cellModel.hasComment) {
231
- const comments = cellModel.model.comments.get(cellModel.address);
232
- const sheetComment = [];
233
- sheetComment.push({ R: [] });
234
- sheetComment.hidden = true;
235
- sheetComment["!pos"] = { x: 0, y: 0, w: 400, h: 200 };
236
- comments.forEach(comment => {
237
- if (!comment.text)
238
- return;
239
- const author = comment.author ? (comment.author.name ?? comment.author.id) : null;
240
- let header = '';
241
- if (author)
242
- header = author;
243
- if (comment.date)
244
- header += (header ? ' - ' : '') + dates.format(comment.date, dates.getDateFormat(({ withTime: true })));
245
- if (header)
246
- sheetComment[0].R.push({ t: 's', v: header + "\n", s: { bold: true } });
247
- sheetComment[0].R.push({ t: 's', v: comment.text + "\n" });
248
- });
249
- cellObj.c = sheetComment;
250
- console.log(cellObj);
251
- } // else if (cellModel.hasTooltip) {}
252
- if ((cellObj.t == 'n' || cellObj.t == 'd') && cellObj.z == null) {
253
- cellObj.z = cellModel.format ?? (cellObj.t == 'd' ? defaultDateFormat : 'General');
254
- }
255
- if (defaultBorder) {
256
- if (!cellObj.s)
257
- cellObj.s = {};
258
- cellObj.s = Object.assign({}, defaultBorder, cellObj.s);
259
- }
260
- return cellObj;
261
- }));
262
- return data;
263
- }
264
- function convertConditionalFormatBoundry(cb, def) {
265
- if (!cb && !def)
266
- return null;
267
- cb = Object.assign({}, def, cb);
268
- return {
269
- t: cb.t,
270
- v: cb.v,
271
- color: convertStyleColor(cb.color)
272
- };
273
- }
274
- export function getWorksheetConditionalFormats(model) {
275
- const hOffset = model.headerCount;
276
- return model.conditionalFormats.getSourceData().map((item) => {
277
- return {
278
- ref: CellRange.fromA1s(item.ranges).map(range => range.shiftDown(0, hOffset, null, true).A1).join(' '),
279
- t: item.type,
280
- f: item.condition && isLogicalOperator(item.condition[0]) ? ('A1' + item.condition) : (item.condition ?? null),
281
- s: item.style ? convertStyle(item.style) : null,
282
- stop: item.stop,
283
- cmin: convertConditionalFormatBoundry(item.cmin, (item.type == 'bar' ? { t: 'min', color: item.color } : null)),
284
- cmid: item.cmid ? convertConditionalFormatBoundry(item.cmid, { v: 50, t: 'percentile' }) : null,
285
- cmax: convertConditionalFormatBoundry(item.cmax, (item.type == 'bar' ? { t: 'max', color: item.color } : null)),
286
- color: convertStyleColor(item.color),
287
- v: item.v,
288
- thresh: item.thresh
289
- };
290
- });
291
- }
292
- export function detectOutlineRowDirection(model) {
293
- if (model.options.rowTree.reversed)
294
- return 'below';
295
- const rows = model.rows;
296
- if (rows.length < 2)
297
- return 'above';
298
- for (let r = 1; r < rows.length; r++) {
299
- if (rows[r].level != rows[r - 1].level) {
300
- return rows[r].parent == rows[r - 1] ? 'above' : 'below';
301
- }
302
- }
303
- return model.rows[0].level > model.rows[1].level ? 'below' : 'above';
304
- }
305
- export function detectOutlineColumnDirection(model) {
306
- if (model.options.columnTree.reversed == null) {
307
- if (model.columns.length < 2)
308
- return 'left';
309
- return model.columns[0].level > model.columns[1].level ? 'right' : 'left';
310
- }
311
- else {
312
- return model.options.columnTree.reversed ? 'right' : 'left';
313
- }
314
- }
315
- const getExportOptions = (exportOptions) => {
316
- const options = Object.assign({}, DEFAULT_EXPORT_OPTIONS, exportOptions);
317
- if (options.defaultBorders)
318
- options.defaultBorders = DEFAULT_BORDER_STYLE;
319
- return options;
320
- };
321
- /** convert mm to inch */
322
- const mmToInch = (mm) => mm / 25.4;
323
- /** calculates scale to fit all columns on one page */
324
- function calculateScale(model) {
325
- const printOptions = model.options.print ?? {};
326
- const paperSize = utils.isString(printOptions.paper)
327
- ? (paper.PAPER_SIZES[printOptions.paper] ?? paper.PAPER_SIZES.A4)
328
- : printOptions.paper;
329
- const width = mmToInch(paperSize.width - printOptions.margins.left - printOptions.margins.right);
330
- const columnWidth = model.columns.reduce((acc, column) => acc + column.width, 0) / 96;
331
- return Math.round((width / columnWidth) * 100) - 2;
332
- }
333
- export function convertMargins(margins) {
334
- if (!margins)
335
- return null;
336
- return {
337
- top: mmToInch(margins.top),
338
- bottom: mmToInch(margins.bottom),
339
- left: mmToInch(margins.left),
340
- right: mmToInch(margins.right),
341
- header: mmToInch(margins.header),
342
- footer: mmToInch(margins.footer)
343
- };
344
- }
345
- function createPrintOptions(model, exportOptions) {
346
- const options = model.options.print ?? {};
347
- const printOptions = { props: {} };
348
- printOptions.props.scale = options.scale ? options.scale : calculateScale(model);
349
- printOptions.props.paper = options.paper;
350
- printOptions.props.orientation = options.orientation;
351
- if (options.margins)
352
- printOptions.margins = convertMargins(options.margins);
353
- // printOptions.props.fit = {width: 1, height: 0}; // does not work!!!
354
- /*
355
- "Fit Sheet on One page" { width: 1, height: 1 }
356
- "Fit All Columns on One Page" { width: 1, height: 0 }
357
- "Fit All Rows on One Page" { width: 0, height: 1 }
358
- */
359
- const rowBreaks = options.rowBreaks;
360
- if (rowBreaks?.length > 0) {
361
- printOptions.rowBreaks = rowBreaks.map((row) => ({
362
- R: exportOptions.exportHiddenRows ? row : model.rows[row].visibleIndex,
363
- }));
364
- const rowTitlesRange = model.options?.print?.rowTitles
365
- ? CellRange.fromA1(model.options?.print?.rowTitles) : null;
366
- if (rowTitlesRange) {
367
- printOptions.titles = {
368
- s: { r: rowTitlesRange.r1, c: -1 },
369
- e: { r: rowTitlesRange.r2, c: -1 }
370
- };
371
- }
372
- }
373
- return printOptions;
374
- }
375
- export function createWorksheet(model, exportOptions) {
376
- exportOptions = getExportOptions(exportOptions);
377
- const ws = {};
378
- ws['!cols'] = getWorksheetColumns(model, exportOptions);
379
- ws['!rows'] = getWorksheetRows(model, exportOptions);
380
- ws['!merges'] = getWorksheetMerges(model, exportOptions);
381
- ws['!condfmt'] = getWorksheetConditionalFormats(model);
382
- ws['!outline'] = {
383
- 'above': detectOutlineRowDirection(model) == 'above',
384
- 'left': detectOutlineColumnDirection(model) == 'left'
385
- };
386
- if (model.options.freezeLeft || model.options.freezeTop) {
387
- ws['!freeze'] = `${encodeColumn(model.options.freezeLeft)}${model.headerCount + model.options.freezeTop + 1}`;
388
- }
389
- else if (model.headerCount > 0) {
390
- ws['!freeze'] = `A${model.headerCount + 1}`;
391
- }
392
- ws['!gridlines'] = exportOptions.gridLines;
393
- ws['!print'] = createPrintOptions(model, exportOptions);
394
- // if (model.tab?.color) ws['!tabcolor'] = convertStyleColor(model.tab.color); // does not work?
395
- // if (autoFilterStart) {
396
- // ws['!autofilter'] = {ref: autoFilterStart + ":" + autoFilterEnd};
397
- // }
398
- return ws;
399
- }
400
- export async function createWorkbook(models, exportOptions) {
401
- const sheetjsPromise = SheetjsLoader.get();
402
- const XLSX = sheetjsPromise instanceof Promise ? await sheetjsPromise : sheetjsPromise;
403
- exportOptions = getExportOptions(exportOptions);
404
- const wb = XLSX.utils.book_new();
405
- models.forEach((m, i) => {
406
- m.calculations.evaluateAll();
407
- const modelExportOptions = { ...exportOptions, ...m.exportOptions };
408
- const ws = XLSX.utils.sheet_add_aoa(createWorksheet(m, modelExportOptions), getWorksheetCells(m, modelExportOptions));
409
- // ws["!protect"] = {};
410
- let name = m.name || `Sheet${i + 1}`;
411
- m.name = name;
412
- if (name.length > 31)
413
- name = name.substring(0, 31);
414
- XLSX.utils.book_append_sheet(wb, ws, name);
415
- });
416
- wb.Workbook = wb.Workbook || {};
417
- // wb.Workbook.Protection = { lockStructure: true };
418
- // worksheet properties within workbook
419
- models.forEach(m => {
420
- const index = wb.SheetNames.indexOf(m.name);
421
- if (index < 0)
422
- return;
423
- if (!wb.Workbook.Sheets)
424
- wb.Workbook.Sheets = [];
425
- if (!wb.Workbook.Sheets[index])
426
- wb.Workbook.Sheets[index] = {};
427
- if (m.tab?.hidden)
428
- wb.Workbook.Sheets[index].Hidden = 1;
429
- });
430
- return wb;
431
- }
432
- export async function exportXLSX(wb, filename = null) {
433
- const sheetjsPromise = SheetjsLoader.get();
434
- const XLSX = sheetjsPromise instanceof Promise ? await sheetjsPromise : sheetjsPromise;
435
- return filename
436
- ? XLSX.writeFile(wb, filename, { cellStyles: true, bookSST: true })
437
- : XLSX.writeXLSX(wb, { cellStyles: true, bookSST: true, type: 'buffer' });
438
- }
439
- //# sourceMappingURL=export.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { utils, paper, dates } from '@omegagrid/core';\nimport {\n\tencodeColumn, GridModel, CalculationModel, isLogicalOperator,\n\tStyle as OGStyle, Border as OGBorder, CellType, \n\tCellModel, CellBorderStyle, Merge, CellRange, PrintOptions,\n\tConditionalFormatThreshold\n} from '@omegagrid/grid';\nimport { ExportOptions, ExportableGridModel, Style, Border, BorderStyle, Color, ConditionalFormat } from './types';\nimport { SheetjsLoader } from './loader';\n\nimport type XLSXNS from 'xlsx';\nimport type { \n\tCellObject, ColInfo, ExcelDataType, Range, RowInfo, \n\tWorkBook, WorkSheet, \n} from 'xlsx';\n\nconst DEFAULT_BORDER_COLOR = 'aaaaaa';\n\nconst DEFAULT_BORDER_STYLE: CellBorderStyle = {\n\tbottom: {style: 'thin', color: DEFAULT_BORDER_COLOR},\n\ttop: {style: 'thin', color: DEFAULT_BORDER_COLOR},\n\tright: {style: 'thin', color: DEFAULT_BORDER_COLOR},\n\tleft: {style: 'thin', color: DEFAULT_BORDER_COLOR}\n};\n\nconst DEFAULT_EXPORT_OPTIONS: ExportOptions = {\n\texportHiddenRows: true,\n\texportHiddenColumns: true,\n\tgridLines: true,\n\tdefaultBorders: false,\n\tdropdownCells: 'value'\n};\n\nconst headerCellStyle: Style = {\n\talignment: {vertical: 'center', horizontal: 'center'},\n\tbold: true\n}\n\nconst cellTypeMap: Record<CellType, ExcelDataType> = {\n\t'g': 'n',\n\t'b': 'b',\n\t't': 's',\n\t'n': 'n',\n\t'd': 'd',\n\t'dt': 'd',\n\t's': 's',\n\t'm': 's',\n\t'tm': 's',\n\t'h': 's',\n\t'a': 'z',\n};\n\nexport function getWorksheetColumns(model: GridModel, exportOptions: ExportOptions) : ColInfo[] {\n\tconst sourceColumns = exportOptions.exportHiddenColumns ? model.columns : model.visibleColumns;\n\treturn sourceColumns.map(column => ({\n\t\tlevel: column.level,\n\t\twpx: column.width,\n\t\thidden: column.visibleIndex == null || model.visibleColumns[column.visibleIndex] != column\n\t}));\n}\n\nexport function getWorksheetRows(model: GridModel, exportOptions: ExportOptions) : RowInfo[] {\n\tconst sourceRows = exportOptions.exportHiddenRows ? model.rows : model.visibleRows;\n\tconst offset = model.headerCount;\n\tconst rows: RowInfo[] = new Array(sourceRows.length + offset);\n\t[...Array(offset).keys()].map(r => rows[r] = {level: 0});\n\tsourceRows.map((row, r) => rows[r + offset] = {\n\t\tlevel: row.level,\n\t\thpt: row.height * 0.75,\n\t\thidden: row.visibleIndex == null || model.visibleRows[row.visibleIndex] != row\n\t});\n\treturn rows;\n}\n\nexport function getWorksheetMerges(model: GridModel, exportOptions: ExportOptions) : Range[] {\n\tconst offset = model.headerCount;\n\t// TODO - add same logic for rows\n\tconst colIndex = exportOptions.exportHiddenColumns \n\t\t? (cell: Merge) => cell.c\n\t\t: (cell: Merge) => model.columns[cell.c].visibleIndex;\n\n\tconst mergedCells: Range[] = [];\n\tmodel.merges.mergedCells.forEach(merge => {\n\t\t//if (model.merges.hiddenCells.get(cell.r)?.get(cell.c)) return;\n\t\tmergedCells.push({\n\t\t\ts: {c: colIndex(merge), r: merge.r + offset},\n\t\t\te: {c: colIndex(merge) + merge.cs - 1, r: merge.r + offset + merge.rs - 1}\n\t\t});\n\t});\n\n\tmodel.mergedHeaders.forEach(cell => {\n\t\tif (cell.h?.hidden) return;\n\t\tmergedCells.push({\n\t\t\ts: {c: colIndex(cell), r: cell.r},\n\t\t\te: {c: colIndex(cell) + cell.cs - 1, r: cell.r + cell.rs - 1}\n\t\t});\n\t});\n\n\treturn mergedCells;\n}\n\nexport function getWorksheetHeaderCells(model: GridModel, exportOptions: ExportOptions) : CellObject[][] {\n\tconst count = model.headerCount;\n\tconst sourceColumns = exportOptions.exportHiddenColumns ? model.columns : model.visibleColumns;\n\tconst defaultBorder = getDefaultBorderStyle(exportOptions);\n\n\treturn [...Array(count).keys()].map(r => sourceColumns.map((column) => {\n\t\tconst header = column.header[r];\n\t\tconst cell: CellObject = {t: header ? 's' : 'z', s: headerCellStyle};\n\t\tif (header) {\n\t\t\tif (header.html) cell.h = `<span>${header.label}</span>`;\n\t\t\telse if (header.label != null) cell.v = header.label;\n\t\t\telse cell.t = 'z';\n\t\t}\n\n\t\tif (defaultBorder) {\n\t\t\tif (!cell.s) cell.s = {};\n\t\t\tcell.s = Object.assign({}, defaultBorder, cell.s);\n\t\t}\n\n\t\tif (header._style != null) {\n\t\t\tcell.s = Object.assign({}, cell.s, convertStyle(model.styles.get(header._style)));\n\t\t}\n\n\t\treturn cell;\n\t}));\n}\n\nfunction convertStyleColor(color: string) : Color {\n\treturn {rgb: color};\n}\n\nfunction convertStyleBorder(border: OGBorder): Border {\n\tif (border.style == 'none') return null;\n\treturn {\n\t\tstyle: border.style as unknown as BorderStyle,\n\t\tcolor: convertStyleColor(border.color)\n\t};\n}\n\nfunction convertStyleCellBorder(border: CellBorderStyle): Style {\n\tconst s: Style = {};\n\tif (border.bottom) s.bottom = convertStyleBorder(border.bottom);\n\tif (border.top) s.top = convertStyleBorder(border.top);\n\tif (border.right) s.right = convertStyleBorder(border.right);\n\tif (border.left) s.left = convertStyleBorder(border.left);\n\treturn s;\n}\n\nexport function convertStyle(style: OGStyle): Style {\n\tconst s: Style & {angle?: number, stops?: {v: number, rgb: string}[]} = {};\n\tif (style.color) s.color = convertStyleColor(style.color);\n\tif (style.bgColor) s.bgColor = convertStyleColor(style.bgColor);\n\tif (style.fgColor) s.fgColor = convertStyleColor(style.fgColor);\n\tif (style.patternType) s.patternType = style.patternType;\n\n\tif (style.alignment) s.alignment = style.alignment;\n\tif (style.bold != null) s.bold = style.bold;\n\tif (style.sz) s.sz = style.sz;\n\n\tif (style.bottom) s.bottom = convertStyleBorder(style.bottom);\n\tif (style.top) s.top = convertStyleBorder(style.top);\n\tif (style.right) s.right = convertStyleBorder(style.right);\n\tif (style.left) s.left = convertStyleBorder(style.left);\n\n\tif (style.angle != null) s.angle = style.angle;\n\tif (style.stops) s.stops = style.stops.map(stop => ({\n\t\tv: stop.v,\n\t\trgb: stop.rgb\n\t}));\n\n\treturn s;\n}\n\nfunction updateIndent(cellModel: CellModel, cell: CellObject) {\n\tconst indent = cellModel.calculatedIndent;\n\tif (indent > 0) {\n\t\tif (!cell.s) cell.s = {};\n\t\tif (!cell.s.alignment) cell.s.alignment = {};\n\t\tcell.s.alignment.indent = indent;\n\t}\n}\n\nfunction getDefaultBorderStyle(exportOptions: ExportOptions) {\n\tconst defaultBorder = exportOptions.defaultBorders === true ? DEFAULT_BORDER_STYLE : exportOptions.defaultBorders as CellBorderStyle;\n\treturn defaultBorder ? convertStyleCellBorder(defaultBorder) : null;\n}\n\nexport function getWorksheetCells(model: GridModel, exportOptions?: ExportOptions) : CellObject[][] {\n\texportOptions = getExportOptions(exportOptions);\n\tconst hOffset = model.headerCount;\n\tconst calculations = new CalculationModel(model);\n\tconst data: CellObject[][] = new Array(hOffset + model.rows.length);\n\tconst styles = new Map<number, Style>();\n\tconst defaultBorder = getDefaultBorderStyle(exportOptions);\n\tconst defaultDateFormat = model.options.dateFormat || 'yyyy-MM-dd';\n\tconst dropdowDisplayValue = exportOptions.dropdownCells == 'displayValue';\n\n\tgetWorksheetHeaderCells(model, exportOptions).forEach((row, r) => data[r] = row);\n\tconst sourceRows = exportOptions.exportHiddenRows ? model.rows : model.visibleRows;\n\tconst sourceColumns = exportOptions.exportHiddenColumns ? model.columns : model.visibleColumns;\n\tsourceRows.forEach((row, r) => data[r + hOffset] = sourceColumns.map((column) => {\n\t\tconst cellModel = row.cell(column.index);\n\t\tconst t = cellTypeMap[cellModel.type];\n\t\tconst cellObj: CellObject = {t: cellModel.hasValue ? t : 'z'};\n\t\tif (cellModel.hasFormula) {\n\t\t\tif (hOffset > 0) {\n\t\t\t\t// TODO - shift connected models\n\t\t\t\tcellObj.f = calculations.getFormula(cellModel).clone().shift({index: 0, offset: hOffset, direction: 'down'}).toExcelString();\n\t\t\t} else {\n\t\t\t\tcellObj.f = (calculations\n\t\t\t\t\t? calculations.getFormula(cellModel).toExcelString()\n\t\t\t\t\t: cellModel.formula\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (cellModel.type == 'd') {\n\t\t\t\tcellObj.t = 'n';\n\t\t\t\tcellObj.z = cellModel.format ?? defaultDateFormat;\n\t\t\t}\n\t\t} else if (cellModel.hasValue && !cellModel.isSpilled) {\n\t\t\tif (cellObj.t == 's') {\n\t\t\t\tcellObj.v = dropdowDisplayValue ? cellModel.formattedValue.toString() : cellModel.value.toString();\n\t\t\t} else if (cellObj.t != 'z') {\n\t\t\t\tcellObj.v = cellModel.value as (string | number | boolean | Date);\n\t\t\t}\n\t\t\t\n\t\t\tif (cellModel.type == 'g') {\n\t\t\t\tcellObj.t = utils.isString(cellObj.v) ? 's' : 'n';\n\t\t\t} else if (cellModel.type == 'd') {\n\t\t\t\tif (utils.isNumber(cellObj.v)) cellObj.t = 'n';\n\t\t\t}\n\t\t\t// html: cell.h = `<span>${cellModel.value}</span>`;\n\t\t}\n\n\t\tconst style = cellModel.composedStyle;\n\t\tif (style) {\n\t\t\tif (!styles.has(style.id)) styles.set(style.id, convertStyle(style));\n\t\t\tcellObj.s = {...styles.get(style.id)};\n\t\t}\n\t\tupdateIndent(cellModel, cellObj);\n\n\t\tif (cellModel.hasComment) {\n\t\t\tconst comments = cellModel.model.comments.get(cellModel.address);\n\t\t\tconst sheetComment: any = [];\n\t\t\tsheetComment.push({R: []});\n\t\t\tsheetComment.hidden = true;\n\t\t\tsheetComment[\"!pos\"] = {x: 0, y: 0, w: 400, h: 200};\n\t\t\tcomments.forEach(comment => {\n\t\t\t\tif (!comment.text) return;\n\t\t\t\tconst author = comment.author ? (comment.author.name ?? comment.author.id) : null;\n\t\t\t\tlet header = '';\n\t\t\t\tif (author) header = author;\n\t\t\t\tif (comment.date) header += (header ? ' - ' : '') + dates.format(comment.date, dates.getDateFormat(({withTime: true})));\n\t\t\t\tif (header) sheetComment[0].R.push({t: 's', v: header + \"\\n\", s: {bold: true}});\n\t\t\t\tsheetComment[0].R.push({t: 's', v: comment.text + \"\\n\"});\n\t\t\t});\n\t\t\tcellObj.c = sheetComment;\n\t\t\tconsole.log(cellObj);\n\t\t} // else if (cellModel.hasTooltip) {}\n\n\t\tif ((cellObj.t == 'n' || cellObj.t == 'd') && cellObj.z == null) {\n\t\t\tcellObj.z = cellModel.format ?? (cellObj.t == 'd' ? defaultDateFormat : 'General');\n\t\t}\n\n\t\tif (defaultBorder) {\n\t\t\tif (!cellObj.s) cellObj.s = {};\n\t\t\tcellObj.s = Object.assign({}, defaultBorder, cellObj.s);\n\t\t}\n\t\t\n\t\treturn cellObj;\n\t}));\n\n\treturn data;\n}\n\nfunction convertConditionalFormatBoundry(cb: ConditionalFormatThreshold, def?: Partial<ConditionalFormatThreshold>) {\n\tif (!cb && !def) return null;\n\tcb = Object.assign({}, def, cb);\n\treturn {\n\t\tt: cb.t,\n\t\tv: cb.v,\n\t\tcolor: convertStyleColor(cb.color)\n\t};\n}\n\nexport function getWorksheetConditionalFormats(model: GridModel) : ConditionalFormat[] {\n\tconst hOffset = model.headerCount;\n\treturn model.conditionalFormats.getSourceData().map((item) => {\n\t\treturn {\n\t\t\tref: CellRange.fromA1s(item.ranges).map(range => range.shiftDown(0, hOffset, null, true).A1).join(' '),\n\t\t\tt: item.type,\n\t\t\tf: item.condition && isLogicalOperator(item.condition[0]) ? ('A1' + item.condition) : (item.condition ?? null),\n\t\t\ts: item.style ? convertStyle(item.style as OGStyle) : null,\n\t\t\tstop: item.stop,\n\t\t\tcmin: convertConditionalFormatBoundry(item.cmin, (item.type == 'bar' ? {t: 'min', color: item.color} : null)),\n\t\t\tcmid: item.cmid ? convertConditionalFormatBoundry(item.cmid, {v: 50, t: 'percentile'}) : null,\n\t\t\tcmax: convertConditionalFormatBoundry(item.cmax, (item.type == 'bar' ? {t: 'max', color: item.color} : null)),\n\t\t\tcolor: convertStyleColor(item.color),\n\t\t\tv: item.v,\n\t\t\tthresh: item.thresh\n\t\t};\n\t});\n}\n\nexport function detectOutlineRowDirection(model: GridModel) : 'above' | 'below' {\n\tif (model.options.rowTree.reversed) return 'below';\n\t\n\tconst rows = model.rows;\n\tif (rows.length < 2) return 'above';\n\n\tfor (let r = 1; r < rows.length; r++) {\n\t\tif (rows[r].level != rows[r - 1].level) {\n\t\t\treturn rows[r].parent == rows[r - 1] ? 'above' : 'below';\n\t\t}\n\t}\n\n\treturn model.rows[0].level > model.rows[1].level ? 'below' : 'above';\n}\n\nexport function detectOutlineColumnDirection(model: GridModel) : 'left' | 'right' {\n\tif (model.options.columnTree.reversed == null) {\n\t\tif (model.columns.length < 2) return 'left';\n\t\treturn model.columns[0].level > model.columns[1].level ? 'right' : 'left';\n\t} else {\n\t\treturn model.options.columnTree.reversed ? 'right' : 'left';\n\t}\n}\n\nconst getExportOptions = (exportOptions: ExportOptions) => {\n\tconst options = Object.assign({}, DEFAULT_EXPORT_OPTIONS, exportOptions);\n\tif (options.defaultBorders) options.defaultBorders = DEFAULT_BORDER_STYLE\n\treturn options;\n};\n\n/** convert mm to inch */\nconst mmToInch = (mm: number) => mm / 25.4;\n\n/** calculates scale to fit all columns on one page */\nfunction calculateScale(model: GridModel) {\n\tconst printOptions = model.options.print ?? {} as PrintOptions;\n\n\tconst paperSize = utils.isString(printOptions.paper) \n\t\t? (paper.PAPER_SIZES[printOptions.paper] ?? paper.PAPER_SIZES.A4)\n\t\t: printOptions.paper as paper.PaperSize;\n\n\tconst width = mmToInch(paperSize.width - printOptions.margins.left - printOptions.margins.right);\n\tconst columnWidth = model.columns.reduce((acc, column) => acc + column.width, 0) / 96;\n\t\n\treturn Math.round((width / columnWidth) * 100) - 2;\n}\n\nexport function convertMargins(margins: PrintOptions['margins']) {\n\tif (!margins) return null;\n\treturn {\n\t\ttop: mmToInch(margins.top),\n\t\tbottom: mmToInch(margins.bottom),\n\t\tleft: mmToInch(margins.left),\n\t\tright: mmToInch(margins.right),\n\t\theader: mmToInch(margins.header),\n\t\tfooter: mmToInch(margins.footer)\n\t};\n\n}\n\nfunction createPrintOptions(model: GridModel, exportOptions: ExportOptions) {\n\tconst options = model.options.print ?? {} as PrintOptions;\n\tconst printOptions: any = {props: {}};\n\tprintOptions.props.scale = options.scale ? options.scale : calculateScale(model);\n\tprintOptions.props.paper = options.paper;\n\tprintOptions.props.orientation = options.orientation;\n\tif (options.margins) printOptions.margins = convertMargins(options.margins);\n\n\t// printOptions.props.fit = {width: 1, height: 0}; // does not work!!!\n\t/*\n\t\"Fit Sheet on One page\"\t{ width: 1, height: 1 }\n\t\"Fit All Columns on One Page\"\t{ width: 1, height: 0 }\n\t\"Fit All Rows on One Page\"\t{ width: 0, height: 1 }\n\t*/\n\n\tconst rowBreaks = options.rowBreaks;\n\tif (rowBreaks?.length > 0) {\n\t\tprintOptions.rowBreaks = rowBreaks.map((row) => ({\n\t\t\tR: exportOptions.exportHiddenRows ? row : model.rows[row].visibleIndex,\n\t\t}));\n\n\t\tconst rowTitlesRange = model.options?.print?.rowTitles \n\t\t\t? CellRange.fromA1(model.options?.print?.rowTitles) : null;\n\n\t\tif (rowTitlesRange) {\n\t\t\tprintOptions.titles = {\n\t\t\t\ts: {r: rowTitlesRange.r1, c: -1},\n\t\t\t\te: {r: rowTitlesRange.r2, c: -1}\n\t\t\t};\n\t\t}\n\t}\n\t\n\treturn printOptions;\n}\n\nexport function createWorksheet(model: GridModel, exportOptions?: ExportOptions) : WorkSheet {\n\texportOptions = getExportOptions(exportOptions);\n\tconst ws: WorkSheet = {};\n\tws['!cols'] = getWorksheetColumns(model, exportOptions);\n\tws['!rows'] = getWorksheetRows(model, exportOptions);\n\tws['!merges'] = getWorksheetMerges(model, exportOptions);\n\tws['!condfmt'] = getWorksheetConditionalFormats(model);\n\n\tws['!outline'] = {\n\t\t'above': detectOutlineRowDirection(model) == 'above',\n\t\t'left': detectOutlineColumnDirection(model) == 'left'\n\t};\n\t\n\tif (model.options.freezeLeft || model.options.freezeTop) {\n\t\tws['!freeze'] = `${encodeColumn(model.options.freezeLeft)}${model.headerCount + model.options.freezeTop + 1}`;\n\t} else if (model.headerCount > 0) {\n\t\tws['!freeze'] = `A${model.headerCount + 1}`;\n\t}\n\t\n\tws['!gridlines'] = exportOptions.gridLines;\n\tws['!print'] = createPrintOptions(model, exportOptions);\n\n\t// if (model.tab?.color) ws['!tabcolor'] = convertStyleColor(model.tab.color); // does not work?\n\t\n\t// if (autoFilterStart) {\n\t// \tws['!autofilter'] = {ref: autoFilterStart + \":\" + autoFilterEnd};\n\t// }\n\n\treturn ws;\n}\n\nexport async function createWorkbook(models: ExportableGridModel[], exportOptions?: ExportOptions) {\n\tconst sheetjsPromise = SheetjsLoader.get();\n\tconst XLSX = sheetjsPromise instanceof Promise ? await sheetjsPromise : sheetjsPromise as typeof XLSXNS;\n\n\texportOptions = getExportOptions(exportOptions);\n\n\tconst wb = XLSX.utils.book_new();\n\tmodels.forEach((m, i) => {\n\t\tm.calculations.evaluateAll();\n\t\tconst modelExportOptions = {...exportOptions, ...m.exportOptions};\n\t\tconst ws = XLSX.utils.sheet_add_aoa(\n\t\t\tcreateWorksheet(m, modelExportOptions),\n\t\t\tgetWorksheetCells(m, modelExportOptions)\n\t\t);\n\n\t\t// ws[\"!protect\"] = {};\n\n\t\tlet name = m.name || `Sheet${i + 1}`;\n\t\tm.name = name;\n\t\tif (name.length > 31) name = name.substring(0, 31);\n\t\tXLSX.utils.book_append_sheet(wb, ws, name);\n\t});\n\n\twb.Workbook = wb.Workbook || {};\n\t// wb.Workbook.Protection = { lockStructure: true };\n\n\t// worksheet properties within workbook\n\tmodels.forEach(m => {\n\t\tconst index = wb.SheetNames.indexOf(m.name);\n\t\tif (index < 0) return;\n\t\tif (!wb.Workbook.Sheets) wb.Workbook.Sheets = [];\n\t\tif (!wb.Workbook.Sheets[index]) wb.Workbook.Sheets[index] = {};\n\t\tif (m.tab?.hidden) wb.Workbook.Sheets[index].Hidden = 1;\n\t});\n\n\treturn wb;\n}\n\nexport async function exportXLSX(wb: WorkBook, filename: string = null) {\n\tconst sheetjsPromise = SheetjsLoader.get();\n\tconst XLSX = sheetjsPromise instanceof Promise ? await sheetjsPromise : sheetjsPromise as typeof XLSXNS;\n\treturn filename \n\t\t? XLSX.writeFile(wb, filename, {cellStyles: true, bookSST: true})\n\t\t: XLSX.writeXLSX(wb, {cellStyles: true, bookSST: true, type: 'buffer'});\n}"]}
package/dist/import.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import { GroupModelSource, NameSource } from '@omegagrid/grid';
2
- import { WorkBook, ParsingOptions } from 'xlsx';
3
- type Names = Map<string, NameSource[]>;
4
- export declare function getWorkbookNames(wb: WorkBook): Names;
5
- export declare function createModel(file: File, options?: Partial<ParsingOptions>): Promise<GroupModelSource>;
6
- export declare function createModelFromWorkbook(wb: WorkBook): GroupModelSource;
7
- export declare function createModelFromArrayBuffer(data: ArrayBuffer | Uint8Array, options?: Partial<ParsingOptions>): Promise<GroupModelSource>;
8
- export {};
9
- //# sourceMappingURL=import.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../src/import.ts"],"names":[],"mappings":"AAEA,OAAO,EAGc,gBAAgB,EAAoC,UAAU,EAClF,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEK,QAAQ,EAAE,cAAc,EACnC,MAAM,MAAM,CAAC;AAEd,KAAK,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAsIvC,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,SAoB5C;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,6BAG9E;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,QAAQ,oBAenD;AAED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,WAAW,GAAC,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,6BAO/G"}
package/dist/import.js DELETED
@@ -1,182 +0,0 @@
1
- import { numbers } from '@omegagrid/core';
2
- import { SheetjsLoader } from './loader';
3
- import { CellRange, stripFormulaPrefix } from '@omegagrid/grid';
4
- const cellTypeMap = {
5
- 'b': 'b',
6
- 's': 't',
7
- 'n': 'n',
8
- 'd': 'd',
9
- 'z': 'g',
10
- 'e': 't'
11
- };
12
- function convertStyleColor(color) {
13
- return color.rgb;
14
- }
15
- function convertStyleBorder(border) {
16
- return {
17
- color: convertStyleColor(border.color),
18
- style: border.style
19
- };
20
- }
21
- function convertStyle(style) {
22
- const s = {};
23
- if (style.color)
24
- s.color = convertStyleColor(style.color);
25
- if (style.bgColor)
26
- s.bgColor = convertStyleColor(style.bgColor);
27
- if (style.fgColor)
28
- s.fgColor = convertStyleColor(style.fgColor);
29
- if (!s.fgColor && s.color == '000000')
30
- s.color = null;
31
- if (style.alignment)
32
- s.alignment = style.alignment;
33
- if (style.bold)
34
- s.bold = style.bold;
35
- if (style.sz)
36
- s.sz = style.sz;
37
- if (style.top)
38
- s.top = convertStyleBorder(style.top);
39
- if (style.bottom)
40
- s.bottom = convertStyleBorder(style.bottom);
41
- if (style.left)
42
- s.left = convertStyleBorder(style.left);
43
- if (style.right)
44
- s.right = convertStyleBorder(style.right);
45
- return s;
46
- }
47
- function getGridCells(ws) {
48
- const cells = [];
49
- const merges = new Map();
50
- (ws['!merges'] ?? []).forEach(m => {
51
- const range = new CellRange(m.s.c, m.s.r);
52
- merges.set(range.A1, { c: m.s.c, cs: m.e.c - m.s.c + 1, r: m.s.r, rs: m.e.r - m.s.r + 1 });
53
- });
54
- for (const address in ws) {
55
- if (address[0] == '!')
56
- continue;
57
- const cellObj = ws[address];
58
- const range = CellRange.fromA1(address);
59
- const cell = { r: range.r1, c: range.c1, t: cellTypeMap[cellObj.t] };
60
- const merge = merges.get(address);
61
- if (merge) {
62
- cell.cs = merge.cs;
63
- cell.rs = merge.rs;
64
- }
65
- if (cellObj.s)
66
- cell.s = convertStyle(cellObj.s);
67
- if (cellObj.f)
68
- cell.f = stripFormulaPrefix(cellObj.f);
69
- else
70
- cell.v = cellObj.v;
71
- if (['n', 'd'].includes(cellObj.t) && cellObj.z != null && cellObj.z != 'General') {
72
- cell.z = numbers.fixNumberFormat(cellObj.z, 'd');
73
- }
74
- cells.push(cell);
75
- }
76
- return cells;
77
- }
78
- function getGridRows(ws, count) {
79
- const srcRows = ws['!rows'] ?? [];
80
- const rows = new Array(count);
81
- let row;
82
- for (let r = 0; r < count; r++) {
83
- row = srcRows[r];
84
- rows[r] = { l: (row ? row.level : 0) || 0, h: row ? row.hpx : null };
85
- }
86
- return rows;
87
- }
88
- function getGridColumns(ws, count) {
89
- const srcCols = ws['!cols'] ?? [];
90
- const columns = new Array(count);
91
- let col;
92
- for (let c = 0; c < count; c++) {
93
- col = srcCols[c];
94
- columns[c] = { l: (col ? col.level : 0) || 0, w: col ? col.wpx : null };
95
- }
96
- return columns;
97
- }
98
- function getConditionalStyles(ws) {
99
- return ws['!condfmt']?.filter((item) => ['formula', 'scale', 'bar'].includes(item.t)).map((item) => {
100
- const rule = {
101
- type: item.t,
102
- ranges: item.ref.toString().replace(/\s/g, ';')
103
- };
104
- rule.style = item.s ? convertStyle(item.s) : null;
105
- rule.cmin = item.cmin ? { t: item.cmin.t, color: item.cmin.color ? convertStyleColor(item.cmin.color) : null } : null;
106
- rule.cmid = item.cmid ? { t: item.cmid.t, color: item.cmid.color ? convertStyleColor(item.cmid.color) : null } : null;
107
- rule.cmax = item.cmax ? { t: item.cmax.t, color: item.cmax.color ? convertStyleColor(item.cmax.color) : null } : null;
108
- rule.color = item.color ? convertStyleColor(item.color) : null;
109
- rule.condition = item.f;
110
- rule.stop = true;
111
- return rule;
112
- });
113
- }
114
- function createGridModel(ws, names) {
115
- const range = ws['!ref'] ? CellRange.fromA1(ws['!ref']) : CellRange.fromA1('A1:T100');
116
- const source = {};
117
- const options = {};
118
- if (ws['!freeze']) {
119
- const freezeRange = CellRange.fromA1(ws['!freeze']);
120
- options.freezeLeft = freezeRange.c1;
121
- options.freezeTop = freezeRange.r1;
122
- }
123
- source.options = options;
124
- source.rows = getGridRows(ws, range.r2 + 1);
125
- source.columns = getGridColumns(ws, range.c2 + 1);
126
- source.cells = getGridCells(ws);
127
- source.names = names;
128
- source.rules = getConditionalStyles(ws);
129
- return source;
130
- }
131
- export function getWorkbookNames(wb) {
132
- const names = new Map();
133
- wb.Workbook.Names.forEach(({ Name, Ref }) => {
134
- const [sheet, address] = Ref.split('!');
135
- if (!address)
136
- return;
137
- let map = names.get(sheet);
138
- if (!map)
139
- names.set(sheet, map = []);
140
- const range = CellRange.fromA1(address);
141
- if (range.c1Anchor && !range.r1Anchor) {
142
- range.r1 = 0;
143
- range.r2 = Infinity;
144
- }
145
- else if (!range.c1Anchor && range.r1Anchor) {
146
- range.c1 = 0;
147
- range.c2 = Infinity;
148
- }
149
- range.removeAnchors();
150
- map.push({ name: Name, ref: range.A1 });
151
- });
152
- return names;
153
- }
154
- export async function createModel(file, options) {
155
- performance.mark('start_import');
156
- return createModelFromArrayBuffer(await file.arrayBuffer(), options);
157
- }
158
- export function createModelFromWorkbook(wb) {
159
- const names = getWorkbookNames(wb);
160
- performance.mark('sheets_start');
161
- const modelSource = { models: [], layout: { items: [{ tabs: [] }] } };
162
- for (const sheetName in wb.Sheets) {
163
- performance.mark(`sheet_start_${sheetName}`);
164
- modelSource.layout.items[0].tabs.push({ id: sheetName });
165
- modelSource.models.push({
166
- ...createGridModel(wb.Sheets[sheetName], names.get(sheetName)),
167
- name: sheetName
168
- });
169
- performance.mark(`sheet_end_${sheetName}`);
170
- }
171
- performance.mark('sheets_end');
172
- return modelSource;
173
- }
174
- export async function createModelFromArrayBuffer(data, options) {
175
- performance.mark('array_buffer');
176
- const bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;
177
- const XLSX = await SheetjsLoader.get();
178
- const wb = XLSX.read(bytes, Object.assign({ cellNF: true, cellText: false, cellStyles: true, type: 'buffer' }, options || {}));
179
- performance.mark('wb_read');
180
- return createModelFromWorkbook(wb);
181
- }
182
- //# sourceMappingURL=import.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"import.js","sourceRoot":"","sources":["../src/import.ts"],"names":[],"mappings":"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","sourcesContent":["import { UIValueType, numbers } from '@omegagrid/core';\nimport { SheetjsLoader } from './loader';\nimport {\n\tStyle as OGStyle, CellSource, Border as OGBorder, \n\tCellAddress, Merge, CellRange, GridSource,\n\tOptions, RowSource, GroupModelSource, stripFormulaPrefix, ColumnSource, NameSource, ConditionalFormatItemSource, BorderStyle\n} from '@omegagrid/grid';\nimport { Style, RGBColor, Border, CFGeneric } from './types';\nimport { \n\tCellObject, ColInfo, ExcelDataType, RowInfo, \n\tWorkSheet, WorkBook, ParsingOptions //, RGBColor, Border, CFGeneric\n} from 'xlsx';\n\ntype Names = Map<string, NameSource[]>;\n\nconst cellTypeMap: Record<ExcelDataType, UIValueType> = {\n\t'b': 'b',\n\t's': 't',\n\t'n': 'n',\n\t'd': 'd',\n\t'z': 'g',\n\t'e': 't'\n};\n\nfunction convertStyleColor(color: RGBColor) : string {\n\treturn color.rgb as string;\n}\n\nfunction convertStyleBorder(border: Border): OGBorder {\n\treturn {\n\t\tcolor: convertStyleColor(border.color as RGBColor),\n\t\tstyle: border.style as unknown as BorderStyle\n\t};\n}\n\nfunction convertStyle(style: Style) {\n\tconst s: OGStyle = {};\n\tif (style.color) s.color = convertStyleColor(style.color as RGBColor);\n\tif (style.bgColor) s.bgColor = convertStyleColor(style.bgColor as RGBColor);\n\tif (style.fgColor) s.fgColor = convertStyleColor(style.fgColor as RGBColor);\n\tif (!s.fgColor && s.color == '000000') s.color = null;\n\n\tif (style.alignment) s.alignment = style.alignment;\n\tif (style.bold) s.bold = style.bold;\n\tif (style.sz) s.sz = style.sz;\n\n\tif (style.top) s.top = convertStyleBorder(style.top);\n\tif (style.bottom) s.bottom = convertStyleBorder(style.bottom);\n\tif (style.left) s.left = convertStyleBorder(style.left);\n\tif (style.right) s.right = convertStyleBorder(style.right);\n\t\n\treturn s;\n}\n\nfunction getGridCells(ws: WorkSheet) {\n\tconst cells: CellSource[] = [];\n\tconst merges = new Map<CellAddress, Merge>();\n\t(ws['!merges'] ?? []).forEach(m => {\n\t\tconst range = new CellRange(m.s.c, m.s.r);\n\t\tmerges.set(range.A1, {c: m.s.c, cs: m.e.c - m.s.c + 1, r: m.s.r, rs: m.e.r - m.s.r + 1});\n\t});\n\n\tfor (const address in ws) {\n\t\tif (address[0] == '!') continue;\n\t\tconst cellObj = ws[address] as CellObject;\n\t\tconst range = CellRange.fromA1(address);\n\t\tconst cell: CellSource = {r: range.r1, c: range.c1, t: cellTypeMap[cellObj.t]};\n\t\tconst merge = merges.get(address);\n\n\t\tif (merge) {\n\t\t\tcell.cs = merge.cs;\n\t\t\tcell.rs = merge.rs;\n\t\t}\n\t\t\n\t\tif (cellObj.s) cell.s = convertStyle(cellObj.s);\n\t\t\n\t\tif (cellObj.f) cell.f = stripFormulaPrefix(cellObj.f);\n\t\telse cell.v = cellObj.v;\n\n\t\tif (['n', 'd'].includes(cellObj.t) && cellObj.z != null && cellObj.z != 'General') {\n\t\t\tcell.z = numbers.fixNumberFormat(cellObj.z as string, 'd');\n\t\t}\n\t\t\n\t\tcells.push(cell);\n\t}\n\treturn cells;\n}\n\nfunction getGridRows(ws: WorkSheet, count: number) {\n\tconst srcRows = ws['!rows'] ?? [];\n\tconst rows = new Array<RowSource>(count);\n\tlet row: RowInfo;\n\tfor (let r = 0; r < count; r++) {\n\t\trow = srcRows[r];\n\t\trows[r] = {l: (row ? row.level : 0) || 0, h: row ? row.hpx : null};\n\t}\n\treturn rows;\n}\n\nfunction getGridColumns(ws: WorkSheet, count: number) {\n\tconst srcCols = ws['!cols'] ?? [];\n\tconst columns = new Array<ColumnSource>(count);\n\tlet col: ColInfo;\n\tfor (let c = 0; c < count; c++) {\n\t\tcol = srcCols[c];\n\t\tcolumns[c] = {l: (col ? col.level : 0) || 0, w: col ? col.wpx : null};\n\t}\n\treturn columns;\n}\n\nfunction getConditionalStyles(ws: WorkSheet) {\n\treturn ws['!condfmt']?.filter((item: CFGeneric) => ['formula', 'scale', 'bar'].includes(item.t)).map((item: CFGeneric) => {\n\t\tconst rule: ConditionalFormatItemSource = {\n\t\t\ttype: item.t,\n\t\t\tranges: item.ref.toString().replace(/\\s/g, ';')\n\t\t};\n\t\trule.style = item.s ? convertStyle(item.s) : null;\n\t\trule.cmin = item.cmin ? {t: item.cmin.t, color: item.cmin.color ? convertStyleColor(item.cmin.color) : null} : null;\n\t\trule.cmid = item.cmid ? {t: item.cmid.t, color: item.cmid.color ? convertStyleColor(item.cmid.color) : null} : null;\n\t\trule.cmax = item.cmax ? {t: item.cmax.t, color: item.cmax.color ? convertStyleColor(item.cmax.color) : null} : null;\n\t\trule.color = item.color ? convertStyleColor(item.color) : null;\n\t\trule.condition = item.f;\n\t\trule.stop = true;\n\t\treturn rule;\n\t});\n}\n\nfunction createGridModel(ws: WorkSheet, names: NameSource[]) {\n\tconst range = ws['!ref'] ? CellRange.fromA1(ws['!ref']) : CellRange.fromA1('A1:T100');\n\tconst source: GridSource = {};\n\tconst options: Options = {};\n\n\tif (ws['!freeze']) {\n\t\tconst freezeRange = CellRange.fromA1(ws['!freeze']);\n\t\toptions.freezeLeft = freezeRange.c1;\n\t\toptions.freezeTop = freezeRange.r1;\n\t}\n\n\tsource.options = options;\n\tsource.rows = getGridRows(ws, range.r2 + 1);\n\tsource.columns = getGridColumns(ws, range.c2 + 1);\n\tsource.cells = getGridCells(ws);\n\tsource.names = names;\n\tsource.rules = getConditionalStyles(ws);\n\treturn source;\n}\n\nexport function getWorkbookNames(wb: WorkBook) {\n\tconst names: Names = new Map();\n\twb.Workbook.Names.forEach(({Name, Ref}) => {\n\t\tconst [sheet, address] = Ref.split('!');\n\t\tif (!address) return;\n\t\tlet map = names.get(sheet);\n\t\tif (!map) names.set(sheet, map = []);\n\n\t\tconst range = CellRange.fromA1(address);\n\t\tif (range.c1Anchor && !range.r1Anchor) {\n\t\t\trange.r1 = 0;\n\t\t\trange.r2 = Infinity;\n\t\t} else if (!range.c1Anchor && range.r1Anchor) {\n\t\t\trange.c1 = 0;\n\t\t\trange.c2 = Infinity;\n\t\t}\n\t\trange.removeAnchors();\n\t\tmap.push({name: Name, ref: range.A1});\n\t});\n\treturn names;\n}\n\nexport async function createModel(file: File, options?: Partial<ParsingOptions>) {\n\tperformance.mark('start_import');\n\treturn createModelFromArrayBuffer(await file.arrayBuffer(), options);\n}\n\nexport function createModelFromWorkbook(wb: WorkBook) {\n\tconst names = getWorkbookNames(wb);\n\tperformance.mark('sheets_start');\n\tconst modelSource: GroupModelSource = {models: [], layout: {items: [{tabs: []}]}};\n\tfor (const sheetName in wb.Sheets) {\n\t\tperformance.mark(`sheet_start_${sheetName}`);\n\t\tmodelSource.layout.items[0].tabs.push({id: sheetName});\n\t\tmodelSource.models.push({\n\t\t\t...createGridModel(wb.Sheets[sheetName], names.get(sheetName)),\n\t\t\tname: sheetName\n\t\t});\n\t\tperformance.mark(`sheet_end_${sheetName}`);\n\t}\n\tperformance.mark('sheets_end');\n\treturn modelSource;\n}\n\nexport async function createModelFromArrayBuffer(data: ArrayBuffer|Uint8Array, options?: Partial<ParsingOptions>) {\n\tperformance.mark('array_buffer');\n\tconst bytes = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n\tconst XLSX = await SheetjsLoader.get();\n\tconst wb = XLSX.read(bytes, Object.assign({cellNF: true, cellText: false, cellStyles: true, type: 'buffer'}, options || {}));\n\tperformance.mark('wb_read');\n\treturn createModelFromWorkbook(wb);\n}"]}
package/dist/index.d.ts DELETED
@@ -1,8 +0,0 @@
1
- export * from './types';
2
- export * from './export';
3
- export * from './import';
4
- export * from './editorPlugin';
5
- export * from './loader';
6
- import { SheetjsLoader } from './loader';
7
- export { SheetjsLoader as loader };
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,IAAI,MAAM,EAAE,CAAC"}
package/dist/index.js DELETED
@@ -1,8 +0,0 @@
1
- export * from './types';
2
- export * from './export';
3
- export * from './import';
4
- export * from './editorPlugin';
5
- export * from './loader';
6
- import { SheetjsLoader } from './loader';
7
- export { SheetjsLoader as loader };
8
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,IAAI,MAAM,EAAE,CAAC","sourcesContent":["export * from './types';\nexport * from './export';\nexport * from './import';\nexport * from './editorPlugin';\nexport * from './loader';\n\nimport { SheetjsLoader } from './loader';\nexport { SheetjsLoader as loader };\n"]}
package/dist/loader.d.ts DELETED
@@ -1,16 +0,0 @@
1
- import type XLSXNS from 'xlsx';
2
- declare global {
3
- interface Window {
4
- XLSX: typeof XLSXNS;
5
- define: unknown;
6
- }
7
- }
8
- export declare class SheetjsLoader {
9
- static xlsx: typeof XLSXNS;
10
- static path: string;
11
- static init(path: string): void;
12
- static get(): Promise<typeof XLSXNS>;
13
- static getSync(): typeof XLSXNS;
14
- static load(): Promise<typeof XLSXNS>;
15
- }
16
- //# sourceMappingURL=loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,MAAM,CAAC;AAE/B,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QAClB,IAAI,EAAE,OAAO,MAAM,CAAC;QACpB,MAAM,EAAE,OAAO,CAAA;KACZ;CACJ;AAED,qBAAa,aAAa;IAEzB,MAAM,CAAC,IAAI,EAAE,OAAO,MAAM,CAAC;IAC3B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;IAEpB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM;WAIX,GAAG;IAKhB,MAAM,CAAC,OAAO;IAId,MAAM,CAAC,IAAI;CAMX"}
package/dist/loader.js DELETED
@@ -1,21 +0,0 @@
1
- import { AMD } from '@omegagrid/core';
2
- export class SheetjsLoader {
3
- static init(path) {
4
- this.path = path;
5
- }
6
- static async get() {
7
- if (!this.xlsx)
8
- this.xlsx = await this.load();
9
- return this.xlsx;
10
- }
11
- static getSync() {
12
- return this.xlsx;
13
- }
14
- static load() {
15
- if (!AMD.require)
16
- throw new Error('AMDLoader is not initialized');
17
- AMD.require.config({ paths: { 'xlsx': this.path + '/xlsx.full.min' } });
18
- return new Promise(resolve => AMD.require(['xlsx'], () => resolve(self.XLSX)));
19
- }
20
- }
21
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAUtC,MAAM,OAAO,aAAa;IAKzB,MAAM,CAAC,IAAI,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAG;QACf,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,OAAO;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI;QACV,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAC,KAAK,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,gBAAgB,EAAC,EAAC,CAAC,CAAC;QACpE,OAAO,IAAI,OAAO,CAAgB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC;CAED","sourcesContent":["import { AMD } from '@omegagrid/core';\nimport type XLSXNS from 'xlsx';\n\ndeclare global {\n interface Window { \n\t\tXLSX: typeof XLSXNS,\n\t\tdefine: unknown\n }\n}\n\nexport class SheetjsLoader {\n\n\tstatic xlsx: typeof XLSXNS;\n\tstatic path: string;\n\t\n\tstatic init(path: string) {\n\t\tthis.path = path;\n\t}\n\n\tstatic async get() {\n\t\tif (!this.xlsx) this.xlsx = await this.load();\n\t\treturn this.xlsx;\n\t}\n\n\tstatic getSync() {\n\t\treturn this.xlsx;\n\t}\n\n\tstatic load() {\n\t\tif (!AMD.require) throw new Error('AMDLoader is not initialized');\n\t\tAMD.require.config({paths: {'xlsx': this.path + '/xlsx.full.min'}});\n\t\treturn new Promise<typeof XLSXNS>(resolve => AMD.require(['xlsx'], () => resolve(self.XLSX)));\n\t}\n\t\n}"]}
package/dist/types.d.ts DELETED
@@ -1,24 +0,0 @@
1
- import type { CellBorderStyle, GridModel } from "@omegagrid/grid";
2
- export type ExportOptions = {
3
- exportHiddenRows?: boolean;
4
- exportHiddenColumns?: boolean;
5
- gridLines?: boolean;
6
- defaultBorders?: boolean | CellBorderStyle;
7
- /** what should be exported for dropdown cells */
8
- dropdownCells?: 'value' | 'displayValue';
9
- };
10
- export type ExportableGridModel = GridModel & {
11
- exportOptions?: ExportOptions;
12
- };
13
- export type Style = Record<string, any>;
14
- export type Border = Record<string, any>;
15
- export type BorderStyle = 'thin' | 'medium' | 'thick' | 'double' | 'dotted' | 'dashDot' | 'dashDotDot' | 'dashed' | 'hair' | 'mediumDashDot' | 'mediumDashDotDot' | 'mediumDashed' | 'slantDashDot';
16
- export type Color = {
17
- rgb: string;
18
- };
19
- export type RGBColor = {
20
- rgb: string;
21
- };
22
- export type ConditionalFormat = Record<string, any>;
23
- export type CFGeneric = Record<string, any>;
24
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,MAAM,aAAa,GAAG;IAE3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAG9B,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,cAAc,CAAC,EAAE,OAAO,GAAC,eAAe,CAAC;IAEzC,iDAAiD;IACjD,aAAa,CAAC,EAAE,OAAO,GAAC,cAAc,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG;IAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CAAC,CAAC;AAG9E,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACzC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,eAAe,GAAG,kBAAkB,GAAG,cAAc,GAAG,cAAc,CAAC;AACpM,MAAM,MAAM,KAAK,GAAG;IAAC,GAAG,EAAE,MAAM,CAAA;CAAC,CAAC;AAClC,MAAM,MAAM,QAAQ,GAAG;IAAC,GAAG,EAAE,MAAM,CAAA;CAAC,CAAC;AACrC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACpD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC"}
package/dist/types.js DELETED
@@ -1,3 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- export {};
3
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,uDAAuD","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { CellBorderStyle, GridModel } from \"@omegagrid/grid\";\n\nexport type ExportOptions = {\n\t/* Allow export of hidden rows, default = true */\n\texportHiddenRows?: boolean,\n\n\t/* Allow export of hidden columns, default = true */\n\texportHiddenColumns?: boolean,\n\t\n\t/* Visible gridlines, default = true */\n\tgridLines?: boolean,\n\n\t/* Exported border style of cells without border specified, default = false */\n\tdefaultBorders?: boolean|CellBorderStyle,\n\n\t/** what should be exported for dropdown cells */\n\tdropdownCells?: 'value'|'displayValue',\n};\n\nexport type ExportableGridModel = GridModel & {exportOptions?: ExportOptions};\n\n\nexport type Style = Record<string, any>;\nexport type Border = Record<string, any>;\nexport type BorderStyle = 'thin' | 'medium' | 'thick' | 'double' | 'dotted' | 'dashDot' | 'dashDotDot' | 'dashed' | 'hair' | 'mediumDashDot' | 'mediumDashDotDot' | 'mediumDashed' | 'slantDashDot';\nexport type Color = {rgb: string};\nexport type RGBColor = {rgb: string};\nexport type ConditionalFormat = Record<string, any>;\nexport type CFGeneric = Record<string, any>;\n"]}