react-msaview 2.1.5 → 3.0.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.
- package/bundle/index.js +37 -255
- package/dist/DialogQueue.d.ts +25 -0
- package/dist/DialogQueue.js +46 -0
- package/dist/DialogQueue.js.map +1 -0
- package/dist/UniprotTrack.js.map +1 -1
- package/dist/colorSchemes.js.map +1 -1
- package/dist/components/BoxTrackBlock.js +3 -2
- package/dist/components/BoxTrackBlock.js.map +1 -1
- package/dist/components/Header.js +10 -13
- package/dist/components/Header.js.map +1 -1
- package/dist/components/ImportForm/ImportFormExamples.d.ts +6 -0
- package/dist/components/ImportForm/ImportFormExamples.js +50 -0
- package/dist/components/ImportForm/ImportFormExamples.js.map +1 -0
- package/dist/components/ImportForm/data/seq2.js.map +1 -0
- package/dist/components/{ImportForm.d.ts → ImportForm/index.d.ts} +1 -1
- package/dist/components/ImportForm/index.js +31 -0
- package/dist/components/ImportForm/index.js.map +1 -0
- package/dist/components/ImportForm/util.d.ts +3 -0
- package/dist/components/ImportForm/util.js +15 -0
- package/dist/components/ImportForm/util.js.map +1 -0
- package/dist/components/{MSABlock.d.ts → MSAPanel/MSABlock.d.ts} +1 -1
- package/dist/components/MSAPanel/MSABlock.js +46 -0
- package/dist/components/MSAPanel/MSABlock.js.map +1 -0
- package/dist/components/{MSACanvas.d.ts → MSAPanel/MSACanvas.d.ts} +1 -1
- package/dist/components/{MSACanvas.js → MSAPanel/MSACanvas.js} +10 -3
- package/dist/components/MSAPanel/MSACanvas.js.map +1 -0
- package/dist/components/{MSAMouseoverCanvas.d.ts → MSAPanel/MSAMouseoverCanvas.d.ts} +1 -1
- package/dist/components/MSAPanel/MSAMouseoverCanvas.js +50 -0
- package/dist/components/MSAPanel/MSAMouseoverCanvas.js.map +1 -0
- package/dist/components/MSAPanel/index.d.ts +5 -0
- package/dist/components/MSAPanel/index.js +9 -0
- package/dist/components/MSAPanel/index.js.map +1 -0
- package/dist/components/MSAPanel/renderMSABlock.d.ts +8 -0
- package/dist/components/MSAPanel/renderMSABlock.js +81 -0
- package/dist/components/MSAPanel/renderMSABlock.js.map +1 -0
- package/dist/components/MSAView.d.ts +2 -2
- package/dist/components/MSAView.js +26 -31
- package/dist/components/MSAView.js.map +1 -1
- package/dist/components/Minimap.d.ts +6 -0
- package/dist/components/Minimap.js +72 -0
- package/dist/components/Minimap.js.map +1 -0
- package/dist/components/OverviewRubberband.d.ts +8 -0
- package/dist/components/OverviewRubberband.js +185 -0
- package/dist/components/OverviewRubberband.js.map +1 -0
- package/dist/components/ResizeHandles.js.map +1 -1
- package/dist/components/Rubberband.js +13 -1
- package/dist/components/Rubberband.js.map +1 -1
- package/dist/components/TextTrack.js +3 -2
- package/dist/components/TextTrack.js.map +1 -1
- package/dist/components/Track.js +5 -5
- package/dist/components/Track.js.map +1 -1
- package/dist/components/{TreeBranchMenu.d.ts → TreePanel/TreeBranchMenu.d.ts} +1 -1
- package/dist/components/TreePanel/TreeBranchMenu.js.map +1 -0
- package/dist/components/{TreeCanvas.d.ts → TreePanel/TreeCanvas.d.ts} +1 -1
- package/dist/components/{TreeCanvas.js → TreePanel/TreeCanvas.js} +1 -1
- package/dist/components/TreePanel/TreeCanvas.js.map +1 -0
- package/dist/components/{TreeCanvasBlock.d.ts → TreePanel/TreeCanvasBlock.d.ts} +1 -1
- package/dist/components/TreePanel/TreeCanvasBlock.js +117 -0
- package/dist/components/TreePanel/TreeCanvasBlock.js.map +1 -0
- package/dist/components/{TreeMenu.d.ts → TreePanel/TreeMenu.d.ts} +1 -1
- package/dist/components/{TreeMenu.js → TreePanel/TreeMenu.js} +9 -5
- package/dist/components/TreePanel/TreeMenu.js.map +1 -0
- package/dist/components/{TreeRuler.d.ts → TreePanel/TreeRuler.d.ts} +1 -1
- package/dist/components/TreePanel/TreeRuler.js +8 -0
- package/dist/components/TreePanel/TreeRuler.js.map +1 -0
- package/dist/components/{dialogs → TreePanel/dialogs}/TreeNodeInfoDlg.d.ts +1 -1
- package/dist/components/TreePanel/dialogs/TreeNodeInfoDlg.js.map +1 -0
- package/dist/components/TreePanel/index.d.ts +6 -0
- package/dist/components/TreePanel/index.js +10 -0
- package/dist/components/TreePanel/index.js.map +1 -0
- package/dist/components/TreePanel/renderTreeCanvas.d.ts +36 -0
- package/dist/components/TreePanel/renderTreeCanvas.js +153 -0
- package/dist/components/TreePanel/renderTreeCanvas.js.map +1 -0
- package/dist/components/dialogs/{AboutDlg.js → AboutDialog.js} +1 -1
- package/dist/components/dialogs/AboutDialog.js.map +1 -0
- package/dist/components/dialogs/{AddTrackDlg.js → AddTrackDialog.js} +1 -1
- package/dist/components/dialogs/AddTrackDialog.js.map +1 -0
- package/dist/components/dialogs/{AnnotationDlg.js → AnnotationDialog.js} +1 -1
- package/dist/components/dialogs/AnnotationDialog.js.map +1 -0
- package/dist/components/dialogs/{MetadataDlg.js → MetadataDialog.js} +1 -1
- package/dist/components/dialogs/MetadataDialog.js.map +1 -0
- package/dist/components/dialogs/SettingsDialog.js +54 -0
- package/dist/components/dialogs/SettingsDialog.js.map +1 -0
- package/dist/components/dialogs/{TrackInfoDlg.js → TrackInfoDialog.js} +1 -1
- package/dist/components/dialogs/TrackInfoDialog.js.map +1 -0
- package/dist/components/dialogs/{TracklistDlg.js → TracklistDialog.js} +1 -1
- package/dist/components/dialogs/TracklistDialog.js.map +1 -0
- package/dist/components/util.js.map +1 -1
- package/dist/layout.js.map +1 -1
- package/dist/model.d.ts +80 -47
- package/dist/model.js +130 -70
- package/dist/model.js.map +1 -1
- package/dist/parseNewick.js.map +1 -1
- package/dist/parsers/StockholmMSA.js.map +1 -1
- package/dist/util.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +6 -4
- package/src/DialogQueue.ts +47 -0
- package/src/components/BoxTrackBlock.tsx +3 -1
- package/src/components/Header.tsx +9 -10
- package/src/components/ImportForm/ImportFormExamples.tsx +133 -0
- package/src/components/ImportForm/index.tsx +63 -0
- package/src/components/ImportForm/util.ts +20 -0
- package/src/components/MSAPanel/MSABlock.tsx +81 -0
- package/src/components/{MSACanvas.tsx → MSAPanel/MSACanvas.tsx} +17 -5
- package/src/components/MSAPanel/MSAMouseoverCanvas.tsx +92 -0
- package/src/components/MSAPanel/index.tsx +13 -0
- package/src/components/MSAPanel/renderMSABlock.ts +160 -0
- package/src/components/MSAView.tsx +36 -56
- package/src/components/Minimap.tsx +102 -0
- package/src/components/OverviewRubberband.tsx +283 -0
- package/src/components/Rubberband.tsx +14 -1
- package/src/components/TextTrack.tsx +3 -1
- package/src/components/Track.tsx +5 -5
- package/src/components/{TreeBranchMenu.tsx → TreePanel/TreeBranchMenu.tsx} +1 -1
- package/src/components/{TreeCanvas.tsx → TreePanel/TreeCanvas.tsx} +2 -3
- package/src/components/TreePanel/TreeCanvasBlock.tsx +190 -0
- package/src/components/{TreeMenu.tsx → TreePanel/TreeMenu.tsx} +10 -6
- package/src/components/{TreeRuler.tsx → TreePanel/TreeRuler.tsx} +3 -3
- package/src/components/{dialogs → TreePanel/dialogs}/TreeNodeInfoDlg.tsx +1 -1
- package/src/components/TreePanel/index.tsx +16 -0
- package/src/components/TreePanel/renderTreeCanvas.ts +245 -0
- package/src/components/dialogs/{SettingsDlg.tsx → SettingsDialog.tsx} +72 -47
- package/src/model.ts +157 -79
- package/src/version.ts +1 -1
- package/dist/components/ImportForm.js +0 -84
- package/dist/components/ImportForm.js.map +0 -1
- package/dist/components/MSABlock.js +0 -103
- package/dist/components/MSABlock.js.map +0 -1
- package/dist/components/MSACanvas.js.map +0 -1
- package/dist/components/MSAMouseoverCanvas.js +0 -61
- package/dist/components/MSAMouseoverCanvas.js.map +0 -1
- package/dist/components/Ruler.d.ts +0 -6
- package/dist/components/Ruler.js +0 -52
- package/dist/components/Ruler.js.map +0 -1
- package/dist/components/TreeBranchMenu.js.map +0 -1
- package/dist/components/TreeCanvas.js.map +0 -1
- package/dist/components/TreeCanvasBlock.js +0 -255
- package/dist/components/TreeCanvasBlock.js.map +0 -1
- package/dist/components/TreeMenu.js.map +0 -1
- package/dist/components/TreeRuler.js +0 -8
- package/dist/components/TreeRuler.js.map +0 -1
- package/dist/components/data/seq2.js.map +0 -1
- package/dist/components/dialogs/AboutDlg.js.map +0 -1
- package/dist/components/dialogs/AddTrackDlg.js.map +0 -1
- package/dist/components/dialogs/AnnotationDlg.js.map +0 -1
- package/dist/components/dialogs/MetadataDlg.js.map +0 -1
- package/dist/components/dialogs/SettingsDlg.js +0 -48
- package/dist/components/dialogs/SettingsDlg.js.map +0 -1
- package/dist/components/dialogs/TrackInfoDlg.js.map +0 -1
- package/dist/components/dialogs/TracklistDlg.js.map +0 -1
- package/dist/components/dialogs/TreeNodeInfoDlg.js.map +0 -1
- package/src/components/ImportForm.tsx +0 -192
- package/src/components/MSABlock.tsx +0 -164
- package/src/components/MSAMouseoverCanvas.tsx +0 -99
- package/src/components/Ruler.tsx +0 -123
- package/src/components/TreeCanvasBlock.tsx +0 -363
- /package/dist/components/{data → ImportForm/data}/seq2.d.ts +0 -0
- /package/dist/components/{data → ImportForm/data}/seq2.js +0 -0
- /package/dist/components/{TreeBranchMenu.js → TreePanel/TreeBranchMenu.js} +0 -0
- /package/dist/components/{dialogs → TreePanel/dialogs}/TreeNodeInfoDlg.js +0 -0
- /package/dist/components/dialogs/{AboutDlg.d.ts → AboutDialog.d.ts} +0 -0
- /package/dist/components/dialogs/{AddTrackDlg.d.ts → AddTrackDialog.d.ts} +0 -0
- /package/dist/components/dialogs/{AnnotationDlg.d.ts → AnnotationDialog.d.ts} +0 -0
- /package/dist/components/dialogs/{MetadataDlg.d.ts → MetadataDialog.d.ts} +0 -0
- /package/dist/components/dialogs/{SettingsDlg.d.ts → SettingsDialog.d.ts} +0 -0
- /package/dist/components/dialogs/{TrackInfoDlg.d.ts → TrackInfoDialog.d.ts} +0 -0
- /package/dist/components/dialogs/{TracklistDlg.d.ts → TracklistDialog.d.ts} +0 -0
- /package/src/components/{data → ImportForm/data}/seq2.ts +0 -0
- /package/src/components/dialogs/{AboutDlg.tsx → AboutDialog.tsx} +0 -0
- /package/src/components/dialogs/{AddTrackDlg.tsx → AddTrackDialog.tsx} +0 -0
- /package/src/components/dialogs/{AnnotationDlg.tsx → AnnotationDialog.tsx} +0 -0
- /package/src/components/dialogs/{MetadataDlg.tsx → MetadataDialog.tsx} +0 -0
- /package/src/components/dialogs/{TrackInfoDlg.tsx → TrackInfoDialog.tsx} +0 -0
- /package/src/components/dialogs/{TracklistDlg.tsx → TracklistDialog.tsx} +0 -0
package/src/model.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
+
import { autorun } from 'mobx'
|
|
2
3
|
import { Instance, cast, types, addDisposer, SnapshotIn } from 'mobx-state-tree'
|
|
3
4
|
import { hierarchy, cluster, HierarchyNode } from 'd3-hierarchy'
|
|
4
5
|
import { ascending } from 'd3-array'
|
|
5
6
|
import { FileLocation, ElementId } from '@jbrowse/core/util/types/mst'
|
|
6
7
|
import { FileLocation as FileLocationType } from '@jbrowse/core/util/types'
|
|
7
8
|
import { openLocation } from '@jbrowse/core/util/io'
|
|
8
|
-
import {
|
|
9
|
+
import { measureText, sum } from '@jbrowse/core/util'
|
|
9
10
|
import BaseViewModel from '@jbrowse/core/pluggableElementTypes/models/BaseViewModel'
|
|
10
11
|
import Stockholm from 'stockholm-js'
|
|
11
12
|
|
|
@@ -35,6 +36,7 @@ import parseNewick from './parseNewick'
|
|
|
35
36
|
import colorSchemes from './colorSchemes'
|
|
36
37
|
import { UniprotTrack } from './UniprotTrack'
|
|
37
38
|
import { StructureModel } from './StructureModel'
|
|
39
|
+
import { DialogQueueSessionMixin } from './DialogQueue'
|
|
38
40
|
|
|
39
41
|
interface BasicTrackModel {
|
|
40
42
|
id: string
|
|
@@ -74,9 +76,16 @@ type StructureSnap = SnapshotIn<typeof StructureModel>
|
|
|
74
76
|
*/
|
|
75
77
|
function x() {} // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
76
78
|
|
|
79
|
+
export type DialogComponentType =
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
+
| React.LazyExoticComponent<React.FC<any>>
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
83
|
+
| React.FC<any>
|
|
84
|
+
|
|
77
85
|
const model = types
|
|
78
86
|
.compose(
|
|
79
87
|
BaseViewModel,
|
|
88
|
+
DialogQueueSessionMixin(),
|
|
80
89
|
types.model('MsaView', {
|
|
81
90
|
/**
|
|
82
91
|
* #property
|
|
@@ -98,6 +107,10 @@ const model = types
|
|
|
98
107
|
* #property
|
|
99
108
|
*/
|
|
100
109
|
treeWidth: types.optional(types.number, 300),
|
|
110
|
+
/**
|
|
111
|
+
* #getter
|
|
112
|
+
*/
|
|
113
|
+
treeWidthMatchesArea: true,
|
|
101
114
|
/**
|
|
102
115
|
* #property
|
|
103
116
|
*/
|
|
@@ -230,29 +243,33 @@ const model = types
|
|
|
230
243
|
}),
|
|
231
244
|
)
|
|
232
245
|
.volatile(() => ({
|
|
233
|
-
|
|
246
|
+
/**
|
|
247
|
+
* #volatile
|
|
248
|
+
* a dummy variable that is incremented when ref changes so autorun for
|
|
249
|
+
* drawing canvas commands will run
|
|
250
|
+
*/
|
|
251
|
+
nref: 0,
|
|
252
|
+
/**
|
|
253
|
+
* #volatile
|
|
254
|
+
*/
|
|
255
|
+
minimapHeight: 56,
|
|
256
|
+
/**
|
|
257
|
+
* #volatile
|
|
258
|
+
*/
|
|
234
259
|
error: undefined as unknown,
|
|
260
|
+
/**
|
|
261
|
+
* #volatile
|
|
262
|
+
*/
|
|
235
263
|
margin: {
|
|
236
264
|
left: 20,
|
|
237
265
|
top: 20,
|
|
238
266
|
},
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
DialogProps: undefined as any,
|
|
243
|
-
|
|
244
|
-
// annotations
|
|
267
|
+
/**
|
|
268
|
+
* #volatile
|
|
269
|
+
*/
|
|
245
270
|
annotPos: undefined as { left: number; right: number } | undefined,
|
|
246
271
|
}))
|
|
247
272
|
.actions(self => ({
|
|
248
|
-
/**
|
|
249
|
-
* #action
|
|
250
|
-
*/
|
|
251
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
252
|
-
setDialogComponent(dlg?: React.FC<any>, props?: any) {
|
|
253
|
-
self.DialogComponent = dlg
|
|
254
|
-
self.DialogProps = props
|
|
255
|
-
},
|
|
256
273
|
/**
|
|
257
274
|
* #action
|
|
258
275
|
*/
|
|
@@ -328,15 +345,16 @@ const model = types
|
|
|
328
345
|
/**
|
|
329
346
|
* #action
|
|
330
347
|
*/
|
|
331
|
-
|
|
332
|
-
self.
|
|
348
|
+
setTreeWidthMatchesArea(arg: boolean) {
|
|
349
|
+
self.treeWidthMatchesArea = arg
|
|
333
350
|
},
|
|
334
351
|
/**
|
|
335
352
|
* #action
|
|
336
353
|
*/
|
|
337
|
-
|
|
338
|
-
self.
|
|
354
|
+
setScrollY(n: number) {
|
|
355
|
+
self.scrollY = n
|
|
339
356
|
},
|
|
357
|
+
|
|
340
358
|
/**
|
|
341
359
|
* #action
|
|
342
360
|
*/
|
|
@@ -358,14 +376,14 @@ const model = types
|
|
|
358
376
|
/**
|
|
359
377
|
* #action
|
|
360
378
|
*/
|
|
361
|
-
|
|
362
|
-
self.labelsAlignRight =
|
|
379
|
+
setLabelsAlignRight(arg: boolean) {
|
|
380
|
+
self.labelsAlignRight = arg
|
|
363
381
|
},
|
|
364
382
|
/**
|
|
365
383
|
* #action
|
|
366
384
|
*/
|
|
367
|
-
|
|
368
|
-
self.drawTree =
|
|
385
|
+
setDrawTree(arg: boolean) {
|
|
386
|
+
self.drawTree = arg
|
|
369
387
|
},
|
|
370
388
|
/**
|
|
371
389
|
* #action
|
|
@@ -386,20 +404,20 @@ const model = types
|
|
|
386
404
|
/**
|
|
387
405
|
* #action
|
|
388
406
|
*/
|
|
389
|
-
|
|
390
|
-
self.showBranchLen =
|
|
407
|
+
setShowBranchLen(arg: boolean) {
|
|
408
|
+
self.showBranchLen = arg
|
|
391
409
|
},
|
|
392
410
|
/**
|
|
393
411
|
* #action
|
|
394
412
|
*/
|
|
395
|
-
|
|
396
|
-
self.bgColor =
|
|
413
|
+
setBgColor(arg: boolean) {
|
|
414
|
+
self.bgColor = arg
|
|
397
415
|
},
|
|
398
416
|
/**
|
|
399
417
|
* #action
|
|
400
418
|
*/
|
|
401
|
-
|
|
402
|
-
self.drawNodeBubbles =
|
|
419
|
+
setDrawNodeBubbles(arg: boolean) {
|
|
420
|
+
self.drawNodeBubbles = arg
|
|
403
421
|
},
|
|
404
422
|
/**
|
|
405
423
|
* #action
|
|
@@ -442,54 +460,8 @@ const model = types
|
|
|
442
460
|
setTreeMetadata(result: string) {
|
|
443
461
|
self.data.setTreeMetadata(result)
|
|
444
462
|
},
|
|
445
|
-
|
|
446
|
-
afterCreate() {
|
|
447
|
-
addDisposer(
|
|
448
|
-
self,
|
|
449
|
-
autorun(async () => {
|
|
450
|
-
const { treeFilehandle } = self
|
|
451
|
-
if (treeFilehandle) {
|
|
452
|
-
try {
|
|
453
|
-
this.setTree(await openLocation(treeFilehandle).readFile('utf8'))
|
|
454
|
-
} catch (e) {
|
|
455
|
-
console.error(e)
|
|
456
|
-
this.setError(e)
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
}),
|
|
460
|
-
)
|
|
461
|
-
addDisposer(
|
|
462
|
-
self,
|
|
463
|
-
autorun(async () => {
|
|
464
|
-
const { treeMetadataFilehandle } = self
|
|
465
|
-
if (treeMetadataFilehandle) {
|
|
466
|
-
try {
|
|
467
|
-
this.setTreeMetadata(
|
|
468
|
-
await openLocation(treeMetadataFilehandle).readFile('utf8'),
|
|
469
|
-
)
|
|
470
|
-
} catch (e) {
|
|
471
|
-
console.error(e)
|
|
472
|
-
this.setError(e)
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
}),
|
|
476
|
-
)
|
|
477
|
-
addDisposer(
|
|
478
|
-
self,
|
|
479
|
-
autorun(async () => {
|
|
480
|
-
const { msaFilehandle } = self
|
|
481
|
-
if (msaFilehandle) {
|
|
482
|
-
try {
|
|
483
|
-
this.setMSA(await openLocation(msaFilehandle).readFile('utf8'))
|
|
484
|
-
} catch (e) {
|
|
485
|
-
console.error(e)
|
|
486
|
-
this.setError(e)
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
}),
|
|
490
|
-
)
|
|
491
|
-
},
|
|
492
463
|
}))
|
|
464
|
+
|
|
493
465
|
.views(self => {
|
|
494
466
|
let oldBlocksX: number[] = []
|
|
495
467
|
let oldBlocksY: number[] = []
|
|
@@ -573,6 +545,7 @@ const model = types
|
|
|
573
545
|
get colorScheme() {
|
|
574
546
|
return colorSchemes[self.colorSchemeName]
|
|
575
547
|
},
|
|
548
|
+
|
|
576
549
|
/**
|
|
577
550
|
* #getter
|
|
578
551
|
*/
|
|
@@ -639,7 +612,7 @@ const model = types
|
|
|
639
612
|
* #getter
|
|
640
613
|
*/
|
|
641
614
|
get numColumns() {
|
|
642
|
-
return (
|
|
615
|
+
return (this.MSA?.getWidth() || 0) - this.blanks.length
|
|
643
616
|
},
|
|
644
617
|
/**
|
|
645
618
|
* #getter
|
|
@@ -772,6 +745,12 @@ const model = types
|
|
|
772
745
|
get columns2d() {
|
|
773
746
|
return this.rows.map(r => r[1]).map(str => skipBlanks(this.blanks, str))
|
|
774
747
|
},
|
|
748
|
+
/**
|
|
749
|
+
* #getter
|
|
750
|
+
*/
|
|
751
|
+
get fontSize() {
|
|
752
|
+
return Math.max(8, self.rowHeight - 8)
|
|
753
|
+
},
|
|
775
754
|
/**
|
|
776
755
|
* #getter
|
|
777
756
|
*/
|
|
@@ -842,11 +821,21 @@ const model = types
|
|
|
842
821
|
*/
|
|
843
822
|
doScrollX(deltaX: number) {
|
|
844
823
|
self.scrollX = clamp(
|
|
845
|
-
-self.numColumns + (self.msaAreaWidth - 100),
|
|
824
|
+
-(self.numColumns * self.colWidth) + (self.msaAreaWidth - 100),
|
|
846
825
|
self.scrollX + deltaX,
|
|
847
826
|
0,
|
|
848
827
|
)
|
|
849
828
|
},
|
|
829
|
+
/**
|
|
830
|
+
* #action
|
|
831
|
+
*/
|
|
832
|
+
setScrollX(n: number) {
|
|
833
|
+
self.scrollX = clamp(
|
|
834
|
+
-(self.numColumns * self.colWidth) + (self.msaAreaWidth - 100),
|
|
835
|
+
n,
|
|
836
|
+
0,
|
|
837
|
+
)
|
|
838
|
+
},
|
|
850
839
|
/**
|
|
851
840
|
* #action
|
|
852
841
|
*/
|
|
@@ -879,6 +868,23 @@ const model = types
|
|
|
879
868
|
},
|
|
880
869
|
}))
|
|
881
870
|
.views(self => ({
|
|
871
|
+
/**
|
|
872
|
+
* #getter
|
|
873
|
+
*/
|
|
874
|
+
get labelsWidth() {
|
|
875
|
+
let x = 0
|
|
876
|
+
const { rowHeight, hierarchy, treeMetadata, fontSize } = self
|
|
877
|
+
if (rowHeight > 5) {
|
|
878
|
+
for (const node of hierarchy.leaves()) {
|
|
879
|
+
const {
|
|
880
|
+
data: { name },
|
|
881
|
+
} = node
|
|
882
|
+
const displayName = treeMetadata[name]?.genome || name
|
|
883
|
+
x = Math.max(measureText(displayName, fontSize), x)
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
return x
|
|
887
|
+
},
|
|
882
888
|
/**
|
|
883
889
|
* #getter
|
|
884
890
|
*/
|
|
@@ -1093,6 +1099,78 @@ const model = types
|
|
|
1093
1099
|
clearAnnotationClickBoundaries() {
|
|
1094
1100
|
self.annotPos = undefined
|
|
1095
1101
|
},
|
|
1102
|
+
/**
|
|
1103
|
+
* #action
|
|
1104
|
+
*/
|
|
1105
|
+
incrementRef() {
|
|
1106
|
+
self.nref++
|
|
1107
|
+
},
|
|
1108
|
+
}))
|
|
1109
|
+
.views(self => ({
|
|
1110
|
+
/**
|
|
1111
|
+
* #getter
|
|
1112
|
+
*/
|
|
1113
|
+
get totalTrackAreaHeight() {
|
|
1114
|
+
return sum(self.turnedOnTracks.map(r => r.model.height))
|
|
1115
|
+
},
|
|
1116
|
+
}))
|
|
1117
|
+
.actions(self => ({
|
|
1118
|
+
afterCreate() {
|
|
1119
|
+
addDisposer(
|
|
1120
|
+
self,
|
|
1121
|
+
autorun(async () => {
|
|
1122
|
+
const { treeFilehandle } = self
|
|
1123
|
+
if (treeFilehandle) {
|
|
1124
|
+
try {
|
|
1125
|
+
self.setTree(await openLocation(treeFilehandle).readFile('utf8'))
|
|
1126
|
+
} catch (e) {
|
|
1127
|
+
console.error(e)
|
|
1128
|
+
self.setError(e)
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
}),
|
|
1132
|
+
)
|
|
1133
|
+
addDisposer(
|
|
1134
|
+
self,
|
|
1135
|
+
autorun(async () => {
|
|
1136
|
+
const { treeMetadataFilehandle } = self
|
|
1137
|
+
if (treeMetadataFilehandle) {
|
|
1138
|
+
try {
|
|
1139
|
+
self.setTreeMetadata(
|
|
1140
|
+
await openLocation(treeMetadataFilehandle).readFile('utf8'),
|
|
1141
|
+
)
|
|
1142
|
+
} catch (e) {
|
|
1143
|
+
console.error(e)
|
|
1144
|
+
self.setError(e)
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
}),
|
|
1148
|
+
)
|
|
1149
|
+
addDisposer(
|
|
1150
|
+
self,
|
|
1151
|
+
autorun(async () => {
|
|
1152
|
+
const { msaFilehandle } = self
|
|
1153
|
+
if (msaFilehandle) {
|
|
1154
|
+
try {
|
|
1155
|
+
self.setMSA(await openLocation(msaFilehandle).readFile('utf8'))
|
|
1156
|
+
} catch (e) {
|
|
1157
|
+
console.error(e)
|
|
1158
|
+
self.setError(e)
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
}),
|
|
1162
|
+
)
|
|
1163
|
+
addDisposer(
|
|
1164
|
+
self,
|
|
1165
|
+
autorun(async () => {
|
|
1166
|
+
if (self.treeWidthMatchesArea) {
|
|
1167
|
+
self.setTreeWidth(
|
|
1168
|
+
Math.max(50, self.treeAreaWidth - self.labelsWidth - 20),
|
|
1169
|
+
)
|
|
1170
|
+
}
|
|
1171
|
+
}),
|
|
1172
|
+
)
|
|
1173
|
+
},
|
|
1096
1174
|
}))
|
|
1097
1175
|
.postProcessSnapshot(result => {
|
|
1098
1176
|
const snap = result as Omit<typeof result, symbol>
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '
|
|
1
|
+
export const version = '3.0.0'
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
2
|
-
import { Button, Container, Grid, Typography, Link } from '@mui/material';
|
|
3
|
-
import { observer } from 'mobx-react';
|
|
4
|
-
import { FileSelector } from '@jbrowse/core/ui';
|
|
5
|
-
import { smallTree, smallMSA, smallMSAOnly } from './data/seq2';
|
|
6
|
-
async function load(model, msaFile, treeFile) {
|
|
7
|
-
model.setError(undefined);
|
|
8
|
-
try {
|
|
9
|
-
if (msaFile) {
|
|
10
|
-
await model.setMSAFilehandle(msaFile);
|
|
11
|
-
}
|
|
12
|
-
if (treeFile) {
|
|
13
|
-
await model.setTreeFilehandle(treeFile);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
catch (e) {
|
|
17
|
-
model.setError(e);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
const ListItem = ({ onClick, model, children, }) => (React.createElement("li", null,
|
|
21
|
-
React.createElement(Link, { onClick: event => {
|
|
22
|
-
model.setError(undefined);
|
|
23
|
-
event.preventDefault();
|
|
24
|
-
onClick();
|
|
25
|
-
}, href: "#" },
|
|
26
|
-
React.createElement(Typography, { display: "inline" }, children))));
|
|
27
|
-
export default observer(({ model }) => {
|
|
28
|
-
const [msaFile, setMsaFile] = useState();
|
|
29
|
-
const [treeFile, setTreeFile] = useState();
|
|
30
|
-
const { error } = model;
|
|
31
|
-
return (React.createElement(Container, null,
|
|
32
|
-
React.createElement("div", { style: { width: '50%' } },
|
|
33
|
-
error ? (React.createElement("div", { style: { padding: 20 } },
|
|
34
|
-
React.createElement(Typography, { color: "error" },
|
|
35
|
-
"Error: ",
|
|
36
|
-
`${error}`))) : null,
|
|
37
|
-
React.createElement(Typography, null, "Open an MSA file (stockholm or clustal format) and/or a tree file (newick format)."),
|
|
38
|
-
React.createElement(Typography, { color: "error" }, "Note: you can open up just an MSA or just a tree, both are not required. Some MSA files e.g. stockholm format have an embedded tree also and this is fine, and opening a separate tree file is not required.")),
|
|
39
|
-
React.createElement(Grid, { container: true, spacing: 10, justifyContent: "center", alignItems: "center" },
|
|
40
|
-
React.createElement(Grid, { item: true },
|
|
41
|
-
React.createElement(Typography, null, "MSA file or URL"),
|
|
42
|
-
React.createElement(FileSelector, { location: msaFile, setLocation: setMsaFile }),
|
|
43
|
-
React.createElement(Typography, null, "Tree file or URL"),
|
|
44
|
-
React.createElement(FileSelector, { location: treeFile, setLocation: setTreeFile })),
|
|
45
|
-
React.createElement(Grid, { item: true },
|
|
46
|
-
React.createElement(Button, { onClick: () => load(model, msaFile, treeFile), variant: "contained", color: "primary", disabled: !msaFile && !treeFile }, "Open")),
|
|
47
|
-
React.createElement(Grid, { item: true },
|
|
48
|
-
React.createElement(Typography, null, "Examples"),
|
|
49
|
-
React.createElement("ul", null,
|
|
50
|
-
React.createElement(ListItem, { model: model, onClick: () => load(model, undefined, {
|
|
51
|
-
uri: 'https://jbrowse.org/genomes/newick_trees/sarscov2phylo.pub.ft.nh',
|
|
52
|
-
locationType: 'UriLocation',
|
|
53
|
-
}) }, "230k COVID-19 samples (tree only)"),
|
|
54
|
-
React.createElement(ListItem, { model: model, onClick: () => {
|
|
55
|
-
model.setData({ msa: smallMSA, tree: smallTree });
|
|
56
|
-
} }, "Small protein MSA+tree"),
|
|
57
|
-
React.createElement(ListItem, { model: model, onClick: () => {
|
|
58
|
-
model.setData({ msa: smallMSAOnly });
|
|
59
|
-
} }, "Small MSA only"),
|
|
60
|
-
React.createElement(ListItem, { model: model, onClick: () => load(model, {
|
|
61
|
-
uri: 'https://ihh.github.io/abrowse/build/pfam-cov2.stock',
|
|
62
|
-
locationType: 'UriLocation',
|
|
63
|
-
}) }, "PFAM SARS-CoV2 multi-stockholm"),
|
|
64
|
-
React.createElement(ListItem, { model: model, onClick: () => load(model, {
|
|
65
|
-
uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/Lysine.stock',
|
|
66
|
-
locationType: 'UriLocation',
|
|
67
|
-
}) }, "Lysine stockholm file"),
|
|
68
|
-
React.createElement(ListItem, { model: model, onClick: () => load(model, {
|
|
69
|
-
uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/PF01601_full.txt',
|
|
70
|
-
locationType: 'UriLocation',
|
|
71
|
-
}) }, "PF01601 stockholm file (SARS-CoV2 spike protein)"),
|
|
72
|
-
React.createElement(ListItem, { model: model, onClick: () => load(model, {
|
|
73
|
-
uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/europe_covid.fa',
|
|
74
|
-
locationType: 'UriLocation',
|
|
75
|
-
}) }, "Europe COVID full genomes (LR883044.1 and 199 other sequences)"),
|
|
76
|
-
React.createElement(ListItem, { model: model, onClick: () => load(model, {
|
|
77
|
-
uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/rhv_test-only.aligned_with_mafft_auto.fa',
|
|
78
|
-
locationType: 'UriLocation',
|
|
79
|
-
}, {
|
|
80
|
-
uri: 'https://jbrowse.org/genomes/multiple_sequence_alignments/rhv_test-only.aligned_with_mafft_auto.nh',
|
|
81
|
-
locationType: 'UriLocation',
|
|
82
|
-
}) }, "MAFFT+VeryFastTree(17.9k samples)"))))));
|
|
83
|
-
});
|
|
84
|
-
//# sourceMappingURL=ImportForm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ImportForm.js","sourceRoot":"","sources":["../../src/components/ImportForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import React, { useEffect, useRef, useMemo } from 'react';
|
|
2
|
-
import { useTheme } from '@mui/material';
|
|
3
|
-
import { observer } from 'mobx-react';
|
|
4
|
-
import { colorContrast } from '../util';
|
|
5
|
-
import { getClustalXColor, getPercentIdentityColor } from '../colorSchemes';
|
|
6
|
-
const MSABlock = observer(function ({ model, offsetX, offsetY, }) {
|
|
7
|
-
const { MSA, colWidth, bgColor, columns, rowHeight, scrollY, scrollX, hierarchy, colorScheme, colorSchemeName, blockSize, highResScaleFactor, colStats, } = model;
|
|
8
|
-
const theme = useTheme();
|
|
9
|
-
const contrastScheme = useMemo(() => colorContrast(colorScheme, theme), [colorScheme, theme]);
|
|
10
|
-
const ref = useRef(null);
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
var _a, _b;
|
|
13
|
-
if (!ref.current) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
const ctx = ref.current.getContext('2d');
|
|
17
|
-
if (!ctx) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
ctx.resetTransform();
|
|
21
|
-
ctx.scale(highResScaleFactor, highResScaleFactor);
|
|
22
|
-
ctx.clearRect(0, 0, blockSize, blockSize);
|
|
23
|
-
ctx.translate(-offsetX, rowHeight / 2 - offsetY);
|
|
24
|
-
ctx.textAlign = 'center';
|
|
25
|
-
ctx.font = ctx.font.replace(/\d+px/, `${Math.max(8, rowHeight - 8)}px`);
|
|
26
|
-
const leaves = hierarchy.leaves();
|
|
27
|
-
const b = blockSize;
|
|
28
|
-
// slice vertical rows, e.g. tree leaves, avoid negative slice
|
|
29
|
-
const yStart = Math.max(0, Math.floor((offsetY - rowHeight) / rowHeight));
|
|
30
|
-
const yEnd = Math.max(0, Math.ceil((offsetY + b + rowHeight) / rowHeight));
|
|
31
|
-
// slice horizontal visible letters, avoid negative slice
|
|
32
|
-
const xStart = Math.max(0, Math.floor(offsetX / colWidth));
|
|
33
|
-
const xEnd = Math.max(0, Math.ceil((offsetX + b) / colWidth));
|
|
34
|
-
const visibleLeaves = leaves.slice(yStart, yEnd);
|
|
35
|
-
for (const node of visibleLeaves) {
|
|
36
|
-
const {
|
|
37
|
-
// @ts-expect-error
|
|
38
|
-
x: y, data: { name }, } = node;
|
|
39
|
-
const str = (_a = columns[name]) === null || _a === void 0 ? void 0 : _a.slice(xStart, xEnd);
|
|
40
|
-
for (let i = 0; i < (str === null || str === void 0 ? void 0 : str.length); i++) {
|
|
41
|
-
const letter = str[i];
|
|
42
|
-
const color = colorSchemeName === 'clustalx_protein_dynamic'
|
|
43
|
-
? getClustalXColor(colStats[xStart + i], model, name, xStart + i)
|
|
44
|
-
: colorSchemeName === 'percent_identity_dynamic'
|
|
45
|
-
? getPercentIdentityColor(colStats[xStart + i], model, name, xStart + i)
|
|
46
|
-
: colorScheme[letter.toUpperCase()];
|
|
47
|
-
if (bgColor) {
|
|
48
|
-
const x = i * colWidth + offsetX - (offsetX % colWidth);
|
|
49
|
-
ctx.fillStyle = color || 'white';
|
|
50
|
-
ctx.fillRect(x, y - rowHeight, colWidth, rowHeight);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (rowHeight >= 5 && colWidth > rowHeight / 2) {
|
|
55
|
-
for (const node of visibleLeaves) {
|
|
56
|
-
const {
|
|
57
|
-
// @ts-expect-error
|
|
58
|
-
x: y, data: { name }, } = node;
|
|
59
|
-
const str = (_b = columns[name]) === null || _b === void 0 ? void 0 : _b.slice(xStart, xEnd);
|
|
60
|
-
for (let i = 0; i < (str === null || str === void 0 ? void 0 : str.length); i++) {
|
|
61
|
-
const letter = str[i];
|
|
62
|
-
const color = colorScheme[letter.toUpperCase()];
|
|
63
|
-
const contrast = contrastScheme[letter.toUpperCase()] || 'black';
|
|
64
|
-
const x = i * colWidth + offsetX - (offsetX % colWidth);
|
|
65
|
-
// note: -rowHeight/4 matches +rowHeight/4 in tree
|
|
66
|
-
ctx.fillStyle = bgColor ? contrast : color || 'black';
|
|
67
|
-
ctx.fillText(letter, x + colWidth / 2, y - rowHeight / 4);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
72
|
-
}, [
|
|
73
|
-
MSA,
|
|
74
|
-
highResScaleFactor,
|
|
75
|
-
columns,
|
|
76
|
-
colorScheme,
|
|
77
|
-
contrastScheme,
|
|
78
|
-
bgColor,
|
|
79
|
-
rowHeight,
|
|
80
|
-
colWidth,
|
|
81
|
-
hierarchy,
|
|
82
|
-
offsetX,
|
|
83
|
-
offsetY,
|
|
84
|
-
blockSize,
|
|
85
|
-
]);
|
|
86
|
-
return (React.createElement("canvas", { ref: ref, onMouseMove: event => {
|
|
87
|
-
if (!ref.current) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const { left, top } = ref.current.getBoundingClientRect();
|
|
91
|
-
const mouseX = event.clientX - left + offsetX;
|
|
92
|
-
const mouseY = event.clientY - top + offsetY;
|
|
93
|
-
model.setMousePos(Math.floor(mouseX / colWidth) + 1, Math.floor(mouseY / rowHeight));
|
|
94
|
-
}, onMouseLeave: () => model.setMousePos(), width: blockSize * highResScaleFactor, height: blockSize * highResScaleFactor, style: {
|
|
95
|
-
position: 'absolute',
|
|
96
|
-
top: scrollY + offsetY,
|
|
97
|
-
left: scrollX + offsetX,
|
|
98
|
-
width: blockSize,
|
|
99
|
-
height: blockSize,
|
|
100
|
-
} }));
|
|
101
|
-
});
|
|
102
|
-
export default MSABlock;
|
|
103
|
-
//# sourceMappingURL=MSABlock.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MSABlock.js","sourceRoot":"","sources":["../../src/components/MSABlock.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MSACanvas.js","sourceRoot":"","sources":["../../src/components/MSACanvas.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import React, { useEffect, useRef } from 'react';
|
|
2
|
-
import { observer } from 'mobx-react';
|
|
3
|
-
import { sum } from '@jbrowse/core/util';
|
|
4
|
-
const MSAMouseoverCanvas = observer(function ({ model, }) {
|
|
5
|
-
const ref = useRef(null);
|
|
6
|
-
const { height, width, treeAreaWidth, resizeHandleWidth, rulerHeight, turnedOnTracks, scrollX, scrollY, mouseCol,
|
|
7
|
-
// @ts-expect-error
|
|
8
|
-
mouseCol2, mouseRow, rowHeight, colWidth, } = model;
|
|
9
|
-
const totalTrackAreaHeight = sum(turnedOnTracks.map(r => r.model.height));
|
|
10
|
-
useEffect(() => {
|
|
11
|
-
if (!ref.current) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
const ctx = ref.current.getContext('2d');
|
|
15
|
-
if (!ctx) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
ctx.resetTransform();
|
|
19
|
-
ctx.clearRect(0, 0, width, height);
|
|
20
|
-
if (mouseCol !== undefined) {
|
|
21
|
-
ctx.fillStyle = 'rgba(0,0,0,0.15)';
|
|
22
|
-
const x = (mouseCol - 1) * colWidth + scrollX + treeAreaWidth + resizeHandleWidth;
|
|
23
|
-
ctx.fillRect(x, 0, colWidth, height);
|
|
24
|
-
}
|
|
25
|
-
if (mouseRow !== undefined) {
|
|
26
|
-
ctx.fillStyle = 'rgba(0,0,0,0.15)';
|
|
27
|
-
const y = mouseRow * rowHeight + scrollY + rulerHeight + totalTrackAreaHeight;
|
|
28
|
-
ctx.fillRect(treeAreaWidth + resizeHandleWidth, y, width, rowHeight);
|
|
29
|
-
}
|
|
30
|
-
if (mouseCol2 !== undefined) {
|
|
31
|
-
ctx.fillStyle = 'rgba(255,255,0,0.2)';
|
|
32
|
-
const x = (mouseCol2 - 1) * colWidth + scrollX + treeAreaWidth + resizeHandleWidth;
|
|
33
|
-
ctx.fillRect(x, 0, colWidth, height);
|
|
34
|
-
}
|
|
35
|
-
}, [
|
|
36
|
-
mouseCol,
|
|
37
|
-
mouseCol2,
|
|
38
|
-
colWidth,
|
|
39
|
-
scrollY,
|
|
40
|
-
totalTrackAreaHeight,
|
|
41
|
-
mouseRow,
|
|
42
|
-
rowHeight,
|
|
43
|
-
rulerHeight,
|
|
44
|
-
scrollX,
|
|
45
|
-
height,
|
|
46
|
-
resizeHandleWidth,
|
|
47
|
-
treeAreaWidth,
|
|
48
|
-
width,
|
|
49
|
-
]);
|
|
50
|
-
return (React.createElement("canvas", { ref: ref, width: width, height: height, style: {
|
|
51
|
-
position: 'absolute',
|
|
52
|
-
top: 0,
|
|
53
|
-
left: 0,
|
|
54
|
-
width,
|
|
55
|
-
height,
|
|
56
|
-
zIndex: 1000,
|
|
57
|
-
pointerEvents: 'none',
|
|
58
|
-
} }));
|
|
59
|
-
});
|
|
60
|
-
export default MSAMouseoverCanvas;
|
|
61
|
-
//# sourceMappingURL=MSAMouseoverCanvas.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MSAMouseoverCanvas.js","sourceRoot":"","sources":["../../src/components/MSAMouseoverCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAExC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,EAC5C,KAAK,GAGN;IACC,MAAM,GAAG,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAA;IAC3C,MAAM,EACJ,MAAM,EACN,KAAK,EACL,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,OAAO,EACP,OAAO,EACP,QAAQ;IACR,mBAAmB;IACnB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,GAAG,KAAK,CAAA;IACT,MAAM,oBAAoB,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IACzE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YAChB,OAAM;SACP;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC,GAAG,EAAE;YACR,OAAM;SACP;QAED,GAAG,CAAC,cAAc,EAAE,CAAA;QACpB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAElC,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,GAAG,CAAC,SAAS,GAAG,kBAAkB,CAAA;YAClC,MAAM,CAAC,GACL,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,GAAG,iBAAiB,CAAA;YAEzE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;SACrC;QAED,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,GAAG,CAAC,SAAS,GAAG,kBAAkB,CAAA;YAClC,MAAM,CAAC,GACL,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,oBAAoB,CAAA;YACrE,GAAG,CAAC,QAAQ,CAAC,aAAa,GAAG,iBAAiB,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;SACrE;QACD,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,GAAG,CAAC,SAAS,GAAG,qBAAqB,CAAA;YACrC,MAAM,CAAC,GACL,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,GAAG,iBAAiB,CAAA;YAE1E,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;SACrC;IACH,CAAC,EAAE;QACD,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,OAAO;QACP,oBAAoB;QACpB,QAAQ;QACR,SAAS;QACT,WAAW;QACX,OAAO;QACP,MAAM;QACN,iBAAiB;QACjB,aAAa;QACb,KAAK;KACN,CAAC,CAAA;IAEF,OAAO,CACL,gCACE,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK;YACL,MAAM;YACN,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,MAAM;SACtB,GACD,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,kBAAkB,CAAA"}
|