@deephaven/iris-grid 1.28.0 → 1.29.0
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/ColumnStatistics.js +1 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/IrisGrid.d.ts +28 -4
- package/dist/IrisGrid.d.ts.map +1 -1
- package/dist/IrisGrid.js +185 -113
- package/dist/IrisGrid.js.map +1 -1
- package/dist/IrisGridCopyHandler.d.ts +5 -4
- package/dist/IrisGridCopyHandler.d.ts.map +1 -1
- package/dist/IrisGridCopyHandler.js +36 -29
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridModel.d.ts +2 -2
- package/dist/IrisGridModel.d.ts.map +1 -1
- package/dist/IrisGridModel.js +2 -2
- package/dist/IrisGridModel.js.map +1 -1
- package/dist/IrisGridSelectionUtils.d.ts +26 -0
- package/dist/IrisGridSelectionUtils.d.ts.map +1 -0
- package/dist/IrisGridSelectionUtils.js +84 -0
- package/dist/IrisGridSelectionUtils.js.map +1 -0
- package/dist/IrisGridTableModel.d.ts +4 -4
- package/dist/IrisGridTableModel.d.ts.map +1 -1
- package/dist/IrisGridTableModel.js +8 -8
- package/dist/IrisGridTableModel.js.map +1 -1
- package/dist/IrisGridTableModelTemplate.d.ts +25 -3
- package/dist/IrisGridTableModelTemplate.d.ts.map +1 -1
- package/dist/IrisGridTableModelTemplate.js +283 -79
- package/dist/IrisGridTableModelTemplate.js.map +1 -1
- package/dist/IrisGridTreeTableModel.d.ts +2 -0
- package/dist/IrisGridTreeTableModel.d.ts.map +1 -1
- package/dist/IrisGridTreeTableModel.js +11 -0
- package/dist/IrisGridTreeTableModel.js.map +1 -1
- package/dist/KeyedGridModel.d.ts +63 -0
- package/dist/KeyedGridModel.d.ts.map +1 -0
- package/dist/KeyedGridModel.js +12 -0
- package/dist/KeyedGridModel.js.map +1 -0
- package/dist/KeyedSelection.d.ts +194 -0
- package/dist/KeyedSelection.d.ts.map +1 -0
- package/dist/KeyedSelection.js +699 -0
- package/dist/KeyedSelection.js.map +1 -0
- package/dist/LazyIrisGrid.d.ts +1 -0
- package/dist/LazyIrisGrid.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/CopyKeyHandler.js +8 -6
- package/dist/key-handlers/CopyKeyHandler.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.d.ts.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.js +94 -69
- package/dist/mousehandlers/IrisGridContextMenuHandler.js.map +1 -1
- package/dist/sidebar/TableCsvExporter.d.ts +7 -4
- package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +86 -38
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/package.json +9 -9
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { Component, type ReactElement } from 'react';
|
|
2
2
|
import { type ItemKey } from '@deephaven/components';
|
|
3
|
-
import { GridRange, type ModelSizeMap, type MoveOperation } from '@deephaven/grid';
|
|
3
|
+
import { GridRange, type ModelSizeMap, type MoveOperation, type Selection } from '@deephaven/grid';
|
|
4
4
|
import type { dh as DhType } from '@deephaven/jsapi-types';
|
|
5
5
|
import './TableCsvExporter.scss';
|
|
6
6
|
import type IrisGridModel from '../IrisGridModel';
|
|
@@ -16,7 +16,7 @@ interface TableCsvExporterProps {
|
|
|
16
16
|
onDownloadStart: () => void;
|
|
17
17
|
onDownload: (fileName: string, frozenTable: DhType.Table, tableSubscription: DhType.TableViewportSubscription, snapshotRanges: readonly GridRange[], modelRanges: readonly GridRange[], includeColumnHeaders: boolean, useUnformattedValues: boolean) => void;
|
|
18
18
|
onCancel: () => void;
|
|
19
|
-
|
|
19
|
+
selection: Selection | null;
|
|
20
20
|
}
|
|
21
21
|
interface TableCsvExporterState {
|
|
22
22
|
fileName: string;
|
|
@@ -53,11 +53,14 @@ declare class TableCsvExporter extends Component<TableCsvExporterProps, TableCsv
|
|
|
53
53
|
tableDownloadStatus: string;
|
|
54
54
|
tableDownloadProgress: number;
|
|
55
55
|
tableDownloadEstimatedTime: null;
|
|
56
|
-
|
|
56
|
+
selection: null;
|
|
57
57
|
};
|
|
58
|
+
static formatRowCount(count: number): string;
|
|
58
59
|
static getDateString(dh: typeof DhType): string;
|
|
59
60
|
constructor(props: TableCsvExporterProps);
|
|
60
|
-
|
|
61
|
+
/** Returns the exact selected row count when known, or null for unknown-size keyed selections. */
|
|
62
|
+
get selectedRowCount(): number | null;
|
|
63
|
+
getSnapshotRanges(keyedTableSize: number): GridRange[];
|
|
61
64
|
getModelRanges(ranges: readonly GridRange[]): GridRange[];
|
|
62
65
|
resetDownloadState(): void;
|
|
63
66
|
handleDownloadClick(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCsvExporter.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableCsvExporter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAG5D,OAAO,EASL,KAAK,OAAO,EACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,SAAS,
|
|
1
|
+
{"version":3,"file":"TableCsvExporter.d.ts","sourceRoot":"","sources":["../../src/sidebar/TableCsvExporter.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
2
2
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
3
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
3
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
6
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
7
5
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
@@ -9,16 +7,21 @@ import React, { Component } from 'react';
|
|
|
9
7
|
import ClassNames from 'classnames';
|
|
10
8
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
11
9
|
import { Button, Checkbox, LoadingSpinner, RadioGroup, Radio, NumberField, Picker, Item } from '@deephaven/components';
|
|
12
|
-
import { GridRange, GridUtils } from '@deephaven/grid';
|
|
10
|
+
import { GridRange, GridUtils, isRangedSelection } from '@deephaven/grid';
|
|
13
11
|
import { vsWarning } from '@deephaven/icons';
|
|
14
12
|
import { TimeUtils } from '@deephaven/utils';
|
|
15
13
|
import { nanoid } from 'nanoid';
|
|
16
14
|
import "./TableCsvExporter.css";
|
|
17
15
|
import Log from '@deephaven/log';
|
|
18
16
|
import IrisGridUtils from "../IrisGridUtils.js";
|
|
17
|
+
import { KeyedSelection } from "../KeyedSelection.js";
|
|
18
|
+
import { isKeyedGridModel } from "../KeyedGridModel.js";
|
|
19
19
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
20
20
|
var log = Log.module('TableCsvExporter');
|
|
21
21
|
class TableCsvExporter extends Component {
|
|
22
|
+
static formatRowCount(count) {
|
|
23
|
+
return count.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
|
|
24
|
+
}
|
|
22
25
|
static getDateString(dh) {
|
|
23
26
|
return dh.i18n.DateTimeFormat.format(TableCsvExporter.FILENAME_DATE_FORMAT, new Date());
|
|
24
27
|
}
|
|
@@ -45,10 +48,22 @@ class TableCsvExporter extends Component {
|
|
|
45
48
|
id: nanoid()
|
|
46
49
|
};
|
|
47
50
|
}
|
|
48
|
-
|
|
51
|
+
|
|
52
|
+
/** Returns the exact selected row count when known, or null for unknown-size keyed selections. */
|
|
53
|
+
get selectedRowCount() {
|
|
54
|
+
var selection = this.props.selection;
|
|
55
|
+
if (selection != null && isRangedSelection(selection) && !selection.isEmpty()) {
|
|
56
|
+
return GridRange.rowCount(selection.toRanges());
|
|
57
|
+
}
|
|
58
|
+
if (selection instanceof KeyedSelection) {
|
|
59
|
+
return selection.getUniqueRowCount();
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
getSnapshotRanges(keyedTableSize) {
|
|
49
64
|
var _this$props = this.props,
|
|
50
65
|
model = _this$props.model,
|
|
51
|
-
|
|
66
|
+
selection = _this$props.selection;
|
|
52
67
|
var _this$state = this.state,
|
|
53
68
|
downloadRowOption = _this$state.downloadRowOption,
|
|
54
69
|
customizedDownloadRowOption = _this$state.customizedDownloadRowOption,
|
|
@@ -61,15 +76,22 @@ class TableCsvExporter extends Component {
|
|
|
61
76
|
snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));
|
|
62
77
|
break;
|
|
63
78
|
case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return
|
|
79
|
+
if (selection != null && isRangedSelection(selection)) {
|
|
80
|
+
snapshotRanges.push(...selection.toRanges().map(range => new GridRange(0, range.startRow, columnCount - 1, range.endRow)).sort((a, b) => {
|
|
81
|
+
if (a.startRow != null && b.startRow != null) {
|
|
82
|
+
return a.startRow - b.startRow;
|
|
83
|
+
}
|
|
84
|
+
return 0;
|
|
85
|
+
}));
|
|
86
|
+
} else if (selection instanceof KeyedSelection) {
|
|
87
|
+
// keyed: the frozenTable is already filtered; snapshot all its rows.
|
|
88
|
+
// Guard against zero — a ticking table can remove all selected rows before export.
|
|
89
|
+
if (keyedTableSize > 0) {
|
|
90
|
+
snapshotRanges.push(new GridRange(0, 0, columnCount - 1, keyedTableSize - 1));
|
|
70
91
|
}
|
|
71
|
-
|
|
72
|
-
|
|
92
|
+
} else {
|
|
93
|
+
throw new Error('Unsupported selection type for snapshot ranges.');
|
|
94
|
+
}
|
|
73
95
|
break;
|
|
74
96
|
case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:
|
|
75
97
|
switch (customizedDownloadRowOption) {
|
|
@@ -111,6 +133,7 @@ class TableCsvExporter extends Component {
|
|
|
111
133
|
return _asyncToGenerator(function* () {
|
|
112
134
|
var _this$props3 = _this.props,
|
|
113
135
|
model = _this$props3.model,
|
|
136
|
+
selection = _this$props3.selection,
|
|
114
137
|
isDownloading = _this$props3.isDownloading,
|
|
115
138
|
onDownloadStart = _this$props3.onDownloadStart,
|
|
116
139
|
onDownload = _this$props3.onDownload,
|
|
@@ -118,31 +141,57 @@ class TableCsvExporter extends Component {
|
|
|
118
141
|
var _this$state2 = _this.state,
|
|
119
142
|
fileName = _this$state2.fileName,
|
|
120
143
|
includeColumnHeaders = _this$state2.includeColumnHeaders,
|
|
121
|
-
useUnformattedValues = _this$state2.useUnformattedValues
|
|
144
|
+
useUnformattedValues = _this$state2.useUnformattedValues,
|
|
145
|
+
downloadRowOption = _this$state2.downloadRowOption;
|
|
122
146
|
if (isDownloading) {
|
|
123
147
|
onCancel();
|
|
124
148
|
return;
|
|
125
149
|
}
|
|
126
150
|
_this.resetDownloadState();
|
|
127
|
-
|
|
128
|
-
var
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
});
|
|
151
|
+
if (!_this.validateOptionInput()) return;
|
|
152
|
+
var isKeyedSelectedRows = downloadRowOption === TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS && selection instanceof KeyedSelection && isKeyedGridModel(model);
|
|
153
|
+
onDownloadStart();
|
|
154
|
+
var filteredTable = null;
|
|
155
|
+
var frozenTable = null;
|
|
156
|
+
var handedOff = false;
|
|
157
|
+
try {
|
|
158
|
+
if (isKeyedSelectedRows) {
|
|
159
|
+
filteredTable = yield model.createFilteredByKeysTable(selection.selectedKeyValues, selection.invertedSelection);
|
|
160
|
+
// freeze to static snapshot; TableSaver closes frozenTable in finishDownload/cancelDownload
|
|
161
|
+
frozenTable = yield filteredTable.freeze();
|
|
162
|
+
} else {
|
|
163
|
+
frozenTable = yield model.export();
|
|
164
|
+
}
|
|
165
|
+
var snapshotRanges = _this.getSnapshotRanges(frozenTable.size);
|
|
166
|
+
if (snapshotRanges.length === 0) {
|
|
167
|
+
// All selected rows were removed from the ticking table before export.
|
|
145
168
|
onCancel();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
var modelRanges = _this.getModelRanges(snapshotRanges);
|
|
172
|
+
var tableSubscription = frozenTable.setViewport(0, 0);
|
|
173
|
+
yield tableSubscription.getViewportData();
|
|
174
|
+
onDownload(fileName, frozenTable, tableSubscription, snapshotRanges, modelRanges, includeColumnHeaders, useUnformattedValues);
|
|
175
|
+
handedOff = true;
|
|
176
|
+
} catch (error) {
|
|
177
|
+
log.error('CSV download failed', error);
|
|
178
|
+
_this.setState({
|
|
179
|
+
errorMessage: /*#__PURE__*/_jsxs("p", {
|
|
180
|
+
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
181
|
+
icon: vsWarning
|
|
182
|
+
}), " ", "".concat(error)]
|
|
183
|
+
})
|
|
184
|
+
});
|
|
185
|
+
onCancel();
|
|
186
|
+
} finally {
|
|
187
|
+
var _filteredTable;
|
|
188
|
+
// filteredTable is only a staging table used to produce frozenTable; always close it.
|
|
189
|
+
(_filteredTable = filteredTable) === null || _filteredTable === void 0 || _filteredTable.close();
|
|
190
|
+
// frozenTable is owned by TableSaver only after onDownload runs; close on early
|
|
191
|
+
// return or any throw before handoff.
|
|
192
|
+
if (!handedOff) {
|
|
193
|
+
var _frozenTable;
|
|
194
|
+
(_frozenTable = frozenTable) === null || _frozenTable === void 0 || _frozenTable.close();
|
|
146
195
|
}
|
|
147
196
|
}
|
|
148
197
|
})();
|
|
@@ -189,11 +238,11 @@ class TableCsvExporter extends Component {
|
|
|
189
238
|
});
|
|
190
239
|
}
|
|
191
240
|
validateOptionInput() {
|
|
192
|
-
var
|
|
241
|
+
var selection = this.props.selection;
|
|
193
242
|
var _this$state3 = this.state,
|
|
194
243
|
downloadRowOption = _this$state3.downloadRowOption,
|
|
195
244
|
customizedDownloadRows = _this$state3.customizedDownloadRows;
|
|
196
|
-
if (downloadRowOption === TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&
|
|
245
|
+
if (downloadRowOption === TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS && (selection == null || selection.isEmpty())) {
|
|
197
246
|
this.setState({
|
|
198
247
|
errorMessage: /*#__PURE__*/_jsxs("p", {
|
|
199
248
|
children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
|
|
@@ -221,7 +270,6 @@ class TableCsvExporter extends Component {
|
|
|
221
270
|
isDownloading = _this$props4.isDownloading,
|
|
222
271
|
tableDownloadProgress = _this$props4.tableDownloadProgress,
|
|
223
272
|
tableDownloadEstimatedTime = _this$props4.tableDownloadEstimatedTime,
|
|
224
|
-
selectedRanges = _this$props4.selectedRanges,
|
|
225
273
|
tableDownloadStatus = _this$props4.tableDownloadStatus;
|
|
226
274
|
var _this$state4 = this.state,
|
|
227
275
|
fileName = _this$state4.fileName,
|
|
@@ -252,14 +300,14 @@ class TableCsvExporter extends Component {
|
|
|
252
300
|
"data-testid": "radio-csv-exporter-download-all",
|
|
253
301
|
children: ["All Rows", /*#__PURE__*/_jsx("span", {
|
|
254
302
|
className: "text-muted ml-2",
|
|
255
|
-
children: "(".concat(
|
|
303
|
+
children: "(".concat(TableCsvExporter.formatRowCount(rowCount), " rows)")
|
|
256
304
|
})]
|
|
257
305
|
}), /*#__PURE__*/_jsxs(Radio, {
|
|
258
306
|
value: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS,
|
|
259
307
|
"data-testid": "radio-csv-exporter-only-selected",
|
|
260
308
|
children: ["Only Selected Rows", /*#__PURE__*/_jsx("span", {
|
|
261
309
|
className: "text-muted ml-2",
|
|
262
|
-
children:
|
|
310
|
+
children: this.selectedRowCount != null ? "(".concat(TableCsvExporter.formatRowCount(this.selectedRowCount), " rows)") : null
|
|
263
311
|
})]
|
|
264
312
|
}), /*#__PURE__*/_jsxs("div", {
|
|
265
313
|
className: "d-flex",
|
|
@@ -429,7 +477,7 @@ _defineProperty(TableCsvExporter, "defaultProps", {
|
|
|
429
477
|
tableDownloadStatus: '',
|
|
430
478
|
tableDownloadProgress: 0,
|
|
431
479
|
tableDownloadEstimatedTime: null,
|
|
432
|
-
|
|
480
|
+
selection: null
|
|
433
481
|
});
|
|
434
482
|
export default TableCsvExporter;
|
|
435
483
|
//# sourceMappingURL=TableCsvExporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","Radio","NumberField","Picker","Item","GridRange","GridUtils","vsWarning","TimeUtils","nanoid","Log","IrisGridUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","TableCsvExporter","getDateString","dh","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","model","name","state","fileName","concat","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","getSnapshotRanges","_this$props","selectedRanges","_this$state","rowCount","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","_objectSpread","startColumn","endColumn","sort","rangeA","rangeB","startRow","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","_this$props2","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","_this","_asyncToGenerator","_this$props3","isDownloading","onDownloadStart","onDownload","onCancel","_this$state2","validateOptionInput","frozenTable","export","tableSubscription","setViewport","getViewportData","error","children","icon","value","String","_ref","_ref2","_ref3","_this$state3","render","_this$props4","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","_this$state4","className","onChange","isDisabled","toString","replace","margin","role","onClick","selectedKey","flex","minValue","defaultValue","width","minWidth","htmlFor","type","event","target","disabled","checked","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","style","kind","_defineProperty","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n Radio,\n NumberField,\n Picker,\n Item,\n type ItemKey,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n type ModelSizeMap,\n type MoveOperation,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { TimeUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport type IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: readonly MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: DhType.Table,\n tableSubscription: DhType.TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selectedRanges: readonly GridRange[];\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selectedRanges: [],\n };\n\n static getDateString(dh: typeof DhType): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged =\n this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged =\n this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged =\n this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged =\n this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged =\n this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged =\n this.handleUseUnformattedValuesChanged.bind(this);\n\n const { model, name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString(model.dh)}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: nanoid(),\n };\n }\n\n getSnapshotRanges(): GridRange[] {\n const { model, selectedRanges } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n let snapshotRanges = [] as GridRange[];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n snapshotRanges = selectedRanges\n .map(range => ({\n ...range,\n startColumn: 0,\n endColumn: columnCount - 1,\n }))\n .sort((rangeA, rangeB) => {\n if (rangeA.startRow != null && rangeB.startRow != null) {\n return rangeA.startRow - rangeB.startRow;\n }\n return 0;\n }) as GridRange[];\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: readonly GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const { model, isDownloading, onDownloadStart, onDownload, onCancel } =\n this.props;\n const { fileName, includeColumnHeaders, useUnformattedValues } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n\n const snapshotRanges = this.getSnapshotRanges();\n const modelRanges = this.getModelRanges(snapshotRanges);\n if (this.validateOptionInput()) {\n onDownloadStart();\n try {\n const frozenTable = await model.export();\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n } catch (error) {\n log.error('CSV download failed', error);\n\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n }\n }\n }\n\n handleDownloadRowOptionChanged(value: string): void {\n this.setState({ downloadRowOption: value });\n }\n\n handleCustomizedDownloadRowOptionChanged(value: ItemKey | null): void {\n if (value !== null) {\n this.setState({ customizedDownloadRowOption: String(value) });\n }\n }\n\n handleCustomizedDownloadRowsChanged(value: number): void {\n this.setState({ customizedDownloadRows: value });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selectedRanges } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selectedRanges.length === 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n selectedRanges,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div id=\"download-rows-label\" className=\"section-title\">\n Download Rows\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-labelledby=\"download-rows-label\"\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n isDisabled={isDownloading}\n >\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${rowCount\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`}\n </span>\n </Radio>\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {selectedRanges.length > 0\n ? `(${GridRange.rowCount(selectedRanges)\n .toString()\n .replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')} rows)`\n : null}\n </span>\n </Radio>\n <div className=\"d-flex\">\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n margin=\"0\"\n aria-label=\"Download a custom number of rows\"\n />\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <Picker\n selectedKey={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n aria-label=\"First or last number of rows\"\n flex\n >\n <Item key=\"FIRST\">First</Item>\n <Item key=\"LAST\">Last</Item>\n </Picker>\n <NumberField\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n minValue={1}\n defaultValue={100}\n value={customizedDownloadRows}\n width=\"100%\"\n minWidth={0}\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n aria-label=\"Number of rows to download\"\n flex\n />\n <div>Rows</div>\n </div>\n </div>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"TableCsvExporter.js","names":["React","Component","ClassNames","FontAwesomeIcon","Button","Checkbox","LoadingSpinner","RadioGroup","Radio","NumberField","Picker","Item","GridRange","GridUtils","isRangedSelection","vsWarning","TimeUtils","nanoid","Log","IrisGridUtils","KeyedSelection","isKeyedGridModel","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","TableCsvExporter","formatRowCount","count","toString","replace","getDateString","dh","i18n","DateTimeFormat","format","FILENAME_DATE_FORMAT","Date","constructor","props","handleDownloadClick","bind","handleDownloadRowOptionChanged","handleCustomizedDownloadRowOptionChanged","handleCustomizedDownloadRowsChanged","handleIncludeColumnHeadersChanged","handleIncludeHiddenColumnsChanged","handleUseUnformattedValuesChanged","model","name","state","fileName","concat","downloadRowOption","DOWNLOAD_ROW_OPTIONS","ALL_ROWS","customizedDownloadRowOption","CUSTOMIZED_ROWS_OPTIONS","FIRST","customizedDownloadRows","DEFAULT_DOWNLOAD_ROWS","includeColumnHeaders","includeHiddenColumns","useUnformattedValues","errorMessage","id","selectedRowCount","selection","isEmpty","rowCount","toRanges","getUniqueRowCount","getSnapshotRanges","keyedTableSize","_this$props","_this$state","columnCount","snapshotRanges","push","SELECTED_ROWS","map","range","startRow","endRow","sort","a","b","Error","CUSTOMIZED_ROWS","Math","min","LAST","max","getModelRanges","ranges","_this$props2","userColumnWidths","movedColumns","hiddenColumns","getHiddenColumns","modelRanges","length","subtractRanges","makeColumn","subtractRangesFromRanges","resetDownloadState","setState","_this","_asyncToGenerator","_this$props3","isDownloading","onDownloadStart","onDownload","onCancel","_this$state2","validateOptionInput","isKeyedSelectedRows","filteredTable","frozenTable","handedOff","createFilteredByKeysTable","selectedKeyValues","invertedSelection","freeze","export","size","tableSubscription","setViewport","getViewportData","error","children","icon","_filteredTable","close","_frozenTable","value","String","_ref","_ref2","_ref3","_this$state3","render","_this$props4","tableDownloadProgress","tableDownloadEstimatedTime","tableDownloadStatus","_this$state4","className","onChange","isDisabled","margin","role","onClick","selectedKey","flex","minValue","defaultValue","width","minWidth","htmlFor","type","event","target","disabled","checked","DOWNLOAD_STATUS","DOWNLOADING","INITIATING","formatElapsedTime","FINISHED","CANCELED","style","kind","_defineProperty","undefined"],"sources":["../../src/sidebar/TableCsvExporter.tsx"],"sourcesContent":["import React, { Component, type ReactElement } from 'react';\nimport ClassNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Button,\n Checkbox,\n LoadingSpinner,\n RadioGroup,\n Radio,\n NumberField,\n Picker,\n Item,\n type ItemKey,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n isRangedSelection,\n type ModelSizeMap,\n type MoveOperation,\n type Selection,\n} from '@deephaven/grid';\nimport { vsWarning } from '@deephaven/icons';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport { TimeUtils } from '@deephaven/utils';\nimport { nanoid } from 'nanoid';\nimport './TableCsvExporter.scss';\nimport Log from '@deephaven/log';\nimport type IrisGridModel from '../IrisGridModel';\nimport IrisGridUtils from '../IrisGridUtils';\nimport { KeyedSelection } from '../KeyedSelection';\nimport { isKeyedGridModel } from '../KeyedGridModel';\n\nconst log = Log.module('TableCsvExporter');\ninterface TableCsvExporterProps {\n model: IrisGridModel;\n name: string;\n userColumnWidths: ModelSizeMap;\n movedColumns: readonly MoveOperation[];\n isDownloading: boolean;\n tableDownloadStatus: string;\n tableDownloadProgress: number;\n tableDownloadEstimatedTime: number;\n onDownloadStart: () => void;\n onDownload: (\n fileName: string,\n frozenTable: DhType.Table,\n tableSubscription: DhType.TableViewportSubscription,\n snapshotRanges: readonly GridRange[],\n modelRanges: readonly GridRange[],\n includeColumnHeaders: boolean,\n useUnformattedValues: boolean\n ) => void;\n onCancel: () => void;\n selection: Selection | null;\n}\n\ninterface TableCsvExporterState {\n fileName: string;\n\n downloadRowOption: string;\n customizedDownloadRowOption: string;\n customizedDownloadRows: number;\n\n includeColumnHeaders: boolean;\n includeHiddenColumns: boolean;\n useUnformattedValues: boolean;\n\n errorMessage: React.ReactNode;\n id: string;\n}\nclass TableCsvExporter extends Component<\n TableCsvExporterProps,\n TableCsvExporterState\n> {\n static FILENAME_DATE_FORMAT = 'yyyy-MM-dd-HHmmss';\n\n static DOWNLOAD_STATUS = {\n INITIATING: 'INITIATING',\n DOWNLOADING: 'DOWNLOADING',\n FINISHED: 'FINISHED',\n CANCELED: 'CANCELED',\n };\n\n static DOWNLOAD_ROW_OPTIONS = {\n ALL_ROWS: 'ALL_ROWS',\n SELECTED_ROWS: 'SELECTED_ROWS',\n CUSTOMIZED_ROWS: 'CUSTOMIZED_ROWS',\n };\n\n static CUSTOMIZED_ROWS_OPTIONS = {\n FIRST: 'FIRST',\n LAST: 'LAST',\n };\n\n static DEFAULT_DOWNLOAD_ROWS = 100;\n\n static defaultProps = {\n onDownloadStart: (): void => undefined,\n isDownloading: false,\n tableDownloadStatus: '',\n tableDownloadProgress: 0,\n tableDownloadEstimatedTime: null,\n selection: null,\n };\n\n static formatRowCount(count: number): string {\n return count.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,');\n }\n\n static getDateString(dh: typeof DhType): string {\n return dh.i18n.DateTimeFormat.format(\n TableCsvExporter.FILENAME_DATE_FORMAT,\n new Date()\n );\n }\n\n constructor(props: TableCsvExporterProps) {\n super(props);\n\n this.handleDownloadClick = this.handleDownloadClick.bind(this);\n this.handleDownloadRowOptionChanged =\n this.handleDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowOptionChanged =\n this.handleCustomizedDownloadRowOptionChanged.bind(this);\n this.handleCustomizedDownloadRowsChanged =\n this.handleCustomizedDownloadRowsChanged.bind(this);\n this.handleIncludeColumnHeadersChanged =\n this.handleIncludeColumnHeadersChanged.bind(this);\n this.handleIncludeHiddenColumnsChanged =\n this.handleIncludeHiddenColumnsChanged.bind(this);\n this.handleUseUnformattedValuesChanged =\n this.handleUseUnformattedValuesChanged.bind(this);\n\n const { model, name } = props;\n this.state = {\n fileName: `${name}-${TableCsvExporter.getDateString(model.dh)}.csv`,\n\n downloadRowOption: TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS,\n customizedDownloadRowOption:\n TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST,\n customizedDownloadRows: TableCsvExporter.DEFAULT_DOWNLOAD_ROWS,\n\n includeColumnHeaders: true,\n includeHiddenColumns: false,\n useUnformattedValues: false,\n\n errorMessage: null,\n id: nanoid(),\n };\n }\n\n /** Returns the exact selected row count when known, or null for unknown-size keyed selections. */\n get selectedRowCount(): number | null {\n const { selection } = this.props;\n if (\n selection != null &&\n isRangedSelection(selection) &&\n !selection.isEmpty()\n ) {\n return GridRange.rowCount(selection.toRanges());\n }\n if (selection instanceof KeyedSelection) {\n return selection.getUniqueRowCount();\n }\n return null;\n }\n\n getSnapshotRanges(keyedTableSize: number): GridRange[] {\n const { model, selection } = this.props;\n const {\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n } = this.state;\n const { rowCount, columnCount } = model;\n const snapshotRanges: GridRange[] = [];\n switch (downloadRowOption) {\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS:\n snapshotRanges.push(new GridRange(0, 0, columnCount - 1, rowCount - 1));\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS:\n if (selection != null && isRangedSelection(selection)) {\n snapshotRanges.push(\n ...selection\n .toRanges()\n .map(\n range =>\n new GridRange(\n 0,\n range.startRow,\n columnCount - 1,\n range.endRow\n )\n )\n .sort((a, b) => {\n if (a.startRow != null && b.startRow != null) {\n return a.startRow - b.startRow;\n }\n return 0;\n })\n );\n } else if (selection instanceof KeyedSelection) {\n // keyed: the frozenTable is already filtered; snapshot all its rows.\n // Guard against zero — a ticking table can remove all selected rows before export.\n if (keyedTableSize > 0) {\n snapshotRanges.push(\n new GridRange(0, 0, columnCount - 1, keyedTableSize - 1)\n );\n }\n } else {\n throw new Error('Unsupported selection type for snapshot ranges.');\n }\n break;\n case TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS:\n switch (customizedDownloadRowOption) {\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.FIRST:\n snapshotRanges.push(\n new GridRange(\n 0,\n 0,\n columnCount - 1,\n Math.min(customizedDownloadRows - 1, rowCount - 1)\n )\n );\n break;\n case TableCsvExporter.CUSTOMIZED_ROWS_OPTIONS.LAST:\n snapshotRanges.push(\n new GridRange(\n 0,\n Math.max(0, rowCount - customizedDownloadRows),\n columnCount - 1,\n rowCount - 1\n )\n );\n break;\n default:\n break;\n }\n break;\n default:\n break;\n }\n return snapshotRanges;\n }\n\n getModelRanges(ranges: readonly GridRange[]): GridRange[] {\n const { userColumnWidths, movedColumns } = this.props;\n const { includeHiddenColumns } = this.state;\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (!includeHiddenColumns && hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n return modelRanges;\n }\n\n resetDownloadState(): void {\n this.setState({ errorMessage: null });\n }\n\n async handleDownloadClick(): Promise<void> {\n const {\n model,\n selection,\n isDownloading,\n onDownloadStart,\n onDownload,\n onCancel,\n } = this.props;\n const {\n fileName,\n includeColumnHeaders,\n useUnformattedValues,\n downloadRowOption,\n } = this.state;\n\n if (isDownloading) {\n onCancel();\n return;\n }\n\n this.resetDownloadState();\n if (!this.validateOptionInput()) return;\n\n const isKeyedSelectedRows =\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n selection instanceof KeyedSelection &&\n isKeyedGridModel(model);\n\n onDownloadStart();\n let filteredTable: DhType.Table | null = null;\n let frozenTable: DhType.Table | null = null;\n let handedOff = false;\n try {\n if (isKeyedSelectedRows) {\n filteredTable = await model.createFilteredByKeysTable(\n selection.selectedKeyValues,\n selection.invertedSelection\n );\n // freeze to static snapshot; TableSaver closes frozenTable in finishDownload/cancelDownload\n frozenTable = await filteredTable.freeze();\n } else {\n frozenTable = await model.export();\n }\n const snapshotRanges = this.getSnapshotRanges(frozenTable.size);\n if (snapshotRanges.length === 0) {\n // All selected rows were removed from the ticking table before export.\n onCancel();\n return;\n }\n const modelRanges = this.getModelRanges(snapshotRanges);\n const tableSubscription = frozenTable.setViewport(0, 0);\n await tableSubscription.getViewportData();\n onDownload(\n fileName,\n frozenTable,\n tableSubscription,\n snapshotRanges,\n modelRanges,\n includeColumnHeaders,\n useUnformattedValues\n );\n handedOff = true;\n } catch (error) {\n log.error('CSV download failed', error);\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> {`${error}`}\n </p>\n ),\n });\n onCancel();\n } finally {\n // filteredTable is only a staging table used to produce frozenTable; always close it.\n filteredTable?.close();\n // frozenTable is owned by TableSaver only after onDownload runs; close on early\n // return or any throw before handoff.\n if (!handedOff) {\n frozenTable?.close();\n }\n }\n }\n\n handleDownloadRowOptionChanged(value: string): void {\n this.setState({ downloadRowOption: value });\n }\n\n handleCustomizedDownloadRowOptionChanged(value: ItemKey | null): void {\n if (value !== null) {\n this.setState({ customizedDownloadRowOption: String(value) });\n }\n }\n\n handleCustomizedDownloadRowsChanged(value: number): void {\n this.setState({ customizedDownloadRows: value });\n }\n\n handleIncludeColumnHeadersChanged(): void {\n this.setState(({ includeColumnHeaders }) => ({\n includeColumnHeaders: !includeColumnHeaders,\n }));\n }\n\n handleIncludeHiddenColumnsChanged(): void {\n this.setState(({ includeHiddenColumns }) => ({\n includeHiddenColumns: !includeHiddenColumns,\n }));\n }\n\n handleUseUnformattedValuesChanged(): void {\n this.setState(({ useUnformattedValues }) => ({\n useUnformattedValues: !useUnformattedValues,\n }));\n }\n\n validateOptionInput(): boolean {\n const { selection } = this.props;\n const { downloadRowOption, customizedDownloadRows } = this.state;\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS &&\n (selection == null || selection.isEmpty())\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> No rows selected. Please select\n some rows in the table.\n </p>\n ),\n });\n return false;\n }\n\n if (\n downloadRowOption ===\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS &&\n customizedDownloadRows <= 0\n ) {\n this.setState({\n errorMessage: (\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Number of rows to output must\n be greater than 0\n </p>\n ),\n });\n return false;\n }\n return true;\n }\n\n render(): ReactElement {\n const {\n model,\n isDownloading,\n tableDownloadProgress,\n tableDownloadEstimatedTime,\n tableDownloadStatus,\n } = this.props;\n const {\n fileName,\n downloadRowOption,\n customizedDownloadRowOption,\n customizedDownloadRows,\n includeColumnHeaders,\n includeHiddenColumns,\n useUnformattedValues,\n errorMessage,\n id,\n } = this.state;\n const { rowCount } = model;\n return (\n <div className=\"table-csv-exporter\">\n <div id=\"download-rows-label\" className=\"section-title\">\n Download Rows\n </div>\n <div className=\"form-group\">\n <RadioGroup\n aria-labelledby=\"download-rows-label\"\n onChange={this.handleDownloadRowOptionChanged}\n value={downloadRowOption}\n isDisabled={isDownloading}\n >\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.ALL_ROWS}\n data-testid=\"radio-csv-exporter-download-all\"\n >\n All Rows\n <span className=\"text-muted ml-2\">\n {`(${TableCsvExporter.formatRowCount(rowCount)} rows)`}\n </span>\n </Radio>\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.SELECTED_ROWS}\n data-testid=\"radio-csv-exporter-only-selected\"\n >\n Only Selected Rows\n <span className=\"text-muted ml-2\">\n {this.selectedRowCount != null\n ? `(${TableCsvExporter.formatRowCount(\n this.selectedRowCount\n )} rows)`\n : null}\n </span>\n </Radio>\n <div className=\"d-flex\">\n <Radio\n value={TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS}\n data-testid=\"radio-csv-exporter-customized-rows\"\n margin=\"0\"\n aria-label=\"Download a custom number of rows\"\n />\n <div\n className=\"radio-input-row\"\n role=\"presentation\"\n onClick={() => {\n this.setState({\n downloadRowOption:\n TableCsvExporter.DOWNLOAD_ROW_OPTIONS.CUSTOMIZED_ROWS,\n });\n }}\n >\n <Picker\n selectedKey={customizedDownloadRowOption}\n data-testid=\"select-csv-exporter-customized-rows\"\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowOptionChanged}\n aria-label=\"First or last number of rows\"\n flex\n >\n <Item key=\"FIRST\">First</Item>\n <Item key=\"LAST\">Last</Item>\n </Picker>\n <NumberField\n id={`customizedRows-${id}`}\n data-testid=\"input-csv-exporter-customized-rows\"\n name={`customizedRows-${id}`}\n minValue={1}\n defaultValue={100}\n value={customizedDownloadRows}\n width=\"100%\"\n minWidth={0}\n isDisabled={isDownloading}\n onChange={this.handleCustomizedDownloadRowsChanged}\n aria-label=\"Number of rows to download\"\n flex\n />\n <div>Rows</div>\n </div>\n </div>\n </RadioGroup>\n </div>\n <div className=\"form-group\">\n <label htmlFor={`customizedRows-${id}`}>File Name</label>\n <input\n type=\"text\"\n className=\"form-control\"\n id={`filename-${id}`}\n data-testid=\"input-csv-exporter-file-name\"\n name={`filename-${id}`}\n value={fileName}\n onChange={event => {\n this.setState({ fileName: event.target.value });\n }}\n disabled={isDownloading}\n />\n </div>\n <div className=\"checkbox-options\">\n <Checkbox\n checked={includeColumnHeaders}\n onChange={this.handleIncludeColumnHeadersChanged}\n >\n Include column headers\n </Checkbox>\n <Checkbox\n checked={includeHiddenColumns}\n onChange={this.handleIncludeHiddenColumnsChanged}\n >\n Include hidden columns\n </Checkbox>\n <Checkbox\n checked={useUnformattedValues}\n onChange={this.handleUseUnformattedValuesChanged}\n >\n Use unformatted values\n </Checkbox>\n </div>\n <div className=\"section-footer flex-column\">\n {errorMessage != null && (\n <div className=\"error-message\">{errorMessage}</div>\n )}\n {tableDownloadStatus && (\n <div className=\"download-status\">\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <>\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING && (\n <div className=\"text-muted\">Starting Download...</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING && (\n <div className=\"text-muted d-flex justify-content-between\">\n <span>\n {tableDownloadEstimatedTime ||\n tableDownloadEstimatedTime === 0\n ? `Estimated time: ${TimeUtils.formatElapsedTime(\n tableDownloadEstimatedTime\n )}`\n : null}\n </span>\n <span>{`${tableDownloadProgress}%`}</span>\n </div>\n )}\n </>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"text-muted text-right\">Download Completed</div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.CANCELED && (\n <div className=\"text-muted\">Download Canceled</div>\n )}\n\n {(tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.DOWNLOADING ||\n tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.INITIATING) && (\n <div className=\"progress\">\n <div\n className=\"progress-bar progress-bar-striped progress-bar-animated\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n {tableDownloadStatus ===\n TableCsvExporter.DOWNLOAD_STATUS.FINISHED && (\n <div className=\"progress\">\n <div\n className=\"progress-bar bg-success\"\n style={{ width: `${tableDownloadProgress}%` }}\n />\n </div>\n )}\n </div>\n )}\n <Button\n kind=\"primary\"\n data-testid=\"btn-csv-exporter-download\"\n className={ClassNames('btn-downloading', {\n 'btn-spinner btn-cancelable': isDownloading,\n })}\n onClick={this.handleDownloadClick}\n >\n {isDownloading && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Downloading</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isDownloading && 'Download'}\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default TableCsvExporter;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,SAAS,QAA2B,OAAO;AAC3D,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SACEC,MAAM,EACNC,QAAQ,EACRC,cAAc,EACdC,UAAU,EACVC,KAAK,EACLC,WAAW,EACXC,MAAM,EACNC,IAAI,QAEC,uBAAuB;AAC9B,SACEC,SAAS,EACTC,SAAS,EACTC,iBAAiB,QAIZ,iBAAiB;AACxB,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,MAAM,QAAQ,QAAQ;AAAC;AAEhC,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAE1BC,aAAa;AAAA,SACXC,cAAc;AAAA,SACdC,gBAAgB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAEzB,IAAMC,GAAG,GAAGV,GAAG,CAACW,MAAM,CAAC,kBAAkB,CAAC;AAsC1C,MAAMC,gBAAgB,SAAS7B,SAAS,CAGtC;EAgCA,OAAO8B,cAAcA,CAACC,KAAa,EAAU;IAC3C,OAAOA,KAAK,CAACC,QAAQ,CAAC,CAAC,CAACC,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC;EACnE;EAEA,OAAOC,aAAaA,CAACC,EAAiB,EAAU;IAC9C,OAAOA,EAAE,CAACC,IAAI,CAACC,cAAc,CAACC,MAAM,CAClCT,gBAAgB,CAACU,oBAAoB,EACrC,IAAIC,IAAI,CAAC,CACX,CAAC;EACH;EAEAC,WAAWA,CAACC,KAA4B,EAAE;IACxC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAACC,8BAA8B,GACjC,IAAI,CAACA,8BAA8B,CAACD,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACE,wCAAwC,GAC3C,IAAI,CAACA,wCAAwC,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACG,mCAAmC,GACtC,IAAI,CAACA,mCAAmC,CAACH,IAAI,CAAC,IAAI,CAAC;IACrD,IAAI,CAACI,iCAAiC,GACpC,IAAI,CAACA,iCAAiC,CAACJ,IAAI,CAAC,IAAI,CAAC;IACnD,IAAI,CAACK,iCAAiC,GACpC,IAAI,CAACA,iCAAiC,CAACL,IAAI,CAAC,IAAI,CAAC;IACnD,IAAI,CAACM,iCAAiC,GACpC,IAAI,CAACA,iCAAiC,CAACN,IAAI,CAAC,IAAI,CAAC;IAEnD,IAAQO,KAAK,GAAWT,KAAK,CAArBS,KAAK;MAAEC,IAAI,GAAKV,KAAK,CAAdU,IAAI;IACnB,IAAI,CAACC,KAAK,GAAG;MACXC,QAAQ,KAAAC,MAAA,CAAKH,IAAI,OAAAG,MAAA,CAAI1B,gBAAgB,CAACK,aAAa,CAACiB,KAAK,CAAChB,EAAE,CAAC,SAAM;MAEnEqB,iBAAiB,EAAE3B,gBAAgB,CAAC4B,oBAAoB,CAACC,QAAQ;MACjEC,2BAA2B,EACzB9B,gBAAgB,CAAC+B,uBAAuB,CAACC,KAAK;MAChDC,sBAAsB,EAAEjC,gBAAgB,CAACkC,qBAAqB;MAE9DC,oBAAoB,EAAE,IAAI;MAC1BC,oBAAoB,EAAE,KAAK;MAC3BC,oBAAoB,EAAE,KAAK;MAE3BC,YAAY,EAAE,IAAI;MAClBC,EAAE,EAAEpD,MAAM,CAAC;IACb,CAAC;EACH;;EAEA;EACA,IAAIqD,gBAAgBA,CAAA,EAAkB;IACpC,IAAQC,SAAS,GAAK,IAAI,CAAC5B,KAAK,CAAxB4B,SAAS;IACjB,IACEA,SAAS,IAAI,IAAI,IACjBzD,iBAAiB,CAACyD,SAAS,CAAC,IAC5B,CAACA,SAAS,CAACC,OAAO,CAAC,CAAC,EACpB;MACA,OAAO5D,SAAS,CAAC6D,QAAQ,CAACF,SAAS,CAACG,QAAQ,CAAC,CAAC,CAAC;IACjD;IACA,IAAIH,SAAS,YAAYnD,cAAc,EAAE;MACvC,OAAOmD,SAAS,CAACI,iBAAiB,CAAC,CAAC;IACtC;IACA,OAAO,IAAI;EACb;EAEAC,iBAAiBA,CAACC,cAAsB,EAAe;IACrD,IAAAC,WAAA,GAA6B,IAAI,CAACnC,KAAK;MAA/BS,KAAK,GAAA0B,WAAA,CAAL1B,KAAK;MAAEmB,SAAS,GAAAO,WAAA,CAATP,SAAS;IACxB,IAAAQ,WAAA,GAII,IAAI,CAACzB,KAAK;MAHZG,iBAAiB,GAAAsB,WAAA,CAAjBtB,iBAAiB;MACjBG,2BAA2B,GAAAmB,WAAA,CAA3BnB,2BAA2B;MAC3BG,sBAAsB,GAAAgB,WAAA,CAAtBhB,sBAAsB;IAExB,IAAQU,QAAQ,GAAkBrB,KAAK,CAA/BqB,QAAQ;MAAEO,WAAW,GAAK5B,KAAK,CAArB4B,WAAW;IAC7B,IAAMC,cAA2B,GAAG,EAAE;IACtC,QAAQxB,iBAAiB;MACvB,KAAK3B,gBAAgB,CAAC4B,oBAAoB,CAACC,QAAQ;QACjDsB,cAAc,CAACC,IAAI,CAAC,IAAItE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAEoE,WAAW,GAAG,CAAC,EAAEP,QAAQ,GAAG,CAAC,CAAC,CAAC;QACvE;MACF,KAAK3C,gBAAgB,CAAC4B,oBAAoB,CAACyB,aAAa;QACtD,IAAIZ,SAAS,IAAI,IAAI,IAAIzD,iBAAiB,CAACyD,SAAS,CAAC,EAAE;UACrDU,cAAc,CAACC,IAAI,CACjB,GAAGX,SAAS,CACTG,QAAQ,CAAC,CAAC,CACVU,GAAG,CACFC,KAAK,IACH,IAAIzE,SAAS,CACX,CAAC,EACDyE,KAAK,CAACC,QAAQ,EACdN,WAAW,GAAG,CAAC,EACfK,KAAK,CAACE,MACR,CACJ,CAAC,CACAC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;YACd,IAAID,CAAC,CAACH,QAAQ,IAAI,IAAI,IAAII,CAAC,CAACJ,QAAQ,IAAI,IAAI,EAAE;cAC5C,OAAOG,CAAC,CAACH,QAAQ,GAAGI,CAAC,CAACJ,QAAQ;YAChC;YACA,OAAO,CAAC;UACV,CAAC,CACL,CAAC;QACH,CAAC,MAAM,IAAIf,SAAS,YAAYnD,cAAc,EAAE;UAC9C;UACA;UACA,IAAIyD,cAAc,GAAG,CAAC,EAAE;YACtBI,cAAc,CAACC,IAAI,CACjB,IAAItE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAEoE,WAAW,GAAG,CAAC,EAAEH,cAAc,GAAG,CAAC,CACzD,CAAC;UACH;QACF,CAAC,MAAM;UACL,MAAM,IAAIc,KAAK,CAAC,iDAAiD,CAAC;QACpE;QACA;MACF,KAAK7D,gBAAgB,CAAC4B,oBAAoB,CAACkC,eAAe;QACxD,QAAQhC,2BAA2B;UACjC,KAAK9B,gBAAgB,CAAC+B,uBAAuB,CAACC,KAAK;YACjDmB,cAAc,CAACC,IAAI,CACjB,IAAItE,SAAS,CACX,CAAC,EACD,CAAC,EACDoE,WAAW,GAAG,CAAC,EACfa,IAAI,CAACC,GAAG,CAAC/B,sBAAsB,GAAG,CAAC,EAAEU,QAAQ,GAAG,CAAC,CACnD,CACF,CAAC;YACD;UACF,KAAK3C,gBAAgB,CAAC+B,uBAAuB,CAACkC,IAAI;YAChDd,cAAc,CAACC,IAAI,CACjB,IAAItE,SAAS,CACX,CAAC,EACDiF,IAAI,CAACG,GAAG,CAAC,CAAC,EAAEvB,QAAQ,GAAGV,sBAAsB,CAAC,EAC9CiB,WAAW,GAAG,CAAC,EACfP,QAAQ,GAAG,CACb,CACF,CAAC;YACD;UACF;YACE;QACJ;QACA;MACF;QACE;IACJ;IACA,OAAOQ,cAAc;EACvB;EAEAgB,cAAcA,CAACC,MAA4B,EAAe;IACxD,IAAAC,YAAA,GAA2C,IAAI,CAACxD,KAAK;MAA7CyD,gBAAgB,GAAAD,YAAA,CAAhBC,gBAAgB;MAAEC,YAAY,GAAAF,YAAA,CAAZE,YAAY;IACtC,IAAQnC,oBAAoB,GAAK,IAAI,CAACZ,KAAK,CAAnCY,oBAAoB;IAC5B,IAAMoC,aAAa,GAAGnF,aAAa,CAACoF,gBAAgB,CAACH,gBAAgB,CAAC;IACtE,IAAII,WAAW,GAAG3F,SAAS,CAACoF,cAAc,CAACC,MAAM,EAAEG,YAAY,CAAC;IAChE,IAAI,CAACnC,oBAAoB,IAAIoC,aAAa,CAACG,MAAM,GAAG,CAAC,EAAE;MACrD,IAAMC,cAAc,GAAGJ,aAAa,CAAClB,GAAG,CAACxE,SAAS,CAAC+F,UAAU,CAAC;MAC9DH,WAAW,GAAG5F,SAAS,CAACgG,wBAAwB,CAC9CJ,WAAW,EACXE,cACF,CAAC;IACH;IACA,OAAOF,WAAW;EACpB;EAEAK,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAACC,QAAQ,CAAC;MAAE1C,YAAY,EAAE;IAAK,CAAC,CAAC;EACvC;EAEMxB,mBAAmBA,CAAA,EAAkB;IAAA,IAAAmE,KAAA;IAAA,OAAAC,iBAAA;MACzC,IAAAC,YAAA,GAOIF,KAAI,CAACpE,KAAK;QANZS,KAAK,GAAA6D,YAAA,CAAL7D,KAAK;QACLmB,SAAS,GAAA0C,YAAA,CAAT1C,SAAS;QACT2C,aAAa,GAAAD,YAAA,CAAbC,aAAa;QACbC,eAAe,GAAAF,YAAA,CAAfE,eAAe;QACfC,UAAU,GAAAH,YAAA,CAAVG,UAAU;QACVC,QAAQ,GAAAJ,YAAA,CAARI,QAAQ;MAEV,IAAAC,YAAA,GAKIP,KAAI,CAACzD,KAAK;QAJZC,QAAQ,GAAA+D,YAAA,CAAR/D,QAAQ;QACRU,oBAAoB,GAAAqD,YAAA,CAApBrD,oBAAoB;QACpBE,oBAAoB,GAAAmD,YAAA,CAApBnD,oBAAoB;QACpBV,iBAAiB,GAAA6D,YAAA,CAAjB7D,iBAAiB;MAGnB,IAAIyD,aAAa,EAAE;QACjBG,QAAQ,CAAC,CAAC;QACV;MACF;MAEAN,KAAI,CAACF,kBAAkB,CAAC,CAAC;MACzB,IAAI,CAACE,KAAI,CAACQ,mBAAmB,CAAC,CAAC,EAAE;MAEjC,IAAMC,mBAAmB,GACvB/D,iBAAiB,KACf3B,gBAAgB,CAAC4B,oBAAoB,CAACyB,aAAa,IACrDZ,SAAS,YAAYnD,cAAc,IACnCC,gBAAgB,CAAC+B,KAAK,CAAC;MAEzB+D,eAAe,CAAC,CAAC;MACjB,IAAIM,aAAkC,GAAG,IAAI;MAC7C,IAAIC,WAAgC,GAAG,IAAI;MAC3C,IAAIC,SAAS,GAAG,KAAK;MACrB,IAAI;QACF,IAAIH,mBAAmB,EAAE;UACvBC,aAAa,SAASrE,KAAK,CAACwE,yBAAyB,CACnDrD,SAAS,CAACsD,iBAAiB,EAC3BtD,SAAS,CAACuD,iBACZ,CAAC;UACD;UACAJ,WAAW,SAASD,aAAa,CAACM,MAAM,CAAC,CAAC;QAC5C,CAAC,MAAM;UACLL,WAAW,SAAStE,KAAK,CAAC4E,MAAM,CAAC,CAAC;QACpC;QACA,IAAM/C,cAAc,GAAG8B,KAAI,CAACnC,iBAAiB,CAAC8C,WAAW,CAACO,IAAI,CAAC;QAC/D,IAAIhD,cAAc,CAACwB,MAAM,KAAK,CAAC,EAAE;UAC/B;UACAY,QAAQ,CAAC,CAAC;UACV;QACF;QACA,IAAMb,WAAW,GAAGO,KAAI,CAACd,cAAc,CAAChB,cAAc,CAAC;QACvD,IAAMiD,iBAAiB,GAAGR,WAAW,CAACS,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;QACvD,MAAMD,iBAAiB,CAACE,eAAe,CAAC,CAAC;QACzChB,UAAU,CACR7D,QAAQ,EACRmE,WAAW,EACXQ,iBAAiB,EACjBjD,cAAc,EACduB,WAAW,EACXvC,oBAAoB,EACpBE,oBACF,CAAC;QACDwD,SAAS,GAAG,IAAI;MAClB,CAAC,CAAC,OAAOU,KAAK,EAAE;QACdzG,GAAG,CAACyG,KAAK,CAAC,qBAAqB,EAAEA,KAAK,CAAC;QACvCtB,KAAI,CAACD,QAAQ,CAAC;UACZ1C,YAAY,eACV3C,KAAA;YAAA6G,QAAA,gBACE/G,IAAA,CAACpB,eAAe;cAACoI,IAAI,EAAExH;YAAU,CAAE,CAAC,KAAC,KAAAyC,MAAA,CAAI6E,KAAK;UAAA,CAC7C;QAEP,CAAC,CAAC;QACFhB,QAAQ,CAAC,CAAC;MACZ,CAAC,SAAS;QAAA,IAAAmB,cAAA;QACR;QACA,CAAAA,cAAA,GAAAf,aAAa,cAAAe,cAAA,eAAbA,cAAA,CAAeC,KAAK,CAAC,CAAC;QACtB;QACA;QACA,IAAI,CAACd,SAAS,EAAE;UAAA,IAAAe,YAAA;UACd,CAAAA,YAAA,GAAAhB,WAAW,cAAAgB,YAAA,eAAXA,YAAA,CAAaD,KAAK,CAAC,CAAC;QACtB;MACF;IAAC;EACH;EAEA3F,8BAA8BA,CAAC6F,KAAa,EAAQ;IAClD,IAAI,CAAC7B,QAAQ,CAAC;MAAErD,iBAAiB,EAAEkF;IAAM,CAAC,CAAC;EAC7C;EAEA5F,wCAAwCA,CAAC4F,KAAqB,EAAQ;IACpE,IAAIA,KAAK,KAAK,IAAI,EAAE;MAClB,IAAI,CAAC7B,QAAQ,CAAC;QAAElD,2BAA2B,EAAEgF,MAAM,CAACD,KAAK;MAAE,CAAC,CAAC;IAC/D;EACF;EAEA3F,mCAAmCA,CAAC2F,KAAa,EAAQ;IACvD,IAAI,CAAC7B,QAAQ,CAAC;MAAE/C,sBAAsB,EAAE4E;IAAM,CAAC,CAAC;EAClD;EAEA1F,iCAAiCA,CAAA,EAAS;IACxC,IAAI,CAAC6D,QAAQ,CAAC+B,IAAA;MAAA,IAAG5E,oBAAoB,GAAA4E,IAAA,CAApB5E,oBAAoB;MAAA,OAAQ;QAC3CA,oBAAoB,EAAE,CAACA;MACzB,CAAC;IAAA,CAAC,CAAC;EACL;EAEAf,iCAAiCA,CAAA,EAAS;IACxC,IAAI,CAAC4D,QAAQ,CAACgC,KAAA;MAAA,IAAG5E,oBAAoB,GAAA4E,KAAA,CAApB5E,oBAAoB;MAAA,OAAQ;QAC3CA,oBAAoB,EAAE,CAACA;MACzB,CAAC;IAAA,CAAC,CAAC;EACL;EAEAf,iCAAiCA,CAAA,EAAS;IACxC,IAAI,CAAC2D,QAAQ,CAACiC,KAAA;MAAA,IAAG5E,oBAAoB,GAAA4E,KAAA,CAApB5E,oBAAoB;MAAA,OAAQ;QAC3CA,oBAAoB,EAAE,CAACA;MACzB,CAAC;IAAA,CAAC,CAAC;EACL;EAEAoD,mBAAmBA,CAAA,EAAY;IAC7B,IAAQhD,SAAS,GAAK,IAAI,CAAC5B,KAAK,CAAxB4B,SAAS;IACjB,IAAAyE,YAAA,GAAsD,IAAI,CAAC1F,KAAK;MAAxDG,iBAAiB,GAAAuF,YAAA,CAAjBvF,iBAAiB;MAAEM,sBAAsB,GAAAiF,YAAA,CAAtBjF,sBAAsB;IAEjD,IACEN,iBAAiB,KACf3B,gBAAgB,CAAC4B,oBAAoB,CAACyB,aAAa,KACpDZ,SAAS,IAAI,IAAI,IAAIA,SAAS,CAACC,OAAO,CAAC,CAAC,CAAC,EAC1C;MACA,IAAI,CAACsC,QAAQ,CAAC;QACZ1C,YAAY,eACV3C,KAAA;UAAA6G,QAAA,gBACE/G,IAAA,CAACpB,eAAe;YAACoI,IAAI,EAAExH;UAAU,CAAE,CAAC,4DAEtC;QAAA,CAAG;MAEP,CAAC,CAAC;MACF,OAAO,KAAK;IACd;IAEA,IACE0C,iBAAiB,KACf3B,gBAAgB,CAAC4B,oBAAoB,CAACkC,eAAe,IACvD7B,sBAAsB,IAAI,CAAC,EAC3B;MACA,IAAI,CAAC+C,QAAQ,CAAC;QACZ1C,YAAY,eACV3C,KAAA;UAAA6G,QAAA,gBACE/G,IAAA,CAACpB,eAAe;YAACoI,IAAI,EAAExH;UAAU,CAAE,CAAC,oDAEtC;QAAA,CAAG;MAEP,CAAC,CAAC;MACF,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb;EAEAkI,MAAMA,CAAA,EAAiB;IACrB,IAAAC,YAAA,GAMI,IAAI,CAACvG,KAAK;MALZS,KAAK,GAAA8F,YAAA,CAAL9F,KAAK;MACL8D,aAAa,GAAAgC,YAAA,CAAbhC,aAAa;MACbiC,qBAAqB,GAAAD,YAAA,CAArBC,qBAAqB;MACrBC,0BAA0B,GAAAF,YAAA,CAA1BE,0BAA0B;MAC1BC,mBAAmB,GAAAH,YAAA,CAAnBG,mBAAmB;IAErB,IAAAC,YAAA,GAUI,IAAI,CAAChG,KAAK;MATZC,QAAQ,GAAA+F,YAAA,CAAR/F,QAAQ;MACRE,iBAAiB,GAAA6F,YAAA,CAAjB7F,iBAAiB;MACjBG,2BAA2B,GAAA0F,YAAA,CAA3B1F,2BAA2B;MAC3BG,sBAAsB,GAAAuF,YAAA,CAAtBvF,sBAAsB;MACtBE,oBAAoB,GAAAqF,YAAA,CAApBrF,oBAAoB;MACpBC,oBAAoB,GAAAoF,YAAA,CAApBpF,oBAAoB;MACpBC,oBAAoB,GAAAmF,YAAA,CAApBnF,oBAAoB;MACpBC,YAAY,GAAAkF,YAAA,CAAZlF,YAAY;MACZC,EAAE,GAAAiF,YAAA,CAAFjF,EAAE;IAEJ,IAAQI,QAAQ,GAAKrB,KAAK,CAAlBqB,QAAQ;IAChB,oBACEhD,KAAA;MAAK8H,SAAS,EAAC,oBAAoB;MAAAjB,QAAA,gBACjC/G,IAAA;QAAK8C,EAAE,EAAC,qBAAqB;QAACkF,SAAS,EAAC,eAAe;QAAAjB,QAAA,EAAC;MAExD,CAAK,CAAC,eACN/G,IAAA;QAAKgI,SAAS,EAAC,YAAY;QAAAjB,QAAA,eACzB7G,KAAA,CAAClB,UAAU;UACT,mBAAgB,qBAAqB;UACrCiJ,QAAQ,EAAE,IAAI,CAAC1G,8BAA+B;UAC9C6F,KAAK,EAAElF,iBAAkB;UACzBgG,UAAU,EAAEvC,aAAc;UAAAoB,QAAA,gBAE1B7G,KAAA,CAACjB,KAAK;YACJmI,KAAK,EAAE7G,gBAAgB,CAAC4B,oBAAoB,CAACC,QAAS;YACtD,eAAY,iCAAiC;YAAA2E,QAAA,GAC9C,UAEC,eAAA/G,IAAA;cAAMgI,SAAS,EAAC,iBAAiB;cAAAjB,QAAA,MAAA9E,MAAA,CAC1B1B,gBAAgB,CAACC,cAAc,CAAC0C,QAAQ,CAAC;YAAA,CAC1C,CAAC;UAAA,CACF,CAAC,eACRhD,KAAA,CAACjB,KAAK;YACJmI,KAAK,EAAE7G,gBAAgB,CAAC4B,oBAAoB,CAACyB,aAAc;YAC3D,eAAY,kCAAkC;YAAAmD,QAAA,GAC/C,oBAEC,eAAA/G,IAAA;cAAMgI,SAAS,EAAC,iBAAiB;cAAAjB,QAAA,EAC9B,IAAI,CAAChE,gBAAgB,IAAI,IAAI,OAAAd,MAAA,CACtB1B,gBAAgB,CAACC,cAAc,CACjC,IAAI,CAACuC,gBACP,CAAC,cACD;YAAI,CACJ,CAAC;UAAA,CACF,CAAC,eACR7C,KAAA;YAAK8H,SAAS,EAAC,QAAQ;YAAAjB,QAAA,gBACrB/G,IAAA,CAACf,KAAK;cACJmI,KAAK,EAAE7G,gBAAgB,CAAC4B,oBAAoB,CAACkC,eAAgB;cAC7D,eAAY,oCAAoC;cAChD8D,MAAM,EAAC,GAAG;cACV,cAAW;YAAkC,CAC9C,CAAC,eACFjI,KAAA;cACE8H,SAAS,EAAC,iBAAiB;cAC3BI,IAAI,EAAC,cAAc;cACnBC,OAAO,EAAEA,CAAA,KAAM;gBACb,IAAI,CAAC9C,QAAQ,CAAC;kBACZrD,iBAAiB,EACf3B,gBAAgB,CAAC4B,oBAAoB,CAACkC;gBAC1C,CAAC,CAAC;cACJ,CAAE;cAAA0C,QAAA,gBAEF7G,KAAA,CAACf,MAAM;gBACLmJ,WAAW,EAAEjG,2BAA4B;gBACzC,eAAY,qCAAqC;gBACjD6F,UAAU,EAAEvC,aAAc;gBAC1BsC,QAAQ,EAAE,IAAI,CAACzG,wCAAyC;gBACxD,cAAW,8BAA8B;gBACzC+G,IAAI;gBAAAxB,QAAA,gBAEJ/G,IAAA,CAACZ,IAAI;kBAAA2H,QAAA,EAAa;gBAAK,GAAb,OAAmB,CAAC,eAC9B/G,IAAA,CAACZ,IAAI;kBAAA2H,QAAA,EAAY;gBAAI,GAAX,MAAiB,CAAC;cAAA,CACtB,CAAC,eACT/G,IAAA,CAACd,WAAW;gBACV4D,EAAE,oBAAAb,MAAA,CAAoBa,EAAE,CAAG;gBAC3B,eAAY,oCAAoC;gBAChDhB,IAAI,oBAAAG,MAAA,CAAoBa,EAAE,CAAG;gBAC7B0F,QAAQ,EAAE,CAAE;gBACZC,YAAY,EAAE,GAAI;gBAClBrB,KAAK,EAAE5E,sBAAuB;gBAC9BkG,KAAK,EAAC,MAAM;gBACZC,QAAQ,EAAE,CAAE;gBACZT,UAAU,EAAEvC,aAAc;gBAC1BsC,QAAQ,EAAE,IAAI,CAACxG,mCAAoC;gBACnD,cAAW,4BAA4B;gBACvC8G,IAAI;cAAA,CACL,CAAC,eACFvI,IAAA;gBAAA+G,QAAA,EAAK;cAAI,CAAK,CAAC;YAAA,CACZ,CAAC;UAAA,CACH,CAAC;QAAA,CACI;MAAC,CACV,CAAC,eACN7G,KAAA;QAAK8H,SAAS,EAAC,YAAY;QAAAjB,QAAA,gBACzB/G,IAAA;UAAO4I,OAAO,oBAAA3G,MAAA,CAAoBa,EAAE,CAAG;UAAAiE,QAAA,EAAC;QAAS,CAAO,CAAC,eACzD/G,IAAA;UACE6I,IAAI,EAAC,MAAM;UACXb,SAAS,EAAC,cAAc;UACxBlF,EAAE,cAAAb,MAAA,CAAca,EAAE,CAAG;UACrB,eAAY,8BAA8B;UAC1ChB,IAAI,cAAAG,MAAA,CAAca,EAAE,CAAG;UACvBsE,KAAK,EAAEpF,QAAS;UAChBiG,QAAQ,EAAEa,KAAK,IAAI;YACjB,IAAI,CAACvD,QAAQ,CAAC;cAAEvD,QAAQ,EAAE8G,KAAK,CAACC,MAAM,CAAC3B;YAAM,CAAC,CAAC;UACjD,CAAE;UACF4B,QAAQ,EAAErD;QAAc,CACzB,CAAC;MAAA,CACC,CAAC,eACNzF,KAAA;QAAK8H,SAAS,EAAC,kBAAkB;QAAAjB,QAAA,gBAC/B/G,IAAA,CAAClB,QAAQ;UACPmK,OAAO,EAAEvG,oBAAqB;UAC9BuF,QAAQ,EAAE,IAAI,CAACvG,iCAAkC;UAAAqF,QAAA,EAClD;QAED,CAAU,CAAC,eACX/G,IAAA,CAAClB,QAAQ;UACPmK,OAAO,EAAEtG,oBAAqB;UAC9BsF,QAAQ,EAAE,IAAI,CAACtG,iCAAkC;UAAAoF,QAAA,EAClD;QAED,CAAU,CAAC,eACX/G,IAAA,CAAClB,QAAQ;UACPmK,OAAO,EAAErG,oBAAqB;UAC9BqF,QAAQ,EAAE,IAAI,CAACrG,iCAAkC;UAAAmF,QAAA,EAClD;QAED,CAAU,CAAC;MAAA,CACR,CAAC,eACN7G,KAAA;QAAK8H,SAAS,EAAC,4BAA4B;QAAAjB,QAAA,GACxClE,YAAY,IAAI,IAAI,iBACnB7C,IAAA;UAAKgI,SAAS,EAAC,eAAe;UAAAjB,QAAA,EAAElE;QAAY,CAAM,CACnD,EACAiF,mBAAmB,iBAClB5H,KAAA;UAAK8H,SAAS,EAAC,iBAAiB;UAAAjB,QAAA,GAC7B,CAACe,mBAAmB,KACnBvH,gBAAgB,CAAC2I,eAAe,CAACC,WAAW,IAC5CrB,mBAAmB,KACjBvH,gBAAgB,CAAC2I,eAAe,CAACE,UAAU,kBAC7ClJ,KAAA,CAAAE,SAAA;YAAA2G,QAAA,GACGe,mBAAmB,KAClBvH,gBAAgB,CAAC2I,eAAe,CAACE,UAAU,iBAC3CpJ,IAAA;cAAKgI,SAAS,EAAC,YAAY;cAAAjB,QAAA,EAAC;YAAoB,CAAK,CACtD,EACAe,mBAAmB,KAClBvH,gBAAgB,CAAC2I,eAAe,CAACC,WAAW,iBAC5CjJ,KAAA;cAAK8H,SAAS,EAAC,2CAA2C;cAAAjB,QAAA,gBACxD/G,IAAA;gBAAA+G,QAAA,EACGc,0BAA0B,IAC3BA,0BAA0B,KAAK,CAAC,sBAAA5F,MAAA,CACTxC,SAAS,CAAC4J,iBAAiB,CAC5CxB,0BACF,CAAC,IACD;cAAI,CACJ,CAAC,eACP7H,IAAA;gBAAA+G,QAAA,KAAA9E,MAAA,CAAU2F,qBAAqB;cAAA,CAAU,CAAC;YAAA,CACvC,CACN;UAAA,CACD,CACH,EACAE,mBAAmB,KAClBvH,gBAAgB,CAAC2I,eAAe,CAACI,QAAQ,iBACzCtJ,IAAA;YAAKgI,SAAS,EAAC,uBAAuB;YAAAjB,QAAA,EAAC;UAAkB,CAAK,CAC/D,EACAe,mBAAmB,KAClBvH,gBAAgB,CAAC2I,eAAe,CAACK,QAAQ,iBACzCvJ,IAAA;YAAKgI,SAAS,EAAC,YAAY;YAAAjB,QAAA,EAAC;UAAiB,CAAK,CACnD,EAEA,CAACe,mBAAmB,KACnBvH,gBAAgB,CAAC2I,eAAe,CAACC,WAAW,IAC5CrB,mBAAmB,KACjBvH,gBAAgB,CAAC2I,eAAe,CAACE,UAAU,kBAC7CpJ,IAAA;YAAKgI,SAAS,EAAC,UAAU;YAAAjB,QAAA,eACvB/G,IAAA;cACEgI,SAAS,EAAC,yDAAyD;cACnEwB,KAAK,EAAE;gBAAEd,KAAK,KAAAzG,MAAA,CAAK2F,qBAAqB;cAAI;YAAE,CAC/C;UAAC,CACC,CACN,EACAE,mBAAmB,KAClBvH,gBAAgB,CAAC2I,eAAe,CAACI,QAAQ,iBACzCtJ,IAAA;YAAKgI,SAAS,EAAC,UAAU;YAAAjB,QAAA,eACvB/G,IAAA;cACEgI,SAAS,EAAC,yBAAyB;cACnCwB,KAAK,EAAE;gBAAEd,KAAK,KAAAzG,MAAA,CAAK2F,qBAAqB;cAAI;YAAE,CAC/C;UAAC,CACC,CACN;QAAA,CACE,CACN,eACD1H,KAAA,CAACrB,MAAM;UACL4K,IAAI,EAAC,SAAS;UACd,eAAY,2BAA2B;UACvCzB,SAAS,EAAErJ,UAAU,CAAC,iBAAiB,EAAE;YACvC,4BAA4B,EAAEgH;UAChC,CAAC,CAAE;UACH0C,OAAO,EAAE,IAAI,CAAChH,mBAAoB;UAAA0F,QAAA,GAEjCpB,aAAa,iBACZzF,KAAA;YAAA6G,QAAA,gBACE/G,IAAA,CAACjB,cAAc;cAACiJ,SAAS,EAAC;YAAqC,CAAE,CAAC,eAClEhI,IAAA;cAAMgI,SAAS,EAAC,oBAAoB;cAAAjB,QAAA,EAAC;YAAW,CAAM,CAAC,eACvD/G,IAAA;cAAMgI,SAAS,EAAC,mBAAmB;cAAAjB,QAAA,EAAC;YAAM,CAAM,CAAC;UAAA,CAC7C,CACP,EACA,CAACpB,aAAa,IAAI,UAAU;QAAA,CACvB,CAAC;MAAA,CACN,CAAC;IAAA,CACH,CAAC;EAEV;AACF;AAAC+D,eAAA,CAxjBKnJ,gBAAgB,0BAIU,mBAAmB;AAAAmJ,eAAA,CAJ7CnJ,gBAAgB,qBAMK;EACvB6I,UAAU,EAAE,YAAY;EACxBD,WAAW,EAAE,aAAa;EAC1BG,QAAQ,EAAE,UAAU;EACpBC,QAAQ,EAAE;AACZ,CAAC;AAAAG,eAAA,CAXGnJ,gBAAgB,0BAaU;EAC5B6B,QAAQ,EAAE,UAAU;EACpBwB,aAAa,EAAE,eAAe;EAC9BS,eAAe,EAAE;AACnB,CAAC;AAAAqF,eAAA,CAjBGnJ,gBAAgB,6BAmBa;EAC/BgC,KAAK,EAAE,OAAO;EACdiC,IAAI,EAAE;AACR,CAAC;AAAAkF,eAAA,CAtBGnJ,gBAAgB,2BAwBW,GAAG;AAAAmJ,eAAA,CAxB9BnJ,gBAAgB,kBA0BE;EACpBqF,eAAe,EAAEA,CAAA,KAAY+D,SAAS;EACtChE,aAAa,EAAE,KAAK;EACpBmC,mBAAmB,EAAE,EAAE;EACvBF,qBAAqB,EAAE,CAAC;EACxBC,0BAA0B,EAAE,IAAI;EAChC7E,SAAS,EAAE;AACb,CAAC;AAyhBH,eAAezC,gBAAgB","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/iris-grid",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.29.0",
|
|
4
4
|
"description": "Deephaven Iris Grid",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -31,18 +31,18 @@
|
|
|
31
31
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@deephaven/components": "^1.
|
|
35
|
-
"@deephaven/console": "^1.
|
|
34
|
+
"@deephaven/components": "^1.29.0",
|
|
35
|
+
"@deephaven/console": "^1.29.0",
|
|
36
36
|
"@deephaven/filters": "^1.1.0",
|
|
37
|
-
"@deephaven/grid": "^1.
|
|
37
|
+
"@deephaven/grid": "^1.29.0",
|
|
38
38
|
"@deephaven/icons": "^1.2.0",
|
|
39
|
-
"@deephaven/jsapi-components": "^1.
|
|
39
|
+
"@deephaven/jsapi-components": "^1.29.0",
|
|
40
40
|
"@deephaven/jsapi-types": "^1.0.0-dev0.40.4",
|
|
41
|
-
"@deephaven/jsapi-utils": "^1.
|
|
41
|
+
"@deephaven/jsapi-utils": "^1.29.0",
|
|
42
42
|
"@deephaven/log": "^1.8.0",
|
|
43
|
-
"@deephaven/react-hooks": "^1.
|
|
43
|
+
"@deephaven/react-hooks": "^1.29.0",
|
|
44
44
|
"@deephaven/storage": "^1.8.0",
|
|
45
|
-
"@deephaven/utils": "^1.
|
|
45
|
+
"@deephaven/utils": "^1.29.0",
|
|
46
46
|
"@dnd-kit/core": "^6.1.0",
|
|
47
47
|
"@dnd-kit/modifiers": "^9.0.0",
|
|
48
48
|
"@dnd-kit/sortable": "^10.0.0",
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
"publishConfig": {
|
|
82
82
|
"access": "public"
|
|
83
83
|
},
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "ad3cce03a83989bc2ac6bc4f1847ab40a5cca760"
|
|
85
85
|
}
|