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