@jbrowse/plugin-spreadsheet-view 2.17.0 → 3.0.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.
Files changed (201) hide show
  1. package/dist/LaunchSpreadsheetView/index.d.ts +1 -1
  2. package/dist/LaunchSpreadsheetView/index.js +1 -3
  3. package/dist/SpreadsheetView/ImportWizard.d.ts +51 -0
  4. package/dist/SpreadsheetView/ImportWizard.js +250 -0
  5. package/dist/SpreadsheetView/SpreadsheetModel.d.ts +78 -0
  6. package/dist/SpreadsheetView/SpreadsheetModel.js +119 -0
  7. package/dist/SpreadsheetView/SpreadsheetViewModel.d.ts +299 -0
  8. package/dist/SpreadsheetView/SpreadsheetViewModel.js +101 -0
  9. package/dist/SpreadsheetView/components/BreakendMultiLevelOptionDialog.d.ts +1 -0
  10. package/dist/SpreadsheetView/components/BreakendMultiLevelOptionDialog.js +5 -0
  11. package/dist/SpreadsheetView/components/BreakendSingleLevelOptionDialog.d.ts +1 -0
  12. package/dist/SpreadsheetView/components/BreakendSingleLevelOptionDialog.js +5 -0
  13. package/dist/SpreadsheetView/components/FeatureMenu.d.ts +7 -0
  14. package/dist/SpreadsheetView/components/FeatureMenu.js +105 -0
  15. package/dist/SpreadsheetView/components/ImportWizard.d.ts +3 -4
  16. package/dist/SpreadsheetView/components/ImportWizard.js +25 -68
  17. package/dist/SpreadsheetView/components/LocationCell.d.ts +7 -0
  18. package/dist/SpreadsheetView/components/LocationCell.js +29 -0
  19. package/dist/SpreadsheetView/components/NumberEditor.d.ts +2 -3
  20. package/dist/SpreadsheetView/components/NumberEditor.js +4 -28
  21. package/dist/SpreadsheetView/components/SpreadsheetDataGrid.d.ts +5 -0
  22. package/dist/SpreadsheetView/components/SpreadsheetDataGrid.js +23 -0
  23. package/dist/SpreadsheetView/components/SpreadsheetView.d.ts +4 -5
  24. package/dist/SpreadsheetView/components/SpreadsheetView.js +25 -63
  25. package/dist/SpreadsheetView/components/SpreadsheetViewActual.d.ts +5 -0
  26. package/dist/SpreadsheetView/components/SpreadsheetViewActual.js +34 -0
  27. package/dist/SpreadsheetView/components/TrackSelector.d.ts +6 -0
  28. package/dist/SpreadsheetView/components/TrackSelector.js +27 -0
  29. package/dist/SpreadsheetView/importAdapters/BedImport.d.ts +26 -17
  30. package/dist/SpreadsheetView/importAdapters/BedImport.js +53 -139
  31. package/dist/SpreadsheetView/importAdapters/BedpeImport.d.ts +36 -0
  32. package/dist/SpreadsheetView/importAdapters/BedpeImport.js +79 -0
  33. package/dist/SpreadsheetView/importAdapters/STARFusionImport.d.ts +25 -9
  34. package/dist/SpreadsheetView/importAdapters/STARFusionImport.js +27 -62
  35. package/dist/SpreadsheetView/importAdapters/VcfImport.d.ts +19 -12
  36. package/dist/SpreadsheetView/importAdapters/VcfImport.js +53 -98
  37. package/dist/SpreadsheetView/importAdapters/isNumber.d.ts +1 -0
  38. package/dist/SpreadsheetView/importAdapters/isNumber.js +14 -0
  39. package/dist/SpreadsheetView/importAdapters/util.d.ts +2 -0
  40. package/dist/SpreadsheetView/importAdapters/util.js +22 -0
  41. package/dist/SpreadsheetView/index.d.ts +2 -2
  42. package/dist/SpreadsheetView/index.js +19 -9
  43. package/dist/SpreadsheetView/util.d.ts +7 -0
  44. package/dist/SpreadsheetView/util.js +13 -0
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.js +1 -3
  47. package/esm/LaunchSpreadsheetView/index.d.ts +1 -1
  48. package/esm/LaunchSpreadsheetView/index.js +1 -3
  49. package/esm/SpreadsheetView/ImportWizard.d.ts +51 -0
  50. package/esm/SpreadsheetView/ImportWizard.js +214 -0
  51. package/esm/SpreadsheetView/SpreadsheetModel.d.ts +78 -0
  52. package/esm/SpreadsheetView/SpreadsheetModel.js +113 -0
  53. package/esm/SpreadsheetView/SpreadsheetViewModel.d.ts +299 -0
  54. package/esm/SpreadsheetView/SpreadsheetViewModel.js +95 -0
  55. package/esm/SpreadsheetView/components/BreakendMultiLevelOptionDialog.d.ts +1 -0
  56. package/esm/SpreadsheetView/components/BreakendMultiLevelOptionDialog.js +1 -0
  57. package/esm/SpreadsheetView/components/BreakendSingleLevelOptionDialog.d.ts +1 -0
  58. package/esm/SpreadsheetView/components/BreakendSingleLevelOptionDialog.js +1 -0
  59. package/esm/SpreadsheetView/components/FeatureMenu.d.ts +7 -0
  60. package/esm/SpreadsheetView/components/FeatureMenu.js +66 -0
  61. package/esm/SpreadsheetView/components/ImportWizard.d.ts +3 -4
  62. package/esm/SpreadsheetView/components/ImportWizard.js +26 -46
  63. package/esm/SpreadsheetView/components/LocationCell.d.ts +7 -0
  64. package/esm/SpreadsheetView/components/LocationCell.js +23 -0
  65. package/esm/SpreadsheetView/components/NumberEditor.d.ts +2 -3
  66. package/esm/SpreadsheetView/components/NumberEditor.js +4 -5
  67. package/esm/SpreadsheetView/components/SpreadsheetDataGrid.d.ts +5 -0
  68. package/esm/SpreadsheetView/components/SpreadsheetDataGrid.js +21 -0
  69. package/esm/SpreadsheetView/components/SpreadsheetView.d.ts +4 -5
  70. package/esm/SpreadsheetView/components/SpreadsheetView.js +8 -56
  71. package/esm/SpreadsheetView/components/SpreadsheetViewActual.d.ts +5 -0
  72. package/esm/SpreadsheetView/components/SpreadsheetViewActual.js +29 -0
  73. package/esm/SpreadsheetView/components/TrackSelector.d.ts +6 -0
  74. package/esm/SpreadsheetView/components/TrackSelector.js +25 -0
  75. package/esm/SpreadsheetView/importAdapters/BedImport.d.ts +26 -17
  76. package/esm/SpreadsheetView/importAdapters/BedImport.js +53 -137
  77. package/esm/SpreadsheetView/importAdapters/BedpeImport.d.ts +36 -0
  78. package/esm/SpreadsheetView/importAdapters/BedpeImport.js +76 -0
  79. package/esm/SpreadsheetView/importAdapters/STARFusionImport.d.ts +25 -9
  80. package/esm/SpreadsheetView/importAdapters/STARFusionImport.js +27 -62
  81. package/esm/SpreadsheetView/importAdapters/VcfImport.d.ts +19 -12
  82. package/esm/SpreadsheetView/importAdapters/VcfImport.js +53 -97
  83. package/esm/SpreadsheetView/importAdapters/isNumber.d.ts +1 -0
  84. package/esm/SpreadsheetView/importAdapters/isNumber.js +11 -0
  85. package/esm/SpreadsheetView/importAdapters/util.d.ts +2 -0
  86. package/esm/SpreadsheetView/importAdapters/util.js +18 -0
  87. package/esm/SpreadsheetView/index.d.ts +2 -2
  88. package/esm/SpreadsheetView/index.js +2 -2
  89. package/esm/SpreadsheetView/util.d.ts +7 -0
  90. package/esm/SpreadsheetView/util.js +10 -0
  91. package/esm/index.d.ts +1 -1
  92. package/esm/index.js +1 -3
  93. package/package.json +7 -7
  94. package/dist/SpreadsheetView/components/CellData.d.ts +0 -9
  95. package/dist/SpreadsheetView/components/CellData.js +0 -14
  96. package/dist/SpreadsheetView/components/ColumnFilterControls.d.ts +0 -3
  97. package/dist/SpreadsheetView/components/ColumnFilterControls.js +0 -58
  98. package/dist/SpreadsheetView/components/ColumnMenu.d.ts +0 -16
  99. package/dist/SpreadsheetView/components/ColumnMenu.js +0 -140
  100. package/dist/SpreadsheetView/components/DataRow.d.ts +0 -12
  101. package/dist/SpreadsheetView/components/DataRow.js +0 -81
  102. package/dist/SpreadsheetView/components/DataTable.d.ts +0 -10
  103. package/dist/SpreadsheetView/components/DataTable.js +0 -42
  104. package/dist/SpreadsheetView/components/DataTableHeader.d.ts +0 -6
  105. package/dist/SpreadsheetView/components/DataTableHeader.js +0 -104
  106. package/dist/SpreadsheetView/components/GlobalFilterControls.d.ts +0 -5
  107. package/dist/SpreadsheetView/components/GlobalFilterControls.js +0 -68
  108. package/dist/SpreadsheetView/components/RowCountMessage.d.ts +0 -6
  109. package/dist/SpreadsheetView/components/RowCountMessage.js +0 -33
  110. package/dist/SpreadsheetView/components/RowMenu.d.ts +0 -9
  111. package/dist/SpreadsheetView/components/RowMenu.js +0 -39
  112. package/dist/SpreadsheetView/components/SortIndicator.d.ts +0 -6
  113. package/dist/SpreadsheetView/components/SortIndicator.js +0 -27
  114. package/dist/SpreadsheetView/components/Spreadsheet.d.ts +0 -11
  115. package/dist/SpreadsheetView/components/Spreadsheet.js +0 -25
  116. package/dist/SpreadsheetView/components/StatusBar.d.ts +0 -11
  117. package/dist/SpreadsheetView/components/StatusBar.js +0 -44
  118. package/dist/SpreadsheetView/importAdapters/ImportUtils.d.ts +0 -42
  119. package/dist/SpreadsheetView/importAdapters/ImportUtils.js +0 -123
  120. package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.d.ts +0 -12
  121. package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +0 -20
  122. package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.d.ts +0 -12
  123. package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.js +0 -20
  124. package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.d.ts +0 -12
  125. package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.js +0 -20
  126. package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.d.ts +0 -13
  127. package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.js +0 -183
  128. package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.d.ts +0 -19
  129. package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js +0 -23
  130. package/dist/SpreadsheetView/models/ColumnDataTypes/Number.d.ts +0 -30
  131. package/dist/SpreadsheetView/models/ColumnDataTypes/Number.js +0 -126
  132. package/dist/SpreadsheetView/models/ColumnDataTypes/Text.d.ts +0 -28
  133. package/dist/SpreadsheetView/models/ColumnDataTypes/Text.js +0 -129
  134. package/dist/SpreadsheetView/models/ColumnDataTypes/index.d.ts +0 -71
  135. package/dist/SpreadsheetView/models/ColumnDataTypes/index.js +0 -37
  136. package/dist/SpreadsheetView/models/FilterControls.d.ts +0 -26
  137. package/dist/SpreadsheetView/models/FilterControls.js +0 -85
  138. package/dist/SpreadsheetView/models/ImportWizard.d.ts +0 -31
  139. package/dist/SpreadsheetView/models/ImportWizard.js +0 -186
  140. package/dist/SpreadsheetView/models/Row.d.ts +0 -17
  141. package/dist/SpreadsheetView/models/Row.js +0 -43
  142. package/dist/SpreadsheetView/models/Spreadsheet.d.ts +0 -260
  143. package/dist/SpreadsheetView/models/Spreadsheet.js +0 -174
  144. package/dist/SpreadsheetView/models/SpreadsheetView.d.ts +0 -482
  145. package/dist/SpreadsheetView/models/SpreadsheetView.js +0 -199
  146. package/dist/SpreadsheetView/models/StaticRowSet.d.ts +0 -163
  147. package/dist/SpreadsheetView/models/StaticRowSet.js +0 -56
  148. package/esm/SpreadsheetView/components/CellData.d.ts +0 -9
  149. package/esm/SpreadsheetView/components/CellData.js +0 -9
  150. package/esm/SpreadsheetView/components/ColumnFilterControls.d.ts +0 -3
  151. package/esm/SpreadsheetView/components/ColumnFilterControls.js +0 -53
  152. package/esm/SpreadsheetView/components/ColumnMenu.d.ts +0 -16
  153. package/esm/SpreadsheetView/components/ColumnMenu.js +0 -135
  154. package/esm/SpreadsheetView/components/DataRow.d.ts +0 -12
  155. package/esm/SpreadsheetView/components/DataRow.js +0 -76
  156. package/esm/SpreadsheetView/components/DataTable.d.ts +0 -10
  157. package/esm/SpreadsheetView/components/DataTable.js +0 -37
  158. package/esm/SpreadsheetView/components/DataTableHeader.d.ts +0 -6
  159. package/esm/SpreadsheetView/components/DataTableHeader.js +0 -76
  160. package/esm/SpreadsheetView/components/GlobalFilterControls.d.ts +0 -5
  161. package/esm/SpreadsheetView/components/GlobalFilterControls.js +0 -40
  162. package/esm/SpreadsheetView/components/RowCountMessage.d.ts +0 -6
  163. package/esm/SpreadsheetView/components/RowCountMessage.js +0 -28
  164. package/esm/SpreadsheetView/components/RowMenu.d.ts +0 -9
  165. package/esm/SpreadsheetView/components/RowMenu.js +0 -34
  166. package/esm/SpreadsheetView/components/SortIndicator.d.ts +0 -6
  167. package/esm/SpreadsheetView/components/SortIndicator.js +0 -21
  168. package/esm/SpreadsheetView/components/Spreadsheet.d.ts +0 -11
  169. package/esm/SpreadsheetView/components/Spreadsheet.js +0 -20
  170. package/esm/SpreadsheetView/components/StatusBar.d.ts +0 -11
  171. package/esm/SpreadsheetView/components/StatusBar.js +0 -39
  172. package/esm/SpreadsheetView/importAdapters/ImportUtils.d.ts +0 -42
  173. package/esm/SpreadsheetView/importAdapters/ImportUtils.js +0 -95
  174. package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.d.ts +0 -12
  175. package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +0 -15
  176. package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.d.ts +0 -12
  177. package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.js +0 -15
  178. package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.d.ts +0 -12
  179. package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.js +0 -15
  180. package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.d.ts +0 -13
  181. package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.js +0 -178
  182. package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.d.ts +0 -19
  183. package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js +0 -20
  184. package/esm/SpreadsheetView/models/ColumnDataTypes/Number.d.ts +0 -30
  185. package/esm/SpreadsheetView/models/ColumnDataTypes/Number.js +0 -119
  186. package/esm/SpreadsheetView/models/ColumnDataTypes/Text.d.ts +0 -28
  187. package/esm/SpreadsheetView/models/ColumnDataTypes/Text.js +0 -122
  188. package/esm/SpreadsheetView/models/ColumnDataTypes/index.d.ts +0 -71
  189. package/esm/SpreadsheetView/models/ColumnDataTypes/index.js +0 -29
  190. package/esm/SpreadsheetView/models/FilterControls.d.ts +0 -26
  191. package/esm/SpreadsheetView/models/FilterControls.js +0 -83
  192. package/esm/SpreadsheetView/models/ImportWizard.d.ts +0 -31
  193. package/esm/SpreadsheetView/models/ImportWizard.js +0 -161
  194. package/esm/SpreadsheetView/models/Row.d.ts +0 -17
  195. package/esm/SpreadsheetView/models/Row.js +0 -41
  196. package/esm/SpreadsheetView/models/Spreadsheet.d.ts +0 -260
  197. package/esm/SpreadsheetView/models/Spreadsheet.js +0 -169
  198. package/esm/SpreadsheetView/models/SpreadsheetView.d.ts +0 -482
  199. package/esm/SpreadsheetView/models/SpreadsheetView.js +0 -194
  200. package/esm/SpreadsheetView/models/StaticRowSet.d.ts +0 -163
  201. package/esm/SpreadsheetView/models/StaticRowSet.js +0 -51
@@ -1,7 +1,8 @@
1
- import React, { useState, useEffect } from 'react';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
2
3
  import { TextField } from '@mui/material';
3
- import { makeStyles } from 'tss-react/mui';
4
4
  import { observer } from 'mobx-react';
5
+ import { makeStyles } from 'tss-react/mui';
5
6
  const useStyles = makeStyles()({
6
7
  textField: {
7
8
  width: '2rem',
@@ -9,14 +10,12 @@ const useStyles = makeStyles()({
9
10
  },
10
11
  });
11
12
  const NumberEditor = observer(function ({ model, disabled, modelPropName, modelSetterName, }) {
12
- // @ts-expect-error
13
13
  const [val, setVal] = useState(model[modelPropName]);
14
14
  const { classes } = useStyles();
15
15
  useEffect(() => {
16
16
  const num = Number.parseInt(val, 10);
17
17
  if (!Number.isNaN(num)) {
18
18
  if (num > 0) {
19
- // @ts-expect-error
20
19
  model[modelSetterName](num);
21
20
  }
22
21
  else {
@@ -24,7 +23,7 @@ const NumberEditor = observer(function ({ model, disabled, modelPropName, modelS
24
23
  }
25
24
  }
26
25
  }, [model, modelSetterName, val]);
27
- return (React.createElement(TextField, { value: val, disabled: disabled, type: "number", onChange: evt => {
26
+ return (_jsx(TextField, { value: val, disabled: disabled, type: "number", onChange: evt => {
28
27
  setVal(evt.target.value);
29
28
  }, className: classes.textField }));
30
29
  });
@@ -0,0 +1,5 @@
1
+ import type { SpreadsheetModel } from '../SpreadsheetModel';
2
+ declare const SpreadsheetDataGrid: ({ model, }: {
3
+ model: SpreadsheetModel;
4
+ }) => import("react/jsx-runtime").JSX.Element | null;
5
+ export default SpreadsheetDataGrid;
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { DataGrid, GridToolbar, useGridApiRef } from '@mui/x-data-grid';
3
+ import { observer } from 'mobx-react';
4
+ const SpreadsheetDataGrid = observer(function ({ model, }) {
5
+ const { rows, dataGridColumns, visibleColumns } = model;
6
+ const apiRef = useGridApiRef();
7
+ return rows && dataGridColumns ? (_jsx(DataGrid, { apiRef: apiRef, checkboxSelection: true, disableRowSelectionOnClick: true, columnHeaderHeight: 35, columnVisibilityModel: visibleColumns, onFilterModelChange: () => {
8
+ setTimeout(() => {
9
+ model.setVisibleRows(apiRef.current.state.visibleRowsLookup);
10
+ });
11
+ }, onColumnVisibilityModelChange: n => {
12
+ model.setVisibleColumns(n);
13
+ }, rowHeight: 25, hideFooter: rows.length < 100, slots: {
14
+ toolbar: GridToolbar,
15
+ }, slotProps: {
16
+ toolbar: {
17
+ showQuickFilter: true,
18
+ },
19
+ }, rows: rows, columns: dataGridColumns })) : null;
20
+ });
21
+ export default SpreadsheetDataGrid;
@@ -1,6 +1,5 @@
1
- import React from 'react';
2
- import { SpreadsheetViewModel } from '../models/SpreadsheetView';
3
- declare const SpreadsheetView: ({ model, }: {
1
+ import type { SpreadsheetViewModel } from '../SpreadsheetViewModel';
2
+ declare const SpreadsheetContainer: ({ model, }: {
4
3
  model: SpreadsheetViewModel;
5
- }) => React.JSX.Element;
6
- export default SpreadsheetView;
4
+ }) => import("react/jsx-runtime").JSX.Element;
5
+ export default SpreadsheetContainer;
@@ -1,58 +1,10 @@
1
- import React, { useState } from 'react';
2
- import { Grid } from '@mui/material';
3
- import { makeStyles } from 'tss-react/mui';
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Suspense, lazy } from 'react';
4
3
  import { observer } from 'mobx-react';
5
- import { ResizeHandle } from '@jbrowse/core/ui';
6
- // locals
7
- import ImportWizard from './ImportWizard';
8
- import Spreadsheet from './Spreadsheet';
9
- import GlobalFilterControls from './GlobalFilterControls';
10
- import ColumnFilterControls from './ColumnFilterControls';
11
- import StatusBar from './StatusBar';
12
- const headerHeight = 52;
13
- const colFilterHeight = 46;
14
- const statusBarHeight = 40;
15
- const useStyles = makeStyles()(theme => ({
16
- header: {
17
- overflow: 'hidden',
18
- whiteSpace: 'nowrap',
19
- boxSizing: 'border-box',
20
- height: headerHeight,
21
- paddingLeft: theme.spacing(1),
22
- },
23
- contentArea: {
24
- overflow: 'auto',
25
- },
26
- resizeHandle: {
27
- height: 3,
28
- position: 'absolute',
29
- bottom: 0,
30
- left: 0,
31
- background: theme.palette.action.disabled,
32
- boxSizing: 'border-box',
33
- borderTop: '1px solid #fafafa',
34
- },
35
- }));
36
- const SpreadsheetView = observer(function ({ model, }) {
37
- const { classes } = useStyles();
38
- const { spreadsheet, filterControls, hideFilterControls, hideVerticalResizeHandle, mode, height, } = model;
39
- const [page, setPage] = useState(0);
40
- const [rowsPerPage, setRowsPerPage] = useState(100);
41
- return (React.createElement("div", null,
42
- mode !== 'display' || hideFilterControls ? null : (React.createElement(React.Fragment, null,
43
- React.createElement(Grid, { container: true, direction: "row", className: classes.header },
44
- React.createElement(Grid, { item: true },
45
- React.createElement(GlobalFilterControls, { model: model }))),
46
- filterControls.columnFilters.map((f, i) => (React.createElement(ColumnFilterControls, { key: `${f.columnNumber}-${i}`, viewModel: model, filterModel: f, columnNumber: f.columnNumber, height: colFilterHeight }))))),
47
- mode === 'import' ? (React.createElement(ImportWizard, { model: model.importWizard })) : (React.createElement("div", { className: classes.contentArea },
48
- React.createElement("div", { style: {
49
- position: 'relative',
50
- display: mode === 'display' ? undefined : 'none',
51
- } }, spreadsheet ? (React.createElement(Spreadsheet, { page: page, rowsPerPage: rowsPerPage, model: spreadsheet, height: height -
52
- headerHeight -
53
- filterControls.columnFilters.length * colFilterHeight -
54
- statusBarHeight })) : null))),
55
- spreadsheet ? (React.createElement(StatusBar, { page: page, setPage: setPage, rowsPerPage: rowsPerPage, setRowsPerPage: setRowsPerPage, mode: mode, spreadsheet: spreadsheet })) : null,
56
- hideVerticalResizeHandle ? null : (React.createElement(ResizeHandle, { onDrag: model.resizeHeight, className: classes.resizeHandle }))));
4
+ import SpreadsheetViewActual from './SpreadsheetViewActual';
5
+ const ImportWizard = lazy(() => import('./ImportWizard'));
6
+ const SpreadsheetContainer = observer(function ({ model, }) {
7
+ var _a;
8
+ return !((_a = model.spreadsheet) === null || _a === void 0 ? void 0 : _a.initialized) ? (_jsx(Suspense, { fallback: null, children: _jsx(ImportWizard, { model: model.importWizard }) })) : (_jsx(SpreadsheetViewActual, { model: model }));
57
9
  });
58
- export default SpreadsheetView;
10
+ export default SpreadsheetContainer;
@@ -0,0 +1,5 @@
1
+ import type { SpreadsheetViewModel } from '../SpreadsheetViewModel';
2
+ declare const SpreadsheetViewActual: ({ model, }: {
3
+ model: SpreadsheetViewModel;
4
+ }) => import("react/jsx-runtime").JSX.Element;
5
+ export default SpreadsheetViewActual;
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { ResizeHandle } from '@jbrowse/core/ui';
4
+ import { observer } from 'mobx-react';
5
+ import { makeStyles } from 'tss-react/mui';
6
+ import SpreadsheetDataGrid from './SpreadsheetDataGrid';
7
+ const useStyles = makeStyles()(theme => ({
8
+ contentArea: {
9
+ overflow: 'auto',
10
+ position: 'relative',
11
+ marginBottom: theme.spacing(1),
12
+ background: theme.palette.background.paper,
13
+ },
14
+ resizeHandle: {
15
+ height: 5,
16
+ boxSizing: 'border-box',
17
+ background: theme.palette.action.disabled,
18
+ borderTop: '1px solid #fafafa',
19
+ },
20
+ }));
21
+ const SpreadsheetViewActual = observer(function ({ model, }) {
22
+ const [initialHeight, setInitialHeight] = useState(0);
23
+ const { classes } = useStyles();
24
+ const { spreadsheet, hideVerticalResizeHandle, height } = model;
25
+ return spreadsheet ? (_jsxs(_Fragment, { children: [_jsx("div", { style: { height }, className: classes.contentArea, children: _jsx(SpreadsheetDataGrid, { model: spreadsheet }) }), hideVerticalResizeHandle ? null : (_jsx(ResizeHandle, { onMouseDown: () => {
26
+ setInitialHeight(height);
27
+ }, onDrag: (_, dist) => model.setHeight(initialHeight - dist), className: classes.resizeHandle }))] })) : (_jsx("div", { children: "Unknown" }));
28
+ });
29
+ export default SpreadsheetViewActual;
@@ -0,0 +1,6 @@
1
+ import type { ImportWizardModel } from '../ImportWizard';
2
+ declare const TrackSelector: ({ model, selectedAssembly, }: {
3
+ model: ImportWizardModel;
4
+ selectedAssembly: string;
5
+ }) => import("react/jsx-runtime").JSX.Element;
6
+ export default TrackSelector;
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { ErrorMessage } from '@jbrowse/core/ui';
4
+ import { coarseStripHTML } from '@jbrowse/core/util';
5
+ import { MenuItem, TextField } from '@mui/material';
6
+ import { observer } from 'mobx-react';
7
+ const TrackSelector = observer(function ({ model, selectedAssembly, }) {
8
+ var _a;
9
+ const filteredTracks = selectedAssembly
10
+ ? model.tracksForAssembly(selectedAssembly)
11
+ : undefined;
12
+ const resetTrack = ((_a = filteredTracks === null || filteredTracks === void 0 ? void 0 : filteredTracks[0]) === null || _a === void 0 ? void 0 : _a.track.trackId) || '';
13
+ const [selectedTrack, setSelectedTrack] = useState(resetTrack);
14
+ useEffect(() => {
15
+ const entry = filteredTracks === null || filteredTracks === void 0 ? void 0 : filteredTracks.find(f => selectedTrack === f.track.trackId);
16
+ if (entry) {
17
+ model.setFileSource(entry.loc);
18
+ model.setFileType(entry.type);
19
+ }
20
+ }, [model, selectedTrack, filteredTracks]);
21
+ return (_jsx("div", { children: (filteredTracks === null || filteredTracks === void 0 ? void 0 : filteredTracks.length) ? (_jsx(TextField, { select: true, label: "Tracks", variant: "outlined", value: selectedTrack, onChange: event => {
22
+ setSelectedTrack(event.target.value);
23
+ }, children: filteredTracks.map(({ track, label }) => (_jsx(MenuItem, { value: track.trackId, children: coarseStripHTML(label) }, track.trackId))) })) : (_jsx(ErrorMessage, { error: `No tracks found for ${selectedAssembly}` })) }));
24
+ });
25
+ export default TrackSelector;
@@ -1,17 +1,26 @@
1
- import { ParseOptions } from './ImportUtils';
2
- import type { Buffer } from 'buffer';
3
- export declare function removeBedHeaders(buffer: Buffer): Buffer;
4
- export declare function parseBedBuffer(buffer: Buffer, options: ParseOptions): Promise<{
5
- rowSet: import("./ImportUtils").RowSet;
6
- columnDisplayOrder: number[];
7
- hasColumnNames: boolean;
8
- columns: import("./ImportUtils").Column[];
9
- assemblyName: string | undefined;
10
- }>;
11
- export declare function parseBedPEBuffer(buffer: Buffer, options: ParseOptions): Promise<{
12
- rowSet: import("./ImportUtils").RowSet;
13
- columnDisplayOrder: number[];
14
- hasColumnNames: boolean;
15
- columns: import("./ImportUtils").Column[];
16
- assemblyName: string | undefined;
17
- }>;
1
+ export declare function parseBedBuffer(buffer: Uint8Array): {
2
+ columns: {
3
+ name: string;
4
+ }[];
5
+ rowSet: {
6
+ rows: {
7
+ cellData: {
8
+ refName: string | undefined;
9
+ start: number;
10
+ end: number;
11
+ name: string | undefined;
12
+ score: string | undefined;
13
+ strand: string | undefined;
14
+ };
15
+ feature: {
16
+ uniqueId: string;
17
+ refName: string | undefined;
18
+ start: number;
19
+ end: number;
20
+ name: string | undefined;
21
+ score: string | undefined;
22
+ strand: number | undefined;
23
+ };
24
+ }[];
25
+ };
26
+ };
@@ -1,139 +1,55 @@
1
- import { parseTsvBuffer } from './ImportUtils';
2
- const browserBytes = 'browser '.split('').map(c => c.charCodeAt(0));
3
- const trackBytes = 'track '.split('').map(c => c.charCodeAt(0));
4
- const commentBytes = '#'.split('').map(c => c.charCodeAt(0));
5
- function bytesAreFoundAt(position, buffer, bytes) {
6
- let i = 0;
7
- for (; i < bytes.length; i += 1) {
8
- if (buffer[position + i] !== bytes[i]) {
9
- return false;
10
- }
11
- }
12
- return true;
13
- }
14
- export function removeBedHeaders(buffer) {
15
- // slice off the first lines of the buffer if it starts with one or more
16
- // header lines
17
- let i = 0;
18
- for (; i < buffer.length; i += 1) {
19
- if (bytesAreFoundAt(i, buffer, browserBytes) ||
20
- bytesAreFoundAt(i, buffer, trackBytes) ||
21
- bytesAreFoundAt(i, buffer, commentBytes)) {
22
- // consume up to the next newline
23
- do {
24
- i += 1;
25
- } while (buffer[i] !== 10);
26
- }
27
- else {
28
- // end of headers, return
29
- break;
30
- }
31
- }
32
- if (i) {
33
- return buffer.subarray(i);
34
- }
35
- return buffer;
36
- }
37
- export async function parseBedBuffer(buffer, options) {
38
- const b = removeBedHeaders(buffer);
39
- const data = await parseTsvBuffer(b);
40
- const bedColumns = [
41
- { name: 'chrom', dataType: { type: 'LocRef' } },
42
- { name: 'chromStart', dataType: { type: 'LocStart' } },
43
- { name: 'chromEnd', dataType: { type: 'LocEnd' } },
44
- { name: 'name', dataType: { type: 'Text' } },
45
- { name: 'score', dataType: { type: 'Number' } },
46
- { name: 'strand', dataType: { type: 'Text' } },
47
- ];
48
- data.columns.forEach((col, colNumber) => {
49
- const bedColumn = bedColumns[colNumber];
50
- if (bedColumn) {
51
- col.name = bedColumn.name;
52
- col.dataType = bedColumn.dataType;
53
- }
54
- });
55
- data.hasColumnNames = true;
56
- data.assemblyName = options.selectedAssemblyName;
57
- data.columnDisplayOrder.push(data.columnDisplayOrder.length);
58
- data.columns.unshift({
59
- name: 'Location',
60
- dataType: { type: 'LocString' },
61
- isDerived: true,
62
- derivationFunctionText: `jexl:{text:row.cells[0].text+':'+row.cells[1].text+'..'+row.cells[2].text,\n
63
- extendedData: {refName: row.cells.ref.text, start: parseInt(row.cells.start.text,10), end: parseInt(row.cells.end.text,10)}}`,
64
- });
65
- return data;
66
- }
67
- export async function parseBedPEBuffer(buffer, options) {
68
- const b = removeBedHeaders(buffer);
69
- const data = await parseTsvBuffer(b);
70
- const bedColumns = [
71
- { name: 'chrom1', dataType: { type: 'Text' }, featureField: ['refName'] },
72
- { name: 'start1', dataType: { type: 'Number' }, featureField: ['start'] },
73
- { name: 'end1', dataType: { type: 'Number' }, featureField: ['end'] },
74
- {
75
- name: 'chrom2',
76
- dataType: { type: 'Text' },
77
- featureField: ['mate', 'refName'],
78
- },
79
- {
80
- name: 'start2',
81
- dataType: { type: 'Number' },
82
- featureField: ['mate', 'start'],
83
- },
84
- {
85
- name: 'end2',
86
- dataType: { type: 'Number' },
87
- featureField: ['mate', 'end'],
88
- },
89
- { name: 'name', dataType: { type: 'Text' }, featureField: ['name'] },
90
- { name: 'score', dataType: { type: 'Number' }, featureField: ['score'] },
91
- { name: 'strand1', dataType: { type: 'Text' }, featureField: ['strand'] },
92
- {
93
- name: 'strand2',
94
- dataType: { type: 'Text' },
95
- featureField: ['mate', 'strand'],
1
+ import { isNumber } from './isNumber';
2
+ import { bufferToLines, parseStrand } from './util';
3
+ export function parseBedBuffer(buffer) {
4
+ var _a, _b;
5
+ const lines = bufferToLines(buffer);
6
+ const rest = lines.filter(line => !(line.startsWith('#') ||
7
+ line.startsWith('browser') ||
8
+ line.startsWith('track')));
9
+ const lastHeaderLine = lines.findLast(line => line.startsWith('#'));
10
+ const coreColumns = ['refName', 'start', 'end'];
11
+ const numExtraColumns = Math.max(0, (((_b = (_a = rest[0]) === null || _a === void 0 ? void 0 : _a.split('\t')) === null || _b === void 0 ? void 0 : _b.length) || 0) - coreColumns.length);
12
+ const extraNames = (lastHeaderLine === null || lastHeaderLine === void 0 ? void 0 : lastHeaderLine.includes('\t'))
13
+ ? lastHeaderLine
14
+ .slice(1)
15
+ .split('\t')
16
+ .slice(coreColumns.length)
17
+ .map(t => t.trim())
18
+ : Array.from({ length: numExtraColumns }, (_v, i) => `field_${i}`);
19
+ const colNames = [...coreColumns, ...extraNames];
20
+ return {
21
+ columns: colNames.map(c => ({ name: c })),
22
+ rowSet: {
23
+ rows: rest.map((line, idx) => {
24
+ const cols = line.split('\t');
25
+ return {
26
+ cellData: {
27
+ refName: cols[0],
28
+ start: +cols[1],
29
+ end: +cols[2],
30
+ name: cols[3],
31
+ score: cols[4],
32
+ strand: cols[5],
33
+ ...Object.fromEntries(extraNames.map((n, idx) => {
34
+ const r = cols[idx + coreColumns.length];
35
+ return [n, isNumber(r) ? +r : r];
36
+ })),
37
+ },
38
+ feature: {
39
+ uniqueId: `bed-${idx}`,
40
+ refName: cols[0],
41
+ start: +cols[1],
42
+ end: +cols[2],
43
+ name: cols[3],
44
+ score: cols[4],
45
+ strand: parseStrand(cols[5]),
46
+ ...Object.fromEntries(extraNames.map((n, idx) => {
47
+ const r = cols[idx + coreColumns.length];
48
+ return [n, isNumber(r) ? +r : r];
49
+ })),
50
+ },
51
+ };
52
+ }),
96
53
  },
97
- ];
98
- data.columns.forEach((col, colNumber) => {
99
- const bedColumn = bedColumns[colNumber];
100
- if (bedColumn) {
101
- col.name = bedColumn.name;
102
- col.dataType = bedColumn.dataType;
103
- }
104
- });
105
- data.hasColumnNames = true;
106
- // decorate each row with a feature object in its extendedData
107
- data.rowSet.rows.forEach((row, rowNumber) => {
108
- const featureData = {};
109
- row.cells.forEach(({ text }, columnNumber) => {
110
- const bedColumn = bedColumns[columnNumber];
111
- const val = bedColumn && bedColumn.dataType.type === 'Number' && text
112
- ? Number.parseFloat(text)
113
- : text;
114
- if (bedColumn) {
115
- // a predefined column
116
- if (bedColumn.featureField.length === 2) {
117
- if (!featureData[bedColumn.featureField[0]]) {
118
- featureData[bedColumn.featureField[0]] = {};
119
- }
120
- featureData[bedColumn.featureField[0]][bedColumn.featureField[1]] =
121
- val;
122
- }
123
- else {
124
- featureData[bedColumn.featureField[0]] = val;
125
- }
126
- }
127
- else {
128
- // some other column
129
- featureData[`column${columnNumber + 1}`] = val;
130
- }
131
- });
132
- featureData.uniqueId = `bedpe-${rowNumber}`;
133
- row.extendedData = {
134
- feature: featureData,
135
- };
136
- });
137
- data.assemblyName = options.selectedAssemblyName;
138
- return data;
54
+ };
139
55
  }
@@ -0,0 +1,36 @@
1
+ export declare function parseBedPEBuffer(buffer: Uint8Array): {
2
+ columns: {
3
+ name: string;
4
+ }[];
5
+ rowSet: {
6
+ rows: {
7
+ cellData: {
8
+ refName: string | undefined;
9
+ start: string | undefined;
10
+ end: string | undefined;
11
+ mateRefName: string | undefined;
12
+ mateStart: string | undefined;
13
+ mateEnd: string | undefined;
14
+ name: string | undefined;
15
+ score: string | number | undefined;
16
+ strand: string | undefined;
17
+ mateStrand: string | undefined;
18
+ };
19
+ feature: {
20
+ uniqueId: string;
21
+ refName: string | undefined;
22
+ start: number;
23
+ end: number;
24
+ strand: number | undefined;
25
+ mate: {
26
+ refName: string | undefined;
27
+ start: number;
28
+ end: number;
29
+ strand: number | undefined;
30
+ };
31
+ name: string | undefined;
32
+ score: string | undefined;
33
+ };
34
+ }[];
35
+ };
36
+ };
@@ -0,0 +1,76 @@
1
+ import { isNumber } from '@mui/x-data-grid/internals';
2
+ import { bufferToLines, parseStrand } from './util';
3
+ export function parseBedPEBuffer(buffer) {
4
+ var _a, _b;
5
+ const lines = bufferToLines(buffer);
6
+ const rest = lines.filter(line => !(line.startsWith('#') ||
7
+ line.startsWith('browser') ||
8
+ line.startsWith('track')));
9
+ const lastHeaderLine = lines.findLast(line => line.startsWith('#'));
10
+ const coreColumns = [
11
+ 'refName',
12
+ 'start',
13
+ 'end',
14
+ 'mateRef',
15
+ 'mateStart',
16
+ 'mateEnd',
17
+ 'name',
18
+ 'score',
19
+ 'strand',
20
+ 'mateStrand',
21
+ ];
22
+ const numExtraColumns = Math.max(0, (((_b = (_a = rest[0]) === null || _a === void 0 ? void 0 : _a.split('\t')) === null || _b === void 0 ? void 0 : _b.length) || 0) - coreColumns.length);
23
+ const extraNames = (lastHeaderLine === null || lastHeaderLine === void 0 ? void 0 : lastHeaderLine.includes('\t'))
24
+ ? lastHeaderLine
25
+ .slice(1)
26
+ .split('\t')
27
+ .slice(coreColumns.length)
28
+ .map(t => t.trim())
29
+ : Array.from({ length: numExtraColumns }, (_v, i) => `field_${i}`);
30
+ const colNames = [...coreColumns, ...extraNames];
31
+ return {
32
+ columns: colNames.map(c => ({ name: c })),
33
+ rowSet: {
34
+ rows: rest.map((line, idx) => {
35
+ const cols = line.split('\t');
36
+ return {
37
+ cellData: {
38
+ refName: cols[0],
39
+ start: cols[1],
40
+ end: cols[2],
41
+ mateRefName: cols[3],
42
+ mateStart: cols[4],
43
+ mateEnd: cols[5],
44
+ name: cols[6],
45
+ score: +cols[7] || cols[7],
46
+ strand: cols[8],
47
+ mateStrand: cols[9],
48
+ ...Object.fromEntries(extraNames.map((n, idx) => {
49
+ const r = cols[idx + coreColumns.length];
50
+ return [n, isNumber(r) ? +r : r];
51
+ })),
52
+ },
53
+ feature: {
54
+ uniqueId: `bedpe-${idx}`,
55
+ refName: cols[0],
56
+ start: +cols[1],
57
+ end: +cols[2],
58
+ strand: parseStrand(cols[8]),
59
+ mate: {
60
+ refName: cols[3],
61
+ start: +cols[4],
62
+ end: +cols[5],
63
+ strand: parseStrand(cols[9]),
64
+ },
65
+ name: cols[6],
66
+ score: cols[7],
67
+ ...Object.fromEntries(extraNames.map((n, idx) => {
68
+ const r = cols[idx + coreColumns.length];
69
+ return [n, isNumber(r) ? +r : r];
70
+ })),
71
+ },
72
+ };
73
+ }),
74
+ },
75
+ };
76
+ }
@@ -1,9 +1,25 @@
1
- import { ParseOptions } from './ImportUtils';
2
- import type { Buffer } from 'buffer';
3
- export declare function parseSTARFusionBuffer(buffer: Buffer, options: ParseOptions): Promise<{
4
- rowSet: import("./ImportUtils").RowSet;
5
- columnDisplayOrder: number[];
6
- hasColumnNames: boolean;
7
- columns: import("./ImportUtils").Column[];
8
- assemblyName: string | undefined;
9
- }>;
1
+ export declare function parseSTARFusionBuffer(buffer: Uint8Array): {
2
+ columns: {
3
+ name: string;
4
+ }[];
5
+ rowSet: {
6
+ rows: {
7
+ cellData: {
8
+ [k: string]: string | number;
9
+ };
10
+ feature: {
11
+ mate: {
12
+ refName: string | undefined;
13
+ start: number;
14
+ end: number;
15
+ strand: number | undefined;
16
+ };
17
+ refName: string | undefined;
18
+ start: number;
19
+ end: number;
20
+ strand: number | undefined;
21
+ uniqueId: string;
22
+ };
23
+ }[];
24
+ };
25
+ };