@jbrowse/core 2.0.1 → 2.1.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 (179) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail.d.ts +6 -0
  2. package/BaseFeatureWidget/BaseFeatureDetail.js +313 -592
  3. package/BaseFeatureWidget/SequenceFeatureDetails.js +213 -479
  4. package/BaseFeatureWidget/index.js +88 -126
  5. package/BaseFeatureWidget/types.js +1 -4
  6. package/BaseFeatureWidget/util.js +40 -75
  7. package/CorePlugin.js +55 -94
  8. package/Plugin.js +9 -34
  9. package/PluginLoader.js +153 -422
  10. package/PluginManager.d.ts +17 -14
  11. package/PluginManager.js +377 -666
  12. package/ReExports/Attributes.js +3 -10
  13. package/ReExports/BaseCard.js +3 -10
  14. package/ReExports/DataGrid.js +5 -12
  15. package/ReExports/FeatureDetails.js +3 -10
  16. package/ReExports/index.js +6 -12
  17. package/ReExports/list.d.ts +5 -0
  18. package/ReExports/list.js +271 -7
  19. package/ReExports/material-ui-colors.js +15 -16
  20. package/ReExports/modules.d.ts +0 -1
  21. package/ReExports/modules.js +453 -798
  22. package/TextSearch/BaseResults.js +51 -123
  23. package/TextSearch/TextSearchManager.js +66 -144
  24. package/assemblyManager/assembly.js +280 -555
  25. package/assemblyManager/assemblyConfigSchema.js +47 -64
  26. package/assemblyManager/assemblyManager.js +126 -272
  27. package/assemblyManager/index.js +9 -22
  28. package/configuration/configurationSchema.js +167 -203
  29. package/configuration/configurationSlot.js +248 -326
  30. package/configuration/index.js +19 -35
  31. package/configuration/util.js +131 -173
  32. package/data_adapters/BaseAdapter.d.ts +2 -2
  33. package/data_adapters/BaseAdapter.js +132 -521
  34. package/data_adapters/CytobandAdapter.js +40 -126
  35. package/data_adapters/dataAdapterCache.js +77 -158
  36. package/package.json +4 -5
  37. package/pluggableElementTypes/AdapterType.js +24 -79
  38. package/pluggableElementTypes/AddTrackWorkflowType.d.ts +17 -0
  39. package/pluggableElementTypes/AddTrackWorkflowType.js +20 -0
  40. package/pluggableElementTypes/ConnectionType.js +22 -65
  41. package/pluggableElementTypes/DisplayType.js +35 -82
  42. package/pluggableElementTypes/InternetAccountType.js +23 -64
  43. package/pluggableElementTypes/PluggableElementBase.js +8 -20
  44. package/pluggableElementTypes/RpcMethodType.js +85 -427
  45. package/pluggableElementTypes/TextSearchAdapterType.js +16 -55
  46. package/pluggableElementTypes/TrackType.js +26 -70
  47. package/pluggableElementTypes/ViewType.js +21 -63
  48. package/pluggableElementTypes/WidgetType.js +21 -64
  49. package/pluggableElementTypes/index.d.ts +4 -3
  50. package/pluggableElementTypes/index.js +42 -125
  51. package/pluggableElementTypes/models/BaseConnectionModelFactory.js +28 -43
  52. package/pluggableElementTypes/models/BaseDisplayModel.js +58 -95
  53. package/pluggableElementTypes/models/BaseTrackModel.js +139 -199
  54. package/pluggableElementTypes/models/BaseViewModel.js +24 -40
  55. package/pluggableElementTypes/models/InternetAccountModel.js +116 -263
  56. package/pluggableElementTypes/models/baseConnectionConfig.js +14 -25
  57. package/pluggableElementTypes/models/baseInternetAccountConfig.js +29 -38
  58. package/pluggableElementTypes/models/baseTrackConfig.js +106 -133
  59. package/pluggableElementTypes/models/index.js +21 -70
  60. package/pluggableElementTypes/renderers/BoxRendererType.js +132 -291
  61. package/pluggableElementTypes/renderers/CircularChordRendererType.js +8 -38
  62. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +60 -192
  63. package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +0 -2
  64. package/pluggableElementTypes/renderers/FeatureRendererType.js +89 -264
  65. package/pluggableElementTypes/renderers/RendererType.js +31 -105
  66. package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +61 -72
  67. package/pluggableElementTypes/renderers/ServerSideRendererType.js +112 -265
  68. package/pluggableElementTypes/renderers/index.js +19 -62
  69. package/pluggableElementTypes/renderers/util/serializableFilterChain.js +27 -65
  70. package/rpc/BaseRpcDriver.js +169 -405
  71. package/rpc/MainThreadRpcDriver.js +27 -150
  72. package/rpc/RpcManager.js +58 -159
  73. package/rpc/WebWorkerRpcDriver.js +54 -171
  74. package/rpc/configSchema.js +25 -49
  75. package/rpc/coreRpcMethods.js +221 -959
  76. package/rpc/remoteAbortSignals.js +46 -70
  77. package/tsconfig.build.tsbuildinfo +1 -1
  78. package/ui/AboutDialog.js +106 -162
  79. package/ui/App.js +157 -242
  80. package/ui/AssemblySelector.js +59 -120
  81. package/ui/CascadingMenu.js +101 -196
  82. package/ui/ColorPicker.d.ts +16 -0
  83. package/ui/ColorPicker.js +97 -0
  84. package/ui/Drawer.js +28 -61
  85. package/ui/DrawerWidget.js +108 -202
  86. package/ui/DropDownMenu.js +60 -91
  87. package/ui/EditableTypography.js +87 -149
  88. package/ui/ErrorMessage.js +41 -56
  89. package/ui/FactoryResetDialog.js +24 -57
  90. package/ui/FatalErrorDialog.js +59 -91
  91. package/ui/FileSelector/FileSelector.js +123 -189
  92. package/ui/FileSelector/LocalFileChooser.js +44 -75
  93. package/ui/FileSelector/UrlChooser.js +17 -38
  94. package/ui/FileSelector/index.js +6 -12
  95. package/ui/Icons.js +45 -69
  96. package/ui/Logo.js +57 -110
  97. package/ui/Menu.js +232 -354
  98. package/ui/PrerenderedCanvas.js +63 -87
  99. package/ui/ResizeHandle.js +87 -116
  100. package/ui/ReturnToImportFormDialog.js +32 -63
  101. package/ui/SanitizedHTML.js +64 -47
  102. package/ui/Snackbar.js +74 -101
  103. package/ui/SnackbarModel.js +37 -51
  104. package/ui/Tooltip.js +49 -76
  105. package/ui/ViewContainer.js +113 -196
  106. package/ui/colors.d.ts +10 -0
  107. package/ui/colors.js +78 -0
  108. package/ui/index.js +51 -181
  109. package/ui/react-colorful.d.ts +17 -0
  110. package/ui/react-colorful.js +455 -0
  111. package/ui/theme.js +199 -247
  112. package/util/Base1DUtils.js +163 -202
  113. package/util/Base1DViewModel.js +121 -168
  114. package/util/QuickLRU.js +84 -332
  115. package/util/TimeTraveller.d.ts +19 -0
  116. package/util/TimeTraveller.js +86 -0
  117. package/util/aborting.js +49 -127
  118. package/util/analytics.js +91 -154
  119. package/util/blockTypes.js +106 -240
  120. package/util/calculateDynamicBlocks.js +98 -128
  121. package/util/calculateStaticBlocks.js +105 -125
  122. package/util/color/cssColorsLevel4.js +156 -160
  123. package/util/color/index.js +33 -55
  124. package/util/compositeMap.js +49 -333
  125. package/util/formatFastaStrings.js +9 -14
  126. package/util/idMaker.js +18 -31
  127. package/util/index.d.ts +7 -20
  128. package/util/index.js +742 -1188
  129. package/util/io/RemoteFileWithRangeCache.js +88 -257
  130. package/util/io/index.js +95 -169
  131. package/util/jexl.js +60 -115
  132. package/util/jexlStrings.js +24 -29
  133. package/util/layouts/BaseLayout.js +1 -4
  134. package/util/layouts/GranularRectLayout.js +388 -555
  135. package/util/layouts/MultiLayout.js +41 -109
  136. package/util/layouts/PrecomputedLayout.js +56 -112
  137. package/util/layouts/PrecomputedMultiLayout.js +22 -59
  138. package/util/layouts/SceneGraph.js +127 -197
  139. package/util/layouts/index.js +29 -66
  140. package/util/mst-reflection.js +55 -71
  141. package/util/offscreenCanvasPonyfill.js +66 -134
  142. package/util/offscreenCanvasUtils.d.ts +2 -7
  143. package/util/offscreenCanvasUtils.js +49 -146
  144. package/util/range.js +29 -40
  145. package/util/rxjs.js +20 -27
  146. package/util/simpleFeature.js +88 -152
  147. package/util/stats.js +91 -151
  148. package/util/tracks.js +130 -173
  149. package/util/types/index.js +110 -179
  150. package/util/types/mst.js +91 -146
  151. package/util/types/util.js +1 -4
  152. package/util/when.js +54 -101
  153. package/BaseFeatureWidget/SequenceFeatureDetails.test.js +0 -122
  154. package/BaseFeatureWidget/index.test.js +0 -69
  155. package/TextSearch/BaseResults.test.js +0 -42
  156. package/configuration/configurationSchema.test.js +0 -266
  157. package/configuration/configurationSlot.test.js +0 -69
  158. package/configuration/util.test.js +0 -39
  159. package/data_adapters/BaseAdapter.test.js +0 -200
  160. package/declare.d.js +0 -1
  161. package/pluggableElementTypes/RpcMethodType.test.js +0 -118
  162. package/pluggableElementTypes/renderers/declare.d.js +0 -1
  163. package/pluggableElementTypes/renderers/util/serializableFilterChain.test.js +0 -20
  164. package/rpc/BaseRpcDriver.test.js +0 -540
  165. package/rpc/declaration.d.js +0 -1
  166. package/ui/FatalErrorDialog.test.js +0 -82
  167. package/ui/SanitizedHTML.test.js +0 -36
  168. package/ui/theme.test.js +0 -92
  169. package/util/Base1DViewModel.test.js +0 -130
  170. package/util/calculateDynamicBlocks.test.js +0 -74
  171. package/util/calculateStaticBlocks.test.js +0 -297
  172. package/util/declare.d.js +0 -1
  173. package/util/formatFastaStrings.test.js +0 -40
  174. package/util/index.test.js +0 -213
  175. package/util/jexlStrings.test.js +0 -48
  176. package/util/layouts/GranularRectLayout.test.js +0 -99
  177. package/util/range.test.js +0 -64
  178. package/util/simpleFeature.test.js +0 -34
  179. package/util/stats.test.js +0 -172
@@ -1,636 +1,357 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
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;
9
17
  });
10
- exports.Attributes = Attributes;
11
- exports.BaseAttributes = void 0;
12
- exports.BaseCard = BaseCard;
13
- exports.useStyles = exports.default = exports.SimpleValue = exports.FieldName = exports.FeatureDetails = exports.BasicValue = exports.BaseCoreDetails = void 0;
14
-
15
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
16
-
17
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
18
-
19
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
20
-
21
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
22
-
23
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
24
-
25
- var _react = _interopRequireWildcard(require("react"));
26
-
27
- var _reactErrorBoundary = require("react-error-boundary");
28
-
29
- var _material = require("@mui/material");
30
-
31
- var _mui = require("tss-react/mui");
32
-
33
- var _ExpandMore = _interopRequireDefault(require("@mui/icons-material/ExpandMore"));
34
-
35
- var _xDataGrid = require("@mui/x-data-grid");
36
-
37
- var _mobxReact = require("mobx-react");
38
-
39
- var _isObject = _interopRequireDefault(require("is-object"));
40
-
41
- var _configuration = require("../configuration");
42
-
43
- var _util = require("../util");
44
-
45
- var _SanitizedHTML = _interopRequireDefault(require("../ui/SanitizedHTML"));
46
-
47
- var _SequenceFeatureDetails = _interopRequireDefault(require("./SequenceFeatureDetails"));
48
-
49
- var _util2 = require("./util");
50
-
51
- var _excluded = ["id"],
52
- _excluded2 = ["__jbrowsefmt"];
53
-
54
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
55
-
56
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
57
-
58
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
59
-
60
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
61
-
62
- var MAX_FIELD_NAME_WIDTH = 170; // these are always omitted as too detailed
63
-
64
- var globalOmit = ['__jbrowsefmt', 'length', 'position', 'subfeatures', 'uniqueId', 'exonFrames', 'parentId', 'thickStart', 'thickEnd']; // coreDetails are omitted in some circumstances
65
-
66
- var coreDetails = ['name', 'start', 'end', 'strand', 'refName', 'description', 'type'];
67
- var useStyles = (0, _mui.makeStyles)()(function (theme) {
68
- return {
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.FeatureDetails = exports.BaseAttributes = exports.Attributes = exports.UriLink = exports.BaseCoreDetails = exports.SimpleValue = exports.BasicValue = exports.FieldName = exports.BaseCard = exports.useStyles = void 0;
30
+ /* eslint-disable @typescript-eslint/no-explicit-any */
31
+ const react_1 = __importStar(require("react"));
32
+ const react_error_boundary_1 = require("react-error-boundary");
33
+ const material_1 = require("@mui/material");
34
+ const mui_1 = require("tss-react/mui");
35
+ const ExpandMore_1 = __importDefault(require("@mui/icons-material/ExpandMore"));
36
+ const x_data_grid_1 = require("@mui/x-data-grid");
37
+ const mobx_react_1 = require("mobx-react");
38
+ const is_object_1 = __importDefault(require("is-object"));
39
+ // locals
40
+ const configuration_1 = require("../configuration");
41
+ const util_1 = require("../util");
42
+ const SanitizedHTML_1 = __importDefault(require("../ui/SanitizedHTML"));
43
+ const SequenceFeatureDetails_1 = __importDefault(require("./SequenceFeatureDetails"));
44
+ const util_2 = require("./util");
45
+ const MAX_FIELD_NAME_WIDTH = 170;
46
+ // these are always omitted as too detailed
47
+ const globalOmit = [
48
+ '__jbrowsefmt',
49
+ 'length',
50
+ 'position',
51
+ 'subfeatures',
52
+ 'uniqueId',
53
+ 'exonFrames',
54
+ 'parentId',
55
+ 'thickStart',
56
+ 'thickEnd',
57
+ ];
58
+ // coreDetails are omitted in some circumstances
59
+ const coreDetails = [
60
+ 'name',
61
+ 'start',
62
+ 'end',
63
+ 'strand',
64
+ 'refName',
65
+ 'description',
66
+ 'type',
67
+ ];
68
+ exports.useStyles = (0, mui_1.makeStyles)()(theme => ({
69
69
  expansionPanelDetails: {
70
- display: 'block',
71
- padding: theme.spacing(1)
70
+ display: 'block',
71
+ padding: theme.spacing(1),
72
72
  },
73
73
  expandIcon: {
74
- color: '#FFFFFF'
74
+ color: '#FFFFFF',
75
75
  },
76
76
  field: {
77
- display: 'flex',
78
- flexWrap: 'wrap'
77
+ display: 'flex',
78
+ flexWrap: 'wrap',
79
79
  },
80
80
  fieldDescription: {
81
- '&:hover': {
82
- background: 'yellow'
83
- }
81
+ '&:hover': {
82
+ background: 'yellow',
83
+ },
84
84
  },
85
85
  fieldName: {
86
- wordBreak: 'break-all',
87
- minWidth: '90px',
88
- borderBottom: '1px solid #0003',
89
- fontSize: 12,
90
- background: theme.palette.grey[200],
91
- marginRight: theme.spacing(1),
92
- padding: theme.spacing(0.5)
86
+ wordBreak: 'break-all',
87
+ minWidth: 90,
88
+ borderBottom: '1px solid #0003',
89
+ fontSize: 12,
90
+ background: theme.palette.grey[200],
91
+ marginRight: theme.spacing(1),
92
+ padding: theme.spacing(0.5),
93
93
  },
94
94
  fieldValue: {
95
- wordBreak: 'break-word',
96
- maxHeight: 300,
97
- fontSize: 12,
98
- padding: theme.spacing(0.5),
99
- overflow: 'auto'
95
+ wordBreak: 'break-word',
96
+ maxHeight: 300,
97
+ fontSize: 12,
98
+ padding: theme.spacing(0.5),
99
+ overflow: 'auto',
100
100
  },
101
101
  fieldSubvalue: {
102
- wordBreak: 'break-word',
103
- maxHeight: 300,
104
- padding: theme.spacing(0.5),
105
- background: theme.palette.grey[100],
106
- border: "1px solid ".concat(theme.palette.grey[300]),
107
- boxSizing: 'border-box',
108
- overflow: 'auto'
109
- }
110
- };
111
- });
112
- exports.useStyles = useStyles;
113
-
114
- function BaseCard(_ref) {
115
- var children = _ref.children,
116
- title = _ref.title,
117
- _ref$defaultExpanded = _ref.defaultExpanded,
118
- defaultExpanded = _ref$defaultExpanded === void 0 ? true : _ref$defaultExpanded;
119
-
120
- var _useStyles = useStyles(),
121
- classes = _useStyles.classes;
122
-
123
- var _useState = (0, _react.useState)(defaultExpanded),
124
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
125
- expanded = _useState2[0],
126
- setExpanded = _useState2[1];
127
-
128
- return /*#__PURE__*/_react.default.createElement(_material.Accordion, {
129
- expanded: expanded,
130
- onChange: function onChange() {
131
- return setExpanded(function (s) {
132
- return !s;
133
- });
102
+ wordBreak: 'break-word',
103
+ maxHeight: 300,
104
+ padding: theme.spacing(0.5),
105
+ background: theme.palette.grey[100],
106
+ border: `1px solid ${theme.palette.grey[300]}`,
107
+ boxSizing: 'border-box',
108
+ overflow: 'auto',
134
109
  },
135
- TransitionProps: {
136
- unmountOnExit: true
137
- }
138
- }, /*#__PURE__*/_react.default.createElement(_material.AccordionSummary, {
139
- expandIcon: /*#__PURE__*/_react.default.createElement(_ExpandMore.default, {
140
- className: classes.expandIcon
141
- })
142
- }, /*#__PURE__*/_react.default.createElement(_material.Typography, {
143
- variant: "button"
144
- }, " ", title)), /*#__PURE__*/_react.default.createElement(_material.AccordionDetails, {
145
- className: classes.expansionPanelDetails
146
- }, children));
110
+ }));
111
+ function BaseCard({ children, title, defaultExpanded = true, }) {
112
+ const { classes } = (0, exports.useStyles)();
113
+ const [expanded, setExpanded] = (0, react_1.useState)(defaultExpanded);
114
+ return (react_1.default.createElement(material_1.Accordion, { expanded: expanded, onChange: () => setExpanded(s => !s), TransitionProps: { unmountOnExit: true } },
115
+ react_1.default.createElement(material_1.AccordionSummary, { expandIcon: react_1.default.createElement(ExpandMore_1.default, { className: classes.expandIcon }) },
116
+ react_1.default.createElement(material_1.Typography, { variant: "button" },
117
+ " ",
118
+ title)),
119
+ react_1.default.createElement(material_1.AccordionDetails, { className: classes.expansionPanelDetails }, children)));
147
120
  }
148
-
149
- var FieldName = function FieldName(_ref2) {
150
- var description = _ref2.description,
151
- name = _ref2.name,
152
- width = _ref2.width,
153
- _ref2$prefix = _ref2.prefix,
154
- prefix = _ref2$prefix === void 0 ? [] : _ref2$prefix;
155
-
156
- var _useStyles2 = useStyles(),
157
- classes = _useStyles2.classes,
158
- cx = _useStyles2.cx;
159
-
160
- var val = [].concat((0, _toConsumableArray2.default)(prefix), [name]).join('.');
161
- return description ? /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
162
- title: description,
163
- placement: "left"
164
- }, /*#__PURE__*/_react.default.createElement("div", {
165
- className: cx(classes.fieldDescription, classes.fieldName)
166
- }, val)) : /*#__PURE__*/_react.default.createElement("div", {
167
- className: classes.fieldName,
168
- style: {
169
- width: width
170
- }
171
- }, val);
121
+ exports.BaseCard = BaseCard;
122
+ const FieldName = ({ description, name, width, prefix = [], }) => {
123
+ const { classes, cx } = (0, exports.useStyles)();
124
+ const val = [...prefix, name].join('.');
125
+ return description ? (react_1.default.createElement(material_1.Tooltip, { title: description, placement: "left" },
126
+ react_1.default.createElement("div", { className: cx(classes.fieldDescription, classes.fieldName) }, val))) : (react_1.default.createElement("div", { className: classes.fieldName, style: { width: width } }, val));
172
127
  };
173
-
174
128
  exports.FieldName = FieldName;
175
-
176
- var BasicValue = function BasicValue(_ref3) {
177
- var value = _ref3.value;
178
-
179
- var _useStyles3 = useStyles(),
180
- classes = _useStyles3.classes;
181
-
182
- var isLink = "".concat(value).match(/^https?:\/\//);
183
- return /*#__PURE__*/_react.default.createElement("div", {
184
- className: classes.fieldValue
185
- }, /*#__PURE__*/_react.default.isValidElement(value) ? value : isLink ? /*#__PURE__*/_react.default.createElement(_SanitizedHTML.default, {
186
- html: "<a href=\"".concat(value, "\">").concat(value, "</a>")
187
- }) : /*#__PURE__*/_react.default.createElement(_SanitizedHTML.default, {
188
- html: (0, _isObject.default)(value) ? JSON.stringify(value) : String(value)
189
- }));
129
+ const BasicValue = ({ value }) => {
130
+ const { classes } = (0, exports.useStyles)();
131
+ const isLink = `${value}`.match(/^https?:\/\//);
132
+ return (react_1.default.createElement("div", { className: classes.fieldValue }, react_1.default.isValidElement(value) ? (value) : isLink ? (react_1.default.createElement(SanitizedHTML_1.default, { html: `<a href="${value}">${value}</a>` })) : (react_1.default.createElement(SanitizedHTML_1.default, { html: (0, is_object_1.default)(value) ? JSON.stringify(value) : String(value) }))));
190
133
  };
191
-
192
134
  exports.BasicValue = BasicValue;
193
-
194
- var SimpleValue = function SimpleValue(_ref4) {
195
- var name = _ref4.name,
196
- value = _ref4.value,
197
- description = _ref4.description,
198
- prefix = _ref4.prefix,
199
- width = _ref4.width;
200
-
201
- var _useStyles4 = useStyles(),
202
- classes = _useStyles4.classes;
203
-
204
- return value !== null && value !== undefined ? /*#__PURE__*/_react.default.createElement("div", {
205
- className: classes.field
206
- }, /*#__PURE__*/_react.default.createElement(FieldName, {
207
- prefix: prefix,
208
- description: description,
209
- name: name,
210
- width: width
211
- }), /*#__PURE__*/_react.default.createElement(BasicValue, {
212
- value: value
213
- })) : null;
135
+ const SimpleValue = ({ name, value, description, prefix, width, }) => {
136
+ const { classes } = (0, exports.useStyles)();
137
+ return value !== null && value !== undefined ? (react_1.default.createElement("div", { className: classes.field },
138
+ react_1.default.createElement(exports.FieldName, { prefix: prefix, description: description, name: name, width: width }),
139
+ react_1.default.createElement(exports.BasicValue, { value: value }))) : null;
214
140
  };
215
-
216
141
  exports.SimpleValue = SimpleValue;
217
-
218
- var ArrayValue = function ArrayValue(_ref5) {
219
- var name = _ref5.name,
220
- value = _ref5.value,
221
- description = _ref5.description,
222
- _ref5$prefix = _ref5.prefix,
223
- prefix = _ref5$prefix === void 0 ? [] : _ref5$prefix;
224
-
225
- var _useStyles5 = useStyles(),
226
- classes = _useStyles5.classes;
227
-
228
- if (value.length === 1) {
229
- return (0, _isObject.default)(value[0]) ? /*#__PURE__*/_react.default.createElement(Attributes, {
230
- attributes: value[0],
231
- prefix: [].concat((0, _toConsumableArray2.default)(prefix), [name])
232
- }) : /*#__PURE__*/_react.default.createElement("div", {
233
- className: classes.field
234
- }, /*#__PURE__*/_react.default.createElement(FieldName, {
235
- prefix: prefix,
236
- description: description,
237
- name: name
238
- }), /*#__PURE__*/_react.default.createElement(BasicValue, {
239
- value: value[0]
240
- }));
241
- } else if (value.every(function (val) {
242
- return (0, _isObject.default)(val);
243
- })) {
244
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, value.map(function (val, i) {
245
- return /*#__PURE__*/_react.default.createElement(Attributes, {
246
- key: JSON.stringify(val) + '-' + i,
247
- attributes: val,
248
- prefix: [].concat((0, _toConsumableArray2.default)(prefix), [name + '-' + i])
249
- });
250
- }));
251
- } else {
252
- return /*#__PURE__*/_react.default.createElement("div", {
253
- className: classes.field
254
- }, /*#__PURE__*/_react.default.createElement(FieldName, {
255
- prefix: prefix,
256
- description: description,
257
- name: name
258
- }), value.map(function (val, i) {
259
- return /*#__PURE__*/_react.default.createElement("div", {
260
- key: JSON.stringify(val) + '-' + i,
261
- className: classes.fieldSubvalue
262
- }, /*#__PURE__*/_react.default.createElement(BasicValue, {
263
- value: val
264
- }));
265
- }));
266
- }
267
- };
268
-
269
- var toLocale = function toLocale(n) {
270
- return n.toLocaleString('en-US');
142
+ const ArrayValue = ({ name, value, description, prefix = [], }) => {
143
+ const { classes } = (0, exports.useStyles)();
144
+ if (value.length === 1) {
145
+ return (0, is_object_1.default)(value[0]) ? (react_1.default.createElement(Attributes, { attributes: value[0], prefix: [...prefix, name] })) : (react_1.default.createElement("div", { className: classes.field },
146
+ react_1.default.createElement(exports.FieldName, { prefix: prefix, description: description, name: name }),
147
+ react_1.default.createElement(exports.BasicValue, { value: value[0] })));
148
+ }
149
+ else if (value.every(val => (0, is_object_1.default)(val))) {
150
+ return (react_1.default.createElement(react_1.default.Fragment, null, value.map((val, i) => (react_1.default.createElement(Attributes, { key: JSON.stringify(val) + '-' + i, attributes: val, prefix: [...prefix, name + '-' + i] })))));
151
+ }
152
+ else {
153
+ return (react_1.default.createElement("div", { className: classes.field },
154
+ react_1.default.createElement(exports.FieldName, { prefix: prefix, description: description, name: name }),
155
+ value.map((val, i) => (react_1.default.createElement("div", { key: JSON.stringify(val) + '-' + i, className: classes.fieldSubvalue },
156
+ react_1.default.createElement(exports.BasicValue, { value: val }))))));
157
+ }
271
158
  };
272
-
159
+ const toLocale = (n) => n.toLocaleString('en-US');
273
160
  function CoreDetails(props) {
274
- var feature = props.feature;
275
- var obj = feature; // eslint-disable-next-line no-underscore-dangle
276
-
277
- var formattedFeat = _objectSpread(_objectSpread({}, obj), obj.__jbrowsefmt);
278
-
279
- var start = formattedFeat.start,
280
- strand = formattedFeat.strand,
281
- end = formattedFeat.end,
282
- refName = formattedFeat.refName;
283
- var strandMap = {
284
- '-1': '-',
285
- '0': '',
286
- '1': '+'
287
- };
288
- var str = strandMap[strand] ? "(".concat(strandMap[strand], ")") : '';
289
-
290
- var displayedDetails = _objectSpread(_objectSpread({}, formattedFeat), {}, {
291
- length: toLocale(end - start),
292
- position: "".concat(refName, ":").concat(toLocale(start + 1), "..").concat(toLocale(end), " ").concat(str)
293
- });
294
-
295
- var coreRenderedDetails = {
296
- position: 'Position',
297
- description: 'Description',
298
- name: 'Name',
299
- length: 'Length',
300
- type: 'Type',
301
- assemblyName: 'Assembly name'
302
- };
303
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, Object.entries(coreRenderedDetails).map(function (_ref6) {
304
- var _ref7 = (0, _slicedToArray2.default)(_ref6, 2),
305
- key = _ref7[0],
306
- name = _ref7[1];
307
-
308
- return [name, displayedDetails[key]];
309
- }).filter(function (_ref8) {
310
- var _ref9 = (0, _slicedToArray2.default)(_ref8, 2),
311
- value = _ref9[1];
312
-
313
- return value !== null && value !== undefined;
314
- }).map(function (_ref10) {
315
- var _ref11 = (0, _slicedToArray2.default)(_ref10, 2),
316
- name = _ref11[0],
317
- value = _ref11[1];
318
-
319
- return /*#__PURE__*/_react.default.createElement(SimpleValue, {
320
- key: name,
321
- name: name,
322
- value: value
323
- });
324
- }));
161
+ const { feature } = props;
162
+ const obj = feature;
163
+ // eslint-disable-next-line no-underscore-dangle
164
+ const formattedFeat = { ...obj, ...obj.__jbrowsefmt };
165
+ const { start, strand, end, refName } = formattedFeat;
166
+ const strandMap = {
167
+ '-1': '-',
168
+ '0': '',
169
+ '1': '+',
170
+ };
171
+ const str = strandMap[strand] ? `(${strandMap[strand]})` : '';
172
+ const displayedDetails = {
173
+ ...formattedFeat,
174
+ length: toLocale(end - start),
175
+ position: `${refName}:${toLocale(start + 1)}..${toLocale(end)} ${str}`,
176
+ };
177
+ const coreRenderedDetails = {
178
+ position: 'Position',
179
+ description: 'Description',
180
+ name: 'Name',
181
+ length: 'Length',
182
+ type: 'Type',
183
+ assemblyName: 'Assembly name',
184
+ };
185
+ return (react_1.default.createElement(react_1.default.Fragment, null, Object.entries(coreRenderedDetails)
186
+ .map(([key, name]) => [name, displayedDetails[key]])
187
+ .filter(([, value]) => value !== null && value !== undefined)
188
+ .map(([name, value]) => (react_1.default.createElement(exports.SimpleValue, { key: name, name: name, value: value })))));
325
189
  }
326
-
327
- var BaseCoreDetails = function BaseCoreDetails(props) {
328
- return /*#__PURE__*/_react.default.createElement(BaseCard, (0, _extends2.default)({}, props, {
329
- title: "Primary data"
330
- }), /*#__PURE__*/_react.default.createElement(CoreDetails, props));
190
+ const BaseCoreDetails = (props) => {
191
+ return (react_1.default.createElement(BaseCard, { ...props, title: "Primary data" },
192
+ react_1.default.createElement(CoreDetails, { ...props })));
331
193
  };
332
-
333
194
  exports.BaseCoreDetails = BaseCoreDetails;
334
-
335
- var DataGridDetails = function DataGridDetails(_ref12) {
336
- var value = _ref12.value,
337
- prefix = _ref12.prefix,
338
- name = _ref12.name;
339
- var keys = Object.keys(value[0]).sort();
340
- var unionKeys = new Set(keys);
341
- value.forEach(function (val) {
342
- return Object.keys(val).forEach(function (k) {
343
- return unionKeys.add(k);
344
- });
345
- });
346
-
347
- if (unionKeys.size < keys.length + 5) {
348
- // avoids key 'id' from being used in row data
349
- var rows = Object.entries(value).map(function (_ref13) {
350
- var _ref14 = (0, _slicedToArray2.default)(_ref13, 2),
351
- k = _ref14[0],
352
- val = _ref14[1];
353
-
354
- var id = val.id,
355
- rest = (0, _objectWithoutProperties2.default)(val, _excluded);
356
- return _objectSpread({
357
- id: k,
358
- // used by material UI
359
- identifier: id
360
- }, rest);
361
- }); // avoids key 'id' from being used in column names, and tries
362
- // to make it at the start of the colNames array
363
-
364
- var colNames;
365
-
366
- if (unionKeys.has('id')) {
367
- unionKeys.delete('id');
368
- colNames = ['identifier'].concat((0, _toConsumableArray2.default)(unionKeys));
369
- } else {
370
- colNames = (0, _toConsumableArray2.default)(unionKeys);
371
- }
372
-
373
- var getStr = function getStr(obj) {
374
- return (0, _isObject.default)(obj) ? JSON.stringify(obj) : String(obj);
375
- };
376
-
377
- var columns = colNames.map(function (val) {
378
- return {
379
- field: val,
380
- renderCell: function renderCell(val) {
381
- return getStr(val.formattedValue);
382
- },
383
- width: Math.max.apply(Math, (0, _toConsumableArray2.default)(rows.map(function (row) {
384
- return Math.min(Math.max((0, _util.measureText)(getStr(row[val]), 14) + 50, 80), 1000);
385
- })))
386
- };
387
- }); // disableSelection on click helps avoid
388
- // https://github.com/mui-org/material-ui-x/issues/1197
389
-
390
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(FieldName, {
391
- prefix: prefix,
392
- name: name
393
- }), /*#__PURE__*/_react.default.createElement("div", {
394
- style: {
395
- height: Math.min(rows.length, 100) * 20 + 50 + (rows.length < 100 ? 0 : 50),
396
- width: '100%'
397
- }
398
- }, /*#__PURE__*/_react.default.createElement(_xDataGrid.DataGrid, {
399
- disableSelectionOnClick: true,
400
- rowHeight: 25,
401
- rows: rows,
402
- rowsPerPageOptions: [],
403
- hideFooterSelectedRowCount: true,
404
- columns: columns,
405
- hideFooter: rows.length < 100
406
- })));
407
- }
408
-
409
- return null;
410
- }; // arr = ['a','b'], obj = {a:{b:'hello}}, returns hello (with special addition to grab description also)
411
-
412
-
413
- function accessNested(arr) {
414
- var _obj;
415
-
416
- var obj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
417
- arr.forEach(function (elt) {
418
- if (obj) {
419
- obj = obj[elt];
195
+ function UriLink({ value, }) {
196
+ const href = (0, util_1.getUriLink)(value);
197
+ return react_1.default.createElement(SanitizedHTML_1.default, { html: `<a href="${href}">${href}</a>` });
198
+ }
199
+ exports.UriLink = UriLink;
200
+ const DataGridDetails = ({ value, prefix, name, }) => {
201
+ const keys = Object.keys(value[0]).sort();
202
+ const unionKeys = new Set(keys);
203
+ value.forEach((val) => Object.keys(val).forEach(k => unionKeys.add(k)));
204
+ if (unionKeys.size < keys.length + 5) {
205
+ // avoids key 'id' from being used in row data
206
+ const rows = Object.entries(value).map(([k, val]) => {
207
+ const { id, ...rest } = val;
208
+ return {
209
+ id: k,
210
+ identifier: id,
211
+ ...rest,
212
+ };
213
+ });
214
+ // avoids key 'id' from being used in column names, and tries
215
+ // to make it at the start of the colNames array
216
+ let colNames;
217
+ if (unionKeys.has('id')) {
218
+ unionKeys.delete('id');
219
+ colNames = ['identifier', ...unionKeys];
220
+ }
221
+ else {
222
+ colNames = [...unionKeys];
223
+ }
224
+ const columns = colNames.map(val => ({
225
+ field: val,
226
+ renderCell: (params) => {
227
+ const { value } = params;
228
+ return (0, util_1.isUriLocation)(value) ? react_1.default.createElement(UriLink, { value: value }) : (0, util_1.getStr)(value);
229
+ },
230
+ width: (0, util_1.measureGridWidth)(rows.map(r => r[val])),
231
+ }));
232
+ const rowHeight = 25;
233
+ const hideFooter = rows.length < 100;
234
+ const headerHeight = 80;
235
+ // disableSelection on click helps avoid
236
+ // https://github.com/mui-org/material-ui-x/issues/1197
237
+ return (react_1.default.createElement(react_1.default.Fragment, null,
238
+ react_1.default.createElement(exports.FieldName, { prefix: prefix, name: name }),
239
+ react_1.default.createElement("div", { style: {
240
+ height: Math.min(rows.length, 100) * rowHeight +
241
+ headerHeight +
242
+ (hideFooter ? 0 : 50),
243
+ width: '100%',
244
+ } },
245
+ react_1.default.createElement(x_data_grid_1.DataGrid, { disableSelectionOnClick: true, rowHeight: rowHeight, rows: rows, rowsPerPageOptions: [], hideFooterSelectedRowCount: true, columns: columns, hideFooter: hideFooter }))));
420
246
  }
421
- });
422
- return typeof obj === 'string' ? obj : typeof ((_obj = obj) === null || _obj === void 0 ? void 0 : _obj.Description) === 'string' ? obj.Description : undefined;
247
+ return null;
248
+ };
249
+ // arr = ['a','b'], obj = {a:{b:'hello}}, returns hello (with special addition to grab description also)
250
+ function accessNested(arr, obj = {}) {
251
+ arr.forEach(elt => {
252
+ if (obj) {
253
+ obj = obj[elt];
254
+ }
255
+ });
256
+ return typeof obj === 'string'
257
+ ? obj
258
+ : typeof (obj === null || obj === void 0 ? void 0 : obj.Description) === 'string'
259
+ ? obj.Description
260
+ : undefined;
423
261
  }
424
-
425
262
  function generateMaxWidth(array, prefix) {
426
- // @ts-ignore
427
- var arr = [];
428
- array.forEach(function (key, value) {
429
- var val = [].concat((0, _toConsumableArray2.default)(prefix), [key[0]]).join('.');
430
- arr.push((0, _util.measureText)(val, 12));
431
- }); // @ts-ignore
432
-
433
- return Math.ceil(Math.max.apply(Math, arr)) + 10;
263
+ // @ts-ignore
264
+ const arr = [];
265
+ array.forEach((key, value) => {
266
+ const val = [...prefix, key[0]].join('.');
267
+ arr.push((0, util_1.measureText)(val, 12));
268
+ });
269
+ // @ts-ignore
270
+ return Math.ceil(Math.max(...arr)) + 10;
434
271
  }
435
-
436
- function UriAttribute(_ref15) {
437
- var value = _ref15.value,
438
- prefix = _ref15.prefix,
439
- name = _ref15.name;
440
-
441
- var _useStyles6 = useStyles(),
442
- classes = _useStyles6.classes;
443
-
444
- var uri = value.uri,
445
- _value$baseUri = value.baseUri,
446
- baseUri = _value$baseUri === void 0 ? '' : _value$baseUri;
447
- var href;
448
-
449
- try {
450
- href = new URL(uri, baseUri).href;
451
- } catch (e) {
452
- href = uri;
453
- }
454
-
455
- return /*#__PURE__*/_react.default.createElement("div", {
456
- className: classes.field
457
- }, /*#__PURE__*/_react.default.createElement(FieldName, {
458
- prefix: prefix,
459
- name: name
460
- }), /*#__PURE__*/_react.default.createElement(BasicValue, {
461
- value: href
462
- }));
272
+ function UriAttribute({ value, prefix, name, }) {
273
+ const { classes } = (0, exports.useStyles)();
274
+ const { uri, baseUri = '' } = value;
275
+ let href;
276
+ try {
277
+ href = new URL(uri, baseUri).href;
278
+ }
279
+ catch (e) {
280
+ href = uri;
281
+ }
282
+ return (react_1.default.createElement("div", { className: classes.field },
283
+ react_1.default.createElement(exports.FieldName, { prefix: prefix, name: name }),
284
+ react_1.default.createElement(exports.BasicValue, { value: href })));
463
285
  }
464
-
465
286
  function Attributes(props) {
466
- var attributes = props.attributes,
467
- _props$omit = props.omit,
468
- omit = _props$omit === void 0 ? [] : _props$omit,
469
- descriptions = props.descriptions,
470
- _props$formatter = props.formatter,
471
- formatter = _props$formatter === void 0 ? function (val) {
472
- return val;
473
- } : _props$formatter,
474
- _props$prefix = props.prefix,
475
- prefix = _props$prefix === void 0 ? [] : _props$prefix;
476
- var omits = [].concat((0, _toConsumableArray2.default)(omit), globalOmit);
477
- var __jbrowsefmt = attributes.__jbrowsefmt,
478
- rest = (0, _objectWithoutProperties2.default)(attributes, _excluded2);
479
-
480
- var formattedAttributes = _objectSpread(_objectSpread({}, rest), __jbrowsefmt);
481
-
482
- var maxLabelWidth = generateMaxWidth(Object.entries(formattedAttributes).filter(function (_ref16) {
483
- var _ref17 = (0, _slicedToArray2.default)(_ref16, 2),
484
- k = _ref17[0],
485
- v = _ref17[1];
486
-
487
- return v !== undefined && !omits.includes(k);
488
- }), prefix);
489
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, Object.entries(formattedAttributes).filter(function (_ref18) {
490
- var _ref19 = (0, _slicedToArray2.default)(_ref18, 2),
491
- k = _ref19[0],
492
- v = _ref19[1];
493
-
494
- return v !== undefined && !omits.includes(k);
495
- }).map(function (_ref20) {
496
- var _ref21 = (0, _slicedToArray2.default)(_ref20, 2),
497
- key = _ref21[0],
498
- value = _ref21[1];
499
-
500
- var description = accessNested([].concat((0, _toConsumableArray2.default)(prefix), [key]), descriptions);
501
-
502
- if (Array.isArray(value)) {
503
- // check if it looks like an array of objects, which could be used
504
- // in data grid
505
- return value.length > 1 && value.every(function (val) {
506
- return (0, _isObject.default)(val);
507
- }) ? /*#__PURE__*/_react.default.createElement(DataGridDetails, {
508
- key: key,
509
- name: key,
510
- prefix: prefix,
511
- value: value
512
- }) : /*#__PURE__*/_react.default.createElement(ArrayValue, {
513
- key: key,
514
- name: key,
515
- value: value,
516
- description: description,
517
- prefix: prefix
518
- });
519
- } else if ((0, _isObject.default)(value)) {
520
- return (0, _util.isUriLocation)(value) ? /*#__PURE__*/_react.default.createElement(UriAttribute, {
521
- key: key,
522
- name: key,
523
- prefix: prefix,
524
- value: value
525
- }) : /*#__PURE__*/_react.default.createElement(Attributes, (0, _extends2.default)({}, props, {
526
- omit: omits,
527
- key: key,
528
- attributes: value,
529
- descriptions: descriptions,
530
- prefix: [].concat((0, _toConsumableArray2.default)(prefix), [key])
531
- }));
532
- } else {
533
- return /*#__PURE__*/_react.default.createElement(SimpleValue, {
534
- key: key,
535
- name: key,
536
- value: formatter(value, key),
537
- description: description,
538
- prefix: prefix,
539
- width: Math.min(maxLabelWidth, MAX_FIELD_NAME_WIDTH)
540
- });
541
- }
542
- }));
287
+ const { attributes, omit = [], descriptions, formatter = val => val, prefix = [], } = props;
288
+ const omits = [...omit, ...globalOmit];
289
+ const { __jbrowsefmt, ...rest } = attributes;
290
+ const formattedAttributes = { ...rest, ...__jbrowsefmt };
291
+ const maxLabelWidth = generateMaxWidth(Object.entries(formattedAttributes).filter(([k, v]) => v !== undefined && !omits.includes(k)), prefix);
292
+ return (react_1.default.createElement(react_1.default.Fragment, null, Object.entries(formattedAttributes)
293
+ .filter(([k, v]) => v !== undefined && !omits.includes(k))
294
+ .map(([key, value]) => {
295
+ const description = accessNested([...prefix, key], descriptions);
296
+ if (Array.isArray(value)) {
297
+ // check if it looks like an array of objects, which could be used
298
+ // in data grid
299
+ return value.length > 1 && value.every(val => (0, is_object_1.default)(val)) ? (react_1.default.createElement(DataGridDetails, { key: key, name: key, prefix: prefix, value: value })) : (react_1.default.createElement(ArrayValue, { key: key, name: key, value: value, description: description, prefix: prefix }));
300
+ }
301
+ else if ((0, is_object_1.default)(value)) {
302
+ return (0, util_1.isUriLocation)(value) ? (react_1.default.createElement(UriAttribute, { key: key, name: key, prefix: prefix, value: value })) : (react_1.default.createElement(Attributes, { ...props, omit: omits, key: key, attributes: value, descriptions: descriptions, prefix: [...prefix, key] }));
303
+ }
304
+ else {
305
+ return (react_1.default.createElement(exports.SimpleValue, { key: key, name: key, value: formatter(value, key), description: description, prefix: prefix, width: Math.min(maxLabelWidth, MAX_FIELD_NAME_WIDTH) }));
306
+ }
307
+ })));
543
308
  }
544
-
545
- var BaseAttributes = function BaseAttributes(props) {
546
- var feature = props.feature;
547
- return /*#__PURE__*/_react.default.createElement(BaseCard, (0, _extends2.default)({}, props, {
548
- title: "Attributes"
549
- }), /*#__PURE__*/_react.default.createElement(Attributes, (0, _extends2.default)({}, props, {
550
- attributes: feature
551
- })));
309
+ exports.Attributes = Attributes;
310
+ const BaseAttributes = (props) => {
311
+ const { feature } = props;
312
+ return (react_1.default.createElement(BaseCard, { ...props, title: "Attributes" },
313
+ react_1.default.createElement(Attributes, { ...props, attributes: feature })));
552
314
  };
553
-
554
315
  exports.BaseAttributes = BaseAttributes;
555
-
556
316
  function isEmpty(obj) {
557
- return Object.keys(obj).length === 0;
317
+ return Object.keys(obj).length === 0;
558
318
  }
559
-
560
319
  function generateTitle(name, id, type) {
561
- return [(0, _util2.ellipses)("".concat(name) || "".concat(id)), "".concat(type)].filter(function (f) {
562
- return !!f;
563
- }).join(' - ');
320
+ return [(0, util_2.ellipses)(`${name}` || `${id}`), `${type}`]
321
+ .filter(f => !!f)
322
+ .join(' - ');
564
323
  }
565
-
566
- var FeatureDetails = function FeatureDetails(props) {
567
- var _props$omit2 = props.omit,
568
- omit = _props$omit2 === void 0 ? [] : _props$omit2,
569
- model = props.model,
570
- feature = props.feature,
571
- _props$depth = props.depth,
572
- depth = _props$depth === void 0 ? 0 : _props$depth;
573
- var _feature$name = feature.name,
574
- name = _feature$name === void 0 ? '' : _feature$name,
575
- _feature$id = feature.id,
576
- id = _feature$id === void 0 ? '' : _feature$id,
577
- _feature$type = feature.type,
578
- type = _feature$type === void 0 ? '' : _feature$type,
579
- subfeatures = feature.subfeatures;
580
- var session = (0, _util.getSession)(model);
581
- var defaultSeqTypes = ['mRNA', 'transcript'];
582
- var sequenceTypes = (0, _configuration.getConf)(session, ['featureDetails', 'sequenceTypes']) || defaultSeqTypes;
583
- return /*#__PURE__*/_react.default.createElement(BaseCard, {
584
- title: generateTitle(name, id, type)
585
- }, /*#__PURE__*/_react.default.createElement(_material.Typography, null, "Core details"), /*#__PURE__*/_react.default.createElement(CoreDetails, props), /*#__PURE__*/_react.default.createElement(_material.Divider, null), /*#__PURE__*/_react.default.createElement(_material.Typography, null, "Attributes"), /*#__PURE__*/_react.default.createElement(Attributes, (0, _extends2.default)({
586
- attributes: feature
587
- }, props, {
588
- omit: [].concat((0, _toConsumableArray2.default)(omit), coreDetails)
589
- })), sequenceTypes.includes(feature.type) ? /*#__PURE__*/_react.default.createElement(_reactErrorBoundary.ErrorBoundary, {
590
- FallbackComponent: function FallbackComponent(_ref22) {
591
- var error = _ref22.error;
592
- return /*#__PURE__*/_react.default.createElement(_material.Typography, {
593
- color: "error"
594
- }, "".concat(error));
595
- }
596
- }, /*#__PURE__*/_react.default.createElement(_SequenceFeatureDetails.default, props)) : null, subfeatures !== null && subfeatures !== void 0 && subfeatures.length ? /*#__PURE__*/_react.default.createElement(BaseCard, {
597
- title: "Subfeatures",
598
- defaultExpanded: !sequenceTypes.includes(feature.type)
599
- }, subfeatures.map(function (sub) {
600
- return /*#__PURE__*/_react.default.createElement(FeatureDetails, {
601
- key: JSON.stringify(sub),
602
- feature: sub,
603
- model: model,
604
- depth: depth + 1
605
- });
606
- })) : null);
324
+ const FeatureDetails = (props) => {
325
+ const { omit = [], model, feature, depth = 0 } = props;
326
+ const { name = '', id = '', type = '', subfeatures } = feature;
327
+ const session = (0, util_1.getSession)(model);
328
+ const defaultSeqTypes = ['mRNA', 'transcript'];
329
+ const sequenceTypes = (0, configuration_1.getConf)(session, ['featureDetails', 'sequenceTypes']) || defaultSeqTypes;
330
+ return (react_1.default.createElement(BaseCard, { title: generateTitle(name, id, type) },
331
+ react_1.default.createElement(material_1.Typography, null, "Core details"),
332
+ react_1.default.createElement(CoreDetails, { ...props }),
333
+ react_1.default.createElement(material_1.Divider, null),
334
+ react_1.default.createElement(material_1.Typography, null, "Attributes"),
335
+ react_1.default.createElement(Attributes, { attributes: feature, ...props, omit: [...omit, ...coreDetails] }),
336
+ sequenceTypes.includes(feature.type) ? (react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { FallbackComponent: ({ error }) => (react_1.default.createElement(material_1.Typography, { color: "error" }, `${error}`)) },
337
+ react_1.default.createElement(SequenceFeatureDetails_1.default, { ...props }))) : null,
338
+ (subfeatures === null || subfeatures === void 0 ? void 0 : subfeatures.length) ? (react_1.default.createElement(BaseCard, { title: "Subfeatures", defaultExpanded: !sequenceTypes.includes(feature.type) }, subfeatures.map((sub) => (react_1.default.createElement(exports.FeatureDetails, { key: JSON.stringify(sub), feature: sub, model: model, depth: depth + 1 }))))) : null));
607
339
  };
608
-
609
340
  exports.FeatureDetails = FeatureDetails;
610
- var BaseFeatureDetails = (0, _mobxReact.observer)(function (props) {
611
- var model = props.model;
612
- var featureData = model.featureData;
613
-
614
- if (!featureData) {
615
- return null;
616
- } // replacing undefined with null helps with allowing fields to be hidden,
617
- // setting null is not allowed by jexl so we set it to undefined to hide. see
618
- // config guide. this replacement happens both here and when snapshotting the
619
- // featureData
620
-
621
-
622
- var feature = JSON.parse(JSON.stringify(featureData, function (_, v) {
623
- return typeof v === 'undefined' ? null : v;
624
- }));
625
-
626
- if (isEmpty(feature)) {
627
- return null;
628
- }
629
-
630
- return /*#__PURE__*/_react.default.createElement(FeatureDetails, {
631
- model: model,
632
- feature: feature
633
- });
341
+ const BaseFeatureDetails = (0, mobx_react_1.observer)((props) => {
342
+ const { model } = props;
343
+ const { featureData } = model;
344
+ if (!featureData) {
345
+ return null;
346
+ }
347
+ // replacing undefined with null helps with allowing fields to be hidden,
348
+ // setting null is not allowed by jexl so we set it to undefined to hide. see
349
+ // config guide. this replacement happens both here and when snapshotting the
350
+ // featureData
351
+ const feature = JSON.parse(JSON.stringify(featureData, (_, v) => typeof v === 'undefined' ? null : v));
352
+ if (isEmpty(feature)) {
353
+ return null;
354
+ }
355
+ return react_1.default.createElement(exports.FeatureDetails, { model: model, feature: feature });
634
356
  });
635
- var _default = BaseFeatureDetails;
636
- exports.default = _default;
357
+ exports.default = BaseFeatureDetails;