@jbrowse/plugin-spreadsheet-view 2.17.0 → 2.18.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 (197) 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 +240 -0
  5. package/dist/SpreadsheetView/SpreadsheetModel.d.ts +79 -0
  6. package/dist/SpreadsheetView/SpreadsheetModel.js +133 -0
  7. package/dist/SpreadsheetView/SpreadsheetViewModel.d.ts +299 -0
  8. package/dist/SpreadsheetView/SpreadsheetViewModel.js +94 -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 +8 -0
  14. package/dist/SpreadsheetView/components/FeatureMenu.js +95 -0
  15. package/dist/SpreadsheetView/components/ImportWizard.d.ts +2 -2
  16. package/dist/SpreadsheetView/components/ImportWizard.js +40 -43
  17. package/dist/SpreadsheetView/components/LocationCell.d.ts +8 -0
  18. package/dist/SpreadsheetView/components/LocationCell.js +31 -0
  19. package/dist/SpreadsheetView/components/NumberEditor.d.ts +1 -1
  20. package/dist/SpreadsheetView/components/NumberEditor.js +1 -3
  21. package/dist/SpreadsheetView/components/SpreadsheetDataGrid.d.ts +6 -0
  22. package/dist/SpreadsheetView/components/SpreadsheetDataGrid.js +27 -0
  23. package/dist/SpreadsheetView/components/SpreadsheetView.d.ts +3 -3
  24. package/dist/SpreadsheetView/components/SpreadsheetView.js +23 -44
  25. package/dist/SpreadsheetView/components/TrackSelector.d.ts +7 -0
  26. package/dist/SpreadsheetView/components/TrackSelector.js +49 -0
  27. package/dist/SpreadsheetView/importAdapters/BedImport.d.ts +26 -17
  28. package/dist/SpreadsheetView/importAdapters/BedImport.js +53 -139
  29. package/dist/SpreadsheetView/importAdapters/BedpeImport.d.ts +36 -0
  30. package/dist/SpreadsheetView/importAdapters/BedpeImport.js +79 -0
  31. package/dist/SpreadsheetView/importAdapters/STARFusionImport.d.ts +25 -9
  32. package/dist/SpreadsheetView/importAdapters/STARFusionImport.js +27 -62
  33. package/dist/SpreadsheetView/importAdapters/VcfImport.d.ts +19 -12
  34. package/dist/SpreadsheetView/importAdapters/VcfImport.js +53 -98
  35. package/dist/SpreadsheetView/importAdapters/isNumber.d.ts +1 -0
  36. package/dist/SpreadsheetView/importAdapters/isNumber.js +14 -0
  37. package/dist/SpreadsheetView/importAdapters/util.d.ts +2 -0
  38. package/dist/SpreadsheetView/importAdapters/util.js +22 -0
  39. package/dist/SpreadsheetView/index.d.ts +2 -2
  40. package/dist/SpreadsheetView/index.js +2 -2
  41. package/dist/SpreadsheetView/util.d.ts +7 -0
  42. package/dist/SpreadsheetView/util.js +13 -0
  43. package/dist/index.d.ts +1 -1
  44. package/dist/index.js +1 -3
  45. package/esm/LaunchSpreadsheetView/index.d.ts +1 -1
  46. package/esm/LaunchSpreadsheetView/index.js +1 -3
  47. package/esm/SpreadsheetView/ImportWizard.d.ts +51 -0
  48. package/esm/SpreadsheetView/ImportWizard.js +214 -0
  49. package/esm/SpreadsheetView/SpreadsheetModel.d.ts +79 -0
  50. package/esm/SpreadsheetView/SpreadsheetModel.js +127 -0
  51. package/esm/SpreadsheetView/SpreadsheetViewModel.d.ts +299 -0
  52. package/esm/SpreadsheetView/SpreadsheetViewModel.js +88 -0
  53. package/esm/SpreadsheetView/components/BreakendMultiLevelOptionDialog.d.ts +1 -0
  54. package/esm/SpreadsheetView/components/BreakendMultiLevelOptionDialog.js +1 -0
  55. package/esm/SpreadsheetView/components/BreakendSingleLevelOptionDialog.d.ts +1 -0
  56. package/esm/SpreadsheetView/components/BreakendSingleLevelOptionDialog.js +1 -0
  57. package/esm/SpreadsheetView/components/FeatureMenu.d.ts +8 -0
  58. package/esm/SpreadsheetView/components/FeatureMenu.js +66 -0
  59. package/esm/SpreadsheetView/components/ImportWizard.d.ts +2 -2
  60. package/esm/SpreadsheetView/components/ImportWizard.js +41 -44
  61. package/esm/SpreadsheetView/components/LocationCell.d.ts +8 -0
  62. package/esm/SpreadsheetView/components/LocationCell.js +25 -0
  63. package/esm/SpreadsheetView/components/NumberEditor.d.ts +1 -1
  64. package/esm/SpreadsheetView/components/NumberEditor.js +2 -4
  65. package/esm/SpreadsheetView/components/SpreadsheetDataGrid.d.ts +6 -0
  66. package/esm/SpreadsheetView/components/SpreadsheetDataGrid.js +22 -0
  67. package/esm/SpreadsheetView/components/SpreadsheetView.d.ts +3 -3
  68. package/esm/SpreadsheetView/components/SpreadsheetView.js +24 -45
  69. package/esm/SpreadsheetView/components/TrackSelector.d.ts +7 -0
  70. package/esm/SpreadsheetView/components/TrackSelector.js +24 -0
  71. package/esm/SpreadsheetView/importAdapters/BedImport.d.ts +26 -17
  72. package/esm/SpreadsheetView/importAdapters/BedImport.js +53 -137
  73. package/esm/SpreadsheetView/importAdapters/BedpeImport.d.ts +36 -0
  74. package/esm/SpreadsheetView/importAdapters/BedpeImport.js +76 -0
  75. package/esm/SpreadsheetView/importAdapters/STARFusionImport.d.ts +25 -9
  76. package/esm/SpreadsheetView/importAdapters/STARFusionImport.js +27 -62
  77. package/esm/SpreadsheetView/importAdapters/VcfImport.d.ts +19 -12
  78. package/esm/SpreadsheetView/importAdapters/VcfImport.js +53 -97
  79. package/esm/SpreadsheetView/importAdapters/isNumber.d.ts +1 -0
  80. package/esm/SpreadsheetView/importAdapters/isNumber.js +11 -0
  81. package/esm/SpreadsheetView/importAdapters/util.d.ts +2 -0
  82. package/esm/SpreadsheetView/importAdapters/util.js +18 -0
  83. package/esm/SpreadsheetView/index.d.ts +2 -2
  84. package/esm/SpreadsheetView/index.js +2 -2
  85. package/esm/SpreadsheetView/util.d.ts +7 -0
  86. package/esm/SpreadsheetView/util.js +10 -0
  87. package/esm/index.d.ts +1 -1
  88. package/esm/index.js +1 -3
  89. package/package.json +6 -6
  90. package/dist/SpreadsheetView/components/CellData.d.ts +0 -9
  91. package/dist/SpreadsheetView/components/CellData.js +0 -14
  92. package/dist/SpreadsheetView/components/ColumnFilterControls.d.ts +0 -3
  93. package/dist/SpreadsheetView/components/ColumnFilterControls.js +0 -58
  94. package/dist/SpreadsheetView/components/ColumnMenu.d.ts +0 -16
  95. package/dist/SpreadsheetView/components/ColumnMenu.js +0 -140
  96. package/dist/SpreadsheetView/components/DataRow.d.ts +0 -12
  97. package/dist/SpreadsheetView/components/DataRow.js +0 -81
  98. package/dist/SpreadsheetView/components/DataTable.d.ts +0 -10
  99. package/dist/SpreadsheetView/components/DataTable.js +0 -42
  100. package/dist/SpreadsheetView/components/DataTableHeader.d.ts +0 -6
  101. package/dist/SpreadsheetView/components/DataTableHeader.js +0 -104
  102. package/dist/SpreadsheetView/components/GlobalFilterControls.d.ts +0 -5
  103. package/dist/SpreadsheetView/components/GlobalFilterControls.js +0 -68
  104. package/dist/SpreadsheetView/components/RowCountMessage.d.ts +0 -6
  105. package/dist/SpreadsheetView/components/RowCountMessage.js +0 -33
  106. package/dist/SpreadsheetView/components/RowMenu.d.ts +0 -9
  107. package/dist/SpreadsheetView/components/RowMenu.js +0 -39
  108. package/dist/SpreadsheetView/components/SortIndicator.d.ts +0 -6
  109. package/dist/SpreadsheetView/components/SortIndicator.js +0 -27
  110. package/dist/SpreadsheetView/components/Spreadsheet.d.ts +0 -11
  111. package/dist/SpreadsheetView/components/Spreadsheet.js +0 -25
  112. package/dist/SpreadsheetView/components/StatusBar.d.ts +0 -11
  113. package/dist/SpreadsheetView/components/StatusBar.js +0 -44
  114. package/dist/SpreadsheetView/importAdapters/ImportUtils.d.ts +0 -42
  115. package/dist/SpreadsheetView/importAdapters/ImportUtils.js +0 -123
  116. package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.d.ts +0 -12
  117. package/dist/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +0 -20
  118. package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.d.ts +0 -12
  119. package/dist/SpreadsheetView/models/ColumnDataTypes/LocRef.js +0 -20
  120. package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.d.ts +0 -12
  121. package/dist/SpreadsheetView/models/ColumnDataTypes/LocStart.js +0 -20
  122. package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.d.ts +0 -13
  123. package/dist/SpreadsheetView/models/ColumnDataTypes/LocString.js +0 -183
  124. package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.d.ts +0 -19
  125. package/dist/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js +0 -23
  126. package/dist/SpreadsheetView/models/ColumnDataTypes/Number.d.ts +0 -30
  127. package/dist/SpreadsheetView/models/ColumnDataTypes/Number.js +0 -126
  128. package/dist/SpreadsheetView/models/ColumnDataTypes/Text.d.ts +0 -28
  129. package/dist/SpreadsheetView/models/ColumnDataTypes/Text.js +0 -129
  130. package/dist/SpreadsheetView/models/ColumnDataTypes/index.d.ts +0 -71
  131. package/dist/SpreadsheetView/models/ColumnDataTypes/index.js +0 -37
  132. package/dist/SpreadsheetView/models/FilterControls.d.ts +0 -26
  133. package/dist/SpreadsheetView/models/FilterControls.js +0 -85
  134. package/dist/SpreadsheetView/models/ImportWizard.d.ts +0 -31
  135. package/dist/SpreadsheetView/models/ImportWizard.js +0 -186
  136. package/dist/SpreadsheetView/models/Row.d.ts +0 -17
  137. package/dist/SpreadsheetView/models/Row.js +0 -43
  138. package/dist/SpreadsheetView/models/Spreadsheet.d.ts +0 -260
  139. package/dist/SpreadsheetView/models/Spreadsheet.js +0 -174
  140. package/dist/SpreadsheetView/models/SpreadsheetView.d.ts +0 -482
  141. package/dist/SpreadsheetView/models/SpreadsheetView.js +0 -199
  142. package/dist/SpreadsheetView/models/StaticRowSet.d.ts +0 -163
  143. package/dist/SpreadsheetView/models/StaticRowSet.js +0 -56
  144. package/esm/SpreadsheetView/components/CellData.d.ts +0 -9
  145. package/esm/SpreadsheetView/components/CellData.js +0 -9
  146. package/esm/SpreadsheetView/components/ColumnFilterControls.d.ts +0 -3
  147. package/esm/SpreadsheetView/components/ColumnFilterControls.js +0 -53
  148. package/esm/SpreadsheetView/components/ColumnMenu.d.ts +0 -16
  149. package/esm/SpreadsheetView/components/ColumnMenu.js +0 -135
  150. package/esm/SpreadsheetView/components/DataRow.d.ts +0 -12
  151. package/esm/SpreadsheetView/components/DataRow.js +0 -76
  152. package/esm/SpreadsheetView/components/DataTable.d.ts +0 -10
  153. package/esm/SpreadsheetView/components/DataTable.js +0 -37
  154. package/esm/SpreadsheetView/components/DataTableHeader.d.ts +0 -6
  155. package/esm/SpreadsheetView/components/DataTableHeader.js +0 -76
  156. package/esm/SpreadsheetView/components/GlobalFilterControls.d.ts +0 -5
  157. package/esm/SpreadsheetView/components/GlobalFilterControls.js +0 -40
  158. package/esm/SpreadsheetView/components/RowCountMessage.d.ts +0 -6
  159. package/esm/SpreadsheetView/components/RowCountMessage.js +0 -28
  160. package/esm/SpreadsheetView/components/RowMenu.d.ts +0 -9
  161. package/esm/SpreadsheetView/components/RowMenu.js +0 -34
  162. package/esm/SpreadsheetView/components/SortIndicator.d.ts +0 -6
  163. package/esm/SpreadsheetView/components/SortIndicator.js +0 -21
  164. package/esm/SpreadsheetView/components/Spreadsheet.d.ts +0 -11
  165. package/esm/SpreadsheetView/components/Spreadsheet.js +0 -20
  166. package/esm/SpreadsheetView/components/StatusBar.d.ts +0 -11
  167. package/esm/SpreadsheetView/components/StatusBar.js +0 -39
  168. package/esm/SpreadsheetView/importAdapters/ImportUtils.d.ts +0 -42
  169. package/esm/SpreadsheetView/importAdapters/ImportUtils.js +0 -95
  170. package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.d.ts +0 -12
  171. package/esm/SpreadsheetView/models/ColumnDataTypes/LocEnd.js +0 -15
  172. package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.d.ts +0 -12
  173. package/esm/SpreadsheetView/models/ColumnDataTypes/LocRef.js +0 -15
  174. package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.d.ts +0 -12
  175. package/esm/SpreadsheetView/models/ColumnDataTypes/LocStart.js +0 -15
  176. package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.d.ts +0 -13
  177. package/esm/SpreadsheetView/models/ColumnDataTypes/LocString.js +0 -178
  178. package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.d.ts +0 -19
  179. package/esm/SpreadsheetView/models/ColumnDataTypes/MakeSpreadsheetColumnType.js +0 -20
  180. package/esm/SpreadsheetView/models/ColumnDataTypes/Number.d.ts +0 -30
  181. package/esm/SpreadsheetView/models/ColumnDataTypes/Number.js +0 -119
  182. package/esm/SpreadsheetView/models/ColumnDataTypes/Text.d.ts +0 -28
  183. package/esm/SpreadsheetView/models/ColumnDataTypes/Text.js +0 -122
  184. package/esm/SpreadsheetView/models/ColumnDataTypes/index.d.ts +0 -71
  185. package/esm/SpreadsheetView/models/ColumnDataTypes/index.js +0 -29
  186. package/esm/SpreadsheetView/models/FilterControls.d.ts +0 -26
  187. package/esm/SpreadsheetView/models/FilterControls.js +0 -83
  188. package/esm/SpreadsheetView/models/ImportWizard.d.ts +0 -31
  189. package/esm/SpreadsheetView/models/ImportWizard.js +0 -161
  190. package/esm/SpreadsheetView/models/Row.d.ts +0 -17
  191. package/esm/SpreadsheetView/models/Row.js +0 -41
  192. package/esm/SpreadsheetView/models/Spreadsheet.d.ts +0 -260
  193. package/esm/SpreadsheetView/models/Spreadsheet.js +0 -169
  194. package/esm/SpreadsheetView/models/SpreadsheetView.d.ts +0 -482
  195. package/esm/SpreadsheetView/models/SpreadsheetView.js +0 -194
  196. package/esm/SpreadsheetView/models/StaticRowSet.d.ts +0 -163
  197. package/esm/SpreadsheetView/models/StaticRowSet.js +0 -51
@@ -1,76 +0,0 @@
1
- import React from 'react';
2
- import { Checkbox, IconButton, FormControlLabel } from '@mui/material';
3
- import { observer } from 'mobx-react';
4
- import { indigo } from '@mui/material/colors';
5
- import { makeStyles } from 'tss-react/mui';
6
- // icons
7
- import ArrowDropDown from '@mui/icons-material/ArrowDropDown';
8
- import CellData from './CellData';
9
- const useStyles = makeStyles()(theme => ({
10
- rowNumCell: {
11
- textAlign: 'left',
12
- border: `1px solid ${theme.palette.action.disabledBackground}`,
13
- position: 'relative',
14
- padding: '0 2px 0 0',
15
- whiteSpace: 'nowrap',
16
- userSelect: 'none',
17
- },
18
- rowNumber: {
19
- fontWeight: 'normal',
20
- display: 'inline-block',
21
- flex: 'none',
22
- paddingRight: '20px',
23
- margin: 0,
24
- whiteSpace: 'nowrap',
25
- },
26
- rowMenuButton: {
27
- padding: 0,
28
- margin: 0,
29
- position: 'absolute',
30
- right: 0,
31
- display: 'inline-block',
32
- whiteSpace: 'nowrap',
33
- flex: 'none',
34
- },
35
- rowMenuButtonIcon: {},
36
- rowSelector: {
37
- position: 'relative',
38
- top: '-2px',
39
- margin: 0,
40
- padding: '0 0.2rem',
41
- },
42
- dataRowSelected: {
43
- background: indigo[100],
44
- '& th': {
45
- background: indigo[100],
46
- },
47
- },
48
- }));
49
- const DataRow = observer(function ({ rowModel, rowNumber, spreadsheetModel, }) {
50
- const { classes } = useStyles();
51
- const { hideRowSelection, columnDisplayOrder } = spreadsheetModel;
52
- let rowClass = '';
53
- if (rowModel.isSelected) {
54
- rowClass += classes.dataRowSelected;
55
- }
56
- function labelClick(evt) {
57
- rowModel.toggleSelect();
58
- evt.stopPropagation();
59
- evt.preventDefault();
60
- }
61
- return (React.createElement("tr", { className: rowClass },
62
- React.createElement("td", { className: classes.rowNumCell, onClick: labelClick },
63
- hideRowSelection ? (React.createElement(FormControlLabel, { className: classes.rowNumber, control: React.createElement(Checkbox, { className: classes.rowSelector, checked: rowModel.isSelected, onClick: labelClick }), label: rowModel.id })) : null,
64
- React.createElement(IconButton, { className: classes.rowMenuButton, onClick: event => {
65
- spreadsheetModel.setRowMenuPosition({
66
- anchorEl: event.currentTarget,
67
- rowNumber,
68
- });
69
- event.preventDefault();
70
- event.stopPropagation();
71
- } },
72
- React.createElement(ArrowDropDown, { className: classes.rowMenuButtonIcon }))),
73
- columnDisplayOrder.map(colNumber => (React.createElement("td", { key: colNumber },
74
- React.createElement(CellData, { cell: rowModel.cellsWithDerived[colNumber], spreadsheetModel: spreadsheetModel, columnNumber: colNumber }))))));
75
- });
76
- export default DataRow;
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- import { Instance } from 'mobx-state-tree';
3
- import type SpreadsheetStateModel from '../models/Spreadsheet';
4
- type SpreadsheetModel = Instance<typeof SpreadsheetStateModel>;
5
- declare const DataTable: ({ model, page, rowsPerPage, }: {
6
- model: SpreadsheetModel;
7
- page: number;
8
- rowsPerPage: number;
9
- }) => React.JSX.Element;
10
- export default DataTable;
@@ -1,37 +0,0 @@
1
- import React from 'react';
2
- import { observer } from 'mobx-react';
3
- import { getParent } from 'mobx-state-tree';
4
- import { makeStyles } from 'tss-react/mui';
5
- import RowMenu from './RowMenu';
6
- import DataRow from './DataRow';
7
- import DataTableHeader from './DataTableHeader';
8
- const useStyles = makeStyles()(theme => ({
9
- dataTable: {
10
- borderCollapse: 'collapse',
11
- '& td': {
12
- border: `1px solid ${theme.palette.action.disabledBackground}`,
13
- padding: '0.2rem',
14
- maxWidth: '50em',
15
- overflow: 'hidden',
16
- textOverflow: 'ellipsis',
17
- },
18
- },
19
- emptyMessage: {
20
- captionSide: 'bottom',
21
- },
22
- }));
23
- const DataTableBody = observer(function ({ rows, spreadsheetModel, page, rowsPerPage, }) {
24
- return (React.createElement("tbody", null, rows.slice(rowsPerPage * page, rowsPerPage * (page + 1)).map(row => (React.createElement(DataRow, { key: row.id, rowNumber: row.id, spreadsheetModel: spreadsheetModel, rowModel: row })))));
25
- });
26
- const DataTable = observer(function ({ model, page, rowsPerPage, }) {
27
- const { rowSet } = model;
28
- const { classes } = useStyles();
29
- const rows = rowSet.sortedFilteredRows;
30
- return (React.createElement(React.Fragment, null,
31
- React.createElement(RowMenu, { viewModel: getParent(model), spreadsheetModel: model }),
32
- React.createElement("table", { className: classes.dataTable },
33
- React.createElement(DataTableHeader, { model: model }),
34
- React.createElement(DataTableBody, { rows: rows, spreadsheetModel: model, page: page, rowsPerPage: rowsPerPage }),
35
- !rows.length ? (React.createElement("caption", { className: classes.emptyMessage }, rowSet.count ? 'no rows match criteria' : 'no rows present')) : null)));
36
- });
37
- export default DataTable;
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- import { SpreadsheetModel } from '../models/Spreadsheet';
3
- declare const DataTableHeader: ({ model, }: {
4
- model: SpreadsheetModel;
5
- }) => React.JSX.Element;
6
- export default DataTableHeader;
@@ -1,76 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { IconButton, Tooltip } from '@mui/material';
3
- import { observer } from 'mobx-react';
4
- import { getParent } from 'mobx-state-tree';
5
- import { makeStyles } from 'tss-react/mui';
6
- // icons
7
- import CropFreeIcon from '@mui/icons-material/CropFree';
8
- import ArrowDropDown from '@mui/icons-material/ArrowDropDown';
9
- import ColumnMenu from './ColumnMenu';
10
- import SortIndicator from './SortIndicator';
11
- import { numToColName } from './util';
12
- const useStyles = makeStyles()(theme => ({
13
- columnHead: {
14
- fontWeight: 'normal',
15
- background: theme.palette.mode === 'dark' ? '#333' : '#eee',
16
- position: 'sticky',
17
- top: 0,
18
- zIndex: 2,
19
- whiteSpace: 'nowrap',
20
- },
21
- columnButtonContainer: {
22
- display: 'none',
23
- position: 'absolute',
24
- right: 0,
25
- top: 0,
26
- background: theme.palette.background.paper,
27
- height: '100%',
28
- },
29
- topLeftCorner: {
30
- background: theme.palette.mode === 'dark' ? '#333' : '#eee',
31
- zIndex: 2,
32
- position: 'sticky',
33
- top: 0,
34
- minWidth: theme.spacing(2),
35
- textAlign: 'left',
36
- },
37
- }));
38
- const DataTableHeader = observer(function ({ model, }) {
39
- const { classes } = useStyles();
40
- const { columnDisplayOrder, columns, hasColumnNames, rowSet } = model;
41
- const [currentColumnMenu, setColumnMenu] = useState();
42
- const [currentHoveredColumn, setHoveredColumn] = useState();
43
- return (React.createElement(React.Fragment, null,
44
- React.createElement("thead", null,
45
- React.createElement("tr", null,
46
- React.createElement("th", { className: classes.topLeftCorner },
47
- React.createElement(Tooltip, { title: "Unselect all", placement: "right" },
48
- React.createElement("span", null,
49
- React.createElement(IconButton, { onClick: () => {
50
- model.unselectAll();
51
- }, disabled: !rowSet.selectedCount },
52
- React.createElement(CropFreeIcon, null))))),
53
- columnDisplayOrder.map(colNumber => (React.createElement("th", { className: classes.columnHead, key: colNumber, onMouseOver: () => {
54
- setHoveredColumn(colNumber);
55
- }, onMouseOut: () => {
56
- setHoveredColumn(undefined);
57
- } },
58
- React.createElement(SortIndicator, { model: model, columnNumber: colNumber }),
59
- (hasColumnNames && columns[colNumber].name) ||
60
- numToColName(colNumber),
61
- React.createElement("div", { className: classes.columnButtonContainer, style: {
62
- display: currentHoveredColumn === colNumber ||
63
- (currentColumnMenu === null || currentColumnMenu === void 0 ? void 0 : currentColumnMenu.colNumber) === colNumber
64
- ? 'block'
65
- : 'none',
66
- } },
67
- React.createElement(IconButton, { onClick: evt => {
68
- setColumnMenu({
69
- colNumber,
70
- anchorEl: evt.currentTarget,
71
- });
72
- } },
73
- React.createElement(ArrowDropDown, null)))))))),
74
- React.createElement(ColumnMenu, { viewModel: getParent(model), spreadsheetModel: model, currentColumnMenu: currentColumnMenu, setColumnMenu: setColumnMenu })));
75
- });
76
- export default DataTableHeader;
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- declare const GlobalFilterControls: ({ model }: {
3
- model: any;
4
- }) => React.JSX.Element;
5
- export default GlobalFilterControls;
@@ -1,40 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { IconButton, InputAdornment, TextField } from '@mui/material';
3
- import ClearIcon from '@mui/icons-material/Clear';
4
- import FilterIcon from '@mui/icons-material/FilterList';
5
- import { observer } from 'mobx-react';
6
- import { makeStyles } from 'tss-react/mui';
7
- import { useDebounce } from '@jbrowse/core/util';
8
- const useStyles = makeStyles()({
9
- textFilterControlEndAdornment: {
10
- marginRight: '-18px',
11
- },
12
- });
13
- const TextFilter = observer(function ({ textFilter, }) {
14
- const { classes } = useStyles();
15
- // this paragraph is silliness to debounce the text filter input
16
- const [textFilterValue, setTextFilterValue] = useState(textFilter.stringToFind);
17
- const debouncedTextFilter = useDebounce(textFilterValue, 500);
18
- useEffect(() => {
19
- textFilter.setString(debouncedTextFilter);
20
- }, [debouncedTextFilter, textFilter]);
21
- return (React.createElement("div", null,
22
- React.createElement(TextField, { label: "text filter", value: textFilterValue, onChange: evt => {
23
- setTextFilterValue(evt.target.value);
24
- }, variant: "outlined", slotProps: {
25
- input: {
26
- startAdornment: (React.createElement(InputAdornment, { position: "start" },
27
- React.createElement(FilterIcon, null))),
28
- endAdornment: (React.createElement(InputAdornment, { className: classes.textFilterControlEndAdornment, position: "end" },
29
- React.createElement(IconButton, { "aria-label": "clear filter", onClick: () => {
30
- setTextFilterValue('');
31
- } },
32
- React.createElement(ClearIcon, null)))),
33
- },
34
- } })));
35
- });
36
- const GlobalFilterControls = observer(({ model }) => {
37
- const textFilter = model.filterControls.rowFullText;
38
- return React.createElement(TextFilter, { textFilter: textFilter });
39
- });
40
- export default GlobalFilterControls;
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- import type { SpreadsheetModel } from '../models/Spreadsheet';
3
- declare const RowCountMessage: ({ spreadsheet, }: {
4
- spreadsheet: SpreadsheetModel;
5
- }) => React.JSX.Element | null;
6
- export default RowCountMessage;
@@ -1,28 +0,0 @@
1
- import React from 'react';
2
- import { observer } from 'mobx-react';
3
- const RowCountMessage = observer(function ({ spreadsheet, }) {
4
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
5
- if (spreadsheet.rowSet.isLoaded) {
6
- const { passingFiltersCount, count, selectedCount, selectedAndPassingFiltersCount, } = spreadsheet.rowSet;
7
- let rowMessage;
8
- if (passingFiltersCount !== count) {
9
- rowMessage = `${spreadsheet.rowSet.passingFiltersCount} rows of ${spreadsheet.rowSet.count} total`;
10
- if (selectedCount) {
11
- rowMessage += `, ${selectedAndPassingFiltersCount} selected`;
12
- const selectedAndNotPassingFiltersCount = selectedCount - selectedAndPassingFiltersCount;
13
- if (selectedAndNotPassingFiltersCount) {
14
- rowMessage += ` (${selectedAndNotPassingFiltersCount} selected rows do not pass filters)`;
15
- }
16
- }
17
- }
18
- else {
19
- rowMessage = `${spreadsheet.rowSet.count} rows`;
20
- if (selectedCount) {
21
- rowMessage += `, ${selectedCount} selected`;
22
- }
23
- }
24
- return React.createElement(React.Fragment, null, rowMessage);
25
- }
26
- return null;
27
- });
28
- export default RowCountMessage;
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import { Instance } from 'mobx-state-tree';
3
- import type SpreadsheetModel from '../models/Spreadsheet';
4
- import type ViewModel from '../models/SpreadsheetView';
5
- declare const RowMenu: ({ viewModel, spreadsheetModel, }: {
6
- viewModel: Instance<typeof ViewModel>;
7
- spreadsheetModel: Instance<typeof SpreadsheetModel>;
8
- }) => React.JSX.Element | null;
9
- export default RowMenu;
@@ -1,34 +0,0 @@
1
- import React from 'react';
2
- import { observer } from 'mobx-react';
3
- import { Menu } from '@jbrowse/core/ui';
4
- const RowMenu = observer(function ({ viewModel, spreadsheetModel, }) {
5
- var _a;
6
- const currentRowMenu = spreadsheetModel.rowMenuPosition;
7
- const { setRowMenuPosition } = spreadsheetModel;
8
- const rowMenuClose = () => {
9
- setRowMenuPosition(null);
10
- };
11
- const rowNumber = (_a = spreadsheetModel.rowMenuPosition) === null || _a === void 0 ? void 0 : _a.rowNumber;
12
- if (rowNumber === undefined) {
13
- return null;
14
- }
15
- const row = spreadsheetModel.rowSet.rows[+rowNumber - 1];
16
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
17
- function handleMenuItemClick(_event, callback) {
18
- callback(viewModel, spreadsheetModel, rowNumber, row);
19
- rowMenuClose();
20
- }
21
- // got through and evaluate all the `disabled` callbacks of the menu items
22
- const menuItems = viewModel.rowMenuItems.map(item => {
23
- if (typeof item.disabled === 'function') {
24
- const disabled = item.disabled(viewModel, spreadsheetModel, +rowNumber, row);
25
- return { ...item, disabled };
26
- }
27
- return item;
28
- });
29
- return (React.createElement(Menu, { anchorEl: currentRowMenu === null || currentRowMenu === void 0 ? void 0 : currentRowMenu.anchorEl, open: Boolean(currentRowMenu), onMenuItemClick: handleMenuItemClick, onClose: rowMenuClose, menuItems: menuItems, anchorOrigin: {
30
- vertical: 'bottom',
31
- horizontal: 'right',
32
- } }));
33
- });
34
- export default RowMenu;
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- import { SpreadsheetModel } from '../models/Spreadsheet';
3
- export default function SortIndicator({ model, columnNumber, }: {
4
- model: SpreadsheetModel;
5
- columnNumber: number;
6
- }): React.JSX.Element | null;
@@ -1,21 +0,0 @@
1
- import React from 'react';
2
- import { makeStyles } from 'tss-react/mui';
3
- // icons
4
- import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';
5
- import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
6
- const useStyles = makeStyles()({
7
- sortIndicator: {
8
- position: 'relative',
9
- top: '0.2rem',
10
- fontSize: '1rem',
11
- },
12
- });
13
- export default function SortIndicator({ model, columnNumber, }) {
14
- const { classes } = useStyles();
15
- const sortSpec = model.sortColumns.find(c => c.columnNumber === columnNumber);
16
- if (sortSpec) {
17
- const { descending } = sortSpec;
18
- return descending ? (React.createElement(KeyboardArrowUpIcon, { className: classes.sortIndicator })) : (React.createElement(KeyboardArrowDownIcon, { className: classes.sortIndicator }));
19
- }
20
- return null;
21
- }
@@ -1,11 +0,0 @@
1
- import React from 'react';
2
- import { Instance } from 'mobx-state-tree';
3
- import type SpreadsheetStateModel from '../models/Spreadsheet';
4
- type SpreadsheetModel = Instance<typeof SpreadsheetStateModel>;
5
- declare const Spreadsheet: ({ model, height, page, rowsPerPage, }: {
6
- model: SpreadsheetModel;
7
- height: number;
8
- page: number;
9
- rowsPerPage: number;
10
- }) => React.JSX.Element;
11
- export default Spreadsheet;
@@ -1,20 +0,0 @@
1
- import React from 'react';
2
- import { observer } from 'mobx-react';
3
- import { makeStyles } from 'tss-react/mui';
4
- import { LoadingEllipses } from '@jbrowse/core/ui';
5
- import DataTable from './DataTable';
6
- const useStyles = makeStyles()(theme => ({
7
- root: {
8
- position: 'relative',
9
- marginBottom: theme.spacing(1),
10
- background: theme.palette.background.paper,
11
- overflow: 'auto',
12
- },
13
- }));
14
- const Spreadsheet = observer(function ({ model, height, page, rowsPerPage, }) {
15
- const { classes } = useStyles();
16
- return (React.createElement("div", { className: classes.root, style: { height } },
17
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
18
- model.rowSet.isLoaded && model.initialized ? (React.createElement(DataTable, { model: model, page: page, rowsPerPage: rowsPerPage })) : (React.createElement(LoadingEllipses, { variant: "h6" }))));
19
- });
20
- export default Spreadsheet;
@@ -1,11 +0,0 @@
1
- import React from 'react';
2
- import { SpreadsheetModel } from '../models/Spreadsheet';
3
- declare const StatusBar: ({ page, rowsPerPage, setPage, setRowsPerPage, spreadsheet, mode, }: {
4
- page: number;
5
- mode: string;
6
- spreadsheet: SpreadsheetModel;
7
- rowsPerPage: number;
8
- setPage: (arg: number) => void;
9
- setRowsPerPage: (arg: number) => void;
10
- }) => React.JSX.Element;
11
- export default StatusBar;
@@ -1,39 +0,0 @@
1
- import React from 'react';
2
- import { FormGroup, TablePagination } from '@mui/material';
3
- import { makeStyles } from 'tss-react/mui';
4
- // locals
5
- import RowCountMessage from './RowCountMessage';
6
- import { observer } from 'mobx-react';
7
- const statusBarHeight = 40;
8
- const useStyles = makeStyles()(theme => ({
9
- statusBar: {
10
- height: statusBarHeight,
11
- boxSizing: 'border-box',
12
- borderTop: '1px outset #b1b1b1',
13
- paddingLeft: theme.spacing(1),
14
- },
15
- verticallyCenter: {
16
- display: 'flex',
17
- justifyContent: 'center',
18
- flexDirection: 'column',
19
- },
20
- spacer: {
21
- flexGrow: 1,
22
- },
23
- }));
24
- const StatusBar = observer(function StatusBar({ page, rowsPerPage, setPage, setRowsPerPage, spreadsheet, mode, }) {
25
- const { classes } = useStyles();
26
- return (React.createElement("div", { className: classes.statusBar, style: { display: mode === 'display' ? undefined : 'none' } },
27
- React.createElement(FormGroup, { row: true },
28
- React.createElement("div", { className: classes.verticallyCenter },
29
- React.createElement(RowCountMessage, { spreadsheet: spreadsheet })),
30
- React.createElement("div", { className: classes.spacer }),
31
- React.createElement(TablePagination, { rowsPerPageOptions: [10, 25, 100, 1000], count: spreadsheet.rowSet.count, component: "div", rowsPerPage: rowsPerPage, page: page, onPageChange: (_, newPage) => {
32
- setPage(newPage);
33
- }, onRowsPerPageChange: event => {
34
- setRowsPerPage(+event.target.value);
35
- setPage(0);
36
- } }),
37
- React.createElement("div", { className: classes.spacer }))));
38
- });
39
- export default StatusBar;
@@ -1,42 +0,0 @@
1
- import type { Buffer } from 'buffer';
2
- export declare function bufferToString(buffer: Buffer): string;
3
- export interface Row {
4
- id: string;
5
- extendedData?: any;
6
- cells: {
7
- text: string;
8
- extendedData?: any;
9
- }[];
10
- }
11
- export interface RowSet {
12
- isLoaded: boolean;
13
- rows: Row[];
14
- }
15
- export interface ParseOptions {
16
- hasColumnNameLine?: boolean;
17
- columnNameLineNumber?: number;
18
- selectedAssemblyName?: string;
19
- isValidRefName?: (refName: string, assemblyName?: string) => boolean;
20
- }
21
- export interface Column {
22
- name: string;
23
- dataType: {
24
- type: string;
25
- };
26
- isDerived?: boolean;
27
- derivationFunctionText?: string;
28
- }
29
- export declare function parseCsvBuffer(buffer: Buffer, options?: ParseOptions): Promise<{
30
- rowSet: RowSet;
31
- columnDisplayOrder: number[];
32
- hasColumnNames: boolean;
33
- columns: Column[];
34
- assemblyName: string | undefined;
35
- }>;
36
- export declare function parseTsvBuffer(buffer: Buffer, options?: ParseOptions): Promise<{
37
- rowSet: RowSet;
38
- columnDisplayOrder: number[];
39
- hasColumnNames: boolean;
40
- columns: Column[];
41
- assemblyName: string | undefined;
42
- }>;
@@ -1,95 +0,0 @@
1
- import { parseLocString } from '@jbrowse/core/util';
2
- export function bufferToString(buffer) {
3
- return new TextDecoder('utf8', { fatal: true }).decode(buffer);
4
- }
5
- async function parseWith(buffer, options = {}) {
6
- const csv = await import('csvtojson').then(module => module.default);
7
- return csv({ noheader: true, output: 'csv', ...options }).fromString(bufferToString(buffer));
8
- }
9
- function guessColumnType(rowSet, columnNumber, isValidRefName) {
10
- const text = rowSet.rows[0].cells[columnNumber].text || '';
11
- let guessedType = 'Text';
12
- let parsedLoc;
13
- try {
14
- parsedLoc = parseLocString(text, isValidRefName);
15
- }
16
- catch (error) {
17
- //
18
- }
19
- if ((parsedLoc === null || parsedLoc === void 0 ? void 0 : parsedLoc.refName) && typeof parsedLoc.start === 'number') {
20
- guessedType = 'LocString';
21
- }
22
- else if (/^\d+(\.\d+)?$/.test(text)) {
23
- guessedType = 'Number';
24
- }
25
- // MAYBE TODO: iterate over the rest of the rows to confirm
26
- // the type for all the rows
27
- return guessedType;
28
- }
29
- function dataToSpreadsheetSnapshot(rows, options = {}) {
30
- const { hasColumnNameLine = false, columnNameLineNumber = 1, isValidRefName = () => false, selectedAssemblyName, } = options;
31
- // rows is an array of row objects and columnNames
32
- // is an array of column names (in import order)
33
- let maxCols = 0;
34
- const rowSet = {
35
- isLoaded: true,
36
- rows: rows.map((row, rowNumber) => {
37
- const id = rowNumber + (hasColumnNameLine ? 0 : 1);
38
- if (row.length > maxCols) {
39
- maxCols = row.length;
40
- }
41
- return {
42
- id: String(id),
43
- cells: row.map((text, columnNumber) => {
44
- return { columnNumber, text };
45
- }),
46
- };
47
- }),
48
- };
49
- // process the column names row if present
50
- const columnNames = {};
51
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
52
- if (hasColumnNameLine && columnNameLineNumber !== undefined) {
53
- const [colNamesRow] = rowSet.rows.splice(columnNameLineNumber - 1, 1);
54
- if (colNamesRow) {
55
- colNamesRow.cells.forEach((cell, columnNumber) => {
56
- columnNames[columnNumber] = cell.text || '';
57
- });
58
- }
59
- }
60
- // make our column definitions
61
- const columns = [];
62
- const columnDisplayOrder = [];
63
- for (let columnNumber = 0; columnNumber < maxCols; columnNumber += 1) {
64
- columnDisplayOrder.push(columnNumber);
65
- const guessedType = guessColumnType(rowSet, columnNumber, isValidRefName);
66
- // store extendeddata for LocString column
67
- if (guessedType === 'LocString') {
68
- for (const row of rowSet.rows) {
69
- const cell = row.cells[columnNumber];
70
- cell.extendedData = parseLocString(cell.text, isValidRefName);
71
- }
72
- }
73
- columns[columnNumber] = {
74
- name: columnNames[columnNumber],
75
- dataType: {
76
- type: guessedType,
77
- },
78
- };
79
- }
80
- return {
81
- rowSet,
82
- columnDisplayOrder,
83
- hasColumnNames: !!hasColumnNameLine,
84
- columns,
85
- assemblyName: selectedAssemblyName,
86
- };
87
- }
88
- export async function parseCsvBuffer(buffer, options) {
89
- const rows = await parseWith(buffer);
90
- return dataToSpreadsheetSnapshot(rows, options);
91
- }
92
- export async function parseTsvBuffer(buffer, options) {
93
- const rows = await parseWith(buffer, { delimiter: '\t' });
94
- return dataToSpreadsheetSnapshot(rows, options);
95
- }
@@ -1,12 +0,0 @@
1
- declare const LocEnd: import("mobx-state-tree").IModelType<{
2
- type: import("mobx-state-tree").ISimpleType<string>;
3
- }, {
4
- DataCellReactComponent: import("react").FC<any> | null;
5
- FilterModelType: any;
6
- displayName: string;
7
- categoryName: string | undefined;
8
- } & {
9
- compare: any;
10
- readonly hasFilter: boolean;
11
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
12
- export default LocEnd;
@@ -1,15 +0,0 @@
1
- import MakeSpreadsheetColumnType from './MakeSpreadsheetColumnType';
2
- import { FilterModelType as NumberFilterModel } from './Number';
3
- import { types } from 'mobx-state-tree';
4
- const FilterModelType = types.compose(NumberFilterModel, types.model({
5
- type: types.literal('LocEnd'),
6
- }));
7
- const LocEnd = MakeSpreadsheetColumnType('LocEnd', {
8
- categoryName: 'Location',
9
- displayName: 'End',
10
- compare(cellA, cellB) {
11
- return Number.parseFloat(cellA.text) - Number.parseFloat(cellB.text);
12
- },
13
- FilterModelType,
14
- });
15
- export default LocEnd;
@@ -1,12 +0,0 @@
1
- declare const LocRef: import("mobx-state-tree").IModelType<{
2
- type: import("mobx-state-tree").ISimpleType<string>;
3
- }, {
4
- DataCellReactComponent: import("react").FC<any> | null;
5
- FilterModelType: any;
6
- displayName: string;
7
- categoryName: string | undefined;
8
- } & {
9
- compare: any;
10
- readonly hasFilter: boolean;
11
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
12
- export default LocRef;
@@ -1,15 +0,0 @@
1
- import MakeSpreadsheetColumnType from './MakeSpreadsheetColumnType';
2
- import { FilterModelType as NumberFilterModel } from './Text';
3
- import { types } from 'mobx-state-tree';
4
- const FilterModelType = types.compose(NumberFilterModel, types.model({
5
- type: types.literal('LocRef'),
6
- }));
7
- const LocRef = MakeSpreadsheetColumnType('LocRef', {
8
- categoryName: 'Location',
9
- displayName: 'Reference seq',
10
- compare(cellA, cellB) {
11
- return cellA.text.localeCompare(cellB.text);
12
- },
13
- FilterModelType,
14
- });
15
- export default LocRef;