@jbrowse/plugin-lollipop 2.6.1

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 (88) hide show
  1. package/LICENSE +201 -0
  2. package/dist/LinearLollipopDisplay/configSchema.d.ts +26 -0
  3. package/dist/LinearLollipopDisplay/configSchema.js +13 -0
  4. package/dist/LinearLollipopDisplay/configSchema.js.map +1 -0
  5. package/dist/LinearLollipopDisplay/index.d.ts +2 -0
  6. package/dist/LinearLollipopDisplay/index.js +8 -0
  7. package/dist/LinearLollipopDisplay/index.js.map +1 -0
  8. package/dist/LinearLollipopDisplay/model.d.ts +303 -0
  9. package/dist/LinearLollipopDisplay/model.js +36 -0
  10. package/dist/LinearLollipopDisplay/model.js.map +1 -0
  11. package/dist/LollipopRenderer/Layout.d.ts +55 -0
  12. package/dist/LollipopRenderer/Layout.js +116 -0
  13. package/dist/LollipopRenderer/Layout.js.map +1 -0
  14. package/dist/LollipopRenderer/LollipopRenderer.d.ts +13 -0
  15. package/dist/LollipopRenderer/LollipopRenderer.js +52 -0
  16. package/dist/LollipopRenderer/LollipopRenderer.js.map +1 -0
  17. package/dist/LollipopRenderer/components/Lollipop.d.ts +3 -0
  18. package/dist/LollipopRenderer/components/Lollipop.js +63 -0
  19. package/dist/LollipopRenderer/components/Lollipop.js.map +1 -0
  20. package/dist/LollipopRenderer/components/LollipopRendering.d.ts +3 -0
  21. package/dist/LollipopRenderer/components/LollipopRendering.js +80 -0
  22. package/dist/LollipopRenderer/components/LollipopRendering.js.map +1 -0
  23. package/dist/LollipopRenderer/components/ScoreText.d.ts +15 -0
  24. package/dist/LollipopRenderer/components/ScoreText.js +20 -0
  25. package/dist/LollipopRenderer/components/ScoreText.js.map +1 -0
  26. package/dist/LollipopRenderer/components/Stick.d.ts +15 -0
  27. package/dist/LollipopRenderer/components/Stick.js +12 -0
  28. package/dist/LollipopRenderer/components/Stick.js.map +1 -0
  29. package/dist/LollipopRenderer/configSchema.d.ts +56 -0
  30. package/dist/LollipopRenderer/configSchema.js +59 -0
  31. package/dist/LollipopRenderer/configSchema.js.map +1 -0
  32. package/dist/LollipopRenderer/index.d.ts +3 -0
  33. package/dist/LollipopRenderer/index.js +13 -0
  34. package/dist/LollipopRenderer/index.js.map +1 -0
  35. package/dist/index.d.ts +6 -0
  36. package/dist/index.js +60 -0
  37. package/dist/index.js.map +1 -0
  38. package/esm/LinearLollipopDisplay/configSchema.d.ts +26 -0
  39. package/esm/LinearLollipopDisplay/configSchema.js +9 -0
  40. package/esm/LinearLollipopDisplay/configSchema.js.map +1 -0
  41. package/esm/LinearLollipopDisplay/index.d.ts +2 -0
  42. package/esm/LinearLollipopDisplay/index.js +3 -0
  43. package/esm/LinearLollipopDisplay/index.js.map +1 -0
  44. package/esm/LinearLollipopDisplay/model.d.ts +303 -0
  45. package/esm/LinearLollipopDisplay/model.js +32 -0
  46. package/esm/LinearLollipopDisplay/model.js.map +1 -0
  47. package/esm/LollipopRenderer/Layout.d.ts +55 -0
  48. package/esm/LollipopRenderer/Layout.js +111 -0
  49. package/esm/LollipopRenderer/Layout.js.map +1 -0
  50. package/esm/LollipopRenderer/LollipopRenderer.d.ts +13 -0
  51. package/esm/LollipopRenderer/LollipopRenderer.js +23 -0
  52. package/esm/LollipopRenderer/LollipopRenderer.js.map +1 -0
  53. package/esm/LollipopRenderer/components/Lollipop.d.ts +3 -0
  54. package/esm/LollipopRenderer/components/Lollipop.js +58 -0
  55. package/esm/LollipopRenderer/components/Lollipop.js.map +1 -0
  56. package/esm/LollipopRenderer/components/LollipopRendering.d.ts +3 -0
  57. package/esm/LollipopRenderer/components/LollipopRendering.js +75 -0
  58. package/esm/LollipopRenderer/components/LollipopRendering.js.map +1 -0
  59. package/esm/LollipopRenderer/components/ScoreText.d.ts +15 -0
  60. package/esm/LollipopRenderer/components/ScoreText.js +14 -0
  61. package/esm/LollipopRenderer/components/ScoreText.js.map +1 -0
  62. package/esm/LollipopRenderer/components/Stick.d.ts +15 -0
  63. package/esm/LollipopRenderer/components/Stick.js +7 -0
  64. package/esm/LollipopRenderer/components/Stick.js.map +1 -0
  65. package/esm/LollipopRenderer/configSchema.d.ts +56 -0
  66. package/esm/LollipopRenderer/configSchema.js +57 -0
  67. package/esm/LollipopRenderer/configSchema.js.map +1 -0
  68. package/esm/LollipopRenderer/index.d.ts +3 -0
  69. package/esm/LollipopRenderer/index.js +4 -0
  70. package/esm/LollipopRenderer/index.js.map +1 -0
  71. package/esm/index.d.ts +6 -0
  72. package/esm/index.js +31 -0
  73. package/esm/index.js.map +1 -0
  74. package/package.json +56 -0
  75. package/src/LinearLollipopDisplay/configSchema.ts +14 -0
  76. package/src/LinearLollipopDisplay/index.ts +2 -0
  77. package/src/LinearLollipopDisplay/model.ts +40 -0
  78. package/src/LollipopRenderer/Layout.ts +172 -0
  79. package/src/LollipopRenderer/LollipopRenderer.js +29 -0
  80. package/src/LollipopRenderer/components/Lollipop.tsx +113 -0
  81. package/src/LollipopRenderer/components/LollipopRendering.test.js +45 -0
  82. package/src/LollipopRenderer/components/LollipopRendering.tsx +140 -0
  83. package/src/LollipopRenderer/components/ScoreText.tsx +43 -0
  84. package/src/LollipopRenderer/components/Stick.tsx +36 -0
  85. package/src/LollipopRenderer/components/__snapshots__/LollipopRendering.test.js.snap +37 -0
  86. package/src/LollipopRenderer/configSchema.ts +63 -0
  87. package/src/LollipopRenderer/index.ts +3 -0
  88. package/src/index.ts +41 -0
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrecomputedFloatingLayout = exports.FloatingLayout = void 0;
4
+ const configuration_1 = require("@jbrowse/core/configuration");
5
+ const range_1 = require("@jbrowse/core/util/range");
6
+ class FloatingLayout {
7
+ constructor({ width }) {
8
+ this.totalHeight = 0;
9
+ this.items = [];
10
+ this.layout = new Map();
11
+ this.layoutDirty = false;
12
+ if (!width) {
13
+ throw new Error('width required to make a new FloatingLayout');
14
+ }
15
+ this.width = width;
16
+ }
17
+ add(uniqueId, anchorLocation, width, height, data) {
18
+ this.items.push({ uniqueId, anchorLocation, width, height, data });
19
+ this.layoutDirty = true;
20
+ }
21
+ /**
22
+ * @returns Map of `uniqueId => {x,y,anchorLocation,width,height,data}`
23
+ */
24
+ getLayout(configuration) {
25
+ if (!this.layoutDirty) {
26
+ return this.layout;
27
+ }
28
+ if (!configuration) {
29
+ throw new Error('configuration object required');
30
+ }
31
+ const minY = (0, configuration_1.readConfObject)(configuration, 'minStickLength');
32
+ // sort them by score ascending, so higher scores will always end up
33
+ // stacked last (toward the bottom)
34
+ const sorted = this.items.sort((a, b) => a.data.score - b.data.score);
35
+ // bump them
36
+ let maxBottom = 0;
37
+ const layoutEntries = new Array(sorted.length);
38
+ for (let i = 0; i < sorted.length; i += 1) {
39
+ const currentItem = sorted[i];
40
+ const { anchorLocation, width, height } = currentItem;
41
+ const start = anchorLocation - width / 2;
42
+ const end = start + width;
43
+ let top = minY;
44
+ let bottom = top + height;
45
+ // figure out how far down to put it
46
+ for (let j = 0; j < i; j += 1) {
47
+ const [, previouslyLaidOutItem] = layoutEntries[j];
48
+ const { x: prevStart, y: prevTop, width: prevWidth, height: prevHeight, } = previouslyLaidOutItem;
49
+ const prevEnd = prevStart + prevWidth;
50
+ const prevBottom = prevTop + prevHeight;
51
+ if ((0, range_1.doesIntersect2)(prevStart, prevEnd, start, end) &&
52
+ (0, range_1.doesIntersect2)(prevTop, prevBottom, top, bottom)) {
53
+ // bump this one to the bottom of the previous one
54
+ top = prevBottom;
55
+ bottom = top + height;
56
+ j = -1; // we need to check all of them again after bumping
57
+ }
58
+ }
59
+ // record the entry and update the maxBottom
60
+ layoutEntries[i] = [
61
+ currentItem.uniqueId,
62
+ { ...currentItem, x: start, y: top },
63
+ ];
64
+ if (bottom > maxBottom) {
65
+ maxBottom = bottom;
66
+ }
67
+ }
68
+ // try to tile them left to right all at the same level
69
+ // if they don't fit, try to alternate them on 2 levels, then 3
70
+ this.totalHeight = maxBottom;
71
+ this.layout = new Map(layoutEntries);
72
+ this.layoutDirty = false;
73
+ return this.layout;
74
+ }
75
+ getTotalHeight() {
76
+ if (this.layoutDirty) {
77
+ throw new Error('getTotalHeight does not work when the layout is dirty.');
78
+ }
79
+ return this.totalHeight;
80
+ }
81
+ serializeRegion() {
82
+ return this.toJSON();
83
+ }
84
+ toJSON() {
85
+ if (this.layoutDirty) {
86
+ throw new Error('toJSON does not work when the layout is dirty.');
87
+ }
88
+ return { pairs: [...this.getLayout()], totalHeight: this.getTotalHeight() };
89
+ }
90
+ static fromJSON() {
91
+ throw new Error('not supported');
92
+ }
93
+ }
94
+ exports.FloatingLayout = FloatingLayout;
95
+ class PrecomputedFloatingLayout {
96
+ constructor({ pairs, totalHeight, }) {
97
+ this.layout = new Map(pairs);
98
+ this.totalHeight = totalHeight;
99
+ }
100
+ add(uniqueId) {
101
+ if (!this.layout.has(uniqueId)) {
102
+ throw new Error(`layout error, precomputed layout is missing ${uniqueId}`);
103
+ }
104
+ }
105
+ getLayout() {
106
+ return this.layout;
107
+ }
108
+ getTotalHeight() {
109
+ return this.totalHeight;
110
+ }
111
+ static fromJSON(json) {
112
+ return new PrecomputedFloatingLayout(json);
113
+ }
114
+ }
115
+ exports.PrecomputedFloatingLayout = PrecomputedFloatingLayout;
116
+ //# sourceMappingURL=Layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Layout.js","sourceRoot":"","sources":["../../src/LollipopRenderer/Layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export default class _default extends BoxRendererType {
2
+ createSession(args: any): FloatingLayoutSession;
3
+ deserializeLayoutInClient(json: any): PrecomputedFloatingLayout;
4
+ }
5
+ import BoxRendererType from '@jbrowse/core/pluggableElementTypes/renderers/BoxRendererType';
6
+ declare class FloatingLayoutSession extends LayoutSession {
7
+ makeLayout(): MultiLayout<import("@jbrowse/core/util/layouts").BaseLayout<any>, any>;
8
+ layoutIsValid(): boolean;
9
+ }
10
+ import { PrecomputedFloatingLayout } from './Layout';
11
+ import { LayoutSession } from '@jbrowse/core/pluggableElementTypes/renderers/BoxRendererType';
12
+ import MultiLayout from '@jbrowse/core/util/layouts/MultiLayout';
13
+ export {};
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const BoxRendererType_1 = __importStar(require("@jbrowse/core/pluggableElementTypes/renderers/BoxRendererType"));
30
+ const MultiLayout_1 = __importDefault(require("@jbrowse/core/util/layouts/MultiLayout"));
31
+ const Layout_1 = require("./Layout");
32
+ class FloatingLayoutSession extends BoxRendererType_1.LayoutSession {
33
+ makeLayout() {
34
+ 'sequenceAdapter';
35
+ const { end, start } = this.regions[0];
36
+ const widthPx = (end - start) / this.bpPerPx;
37
+ return new MultiLayout_1.default(Layout_1.FloatingLayout, { width: widthPx });
38
+ }
39
+ layoutIsValid( /* layout */) {
40
+ return false; // layout.left layout.width === this.width
41
+ }
42
+ }
43
+ class default_1 extends BoxRendererType_1.default {
44
+ createSession(args) {
45
+ return new FloatingLayoutSession(args);
46
+ }
47
+ deserializeLayoutInClient(json) {
48
+ return new Layout_1.PrecomputedFloatingLayout(json);
49
+ }
50
+ }
51
+ exports.default = default_1;
52
+ //# sourceMappingURL=LollipopRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LollipopRenderer.js","sourceRoot":"","sources":["../../src/LollipopRenderer/LollipopRenderer.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iHAEsE;AACtE,yFAAgE;AAChE,qCAAoE;AAEpE,MAAM,qBAAsB,SAAQ,+BAAa;IAC/C,UAAU;QACR,iBAAiB,CAAA;QAEjB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5C,OAAO,IAAI,qBAAW,CAAC,uBAAc,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,aAAa,EAAC,YAAY;QACxB,OAAO,KAAK,CAAA,CAAC,0CAA0C;IACzD,CAAC;CACF;AAED,eAAqB,SAAQ,yBAAe;IAC1C,aAAa,CAAC,IAAI;QAChB,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,yBAAyB,CAAC,IAAI;QAC5B,OAAO,IAAI,kCAAyB,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;CACF;AARD,4BAQC"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: (props: Record<string, any>) => React.JSX.Element;
3
+ export default _default;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const configuration_1 = require("@jbrowse/core/configuration");
8
+ const mobx_react_1 = require("mobx-react");
9
+ const ScoreText_1 = __importDefault(require("./ScoreText"));
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ exports.default = (0, mobx_react_1.observer)(function Lollipop(props) {
12
+ const { feature, config, layoutRecord, selectedFeatureId } = props;
13
+ const { anchorLocation, y, data: { radiusPx }, } = layoutRecord;
14
+ const onFeatureMouseDown = (event) => {
15
+ const { onFeatureMouseDown: handler, feature } = props;
16
+ return handler === null || handler === void 0 ? void 0 : handler(event, feature.id());
17
+ };
18
+ const onFeatureMouseEnter = (event) => {
19
+ const { onFeatureMouseEnter: handler, feature } = props;
20
+ return handler === null || handler === void 0 ? void 0 : handler(event, feature.id());
21
+ };
22
+ const onFeatureMouseOut = (event) => {
23
+ const { onFeatureMouseOut: handler, feature } = props;
24
+ return handler === null || handler === void 0 ? void 0 : handler(event, feature.id());
25
+ };
26
+ const onFeatureMouseOver = (event) => {
27
+ const { onFeatureMouseOver: handler, feature } = props;
28
+ return handler === null || handler === void 0 ? void 0 : handler(event, feature.id());
29
+ };
30
+ const onFeatureMouseUp = (event) => {
31
+ const { onFeatureMouseUp: handler, feature } = props;
32
+ return handler === null || handler === void 0 ? void 0 : handler(event, feature.id());
33
+ };
34
+ const onFeatureMouseLeave = (event) => {
35
+ const { onFeatureMouseLeave: handler, feature } = props;
36
+ return handler === null || handler === void 0 ? void 0 : handler(event, feature.id());
37
+ };
38
+ const onFeatureMouseMove = (event) => {
39
+ const { onFeatureMouseMove: handler, feature } = props;
40
+ return handler === null || handler === void 0 ? void 0 : handler(event, feature.id());
41
+ };
42
+ const onFeatureClick = (event) => {
43
+ const { onFeatureClick: handler, feature } = props;
44
+ event.stopPropagation();
45
+ return handler === null || handler === void 0 ? void 0 : handler(event, feature.id());
46
+ };
47
+ const styleOuter = {
48
+ fill: (0, configuration_1.readConfObject)(config, 'strokeColor', { feature }),
49
+ };
50
+ if (String(selectedFeatureId) === String(feature.id())) {
51
+ styleOuter.fill = 'red';
52
+ }
53
+ const styleInner = {
54
+ fill: (0, configuration_1.readConfObject)(config, 'innerColor', { feature }),
55
+ };
56
+ const strokeWidth = (0, configuration_1.readConfObject)(config, 'strokeWidth', { feature });
57
+ return (react_1.default.createElement("g", { "data-testid": feature.id() },
58
+ react_1.default.createElement("title", null, (0, configuration_1.readConfObject)(config, 'caption', { feature })),
59
+ react_1.default.createElement("circle", { cx: anchorLocation, cy: y + radiusPx, r: radiusPx, style: styleOuter, onMouseDown: onFeatureMouseDown, onMouseEnter: onFeatureMouseEnter, onMouseOut: onFeatureMouseOut, onMouseOver: onFeatureMouseOver, onMouseUp: onFeatureMouseUp, onMouseLeave: onFeatureMouseLeave, onMouseMove: onFeatureMouseMove, onClick: onFeatureClick, onFocus: onFeatureMouseOver, onBlur: onFeatureMouseOut }),
60
+ radiusPx - strokeWidth <= 2 ? null : (react_1.default.createElement("circle", { cx: anchorLocation, cy: y + radiusPx, r: radiusPx - strokeWidth, style: styleInner, onMouseDown: onFeatureMouseDown, onMouseEnter: onFeatureMouseEnter, onMouseOut: onFeatureMouseOut, onMouseOver: onFeatureMouseOver, onMouseUp: onFeatureMouseUp, onMouseLeave: onFeatureMouseLeave, onMouseMove: onFeatureMouseMove, onClick: onFeatureClick, onFocus: onFeatureMouseOver, onBlur: onFeatureMouseOut })),
61
+ react_1.default.createElement(ScoreText_1.default, { feature: feature, config: config, layoutRecord: layoutRecord })));
62
+ });
63
+ //# sourceMappingURL=Lollipop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lollipop.js","sourceRoot":"","sources":["../../../src/LollipopRenderer/components/Lollipop.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: (props: Record<string, any>) => React.JSX.Element;
3
+ export default _default;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const configuration_1 = require("@jbrowse/core/configuration");
8
+ const util_1 = require("@jbrowse/core/util");
9
+ const mobx_react_1 = require("mobx-react");
10
+ // locals
11
+ const Lollipop_1 = __importDefault(require("./Lollipop"));
12
+ const Stick_1 = __importDefault(require("./Stick"));
13
+ function layoutFeat(args) {
14
+ const { feature, bpPerPx, config, region, layout } = args;
15
+ const centerBp = Math.abs(feature.get('end') + feature.get('start')) / 2;
16
+ const centerPx = (0, util_1.bpToPx)(centerBp, region, bpPerPx);
17
+ const radiusPx = (0, configuration_1.readConfObject)(config, 'radius', { feature });
18
+ if (!radiusPx) {
19
+ console.error(new Error(`lollipop radius ${radiusPx} configured for feature ${feature.id()}`));
20
+ }
21
+ layout.add(feature.id(), centerPx, radiusPx * 2, radiusPx * 2, {
22
+ featureId: feature.id(),
23
+ anchorX: centerPx,
24
+ radiusPx,
25
+ score: (0, configuration_1.readConfObject)(args.config, 'score', { feature }),
26
+ });
27
+ }
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ exports.default = (0, mobx_react_1.observer)(function LollipopRendering(props) {
30
+ const onMouseDown = (event) => {
31
+ const { onMouseDown: handler } = props;
32
+ return handler === null || handler === void 0 ? void 0 : handler(event);
33
+ };
34
+ const onMouseUp = (event) => {
35
+ const { onMouseUp: handler } = props;
36
+ return handler === null || handler === void 0 ? void 0 : handler(event);
37
+ };
38
+ const onMouseEnter = (event) => {
39
+ const { onMouseEnter: handler } = props;
40
+ return handler === null || handler === void 0 ? void 0 : handler(event);
41
+ };
42
+ const onMouseLeave = (event) => {
43
+ const { onMouseLeave: handler } = props;
44
+ return handler === null || handler === void 0 ? void 0 : handler(event);
45
+ };
46
+ const onMouseOver = (event) => {
47
+ const { onMouseOver: handler } = props;
48
+ return handler === null || handler === void 0 ? void 0 : handler(event);
49
+ };
50
+ const onMouseOut = (event) => {
51
+ const { onMouseOut: handler } = props;
52
+ return handler === null || handler === void 0 ? void 0 : handler(event);
53
+ };
54
+ const onClick = (event) => {
55
+ const { onClick: handler } = props;
56
+ return handler === null || handler === void 0 ? void 0 : handler(event);
57
+ };
58
+ const { regions, bpPerPx, layout, config, features = new Map(), displayModel = {}, } = props;
59
+ const { selectedFeatureId } = displayModel;
60
+ const [region] = regions;
61
+ for (const feature of features.values()) {
62
+ layoutFeat({
63
+ feature,
64
+ bpPerPx,
65
+ region,
66
+ config,
67
+ layout,
68
+ });
69
+ }
70
+ const width = (region.end - region.start) / bpPerPx;
71
+ const records = [...layout.getLayout(config).values()];
72
+ const height = layout.getTotalHeight();
73
+ return (react_1.default.createElement("svg", { width: width, height: height, style: { position: 'relative' }, onMouseDown: onMouseDown, onMouseUp: onMouseUp, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onMouseOver: onMouseOver, onMouseOut: onMouseOut, onFocus: onMouseEnter, onBlur: onMouseLeave, onClick: onClick }, records.map(layoutRecord => {
74
+ const feature = features.get(layoutRecord.data.featureId);
75
+ return (react_1.default.createElement(react_1.default.Fragment, { key: feature.id() },
76
+ react_1.default.createElement(Stick_1.default, { ...props, config: config, layoutRecord: layoutRecord, feature: feature, key: `stick-${feature.id()}` }),
77
+ react_1.default.createElement(Lollipop_1.default, { ...props, layoutRecord: layoutRecord, feature: feature, key: `body-${feature.id()}`, selectedFeatureId: selectedFeatureId })));
78
+ })));
79
+ });
80
+ //# sourceMappingURL=LollipopRendering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LollipopRendering.js","sourceRoot":"","sources":["../../../src/LollipopRenderer/components/LollipopRendering.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration';
3
+ import { Feature } from '@jbrowse/core/util';
4
+ export default function ScoreText({ feature, config, layoutRecord: { y, data: { anchorX, radiusPx, score }, }, }: {
5
+ feature: Feature;
6
+ config: AnyConfigurationModel;
7
+ layoutRecord: {
8
+ y: number;
9
+ data: {
10
+ anchorX: number;
11
+ radiusPx: number;
12
+ score: number;
13
+ };
14
+ };
15
+ }): React.JSX.Element | null;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const configuration_1 = require("@jbrowse/core/configuration");
8
+ const color_1 = require("@jbrowse/core/util/color");
9
+ function ScoreText({ feature, config, layoutRecord: { y, data: { anchorX, radiusPx, score }, }, }) {
10
+ const innerColor = (0, configuration_1.readConfObject)(config, 'innerColor', { feature });
11
+ const scoreString = String(score);
12
+ const fontWidth = (radiusPx * 2) / scoreString.length;
13
+ const fontHeight = fontWidth * 1.1;
14
+ if (fontHeight < 12) {
15
+ return null;
16
+ }
17
+ return (react_1.default.createElement("text", { style: { fontSize: fontHeight, fill: (0, color_1.contrastingTextColor)(innerColor) }, x: anchorX, y: y + radiusPx - fontHeight / 2.4, textAnchor: "middle", dominantBaseline: "hanging" }, scoreString));
18
+ }
19
+ exports.default = ScoreText;
20
+ //# sourceMappingURL=ScoreText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScoreText.js","sourceRoot":"","sources":["../../../src/LollipopRenderer/components/ScoreText.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,+DAGoC;AACpC,oDAA+D;AAG/D,SAAwB,SAAS,CAAC,EAChC,OAAO,EACP,MAAM,EACN,YAAY,EAAE,EACZ,CAAC,EACD,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GACnC,GAQF;IACC,MAAM,UAAU,GAAG,IAAA,8BAAc,EAAC,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IAEpE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAA;IACrD,MAAM,UAAU,GAAG,SAAS,GAAG,GAAG,CAAA;IAClC,IAAI,UAAU,GAAG,EAAE,EAAE;QACnB,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,CACL,wCACE,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,IAAA,4BAAoB,EAAC,UAAU,CAAC,EAAE,EACvE,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,UAAU,GAAG,GAAG,EAClC,UAAU,EAAC,QAAQ,EACnB,gBAAgB,EAAC,SAAS,IAEzB,WAAW,CACP,CACR,CAAA;AACH,CAAC;AAlCD,4BAkCC"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration';
3
+ import { Feature } from '@jbrowse/core/util';
4
+ declare const _default: ({ feature, config, layoutRecord: { anchorLocation, y, data: { radiusPx }, }, }: {
5
+ feature: Feature;
6
+ config: AnyConfigurationModel;
7
+ layoutRecord: {
8
+ anchorLocation: number;
9
+ y: number;
10
+ data: {
11
+ radiusPx: number;
12
+ };
13
+ };
14
+ }) => React.JSX.Element;
15
+ export default _default;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const configuration_1 = require("@jbrowse/core/configuration");
8
+ const mobx_react_1 = require("mobx-react");
9
+ exports.default = (0, mobx_react_1.observer)(function Stick({ feature, config, layoutRecord: { anchorLocation, y, data: { radiusPx }, }, }) {
10
+ return (react_1.default.createElement("line", { x1: anchorLocation, y1: 0, x2: anchorLocation, y2: y + 2 * radiusPx, stroke: (0, configuration_1.readConfObject)(config, 'stickColor', { feature }), strokeWidth: (0, configuration_1.readConfObject)(config, 'stickWidth', { feature }) }));
11
+ });
12
+ //# sourceMappingURL=Stick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stick.js","sourceRoot":"","sources":["../../../src/LollipopRenderer/components/Stick.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,+DAGoC;AACpC,2CAAqC;AAGrC,kBAAe,IAAA,qBAAQ,EAAC,SAAS,KAAK,CAAC,EACrC,OAAO,EACP,MAAM,EACN,YAAY,EAAE,EACZ,cAAc,EACd,CAAC,EACD,IAAI,EAAE,EAAE,QAAQ,EAAE,GACnB,GASF;IACC,OAAO,CACL,wCACE,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,EACpB,MAAM,EAAE,IAAA,8BAAc,EAAC,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,EACzD,WAAW,EAAE,IAAA,8BAAc,EAAC,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,GAC9D,CACH,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,56 @@
1
+ declare const _default: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
2
+ strokeColor: {
3
+ type: string;
4
+ description: string;
5
+ defaultValue: string;
6
+ contextVariable: string[];
7
+ };
8
+ innerColor: {
9
+ type: string;
10
+ description: string;
11
+ defaultValue: string;
12
+ contextVariable: string[];
13
+ };
14
+ strokeWidth: {
15
+ type: string;
16
+ description: string;
17
+ defaultValue: number;
18
+ contextVariable: string[];
19
+ };
20
+ radius: {
21
+ type: string;
22
+ description: string;
23
+ defaultValue: string;
24
+ contextVariable: string[];
25
+ };
26
+ caption: {
27
+ type: string;
28
+ description: string;
29
+ defaultValue: string;
30
+ contextVariable: string[];
31
+ };
32
+ minStickLength: {
33
+ type: string;
34
+ description: string;
35
+ defaultValue: number;
36
+ };
37
+ stickColor: {
38
+ type: string;
39
+ description: string;
40
+ defaultValue: string;
41
+ contextVariable: string[];
42
+ };
43
+ stickWidth: {
44
+ type: string;
45
+ description: string;
46
+ defaultValue: number;
47
+ contextVariable: string[];
48
+ };
49
+ score: {
50
+ type: string;
51
+ description: string;
52
+ defaultValue: string;
53
+ contextVariable: string[];
54
+ };
55
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
56
+ export default _default;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const configuration_1 = require("@jbrowse/core/configuration");
4
+ exports.default = (0, configuration_1.ConfigurationSchema)('LollipopRenderer', {
5
+ strokeColor: {
6
+ type: 'color',
7
+ description: 'the outer color of each lollipop',
8
+ defaultValue: 'green',
9
+ contextVariable: ['feature'],
10
+ },
11
+ innerColor: {
12
+ type: 'color',
13
+ description: 'the inner color of each lollipop',
14
+ defaultValue: '#7fc75f',
15
+ contextVariable: ['feature'],
16
+ },
17
+ strokeWidth: {
18
+ type: 'number',
19
+ description: 'width of the stroked border',
20
+ defaultValue: 4,
21
+ contextVariable: ['feature'],
22
+ },
23
+ radius: {
24
+ type: 'number',
25
+ description: 'radius in pixels of each lollipop body',
26
+ defaultValue: `jexl:sqrt(max(3, (get(feature,'score')*10)/3.14))`,
27
+ contextVariable: ['feature'],
28
+ },
29
+ caption: {
30
+ type: 'string',
31
+ description: 'the tooltip caption displayed when the mouse hovers over a lollipop',
32
+ defaultValue: `jexl:get(feature,'name')`,
33
+ contextVariable: ['feature'],
34
+ },
35
+ minStickLength: {
36
+ type: 'number',
37
+ description: 'minimum lollipop "stick" length, in pixels',
38
+ defaultValue: 5,
39
+ },
40
+ stickColor: {
41
+ type: 'color',
42
+ description: 'color of the lollipop stick',
43
+ defaultValue: 'black',
44
+ contextVariable: ['feature'],
45
+ },
46
+ stickWidth: {
47
+ type: 'number',
48
+ description: 'width in pixels of the lollipop stick',
49
+ defaultValue: 2,
50
+ contextVariable: ['feature'],
51
+ },
52
+ score: {
53
+ type: 'number',
54
+ description: 'the "score" of each lollipop, displayed as a number in the center of the circle',
55
+ defaultValue: `jexl:get(feature,'score')`,
56
+ contextVariable: ['feature'],
57
+ },
58
+ }, { explicitlyTyped: true });
59
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/LollipopRenderer/configSchema.ts"],"names":[],"mappings":";;AAAA,+DAAiE;AAEjE,kBAAe,IAAA,mCAAmB,EAChC,kBAAkB,EAClB;IACE,WAAW,EAAE;QACX,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,kCAAkC;QAC/C,YAAY,EAAE,OAAO;QACrB,eAAe,EAAE,CAAC,SAAS,CAAC;KAC7B;IACD,UAAU,EAAE;QACV,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,kCAAkC;QAC/C,YAAY,EAAE,SAAS;QACvB,eAAe,EAAE,CAAC,SAAS,CAAC;KAC7B;IACD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6BAA6B;QAC1C,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,CAAC,SAAS,CAAC;KAC7B;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wCAAwC;QACrD,YAAY,EAAE,mDAAmD;QACjE,eAAe,EAAE,CAAC,SAAS,CAAC;KAC7B;IACD,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,WAAW,EACT,qEAAqE;QACvE,YAAY,EAAE,0BAA0B;QACxC,eAAe,EAAE,CAAC,SAAS,CAAC;KAC7B;IACD,cAAc,EAAE;QACd,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,4CAA4C;QACzD,YAAY,EAAE,CAAC;KAChB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,6BAA6B;QAC1C,YAAY,EAAE,OAAO;QACrB,eAAe,EAAE,CAAC,SAAS,CAAC;KAC7B;IACD,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,uCAAuC;QACpD,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,CAAC,SAAS,CAAC;KAC7B;IACD,KAAK,EAAE;QACL,IAAI,EAAE,QAAQ;QACd,WAAW,EACT,iFAAiF;QACnF,YAAY,EAAE,2BAA2B;QACzC,eAAe,EAAE,CAAC,SAAS,CAAC;KAC7B;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { default as ReactComponent } from './components/LollipopRendering';
2
+ export { default as configSchema } from './configSchema';
3
+ export { default } from './LollipopRenderer';
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = exports.configSchema = exports.ReactComponent = void 0;
7
+ var LollipopRendering_1 = require("./components/LollipopRendering");
8
+ Object.defineProperty(exports, "ReactComponent", { enumerable: true, get: function () { return __importDefault(LollipopRendering_1).default; } });
9
+ var configSchema_1 = require("./configSchema");
10
+ Object.defineProperty(exports, "configSchema", { enumerable: true, get: function () { return __importDefault(configSchema_1).default; } });
11
+ var LollipopRenderer_1 = require("./LollipopRenderer");
12
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(LollipopRenderer_1).default; } });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/LollipopRenderer/index.ts"],"names":[],"mappings":";;;;;;AAAA,oEAA0E;AAAjE,oIAAA,OAAO,OAAkB;AAClC,+CAAwD;AAA/C,6HAAA,OAAO,OAAgB;AAChC,uDAA4C;AAAnC,4HAAA,OAAO,OAAA"}
@@ -0,0 +1,6 @@
1
+ import Plugin from '@jbrowse/core/Plugin';
2
+ import PluginManager from '@jbrowse/core/PluginManager';
3
+ export default class extends Plugin {
4
+ name: string;
5
+ install(pluginManager: PluginManager): void;
6
+ }