@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,44 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const react_1 = __importDefault(require("react"));
7
- const material_1 = require("@mui/material");
8
- const mui_1 = require("tss-react/mui");
9
- // locals
10
- const RowCountMessage_1 = __importDefault(require("./RowCountMessage"));
11
- const mobx_react_1 = require("mobx-react");
12
- const statusBarHeight = 40;
13
- const useStyles = (0, mui_1.makeStyles)()(theme => ({
14
- statusBar: {
15
- height: statusBarHeight,
16
- boxSizing: 'border-box',
17
- borderTop: '1px outset #b1b1b1',
18
- paddingLeft: theme.spacing(1),
19
- },
20
- verticallyCenter: {
21
- display: 'flex',
22
- justifyContent: 'center',
23
- flexDirection: 'column',
24
- },
25
- spacer: {
26
- flexGrow: 1,
27
- },
28
- }));
29
- const StatusBar = (0, mobx_react_1.observer)(function StatusBar({ page, rowsPerPage, setPage, setRowsPerPage, spreadsheet, mode, }) {
30
- const { classes } = useStyles();
31
- return (react_1.default.createElement("div", { className: classes.statusBar, style: { display: mode === 'display' ? undefined : 'none' } },
32
- react_1.default.createElement(material_1.FormGroup, { row: true },
33
- react_1.default.createElement("div", { className: classes.verticallyCenter },
34
- react_1.default.createElement(RowCountMessage_1.default, { spreadsheet: spreadsheet })),
35
- react_1.default.createElement("div", { className: classes.spacer }),
36
- react_1.default.createElement(material_1.TablePagination, { rowsPerPageOptions: [10, 25, 100, 1000], count: spreadsheet.rowSet.count, component: "div", rowsPerPage: rowsPerPage, page: page, onPageChange: (_, newPage) => {
37
- setPage(newPage);
38
- }, onRowsPerPageChange: event => {
39
- setRowsPerPage(+event.target.value);
40
- setPage(0);
41
- } }),
42
- react_1.default.createElement("div", { className: classes.spacer }))));
43
- });
44
- exports.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,123 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.bufferToString = bufferToString;
27
- exports.parseCsvBuffer = parseCsvBuffer;
28
- exports.parseTsvBuffer = parseTsvBuffer;
29
- const util_1 = require("@jbrowse/core/util");
30
- function bufferToString(buffer) {
31
- return new TextDecoder('utf8', { fatal: true }).decode(buffer);
32
- }
33
- async function parseWith(buffer, options = {}) {
34
- const csv = await Promise.resolve().then(() => __importStar(require('csvtojson'))).then(module => module.default);
35
- return csv({ noheader: true, output: 'csv', ...options }).fromString(bufferToString(buffer));
36
- }
37
- function guessColumnType(rowSet, columnNumber, isValidRefName) {
38
- const text = rowSet.rows[0].cells[columnNumber].text || '';
39
- let guessedType = 'Text';
40
- let parsedLoc;
41
- try {
42
- parsedLoc = (0, util_1.parseLocString)(text, isValidRefName);
43
- }
44
- catch (error) {
45
- //
46
- }
47
- if ((parsedLoc === null || parsedLoc === void 0 ? void 0 : parsedLoc.refName) && typeof parsedLoc.start === 'number') {
48
- guessedType = 'LocString';
49
- }
50
- else if (/^\d+(\.\d+)?$/.test(text)) {
51
- guessedType = 'Number';
52
- }
53
- // MAYBE TODO: iterate over the rest of the rows to confirm
54
- // the type for all the rows
55
- return guessedType;
56
- }
57
- function dataToSpreadsheetSnapshot(rows, options = {}) {
58
- const { hasColumnNameLine = false, columnNameLineNumber = 1, isValidRefName = () => false, selectedAssemblyName, } = options;
59
- // rows is an array of row objects and columnNames
60
- // is an array of column names (in import order)
61
- let maxCols = 0;
62
- const rowSet = {
63
- isLoaded: true,
64
- rows: rows.map((row, rowNumber) => {
65
- const id = rowNumber + (hasColumnNameLine ? 0 : 1);
66
- if (row.length > maxCols) {
67
- maxCols = row.length;
68
- }
69
- return {
70
- id: String(id),
71
- cells: row.map((text, columnNumber) => {
72
- return { columnNumber, text };
73
- }),
74
- };
75
- }),
76
- };
77
- // process the column names row if present
78
- const columnNames = {};
79
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
80
- if (hasColumnNameLine && columnNameLineNumber !== undefined) {
81
- const [colNamesRow] = rowSet.rows.splice(columnNameLineNumber - 1, 1);
82
- if (colNamesRow) {
83
- colNamesRow.cells.forEach((cell, columnNumber) => {
84
- columnNames[columnNumber] = cell.text || '';
85
- });
86
- }
87
- }
88
- // make our column definitions
89
- const columns = [];
90
- const columnDisplayOrder = [];
91
- for (let columnNumber = 0; columnNumber < maxCols; columnNumber += 1) {
92
- columnDisplayOrder.push(columnNumber);
93
- const guessedType = guessColumnType(rowSet, columnNumber, isValidRefName);
94
- // store extendeddata for LocString column
95
- if (guessedType === 'LocString') {
96
- for (const row of rowSet.rows) {
97
- const cell = row.cells[columnNumber];
98
- cell.extendedData = (0, util_1.parseLocString)(cell.text, isValidRefName);
99
- }
100
- }
101
- columns[columnNumber] = {
102
- name: columnNames[columnNumber],
103
- dataType: {
104
- type: guessedType,
105
- },
106
- };
107
- }
108
- return {
109
- rowSet,
110
- columnDisplayOrder,
111
- hasColumnNames: !!hasColumnNameLine,
112
- columns,
113
- assemblyName: selectedAssemblyName,
114
- };
115
- }
116
- async function parseCsvBuffer(buffer, options) {
117
- const rows = await parseWith(buffer);
118
- return dataToSpreadsheetSnapshot(rows, options);
119
- }
120
- async function parseTsvBuffer(buffer, options) {
121
- const rows = await parseWith(buffer, { delimiter: '\t' });
122
- return dataToSpreadsheetSnapshot(rows, options);
123
- }
@@ -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,20 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const MakeSpreadsheetColumnType_1 = __importDefault(require("./MakeSpreadsheetColumnType"));
7
- const Number_1 = require("./Number");
8
- const mobx_state_tree_1 = require("mobx-state-tree");
9
- const FilterModelType = mobx_state_tree_1.types.compose(Number_1.FilterModelType, mobx_state_tree_1.types.model({
10
- type: mobx_state_tree_1.types.literal('LocEnd'),
11
- }));
12
- const LocEnd = (0, MakeSpreadsheetColumnType_1.default)('LocEnd', {
13
- categoryName: 'Location',
14
- displayName: 'End',
15
- compare(cellA, cellB) {
16
- return Number.parseFloat(cellA.text) - Number.parseFloat(cellB.text);
17
- },
18
- FilterModelType,
19
- });
20
- exports.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,20 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const MakeSpreadsheetColumnType_1 = __importDefault(require("./MakeSpreadsheetColumnType"));
7
- const Text_1 = require("./Text");
8
- const mobx_state_tree_1 = require("mobx-state-tree");
9
- const FilterModelType = mobx_state_tree_1.types.compose(Text_1.FilterModelType, mobx_state_tree_1.types.model({
10
- type: mobx_state_tree_1.types.literal('LocRef'),
11
- }));
12
- const LocRef = (0, MakeSpreadsheetColumnType_1.default)('LocRef', {
13
- categoryName: 'Location',
14
- displayName: 'Reference seq',
15
- compare(cellA, cellB) {
16
- return cellA.text.localeCompare(cellB.text);
17
- },
18
- FilterModelType,
19
- });
20
- exports.default = LocRef;
@@ -1,12 +0,0 @@
1
- declare const LocStart: 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 LocStart;
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const MakeSpreadsheetColumnType_1 = __importDefault(require("./MakeSpreadsheetColumnType"));
7
- const mobx_state_tree_1 = require("mobx-state-tree");
8
- const Number_1 = require("./Number");
9
- const FilterModelType = mobx_state_tree_1.types.compose(Number_1.FilterModelType, mobx_state_tree_1.types.model({
10
- type: mobx_state_tree_1.types.literal('LocStart'),
11
- }));
12
- const LocStart = (0, MakeSpreadsheetColumnType_1.default)('LocStart', {
13
- categoryName: 'Location',
14
- displayName: 'Start',
15
- compare(cellA, cellB) {
16
- return Number.parseFloat(cellA.text) - Number.parseFloat(cellB.text);
17
- },
18
- FilterModelType,
19
- });
20
- exports.default = LocStart;
@@ -1,13 +0,0 @@
1
- import React from 'react';
2
- declare const LocStringColumnType: import("mobx-state-tree").IModelType<{
3
- type: import("mobx-state-tree").ISimpleType<string>;
4
- }, {
5
- DataCellReactComponent: React.FC<any> | null;
6
- FilterModelType: any;
7
- displayName: string;
8
- categoryName: string | undefined;
9
- } & {
10
- compare: any;
11
- readonly hasFilter: boolean;
12
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
13
- export default LocStringColumnType;
@@ -1,183 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const react_1 = __importDefault(require("react"));
7
- const material_1 = require("@mui/material");
8
- const mui_1 = require("tss-react/mui");
9
- const mobx_react_1 = require("mobx-react");
10
- const mobx_state_tree_1 = require("mobx-state-tree");
11
- // jbrowse imports
12
- const mst_reflection_1 = require("@jbrowse/core/util/mst-reflection");
13
- const util_1 = require("@jbrowse/core/util");
14
- // icons
15
- const Clear_1 = __importDefault(require("@mui/icons-material/Clear"));
16
- // locals
17
- const MakeSpreadsheetColumnType_1 = __importDefault(require("./MakeSpreadsheetColumnType"));
18
- const useStyles = (0, mui_1.makeStyles)()({
19
- textFilterControlAdornment: { marginRight: '-18px' },
20
- textFilterControl: {
21
- '& .MuiInput-formControl': {
22
- marginTop: 8,
23
- },
24
- '& .MuiInputLabel-formControl': {
25
- top: '-7px',
26
- '&.MuiInputLabel-shrink': {
27
- top: '-3px',
28
- },
29
- },
30
- },
31
- });
32
- // React component for the column filter control
33
- const FilterReactComponent = (0, mobx_react_1.observer)(function ({ filterModel, }) {
34
- const { classes } = useStyles();
35
- const operationChoices = (0, mst_reflection_1.getEnumerationValues)((0, mst_reflection_1.getSubType)((0, mst_reflection_1.getPropertyType)((0, mobx_state_tree_1.getPropertyMembers)(filterModel), 'operation')));
36
- return (react_1.default.createElement(react_1.default.Fragment, null,
37
- react_1.default.createElement(material_1.Select, { value: filterModel.operation, onChange: event => filterModel.setOperation(String(event.target.value)) }, operationChoices.map(name => (react_1.default.createElement(material_1.MenuItem, { key: name, value: name }, name)))),
38
- ' ',
39
- react_1.default.createElement(material_1.TextField, { label: "range", placeholder: "chr1:100-200", error: filterModel.locStringIsInvalid, value: filterModel.locString, onChange: evt => filterModel.setLocString(evt.target.value), className: classes.textFilterControl, slotProps: {
40
- input: {
41
- endAdornment: (react_1.default.createElement(material_1.InputAdornment, { className: classes.textFilterControlAdornment, position: "end" },
42
- react_1.default.createElement(material_1.IconButton, { "aria-label": "clear filter", onClick: () => filterModel.setLocString('') },
43
- react_1.default.createElement(Clear_1.default, null)))),
44
- },
45
- } })));
46
- });
47
- const OPERATIONS = [
48
- 'overlaps with',
49
- 'contained within',
50
- 'fully contains',
51
- 'does not overlap',
52
- 'not contained within',
53
- 'does not contain',
54
- ];
55
- // NOTE: assembly names, if present, are ignored in all of these predicates
56
- const OPERATION_PREDICATES = {
57
- 'overlaps with': (cellLocation, specifiedLocation) => {
58
- return (cellLocation.refName === specifiedLocation.refName &&
59
- (0, util_1.doesIntersect2)(cellLocation.start, cellLocation.end, specifiedLocation.start, specifiedLocation.end));
60
- },
61
- 'contained within': (cellLocation, specifiedLocation) => {
62
- return (cellLocation.refName === specifiedLocation.refName &&
63
- (0, util_1.isContainedWithin)(cellLocation.start, cellLocation.end, specifiedLocation.start, specifiedLocation.end));
64
- },
65
- 'fully contains': (cellLocation, specifiedLocation) => {
66
- return (cellLocation.refName === specifiedLocation.refName &&
67
- (0, util_1.isContainedWithin)(specifiedLocation.start, specifiedLocation.end, cellLocation.start, cellLocation.end));
68
- },
69
- };
70
- OPERATION_PREDICATES['does not overlap'] = (cellLocation, specifiedLocation) => {
71
- return !OPERATION_PREDICATES['overlaps with'](cellLocation, specifiedLocation);
72
- };
73
- OPERATION_PREDICATES['not contained within'] = (cellLocation, specifiedLocation) => {
74
- return !OPERATION_PREDICATES['contained within'](cellLocation, specifiedLocation);
75
- };
76
- OPERATION_PREDICATES['does not contain'] = (cellLocation, specifiedLocation) => {
77
- return !OPERATION_PREDICATES['fully contains'](cellLocation, specifiedLocation);
78
- };
79
- // MST model for the column filter control
80
- const FilterModelType = mobx_state_tree_1.types
81
- .model('ColumnLocStringFilter', {
82
- type: mobx_state_tree_1.types.literal('LocString'),
83
- columnNumber: mobx_state_tree_1.types.integer,
84
- locString: '',
85
- operation: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.string, OPERATIONS[0]),
86
- })
87
- .views(self => ({
88
- get locStringIsInvalid() {
89
- if (self.locString) {
90
- const parsed = this.parsedLocString;
91
- return (!parsed ||
92
- parsed.refName === '' ||
93
- typeof parsed.start !== 'number' ||
94
- typeof parsed.end !== 'number' ||
95
- parsed.start > parsed.end);
96
- }
97
- return false;
98
- },
99
- get parsedLocString() {
100
- const session = (0, util_1.getSession)(self);
101
- const model = (0, mobx_state_tree_1.getParent)(self, 3).spreadsheet;
102
- const { assemblyName } = model;
103
- try {
104
- return (0, util_1.parseLocString)(self.locString, refName => session.assemblyManager.isValidRefName(refName, assemblyName));
105
- }
106
- catch (e) {
107
- return undefined;
108
- }
109
- },
110
- }))
111
- .views(self => ({
112
- // returns a function that tests the given row
113
- get predicate() {
114
- const { locString, locStringIsInvalid, parsedLocString, operation, columnNumber, } = self; // avoid closing over self
115
- if (!locString || locStringIsInvalid || !parsedLocString) {
116
- return function alwaysTrue() {
117
- return true;
118
- };
119
- }
120
- return function stringPredicate(_sheet, row) {
121
- const { cellsWithDerived: cells } = row;
122
- const cell = cells[columnNumber];
123
- if (!(cell === null || cell === void 0 ? void 0 : cell.text) || !cell.extendedData) {
124
- return false;
125
- }
126
- const parsedCellText = cell.extendedData;
127
- if (!parsedCellText.refName) {
128
- return false;
129
- }
130
- const predicate = OPERATION_PREDICATES[operation];
131
- if (!predicate) {
132
- throw new Error(`"${operation}" not implemented in location filter`);
133
- }
134
- return predicate(parsedCellText, parsedLocString);
135
- };
136
- },
137
- }))
138
- .actions(self => ({
139
- setLocString(s) {
140
- self.locString = s;
141
- },
142
- setOperation(op) {
143
- self.operation = op;
144
- },
145
- }))
146
- .volatile(() => ({ ReactComponent: FilterReactComponent }));
147
- // opens a new LGV at the location described in the locString in the cell text
148
- async function locationLinkClick(spreadsheet, _columnNumber, cell) {
149
- const session = (0, util_1.getSession)(spreadsheet);
150
- const { assemblyName } = spreadsheet;
151
- const { id } = (0, mobx_state_tree_1.getParent)(spreadsheet);
152
- const newViewId = `${id}_${assemblyName}`;
153
- let view = session.views.find(v => v.id === newViewId);
154
- if (!view) {
155
- view = session.addView('LinearGenomeView', {
156
- id: newViewId,
157
- });
158
- }
159
- await view.navToLocString(cell.text, assemblyName);
160
- }
161
- const DataCellReactComponent = (0, mobx_react_1.observer)(function ({ cell, columnNumber, spreadsheet, }) {
162
- return (react_1.default.createElement("a", { onClick: async (evt) => {
163
- evt.preventDefault();
164
- const session = (0, util_1.getSession)(spreadsheet);
165
- try {
166
- await locationLinkClick(spreadsheet, columnNumber, cell);
167
- }
168
- catch (e) {
169
- console.error(e);
170
- session.notifyError(`${e}`, e);
171
- }
172
- }, title: "open a new linear genome view here", href: "#" }, cell.text));
173
- });
174
- const LocStringColumnType = (0, MakeSpreadsheetColumnType_1.default)('LocString', {
175
- categoryName: 'Location',
176
- displayName: 'Full location',
177
- compare(cellA, cellB) {
178
- return (0, util_1.compareLocs)(cellA.extendedData, cellB.extendedData);
179
- },
180
- FilterModelType,
181
- DataCellReactComponent,
182
- });
183
- exports.default = LocStringColumnType;
@@ -1,19 +0,0 @@
1
- import React from 'react';
2
- /** utility function for assembling the MST model of a column data type */
3
- export default function MakeSpreadsheetColumnType(name: string, { DataCellReactComponent, FilterModelType, compare, displayName, categoryName, }: {
4
- compare?: any;
5
- DataCellReactComponent?: React.FC<any> | null;
6
- FilterModelType?: any;
7
- displayName?: string;
8
- categoryName?: string;
9
- }): import("mobx-state-tree").IModelType<{
10
- type: import("mobx-state-tree").ISimpleType<string>;
11
- }, {
12
- DataCellReactComponent: React.FC<any> | null;
13
- FilterModelType: any;
14
- displayName: string;
15
- categoryName: string | undefined;
16
- } & {
17
- compare: any;
18
- readonly hasFilter: boolean;
19
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = MakeSpreadsheetColumnType;
4
- const mobx_state_tree_1 = require("mobx-state-tree");
5
- /** utility function for assembling the MST model of a column data type */
6
- function MakeSpreadsheetColumnType(name, { DataCellReactComponent = null, FilterModelType = null, compare, displayName = undefined, categoryName = undefined, }) {
7
- return mobx_state_tree_1.types
8
- .model(`ColumnDataType${name}`, {
9
- type: mobx_state_tree_1.types.literal(name),
10
- })
11
- .volatile(() => ({
12
- DataCellReactComponent,
13
- FilterModelType: FilterModelType,
14
- displayName: displayName || name,
15
- categoryName,
16
- }))
17
- .views(() => ({
18
- compare,
19
- get hasFilter() {
20
- return !!FilterModelType;
21
- },
22
- }));
23
- }
@@ -1,30 +0,0 @@
1
- import React from 'react';
2
- declare const FilterModelType: import("mobx-state-tree").IModelType<{
3
- type: import("mobx-state-tree").ISimpleType<"Number">;
4
- columnNumber: import("mobx-state-tree").ISimpleType<number>;
5
- firstNumber: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
6
- secondNumber: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
7
- operation: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
8
- }, {
9
- readonly predicate: (_sheet: any, row: any) => boolean;
10
- } & {
11
- setFirstNumber(n: number): void;
12
- setSecondNumber(n: number): void;
13
- setOperation(op: string): void;
14
- } & {
15
- ReactComponent: ({ filterModel }: {
16
- filterModel: any;
17
- }) => React.JSX.Element;
18
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
19
- declare const NumberColumn: import("mobx-state-tree").IModelType<{
20
- type: import("mobx-state-tree").ISimpleType<string>;
21
- }, {
22
- DataCellReactComponent: React.FC<any> | null;
23
- FilterModelType: any;
24
- displayName: string;
25
- categoryName: string | undefined;
26
- } & {
27
- compare: any;
28
- readonly hasFilter: boolean;
29
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
30
- export { NumberColumn, FilterModelType };