@genome-spy/app 0.88.1 → 0.89.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 (43) hide show
  1. package/dist/{agentApi-BIpg3JKh.js → agentApi-BUcXm-JC.js} +5544 -6449
  2. package/dist/agentApi.es.js +3328 -4255
  3. package/dist/agentShared.es.js +9 -9
  4. package/dist/{canvas2d-BVQ7-2eJ.js → canvas2d-CGuVGvQk.js} +117 -106
  5. package/dist/{canvas2d-D7SZK3xv.js → canvas2d-DgF0kstG.js} +99 -88
  6. package/dist/{canvasSizeHelper-7h_8rOcx.js → canvasSizeHelper-foL2YvGL.js} +15 -8
  7. package/dist/{clipOptions-DTMcB_9z.js → clipOptions-8BPf0WMZ.js} +1013 -755
  8. package/dist/{clipOptions-BWHr3aTa.js → clipOptions-DBJX_W31.js} +1033 -775
  9. package/dist/{debug-CVpoEOWx.js → debug-BEWbYuZD.js} +2 -2
  10. package/dist/{debug-DYAMZZKl.js → debug-DQj_7mFm.js} +2 -2
  11. package/dist/index.es.js +65 -65
  12. package/dist/index.js +406 -362
  13. package/dist/{indexer-DAH_ruVn.js → indexer-Cdt_U05k.js} +1 -1
  14. package/dist/{indexer-CXjZDo2Q.js → indexer-D8Bgkkb8.js} +1 -1
  15. package/dist/order-BPOzLe80.js +1056 -0
  16. package/dist/order-DIxlclRN.js +1056 -0
  17. package/dist/rasterExport-Bl6w9t3J.js +51 -0
  18. package/dist/rasterExport-DRvNAH-r.js +51 -0
  19. package/dist/rasterization-D0tOoKu_.js +62 -0
  20. package/dist/rectangle-DE98gIxF.js +108 -0
  21. package/dist/{renderCanvas2D-DxturTEW.js → renderCanvas2D-Ct95auF3.js} +60 -59
  22. package/dist/{renderCanvas2D-DtcJjqpB.js → renderCanvas2D-LdEYFnRo.js} +71 -70
  23. package/dist/schema.json +588 -116
  24. package/dist/{svg-CyrLfa9e.js → svg-Ag36-h_I.js} +394 -382
  25. package/dist/{svg-SDJMzL--.js → svg-pkTPD4bv.js} +368 -356
  26. package/dist/{svgRasterizer-f7DJ3UO0.js → svgRasterizer-CksK4QTB.js} +6 -5
  27. package/dist/{svgRasterizer-mWK7HTkx.js → svgRasterizer-DrtJ9nLk.js} +6 -5
  28. package/dist/{vega-scale-CypF85iS.js → vega-scale-BJaDSHBJ.js} +891 -959
  29. package/dist/{vega-scale-DLKCwWRs.js → vega-scale-BWBFykuI.js} +692 -760
  30. package/dist/{viewIdentityRegistry-DIDo44XQ.js → viewIdentityRegistry-B-snqI3y.js} +1 -1
  31. package/dist/{viewIdentityRegistry-Dl-vMN9I.js → viewIdentityRegistry-BvCJajXG.js} +1 -1
  32. package/dist/{viewSelectors-CymbZyE6.js → viewSelectors-BlvzvG-z.js} +445 -380
  33. package/dist/{viewSelectors-DNiDip5e.js → viewSelectors-C5q3qBiR.js} +364 -299
  34. package/dist/{viewUtils-BrJLIj2o.js → viewUtils-C3vBtSvE.js} +1714 -1689
  35. package/dist/{webgl-tZfZ8y3q.js → webgl-CZX2pe5v.js} +2319 -972
  36. package/dist/{webgl-CTJt7jQd.js → webgl-CexXSw_I.js} +2371 -1024
  37. package/package.json +5 -5
  38. package/dist/order-C5CzA37O.js +0 -918
  39. package/dist/order-DvY7KNcu.js +0 -918
  40. package/dist/rasterExport-BgZ98e6U.js +0 -44
  41. package/dist/rasterExport-DEr8fOLm.js +0 -44
  42. package/dist/rasterization-CFogVB3B.js +0 -50
  43. package/dist/rectangle-DKnrAmKs.js +0 -142
package/dist/schema.json CHANGED
@@ -132,7 +132,7 @@
132
132
  "properties": {
133
133
  "axes": {
134
134
  "additionalProperties": false,
135
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
135
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
136
136
  "properties": {
137
137
  "x": {
138
138
  "additionalProperties": false,
@@ -1153,7 +1153,7 @@
1153
1153
  },
1154
1154
  "scales": {
1155
1155
  "additionalProperties": false,
1156
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
1156
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
1157
1157
  "properties": {
1158
1158
  "angle": {
1159
1159
  "$ref": "#/definitions/Scale"
@@ -1345,7 +1345,7 @@
1345
1345
  },
1346
1346
  "axes": {
1347
1347
  "additionalProperties": false,
1348
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
1348
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
1349
1349
  "properties": {
1350
1350
  "x": {
1351
1351
  "additionalProperties": false,
@@ -2362,7 +2362,7 @@
2362
2362
  },
2363
2363
  "scales": {
2364
2364
  "additionalProperties": false,
2365
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
2365
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
2366
2366
  "properties": {
2367
2367
  "angle": {
2368
2368
  "$ref": "#/definitions/Scale"
@@ -2546,7 +2546,7 @@
2546
2546
  },
2547
2547
  "axes": {
2548
2548
  "additionalProperties": false,
2549
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
2549
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
2550
2550
  "properties": {
2551
2551
  "x": {
2552
2552
  "additionalProperties": false,
@@ -3573,7 +3573,7 @@
3573
3573
  },
3574
3574
  "scales": {
3575
3575
  "additionalProperties": false,
3576
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
3576
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
3577
3577
  "properties": {
3578
3578
  "angle": {
3579
3579
  "$ref": "#/definitions/Scale"
@@ -3745,7 +3745,7 @@
3745
3745
  },
3746
3746
  "axes": {
3747
3747
  "additionalProperties": false,
3748
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
3748
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
3749
3749
  "properties": {
3750
3750
  "x": {
3751
3751
  "additionalProperties": false,
@@ -4772,7 +4772,7 @@
4772
4772
  },
4773
4773
  "scales": {
4774
4774
  "additionalProperties": false,
4775
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
4775
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
4776
4776
  "properties": {
4777
4777
  "angle": {
4778
4778
  "$ref": "#/definitions/Scale"
@@ -4980,7 +4980,7 @@
4980
4980
  },
4981
4981
  "axes": {
4982
4982
  "additionalProperties": false,
4983
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
4983
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
4984
4984
  "properties": {
4985
4985
  "x": {
4986
4986
  "additionalProperties": false,
@@ -6000,6 +6000,13 @@
6000
6000
  },
6001
6001
  "type": "array"
6002
6002
  },
6003
+ "predicates": {
6004
+ "additionalProperties": {
6005
+ "$ref": "#/definitions/SelectionPredicateDefinition"
6006
+ },
6007
+ "description": "Define a selection test once instead of repeating it across this unit's conditional encodings, including conditional draw order. Use `test: { ref: \"name\" }` in a condition to reference it.\n\nDefinitions are local to this unit and are not inherited. An inherited encoding may reference a name if each consuming unit defines it. Selection parameters and projected channels resolve in this unit. Filter transforms do not use these definitions.",
6008
+ "type": "object"
6009
+ },
6003
6010
  "resolve": {
6004
6011
  "additionalProperties": false,
6005
6012
  "description": "Specifies how scales, axes, and legends are [resolved](https://genomespy.app/docs/grammar/composition/#scale-axis-and-legend-resolution) in the view hierarchy.\n\nIf legend resolution is not configured explicitly, it follows the corresponding scale resolution.",
@@ -6018,7 +6025,7 @@
6018
6025
  },
6019
6026
  "scales": {
6020
6027
  "additionalProperties": false,
6021
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
6028
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
6022
6029
  "properties": {
6023
6030
  "angle": {
6024
6031
  "$ref": "#/definitions/Scale"
@@ -6216,7 +6223,7 @@
6216
6223
  },
6217
6224
  "axes": {
6218
6225
  "additionalProperties": false,
6219
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
6226
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
6220
6227
  "properties": {
6221
6228
  "x": {
6222
6229
  "additionalProperties": false,
@@ -7262,7 +7269,7 @@
7262
7269
  },
7263
7270
  "scales": {
7264
7271
  "additionalProperties": false,
7265
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
7272
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
7266
7273
  "properties": {
7267
7274
  "angle": {
7268
7275
  "$ref": "#/definitions/Scale"
@@ -7459,7 +7466,7 @@
7459
7466
  },
7460
7467
  "axes": {
7461
7468
  "additionalProperties": false,
7462
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
7469
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
7463
7470
  "properties": {
7464
7471
  "x": {
7465
7472
  "additionalProperties": false,
@@ -8505,7 +8512,7 @@
8505
8512
  },
8506
8513
  "scales": {
8507
8514
  "additionalProperties": false,
8508
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
8515
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
8509
8516
  "properties": {
8510
8517
  "angle": {
8511
8518
  "$ref": "#/definitions/Scale"
@@ -8714,7 +8721,7 @@
8714
8721
  },
8715
8722
  "axes": {
8716
8723
  "additionalProperties": false,
8717
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
8724
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
8718
8725
  "properties": {
8719
8726
  "x": {
8720
8727
  "additionalProperties": false,
@@ -9737,7 +9744,7 @@
9737
9744
  },
9738
9745
  "scales": {
9739
9746
  "additionalProperties": false,
9740
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
9747
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
9741
9748
  "properties": {
9742
9749
  "angle": {
9743
9750
  "$ref": "#/definitions/Scale"
@@ -9966,7 +9973,7 @@
9966
9973
  },
9967
9974
  "axes": {
9968
9975
  "additionalProperties": false,
9969
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
9976
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
9970
9977
  "properties": {
9971
9978
  "x": {
9972
9979
  "additionalProperties": false,
@@ -11002,7 +11009,7 @@
11002
11009
  },
11003
11010
  "scales": {
11004
11011
  "additionalProperties": false,
11005
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
11012
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
11006
11013
  "properties": {
11007
11014
  "angle": {
11008
11015
  "$ref": "#/definitions/Scale"
@@ -11204,7 +11211,7 @@
11204
11211
  },
11205
11212
  "axes": {
11206
11213
  "additionalProperties": false,
11207
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
11214
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
11208
11215
  "properties": {
11209
11216
  "x": {
11210
11217
  "additionalProperties": false,
@@ -12244,7 +12251,7 @@
12244
12251
  },
12245
12252
  "scales": {
12246
12253
  "additionalProperties": false,
12247
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
12254
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
12248
12255
  "properties": {
12249
12256
  "angle": {
12250
12257
  "$ref": "#/definitions/Scale"
@@ -12447,7 +12454,7 @@
12447
12454
  },
12448
12455
  "axes": {
12449
12456
  "additionalProperties": false,
12450
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
12457
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
12451
12458
  "properties": {
12452
12459
  "x": {
12453
12460
  "additionalProperties": false,
@@ -13493,7 +13500,7 @@
13493
13500
  },
13494
13501
  "scales": {
13495
13502
  "additionalProperties": false,
13496
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
13503
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
13497
13504
  "properties": {
13498
13505
  "angle": {
13499
13506
  "$ref": "#/definitions/Scale"
@@ -13702,7 +13709,7 @@
13702
13709
  },
13703
13710
  "axes": {
13704
13711
  "additionalProperties": false,
13705
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
13712
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
13706
13713
  "properties": {
13707
13714
  "x": {
13708
13715
  "additionalProperties": false,
@@ -14703,6 +14710,13 @@
14703
14710
  },
14704
14711
  "type": "array"
14705
14712
  },
14713
+ "predicates": {
14714
+ "additionalProperties": {
14715
+ "$ref": "#/definitions/SelectionPredicateDefinition"
14716
+ },
14717
+ "description": "Define a selection test once instead of repeating it across this unit's conditional encodings, including conditional draw order. Use `test: { ref: \"name\" }` in a condition to reference it.\n\nDefinitions are local to this unit and are not inherited. An inherited encoding may reference a name if each consuming unit defines it. Selection parameters and projected channels resolve in this unit. Filter transforms do not use these definitions.",
14718
+ "type": "object"
14719
+ },
14706
14720
  "resolve": {
14707
14721
  "additionalProperties": false,
14708
14722
  "description": "Specifies how scales, axes, and legends are [resolved](https://genomespy.app/docs/grammar/composition/#scale-axis-and-legend-resolution) in the view hierarchy.\n\nIf legend resolution is not configured explicitly, it follows the corresponding scale resolution.",
@@ -14721,7 +14735,7 @@
14721
14735
  },
14722
14736
  "scales": {
14723
14737
  "additionalProperties": false,
14724
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
14738
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
14725
14739
  "properties": {
14726
14740
  "angle": {
14727
14741
  "$ref": "#/definitions/Scale"
@@ -14901,7 +14915,7 @@
14901
14915
  },
14902
14916
  "axes": {
14903
14917
  "additionalProperties": false,
14904
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
14918
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
14905
14919
  "properties": {
14906
14920
  "x": {
14907
14921
  "additionalProperties": false,
@@ -15905,7 +15919,7 @@
15905
15919
  },
15906
15920
  "scales": {
15907
15921
  "additionalProperties": false,
15908
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
15922
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
15909
15923
  "properties": {
15910
15924
  "angle": {
15911
15925
  "$ref": "#/definitions/Scale"
@@ -16205,18 +16219,13 @@
16205
16219
  "direction": {
16206
16220
  "anyOf": [
16207
16221
  {
16208
- "const": "forward",
16209
- "type": "string"
16210
- },
16211
- {
16212
- "const": "reverse",
16213
- "type": "string"
16222
+ "$ref": "#/definitions/ArrowDirection"
16214
16223
  },
16215
16224
  {
16216
16225
  "$ref": "#/definitions/ExprRef"
16217
16226
  }
16218
16227
  ],
16219
- "description": "Direction of the arrowhead. `\"forward\"` places the arrowhead at the secondary endpoint (`x2`, `y2`). `\"reverse\"` places it at the primary endpoint (`x`, `y`). For data-driven direction, use the `direction` encoding channel.\n\n__Default value:__ `\"forward\"`"
16228
+ "description": "Direction of the arrowhead. `\"forward\"` places the arrowhead at the secondary endpoint (`x2`, `y2`). `\"reverse\"` places it at the primary endpoint (`x`, `y`). `\"both\"` places equivalent heads at both endpoints and suppresses `headSpacing` and `startNotch` for that arrow. For data-driven direction, use the `direction` encoding channel.\n\n__Default value:__ `\"forward\"`"
16220
16229
  },
16221
16230
  "fill": {
16222
16231
  "anyOf": [
@@ -16310,7 +16319,7 @@
16310
16319
  "$ref": "#/definitions/ExprRef"
16311
16320
  }
16312
16321
  ],
16313
- "description": "Spacing between repeated arrowheads as a multiplier of resolved `size`. The effective spacing is at least the rendered arrowhead footprint, including stroke. If `null`, arrowheads are not repeated.\n\n__Default value:__ `null`"
16322
+ "description": "Spacing between repeated arrowheads as a multiplier of resolved `size`. The effective spacing is at least the rendered arrowhead footprint, including stroke. If `null`, arrowheads are not repeated. Repetition is suppressed when `direction` resolves to `\"both\"`.\n\n__Default value:__ `null`"
16314
16323
  },
16315
16324
  "headWidth": {
16316
16325
  "anyOf": [
@@ -16369,7 +16378,7 @@
16369
16378
  "$ref": "#/definitions/ExprRef"
16370
16379
  }
16371
16380
  ],
16372
- "description": "Whether to draw a notch at the start of the arrow. The start notch uses the same slope as the arrowhead edge.\n\n__Default value:__ `false`"
16381
+ "description": "Whether to draw a notch at the start of the arrow. The start notch uses the same slope as the arrowhead edge. It is suppressed when `direction` resolves to `\"both\"` because a bidirectional arrow has no unique start.\n\n__Default value:__ `false`"
16373
16382
  },
16374
16383
  "stem": {
16375
16384
  "anyOf": [
@@ -16527,7 +16536,8 @@
16527
16536
  "ArrowDirection": {
16528
16537
  "enum": [
16529
16538
  "forward",
16530
- "reverse"
16539
+ "reverse",
16540
+ "both"
16531
16541
  ],
16532
16542
  "type": "string"
16533
16543
  },
@@ -16599,18 +16609,13 @@
16599
16609
  "direction": {
16600
16610
  "anyOf": [
16601
16611
  {
16602
- "const": "forward",
16603
- "type": "string"
16604
- },
16605
- {
16606
- "const": "reverse",
16607
- "type": "string"
16612
+ "$ref": "#/definitions/ArrowDirection"
16608
16613
  },
16609
16614
  {
16610
16615
  "$ref": "#/definitions/ExprRef"
16611
16616
  }
16612
16617
  ],
16613
- "description": "Direction of the arrowhead. `\"forward\"` places the arrowhead at the secondary endpoint (`x2`, `y2`). `\"reverse\"` places it at the primary endpoint (`x`, `y`). For data-driven direction, use the `direction` encoding channel.\n\n__Default value:__ `\"forward\"`"
16618
+ "description": "Direction of the arrowhead. `\"forward\"` places the arrowhead at the secondary endpoint (`x2`, `y2`). `\"reverse\"` places it at the primary endpoint (`x`, `y`). `\"both\"` places equivalent heads at both endpoints and suppresses `headSpacing` and `startNotch` for that arrow. For data-driven direction, use the `direction` encoding channel.\n\n__Default value:__ `\"forward\"`"
16614
16619
  },
16615
16620
  "fill": {
16616
16621
  "anyOf": [
@@ -16704,7 +16709,7 @@
16704
16709
  "$ref": "#/definitions/ExprRef"
16705
16710
  }
16706
16711
  ],
16707
- "description": "Spacing between repeated arrowheads as a multiplier of resolved `size`. The effective spacing is at least the rendered arrowhead footprint, including stroke. If `null`, arrowheads are not repeated.\n\n__Default value:__ `null`"
16712
+ "description": "Spacing between repeated arrowheads as a multiplier of resolved `size`. The effective spacing is at least the rendered arrowhead footprint, including stroke. If `null`, arrowheads are not repeated. Repetition is suppressed when `direction` resolves to `\"both\"`.\n\n__Default value:__ `null`"
16708
16713
  },
16709
16714
  "headWidth": {
16710
16715
  "anyOf": [
@@ -16763,7 +16768,7 @@
16763
16768
  "$ref": "#/definitions/ExprRef"
16764
16769
  }
16765
16770
  ],
16766
- "description": "Whether to draw a notch at the start of the arrow. The start notch uses the same slope as the arrowhead edge.\n\n__Default value:__ `false`"
16771
+ "description": "Whether to draw a notch at the start of the arrow. The start notch uses the same slope as the arrowhead edge. It is suppressed when `direction` resolves to `\"both\"` because a bidirectional arrow has no unique start.\n\n__Default value:__ `false`"
16767
16772
  },
16768
16773
  "stem": {
16769
16774
  "anyOf": [
@@ -18285,7 +18290,7 @@
18285
18290
  "type": "string"
18286
18291
  }
18287
18292
  ],
18288
- "description": "Whether the brush rectangle should be clipped to the viewport.\n\n__Default value:__ `true`"
18293
+ "description": "Clip the brush rectangle to the viewport along the selected axes. An explicit value overrides this direction-based default.\n\n__Default value:__ `\"x\"` for x selections, `\"y\"` for y selections, and `true` for x/y selections."
18289
18294
  },
18290
18295
  "cursor": {
18291
18296
  "anyOf": [
@@ -18673,7 +18678,7 @@
18673
18678
  "properties": {
18674
18679
  "axes": {
18675
18680
  "additionalProperties": false,
18676
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
18681
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
18677
18682
  "properties": {
18678
18683
  "x": {
18679
18684
  "additionalProperties": false,
@@ -19684,7 +19689,7 @@
19684
19689
  },
19685
19690
  "scales": {
19686
19691
  "additionalProperties": false,
19687
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
19692
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
19688
19693
  "properties": {
19689
19694
  "angle": {
19690
19695
  "$ref": "#/definitions/Scale"
@@ -19968,6 +19973,27 @@
19968
19973
  "description": "Filter using a parameter name.",
19969
19974
  "type": "string"
19970
19975
  },
19976
+ "project": {
19977
+ "additionalProperties": false,
19978
+ "description": "Bind interval selection components to positional channels of this mark. For example, `{ \"x\": \"x2\" }` tests the selected x interval against x2 alone. Each selected component must be mapped when this is provided. The target must be an unconditional field encoding of the same data type.",
19979
+ "properties": {
19980
+ "x": {
19981
+ "enum": [
19982
+ "x",
19983
+ "x2"
19984
+ ],
19985
+ "type": "string"
19986
+ },
19987
+ "y": {
19988
+ "enum": [
19989
+ "y",
19990
+ "y2"
19991
+ ],
19992
+ "type": "string"
19993
+ }
19994
+ },
19995
+ "type": "object"
19996
+ },
19971
19997
  "resolutionChannel": {
19972
19998
  "$ref": "#/definitions/ChannelWithScale",
19973
19999
  "description": "An alternative channel for scale resolution.\n\nThis is mainly for internal use and allows using `color` channel to resolve `fill` and `stroke` channels under certain circumstances."
@@ -20041,6 +20067,27 @@
20041
20067
  "description": "Filter using a parameter name.",
20042
20068
  "type": "string"
20043
20069
  },
20070
+ "project": {
20071
+ "additionalProperties": false,
20072
+ "description": "Bind interval selection components to positional channels of this mark. For example, `{ \"x\": \"x2\" }` tests the selected x interval against x2 alone. Each selected component must be mapped when this is provided. The target must be an unconditional field encoding of the same data type.",
20073
+ "properties": {
20074
+ "x": {
20075
+ "enum": [
20076
+ "x",
20077
+ "x2"
20078
+ ],
20079
+ "type": "string"
20080
+ },
20081
+ "y": {
20082
+ "enum": [
20083
+ "y",
20084
+ "y2"
20085
+ ],
20086
+ "type": "string"
20087
+ }
20088
+ },
20089
+ "type": "object"
20090
+ },
20044
20091
  "resolutionChannel": {
20045
20092
  "$ref": "#/definitions/ChannelWithScale",
20046
20093
  "description": "An alternative channel for scale resolution.\n\nThis is mainly for internal use and allows using `color` channel to resolve `fill` and `stroke` channels under certain circumstances."
@@ -20112,6 +20159,27 @@
20112
20159
  "description": "Filter using a parameter name.",
20113
20160
  "type": "string"
20114
20161
  },
20162
+ "project": {
20163
+ "additionalProperties": false,
20164
+ "description": "Bind interval selection components to positional channels of this mark. For example, `{ \"x\": \"x2\" }` tests the selected x interval against x2 alone. Each selected component must be mapped when this is provided. The target must be an unconditional field encoding of the same data type.",
20165
+ "properties": {
20166
+ "x": {
20167
+ "enum": [
20168
+ "x",
20169
+ "x2"
20170
+ ],
20171
+ "type": "string"
20172
+ },
20173
+ "y": {
20174
+ "enum": [
20175
+ "y",
20176
+ "y2"
20177
+ ],
20178
+ "type": "string"
20179
+ }
20180
+ },
20181
+ "type": "object"
20182
+ },
20115
20183
  "resolutionChannel": {
20116
20184
  "$ref": "#/definitions/ChannelWithScale",
20117
20185
  "description": "An alternative channel for scale resolution.\n\nThis is mainly for internal use and allows using `color` channel to resolve `fill` and `stroke` channels under certain circumstances."
@@ -20182,6 +20250,27 @@
20182
20250
  "description": "Filter using a parameter name.",
20183
20251
  "type": "string"
20184
20252
  },
20253
+ "project": {
20254
+ "additionalProperties": false,
20255
+ "description": "Bind interval selection components to positional channels of this mark. For example, `{ \"x\": \"x2\" }` tests the selected x interval against x2 alone. Each selected component must be mapped when this is provided. The target must be an unconditional field encoding of the same data type.",
20256
+ "properties": {
20257
+ "x": {
20258
+ "enum": [
20259
+ "x",
20260
+ "x2"
20261
+ ],
20262
+ "type": "string"
20263
+ },
20264
+ "y": {
20265
+ "enum": [
20266
+ "y",
20267
+ "y2"
20268
+ ],
20269
+ "type": "string"
20270
+ }
20271
+ },
20272
+ "type": "object"
20273
+ },
20185
20274
  "resolutionChannel": {
20186
20275
  "$ref": "#/definitions/ChannelWithScale",
20187
20276
  "description": "An alternative channel for scale resolution.\n\nThis is mainly for internal use and allows using `color` channel to resolve `fill` and `stroke` channels under certain circumstances."
@@ -20250,6 +20339,27 @@
20250
20339
  "description": "Filter using a parameter name.",
20251
20340
  "type": "string"
20252
20341
  },
20342
+ "project": {
20343
+ "additionalProperties": false,
20344
+ "description": "Bind interval selection components to positional channels of this mark. For example, `{ \"x\": \"x2\" }` tests the selected x interval against x2 alone. Each selected component must be mapped when this is provided. The target must be an unconditional field encoding of the same data type.",
20345
+ "properties": {
20346
+ "x": {
20347
+ "enum": [
20348
+ "x",
20349
+ "x2"
20350
+ ],
20351
+ "type": "string"
20352
+ },
20353
+ "y": {
20354
+ "enum": [
20355
+ "y",
20356
+ "y2"
20357
+ ],
20358
+ "type": "string"
20359
+ }
20360
+ },
20361
+ "type": "object"
20362
+ },
20253
20363
  "resolutionChannel": {
20254
20364
  "$ref": "#/definitions/ChannelWithScale",
20255
20365
  "description": "An alternative channel for scale resolution.\n\nThis is mainly for internal use and allows using `color` channel to resolve `fill` and `stroke` channels under certain circumstances."
@@ -20296,6 +20406,27 @@
20296
20406
  "description": "Filter using a parameter name.",
20297
20407
  "type": "string"
20298
20408
  },
20409
+ "project": {
20410
+ "additionalProperties": false,
20411
+ "description": "Bind interval selection components to positional channels of this mark. For example, `{ \"x\": \"x2\" }` tests the selected x interval against x2 alone. Each selected component must be mapped when this is provided. The target must be an unconditional field encoding of the same data type.",
20412
+ "properties": {
20413
+ "x": {
20414
+ "enum": [
20415
+ "x",
20416
+ "x2"
20417
+ ],
20418
+ "type": "string"
20419
+ },
20420
+ "y": {
20421
+ "enum": [
20422
+ "y",
20423
+ "y2"
20424
+ ],
20425
+ "type": "string"
20426
+ }
20427
+ },
20428
+ "type": "object"
20429
+ },
20299
20430
  "title": {
20300
20431
  "description": "A title for the field. If `null`, the title will be removed.",
20301
20432
  "type": [
@@ -20336,6 +20467,27 @@
20336
20467
  "description": "Filter using a parameter name.",
20337
20468
  "type": "string"
20338
20469
  },
20470
+ "project": {
20471
+ "additionalProperties": false,
20472
+ "description": "Bind interval selection components to positional channels of this mark. For example, `{ \"x\": \"x2\" }` tests the selected x interval against x2 alone. Each selected component must be mapped when this is provided. The target must be an unconditional field encoding of the same data type.",
20473
+ "properties": {
20474
+ "x": {
20475
+ "enum": [
20476
+ "x",
20477
+ "x2"
20478
+ ],
20479
+ "type": "string"
20480
+ },
20481
+ "y": {
20482
+ "enum": [
20483
+ "y",
20484
+ "y2"
20485
+ ],
20486
+ "type": "string"
20487
+ }
20488
+ },
20489
+ "type": "object"
20490
+ },
20339
20491
  "title": {
20340
20492
  "description": "A title for the field. If `null`, the title will be removed.",
20341
20493
  "type": [
@@ -20414,10 +20566,10 @@
20414
20566
  "test": {
20415
20567
  "anyOf": [
20416
20568
  {
20417
- "$ref": "#/definitions/ParameterPredicate"
20569
+ "$ref": "#/definitions/SelectionPredicateDefinition"
20418
20570
  },
20419
20571
  {
20420
- "$ref": "#/definitions/SelectionUnionTest"
20572
+ "$ref": "#/definitions/NamedSelectionPredicateRef"
20421
20573
  }
20422
20574
  ]
20423
20575
  },
@@ -20489,10 +20641,10 @@
20489
20641
  "test": {
20490
20642
  "anyOf": [
20491
20643
  {
20492
- "$ref": "#/definitions/ParameterPredicate"
20644
+ "$ref": "#/definitions/SelectionPredicateDefinition"
20493
20645
  },
20494
20646
  {
20495
- "$ref": "#/definitions/SelectionUnionTest"
20647
+ "$ref": "#/definitions/NamedSelectionPredicateRef"
20496
20648
  }
20497
20649
  ]
20498
20650
  },
@@ -20562,10 +20714,10 @@
20562
20714
  "test": {
20563
20715
  "anyOf": [
20564
20716
  {
20565
- "$ref": "#/definitions/ParameterPredicate"
20717
+ "$ref": "#/definitions/SelectionPredicateDefinition"
20566
20718
  },
20567
20719
  {
20568
- "$ref": "#/definitions/SelectionUnionTest"
20720
+ "$ref": "#/definitions/NamedSelectionPredicateRef"
20569
20721
  }
20570
20722
  ]
20571
20723
  },
@@ -20634,10 +20786,10 @@
20634
20786
  "test": {
20635
20787
  "anyOf": [
20636
20788
  {
20637
- "$ref": "#/definitions/ParameterPredicate"
20789
+ "$ref": "#/definitions/SelectionPredicateDefinition"
20638
20790
  },
20639
20791
  {
20640
- "$ref": "#/definitions/SelectionUnionTest"
20792
+ "$ref": "#/definitions/NamedSelectionPredicateRef"
20641
20793
  }
20642
20794
  ]
20643
20795
  },
@@ -20704,10 +20856,10 @@
20704
20856
  "test": {
20705
20857
  "anyOf": [
20706
20858
  {
20707
- "$ref": "#/definitions/ParameterPredicate"
20859
+ "$ref": "#/definitions/SelectionPredicateDefinition"
20708
20860
  },
20709
20861
  {
20710
- "$ref": "#/definitions/SelectionUnionTest"
20862
+ "$ref": "#/definitions/NamedSelectionPredicateRef"
20711
20863
  }
20712
20864
  ]
20713
20865
  },
@@ -20737,10 +20889,10 @@
20737
20889
  "test": {
20738
20890
  "anyOf": [
20739
20891
  {
20740
- "$ref": "#/definitions/ParameterPredicate"
20892
+ "$ref": "#/definitions/SelectionPredicateDefinition"
20741
20893
  },
20742
20894
  {
20743
- "$ref": "#/definitions/SelectionUnionTest"
20895
+ "$ref": "#/definitions/NamedSelectionPredicateRef"
20744
20896
  }
20745
20897
  ]
20746
20898
  },
@@ -20779,10 +20931,10 @@
20779
20931
  "test": {
20780
20932
  "anyOf": [
20781
20933
  {
20782
- "$ref": "#/definitions/ParameterPredicate"
20934
+ "$ref": "#/definitions/SelectionPredicateDefinition"
20783
20935
  },
20784
20936
  {
20785
- "$ref": "#/definitions/SelectionUnionTest"
20937
+ "$ref": "#/definitions/NamedSelectionPredicateRef"
20786
20938
  }
20787
20939
  ]
20788
20940
  },
@@ -21188,6 +21340,43 @@
21188
21340
  }
21189
21341
  ]
21190
21342
  },
21343
+ "DebouncedExprParameter": {
21344
+ "additionalProperties": false,
21345
+ "properties": {
21346
+ "debounce": {
21347
+ "description": "Delays publication until the expression dependencies have remained unchanged for the specified number of milliseconds. The initial value is published immediately.",
21348
+ "minimum": 0,
21349
+ "type": "number"
21350
+ },
21351
+ "description": {
21352
+ "description": "A description of the parameter. Can be used for documentation and to explain the meaning of the control or selection.",
21353
+ "type": "string"
21354
+ },
21355
+ "expr": {
21356
+ "description": "An expression for the value of the parameter. This expression may include other parameters, in which case the parameter will automatically update in response to upstream parameter changes.",
21357
+ "type": "string"
21358
+ },
21359
+ "name": {
21360
+ "description": "A unique name for the variable parameter. Parameter names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are: \"datum\".",
21361
+ "type": "string"
21362
+ },
21363
+ "persist": {
21364
+ "description": "Whether the parameter should be persisted in bookmarks and provenance.\n\nThis primarily affects GenomeSpy App behavior. Set to `false` for ephemeral params (e.g., hover selections) or when the selection cannot be persisted due to missing `encoding.key`.\n\n__Default value:__ `true`",
21365
+ "type": "boolean"
21366
+ },
21367
+ "push": {
21368
+ "const": "outer",
21369
+ "description": "Reuses the nearest same-named parameter in an ancestor scope and writes updates to it. Declare the target parameter on the ancestor first.\n\nThis is useful when interaction in a child view updates state owned by a composed view, such as a parameter that controls a shared scale.",
21370
+ "type": "string"
21371
+ }
21372
+ },
21373
+ "required": [
21374
+ "debounce",
21375
+ "expr",
21376
+ "name"
21377
+ ],
21378
+ "type": "object"
21379
+ },
21191
21380
  "DirectionDef": {
21192
21381
  "anyOf": [
21193
21382
  {
@@ -21373,6 +21562,106 @@
21373
21562
  ],
21374
21563
  "type": "object"
21375
21564
  },
21565
+ "Displace2DParams": {
21566
+ "additionalProperties": false,
21567
+ "description": "Progressively displaces axis-aligned rectangles to reduce overlap while keeping them close to positions mapped through the view's x and y scales. Every input row receives signed pixel offsets. Earlier rows have higher placement priority.",
21568
+ "properties": {
21569
+ "anchorHeight": {
21570
+ "anyOf": [
21571
+ {
21572
+ "type": "number"
21573
+ },
21574
+ {
21575
+ "$ref": "#/definitions/Field"
21576
+ },
21577
+ {
21578
+ "$ref": "#/definitions/ExprRef"
21579
+ }
21580
+ ],
21581
+ "description": "Height in logical pixels of an obstacle centered on the anchor. A number or expression supplies one value for all rows; a field supplies per-row values. Setting either anchor dimension to zero disables the obstacle for that row.\n\n__Default value:__ `0`"
21582
+ },
21583
+ "anchorWidth": {
21584
+ "anyOf": [
21585
+ {
21586
+ "type": "number"
21587
+ },
21588
+ {
21589
+ "$ref": "#/definitions/Field"
21590
+ },
21591
+ {
21592
+ "$ref": "#/definitions/ExprRef"
21593
+ }
21594
+ ],
21595
+ "description": "Width in logical pixels of an obstacle centered on the anchor. A number or expression supplies one value for all rows; a field supplies per-row values. Setting either anchor dimension to zero disables the obstacle for that row.\n\n__Default value:__ `0`"
21596
+ },
21597
+ "as": {
21598
+ "description": "Names of the output fields for signed horizontal and vertical pixel offsets. Positive values move right and down, respectively. Neither name may overwrite `key`.\n\n__Default value:__ `[\"xDisplacement\", \"yDisplacement\"]`",
21599
+ "items": {
21600
+ "type": "string"
21601
+ },
21602
+ "maxItems": 2,
21603
+ "minItems": 2,
21604
+ "type": "array"
21605
+ },
21606
+ "description": {
21607
+ "description": "A description of the transform step. Can be used for documentation and agent context.",
21608
+ "type": "string"
21609
+ },
21610
+ "height": {
21611
+ "anyOf": [
21612
+ {
21613
+ "type": "number"
21614
+ },
21615
+ {
21616
+ "$ref": "#/definitions/Field"
21617
+ },
21618
+ {
21619
+ "$ref": "#/definitions/ExprRef"
21620
+ }
21621
+ ],
21622
+ "description": "Collision height in logical pixels, including any desired vertical spacing. A number or expression supplies one value for all rows; a field supplies per-row values. Values must be non-negative. Setting either collision dimension to zero disables displacement for that row."
21623
+ },
21624
+ "key": {
21625
+ "$ref": "#/definitions/Field",
21626
+ "description": "Field containing a unique string or finite numeric identifier. Use a key to preserve placement when upstream transforms replace, filter, or reorder rows. Without a key, placement state follows row object identity."
21627
+ },
21628
+ "type": {
21629
+ "const": "displace2d",
21630
+ "description": "The type of the transform to be applied",
21631
+ "type": "string"
21632
+ },
21633
+ "width": {
21634
+ "anyOf": [
21635
+ {
21636
+ "type": "number"
21637
+ },
21638
+ {
21639
+ "$ref": "#/definitions/Field"
21640
+ },
21641
+ {
21642
+ "$ref": "#/definitions/ExprRef"
21643
+ }
21644
+ ],
21645
+ "description": "Collision width in logical pixels, including any desired horizontal spacing. A number or expression supplies one value for all rows; a field supplies per-row values. Values must be non-negative. Setting either collision dimension to zero disables displacement for that row."
21646
+ },
21647
+ "x": {
21648
+ "$ref": "#/definitions/Field",
21649
+ "description": "Field containing the anchor value mapped through the view's x scale."
21650
+ },
21651
+ "y": {
21652
+ "$ref": "#/definitions/Field",
21653
+ "description": "Field containing the anchor value mapped through the view's y scale."
21654
+ }
21655
+ },
21656
+ "required": [
21657
+ "height",
21658
+ "type",
21659
+ "width",
21660
+ "x",
21661
+ "y"
21662
+ ],
21663
+ "type": "object"
21664
+ },
21376
21665
  "DomEventType": {
21377
21666
  "anyOf": [
21378
21667
  {
@@ -21519,7 +21808,7 @@
21519
21808
  },
21520
21809
  "direction": {
21521
21810
  "$ref": "#/definitions/DirectionDef",
21522
- "description": "Direction of arrow marks. Encoded values are mapped with a discrete scale whose range values must be `\"forward\"` or `\"reverse\"`.\n\nThis channel is supported by arrow marks only and does not create a legend."
21811
+ "description": "Direction of arrow marks. Encoded values are mapped with a discrete scale whose range values must be `\"forward\"`, `\"reverse\"`, or `\"both\"`. The automatic range contains only `\"forward\"` and `\"reverse\"`; use an explicit value or range to select `\"both\"`.\n\nThis channel is supported by arrow marks only and does not create a legend."
21523
21812
  },
21524
21813
  "dx": {
21525
21814
  "anyOf": [
@@ -22058,6 +22347,11 @@
22058
22347
  "ExprFilterParams": {
22059
22348
  "additionalProperties": false,
22060
22349
  "properties": {
22350
+ "debounce": {
22351
+ "description": "Trailing-edge delay in milliseconds before requesting dataflow replay after a reactive expression dependency changes. Repeated changes restart the delay.\n\nParameter updates and incoming data are not delayed. Incoming batches use current parameter values, and a completed batch satisfies any pending reactive replay. The delay does not wait for independently scheduled lazy data loads.\n\n__Default value:__ no delay",
22352
+ "minimum": 0,
22353
+ "type": "number"
22354
+ },
22061
22355
  "description": {
22062
22356
  "description": "A description of the transform step. Can be used for documentation and agent context.",
22063
22357
  "type": "string"
@@ -22079,39 +22373,17 @@
22079
22373
  "type": "object"
22080
22374
  },
22081
22375
  "ExprParameter": {
22082
- "additionalProperties": false,
22083
- "properties": {
22084
- "description": {
22085
- "description": "A description of the parameter. Can be used for documentation and to explain the meaning of the control or selection.",
22086
- "type": "string"
22087
- },
22088
- "expr": {
22089
- "description": "An expression for the value of the parameter. This expression may include other parameters, in which case the parameter will automatically update in response to upstream parameter changes.",
22090
- "type": "string"
22091
- },
22092
- "name": {
22093
- "description": "A unique name for the variable parameter. Parameter names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are: \"datum\".",
22094
- "type": "string"
22095
- },
22096
- "persist": {
22097
- "description": "Whether the parameter should be persisted in bookmarks and provenance.\n\nThis primarily affects GenomeSpy App behavior. Set to `false` for ephemeral params (e.g., hover selections) or when the selection cannot be persisted due to missing `encoding.key`.\n\n__Default value:__ `true`",
22098
- "type": "boolean"
22376
+ "anyOf": [
22377
+ {
22378
+ "$ref": "#/definitions/PlainExprParameter"
22099
22379
  },
22100
- "push": {
22101
- "const": "outer",
22102
- "description": "Reuses the nearest same-named parameter in an ancestor scope and writes updates to it. Declare the target parameter on the ancestor first.\n\nThis is useful when interaction in a child view updates state owned by a composed view, such as a parameter that controls a shared scale.",
22103
- "type": "string"
22380
+ {
22381
+ "$ref": "#/definitions/TransitionedExprParameter"
22104
22382
  },
22105
- "transition": {
22106
- "$ref": "#/definitions/ParamTransition",
22107
- "description": "Smoothly follows numeric expression output values."
22383
+ {
22384
+ "$ref": "#/definitions/DebouncedExprParameter"
22108
22385
  }
22109
- },
22110
- "required": [
22111
- "expr",
22112
- "name"
22113
- ],
22114
- "type": "object"
22386
+ ]
22115
22387
  },
22116
22388
  "ExprRef": {
22117
22389
  "additionalProperties": false,
@@ -22889,6 +23161,11 @@
22889
23161
  "description": "The (new) field where the computed value is written to",
22890
23162
  "type": "string"
22891
23163
  },
23164
+ "debounce": {
23165
+ "description": "Trailing-edge delay in milliseconds before requesting dataflow replay after a reactive expression dependency changes. Repeated changes restart the delay.\n\nParameter updates and incoming data are not delayed. Incoming batches use current parameter values, and a completed batch satisfies any pending reactive replay. The delay does not wait for independently scheduled lazy data loads.\n\n__Default value:__ no delay",
23166
+ "minimum": 0,
23167
+ "type": "number"
23168
+ },
22892
23169
  "description": {
22893
23170
  "description": "A description of the transform step. Can be used for documentation and agent context.",
22894
23171
  "type": "string"
@@ -23568,7 +23845,7 @@
23568
23845
  },
23569
23846
  "axes": {
23570
23847
  "additionalProperties": false,
23571
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
23848
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
23572
23849
  "properties": {
23573
23850
  "x": {
23574
23851
  "additionalProperties": false,
@@ -24575,7 +24852,7 @@
24575
24852
  },
24576
24853
  "scales": {
24577
24854
  "additionalProperties": false,
24578
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
24855
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
24579
24856
  "properties": {
24580
24857
  "angle": {
24581
24858
  "$ref": "#/definitions/Scale"
@@ -25155,7 +25432,7 @@
25155
25432
  "properties": {
25156
25433
  "axes": {
25157
25434
  "additionalProperties": false,
25158
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
25435
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
25159
25436
  "properties": {
25160
25437
  "x": {
25161
25438
  "additionalProperties": false,
@@ -26171,7 +26448,7 @@
26171
26448
  },
26172
26449
  "scales": {
26173
26450
  "additionalProperties": false,
26174
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
26451
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
26175
26452
  "properties": {
26176
26453
  "angle": {
26177
26454
  "$ref": "#/definitions/Scale"
@@ -28617,7 +28894,7 @@
28617
28894
  "properties": {
28618
28895
  "axes": {
28619
28896
  "additionalProperties": false,
28620
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
28897
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
28621
28898
  "properties": {
28622
28899
  "x": {
28623
28900
  "additionalProperties": false,
@@ -29634,7 +29911,7 @@
29634
29911
  },
29635
29912
  "scales": {
29636
29913
  "additionalProperties": false,
29637
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
29914
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
29638
29915
  "properties": {
29639
29916
  "angle": {
29640
29917
  "$ref": "#/definitions/Scale"
@@ -29857,6 +30134,19 @@
29857
30134
  }
29858
30135
  ]
29859
30136
  },
30137
+ "NamedSelectionPredicateRef": {
30138
+ "additionalProperties": false,
30139
+ "description": "Reference to a named selection predicate in the consuming unit view.",
30140
+ "properties": {
30141
+ "ref": {
30142
+ "type": "string"
30143
+ }
30144
+ },
30145
+ "required": [
30146
+ "ref"
30147
+ ],
30148
+ "type": "object"
30149
+ },
29860
30150
  "NumericDomain": {
29861
30151
  "items": {
29862
30152
  "type": "number"
@@ -29910,6 +30200,27 @@
29910
30200
  "description": "Filter using a parameter name.",
29911
30201
  "type": "string"
29912
30202
  },
30203
+ "project": {
30204
+ "additionalProperties": false,
30205
+ "description": "Bind interval selection components to positional channels of this mark. For example, `{ \"x\": \"x2\" }` tests the selected x interval against x2 alone. Each selected component must be mapped when this is provided. The target must be an unconditional field encoding of the same data type.",
30206
+ "properties": {
30207
+ "x": {
30208
+ "enum": [
30209
+ "x",
30210
+ "x2"
30211
+ ],
30212
+ "type": "string"
30213
+ },
30214
+ "y": {
30215
+ "enum": [
30216
+ "y",
30217
+ "y2"
30218
+ ],
30219
+ "type": "string"
30220
+ }
30221
+ },
30222
+ "type": "object"
30223
+ },
29913
30224
  "value": {
29914
30225
  "type": "number"
29915
30226
  }
@@ -29926,10 +30237,10 @@
29926
30237
  "test": {
29927
30238
  "anyOf": [
29928
30239
  {
29929
- "$ref": "#/definitions/ParameterPredicate"
30240
+ "$ref": "#/definitions/SelectionPredicateDefinition"
29930
30241
  },
29931
30242
  {
29932
- "$ref": "#/definitions/SelectionUnionTest"
30243
+ "$ref": "#/definitions/NamedSelectionPredicateRef"
29933
30244
  }
29934
30245
  ]
29935
30246
  },
@@ -30158,6 +30469,27 @@
30158
30469
  "param": {
30159
30470
  "description": "Filter using a parameter name.",
30160
30471
  "type": "string"
30472
+ },
30473
+ "project": {
30474
+ "additionalProperties": false,
30475
+ "description": "Bind interval selection components to positional channels of this mark. For example, `{ \"x\": \"x2\" }` tests the selected x interval against x2 alone. Each selected component must be mapped when this is provided. The target must be an unconditional field encoding of the same data type.",
30476
+ "properties": {
30477
+ "x": {
30478
+ "enum": [
30479
+ "x",
30480
+ "x2"
30481
+ ],
30482
+ "type": "string"
30483
+ },
30484
+ "y": {
30485
+ "enum": [
30486
+ "y",
30487
+ "y2"
30488
+ ],
30489
+ "type": "string"
30490
+ }
30491
+ },
30492
+ "type": "object"
30161
30493
  }
30162
30494
  },
30163
30495
  "required": [
@@ -30263,6 +30595,37 @@
30263
30595
  ],
30264
30596
  "type": "object"
30265
30597
  },
30598
+ "PlainExprParameter": {
30599
+ "additionalProperties": false,
30600
+ "properties": {
30601
+ "description": {
30602
+ "description": "A description of the parameter. Can be used for documentation and to explain the meaning of the control or selection.",
30603
+ "type": "string"
30604
+ },
30605
+ "expr": {
30606
+ "description": "An expression for the value of the parameter. This expression may include other parameters, in which case the parameter will automatically update in response to upstream parameter changes.",
30607
+ "type": "string"
30608
+ },
30609
+ "name": {
30610
+ "description": "A unique name for the variable parameter. Parameter names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are: \"datum\".",
30611
+ "type": "string"
30612
+ },
30613
+ "persist": {
30614
+ "description": "Whether the parameter should be persisted in bookmarks and provenance.\n\nThis primarily affects GenomeSpy App behavior. Set to `false` for ephemeral params (e.g., hover selections) or when the selection cannot be persisted due to missing `encoding.key`.\n\n__Default value:__ `true`",
30615
+ "type": "boolean"
30616
+ },
30617
+ "push": {
30618
+ "const": "outer",
30619
+ "description": "Reuses the nearest same-named parameter in an ancestor scope and writes updates to it. Declare the target parameter on the ancestor first.\n\nThis is useful when interaction in a child view updates state owned by a composed view, such as a parameter that controls a shared scale.",
30620
+ "type": "string"
30621
+ }
30622
+ },
30623
+ "required": [
30624
+ "expr",
30625
+ "name"
30626
+ ],
30627
+ "type": "object"
30628
+ },
30266
30629
  "PlainValueParameter": {
30267
30630
  "additionalProperties": false,
30268
30631
  "properties": {
@@ -33643,7 +34006,7 @@
33643
34006
  "properties": {
33644
34007
  "axes": {
33645
34008
  "additionalProperties": false,
33646
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
34009
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
33647
34010
  "properties": {
33648
34011
  "x": {
33649
34012
  "additionalProperties": false,
@@ -34670,7 +35033,7 @@
34670
35033
  },
34671
35034
  "scales": {
34672
35035
  "additionalProperties": false,
34673
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
35036
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
34674
35037
  "properties": {
34675
35038
  "angle": {
34676
35039
  "$ref": "#/definitions/Scale"
@@ -36562,6 +36925,11 @@
36562
36925
  "SelectionFilterParams": {
36563
36926
  "additionalProperties": false,
36564
36927
  "properties": {
36928
+ "debounce": {
36929
+ "description": "Trailing-edge delay in milliseconds before requesting dataflow replay after a reactive expression dependency changes. Repeated changes restart the delay.\n\nParameter updates and incoming data are not delayed. Incoming batches use current parameter values, and a completed batch satisfies any pending reactive replay. The delay does not wait for independently scheduled lazy data loads.\n\n__Default value:__ no delay",
36930
+ "minimum": 0,
36931
+ "type": "number"
36932
+ },
36565
36933
  "description": {
36566
36934
  "description": "A description of the transform step. Can be used for documentation and agent context.",
36567
36935
  "type": "string"
@@ -36672,6 +37040,69 @@
36672
37040
  ],
36673
37041
  "type": "object"
36674
37042
  },
37043
+ "SelectionPredicateDefinition": {
37044
+ "anyOf": [
37045
+ {
37046
+ "$ref": "#/definitions/SelectionPredicateOperand"
37047
+ },
37048
+ {
37049
+ "$ref": "#/definitions/SelectionUnionTest"
37050
+ }
37051
+ ],
37052
+ "description": "A selection test; definitions cannot refer to other named predicates."
37053
+ },
37054
+ "SelectionPredicateOperand": {
37055
+ "anyOf": [
37056
+ {
37057
+ "$ref": "#/definitions/ParameterPredicate"
37058
+ },
37059
+ {
37060
+ "additionalProperties": false,
37061
+ "properties": {
37062
+ "and": {
37063
+ "items": {
37064
+ "$ref": "#/definitions/SelectionPredicateOperand"
37065
+ },
37066
+ "minItems": 1,
37067
+ "type": "array"
37068
+ }
37069
+ },
37070
+ "required": [
37071
+ "and"
37072
+ ],
37073
+ "type": "object"
37074
+ },
37075
+ {
37076
+ "additionalProperties": false,
37077
+ "properties": {
37078
+ "or": {
37079
+ "items": {
37080
+ "$ref": "#/definitions/SelectionPredicateOperand"
37081
+ },
37082
+ "minItems": 1,
37083
+ "type": "array"
37084
+ }
37085
+ },
37086
+ "required": [
37087
+ "or"
37088
+ ],
37089
+ "type": "object"
37090
+ },
37091
+ {
37092
+ "additionalProperties": false,
37093
+ "properties": {
37094
+ "not": {
37095
+ "$ref": "#/definitions/SelectionPredicateOperand"
37096
+ }
37097
+ },
37098
+ "required": [
37099
+ "not"
37100
+ ],
37101
+ "type": "object"
37102
+ }
37103
+ ],
37104
+ "description": "Selection predicates may be combined under a condition's `test` property."
37105
+ },
36675
37106
  "SelectionType": {
36676
37107
  "enum": [
36677
37108
  "point",
@@ -37700,18 +38131,13 @@
37700
38131
  {
37701
38132
  "anyOf": [
37702
38133
  {
37703
- "const": "forward",
37704
- "type": "string"
37705
- },
37706
- {
37707
- "const": "reverse",
37708
- "type": "string"
38134
+ "$ref": "#/definitions/ArrowDirection"
37709
38135
  },
37710
38136
  {
37711
38137
  "$ref": "#/definitions/ExprRef"
37712
38138
  }
37713
38139
  ],
37714
- "description": "Direction of the arrowhead. `\"forward\"` places the arrowhead at the secondary endpoint (`x2`, `y2`). `\"reverse\"` places it at the primary endpoint (`x`, `y`). For data-driven direction, use the `direction` encoding channel.\n\n__Default value:__ `\"forward\"`"
38140
+ "description": "Direction of the arrowhead. `\"forward\"` places the arrowhead at the secondary endpoint (`x2`, `y2`). `\"reverse\"` places it at the primary endpoint (`x`, `y`). `\"both\"` places equivalent heads at both endpoints and suppresses `headSpacing` and `startNotch` for that arrow. For data-driven direction, use the `direction` encoding channel.\n\n__Default value:__ `\"forward\"`"
37715
38141
  },
37716
38142
  {
37717
38143
  "$ref": "#/definitions/LegendDirection",
@@ -38123,7 +38549,7 @@
38123
38549
  "$ref": "#/definitions/ExprRef"
38124
38550
  }
38125
38551
  ],
38126
- "description": "Spacing between repeated arrowheads as a multiplier of resolved `size`. The effective spacing is at least the rendered arrowhead footprint, including stroke. If `null`, arrowheads are not repeated.\n\n__Default value:__ `null`"
38552
+ "description": "Spacing between repeated arrowheads as a multiplier of resolved `size`. The effective spacing is at least the rendered arrowhead footprint, including stroke. If `null`, arrowheads are not repeated. Repetition is suppressed when `direction` resolves to `\"both\"`.\n\n__Default value:__ `null`"
38127
38553
  },
38128
38554
  "headWidth": {
38129
38555
  "anyOf": [
@@ -38732,7 +39158,7 @@
38732
39158
  "$ref": "#/definitions/ExprRef"
38733
39159
  }
38734
39160
  ],
38735
- "description": "Whether to draw a notch at the start of the arrow. The start notch uses the same slope as the arrowhead edge.\n\n__Default value:__ `false`"
39161
+ "description": "Whether to draw a notch at the start of the arrow. The start notch uses the same slope as the arrowhead edge. It is suppressed when `direction` resolves to `\"both\"` because a bidirectional arrow has no unique start.\n\n__Default value:__ `false`"
38736
39162
  },
38737
39163
  "stem": {
38738
39164
  "anyOf": [
@@ -41136,6 +41562,9 @@
41136
41562
  {
41137
41563
  "$ref": "#/definitions/Displace1DParams"
41138
41564
  },
41565
+ {
41566
+ "$ref": "#/definitions/Displace2DParams"
41567
+ },
41139
41568
  {
41140
41569
  "$ref": "#/definitions/FlattenDelimitedParams"
41141
41570
  },
@@ -41210,6 +41639,42 @@
41210
41639
  }
41211
41640
  ]
41212
41641
  },
41642
+ "TransitionedExprParameter": {
41643
+ "additionalProperties": false,
41644
+ "properties": {
41645
+ "description": {
41646
+ "description": "A description of the parameter. Can be used for documentation and to explain the meaning of the control or selection.",
41647
+ "type": "string"
41648
+ },
41649
+ "expr": {
41650
+ "description": "An expression for the value of the parameter. This expression may include other parameters, in which case the parameter will automatically update in response to upstream parameter changes.",
41651
+ "type": "string"
41652
+ },
41653
+ "name": {
41654
+ "description": "A unique name for the variable parameter. Parameter names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are: \"datum\".",
41655
+ "type": "string"
41656
+ },
41657
+ "persist": {
41658
+ "description": "Whether the parameter should be persisted in bookmarks and provenance.\n\nThis primarily affects GenomeSpy App behavior. Set to `false` for ephemeral params (e.g., hover selections) or when the selection cannot be persisted due to missing `encoding.key`.\n\n__Default value:__ `true`",
41659
+ "type": "boolean"
41660
+ },
41661
+ "push": {
41662
+ "const": "outer",
41663
+ "description": "Reuses the nearest same-named parameter in an ancestor scope and writes updates to it. Declare the target parameter on the ancestor first.\n\nThis is useful when interaction in a child view updates state owned by a composed view, such as a parameter that controls a shared scale.",
41664
+ "type": "string"
41665
+ },
41666
+ "transition": {
41667
+ "$ref": "#/definitions/ParamTransition",
41668
+ "description": "Smoothly follows numeric expression output values."
41669
+ }
41670
+ },
41671
+ "required": [
41672
+ "expr",
41673
+ "name",
41674
+ "transition"
41675
+ ],
41676
+ "type": "object"
41677
+ },
41213
41678
  "TransitionedMultiscaleStops": {
41214
41679
  "additionalProperties": false,
41215
41680
  "properties": {
@@ -41355,7 +41820,7 @@
41355
41820
  "properties": {
41356
41821
  "axes": {
41357
41822
  "additionalProperties": false,
41358
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
41823
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
41359
41824
  "properties": {
41360
41825
  "x": {
41361
41826
  "additionalProperties": false,
@@ -42345,6 +42810,13 @@
42345
42810
  },
42346
42811
  "type": "array"
42347
42812
  },
42813
+ "predicates": {
42814
+ "additionalProperties": {
42815
+ "$ref": "#/definitions/SelectionPredicateDefinition"
42816
+ },
42817
+ "description": "Define a selection test once instead of repeating it across this unit's conditional encodings, including conditional draw order. Use `test: { ref: \"name\" }` in a condition to reference it.\n\nDefinitions are local to this unit and are not inherited. An inherited encoding may reference a name if each consuming unit defines it. Selection parameters and projected channels resolve in this unit. Filter transforms do not use these definitions.",
42818
+ "type": "object"
42819
+ },
42348
42820
  "resolve": {
42349
42821
  "additionalProperties": false,
42350
42822
  "description": "Specifies how scales, axes, and legends are [resolved](https://genomespy.app/docs/grammar/composition/#scale-axis-and-legend-resolution) in the view hierarchy.\n\nIf legend resolution is not configured explicitly, it follows the corresponding scale resolution.",
@@ -42363,7 +42835,7 @@
42363
42835
  },
42364
42836
  "scales": {
42365
42837
  "additionalProperties": false,
42366
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
42838
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
42367
42839
  "properties": {
42368
42840
  "angle": {
42369
42841
  "$ref": "#/definitions/Scale"
@@ -42707,7 +43179,7 @@
42707
43179
  },
42708
43180
  "axes": {
42709
43181
  "additionalProperties": false,
42710
- "description": "Defines properties for axis resolutions used by this view subtree.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
43182
+ "description": "Defines properties for axis resolutions used by this view subtree. When a positional scale is declared at the view level, an axis can be created explicitly by declaring the corresponding channel here.\n\nUse this when a composed view shares an axis across child views and the axis settings belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error.",
42711
43183
  "properties": {
42712
43184
  "x": {
42713
43185
  "additionalProperties": false,
@@ -43700,7 +44172,7 @@
43700
44172
  },
43701
44173
  "scales": {
43702
44174
  "additionalProperties": false,
43703
- "description": "Defines properties for scale resolutions used by this view subtree.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
44175
+ "description": "Defines properties for scale resolutions used by this view subtree. A scale declaration does not create an axis; declare the corresponding `axes` property when an axis is needed without a positional encoding.\n\nUse this when a composed view shares a scale across child views and the scale settings, such as the visible domain, belong to the composed view rather than an individual encoding. An ancestor declaration shadows the whole declaration of a descendant that targets the same resolution. Declarations in separate sibling subtrees are ambiguous and cause an error. Expression references in these scale properties use this view's parameter scope and can access parameters declared here or on ancestors.",
43704
44176
  "properties": {
43705
44177
  "angle": {
43706
44178
  "$ref": "#/definitions/Scale"