@jbrowse/plugin-linear-genome-view 2.5.0 → 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 (279) hide show
  1. package/dist/BaseLinearDisplay/components/BaseLinearDisplay.d.ts +1 -1
  2. package/dist/BaseLinearDisplay/components/Block.d.ts +3 -3
  3. package/dist/BaseLinearDisplay/components/BlockMsg.d.ts +1 -1
  4. package/dist/BaseLinearDisplay/components/LinearBlocks.d.ts +3 -2
  5. package/dist/BaseLinearDisplay/components/TooLargeMessage.d.ts +2 -1
  6. package/dist/BaseLinearDisplay/components/Tooltip.d.ts +2 -1
  7. package/dist/BaseLinearDisplay/index.d.ts +5 -2
  8. package/dist/BaseLinearDisplay/index.js +7 -1
  9. package/dist/BaseLinearDisplay/index.js.map +1 -1
  10. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +62 -142
  11. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.js +34 -355
  12. package/dist/BaseLinearDisplay/models/BaseLinearDisplayModel.js.map +1 -1
  13. package/dist/BaseLinearDisplay/models/FeatureDensityMixin.d.ts +99 -0
  14. package/dist/BaseLinearDisplay/models/FeatureDensityMixin.js +190 -0
  15. package/dist/BaseLinearDisplay/models/FeatureDensityMixin.js.map +1 -0
  16. package/dist/BaseLinearDisplay/models/TrackHeightMixin.d.ts +30 -0
  17. package/dist/BaseLinearDisplay/models/TrackHeightMixin.js +56 -0
  18. package/dist/BaseLinearDisplay/models/TrackHeightMixin.js.map +1 -0
  19. package/dist/BaseLinearDisplay/models/autorunFeatureDensityStats.d.ts +2 -0
  20. package/dist/BaseLinearDisplay/models/autorunFeatureDensityStats.js +42 -0
  21. package/dist/BaseLinearDisplay/models/autorunFeatureDensityStats.js.map +1 -0
  22. package/dist/BaseLinearDisplay/models/configSchema.js +1 -0
  23. package/dist/BaseLinearDisplay/models/configSchema.js.map +1 -1
  24. package/dist/BaseLinearDisplay/models/renderSvg.d.ts +8 -0
  25. package/dist/BaseLinearDisplay/models/renderSvg.js +83 -0
  26. package/dist/BaseLinearDisplay/models/renderSvg.js.map +1 -0
  27. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js +20 -16
  28. package/dist/BaseLinearDisplay/models/serverSideRenderedBlock.js.map +1 -1
  29. package/dist/BasicTrack/configSchema.js +1 -0
  30. package/dist/BasicTrack/configSchema.js.map +1 -1
  31. package/dist/FeatureTrack/configSchema.d.ts +1 -3
  32. package/dist/FeatureTrack/configSchema.js +1 -0
  33. package/dist/FeatureTrack/configSchema.js.map +1 -1
  34. package/dist/LinearBareDisplay/configSchema.d.ts +1 -0
  35. package/dist/LinearBareDisplay/configSchema.js +1 -0
  36. package/dist/LinearBareDisplay/configSchema.js.map +1 -1
  37. package/dist/LinearBareDisplay/model.d.ts +52 -39
  38. package/dist/LinearBareDisplay/model.js +1 -0
  39. package/dist/LinearBareDisplay/model.js.map +1 -1
  40. package/dist/LinearBasicDisplay/components/SetMaxHeight.d.ts +2 -1
  41. package/dist/LinearBasicDisplay/configSchema.d.ts +1 -0
  42. package/dist/LinearBasicDisplay/configSchema.js +1 -0
  43. package/dist/LinearBasicDisplay/configSchema.js.map +1 -1
  44. package/dist/LinearBasicDisplay/model.d.ts +67 -66
  45. package/dist/LinearBasicDisplay/model.js +1 -0
  46. package/dist/LinearBasicDisplay/model.js.map +1 -1
  47. package/dist/LinearGenomeView/components/CenterLine.d.ts +2 -1
  48. package/dist/LinearGenomeView/components/Cytobands.d.ts +2 -1
  49. package/dist/LinearGenomeView/components/ExportSvgDialog.d.ts +2 -1
  50. package/dist/LinearGenomeView/components/GetSequenceDialog.d.ts +2 -1
  51. package/dist/LinearGenomeView/components/Gridlines.d.ts +2 -1
  52. package/dist/LinearGenomeView/components/Header.d.ts +2 -1
  53. package/dist/LinearGenomeView/components/ImportForm.d.ts +2 -1
  54. package/dist/LinearGenomeView/components/LinearGenomeView.d.ts +2 -1
  55. package/dist/LinearGenomeView/components/LinearGenomeView.js +28 -4
  56. package/dist/LinearGenomeView/components/LinearGenomeView.js.map +1 -1
  57. package/dist/LinearGenomeView/components/MiniControls.d.ts +3 -2
  58. package/dist/LinearGenomeView/components/MiniControls.js +20 -40
  59. package/dist/LinearGenomeView/components/MiniControls.js.map +1 -1
  60. package/dist/LinearGenomeView/components/OverviewRubberband.d.ts +1 -1
  61. package/dist/LinearGenomeView/components/OverviewScalebar.d.ts +2 -2
  62. package/dist/LinearGenomeView/components/OverviewScalebar.js +10 -4
  63. package/dist/LinearGenomeView/components/OverviewScalebar.js.map +1 -1
  64. package/dist/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.d.ts +10 -0
  65. package/dist/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.js +22 -0
  66. package/dist/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.js.map +1 -0
  67. package/dist/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.d.ts +5 -0
  68. package/dist/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.js +52 -0
  69. package/dist/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.js.map +1 -0
  70. package/dist/LinearGenomeView/components/{HelpDialog.d.ts → RefNameAutocomplete/HelpDialog.d.ts} +2 -1
  71. package/dist/LinearGenomeView/components/RefNameAutocomplete/HelpDialog.js.map +1 -0
  72. package/dist/LinearGenomeView/components/RefNameAutocomplete/index.d.ts +18 -0
  73. package/dist/LinearGenomeView/components/RefNameAutocomplete/index.js +111 -0
  74. package/dist/LinearGenomeView/components/RefNameAutocomplete/index.js.map +1 -0
  75. package/dist/LinearGenomeView/components/RefNameAutocomplete/util.d.ts +12 -0
  76. package/dist/LinearGenomeView/components/RefNameAutocomplete/util.js +59 -0
  77. package/dist/LinearGenomeView/components/RefNameAutocomplete/util.js.map +1 -0
  78. package/dist/LinearGenomeView/components/Rubberband.d.ts +1 -1
  79. package/dist/LinearGenomeView/components/RubberbandSpan.d.ts +2 -1
  80. package/dist/LinearGenomeView/components/SearchBox.d.ts +2 -1
  81. package/dist/LinearGenomeView/components/SearchResultsDialog.d.ts +2 -1
  82. package/dist/LinearGenomeView/components/SearchResultsTable.d.ts +2 -1
  83. package/dist/LinearGenomeView/components/SequenceSearchDialog.d.ts +2 -1
  84. package/dist/LinearGenomeView/components/TrackContainer.d.ts +3 -3
  85. package/dist/LinearGenomeView/components/TrackContainer.js +12 -68
  86. package/dist/LinearGenomeView/components/TrackContainer.js.map +1 -1
  87. package/dist/LinearGenomeView/components/TrackLabel.js +6 -10
  88. package/dist/LinearGenomeView/components/TrackLabel.js.map +1 -1
  89. package/dist/LinearGenomeView/components/TrackLabelContainer.d.ts +9 -0
  90. package/dist/LinearGenomeView/components/TrackLabelContainer.js +32 -0
  91. package/dist/LinearGenomeView/components/TrackLabelContainer.js.map +1 -0
  92. package/dist/LinearGenomeView/components/TrackRenderingContainer.d.ts +10 -0
  93. package/dist/LinearGenomeView/components/TrackRenderingContainer.js +74 -0
  94. package/dist/LinearGenomeView/components/TrackRenderingContainer.js.map +1 -0
  95. package/dist/LinearGenomeView/components/TracksContainer.d.ts +1 -1
  96. package/dist/LinearGenomeView/components/TracksContainer.js +2 -2
  97. package/dist/LinearGenomeView/components/TracksContainer.js.map +1 -1
  98. package/dist/LinearGenomeView/components/VerticalGuide.d.ts +2 -1
  99. package/dist/LinearGenomeView/components/ZoomControls.d.ts +2 -1
  100. package/dist/LinearGenomeView/model.d.ts +13 -12
  101. package/dist/LinearGenomeView/model.js +25 -25
  102. package/dist/LinearGenomeView/model.js.map +1 -1
  103. package/dist/LinearGenomeView/svgcomponents/SVGBackground.d.ts +2 -1
  104. package/dist/LinearGenomeView/svgcomponents/SVGHeader.d.ts +3 -4
  105. package/dist/LinearGenomeView/svgcomponents/SVGHeader.js +7 -2
  106. package/dist/LinearGenomeView/svgcomponents/SVGHeader.js.map +1 -1
  107. package/dist/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +1 -1
  108. package/dist/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js.map +1 -1
  109. package/dist/LinearGenomeView/svgcomponents/SVGRegionSeparators.d.ts +2 -1
  110. package/dist/LinearGenomeView/svgcomponents/SVGRuler.d.ts +2 -1
  111. package/dist/LinearGenomeView/svgcomponents/SVGScalebar.d.ts +2 -1
  112. package/dist/LinearGenomeView/svgcomponents/SVGTrackLabel.d.ts +2 -1
  113. package/dist/LinearGenomeView/svgcomponents/SVGTracks.d.ts +2 -1
  114. package/dist/LinearGenomeView/util.d.ts +2 -2
  115. package/dist/index.d.ts +160 -134
  116. package/dist/index.js +6 -3
  117. package/dist/index.js.map +1 -1
  118. package/esm/BaseLinearDisplay/components/BaseLinearDisplay.d.ts +1 -1
  119. package/esm/BaseLinearDisplay/components/Block.d.ts +3 -3
  120. package/esm/BaseLinearDisplay/components/BlockMsg.d.ts +1 -1
  121. package/esm/BaseLinearDisplay/components/LinearBlocks.d.ts +3 -2
  122. package/esm/BaseLinearDisplay/components/TooLargeMessage.d.ts +2 -1
  123. package/esm/BaseLinearDisplay/components/Tooltip.d.ts +2 -1
  124. package/esm/BaseLinearDisplay/index.d.ts +5 -2
  125. package/esm/BaseLinearDisplay/index.js +3 -0
  126. package/esm/BaseLinearDisplay/index.js.map +1 -1
  127. package/esm/BaseLinearDisplay/models/BaseLinearDisplayModel.d.ts +62 -142
  128. package/esm/BaseLinearDisplay/models/BaseLinearDisplayModel.js +36 -334
  129. package/esm/BaseLinearDisplay/models/BaseLinearDisplayModel.js.map +1 -1
  130. package/esm/BaseLinearDisplay/models/FeatureDensityMixin.d.ts +99 -0
  131. package/esm/BaseLinearDisplay/models/FeatureDensityMixin.js +184 -0
  132. package/esm/BaseLinearDisplay/models/FeatureDensityMixin.js.map +1 -0
  133. package/esm/BaseLinearDisplay/models/TrackHeightMixin.d.ts +30 -0
  134. package/esm/BaseLinearDisplay/models/TrackHeightMixin.js +53 -0
  135. package/esm/BaseLinearDisplay/models/TrackHeightMixin.js.map +1 -0
  136. package/esm/BaseLinearDisplay/models/autorunFeatureDensityStats.d.ts +2 -0
  137. package/esm/BaseLinearDisplay/models/autorunFeatureDensityStats.js +39 -0
  138. package/esm/BaseLinearDisplay/models/autorunFeatureDensityStats.js.map +1 -0
  139. package/esm/BaseLinearDisplay/models/configSchema.js +1 -0
  140. package/esm/BaseLinearDisplay/models/configSchema.js.map +1 -1
  141. package/esm/BaseLinearDisplay/models/renderSvg.d.ts +8 -0
  142. package/esm/BaseLinearDisplay/models/renderSvg.js +54 -0
  143. package/esm/BaseLinearDisplay/models/renderSvg.js.map +1 -0
  144. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.js +20 -16
  145. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.js.map +1 -1
  146. package/esm/BasicTrack/configSchema.js +1 -0
  147. package/esm/BasicTrack/configSchema.js.map +1 -1
  148. package/esm/FeatureTrack/configSchema.d.ts +1 -3
  149. package/esm/FeatureTrack/configSchema.js +1 -0
  150. package/esm/FeatureTrack/configSchema.js.map +1 -1
  151. package/esm/LinearBareDisplay/configSchema.d.ts +1 -0
  152. package/esm/LinearBareDisplay/configSchema.js +1 -0
  153. package/esm/LinearBareDisplay/configSchema.js.map +1 -1
  154. package/esm/LinearBareDisplay/model.d.ts +52 -39
  155. package/esm/LinearBareDisplay/model.js +1 -0
  156. package/esm/LinearBareDisplay/model.js.map +1 -1
  157. package/esm/LinearBasicDisplay/components/SetMaxHeight.d.ts +2 -1
  158. package/esm/LinearBasicDisplay/configSchema.d.ts +1 -0
  159. package/esm/LinearBasicDisplay/configSchema.js +1 -0
  160. package/esm/LinearBasicDisplay/configSchema.js.map +1 -1
  161. package/esm/LinearBasicDisplay/model.d.ts +67 -66
  162. package/esm/LinearBasicDisplay/model.js +1 -0
  163. package/esm/LinearBasicDisplay/model.js.map +1 -1
  164. package/esm/LinearGenomeView/components/CenterLine.d.ts +2 -1
  165. package/esm/LinearGenomeView/components/Cytobands.d.ts +2 -1
  166. package/esm/LinearGenomeView/components/ExportSvgDialog.d.ts +2 -1
  167. package/esm/LinearGenomeView/components/GetSequenceDialog.d.ts +2 -1
  168. package/esm/LinearGenomeView/components/Gridlines.d.ts +2 -1
  169. package/esm/LinearGenomeView/components/Header.d.ts +2 -1
  170. package/esm/LinearGenomeView/components/ImportForm.d.ts +2 -1
  171. package/esm/LinearGenomeView/components/LinearGenomeView.d.ts +2 -1
  172. package/esm/LinearGenomeView/components/LinearGenomeView.js +4 -3
  173. package/esm/LinearGenomeView/components/LinearGenomeView.js.map +1 -1
  174. package/esm/LinearGenomeView/components/MiniControls.d.ts +3 -2
  175. package/esm/LinearGenomeView/components/MiniControls.js +20 -17
  176. package/esm/LinearGenomeView/components/MiniControls.js.map +1 -1
  177. package/esm/LinearGenomeView/components/OverviewRubberband.d.ts +1 -1
  178. package/esm/LinearGenomeView/components/OverviewScalebar.d.ts +2 -2
  179. package/esm/LinearGenomeView/components/OverviewScalebar.js +10 -4
  180. package/esm/LinearGenomeView/components/OverviewScalebar.js.map +1 -1
  181. package/esm/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.d.ts +10 -0
  182. package/esm/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.js +16 -0
  183. package/esm/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.js.map +1 -0
  184. package/esm/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.d.ts +5 -0
  185. package/esm/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.js +23 -0
  186. package/esm/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.js.map +1 -0
  187. package/esm/LinearGenomeView/components/{HelpDialog.d.ts → RefNameAutocomplete/HelpDialog.d.ts} +2 -1
  188. package/esm/LinearGenomeView/components/RefNameAutocomplete/HelpDialog.js.map +1 -0
  189. package/esm/LinearGenomeView/components/RefNameAutocomplete/index.d.ts +18 -0
  190. package/esm/LinearGenomeView/components/RefNameAutocomplete/index.js +83 -0
  191. package/esm/LinearGenomeView/components/RefNameAutocomplete/index.js.map +1 -0
  192. package/esm/LinearGenomeView/components/RefNameAutocomplete/util.d.ts +12 -0
  193. package/esm/LinearGenomeView/components/RefNameAutocomplete/util.js +50 -0
  194. package/esm/LinearGenomeView/components/RefNameAutocomplete/util.js.map +1 -0
  195. package/esm/LinearGenomeView/components/Rubberband.d.ts +1 -1
  196. package/esm/LinearGenomeView/components/RubberbandSpan.d.ts +2 -1
  197. package/esm/LinearGenomeView/components/SearchBox.d.ts +2 -1
  198. package/esm/LinearGenomeView/components/SearchResultsDialog.d.ts +2 -1
  199. package/esm/LinearGenomeView/components/SearchResultsTable.d.ts +2 -1
  200. package/esm/LinearGenomeView/components/SequenceSearchDialog.d.ts +2 -1
  201. package/esm/LinearGenomeView/components/TrackContainer.d.ts +3 -3
  202. package/esm/LinearGenomeView/components/TrackContainer.js +13 -69
  203. package/esm/LinearGenomeView/components/TrackContainer.js.map +1 -1
  204. package/esm/LinearGenomeView/components/TrackLabel.js +6 -10
  205. package/esm/LinearGenomeView/components/TrackLabel.js.map +1 -1
  206. package/esm/LinearGenomeView/components/TrackLabelContainer.d.ts +9 -0
  207. package/esm/LinearGenomeView/components/TrackLabelContainer.js +27 -0
  208. package/esm/LinearGenomeView/components/TrackLabelContainer.js.map +1 -0
  209. package/esm/LinearGenomeView/components/TrackRenderingContainer.d.ts +10 -0
  210. package/esm/LinearGenomeView/components/TrackRenderingContainer.js +49 -0
  211. package/esm/LinearGenomeView/components/TrackRenderingContainer.js.map +1 -0
  212. package/esm/LinearGenomeView/components/TracksContainer.d.ts +1 -1
  213. package/esm/LinearGenomeView/components/TracksContainer.js +2 -2
  214. package/esm/LinearGenomeView/components/TracksContainer.js.map +1 -1
  215. package/esm/LinearGenomeView/components/VerticalGuide.d.ts +2 -1
  216. package/esm/LinearGenomeView/components/ZoomControls.d.ts +2 -1
  217. package/esm/LinearGenomeView/model.d.ts +13 -12
  218. package/esm/LinearGenomeView/model.js +21 -21
  219. package/esm/LinearGenomeView/model.js.map +1 -1
  220. package/esm/LinearGenomeView/svgcomponents/SVGBackground.d.ts +2 -1
  221. package/esm/LinearGenomeView/svgcomponents/SVGHeader.d.ts +3 -4
  222. package/esm/LinearGenomeView/svgcomponents/SVGHeader.js +7 -2
  223. package/esm/LinearGenomeView/svgcomponents/SVGHeader.js.map +1 -1
  224. package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +1 -1
  225. package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js.map +1 -1
  226. package/esm/LinearGenomeView/svgcomponents/SVGRegionSeparators.d.ts +2 -1
  227. package/esm/LinearGenomeView/svgcomponents/SVGRuler.d.ts +2 -1
  228. package/esm/LinearGenomeView/svgcomponents/SVGScalebar.d.ts +2 -1
  229. package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.d.ts +2 -1
  230. package/esm/LinearGenomeView/svgcomponents/SVGTracks.d.ts +2 -1
  231. package/esm/LinearGenomeView/util.d.ts +2 -2
  232. package/esm/index.d.ts +160 -134
  233. package/esm/index.js +1 -1
  234. package/esm/index.js.map +1 -1
  235. package/package.json +2 -2
  236. package/src/BaseLinearDisplay/index.ts +5 -1
  237. package/src/BaseLinearDisplay/models/BaseLinearDisplayModel.tsx +46 -407
  238. package/src/BaseLinearDisplay/models/FeatureDensityMixin.tsx +213 -0
  239. package/src/BaseLinearDisplay/models/TrackHeightMixin.tsx +59 -0
  240. package/src/BaseLinearDisplay/models/autorunFeatureDensityStats.ts +46 -0
  241. package/src/BaseLinearDisplay/models/configSchema.ts +1 -0
  242. package/src/BaseLinearDisplay/models/renderSvg.tsx +101 -0
  243. package/src/BaseLinearDisplay/models/serverSideRenderedBlock.ts +21 -19
  244. package/src/BasicTrack/configSchema.ts +1 -0
  245. package/src/FeatureTrack/configSchema.ts +1 -0
  246. package/src/LinearBareDisplay/configSchema.ts +1 -0
  247. package/src/LinearBareDisplay/model.ts +1 -0
  248. package/src/LinearBasicDisplay/configSchema.ts +1 -0
  249. package/src/LinearBasicDisplay/model.ts +1 -0
  250. package/src/LinearGenomeView/components/LinearGenomeView.test.tsx +3 -3
  251. package/src/LinearGenomeView/components/LinearGenomeView.tsx +6 -3
  252. package/src/LinearGenomeView/components/MiniControls.tsx +37 -38
  253. package/src/LinearGenomeView/components/OverviewScalebar.tsx +11 -5
  254. package/src/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.tsx +53 -0
  255. package/src/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.tsx +44 -0
  256. package/src/LinearGenomeView/components/RefNameAutocomplete/index.tsx +160 -0
  257. package/src/LinearGenomeView/components/RefNameAutocomplete/util.ts +65 -0
  258. package/src/LinearGenomeView/components/TrackContainer.tsx +16 -104
  259. package/src/LinearGenomeView/components/TrackLabel.tsx +7 -27
  260. package/src/LinearGenomeView/components/TrackLabelContainer.tsx +48 -0
  261. package/src/LinearGenomeView/components/TrackRenderingContainer.tsx +96 -0
  262. package/src/LinearGenomeView/components/TracksContainer.tsx +2 -2
  263. package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.tsx.snap +3 -3
  264. package/src/LinearGenomeView/model.ts +29 -28
  265. package/src/LinearGenomeView/svgcomponents/SVGHeader.tsx +8 -6
  266. package/src/LinearGenomeView/svgcomponents/SVGLinearGenomeView.tsx +1 -1
  267. package/src/index.ts +11 -5
  268. package/dist/LinearGenomeView/components/HelpDialog.js.map +0 -1
  269. package/dist/LinearGenomeView/components/RefNameAutocomplete.d.ts +0 -23
  270. package/dist/LinearGenomeView/components/RefNameAutocomplete.js +0 -189
  271. package/dist/LinearGenomeView/components/RefNameAutocomplete.js.map +0 -1
  272. package/esm/LinearGenomeView/components/HelpDialog.js.map +0 -1
  273. package/esm/LinearGenomeView/components/RefNameAutocomplete.d.ts +0 -23
  274. package/esm/LinearGenomeView/components/RefNameAutocomplete.js +0 -161
  275. package/esm/LinearGenomeView/components/RefNameAutocomplete.js.map +0 -1
  276. package/src/LinearGenomeView/components/RefNameAutocomplete.tsx +0 -321
  277. /package/dist/LinearGenomeView/components/{HelpDialog.js → RefNameAutocomplete/HelpDialog.js} +0 -0
  278. /package/esm/LinearGenomeView/components/{HelpDialog.js → RefNameAutocomplete/HelpDialog.js} +0 -0
  279. /package/src/LinearGenomeView/components/{HelpDialog.tsx → RefNameAutocomplete/HelpDialog.tsx} +0 -0
@@ -1,161 +0,0 @@
1
- import React, { Suspense, lazy, useMemo, useEffect, useState } from 'react';
2
- import { observer } from 'mobx-react';
3
- import { getSession, useDebounce, measureText } from '@jbrowse/core/util';
4
- import BaseResult, { RefSequenceResult, } from '@jbrowse/core/TextSearch/BaseResults';
5
- import { Autocomplete, IconButton, InputAdornment, TextField, } from '@mui/material';
6
- // icons
7
- import SearchIcon from '@mui/icons-material/Search';
8
- import HelpIcon from '@mui/icons-material/Help';
9
- // lazy
10
- const HelpDialog = lazy(() => import('./HelpDialog'));
11
- function aggregateResults(results) {
12
- const m = {};
13
- for (const result of results) {
14
- const displayString = result.getDisplayString();
15
- if (!m[displayString]) {
16
- m[displayString] = [];
17
- }
18
- m[displayString].push(result);
19
- }
20
- return m;
21
- }
22
- function getDeduplicatedResult(results) {
23
- return Object.entries(aggregateResults(results)).map(([displayString, results]) => results.length === 1
24
- ? {
25
- result: results[0],
26
- }
27
- : {
28
- // deduplicate a "multi-result"
29
- result: new BaseResult({
30
- displayString,
31
- results,
32
- label: displayString,
33
- }),
34
- });
35
- }
36
- // the logic of this method is to only apply a filter to RefSequenceResults
37
- // because they do not have a matchedObject. the trix search results already
38
- // filter so don't need re-filtering
39
- function filterOptions(options, searchQuery) {
40
- return options.filter(({ result }) => result.getLabel().toLowerCase().includes(searchQuery) ||
41
- result.matchedObject);
42
- }
43
- function getFiltered(opts, inputValue) {
44
- const filtered = filterOptions(opts, inputValue.toLocaleLowerCase());
45
- return [
46
- ...filtered.slice(0, 100),
47
- ...(filtered.length > 100
48
- ? [
49
- {
50
- group: 'limitOption',
51
- result: new BaseResult({
52
- label: 'keep typing for more results',
53
- }),
54
- },
55
- ]
56
- : []),
57
- ];
58
- }
59
- function RefNameAutocomplete({ model, onSelect, assemblyName, style, fetchResults, onChange, value, showHelp = true, minWidth = 200, maxWidth = 550, TextFieldProps = {}, }) {
60
- const session = getSession(model);
61
- const { assemblyManager } = session;
62
- const [open, setOpen] = useState(false);
63
- const [loaded, setLoaded] = useState(true);
64
- const [currentSearch, setCurrentSearch] = useState('');
65
- const [inputValue, setInputValue] = useState('');
66
- const [searchOptions, setSearchOptions] = useState();
67
- const debouncedSearch = useDebounce(currentSearch, 300);
68
- const assembly = assemblyName ? assemblyManager.get(assemblyName) : undefined;
69
- const { coarseVisibleLocStrings, hasDisplayedRegions } = model;
70
- const regions = assembly === null || assembly === void 0 ? void 0 : assembly.regions;
71
- const options = useMemo(() => (regions === null || regions === void 0 ? void 0 : regions.map(option => ({
72
- result: new RefSequenceResult({
73
- refName: option.refName,
74
- label: option.refName,
75
- matchedAttribute: 'refName',
76
- }),
77
- }))) || [], [regions]);
78
- useEffect(() => {
79
- let active = true;
80
- (async () => {
81
- try {
82
- if (debouncedSearch === '' || !assemblyName) {
83
- return;
84
- }
85
- setLoaded(false);
86
- const results = await fetchResults(debouncedSearch);
87
- if (active) {
88
- setLoaded(true);
89
- setSearchOptions(getDeduplicatedResult(results));
90
- }
91
- }
92
- catch (e) {
93
- console.error(e);
94
- if (active) {
95
- session.notify(`${e}`, 'error');
96
- }
97
- }
98
- })();
99
- return () => {
100
- active = false;
101
- };
102
- }, [assemblyName, fetchResults, debouncedSearch, session, model]);
103
- const inputBoxVal = coarseVisibleLocStrings || value || '';
104
- // heuristic, text width + 60 accommodates help icon and search
105
- // icon
106
- const width = Math.min(Math.max(measureText(inputBoxVal, 14) + 100, minWidth), maxWidth);
107
- // notes on implementation:
108
- // The selectOnFocus setting helps highlight the field when clicked
109
- return (React.createElement(React.Fragment, null,
110
- React.createElement(Autocomplete, { "data-testid": "autocomplete", disableListWrap: true, disableClearable: true, disabled: !assemblyName, freeSolo: true, includeInputInList: true, selectOnFocus: true, style: { ...style, width }, value: inputBoxVal, loading: !loaded, inputValue: inputValue, onInputChange: (_event, newInputValue) => {
111
- setInputValue(newInputValue);
112
- onChange === null || onChange === void 0 ? void 0 : onChange(newInputValue);
113
- }, loadingText: "loading results", open: open, onOpen: () => setOpen(true), onClose: () => {
114
- setOpen(false);
115
- setLoaded(true);
116
- if (hasDisplayedRegions) {
117
- setCurrentSearch('');
118
- setSearchOptions(undefined);
119
- }
120
- }, onChange: (_event, selectedOption) => {
121
- if (!selectedOption || !assemblyName) {
122
- return;
123
- }
124
- if (typeof selectedOption === 'string') {
125
- // handles string inputs on keyPress enter
126
- onSelect === null || onSelect === void 0 ? void 0 : onSelect(new BaseResult({ label: selectedOption }));
127
- }
128
- else {
129
- onSelect === null || onSelect === void 0 ? void 0 : onSelect(selectedOption.result);
130
- }
131
- setInputValue(inputBoxVal);
132
- }, options: !(searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.length) ? options : searchOptions, getOptionDisabled: option => option.group === 'limitOption', filterOptions: (opts, { inputValue }) => getFiltered(opts, inputValue), renderInput: params => (React.createElement(AutocompleteTextField, { showHelp: showHelp, params: params, inputBoxVal: inputBoxVal, TextFieldProps: TextFieldProps, setCurrentSearch: setCurrentSearch, setInputValue: setInputValue })), getOptionLabel: opt => typeof opt === 'string' ? opt : opt.result.getDisplayString() })));
133
- }
134
- function AutocompleteTextField({ TextFieldProps, inputBoxVal, params, showHelp, setInputValue, setCurrentSearch, }) {
135
- const { helperText, InputProps = {} } = TextFieldProps;
136
- return (React.createElement(TextField, { onBlur: () =>
137
- // this is used to restore a refName or the non-user-typed input
138
- // to the box on blurring
139
- setInputValue(inputBoxVal), ...params, ...TextFieldProps, size: "small", helperText: helperText, InputProps: {
140
- ...params.InputProps,
141
- ...InputProps,
142
- endAdornment: (React.createElement(EndAdornment, { showHelp: showHelp, endAdornment: params.InputProps.endAdornment })),
143
- }, placeholder: "Search for location", onChange: e => setCurrentSearch(e.target.value) }));
144
- }
145
- function HelpAdornment() {
146
- const [isHelpDialogDisplayed, setHelpDialogDisplayed] = useState(false);
147
- return (React.createElement(React.Fragment, null,
148
- React.createElement(IconButton, { onClick: () => setHelpDialogDisplayed(true), size: "small" },
149
- React.createElement(HelpIcon, { fontSize: "small" })),
150
- isHelpDialogDisplayed ? (React.createElement(Suspense, { fallback: React.createElement("div", null) },
151
- React.createElement(HelpDialog, { handleClose: () => setHelpDialogDisplayed(false) }))) : null));
152
- }
153
- function EndAdornment({ showHelp, endAdornment, }) {
154
- return (React.createElement(React.Fragment, null,
155
- React.createElement(InputAdornment, { position: "end", style: { marginRight: 7 } },
156
- React.createElement(SearchIcon, { fontSize: "small" }),
157
- showHelp ? React.createElement(HelpAdornment, null) : null),
158
- endAdornment));
159
- }
160
- export default observer(RefNameAutocomplete);
161
- //# sourceMappingURL=RefNameAutocomplete.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RefNameAutocomplete.js","sourceRoot":"","sources":["../../../src/LinearGenomeView/components/RefNameAutocomplete.tsx"],"names":[],"mappings":"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"}
@@ -1,321 +0,0 @@
1
- import React, { Suspense, lazy, useMemo, useEffect, useState } from 'react'
2
- import { observer } from 'mobx-react'
3
- import { getSession, useDebounce, measureText } from '@jbrowse/core/util'
4
- import BaseResult, {
5
- RefSequenceResult,
6
- } from '@jbrowse/core/TextSearch/BaseResults'
7
- import {
8
- Autocomplete,
9
- AutocompleteRenderInputParams,
10
- IconButton,
11
- InputAdornment,
12
- TextField,
13
- TextFieldProps as TFP,
14
- } from '@mui/material'
15
-
16
- // icons
17
- import SearchIcon from '@mui/icons-material/Search'
18
- import HelpIcon from '@mui/icons-material/Help'
19
-
20
- // locals
21
- import { LinearGenomeViewModel } from '..'
22
-
23
- // lazy
24
- const HelpDialog = lazy(() => import('./HelpDialog'))
25
-
26
- export interface Option {
27
- group?: string
28
- result: BaseResult
29
- }
30
-
31
- function aggregateResults(results: BaseResult[]) {
32
- const m: { [key: string]: BaseResult[] } = {}
33
-
34
- for (const result of results) {
35
- const displayString = result.getDisplayString()
36
- if (!m[displayString]) {
37
- m[displayString] = []
38
- }
39
- m[displayString].push(result)
40
- }
41
- return m
42
- }
43
-
44
- function getDeduplicatedResult(results: BaseResult[]) {
45
- return Object.entries(aggregateResults(results)).map(
46
- ([displayString, results]) =>
47
- results.length === 1
48
- ? {
49
- result: results[0],
50
- }
51
- : {
52
- // deduplicate a "multi-result"
53
- result: new BaseResult({
54
- displayString,
55
- results,
56
- label: displayString,
57
- }),
58
- },
59
- )
60
- }
61
-
62
- // the logic of this method is to only apply a filter to RefSequenceResults
63
- // because they do not have a matchedObject. the trix search results already
64
- // filter so don't need re-filtering
65
- function filterOptions(options: Option[], searchQuery: string) {
66
- return options.filter(
67
- ({ result }) =>
68
- result.getLabel().toLowerCase().includes(searchQuery) ||
69
- result.matchedObject,
70
- )
71
- }
72
-
73
- function getFiltered(opts: Option[], inputValue: string) {
74
- const filtered = filterOptions(opts, inputValue.toLocaleLowerCase())
75
- return [
76
- ...filtered.slice(0, 100),
77
- ...(filtered.length > 100
78
- ? [
79
- {
80
- group: 'limitOption',
81
- result: new BaseResult({
82
- label: 'keep typing for more results',
83
- }),
84
- },
85
- ]
86
- : []),
87
- ]
88
- }
89
-
90
- function RefNameAutocomplete({
91
- model,
92
- onSelect,
93
- assemblyName,
94
- style,
95
- fetchResults,
96
- onChange,
97
- value,
98
- showHelp = true,
99
- minWidth = 200,
100
- maxWidth = 550,
101
- TextFieldProps = {},
102
- }: {
103
- model: LinearGenomeViewModel
104
- onSelect?: (region: BaseResult) => void
105
- onChange?: (val: string) => void
106
- assemblyName?: string
107
- value?: string
108
- fetchResults: (query: string) => Promise<BaseResult[]>
109
- style?: React.CSSProperties
110
- minWidth?: number
111
- maxWidth?: number
112
- showHelp?: boolean
113
- TextFieldProps?: TFP
114
- }) {
115
- const session = getSession(model)
116
- const { assemblyManager } = session
117
- const [open, setOpen] = useState(false)
118
- const [loaded, setLoaded] = useState(true)
119
- const [currentSearch, setCurrentSearch] = useState('')
120
- const [inputValue, setInputValue] = useState('')
121
- const [searchOptions, setSearchOptions] = useState<Option[]>()
122
- const debouncedSearch = useDebounce(currentSearch, 300)
123
- const assembly = assemblyName ? assemblyManager.get(assemblyName) : undefined
124
- const { coarseVisibleLocStrings, hasDisplayedRegions } = model
125
-
126
- const regions = assembly?.regions
127
-
128
- const options = useMemo(
129
- () =>
130
- regions?.map(option => ({
131
- result: new RefSequenceResult({
132
- refName: option.refName,
133
- label: option.refName,
134
- matchedAttribute: 'refName',
135
- }),
136
- })) || [],
137
- [regions],
138
- )
139
-
140
- useEffect(() => {
141
- let active = true
142
-
143
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
144
- ;(async () => {
145
- try {
146
- if (debouncedSearch === '' || !assemblyName) {
147
- return
148
- }
149
-
150
- setLoaded(false)
151
- const results = await fetchResults(debouncedSearch)
152
- if (active) {
153
- setLoaded(true)
154
- setSearchOptions(getDeduplicatedResult(results))
155
- }
156
- } catch (e) {
157
- console.error(e)
158
- if (active) {
159
- session.notify(`${e}`, 'error')
160
- }
161
- }
162
- })()
163
-
164
- return () => {
165
- active = false
166
- }
167
- }, [assemblyName, fetchResults, debouncedSearch, session, model])
168
-
169
- const inputBoxVal = coarseVisibleLocStrings || value || ''
170
-
171
- // heuristic, text width + 60 accommodates help icon and search
172
- // icon
173
- const width = Math.min(
174
- Math.max(measureText(inputBoxVal, 14) + 100, minWidth),
175
- maxWidth,
176
- )
177
-
178
- // notes on implementation:
179
- // The selectOnFocus setting helps highlight the field when clicked
180
- return (
181
- <>
182
- <Autocomplete
183
- data-testid="autocomplete"
184
- disableListWrap
185
- disableClearable
186
- disabled={!assemblyName}
187
- freeSolo
188
- includeInputInList
189
- selectOnFocus
190
- style={{ ...style, width }}
191
- value={inputBoxVal}
192
- loading={!loaded}
193
- inputValue={inputValue}
194
- onInputChange={(_event, newInputValue) => {
195
- setInputValue(newInputValue)
196
- onChange?.(newInputValue)
197
- }}
198
- loadingText="loading results"
199
- open={open}
200
- onOpen={() => setOpen(true)}
201
- onClose={() => {
202
- setOpen(false)
203
- setLoaded(true)
204
- if (hasDisplayedRegions) {
205
- setCurrentSearch('')
206
- setSearchOptions(undefined)
207
- }
208
- }}
209
- onChange={(_event, selectedOption) => {
210
- if (!selectedOption || !assemblyName) {
211
- return
212
- }
213
-
214
- if (typeof selectedOption === 'string') {
215
- // handles string inputs on keyPress enter
216
- onSelect?.(new BaseResult({ label: selectedOption }))
217
- } else {
218
- onSelect?.(selectedOption.result)
219
- }
220
- setInputValue(inputBoxVal)
221
- }}
222
- options={!searchOptions?.length ? options : searchOptions}
223
- getOptionDisabled={option => option.group === 'limitOption'}
224
- filterOptions={(opts, { inputValue }) => getFiltered(opts, inputValue)}
225
- renderInput={params => (
226
- <AutocompleteTextField
227
- showHelp={showHelp}
228
- params={params}
229
- inputBoxVal={inputBoxVal}
230
- TextFieldProps={TextFieldProps}
231
- setCurrentSearch={setCurrentSearch}
232
- setInputValue={setInputValue}
233
- />
234
- )}
235
- getOptionLabel={opt =>
236
- typeof opt === 'string' ? opt : opt.result.getDisplayString()
237
- }
238
- />
239
- </>
240
- )
241
- }
242
-
243
- function AutocompleteTextField({
244
- TextFieldProps,
245
- inputBoxVal,
246
- params,
247
- showHelp,
248
- setInputValue,
249
- setCurrentSearch,
250
- }: {
251
- TextFieldProps: TFP
252
- inputBoxVal: string
253
- showHelp?: boolean
254
- params: AutocompleteRenderInputParams
255
- setInputValue: (arg: string) => void
256
- setCurrentSearch: (arg: string) => void
257
- }) {
258
- const { helperText, InputProps = {} } = TextFieldProps
259
- return (
260
- <TextField
261
- onBlur={() =>
262
- // this is used to restore a refName or the non-user-typed input
263
- // to the box on blurring
264
- setInputValue(inputBoxVal)
265
- }
266
- {...params}
267
- {...TextFieldProps}
268
- size="small"
269
- helperText={helperText}
270
- InputProps={{
271
- ...params.InputProps,
272
- ...InputProps,
273
-
274
- endAdornment: (
275
- <EndAdornment
276
- showHelp={showHelp}
277
- endAdornment={params.InputProps.endAdornment}
278
- />
279
- ),
280
- }}
281
- placeholder="Search for location"
282
- onChange={e => setCurrentSearch(e.target.value)}
283
- />
284
- )
285
- }
286
-
287
- function HelpAdornment() {
288
- const [isHelpDialogDisplayed, setHelpDialogDisplayed] = useState(false)
289
- return (
290
- <>
291
- <IconButton onClick={() => setHelpDialogDisplayed(true)} size="small">
292
- <HelpIcon fontSize="small" />
293
- </IconButton>
294
- {isHelpDialogDisplayed ? (
295
- <Suspense fallback={<div />}>
296
- <HelpDialog handleClose={() => setHelpDialogDisplayed(false)} />
297
- </Suspense>
298
- ) : null}
299
- </>
300
- )
301
- }
302
-
303
- function EndAdornment({
304
- showHelp,
305
- endAdornment,
306
- }: {
307
- showHelp?: boolean
308
- endAdornment: React.ReactNode
309
- }) {
310
- return (
311
- <>
312
- <InputAdornment position="end" style={{ marginRight: 7 }}>
313
- <SearchIcon fontSize="small" />
314
- {showHelp ? <HelpAdornment /> : null}
315
- </InputAdornment>
316
- {endAdornment}
317
- </>
318
- )
319
- }
320
-
321
- export default observer(RefNameAutocomplete)