@jbrowse/core 2.4.2 → 2.5.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 (164) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.d.ts +16 -0
  2. package/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.js +46 -0
  3. package/BaseFeatureWidget/BaseFeatureDetail/Attributes.d.ts +15 -0
  4. package/BaseFeatureWidget/BaseFeatureDetail/Attributes.js +69 -0
  5. package/BaseFeatureWidget/BaseFeatureDetail/BasicField.d.ts +17 -0
  6. package/BaseFeatureWidget/BaseFeatureDetail/BasicField.js +23 -0
  7. package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.d.ts +12 -0
  8. package/BaseFeatureWidget/BaseFeatureDetail/BasicValue.js +26 -0
  9. package/BaseFeatureWidget/BaseFeatureDetail/DataGrid.d.ts +14 -0
  10. package/BaseFeatureWidget/BaseFeatureDetail/DataGrid.js +98 -0
  11. package/BaseFeatureWidget/BaseFeatureDetail/FieldName.d.ts +16 -0
  12. package/BaseFeatureWidget/BaseFeatureDetail/FieldName.js +32 -0
  13. package/BaseFeatureWidget/BaseFeatureDetail/UriField.d.ts +17 -0
  14. package/BaseFeatureWidget/BaseFeatureDetail/UriField.js +31 -0
  15. package/BaseFeatureWidget/BaseFeatureDetail/UriLink.d.ts +6 -0
  16. package/BaseFeatureWidget/BaseFeatureDetail/UriLink.js +13 -0
  17. package/BaseFeatureWidget/{BaseFeatureDetail.d.ts → BaseFeatureDetail/index.d.ts} +4 -4
  18. package/BaseFeatureWidget/{BaseFeatureDetail.js → BaseFeatureDetail/index.js} +12 -9
  19. package/BaseFeatureWidget/BaseFeatureDetail/util.d.ts +4 -0
  20. package/BaseFeatureWidget/BaseFeatureDetail/util.js +23 -0
  21. package/BaseFeatureWidget/SequenceFeatureDetails/CDNASequence.d.ts +12 -0
  22. package/BaseFeatureWidget/SequenceFeatureDetails/CDNASequence.js +25 -0
  23. package/BaseFeatureWidget/SequenceFeatureDetails/CDSSequence.d.ts +5 -0
  24. package/BaseFeatureWidget/SequenceFeatureDetails/CDSSequence.js +12 -0
  25. package/BaseFeatureWidget/SequenceFeatureDetails/GenomicSequence.d.ts +5 -0
  26. package/BaseFeatureWidget/SequenceFeatureDetails/GenomicSequence.js +14 -0
  27. package/BaseFeatureWidget/SequenceFeatureDetails/ProteinSequence.d.ts +8 -0
  28. package/BaseFeatureWidget/SequenceFeatureDetails/ProteinSequence.js +18 -0
  29. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.d.ts +2 -0
  30. package/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeatureDetails.js +146 -0
  31. package/BaseFeatureWidget/{SequenceFeatureSettingsDialog.d.ts → SequenceFeatureDetails/SequenceFeatureSettingsDialog.d.ts} +0 -1
  32. package/BaseFeatureWidget/{SequenceFeatureSettingsDialog.js → SequenceFeatureDetails/SequenceFeatureSettingsDialog.js} +1 -1
  33. package/BaseFeatureWidget/{SequenceHelpDialog.d.ts → SequenceFeatureDetails/SequenceHelpDialog.d.ts} +0 -1
  34. package/BaseFeatureWidget/{SequenceHelpDialog.js → SequenceFeatureDetails/SequenceHelpDialog.js} +6 -9
  35. package/BaseFeatureWidget/{SequencePanel.d.ts → SequenceFeatureDetails/SequencePanel.d.ts} +1 -1
  36. package/BaseFeatureWidget/{SequencePanel.js → SequenceFeatureDetails/SequencePanel.js} +10 -8
  37. package/BaseFeatureWidget/SequenceFeatureDetails/hooks.d.ts +10 -0
  38. package/BaseFeatureWidget/SequenceFeatureDetails/hooks.js +73 -0
  39. package/BaseFeatureWidget/SequenceFeatureDetails/index.d.ts +2 -0
  40. package/BaseFeatureWidget/SequenceFeatureDetails/index.js +68 -0
  41. package/BaseFeatureWidget/SequenceFeatureDetails/util.d.ts +6 -0
  42. package/BaseFeatureWidget/SequenceFeatureDetails/util.js +11 -0
  43. package/BaseFeatureWidget/index.d.ts +4 -1
  44. package/BaseFeatureWidget/index.js +29 -17
  45. package/BaseFeatureWidget/types.d.ts +2 -2
  46. package/Plugin.d.ts +1 -1
  47. package/PluginLoader.js +17 -0
  48. package/PluginManager.d.ts +5 -2
  49. package/PluginManager.js +3 -0
  50. package/ReExports/list.js +1 -0
  51. package/ReExports/modules.d.ts +5 -2
  52. package/ReExports/modules.js +7 -4
  53. package/TextSearch/TextSearchManager.d.ts +2 -9
  54. package/assemblyManager/assembly.d.ts +91 -8
  55. package/assemblyManager/assembly.js +92 -8
  56. package/assemblyManager/assemblyConfigSchema.d.ts +50 -1
  57. package/assemblyManager/assemblyManager.d.ts +115 -58
  58. package/assemblyManager/assemblyManager.js +60 -12
  59. package/configuration/configurationSchema.d.ts +14 -16
  60. package/configuration/configurationSchema.js +4 -2
  61. package/configuration/index.d.ts +1 -1
  62. package/configuration/types.d.ts +13 -0
  63. package/configuration/types.js +2 -0
  64. package/configuration/util.d.ts +5 -3
  65. package/configuration/util.js +18 -18
  66. package/data_adapters/BaseAdapter/BaseAdapter.d.ts +23 -0
  67. package/data_adapters/BaseAdapter/BaseAdapter.js +37 -0
  68. package/data_adapters/BaseAdapter/BaseFeatureDataAdapter.d.ts +128 -0
  69. package/data_adapters/{BaseAdapter.js → BaseAdapter/BaseFeatureDataAdapter.js} +58 -88
  70. package/data_adapters/BaseAdapter/BaseOptions.d.ts +16 -0
  71. package/data_adapters/BaseAdapter/BaseOptions.js +2 -0
  72. package/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.d.ts +9 -0
  73. package/data_adapters/BaseAdapter/BaseRefNameAliasAdapter.js +2 -0
  74. package/data_adapters/BaseAdapter/BaseSequenceAdapter.d.ts +13 -0
  75. package/data_adapters/BaseAdapter/BaseSequenceAdapter.js +10 -0
  76. package/data_adapters/BaseAdapter/BaseTextSearchAdapter.d.ts +6 -0
  77. package/data_adapters/BaseAdapter/BaseTextSearchAdapter.js +2 -0
  78. package/data_adapters/BaseAdapter/RegionsAdapter.d.ts +6 -0
  79. package/data_adapters/BaseAdapter/RegionsAdapter.js +2 -0
  80. package/data_adapters/BaseAdapter/index.d.ts +15 -0
  81. package/data_adapters/BaseAdapter/index.js +25 -0
  82. package/data_adapters/BaseAdapter/types.d.ts +21 -0
  83. package/data_adapters/BaseAdapter/types.js +2 -0
  84. package/data_adapters/BaseAdapter/util.d.ts +12 -0
  85. package/data_adapters/BaseAdapter/util.js +23 -0
  86. package/data_adapters/CytobandAdapter/configSchema.d.ts +11 -1
  87. package/package.json +4 -4
  88. package/pluggableElementTypes/AdapterType.d.ts +1 -1
  89. package/pluggableElementTypes/ConnectionType.d.ts +1 -1
  90. package/pluggableElementTypes/DisplayType.d.ts +1 -1
  91. package/pluggableElementTypes/InternetAccountType.d.ts +1 -1
  92. package/pluggableElementTypes/TextSearchAdapterType.d.ts +1 -1
  93. package/pluggableElementTypes/models/BaseTrackModel.d.ts +1 -1
  94. package/pluggableElementTypes/models/BaseTrackModel.js +3 -2
  95. package/pluggableElementTypes/models/InternetAccountModel.d.ts +30 -0
  96. package/pluggableElementTypes/models/InternetAccountModel.js +6 -1
  97. package/pluggableElementTypes/models/baseConnectionConfig.d.ts +18 -1
  98. package/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +42 -1
  99. package/pluggableElementTypes/models/baseTrackConfig.d.ts +118 -1
  100. package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +0 -1
  101. package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +1 -1
  102. package/pluggableElementTypes/renderers/RendererType.d.ts +1 -1
  103. package/pluggableElementTypes/renderers/RpcRenderedSvgGroup.d.ts +0 -1
  104. package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
  105. package/rpc/RpcManager.d.ts +8 -1
  106. package/rpc/RpcManager.js +1 -1
  107. package/rpc/baseRpcConfig.d.ts +10 -1
  108. package/rpc/configSchema.d.ts +14 -1
  109. package/rpc/coreRpcMethods.d.ts +1 -1
  110. package/rpc/coreRpcMethods.js +3 -3
  111. package/rpc/mainThreadRpcConfig.d.ts +7 -1
  112. package/rpc/methods/{CoreEstimateRegionStats.d.ts → CoreGetFeatureDensityStats.d.ts} +2 -2
  113. package/rpc/methods/{CoreEstimateRegionStats.js → CoreGetFeatureDensityStats.js} +4 -4
  114. package/rpc/methods/CoreGetFeatureDetails.js +5 -5
  115. package/rpc/webWorkerRpcConfig.d.ts +7 -1
  116. package/tsconfig.build.tsbuildinfo +1 -1
  117. package/ui/AboutDialog.d.ts +0 -1
  118. package/ui/AppLogo.d.ts +0 -1
  119. package/ui/AssemblySelector.d.ts +0 -1
  120. package/ui/CascadingMenu.d.ts +0 -1
  121. package/ui/ColorPicker.d.ts +0 -1
  122. package/ui/Dialog.d.ts +0 -1
  123. package/ui/Dialog.js +14 -1
  124. package/ui/DrawerWidget.d.ts +1 -2
  125. package/ui/DrawerWidget.js +5 -3
  126. package/ui/DropDownMenu.d.ts +0 -1
  127. package/ui/ErrorMessage.d.ts +0 -1
  128. package/ui/FactoryResetDialog.d.ts +0 -1
  129. package/ui/FatalErrorDialog.d.ts +0 -1
  130. package/ui/FileSelector/FileSelector.d.ts +0 -1
  131. package/ui/FileSelector/LocalFileChooser.d.ts +0 -1
  132. package/ui/FileSelector/UrlChooser.d.ts +0 -1
  133. package/ui/Icons.d.ts +0 -1
  134. package/ui/LoadingEllipses.d.ts +0 -1
  135. package/ui/Logo.d.ts +0 -1
  136. package/ui/PrerenderedCanvas.d.ts +0 -1
  137. package/ui/ResizeBar.js +1 -1
  138. package/ui/ResizeHandle.d.ts +0 -1
  139. package/ui/ReturnToImportFormDialog.d.ts +0 -1
  140. package/ui/SanitizedHTML.d.ts +0 -1
  141. package/ui/SanitizedHTML.js +6 -0
  142. package/ui/Snackbar.d.ts +0 -1
  143. package/ui/Tooltip.d.ts +0 -1
  144. package/ui/ViewContainerTitle.d.ts +0 -1
  145. package/ui/ViewLauncher.d.ts +0 -1
  146. package/ui/ViewMenu.d.ts +1 -2
  147. package/ui/ViewPanel.d.ts +0 -1
  148. package/ui/react-colorful.d.ts +1 -1
  149. package/ui/theme.js +3 -18
  150. package/util/index.d.ts +4 -2
  151. package/util/index.js +13 -4
  152. package/util/layouts/PrecomputedMultiLayout.d.ts +1 -1
  153. package/util/stats.d.ts +5 -5
  154. package/util/types/index.d.ts +3 -1
  155. package/util/types/mst.d.ts +12 -9
  156. package/BaseFeatureWidget/SequenceBox.d.ts +0 -29
  157. package/BaseFeatureWidget/SequenceBox.js +0 -63
  158. package/BaseFeatureWidget/SequenceFeatureDetails.d.ts +0 -3
  159. package/BaseFeatureWidget/SequenceFeatureDetails.js +0 -230
  160. package/data_adapters/BaseAdapter.d.ts +0 -138
  161. /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/DLGAP3.d.ts +0 -0
  162. /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/DLGAP3.js +0 -0
  163. /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/NCDN.d.ts +0 -0
  164. /package/BaseFeatureWidget/{test_data → SequenceFeatureDetails/test_data}/NCDN.js +0 -0
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ export declare const useStyles: (params: void, styleOverrides?: {
3
+ props: any;
4
+ ownerState?: Record<string, unknown> | undefined;
5
+ } | undefined) => {
6
+ classes: Record<"field" | "fieldSubvalue", string>;
7
+ theme: import("@mui/material").Theme;
8
+ css: import("tss-react").Css;
9
+ cx: import("tss-react").Cx;
10
+ };
11
+ export default function ArrayValue({ name, value, description, prefix, }: {
12
+ description?: React.ReactNode;
13
+ name: string;
14
+ value: unknown[];
15
+ prefix?: string[];
16
+ }): JSX.Element;
@@ -0,0 +1,46 @@
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
+ exports.useStyles = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const is_object_1 = __importDefault(require("is-object"));
9
+ const mui_1 = require("tss-react/mui");
10
+ // locals
11
+ const Attributes_1 = __importDefault(require("./Attributes"));
12
+ const FieldName_1 = __importDefault(require("./FieldName"));
13
+ const BasicValue_1 = __importDefault(require("./BasicValue"));
14
+ exports.useStyles = (0, mui_1.makeStyles)()(theme => ({
15
+ field: {
16
+ display: 'flex',
17
+ flexWrap: 'wrap',
18
+ },
19
+ fieldSubvalue: {
20
+ wordBreak: 'break-word',
21
+ maxHeight: 300,
22
+ padding: theme.spacing(0.5),
23
+ background: theme.palette.action.hover,
24
+ border: `1px solid ${theme.palette.action.selected}`,
25
+ boxSizing: 'border-box',
26
+ overflow: 'auto',
27
+ },
28
+ }));
29
+ function ArrayValue({ name, value, description, prefix = [], }) {
30
+ const { classes } = (0, exports.useStyles)();
31
+ if (value.length === 1) {
32
+ return (0, is_object_1.default)(value[0]) ? (react_1.default.createElement(Attributes_1.default, { attributes: value[0], prefix: [...prefix, name] })) : (react_1.default.createElement("div", { className: classes.field },
33
+ react_1.default.createElement(FieldName_1.default, { prefix: prefix, description: description, name: name }),
34
+ react_1.default.createElement(BasicValue_1.default, { value: value[0] })));
35
+ }
36
+ else if (value.every(val => (0, is_object_1.default)(val))) {
37
+ return (react_1.default.createElement(react_1.default.Fragment, null, value.map((val, i) => (react_1.default.createElement(Attributes_1.default, { key: JSON.stringify(val) + '-' + i, attributes: val, prefix: [...prefix, name + '-' + i] })))));
38
+ }
39
+ else {
40
+ return (react_1.default.createElement("div", { className: classes.field },
41
+ react_1.default.createElement(FieldName_1.default, { prefix: prefix, description: description, name: name }),
42
+ value.map((val, i) => (react_1.default.createElement("div", { key: JSON.stringify(val) + '-' + i, className: classes.fieldSubvalue },
43
+ react_1.default.createElement(BasicValue_1.default, { value: val }))))));
44
+ }
45
+ }
46
+ exports.default = ArrayValue;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ export default function Attributes(props: {
3
+ attributes: {
4
+ [key: string]: unknown;
5
+ __jbrowsefmt?: {
6
+ [key: string]: unknown;
7
+ };
8
+ };
9
+ omit?: string[];
10
+ omitSingleLevel?: string[];
11
+ formatter?: (val: unknown, key: string) => React.ReactNode;
12
+ descriptions?: Record<string, React.ReactNode>;
13
+ prefix?: string[];
14
+ hideUris?: boolean;
15
+ }): JSX.Element;
@@ -0,0 +1,69 @@
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 util_1 = require("./util");
8
+ const DataGrid_1 = __importDefault(require("./DataGrid"));
9
+ const ArrayValue_1 = __importDefault(require("./ArrayValue"));
10
+ const is_object_1 = __importDefault(require("is-object"));
11
+ const util_2 = require("../../util");
12
+ const UriField_1 = __importDefault(require("./UriField"));
13
+ const BasicField_1 = __importDefault(require("./BasicField"));
14
+ const MAX_FIELD_NAME_WIDTH = 170;
15
+ // these are always omitted as too detailed
16
+ const globalOmit = [
17
+ '__jbrowsefmt',
18
+ 'length',
19
+ 'position',
20
+ 'subfeatures',
21
+ 'uniqueId',
22
+ 'exonFrames',
23
+ 'parentId',
24
+ 'thickStart',
25
+ 'thickEnd',
26
+ ];
27
+ // pick using a path from an object, similar to _.get from lodash with special
28
+ // logic for Descriptions from e.g. VCF headers
29
+ //
30
+ // @param arr example ['a','b'], obj = {a:{b:'hello}}
31
+ // @returns hello (with special addition to grab description also)
32
+ function accessNested(arr, obj = {}) {
33
+ let obj2 = obj;
34
+ arr.forEach(elt => {
35
+ if (obj2) {
36
+ obj2 = obj[elt];
37
+ }
38
+ });
39
+ return typeof obj === 'string'
40
+ ? obj
41
+ : typeof (obj === null || obj === void 0 ? void 0 : obj.Description) === 'string'
42
+ ? obj.Description
43
+ : undefined;
44
+ }
45
+ function Attributes(props) {
46
+ const { attributes, omit = [], omitSingleLevel = [], descriptions, formatter = val => val, hideUris, prefix = [], } = props;
47
+ const omits = new Set([...omit, ...globalOmit, ...omitSingleLevel]);
48
+ const { __jbrowsefmt, ...rest } = attributes;
49
+ const formattedAttributes = { ...rest, ...__jbrowsefmt };
50
+ const maxLabelWidth = (0, util_1.generateMaxWidth)(Object.entries(formattedAttributes).filter(([k, v]) => v !== undefined && !omits.has(k)), prefix);
51
+ return (react_1.default.createElement(react_1.default.Fragment, null, Object.entries(formattedAttributes)
52
+ .filter(([k, v]) => v !== undefined && !omits.has(k))
53
+ .map(([key, value]) => {
54
+ const description = accessNested([...prefix, key], descriptions);
55
+ if (Array.isArray(value)) {
56
+ // check if it looks like an array of objects, which could be used
57
+ // in data grid
58
+ return value.length > 1 && value.every(val => (0, is_object_1.default)(val)) ? (react_1.default.createElement(DataGrid_1.default, { key: key, name: key, prefix: prefix, value: value })) : (react_1.default.createElement(ArrayValue_1.default, { key: key, name: key, value: value, description: description, prefix: prefix }));
59
+ }
60
+ else if ((0, is_object_1.default)(value)) {
61
+ const { omitSingleLevel, ...rest } = props;
62
+ return (0, util_2.isUriLocation)(value) ? (hideUris ? null : (react_1.default.createElement(UriField_1.default, { key: key, name: key, prefix: prefix, value: value }))) : (react_1.default.createElement(Attributes, { ...rest, key: key, attributes: value, descriptions: descriptions, prefix: [...prefix, key] }));
63
+ }
64
+ else {
65
+ return (react_1.default.createElement(BasicField_1.default, { key: key, name: key, value: formatter(value, key), description: description, prefix: prefix, width: Math.min(maxLabelWidth, MAX_FIELD_NAME_WIDTH) }));
66
+ }
67
+ })));
68
+ }
69
+ exports.default = Attributes;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ export declare const useStyles: (params: void, styleOverrides?: {
3
+ props: any;
4
+ ownerState?: Record<string, unknown> | undefined;
5
+ } | undefined) => {
6
+ classes: Record<"field", string>;
7
+ theme: import("@mui/material").Theme;
8
+ css: import("tss-react").Css;
9
+ cx: import("tss-react").Cx;
10
+ };
11
+ export default function BasicField({ name, value, description, prefix, width, }: {
12
+ description?: React.ReactNode;
13
+ name: string;
14
+ value: unknown;
15
+ prefix?: string[];
16
+ width?: number;
17
+ }): JSX.Element | null;
@@ -0,0 +1,23 @@
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
+ exports.useStyles = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const mui_1 = require("tss-react/mui");
9
+ const BasicValue_1 = __importDefault(require("./BasicValue"));
10
+ const FieldName_1 = __importDefault(require("./FieldName"));
11
+ exports.useStyles = (0, mui_1.makeStyles)()({
12
+ field: {
13
+ display: 'flex',
14
+ flexWrap: 'wrap',
15
+ },
16
+ });
17
+ function BasicField({ name, value, description, prefix, width, }) {
18
+ const { classes } = (0, exports.useStyles)();
19
+ return value !== null && value !== undefined ? (react_1.default.createElement("div", { className: classes.field },
20
+ react_1.default.createElement(FieldName_1.default, { prefix: prefix, description: description, name: name, width: width }),
21
+ react_1.default.createElement(BasicValue_1.default, { value: value }))) : null;
22
+ }
23
+ exports.default = BasicField;
@@ -0,0 +1,12 @@
1
+ export declare const useStyles: (params: void, styleOverrides?: {
2
+ props: any;
3
+ ownerState?: Record<string, unknown> | undefined;
4
+ } | undefined) => {
5
+ classes: Record<"fieldValue", string>;
6
+ theme: import("@mui/material").Theme;
7
+ css: import("tss-react").Css;
8
+ cx: import("tss-react").Cx;
9
+ };
10
+ export default function BasicValue({ value }: {
11
+ value: unknown;
12
+ }): JSX.Element;
@@ -0,0 +1,26 @@
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
+ exports.useStyles = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const mui_1 = require("tss-react/mui");
9
+ const ui_1 = require("../../ui");
10
+ const is_object_1 = __importDefault(require("is-object"));
11
+ const material_1 = require("@mui/material");
12
+ exports.useStyles = (0, mui_1.makeStyles)()(theme => ({
13
+ fieldValue: {
14
+ wordBreak: 'break-word',
15
+ maxHeight: 300,
16
+ fontSize: 12,
17
+ padding: theme.spacing(0.5),
18
+ overflow: 'auto',
19
+ },
20
+ }));
21
+ function BasicValue({ value }) {
22
+ const { classes } = (0, exports.useStyles)();
23
+ const isLink = `${value}`.match(/^https?:\/\//);
24
+ return (react_1.default.createElement("div", { className: classes.fieldValue }, react_1.default.isValidElement(value) ? (value) : isLink ? (react_1.default.createElement(material_1.Link, { href: `${value}` }, `${value}`)) : (react_1.default.createElement(ui_1.SanitizedHTML, { html: (0, is_object_1.default)(value) ? JSON.stringify(value) : String(value) }))));
25
+ }
26
+ exports.default = BasicValue;
@@ -0,0 +1,14 @@
1
+ export declare const useStyles: (params: void, styleOverrides?: {
2
+ props: any;
3
+ ownerState?: Record<string, unknown> | undefined;
4
+ } | undefined) => {
5
+ classes: Record<"margin", string>;
6
+ theme: import("@mui/material").Theme;
7
+ css: import("tss-react").Css;
8
+ cx: import("tss-react").Cx;
9
+ };
10
+ export default function DataGridDetails({ value, prefix, name, }: {
11
+ name: string;
12
+ prefix?: string[];
13
+ value: Record<string, unknown>[];
14
+ }): JSX.Element | null;
@@ -0,0 +1,98 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.useStyles = void 0;
30
+ const react_1 = __importStar(require("react"));
31
+ const mui_1 = require("tss-react/mui");
32
+ const x_data_grid_1 = require("@mui/x-data-grid");
33
+ const material_1 = require("@mui/material");
34
+ // locals
35
+ const util_1 = require("../../util");
36
+ const ResizeBar_1 = __importStar(require("../../ui/ResizeBar"));
37
+ const FieldName_1 = __importDefault(require("./FieldName"));
38
+ const UriLink_1 = __importDefault(require("./UriLink"));
39
+ exports.useStyles = (0, mui_1.makeStyles)()(theme => ({
40
+ margin: {
41
+ margin: theme.spacing(1),
42
+ width: '100%',
43
+ },
44
+ }));
45
+ function DataGridDetails({ value, prefix, name, }) {
46
+ const { classes } = (0, exports.useStyles)();
47
+ const { ref, scrollLeft } = (0, ResizeBar_1.useResizeBar)();
48
+ const [checked, setChecked] = (0, react_1.useState)(false);
49
+ const keys = Object.keys(value[0]).sort();
50
+ const unionKeys = new Set(keys);
51
+ // avoids key 'id' from being used in row data
52
+ const rows = Object.entries(value).map(([k, val]) => {
53
+ const { id, ...rest } = val;
54
+ return {
55
+ id: k,
56
+ identifier: id,
57
+ ...rest,
58
+ };
59
+ });
60
+ for (const val of value) {
61
+ for (const k of Object.keys(val)) {
62
+ unionKeys.add(k);
63
+ }
64
+ }
65
+ // avoids key 'id' from being used in column names, and tries
66
+ // to make it at the start of the colNames array
67
+ let colNames;
68
+ if (unionKeys.has('id')) {
69
+ unionKeys.delete('id');
70
+ colNames = ['identifier', ...unionKeys];
71
+ }
72
+ else {
73
+ colNames = [...unionKeys];
74
+ }
75
+ const [widths, setWidths] = (0, react_1.useState)(colNames.map(e => (0, util_1.measureGridWidth)(rows.map(r => r[e]))));
76
+ if (unionKeys.size < keys.length + 5) {
77
+ return (react_1.default.createElement(react_1.default.Fragment, null,
78
+ react_1.default.createElement(FieldName_1.default, { prefix: prefix, name: name }),
79
+ react_1.default.createElement(material_1.FormControlLabel, { control: react_1.default.createElement(material_1.Checkbox, { checked: checked, onChange: event => setChecked(event.target.checked) }), label: react_1.default.createElement(material_1.Typography, { variant: "body2" }, "Show options") }),
80
+ react_1.default.createElement("div", { className: classes.margin, ref: ref },
81
+ react_1.default.createElement(ResizeBar_1.default, { widths: widths, setWidths: setWidths, scrollLeft: scrollLeft }),
82
+ react_1.default.createElement(x_data_grid_1.DataGrid, { disableRowSelectionOnClick: true,
83
+ // @ts-expect-error the rows gets confused by the renderCell of the
84
+ // columns below
85
+ rows: rows, rowCount: 25, rowHeight: 25, columnHeaderHeight: 35, hideFooter: rows.length < 25, slots: { toolbar: checked ? x_data_grid_1.GridToolbar : null }, slotProps: {
86
+ toolbar: { printOptions: { disableToolbarButton: true } },
87
+ }, columns: colNames.map((val, index) => ({
88
+ field: val,
89
+ renderCell: params => {
90
+ const value = params.value;
91
+ return (0, util_1.isUriLocation)(value) ? (react_1.default.createElement(UriLink_1.default, { value: value })) : (react_1.default.createElement(react_1.default.Fragment, null, (0, util_1.getStr)(value)));
92
+ },
93
+ width: widths[index],
94
+ })) }))));
95
+ }
96
+ return null;
97
+ }
98
+ exports.default = DataGridDetails;
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ export declare const useStyles: (params: void, styleOverrides?: {
3
+ props: any;
4
+ ownerState?: Record<string, unknown> | undefined;
5
+ } | undefined) => {
6
+ classes: Record<"fieldDescription" | "fieldName", string>;
7
+ theme: import("@mui/material").Theme;
8
+ css: import("tss-react").Css;
9
+ cx: import("tss-react").Cx;
10
+ };
11
+ export default function FieldName({ description, name, width, prefix, }: {
12
+ description?: React.ReactNode;
13
+ name: string;
14
+ prefix?: string[];
15
+ width?: number;
16
+ }): JSX.Element;
@@ -0,0 +1,32 @@
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
+ exports.useStyles = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const material_1 = require("@mui/material");
9
+ const mui_1 = require("tss-react/mui");
10
+ exports.useStyles = (0, mui_1.makeStyles)()(theme => ({
11
+ fieldDescription: {
12
+ '&:hover': {
13
+ background: theme.palette.mode === 'dark' ? '#e65100' : 'yellow',
14
+ },
15
+ },
16
+ fieldName: {
17
+ wordBreak: 'break-all',
18
+ minWidth: 90,
19
+ borderBottom: '1px solid #0003',
20
+ fontSize: 12,
21
+ background: theme.palette.action.disabledBackground,
22
+ marginRight: theme.spacing(1),
23
+ padding: theme.spacing(0.5),
24
+ },
25
+ }));
26
+ function FieldName({ description, name, width, prefix = [], }) {
27
+ const { classes, cx } = (0, exports.useStyles)();
28
+ const val = [...prefix, name].join('.');
29
+ return description ? (react_1.default.createElement(material_1.Tooltip, { title: description, placement: "left" },
30
+ react_1.default.createElement("div", { className: cx(classes.fieldDescription, classes.fieldName) }, val))) : (react_1.default.createElement("div", { className: classes.fieldName, style: { width: width } }, val));
31
+ }
32
+ exports.default = FieldName;
@@ -0,0 +1,17 @@
1
+ export declare const useStyles: (params: void, styleOverrides?: {
2
+ props: any;
3
+ ownerState?: Record<string, unknown> | undefined;
4
+ } | undefined) => {
5
+ classes: Record<"field", string>;
6
+ theme: import("@mui/material").Theme;
7
+ css: import("tss-react").Css;
8
+ cx: import("tss-react").Cx;
9
+ };
10
+ export default function UriField({ value, prefix, name, }: {
11
+ value: {
12
+ uri: string;
13
+ baseUri?: string;
14
+ };
15
+ name: string;
16
+ prefix: string[];
17
+ }): JSX.Element;
@@ -0,0 +1,31 @@
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
+ exports.useStyles = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const FieldName_1 = __importDefault(require("./FieldName"));
9
+ const mui_1 = require("tss-react/mui");
10
+ const BasicValue_1 = __importDefault(require("./BasicValue"));
11
+ exports.useStyles = (0, mui_1.makeStyles)()({
12
+ field: {
13
+ display: 'flex',
14
+ flexWrap: 'wrap',
15
+ },
16
+ });
17
+ function UriField({ value, prefix, name, }) {
18
+ const { classes } = (0, exports.useStyles)();
19
+ const { uri, baseUri = '' } = value;
20
+ let href;
21
+ try {
22
+ href = new URL(uri, baseUri).href;
23
+ }
24
+ catch (e) {
25
+ href = uri;
26
+ }
27
+ return (react_1.default.createElement("div", { className: classes.field },
28
+ react_1.default.createElement(FieldName_1.default, { prefix: prefix, name: name }),
29
+ react_1.default.createElement(BasicValue_1.default, { value: href })));
30
+ }
31
+ exports.default = UriField;
@@ -0,0 +1,6 @@
1
+ export default function UriLink({ value, }: {
2
+ value: {
3
+ uri: string;
4
+ baseUri?: string;
5
+ };
6
+ }): JSX.Element;
@@ -0,0 +1,13 @@
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 util_1 = require("../../util");
8
+ const ui_1 = require("../../ui");
9
+ function UriLink({ value, }) {
10
+ const href = (0, util_1.getUriLink)(value);
11
+ return react_1.default.createElement(ui_1.SanitizedHTML, { html: `<a href="${href}">${href}</a>` });
12
+ }
13
+ exports.default = UriLink;
@@ -1,12 +1,12 @@
1
1
  import React from 'react';
2
2
  import { IAnyStateTreeNode } from 'mobx-state-tree';
3
- import { BaseCardProps, BaseProps } from './types';
4
- import { SimpleFeatureSerializedNoId } from '../util/simpleFeature';
3
+ import { BaseCardProps, BaseProps } from '../types';
4
+ import { SimpleFeatureSerialized } from '../../util/simpleFeature';
5
5
  export declare const useStyles: (params: void, styleOverrides?: {
6
6
  props: any;
7
7
  ownerState?: Record<string, unknown> | undefined;
8
8
  } | undefined) => {
9
- classes: Record<"expansionPanelDetails" | "expandIcon" | "field" | "fieldDescription" | "fieldName" | "fieldValue" | "fieldSubvalue", string>;
9
+ classes: Record<"expandIcon" | "expansionPanelDetails" | "field" | "fieldDescription" | "fieldName" | "fieldValue" | "fieldSubvalue", string>;
10
10
  theme: import("@mui/material").Theme;
11
11
  css: import("tss-react").Css;
12
12
  cx: import("tss-react").Cx;
@@ -53,7 +53,7 @@ export interface BaseInputProps extends BaseCardProps {
53
53
  }
54
54
  export declare function FeatureDetails(props: {
55
55
  model: IAnyStateTreeNode;
56
- feature: SimpleFeatureSerializedNoId;
56
+ feature: SimpleFeatureSerialized;
57
57
  depth?: number;
58
58
  omit?: string[];
59
59
  formatter?: (val: unknown, key: string) => React.ReactNode;
@@ -38,10 +38,10 @@ const is_object_1 = __importDefault(require("is-object"));
38
38
  // icons
39
39
  const ExpandMore_1 = __importDefault(require("@mui/icons-material/ExpandMore"));
40
40
  // locals
41
- const util_1 = require("../util");
42
- const ui_1 = require("../ui");
43
- const SequenceFeatureDetails_1 = __importDefault(require("./SequenceFeatureDetails"));
44
- const util_2 = require("./util");
41
+ const util_1 = require("../../util");
42
+ const ui_1 = require("../../ui");
43
+ const SequenceFeatureDetails_1 = __importDefault(require("../SequenceFeatureDetails"));
44
+ const util_2 = require("../util");
45
45
  const MAX_FIELD_NAME_WIDTH = 170;
46
46
  // these are always omitted as too detailed
47
47
  const globalOmit = [
@@ -254,7 +254,7 @@ function DataGridDetails({ value, prefix, name, }) {
254
254
  height,
255
255
  width: '100%',
256
256
  } },
257
- react_1.default.createElement(x_data_grid_1.DataGrid, { disableSelectionOnClick: true, rowHeight: rowHeight, rows: rows, hideFooterSelectedRowCount: true, columns: columns, hideFooter: hideFoot }))));
257
+ react_1.default.createElement(x_data_grid_1.DataGrid, { disableRowSelectionOnClick: true, rowHeight: rowHeight, rows: rows, hideFooterSelectedRowCount: true, columns: columns, hideFooter: hideFoot }))));
258
258
  }
259
259
  return null;
260
260
  }
@@ -337,7 +337,7 @@ function generateTitle(name, id, type) {
337
337
  }
338
338
  function FeatureDetails(props) {
339
339
  const { omit = [], model, feature, depth = 0 } = props;
340
- const { mate, name = '', id = '', type = '', subfeatures } = feature;
340
+ const { mate, name = '', id = '', type = '', subfeatures, uniqueId } = feature;
341
341
  const pm = (0, util_1.getEnv)(model).pluginManager;
342
342
  const session = (0, util_1.getSession)(model);
343
343
  const ExtraPanel = pm.evaluateExtensionPoint('Core-extraFeaturePanel', null, {
@@ -351,7 +351,7 @@ function FeatureDetails(props) {
351
351
  mate ? (react_1.default.createElement(react_1.default.Fragment, null,
352
352
  react_1.default.createElement(material_1.Divider, null),
353
353
  react_1.default.createElement(material_1.Typography, null, "Mate details"),
354
- react_1.default.createElement(CoreDetails, { ...props, feature: mate }))) : null,
354
+ react_1.default.createElement(CoreDetails, { ...props, feature: { ...mate, uniqueId: uniqueId + '-mate' } }))) : null,
355
355
  react_1.default.createElement(material_1.Divider, null),
356
356
  react_1.default.createElement(material_1.Typography, null, "Attributes"),
357
357
  react_1.default.createElement(Attributes, { attributes: feature, ...props, omit: omit, omitSingleLevel: coreDetails }),
@@ -361,11 +361,14 @@ function FeatureDetails(props) {
361
361
  react_1.default.createElement(material_1.Divider, null),
362
362
  react_1.default.createElement(BaseCard, { title: ExtraPanel.name },
363
363
  react_1.default.createElement(ExtraPanel.Component, { ...props })))) : null,
364
- (subfeatures === null || subfeatures === void 0 ? void 0 : subfeatures.length) ? (react_1.default.createElement(BaseCard, { title: "Subfeatures", defaultExpanded: depth < 1 }, subfeatures.map(sub => (react_1.default.createElement(FeatureDetails, { key: JSON.stringify(sub), feature: sub, model: model, depth: depth + 1 }))))) : null));
364
+ (subfeatures === null || subfeatures === void 0 ? void 0 : subfeatures.length) ? (react_1.default.createElement(BaseCard, { title: "Subfeatures", defaultExpanded: depth < 1 }, subfeatures.map((sub, idx) => (react_1.default.createElement(FeatureDetails, { key: JSON.stringify(sub), feature: { ...sub, uniqueId: `${uniqueId}_${idx}` }, model: model, depth: depth + 1 }))))) : null));
365
365
  }
366
366
  exports.FeatureDetails = FeatureDetails;
367
367
  exports.default = (0, mobx_react_1.observer)(function ({ model }) {
368
- const { featureData } = model;
368
+ const { error, featureData } = model;
369
+ if (error) {
370
+ return react_1.default.createElement(ui_1.ErrorMessage, { error: error });
371
+ }
369
372
  if (!featureData) {
370
373
  return null;
371
374
  }
@@ -0,0 +1,4 @@
1
+ export declare function isEmpty(obj: Record<string, unknown>): boolean;
2
+ export declare function generateTitle(name: unknown, id: unknown, type: unknown): string;
3
+ export declare function generateMaxWidth(array: unknown[][], prefix: string[]): number;
4
+ export declare function toLocale(n: number): string;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toLocale = exports.generateMaxWidth = exports.generateTitle = exports.isEmpty = void 0;
4
+ const util_1 = require("../../util");
5
+ const util_2 = require("../util");
6
+ function isEmpty(obj) {
7
+ return Object.keys(obj).length === 0;
8
+ }
9
+ exports.isEmpty = isEmpty;
10
+ function generateTitle(name, id, type) {
11
+ return [(0, util_2.ellipses)(`${name}` || `${id}`), `${type}`]
12
+ .filter(f => !!f)
13
+ .join(' - ');
14
+ }
15
+ exports.generateTitle = generateTitle;
16
+ function generateMaxWidth(array, prefix) {
17
+ return (Math.ceil((0, util_1.max)(array.map(key => (0, util_1.measureText)([...prefix, key[0]].join('.'), 12)))) + 10);
18
+ }
19
+ exports.generateMaxWidth = generateMaxWidth;
20
+ function toLocale(n) {
21
+ return n.toLocaleString('en-US');
22
+ }
23
+ exports.toLocale = toLocale;
@@ -0,0 +1,12 @@
1
+ import { Feat } from '../util';
2
+ export default function CDNASequence({ utr, cds, exons, sequence, upstream, downstream, includeIntrons, collapseIntron, intronBp, }: {
3
+ utr: Feat[];
4
+ cds: Feat[];
5
+ exons: Feat[];
6
+ sequence: string;
7
+ upstream?: string;
8
+ downstream?: string;
9
+ includeIntrons?: boolean;
10
+ collapseIntron?: boolean;
11
+ intronBp: number;
12
+ }): JSX.Element;
@@ -0,0 +1,25 @@
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 util_1 = require("./util");
8
+ function CDNASequence({ utr, cds, exons, sequence, upstream, downstream, includeIntrons, collapseIntron, intronBp, }) {
9
+ const chunks = (cds.length ? [...cds, ...utr].sort((a, b) => a.start - b.start) : exons).filter(f => f.start !== f.end);
10
+ return (react_1.default.createElement(react_1.default.Fragment, null,
11
+ upstream ? (react_1.default.createElement("span", { style: { background: util_1.updownstreamColor } }, upstream)) : null,
12
+ chunks.map((chunk, idx) => {
13
+ var _a;
14
+ const intron = sequence.slice(chunk.end, (_a = chunks[idx + 1]) === null || _a === void 0 ? void 0 : _a.start);
15
+ return (react_1.default.createElement(react_1.default.Fragment, { key: JSON.stringify(chunk) },
16
+ react_1.default.createElement("span", { style: {
17
+ background: chunk.type === 'CDS' ? util_1.cdsColor : util_1.utrColor,
18
+ } }, sequence.slice(chunk.start, chunk.end)),
19
+ includeIntrons && idx < chunks.length - 1 ? (react_1.default.createElement("span", { style: { background: util_1.intronColor } }, collapseIntron && intron.length > intronBp * 2
20
+ ? `${intron.slice(0, intronBp)}...${intron.slice(-intronBp)}`
21
+ : intron)) : null));
22
+ }),
23
+ downstream ? (react_1.default.createElement("span", { style: { background: util_1.updownstreamColor } }, downstream)) : null));
24
+ }
25
+ exports.default = CDNASequence;
@@ -0,0 +1,5 @@
1
+ import { Feat } from '../util';
2
+ export default function CDSSequence({ cds, sequence, }: {
3
+ cds: Feat[];
4
+ sequence: string;
5
+ }): JSX.Element;
@@ -0,0 +1,12 @@
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 util_1 = require("./util");
8
+ const util_2 = require("../util");
9
+ function CDSSequence({ cds, sequence, }) {
10
+ return react_1.default.createElement("span", { style: { background: util_1.cdsColor } }, (0, util_2.stitch)(cds, sequence));
11
+ }
12
+ exports.default = CDSSequence;