@jbrowse/core 1.4.1 → 1.5.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 (159) hide show
  1. package/BaseFeatureWidget/BaseFeatureDetail.d.ts +4 -4
  2. package/BaseFeatureWidget/BaseFeatureDetail.js +27 -8
  3. package/BaseFeatureWidget/SequenceFeatureDetails.js +10 -10
  4. package/BaseFeatureWidget/index.js +1 -1
  5. package/BaseFeatureWidget/types.d.ts +1 -1
  6. package/BaseFeatureWidget/util.js +3 -3
  7. package/CorePlugin.d.ts +0 -1
  8. package/CorePlugin.js +13 -1
  9. package/PluginLoader.d.ts +26 -4
  10. package/PluginLoader.js +337 -51
  11. package/PluginManager.d.ts +18 -11
  12. package/PluginManager.js +53 -31
  13. package/ReExports/list.js +1 -1
  14. package/ReExports/material-ui-colors.js +38 -38
  15. package/ReExports/modules.d.ts +19 -20
  16. package/ReExports/modules.js +10 -3
  17. package/TextSearch/BaseResults.d.ts +5 -14
  18. package/TextSearch/BaseResults.js +16 -58
  19. package/TextSearch/BaseResults.test.js +1 -11
  20. package/TextSearch/TextSearchManager.d.ts +3 -3
  21. package/TextSearch/TextSearchManager.js +1 -1
  22. package/assemblyManager/assembly.d.ts +21 -8
  23. package/assemblyManager/assembly.js +163 -120
  24. package/assemblyManager/assemblyConfigSchema.d.ts +3 -0
  25. package/assemblyManager/{assemblyConfigSchemas.js → assemblyConfigSchema.js} +35 -27
  26. package/assemblyManager/assemblyManager.d.ts +169 -60
  27. package/assemblyManager/index.d.ts +1 -1
  28. package/assemblyManager/index.js +5 -5
  29. package/configuration/configurationSchema.d.ts +3 -2
  30. package/configuration/configurationSchema.js +7 -10
  31. package/configuration/configurationSchema.test.js +4 -2
  32. package/configuration/configurationSlot.js +5 -4
  33. package/configuration/index.js +4 -4
  34. package/configuration/util.js +5 -5
  35. package/data_adapters/BaseAdapter.d.ts +5 -3
  36. package/data_adapters/BaseAdapter.js +7 -4
  37. package/data_adapters/BaseAdapter.test.js +4 -2
  38. package/data_adapters/CytobandAdapter.d.ts +8 -0
  39. package/data_adapters/CytobandAdapter.js +128 -0
  40. package/data_adapters/dataAdapterCache.js +3 -3
  41. package/package.json +7 -6
  42. package/pluggableElementTypes/AdapterType.d.ts +9 -1
  43. package/pluggableElementTypes/AdapterType.js +20 -0
  44. package/pluggableElementTypes/InternetAccountType.d.ts +12 -0
  45. package/pluggableElementTypes/InternetAccountType.js +64 -0
  46. package/pluggableElementTypes/PluggableElementBase.d.ts +1 -2
  47. package/pluggableElementTypes/PluggableElementBase.js +2 -3
  48. package/pluggableElementTypes/RpcMethodType.d.ts +3 -0
  49. package/pluggableElementTypes/RpcMethodType.js +269 -26
  50. package/pluggableElementTypes/RpcMethodType.test.d.ts +4 -0
  51. package/pluggableElementTypes/RpcMethodType.test.js +118 -0
  52. package/pluggableElementTypes/ViewType.d.ts +1 -1
  53. package/pluggableElementTypes/WidgetType.d.ts +1 -0
  54. package/pluggableElementTypes/index.d.ts +7 -3
  55. package/pluggableElementTypes/index.js +127 -1
  56. package/pluggableElementTypes/models/BaseDisplayModel.d.ts +6 -6
  57. package/pluggableElementTypes/models/BaseDisplayModel.js +1 -3
  58. package/pluggableElementTypes/models/BaseViewModel.js +13 -15
  59. package/pluggableElementTypes/models/InternetAccountModel.d.ts +24 -0
  60. package/pluggableElementTypes/models/InternetAccountModel.js +85 -0
  61. package/pluggableElementTypes/models/baseInternetAccountConfig.d.ts +4 -0
  62. package/pluggableElementTypes/models/baseInternetAccountConfig.js +25 -0
  63. package/pluggableElementTypes/models/index.d.ts +3 -0
  64. package/pluggableElementTypes/models/index.js +24 -8
  65. package/pluggableElementTypes/renderers/BoxRendererType.js +1 -1
  66. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +1 -1
  67. package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +15 -6
  68. package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +3 -3
  69. package/pluggableElementTypes/renderers/FeatureRendererType.js +17 -8
  70. package/pluggableElementTypes/renderers/RendererType.d.ts +1 -0
  71. package/pluggableElementTypes/renderers/RendererType.js +4 -1
  72. package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +1 -1
  73. package/pluggableElementTypes/renderers/index.d.ts +9 -0
  74. package/pluggableElementTypes/renderers/index.js +63 -0
  75. package/rpc/BaseRpcDriver.js +5 -9
  76. package/rpc/BaseRpcDriver.test.js +6 -6
  77. package/rpc/RpcManager.d.ts +1 -1
  78. package/rpc/RpcManager.js +44 -16
  79. package/rpc/WebWorkerRpcDriver.js +3 -3
  80. package/rpc/coreRpcMethods.d.ts +2 -1
  81. package/rpc/coreRpcMethods.js +109 -75
  82. package/rpc/remoteAbortSignals.js +2 -2
  83. package/ui/App.d.ts +17 -4
  84. package/ui/App.js +55 -41
  85. package/ui/Drawer.d.ts +6 -14
  86. package/ui/Drawer.js +11 -12
  87. package/ui/DrawerWidget.d.ts +5 -3
  88. package/ui/DrawerWidget.js +100 -61
  89. package/ui/ErrorMessage.d.ts +5 -0
  90. package/ui/ErrorMessage.js +54 -0
  91. package/ui/FileSelector/FileSelector.d.ts +11 -0
  92. package/ui/FileSelector/FileSelector.js +198 -0
  93. package/ui/FileSelector/LocalFileChooser.d.ts +7 -0
  94. package/ui/FileSelector/LocalFileChooser.js +79 -0
  95. package/ui/FileSelector/UrlChooser.d.ts +9 -0
  96. package/ui/FileSelector/UrlChooser.js +41 -0
  97. package/ui/FileSelector/index.d.ts +2 -0
  98. package/ui/FileSelector/index.js +13 -0
  99. package/ui/Icons.d.ts +4 -0
  100. package/ui/Icons.js +34 -0
  101. package/ui/Logo.js +1 -1
  102. package/ui/PrerenderedCanvas.d.ts +1 -0
  103. package/ui/PrerenderedCanvas.js +4 -1
  104. package/ui/ResizeHandle.d.ts +2 -3
  105. package/ui/ResizeHandle.js +6 -7
  106. package/ui/SanitizedHTML.js +1 -1
  107. package/ui/Snackbar.js +4 -6
  108. package/ui/SnackbarModel.d.ts +16 -0
  109. package/ui/SnackbarModel.js +56 -0
  110. package/ui/Tooltip.d.ts +1 -1
  111. package/ui/index.js +24 -24
  112. package/ui/theme.js +5 -5
  113. package/util/QuickLRU.d.ts +1 -1
  114. package/util/QuickLRU.js +3 -3
  115. package/util/aborting.d.ts +1 -1
  116. package/util/aborting.js +10 -11
  117. package/util/analytics.d.ts +2 -2
  118. package/util/analytics.js +20 -7
  119. package/util/blockTypes.d.ts +11 -6
  120. package/util/blockTypes.js +7 -1
  121. package/util/color/cssColorsLevel4.js +1 -1
  122. package/util/color/index.js +5 -5
  123. package/util/compositeMap.js +3 -3
  124. package/util/index.d.ts +6 -16
  125. package/util/index.js +76 -100
  126. package/util/io/RemoteFileWithRangeCache.d.ts +17 -0
  127. package/util/io/RemoteFileWithRangeCache.js +266 -0
  128. package/util/io/index.d.ts +4 -2
  129. package/util/io/index.js +134 -25
  130. package/util/jexl.js +4 -1
  131. package/util/layouts/BaseLayout.d.ts +3 -0
  132. package/util/layouts/GranularRectLayout.d.ts +19 -10
  133. package/util/layouts/GranularRectLayout.js +459 -100
  134. package/util/layouts/GranularRectLayout.test.js +57 -10
  135. package/util/layouts/PrecomputedLayout.js +2 -1
  136. package/util/layouts/index.d.ts +7 -0
  137. package/util/layouts/index.js +68 -0
  138. package/util/mst-reflection.js +3 -3
  139. package/util/offscreenCanvasPonyfill.js +1 -1
  140. package/util/range.js +1 -1
  141. package/util/simpleFeature.js +1 -1
  142. package/util/stats.js +2 -2
  143. package/util/tracks.d.ts +31 -362
  144. package/util/tracks.js +74 -190
  145. package/util/types/index.d.ts +54 -10
  146. package/util/types/index.js +110 -8
  147. package/util/types/mst.d.ts +46 -2
  148. package/util/types/mst.js +56 -8
  149. package/util/types/util.d.ts +1 -1
  150. package/util/when.js +1 -1
  151. package/assemblyManager/assemblyConfigSchemas.d.ts +0 -7
  152. package/ui/FileSelector.d.ts +0 -9
  153. package/ui/FileSelector.js +0 -150
  154. package/util/io/LocalFile.d.ts +0 -18
  155. package/util/io/LocalFile.js +0 -220
  156. package/util/io/rangeFetcher.d.ts +0 -3
  157. package/util/io/rangeFetcher.js +0 -236
  158. package/value.d.ts +0 -1
  159. package/value.js +0 -10
@@ -0,0 +1,198 @@
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
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
+
14
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
+
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+
18
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
+
20
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
21
+
22
+ var _react = _interopRequireWildcard(require("react"));
23
+
24
+ var _core = require("@material-ui/core");
25
+
26
+ var _lab = require("@material-ui/lab");
27
+
28
+ var _mobxReact = require("mobx-react");
29
+
30
+ var _types = require("../../util/types");
31
+
32
+ var _ArrowDropDown = _interopRequireDefault(require("@material-ui/icons/ArrowDropDown"));
33
+
34
+ var _LocalFileChooser = _interopRequireDefault(require("./LocalFileChooser"));
35
+
36
+ var _UrlChooser = _interopRequireDefault(require("./UrlChooser"));
37
+
38
+ var _excluded = ["title", "children"];
39
+
40
+ 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); }
41
+
42
+ 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; }
43
+
44
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
45
+
46
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
47
+
48
+ function ToggleButtonWithTooltip(props) {
49
+ var title = props.title,
50
+ children = props.children,
51
+ other = (0, _objectWithoutProperties2.default)(props, _excluded);
52
+ return /*#__PURE__*/_react.default.createElement(_core.Tooltip, {
53
+ title: title || ''
54
+ }, /*#__PURE__*/_react.default.createElement(_lab.ToggleButton, other, children));
55
+ }
56
+
57
+ function shorten(str, len) {
58
+ if (typeof str === 'string' && str.length > len) {
59
+ return "".concat(str.substring(0, len), "\u2026");
60
+ }
61
+
62
+ return str;
63
+ }
64
+
65
+ var FileSelector = (0, _mobxReact.observer)(function (props) {
66
+ var location = props.location,
67
+ name = props.name,
68
+ description = props.description,
69
+ rootModel = props.rootModel,
70
+ setLocation = props.setLocation;
71
+ var fileOrUrl = !location || (0, _types.isUriLocation)(location) ? 'url' : 'file';
72
+
73
+ var _useState = (0, _react.useState)(location && 'internetAccountId' in location && location.internetAccountId ? location.internetAccountId : fileOrUrl),
74
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
75
+ toggleButtonValue = _useState2[0],
76
+ setToggleButtonValue = _useState2[1];
77
+
78
+ var accts = (0, _types.isAppRootModel)(rootModel) ? rootModel.internetAccounts.slice() : [];
79
+ var numShown = 2;
80
+
81
+ var _useState3 = (0, _react.useState)(accts.slice(0, numShown)),
82
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
83
+ shownAccts = _useState4[0],
84
+ setShownAccts = _useState4[1];
85
+
86
+ var _useState5 = (0, _react.useState)(accts.slice(numShown)),
87
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
88
+ hiddenAccts = _useState6[0],
89
+ setHiddenAccts = _useState6[1];
90
+
91
+ var _useState7 = (0, _react.useState)(null),
92
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
93
+ anchorEl = _useState8[0],
94
+ setAnchorEl = _useState8[1];
95
+
96
+ var selectedAcct = accts.find(function (ia) {
97
+ return ia.internetAccountId === toggleButtonValue;
98
+ });
99
+
100
+ var setLocationWithAccount = function setLocationWithAccount(location) {
101
+ setLocation(_objectSpread(_objectSpread({}, location), {}, {
102
+ internetAccountId: selectedAcct ? selectedAcct.internetAccountId : undefined
103
+ }));
104
+ }; // if you swap account selection after inputting url
105
+
106
+
107
+ if (location && selectedAcct && (0, _types.isUriLocation)(location) && location.internetAccountId !== selectedAcct.internetAccountId) {
108
+ setLocationWithAccount(location);
109
+ }
110
+
111
+ var locationInput = /*#__PURE__*/_react.default.createElement(_UrlChooser.default, (0, _extends2.default)({}, props, {
112
+ setLocation: setLocationWithAccount,
113
+ label: selectedAcct === null || selectedAcct === void 0 ? void 0 : selectedAcct.selectorLabel
114
+ }));
115
+
116
+ if (toggleButtonValue === 'file') {
117
+ locationInput = /*#__PURE__*/_react.default.createElement(_LocalFileChooser.default, props);
118
+ }
119
+
120
+ if (selectedAcct !== null && selectedAcct !== void 0 && selectedAcct.SelectorComponent) {
121
+ var SelectorComponent = selectedAcct.SelectorComponent;
122
+ locationInput = /*#__PURE__*/_react.default.createElement(SelectorComponent, (0, _extends2.default)({}, props, {
123
+ setLocation: setLocationWithAccount
124
+ }));
125
+ }
126
+
127
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_core.Box, {
128
+ display: "flex"
129
+ }, /*#__PURE__*/_react.default.createElement(_core.InputLabel, {
130
+ shrink: true
131
+ }, name)), /*#__PURE__*/_react.default.createElement(_core.Box, {
132
+ display: "flex",
133
+ flexDirection: "row"
134
+ }, /*#__PURE__*/_react.default.createElement(_core.Box, null, /*#__PURE__*/_react.default.createElement(_lab.ToggleButtonGroup, {
135
+ value: toggleButtonValue,
136
+ exclusive: true,
137
+ onChange: function onChange(_event, newState) {
138
+ if (newState) {
139
+ setToggleButtonValue(newState);
140
+ }
141
+
142
+ if ((0, _types.isUriLocation)(location)) {
143
+ setLocationWithAccount(location);
144
+ }
145
+ },
146
+ "aria-label": "file, url, or account picker"
147
+ }, new URLSearchParams(window.location.search).get('adminKey') ? null : /*#__PURE__*/_react.default.createElement(_lab.ToggleButton, {
148
+ value: "file",
149
+ "aria-label": "local file"
150
+ }, "File"), /*#__PURE__*/_react.default.createElement(_lab.ToggleButton, {
151
+ value: "url",
152
+ "aria-label": "url"
153
+ }, "URL"), shownAccts.map(function (_ref) {
154
+ var internetAccountId = _ref.internetAccountId,
155
+ toggleContents = _ref.toggleContents,
156
+ name = _ref.name;
157
+ return /*#__PURE__*/_react.default.createElement(ToggleButtonWithTooltip, {
158
+ key: internetAccountId,
159
+ value: internetAccountId,
160
+ "aria-label": name,
161
+ title: name
162
+ }, shorten(toggleContents || name, 5));
163
+ }), hiddenAccts.length ? /*#__PURE__*/_react.default.createElement(_lab.ToggleButton, {
164
+ onClick: function onClick(event) {
165
+ return setAnchorEl(event.target);
166
+ },
167
+ selected: false
168
+ }, "More", /*#__PURE__*/_react.default.createElement(_ArrowDropDown.default, null)) : null), /*#__PURE__*/_react.default.createElement(_core.Menu, {
169
+ open: Boolean(anchorEl),
170
+ anchorEl: anchorEl,
171
+ onClose: function onClose() {
172
+ return setAnchorEl(null);
173
+ },
174
+ getContentAnchorEl: null,
175
+ anchorOrigin: {
176
+ vertical: 'bottom',
177
+ horizontal: 'center'
178
+ },
179
+ transformOrigin: {
180
+ vertical: 'top',
181
+ horizontal: 'center'
182
+ }
183
+ }, hiddenAccts === null || hiddenAccts === void 0 ? void 0 : hiddenAccts.map(function (acct, idx) {
184
+ return /*#__PURE__*/_react.default.createElement(_core.MenuItem, {
185
+ key: acct.internetAccountId,
186
+ value: acct.internetAccountId,
187
+ onClick: function onClick() {
188
+ var prev = shownAccts[shownAccts.length - 1];
189
+ setShownAccts([].concat((0, _toConsumableArray2.default)(shownAccts.slice(0, shownAccts.length - 1)), [acct]));
190
+ setHiddenAccts([prev].concat((0, _toConsumableArray2.default)(hiddenAccts.slice(0, idx)), (0, _toConsumableArray2.default)(hiddenAccts.slice(idx + 1))));
191
+ setToggleButtonValue(acct.internetAccountId);
192
+ setAnchorEl(null);
193
+ }
194
+ }, acct.name);
195
+ })))), locationInput, /*#__PURE__*/_react.default.createElement(_core.FormHelperText, null, description));
196
+ });
197
+ var _default = FileSelector;
198
+ exports.default = _default;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { FileLocation } from '../../util/types';
3
+ declare function LocalFileChooser(props: {
4
+ location?: FileLocation;
5
+ setLocation: Function;
6
+ }): JSX.Element;
7
+ export default LocalFileChooser;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _core = require("@material-ui/core");
13
+
14
+ var _util = require("../../util");
15
+
16
+ var _tracks = require("../../util/tracks");
17
+
18
+ function isLocalPathLocation(location) {
19
+ return 'localPath' in location;
20
+ }
21
+
22
+ function isBlobLocation(location) {
23
+ return 'blobId' in location;
24
+ }
25
+
26
+ var useStyles = (0, _core.makeStyles)(function (theme) {
27
+ return {
28
+ filename: {
29
+ marginLeft: theme.spacing(1)
30
+ }
31
+ };
32
+ });
33
+
34
+ function LocalFileChooser(props) {
35
+ var classes = useStyles();
36
+ var location = props.location,
37
+ setLocation = props.setLocation;
38
+ var filename = location && (isBlobLocation(location) && location.name || isLocalPathLocation(location) && location.localPath);
39
+ var needToReload = location && isBlobLocation(location) && !(0, _tracks.getBlob)(location.blobId);
40
+ return /*#__PURE__*/_react.default.createElement(_core.Box, {
41
+ display: "flex",
42
+ flexDirection: "row",
43
+ alignItems: "center"
44
+ }, /*#__PURE__*/_react.default.createElement(_core.Box, null, /*#__PURE__*/_react.default.createElement(_core.FormControl, {
45
+ fullWidth: true
46
+ }, /*#__PURE__*/_react.default.createElement(_core.Button, {
47
+ variant: "outlined",
48
+ component: "label"
49
+ }, "Choose File", /*#__PURE__*/_react.default.createElement("input", {
50
+ type: "file",
51
+ hidden: true,
52
+ onChange: function onChange(_ref) {
53
+ var target = _ref.target;
54
+ var file = target && target.files && target.files[0];
55
+
56
+ if (file) {
57
+ if (_util.isElectron) {
58
+ setLocation({
59
+ localPath: file.path,
60
+ locationType: 'LocalPathLocation'
61
+ });
62
+ } else {
63
+ setLocation((0, _tracks.storeBlobLocation)({
64
+ blob: file
65
+ }));
66
+ }
67
+ }
68
+ }
69
+ })))), /*#__PURE__*/_react.default.createElement(_core.Box, null, /*#__PURE__*/_react.default.createElement(_core.Typography, {
70
+ component: "span",
71
+ className: classes.filename,
72
+ color: filename ? 'initial' : 'textSecondary'
73
+ }, filename || 'No file chosen'), needToReload ? /*#__PURE__*/_react.default.createElement(_core.Typography, {
74
+ color: "error"
75
+ }, "(need to reload)") : null));
76
+ }
77
+
78
+ var _default = LocalFileChooser;
79
+ exports.default = _default;
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import { FileLocation } from '../../util/types';
3
+ declare function UrlChooser(props: {
4
+ location?: FileLocation;
5
+ setLocation: Function;
6
+ label?: string;
7
+ }): JSX.Element;
8
+ declare const _default: typeof UrlChooser;
9
+ export default _default;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _core = require("@material-ui/core");
13
+
14
+ var _mobxReact = require("mobx-react");
15
+
16
+ var _types = require("../../util/types");
17
+
18
+ function UrlChooser(props) {
19
+ var location = props.location,
20
+ setLocation = props.setLocation,
21
+ label = props.label;
22
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_core.TextField, {
23
+ fullWidth: true,
24
+ variant: "outlined",
25
+ inputProps: {
26
+ 'data-testid': 'urlInput'
27
+ },
28
+ defaultValue: location && (0, _types.isUriLocation)(location) ? location.uri : '',
29
+ label: label || 'Enter URL',
30
+ onChange: function onChange(event) {
31
+ setLocation({
32
+ uri: event.target.value.trim(),
33
+ locationType: 'UriLocation'
34
+ });
35
+ }
36
+ }));
37
+ }
38
+
39
+ var _default = (0, _mobxReact.observer)(UrlChooser);
40
+
41
+ exports.default = _default;
@@ -0,0 +1,2 @@
1
+ import FileSelector from './FileSelector';
2
+ export default FileSelector;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _FileSelector = _interopRequireDefault(require("./FileSelector"));
11
+
12
+ var _default = _FileSelector.default;
13
+ exports.default = _default;
package/ui/Icons.d.ts CHANGED
@@ -4,3 +4,7 @@ export declare function ContentCopy(props: SvgIconProps): JSX.Element;
4
4
  export declare function ContentCut(props: SvgIconProps): JSX.Element;
5
5
  export declare function ContentPaste(props: SvgIconProps): JSX.Element;
6
6
  export declare function TrackSelector(props: SvgIconProps): JSX.Element;
7
+ export declare function SaveAs(props: SvgIconProps): JSX.Element;
8
+ export declare function Save(props: SvgIconProps): JSX.Element;
9
+ export declare function DNA(props: SvgIconProps): JSX.Element;
10
+ export declare function Cable(props: SvgIconProps): JSX.Element;
package/ui/Icons.js CHANGED
@@ -5,9 +5,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.Cable = Cable;
8
9
  exports.ContentCopy = ContentCopy;
9
10
  exports.ContentCut = ContentCut;
10
11
  exports.ContentPaste = ContentPaste;
12
+ exports.DNA = DNA;
13
+ exports.Save = Save;
14
+ exports.SaveAs = SaveAs;
11
15
  exports.TrackSelector = TrackSelector;
12
16
 
13
17
  var _SvgIcon = _interopRequireDefault(require("@material-ui/core/SvgIcon"));
@@ -38,4 +42,34 @@ function TrackSelector(props) {
38
42
  return /*#__PURE__*/_react.default.createElement(_SvgIcon.default, props, /*#__PURE__*/_react.default.createElement("path", {
39
43
  d: "M21 19v-2H8v2h13m0-6v-2H8v2h13M8 7h13V5H8v2M4 5v2h2V5H4M3 5a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1V5m1 6v2h2v-2H4m-1 0a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1v-2m1 6v2h2v-2H4m-1 0a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1v-2z"
40
44
  }));
45
+ } // content-save-edit from https://materialdesignicons.com/
46
+
47
+
48
+ function SaveAs(props) {
49
+ return /*#__PURE__*/_react.default.createElement(_SvgIcon.default, props, /*#__PURE__*/_react.default.createElement("path", {
50
+ fill: "currentColor",
51
+ d: "M10,19L10.14,18.86C8.9,18.5 8,17.36 8,16A3,3 0 0,1 11,13C12.36,13 13.5,13.9 13.86,15.14L20,9V7L16,3H4C2.89,3 2,3.9 2,5V19A2,2 0 0,0 4,21H10V19M4,5H14V9H4V5M20.04,12.13C19.9,12.13 19.76,12.19 19.65,12.3L18.65,13.3L20.7,15.35L21.7,14.35C21.92,14.14 21.92,13.79 21.7,13.58L20.42,12.3C20.31,12.19 20.18,12.13 20.04,12.13M18.07,13.88L12,19.94V22H14.06L20.12,15.93L18.07,13.88Z"
52
+ }));
53
+ } // content-save from https://materialdesignicons.com/
54
+
55
+
56
+ function Save(props) {
57
+ return /*#__PURE__*/_react.default.createElement(_SvgIcon.default, props, /*#__PURE__*/_react.default.createElement("path", {
58
+ fill: "currentColor",
59
+ d: "M15,9H5V5H15M12,19A3,3 0 0,1 9,16A3,3 0 0,1 12,13A3,3 0 0,1 15,16A3,3 0 0,1 12,19M17,3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V7L17,3Z"
60
+ }));
61
+ } // dna from https://materialdesignicons.com/
62
+
63
+
64
+ function DNA(props) {
65
+ return /*#__PURE__*/_react.default.createElement(_SvgIcon.default, props, /*#__PURE__*/_react.default.createElement("path", {
66
+ fill: "currentColor",
67
+ d: "M4,2H6V4C6,5.44 6.68,6.61 7.88,7.78C8.74,8.61 9.89,9.41 11.09,10.2L9.26,11.39C8.27,10.72 7.31,10 6.5,9.21C5.07,7.82 4,6.1 4,4V2M18,2H20V4C20,6.1 18.93,7.82 17.5,9.21C16.09,10.59 14.29,11.73 12.54,12.84C10.79,13.96 9.09,15.05 7.88,16.22C6.68,17.39 6,18.56 6,20V22H4V20C4,17.9 5.07,16.18 6.5,14.79C7.91,13.41 9.71,12.27 11.46,11.16C13.21,10.04 14.91,8.95 16.12,7.78C17.32,6.61 18,5.44 18,4V2M14.74,12.61C15.73,13.28 16.69,14 17.5,14.79C18.93,16.18 20,17.9 20,20V22H18V20C18,18.56 17.32,17.39 16.12,16.22C15.26,15.39 14.11,14.59 12.91,13.8L14.74,12.61M7,3H17V4L16.94,4.5H7.06L7,4V3M7.68,6H16.32C16.08,6.34 15.8,6.69 15.42,7.06L14.91,7.5H9.07L8.58,7.06C8.2,6.69 7.92,6.34 7.68,6M9.09,16.5H14.93L15.42,16.94C15.8,17.31 16.08,17.66 16.32,18H7.68C7.92,17.66 8.2,17.31 8.58,16.94L9.09,16.5M7.06,19.5H16.94L17,20V21H7V20L7.06,19.5Z"
68
+ }));
69
+ }
70
+
71
+ function Cable(props) {
72
+ return /*#__PURE__*/_react.default.createElement(_SvgIcon.default, props, /*#__PURE__*/_react.default.createElement("path", {
73
+ d: "M20 5V4c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1v1h-1v4c0 .55.45 1 1 1h1v7c0 1.1-.9 2-2 2s-2-.9-2-2V7c0-2.21-1.79-4-4-4S5 4.79 5 7v7H4c-.55 0-1 .45-1 1v4h1v1c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-1h1v-4c0-.55-.45-1-1-1H7V7c0-1.1.9-2 2-2s2 .9 2 2v10c0 2.21 1.79 4 4 4s4-1.79 4-4v-7h1c.55 0 1-.45 1-1V5h-1z"
74
+ }));
41
75
  }
package/ui/Logo.js CHANGED
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.Logomark = Logomark;
9
8
  exports.LogoFull = LogoFull;
9
+ exports.Logomark = Logomark;
10
10
 
11
11
  var _react = _interopRequireDefault(require("react"));
12
12
 
@@ -7,6 +7,7 @@ declare function PrerenderedCanvas(props: {
7
7
  style: any;
8
8
  imageData: any;
9
9
  showSoftClip?: boolean;
10
+ blockKey?: string;
10
11
  }): JSX.Element;
11
12
  declare namespace PrerenderedCanvas {
12
13
  var propTypes: {
@@ -33,6 +33,7 @@ function PrerenderedCanvas(props) {
33
33
  highResolutionScaling = props.highResolutionScaling,
34
34
  style = props.style,
35
35
  imageData = props.imageData,
36
+ blockKey = props.blockKey,
36
37
  showSoftClip = props.showSoftClip;
37
38
  var featureCanvas = (0, _react.useRef)(null);
38
39
  (0, _react.useEffect)(function () {
@@ -78,8 +79,10 @@ function PrerenderedCanvas(props) {
78
79
  }
79
80
  }, [imageData]);
80
81
  var softClipString = showSoftClip ? '_softclipped' : '';
82
+ var blockKeyStr = blockKey ? '_' + blockKey : '';
83
+ var testId = "prerendered_canvas".concat(softClipString).concat(blockKeyStr);
81
84
  return /*#__PURE__*/_react.default.createElement("canvas", {
82
- "data-testid": "prerendered_canvas".concat(softClipString),
85
+ "data-testid": testId,
83
86
  ref: featureCanvas,
84
87
  width: width * highResolutionScaling,
85
88
  height: height * highResolutionScaling,
@@ -1,10 +1,9 @@
1
1
  /// <reference types="react" />
2
- interface ResizeHandleProps {
2
+ declare function ResizeHandle({ onDrag, vertical, flexbox, className: originalClassName, ...props }: {
3
3
  onDrag: (arg: number) => number;
4
4
  vertical?: boolean;
5
5
  flexbox?: boolean;
6
6
  className?: string;
7
7
  [props: string]: unknown;
8
- }
9
- declare function ResizeHandle({ onDrag, vertical, flexbox, className: originalClassName, ...props }: ResizeHandleProps): JSX.Element;
8
+ }): JSX.Element;
10
9
  export default ResizeHandle;
@@ -15,12 +15,12 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
15
15
 
16
16
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
17
 
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
18
20
  var _styles = require("@material-ui/core/styles");
19
21
 
20
22
  var _clsx = _interopRequireDefault(require("clsx"));
21
23
 
22
- var _react = _interopRequireWildcard(require("react"));
23
-
24
24
  var _excluded = ["onDrag", "vertical", "flexbox", "className"];
25
25
 
26
26
  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); }
@@ -67,12 +67,12 @@ function ResizeHandle(_ref) {
67
67
  (0, _react.useEffect)(function () {
68
68
  function mouseMove(event) {
69
69
  event.preventDefault();
70
- var pos = event[vertical ? 'clientX' : 'clientY'];
70
+ var pos = vertical ? event.clientX : event.clientY;
71
71
  var distance = pos - prevPos.current;
72
72
 
73
73
  if (distance) {
74
- var actualDistance = onDrag(distance);
75
- prevPos.current += actualDistance;
74
+ onDrag(distance);
75
+ prevPos.current = pos;
76
76
  }
77
77
  }
78
78
 
@@ -109,8 +109,7 @@ function ResizeHandle(_ref) {
109
109
  "data-resizer": "true",
110
110
  onMouseDown: function onMouseDown(event) {
111
111
  event.preventDefault();
112
- var pos = event[vertical ? 'clientX' : 'clientY'];
113
- prevPos.current = pos;
112
+ prevPos.current = vertical ? event.clientX : event.clientY;
114
113
  setMouseDragging(true);
115
114
  },
116
115
  role: "presentation",
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.isHTML = isHTML;
9
8
  exports.default = SanitizedHTML;
9
+ exports.isHTML = isHTML;
10
10
 
11
11
  var _react = _interopRequireDefault(require("react"));
12
12
 
package/ui/Snackbar.js CHANGED
@@ -11,9 +11,9 @@ exports.default = void 0;
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
 
14
- var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
14
+ var _react = _interopRequireWildcard(require("react"));
15
15
 
16
- var _Snackbar = _interopRequireDefault(require("@material-ui/core/Snackbar"));
16
+ var _core = require("@material-ui/core");
17
17
 
18
18
  var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
19
19
 
@@ -21,8 +21,6 @@ var _Alert = _interopRequireDefault(require("@material-ui/lab/Alert"));
21
21
 
22
22
  var _mobxReact = require("mobx-react");
23
23
 
24
- var _react = _interopRequireWildcard(require("react"));
25
-
26
24
  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); }
27
25
 
28
26
  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; }
@@ -80,10 +78,10 @@ function MessageSnackbar(_ref) {
80
78
  message = _ref3[0],
81
79
  level = _ref3[1];
82
80
 
83
- return /*#__PURE__*/_react.default.createElement(_Snackbar.default, {
81
+ return /*#__PURE__*/_react.default.createElement(_core.Snackbar, {
84
82
  open: open && !!message,
85
83
  onClose: handleClose,
86
- action: /*#__PURE__*/_react.default.createElement(_IconButton.default, {
84
+ action: /*#__PURE__*/_react.default.createElement(_core.IconButton, {
87
85
  "aria-label": "close",
88
86
  color: "inherit",
89
87
  onClick: handleClose
@@ -0,0 +1,16 @@
1
+ import { IModelType, ModelProperties } from 'mobx-state-tree';
2
+ import { IObservableArray } from 'mobx';
3
+ import { NotificationLevel } from '../util/types';
4
+ declare function makeExtension(snackbarMessages: IObservableArray<any>): {
5
+ views: {
6
+ readonly snackbarMessages: IObservableArray<any>;
7
+ };
8
+ actions: {
9
+ notify(message: string, level?: NotificationLevel | undefined): void;
10
+ pushSnackbarMessage(message: string, level?: NotificationLevel | undefined): number;
11
+ popSnackbarMessage(): any;
12
+ removeSnackbarMessage(message: string): void;
13
+ };
14
+ };
15
+ export default function addSnackbarToModel<PROPS extends ModelProperties, OTHERS>(tree: IModelType<PROPS, OTHERS>): IModelType<PROPS, OTHERS & ReturnType<typeof makeExtension>['actions'] & ReturnType<typeof makeExtension>['views']>;
16
+ export {};
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = addSnackbarToModel;
7
+
8
+ var _mobx = require("mobx");
9
+
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ function makeExtension(snackbarMessages) {
12
+ return {
13
+ views: {
14
+ get snackbarMessages() {
15
+ return snackbarMessages;
16
+ }
17
+
18
+ },
19
+ actions: {
20
+ notify: function notify(message, level) {
21
+ var _this = this;
22
+
23
+ this.pushSnackbarMessage(message, level);
24
+
25
+ if (level === 'info' || level === 'success') {
26
+ setTimeout(function () {
27
+ _this.removeSnackbarMessage(message);
28
+ }, 5000);
29
+ }
30
+ },
31
+ pushSnackbarMessage: function pushSnackbarMessage(message, level) {
32
+ return snackbarMessages.push([message, level]);
33
+ },
34
+ popSnackbarMessage: function popSnackbarMessage() {
35
+ return snackbarMessages.pop();
36
+ },
37
+ removeSnackbarMessage: function removeSnackbarMessage(message) {
38
+ var element = snackbarMessages.find(function (f) {
39
+ return f[0] === message;
40
+ });
41
+
42
+ if (element) {
43
+ snackbarMessages.remove(element);
44
+ }
45
+ }
46
+ }
47
+ };
48
+ }
49
+
50
+ function addSnackbarToModel(tree) {
51
+ return tree.extend(function () {
52
+ var snackbarMessages = _mobx.observable.array();
53
+
54
+ return makeExtension(snackbarMessages);
55
+ });
56
+ }
package/ui/Tooltip.d.ts CHANGED
@@ -4,7 +4,7 @@ declare const _default: ({ offsetX, offsetY, configuration, feature, timeout, }:
4
4
  offsetX: number;
5
5
  offsetY: number;
6
6
  configuration: import("mobx-state-tree").ModelInstanceTypeProps<Record<string, any>> & {
7
- setSubschema(slotName: string, data: import("mobx-state-tree").ModelPropertiesDeclaration | import("../configuration/configurationSchema").AnyConfigurationSchemaType): any;
7
+ setSubschema(slotName: string, data: unknown): any;
8
8
  } & import("mobx-state-tree").IStateTreeNode<import("../configuration/configurationSchema").AnyConfigurationSchemaType>;
9
9
  feature?: Feature | undefined;
10
10
  timeout?: number | undefined;