@jbrowse/core 2.0.0 → 2.1.2

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