@genome-spy/core 0.19.0 → 0.21.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/dist/index.js +46 -119
- package/dist/schema.json +213 -25
- package/package.json +4 -3
- package/src/data/collector.test.js +2 -0
- package/src/data/dataFlow.test.js +2 -0
- package/src/data/flow.test.js +1 -0
- package/src/data/flowNode.test.js +1 -0
- package/src/data/flowOptimizer.test.js +1 -0
- package/src/data/formats/fasta.test.js +1 -0
- package/src/data/sources/inlineSource.test.js +1 -0
- package/src/data/sources/sequenceSource.test.js +1 -0
- package/src/data/transforms/clone.test.js +1 -0
- package/src/data/transforms/coverage.test.js +1 -0
- package/src/data/transforms/filter.test.js +1 -0
- package/src/data/transforms/flattenDelimited.test.js +1 -0
- package/src/data/transforms/flattenSequence.test.js +1 -0
- package/src/data/transforms/formula.test.js +1 -0
- package/src/data/transforms/identifier.test.js +1 -0
- package/src/data/transforms/pileup.test.js +1 -0
- package/src/data/transforms/project.test.js +1 -0
- package/src/data/transforms/regexExtract.test.js +1 -0
- package/src/data/transforms/regexFold.test.js +1 -0
- package/src/data/transforms/sample.test.js +1 -0
- package/src/data/transforms/stack.test.js +1 -0
- package/src/encoder/accessor.test.js +1 -0
- package/src/encoder/encoder.test.js +1 -0
- package/src/genome/genome.test.js +1 -0
- package/src/genome/scaleIndex.js +3 -2
- package/src/genome/scaleIndex.test.js +23 -6
- package/src/genome/scaleLocus.test.js +1 -0
- package/src/genomeSpy.js +16 -11
- package/src/gl/dataToVertices.js +52 -52
- package/src/gl/includes/common.glsl +12 -12
- package/src/gl/includes/picking.fragment.glsl +0 -2
- package/src/gl/includes/picking.vertex.glsl +0 -2
- package/src/gl/includes/scales.glsl +33 -2
- package/src/gl/point.vertex.glsl +0 -2
- package/src/gl/rule.vertex.glsl +1 -1
- package/src/gl/webGLHelper.js +0 -3
- package/src/marks/link.js +32 -39
- package/src/marks/mark.js +176 -106
- package/src/marks/pointMark.js +28 -59
- package/src/marks/rectMark.js +38 -33
- package/src/marks/rule.js +31 -21
- package/src/marks/text.js +18 -14
- package/src/scale/glslScaleGenerator.js +56 -17
- package/src/scale/scale.test.js +1 -0
- package/src/scale/ticks.test.js +1 -0
- package/src/spec/mark.d.ts +0 -3
- package/src/spec/scale.d.ts +0 -9
- package/src/spec/title.d.ts +102 -0
- package/src/spec/view.d.ts +6 -4
- package/src/tooltip/dataTooltipHandler.js +3 -2
- package/src/utils/addBaseUrl.test.js +1 -0
- package/src/utils/binnedIndex.js +147 -0
- package/src/utils/binnedIndex.test.js +73 -0
- package/src/utils/cloner.test.js +1 -0
- package/src/utils/coalesce.test.js +1 -0
- package/src/utils/concatIterables.test.js +1 -0
- package/src/utils/domainArray.test.js +1 -0
- package/src/utils/indexer.test.js +1 -0
- package/src/utils/iterateNestedMaps.test.js +1 -0
- package/src/utils/kWayMerge.test.js +1 -0
- package/src/utils/layout/flexLayout.js +35 -3
- package/src/utils/layout/flexLayout.test.js +15 -0
- package/src/utils/layout/grid.js +95 -0
- package/src/utils/layout/grid.test.js +71 -0
- package/src/utils/layout/padding.js +13 -0
- package/src/utils/layout/rectangle.js +6 -0
- package/src/utils/layout/rectangle.test.js +1 -0
- package/src/utils/mergeObjects.test.js +1 -0
- package/src/utils/numberExtractor.test.js +1 -0
- package/src/utils/propertyCacher.test.js +1 -0
- package/src/utils/propertyCoalescer.test.js +1 -0
- package/src/utils/reservationMap.test.js +1 -0
- package/src/utils/topK.test.js +1 -0
- package/src/utils/variableTools.test.js +1 -0
- package/src/view/axisResolution.test.js +1 -0
- package/src/view/axisView.js +3 -5
- package/src/view/concatView.js +24 -275
- package/src/view/flowBuilder.test.js +1 -0
- package/src/view/gridView.js +774 -0
- package/src/view/implicitRootView.js +14 -0
- package/src/view/layerView.js +15 -1
- package/src/view/renderingContext/deferredViewRenderingContext.js +3 -1
- package/src/view/renderingContext/simpleViewRenderingContext.js +3 -1
- package/src/view/scaleResolution.js +5 -11
- package/src/view/scaleResolution.test.js +1 -0
- package/src/view/title.js +165 -0
- package/src/view/unitView.js +9 -5
- package/src/view/view.js +35 -14
- package/src/view/view.test.js +1 -0
- package/src/view/viewContext.d.ts +6 -1
- package/src/view/viewFactory.test.js +1 -0
- package/src/view/viewUtils.js +1 -93
- package/src/view/zoom.js +89 -0
- package/src/gl/includes/fp64-arithmetic.glsl +0 -187
- package/src/gl/includes/fp64-utils.js +0 -142
- package/src/gl/includes/scales_fp64.glsl +0 -30
- package/src/utils/binnedRangeIndex.js +0 -83
- package/src/view/decoratorView.js +0 -513
package/dist/schema.json
CHANGED
|
@@ -478,6 +478,9 @@
|
|
|
478
478
|
"baseUrl": {
|
|
479
479
|
"type": "string"
|
|
480
480
|
},
|
|
481
|
+
"columns": {
|
|
482
|
+
"type": "number"
|
|
483
|
+
},
|
|
481
484
|
"concat": {
|
|
482
485
|
"items": {
|
|
483
486
|
"anyOf": [
|
|
@@ -575,7 +578,14 @@
|
|
|
575
578
|
"type": "number"
|
|
576
579
|
},
|
|
577
580
|
"title": {
|
|
578
|
-
"
|
|
581
|
+
"anyOf": [
|
|
582
|
+
{
|
|
583
|
+
"type": "string"
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"$ref": "#/definitions/Title"
|
|
587
|
+
}
|
|
588
|
+
]
|
|
579
589
|
},
|
|
580
590
|
"transform": {
|
|
581
591
|
"items": {
|
|
@@ -606,7 +616,8 @@
|
|
|
606
616
|
}
|
|
607
617
|
},
|
|
608
618
|
"required": [
|
|
609
|
-
"concat"
|
|
619
|
+
"concat",
|
|
620
|
+
"columns"
|
|
610
621
|
],
|
|
611
622
|
"type": "object"
|
|
612
623
|
},
|
|
@@ -1335,7 +1346,14 @@
|
|
|
1335
1346
|
"type": "number"
|
|
1336
1347
|
},
|
|
1337
1348
|
"title": {
|
|
1338
|
-
"
|
|
1349
|
+
"anyOf": [
|
|
1350
|
+
{
|
|
1351
|
+
"type": "string"
|
|
1352
|
+
},
|
|
1353
|
+
{
|
|
1354
|
+
"$ref": "#/definitions/Title"
|
|
1355
|
+
}
|
|
1356
|
+
]
|
|
1339
1357
|
},
|
|
1340
1358
|
"transform": {
|
|
1341
1359
|
"items": {
|
|
@@ -1624,7 +1642,14 @@
|
|
|
1624
1642
|
"type": "object"
|
|
1625
1643
|
},
|
|
1626
1644
|
"title": {
|
|
1627
|
-
"
|
|
1645
|
+
"anyOf": [
|
|
1646
|
+
{
|
|
1647
|
+
"type": "string"
|
|
1648
|
+
},
|
|
1649
|
+
{
|
|
1650
|
+
"$ref": "#/definitions/Title"
|
|
1651
|
+
}
|
|
1652
|
+
]
|
|
1628
1653
|
},
|
|
1629
1654
|
"transform": {
|
|
1630
1655
|
"items": {
|
|
@@ -1633,7 +1658,7 @@
|
|
|
1633
1658
|
"type": "array"
|
|
1634
1659
|
},
|
|
1635
1660
|
"view": {
|
|
1636
|
-
"$ref": "#/definitions/
|
|
1661
|
+
"$ref": "#/definitions/ViewBackground"
|
|
1637
1662
|
},
|
|
1638
1663
|
"visible": {
|
|
1639
1664
|
"description": "Visibility of the view. An invisible view is removed from the layout and not rendered.\n\n**Default:** `true`",
|
|
@@ -1791,9 +1816,6 @@
|
|
|
1791
1816
|
"description": "The vertical offset between the text and its anchor point, in pixels. Applied after the rotation by `angle`.",
|
|
1792
1817
|
"type": "number"
|
|
1793
1818
|
},
|
|
1794
|
-
"dynamicData": {
|
|
1795
|
-
"type": "boolean"
|
|
1796
|
-
},
|
|
1797
1819
|
"fill": {
|
|
1798
1820
|
"type": "string"
|
|
1799
1821
|
},
|
|
@@ -2972,7 +2994,14 @@
|
|
|
2972
2994
|
"type": "object"
|
|
2973
2995
|
},
|
|
2974
2996
|
"title": {
|
|
2975
|
-
"
|
|
2997
|
+
"anyOf": [
|
|
2998
|
+
{
|
|
2999
|
+
"type": "string"
|
|
3000
|
+
},
|
|
3001
|
+
{
|
|
3002
|
+
"$ref": "#/definitions/Title"
|
|
3003
|
+
}
|
|
3004
|
+
]
|
|
2976
3005
|
},
|
|
2977
3006
|
"transform": {
|
|
2978
3007
|
"items": {
|
|
@@ -2981,7 +3010,7 @@
|
|
|
2981
3010
|
"type": "array"
|
|
2982
3011
|
},
|
|
2983
3012
|
"view": {
|
|
2984
|
-
"$ref": "#/definitions/
|
|
3013
|
+
"$ref": "#/definitions/ViewBackground"
|
|
2985
3014
|
},
|
|
2986
3015
|
"visible": {
|
|
2987
3016
|
"description": "Visibility of the view. An invisible view is removed from the layout and not rendered.\n\n**Default:** `true`",
|
|
@@ -3137,7 +3166,14 @@
|
|
|
3137
3166
|
"type": "object"
|
|
3138
3167
|
},
|
|
3139
3168
|
"title": {
|
|
3140
|
-
"
|
|
3169
|
+
"anyOf": [
|
|
3170
|
+
{
|
|
3171
|
+
"type": "string"
|
|
3172
|
+
},
|
|
3173
|
+
{
|
|
3174
|
+
"$ref": "#/definitions/Title"
|
|
3175
|
+
}
|
|
3176
|
+
]
|
|
3141
3177
|
},
|
|
3142
3178
|
"transform": {
|
|
3143
3179
|
"items": {
|
|
@@ -3146,7 +3182,7 @@
|
|
|
3146
3182
|
"type": "array"
|
|
3147
3183
|
},
|
|
3148
3184
|
"view": {
|
|
3149
|
-
"$ref": "#/definitions/
|
|
3185
|
+
"$ref": "#/definitions/ViewBackground"
|
|
3150
3186
|
},
|
|
3151
3187
|
"visible": {
|
|
3152
3188
|
"description": "Visibility of the view. An invisible view is removed from the layout and not rendered.\n\n**Default:** `true`",
|
|
@@ -3292,7 +3328,14 @@
|
|
|
3292
3328
|
"type": "boolean"
|
|
3293
3329
|
},
|
|
3294
3330
|
"title": {
|
|
3295
|
-
"
|
|
3331
|
+
"anyOf": [
|
|
3332
|
+
{
|
|
3333
|
+
"type": "string"
|
|
3334
|
+
},
|
|
3335
|
+
{
|
|
3336
|
+
"$ref": "#/definitions/Title"
|
|
3337
|
+
}
|
|
3338
|
+
]
|
|
3296
3339
|
},
|
|
3297
3340
|
"transform": {
|
|
3298
3341
|
"items": {
|
|
@@ -3432,7 +3475,14 @@
|
|
|
3432
3475
|
"type": "number"
|
|
3433
3476
|
},
|
|
3434
3477
|
"title": {
|
|
3435
|
-
"
|
|
3478
|
+
"anyOf": [
|
|
3479
|
+
{
|
|
3480
|
+
"type": "string"
|
|
3481
|
+
},
|
|
3482
|
+
{
|
|
3483
|
+
"$ref": "#/definitions/Title"
|
|
3484
|
+
}
|
|
3485
|
+
]
|
|
3436
3486
|
},
|
|
3437
3487
|
"transform": {
|
|
3438
3488
|
"items": {
|
|
@@ -3597,7 +3647,14 @@
|
|
|
3597
3647
|
"type": "number"
|
|
3598
3648
|
},
|
|
3599
3649
|
"title": {
|
|
3600
|
-
"
|
|
3650
|
+
"anyOf": [
|
|
3651
|
+
{
|
|
3652
|
+
"type": "string"
|
|
3653
|
+
},
|
|
3654
|
+
{
|
|
3655
|
+
"$ref": "#/definitions/Title"
|
|
3656
|
+
}
|
|
3657
|
+
]
|
|
3601
3658
|
},
|
|
3602
3659
|
"transform": {
|
|
3603
3660
|
"items": {
|
|
@@ -3641,6 +3698,9 @@
|
|
|
3641
3698
|
"baseUrl": {
|
|
3642
3699
|
"type": "string"
|
|
3643
3700
|
},
|
|
3701
|
+
"columns": {
|
|
3702
|
+
"type": "number"
|
|
3703
|
+
},
|
|
3644
3704
|
"concat": {
|
|
3645
3705
|
"items": {
|
|
3646
3706
|
"anyOf": [
|
|
@@ -3749,7 +3809,14 @@
|
|
|
3749
3809
|
"type": "number"
|
|
3750
3810
|
},
|
|
3751
3811
|
"title": {
|
|
3752
|
-
"
|
|
3812
|
+
"anyOf": [
|
|
3813
|
+
{
|
|
3814
|
+
"type": "string"
|
|
3815
|
+
},
|
|
3816
|
+
{
|
|
3817
|
+
"$ref": "#/definitions/Title"
|
|
3818
|
+
}
|
|
3819
|
+
]
|
|
3753
3820
|
},
|
|
3754
3821
|
"transform": {
|
|
3755
3822
|
"items": {
|
|
@@ -3780,6 +3847,7 @@
|
|
|
3780
3847
|
}
|
|
3781
3848
|
},
|
|
3782
3849
|
"required": [
|
|
3850
|
+
"columns",
|
|
3783
3851
|
"concat"
|
|
3784
3852
|
],
|
|
3785
3853
|
"type": "object"
|
|
@@ -3947,7 +4015,14 @@
|
|
|
3947
4015
|
"type": "boolean"
|
|
3948
4016
|
},
|
|
3949
4017
|
"title": {
|
|
3950
|
-
"
|
|
4018
|
+
"anyOf": [
|
|
4019
|
+
{
|
|
4020
|
+
"type": "string"
|
|
4021
|
+
},
|
|
4022
|
+
{
|
|
4023
|
+
"$ref": "#/definitions/Title"
|
|
4024
|
+
}
|
|
4025
|
+
]
|
|
3951
4026
|
},
|
|
3952
4027
|
"transform": {
|
|
3953
4028
|
"items": {
|
|
@@ -4062,10 +4137,6 @@
|
|
|
4062
4137
|
"description": "The exponent of the `pow` scale.",
|
|
4063
4138
|
"type": "number"
|
|
4064
4139
|
},
|
|
4065
|
-
"fp64": {
|
|
4066
|
-
"description": "Use emulated 64bit floating points on the GPU to increase precision.\n\nEmulation has a performance cost when compared to the native 32bit processing, but the effect is negligible in the most cases.\n\n__Default value:__ `true` for `\"locus\"` scale, `false` for others.",
|
|
4067
|
-
"type": "boolean"
|
|
4068
|
-
},
|
|
4069
4140
|
"interpolate": {
|
|
4070
4141
|
"anyOf": [
|
|
4071
4142
|
{
|
|
@@ -4502,6 +4573,109 @@
|
|
|
4502
4573
|
}
|
|
4503
4574
|
]
|
|
4504
4575
|
},
|
|
4576
|
+
"Title": {
|
|
4577
|
+
"additionalProperties": false,
|
|
4578
|
+
"properties": {
|
|
4579
|
+
"align": {
|
|
4580
|
+
"$ref": "#/definitions/Align",
|
|
4581
|
+
"description": "Horizontal text alignment for title text. One of `\"left\"`, `\"center\"`, or `\"right\"`."
|
|
4582
|
+
},
|
|
4583
|
+
"anchor": {
|
|
4584
|
+
"$ref": "#/definitions/TitleAnchor",
|
|
4585
|
+
"description": "The anchor position for placing the title and subtitle text. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title."
|
|
4586
|
+
},
|
|
4587
|
+
"angle": {
|
|
4588
|
+
"description": "Angle in degrees of title and subtitle text.",
|
|
4589
|
+
"type": "number"
|
|
4590
|
+
},
|
|
4591
|
+
"baseline": {
|
|
4592
|
+
"$ref": "#/definitions/Baseline",
|
|
4593
|
+
"description": "Vertical text baseline for title and subtitle text. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, or `\"bottom\"`."
|
|
4594
|
+
},
|
|
4595
|
+
"color": {
|
|
4596
|
+
"description": "Text color for title text.",
|
|
4597
|
+
"type": "string"
|
|
4598
|
+
},
|
|
4599
|
+
"dx": {
|
|
4600
|
+
"description": "Delta offset for title and subtitle text x-coordinate.",
|
|
4601
|
+
"type": "number"
|
|
4602
|
+
},
|
|
4603
|
+
"dy": {
|
|
4604
|
+
"description": "Delta offset for title and subtitle text y-coordinate.",
|
|
4605
|
+
"type": "number"
|
|
4606
|
+
},
|
|
4607
|
+
"font": {
|
|
4608
|
+
"description": "Font name for title text.",
|
|
4609
|
+
"type": "string"
|
|
4610
|
+
},
|
|
4611
|
+
"fontSize": {
|
|
4612
|
+
"description": "Font size in pixels for title text.",
|
|
4613
|
+
"minimum": 0,
|
|
4614
|
+
"type": "number"
|
|
4615
|
+
},
|
|
4616
|
+
"fontStyle": {
|
|
4617
|
+
"$ref": "#/definitions/FontStyle",
|
|
4618
|
+
"description": "Font style for title text."
|
|
4619
|
+
},
|
|
4620
|
+
"fontWeight": {
|
|
4621
|
+
"$ref": "#/definitions/FontWeight",
|
|
4622
|
+
"description": "Font weight for title text. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
|
|
4623
|
+
},
|
|
4624
|
+
"frame": {
|
|
4625
|
+
"$ref": "#/definitions/TitleFrame",
|
|
4626
|
+
"description": "The reference frame for the anchor position, one of `\"bounds\"` (to anchor relative to the full bounding box) or `\"group\"` (to anchor relative to the group width or height)."
|
|
4627
|
+
},
|
|
4628
|
+
"offset": {
|
|
4629
|
+
"description": "The orthogonal offset in pixels by which to displace the title group from its position along the edge of the chart.",
|
|
4630
|
+
"type": "number"
|
|
4631
|
+
},
|
|
4632
|
+
"orient": {
|
|
4633
|
+
"$ref": "#/definitions/TitleOrient",
|
|
4634
|
+
"description": "Default title orientation (`\"top\"`, `\"bottom\"`, `\"left\"`, or `\"right\"`)"
|
|
4635
|
+
},
|
|
4636
|
+
"style": {
|
|
4637
|
+
"description": "A mark style property to apply to the title text mark. If not specified, a default style of `\"group-title\"` is applied.",
|
|
4638
|
+
"type": "string"
|
|
4639
|
+
},
|
|
4640
|
+
"text": {
|
|
4641
|
+
"description": "The title text.",
|
|
4642
|
+
"type": "string"
|
|
4643
|
+
}
|
|
4644
|
+
},
|
|
4645
|
+
"required": [
|
|
4646
|
+
"text"
|
|
4647
|
+
],
|
|
4648
|
+
"type": "object"
|
|
4649
|
+
},
|
|
4650
|
+
"TitleAnchor": {
|
|
4651
|
+
"enum": [
|
|
4652
|
+
null,
|
|
4653
|
+
"start",
|
|
4654
|
+
"middle",
|
|
4655
|
+
"end"
|
|
4656
|
+
],
|
|
4657
|
+
"type": [
|
|
4658
|
+
"null",
|
|
4659
|
+
"string"
|
|
4660
|
+
]
|
|
4661
|
+
},
|
|
4662
|
+
"TitleFrame": {
|
|
4663
|
+
"enum": [
|
|
4664
|
+
"bounds",
|
|
4665
|
+
"group"
|
|
4666
|
+
],
|
|
4667
|
+
"type": "string"
|
|
4668
|
+
},
|
|
4669
|
+
"TitleOrient": {
|
|
4670
|
+
"enum": [
|
|
4671
|
+
"none",
|
|
4672
|
+
"left",
|
|
4673
|
+
"right",
|
|
4674
|
+
"top",
|
|
4675
|
+
"bottom"
|
|
4676
|
+
],
|
|
4677
|
+
"type": "string"
|
|
4678
|
+
},
|
|
4505
4679
|
"Tooltip": {
|
|
4506
4680
|
"anyOf": [
|
|
4507
4681
|
{
|
|
@@ -4700,7 +4874,14 @@
|
|
|
4700
4874
|
"type": "object"
|
|
4701
4875
|
},
|
|
4702
4876
|
"title": {
|
|
4703
|
-
"
|
|
4877
|
+
"anyOf": [
|
|
4878
|
+
{
|
|
4879
|
+
"type": "string"
|
|
4880
|
+
},
|
|
4881
|
+
{
|
|
4882
|
+
"$ref": "#/definitions/Title"
|
|
4883
|
+
}
|
|
4884
|
+
]
|
|
4704
4885
|
},
|
|
4705
4886
|
"transform": {
|
|
4706
4887
|
"items": {
|
|
@@ -4709,7 +4890,7 @@
|
|
|
4709
4890
|
"type": "array"
|
|
4710
4891
|
},
|
|
4711
4892
|
"view": {
|
|
4712
|
-
"$ref": "#/definitions/
|
|
4893
|
+
"$ref": "#/definitions/ViewBackground"
|
|
4713
4894
|
},
|
|
4714
4895
|
"visible": {
|
|
4715
4896
|
"description": "Visibility of the view. An invisible view is removed from the layout and not rendered.\n\n**Default:** `true`",
|
|
@@ -4859,7 +5040,14 @@
|
|
|
4859
5040
|
"type": "number"
|
|
4860
5041
|
},
|
|
4861
5042
|
"title": {
|
|
4862
|
-
"
|
|
5043
|
+
"anyOf": [
|
|
5044
|
+
{
|
|
5045
|
+
"type": "string"
|
|
5046
|
+
},
|
|
5047
|
+
{
|
|
5048
|
+
"$ref": "#/definitions/Title"
|
|
5049
|
+
}
|
|
5050
|
+
]
|
|
4863
5051
|
},
|
|
4864
5052
|
"transform": {
|
|
4865
5053
|
"items": {
|
|
@@ -4936,7 +5124,7 @@
|
|
|
4936
5124
|
],
|
|
4937
5125
|
"type": "object"
|
|
4938
5126
|
},
|
|
4939
|
-
"
|
|
5127
|
+
"ViewBackground": {
|
|
4940
5128
|
"additionalProperties": false,
|
|
4941
5129
|
"properties": {
|
|
4942
5130
|
"cornerRadius": {
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"contributors": [],
|
|
9
9
|
"license": "BSD-2-Clause",
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "0.21.0",
|
|
11
11
|
"main": "dist/index.js",
|
|
12
12
|
"module": "src/index.js",
|
|
13
13
|
"exports": {
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"dev": "node dev-server.js",
|
|
29
29
|
"build": "vite build && npm run build:schema",
|
|
30
30
|
"prepublishOnly": "npm run build",
|
|
31
|
+
"test:vitest": "vitest run",
|
|
31
32
|
"test:tsc": "tsc -p tsconfig.json",
|
|
32
33
|
"checkSpec": "tsc --allowJs --checkJs --strict --noEmit --moduleResolution node --target es6 src/spec/root.d.ts",
|
|
33
34
|
"build:schema": "mkdir -p dist && ts-json-schema-generator --path 'src/spec/*.ts' --type RootSpec > dist/schema.json"
|
|
@@ -43,7 +44,7 @@
|
|
|
43
44
|
"d3-color": "^3.0.1",
|
|
44
45
|
"d3-ease": "^3.0.1",
|
|
45
46
|
"d3-format": "^3.0.1",
|
|
46
|
-
"flatqueue": "^
|
|
47
|
+
"flatqueue": "^2.0.3",
|
|
47
48
|
"internmap": "^2.0.3",
|
|
48
49
|
"lit-html": "^2.0.2",
|
|
49
50
|
"twgl.js": "^4.19.1",
|
|
@@ -52,5 +53,5 @@
|
|
|
52
53
|
"vega-scale": "^7.1.1",
|
|
53
54
|
"vega-util": "^1.16.0"
|
|
54
55
|
},
|
|
55
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "293e743d4b887427d8fadc49460a08a572eaff12"
|
|
56
57
|
}
|
package/src/data/flow.test.js
CHANGED
package/src/genome/scaleIndex.js
CHANGED
|
@@ -24,7 +24,7 @@ export default function scaleIndex() {
|
|
|
24
24
|
let numberingOffset = 0;
|
|
25
25
|
|
|
26
26
|
const scaleFunction = (/** @type {number} */ x) =>
|
|
27
|
-
((x - domain[0]) / domainSpan) * rangeSpan + range[0];
|
|
27
|
+
((x + align - domain[0]) / domainSpan) * rangeSpan + range[0];
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* In principle, the domain consists of integer indices. However,
|
|
@@ -34,7 +34,8 @@ export default function scaleIndex() {
|
|
|
34
34
|
*/
|
|
35
35
|
const scale = /** @type {any} */ (scaleFunction);
|
|
36
36
|
|
|
37
|
-
scale.invert = (y) =>
|
|
37
|
+
scale.invert = (y) =>
|
|
38
|
+
((y - range[0]) / rangeSpan) * domainSpan + domain[0] - align;
|
|
38
39
|
|
|
39
40
|
// @ts-expect-error
|
|
40
41
|
scale.domain = function (_) {
|
|
@@ -1,23 +1,40 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
1
2
|
import scaleIndex from "./scaleIndex";
|
|
2
3
|
|
|
3
4
|
test("Scale with defaults works as expected", () => {
|
|
4
5
|
const scale = scaleIndex();
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
expect(scale(
|
|
8
|
-
expect(scale(
|
|
9
|
-
expect(scale(
|
|
7
|
+
// Align is 0.5 by default
|
|
8
|
+
expect(scale(-1)).toEqual(-0.5);
|
|
9
|
+
expect(scale(0)).toEqual(0.5);
|
|
10
|
+
expect(scale(1)).toEqual(1.5);
|
|
11
|
+
expect(scale(2)).toEqual(2.5);
|
|
10
12
|
});
|
|
11
13
|
|
|
12
14
|
test("Scale scales correctly with custom domain and range", () => {
|
|
13
|
-
const scale = scaleIndex().domain([0, 10]).range([100, 200]);
|
|
15
|
+
const scale = scaleIndex().domain([0, 10]).range([100, 200]).align(0.0);
|
|
14
16
|
|
|
15
17
|
expect(scale(0)).toEqual(100);
|
|
16
18
|
expect(scale(10)).toEqual(200);
|
|
17
19
|
});
|
|
18
20
|
|
|
19
21
|
test("Invert works as expected", () => {
|
|
20
|
-
const scale = scaleIndex().domain([0, 10]).range([100, 200]);
|
|
22
|
+
const scale = scaleIndex().domain([0, 10]).range([100, 200]).align(0.0);
|
|
23
|
+
|
|
24
|
+
expect(scale.invert(scale(0))).toEqual(0);
|
|
25
|
+
expect(scale.invert(scale(5))).toEqual(5);
|
|
26
|
+
expect(scale.invert(scale(10))).toEqual(10);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("Scale scales correctly with custom domain, range, and align", () => {
|
|
30
|
+
const scale = scaleIndex().domain([0, 10]).range([100, 200]).align(0.5);
|
|
31
|
+
|
|
32
|
+
expect(scale(0)).toEqual(105);
|
|
33
|
+
expect(scale(10)).toEqual(205);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("Invert works as expected with align", () => {
|
|
37
|
+
const scale = scaleIndex().domain([0, 10]).range([100, 200]).align(0.5);
|
|
21
38
|
|
|
22
39
|
expect(scale.invert(scale(0))).toEqual(0);
|
|
23
40
|
expect(scale.invert(scale(5))).toEqual(5);
|