@jbrowse/plugin-linear-genome-view 2.2.0 → 2.2.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 (225) hide show
  1. package/dist/BaseLinearDisplay/components/Tooltip.d.ts +1 -1
  2. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +3 -3
  3. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +2 -2
  4. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js +1 -1
  5. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js.map +1 -1
  6. package/dist/BasicTrack/index.d.ts +1 -1
  7. package/dist/BasicTrack/index.js +4 -4
  8. package/dist/BasicTrack/index.js.map +1 -1
  9. package/dist/LaunchLinearGenomeView/index.d.ts +3 -0
  10. package/dist/LaunchLinearGenomeView/index.js +44 -0
  11. package/dist/LaunchLinearGenomeView/index.js.map +1 -0
  12. package/dist/LinearBareDisplay/index.d.ts +6 -2
  13. package/dist/LinearBareDisplay/index.js +17 -2
  14. package/dist/LinearBareDisplay/index.js.map +1 -1
  15. package/dist/LinearBasicDisplay/components/SetMaxHeight.js +2 -15
  16. package/dist/LinearBasicDisplay/components/SetMaxHeight.js.map +1 -1
  17. package/dist/LinearBasicDisplay/index.d.ts +6 -2
  18. package/dist/LinearBasicDisplay/index.js +20 -4
  19. package/dist/LinearBasicDisplay/index.js.map +1 -1
  20. package/dist/LinearBasicDisplay/model.d.ts +21 -14
  21. package/dist/LinearBasicDisplay/model.js +2 -1
  22. package/dist/LinearBasicDisplay/model.js.map +1 -1
  23. package/dist/LinearGenomeView/components/CenterLine.d.ts +1 -1
  24. package/dist/LinearGenomeView/components/ExportSvgDialog.js +1 -19
  25. package/dist/LinearGenomeView/components/ExportSvgDialog.js.map +1 -1
  26. package/dist/LinearGenomeView/components/GetSequenceDialog.d.ts +1 -1
  27. package/dist/LinearGenomeView/components/GetSequenceDialog.js +7 -18
  28. package/dist/LinearGenomeView/components/GetSequenceDialog.js.map +1 -1
  29. package/dist/LinearGenomeView/components/Gridlines.d.ts +1 -1
  30. package/dist/LinearGenomeView/components/Header.d.ts +1 -1
  31. package/dist/LinearGenomeView/components/Header.js +2 -2
  32. package/dist/LinearGenomeView/components/HelpDialog.js +2 -17
  33. package/dist/LinearGenomeView/components/HelpDialog.js.map +1 -1
  34. package/dist/LinearGenomeView/components/ImportForm.d.ts +1 -1
  35. package/dist/LinearGenomeView/components/ImportForm.js +18 -16
  36. package/dist/LinearGenomeView/components/ImportForm.js.map +1 -1
  37. package/dist/LinearGenomeView/components/LinearGenomeView.d.ts +1 -1
  38. package/dist/LinearGenomeView/components/LinearGenomeView.js +1 -3
  39. package/dist/LinearGenomeView/components/LinearGenomeView.js.map +1 -1
  40. package/dist/LinearGenomeView/components/LinearGenomeViewSvg.d.ts +1 -1
  41. package/dist/LinearGenomeView/components/LinearGenomeViewSvg.js +5 -5
  42. package/dist/LinearGenomeView/components/{OverviewRubberBand.d.ts → OverviewRubberband.d.ts} +3 -3
  43. package/dist/LinearGenomeView/components/{OverviewRubberBand.js → OverviewRubberband.js} +27 -79
  44. package/dist/LinearGenomeView/components/OverviewRubberband.js.map +1 -0
  45. package/{esm/LinearGenomeView/components/OverviewScaleBar.d.ts → dist/LinearGenomeView/components/OverviewScalebar.d.ts} +3 -3
  46. package/dist/LinearGenomeView/components/{OverviewScaleBar.js → OverviewScalebar.js} +25 -24
  47. package/dist/LinearGenomeView/components/OverviewScalebar.js.map +1 -0
  48. package/dist/LinearGenomeView/components/RefNameAutocomplete.js +1 -1
  49. package/dist/LinearGenomeView/components/RefNameAutocomplete.js.map +1 -1
  50. package/dist/LinearGenomeView/components/{RubberBand.d.ts → Rubberband.d.ts} +3 -3
  51. package/dist/LinearGenomeView/components/Rubberband.js +57 -0
  52. package/dist/LinearGenomeView/components/Rubberband.js.map +1 -0
  53. package/dist/LinearGenomeView/components/RubberbandSpan.d.ts +14 -0
  54. package/dist/LinearGenomeView/components/RubberbandSpan.js +90 -0
  55. package/dist/LinearGenomeView/components/RubberbandSpan.js.map +1 -0
  56. package/dist/LinearGenomeView/components/{ScaleBar.d.ts → Scalebar.d.ts} +3 -3
  57. package/dist/LinearGenomeView/components/{ScaleBar.js → Scalebar.js} +11 -11
  58. package/dist/LinearGenomeView/components/{ScaleBar.js.map → Scalebar.js.map} +1 -1
  59. package/dist/LinearGenomeView/components/SearchBox.js +6 -6
  60. package/dist/LinearGenomeView/components/SearchBox.js.map +1 -1
  61. package/dist/LinearGenomeView/components/SearchResultsDialog.js +17 -31
  62. package/dist/LinearGenomeView/components/SearchResultsDialog.js.map +1 -1
  63. package/dist/LinearGenomeView/components/SequenceSearchDialog.js +4 -19
  64. package/dist/LinearGenomeView/components/SequenceSearchDialog.js.map +1 -1
  65. package/dist/LinearGenomeView/components/TrackContainer.d.ts +1 -1
  66. package/dist/LinearGenomeView/components/TrackContainer.js +13 -10
  67. package/dist/LinearGenomeView/components/TrackContainer.js.map +1 -1
  68. package/dist/LinearGenomeView/components/TrackLabel.js +9 -1
  69. package/dist/LinearGenomeView/components/TrackLabel.js.map +1 -1
  70. package/dist/LinearGenomeView/components/TracksContainer.d.ts +1 -1
  71. package/dist/LinearGenomeView/components/TracksContainer.js +21 -118
  72. package/dist/LinearGenomeView/components/TracksContainer.js.map +1 -1
  73. package/dist/LinearGenomeView/components/VerticalGuide.d.ts +9 -0
  74. package/dist/LinearGenomeView/components/VerticalGuide.js +29 -0
  75. package/dist/LinearGenomeView/components/VerticalGuide.js.map +1 -0
  76. package/dist/LinearGenomeView/components/hooks.d.ts +65 -0
  77. package/dist/LinearGenomeView/components/hooks.js +264 -0
  78. package/dist/LinearGenomeView/components/hooks.js.map +1 -0
  79. package/dist/LinearGenomeView/components/util.d.ts +5 -2
  80. package/dist/LinearGenomeView/components/util.js +7 -6
  81. package/dist/LinearGenomeView/components/util.js.map +1 -1
  82. package/dist/LinearGenomeView/index.d.ts +3 -453
  83. package/dist/LinearGenomeView/index.js +11 -1247
  84. package/dist/LinearGenomeView/index.js.map +1 -1
  85. package/dist/LinearGenomeView/model.d.ts +535 -0
  86. package/dist/LinearGenomeView/model.js +1357 -0
  87. package/dist/LinearGenomeView/model.js.map +1 -0
  88. package/dist/index.d.ts +20 -8
  89. package/dist/index.js +9 -72
  90. package/dist/index.js.map +1 -1
  91. package/esm/BaseLinearDisplay/components/Tooltip.d.ts +1 -1
  92. package/esm/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +3 -3
  93. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +2 -2
  94. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.js +1 -1
  95. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.js.map +1 -1
  96. package/esm/BasicTrack/index.d.ts +1 -1
  97. package/esm/BasicTrack/index.js +4 -4
  98. package/esm/BasicTrack/index.js.map +1 -1
  99. package/esm/LaunchLinearGenomeView/index.d.ts +3 -0
  100. package/esm/LaunchLinearGenomeView/index.js +42 -0
  101. package/esm/LaunchLinearGenomeView/index.js.map +1 -0
  102. package/esm/LinearBareDisplay/index.d.ts +6 -2
  103. package/esm/LinearBareDisplay/index.js +18 -2
  104. package/esm/LinearBareDisplay/index.js.map +1 -1
  105. package/esm/LinearBasicDisplay/components/SetMaxHeight.js +3 -13
  106. package/esm/LinearBasicDisplay/components/SetMaxHeight.js.map +1 -1
  107. package/esm/LinearBasicDisplay/index.d.ts +6 -2
  108. package/esm/LinearBasicDisplay/index.js +19 -2
  109. package/esm/LinearBasicDisplay/index.js.map +1 -1
  110. package/esm/LinearBasicDisplay/model.d.ts +21 -14
  111. package/esm/LinearBasicDisplay/model.js +2 -1
  112. package/esm/LinearBasicDisplay/model.js.map +1 -1
  113. package/esm/LinearGenomeView/components/CenterLine.d.ts +1 -1
  114. package/esm/LinearGenomeView/components/ExportSvgDialog.js +3 -18
  115. package/esm/LinearGenomeView/components/ExportSvgDialog.js.map +1 -1
  116. package/esm/LinearGenomeView/components/GetSequenceDialog.d.ts +1 -1
  117. package/esm/LinearGenomeView/components/GetSequenceDialog.js +8 -19
  118. package/esm/LinearGenomeView/components/GetSequenceDialog.js.map +1 -1
  119. package/esm/LinearGenomeView/components/Gridlines.d.ts +1 -1
  120. package/esm/LinearGenomeView/components/Header.d.ts +1 -1
  121. package/esm/LinearGenomeView/components/Header.js +2 -2
  122. package/esm/LinearGenomeView/components/HelpDialog.js +3 -18
  123. package/esm/LinearGenomeView/components/HelpDialog.js.map +1 -1
  124. package/esm/LinearGenomeView/components/ImportForm.d.ts +1 -1
  125. package/esm/LinearGenomeView/components/ImportForm.js +18 -16
  126. package/esm/LinearGenomeView/components/ImportForm.js.map +1 -1
  127. package/esm/LinearGenomeView/components/LinearGenomeView.d.ts +1 -1
  128. package/esm/LinearGenomeView/components/LinearGenomeView.js +2 -4
  129. package/esm/LinearGenomeView/components/LinearGenomeView.js.map +1 -1
  130. package/esm/LinearGenomeView/components/LinearGenomeViewSvg.d.ts +1 -1
  131. package/esm/LinearGenomeView/components/LinearGenomeViewSvg.js +3 -3
  132. package/esm/LinearGenomeView/components/{OverviewRubberBand.d.ts → OverviewRubberband.d.ts} +3 -3
  133. package/esm/LinearGenomeView/components/{OverviewRubberBand.js → OverviewRubberband.js} +25 -80
  134. package/esm/LinearGenomeView/components/OverviewRubberband.js.map +1 -0
  135. package/{dist/LinearGenomeView/components/OverviewScaleBar.d.ts → esm/LinearGenomeView/components/OverviewScalebar.d.ts} +3 -3
  136. package/esm/LinearGenomeView/components/{OverviewScaleBar.js → OverviewScalebar.js} +25 -24
  137. package/esm/LinearGenomeView/components/OverviewScalebar.js.map +1 -0
  138. package/esm/LinearGenomeView/components/RefNameAutocomplete.js +1 -1
  139. package/esm/LinearGenomeView/components/RefNameAutocomplete.js.map +1 -1
  140. package/esm/LinearGenomeView/components/{RubberBand.d.ts → Rubberband.d.ts} +3 -3
  141. package/esm/LinearGenomeView/components/Rubberband.js +29 -0
  142. package/esm/LinearGenomeView/components/Rubberband.js.map +1 -0
  143. package/esm/LinearGenomeView/components/RubberbandSpan.d.ts +14 -0
  144. package/esm/LinearGenomeView/components/RubberbandSpan.js +65 -0
  145. package/esm/LinearGenomeView/components/RubberbandSpan.js.map +1 -0
  146. package/esm/LinearGenomeView/components/{ScaleBar.d.ts → Scalebar.d.ts} +3 -3
  147. package/esm/LinearGenomeView/components/{ScaleBar.js → Scalebar.js} +11 -11
  148. package/esm/LinearGenomeView/components/{ScaleBar.js.map → Scalebar.js.map} +1 -1
  149. package/esm/LinearGenomeView/components/SearchBox.js +6 -6
  150. package/esm/LinearGenomeView/components/SearchBox.js.map +1 -1
  151. package/esm/LinearGenomeView/components/SearchResultsDialog.js +18 -32
  152. package/esm/LinearGenomeView/components/SearchResultsDialog.js.map +1 -1
  153. package/esm/LinearGenomeView/components/SequenceSearchDialog.js +5 -17
  154. package/esm/LinearGenomeView/components/SequenceSearchDialog.js.map +1 -1
  155. package/esm/LinearGenomeView/components/TrackContainer.d.ts +1 -1
  156. package/esm/LinearGenomeView/components/TrackContainer.js +14 -11
  157. package/esm/LinearGenomeView/components/TrackContainer.js.map +1 -1
  158. package/esm/LinearGenomeView/components/TrackLabel.js +9 -1
  159. package/esm/LinearGenomeView/components/TrackLabel.js.map +1 -1
  160. package/esm/LinearGenomeView/components/TracksContainer.d.ts +1 -1
  161. package/esm/LinearGenomeView/components/TracksContainer.js +22 -119
  162. package/esm/LinearGenomeView/components/TracksContainer.js.map +1 -1
  163. package/esm/LinearGenomeView/components/VerticalGuide.d.ts +9 -0
  164. package/esm/LinearGenomeView/components/VerticalGuide.js +24 -0
  165. package/esm/LinearGenomeView/components/VerticalGuide.js.map +1 -0
  166. package/esm/LinearGenomeView/components/hooks.d.ts +65 -0
  167. package/esm/LinearGenomeView/components/hooks.js +255 -0
  168. package/esm/LinearGenomeView/components/hooks.js.map +1 -0
  169. package/esm/LinearGenomeView/components/util.d.ts +5 -2
  170. package/esm/LinearGenomeView/components/util.js +4 -3
  171. package/esm/LinearGenomeView/components/util.js.map +1 -1
  172. package/esm/LinearGenomeView/index.d.ts +3 -453
  173. package/esm/LinearGenomeView/index.js +9 -1238
  174. package/esm/LinearGenomeView/index.js.map +1 -1
  175. package/esm/LinearGenomeView/model.d.ts +535 -0
  176. package/esm/LinearGenomeView/model.js +1322 -0
  177. package/esm/LinearGenomeView/model.js.map +1 -0
  178. package/esm/index.d.ts +20 -8
  179. package/esm/index.js +9 -72
  180. package/esm/index.js.map +1 -1
  181. package/package.json +3 -3
  182. package/src/BaseLinearDisplay/models/serverSideRenderedBlock.ts +1 -1
  183. package/src/BasicTrack/index.ts +4 -8
  184. package/src/LaunchLinearGenomeView/index.ts +66 -0
  185. package/src/LinearBareDisplay/index.ts +21 -2
  186. package/src/LinearBasicDisplay/components/SetMaxHeight.tsx +3 -28
  187. package/src/LinearBasicDisplay/index.ts +23 -2
  188. package/src/LinearBasicDisplay/model.ts +2 -1
  189. package/src/LinearGenomeView/components/ExportSvgDialog.tsx +2 -23
  190. package/src/LinearGenomeView/components/GetSequenceDialog.tsx +13 -31
  191. package/src/LinearGenomeView/components/Header.tsx +3 -3
  192. package/src/LinearGenomeView/components/HelpDialog.tsx +8 -34
  193. package/src/LinearGenomeView/components/ImportForm.tsx +19 -16
  194. package/src/LinearGenomeView/components/LinearGenomeView.tsx +2 -8
  195. package/src/LinearGenomeView/components/LinearGenomeViewSvg.tsx +3 -3
  196. package/src/LinearGenomeView/components/{OverviewRubberBand.tsx → OverviewRubberband.tsx} +32 -114
  197. package/src/LinearGenomeView/components/{OverviewScaleBar.tsx → OverviewScalebar.tsx} +26 -25
  198. package/src/LinearGenomeView/components/RefNameAutocomplete.tsx +2 -1
  199. package/src/LinearGenomeView/components/Rubberband.tsx +89 -0
  200. package/src/LinearGenomeView/components/RubberbandSpan.tsx +116 -0
  201. package/src/LinearGenomeView/components/{ScaleBar.test.tsx → Scalebar.test.tsx} +5 -5
  202. package/src/LinearGenomeView/components/{ScaleBar.tsx → Scalebar.tsx} +11 -11
  203. package/src/LinearGenomeView/components/SearchBox.tsx +6 -6
  204. package/src/LinearGenomeView/components/SearchResultsDialog.tsx +17 -44
  205. package/src/LinearGenomeView/components/SequenceSearchDialog.tsx +4 -30
  206. package/src/LinearGenomeView/components/TrackContainer.tsx +41 -28
  207. package/src/LinearGenomeView/components/TrackLabel.tsx +10 -1
  208. package/src/LinearGenomeView/components/TracksContainer.tsx +59 -136
  209. package/src/LinearGenomeView/components/VerticalGuide.tsx +37 -0
  210. package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.tsx.snap +37 -39
  211. package/src/LinearGenomeView/components/hooks.ts +300 -0
  212. package/src/LinearGenomeView/components/util.ts +8 -11
  213. package/src/LinearGenomeView/index.test.ts +6 -7
  214. package/src/LinearGenomeView/index.ts +17 -0
  215. package/src/LinearGenomeView/{index.tsx → model.ts} +159 -75
  216. package/src/index.ts +13 -108
  217. package/dist/LinearGenomeView/components/OverviewRubberBand.js.map +0 -1
  218. package/dist/LinearGenomeView/components/OverviewScaleBar.js.map +0 -1
  219. package/dist/LinearGenomeView/components/RubberBand.js +0 -221
  220. package/dist/LinearGenomeView/components/RubberBand.js.map +0 -1
  221. package/esm/LinearGenomeView/components/OverviewRubberBand.js.map +0 -1
  222. package/esm/LinearGenomeView/components/OverviewScaleBar.js.map +0 -1
  223. package/esm/LinearGenomeView/components/RubberBand.js +0 -196
  224. package/esm/LinearGenomeView/components/RubberBand.js.map +0 -1
  225. package/src/LinearGenomeView/components/RubberBand.tsx +0 -308
@@ -1,308 +0,0 @@
1
- import React, { useRef, useEffect, useState } from 'react'
2
- import { observer } from 'mobx-react'
3
- import { Popover, Tooltip, Typography, alpha } from '@mui/material'
4
- import { makeStyles } from 'tss-react/mui'
5
- import { stringify } from '@jbrowse/core/util'
6
- import { Menu } from '@jbrowse/core/ui'
7
- import { LinearGenomeViewModel } from '..'
8
-
9
- type LGV = LinearGenomeViewModel
10
-
11
- const useStyles = makeStyles()(theme => {
12
- const { primary, tertiary } = theme.palette
13
- const background = tertiary
14
- ? alpha(tertiary.main, 0.7)
15
- : alpha(primary.main, 0.7)
16
- return {
17
- rubberBand: {
18
- height: '100%',
19
- background,
20
- position: 'absolute',
21
- zIndex: 10,
22
- textAlign: 'center',
23
- overflow: 'hidden',
24
- },
25
- rubberBandControl: {
26
- cursor: 'crosshair',
27
- width: '100%',
28
- minHeight: 8,
29
- },
30
- rubberBandText: {
31
- color: tertiary ? tertiary.contrastText : primary.contrastText,
32
- },
33
- popover: {
34
- mouseEvents: 'none',
35
- cursor: 'crosshair',
36
- },
37
- paper: {
38
- paddingLeft: theme.spacing(1),
39
- paddingRight: theme.spacing(1),
40
- },
41
- guide: {
42
- pointerEvents: 'none',
43
- height: '100%',
44
- width: 1,
45
- position: 'absolute',
46
- zIndex: 10,
47
- },
48
- }
49
- })
50
-
51
- const VerticalGuide = observer(
52
- ({ model, coordX }: { model: LGV; coordX: number }) => {
53
- const { classes } = useStyles()
54
- return (
55
- <Tooltip
56
- open
57
- placement="top"
58
- title={stringify(model.pxToBp(coordX))}
59
- arrow
60
- >
61
- <div
62
- className={classes.guide}
63
- style={{
64
- left: coordX,
65
- background: 'red',
66
- }}
67
- />
68
- </Tooltip>
69
- )
70
- },
71
- )
72
-
73
- function RubberBand({
74
- model,
75
- ControlComponent = <div />,
76
- }: {
77
- model: LGV
78
- ControlComponent?: React.ReactElement
79
- }) {
80
- const [startX, setStartX] = useState<number>()
81
- const [currentX, setCurrentX] = useState<number>()
82
-
83
- // clientX and clientY used for anchorPosition for menu
84
- // offsetX used for calculations about width of selection
85
- const [anchorPosition, setAnchorPosition] = useState<{
86
- offsetX: number
87
- clientX: number
88
- clientY: number
89
- }>()
90
- const [guideX, setGuideX] = useState<number>()
91
- const controlsRef = useRef<HTMLDivElement>(null)
92
- const rubberBandRef = useRef(null)
93
- const { classes } = useStyles()
94
- const mouseDragging = startX !== undefined && anchorPosition === undefined
95
-
96
- const { setOffsets, pxToBp } = model
97
-
98
- useEffect(() => {
99
- function computeOffsets(offsetX: number) {
100
- if (startX === undefined) {
101
- return
102
- }
103
- let leftPx = startX
104
- let rightPx = offsetX
105
- if (rightPx < leftPx) {
106
- ;[leftPx, rightPx] = [rightPx, leftPx]
107
- }
108
- const leftOffset = pxToBp(leftPx)
109
- const rightOffset = pxToBp(rightPx)
110
-
111
- return { leftOffset, rightOffset }
112
- }
113
-
114
- function globalMouseMove(event: MouseEvent) {
115
- if (controlsRef.current && mouseDragging) {
116
- const relativeX =
117
- event.clientX - controlsRef.current.getBoundingClientRect().left
118
- setCurrentX(relativeX)
119
- }
120
- }
121
-
122
- function globalMouseUp(event: MouseEvent) {
123
- if (startX !== undefined && controlsRef.current) {
124
- const { clientX, clientY } = event
125
- const ref = controlsRef.current
126
- const offsetX = clientX - ref.getBoundingClientRect().left
127
- // as stated above, store both clientX/Y and offsetX for different
128
- // purposes
129
- setAnchorPosition({
130
- offsetX,
131
- clientX,
132
- clientY,
133
- })
134
- const args = computeOffsets(offsetX)
135
- if (args) {
136
- const { leftOffset, rightOffset } = args
137
- setOffsets(leftOffset, rightOffset)
138
- }
139
- setGuideX(undefined)
140
- }
141
- }
142
- if (mouseDragging) {
143
- window.addEventListener('mousemove', globalMouseMove)
144
- window.addEventListener('mouseup', globalMouseUp)
145
- return () => {
146
- window.removeEventListener('mousemove', globalMouseMove)
147
- window.removeEventListener('mouseup', globalMouseUp)
148
- }
149
- }
150
- return () => {}
151
- }, [startX, mouseDragging, anchorPosition, setOffsets, pxToBp])
152
-
153
- useEffect(() => {
154
- if (
155
- !mouseDragging &&
156
- currentX !== undefined &&
157
- startX !== undefined &&
158
- Math.abs(currentX - startX) <= 3
159
- ) {
160
- handleClose()
161
- }
162
- }, [mouseDragging, currentX, startX, model.bpPerPx])
163
-
164
- function mouseDown(event: React.MouseEvent<HTMLDivElement>) {
165
- event.preventDefault()
166
- event.stopPropagation()
167
- const relativeX =
168
- event.clientX -
169
- (event.target as HTMLDivElement).getBoundingClientRect().left
170
- setStartX(relativeX)
171
- setCurrentX(relativeX)
172
- }
173
-
174
- function mouseMove(event: React.MouseEvent<HTMLDivElement>) {
175
- const target = event.target as HTMLDivElement
176
- setGuideX(event.clientX - target.getBoundingClientRect().left)
177
- }
178
-
179
- function mouseOut() {
180
- setGuideX(undefined)
181
- model.setOffsets(undefined, undefined)
182
- }
183
-
184
- function handleClose() {
185
- setAnchorPosition(undefined)
186
- setStartX(undefined)
187
- setCurrentX(undefined)
188
- }
189
-
190
- const open = Boolean(anchorPosition)
191
-
192
- function handleMenuItemClick(_: unknown, callback: Function) {
193
- callback()
194
- handleClose()
195
- }
196
-
197
- if (startX === undefined) {
198
- return (
199
- <>
200
- {guideX !== undefined ? (
201
- <VerticalGuide model={model} coordX={guideX} />
202
- ) : null}
203
- <div
204
- data-testid="rubberBand_controls"
205
- className={classes.rubberBandControl}
206
- role="presentation"
207
- ref={controlsRef}
208
- onMouseDown={mouseDown}
209
- onMouseOut={mouseOut}
210
- onMouseMove={mouseMove}
211
- >
212
- {ControlComponent}
213
- </div>
214
- </>
215
- )
216
- }
217
-
218
- /* Calculating Pixels for Mouse Dragging */
219
- const right = anchorPosition ? anchorPosition.offsetX : currentX || 0
220
- const left = right < startX ? right : startX
221
- const width = Math.abs(right - startX)
222
- const leftBpOffset = model.pxToBp(left)
223
- const rightBpOffset = model.pxToBp(left + width)
224
- const numOfBpSelected = Math.ceil(width * model.bpPerPx)
225
- return (
226
- <>
227
- {rubberBandRef.current ? (
228
- <>
229
- <Popover
230
- className={classes.popover}
231
- classes={{
232
- paper: classes.paper,
233
- }}
234
- open
235
- anchorEl={rubberBandRef.current}
236
- anchorOrigin={{
237
- vertical: 'top',
238
- horizontal: 'left',
239
- }}
240
- transformOrigin={{
241
- vertical: 'bottom',
242
- horizontal: 'right',
243
- }}
244
- keepMounted
245
- disableRestoreFocus
246
- >
247
- <Typography>{stringify(leftBpOffset)}</Typography>
248
- </Popover>
249
- <Popover
250
- className={classes.popover}
251
- classes={{
252
- paper: classes.paper,
253
- }}
254
- open
255
- anchorEl={rubberBandRef.current}
256
- anchorOrigin={{
257
- vertical: 'top',
258
- horizontal: 'right',
259
- }}
260
- transformOrigin={{
261
- vertical: 'bottom',
262
- horizontal: 'left',
263
- }}
264
- keepMounted
265
- disableRestoreFocus
266
- >
267
- <Typography>{stringify(rightBpOffset)}</Typography>
268
- </Popover>
269
- </>
270
- ) : null}
271
- <div
272
- ref={rubberBandRef}
273
- className={classes.rubberBand}
274
- style={{ left, width }}
275
- >
276
- <Typography variant="h6" className={classes.rubberBandText}>
277
- {numOfBpSelected.toLocaleString('en-US')} bp
278
- </Typography>
279
- </div>
280
- <div
281
- data-testid="rubberBand_controls"
282
- className={classes.rubberBandControl}
283
- role="presentation"
284
- ref={controlsRef}
285
- onMouseDown={mouseDown}
286
- onMouseOut={mouseOut}
287
- onMouseMove={mouseMove}
288
- >
289
- {ControlComponent}
290
- </div>
291
- {anchorPosition ? (
292
- <Menu
293
- anchorReference="anchorPosition"
294
- anchorPosition={{
295
- left: anchorPosition.clientX,
296
- top: anchorPosition.clientY,
297
- }}
298
- onMenuItemClick={handleMenuItemClick}
299
- open={open}
300
- onClose={handleClose}
301
- menuItems={model.rubberBandMenuItems()}
302
- />
303
- ) : null}
304
- </>
305
- )
306
- }
307
-
308
- export default observer(RubberBand)