@jbrowse/plugin-alignments 2.16.0 → 2.17.0

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 (221) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +2 -3
  2. package/dist/AlignmentsFeatureDetail/Flags.js +2 -2
  3. package/dist/AlignmentsFeatureDetail/LinkedPairedAlignments.js +2 -2
  4. package/dist/AlignmentsFeatureDetail/SupplementaryAlignments.js +2 -2
  5. package/dist/AlignmentsFeatureDetail/getSAFeatures.js +2 -2
  6. package/dist/AlignmentsFeatureDetail/stateModelFactory.d.ts +1 -1
  7. package/dist/BamAdapter/BamAdapter.d.ts +3 -2
  8. package/dist/BamAdapter/BamAdapter.js +34 -11
  9. package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +3 -17
  10. package/dist/BamAdapter/BamSlightlyLazyFeature.js +42 -72
  11. package/dist/CramAdapter/CramAdapter.d.ts +4 -3
  12. package/dist/CramAdapter/CramAdapter.js +24 -7
  13. package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +21 -27
  14. package/dist/CramAdapter/CramSlightlyLazyFeature.js +74 -73
  15. package/dist/CramAdapter/util.d.ts +1 -10
  16. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +1 -1
  17. package/dist/LinearAlignmentsDisplay/index.js +2 -2
  18. package/dist/LinearAlignmentsDisplay/{models/model.d.ts → model.d.ts} +6 -3
  19. package/dist/LinearAlignmentsDisplay/{models/model.js → model.js} +11 -7
  20. package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +6 -27
  21. package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +43 -21
  22. package/dist/LinearPileupDisplay/components/ColorByTagDialog.d.ts +5 -4
  23. package/dist/LinearPileupDisplay/components/ColorByTagDialog.js +3 -1
  24. package/dist/LinearPileupDisplay/components/GroupByDialog.js +8 -6
  25. package/dist/LinearPileupDisplay/components/SortByTagDialog.js +6 -4
  26. package/dist/LinearPileupDisplay/model.d.ts +41 -45
  27. package/dist/LinearPileupDisplay/model.js +118 -41
  28. package/dist/LinearReadArcsDisplay/components/ReactComponent.js +1 -1
  29. package/dist/LinearReadArcsDisplay/model.d.ts +22 -21
  30. package/dist/LinearReadArcsDisplay/model.js +13 -14
  31. package/dist/LinearReadCloudDisplay/components/ReactComponent.js +1 -1
  32. package/dist/LinearReadCloudDisplay/model.d.ts +14 -22
  33. package/dist/LinearReadCloudDisplay/model.js +12 -13
  34. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +49 -19
  35. package/dist/LinearSNPCoverageDisplay/index.js +3 -2
  36. package/dist/LinearSNPCoverageDisplay/{models/model.d.ts → model.d.ts} +3 -13
  37. package/dist/LinearSNPCoverageDisplay/{models/model.js → model.js} +71 -45
  38. package/dist/MismatchParser/cigarToMismatches.d.ts +3 -0
  39. package/dist/MismatchParser/cigarToMismatches.js +94 -0
  40. package/dist/MismatchParser/getNextRefPos.d.ts +4 -0
  41. package/dist/MismatchParser/getNextRefPos.js +40 -0
  42. package/dist/MismatchParser/index.d.ts +4 -29
  43. package/dist/MismatchParser/index.js +10 -321
  44. package/dist/MismatchParser/mdToMismatches.d.ts +3 -0
  45. package/dist/MismatchParser/mdToMismatches.js +80 -0
  46. package/dist/ModificationParser/index.d.ts +19 -0
  47. package/dist/ModificationParser/index.js +144 -0
  48. package/dist/PileupRPC/methods/GetGlobalValueForTag.js +1 -2
  49. package/dist/PileupRPC/methods/GetReducedFeatures.d.ts +1 -1
  50. package/dist/PileupRPC/methods/GetReducedFeatures.js +19 -16
  51. package/dist/PileupRPC/methods/GetVisibleModifications.d.ts +2 -1
  52. package/dist/PileupRPC/methods/GetVisibleModifications.js +9 -6
  53. package/dist/PileupRenderer/PileupLayoutSession.d.ts +8 -7
  54. package/dist/PileupRenderer/PileupRenderer.d.ts +6 -14
  55. package/dist/PileupRenderer/PileupRenderer.js +7 -5
  56. package/dist/PileupRenderer/renderAlignment.js +17 -4
  57. package/dist/PileupRenderer/renderAlignmentShape.js +102 -21
  58. package/dist/PileupRenderer/renderMethylation.d.ts +2 -1
  59. package/dist/PileupRenderer/renderMethylation.js +17 -9
  60. package/dist/PileupRenderer/renderMismatches.js +19 -19
  61. package/dist/PileupRenderer/renderModifications.d.ts +3 -2
  62. package/dist/PileupRenderer/renderModifications.js +31 -34
  63. package/dist/PileupRenderer/renderPerBaseLettering.d.ts +2 -1
  64. package/dist/PileupRenderer/renderPerBaseLettering.js +1 -3
  65. package/dist/PileupRenderer/renderPerBaseQuality.d.ts +2 -1
  66. package/dist/PileupRenderer/renderPerBaseQuality.js +1 -3
  67. package/dist/PileupRenderer/renderSoftClipping.js +6 -6
  68. package/dist/PileupRenderer/sortUtil.d.ts +2 -7
  69. package/dist/PileupRenderer/sortUtil.js +13 -13
  70. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +10 -5
  71. package/dist/SNPCoverageAdapter/generateCoverageBins.d.ts +13 -9
  72. package/dist/SNPCoverageAdapter/generateCoverageBins.js +269 -166
  73. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +2 -1
  74. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +171 -54
  75. package/dist/shared/color.d.ts +0 -10
  76. package/dist/shared/color.js +1 -7
  77. package/{esm/shared → dist/shared/components}/BaseDisplayComponent.d.ts +2 -2
  78. package/{esm/shared → dist/shared/components}/FilterByTagDialog.d.ts +3 -3
  79. package/dist/shared/{FilterByTagDialog.js → components/FilterByTagDialog.js} +5 -1
  80. package/dist/shared/fetchChains.js +1 -2
  81. package/dist/shared/getMaximumModificationAtEachPosition.d.ts +8 -0
  82. package/dist/shared/getMaximumModificationAtEachPosition.js +42 -0
  83. package/dist/shared/getUniqueModifications.d.ts +14 -0
  84. package/dist/shared/getUniqueModifications.js +16 -0
  85. package/dist/shared/getUniqueTags.d.ts +15 -0
  86. package/dist/shared/getUniqueTags.js +18 -0
  87. package/dist/shared/types.d.ts +94 -0
  88. package/dist/shared/util.d.ts +8 -0
  89. package/dist/shared/util.js +26 -0
  90. package/dist/util.d.ts +7 -4
  91. package/dist/util.js +30 -30
  92. package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +2 -3
  93. package/esm/AlignmentsFeatureDetail/Flags.js +1 -1
  94. package/esm/AlignmentsFeatureDetail/LinkedPairedAlignments.js +1 -1
  95. package/esm/AlignmentsFeatureDetail/SupplementaryAlignments.js +1 -1
  96. package/esm/AlignmentsFeatureDetail/getSAFeatures.js +2 -2
  97. package/esm/AlignmentsFeatureDetail/stateModelFactory.d.ts +1 -1
  98. package/esm/BamAdapter/BamAdapter.d.ts +3 -2
  99. package/esm/BamAdapter/BamAdapter.js +31 -8
  100. package/esm/BamAdapter/BamSlightlyLazyFeature.d.ts +3 -17
  101. package/esm/BamAdapter/BamSlightlyLazyFeature.js +43 -73
  102. package/esm/CramAdapter/CramAdapter.d.ts +4 -3
  103. package/esm/CramAdapter/CramAdapter.js +22 -5
  104. package/esm/CramAdapter/CramSlightlyLazyFeature.d.ts +21 -27
  105. package/esm/CramAdapter/CramSlightlyLazyFeature.js +74 -73
  106. package/esm/CramAdapter/util.d.ts +1 -10
  107. package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +1 -1
  108. package/esm/LinearAlignmentsDisplay/index.js +2 -2
  109. package/esm/LinearAlignmentsDisplay/{models/model.d.ts → model.d.ts} +6 -3
  110. package/esm/LinearAlignmentsDisplay/{models/model.js → model.js} +11 -7
  111. package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +6 -27
  112. package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +45 -23
  113. package/esm/LinearPileupDisplay/components/ColorByTagDialog.d.ts +5 -4
  114. package/esm/LinearPileupDisplay/components/ColorByTagDialog.js +3 -1
  115. package/esm/LinearPileupDisplay/components/GroupByDialog.js +8 -6
  116. package/esm/LinearPileupDisplay/components/SortByTagDialog.js +6 -4
  117. package/esm/LinearPileupDisplay/model.d.ts +41 -45
  118. package/esm/LinearPileupDisplay/model.js +119 -42
  119. package/esm/LinearReadArcsDisplay/components/ReactComponent.js +1 -1
  120. package/esm/LinearReadArcsDisplay/model.d.ts +22 -21
  121. package/esm/LinearReadArcsDisplay/model.js +14 -15
  122. package/esm/LinearReadCloudDisplay/components/ReactComponent.js +1 -1
  123. package/esm/LinearReadCloudDisplay/model.d.ts +14 -22
  124. package/esm/LinearReadCloudDisplay/model.js +13 -14
  125. package/esm/LinearSNPCoverageDisplay/components/Tooltip.js +49 -19
  126. package/esm/LinearSNPCoverageDisplay/index.js +3 -2
  127. package/esm/LinearSNPCoverageDisplay/{models/model.d.ts → model.d.ts} +3 -13
  128. package/esm/LinearSNPCoverageDisplay/{models/model.js → model.js} +72 -46
  129. package/esm/MismatchParser/cigarToMismatches.d.ts +3 -0
  130. package/esm/MismatchParser/cigarToMismatches.js +91 -0
  131. package/esm/MismatchParser/getNextRefPos.d.ts +4 -0
  132. package/esm/MismatchParser/getNextRefPos.js +37 -0
  133. package/esm/MismatchParser/index.d.ts +4 -29
  134. package/esm/MismatchParser/index.js +5 -311
  135. package/esm/MismatchParser/mdToMismatches.d.ts +3 -0
  136. package/esm/MismatchParser/mdToMismatches.js +77 -0
  137. package/esm/ModificationParser/index.d.ts +19 -0
  138. package/esm/ModificationParser/index.js +138 -0
  139. package/esm/PileupRPC/methods/GetGlobalValueForTag.js +1 -2
  140. package/esm/PileupRPC/methods/GetReducedFeatures.d.ts +1 -1
  141. package/esm/PileupRPC/methods/GetReducedFeatures.js +19 -16
  142. package/esm/PileupRPC/methods/GetVisibleModifications.d.ts +2 -1
  143. package/esm/PileupRPC/methods/GetVisibleModifications.js +9 -6
  144. package/esm/PileupRenderer/PileupLayoutSession.d.ts +8 -7
  145. package/esm/PileupRenderer/PileupRenderer.d.ts +6 -14
  146. package/esm/PileupRenderer/PileupRenderer.js +8 -6
  147. package/esm/PileupRenderer/renderAlignment.js +17 -4
  148. package/esm/PileupRenderer/renderAlignmentShape.js +102 -21
  149. package/esm/PileupRenderer/renderMethylation.d.ts +2 -1
  150. package/esm/PileupRenderer/renderMethylation.js +17 -9
  151. package/esm/PileupRenderer/renderMismatches.js +19 -19
  152. package/esm/PileupRenderer/renderModifications.d.ts +3 -2
  153. package/esm/PileupRenderer/renderModifications.js +30 -33
  154. package/esm/PileupRenderer/renderPerBaseLettering.d.ts +2 -1
  155. package/esm/PileupRenderer/renderPerBaseLettering.js +1 -3
  156. package/esm/PileupRenderer/renderPerBaseQuality.d.ts +2 -1
  157. package/esm/PileupRenderer/renderPerBaseQuality.js +1 -3
  158. package/esm/PileupRenderer/renderSoftClipping.js +6 -6
  159. package/esm/PileupRenderer/sortUtil.d.ts +2 -7
  160. package/esm/PileupRenderer/sortUtil.js +13 -13
  161. package/esm/SNPCoverageAdapter/SNPCoverageAdapter.js +10 -5
  162. package/esm/SNPCoverageAdapter/generateCoverageBins.d.ts +13 -9
  163. package/esm/SNPCoverageAdapter/generateCoverageBins.js +269 -166
  164. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +2 -1
  165. package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +171 -54
  166. package/esm/shared/color.d.ts +0 -10
  167. package/esm/shared/color.js +0 -6
  168. package/{dist/shared → esm/shared/components}/BaseDisplayComponent.d.ts +2 -2
  169. package/{dist/shared → esm/shared/components}/FilterByTagDialog.d.ts +3 -3
  170. package/esm/shared/{FilterByTagDialog.js → components/FilterByTagDialog.js} +5 -1
  171. package/esm/shared/fetchChains.js +1 -2
  172. package/esm/shared/getMaximumModificationAtEachPosition.d.ts +8 -0
  173. package/esm/shared/getMaximumModificationAtEachPosition.js +39 -0
  174. package/esm/shared/getUniqueModifications.d.ts +14 -0
  175. package/esm/shared/getUniqueModifications.js +13 -0
  176. package/esm/shared/getUniqueTags.d.ts +15 -0
  177. package/esm/shared/getUniqueTags.js +15 -0
  178. package/esm/shared/types.d.ts +94 -0
  179. package/esm/shared/util.d.ts +8 -0
  180. package/esm/shared/util.js +23 -0
  181. package/esm/util.d.ts +7 -4
  182. package/esm/util.js +28 -27
  183. package/package.json +4 -4
  184. package/dist/LinearPileupDisplay/components/ColorByModificationsDialog.d.ts +0 -15
  185. package/dist/LinearPileupDisplay/components/ColorByModificationsDialog.js +0 -41
  186. package/dist/LinearPileupDisplay/components/ModificationsTable.d.ts +0 -4
  187. package/dist/LinearPileupDisplay/components/ModificationsTable.js +0 -28
  188. package/dist/SNPCoverageAdapter/util.d.ts +0 -25
  189. package/dist/shared/index.d.ts +0 -49
  190. package/dist/shared/index.js +0 -41
  191. package/esm/LinearPileupDisplay/components/ColorByModificationsDialog.d.ts +0 -15
  192. package/esm/LinearPileupDisplay/components/ColorByModificationsDialog.js +0 -36
  193. package/esm/LinearPileupDisplay/components/ModificationsTable.d.ts +0 -4
  194. package/esm/LinearPileupDisplay/components/ModificationsTable.js +0 -22
  195. package/esm/SNPCoverageAdapter/util.d.ts +0 -25
  196. package/esm/shared/index.d.ts +0 -49
  197. package/esm/shared/index.js +0 -36
  198. /package/dist/LinearAlignmentsDisplay/{models/alignmentsModel.d.ts → alignmentsModel.d.ts} +0 -0
  199. /package/dist/LinearAlignmentsDisplay/{models/alignmentsModel.js → alignmentsModel.js} +0 -0
  200. /package/dist/LinearAlignmentsDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
  201. /package/dist/LinearAlignmentsDisplay/{models/configSchema.js → configSchema.js} +0 -0
  202. /package/dist/LinearAlignmentsDisplay/{models/util.d.ts → util.d.ts} +0 -0
  203. /package/dist/LinearAlignmentsDisplay/{models/util.js → util.js} +0 -0
  204. /package/dist/LinearSNPCoverageDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
  205. /package/dist/LinearSNPCoverageDisplay/{models/configSchema.js → configSchema.js} +0 -0
  206. /package/dist/shared/{BaseDisplayComponent.js → components/BaseDisplayComponent.js} +0 -0
  207. /package/dist/shared/{renderSvg.d.ts → renderSvgUtil.d.ts} +0 -0
  208. /package/dist/shared/{renderSvg.js → renderSvgUtil.js} +0 -0
  209. /package/dist/{SNPCoverageAdapter/util.js → shared/types.js} +0 -0
  210. /package/esm/LinearAlignmentsDisplay/{models/alignmentsModel.d.ts → alignmentsModel.d.ts} +0 -0
  211. /package/esm/LinearAlignmentsDisplay/{models/alignmentsModel.js → alignmentsModel.js} +0 -0
  212. /package/esm/LinearAlignmentsDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
  213. /package/esm/LinearAlignmentsDisplay/{models/configSchema.js → configSchema.js} +0 -0
  214. /package/esm/LinearAlignmentsDisplay/{models/util.d.ts → util.d.ts} +0 -0
  215. /package/esm/LinearAlignmentsDisplay/{models/util.js → util.js} +0 -0
  216. /package/esm/LinearSNPCoverageDisplay/{models/configSchema.d.ts → configSchema.d.ts} +0 -0
  217. /package/esm/LinearSNPCoverageDisplay/{models/configSchema.js → configSchema.js} +0 -0
  218. /package/esm/shared/{BaseDisplayComponent.js → components/BaseDisplayComponent.js} +0 -0
  219. /package/esm/shared/{renderSvg.d.ts → renderSvgUtil.d.ts} +0 -0
  220. /package/esm/shared/{renderSvg.js → renderSvgUtil.js} +0 -0
  221. /package/esm/{SNPCoverageAdapter/util.js → shared/types.js} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { Instance } from 'mobx-state-tree';
2
2
  import { AnyConfigurationSchemaType } from '@jbrowse/core/configuration';
3
+ import { ModificationType, ModificationTypeWithColor, SortedBy } from '../shared/types';
3
4
  /**
4
5
  * #stateModel LinearPileupDisplay
5
6
  * #category display
@@ -48,9 +49,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
48
49
  message: React.ReactNode;
49
50
  filled?: boolean;
50
51
  status?: string;
51
- reactElement? /**
52
- * #property
53
- */: React.ReactElement;
52
+ reactElement?: React.ReactElement;
54
53
  };
55
54
  }) => import("react").JSX.Element | undefined;
56
55
  renderProps: any;
@@ -61,11 +60,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
61
60
  setLoading(abortController: AbortController): void;
62
61
  setMessage(messageText: string): void;
63
62
  setRendered(props: {
64
- reactElement: React.
65
- /**
66
- * #action
67
- */
68
- ReactElement;
63
+ reactElement: React.ReactElement;
69
64
  features: Map<string, import("@jbrowse/core/util").Feature>;
70
65
  layout: any;
71
66
  maxHeightReached: boolean;
@@ -109,33 +104,15 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
109
104
  noSpacing: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<boolean>>;
110
105
  fadeLikelihood: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<boolean>>;
111
106
  trackMaxHeight: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
112
- colorBy: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
113
- type: import("mobx-state-tree").ISimpleType<string>;
114
- tag: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
115
- extra: import("mobx-state-tree").IType<any, any, any>;
116
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
117
- filterBy: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IModelType<{
118
- flagInclude: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
119
- flagExclude: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
120
- readName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
121
- tagFilter: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
122
- tag: import("mobx-state-tree").ISimpleType<string>;
123
- value: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
124
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
125
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
107
+ colorBy: import("mobx-state-tree").IType<import("../shared/types").ColorBy | undefined, import("../shared/types").ColorBy | undefined, import("../shared/types").ColorBy | undefined>;
108
+ filterBy: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<import("../shared/types").FilterBy, import("../shared/types").FilterBy, import("../shared/types").FilterBy>, [undefined]>;
126
109
  jexlFilters: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").ISimpleType<string>>, [undefined]>;
127
110
  } & {
128
111
  type: import("mobx-state-tree").ISimpleType<"LinearPileupDisplay">;
129
112
  configuration: AnyConfigurationSchemaType;
130
113
  showSoftClipping: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
131
114
  mismatchAlpha: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<boolean>>;
132
- sortedBy: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
133
- type: import("mobx-state-tree").ISimpleType<string>;
134
- pos: import("mobx-state-tree").ISimpleType<number>;
135
- tag: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
136
- refName: import("mobx-state-tree").ISimpleType<string>;
137
- assemblyName: import("mobx-state-tree").ISimpleType<string>;
138
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
115
+ sortedBy: import("mobx-state-tree").IType<SortedBy | undefined, SortedBy | undefined, SortedBy | undefined>;
139
116
  }, {
140
117
  rendererTypeName: string;
141
118
  error: unknown;
@@ -158,10 +135,10 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
158
135
  rendererTypeName: string;
159
136
  error: unknown;
160
137
  message: string | undefined;
161
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree" /**
138
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
139
+ onHorizontalScroll? /**
162
140
  * #property
163
- */)._NotCustomized>>;
164
- onHorizontalScroll?: () => void;
141
+ */: () => void;
165
142
  blockState?: Record<string, any>;
166
143
  }>;
167
144
  readonly DisplayBlurb: React.FC<{
@@ -181,9 +158,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
181
158
  rendererTypeName: string;
182
159
  error: unknown;
183
160
  message: string | undefined;
184
- }, import("mobx-state-tree" /**
185
- * #action
186
- */)._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
161
+ }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
187
162
  }> | null;
188
163
  readonly adapterConfig: any;
189
164
  readonly parentTrack: any;
@@ -276,17 +251,13 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
276
251
  setMaxHeight(n?: number): void;
277
252
  setFeatureHeight(n?: number): void;
278
253
  setNoSpacing(flag?: boolean): void;
279
- setColorScheme(colorScheme: {
280
- type: string;
281
- tag?: string;
282
- extra?: import("../shared/color").ExtraColorBy;
283
- }): void;
254
+ setColorScheme(colorScheme: import("../shared/types").ColorBy): void;
284
255
  updateColorTagMap(uniqueTag: string[]): void;
285
256
  setFeatureUnderMouse(feat?: import("@jbrowse/core/util").Feature): void;
286
257
  selectFeature(feature: import("@jbrowse/core/util").Feature): void;
287
258
  copyFeatureToClipboard(feature: import("@jbrowse/core/util").Feature): void;
288
259
  setConfig(conf: import("@jbrowse/core/configuration").AnyConfigurationModel): void;
289
- setFilterBy(filter: import("../shared").IFilter): void;
260
+ setFilterBy(filter: import("../shared/types").FilterBy): void;
290
261
  setJexlFilters(filters: string[]): void;
291
262
  } & {
292
263
  readonly rendererConfig: {
@@ -346,9 +317,21 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
346
317
  } & {
347
318
  afterAttach(): void;
348
319
  } & {
320
+ /**
321
+ * #volatile
322
+ */
349
323
  sortReady: boolean;
324
+ /**
325
+ * #volatile
326
+ */
350
327
  currSortBpPerPx: number;
351
- modificationTagMap: import("mobx").ObservableMap<string, string>;
328
+ /**
329
+ * #volatile
330
+ */
331
+ visibleModifications: import("mobx").ObservableMap<string, ModificationTypeWithColor>;
332
+ /**
333
+ * #volatile
334
+ */
352
335
  modificationsReady: boolean;
353
336
  } & {
354
337
  /**
@@ -358,7 +341,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
358
341
  /**
359
342
  * #action
360
343
  */
361
- updateModificationColorMap(uniqueModifications: string[]): void;
344
+ updateVisibleModifications(uniqueModifications: ModificationType[]): void;
362
345
  /**
363
346
  * #action
364
347
  */
@@ -395,6 +378,10 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
395
378
  */
396
379
  reload(): void;
397
380
  } & {
381
+ /**
382
+ * #getter
383
+ */
384
+ readonly visibleModificationTypes: string[];
398
385
  /**
399
386
  * #getter
400
387
  */
@@ -455,8 +442,17 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
455
442
  readonly label: "Pair orientation";
456
443
  readonly onClick: () => void;
457
444
  }, {
458
- readonly label: "Modifications or methylation";
459
- readonly onClick: () => void;
445
+ readonly label: "Modifications";
446
+ readonly type: "subMenu";
447
+ readonly subMenu: ({
448
+ label: string;
449
+ onClick: () => void;
450
+ type?: undefined;
451
+ } | {
452
+ type: string;
453
+ label?: undefined;
454
+ onClick?: undefined;
455
+ })[];
460
456
  }, {
461
457
  readonly label: "Insert size";
462
458
  readonly onClick: () => void;
@@ -27,24 +27,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const react_1 = require("react");
30
+ const mobx_1 = require("mobx");
30
31
  const mobx_state_tree_1 = require("mobx-state-tree");
31
32
  const configuration_1 = require("@jbrowse/core/configuration");
32
33
  const tracks_1 = require("@jbrowse/core/util/tracks");
33
34
  const util_1 = require("@jbrowse/core/util");
34
- const shared_1 = require("../shared");
35
- const util_2 = require("../util");
36
35
  // icons
37
36
  const Visibility_1 = __importDefault(require("@mui/icons-material/Visibility"));
38
- const Sort_1 = __importDefault(require("@mui/icons-material/Sort"));
37
+ const SwapVert_1 = __importDefault(require("@mui/icons-material/SwapVert"));
39
38
  const Workspaces_1 = __importDefault(require("@mui/icons-material/Workspaces"));
40
39
  const ColorLens_1 = __importDefault(require("@mui/icons-material/ColorLens"));
41
40
  // locals
42
41
  const SharedLinearPileupDisplayMixin_1 = require("./SharedLinearPileupDisplayMixin");
43
- const mobx_1 = require("mobx");
42
+ const util_2 = require("../util");
43
+ const getUniqueModifications_1 = require("../shared/getUniqueModifications");
44
44
  // lazies
45
45
  const SortByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SortByTagDialog'))));
46
46
  const GroupByDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/GroupByDialog'))));
47
- const ModificationsDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/ColorByModificationsDialog'))));
48
47
  /**
49
48
  * #stateModel LinearPileupDisplay
50
49
  * #category display
@@ -73,18 +72,24 @@ function stateModelFactory(configSchema) {
73
72
  /**
74
73
  * #property
75
74
  */
76
- sortedBy: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({
77
- type: mobx_state_tree_1.types.string,
78
- pos: mobx_state_tree_1.types.number,
79
- tag: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
80
- refName: mobx_state_tree_1.types.string,
81
- assemblyName: mobx_state_tree_1.types.string,
82
- })),
75
+ sortedBy: mobx_state_tree_1.types.frozen(),
83
76
  }))
84
77
  .volatile(() => ({
78
+ /**
79
+ * #volatile
80
+ */
85
81
  sortReady: false,
82
+ /**
83
+ * #volatile
84
+ */
86
85
  currSortBpPerPx: 0,
87
- modificationTagMap: mobx_1.observable.map({}),
86
+ /**
87
+ * #volatile
88
+ */
89
+ visibleModifications: mobx_1.observable.map({}),
90
+ /**
91
+ * #volatile
92
+ */
88
93
  modificationsReady: false,
89
94
  }))
90
95
  .actions(self => ({
@@ -97,10 +102,13 @@ function stateModelFactory(configSchema) {
97
102
  /**
98
103
  * #action
99
104
  */
100
- updateModificationColorMap(uniqueModifications) {
105
+ updateVisibleModifications(uniqueModifications) {
101
106
  uniqueModifications.forEach(value => {
102
- if (!self.modificationTagMap.has(value)) {
103
- self.modificationTagMap.set(value, util_2.modificationColors[value] || (0, util_2.randomColor)());
107
+ if (!self.visibleModifications.has(value.type)) {
108
+ self.visibleModifications.set(value.type, {
109
+ ...value,
110
+ color: (0, util_2.getColorForModification)(value.type),
111
+ });
104
112
  }
105
113
  });
106
114
  },
@@ -180,6 +188,12 @@ function stateModelFactory(configSchema) {
180
188
  };
181
189
  })
182
190
  .views(self => ({
191
+ /**
192
+ * #getter
193
+ */
194
+ get visibleModificationTypes() {
195
+ return [...self.visibleModifications.keys()];
196
+ },
183
197
  /**
184
198
  * #getter
185
199
  */
@@ -224,13 +238,13 @@ function stateModelFactory(configSchema) {
224
238
  * #method
225
239
  */
226
240
  renderPropsPre() {
227
- const { sortedBy, showSoftClipping, modificationTagMap } = self;
241
+ const { sortedBy, showSoftClipping, visibleModifications } = self;
228
242
  const superProps = superRenderPropsPre();
229
243
  return {
230
244
  ...superProps,
231
245
  showSoftClip: showSoftClipping,
232
246
  sortedBy,
233
- modificationTagMap: Object.fromEntries(modificationTagMap.toJSON()),
247
+ visibleModifications: Object.fromEntries(visibleModifications.toJSON()),
234
248
  };
235
249
  },
236
250
  /**
@@ -252,7 +266,7 @@ function stateModelFactory(configSchema) {
252
266
  ...superTrackMenuItems(),
253
267
  {
254
268
  label: 'Sort by...',
255
- icon: Sort_1.default,
269
+ icon: SwapVert_1.default,
256
270
  disabled: self.showSoftClipping,
257
271
  subMenu: [
258
272
  ...['Start location', 'Read strand', 'Base pair'].map(option => ({
@@ -288,25 +302,88 @@ function stateModelFactory(configSchema) {
288
302
  {
289
303
  label: 'Pair orientation',
290
304
  onClick: () => {
291
- self.setColorScheme({ type: 'pairOrientation' });
305
+ self.setColorScheme({
306
+ type: 'pairOrientation',
307
+ });
292
308
  },
293
309
  },
294
310
  {
295
- label: 'Modifications or methylation',
296
- onClick: () => {
297
- (0, util_1.getSession)(self).queueDialog(doneCallback => [
298
- ModificationsDialog,
311
+ label: 'Modifications',
312
+ type: 'subMenu',
313
+ subMenu: self.modificationsReady
314
+ ? [
299
315
  {
300
- model: self,
301
- handleClose: doneCallback,
316
+ label: 'All modifications',
317
+ onClick: () => {
318
+ self.setColorScheme({
319
+ type: 'modifications',
320
+ });
321
+ },
302
322
  },
303
- ]);
304
- },
323
+ ...self.visibleModificationTypes.map(key => {
324
+ var _a;
325
+ return ({
326
+ label: `Show only ${((_a = util_2.modificationData[key]) === null || _a === void 0 ? void 0 : _a.name) || key}`,
327
+ onClick: () => {
328
+ self.setColorScheme({
329
+ type: 'modifications',
330
+ modifications: {
331
+ isolatedModification: key,
332
+ },
333
+ });
334
+ },
335
+ });
336
+ }),
337
+ { type: 'divider' },
338
+ {
339
+ label: 'All modifications (<50% prob colored blue)',
340
+ onClick: () => {
341
+ self.setColorScheme({
342
+ type: 'modifications',
343
+ modifications: {
344
+ twoColor: true,
345
+ },
346
+ });
347
+ },
348
+ },
349
+ ...self.visibleModificationTypes.map(key => {
350
+ var _a;
351
+ return ({
352
+ label: `Show only ${((_a = util_2.modificationData[key]) === null || _a === void 0 ? void 0 : _a.name) || key} (<50% prob colored blue)`,
353
+ onClick: () => {
354
+ self.setColorScheme({
355
+ type: 'modifications',
356
+ modifications: {
357
+ isolatedModification: key,
358
+ twoColor: true,
359
+ },
360
+ });
361
+ },
362
+ });
363
+ }),
364
+ { type: 'divider' },
365
+ {
366
+ label: 'All reference CpGs',
367
+ onClick: () => {
368
+ self.setColorScheme({
369
+ type: 'methylation',
370
+ });
371
+ },
372
+ },
373
+ ]
374
+ : [
375
+ {
376
+ label: 'Loading modifications...',
377
+ onClick: () => { },
378
+ },
379
+ ],
305
380
  },
306
381
  {
307
382
  label: 'Insert size',
308
383
  onClick: () => {
309
- self.setColorScheme({ type: 'insertSize' });
384
+ self.setColorScheme({
385
+ type: 'insertSize',
386
+ });
310
387
  },
311
388
  },
312
389
  ...superColorSchemeSubMenuItems(),
@@ -388,25 +465,25 @@ function stateModelFactory(configSchema) {
388
465
  ...self.renderPropsPre(),
389
466
  });
390
467
  }
391
- self.setCurrSortBpPerPx(bpPerPx);
392
- self.setSortReady(true);
468
+ if ((0, mobx_state_tree_1.isAlive)(self)) {
469
+ self.setCurrSortBpPerPx(bpPerPx);
470
+ self.setSortReady(true);
471
+ }
393
472
  }, { delay: 1000 });
394
473
  (0, util_2.createAutorun)(self, async () => {
395
474
  if (!self.autorunReady) {
396
475
  return;
397
476
  }
398
- const { parentTrack, colorBy } = self;
399
477
  const { staticBlocks } = (0, util_1.getContainingView)(self);
400
- if ((colorBy === null || colorBy === void 0 ? void 0 : colorBy.type) === 'modifications') {
401
- const adapter = (0, configuration_1.getConf)(parentTrack, ['adapter']);
402
- const vals = await (0, shared_1.getUniqueModificationValues)({
403
- self,
404
- adapterConfig: adapter,
405
- blocks: staticBlocks,
406
- });
407
- self.updateModificationColorMap(vals);
478
+ const vals = await (0, getUniqueModifications_1.getUniqueModifications)({
479
+ self,
480
+ adapterConfig: (0, configuration_1.getConf)(self.parentTrack, 'adapter'),
481
+ blocks: staticBlocks,
482
+ });
483
+ if ((0, mobx_state_tree_1.isAlive)(self)) {
484
+ self.updateVisibleModifications(vals);
485
+ self.setModificationsReady(true);
408
486
  }
409
- self.setModificationsReady(true);
410
487
  });
411
488
  },
412
489
  }));
@@ -29,7 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const react_1 = __importStar(require("react"));
30
30
  const mobx_react_1 = require("mobx-react");
31
31
  const util_1 = require("@jbrowse/core/util");
32
- const BaseDisplayComponent_1 = __importDefault(require("../../shared/BaseDisplayComponent"));
32
+ const BaseDisplayComponent_1 = __importDefault(require("../../shared/components/BaseDisplayComponent"));
33
33
  const Arcs = (0, mobx_react_1.observer)(function ({ model, }) {
34
34
  const view = (0, util_1.getContainingView)(model);
35
35
  const width = Math.round(view.dynamicBlocks.totalWidthPx);
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Instance } from 'mobx-state-tree';
3
3
  import { AnyConfigurationSchemaType } from '@jbrowse/core/configuration';
4
- import { IFilter } from '../shared';
4
+ import { ColorBy, FilterBy } from '../shared/types';
5
5
  import { ChainData } from '../shared/fetchChains';
6
6
  /**
7
7
  * #stateModel LinearReadArcsDisplay
@@ -24,22 +24,10 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
24
24
  } & {
25
25
  type: import("mobx-state-tree").ISimpleType<"LinearReadArcsDisplay">;
26
26
  configuration: AnyConfigurationSchemaType;
27
- filterBy: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IModelType<{
28
- flagInclude: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
29
- flagExclude: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
30
- readName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
31
- tagFilter: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
32
- tag: import("mobx-state-tree").ISimpleType<string>;
33
- value: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
34
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
35
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
27
+ filterBy: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<FilterBy, FilterBy, FilterBy>, [undefined]>;
36
28
  lineWidth: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
37
29
  jitter: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<number>>;
38
- colorBy: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IModelType<{
39
- type: import("mobx-state-tree").ISimpleType<string>;
40
- tag: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
41
- extra: import("mobx-state-tree").IType<any, any, any>;
42
- }, {}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
30
+ colorBy: import("mobx-state-tree").IType<ColorBy | undefined, ColorBy | undefined, ColorBy | undefined>;
43
31
  drawInter: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
44
32
  drawLongRange: import("mobx-state-tree").IType<boolean | undefined, boolean, boolean>;
45
33
  }, {
@@ -66,9 +54,17 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
66
54
  message: string | undefined;
67
55
  }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>>;
68
56
  onHorizontalScroll?: () => void;
69
- blockState?: Record<string, any>;
57
+ blockState? /**
58
+ * #property
59
+ */: Record<string, any>;
70
60
  }>;
71
- readonly DisplayBlurb: React.FC<{
61
+ readonly DisplayBlurb: React.
62
+ /**
63
+ * #property
64
+ */
65
+ FC /**
66
+ * #property
67
+ */<{
72
68
  model: {
73
69
  id: string;
74
70
  type: string;
@@ -79,7 +75,9 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
79
75
  message: string | undefined;
80
76
  } & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IModelType<{
81
77
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
82
- type: import("mobx-state-tree").ISimpleType<string>;
78
+ type: import("mobx-state-tree" /**
79
+ * #action
80
+ */).ISimpleType<string>;
83
81
  rpcDriverName: import("mobx-state-tree").IMaybe<import("mobx-state-tree").ISimpleType<string>>;
84
82
  }, {
85
83
  rendererTypeName: string;
@@ -91,7 +89,10 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
91
89
  readonly parentTrack: any;
92
90
  renderProps(): any;
93
91
  readonly rendererType: import("@jbrowse/core/pluggableElementTypes").RendererType;
94
- readonly DisplayMessageComponent: undefined | React.FC<any>;
92
+ readonly DisplayMessageComponent: undefined | React.FC /**
93
+ * #action
94
+ * thin, bold, extrabold, etc
95
+ */<any>;
95
96
  trackMenuItems(): import("@jbrowse/core/ui").MenuItem[];
96
97
  readonly viewMenuActions: import("@jbrowse/core/ui").MenuItem[];
97
98
  regionCannotBeRendered(): null;
@@ -165,7 +166,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
165
166
  /**
166
167
  * #action
167
168
  */
168
- setColorScheme(s: {
169
+ setColorScheme(colorBy: {
169
170
  type: string;
170
171
  }): void;
171
172
  /**
@@ -183,7 +184,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
183
184
  /**
184
185
  * #action
185
186
  */
186
- setFilterBy(filter: IFilter): void;
187
+ setFilterBy(filter: FilterBy): void;
187
188
  /**
188
189
  * #action
189
190
  * thin, bold, extrabold, etc
@@ -35,10 +35,9 @@ const plugin_linear_genome_view_1 = require("@jbrowse/plugin-linear-genome-view"
35
35
  // icons
36
36
  const Palette_1 = __importDefault(require("@mui/icons-material/Palette"));
37
37
  const ClearAll_1 = __importDefault(require("@mui/icons-material/ClearAll"));
38
- // locals
39
- const shared_1 = require("../shared");
40
- // async
41
- const FilterByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/FilterByTagDialog'))));
38
+ const util_2 = require("../shared/util");
39
+ // lazies
40
+ const FilterByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/components/FilterByTagDialog'))));
42
41
  /**
43
42
  * #stateModel LinearReadArcsDisplay
44
43
  * the arc display is a non-block-based track, so draws to a single canvas and
@@ -62,7 +61,7 @@ function stateModelFactory(configSchema) {
62
61
  /**
63
62
  * #property
64
63
  */
65
- filterBy: mobx_state_tree_1.types.optional(shared_1.FilterModel, {}),
64
+ filterBy: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), util_2.defaultFilterFlags),
66
65
  /**
67
66
  * #property
68
67
  */
@@ -74,11 +73,7 @@ function stateModelFactory(configSchema) {
74
73
  /**
75
74
  * #property
76
75
  */
77
- colorBy: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.model({
78
- type: mobx_state_tree_1.types.string,
79
- tag: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
80
- extra: mobx_state_tree_1.types.frozen(),
81
- })),
76
+ colorBy: mobx_state_tree_1.types.frozen(),
82
77
  /**
83
78
  * #property
84
79
  */
@@ -131,8 +126,10 @@ function stateModelFactory(configSchema) {
131
126
  /**
132
127
  * #action
133
128
  */
134
- setColorScheme(s) {
135
- self.colorBy = (0, mobx_state_tree_1.cast)(s);
129
+ setColorScheme(colorBy) {
130
+ self.colorBy = {
131
+ ...colorBy,
132
+ };
136
133
  },
137
134
  /**
138
135
  * #action
@@ -156,7 +153,9 @@ function stateModelFactory(configSchema) {
156
153
  * #action
157
154
  */
158
155
  setFilterBy(filter) {
159
- self.filterBy = (0, mobx_state_tree_1.cast)(filter);
156
+ self.filterBy = {
157
+ ...filter,
158
+ };
160
159
  },
161
160
  /**
162
161
  * #action
@@ -332,7 +331,7 @@ function stateModelFactory(configSchema) {
332
331
  * #method
333
332
  */
334
333
  async renderSvg(opts) {
335
- const { renderSvg } = await Promise.resolve().then(() => __importStar(require('../shared/renderSvg')));
334
+ const { renderSvg } = await Promise.resolve().then(() => __importStar(require('../shared/renderSvgUtil')));
336
335
  const { drawFeats } = await Promise.resolve().then(() => __importStar(require('./drawFeats')));
337
336
  return renderSvg(self, opts, drawFeats);
338
337
  },
@@ -29,7 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const react_1 = __importStar(require("react"));
30
30
  const mobx_react_1 = require("mobx-react");
31
31
  const util_1 = require("@jbrowse/core/util");
32
- const BaseDisplayComponent_1 = __importDefault(require("../../shared/BaseDisplayComponent"));
32
+ const BaseDisplayComponent_1 = __importDefault(require("../../shared/components/BaseDisplayComponent"));
33
33
  const Cloud = (0, mobx_react_1.observer)(function ({ model, }) {
34
34
  const view = (0, util_1.getContainingView)(model);
35
35
  const width = Math.round(view.dynamicBlocks.totalWidthPx);