@jbrowse/wiggle-core 5.0.0-beta.1 → 5.0.0-beta.10

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 (73) hide show
  1. package/README.md +76 -107
  2. package/esm/AutoscaleGroupDialog.d.ts +7 -0
  3. package/esm/AutoscaleGroupDialog.js +26 -0
  4. package/esm/ScoreAxisMixin.d.ts +134 -0
  5. package/esm/ScoreAxisMixin.js +213 -0
  6. package/esm/ScoreFieldConfigMixin.d.ts +72 -0
  7. package/esm/ScoreFieldConfigMixin.js +25 -0
  8. package/esm/ScorePlotChrome.d.ts +45 -0
  9. package/esm/ScorePlotChrome.js +47 -0
  10. package/esm/ScorePlotSvgFrame.d.ts +27 -0
  11. package/esm/ScorePlotSvgFrame.js +23 -0
  12. package/esm/ScoreScaleMixin.d.ts +113 -50
  13. package/esm/ScoreScaleMixin.js +148 -70
  14. package/esm/SetMinMaxDialog.d.ts +3 -2
  15. package/esm/SetMinMaxDialog.js +20 -6
  16. package/esm/SetScoreRulesDialog.d.ts +14 -0
  17. package/esm/SetScoreRulesDialog.js +45 -0
  18. package/esm/WiggleScoreConfigMixin.d.ts +89 -0
  19. package/esm/WiggleScoreConfigMixin.js +54 -0
  20. package/esm/autoscale.d.ts +54 -14
  21. package/esm/autoscale.js +105 -180
  22. package/esm/autoscaleGroup.d.ts +30 -0
  23. package/esm/autoscaleGroup.js +97 -0
  24. package/esm/chrome.d.ts +5 -0
  25. package/esm/chrome.js +7 -0
  26. package/esm/computeYTicks.d.ts +1 -1
  27. package/esm/computeYTicks.js +4 -3
  28. package/esm/constants.d.ts +1 -2
  29. package/esm/constants.js +1 -10
  30. package/esm/dataTypes.d.ts +4 -6
  31. package/esm/displayModel.d.ts +1 -2
  32. package/esm/gapBreak.d.ts +2 -3
  33. package/esm/gapBreak.js +2 -3
  34. package/esm/index.d.ts +24 -25
  35. package/esm/index.js +20 -18
  36. package/esm/normalize.d.ts +1 -26
  37. package/esm/normalize.js +1 -86
  38. package/esm/pointMarker.d.ts +7 -2
  39. package/esm/pointMarker.js +14 -18
  40. package/esm/pointSizeMenu.d.ts +30 -11
  41. package/esm/pointSizeMenu.js +42 -19
  42. package/esm/renderingBackendTypes.d.ts +13 -4
  43. package/esm/renderingBackendTypes.js +4 -1
  44. package/esm/rowLabelOffset.d.ts +8 -0
  45. package/esm/rowLabelOffset.js +16 -0
  46. package/esm/scale.d.ts +12 -8
  47. package/esm/scale.js +27 -14
  48. package/esm/scoreFieldConfigSchemaFields.d.ts +10 -0
  49. package/esm/scoreFieldConfigSchemaFields.js +8 -0
  50. package/esm/scoreMenuItems.d.ts +35 -16
  51. package/esm/scoreMenuItems.js +95 -62
  52. package/esm/scoreRuleMarks.d.ts +14 -39
  53. package/esm/scoreRuleMarks.js +12 -45
  54. package/esm/transferables.js +4 -9
  55. package/esm/valueScaleConfigSchema.d.ts +253 -0
  56. package/esm/valueScaleConfigSchema.js +270 -0
  57. package/esm/visibleStatsDomain.d.ts +20 -8
  58. package/esm/visibleStatsDomain.js +32 -27
  59. package/esm/wiggleRenderModes.generated.d.ts +1 -2
  60. package/esm/wiggleRenderModes.generated.js +1 -2
  61. package/package.json +14 -9
  62. package/esm/CrossHatches.d.ts +0 -11
  63. package/esm/CrossHatches.js +0 -32
  64. package/esm/ScoreRules.d.ts +0 -11
  65. package/esm/ScoreRules.js +0 -37
  66. package/esm/YScaleBar.d.ts +0 -6
  67. package/esm/YScaleBar.js +0 -46
  68. package/esm/YScaleBarOverlay.d.ts +0 -6
  69. package/esm/YScaleBarOverlay.js +0 -24
  70. package/esm/scoreAxisConfigSchemaFields.d.ts +0 -44
  71. package/esm/scoreAxisConfigSchemaFields.js +0 -54
  72. package/esm/yScaleTicks.d.ts +0 -59
  73. package/esm/yScaleTicks.js +0 -59
@@ -0,0 +1,72 @@
1
+ import type { ScoreFieldConfigModel } from './scoreFieldConfigSchemaFields.ts';
2
+ export interface ScoreFieldConfigHost {
3
+ configuration: ScoreFieldConfigModel;
4
+ }
5
+ /**
6
+ * #stateModel ScoreFieldConfigMixin
7
+ * #category display
8
+ *
9
+ * `WiggleScoreConfigMixin` plus `scoreField`, for a display that plots one
10
+ * configured feature field and so declares `scoreFieldConfigSchemaFields`:
11
+ * the wiggle display. `LinearMarkDisplay` names a field per mark and composes
12
+ * the base instead.
13
+ */
14
+ export declare function ScoreFieldConfigMixin(): import("@jbrowse/mobx-state-tree").IModelType<Omit<{}, never>, {
15
+ readonly scaleType: string;
16
+ readonly scaleZero: boolean;
17
+ readonly manualMinScore: number | undefined;
18
+ readonly manualMaxScore: number | undefined;
19
+ readonly defaultScoreDomain: [number | undefined, number | undefined];
20
+ readonly valueScales: import("@jbrowse/display-ui").ValueScale[];
21
+ readonly autoscaleGroup: string | undefined;
22
+ readonly autoscaleRange: [number, number] | undefined;
23
+ } & {
24
+ readonly axisReachesZero: boolean;
25
+ } & {
26
+ readonly autoscaledDomain: [number, number] | undefined;
27
+ readonly minScoreBound: number | undefined;
28
+ readonly maxScoreBound: number | undefined;
29
+ readonly hasManualScoreBounds: boolean;
30
+ readonly axes: import("@jbrowse/display-ui").YAxis[];
31
+ } & {
32
+ unclippedQuantile: number | undefined;
33
+ } & {
34
+ readonly scaleType: string;
35
+ readonly scaleZero: boolean;
36
+ readonly domainQuantile: number;
37
+ readonly clipQuantile: number;
38
+ readonly symlogConstant: number;
39
+ readonly manualMinScore: number | undefined;
40
+ readonly manualMaxScore: number | undefined;
41
+ readonly valueScaleNotices: string[];
42
+ readonly autoscaleGroup: string | undefined;
43
+ readonly scaleTitle: string;
44
+ readonly grid: boolean;
45
+ readonly minimalTicks: boolean;
46
+ readonly scoreRulesDrawn: boolean;
47
+ readonly scoreRules: import("@jbrowse/display-ui").ValueScaleRule[];
48
+ } & {
49
+ setScaleType(scaleType: string): void;
50
+ setScaleZero(zero: boolean): void;
51
+ setDomainQuantile(quantile: number): void;
52
+ setMinScore(val?: number): void;
53
+ setMaxScore(val?: number): void;
54
+ setAutoscaleGroup(group?: string): void;
55
+ setGrid(grid: boolean): void;
56
+ setScoreRules(rules: (number | import("@jbrowse/display-ui").ValueScaleRule)[]): void;
57
+ } & {
58
+ readonly size: number;
59
+ readonly isDensityMode: boolean;
60
+ } & {
61
+ readonly axisReachesZero: boolean;
62
+ } & {
63
+ setSize(val?: number): void;
64
+ } & {
65
+ /**
66
+ * #getter
67
+ * The feature field the worker plots on the score axis, `score` by
68
+ * default. A fetch input: every composing display carries it in its
69
+ * `rpcProps()`, since the field is read where the features are.
70
+ */
71
+ readonly scoreField: string;
72
+ }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>;
@@ -0,0 +1,25 @@
1
+ import { getConf } from '@jbrowse/core/configuration';
2
+ import { WiggleScoreConfigMixin } from './WiggleScoreConfigMixin.js';
3
+ const confNode = (self) => self;
4
+ /**
5
+ * #stateModel ScoreFieldConfigMixin
6
+ * #category display
7
+ *
8
+ * `WiggleScoreConfigMixin` plus `scoreField`, for a display that plots one
9
+ * configured feature field and so declares `scoreFieldConfigSchemaFields`:
10
+ * the wiggle display. `LinearMarkDisplay` names a field per mark and composes
11
+ * the base instead.
12
+ */
13
+ export function ScoreFieldConfigMixin() {
14
+ return WiggleScoreConfigMixin().views(self => ({
15
+ /**
16
+ * #getter
17
+ * The feature field the worker plots on the score axis, `score` by
18
+ * default. A fetch input: every composing display carries it in its
19
+ * `rpcProps()`, since the field is read where the features are.
20
+ */
21
+ get scoreField() {
22
+ return getConf(confNode(self), 'scoreField');
23
+ },
24
+ }));
25
+ }
@@ -0,0 +1,45 @@
1
+ import type { ContextMenuAnchor, MenuItem, MouseState } from '@jbrowse/core/ui';
2
+ import type { ChromeModel } from '@jbrowse/display-kit/DisplayChrome';
3
+ import type { Mark } from '@jbrowse/render-core/marks';
4
+ import type { PerRegionRenderingBackend } from '@jbrowse/render-core/perRegionRenderingBackend';
5
+ import type { FrameDimensions } from '@jbrowse/render-core/renderingBackendBase';
6
+ import type { RenderLifecycleModel } from '@jbrowse/render-core/useRenderingBackend';
7
+ import type { ReactNode } from 'react';
8
+ interface PlotBox {
9
+ yTop: number;
10
+ plotHeight: number;
11
+ }
12
+ interface ContextMenuView {
13
+ contextMenuInfo?: ContextMenuAnchor;
14
+ contextMenuItems: () => MenuItem[];
15
+ closeContextMenu: () => void;
16
+ }
17
+ export interface ScorePlotContextMenuHost<Hit> extends ContextMenuView {
18
+ openContextMenu: (info: ContextMenuAnchor & {
19
+ hit: Hit;
20
+ }) => void;
21
+ clearHoveredFeature: () => void;
22
+ }
23
+ export type ScorePlotChromeModel<Hit, TRegion, TState extends FrameDimensions> = ChromeModel & RenderLifecycleModel<PerRegionRenderingBackend<TRegion, TState>> & {
24
+ canvasWidthPx: number;
25
+ setHoveredFeature: (hit?: Hit) => void;
26
+ selectFeature: (hit: Hit) => void;
27
+ };
28
+ /**
29
+ * The on-screen chrome of a display drawing a mark list on a score axis: the
30
+ * canvas in the axis plot box, hover and click resolved through `findHit`, the
31
+ * pointer-following `tooltip`, and the right-click menu where `contextMenu`
32
+ * names the model that owns it. `findHit` takes y from the plot's own top.
33
+ */
34
+ export declare const ScorePlotChrome: <Hit, TRegion, TState extends FrameDimensions>({ model, marks, testid, plotGeometry, findHit, tooltip, overlay, indicators, contextMenu, }: {
35
+ model: ScorePlotChromeModel<Hit, TRegion, TState>;
36
+ marks: readonly Mark<TRegion, TState>[];
37
+ testid: string;
38
+ plotGeometry?: PlotBox;
39
+ findHit: (x: number, y: number) => Hit | undefined;
40
+ tooltip: (mouseState: MouseState | undefined) => ReactNode;
41
+ overlay?: (plotGeometry: PlotBox) => ReactNode;
42
+ indicators?: () => ReactNode;
43
+ contextMenu?: ScorePlotContextMenuHost<Hit>;
44
+ }) => import("react").JSX.Element;
45
+ export {};
@@ -0,0 +1,47 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { eventPoint } from '@jbrowse/core/util/eventPoint';
4
+ import BottomRightIndicators from '@jbrowse/display-kit/BottomRightIndicators';
5
+ import DisplayChrome from '@jbrowse/display-kit/DisplayChrome';
6
+ import { DisplayContextMenu, openContextMenuFromEvent, } from '@jbrowse/display-kit/DisplayContextMenu';
7
+ import { PointerLayer, axisPlotBox } from '@jbrowse/display-ui';
8
+ import { createMarkBackend } from '@jbrowse/render-core/marks/backend';
9
+ import { observer } from 'mobx-react';
10
+ /**
11
+ * The on-screen chrome of a display drawing a mark list on a score axis: the
12
+ * canvas in the axis plot box, hover and click resolved through `findHit`, the
13
+ * pointer-following `tooltip`, and the right-click menu where `contextMenu`
14
+ * names the model that owns it. `findHit` takes y from the plot's own top.
15
+ */
16
+ export const ScorePlotChrome = observer(function ScorePlotChrome({ model, marks, testid, plotGeometry, findHit, tooltip, overlay, indicators, contextMenu, }) {
17
+ const { height, canvasWidthPx: width } = model;
18
+ const box = plotGeometry ?? axisPlotBox(height);
19
+ const factory = useMemo(() => (canvas) => createMarkBackend(canvas, marks), [marks]);
20
+ const hitAt = (x, y) => findHit(x, y - box.yTop);
21
+ return (_jsx(DisplayChrome, { model: model, factory: factory, testid: testid, style: { width, whiteSpace: 'nowrap', textAlign: 'left' }, onPointerPosition: state => {
22
+ model.setHoveredFeature(state ? hitAt(state.x, state.y) : undefined);
23
+ }, onClick: event => {
24
+ const { x, y } = eventPoint(event);
25
+ const hit = hitAt(x, y);
26
+ if (hit) {
27
+ model.selectFeature(hit);
28
+ }
29
+ }, onContextMenu: contextMenu
30
+ ? event => {
31
+ const { x, y } = eventPoint(event);
32
+ const hit = hitAt(x, y);
33
+ openContextMenuFromEvent(contextMenu, event, hit
34
+ ? { clientX: event.clientX, clientY: event.clientY, hit }
35
+ : undefined);
36
+ }
37
+ : undefined, children: ({ canvasRef, mouseTracker }) => (_jsx(ScorePlotBody, { canvasRef: canvasRef, mouseTracker: mouseTracker, width: width, plotGeometry: box, tooltip: tooltip, overlay: overlay, indicators: indicators, contextMenu: contextMenu })) }));
38
+ });
39
+ const ScorePlotBody = observer(function ScorePlotBody({ canvasRef, mouseTracker, width, plotGeometry, tooltip, overlay, indicators, contextMenu, }) {
40
+ return (_jsxs(_Fragment, { children: [_jsx("canvas", { ref: canvasRef, style: {
41
+ width,
42
+ height: plotGeometry.plotHeight,
43
+ position: 'absolute',
44
+ left: 0,
45
+ top: plotGeometry.yTop,
46
+ } }), overlay?.(plotGeometry), _jsx(PointerLayer, { mouseTracker: mouseTracker, children: tooltip }), indicators ? (_jsx(BottomRightIndicators, { children: indicators() })) : null, contextMenu ? _jsx(DisplayContextMenu, { model: contextMenu }) : null] }));
47
+ });
@@ -0,0 +1,27 @@
1
+ import type { SvgExportable } from '@jbrowse/core/svg/svgReady';
2
+ import type { LgvSvgBodyProps } from '@jbrowse/display-kit/renderDisplaySvg';
3
+ import type { Mark, MarkFrame } from '@jbrowse/render-core/marks';
4
+ import type React from 'react';
5
+ export interface ScorePlotSvgModel extends SvgExportable {
6
+ id: string;
7
+ height: number;
8
+ }
9
+ /**
10
+ * The SVG-export body of a display with a score axis, mounted through
11
+ * `renderDisplaySvg`, which draws the axis and cross-hatches. Paints `marks`
12
+ * over `regions` inside the plot box, at the export's width and the box's
13
+ * height — the two fields of `renderState` the on-screen canvas sizes
14
+ * differently. `plotGeometry` defaults to the single-plot box `ScorePlotChrome`
15
+ * draws in; multi-wiggle stacks its rows over the full height instead.
16
+ * `children` draw over the plot, in the same untranslated space as the axis.
17
+ */
18
+ export declare function ScorePlotSvgFrame<TRegion, TState extends MarkFrame>({ height, canvasWidth, renderBlocks, opts, plotGeometry, marks, regions, renderState, children, }: LgvSvgBodyProps<ScorePlotSvgModel> & {
19
+ plotGeometry?: {
20
+ yTop: number;
21
+ plotHeight: number;
22
+ };
23
+ marks: readonly Mark<TRegion, TState>[];
24
+ regions: ReadonlyMap<number, TRegion>;
25
+ renderState: TState;
26
+ children?: React.ReactNode;
27
+ }): React.JSX.Element;
@@ -0,0 +1,23 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { PaintLayer } from '@jbrowse/core/util/paintLayer';
3
+ import { axisPlotBox } from '@jbrowse/display-ui';
4
+ import { paintMarkBlocks } from '@jbrowse/render-core/marks';
5
+ /**
6
+ * The SVG-export body of a display with a score axis, mounted through
7
+ * `renderDisplaySvg`, which draws the axis and cross-hatches. Paints `marks`
8
+ * over `regions` inside the plot box, at the export's width and the box's
9
+ * height — the two fields of `renderState` the on-screen canvas sizes
10
+ * differently. `plotGeometry` defaults to the single-plot box `ScorePlotChrome`
11
+ * draws in; multi-wiggle stacks its rows over the full height instead.
12
+ * `children` draw over the plot, in the same untranslated space as the axis.
13
+ */
14
+ export function ScorePlotSvgFrame({ height, canvasWidth, renderBlocks, opts, plotGeometry = axisPlotBox(height), marks, regions, renderState, children, }) {
15
+ const { yTop, plotHeight } = plotGeometry;
16
+ return (_jsxs(_Fragment, { children: [_jsx("g", { transform: `translate(0,${yTop})`, children: _jsx(PaintLayer, { width: canvasWidth, height: plotHeight, opts: opts, paint: ctx => {
17
+ paintMarkBlocks(ctx, marks, regions, renderBlocks, {
18
+ ...renderState,
19
+ canvasWidth,
20
+ canvasHeight: plotHeight,
21
+ });
22
+ } }) }), children] }));
23
+ }
@@ -1,90 +1,135 @@
1
- import type { ScoreAxisConfigModel } from './scoreAxisConfigSchemaFields.ts';
1
+ import type { scalesSchema } from './valueScaleConfigSchema.ts';
2
+ import type { ConfigModelForFields } from '@jbrowse/core/configuration';
3
+ import type { ValueScaleRule } from '@jbrowse/display-ui';
2
4
  /**
3
- * The whole of what `ScoreScaleMixin` needs a composing display to be. Exported
5
+ * The whole of what `ScoreScaleMixin` needs a composing display to be: a
6
+ * `scales` object holding the `y` the value-scale factory built. Exported
4
7
  * because it is the mixin's contract and `ScoreScaleMixin.test.ts` pins it:
5
8
  * widen it and the `@ts-expect-error`s there go unused.
6
9
  */
7
10
  export interface ScoreScaleHost {
8
- configuration: ScoreAxisConfigModel;
11
+ configuration: ConfigModelForFields<{
12
+ scales: ReturnType<typeof scalesSchema>;
13
+ }>;
9
14
  }
10
15
  /**
11
16
  * #stateModel ScoreScaleMixin
12
17
  * #category display
13
- * #crossCuttingMixin Score axis. Nothing — the config slots. Brings `scaleType` / `autoscaleType` / `minScore` / `maxScore` / `*Bound` / `numStdDev` and their setters, i.e. the whole `ScoreScaleModel` interface the shared score menu and `SetMinMaxDialog` consume
18
+ * #crossCuttingMixin Value scale, written in `scales.y`. `valueScaleSchema` / `scalesSchema`. Brings `ScoreAxisMixin` plus `scaleType` / `scaleZero` / `domainQuantile` / `clipQuantile` / `symlogConstant` / `manual*` and their setters, i.e. the whole `ScoreScaleModel` interface the shared score menu and `SetMinMaxDialog` consume
14
19
  *
15
- * The score axis every quantitative display shares: which scale, how to
16
- * autoscale it, and the manual min/max bounds. This is the runtime half of
17
- * {@link ScoreScaleModel} in `scoreMenuItems.ts` — that interface is what the
18
- * shared Score menu, the autoscale/scale submenus and `SetMinMaxDialog` consume,
19
- * and it was already the canonical contract while two displays hand-wrote
20
- * identical implementations of it (`WiggleScoreConfigMixin`, and the alignments
21
- * coverage band). Composing this is now how a display satisfies it, so a new
22
- * score display cannot satisfy it *partially*.
20
+ * The value scale of every quantitative display: wiggle, the alignments
21
+ * coverage band and the mark display, Manhattan among them, each declare
22
+ * `scales.y` through {@link valueScaleSchema} and compose this. It backs
23
+ * {@link ScoreAxisMixin}'s three overridable members off that object and adds
24
+ * the setters that write it, so composing this is how a display satisfies
25
+ * {@link ScoreScaleModel} in `scoreMenuItems.ts` — the interface the shared
26
+ * Score menu, the scale and autoscale submenus and `SetMinMaxDialog` consume.
23
27
  *
24
- * Deliberately just the axis. Colors, `resolution`, cross-hatches and the
25
- * autoscale *computation* stay in `WiggleScoreConfigMixin` / `WiggleCommonMixin`
26
- * — the alignments coverage band shares this axis but none of the rest.
27
- *
28
- * `minScore`/`maxScore` are the **raw** slot values with their
29
- * `Number.MIN_VALUE`/`Number.MAX_VALUE` "unset" sentinels intact, because that
30
- * is what the dialog round-trips; `minScoreBound`/`maxScoreBound` are the
31
- * resolved bounds, where `undefined` means "autoscale this end". Every consumer
32
- * that computes a domain reads the `*Bound` pair.
28
+ * Deliberately just the scale and the guides it owns. Colors, `resolution`
29
+ * and the autoscale *computation* stay in `WiggleScoreConfigMixin` /
30
+ * `WiggleCommonMixin` — the alignments coverage band shares this scale but
31
+ * none of the rest.
33
32
  */
34
33
  export declare function ScoreScaleMixin(): import("@jbrowse/mobx-state-tree").IModelType<{}, {
34
+ readonly scaleType: string;
35
+ readonly scaleZero: boolean;
36
+ readonly manualMinScore: number | undefined;
37
+ readonly manualMaxScore: number | undefined;
38
+ readonly defaultScoreDomain: [number | undefined, number | undefined];
39
+ readonly valueScales: import("@jbrowse/display-ui").ValueScale[];
40
+ readonly autoscaleGroup: string | undefined;
41
+ readonly autoscaleRange: [number, number] | undefined;
42
+ } & {
43
+ readonly axisReachesZero: boolean;
44
+ } & {
45
+ readonly autoscaledDomain: [number, number] | undefined;
46
+ readonly minScoreBound: number | undefined;
47
+ readonly maxScoreBound: number | undefined;
48
+ readonly hasManualScoreBounds: boolean;
49
+ readonly axes: import("@jbrowse/display-ui").YAxis[];
50
+ } & {
51
+ unclippedQuantile: number | undefined;
52
+ } & {
35
53
  /**
36
54
  * #getter
37
55
  */
38
56
  readonly scaleType: string;
39
57
  /**
40
58
  * #getter
59
+ * `scales.y.zero`: whether an autoscaled linear or symlog axis reaches
60
+ * 0.
41
61
  */
42
- readonly autoscaleType: string;
62
+ readonly scaleZero: boolean;
43
63
  /**
44
64
  * #getter
65
+ * `scales.y.domainQuantile`: what an unpinned end follows, 1 the
66
+ * extremes and below it that quantile of each sign.
45
67
  */
46
- readonly numStdDev: number;
68
+ readonly domainQuantile: number;
47
69
  /**
48
70
  * #getter
49
- * Raw slot value, sentinel intact — see the class comment.
71
+ * The quantile "Clip outliers" clips at: the one an untick this session
72
+ * wrote over, else the scale's own default where that is below 1, else
73
+ * 0.99.
50
74
  */
51
- readonly minScore: number;
75
+ readonly clipQuantile: number;
52
76
  /**
53
77
  * #getter
54
- * Raw slot value, sentinel intact — see the class comment.
78
+ * Raw slot; `0` means "derive from the domain". Resolve it with
79
+ * `resolveSymlogConstant` once the domain is known.
55
80
  */
56
- readonly maxScore: number;
81
+ readonly symlogConstant: number;
57
82
  /**
58
83
  * #getter
59
- * Overridable hook: what each end of the domain falls back to where the
60
- * config leaves its bound unset. `[undefined, undefined]` — the default —
61
- * means autoscale both ends, which is right for a track whose scores have
62
- * no absolute meaning (a bigwig's units are its own).
63
- *
64
- * A display whose scores are bounded *by construction* overrides it, so
65
- * the axis stops being a function of what happens to be on screen: GC
66
- * content is a fraction, so 0 and 1 are its real limits and mean the same
67
- * thing at every locus. Autoscaled, the same GC value drew at different
68
- * heights depending on where the user had panned, and the track could not
69
- * be read across loci.
70
- *
71
- * A hook rather than a config default because the answer can depend on
72
- * display state — GC's does, on `gcMode` — and rather than each display
73
- * re-resolving the sentinels below, which is the one thing that must not
74
- * be duplicated: config bounds still win, precisely because they are
75
- * checked before this is consulted.
84
+ * The lower bound the config pins, `undefined` where it pins none.
76
85
  */
77
- readonly defaultScoreDomain: [number | undefined, number | undefined];
86
+ readonly manualMinScore: number | undefined;
78
87
  /**
79
88
  * #getter
80
- * Resolved lower bound; `undefined` means autoscale this end.
89
+ * The upper bound the config pins, `undefined` where it pins none.
81
90
  */
82
- readonly minScoreBound: number | undefined;
91
+ readonly manualMaxScore: number | undefined;
83
92
  /**
84
93
  * #getter
85
- * Resolved upper bound; `undefined` means autoscale this end.
94
+ * What `scales.y`'s ends say together that the axis cannot draw as
95
+ * written, as corner-notice lines, by the rule a colour ramp's ends
96
+ * answer to. The mark display reports them through its rule list.
86
97
  */
87
- readonly maxScoreBound: number | undefined;
98
+ readonly valueScaleNotices: string[];
99
+ /**
100
+ * #getter
101
+ * `scales.y.autoscaleGroup`, `undefined` while it names none.
102
+ */
103
+ readonly autoscaleGroup: string | undefined;
104
+ /**
105
+ * #getter
106
+ * `scales.y.title`, `''` while unset
107
+ */
108
+ readonly scaleTitle: string;
109
+ /**
110
+ * #getter
111
+ * `scales.y.grid`
112
+ */
113
+ readonly grid: boolean;
114
+ /**
115
+ * #getter
116
+ * `scales.y.minimalTicks`
117
+ */
118
+ readonly minimalTicks: boolean;
119
+ /**
120
+ * #getter
121
+ * Whether this display draws `scales.y.rules`, which is whether the
122
+ * score menu offers the reference lines: a scale it places y through
123
+ * rules a band for them to cross, which a density plot's colour-mapped
124
+ * rows and a colour ramp do not.
125
+ */
126
+ readonly scoreRulesDrawn: boolean;
127
+ /**
128
+ * #getter
129
+ * `scales.y.rules`, read off the live nodes: a snapshot strips a slot at
130
+ * its default, and a rule at 0 is one.
131
+ */
132
+ readonly scoreRules: ValueScaleRule[];
88
133
  } & {
89
134
  /**
90
135
  * #action
@@ -93,7 +138,11 @@ export declare function ScoreScaleMixin(): import("@jbrowse/mobx-state-tree").IM
93
138
  /**
94
139
  * #action
95
140
  */
96
- setAutoscale(val?: string): void;
141
+ setScaleZero(zero: boolean): void;
142
+ /**
143
+ * #action
144
+ */
145
+ setDomainQuantile(quantile: number): void;
97
146
  /**
98
147
  * #action
99
148
  */
@@ -102,4 +151,18 @@ export declare function ScoreScaleMixin(): import("@jbrowse/mobx-state-tree").IM
102
151
  * #action
103
152
  */
104
153
  setMaxScore(val?: number): void;
154
+ /**
155
+ * #action
156
+ */
157
+ setAutoscaleGroup(group?: string): void;
158
+ /**
159
+ * #action
160
+ */
161
+ setGrid(grid: boolean): void;
162
+ /**
163
+ * #action
164
+ * Replaces `scales.y.rules` whole, each entry in a form the config
165
+ * takes: a number, or `{ value, color, label }`.
166
+ */
167
+ setScoreRules(rules: (number | ValueScaleRule)[]): void;
105
168
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>;